@automattic/charts 0.57.0 → 0.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/CHANGELOG.md +16 -2
  2. package/dist/charts/bar-chart/index.cjs +7 -5
  3. package/dist/charts/bar-chart/index.cjs.map +1 -1
  4. package/dist/charts/bar-chart/index.css +12 -24
  5. package/dist/charts/bar-chart/index.css.map +1 -1
  6. package/dist/charts/bar-chart/index.d.cts +3 -4
  7. package/dist/charts/bar-chart/index.d.ts +3 -4
  8. package/dist/charts/bar-chart/index.js +6 -4
  9. package/dist/charts/bar-list-chart/index.cjs +8 -6
  10. package/dist/charts/bar-list-chart/index.cjs.map +1 -1
  11. package/dist/charts/bar-list-chart/index.css +12 -24
  12. package/dist/charts/bar-list-chart/index.css.map +1 -1
  13. package/dist/charts/bar-list-chart/index.d.cts +3 -3
  14. package/dist/charts/bar-list-chart/index.d.ts +3 -3
  15. package/dist/charts/bar-list-chart/index.js +7 -5
  16. package/dist/charts/conversion-funnel-chart/index.cjs +5 -5
  17. package/dist/charts/conversion-funnel-chart/index.css +0 -94
  18. package/dist/charts/conversion-funnel-chart/index.css.map +1 -1
  19. package/dist/charts/conversion-funnel-chart/index.d.cts +1 -1
  20. package/dist/charts/conversion-funnel-chart/index.d.ts +1 -1
  21. package/dist/charts/conversion-funnel-chart/index.js +4 -4
  22. package/dist/charts/geo-chart/index.cjs +4 -4
  23. package/dist/charts/geo-chart/index.css +0 -94
  24. package/dist/charts/geo-chart/index.css.map +1 -1
  25. package/dist/charts/geo-chart/index.d.cts +1 -1
  26. package/dist/charts/geo-chart/index.d.ts +1 -1
  27. package/dist/charts/geo-chart/index.js +3 -3
  28. package/dist/charts/leaderboard-chart/index.cjs +7 -6
  29. package/dist/charts/leaderboard-chart/index.cjs.map +1 -1
  30. package/dist/charts/leaderboard-chart/index.css +12 -24
  31. package/dist/charts/leaderboard-chart/index.css.map +1 -1
  32. package/dist/charts/leaderboard-chart/index.d.cts +3 -3
  33. package/dist/charts/leaderboard-chart/index.d.ts +3 -3
  34. package/dist/charts/leaderboard-chart/index.js +6 -5
  35. package/dist/charts/line-chart/index.cjs +7 -5
  36. package/dist/charts/line-chart/index.cjs.map +1 -1
  37. package/dist/charts/line-chart/index.css +12 -24
  38. package/dist/charts/line-chart/index.css.map +1 -1
  39. package/dist/charts/line-chart/index.d.cts +3 -4
  40. package/dist/charts/line-chart/index.d.ts +3 -4
  41. package/dist/charts/line-chart/index.js +6 -4
  42. package/dist/charts/pie-chart/index.cjs +7 -6
  43. package/dist/charts/pie-chart/index.cjs.map +1 -1
  44. package/dist/charts/pie-chart/index.css +12 -24
  45. package/dist/charts/pie-chart/index.css.map +1 -1
  46. package/dist/charts/pie-chart/index.d.cts +7 -13
  47. package/dist/charts/pie-chart/index.d.ts +7 -13
  48. package/dist/charts/pie-chart/index.js +6 -5
  49. package/dist/charts/pie-semi-circle-chart/index.cjs +7 -6
  50. package/dist/charts/pie-semi-circle-chart/index.cjs.map +1 -1
  51. package/dist/charts/pie-semi-circle-chart/index.css +12 -24
  52. package/dist/charts/pie-semi-circle-chart/index.css.map +1 -1
  53. package/dist/charts/pie-semi-circle-chart/index.d.cts +7 -13
  54. package/dist/charts/pie-semi-circle-chart/index.d.ts +7 -13
  55. package/dist/charts/pie-semi-circle-chart/index.js +6 -5
  56. package/dist/charts/sparkline/index.cjs +8 -6
  57. package/dist/charts/sparkline/index.cjs.map +1 -1
  58. package/dist/charts/sparkline/index.css +12 -24
  59. package/dist/charts/sparkline/index.css.map +1 -1
  60. package/dist/charts/sparkline/index.js +7 -5
  61. package/dist/{chunk-32DH6JDF.js → chunk-2I67QUIV.js} +52 -420
  62. package/dist/chunk-2I67QUIV.js.map +1 -0
  63. package/dist/{chunk-WLODYNLB.js → chunk-2ICEEQOC.js} +31 -27
  64. package/dist/chunk-2ICEEQOC.js.map +1 -0
  65. package/dist/{chunk-IU4DYUAV.js → chunk-4B7BL2DD.js} +3 -3
  66. package/dist/{chunk-BCX5THDQ.js → chunk-4OXMTKAL.js} +24 -26
  67. package/dist/chunk-4OXMTKAL.js.map +1 -0
  68. package/dist/{chunk-4OPFE4RM.js → chunk-B6NLZFRW.js} +30 -27
  69. package/dist/chunk-B6NLZFRW.js.map +1 -0
  70. package/dist/{chunk-D2UH4CFE.cjs → chunk-BBAUQOW6.cjs} +9 -9
  71. package/dist/{chunk-D2UH4CFE.cjs.map → chunk-BBAUQOW6.cjs.map} +1 -1
  72. package/dist/{chunk-XKRJL2QT.cjs → chunk-CMMHCTBX.cjs} +45 -47
  73. package/dist/chunk-CMMHCTBX.cjs.map +1 -0
  74. package/dist/{chunk-YE2T52VZ.cjs → chunk-CPPXJATQ.cjs} +51 -47
  75. package/dist/chunk-CPPXJATQ.cjs.map +1 -0
  76. package/dist/{chunk-H2V4JMSA.js → chunk-DKU775VC.js} +3 -3
  77. package/dist/{chunk-ZH4F5RMG.cjs → chunk-GRA7Y2ZG.cjs} +46 -48
  78. package/dist/chunk-GRA7Y2ZG.cjs.map +1 -0
  79. package/dist/{chunk-DAU3HNEG.js → chunk-JJIMABHT.js} +9 -2
  80. package/dist/chunk-JJIMABHT.js.map +1 -0
  81. package/dist/{chunk-CZGYJKG6.js → chunk-KJHWXOCZ.js} +4 -4
  82. package/dist/{chunk-6CCZL2JJ.js → chunk-KRWGSOJ2.js} +30 -2
  83. package/dist/chunk-KRWGSOJ2.js.map +1 -0
  84. package/dist/{chunk-V36ERY7Y.js → chunk-LTFH7SEG.js} +24 -26
  85. package/dist/chunk-LTFH7SEG.js.map +1 -0
  86. package/dist/{chunk-PXLEMUGJ.js → chunk-MUNOKLLE.js} +3 -3
  87. package/dist/{chunk-VTS3PNMS.cjs → chunk-MXGLYWVP.cjs} +9 -2
  88. package/dist/chunk-MXGLYWVP.cjs.map +1 -0
  89. package/dist/{chunk-Z45KX47P.cjs → chunk-OYC34VTO.cjs} +154 -94
  90. package/dist/chunk-OYC34VTO.cjs.map +1 -0
  91. package/dist/{chunk-77OKCVQN.cjs → chunk-PQL5I3F6.cjs} +17 -17
  92. package/dist/{chunk-77OKCVQN.cjs.map → chunk-PQL5I3F6.cjs.map} +1 -1
  93. package/dist/{chunk-I35UYJJR.cjs → chunk-REZTQ4PH.cjs} +41 -21
  94. package/dist/chunk-REZTQ4PH.cjs.map +1 -0
  95. package/dist/{chunk-RCY6XLGU.cjs → chunk-TZRUHQOH.cjs} +36 -8
  96. package/dist/chunk-TZRUHQOH.cjs.map +1 -0
  97. package/dist/{chunk-2NCY7R4G.js → chunk-UTYVIOWZ.js} +111 -51
  98. package/dist/chunk-UTYVIOWZ.js.map +1 -0
  99. package/dist/{chunk-TO3OQBXG.cjs → chunk-W2LDIX26.cjs} +5 -5
  100. package/dist/{chunk-TO3OQBXG.cjs.map → chunk-W2LDIX26.cjs.map} +1 -1
  101. package/dist/{chunk-7FQX4ALL.cjs → chunk-WSG64BVN.cjs} +6 -6
  102. package/dist/{chunk-7FQX4ALL.cjs.map → chunk-WSG64BVN.cjs.map} +1 -1
  103. package/dist/chunk-WTQYGUNF.js +400 -0
  104. package/dist/chunk-WTQYGUNF.js.map +1 -0
  105. package/dist/{chunk-RHHVEJHJ.cjs → chunk-WYK7EL5R.cjs} +68 -436
  106. package/dist/chunk-WYK7EL5R.cjs.map +1 -0
  107. package/dist/{chunk-VJM5XCB4.cjs → chunk-XC4KHJYX.cjs} +49 -46
  108. package/dist/chunk-XC4KHJYX.cjs.map +1 -0
  109. package/dist/chunk-XVBH5XHE.cjs +400 -0
  110. package/dist/chunk-XVBH5XHE.cjs.map +1 -0
  111. package/dist/{chunk-Z26M4V2M.js → chunk-YAFQVVDI.js} +41 -21
  112. package/dist/chunk-YAFQVVDI.js.map +1 -0
  113. package/dist/components/legend/index.cjs +4 -3
  114. package/dist/components/legend/index.cjs.map +1 -1
  115. package/dist/components/legend/index.css +12 -24
  116. package/dist/components/legend/index.css.map +1 -1
  117. package/dist/components/legend/index.d.cts +4 -4
  118. package/dist/components/legend/index.d.ts +4 -4
  119. package/dist/components/legend/index.js +3 -2
  120. package/dist/components/tooltip/index.d.cts +1 -1
  121. package/dist/components/tooltip/index.d.ts +1 -1
  122. package/dist/hooks/index.cjs +3 -5
  123. package/dist/hooks/index.cjs.map +1 -1
  124. package/dist/hooks/index.css +0 -94
  125. package/dist/hooks/index.css.map +1 -1
  126. package/dist/hooks/index.d.cts +3 -11
  127. package/dist/hooks/index.d.ts +3 -11
  128. package/dist/hooks/index.js +2 -4
  129. package/dist/index.cjs +18 -16
  130. package/dist/index.cjs.map +1 -1
  131. package/dist/index.css +12 -24
  132. package/dist/index.css.map +1 -1
  133. package/dist/index.d.cts +7 -7
  134. package/dist/index.d.ts +7 -7
  135. package/dist/index.js +17 -15
  136. package/dist/{leaderboard-chart-DR7CGb0L.d.cts → leaderboard-chart-BSbg0ufV.d.cts} +3 -7
  137. package/dist/{leaderboard-chart-BKYYXcg2.d.ts → leaderboard-chart-odEYxxEC.d.ts} +3 -7
  138. package/dist/{legend-C2grwnWk.d.cts → legend-DFkosEvC.d.cts} +1 -1
  139. package/dist/{legend-Cj0xM5dU.d.ts → legend-DLswHhOk.d.ts} +1 -1
  140. package/dist/providers/index.cjs +3 -3
  141. package/dist/providers/index.css +0 -94
  142. package/dist/providers/index.css.map +1 -1
  143. package/dist/providers/index.d.cts +3 -3
  144. package/dist/providers/index.d.ts +3 -3
  145. package/dist/providers/index.js +2 -2
  146. package/dist/{themes-CyjKm-P_.d.cts → themes-D0qc5JaW.d.cts} +2 -2
  147. package/dist/{themes-BmVGrYnF.d.ts → themes-itO4Ht5g.d.ts} +2 -2
  148. package/dist/{types-KtOPPzPX.d.cts → types-B5f6XQ7Q.d.cts} +1 -1
  149. package/dist/{types-CuUEszrM.d.ts → types-BsHooDbM.d.ts} +1 -1
  150. package/dist/{types-I67mddpr.d.cts → types-BuSrRM4p.d.ts} +3 -32
  151. package/dist/{types-DZordNiO.d.cts → types-ChOUI9-N.d.cts} +80 -40
  152. package/dist/{types-DZordNiO.d.ts → types-ChOUI9-N.d.ts} +80 -40
  153. package/dist/{types-I67mddpr.d.ts → types-Dfw9VOKI.d.cts} +3 -32
  154. package/dist/utils/index.cjs +2 -2
  155. package/dist/utils/index.d.cts +1 -1
  156. package/dist/utils/index.d.ts +1 -1
  157. package/dist/utils/index.js +1 -1
  158. package/package.json +6 -6
  159. package/src/charts/bar-chart/bar-chart.tsx +17 -18
  160. package/src/charts/bar-chart/test/bar-chart.test.tsx +48 -31
  161. package/src/charts/leaderboard-chart/leaderboard-chart.tsx +38 -41
  162. package/src/charts/leaderboard-chart/test/leaderboard-chart.test.tsx +4 -5
  163. package/src/charts/leaderboard-chart/types.ts +1 -11
  164. package/src/charts/line-chart/line-chart.tsx +18 -16
  165. package/src/charts/line-chart/test/line-chart.test.tsx +49 -27
  166. package/src/charts/line-chart/types.ts +0 -1
  167. package/src/charts/pie-chart/pie-chart.tsx +23 -22
  168. package/src/charts/pie-chart/test/composition-api.test.tsx +41 -0
  169. package/src/charts/pie-chart/test/pie-chart.test.tsx +9 -9
  170. package/src/charts/pie-semi-circle-chart/pie-semi-circle-chart.tsx +21 -23
  171. package/src/charts/pie-semi-circle-chart/test/pie-semi-circle-chart.test.tsx +33 -5
  172. package/src/charts/private/chart-composition/index.ts +2 -0
  173. package/src/charts/private/chart-composition/render-legend-slot.ts +22 -0
  174. package/src/charts/private/chart-composition/test/render-legend-slot.test.tsx +60 -0
  175. package/src/charts/private/chart-composition/test/use-chart-children.test.tsx +91 -0
  176. package/src/charts/private/chart-composition/use-chart-children.ts +34 -2
  177. package/src/components/legend/index.ts +1 -8
  178. package/src/components/legend/private/base-legend.module.scss +19 -37
  179. package/src/components/legend/private/base-legend.tsx +0 -2
  180. package/src/components/legend/types.ts +7 -34
  181. package/src/hooks/index.ts +0 -1
  182. package/src/index.ts +1 -7
  183. package/src/types.ts +83 -38
  184. package/src/utils/date-parsing.ts +10 -1
  185. package/src/utils/test/date-parsing.test.ts +12 -0
  186. package/src/utils/test/resolve-css-var.test.ts +2 -2
  187. package/tsup.config.ts +1 -1
  188. package/dist/chunk-2NCY7R4G.js.map +0 -1
  189. package/dist/chunk-32DH6JDF.js.map +0 -1
  190. package/dist/chunk-4OPFE4RM.js.map +0 -1
  191. package/dist/chunk-6CCZL2JJ.js.map +0 -1
  192. package/dist/chunk-BCX5THDQ.js.map +0 -1
  193. package/dist/chunk-DAU3HNEG.js.map +0 -1
  194. package/dist/chunk-I35UYJJR.cjs.map +0 -1
  195. package/dist/chunk-RCY6XLGU.cjs.map +0 -1
  196. package/dist/chunk-RHHVEJHJ.cjs.map +0 -1
  197. package/dist/chunk-V36ERY7Y.js.map +0 -1
  198. package/dist/chunk-VJM5XCB4.cjs.map +0 -1
  199. package/dist/chunk-VTS3PNMS.cjs.map +0 -1
  200. package/dist/chunk-WLODYNLB.js.map +0 -1
  201. package/dist/chunk-XKRJL2QT.cjs.map +0 -1
  202. package/dist/chunk-YE2T52VZ.cjs.map +0 -1
  203. package/dist/chunk-Z26M4V2M.js.map +0 -1
  204. package/dist/chunk-Z45KX47P.cjs.map +0 -1
  205. package/dist/chunk-ZH4F5RMG.cjs.map +0 -1
  206. package/src/hooks/use-has-legend-child.ts +0 -22
  207. /package/dist/{chunk-IU4DYUAV.js.map → chunk-4B7BL2DD.js.map} +0 -0
  208. /package/dist/{chunk-H2V4JMSA.js.map → chunk-DKU775VC.js.map} +0 -0
  209. /package/dist/{chunk-CZGYJKG6.js.map → chunk-KJHWXOCZ.js.map} +0 -0
  210. /package/dist/{chunk-PXLEMUGJ.js.map → chunk-MUNOKLLE.js.map} +0 -0
@@ -1,5 +1,4 @@
1
1
  import {
2
- formatPercentage,
3
2
  getColorDistance,
4
3
  getItemShapeStyles,
5
4
  getLongestTickWidth,
@@ -8,14 +7,53 @@ import {
8
7
  normalizeColorToHex,
9
8
  parseAsLocalDate,
10
9
  resolveCssVariable
11
- } from "./chunk-DAU3HNEG.js";
10
+ } from "./chunk-JJIMABHT.js";
11
+ import {
12
+ __commonJS,
13
+ __toESM
14
+ } from "./chunk-G3PMV62Z.js";
15
+
16
+ // ../../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js
17
+ var require_fast_deep_equal = __commonJS({
18
+ "../../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js"(exports, module) {
19
+ "use strict";
20
+ module.exports = function equal(a, b) {
21
+ if (a === b) return true;
22
+ if (a && b && typeof a == "object" && typeof b == "object") {
23
+ if (a.constructor !== b.constructor) return false;
24
+ var length, i, keys;
25
+ if (Array.isArray(a)) {
26
+ length = a.length;
27
+ if (length != b.length) return false;
28
+ for (i = length; i-- !== 0; )
29
+ if (!equal(a[i], b[i])) return false;
30
+ return true;
31
+ }
32
+ if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
33
+ if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
34
+ if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
35
+ keys = Object.keys(a);
36
+ length = keys.length;
37
+ if (length !== Object.keys(b).length) return false;
38
+ for (i = length; i-- !== 0; )
39
+ if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
40
+ for (i = length; i-- !== 0; ) {
41
+ var key = keys[i];
42
+ if (!equal(a[key], b[key])) return false;
43
+ }
44
+ return true;
45
+ }
46
+ return a !== a && b !== b;
47
+ };
48
+ }
49
+ });
12
50
 
13
51
  // src/hooks/use-deep-memo.ts
14
- import isEqual from "fast-deep-equal";
52
+ var import_fast_deep_equal = __toESM(require_fast_deep_equal(), 1);
15
53
  import { useRef } from "react";
16
54
  var useDeepMemo = (value) => {
17
55
  const ref = useRef(value);
18
- if (!isEqual(ref.current, value)) {
56
+ if (!(0, import_fast_deep_equal.default)(ref.current, value)) {
19
57
  ref.current = value;
20
58
  }
21
59
  return ref.current;
@@ -695,413 +733,12 @@ function useElementSize({
695
733
  return [refCallback, width, height];
696
734
  }
697
735
 
698
- // src/hooks/use-has-legend-child.ts
699
- import { Children, isValidElement, useMemo as useMemo8 } from "react";
700
-
701
- // src/components/legend/legend.tsx
702
- import { useContext as useContext5, useMemo as useMemo6, forwardRef as forwardRef2 } from "react";
703
-
704
- // src/charts/private/single-chart-context/single-chart-context.tsx
705
- import { createContext as createContext2 } from "react";
706
- var ChartInstanceContext = /* @__PURE__ */ createContext2(null);
707
- var SingleChartContext = ChartInstanceContext;
708
-
709
- // src/charts/private/single-chart-context/use-single-chart-context.ts
710
- import { useContext as useContext3 } from "react";
711
- var useChartInstanceContext = () => {
712
- const context = useContext3(ChartInstanceContext);
713
- if (!context) {
714
- throw new Error("useChartInstanceContext must be used within a Chart component");
715
- }
716
- return context;
717
- };
718
- var useSingleChartContext = useChartInstanceContext;
719
-
720
- // src/components/legend/private/base-legend.tsx
721
- import { Group } from "@visx/group";
722
- import { LegendItem, LegendLabel, LegendOrdinal, LegendShape } from "@visx/legend";
723
- import { scaleOrdinal } from "@visx/scale";
724
- import clsx from "clsx";
725
- import { forwardRef, useCallback as useCallback4, useContext as useContext4 } from "react";
726
-
727
- // src/components/legend/utils/value-or-identity.ts
728
- function valueOrIdentity(_) {
729
- if (_ && typeof _ === "object" && "value" in _ && typeof _.value !== "undefined")
730
- return _.value;
731
- return _;
732
- }
733
- function valueOrIdentityString(_) {
734
- return String(valueOrIdentity(_));
735
- }
736
-
737
- // src/components/legend/utils/label-transform-factory.ts
738
- function labelTransformFactory({
739
- scale,
740
- labelFormat
741
- }) {
742
- return (d, i) => ({
743
- datum: d,
744
- index: i,
745
- text: `${labelFormat(d, i)}`,
746
- value: scale(d)
747
- });
748
- }
749
-
750
- // src/components/legend/private/base-legend.module.scss
751
- var base_legend_module_default = {
752
- "legend--horizontal": "a8ccharts-AELBvX",
753
- "legend--vertical": "a8ccharts-fX8uQe",
754
- "legend--alignment-start": "a8ccharts-DEe0wg",
755
- "legend--alignment-center": "a8ccharts-WBKF9I",
756
- "legend--alignment-end": "a8ccharts-JfwMng",
757
- "legend--position-top": "a8ccharts-8Y73Kh",
758
- "legend--position-bottom": "a8ccharts-TVM-IY",
759
- "legend-item": "a8ccharts-Vflwq8",
760
- "legend-item--interactive": "a8ccharts-qGsavM",
761
- "legend-item--inactive": "a8ccharts-ZtDY-Q",
762
- "legend-item-label": "a8ccharts-2H65Kr",
763
- "legend-item-text--wrap": "a8ccharts-faSDBI",
764
- "legend-item-text--ellipsis": "a8ccharts-FISUIO",
765
- "legend-item-value": "a8ccharts-DTZlT-"
766
- };
767
-
768
- // src/components/legend/private/base-legend.tsx
769
- import { jsx as _jsx2, jsxs as _jsxs } from "react/jsx-runtime";
770
- var orientationToFlexDirection = {
771
- horizontal: "row",
772
- vertical: "column"
773
- };
774
- var LegendText = ({
775
- text,
776
- textOverflow,
777
- maxWidth
778
- }) => {
779
- const isEllipsis = maxWidth != null && textOverflow === "ellipsis";
780
- const [textRef, isTruncated] = useTextTruncation(Boolean(isEllipsis));
781
- return /* @__PURE__ */ _jsx2("span", {
782
- ref: textRef,
783
- className: clsx(base_legend_module_default["legend-item-text"], maxWidth != null && base_legend_module_default[`legend-item-text--${textOverflow}`]),
784
- style: {
785
- ...maxWidth != null && {
786
- maxWidth,
787
- minWidth: 0
788
- }
789
- },
790
- title: isEllipsis && isTruncated ? text : void 0,
791
- children: text
792
- });
793
- };
794
- var BaseLegend = /* @__PURE__ */ forwardRef(({
795
- items,
796
- className,
797
- orientation = "horizontal",
798
- position = "bottom",
799
- alignment = "center",
800
- shape = "rect",
801
- fill = valueOrIdentityString,
802
- size = valueOrIdentityString,
803
- labelFormat = valueOrIdentity,
804
- labelTransform = labelTransformFactory,
805
- itemStyles,
806
- itemClassName,
807
- labelStyles,
808
- labelClassName,
809
- shapeStyles,
810
- render,
811
- interactive = false,
812
- chartId
813
- }, ref) => {
814
- const {
815
- margin: itemMargin = "0",
816
- flexDirection: itemDirection = "row"
817
- } = itemStyles ?? {};
818
- const {
819
- justifyContent: labelJustifyContent = "flex-start",
820
- flex: labelFlex = "0 0 auto",
821
- margin: labelMargin = "0 4px",
822
- maxWidth,
823
- textOverflow = "wrap"
824
- } = labelStyles ?? {};
825
- const {
826
- width: shapeWidth = 16,
827
- height: shapeHeight = 16,
828
- margin: shapeMargin = "2px 4px 2px 0"
829
- } = shapeStyles ?? {};
830
- const theme = useGlobalChartsTheme();
831
- const context = useContext4(GlobalChartsContext);
832
- const legendScale = scaleOrdinal({
833
- domain: items.map((item) => item.label),
834
- range: items.map((item) => item.color)
835
- });
836
- const domain = legendScale.domain();
837
- const getShapeStyle = useCallback4(({
838
- index
839
- }) => items[index]?.shapeStyle, [items]);
840
- const handleLegendClick = useCallback4((seriesLabel) => {
841
- if (interactive && chartId && context) {
842
- context.toggleSeriesVisibility(chartId, seriesLabel);
843
- }
844
- }, [interactive, chartId, context]);
845
- const isSeriesVisible = useCallback4((seriesLabel) => {
846
- if (!interactive || !chartId || !context) {
847
- return true;
848
- }
849
- return context.isSeriesVisible(chartId, seriesLabel);
850
- }, [interactive, chartId, context]);
851
- const createClickHandler = useCallback4((labelText) => {
852
- if (!interactive) {
853
- return void 0;
854
- }
855
- return () => handleLegendClick(labelText);
856
- }, [interactive, handleLegendClick]);
857
- const createKeyDownHandler = useCallback4((labelText) => {
858
- if (!interactive) {
859
- return void 0;
860
- }
861
- return (event) => {
862
- if (event.key === "Enter" || event.key === " ") {
863
- event.preventDefault();
864
- handleLegendClick(labelText);
865
- }
866
- };
867
- }, [interactive, handleLegendClick]);
868
- return render ? render(items) : /* @__PURE__ */ _jsx2(LegendOrdinal, {
869
- scale: legendScale,
870
- labelFormat,
871
- labelTransform,
872
- children: (labels) => /* @__PURE__ */ _jsx2("div", {
873
- ref,
874
- role: "list",
875
- className: clsx(base_legend_module_default.legend, base_legend_module_default[`legend--${orientation}`], base_legend_module_default[`legend--alignment-${alignment}`], base_legend_module_default[`legend--position-${position}`], className),
876
- style: {
877
- flexDirection: orientationToFlexDirection[orientation],
878
- ...theme.legend?.containerStyles
879
- },
880
- children: labels.map((label, i) => {
881
- const visible = isSeriesVisible(label.text);
882
- const handleClick = createClickHandler(label.text);
883
- const handleKeyDown = createKeyDownHandler(label.text);
884
- const matchedItem = items[i];
885
- return /* @__PURE__ */ _jsxs(LegendItem, {
886
- className: clsx("visx-legend-item", base_legend_module_default["legend-item"], interactive && base_legend_module_default["legend-item--interactive"], !visible && base_legend_module_default["legend-item--inactive"], itemClassName),
887
- margin: itemMargin,
888
- flexDirection: orientation === "vertical" && alignment === "end" ? "row-reverse" : itemDirection,
889
- onClick: handleClick,
890
- onKeyDown: handleKeyDown,
891
- role: interactive ? "button" : void 0,
892
- tabIndex: interactive ? 0 : void 0,
893
- "aria-pressed": interactive ? visible : void 0,
894
- "aria-label": interactive ? `${label.text}: ${visible ? "visible" : "hidden"}. Toggle visibility.` : void 0,
895
- children: [items[i]?.renderGlyph ? /* @__PURE__ */ _jsx2("svg", {
896
- width: items[i]?.glyphSize * 2,
897
- height: items[i]?.glyphSize * 2,
898
- children: /* @__PURE__ */ _jsx2(Group, {
899
- children: items[i]?.renderGlyph({
900
- key: `legend-glyph-${label.text}`,
901
- datum: {},
902
- index: i,
903
- color: fill(label),
904
- size: items[i]?.glyphSize,
905
- x: items[i]?.glyphSize,
906
- y: items[i]?.glyphSize
907
- })
908
- })
909
- }) : /* @__PURE__ */ _jsx2(LegendShape, {
910
- shape,
911
- height: shapeHeight,
912
- width: shapeWidth,
913
- margin: shapeMargin,
914
- item: domain[i],
915
- itemIndex: i,
916
- label,
917
- fill,
918
- size,
919
- shapeStyle: getShapeStyle
920
- }), /* @__PURE__ */ _jsxs(LegendLabel, {
921
- className: clsx("visx-legend-label", base_legend_module_default["legend-item-label"], labelClassName),
922
- style: {
923
- justifyContent: labelJustifyContent,
924
- flex: labelFlex,
925
- margin: labelMargin,
926
- ...theme.legend?.labelStyles
927
- },
928
- children: [/* @__PURE__ */ _jsx2(LegendText, {
929
- text: label.text,
930
- textOverflow,
931
- maxWidth
932
- }), matchedItem?.value != null && matchedItem.value !== "" && /* @__PURE__ */ _jsxs("span", {
933
- className: base_legend_module_default["legend-item-value"],
934
- children: ["\xA0", matchedItem.value]
935
- })]
936
- })]
937
- }, `legend-${label.text}-${i}`);
938
- })
939
- })
940
- });
941
- });
942
-
943
- // src/components/legend/legend.tsx
944
- import { jsx as _jsx3 } from "react/jsx-runtime";
945
- var Legend = /* @__PURE__ */ forwardRef2(({
946
- chartId,
947
- items,
948
- ...props
949
- }, ref) => {
950
- const context = useContext5(GlobalChartsContext);
951
- const singleChartContext = useContext5(SingleChartContext);
952
- const contextChartId = chartId ?? singleChartContext?.chartId;
953
- const contextItems = useMemo6(() => {
954
- return contextChartId && context ? context.getChartData(contextChartId)?.legendItems : void 0;
955
- }, [contextChartId, context]);
956
- const legendItems = items || contextItems;
957
- if (!legendItems) {
958
- return null;
959
- }
960
- return /* @__PURE__ */ _jsx3(BaseLegend, {
961
- ref,
962
- items: legendItems,
963
- ...props,
964
- chartId: contextChartId
965
- });
966
- });
967
-
968
- // src/components/legend/hooks/use-chart-legend-items.ts
969
- import { formatNumber } from "@automattic/number-formatters";
970
- import { useMemo as useMemo7 } from "react";
971
- function formatPointValue(point, showValues, legendValueDisplay = "percentage") {
972
- if (!showValues || legendValueDisplay === "none") {
973
- return "";
974
- }
975
- if ("percentage" in point) {
976
- const percentagePoint = point;
977
- switch (legendValueDisplay) {
978
- case "percentage":
979
- return formatPercentage(percentagePoint.percentage);
980
- case "value":
981
- return formatNumber(percentagePoint.value);
982
- case "valueDisplay":
983
- return percentagePoint.valueDisplay || formatNumber(percentagePoint.value);
984
- default:
985
- return "";
986
- }
987
- }
988
- if ("value" in point) {
989
- return point.value !== null ? formatNumber(point.value) : "";
990
- }
991
- return "";
992
- }
993
- function applyGlyphToLegendItem(baseItem, withGlyph, glyph, renderGlyph, glyphSize) {
994
- if (withGlyph) {
995
- const glyphToUse = glyph || renderGlyph;
996
- if (glyphToUse) {
997
- return {
998
- ...baseItem,
999
- glyphSize,
1000
- renderGlyph: glyphToUse
1001
- };
1002
- }
1003
- }
1004
- return baseItem;
1005
- }
1006
- function processSeriesData(seriesData, getElementStyles, showValues, withGlyph, glyphSize, renderGlyph, legendShape) {
1007
- const mapper = (series, index) => {
1008
- const { color, glyph, shapeStyles } = getElementStyles({
1009
- data: series,
1010
- index,
1011
- legendShape
1012
- });
1013
- const baseItem = {
1014
- label: series.label,
1015
- value: showValues ? series.data?.length?.toString() || "0" : "",
1016
- color,
1017
- shapeStyle: shapeStyles
1018
- };
1019
- return applyGlyphToLegendItem(baseItem, withGlyph, glyph, renderGlyph, glyphSize);
1020
- };
1021
- return seriesData.map(mapper);
1022
- }
1023
- function processPointData(pointData, getElementStyles, showValues, legendValueDisplay, withGlyph, glyphSize, renderGlyph, legendShape) {
1024
- const mapper = (point, index) => {
1025
- const { color, glyph, shapeStyles } = getElementStyles({
1026
- data: point,
1027
- index,
1028
- legendShape
1029
- });
1030
- const baseItem = {
1031
- label: point.label,
1032
- value: formatPointValue(point, showValues, legendValueDisplay),
1033
- color,
1034
- shapeStyle: shapeStyles
1035
- };
1036
- return applyGlyphToLegendItem(baseItem, withGlyph, glyph, renderGlyph, glyphSize);
1037
- };
1038
- return pointData.map(mapper);
1039
- }
1040
- function useChartLegendItems(data, options = {}, legendShape) {
1041
- const {
1042
- showValues = false,
1043
- legendValueDisplay = "percentage",
1044
- withGlyph = false,
1045
- glyphSize = 8,
1046
- renderGlyph
1047
- } = options;
1048
- const { getElementStyles } = useGlobalChartsContext();
1049
- return useMemo7(() => {
1050
- if (!data || !Array.isArray(data) || data.length === 0) {
1051
- return [];
1052
- }
1053
- if ("data" in data[0]) {
1054
- return processSeriesData(
1055
- data,
1056
- getElementStyles,
1057
- showValues,
1058
- withGlyph,
1059
- glyphSize,
1060
- renderGlyph,
1061
- legendShape
1062
- );
1063
- }
1064
- return processPointData(
1065
- data,
1066
- getElementStyles,
1067
- showValues,
1068
- legendValueDisplay,
1069
- withGlyph,
1070
- glyphSize,
1071
- renderGlyph,
1072
- legendShape
1073
- );
1074
- }, [
1075
- data,
1076
- getElementStyles,
1077
- showValues,
1078
- legendValueDisplay,
1079
- withGlyph,
1080
- glyphSize,
1081
- renderGlyph,
1082
- legendShape
1083
- ]);
1084
- }
1085
-
1086
- // src/hooks/use-has-legend-child.ts
1087
- function useHasLegendChild(children) {
1088
- return useMemo8(() => {
1089
- let found = false;
1090
- Children.forEach(children, (child) => {
1091
- if (isValidElement(child) && child.type === Legend) {
1092
- found = true;
1093
- }
1094
- });
1095
- return found;
1096
- }, [children]);
1097
- }
1098
-
1099
736
  // src/hooks/use-text-truncation.ts
1100
- import { useCallback as useCallback5, useRef as useRef4, useState as useState3 } from "react";
737
+ import { useCallback as useCallback4, useRef as useRef4, useState as useState3 } from "react";
1101
738
  function useTextTruncation(enabled = true) {
1102
739
  const [isTruncated, setIsTruncated] = useState3(false);
1103
740
  const observerRef = useRef4(null);
1104
- const refCallback = useCallback5(
741
+ const refCallback = useCallback4(
1105
742
  (node) => {
1106
743
  if (observerRef.current) {
1107
744
  observerRef.current.disconnect();
@@ -1126,12 +763,12 @@ function useTextTruncation(enabled = true) {
1126
763
  }
1127
764
 
1128
765
  // src/hooks/use-zero-value-display.ts
1129
- import { useMemo as useMemo9 } from "react";
766
+ import { useMemo as useMemo6 } from "react";
1130
767
  var MIN_PIXEL_SIZE = 3;
1131
768
  var ZERO_PIXEL_SIZE = MIN_PIXEL_SIZE - 1;
1132
769
  var useZeroValueDisplay = (data, options = { enabled: false }) => {
1133
770
  const { enabled, valueAxisLength } = options;
1134
- return useMemo9(() => {
771
+ return useMemo6(() => {
1135
772
  if (!enabled || !valueAxisLength || valueAxisLength <= 0) return data;
1136
773
  let maxAbsoluteValue = 0;
1137
774
  for (const series of data) {
@@ -1176,14 +813,14 @@ var useZeroValueDisplay = (data, options = { enabled: false }) => {
1176
813
  };
1177
814
 
1178
815
  // src/hooks/use-interactive-legend-data.ts
1179
- import { useMemo as useMemo10 } from "react";
816
+ import { useMemo as useMemo7 } from "react";
1180
817
  var useInteractiveLegendData = ({
1181
818
  data,
1182
819
  chartId,
1183
820
  legendInteractive,
1184
821
  isSeriesVisible
1185
822
  }) => {
1186
- const visibleData = useMemo10(() => {
823
+ const visibleData = useMemo7(() => {
1187
824
  if (!chartId || !legendInteractive) {
1188
825
  return data;
1189
826
  }
@@ -1197,10 +834,10 @@ var useInteractiveLegendData = ({
1197
834
  percentage: totalValue > 0 ? segment.value / totalValue * 100 : 0
1198
835
  }));
1199
836
  }, [data, chartId, isSeriesVisible, legendInteractive]);
1200
- const allSegmentsHidden = useMemo10(() => {
837
+ const allSegmentsHidden = useMemo7(() => {
1201
838
  return legendInteractive && visibleData.length === 0;
1202
839
  }, [legendInteractive, visibleData]);
1203
- const legendData = useMemo10(() => {
840
+ const legendData = useMemo7(() => {
1204
841
  if (!legendInteractive || !chartId) {
1205
842
  return data;
1206
843
  }
@@ -1236,8 +873,6 @@ function usePrefersReducedMotion() {
1236
873
  }
1237
874
 
1238
875
  export {
1239
- SingleChartContext,
1240
- useSingleChartContext,
1241
876
  useTooltipPortalRelocator,
1242
877
  defaultTheme,
1243
878
  GlobalChartsContext,
@@ -1250,14 +885,11 @@ export {
1250
885
  useChartDataTransform,
1251
886
  useChartMargin,
1252
887
  useElementSize,
1253
- useHasLegendChild,
1254
888
  useTextTruncation,
1255
889
  useZeroValueDisplay,
1256
890
  useInteractiveLegendData,
1257
891
  usePrefersReducedMotion,
1258
892
  useChartRegistration,
1259
- useGlobalChartsTheme,
1260
- Legend,
1261
- useChartLegendItems
893
+ useGlobalChartsTheme
1262
894
  };
1263
- //# sourceMappingURL=chunk-32DH6JDF.js.map
895
+ //# sourceMappingURL=chunk-2I67QUIV.js.map