@sproutsocial/seeds-react-data-viz 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/bar/index.d.mts +18 -4
  2. package/dist/bar/index.d.ts +18 -4
  3. package/dist/bar/index.js +31 -16
  4. package/dist/bar/index.js.map +1 -1
  5. package/dist/charts.css +583 -0
  6. package/dist/{chunk-DLO4WZLT.js → chunk-27M4FDNK.js} +14 -14
  7. package/dist/chunk-27M4FDNK.js.map +1 -0
  8. package/dist/chunk-46L4YBLC.js +544 -0
  9. package/dist/chunk-46L4YBLC.js.map +1 -0
  10. package/dist/{chunk-4IOYAUAK.js → chunk-XYE6O77Z.js} +3 -3
  11. package/dist/{chunk-4IOYAUAK.js.map → chunk-XYE6O77Z.js.map} +1 -1
  12. package/dist/donut/index.d.mts +13 -4
  13. package/dist/donut/index.d.ts +13 -4
  14. package/dist/donut/index.js +16 -10
  15. package/dist/donut/index.js.map +1 -1
  16. package/dist/esm/bar/index.js +18 -3
  17. package/dist/esm/bar/index.js.map +1 -1
  18. package/dist/esm/{chunk-J5QE7VCW.js → chunk-KMFRRUTY.js} +2 -2
  19. package/dist/esm/{chunk-U6ZOSXK7.js → chunk-QSSYSKRP.js} +2 -2
  20. package/dist/esm/chunk-QSSYSKRP.js.map +1 -0
  21. package/dist/esm/chunk-XEKQTAUH.js +544 -0
  22. package/dist/esm/chunk-XEKQTAUH.js.map +1 -0
  23. package/dist/esm/donut/index.js +12 -6
  24. package/dist/esm/donut/index.js.map +1 -1
  25. package/dist/esm/index.js +536 -134
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/line-area/index.js +11 -5
  28. package/dist/esm/line-area/index.js.map +1 -1
  29. package/dist/esm/sparkline/index.js +2 -2
  30. package/dist/index.js +497 -95
  31. package/dist/index.js.map +1 -1
  32. package/dist/interactions-DoWoL7bu.d.mts +29 -0
  33. package/dist/interactions-DoWoL7bu.d.ts +29 -0
  34. package/dist/line-area/index.d.mts +15 -4
  35. package/dist/line-area/index.d.ts +15 -4
  36. package/dist/line-area/index.js +16 -10
  37. package/dist/line-area/index.js.map +1 -1
  38. package/dist/sparkline/index.js +4 -4
  39. package/package.json +7 -2
  40. package/dist/chunk-DLO4WZLT.js.map +0 -1
  41. package/dist/chunk-WEKDYQ4T.js +0 -968
  42. package/dist/chunk-WEKDYQ4T.js.map +0 -1
  43. package/dist/esm/chunk-U6ZOSXK7.js.map +0 -1
  44. package/dist/esm/chunk-Z4LOM4OZ.js +0 -968
  45. package/dist/esm/chunk-Z4LOM4OZ.js.map +0 -1
  46. /package/dist/esm/{chunk-J5QE7VCW.js.map → chunk-KMFRRUTY.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/AreaChart/AreaChart.tsx","../../src/components/AreaChart/components/AreaChartLegend.tsx","../../src/components/AreaChart/components/AreaChartTooltip.tsx","../../src/components/ChartXAnnotationMarker/components/ChartXAnnotationMarkerPortal.tsx","../../src/hooks/useTimeSeriesChartOptions.ts","../../src/components/ChartXAnnotationDetails/ChartXAnnotationDetails.tsx","../../src/components/ChartXAnnotationMarker/ChartXAnnotationMarker.tsx","../../src/components/DonutChart/DonutChart.tsx","../../src/components/DonutChart/components/DonutChartLegend.tsx","../../src/components/DonutChart/components/DonutChartTooltip.tsx","../../src/components/DonutChart/helpers/transformDonutChartTooltipData.ts","../../src/components/DonutChart/components/DonutChartLegendTable.tsx","../../src/components/LineChart/LineChart.tsx","../../src/components/LineChart/components/LineChartLegend.tsx","../../src/components/LineChart/components/LineChartTooltip.tsx","../../src/components/VerticalBarChart/VerticalBarChart.tsx","../../src/components/VerticalBarChart/components/VerticalBarChartLegend.tsx","../../src/components/VerticalBarChart/components/VerticalBarChartTooltip.tsx","../../src/components/VerticalBarChart/styles.ts"],"sourcesContent":["import { memo, type ReactNode } from \"react\";\nimport Highcharts, { type AnnotationsOptions } from \"highcharts\";\nimport { HighchartsReact } from \"highcharts-react-official\";\nimport highchartsAccessibility from \"highcharts/modules/accessibility\";\nimport highchartsAnnotations from \"highcharts/modules/annotations\";\nimport styled from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\n\nimport { AreaChartLegend } from \"./components/AreaChartLegend\";\nimport { AreaChartTooltip } from \"./components/AreaChartTooltip\";\n\nimport { ChartTooltipPortal } from \"../ChartTooltip/components/ChartTooltipPortal\";\nimport { ChartXAnnotationMarkerPortal } from \"../ChartXAnnotationMarker/components/ChartXAnnotationMarkerPortal\";\nimport { transformTimeSeriesTooltipData } from \"../../helpers\";\nimport { useTimeSeriesChartOptions } from \"../../hooks\";\nimport { areaChartStyles, GlobalChartStyleOverrides } from \"../../styles\";\nimport type {\n TypeChartDataPoint,\n TypeChartDataStyles,\n TypeChartNumberFormat,\n TypeChartTimeFormat,\n TypeChartTooltipDateFormatter,\n TypeChartTooltipProps,\n TypeChartYAxisLabelFormatter,\n TypeChartXAnnotations,\n} from \"../../types\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\n// init modules\nhighchartsAccessibility(Highcharts);\nhighchartsAnnotations(Highcharts);\n\n// styled components\nconst StyledBox = styled(Box)`\n ${areaChartStyles}\n`;\n\n// types\nexport type TypeAreaChartProps = Readonly<{\n data: ReadonlyArray<\n Readonly<{\n name: string;\n points: ReadonlyArray<TypeChartDataPoint>;\n // optional\n icon?: ReactNode;\n styles?: TypeChartDataStyles;\n }>\n >;\n invalidNumberLabel: ReactNode;\n numberLocale: Intl.LocalesArgument;\n textLocale: Intl.LocalesArgument;\n tooltipDateFormatter: TypeChartTooltipDateFormatter;\n tooltipTotalLabel: ReactNode;\n // optional\n currency?: string;\n disableTooltips?: boolean;\n numberFormat?: TypeChartNumberFormat;\n tooltip?: (\n _props: TypeChartTooltipProps & Readonly<{ total: number | null }>\n ) => ReactNode;\n yAxisLabelFormatter?: TypeChartYAxisLabelFormatter;\n onClick?: (_props: Readonly<{ x: number }>) => void;\n tooltipClickLabel?: ReactNode;\n timeFormat?: TypeChartTimeFormat;\n timezone?: string;\n xAnnotations?: TypeChartXAnnotations;\n}>;\n\n/**\n * @deprecated Use the v2 component instead:\n *\n * ```ts\n * import { LineAreaChart } from \"@sproutsocial/seeds-react-data-viz/line-area\";\n * ```\n *\n * `LineAreaChart` (with `variant=\"area\"` or `\"areaspline\"`) is built on the shared\n * v2 chart base — see `charts/README.md` for the architecture. The v2 prop shape\n * differs from this legacy component and v2 does not yet cover every legacy\n * feature (locale-aware tooltips, currency/number formatters, area totals).\n * Migrate when ready; Claude-assisted migration guidance lands with the CE-10 codemod.\n */\nexport const AreaChart = memo<TypeAreaChartProps>(function AreaChart(\n props: TypeAreaChartProps\n) {\n const { data } = props;\n\n return data.length === 0 ? null : <AreaChartWithData {...props} />;\n});\n\nconst AreaChartWithData = memo<TypeAreaChartProps>(function AreaChartWithData({\n data,\n invalidNumberLabel,\n numberLocale = \"en-us\",\n textLocale = \"en-us\",\n tooltipDateFormatter,\n tooltipTotalLabel,\n // optional\n currency = \"USD\",\n disableTooltips = false,\n numberFormat = \"decimal\",\n tooltip,\n yAxisLabelFormatter,\n onClick,\n tooltipClickLabel,\n timeFormat = \"12\",\n timezone = \"UTC\",\n xAnnotations,\n}: TypeAreaChartProps) {\n const { options, chart, callback } = useTimeSeriesChartOptions({\n currency,\n data,\n disableTooltips,\n numberFormat,\n numberLocale,\n seriesType: \"areaspline\",\n textLocale,\n yAxisLabelFormatter,\n onClick,\n timeFormat,\n timezone,\n xAnnotations,\n });\n\n const colors = data.map(\n (series, index) =>\n series.styles?.color ?? theme.colors.DATAVIZ_COLORS_LIST[index]\n );\n\n return (\n <>\n <GlobalChartStyleOverrides />\n <StyledBox\n // @ts-expect-error - styled-components transient prop ($colors) is not in StyledBox's inferred prop types\n $colors={colors}\n $hasOnClick={Boolean(onClick)}\n bg=\"container.background.base\"\n >\n <HighchartsReact\n highcharts={Highcharts}\n options={options}\n callback={callback}\n />\n {chart && chart.annotations?.length ? (\n <ChartXAnnotationMarkerPortal\n xAnnotations={xAnnotations}\n annotationContext={chart.annotations?.[0] as AnnotationsOptions}\n chartContainer={chart.container}\n />\n ) : null}\n {chart && !disableTooltips ? (\n <ChartTooltipPortal\n chart={chart}\n renderContent={(context) => {\n const tooltipData = transformTimeSeriesTooltipData({\n context,\n data,\n });\n const x = context.x as number;\n const total = context.total as number;\n\n const xAnnotationDetails = xAnnotations?.[x]?.details;\n\n return tooltip ? (\n tooltip({ data: tooltipData, total, x })\n ) : (\n <AreaChartTooltip\n currency={currency}\n data={tooltipData}\n invalidNumberLabel={invalidNumberLabel}\n numberFormat={numberFormat}\n numberLocale={numberLocale}\n textLocale={textLocale}\n tooltipDateFormatter={tooltipDateFormatter}\n tooltipTotalLabel={tooltipTotalLabel}\n total={total}\n x={x}\n onClick={onClick}\n tooltipClickLabel={tooltipClickLabel}\n xAnnotationDetails={xAnnotationDetails}\n />\n );\n }}\n />\n ) : null}\n <Box mt={350}>\n <AreaChartLegend data={data} />\n </Box>\n </StyledBox>\n </>\n );\n});\n","import { memo } from \"react\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type { TypeAreaChartProps } from \"../AreaChart\";\nimport { ChartLegend, type TypeChartLegendProps } from \"../../ChartLegend\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\n// exported for testing\nexport const getAreaChartLegendLabels = ({\n data,\n}: Readonly<{\n data: TypeAreaChartProps[\"data\"];\n}>): TypeChartLegendProps[\"legendLabels\"] => {\n return data.map((series, index) => ({\n content: (\n <ChartLegendLabelContentWithIcon icon={series.icon}>\n {series.name}\n </ChartLegendLabelContentWithIcon>\n ),\n color: series.styles?.color || theme.colors.DATAVIZ_COLORS_LIST[index],\n }));\n};\n\ntype TypeAreaChartLegendProps = Readonly<{\n data: TypeAreaChartProps[\"data\"];\n}>;\n\nexport const AreaChartLegend = memo<TypeAreaChartLegendProps>(\n function AreaChartLegend({ data }: TypeAreaChartLegendProps) {\n return <ChartLegend legendLabels={getAreaChartLegendLabels({ data })} />;\n }\n);\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Duration } from \"@sproutsocial/seeds-react-duration\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Numeral } from \"@sproutsocial/seeds-react-numeral\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\nimport { type TypeChartXAnnotationsDetails } from \"../../../types\";\n\nimport type { TypeAreaChartProps } from \"../AreaChart\";\n\nimport {\n ChartTooltip,\n ChartTooltipFooter,\n ChartTooltipTable,\n ChartTooltipTitle,\n type TypeChartTooltipTableProps,\n} from \"../../ChartTooltip\";\nimport type { TypeChartTooltipProps } from \"../../../types\";\nimport { ChartLegendLabel } from \"../../ChartLegend/components/ChartLegendLabel\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\nexport type TypeAreaChartTooltipProps = Readonly<{\n data: TypeChartTooltipProps[\"data\"];\n invalidNumberLabel: TypeAreaChartProps[\"invalidNumberLabel\"];\n numberLocale: TypeAreaChartProps[\"numberLocale\"];\n textLocale: TypeAreaChartProps[\"textLocale\"];\n tooltipDateFormatter: TypeAreaChartProps[\"tooltipDateFormatter\"];\n tooltipTotalLabel: TypeAreaChartProps[\"tooltipTotalLabel\"];\n total: number | null;\n x: TypeChartTooltipProps[\"x\"];\n // optional\n currency?: TypeAreaChartProps[\"currency\"];\n numberFormat?: TypeAreaChartProps[\"numberFormat\"];\n onClick?: TypeAreaChartProps[\"onClick\"];\n tooltipClickLabel?: TypeAreaChartProps[\"tooltipClickLabel\"];\n xAnnotationDetails?: TypeChartXAnnotationsDetails;\n}>;\n\nexport const AreaChartTooltip = memo<TypeAreaChartTooltipProps>(\n function AreaChartTooltip({\n data,\n invalidNumberLabel,\n numberLocale,\n textLocale,\n tooltipDateFormatter,\n tooltipTotalLabel,\n total,\n x,\n // optional\n currency = \"USD\",\n numberFormat = \"decimal\",\n onClick,\n tooltipClickLabel,\n xAnnotationDetails,\n }: TypeAreaChartTooltipProps) {\n const rows = data.map(({ color, icon, name, value }) => {\n return {\n cells: [\n {\n content: (\n <ChartLegendLabel color={color}>\n <ChartLegendLabelContentWithIcon icon={icon}>\n <Text aria-label={`${name}: `}>{name}</Text>\n </ChartLegendLabelContentWithIcon>\n </ChartLegendLabel>\n ),\n },\n {\n content:\n value === null && invalidNumberLabel ? (\n <Text>{invalidNumberLabel}</Text>\n ) : numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={value} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={value}\n />\n ),\n align: \"right\",\n },\n ],\n };\n });\n\n const appendedRows =\n data.length > 1\n ? [\n {\n cells: [\n {\n content: (\n <Text\n fontWeight=\"semibold\"\n aria-label={`${tooltipTotalLabel}: `}\n >\n {tooltipTotalLabel}\n </Text>\n ),\n },\n {\n content: (\n <Text fontWeight=\"bold\">\n {total === null && invalidNumberLabel ? (\n invalidNumberLabel\n ) : numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={total} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={total}\n />\n )}\n </Text>\n ),\n align: \"right\",\n },\n ],\n isAppendedRow: true,\n },\n ]\n : [];\n\n return (\n <ChartTooltip>\n {xAnnotationDetails ? xAnnotationDetails() : undefined}\n <ChartTooltipTitle>{tooltipDateFormatter({ x })}</ChartTooltipTitle>\n <ChartTooltipTable\n rows={\n [...rows, ...appendedRows] as TypeChartTooltipTableProps[\"rows\"]\n }\n />\n {onClick && tooltipClickLabel ? (\n <ChartTooltipFooter>\n {typeof tooltipClickLabel === \"string\" ? (\n <Box display=\"flex\" alignItems=\"center\" gap={300}>\n <Icon name=\"hand-pointer-clicking-outline\" color=\"icon.base\" />\n <Text color=\"text.subtext\" fontSize={200}>\n {tooltipClickLabel}\n </Text>\n </Box>\n ) : (\n tooltipClickLabel\n )}\n </ChartTooltipFooter>\n ) : null}\n </ChartTooltip>\n );\n }\n);\n","import { memo, useEffect, useState, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { type TypeChartXAnnotations } from \"../../../types\";\nimport {\n type AnnotationsOptions,\n type AnnotationsLabelOptions,\n} from \"highcharts\";\n\n// add in types that Highcharts doesn't include by default\nexport interface TypeExtendedLabelOptions extends AnnotationsLabelOptions {\n graphic?: {\n div?: HTMLDivElement;\n };\n options?: {\n point?: {\n x?: number;\n };\n };\n}\n\nexport const ChartXAnnotationMarkerPortal = memo(\n function ChartXAnnotationMarkerPortal({\n xAnnotations,\n annotationContext,\n chartContainer,\n }: {\n xAnnotations: TypeChartXAnnotations;\n annotationContext: AnnotationsOptions;\n /** The chart's own DOM root; queries scope to it so charts sharing a page don't sweep each other's markers. */\n chartContainer: HTMLElement;\n }) {\n const annotationContainers = useRef<Record<number, HTMLDivElement>>({});\n const [, setRenderCount] = useState(0); // used to trigger react to re-render\n const forceRender = () => setRenderCount((prev) => prev + 1);\n useEffect(() => {\n if (annotationContext.labels) {\n const newContainers: Record<number, HTMLDivElement> = {};\n const existingAnnotationContainers = chartContainer.querySelectorAll(\n \"div[data-annotation-marker='true']\"\n );\n\n // 1. Mark all existing annotations as \"false\" before updating\n // Highcharts doesn't clean these up, so we'll need to at the end\n existingAnnotationContainers.forEach((annotation) =>\n annotation.setAttribute(\"data-annotation-marker\", \"false\")\n );\n\n annotationContext.labels.forEach((label: TypeExtendedLabelOptions) => {\n const labelElement = label.graphic?.div;\n if (labelElement) {\n // 2. Remove old annotations markers inside the current container\n labelElement\n .querySelectorAll(\"div[data-annotation-marker]\")\n .forEach((component) => component.remove());\n\n // 3. Create a new annotation div\n const annotationDiv = document.createElement(\"div\");\n annotationDiv.setAttribute(\"data-annotation-marker\", \"true\");\n labelElement.appendChild(annotationDiv);\n\n const xValue = label.options?.point?.x as number;\n newContainers[xValue] = annotationDiv;\n }\n });\n\n annotationContainers.current = newContainers;\n forceRender(); // Triggers re-render so the portal attaches to updated containers\n\n // 4. Remove stale parent annotation containers\n requestAnimationFrame(() => {\n chartContainer\n .querySelectorAll(\"div.highcharts-annotation\")\n .forEach((annotationDiv) => {\n const reactAnnotations = annotationDiv.querySelectorAll(\n \"div[data-annotation-marker]\"\n );\n\n const hasActiveAnnotations = Array.from(reactAnnotations).some(\n (div) => div.getAttribute(\"data-annotation-marker\") === \"true\"\n );\n\n // Remove if all child markers are stale\n if (!hasActiveAnnotations) {\n annotationDiv.remove();\n }\n });\n });\n }\n }, [annotationContext.labels, xAnnotations, chartContainer]);\n\n return (\n <>\n {Object.entries(annotationContainers.current).map(\n ([xValue, container]) => {\n const annotationComponent = xAnnotations?.[Number(xValue)]?.marker;\n return annotationComponent\n ? createPortal(annotationComponent(), container)\n : null;\n }\n )}\n </>\n );\n }\n);\n","import { useState, useCallback, useMemo } from \"react\";\nimport type {\n Chart,\n Annotation,\n Series,\n Point,\n AxisLabelsFormatterContextObject,\n SeriesClickEventObject,\n} from \"highcharts\";\n\nimport {\n lineChartOptions,\n areaChartOptions,\n columnChartOptions,\n} from \"../constants\";\nimport type { TypeAreaChartProps } from \"../components/AreaChart\";\nimport type { TypeLineChartProps } from \"../components/LineChart\";\nimport type { TypeVerticalBarChartProps } from \"../types\";\nimport {\n yAxisLabelFormatter as defaultYAxisLabelFormatter,\n transformDataToSeries,\n xAxisLabelFormatter,\n} from \"../helpers\";\nimport type {\n TypeChartNumberFormat,\n TypeChartTimeFormat,\n ExtendedAxisLabelsFormatterContextObject,\n TypeChartYAxisLabelFormatter,\n TypeChartXAnnotations,\n TypeSeriesType,\n} from \"../types\";\nimport { generateChartTooltipPortalId } from \"../components/ChartTooltip/components/ChartTooltipPortal\";\nimport { merge } from \"lodash\";\n\nexport type TypeUseTimeSeriesChartOptionsProps = {\n xAnnotations: TypeChartXAnnotations;\n data:\n | TypeAreaChartProps[\"data\"]\n | TypeLineChartProps[\"data\"]\n | TypeVerticalBarChartProps[\"data\"];\n numberLocale: Intl.LocalesArgument;\n seriesType: TypeSeriesType;\n textLocale: Intl.LocalesArgument;\n // optional\n currency?: string;\n disableTooltips?: boolean;\n numberFormat?: TypeChartNumberFormat;\n yAxisLabelFormatter?: TypeChartYAxisLabelFormatter;\n onClick?: ({ x }: Readonly<{ x: number }>) => void;\n timeFormat?: TypeChartTimeFormat;\n timezone?: string;\n xAxisLabelFormatter?: (params: {\n textLocale: Intl.LocalesArgument;\n tickPositions: number[];\n unitName: string;\n value: number | string;\n timeFormat?: string;\n }) => string;\n};\nexport interface TypeExtendedChart extends Chart {\n // Highcharts doesn't include the annotations type by default, so we have to add it\n annotations?: Annotation[];\n}\n\nexport const useTimeSeriesChartOptions = ({\n xAnnotations,\n data,\n numberLocale,\n seriesType,\n textLocale,\n currency = \"USD\",\n disableTooltips = false,\n numberFormat = \"decimal\",\n yAxisLabelFormatter,\n onClick,\n timeFormat = \"12\",\n timezone = \"UTC\",\n xAxisLabelFormatter,\n}: TypeUseTimeSeriesChartOptionsProps) => {\n const [chart, setChart] = useState<TypeExtendedChart | null>(null);\n\n const callback = useCallback((chartInstance: Chart) => {\n setChart(chartInstance);\n }, []);\n\n function attachTooltipEventListeners(series: Series[], tooltipId: string) {\n const handleFocus = (point: Point) =>\n point.series.chart.tooltip.refresh(point);\n const handleBlur = (point: Point) => point.series.chart.tooltip.hide(0);\n\n series\n .flatMap((item) => item.data)\n .forEach((point) => {\n const pointElement = point?.graphic?.element;\n if (pointElement) {\n pointElement.setAttribute(\"aria-describedby\", tooltipId);\n pointElement.addEventListener(\"focus\", () => handleFocus(point));\n pointElement.addEventListener(\"blur\", () => handleBlur(point));\n }\n });\n }\n\n const formattedXAnnotations = (annotations?: TypeChartXAnnotations) => {\n if (annotations) {\n return Object.entries(annotations).map(([x]) => ({\n point: {\n x: Number(x), // Convert key (which is a string) to a number\n y: 0,\n xAxis: 0,\n yAxis: 0,\n },\n text: \" \", // space is necessary because empty string reverts to showing default label\n }));\n }\n };\n\n const chartMarginTop = xAnnotations ? 24 : null;\n\n const getBaseChartOptions = (type: TypeSeriesType) => {\n switch (type) {\n case \"areaspline\":\n return areaChartOptions;\n case \"spline\":\n return lineChartOptions;\n case \"column\":\n return columnChartOptions;\n default:\n return lineChartOptions; // fallback to line chart as default\n }\n };\n\n const baseChartOptions = getBaseChartOptions(seriesType);\n\n // Detect if we have categorical data (string x values)\n const hasCategoricalData = data.some((series) =>\n series.points.some((point) => typeof point.x === \"string\")\n );\n\n // Extract categories for categorical data\n const categories = hasCategoricalData\n ? data[0]?.points.map((point) => point.x as string) || []\n : [];\n\n // Detect sparse timeline data (numerical x values with gaps that need wider columns)\n const hasSparseTimelineData = !hasCategoricalData && seriesType === \"column\";\n\n const options = useMemo(() => {\n return merge({}, baseChartOptions, {\n accessibility: {\n point: {\n descriptionFormatter: function () {\n return \" \"; // space is necessary because empty string reverts to defaults\n },\n },\n },\n annotations: [\n {\n labels: xAnnotations\n ? formattedXAnnotations(xAnnotations)\n : undefined,\n },\n ],\n chart: {\n marginTop: chartMarginTop,\n events: {\n click: onClick\n ? function (this: TypeExtendedChart) {\n return onClick({ x: this?.hoverPoint?.x as number });\n }\n : undefined,\n load: function (this: TypeExtendedChart) {\n const tooltipId = generateChartTooltipPortalId(this.index);\n attachTooltipEventListeners(this.series, tooltipId);\n },\n },\n },\n plotOptions: {\n areaspline: {\n events: {\n click:\n onClick && seriesType === \"areaspline\"\n ? function (event: SeriesClickEventObject) {\n return onClick({ x: event.point.x });\n }\n : undefined,\n },\n },\n spline: {\n events: {\n click:\n onClick && seriesType === \"spline\"\n ? function (event: SeriesClickEventObject) {\n return onClick({ x: event.point.x });\n }\n : undefined,\n },\n },\n column: {\n // For sparse timeline data, set explicit point width to make columns wider\n ...(hasSparseTimelineData && {\n pointWidth: 20, // Fixed width in pixels for sparse timeline data\n }),\n point: {\n events: {\n /*\n Custom hover behavior for multi-series column charts.\n\n In multi-series column charts, multiple columns\n can share the same x-axis position (stacked or grouped). When hovering\n over one column, we want ALL columns at that x-position to highlight\n together for better visual feedback. Simple CSS :hover only affects the\n individual element being hovered, not related columns at the same position.\n\n This custom behavior ensures that when you hover over any column at a\n specific x-position, all columns at that same position get the \"column-hover\"\n class, creating a unified highlight effect across all series.\n */\n click:\n onClick && seriesType === \"column\"\n ? function (event: SeriesClickEventObject) {\n return onClick({ x: event.point.x });\n }\n : undefined,\n mouseOver: function (this: any) {\n const x = this.x;\n if (\n this.series &&\n this.series.chart &&\n this.series.chart.series\n ) {\n this.series.chart.series.forEach((series: any) => {\n if (series.type === \"column\") {\n series.data.forEach((point: any) => {\n if (point.x === x) {\n const el = point.graphic && point.graphic.element;\n if (el) {\n el.classList.add(\"column-hover\");\n }\n }\n });\n }\n });\n }\n },\n mouseOut: function (this: any) {\n if (\n this.series &&\n this.series.chart &&\n this.series.chart.series\n ) {\n this.series.chart.series.forEach((series: any) => {\n if (series.type === \"column\") {\n series.data.forEach((point: any) => {\n const el = point.graphic && point.graphic.element;\n if (el) {\n el.classList.remove(\"column-hover\");\n }\n });\n }\n });\n }\n },\n },\n },\n },\n },\n series: transformDataToSeries({ data }, seriesType),\n time: { timezone },\n tooltip: {\n enabled: !disableTooltips,\n },\n xAxis: {\n labels: {\n formatter: function (this: AxisLabelsFormatterContextObject) {\n const tickPositions = (this.axis.tickPositions || []).map(\n Number\n ) as number[];\n const value = this.value;\n const unitName = (this as ExtendedAxisLabelsFormatterContextObject)\n .tickPositionInfo?.unitName;\n if (typeof xAxisLabelFormatter === \"function\") {\n return xAxisLabelFormatter({\n textLocale,\n tickPositions,\n timeFormat,\n unitName,\n value,\n });\n }\n if (typeof xAxisLabelFormatterDefault === \"function\") {\n return xAxisLabelFormatterDefault({\n textLocale,\n tickPositions,\n timeFormat,\n timezone,\n unitName,\n value,\n });\n }\n return \"\";\n },\n },\n // Override xAxis type for categorical data\n ...(hasCategoricalData && {\n type: \"category\",\n categories,\n crosshair: false,\n }),\n },\n yAxis: {\n labels: {\n formatter: function (this: AxisLabelsFormatterContextObject) {\n return yAxisLabelFormatter\n ? yAxisLabelFormatter({\n y: this.value as number,\n yValues: this.axis.tickPositions as ReadonlyArray<number>,\n })\n : defaultYAxisLabelFormatter({\n currency,\n numberFormat,\n numberLocale,\n textLocale,\n tickPositions: this.axis.tickPositions || [],\n value: this.value,\n });\n },\n },\n },\n });\n }, [\n baseChartOptions,\n categories,\n currency,\n data,\n hasCategoricalData,\n hasSparseTimelineData,\n numberFormat,\n numberLocale,\n onClick,\n seriesType,\n textLocale,\n timeFormat,\n xAnnotations,\n yAxisLabelFormatter,\n xAxisLabelFormatter,\n ]);\n\n return { options, chart, callback };\n};\n\n// Alias the default formatter to avoid shadowing\nconst xAxisLabelFormatterDefault = xAxisLabelFormatter;\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Icon, type TypeIconName } from \"@sproutsocial/seeds-react-icon\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\nimport { ChartTooltipHeader } from \"../ChartTooltip\";\n\ntype TypeChartXAnnotationDetailsProps = Readonly<{\n iconName: TypeIconName;\n text: string;\n}>;\n\n// Named function so React has a displayName (satisfies react/display-name); don't convert to an anonymous arrow.\nexport const ChartXAnnotationDetails = memo<TypeChartXAnnotationDetailsProps>(\n function ChartXAnnotationDetails({ iconName, text }) {\n return (\n <ChartTooltipHeader>\n <Box display=\"flex\" alignItems=\"center\" gap={300}>\n <Icon name={iconName} size=\"mini\" color=\"icon.base\" />\n <Text color=\"text.body\" fontSize={200}>\n {text}\n </Text>\n </Box>\n </ChartTooltipHeader>\n );\n }\n);\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Icon, type TypeIconName } from \"@sproutsocial/seeds-react-icon\";\n\ntype TypeChartXAnnotationMarkerProps = Readonly<{\n iconName: TypeIconName;\n}>;\n\n// Named function so React has a displayName (satisfies react/display-name); don't convert to an anonymous arrow.\nexport const ChartXAnnotationMarker = memo<TypeChartXAnnotationMarkerProps>(\n function ChartXAnnotationMarker({ iconName }) {\n return (\n <Box display=\"flex\" flexDirection=\"column\" alignItems=\"center\" gap={200}>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"20px\"\n height=\"20px\"\n bg=\"icon.base\"\n borderRadius=\"50%\"\n >\n <Icon name={iconName} size=\"mini\" color=\"icon.inverse\" />\n </Box>\n {/* Marker line height is hard coded for simplicity since chart height is hard coded. If that changes, we'll need to make this dynamic */}\n <Box height={`199px`} width=\"0.5px\" bg=\"neutral.200\" />\n </Box>\n );\n }\n);\n","import { memo, useState, useEffect, useCallback, type ReactNode } from \"react\";\nimport Highcharts, { type Chart, type Options } from \"highcharts\";\nimport { HighchartsReact } from \"highcharts-react-official\";\nimport highchartsAccessibility from \"highcharts/modules/accessibility\";\nimport styled from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\n\nimport { DonutChartLegend } from \"./components/DonutChartLegend\";\nimport { DonutChartTooltip } from \"./components/DonutChartTooltip\";\nimport { transformDonutChartTooltipData } from \"./helpers/transformDonutChartTooltipData\";\n\nimport {\n ChartTooltipPortal,\n generateChartTooltipPortalId,\n} from \"../ChartTooltip/components/ChartTooltipPortal\";\nimport { donutChartOptions } from \"../../constants/chartOptions\";\nimport { GlobalChartStyleOverrides, donutChartStyles } from \"../../styles\";\nimport type { TypeChartDataStyles, TypeChartNumberFormat } from \"../../types\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\n// init modules\nhighchartsAccessibility(Highcharts);\n\n// styled components\nconst StyledBox = styled(Box)`\n ${donutChartStyles}\n`;\n\n// types\nexport type TypeDonutChartTooltipProps = Readonly<{\n color: string;\n name: string;\n percent: number | null;\n value: number | null;\n // optional\n icon?: ReactNode;\n}>;\n\nexport type TypeDonutChartDataItem = Readonly<{\n name: string;\n value: number;\n // optional\n key?: string;\n icon?: ReactNode;\n styles?: TypeChartDataStyles;\n}>;\n\nexport type TypeDonutChartProps = Readonly<{\n data: ReadonlyArray<TypeDonutChartDataItem>;\n numberLocale: Intl.LocalesArgument;\n textLocale: Intl.LocalesArgument;\n // optional\n currency?: string;\n disableTooltips?: boolean;\n hideLegend?: boolean;\n numberFormat?: TypeChartNumberFormat;\n tooltip?: (_props: TypeDonutChartTooltipProps) => ReactNode;\n onClick?: (_props: Readonly<{ x: string } & TypeDonutChartDataItem>) => void;\n tooltipClickLabel?: ReactNode;\n}>;\n\n/**\n * @deprecated Use `DonutChart` from `@sproutsocial/seeds-react-data-viz/donut` instead.\n */\nexport const DonutChart = memo<TypeDonutChartProps>(function DonutChart(\n props: TypeDonutChartProps\n) {\n const { data } = props;\n\n return data.length === 0 ? null : <DonutChartWithData {...props} />;\n});\n\nconst DonutChartWithData = memo<TypeDonutChartProps>(\n function DonutChartWithData({\n data,\n numberLocale = \"en-us\",\n textLocale = \"en-us\",\n // optional\n currency = \"USD\",\n disableTooltips = false,\n hideLegend = false,\n numberFormat = \"decimal\",\n tooltip,\n onClick,\n tooltipClickLabel,\n }: TypeDonutChartProps) {\n const [options, setOptions] = useState<Options>(donutChartOptions);\n const [chart, setChart] = useState<Chart | null>(null);\n\n const callback = useCallback((chartInstance: Chart) => {\n setChart(chartInstance);\n }, []);\n\n useEffect(() => {\n setOptions({\n accessibility: {\n point: {\n descriptionFormatter: function () {\n return \" \"; // space is necessary because empty string reverts to defaults\n },\n },\n },\n chart: {\n events: {\n render: function () {\n const allSlices = this.series[0]?.data ?? [];\n const tooltipId = generateChartTooltipPortalId(this.index);\n\n allSlices.forEach((slice) => {\n const sliceElement = slice?.graphic?.element;\n sliceElement?.setAttribute(\"aria-describedby\", tooltipId);\n\n // Update tooltip on focus\n sliceElement?.addEventListener(\"focus\", () => {\n slice.series.chart.tooltip.refresh(slice);\n });\n\n // Hide tooltip on blur\n sliceElement?.addEventListener(\"blur\", () => {\n slice.series.chart.tooltip.hide(0);\n });\n });\n },\n },\n },\n series: [\n {\n type: \"pie\",\n data: data.map((item, index) => {\n return {\n name: item.name,\n y: item.value,\n colorIndex: index,\n events: onClick\n ? {\n click: function () {\n onClick({ x: item.name, ...item });\n },\n }\n : undefined,\n };\n }),\n },\n ],\n tooltip: {\n enabled: !disableTooltips,\n },\n });\n }, [data]);\n\n const colors = data.map(\n (series, index) =>\n series.styles?.color ?? theme.colors.DATAVIZ_COLORS_LIST[index] ?? \"\"\n );\n\n return (\n <>\n <GlobalChartStyleOverrides />\n <StyledBox\n $colors={colors}\n $hasOnClick={Boolean(onClick)}\n bg=\"container.background.base\"\n >\n <HighchartsReact\n highcharts={Highcharts}\n options={options}\n callback={callback}\n />\n {chart && !disableTooltips ? (\n <ChartTooltipPortal\n chart={chart}\n renderContent={(context) => {\n const { color, icon, name, percent, value } =\n transformDonutChartTooltipData({ context, data });\n\n return tooltip ? (\n tooltip({ color, icon, name, percent, value })\n ) : (\n <DonutChartTooltip\n color={color}\n currency={currency}\n icon={icon}\n name={name}\n numberFormat={numberFormat}\n numberLocale={numberLocale}\n percent={percent}\n textLocale={textLocale}\n value={value}\n onClick={onClick}\n tooltipClickLabel={tooltipClickLabel}\n />\n );\n }}\n />\n ) : null}\n {hideLegend ? null : (\n <Box mt={350}>\n <DonutChartLegend data={data} />\n </Box>\n )}\n </StyledBox>\n </>\n );\n }\n);\n","import { memo } from \"react\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type { TypeDonutChartProps } from \"../DonutChart\";\nimport { ChartLegend, type TypeChartLegendProps } from \"../../ChartLegend\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\n// exported for testing\nexport const getDonutChartLegendLabels = ({\n data,\n}: Readonly<{\n data: TypeDonutChartProps[\"data\"];\n}>): TypeChartLegendProps[\"legendLabels\"] => {\n return data.map((slice, index) => ({\n content: (\n <ChartLegendLabelContentWithIcon icon={slice.icon}>\n {slice.name}\n </ChartLegendLabelContentWithIcon>\n ),\n color: slice.styles?.color || theme.colors.DATAVIZ_COLORS_LIST[index],\n }));\n};\n\ntype TypeDonutChartLegendProps = Readonly<{\n data: TypeDonutChartProps[\"data\"];\n}>;\n\nexport const DonutChartLegend = memo<TypeDonutChartLegendProps>(\n function DonutChartLegend({ data }: TypeDonutChartLegendProps) {\n return <ChartLegend legendLabels={getDonutChartLegendLabels({ data })} />;\n }\n);\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Duration } from \"@sproutsocial/seeds-react-duration\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Numeral } from \"@sproutsocial/seeds-react-numeral\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\n\nimport {\n ChartTooltip,\n ChartTooltipFooter,\n ChartTooltipTable,\n type TypeChartTooltipTableProps,\n} from \"../../ChartTooltip\";\nimport type {\n TypeDonutChartProps,\n TypeDonutChartTooltipProps as TypeDonutTooltipProps,\n} from \"../../DonutChart\";\nimport { ChartLegendLabel } from \"../../ChartLegend/components/ChartLegendLabel\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\nexport type TypeDonutChartTooltipProps = Readonly<{\n color: TypeDonutTooltipProps[\"color\"];\n name: TypeDonutTooltipProps[\"name\"];\n numberLocale: TypeDonutChartProps[\"numberLocale\"];\n percent: TypeDonutTooltipProps[\"percent\"];\n textLocale: TypeDonutChartProps[\"textLocale\"];\n value: TypeDonutTooltipProps[\"value\"];\n // optional\n currency?: TypeDonutChartProps[\"currency\"];\n icon?: TypeDonutTooltipProps[\"icon\"];\n numberFormat?: TypeDonutChartProps[\"numberFormat\"];\n onClick?: TypeDonutChartProps[\"onClick\"];\n tooltipClickLabel?: TypeDonutChartProps[\"tooltipClickLabel\"];\n}>;\n\nexport const DonutChartTooltip = memo<TypeDonutChartTooltipProps>(\n function DonutChartTooltip({\n color,\n name,\n numberLocale,\n percent,\n textLocale,\n value,\n currency,\n icon,\n numberFormat,\n onClick,\n tooltipClickLabel,\n }: TypeDonutChartTooltipProps) {\n const rows = [\n {\n cells: [\n {\n content: (\n <ChartLegendLabel color={color}>\n <ChartLegendLabelContentWithIcon icon={icon}>\n <Text aria-label={`${name}: `}>{name}</Text>\n </ChartLegendLabelContentWithIcon>\n </ChartLegendLabel>\n ),\n },\n {\n content: (\n <Box display=\"inline-flex\" alignItems=\"center\" gap={350}>\n <Numeral\n number={percent}\n format=\"percent\"\n abbreviate={false}\n locale={numberLocale as string}\n />\n <Text fontWeight=\"semibold\">\n {numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={value} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={value}\n />\n )}\n </Text>\n </Box>\n ),\n align: \"right\",\n },\n ],\n },\n ];\n\n return (\n <ChartTooltip>\n <ChartTooltipTable rows={rows as TypeChartTooltipTableProps[\"rows\"]} />\n {onClick && tooltipClickLabel ? (\n <ChartTooltipFooter>\n {typeof tooltipClickLabel === \"string\" ? (\n <Box display=\"flex\" alignItems=\"center\" gap={300}>\n <Icon name=\"hand-pointer-clicking-outline\" color=\"icon.base\" />\n <Text color=\"text.subtext\" fontSize={200}>\n {tooltipClickLabel}\n </Text>\n </Box>\n ) : (\n tooltipClickLabel\n )}\n </ChartTooltipFooter>\n ) : null}\n </ChartTooltip>\n );\n }\n);\n","import type { TooltipFormatterContextObject } from \"highcharts\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type {\n TypeDonutChartProps,\n TypeDonutChartTooltipProps,\n} from \"../DonutChart\";\n\ntype TypeTransformDonutChartTooltipDataProps = Readonly<{\n context: TooltipFormatterContextObject;\n data: TypeDonutChartProps[\"data\"];\n}>;\ntype TypeTransformDonutChartTooltipDataReturn = TypeDonutChartTooltipProps;\n\nexport const transformDonutChartTooltipData = ({\n context,\n data,\n}: TypeTransformDonutChartTooltipDataProps): TypeTransformDonutChartTooltipDataReturn => {\n const colorIndex = context.colorIndex;\n\n return {\n color:\n data[colorIndex]?.styles?.color ??\n theme.colors.DATAVIZ_COLORS_LIST[colorIndex] ??\n \"\",\n ...(data[colorIndex]?.icon ? { icon: data[colorIndex]?.icon } : {}),\n name: context.key as string,\n percent: context.percentage,\n value: context.y as number,\n };\n};\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Duration } from \"@sproutsocial/seeds-react-duration\";\nimport { Numeral } from \"@sproutsocial/seeds-react-numeral\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type { TypeDonutChartProps } from \"..\";\nimport { ChartTable, type TypeChartTableProps } from \"../../ChartTable\";\nimport { ChartLegendLabel } from \"../../ChartLegend/components/ChartLegendLabel\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\nexport type TypeDonutChartLegendTableProps = Readonly<{\n data: TypeDonutChartProps[\"data\"];\n numberLocale: TypeDonutChartProps[\"numberLocale\"];\n textLocale: TypeDonutChartProps[\"textLocale\"];\n totalLabel: React.ReactNode;\n // optional\n currency?: TypeDonutChartProps[\"currency\"];\n numberFormat?: TypeDonutChartProps[\"numberFormat\"];\n}>;\n\nexport const DonutChartLegendTable = memo<TypeDonutChartLegendTableProps>(\n function DonutChartLegendTable({\n data,\n numberLocale = \"en-us\",\n textLocale = \"en-us\",\n totalLabel,\n // optional\n currency = \"USD\",\n numberFormat = \"decimal\",\n }: TypeDonutChartLegendTableProps) {\n const total = data.reduce(\n (accumulator, dataItem) => accumulator + dataItem.value,\n 0\n );\n\n const rows = data.map((dataPoint, index) => {\n const { name, icon, styles, value } = dataPoint;\n const color = styles?.color || theme.colors.DATAVIZ_COLORS_LIST[index];\n\n return {\n cells: [\n {\n content: (\n <ChartLegendLabel color={color}>\n <ChartLegendLabelContentWithIcon icon={icon}>\n {name}\n </ChartLegendLabelContentWithIcon>\n </ChartLegendLabel>\n ),\n },\n {\n content: (\n <Box display=\"inline-flex\" alignItems=\"center\" gap={350}>\n <Text color=\"text.body\">\n <Numeral\n abbreviate={false}\n format=\"percent\"\n locale={numberLocale as string}\n number={(value / total) * 100}\n />\n </Text>\n <Text color=\"text.body\" fontWeight=\"semibold\">\n {numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={value} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={value}\n />\n )}\n </Text>\n </Box>\n ),\n align: \"right\",\n },\n ],\n };\n });\n\n const totalRow = [\n {\n cells: [\n {\n content: (\n <Text fontWeight=\"semibold\" color=\"text.headline\">\n {totalLabel}\n </Text>\n ),\n },\n {\n content: (\n <Text color=\"text.body\" fontWeight=\"bold\">\n {numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={total} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={total}\n />\n )}\n </Text>\n ),\n align: \"right\",\n },\n ],\n isAppendedRow: true,\n },\n ];\n\n return (\n <ChartTable\n rows={[...rows, ...totalRow] as TypeChartTableProps[\"rows\"]}\n />\n );\n }\n);\n","import { memo, type ReactNode } from \"react\";\nimport Highcharts, { type AnnotationsOptions } from \"highcharts\";\nimport { HighchartsReact } from \"highcharts-react-official\";\nimport highchartsAccessibility from \"highcharts/modules/accessibility\";\nimport highchartsAnnotations from \"highcharts/modules/annotations\";\nimport styled from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\n\nimport { LineChartLegend } from \"./components/LineChartLegend\";\nimport { LineChartTooltip } from \"./components/LineChartTooltip\";\n\nimport { ChartTooltipPortal } from \"../ChartTooltip/components/ChartTooltipPortal\";\nimport { transformTimeSeriesTooltipData } from \"../../helpers\";\nimport { useTimeSeriesChartOptions } from \"../../hooks\";\nimport { GlobalChartStyleOverrides, lineChartStyles } from \"../../styles\";\nimport type {\n TypeChartDataPoint,\n TypeChartDataStyles,\n TypeChartNumberFormat,\n TypeChartStyleColor,\n TypeChartStylePattern,\n TypeChartTimeFormat,\n TypeChartTooltipDateFormatter,\n TypeChartTooltipProps,\n TypeChartYAxisLabelFormatter,\n TypeChartXAnnotations,\n} from \"../../types\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\nimport { ChartXAnnotationMarkerPortal } from \"../ChartXAnnotationMarker/components/ChartXAnnotationMarkerPortal\";\n\n// init modules\nhighchartsAccessibility(Highcharts);\nhighchartsAnnotations(Highcharts);\n\n// styled components\nconst StyledBox = styled(Box)`\n ${lineChartStyles}\n`;\n\n// types\nexport type TypeLineChartProps = Readonly<{\n data: ReadonlyArray<\n Readonly<{\n name: string;\n points: ReadonlyArray<TypeChartDataPoint>;\n // optional\n icon?: ReactNode;\n styles?: TypeChartDataStyles &\n Readonly<{ pattern?: TypeChartStylePattern }>;\n }>\n >;\n invalidNumberLabel: ReactNode;\n numberLocale: Intl.LocalesArgument;\n textLocale: Intl.LocalesArgument;\n tooltipDateFormatter: TypeChartTooltipDateFormatter;\n // optional\n currency?: string;\n disableTooltips?: boolean;\n numberFormat?: TypeChartNumberFormat;\n tooltip?: (_props: TypeChartTooltipProps) => ReactNode;\n yAxisLabelFormatter?: TypeChartYAxisLabelFormatter;\n onClick?: (_props: Readonly<{ x: number }>) => void;\n tooltipClickLabel?: ReactNode;\n timeFormat?: TypeChartTimeFormat;\n timezone?: string;\n xAnnotations?: TypeChartXAnnotations;\n xAxisLabelFormatter?: (_params: {\n textLocale: Intl.LocalesArgument;\n tickPositions: number[];\n unitName: string;\n value: string | number;\n timeFormat?: string;\n }) => string;\n}>;\n\n/**\n * @deprecated Use the v2 component instead:\n *\n * ```ts\n * import { LineAreaChart } from \"@sproutsocial/seeds-react-data-viz/line-area\";\n * ```\n *\n * `LineAreaChart` (with `variant=\"line\"` or `\"spline\"`) is built on the shared\n * v2 chart base — see `charts/README.md` for the architecture. The v2 prop shape\n * differs from this legacy component and v2 does not yet cover every legacy\n * feature (locale-aware tooltips, currency/number formatters). Migrate when ready;\n * Claude-assisted migration guidance lands with the CE-9 codemod.\n */\nexport const LineChart = memo<TypeLineChartProps>(function LineChart(\n props: TypeLineChartProps\n) {\n const { data } = props;\n\n return data.length === 0 ? null : <LineChartWithData {...props} />;\n});\n\nconst LineChartWithData = memo<TypeLineChartProps>(function LineChartWithData({\n data,\n invalidNumberLabel,\n numberLocale = \"en-us\",\n textLocale = \"en-us\",\n tooltipDateFormatter,\n // optional\n currency = \"USD\",\n disableTooltips = false,\n numberFormat = \"decimal\",\n tooltip,\n yAxisLabelFormatter,\n onClick,\n tooltipClickLabel,\n timeFormat = \"12\",\n timezone = \"UTC\",\n xAnnotations,\n xAxisLabelFormatter,\n}: TypeLineChartProps) {\n const { options, chart, callback } = useTimeSeriesChartOptions({\n currency,\n data,\n disableTooltips,\n numberFormat,\n numberLocale,\n seriesType: \"spline\",\n textLocale,\n yAxisLabelFormatter,\n onClick,\n timeFormat,\n timezone,\n xAnnotations,\n xAxisLabelFormatter,\n });\n\n const { colors, patterns } = data.reduce(\n (acc, item, index) => {\n acc.colors.push(\n item.styles?.color ?? theme.colors.DATAVIZ_COLORS_LIST[index] ?? \"\"\n );\n acc.patterns.push(item.styles?.pattern ?? \"solid\");\n return acc;\n },\n {\n colors: [] as TypeChartStyleColor[],\n patterns: [] as TypeChartStylePattern[],\n }\n );\n\n return (\n <>\n <GlobalChartStyleOverrides />\n <StyledBox\n $colors={colors}\n $patterns={patterns}\n $hasOnClick={Boolean(onClick)}\n bg=\"container.background.base\"\n >\n <HighchartsReact\n highcharts={Highcharts}\n options={options}\n callback={callback}\n />\n {chart && chart.annotations?.length ? (\n <ChartXAnnotationMarkerPortal\n xAnnotations={xAnnotations}\n annotationContext={chart.annotations?.[0] as AnnotationsOptions}\n chartContainer={chart.container}\n />\n ) : null}\n {chart && !disableTooltips ? (\n <ChartTooltipPortal\n chart={chart}\n renderContent={(context) => {\n const tooltipData = transformTimeSeriesTooltipData({\n context,\n data,\n });\n const x = context.x as number;\n\n const xAnnotationDetails = xAnnotations?.[x]?.details;\n\n return tooltip ? (\n tooltip({ data: tooltipData, x })\n ) : (\n <LineChartTooltip\n currency={currency}\n data={tooltipData}\n invalidNumberLabel={invalidNumberLabel}\n numberFormat={numberFormat}\n numberLocale={numberLocale}\n textLocale={textLocale}\n tooltipDateFormatter={tooltipDateFormatter}\n onClick={onClick}\n tooltipClickLabel={tooltipClickLabel}\n x={x}\n xAnnotationDetails={xAnnotationDetails}\n />\n );\n }}\n />\n ) : null}\n <Box mt={350}>\n <LineChartLegend data={data} />\n </Box>\n </StyledBox>\n </>\n );\n});\n","import { memo } from \"react\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type { TypeLineChartProps } from \"../LineChart\";\nimport { ChartLegend, type TypeChartLegendProps } from \"../../ChartLegend\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\n// exported for testing\nexport const getLineChartLegendLabels = ({\n data,\n}: Readonly<{\n data: TypeLineChartProps[\"data\"];\n}>): TypeChartLegendProps[\"legendLabels\"] => {\n return data.map((series, index) => ({\n content: (\n <ChartLegendLabelContentWithIcon icon={series.icon}>\n {series.name}\n </ChartLegendLabelContentWithIcon>\n ),\n color: series.styles?.color || theme.colors.DATAVIZ_COLORS_LIST[index],\n }));\n};\n\ntype TypeLineChartLegendProps = Readonly<{\n data: TypeLineChartProps[\"data\"];\n}>;\n\nexport const LineChartLegend = memo<TypeLineChartLegendProps>(\n function LineChartLegend({ data }: TypeLineChartLegendProps) {\n return <ChartLegend legendLabels={getLineChartLegendLabels({ data })} />;\n }\n);\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Duration } from \"@sproutsocial/seeds-react-duration\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Numeral } from \"@sproutsocial/seeds-react-numeral\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\n\nimport type { TypeLineChartProps } from \"../LineChart\";\n\nimport {\n ChartTooltip,\n ChartTooltipFooter,\n ChartTooltipTable,\n ChartTooltipTitle,\n type TypeChartTooltipTableProps,\n} from \"../../ChartTooltip\";\nimport type {\n TypeChartTooltipProps,\n TypeChartXAnnotationsDetails,\n} from \"../../../types\";\nimport { ChartLegendLabel } from \"../../ChartLegend/components/ChartLegendLabel\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\nexport type TypeLineChartTooltipProps = Readonly<{\n data: TypeChartTooltipProps[\"data\"];\n invalidNumberLabel: TypeLineChartProps[\"invalidNumberLabel\"];\n numberLocale: TypeLineChartProps[\"numberLocale\"];\n textLocale: TypeLineChartProps[\"textLocale\"];\n tooltipDateFormatter: TypeLineChartProps[\"tooltipDateFormatter\"];\n x: TypeChartTooltipProps[\"x\"];\n // optional\n currency?: TypeLineChartProps[\"currency\"];\n numberFormat?: TypeLineChartProps[\"numberFormat\"];\n onClick?: TypeLineChartProps[\"onClick\"];\n tooltipClickLabel?: TypeLineChartProps[\"tooltipClickLabel\"];\n xAnnotationDetails?: TypeChartXAnnotationsDetails;\n}>;\n\nexport const LineChartTooltip = memo<TypeLineChartTooltipProps>(\n function LineChartTooltip({\n data,\n invalidNumberLabel,\n numberLocale,\n textLocale,\n tooltipDateFormatter,\n x,\n // optional\n currency = \"USD\",\n numberFormat = \"decimal\",\n onClick,\n tooltipClickLabel,\n xAnnotationDetails,\n }: TypeLineChartTooltipProps) {\n const rows = data.map(({ color, icon, name, value }) => {\n return {\n cells: [\n {\n content: (\n <ChartLegendLabel color={color}>\n <ChartLegendLabelContentWithIcon icon={icon}>\n <Text aria-label={`${name}: `}>{name}</Text>\n </ChartLegendLabelContentWithIcon>\n </ChartLegendLabel>\n ),\n },\n {\n content:\n value === null && invalidNumberLabel ? (\n <Text>{invalidNumberLabel}</Text>\n ) : numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={value} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={value}\n />\n ),\n align: \"right\",\n },\n ],\n };\n });\n\n return (\n <ChartTooltip>\n {xAnnotationDetails ? xAnnotationDetails() : undefined}\n <ChartTooltipTitle>{tooltipDateFormatter({ x })}</ChartTooltipTitle>\n <ChartTooltipTable rows={rows as TypeChartTooltipTableProps[\"rows\"]} />\n {onClick && tooltipClickLabel ? (\n <ChartTooltipFooter>\n {typeof tooltipClickLabel === \"string\" ? (\n <Box display=\"flex\" alignItems=\"center\" gap={300}>\n <Icon name=\"hand-pointer-clicking-outline\" color=\"icon.base\" />\n <Text color=\"text.subtext\" fontSize={200}>\n {tooltipClickLabel}\n </Text>\n </Box>\n ) : (\n tooltipClickLabel\n )}\n </ChartTooltipFooter>\n ) : null}\n </ChartTooltip>\n );\n }\n);\n","import { memo } from \"react\";\nimport Highcharts, { type AnnotationsOptions } from \"highcharts\";\nimport { HighchartsReact } from \"highcharts-react-official\";\nimport highchartsAccessibility from \"highcharts/modules/accessibility\";\nimport highchartsAnnotations from \"highcharts/modules/annotations\";\nimport styled from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\n\nimport { VerticalBarChartLegend } from \"./components/VerticalBarChartLegend\";\nimport { VerticalBarChartTooltip } from \"./components/VerticalBarChartTooltip\";\n\nimport { ChartTooltipPortal } from \"../ChartTooltip/components/ChartTooltipPortal\";\nimport {\n transformTimeSeriesTooltipData,\n isHourlyTimeData,\n isCategoricalHourData,\n} from \"../../helpers\";\nimport { useTimeSeriesChartOptions } from \"../../hooks\";\nimport { GlobalChartStyleOverrides } from \"../../styles\";\nimport type {\n TypeChartStyleColor,\n TypeChartStylePattern,\n TypeVerticalBarChartProps,\n} from \"../../types\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\nimport { ChartXAnnotationMarkerPortal } from \"../ChartXAnnotationMarker/components/ChartXAnnotationMarkerPortal\";\nimport { verticalBarChartStyles } from \"./styles\";\nimport { VERTICAL_BAR_CHART_DEFAULT_SERIES_LIMIT } from \"../../constants\";\n\n// init modules\nhighchartsAccessibility(Highcharts);\nhighchartsAnnotations(Highcharts);\n\n// styled components\nconst StyledBox = styled(Box)`\n ${verticalBarChartStyles}\n`;\n\n/**\n * @deprecated Use the v2 component instead:\n *\n * ```ts\n * import { VerticalBarChart } from \"@sproutsocial/seeds-react-data-viz/bar\";\n * ```\n *\n * The v2 component is built on the shared chart base. See `charts/README.md`\n * for the architecture. The v2 prop shape differs from this legacy component\n * and v2 does not yet cover every legacy feature (locale-aware tooltips,\n * formatters, interactions, annotations, legend). Use the Claude-assisted\n * migration skill at\n * `seeds-tooling/seeds-codemod-cli/src/usage-patterns/VERTICALBARCHARTV1_PATTERNS.md`\n * — it documents the prop mapping and tells you when to wait rather than\n * force-migrate.\n */\nexport const VerticalBarChart = memo<TypeVerticalBarChartProps>(\n function VerticalBarChart(props: TypeVerticalBarChartProps) {\n const { data, showSeriesLimitWarning = true } = props;\n const seriesLimit =\n props.seriesLimit ?? VERTICAL_BAR_CHART_DEFAULT_SERIES_LIMIT;\n const isSeriesLimitOverridden = props.seriesLimit !== undefined;\n\n if (data.length === 0) {\n return null;\n }\n\n let chartData = data;\n if (data.length > seriesLimit) {\n if (!isSeriesLimitOverridden && showSeriesLimitWarning) {\n console.warn(\n `VerticalBarChart: Maximum number of series (${seriesLimit}) exceeded. Only the first ${seriesLimit} series will be displayed.`\n );\n }\n chartData = data.slice(0, seriesLimit);\n }\n\n return <VerticalBarChartWithData {...props} data={chartData} />;\n }\n);\n\nconst VerticalBarChartWithData = memo<TypeVerticalBarChartProps>(\n function VerticalBarChartWithData({\n data,\n invalidNumberLabel,\n numberLocale = \"en-us\",\n textLocale = \"en-us\",\n tooltipDateFormatter,\n // optional\n currency = \"USD\",\n numberFormat = \"decimal\",\n tooltip,\n yAxisLabelFormatter,\n onClick,\n tooltipClickLabel,\n timeFormat = \"12\",\n xAnnotations,\n xAxisLabelFormatter,\n }: TypeVerticalBarChartProps) {\n // Automatically use time-of-day formatter if data is hourly (timestamp) or categorical hour data\n const shouldUseTimeFormatter =\n isHourlyTimeData(data) || isCategoricalHourData(data);\n\n const autoTimeXAxisLabelFormatter = ({\n value,\n timeFormat,\n }: {\n textLocale: Intl.LocalesArgument;\n tickPositions: number[];\n unitName: string;\n value: string | number;\n timeFormat?: string;\n }) => {\n // Handle categorical hour data (strings)\n if (typeof value === \"string\") {\n // Handle 12-hour format (e.g., \"12 AM\", \"1 PM\")\n const hour12Match = value.match(/^(\\d{1,2}) (AM|PM)$/);\n if (hour12Match) {\n const [, hourStr = \"0\", period = \"\"] = hour12Match;\n const hour = parseInt(hourStr, 10);\n if (hour === 12) return `<span>12</span><span>${period}</span>`;\n return `<span>${hour}</span>`;\n }\n\n // Handle 24-hour format (e.g., \"00:00\", \"13:00\", \"23:00\")\n const hour24Match = value.match(/^([01]?\\d|2[0-3]):([0-5]\\d)$/);\n if (hour24Match) {\n const [, hourStr = \"0\"] = hour24Match;\n const hour = parseInt(hourStr, 10);\n\n if (timeFormat === \"24\") {\n // For 24-hour format, just show the hour padded to 2 digits\n return `<span>${hour.toString().padStart(2, \"0\")}</span>`;\n } else {\n // For 12-hour display of 24-hour data, convert to 12-hour\n const displayHour = hour % 12 === 0 ? 12 : hour % 12;\n const period = hour < 12 ? \"AM\" : \"PM\";\n if (hour === 0 || hour === 12)\n return `<span>12</span><span>${period}</span>`;\n return `<span>${displayHour}</span>`;\n }\n }\n\n // Fallback: return original value if not recognized hour format\n return value;\n }\n\n // Handle numerical timestamp data\n const numValue = typeof value === \"string\" ? Number(value) : value;\n if (isNaN(numValue)) return \"\";\n const date = new Date(numValue);\n const hour = date.getUTCHours();\n const displayHour = hour % 12 === 0 ? 12 : hour % 12;\n if (hour === 0) return \"<span>12</span><span>AM</span>\";\n if (hour === 12) return \"<span>12</span><span>PM</span>\";\n return `<span>${displayHour}</span>`;\n };\n\n const resolvedXAxisLabelFormatter =\n shouldUseTimeFormatter && !xAxisLabelFormatter\n ? (params: {\n textLocale: Intl.LocalesArgument;\n tickPositions: number[];\n unitName: string;\n value: string | number;\n timeFormat?: string;\n }) => autoTimeXAxisLabelFormatter({ ...params, timeFormat })\n : xAxisLabelFormatter;\n\n const { options, chart, callback } = useTimeSeriesChartOptions({\n currency,\n data,\n numberFormat,\n numberLocale,\n // Although we call this chart vertical bar chart, highcharts uses the term \"column\"\n seriesType: \"column\",\n textLocale,\n yAxisLabelFormatter,\n onClick,\n timeFormat,\n xAnnotations,\n xAxisLabelFormatter: resolvedXAxisLabelFormatter,\n });\n\n const { colors } = data.reduce(\n (\n acc: {\n colors: TypeChartStyleColor[];\n patterns: TypeChartStylePattern[];\n },\n item,\n index\n ) => {\n acc.colors.push(\n item.styles?.color ?? theme.colors.DATAVIZ_COLORS_LIST[index] ?? \"\"\n );\n acc.patterns.push(item.styles?.pattern ?? \"solid\");\n return acc;\n },\n {\n colors: [] as TypeChartStyleColor[],\n patterns: [] as TypeChartStylePattern[],\n }\n );\n\n return (\n <>\n <GlobalChartStyleOverrides />\n <StyledBox\n $colors={colors}\n $hasOnClick={Boolean(onClick)}\n bg=\"container.background.base\"\n >\n <HighchartsReact\n highcharts={Highcharts}\n options={options}\n callback={callback}\n />\n {chart && chart.annotations?.length ? (\n <ChartXAnnotationMarkerPortal\n xAnnotations={xAnnotations}\n annotationContext={chart.annotations?.[0] as AnnotationsOptions}\n chartContainer={chart.container}\n />\n ) : null}\n {chart ? (\n <ChartTooltipPortal\n chart={chart}\n renderContent={(context) => {\n const tooltipData = transformTimeSeriesTooltipData({\n context,\n data,\n });\n const x = context.x as number | string;\n\n const xAnnotationDetails =\n typeof x === \"number\"\n ? xAnnotations?.[x]?.details\n : undefined;\n\n return tooltip ? (\n tooltip({ data: tooltipData, x })\n ) : (\n <VerticalBarChartTooltip\n currency={currency}\n data={tooltipData}\n invalidNumberLabel={invalidNumberLabel}\n numberFormat={numberFormat}\n numberLocale={numberLocale}\n textLocale={textLocale}\n tooltipDateFormatter={tooltipDateFormatter}\n onClick={onClick}\n tooltipClickLabel={tooltipClickLabel}\n x={x}\n xAnnotationDetails={xAnnotationDetails}\n />\n );\n }}\n />\n ) : null}\n <Box mt={350}>\n <VerticalBarChartLegend data={data} />\n </Box>\n </StyledBox>\n </>\n );\n }\n);\n","import { memo } from \"react\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type { TypeVerticalBarChartProps } from \"../../../types\";\nimport { ChartLegend, type TypeChartLegendProps } from \"../../ChartLegend\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\n// exported for testing\nexport const getVerticalBarChartLegendLabels = ({\n data,\n}: Readonly<{\n data: TypeVerticalBarChartProps[\"data\"];\n}>): TypeChartLegendProps[\"legendLabels\"] => {\n return data.map((series, index) => ({\n content: (\n <ChartLegendLabelContentWithIcon icon={series.icon}>\n {series.name}\n </ChartLegendLabelContentWithIcon>\n ),\n color: series.styles?.color || theme.colors.DATAVIZ_COLORS_LIST[index],\n }));\n};\n\ntype VerticalBarChartLegendProps = Readonly<{\n data: TypeVerticalBarChartProps[\"data\"];\n}>;\n\nexport const VerticalBarChartLegend = memo<VerticalBarChartLegendProps>(\n function VerticalbarChartLegend({ data }: VerticalBarChartLegendProps) {\n return (\n <ChartLegend legendLabels={getVerticalBarChartLegendLabels({ data })} />\n );\n }\n);\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Duration } from \"@sproutsocial/seeds-react-duration\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Numeral } from \"@sproutsocial/seeds-react-numeral\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\n\nimport type { TypeVerticalBarChartProps } from \"../../../types\";\n\nimport {\n ChartTooltip,\n ChartTooltipFooter,\n ChartTooltipTable,\n ChartTooltipTitle,\n type TypeChartTooltipTableProps,\n} from \"../../ChartTooltip\";\nimport type {\n TypeChartTooltipProps,\n TypeChartXAnnotationsDetails,\n} from \"../../../types\";\nimport { ChartLegendLabel } from \"../../ChartLegend/components/ChartLegendLabel\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\nexport type TypeVerticalBarChartTooltipProps = Readonly<{\n data: TypeChartTooltipProps[\"data\"];\n invalidNumberLabel: TypeVerticalBarChartProps[\"invalidNumberLabel\"];\n numberLocale: TypeVerticalBarChartProps[\"numberLocale\"];\n textLocale: TypeVerticalBarChartProps[\"textLocale\"];\n tooltipDateFormatter: TypeVerticalBarChartProps[\"tooltipDateFormatter\"];\n x: TypeChartTooltipProps[\"x\"];\n // optional\n currency?: TypeVerticalBarChartProps[\"currency\"];\n numberFormat?: TypeVerticalBarChartProps[\"numberFormat\"];\n onClick?: TypeVerticalBarChartProps[\"onClick\"];\n tooltipClickLabel?: TypeVerticalBarChartProps[\"tooltipClickLabel\"];\n xAnnotationDetails?: TypeChartXAnnotationsDetails;\n}>;\n\nexport const VerticalBarChartTooltip = memo<TypeVerticalBarChartTooltipProps>(\n function VerticalBarChartTooltip({\n data,\n invalidNumberLabel,\n numberLocale,\n textLocale,\n tooltipDateFormatter,\n x,\n // optional\n currency = \"USD\",\n numberFormat = \"decimal\",\n onClick,\n tooltipClickLabel,\n xAnnotationDetails,\n }: TypeVerticalBarChartTooltipProps) {\n const rows = data.map(({ color, icon, name, value }) => {\n return {\n cells: [\n {\n content: (\n <ChartLegendLabel color={color}>\n <ChartLegendLabelContentWithIcon icon={icon}>\n <Text aria-label={`${name}: `}>{name}</Text>\n </ChartLegendLabelContentWithIcon>\n </ChartLegendLabel>\n ),\n },\n {\n content:\n value === null && invalidNumberLabel ? (\n <Text>{invalidNumberLabel}</Text>\n ) : numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={value} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={value}\n />\n ),\n align: \"right\",\n },\n ],\n };\n });\n\n return (\n <ChartTooltip>\n {xAnnotationDetails ? xAnnotationDetails() : undefined}\n <ChartTooltipTitle>{tooltipDateFormatter({ x })}</ChartTooltipTitle>\n <ChartTooltipTable rows={rows as TypeChartTooltipTableProps[\"rows\"]} />\n {onClick && tooltipClickLabel ? (\n <ChartTooltipFooter>\n {typeof tooltipClickLabel === \"string\" ? (\n <Box display=\"flex\" alignItems=\"center\" gap={300}>\n <Icon name=\"hand-pointer-clicking-outline\" color=\"icon.base\" />\n <Text color=\"text.subtext\" fontSize={200}>\n {tooltipClickLabel}\n </Text>\n </Box>\n ) : (\n tooltipClickLabel\n )}\n </ChartTooltipFooter>\n ) : null}\n </ChartTooltip>\n );\n }\n);\n","import { timeSeriesChartStyles } from \"../../styles/chartStyles\";\nimport { css } from \"styled-components\";\nimport type {\n TypeChartStyleColor,\n TypeChartStyleHasOnClick,\n} from \"../../types\";\n\n// options that should apply to line charts\nexport const verticalBarChartStyles = css<\n Readonly<{\n $colors: ReadonlyArray<TypeChartStyleColor>;\n $hasOnClick: TypeChartStyleHasOnClick;\n }>\n>`\n ${timeSeriesChartStyles}\n\n /*\n When the chart container is hovered, reduce the opacity of all columns.\n Then, for the column that is being hovered, restore its opacity.\n This gives the effect of fading out the non-hovered columns.\n */\n .highcharts-container:hover .highcharts-point {\n fill-opacity: 0.3;\n }\n\n .highcharts-point.column-hover {\n fill-opacity: 1 !important;\n }\n`;\n"],"mappings":"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","names":["memo","Box","AreaChartLegend","memo","jsx","memo","AreaChartTooltip","memo","jsx","memo","ChartXAnnotationMarkerPortal","useState","yAxisLabelFormatter","xAxisLabelFormatter","useState","baseChartOptions","theme","Fragment","jsx","jsxs","Box","memo","AreaChart","AreaChartWithData","yAxisLabelFormatter","memo","Box","Icon","Text","jsx","jsxs","memo","ChartXAnnotationDetails","Box","Icon","Text","memo","Box","Icon","jsx","jsxs","ChartXAnnotationMarker","memo","useState","useEffect","useCallback","Highcharts","HighchartsReact","highchartsAccessibility","styled","Box","memo","theme","jsx","theme","memo","DonutChartLegend","memo","Box","Duration","Icon","Numeral","Text","jsx","jsxs","memo","DonutChartTooltip","Text","Box","Numeral","Duration","Icon","theme","theme","Fragment","jsx","jsxs","highchartsAccessibility","Highcharts","StyledBox","styled","Box","memo","DonutChart","DonutChartWithData","useState","useCallback","useEffect","HighchartsReact","memo","Box","Duration","Numeral","Text","theme","jsx","jsxs","memo","DonutChartLegendTable","theme","Box","Text","Numeral","Duration","memo","Highcharts","HighchartsReact","highchartsAccessibility","highchartsAnnotations","styled","Box","memo","theme","jsx","theme","memo","LineChartLegend","memo","Box","Duration","Icon","Numeral","Text","jsx","jsxs","memo","LineChartTooltip","Text","Duration","Numeral","Box","Icon","theme","Fragment","jsx","jsxs","highchartsAccessibility","Highcharts","highchartsAnnotations","StyledBox","styled","Box","memo","LineChart","LineChartWithData","yAxisLabelFormatter","xAxisLabelFormatter","theme","HighchartsReact","memo","Highcharts","HighchartsReact","highchartsAccessibility","highchartsAnnotations","styled","Box","memo","theme","jsx","theme","memo","memo","Box","Duration","Icon","Numeral","Text","jsx","jsxs","memo","VerticalBarChartTooltip","Text","Duration","Numeral","Box","Icon","theme","Fragment","jsx","jsxs","highchartsAccessibility","Highcharts","highchartsAnnotations","StyledBox","styled","Box","memo","VerticalBarChart","VerticalBarChartWithData","yAxisLabelFormatter","xAxisLabelFormatter","timeFormat","hour","displayHour","theme","HighchartsReact"]}
1
+ {"version":3,"sources":["../../src/components/AreaChart/AreaChart.tsx","../../src/components/AreaChart/components/AreaChartLegend.tsx","../../src/components/ColorBox/DatavizColorBox.tsx","../../src/components/ColorBox/NetworkColorBox.tsx","../../src/components/AreaChart/components/AreaChartTooltip.tsx","../../src/components/ChartXAnnotationMarker/components/ChartXAnnotationMarkerPortal.tsx","../../src/helpers/transformDataToSeries.ts","../../src/helpers/yAxisLabelFormatter.ts","../../src/helpers/xAxisLabelFormatter.ts","../../src/helpers/isHourlyTimeData.ts","../../src/helpers/isCategoricalHourData.ts","../../src/helpers/getStorybookRandomColor.ts","../../src/helpers/getStorybookCategoricalData.ts","../../src/helpers/getStorybookSparseTimelineData.ts","../../src/hooks/useTimeSeriesChartOptions.ts","../../src/components/ChartXAnnotationDetails/ChartXAnnotationDetails.tsx","../../src/components/ChartXAnnotationMarker/ChartXAnnotationMarker.tsx","../../src/components/DonutChart/DonutChart.tsx","../../src/components/DonutChart/components/DonutChartLegend.tsx","../../src/components/DonutChart/components/DonutChartTooltip.tsx","../../src/components/DonutChart/helpers/transformDonutChartTooltipData.ts","../../src/components/DonutChart/components/DonutChartLegendTable.tsx","../../src/components/LineChart/LineChart.tsx","../../src/components/LineChart/components/LineChartLegend.tsx","../../src/components/LineChart/components/LineChartTooltip.tsx","../../src/components/VerticalBarChart/VerticalBarChart.tsx","../../src/components/VerticalBarChart/components/VerticalBarChartLegend.tsx","../../src/components/VerticalBarChart/components/VerticalBarChartTooltip.tsx","../../src/components/VerticalBarChart/styles.ts"],"sourcesContent":["import { memo, type ReactNode } from \"react\";\nimport Highcharts, { type AnnotationsOptions } from \"highcharts\";\nimport { HighchartsReact } from \"highcharts-react-official\";\nimport highchartsAccessibility from \"highcharts/modules/accessibility\";\nimport highchartsAnnotations from \"highcharts/modules/annotations\";\nimport styled from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\n\nimport { AreaChartLegend } from \"./components/AreaChartLegend\";\nimport { AreaChartTooltip } from \"./components/AreaChartTooltip\";\n\nimport { ChartTooltipPortal } from \"../ChartTooltip/components/ChartTooltipPortal\";\nimport { ChartXAnnotationMarkerPortal } from \"../ChartXAnnotationMarker/components/ChartXAnnotationMarkerPortal\";\nimport { transformTimeSeriesTooltipData } from \"../../helpers\";\nimport { useTimeSeriesChartOptions } from \"../../hooks\";\nimport { areaChartStyles, GlobalChartStyleOverrides } from \"../../styles\";\nimport type {\n TypeChartDataPoint,\n TypeChartDataStyles,\n TypeChartNumberFormat,\n TypeChartTimeFormat,\n TypeChartTooltipDateFormatter,\n TypeChartTooltipProps,\n TypeChartYAxisLabelFormatter,\n TypeChartXAnnotations,\n} from \"../../types\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\n// init modules\nhighchartsAccessibility(Highcharts);\nhighchartsAnnotations(Highcharts);\n\n// styled components\nconst StyledBox = styled(Box)`\n ${areaChartStyles}\n`;\n\n// types\nexport type TypeAreaChartProps = Readonly<{\n data: ReadonlyArray<\n Readonly<{\n name: string;\n points: ReadonlyArray<TypeChartDataPoint>;\n // optional\n icon?: ReactNode;\n styles?: TypeChartDataStyles;\n }>\n >;\n invalidNumberLabel: ReactNode;\n numberLocale: Intl.LocalesArgument;\n textLocale: Intl.LocalesArgument;\n tooltipDateFormatter: TypeChartTooltipDateFormatter;\n tooltipTotalLabel: ReactNode;\n // optional\n currency?: string;\n disableTooltips?: boolean;\n numberFormat?: TypeChartNumberFormat;\n tooltip?: (\n _props: TypeChartTooltipProps & Readonly<{ total: number | null }>\n ) => ReactNode;\n yAxisLabelFormatter?: TypeChartYAxisLabelFormatter;\n onClick?: (_props: Readonly<{ x: number }>) => void;\n tooltipClickLabel?: ReactNode;\n timeFormat?: TypeChartTimeFormat;\n timezone?: string;\n xAnnotations?: TypeChartXAnnotations;\n}>;\n\n/**\n * @deprecated Use the v2 component instead:\n *\n * ```ts\n * import { LineAreaChart } from \"@sproutsocial/seeds-react-data-viz/line-area\";\n * ```\n *\n * `LineAreaChart` (with `variant=\"area\"` or `\"areaspline\"`) is built on the shared\n * v2 chart base — see `charts/README.md` for the architecture. The v2 prop shape\n * differs from this legacy component and v2 does not yet cover every legacy\n * feature (locale-aware tooltips, currency/number formatters, area totals).\n * Migrate when ready; Claude-assisted migration guidance lands with the CE-10 codemod.\n */\nexport const AreaChart = memo<TypeAreaChartProps>(function AreaChart(\n props: TypeAreaChartProps\n) {\n const { data } = props;\n\n return data.length === 0 ? null : <AreaChartWithData {...props} />;\n});\n\nconst AreaChartWithData = memo<TypeAreaChartProps>(function AreaChartWithData({\n data,\n invalidNumberLabel,\n numberLocale = \"en-us\",\n textLocale = \"en-us\",\n tooltipDateFormatter,\n tooltipTotalLabel,\n // optional\n currency = \"USD\",\n disableTooltips = false,\n numberFormat = \"decimal\",\n tooltip,\n yAxisLabelFormatter,\n onClick,\n tooltipClickLabel,\n timeFormat = \"12\",\n timezone = \"UTC\",\n xAnnotations,\n}: TypeAreaChartProps) {\n const { options, chart, callback } = useTimeSeriesChartOptions({\n currency,\n data,\n disableTooltips,\n numberFormat,\n numberLocale,\n seriesType: \"areaspline\",\n textLocale,\n yAxisLabelFormatter,\n onClick,\n timeFormat,\n timezone,\n xAnnotations,\n });\n\n const colors = data.map(\n (series, index) =>\n series.styles?.color ?? theme.colors.DATAVIZ_COLORS_LIST[index]\n );\n\n return (\n <>\n <GlobalChartStyleOverrides />\n <StyledBox\n // @ts-expect-error - styled-components transient prop ($colors) is not in StyledBox's inferred prop types\n $colors={colors}\n $hasOnClick={Boolean(onClick)}\n bg=\"container.background.base\"\n >\n <HighchartsReact\n highcharts={Highcharts}\n options={options}\n callback={callback}\n />\n {chart && chart.annotations?.length ? (\n <ChartXAnnotationMarkerPortal\n xAnnotations={xAnnotations}\n annotationContext={chart.annotations?.[0] as AnnotationsOptions}\n chartContainer={chart.container}\n />\n ) : null}\n {chart && !disableTooltips ? (\n <ChartTooltipPortal\n chart={chart}\n renderContent={(context) => {\n const tooltipData = transformTimeSeriesTooltipData({\n context,\n data,\n });\n const x = context.x as number;\n const total = context.total as number;\n\n const xAnnotationDetails = xAnnotations?.[x]?.details;\n\n return tooltip ? (\n tooltip({ data: tooltipData, total, x })\n ) : (\n <AreaChartTooltip\n currency={currency}\n data={tooltipData}\n invalidNumberLabel={invalidNumberLabel}\n numberFormat={numberFormat}\n numberLocale={numberLocale}\n textLocale={textLocale}\n tooltipDateFormatter={tooltipDateFormatter}\n tooltipTotalLabel={tooltipTotalLabel}\n total={total}\n x={x}\n onClick={onClick}\n tooltipClickLabel={tooltipClickLabel}\n xAnnotationDetails={xAnnotationDetails}\n />\n );\n }}\n />\n ) : null}\n <Box mt={350}>\n <AreaChartLegend data={data} />\n </Box>\n </StyledBox>\n </>\n );\n});\n","import { memo } from \"react\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type { TypeAreaChartProps } from \"../AreaChart\";\nimport { ChartLegend, type TypeChartLegendProps } from \"../../ChartLegend\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\n// exported for testing\nexport const getAreaChartLegendLabels = ({\n data,\n}: Readonly<{\n data: TypeAreaChartProps[\"data\"];\n}>): TypeChartLegendProps[\"legendLabels\"] => {\n return data.map((series, index) => ({\n content: (\n <ChartLegendLabelContentWithIcon icon={series.icon}>\n {series.name}\n </ChartLegendLabelContentWithIcon>\n ),\n color: series.styles?.color || theme.colors.DATAVIZ_COLORS_LIST[index],\n }));\n};\n\ntype TypeAreaChartLegendProps = Readonly<{\n data: TypeAreaChartProps[\"data\"];\n}>;\n\nexport const AreaChartLegend = memo<TypeAreaChartLegendProps>(\n function AreaChartLegend({ data }: TypeAreaChartLegendProps) {\n return <ChartLegend legendLabels={getAreaChartLegendLabels({ data })} />;\n }\n);\n","import type * as React from \"react\";\nimport styled from \"styled-components\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\nimport { ColorBox, type TypeColorBoxProps } from \"./ColorBox\";\n\nexport type TypeDatavizColorBoxProps = Readonly<\n Partial<TypeColorBoxProps> & {\n colorIndex: number;\n }\n>;\nexport type TypeDatavizColorBox = (\n props: TypeDatavizColorBoxProps\n) => React.JSXElementConstructor<TypeDatavizColorBoxProps>;\n\n/**\n * DatavizColorBox extends ColorBox to set the background color from a rotation of <a href=\"https://seeds.sproutsocial.com/visual/dataviz#color-combinations-for-general-sprout-social-data-visualizations\">dataviz colors</a>.\n */\nexport const DatavizColorBox = styled(ColorBox).attrs(\n ({ colorIndex }: TypeDatavizColorBoxProps) => ({\n style: {\n background: getDatavizColor(colorIndex),\n opacity: getDatavizOpacity(colorIndex),\n },\n })\n)<TypeDatavizColorBoxProps>``;\n\nexport const getDatavizColor = (colorIndex: number): string =>\n theme.colors.DATAVIZ_COLORS_LIST[\n colorIndex % theme.colors.DATAVIZ_COLORS_LIST.length\n ] || \"\";\n\nexport const getDatavizOpacity = (colorIndex: number): number => {\n const opacitySteps = [1, 0.6, 0.4, 0.2];\n const opacityStep =\n Math.floor(colorIndex / theme.colors.DATAVIZ_COLORS_LIST.length) %\n opacitySteps.length;\n // @ts-expect-error - opacitySteps index access may be undefined under noUncheckedIndexedAccess\n return opacitySteps[opacityStep];\n};\n\n// information on 8 digit hex codes can be found here: https://css-tricks.com/8-digit-hex-codes/\nexport const getDatavizColorWithAlpha = (colorIndex: number): string => {\n const color = getDatavizColor(colorIndex);\n const opacity = getDatavizOpacity(colorIndex);\n\n // make sure the opacity is always between 0 and 1\n if (opacity < 0 || opacity > 1) {\n return color;\n }\n\n // sourced from https://stackoverflow.com/a/66143374\n return `${color}${Math.floor(opacity * 255)\n .toString(16)\n .padStart(2, \"0\")}`;\n};\n","import NETWORK_COLORS from \"@sproutsocial/seeds-networkcolor\";\n\nimport { ColorBox, type TypeColorBoxProps } from \"./ColorBox\";\n\n// $Keys<typeof NETWORK_COLORS>\ntype TypeNetworkColor =\n | \"NETWORK_COLOR_TWITTER\"\n | \"NETWORK_COLOR_TWITTER_LIKE\"\n | \"NETWORK_COLOR_FACEBOOK\"\n | \"NETWORK_COLOR_FACEBOOK_AUDIENCE_NETWORK\"\n | \"NETWORK_COLOR_LINKEDIN\"\n | \"NETWORK_COLOR_INSTAGRAM\"\n | \"NETWORK_COLOR_FEEDLY\"\n | \"NETWORK_COLOR_ANALYTICS\"\n | \"NETWORK_COLOR_YOUTUBE\"\n | \"NETWORK_COLOR_MESSENGER\"\n | \"NETWORK_COLOR_SNAPCHAT\"\n | \"NETWORK_COLOR_PINTEREST\"\n | \"NETWORK_COLOR_REDDIT\"\n | \"NETWORK_COLOR_TUMBLR\"\n | \"NETWORK_COLOR_GOOGLE_MY_BUSINESS\"\n | \"NETWORK_COLOR_TIKTOK\"\n | \"NETWORK_COLOR_TRIPADVISOR\"\n | \"NETWORK_COLOR_GLASSDOOR\"\n | \"NETWORK_COLOR_SALESFORCE\"\n | \"NETWORK_COLOR_ZENDESK\"\n | \"NETWORK_COLOR_HUBSPOT\"\n | \"NETWORK_COLOR_MICROSOFT_DYNAMICS\";\n\ntype TypeNetworkColorBoxProps = Readonly<\n TypeColorBoxProps & {\n networkColor: TypeNetworkColor;\n }\n>;\n\n/**\n * NetworkColorBox extends ColorBox to set the background color to a <a href=\"https://seeds.sproutsocial.com/visual/color#full-color-palette\">network color</a>.\n */\nexport const NetworkColorBox = ({\n networkColor,\n ...props\n}: TypeNetworkColorBoxProps) => {\n return <ColorBox {...props} bg={NETWORK_COLORS[networkColor]} />;\n};\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Duration } from \"@sproutsocial/seeds-react-duration\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Numeral } from \"@sproutsocial/seeds-react-numeral\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\nimport { type TypeChartXAnnotationsDetails } from \"../../../types\";\n\nimport type { TypeAreaChartProps } from \"../AreaChart\";\n\nimport {\n ChartTooltip,\n ChartTooltipFooter,\n ChartTooltipTable,\n ChartTooltipTitle,\n type TypeChartTooltipTableProps,\n} from \"../../ChartTooltip\";\nimport type { TypeChartTooltipProps } from \"../../../types\";\nimport { ChartLegendLabel } from \"../../ChartLegend/components/ChartLegendLabel\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\nexport type TypeAreaChartTooltipProps = Readonly<{\n data: TypeChartTooltipProps[\"data\"];\n invalidNumberLabel: TypeAreaChartProps[\"invalidNumberLabel\"];\n numberLocale: TypeAreaChartProps[\"numberLocale\"];\n textLocale: TypeAreaChartProps[\"textLocale\"];\n tooltipDateFormatter: TypeAreaChartProps[\"tooltipDateFormatter\"];\n tooltipTotalLabel: TypeAreaChartProps[\"tooltipTotalLabel\"];\n total: number | null;\n x: TypeChartTooltipProps[\"x\"];\n // optional\n currency?: TypeAreaChartProps[\"currency\"];\n numberFormat?: TypeAreaChartProps[\"numberFormat\"];\n onClick?: TypeAreaChartProps[\"onClick\"];\n tooltipClickLabel?: TypeAreaChartProps[\"tooltipClickLabel\"];\n xAnnotationDetails?: TypeChartXAnnotationsDetails;\n}>;\n\nexport const AreaChartTooltip = memo<TypeAreaChartTooltipProps>(\n function AreaChartTooltip({\n data,\n invalidNumberLabel,\n numberLocale,\n textLocale,\n tooltipDateFormatter,\n tooltipTotalLabel,\n total,\n x,\n // optional\n currency = \"USD\",\n numberFormat = \"decimal\",\n onClick,\n tooltipClickLabel,\n xAnnotationDetails,\n }: TypeAreaChartTooltipProps) {\n const rows = data.map(({ color, icon, name, value }) => {\n return {\n cells: [\n {\n content: (\n <ChartLegendLabel color={color}>\n <ChartLegendLabelContentWithIcon icon={icon}>\n <Text aria-label={`${name}: `}>{name}</Text>\n </ChartLegendLabelContentWithIcon>\n </ChartLegendLabel>\n ),\n },\n {\n content:\n value === null && invalidNumberLabel ? (\n <Text>{invalidNumberLabel}</Text>\n ) : numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={value} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={value}\n />\n ),\n align: \"right\",\n },\n ],\n };\n });\n\n const appendedRows =\n data.length > 1\n ? [\n {\n cells: [\n {\n content: (\n <Text\n fontWeight=\"semibold\"\n aria-label={`${tooltipTotalLabel}: `}\n >\n {tooltipTotalLabel}\n </Text>\n ),\n },\n {\n content: (\n <Text fontWeight=\"bold\">\n {total === null && invalidNumberLabel ? (\n invalidNumberLabel\n ) : numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={total} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={total}\n />\n )}\n </Text>\n ),\n align: \"right\",\n },\n ],\n isAppendedRow: true,\n },\n ]\n : [];\n\n return (\n <ChartTooltip>\n {xAnnotationDetails ? xAnnotationDetails() : undefined}\n <ChartTooltipTitle>{tooltipDateFormatter({ x })}</ChartTooltipTitle>\n <ChartTooltipTable\n rows={\n [...rows, ...appendedRows] as TypeChartTooltipTableProps[\"rows\"]\n }\n />\n {onClick && tooltipClickLabel ? (\n <ChartTooltipFooter>\n {typeof tooltipClickLabel === \"string\" ? (\n <Box display=\"flex\" alignItems=\"center\" gap={300}>\n <Icon name=\"hand-pointer-clicking-outline\" color=\"icon.base\" />\n <Text color=\"text.subtext\" fontSize={200}>\n {tooltipClickLabel}\n </Text>\n </Box>\n ) : (\n tooltipClickLabel\n )}\n </ChartTooltipFooter>\n ) : null}\n </ChartTooltip>\n );\n }\n);\n","import { memo, useEffect, useState, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { type TypeChartXAnnotations } from \"../../../types\";\nimport {\n type AnnotationsOptions,\n type AnnotationsLabelOptions,\n} from \"highcharts\";\n\n// add in types that Highcharts doesn't include by default\nexport interface TypeExtendedLabelOptions extends AnnotationsLabelOptions {\n graphic?: {\n div?: HTMLDivElement;\n };\n options?: {\n point?: {\n x?: number;\n };\n };\n}\n\nexport const ChartXAnnotationMarkerPortal = memo(\n function ChartXAnnotationMarkerPortal({\n xAnnotations,\n annotationContext,\n chartContainer,\n }: {\n xAnnotations: TypeChartXAnnotations;\n annotationContext: AnnotationsOptions;\n /** The chart's own DOM root; queries scope to it so charts sharing a page don't sweep each other's markers. */\n chartContainer: HTMLElement;\n }) {\n const annotationContainers = useRef<Record<number, HTMLDivElement>>({});\n const [, setRenderCount] = useState(0); // used to trigger react to re-render\n const forceRender = () => setRenderCount((prev) => prev + 1);\n useEffect(() => {\n if (annotationContext.labels) {\n const newContainers: Record<number, HTMLDivElement> = {};\n const existingAnnotationContainers = chartContainer.querySelectorAll(\n \"div[data-annotation-marker='true']\"\n );\n\n // 1. Mark all existing annotations as \"false\" before updating\n // Highcharts doesn't clean these up, so we'll need to at the end\n existingAnnotationContainers.forEach((annotation) =>\n annotation.setAttribute(\"data-annotation-marker\", \"false\")\n );\n\n annotationContext.labels.forEach((label: TypeExtendedLabelOptions) => {\n const labelElement = label.graphic?.div;\n if (labelElement) {\n // 2. Remove old annotations markers inside the current container\n labelElement\n .querySelectorAll(\"div[data-annotation-marker]\")\n .forEach((component) => component.remove());\n\n // 3. Create a new annotation div\n const annotationDiv = document.createElement(\"div\");\n annotationDiv.setAttribute(\"data-annotation-marker\", \"true\");\n labelElement.appendChild(annotationDiv);\n\n const xValue = label.options?.point?.x as number;\n newContainers[xValue] = annotationDiv;\n }\n });\n\n annotationContainers.current = newContainers;\n forceRender(); // Triggers re-render so the portal attaches to updated containers\n\n // 4. Remove stale parent annotation containers\n requestAnimationFrame(() => {\n chartContainer\n .querySelectorAll(\"div.highcharts-annotation\")\n .forEach((annotationDiv) => {\n const reactAnnotations = annotationDiv.querySelectorAll(\n \"div[data-annotation-marker]\"\n );\n\n const hasActiveAnnotations = Array.from(reactAnnotations).some(\n (div) => div.getAttribute(\"data-annotation-marker\") === \"true\"\n );\n\n // Remove if all child markers are stale\n if (!hasActiveAnnotations) {\n annotationDiv.remove();\n }\n });\n });\n }\n }, [annotationContext.labels, xAnnotations, chartContainer]);\n\n return (\n <>\n {Object.entries(annotationContainers.current).map(\n ([xValue, container]) => {\n const annotationComponent = xAnnotations?.[Number(xValue)]?.marker;\n return annotationComponent\n ? createPortal(annotationComponent(), container)\n : null;\n }\n )}\n </>\n );\n }\n);\n","import type {\n SeriesSplineOptions,\n SeriesAreasplineOptions,\n SeriesColumnOptions,\n} from \"highcharts\";\n\nimport type { TypeAreaChartProps } from \"../components/AreaChart\";\nimport type { TypeLineChartProps } from \"../components/LineChart\";\nimport type { TypeVerticalBarChartProps, TypeSeriesType } from \"../types\";\n\ntype TypeTimeSeriesOptions =\n | SeriesSplineOptions\n | SeriesAreasplineOptions\n | SeriesColumnOptions;\n\n// returns a transformed set of data to series with some logic for handling null values\nexport const transformDataToSeries = (\n {\n data,\n }: {\n data:\n | TypeAreaChartProps[\"data\"]\n | TypeLineChartProps[\"data\"]\n | TypeVerticalBarChartProps[\"data\"];\n },\n type: TypeSeriesType\n): TypeTimeSeriesOptions[] => {\n // Check if we have categorical data (string x values)\n const hasCategoricalData = data.some((series) =>\n series.points.some((point) => typeof point.x === \"string\")\n );\n\n return data.map((dataItem, dataIndex) => {\n const points = dataItem.points || [];\n const dataPoints = points.map((point, pointsIndex) => {\n let enableMarker = false;\n const isFirstPoint = pointsIndex === 0;\n const isLastPoint = pointsIndex === points.length - 1;\n\n // @ts-expect-error - points[index] may be undefined under noUncheckedIndexedAccess; guarded by isFirstPoint\n const previousY = isFirstPoint ? null : points[pointsIndex - 1].y;\n // @ts-expect-error - points[index] may be undefined under noUncheckedIndexedAccess; guarded by isLastPoint\n const nextY = isLastPoint ? null : points[pointsIndex + 1].y;\n\n if (isFirstPoint && nextY === null) {\n // if the first point has data and the second point is null, show a marker for the first point\n enableMarker = true;\n } else if (isLastPoint && previousY === null) {\n // if the last point has data and the second to last point is null, show a marker for the last point\n enableMarker = true;\n } else if (previousY === null && nextY === null) {\n // if the a point has null values on both sides, show a marker\n enableMarker = true;\n }\n\n return {\n x: hasCategoricalData ? pointsIndex : point.x,\n y: point.y,\n marker: {\n enabled: enableMarker ? enableMarker : undefined,\n symbol: enableMarker ? \"circle\" : undefined,\n },\n // For categorical data, store the original category name\n ...(hasCategoricalData && { name: point.x }),\n };\n });\n\n return {\n colorIndex: dataIndex,\n data: dataPoints as TypeTimeSeriesOptions[\"data\"],\n name: dataItem.name as TypeTimeSeriesOptions[\"name\"],\n type: type,\n };\n });\n};\n","import type {\n AxisLabelsFormatterContextObject,\n AxisTickPositionsArray,\n} from \"highcharts\";\nimport { formatDuration } from \"@sproutsocial/seeds-react-duration\";\nimport { formatNumeral } from \"@sproutsocial/seeds-react-numeral\";\n\nimport type { TypeChartNumberFormat } from \"../types\";\n\ntype TypeYAxisLabelFormatterProps = Readonly<{\n numberLocale: Intl.LocalesArgument;\n textLocale: Intl.LocalesArgument;\n tickPositions: AxisTickPositionsArray;\n value: AxisLabelsFormatterContextObject[\"value\"];\n // optional\n currency?: string;\n numberFormat?: TypeChartNumberFormat;\n}>;\n\nexport const yAxisLabelFormatter = ({\n numberLocale,\n textLocale,\n tickPositions,\n value,\n currency = \"USD\",\n numberFormat = \"decimal\",\n}: TypeYAxisLabelFormatterProps): string => {\n const numberValue = Number(value);\n\n if (numberValue === 0) {\n return formatNumeral({\n locale: numberLocale as string,\n number: numberValue,\n });\n }\n\n if (numberFormat === \"duration\") {\n return formatDuration({\n display: \"narrow\",\n locale: textLocale,\n milliseconds: numberValue,\n });\n }\n\n // Seeds formatNumeral helper starts abbreviating numbers above 10,000. this maxValue logic\n // helps bring that threshold down to 1,000 if the last tick on the y axis is greater than 9,999\n // so we render \"2k 4k 6k 8k 10k\" instead of \"2,000 4,000 6,000 8,000 10k\"\n const maxValue =\n tickPositions && tickPositions.length > 0\n ? tickPositions[tickPositions.length - 1]\n : undefined;\n const abbreviate =\n typeof maxValue === \"number\" && maxValue > 9999 ? 1000 : true;\n\n return formatNumeral({\n abbreviate,\n currency,\n format: numberFormat,\n locale: numberLocale as string,\n number: numberValue,\n });\n};\n","import type {\n AxisLabelsFormatterContextObject,\n AxisTickPositionsArray,\n} from \"highcharts\";\n\nimport type {\n ExtendedTimeTicksInfoObject,\n TypeChartTimeFormat,\n} from \"../types\";\n\nconst getDatePartsInTimezone = (date: Date, timezone: string) => {\n const formatter = new Intl.DateTimeFormat(\"en-US\", {\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n timeZone: timezone,\n });\n const parts = formatter.formatToParts(date);\n return {\n day: parseInt(parts.find((p) => p.type === \"day\")?.value ?? \"0\", 10),\n month: parseInt(parts.find((p) => p.type === \"month\")?.value ?? \"0\", 10),\n year: parseInt(parts.find((p) => p.type === \"year\")?.value ?? \"0\", 10),\n };\n};\n\ntype TypeXAxisLabelFormatterProps = Readonly<{\n textLocale: Intl.LocalesArgument;\n tickPositions: AxisTickPositionsArray;\n unitName: ExtendedTimeTicksInfoObject[\"unitName\"];\n value: AxisLabelsFormatterContextObject[\"value\"];\n // optional\n timeFormat?: TypeChartTimeFormat;\n timezone?: string;\n}>;\n\nexport const xAxisLabelFormatter = ({\n textLocale,\n tickPositions = [],\n unitName,\n value,\n // optional\n timeFormat = \"12\",\n timezone = \"UTC\",\n}: TypeXAxisLabelFormatterProps): string => {\n // Handle categorical (string) data\n if (typeof value === \"string\") {\n return `<span>${value}</span>`;\n }\n const tickIndex = tickPositions.indexOf(value as number);\n const isFirst = tickIndex === 0;\n const previousValue = tickPositions[tickIndex - 1];\n\n const valueDate = new Date(value);\n const valueParts = getDatePartsInTimezone(valueDate, timezone);\n const previousValueDate = previousValue ? new Date(previousValue) : undefined;\n const previousValueParts = previousValueDate\n ? getDatePartsInTimezone(previousValueDate, timezone)\n : undefined;\n\n let firstPartOptions = {};\n let secondPartOptions = {};\n\n switch (unitName) {\n case \"hour\":\n firstPartOptions =\n timeFormat === \"24\"\n ? { hour: \"numeric\", minute: \"numeric\", hour12: false }\n : { hour: \"numeric\" };\n if (isFirst || valueParts.day !== previousValueParts?.day) {\n secondPartOptions = { day: \"numeric\", month: \"short\" };\n }\n break;\n case \"day\":\n case \"week\":\n firstPartOptions = { day: \"numeric\" };\n if (isFirst || valueParts.month !== previousValueParts?.month) {\n secondPartOptions = { month: \"short\" };\n }\n break;\n case \"month\":\n firstPartOptions = { month: \"short\" };\n if (isFirst || valueParts.year !== previousValueParts?.year) {\n secondPartOptions = { year: \"numeric\" };\n }\n break;\n case \"year\":\n firstPartOptions = { year: \"numeric\" };\n break;\n default:\n firstPartOptions = {};\n break;\n }\n\n const firstPart = new Intl.DateTimeFormat(textLocale, {\n ...firstPartOptions,\n timeZone: timezone,\n }).format(valueDate);\n const secondPart =\n Object.keys(secondPartOptions).length > 0\n ? new Intl.DateTimeFormat(textLocale, {\n ...secondPartOptions,\n timeZone: timezone,\n }).format(valueDate)\n : undefined;\n\n return `<span>${firstPart}</span>${\n secondPart ? `<span>${secondPart}</span>` : \"\"\n }`;\n};\n","/**\n * Helper to detect if data is hourly time data (all x values are hours of the same day)\n * @param data - Array of series data with points containing x values\n * @returns boolean indicating if all x values are hours of the same day\n * @deprecated Auto-detection of hourly data is deprecated. v2 is declarative:\n * use `xAxis={{ type: \"datetime\", timeFormat: \"12\" | \"24\" }}` + a top-level\n * `timezone` instead of relying on implicit detection. See\n * `seeds-tooling/seeds-codemod-cli/src/usage-patterns/VERTICALBARCHARTV1_PATTERNS.md`\n * (CE-8).\n */\nexport function isHourlyTimeData(\n data: ReadonlyArray<\n Readonly<{ points: ReadonlyArray<{ x: number | string }> }>\n >\n): boolean {\n // Return false if there is no data.\n if (!data.length) return false;\n\n // Flatten all data points into a single array of x values.\n const xVals = data.flatMap((series) => series.points.map((p) => p.x));\n\n // Return false if there are no x values.\n if (!xVals.length) return false;\n\n // Return false if any x values are strings (categorical data)\n if (xVals.some((x) => typeof x === \"string\")) return false;\n\n // Check if all x values are on the same calendar date.\n // We do this by converting each timestamp to a YYYY-MM-DD string and checking if there's only one unique date string.\n const dates = (xVals as number[]).map((x) => {\n const d = new Date(x);\n return `${d.getUTCFullYear()}-${d.getUTCMonth()}-${d.getUTCDate()}`;\n });\n const uniqueDates = new Set(dates);\n if (uniqueDates.size !== 1) return false;\n\n // Check if all x values are exactly on the hour (e.g., 2:00:00, not 2:00:01).\n // We also check that the hour is within the valid 0-23 range.\n return (xVals as number[]).every((x) => {\n const d = new Date(x);\n const hour = d.getUTCHours();\n const minutes = d.getUTCMinutes();\n const seconds = d.getUTCSeconds();\n return hour >= 0 && hour <= 23 && minutes === 0 && seconds === 0;\n });\n}\n","/**\n * Helper to detect if data is categorical hour data (all x values are hour strings)\n * Supports both 12-hour format (\"12 AM\", \"1 PM\") and 24-hour format (\"00:00\", \"13:00\", \"23:00\")\n * @param data - Array of series data with points containing x values\n * @returns boolean indicating if all x values are hour strings\n * @deprecated Auto-detection of hourly data is deprecated. v2 is declarative:\n * use `xAxis={{ type: \"datetime\", timeFormat: \"12\" | \"24\" }}` + a top-level\n * `timezone` instead of relying on implicit detection. See\n * `seeds-tooling/seeds-codemod-cli/src/usage-patterns/VERTICALBARCHARTV1_PATTERNS.md`\n * (CE-8).\n */\nexport function isCategoricalHourData(\n data: ReadonlyArray<\n Readonly<{ points: ReadonlyArray<{ x: number | string }> }>\n >\n): boolean {\n // Return false if there is no data.\n if (!data.length) return false;\n\n // Flatten all data points into a single array of x values.\n const xVals = data.flatMap((series) => series.points.map((p) => p.x));\n\n // Return false if there are no x values.\n if (!xVals.length) return false;\n\n // Return false if any x values are not strings (numerical data)\n if (xVals.some((x) => typeof x !== \"string\")) return false;\n\n // Check if all x values match either 12-hour or 24-hour format patterns\n const hour12Pattern = /^\\d{1,2} (AM|PM)$/; // \"12 AM\", \"1 PM\", \"10 AM\"\n const hour24Pattern = /^([01]?\\d|2[0-3]):([0-5]\\d)$/; // \"00:00\", \"13:00\", \"23:59\"\n\n const stringValues = xVals as string[];\n\n // Check if all values match 12-hour format\n const allMatch12Hour = stringValues.every((x) => hour12Pattern.test(x));\n\n // Check if all values match 24-hour format\n const allMatch24Hour = stringValues.every((x) => hour24Pattern.test(x));\n\n return allMatch12Hour || allMatch24Hour;\n}\n","export const getStorybookRandomColor = (): string => {\n const letters = \"0123456789ABCDEF\";\n let color = \"#\";\n for (let i = 0; i < 6; i++) {\n color += letters[Math.floor(Math.random() * 16)];\n }\n return color;\n};\n","import { getStorybookRandomColor } from \"./getStorybookRandomColor\";\n\nexport const getStorybookCategoricalData = ({\n showNulls,\n showNegativeValues,\n numberOfSeries,\n yAxisMax,\n showCustomColors,\n showDashedLines,\n categoryType,\n}: {\n showNulls: boolean;\n showNegativeValues: boolean;\n numberOfSeries: number;\n yAxisMax: number;\n showCustomColors: boolean;\n showDashedLines: boolean;\n categoryType: \"hours\" | \"hours24\" | \"days\" | \"months\" | \"custom\";\n}) => {\n // Define different category sets\n const categoryOptions = {\n hours: [\n \"12 AM\",\n \"1 AM\",\n \"2 AM\",\n \"3 AM\",\n \"4 AM\",\n \"5 AM\",\n \"6 AM\",\n \"7 AM\",\n \"8 AM\",\n \"9 AM\",\n \"10 AM\",\n \"11 AM\",\n \"12 PM\",\n \"1 PM\",\n \"2 PM\",\n \"3 PM\",\n \"4 PM\",\n \"5 PM\",\n \"6 PM\",\n \"7 PM\",\n \"8 PM\",\n \"9 PM\",\n \"10 PM\",\n \"11 PM\",\n ],\n hours24: [\n \"00:00\",\n \"01:00\",\n \"02:00\",\n \"03:00\",\n \"04:00\",\n \"05:00\",\n \"06:00\",\n \"07:00\",\n \"08:00\",\n \"09:00\",\n \"10:00\",\n \"11:00\",\n \"12:00\",\n \"13:00\",\n \"14:00\",\n \"15:00\",\n \"16:00\",\n \"17:00\",\n \"18:00\",\n \"19:00\",\n \"20:00\",\n \"21:00\",\n \"22:00\",\n \"23:00\",\n ],\n days: [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n ],\n months: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n custom: [\n \"Category A\",\n \"Category B\",\n \"Category C\",\n \"Category D\",\n \"Category E\",\n ],\n };\n\n const categories = categoryOptions[categoryType];\n const numberOfPoints = categories.length;\n\n return [...Array(numberOfSeries).keys()].map((seriesIndex) => {\n let nullsArray: ReadonlyArray<number> = [];\n\n if (showNulls) {\n const nullsArrayLength = Math.floor(numberOfPoints / 5);\n nullsArray = [...Array(nullsArrayLength)].map(() =>\n Math.floor(Math.random() * numberOfPoints)\n );\n }\n\n return {\n points: categories.map((category, pointIndex) => {\n const showNull =\n nullsArray && nullsArray.length > 0\n ? nullsArray.includes(pointIndex)\n : false;\n const randomValue = Math.random();\n const positiveOrNegativeYAxisMax = showNegativeValues\n ? randomValue < 0.5\n ? -yAxisMax\n : yAxisMax\n : yAxisMax;\n\n return {\n x: category,\n y: showNull\n ? null\n : Math.floor(randomValue * positiveOrNegativeYAxisMax),\n };\n }),\n name: `Series ${seriesIndex + 1}`,\n styles: {\n color: showCustomColors ? getStorybookRandomColor() : undefined,\n pattern: showDashedLines ? \"dashed\" : \"solid\",\n },\n };\n });\n};\n","import { getStorybookRandomColor } from \"./getStorybookRandomColor\";\n\nexport const getStorybookSparseTimelineData = ({\n showNulls,\n showNegativeValues,\n numberOfSeries,\n yAxisMax,\n showCustomColors,\n showDashedLines,\n numberOfPoints = 5,\n timeSpanHours = 24,\n}: {\n showNulls: boolean;\n showNegativeValues: boolean;\n numberOfSeries: number;\n yAxisMax: number;\n showCustomColors: boolean;\n showDashedLines: boolean;\n numberOfPoints?: number;\n timeSpanHours?: number;\n}) => {\n const seriesNames = [\n \"Posts Published\",\n \"Comments\",\n \"Likes\",\n \"Shares\",\n \"Clicks\",\n \"Views\",\n \"Saves\",\n \"Reposts\",\n \"Mentions\",\n \"Reactions\",\n ];\n\n const baseDate = new Date(\"2024-01-01T00:00:00Z\");\n const timeSpanMs = timeSpanHours * 60 * 60 * 1000;\n\n return [...Array(numberOfSeries).keys()].map((seriesIndex) => {\n let nullsArray: ReadonlyArray<number> = [];\n\n if (showNulls) {\n const nullsArrayLength = Math.floor(numberOfPoints / 5);\n nullsArray = [...Array(nullsArrayLength)].map(() =>\n Math.floor(Math.random() * numberOfPoints)\n );\n }\n\n // Generate random timestamps for this series\n const timestamps = [...Array(numberOfPoints)]\n .map(() => {\n const randomOffset = Math.random() * timeSpanMs;\n return baseDate.getTime() + randomOffset;\n })\n .sort((a, b) => a - b); // Sort chronologically\n\n return {\n points: timestamps.map((timestamp, pointIndex) => {\n const showNull =\n nullsArray && nullsArray.length > 0\n ? nullsArray.includes(pointIndex)\n : false;\n const randomValue = Math.random();\n const positiveOrNegativeYAxisMax = showNegativeValues\n ? randomValue < 0.5\n ? -yAxisMax\n : yAxisMax\n : yAxisMax;\n\n return {\n x: timestamp,\n y: showNull\n ? null\n : Math.floor(randomValue * positiveOrNegativeYAxisMax),\n };\n }),\n name: seriesNames[seriesIndex] || `Series ${seriesIndex + 1}`,\n styles: {\n color: showCustomColors ? getStorybookRandomColor() : undefined,\n pattern: showDashedLines ? \"dashed\" : \"solid\",\n },\n };\n });\n};\n","import { useState, useCallback, useMemo } from \"react\";\nimport type {\n Chart,\n Annotation,\n Series,\n Point,\n AxisLabelsFormatterContextObject,\n SeriesClickEventObject,\n} from \"highcharts\";\n\nimport {\n lineChartOptions,\n areaChartOptions,\n columnChartOptions,\n} from \"../constants\";\nimport type { TypeAreaChartProps } from \"../components/AreaChart\";\nimport type { TypeLineChartProps } from \"../components/LineChart\";\nimport type { TypeVerticalBarChartProps } from \"../types\";\nimport {\n yAxisLabelFormatter as defaultYAxisLabelFormatter,\n transformDataToSeries,\n xAxisLabelFormatter,\n} from \"../helpers\";\nimport type {\n TypeChartNumberFormat,\n TypeChartTimeFormat,\n ExtendedAxisLabelsFormatterContextObject,\n TypeChartYAxisLabelFormatter,\n TypeChartXAnnotations,\n TypeSeriesType,\n} from \"../types\";\nimport { generateChartTooltipPortalId } from \"../components/ChartTooltip/components/ChartTooltipPortal\";\nimport { merge } from \"lodash\";\n\nexport type TypeUseTimeSeriesChartOptionsProps = {\n xAnnotations: TypeChartXAnnotations;\n data:\n | TypeAreaChartProps[\"data\"]\n | TypeLineChartProps[\"data\"]\n | TypeVerticalBarChartProps[\"data\"];\n numberLocale: Intl.LocalesArgument;\n seriesType: TypeSeriesType;\n textLocale: Intl.LocalesArgument;\n // optional\n currency?: string;\n disableTooltips?: boolean;\n numberFormat?: TypeChartNumberFormat;\n yAxisLabelFormatter?: TypeChartYAxisLabelFormatter;\n onClick?: ({ x }: Readonly<{ x: number }>) => void;\n timeFormat?: TypeChartTimeFormat;\n timezone?: string;\n xAxisLabelFormatter?: (params: {\n textLocale: Intl.LocalesArgument;\n tickPositions: number[];\n unitName: string;\n value: number | string;\n timeFormat?: string;\n }) => string;\n};\nexport interface TypeExtendedChart extends Chart {\n // Highcharts doesn't include the annotations type by default, so we have to add it\n annotations?: Annotation[];\n}\n\nexport const useTimeSeriesChartOptions = ({\n xAnnotations,\n data,\n numberLocale,\n seriesType,\n textLocale,\n currency = \"USD\",\n disableTooltips = false,\n numberFormat = \"decimal\",\n yAxisLabelFormatter,\n onClick,\n timeFormat = \"12\",\n timezone = \"UTC\",\n xAxisLabelFormatter,\n}: TypeUseTimeSeriesChartOptionsProps) => {\n const [chart, setChart] = useState<TypeExtendedChart | null>(null);\n\n const callback = useCallback((chartInstance: Chart) => {\n setChart(chartInstance);\n }, []);\n\n function attachTooltipEventListeners(series: Series[], tooltipId: string) {\n const handleFocus = (point: Point) =>\n point.series.chart.tooltip.refresh(point);\n const handleBlur = (point: Point) => point.series.chart.tooltip.hide(0);\n\n series\n .flatMap((item) => item.data)\n .forEach((point) => {\n const pointElement = point?.graphic?.element;\n if (pointElement) {\n pointElement.setAttribute(\"aria-describedby\", tooltipId);\n pointElement.addEventListener(\"focus\", () => handleFocus(point));\n pointElement.addEventListener(\"blur\", () => handleBlur(point));\n }\n });\n }\n\n const formattedXAnnotations = (annotations?: TypeChartXAnnotations) => {\n if (annotations) {\n return Object.entries(annotations).map(([x]) => ({\n point: {\n x: Number(x), // Convert key (which is a string) to a number\n y: 0,\n xAxis: 0,\n yAxis: 0,\n },\n text: \" \", // space is necessary because empty string reverts to showing default label\n }));\n }\n };\n\n const chartMarginTop = xAnnotations ? 24 : null;\n\n const getBaseChartOptions = (type: TypeSeriesType) => {\n switch (type) {\n case \"areaspline\":\n return areaChartOptions;\n case \"spline\":\n return lineChartOptions;\n case \"column\":\n return columnChartOptions;\n default:\n return lineChartOptions; // fallback to line chart as default\n }\n };\n\n const baseChartOptions = getBaseChartOptions(seriesType);\n\n // Detect if we have categorical data (string x values)\n const hasCategoricalData = data.some((series) =>\n series.points.some((point) => typeof point.x === \"string\")\n );\n\n // Extract categories for categorical data\n const categories = hasCategoricalData\n ? data[0]?.points.map((point) => point.x as string) || []\n : [];\n\n // Detect sparse timeline data (numerical x values with gaps that need wider columns)\n const hasSparseTimelineData = !hasCategoricalData && seriesType === \"column\";\n\n const options = useMemo(() => {\n return merge({}, baseChartOptions, {\n accessibility: {\n point: {\n descriptionFormatter: function () {\n return \" \"; // space is necessary because empty string reverts to defaults\n },\n },\n },\n annotations: [\n {\n labels: xAnnotations\n ? formattedXAnnotations(xAnnotations)\n : undefined,\n },\n ],\n chart: {\n marginTop: chartMarginTop,\n events: {\n click: onClick\n ? function (this: TypeExtendedChart) {\n return onClick({ x: this?.hoverPoint?.x as number });\n }\n : undefined,\n load: function (this: TypeExtendedChart) {\n const tooltipId = generateChartTooltipPortalId(this.index);\n attachTooltipEventListeners(this.series, tooltipId);\n },\n },\n },\n plotOptions: {\n areaspline: {\n events: {\n click:\n onClick && seriesType === \"areaspline\"\n ? function (event: SeriesClickEventObject) {\n return onClick({ x: event.point.x });\n }\n : undefined,\n },\n },\n spline: {\n events: {\n click:\n onClick && seriesType === \"spline\"\n ? function (event: SeriesClickEventObject) {\n return onClick({ x: event.point.x });\n }\n : undefined,\n },\n },\n column: {\n // For sparse timeline data, set explicit point width to make columns wider\n ...(hasSparseTimelineData && {\n pointWidth: 20, // Fixed width in pixels for sparse timeline data\n }),\n point: {\n events: {\n /*\n Custom hover behavior for multi-series column charts.\n\n In multi-series column charts, multiple columns\n can share the same x-axis position (stacked or grouped). When hovering\n over one column, we want ALL columns at that x-position to highlight\n together for better visual feedback. Simple CSS :hover only affects the\n individual element being hovered, not related columns at the same position.\n\n This custom behavior ensures that when you hover over any column at a\n specific x-position, all columns at that same position get the \"column-hover\"\n class, creating a unified highlight effect across all series.\n */\n click:\n onClick && seriesType === \"column\"\n ? function (event: SeriesClickEventObject) {\n return onClick({ x: event.point.x });\n }\n : undefined,\n mouseOver: function (this: any) {\n const x = this.x;\n if (\n this.series &&\n this.series.chart &&\n this.series.chart.series\n ) {\n this.series.chart.series.forEach((series: any) => {\n if (series.type === \"column\") {\n series.data.forEach((point: any) => {\n if (point.x === x) {\n const el = point.graphic && point.graphic.element;\n if (el) {\n el.classList.add(\"column-hover\");\n }\n }\n });\n }\n });\n }\n },\n mouseOut: function (this: any) {\n if (\n this.series &&\n this.series.chart &&\n this.series.chart.series\n ) {\n this.series.chart.series.forEach((series: any) => {\n if (series.type === \"column\") {\n series.data.forEach((point: any) => {\n const el = point.graphic && point.graphic.element;\n if (el) {\n el.classList.remove(\"column-hover\");\n }\n });\n }\n });\n }\n },\n },\n },\n },\n },\n series: transformDataToSeries({ data }, seriesType),\n time: { timezone },\n tooltip: {\n enabled: !disableTooltips,\n },\n xAxis: {\n labels: {\n formatter: function (this: AxisLabelsFormatterContextObject) {\n const tickPositions = (this.axis.tickPositions || []).map(\n Number\n ) as number[];\n const value = this.value;\n const unitName = (this as ExtendedAxisLabelsFormatterContextObject)\n .tickPositionInfo?.unitName;\n if (typeof xAxisLabelFormatter === \"function\") {\n return xAxisLabelFormatter({\n textLocale,\n tickPositions,\n timeFormat,\n unitName,\n value,\n });\n }\n if (typeof xAxisLabelFormatterDefault === \"function\") {\n return xAxisLabelFormatterDefault({\n textLocale,\n tickPositions,\n timeFormat,\n timezone,\n unitName,\n value,\n });\n }\n return \"\";\n },\n },\n // Override xAxis type for categorical data\n ...(hasCategoricalData && {\n type: \"category\",\n categories,\n crosshair: false,\n }),\n },\n yAxis: {\n labels: {\n formatter: function (this: AxisLabelsFormatterContextObject) {\n return yAxisLabelFormatter\n ? yAxisLabelFormatter({\n y: this.value as number,\n yValues: this.axis.tickPositions as ReadonlyArray<number>,\n })\n : defaultYAxisLabelFormatter({\n currency,\n numberFormat,\n numberLocale,\n textLocale,\n tickPositions: this.axis.tickPositions || [],\n value: this.value,\n });\n },\n },\n },\n });\n }, [\n baseChartOptions,\n categories,\n currency,\n data,\n hasCategoricalData,\n hasSparseTimelineData,\n numberFormat,\n numberLocale,\n onClick,\n seriesType,\n textLocale,\n timeFormat,\n xAnnotations,\n yAxisLabelFormatter,\n xAxisLabelFormatter,\n ]);\n\n return { options, chart, callback };\n};\n\n// Alias the default formatter to avoid shadowing\nconst xAxisLabelFormatterDefault = xAxisLabelFormatter;\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Icon, type TypeIconName } from \"@sproutsocial/seeds-react-icon\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\nimport { ChartTooltipHeader } from \"../ChartTooltip\";\n\ntype TypeChartXAnnotationDetailsProps = Readonly<{\n iconName: TypeIconName;\n text: string;\n}>;\n\n// Named function so React has a displayName (satisfies react/display-name); don't convert to an anonymous arrow.\nexport const ChartXAnnotationDetails = memo<TypeChartXAnnotationDetailsProps>(\n function ChartXAnnotationDetails({ iconName, text }) {\n return (\n <ChartTooltipHeader>\n <Box display=\"flex\" alignItems=\"center\" gap={300}>\n <Icon name={iconName} size=\"mini\" color=\"icon.base\" />\n <Text color=\"text.body\" fontSize={200}>\n {text}\n </Text>\n </Box>\n </ChartTooltipHeader>\n );\n }\n);\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Icon, type TypeIconName } from \"@sproutsocial/seeds-react-icon\";\n\ntype TypeChartXAnnotationMarkerProps = Readonly<{\n iconName: TypeIconName;\n}>;\n\n// Named function so React has a displayName (satisfies react/display-name); don't convert to an anonymous arrow.\nexport const ChartXAnnotationMarker = memo<TypeChartXAnnotationMarkerProps>(\n function ChartXAnnotationMarker({ iconName }) {\n return (\n <Box display=\"flex\" flexDirection=\"column\" alignItems=\"center\" gap={200}>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"20px\"\n height=\"20px\"\n bg=\"icon.base\"\n borderRadius=\"50%\"\n >\n <Icon name={iconName} size=\"mini\" color=\"icon.inverse\" />\n </Box>\n {/* Marker line height is hard coded for simplicity since chart height is hard coded. If that changes, we'll need to make this dynamic */}\n <Box height={`199px`} width=\"0.5px\" bg=\"neutral.200\" />\n </Box>\n );\n }\n);\n","import { memo, useState, useEffect, useCallback, type ReactNode } from \"react\";\nimport Highcharts, { type Chart, type Options } from \"highcharts\";\nimport { HighchartsReact } from \"highcharts-react-official\";\nimport highchartsAccessibility from \"highcharts/modules/accessibility\";\nimport styled from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\n\nimport { DonutChartLegend } from \"./components/DonutChartLegend\";\nimport { DonutChartTooltip } from \"./components/DonutChartTooltip\";\nimport { transformDonutChartTooltipData } from \"./helpers/transformDonutChartTooltipData\";\n\nimport {\n ChartTooltipPortal,\n generateChartTooltipPortalId,\n} from \"../ChartTooltip/components/ChartTooltipPortal\";\nimport { donutChartOptions } from \"../../constants/chartOptions\";\nimport { GlobalChartStyleOverrides, donutChartStyles } from \"../../styles\";\nimport type { TypeChartDataStyles, TypeChartNumberFormat } from \"../../types\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\n// init modules\nhighchartsAccessibility(Highcharts);\n\n// styled components\nconst StyledBox = styled(Box)`\n ${donutChartStyles}\n`;\n\n// types\nexport type TypeDonutChartTooltipProps = Readonly<{\n color: string;\n name: string;\n percent: number | null;\n value: number | null;\n // optional\n icon?: ReactNode;\n}>;\n\nexport type TypeDonutChartDataItem = Readonly<{\n name: string;\n value: number;\n // optional\n key?: string;\n icon?: ReactNode;\n styles?: TypeChartDataStyles;\n}>;\n\nexport type TypeDonutChartProps = Readonly<{\n data: ReadonlyArray<TypeDonutChartDataItem>;\n numberLocale: Intl.LocalesArgument;\n textLocale: Intl.LocalesArgument;\n // optional\n currency?: string;\n disableTooltips?: boolean;\n hideLegend?: boolean;\n numberFormat?: TypeChartNumberFormat;\n tooltip?: (_props: TypeDonutChartTooltipProps) => ReactNode;\n onClick?: (_props: Readonly<{ x: string } & TypeDonutChartDataItem>) => void;\n tooltipClickLabel?: ReactNode;\n}>;\n\n/**\n * @deprecated Use `DonutChart` from `@sproutsocial/seeds-react-data-viz/donut` instead.\n */\nexport const DonutChart = memo<TypeDonutChartProps>(function DonutChart(\n props: TypeDonutChartProps\n) {\n const { data } = props;\n\n return data.length === 0 ? null : <DonutChartWithData {...props} />;\n});\n\nconst DonutChartWithData = memo<TypeDonutChartProps>(\n function DonutChartWithData({\n data,\n numberLocale = \"en-us\",\n textLocale = \"en-us\",\n // optional\n currency = \"USD\",\n disableTooltips = false,\n hideLegend = false,\n numberFormat = \"decimal\",\n tooltip,\n onClick,\n tooltipClickLabel,\n }: TypeDonutChartProps) {\n const [options, setOptions] = useState<Options>(donutChartOptions);\n const [chart, setChart] = useState<Chart | null>(null);\n\n const callback = useCallback((chartInstance: Chart) => {\n setChart(chartInstance);\n }, []);\n\n useEffect(() => {\n setOptions({\n accessibility: {\n point: {\n descriptionFormatter: function () {\n return \" \"; // space is necessary because empty string reverts to defaults\n },\n },\n },\n chart: {\n events: {\n render: function () {\n const allSlices = this.series[0]?.data ?? [];\n const tooltipId = generateChartTooltipPortalId(this.index);\n\n allSlices.forEach((slice) => {\n const sliceElement = slice?.graphic?.element;\n sliceElement?.setAttribute(\"aria-describedby\", tooltipId);\n\n // Update tooltip on focus\n sliceElement?.addEventListener(\"focus\", () => {\n slice.series.chart.tooltip.refresh(slice);\n });\n\n // Hide tooltip on blur\n sliceElement?.addEventListener(\"blur\", () => {\n slice.series.chart.tooltip.hide(0);\n });\n });\n },\n },\n },\n series: [\n {\n type: \"pie\",\n data: data.map((item, index) => {\n return {\n name: item.name,\n y: item.value,\n colorIndex: index,\n events: onClick\n ? {\n click: function () {\n onClick({ x: item.name, ...item });\n },\n }\n : undefined,\n };\n }),\n },\n ],\n tooltip: {\n enabled: !disableTooltips,\n },\n });\n }, [data]);\n\n const colors = data.map(\n (series, index) =>\n series.styles?.color ?? theme.colors.DATAVIZ_COLORS_LIST[index] ?? \"\"\n );\n\n return (\n <>\n <GlobalChartStyleOverrides />\n <StyledBox\n $colors={colors}\n $hasOnClick={Boolean(onClick)}\n bg=\"container.background.base\"\n >\n <HighchartsReact\n highcharts={Highcharts}\n options={options}\n callback={callback}\n />\n {chart && !disableTooltips ? (\n <ChartTooltipPortal\n chart={chart}\n renderContent={(context) => {\n const { color, icon, name, percent, value } =\n transformDonutChartTooltipData({ context, data });\n\n return tooltip ? (\n tooltip({ color, icon, name, percent, value })\n ) : (\n <DonutChartTooltip\n color={color}\n currency={currency}\n icon={icon}\n name={name}\n numberFormat={numberFormat}\n numberLocale={numberLocale}\n percent={percent}\n textLocale={textLocale}\n value={value}\n onClick={onClick}\n tooltipClickLabel={tooltipClickLabel}\n />\n );\n }}\n />\n ) : null}\n {hideLegend ? null : (\n <Box mt={350}>\n <DonutChartLegend data={data} />\n </Box>\n )}\n </StyledBox>\n </>\n );\n }\n);\n","import { memo } from \"react\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type { TypeDonutChartProps } from \"../DonutChart\";\nimport { ChartLegend, type TypeChartLegendProps } from \"../../ChartLegend\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\n// exported for testing\nexport const getDonutChartLegendLabels = ({\n data,\n}: Readonly<{\n data: TypeDonutChartProps[\"data\"];\n}>): TypeChartLegendProps[\"legendLabels\"] => {\n return data.map((slice, index) => ({\n content: (\n <ChartLegendLabelContentWithIcon icon={slice.icon}>\n {slice.name}\n </ChartLegendLabelContentWithIcon>\n ),\n color: slice.styles?.color || theme.colors.DATAVIZ_COLORS_LIST[index],\n }));\n};\n\ntype TypeDonutChartLegendProps = Readonly<{\n data: TypeDonutChartProps[\"data\"];\n}>;\n\nexport const DonutChartLegend = memo<TypeDonutChartLegendProps>(\n function DonutChartLegend({ data }: TypeDonutChartLegendProps) {\n return <ChartLegend legendLabels={getDonutChartLegendLabels({ data })} />;\n }\n);\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Duration } from \"@sproutsocial/seeds-react-duration\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Numeral } from \"@sproutsocial/seeds-react-numeral\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\n\nimport {\n ChartTooltip,\n ChartTooltipFooter,\n ChartTooltipTable,\n type TypeChartTooltipTableProps,\n} from \"../../ChartTooltip\";\nimport type {\n TypeDonutChartProps,\n TypeDonutChartTooltipProps as TypeDonutTooltipProps,\n} from \"../../DonutChart\";\nimport { ChartLegendLabel } from \"../../ChartLegend/components/ChartLegendLabel\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\nexport type TypeDonutChartTooltipProps = Readonly<{\n color: TypeDonutTooltipProps[\"color\"];\n name: TypeDonutTooltipProps[\"name\"];\n numberLocale: TypeDonutChartProps[\"numberLocale\"];\n percent: TypeDonutTooltipProps[\"percent\"];\n textLocale: TypeDonutChartProps[\"textLocale\"];\n value: TypeDonutTooltipProps[\"value\"];\n // optional\n currency?: TypeDonutChartProps[\"currency\"];\n icon?: TypeDonutTooltipProps[\"icon\"];\n numberFormat?: TypeDonutChartProps[\"numberFormat\"];\n onClick?: TypeDonutChartProps[\"onClick\"];\n tooltipClickLabel?: TypeDonutChartProps[\"tooltipClickLabel\"];\n}>;\n\nexport const DonutChartTooltip = memo<TypeDonutChartTooltipProps>(\n function DonutChartTooltip({\n color,\n name,\n numberLocale,\n percent,\n textLocale,\n value,\n currency,\n icon,\n numberFormat,\n onClick,\n tooltipClickLabel,\n }: TypeDonutChartTooltipProps) {\n const rows = [\n {\n cells: [\n {\n content: (\n <ChartLegendLabel color={color}>\n <ChartLegendLabelContentWithIcon icon={icon}>\n <Text aria-label={`${name}: `}>{name}</Text>\n </ChartLegendLabelContentWithIcon>\n </ChartLegendLabel>\n ),\n },\n {\n content: (\n <Box display=\"inline-flex\" alignItems=\"center\" gap={350}>\n <Numeral\n number={percent}\n format=\"percent\"\n abbreviate={false}\n locale={numberLocale as string}\n />\n <Text fontWeight=\"semibold\">\n {numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={value} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={value}\n />\n )}\n </Text>\n </Box>\n ),\n align: \"right\",\n },\n ],\n },\n ];\n\n return (\n <ChartTooltip>\n <ChartTooltipTable rows={rows as TypeChartTooltipTableProps[\"rows\"]} />\n {onClick && tooltipClickLabel ? (\n <ChartTooltipFooter>\n {typeof tooltipClickLabel === \"string\" ? (\n <Box display=\"flex\" alignItems=\"center\" gap={300}>\n <Icon name=\"hand-pointer-clicking-outline\" color=\"icon.base\" />\n <Text color=\"text.subtext\" fontSize={200}>\n {tooltipClickLabel}\n </Text>\n </Box>\n ) : (\n tooltipClickLabel\n )}\n </ChartTooltipFooter>\n ) : null}\n </ChartTooltip>\n );\n }\n);\n","import type { TooltipFormatterContextObject } from \"highcharts\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type {\n TypeDonutChartProps,\n TypeDonutChartTooltipProps,\n} from \"../DonutChart\";\n\ntype TypeTransformDonutChartTooltipDataProps = Readonly<{\n context: TooltipFormatterContextObject;\n data: TypeDonutChartProps[\"data\"];\n}>;\ntype TypeTransformDonutChartTooltipDataReturn = TypeDonutChartTooltipProps;\n\nexport const transformDonutChartTooltipData = ({\n context,\n data,\n}: TypeTransformDonutChartTooltipDataProps): TypeTransformDonutChartTooltipDataReturn => {\n const colorIndex = context.colorIndex;\n\n return {\n color:\n data[colorIndex]?.styles?.color ??\n theme.colors.DATAVIZ_COLORS_LIST[colorIndex] ??\n \"\",\n ...(data[colorIndex]?.icon ? { icon: data[colorIndex]?.icon } : {}),\n name: context.key as string,\n percent: context.percentage,\n value: context.y as number,\n };\n};\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Duration } from \"@sproutsocial/seeds-react-duration\";\nimport { Numeral } from \"@sproutsocial/seeds-react-numeral\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type { TypeDonutChartProps } from \"..\";\nimport { ChartTable, type TypeChartTableProps } from \"../../ChartTable\";\nimport { ChartLegendLabel } from \"../../ChartLegend/components/ChartLegendLabel\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\nexport type TypeDonutChartLegendTableProps = Readonly<{\n data: TypeDonutChartProps[\"data\"];\n numberLocale: TypeDonutChartProps[\"numberLocale\"];\n textLocale: TypeDonutChartProps[\"textLocale\"];\n totalLabel: React.ReactNode;\n // optional\n currency?: TypeDonutChartProps[\"currency\"];\n numberFormat?: TypeDonutChartProps[\"numberFormat\"];\n}>;\n\nexport const DonutChartLegendTable = memo<TypeDonutChartLegendTableProps>(\n function DonutChartLegendTable({\n data,\n numberLocale = \"en-us\",\n textLocale = \"en-us\",\n totalLabel,\n // optional\n currency = \"USD\",\n numberFormat = \"decimal\",\n }: TypeDonutChartLegendTableProps) {\n const total = data.reduce(\n (accumulator, dataItem) => accumulator + dataItem.value,\n 0\n );\n\n const rows = data.map((dataPoint, index) => {\n const { name, icon, styles, value } = dataPoint;\n const color = styles?.color || theme.colors.DATAVIZ_COLORS_LIST[index];\n\n return {\n cells: [\n {\n content: (\n <ChartLegendLabel color={color}>\n <ChartLegendLabelContentWithIcon icon={icon}>\n {name}\n </ChartLegendLabelContentWithIcon>\n </ChartLegendLabel>\n ),\n },\n {\n content: (\n <Box display=\"inline-flex\" alignItems=\"center\" gap={350}>\n <Text color=\"text.body\">\n <Numeral\n abbreviate={false}\n format=\"percent\"\n locale={numberLocale as string}\n number={(value / total) * 100}\n />\n </Text>\n <Text color=\"text.body\" fontWeight=\"semibold\">\n {numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={value} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={value}\n />\n )}\n </Text>\n </Box>\n ),\n align: \"right\",\n },\n ],\n };\n });\n\n const totalRow = [\n {\n cells: [\n {\n content: (\n <Text fontWeight=\"semibold\" color=\"text.headline\">\n {totalLabel}\n </Text>\n ),\n },\n {\n content: (\n <Text color=\"text.body\" fontWeight=\"bold\">\n {numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={total} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={total}\n />\n )}\n </Text>\n ),\n align: \"right\",\n },\n ],\n isAppendedRow: true,\n },\n ];\n\n return (\n <ChartTable\n rows={[...rows, ...totalRow] as TypeChartTableProps[\"rows\"]}\n />\n );\n }\n);\n","import { memo, type ReactNode } from \"react\";\nimport Highcharts, { type AnnotationsOptions } from \"highcharts\";\nimport { HighchartsReact } from \"highcharts-react-official\";\nimport highchartsAccessibility from \"highcharts/modules/accessibility\";\nimport highchartsAnnotations from \"highcharts/modules/annotations\";\nimport styled from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\n\nimport { LineChartLegend } from \"./components/LineChartLegend\";\nimport { LineChartTooltip } from \"./components/LineChartTooltip\";\n\nimport { ChartTooltipPortal } from \"../ChartTooltip/components/ChartTooltipPortal\";\nimport { transformTimeSeriesTooltipData } from \"../../helpers\";\nimport { useTimeSeriesChartOptions } from \"../../hooks\";\nimport { GlobalChartStyleOverrides, lineChartStyles } from \"../../styles\";\nimport type {\n TypeChartDataPoint,\n TypeChartDataStyles,\n TypeChartNumberFormat,\n TypeChartStyleColor,\n TypeChartStylePattern,\n TypeChartTimeFormat,\n TypeChartTooltipDateFormatter,\n TypeChartTooltipProps,\n TypeChartYAxisLabelFormatter,\n TypeChartXAnnotations,\n} from \"../../types\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\nimport { ChartXAnnotationMarkerPortal } from \"../ChartXAnnotationMarker/components/ChartXAnnotationMarkerPortal\";\n\n// init modules\nhighchartsAccessibility(Highcharts);\nhighchartsAnnotations(Highcharts);\n\n// styled components\nconst StyledBox = styled(Box)`\n ${lineChartStyles}\n`;\n\n// types\nexport type TypeLineChartProps = Readonly<{\n data: ReadonlyArray<\n Readonly<{\n name: string;\n points: ReadonlyArray<TypeChartDataPoint>;\n // optional\n icon?: ReactNode;\n styles?: TypeChartDataStyles &\n Readonly<{ pattern?: TypeChartStylePattern }>;\n }>\n >;\n invalidNumberLabel: ReactNode;\n numberLocale: Intl.LocalesArgument;\n textLocale: Intl.LocalesArgument;\n tooltipDateFormatter: TypeChartTooltipDateFormatter;\n // optional\n currency?: string;\n disableTooltips?: boolean;\n numberFormat?: TypeChartNumberFormat;\n tooltip?: (_props: TypeChartTooltipProps) => ReactNode;\n yAxisLabelFormatter?: TypeChartYAxisLabelFormatter;\n onClick?: (_props: Readonly<{ x: number }>) => void;\n tooltipClickLabel?: ReactNode;\n timeFormat?: TypeChartTimeFormat;\n timezone?: string;\n xAnnotations?: TypeChartXAnnotations;\n xAxisLabelFormatter?: (_params: {\n textLocale: Intl.LocalesArgument;\n tickPositions: number[];\n unitName: string;\n value: string | number;\n timeFormat?: string;\n }) => string;\n}>;\n\n/**\n * @deprecated Use the v2 component instead:\n *\n * ```ts\n * import { LineAreaChart } from \"@sproutsocial/seeds-react-data-viz/line-area\";\n * ```\n *\n * `LineAreaChart` (with `variant=\"line\"` or `\"spline\"`) is built on the shared\n * v2 chart base — see `charts/README.md` for the architecture. The v2 prop shape\n * differs from this legacy component and v2 does not yet cover every legacy\n * feature (locale-aware tooltips, currency/number formatters). Migrate when ready;\n * Claude-assisted migration guidance lands with the CE-9 codemod.\n */\nexport const LineChart = memo<TypeLineChartProps>(function LineChart(\n props: TypeLineChartProps\n) {\n const { data } = props;\n\n return data.length === 0 ? null : <LineChartWithData {...props} />;\n});\n\nconst LineChartWithData = memo<TypeLineChartProps>(function LineChartWithData({\n data,\n invalidNumberLabel,\n numberLocale = \"en-us\",\n textLocale = \"en-us\",\n tooltipDateFormatter,\n // optional\n currency = \"USD\",\n disableTooltips = false,\n numberFormat = \"decimal\",\n tooltip,\n yAxisLabelFormatter,\n onClick,\n tooltipClickLabel,\n timeFormat = \"12\",\n timezone = \"UTC\",\n xAnnotations,\n xAxisLabelFormatter,\n}: TypeLineChartProps) {\n const { options, chart, callback } = useTimeSeriesChartOptions({\n currency,\n data,\n disableTooltips,\n numberFormat,\n numberLocale,\n seriesType: \"spline\",\n textLocale,\n yAxisLabelFormatter,\n onClick,\n timeFormat,\n timezone,\n xAnnotations,\n xAxisLabelFormatter,\n });\n\n const { colors, patterns } = data.reduce(\n (acc, item, index) => {\n acc.colors.push(\n item.styles?.color ?? theme.colors.DATAVIZ_COLORS_LIST[index] ?? \"\"\n );\n acc.patterns.push(item.styles?.pattern ?? \"solid\");\n return acc;\n },\n {\n colors: [] as TypeChartStyleColor[],\n patterns: [] as TypeChartStylePattern[],\n }\n );\n\n return (\n <>\n <GlobalChartStyleOverrides />\n <StyledBox\n $colors={colors}\n $patterns={patterns}\n $hasOnClick={Boolean(onClick)}\n bg=\"container.background.base\"\n >\n <HighchartsReact\n highcharts={Highcharts}\n options={options}\n callback={callback}\n />\n {chart && chart.annotations?.length ? (\n <ChartXAnnotationMarkerPortal\n xAnnotations={xAnnotations}\n annotationContext={chart.annotations?.[0] as AnnotationsOptions}\n chartContainer={chart.container}\n />\n ) : null}\n {chart && !disableTooltips ? (\n <ChartTooltipPortal\n chart={chart}\n renderContent={(context) => {\n const tooltipData = transformTimeSeriesTooltipData({\n context,\n data,\n });\n const x = context.x as number;\n\n const xAnnotationDetails = xAnnotations?.[x]?.details;\n\n return tooltip ? (\n tooltip({ data: tooltipData, x })\n ) : (\n <LineChartTooltip\n currency={currency}\n data={tooltipData}\n invalidNumberLabel={invalidNumberLabel}\n numberFormat={numberFormat}\n numberLocale={numberLocale}\n textLocale={textLocale}\n tooltipDateFormatter={tooltipDateFormatter}\n onClick={onClick}\n tooltipClickLabel={tooltipClickLabel}\n x={x}\n xAnnotationDetails={xAnnotationDetails}\n />\n );\n }}\n />\n ) : null}\n <Box mt={350}>\n <LineChartLegend data={data} />\n </Box>\n </StyledBox>\n </>\n );\n});\n","import { memo } from \"react\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type { TypeLineChartProps } from \"../LineChart\";\nimport { ChartLegend, type TypeChartLegendProps } from \"../../ChartLegend\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\n// exported for testing\nexport const getLineChartLegendLabels = ({\n data,\n}: Readonly<{\n data: TypeLineChartProps[\"data\"];\n}>): TypeChartLegendProps[\"legendLabels\"] => {\n return data.map((series, index) => ({\n content: (\n <ChartLegendLabelContentWithIcon icon={series.icon}>\n {series.name}\n </ChartLegendLabelContentWithIcon>\n ),\n color: series.styles?.color || theme.colors.DATAVIZ_COLORS_LIST[index],\n }));\n};\n\ntype TypeLineChartLegendProps = Readonly<{\n data: TypeLineChartProps[\"data\"];\n}>;\n\nexport const LineChartLegend = memo<TypeLineChartLegendProps>(\n function LineChartLegend({ data }: TypeLineChartLegendProps) {\n return <ChartLegend legendLabels={getLineChartLegendLabels({ data })} />;\n }\n);\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Duration } from \"@sproutsocial/seeds-react-duration\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Numeral } from \"@sproutsocial/seeds-react-numeral\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\n\nimport type { TypeLineChartProps } from \"../LineChart\";\n\nimport {\n ChartTooltip,\n ChartTooltipFooter,\n ChartTooltipTable,\n ChartTooltipTitle,\n type TypeChartTooltipTableProps,\n} from \"../../ChartTooltip\";\nimport type {\n TypeChartTooltipProps,\n TypeChartXAnnotationsDetails,\n} from \"../../../types\";\nimport { ChartLegendLabel } from \"../../ChartLegend/components/ChartLegendLabel\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\nexport type TypeLineChartTooltipProps = Readonly<{\n data: TypeChartTooltipProps[\"data\"];\n invalidNumberLabel: TypeLineChartProps[\"invalidNumberLabel\"];\n numberLocale: TypeLineChartProps[\"numberLocale\"];\n textLocale: TypeLineChartProps[\"textLocale\"];\n tooltipDateFormatter: TypeLineChartProps[\"tooltipDateFormatter\"];\n x: TypeChartTooltipProps[\"x\"];\n // optional\n currency?: TypeLineChartProps[\"currency\"];\n numberFormat?: TypeLineChartProps[\"numberFormat\"];\n onClick?: TypeLineChartProps[\"onClick\"];\n tooltipClickLabel?: TypeLineChartProps[\"tooltipClickLabel\"];\n xAnnotationDetails?: TypeChartXAnnotationsDetails;\n}>;\n\nexport const LineChartTooltip = memo<TypeLineChartTooltipProps>(\n function LineChartTooltip({\n data,\n invalidNumberLabel,\n numberLocale,\n textLocale,\n tooltipDateFormatter,\n x,\n // optional\n currency = \"USD\",\n numberFormat = \"decimal\",\n onClick,\n tooltipClickLabel,\n xAnnotationDetails,\n }: TypeLineChartTooltipProps) {\n const rows = data.map(({ color, icon, name, value }) => {\n return {\n cells: [\n {\n content: (\n <ChartLegendLabel color={color}>\n <ChartLegendLabelContentWithIcon icon={icon}>\n <Text aria-label={`${name}: `}>{name}</Text>\n </ChartLegendLabelContentWithIcon>\n </ChartLegendLabel>\n ),\n },\n {\n content:\n value === null && invalidNumberLabel ? (\n <Text>{invalidNumberLabel}</Text>\n ) : numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={value} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={value}\n />\n ),\n align: \"right\",\n },\n ],\n };\n });\n\n return (\n <ChartTooltip>\n {xAnnotationDetails ? xAnnotationDetails() : undefined}\n <ChartTooltipTitle>{tooltipDateFormatter({ x })}</ChartTooltipTitle>\n <ChartTooltipTable rows={rows as TypeChartTooltipTableProps[\"rows\"]} />\n {onClick && tooltipClickLabel ? (\n <ChartTooltipFooter>\n {typeof tooltipClickLabel === \"string\" ? (\n <Box display=\"flex\" alignItems=\"center\" gap={300}>\n <Icon name=\"hand-pointer-clicking-outline\" color=\"icon.base\" />\n <Text color=\"text.subtext\" fontSize={200}>\n {tooltipClickLabel}\n </Text>\n </Box>\n ) : (\n tooltipClickLabel\n )}\n </ChartTooltipFooter>\n ) : null}\n </ChartTooltip>\n );\n }\n);\n","import { memo } from \"react\";\nimport Highcharts, { type AnnotationsOptions } from \"highcharts\";\nimport { HighchartsReact } from \"highcharts-react-official\";\nimport highchartsAccessibility from \"highcharts/modules/accessibility\";\nimport highchartsAnnotations from \"highcharts/modules/annotations\";\nimport styled from \"styled-components\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\n\nimport { VerticalBarChartLegend } from \"./components/VerticalBarChartLegend\";\nimport { VerticalBarChartTooltip } from \"./components/VerticalBarChartTooltip\";\n\nimport { ChartTooltipPortal } from \"../ChartTooltip/components/ChartTooltipPortal\";\nimport {\n transformTimeSeriesTooltipData,\n isHourlyTimeData,\n isCategoricalHourData,\n} from \"../../helpers\";\nimport { useTimeSeriesChartOptions } from \"../../hooks\";\nimport { GlobalChartStyleOverrides } from \"../../styles\";\nimport type {\n TypeChartStyleColor,\n TypeChartStylePattern,\n TypeVerticalBarChartProps,\n} from \"../../types\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\nimport { ChartXAnnotationMarkerPortal } from \"../ChartXAnnotationMarker/components/ChartXAnnotationMarkerPortal\";\nimport { verticalBarChartStyles } from \"./styles\";\nimport { VERTICAL_BAR_CHART_DEFAULT_SERIES_LIMIT } from \"../../constants\";\n\n// init modules\nhighchartsAccessibility(Highcharts);\nhighchartsAnnotations(Highcharts);\n\n// styled components\nconst StyledBox = styled(Box)`\n ${verticalBarChartStyles}\n`;\n\n/**\n * @deprecated Use the v2 component instead:\n *\n * ```ts\n * import { VerticalBarChart } from \"@sproutsocial/seeds-react-data-viz/bar\";\n * ```\n *\n * The v2 component is built on the shared chart base. See `charts/README.md`\n * for the architecture. The v2 prop shape differs from this legacy component\n * and v2 does not yet cover every legacy feature (locale-aware tooltips,\n * formatters, interactions, annotations, legend). Use the Claude-assisted\n * migration skill at\n * `seeds-tooling/seeds-codemod-cli/src/usage-patterns/VERTICALBARCHARTV1_PATTERNS.md`\n * — it documents the prop mapping and tells you when to wait rather than\n * force-migrate.\n */\nexport const VerticalBarChart = memo<TypeVerticalBarChartProps>(\n function VerticalBarChart(props: TypeVerticalBarChartProps) {\n const { data, showSeriesLimitWarning = true } = props;\n const seriesLimit =\n props.seriesLimit ?? VERTICAL_BAR_CHART_DEFAULT_SERIES_LIMIT;\n const isSeriesLimitOverridden = props.seriesLimit !== undefined;\n\n if (data.length === 0) {\n return null;\n }\n\n let chartData = data;\n if (data.length > seriesLimit) {\n if (!isSeriesLimitOverridden && showSeriesLimitWarning) {\n console.warn(\n `VerticalBarChart: Maximum number of series (${seriesLimit}) exceeded. Only the first ${seriesLimit} series will be displayed.`\n );\n }\n chartData = data.slice(0, seriesLimit);\n }\n\n return <VerticalBarChartWithData {...props} data={chartData} />;\n }\n);\n\nconst VerticalBarChartWithData = memo<TypeVerticalBarChartProps>(\n function VerticalBarChartWithData({\n data,\n invalidNumberLabel,\n numberLocale = \"en-us\",\n textLocale = \"en-us\",\n tooltipDateFormatter,\n // optional\n currency = \"USD\",\n numberFormat = \"decimal\",\n tooltip,\n yAxisLabelFormatter,\n onClick,\n tooltipClickLabel,\n timeFormat = \"12\",\n xAnnotations,\n xAxisLabelFormatter,\n }: TypeVerticalBarChartProps) {\n // Automatically use time-of-day formatter if data is hourly (timestamp) or categorical hour data\n const shouldUseTimeFormatter =\n isHourlyTimeData(data) || isCategoricalHourData(data);\n\n const autoTimeXAxisLabelFormatter = ({\n value,\n timeFormat,\n }: {\n textLocale: Intl.LocalesArgument;\n tickPositions: number[];\n unitName: string;\n value: string | number;\n timeFormat?: string;\n }) => {\n // Handle categorical hour data (strings)\n if (typeof value === \"string\") {\n // Handle 12-hour format (e.g., \"12 AM\", \"1 PM\")\n const hour12Match = value.match(/^(\\d{1,2}) (AM|PM)$/);\n if (hour12Match) {\n const [, hourStr = \"0\", period = \"\"] = hour12Match;\n const hour = parseInt(hourStr, 10);\n if (hour === 12) return `<span>12</span><span>${period}</span>`;\n return `<span>${hour}</span>`;\n }\n\n // Handle 24-hour format (e.g., \"00:00\", \"13:00\", \"23:00\")\n const hour24Match = value.match(/^([01]?\\d|2[0-3]):([0-5]\\d)$/);\n if (hour24Match) {\n const [, hourStr = \"0\"] = hour24Match;\n const hour = parseInt(hourStr, 10);\n\n if (timeFormat === \"24\") {\n // For 24-hour format, just show the hour padded to 2 digits\n return `<span>${hour.toString().padStart(2, \"0\")}</span>`;\n } else {\n // For 12-hour display of 24-hour data, convert to 12-hour\n const displayHour = hour % 12 === 0 ? 12 : hour % 12;\n const period = hour < 12 ? \"AM\" : \"PM\";\n if (hour === 0 || hour === 12)\n return `<span>12</span><span>${period}</span>`;\n return `<span>${displayHour}</span>`;\n }\n }\n\n // Fallback: return original value if not recognized hour format\n return value;\n }\n\n // Handle numerical timestamp data\n const numValue = typeof value === \"string\" ? Number(value) : value;\n if (isNaN(numValue)) return \"\";\n const date = new Date(numValue);\n const hour = date.getUTCHours();\n const displayHour = hour % 12 === 0 ? 12 : hour % 12;\n if (hour === 0) return \"<span>12</span><span>AM</span>\";\n if (hour === 12) return \"<span>12</span><span>PM</span>\";\n return `<span>${displayHour}</span>`;\n };\n\n const resolvedXAxisLabelFormatter =\n shouldUseTimeFormatter && !xAxisLabelFormatter\n ? (params: {\n textLocale: Intl.LocalesArgument;\n tickPositions: number[];\n unitName: string;\n value: string | number;\n timeFormat?: string;\n }) => autoTimeXAxisLabelFormatter({ ...params, timeFormat })\n : xAxisLabelFormatter;\n\n const { options, chart, callback } = useTimeSeriesChartOptions({\n currency,\n data,\n numberFormat,\n numberLocale,\n // Although we call this chart vertical bar chart, highcharts uses the term \"column\"\n seriesType: \"column\",\n textLocale,\n yAxisLabelFormatter,\n onClick,\n timeFormat,\n xAnnotations,\n xAxisLabelFormatter: resolvedXAxisLabelFormatter,\n });\n\n const { colors } = data.reduce(\n (\n acc: {\n colors: TypeChartStyleColor[];\n patterns: TypeChartStylePattern[];\n },\n item,\n index\n ) => {\n acc.colors.push(\n item.styles?.color ?? theme.colors.DATAVIZ_COLORS_LIST[index] ?? \"\"\n );\n acc.patterns.push(item.styles?.pattern ?? \"solid\");\n return acc;\n },\n {\n colors: [] as TypeChartStyleColor[],\n patterns: [] as TypeChartStylePattern[],\n }\n );\n\n return (\n <>\n <GlobalChartStyleOverrides />\n <StyledBox\n $colors={colors}\n $hasOnClick={Boolean(onClick)}\n bg=\"container.background.base\"\n >\n <HighchartsReact\n highcharts={Highcharts}\n options={options}\n callback={callback}\n />\n {chart && chart.annotations?.length ? (\n <ChartXAnnotationMarkerPortal\n xAnnotations={xAnnotations}\n annotationContext={chart.annotations?.[0] as AnnotationsOptions}\n chartContainer={chart.container}\n />\n ) : null}\n {chart ? (\n <ChartTooltipPortal\n chart={chart}\n renderContent={(context) => {\n const tooltipData = transformTimeSeriesTooltipData({\n context,\n data,\n });\n const x = context.x as number | string;\n\n const xAnnotationDetails =\n typeof x === \"number\"\n ? xAnnotations?.[x]?.details\n : undefined;\n\n return tooltip ? (\n tooltip({ data: tooltipData, x })\n ) : (\n <VerticalBarChartTooltip\n currency={currency}\n data={tooltipData}\n invalidNumberLabel={invalidNumberLabel}\n numberFormat={numberFormat}\n numberLocale={numberLocale}\n textLocale={textLocale}\n tooltipDateFormatter={tooltipDateFormatter}\n onClick={onClick}\n tooltipClickLabel={tooltipClickLabel}\n x={x}\n xAnnotationDetails={xAnnotationDetails}\n />\n );\n }}\n />\n ) : null}\n <Box mt={350}>\n <VerticalBarChartLegend data={data} />\n </Box>\n </StyledBox>\n </>\n );\n }\n);\n","import { memo } from \"react\";\nimport { theme } from \"@sproutsocial/seeds-react-theme\";\n\nimport type { TypeVerticalBarChartProps } from \"../../../types\";\nimport { ChartLegend, type TypeChartLegendProps } from \"../../ChartLegend\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\n// exported for testing\nexport const getVerticalBarChartLegendLabels = ({\n data,\n}: Readonly<{\n data: TypeVerticalBarChartProps[\"data\"];\n}>): TypeChartLegendProps[\"legendLabels\"] => {\n return data.map((series, index) => ({\n content: (\n <ChartLegendLabelContentWithIcon icon={series.icon}>\n {series.name}\n </ChartLegendLabelContentWithIcon>\n ),\n color: series.styles?.color || theme.colors.DATAVIZ_COLORS_LIST[index],\n }));\n};\n\ntype VerticalBarChartLegendProps = Readonly<{\n data: TypeVerticalBarChartProps[\"data\"];\n}>;\n\nexport const VerticalBarChartLegend = memo<VerticalBarChartLegendProps>(\n function VerticalbarChartLegend({ data }: VerticalBarChartLegendProps) {\n return (\n <ChartLegend legendLabels={getVerticalBarChartLegendLabels({ data })} />\n );\n }\n);\n","import { memo } from \"react\";\nimport { Box } from \"@sproutsocial/seeds-react-box\";\nimport { Duration } from \"@sproutsocial/seeds-react-duration\";\nimport { Icon } from \"@sproutsocial/seeds-react-icon\";\nimport { Numeral } from \"@sproutsocial/seeds-react-numeral\";\nimport { Text } from \"@sproutsocial/seeds-react-text\";\n\nimport type { TypeVerticalBarChartProps } from \"../../../types\";\n\nimport {\n ChartTooltip,\n ChartTooltipFooter,\n ChartTooltipTable,\n ChartTooltipTitle,\n type TypeChartTooltipTableProps,\n} from \"../../ChartTooltip\";\nimport type {\n TypeChartTooltipProps,\n TypeChartXAnnotationsDetails,\n} from \"../../../types\";\nimport { ChartLegendLabel } from \"../../ChartLegend/components/ChartLegendLabel\";\nimport { ChartLegendLabelContentWithIcon } from \"../../ChartLegend/components/ChartLegendLabelContentWithIcon\";\n\nexport type TypeVerticalBarChartTooltipProps = Readonly<{\n data: TypeChartTooltipProps[\"data\"];\n invalidNumberLabel: TypeVerticalBarChartProps[\"invalidNumberLabel\"];\n numberLocale: TypeVerticalBarChartProps[\"numberLocale\"];\n textLocale: TypeVerticalBarChartProps[\"textLocale\"];\n tooltipDateFormatter: TypeVerticalBarChartProps[\"tooltipDateFormatter\"];\n x: TypeChartTooltipProps[\"x\"];\n // optional\n currency?: TypeVerticalBarChartProps[\"currency\"];\n numberFormat?: TypeVerticalBarChartProps[\"numberFormat\"];\n onClick?: TypeVerticalBarChartProps[\"onClick\"];\n tooltipClickLabel?: TypeVerticalBarChartProps[\"tooltipClickLabel\"];\n xAnnotationDetails?: TypeChartXAnnotationsDetails;\n}>;\n\nexport const VerticalBarChartTooltip = memo<TypeVerticalBarChartTooltipProps>(\n function VerticalBarChartTooltip({\n data,\n invalidNumberLabel,\n numberLocale,\n textLocale,\n tooltipDateFormatter,\n x,\n // optional\n currency = \"USD\",\n numberFormat = \"decimal\",\n onClick,\n tooltipClickLabel,\n xAnnotationDetails,\n }: TypeVerticalBarChartTooltipProps) {\n const rows = data.map(({ color, icon, name, value }) => {\n return {\n cells: [\n {\n content: (\n <ChartLegendLabel color={color}>\n <ChartLegendLabelContentWithIcon icon={icon}>\n <Text aria-label={`${name}: `}>{name}</Text>\n </ChartLegendLabelContentWithIcon>\n </ChartLegendLabel>\n ),\n },\n {\n content:\n value === null && invalidNumberLabel ? (\n <Text>{invalidNumberLabel}</Text>\n ) : numberFormat === \"duration\" ? (\n <Duration locale={textLocale} milliseconds={value} />\n ) : (\n <Numeral\n abbreviate={false}\n currency={currency}\n format={numberFormat}\n locale={numberLocale as string}\n number={value}\n />\n ),\n align: \"right\",\n },\n ],\n };\n });\n\n return (\n <ChartTooltip>\n {xAnnotationDetails ? xAnnotationDetails() : undefined}\n <ChartTooltipTitle>{tooltipDateFormatter({ x })}</ChartTooltipTitle>\n <ChartTooltipTable rows={rows as TypeChartTooltipTableProps[\"rows\"]} />\n {onClick && tooltipClickLabel ? (\n <ChartTooltipFooter>\n {typeof tooltipClickLabel === \"string\" ? (\n <Box display=\"flex\" alignItems=\"center\" gap={300}>\n <Icon name=\"hand-pointer-clicking-outline\" color=\"icon.base\" />\n <Text color=\"text.subtext\" fontSize={200}>\n {tooltipClickLabel}\n </Text>\n </Box>\n ) : (\n tooltipClickLabel\n )}\n </ChartTooltipFooter>\n ) : null}\n </ChartTooltip>\n );\n }\n);\n","import { timeSeriesChartStyles } from \"../../styles/chartStyles\";\nimport { css } from \"styled-components\";\nimport type {\n TypeChartStyleColor,\n TypeChartStyleHasOnClick,\n} from \"../../types\";\n\n// options that should apply to line charts\nexport const verticalBarChartStyles = css<\n Readonly<{\n $colors: ReadonlyArray<TypeChartStyleColor>;\n $hasOnClick: TypeChartStyleHasOnClick;\n }>\n>`\n ${timeSeriesChartStyles}\n\n /*\n When the chart container is hovered, reduce the opacity of all columns.\n Then, for the column that is being hovered, restore its opacity.\n This gives the effect of fading out the non-hovered columns.\n */\n .highcharts-container:hover .highcharts-point {\n fill-opacity: 0.3;\n }\n\n .highcharts-point.column-hover {\n fill-opacity: 1 !important;\n }\n`;\n"],"mappings":"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","names":["memo","styled","Box","theme","jsx","theme","AreaChartLegend","memo","jsx","memo","AreaChartTooltip","memo","jsx","memo","ChartXAnnotationMarkerPortal","useState","yAxisLabelFormatter","xAxisLabelFormatter","useState","baseChartOptions","theme","Fragment","jsx","jsxs","styled","Box","memo","AreaChart","AreaChartWithData","yAxisLabelFormatter","memo","Box","Icon","Text","jsx","jsxs","memo","ChartXAnnotationDetails","Box","Icon","Text","memo","Box","Icon","jsx","jsxs","ChartXAnnotationMarker","memo","useState","useEffect","useCallback","Highcharts","HighchartsReact","highchartsAccessibility","styled","Box","memo","theme","jsx","theme","memo","DonutChartLegend","memo","Box","Duration","Icon","Numeral","Text","jsx","jsxs","memo","DonutChartTooltip","Text","Box","Numeral","Duration","Icon","theme","theme","Fragment","jsx","jsxs","highchartsAccessibility","Highcharts","StyledBox","styled","Box","memo","DonutChart","DonutChartWithData","useState","useCallback","useEffect","HighchartsReact","memo","Box","Duration","Numeral","Text","theme","jsx","jsxs","memo","DonutChartLegendTable","theme","Box","Text","Numeral","Duration","memo","Highcharts","HighchartsReact","highchartsAccessibility","highchartsAnnotations","styled","Box","memo","theme","jsx","theme","memo","LineChartLegend","memo","Box","Duration","Icon","Numeral","Text","jsx","jsxs","memo","LineChartTooltip","Text","Duration","Numeral","Box","Icon","theme","Fragment","jsx","jsxs","highchartsAccessibility","Highcharts","highchartsAnnotations","StyledBox","styled","Box","memo","LineChart","LineChartWithData","yAxisLabelFormatter","xAxisLabelFormatter","theme","HighchartsReact","memo","Highcharts","HighchartsReact","highchartsAccessibility","highchartsAnnotations","styled","Box","memo","theme","jsx","theme","memo","memo","Box","Duration","Icon","Numeral","Text","jsx","jsxs","memo","VerticalBarChartTooltip","Text","Duration","Numeral","Box","Icon","theme","Fragment","jsx","jsxs","highchartsAccessibility","Highcharts","highchartsAnnotations","StyledBox","styled","Box","memo","VerticalBarChart","VerticalBarChartWithData","yAxisLabelFormatter","xAxisLabelFormatter","timeFormat","hour","displayHour","theme","HighchartsReact"]}