{"version":3,"file":"map.6841ce53.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.label, 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\nimport { getMapBaseData } 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 mapBaseData?: MapDataRoot,\r\n initialPerf?: PerfData,\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 const baseDataQuery = useQuery({\r\n queryKey: ['mapBaseData', type],\r\n queryFn: async () => getMapBaseData(type) as unknown as Promise,\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, 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\nimport { MapSubtypeId } from '../types'\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 subtypes = type.subtypes.flatMap((type) => type.items)\r\n const subtype =\r\n subtypes.find((subtype) => subtype.value === subtypeFromQuery) ??\r\n subtypes.find((subtype) => subtype.value === MapSubtypeId.DayPerf) ??\r\n 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.value, 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 {\r\n const query = new URLSearchParams(window.location.search)\r\n if (item.value === MapSubtypeId.DayPerf) {\r\n query.delete('st')\r\n } else {\r\n query.set('st', item.value)\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 {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/client'\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 rootEl = document.getElementById('root')\r\n\r\n const root = ReactDOM.createRoot(rootEl!)\r\n root.render(\r\n \r\n \r\n \r\n )\r\n}\r\n","import ReactDOM from 'react-dom/client'\r\n\r\nimport { getQueryClient } from '../shared/components/QueryClientContext'\r\nimport { parseJSONFromScript } from '../shared/parseJSONFromScript'\r\nimport Canvas from './components/Canvas'\r\nimport { MAP_SUBTYPE_DAY_PERF } from './constants/constants'\r\nimport { SettingsSmall, SettingsSmallDark, SettingsSmallGeo, SettingsSmallGeoDark } from './constants/settings'\r\nimport Treemap from './treemap'\r\nimport { MapDataRoot, 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 const queryClient = getQueryClient({ defaultOptions: { queries: { useErrorBoundary: false } } })\r\n\r\n let precomputedData\r\n try {\r\n precomputedData = await queryClient.fetchQuery({\r\n queryKey: ['mapBaseData', 'homepage'],\r\n queryFn: mapUtils.getIndexMapData as unknown as () => Promise<{ sec: MapDataRoot; geo: MapDataRoot }>,\r\n })\r\n } catch {}\r\n\r\n if (!precomputedData) return\r\n\r\n if (props.perfDataSec) {\r\n const subtype = MAP_SUBTYPE_DAY_PERF\r\n const scale = { id: subtype.scaleId, name: subtype.label, 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.value,\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 const rootEl = document.getElementById('treemap-small')\r\n const root = ReactDOM.createRoot(rootEl!)\r\n root.render()\r\n }\r\n\r\n if (props.perfDataGeo) {\r\n const subtype = MAP_SUBTYPE_DAY_PERF\r\n const scale = { id: subtype.scaleId, name: subtype.label, 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.value,\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 const rootEl = document.getElementById('treemap-small-geo')\r\n const root = ReactDOM.createRoot(rootEl!)\r\n root.render()\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","_window$gtag","_window","document","body","classList","contains","EXPANDED_MAP_BODY_CLASSS","remove","window","gtag","call","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","label","getFormattedDateString","mutate","ShareDialog","state","disabled","Topbar","navContent","mapControls","useMapData","mapBaseData","initialPerf","fetchPerfData","queryClient","useQueryClient","dataVersion","prevType","perfData","setQueryData","current","baseDataQuery","useQuery","queryKey","queryFn","getMapBaseData","initialData","cacheTime","Infinity","staleTime","perfDataQuery","getQueryData","FALLBACK_PERF_RESPONSE","version","keepPreviousData","refetchInterval","onSuccess","location","reload","restoredData","useMapType","_MAP_TYPES$find","_subtypes$find","query","URLSearchParams","useLocation","search","typeFromQuery","get","subtypeFromQuery","MAP_TYPES","find","t","subtypes","flatMap","items","MapSubtypeId","DayPerf","MapTypeList","_props$linkClassName","linkClass","linkClassName","map","isActiveTreemap","activeType","activeSubtype","append","NavLink","to","concat","title","pageTitle","tracking","isLoading","Delayed","Spinner","_mapData$perfDataQuer","navigate","useNavigate","mapData","initData","hasInvestingChannelAds","useInvestingChannelAds","isNewSubtype","setIsNewSubtype","isFetching","isLoadingInitialBaseData","isPreviousData","isLoadingInitialPerf","isInitialLoading","isFetchingNewPerf","_Fragment","as","href","Zoom","Paragraph","MapSelect","comboBox","item","delete","set","stringQuery","toString","pathname","replace","inputClass","AdTag","position","ErrorBoundary","resetKeys","FallbackComponent","DefaultErrorBoundary","Map","isFetchingPerf","isLoadingData","hash","onNodeClick","id","rootEl","ReactDOM","render","App","mapProps","parseJSONFromScript","getQueryClient","defaultOptions","queries","useErrorBoundary","precomputedData","fetchQuery","perfDataSec","MAP_SUBTYPE_DAY_PERF","scaleId","tooltip","sec","Treemap","FinvizSettings","hasRedesignEnabled","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","_window$InvestingChan","InvestingChannelQueue","push","_window$FINVIZ_IC_UAT","_window$InvestingChan2","config","UAT","Run","e","console","error","destroy","_window$InvestingChan3","_page","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","_window$Sentry","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","_notification$options","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","_WrappedComponent$dis","displayName","WithNotificationContext","notificationContext","Notification","closeText","actions","timeoutInMs","timeoutId","_visualViewport$width","_visualViewport$heigh","_visualViewport$scale","_visualViewport$offse","_visualViewport$offse2","innerWidth","innerHeight","offsetTop","offsetLeft","unscaledWidth","unscaledHeight","onScroll","_window$visualViewpor","_window$visualViewpor2","handleChange","throttle","ev","currentTarget","addEventListener","_window$visualViewpor3","_window$visualViewpor4","removeEventListener"],"sourceRoot":""}