{"version":3,"file":"map.65c7b9aa.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 } 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 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)\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","linkClass","linkClassName","_jsx","className","children","MAP_TYPES","map","isActiveTreemap","activeType","type","query","URLSearchParams","t","activeSubtype","MapSubtypeId","DayPerf","append","NavLink","to","classnames","onClick","document","title","pageTitle","tracking","_jsxs","name","isLoading","Delayed","Spinner","width","treemap","useMapContext","navigate","useNavigate","subtype","useMapType","mapData","useMapData","id","cacheBuster","initData","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","InvestingChannelQueue","push","UAT","Run","e","console","error","destroy","deps","arguments","length","undefined","_ref","tagName","tagProps","placementName","Math","min","max","el","isValidElement","getAttribute","Sentry","captureMessage","extra","JSON","parse","textContent","captureException"],"sourceRoot":""}