@automattic/charts 0.56.2 → 0.56.4

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 (184) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/charts/bar-chart/index.cjs +5 -5
  3. package/dist/charts/bar-chart/index.css +12 -0
  4. package/dist/charts/bar-chart/index.css.map +1 -1
  5. package/dist/charts/bar-chart/index.js +4 -4
  6. package/dist/charts/bar-list-chart/index.cjs +6 -6
  7. package/dist/charts/bar-list-chart/index.css +12 -0
  8. package/dist/charts/bar-list-chart/index.css.map +1 -1
  9. package/dist/charts/bar-list-chart/index.js +5 -5
  10. package/dist/charts/conversion-funnel-chart/index.cjs +5 -3
  11. package/dist/charts/conversion-funnel-chart/index.cjs.map +1 -1
  12. package/dist/charts/conversion-funnel-chart/index.css +14 -1
  13. package/dist/charts/conversion-funnel-chart/index.css.map +1 -1
  14. package/dist/charts/conversion-funnel-chart/index.d.cts +2 -0
  15. package/dist/charts/conversion-funnel-chart/index.d.ts +2 -0
  16. package/dist/charts/conversion-funnel-chart/index.js +4 -2
  17. package/dist/charts/geo-chart/index.cjs +4 -4
  18. package/dist/charts/geo-chart/index.css +12 -0
  19. package/dist/charts/geo-chart/index.css.map +1 -1
  20. package/dist/charts/geo-chart/index.js +3 -3
  21. package/dist/charts/leaderboard-chart/index.cjs +5 -5
  22. package/dist/charts/leaderboard-chart/index.css +12 -0
  23. package/dist/charts/leaderboard-chart/index.css.map +1 -1
  24. package/dist/charts/leaderboard-chart/index.js +4 -4
  25. package/dist/charts/line-chart/index.cjs +5 -5
  26. package/dist/charts/line-chart/index.css +12 -0
  27. package/dist/charts/line-chart/index.css.map +1 -1
  28. package/dist/charts/line-chart/index.js +4 -4
  29. package/dist/charts/pie-chart/index.cjs +7 -7
  30. package/dist/charts/pie-chart/index.css +12 -0
  31. package/dist/charts/pie-chart/index.css.map +1 -1
  32. package/dist/charts/pie-chart/index.js +6 -6
  33. package/dist/charts/pie-semi-circle-chart/index.cjs +7 -7
  34. package/dist/charts/pie-semi-circle-chart/index.css +12 -0
  35. package/dist/charts/pie-semi-circle-chart/index.css.map +1 -1
  36. package/dist/charts/pie-semi-circle-chart/index.js +6 -6
  37. package/dist/charts/sparkline/index.cjs +6 -6
  38. package/dist/charts/sparkline/index.css +12 -0
  39. package/dist/charts/sparkline/index.css.map +1 -1
  40. package/dist/charts/sparkline/index.js +5 -5
  41. package/dist/{chunk-OTZT3MC2.cjs → chunk-2A34OA5O.cjs} +19 -20
  42. package/dist/chunk-2A34OA5O.cjs.map +1 -0
  43. package/dist/chunk-4YYROZDJ.cjs +375 -0
  44. package/dist/chunk-4YYROZDJ.cjs.map +1 -0
  45. package/dist/{chunk-YYQ4IK5V.cjs → chunk-5N77S5N3.cjs} +103 -80
  46. package/dist/chunk-5N77S5N3.cjs.map +1 -0
  47. package/dist/chunk-66BXSWMW.cjs +1065 -0
  48. package/dist/chunk-66BXSWMW.cjs.map +1 -0
  49. package/dist/{chunk-CEZGL6YP.js → chunk-6CCZL2JJ.js} +15 -7
  50. package/dist/chunk-6CCZL2JJ.js.map +1 -0
  51. package/dist/{chunk-NW3RUYK2.cjs → chunk-7QDEU3KN.cjs} +15 -22
  52. package/dist/chunk-7QDEU3KN.cjs.map +1 -0
  53. package/dist/{chunk-H34CJSR6.js → chunk-AWNCAKZY.js} +367 -358
  54. package/dist/chunk-AWNCAKZY.js.map +1 -0
  55. package/dist/{chunk-5XI443YP.js → chunk-BPYKWMI7.js} +72 -64
  56. package/dist/chunk-BPYKWMI7.js.map +1 -0
  57. package/dist/{chunk-7UJPVCMB.cjs → chunk-CERFRCXD.cjs} +265 -262
  58. package/dist/chunk-CERFRCXD.cjs.map +1 -0
  59. package/dist/chunk-CMHPXSCI.js +351 -0
  60. package/dist/chunk-CMHPXSCI.js.map +1 -0
  61. package/dist/chunk-EBDUXL5K.js +421 -0
  62. package/dist/chunk-EBDUXL5K.js.map +1 -0
  63. package/dist/{chunk-2VPPTJS2.js → chunk-FZYJM5PN.js} +256 -253
  64. package/dist/chunk-FZYJM5PN.js.map +1 -0
  65. package/dist/chunk-GBDFC74U.cjs +165 -0
  66. package/dist/chunk-GBDFC74U.cjs.map +1 -0
  67. package/dist/{chunk-ODF5O5PV.cjs → chunk-HNEG3EFJ.cjs} +154 -170
  68. package/dist/chunk-HNEG3EFJ.cjs.map +1 -0
  69. package/dist/{chunk-SRXJLAKG.cjs → chunk-I2276W3I.cjs} +28 -37
  70. package/dist/chunk-I2276W3I.cjs.map +1 -0
  71. package/dist/chunk-KKPZ4MVF.js +375 -0
  72. package/dist/chunk-KKPZ4MVF.js.map +1 -0
  73. package/dist/chunk-KMYJJTSR.cjs +421 -0
  74. package/dist/chunk-KMYJJTSR.cjs.map +1 -0
  75. package/dist/{chunk-A3AEEGKR.js → chunk-KXRWNFQJ.js} +20 -21
  76. package/dist/chunk-KXRWNFQJ.js.map +1 -0
  77. package/dist/{chunk-TVV7ZI7C.cjs → chunk-LSV7F26B.cjs} +362 -353
  78. package/dist/chunk-LSV7F26B.cjs.map +1 -0
  79. package/dist/{chunk-T4J6TI55.js → chunk-M7PRGJFE.js} +102 -79
  80. package/dist/chunk-M7PRGJFE.js.map +1 -0
  81. package/dist/{chunk-TNRKEBTA.js → chunk-PGJAZN2H.js} +148 -164
  82. package/dist/{chunk-TNRKEBTA.js.map → chunk-PGJAZN2H.js.map} +1 -1
  83. package/dist/chunk-R23BFDIW.js +1065 -0
  84. package/dist/chunk-R23BFDIW.js.map +1 -0
  85. package/dist/{chunk-HIWNB5PK.cjs → chunk-RCY6XLGU.cjs} +13 -5
  86. package/dist/chunk-RCY6XLGU.cjs.map +1 -0
  87. package/dist/chunk-RSYD434G.cjs +351 -0
  88. package/dist/chunk-RSYD434G.cjs.map +1 -0
  89. package/dist/{chunk-C33AQZEC.js → chunk-TYIH5LMV.js} +16 -23
  90. package/dist/chunk-TYIH5LMV.js.map +1 -0
  91. package/dist/chunk-WMWAUOQ4.js +165 -0
  92. package/dist/chunk-WMWAUOQ4.js.map +1 -0
  93. package/dist/chunk-XWYZIFZW.js +66 -0
  94. package/dist/chunk-XWYZIFZW.js.map +1 -0
  95. package/dist/{chunk-7HROSZRS.cjs → chunk-Y3NNQMAX.cjs} +70 -62
  96. package/dist/chunk-Y3NNQMAX.cjs.map +1 -0
  97. package/dist/chunk-ZXEFMKVP.cjs +120 -0
  98. package/dist/chunk-ZXEFMKVP.cjs.map +1 -0
  99. package/dist/chunk-ZY4FXLMM.js +120 -0
  100. package/dist/chunk-ZY4FXLMM.js.map +1 -0
  101. package/dist/components/legend/index.cjs +2 -2
  102. package/dist/components/legend/index.css +12 -0
  103. package/dist/components/legend/index.css.map +1 -1
  104. package/dist/components/legend/index.js +1 -1
  105. package/dist/components/tooltip/index.cjs +2 -2
  106. package/dist/components/tooltip/index.js +1 -1
  107. package/dist/components/trend-indicator/index.cjs +2 -2
  108. package/dist/components/trend-indicator/index.js +1 -1
  109. package/dist/hooks/index.cjs +4 -2
  110. package/dist/hooks/index.cjs.map +1 -1
  111. package/dist/hooks/index.css +12 -0
  112. package/dist/hooks/index.css.map +1 -1
  113. package/dist/hooks/index.d.cts +28 -2
  114. package/dist/hooks/index.d.ts +28 -2
  115. package/dist/hooks/index.js +3 -1
  116. package/dist/index.cjs +18 -18
  117. package/dist/index.cjs.map +1 -1
  118. package/dist/index.css +14 -1
  119. package/dist/index.css.map +1 -1
  120. package/dist/index.d.cts +1 -1
  121. package/dist/index.d.ts +1 -1
  122. package/dist/index.js +17 -17
  123. package/dist/providers/index.cjs +2 -2
  124. package/dist/providers/index.css +12 -0
  125. package/dist/providers/index.css.map +1 -1
  126. package/dist/providers/index.d.cts +1 -1
  127. package/dist/providers/index.d.ts +1 -1
  128. package/dist/providers/index.js +1 -1
  129. package/dist/{themes-DQs9rbN5.d.cts → themes-BDVaIfBz.d.cts} +9 -0
  130. package/dist/{themes-CRV5fVzJ.d.ts → themes-mcS8QNkQ.d.ts} +9 -0
  131. package/package.json +7 -4
  132. package/src/charts/conversion-funnel-chart/conversion-funnel-chart.module.scss +2 -1
  133. package/src/charts/conversion-funnel-chart/conversion-funnel-chart.tsx +16 -6
  134. package/src/charts/conversion-funnel-chart/test/conversion-funnel-chart.test.tsx +34 -0
  135. package/src/charts/conversion-funnel-chart/types.ts +2 -0
  136. package/src/charts/pie-chart/pie-chart.tsx +2 -3
  137. package/src/hooks/index.ts +1 -0
  138. package/src/hooks/test/use-tooltip-portal-relocator.test.ts +216 -0
  139. package/src/hooks/use-tooltip-portal-relocator.module.scss +10 -0
  140. package/src/hooks/use-tooltip-portal-relocator.ts +177 -0
  141. package/src/providers/chart-context/global-charts-provider.tsx +18 -1
  142. package/tsup.config.ts +11 -0
  143. package/dist/chunk-2VPPTJS2.js.map +0 -1
  144. package/dist/chunk-5XI443YP.js.map +0 -1
  145. package/dist/chunk-7HROSZRS.cjs.map +0 -1
  146. package/dist/chunk-7UJPVCMB.cjs.map +0 -1
  147. package/dist/chunk-A3AEEGKR.js.map +0 -1
  148. package/dist/chunk-C33AQZEC.js.map +0 -1
  149. package/dist/chunk-CEZGL6YP.js.map +0 -1
  150. package/dist/chunk-COOC2TVQ.js +0 -167
  151. package/dist/chunk-COOC2TVQ.js.map +0 -1
  152. package/dist/chunk-EJHLLXBV.js +0 -362
  153. package/dist/chunk-EJHLLXBV.js.map +0 -1
  154. package/dist/chunk-FWMJ2FR2.js +0 -121
  155. package/dist/chunk-FWMJ2FR2.js.map +0 -1
  156. package/dist/chunk-GRYNIPWH.cjs +0 -385
  157. package/dist/chunk-GRYNIPWH.cjs.map +0 -1
  158. package/dist/chunk-H34CJSR6.js.map +0 -1
  159. package/dist/chunk-HIWNB5PK.cjs.map +0 -1
  160. package/dist/chunk-IZWC33YN.cjs +0 -357
  161. package/dist/chunk-IZWC33YN.cjs.map +0 -1
  162. package/dist/chunk-KOF32DBL.cjs +0 -1058
  163. package/dist/chunk-KOF32DBL.cjs.map +0 -1
  164. package/dist/chunk-LHWRZMF7.cjs +0 -362
  165. package/dist/chunk-LHWRZMF7.cjs.map +0 -1
  166. package/dist/chunk-MFRS2PEY.cjs +0 -121
  167. package/dist/chunk-MFRS2PEY.cjs.map +0 -1
  168. package/dist/chunk-MMDLXS6O.js +0 -75
  169. package/dist/chunk-MMDLXS6O.js.map +0 -1
  170. package/dist/chunk-NW3RUYK2.cjs.map +0 -1
  171. package/dist/chunk-ODF5O5PV.cjs.map +0 -1
  172. package/dist/chunk-OTZT3MC2.cjs.map +0 -1
  173. package/dist/chunk-SBRMWDWM.js +0 -357
  174. package/dist/chunk-SBRMWDWM.js.map +0 -1
  175. package/dist/chunk-SRXJLAKG.cjs.map +0 -1
  176. package/dist/chunk-T4J6TI55.js.map +0 -1
  177. package/dist/chunk-TVV7ZI7C.cjs.map +0 -1
  178. package/dist/chunk-XVMXWV3C.cjs +0 -167
  179. package/dist/chunk-XVMXWV3C.cjs.map +0 -1
  180. package/dist/chunk-YYQ4IK5V.cjs.map +0 -1
  181. package/dist/chunk-ZDNCF642.js +0 -1058
  182. package/dist/chunk-ZDNCF642.js.map +0 -1
  183. package/dist/chunk-ZWBUEHKF.js +0 -385
  184. package/dist/chunk-ZWBUEHKF.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/line-chart/line-chart.tsx","../src/charts/private/default-glyph/default-glyph.tsx","../src/charts/line-chart/line-chart.module.scss","../src/charts/line-chart/private/line-chart-annotation-label-popover.tsx","../src/charts/line-chart/private/line-chart-annotations-overlay.tsx","../src/charts/line-chart/private/line-chart-annotation.tsx","../src/charts/line-chart/private/line-chart-glyph.tsx"],"sourcesContent":["import { formatNumberCompact, formatNumber } from '@automattic/number-formatters';\nimport { curveCatmullRom, curveLinear, curveMonotoneX } from '@visx/curve';\nimport { LinearGradient } from '@visx/gradient';\nimport { scaleTime } from '@visx/scale';\nimport { XYChart, AreaSeries, Grid, Axis, DataContext } from '@visx/xychart';\nimport { __ } from '@wordpress/i18n';\nimport { Stack } from '@wordpress/ui';\nimport clsx from 'clsx';\nimport { differenceInHours, differenceInYears } from 'date-fns';\nimport { useMemo, useContext, forwardRef, useImperativeHandle, useState, useRef, createElement as _createElement } from 'react';\nimport { Legend, useChartLegendItems } from '../../components/legend';\nimport { AccessibleTooltip, useKeyboardNavigation } from '../../components/tooltip';\nimport { useXYChartTheme, useChartDataTransform, useChartMargin, useElementHeight, useHasLegendChild, usePrefersReducedMotion } from '../../hooks';\nimport { GlobalChartsProvider, GlobalChartsContext, useChartId, useChartRegistration, useGlobalChartsContext, useGlobalChartsTheme } from '../../providers';\nimport { attachSubComponents } from '../../utils';\nimport { DefaultGlyph } from '../private/default-glyph';\nimport { SingleChartContext } from '../private/single-chart-context';\nimport { withResponsive } from '../private/with-responsive';\nimport styles from './line-chart.module.scss';\nimport { LineChartAnnotation, LineChartAnnotationsOverlay, LineChartGlyph } from './private';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst X_TICK_WIDTH = 60;\nconst defaultRenderGlyph = props => {\n return /*#__PURE__*/_createElement(DefaultGlyph, {\n ...props,\n key: props.key\n });\n};\nconst toNumber = val => {\n const num = typeof val === 'number' ? val : parseFloat(val);\n return isNaN(num) ? undefined : num;\n};\n\n/**\n * Determines the curve type for the line chart based on the provided type and smoothing parameters\n *\n * @param {CurveType} type - The explicit curve type to use\n * @param {boolean} smoothing - Legacy smoothing parameter\n * @return The curve function to use for the line\n */\nconst getCurveType = (type, smoothing) => {\n // If no type specified, use legacy smoothing behavior\n if (!type) {\n return smoothing ? curveCatmullRom : curveLinear;\n }\n\n // Handle explicit curve types\n switch (type) {\n case 'smooth':\n return curveCatmullRom;\n case 'monotone':\n return curveMonotoneX;\n case 'linear':\n return curveLinear;\n default:\n return curveLinear;\n }\n};\nconst renderDefaultTooltip = params => {\n const {\n tooltipData\n } = params;\n const nearestDatum = tooltipData?.nearestDatum?.datum;\n if (!nearestDatum) return null;\n const tooltipPoints = Object.entries(tooltipData?.datumByKey || {}).map(([key, {\n datum\n }]) => ({\n key,\n value: datum.value\n })).sort((a, b) => b.value - a.value);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: styles['line-chart__tooltip'],\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: styles['line-chart__tooltip-date'],\n children: nearestDatum.date?.toLocaleDateString()\n }), tooltipPoints.map(point => /*#__PURE__*/_jsxs(\"div\", {\n className: styles['line-chart__tooltip-row'],\n children: [/*#__PURE__*/_jsxs(\"span\", {\n className: styles['line-chart__tooltip-label'],\n children: [point.key, \":\"]\n }), /*#__PURE__*/_jsx(\"span\", {\n className: styles['line-chart__tooltip-value'],\n children: formatNumber(point.value)\n })]\n }, point.key))]\n });\n};\nconst formatYearTick = timestamp => {\n const date = new Date(timestamp);\n return date.toLocaleDateString(undefined, {\n year: 'numeric'\n });\n};\nconst formatDateTick = timestamp => {\n const date = new Date(timestamp);\n return date.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric'\n });\n};\nconst formatHourTick = timestamp => {\n const date = new Date(timestamp);\n return date.toLocaleTimeString(undefined, {\n hour: 'numeric',\n hour12: true\n });\n};\nconst getFormatter = sortedData => {\n const minX = Math.min(...sortedData.map(datom => datom.data.at(0)?.date));\n const maxX = Math.max(...sortedData.map(datom => datom.data.at(-1)?.date));\n const diffInHours = Math.abs(differenceInHours(maxX, minX));\n if (diffInHours <= 24) {\n return formatHourTick;\n }\n const diffInYears = Math.abs(differenceInYears(maxX, minX));\n if (diffInYears <= 1) {\n return formatDateTick;\n }\n return formatYearTick;\n};\nconst guessOptimalNumTicks = (data, chartWidth, tickFormatter) => {\n const minX = Math.min(...data.map(datom => datom.data.at(0)?.date));\n const maxX = Math.max(...data.map(datom => datom.data.at(-1)?.date));\n const xScale = scaleTime({\n domain: [minX, maxX]\n });\n\n // Calculate upper bound of tick numbers based on data points and chart width\n const upperBound = Math.min(data[0]?.data.length || 3,\n // A sane fallback to avoid NaN when no data is present\n Math.ceil(chartWidth / X_TICK_WIDTH));\n let secondBestGuess = 1; // a tick number that's no greater than upperBound\n\n for (let numTicks = upperBound; numTicks > 1; --numTicks) {\n const ticks = xScale.ticks(numTicks).map(d => tickFormatter(d.getTime()));\n\n // The .ticks() function doesn't properly respect the requested number of ticks, so we need to check the length\n if (ticks.length > upperBound) {\n continue;\n }\n secondBestGuess = Math.max(secondBestGuess, ticks.length);\n const uniqueTicks = Array.from(new Set(ticks));\n if (uniqueTicks.length === 1) {\n // All ticks are the same, so skip further processing\n return 1;\n }\n\n // Example: OCT 1 JAN 1 APR 1 JUL 1 OCT 1\n // Here, the two OCTs are not duplicates as they represent October of two different years.\n const hasConsecutiveDuplicate = ticks.some((tick, idx) => idx > 0 && tick === ticks[idx - 1]);\n if (hasConsecutiveDuplicate) {\n continue;\n }\n return ticks.length;\n }\n return secondBestGuess;\n};\nconst validateData = data => {\n if (!data?.length) return 'No data available';\n const hasInvalidData = data.some(series => series.data.some(point => isNaN(point.value) || point.value === null || point.value === undefined || 'date' in point && point.date && isNaN(point.date.getTime())));\n if (hasInvalidData) return 'Invalid data';\n return null;\n};\n\n// Inner component to access DataContext and provide scale data to ref\nconst LineChartScalesRef = ({\n chartRef,\n width,\n height,\n margin\n}) => {\n const context = useContext(DataContext);\n useImperativeHandle(chartRef, () => ({\n getScales: () => {\n if (!context?.xScale || !context?.yScale) {\n return null;\n }\n return {\n xScale: context.xScale,\n yScale: context.yScale\n };\n },\n getChartDimensions: () => ({\n width,\n height,\n margin: margin || {}\n })\n }), [context, width, height, margin]);\n return null; // This component only provides the ref interface\n};\nconst LineChartInternal = /*#__PURE__*/forwardRef(({\n data,\n chartId: providedChartId,\n width,\n height,\n className,\n margin,\n withTooltips = true,\n withTooltipCrosshairs,\n showLegend = false,\n legendOrientation = 'horizontal',\n legendAlignment = 'center',\n legendPosition = 'bottom',\n legendMaxWidth,\n legendTextOverflow = 'wrap',\n legendItemClassName,\n renderGlyph = defaultRenderGlyph,\n glyphStyle = {},\n legendShape = 'line',\n withLegendGlyph = false,\n withGradientFill = false,\n smoothing = true,\n curveType,\n renderTooltip = renderDefaultTooltip,\n withStartGlyphs = false,\n withEndGlyphs = false,\n legendInteractive = false,\n animation,\n options = {},\n onPointerDown = undefined,\n onPointerUp = undefined,\n onPointerMove = undefined,\n onPointerOut = undefined,\n children,\n gridVisibility,\n gap = 'md'\n}, ref) => {\n const providerTheme = useGlobalChartsTheme();\n const theme = useXYChartTheme(data);\n const chartId = useChartId(providedChartId);\n const [svgWrapperRef, svgWrapperHeight] = useElementHeight();\n const chartRef = useRef(null);\n const [selectedIndex, setSelectedIndex] = useState(undefined);\n const [isNavigating, setIsNavigating] = useState(false);\n const internalChartRef = useRef(null);\n\n // Check if children contain a Legend component (composition pattern)\n const hasLegendChild = useHasLegendChild(children);\n\n // Use the measured SVG wrapper height, falling back to the passed height if provided.\n // When there's a legend (via prop or composition), we must wait for measurement because\n // the legend takes space and the svg-wrapper height will be less than the total height.\n const chartHeight = svgWrapperHeight > 0 ? svgWrapperHeight : height;\n const hasLegend = showLegend || hasLegendChild;\n const isWaitingForMeasurement = hasLegend ? svgWrapperHeight === 0 : !chartHeight;\n\n // Forward the external ref to the internal ref\n useImperativeHandle(ref, () => ({\n getScales: () => internalChartRef.current?.getScales() || null,\n getChartDimensions: () => internalChartRef.current?.getChartDimensions() || {\n width: 0,\n height: 0,\n margin: {}\n }\n }), [internalChartRef]);\n const dataSorted = useChartDataTransform(data);\n const {\n getElementStyles,\n isSeriesVisible\n } = useGlobalChartsContext();\n\n // Add visibility information to series when using interactive legends\n const seriesWithVisibility = useMemo(() => {\n if (!chartId || !legendInteractive) {\n return dataSorted.map((series, index) => ({\n series,\n index,\n isVisible: true\n }));\n }\n return dataSorted.map((series, index) => ({\n series,\n index,\n isVisible: isSeriesVisible(chartId, series.label)\n }));\n }, [dataSorted, chartId, isSeriesVisible, legendInteractive]);\n\n // Check if all series are hidden\n const allSeriesHidden = useMemo(() => {\n return seriesWithVisibility.every(({\n isVisible\n }) => !isVisible);\n }, [seriesWithVisibility]);\n\n // Use the keyboard navigation hook\n const {\n tooltipRef,\n onChartFocus,\n onChartBlur,\n onChartKeyDown\n } = useKeyboardNavigation({\n selectedIndex,\n setSelectedIndex,\n isNavigating,\n setIsNavigating,\n chartRef,\n totalPoints: dataSorted[0]?.data.length || 0\n });\n const chartOptions = useMemo(() => {\n const formatter = options?.axis?.x?.tickFormat || getFormatter(dataSorted);\n return {\n axis: {\n x: {\n orientation: 'bottom',\n numTicks: guessOptimalNumTicks(dataSorted, width, formatter),\n tickFormat: formatter,\n display: true,\n ...options?.axis?.x\n },\n y: {\n orientation: 'left',\n numTicks: 4,\n tickFormat: formatNumberCompact,\n display: true,\n ...options?.axis?.y\n }\n },\n xScale: {\n type: 'time',\n ...options?.xScale\n },\n yScale: {\n type: 'linear',\n nice: true,\n zero: false,\n ...options?.yScale\n }\n };\n }, [options, dataSorted, width]);\n const tooltipRenderGlyph = useMemo(() => {\n return props => {\n const seriesIndex = dataSorted.findIndex(series => series.label === props.key || series.data.includes(props.datum));\n const seriesData = dataSorted[seriesIndex];\n const {\n color,\n glyph: themeGlyph\n } = getElementStyles({\n data: seriesData,\n index: seriesIndex\n });\n const propsWithResolvedColor = {\n ...props,\n color\n };\n return themeGlyph ? themeGlyph(propsWithResolvedColor) : renderGlyph(propsWithResolvedColor);\n };\n }, [dataSorted, renderGlyph, getElementStyles]);\n const defaultMargin = useChartMargin(height, chartOptions, dataSorted, theme);\n const error = validateData(dataSorted);\n const isDataValid = !error;\n\n // Memoize legend options to prevent unnecessary re-calculations\n const legendOptions = useMemo(() => ({\n withGlyph: withLegendGlyph,\n glyphSize: Math.max(0, toNumber(glyphStyle?.radius) ?? 4),\n renderGlyph\n }), [withLegendGlyph, glyphStyle?.radius, renderGlyph]);\n\n // Create legend items using the reusable hook\n const legendItems = useChartLegendItems(dataSorted, legendOptions, legendShape);\n\n // Memoize metadata to prevent unnecessary re-registration\n const chartMetadata = useMemo(() => ({\n withGradientFill,\n smoothing,\n curveType,\n withStartGlyphs,\n withEndGlyphs,\n withLegendGlyph\n }), [withGradientFill, smoothing, curveType, withStartGlyphs, withEndGlyphs, withLegendGlyph]);\n\n // Register chart with context only if data is valid\n useChartRegistration({\n chartId,\n legendItems,\n chartType: 'line',\n isDataValid,\n metadata: chartMetadata\n });\n const prefersReducedMotion = usePrefersReducedMotion();\n const accessors = {\n xAccessor: d => d?.date,\n yAccessor: d => d?.value\n };\n\n // Create a custom renderTooltip that includes focus capability\n if (error) {\n return /*#__PURE__*/_jsx(\"div\", {\n className: clsx('line-chart', styles['line-chart']),\n children: error\n });\n }\n const legendElement = showLegend && /*#__PURE__*/_jsx(Legend, {\n orientation: legendOrientation,\n alignment: legendAlignment,\n position: legendPosition,\n maxWidth: legendMaxWidth,\n textOverflow: legendTextOverflow,\n legendItemClassName: legendItemClassName,\n className: styles['line-chart__legend'],\n shape: legendShape,\n chartId: chartId,\n interactive: legendInteractive\n });\n return /*#__PURE__*/_jsx(SingleChartContext.Provider, {\n value: {\n chartId,\n chartRef: internalChartRef,\n chartWidth: width,\n chartHeight\n },\n children: /*#__PURE__*/_jsxs(Stack, {\n direction: \"column\",\n gap: gap,\n className: clsx('line-chart', styles['line-chart'], {\n [styles['line-chart--animated']]: animation && !prefersReducedMotion\n }, className),\n style: {\n width,\n height,\n visibility: isWaitingForMeasurement ? 'hidden' : 'visible'\n },\n children: [legendPosition === 'top' && legendElement, /*#__PURE__*/_jsx(\"div\", {\n className: styles['line-chart__svg-wrapper'],\n ref: svgWrapperRef,\n role: \"grid\",\n \"aria-label\": __('Line chart', 'jetpack-charts'),\n tabIndex: 0,\n onKeyDown: onChartKeyDown,\n onFocus: onChartFocus,\n onBlur: onChartBlur,\n children: !isWaitingForMeasurement && /*#__PURE__*/_jsx(\"div\", {\n ref: chartRef,\n children: /*#__PURE__*/_jsxs(XYChart, {\n theme: theme,\n width: width,\n height: chartHeight,\n margin: {\n ...defaultMargin,\n ...margin\n }\n // xScale and yScale could be set in Axis as well, but they are `scale` props there.\n ,\n xScale: chartOptions.xScale,\n yScale: chartOptions.yScale,\n onPointerDown: onPointerDown,\n onPointerUp: onPointerUp,\n onPointerMove: onPointerMove,\n onPointerOut: onPointerOut,\n pointerEventsDataKey: \"nearest\",\n children: [gridVisibility !== 'none' && /*#__PURE__*/_jsx(Grid, {\n columns: false,\n numTicks: 4\n }), chartOptions.axis.x.display && /*#__PURE__*/_jsx(Axis, {\n ...chartOptions.axis.x\n }), chartOptions.axis.y.display && /*#__PURE__*/_jsx(Axis, {\n ...chartOptions.axis.y\n }), allSeriesHidden ? /*#__PURE__*/_jsx(\"text\", {\n x: width / 2,\n y: chartHeight / 2,\n textAnchor: \"middle\",\n fill: providerTheme.gridStyles?.stroke || '#ccc',\n fontSize: \"14\",\n fontFamily: \"-apple-system,BlinkMacSystemFont,Roboto,Helvetica Neue,sans-serif\",\n children: __('All series are hidden. Click legend items to show data.', 'jetpack-charts')\n }) : null, seriesWithVisibility.map(({\n series: seriesData,\n index,\n isVisible\n }) => {\n // Skip rendering invisible series\n if (!isVisible) {\n return null;\n }\n const {\n color,\n lineStyles,\n glyph\n } = getElementStyles({\n data: seriesData,\n index\n });\n const lineProps = {\n stroke: color,\n ...lineStyles\n };\n return /*#__PURE__*/_jsxs(\"g\", {\n children: [withGradientFill && /*#__PURE__*/_jsx(LinearGradient, {\n id: `area-gradient-${chartId}-${index + 1}`,\n from: color,\n fromOpacity: 0.4,\n toOpacity: 0.1,\n to: providerTheme.backgroundColor,\n ...seriesData.options?.gradient,\n children: seriesData.options?.gradient?.stops?.map((stop, stopIndex) => /*#__PURE__*/_jsx(\"stop\", {\n offset: stop.offset,\n stopColor: stop.color || color,\n stopOpacity: stop.opacity ?? 1\n }, `${stop.offset}-${stop.color || color}`))\n }), /*#__PURE__*/_jsx(AreaSeries, {\n dataKey: seriesData?.label,\n data: seriesData.data,\n ...accessors,\n fill: withGradientFill ? `url(#area-gradient-${chartId}-${index + 1})` : 'transparent',\n renderLine: true,\n curve: getCurveType(curveType, smoothing),\n lineProps: lineProps\n }, seriesData?.label), withStartGlyphs && /*#__PURE__*/_jsx(LineChartGlyph, {\n index: index,\n data: seriesData,\n color: color,\n renderGlyph: glyph ?? renderGlyph,\n accessors: accessors,\n glyphStyle: glyphStyle,\n position: \"start\"\n }), withEndGlyphs && /*#__PURE__*/_jsx(LineChartGlyph, {\n index: index,\n data: seriesData,\n color: color,\n renderGlyph: glyph ?? renderGlyph,\n accessors: accessors,\n glyphStyle: glyphStyle,\n position: \"end\"\n })]\n }, seriesData?.label || index);\n }), withTooltips && /*#__PURE__*/_jsx(AccessibleTooltip, {\n detectBounds: true,\n snapTooltipToDatumX: true,\n snapTooltipToDatumY: true,\n showSeriesGlyphs: true,\n renderTooltip: renderTooltip,\n renderGlyph: tooltipRenderGlyph,\n glyphStyle: glyphStyle,\n showVerticalCrosshair: withTooltipCrosshairs?.showVertical,\n showHorizontalCrosshair: withTooltipCrosshairs?.showHorizontal,\n selectedIndex: selectedIndex,\n tooltipRef: tooltipRef,\n keyboardFocusedClassName: styles['line-chart__tooltip--keyboard-focused'],\n series: dataSorted\n }), /*#__PURE__*/_jsx(LineChartScalesRef, {\n chartRef: internalChartRef,\n width: width,\n height: height,\n margin: margin\n })]\n })\n })\n }), legendPosition === 'bottom' && legendElement, children]\n })\n });\n});\n\n// Component type definitions for composition API\n\nconst LineChartWithProvider = /*#__PURE__*/forwardRef((props, ref) => {\n const existingContext = useContext(GlobalChartsContext);\n\n // If we're already in a GlobalChartsProvider context, render the core component directly\n if (existingContext) {\n return /*#__PURE__*/_jsx(LineChartInternal, {\n ...props,\n ref: ref\n });\n }\n\n // Otherwise, wrap with our own GlobalChartsProvider\n return /*#__PURE__*/_jsx(GlobalChartsProvider, {\n children: /*#__PURE__*/_jsx(LineChartInternal, {\n ...props,\n ref: ref\n })\n });\n});\nLineChartWithProvider.displayName = 'LineChart';\nconst LineChart = attachSubComponents(LineChartWithProvider, {\n Legend: Legend,\n AnnotationsOverlay: LineChartAnnotationsOverlay,\n Annotation: LineChartAnnotation\n});\nconst LineChartResponsive = attachSubComponents(withResponsive(LineChartWithProvider), {\n Legend: Legend,\n AnnotationsOverlay: LineChartAnnotationsOverlay,\n Annotation: LineChartAnnotation\n});\nexport { LineChartResponsive as default, LineChart as LineChartUnresponsive };","import { DataContext } from '@visx/xychart';\nimport { useContext } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const DefaultGlyph = props => {\n const {\n theme\n } = useContext(DataContext) || {};\n const position = props.position || 'start';\n return /*#__PURE__*/_jsx(\"circle\", {\n cx: props.x,\n cy: props.y,\n r: props.size,\n fill: props.color,\n stroke: theme?.backgroundColor,\n strokeWidth: 1.5,\n paintOrder: \"fill\",\n ...props.glyphStyle\n });\n};","import 'css-chunk:src/charts/line-chart/line-chart.module.scss';export default {\n \"line-chart\": \"a8ccharts-v-oO8E\",\n \"line-chart__svg-wrapper\": \"a8ccharts-cpMNjj\",\n \"line-chart--animated\": \"a8ccharts-QrkuTW\",\n \"rise\": \"a8ccharts--rxDU3\",\n \"line-chart__tooltip\": \"a8ccharts-Tu0rR-\",\n \"line-chart__annotation-label-popover\": \"a8ccharts--RSWXi\",\n \"line-chart__tooltip-date\": \"a8ccharts-Q-b5A1\",\n \"line-chart__tooltip-row\": \"a8ccharts-19N7T9\",\n \"line-chart__tooltip-label\": \"a8ccharts-HOAXrD\",\n \"line-chart__annotations-overlay\": \"a8ccharts-rQiY8O\",\n \"line-chart__annotation-label\": \"a8ccharts-8AKWOe\",\n \"line-chart__annotation-label-trigger-button\": \"a8ccharts-7mh3Cl\",\n \"line-chart__annotation-label-popover--visible\": \"a8ccharts-VAeVuJ\",\n \"line-chart__annotation-label-popover--safari\": \"a8ccharts-TEe-iV\",\n \"line-chart__annotation-label-popover-header\": \"a8ccharts-LAUpx7\",\n \"line-chart__annotation-label-popover-content\": \"a8ccharts-b76gEu\",\n \"line-chart__annotation-label-popover-close-button\": \"a8ccharts-LIpFoS\"\n};","import { __ } from '@wordpress/i18n';\nimport clsx from 'clsx';\nimport Gridicon from 'gridicons';\nimport { useEffect, useId, useRef, useState } from 'react';\nimport { isSafari } from '../../../utils';\nimport styles from '../line-chart.module.scss';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const POPOVER_BUTTON_SIZE = 44;\nconst LineChartAnnotationLabelWithPopover = ({\n title,\n subtitle,\n renderLabel,\n renderLabelPopover\n}) => {\n const popoverId = useId();\n const buttonRef = useRef(null);\n const popoverRef = useRef(null);\n const [isPositioned, setIsPositioned] = useState(false);\n const isBrowserSafari = isSafari();\n useEffect(() => {\n const button = buttonRef.current;\n const popover = popoverRef.current;\n if (!button || !popover) return;\n const positionPopover = () => {\n // Popover positioning in Safari is complicated due to issues with SVG foreign objects (https://bugs.webkit.org/show_bug.cgi?id=23113), so let it be positioned in the centre of the viewport.\n if (!isBrowserSafari) {\n const buttonRect = button.getBoundingClientRect();\n popover.style.left = `${buttonRect.right}px`;\n popover.style.top = `${buttonRect.top}px`;\n }\n setIsPositioned(true);\n };\n\n // Position when popover shows\n popover.addEventListener('toggle', e => {\n if (e.newState === 'open') {\n positionPopover();\n }\n });\n\n // Initial positioning if already open\n try {\n if (popover.matches(':popover-open')) {\n positionPopover();\n }\n } catch {\n // Ignore errors in test environments (e.g., JSDOM does not support :popover-open)\n }\n }, [isBrowserSafari]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: styles['line-chart__annotation-label'],\n children: [/*#__PURE__*/_jsx(\"button\", {\n ref: buttonRef,\n popovertarget: popoverId,\n className: styles['line-chart__annotation-label-trigger-button'],\n style: {\n width: `${POPOVER_BUTTON_SIZE}px`,\n height: `${POPOVER_BUTTON_SIZE}px`,\n transform: `translate(${POPOVER_BUTTON_SIZE / 2}px, 0)`\n },\n \"aria-label\": title || __('View details', 'jetpack-charts'),\n children: renderLabel({\n title,\n subtitle\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n ref: popoverRef,\n id: popoverId,\n popover: 'auto',\n className: clsx(styles['line-chart__annotation-label-popover'], isPositioned && styles['line-chart__annotation-label-popover--visible'], isBrowserSafari && styles['line-chart__annotation-label-popover--safari']),\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: styles['line-chart__annotation-label-popover-header'],\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: styles['line-chart__annotation-label-popover-content'],\n children: renderLabelPopover({\n title,\n subtitle\n })\n }), /*#__PURE__*/_jsx(\"button\", {\n popovertarget: popoverId,\n popovertargetaction: 'hide',\n className: styles['line-chart__annotation-label-popover-close-button'],\n \"aria-label\": __('Close', 'jetpack-charts'),\n children: /*#__PURE__*/_jsx(Gridicon, {\n icon: \"cross\",\n size: 16\n })\n })]\n })\n })]\n });\n};\nexport default LineChartAnnotationLabelWithPopover;","import { DataContext } from '@visx/xychart';\nimport { useEffect, useState, useCallback } from 'react';\nimport { useSingleChartContext } from '../../private/single-chart-context';\nimport styles from '../line-chart.module.scss';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst LineChartAnnotationsOverlay = ({\n children\n}) => {\n const {\n chartRef,\n chartWidth,\n chartHeight\n } = useSingleChartContext();\n const [scales, setScales] = useState(null);\n const [scalesStable, setScalesStable] = useState(false);\n\n // Create a signature for scale data to enable easy comparison\n const createScaleSignature = useCallback(scaleData => {\n const xDomain = scaleData.xScale.domain();\n const yDomain = scaleData.yScale.domain();\n const xRange = scaleData.xScale.range();\n const yRange = scaleData.yScale.range();\n return `${xDomain.join(',')}-${yDomain.join(',')}-${xRange.join(',')}-${yRange.join(',')}`;\n }, []);\n\n // Get scales from chart ref and return them with signature for comparison\n const getScalesData = useCallback(() => {\n if (chartRef?.current) {\n const scaleData = chartRef.current.getScales();\n if (scaleData) {\n const scaleInfo = {\n xScale: scaleData.xScale,\n yScale: scaleData.yScale\n };\n return {\n scales: scaleInfo,\n signature: createScaleSignature(scaleInfo)\n };\n }\n }\n return null;\n }, [chartRef, createScaleSignature]);\n\n // The chart resizes on render so we need to monitor the scales until they stabilize\n useEffect(() => {\n let timeoutId = null;\n let lastSignature = null;\n let retryCount = 0;\n const maxRetries = 20; // 20 * 50ms = 1 second max\n const checkInterval = 50; // Check every 50ms\n\n // Reset stability state when monitoring starts\n setScalesStable(false);\n const monitorScales = () => {\n const currentScaleData = getScalesData();\n\n // If we got scales, compare signatures\n if (currentScaleData) {\n // Check if scales have settled by comparing signatures\n const scalesSettled = lastSignature && currentScaleData.signature === lastSignature;\n if (scalesSettled) {\n // Scales have stabilized, mark as stable\n setScalesStable(true);\n return;\n }\n\n // Update scales and remember signature for next comparison\n setScales(currentScaleData.scales);\n lastSignature = currentScaleData.signature;\n }\n\n // Continue monitoring if we haven't exceeded max retries\n if (retryCount < maxRetries) {\n retryCount++;\n timeoutId = setTimeout(monitorScales, checkInterval);\n }\n };\n monitorScales();\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n }, [getScalesData, chartWidth, chartHeight]);\n\n // Early return if no chart data available\n if (!chartRef || !children) {\n return null;\n }\n if (!scales || !scalesStable) {\n return null;\n }\n\n // Create a DataContext value that mimics what visx provides\n // We're intentionally providing minimal context for annotations to work\n const dataContextValue = {\n xScale: scales.xScale,\n yScale: scales.yScale,\n margin: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n width: chartWidth,\n height: chartHeight\n };\n return /*#__PURE__*/_jsx(DataContext.Provider, {\n value: dataContextValue,\n children: /*#__PURE__*/_jsx(\"svg\", {\n width: chartWidth,\n height: chartHeight,\n className: styles['line-chart__annotations-overlay'],\n children: children\n })\n });\n};\nexport default LineChartAnnotationsOverlay;","import { Annotation, CircleSubject, Connector, HtmlLabel, Label, LineSubject } from '@visx/annotation';\nimport { DataContext } from '@visx/xychart';\nimport merge from 'deepmerge';\nimport { useContext, useRef, useEffect, useState, useMemo } from 'react';\nimport { useGlobalChartsTheme } from '../../../providers';\nimport { isSafari } from '../../../utils';\nimport LineChartAnnotationLabelWithPopover, { POPOVER_BUTTON_SIZE } from './line-chart-annotation-label-popover';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst ANNOTATION_MAX_WIDTH = 125; // visx default\nconst ANNOTATION_INIT_HEIGHT = 100;\nexport const getLabelPosition = ({\n subjectType,\n x,\n xMax,\n y,\n yMin,\n yMax,\n maxWidth,\n height\n}) => {\n const annotationMaxWidth = maxWidth ?? ANNOTATION_MAX_WIDTH;\n const annotationHeight = height ?? ANNOTATION_INIT_HEIGHT;\n let dx = 15;\n let dy = 15;\n let isFlippedHorizontally = false;\n let isFlippedVertically = false;\n if (subjectType === 'line-horizontal') {\n dx = 0;\n dy = 20;\n }\n if (subjectType === 'line-vertical') {\n dx = 20;\n dy = 0;\n }\n\n // Smart horizontal positioning: if annotation would extend beyond right edge, position it to the left\n // Account for the connector offset (dx) in boundary calculations\n const effectiveX = x + dx;\n if (effectiveX + annotationMaxWidth > xMax) {\n isFlippedHorizontally = true;\n if (subjectType === 'circle') {\n dx = -dx; // Just flip to the left side with same offset\n } else if (subjectType === 'line-vertical') {\n dx = -20; // Position to the left of the line\n }\n }\n\n // Smart vertical positioning: check both top and bottom edges\n // For circle annotations, they are positioned below by default (dy > 0)\n // Only flip when close to bottom edge to position above\n if (subjectType === 'circle') {\n // Check if positioning below would extend beyond bottom edge\n if (y + dy + annotationHeight > yMin) {\n // Too close to bottom edge, position above\n isFlippedVertically = true;\n dy = -Math.abs(dy); // Ensure negative value to position above the point\n }\n // When close to top edge, keep default below positioning (no flip needed)\n } else if (y - annotationHeight < yMax) {\n // Too close to top edge, position below\n if (subjectType === 'line-horizontal') {\n isFlippedVertically = true;\n dy = Math.abs(dy); // Ensure positive value to position below the point\n } else if (subjectType === 'line-vertical') {\n isFlippedVertically = true; // For anchor adjustment only\n }\n } else if (y + annotationHeight > yMin) {\n // Too close to bottom edge, position above\n if (subjectType === 'line-horizontal') {\n isFlippedVertically = true;\n dy = -Math.abs(dy); // Ensure negative value to position above the point\n } else if (subjectType === 'line-vertical') {\n isFlippedVertically = true; // For anchor adjustment only\n }\n }\n return {\n dx,\n dy,\n isFlippedHorizontally,\n isFlippedVertically\n };\n};\nconst getHorizontalAnchor = (subjectType, isFlippedHorizontally) => {\n if (subjectType === 'line-horizontal') {\n return isFlippedHorizontally ? 'end' : 'start';\n }\n return undefined;\n};\nconst getVerticalAnchor = (subjectType, isFlippedVertically, y, yMax, height) => {\n if (subjectType === 'line-vertical') {\n if (isFlippedVertically) {\n // If flipped due to top edge, anchor to top; if flipped due to bottom edge, anchor to bottom\n return y - height < yMax ? 'start' : 'end';\n }\n return 'start';\n }\n return undefined;\n};\nconst LineChartAnnotation = ({\n datum,\n title,\n subtitle,\n subjectType = 'circle',\n styles: datumStyles,\n testId,\n renderLabel,\n renderLabelPopover\n}) => {\n const providerTheme = useGlobalChartsTheme();\n const {\n xScale,\n yScale\n } = useContext(DataContext) || {};\n const labelRef = useRef(null);\n const [height, setHeight] = useState(null);\n\n // Deep merge styles to preserve nested object properties\n const styles = merge(providerTheme.annotationStyles ?? {}, datumStyles ?? {});\n\n // Measure the label height once after initial render\n useEffect(() => {\n if (labelRef.current?.getBBox) {\n const bbox = labelRef.current.getBBox();\n setHeight(bbox.height);\n }\n }, []);\n const positionData = useMemo(() => {\n if (!datum || !datum.date || datum.value == null || !xScale || !yScale) return null;\n const x = xScale(datum.date);\n const y = yScale(datum.value);\n if (typeof x !== 'number' || typeof y !== 'number') return null;\n const [yMin, yMax] = yScale.range().map(Number);\n const [xMin, xMax] = xScale.range().map(Number);\n\n // If a custom label is provided, use the provided position\n if (renderLabel) {\n return {\n x,\n dx: 0,\n y,\n dy: 0,\n yMin,\n yMax,\n xMin,\n xMax,\n isFlippedHorizontally: false,\n isFlippedVertically: false\n };\n }\n const position = getLabelPosition({\n subjectType,\n x,\n xMax,\n y,\n yMin,\n yMax,\n maxWidth: styles?.label?.maxWidth,\n height\n });\n return {\n x,\n y,\n yMin,\n yMax,\n xMin,\n xMax,\n ...position\n };\n }, [datum, xScale, yScale, subjectType, styles?.label?.maxWidth, height, renderLabel]);\n if (!positionData) return null;\n const {\n x,\n y,\n yMin,\n yMax,\n xMin,\n xMax,\n dx,\n dy,\n isFlippedHorizontally,\n isFlippedVertically\n } = positionData;\n const getLabelY = () => {\n const labelY = styles?.label?.y;\n if (labelY === 'start') return yMax;\n if (labelY === 'end') return yMin;\n return labelY;\n };\n const getLabelX = () => {\n const labelX = styles?.label?.x;\n if (labelX === 'start') return xMin;\n if (labelX === 'end') return xMax;\n return labelX;\n };\n const labelPosition = {\n x: getLabelX(),\n y: getLabelY()\n };\n\n // Safari has a bug where children of an SVG foreignObject are not positioned correctly https://bugs.webkit.org/show_bug.cgi?id=23113\n // This is a workaround to position the label correctly\n const getSafariHTMLLabelPosition = () => {\n const labelWidth = POPOVER_BUTTON_SIZE;\n const labelHeight = POPOVER_BUTTON_SIZE;\n return isSafari() ? {\n transform: `translate(${x + (dx || 0) + (typeof labelPosition.x === 'number' ? labelPosition.x - x : 0) - labelWidth}px, ${y + (dy || 0) + (typeof labelPosition.y === 'number' ? labelPosition.y - y : 0) - labelHeight}px)`,\n width: labelWidth,\n height: labelHeight\n } : undefined;\n };\n return /*#__PURE__*/_jsx(\"g\", {\n children: /*#__PURE__*/_jsxs(Annotation, {\n x: x,\n y: y,\n dx: dx,\n dy: dy,\n children: [/*#__PURE__*/_jsx(Connector, {\n ...styles?.connector\n }), subjectType === 'circle' && /*#__PURE__*/_jsx(CircleSubject, {\n ...styles?.circleSubject\n }), subjectType === 'line-vertical' && /*#__PURE__*/_jsx(LineSubject, {\n min: yMax,\n max: yMin,\n ...styles?.lineSubject,\n orientation: 'vertical'\n }), subjectType === 'line-horizontal' && /*#__PURE__*/_jsx(LineSubject, {\n min: xMin,\n max: xMax,\n ...styles?.lineSubject,\n orientation: 'horizontal'\n }), renderLabel ? /*#__PURE__*/_jsx(HtmlLabel, {\n ...styles?.label,\n ...labelPosition,\n children: /*#__PURE__*/_jsx(\"div\", {\n style: getSafariHTMLLabelPosition(),\n children: renderLabelPopover ? /*#__PURE__*/_jsx(LineChartAnnotationLabelWithPopover, {\n title: title,\n subtitle: subtitle,\n renderLabel: renderLabel,\n renderLabelPopover: renderLabelPopover\n }) : renderLabel({\n title,\n subtitle\n })\n })\n }) : /*#__PURE__*/_jsx(\"g\", {\n ref: labelRef,\n children: /*#__PURE__*/_jsx(Label, {\n title: title,\n subtitle: subtitle,\n ...styles?.label,\n ...labelPosition,\n horizontalAnchor: getHorizontalAnchor(subjectType, isFlippedHorizontally),\n verticalAnchor: getVerticalAnchor(subjectType, isFlippedVertically, y, yMax, height ?? ANNOTATION_INIT_HEIGHT)\n })\n })]\n })\n });\n};\nexport default LineChartAnnotation;","import { DataContext } from '@visx/xychart';\nimport { useContext } from 'react';\nconst toNumber = val => {\n const num = typeof val === 'number' ? val : parseFloat(val);\n return isNaN(num) ? undefined : num;\n};\nconst LineChartGlyph = ({\n data,\n index,\n color,\n glyphStyle,\n renderGlyph,\n accessors,\n position\n}) => {\n const {\n xScale,\n yScale\n } = useContext(DataContext) || {};\n if (!xScale || !yScale) return null;\n if (data.data.length === 0) return null;\n const point = position === 'start' ? data.data[0] : data.data[data.data.length - 1];\n const x = xScale(accessors.xAccessor(point));\n const y = yScale(accessors.yAccessor(point));\n if (typeof x !== 'number' || typeof y !== 'number') return null;\n const size = Math.max(0, toNumber(glyphStyle?.radius) ?? 4);\n return renderGlyph({\n key: `${position}-glyph-${data.label}`,\n index,\n datum: point,\n color,\n size,\n x,\n y,\n glyphStyle,\n position\n });\n};\nexport default LineChartGlyph;"],"mappings":"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","names":["DataContext","__","clsx","useMemo","useContext","useState","useRef","_jsx","DataContext","useEffect","useState","_jsx","useState","useEffect","DataContext","DataContext","useContext","useRef","useEffect","useState","_jsx","_jsxs","useContext","DataContext","useRef","useState","useEffect","x","y","yMin","yMax","xMin","xMax","DataContext","useContext","_jsx","_jsxs","toNumber","useContext","DataContext","useRef","useState","useMemo","clsx","__"]}
@@ -1,14 +1,22 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/charts/private/chart-composition/chart-svg.tsx
2
2
  var _jsxruntime = require('react/jsx-runtime');
3
- var ChartSVG = ({ children }) => {
4
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children });
3
+ var ChartSVG = ({
4
+ children
5
+ }) => {
6
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {
7
+ children
8
+ });
5
9
  };
6
10
  ChartSVG.displayName = "Chart.SVG";
7
11
 
8
12
  // src/charts/private/chart-composition/chart-html.tsx
9
13
 
10
- var ChartHTML = ({ children }) => {
11
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children });
14
+ var ChartHTML = ({
15
+ children
16
+ }) => {
17
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {
18
+ children
19
+ });
12
20
  };
13
21
  ChartHTML.displayName = "Chart.HTML";
14
22
 
@@ -52,4 +60,4 @@ function useChartChildren(children, chartType) {
52
60
 
53
61
 
54
62
  exports.ChartSVG = ChartSVG; exports.ChartHTML = ChartHTML; exports.useChartChildren = useChartChildren;
55
- //# sourceMappingURL=chunk-HIWNB5PK.cjs.map
63
+ //# sourceMappingURL=chunk-RCY6XLGU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-RCY6XLGU.cjs","../src/charts/private/chart-composition/chart-svg.tsx","../src/charts/private/chart-composition/chart-html.tsx","../src/charts/private/chart-composition/use-chart-children.ts"],"names":["_jsx","_Fragment"],"mappings":"AAAA;ACAA,+CAAmD;AAU5C,IAAM,SAAA,EAAW,CAAC;AAAA,EACvB;AACF,CAAA,EAAA,GAAM;AAGJ,EAAA,uBAAoB,6BAAA,oBAAK,EAAW;AAAA,IAClC;AAAA,EACF,CAAC,CAAA;AACH,CAAA;AAGA,QAAA,CAAS,YAAA,EAAc,WAAA;ADXvB;AACA;AEXA;AAUO,IAAM,UAAA,EAAY,CAAC;AAAA,EACxB;AACF,CAAA,EAAA,GAAM;AAGJ,EAAA,uBAAoBA,6BAAAA,oBAAKC,EAAW;AAAA,IAClC;AAAA,EACF,CAAC,CAAA;AACH,CAAA;AAGA,SAAA,CAAU,YAAA,EAAc,YAAA;AFAxB;AACA;AGtBA,oCAAsB;AACtB,8BAAkD;AAkB3C,SAAS,gBAAA,CAAkB,QAAA,EAAqB,SAAA,EAAmC;AACzF,EAAA,OAAO,4BAAA,CAAS,EAAA,GAAM;AACrB,IAAA,MAAM,IAAA,EAAmB,CAAC,CAAA;AAC1B,IAAA,MAAM,KAAA,EAAoB,CAAC,CAAA;AAC3B,IAAA,MAAM,MAAA,EAAqB,CAAC,CAAA;AAE5B,IAAA,eAAA,CAAS,OAAA,CAAS,QAAA,EAAU,CAAA,KAAA,EAAA,GAAS;AACpC,MAAA,GAAA,CAAK,mCAAA,KAAsB,CAAA,EAAI;AAE9B,QAAA,MAAM,UAAA,EAAY,KAAA,CAAM,IAAA;AACxB,QAAA,MAAM,YAAA,kBAAc,SAAA,2BAAW,aAAA;AAG/B,QAAA,GAAA,CAAK,YAAA,IAAgB,CAAA,EAAA;AAEF,UAAA;AACC,YAAA;AACP,cAAA;AACT,YAAA;AACH,UAAA;AACW,QAAA;AAEO,UAAA;AACC,YAAA;AACN,cAAA;AACV,YAAA;AACH,UAAA;AACiB,QAAA;AAED,UAAA;AACV,QAAA;AACY,UAAA;AACnB,QAAA;AACD,MAAA;AACC,IAAA;AAEoB,IAAA;AACI,EAAA;AAC5B;AHD6B;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-RCY6XLGU.cjs","sourcesContent":[null,"import { Fragment as _Fragment, jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Compound component for SVG children in charts.\n * This component serves as a marker for SVG content that should be rendered\n * inside the chart's SVG element. The actual rendering is handled by the parent chart.\n *\n * @param {PropsWithChildren} props - Component props\n * @param {ReactNode} props.children - Child elements to render inside the SVG\n * @return {JSX.Element} The children wrapped in a fragment\n */\nexport const ChartSVG = ({\n children\n}) => {\n // This component doesn't render directly - its children are extracted by the parent chart\n // We just return the children as-is\n return /*#__PURE__*/_jsx(_Fragment, {\n children: children\n });\n};\n\n// Set displayName for better debugging and type checking\nChartSVG.displayName = 'Chart.SVG';","import { Fragment as _Fragment, jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Compound component for HTML children in charts.\n * This component serves as a marker for HTML content that should be rendered\n * outside the chart's SVG element. The actual rendering is handled by the parent chart.\n *\n * @param {PropsWithChildren} props - Component props\n * @param {ReactNode} props.children - Child elements to render outside the SVG\n * @return {JSX.Element} The children wrapped in a fragment\n */\nexport const ChartHTML = ({\n children\n}) => {\n // This component doesn't render directly - its children are extracted by the parent chart\n // We just return the children as-is\n return /*#__PURE__*/_jsx(_Fragment, {\n children: children\n });\n};\n\n// Set displayName for better debugging and type checking\nChartHTML.displayName = 'Chart.HTML';","import { Group } from '@visx/group';\nimport { useMemo, Children, isValidElement } from 'react';\nimport type { ReactNode } from 'react';\n\ninterface ChartChildren {\n\tsvgChildren: ReactNode[];\n\thtmlChildren: ReactNode[];\n\totherChildren: ReactNode[];\n}\n\n/**\n * Custom hook to process and categorize chart children for composition API.\n * Extracts children from compound components (Chart.SVG, Chart.HTML) and\n * maintains backward compatibility with legacy Group components.\n *\n * @param {ReactNode} children - The children prop from the chart component\n * @param {string} chartType - The type of chart (e.g., 'PieChart', 'BarChart')\n * @return {ChartChildren} Categorized children for rendering\n */\nexport function useChartChildren( children: ReactNode, chartType: string ): ChartChildren {\n\treturn useMemo( () => {\n\t\tconst svg: ReactNode[] = [];\n\t\tconst html: ReactNode[] = [];\n\t\tconst other: ReactNode[] = [];\n\n\t\tChildren.forEach( children, child => {\n\t\t\tif ( isValidElement( child ) ) {\n\t\t\t\t// Check displayName for compound components\n\t\t\t\tconst childType = child.type as { displayName?: string };\n\t\t\t\tconst displayName = childType?.displayName;\n\n\t\t\t\t// Handle chart-specific compound components (e.g., PieChart.SVG)\n\t\t\t\tif ( displayName === `${ chartType }.SVG` || displayName === 'Chart.SVG' ) {\n\t\t\t\t\t// Extract children from Chart.SVG with safety checks\n\t\t\t\t\tif ( child.props?.children ) {\n\t\t\t\t\t\tChildren.forEach( child.props.children, svgChild => {\n\t\t\t\t\t\t\tsvg.push( svgChild );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} else if ( displayName === `${ chartType }.HTML` || displayName === 'Chart.HTML' ) {\n\t\t\t\t\t// Extract children from Chart.HTML with safety checks\n\t\t\t\t\tif ( child.props?.children ) {\n\t\t\t\t\t\tChildren.forEach( child.props.children, htmlChild => {\n\t\t\t\t\t\t\thtml.push( htmlChild );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} else if ( child.type === Group ) {\n\t\t\t\t\t// Legacy support: still check for Group type for backward compatibility\n\t\t\t\t\tsvg.push( child );\n\t\t\t\t} else {\n\t\t\t\t\tother.push( child );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\treturn { svgChildren: svg, htmlChildren: html, otherChildren: other };\n\t}, [ children, chartType ] );\n}\n"]}
@@ -0,0 +1,351 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunk2A34OA5Ocjs = require('./chunk-2A34OA5O.cjs');
4
+
5
+
6
+
7
+
8
+ var _chunkRCY6XLGUcjs = require('./chunk-RCY6XLGU.cjs');
9
+
10
+
11
+ var _chunkY3NNQMAXcjs = require('./chunk-Y3NNQMAX.cjs');
12
+
13
+
14
+ var _chunk7QDEU3KNcjs = require('./chunk-7QDEU3KN.cjs');
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+ var _chunkLSV7F26Bcjs = require('./chunk-LSV7F26B.cjs');
28
+
29
+
30
+ var _chunkZVGEDXDPcjs = require('./chunk-ZVGEDXDP.cjs');
31
+
32
+ // src/charts/pie-semi-circle-chart/pie-semi-circle-chart.tsx
33
+ var _group = require('@visx/group');
34
+ var _shape = require('@visx/shape');
35
+ var _text = require('@visx/text');
36
+ var _tooltip = require('@visx/tooltip');
37
+ var _i18n = require('@wordpress/i18n');
38
+ var _clsx = require('clsx'); var _clsx2 = _interopRequireDefault(_clsx);
39
+ var _react = require('react');
40
+
41
+ // src/charts/pie-semi-circle-chart/pie-semi-circle-chart.module.scss
42
+ var pie_semi_circle_chart_module_default = {
43
+ "pie-semi-circle-chart": "a8ccharts-8tyaQj",
44
+ "pie-semi-circle-chart--legend-top": "a8ccharts-M1lF7A",
45
+ "label": "a8ccharts-EKZS3j",
46
+ "note": "a8ccharts-v85A8-"
47
+ };
48
+
49
+ // src/charts/pie-semi-circle-chart/pie-semi-circle-chart.tsx
50
+ var _jsxruntime = require('react/jsx-runtime');
51
+ var renderDefaultPieSemiCircleTooltip = ({
52
+ tooltipData
53
+ }) => {
54
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkY3NNQMAXcjs.BaseTooltip, {
55
+ data: tooltipData,
56
+ top: 0,
57
+ left: 0,
58
+ renderContainer: false
59
+ });
60
+ };
61
+ var PAD_ANGLE = 0.03;
62
+ var validateData = (data) => {
63
+ if (!data.length) {
64
+ return {
65
+ isValid: false,
66
+ message: "No data available"
67
+ };
68
+ }
69
+ const hasNegativeValues = data.some((item) => item.percentage < 0 || item.value < 0);
70
+ if (hasNegativeValues) {
71
+ return {
72
+ isValid: false,
73
+ message: "Invalid data: Negative values are not allowed"
74
+ };
75
+ }
76
+ const totalPercentage = data.reduce((sum, item) => sum + item.percentage, 0);
77
+ if (totalPercentage <= 0) {
78
+ return {
79
+ isValid: false,
80
+ message: "Invalid percentage total: Must be greater than 0"
81
+ };
82
+ }
83
+ return {
84
+ isValid: true,
85
+ message: ""
86
+ };
87
+ };
88
+ var PieSemiCircleChartInternal = ({
89
+ data,
90
+ chartId: providedChartId,
91
+ width = 400,
92
+ thickness = 0.4,
93
+ clockwise = true,
94
+ withTooltips = false,
95
+ showLegend = false,
96
+ legendOrientation = "horizontal",
97
+ legendPosition = "bottom",
98
+ legendAlignment = "center",
99
+ legendMaxWidth,
100
+ legendTextOverflow = "wrap",
101
+ legendItemClassName,
102
+ legendShape = "circle",
103
+ legendValueDisplay = "percentage",
104
+ legendInteractive = false,
105
+ label,
106
+ animation,
107
+ note,
108
+ className,
109
+ children,
110
+ tooltipOffsetX = 0,
111
+ tooltipOffsetY = -15,
112
+ renderTooltip = renderDefaultPieSemiCircleTooltip
113
+ }) => {
114
+ const chartId = _chunkLSV7F26Bcjs.useChartId.call(void 0, providedChartId);
115
+ const [legendRef, legendHeight] = _chunkLSV7F26Bcjs.useElementHeight.call(void 0, );
116
+ const {
117
+ tooltipOpen,
118
+ tooltipLeft,
119
+ tooltipTop,
120
+ tooltipData,
121
+ hideTooltip,
122
+ showTooltip
123
+ } = _tooltip.useTooltip.call(void 0, );
124
+ const {
125
+ containerRef,
126
+ TooltipInPortal,
127
+ containerBounds
128
+ } = _tooltip.useTooltipInPortal.call(void 0, {
129
+ detectBounds: true,
130
+ scroll: true,
131
+ debounce: 0
132
+ });
133
+ const handleMouseMove = _react.useCallback.call(void 0, (event, arc) => {
134
+ if (containerBounds.width === 0 || containerBounds.height === 0) {
135
+ return;
136
+ }
137
+ showTooltip({
138
+ tooltipData: arc.data,
139
+ tooltipLeft: event.clientX - containerBounds.left + tooltipOffsetX,
140
+ tooltipTop: event.clientY - containerBounds.top + tooltipOffsetY
141
+ });
142
+ }, [containerBounds.width, containerBounds.height, containerBounds.left, containerBounds.top, showTooltip, tooltipOffsetX, tooltipOffsetY]);
143
+ const handleMouseLeave = _react.useCallback.call(void 0, () => {
144
+ hideTooltip();
145
+ }, [hideTooltip]);
146
+ const handleArcMouseMove = _react.useCallback.call(void 0, (arc) => (event) => {
147
+ handleMouseMove(event, arc);
148
+ }, [handleMouseMove]);
149
+ const {
150
+ isValid,
151
+ message
152
+ } = validateData(data);
153
+ const {
154
+ getElementStyles,
155
+ isSeriesVisible
156
+ } = _chunkLSV7F26Bcjs.useGlobalChartsContext.call(void 0, );
157
+ const {
158
+ visibleData,
159
+ allSegmentsHidden,
160
+ legendData
161
+ } = _chunkLSV7F26Bcjs.useInteractiveLegendData.call(void 0, {
162
+ data,
163
+ chartId,
164
+ legendInteractive,
165
+ isSeriesVisible
166
+ });
167
+ const accessors = _react.useMemo.call(void 0, () => ({
168
+ value: (d) => d.value,
169
+ sort: (a, b) => b.value - a.value,
170
+ fill: (d) => getElementStyles({
171
+ data: d,
172
+ index: d.index
173
+ }).color
174
+ }), [getElementStyles]);
175
+ const legendOptions = _react.useMemo.call(void 0, () => ({
176
+ showValues: true,
177
+ legendValueDisplay
178
+ }), [legendValueDisplay]);
179
+ const legendItems = _chunkLSV7F26Bcjs.useChartLegendItems.call(void 0, legendData, legendOptions);
180
+ const {
181
+ svgChildren,
182
+ htmlChildren,
183
+ otherChildren
184
+ } = _chunkRCY6XLGUcjs.useChartChildren.call(void 0, children, "PieSemiCircleChart");
185
+ const chartMetadata = _react.useMemo.call(void 0, () => ({
186
+ thickness,
187
+ clockwise
188
+ }), [thickness, clockwise]);
189
+ _chunkLSV7F26Bcjs.useChartRegistration.call(void 0, {
190
+ chartId,
191
+ legendItems,
192
+ chartType: "pie-semi-circle",
193
+ isDataValid: isValid,
194
+ metadata: chartMetadata
195
+ });
196
+ const prefersReducedMotion = _chunkLSV7F26Bcjs.usePrefersReducedMotion.call(void 0, );
197
+ if (!isValid) {
198
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {
199
+ className: pie_semi_circle_chart_module_default["pie-semi-circle-chart"],
200
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", {
201
+ width,
202
+ height: width / 2,
203
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "text", {
204
+ x: "50%",
205
+ y: "50%",
206
+ textAnchor: "middle",
207
+ className: pie_semi_circle_chart_module_default.error,
208
+ children: message
209
+ })
210
+ })
211
+ });
212
+ }
213
+ const height = width / 2;
214
+ const chartHeight = height - (showLegend && legendPosition === "top" ? legendHeight : 0);
215
+ const radius = Math.min(width / 2, chartHeight);
216
+ const innerRadius = radius * (1 - thickness);
217
+ const dataWithIndex = visibleData.map((d) => {
218
+ const originalIndex = data.findIndex((item) => item.label === d.label);
219
+ return {
220
+ ...d,
221
+ index: originalIndex >= 0 ? originalIndex : 0
222
+ };
223
+ });
224
+ const startAngle = clockwise ? -Math.PI / 2 : Math.PI / 2;
225
+ const endAngle = clockwise ? Math.PI / 2 : -Math.PI / 2;
226
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLSV7F26Bcjs.SingleChartContext.Provider, {
227
+ value: {
228
+ chartId,
229
+ chartWidth: width,
230
+ chartHeight: radius
231
+ },
232
+ children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", {
233
+ ref: containerRef,
234
+ className: _clsx2.default.call(void 0, "pie-semi-circle-chart", pie_semi_circle_chart_module_default["pie-semi-circle-chart"], {
235
+ [pie_semi_circle_chart_module_default["pie-semi-circle-chart--legend-top"]]: showLegend && legendPosition === "top"
236
+ }, className),
237
+ children: [/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "svg", {
238
+ width,
239
+ height: radius,
240
+ viewBox: `0 0 ${width} ${chartHeight}`,
241
+ children: [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "defs", {
242
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2A34OA5Ocjs.radial_wipe_animation_default, {
243
+ id: `radial-wipe-${chartId}`,
244
+ radius,
245
+ innerRadius,
246
+ startAngle: "-180deg",
247
+ wipePercentage: 50
248
+ })
249
+ }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _group.Group, {
250
+ top: chartHeight,
251
+ left: width / 2,
252
+ mask: animation && !prefersReducedMotion ? `url(#radial-wipe-${chartId})` : null,
253
+ children: allSegmentsHidden ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "text", {
254
+ textAnchor: "middle",
255
+ y: -radius / 2,
256
+ fill: "#ccc",
257
+ fontSize: "14",
258
+ fontFamily: "-apple-system,BlinkMacSystemFont,Roboto,Helvetica Neue,sans-serif",
259
+ children: _i18n.__.call(void 0, "All segments are hidden. Click legend items to show data.", "jetpack-charts")
260
+ }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, {
261
+ children: [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _shape.Pie, {
262
+ data: dataWithIndex,
263
+ pieValue: accessors.value,
264
+ outerRadius: radius,
265
+ innerRadius,
266
+ cornerRadius: 3,
267
+ padAngle: PAD_ANGLE,
268
+ startAngle,
269
+ endAngle,
270
+ pieSort: accessors.sort,
271
+ children: (pie) => {
272
+ return pie.arcs.map((arc) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "g", {
273
+ onMouseMove: withTooltips ? handleArcMouseMove(arc) : void 0,
274
+ onMouseLeave: withTooltips ? handleMouseLeave : void 0,
275
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", {
276
+ d: pie.path(arc) || "",
277
+ fill: accessors.fill(arc.data)
278
+ })
279
+ }, arc.data.label));
280
+ }
281
+ }), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _group.Group, {
282
+ children: [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _text.Text, {
283
+ textAnchor: "middle",
284
+ verticalAnchor: "start",
285
+ y: -40,
286
+ className: pie_semi_circle_chart_module_default.label,
287
+ children: label
288
+ }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _text.Text, {
289
+ textAnchor: "middle",
290
+ verticalAnchor: "start",
291
+ y: -20,
292
+ className: pie_semi_circle_chart_module_default.note,
293
+ children: note
294
+ })]
295
+ }), !allSegmentsHidden && svgChildren]
296
+ })
297
+ })]
298
+ }), withTooltips && tooltipOpen && tooltipData && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipInPortal, {
299
+ top: tooltipTop || 0,
300
+ left: tooltipLeft || 0,
301
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {
302
+ role: "tooltip",
303
+ children: renderTooltip({
304
+ tooltipData
305
+ })
306
+ })
307
+ }), showLegend && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLSV7F26Bcjs.Legend, {
308
+ orientation: legendOrientation,
309
+ position: legendPosition,
310
+ alignment: legendAlignment,
311
+ maxWidth: legendMaxWidth,
312
+ textOverflow: legendTextOverflow,
313
+ legendItemClassName,
314
+ shape: legendShape,
315
+ ref: legendRef,
316
+ chartId,
317
+ interactive: legendInteractive
318
+ }), htmlChildren, otherChildren]
319
+ })
320
+ });
321
+ };
322
+ var PieSemiCircleChartWithProvider = (props) => {
323
+ const existingContext = _react.useContext.call(void 0, _chunkLSV7F26Bcjs.GlobalChartsContext);
324
+ if (existingContext) {
325
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PieSemiCircleChartInternal, {
326
+ ...props
327
+ });
328
+ }
329
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLSV7F26Bcjs.GlobalChartsProvider, {
330
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PieSemiCircleChartInternal, {
331
+ ...props
332
+ })
333
+ });
334
+ };
335
+ PieSemiCircleChartWithProvider.displayName = "PieSemiCircleChart";
336
+ var PieSemiCircleChart = _chunkZVGEDXDPcjs.attachSubComponents.call(void 0, PieSemiCircleChartWithProvider, {
337
+ Legend: _chunkLSV7F26Bcjs.Legend,
338
+ SVG: _chunkRCY6XLGUcjs.ChartSVG,
339
+ HTML: _chunkRCY6XLGUcjs.ChartHTML
340
+ });
341
+ var PieSemiCircleChartResponsive = _chunkZVGEDXDPcjs.attachSubComponents.call(void 0, _chunk7QDEU3KNcjs.withResponsive.call(void 0, PieSemiCircleChartWithProvider), {
342
+ Legend: _chunkLSV7F26Bcjs.Legend,
343
+ SVG: _chunkRCY6XLGUcjs.ChartSVG,
344
+ HTML: _chunkRCY6XLGUcjs.ChartHTML
345
+ });
346
+
347
+
348
+
349
+
350
+ exports.PieSemiCircleChart = PieSemiCircleChart; exports.PieSemiCircleChartResponsive = PieSemiCircleChartResponsive;
351
+ //# sourceMappingURL=chunk-RSYD434G.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-RSYD434G.cjs","../src/charts/pie-semi-circle-chart/pie-semi-circle-chart.tsx","../src/charts/pie-semi-circle-chart/pie-semi-circle-chart.module.scss"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;AC/BA,oCAAsB;AACtB,oCAAoB;AACpB,kCAAqB;AACrB,wCAA+C;AAC/C,uCAAmB;AACnB,wEAAiB;AACjB,8BAAiD;ADiCjD;AACA;AExCsF,IAAO,qCAAA,EAAQ;AAAA,EACnG,uBAAA,EAAyB,kBAAA;AAAA,EACzB,mCAAA,EAAqC,kBAAA;AAAA,EACrC,OAAA,EAAS,kBAAA;AAAA,EACT,MAAA,EAAQ;AACV,CAAA;AF0CA;AACA;AC3BA,+CAAkE;AAQlE,IAAM,kCAAA,EAAoC,CAAC;AAAA,EACzC;AACF,CAAA,EAAA,GAAM;AACJ,EAAA,uBAAoB,6BAAA,6BAAK,EAAa;AAAA,IACpC,IAAA,EAAM,WAAA;AAAA,IACN,GAAA,EAAK,CAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,eAAA,EAAiB;AAAA,EACnB,CAAC,CAAA;AACH,CAAA;AACA,IAAM,UAAA,EAAY,IAAA;AAWlB,IAAM,aAAA,EAAe,CAAA,IAAA,EAAA,GAAQ;AAC3B,EAAA,GAAA,CAAI,CAAC,IAAA,CAAK,MAAA,EAAQ;AAChB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,OAAA,EAAS;AAAA,IACX,CAAA;AAAA,EACF;AAGA,EAAA,MAAM,kBAAA,EAAoB,IAAA,CAAK,IAAA,CAAK,CAAA,IAAA,EAAA,GAAQ,IAAA,CAAK,WAAA,EAAa,EAAA,GAAK,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAA;AACjF,EAAA,GAAA,CAAI,iBAAA,EAAmB;AACrB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,OAAA,EAAS;AAAA,IACX,CAAA;AAAA,EACF;AAGA,EAAA,MAAM,gBAAA,EAAkB,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,EAAA,GAAS,IAAA,EAAM,IAAA,CAAK,UAAA,EAAY,CAAC,CAAA;AAC3E,EAAA,GAAA,CAAI,gBAAA,GAAmB,CAAA,EAAG;AACxB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,OAAA,EAAS;AAAA,IACX,CAAA;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,OAAA,EAAS;AAAA,EACX,CAAA;AACF,CAAA;AACA,IAAM,2BAAA,EAA6B,CAAC;AAAA,EAClC,IAAA;AAAA,EACA,OAAA,EAAS,eAAA;AAAA,EACT,MAAA,EAAQ,GAAA;AAAA,EACR,UAAA,EAAY,GAAA;AAAA,EACZ,UAAA,EAAY,IAAA;AAAA,EACZ,aAAA,EAAe,KAAA;AAAA,EACf,WAAA,EAAa,KAAA;AAAA,EACb,kBAAA,EAAoB,YAAA;AAAA,EACpB,eAAA,EAAiB,QAAA;AAAA,EACjB,gBAAA,EAAkB,QAAA;AAAA,EAClB,cAAA;AAAA,EACA,mBAAA,EAAqB,MAAA;AAAA,EACrB,mBAAA;AAAA,EACA,YAAA,EAAc,QAAA;AAAA,EACd,mBAAA,EAAqB,YAAA;AAAA,EACrB,kBAAA,EAAoB,KAAA;AAAA,EACpB,KAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA,EAAiB,CAAA;AAAA,EACjB,eAAA,EAAiB,CAAA,EAAA;AAAA,EACjB,cAAA,EAAgB;AAClB,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,QAAA,EAAU,0CAAA,eAA0B,CAAA;AAC1C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,EAAA,EAAI,gDAAA,CAAiB;AACnD,EAAA,MAAM;AAAA,IACJ,WAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,EACF,EAAA,EAAI,iCAAA,CAAW;AAIf,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,EACF,EAAA,EAAI,yCAAA;AAAmB,IACrB,YAAA,EAAc,IAAA;AAAA,IACd,MAAA,EAAQ,IAAA;AAAA,IACR,QAAA,EAAU;AAAA,EACZ,CAAC,CAAA;AACD,EAAA,MAAM,gBAAA,EAAkB,gCAAA,CAAa,KAAA,EAAO,GAAA,EAAA,GAAQ;AAElD,IAAA,GAAA,CAAI,eAAA,CAAgB,MAAA,IAAU,EAAA,GAAK,eAAA,CAAgB,OAAA,IAAW,CAAA,EAAG;AAC/D,MAAA,MAAA;AAAA,IACF;AAOA,IAAA,WAAA,CAAY;AAAA,MACV,WAAA,EAAa,GAAA,CAAI,IAAA;AAAA,MACjB,WAAA,EAAa,KAAA,CAAM,QAAA,EAAU,eAAA,CAAgB,KAAA,EAAO,cAAA;AAAA,MACpD,UAAA,EAAY,KAAA,CAAM,QAAA,EAAU,eAAA,CAAgB,IAAA,EAAM;AAAA,IACpD,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,eAAA,CAAgB,KAAA,EAAO,eAAA,CAAgB,MAAA,EAAQ,eAAA,CAAgB,IAAA,EAAM,eAAA,CAAgB,GAAA,EAAK,WAAA,EAAa,cAAA,EAAgB,cAAc,CAAC,CAAA;AAC1I,EAAA,MAAM,iBAAA,EAAmB,gCAAA,CAAY,EAAA,GAAM;AACzC,IAAA,WAAA,CAAY,CAAA;AAAA,EACd,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAChB,EAAA,MAAM,mBAAA,EAAqB,gCAAA,CAAY,GAAA,EAAA,GAAO,CAAA,KAAA,EAAA,GAAS;AACrD,IAAA,eAAA,CAAgB,KAAA,EAAO,GAAG,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAGpB,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA;AAAA,EACF,EAAA,EAAI,YAAA,CAAa,IAAI,CAAA;AACrB,EAAA,MAAM;AAAA,IACJ,gBAAA;AAAA,IACA;AAAA,EACF,EAAA,EAAI,sDAAA,CAAuB;AAG3B,EAAA,MAAM;AAAA,IACJ,WAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,EACF,EAAA,EAAI,wDAAA;AAAyB,IAC3B,IAAA;AAAA,IACA,OAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,MAAM,UAAA,EAAY,4BAAA,CAAQ,EAAA,GAAA,CAAO;AAAA,IAC/B,KAAA,EAAO,CAAA,CAAA,EAAA,GAAK,CAAA,CAAE,KAAA;AAAA,IACd,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA,EAAA,GAAM,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,KAAA;AAAA,IAC5B,IAAA,EAAM,CAAA,CAAA,EAAA,GAAK,gBAAA,CAAiB;AAAA,MAC1B,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,CAAA,CAAE;AAAA,IACX,CAAC,CAAA,CAAE;AAAA,EACL,CAAA,CAAA,EAAI,CAAC,gBAAgB,CAAC,CAAA;AAGtB,EAAA,MAAM,cAAA,EAAgB,4BAAA,CAAQ,EAAA,GAAA,CAAO;AAAA,IACnC,UAAA,EAAY,IAAA;AAAA,IACZ;AAAA,EACF,CAAA,CAAA,EAAI,CAAC,kBAAkB,CAAC,CAAA;AAGxB,EAAA,MAAM,YAAA,EAAc,mDAAA,UAAoB,EAAY,aAAa,CAAA;AAGjE,EAAA,MAAM;AAAA,IACJ,WAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,EACF,EAAA,EAAI,gDAAA,QAAiB,EAAU,oBAAoB,CAAA;AAGnD,EAAA,MAAM,cAAA,EAAgB,4BAAA,CAAQ,EAAA,GAAA,CAAO;AAAA,IACnC,SAAA;AAAA,IACA;AAAA,EACF,CAAA,CAAA,EAAI,CAAC,SAAA,EAAW,SAAS,CAAC,CAAA;AAG1B,EAAA,oDAAA;AAAqB,IACnB,OAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA,EAAW,iBAAA;AAAA,IACX,WAAA,EAAa,OAAA;AAAA,IACb,QAAA,EAAU;AAAA,EACZ,CAAC,CAAA;AACD,EAAA,MAAM,qBAAA,EAAuB,uDAAA,CAAwB;AACrD,EAAA,GAAA,CAAI,CAAC,OAAA,EAAS;AACZ,IAAA,uBAAoB,6BAAA,KAAK,EAAO;AAAA,MAC9B,SAAA,EAAW,oCAAA,CAAO,uBAAuB,CAAA;AAAA,MACzC,QAAA,kBAAuB,6BAAA,KAAK,EAAO;AAAA,QACjC,KAAA;AAAA,QACA,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,QAChB,QAAA,kBAAuB,6BAAA,MAAK,EAAQ;AAAA,UAClC,CAAA,EAAG,KAAA;AAAA,UACH,CAAA,EAAG,KAAA;AAAA,UACH,UAAA,EAAY,QAAA;AAAA,UACZ,SAAA,EAAW,oCAAA,CAAO,KAAA;AAAA,UAClB,QAAA,EAAU;AAAA,QACZ,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAIA,EAAA,MAAM,OAAA,EAAS,MAAA,EAAQ,CAAA;AAEvB,EAAA,MAAM,YAAA,EAAc,OAAA,EAAA,CAAU,WAAA,GAAc,eAAA,IAAmB,MAAA,EAAQ,aAAA,EAAe,CAAA,CAAA;AACtF,EAAA,MAAM,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAG,WAAW,CAAA;AAC9C,EAAA,MAAM,YAAA,EAAc,OAAA,EAAA,CAAU,EAAA,EAAI,SAAA,CAAA;AAIlC,EAAA,MAAM,cAAA,EAAgB,WAAA,CAAY,GAAA,CAAI,CAAA,CAAA,EAAA,GAAK;AACzC,IAAA,MAAM,cAAA,EAAgB,IAAA,CAAK,SAAA,CAAU,CAAA,IAAA,EAAA,GAAQ,IAAA,CAAK,MAAA,IAAU,CAAA,CAAE,KAAK,CAAA;AACnE,IAAA,OAAO;AAAA,MACL,GAAG,CAAA;AAAA,MACH,KAAA,EAAO,cAAA,GAAiB,EAAA,EAAI,cAAA,EAAgB;AAAA,IAC9C,CAAA;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,MAAM,WAAA,EAAa,UAAA,EAAY,CAAC,IAAA,CAAK,GAAA,EAAK,EAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA;AACxD,EAAA,MAAM,SAAA,EAAW,UAAA,EAAY,IAAA,CAAK,GAAA,EAAK,EAAA,EAAI,CAAC,IAAA,CAAK,GAAA,EAAK,CAAA;AACtD,EAAA,uBAAoB,6BAAA,oCAAK,CAAmB,QAAA,EAAU;AAAA,IACpD,KAAA,EAAO;AAAA,MACL,OAAA;AAAA,MACA,UAAA,EAAY,KAAA;AAAA,MACZ,WAAA,EAAa;AAAA,IACf,CAAA;AAAA,IACA,QAAA,kBAAuB,8BAAA,KAAM,EAAO;AAAA,MAClC,GAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAW,4BAAA,uBAAK,EAAyB,oCAAA,CAAO,uBAAuB,CAAA,EAAG;AAAA,QACxE,CAAC,oCAAA,CAAO,mCAAmC,CAAC,CAAA,EAAG,WAAA,GAAc,eAAA,IAAmB;AAAA,MAClF,CAAA,EAAG,SAAS,CAAA;AAAA,MACZ,QAAA,EAAU,iBAAc,8BAAA,KAAM,EAAO;AAAA,QACnC,KAAA;AAAA,QACA,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AACP,QAAA;AACC,UAAA;AACA,YAAA;AAC1B,YAAA;AACA,YAAA;AACY,YAAA;AACI,YAAA;AACjB,UAAA;AAC0B,QAAA;AACtB,UAAA;AACS,UAAA;AACM,UAAA;AACuB,UAAA;AAC7B,YAAA;AACC,YAAA;AACP,YAAA;AACI,YAAA;AACE,YAAA;AACC,YAAA;AACS,UAAA;AACO,YAAA;AACrB,cAAA;AACc,cAAA;AACP,cAAA;AACb,cAAA;AACc,cAAA;AACJ,cAAA;AACV,cAAA;AACA,cAAA;AACmB,cAAA;AACF,cAAA;AACyB,gBAAA;AACzB,kBAAA;AACC,kBAAA;AACS,kBAAA;AACD,oBAAA;AACK,oBAAA;AAC1B,kBAAA;AACe,gBAAA;AACpB,cAAA;AAC4B,YAAA;AACJ,cAAA;AACV,gBAAA;AACI,gBAAA;AACb,gBAAA;AAEQ,gBAAA;AACD,gBAAA;AACgB,cAAA;AACd,gBAAA;AACI,gBAAA;AACb,gBAAA;AAEQ,gBAAA;AACD,gBAAA;AACV,cAAA;AACsB,YAAA;AAC3B,UAAA;AACD,QAAA;AAC+B,MAAA;AACd,QAAA;AACE,QAAA;AACO,QAAA;AACpB,UAAA;AACkB,UAAA;AACtB,YAAA;AACD,UAAA;AACF,QAAA;AACiC,MAAA;AACrB,QAAA;AACH,QAAA;AACC,QAAA;AACD,QAAA;AACI,QAAA;AACd,QAAA;AACO,QAAA;AACF,QAAA;AACL,QAAA;AACa,QAAA;AACgB,MAAA;AAChC,IAAA;AACF,EAAA;AACH;AACuC;AACF,EAAA;AAGd,EAAA;AACM,IAAA;AACpB,MAAA;AACJ,IAAA;AACH,EAAA;AAGyB,EAAA;AACK,IAAA;AACvB,MAAA;AACJ,IAAA;AACF,EAAA;AACH;AAC6C;AAGE;AAC7C,EAAA;AACK,EAAA;AACC,EAAA;AACP;AAGoC;AACnC,EAAA;AACK,EAAA;AACC,EAAA;AACP;ADrC4C;AACA;AACA;AACA;AACA","file":"/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-RSYD434G.cjs","sourcesContent":[null,"import { Group } from '@visx/group';\nimport { Pie } from '@visx/shape';\nimport { Text } from '@visx/text';\nimport { useTooltip, useTooltipInPortal } from '@visx/tooltip';\nimport { __ } from '@wordpress/i18n';\nimport clsx from 'clsx';\nimport { useCallback, useContext, useMemo } from 'react';\nimport { Legend, useChartLegendItems } from '../../components/legend';\nimport { BaseTooltip } from '../../components/tooltip';\nimport { useElementHeight, useInteractiveLegendData, usePrefersReducedMotion } from '../../hooks';\nimport { GlobalChartsProvider, useChartId, useChartRegistration, useGlobalChartsContext, GlobalChartsContext } from '../../providers';\nimport { attachSubComponents } from '../../utils';\nimport { ChartSVG, ChartHTML, useChartChildren } from '../private/chart-composition';\nimport { RadialWipeAnimation } from '../private/radial-wipe-animation';\nimport { SingleChartContext } from '../private/single-chart-context';\nimport { withResponsive } from '../private/with-responsive';\nimport styles from './pie-semi-circle-chart.module.scss';\n\n/**\n * Parameters passed to the renderTooltip function for semi-circle charts.\n */\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Default tooltip renderer for semi-circle pie charts.\n * Renders a BaseTooltip with the hovered segment's data.\n *\n * @param {PieSemiCircleChartRenderTooltipParams} params - The tooltip parameters containing the hovered data point\n * @return {ReactNode} The rendered tooltip content\n */\nconst renderDefaultPieSemiCircleTooltip = ({\n tooltipData\n}) => {\n return /*#__PURE__*/_jsx(BaseTooltip, {\n data: tooltipData,\n top: 0,\n left: 0,\n renderContainer: false\n });\n};\nconst PAD_ANGLE = 0.03; // Padding between segments\n\n// Base props type with optional responsive properties\n\n// Composition API types\n\n/**\n * Validates the semi-circle pie chart data\n * @param data - The data to validate\n * @return Object containing validation result and error message\n */\nconst validateData = data => {\n if (!data.length) {\n return {\n isValid: false,\n message: 'No data available'\n };\n }\n\n // Check for negative values\n const hasNegativeValues = data.some(item => item.percentage < 0 || item.value < 0);\n if (hasNegativeValues) {\n return {\n isValid: false,\n message: 'Invalid data: Negative values are not allowed'\n };\n }\n\n // Validate total percentage is greater than 0\n const totalPercentage = data.reduce((sum, item) => sum + item.percentage, 0);\n if (totalPercentage <= 0) {\n return {\n isValid: false,\n message: 'Invalid percentage total: Must be greater than 0'\n };\n }\n return {\n isValid: true,\n message: ''\n };\n};\nconst PieSemiCircleChartInternal = ({\n data,\n chartId: providedChartId,\n width = 400,\n thickness = 0.4,\n clockwise = true,\n withTooltips = false,\n showLegend = false,\n legendOrientation = 'horizontal',\n legendPosition = 'bottom',\n legendAlignment = 'center',\n legendMaxWidth,\n legendTextOverflow = 'wrap',\n legendItemClassName,\n legendShape = 'circle',\n legendValueDisplay = 'percentage',\n legendInteractive = false,\n label,\n animation,\n note,\n className,\n children,\n tooltipOffsetX = 0,\n tooltipOffsetY = -15,\n renderTooltip = renderDefaultPieSemiCircleTooltip\n}) => {\n const chartId = useChartId(providedChartId);\n const [legendRef, legendHeight] = useElementHeight();\n const {\n tooltipOpen,\n tooltipLeft,\n tooltipTop,\n tooltipData,\n hideTooltip,\n showTooltip\n } = useTooltip();\n\n // Set up portal tooltip for better z-index handling\n // We get containerBounds to cancel out stale offsets in the position calculation\n const {\n containerRef,\n TooltipInPortal,\n containerBounds\n } = useTooltipInPortal({\n detectBounds: true,\n scroll: true,\n debounce: 0\n });\n const handleMouseMove = useCallback((event, arc) => {\n // Don't show tooltip until container bounds are measured\n if (containerBounds.width === 0 || containerBounds.height === 0) {\n return;\n }\n\n // Use clientX/Y and subtract containerBounds to cancel out any stale offset.\n // TooltipInPortal calculates: tooltipLeft + containerBounds.left + scrollX\n // By passing (clientX - containerBounds.left), we get:\n // (clientX - containerBounds.left) + containerBounds.left + scrollX = clientX + scrollX\n // This gives correct page coordinates regardless of stale bounds.\n showTooltip({\n tooltipData: arc.data,\n tooltipLeft: event.clientX - containerBounds.left + tooltipOffsetX,\n tooltipTop: event.clientY - containerBounds.top + tooltipOffsetY\n });\n }, [containerBounds.width, containerBounds.height, containerBounds.left, containerBounds.top, showTooltip, tooltipOffsetX, tooltipOffsetY]);\n const handleMouseLeave = useCallback(() => {\n hideTooltip();\n }, [hideTooltip]);\n const handleArcMouseMove = useCallback(arc => event => {\n handleMouseMove(event, arc);\n }, [handleMouseMove]);\n\n // Validate data first to get validation result\n const {\n isValid,\n message\n } = validateData(data);\n const {\n getElementStyles,\n isSeriesVisible\n } = useGlobalChartsContext();\n\n // Filter and recalculate data for interactive legends\n const {\n visibleData,\n allSegmentsHidden,\n legendData\n } = useInteractiveLegendData({\n data,\n chartId,\n legendInteractive,\n isSeriesVisible\n });\n\n // Define accessors with useMemo to avoid changing dependencies\n const accessors = useMemo(() => ({\n value: d => d.value,\n sort: (a, b) => b.value - a.value,\n fill: d => getElementStyles({\n data: d,\n index: d.index\n }).color\n }), [getElementStyles]);\n\n // Memoize legend options to prevent unnecessary re-calculations\n const legendOptions = useMemo(() => ({\n showValues: true,\n legendValueDisplay\n }), [legendValueDisplay]);\n\n // Create legend items using legendData (has recalculated percentages for visible items)\n const legendItems = useChartLegendItems(legendData, legendOptions);\n\n // Process children to extract compound components\n const {\n svgChildren,\n htmlChildren,\n otherChildren\n } = useChartChildren(children, 'PieSemiCircleChart');\n\n // Memoize metadata to prevent unnecessary re-registration\n const chartMetadata = useMemo(() => ({\n thickness,\n clockwise\n }), [thickness, clockwise]);\n\n // Register chart with context only if data is valid\n useChartRegistration({\n chartId,\n legendItems,\n chartType: 'pie-semi-circle',\n isDataValid: isValid,\n metadata: chartMetadata\n });\n const prefersReducedMotion = usePrefersReducedMotion();\n if (!isValid) {\n return /*#__PURE__*/_jsx(\"div\", {\n className: styles['pie-semi-circle-chart'],\n children: /*#__PURE__*/_jsx(\"svg\", {\n width: width,\n height: width / 2,\n children: /*#__PURE__*/_jsx(\"text\", {\n x: \"50%\",\n y: \"50%\",\n textAnchor: \"middle\",\n className: styles.error,\n children: message\n })\n })\n });\n }\n\n // Calculate chart dimensions\n // TODO: we might want to accept height as a prop in the future, because the height of container might not always be enough.\n const height = width / 2;\n // The chart only takes the height minus the legend height.\n const chartHeight = height - (showLegend && legendPosition === 'top' ? legendHeight : 0);\n const radius = Math.min(width / 2, chartHeight);\n const innerRadius = radius * (1 - thickness);\n\n // Map data with index for color assignment\n // When interactive, we need to find the original index to maintain consistent colors\n const dataWithIndex = visibleData.map(d => {\n const originalIndex = data.findIndex(item => item.label === d.label);\n return {\n ...d,\n index: originalIndex >= 0 ? originalIndex : 0\n };\n });\n\n // Configure pie angles based on clockwise direction\n const startAngle = clockwise ? -Math.PI / 2 : Math.PI / 2;\n const endAngle = clockwise ? Math.PI / 2 : -Math.PI / 2;\n return /*#__PURE__*/_jsx(SingleChartContext.Provider, {\n value: {\n chartId,\n chartWidth: width,\n chartHeight: radius\n },\n children: /*#__PURE__*/_jsxs(\"div\", {\n ref: containerRef,\n className: clsx('pie-semi-circle-chart', styles['pie-semi-circle-chart'], {\n [styles['pie-semi-circle-chart--legend-top']]: showLegend && legendPosition === 'top'\n }, className),\n children: [/*#__PURE__*/_jsxs(\"svg\", {\n width: width,\n height: radius,\n viewBox: `0 0 ${width} ${chartHeight}`,\n children: [/*#__PURE__*/_jsx(\"defs\", {\n children: /*#__PURE__*/_jsx(RadialWipeAnimation, {\n id: `radial-wipe-${chartId}`,\n radius: radius,\n innerRadius: innerRadius,\n startAngle: \"-180deg\",\n wipePercentage: 50\n })\n }), /*#__PURE__*/_jsx(Group, {\n top: chartHeight,\n left: width / 2,\n mask: animation && !prefersReducedMotion ? `url(#radial-wipe-${chartId})` : null,\n children: allSegmentsHidden ? /*#__PURE__*/_jsx(\"text\", {\n textAnchor: \"middle\",\n y: -radius / 2,\n fill: \"#ccc\",\n fontSize: \"14\",\n fontFamily: \"-apple-system,BlinkMacSystemFont,Roboto,Helvetica Neue,sans-serif\",\n children: __('All segments are hidden. Click legend items to show data.', 'jetpack-charts')\n }) : /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Pie, {\n data: dataWithIndex,\n pieValue: accessors.value,\n outerRadius: radius,\n innerRadius: innerRadius,\n cornerRadius: 3,\n padAngle: PAD_ANGLE,\n startAngle: startAngle,\n endAngle: endAngle,\n pieSort: accessors.sort,\n children: pie => {\n return pie.arcs.map(arc => /*#__PURE__*/_jsx(\"g\", {\n onMouseMove: withTooltips ? handleArcMouseMove(arc) : undefined,\n onMouseLeave: withTooltips ? handleMouseLeave : undefined,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: pie.path(arc) || '',\n fill: accessors.fill(arc.data)\n })\n }, arc.data.label));\n }\n }), /*#__PURE__*/_jsxs(Group, {\n children: [/*#__PURE__*/_jsx(Text, {\n textAnchor: \"middle\",\n verticalAnchor: \"start\",\n y: -40 // Position above the chart with space for note\n ,\n className: styles.label,\n children: label\n }), /*#__PURE__*/_jsx(Text, {\n textAnchor: \"middle\",\n verticalAnchor: \"start\",\n y: -20 // Position between label and chart\n ,\n className: styles.note,\n children: note\n })]\n }), !allSegmentsHidden && svgChildren]\n })\n })]\n }), withTooltips && tooltipOpen && tooltipData && /*#__PURE__*/_jsx(TooltipInPortal, {\n top: tooltipTop || 0,\n left: tooltipLeft || 0,\n children: /*#__PURE__*/_jsx(\"div\", {\n role: \"tooltip\",\n children: renderTooltip({\n tooltipData\n })\n })\n }), showLegend && /*#__PURE__*/_jsx(Legend, {\n orientation: legendOrientation,\n position: legendPosition,\n alignment: legendAlignment,\n maxWidth: legendMaxWidth,\n textOverflow: legendTextOverflow,\n legendItemClassName: legendItemClassName,\n shape: legendShape,\n ref: legendRef,\n chartId: chartId,\n interactive: legendInteractive\n }), htmlChildren, otherChildren]\n })\n });\n};\nconst PieSemiCircleChartWithProvider = props => {\n const existingContext = useContext(GlobalChartsContext);\n\n // If we're already in a GlobalChartsProvider context, don't create a new one\n if (existingContext) {\n return /*#__PURE__*/_jsx(PieSemiCircleChartInternal, {\n ...props\n });\n }\n\n // Otherwise, create our own GlobalChartsProvider\n return /*#__PURE__*/_jsx(GlobalChartsProvider, {\n children: /*#__PURE__*/_jsx(PieSemiCircleChartInternal, {\n ...props\n })\n });\n};\nPieSemiCircleChartWithProvider.displayName = 'PieSemiCircleChart';\n\n// Create PieSemiCircleChart with composition API\nconst PieSemiCircleChart = attachSubComponents(PieSemiCircleChartWithProvider, {\n Legend: Legend,\n SVG: ChartSVG,\n HTML: ChartHTML\n});\n\n// Create responsive PieSemiCircleChart with composition API\nconst PieSemiCircleChartResponsive = attachSubComponents(withResponsive(PieSemiCircleChartWithProvider), {\n Legend: Legend,\n SVG: ChartSVG,\n HTML: ChartHTML\n});\nexport { PieSemiCircleChartResponsive as default, PieSemiCircleChart as PieSemiCircleChartUnresponsive };","import 'css-chunk:src/charts/pie-semi-circle-chart/pie-semi-circle-chart.module.scss';export default {\n \"pie-semi-circle-chart\": \"a8ccharts-8tyaQj\",\n \"pie-semi-circle-chart--legend-top\": \"a8ccharts-M1lF7A\",\n \"label\": \"a8ccharts-EKZS3j\",\n \"note\": \"a8ccharts-v85A8-\"\n};"]}