{"version":3,"file":"6715.4f2077d6.js","mappings":"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","sources":["webpack://@finviz/website/./js/main/components/ChipSwitch.tsx","webpack://@finviz/website/./js/main/components/SubMenu/SubMenuTabs.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/financials-table/constants.ts","webpack://@finviz/website/./js/main/components/financials-table/useFinancialsTablePersistScrollPosition.ts","webpack://@finviz/website/./js/main/modules/quote/components/QuoteFinancialsTabMenu.tsx","webpack://@finviz/website/./js/main/components/SubMenu/SubMenu.tsx","webpack://@finviz/website/./js/main/modules/quote/components/QuoteStickySubMenu.tsx","webpack://@finviz/website/../charts/app/constants/common.ts","webpack://@finviz/website/../charts/app/utils.ts","webpack://@finviz/website/../charts/app/utils/helpers.ts","webpack://@finviz/website/../node_modules/recharts/es6/component/ResponsiveContainer.js"],"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 { Link } from 'react-router-dom'\r\n\r\nimport { Button, ButtonSizeType } from '../button'\r\n\r\ninterface Props {\r\n items: Array<{ label: string; href: string; isActive: boolean; reloadDocument?: boolean }>\r\n size?: ButtonSizeType\r\n}\r\n\r\nexport function SubMenuTabs({ items, size = 'medium' }: Props) {\r\n return (\r\n
\r\n {items.map(({ label, href, isActive, reloadDocument }) => (\r\n \r\n {label}\r\n \r\n ))}\r\n
\r\n )\r\n}\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","export const TABLE_ROW_HIGHT = 24\r\n","import React from 'react'\r\n\r\nimport { usePrevious } from '../../hooks/use-previous'\r\nimport { useFinancialsTableContext } from './FinancialsTableContext'\r\nimport { TABLE_ROW_HIGHT } from './constants'\r\n\r\ninterface Props {\r\n categoryAreasCounts: number[]\r\n dataKeys: string[]\r\n}\r\n\r\nexport function useFinancialsTablePersistScrollPosition({ categoryAreasCounts, dataKeys }: Props) {\r\n const { settings, scrollInfo } = useFinancialsTableContext()\r\n const previousSettings = usePrevious(settings)\r\n\r\n React.useLayoutEffect(() => {\r\n const widgetSettingsSectionElement = document.getElementById('js-widget-settings-section')\r\n if (!previousSettings || !scrollInfo || !widgetSettingsSectionElement) return\r\n\r\n const financialsTables = document.getElementsByClassName('js-financials-widget')\r\n const widgetSettingsSectionElementTopPosition = widgetSettingsSectionElement.getBoundingClientRect().top\r\n let index = 0\r\n let lastAbsDiffInPx: number | null = null\r\n\r\n Array.from(financialsTables).forEach((financialTableElement, i) => {\r\n const { top } = financialTableElement.getBoundingClientRect()\r\n const absDiffInPx = Math.abs(top - widgetSettingsSectionElementTopPosition)\r\n if (lastAbsDiffInPx === null || absDiffInPx < lastAbsDiffInPx) {\r\n lastAbsDiffInPx = absDiffInPx\r\n index = i\r\n }\r\n })\r\n\r\n let areas = 0\r\n for (let i = 0; i < index; i++) {\r\n areas += categoryAreasCounts[i]\r\n }\r\n\r\n let sign = 0\r\n dataKeys.forEach((dataKey) => {\r\n if (settings[dataKey] !== previousSettings[dataKey]) {\r\n sign = settings[dataKey] ? 1 : -1\r\n }\r\n })\r\n\r\n const shift = areas * TABLE_ROW_HIGHT * sign\r\n window.scrollTo(window.scrollX, scrollInfo.yPosition + shift)\r\n\r\n // effect should run only when scroll info is changed = user toggled data settings\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [scrollInfo])\r\n}\r\n","import { decodeQueryString, encodeQueryString } from '../../../../app/queryString'\r\nimport { SubMenuTabs } from '../../../components/SubMenu/SubMenuTabs'\r\nimport { FINANCIALS_SECTION_LABELS, QuoteRoutes } from '../../../constants'\r\n\r\nconst FINANCIAL_MENU_TABS: Array = [\r\n QuoteRoutes.Dividends,\r\n QuoteRoutes.Earnings,\r\n QuoteRoutes.Revenue,\r\n QuoteRoutes.Forecast,\r\n]\r\n\r\nfunction getFinancialMenuTabs() {\r\n const searchParams = decodeQueryString()\r\n\r\n return FINANCIAL_MENU_TABS.map((value) => ({\r\n label: FINANCIALS_SECTION_LABELS[value],\r\n href: `/quote.ashx?${encodeQueryString({ ...searchParams, ty: value })}`,\r\n isActive: searchParams.ty === value,\r\n reloadDocument: true,\r\n }))\r\n}\r\n\r\nexport function QuoteFinancialsTabMenu() {\r\n return \r\n}\r\n","import classNames from 'classnames'\r\nimport { isRedesignEnabled } from 'finviz-charts/app/utils'\r\nimport * as React from 'react'\r\n\r\ninterface Props extends React.HTMLProps {\r\n leftContent?: React.ReactNode\r\n rightContent?: React.ReactNode\r\n}\r\n\r\nexport function SubMenu({ leftContent, rightContent, ...props }: Props) {\r\n return (\r\n
\r\n
\r\n \r\n {leftContent}\r\n
\r\n
{rightContent}
\r\n
\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { SubMenu } from '../../../components/SubMenu/SubMenu'\r\n\r\ninterface Props {\r\n leftContent?: React.ReactNode\r\n rightContent?: React.ReactNode\r\n}\r\n\r\nexport function QuoteStickySubMenu({ leftContent, rightContent }: Props) {\r\n return \r\n}\r\n","export const FONT_SIZE = {\r\n XXS: 5,\r\n XS: 7,\r\n S: 8,\r\n M: 10,\r\n L: 11,\r\n XXL: 18,\r\n XXXL: 23,\r\n}\r\nexport const LINE_HEIGHT = {\r\n XS: 7,\r\n S: 8,\r\n M: 10,\r\n}\r\nexport const PADDING = {\r\n XXXS: 1,\r\n XXS: 2,\r\n XS: 3,\r\n S: 5,\r\n}\r\nexport const MARGIN = {\r\n XS: 4,\r\n}\r\nexport const CHART_MARGIN = {\r\n S: 15,\r\n M: 30,\r\n L: 35,\r\n XL: 38,\r\n XXL: 48,\r\n}\r\nexport const SETTINGS_HEIGHT = 44\r\nexport const TICKER_TIMEFRAME_CHANGE_HEIGHT = 20\r\nexport const OFFSET = {\r\n XXS: 2,\r\n XS: 4,\r\n S: 6,\r\n M: 8,\r\n XXL: 20,\r\n}\r\nexport const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n\r\nexport enum ChartEditorEnum {\r\n publish = 'publish',\r\n tools = 'tools',\r\n ideas = 'ideas',\r\n settings = 'settings',\r\n timeframe = 'timeframe',\r\n}\r\n\r\nexport enum LayoutType {\r\n '1h1v' = '1h1v',\r\n '1h2v' = '1h2v',\r\n '1h3v' = '1h3v',\r\n '2h1v' = '2h1v',\r\n '2h2v' = '2h2v',\r\n '3h1v' = '3h1v',\r\n '3h2v' = '3h2v',\r\n '1l2r' = '1l2r',\r\n '1t2b' = '1t2b',\r\n}\r\n\r\nexport enum CanvasElementType {\r\n element = 'canvas/element',\r\n arrow = 'canvas/arrow',\r\n brushV1 = 'canvas/brush/brush_v1',\r\n curve = 'canvas/curve',\r\n ellipse = 'canvas/ellipse',\r\n fibonacciRetracements = 'canvas/fibonacci_retracements',\r\n horizontalLine = 'canvas/horizontal_line',\r\n line = 'canvas/line',\r\n measure = 'canvas/measure',\r\n pitchforkV1 = 'canvas/pitchfork/pitchfork_v1',\r\n polygon = 'canvas/polygon',\r\n position = 'canvas/position',\r\n rectangle = 'canvas/rectangle',\r\n rotatedRectangle = 'canvas/rotated_rectangle',\r\n scaledLine = 'canvas/scaled_line',\r\n scaledText = 'canvas/scaled_text',\r\n symbol = 'canvas/symbol',\r\n text = 'canvas/text',\r\n triangle = 'canvas/triangle',\r\n verticalLine = 'canvas/vertical_line',\r\n xabcd = 'canvas/xabcd',\r\n calloutV1 = 'canvas/callout/callout_v1',\r\n elliottWaves = 'canvas/elliott_waves/elliott_waves',\r\n ellipseV1 = 'canvas/ellipse/ellipse_v1',\r\n rotatedRectangleV1 = 'canvas/rotated_rectangle/rotated_rectangle_v1',\r\n}\r\n\r\nexport enum ChartElementType {\r\n CandleStick = 'charts/candle_stick',\r\n HeikinAshi = 'charts/heikin_ashi',\r\n HollowCandleStick = 'charts/candle_stick_hollow',\r\n LineChart = 'charts/line_chart',\r\n OhlcChart = 'charts/ohlc_chart',\r\n MarketSentiment = 'charts/market_sentiment',\r\n MultiLineChart = 'charts/multi_line_chart',\r\n PerfChart = 'charts/perf_chart',\r\n}\r\n\r\nexport enum IndicatorType {\r\n Indicator = 'indicators/indicator',\r\n None = 'indicators/none',\r\n Adx = 'indicators/adx',\r\n Aro = 'indicators/aro',\r\n Aroosc = 'indicators/aroosc',\r\n Atr = 'indicators/atr',\r\n Cci = 'indicators/cci',\r\n Cot = 'indicators/cot',\r\n Fi = 'indicators/fi',\r\n Macd = 'indicators/macd',\r\n Mfi = 'indicators/mfi',\r\n Obv = 'indicators/obv',\r\n Perf = 'indicators/perf',\r\n Rmi = 'indicators/rmi',\r\n Roc = 'indicators/roc',\r\n Rsi = 'indicators/rsi',\r\n Rvol = 'indicators/rvol',\r\n Rwi = 'indicators/rwi',\r\n Stofa = 'indicators/stofa',\r\n Stofu = 'indicators/stofu',\r\n Stosl = 'indicators/stosl',\r\n Trix = 'indicators/trix',\r\n Ult = 'indicators/ult',\r\n Vol = 'indicators/vol',\r\n Wr = 'indicators/wr',\r\n Shrtfl = 'indicators/shrtfl',\r\n Shrtra = 'indicators/shrtra',\r\n}\r\n\r\nexport enum OverlayType {\r\n Overlay = 'overlays/overlay',\r\n None = 'overlays/none',\r\n Bb = 'overlays/bb',\r\n Dch = 'overlays/dch',\r\n Ema = 'overlays/ema',\r\n Ema2 = 'overlays/ema2',\r\n Hilo = 'overlays/hilo',\r\n Hline = 'overlays/hline',\r\n Ic = 'overlays/ic',\r\n Icf = 'overlays/icf',\r\n Kch = 'overlays/kch',\r\n Patterns = 'overlays/patterns',\r\n Pp = 'overlays/pp',\r\n Sar = 'overlays/sar',\r\n Sma = 'overlays/sma',\r\n Sma2 = 'overlays/sma2',\r\n Str = 'overlays/str',\r\n Vp = 'overlays/vp',\r\n Vwap = 'overlays/vwap',\r\n}\r\n\r\nexport enum ChartEventDbType {\r\n Dividends = 'chartEvent/dividends',\r\n Split = 'chartEvent/split',\r\n Earnings = 'chartEvent/earnings',\r\n}\r\n\r\nexport enum ChartEventType {\r\n ChartEvent = 'chartEvent/chartEvent',\r\n Dividends = 'chartEvent/dividends',\r\n Split = 'chartEvent/split',\r\n Earnings = 'chartEvent/earnings',\r\n}\r\n\r\nexport enum ChartEventBadgeType {\r\n Dividends = 'chartEvent/dividends',\r\n Split = 'chartEvent/split',\r\n EarningsPositive = 'chartEvent/earnings',\r\n EarningsNegative = 'chartEvent/earningsNegative',\r\n EarningsNeutral = 'chartEvent/earningsNeutral',\r\n EarningsFuture = 'chartEvent/earningsFuture',\r\n}\r\n\r\nexport const ChartEventLabels: Record = {\r\n [ChartEventBadgeType.Dividends]: 'Dividends',\r\n [ChartEventBadgeType.Split]: 'Split',\r\n [ChartEventBadgeType.EarningsPositive]: 'Earnings & Revenue',\r\n [ChartEventBadgeType.EarningsNegative]: 'Earnings & Revenue',\r\n [ChartEventBadgeType.EarningsNeutral]: 'Earnings & Revenue',\r\n [ChartEventBadgeType.EarningsFuture]: 'Earnings & Revenue',\r\n}\r\n\r\ninterface LayoutRule {\r\n columns: number\r\n rows: number\r\n count: number\r\n gridAreas?: string[]\r\n}\r\n\r\nexport const LAYOUTS: Record = {\r\n '1h1v': { columns: 1, rows: 1, count: 1 },\r\n '1h2v': { columns: 1, rows: 2, count: 2 },\r\n '1h3v': { columns: 1, rows: 3, count: 3 },\r\n '2h1v': { columns: 2, rows: 1, count: 2 },\r\n '2h2v': { columns: 2, rows: 2, count: 4 },\r\n '3h1v': { columns: 3, rows: 1, count: 3 },\r\n '3h2v': { columns: 3, rows: 2, count: 6 },\r\n '1l2r': {\r\n columns: 2,\r\n rows: 2,\r\n count: 3,\r\n gridAreas: ['1 / 1 / 3 / 2', '1 / 2 / 2 / 3', '2 / 2 / 3 / 3'],\r\n },\r\n '1t2b': {\r\n columns: 2,\r\n rows: 2,\r\n count: 3,\r\n gridAreas: ['1 / 1 / 2 / 3', '2 / 1 / 3 / 2', '2 / 2 / 3 / 3'],\r\n },\r\n}\r\n\r\nexport const SORT_DIRECTION = {\r\n ASC: 'ASC',\r\n DESC: 'DESC',\r\n}\r\n\r\nexport const ICON_SIZE = {\r\n L: 32,\r\n}\r\n\r\n// Keep in sync with the copy in Website repo - Website/js/main/constants.ts\r\nexport enum TIMEFRAME {\r\n i1 = 'i1',\r\n i2 = 'i2',\r\n i3 = 'i3',\r\n i5 = 'i5',\r\n i10 = 'i10',\r\n i15 = 'i15',\r\n i30 = 'i30',\r\n h = 'h',\r\n h2 = 'h2',\r\n h4 = 'h4',\r\n d = 'd',\r\n w = 'w',\r\n m = 'm',\r\n}\r\n\r\nexport type TimeframeAndIntradayType = TIMEFRAME | 'intraday'\r\n\r\nexport const TIMEFRAMES_WITH_PRE_MARKET = [TIMEFRAME.i1, TIMEFRAME.i2, TIMEFRAME.i3, TIMEFRAME.i5]\r\n\r\nexport const IntradayTimeframeInterval = {\r\n [TIMEFRAME.i1]: 1,\r\n [TIMEFRAME.i2]: 2,\r\n [TIMEFRAME.i3]: 3,\r\n [TIMEFRAME.i5]: 5,\r\n [TIMEFRAME.i10]: 10,\r\n [TIMEFRAME.i15]: 15,\r\n [TIMEFRAME.i30]: 30,\r\n [TIMEFRAME.h]: 60,\r\n [TIMEFRAME.h2]: 120,\r\n [TIMEFRAME.h4]: 240,\r\n}\r\n\r\nexport const TimeframeLabelShort = {\r\n [TIMEFRAME.i1]: '1M',\r\n [TIMEFRAME.i2]: '2M',\r\n [TIMEFRAME.i3]: '3M',\r\n [TIMEFRAME.i5]: '5M',\r\n [TIMEFRAME.i10]: '10M',\r\n [TIMEFRAME.i15]: '15M',\r\n [TIMEFRAME.i30]: '30M',\r\n [TIMEFRAME.h]: '1H',\r\n [TIMEFRAME.h2]: '2H',\r\n [TIMEFRAME.h4]: '4H',\r\n [TIMEFRAME.d]: 'D',\r\n [TIMEFRAME.w]: 'W',\r\n [TIMEFRAME.m]: 'M',\r\n}\r\n\r\nexport enum DateRangeType {\r\n d1 = 'd1',\r\n d5 = 'd5',\r\n m1 = 'm1',\r\n m3 = 'm3',\r\n m6 = 'm6',\r\n ytd = 'ytd',\r\n y1 = 'y1',\r\n y2 = 'y2',\r\n y5 = 'y5',\r\n max = 'max',\r\n}\r\n\r\nexport enum QuoteFinancialAttachment {\r\n shortInterest = 'shortInterest',\r\n}\r\n\r\nexport const TIMEFRAME_SECONDS = {\r\n [TIMEFRAME.i1]: 60,\r\n [TIMEFRAME.i2]: 120,\r\n [TIMEFRAME.i3]: 180,\r\n [TIMEFRAME.i5]: 300,\r\n [TIMEFRAME.i10]: 600,\r\n [TIMEFRAME.i15]: 900,\r\n [TIMEFRAME.i30]: 1800,\r\n [TIMEFRAME.h]: 3600,\r\n [TIMEFRAME.h2]: 7200,\r\n [TIMEFRAME.h4]: 14400,\r\n [TIMEFRAME.d]: 86400,\r\n [TIMEFRAME.w]: 604800,\r\n [TIMEFRAME.m]: 2592000,\r\n}\r\n\r\nexport const CRYPTOS = {\r\n BTCUSD: 'BTCUSD',\r\n LTCUSD: 'LTCUSD',\r\n ETHUSD: 'ETHUSD',\r\n XRPUSD: 'XRPUSD',\r\n BCHUSD: 'BCHUSD',\r\n BTCEUR: 'BTCEUR',\r\n LTCEUR: 'LTCEUR',\r\n ETHEUR: 'ETHEUR',\r\n XRPEUR: 'XRPEUR',\r\n BCHEUR: 'BCHEUR',\r\n LTCBTC: 'LTCBTC',\r\n ETHBTC: 'ETHBTC',\r\n XRPBTC: 'XRPBTC',\r\n BCHBTC: 'BCHBTC',\r\n}\r\n\r\nexport enum SpecificChartFunctionality {\r\n default = 'default',\r\n quotePage = 'quotePage',\r\n quotePerf = 'quotePerf',\r\n quoteFinancials = 'quoteFinancials',\r\n chartPage = 'chartPage',\r\n smallIndex = 'smallIndex',\r\n offScreen = 'offScreen',\r\n forexPage = 'forexPage',\r\n futuresPage = 'futuresPage',\r\n cryptoPage = 'cryptoPage',\r\n}\r\n\r\nexport enum TextAlign {\r\n left = 'left',\r\n right = 'right',\r\n center = 'center',\r\n start = 'start',\r\n end = 'end',\r\n}\r\n\r\nexport enum TextBaseline {\r\n top = 'top',\r\n hanging_dont_use = 'hanging', // not supported - https://github.com/Automattic/node-canvas/wiki/Compatibility-Status#text-styles\r\n middle = 'middle',\r\n alphabetic = 'alphabetic',\r\n ideographic_dont_use = 'ideographic', // not supported - https://github.com/Automattic/node-canvas/wiki/Compatibility-Status#text-styles\r\n bottom = 'bottom',\r\n}\r\n\r\nexport enum ScaleType {\r\n Linear = 'linear',\r\n Percentage = 'percentage',\r\n Logarithmic = 'logarithmic',\r\n}\r\n\r\nexport enum QuotePollingIntervalInMs {\r\n Default = 2000,\r\n Free = 180000,\r\n Elite = Default,\r\n EliteStocksReduced = 60000,\r\n}\r\n\r\nexport const EXTRA_MARKET_BUFFER_MINUTES = 30\r\n\r\nexport const ScaleLabel = {\r\n [ScaleType.Linear]: 'Linear',\r\n [ScaleType.Percentage]: 'Percentage',\r\n [ScaleType.Logarithmic]: 'Logarithmic',\r\n}\r\n\r\nexport const PANE_HEIGHT_DEFAULT = {\r\n chart: 400,\r\n indicator: 120,\r\n}\r\n\r\nexport const INDICATOR_LABEL_HEIGHT = 24\r\n\r\nexport const MOBILE_BARS_TO_VIEW = 150 // 5 months of daily bars\r\n\r\nexport const MOBILE_VIEW_BREAKPOINT_WIDTH = 768\r\n\r\nexport const FREE_DATE_RANGES = ['m1', 'm3', 'm6', 'ytd', 'y1', 'y2', 'y5', 'max']\r\n\r\nexport const getTimeframeLabel = (timeframe: string) => {\r\n switch (timeframe) {\r\n case TIMEFRAME.i1:\r\n return '1 MIN'\r\n case TIMEFRAME.i2:\r\n return '2 MIN'\r\n case TIMEFRAME.i3:\r\n return '3 MIN'\r\n case TIMEFRAME.i5:\r\n return '5 MIN'\r\n case TIMEFRAME.i10:\r\n return '10 MIN'\r\n case TIMEFRAME.i15:\r\n return '15 MIN'\r\n case TIMEFRAME.i30:\r\n return '30 MIN'\r\n case TIMEFRAME.h:\r\n return '1 HR'\r\n case TIMEFRAME.h2:\r\n return '2 HR'\r\n case TIMEFRAME.h4:\r\n return '4 HR'\r\n case TIMEFRAME.d:\r\n return 'DAILY'\r\n case TIMEFRAME.w:\r\n return 'WEEKLY'\r\n case TIMEFRAME.m:\r\n return 'MONTHLY'\r\n default:\r\n return ''\r\n }\r\n}\r\n\r\nexport type ChartsPageQueryParams = {\r\n p: string\r\n t: string\r\n l: string\r\n r?: string\r\n i?: string\r\n sidebar?: string\r\n}\r\n\r\nexport type QuotePageQueryParams = {\r\n p?: string\r\n t: string\r\n r?: string\r\n i?: string\r\n ty?: QuotePageQueryChartTypes\r\n}\r\n\r\nexport enum QuotePageQueryChartTypes {\r\n l = 'l',\r\n c = 'c',\r\n cs = 'cs',\r\n hc = 'hc',\r\n ha = 'ha',\r\n o = 'o',\r\n p = 'p',\r\n}\r\n\r\nexport type ChartsOrQuotePageQueryParams = ChartsPageQueryParams | QuotePageQueryParams\r\n\r\nexport enum MacroTimeframe {\r\n // seconds = 'seconds',\r\n minutes = 'minutes',\r\n hours = 'hours',\r\n days = 'days',\r\n weeks = 'weeks',\r\n months = 'months',\r\n}\r\n\r\nexport const MicroMacroTimeframe = {\r\n [TIMEFRAME.i1]: {\r\n micro: 1,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i2]: {\r\n micro: 2,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i3]: {\r\n micro: 3,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i5]: {\r\n micro: 5,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i10]: {\r\n micro: 10,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i15]: {\r\n micro: 15,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.i30]: {\r\n micro: 30,\r\n macro: MacroTimeframe.minutes,\r\n },\r\n [TIMEFRAME.h]: {\r\n micro: 1,\r\n macro: MacroTimeframe.hours,\r\n },\r\n [TIMEFRAME.h2]: {\r\n micro: 2,\r\n macro: MacroTimeframe.hours,\r\n },\r\n [TIMEFRAME.h4]: {\r\n micro: 4,\r\n macro: MacroTimeframe.hours,\r\n },\r\n [TIMEFRAME.d]: {\r\n micro: 1,\r\n macro: MacroTimeframe.days,\r\n },\r\n [TIMEFRAME.w]: {\r\n micro: 1,\r\n macro: MacroTimeframe.weeks,\r\n },\r\n [TIMEFRAME.m]: {\r\n micro: 1,\r\n macro: MacroTimeframe.months,\r\n },\r\n}\r\n\r\nexport const MicroTimeframeRange = (Object.keys(MicroMacroTimeframe) as TIMEFRAME[]).reduce(\r\n (prev, curr) => ({\r\n ...prev,\r\n [MicroMacroTimeframe[curr].macro]: prev[MicroMacroTimeframe[curr].macro]\r\n ? [...prev[MicroMacroTimeframe[curr].macro], MicroMacroTimeframe[curr].micro]\r\n : [MicroMacroTimeframe[curr].micro],\r\n }),\r\n {} as { [key in MacroTimeframe]: number[] }\r\n)\r\n\r\ntype IRange = {\r\n from?: number\r\n to?: number\r\n}\r\n\r\nexport type IVisibility = {\r\n [key in MacroTimeframe]?: IRange\r\n}\r\n\r\nexport enum SetVisibilityTo {\r\n currentAndAbove,\r\n currentAndBelow,\r\n currentOnly,\r\n all,\r\n}\r\n\r\nexport const QUOTE_FETCH_EVENT = 'quoteFetchEvent'\r\n\r\n// Keep in sync with the clone in Website repo in shared/is-stock-fast-refresh-available.ts\r\nexport const PREMARKET_AFTERMARKET_HOURS = 2.5\r\n\r\nexport const CHART_ELEMENT_ID = 'chart'\r\n\r\nexport const CHART_SETTINGS_DIALOG_TEST_ID = 'chart-settings-dialog'\r\n","import {\r\n MOBILE_VIEW_BREAKPOINT_WIDTH,\r\n PREMARKET_AFTERMARKET_HOURS,\r\n SpecificChartFunctionality,\r\n} from './constants/common'\r\nimport { captureException, getIsSSr } from './utils/helpers'\r\n\r\nexport { getSanitizedTicker } from './utils/ticker-sanitizer'\r\n\r\nfunction getIsDstInNy(date: Date) {\r\n const dayNumber = date.getDate()\r\n const monthIndex = date.getMonth()\r\n const dayOfWeek = date.getDay()\r\n const previousSunday = dayNumber - dayOfWeek\r\n if (monthIndex < 2 || monthIndex > 10) {\r\n return false\r\n }\r\n if (monthIndex > 2 && monthIndex < 10) {\r\n return true\r\n }\r\n return monthIndex === 2 ? previousSunday >= 8 : previousSunday <= 0\r\n}\r\n\r\nclass Utils {\r\n static min(...args: T[]): number {\r\n if (typeof args[0] === 'number') {\r\n return args[0] < +args[1] ? args[0] : (args[1] as number)\r\n }\r\n let min = args[0][0]\r\n for (const arg of args) {\r\n for (const el of arg as number[]) {\r\n if (el < min) {\r\n min = el\r\n }\r\n }\r\n }\r\n return min\r\n }\r\n\r\n static max(...args: T[]): number {\r\n if (typeof args[0] === 'number') {\r\n return args[0] > +args[1] ? args[0] : (args[1] as number)\r\n }\r\n let max = args[0][0]\r\n for (const arg of args) {\r\n for (const el of arg as number[]) {\r\n if (el > max) {\r\n max = el\r\n }\r\n }\r\n }\r\n return max\r\n }\r\n\r\n static minMax(...args: number[][]) {\r\n let max\r\n let min = (max = args[0][0] as number)\r\n for (const arg of args) {\r\n for (const el of arg) {\r\n if (el < min) {\r\n min = el\r\n }\r\n if (el > max) {\r\n max = el\r\n }\r\n }\r\n }\r\n return [min, max]\r\n }\r\n\r\n static getScaleRatio() {\r\n return (typeof window !== 'undefined' && window.devicePixelRatio) || 1\r\n }\r\n\r\n static setSizeOnCanvasElement({\r\n canvasElement,\r\n width,\r\n height,\r\n ratio = Utils.getScaleRatio(),\r\n }: {\r\n canvasElement: HTMLCanvasElement | null\r\n width: number\r\n height: number\r\n ratio?: number\r\n }) {\r\n if (canvasElement) {\r\n canvasElement.width = width * ratio\r\n canvasElement.height = height * ratio\r\n canvasElement.style.width = width + 'px'\r\n canvasElement.style.height = height + 'px'\r\n }\r\n }\r\n\r\n static getQuoteDateTimestampOffsetInSeconds(referenceDate?: Date) {\r\n const date = referenceDate || new Date()\r\n const dateAsNY = new Date(\r\n date.getUTCFullYear(),\r\n date.getUTCMonth(),\r\n date.getUTCDate(),\r\n date.getUTCHours() - 5,\r\n date.getUTCMinutes(),\r\n date.getUTCSeconds()\r\n )\r\n const isDst = getIsDstInNy(dateAsNY)\r\n return (isDst ? 4 : 5) * 60 * 60\r\n }\r\n\r\n static convertLocalToNyTime(referenceDate: Date, addOffset: boolean) {\r\n const date = new Date(referenceDate)\r\n const quoteDateTimeOffsetInMs = Utils.getQuoteDateTimestampOffsetInSeconds(date) * 1000\r\n const localTimeOffsetInMs = date.getTimezoneOffset() * 60 * 1000\r\n const offsetDirectionCoefficient = addOffset ? 1 : -1\r\n date.setTime(date.getTime() + (localTimeOffsetInMs - quoteDateTimeOffsetInMs) * offsetDirectionCoefficient)\r\n return date\r\n }\r\n\r\n // Keep in sync with the clone in Website repo in shared/isStockFastRefreshAvailable.ts\r\n static isStockFastRefreshAvailable(hasPremarket = true, hasAftermarket = true, bufferMinutes = 30) {\r\n const MARKET_START = { hours: 9, minutes: 30 }\r\n const MARKET_END = { hours: 16, minutes: 0 }\r\n const getMinutes = ({ hours, minutes }: { hours: number; minutes: number }) => hours * 60 + minutes\r\n\r\n const date = convertLocalToNyTime(new Date(), true)\r\n const dayOfWeek = date.getDay()\r\n const currentDayMinutes = date.getHours() * 60 + date.getMinutes()\r\n\r\n const premarketMinutes = hasPremarket ? PREMARKET_AFTERMARKET_HOURS * 60 : 0\r\n const aftermarketMinutes = hasAftermarket ? PREMARKET_AFTERMARKET_HOURS * 60 : 0\r\n\r\n const isWeekend = dayOfWeek === 0 || dayOfWeek === 6\r\n const isOpen = getMinutes(MARKET_START) - premarketMinutes - bufferMinutes <= currentDayMinutes\r\n const isClosed = getMinutes(MARKET_END) + aftermarketMinutes + bufferMinutes <= currentDayMinutes\r\n return !isWeekend && isOpen && !isClosed\r\n }\r\n\r\n static dateFromUnixTimestamp(timestamp: number) {\r\n /*\r\n * Passing 0 as a param is needed in order to setUTCSeconds work properly.\r\n * The function adds seconds to the date instance if it exceeds 60.\r\n * For more info see the docs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds\r\n * */\r\n const date = new Date(0)\r\n date.setUTCSeconds(timestamp)\r\n return Utils.convertLocalToNyTime(date, true)\r\n }\r\n\r\n static dateStringFromDate(date: Date) {\r\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(\r\n 2,\r\n '0'\r\n )}`\r\n }\r\n\r\n static dateFromDateString(dateString: string) {\r\n const [yyyy, mm, dd] = dateString.split('-')\r\n\r\n const date = new Date(Number.parseInt(yyyy), Number.parseInt(mm) - 1, Number.parseInt(dd))\r\n if (Number.isNaN(date.getTime())) {\r\n captureException(new Error('Invalid Date'), { extra: { date, dateString } })\r\n }\r\n\r\n return date\r\n }\r\n\r\n static isMobile(testTouchPoints?: boolean) {\r\n if (getIsSSr()) return false\r\n let isMobileOs = false\r\n\r\n // New iOS versions no longer report iPad in user agent\r\n if (navigator.userAgent.indexOf('Macintosh') > -1) {\r\n try {\r\n document.createEvent('TouchEvent')\r\n isMobileOs = true\r\n } catch {}\r\n } else {\r\n isMobileOs = !!navigator.userAgent.match(\r\n /\\b(Android|webOS|i(?:Phone|Pad|Pod)|BlackBerry|Windows (?:Phone|Mobile))\\b/i\r\n )\r\n }\r\n\r\n if (testTouchPoints) {\r\n try {\r\n return (\r\n isMobileOs &&\r\n (window.navigator.msMaxTouchPoints ||\r\n window.navigator.maxTouchPoints ||\r\n 'ontouchstart' in document.createElement('div'))\r\n )\r\n } catch {}\r\n }\r\n\r\n return isMobileOs\r\n }\r\n\r\n static isIPad() {\r\n const matchesIPad = navigator.userAgent.match(/iPad/i)\r\n const matchesIPhone = navigator.userAgent.match(/iPhone/i)\r\n const matchesIPod = navigator.userAgent.match(/iPod/i)\r\n const matchesIOSLike = navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints > 0\r\n\r\n return (matchesIOSLike && !matchesIPhone && !matchesIPod) || matchesIPad\r\n }\r\n\r\n static getCookie(name: string) {\r\n const re = new RegExp('(?:(?:^|.*;\\\\s*)' + name + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$')\r\n return document.cookie.replace(re, '$1')\r\n }\r\n\r\n static setCookie(name: string, value: string, expires: Date) {\r\n let cookie = name + '=' + value + '; expires=' + expires.toUTCString()\r\n if (document.location.hostname !== 'localhost') {\r\n cookie += '; domain=.finviz.com'\r\n }\r\n document.cookie = cookie\r\n }\r\n}\r\n\r\nexport default Utils\r\nexport const convertLocalToNyTime = Utils.convertLocalToNyTime\r\nexport const dateFromUnixTimestamp = Utils.dateFromUnixTimestamp\r\nexport const dateStringFromDate = Utils.dateStringFromDate\r\nexport const dateFromDateString = Utils.dateFromDateString\r\n\r\nexport function getFullscreenStatus(): boolean {\r\n return (\r\n document.fullscreenElement ??\r\n document.webkitFullscreenElement ??\r\n document.mozFullScreenElement ??\r\n document.msFullscreenElement ??\r\n false\r\n )\r\n}\r\n\r\nexport function getRequestFullscreen(element: HTMLElement) {\r\n return (\r\n element.requestFullscreen ??\r\n element.webkitRequestFullScreen ??\r\n element.mozRequestFullScreen ??\r\n element.msRequestFullscreen\r\n )\r\n}\r\n\r\nexport function getExitFullscreen() {\r\n return (\r\n document.exitFullscreen ?? document.webkitExitFullscreen ?? document.mozExitFullScreen ?? document.msExitFullscreen\r\n )\r\n}\r\n\r\nexport function ready(fn: () => void) {\r\n if (document.readyState !== 'loading') {\r\n fn()\r\n return\r\n }\r\n\r\n document.addEventListener('DOMContentLoaded', fn)\r\n}\r\n\r\nexport function getChartsDimensions(chartElementId: string) {\r\n const PADDING = 2 // Border widths\r\n const containerElement = document.getElementById(chartElementId)\r\n\r\n const box = containerElement?.getBoundingClientRect()\r\n\r\n return {\r\n width: Math.max((box?.width ?? 0) - PADDING, 0),\r\n height: Math.max((box?.height ?? 0) - PADDING, 0),\r\n }\r\n}\r\n\r\nexport function getIsMobileScreenSize() {\r\n return window.innerWidth < MOBILE_VIEW_BREAKPOINT_WIDTH\r\n}\r\n\r\nexport function getIsMobilePortrait(isMobile?: boolean) {\r\n if (isMobile ?? Utils.isMobile()) {\r\n return window.orientation % 180 === 0\r\n }\r\n return false\r\n}\r\n\r\nexport function numberToStringWithUnitsSuffix(value: number) {\r\n let suffix = ''\r\n if (value >= 1000000000) {\r\n value /= 1000000000\r\n suffix = 'B'\r\n } else if (value >= 1000000) {\r\n value /= 1000000\r\n suffix = 'M'\r\n } else if (value >= 1000) {\r\n value /= 1000\r\n suffix = 'K'\r\n }\r\n\r\n return value.toFixed(2) + suffix\r\n}\r\n\r\nexport function isRedesignEnabled() {\r\n return typeof window !== 'undefined' && window.FinvizSettings?.hasRedesignEnabled\r\n}\r\n\r\nexport function isRedesignedPage(\r\n obj: { specificChartFunctionality?: SpecificChartFunctionality | null },\r\n matchingPages = [\r\n SpecificChartFunctionality.forexPage,\r\n SpecificChartFunctionality.futuresPage,\r\n SpecificChartFunctionality.cryptoPage,\r\n ]\r\n) {\r\n const isQuotePage = obj.specificChartFunctionality === SpecificChartFunctionality.quotePage\r\n const isQuoteFinancials = obj.specificChartFunctionality === SpecificChartFunctionality.quoteFinancials\r\n\r\n return (\r\n (isRedesignEnabled() && matchingPages.includes(obj.specificChartFunctionality!)) ||\r\n // Legacy design on quote uses redesigned elements (page header + chart controls)\r\n isQuotePage ||\r\n isQuoteFinancials\r\n )\r\n}\r\n","import { EmptyObject, ObjectHash } from '../../types/shared'\r\n\r\nexport function getRoundedString({ number, numOfDecimalPlaces }: { number: number; numOfDecimalPlaces: number }) {\r\n const precision = Math.pow(10, numOfDecimalPlaces)\r\n return String(Math.round(number * precision) / precision)\r\n}\r\n\r\nexport function getIsSSr() {\r\n return typeof process !== 'undefined' && !!process?.env.IS_OFFSCREEN_RENDERER\r\n}\r\n\r\nexport function isValidHexColor(color: string) {\r\n const regex = /^#([\\da-f]{3}){1,2}$|^#([\\da-f]{4}){1,2}$/i\r\n return !!color && regex.test(color)\r\n}\r\n\r\nexport function getParsedIntegersFromPeriodString(periodString: string) {\r\n const periodParts = periodString.split(',')\r\n return periodParts.map((part) => Number.parseInt(part, 10))\r\n}\r\n\r\nexport function captureException(exception: Error, captureContext?: { extra: ObjectHash }) {\r\n if (process.env.NODE_ENV === 'development' || process.env.IS_E2E_TESTING) {\r\n console.error(exception)\r\n } else if (process.env.IS_OFFSCREEN_RENDERER) {\r\n import('@sentry/node').then((client) => {\r\n client.captureException(exception, captureContext)\r\n })\r\n } else {\r\n window.Sentry.captureException(exception, captureContext)\r\n }\r\n}\r\n\r\nexport function isPositiveFloat(value: string | number) {\r\n const parsedNumber = Number.parseFloat(`${value}`)\r\n return !Number.isNaN(parsedNumber) && isFinite(parsedNumber) && parsedNumber > 0\r\n}\r\n\r\nexport function isPositiveInteger(value: string | number) {\r\n const string = `${value}`\r\n return isPositiveFloat(value) && Number.parseInt(string, 10) === Number.parseFloat(string)\r\n}\r\n\r\nexport function isInRange({\r\n value,\r\n min = Number.MIN_SAFE_INTEGER,\r\n max = Number.MAX_SAFE_INTEGER,\r\n}: {\r\n value: string | number\r\n min?: number\r\n max?: number\r\n}) {\r\n const parsedNumber = Number.parseFloat(`${value}`)\r\n return !Number.isNaN(parsedNumber) && parsedNumber >= min && parsedNumber <= max\r\n}\r\n\r\nexport function tryJsonParse(json: string | null = '') {\r\n try {\r\n return JSON.parse(json ?? '') as Result\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nexport function getValueInRange({ value, min, max }: { value: number; min: number; max: number }) {\r\n return Math.min(Math.max(value, min), max)\r\n}\r\n\r\nexport function isPrimaryClick(e: React.Touch | React.TouchEvent | React.MouseEvent) {\r\n // cypress trigger mouseevent has button: undefined if button option isn't explicitly specified\r\n // as cy.get('.target').trigger('mousedown', { button: 0 })\r\n if (e.hasOwnProperty('button') && (e as unknown as MouseEvent).button !== undefined) {\r\n return (e as unknown as MouseEvent).button === 0\r\n } else {\r\n return true\r\n }\r\n}\r\n\r\n// this function is used to fix the issue with circular reference when stringifying an object using JSON.stringify\r\nexport function getJSONReplacerFunc() {\r\n const visited = new WeakSet()\r\n return (key: string, value: any) => {\r\n if (typeof value === 'object' && value !== null) {\r\n if (visited.has(value)) {\r\n return\r\n }\r\n visited.add(value)\r\n }\r\n return value\r\n }\r\n}\r\n\r\n// This is a duplicate from Website repo which is accessible on window.FLibs but this doesn't work on SSR charts\r\nexport const formatDateToStringUS = (date: Date, options?: Intl.DateTimeFormatOptions | undefined) =>\r\n date.toLocaleDateString('en-US', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n ...options,\r\n })\r\n\r\n// randomUUID source: https://stackoverflow.com/questions/105034/how-do-i-create-a-guid-uuid/2117523#2117523\r\nexport function randomUUID() {\r\n return `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, (substring) => {\r\n const c = Number(substring)\r\n return (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)\r\n })\r\n}\r\n\r\nexport function getUuid() {\r\n return window.crypto?.randomUUID?.() ?? randomUUID()\r\n}\r\n\r\n// duplicate from Website/js/app/header/utils.ts , will be refactored in next PR\r\nexport function getEarningsDateSuffix(date: Date) {\r\n const hours = date.getHours()\r\n\r\n if (hours <= 9) {\r\n return 'BMO'\r\n } else if (hours >= 16) {\r\n return 'AMC'\r\n }\r\n\r\n return ''\r\n}\r\n\r\nexport function isValidTickerString(ticker: string) {\r\n const regex = /^@?[a-z0-9](?:[a-z0-9]*[-_]?[a-z0-9]+)?$/\r\n return regex.test(ticker.toLowerCase())\r\n}\r\n","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * @fileOverview Wrapper component to make charts adapt to the size of parent * DOM\n */\nimport clsx from 'clsx';\nimport React, { forwardRef, cloneElement, useState, useImperativeHandle, useRef, useEffect, useMemo, useCallback } from 'react';\nimport throttle from 'lodash/throttle';\nimport { isElement } from 'react-is';\nimport { isPercent } from '../util/DataUtils';\nimport { warn } from '../util/LogUtils';\nimport { getDisplayName } from '../util/ReactUtils';\nexport var ResponsiveContainer = /*#__PURE__*/forwardRef(function (_ref, ref) {\n var aspect = _ref.aspect,\n _ref$initialDimension = _ref.initialDimension,\n initialDimension = _ref$initialDimension === void 0 ? {\n width: -1,\n height: -1\n } : _ref$initialDimension,\n _ref$width = _ref.width,\n width = _ref$width === void 0 ? '100%' : _ref$width,\n _ref$height = _ref.height,\n height = _ref$height === void 0 ? '100%' : _ref$height,\n _ref$minWidth = _ref.minWidth,\n minWidth = _ref$minWidth === void 0 ? 0 : _ref$minWidth,\n minHeight = _ref.minHeight,\n maxHeight = _ref.maxHeight,\n children = _ref.children,\n _ref$debounce = _ref.debounce,\n debounce = _ref$debounce === void 0 ? 0 : _ref$debounce,\n id = _ref.id,\n className = _ref.className,\n onResize = _ref.onResize,\n _ref$style = _ref.style,\n style = _ref$style === void 0 ? {} : _ref$style;\n var containerRef = useRef(null);\n var onResizeRef = useRef();\n onResizeRef.current = onResize;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n useImperativeHandle(ref, function () {\n return containerRef;\n });\n var _useState = useState({\n containerWidth: initialDimension.width,\n containerHeight: initialDimension.height\n }),\n _useState2 = _slicedToArray(_useState, 2),\n sizes = _useState2[0],\n setSizes = _useState2[1];\n var setContainerSize = useCallback(function (newWidth, newHeight) {\n setSizes(function (prevState) {\n var roundedWidth = Math.round(newWidth);\n var roundedHeight = Math.round(newHeight);\n if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {\n return prevState;\n }\n return {\n containerWidth: roundedWidth,\n containerHeight: roundedHeight\n };\n });\n }, []);\n useEffect(function () {\n var callback = function callback(entries) {\n var _onResizeRef$current;\n var _entries$0$contentRec = entries[0].contentRect,\n containerWidth = _entries$0$contentRec.width,\n containerHeight = _entries$0$contentRec.height;\n setContainerSize(containerWidth, containerHeight);\n (_onResizeRef$current = onResizeRef.current) === null || _onResizeRef$current === void 0 || _onResizeRef$current.call(onResizeRef, containerWidth, containerHeight);\n };\n if (debounce > 0) {\n callback = throttle(callback, debounce, {\n trailing: true,\n leading: false\n });\n }\n var observer = new ResizeObserver(callback);\n var _containerRef$current = containerRef.current.getBoundingClientRect(),\n containerWidth = _containerRef$current.width,\n containerHeight = _containerRef$current.height;\n setContainerSize(containerWidth, containerHeight);\n observer.observe(containerRef.current);\n return function () {\n observer.disconnect();\n };\n }, [setContainerSize, debounce]);\n var chartContent = useMemo(function () {\n var containerWidth = sizes.containerWidth,\n containerHeight = sizes.containerHeight;\n if (containerWidth < 0 || containerHeight < 0) {\n return null;\n }\n warn(isPercent(width) || isPercent(height), \"The width(%s) and height(%s) are both fixed numbers,\\n maybe you don't need to use a ResponsiveContainer.\", width, height);\n warn(!aspect || aspect > 0, 'The aspect(%s) must be greater than zero.', aspect);\n var calculatedWidth = isPercent(width) ? containerWidth : width;\n var calculatedHeight = isPercent(height) ? containerHeight : height;\n if (aspect && aspect > 0) {\n // Preserve the desired aspect ratio\n if (calculatedWidth) {\n // Will default to using width for aspect ratio\n calculatedHeight = calculatedWidth / aspect;\n } else if (calculatedHeight) {\n // But we should also take height into consideration\n calculatedWidth = calculatedHeight * aspect;\n }\n\n // if maxHeight is set, overwrite if calculatedHeight is greater than maxHeight\n if (maxHeight && calculatedHeight > maxHeight) {\n calculatedHeight = maxHeight;\n }\n }\n warn(calculatedWidth > 0 || calculatedHeight > 0, \"The width(%s) and height(%s) of chart should be greater than 0,\\n please check the style of container, or the props width(%s) and height(%s),\\n or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\\n height and width.\", calculatedWidth, calculatedHeight, width, height, minWidth, minHeight, aspect);\n var isCharts = !Array.isArray(children) && isElement(children) && getDisplayName(children.type).endsWith('Chart');\n return React.Children.map(children, function (child) {\n if (isElement(child)) {\n return /*#__PURE__*/cloneElement(child, _objectSpread({\n width: calculatedWidth,\n height: calculatedHeight\n }, isCharts ? {\n style: _objectSpread({\n height: '100%',\n width: '100%',\n maxHeight: calculatedHeight,\n maxWidth: calculatedWidth\n }, child.props.style)\n } : {}));\n }\n return child;\n });\n }, [aspect, children, height, maxHeight, minHeight, minWidth, sizes, width]);\n return /*#__PURE__*/React.createElement(\"div\", {\n id: id ? \"\".concat(id) : undefined,\n className: clsx('recharts-responsive-container', className),\n style: _objectSpread(_objectSpread({}, style), {}, {\n width: width,\n height: height,\n minWidth: minWidth,\n minHeight: minHeight,\n maxHeight: maxHeight\n }),\n ref: containerRef\n }, chartContent);\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","SubMenuTabs","items","_ref2","href","isActive","reloadDocument","as","Link","to","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","_sortedData$value2","_sortedData2","getIsCompact","numOfCols","barWidth","min","innerWidth","getHeatmapClassNames","arguments","TABLE_ROW_HIGHT","useFinancialsTablePersistScrollPosition","categoryAreasCounts","dataKeys","previousSettings","usePrevious","widgetSettingsSectionElement","document","getElementById","financialsTables","getElementsByClassName","widgetSettingsSectionElementTopPosition","getBoundingClientRect","top","lastAbsDiffInPx","Array","from","forEach","financialTableElement","absDiffInPx","areas","sign","dataKey","shift","scrollTo","scrollX","FINANCIAL_MENU_TABS","QuoteRoutes","Dividends","Earnings","Revenue","Forecast","getFinancialMenuTabs","searchParams","decodeQueryString","FINANCIALS_SECTION_LABELS","encodeQueryString","ty","QuoteFinancialsTabMenu","SubMenu","leftContent","rightContent","isRedesignEnabled","QuoteStickySubMenu","FONT_SIZE","XXS","XS","S","M","L","XXL","XXXL","LINE_HEIGHT","PADDING","XXXS","MARGIN","CHART_MARGIN","XL","SETTINGS_HEIGHT","TICKER_TIMEFRAME_CHANGE_HEIGHT","OFFSET","MONTHS","ChartEditorEnum","LayoutType","CanvasElementType","ChartElementType","IndicatorType","OverlayType","ChartEventDbType","ChartEventType","ChartEventBadgeType","ChartEventLabels","Split","EarningsPositive","EarningsNegative","EarningsNeutral","EarningsFuture","LAYOUTS","rows","count","gridAreas","SORT_DIRECTION","ASC","DESC","TIMEFRAME","TIMEFRAMES_WITH_PRE_MARKET","i1","i2","i3","i5","IntradayTimeframeInterval","i10","i15","i30","h","h2","h4","TimeframeLabelShort","d","w","m","DateRangeType","QuoteFinancialAttachment","TIMEFRAME_SECONDS","CRYPTOS","BTCUSD","LTCUSD","ETHUSD","XRPUSD","BCHUSD","BTCEUR","LTCEUR","ETHEUR","XRPEUR","BCHEUR","LTCBTC","ETHBTC","XRPBTC","BCHBTC","SpecificChartFunctionality","TextAlign","TextBaseline","ScaleType","QuotePollingIntervalInMs","EXTRA_MARKET_BUFFER_MINUTES","ScaleLabel","Linear","Percentage","Logarithmic","PANE_HEIGHT_DEFAULT","chart","indicator","INDICATOR_LABEL_HEIGHT","MOBILE_BARS_TO_VIEW","MOBILE_VIEW_BREAKPOINT_WIDTH","FREE_DATE_RANGES","getTimeframeLabel","timeframe","QuotePageQueryChartTypes","MacroTimeframe","MicroMacroTimeframe","micro","macro","minutes","hours","days","weeks","months","MicroTimeframeRange","Object","keys","curr","SetVisibilityTo","QUOTE_FETCH_EVENT","PREMARKET_AFTERMARKET_HOURS","CHART_ELEMENT_ID","CHART_SETTINGS_DIALOG_TEST_ID","Utils","_len","args","_key","arg","el","max","_len2","_key2","minMax","_len3","_key3","getScaleRatio","devicePixelRatio","setSizeOnCanvasElement","canvasElement","width","height","ratio","style","getQuoteDateTimestampOffsetInSeconds","referenceDate","date","Date","dayNumber","getDate","monthIndex","getMonth","previousSunday","getDay","getIsDstInNy","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","convertLocalToNyTime","addOffset","quoteDateTimeOffsetInMs","localTimeOffsetInMs","getTimezoneOffset","offsetDirectionCoefficient","setTime","getTime","isStockFastRefreshAvailable","hasPremarket","hasAftermarket","bufferMinutes","getMinutes","dayOfWeek","currentDayMinutes","getHours","premarketMinutes","aftermarketMinutes","isWeekend","isOpen","isClosed","dateFromUnixTimestamp","timestamp","setUTCSeconds","dateStringFromDate","getFullYear","String","padStart","dateFromDateString","dateString","yyyy","mm","dd","split","isNaN","captureException","Error","extra","isMobile","testTouchPoints","getIsSSr","isMobileOs","navigator","userAgent","indexOf","createEvent","match","msMaxTouchPoints","maxTouchPoints","createElement","isIPad","matchesIPad","matchesIPhone","matchesIPod","name","re","RegExp","cookie","replace","setCookie","expires","toUTCString","location","hostname","getFullscreenStatus","_ref3","_ref4","_ref5","_document$fullscreenE","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","getRequestFullscreen","element","_ref6","_ref7","_element$requestFulls","requestFullscreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen","getExitFullscreen","_ref8","_ref9","_document$exitFullscr","exitFullscreen","webkitExitFullscreen","mozExitFullScreen","msExitFullscreen","ready","fn","readyState","addEventListener","getChartsDimensions","chartElementId","_box$width","_box$height","containerElement","box","getIsMobileScreenSize","getIsMobilePortrait","orientation","numberToStringWithUnitsSuffix","suffix","toFixed","_window$FinvizSetting","FinvizSettings","hasRedesignEnabled","isRedesignedPage","obj","matchingPages","forexPage","futuresPage","cryptoPage","isQuotePage","specificChartFunctionality","quotePage","isQuoteFinancials","quoteFinancials","includes","getRoundedString","number","numOfDecimalPlaces","precision","pow","round","process","getParsedIntegersFromPeriodString","periodString","part","exception","captureContext","Sentry","isPositiveFloat","parsedNumber","parseFloat","isFinite","isPositiveInteger","string","isInRange","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","getValueInRange","isPrimaryClick","e","hasOwnProperty","button","getJSONReplacerFunc","visited","WeakSet","key","has","add","formatDateToStringUS","options","toLocaleDateString","day","month","getUuid","_window$crypto$random","_window$crypto","_window$crypto$random2","crypto","randomUUID","substring","c","getRandomValues","Uint8Array","toString","getEarningsDateSuffix","_typeof","o","Symbol","iterator","constructor","prototype","ownKeys","r","t","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","input","hint","prim","toPrimitive","res","TypeError","_toPrimitive","_toPropertyKey","configurable","writable","_slicedToArray","arr","isArray","_arrayWithHoles","l","n","u","f","next","done","_iterableToArrayLimit","minLen","_arrayLikeToArray","slice","test","_unsupportedIterableToArray","_nonIterableRest","len","arr2","ResponsiveContainer","forwardRef","ref","aspect","_ref$initialDimension","initialDimension","_ref$width","_ref$height","_ref$minWidth","minWidth","minHeight","maxHeight","_ref$debounce","debounce","onResize","_ref$style","containerRef","useRef","onResizeRef","current","useImperativeHandle","_useState2","useState","containerWidth","containerHeight","sizes","setSizes","setContainerSize","useCallback","newWidth","newHeight","prevState","roundedWidth","roundedHeight","useEffect","callback","entries","_onResizeRef$current","_entries$0$contentRec","contentRect","trailing","leading","observer","ResizeObserver","_containerRef$current","observe","disconnect","chartContent","useMemo","calculatedWidth","calculatedHeight","isCharts","isElement","endsWith","cloneElement","maxWidth","concat"],"sourceRoot":""}