{"version":3,"file":"map.4ca7b4e5.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","_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","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","_MAP_TYPES$find","_type$subtypes$find","query","URLSearchParams","useLocation","search","typeFromQuery","get","subtypeFromQuery","MAP_TYPES","find","t","subtypes","id","MapTypeList","_props$linkClassName","linkClass","linkClassName","map","isActiveTreemap","activeType","activeSubtype","MapSubtypeId","DayPerf","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","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","_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":""}