@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,375 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunk7OZEQ5HEcjs = require('./chunk-7OZEQ5HE.cjs');
4
+
5
+
6
+ var _chunk2A34OA5Ocjs = require('./chunk-2A34OA5O.cjs');
7
+
8
+
9
+
10
+
11
+ var _chunkRCY6XLGUcjs = require('./chunk-RCY6XLGU.cjs');
12
+
13
+
14
+ var _chunkY3NNQMAXcjs = require('./chunk-Y3NNQMAX.cjs');
15
+
16
+
17
+ var _chunk7QDEU3KNcjs = require('./chunk-7QDEU3KN.cjs');
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+ var _chunkLSV7F26Bcjs = require('./chunk-LSV7F26B.cjs');
32
+
33
+
34
+ var _chunkZVGEDXDPcjs = require('./chunk-ZVGEDXDP.cjs');
35
+
36
+ // src/charts/pie-chart/pie-chart.tsx
37
+ var _group = require('@visx/group');
38
+ var _shape = require('@visx/shape');
39
+ var _tooltip = require('@visx/tooltip');
40
+ var _i18n = require('@wordpress/i18n');
41
+ var _clsx = require('clsx'); var _clsx2 = _interopRequireDefault(_clsx);
42
+ var _react = require('react');
43
+
44
+ // src/charts/pie-chart/pie-chart.module.scss
45
+ var pie_chart_module_default = {
46
+ "pie-chart": "a8ccharts-C-n-Gu",
47
+ "pie-chart--legend-top": "a8ccharts-Mu0uxl"
48
+ };
49
+
50
+ // src/charts/pie-chart/pie-chart.tsx
51
+ var _jsxruntime = require('react/jsx-runtime');
52
+ var renderDefaultPieTooltip = ({
53
+ tooltipData
54
+ }) => {
55
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkY3NNQMAXcjs.BaseTooltip, {
56
+ data: tooltipData,
57
+ top: 0,
58
+ left: 0,
59
+ renderContainer: false
60
+ });
61
+ };
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 (Math.abs(totalPercentage - 100) > 0.01) {
78
+ return {
79
+ isValid: false,
80
+ message: "Invalid percentage total: Must equal 100"
81
+ };
82
+ }
83
+ return {
84
+ isValid: true,
85
+ message: ""
86
+ };
87
+ };
88
+ var PieChartInternal = ({
89
+ data,
90
+ chartId: providedChartId,
91
+ withTooltips = false,
92
+ className,
93
+ showLegend = false,
94
+ legendOrientation = "horizontal",
95
+ legendPosition = "bottom",
96
+ legendAlignment = "center",
97
+ legendMaxWidth,
98
+ legendTextOverflow = "wrap",
99
+ legendItemClassName,
100
+ legendShape = "circle",
101
+ size,
102
+ animation,
103
+ thickness = 1,
104
+ padding = 0,
105
+ gapScale = 0,
106
+ cornerScale = 0,
107
+ showLabels = true,
108
+ legendValueDisplay = "percentage",
109
+ legendInteractive = false,
110
+ children = null,
111
+ tooltipOffsetX = 0,
112
+ tooltipOffsetY = -15,
113
+ renderTooltip = renderDefaultPieTooltip
114
+ }) => {
115
+ const providerTheme = _chunkLSV7F26Bcjs.useGlobalChartsTheme.call(void 0, );
116
+ const chartId = _chunkLSV7F26Bcjs.useChartId.call(void 0, providedChartId);
117
+ const [legendRef, legendHeight] = _chunkLSV7F26Bcjs.useElementHeight.call(void 0, );
118
+ const {
119
+ tooltipOpen,
120
+ tooltipLeft,
121
+ tooltipTop,
122
+ tooltipData,
123
+ hideTooltip,
124
+ showTooltip
125
+ } = _tooltip.useTooltip.call(void 0, );
126
+ const {
127
+ containerRef,
128
+ TooltipInPortal,
129
+ containerBounds
130
+ } = _tooltip.useTooltipInPortal.call(void 0, {
131
+ detectBounds: true,
132
+ scroll: true,
133
+ debounce: 0
134
+ });
135
+ const onMouseLeave = _react.useCallback.call(void 0, () => {
136
+ if (!withTooltips) {
137
+ return;
138
+ }
139
+ hideTooltip();
140
+ }, [withTooltips, hideTooltip]);
141
+ const {
142
+ getElementStyles,
143
+ isSeriesVisible
144
+ } = _chunkLSV7F26Bcjs.useGlobalChartsContext.call(void 0, );
145
+ const {
146
+ visibleData,
147
+ allSegmentsHidden,
148
+ legendData
149
+ } = _chunkLSV7F26Bcjs.useInteractiveLegendData.call(void 0, {
150
+ data,
151
+ chartId,
152
+ legendInteractive,
153
+ isSeriesVisible
154
+ });
155
+ const legendOptions = _react.useMemo.call(void 0, () => ({
156
+ showValues: true,
157
+ legendValueDisplay
158
+ }), [legendValueDisplay]);
159
+ const legendItems = _chunkLSV7F26Bcjs.useChartLegendItems.call(void 0, legendData, legendOptions);
160
+ const {
161
+ isValid,
162
+ message
163
+ } = validateData(data);
164
+ const {
165
+ svgChildren,
166
+ htmlChildren,
167
+ otherChildren
168
+ } = _chunkRCY6XLGUcjs.useChartChildren.call(void 0, children, "PieChart");
169
+ const chartMetadata = _react.useMemo.call(void 0, () => ({
170
+ thickness,
171
+ gapScale,
172
+ cornerScale
173
+ }), [thickness, gapScale, cornerScale]);
174
+ _chunkLSV7F26Bcjs.useChartRegistration.call(void 0, {
175
+ chartId,
176
+ legendItems,
177
+ chartType: "pie",
178
+ isDataValid: isValid,
179
+ metadata: chartMetadata
180
+ });
181
+ const prefersReducedMotion = _chunkLSV7F26Bcjs.usePrefersReducedMotion.call(void 0, );
182
+ if (!isValid) {
183
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {
184
+ className: _clsx2.default.call(void 0, "pie-chart", pie_chart_module_default["pie-chart"], className),
185
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {
186
+ className: pie_chart_module_default["error-message"],
187
+ children: message
188
+ })
189
+ });
190
+ }
191
+ const width = size;
192
+ const height = size;
193
+ const adjustedHeight = showLegend && legendPosition === "top" ? height - legendHeight : height;
194
+ const radius = Math.min(width, adjustedHeight) / 2;
195
+ const centerX = width / 2;
196
+ const centerY = adjustedHeight / 2;
197
+ const padAngle = gapScale * (2 * Math.PI / data.length);
198
+ const outerRadius = radius - padding;
199
+ const innerRadius = thickness === 0 ? 0 : outerRadius * (1 - thickness);
200
+ const maxCornerRadius = (outerRadius - innerRadius) / 2;
201
+ const cornerRadius = cornerScale ? Math.min(cornerScale * outerRadius, maxCornerRadius) : 0;
202
+ const dataWithIndex = visibleData.map((d) => {
203
+ const originalIndex = data.findIndex((item) => item.label === d.label);
204
+ return {
205
+ ...d,
206
+ index: originalIndex >= 0 ? originalIndex : 0
207
+ };
208
+ });
209
+ const accessors = {
210
+ value: (d) => d.value,
211
+ fill: (d) => {
212
+ return getElementStyles({
213
+ data: d,
214
+ index: d.index
215
+ }).color;
216
+ }
217
+ };
218
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLSV7F26Bcjs.SingleChartContext.Provider, {
219
+ value: {
220
+ chartId,
221
+ chartWidth: width,
222
+ chartHeight: adjustedHeight
223
+ },
224
+ children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", {
225
+ ref: containerRef,
226
+ className: _clsx2.default.call(void 0, "pie-chart", pie_chart_module_default["pie-chart"], {
227
+ [pie_chart_module_default["pie-chart--legend-top"]]: showLegend && legendPosition === "top"
228
+ }, className),
229
+ children: [/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "svg", {
230
+ viewBox: `0 0 ${width} ${adjustedHeight}`,
231
+ preserveAspectRatio: "xMidYMid meet",
232
+ width,
233
+ height: adjustedHeight,
234
+ children: [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "defs", {
235
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2A34OA5Ocjs.radial_wipe_animation_default, {
236
+ id: `radial-wipe-${chartId}`,
237
+ radius: outerRadius,
238
+ innerRadius
239
+ })
240
+ }), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _group.Group, {
241
+ top: centerY,
242
+ left: centerX,
243
+ mask: animation && !prefersReducedMotion ? `url(#radial-wipe-${chartId})` : null,
244
+ children: [allSegmentsHidden ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "text", {
245
+ textAnchor: "middle",
246
+ dy: ".33em",
247
+ fill: providerTheme.gridColor || "#ccc",
248
+ fontSize: "14",
249
+ fontFamily: "-apple-system,BlinkMacSystemFont,Roboto,Helvetica Neue,sans-serif",
250
+ children: _i18n.__.call(void 0, "All segments are hidden. Click legend items to show data.", "jetpack-charts")
251
+ }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _shape.Pie, {
252
+ data: dataWithIndex,
253
+ pieValue: accessors.value,
254
+ outerRadius,
255
+ innerRadius,
256
+ padAngle,
257
+ cornerRadius,
258
+ children: (pie) => {
259
+ return pie.arcs.map((arc, index) => {
260
+ const [centroidX, centroidY] = pie.path.centroid(arc);
261
+ const hasSpaceForLabel = arc.endAngle - arc.startAngle >= 0.25;
262
+ const handleMouseMove = (event) => {
263
+ if (!withTooltips) {
264
+ return;
265
+ }
266
+ if (containerBounds.width === 0 || containerBounds.height === 0) {
267
+ return;
268
+ }
269
+ showTooltip({
270
+ tooltipData: arc.data,
271
+ tooltipLeft: event.clientX - containerBounds.left + tooltipOffsetX,
272
+ tooltipTop: event.clientY - containerBounds.top + tooltipOffsetY
273
+ });
274
+ };
275
+ const pathProps = {
276
+ d: pie.path(arc) || "",
277
+ fill: accessors.fill(arc.data)
278
+ };
279
+ const groupProps = {};
280
+ if (withTooltips) {
281
+ groupProps.onMouseMove = handleMouseMove;
282
+ groupProps.onMouseLeave = onMouseLeave;
283
+ }
284
+ const fontSize = 12;
285
+ const estimatedTextWidth = _chunk7OZEQ5HEcjs.getStringWidth.call(void 0, arc.data.label, {
286
+ fontSize
287
+ });
288
+ const labelPadding = 6;
289
+ const backgroundWidth = estimatedTextWidth + labelPadding * 2;
290
+ const backgroundHeight = fontSize + labelPadding * 2;
291
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "g", {
292
+ ...groupProps,
293
+ children: [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", {
294
+ ...pathProps
295
+ }), showLabels && hasSpaceForLabel && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "g", {
296
+ children: [providerTheme.labelBackgroundColor && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "rect", {
297
+ x: centroidX - backgroundWidth / 2,
298
+ y: centroidY - backgroundHeight / 2,
299
+ width: backgroundWidth,
300
+ height: backgroundHeight,
301
+ fill: providerTheme.labelBackgroundColor,
302
+ rx: 4,
303
+ ry: 4,
304
+ pointerEvents: "none"
305
+ }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "text", {
306
+ x: centroidX,
307
+ y: centroidY,
308
+ dy: ".33em",
309
+ fill: providerTheme.labelTextColor || "#333",
310
+ fontSize,
311
+ textAnchor: "middle",
312
+ pointerEvents: "none",
313
+ children: arc.data.label
314
+ })]
315
+ })]
316
+ }, `arc-${index}`);
317
+ });
318
+ }
319
+ }), !allSegmentsHidden && svgChildren]
320
+ })]
321
+ }), showLegend && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLSV7F26Bcjs.Legend, {
322
+ orientation: legendOrientation,
323
+ position: legendPosition,
324
+ alignment: legendAlignment,
325
+ maxWidth: legendMaxWidth,
326
+ textOverflow: legendTextOverflow,
327
+ legendItemClassName,
328
+ className: pie_chart_module_default["pie-chart-legend"],
329
+ shape: legendShape,
330
+ ref: legendRef,
331
+ chartId,
332
+ interactive: legendInteractive
333
+ }), withTooltips && tooltipOpen && tooltipData && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipInPortal, {
334
+ top: tooltipTop || 0,
335
+ left: tooltipLeft || 0,
336
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {
337
+ role: "tooltip",
338
+ children: renderTooltip({
339
+ tooltipData
340
+ })
341
+ })
342
+ }), htmlChildren, otherChildren]
343
+ })
344
+ });
345
+ };
346
+ var PieChartWithProvider = (props) => {
347
+ const existingContext = _react.useContext.call(void 0, _chunkLSV7F26Bcjs.GlobalChartsContext);
348
+ if (existingContext) {
349
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PieChartInternal, {
350
+ ...props
351
+ });
352
+ }
353
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLSV7F26Bcjs.GlobalChartsProvider, {
354
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PieChartInternal, {
355
+ ...props
356
+ })
357
+ });
358
+ };
359
+ PieChartWithProvider.displayName = "PieChart";
360
+ var PieChart = _chunkZVGEDXDPcjs.attachSubComponents.call(void 0, PieChartWithProvider, {
361
+ Legend: _chunkLSV7F26Bcjs.Legend,
362
+ SVG: _chunkRCY6XLGUcjs.ChartSVG,
363
+ HTML: _chunkRCY6XLGUcjs.ChartHTML
364
+ });
365
+ var PieChartResponsive = _chunkZVGEDXDPcjs.attachSubComponents.call(void 0, _chunk7QDEU3KNcjs.withResponsive.call(void 0, PieChartWithProvider), {
366
+ Legend: _chunkLSV7F26Bcjs.Legend,
367
+ SVG: _chunkRCY6XLGUcjs.ChartSVG,
368
+ HTML: _chunkRCY6XLGUcjs.ChartHTML
369
+ });
370
+
371
+
372
+
373
+
374
+ exports.PieChart = PieChart; exports.PieChartResponsive = PieChartResponsive;
375
+ //# sourceMappingURL=chunk-4YYROZDJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-4YYROZDJ.cjs","../src/charts/pie-chart/pie-chart.tsx","../src/charts/pie-chart/pie-chart.module.scss"],"names":[],"mappings":"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","file":"/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-4YYROZDJ.cjs","sourcesContent":[null,"import { Group } from '@visx/group';\nimport { Pie } from '@visx/shape';\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, useGlobalChartsTheme, GlobalChartsContext } from '../../providers';\nimport { attachSubComponents } from '../../utils';\nimport { getStringWidth } from '../../visx/text';\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-chart.module.scss';\n\n/**\n * Parameters passed to the renderTooltip function for pie charts.\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Default tooltip renderer for pie charts.\n * Renders a BaseTooltip with the hovered segment's data.\n *\n * @param {PieChartRenderTooltipParams} params - The tooltip parameters containing the hovered data point\n * @return {ReactNode} The rendered tooltip content\n */\nconst renderDefaultPieTooltip = ({\n tooltipData\n}) => {\n return /*#__PURE__*/_jsx(BaseTooltip, {\n data: tooltipData,\n top: 0,\n left: 0,\n renderContainer: false\n });\n};\n\n// Base props type with optional responsive properties\n\n// Composition API types\n\n/**\n * Validates the 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\n const totalPercentage = data.reduce((sum, item) => sum + item.percentage, 0);\n if (Math.abs(totalPercentage - 100) > 0.01) {\n // Using small epsilon for floating point comparison\n return {\n isValid: false,\n message: 'Invalid percentage total: Must equal 100'\n };\n }\n return {\n isValid: true,\n message: ''\n };\n};\n\n/**\n * Renders a pie or donut chart using the provided data.\n *\n * @param {PieChartProps} props - Component props\n * @return {JSX.Element} The rendered chart component\n */\nconst PieChartInternal = ({\n data,\n chartId: providedChartId,\n withTooltips = false,\n className,\n showLegend = false,\n legendOrientation = 'horizontal',\n legendPosition = 'bottom',\n legendAlignment = 'center',\n legendMaxWidth,\n legendTextOverflow = 'wrap',\n legendItemClassName,\n legendShape = 'circle',\n size,\n animation,\n thickness = 1,\n padding = 0,\n gapScale = 0,\n cornerScale = 0,\n showLabels = true,\n legendValueDisplay = 'percentage',\n legendInteractive = false,\n children = null,\n tooltipOffsetX = 0,\n tooltipOffsetY = -15,\n renderTooltip = renderDefaultPieTooltip\n}) => {\n const providerTheme = useGlobalChartsTheme();\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 onMouseLeave = useCallback(() => {\n if (!withTooltips) {\n return;\n }\n hideTooltip();\n }, [withTooltips, hideTooltip]);\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 // 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 const {\n isValid,\n message\n } = validateData(data);\n\n // Process children to extract compound components\n const {\n svgChildren,\n htmlChildren,\n otherChildren\n } = useChartChildren(children, 'PieChart');\n\n // Memoize metadata to prevent unnecessary re-registration\n const chartMetadata = useMemo(() => ({\n thickness,\n gapScale,\n cornerScale\n }), [thickness, gapScale, cornerScale]);\n\n // Register chart with context only if data is valid\n useChartRegistration({\n chartId,\n legendItems,\n chartType: 'pie',\n isDataValid: isValid,\n metadata: chartMetadata\n });\n const prefersReducedMotion = usePrefersReducedMotion();\n if (!isValid) {\n return /*#__PURE__*/_jsx(\"div\", {\n className: clsx('pie-chart', styles['pie-chart'], className),\n children: /*#__PURE__*/_jsx(\"div\", {\n className: styles['error-message'],\n children: message\n })\n });\n }\n const width = size;\n const height = size;\n const adjustedHeight = showLegend && legendPosition === 'top' ? height - legendHeight : height;\n\n // Calculate radius based on width/height\n const radius = Math.min(width, adjustedHeight) / 2;\n\n // Center the chart in the available space\n const centerX = width / 2;\n const centerY = adjustedHeight / 2;\n\n // Calculate the angle between each (use original data length for consistent spacing)\n const padAngle = gapScale * (2 * Math.PI / data.length);\n const outerRadius = radius - padding;\n const innerRadius = thickness === 0 ? 0 : outerRadius * (1 - thickness);\n const maxCornerRadius = (outerRadius - innerRadius) / 2;\n const cornerRadius = cornerScale ? Math.min(cornerScale * outerRadius, maxCornerRadius) : 0;\n\n // Map the data to include 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 const accessors = {\n value: d => d.value,\n fill: d => {\n return getElementStyles({\n data: d,\n index: d.index\n }).color;\n }\n };\n return /*#__PURE__*/_jsx(SingleChartContext.Provider, {\n value: {\n chartId,\n chartWidth: width,\n chartHeight: adjustedHeight\n },\n children: /*#__PURE__*/_jsxs(\"div\", {\n ref: containerRef,\n className: clsx('pie-chart', styles['pie-chart'], {\n [styles['pie-chart--legend-top']]: showLegend && legendPosition === 'top'\n }, className),\n children: [/*#__PURE__*/_jsxs(\"svg\", {\n viewBox: `0 0 ${width} ${adjustedHeight}`,\n preserveAspectRatio: \"xMidYMid meet\",\n width: width,\n height: adjustedHeight,\n children: [/*#__PURE__*/_jsx(\"defs\", {\n children: /*#__PURE__*/_jsx(RadialWipeAnimation, {\n id: `radial-wipe-${chartId}`,\n radius: outerRadius,\n innerRadius: innerRadius\n })\n }), /*#__PURE__*/_jsxs(Group, {\n top: centerY,\n left: centerX,\n mask: animation && !prefersReducedMotion ? `url(#radial-wipe-${chartId})` : null,\n children: [allSegmentsHidden ? /*#__PURE__*/_jsx(\"text\", {\n textAnchor: \"middle\",\n dy: \".33em\",\n fill: providerTheme.gridColor || '#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__*/_jsx(Pie, {\n data: dataWithIndex,\n pieValue: accessors.value,\n outerRadius: outerRadius,\n innerRadius: innerRadius,\n padAngle: padAngle,\n cornerRadius: cornerRadius,\n children: pie => {\n return pie.arcs.map((arc, index) => {\n const [centroidX, centroidY] = pie.path.centroid(arc);\n const hasSpaceForLabel = arc.endAngle - arc.startAngle >= 0.25;\n const handleMouseMove = event => {\n if (!withTooltips) {\n return;\n }\n\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 };\n const pathProps = {\n d: pie.path(arc) || '',\n fill: accessors.fill(arc.data)\n };\n const groupProps = {};\n if (withTooltips) {\n groupProps.onMouseMove = handleMouseMove;\n groupProps.onMouseLeave = onMouseLeave;\n }\n\n // Estimate text width more accurately for background sizing\n const fontSize = 12;\n const estimatedTextWidth = getStringWidth(arc.data.label, {\n fontSize\n });\n const labelPadding = 6;\n const backgroundWidth = estimatedTextWidth + labelPadding * 2;\n const backgroundHeight = fontSize + labelPadding * 2;\n return /*#__PURE__*/_jsxs(\"g\", {\n ...groupProps,\n children: [/*#__PURE__*/_jsx(\"path\", {\n ...pathProps\n }), showLabels && hasSpaceForLabel && /*#__PURE__*/_jsxs(\"g\", {\n children: [providerTheme.labelBackgroundColor && /*#__PURE__*/_jsx(\"rect\", {\n x: centroidX - backgroundWidth / 2,\n y: centroidY - backgroundHeight / 2,\n width: backgroundWidth,\n height: backgroundHeight,\n fill: providerTheme.labelBackgroundColor,\n rx: 4,\n ry: 4,\n pointerEvents: \"none\"\n }), /*#__PURE__*/_jsx(\"text\", {\n x: centroidX,\n y: centroidY,\n dy: \".33em\",\n fill: providerTheme.labelTextColor || '#333',\n fontSize: fontSize,\n textAnchor: \"middle\",\n pointerEvents: \"none\",\n children: arc.data.label\n })]\n })]\n }, `arc-${index}`);\n });\n }\n }), !allSegmentsHidden && svgChildren]\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 className: styles['pie-chart-legend'],\n shape: legendShape,\n ref: legendRef,\n chartId: chartId,\n interactive: legendInteractive\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 }), htmlChildren, otherChildren]\n })\n });\n};\nconst PieChartWithProvider = 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(PieChartInternal, {\n ...props\n });\n }\n\n // Otherwise, create our own GlobalChartsProvider\n return /*#__PURE__*/_jsx(GlobalChartsProvider, {\n children: /*#__PURE__*/_jsx(PieChartInternal, {\n ...props\n })\n });\n};\nPieChartWithProvider.displayName = 'PieChart';\n\n// Create PieChart with composition API\nconst PieChart = attachSubComponents(PieChartWithProvider, {\n Legend: Legend,\n SVG: ChartSVG,\n HTML: ChartHTML\n});\n\n// Create responsive PieChart with composition API\nconst PieChartResponsive = attachSubComponents(withResponsive(PieChartWithProvider), {\n Legend: Legend,\n SVG: ChartSVG,\n HTML: ChartHTML\n});\nexport { PieChartResponsive as default, PieChart as PieChartUnresponsive };","import 'css-chunk:src/charts/pie-chart/pie-chart.module.scss';export default {\n \"pie-chart\": \"a8ccharts-C-n-Gu\",\n \"pie-chart--legend-top\": \"a8ccharts-Mu0uxl\"\n};"]}
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } 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; }
2
2
 
3
- var _chunk7UJPVCMBcjs = require('./chunk-7UJPVCMB.cjs');
3
+ var _chunkCERFRCXDcjs = require('./chunk-CERFRCXD.cjs');
4
4
 
5
5
 
6
- var _chunkNW3RUYK2cjs = require('./chunk-NW3RUYK2.cjs');
6
+ var _chunk7QDEU3KNcjs = require('./chunk-7QDEU3KN.cjs');
7
7
 
8
8
 
9
9
 
10
- var _chunkTVV7ZI7Ccjs = require('./chunk-TVV7ZI7C.cjs');
10
+ var _chunkLSV7F26Bcjs = require('./chunk-LSV7F26B.cjs');
11
11
 
12
12
  // src/charts/bar-list-chart/bar-list-chart.tsx
13
13
  var _numberformatters = require('@automattic/number-formatters');
@@ -20,11 +20,36 @@ var getScaleBandwidth = (scale) => {
20
20
  const s = scale;
21
21
  return s && "bandwidth" in s ? _nullishCoalesce(_optionalChain([s, 'optionalAccess', _ => _.bandwidth, 'call', _2 => _2()]), () => ( 0)) : 0;
22
22
  };
23
- var DefaultLabelComponent = ({ textProps, x, y, label, formatter }) => {
24
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _text.Text, { ...textProps, textAnchor: "start", x, y, children: formatter(label) });
23
+ var DefaultLabelComponent = ({
24
+ textProps,
25
+ x,
26
+ y,
27
+ label,
28
+ formatter
29
+ }) => {
30
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _text.Text, {
31
+ ...textProps,
32
+ textAnchor: "start",
33
+ x,
34
+ y,
35
+ children: formatter(label)
36
+ });
25
37
  };
26
- var DefaultValueComponent = ({ textProps, x, y, value, formatter }) => {
27
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _text.Text, { ...textProps, textAnchor: "end", x, y, fontWeight: 500, children: formatter(value) });
38
+ var DefaultValueComponent = ({
39
+ textProps,
40
+ x,
41
+ y,
42
+ value,
43
+ formatter
44
+ }) => {
45
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _text.Text, {
46
+ ...textProps,
47
+ textAnchor: "end",
48
+ x,
49
+ y,
50
+ fontWeight: 500,
51
+ children: formatter(value)
52
+ });
28
53
  };
29
54
  var AxisRenderer = ({
30
55
  ticks,
@@ -41,49 +66,47 @@ var AxisRenderer = ({
41
66
  if (ticks.length === 0) {
42
67
  return null;
43
68
  }
44
- const allTickLabelProps = ticks.map(
45
- ({ value, index }) => typeof tickLabelProps === "function" ? tickLabelProps(value, index, ticks) : {}
46
- );
47
- return ticks.map(({ from, formattedValue }, index) => {
69
+ const allTickLabelProps = ticks.map(({
70
+ value,
71
+ index
72
+ }) => typeof tickLabelProps === "function" ? tickLabelProps(value, index, ticks) : {});
73
+ return ticks.map(({
74
+ from,
75
+ formattedValue
76
+ }, index) => {
48
77
  const textProps = _nullishCoalesce(allTickLabelProps[index], () => ( {}));
49
78
  delete textProps.textAnchor;
50
79
  delete textProps.dx;
51
- const sum = data.reduce(
52
- (acc, { data: seriesData }) => acc + (_nullishCoalesce(_optionalChain([seriesData, 'access', _3 => _3[index], 'optionalAccess', _4 => _4.value]), () => ( 0))),
53
- 0
54
- );
80
+ const sum = data.reduce((acc, {
81
+ data: seriesData
82
+ }) => acc + (_nullishCoalesce(_optionalChain([seriesData, 'access', _3 => _3[index], 'optionalAccess', _4 => _4.value]), () => ( 0))), 0);
55
83
  const y = from.y + yOffset;
56
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _group.Group, { children: [
57
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
58
- LabelComponent,
59
- {
60
- textProps,
61
- x: labelPosition,
62
- y,
63
- label: formattedValue,
64
- formatter: labelFormatter
65
- }
66
- ),
67
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
68
- ValueComponent,
69
- {
70
- textProps,
71
- x: valuePosition,
72
- y,
73
- value: sum,
74
- formatter: valueFormatter,
75
- data,
76
- index
77
- }
78
- )
79
- ] }, index);
84
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _group.Group, {
85
+ children: [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, LabelComponent, {
86
+ textProps,
87
+ x: labelPosition,
88
+ y,
89
+ label: formattedValue,
90
+ formatter: labelFormatter
91
+ }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ValueComponent, {
92
+ textProps,
93
+ x: valuePosition,
94
+ y,
95
+ value: sum,
96
+ formatter: valueFormatter,
97
+ data,
98
+ index
99
+ })]
100
+ }, index);
80
101
  });
81
102
  };
82
103
  var getDefaultYOffset = (data, yScaleConfig, height, isMultiSeries) => {
83
104
  if (!isMultiSeries) {
84
105
  return 0;
85
106
  }
86
- const dataKeys = data.map(({ label }) => label);
107
+ const dataKeys = data.map(({
108
+ label
109
+ }) => label);
87
110
  const yScale = _scale.createScale.call(void 0, {
88
111
  type: "band",
89
112
  range: [0, height],
@@ -141,56 +164,56 @@ var BarListChartInternal = ({
141
164
  yOffset: _nullishCoalesce(options.yOffset, () => ( getDefaultYOffset(data, yScale, height, isMultiSeries)))
142
165
  };
143
166
  }, [options, width, data, height]);
144
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
145
- _chunk7UJPVCMBcjs.BarChart,
146
- {
147
- orientation: "horizontal",
148
- gridVisibility: "none",
149
- data,
150
- width,
151
- height,
152
- margin,
153
- options: {
154
- axis: {
155
- y: {
156
- children: (renderProps) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
157
- AxisRenderer,
158
- {
159
- ...renderProps,
160
- data,
161
- yOffset: chartOptions.yOffset,
162
- labelPosition: chartOptions.labelPosition,
163
- valuePosition: chartOptions.valuePosition,
164
- labelFormatter: chartOptions.labelFormatter,
165
- valueFormatter: chartOptions.valueFormatter,
166
- LabelComponent: options.labelComponent,
167
- ValueComponent: options.valueComponent
168
- }
169
- )
170
- },
171
- x: {
172
- children: () => null
173
- }
167
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCERFRCXDcjs.BarChart, {
168
+ orientation: "horizontal",
169
+ gridVisibility: "none",
170
+ data,
171
+ width,
172
+ height,
173
+ margin,
174
+ options: {
175
+ axis: {
176
+ y: {
177
+ children: (renderProps) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AxisRenderer, {
178
+ ...renderProps,
179
+ data,
180
+ yOffset: chartOptions.yOffset,
181
+ labelPosition: chartOptions.labelPosition,
182
+ valuePosition: chartOptions.valuePosition,
183
+ labelFormatter: chartOptions.labelFormatter,
184
+ valueFormatter: chartOptions.valueFormatter,
185
+ LabelComponent: options.labelComponent,
186
+ ValueComponent: options.valueComponent
187
+ })
174
188
  },
175
- xScale: chartOptions.xScale,
176
- yScale: chartOptions.yScale
189
+ x: {
190
+ children: () => null
191
+ }
177
192
  },
178
- ...rest
179
- }
180
- );
193
+ xScale: chartOptions.xScale,
194
+ yScale: chartOptions.yScale
195
+ },
196
+ ...rest
197
+ });
181
198
  };
182
199
  var BarListChart = (props) => {
183
- const existingContext = _react.useContext.call(void 0, _chunkTVV7ZI7Ccjs.GlobalChartsContext);
200
+ const existingContext = _react.useContext.call(void 0, _chunkLSV7F26Bcjs.GlobalChartsContext);
184
201
  if (existingContext) {
185
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BarListChartInternal, { ...props });
202
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BarListChartInternal, {
203
+ ...props
204
+ });
186
205
  }
187
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTVV7ZI7Ccjs.GlobalChartsProvider, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BarListChartInternal, { ...props }) });
206
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLSV7F26Bcjs.GlobalChartsProvider, {
207
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BarListChartInternal, {
208
+ ...props
209
+ })
210
+ });
188
211
  };
189
212
  BarListChart.displayName = "BarListChart";
190
- var BarListChartResponsive = _chunkNW3RUYK2cjs.withResponsive.call(void 0, BarListChart);
213
+ var BarListChartResponsive = _chunk7QDEU3KNcjs.withResponsive.call(void 0, BarListChart);
191
214
 
192
215
 
193
216
 
194
217
 
195
218
  exports.BarListChart = BarListChart; exports.BarListChartResponsive = BarListChartResponsive;
196
- //# sourceMappingURL=chunk-YYQ4IK5V.cjs.map
219
+ //# sourceMappingURL=chunk-5N77S5N3.cjs.map