{"version":3,"file":"map.d26132c6.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/maps/components/MapContext.tsx","webpack://@finviz/website/./js/app/maps/components/Search.tsx","webpack://@finviz/website/./js/app/maps/components/Topbar/Expand.tsx","webpack://@finviz/website/./js/app/maps/components/Topbar/Share.tsx","webpack://@finviz/website/./js/app/maps/components/Topbar/Topbar.tsx","webpack://@finviz/website/./js/app/maps/hooks/use-map-data.ts","webpack://@finviz/website/./js/app/maps/hooks/use-map-type.ts","webpack://@finviz/website/./js/app/maps/components/MapTypeList.tsx","webpack://@finviz/website/./js/app/maps/App.tsx","webpack://@finviz/website/./js/app/maps/treemap-canvas.tsx","webpack://@finviz/website/./js/app/maps/treemap-small.tsx","webpack://@finviz/website/./js/app/shared/components/Ads.tsx","webpack://@finviz/website/./js/app/shared/components/Share.tsx","webpack://@finviz/website/./js/app/shared/drawShareMap.ts","webpack://@finviz/website/./js/app/shared/parseJSONFromScript.ts","webpack://@finviz/website/./js/main/components/delayed.tsx","webpack://@finviz/website/./js/main/components/loading.tsx","webpack://@finviz/website/./js/main/components/notification/hooks.ts","webpack://@finviz/website/./js/main/components/notification/notification-wrapper.tsx","webpack://@finviz/website/./js/main/components/notification/with-notification-context.tsx","webpack://@finviz/website/./js/main/components/notification/notification.tsx","webpack://@finviz/website/./js/main/hooks/useVisualViewport.ts"],"sourcesContent":["import * as React from 'react'\r\nimport { BrowserRouter } from 'react-router-dom'\r\n\r\nimport { Loading } from '../../../main/components/loading'\r\nimport { QueryClientContext } from '../../shared/components/QueryClientContext'\r\nimport { MapContextProvider } from './Map'\r\n\r\nexport function MapContext(props: React.PropsWithChildren) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n }\r\n >\r\n {props.children}\r\n \r\n \r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonHTMLProps, ButtonProps } from '../../../main/components/button'\r\nimport { Input, InputHTMLProps, InputProps } from '../../../main/components/input'\r\nimport MapActionCreators from '../store/action-creators'\r\nimport { MapDataNode } from '../types'\r\nimport { useMapContext } from './Map'\r\n\r\nfunction filterItems(stocks: MapDataNode[] = [], input: string) {\r\n return stocks\r\n .filter(function (stock) {\r\n return stock.name.indexOf(input) === 0 || (stock.description || '').toUpperCase().indexOf(input) === 0\r\n })\r\n .sort(function (a, b) {\r\n if (a.name === b.name) {\r\n return 0\r\n }\r\n return a.name < b.name ? -1 : 1\r\n })\r\n .slice(0, 10)\r\n}\r\n\r\nexport function useSearch() {\r\n const { treemap } = useMapContext()\r\n const [value, setValue] = React.useState('')\r\n const [results, setResults] = React.useState(filterItems(treemap?.nodes, ''))\r\n\r\n React.useEffect(() => {\r\n if (treemap) {\r\n setResults(filterItems(treemap.nodes, ''))\r\n setValue('')\r\n }\r\n }, [treemap])\r\n\r\n const onInputChange = React.useCallback(\r\n (event: React.ChangeEvent) => {\r\n const input = event.target.value.toUpperCase()\r\n setValue(input)\r\n setResults(filterItems(treemap?.nodes, input))\r\n },\r\n [treemap]\r\n )\r\n\r\n const onItemClick = React.useCallback(\r\n (node: MapDataNode) => {\r\n if (!treemap) return\r\n\r\n const cx = (node.x + node.x + node.dx) / 2,\r\n cy = (node.y + node.y + node.dy) / 2,\r\n diffX = cx - treemap.width / 2,\r\n diffY = cy - treemap.height / 2\r\n\r\n MapActionCreators.zoomAndTranslate(treemap, treemap.getLastZoomLevel(), cx + diffX, cy + diffY)\r\n MapActionCreators.setHoveredNode(treemap.mapNodeId, node)\r\n },\r\n [treemap]\r\n )\r\n\r\n const onResultMouseLeave = React.useCallback(() => {\r\n if (!treemap) return\r\n MapActionCreators.setHoveredNode(treemap.mapNodeId, undefined)\r\n }, [treemap])\r\n\r\n return {\r\n value,\r\n results,\r\n onInputChange,\r\n onItemClick,\r\n onResultMouseLeave,\r\n }\r\n}\r\n\r\nexport function SearchInput(props: InputProps & Omit) {\r\n return (\r\n \r\n )\r\n}\r\n\r\ninterface SearchResultProps extends ButtonProps, Omit {\r\n result: MapDataNode\r\n onClick: (node: MapDataNode) => void\r\n onMouseLeave: (e: React.MouseEvent) => void\r\n}\r\n\r\nexport function SearchResult({ result, onClick, onMouseLeave, ...props }: Omit) {\r\n return (\r\n
  • \r\n onClick(result)}\r\n >\r\n {result.name}\r\n {result.description}\r\n \r\n
  • \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Button } from '../../../../main/components/button'\r\nimport { isIpad, isMobile } from '../../../shared/isMobile'\r\nimport { EXPANDED_MAP_BODY_CLASSS } from '../../constants/constants'\r\nimport mapActionCreators from '../../store/action-creators'\r\nimport { MapDataRoot } from '../../types'\r\nimport * as mapUtils from '../../utils'\r\nimport { useMapContext } from '../Map'\r\n\r\ninterface ExpandProps {\r\n data?: MapDataRoot\r\n className?: string\r\n}\r\n\r\nexport function Expand(props: ExpandProps) {\r\n const { treemap, generator } = useMapContext()\r\n\r\n const onExpand = React.useCallback(() => {\r\n if (!treemap || !generator || !props.data) return\r\n\r\n if (document.body.classList.contains(EXPANDED_MAP_BODY_CLASSS)) {\r\n document.body.classList.remove(EXPANDED_MAP_BODY_CLASSS)\r\n } else {\r\n window.gtag?.('event', 'map-expand', { event_category: 'maps' })\r\n document.body.classList.add(EXPANDED_MAP_BODY_CLASSS)\r\n }\r\n\r\n const containerElement = document.getElementById('body')\r\n const size = mapUtils.getSize(containerElement, treemap.type, treemap.isSmall)\r\n\r\n if (size.width === treemap.width && size.height === treemap.height) return\r\n\r\n treemap.zoom.scale(1)\r\n generator.width = size.width\r\n generator.height = size.height\r\n const layout = generator.getLayout(props.data)\r\n mapActionCreators.updateLayout(treemap, {\r\n width: generator.width,\r\n height: generator.height,\r\n data: layout,\r\n scale: treemap.scale,\r\n dataHash: treemap.dataHash,\r\n })\r\n\r\n window.scrollTo(0, 0)\r\n }, [treemap, generator, props.data])\r\n\r\n if (isMobile() && !isIpad()) return null\r\n\r\n return (\r\n \r\n )\r\n}\r\n","/* eslint-disable import/first */\r\nimport { useMutation } from '@tanstack/react-query'\r\nimport * as React from 'react'\r\n\r\nimport { getFormattedDateString } from '../../../header/utils'\r\nimport { Share as ShareDialog } from '../../../shared/components/Share'\r\nimport { drawShareMap } from '../../../shared/drawShareMap'\r\nimport * as api from '../../services/api'\r\nimport mapStore from '../../store/mapStore'\r\nimport { MapSubtype, MapType } from '../../types'\r\nimport { useMapContext } from '../Map'\r\n\r\ninterface ShareMapProps {\r\n mapType: MapType\r\n subtype: MapSubtype\r\n className?: string\r\n}\r\n\r\nexport function Share(props: ShareMapProps) {\r\n const { treemap } = useMapContext()\r\n const uploadImage = useMutation(api.uploadMap)\r\n\r\n const onShareClick = React.useCallback(async () => {\r\n if (!treemap) return\r\n const canvas = mapStore.getPublishCanvas()\r\n const data = await drawShareMap(canvas, [props.mapType.name, props.subtype.name, getFormattedDateString()])\r\n\r\n if (data) {\r\n uploadImage.mutate({ type: treemap.type, subtype: treemap.subtype, data })\r\n }\r\n }, [props.mapType, props.subtype, treemap, uploadImage])\r\n\r\n return \r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\ninterface TopbarProps {\r\n className?: string\r\n navContent?: React.ReactNode\r\n mapControls?: React.ReactNode\r\n}\r\n\r\nexport function Topbar(props: React.PropsWithChildren) {\r\n return (\r\n
    \r\n {props.navContent && (\r\n
    \r\n {props.navContent}\r\n
    \r\n )}\r\n
    {props.children}
    \r\n {props.mapControls}\r\n
    \r\n )\r\n}\r\n","import { useQuery, useQueryClient } from '@tanstack/react-query'\r\nimport * as React from 'react'\r\n\r\nimport { FALLBACK_PERF_RESPONSE } from '../constants/constants'\r\nimport * as api from '../services/api'\r\nimport { MapDataRoot, MapSubtypeId, MapTypeId, PerfData } from '../types'\r\nimport * as mapUtils from '../utils'\r\n\r\nexport type MapDataHookReturn = ReturnType\r\n\r\n/**\r\n * Hook which fetches map data and perf data from the api\r\n */\r\nexport function useMapData(\r\n type: MapTypeId,\r\n subtype: MapSubtypeId,\r\n cacheBuster: number,\r\n mapBaseData?: MapDataRoot,\r\n initialPerf?: PerfData,\r\n fetchBaseData = api.mapBaseData,\r\n fetchPerfData = api.mapPerf\r\n) {\r\n const queryClient = useQueryClient()\r\n const dataVersion = React.useRef()\r\n const prevType = React.useRef()\r\n\r\n React.useEffect(() => {\r\n if (mapBaseData) {\r\n const perfData = mapUtils.parseInitDataAsPerf(mapBaseData)\r\n queryClient.setQueryData(['mapPerf', type, subtype], perfData)\r\n prevType.current = type\r\n } else if (initialPerf) {\r\n queryClient.setQueryData(['mapPerf', type, subtype], initialPerf)\r\n prevType.current = type\r\n }\r\n // This effect only needs to run on mount, otherwise we’d be overriding the data\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n /**\r\n * Fetch base data and perf data for the map. We cannot use `useQueries` here,\r\n * because `keepPreviousData` doesn’t work as it creates new objects every time.\r\n */\r\n const baseDataQuery = useQuery({\r\n queryKey: ['mapBaseData', type, cacheBuster],\r\n queryFn: () => fetchBaseData(type, cacheBuster),\r\n initialData: !prevType.current ? mapBaseData : undefined,\r\n cacheTime: Infinity,\r\n staleTime: Infinity,\r\n })\r\n\r\n const perfDataQuery = useQuery({\r\n queryKey: ['mapPerf', type, subtype],\r\n queryFn: async () => {\r\n const data = await fetchPerfData(type, subtype)\r\n\r\n return (\r\n data ??\r\n queryClient.getQueryData(['mapPerf', type, subtype]) ?? {\r\n ...FALLBACK_PERF_RESPONSE,\r\n version: dataVersion.current,\r\n }\r\n )\r\n },\r\n // Keep previous data if the map type hasn’t changed\r\n keepPreviousData: prevType.current === type,\r\n refetchInterval: () => mapUtils.getMapsRefreshInterval(),\r\n staleTime: 1000,\r\n onSuccess(data) {\r\n if (!dataVersion.current && data) {\r\n dataVersion.current = data.version\r\n }\r\n\r\n if (dataVersion.current !== data?.version) {\r\n window.location.reload()\r\n return\r\n }\r\n\r\n prevType.current = type\r\n },\r\n })\r\n\r\n const data = React.useMemo(() => {\r\n if (!perfDataQuery.data || !baseDataQuery.data) return undefined\r\n\r\n const [restoredData] = mapUtils.restoreDataKeys([baseDataQuery.data], perfDataQuery.data)\r\n\r\n return restoredData\r\n }, [baseDataQuery.data, perfDataQuery.data])\r\n\r\n return {\r\n data,\r\n baseDataQuery,\r\n perfDataQuery,\r\n }\r\n}\r\n","import { useLocation } from 'react-router-dom'\r\n\r\nimport { MAP_TYPES } from '../constants/constants'\r\n\r\n/**\r\n * Hook which gets the current map type and subtype from the URL\r\n */\r\nexport function useMapType() {\r\n const query = new URLSearchParams(useLocation().search)\r\n const typeFromQuery = query.get('t')\r\n const subtypeFromQuery = query.get('st')\r\n\r\n const type = MAP_TYPES.find((t) => t.type === typeFromQuery) ?? MAP_TYPES[0]\r\n const subtype = type.subtypes.find((subtype) => subtype.id === subtypeFromQuery) ?? type.subtypes[0]\r\n\r\n return { type, subtype }\r\n}\r\n","import classnames from 'classnames'\r\nimport { NavLink } from 'react-router-dom'\r\n\r\nimport { Delayed } from '../../../main/components/delayed'\r\nimport { Spinner } from '../../../main/components/spinner'\r\nimport * as tracking from '../../shared/tracking'\r\nimport { MAP_TYPES } from '../constants/constants'\r\nimport { MapSubtypeId, MapTypeId } from '../types'\r\n\r\ninterface MapTypeProps {\r\n activeType: MapTypeId\r\n activeSubtype: MapSubtypeId\r\n isLoading: boolean\r\n linkClassName?: string\r\n}\r\n\r\nexport function MapTypeList(props: MapTypeProps) {\r\n const linkClass = props.linkClassName ?? ''\r\n\r\n return (\r\n
      \r\n {MAP_TYPES.map((map) => {\r\n const isActiveTreemap = props.activeType === map.type\r\n const query = new URLSearchParams({ t: map.type })\r\n if (props.activeSubtype !== MapSubtypeId.DayPerf) {\r\n query.append('st', props.activeSubtype)\r\n }\r\n\r\n return (\r\n
    • \r\n \r\n classnames('text-xs leading-7', {\r\n [linkClass]: !isActiveTreemap,\r\n 'text-white font-bold': isActiveTreemap,\r\n })\r\n }\r\n onClick={() => {\r\n document.title = map.pageTitle\r\n tracking.trackPageView({ query: `t=${map.type}` })\r\n }}\r\n >\r\n \r\n {map.name}\r\n {isActiveTreemap && props.isLoading && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\nimport { useNavigate } from 'react-router-dom'\r\n\r\nimport { Button } from '../../main/components/button'\r\nimport { DefaultErrorBoundary } from '../../main/components/error-view'\r\nimport { Paragraph } from '../../main/components/typography'\r\nimport { AdTag, useInvestingChannelAds } from '../shared/components/Ads'\r\nimport * as tracking from '../shared/tracking'\r\nimport { Map, useMapContext } from './components/Map'\r\nimport { MapSelect } from './components/MapSelect'\r\nimport { MapTypeList } from './components/MapTypeList'\r\nimport { SearchInput, SearchResult, useSearch } from './components/Search'\r\nimport { Topbar } from './components/Topbar'\r\nimport { Expand } from './components/Topbar/Expand'\r\nimport { Share } from './components/Topbar/Share'\r\nimport { Zoom } from './components/Topbar/Zoom'\r\nimport { useMapData } from './hooks/use-map-data'\r\nimport { useMapType } from './hooks/use-map-type'\r\nimport { MapDataRoot, MapSubtypeId, PerfData } from './types'\r\nimport * as mapUtils from './utils'\r\n\r\nconst linkClassName = 'text-link hover:text-white'\r\n\r\nexport interface MapInitProps {\r\n initData?: MapDataRoot\r\n initialPerf?: PerfData\r\n cacheBuster: number\r\n generate?: boolean\r\n}\r\n\r\nfunction App(props: MapInitProps) {\r\n const { treemap } = useMapContext()\r\n const navigate = useNavigate()\r\n const { type, subtype } = useMapType()\r\n const mapData = useMapData(type.type, subtype.id, props.cacheBuster, props.initData, props.initialPerf)\r\n const search = useSearch()\r\n // Make sure all ads are refreshed on type/subtype change (page navigation)\r\n const hasInvestingChannelAds = useInvestingChannelAds([type, subtype])\r\n\r\n /**\r\n * Set new subtype to be false on perf data load so we don’t display loading state when fetching\r\n * new perf data for the same type\r\n */\r\n const [isNewSubtype, setIsNewSubtype] = React.useState(false)\r\n React.useEffect(() => {\r\n if (!mapData.perfDataQuery.isFetching) {\r\n setIsNewSubtype(false)\r\n }\r\n }, [mapData.perfDataQuery.isFetching])\r\n\r\n const isLoadingInitialBaseData = !mapData.baseDataQuery.isPreviousData && mapData.baseDataQuery.isLoading\r\n const isLoadingInitialPerf = !mapData.perfDataQuery.isPreviousData && mapData.perfDataQuery.isLoading\r\n const isInitialLoading = isLoadingInitialBaseData || isLoadingInitialPerf\r\n const isFetchingNewPerf = isNewSubtype && !mapData.perfDataQuery.isLoading && mapData.perfDataQuery.isFetching\r\n\r\n return (\r\n <>\r\n \r\n

    View

    \r\n \r\n \r\n \r\n }\r\n mapControls={\r\n <>\r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n }\r\n >\r\n \r\n {type.description}\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n

    Map Filter

    \r\n \r\n
    \r\n ({ label: subtype.name, value: subtype.id }))}\r\n isLoading={isFetchingNewPerf}\r\n onChange={(item) => {\r\n const newSubtype = type.subtypes.find((subtype) => subtype.id === item.value)\r\n if (newSubtype) {\r\n const query = new URLSearchParams(window.location.search)\r\n if (newSubtype.id === MapSubtypeId.DayPerf) {\r\n query.delete('st')\r\n } else {\r\n query.set('st', newSubtype.id)\r\n }\r\n\r\n setIsNewSubtype(true)\r\n const stringQuery = query.toString()\r\n navigate({ pathname: window.location.pathname, search: stringQuery }, { replace: true })\r\n tracking.trackPageView({ query: stringQuery })\r\n }\r\n }}\r\n />\r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
      \r\n {search.results.map((result) => (\r\n \r\n ))}\r\n
    \r\n\r\n {hasInvestingChannelAds && (\r\n
    \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n\r\n \r\n
    \r\n \r\n {hasInvestingChannelAds && }\r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n )\r\n}\r\n\r\nexport default App\r\n","import * as ReactDOM from 'react-dom'\r\n\r\nimport App, { MapInitProps } from './App'\r\nimport { MapContext } from './components/MapContext'\r\n\r\nwindow['FinvizInitCanvas'] = async function initCanvas(props: MapInitProps) {\r\n const root = document.getElementById('root')\r\n\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n root\r\n )\r\n}\r\n","import ReactDOM from 'react-dom'\r\n\r\nimport { parseJSONFromScript } from '../shared/parseJSONFromScript'\r\nimport Canvas from './components/Canvas'\r\nimport { MAP_SUBTYPES_COMPANIES_BY_ID } from './constants/constants'\r\nimport { SettingsSmall, SettingsSmallDark, SettingsSmallGeo, SettingsSmallGeoDark } from './constants/settings'\r\nimport Treemap from './treemap'\r\nimport { MapSubtypeId, MapTypeId, PerfData } from './types'\r\nimport * as mapUtils from './utils'\r\n\r\nconst CANVAS_WIDTH = 400\r\nconst CANVAS_HEIGHT_GEO = 235\r\nconst CANVAS_HEIGHT = 300\r\nconst CANVAS_HEIGHT_NEW = 368\r\n\r\nasync function renderTreemaps(props: { perfDataSec: PerfData; perfDataGeo: PerfData; cacheBuster: number }) {\r\n let precomputedData\r\n try {\r\n precomputedData = await mapUtils.fetchBaseData(\r\n FinvizSettings.hasRedesignEnabled ? 'hp_redesign.json' : 'hp.json',\r\n props.cacheBuster\r\n )\r\n } catch {\r\n return\r\n }\r\n\r\n if (props.perfDataSec) {\r\n const subtype = MAP_SUBTYPES_COMPANIES_BY_ID[MapSubtypeId.DayPerf]\r\n const scale = { id: subtype.scaleId, name: subtype.name, tooltip: subtype.tooltip }\r\n const initData = mapUtils.getMapData(precomputedData.sec, props.perfDataSec)\r\n const treemap = new Treemap({\r\n data: initData,\r\n scale,\r\n width: CANVAS_WIDTH,\r\n height: FinvizSettings.hasRedesignEnabled ? CANVAS_HEIGHT_NEW : CANVAS_HEIGHT,\r\n countIndustryPerf: false,\r\n countSectorPerf: true,\r\n settings: FinvizSettings.hasDarkTheme ? SettingsSmallDark : SettingsSmall,\r\n type: MapTypeId.Sector,\r\n subtype: subtype.id,\r\n isSmall: true,\r\n zoomLevels: [1],\r\n version: props.perfDataSec.version,\r\n dataHash: props.perfDataSec.hash,\r\n })\r\n\r\n window.FinvizIndexSecMap = treemap\r\n\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('treemap-small')\r\n )\r\n }\r\n\r\n if (props.perfDataGeo) {\r\n const subtype = MAP_SUBTYPES_COMPANIES_BY_ID[MapSubtypeId.DayPerf]\r\n const scale = { id: subtype.scaleId, name: subtype.name, tooltip: subtype.tooltip }\r\n const initData = mapUtils.getMapData(precomputedData.geo, props.perfDataGeo)\r\n const treemap = new Treemap({\r\n data: initData,\r\n scale,\r\n width: CANVAS_WIDTH,\r\n height: CANVAS_HEIGHT_GEO,\r\n countIndustryPerf: true,\r\n countSectorPerf: false,\r\n settings: FinvizSettings.hasDarkTheme ? SettingsSmallGeoDark : SettingsSmallGeo,\r\n type: MapTypeId.World,\r\n subtype: subtype.id,\r\n isSmall: true,\r\n zoomLevels: [1],\r\n version: props.perfDataGeo.version,\r\n dataHash: props.perfDataGeo.hash,\r\n })\r\n\r\n window.FinvizIndexGeoMap = treemap\r\n\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('treemap-small-geo')\r\n )\r\n }\r\n}\r\n\r\nif (document.getElementById('map-data')) {\r\n const mapProps = parseJSONFromScript<{ perfDataSec: PerfData; perfDataGeo: PerfData; cacheBuster: number }>(\r\n 'map-data'\r\n )\r\n if (mapProps) renderTreemaps(mapProps)\r\n}\r\n","import * as React from 'react'\r\n\r\nimport * as tracking from '../tracking'\r\n\r\nexport const IC_PUBLISHER_ID = 'df0d0d52-cc7f-11e8-82a5-0abbb61c4a6a'\r\n\r\nenum AdTagName {\r\n IC_TickerInContent = 'IC_D_3x3',\r\n IC_MapsLeftRail = 'IC_D_125x125',\r\n IC_Statements = 'IC_D_300x60',\r\n IC_Groups = 'IC_D_300x250',\r\n}\r\n\r\nconst tagDefinition = {\r\n [AdTagName.IC_TickerInContent]: { placements: 3, style: { width: 970, minHeight: 250 } },\r\n [AdTagName.IC_MapsLeftRail]: { placements: 2, style: { width: 125, minHeight: 125 } },\r\n [AdTagName.IC_Statements]: { placements: 1, style: { width: 300, minHeight: 60 } },\r\n [AdTagName.IC_Groups]: { placements: 1, style: { width: 336, minHeight: 280 } },\r\n}\r\n\r\nconst hasInvestingChannelAds = tracking.getAdsProvider() === tracking.AdsProvider.InvestingChannel\r\n\r\n/**\r\n * Get create/destroy methods to control ads insertion\r\n */\r\nexport function getInvestingChannelPage() {\r\n var page: ICPageReturn\r\n\r\n function create() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n let config = window['FINVIZ_IC_UAT_CONFIG'] ?? {}\r\n page = window.InvestingChannel?.UAT.Run(IC_PUBLISHER_ID, config)\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n function destroy() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n page?.destroy()\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n return { create, destroy }\r\n}\r\n\r\n/**\r\n * Hook which recreates ads on deps change (SPA navigation,…)\r\n */\r\nexport function useInvestingChannelAds(deps: unknown[] = []) {\r\n React.useLayoutEffect(() => {\r\n const page = getInvestingChannelPage()\r\n\r\n page.create()\r\n\r\n return () => page.destroy()\r\n // eslint cannot statically check the dependencies and complains about it\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, deps)\r\n\r\n return hasInvestingChannelAds\r\n}\r\n\r\ninterface AdTagProps extends Omit, 'name'> {\r\n /**\r\n * Name of the ad tag\r\n */\r\n name: keyof typeof AdTagName\r\n\r\n /**\r\n * Manually set the placement position for this tag\r\n *\r\n * @default 1\r\n */\r\n position?: number\r\n\r\n /**\r\n * Additional class names for the wrapper div\r\n */\r\n className?: string\r\n}\r\n\r\nexport function AdTag({ name, position = 1, ...props }: AdTagProps) {\r\n const tagName = AdTagName[name]\r\n const tagProps = tagDefinition[tagName]\r\n const placementName = `${tagName}_${Math.min(Math.max(position, 1), tagProps.placements)}`\r\n\r\n if (!hasInvestingChannelAds) return null\r\n\r\n return
    \r\n}\r\n","/* eslint-disable import/first */\r\nimport { UseMutationResult } from '@tanstack/react-query'\r\nimport * as React from 'react'\r\nimport { FacebookIcon, FacebookShareButton, TwitterIcon, TwitterShareButton } from 'react-share'\r\n\r\nimport { Button } from '../../../main/components/button'\r\nimport { CopyToClipboard } from '../../../main/components/copy-to-clipboard'\r\nimport {\r\n Dialog,\r\n DialogBody,\r\n DialogDismiss,\r\n DialogFooter,\r\n DialogHeader,\r\n useDialogState,\r\n} from '../../../main/components/dialog'\r\nimport { ErrorView } from '../../../main/components/error-view'\r\nimport { Loading } from '../../../main/components/loading'\r\nimport { Heading } from '../../../main/components/typography'\r\n\r\ninterface ShareResponse {\r\n imgUrl: string\r\n shareUrl: string\r\n}\r\n\r\ninterface ShareProps {\r\n state: UseMutationResult\r\n onShareClick: () => void\r\n className?: string\r\n disabled?: boolean\r\n}\r\n\r\nexport function Share(props: ShareProps) {\r\n const dialogState = useDialogState()\r\n\r\n return (\r\n <>\r\n {\r\n props.onShareClick()\r\n dialogState.show()\r\n }}\r\n >\r\n Share map\r\n \r\n\r\n \r\n Share map\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\ninterface ShareDialogBodyProps {\r\n isError: boolean\r\n isLoading: boolean\r\n data?: ResponseType\r\n}\r\n\r\nfunction ShareDialogBody(props: ShareDialogBodyProps) {\r\n if (props.isLoading) {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n\r\n if (props.isError || !props.data) {\r\n return (\r\n
    \r\n \r\n There’s been an error sharing the map.\r\n
    \r\n Please try sharing the map again and if the problem persists, please contact support.\r\n \r\n }\r\n />\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n <>\r\n {document.title}\r\n
    \r\n \r\n Copy and paste link in email, website, or forum\r\n \r\n }\r\n text={props.data.shareUrl}\r\n bottomLeftContent={\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n />\r\n
    \r\n \r\n )\r\n}\r\n","import logoBase64 from './assets/logo.png'\r\nimport { getTextFontFamily } from './getTextFontFamily'\r\nimport { isFirefoxDesktop } from './isMobile'\r\nimport { loadImage } from './loadImage'\r\nimport { getScaleRatio } from './retinafy'\r\n\r\nexport async function drawShareMap(canvasEl: HTMLCanvasElement, text: string[]) {\r\n const fontFamily = getTextFontFamily()\r\n\r\n const ratio = getScaleRatio()\r\n const width = canvasEl.width / ratio\r\n const height = canvasEl.height / ratio\r\n\r\n const canvas = document.createElement('canvas')\r\n const context = canvas.getContext('2d', isFirefoxDesktop() ? { willReadFrequently: true } : undefined)!\r\n canvas.width = width\r\n canvas.height = height + 22\r\n\r\n // Background\r\n context.fillStyle = '#fff'\r\n context.fillRect(0, 0, width, height)\r\n\r\n // Logo\r\n const logo = await loadImage(logoBase64)\r\n context.drawImage(logo, 2, 4)\r\n\r\n // Labels\r\n const label = text.map((t) => t.toUpperCase())\r\n let x = width\r\n const y = 11\r\n\r\n context.textBaseline = 'middle'\r\n context.textAlign = 'right'\r\n context.font = '9pt ' + fontFamily\r\n for (let i = label.length - 1; i >= 0; i--) {\r\n const text = label[i]\r\n let textWidth = context.measureText(text).width\r\n\r\n context.fillStyle = '#4c5261'\r\n context.fillText(text, x, y)\r\n\r\n if (i > 0) {\r\n const divider = ' • '\r\n context.fillStyle = '#5faaf4'\r\n context.fillText(divider, x - textWidth, y)\r\n textWidth = textWidth + context.measureText(divider).width\r\n }\r\n\r\n x = x - textWidth\r\n }\r\n\r\n context.drawImage(canvasEl, 0, 0, width * ratio, height * ratio, 0, 22, width, height)\r\n\r\n return canvas.toDataURL()\r\n}\r\n","export function parseJSONFromScript(id: string, doc: Document = document): T | null {\r\n const el = doc.getElementById(id)\r\n const isValidElement = el && el.tagName === 'SCRIPT' && el.getAttribute('type') === 'application/json'\r\n\r\n if (!isValidElement) {\r\n window.Sentry?.captureMessage('parseJSONFromScript', {\r\n extra: {\r\n el: el ? 'yes' : 'no',\r\n tagName: el?.tagName,\r\n type: el?.getAttribute('type'),\r\n },\r\n })\r\n }\r\n\r\n if (!isValidElement) return null\r\n\r\n try {\r\n return JSON.parse(el.textContent!)\r\n } catch (e) {\r\n Sentry.captureException(e)\r\n return null\r\n }\r\n}\r\n","import * as React from 'react'\r\n\r\nexport interface DelayedProps {\r\n /**\r\n * The delay in milliseconds before the component is rendered.\r\n *\r\n * @default 300\r\n */\r\n delay?: number\r\n\r\n /**\r\n * Delay in milliseconds before rendering timeout state.\r\n */\r\n timeout?: number\r\n\r\n /**\r\n * Throw on timeout (suspense)\r\n */\r\n throwOnTimeout?: boolean\r\n\r\n /**\r\n * Component visible during the delay.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n delayComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when timeout is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n timeoutComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when delay is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n children?: React.ReactNode\r\n}\r\n\r\nexport function Delayed({\r\n delay = 300,\r\n timeout = 0,\r\n throwOnTimeout = false,\r\n delayComponent,\r\n timeoutComponent,\r\n children,\r\n}: DelayedProps) {\r\n const [visible, setVisible] = React.useState(false)\r\n const [hasTimedOut, setHasTimedOut] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const visibilityTimeout = window.setTimeout(() => setVisible(true), delay)\r\n\r\n let failedTimeout: number\r\n if (timeout > 0) {\r\n failedTimeout = window.setTimeout(() => {\r\n setHasTimedOut(true)\r\n if (throwOnTimeout) throw new Error()\r\n }, timeout)\r\n }\r\n\r\n return () => {\r\n clearTimeout(visibilityTimeout)\r\n clearTimeout(failedTimeout)\r\n }\r\n }, [delay, timeout, throwOnTimeout])\r\n\r\n if (!visible) return <>{delayComponent}\r\n\r\n if (hasTimedOut) {\r\n return <>{timeoutComponent}\r\n }\r\n\r\n return <>{children}\r\n}\r\n","import { link } from '../services/routing'\r\nimport { Delayed, DelayedProps } from './delayed'\r\nimport { ErrorView } from './error-view'\r\nimport { Spinner } from './spinner'\r\n\r\ntype LoadingProps = Pick\r\n\r\nexport function Loading({ delay, timeout, throwOnTimeout }: LoadingProps) {\r\n return (\r\n \r\n There’s been an error loading the application.\r\n
    \r\n Please make sure your internet connection is stable and refresh the page. If the error persists, please{' '}\r\n \r\n contact support\r\n \r\n .\r\n \r\n }\r\n />\r\n }\r\n >\r\n \r\n \r\n )\r\n}\r\n\r\nexport function LoadingScreen(props: LoadingProps) {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nexport type NotificationContextType = ReturnType\r\n\r\nexport enum NotificationPosition {\r\n TopLeft,\r\n TopRight,\r\n BottomLeft,\r\n BottomRight,\r\n}\r\n\r\nexport interface NotificationOptions {\r\n position?: NotificationPosition\r\n inline?: boolean\r\n}\r\n\r\nexport const NotificationContext = React.createContext<{\r\n show: (element: JSX.Element, options?: NotificationOptions) => void\r\n hide: () => void\r\n}>({\r\n show: () => {},\r\n hide: () => {},\r\n})\r\n\r\nexport function useNotification() {\r\n return React.useContext(NotificationContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { getVisualViewport, useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { NotificationContext, NotificationOptions, NotificationPosition } from './hooks'\r\n\r\ninterface NotificationState {\r\n element: JSX.Element\r\n options: Partial\r\n}\r\n\r\nexport function NotificationWrapper(props: React.PropsWithChildren) {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [notification, setNotification] = React.useState(null)\r\n const { viewport, setViewport } = useVisualViewport({ enabled: !!notification })\r\n\r\n const context = React.useRef({\r\n show: (element: JSX.Element, options: Partial = {}) => {\r\n setViewport(() => getVisualViewport(window.visualViewport))\r\n setNotification({ element, options })\r\n setIsOpen(true)\r\n },\r\n hide: () => setIsOpen(false),\r\n })\r\n\r\n const positionClass = React.useMemo(() => {\r\n const { position = NotificationPosition.BottomLeft } = notification?.options ?? {}\r\n return {\r\n '[--inset-t:1rem] items-start pt-inset-top': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.TopRight,\r\n ].includes(position),\r\n '[--inset-r:1rem] justify-end landscape-secondary:pr-inset-right': [\r\n NotificationPosition.TopRight,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-b:1rem] items-end pb-inset-bottom': [\r\n NotificationPosition.BottomLeft,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-l:1rem] justify-start landscape-primary:pl-inset-left': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.BottomLeft,\r\n ].includes(position),\r\n }\r\n }, [notification?.options])\r\n\r\n const WrapperComponent = React.useMemo(\r\n () => (notification?.options.inline ? React.Fragment : Ariakit.Portal),\r\n [notification?.options.inline]\r\n )\r\n\r\n return (\r\n \r\n {props.children}\r\n {isOpen && (\r\n \r\n \r\n {notification?.element}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { NotificationContextType, useNotification } from './hooks'\r\n\r\nexport function withNotificationContext(\r\n WrappedComponent: React.ComponentType\r\n) {\r\n const displayName = WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\r\n const WithNotificationContext = (props: Omit) => {\r\n const notification = useNotification()\r\n return \r\n }\r\n\r\n WithNotificationContext.displayName = `withNotificationContext(${displayName})`\r\n\r\n return WithNotificationContext\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { useNotification } from './hooks'\r\n\r\ninterface NotificationProps {\r\n className?: string\r\n /**\r\n * Default button text\r\n * @default Close\r\n */\r\n closeText?: string\r\n\r\n /**\r\n * Custom buttons. Overrides `closeText`\r\n */\r\n actions?: JSX.Element\r\n\r\n /**\r\n * When set, the notification will automatically close\r\n */\r\n timeoutInMs?: number\r\n}\r\n\r\nexport function Notification({\r\n className,\r\n closeText = 'Close',\r\n actions,\r\n timeoutInMs,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const notification = useNotification()\r\n\r\n React.useEffect(() => {\r\n let timeoutId: number\r\n if (timeoutInMs) {\r\n timeoutId = window.setTimeout(() => {\r\n notification.hide()\r\n }, timeoutInMs)\r\n }\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n }\r\n }\r\n }, [notification, timeoutInMs])\r\n\r\n return (\r\n \r\n
    {children}
    \r\n
    \r\n {actions ?? (\r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nexport function getVisualViewport(visualViewport: VisualViewport | null) {\r\n const width = visualViewport?.width ?? window.innerWidth\r\n const height = visualViewport?.height ?? window.innerHeight\r\n const scale = visualViewport?.scale ?? 1\r\n\r\n return {\r\n top: visualViewport?.offsetTop ?? 0,\r\n left: visualViewport?.offsetLeft ?? 0,\r\n scale: Math.round((1 / scale) * 100) / 100,\r\n width: Math.round(width * scale),\r\n height: Math.round(height * scale),\r\n unscaledWidth: width,\r\n unscaledHeight: height,\r\n }\r\n}\r\n\r\nexport function useVisualViewport({ enabled = true, onScroll = true }: { enabled?: boolean; onScroll?: boolean } = {}) {\r\n const [viewport, setViewport] = React.useState(getVisualViewport(window.visualViewport))\r\n\r\n React.useEffect(() => {\r\n if (!enabled) return\r\n\r\n const handleChange = throttle((ev: Event) => {\r\n const viewport = ev.currentTarget as VisualViewport\r\n if (viewport) {\r\n setViewport(() => getVisualViewport(viewport))\r\n }\r\n }, 50)\r\n\r\n window.visualViewport?.addEventListener('resize', handleChange)\r\n if (onScroll) window.visualViewport?.addEventListener('scroll', handleChange)\r\n handleChange({ currentTarget: window.visualViewport } as Event)\r\n\r\n return () => {\r\n window.visualViewport?.removeEventListener('resize', handleChange)\r\n window.visualViewport?.removeEventListener('scroll', handleChange)\r\n }\r\n }, [enabled, onScroll])\r\n\r\n return React.useMemo(() => ({ viewport, setViewport }), [viewport])\r\n}\r\n"],"names":["MapContext","props","_jsx","MapContextProvider","children","QueryClientContext","React","fallback","className","Loading","BrowserRouter","filterItems","input","arguments","length","undefined","filter","stock","name","indexOf","description","toUpperCase","sort","a","b","slice","useSearch","treemap","useMapContext","value","setValue","results","setResults","nodes","onInputChange","event","target","onItemClick","node","cx","x","dx","cy","y","dy","diffX","width","diffY","height","MapActionCreators","zoomAndTranslate","getLastZoomLevel","setHoveredNode","mapNodeId","onResultMouseLeave","SearchInput","Input","theme","rounding","placeholder","leftContent","onChange","SearchResult","_ref","result","onClick","onMouseLeave","_jsxs","Button","size","classnames","contentClass","Expand","generator","onExpand","data","document","body","classList","contains","EXPANDED_MAP_BODY_CLASSS","remove","window","gtag","event_category","add","containerElement","getElementById","mapUtils","type","isSmall","zoom","scale","layout","getLayout","mapActionCreators","updateLayout","dataHash","scrollTo","isMobile","isIpad","Share","uploadImage","useMutation","api","onShareClick","async","canvas","mapStore","getPublishCanvas","drawShareMap","mapType","subtype","getFormattedDateString","mutate","ShareDialog","state","disabled","Topbar","navContent","mapControls","useMapData","cacheBuster","mapBaseData","initialPerf","fetchBaseData","fetchPerfData","queryClient","useQueryClient","dataVersion","prevType","perfData","setQueryData","current","baseDataQuery","useQuery","queryKey","queryFn","initialData","cacheTime","Infinity","staleTime","perfDataQuery","getQueryData","FALLBACK_PERF_RESPONSE","version","keepPreviousData","refetchInterval","onSuccess","location","reload","restoredData","useMapType","query","URLSearchParams","useLocation","search","typeFromQuery","get","subtypeFromQuery","MAP_TYPES","find","t","subtypes","id","MapTypeList","linkClass","linkClassName","map","isActiveTreemap","activeType","activeSubtype","MapSubtypeId","DayPerf","append","NavLink","to","title","pageTitle","tracking","isLoading","Delayed","Spinner","navigate","useNavigate","mapData","initData","hasInvestingChannelAds","useInvestingChannelAds","isNewSubtype","setIsNewSubtype","isFetching","isLoadingInitialBaseData","isPreviousData","isLoadingInitialPerf","isInitialLoading","isFetchingNewPerf","_Fragment","as","href","Zoom","Paragraph","MapSelect","items","label","item","newSubtype","delete","set","stringQuery","toString","pathname","replace","inputClass","AdTag","position","ErrorBoundary","resetKeys","FallbackComponent","DefaultErrorBoundary","Map","isFetchingPerf","isLoadingData","hash","onNodeClick","root","ReactDOM","App","mapProps","parseJSONFromScript","precomputedData","FinvizSettings","hasRedesignEnabled","perfDataSec","MAP_SUBTYPES_COMPANIES_BY_ID","scaleId","tooltip","sec","Treemap","countIndustryPerf","countSectorPerf","settings","hasDarkTheme","SettingsSmallDark","SettingsSmall","MapTypeId","Sector","zoomLevels","FinvizIndexSecMap","Canvas","hover","legend","alt","perfDataGeo","geo","SettingsSmallGeoDark","SettingsSmallGeo","World","FinvizIndexGeoMap","renderTreemaps","IC_PUBLISHER_ID","AdTagName","tagDefinition","IC_TickerInContent","placements","style","minHeight","IC_MapsLeftRail","IC_Statements","IC_Groups","InvestingChannel","getInvestingChannelPage","page","create","InvestingChannelQueue","push","config","UAT","Run","e","console","error","destroy","deps","tagName","tagProps","placementName","Math","min","max","dialogState","useDialogState","show","Dialog","DialogHeader","DialogBody","ShareDialogBody","isError","DialogFooter","DialogDismiss","ErrorView","showRefresh","message","src","imgUrl","CopyToClipboard","Heading","level","text","shareUrl","bottomLeftContent","FacebookShareButton","url","FacebookIcon","round","TwitterShareButton","via","TwitterIcon","canvasEl","fontFamily","getTextFontFamily","ratio","getScaleRatio","createElement","context","getContext","isFirefoxDesktop","willReadFrequently","fillStyle","fillRect","logo","loadImage","logoBase64","drawImage","textBaseline","textAlign","font","i","textWidth","measureText","fillText","divider","toDataURL","el","isValidElement","getAttribute","Sentry","captureMessage","extra","JSON","parse","textContent","captureException","delay","timeout","throwOnTimeout","delayComponent","timeoutComponent","visible","setVisible","hasTimedOut","setHasTimedOut","visibilityTimeout","setTimeout","failedTimeout","Error","clearTimeout","showContact","link","toContact","LoadingScreen","NotificationPosition","NotificationContext","hide","useNotification","NotificationWrapper","isOpen","setIsOpen","notification","setNotification","viewport","setViewport","useVisualViewport","enabled","element","options","getVisualViewport","visualViewport","positionClass","BottomLeft","TopLeft","TopRight","includes","BottomRight","WrapperComponent","inline","Ariakit","Provider","role","unmountOnHide","open","onClose","modal","backdrop","focusable","hideOnEscape","hideOnInteractOutside","autoFocusOnShow","autoFocusOnHide","transform","left","top","willChange","withNotificationContext","WrappedComponent","displayName","WithNotificationContext","notificationContext","Notification","closeText","actions","timeoutInMs","timeoutId","innerWidth","innerHeight","offsetTop","offsetLeft","unscaledWidth","unscaledHeight","onScroll","handleChange","throttle","ev","currentTarget","addEventListener","removeEventListener"],"sourceRoot":""}