{"version":3,"file":"map.93ea489f.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.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 page = window.InvestingChannel?.UAT.Run(IC_PUBLISHER_ID)\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","id","cacheBuster","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","value","items","subtypes","label","onChange","item","newSubtype","find","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","async","root","getElementById","ReactDOM","MapContext","App","mapProps","parseJSONFromScript","precomputedData","FinvizSettings","hasRedesignEnabled","perfDataSec","MAP_SUBTYPES_COMPANIES_BY_ID","scale","scaleId","tooltip","sec","Treemap","height","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$InvestingChan2","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":""}