@automattic/charts 0.58.0 → 0.59.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.
- package/CHANGELOG.md +20 -0
- package/README.md +7 -54
- package/dist/index.cjs +9606 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +20 -25
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +1612 -33
- package/dist/index.d.ts +1612 -33
- package/dist/index.js +9640 -56
- package/dist/index.js.map +1 -1
- package/package.json +8 -125
- package/src/charts/bar-chart/bar-chart.module.scss +0 -5
- package/src/charts/bar-chart/bar-chart.tsx +131 -137
- package/src/charts/leaderboard-chart/leaderboard-chart.tsx +23 -40
- package/src/charts/line-chart/line-chart.module.scss +0 -5
- package/src/charts/line-chart/line-chart.tsx +190 -183
- package/src/charts/line-chart/private/line-chart-annotations-overlay.tsx +1 -2
- package/src/charts/pie-chart/pie-chart.module.scss +2 -10
- package/src/charts/pie-chart/pie-chart.tsx +198 -199
- package/src/charts/pie-chart/test/composition-api.test.tsx +3 -3
- package/src/charts/pie-chart/test/pie-chart.test.tsx +42 -35
- package/src/charts/pie-semi-circle-chart/pie-semi-circle-chart.module.scss +2 -8
- package/src/charts/pie-semi-circle-chart/pie-semi-circle-chart.tsx +155 -155
- package/src/charts/pie-semi-circle-chart/test/pie-semi-circle-chart.test.tsx +25 -25
- package/src/charts/private/chart-layout/chart-layout.module.scss +7 -0
- package/src/charts/private/chart-layout/chart-layout.tsx +106 -0
- package/src/charts/private/chart-layout/index.ts +2 -0
- package/src/charts/private/chart-layout/test/chart-layout.test.tsx +167 -0
- package/src/charts/private/single-chart-context/single-chart-context.tsx +2 -2
- package/src/charts/private/svg-empty-state/index.ts +1 -0
- package/src/charts/private/svg-empty-state/svg-empty-state.module.scss +7 -0
- package/src/charts/private/svg-empty-state/svg-empty-state.tsx +40 -0
- package/src/components/legend/hooks/test/use-chart-legend-items.test.tsx +12 -8
- package/src/components/legend/hooks/use-chart-legend-items.ts +12 -13
- package/src/components/legend/legend.tsx +33 -8
- package/src/components/legend/test/legend.test.tsx +93 -1
- package/src/hooks/index.ts +1 -0
- package/src/hooks/use-data-with-percentages.ts +24 -0
- package/src/hooks/use-interactive-legend-data.ts +18 -15
- package/src/index.ts +65 -2
- package/src/providers/chart-context/global-charts-provider.tsx +7 -1
- package/src/providers/chart-context/hooks/use-chart-registration.ts +2 -1
- package/src/providers/chart-context/types.ts +2 -2
- package/src/types.ts +27 -7
- package/src/utils/test/resolve-css-var.test.ts +2 -0
- package/dist/base-tooltip-DOq93wjU.d.cts +0 -38
- package/dist/base-tooltip-DOq93wjU.d.ts +0 -38
- package/dist/charts/bar-chart/index.cjs +0 -17
- package/dist/charts/bar-chart/index.cjs.map +0 -1
- package/dist/charts/bar-chart/index.css +0 -141
- package/dist/charts/bar-chart/index.css.map +0 -1
- package/dist/charts/bar-chart/index.d.cts +0 -36
- package/dist/charts/bar-chart/index.d.ts +0 -36
- package/dist/charts/bar-chart/index.js +0 -17
- package/dist/charts/bar-chart/index.js.map +0 -1
- package/dist/charts/bar-list-chart/index.cjs +0 -18
- package/dist/charts/bar-list-chart/index.cjs.map +0 -1
- package/dist/charts/bar-list-chart/index.css +0 -141
- package/dist/charts/bar-list-chart/index.css.map +0 -1
- package/dist/charts/bar-list-chart/index.d.cts +0 -92
- package/dist/charts/bar-list-chart/index.d.ts +0 -92
- package/dist/charts/bar-list-chart/index.js +0 -18
- package/dist/charts/bar-list-chart/index.js.map +0 -1
- package/dist/charts/conversion-funnel-chart/index.cjs +0 -11
- package/dist/charts/conversion-funnel-chart/index.cjs.map +0 -1
- package/dist/charts/conversion-funnel-chart/index.css +0 -157
- package/dist/charts/conversion-funnel-chart/index.css.map +0 -1
- package/dist/charts/conversion-funnel-chart/index.d.cts +0 -97
- package/dist/charts/conversion-funnel-chart/index.d.ts +0 -97
- package/dist/charts/conversion-funnel-chart/index.js +0 -11
- package/dist/charts/conversion-funnel-chart/index.js.map +0 -1
- package/dist/charts/geo-chart/index.cjs +0 -13
- package/dist/charts/geo-chart/index.cjs.map +0 -1
- package/dist/charts/geo-chart/index.css +0 -23
- package/dist/charts/geo-chart/index.css.map +0 -1
- package/dist/charts/geo-chart/index.d.cts +0 -67
- package/dist/charts/geo-chart/index.d.ts +0 -67
- package/dist/charts/geo-chart/index.js +0 -13
- package/dist/charts/geo-chart/index.js.map +0 -1
- package/dist/charts/leaderboard-chart/index.cjs +0 -21
- package/dist/charts/leaderboard-chart/index.cjs.map +0 -1
- package/dist/charts/leaderboard-chart/index.css +0 -160
- package/dist/charts/leaderboard-chart/index.css.map +0 -1
- package/dist/charts/leaderboard-chart/index.d.cts +0 -46
- package/dist/charts/leaderboard-chart/index.d.ts +0 -46
- package/dist/charts/leaderboard-chart/index.js +0 -21
- package/dist/charts/leaderboard-chart/index.js.map +0 -1
- package/dist/charts/line-chart/index.cjs +0 -17
- package/dist/charts/line-chart/index.cjs.map +0 -1
- package/dist/charts/line-chart/index.css +0 -213
- package/dist/charts/line-chart/index.css.map +0 -1
- package/dist/charts/line-chart/index.d.cts +0 -98
- package/dist/charts/line-chart/index.d.ts +0 -98
- package/dist/charts/line-chart/index.js +0 -17
- package/dist/charts/line-chart/index.js.map +0 -1
- package/dist/charts/pie-chart/index.cjs +0 -19
- package/dist/charts/pie-chart/index.cjs.map +0 -1
- package/dist/charts/pie-chart/index.css +0 -131
- package/dist/charts/pie-chart/index.css.map +0 -1
- package/dist/charts/pie-chart/index.d.cts +0 -91
- package/dist/charts/pie-chart/index.d.ts +0 -91
- package/dist/charts/pie-chart/index.js +0 -19
- package/dist/charts/pie-chart/index.js.map +0 -1
- package/dist/charts/pie-semi-circle-chart/index.cjs +0 -18
- package/dist/charts/pie-semi-circle-chart/index.cjs.map +0 -1
- package/dist/charts/pie-semi-circle-chart/index.css +0 -132
- package/dist/charts/pie-semi-circle-chart/index.css.map +0 -1
- package/dist/charts/pie-semi-circle-chart/index.d.cts +0 -88
- package/dist/charts/pie-semi-circle-chart/index.d.ts +0 -88
- package/dist/charts/pie-semi-circle-chart/index.js +0 -18
- package/dist/charts/pie-semi-circle-chart/index.js.map +0 -1
- package/dist/charts/sparkline/index.cjs +0 -18
- package/dist/charts/sparkline/index.cjs.map +0 -1
- package/dist/charts/sparkline/index.css +0 -230
- package/dist/charts/sparkline/index.css.map +0 -1
- package/dist/charts/sparkline/index.d.cts +0 -113
- package/dist/charts/sparkline/index.d.ts +0 -113
- package/dist/charts/sparkline/index.js +0 -18
- package/dist/charts/sparkline/index.js.map +0 -1
- package/dist/chunk-2A34OA5O.cjs +0 -51
- package/dist/chunk-2A34OA5O.cjs.map +0 -1
- package/dist/chunk-2I67QUIV.js +0 -895
- package/dist/chunk-2I67QUIV.js.map +0 -1
- package/dist/chunk-2ICEEQOC.js +0 -1071
- package/dist/chunk-2ICEEQOC.js.map +0 -1
- package/dist/chunk-4B7BL2DD.js +0 -120
- package/dist/chunk-4B7BL2DD.js.map +0 -1
- package/dist/chunk-4OXMTKAL.js +0 -401
- package/dist/chunk-4OXMTKAL.js.map +0 -1
- package/dist/chunk-ASLARV7L.cjs +0 -81
- package/dist/chunk-ASLARV7L.cjs.map +0 -1
- package/dist/chunk-B6NLZFRW.js +0 -617
- package/dist/chunk-B6NLZFRW.js.map +0 -1
- package/dist/chunk-BBAUQOW6.cjs +0 -120
- package/dist/chunk-BBAUQOW6.cjs.map +0 -1
- package/dist/chunk-BPYKWMI7.js +0 -194
- package/dist/chunk-BPYKWMI7.js.map +0 -1
- package/dist/chunk-CMMHCTBX.cjs +0 -373
- package/dist/chunk-CMMHCTBX.cjs.map +0 -1
- package/dist/chunk-CPPXJATQ.cjs +0 -1071
- package/dist/chunk-CPPXJATQ.cjs.map +0 -1
- package/dist/chunk-DKU775VC.js +0 -219
- package/dist/chunk-DKU775VC.js.map +0 -1
- package/dist/chunk-GRA7Y2ZG.cjs +0 -401
- package/dist/chunk-GRA7Y2ZG.cjs.map +0 -1
- package/dist/chunk-I2276W3I.cjs +0 -66
- package/dist/chunk-I2276W3I.cjs.map +0 -1
- package/dist/chunk-JJIMABHT.js +0 -351
- package/dist/chunk-JJIMABHT.js.map +0 -1
- package/dist/chunk-KJHWXOCZ.js +0 -421
- package/dist/chunk-KJHWXOCZ.js.map +0 -1
- package/dist/chunk-KRWGSOJ2.js +0 -91
- package/dist/chunk-KRWGSOJ2.js.map +0 -1
- package/dist/chunk-KXRWNFQJ.js +0 -51
- package/dist/chunk-KXRWNFQJ.js.map +0 -1
- package/dist/chunk-LTFH7SEG.js +0 -373
- package/dist/chunk-LTFH7SEG.js.map +0 -1
- package/dist/chunk-MUNOKLLE.js +0 -165
- package/dist/chunk-MUNOKLLE.js.map +0 -1
- package/dist/chunk-MXGLYWVP.cjs +0 -351
- package/dist/chunk-MXGLYWVP.cjs.map +0 -1
- package/dist/chunk-OP6PHB2U.js +0 -81
- package/dist/chunk-OP6PHB2U.js.map +0 -1
- package/dist/chunk-OYC34VTO.cjs +0 -3957
- package/dist/chunk-OYC34VTO.cjs.map +0 -1
- package/dist/chunk-PQL5I3F6.cjs +0 -421
- package/dist/chunk-PQL5I3F6.cjs.map +0 -1
- package/dist/chunk-REZTQ4PH.cjs +0 -488
- package/dist/chunk-REZTQ4PH.cjs.map +0 -1
- package/dist/chunk-TZRUHQOH.cjs +0 -91
- package/dist/chunk-TZRUHQOH.cjs.map +0 -1
- package/dist/chunk-UTYVIOWZ.js +0 -3957
- package/dist/chunk-UTYVIOWZ.js.map +0 -1
- package/dist/chunk-W2LDIX26.cjs +0 -165
- package/dist/chunk-W2LDIX26.cjs.map +0 -1
- package/dist/chunk-WSG64BVN.cjs +0 -219
- package/dist/chunk-WSG64BVN.cjs.map +0 -1
- package/dist/chunk-WTQYGUNF.js +0 -400
- package/dist/chunk-WTQYGUNF.js.map +0 -1
- package/dist/chunk-WYK7EL5R.cjs +0 -895
- package/dist/chunk-WYK7EL5R.cjs.map +0 -1
- package/dist/chunk-XC4KHJYX.cjs +0 -617
- package/dist/chunk-XC4KHJYX.cjs.map +0 -1
- package/dist/chunk-XVBH5XHE.cjs +0 -400
- package/dist/chunk-XVBH5XHE.cjs.map +0 -1
- package/dist/chunk-XWYZIFZW.js +0 -66
- package/dist/chunk-XWYZIFZW.js.map +0 -1
- package/dist/chunk-Y3NNQMAX.cjs +0 -194
- package/dist/chunk-Y3NNQMAX.cjs.map +0 -1
- package/dist/chunk-YAFQVVDI.js +0 -488
- package/dist/chunk-YAFQVVDI.js.map +0 -1
- package/dist/components/legend/index.cjs +0 -12
- package/dist/components/legend/index.cjs.map +0 -1
- package/dist/components/legend/index.css +0 -91
- package/dist/components/legend/index.css.map +0 -1
- package/dist/components/legend/index.d.cts +0 -37
- package/dist/components/legend/index.d.ts +0 -37
- package/dist/components/legend/index.js +0 -12
- package/dist/components/legend/index.js.map +0 -1
- package/dist/components/tooltip/index.cjs +0 -12
- package/dist/components/tooltip/index.cjs.map +0 -1
- package/dist/components/tooltip/index.css +0 -13
- package/dist/components/tooltip/index.css.map +0 -1
- package/dist/components/tooltip/index.d.cts +0 -71
- package/dist/components/tooltip/index.d.ts +0 -71
- package/dist/components/tooltip/index.js +0 -12
- package/dist/components/tooltip/index.js.map +0 -1
- package/dist/components/trend-indicator/index.cjs +0 -8
- package/dist/components/trend-indicator/index.cjs.map +0 -1
- package/dist/components/trend-indicator/index.css +0 -27
- package/dist/components/trend-indicator/index.css.map +0 -1
- package/dist/components/trend-indicator/index.d.cts +0 -44
- package/dist/components/trend-indicator/index.d.ts +0 -44
- package/dist/components/trend-indicator/index.js +0 -8
- package/dist/components/trend-indicator/index.js.map +0 -1
- package/dist/format-metric-value-MXm5DtQ_.d.cts +0 -24
- package/dist/format-metric-value-MXm5DtQ_.d.ts +0 -24
- package/dist/hooks/index.cjs +0 -29
- package/dist/hooks/index.cjs.map +0 -1
- package/dist/hooks/index.css +0 -9
- package/dist/hooks/index.css.map +0 -1
- package/dist/hooks/index.d.cts +0 -264
- package/dist/hooks/index.d.ts +0 -264
- package/dist/hooks/index.js +0 -29
- package/dist/hooks/index.js.map +0 -1
- package/dist/leaderboard-chart-BSbg0ufV.d.cts +0 -79
- package/dist/leaderboard-chart-odEYxxEC.d.ts +0 -79
- package/dist/legend-DFkosEvC.d.cts +0 -9
- package/dist/legend-DLswHhOk.d.ts +0 -9
- package/dist/providers/index.cjs +0 -21
- package/dist/providers/index.cjs.map +0 -1
- package/dist/providers/index.css +0 -9
- package/dist/providers/index.css.map +0 -1
- package/dist/providers/index.d.cts +0 -28
- package/dist/providers/index.d.ts +0 -28
- package/dist/providers/index.js +0 -21
- package/dist/providers/index.js.map +0 -1
- package/dist/themes-D0qc5JaW.d.cts +0 -67
- package/dist/themes-itO4Ht5g.d.ts +0 -67
- package/dist/types-B5f6XQ7Q.d.cts +0 -19
- package/dist/types-BsHooDbM.d.ts +0 -19
- package/dist/types-BuSrRM4p.d.ts +0 -49
- package/dist/types-ChOUI9-N.d.cts +0 -545
- package/dist/types-ChOUI9-N.d.ts +0 -545
- package/dist/types-Dfw9VOKI.d.cts +0 -49
- package/dist/utils/index.cjs +0 -44
- package/dist/utils/index.cjs.map +0 -1
- package/dist/utils/index.d.cts +0 -226
- package/dist/utils/index.d.ts +0 -226
- package/dist/utils/index.js +0 -44
- package/dist/utils/index.js.map +0 -1
- package/dist/with-responsive-CNfhzAUu.d.cts +0 -18
- package/dist/with-responsive-CNfhzAUu.d.ts +0 -18
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-WYK7EL5R.cjs","../../../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../src/hooks/use-deep-memo.ts","../src/hooks/use-chart-mouse-handler.ts","../src/hooks/use-xychart-theme.ts","../src/providers/chart-context/global-charts-provider.tsx","../src/hooks/use-tooltip-portal-relocator.ts","../src/hooks/use-tooltip-portal-relocator.module.scss","../src/providers/chart-context/private/get-chart-color.ts","../src/providers/chart-context/themes.ts","../src/providers/chart-context/hooks/use-global-charts-context.ts","../src/providers/chart-context/hooks/use-chart-id.ts","../src/providers/chart-context/hooks/use-chart-registration.ts","../src/providers/chart-context/hooks/use-global-charts-theme.ts","../src/hooks/use-chart-data-transform.ts","../src/hooks/use-chart-margin.tsx","../src/hooks/use-element-size.ts","../src/hooks/use-text-truncation.ts","../src/hooks/use-zero-value-display.ts","../src/hooks/use-interactive-legend-data.ts","../src/hooks/use-prefers-reduced-motion.ts"],"names":["isEqual","useRef","d3Hsl","useEffect","useCallback","useMemo","useContext","useState"],"mappings":"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","file":"/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-WYK7EL5R.cjs","sourcesContent":[null,"'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","import isEqual from 'fast-deep-equal';\nimport { useRef } from 'react';\n\n/**\n * Custom hook to memoize a value using deep equality comparison.\n * Prevents unnecessary re-renders when objects have the same content but different references.\n *\n * @param value - The value to memoize with deep equality comparison\n * @return The memoized value that only changes when deeply different\n */\nexport const useDeepMemo = < T >( value: T ): T => {\n\tconst ref = useRef< T >( value );\n\n\tif ( ! isEqual( ref.current, value ) ) {\n\t\tref.current = value;\n\t}\n\n\treturn ref.current;\n};\n","import { localPoint } from '@visx/event';\nimport { useTooltip } from '@visx/tooltip';\nimport { useCallback, type MouseEvent } from 'react';\nimport type { DataPoint } from '../types';\n\ntype UseChartMouseHandlerProps = {\n\t/**\n\t * Whether tooltips are enabled\n\t */\n\twithTooltips: boolean;\n\t/**\n\t * Horizontal offset for tooltip positioning in pixels (default: 0)\n\t */\n\toffsetX?: number;\n\t/**\n\t * Vertical offset for tooltip positioning in pixels (default: -10)\n\t */\n\toffsetY?: number;\n};\n\ntype UseChartMouseHandlerReturn = {\n\t/**\n\t * Handler for mouse move events\n\t */\n\tonMouseMove: ( event: MouseEvent< SVGElement >, data: DataPoint ) => void;\n\t/**\n\t * Handler for mouse leave events\n\t */\n\tonMouseLeave: () => void;\n\t/**\n\t * Whether the tooltip is currently open\n\t */\n\ttooltipOpen: boolean;\n\t/**\n\t * The current tooltip data\n\t */\n\ttooltipData: DataPoint | null;\n\t/**\n\t * The current tooltip left position\n\t */\n\ttooltipLeft: number | undefined;\n\t/**\n\t * The current tooltip top position\n\t */\n\ttooltipTop: number | undefined;\n};\n\n/**\n * Hook to handle mouse interactions for chart components\n *\n * @param {UseChartMouseHandlerProps} props - Hook configuration\n * @return {UseChartMouseHandlerReturn} Object containing handlers and tooltip state\n */\nexport const useChartMouseHandler = ( {\n\twithTooltips,\n\toffsetX = 0,\n\toffsetY = -10,\n}: UseChartMouseHandlerProps ): UseChartMouseHandlerReturn => {\n\tconst { tooltipOpen, tooltipLeft, tooltipTop, tooltipData, hideTooltip, showTooltip } =\n\t\tuseTooltip< DataPoint >();\n\n\tconst onMouseMove = useCallback(\n\t\t( event: MouseEvent< SVGElement >, data: DataPoint ) => {\n\t\t\tif ( ! withTooltips ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst coords = localPoint( event );\n\t\t\tif ( ! coords ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tshowTooltip( {\n\t\t\t\ttooltipData: data,\n\t\t\t\ttooltipLeft: coords.x + offsetX,\n\t\t\t\ttooltipTop: coords.y + offsetY,\n\t\t\t} );\n\t\t},\n\t\t[ withTooltips, showTooltip, offsetX, offsetY ]\n\t);\n\n\tconst onMouseLeave = useCallback( () => {\n\t\tif ( ! withTooltips ) {\n\t\t\treturn;\n\t\t}\n\t\thideTooltip();\n\t}, [ withTooltips, hideTooltip ] );\n\n\treturn {\n\t\tonMouseMove,\n\t\tonMouseLeave,\n\t\ttooltipOpen,\n\t\ttooltipData: tooltipData || null,\n\t\ttooltipLeft,\n\t\ttooltipTop,\n\t};\n};\n","import { buildChartTheme } from '@visx/xychart';\nimport { useMemo } from 'react';\nimport { useGlobalChartsTheme } from '../providers';\nimport type { SeriesData } from '../types';\n\nexport const useXYChartTheme = ( data: SeriesData[] ) => {\n\tconst theme = useGlobalChartsTheme();\n\n\treturn useMemo( () => {\n\t\tconst seriesColors = ( data ?? [] )\n\t\t\t.map( series => series.options?.stroke )\n\t\t\t.filter( ( color ): color is string => Boolean( color ) );\n\n\t\treturn buildChartTheme( {\n\t\t\t...theme,\n\t\t\tcolors: [ ...seriesColors, ...( theme.colors ?? [] ) ],\n\t\t} );\n\t}, [ theme, data ] );\n};\n","import { hsl as d3Hsl } from '@visx/vendor/d3-color';\nimport { createContext, useCallback, useMemo, useState, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useTooltipPortalRelocator } from '../../hooks/use-tooltip-portal-relocator';\nimport { getItemShapeStyles, getSeriesLineStyles, mergeThemes, resolveCssVariable, normalizeColorToHex } from '../../utils';\nimport { getChartColor } from './private/get-chart-color';\nimport { defaultTheme } from './themes';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const GlobalChartsContext = /*#__PURE__*/createContext(null);\nexport const GlobalChartsProvider = ({\n children,\n theme,\n portalContainer\n}) => {\n const [charts, setCharts] = useState(() => new Map());\n // Track hidden series per chart: chartId -> Set<seriesLabel>\n const [hiddenSeries, setHiddenSeries] = useState(() => new Map());\n\n // Ref to the wrapper element for resolving scoped CSS variables\n const wrapperRef = useRef(null);\n\n // Relocate tooltip portals into the wrapper (or a consumer-provided container) for z-index control.\n useTooltipPortalRelocator(portalContainer ?? wrapperRef);\n const providerTheme = useMemo(() => {\n return theme ? mergeThemes(defaultTheme, theme) : defaultTheme;\n }, [theme]);\n\n // Cache expensive color computations that only change when theme colors change\n // Using useState + useLayoutEffect instead of useMemo to ensure CSS variables\n // in <style> tags are applied to the DOM before we try to resolve them\n const [colorCache, setColorCache] = useState(() => ({\n colors: [],\n hues: [],\n existingHslColors: [],\n minHue: 360,\n maxHue: 0\n }));\n\n // Compute color cache after DOM is updated (so CSS variables are available)\n // Resolves CSS variables from the wrapper element's scope to handle scoped variables\n // Note: Only re-runs when providerTheme changes, not when wrapper element changes.\n // This is intentional, as wrapperRef is expected to be stable for the lifetime of the provider.\n useLayoutEffect(() => {\n const {\n colors\n } = providerTheme;\n const resolvedColors = [];\n const hues = [];\n const existingHslColors = [];\n let minHue = 360;\n let maxHue = 0;\n\n // Process all colors once and cache the results\n if (Array.isArray(colors)) {\n for (const color of colors) {\n if (color && typeof color === 'string') {\n let colorValue = color;\n\n // Handle CSS custom properties - resolve them to actual values\n // Supports both '--var-name' and 'var(--var-name)' formats\n // Use wrapper element to resolve scoped CSS variables\n if (color.startsWith('--') || color.startsWith('var(')) {\n const resolved = resolveCssVariable(color, wrapperRef.current);\n if (resolved === null || resolved === '') {\n continue;\n }\n colorValue = resolved;\n }\n\n // Process hex colors\n if (colorValue.startsWith('#')) {\n resolvedColors.push(colorValue);\n const hslColor = d3Hsl(colorValue);\n // d3Hsl returns NaN values for invalid colors\n if (!isNaN(hslColor.h)) {\n const hslTuple = [hslColor.h, hslColor.s * 100, hslColor.l * 100];\n hues.push(hslTuple[0]);\n existingHslColors.push(hslTuple);\n minHue = Math.min(minHue, hslTuple[0]);\n maxHue = Math.max(maxHue, hslTuple[0]);\n }\n }\n }\n }\n }\n setColorCache({\n colors: resolvedColors,\n hues,\n existingHslColors,\n minHue,\n maxHue\n });\n }, [providerTheme]);\n const [groupToColorMap, setGroupToColorMap] = useState(() => new Map());\n\n // Reset group color mappings when theme colors change\n useEffect(() => {\n // Create a completely new Map instance to trigger dependencies, e.g. useChartLegendItems\n setGroupToColorMap(new Map());\n }, [providerTheme.colors]);\n const registerChart = useCallback((id, data) => {\n setCharts(prev => new Map(prev).set(id, data));\n }, []);\n const unregisterChart = useCallback(id => {\n setCharts(prev => {\n const newMap = new Map(prev);\n newMap.delete(id);\n return newMap;\n });\n }, []);\n const getChartData = useCallback(id => {\n return charts.get(id);\n }, [charts]);\n const resolveColor = useCallback(({\n group,\n index,\n overrideColor\n }) => {\n // Highest precedence: eg. explicit series stroke or chart color prop\n if (overrideColor) {\n return normalizeColorToHex(overrideColor, wrapperRef.current, resolveCssVariable);\n }\n\n // If group provided, maintain a stable assignment\n if (group) {\n const existing = groupToColorMap.get(group);\n if (existing) {\n return existing;\n }\n\n // Use map size as index to assign colors sequentially (0, 1, 2...)\n // ensuring each new group gets the next available palette color\n const assignedCount = groupToColorMap.size;\n const color = getChartColor(assignedCount, colorCache);\n groupToColorMap.set(group, color);\n return color;\n }\n return getChartColor(index, colorCache);\n }, [colorCache, groupToColorMap]);\n const getElementStyles = useCallback(({\n data,\n index,\n overrideColor,\n legendShape\n }) => {\n const isSeriesData = data && typeof data === 'object' && 'data' in data && 'options' in data;\n const isPointPercentageData = data && typeof data === 'object' && 'percentage' in data;\n return {\n color: resolveColor({\n group: data?.group,\n index,\n overrideColor: overrideColor || isSeriesData && data?.options?.stroke || isPointPercentageData && data?.color\n }),\n lineStyles: isSeriesData ? getSeriesLineStyles(data, index, providerTheme) : {},\n glyph: providerTheme.glyphs?.[index],\n shapeStyles: isSeriesData ? getItemShapeStyles(data, index, providerTheme, legendShape) : {}\n };\n }, [providerTheme, resolveColor]);\n\n // Series visibility management methods\n const toggleSeriesVisibility = useCallback((chartId, seriesLabel) => {\n setHiddenSeries(prev => {\n const newMap = new Map(prev);\n const chartHidden = newMap.get(chartId) || new Set();\n const newSet = new Set(chartHidden);\n if (newSet.has(seriesLabel)) {\n newSet.delete(seriesLabel);\n } else {\n newSet.add(seriesLabel);\n }\n if (newSet.size === 0) {\n newMap.delete(chartId);\n } else {\n newMap.set(chartId, newSet);\n }\n return newMap;\n });\n }, []);\n const isSeriesVisible = useCallback((chartId, seriesLabel) => {\n const chartHidden = hiddenSeries.get(chartId);\n return !chartHidden || !chartHidden.has(seriesLabel);\n }, [hiddenSeries]);\n const getHiddenSeries = useCallback(chartId => {\n const set = hiddenSeries.get(chartId);\n return set ? new Set(set) : new Set();\n }, [hiddenSeries]);\n const value = useMemo(() => ({\n charts,\n registerChart,\n unregisterChart,\n getChartData,\n theme: providerTheme,\n getElementStyles,\n toggleSeriesVisibility,\n isSeriesVisible,\n getHiddenSeries\n }), [charts, registerChart, unregisterChart, getChartData, providerTheme, getElementStyles, toggleSeriesVisibility, isSeriesVisible, getHiddenSeries]);\n return /*#__PURE__*/_jsx(GlobalChartsContext.Provider, {\n value: value,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: wrapperRef,\n style: {\n display: 'contents'\n },\n children: children\n })\n });\n};","import { useEffect } from 'react';\nimport styles from './use-tooltip-portal-relocator.module.scss';\nimport type { RefObject } from 'react';\n\n/**\n * Detects whether a DOM node is a visx chart tooltip portal.\n *\n * visx renders tooltips via `ReactDOM.createPortal` into plain `<div>` elements\n * appended to `document.body`. These portals have no id or className and contain\n * a child element with the class `visx-tooltip`.\n * @param node - The DOM node to check.\n * @return Whether the node is a visx tooltip portal div.\n */\nfunction isVisxPortalNode( node: Node ): node is HTMLDivElement {\n\treturn (\n\t\tnode instanceof HTMLDivElement &&\n\t\tnode.parentElement === document.body &&\n\t\t! node.id &&\n\t\t! node.className &&\n\t\tnode.querySelector( '.visx-tooltip' ) !== null\n\t);\n}\n\n// Shared state for the document.body.removeChild patch.\n// Reference-counted so multiple hook instances can coexist safely.\nlet patchRefCount = 0;\nlet origRemoveChild: typeof document.body.removeChild | null = null;\nlet patchedRemoveChild: typeof document.body.removeChild | null = null;\nconst relocatedNodes = new WeakSet< Node >();\n\n/**\n * Installs (or increments the ref count of) the shared removeChild patch.\n */\nfunction installRemoveChildPatch() {\n\tif ( patchRefCount++ > 0 ) {\n\t\treturn;\n\t}\n\torigRemoveChild = document.body.removeChild;\n\tpatchedRemoveChild = function < T extends Node >( this: HTMLElement, child: T ): T {\n\t\tif ( relocatedNodes.has( child ) && child.parentNode !== this ) {\n\t\t\trelocatedNodes.delete( child );\n\t\t\tchild.parentNode?.removeChild( child );\n\t\t\treturn child;\n\t\t}\n\t\treturn origRemoveChild!.call( this, child );\n\t};\n\tdocument.body.removeChild = patchedRemoveChild;\n}\n\n/**\n * Decrements the ref count and removes the patch when no instances remain.\n * If another library has since wrapped our patch, we leave it in place to\n * avoid breaking their chain — our function becomes a transparent pass-through\n * once all relocated nodes have been cleaned up.\n */\nfunction uninstallRemoveChildPatch() {\n\tif ( --patchRefCount > 0 ) {\n\t\treturn;\n\t}\n\t// Only revert if removeChild is still our function. If something else\n\t// has wrapped it, reverting would break their patch.\n\tif ( document.body.removeChild === patchedRemoveChild ) {\n\t\tdocument.body.removeChild = origRemoveChild!;\n\t}\n\torigRemoveChild = null;\n\tpatchedRemoveChild = null;\n}\n\n/**\n * Relocates visx chart tooltip portals from `document.body` into a target\n * container element. This allows the tooltips to participate in the same CSS\n * stacking context as other elements in the container (e.g. a sticky header),\n * so z-index ordering works correctly between them.\n *\n * The relocated portal divs use `position: fixed` at the viewport origin to\n * preserve the tooltip coordinate system (visx calculates positions relative\n * to the viewport).\n *\n * Because the visx Portal class calls `document.body.removeChild(node)` during\n * unmount, we patch `document.body.removeChild` to gracefully handle nodes that\n * were moved out of body. Without this, React throws a \"not a child of this\n * node\" error when tooltips unmount.\n *\n * **Important:** The container and its ancestors must not have CSS `transform`,\n * `perspective`, or `filter` properties set, as these create a new containing\n * block for `position: fixed` children, breaking viewport-relative positioning.\n *\n * @param containerRef - Ref to the element that portals should be relocated into.\n * The element referenced here, or one of its ancestors,\n * should establish the desired stacking context (for example\n * by using position and z-index).\n */\nexport function useTooltipPortalRelocator(\n\tcontainerRef: RefObject< HTMLElement | null > | undefined\n) {\n\tuseEffect( () => {\n\t\tconst container = containerRef?.current;\n\t\tif ( ! container ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Track nodes relocated by this instance so we can move them back on cleanup.\n\t\tconst instanceNodes = new Set< Node >();\n\n\t\tconst relocateNode = ( node: Node ) => {\n\t\t\tif ( ! isVisxPortalNode( node ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hide the portal immediately to prevent the tooltip from\n\t\t\t// flashing at (0,0) before visx calculates the correct position.\n\t\t\tnode.style.opacity = '0';\n\n\t\t\t// Position the portal at the viewport origin so visx's\n\t\t\t// absolute-positioned tooltip coordinates remain correct.\n\t\t\t// Zero-size with overflow: visible so it doesn't affect layout\n\t\t\t// but tooltip content still renders. pointerEvents: none on the\n\t\t\t// wrapper is intentional — tooltip inner elements manage their own.\n\t\t\tnode.classList.add( styles.relocatedPortal );\n\n\t\t\t// Remember the focused element before moving the node — relocating\n\t\t\t// a DOM subtree causes the browser to blur any focused descendants.\n\t\t\tconst { activeElement } = node.ownerDocument;\n\t\t\tconst focusedElement =\n\t\t\t\tactiveElement instanceof HTMLElement && node.contains( activeElement )\n\t\t\t\t\t? activeElement\n\t\t\t\t\t: null;\n\n\t\t\t// Insert at the start of the container (before header and content).\n\t\t\tcontainer.insertBefore( node, container.firstChild );\n\t\t\trelocatedNodes.add( node );\n\t\t\tinstanceNodes.add( node );\n\n\t\t\t// Restore focus that was lost due to the DOM move.\n\t\t\tif ( focusedElement ) {\n\t\t\t\tfocusedElement.focus();\n\t\t\t}\n\n\t\t\t// Reveal after two animation frames so visx has positioned the tooltip.\n\t\t\trequestAnimationFrame( () => {\n\t\t\t\trequestAnimationFrame( () => {\n\t\t\t\t\tnode.style.opacity = '';\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\n\t\t// Patch document.body.removeChild so visx Portal unmount doesn't throw\n\t\t// when it tries to remove a node we already moved out of body.\n\t\tinstallRemoveChildPatch();\n\n\t\t// Relocate any portals that already exist.\n\t\tfor ( const child of Array.from( document.body.children ) ) {\n\t\t\trelocateNode( child );\n\t\t}\n\n\t\t// Watch for new portals being appended to body.\n\t\tconst observer = new MutationObserver( mutations => {\n\t\t\tfor ( const mutation of mutations ) {\n\t\t\t\tfor ( const node of mutation.addedNodes ) {\n\t\t\t\t\trelocateNode( node );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tobserver.observe( document.body, { childList: true } );\n\n\t\treturn () => {\n\t\t\t// Disconnect first to avoid the observer re-relocating nodes\n\t\t\t// as we move them back to body.\n\t\t\tobserver.disconnect();\n\n\t\t\t// Move relocated nodes back to body so visx can clean them up\n\t\t\t// normally with the original removeChild.\n\t\t\tfor ( const node of instanceNodes ) {\n\t\t\t\tif ( node instanceof HTMLElement ) {\n\t\t\t\t\tnode.classList.remove( styles.relocatedPortal );\n\t\t\t\t}\n\t\t\t\tif ( node.parentNode === container ) {\n\t\t\t\t\tdocument.body.appendChild( node );\n\t\t\t\t}\n\t\t\t\trelocatedNodes.delete( node );\n\t\t\t}\n\t\t\tinstanceNodes.clear();\n\n\t\t\tuninstallRemoveChildPatch();\n\t\t};\n\t}, [ containerRef ] );\n}\n","import 'css-chunk:src/hooks/use-tooltip-portal-relocator.module.scss';export default {\n \"relocatedPortal\": \"a8ccharts-jCw5dQ\"\n};","import { hsl as d3Hsl } from '@visx/vendor/d3-color';\nimport { getColorDistance } from '../../../utils';\n\nexport interface ColorCache {\n\tcolors: string[];\n\thues: number[];\n\texistingHslColors: Array< [ number, number, number ] >;\n\tminHue: number;\n\tmaxHue: number;\n}\n\n/**\n * Golden ratio for mathematically pleasing color distribution\n * Used to generate evenly spaced hues that are visually distinct\n */\nconst GOLDEN_RATIO = 0.618033988749;\n\n/**\n * Minimum perceptual distance between colors to ensure visual distinction\n * Based on weighted HSL distance calculation optimized for chart readability\n */\nconst MIN_COLOR_DISTANCE = 25;\n\n/**\n * Maximum attempts to find a sufficiently different color\n * Prevents infinite loops while allowing reasonable search space\n */\nconst MAX_COLOR_GENERATION_ATTEMPTS = 50;\n\n/**\n * Color variation attempt offset\n * Small increment to explore slightly different color variations per attempt\n */\nconst VARIATION_ATTEMPT_OFFSET = 0.1;\n\n// Saturation configuration for generated colors\n\n/**\n * Base saturation percentage for generated colors\n * 45% provides muted, professional colors without being washed out\n */\nconst BASE_SATURATION = 45;\n\n/**\n * Number of saturation variation steps\n * Creates 3 different saturation levels for variety\n */\nconst SATURATION_VARIATION_STEPS = 3;\n\n/**\n * Saturation increment per variation step\n * 10% increments provide subtle variation while keeping colors muted\n * Results in saturation levels: 45%, 55%, 65%\n */\nconst SATURATION_INCREMENT = 10;\n\n// Lightness configuration for WCAG AA accessibility compliance\n\n/**\n * Base lightness percentage for generated colors\n * 35% ensures sufficient contrast against white backgrounds for WCAG AA compliance\n * WCAG AA requires 4.5:1 contrast ratio for normal text\n */\nconst BASE_LIGHTNESS = 35;\n\n/**\n * Number of lightness variation steps\n * Creates 4 different lightness levels for variety\n */\nconst LIGHTNESS_VARIATION_STEPS = 4;\n\n/**\n * Lightness increment per variation step\n * 8% increments provide subtle lightness variation while maintaining accessibility\n * Results in lightness levels: 35%, 43%, 51%, 59%\n * All levels maintain WCAG AA compliance against white backgrounds\n */\nconst LIGHTNESS_INCREMENT = 8;\n\n// Hue range expansion and constraints\n\n/**\n * Minimum hue range in degrees to ensure sufficient color variety\n * 60 degrees provides reasonable color spread even for narrow palettes\n */\nconst MIN_HUE_RANGE_DEGREES = 60;\n\n/**\n * Hue range expansion factor\n * 1.3x expansion provides slightly more variety than the original palette\n */\nconst HUE_RANGE_EXPANSION_FACTOR = 1.3;\n\n/**\n * Threshold for detecting hue wrap-around (color wheel boundary crossing)\n * 180 degrees indicates the colors span more than half the color wheel\n */\nconst HUE_WRAP_THRESHOLD_DEGREES = 180;\n\n/**\n * Full color wheel rotation in degrees\n */\nconst FULL_HUE_ROTATION_DEGREES = 360;\n\n/**\n * Factor for single color hue range\n */\nconst SINGLE_COLOR_HUE_RANGE_FACTOR = 0.33;\n\n/**\n * Get a color from the colors array or generate a new color using the golden ratio\n *\n * @param index - the index of the color to get\n * @param colorCache - pre-computed color data for performance\n * @return a color from the colors array or a new color using the golden ratio\n */\nexport const getChartColor = ( index: number, colorCache: ColorCache ): string => {\n\tconst {\n\t\tcolors,\n\t\thues,\n\t\texistingHslColors,\n\t\tminHue: cachedMinHue,\n\t\tmaxHue: cachedMaxHue,\n\t} = colorCache;\n\n\tif ( index < colors.length ) {\n\t\treturn colors[ index ];\n\t}\n\n\tlet minHue = cachedMinHue;\n\tlet maxHue = cachedMaxHue;\n\n\t// Generate additional colors using golden ratio, avoiding similar colors\n\tfor ( let attempt = 0; attempt < MAX_COLOR_GENERATION_ATTEMPTS; attempt++ ) {\n\t\t// Calculate hue using golden ratio distribution with variation per attempt\n\t\t// Formula: ((base_index + attempt_variation) * golden_ratio * 360°) mod 360°\n\t\t// This ensures mathematically pleasing spacing while allowing slight shifts per attempt\n\t\tlet hue =\n\t\t\t( ( index - colors.length + attempt * VARIATION_ATTEMPT_OFFSET ) *\n\t\t\t\tGOLDEN_RATIO *\n\t\t\t\tFULL_HUE_ROTATION_DEGREES ) %\n\t\t\tFULL_HUE_ROTATION_DEGREES;\n\n\t\t// If we have existing colors, constrain new colors to their hue range\n\t\tif ( hues.length > 0 ) {\n\t\t\t// Handle hue wrap-around (e.g., if colors span across 0 degrees)\n\t\t\tlet hueRange = maxHue - minHue;\n\n\t\t\t// If there's only one color, use a set hue range for limited variety\n\t\t\tif ( hues.length === 1 ) {\n\t\t\t\thueRange = FULL_HUE_ROTATION_DEGREES * SINGLE_COLOR_HUE_RANGE_FACTOR;\n\t\t\t} else if ( hueRange > HUE_WRAP_THRESHOLD_DEGREES ) {\n\t\t\t\t// If the range is very large, it might be wrapping around the color wheel\n\t\t\t\t// Check if a smaller range exists when considering wrap-around\n\t\t\t\tconst altMinHue = Math.min( ...hues.filter( h => h > HUE_WRAP_THRESHOLD_DEGREES ) );\n\t\t\t\tconst altMaxHue =\n\t\t\t\t\tMath.max( ...hues.filter( h => h < HUE_WRAP_THRESHOLD_DEGREES ) ) +\n\t\t\t\t\tFULL_HUE_ROTATION_DEGREES;\n\t\t\t\tconst altRange = altMaxHue - altMinHue;\n\n\t\t\t\tif ( altRange < hueRange ) {\n\t\t\t\t\tminHue = altMinHue;\n\t\t\t\t\tmaxHue = altMaxHue;\n\t\t\t\t\thueRange = altRange;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Expand the range slightly to provide some variation\n\t\t\tconst expandedRange = Math.max(\n\t\t\t\thueRange * HUE_RANGE_EXPANSION_FACTOR,\n\t\t\t\tMIN_HUE_RANGE_DEGREES\n\t\t\t);\n\t\t\tconst rangeCenter = ( minHue + maxHue ) / 2;\n\t\t\tconst expandedMin = rangeCenter - expandedRange / 2;\n\n\t\t\t// Map the generated hue to the expanded range\n\t\t\thue = expandedMin + ( hue / FULL_HUE_ROTATION_DEGREES ) * expandedRange;\n\n\t\t\t// Normalize to 0-360 range\n\t\t\thue =\n\t\t\t\t( ( hue % FULL_HUE_ROTATION_DEGREES ) + FULL_HUE_ROTATION_DEGREES ) %\n\t\t\t\tFULL_HUE_ROTATION_DEGREES;\n\t\t}\n\n\t\tconst saturation =\n\t\t\tBASE_SATURATION + ( ( index + attempt ) % SATURATION_VARIATION_STEPS ) * SATURATION_INCREMENT;\n\t\tconst lightness =\n\t\t\tBASE_LIGHTNESS + ( ( index + attempt ) % LIGHTNESS_VARIATION_STEPS ) * LIGHTNESS_INCREMENT;\n\n\t\tconst candidateHsl: [ number, number, number ] = [ hue, saturation, lightness ];\n\n\t\t// Check if this color is sufficiently different from existing colors\n\t\tlet isSufficientlyDifferent = true;\n\t\tfor ( const existingHsl of existingHslColors ) {\n\t\t\tif ( getColorDistance( candidateHsl, existingHsl ) < MIN_COLOR_DISTANCE ) {\n\t\t\t\tisSufficientlyDifferent = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif ( isSufficientlyDifferent ) {\n\t\t\t// d3-color uses 0-1 scale for saturation and lightness\n\t\t\treturn d3Hsl( Math.round( hue ), saturation / 100, lightness / 100 ).formatHex();\n\t\t}\n\t}\n\n\t// Fallback if we couldn't find a sufficiently different color\n\t// Formula: ((base_index) * golden_ratio * 360°) mod 360°\n\t// This ensures mathematically pleasing spacing while maintaining consistency\n\tconst fallbackHue =\n\t\t( ( index - colors.length ) * GOLDEN_RATIO * FULL_HUE_ROTATION_DEGREES ) %\n\t\tFULL_HUE_ROTATION_DEGREES;\n\tconst fallbackSaturation =\n\t\tBASE_SATURATION + ( index % SATURATION_VARIATION_STEPS ) * SATURATION_INCREMENT;\n\tconst fallbackLightness =\n\t\tBASE_LIGHTNESS + ( index % LIGHTNESS_VARIATION_STEPS ) * LIGHTNESS_INCREMENT;\n\t// d3-color uses 0-1 scale for saturation and lightness\n\treturn d3Hsl(\n\t\tMath.round( fallbackHue ),\n\t\tfallbackSaturation / 100,\n\t\tfallbackLightness / 100\n\t).formatHex();\n};\n","import type { CompleteChartTheme } from '../../types';\n\n/**\n * Default theme configuration\n */\nconst defaultTheme: CompleteChartTheme = {\n\tbackgroundColor: '#FFFFFF', // chart background color\n\tlabelBackgroundColor: 'transparent', // label background color (transparent by default)\n\tlabelTextColor: '#FFFFFF', // label text color (white to match original behavior)\n\tcolors: [ '#98C8DF', '#006DAB', '#A6DC80', '#1F9828', '#FF8C8F' ],\n\tgridStyles: {\n\t\tstroke: '#DCDCDE',\n\t\tstrokeWidth: 1,\n\t},\n\ttickLength: 4,\n\tgridColor: '',\n\tgridColorDark: '',\n\txTickLineStyles: { stroke: 'black' },\n\txAxisLineStyles: { stroke: '#DCDCDE', strokeWidth: 1 },\n\tlegend: {\n\t\tlabelStyles: {\n\t\t\tcolor: 'var(--jp-gray-80, #2c3338)',\n\t\t},\n\t\tcontainerStyles: {},\n\t\tshapeStyles: [],\n\t},\n\tseriesLineStyles: [],\n\tglyphs: [],\n\tsvgLabelSmall: { fill: 'var(--jp-gray-80, #2c3338)' },\n\tannotationStyles: {\n\t\tlabel: {\n\t\t\tanchorLineStroke: 'var(--jp-gray-80, #2c3338)',\n\t\t\tbackgroundFill: '#fff',\n\t\t},\n\t\tconnector: {\n\t\t\tstroke: 'var(--jp-gray-80, #2c3338)',\n\t\t},\n\t\tcircleSubject: {\n\t\t\tstroke: 'transparent',\n\t\t\tfill: 'var(--jp-gray-80, #2c3338)',\n\t\t\tradius: 5,\n\t\t},\n\t},\n\tgeoChart: {\n\t\tfeatureFillColor: 'var(--jp-gray-0, #f6f7f7)',\n\t},\n\tleaderboardChart: {\n\t\trowGap: 12,\n\t\tcolumnGap: 4,\n\t\tlabelSpacing: 1.5,\n\t\tdeltaColors: [ '#FF8C8F', '#757575', '#1F9828' ], // [negative, neutral, positive]\n\t},\n\tconversionFunnelChart: {\n\t\tbackgroundColor: '#F3F4F6',\n\t\tpositiveChangeColor: '#1F9828',\n\t\tnegativeChangeColor: '#FF8C8F',\n\t},\n\tlineChart: {\n\t\tlineStyles: {\n\t\t\tcomparison: {\n\t\t\t\tstrokeDasharray: '4 4',\n\t\t\t\tstrokeLinecap: 'square',\n\t\t\t},\n\t\t},\n\t},\n\tsparkline: {\n\t\tmargin: { top: 2, right: 2, bottom: 2, left: 2 },\n\t\tstrokeWidth: 1.5,\n\t},\n};\n\nexport { defaultTheme };\n","import { useContext } from 'react';\nimport { GlobalChartsContext } from '../global-charts-provider';\nimport type { GlobalChartsContextValue } from '../types';\n\nexport const useGlobalChartsContext = (): GlobalChartsContextValue => {\n\tconst context = useContext( GlobalChartsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useGlobalChartsContext must be used within a GlobalChartsProvider' );\n\t}\n\treturn context;\n};\n","import { useId } from 'react';\n\nexport const useChartId = ( providedId?: string ): string => {\n\tconst generatedId = useId();\n\treturn providedId || generatedId;\n};\n","import { useEffect, useMemo } from 'react';\nimport { useDeepMemo } from '../../../hooks';\nimport { useGlobalChartsContext } from './use-global-charts-context';\nimport type { BaseLegendItem } from '../../../components/legend';\n\nexport const useChartRegistration = ( {\n\tchartId,\n\tlegendItems,\n\tchartType,\n\tisDataValid,\n\tmetadata,\n}: {\n\tchartId: string;\n\tlegendItems: BaseLegendItem[];\n\tchartType: string;\n\tisDataValid: boolean;\n\tmetadata?: Record< string, unknown >;\n} ): void => {\n\tconst { registerChart, unregisterChart } = useGlobalChartsContext();\n\n\t// Memoize legendItems with deep comparison to prevent infinite loops\n\tconst stableLegendItems = useDeepMemo( legendItems );\n\n\t// Memoize metadata to prevent unnecessary re-renders\n\tconst memoizedMetadata = useMemo( () => metadata, [ metadata ] );\n\n\tuseEffect( () => {\n\t\t// Only register if data is valid\n\t\tif ( isDataValid ) {\n\t\t\tregisterChart( chartId, {\n\t\t\t\tlegendItems: stableLegendItems,\n\t\t\t\tchartType,\n\t\t\t\tmetadata: memoizedMetadata,\n\t\t\t} );\n\t\t}\n\n\t\treturn () => {\n\t\t\tunregisterChart( chartId );\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [\n\t\tchartId,\n\t\tstableLegendItems,\n\t\tchartType,\n\t\tmemoizedMetadata,\n\t\tisDataValid,\n\t\t// Removed registerChart and unregisterChart from dependencies\n\t\t// They are stable functions created with useCallback and empty deps\n\t] );\n};\n","import { useContext } from 'react';\nimport { GlobalChartsContext } from '../global-charts-provider';\nimport { defaultTheme } from '../themes';\nimport type { CompleteChartTheme } from '../../../types';\n\n/**\n * Hook to get the global chart theme from GlobalChartsProvider\n *\n * @return The global chart theme\n */\nexport const useGlobalChartsTheme = (): CompleteChartTheme => {\n\t// Get context but don't throw if it doesn't exist (for testing or standalone usage)\n\tconst context = useContext( GlobalChartsContext );\n\tconst globalTheme = context?.theme;\n\n\treturn globalTheme ?? defaultTheme;\n};\n","import { useMemo } from 'react';\nimport { parseAsLocalDate } from '../utils';\nimport type { SeriesData } from '../types';\n\n/**\n * Hook that transforms and sorts chart data, handling date parsing and sorting\n *\n * This hook extracts the common data transformation logic used in both line-chart\n * and bar-chart components. It:\n * 1. Parses date strings into Date objects using parseAsLocalDate\n * 2. Sorts data points by date when date properties are present\n * 3. Returns the original data unchanged when no date properties are found\n *\n * @param {SeriesData[]} data - The raw chart data to transform\n * @return {SeriesData[]} The transformed and sorted data\n */\nexport const useChartDataTransform = ( data: SeriesData[] ) => {\n\treturn useMemo( () => {\n\t\t// Check if the first data point has date or dateString properties\n\t\tconst firstPoint = data?.[ 0 ]?.data?.[ 0 ];\n\t\tconst hasDateProperties = firstPoint && ( 'date' in firstPoint || 'dateString' in firstPoint );\n\n\t\t// If no date properties found, return data unchanged\n\t\tif ( ! hasDateProperties ) {\n\t\t\treturn data;\n\t\t}\n\n\t\t// Transform and sort data with date properties\n\t\treturn data.map( series => ( {\n\t\t\t...series,\n\t\t\tdata: series.data\n\t\t\t\t.map( point => {\n\t\t\t\t\tlet date: Date | undefined;\n\n\t\t\t\t\tif ( 'date' in point && point.date ) {\n\t\t\t\t\t\tdate = point.date;\n\t\t\t\t\t} else if ( 'dateString' in point && point.dateString ) {\n\t\t\t\t\t\tdate = parseAsLocalDate( point.dateString );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...point,\n\t\t\t\t\t\tdate,\n\t\t\t\t\t};\n\t\t\t\t} )\n\t\t\t\t.sort( ( a, b ) => {\n\t\t\t\t\tif ( ! a.date || ! b.date ) return 0;\n\t\t\t\t\treturn a.date.getTime() - b.date.getTime();\n\t\t\t\t} ),\n\t\t} ) );\n\t}, [ data ] );\n};\n","import { createScale, getTicks } from '@visx/scale';\nimport { useMemo } from 'react';\nimport { getLongestTickWidth } from '../utils';\n/**\n * Base top margin used when no dynamic adjustments are necessary.\n */\nconst DEFAULT_MARGIN_TOP = 10;\n\n/**\n * Base right margin used when no dynamic adjustments are necessary.\n */\nconst DEFAULT_MARGIN_RIGHT = 20;\n\n/**\n * Base bottom margin used for charts with a bottom X-axis.\n * This is large enough for typical font sizes and will be increased\n * dynamically when tick labels require more space.\n */\nconst DEFAULT_MARGIN_BOTTOM = 20;\n\n/**\n * Base left margin used when no dynamic adjustments are necessary.\n */\nconst DEFAULT_MARGIN_LEFT = 20;\n\n/**\n * Bottom margin to use when the X-axis is rendered at the top.\n * We only need a small buffer below the chart in that case.\n */\nconst DEFAULT_BOTTOM_FOR_TOP_AXIS = 10;\n\n/**\n * Fallback font size used when we cannot derive a font size\n * from the theme or axis styles for X-axis tick labels.\n */\nconst DEFAULT_FONT_SIZE = 12;\n\n/**\n * Fallback tick length used when tickLength is not provided\n * by the theme for either axis.\n */\nconst DEFAULT_TICK_LENGTH = 8;\n\n/**\n * Fallback width used for Y-axis tick labels when we cannot\n * measure them via getLongestTickWidth.\n */\nconst DEFAULT_Y_TICK_WIDTH = 40;\nconst resolveFontSize = val => {\n if (typeof val === 'number' && !isNaN(val)) {\n return val;\n }\n if (typeof val === 'string') {\n const parsed = parseFloat(val);\n return isNaN(parsed) ? undefined : parsed;\n }\n return undefined;\n};\nconst getXAxisLabelMetrics = (theme, orientation) => {\n const xAxisStyles = orientation === 'top' ? theme.axisStyles?.x?.top : theme.axisStyles?.x?.bottom;\n const fontSize = resolveFontSize(xAxisStyles?.axisLabel?.fontSize) || resolveFontSize(theme.svgLabelSmall?.fontSize) || DEFAULT_FONT_SIZE;\n const tickLength = xAxisStyles?.tickLength ?? DEFAULT_TICK_LENGTH;\n return {\n fontSize,\n tickLength\n };\n};\nexport const useChartMargin = (height, options, data, theme, horizontal = false) => {\n const yTicks = useMemo(() => {\n const allDataPoints = data.flatMap(series => series.data);\n if (horizontal) {\n // When horizontal, y ticks renders fixed tick labels.\n return allDataPoints.map(d => d.label || options.axis?.y?.tickFormat(d.date.getTime(), 0, []));\n }\n const minY = Math.min(...allDataPoints.map(d => d.value));\n const maxY = Math.max(...allDataPoints.map(d => d.value));\n const yScale = createScale({\n ...options.yScale,\n domain: [minY, maxY],\n range: [height, 0]\n });\n return getTicks(yScale, options.axis?.y?.numTicks);\n }, [options, data, height, horizontal]);\n return useMemo(() => {\n // Default margin is for bottom axis labels.\n const defaultMargin = {\n top: DEFAULT_MARGIN_TOP,\n right: DEFAULT_MARGIN_RIGHT,\n bottom: DEFAULT_MARGIN_BOTTOM,\n left: DEFAULT_MARGIN_LEFT\n };\n\n // Auto-calculate margin for y axis labels based on orientation and tick width.\n const yAxisOrientation = options.axis?.y?.orientation;\n const yAxisStyles = yAxisOrientation === 'right' ? theme.axisStyles.y.right : theme.axisStyles.y.left;\n const yTickWidth = getLongestTickWidth(yTicks, options.axis?.y?.tickFormat, yAxisStyles.axisLabel);\n const yMarginValue = (yTickWidth ?? DEFAULT_Y_TICK_WIDTH) + (yAxisStyles?.tickLength ?? 0);\n if (yAxisOrientation === 'right') {\n defaultMargin.right = yMarginValue;\n } else {\n defaultMargin.left = yMarginValue;\n }\n\n // Dynamically compute X-axis margin (bottom by default, or top if orientation is 'top').\n // This mirrors Y-axis behavior where margin is based on label size and tick length,\n // but keeps the padding minimal so consumers can control container spacing themselves.\n const xOrientation = options.axis?.x?.orientation === 'top' ? 'top' : 'bottom';\n const {\n fontSize,\n tickLength\n } = getXAxisLabelMetrics(theme, xOrientation);\n const computedXMargin = fontSize + tickLength;\n if (xOrientation === 'top') {\n defaultMargin.top = Math.max(defaultMargin.top, computedXMargin);\n defaultMargin.bottom = DEFAULT_BOTTOM_FOR_TOP_AXIS;\n } else {\n defaultMargin.bottom = Math.max(defaultMargin.bottom, computedXMargin);\n }\n return defaultMargin;\n }, [options, theme, yTicks]);\n};","import { useState, useCallback, useRef } from 'react';\n\n/**\n * Hook to measure the width and height of a DOM element.\n * Returns a ref callback to attach to the element and the current dimensions in pixels.\n *\n * @param {object} props - Optional props.\n * @param {number} props.initialWidth - The initial width to use.\n * @param {number} props.initialHeight - The initial height to use.\n *\n * @return {[Function, number, number]} A tuple containing a ref callback, width, and height in pixels\n */\nexport function useElementSize< T extends HTMLElement = HTMLDivElement >( {\n\tinitialWidth = 0,\n\tinitialHeight = 0,\n}: {\n\tinitialWidth?: number;\n\tinitialHeight?: number;\n} = {} ): [ ( node: T | null ) => void, number, number ] {\n\tconst [ width, setWidth ] = useState( initialWidth );\n\tconst [ height, setHeight ] = useState( initialHeight );\n\tconst observerRef = useRef< ResizeObserver | null >( null );\n\n\tconst refCallback = useCallback( ( node: T | null ) => {\n\t\tif ( observerRef.current ) {\n\t\t\tobserverRef.current.disconnect();\n\t\t\tobserverRef.current = null;\n\t\t}\n\t\tif ( node ) {\n\t\t\tconst handleResize = () => {\n\t\t\t\tconst rect = node.getBoundingClientRect();\n\t\t\t\tsetWidth( rect.width || 0 );\n\t\t\t\tsetHeight( rect.height || 0 );\n\t\t\t};\n\t\t\thandleResize();\n\t\t\tconst resizeObserver = new ResizeObserver( handleResize );\n\t\t\tresizeObserver.observe( node );\n\t\t\tobserverRef.current = resizeObserver;\n\t\t}\n\t}, [] );\n\n\treturn [ refCallback, width, height ];\n}\n","import { useCallback, useRef, useState } from 'react';\n\n/**\n * Hook to detect if text content is truncated within its container.\n * Uses ResizeObserver to dynamically track changes in element size.\n *\n * @param enabled - Whether truncation detection should be active. Defaults to true.\n * @return A tuple containing:\n * - [0] refCallback: Function to attach to the text element as a ref\n * - [1] isTruncated: Boolean indicating if the text is currently truncated\n *\n * @example\n * ```tsx\n * const [textRef, isTruncated] = useTextTruncation(true);\n *\n * return (\n * <span ref={textRef} title={isTruncated ? fullText : undefined}>\n * {text}\n * </span>\n * );\n * ```\n */\nexport function useTextTruncation(\n\tenabled: boolean = true\n): [ ( node: HTMLElement | null ) => void, boolean ] {\n\tconst [ isTruncated, setIsTruncated ] = useState( false );\n\tconst observerRef = useRef< ResizeObserver | null >( null );\n\n\tconst refCallback = useCallback(\n\t\t( node: HTMLElement | null ) => {\n\t\t\t// Cleanup existing observer\n\t\t\tif ( observerRef.current ) {\n\t\t\t\tobserverRef.current.disconnect();\n\t\t\t\tobserverRef.current = null;\n\t\t\t}\n\n\t\t\tif ( node && enabled ) {\n\t\t\t\tconst checkTruncation = () => {\n\t\t\t\t\t// Check if content width exceeds container width (indicates truncation)\n\t\t\t\t\tconst truncated = node.scrollWidth > node.clientWidth;\n\t\t\t\t\tsetIsTruncated( truncated );\n\t\t\t\t};\n\n\t\t\t\t// Initial check\n\t\t\t\tcheckTruncation();\n\n\t\t\t\t// Watch for size changes\n\t\t\t\tconst resizeObserver = new ResizeObserver( checkTruncation );\n\t\t\t\tresizeObserver.observe( node );\n\t\t\t\tobserverRef.current = resizeObserver;\n\t\t\t} else {\n\t\t\t\tsetIsTruncated( false );\n\t\t\t}\n\t\t},\n\t\t[ enabled ]\n\t);\n\n\treturn [ refCallback, isTruncated ];\n}\n","import { useMemo } from 'react';\nimport type { SeriesData, DataPointDate } from '../types';\n\nexport type EnhancedDataPoint = DataPointDate & {\n\tvisualValue?: number;\n};\n\nexport interface EnhancedSeriesData extends Omit< SeriesData, 'data' > {\n\tdata: EnhancedDataPoint[];\n}\n\nexport interface UseZeroValueDisplayOptions {\n\tenabled: boolean;\n\t/**\n\t * The pixel length of the value axis (height for vertical charts, width for\n\t * horizontal charts). Used to calculate a minimum visible value that ensures\n\t * zero-value bars are at least MIN_PIXEL_HEIGHT pixels tall along that axis.\n\t */\n\tvalueAxisLength?: number;\n}\n\n/**\n * Minimum pixel size for near-zero bars (non-zero values that would render too small).\n * Using 3px to be visible but not misleading - larger values might look like actual data.\n */\nconst MIN_PIXEL_SIZE = 3;\n\n/**\n * Pixel size for zero-value bars (1px less than near-zero to be visually distinguishable).\n */\nconst ZERO_PIXEL_SIZE = MIN_PIXEL_SIZE - 1;\n\nexport const useZeroValueDisplay = (\n\tdata: SeriesData[],\n\toptions: UseZeroValueDisplayOptions = { enabled: false }\n): SeriesData[] | EnhancedSeriesData[] => {\n\tconst { enabled, valueAxisLength } = options;\n\n\treturn useMemo( () => {\n\t\tif ( ! enabled || ! valueAxisLength || valueAxisLength <= 0 ) return data;\n\n\t\t// Find max absolute value\n\t\tlet maxAbsoluteValue = 0;\n\t\tfor ( const series of data ) {\n\t\t\tfor ( const point of series.data ) {\n\t\t\t\tif ( point.value !== null && point.value !== 0 ) {\n\t\t\t\t\tmaxAbsoluteValue = Math.max( maxAbsoluteValue, Math.abs( point.value ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( maxAbsoluteValue === 0 ) return data;\n\n\t\t// Calculate values that render as specific pixel sizes, clamped to maxAbsoluteValue\n\t\t// to prevent visual distortion when valueAxisLength is very small\n\t\tconst minNonZeroValue = Math.min(\n\t\t\t( MIN_PIXEL_SIZE / valueAxisLength ) * maxAbsoluteValue,\n\t\t\tmaxAbsoluteValue\n\t\t);\n\t\tconst zeroVisualValue = Math.min(\n\t\t\t( ZERO_PIXEL_SIZE / valueAxisLength ) * maxAbsoluteValue,\n\t\t\tmaxAbsoluteValue\n\t\t);\n\n\t\treturn data.map( series => ( {\n\t\t\t...series,\n\t\t\tdata: series.data.map( ( point: DataPointDate ): EnhancedDataPoint => {\n\t\t\t\t// Zero values get a smaller visual representation (2px)\n\t\t\t\tif ( point.value === 0 ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...point,\n\t\t\t\t\t\tvisualValue: zeroVisualValue,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Null values should remain untouched\n\t\t\t\tif ( point.value === null ) {\n\t\t\t\t\treturn point;\n\t\t\t\t}\n\n\t\t\t\tconst absValue = Math.abs( point.value );\n\n\t\t\t\t// Near-zero values that would render below MIN_PIXEL_SIZE get boosted to 3px\n\t\t\t\t// Preserve the sign for negative values\n\t\t\t\tif ( absValue < minNonZeroValue ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...point,\n\t\t\t\t\t\tvisualValue: Math.sign( point.value ) * minNonZeroValue,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn point;\n\t\t\t} ),\n\t\t} ) );\n\t}, [ data, enabled, valueAxisLength ] );\n};\n","import { useMemo } from 'react';\n\n/**\n * Data point interface for charts with interactive legends.\n * Requires label for series identification, value for calculations, and percentage for display.\n */\ninterface DataPointWithPercentage {\n\tlabel: string;\n\tvalue: number;\n\tpercentage: number;\n}\n\n/**\n * Parameters for the useInteractiveLegendData hook.\n */\ninterface UseInteractiveLegendDataParams< T extends DataPointWithPercentage > {\n\t/** The chart data to filter based on legend visibility */\n\tdata: T[];\n\t/** Unique chart identifier, required for interactive legends */\n\tchartId: string | undefined;\n\t/** Whether interactive legend filtering is enabled */\n\tlegendInteractive: boolean;\n\t/** Function to check if a series is visible in the legend */\n\tisSeriesVisible: ( chartId: string, label: string ) => boolean;\n}\n\n/**\n * Return value from the useInteractiveLegendData hook.\n */\ninterface UseInteractiveLegendDataResult< T extends DataPointWithPercentage > {\n\t/** Filtered data array containing only visible segments with recalculated percentages */\n\tvisibleData: T[];\n\t/** Boolean indicating if all segments are hidden */\n\tallSegmentsHidden: boolean;\n\t/**\n\t * Legend data with recalculated percentages for visible items.\n\t * Uses original data for hidden items, but shows recalculated percentages for visible ones.\n\t * This ensures the legend displays accurate percentages while maintaining all entries.\n\t */\n\tlegendData: T[];\n}\n\n/**\n * Custom hook to filter and recalculate chart data for interactive legends.\n *\n * When interactive legends are enabled, this hook:\n * 1. Filters data to show only visible series based on legend selection\n * 2. Recalculates percentages so visible segments total 100%\n * 3. Tracks whether all segments are hidden to show empty state\n *\n * This is particularly useful for pie charts, donut charts, and semi-circle charts\n * where segment visibility and percentages need to be dynamically adjusted.\n *\n * @example\n * ```tsx\n * const { visibleData, allSegmentsHidden, legendData } = useInteractiveLegendData({\n * data: chartData,\n * chartId: 'my-pie-chart',\n * legendInteractive: true,\n * isSeriesVisible: (id, label) => context.isSeriesVisible(id, label),\n * });\n *\n * // Use legendData for creating legend items (shows recalculated percentages)\n * const legendItems = useChartLegendItems(legendData, legendOptions);\n *\n * if (allSegmentsHidden) {\n * return <EmptyState />;\n * }\n *\n * // Use visibleData for rendering the chart (only visible segments)\n * return <PieChart data={visibleData} />;\n * ```\n *\n * @param params - Configuration object for the hook\n * @param params.data - The chart data to filter\n * @param params.chartId - Unique identifier for the chart (required for interactive mode)\n * @param params.legendInteractive - Whether to enable interactive filtering\n * @param params.isSeriesVisible - Function to check series visibility\n * @return Object containing visibleData, allSegmentsHidden flag, and legendData with recalculated percentages\n */\nexport const useInteractiveLegendData = < T extends DataPointWithPercentage >( {\n\tdata,\n\tchartId,\n\tlegendInteractive,\n\tisSeriesVisible,\n}: UseInteractiveLegendDataParams< T > ): UseInteractiveLegendDataResult< T > => {\n\t// Filter and recalculate data for interactive legends\n\tconst visibleData = useMemo( () => {\n\t\t// If interactive mode is disabled or no chartId, return all data unchanged\n\t\tif ( ! chartId || ! legendInteractive ) {\n\t\t\treturn data;\n\t\t}\n\n\t\t// Filter to only visible segments based on legend state\n\t\tconst filtered = data.filter( segment => isSeriesVisible( chartId, segment.label ) );\n\n\t\t// If no segments are visible, return empty array\n\t\tif ( filtered.length === 0 ) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// Recalculate percentages so visible segments total 100%\n\t\tconst totalValue = filtered.reduce( ( sum, segment ) => sum + segment.value, 0 );\n\n\t\treturn filtered.map( segment => ( {\n\t\t\t...segment,\n\t\t\tpercentage: totalValue > 0 ? ( segment.value / totalValue ) * 100 : 0,\n\t\t} ) );\n\t}, [ data, chartId, isSeriesVisible, legendInteractive ] );\n\n\t// Check if all segments are hidden (only relevant in interactive mode)\n\tconst allSegmentsHidden = useMemo( () => {\n\t\treturn legendInteractive && visibleData.length === 0;\n\t}, [ legendInteractive, visibleData ] );\n\n\t// Prepare legend data with recalculated percentages for visible items\n\t// This maintains all legend entries but shows updated percentages for visible segments\n\tconst legendData = useMemo( () => {\n\t\tif ( ! legendInteractive || ! chartId ) {\n\t\t\treturn data;\n\t\t}\n\n\t\t// Map original data to show recalculated percentages for visible items\n\t\treturn data.map( segment => {\n\t\t\tconst isVisible = isSeriesVisible( chartId, segment.label );\n\t\t\tif ( ! isVisible ) {\n\t\t\t\t// Return original data for hidden items\n\t\t\t\treturn segment;\n\t\t\t}\n\n\t\t\t// For visible items, find the recalculated percentage from visibleData\n\t\t\tconst recalculated = visibleData.find( d => d.label === segment.label );\n\t\t\treturn recalculated || segment;\n\t\t} );\n\t}, [ data, visibleData, legendInteractive, chartId, isSeriesVisible ] );\n\n\treturn { visibleData, allSegmentsHidden, legendData };\n};\n","import { useState, useEffect } from 'react';\n\n// 'no-preference' returns false in unsupported browsers,\n// causing a safe fallback to reduced motion instead of animating.\nconst QUERY = '(prefers-reduced-motion: no-preference)';\n\nconst getInitialState = () => ! window.matchMedia( QUERY ).matches;\n\n/**\n * Custom hook to determine if the user prefers reduced motion.\n * @return {boolean} A boolean indicating the user's preference for reduced motion.\n */\nexport function usePrefersReducedMotion() {\n\tconst [ prefersReducedMotion, setPrefersReducedMotion ] = useState( getInitialState );\n\n\tuseEffect( () => {\n\t\tconst mediaQueryList = window.matchMedia( QUERY );\n\n\t\tconst listener = event => {\n\t\t\tsetPrefersReducedMotion( ! event.matches );\n\t\t};\n\n\t\tmediaQueryList.addEventListener( 'change', listener );\n\n\t\treturn () => {\n\t\t\tmediaQueryList.removeEventListener( 'change', listener );\n\t\t};\n\t}, [] );\n\n\treturn prefersReducedMotion;\n}\n"]}
|