{"version":3,"file":"2396.f0baa4e9.js","mappings":"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","sources":["webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/types.ts","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/ChartTooltip.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/constants.ts","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/useTooltipActiveStateControls.ts","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/utils.ts","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/BarChart.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/EmptyDataOverlayWrapper.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/LineChart.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/XAxis.tsx","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/LineStackedBarChart.tsx"],"sourcesContent":["import * as React from 'react'\r\n\r\nimport { FinancialsRowDataType } from '../financials-table/types'\r\n\r\nexport enum View {\r\n bars,\r\n lines,\r\n}\r\n\r\nexport interface ChartProps {\r\n chartData: ChartData[]\r\n showTotal?: boolean\r\n visibleAreas: Array & { color: string }>\r\n columnsCount: number\r\n barWidth?: number\r\n isFullWidth?: boolean\r\n}\r\n\r\nexport type ChartData = {\r\n year: string\r\n topKey: string\r\n bottomKey: string\r\n total: number\r\n} & Record\r\n\r\nexport enum LineChartTooltipSort {\r\n default = 'default',\r\n value = 'value',\r\n}\r\n\r\nexport type LineStackedBarChartProps = {\r\n data: FinancialsRowDataType[]\r\n yearKeys: string[]\r\n chartView: View\r\n isShowAll?: boolean\r\n isFullWidth?: boolean\r\n hasXAxis?: boolean\r\n isInView?: boolean\r\n hasBeenInView?: boolean\r\n lineChartTooltipSort?: keyof typeof LineChartTooltipSort\r\n emptyMessage?: React.ReactNode\r\n isEmpty?: boolean\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\nimport { NameType, Payload, ValueType } from 'recharts/types/component/DefaultTooltipContent'\r\n\r\nimport { shortFormatNumber } from '../../util'\r\nimport { LineChartTooltipSort } from './types'\r\n\r\ntype ChartTooltipProps = {\r\n isActive?: boolean\r\n activeKey?: string\r\n payload: Payload[] | undefined\r\n isReversed?: boolean\r\n payloadSort?: keyof typeof LineChartTooltipSort\r\n}\r\nexport default function ChartTooltip({\r\n isActive,\r\n activeKey,\r\n payload,\r\n payloadSort = 'default',\r\n isReversed = false,\r\n}: ChartTooltipProps) {\r\n const items = React.useMemo(() => {\r\n if (!isActive || !payload || payload.length === 0) return []\r\n\r\n if (LineChartTooltipSort[payloadSort] === LineChartTooltipSort.value) {\r\n return [...payload].sort((a, b) => Number(b.value ?? 0) - Number(a.value ?? 0))\r\n }\r\n return isReversed ? [...payload].reverse() : payload\r\n }, [payload, payloadSort, isReversed, isActive])\r\n\r\n if (items.length === 0) return null\r\n\r\n return (\r\n
\r\n {items.map((data, index) => {\r\n if (!data.value) return null\r\n\r\n const label = data.name\r\n const value = shortFormatNumber(+data.value)\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n {value}\r\n
\r\n )\r\n })}\r\n \r\n )\r\n}\r\n","import colors from '../../../../../config/colors'\r\n\r\nexport const CHART_HEIGHT = 250\r\nexport const LABELS_WIDTH = 28\r\nexport const BAR_CHART_LABELS_MARGIN = 22\r\nexport const LINE_CHART_LABELS_MARGIN = 57\r\nexport const BAR_WIDTH = 72\r\nexport const BAR_GAP = 16\r\nexport const EXTRA_WIDTH = 44\r\nexport const BAR_CHART_MARGINS = { top: 0, right: 0, bottom: 0, left: 0 }\r\nexport const LINE_CHART_MARGINS = { top: 5, right: 35, bottom: 5, left: 55 }\r\nexport const TICK_STYLE = { fontSize: 10, fontWeight: 500, textAnchor: 'end' }\r\nexport const TOOLTIP_WRAPPER_STYLE = { outline: 'none', zIndex: 10 }\r\nexport const CURSOR_STYLE = { fill: FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[50], opacity: 0.65 }\r\nexport const TRANSPARENT_CURSOR = { opacity: 0 }\r\n","import * as React from 'react'\r\n\r\nexport function useTooltipActiveStateControls() {\r\n const [isActive, setIsActive] = React.useState(false)\r\n return React.useMemo(\r\n () => ({\r\n isActive,\r\n chartWrapperActiveStateControlsProps: {\r\n /**\r\n * Fix a problem with chart tooltip not hiding correctly on mouse leave\r\n * See: https://github.com/recharts/recharts/issues/2726\r\n */\r\n onMouseEnter: () => {\r\n setIsActive(true)\r\n },\r\n onMouseLeave: () => {\r\n setIsActive(false)\r\n },\r\n },\r\n }),\r\n [isActive]\r\n )\r\n}\r\n","import colors from '../../../../../config/colors'\r\nimport { shortFormatNumber } from '../../util'\r\nimport { ColorVariant } from '../checkbox'\r\nimport { FinancialsRowDataType } from '../financials-table/types'\r\nimport { ChartData, View } from './types'\r\n\r\nexport function getColor(color: ColorVariant) {\r\n switch (color) {\r\n case ColorVariant.violet:\r\n return colors.violet[400]\r\n case ColorVariant.emerald:\r\n return FinvizSettings.hasDarkTheme ? colors.emerald[300] : colors.emerald[400]\r\n case ColorVariant.orange:\r\n return colors.orange[300]\r\n case ColorVariant.teal:\r\n return FinvizSettings.hasDarkTheme ? colors.teal[300] : colors.teal[400]\r\n case ColorVariant.pink:\r\n return colors.pink[400]\r\n case ColorVariant.lime:\r\n return FinvizSettings.hasDarkTheme ? colors.lime[300] : colors.lime[400]\r\n case ColorVariant.purple:\r\n return colors.purple[400]\r\n case ColorVariant.green:\r\n return colors.green[400]\r\n case ColorVariant.yellow:\r\n return FinvizSettings.hasDarkTheme ? colors.yellow[200] : colors.yellow[300]\r\n case ColorVariant.blue:\r\n return FinvizSettings.hasDarkTheme ? colors.blue[300] : colors.blue[400]\r\n case ColorVariant.red:\r\n return colors.red[400]\r\n case ColorVariant.gray:\r\n return colors.gray[400]\r\n case ColorVariant.dark:\r\n return FinvizSettings.hasDarkTheme ? colors.gray[200] : colors.gray[800]\r\n default:\r\n return 'red'\r\n }\r\n}\r\n\r\nexport function tickFormatter(value: any) {\r\n return shortFormatNumber(value, { fractions: 0 })\r\n}\r\n\r\nexport function getChartDataItemKey(item: Pick) {\r\n return item.id || item.label\r\n}\r\n\r\nexport function getChartData(data: FinancialsRowDataType[], yearKeys: string[], chartView: View) {\r\n /*\r\n * Bar chart renders segments from the bottom up, so the sorting of visible areas is correct here\r\n * assuming it's sorted by column values\r\n * */\r\n const visibleAreas = data.filter((item) => item.isSelected).map((item) => ({ ...item, color: getColor(item.color) }))\r\n /*\r\n * Line chart has reverse order because we need to render lines from the end so they don't cover main lines\r\n * you can think about it as visibleAreas index === zIndex on the chart\r\n * */\r\n if (chartView === View.lines) visibleAreas.reverse()\r\n\r\n const chartData = yearKeys.map((year) => {\r\n const stackedBar = { year, topKey: '', bottomKey: '', total: 0 } as ChartData\r\n\r\n visibleAreas.forEach((item) => {\r\n const valueKey = getChartDataItemKey(item)\r\n const value = item.values.find((v) => v.year === year)?.value ?? null\r\n stackedBar[valueKey] = value\r\n stackedBar.total += value ?? 0\r\n\r\n if (item.isSelected && value !== 0) {\r\n // top key is the key of latest area which is visible and have some positive value\r\n // bottom key is the key of latest area which is visible and have some negative value\r\n stackedBar[value && value > 0 ? 'topKey' : 'bottomKey'] = valueKey\r\n }\r\n })\r\n\r\n return stackedBar\r\n })\r\n\r\n return { chartData, visibleAreas }\r\n}\r\n","import * as React from 'react'\r\nimport { Bar, Cell, BarChart as RechartsBarChart, ResponsiveContainer, Tooltip, YAxis } from 'recharts'\r\n\r\nimport ChartTooltip from './ChartTooltip'\r\nimport {\r\n BAR_CHART_LABELS_MARGIN,\r\n BAR_CHART_MARGINS,\r\n BAR_GAP,\r\n BAR_WIDTH,\r\n CHART_HEIGHT,\r\n CURSOR_STYLE,\r\n EXTRA_WIDTH,\r\n LABELS_WIDTH,\r\n TICK_STYLE,\r\n TOOLTIP_WRAPPER_STYLE,\r\n TRANSPARENT_CURSOR,\r\n} from './constants'\r\nimport { ChartProps } from './types'\r\nimport { useTooltipActiveStateControls } from './useTooltipActiveStateControls'\r\nimport { getChartDataItemKey, tickFormatter } from './utils'\r\n\r\nexport default function BarChart({ chartData, visibleAreas, columnsCount, isFullWidth }: ChartProps) {\r\n const { isActive, chartWrapperActiveStateControlsProps } = useTooltipActiveStateControls()\r\n const [activeBarKey, setActiveBarKey] = React.useState('')\r\n const [reverseTooltipDirection, setReverseTooltipDirection] = React.useState(true)\r\n const chartWidth = columnsCount * BAR_WIDTH + (columnsCount - 1) * BAR_GAP + EXTRA_WIDTH\r\n\r\n const ChartWrapper = isFullWidth ? ResponsiveContainer : React.Fragment\r\n\r\n return (\r\n \r\n \r\n {\r\n setReverseTooltipDirection(mouseEvent.clientX > window.innerWidth / 2)\r\n }}\r\n >\r\n \r\n (\r\n \r\n )}\r\n />\r\n {/* Don't change the order of mapped items here, see getChartData */}\r\n {visibleAreas.map((area) => {\r\n const itemKey = getChartDataItemKey(area)\r\n return (\r\n {\r\n setActiveBarKey(itemKey)\r\n }}\r\n onMouseLeave={() => {\r\n setActiveBarKey('')\r\n }}\r\n >\r\n {chartData.map((row, index) => (\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\nimport { Heading } from '../typography'\r\nimport { LineStackedBarChartProps } from './types'\r\n\r\ninterface Props extends Pick {\r\n className: string\r\n children: React.ReactNode\r\n}\r\n\r\nexport function EmptyDataOverlayWrapper({ className, children, emptyMessage, isEmpty = false }: Props) {\r\n return (\r\n
\r\n
{children}
\r\n\r\n {isEmpty && (\r\n
\r\n {!!emptyMessage && (\r\n
\r\n \r\n {emptyMessage}\r\n \r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\nimport { Line, LineChart as RechartsLineChart, RectangleProps, ResponsiveContainer, Tooltip, YAxis } from 'recharts'\r\n\r\nimport { ColorVariant } from '../checkbox'\r\nimport ChartTooltip from './ChartTooltip'\r\nimport {\r\n BAR_GAP,\r\n BAR_WIDTH,\r\n CHART_HEIGHT,\r\n CURSOR_STYLE,\r\n EXTRA_WIDTH,\r\n LABELS_WIDTH,\r\n LINE_CHART_LABELS_MARGIN,\r\n LINE_CHART_MARGINS,\r\n TICK_STYLE,\r\n TOOLTIP_WRAPPER_STYLE,\r\n TRANSPARENT_CURSOR,\r\n} from './constants'\r\nimport { ChartProps, LineChartTooltipSort } from './types'\r\nimport { useTooltipActiveStateControls } from './useTooltipActiveStateControls'\r\nimport { getChartDataItemKey, getColor, tickFormatter } from './utils'\r\n\r\ninterface CustomCursorProps extends Partial> {\r\n width: number\r\n points?: [{ x: number; y: number }]\r\n isActive: boolean\r\n}\r\n\r\nconst CustomCursor = ({ points, width, isActive }: CustomCursorProps) => {\r\n const x = points![0].x - width / 2\r\n return (\r\n \r\n )\r\n}\r\n\r\ninterface Props extends ChartProps {\r\n tooltipSort?: keyof typeof LineChartTooltipSort\r\n}\r\n\r\nexport default function LineChart({\r\n chartData,\r\n visibleAreas,\r\n columnsCount,\r\n barWidth = BAR_WIDTH,\r\n tooltipSort,\r\n showTotal,\r\n isFullWidth,\r\n}: Props) {\r\n const { isActive, chartWrapperActiveStateControlsProps } = useTooltipActiveStateControls()\r\n const [activeLineKey, setActiveLineKey] = React.useState('')\r\n const [reverseTooltipDirection, setReverseTooltipDirection] = React.useState(true)\r\n const chartWidth = columnsCount * barWidth + (columnsCount - 1) * BAR_GAP + EXTRA_WIDTH\r\n\r\n const ChartWrapper = isFullWidth ? ResponsiveContainer : React.Fragment\r\n\r\n return (\r\n \r\n \r\n {\r\n setReverseTooltipDirection(mouseEvent.clientX > window.innerWidth / 2)\r\n }}\r\n >\r\n \r\n }\r\n content={({ payload }) => (\r\n \r\n )}\r\n />\r\n {showTotal && (\r\n {\r\n setActiveLineKey('Total')\r\n },\r\n onMouseLeave: () => {\r\n setActiveLineKey('')\r\n },\r\n }}\r\n dataKey=\"total\"\r\n stroke={getColor(ColorVariant.gray)}\r\n fill={getColor(ColorVariant.gray)}\r\n isAnimationActive={false}\r\n connectNulls={false}\r\n />\r\n )}\r\n {visibleAreas.map((area) => {\r\n const itemKey = getChartDataItemKey(area)\r\n return (\r\n {\r\n setActiveLineKey(itemKey)\r\n },\r\n onMouseLeave: () => {\r\n setActiveLineKey('')\r\n },\r\n }}\r\n dataKey={itemKey}\r\n stroke={area.color}\r\n fill={area.color}\r\n isAnimationActive={false}\r\n connectNulls={false}\r\n />\r\n )\r\n })}\r\n \r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { MONTHS } from '../../constants'\r\nimport { LABELS_WIDTH, LINE_CHART_MARGINS } from './constants'\r\nimport { LineStackedBarChartProps, View } from './types'\r\n\r\ninterface Props extends Pick {\r\n barWidth: number\r\n}\r\n\r\nexport function XAxis({ barWidth, yearKeys, chartView }: Props) {\r\n const rightOffset = chartView === View.lines ? LINE_CHART_MARGINS.right - barWidth / 2 : 0\r\n return (\r\n \r\n {yearKeys.map((value) => {\r\n const year = value.substring(0, 4)\r\n const month = Number.parseInt(value.substring(4, 6))\r\n\r\n return (\r\n \r\n {month === 1 ? year.substring(2, 4) : MONTHS[month - 1]}\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\nimport BarChart from './BarChart'\r\nimport { EmptyDataOverlayWrapper } from './EmptyDataOverlayWrapper'\r\nimport LineChart from './LineChart'\r\nimport { XAxis } from './XAxis'\r\nimport { CHART_HEIGHT, LABELS_WIDTH } from './constants'\r\nimport { LineStackedBarChartProps, View } from './types'\r\nimport { getChartData } from './utils'\r\n\r\nexport function LineStackedBarChart({\r\n data,\r\n yearKeys,\r\n chartView,\r\n lineChartTooltipSort,\r\n emptyMessage,\r\n isEmpty,\r\n isFullWidth = false,\r\n hasXAxis = false,\r\n isShowAll = false,\r\n isInView = true,\r\n hasBeenInView = true,\r\n}: LineStackedBarChartProps) {\r\n const wrapperRef = React.useRef(null)\r\n const [barWidth, setBarWidth] = React.useState(0)\r\n const { chartData, visibleAreas } = React.useMemo(\r\n () => (hasBeenInView ? getChartData(data, yearKeys, chartView) : { chartData: [], visibleAreas: [] }),\r\n [data, yearKeys, hasBeenInView, chartView]\r\n )\r\n\r\n const columnsCount = yearKeys.length\r\n\r\n React.useEffect(() => {\r\n const wrapperWidth = wrapperRef.current?.clientWidth ?? 0\r\n setBarWidth((wrapperWidth - LABELS_WIDTH) / columnsCount)\r\n }, [columnsCount])\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {isInView && chartView === View.bars && (\r\n \r\n )}\r\n {isInView && chartView === View.lines && (\r\n \r\n )}\r\n\r\n {hasXAxis && }\r\n
\r\n \r\n )\r\n}\r\n"],"names":["View","LineChartTooltipSort","ChartTooltip","_ref","isActive","activeKey","payload","payloadSort","isReversed","items","React","length","value","sort","a","b","_b$value","_a$value","Number","reverse","_jsx","className","children","map","data","index","label","name","shortFormatNumber","_jsxs","classNames","dataKey","style","backgroundColor","color","CHART_HEIGHT","LABELS_WIDTH","BAR_CHART_LABELS_MARGIN","LINE_CHART_LABELS_MARGIN","BAR_WIDTH","BAR_GAP","EXTRA_WIDTH","BAR_CHART_MARGINS","top","right","bottom","left","LINE_CHART_MARGINS","TICK_STYLE","fontSize","fontWeight","textAnchor","TOOLTIP_WRAPPER_STYLE","outline","zIndex","CURSOR_STYLE","fill","FinvizSettings","hasDarkTheme","colors","opacity","TRANSPARENT_CURSOR","useTooltipActiveStateControls","setIsActive","chartWrapperActiveStateControlsProps","onMouseEnter","onMouseLeave","getColor","ColorVariant","violet","emerald","orange","teal","pink","lime","purple","green","yellow","blue","red","gray","dark","tickFormatter","fractions","getChartDataItemKey","item","id","BarChart","chartData","visibleAreas","columnsCount","isFullWidth","activeBarKey","setActiveBarKey","reverseTooltipDirection","setReverseTooltipDirection","chartWidth","ChartWrapper","ResponsiveContainer","height","RechartsBarChart","width","margin","barCategoryGap","stackOffset","onMouseMove","_","mouseEvent","clientX","window","innerWidth","YAxis","orientation","tick","tickLine","axisLine","tickMargin","interval","Tooltip","wrapperStyle","position","y","allowEscapeViewBox","x","reverseDirection","offset","isAnimationActive","cursor","content","_ref2","area","itemKey","Bar","stackId","row","Cell","radius","topKey","bottomKey","includes","EmptyDataOverlayWrapper","emptyMessage","isEmpty","classnames","relative","Heading","level","CustomCursor","points","strokeWidth","LineChart","barWidth","tooltipSort","showTotal","activeLineKey","setActiveLineKey","RechartsLineChart","_ref3","Line","type","dot","activeDot","stroke","connectNulls","isHighlighted","XAxis","yearKeys","chartView","rightOffset","lines","paddingLeft","paddingRight","year","substring","month","parseInt","MONTHS","LineStackedBarChart","lineChartTooltipSort","hasXAxis","isShowAll","isInView","hasBeenInView","wrapperRef","setBarWidth","filter","isSelected","stackedBar","total","forEach","_item$values$find$val","_item$values$find","valueKey","values","find","v","getChartData","_wrapperRef$current$c","_wrapperRef$current","wrapperWidth","current","clientWidth","ref","bars","undefined"],"sourceRoot":""}