{"version":3,"file":"map.b2effd5b.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","import { 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","import { 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","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","query","URLSearchParams","useLocation","search","typeFromQuery","get","subtypeFromQuery","MAP_TYPES","find","t","subtypes","flatMap","items","MapSubtypeId","DayPerf","MapTypeList","linkClass","linkClassName","map","isActiveTreemap","activeType","activeSubtype","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","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","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":""}