{"version":3,"file":"revenue.570144de.js","mappings":"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","sources":["webpack://@finviz/website/./js/main/modules/revenue/utils.ts","webpack://@finviz/website/./js/main/modules/revenue/RevenueTableFooter.tsx","webpack://@finviz/website/./js/main/modules/revenue/RevenueTableHead.tsx","webpack://@finviz/website/./js/main/modules/revenue/WidgetHeader.tsx","webpack://@finviz/website/./js/main/modules/revenue/types.ts","webpack://@finviz/website/./js/main/modules/revenue/constants.ts","webpack://@finviz/website/./js/main/modules/revenue/useTableColumns.tsx","webpack://@finviz/website/./js/main/modules/revenue/CategoryWidget.tsx","webpack://@finviz/website/./js/main/modules/revenue/WidgetSettingsSection.tsx","webpack://@finviz/website/./js/main/modules/revenue/index.tsx","webpack://@finviz/website/../node_modules/recharts/es6/chart/BarChart.js","webpack://@finviz/website/../node_modules/recharts/es6/chart/LineChart.js","webpack://@finviz/website/../node_modules/recharts/es6/component/ResponsiveContainer.js"],"sourcesContent":["import { FinancialsRowDataType } from '../../components/financials-table/types'\r\n\r\nexport { getColor, tickFormatter } from '../../components/line-stacked-bar-chart'\r\n\r\nexport function getSumData>(data: T[], absolute = false) {\r\n return data.reduce>((sumObj, revenue) => {\r\n revenue.values.forEach(({ year, value }) => {\r\n if (!sumObj[year]) {\r\n sumObj[year] = 0\r\n }\r\n\r\n sumObj[year] += absolute ? Math.abs(value ?? 0) : (value ?? 0)\r\n })\r\n\r\n return sumObj\r\n }, {})\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { TableCell, TableFooter } from '../../components/Table'\r\nimport { Checkbox, ColorVariant } from '../../components/checkbox'\r\nimport { useFinancialsTableContext } from '../../components/financials-table'\r\nimport { FinancialsRowDataType } from '../../components/financials-table/types'\r\nimport { View } from '../../components/line-stacked-bar-chart'\r\nimport { shortFormatNumber } from '../../util'\r\nimport { RevenueColumnsType, RevenueSettings } from './types'\r\nimport { getSumData } from './utils'\r\n\r\ntype Props = {\r\n columns: RevenueColumnsType['columns']\r\n data: FinancialsRowDataType[]\r\n}\r\n\r\nexport function RevenueTableFooter({ columns, data }: Props) {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n return (\r\n \r\n {settings.chartView === View.bars ? (\r\n \r\n Total\r\n \r\n ) : (\r\n \r\n \r\n setSettings({\r\n ...settings,\r\n isShowAll: !settings.isShowAll,\r\n })\r\n }\r\n />\r\n \r\n )}\r\n {columns.map((column) => (\r\n \r\n {shortFormatNumber(getSumData(data)[column.id])}\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, TableHead, TableHeader, TableHeaderSortable } from '../../components/Table'\r\nimport { FinancialsColumnDefinition, FinancialsRowDataType } from '../../components/financials-table/types'\r\nimport { SortByShape } from '../../hooks/use-sort-data'\r\nimport { SortDirection } from '../../types'\r\nimport { RevenueColumnsType } from './types'\r\n\r\ntype Props = {\r\n columns: RevenueColumnsType['columns']\r\n unit: string\r\n sort: SortByShape>\r\n onSortChange: (column: FinancialsColumnDefinition) => void\r\n}\r\n\r\nexport function RevenueTableHead({ columns, unit, sort, onSortChange }: Props) {\r\n const handleChangeSort = (column: FinancialsColumnDefinition) => {\r\n const shouldRemoveOrder = sort.direction === SortDirection.Descending && column === sort.column\r\n if (shouldRemoveOrder) {\r\n onSortChange('order' as unknown as FinancialsColumnDefinition)\r\n } else {\r\n onSortChange(column)\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n Currency: {unit}\r\n \r\n {columns.map((column) => (\r\n handleChangeSort(column)}\r\n >\r\n {column.name}\r\n \r\n ))}\r\n \r\n )\r\n}\r\n","import { Heading } from '../../components/typography'\r\n\r\nfunction getCategoryLabel(category: string) {\r\n switch (category) {\r\n case 'products_and_services':\r\n return 'Products and Services'\r\n\r\n default:\r\n return category[0].toUpperCase() + category.substring(1)\r\n }\r\n}\r\n\r\ntype WidgetHeaderProps = {\r\n category: string\r\n}\r\n\r\nexport default function WidgetHeader({ category }: WidgetHeaderProps) {\r\n return (\r\n \r\n Revenue by {getCategoryLabel(category)}\r\n \r\n )\r\n}\r\n","import { FinancialsColumnDefinition, FinancialsRowDataType } from '../../components/financials-table/types'\r\nimport { View } from '../../components/line-stacked-bar-chart'\r\n\r\nexport enum Category {\r\n products_and_services = 'products_and_services',\r\n regions = 'regions',\r\n segment = 'segment',\r\n subsegment = 'subsegment',\r\n additional = 'additional',\r\n}\r\n\r\nexport type CategoryData = {\r\n revenues: Record>\r\n unit: string\r\n}\r\n\r\nexport type RevenueData = Record, CategoryData>\r\n\r\nexport type RevenueColumnsType = {\r\n columns: FinancialsColumnDefinition[]\r\n subColumns: Record[]>\r\n}\r\n\r\n// I kept the values with bool prefix because users may already have cookis with this keys\r\nexport enum RevenueDataEnum {\r\n yoyChange = 'isYoyChange',\r\n yoyChangePct = 'isYoyChangePct',\r\n sharePct = 'isSharePct',\r\n}\r\n\r\nexport type RevenueSettings = {\r\n isShowAll: boolean\r\n chartView: View\r\n} & Record\r\n","import { ColorVariant } from '../../components'\r\nimport { FinancialsTableSettingsType } from '../../components/financials-table'\r\nimport { View } from '../../components/line-stacked-bar-chart'\r\nimport { RevenueDataEnum } from './types'\r\n\r\nexport const COOKIE_KEY = 'revenueSettings'\r\n\r\nexport const DEFAULT_SETTINGS: FinancialsTableSettingsType = {\r\n [RevenueDataEnum.yoyChange]: false,\r\n [RevenueDataEnum.yoyChangePct]: false,\r\n [RevenueDataEnum.sharePct]: false,\r\n isShowAll: false,\r\n chartView: View.bars,\r\n}\r\n\r\nexport const SEGMENT_COLORS = Object.keys(ColorVariant).filter(\r\n (c) => c !== ColorVariant.gray && c !== ColorVariant.default\r\n) as ColorVariant[]\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 { RevenueColumnsType, RevenueDataEnum } from './types'\r\n\r\nconst getColumns = (yearKeys: string[]) => {\r\n const commonClassName = 'w-22 last:w-29.5 px-4 last:pr-11'\r\n\r\n const columns: RevenueColumnsType['columns'] = yearKeys.map((year) => ({\r\n id: year,\r\n name: year,\r\n align: TableAlign.Right,\r\n className: commonClassName,\r\n getValueForSort: (data) => data.values.find((value) => value.year === year)?.value ?? null,\r\n renderColumn: (data) => {\r\n const revenueColValue = data.values.find((value) => value.year === year)\r\n if (!revenueColValue?.value) return \r\n return shortFormatNumber(revenueColValue.value)\r\n },\r\n }))\r\n\r\n const subColumns: RevenueColumnsType['subColumns'] = {\r\n [RevenueDataEnum.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 revenueColSubValue = data.values.find((value) => value.year === year)\r\n return (\r\n \r\n {shortFormatNumber(revenueColSubValue?.value, { defaultValue: '—' })}\r\n \r\n )\r\n },\r\n })),\r\n [RevenueDataEnum.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 revenueColSubValue = data.values.find((value) => value.year === year)\r\n return (\r\n \r\n {revenueColSubValue?.value?.toFixed(2) ?? '—'}\r\n \r\n )\r\n },\r\n })),\r\n [RevenueDataEnum.sharePct]: yearKeys.map((year) => ({\r\n id: year,\r\n name: year,\r\n align: TableAlign.Right,\r\n className: classNames(commonClassName, 'text-muted-2'),\r\n renderColumn: (data) => {\r\n const revenueColSubValue = data.values.find((value) => value.year === year)\r\n if (typeof revenueColSubValue?.value !== 'number') return '-'\r\n\r\n return `${revenueColSubValue.value.toFixed(2)}%`\r\n },\r\n })),\r\n }\r\n return { columns, subColumns }\r\n}\r\n\r\nexport function useTableColumns(yearKeys: string[]) {\r\n return React.useMemo(() => getColumns(yearKeys), [yearKeys])\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { useTableSort } from '../../components/Table'\r\nimport { FinancialsWidget, getYoYData, useFinancialsTableContext } from '../../components/financials-table'\r\nimport {\r\n FinancialsRowDataType,\r\n FinancialsRowValue,\r\n FinancialsSubRowDataType,\r\n} from '../../components/financials-table/types'\r\nimport { LineStackedBarChart } from '../../components/line-stacked-bar-chart'\r\nimport { RevenueTableFooter } from './RevenueTableFooter'\r\nimport { RevenueTableHead } from './RevenueTableHead'\r\nimport WidgetHeader from './WidgetHeader'\r\nimport { SEGMENT_COLORS } from './constants'\r\nimport { CategoryData, RevenueDataEnum, RevenueSettings } from './types'\r\nimport { useTableColumns } from './useTableColumns'\r\nimport { getSumData } from './utils'\r\n\r\nfunction getSharePctData(data: T[], absSumRow: Record) {\r\n return data.reduce>((acc, { year, value }) => {\r\n const sharePct = absSumRow[year] > 0 ? (100 / absSumRow[year]) * Math.abs(value ?? 0) : null\r\n return {\r\n ...acc,\r\n [year]: sharePct === null || isNaN(sharePct) ? null : sharePct,\r\n }\r\n }, {})\r\n}\r\n\r\nfunction mapData(data: CategoryData) {\r\n const revenuesArray: FinancialsRowDataType[] = Object.entries(data.revenues)\r\n .map(([key, revenues]) => ({\r\n id: key,\r\n label: key,\r\n isSelected: true,\r\n color: SEGMENT_COLORS[0],\r\n values: revenues\r\n .map((annualData) => ({\r\n year: annualData.fiscal_year,\r\n value: annualData.value,\r\n }))\r\n .sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year)),\r\n subData: [],\r\n }))\r\n .sort((a, b) => b.values[b.values.length - 1].value - a.values[a.values.length - 1].value)\r\n\r\n return revenuesArray.map((revenue, index) => {\r\n const yoyData = getYoYData(revenue.values)\r\n const absSumRow = getSumData(revenuesArray, true)\r\n const sharePctData = getSharePctData(revenue.values, absSumRow)\r\n\r\n return {\r\n ...revenue,\r\n color: SEGMENT_COLORS[index % SEGMENT_COLORS.length],\r\n subData: [\r\n {\r\n id: RevenueDataEnum.yoyChange,\r\n label: 'YoY Growth',\r\n values: revenue.values.map(({ year }) => ({ year, value: yoyData.change[year] })),\r\n },\r\n {\r\n id: RevenueDataEnum.yoyChangePct,\r\n label: 'YoY Growth %',\r\n values: revenue.values.map(({ year }) => ({ year, value: yoyData.changePct[year] })),\r\n },\r\n {\r\n id: RevenueDataEnum.sharePct,\r\n label: 'Share %',\r\n values: revenue.values.map(({ year }) => ({ year, value: sharePctData[year] })),\r\n },\r\n ].filter(Boolean) as FinancialsSubRowDataType[],\r\n }\r\n })\r\n}\r\n\r\ntype CategoryWidgetProps = {\r\n category: string\r\n data: CategoryData\r\n}\r\n\r\nexport default function CategoryWidget({ category, data }: CategoryWidgetProps) {\r\n const { settings } = useFinancialsTableContext()\r\n const [revenueData, setRevenueData] = React.useState(() => mapData(data))\r\n const yearKeys = React.useMemo(\r\n () => revenueData[0].values.map(({ year }) => year).sort((a, b) => Number.parseInt(a) - Number.parseInt(b)),\r\n [revenueData]\r\n )\r\n const { columns, subColumns } = useTableColumns(yearKeys)\r\n\r\n const {\r\n data: sortedData,\r\n sort,\r\n changeSort,\r\n } = useTableSort({\r\n data: revenueData.map((revenue) => ({\r\n ...revenue,\r\n subData: revenue.subData.filter(({ id }) => settings[id as RevenueDataEnum]),\r\n })),\r\n columns,\r\n defaultSort: { column: columns[columns.length - 1], direction: -1 },\r\n })\r\n\r\n const onVisibilityChange = (id: string, isSelected: boolean) => {\r\n setRevenueData(\r\n revenueData.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 return (\r\n }\r\n columns={columns}\r\n subColumns={subColumns}\r\n onVisibilityChange={onVisibilityChange}\r\n tableHead={}\r\n tableFooter={}\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 { View } from '../../components/line-stacked-bar-chart'\r\nimport { RevenueDataEnum, RevenueSettings } from './types'\r\n\r\nexport default function WidgetSettingsSection() {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof RevenueSettings, value: RevenueSettings[typeof key]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n return (\r\n
\r\n \r\n {\r\n toggleSetting(RevenueDataEnum.yoyChange, !settings.isYoyChange)\r\n }}\r\n >\r\n YoY Growth\r\n \r\n {\r\n toggleSetting(RevenueDataEnum.yoyChangePct, !settings.isYoyChangePct)\r\n }}\r\n >\r\n YoY Growth %\r\n \r\n {\r\n toggleSetting(RevenueDataEnum.sharePct, !settings.isSharePct)\r\n }}\r\n >\r\n Share %\r\n \r\n \r\n\r\n \r\n {\r\n toggleSetting('chartView', View.bars)\r\n }}\r\n />\r\n {\r\n toggleSetting('chartView', View.lines)\r\n }}\r\n />\r\n \r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { FinancialsTableContextProvider } from '../../components/financials-table'\r\nimport { useFinancialsTablePersistScrollPosition } from '../../components/financials-table/useFinancialsTablePersistScrollPosition'\r\nimport { useCachedLoaderData } from '../../hooks/useCachedLoaderData'\r\nimport { QuoteFinancialsTabMenu } from '../quote/components/QuoteFinancialsTabMenu'\r\nimport { QuoteStickySubMenu } from '../quote/components/QuoteStickySubMenu'\r\nimport CategoryWidget from './CategoryWidget'\r\nimport WidgetSettingsSection from './WidgetSettingsSection'\r\nimport { COOKIE_KEY, DEFAULT_SETTINGS } from './constants'\r\nimport { RevenueData, RevenueDataEnum } from './types'\r\n\r\nfunction getAreasCounts(data: RevenueData | null) {\r\n if (!data) return []\r\n\r\n return Object.keys(data).map((key) => {\r\n const category = data[key as keyof RevenueData]\r\n return Object.keys(category.revenues).length\r\n })\r\n}\r\n\r\nfunction RevenueComponent() {\r\n const { data } = useCachedLoaderData()\r\n const categoryAreasCounts = React.useMemo(() => getAreasCounts(data), [data])\r\n\r\n useFinancialsTablePersistScrollPosition({\r\n categoryAreasCounts,\r\n dataKeys: [RevenueDataEnum.yoyChange, RevenueDataEnum.yoyChangePct, RevenueDataEnum.sharePct],\r\n })\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\r\n const hasData = !!data && Object.keys(data).length > 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 {Object.entries(data).map(([key, val]) => (\r\n \r\n ))}\r\n
\r\n ) : (\r\n
\r\n Revenue is not available for this stock.\r\n
\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default function Revenue() {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","/**\n * @fileOverview Bar Chart\n */\nimport { generateCategoricalChart } from './generateCategoricalChart';\nimport { Bar } from '../cartesian/Bar';\nimport { XAxis } from '../cartesian/XAxis';\nimport { YAxis } from '../cartesian/YAxis';\nimport { formatAxisMap } from '../util/CartesianUtils';\nexport var BarChart = generateCategoricalChart({\n chartName: 'BarChart',\n GraphicalChild: Bar,\n defaultTooltipEventType: 'axis',\n validateTooltipEventTypes: ['axis', 'item'],\n axisComponents: [{\n axisType: 'xAxis',\n AxisComp: XAxis\n }, {\n axisType: 'yAxis',\n AxisComp: YAxis\n }],\n formatAxisMap: formatAxisMap\n});","/**\n * @fileOverview Line Chart\n */\nimport { generateCategoricalChart } from './generateCategoricalChart';\nimport { Line } from '../cartesian/Line';\nimport { XAxis } from '../cartesian/XAxis';\nimport { YAxis } from '../cartesian/YAxis';\nimport { formatAxisMap } from '../util/CartesianUtils';\nexport var LineChart = generateCategoricalChart({\n chartName: 'LineChart',\n GraphicalChild: Line,\n axisComponents: [{\n axisType: 'xAxis',\n AxisComp: XAxis\n }, {\n axisType: 'yAxis',\n AxisComp: YAxis\n }],\n formatAxisMap: formatAxisMap\n});","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * @fileOverview Wrapper component to make charts adapt to the size of parent * DOM\n */\nimport clsx from 'clsx';\nimport React, { forwardRef, cloneElement, useState, useImperativeHandle, useRef, useEffect, useMemo, useCallback } from 'react';\nimport throttle from 'lodash/throttle';\nimport { isElement } from 'react-is';\nimport { isPercent } from '../util/DataUtils';\nimport { warn } from '../util/LogUtils';\nimport { getDisplayName } from '../util/ReactUtils';\nexport var ResponsiveContainer = /*#__PURE__*/forwardRef(function (_ref, ref) {\n var aspect = _ref.aspect,\n _ref$initialDimension = _ref.initialDimension,\n initialDimension = _ref$initialDimension === void 0 ? {\n width: -1,\n height: -1\n } : _ref$initialDimension,\n _ref$width = _ref.width,\n width = _ref$width === void 0 ? '100%' : _ref$width,\n _ref$height = _ref.height,\n height = _ref$height === void 0 ? '100%' : _ref$height,\n _ref$minWidth = _ref.minWidth,\n minWidth = _ref$minWidth === void 0 ? 0 : _ref$minWidth,\n minHeight = _ref.minHeight,\n maxHeight = _ref.maxHeight,\n children = _ref.children,\n _ref$debounce = _ref.debounce,\n debounce = _ref$debounce === void 0 ? 0 : _ref$debounce,\n id = _ref.id,\n className = _ref.className,\n onResize = _ref.onResize,\n _ref$style = _ref.style,\n style = _ref$style === void 0 ? {} : _ref$style;\n var containerRef = useRef(null);\n var onResizeRef = useRef();\n onResizeRef.current = onResize;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n useImperativeHandle(ref, function () {\n return containerRef;\n });\n var _useState = useState({\n containerWidth: initialDimension.width,\n containerHeight: initialDimension.height\n }),\n _useState2 = _slicedToArray(_useState, 2),\n sizes = _useState2[0],\n setSizes = _useState2[1];\n var setContainerSize = useCallback(function (newWidth, newHeight) {\n setSizes(function (prevState) {\n var roundedWidth = Math.round(newWidth);\n var roundedHeight = Math.round(newHeight);\n if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {\n return prevState;\n }\n return {\n containerWidth: roundedWidth,\n containerHeight: roundedHeight\n };\n });\n }, []);\n useEffect(function () {\n var callback = function callback(entries) {\n var _onResizeRef$current;\n var _entries$0$contentRec = entries[0].contentRect,\n containerWidth = _entries$0$contentRec.width,\n containerHeight = _entries$0$contentRec.height;\n setContainerSize(containerWidth, containerHeight);\n (_onResizeRef$current = onResizeRef.current) === null || _onResizeRef$current === void 0 || _onResizeRef$current.call(onResizeRef, containerWidth, containerHeight);\n };\n if (debounce > 0) {\n callback = throttle(callback, debounce, {\n trailing: true,\n leading: false\n });\n }\n var observer = new ResizeObserver(callback);\n var _containerRef$current = containerRef.current.getBoundingClientRect(),\n containerWidth = _containerRef$current.width,\n containerHeight = _containerRef$current.height;\n setContainerSize(containerWidth, containerHeight);\n observer.observe(containerRef.current);\n return function () {\n observer.disconnect();\n };\n }, [setContainerSize, debounce]);\n var chartContent = useMemo(function () {\n var containerWidth = sizes.containerWidth,\n containerHeight = sizes.containerHeight;\n if (containerWidth < 0 || containerHeight < 0) {\n return null;\n }\n warn(isPercent(width) || isPercent(height), \"The width(%s) and height(%s) are both fixed numbers,\\n maybe you don't need to use a ResponsiveContainer.\", width, height);\n warn(!aspect || aspect > 0, 'The aspect(%s) must be greater than zero.', aspect);\n var calculatedWidth = isPercent(width) ? containerWidth : width;\n var calculatedHeight = isPercent(height) ? containerHeight : height;\n if (aspect && aspect > 0) {\n // Preserve the desired aspect ratio\n if (calculatedWidth) {\n // Will default to using width for aspect ratio\n calculatedHeight = calculatedWidth / aspect;\n } else if (calculatedHeight) {\n // But we should also take height into consideration\n calculatedWidth = calculatedHeight * aspect;\n }\n\n // if maxHeight is set, overwrite if calculatedHeight is greater than maxHeight\n if (maxHeight && calculatedHeight > maxHeight) {\n calculatedHeight = maxHeight;\n }\n }\n warn(calculatedWidth > 0 || calculatedHeight > 0, \"The width(%s) and height(%s) of chart should be greater than 0,\\n please check the style of container, or the props width(%s) and height(%s),\\n or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\\n height and width.\", calculatedWidth, calculatedHeight, width, height, minWidth, minHeight, aspect);\n var isCharts = !Array.isArray(children) && isElement(children) && getDisplayName(children.type).endsWith('Chart');\n return React.Children.map(children, function (child) {\n if (isElement(child)) {\n return /*#__PURE__*/cloneElement(child, _objectSpread({\n width: calculatedWidth,\n height: calculatedHeight\n }, isCharts ? {\n style: _objectSpread({\n height: '100%',\n width: '100%',\n maxHeight: calculatedHeight,\n maxWidth: calculatedWidth\n }, child.props.style)\n } : {}));\n }\n return child;\n });\n }, [aspect, children, height, maxHeight, minHeight, minWidth, sizes, width]);\n return /*#__PURE__*/React.createElement(\"div\", {\n id: id ? \"\".concat(id) : undefined,\n className: clsx('recharts-responsive-container', className),\n style: _objectSpread(_objectSpread({}, style), {}, {\n width: width,\n height: height,\n minWidth: minWidth,\n minHeight: minHeight,\n maxHeight: maxHeight\n }),\n ref: containerRef\n }, chartContent);\n});"],"names":["getSumData","data","absolute","arguments","length","undefined","reduce","sumObj","revenue","values","forEach","_ref","year","value","Math","abs","RevenueTableFooter","columns","settings","setSettings","useFinancialsTableContext","_jsxs","TableFooter","children","chartView","View","bars","_jsx","TableCell","hasLeading","className","Checkbox","checked","isShowAll","color","ColorVariant","gray","label","size","onChange","map","column","align","classNames","shortFormatNumber","id","RevenueTableHead","unit","sort","onSortChange","TableHead","TableHeader","TableAlign","Left","_sort$column","TableHeaderSortable","isActive","direction","onClick","shouldRemoveOrder","SortDirection","Descending","handleChangeSort","name","getCategoryLabel","category","toUpperCase","substring","WidgetHeader","Heading","level","RevenueDataEnum","COOKIE_KEY","DEFAULT_SETTINGS","yoyChange","yoyChangePct","sharePct","SEGMENT_COLORS","Object","keys","filter","c","default","getColumns","yearKeys","commonClassName","Right","getValueForSort","_data$values$find$val","_data$values$find","find","renderColumn","revenueColValue","subColumns","revenueColSubValue","RedGreenText","rightContent","defaultValue","_revenueColSubValue$v","_revenueColSubValue$v2","toFixed","mapData","revenuesArray","entries","revenues","_ref2","key","isSelected","annualData","fiscal_year","a","b","Number","parseInt","subData","index","yoyData","getYoYData","absSumRow","sharePctData","acc","isNaN","getSharePctData","_ref3","change","_ref4","changePct","_ref5","Boolean","CategoryWidget","_ref6","revenueData","setRevenueData","React","_ref7","useTableColumns","sortedData","changeSort","useTableSort","_ref8","defaultSort","FinancialsWidget","header","onVisibilityChange","item","tableHead","tableFooter","LineStackedBarChart","WidgetSettingsSection","toggleSetting","ChipSwitch","ChipSwitchButton","active","isYoyChange","isYoyChangePct","isSharePct","leftContent","lines","RevenueComponent","useCachedLoaderData","categoryAreasCounts","getAreasCounts","useFinancialsTablePersistScrollPosition","dataKeys","_document$getElementB","document","getElementById","style","removeProperty","hasData","_Fragment","QuoteStickySubMenu","QuoteFinancialsTabMenu","val","Revenue","FinancialsTableContextProvider","defaultSettings","cookieKey","BarChart","chartName","GraphicalChild","defaultTooltipEventType","validateTooltipEventTypes","axisComponents","axisType","AxisComp","formatAxisMap","LineChart","_typeof","o","Symbol","iterator","constructor","prototype","ownKeys","e","r","t","getOwnPropertySymbols","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","arg","input","hint","prim","toPrimitive","res","call","TypeError","String","_toPrimitive","_toPropertyKey","configurable","writable","_slicedToArray","arr","i","Array","isArray","_arrayWithHoles","l","n","u","f","next","done","_iterableToArrayLimit","minLen","_arrayLikeToArray","toString","slice","from","test","_unsupportedIterableToArray","_nonIterableRest","len","arr2","ResponsiveContainer","forwardRef","ref","aspect","_ref$initialDimension","initialDimension","width","height","_ref$width","_ref$height","_ref$minWidth","minWidth","minHeight","maxHeight","_ref$debounce","debounce","onResize","_ref$style","containerRef","useRef","onResizeRef","current","useImperativeHandle","_useState2","useState","containerWidth","containerHeight","sizes","setSizes","setContainerSize","useCallback","newWidth","newHeight","prevState","roundedWidth","round","roundedHeight","useEffect","callback","_onResizeRef$current","_entries$0$contentRec","contentRect","trailing","leading","observer","ResizeObserver","_containerRef$current","getBoundingClientRect","observe","disconnect","chartContent","useMemo","calculatedWidth","calculatedHeight","isCharts","isElement","type","endsWith","child","cloneElement","maxWidth","props","concat"],"sourceRoot":""}