{"version":3,"file":"earnings.5dc1525b.js","mappings":"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","sources":["webpack://@finviz/website/./js/main/modules/earnings/EarningsHeader.tsx","webpack://@finviz/website/./js/main/modules/earnings/EstimateBeat.tsx","webpack://@finviz/website/./js/main/modules/earnings/EstimateBeats.tsx","webpack://@finviz/website/./js/main/modules/forecast/charts/ChartMonths.tsx","webpack://@finviz/website/./js/main/modules/earnings/EstimateTypeChipSwitch.tsx","webpack://@finviz/website/./js/main/modules/earnings/FiscalPeriodSelector.tsx","webpack://@finviz/website/./js/main/modules/earnings/charts/PriceRevisionTooltip.tsx","webpack://@finviz/website/./js/main/modules/earnings/charts/PriceRevisionsChart.tsx","webpack://@finviz/website/./js/main/modules/earnings/charts/UpDownRevisionsChart.tsx","webpack://@finviz/website/./js/main/modules/earnings/EstimateRevisions.tsx","webpack://@finviz/website/./js/main/modules/earnings/LatestRevision.tsx","webpack://@finviz/website/./js/main/modules/earnings/LatestRevisions.tsx","webpack://@finviz/website/./js/main/modules/earnings/PriceReactionTableRow.tsx","webpack://@finviz/website/./js/main/modules/earnings/PriceReactionTable.tsx","webpack://@finviz/website/./js/main/modules/earnings/OhlcPriceChange.tsx","webpack://@finviz/website/./js/main/modules/earnings/usePriceReactionColumns.tsx","webpack://@finviz/website/./js/main/modules/earnings/PriceReaction.tsx","webpack://@finviz/website/./js/main/modules/earnings/WidgetSettingsSection.tsx","webpack://@finviz/website/./js/main/modules/earnings/index.tsx"],"sourcesContent":["import * as dateFns from 'date-fns'\r\nimport { addMonths, parseISO } from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { getDate, getEarningsDateSuffix } from '../../../app/header/utils'\r\nimport { KeyStat } from '../../components/keystats/KeyStat'\r\nimport { KeyStats } from '../../components/keystats/KeyStats'\r\nimport { shortFormatDollar } from '../../util'\r\nimport { EARNINGS_DATE_FORMAT } from './constants'\r\nimport { EarningsData } from './types'\r\nimport { getFormattedPeriodValue, getIsEarningEstimate, getIsSemiAnnualEarning } from './utils'\r\n\r\ntype WidgetHeaderProps = Pick\r\n\r\nexport default function EarningsHeader({ earningsDate, earningsData }: WidgetHeaderProps) {\r\n const isSemiAnnualEarning = getIsSemiAnnualEarning(earningsData)\r\n const nextReportInfo = React.useMemo(() => {\r\n const parsedEarningsDate = earningsDate ? parseISO(earningsDate) : null\r\n const firstEstimateEarningIndex = earningsData.findIndex(getIsEarningEstimate)\r\n const firstEstimateEarning = earningsData[firstEstimateEarningIndex] ?? null\r\n const lastEarning = earningsData[firstEstimateEarningIndex - 1] ?? null\r\n\r\n if (lastEarning === null || firstEstimateEarning === null) {\r\n return {\r\n date: null,\r\n nextPeriod: null,\r\n dateSuffix: '',\r\n eps: null,\r\n gaapEps: null,\r\n revenue: null,\r\n }\r\n }\r\n\r\n const lastEarningDate = lastEarning.earningsDate\r\n const shouldShowEstimatedNextEarningsDate = !(\r\n parsedEarningsDate && getDate(parsedEarningsDate).getTime() >= Date.now()\r\n )\r\n const estimateEarningsDate = lastEarningDate\r\n ? addMonths(parseISO(lastEarningDate), isSemiAnnualEarning ? 6 : 3)\r\n : null\r\n\r\n return {\r\n date: shouldShowEstimatedNextEarningsDate ? estimateEarningsDate : parsedEarningsDate,\r\n nextPeriod: getFormattedPeriodValue(firstEstimateEarning.fiscalPeriod, isSemiAnnualEarning),\r\n dateSuffix: shouldShowEstimatedNextEarningsDate ? '(Est)' : getEarningsDateSuffix(parsedEarningsDate),\r\n eps: firstEstimateEarning?.epsEstimate,\r\n gaapEps: firstEstimateEarning.epsReportedEstimate,\r\n revenue: firstEstimateEarning?.salesEstimate,\r\n }\r\n }, [earningsDate, earningsData, isSemiAnnualEarning])\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","import React from 'react'\r\n\r\ninterface Props {\r\n beats: number\r\n color: string\r\n label: string\r\n total: number\r\n}\r\n\r\nexport default function EstimateBeat({ beats, color, label, total }: Props) {\r\n const percent = ((beats / total) * 100).toFixed(0)\r\n return (\r\n
\r\n
\r\n {percent}%\r\n
\r\n
\r\n
\r\n {label} beats the estimate\r\n
\r\n
\r\n \r\n {beats}/{total}\r\n {' '}\r\n last quarters\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React, { useMemo } from 'react'\r\n\r\nimport colors from '../../../../../config/colors'\r\nimport { Earning } from '../earnings-common/types'\r\nimport EstimateBeat from './EstimateBeat'\r\n\r\nconst QUARTERS_TO_COMPARE = 8\r\n\r\ninterface Props {\r\n earningsData: Earning[]\r\n}\r\n\r\nexport default function EstimateBeats({ earningsData }: Props) {\r\n const data = useMemo(() => {\r\n let quarters = 0\r\n let epsBeats = 0\r\n let gaapEpsBeats = 0\r\n let revenueBeats = 0\r\n for (let idx = earningsData.length - 1; idx > 0; idx--) {\r\n if (quarters >= QUARTERS_TO_COMPARE) {\r\n break\r\n }\r\n const earning = earningsData[idx]\r\n if (earning.epsActual !== null || earning.epsReportedActual !== null || earning.salesActual !== null) {\r\n quarters += 1\r\n if (earning.epsActual !== null && earning.epsEstimate !== null && earning.epsActual > earning.epsEstimate) {\r\n epsBeats++\r\n }\r\n if (\r\n earning.epsReportedActual !== null &&\r\n earning.epsReportedEstimate !== null &&\r\n earning.epsReportedActual > earning.epsReportedEstimate\r\n ) {\r\n gaapEpsBeats++\r\n }\r\n if (\r\n earning.salesActual !== null &&\r\n earning.salesEstimate !== null &&\r\n earning.salesActual > earning.salesEstimate\r\n ) {\r\n revenueBeats++\r\n }\r\n }\r\n }\r\n return {\r\n epsBeats,\r\n gaapEpsBeats,\r\n revenueBeats,\r\n quarters,\r\n }\r\n }, [earningsData])\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n","import { differenceInMonths } from 'date-fns'\r\n\r\nimport { PRICE_REVISIONS_CHART_WIDTH, PRICE_REVISIONS_YAXIS_WIDTH } from '../../earnings/constants'\r\nimport { RevisionsChartData } from '../../earnings/types'\r\n\r\nconst LEFT_MARGIN = 10\r\nconst RIGHT_MARGIN = 4\r\n\r\ntype Props = {\r\n chartData: RevisionsChartData\r\n}\r\n\r\nexport function ChartMonths({ chartData }: Props) {\r\n const width = PRICE_REVISIONS_CHART_WIDTH - 2 * PRICE_REVISIONS_YAXIS_WIDTH - LEFT_MARGIN - RIGHT_MARGIN\r\n const startDate = chartData[0].date\r\n const endDate = chartData[chartData.length - 1].date\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const monthsDiff = differenceInMonths(endDate, startDate)\r\n\r\n return
\r\n}\r\n","import React from 'react'\r\n\r\nimport { ChipSwitch, ChipSwitchButton } from '../../components/ChipSwitch'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { EarningsEstimateType } from '../earnings-common/types'\r\nimport { EarningsSettings } from './types'\r\n\r\ntype Props = {\r\n label?: string\r\n}\r\n\r\nexport function EstimateTypeChipSwitch({ label }: Props) {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof EarningsSettings, value: EarningsSettings[keyof EarningsSettings]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n const estimateType = settings.estimateType\r\n\r\n return (\r\n \r\n toggleSetting('estimateType', EarningsEstimateType.eps)}\r\n >\r\n EPS\r\n \r\n toggleSetting('estimateType', EarningsEstimateType.epsGaap)}\r\n >\r\n GAAP EPS\r\n \r\n toggleSetting('estimateType', EarningsEstimateType.sales)}\r\n >\r\n Sales\r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Select } from '../../components'\r\nimport { formatFiscalName } from './utils'\r\n\r\ninterface Props {\r\n selected: string\r\n fiscalPeriods: string[]\r\n onSelect: (fiscalPeriod: string) => void\r\n}\r\n\r\nexport function FiscalPeriodSelector(props: Props) {\r\n const [selected, setSelected] = React.useState(props.selected)\r\n\r\n React.useEffect(() => {\r\n setSelected(props.selected)\r\n }, [props.selected])\r\n\r\n const fiscalPeriods = React.useMemo(\r\n () =>\r\n props.fiscalPeriods.map((fiscalPeriod) => ({\r\n value: fiscalPeriod,\r\n label: formatFiscalName(fiscalPeriod),\r\n })),\r\n [props.fiscalPeriods]\r\n )\r\n\r\n return (\r\n {\r\n setSelected(item.value)\r\n props.onSelect(item.value)\r\n }}\r\n isLoading={false}\r\n />\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport * as dateFns from 'date-fns'\r\nimport React, { PropsWithChildren } from 'react'\r\n\r\nimport { Icon } from '../../../components'\r\nimport { formatDollar, shortFormatDollar } from '../../../util'\r\nimport { EarningsEstimateType } from '../../earnings-common/types'\r\nimport { EARNINGS_DATE_FORMAT, EarningsColor, EarningsEstimateTypeLabels } from '../constants'\r\nimport { EarningRevisionWithDate } from '../types'\r\nimport { formatFiscalName, getEarningsColor } from '../utils'\r\n\r\nfunction formatEstimateLabel(estimateType: EarningsEstimateType, fiscalPeriod: string) {\r\n return `${formatFiscalName(fiscalPeriod)} ${EarningsEstimateTypeLabels[estimateType]} Estimate`\r\n}\r\n\r\nenum TooltipIcon {\r\n dot = 'dot',\r\n downArrow = 'downArrow',\r\n upArrow = 'upArrow',\r\n}\r\n\r\ntype TooltipRowProps = {\r\n color: string\r\n icon: TooltipIcon\r\n name: string\r\n}\r\n\r\nfunction TooltipRow({ color, icon, name, children }: PropsWithChildren) {\r\n return (\r\n
\r\n
\r\n \r\n {icon === TooltipIcon.upArrow && (\r\n \r\n )}\r\n {icon === TooltipIcon.downArrow && (\r\n \r\n )}\r\n {icon === TooltipIcon.dot && (\r\n \r\n )}\r\n {name}\r\n \r\n {children}\r\n
\r\n
\r\n )\r\n}\r\n\r\ntype Props = {\r\n estimateType: EarningsEstimateType\r\n isActive: boolean\r\n revision: EarningRevisionWithDate | undefined\r\n}\r\n\r\nexport function PriceRevisionTooltip({ estimateType, isActive, revision }: Props) {\r\n if (!estimateType || !isActive || !revision) return null\r\n\r\n return (\r\n
\r\n
\r\n {revision.date && dateFns.format(revision.date, EARNINGS_DATE_FORMAT)}\r\n
\r\n \r\n {shortFormatDollar(revision.mean)} ({shortFormatDollar(revision.low)}–{shortFormatDollar(revision.high)})\r\n \r\n \r\n {formatDollar(revision.price)}\r\n \r\n \r\n {revision.upRevisions}/{revision.estimates}\r\n \r\n \r\n {revision.downRevisions}/{revision.estimates}\r\n \r\n
\r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\nimport { Area, ComposedChart, Line, ResponsiveContainer, Tooltip, XAxis, YAxis } from 'recharts'\r\n\r\nimport { shortFormatNumber } from '../../../util'\r\nimport { EarningsEstimateType } from '../../earnings-common/types'\r\nimport {\r\n EarningsColor,\r\n PRICE_REVISIONS_CHART_HEIGHT,\r\n PRICE_REVISIONS_CHART_WIDTH,\r\n PRICE_REVISIONS_TICK_COUNT,\r\n PRICE_REVISIONS_YAXIS_WIDTH,\r\n REVISIONS_LEFT_TICK_STYLE,\r\n REVISIONS_RIGHT_TICK_STYLE,\r\n} from '../constants'\r\nimport { RevisionsChartData } from '../types'\r\nimport { getEarningsColor } from '../utils'\r\nimport { PriceRevisionTooltip } from './PriceRevisionTooltip'\r\n\r\nconst CHART_GRID_COMMON_PROPS = 'absolute border-t border-secondary left-11 right-10'\r\n\r\ntype Props = {\r\n activeIndex: number\r\n chartData: RevisionsChartData\r\n estimateType: EarningsEstimateType\r\n isActive: boolean\r\n onSetActiveIndex: (value: number) => void\r\n onSetIsActive: (value: boolean) => void\r\n}\r\n\r\nexport function PriceRevisionsChart({\r\n activeIndex,\r\n chartData,\r\n estimateType,\r\n isActive,\r\n onSetActiveIndex,\r\n onSetIsActive,\r\n}: Props) {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n onSetIsActive(true)\r\n }}\r\n onMouseLeave={() => {\r\n onSetIsActive(false)\r\n }}\r\n >\r\n \r\n {\r\n if (typeof props.activeTooltipIndex === 'number' && props.activeTooltipIndex !== activeIndex) {\r\n onSetActiveIndex(props.activeTooltipIndex)\r\n }\r\n }}\r\n onMouseLeave={() => {\r\n onSetActiveIndex(-1)\r\n }}\r\n >\r\n \r\n shortFormatNumber(value)}\r\n tickLine={false}\r\n type=\"number\"\r\n width={PRICE_REVISIONS_YAXIS_WIDTH}\r\n yAxisId=\"estimate\"\r\n />\r\n \r\n \r\n \r\n \r\n (\r\n \r\n )}\r\n cursor={isActive ? { stroke: getEarningsColor(EarningsColor.cursor) } : false}\r\n isAnimationActive={false}\r\n />\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\nimport { Bar, ComposedChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from 'recharts'\r\n\r\nimport {\r\n EarningsColor,\r\n PRICE_REVISIONS_CHART_WIDTH,\r\n PRICE_REVISIONS_YAXIS_WIDTH,\r\n REVISIONS_LEFT_TICK_STYLE,\r\n REVISIONS_RIGHT_TICK_STYLE,\r\n UPDOWN_REVISIONS_CHART_HEIGHT,\r\n UPDOWN_REVISIONS_TICK_COUNT,\r\n} from '../constants'\r\nimport { RevisionsChartData } from '../types'\r\nimport { getEarningsColor } from '../utils'\r\n\r\nconst CHART_GRID_COMMON_PROPS = 'absolute border-t border-secondary left-11 right-10'\r\n\r\nfunction absIntFormat(value: number): string {\r\n return Math.abs(value).toFixed()\r\n}\r\n\r\ntype Props = {\r\n activeIndex: number\r\n chartData: RevisionsChartData\r\n isActive: boolean\r\n onSetActiveIndex: (value: number) => void\r\n onSetIsActive: (value: boolean) => void\r\n}\r\n\r\nexport function UpDownRevisionsChart({ activeIndex, chartData, isActive, onSetActiveIndex, onSetIsActive }: Props) {\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 onSetIsActive(true)\r\n }}\r\n onMouseLeave={() => {\r\n onSetIsActive(false)\r\n }}\r\n >\r\n \r\n {\r\n if (typeof props.activeTooltipIndex === 'number' && props.activeTooltipIndex !== activeIndex) {\r\n onSetActiveIndex(props.activeTooltipIndex)\r\n }\r\n }}\r\n onMouseLeave={() => {\r\n onSetActiveIndex(-1)\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n null}\r\n cursor={isActive ? { stroke: getEarningsColor(EarningsColor.cursor) } : false}\r\n isAnimationActive={false}\r\n />\r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React, { useMemo } from 'react'\r\n\r\nimport { Heading, Paragraph } from '../../components'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { EarningsEstimateType } from '../earnings-common/types'\r\nimport { ChartMonths } from '../forecast/charts/ChartMonths'\r\nimport { EstimateTypeChipSwitch } from './EstimateTypeChipSwitch'\r\nimport { FiscalPeriodSelector } from './FiscalPeriodSelector'\r\nimport { PriceRevisionsChart } from './charts/PriceRevisionsChart'\r\nimport { UpDownRevisionsChart } from './charts/UpDownRevisionsChart'\r\nimport { FISCAL_YEAR_MARK, PRICE_REVISIONS_CHART_WIDTH } from './constants'\r\nimport { EarningsRevisionsByType, EarningsSettings, RevisionsChartData } from './types'\r\nimport { adjustEstimate } from './utils'\r\n\r\nfunction getDefaultFiscalPeriod(revisionData: EarningsRevisionsByType, estimateType: EarningsEstimateType) {\r\n const years = Object.keys(revisionData[estimateType].years)\r\n return years[years.length - 1]\r\n}\r\n\r\ninterface Props {\r\n revisionData: EarningsRevisionsByType\r\n}\r\n\r\nexport default function EstimateRevisions({ revisionData }: Props) {\r\n const [priceRevisionIsActive, setPriceRevisionIsActive] = React.useState(false)\r\n const [upDownRevisionIsActive, setUpDownRevisionIsActive] = React.useState(false)\r\n const [activeIndex, setActiveIndex] = React.useState(-1)\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const estimateType = settings.estimateType\r\n const prepFiscalPeriod = settings.fiscalPeriod\r\n ? settings.fiscalPeriod\r\n : getDefaultFiscalPeriod(revisionData, estimateType)\r\n\r\n const data = useMemo(() => {\r\n const chartData: RevisionsChartData = []\r\n const years = Object.keys(revisionData[estimateType].years)\r\n const quarters = Object.keys(revisionData[estimateType].quarters)\r\n const fiscalPeriods = [...years, ...quarters]\r\n let fiscalPeriod = prepFiscalPeriod\r\n if (!fiscalPeriods.includes(fiscalPeriod)) {\r\n fiscalPeriod = prepFiscalPeriod.endsWith(FISCAL_YEAR_MARK)\r\n ? years[years.length - 1]\r\n : quarters[quarters.length - 1]\r\n }\r\n\r\n const revisions = fiscalPeriod.endsWith(FISCAL_YEAR_MARK)\r\n ? revisionData[estimateType].years[fiscalPeriod]\r\n : revisionData[estimateType].quarters[fiscalPeriod]\r\n for (const revision of revisions) {\r\n chartData.push({\r\n ...revision,\r\n high: adjustEstimate(revision.high, estimateType),\r\n low: adjustEstimate(revision.low, estimateType),\r\n lowHigh: [adjustEstimate(revision.low, estimateType), adjustEstimate(revision.high, estimateType)],\r\n mean: adjustEstimate(revision.mean, estimateType),\r\n negDownRevisions: -revision.downRevisions,\r\n timestamp: revision.date.getTime(),\r\n })\r\n }\r\n return {\r\n chartData,\r\n fiscalPeriod,\r\n fiscalPeriods,\r\n }\r\n }, [estimateType, prepFiscalPeriod, revisionData])\r\n\r\n const isActive = priceRevisionIsActive || upDownRevisionIsActive\r\n\r\n return (\r\n
\r\n
\r\n \r\n Estimate Revisions\r\n \r\n
\r\n \r\n \r\n Period\r\n \r\n
\r\n setSettings({ ...settings, fiscalPeriod: selected })}\r\n />\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { shortFormatNumber } from '../../util'\r\nimport { EARNINGS_DATE_FORMAT } from './constants'\r\n\r\ninterface Props {\r\n downRevisions: number\r\n estimate: number\r\n label: string\r\n revisionDate: Date\r\n revisions: number\r\n upRevisions: number\r\n}\r\n\r\nexport default function LatestRevision({\r\n downRevisions,\r\n estimate,\r\n label,\r\n revisionDate,\r\n revisions,\r\n upRevisions,\r\n}: Props) {\r\n return (\r\n
\r\n
{label}
\r\n
Estimate
\r\n
{shortFormatNumber(estimate)}
\r\n
Up Revisions
\r\n
\r\n {upRevisions}/{revisions}\r\n
\r\n
Down Revisions
\r\n
\r\n {downRevisions}/{revisions}\r\n
\r\n
Revision Date
\r\n
{dateFns.format(revisionDate, EARNINGS_DATE_FORMAT)}
\r\n
\r\n )\r\n}\r\n","import React, { useMemo } from 'react'\r\n\r\nimport { Heading } from '../../components'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { EstimateTypeChipSwitch } from './EstimateTypeChipSwitch'\r\nimport LatestRevision from './LatestRevision'\r\nimport { EarningRevisionWithDate, EarningsRevisionsByType, EarningsSettings } from './types'\r\nimport { adjustEstimate, formatQuarterName, formatYearName } from './utils'\r\n\r\nfunction getLatestRevision(revisions: EarningRevisionWithDate[]): EarningRevisionWithDate | null {\r\n return revisions && revisions.length > 0 ? revisions[revisions.length - 1] : null\r\n}\r\n\r\ninterface Props {\r\n revisionData: EarningsRevisionsByType\r\n}\r\n\r\nexport default function LatestRevisions({ revisionData }: Props) {\r\n const { settings } = useFinancialsTableContext()\r\n\r\n const estimateType = settings.estimateType\r\n\r\n const data = useMemo(() => {\r\n const quarters = Object.keys(revisionData[estimateType].quarters)\r\n const years = Object.keys(revisionData[estimateType].years)\r\n const lastQuarterKey = quarters[quarters.length - 1]\r\n const semilastQuarterKey = quarters[quarters.length - 2]\r\n const lastYearKey = years[years.length - 1]\r\n const semilastYearKey = years[years.length - 2]\r\n return {\r\n lastQuarter: getLatestRevision(revisionData[estimateType].quarters[lastQuarterKey]),\r\n semilastQuarter: getLatestRevision(revisionData[estimateType].quarters[semilastQuarterKey]),\r\n lastYear: getLatestRevision(revisionData[estimateType].years[lastYearKey]),\r\n semilastYear: getLatestRevision(revisionData[estimateType].years[semilastYearKey]),\r\n }\r\n }, [estimateType, revisionData])\r\n\r\n return (\r\n
\r\n
\r\n \r\n Latest Revisions\r\n \r\n \r\n
\r\n
\r\n {data.semilastQuarter && (\r\n \r\n )}\r\n {data.lastQuarter && (\r\n \r\n )}\r\n {data.semilastYear && (\r\n \r\n )}\r\n {data.lastYear && (\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 { TableAlign, TableBody, TableCell, TableRow } from '../../components/Table'\r\nimport { PriceReactionColumnDefinition, PriceReactionRowDataType, PriceReactionSubColumnDefinition } from './types'\r\n\r\ntype PriceReactionTableRowProps = {\r\n data: PriceReactionRowDataType\r\n columns: PriceReactionColumnDefinition[]\r\n subColumns?: Record\r\n isFirst: boolean\r\n isLast: boolean\r\n}\r\n\r\nexport default function PriceReactionTableRow({\r\n data,\r\n columns,\r\n subColumns,\r\n isFirst,\r\n isLast,\r\n}: PriceReactionTableRowProps) {\r\n const { label, labelElement, labelColumnClassName, subData } = data\r\n const isBottomBorder = subData.length === 0 && isLast\r\n\r\n return (\r\n \r\n \r\n \r\n {labelElement ?? {label}}\r\n \r\n\r\n {columns.map((column, index, array) => {\r\n const isLastCell = index === array.length - 1\r\n return (\r\n \r\n {column.renderColumn(data)}\r\n \r\n )\r\n })}\r\n \r\n\r\n {subData.map((item, index, array) => {\r\n const isSubBottomBorder = index === array.length - 1 && isLast\r\n return (\r\n \r\n \r\n {item.labelElement ?? {item.label}}\r\n \r\n {subColumns?.[item.id].map((subcolumn, colIdx, colArray) => {\r\n const column = columns[colIdx]\r\n const isLastCell = colIdx === colArray.length - 1\r\n return (\r\n \r\n {subcolumn.renderColumn(item)}\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\n\r\nimport { Table, TableAlign, TableCell, TableFooter, TableHead, TableHeader } from '../../components/Table'\r\nimport PriceReactionTableRow from './PriceReactionTableRow'\r\nimport { PriceReactionColumnDefinition, PriceReactionRowDataType, PriceReactionSubColumnDefinition } from './types'\r\n\r\ntype PriceReactionTableProps<\r\n RowDataType extends PriceReactionRowDataType,\r\n ColumnDefinition extends PriceReactionColumnDefinition,\r\n> = {\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n subColumns?: Record\r\n}\r\n\r\nexport default function PriceReactionTable<\r\n RowDataType extends PriceReactionRowDataType,\r\n ColumnDefinition extends PriceReactionColumnDefinition,\r\n>({ columns, subColumns, data }: PriceReactionTableProps) {\r\n return (\r\n \r\n \r\n \r\n Report Date\r\n \r\n {columns.map((column) => (\r\n \r\n {column.name}\r\n \r\n ))}\r\n \r\n {data.map((row, index) => (\r\n \r\n ))}\r\n \r\n \r\n Daily change and RSI 14 are based on the report date for BMO releases and the following day for AMC releases.\r\n \r\n \r\n
\r\n )\r\n}\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) {\r\n return HighlightedBoxColor.Neutral\r\n } else if (value <= -10) {\r\n return HighlightedBoxColor.DarkRed\r\n } else if (value <= -5) {\r\n return HighlightedBoxColor.MediumRed\r\n } else if (value < 0) {\r\n return HighlightedBoxColor.LightRed\r\n } else if (value >= 10) {\r\n return HighlightedBoxColor.DarkGreen\r\n } else if (value >= 5) {\r\n return HighlightedBoxColor.MediumGreen\r\n } else {\r\n return HighlightedBoxColor.LightGreen\r\n }\r\n}\r\n\r\ninterface OhlcPriceChangeProps {\r\n className?: string\r\n value?: number | null\r\n}\r\n\r\nexport function OhlcPriceChange({ 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 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 { formatNumber } from '../../util'\r\nimport { PriceReactionWhen } from '../earnings-common/types'\r\nimport { OhlcPriceChange } from './OhlcPriceChange'\r\nimport { PriceReactionColumnsType, PriceReactionDataEnum, PriceReactionRowDataType } from './types'\r\n\r\nconst WHEN_LABELS: { [K in PriceReactionWhen]: string } = {\r\n [PriceReactionWhen.MINUS_DAYS_3]: '-3 Days',\r\n [PriceReactionWhen.MINUS_DAYS_2]: '-2 Days',\r\n [PriceReactionWhen.MINUS_DAYS_1]: '-1 Day',\r\n [PriceReactionWhen.OPEN]: 'Open',\r\n [PriceReactionWhen.HIGH]: 'High',\r\n [PriceReactionWhen.LOW]: 'Low',\r\n [PriceReactionWhen.CLOSE]: 'Close',\r\n [PriceReactionWhen.PLUS_DAYS_1]: '+1 Day',\r\n [PriceReactionWhen.PLUS_DAYS_2]: '+2 Days',\r\n [PriceReactionWhen.PLUS_DAYS_3]: '+3 Days',\r\n [PriceReactionWhen.PLUS_WEEK_1]: '+1 Week',\r\n [PriceReactionWhen.MINUS_WEEK_1]: '-1 Week',\r\n}\r\n\r\nconst PREV_DAYS_WHENS: PriceReactionWhen[] = [\r\n PriceReactionWhen.MINUS_DAYS_3,\r\n PriceReactionWhen.MINUS_DAYS_2,\r\n PriceReactionWhen.MINUS_DAYS_1,\r\n]\r\nconst OHLC_WHENS: PriceReactionWhen[] = [\r\n PriceReactionWhen.OPEN,\r\n PriceReactionWhen.HIGH,\r\n PriceReactionWhen.LOW,\r\n PriceReactionWhen.CLOSE,\r\n]\r\nconst NEXT_DAYS_WHENS: PriceReactionWhen[] = [\r\n PriceReactionWhen.PLUS_DAYS_1,\r\n PriceReactionWhen.PLUS_DAYS_2,\r\n PriceReactionWhen.PLUS_DAYS_3,\r\n]\r\nconst WEEK_WHENS: PriceReactionWhen[] = [PriceReactionWhen.PLUS_WEEK_1, PriceReactionWhen.MINUS_WEEK_1]\r\nconst ALL_WHENS = [...PREV_DAYS_WHENS, ...OHLC_WHENS, ...NEXT_DAYS_WHENS, ...WEEK_WHENS]\r\n\r\nconst SEPARATOR_HEADER = 'px-0 w-1'\r\nconst OHLC_HEADER = 'text-violet-500 dark:text-violet-300 font-semibold'\r\nconst OHLC_BOTTOM_BORDER = 'border-b-violet-500 dark:border-b-violet-300'\r\nconst OHLC_LEFT_BORDER = 'border-l-violet-500 dark:border-l-violet-300'\r\nconst OHLC_RIGHT_BORDER = 'border-r-violet-500 dark:border-r-violet-300'\r\nconst OHLC_TOP_BORDER = 'border-t-violet-500 dark:border-t-violet-300'\r\n\r\nconst WHEN_INDEXES = ALL_WHENS.reduce(\r\n (acc, val, idx) => {\r\n acc[val] = idx\r\n return acc\r\n },\r\n {} as { [K in PriceReactionWhen]: number }\r\n)\r\n\r\nconst getColumns = (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 renderPrice = (data: PriceReactionRowDataType, colIdx: number) => {\r\n const value = data.values && data.values[colIdx] && data.values[colIdx].value\r\n return {typeof value === 'number' ? formatNumber(value) : '—'}\r\n }\r\n\r\n const columns: PriceReactionColumnsType['columns'] = [\r\n ...PREV_DAYS_WHENS.map((when) => ({\r\n align: TableAlign.Right,\r\n className: classNames(commonClassName, { 'border-r': when === PriceReactionWhen.MINUS_DAYS_1 }),\r\n hasLeftBorder: when === PriceReactionWhen.MINUS_DAYS_3,\r\n hasRightBorder: when === PriceReactionWhen.MINUS_DAYS_1,\r\n hasRightSeparator: when === PriceReactionWhen.MINUS_DAYS_1,\r\n headerClassName: commonClassName,\r\n id: when,\r\n name: WHEN_LABELS[when],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[when]),\r\n })),\r\n {\r\n className: commonClassName,\r\n headerClassName: SEPARATOR_HEADER,\r\n id: 'separator1',\r\n isSeparator: true,\r\n name: '',\r\n renderColumn: () => null,\r\n },\r\n {\r\n align: TableAlign.Right,\r\n bottomBorderClassName: OHLC_BOTTOM_BORDER,\r\n className: classNames(commonClassName, 'border-l', OHLC_LEFT_BORDER),\r\n hasLeftBorder: true,\r\n hasLeftSeparator: true,\r\n headerClassName: classNames(commonClassName, OHLC_HEADER),\r\n id: PriceReactionWhen.OPEN,\r\n leftBorderClassName: OHLC_LEFT_BORDER,\r\n name: WHEN_LABELS[PriceReactionWhen.OPEN],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[PriceReactionWhen.OPEN]),\r\n topBorderClassName: OHLC_TOP_BORDER,\r\n },\r\n {\r\n align: TableAlign.Right,\r\n bottomBorderClassName: OHLC_BOTTOM_BORDER,\r\n className: commonClassName,\r\n headerClassName: classNames(commonClassName, OHLC_HEADER),\r\n id: PriceReactionWhen.HIGH,\r\n name: WHEN_LABELS[PriceReactionWhen.HIGH],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[PriceReactionWhen.HIGH]),\r\n topBorderClassName: OHLC_TOP_BORDER,\r\n },\r\n {\r\n align: TableAlign.Right,\r\n bottomBorderClassName: OHLC_BOTTOM_BORDER,\r\n className: commonClassName,\r\n headerClassName: classNames(commonClassName, OHLC_HEADER),\r\n id: PriceReactionWhen.LOW,\r\n name: WHEN_LABELS[PriceReactionWhen.LOW],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[PriceReactionWhen.LOW]),\r\n topBorderClassName: OHLC_TOP_BORDER,\r\n },\r\n {\r\n align: TableAlign.Right,\r\n bottomBorderClassName: OHLC_BOTTOM_BORDER,\r\n className: classNames(commonClassName, 'border-r', OHLC_RIGHT_BORDER),\r\n hasRightBorder: true,\r\n hasRightSeparator: true,\r\n headerClassName: classNames(commonClassName, OHLC_HEADER),\r\n id: PriceReactionWhen.CLOSE,\r\n name: WHEN_LABELS[PriceReactionWhen.CLOSE],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[PriceReactionWhen.CLOSE]),\r\n rightBorderClassName: OHLC_RIGHT_BORDER,\r\n topBorderClassName: OHLC_TOP_BORDER,\r\n },\r\n {\r\n className: commonClassName,\r\n headerClassName: SEPARATOR_HEADER,\r\n id: 'separator2',\r\n isSeparator: true,\r\n name: '',\r\n renderColumn: () => null,\r\n },\r\n ...NEXT_DAYS_WHENS.map((when) => ({\r\n align: TableAlign.Right,\r\n className: classNames(commonClassName, { 'border-l': when === PriceReactionWhen.PLUS_DAYS_1 }),\r\n hasLeftBorder: when === PriceReactionWhen.PLUS_DAYS_1,\r\n hasLeftSeparator: when === PriceReactionWhen.PLUS_DAYS_1,\r\n headerClassName: commonClassName,\r\n id: when,\r\n name: WHEN_LABELS[when],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[when]),\r\n })),\r\n ...WEEK_WHENS.map((when) => ({\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n hasLeftBorder: when === PriceReactionWhen.PLUS_WEEK_1,\r\n headerClassName: commonClassName,\r\n id: when,\r\n name: WHEN_LABELS[when],\r\n renderColumn: (data: PriceReactionRowDataType) => renderPrice(data, WHEN_INDEXES[when]),\r\n })),\r\n ]\r\n\r\n const subColumns: PriceReactionColumnsType['subColumns'] = {\r\n [PriceReactionDataEnum.priceDiff]: columns.map((column) => ({\r\n id: column.id,\r\n name: column.name,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n if (column.isSeparator) {\r\n return null\r\n }\r\n const colIdx = WHEN_INDEXES[column.id as PriceReactionWhen]\r\n const value = data.values && data.values[colIdx] && data.values[colIdx].value\r\n if (typeof value !== 'number') {\r\n return \r\n }\r\n if (OHLC_WHENS.includes(column.id as PriceReactionWhen)) {\r\n return {formatNumber(value, { showPlusSign: true })}%\r\n }\r\n return (\r\n \r\n {formatNumber(value, { showPlusSign: true })}%\r\n \r\n )\r\n },\r\n })),\r\n [PriceReactionDataEnum.spyPriceDiff]: columns.map((column) => ({\r\n id: column.id,\r\n name: column.name,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n renderColumn: (data) => {\r\n if (column.isSeparator) {\r\n return null\r\n }\r\n const colIdx = WHEN_INDEXES[column.id as PriceReactionWhen]\r\n const value = data.values && data.values[colIdx] && data.values[colIdx].value\r\n if (typeof value !== 'number') {\r\n return \r\n }\r\n return (\r\n \r\n {formatNumber(value, { showPlusSign: true })}%\r\n \r\n )\r\n },\r\n })),\r\n }\r\n\r\n return { columns, subColumns }\r\n}\r\n\r\nexport function usePriceReactionColumns(isCompact: boolean) {\r\n return React.useMemo(() => getColumns(isCompact), [isCompact])\r\n}\r\n","import React, { useMemo } from 'react'\r\n\r\nimport WidgetHeader from '../earnings-common/WidgetHeader'\r\nimport { EarningReportReaction } from '../earnings-common/types'\r\nimport PriceReactionTable from './PriceReactionTable'\r\nimport { EarningsRevisionsByType } from './types'\r\nimport { usePriceReactionColumns } from './usePriceReactionColumns'\r\nimport { mapPriceReactionData } from './utils'\r\n\r\ninterface Props {\r\n priceReactionData: EarningReportReaction[]\r\n revisionData: EarningsRevisionsByType\r\n}\r\n\r\nexport default function PriceReaction({ priceReactionData }: Props) {\r\n const { columns, subColumns } = usePriceReactionColumns(true)\r\n\r\n const data = useMemo(() => mapPriceReactionData(priceReactionData), [priceReactionData])\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { ChipSwitch, ChipSwitchButton } from '../../components/ChipSwitch'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { EarningsDataEnum, EarningsTimeframeEnum } from '../earnings-common/types'\r\nimport { EarningsSettings } from './types'\r\n\r\ninterface Props {\r\n isSemiAnnualEarning: boolean\r\n}\r\n\r\nexport default function WidgetSettingsSection({ isSemiAnnualEarning }: Props) {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof EarningsSettings, value: EarningsSettings[keyof EarningsSettings]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n const yoyGrowthLabel = React.useMemo(() => {\r\n const isQuarterlyTimeframe = settings.earningsTimeframe === EarningsTimeframeEnum.quarterly // EarningsTimeframeEnum.quarterly is used for both quarterly & semiannual\r\n\r\n if (isQuarterlyTimeframe) {\r\n return isSemiAnnualEarning ? 'SoS Growth' : 'QoQ Growth'\r\n }\r\n\r\n return 'YoY Growth'\r\n }, [isSemiAnnualEarning, settings.earningsTimeframe])\r\n\r\n return (\r\n
\r\n \r\n {\r\n toggleSetting(EarningsDataEnum.yoyChange, !settings[EarningsDataEnum.yoyChange])\r\n }}\r\n >\r\n {yoyGrowthLabel}\r\n \r\n {\r\n toggleSetting(EarningsDataEnum.yoyChangePct, !settings[EarningsDataEnum.yoyChangePct])\r\n }}\r\n >\r\n {`${yoyGrowthLabel} %`}\r\n \r\n \r\n\r\n \r\n {\r\n toggleSetting('earningsTimeframe', EarningsTimeframeEnum.annual)\r\n }}\r\n >\r\n Annual\r\n \r\n {\r\n toggleSetting('earningsTimeframe', EarningsTimeframeEnum.quarterly)\r\n }}\r\n >\r\n {isSemiAnnualEarning ? 'Semiannual' : 'Quarterly'}\r\n \r\n \r\n
\r\n )\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { FinancialsTableContextProvider, useFinancialsTableContext } from '../../components/financials-table'\r\nimport { useFinancialsTablePersistScrollPosition } from '../../components/financials-table/useFinancialsTablePersistScrollPosition'\r\nimport { useCachedLoaderData } from '../../hooks/useCachedLoaderData'\r\nimport { EarningsWidget } from '../earnings-common/EarningsWidget'\r\nimport { EarningsWidgetCategory } from '../earnings-common/constants'\r\nimport { Earning, EarningsDataEnum, EarningsEstimateType } from '../earnings-common/types'\r\nimport { QuoteFinancialsTabMenu } from '../quote/components/QuoteFinancialsTabMenu'\r\nimport { QuoteStickySubMenu } from '../quote/components/QuoteStickySubMenu'\r\nimport EarningsHeader from './EarningsHeader'\r\nimport EstimateBeats from './EstimateBeats'\r\nimport EstimateRevisions from './EstimateRevisions'\r\nimport LatestRevisions from './LatestRevisions'\r\nimport PriceReaction from './PriceReaction'\r\nimport WidgetSettingsSection from './WidgetSettingsSection'\r\nimport { DEFAULT_SETTINGS, FISCAL_YEAR_MARK, SETTINGS_COOKIE_KEY } from './constants'\r\nimport { EarningsData, EarningsRevisionsByType, EarningsSettings } from './types'\r\nimport { getIsSemiAnnualEarning, getYearAndPeriodInt } from './utils'\r\n\r\nfunction EarningsComponent() {\r\n const { data: dataRaw } = useCachedLoaderData()\r\n const { settings } = useFinancialsTableContext()\r\n const isSemiAnnualEarning = getIsSemiAnnualEarning(dataRaw?.earningsData ?? [])\r\n const data = React.useMemo(() => {\r\n if (dataRaw === null) return null\r\n\r\n const sorter = (a: Earning, b: Earning) => {\r\n const { year: yearA, period: periodA } = getYearAndPeriodInt(a.fiscalPeriod, isSemiAnnualEarning)\r\n const { year: yearB, period: periodB } = getYearAndPeriodInt(b.fiscalPeriod, isSemiAnnualEarning)\r\n\r\n if ([yearA, yearB, periodA, periodB].includes(null)) {\r\n return 0\r\n }\r\n\r\n if (yearA === yearB) {\r\n return periodA! - periodB!\r\n }\r\n\r\n return yearA! - yearB!\r\n }\r\n\r\n const earningsData = [...(dataRaw?.earningsData ?? [])].sort(sorter)\r\n const earningsAnnualData = [...(dataRaw?.earningsAnnualData ?? [])].sort(sorter)\r\n\r\n const revisionsByType = (dataRaw?.earningsRevisionsData ?? []).reduce(\r\n (acc, revision) => {\r\n const fiscalKey = revision.fiscalPeriod.endsWith(FISCAL_YEAR_MARK) ? 'years' : 'quarters'\r\n const fiscalPeriods = acc[revision.estimateType][fiscalKey]\r\n let fiscalData = fiscalPeriods[revision.fiscalPeriod]\r\n if (!fiscalData) {\r\n fiscalData = []\r\n fiscalPeriods[revision.fiscalPeriod] = fiscalData\r\n }\r\n fiscalData.push({ ...revision, date: dateFns.parseISO(revision.estimateDate) })\r\n return acc\r\n },\r\n {\r\n [EarningsEstimateType.eps]: { quarters: {}, years: {} },\r\n [EarningsEstimateType.epsGaap]: { quarters: {}, years: {} },\r\n [EarningsEstimateType.sales]: { quarters: {}, years: {} },\r\n } as EarningsRevisionsByType\r\n )\r\n\r\n return {\r\n ...dataRaw,\r\n earningsData,\r\n earningsAnnualData,\r\n revisionData: revisionsByType,\r\n }\r\n }, [dataRaw, isSemiAnnualEarning])\r\n\r\n useFinancialsTablePersistScrollPosition({\r\n categoryAreasCounts: [2, 2, 2],\r\n dataKeys: [EarningsDataEnum.yoyChange, EarningsDataEnum.yoyChangePct],\r\n })\r\n\r\n const hasData =\r\n !!data &&\r\n (data.earningsAnnualData?.length ?? 0) > 0 &&\r\n (data.earningsData?.length ?? 0) > 0 &&\r\n (data.earningsRevisionsData?.length ?? 0) > 0\r\n\r\n return (\r\n <>\r\n }\r\n rightContent={hasData ? : undefined}\r\n />\r\n\r\n {hasData ? (\r\n
\r\n \r\n\r\n
\r\n {[EarningsWidgetCategory.Eps, EarningsWidgetCategory.EpsGaap, EarningsWidgetCategory.Revenue].map(\r\n (earningsWidgetCategory) => (\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 Earnings are not available for this stock.\r\n
\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default function Earnings() {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n"],"names":["EarningsHeader","_ref","_nextReportInfo$nextP","earningsDate","earningsData","isSemiAnnualEarning","getIsSemiAnnualEarning","nextReportInfo","React","_earningsData$firstEs","_earningsData","parsedEarningsDate","parseISO","firstEstimateEarningIndex","findIndex","getIsEarningEstimate","firstEstimateEarning","lastEarning","date","nextPeriod","dateSuffix","eps","gaapEps","revenue","lastEarningDate","shouldShowEstimatedNextEarningsDate","getDate","getTime","Date","now","estimateEarningsDate","addMonths","getFormattedPeriodValue","fiscalPeriod","getEarningsDateSuffix","epsEstimate","epsReportedEstimate","salesEstimate","_jsxs","KeyStats","className","children","_jsx","KeyStat","datapoint","dateFns","EARNINGS_DATE_FORMAT","label","shortFormatDollar","defaultValue","multiply","EstimateBeat","beats","color","total","percent","toFixed","style","QUARTERS_TO_COMPARE","EstimateBeats","data","useMemo","quarters","epsBeats","gaapEpsBeats","revenueBeats","idx","length","earning","epsActual","epsReportedActual","salesActual","colors","LEFT_MARGIN","RIGHT_MARGIN","ChartMonths","chartData","width","PRICE_REVISIONS_CHART_WIDTH","PRICE_REVISIONS_YAXIS_WIDTH","startDate","endDate","differenceInMonths","EstimateTypeChipSwitch","settings","setSettings","useFinancialsTableContext","toggleSetting","key","value","estimateType","ChipSwitch","size","ChipSwitchButton","active","EarningsEstimateType","onClick","epsGaap","sales","FiscalPeriodSelector","props","selected","setSelected","fiscalPeriods","map","formatFiscalName","Select","items","onChange","item","onSelect","isLoading","formatEstimateLabel","EarningsEstimateTypeLabels","TooltipIcon","TooltipRow","icon","name","classNames","upArrow","Icon","downArrow","dot","backgroundColor","PriceRevisionTooltip","_ref2","isActive","revision","getEarningsColor","EarningsColor","estimate","mean","low","high","price","formatDollar","upRevisions","estimates","downRevisions","CHART_GRID_COMMON_PROPS","PriceRevisionsChart","activeIndex","onSetActiveIndex","onSetIsActive","top","onMouseEnter","onMouseLeave","ResponsiveContainer","height","PRICE_REVISIONS_CHART_HEIGHT","ComposedChart","syncId","margin","left","right","bottom","onMouseMove","activeTooltipIndex","XAxis","dataKey","domain","hide","scale","tick","type","YAxis","axisLine","interval","orientation","REVISIONS_LEFT_TICK_STYLE","tickCount","PRICE_REVISIONS_TICK_COUNT","tickFormatter","shortFormatNumber","tickLine","yAxisId","REVISIONS_RIGHT_TICK_STYLE","Area","activeDot","connectNulls","fill","lowHigh","fillOpacity","isAnimationActive","stroke","Line","Tooltip","content","cursor","absIntFormat","Math","abs","UpDownRevisionsChart","UPDOWN_REVISIONS_CHART_HEIGHT","stackOffset","UPDOWN_REVISIONS_TICK_COUNT","Bar","upRevision","maxBarSize","stackId","downRevision","EstimateRevisions","revisionData","priceRevisionIsActive","setPriceRevisionIsActive","upDownRevisionIsActive","setUpDownRevisionIsActive","setActiveIndex","prepFiscalPeriod","years","Object","keys","getDefaultFiscalPeriod","includes","endsWith","FISCAL_YEAR_MARK","revisions","push","adjustEstimate","negDownRevisions","timestamp","Heading","level","Paragraph","LatestRevision","revisionDate","getLatestRevision","LatestRevisions","lastQuarterKey","semilastQuarterKey","lastYearKey","semilastYearKey","lastQuarter","semilastQuarter","lastYear","semilastYear","formatQuarterName","formatYearName","PriceReactionTableRow","columns","subColumns","isFirst","isLast","labelElement","labelColumnClassName","subData","isBottomBorder","TableBody","TableRow","isHoverable","TableCell","hasLeading","align","TableAlign","Left","column","index","array","_column$getColumnClas","isLastCell","isSeparator","hasLeftBorder","hasRightBorder","hasLeftSeparator","hasRightSeparator","topBorderClassName","undefined","bottomBorderClassName","getColumnClassName","call","renderColumn","id","_item$labelElement","isSubBottomBorder","subcolumn","colIdx","colArray","leftBorderClassName","rightBorderClassName","PriceReactionTable","Table","TableHead","TableHeader","headerClassName","hasPadding","row","_row$id","TableFooter","colSpan","getColorForValue","HighlightedBoxColor","DarkRed","MediumRed","LightRed","DarkGreen","MediumGreen","LightGreen","Neutral","OhlcPriceChange","Number","isFinite","HighlightedBox","WHEN_LABELS","PriceReactionWhen","MINUS_DAYS_3","MINUS_DAYS_2","MINUS_DAYS_1","OPEN","HIGH","LOW","CLOSE","PLUS_DAYS_1","PLUS_DAYS_2","PLUS_DAYS_3","PLUS_WEEK_1","MINUS_WEEK_1","PREV_DAYS_WHENS","OHLC_WHENS","NEXT_DAYS_WHENS","WEEK_WHENS","ALL_WHENS","SEPARATOR_HEADER","OHLC_HEADER","OHLC_BOTTOM_BORDER","OHLC_LEFT_BORDER","OHLC_RIGHT_BORDER","OHLC_TOP_BORDER","WHEN_INDEXES","reduce","acc","val","getColumns","isCompact","commonClassName","renderPrice","values","formatNumber","when","Right","PriceReactionDataEnum","priceDiff","showPlusSign","RedGreenText","rightContent","spyPriceDiff","PriceReaction","priceReactionData","mapPriceReactionData","WidgetHeader","WidgetSettingsSection","yoyGrowthLabel","earningsTimeframe","EarningsTimeframeEnum","quarterly","EarningsDataEnum","yoyChange","yoyChangePct","annual","EarningsComponent","_dataRaw$earningsData","_data$earningsAnnualD","_data$earningsAnnualD2","_data$earningsData$le","_data$earningsData","_data$earningsRevisio","_data$earningsRevisio2","dataRaw","useCachedLoaderData","_dataRaw$earningsData2","_dataRaw$earningsAnnu","_dataRaw$earningsRevi","sorter","a","b","year","yearA","period","periodA","getYearAndPeriodInt","yearB","periodB","sort","earningsAnnualData","revisionsByType","earningsRevisionsData","fiscalKey","fiscalData","estimateDate","useFinancialsTablePersistScrollPosition","categoryAreasCounts","dataKeys","hasData","_Fragment","QuoteStickySubMenu","leftContent","QuoteFinancialsTabMenu","EarningsWidgetCategory","Eps","EpsGaap","Revenue","earningsWidgetCategory","EarningsWidget","Earnings","FinancialsTableContextProvider","defaultSettings","DEFAULT_SETTINGS","cookieKey","SETTINGS_COOKIE_KEY"],"sourceRoot":""}