{"version":3,"file":"map.b3a2fc35.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/maps/components/CanvasHover.tsx","webpack://@finviz/website/./js/app/maps/components/Legend.tsx","webpack://@finviz/website/./js/app/maps/components/Canvas.tsx","webpack://@finviz/website/./js/app/maps/components/Map.tsx","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/maps/services/api.ts","webpack://@finviz/website/./js/app/maps/constants/font.ts","webpack://@finviz/website/./js/app/maps/zoom.ts","webpack://@finviz/website/./js/app/maps/treemap.ts","webpack://@finviz/website/./js/app/shared/components/Ads.tsx","webpack://@finviz/website/./js/app/shared/components/QueryClientContext.tsx","webpack://@finviz/website/./js/app/shared/components/Share.tsx","webpack://@finviz/website/./js/app/shared/components/Sparkline.tsx","webpack://@finviz/website/./js/app/shared/drawShareMap.ts","webpack://@finviz/website/./js/app/shared/getTextFontFamily.ts","webpack://@finviz/website/./js/app/shared/loadImage.ts","webpack://@finviz/website/./js/app/shared/parseJSONFromScript.ts","webpack://@finviz/website/./js/app/shared/retinafy.ts","webpack://@finviz/website/./js/app/shared/tracking.ts","webpack://@finviz/website/./js/main/components/error-view.tsx","webpack://@finviz/website/./js/main/components/loading.tsx","webpack://@finviz/website/../node_modules/prop-types/factoryWithThrowingShims.js","webpack://@finviz/website/../node_modules/prop-types/index.js","webpack://@finviz/website/../node_modules/prop-types/lib/ReactPropTypesSecret.js"],"sourcesContent":["import { Component } from 'react'\r\n\r\nimport '../../../../styles/map-hover.css'\r\nimport Sparkline from '../../shared/components/Sparkline'\r\nimport MapActions from '../store/action-creators'\r\nimport MapStore from '../store/mapStore'\r\nimport Treemap from '../treemap'\r\nimport { MapDataNode, MapTypeId } from '../types'\r\nimport { getVisibleTooltipTickers } from '../utils'\r\n\r\ninterface CanvasHoverProps {\r\n treemap: Treemap\r\n mapType: MapTypeId\r\n}\r\n\r\ninterface CanvasHoverState {\r\n visibleTickers: string[]\r\n activeNode?: MapDataNode\r\n sparklinesData: Record\r\n}\r\n\r\nclass CanvasHover extends Component {\r\n state: CanvasHoverState = { visibleTickers: [], activeNode: undefined, sparklinesData: {} }\r\n\r\n componentDidMount() {\r\n MapStore.addChangeListener(this._onChange)\r\n document.addEventListener('mousemove', this._onMouseMove)\r\n }\r\n\r\n componentWillUnmount() {\r\n MapActions.loadSparklinesCancel()\r\n MapStore.removeChangeListener(this._onChange)\r\n document.removeEventListener('mousemove', this._onMouseMove)\r\n }\r\n\r\n componentDidUpdate(_: CanvasHoverProps, prevState: CanvasHoverState) {\r\n const { activeNode, visibleTickers, sparklinesData } = this.state\r\n\r\n if (!activeNode || activeNode.name === prevState?.activeNode?.name) return\r\n\r\n if (!visibleTickers.includes(activeNode.name)) {\r\n visibleTickers.push(activeNode.name)\r\n }\r\n\r\n const tickersToLoad = visibleTickers.filter((ticker) => !sparklinesData[ticker])\r\n\r\n if (tickersToLoad.length) {\r\n MapActions.loadSparklineData(tickersToLoad, this.props.mapType)\r\n }\r\n }\r\n\r\n _onChange = () => {\r\n const activeNode = MapStore.getHoveredNode()\r\n const sparklinesData = MapStore.getSparklines()\r\n\r\n this.setState({\r\n visibleTickers: getVisibleTooltipTickers(activeNode),\r\n activeNode,\r\n sparklinesData,\r\n })\r\n }\r\n\r\n _formatPerf = (d: MapDataNode) => {\r\n if (typeof d.additional !== 'undefined' && d.additional !== null) {\r\n return d.additional\r\n } else if (typeof d.perf !== 'undefined' && d.perf !== null) {\r\n return this.props.treemap.formatValue(d.perf.toFixed(2))\r\n } else {\r\n return 'N/A'\r\n }\r\n }\r\n\r\n render() {\r\n var d = MapStore.getHoveredNode()\r\n if (!this.state.activeNode || !d) {\r\n return null\r\n }\r\n var hasSparkline =\r\n this.state.sparklinesData && this.state.sparklinesData[d.name] && this.state.sparklinesData[d.name].length > 0\r\n var price = hasSparkline\r\n ? this.state.sparklinesData[d.name][this.state.sparklinesData[d.name].length - 1].toFixed(2)\r\n : ''\r\n var colorScale = this.props.treemap.colorScale\r\n var type = this.props.treemap.type\r\n\r\n var children = d.parent.children\r\n .filter((node) => this.state.visibleTickers.includes(node.name))\r\n .sort((a, b) => b.dx * b.dy - a.dx * a.dy)\r\n\r\n var isSmall = children.length > 15\r\n var title = (type !== MapTypeId.World ? d.parent.parent.name + ' - ' : '') + d.parent.name\r\n return (\r\n
\r\n

{title}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {d.description}\r\n \r\n \r\n\r\n {children.map((c) => {\r\n var hasSparkline =\r\n this.state.sparklinesData &&\r\n this.state.sparklinesData[c.name] &&\r\n this.state.sparklinesData[c.name].length > 0\r\n var data = hasSparkline ? this.state.sparklinesData[c.name] : []\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n
{d.name}\r\n {hasSparkline ? (\r\n \r\n ) : null}\r\n {price}{this._formatPerf(d)}
{c.name}\r\n {hasSparkline ? (\r\n \r\n ) : null}\r\n {hasSparkline ? data[data.length - 1].toFixed(2) : ''}\r\n {this._formatPerf(c)}\r\n
\r\n
\r\n )\r\n }\r\n\r\n _onMouseMove = (e: MouseEvent) => {\r\n if (!this.state.activeNode) {\r\n return\r\n }\r\n var marginLeft = 100\r\n var marginTop = 0\r\n var el = document.getElementById('hover')!\r\n var hoverWidth = el.scrollWidth\r\n var hoverHeight = el.scrollHeight\r\n var availWidth = document.documentElement.clientWidth\r\n var availHeight = document.documentElement.clientHeight\r\n if (e.clientX + hoverWidth + marginLeft * 1.5 < availWidth) {\r\n el.style.left = e.clientX + marginLeft + 'px'\r\n } else if (e.clientX - hoverWidth - marginLeft > 0) {\r\n el.style.left = e.clientX - marginLeft - hoverWidth + 'px'\r\n } else {\r\n marginLeft = 20\r\n if (e.clientX + hoverWidth + marginLeft < availWidth) {\r\n el.style.left = e.clientX + marginLeft + 'px'\r\n } else {\r\n el.style.left = e.clientX - marginLeft - hoverWidth + 'px'\r\n }\r\n }\r\n el.style.top =\r\n Math.max(0, e.clientY + marginTop - Math.max(0, e.clientY + marginTop + hoverHeight - availHeight)) + 'px'\r\n }\r\n}\r\n\r\nexport default CanvasHover\r\n","import { scaleStepFormat } from '../constants/settings'\r\nimport MapStore from '../store/mapStore'\r\nimport Treemap from '../treemap'\r\nimport { MapTypeId, Scale } from '../types'\r\n\r\ninterface LegendProps {\r\n treemap: Treemap\r\n scale: Scale\r\n}\r\n\r\nfunction Legend(props: LegendProps) {\r\n const colorScale = props.treemap.colorScale\r\n\r\n if (!colorScale) {\r\n return null\r\n }\r\n\r\n var boxover =\r\n 'cssbody=[tooltip_bdy] cssheader=[tooltip_hdr] header=[' +\r\n props.scale.name +\r\n \"] body=[
\" +\r\n props.scale.tooltip +\r\n '
] offsety=[-70] delay=[500]'\r\n\r\n const [scaleMin, scaleMax] = props.treemap.getScaleMinMax()\r\n var steps = [scaleMin]\r\n var diff = scaleMax - scaleMin\r\n if (diff > 0) {\r\n var step = diff / 6\r\n for (var i = 1; i < 7; i++) {\r\n steps.push(Math.round((scaleMin + step * i) * 10) / 10)\r\n }\r\n }\r\n\r\n if (props.scale.id === '_rec') {\r\n steps = [5, 4, 3, 2, 1]\r\n } else if (props.scale.id === '_earndate') {\r\n steps = [-30, -15, -1, 1, 15, 30]\r\n }\r\n\r\n // TODO some widths\r\n var stepWidth = ['_rec', '_earndate'].indexOf(props.scale.id) !== -1 ? 100 : 50\r\n var format = scaleStepFormat[props.scale.id]\r\n return (\r\n
\r\n {props.treemap.type !== MapTypeId.Portfolio && (\r\n
\r\n Use mouse wheel to zoom in and out. Drag zoomed map to pan it.\r\n
\r\n Double‑click a ticker to display detailed information in a new window.\r\n
\r\n {!MapStore.isWidget() &&\r\n 'Hover mouse cursor over a ticker to see its main competitors in a stacked view with a 3-month history graph.'}\r\n
\r\n )}\r\n
\r\n {steps.map((step, index) => (\r\n \r\n {props.treemap.formatValue(step.toString(), [scaleMin, scaleMax], format)}\r\n
\r\n ))}\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default Legend\r\n","import Hammer from 'hammerjs'\r\nimport * as React from 'react'\r\n\r\nimport { loadImage } from '../../shared/loadImage'\r\nimport { retinafy } from '../../shared/retinafy'\r\nimport LayoutGenerator from '../layout-generator'\r\nimport MapActionCreators from '../store/action-creators'\r\nimport mapActionCreators from '../store/action-creators'\r\nimport MapStore from '../store/mapStore'\r\nimport Treemap from '../treemap'\r\nimport { MapDataIndustry, MapDataNode, MapDataSector, MapTypeId, NodeDepth, Scale } from '../types'\r\nimport { getOffset } from '../utils'\r\nimport CanvasHover from './CanvasHover'\r\nimport Legend from './Legend'\r\n\r\ninterface CanvasProps {\r\n alt?: string\r\n treemap: Treemap\r\n zoom?: boolean\r\n legend?: boolean\r\n zoomOnWheel?: boolean\r\n hover?: boolean\r\n scale: Scale\r\n onNodeClick?: (props: {\r\n event: React.MouseEvent\r\n treemap: Treemap\r\n node?: MapDataNode\r\n industry?: MapDataIndustry\r\n sector?: MapDataSector\r\n }) => void\r\n}\r\n\r\n// TODO presunt w, h, zoom, translate do stavu\r\nclass Canvas extends React.Component {\r\n static defaultProps = {\r\n zoom: true,\r\n legend: true,\r\n hover: true,\r\n zoomOnWheel: true,\r\n }\r\n\r\n state = {\r\n zoom: 1,\r\n dataTimestamp: MapStore.getDataTimestamp(),\r\n initialized: false,\r\n type: this.props.treemap.type,\r\n updateTimestamp: undefined,\r\n }\r\n\r\n _canvas = React.createRef()\r\n _hoverCanvas = React.createRef()\r\n\r\n // @ts-ignore\r\n _canvasContext: CanvasRenderingContext2D\r\n // @ts-ignore\r\n _hoverContext: CanvasRenderingContext2D\r\n\r\n _cache: Record = {}\r\n mouseDown: boolean = false\r\n lastPanX: number = 0\r\n lastPanY: number = 0\r\n\r\n // @ts-ignore\r\n worldBackground: HTMLImageElement\r\n\r\n constructor(props: CanvasProps) {\r\n super(props)\r\n\r\n this._cache = {}\r\n\r\n for (var event of [\r\n '_onChange',\r\n '_onMouseDown',\r\n '_onMouseMove',\r\n '_onMouseUp',\r\n '_onMouseLeave',\r\n '_onDoubleClick',\r\n '_onWheel',\r\n '_onPanStart',\r\n '_onPanMove',\r\n '_onPinch',\r\n '_getPublishCanvas',\r\n ]) {\r\n // @ts-ignore\r\n this[event] = this[event].bind(this)\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n MapStore.addChangeListener(this._onChange)\r\n mapActionCreators._setOnPublish(this._getPublishCanvas)\r\n\r\n this._initialize()\r\n }\r\n\r\n componentDidUpdate() {\r\n const { treemap } = this.props\r\n const { initialized, updateTimestamp, zoom, type } = this.state\r\n\r\n if (!initialized) return\r\n\r\n if (type !== treemap.type) {\r\n this.setState({ initialized: false, zoom: 1, type: treemap.type }, this._initialize)\r\n mapActionCreators.setHoveredNode(undefined)\r\n mapActionCreators.resetSparklineData()\r\n return\r\n }\r\n\r\n // Resize & update cache\r\n if (treemap.updateTimestamp && treemap.updateTimestamp !== updateTimestamp) {\r\n this._setCanvasSize(treemap.width, treemap.height)\r\n treemap.getZoomLevels().forEach((zoomLevel: number) => {\r\n this._createCache(zoomLevel)\r\n })\r\n this.setState({ updateTimestamp: treemap.updateTimestamp })\r\n }\r\n\r\n // Redraw\r\n const [x, y] = treemap.zoom.translate()\r\n this.renderFromCache(this._canvasContext, zoom, treemap.width, treemap.height, x, y)\r\n this.renderHover(this._hoverContext)\r\n }\r\n\r\n componentWillUnmount() {\r\n // TODO remove hammer listener\r\n MapStore.removeChangeListener(this._onChange)\r\n this._hoverCanvas.current?.removeEventListener('wheel', this._onWheel)\r\n }\r\n\r\n render() {\r\n const { alt, treemap, scale, legend, hover, zoom } = this.props\r\n\r\n return (\r\n
\r\n \r\n {alt}\r\n \r\n {(hover || zoom) && (\r\n \r\n )}\r\n {legend && }\r\n {hover && }\r\n
\r\n )\r\n }\r\n\r\n renderFromCache(\r\n context: CanvasRenderingContext2D,\r\n scale: number,\r\n width: number,\r\n height: number,\r\n tx: number,\r\n ty: number\r\n ) {\r\n const zoomLevels = this.props.treemap.getZoomLevels()\r\n\r\n let nearestSize: number = zoomLevels[0]\r\n for (var i = 0, len = zoomLevels.length; i < len; i++) {\r\n const level = zoomLevels[i]\r\n if (this._cache[level]?.canvas && level >= +scale.toFixed(2)) {\r\n nearestSize = level\r\n break\r\n }\r\n }\r\n\r\n context.save()\r\n context.drawImage(this._cache[nearestSize].canvas, ~~tx, ~~ty, ~~(width * scale), ~~(height * scale))\r\n context.restore()\r\n }\r\n\r\n _onChange() {\r\n const { treemap } = this.props\r\n const dataTimestamp = MapStore.getDataTimestamp()\r\n\r\n this.setState({ zoom: treemap.zoom.scale() })\r\n if (this.state.dataTimestamp !== dataTimestamp) {\r\n let scale = treemap.zoom.scale()\r\n let translate = treemap.zoom.translate()\r\n\r\n treemap.getZoomLevels().forEach((zoomLevel: number) => {\r\n this._createCache(zoomLevel)\r\n })\r\n\r\n treemap.zoom.scale(scale)\r\n treemap.zoom.translateAbs([translate[0], translate[1]])\r\n\r\n this.setState({ dataTimestamp })\r\n }\r\n }\r\n\r\n _onMouseDown() {\r\n this.mouseDown = true\r\n }\r\n\r\n _onMouseMove(e: React.MouseEvent) {\r\n if (this.mouseDown || !this.props.hover) return\r\n\r\n const { treemap } = this.props\r\n var { offsetX, offsetY } = getOffset(e)\r\n const nodeAtPosition = treemap.getNodeAtPosition(offsetX, offsetY)\r\n if (nodeAtPosition) {\r\n MapActionCreators.setHoveredNode(nodeAtPosition)\r\n } else {\r\n const industryAtPosition = treemap.getIndustryAtPosition(offsetX, offsetY)\r\n const nodeAtPosition = industryAtPosition?.children[0]\r\n MapActionCreators.setHoveredNode(nodeAtPosition)\r\n }\r\n }\r\n\r\n _onMouseUp() {\r\n this.mouseDown = false\r\n }\r\n\r\n _onMouseLeave() {\r\n MapActionCreators.setHoveredNode(undefined)\r\n }\r\n\r\n _onDoubleClick(e: React.MouseEvent) {\r\n const { treemap } = this.props\r\n const { offsetX, offsetY } = getOffset(e)\r\n const nodeAtPosition = treemap.getNodeAtPosition(offsetX, offsetY)\r\n const industryAtPosition = treemap.getIndustryAtPosition(offsetX, offsetY)\r\n const sectorAtPosition = treemap.getSectorAtPosition(offsetX, offsetY)\r\n this.props.onNodeClick?.({\r\n event: e,\r\n treemap,\r\n node: nodeAtPosition,\r\n industry: industryAtPosition,\r\n sector: sectorAtPosition,\r\n })\r\n }\r\n\r\n _onWheel(e: MouseEvent) {\r\n if (!this.props.zoom) return\r\n\r\n e.preventDefault()\r\n\r\n if (!this.state.initialized) {\r\n return\r\n }\r\n\r\n var { offsetX, offsetY } = getOffset(e)\r\n // @ts-ignore\r\n MapActionCreators.zoom(this.props.treemap, -e.deltaY, offsetX, offsetY)\r\n }\r\n\r\n _onPanStart(e: any) {\r\n if (!this.state.initialized) {\r\n return\r\n }\r\n\r\n this.lastPanX = e.pointers[0].clientX\r\n this.lastPanY = e.pointers[0].clientY\r\n }\r\n\r\n _onPanMove(e: any) {\r\n if (!this.state.initialized) {\r\n return\r\n }\r\n\r\n var movementX = this.lastPanX - e.pointers[0].clientX\r\n var movementY = this.lastPanY - e.pointers[0].clientY\r\n this.lastPanX = e.pointers[0].clientX\r\n this.lastPanY = e.pointers[0].clientY\r\n const { treemap } = this.props\r\n MapActionCreators.changeTranslate(treemap, movementX, movementY)\r\n }\r\n\r\n _onPinch(e: any) {\r\n if (!this.state.initialized || !this.props.zoom || e.pointers.length < 2) {\r\n return\r\n }\r\n\r\n var offsetX1 = e.pointers[0].clientX - e.target.offsetLeft - e.target.offsetParent.offsetLeft, // TODO fix scrolled\r\n offsetY1 = e.pointers[0].clientY - e.target.offsetTop - e.target.offsetParent.offsetTop,\r\n offsetX2 = e.pointers[1].clientX - e.target.offsetLeft - e.target.offsetParent.offsetLeft,\r\n offsetY2 = e.pointers[1].clientY - e.target.offsetTop - e.target.offsetParent.offsetTop,\r\n offsetX = (offsetX1 + offsetX2) / 2,\r\n offsetY = (offsetY1 + offsetY2) / 2\r\n var direction = e.scale >= 1 ? 1 : -1\r\n MapActionCreators.zoom(this.props.treemap, direction, offsetX, offsetY)\r\n }\r\n\r\n _setCanvasContexts() {\r\n const canvas = this._canvas.current!\r\n const canvasContext = canvas.getContext('2d')!\r\n this._canvasContext = canvasContext\r\n\r\n if (this.props.hover || this.props.zoom) {\r\n const hoverCanvas = this._hoverCanvas.current!\r\n const hoverContext = hoverCanvas.getContext('2d')!\r\n\r\n this._hoverContext = hoverContext\r\n }\r\n }\r\n\r\n _setCanvasSize(width: number, height: number) {\r\n retinafy(this._canvas.current, this._canvasContext, width, height)\r\n\r\n if (this.props.hover || this.props.zoom) {\r\n retinafy(this._hoverCanvas.current, this._hoverContext, width, height)\r\n }\r\n }\r\n\r\n async _initialize() {\r\n const { treemap, zoomOnWheel } = this.props\r\n\r\n this._setCanvasContexts()\r\n this._setCanvasSize(treemap.width, treemap.height)\r\n\r\n var renderLevel = (zoomLevelIndex: number) => {\r\n var zoomLevels = treemap.getZoomLevels()\r\n this._createCache(zoomLevels[zoomLevelIndex])\r\n\r\n if (zoomLevelIndex === 0) {\r\n const [x, y] = treemap.zoom.translate()\r\n this.renderFromCache(this._canvasContext, this.state.zoom, treemap.width, treemap.height, x, y)\r\n }\r\n\r\n if (zoomLevelIndex + 1 < zoomLevels.length) {\r\n setTimeout(() => {\r\n renderLevel(zoomLevelIndex + 1)\r\n }, 0)\r\n }\r\n\r\n if (zoomLevelIndex === zoomLevels.length - 1) {\r\n this.setState({ initialized: true })\r\n\r\n const hoverCanvas = this._hoverCanvas.current\r\n\r\n if (!hoverCanvas) return\r\n\r\n var hammertime = new Hammer(hoverCanvas)\r\n hammertime.get('pinch').set({ enable: true, threshold: 0.1 })\r\n hammertime.on('panstart', this._onPanStart)\r\n hammertime.on('panmove', this._onPanMove)\r\n hammertime.on('pinch', this._onPinch)\r\n\r\n if (zoomOnWheel) {\r\n hoverCanvas.addEventListener('wheel', this._onWheel, { passive: false })\r\n }\r\n }\r\n }\r\n\r\n var render = () => {\r\n setTimeout(() => {\r\n renderLevel(0)\r\n }, 0)\r\n }\r\n\r\n if (treemap.type === MapTypeId.World) {\r\n try {\r\n const image = await this._getTreemapGeoBackground()\r\n this.worldBackground = await loadImage(image.default)\r\n } catch {}\r\n render()\r\n } else {\r\n render()\r\n }\r\n }\r\n\r\n async _getTreemapGeoBackground() {\r\n if (this.props.treemap.getIsSmall()) {\r\n const isDark = document.documentElement.classList.contains('dark')\r\n return isDark ? import('../assets/map_geo_small_dark@2x.png') : import('../assets/map_geo_small@2x.png')\r\n }\r\n\r\n return import('../assets/map_geo.png')\r\n }\r\n\r\n _createCache(scale: number) {\r\n const { treemap } = this.props\r\n\r\n const oldScale = treemap.zoom.scale()\r\n const oldTranslate = treemap.zoom.translate()\r\n const width = ~~(treemap.width * scale)\r\n const height = ~~(treemap.height * scale)\r\n\r\n if (!this._cache[scale]) {\r\n const cacheCanvas = document.createElement('canvas')\r\n const cacheContext = cacheCanvas.getContext('2d')!\r\n\r\n this._cache[scale] = { canvas: cacheCanvas, context: cacheContext }\r\n }\r\n\r\n retinafy(this._cache[scale].canvas, this._cache[scale].context, width, height)\r\n\r\n treemap.zoom.scale(scale)\r\n treemap.zoom.translateAbs([0, 0])\r\n this.renderCanvas(this._cache[scale].context, treemap)\r\n treemap.zoom.scale(oldScale)\r\n treemap.zoom.translateAbs(oldTranslate)\r\n }\r\n\r\n renderHover(context: CanvasRenderingContext2D) {\r\n if (!this.props.hover) return\r\n\r\n const { treemap } = this.props\r\n const { hover } = treemap.settings.industry\r\n const hoveredNode = MapStore.getHoveredNode()\r\n const industry = hoveredNode?.parent\r\n\r\n context.save()\r\n\r\n context.clearRect(0, 0, treemap.width, treemap.height)\r\n context.translate.apply(context, treemap.zoom.translate())\r\n context.scale(treemap.zoom.scale(), treemap.zoom.scale())\r\n\r\n if (!industry) {\r\n context.restore()\r\n return\r\n }\r\n\r\n const showIndustryHeader =\r\n LayoutGenerator.isNodeHeaderVisible(industry, treemap.settings) && industry.depth === NodeDepth.Industry\r\n let industryOffset =\r\n treemap.getIsSmall() || showIndustryHeader\r\n ? treemap.settings.industry.padding.top\r\n : LayoutGenerator.smallIndustryPadding.top\r\n\r\n if (industry.depth === NodeDepth.Sector) industryOffset = treemap.settings.sector.header.height\r\n\r\n if (showIndustryHeader && !treemap.getIsSmall()) {\r\n industryOffset += 1.5\r\n }\r\n\r\n // Outter border\r\n context.strokeStyle = hover?.border ?? 'transparent'\r\n context.lineWidth = 3\r\n context.strokeRect(industry.x - 0.5, industry.y - 0.5 + industryOffset, industry.dx, industry.dy - industryOffset)\r\n\r\n // Inner borders\r\n context.translate(0.5, 0.5)\r\n context.lineWidth = 1\r\n context.beginPath()\r\n for (let i = 0; i < industry.children.length; i++) {\r\n const node = industry.children[i]\r\n context.moveTo(node.x - 1, node.y - 1)\r\n context.lineTo(node.x + node.dx - 1, node.y - 1)\r\n context.lineTo(node.x + node.dx - 1, node.y + node.dy - 1)\r\n context.lineTo(node.x - 1, node.y + node.dy - 1)\r\n context.lineTo(node.x - 1, node.y - 1.5)\r\n }\r\n context.stroke()\r\n\r\n // Header and text\r\n if (!treemap.getIsSmall() && showIndustryHeader) {\r\n context.translate(-0.5, -0.5)\r\n treemap.renderIndustryHeader({\r\n node: industry,\r\n context,\r\n config: hover,\r\n parent: treemap.settings.industry,\r\n fill: hover?.background ?? treemap.settings.background,\r\n })\r\n treemap.renderNodeText({ node: industry, context, config: hover, parent: treemap.settings.industry })\r\n }\r\n\r\n context.restore()\r\n }\r\n\r\n renderCanvas(context: CanvasRenderingContext2D, treemap: Treemap) {\r\n context.save()\r\n\r\n const scale = treemap.zoom.scale()\r\n\r\n context.fillStyle = treemap.settings.background\r\n context.fillRect(0, 0, treemap.width * scale, treemap.height * scale)\r\n\r\n context.translate.apply(context, treemap.zoom.translate())\r\n context.scale(scale, scale)\r\n\r\n /* BACKGROUND */\r\n if (treemap.type === MapTypeId.World && this.worldBackground) {\r\n if (treemap.getIsSmall()) context.translate(0, 20)\r\n\r\n context.drawImage(\r\n this.worldBackground,\r\n 0,\r\n 0,\r\n this.worldBackground.naturalWidth,\r\n this.worldBackground.naturalHeight,\r\n 0,\r\n 20,\r\n treemap.width,\r\n treemap.width / (this.worldBackground.naturalWidth / this.worldBackground.naturalHeight)\r\n )\r\n }\r\n\r\n if (treemap.settings.sector.background) {\r\n context.fillStyle = treemap.settings.sector.background\r\n for (let index = 0; index < treemap.sectors.length; index++) {\r\n const node = treemap.sectors[index]\r\n context.fillRect(node.x, node.y, node.dx, node.dy)\r\n }\r\n }\r\n\r\n if (treemap.settings.industry.background) {\r\n context.fillStyle = treemap.settings.industry.background\r\n for (let index = 0; index < treemap.industries.length; index++) {\r\n const node = treemap.industries[index]\r\n context.fillRect(node.x, node.y + 3, node.dx - 1, node.dy - 4)\r\n }\r\n }\r\n\r\n /* STOCKS */\r\n for (let index = 0; index < treemap.nodes.length; index++) {\r\n const node = treemap.nodes[index]\r\n if (!node.parent) continue // Skip on root node\r\n treemap.renderStockNode(treemap.nodes[index], context)\r\n }\r\n\r\n /* INDUSTRIES */\r\n for (let index = 0; index < treemap.industries.length; index++) {\r\n const node = treemap.industries[index]\r\n const isLargeNode = LayoutGenerator.isNodeHeaderVisible(node, treemap.settings)\r\n const isGeoMap = treemap.type === MapTypeId.World\r\n const renderBackground = treemap.getIsSmall() ? isGeoMap : !isGeoMap\r\n\r\n if (!isLargeNode || (treemap.getIsSmall() && !isGeoMap)) continue\r\n\r\n if (Number.isFinite(node.perf) && renderBackground) {\r\n treemap.renderIndustryHeader({\r\n node,\r\n context,\r\n config: treemap.settings.industry.header,\r\n parent: treemap.settings.industry,\r\n fill: treemap.colorScale(node.perf),\r\n })\r\n }\r\n\r\n treemap.renderNodeText({\r\n node,\r\n context,\r\n config: treemap.settings.industry.header,\r\n parent: treemap.settings.industry,\r\n })\r\n }\r\n\r\n /* SECTORS */\r\n if (treemap.type !== MapTypeId.World) {\r\n for (let index = 0; index < treemap.sectors.length; index++) {\r\n const node = treemap.sectors[index]\r\n\r\n if (treemap.getIsSmall()) {\r\n treemap.renderIndustryHeader({\r\n node,\r\n context,\r\n config: treemap.settings.sector.header,\r\n parent: treemap.settings.sector,\r\n fill: treemap.settings.sector.header.background ?? treemap.colorScale(node.perf),\r\n })\r\n }\r\n\r\n treemap.renderNodeText({\r\n node,\r\n context,\r\n config: treemap.settings.sector.header,\r\n parent: treemap.settings.sector,\r\n })\r\n }\r\n }\r\n\r\n context.restore()\r\n\r\n if (treemap.settings.sector.border) {\r\n this.renderSectorBorders(context, treemap)\r\n }\r\n }\r\n\r\n renderSectorBorders(context: CanvasRenderingContext2D, treemap: Treemap) {\r\n const scale = treemap.zoom.scale()\r\n context.lineWidth = 2 * scale\r\n context.strokeStyle = treemap.settings.sector.border ?? 'transparent'\r\n\r\n context.beginPath()\r\n\r\n // Outside border\r\n context.moveTo(0, 0)\r\n context.lineTo(treemap.width * scale, 0)\r\n context.lineTo(treemap.width * scale, treemap.height * scale)\r\n context.lineTo(0, treemap.height * scale)\r\n context.lineTo(0, -1)\r\n\r\n for (let index = 0; index < treemap.sectors.length; index++) {\r\n const sector = treemap.sectors[index]\r\n\r\n context.strokeRect(sector.x * scale, sector.y * scale, sector.dx * scale, sector.dy * scale)\r\n }\r\n\r\n context.stroke()\r\n }\r\n\r\n _getPublishCanvas() {\r\n return this._cache[1].canvas\r\n }\r\n}\r\n\r\nexport default Canvas\r\n","import classnames from 'classnames'\r\nimport throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\nimport { Delayed } from '../../../main/components/delayed'\r\nimport { Spinner } from '../../../main/components/spinner'\r\nimport { ISettings } from '../constants/settings'\r\nimport LayoutGenerator from '../layout-generator'\r\nimport mapActionCreators from '../store/action-creators'\r\nimport Treemap from '../treemap'\r\nimport { MapDataRoot, MapSubtype, MapType } from '../types'\r\nimport * as mapUtils from '../utils'\r\nimport Canvas from './Canvas'\r\n\r\nconst MapContext = React.createContext<{\r\n treemap?: Treemap\r\n setTreemap: React.Dispatch>\r\n generator?: LayoutGenerator\r\n setGenerator: React.Dispatch>\r\n}>({ setTreemap: () => {}, setGenerator: () => {} })\r\n\r\nexport function useMapContext() {\r\n return React.useContext(MapContext)\r\n}\r\n\r\nexport function MapContextProvider(props: React.PropsWithChildren<{}>) {\r\n const [treemap, setTreemap] = React.useState()\r\n const [generator, setGenerator] = React.useState()\r\n\r\n return (\r\n {props.children}\r\n )\r\n}\r\n\r\ninterface MapProps {\r\n className?: string\r\n isLoadingData?: boolean\r\n isFetchingPerf?: boolean\r\n type: MapType\r\n subtype: MapSubtype\r\n data?: MapDataRoot\r\n settings?: ISettings\r\n showETF?: boolean\r\n onNodeClick?: React.ComponentProps['onNodeClick']\r\n zoom?: boolean\r\n zoomOnWheel?: boolean\r\n legend?: boolean\r\n hover?: boolean\r\n}\r\n\r\nexport function Map({\r\n className,\r\n isLoadingData,\r\n isFetchingPerf = isLoadingData,\r\n type,\r\n subtype,\r\n data,\r\n settings,\r\n showETF,\r\n onNodeClick,\r\n zoom,\r\n zoomOnWheel,\r\n legend,\r\n hover,\r\n}: MapProps) {\r\n const { setGenerator, treemap: prevTreemap, setTreemap } = useMapContext()\r\n const containerRef = React.useRef(null)\r\n\r\n /**\r\n * We can’t `useEffect` for generator/treemap, because we’d have to deal with stale references in\r\n * other effects. In order to ensure we always get the current values, we need to either `useRef`\r\n * them (and update props for both state and ref) or `useMemo` and wait for first render to happen.\r\n */\r\n const [hasRendered, setHasRendered] = React.useState(false)\r\n\r\n /**\r\n * Generator makes the layout, it should only change when the map type or settings change.\r\n */\r\n const generator = React.useMemo(() => {\r\n if (!hasRendered || !containerRef.current) return\r\n\r\n const isSmall = mapUtils.getIsSmall()\r\n const size = mapUtils.getSize(containerRef.current, type.type, isSmall)\r\n const mapSettings = settings ?? mapUtils.getSettingsForMapType(type.type, isSmall)\r\n const generator = new LayoutGenerator(size.width, size.height, type.type, mapSettings, isSmall)\r\n\r\n // This is used for updating the map base data using map-generator\r\n window.MAP_EXPORT = generator\r\n\r\n return generator\r\n }, [hasRendered, type.type, settings])\r\n\r\n /**\r\n * Treemap object is the logical representation of the map (whereas Canvas is graphical)\r\n * We want to hold to it for as long as we can and reuse it. That’s why we’re comparing\r\n * `prevTreemap` and returning the prev value if it equals.\r\n */\r\n const treemap = React.useMemo(() => {\r\n if (!generator || !data || (prevTreemap?.type === type.type && prevTreemap.subtype === subtype.id))\r\n return prevTreemap\r\n\r\n return new Treemap({\r\n data: generator.getLayout(data, { showETF }),\r\n width: generator.width,\r\n height: generator.height,\r\n settings: generator.settings,\r\n isSmall: generator.isSmall,\r\n scaleId: subtype.scaleId,\r\n countIndustryPerf: subtype.countIndustryPerf,\r\n countSectorPerf: generator.isSmall && subtype.countSectorPerf,\r\n type: type.type,\r\n subtype: subtype.id,\r\n })\r\n // Can’t add `prevTreemap` because we’d end up in a loop\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [generator, data, type.type, showETF, subtype])\r\n\r\n /**\r\n * Update context values\r\n */\r\n React.useEffect(() => {\r\n setHasRendered(true)\r\n setGenerator(generator)\r\n setTreemap(treemap)\r\n }, [generator, setGenerator, setTreemap, treemap])\r\n\r\n /**\r\n * Handle data updates\r\n */\r\n React.useEffect(() => {\r\n if (!treemap || !generator || !data || isFetchingPerf) return\r\n\r\n const layout = generator.getLayout(data, { showETF })\r\n mapActionCreators.updateLayout(treemap, { width: generator.width, height: generator.height, data: layout })\r\n }, [generator, treemap, data, isFetchingPerf, showETF, subtype])\r\n\r\n /**\r\n * Recalculate layout when the window size changes\r\n */\r\n React.useEffect(() => {\r\n const containerElement = containerRef.current\r\n\r\n if (!generator || !containerElement || !treemap || !data) return\r\n\r\n const resize = throttle(() => {\r\n const size = mapUtils.getSize(containerElement, generator.type, generator.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(data, { showETF })\r\n mapActionCreators.updateLayout(treemap, { width: generator.width, height: generator.height, data: layout })\r\n }, 100)\r\n\r\n window.addEventListener('resize', resize)\r\n\r\n return () => {\r\n window.removeEventListener('resize', resize)\r\n }\r\n }, [generator, treemap, data, showETF])\r\n\r\n return (\r\n
\r\n
\r\n {(!treemap && !isLoadingData) || !treemap || isLoadingData ? (\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 { 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 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(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(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, { width: generator.width, height: generator.height, data: layout })\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, MAP_DATA_FETCH_INTERVAL } 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: MAP_DATA_FETCH_INTERVAL,\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 'font-bold text-white': 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-blue-400 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 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 { SettingsSmall, SettingsSmallDark, SettingsSmallGeo, SettingsSmallGeoDark } from './constants/settings'\r\nimport Treemap from './treemap'\r\nimport { MapSubtypeId, MapTypeId, PerfData, ScaleId } 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 initData = mapUtils.getMapData(precomputedData.sec, props.perfDataSec)\r\n const treemap = new Treemap({\r\n data: initData,\r\n width: CANVAS_WIDTH,\r\n height: FinvizSettings.hasRedesignEnabled ? CANVAS_HEIGHT_NEW : CANVAS_HEIGHT,\r\n scaleId: ScaleId.DayPerf,\r\n countIndustryPerf: false,\r\n countSectorPerf: true,\r\n settings: isDark ? SettingsSmallDark : SettingsSmall,\r\n type: MapTypeId.Sector,\r\n subtype: MapSubtypeId.DayPerf,\r\n isSmall: true,\r\n zoomLevels: [1],\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 initData = mapUtils.getMapData(precomputedData.geo, props.perfDataGeo)\r\n const treemap = new Treemap({\r\n data: initData,\r\n width: CANVAS_WIDTH,\r\n height: CANVAS_HEIGHT_GEO,\r\n scaleId: ScaleId.DayPerf,\r\n countIndustryPerf: true,\r\n countSectorPerf: false,\r\n settings: isDark ? SettingsSmallGeoDark : SettingsSmallGeo,\r\n type: MapTypeId.World,\r\n subtype: MapSubtypeId.DayPerf,\r\n isSmall: true,\r\n zoomLevels: [1],\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\nconst mapProps = parseJSONFromScript<{ perfDataSec: PerfData; perfDataGeo: PerfData; cacheBuster: number }>('map-data')\r\nif (mapProps) renderTreemaps(mapProps)\r\n","import { ContentType, apiRequest } from '../../../main/services/api'\r\nimport { MapDataRoot, MapSubtypeId, MapTypeId, PerfData } from '../types'\r\n\r\nexport function mapBaseData(type: MapTypeId, cacheBuster: number) {\r\n return apiRequest(`/maps/${type}.json`, { query: { rev: cacheBuster } }, true)\r\n}\r\n\r\nexport function mapPerf(type: MapTypeId, subtype: MapSubtypeId) {\r\n return apiRequest(`/api/map_perf.ashx`, { query: { t: type, st: subtype } })\r\n}\r\n\r\nexport function mapPerfScreener(query = window.location.search) {\r\n return apiRequest(`/api/map_perf_screener.ashx${query}`)\r\n}\r\n\r\nexport interface UploadMapResponse {\r\n imgUrl: string\r\n shareUrl: string\r\n}\r\n\r\nexport function uploadMap({ type, subtype, data }: { type: MapTypeId; subtype: MapSubtypeId; data: string }) {\r\n return apiRequest(`/publish_map_submit.ashx`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': ContentType.FormUrlEncoded,\r\n },\r\n body: new URLSearchParams({\r\n file: data.replace('data:image/png;base64,', ''),\r\n type,\r\n subtype,\r\n }),\r\n })\r\n}\r\n","// Based on Lato font with bold weight\r\nexport const fontSizesWidths: Record> = {\r\n 4: {\r\n 0: 2.32,\r\n 1: 2.32,\r\n 2: 2.32,\r\n 3: 2.32,\r\n 4: 2.32,\r\n 5: 2.32,\r\n 6: 2.32,\r\n 7: 2.32,\r\n 8: 2.32,\r\n 9: 2.32,\r\n ' ': 0.772,\r\n '+': 2.32,\r\n '-': 1.436,\r\n '%': 3.212,\r\n '.': 0.9,\r\n a: 2.094,\r\n b: 2.28,\r\n c: 1.908,\r\n d: 2.28,\r\n e: 2.138,\r\n f: 1.402,\r\n g: 2.07,\r\n h: 2.274,\r\n i: 1.084,\r\n j: 1.076,\r\n k: 2.206,\r\n l: 1.084,\r\n m: 3.368,\r\n n: 2.274,\r\n o: 2.274,\r\n p: 2.262,\r\n q: 2.28,\r\n r: 1.634,\r\n s: 1.748,\r\n t: 1.548,\r\n u: 2.274,\r\n v: 2.134,\r\n w: 3.164,\r\n x: 2.16,\r\n y: 2.134,\r\n z: 1.878,\r\n A: 2.84,\r\n B: 2.606,\r\n C: 2.682,\r\n D: 2.99,\r\n E: 2.29,\r\n F: 2.246,\r\n G: 2.892,\r\n H: 3.024,\r\n I: 1.256,\r\n J: 1.748,\r\n K: 2.792,\r\n L: 2.068,\r\n M: 3.72,\r\n N: 3.024,\r\n O: 3.198,\r\n P: 2.5,\r\n Q: 3.198,\r\n R: 2.62,\r\n S: 2.146,\r\n T: 2.38,\r\n U: 2.912,\r\n V: 2.84,\r\n W: 4.186,\r\n X: 2.716,\r\n Y: 2.618,\r\n Z: 2.468,\r\n },\r\n 6: {\r\n 0: 3.48,\r\n 1: 3.48,\r\n 2: 3.48,\r\n 3: 3.48,\r\n 4: 3.48,\r\n 5: 3.48,\r\n 6: 3.48,\r\n 7: 3.48,\r\n 8: 3.48,\r\n 9: 3.48,\r\n ' ': 1.158,\r\n '+': 3.48,\r\n '-': 2.154,\r\n '%': 4.818,\r\n '.': 1.35,\r\n a: 3.141,\r\n b: 3.42,\r\n c: 2.862,\r\n d: 3.42,\r\n e: 3.207,\r\n f: 2.103,\r\n g: 3.105,\r\n h: 3.411,\r\n i: 1.626,\r\n j: 1.614,\r\n k: 3.309,\r\n l: 1.626,\r\n m: 5.052,\r\n n: 3.411,\r\n o: 3.411,\r\n p: 3.393,\r\n q: 3.42,\r\n r: 2.451,\r\n s: 2.622,\r\n t: 2.322,\r\n u: 3.411,\r\n v: 3.201,\r\n w: 4.746,\r\n x: 3.24,\r\n y: 3.201,\r\n z: 2.817,\r\n A: 4.26,\r\n B: 3.909,\r\n C: 4.023,\r\n D: 4.485,\r\n E: 3.435,\r\n F: 3.369,\r\n G: 4.338,\r\n H: 4.536,\r\n I: 1.884,\r\n J: 2.622,\r\n K: 4.188,\r\n L: 3.102,\r\n M: 5.58,\r\n N: 4.536,\r\n O: 4.797,\r\n P: 3.75,\r\n Q: 4.797,\r\n R: 3.93,\r\n S: 3.219,\r\n T: 3.57,\r\n U: 4.368,\r\n V: 4.26,\r\n W: 6.279,\r\n X: 4.074,\r\n Y: 3.927,\r\n Z: 3.702,\r\n },\r\n 8: {\r\n 0: 4.64,\r\n 1: 4.64,\r\n 2: 4.64,\r\n 3: 4.64,\r\n 4: 4.64,\r\n 5: 4.64,\r\n 6: 4.64,\r\n 7: 4.64,\r\n 8: 4.64,\r\n 9: 4.64,\r\n ' ': 1.544,\r\n '+': 4.64,\r\n '-': 2.872,\r\n '%': 6.424,\r\n '.': 1.8,\r\n a: 4.188,\r\n b: 4.56,\r\n c: 3.816,\r\n d: 4.56,\r\n e: 4.276,\r\n f: 2.804,\r\n g: 4.14,\r\n h: 4.548,\r\n i: 2.168,\r\n j: 2.152,\r\n k: 4.412,\r\n l: 2.168,\r\n m: 6.736,\r\n n: 4.548,\r\n o: 4.548,\r\n p: 4.524,\r\n q: 4.56,\r\n r: 3.268,\r\n s: 3.496,\r\n t: 3.096,\r\n u: 4.548,\r\n v: 4.268,\r\n w: 6.328,\r\n x: 4.32,\r\n y: 4.268,\r\n z: 3.756,\r\n A: 5.68,\r\n B: 5.212,\r\n C: 5.364,\r\n D: 5.98,\r\n E: 4.58,\r\n F: 4.492,\r\n G: 5.784,\r\n H: 6.048,\r\n I: 2.512,\r\n J: 3.496,\r\n K: 5.584,\r\n L: 4.136,\r\n M: 7.44,\r\n N: 6.048,\r\n O: 6.396,\r\n P: 5,\r\n Q: 6.396,\r\n R: 5.24,\r\n S: 4.292,\r\n T: 4.76,\r\n U: 5.824,\r\n V: 5.68,\r\n W: 8.372,\r\n X: 5.432,\r\n Y: 5.236,\r\n Z: 4.936,\r\n },\r\n 9: {\r\n 0: 5.22,\r\n 1: 5.22,\r\n 2: 5.22,\r\n 3: 5.22,\r\n 4: 5.22,\r\n 5: 5.22,\r\n 6: 5.22,\r\n 7: 5.22,\r\n 8: 5.22,\r\n 9: 5.22,\r\n ' ': 1.737,\r\n '+': 5.22,\r\n '-': 3.231,\r\n '%': 7.227,\r\n '.': 2.025,\r\n a: 4.712,\r\n b: 5.13,\r\n c: 4.293,\r\n d: 5.13,\r\n e: 4.811,\r\n f: 3.155,\r\n g: 4.658,\r\n h: 5.117,\r\n i: 2.439,\r\n j: 2.421,\r\n k: 4.964,\r\n l: 2.439,\r\n m: 7.578,\r\n n: 5.117,\r\n o: 5.117,\r\n p: 5.09,\r\n q: 5.13,\r\n r: 3.677,\r\n s: 3.933,\r\n t: 3.483,\r\n u: 5.117,\r\n v: 4.802,\r\n w: 7.119,\r\n x: 4.86,\r\n y: 4.802,\r\n z: 4.226,\r\n A: 6.39,\r\n B: 5.864,\r\n C: 6.035,\r\n D: 6.728,\r\n E: 5.153,\r\n F: 5.054,\r\n G: 6.507,\r\n H: 6.804,\r\n I: 2.826,\r\n J: 3.933,\r\n K: 6.282,\r\n L: 4.653,\r\n M: 8.37,\r\n N: 6.804,\r\n O: 7.196,\r\n P: 5.625,\r\n Q: 7.196,\r\n R: 5.895,\r\n S: 4.829,\r\n T: 5.355,\r\n U: 6.552,\r\n V: 6.39,\r\n W: 9.419,\r\n X: 6.111,\r\n Y: 5.891,\r\n Z: 5.553,\r\n },\r\n 10: {\r\n 0: 5.8,\r\n 1: 5.8,\r\n 2: 5.8,\r\n 3: 5.8,\r\n 4: 5.8,\r\n 5: 5.8,\r\n 6: 5.8,\r\n 7: 5.8,\r\n 8: 5.8,\r\n 9: 5.8,\r\n ' ': 1.93,\r\n '+': 5.8,\r\n '-': 3.59,\r\n '%': 8.03,\r\n '.': 2.25,\r\n a: 5.235,\r\n b: 5.7,\r\n c: 4.77,\r\n d: 5.7,\r\n e: 5.345,\r\n f: 3.505,\r\n g: 5.175,\r\n h: 5.685,\r\n i: 2.71,\r\n j: 2.69,\r\n k: 5.515,\r\n l: 2.71,\r\n m: 8.42,\r\n n: 5.685,\r\n o: 5.685,\r\n p: 5.655,\r\n q: 5.7,\r\n r: 4.085,\r\n s: 4.37,\r\n t: 3.87,\r\n u: 5.685,\r\n v: 5.335,\r\n w: 7.91,\r\n x: 5.4,\r\n y: 5.335,\r\n z: 4.695,\r\n A: 7.1,\r\n B: 6.515,\r\n C: 6.705,\r\n D: 7.475,\r\n E: 5.725,\r\n F: 5.615,\r\n G: 7.23,\r\n H: 7.56,\r\n I: 3.14,\r\n J: 4.37,\r\n K: 6.98,\r\n L: 5.17,\r\n M: 9.3,\r\n N: 7.56,\r\n O: 7.995,\r\n P: 6.25,\r\n Q: 7.995,\r\n R: 6.55,\r\n S: 5.365,\r\n T: 5.95,\r\n U: 7.28,\r\n V: 7.1,\r\n W: 10.465,\r\n X: 6.79,\r\n Y: 6.545,\r\n Z: 6.17,\r\n },\r\n 11: {\r\n 0: 6.38,\r\n 1: 6.38,\r\n 2: 6.38,\r\n 3: 6.38,\r\n 4: 6.38,\r\n 5: 6.38,\r\n 6: 6.38,\r\n 7: 6.38,\r\n 8: 6.38,\r\n 9: 6.38,\r\n ' ': 2.123,\r\n '+': 6.38,\r\n '-': 3.949,\r\n '%': 8.833,\r\n '.': 2.475,\r\n a: 5.759,\r\n b: 6.27,\r\n c: 5.247,\r\n d: 6.27,\r\n e: 5.88,\r\n f: 3.856,\r\n g: 5.693,\r\n h: 6.254,\r\n i: 2.981,\r\n j: 2.959,\r\n k: 6.067,\r\n l: 2.981,\r\n m: 9.262,\r\n n: 6.254,\r\n o: 6.254,\r\n p: 6.221,\r\n q: 6.27,\r\n r: 4.494,\r\n s: 4.807,\r\n t: 4.257,\r\n u: 6.254,\r\n v: 5.869,\r\n w: 8.701,\r\n x: 5.94,\r\n y: 5.869,\r\n z: 5.165,\r\n A: 7.81,\r\n B: 7.167,\r\n C: 7.376,\r\n D: 8.223,\r\n E: 6.298,\r\n F: 6.177,\r\n G: 7.953,\r\n H: 8.316,\r\n I: 3.454,\r\n J: 4.807,\r\n K: 7.678,\r\n L: 5.687,\r\n M: 10.23,\r\n N: 8.316,\r\n O: 8.795,\r\n P: 6.875,\r\n Q: 8.795,\r\n R: 7.205,\r\n S: 5.902,\r\n T: 6.545,\r\n U: 8.008,\r\n V: 7.81,\r\n W: 11.512,\r\n X: 7.469,\r\n Y: 7.2,\r\n Z: 6.787,\r\n },\r\n 12: {\r\n 0: 6.96,\r\n 1: 6.96,\r\n 2: 6.96,\r\n 3: 6.96,\r\n 4: 6.96,\r\n 5: 6.96,\r\n 6: 6.96,\r\n 7: 6.96,\r\n 8: 6.96,\r\n 9: 6.96,\r\n ' ': 2.316,\r\n '+': 6.96,\r\n '-': 4.308,\r\n '%': 9.636,\r\n '.': 2.7,\r\n a: 6.282,\r\n b: 6.84,\r\n c: 5.724,\r\n d: 6.84,\r\n e: 6.414,\r\n f: 4.206,\r\n g: 6.21,\r\n h: 6.822,\r\n i: 3.252,\r\n j: 3.228,\r\n k: 6.618,\r\n l: 3.252,\r\n m: 10.104,\r\n n: 6.822,\r\n o: 6.822,\r\n p: 6.786,\r\n q: 6.84,\r\n r: 4.902,\r\n s: 5.244,\r\n t: 4.644,\r\n u: 6.822,\r\n v: 6.402,\r\n w: 9.492,\r\n x: 6.48,\r\n y: 6.402,\r\n z: 5.634,\r\n A: 8.52,\r\n B: 7.818,\r\n C: 8.046,\r\n D: 8.97,\r\n E: 6.87,\r\n F: 6.738,\r\n G: 8.676,\r\n H: 9.072,\r\n I: 3.768,\r\n J: 5.244,\r\n K: 8.376,\r\n L: 6.204,\r\n M: 11.16,\r\n N: 9.072,\r\n O: 9.594,\r\n P: 7.5,\r\n Q: 9.594,\r\n R: 7.86,\r\n S: 6.438,\r\n T: 7.14,\r\n U: 8.736,\r\n V: 8.52,\r\n W: 12.558,\r\n X: 8.148,\r\n Y: 7.854,\r\n Z: 7.404,\r\n },\r\n 13: {\r\n 0: 7.54,\r\n 1: 7.54,\r\n 2: 7.54,\r\n 3: 7.54,\r\n 4: 7.54,\r\n 5: 7.54,\r\n 6: 7.54,\r\n 7: 7.54,\r\n 8: 7.54,\r\n 9: 7.54,\r\n ' ': 2.509,\r\n '+': 7.54,\r\n '-': 4.667,\r\n '%': 10.439,\r\n '.': 2.925,\r\n a: 6.806,\r\n b: 7.41,\r\n c: 6.201,\r\n d: 7.41,\r\n e: 6.949,\r\n f: 4.557,\r\n g: 6.728,\r\n h: 7.391,\r\n i: 3.523,\r\n j: 3.497,\r\n k: 7.17,\r\n l: 3.523,\r\n m: 10.946,\r\n n: 7.391,\r\n o: 7.391,\r\n p: 7.352,\r\n q: 7.41,\r\n r: 5.311,\r\n s: 5.681,\r\n t: 5.031,\r\n u: 7.391,\r\n v: 6.936,\r\n w: 10.283,\r\n x: 7.02,\r\n y: 6.936,\r\n z: 6.104,\r\n A: 9.23,\r\n B: 8.47,\r\n C: 8.717,\r\n D: 9.718,\r\n E: 7.443,\r\n F: 7.3,\r\n G: 9.399,\r\n H: 9.828,\r\n I: 4.082,\r\n J: 5.681,\r\n K: 9.074,\r\n L: 6.721,\r\n M: 12.09,\r\n N: 9.828,\r\n O: 10.394,\r\n P: 8.125,\r\n Q: 10.394,\r\n R: 8.515,\r\n S: 6.975,\r\n T: 7.735,\r\n U: 9.464,\r\n V: 9.23,\r\n W: 13.605,\r\n X: 8.827,\r\n Y: 8.509,\r\n Z: 8.021,\r\n },\r\n 14: {\r\n 0: 8.12,\r\n 1: 8.12,\r\n 2: 8.12,\r\n 3: 8.12,\r\n 4: 8.12,\r\n 5: 8.12,\r\n 6: 8.12,\r\n 7: 8.12,\r\n 8: 8.12,\r\n 9: 8.12,\r\n ' ': 2.702,\r\n '+': 8.12,\r\n '-': 5.026,\r\n '%': 11.242,\r\n '.': 3.15,\r\n a: 7.329,\r\n b: 7.98,\r\n c: 6.678,\r\n d: 7.98,\r\n e: 7.483,\r\n f: 4.907,\r\n g: 7.245,\r\n h: 7.959,\r\n i: 3.794,\r\n j: 3.766,\r\n k: 7.721,\r\n l: 3.794,\r\n m: 11.788,\r\n n: 7.959,\r\n o: 7.959,\r\n p: 7.917,\r\n q: 7.98,\r\n r: 5.719,\r\n s: 6.118,\r\n t: 5.418,\r\n u: 7.959,\r\n v: 7.469,\r\n w: 11.074,\r\n x: 7.56,\r\n y: 7.469,\r\n z: 6.573,\r\n A: 9.94,\r\n B: 9.121,\r\n C: 9.387,\r\n D: 10.465,\r\n E: 8.015,\r\n F: 7.861,\r\n G: 10.122,\r\n H: 10.584,\r\n I: 4.396,\r\n J: 6.118,\r\n K: 9.772,\r\n L: 7.238,\r\n M: 13.02,\r\n N: 10.584,\r\n O: 11.193,\r\n P: 8.75,\r\n Q: 11.193,\r\n R: 9.17,\r\n S: 7.511,\r\n T: 8.33,\r\n U: 10.192,\r\n V: 9.94,\r\n W: 14.651,\r\n X: 9.506,\r\n Y: 9.163,\r\n Z: 8.638,\r\n },\r\n 18: {\r\n 0: 10.44,\r\n 1: 10.44,\r\n 2: 10.44,\r\n 3: 10.44,\r\n 4: 10.44,\r\n 5: 10.44,\r\n 6: 10.44,\r\n 7: 10.44,\r\n 8: 10.44,\r\n 9: 10.44,\r\n ' ': 3.474,\r\n '+': 10.44,\r\n '-': 6.462,\r\n '%': 14.454,\r\n '.': 4.05,\r\n a: 9.423,\r\n b: 10.26,\r\n c: 8.586,\r\n d: 10.26,\r\n e: 9.621,\r\n f: 6.309,\r\n g: 9.315,\r\n h: 10.233,\r\n i: 4.878,\r\n j: 4.842,\r\n k: 9.927,\r\n l: 4.878,\r\n m: 15.156,\r\n n: 10.233,\r\n o: 10.233,\r\n p: 10.179,\r\n q: 10.26,\r\n r: 7.353,\r\n s: 7.866,\r\n t: 6.966,\r\n u: 10.233,\r\n v: 9.603,\r\n w: 14.238,\r\n x: 9.72,\r\n y: 9.603,\r\n z: 8.451,\r\n A: 12.78,\r\n B: 11.727,\r\n C: 12.069,\r\n D: 13.455,\r\n E: 10.305,\r\n F: 10.107,\r\n G: 13.014,\r\n H: 13.608,\r\n I: 5.652,\r\n J: 7.866,\r\n K: 12.564,\r\n L: 9.306,\r\n M: 16.74,\r\n N: 13.608,\r\n O: 14.391,\r\n P: 11.25,\r\n Q: 14.391,\r\n R: 11.79,\r\n S: 9.657,\r\n T: 10.71,\r\n U: 13.104,\r\n V: 12.78,\r\n W: 18.837,\r\n X: 12.222,\r\n Y: 11.781,\r\n Z: 11.106,\r\n },\r\n 20: {\r\n 0: 11.6,\r\n 1: 11.6,\r\n 2: 11.6,\r\n 3: 11.6,\r\n 4: 11.6,\r\n 5: 11.6,\r\n 6: 11.6,\r\n 7: 11.6,\r\n 8: 11.6,\r\n 9: 11.6,\r\n ' ': 3.86,\r\n '+': 11.6,\r\n '-': 7.18,\r\n '%': 16.06,\r\n '.': 4.5,\r\n a: 10.47,\r\n b: 11.4,\r\n c: 9.54,\r\n d: 11.4,\r\n e: 10.69,\r\n f: 7.01,\r\n g: 10.35,\r\n h: 11.37,\r\n i: 5.42,\r\n j: 5.38,\r\n k: 11.03,\r\n l: 5.42,\r\n m: 16.84,\r\n n: 11.37,\r\n o: 11.37,\r\n p: 11.31,\r\n q: 11.4,\r\n r: 8.17,\r\n s: 8.74,\r\n t: 7.74,\r\n u: 11.37,\r\n v: 10.67,\r\n w: 15.82,\r\n x: 10.8,\r\n y: 10.67,\r\n z: 9.39,\r\n A: 14.2,\r\n B: 13.03,\r\n C: 13.41,\r\n D: 14.95,\r\n E: 11.45,\r\n F: 11.23,\r\n G: 14.46,\r\n H: 15.12,\r\n I: 6.28,\r\n J: 8.74,\r\n K: 13.96,\r\n L: 10.34,\r\n M: 18.6,\r\n N: 15.12,\r\n O: 15.99,\r\n P: 12.5,\r\n Q: 15.99,\r\n R: 13.1,\r\n S: 10.73,\r\n T: 11.9,\r\n U: 14.56,\r\n V: 14.2,\r\n W: 20.93,\r\n X: 13.58,\r\n Y: 13.09,\r\n Z: 12.34,\r\n },\r\n 24: {\r\n 0: 13.92,\r\n 1: 13.92,\r\n 2: 13.92,\r\n 3: 13.92,\r\n 4: 13.92,\r\n 5: 13.92,\r\n 6: 13.92,\r\n 7: 13.92,\r\n 8: 13.92,\r\n 9: 13.92,\r\n ' ': 4.632,\r\n '+': 13.92,\r\n '-': 8.616,\r\n '%': 19.272,\r\n '.': 5.4,\r\n a: 12.564,\r\n b: 13.68,\r\n c: 11.448,\r\n d: 13.68,\r\n e: 12.828,\r\n f: 8.412,\r\n g: 12.42,\r\n h: 13.644,\r\n i: 6.504,\r\n j: 6.456,\r\n k: 13.236,\r\n l: 6.504,\r\n m: 20.208,\r\n n: 13.644,\r\n o: 13.644,\r\n p: 13.572,\r\n q: 13.68,\r\n r: 9.804,\r\n s: 10.488,\r\n t: 9.288,\r\n u: 13.644,\r\n v: 12.804,\r\n w: 18.984,\r\n x: 12.96,\r\n y: 12.804,\r\n z: 11.268,\r\n A: 17.04,\r\n B: 15.636,\r\n C: 16.092,\r\n D: 17.94,\r\n E: 13.74,\r\n F: 13.476,\r\n G: 17.352,\r\n H: 18.144,\r\n I: 7.536,\r\n J: 10.488,\r\n K: 16.752,\r\n L: 12.408,\r\n M: 22.32,\r\n N: 18.144,\r\n O: 19.188,\r\n P: 15,\r\n Q: 19.188,\r\n R: 15.72,\r\n S: 12.876,\r\n T: 14.28,\r\n U: 17.472,\r\n V: 17.04,\r\n W: 25.116,\r\n X: 16.296,\r\n Y: 15.708,\r\n Z: 14.808,\r\n },\r\n 30: {\r\n 0: 17.4,\r\n 1: 17.4,\r\n 2: 17.4,\r\n 3: 17.4,\r\n 4: 17.4,\r\n 5: 17.4,\r\n 6: 17.4,\r\n 7: 17.4,\r\n 8: 17.4,\r\n 9: 17.4,\r\n ' ': 5.79,\r\n '+': 17.4,\r\n '-': 10.77,\r\n '%': 24.09,\r\n '.': 6.75,\r\n a: 15.705,\r\n b: 17.1,\r\n c: 14.31,\r\n d: 17.1,\r\n e: 16.035,\r\n f: 10.515,\r\n g: 15.525,\r\n h: 17.055,\r\n i: 8.13,\r\n j: 8.07,\r\n k: 16.545,\r\n l: 8.13,\r\n m: 25.26,\r\n n: 17.055,\r\n o: 17.055,\r\n p: 16.965,\r\n q: 17.1,\r\n r: 12.255,\r\n s: 13.11,\r\n t: 11.61,\r\n u: 17.055,\r\n v: 16.005,\r\n w: 23.73,\r\n x: 16.2,\r\n y: 16.005,\r\n z: 14.085,\r\n A: 21.3,\r\n B: 19.545,\r\n C: 20.115,\r\n D: 22.425,\r\n E: 17.175,\r\n F: 16.845,\r\n G: 21.69,\r\n H: 22.68,\r\n I: 9.42,\r\n J: 13.11,\r\n K: 20.94,\r\n L: 15.51,\r\n M: 27.9,\r\n N: 22.68,\r\n O: 23.985,\r\n P: 18.75,\r\n Q: 23.985,\r\n R: 19.65,\r\n S: 16.095,\r\n T: 17.85,\r\n U: 21.84,\r\n V: 21.3,\r\n W: 31.395,\r\n X: 20.37,\r\n Y: 19.635,\r\n Z: 18.51,\r\n },\r\n 36: {\r\n 0: 20.88,\r\n 1: 20.88,\r\n 2: 20.88,\r\n 3: 20.88,\r\n 4: 20.88,\r\n 5: 20.88,\r\n 6: 20.88,\r\n 7: 20.88,\r\n 8: 20.88,\r\n 9: 20.88,\r\n ' ': 6.948,\r\n '+': 20.88,\r\n '-': 12.924,\r\n '%': 28.908,\r\n '.': 8.1,\r\n a: 18.846,\r\n b: 20.52,\r\n c: 17.172,\r\n d: 20.52,\r\n e: 19.242,\r\n f: 12.618,\r\n g: 18.63,\r\n h: 20.466,\r\n i: 9.756,\r\n j: 9.684,\r\n k: 19.854,\r\n l: 9.756,\r\n m: 30.312,\r\n n: 20.466,\r\n o: 20.466,\r\n p: 20.358,\r\n q: 20.52,\r\n r: 14.706,\r\n s: 15.732,\r\n t: 13.932,\r\n u: 20.466,\r\n v: 19.206,\r\n w: 28.476,\r\n x: 19.44,\r\n y: 19.206,\r\n z: 16.902,\r\n A: 25.56,\r\n B: 23.454,\r\n C: 24.138,\r\n D: 26.91,\r\n E: 20.61,\r\n F: 20.214,\r\n G: 26.028,\r\n H: 27.216,\r\n I: 11.304,\r\n J: 15.732,\r\n K: 25.128,\r\n L: 18.612,\r\n M: 33.48,\r\n N: 27.216,\r\n O: 28.782,\r\n P: 22.5,\r\n Q: 28.782,\r\n R: 23.58,\r\n S: 19.314,\r\n T: 21.42,\r\n U: 26.208,\r\n V: 25.56,\r\n W: 37.674,\r\n X: 24.444,\r\n Y: 23.562,\r\n Z: 22.212,\r\n },\r\n}\r\n\r\nexport const fontSizeLineHeights: Record = {\r\n 4: 5,\r\n 6: 7,\r\n 8: 10,\r\n 9: 11,\r\n 10: 12,\r\n 11: 13,\r\n 12: 14,\r\n 13: 15,\r\n 14: 20,\r\n 18: 21,\r\n 20: 24,\r\n 24: 28,\r\n 30: 35,\r\n 36: 42,\r\n}\r\n","import * as d3 from 'd3'\r\n\r\ninterface Dimensions {\r\n width: number\r\n height: number\r\n}\r\n\r\ntype Extent = [min: number, max: number]\r\n\r\nexport class Zoom {\r\n zoomElement = document.createElement('canvas')\r\n zoomSelection = d3.select(this.zoomElement)\r\n behavior: d3.ZoomBehavior\r\n\r\n translateExtent: [width: number, height: number]\r\n zoomExtent: [min: number, max: number]\r\n\r\n constructor(dimensions: Dimensions, zoomExtent: Extent) {\r\n this.translateExtent = [dimensions.width, dimensions.height]\r\n this.zoomExtent = zoomExtent\r\n\r\n this.behavior = d3\r\n .zoom()\r\n .extent([[0, 0], this.translateExtent])\r\n .scaleExtent(zoomExtent)\r\n .translateExtent([[0, 0], this.translateExtent])\r\n .on('zoom', null)\r\n\r\n this.zoomSelection.call(this.behavior)\r\n }\r\n\r\n updateDimensions = (dimensions: Dimensions) => {\r\n this.translateExtent = [dimensions.width, dimensions.height]\r\n this.behavior.extent([[0, 0], this.translateExtent]).translateExtent([[0, 0], this.translateExtent])\r\n }\r\n\r\n getTransform = () => d3.zoomTransform(this.zoomElement)\r\n\r\n scale = (newZoom?: number, mapCenter?: { x: number; y: number }) => {\r\n if (typeof newZoom === 'number' && Number.isFinite(newZoom)) {\r\n if (mapCenter) {\r\n this.zoomSelection.call(this.behavior.scaleTo, newZoom, [mapCenter.x, mapCenter.y])\r\n } else {\r\n this.zoomSelection.call(this.behavior.scaleTo, newZoom)\r\n }\r\n return newZoom\r\n }\r\n\r\n return this.getTransform().k\r\n }\r\n\r\n translate = (args?: [x: number, y: number]): [x: number, y: number] => {\r\n const scale = this.scale()\r\n\r\n if (Array.isArray(args) && Number.isFinite(args[0]) && Number.isFinite(args[1])) {\r\n this.zoomSelection.call(this.behavior.translateBy, -(args[0] / scale), -(args[1] / scale))\r\n return [args[0], args[1]]\r\n }\r\n let t = this.getTransform()\r\n return [t.x, t.y]\r\n }\r\n\r\n translateAbs = ([x, y]: [x: number, y: number]) => {\r\n const scale = this.scale()\r\n this.zoomSelection.call(this.behavior.translateTo, -(x / scale), -(y / scale), [0, 0])\r\n }\r\n}\r\n","import * as d3 from 'd3'\r\n\r\nimport { getTextFontFamily } from '../shared/getTextFontFamily'\r\nimport { gradientSmall, gradients } from '../shared/gradients'\r\nimport { fontSizeLineHeights, fontSizesWidths } from './constants/font'\r\nimport { ISettingsSection, scaleMinMax, scaleStepFormat } from './constants/settings'\r\nimport { ISettings, ISettingsSectionFont, ISettingsSectionHeader } from './constants/settings'\r\nimport LayoutGenerator from './layout-generator'\r\nimport {\r\n MapData,\r\n MapDataIndustry,\r\n MapDataNode,\r\n MapDataRow,\r\n MapDataSector,\r\n MapSubtypeId,\r\n MapTypeId,\r\n PerfData,\r\n ScaleId,\r\n} from './types'\r\nimport * as mapUtils from './utils'\r\nimport { Zoom } from './zoom'\r\n\r\nconst fontFamily = getTextFontFamily()\r\n\r\nclass Treemap {\r\n width: number\r\n height: number\r\n scaleId: ScaleId\r\n countIndustryPerf: boolean\r\n countSectorPerf?: boolean\r\n nodes: MapDataNode[] = []\r\n sectors: MapDataSector[] = []\r\n industries: MapDataIndustry[] = []\r\n zoom: Zoom\r\n colorScale: (n?: number) => string\r\n settings: ISettings\r\n type: MapTypeId\r\n subtype: MapSubtypeId\r\n isSmall: boolean\r\n zoomLevels: number[]\r\n updateTimestamp?: number\r\n\r\n constructor({\r\n countIndustryPerf = false,\r\n countSectorPerf = false,\r\n subtype = MapSubtypeId.DayPerf,\r\n isSmall = false,\r\n zoomLevels = mapUtils.getDefaultZoomLevels(),\r\n ...props\r\n }: {\r\n data: MapData\r\n width: number\r\n height: number\r\n scaleId: ScaleId\r\n countIndustryPerf?: boolean\r\n countSectorPerf?: boolean\r\n settings: ISettings\r\n type: MapTypeId\r\n subtype?: MapSubtypeId\r\n isSmall?: boolean\r\n zoomLevels?: number[]\r\n }) {\r\n this.width = props.width\r\n this.height = props.height\r\n this.settings = props.settings\r\n this.type = props.type\r\n this.scaleId = props.scaleId\r\n this.nodes = props.data.nodes\r\n this.sectors = props.data.sectors\r\n this.industries = props.data.industries\r\n this.subtype = subtype\r\n this.zoomLevels = zoomLevels\r\n this.isSmall = isSmall\r\n this.countIndustryPerf = countIndustryPerf\r\n this.countSectorPerf = countSectorPerf\r\n\r\n this.zoom = new Zoom({ width: this.width, height: this.height }, [\r\n this.zoomLevels[0],\r\n this.zoomLevels[this.zoomLevels.length - 1],\r\n ])\r\n\r\n this.colorScale = this.getColorScale()\r\n\r\n if (this.countIndustryPerf) {\r\n this._updateIndustryPerf()\r\n }\r\n if (this.countSectorPerf) {\r\n this._updateSectorPerf()\r\n }\r\n }\r\n\r\n getIsSmall() {\r\n return this.isSmall\r\n }\r\n\r\n updateData(props: { width: number; height: number; data: MapData }) {\r\n this.width = props.width\r\n this.height = props.height\r\n this.nodes = props.data.nodes\r\n this.sectors = props.data.sectors\r\n this.industries = props.data.industries\r\n this.updateTimestamp = +new Date()\r\n\r\n if (this.countIndustryPerf) {\r\n this._updateIndustryPerf()\r\n }\r\n if (this.countSectorPerf) {\r\n this._updateSectorPerf()\r\n }\r\n\r\n this.colorScale = this.getColorScale()\r\n }\r\n\r\n getScaleMinMax() {\r\n switch (this.scaleId) {\r\n case ScaleId.PortfolioPct:\r\n case ScaleId.PortfolioUsd:\r\n if (this.nodes.length === 0) return [0, 0]\r\n // get min/max week perf\r\n const minValuePerf = Math.abs(d3.min(this.nodes, (node: MapDataNode) => node.data?.perfWeek ?? 0))\r\n const maxValuePerf = Math.abs(d3.max(this.nodes, (node: MapDataNode) => node.data?.perfWeek ?? 0))\r\n const perfMax = Math.max(minValuePerf, maxValuePerf)\r\n // get min/max all time perf\r\n const minValueNode = Math.abs(d3.min(this.nodes, (node: MapDataNode) => node.perf)!)\r\n const maxValueNode = Math.abs(d3.max(this.nodes, (node: MapDataNode) => node.perf)!)\r\n const valueMax = Math.max(minValueNode, maxValueNode)\r\n // Use the weekly perf as a buffer, compute number of digits and round nicely\r\n const valueToUse = this.scaleId === ScaleId.PortfolioPct ? valueMax + perfMax : valueMax * (1 + perfMax / 100)\r\n // Sanity check\r\n if (Number.isNaN(valueToUse)) return [0, 0]\r\n const numberOfDigits = Math.max(Math.floor(Math.log10(Math.abs(valueToUse))), 0) + 1\r\n const roundedBound = Math.ceil(valueToUse / numberOfDigits) * numberOfDigits\r\n\r\n return [-roundedBound, roundedBound]\r\n default:\r\n return scaleMinMax[this.scaleId]\r\n }\r\n }\r\n\r\n getColorScale() {\r\n const [minDomain, maxDomain] = this.getScaleMinMax()\r\n let gradient = gradients[this.scaleId]\r\n if (this.getIsSmall() && this.scaleId === ScaleId.DayPerf) {\r\n gradient = gradientSmall\r\n }\r\n const linearScale = d3\r\n .scaleLinear()\r\n .domain([minDomain, maxDomain])\r\n .range([0, gradient.colors.length - 1])\r\n return (d?: number) => {\r\n if (typeof d === 'undefined' || !Number.isFinite(d)) {\r\n return gradient.nullColor\r\n }\r\n const min = Math.min(minDomain, maxDomain)\r\n const max = Math.max(minDomain, maxDomain)\r\n const value = Math.max(Math.min(d, max), min)\r\n\r\n const i = Math.round(linearScale(value))\r\n\r\n return gradient.colors[i]\r\n }\r\n }\r\n\r\n getParentSector(node: MapDataNode | MapDataIndustry): string {\r\n if (node.parent && node.parent.name !== 'Root') return this.getParentSector(node.parent as MapDataIndustry)\r\n\r\n return node.name\r\n }\r\n\r\n /*\r\n * data = {\r\n * nodes: {\"AAPL\": 1.5, \"MSFT\": -0.5}\r\n * industries: {...}\r\n * }\r\n */\r\n updatePerf(data: PerfData) {\r\n for (var i = 0; i < this.nodes.length; i++) {\r\n const nodeName = this.nodes[i].name\r\n\r\n if (Array.isArray(data.nodes)) {\r\n const parentSector = this.getParentSector(this.nodes[i])\r\n const updatedNode = data.nodes.find((node) => node.name === nodeName && node.data?.sector === parentSector)\r\n\r\n if (!updatedNode) continue\r\n\r\n this.nodes[i].perf = updatedNode.perf\r\n this.nodes[i].additional = updatedNode.additional\r\n } else {\r\n this.nodes[i].perf = data.nodes[nodeName]\r\n this.nodes[i].additional = data.additional[nodeName]\r\n }\r\n }\r\n\r\n if (this.countIndustryPerf) {\r\n this._updateIndustryPerf()\r\n } else {\r\n this._resetIndustryPerf()\r\n }\r\n\r\n if (this.countSectorPerf) {\r\n this._updateSectorPerf()\r\n }\r\n\r\n this.colorScale = this.getColorScale()\r\n }\r\n\r\n _resetIndustryPerf() {\r\n for (var i = 0; i < this.industries.length; i++) {\r\n this.industries[i].perf = undefined\r\n }\r\n }\r\n\r\n _updateIndustryPerf() {\r\n var industry, weightedPriceSum, marketCapSum, stock, marketCap, everyStockUndefined\r\n for (var i = 0; i < this.industries.length; i++) {\r\n industry = this.industries[i]\r\n weightedPriceSum = 0\r\n marketCapSum = 0\r\n everyStockUndefined = true\r\n for (var j = 0; j < industry.children.length; j++) {\r\n stock = industry.children[j]\r\n marketCap = stock.dx * stock.dy\r\n if (typeof stock.perf !== 'undefined' && stock.perf !== null) {\r\n weightedPriceSum += stock.perf * marketCap\r\n everyStockUndefined = false\r\n }\r\n marketCapSum += marketCap\r\n }\r\n if (!everyStockUndefined) {\r\n industry.perf = marketCapSum !== 0 ? weightedPriceSum / marketCapSum : 0\r\n }\r\n }\r\n }\r\n\r\n _updateSectorPerf() {\r\n var sector, industry, weightedPriceSum, marketCapSum, stock, marketCap\r\n for (var s = 0; s < this.sectors.length; s++) {\r\n sector = this.sectors[s]\r\n weightedPriceSum = 0\r\n marketCapSum = 0\r\n for (var i = 0; i < sector.children.length; i++) {\r\n industry = sector.children[i]\r\n for (var j = 0; j < industry.children.length; j++) {\r\n stock = industry.children[j]\r\n marketCap = stock.dx * stock.dy\r\n if (typeof stock.perf !== 'undefined' && stock.perf !== null) {\r\n weightedPriceSum += stock.perf * marketCap\r\n }\r\n marketCapSum += marketCap\r\n }\r\n }\r\n sector.perf = marketCapSum !== 0 ? weightedPriceSum / marketCapSum : 0\r\n }\r\n }\r\n\r\n _getNodeTopOffset(node: MapDataNode) {\r\n if (!this.isSmall && this.type === MapTypeId.World) return 0\r\n\r\n const isSmallSecMap = this.isSmall && this.type === MapTypeId.Sector\r\n // Industry\r\n let parent: MapDataRow = node.parent\r\n let leftPadding = this.settings.industry.padding.left\r\n let topPadding = this.settings.industry.padding.top + this.settings.industry.header.height\r\n\r\n if (isSmallSecMap) {\r\n // Sector\r\n parent = node.parent.parent\r\n leftPadding = this.settings.sector.padding.left\r\n topPadding = this.settings.sector.padding.top + this.settings.sector.header.height\r\n }\r\n\r\n const isFirstNodeInIndustry =\r\n Math.floor(parent.x + leftPadding) === node.x && Math.floor(parent.y + topPadding) === node.y\r\n const showIndustryHeader = LayoutGenerator.isNodeHeaderVisible(parent, this.settings)\r\n\r\n return isFirstNodeInIndustry && showIndustryHeader ? 6 : 0\r\n }\r\n\r\n getNodeText(node: MapDataNode) {\r\n const scale = this.zoom.scale()\r\n const fontSizes = this.settings.scaleFontSizes[scale]\r\n const nodeTopOffset = this._getNodeTopOffset(node)\r\n\r\n const nodeHeight = node.dy - nodeTopOffset\r\n let nodeNameFontSize = this.findMaxFontSizeForText(node.name, node.dx, nodeHeight, fontSizes)\r\n\r\n if (!nodeNameFontSize) return null\r\n\r\n const nodeNameLineHeight = fontSizeLineHeights[nodeNameFontSize]\r\n const stepFormat = scaleStepFormat[this.scaleId]\r\n const format = stepFormat === '%N%' ? (node.dx > 32 ? stepFormat : '%N') : stepFormat\r\n\r\n let perfText = node.additional ?? ''\r\n if (perfText.length === 0 && node.perf !== undefined && Number.isFinite(node.perf)) {\r\n perfText = this.formatValue(node.perf.toFixed(2), scaleMinMax[this.scaleId], format)\r\n }\r\n\r\n const fontPairs =\r\n this.settings.fontSizePairs[nodeNameFontSize]?.filter((allowedSize) => fontSizes.includes(allowedSize)) ?? []\r\n\r\n let perfFontSize\r\n let perfLineHeight = 0\r\n if (fontPairs.length) {\r\n perfFontSize =\r\n fontPairs && this.findMaxFontSizeForText(perfText, node.dx, nodeHeight - nodeNameLineHeight, fontPairs)\r\n perfLineHeight = perfFontSize ? fontSizeLineHeights[perfFontSize] : 0\r\n }\r\n\r\n const textHeight = nodeNameLineHeight + perfLineHeight\r\n\r\n return {\r\n topOffset: node.dy - textHeight <= nodeTopOffset ? nodeTopOffset : 0,\r\n fontSize: nodeNameFontSize,\r\n perfText,\r\n perfFontSize,\r\n }\r\n }\r\n\r\n findMaxFontSizeForText(text: string, width: number, height: number, fontSizes: number[]) {\r\n if (!text.length) return\r\n\r\n return fontSizes.find(\r\n (fontSize) =>\r\n this.getLongestText(text, fontSize, Math.max(0, width - this.settings.fontSizePadding[fontSize] * 2)) ===\r\n text && fontSizeLineHeights[fontSize] < height\r\n )\r\n }\r\n\r\n getLongestText(text: string, fontSize: number, maxWidth: number) {\r\n if (maxWidth === 0) return ''\r\n const widths = fontSizesWidths[fontSize]\r\n let i = 0\r\n let width = 0\r\n\r\n while (i < text.length) {\r\n width += widths[text[i]] ?? widths['W']\r\n if (width > maxWidth) break\r\n i++\r\n }\r\n\r\n return text.substring(0, i)\r\n }\r\n\r\n getZoomLevels() {\r\n return this.zoomLevels\r\n }\r\n\r\n getNextZoomLevel() {\r\n var actualZoomLevel = this.zoom.scale()\r\n if (this.zoomLevels[this.zoomLevels.length - 1] === actualZoomLevel) {\r\n return actualZoomLevel\r\n }\r\n for (var i = 0; i < this.zoomLevels.length; i++) {\r\n if (this.zoomLevels[i] > actualZoomLevel) {\r\n return this.zoomLevels[i]\r\n }\r\n }\r\n\r\n return this.zoomLevels[0]\r\n }\r\n\r\n getPreviousZoomLevel() {\r\n var actualZoomLevel = this.zoom.scale()\r\n if (this.zoomLevels[0] === actualZoomLevel) {\r\n return actualZoomLevel\r\n }\r\n for (var i = this.zoomLevels.length; i >= 0; i--) {\r\n if (this.zoomLevels[i] < actualZoomLevel) {\r\n return this.zoomLevels[i]\r\n }\r\n }\r\n\r\n return this.zoomLevels[0]\r\n }\r\n\r\n getLastZoomLevel() {\r\n return this.zoomLevels[this.zoomLevels.length - 1]\r\n }\r\n\r\n formatValue(\r\n value: string,\r\n [min, max]: [min: number, max: number] = scaleMinMax[this.scaleId],\r\n format: string = scaleStepFormat[this.scaleId]\r\n ) {\r\n let stepFormat = format\r\n if (typeof format !== 'string') {\r\n stepFormat = format[value]\r\n }\r\n\r\n if (!stepFormat) return value\r\n\r\n const floatValue = parseFloat(value)\r\n const absValue = value.replace(/^-/, '')\r\n const isPositiveScaleOnly = Math.min(min, max) >= 0 && Math.max(min, max) >= 0\r\n let formated = stepFormat?.replace('%N', absValue) ?? absValue\r\n\r\n // Some formats might not include number (eg. Before/After earnings)\r\n if (!stepFormat || !stepFormat.includes('%N')) return formated\r\n\r\n if (floatValue > 0 && !isPositiveScaleOnly) return `+${formated}`\r\n\r\n if (floatValue < 0) return `-${formated}`\r\n\r\n return formated\r\n }\r\n\r\n renderStockNode(node: MapDataNode, context: CanvasRenderingContext2D) {\r\n // Draw background\r\n context.fillStyle = this.colorScale(node.perf)\r\n context.fillRect(node.x, node.y, node.dx - 1, node.dy - 1)\r\n\r\n const nodeText = this.getNodeText(node)\r\n\r\n if (!nodeText) return\r\n\r\n context.save()\r\n\r\n // Set text properties\r\n context.textBaseline = 'middle'\r\n context.textAlign = 'center'\r\n context.fillStyle = 'rgba(0, 0, 0, 0.5)'\r\n\r\n const nodeY = node.y + nodeText.topOffset\r\n const nodeDY = node.dy - nodeText.topOffset\r\n const textX = node.x + node.dx / 2\r\n let nameY = nodeY + nodeDY / 2\r\n let perfTextY = nameY + nodeText.fontSize / 2\r\n\r\n if (nodeText.perfFontSize) {\r\n perfTextY = nameY + nodeText.fontSize / 2\r\n nameY -= nodeText.perfFontSize / 2\r\n context.font = 'bold ' + nodeText.perfFontSize + 'px ' + fontFamily\r\n context.fillText(nodeText.perfText, textX + 1, perfTextY + 1)\r\n }\r\n\r\n context.font = 'bold ' + nodeText.fontSize + 'px ' + fontFamily\r\n context.fillText(node.name, textX + 1, nameY + 1)\r\n\r\n context.fillStyle = 'rgba(255, 255, 255, 1)'\r\n\r\n if (nodeText.perfFontSize) {\r\n context.font = 'bold ' + nodeText.perfFontSize + 'px ' + fontFamily\r\n context.fillText(nodeText.perfText, textX, perfTextY)\r\n }\r\n\r\n context.font = 'bold ' + nodeText.fontSize + 'px ' + fontFamily\r\n context.fillText(node.name, textX, nameY)\r\n context.restore()\r\n }\r\n\r\n getSpacingWithDefaults(spacing?: { top: number; right: number; bottom?: number; left: number }) {\r\n return {\r\n top: spacing?.top ?? 0,\r\n right: spacing?.right ?? 0,\r\n bottom: spacing?.bottom ?? 0,\r\n left: spacing?.left ?? 0,\r\n }\r\n }\r\n\r\n renderIndustryHeader({\r\n node,\r\n context,\r\n config,\r\n fill,\r\n parent,\r\n }: {\r\n node: MapDataRow\r\n context: CanvasRenderingContext2D\r\n config?: ISettingsSectionHeader\r\n parent?: ISettingsSection\r\n fill: string\r\n }) {\r\n const parrentPadding = this.getSpacingWithDefaults(parent?.padding)\r\n const margin = this.getSpacingWithDefaults(config?.margin)\r\n const x = node.x + parrentPadding.left + margin.left\r\n const y = node.y + parrentPadding.top + margin.top\r\n const width = node.dx - parrentPadding.left - margin.left - parrentPadding.right - margin.right\r\n const height = y + (config?.height ?? 0)\r\n\r\n context.fillStyle = fill\r\n context.strokeStyle = config?.border ?? this.settings.background\r\n context.beginPath()\r\n context.moveTo(x, y)\r\n context.lineTo(x, height)\r\n\r\n context.lineTo(node.x + 6, height)\r\n context.lineTo(node.x + 11, height + 5)\r\n context.lineTo(node.x + 16, height)\r\n\r\n context.lineTo(x + width, height)\r\n context.lineTo(x + width, y)\r\n context.lineTo(x - 0.5, y)\r\n context.fill()\r\n context.stroke()\r\n }\r\n\r\n renderNodeText({\r\n node,\r\n context,\r\n config,\r\n parent,\r\n }: {\r\n node: MapDataRow\r\n context: CanvasRenderingContext2D\r\n config?: ISettingsSectionFont\r\n parent?: ISettingsSection\r\n }) {\r\n if (!config) return\r\n\r\n const parrentPadding = this.getSpacingWithDefaults(parent?.padding)\r\n const padding = this.getSpacingWithDefaults(config?.padding)\r\n\r\n context.textBaseline = 'alphabetic'\r\n context.textAlign = 'left'\r\n context.fillStyle = config.color\r\n context.font = `${config.fontWeight} ${config.fontSize}px ${fontFamily}`\r\n\r\n const text = this.getLongestText(\r\n node.name.toUpperCase(),\r\n config.fontSize,\r\n node.dx - parrentPadding.left - padding.left - parrentPadding.right - padding.right\r\n )\r\n context.fillText(\r\n text,\r\n node.x + parrentPadding.left + padding.left,\r\n node.y + parrentPadding.top + padding.top + config.fontSize\r\n )\r\n }\r\n\r\n getNodeAtPosition(x: number, y: number): MapDataNode | undefined {\r\n var scale = this.zoom.scale()\r\n var [tx, ty] = this.zoom.translate()\r\n for (var i = 0, len = this.nodes.length; i < len; i++) {\r\n var d = this.nodes[i]\r\n if (\r\n d.x * scale + tx < x &&\r\n x < (d.x + d.dx + 1) * scale + tx &&\r\n d.y * scale + ty < y &&\r\n y < (d.y + d.dy + 1) * scale + ty\r\n ) {\r\n return d\r\n }\r\n }\r\n }\r\n\r\n getSectorAtPosition(x: number, y: number): MapDataSector | undefined {\r\n var scale = this.zoom.scale()\r\n var [tx, ty] = this.zoom.translate()\r\n for (var i = 0, len = this.sectors.length; i < len; i++) {\r\n var d = this.sectors[i]\r\n if (\r\n d.x * scale + tx < x &&\r\n x < (d.x + d.dx + 1) * scale + tx &&\r\n d.y * scale + ty < y &&\r\n y < (d.y + d.dy + 1) * scale + ty\r\n ) {\r\n return d\r\n }\r\n }\r\n }\r\n\r\n getIndustryAtPosition(x: number, y: number): MapDataIndustry | undefined {\r\n var scale = this.zoom.scale()\r\n var [tx, ty] = this.zoom.translate()\r\n for (var i = 0, len = this.industries.length; i < len; i++) {\r\n var d = this.industries[i]\r\n if (\r\n d.x * scale + tx < x &&\r\n x < (d.x + d.dx + 1) * scale + tx &&\r\n d.y * scale + ty < y &&\r\n y < (d.y + d.dy + 1) * scale + ty\r\n ) {\r\n return d\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Treemap\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","import { DefaultOptions, MutationCache, QueryCache, QueryClient, QueryClientProvider } from '@tanstack/react-query'\r\nimport * as React from 'react'\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\n\r\nimport { DefaultErrorBoundary } from '../../../main/components/error-view'\r\n\r\ninterface QueryClientConfig {\r\n queryCache?: QueryCache\r\n mutationCache?: MutationCache\r\n defaultOptions?: DefaultOptions\r\n}\r\n\r\ninterface QueryContextProps {\r\n queryOptions?: QueryClientConfig\r\n}\r\n\r\nexport function QueryClientContext({ children, queryOptions }: React.PropsWithChildren) {\r\n const client = React.useRef(\r\n new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n useErrorBoundary: true,\r\n refetchOnWindowFocus: false,\r\n ...queryOptions?.defaultOptions?.queries,\r\n },\r\n ...queryOptions?.defaultOptions,\r\n },\r\n ...queryOptions,\r\n })\r\n )\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport function withQueryClientContext(\r\n Component: React.ComponentType,\r\n config?: QueryClientConfig\r\n): React.ComponentType {\r\n const hocComponent = (props: Props & JSX.IntrinsicAttributes) => (\r\n \r\n \r\n \r\n )\r\n\r\n hocComponent.displayName = `withQueryClientContext(${Component.displayName ?? 'Component'})`\r\n\r\n return hocComponent\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 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 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 classnames from 'classnames'\r\nimport * as d3 from 'd3'\r\nimport PropTypes from 'prop-types'\r\nimport { Component } from 'react'\r\n\r\ninterface SparklineProps {\r\n className?: string\r\n data: number[]\r\n width: number\r\n height: number\r\n}\r\n\r\nclass Sparkline extends Component {\r\n static propTypes = {\r\n width: PropTypes.number.isRequired,\r\n height: PropTypes.number.isRequired,\r\n data: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n }\r\n\r\n shouldComponentUpdate(nextProps: SparklineProps) {\r\n // eslint-disable-next-line eqeqeq\r\n return nextProps.data != this.props.data\r\n }\r\n\r\n render() {\r\n var data = this.props.data\r\n var x = d3.scaleLinear().range([0, this.props.width]).domain([0, data.length])\r\n\r\n var y = d3\r\n .scaleLinear()\r\n .range([this.props.height - 4, 0])\r\n .domain(d3.extent(data, (d) => d) as [number, number])\r\n\r\n var line = d3\r\n .line()\r\n .curve(d3.curveBasis)\r\n .x((d, i) => x(i))\r\n .y((d) => y(d))\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default Sparkline\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 getTextFontFamily() {\r\n let fontFamily = 'Lato'\r\n if (document.location.pathname === '/index_beta.ashx') {\r\n if (document.location.search.indexOf('inter') !== -1) {\r\n fontFamily = \"'Inter'\"\r\n } else if (document.location.search.indexOf('lato') !== -1) {\r\n fontFamily = \"'Lato'\"\r\n }\r\n }\r\n\r\n return fontFamily\r\n}\r\n","/**\r\n * Load image before we can render it in canvas\r\n */\r\nexport function loadImage(src: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n var image = new Image()\r\n\r\n image.onload = function () {\r\n resolve(image)\r\n }\r\n\r\n image.onerror = function () {\r\n reject()\r\n }\r\n\r\n image.src = src\r\n })\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) 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","export function getScaleRatio() {\r\n return window.devicePixelRatio ?? 1\r\n}\r\n\r\nexport function retinafy(\r\n canvas: HTMLCanvasElement | undefined | null,\r\n context: CanvasRenderingContext2D | undefined,\r\n width: number,\r\n height: number\r\n) {\r\n if (!canvas || !context) return\r\n\r\n const ratio = getScaleRatio()\r\n\r\n canvas.width = width * ratio\r\n canvas.height = height * ratio\r\n canvas.style.width = width + 'px'\r\n canvas.style.height = height + 'px'\r\n context.scale(ratio, ratio)\r\n\r\n return ratio\r\n}\r\n","export enum AdsProvider {\r\n None,\r\n InvestingChannel,\r\n Freestar,\r\n}\r\n\r\nexport function getAdsProvider() {\r\n if (FinvizSettings.hasUserPremium) return AdsProvider.None\r\n\r\n if (FinvizSettings.adsProvider === 2) {\r\n return AdsProvider.Freestar\r\n }\r\n\r\n return AdsProvider.InvestingChannel\r\n}\r\n\r\n/**\r\n * Tracks virtual page views to google analytics and freestar\r\n */\r\nexport function trackPageView(props: { pathname?: string; query?: string; freestarPageView?: boolean }) {\r\n const { pathname = window.location.pathname, query = window.location.search, freestarPageView = true } = props\r\n\r\n window.gtag?.('set', 'page_path', `${pathname}${query.length ? '?' : ''}${query.replace(/^\\?/, '')}`)\r\n window.gtag?.('event', 'page_view')\r\n\r\n if (freestarPageView && getAdsProvider() === AdsProvider.Freestar) {\r\n window.freestar?.queue.push(() => freestar.trackPageview())\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 )}\r\n
    \r\n )\r\n}\r\n\r\nexport function DefaultErrorBoundary(props: Partial) {\r\n useEffect(() => {\r\n Sentry.captureException(props.error)\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","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n"],"names":["CanvasHover","Component","constructor","arguments","_defineProperty","visibleTickers","activeNode","undefined","sparklinesData","MapStore","this","setState","getVisibleTooltipTickers","d","additional","perf","props","treemap","formatValue","toFixed","e","state","marginLeft","el","document","getElementById","hoverWidth","scrollWidth","hoverHeight","scrollHeight","availWidth","documentElement","clientWidth","availHeight","clientHeight","clientX","style","left","top","Math","max","clientY","componentDidMount","_onChange","addEventListener","_onMouseMove","componentWillUnmount","MapActions","removeEventListener","componentDidUpdate","_","prevState","_prevState$activeNode","name","includes","push","tickersToLoad","filter","ticker","length","mapType","render","hasSparkline","price","colorScale","type","children","parent","node","sort","a","b","dx","dy","isSmall","title","MapTypeId","_jsxs","id","_jsx","className","backgroundColor","Sparkline","width","height","data","_formatPerf","colSpan","description","map","c","color","boxover","scale","tooltip","scaleMin","scaleMax","getScaleMinMax","steps","diff","step","i","round","stepWidth","indexOf","format","scaleStepFormat","index","background","minWidth","textShadow","toString","concat","Canvas","React","event","super","zoom","dataTimestamp","initialized","updateTimestamp","_cache","bind","mapActionCreators","_getPublishCanvas","_initialize","_setCanvasSize","getZoomLevels","forEach","zoomLevel","_createCache","x","y","translate","renderFromCache","_canvasContext","renderHover","_hoverContext","_this$_hoverCanvas$cu","_hoverCanvas","current","_onWheel","alt","legend","hover","ref","_canvas","onMouseDown","_onMouseDown","onMouseMove","onMouseUp","_onMouseUp","onMouseLeave","_onMouseLeave","onDoubleClick","_onDoubleClick","Legend","context","tx","ty","zoomLevels","nearestSize","len","_this$_cache$level","level","canvas","save","drawImage","restore","translateAbs","mouseDown","offsetX","offsetY","getOffset","nodeAtPosition","getNodeAtPosition","MapActionCreators","industryAtPosition","getIndustryAtPosition","_this$props$onNodeCli","_this$props","sectorAtPosition","getSectorAtPosition","onNodeClick","call","industry","sector","preventDefault","deltaY","_onPanStart","lastPanX","pointers","lastPanY","_onPanMove","movementX","movementY","_onPinch","offsetX1","target","offsetLeft","offsetParent","offsetY1","offsetTop","direction","_setCanvasContexts","canvasContext","getContext","hoverContext","retinafy","async","zoomOnWheel","renderLevel","zoomLevelIndex","setTimeout","hoverCanvas","hammertime","Hammer","get","set","enable","threshold","on","passive","image","_getTreemapGeoBackground","worldBackground","loadImage","default","getIsSmall","classList","contains","oldScale","oldTranslate","cacheCanvas","createElement","cacheContext","renderCanvas","_hover$border","settings","hoveredNode","clearRect","apply","showIndustryHeader","LayoutGenerator","depth","NodeDepth","industryOffset","padding","header","strokeStyle","border","lineWidth","strokeRect","beginPath","moveTo","lineTo","_hover$background","stroke","renderIndustryHeader","config","fill","renderNodeText","fillStyle","fillRect","naturalWidth","naturalHeight","sectors","industries","nodes","renderStockNode","isLargeNode","isGeoMap","renderBackground","Number","isFinite","_treemap$settings$sec","renderSectorBorders","_treemap$settings$sec2","MapContext","setTreemap","setGenerator","useMapContext","MapContextProvider","generator","Provider","value","Map","_ref","isLoadingData","isFetchingPerf","subtype","showETF","prevTreemap","containerRef","hasRendered","setHasRendered","mapUtils","size","mapSettings","window","MAP_EXPORT","Treemap","getLayout","scaleId","countIndustryPerf","countSectorPerf","layout","containerElement","resize","throttle","classnames","Delayed","delayComponent","Spinner","QueryClientContext","fallback","Loading","BrowserRouter","MapSelectTheme","MapSelect","_props$children","label","ariaLabel","theme","selectTheme","dark","button","rounding","contentClass","rightContent","popover","light","getMapSelectTheme","Select","placeholder","listProps","onChange","hasPopoverButtonWidthLimit","items","SelectOption","filterItems","stocks","input","stock","toUpperCase","slice","useSearch","setValue","results","setResults","onInputChange","onItemClick","cx","cy","diffX","diffY","getLastZoomLevel","onResultMouseLeave","SearchInput","Input","leftContent","SearchResult","result","onClick","Button","Expand","onExpand","_props$layoutOptions","_window$gtag","_window","body","EXPANDED_MAP_BODY_CLASSS","remove","gtag","event_category","add","layoutOptions","scrollTo","isMobile","isIpad","Share","uploadImage","useMutation","api","onShareClick","mapStore","drawShareMap","getFormattedDateString","mutate","ShareDialog","useZoomButtons","zoomOut","ev","zoomIn","Zoom","handlers","_Fragment","SVG","Topbar","navContent","mapControls","useMapData","cacheBuster","mapBaseData","fetchBaseData","fetchPerfData","queryClient","useQueryClient","dataVersion","prevType","perfData","setQueryData","baseDataQuery","useQuery","queryKey","queryFn","initialData","cacheTime","Infinity","staleTime","perfDataQuery","_queryClient$getQuery","prevPerf","getQueryData","FALLBACK_PERF_RESPONSE","version","apiResponse","keepPreviousData","refetchInterval","MAP_DATA_FETCH_INTERVAL","onSuccess","location","reload","restoredData","useMapType","_MAP_TYPES$find","_type$subtypes$find","query","URLSearchParams","useLocation","search","typeFromQuery","subtypeFromQuery","MAP_TYPES","t","subtypes","find","MapTypeList","_props$linkClassName","linkClass","linkClassName","isActiveTreemap","activeType","activeSubtype","MapSubtypeId","append","NavLink","to","pageTitle","tracking","isLoading","navigate","useNavigate","mapData","initData","hasInvestingChannelAds","useInvestingChannelAds","isNewSubtype","setIsNewSubtype","isFetching","isLoadingInitialBaseData","isPreviousData","isLoadingInitialPerf","isInitialLoading","isFetchingNewPerf","as","href","Paragraph","buttonContent","item","newSubtype","delete","stringQuery","pathname","replace","inputClass","AdTag","position","ErrorBoundary","resetKeys","FallbackComponent","DefaultErrorBoundary","root","ReactDOM","App","mapProps","parseJSONFromScript","precomputedData","FinvizSettings","hasRedesignEnabled","isDark","perfDataSec","sec","ScaleId","SettingsSmallDark","SettingsSmall","FinvizIndexSecMap","perfDataGeo","geo","SettingsSmallGeoDark","SettingsSmallGeo","FinvizIndexGeoMap","renderTreemaps","apiRequest","rev","mapPerf","st","mapPerfScreener","uploadMap","method","headers","ContentType","file","fontSizesWidths","f","g","h","j","k","l","m","n","o","p","q","r","s","u","v","w","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","fontSizeLineHeights","dimensions","zoomExtent","d3","zoomElement","translateExtent","behavior","extent","newZoom","mapCenter","zoomSelection","scaleTo","getTransform","args","Array","isArray","translateBy","translateTo","scaleExtent","fontFamily","getTextFontFamily","getColorScale","_updateIndustryPerf","_updateSectorPerf","updateData","Date","minValuePerf","abs","_node$data$perfWeek","_node$data","perfWeek","maxValuePerf","_node$data$perfWeek2","_node$data2","perfMax","minValueNode","maxValueNode","valueMax","valueToUse","isNaN","numberOfDigits","floor","log10","roundedBound","ceil","scaleMinMax","minDomain","maxDomain","gradient","gradients","gradientSmall","linearScale","domain","range","colors","nullColor","min","getParentSector","updatePerf","nodeName","parentSector","updatedNode","_node$data3","_resetIndustryPerf","weightedPriceSum","marketCapSum","marketCap","everyStockUndefined","_getNodeTopOffset","isSmallSecMap","leftPadding","topPadding","isFirstNodeInIndustry","getNodeText","_node$additional","_this$settings$fontSi","_this$settings$fontSi2","fontSizes","scaleFontSizes","nodeTopOffset","nodeHeight","nodeNameFontSize","findMaxFontSizeForText","nodeNameLineHeight","stepFormat","perfText","fontPairs","fontSizePairs","allowedSize","perfFontSize","perfLineHeight","textHeight","topOffset","fontSize","text","getLongestText","fontSizePadding","maxWidth","widths","_widths$text$i","substring","getNextZoomLevel","actualZoomLevel","getPreviousZoomLevel","_stepFormat$replace","_stepFormat","floatValue","parseFloat","absValue","isPositiveScaleOnly","formated","nodeText","textBaseline","textAlign","nodeY","nodeDY","textX","nameY","perfTextY","font","fillText","getSpacingWithDefaults","spacing","_spacing$top","_spacing$right","_spacing$bottom","_spacing$left","right","bottom","_ref2","_config$height","_config$border","parrentPadding","margin","_ref3","fontWeight","AdTagName","tagDefinition","IC_TickerInContent","placements","minHeight","IC_MapsLeftRail","IC_Statements","IC_Groups","getInvestingChannelPage","page","create","_window$InvestingChan","InvestingChannelQueue","_window$InvestingChan2","InvestingChannel","UAT","Run","console","error","destroy","_window$InvestingChan3","_page","deps","tagName","tagProps","placementName","_queryOptions$default","queryOptions","client","QueryClient","defaultOptions","queries","useErrorBoundary","refetchOnWindowFocus","QueryClientProvider","withQueryClientContext","_Component$displayNam","hocComponent","displayName","dialogState","useDialogState","DialogTrigger","Dialog","DialogHeader","onCloseClick","hide","DialogBody","ShareDialogBody","isError","DialogFooter","ErrorView","showRefresh","message","src","imgUrl","CopyToClipboard","Heading","shareUrl","bottomLeftContent","FacebookShareButton","url","FacebookIcon","TwitterShareButton","via","TwitterIcon","shouldComponentUpdate","nextProps","line","curve","transform","PropTypes","isRequired","canvasEl","ratio","getScaleRatio","logo","logoBase64","textWidth","measureText","divider","toDataURL","Promise","resolve","reject","Image","onload","onerror","doc","isValidElement","getAttribute","JSON","parse","textContent","Sentry","captureException","_window$devicePixelRa","devicePixelRatio","AdsProvider","getAdsProvider","hasUserPremium","None","adsProvider","Freestar","trackPageView","_window$gtag2","_window2","freestarPageView","_window$freestar","freestar","queue","trackPageview","showContact","link","useEffect","RouterErrorElement","useRouteError","delay","timeout","throwOnTimeout","timeoutComponent","LoadingScreen","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","module","exports","shim","propName","componentName","propFullName","secret","err","Error","getShim","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes"],"sourceRoot":""}