{"version":3,"file":"map.b98e8ad6.js","mappings":"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","sources":["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/parseJSONFromScript.ts"],"sourcesContent":["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 )\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","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"],"names":["MapTypeList","props","_props$linkClassName","linkClass","linkClassName","_jsx","className","children","MAP_TYPES","map","isActiveTreemap","activeType","type","query","URLSearchParams","t","activeSubtype","MapSubtypeId","DayPerf","append","NavLink","to","concat","classnames","onClick","document","title","pageTitle","tracking","_jsxs","name","isLoading","Delayed","Spinner","width","_mapData$perfDataQuer","treemap","useMapContext","navigate","useNavigate","subtype","useMapType","mapData","useMapData","value","initData","initialPerf","search","useSearch","hasInvestingChannelAds","useInvestingChannelAds","isNewSubtype","setIsNewSubtype","React","perfDataQuery","isFetching","isLoadingInitialBaseData","baseDataQuery","isPreviousData","isLoadingInitialPerf","isInitialLoading","isFetchingNewPerf","_Fragment","Topbar","navContent","Button","as","href","leftContent","theme","mapControls","Expand","data","Share","mapType","Zoom","Paragraph","size","description","MapSelect","comboBox","items","subtypes","onChange","item","window","location","delete","set","stringQuery","toString","pathname","replace","SearchInput","onInputChange","inputClass","results","result","SearchResult","onItemClick","onMouseLeave","onResultMouseLeave","AdTag","position","ErrorBoundary","resetKeys","FallbackComponent","DefaultErrorBoundary","Map","isFetchingPerf","isLoadingData","dataHash","hash","onNodeClick","mapUtils","id","async","rootEl","getElementById","ReactDOM","render","MapContext","App","mapProps","parseJSONFromScript","queryClient","getQueryClient","defaultOptions","queries","useErrorBoundary","precomputedData","fetchQuery","queryKey","queryFn","perfDataSec","MAP_SUBTYPE_DAY_PERF","scale","scaleId","label","tooltip","sec","Treemap","height","FinvizSettings","hasRedesignEnabled","countIndustryPerf","countSectorPerf","settings","hasDarkTheme","SettingsSmallDark","SettingsSmall","MapTypeId","Sector","isSmall","zoomLevels","version","FinvizIndexSecMap","Canvas","hover","legend","zoom","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","arguments","length","undefined","_ref","tagName","tagProps","placementName","Math","min","max","el","isValidElement","getAttribute","_window$Sentry","Sentry","captureMessage","extra","JSON","parse","textContent","captureException"],"sourceRoot":""}