{"version":3,"file":"6050.75b1e490.js","mappings":"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","sources":["webpack://@finviz/website/./js/main/components/ChipSwitch.tsx","webpack://@finviz/website/./js/main/components/SubMenu/SubMenu.tsx","webpack://@finviz/website/./js/main/components/SubMenu/SubMenuTabs.tsx","webpack://@finviz/website/./js/main/components/chart/CartesianGrid.tsx","webpack://@finviz/website/./js/main/components/chart/XAxis.tsx","webpack://@finviz/website/./js/main/components/chart/YAxis.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/components/keystats/KeyStat.tsx","webpack://@finviz/website/./js/main/components/keystats/KeyStats.tsx","webpack://@finviz/website/./js/main/modules/earnings-common/charts/PerformanceTooltip.tsx","webpack://@finviz/website/./js/main/modules/earnings-common/charts/utils.ts","webpack://@finviz/website/./js/main/modules/earnings-common/charts/RedGreenDot.tsx","webpack://@finviz/website/./js/main/modules/earnings-common/charts/EarningsChart.tsx","webpack://@finviz/website/./js/main/modules/earnings-common/useTableColumns.tsx","webpack://@finviz/website/./js/main/modules/earnings-common/EarningsWidget.tsx","webpack://@finviz/website/./js/main/modules/earnings-common/WidgetHeader.tsx","webpack://@finviz/website/./js/main/modules/earnings-common/constants.ts","webpack://@finviz/website/./js/main/modules/earnings-common/types.ts","webpack://@finviz/website/./js/main/modules/earnings-common/utils.ts","webpack://@finviz/website/./js/main/modules/earnings/HighlightedBox.tsx","webpack://@finviz/website/./js/main/modules/earnings/constants.ts","webpack://@finviz/website/./js/main/modules/earnings/types.ts","webpack://@finviz/website/./js/main/modules/earnings/RsiValue.tsx","webpack://@finviz/website/./js/main/modules/earnings/utils.tsx","webpack://@finviz/website/./js/main/modules/quote/components/QuoteFinancialsTabMenu.tsx","webpack://@finviz/website/./js/main/modules/quote/components/QuoteStickySubMenu.tsx","webpack://@finviz/website/../node_modules/date-fns/esm/parseISO/index.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.disabled && !child.props.active,\r\n '!text-gray-800 dark:!text-white': !child.props.disabled && child.props.active,\r\n '!text-gray-400 ': child.props.disabled && !child.props.active,\r\n '!text-gray-400 !bg-gray-200 !bg-opacity-30 !border-gray-100 dark:!bg-gray-600 dark:!border-gray-500':\r\n child.props.disabled && 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 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 middleContent?: React.ReactNode\r\n rightContent?: React.ReactNode\r\n}\r\n\r\nexport function SubMenu({ leftContent, middleContent, rightContent, ...props }: Props) {\r\n return (\r\n
\r\n
\r\n \r\n {leftContent}\r\n
\r\n {middleContent &&
{middleContent}
}\r\n
{rightContent}
\r\n
\r\n \r\n )\r\n}\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 classNames from 'classnames'\r\nimport * as React from 'react'\r\nimport { CartesianGrid as RechartsCartesianGrid } from 'recharts'\r\n\r\nexport function CartesianGrid({\r\n vertical = false,\r\n ...props\r\n}: React.PropsWithoutRef>) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nCartesianGrid.displayName = RechartsCartesianGrid.displayName\r\n","import { format } from 'date-fns'\r\nimport { XAxis as RechartsXAxis } from 'recharts'\r\n\r\nimport { getDate } from '../../../app/header/utils'\r\n\r\nexport const DATE_FORMAT_MMMdd = 'MMM dd'\r\n\r\nconst TICK_STYLE = {\r\n fontSize: 10,\r\n fontWeight: 400, // Different from YAxis\r\n fill: '',\r\n}\r\n\r\nexport function dateAxisFormatter({\r\n value,\r\n outFormat,\r\n parseAsNY = true,\r\n}: {\r\n value: any\r\n outFormat: string\r\n parseAsNY?: boolean\r\n}) {\r\n if (!Number.isFinite(new Date(value).getTime())) return ''\r\n\r\n const date = parseAsNY ? getDate(value) : new Date(value)\r\n return format(date, outFormat)\r\n}\r\n\r\nexport class XAxis extends RechartsXAxis {\r\n static defaultProps = {\r\n ...RechartsXAxis.defaultProps,\r\n className: 'fill-gray-500 dark:fill-gray-300',\r\n tickLine: false,\r\n axisLine: false,\r\n dy: 5,\r\n tick: TICK_STYLE,\r\n }\r\n}\r\n","import * as React from 'react'\r\nimport { YAxis as RechartsYAxis } from 'recharts'\r\n\r\nimport { shortFormatNumber } from '../../util'\r\n\r\nconst TICK_STYLE = {\r\n fontSize: 10,\r\n fontWeight: 500, // Different from XAxis\r\n fill: '',\r\n}\r\n\r\nexport function getYAxisLabel(label: string, offset?: number) {\r\n return {\r\n value: label,\r\n ...TICK_STYLE,\r\n angle: -90,\r\n dx: offset,\r\n style: { textAnchor: 'middle' },\r\n }\r\n}\r\n\r\nexport class YAxis extends React.Component<\r\n Omit, 'tickCount'> & { tickCount?: number | null }\r\n> {\r\n static displayName = RechartsYAxis.displayName\r\n\r\n static defaultProps = {\r\n ...RechartsYAxis.defaultProps,\r\n className: 'fill-gray-500 dark:fill-gray-300',\r\n tickLine: false,\r\n axisLine: false,\r\n tick: TICK_STYLE,\r\n tickFormatter: shortFormatNumber,\r\n }\r\n\r\n render() {\r\n return \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 classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nexport enum KeyStatVariant {\r\n Default,\r\n Positive,\r\n Negative,\r\n}\r\n\r\ntype KeyStatProps = {\r\n datapoint: React.ReactNode\r\n label: React.ReactNode\r\n subdatapoint?: React.ReactNode\r\n sublabel?: React.ReactNode\r\n variant?: KeyStatVariant\r\n}\r\n\r\nexport function KeyStat({ datapoint, label, subdatapoint, sublabel, variant = KeyStatVariant.Default }: KeyStatProps) {\r\n return (\r\n
\r\n {label}\r\n \r\n {datapoint}\r\n {subdatapoint && (\r\n \r\n {subdatapoint}\r\n \r\n )}\r\n \r\n {sublabel && {sublabel}}\r\n
\r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { PropsWithChildren } from 'react'\r\n\r\nexport enum KeyStatsVariant {\r\n Compact,\r\n Stretched,\r\n}\r\n\r\ntype KeyStatsProps = {\r\n className?: string\r\n variant?: KeyStatsVariant\r\n}\r\n\r\nexport function KeyStats({ children, className, variant = KeyStatsVariant.Compact }: PropsWithChildren) {\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { RedGreenText } from '../../../components/RedGreenText'\r\nimport { formatNumber, getEarningsDateSuffix, shortFormatNumber } from '../../../util'\r\nimport { EarningReportReaction, EarningsEstimateType, PriceReactionWhen } from '../types'\r\nimport { ChartYearData } from './EarningsChart'\r\n\r\nconst ESTIMATE_TYPE_LABELS: { [K in EarningsEstimateType]: string } = {\r\n [EarningsEstimateType.eps]: 'EPS',\r\n [EarningsEstimateType.epsGaap]: 'GAAP EPS',\r\n [EarningsEstimateType.sales]: 'Revenue',\r\n}\r\n\r\ntype DailyChangeProps = {\r\n dateClassName?: string\r\n reportReaction: EarningReportReaction\r\n when: PriceReactionWhen\r\n}\r\n\r\nfunction DailyChange({ dateClassName, reportReaction, when }: DailyChangeProps) {\r\n const reaction = reportReaction.reactions[when]\r\n if (!reaction || !reaction.price || !reaction.prevPrice) {\r\n return null\r\n }\r\n const date = dateFns.parseISO(reaction.date)\r\n const diff = reaction.price - reaction.prevPrice\r\n return (\r\n <>\r\n
{dateFns.format(date, 'MMM dd')}
\r\n
\r\n \r\n {formatNumber(diff)} ({formatNumber(Math.abs(reaction.priceDiff))}%)\r\n \r\n
\r\n \r\n )\r\n}\r\n\r\ntype PerformanceTooltipProps = {\r\n data: ChartYearData | undefined\r\n estimateType: EarningsEstimateType\r\n isActive: boolean\r\n}\r\n\r\nexport function PerformanceTooltip({ data, estimateType, isActive }: PerformanceTooltipProps) {\r\n if (!estimateType || !isActive || !data || !data.reportReaction) return null\r\n\r\n const reportReaction = data.reportReaction\r\n const earningsDate = dateFns.parseISO(reportReaction.reportDate)\r\n const fiscalEndDate = reportReaction.fiscalEndDate ? dateFns.parseISO(reportReaction.fiscalEndDate) : null\r\n\r\n let estimate\r\n let reported\r\n switch (estimateType) {\r\n case EarningsEstimateType.eps:\r\n estimate = data.epsEstimate\r\n reported = data.epsActual\r\n break\r\n case EarningsEstimateType.epsGaap:\r\n estimate = data.epsReportedEstimate\r\n reported = data.epsReportedActual\r\n break\r\n case EarningsEstimateType.sales:\r\n estimate = data.salesEstimate\r\n reported = data.salesActual\r\n break\r\n default:\r\n return null\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
{ESTIMATE_TYPE_LABELS[estimateType]}
\r\n
Report Date
\r\n
\r\n {dateFns.format(earningsDate, 'MMM dd, yyy')} {getEarningsDateSuffix(earningsDate)}\r\n
\r\n
Fiscal Period
\r\n
{`${reportReaction.fiscalPeriod.substring(4, 6)} ${reportReaction.fiscalPeriod.substring(0, 4)}`}
\r\n
Period Ending
\r\n
{fiscalEndDate && dateFns.format(fiscalEndDate, 'MMM yyyy')}
\r\n
 
\r\n
Estimate
\r\n
{shortFormatNumber(estimate)}
\r\n
Reported
\r\n
{shortFormatNumber(reported)}
\r\n
Surprise
\r\n
\r\n {data.surprise !== null && estimate && (\r\n \r\n {shortFormatNumber(data.surprise)} ({formatNumber(Math.abs((data.surprise / estimate) * 100))}%)\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
Daily Change
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import { ColorVariant } from '../../../components'\r\nimport { getColor } from '../utils'\r\n\r\nexport function getSurpriseDotColor(value: number) {\r\n let color = ColorVariant.gray\r\n if (value > 0) {\r\n color = ColorVariant.green\r\n } else if (value < 0) {\r\n color = ColorVariant.red\r\n }\r\n\r\n return getColor(color)\r\n}\r\n","import React from 'react'\r\nimport { Dot, DotProps } from 'recharts'\r\n\r\nimport { ColorVariant } from '../../../components'\r\nimport { getColor } from '../utils'\r\nimport { getSurpriseDotColor } from './utils'\r\n\r\ntype Props = DotProps & { value?: number; isActive?: boolean }\r\n\r\nexport function RedGreenDot(props: Props) {\r\n const { cx, cy, value, isActive, onMouseEnter, onMouseLeave } = props\r\n\r\n if (typeof value === 'number') {\r\n const size = isActive ? 6 : 5\r\n\r\n return (\r\n \r\n )\r\n }\r\n\r\n return <>\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\nimport { Bar, Cell, ComposedChart, Line, Rectangle, RectangleProps, Tooltip, YAxis } from 'recharts'\r\n\r\nimport { ColorVariant } from '../../../components'\r\nimport {\r\n BAR_GAP,\r\n BAR_WIDTH,\r\n BAR_WIDTH_NARROW,\r\n CHART_HEIGHT,\r\n CHART_MARGINS,\r\n CURSOR_STYLE,\r\n EXTRA_WIDTH,\r\n LABELS_MARGIN,\r\n LABELS_WIDTH,\r\n TICK_STYLE,\r\n TOOLTIP_WRAPPER_STYLE,\r\n TRANSPARENT_CURSOR,\r\n} from '../constants'\r\nimport { EarningReportReaction, EarningValueProperty, EarningsDataType, EarningsEstimateType } from '../types'\r\nimport { getColor, tickFormatter } from '../utils'\r\nimport { PerformanceTooltip } from './PerformanceTooltip'\r\nimport { RedGreenDot } from './RedGreenDot'\r\n\r\ninterface CustomCursorProps extends Partial> {\r\n barWithGapWidth: number\r\n isActive: boolean\r\n points?: [{ x: number }]\r\n}\r\n\r\nfunction CustomCursor({ barWithGapWidth, points, ...props }: CustomCursorProps) {\r\n const x = points![0].x - barWithGapWidth / 2\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport type Props = {\r\n annualData: EarningsDataType[]\r\n estimateType: EarningsEstimateType\r\n isCompact: boolean\r\n reportReactions: EarningReportReaction[]\r\n}\r\n\r\nexport type ChartYearData = {\r\n year: string\r\n isEstimate: boolean\r\n reportReaction: EarningReportReaction | undefined\r\n} & Record\r\n\r\nconst CHART_GRID_COMMON_PROPS = 'absolute right-8 border-t border-dashed border-secondary'\r\n\r\nexport function EarningsChart({ annualData, estimateType, isCompact, reportReactions }: Props) {\r\n const [isActive, setIsActive] = React.useState(false)\r\n const [activeIndex, setActiveIndex] = React.useState(-1)\r\n const [reverseTooltipDirection, setReverseTooltipDirection] = React.useState(true)\r\n const columnsCount = annualData[0].values.length\r\n const barWidth = isCompact ? BAR_WIDTH_NARROW : BAR_WIDTH\r\n const { estimateColumnsCount, hasBarChart, hasLineChart } = React.useMemo(\r\n () => ({\r\n estimateColumnsCount: annualData[0].values.filter(({ isEstimate }) => isEstimate).length,\r\n hasLineChart: annualData.some(({ id, isSelected }) => id === EarningValueProperty.Surprise && isSelected),\r\n hasBarChart: annualData.some(({ id, isSelected }) => id !== EarningValueProperty.Surprise && isSelected),\r\n }),\r\n [annualData]\r\n )\r\n const chartData = React.useMemo(() => {\r\n const data: Record = {}\r\n annualData.forEach(({ id, values }) => {\r\n values.forEach(({ value, year, isEstimate }) => {\r\n const fiscalPeriod = `20${year.substring(4, 6)}${year.substring(0, 2)}`\r\n const reportReaction = reportReactions.find((reaction) => reaction.fiscalPeriod === fiscalPeriod)\r\n data[year] = { ...data[year], year, isEstimate, [id]: value, reportReaction }\r\n })\r\n })\r\n return Object.values(data)\r\n }, [annualData, reportReactions])\r\n\r\n const chartWidth = columnsCount * barWidth + (columnsCount - 1) * BAR_GAP + EXTRA_WIDTH + LABELS_WIDTH * 1.5\r\n const estimateAreaWidth = estimateColumnsCount * barWidth + estimateColumnsCount * BAR_GAP\r\n const barLessChartYMargin = barWidth / 2 + BAR_GAP / 2\r\n\r\n const chartGridCommonLeftProps = {\r\n 'left-8': hasLineChart,\r\n 'left-0': !hasLineChart,\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n {\r\n setIsActive(true)\r\n }}\r\n onMouseLeave={() => {\r\n setIsActive(false)\r\n }}\r\n >\r\n {\r\n if (typeof props.activeTooltipIndex === 'number' && props.activeTooltipIndex !== activeIndex) {\r\n setActiveIndex(props.activeTooltipIndex)\r\n }\r\n setReverseTooltipDirection(mouseEvent.clientX > window.innerWidth / 2)\r\n }}\r\n onMouseLeave={() => {\r\n setActiveIndex(-1)\r\n }}\r\n >\r\n \r\n \r\n }\r\n content={() => (\r\n \r\n )}\r\n />\r\n {annualData.map(({ id, label, isSelected, color }) => {\r\n if (!isSelected) return null\r\n\r\n if (id !== EarningValueProperty.Surprise) {\r\n return (\r\n \r\n {chartData.map((row, index) => (\r\n \r\n ))}\r\n \r\n )\r\n }\r\n\r\n return (\r\n }\r\n strokeDasharray=\"3 3\"\r\n activeDot={ {}} onMouseLeave={() => {}} />}\r\n stroke={getColor(color)}\r\n isAnimationActive={false}\r\n connectNulls={false}\r\n />\r\n )\r\n })}\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { RedGreenText } from '../../components/RedGreenText'\r\nimport { TableAlign } from '../../components/Table'\r\nimport { shortFormatNumber } from '../../util'\r\nimport { EarningValueProperty, EarningsColumnsType, EarningsDataEnum } from './types'\r\n\r\nconst getColumns = (yearKeys: string[], isCompact: boolean) => {\r\n const commonClassName = classNames('px-4 last:pr-11', {\r\n 'w-22 last:w-29.5': !isCompact,\r\n 'w-17 last:w-24.5': isCompact,\r\n })\r\n\r\n const columns: EarningsColumnsType['columns'] = yearKeys.map((year) => ({\r\n id: year,\r\n name: year,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n const annualDividend = data.values.find((annualDividend) => annualDividend.year === year)\r\n const annualDividendValue = annualDividend?.value ?? null\r\n const annualDividendValuePercent = annualDividend?.percentageValue ?? null\r\n if (typeof annualDividendValue !== 'number') return \r\n if (data.id === EarningValueProperty.Surprise) {\r\n return (\r\n \r\n {shortFormatNumber(annualDividendValue, { defaultValue: '—' })}\r\n {typeof annualDividendValuePercent === 'number' && (\r\n <>\r\n
\r\n {shortFormatNumber(annualDividendValuePercent, { fractions: 2 })}%\r\n \r\n )}\r\n
\r\n )\r\n }\r\n const value = shortFormatNumber(annualDividendValue, { fractions: 2 })\r\n return {value}\r\n },\r\n }))\r\n\r\n const subColumns: EarningsColumnsType['subColumns'] = {\r\n [EarningsDataEnum.analysts]: yearKeys.map((year) => ({\r\n id: year,\r\n name: year,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n const annualDividend = data.values.find((annualDividend) => annualDividend.year === year)\r\n const annualDividendValue = annualDividend?.value ?? null\r\n return {annualDividendValue?.toFixed(0) ?? '—'}\r\n },\r\n })),\r\n [EarningsDataEnum.yoyChange]: yearKeys.map((year) => ({\r\n id: year,\r\n name: year,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n const annualDividend = data.values.find((annualDividend) => annualDividend.year === year)\r\n const annualDividendValue = annualDividend?.value ?? null\r\n return (\r\n \r\n {shortFormatNumber(annualDividendValue, { defaultValue: '—' })}\r\n \r\n )\r\n },\r\n })),\r\n [EarningsDataEnum.yoyChangePct]: yearKeys.map((year) => ({\r\n id: year,\r\n name: year,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n const annualDividend = data.values.find((annualDividend) => annualDividend.year === year)\r\n const annualDividendValue = annualDividend?.value ?? null\r\n return (\r\n \r\n {annualDividendValue?.toFixed(2) ?? '—'}\r\n \r\n )\r\n },\r\n })),\r\n }\r\n return { columns, subColumns }\r\n}\r\n\r\nexport function useTableColumns(yearKeys: string[], isCompact: boolean) {\r\n return React.useMemo(() => getColumns(yearKeys, isCompact), [yearKeys, isCompact])\r\n}\r\n","import React from 'react'\r\n\r\nimport { TableAlign, TableHead, TableHeader } from '../../components/Table'\r\nimport { FinancialsWidget, getIsCompact } from '../../components/financials-table'\r\nimport { EarningsSettings } from '../earnings/types'\r\nimport { ForecastSettings } from '../forecast/types'\r\nimport WidgetHeader from './WidgetHeader'\r\nimport { EarningsChart } from './charts/EarningsChart'\r\nimport { BAR_WIDTH, EARNINGS_WIDGET_LABELS, EarningsWidgetCategory } from './constants'\r\nimport { EarningReportReaction, EarningsCommonData, EarningsDataEnum, EarningsEstimateType } from './types'\r\nimport { useTableColumns } from './useTableColumns'\r\nimport { mapData } from './utils'\r\n\r\nconst widgetToEstimateType: { [K in EarningsWidgetCategory]: EarningsEstimateType } = {\r\n [EarningsWidgetCategory.Eps]: EarningsEstimateType.eps,\r\n [EarningsWidgetCategory.EpsGaap]: EarningsEstimateType.epsGaap,\r\n [EarningsWidgetCategory.Revenue]: EarningsEstimateType.sales,\r\n}\r\n\r\ninterface Props {\r\n data: EarningsCommonData\r\n earningsWidgetCategory: EarningsWidgetCategory\r\n priceReactionData: EarningReportReaction[]\r\n settings: EarningsSettings | ForecastSettings\r\n}\r\n\r\nexport function EarningsWidget({ data, earningsWidgetCategory, priceReactionData, settings }: Props) {\r\n const [annualData, setAnnualData] = React.useState(() =>\r\n data ? mapData(data, settings.earningsTimeframe, earningsWidgetCategory) : []\r\n )\r\n\r\n const yearKeys = React.useMemo(\r\n () =>\r\n annualData\r\n .flatMap(({ values }) => values.map(({ year }) => year))\r\n .filter((year, index, arr) => arr.indexOf(year) === index),\r\n [annualData]\r\n )\r\n const label = EARNINGS_WIDGET_LABELS[earningsWidgetCategory] || ''\r\n const estimateType = widgetToEstimateType[earningsWidgetCategory]\r\n const [isCompact, setIsCompact] = React.useState(getIsCompact(yearKeys.length, 22))\r\n const { columns, subColumns } = useTableColumns(yearKeys, isCompact)\r\n\r\n React.useEffect(() => {\r\n // Remove min-height from react root element which is set on BE because of CLS\r\n document.getElementById('root')?.style.removeProperty('min-height')\r\n\r\n const onResize = () => {\r\n setIsCompact(getIsCompact(yearKeys.length, BAR_WIDTH))\r\n }\r\n\r\n onResize()\r\n\r\n window.addEventListener('resize', onResize)\r\n\r\n return () => {\r\n window.removeEventListener('resize', onResize)\r\n }\r\n }, [yearKeys])\r\n\r\n React.useEffect(() => {\r\n setAnnualData(mapData(data, settings.earningsTimeframe, earningsWidgetCategory))\r\n }, [data, settings.earningsTimeframe, earningsWidgetCategory])\r\n\r\n const onVisibilityChange = (id: string, isSelected: boolean) => {\r\n setAnnualData(\r\n annualData.map((item) =>\r\n item.id === id\r\n ? {\r\n ...item,\r\n isSelected,\r\n }\r\n : item\r\n )\r\n )\r\n }\r\n\r\n const shownSubdata = (id: string) =>\r\n id === EarningsDataEnum.analysts ||\r\n (id === EarningsDataEnum.yoyChange &&\r\n EarningsDataEnum.yoyChange in settings &&\r\n settings[EarningsDataEnum.yoyChange]) ||\r\n (id === EarningsDataEnum.yoyChangePct &&\r\n EarningsDataEnum.yoyChangePct in settings &&\r\n settings[EarningsDataEnum.yoyChangePct])\r\n\r\n return (\r\n \r\n ({\r\n ...revenue,\r\n subData: revenue.subData.filter(({ id }) => shownSubdata(id)),\r\n }))}\r\n header={}\r\n tableHead={\r\n \r\n Currency: USD\r\n\r\n {columns.map((column) => (\r\n \r\n {column.name}\r\n \r\n ))}\r\n \r\n }\r\n columns={columns}\r\n subColumns={subColumns}\r\n onVisibilityChange={onVisibilityChange}\r\n >\r\n \r\n \r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Heading } from '../../components/typography'\r\n\r\ninterface Props {\r\n label: string\r\n}\r\n\r\nexport default function WidgetHeader({ label }: Props) {\r\n return (\r\n \r\n {label}\r\n \r\n )\r\n}\r\n","import colors from '../../../../../config/colors'\r\n\r\nexport enum EarningsWidgetCategory {\r\n Eps,\r\n EpsGaap,\r\n Revenue,\r\n}\r\n\r\nexport const EARNINGS_WIDGET_LABELS: Record = {\r\n [EarningsWidgetCategory.Eps]: 'EPS Performance and Forecast',\r\n [EarningsWidgetCategory.EpsGaap]: 'GAAP EPS Performance and Forecast',\r\n [EarningsWidgetCategory.Revenue]: 'Revenue Performance and Forecast',\r\n}\r\n\r\nexport const BAR_WIDTH = 72\r\nexport const CHART_HEIGHT = 250\r\nexport const LABELS_WIDTH = 28\r\nexport const LABELS_MARGIN = 22\r\nexport const BAR_WIDTH_NARROW = 52\r\nexport const BAR_GAP = 16\r\nexport const EXTRA_WIDTH = 44\r\nexport const CHART_MARGINS = { top: 2, right: 0, bottom: 0, left: 0 }\r\nexport const TICK_STYLE = { fontSize: 10, fontWeight: 500, textAnchor: 'end' }\r\nexport const TOOLTIP_WRAPPER_STYLE = { outline: 'none', zIndex: 10 }\r\nexport const CURSOR_STYLE = {\r\n border: 0,\r\n stroke: 0,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[50],\r\n opacity: 0.65,\r\n}\r\nexport const TRANSPARENT_CURSOR = { opacity: 0 }\r\n","// These values match keys which come from BE so don't change them\r\nimport { FinancialsColumnDefinition, FinancialsRowDataType } from '../../components/financials-table/types'\r\n\r\nexport enum EarningValueProperty {\r\n EpsActual = 'epsActual',\r\n EpsAnalysts = 'epsAnalysts',\r\n EpsEstimate = 'epsEstimate',\r\n EpsReportedActual = 'epsReportedActual',\r\n EpsReportedAnalysts = 'epsReportedAnalysts',\r\n EpsReportedEstimate = 'epsReportedEstimate',\r\n SalesActual = 'salesActual',\r\n SalesAnalysts = 'salesAnalysts',\r\n SalesEstimate = 'salesEstimate',\r\n Surprise = 'surprise',\r\n}\r\n\r\nexport type Earning = {\r\n earningsDate: string | null\r\n epsActual: number | null\r\n epsEstimate: number | null\r\n fiscalEndDate: string\r\n fiscalPeriod: string\r\n ticker: string\r\n} & Record\r\n\r\nexport interface EarningsDataType extends Omit {\r\n id: EarningValueProperty\r\n values: Array<{ year: string; value: number | null; isEstimate: boolean }>\r\n isEstimate?: boolean\r\n}\r\n\r\nexport enum EarningsEstimateType {\r\n eps = 'E',\r\n epsGaap = 'R',\r\n sales = 'S',\r\n}\r\n\r\nexport enum EarningsDataEnum {\r\n analysts = 'analysts',\r\n yoyChange = 'yoyChange',\r\n yoyChangePct = 'yoyChangePct',\r\n}\r\n\r\nexport enum EarningsTimeframeEnum {\r\n annual = 'annual',\r\n quarterly = 'quarterly',\r\n}\r\n\r\ntype EarningRowDataType = Omit & {\r\n values: Array<{ year: string; value: number | null; percentageValue: number | null; isEstimate?: boolean }>\r\n}\r\n\r\nexport type EarningsColumnsType = {\r\n columns: FinancialsColumnDefinition[]\r\n subColumns: Record\r\n}\r\n\r\nexport type EarningPriceReaction = {\r\n date: string\r\n prevPrice: number\r\n price: number\r\n priceDiff: number\r\n spyPriceDiff: number\r\n}\r\n\r\nexport type EarningPriceReactions = {\r\n [K: string]: EarningPriceReaction\r\n}\r\n\r\nexport type EarningReportReaction = {\r\n ticker: string\r\n reportDate: string\r\n fiscalPeriod: string\r\n fiscalEndDate: string | null\r\n chartStartDate: string\r\n chartEndDate: string\r\n rsi: number | null\r\n reactions: EarningPriceReactions\r\n}\r\n\r\nexport enum PriceReactionWhen {\r\n MINUS_DAYS_3 = 'minus_3_days',\r\n MINUS_DAYS_2 = 'minus_2_days',\r\n MINUS_DAYS_1 = 'minus_1_day',\r\n OPEN = 'open',\r\n HIGH = 'high',\r\n LOW = 'low',\r\n CLOSE = 'close',\r\n PLUS_DAYS_1 = 'plus_1_day',\r\n PLUS_DAYS_2 = 'plus_2_days',\r\n PLUS_DAYS_3 = 'plus_3_days',\r\n PLUS_WEEK_1 = 'plus_1_week',\r\n MINUS_WEEK_1 = 'minus_1_week',\r\n}\r\n\r\nexport interface EarningsCommonData {\r\n earningsDate: string | null\r\n earningsAnnualData: Earning[]\r\n earningsData: Earning[]\r\n priceReactionData: EarningReportReaction[]\r\n}\r\n","import colors from '../../../../../config/colors'\r\nimport { ColorVariant } from '../../components'\r\nimport { getYoYData } from '../../components/financials-table'\r\nimport { shortFormatNumber } from '../../util'\r\nimport { getIsEarningEstimate, getIsSemiAnnualEarning } from '../earnings/utils'\r\nimport { EarningsWidgetCategory } from './constants'\r\nimport {\r\n Earning,\r\n EarningValueProperty,\r\n EarningsCommonData,\r\n EarningsDataEnum,\r\n EarningsDataType,\r\n EarningsTimeframeEnum,\r\n} from './types'\r\n\r\nexport function getColor(color: ColorVariant) {\r\n switch (color) {\r\n case ColorVariant.dark:\r\n return FinvizSettings.hasDarkTheme ? colors.gray[300] : colors.gray[700]\r\n case ColorVariant.violet:\r\n return colors.violet[400]\r\n case ColorVariant.orange:\r\n return colors.orange[300]\r\n case ColorVariant.blue:\r\n return colors.blue[400]\r\n case ColorVariant.green:\r\n return colors.green[300]\r\n case ColorVariant.gray:\r\n return FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[100]\r\n case ColorVariant.red:\r\n return colors.red[400]\r\n case ColorVariant.default:\r\n default:\r\n return FinvizSettings.hasDarkTheme ? colors.finviz['blue-gray'] : colors.white\r\n }\r\n}\r\n\r\nexport function tickFormatter(value: any) {\r\n return shortFormatNumber(value, { fractions: Math.abs(value) >= 1_000 ? 0 : 2 })\r\n}\r\n\r\nfunction getEarningsDataTemplate(\r\n earningsWidgetCategory: EarningsWidgetCategory\r\n): Array> {\r\n if (earningsWidgetCategory === EarningsWidgetCategory.Revenue) {\r\n return [\r\n {\r\n label: 'Estimate',\r\n id: EarningValueProperty.SalesEstimate,\r\n color: ColorVariant.gray,\r\n isSelected: true,\r\n isEstimate: true,\r\n },\r\n { label: 'Reported', id: EarningValueProperty.SalesActual, color: ColorVariant.violet, isSelected: true },\r\n { label: 'Surprise', id: EarningValueProperty.Surprise, color: ColorVariant.dark, isSelected: false },\r\n ]\r\n }\r\n\r\n const isGaap = earningsWidgetCategory === EarningsWidgetCategory.EpsGaap\r\n return [\r\n {\r\n label: 'Estimate',\r\n id: isGaap ? EarningValueProperty.EpsReportedEstimate : EarningValueProperty.EpsEstimate,\r\n color: ColorVariant.gray,\r\n isSelected: true,\r\n isEstimate: true,\r\n },\r\n {\r\n label: 'Reported',\r\n id: isGaap ? EarningValueProperty.EpsReportedActual : EarningValueProperty.EpsActual,\r\n color: isGaap ? ColorVariant.orange : ColorVariant.blue,\r\n isSelected: true,\r\n },\r\n { label: 'Surprise', id: EarningValueProperty.Surprise, color: ColorVariant.dark, isSelected: false },\r\n ]\r\n}\r\n\r\nexport function getEffectiveTimeframe(\r\n quarterlyData: Earning[],\r\n annualData: Earning[],\r\n earningsTimeframe: EarningsTimeframeEnum\r\n) {\r\n if (quarterlyData.length > 0 && annualData.length > 0) {\r\n return earningsTimeframe\r\n }\r\n if (quarterlyData.length > 0) {\r\n return EarningsTimeframeEnum.quarterly\r\n }\r\n return EarningsTimeframeEnum.annual\r\n}\r\n\r\nexport function mapData(\r\n data: EarningsCommonData,\r\n earningsTimeframe: EarningsTimeframeEnum,\r\n earningsWidgetCategory: EarningsWidgetCategory\r\n) {\r\n const isQuarterlyTimeframe =\r\n getEffectiveTimeframe(data.earningsData, data.earningsAnnualData, earningsTimeframe) ===\r\n EarningsTimeframeEnum.quarterly // EarningsTimeframeEnum.quarterly is used for both quarterly & semiannual\r\n const dataValues = isQuarterlyTimeframe ? data.earningsData : data.earningsAnnualData\r\n const isSemiAnnualEarning = isQuarterlyTimeframe && getIsSemiAnnualEarning(data.earningsData)\r\n const earningsArray = getEarningsDataTemplate(earningsWidgetCategory).map((category) => {\r\n let numOfEstimates = 0\r\n return {\r\n ...category,\r\n labelColumnClassName: 'align-top',\r\n values: dataValues\r\n .map((periodDataRaw) => {\r\n const periodData = {\r\n ...periodDataRaw,\r\n [EarningValueProperty.SalesActual]: periodDataRaw.salesActual && periodDataRaw.salesActual * 1_000_000,\r\n [EarningValueProperty.SalesEstimate]:\r\n periodDataRaw.salesEstimate && periodDataRaw.salesEstimate * 1_000_000,\r\n }\r\n const yearPeriod =\r\n earningsTimeframe === EarningsTimeframeEnum.quarterly\r\n ? `${periodData.fiscalPeriod.substring(4, 6)} '${periodData.fiscalPeriod.substring(2, 4)}` // eg. Q2 '23\r\n : periodData.fiscalPeriod.substring(0, 4) // eg. 2024\r\n let value = periodData[category.id]\r\n // percentageValue is used in Surprise row\r\n let percentageValue: number | null = null\r\n const {\r\n [EarningValueProperty.SalesActual]: salesActual,\r\n [EarningValueProperty.EpsReportedActual]: epsReportedActual,\r\n [EarningValueProperty.EpsActual]: epsActual,\r\n } = periodData\r\n\r\n if (category.id === EarningValueProperty.Surprise) {\r\n let actualValue: number | null = null\r\n let estimateValue: number | null = null\r\n\r\n if (earningsWidgetCategory === EarningsWidgetCategory.Revenue) {\r\n actualValue = salesActual\r\n estimateValue = periodData[EarningValueProperty.SalesEstimate]\r\n } else if (earningsWidgetCategory === EarningsWidgetCategory.EpsGaap) {\r\n actualValue = epsReportedActual\r\n estimateValue = periodData[EarningValueProperty.EpsReportedEstimate]\r\n } else if (earningsWidgetCategory === EarningsWidgetCategory.Eps) {\r\n actualValue = epsActual\r\n estimateValue = periodData[EarningValueProperty.EpsEstimate]\r\n }\r\n\r\n if (actualValue !== null && estimateValue !== null) {\r\n value = actualValue - estimateValue\r\n percentageValue = (value / estimateValue) * 100\r\n }\r\n }\r\n\r\n let analysts: number | null = null\r\n if (earningsWidgetCategory === EarningsWidgetCategory.Revenue) {\r\n analysts = periodData[EarningValueProperty.SalesAnalysts]\r\n } else if (earningsWidgetCategory === EarningsWidgetCategory.EpsGaap) {\r\n analysts = periodData[EarningValueProperty.EpsReportedAnalysts]\r\n } else if (earningsWidgetCategory === EarningsWidgetCategory.Eps) {\r\n analysts = periodData[EarningValueProperty.EpsAnalysts]\r\n }\r\n\r\n return {\r\n year: yearPeriod,\r\n percentageValue,\r\n value,\r\n isEstimate: getIsEarningEstimate(periodData),\r\n analysts,\r\n }\r\n })\r\n .filter(({ isEstimate }) => {\r\n if (isEstimate) {\r\n numOfEstimates += 1\r\n return numOfEstimates <= 4\r\n }\r\n return true\r\n })\r\n .slice(-12),\r\n }\r\n })\r\n\r\n return earningsArray.map((earningsCategory) => {\r\n const yoyData = earningsCategory.id === EarningValueProperty.Surprise ? null : getYoYData(earningsCategory.values)\r\n\r\n let yoyGrowthLabel = 'YoY Growth'\r\n\r\n if (isQuarterlyTimeframe) {\r\n yoyGrowthLabel = isSemiAnnualEarning ? 'SoS Growth' : 'QoQ Growth'\r\n }\r\n\r\n return {\r\n ...earningsCategory,\r\n subData: [\r\n ...(earningsCategory.isEstimate\r\n ? [\r\n {\r\n id: EarningsDataEnum.analysts,\r\n label: '# of Analysts',\r\n values: earningsCategory.values.map((anualDividend) => ({\r\n ...anualDividend,\r\n value: anualDividend.analysts,\r\n })),\r\n },\r\n ]\r\n : []),\r\n ...(yoyData\r\n ? [\r\n {\r\n id: EarningsDataEnum.yoyChange,\r\n label: yoyGrowthLabel,\r\n values: earningsCategory.values.map((anualDividend) => ({\r\n ...anualDividend,\r\n value: yoyData.change[anualDividend.year] ?? null,\r\n })),\r\n },\r\n {\r\n id: EarningsDataEnum.yoyChangePct,\r\n label: `${yoyGrowthLabel} %`,\r\n values: earningsCategory.values.map((anualDividend) => ({\r\n ...anualDividend,\r\n value: yoyData.changePct[anualDividend.year] ?? null,\r\n })),\r\n },\r\n ]\r\n : []),\r\n ],\r\n }\r\n })\r\n}\r\n\r\nfunction dateOrNextMonth(date: Date, day: number): Date {\r\n if (date.getDate() === day) {\r\n return new Date(date.getFullYear(), date.getMonth(), day)\r\n }\r\n return new Date(date.getFullYear(), date.getMonth() + 1, day)\r\n}\r\n\r\nexport function getMonthlyTicks(startingTimestamp: number, endingTimestamp: number, midMonth?: boolean) {\r\n const MID_MONTH = 15\r\n const ticks: number[] = []\r\n const endingDate = new Date(endingTimestamp)\r\n let date = dateOrNextMonth(new Date(startingTimestamp), midMonth ? MID_MONTH : 1)\r\n while (date <= endingDate) {\r\n ticks.push(date.getTime())\r\n date = new Date(date.getFullYear(), date.getMonth() + 1, midMonth ? MID_MONTH : 1)\r\n }\r\n return ticks\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\nimport { PropsWithChildren } from 'react'\r\n\r\nimport colors from '../../../../../config/colors'\r\n\r\nexport enum HighlightedBoxColor {\r\n DarkRed,\r\n MediumRed,\r\n LightRed,\r\n Neutral,\r\n LightGreen,\r\n MediumGreen,\r\n DarkGreen,\r\n}\r\n\r\nconst LIGHT_BG_COLORS: string[] = [\r\n colors.red[200],\r\n colors.red[100],\r\n colors.red[50],\r\n colors.gray[50],\r\n colors.green[50],\r\n colors.green[100],\r\n colors.green[200],\r\n]\r\n\r\nconst DARK_BG_COLORS: string[] = [\r\n colors.red[500],\r\n colors.red[600],\r\n colors.red[700],\r\n colors.gray[700],\r\n colors.green[700],\r\n colors.green[600],\r\n colors.green[500],\r\n]\r\n\r\nconst LIGHT_TEXT_COLORS: string[] = [\r\n colors.red[700],\r\n colors.red[600],\r\n colors.red[500],\r\n colors.gray[600],\r\n colors.green[500],\r\n colors.green[600],\r\n colors.green[700],\r\n]\r\n\r\nconst DARK_TEXT_COLORS: string[] = [\r\n colors.white,\r\n colors.red[200],\r\n colors.red[300],\r\n colors.gray[200],\r\n colors.green[300],\r\n colors.green[200],\r\n colors.white,\r\n]\r\n\r\ninterface HighlightedBoxProps {\r\n className?: string\r\n color: HighlightedBoxColor\r\n}\r\n\r\nexport function HighlightedBox({ children, className, color }: PropsWithChildren) {\r\n const bgColorsList = FinvizSettings.hasDarkTheme ? DARK_BG_COLORS : LIGHT_BG_COLORS\r\n const textColorsList = FinvizSettings.hasDarkTheme ? DARK_TEXT_COLORS : LIGHT_TEXT_COLORS\r\n\r\n return (\r\n \r\n {children}\r\n
\r\n )\r\n}\r\n","import { EarningsDataEnum, EarningsEstimateType, EarningsTimeframeEnum } from '../earnings-common/types'\r\nimport { EarningsSettings } from './types'\r\n\r\nexport enum EarningsColor {\r\n axis = 'axis',\r\n cursor = 'cursor',\r\n downBar = 'downBar',\r\n estimate = 'estimate',\r\n lowHigh = 'lowHigh',\r\n price = 'price',\r\n upBar = 'upBar',\r\n}\r\n\r\nexport const EarningsEstimateTypeLabels: { [key in EarningsEstimateType]: string } = {\r\n [EarningsEstimateType.eps]: 'EPS',\r\n [EarningsEstimateType.epsGaap]: 'GAAP EPS',\r\n [EarningsEstimateType.sales]: 'Sales',\r\n}\r\n\r\nexport const EARNINGS_DATE_FORMAT = 'MMM dd, yyy'\r\n\r\nexport const PRICE_REVISIONS_CHART_HEIGHT = 296\r\nexport const PRICE_REVISIONS_YAXIS_WIDTH = 40\r\nexport const PRICE_REVISIONS_TICK_COUNT = 6\r\n\r\nexport const UPDOWN_REVISIONS_CHART_HEIGHT = 135\r\nexport const UPDOWN_REVISIONS_TICK_COUNT = 7\r\n\r\nexport const FISCAL_YEAR_MARK = 'FY'\r\n\r\nexport const SETTINGS_COOKIE_KEY = 'earningsSettings'\r\n\r\nexport const DEFAULT_SETTINGS: EarningsSettings = {\r\n [EarningsDataEnum.yoyChange]: false,\r\n [EarningsDataEnum.yoyChangePct]: false,\r\n estimateType: EarningsEstimateType.eps,\r\n fiscalPeriod: '',\r\n earningsTimeframe: EarningsTimeframeEnum.quarterly,\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { TableAlign } from '../../components/Table'\r\nimport {\r\n EarningsCommonData,\r\n EarningsDataEnum,\r\n EarningsEstimateType,\r\n EarningsTimeframeEnum,\r\n PriceReactionWhen,\r\n} from '../earnings-common/types'\r\n\r\nexport type EarningRevision = {\r\n ticker: string\r\n fiscalPeriod: string\r\n estimateType: EarningsEstimateType\r\n estimateDate: string\r\n relativeFiscalPeriod: number\r\n estimates: number\r\n upRevisions: number\r\n downRevisions: number\r\n mean: number\r\n high: number\r\n low: number\r\n price: number\r\n}\r\n\r\nexport type EarningRevisionWithDate = EarningRevision & { date: Date; negDownRevisions?: number }\r\n\r\nexport interface EarningsData extends EarningsCommonData {\r\n earningsRevisionsData: EarningRevision[]\r\n}\r\n\r\nexport type EarningsRevisionsByType = {\r\n [estimateType in EarningsEstimateType]: {\r\n quarters: { [quarter: string]: EarningRevisionWithDate[] }\r\n years: { [year: string]: EarningRevisionWithDate[] }\r\n }\r\n}\r\n\r\nexport type EarningsSettings = {\r\n [EarningsDataEnum.yoyChange]: boolean\r\n [EarningsDataEnum.yoyChangePct]: boolean\r\n estimateType: EarningsEstimateType\r\n fiscalPeriod: string\r\n earningsTimeframe: EarningsTimeframeEnum\r\n}\r\n\r\nexport enum PriceReactionDataEnum {\r\n priceDiff = 'priceDiff',\r\n spyPriceDiff = 'spyPriceDiff',\r\n}\r\n\r\nexport type PriceReactionSubRowDataType = {\r\n id: string\r\n label: string\r\n labelElement?: React.ReactNode\r\n labelColumnClassName?: string\r\n values: Array<{ when: PriceReactionWhen; value: number | null }>\r\n}\r\n\r\nexport type PriceReactionRowDataType = PriceReactionSubRowDataType & {\r\n subData: PriceReactionSubRowDataType[]\r\n}\r\n\r\ntype PriceReactionColumnDefinitionBase = {\r\n id: string\r\n name: string\r\n align?: TableAlign\r\n className?: string\r\n getColumnClassName?: (data: RowDataType) => string | null | undefined\r\n renderColumn: (data: RowDataType) => React.ReactNode\r\n}\r\n\r\nexport type PriceReactionColumnDefinition = PriceReactionColumnDefinitionBase & {\r\n bottomBorderClassName?: string\r\n hasLeftBorder?: boolean\r\n hasLeftSeparator?: boolean\r\n hasRightBorder?: boolean\r\n hasRightSeparator?: boolean\r\n headerClassName?: string\r\n isSeparator?: boolean\r\n leftBorderClassName?: string\r\n rightBorderClassName?: string\r\n topBorderClassName?: string\r\n}\r\n\r\nexport type PriceReactionSubColumnDefinition = PriceReactionColumnDefinitionBase\r\n\r\nexport type PriceReactionColumnsType = {\r\n columns: PriceReactionColumnDefinition[]\r\n subColumns: Record\r\n}\r\n\r\ntype RevisionsChartItem = EarningRevisionWithDate & {\r\n lowHigh: [number, number]\r\n timestamp: number\r\n}\r\n\r\nexport type RevisionsChartData = RevisionsChartItem[]\r\n","import * as React from 'react'\r\nimport { PropsWithChildren } from 'react'\r\n\r\nimport { HighlightedBox, HighlightedBoxColor } from './HighlightedBox'\r\n\r\nfunction getColorForValue(value: number): HighlightedBoxColor {\r\n if (value <= 10) {\r\n return HighlightedBoxColor.DarkGreen\r\n } else if (value <= 20) {\r\n return HighlightedBoxColor.MediumGreen\r\n } else if (value <= 30) {\r\n return HighlightedBoxColor.LightGreen\r\n } else if (value < 70) {\r\n return HighlightedBoxColor.Neutral\r\n } else if (value < 80) {\r\n return HighlightedBoxColor.LightRed\r\n } else if (value < 90) {\r\n return HighlightedBoxColor.MediumRed\r\n } else {\r\n return HighlightedBoxColor.DarkRed\r\n }\r\n}\r\n\r\ninterface RsiValueProps {\r\n className?: string\r\n value?: number | null\r\n}\r\n\r\nexport function RsiValue({ children, className, value }: PropsWithChildren) {\r\n if (!Number.isFinite(value)) {\r\n return null\r\n }\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport * as React from 'react'\r\n\r\nimport colors from '../../../../../config/colors'\r\nimport { encodeQueryString } from '../../../app/queryString'\r\nimport { Button, Icon } from '../../components'\r\nimport { TIMEFRAME } from '../../constants'\r\nimport { getEarningsDateSuffix } from '../../util'\r\nimport {\r\n Earning,\r\n EarningReportReaction,\r\n EarningValueProperty,\r\n EarningsEstimateType,\r\n PriceReactionWhen,\r\n} from '../earnings-common/types'\r\nimport { RsiValue } from './RsiValue'\r\nimport { EARNINGS_DATE_FORMAT, EarningsColor, FISCAL_YEAR_MARK } from './constants'\r\nimport { PriceReactionDataEnum, PriceReactionRowDataType } from './types'\r\n\r\nexport function getEarningsColor(color: EarningsColor): string {\r\n switch (color) {\r\n case EarningsColor.axis:\r\n return FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[100]\r\n case EarningsColor.cursor:\r\n return FinvizSettings.hasDarkTheme ? colors.gray[200] : colors.gray[500]\r\n case EarningsColor.downBar:\r\n return colors.red[400]\r\n case EarningsColor.estimate:\r\n return colors.amber[300]\r\n case EarningsColor.lowHigh:\r\n return FinvizSettings.hasDarkTheme ? colors.orange[500] : colors.amber[100]\r\n case EarningsColor.price:\r\n return colors.blue[400]\r\n case EarningsColor.upBar:\r\n return colors.green[400]\r\n default:\r\n return FinvizSettings.hasDarkTheme ? colors.white : colors.black\r\n }\r\n}\r\n\r\nexport function getIsEarningEstimate(\r\n earning: Pick<\r\n Earning,\r\n EarningValueProperty.SalesActual | EarningValueProperty.EpsReportedActual | EarningValueProperty.EpsActual\r\n >\r\n) {\r\n const {\r\n [EarningValueProperty.SalesActual]: salesActual,\r\n [EarningValueProperty.EpsReportedActual]: epsReportedActual,\r\n [EarningValueProperty.EpsActual]: epsActual,\r\n } = earning\r\n\r\n return [salesActual, epsReportedActual, epsActual].every((value) => value === null)\r\n}\r\n\r\nfunction getChartLink(ticker: string, chartStartDate: Date, chartEndDate: Date) {\r\n // see: custom-date-range-utils.ts: getTimeframeFromDateRange\r\n const range = `range_${dateFns.format(chartStartDate, 'MM-dd-yyyy')}x${dateFns.format(chartEndDate, 'MM-dd-yyyy')}`\r\n const anchorDate = new Date()\r\n const startToReferenceDateNumOfDays = dateFns.differenceInCalendarDays(anchorDate, chartStartDate) + 1\r\n const timeframe = startToReferenceDateNumOfDays <= 200 ? TIMEFRAME.i30 : TIMEFRAME.d\r\n return `/charts?${encodeQueryString({\r\n t: ticker,\r\n p: timeframe,\r\n r: range,\r\n l: '1h1v',\r\n })}`\r\n}\r\n\r\nexport function mapPriceReactionData(priceReactionData: EarningReportReaction[]) {\r\n const result: PriceReactionRowDataType[] = []\r\n\r\n for (const reportReaction of priceReactionData) {\r\n const earningsDate = dateFns.parseISO(reportReaction.reportDate)\r\n const fiscalEndDate = reportReaction.fiscalEndDate ? dateFns.parseISO(reportReaction.fiscalEndDate) : null\r\n\r\n const data: PriceReactionRowDataType = {\r\n label: reportReaction.reportDate,\r\n labelElement: (\r\n
\r\n
\r\n {dateFns.format(earningsDate, EARNINGS_DATE_FORMAT)} {getEarningsDateSuffix(earningsDate)}\r\n
\r\n \r\n \r\n \r\n
\r\n ),\r\n id: reportReaction.fiscalPeriod,\r\n values: Object.keys(reportReaction.reactions).map((when) => ({\r\n year: when,\r\n when: when as PriceReactionWhen,\r\n value: reportReaction.reactions[when].price,\r\n })),\r\n subData: [\r\n {\r\n id: PriceReactionDataEnum.priceDiff,\r\n label: '',\r\n labelElement: (\r\n
\r\n
\r\n {formatQuarterName(reportReaction.fiscalPeriod)}\r\n {fiscalEndDate && ({dateFns.format(fiscalEndDate, 'MMM ‘yy')})}\r\n
\r\n
{reportReaction.ticker} %
\r\n
\r\n ),\r\n values: Object.keys(reportReaction.reactions).map((when) => ({\r\n year: when,\r\n when: when as PriceReactionWhen,\r\n value: reportReaction.reactions[when].priceDiff,\r\n })),\r\n },\r\n {\r\n id: PriceReactionDataEnum.spyPriceDiff,\r\n label: '',\r\n labelElement: (\r\n
\r\n
\r\n
RSI
\r\n \r\n {reportReaction.rsi && Math.round(reportReaction.rsi)}\r\n \r\n
\r\n
SPY %
\r\n
\r\n ),\r\n values: Object.keys(reportReaction.reactions).map((when) => ({\r\n year: when,\r\n when: when as PriceReactionWhen,\r\n value: reportReaction.reactions[when].spyPriceDiff,\r\n })),\r\n },\r\n ],\r\n }\r\n\r\n result.push(data)\r\n }\r\n\r\n return result\r\n}\r\n\r\nconst QUARTAL_DELIMITER = 'Q'\r\nconst SEMI_ANNUAL_DELIMITER = 'S'\r\n\r\nexport function getIsSemiAnnualEarning(earnings: Earning[]) {\r\n return !!earnings[0]?.fiscalPeriod.includes(SEMI_ANNUAL_DELIMITER)\r\n}\r\n\r\nexport function getYearAndPeriodInt(periodString: string | null, isSemiAnnualEarning: boolean) {\r\n const [yearStr, periodStr] =\r\n periodString?.split(isSemiAnnualEarning ? SEMI_ANNUAL_DELIMITER : QUARTAL_DELIMITER) ?? []\r\n const year = Number.parseInt(yearStr)\r\n const period = Number.parseInt(periodStr)\r\n\r\n if (isNaN(year) || isNaN(period)) {\r\n return { year: null, period: null }\r\n }\r\n\r\n return { year, period }\r\n}\r\n\r\nfunction getYearInt(periodString: string | null) {\r\n const [yearStr] = periodString?.split(FISCAL_YEAR_MARK) ?? []\r\n const year = Number.parseInt(yearStr)\r\n return isNaN(year) ? null : year\r\n}\r\n\r\nexport function getFormattedPeriodValue(\r\n periodString: string | null,\r\n isAnnualEarning: boolean,\r\n isSemiAnnualEarning: boolean\r\n) {\r\n if (isAnnualEarning) {\r\n const year = getYearInt(periodString)\r\n return `${FISCAL_YEAR_MARK} ${year}`\r\n }\r\n\r\n const { year, period } = getYearAndPeriodInt(periodString, isSemiAnnualEarning)\r\n if (year === null || period === null) {\r\n return null\r\n }\r\n\r\n return `${isSemiAnnualEarning ? SEMI_ANNUAL_DELIMITER : QUARTAL_DELIMITER}${period} ${year}`\r\n}\r\n\r\nexport function formatQuarterName(fiscalPeriod: string) {\r\n return `${fiscalPeriod.substring(4, 6)} ‘${fiscalPeriod.substring(2, 4)}`\r\n}\r\n\r\nexport function formatYearName(fiscalPeriod: string) {\r\n return `${FISCAL_YEAR_MARK} ‘${fiscalPeriod.substring(2, 4)}`\r\n}\r\n\r\nexport function formatFiscalName(fiscalPeriod: string) {\r\n return fiscalPeriod.endsWith(FISCAL_YEAR_MARK) ? formatYearName(fiscalPeriod) : formatQuarterName(fiscalPeriod)\r\n}\r\n\r\nexport function adjustEstimate(value: number, estimateType: EarningsEstimateType) {\r\n return estimateType === EarningsEstimateType.sales ? value * 1_000_000 : value\r\n}\r\n","import { decodeQueryString, encodeQueryString } from '../../../../app/queryString'\r\nimport { SubMenuTabs } from '../../../components/SubMenu/SubMenuTabs'\r\nimport { QuoteSubview } from '../types'\r\n\r\nexport const FINANCIALS_SECTION_LABELS = {\r\n [QuoteSubview.Revenue]: 'Revenue',\r\n [QuoteSubview.Dividends]: 'Dividends',\r\n [QuoteSubview.Earnings]: 'Earnings',\r\n [QuoteSubview.Forecast]: 'Forecast',\r\n}\r\n\r\nconst FINANCIAL_MENU_TABS: Array = [\r\n QuoteSubview.Dividends,\r\n QuoteSubview.Earnings,\r\n QuoteSubview.Revenue,\r\n QuoteSubview.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 * 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","import { millisecondsInHour, millisecondsInMinute } from \"../constants/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, options) {\n var _options$additionalDi;\n requiredArgs(1, arguments);\n var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2');\n }\n if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n return new Date(NaN);\n }\n var dateStrings = splitDateString(argument);\n var date;\n if (dateStrings.date) {\n var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n if (!date || isNaN(date.getTime())) {\n return new Date(NaN);\n }\n var timestamp = date.getTime();\n var time = 0;\n var offset;\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) {\n return new Date(NaN);\n }\n }\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n var dirtyDate = new Date(timestamp + time);\n // js parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n var result = new Date(0);\n result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n return result;\n }\n return new Date(timestamp + time + offset);\n}\nvar patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\nfunction splitDateString(dateString) {\n var dateStrings = {};\n var array = dateString.split(patterns.dateTimeDelimiter);\n var timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(dateStrings.date.length, dateString.length);\n }\n }\n if (timeString) {\n var token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], '');\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n return dateStrings;\n}\nfunction parseYear(dateString, additionalDigits) {\n var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n var captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return {\n year: NaN,\n restDateString: ''\n };\n var year = captures[1] ? parseInt(captures[1]) : null;\n var century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length)\n };\n}\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n var captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n var isWeekDate = !!captures[4];\n var dayOfYear = parseDateUnit(captures[1]);\n var month = parseDateUnit(captures[2]) - 1;\n var day = parseDateUnit(captures[3]);\n var week = parseDateUnit(captures[4]);\n var dayOfWeek = parseDateUnit(captures[5]) - 1;\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n var date = new Date(0);\n if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\nfunction parseTime(timeString) {\n var captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n var hours = parseTimeUnit(captures[1]);\n var minutes = parseTimeUnit(captures[2]);\n var seconds = parseTimeUnit(captures[3]);\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;\n}\nfunction parseTimeUnit(value) {\n return value && parseFloat(value.replace(',', '.')) || 0;\n}\nfunction parseTimezone(timezoneString) {\n if (timezoneString === 'Z') return 0;\n var captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n var sign = captures[1] === '+' ? -1 : 1;\n var hours = parseInt(captures[2]);\n var minutes = captures[3] && parseInt(captures[3]) || 0;\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n var date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n var fourthOfJanuaryDay = date.getUTCDay() || 7;\n var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\nfunction validateDate(year, month, date) {\n return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}"],"names":["ChipSwitch","_ref","children","label","size","rounding","_jsxs","className","_jsx","Paragraph","React","map","child","_child$props$theme","type","Button","theme","props","classnames","disabled","active","ChipSwitchButton","SubMenu","leftContent","middleContent","rightContent","classNames","isRedesignEnabled","SubMenuTabs","items","_ref2","href","isActive","reloadDocument","as","Link","to","CartesianGrid","vertical","RechartsCartesianGrid","stroke","strokeDasharray","displayName","DATE_FORMAT_MMMdd","dateAxisFormatter","value","outFormat","parseAsNY","Number","isFinite","Date","getTime","date","getDate","format","XAxis","RechartsXAxis","defaultProps","tickLine","axisLine","dy","tick","fontSize","fontWeight","fill","TICK_STYLE","YAxis","render","RechartsYAxis","this","_defineProperty","tickFormatter","shortFormatNumber","FinancialsTableContext","settings","setSettings","scrollInfo","undefined","useFinancialsTableContext","FinancialsTableContextProvider","cookieKey","defaultSettings","setScrollInfo","cookieValue","decodeURIComponent","getCookie","length","JSON","parse","Provider","yPosition","window","scrollY","setCookieRequest","stringify","FinancialsTableRow","data","columns","subColumns","onVisibilityChange","isFirst","isLast","id","labelElement","labelColumnClassName","isSelected","color","subData","isLabelColumnSticky","TableBody","onMouseDown","TableRow","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","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","KeyStatVariant","KeyStat","datapoint","subdatapoint","sublabel","variant","Default","Positive","Negative","KeyStatsVariant","KeyStats","Compact","Stretched","ESTIMATE_TYPE_LABELS","EarningsEstimateType","eps","epsGaap","sales","DailyChange","dateClassName","reportReaction","when","reaction","reactions","price","prevPrice","dateFns","diff","_Fragment","RedGreenText","formatNumber","priceDiff","PerformanceTooltip","estimateType","earningsDate","reportDate","fiscalEndDate","estimate","reported","epsEstimate","epsActual","epsReportedEstimate","epsReportedActual","salesEstimate","salesActual","getEarningsDateSuffix","fiscalPeriod","substring","surprise","PriceReactionWhen","MINUS_DAYS_3","MINUS_DAYS_2","MINUS_DAYS_1","CLOSE","PLUS_DAYS_1","PLUS_DAYS_2","PLUS_DAYS_3","getSurpriseDotColor","ColorVariant","gray","green","red","getColor","RedGreenDot","cx","cy","onMouseEnter","onMouseLeave","Dot","r","default","strokeWidth","CustomCursor","barWithGapWidth","points","x","Rectangle","width","CURSOR_STYLE","TRANSPARENT_CURSOR","CHART_GRID_COMMON_PROPS","EarningsChart","annualData","isCompact","reportReactions","setIsActive","activeIndex","setActiveIndex","reverseTooltipDirection","setReverseTooltipDirection","columnsCount","BAR_WIDTH_NARROW","BAR_WIDTH","estimateColumnsCount","hasBarChart","hasLineChart","filter","_ref3","isEstimate","some","_ref4","EarningValueProperty","Surprise","_ref5","chartData","_ref6","_ref7","find","Object","chartWidth","BAR_GAP","EXTRA_WIDTH","LABELS_WIDTH","estimateAreaWidth","barLessChartYMargin","chartGridCommonLeftProps","style","right","ComposedChart","height","CHART_HEIGHT","margin","CHART_MARGINS","left","stackOffset","onMouseMove","mouseEvent","activeTooltipIndex","clientX","yAxisId","tickMargin","interval","orientation","LABELS_MARGIN","Tooltip","wrapperStyle","TOOLTIP_WRAPPER_STYLE","position","y","allowEscapeViewBox","reverseDirection","offset","isAnimationActive","cursor","content","_ref8","Bar","name","Cell","radius","EpsEstimate","EpsReportedEstimate","SalesEstimate","includes","Line","dot","activeDot","connectNulls","getColumns","yearKeys","commonClassName","Right","_annualDividend$value","_annualDividend$perce","annualDividend","annualDividendValue","annualDividendValuePercent","percentageValue","defaultValue","fractions","EarningsDataEnum","analysts","_annualDividend$value2","_annualDividendValue$","toFixed","yoyChange","_annualDividend$value3","yoyChangePct","_annualDividend$value4","_annualDividendValue$2","widgetToEstimateType","EarningsWidgetCategory","Eps","EpsGaap","Revenue","EarningsWidget","earningsWidgetCategory","priceReactionData","setAnnualData","mapData","earningsTimeframe","flatMap","arr","indexOf","EARNINGS_WIDGET_LABELS","setIsCompact","useTableColumns","_document$getElementB","removeProperty","onResize","addEventListener","removeEventListener","minWidth","revenue","shownSubdata","WidgetHeader","TableHead","TableHeader","Heading","level","bottom","textAnchor","outline","zIndex","border","FinvizSettings","hasDarkTheme","colors","opacity","EarningsTimeframeEnum","dark","violet","orange","blue","getEffectiveTimeframe","quarterlyData","quarterly","annual","isQuarterlyTimeframe","earningsData","earningsAnnualData","dataValues","isSemiAnnualEarning","getIsSemiAnnualEarning","earningsArray","SalesActual","isGaap","EpsReportedActual","EpsActual","getEarningsDataTemplate","category","numOfEstimates","periodDataRaw","periodData","yearPeriod","actualValue","estimateValue","SalesAnalysts","EpsReportedAnalysts","EpsAnalysts","getIsEarningEstimate","slice","earningsCategory","yoyData","yoyGrowthLabel","anualDividend","_yoyData$change$anual","_yoyData$changePct$an","getMonthlyTicks","startingTimestamp","endingTimestamp","midMonth","ticks","endingDate","day","getFullYear","getMonth","dateOrNextMonth","push","HighlightedBoxColor","LIGHT_BG_COLORS","DARK_BG_COLORS","LIGHT_TEXT_COLORS","DARK_TEXT_COLORS","HighlightedBox","bgColorsList","textColorsList","backgroundColor","EarningsColor","EarningsEstimateTypeLabels","EARNINGS_DATE_FORMAT","PRICE_REVISIONS_CHART_HEIGHT","PRICE_REVISIONS_YAXIS_WIDTH","PRICE_REVISIONS_TICK_COUNT","UPDOWN_REVISIONS_CHART_HEIGHT","UPDOWN_REVISIONS_TICK_COUNT","FISCAL_YEAR_MARK","SETTINGS_COOKIE_KEY","DEFAULT_SETTINGS","PriceReactionDataEnum","getColorForValue","DarkGreen","MediumGreen","LightGreen","Neutral","LightRed","MediumRed","DarkRed","RsiValue","getEarningsColor","axis","downBar","lowHigh","upBar","earning","every","getChartLink","ticker","chartStartDate","chartEndDate","range","anchorDate","timeframe","TIMEFRAME","i30","d","encodeQueryString","t","p","l","mapPriceReactionData","result","padding","target","Icon","keys","formatQuarterName","spyPriceDiff","rsi","round","QUARTAL_DELIMITER","SEMI_ANNUAL_DELIMITER","earnings","_earnings$","getYearAndPeriodInt","periodString","_periodString$split","yearStr","periodStr","split","period","isNaN","getFormattedPeriodValue","isAnnualEarning","_periodString$split2","getYearInt","formatYearName","formatFiscalName","endsWith","adjustEstimate","FINANCIALS_SECTION_LABELS","QuoteSubview","Dividends","Earnings","Forecast","FINANCIAL_MENU_TABS","getFinancialMenuTabs","searchParams","decodeQueryString","ty","QuoteFinancialsTabMenu","QuoteStickySubMenu","parseISO","argument","options","_options$additionalDi","additionalDigits","RangeError","prototype","toString","NaN","dateStrings","dateString","timeString","patterns","dateTimeDelimiter","test","timeZoneDelimiter","substr","token","timezone","exec","time","replace","splitDateString","parseYearResult","regex","RegExp","captures","match","restDateString","century","parseYear","dateRegex","isWeekDate","dayOfYear","parseDateUnit","month","week","dayOfWeek","_year","validateWeekDate","isoWeekYear","setUTCFullYear","fourthOfJanuaryDay","getUTCDay","setUTCDate","getUTCDate","dayOfISOWeekYear","daysInMonths","isLeapYearIndex","validateDate","validateDayOfYearDate","max","parseDate","timestamp","timeRegex","hours","parseTimeUnit","minutes","seconds","validateTime","parseTime","dirtyDate","setFullYear","getUTCFullYear","getUTCMonth","setHours","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","timezoneString","timezoneRegex","_hours","validateTimezone","parseTimezone","parseFloat"],"sourceRoot":""}