{"version":3,"file":"map.710889f9.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/maps/components/MapContext.tsx","webpack://@finviz/website/./js/app/maps/components/MapSelect.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/Zoom.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/error-view.tsx","webpack://@finviz/website/./js/main/components/loading.tsx"],"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 { BoxProps } from '../../../main/components/box'\r\nimport { ButtonHTMLProps, ButtonProps } from '../../../main/components/button'\r\nimport { Select, SelectOption, SelectProps } from '../../../main/components/select'\r\nimport { SelectItem } from '../../../main/components/select/types'\r\n\r\nexport enum MapSelectTheme {\r\n light,\r\n dark,\r\n}\r\n\r\ninterface MapSelectThemeReturn {\r\n label: React.HTMLProps\r\n button: ButtonProps & ButtonHTMLProps\r\n popover: BoxProps\r\n}\r\n\r\nfunction getMapSelectTheme(theme: MapSelectTheme): MapSelectThemeReturn | undefined {\r\n switch (theme) {\r\n case MapSelectTheme.dark:\r\n return {\r\n label: {\r\n className: 'text-gray-400',\r\n },\r\n button: {\r\n theme: 'transparent',\r\n rounding: 'none',\r\n className: 'bg-[#4a505f] border border-[#585f72] hover:bg-[#535a6b] hover:border-[#707990]',\r\n contentClass: 'truncate',\r\n rightContent: 'caretDown',\r\n },\r\n popover: {\r\n rounding: 'none',\r\n theme: 'none',\r\n className: 'overflow-y-auto max-h-80 bg-[#4a505f] border border-[#585f72]',\r\n },\r\n }\r\n\r\n case MapSelectTheme.light:\r\n return {\r\n label: { className: 'text-gray-500' },\r\n button: { rounding: 'none', rightContent: 'caretDown' },\r\n popover: { rounding: 'none', className: 'overflow-y-auto max-h-80' },\r\n }\r\n }\r\n}\r\n\r\ninterface MapSelectProps extends Omit, 'theme'> {\r\n /**\r\n * Theme for the map select\r\n *\r\n * @default dark\r\n */\r\n theme?: keyof typeof MapSelectTheme\r\n}\r\n\r\nexport function MapSelect, Name = never>({\r\n label,\r\n 'aria-label': ariaLabel,\r\n theme = 'dark',\r\n ...props\r\n}: MapSelectProps) {\r\n const selectTheme = React.useMemo(() => getMapSelectTheme(MapSelectTheme[theme]), [theme])\r\n\r\n return (\r\n {label}\r\n )\r\n }\r\n aria-label={ariaLabel ?? (typeof label === 'string' ? label : undefined)}\r\n className=\"w-full\"\r\n placeholder=\"Any\"\r\n listProps={selectTheme?.popover}\r\n {...selectTheme?.button}\r\n {...props}\r\n onChange={props.onChange}\r\n name={props.name}\r\n hasPopoverButtonWidthLimit={false}\r\n >\r\n {props.children ??\r\n props.items.map((subtype) => (\r\n \r\n {subtype.label}\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 layoutOptions?: Record\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, { showETF: props.layoutOptions?.showETF })\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 })\r\n\r\n window.scrollTo(0, 0)\r\n }, [treemap, generator, props.data, props.layoutOptions])\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 if (!treemap) return null\r\n\r\n return \r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Button } from '../../../../main/components/button'\r\nimport { SVG } from '../../../../main/components/icon/svg'\r\nimport mapActionCreators from '../../store/action-creators'\r\nimport { useMapContext } from '../Map'\r\n\r\nexport function useZoomButtons() {\r\n const { treemap } = useMapContext()\r\n const zoomOut = React.useCallback(\r\n (ev: React.MouseEvent) => {\r\n if (!treemap) return\r\n ev.preventDefault()\r\n mapActionCreators.zoom(treemap, -1, treemap.width / 2, treemap.height / 2)\r\n },\r\n [treemap]\r\n )\r\n const zoomIn = React.useCallback(\r\n (ev: React.MouseEvent) => {\r\n if (!treemap) return\r\n ev.preventDefault()\r\n mapActionCreators.zoom(treemap, 1, treemap.width / 2, treemap.height / 2)\r\n },\r\n [treemap]\r\n )\r\n\r\n return { zoomIn, zoomOut }\r\n}\r\n\r\nexport function Zoom() {\r\n const handlers = useZoomButtons()\r\n\r\n return (\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}\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 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 }\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 prevPerf = queryClient.getQueryData(['mapPerf', type, subtype]) ?? {\r\n ...FALLBACK_PERF_RESPONSE,\r\n version: dataVersion.current,\r\n }\r\n const apiResponse = await fetchPerfData(type, subtype)\r\n return apiResponse ?? prevPerf\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 } 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 const isDark = document.documentElement.classList.contains('dark')\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: isDark ? 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 })\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: isDark ? 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 })\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","/* 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 DialogFooter,\r\n DialogHeader,\r\n DialogTrigger,\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}\r\n\r\nexport function Share(props: ShareProps) {\r\n const dialogState = useDialogState()\r\n\r\n return (\r\n <>\r\n \r\n Share map\r\n \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\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 close the dialog and try again.\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 { 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')!\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 Sentry from '@sentry/browser'\r\nimport { ReactNode, useEffect } from 'react'\r\nimport { FallbackProps } from 'react-error-boundary'\r\nimport { useRouteError } from 'react-router-dom'\r\n\r\nimport { link } from '../services/routing'\r\nimport { Button } from './button'\r\nimport { Heading, Paragraph } from './typography'\r\n\r\ninterface ErrorViewProps {\r\n /**\r\n * Title of the message\r\n */\r\n title?: ReactNode\r\n\r\n /**\r\n * Body text\r\n */\r\n message?: ReactNode\r\n\r\n /**\r\n * Show contact support text under the message\r\n *\r\n * @default true\r\n */\r\n showContact?: boolean\r\n\r\n /**\r\n * Show refresh page button under the text\r\n *\r\n * @default true\r\n */\r\n showRefresh?: boolean\r\n}\r\n\r\nexport function ErrorView({ title, message, showContact = true, showRefresh = true }: ErrorViewProps) {\r\n return (\r\n
    \r\n {title}\r\n {message}\r\n\r\n {showContact && (\r\n \r\n Our development team has been notified of this. If the error persists, please{' '}\r\n \r\n contact support\r\n \r\n .\r\n \r\n )}\r\n\r\n {showRefresh && (\r\n \r\n Refresh page\r\n \r\n )}\r\n
    \r\n )\r\n}\r\n\r\nexport function DefaultErrorBoundary(props: Partial) {\r\n useEffect(() => {\r\n Sentry.captureException(props.error, { level: 'fatal' })\r\n }, [props.error])\r\n\r\n return \r\n}\r\n\r\nexport function RouterErrorElement() {\r\n const error = useRouteError() as Error\r\n return \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"],"names":["MapContext","props","_jsx","MapContextProvider","children","QueryClientContext","React","fallback","className","Loading","BrowserRouter","MapSelectTheme","MapSelect","_ref","label","ariaLabel","theme","selectTheme","dark","button","rounding","contentClass","rightContent","popover","light","getMapSelectTheme","Select","size","classnames","undefined","placeholder","listProps","onChange","name","hasPopoverButtonWidthLimit","items","map","subtype","SelectOption","value","filterItems","stocks","arguments","length","input","filter","stock","indexOf","description","toUpperCase","sort","a","b","slice","useSearch","treemap","useMapContext","setValue","results","setResults","nodes","onInputChange","event","target","onItemClick","node","cx","x","dx","cy","y","dy","diffX","width","diffY","height","MapActionCreators","getLastZoomLevel","mapNodeId","onResultMouseLeave","SearchInput","Input","leftContent","SearchResult","result","onClick","onMouseLeave","_jsxs","Button","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","showETF","layoutOptions","mapActionCreators","scrollTo","isMobile","isIpad","Share","uploadImage","useMutation","api","onShareClick","async","canvas","mapStore","drawShareMap","mapType","getFormattedDateString","mutate","ShareDialog","state","useZoomButtons","zoomOut","ev","preventDefault","zoomIn","Zoom","handlers","_Fragment","SVG","Topbar","navContent","mapControls","useMapData","cacheBuster","mapBaseData","fetchBaseData","fetchPerfData","queryClient","useQueryClient","dataVersion","prevType","perfData","setQueryData","current","baseDataQuery","useQuery","queryKey","queryFn","initialData","cacheTime","Infinity","staleTime","perfDataQuery","prevPerf","getQueryData","FALLBACK_PERF_RESPONSE","version","keepPreviousData","refetchInterval","onSuccess","location","reload","restoredData","useMapType","query","URLSearchParams","useLocation","search","typeFromQuery","get","subtypeFromQuery","MAP_TYPES","t","subtypes","find","id","MapTypeList","linkClass","linkClassName","isActiveTreemap","activeType","activeSubtype","MapSubtypeId","append","NavLink","to","title","pageTitle","tracking","isLoading","Delayed","Spinner","navigate","useNavigate","mapData","initData","hasInvestingChannelAds","useInvestingChannelAds","isNewSubtype","setIsNewSubtype","isFetching","isLoadingInitialBaseData","isPreviousData","isLoadingInitialPerf","isInitialLoading","isFetchingNewPerf","as","href","Paragraph","buttonContent","item","newSubtype","delete","set","stringQuery","toString","pathname","replace","inputClass","AdTag","position","ErrorBoundary","resetKeys","FallbackComponent","DefaultErrorBoundary","Map","isFetchingPerf","isLoadingData","onNodeClick","root","ReactDOM","App","mapProps","parseJSONFromScript","precomputedData","FinvizSettings","hasRedesignEnabled","isDark","documentElement","perfDataSec","MAP_SUBTYPES_COMPANIES_BY_ID","scaleId","tooltip","sec","Treemap","countIndustryPerf","countSectorPerf","settings","SettingsSmallDark","SettingsSmall","MapTypeId","zoomLevels","FinvizIndexSecMap","Canvas","hover","legend","alt","perfDataGeo","geo","SettingsSmallGeoDark","SettingsSmallGeo","FinvizIndexGeoMap","renderTreemaps","AdTagName","tagDefinition","IC_TickerInContent","placements","style","minHeight","IC_MapsLeftRail","IC_Statements","IC_Groups","getInvestingChannelPage","page","create","InvestingChannelQueue","push","InvestingChannel","UAT","Run","e","console","error","destroy","deps","tagName","tagProps","placementName","Math","min","max","dialogState","useDialogState","DialogTrigger","Dialog","DialogHeader","onCloseClick","hide","DialogBody","ShareDialogBody","isError","DialogFooter","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","fillStyle","fillRect","logo","loadImage","logoBase64","drawImage","textBaseline","textAlign","font","i","textWidth","measureText","fillText","divider","toDataURL","doc","el","isValidElement","getAttribute","Sentry","captureMessage","extra","JSON","parse","textContent","captureException","showContact","link","origin","useEffect","RouterErrorElement","useRouteError","delay","timeout","throwOnTimeout","delayComponent","timeoutComponent","LoadingScreen"],"sourceRoot":""}