{"version":3,"file":"3972.6637e372.js","mappings":"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","sources":["webpack://@finviz/website/./js/main/components/ChipSwitch.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableContext.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableRow.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTable.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsWidget.tsx","webpack://@finviz/website/./js/main/components/financials-table/utils.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/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","webpack://@finviz/website/./js/main/components/line-stacked-bar-chart/types.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"],"sourcesContent":["import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonComponentProps, ButtonProps } from './button'\r\nimport { Paragraph } from './typography'\r\n\r\ninterface Props {\r\n children: (React.ReactElement | null)[]\r\n label?: string\r\n size?: ButtonProps['size']\r\n rounding?: ButtonProps['rounding']\r\n}\r\n\r\nexport function ChipSwitch({ children, label, size, rounding }: Props) {\r\n return (\r\n
\r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n\r\n {React.Children.map(children, (child: React.ReactElement | null) => {\r\n if (React.isValidElement(child) && child.type === Button) {\r\n return React.cloneElement(child, {\r\n size,\r\n rounding,\r\n theme: child.props.theme ?? 'chipTransparent',\r\n className: classnames(child.props.className, {\r\n // @todo - these style should be applied globally onto all chipTransparent buttons\r\n '!text-gray-600 dark:!text-gray-400': !child.props.active,\r\n '!text-gray-800 dark:!text-white': child.props.active,\r\n }),\r\n })\r\n }\r\n\r\n return child\r\n })}\r\n
\r\n )\r\n}\r\n\r\nexport const ChipSwitchButton = Button\r\n","import * as React from 'react'\r\n\r\nimport { getCookie } from '../../../app/shared/cookie'\r\nimport { setCookieRequest } from '../../services/api'\r\n\r\n/*\r\n * Context.\r\n */\r\nexport type FinancialsTableSettingsType = Record\r\n\r\nexport type FinancialsTableScrollInfo = {\r\n yPosition: number\r\n}\r\n\r\nexport interface FinancialsTableContextProps {\r\n settings: T\r\n setSettings: (settings: T) => void\r\n scrollInfo?: FinancialsTableScrollInfo\r\n}\r\n\r\nexport const FinancialsTableContext = React.createContext>({\r\n settings: {},\r\n setSettings: () => null,\r\n scrollInfo: undefined,\r\n})\r\n\r\n/*\r\n * Hook.\r\n */\r\n\r\nexport function useFinancialsTableContext() {\r\n return React.useContext(FinancialsTableContext) as FinancialsTableContextProps\r\n}\r\n\r\n/*\r\n * Component.\r\n */\r\n\r\ninterface Props {\r\n children: React.ReactNode\r\n defaultSettings: FinancialsTableSettingsType\r\n cookieKey: string\r\n}\r\n\r\nexport const FinancialsTableContextProvider = ({ children, cookieKey, defaultSettings }: Props) => {\r\n const [scrollInfo, setScrollInfo] = React.useState()\r\n const [settings, setSettings] = React.useState(() => {\r\n const cookieValue = decodeURIComponent(getCookie(cookieKey))\r\n if (cookieValue.length === 0) return defaultSettings\r\n\r\n try {\r\n return { ...defaultSettings, ...JSON.parse(cookieValue) } as FinancialsTableSettingsType\r\n } catch {\r\n return defaultSettings\r\n }\r\n })\r\n\r\n const handleSetSettingsChange = (settings: FinancialsTableSettingsType) => {\r\n setScrollInfo({ yPosition: window.scrollY })\r\n setSettings(settings)\r\n setCookieRequest(cookieKey, JSON.stringify(settings))\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\n\r\nimport { TableAlign, TableBody, TableCell, TableRow } from '../Table'\r\nimport { Checkbox } from '../checkbox'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsTableRowProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n data: RowDataType\r\n columns: ColumnDefinition[]\r\n subColumns?: Record[]>\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n isFirst: boolean\r\n isLast: boolean\r\n}\r\n\r\nexport default function FinancialsTableRow<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n data,\r\n columns,\r\n subColumns,\r\n onVisibilityChange,\r\n isFirst,\r\n isLast,\r\n}: FinancialsTableRowProps) {\r\n const { id, label, labelElement, labelColumnClassName, isSelected, color, subData, isLabelColumnSticky } = data\r\n\r\n return (\r\n {\r\n onVisibilityChange(id, !isSelected)\r\n }}\r\n >\r\n \r\n \r\n {label}}\r\n className=\"cursor-pointer\"\r\n color={color}\r\n size=\"none\"\r\n />\r\n \r\n\r\n {columns.map((column) => (\r\n \r\n {column.renderColumn(data)}\r\n \r\n ))}\r\n \r\n {subData?.map((item, index, array) => (\r\n \r\n \r\n {item.label}\r\n \r\n {subColumns?.[item.id].map((column) => (\r\n \r\n {column.renderColumn(item as SubColumnDefinition)}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { Table } from '../Table'\r\nimport FinancialsTableRow from './FinancialsTableRow'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsTableProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n tableHead?: React.ReactNode\r\n tableFooter?: React.ReactNode\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n subColumns?: Record[]>\r\n isTableFixed?: boolean\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n}\r\n\r\nexport default function FinancialsTable<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n tableHead,\r\n tableFooter,\r\n columns,\r\n subColumns,\r\n data,\r\n isTableFixed = true,\r\n onVisibilityChange,\r\n}: FinancialsTableProps) {\r\n return (\r\n \r\n {tableHead}\r\n {data.map((row, index) => (\r\n \r\n ))}\r\n {tableFooter}\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { TableStickyColumnWrapper } from '../Table/TableStickyColumnWrapper'\r\nimport FinancialsTable from './FinancialsTable'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsWidgetProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n children: React.ReactNode\r\n header?: React.ReactNode\r\n tableHead?: React.ReactNode\r\n tableFooter?: React.ReactNode\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n hasStickyColumnWrapper?: boolean\r\n subColumns?: Record[]>\r\n isTableFixed?: boolean\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n}\r\n\r\nexport function FinancialsWidget<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n children,\r\n tableHead,\r\n tableFooter,\r\n columns,\r\n subColumns,\r\n header,\r\n data,\r\n isTableFixed,\r\n hasStickyColumnWrapper,\r\n onVisibilityChange,\r\n}: FinancialsWidgetProps) {\r\n const financialsTable = (\r\n \r\n )\r\n return (\r\n
\r\n
\r\n {header}\r\n {children}\r\n
\r\n {hasStickyColumnWrapper ? (\r\n \r\n {financialsTable}\r\n \r\n ) : (\r\n financialsTable\r\n )}\r\n
\r\n )\r\n}\r\n","import { FinancialsRowValue } from './types'\r\n\r\nexport function getYoYData(data: T[]) {\r\n const sortedData = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n return sortedData.reduce<{\r\n change: Record\r\n changePct: Record\r\n }>(\r\n (acc, { year, value }, i) => {\r\n const prev = sortedData[i - 1]?.value ?? null\r\n let change: number | null = null\r\n let changePct: number | null = null\r\n\r\n if (value !== null && prev !== null && value !== 0 && prev !== 0) {\r\n change = value - prev\r\n changePct = ((value - prev) / Math.abs(prev)) * 100\r\n }\r\n\r\n return {\r\n change: {\r\n ...acc.change,\r\n [year]: change,\r\n },\r\n changePct: {\r\n ...acc.changePct,\r\n [year]: changePct,\r\n },\r\n }\r\n },\r\n { change: {}, changePct: {} }\r\n )\r\n}\r\n\r\nexport function getMoMPercentageData(data: T[]) {\r\n const sortedData = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n return sortedData.reduce>((acc, { year, value }, i) => {\r\n const prev = sortedData[i - 1]?.value ?? null\r\n let changePct: number | null = null\r\n\r\n if (value !== null && prev !== null && value !== 0 && prev !== 0) {\r\n changePct = ((value - prev) / Math.abs(prev)) * 100\r\n }\r\n\r\n return {\r\n ...acc,\r\n [year]: changePct,\r\n }\r\n }, {})\r\n}\r\n\r\nexport function getIsCompact(numOfCols: number, barWidth: number) {\r\n // ~1400 is max container width\r\n const maxContainerWidth = Math.min(window.innerWidth, 1400)\r\n\r\n const barsWindowWidthRatio = (barWidth * numOfCols) / maxContainerWidth\r\n return barsWindowWidthRatio > 0.65\r\n}\r\n\r\nexport function getHeatmapClassNames(value: number | null = null) {\r\n if (value === null || value === 0) return 'bg-neutral text-neutral'\r\n\r\n // Negative\r\n if (value < -80) return 'bg-danger-5 text-danger-5'\r\n if (value < -60) return 'bg-danger-4 text-danger-4'\r\n if (value < -40) return 'bg-danger-3 text-danger-3'\r\n if (value < -20) return 'bg-danger-2 text-danger-2'\r\n if (value < 0) return 'bg-danger-1 text-danger-1'\r\n\r\n // Positive\r\n if (value > 80) return 'bg-success-5 text-success-5'\r\n if (value > 60) return 'bg-success-4 text-success-4'\r\n if (value > 40) return 'bg-success-3 text-success-3'\r\n if (value > 20) return 'bg-success-2 text-success-2'\r\n if (value > 0) return 'bg-success-1 text-success-1'\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 valueFormatter?: (data: Payload) => string\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 valueFormatter,\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 = valueFormatter ? valueFormatter(data) : 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\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","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 * 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"],"names":["ChipSwitch","_ref","children","label","size","rounding","_jsxs","className","_jsx","Paragraph","React","map","child","_child$props$theme","type","Button","theme","props","classnames","active","ChipSwitchButton","FinancialsTableContext","settings","setSettings","scrollInfo","undefined","useFinancialsTableContext","FinancialsTableContextProvider","cookieKey","defaultSettings","setScrollInfo","cookieValue","decodeURIComponent","getCookie","length","JSON","parse","Provider","value","yPosition","window","scrollY","setCookieRequest","stringify","FinancialsTableRow","data","columns","subColumns","onVisibilityChange","isFirst","isLast","id","labelElement","labelColumnClassName","isSelected","color","subData","isLabelColumnSticky","TableBody","onMouseDown","TableRow","classNames","TableCell","hasLeading","align","TableAlign","Left","isSticky","Checkbox","readOnly","checked","column","_column$getColumnClas","getColumnClassName","call","renderColumn","item","index","array","FinancialsTable","tableHead","tableFooter","isTableFixed","Table","row","_row$id","FinancialsWidget","_data$0$values$length","_data$","header","hasStickyColumnWrapper","financialsTable","TableStickyColumnWrapper","hasBorder","shouldScrollToEnd","values","getYoYData","sortedData","sort","a","b","Number","parseInt","year","reduce","acc","i","_sortedData$value","_sortedData","prev","change","changePct","Math","abs","getMoMPercentageData","_ref2","_sortedData$value2","_sortedData2","getIsCompact","numOfCols","barWidth","min","innerWidth","getHeatmapClassNames","arguments","ChartTooltip","isActive","activeKey","payload","payloadSort","isReversed","valueFormatter","items","LineChartTooltipSort","_b$value","_a$value","reverse","name","shortFormatNumber","dataKey","style","backgroundColor","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","BarChart","chartData","visibleAreas","columnsCount","isFullWidth","chartWrapperActiveStateControlsProps","useTooltipActiveStateControls","activeBarKey","setActiveBarKey","reverseTooltipDirection","setReverseTooltipDirection","chartWidth","ChartWrapper","ResponsiveContainer","height","RechartsBarChart","width","margin","barCategoryGap","stackOffset","onMouseMove","_","mouseEvent","clientX","YAxis","orientation","tick","tickLine","axisLine","tickFormatter","tickMargin","interval","Tooltip","wrapperStyle","position","y","allowEscapeViewBox","x","reverseDirection","offset","isAnimationActive","cursor","content","area","itemKey","getChartDataItemKey","Bar","stackId","onMouseEnter","onMouseLeave","Cell","radius","topKey","bottomKey","includes","EmptyDataOverlayWrapper","emptyMessage","isEmpty","relative","Heading","level","CustomCursor","points","strokeWidth","LineChart","tooltipSort","showTotal","activeLineKey","setActiveLineKey","RechartsLineChart","_ref3","Line","dot","activeDot","stroke","getColor","ColorVariant","gray","connectNulls","isHighlighted","XAxis","yearKeys","chartView","rightOffset","View","lines","paddingLeft","paddingRight","substring","month","MONTHS","LineStackedBarChart","lineChartTooltipSort","hasXAxis","isShowAll","isInView","hasBeenInView","wrapperRef","setBarWidth","getChartData","_wrapperRef$current$c","_wrapperRef$current","wrapperWidth","current","clientWidth","ref","bars","setIsActive","violet","emerald","orange","teal","pink","lime","purple","green","yellow","blue","red","dark","fractions","filter","stackedBar","total","forEach","_item$values$find$val","_item$values$find","valueKey","find","v"],"sourceRoot":""}