{"version":3,"file":"4625.04f92dc0.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/FinancialsTableStickyColumnWrapper.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"],"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 } from '../button'\r\n\r\ninterface Props {\r\n items: Array<{ label: string; href: string; isActive: boolean; reloadDocument?: boolean }>\r\n}\r\n\r\nexport function SubMenuTabs({ items }: 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 } = 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 classNames from 'classnames'\r\nimport throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n children: React.ReactElement\r\n numOfTableRows: number\r\n className?: string\r\n}\r\n\r\nenum ShadowPosition {\r\n none,\r\n left,\r\n right,\r\n leftAndRight,\r\n}\r\n\r\ninterface TableScrollShadowProps {\r\n side: ShadowPosition.left | ShadowPosition.right\r\n position: { top?: number; left?: number; right?: number }\r\n height: number\r\n className?: string\r\n isVisible: boolean\r\n}\r\n\r\nfunction TableScrollShadow({ className, side, position, height, isVisible }: TableScrollShadowProps) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nconst TABLE_SHADOW_MARGIN = 1 // margins to prevent covering borders with the shadow\r\n\r\nexport function FinancialsTableStickyColumnWrapper({ children, className, numOfTableRows }: Props) {\r\n const stickyRef = React.useRef(null)\r\n const [shadowPosition, setShadowPosition] = React.useState(ShadowPosition.none)\r\n const [shadowDimensions, setShadowDimensions] = React.useState({ left: 0, top: 0, height: 0 })\r\n\r\n React.useEffect(() => {\r\n const stickyElement = stickyRef.current\r\n if (!stickyElement) return\r\n\r\n const onScroll = throttle(function () {\r\n const stickyElement = stickyRef.current\r\n if (!stickyElement) return\r\n\r\n const stickyElementScrollLeft = Math.ceil(stickyElement.scrollLeft)\r\n\r\n let newShadowPosition = ShadowPosition.none\r\n const hasScrollSpaceToLeft = stickyElementScrollLeft > 0\r\n const hasScrollSpaceToRight =\r\n Math.ceil(stickyElement.offsetWidth) + stickyElementScrollLeft < stickyElement.scrollWidth\r\n if (hasScrollSpaceToLeft && hasScrollSpaceToRight) {\r\n newShadowPosition = ShadowPosition.leftAndRight\r\n } else if (hasScrollSpaceToLeft) {\r\n newShadowPosition = ShadowPosition.left\r\n } else if (hasScrollSpaceToRight) {\r\n newShadowPosition = ShadowPosition.right\r\n }\r\n\r\n setShadowPosition(newShadowPosition)\r\n }, 100)\r\n\r\n onScroll()\r\n\r\n stickyElement.scrollTo({\r\n left: stickyElement.scrollWidth,\r\n })\r\n\r\n stickyElement.addEventListener('scroll', onScroll)\r\n window.addEventListener('resize', onScroll)\r\n\r\n return () => {\r\n stickyElement.removeEventListener('scroll', onScroll)\r\n window.removeEventListener('resize', onScroll)\r\n }\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n const financialsTable = stickyRef.current?.querySelector('table.financials-table')\r\n const headHeight = financialsTable?.querySelector('thead')?.clientHeight ?? 0\r\n const firstColumnWidth = financialsTable?.querySelector('tr > td')?.clientWidth ?? 0\r\n\r\n setShadowDimensions({\r\n left: Math.ceil(firstColumnWidth),\r\n top: headHeight + TABLE_SHADOW_MARGIN,\r\n height: (financialsTable?.clientHeight ?? 0) - headHeight - 2 * TABLE_SHADOW_MARGIN,\r\n })\r\n }, [numOfTableRows])\r\n\r\n const { radiusCropFillerStyle, shadowLeftStyle, shadowRightStyle } = React.useMemo(\r\n () => ({\r\n radiusCropFillerStyle: {\r\n top: shadowDimensions.top - TABLE_SHADOW_MARGIN,\r\n height: shadowDimensions.height + 2 * TABLE_SHADOW_MARGIN,\r\n },\r\n shadowLeftStyle: {\r\n top: shadowDimensions.top,\r\n left: shadowDimensions.left,\r\n },\r\n shadowRightStyle: {\r\n top: shadowDimensions.top,\r\n right: 0,\r\n },\r\n }),\r\n [shadowDimensions]\r\n )\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {children}\r\n
\r\n \r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport FinancialsTable from './FinancialsTable'\r\nimport { FinancialsTableStickyColumnWrapper } from './FinancialsTableStickyColumnWrapper'\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 stickyColumnWrapperClassName?: string\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 stickyColumnWrapperClassName,\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]\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"],"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","TableBody","onMouseDown","TableRow","classNames","TableCell","hasLeading","align","TableAlign","Left","Checkbox","readOnly","checked","column","_column$getColumnClas","getColumnClassName","call","renderColumn","item","index","array","FinancialsTable","tableHead","tableFooter","isTableFixed","Table","row","_row$id","ShadowPosition","TableScrollShadow","side","position","height","isVisible","left","right","style","TABLE_SHADOW_MARGIN","FinancialsTableStickyColumnWrapper","numOfTableRows","stickyRef","shadowPosition","setShadowPosition","none","shadowDimensions","setShadowDimensions","top","stickyElement","current","onScroll","throttle","stickyElementScrollLeft","Math","ceil","scrollLeft","newShadowPosition","hasScrollSpaceToLeft","hasScrollSpaceToRight","offsetWidth","scrollWidth","leftAndRight","scrollTo","addEventListener","removeEventListener","_stickyRef$current","_financialsTable$quer","_financialsTable$quer2","_financialsTable$quer3","_financialsTable$quer4","_financialsTable$clie","financialsTable","querySelector","headHeight","clientHeight","firstColumnWidth","clientWidth","radiusCropFillerStyle","shadowLeftStyle","shadowRightStyle","includes","ref","FinancialsWidget","_data$0$values$length","_data$","stickyColumnWrapperClassName","header","hasStickyColumnWrapper","values","getYoYData","sortedData","sort","a","b","Number","parseInt","year","reduce","acc","i","_sortedData$value","_sortedData","prev","change","changePct","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","lastAbsDiffInPx","Array","from","forEach","financialTableElement","absDiffInPx","areas","sign","dataKey","shift","scrollX","FINANCIAL_MENU_TABS","QuoteRoutes","Dividends","Earnings","Revenue","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","ratio","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","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","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"],"sourceRoot":""}