{"version":3,"file":"earnings.4f61b1a0.js","mappings":"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","sources":["webpack://@finviz/website/./js/main/components/chart/Label.tsx","webpack://@finviz/website/./js/main/modules/earnings/EarningsHeader.tsx","webpack://@finviz/website/./js/main/modules/earnings/FiscalPeriodSelector.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/EstimateTypeChipSwitch.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/EarningsRevisions.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/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/index.tsx"],"sourcesContent":["import classNames from 'classnames'\r\nimport * as React from 'react'\r\nimport { Label as RechartsLabel } from 'recharts'\r\n\r\nimport { CHART_ITEM_COLORS, ChartItemColorType } from './constants'\r\n\r\ninterface LabelInnerProps extends LabelProps {\r\n dx?: number\r\n dy?: number\r\n viewBox?: { x: number; y: number; width: number; height: number }\r\n color?: ChartItemColorType\r\n}\r\n\r\nfunction LabelInner({\r\n color,\r\n viewBox,\r\n dx = 0,\r\n dy = 0,\r\n angle = -90,\r\n children,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n if (!viewBox) return\r\n\r\n const x = viewBox.x + viewBox.width / 2 + dx\r\n const y = viewBox.y + viewBox.height / 2 + dy\r\n\r\n return (\r\n \r\n {color && }\r\n {children}\r\n \r\n )\r\n}\r\n\r\ninterface LabelProps extends React.PropsWithoutRef> {\r\n color?: ChartItemColorType\r\n}\r\n\r\nexport function Label({ children, color, ...props }: LabelProps) {\r\n return } {...props} />\r\n}\r\n\r\nLabel.displayName = RechartsLabel.displayName\r\n","import * as dateFns from 'date-fns'\r\nimport { addMonths, parseISO } from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { getDate } from '../../../app/header/utils'\r\nimport { KeyStat } from '../../components/keystats/KeyStat'\r\nimport { KeyStats } from '../../components/keystats/KeyStats'\r\nimport { getEarningsDateSuffix, 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\nfunction getMonths(isAnnualEarning: boolean, isSemiAnnualEarning: boolean) {\r\n if (isAnnualEarning) return 12\r\n if (isSemiAnnualEarning) return 6\r\n return 3\r\n}\r\n\r\ntype WidgetHeaderProps = Pick\r\n\r\nexport default function EarningsHeader({ earningsDate, earningsData, earningsAnnualData }: WidgetHeaderProps) {\r\n const isAnnualEarning = !earningsData.length\r\n const isSemiAnnualEarning = getIsSemiAnnualEarning(earningsData)\r\n const nextReportInfo = React.useMemo(() => {\r\n const data = isAnnualEarning ? earningsAnnualData : earningsData\r\n const parsedEarningsDate = earningsDate ? parseISO(earningsDate) : null\r\n const firstEstimateEarningIndex = data.findIndex(getIsEarningEstimate)\r\n const firstEstimateEarning = data[firstEstimateEarningIndex] ?? null\r\n const lastEarning = data[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 estimatedEarningsDate = lastEarningDate\r\n ? addMonths(parseISO(lastEarningDate), getMonths(isAnnualEarning, isSemiAnnualEarning))\r\n : null\r\n\r\n return {\r\n date: shouldShowEstimatedNextEarningsDate ? estimatedEarningsDate : parsedEarningsDate,\r\n nextPeriod: getFormattedPeriodValue(firstEstimateEarning.fiscalPeriod, isAnnualEarning, isSemiAnnualEarning),\r\n dateSuffix:\r\n shouldShowEstimatedNextEarningsDate && estimatedEarningsDate\r\n ? '(Est)'\r\n : getEarningsDateSuffix(parsedEarningsDate),\r\n eps: firstEstimateEarning?.epsEstimate,\r\n gaapEps: firstEstimateEarning.epsReportedEstimate,\r\n revenue: firstEstimateEarning?.salesEstimate,\r\n }\r\n }, [earningsDate, earningsData, earningsAnnualData, isAnnualEarning, 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 * 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 React from 'react'\r\nimport { ComposedChart, ResponsiveContainer } from 'recharts'\r\n\r\nimport { Icon } from '../../../components'\r\nimport { Area } from '../../../components/chart/Area'\r\nimport { CartesianGrid } from '../../../components/chart/CartesianGrid'\r\nimport { Label } from '../../../components/chart/Label'\r\nimport { Line } from '../../../components/chart/Line'\r\nimport { Tooltip, TooltipRow } from '../../../components/chart/Tooltip'\r\nimport { DateFormat, SOLID_AXIS_LINE, XAxis, dateAxisFormatter } from '../../../components/chart/XAxis'\r\nimport { YAxis } from '../../../components/chart/YAxis'\r\nimport { useFinancialsTableContext } from '../../../components/financials-table'\r\nimport { formatDollar, shortFormatDollar, shortFormatNumber } from '../../../util'\r\nimport { ESTIMATE_TYPE_LABEL } from '../../earnings-common/constants'\r\nimport { EarningsEstimateType, EarningsSettings } from '../../earnings-common/types'\r\nimport { getMonthlyTicks } from '../../earnings-common/utils'\r\nimport { PRICE_REVISIONS_CHART_HEIGHT, PRICE_REVISIONS_TICK_COUNT, PRICE_REVISIONS_YAXIS_WIDTH } from '../constants'\r\nimport { EarningRevision, RevisionsChartData } from '../types'\r\nimport { formatFiscalName } from '../utils'\r\n\r\nenum DataKey {\r\n timestamp = 'timestamp',\r\n lowHigh = 'lowHigh',\r\n price = 'price',\r\n mean = 'mean',\r\n fiscalPeriod = 'fiscalPeriod',\r\n upRevisions = 'upRevisions',\r\n downRevisions = 'downRevisions',\r\n}\r\n\r\nexport function formatEstimateLabel(estimateType: EarningsEstimateType, fiscalPeriod: string) {\r\n return `${formatFiscalName(fiscalPeriod)} ${ESTIMATE_TYPE_LABEL[estimateType]} Estimate`\r\n}\r\n\r\nfunction tooltipValueFormatter(value: number, { dataKey, payload }: { dataKey: string; payload?: EarningRevision }) {\r\n switch (dataKey) {\r\n case DataKey.fiscalPeriod:\r\n return `${shortFormatDollar(payload?.mean)} (${shortFormatDollar(payload?.low)}–${shortFormatDollar(payload?.high)})`\r\n case DataKey.price:\r\n if (typeof value !== 'number') return \r\n return formatDollar(value)\r\n case DataKey.upRevisions:\r\n return `${value}/${payload?.estimates}`\r\n case DataKey.downRevisions:\r\n return `${value}/${payload?.estimates}`\r\n }\r\n}\r\n\r\ntype Props = {\r\n chartData: RevisionsChartData\r\n endingTimestamp: number\r\n estimateType: EarningsEstimateType\r\n startingTimestamp: number\r\n}\r\n\r\nexport function PriceRevisionsChart({ chartData, endingTimestamp, estimateType, startingTimestamp }: Props) {\r\n const { settings } = useFinancialsTableContext()\r\n const monthlyTicks = React.useMemo(\r\n () => getMonthlyTicks(startingTimestamp, endingTimestamp),\r\n [startingTimestamp, endingTimestamp]\r\n )\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n dateAxisFormatter({ value, outFormat: DateFormat.MonthShort, breakOnYear: true })\r\n }\r\n ticks={monthlyTicks}\r\n type=\"number\"\r\n />\r\n shortFormatNumber(value)}\r\n width={PRICE_REVISIONS_YAXIS_WIDTH}\r\n yAxisId=\"estimate\"\r\n orientation=\"right\"\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n translucent\r\n formatLabel={(value) =>\r\n dateAxisFormatter({\r\n value,\r\n outFormat: DateFormat.MonthShortDayNumYearFull,\r\n })\r\n }\r\n formatValue={tooltipValueFormatter}\r\n >\r\n \r\n isChartSeriesDataKey={false}\r\n indicator=\"amber\"\r\n indicatorClass=\"flex justify-center\"\r\n dataKey={DataKey.fiscalPeriod}\r\n label={(_, { payload }) => formatEstimateLabel(estimateType, payload?.fiscalPeriod ?? '')}\r\n />\r\n \r\n }\r\n label=\"Up Revisions\"\r\n dataKey={DataKey.upRevisions}\r\n />\r\n }\r\n label=\"Down Revisions\"\r\n dataKey={DataKey.downRevisions}\r\n />\r\n \r\n \r\n \r\n )\r\n}\r\n","import { Bar, ComposedChart, ResponsiveContainer } from 'recharts'\r\n\r\nimport { BarInner } from '../../../components/chart/Bar'\r\nimport { CartesianGrid } from '../../../components/chart/CartesianGrid'\r\nimport { EmptyTooltip, Tooltip } from '../../../components/chart/Tooltip'\r\nimport { XAxis } from '../../../components/chart/XAxis'\r\nimport { YAxis } from '../../../components/chart/YAxis'\r\nimport { PRICE_REVISIONS_YAXIS_WIDTH, UPDOWN_REVISIONS_CHART_HEIGHT, UPDOWN_REVISIONS_TICK_COUNT } from '../constants'\r\nimport { RevisionsChartData } from '../types'\r\n\r\nfunction absIntFormat(value: number): string {\r\n return Math.abs(value).toFixed()\r\n}\r\n\r\ntype Props = {\r\n chartData: RevisionsChartData\r\n endingTimestamp: number\r\n startingTimestamp: number\r\n}\r\n\r\nexport function UpDownRevisionsChart({ chartData, endingTimestamp, startingTimestamp }: Props) {\r\n return (\r\n \r\n \r\n \r\n \r\n (idx > 0 && idx < UPDOWN_REVISIONS_TICK_COUNT - 1 ? absIntFormat(value) : '')}\r\n width={PRICE_REVISIONS_YAXIS_WIDTH}\r\n interval={0}\r\n />\r\n }\r\n isAnimationActive={false}\r\n maxBarSize={1}\r\n stackId=\"stack\"\r\n />\r\n }\r\n isAnimationActive={false}\r\n maxBarSize={1}\r\n stackId=\"stack\"\r\n />\r\n \r\n \r\n \r\n )\r\n}\r\n","import React, { useMemo } from 'react'\r\n\r\nimport { Paragraph } from '../../components'\r\nimport { ChartContext } from '../../components/chart/ChartWrapper'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { WidgetHeader } from '../earnings-common/WidgetHeader'\r\nimport { EarningsEstimateType, EarningsSettings } from '../earnings-common/types'\r\nimport { FiscalPeriodSelector } from './FiscalPeriodSelector'\r\nimport { PriceRevisionsChart } from './charts/PriceRevisionsChart'\r\nimport { UpDownRevisionsChart } from './charts/UpDownRevisionsChart'\r\nimport { FISCAL_YEAR_MARK } from './constants'\r\nimport { EarningsRevisionsByType, 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 if (years.length > 0) {\r\n return years[years.length - 1]\r\n }\r\n const quarters = Object.keys(revisionData[estimateType].quarters)\r\n return quarters[quarters.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 { 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 (fiscalPeriod && !fiscalPeriods.includes(fiscalPeriod)) {\r\n fiscalPeriod = fiscalPeriod.endsWith(FISCAL_YEAR_MARK) ? years[years.length - 1] : quarters[quarters.length - 1]\r\n }\r\n if (!fiscalPeriod) {\r\n fiscalPeriod = years.length > 0 ? years[years.length - 1] : quarters[quarters.length - 1]\r\n }\r\n\r\n if (fiscalPeriod) {\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 }\r\n\r\n const startingTimestamp = chartData.length ? chartData[0].timestamp : 0\r\n const endingTimestamp = chartData.length ? chartData[chartData.length - 1].timestamp : 0\r\n\r\n return {\r\n chartData,\r\n endingTimestamp,\r\n fiscalPeriod,\r\n fiscalPeriods,\r\n startingTimestamp,\r\n }\r\n }, [estimateType, prepFiscalPeriod, revisionData])\r\n\r\n if (data.chartData.length === 0) {\r\n return null\r\n }\r\n\r\n return (\r\n
\r\n
\r\n Estimate Revisions\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}\r\n","import React from 'react'\r\n\r\nimport { ChipSwitch, ChipSwitchButton } from '../../components/ChipSwitch'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { ESTIMATE_TYPE_LABEL } from '../earnings-common/constants'\r\nimport { EarningsEstimateType, EarningsSettings } from '../earnings-common/types'\r\n\r\ntype Props = {\r\n hasDataByType: { [K in EarningsEstimateType]: boolean }\r\n label?: string\r\n}\r\n\r\nconst options = Object.keys(ESTIMATE_TYPE_LABEL) as unknown as EarningsEstimateType[]\r\n\r\nexport function EstimateTypeChipSwitch({ hasDataByType, 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 {options.map((type) => (\r\n toggleSetting('estimateType', type)}\r\n >\r\n {ESTIMATE_TYPE_LABEL[type]}\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 { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { WidgetHeader } from '../earnings-common/WidgetHeader'\r\nimport { ESTIMATE_TYPE_LABEL } from '../earnings-common/constants'\r\nimport { EarningsEstimateType, EarningsSettings } from '../earnings-common/types'\r\nimport { EstimateTypeChipSwitch } from './EstimateTypeChipSwitch'\r\nimport LatestRevision from './LatestRevision'\r\nimport { EarningRevisionWithDate, EarningsRevisionsByType } 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\nfunction hasRevisionData(revisionData: EarningsRevisionsByType, estimateType: EarningsEstimateType): boolean {\r\n return !!(\r\n Object.keys(revisionData[estimateType].quarters).length || Object.keys(revisionData[estimateType].years).length\r\n )\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 const hasDataByType = {\r\n [EarningsEstimateType.eps]: hasRevisionData(revisionData, EarningsEstimateType.eps),\r\n [EarningsEstimateType.epsGaap]: hasRevisionData(revisionData, EarningsEstimateType.epsGaap),\r\n [EarningsEstimateType.sales]: hasRevisionData(revisionData, EarningsEstimateType.sales),\r\n }\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 hasDataByType,\r\n }\r\n }, [estimateType, revisionData])\r\n\r\n const hasData = data.lastQuarter || data.semilastQuarter || data.lastYear || data.semilastYear\r\n\r\n return (\r\n
\r\n
\r\n Latest Revisions\r\n \r\n
\r\n {hasData && (\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 {!hasData && (\r\n
\r\n No {ESTIMATE_TYPE_LABEL[estimateType]} data available.\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport EstimateRevisions from './EstimateRevisions'\r\nimport LatestRevisions from './LatestRevisions'\r\nimport { EarningsRevisionsByType } from './types'\r\n\r\ninterface Props {\r\n revisionData: EarningsRevisionsByType | null\r\n}\r\n\r\nexport default function EarningsRevisions({ revisionData }: Props) {\r\n if (!revisionData) {\r\n return null\r\n }\r\n return (\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 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 { FORMAT_PERCENT_CHANGE, formatNumber, getDecimalPlacesForValue } 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('xl:px-4 xl:last:pr-11', {\r\n 'w-22 xl:last:w-29.5': !isCompact,\r\n 'w-17 xl: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 (\r\n \r\n {typeof value === 'number' ? formatNumber(value, { fractions: getDecimalPlacesForValue(value) }) : '—'}\r\n \r\n )\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, FORMAT_PERCENT_CHANGE)}\r\n }\r\n return (\r\n \r\n {formatNumber(value, FORMAT_PERCENT_CHANGE)}\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, FORMAT_PERCENT_CHANGE)}\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 { usePriceReactionColumns } from './usePriceReactionColumns'\r\nimport { mapPriceReactionData } from './utils'\r\n\r\ninterface Props {\r\n priceReactionData: EarningReportReaction[]\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 Price Reaction to Earnings Reports\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 { TempRenameSettingsProperties } from '../earnings-common/TempRenameSettingsProperties'\r\nimport WidgetSettingsSection from '../earnings-common/WidgetSettingsSection'\r\nimport { EarningsWidgetCategory } from '../earnings-common/constants'\r\nimport {\r\n Earning,\r\n EarningsDataEnum,\r\n EarningsEstimateType,\r\n EarningsSettings,\r\n EarningsTimeframeEnum,\r\n} from '../earnings-common/types'\r\nimport { getEffectiveTimeframe } from '../earnings-common/utils'\r\nimport { QuoteFinancialsTabMenu } from '../quote/components/QuoteFinancialsTabMenu'\r\nimport { QuoteStickySubMenu } from '../quote/components/QuoteStickySubMenu'\r\nimport EarningsHeader from './EarningsHeader'\r\nimport EarningsRevisions from './EarningsRevisions'\r\nimport EstimateBeats from './EstimateBeats'\r\nimport PriceReaction from './PriceReaction'\r\nimport { DEFAULT_SETTINGS, FISCAL_YEAR_MARK, SETTINGS_COOKIE_KEY } from './constants'\r\nimport { EarningsData, EarningsRevisionsByType } 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: !!dataRaw?.earningsRevisionsData?.length ? revisionsByType : null,\r\n }\r\n }, [dataRaw, isSemiAnnualEarning])\r\n\r\n useFinancialsTablePersistScrollPosition({\r\n categoryAreasCounts: [2, 2, 2],\r\n dataKeys: [\r\n EarningsDataEnum.mainChange,\r\n EarningsDataEnum.mainChangePct,\r\n EarningsDataEnum.extraChangeYoYonQoQ,\r\n EarningsDataEnum.extraChangePctYoYonQoQ,\r\n ],\r\n })\r\n\r\n const hasQuarterlyData = !!data?.earningsData?.length\r\n const hasAnnualData = !!data?.earningsAnnualData?.length\r\n const hasData = !!data && (hasAnnualData || hasQuarterlyData)\r\n const timeframe = hasData\r\n ? getEffectiveTimeframe(data?.earningsData, data?.earningsAnnualData, settings.timeframe)\r\n : EarningsTimeframeEnum.quarterly\r\n\r\n return (\r\n <>\r\n }\r\n rightContent={\r\n hasData ? (\r\n \r\n ) : undefined\r\n }\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 {hasQuarterlyData && (\r\n <>\r\n {data?.priceReactionData.length > 0 && }\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}\r\n"],"names":["LabelInner","_ref","color","viewBox","dx","dy","angle","children","props","x","width","y","height","_jsxs","fontSize","fontWeight","textAnchor","dominantBaseline","className","style","transform","_jsx","classNames","CHART_ITEM_COLORS","Label","_ref2","RechartsLabel","content","displayName","EarningsHeader","_nextReportInfo$nextP","earningsDate","earningsData","earningsAnnualData","isAnnualEarning","length","isSemiAnnualEarning","getIsSemiAnnualEarning","nextReportInfo","React","_data$firstEstimateEa","_data","data","parsedEarningsDate","parseISO","firstEstimateEarningIndex","findIndex","getIsEarningEstimate","firstEstimateEarning","lastEarning","date","nextPeriod","dateSuffix","eps","gaapEps","revenue","lastEarningDate","shouldShowEstimatedNextEarningsDate","getDate","getTime","Date","now","estimatedEarningsDate","addMonths","getMonths","getFormattedPeriodValue","fiscalPeriod","getEarningsDateSuffix","epsEstimate","epsReportedEstimate","salesEstimate","KeyStats","KeyStat","datapoint","dateFns","EARNINGS_DATE_FORMAT","label","shortFormatDollar","defaultValue","multiply","FiscalPeriodSelector","selected","setSelected","fiscalPeriods","map","value","formatFiscalName","Select","size","items","onChange","item","onSelect","isLoading","DataKey","tooltipValueFormatter","dataKey","payload","mean","low","high","price","formatDollar","upRevisions","downRevisions","estimates","PriceRevisionsChart","chartData","endingTimestamp","estimateType","startingTimestamp","settings","useFinancialsTableContext","monthlyTicks","getMonthlyTicks","ResponsiveContainer","PRICE_REVISIONS_CHART_HEIGHT","ComposedChart","syncId","margin","left","right","top","bottom","CartesianGrid","vertical","XAxis","axisLine","SOLID_AXIS_LINE","timestamp","domain","scale","tickFormatter","dateAxisFormatter","outFormat","DateFormat","MonthShort","breakOnYear","ticks","type","YAxis","interval","tickCount","PRICE_REVISIONS_TICK_COUNT","shortFormatNumber","PRICE_REVISIONS_YAXIS_WIDTH","yAxisId","orientation","ESTIMATE_TYPE_LABEL","Area","connectNulls","lowHigh","fillOpacity","Line","Tooltip","translucent","formatLabel","MonthShortDayNumYearFull","formatValue","TooltipRow","isChartSeriesDataKey","indicator","indicatorClass","_","_ref3","_payload$fiscalPeriod","formatEstimateLabel","Icon","name","UpDownRevisionsChart","UPDOWN_REVISIONS_CHART_HEIGHT","stackOffset","hide","UPDOWN_REVISIONS_TICK_COUNT","idx","Math","abs","toFixed","absIntFormat","Bar","shape","BarInner","isAnimationActive","maxBarSize","stackId","EmptyTooltip","EstimateRevisions","revisionData","setSettings","prepFiscalPeriod","years","Object","keys","quarters","getDefaultFiscalPeriod","useMemo","includes","endsWith","FISCAL_YEAR_MARK","revisions","revision","push","adjustEstimate","negDownRevisions","WidgetHeader","Paragraph","ChartContext","isHoverHighlight","options","EstimateTypeChipSwitch","hasDataByType","ChipSwitch","ChipSwitchButton","active","disabled","onClick","toggleSetting","key","LatestRevision","estimate","revisionDate","getLatestRevision","hasRevisionData","LatestRevisions","lastQuarterKey","semilastQuarterKey","lastYearKey","semilastYearKey","EarningsEstimateType","epsGaap","sales","lastQuarter","semilastQuarter","lastYear","semilastYear","hasData","formatQuarterName","formatYearName","EarningsRevisions","EstimateBeat","beats","total","percent","QUARTERS_TO_COMPARE","EstimateBeats","epsBeats","gaapEpsBeats","revenueBeats","earning","epsActual","epsReportedActual","salesActual","colors","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","fractions","getDecimalPlacesForValue","when","Right","PriceReactionDataEnum","priceDiff","FORMAT_PERCENT_CHANGE","RedGreenText","rightContent","spyPriceDiff","PriceReaction","priceReactionData","mapPriceReactionData","EarningsComponent","_dataRaw$earningsData","_data$earningsData","_data$earningsAnnualD","dataRaw","useCachedLoaderData","_dataRaw$earningsData2","_dataRaw$earningsAnnu","_dataRaw$earningsRevi","_dataRaw$earningsRevi2","sorter","a","b","year","yearA","period","periodA","getYearAndPeriodInt","yearB","periodB","sort","revisionsByType","earningsRevisionsData","fiscalKey","fiscalData","estimateDate","useFinancialsTablePersistScrollPosition","categoryAreasCounts","dataKeys","EarningsDataEnum","mainChange","mainChangePct","extraChangeYoYonQoQ","extraChangePctYoYonQoQ","hasQuarterlyData","hasAnnualData","timeframe","getEffectiveTimeframe","EarningsTimeframeEnum","quarterly","_Fragment","QuoteStickySubMenu","leftContent","QuoteFinancialsTabMenu","WidgetSettingsSection","isSemiAnnual","showTimeframe","EarningsWidgetCategory","Eps","EpsGaap","Revenue","earningsWidgetCategory","EarningsWidget","Earnings","FinancialsTableContextProvider","defaultSettings","DEFAULT_SETTINGS","cookieKey","SETTINGS_COOKIE_KEY","TempRenameSettingsProperties","keysReplace"],"sourceRoot":""}