{"version":3,"file":"1769.091790a5.js","mappings":"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","sources":["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/ManualGrid.tsx","webpack://@finviz/website/./js/main/components/chart/XAxis.tsx","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/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"],"sourcesContent":["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 classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\ninterface ManualGridProps extends React.HTMLProps {\r\n numberOfLines?: number\r\n visibleLeftAxes?: number\r\n estimateAreaWidth?: number\r\n rightOffset?: number\r\n}\r\n\r\nfunction ManualGridComponent(\r\n {\r\n numberOfLines = 5,\r\n visibleLeftAxes = 0,\r\n rightOffset = 32,\r\n estimateAreaWidth,\r\n children,\r\n ...props\r\n }: React.PropsWithChildren,\r\n ref: React.ForwardedRef\r\n) {\r\n const lines = Array.from({ length: numberOfLines })\r\n\r\n return (\r\n
\r\n \r\n {lines.map((_, index) => (\r\n
\r\n ))}\r\n {!!estimateAreaWidth && (\r\n \r\n )}\r\n
\r\n\r\n {children}\r\n
\r\n )\r\n}\r\n\r\nexport const ManualGrid = React.forwardRef(ManualGridComponent)\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 enum DateFormat {\r\n MonthSingleChar = 'MMMMM',\r\n MonthShort = 'MMM',\r\n MonthShortDayNum = 'MMM dd',\r\n MonthShortDayNumYearFull = 'MMM dd yyyy',\r\n}\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 breakOnYear = false,\r\n}: {\r\n value: any\r\n outFormat: string\r\n parseAsNY?: boolean\r\n breakOnYear?: 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\r\n if (breakOnYear && date.getMonth() === 0) {\r\n if (outFormat === DateFormat.MonthSingleChar) return date.getFullYear().toString().substring(2)\r\n return date.getFullYear().toString()\r\n }\r\n\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 dataKey: 'date',\r\n scale: 'time',\r\n type: 'number',\r\n interval: 'equidistantPreserveStart',\r\n }\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 { ChartWrapperContext } from '../../../components/chart/ChartWrapper'\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), { suffix: '%' })})\r\n \r\n
\r\n \r\n )\r\n}\r\n\r\ntype PerformanceTooltipProps = {\r\n payload?: Array<{ payload?: ChartYearData }>\r\n estimateType: EarningsEstimateType\r\n}\r\n\r\nexport function PerformanceTooltip({ estimateType, payload }: PerformanceTooltipProps) {\r\n const { isTooltipActive } = React.useContext(ChartWrapperContext)\r\n const data = payload?.[0]?.payload\r\n\r\n if (!estimateType || !isTooltipActive || !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)} (\r\n {formatNumber(Math.abs((data.surprise / estimate) * 100), { suffix: '%' })})\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 React from 'react'\r\nimport { ComposedChart } from 'recharts'\r\n\r\nimport { Bar } from '../../../components/chart/Bar'\r\nimport { ChartContext } from '../../../components/chart/ChartWrapper'\r\nimport { CursorBar } from '../../../components/chart/Cursor'\r\nimport { Line } from '../../../components/chart/Line'\r\nimport { RedGreenDot } from '../../../components/chart/LineDot'\r\nimport { ManualGrid } from '../../../components/chart/ManualGrid'\r\nimport { Tooltip } from '../../../components/chart/Tooltip'\r\nimport { YAxis } from '../../../components/chart/YAxis'\r\nimport { ChartItemColorType } from '../../../components/chart/constants'\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 EXTRA_WIDTH,\r\n LABELS_MARGIN,\r\n LABELS_WIDTH,\r\n} from '../constants'\r\nimport { EarningReportReaction, EarningValueProperty, EarningsDataType, EarningsEstimateType } from '../types'\r\nimport { tickFormatter } from '../utils'\r\nimport { PerformanceTooltip } from './PerformanceTooltip'\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\nexport function EarningsChart({ annualData, estimateType, isCompact, reportReactions }: Props) {\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 return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n }\r\n content={}\r\n />\r\n {annualData.map(({ id, isSelected, color }) => {\r\n if (!isSelected) return null\r\n\r\n if (id !== EarningValueProperty.Surprise) {\r\n return (\r\n \r\n [\r\n EarningValueProperty.EpsEstimate,\r\n EarningValueProperty.EpsReportedEstimate,\r\n EarningValueProperty.SalesEstimate,\r\n ].includes(id)\r\n ? 'gray'\r\n : (color as ChartItemColorType)\r\n }\r\n />\r\n )\r\n }\r\n\r\n return (\r\n }\r\n activeDot={}\r\n color={color as ChartItemColorType}\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","export 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\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 { 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 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.darkGray, 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.darkGray, 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"],"names":["SubMenu","_ref","leftContent","middleContent","rightContent","props","_jsx","className","classNames","children","_jsxs","isRedesignEnabled","SubMenuTabs","items","size","map","_ref2","label","href","isActive","reloadDocument","Button","as","Link","to","theme","rounding","active","CartesianGrid","vertical","RechartsCartesianGrid","stroke","strokeDasharray","displayName","ManualGridComponent","ref","numberOfLines","visibleLeftAxes","rightOffset","estimateAreaWidth","lines","Array","from","length","style","right","_","index","width","ManualGrid","React","DateFormat","dateAxisFormatter","value","outFormat","parseAsNY","breakOnYear","Number","isFinite","Date","getTime","date","getDate","getMonth","MonthSingleChar","getFullYear","toString","substring","format","XAxis","RechartsXAxis","defaultProps","tickLine","axisLine","dy","tick","fontSize","fontWeight","fill","dataKey","scale","type","interval","TABLE_ROW_HIGHT","useFinancialsTablePersistScrollPosition","categoryAreasCounts","dataKeys","settings","scrollInfo","useFinancialsTableContext","previousSettings","usePrevious","widgetSettingsSectionElement","document","getElementById","financialsTables","getElementsByClassName","widgetSettingsSectionElementTopPosition","getBoundingClientRect","top","lastAbsDiffInPx","forEach","financialTableElement","i","absDiffInPx","Math","abs","areas","sign","shift","window","scrollTo","scrollX","yPosition","KeyStatVariant","KeyStat","datapoint","subdatapoint","sublabel","variant","Default","classnames","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","suffix","PerformanceTooltip","_payload$","estimateType","payload","isTooltipActive","ChartWrapperContext","data","earningsDate","reportDate","fiscalEndDate","estimate","reported","epsEstimate","epsActual","epsReportedEstimate","epsReportedActual","salesEstimate","salesActual","getEarningsDateSuffix","fiscalPeriod","shortFormatNumber","surprise","PriceReactionWhen","MINUS_DAYS_3","MINUS_DAYS_2","MINUS_DAYS_1","CLOSE","PLUS_DAYS_1","PLUS_DAYS_2","PLUS_DAYS_3","EarningsChart","annualData","isCompact","reportReactions","columnsCount","values","barWidth","BAR_WIDTH_NARROW","BAR_WIDTH","estimateColumnsCount","hasBarChart","hasLineChart","filter","isEstimate","some","_ref3","id","isSelected","EarningValueProperty","Surprise","_ref4","chartData","_ref5","_ref6","year","find","Object","chartWidth","BAR_GAP","EXTRA_WIDTH","LABELS_WIDTH","barLessChartYMargin","ChartContext","ComposedChart","height","CHART_HEIGHT","margin","CHART_MARGINS","left","stackOffset","YAxis","yAxisId","tickFormatter","tickMargin","orientation","LABELS_MARGIN","textAnchor","Tooltip","cursor","CursorBar","numberOfDatapoints","content","_ref7","color","Bar","EpsEstimate","EpsReportedEstimate","SalesEstimate","includes","Line","dot","RedGreenDot","activeDot","getColumns","yearKeys","commonClassName","columns","name","align","TableAlign","Right","renderColumn","_annualDividend$value","_annualDividend$perce","annualDividend","annualDividendValue","annualDividendValuePercent","percentageValue","defaultValue","fractions","subColumns","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","getIsCompact","useTableColumns","_document$getElementB","removeProperty","onResize","addEventListener","removeEventListener","minWidth","undefined","FinancialsWidget","revenue","subData","shownSubdata","header","WidgetHeader","tableHead","TableHead","TableHeader","Left","column","onVisibilityChange","item","Heading","level","bottom","EarningsTimeframeEnum","getEffectiveTimeframe","quarterlyData","quarterly","annual","isQuarterlyTimeframe","earningsData","earningsAnnualData","dataValues","isSemiAnnualEarning","getIsSemiAnnualEarning","earningsArray","ColorVariant","gray","SalesActual","violet","darkGray","isGaap","EpsReportedActual","EpsActual","orange","blue","getEarningsDataTemplate","category","numOfEstimates","labelColumnClassName","periodDataRaw","periodData","yearPeriod","actualValue","estimateValue","SalesAnalysts","EpsReportedAnalysts","EpsAnalysts","getIsEarningEstimate","slice","earningsCategory","yoyData","getYoYData","yoyGrowthLabel","anualDividend","_yoyData$change$anual","change","_yoyData$changePct$an","changePct","getMonthlyTicks","startingTimestamp","endingTimestamp","midMonth","ticks","endingDate","day","dateOrNextMonth","push","HighlightedBoxColor","LIGHT_BG_COLORS","colors","DARK_BG_COLORS","LIGHT_TEXT_COLORS","DARK_TEXT_COLORS","HighlightedBox","bgColorsList","FinvizSettings","hasDarkTheme","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","r","l","mapPriceReactionData","result","labelElement","padding","target","Icon","keys","formatQuarterName","spyPriceDiff","rsi","round","QUARTAL_DELIMITER","SEMI_ANNUAL_DELIMITER","earnings","_earnings$","getYearAndPeriodInt","periodString","_periodString$split","yearStr","periodStr","split","parseInt","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"],"sourceRoot":""}