@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
@@ -7,7 +7,7 @@ var with_responsive_module_default = {
7
7
  };
8
8
 
9
9
  // src/charts/private/with-responsive/with-responsive.tsx
10
- import { jsx } from "react/jsx-runtime";
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
11
  var useResponsiveDimensions = ({
12
12
  resizeDebounceTime = 300,
13
13
  maxWidth = 1200,
@@ -58,31 +58,24 @@ function withResponsive(WrappedComponent) {
58
58
  const effectiveWidth = measuredWidth || size || width || 0;
59
59
  const effectiveHeight = measuredHeight || size || height || 0;
60
60
  const defaultHeight = hasAspectRatio ? "auto" : "100%";
61
- return /* @__PURE__ */ jsx(
62
- "div",
63
- {
64
- ref: parentRef,
65
- "data-testid": "responsive-wrapper",
66
- className: with_responsive_module_default.container,
67
- style: {
68
- width: size ?? width ?? "100%",
69
- height: size ?? height ?? defaultHeight
70
- },
71
- children: /* @__PURE__ */ jsx(
72
- WrappedComponent,
73
- {
74
- width: effectiveWidth,
75
- height: effectiveHeight,
76
- size: effectiveWidth,
77
- ...chartProps
78
- }
79
- )
80
- }
81
- );
61
+ return /* @__PURE__ */ _jsx("div", {
62
+ ref: parentRef,
63
+ className: with_responsive_module_default.container,
64
+ style: {
65
+ width: size ?? width ?? "100%",
66
+ height: size ?? height ?? defaultHeight
67
+ },
68
+ children: /* @__PURE__ */ _jsx(WrappedComponent, {
69
+ width: effectiveWidth,
70
+ height: effectiveHeight,
71
+ size: effectiveWidth,
72
+ ...chartProps
73
+ })
74
+ });
82
75
  };
83
76
  }
84
77
 
85
78
  export {
86
79
  withResponsive
87
80
  };
88
- //# sourceMappingURL=chunk-C33AQZEC.js.map
81
+ //# sourceMappingURL=chunk-TYIH5LMV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/private/with-responsive/with-responsive.tsx","../src/charts/private/with-responsive/with-responsive.module.scss"],"sourcesContent":["import { useParentSize } from '@visx/responsive';\nimport styles from './with-responsive.module.scss';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useResponsiveDimensions = ({\n resizeDebounceTime = 300,\n maxWidth = 1200,\n aspectRatio\n}) => {\n const {\n parentRef,\n width: parentWidth,\n height: parentHeight\n } = useParentSize({\n debounceTime: resizeDebounceTime,\n enableDebounceLeadingCall: true\n });\n const containerWidth = parentWidth > 0 ? Math.min(parentWidth, maxWidth) : 0;\n const containerHeight = aspectRatio !== undefined ? containerWidth * aspectRatio : parentHeight;\n return {\n parentRef,\n width: containerWidth,\n height: containerHeight,\n /**\n * Whether an aspectRatio was provided. Used to determine container\n * height styling: 'auto' when true (height derived from width),\n * '100%' when false (fill parent container).\n */\n hasAspectRatio: aspectRatio !== undefined\n };\n};\n\n/**\n * A higher-order component that provides responsive dimensions\n * to the wrapped chart component using useParentSize from `@visx/responsive`.\n *\n * @param WrappedComponent - The chart component to be wrapped.\n * @return A functional component that renders the wrapped component with responsive dimensions.\n */\nexport function withResponsive(\n// 'options' is excluded so that each chart can define its own options type\nWrappedComponent) {\n return function ResponsiveChart({\n resizeDebounceTime = 300,\n maxWidth = 1200,\n aspectRatio,\n size,\n width,\n height,\n ...chartProps\n }) {\n const {\n parentRef,\n width: measuredWidth,\n height: measuredHeight,\n hasAspectRatio\n } = useResponsiveDimensions({\n resizeDebounceTime,\n maxWidth,\n aspectRatio\n });\n\n // Use measured dimensions, but fall back to explicit props if measurement returns 0\n // (e.g., during initial render or in test environments without DOM measurement)\n const effectiveWidth = measuredWidth || size || width || 0;\n const effectiveHeight = measuredHeight || size || height || 0;\n const defaultHeight = hasAspectRatio ? 'auto' : '100%';\n return /*#__PURE__*/_jsx(\"div\", {\n ref: parentRef,\n className: styles.container,\n style: {\n width: size ?? width ?? '100%',\n height: size ?? height ?? defaultHeight\n },\n children: /*#__PURE__*/_jsx(WrappedComponent, {\n width: effectiveWidth,\n height: effectiveHeight,\n size: effectiveWidth,\n ...chartProps\n })\n });\n };\n}","import 'css-chunk:src/charts/private/with-responsive/with-responsive.module.scss';export default {\n \"container\": \"a8ccharts-GSKfBD\"\n};"],"mappings":";AAAA,SAAS,qBAAqB;;;ACAoD,IAAO,iCAAQ;AAAA,EAC/F,aAAa;AACf;;;ADAA,SAAS,OAAO,YAAY;AAC5B,IAAM,0BAA0B,CAAC;AAAA,EAC/B,qBAAqB;AAAA,EACrB,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,IAAI,cAAc;AAAA,IAChB,cAAc;AAAA,IACd,2BAA2B;AAAA,EAC7B,CAAC;AACD,QAAM,iBAAiB,cAAc,IAAI,KAAK,IAAI,aAAa,QAAQ,IAAI;AAC3E,QAAM,kBAAkB,gBAAgB,SAAY,iBAAiB,cAAc;AACnF,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMR,gBAAgB,gBAAgB;AAAA,EAClC;AACF;AASO,SAAS,eAEhB,kBAAkB;AAChB,SAAO,SAAS,gBAAgB;AAAA,IAC9B,qBAAqB;AAAA,IACrB,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GAAG;AACD,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,IACF,IAAI,wBAAwB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAID,UAAM,iBAAiB,iBAAiB,QAAQ,SAAS;AACzD,UAAM,kBAAkB,kBAAkB,QAAQ,UAAU;AAC5D,UAAM,gBAAgB,iBAAiB,SAAS;AAChD,WAAoB,qBAAK,OAAO;AAAA,MAC9B,KAAK;AAAA,MACL,WAAW,+BAAO;AAAA,MAClB,OAAO;AAAA,QACL,OAAO,QAAQ,SAAS;AAAA,QACxB,QAAQ,QAAQ,UAAU;AAAA,MAC5B;AAAA,MACA,UAAuB,qBAAK,kBAAkB;AAAA,QAC5C,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,GAAG;AAAA,MACL,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -0,0 +1,165 @@
1
+ import {
2
+ LineChart
3
+ } from "./chunk-R23BFDIW.js";
4
+ import {
5
+ withResponsive
6
+ } from "./chunk-TYIH5LMV.js";
7
+ import {
8
+ useGlobalChartsTheme
9
+ } from "./chunk-AWNCAKZY.js";
10
+
11
+ // src/charts/sparkline/sparkline.tsx
12
+ import clsx from "clsx";
13
+ import { useMemo, forwardRef } from "react";
14
+
15
+ // src/charts/sparkline/sparkline.module.scss
16
+ var sparkline_module_default = {
17
+ "sparkline": "a8ccharts-o-3Z8B",
18
+ "sparkline--empty": "a8ccharts-CbLbcd"
19
+ };
20
+
21
+ // src/charts/sparkline/sparkline.tsx
22
+ import { jsx as _jsx } from "react/jsx-runtime";
23
+ var DEFAULT_WIDTH = 100;
24
+ var DEFAULT_HEIGHT = 40;
25
+ var transformToSeriesData = (data, color, strokeWidth) => {
26
+ const baseDate = new Date(2e3, 0, 1);
27
+ return [{
28
+ label: "sparkline",
29
+ data: data.map((value, index) => ({
30
+ date: new Date(baseDate.getTime() + index * 864e5),
31
+ // Add days
32
+ value
33
+ })),
34
+ options: {
35
+ stroke: color,
36
+ seriesLineStyle: strokeWidth ? {
37
+ strokeWidth
38
+ } : void 0
39
+ }
40
+ }];
41
+ };
42
+ var SparklineComponent = /* @__PURE__ */ forwardRef(({
43
+ data,
44
+ width = DEFAULT_WIDTH,
45
+ height = DEFAULT_HEIGHT,
46
+ color,
47
+ strokeWidth: strokeWidthProp,
48
+ withGradientFill = true,
49
+ gradient,
50
+ className,
51
+ chartId,
52
+ margin: marginProp,
53
+ animation
54
+ }, ref) => {
55
+ const theme = useGlobalChartsTheme();
56
+ const themeStrokeWidth = theme.sparkline?.strokeWidth ?? 1.5;
57
+ const strokeWidth = strokeWidthProp ?? themeStrokeWidth;
58
+ const seriesData = useMemo(() => {
59
+ if (!data || data.length === 0) {
60
+ return [];
61
+ }
62
+ return transformToSeriesData(data, color, strokeWidth);
63
+ }, [data, color, strokeWidth]);
64
+ const finalMargin = useMemo(() => {
65
+ const themeMargin = theme.sparkline?.margin ?? {
66
+ top: 2,
67
+ right: 2,
68
+ bottom: 2,
69
+ left: 2
70
+ };
71
+ const margin = marginProp ?? themeMargin;
72
+ return {
73
+ ...themeMargin,
74
+ ...margin
75
+ };
76
+ }, [marginProp, theme.sparkline?.margin]);
77
+ const seriesWithGradient = useMemo(() => {
78
+ if (!gradient || seriesData.length === 0) {
79
+ return seriesData;
80
+ }
81
+ return seriesData.map((series) => ({
82
+ ...series,
83
+ options: {
84
+ ...series.options,
85
+ gradient: {
86
+ from: gradient.from || color || "#000000",
87
+ to: gradient.to || "#ffffff",
88
+ fromOpacity: gradient.fromOpacity ?? 0.5,
89
+ toOpacity: gradient.toOpacity ?? 0
90
+ }
91
+ }
92
+ }));
93
+ }, [seriesData, gradient, color]);
94
+ if (!data || data.length === 0) {
95
+ return /* @__PURE__ */ _jsx("div", {
96
+ ref,
97
+ className: clsx("sparkline", sparkline_module_default.sparkline, sparkline_module_default["sparkline--empty"], className),
98
+ style: {
99
+ width,
100
+ height
101
+ }
102
+ });
103
+ }
104
+ if (data.length === 1) {
105
+ const cx = width / 2;
106
+ const cy = height / 2;
107
+ const resolvedColor = color || "#000000";
108
+ return /* @__PURE__ */ _jsx("div", {
109
+ ref,
110
+ className: clsx("sparkline", sparkline_module_default.sparkline, sparkline_module_default["sparkline--single-point"], className),
111
+ style: {
112
+ width,
113
+ height
114
+ },
115
+ children: /* @__PURE__ */ _jsx("svg", {
116
+ width,
117
+ height,
118
+ "aria-hidden": "true",
119
+ children: /* @__PURE__ */ _jsx("circle", {
120
+ cx,
121
+ cy,
122
+ r: strokeWidth * 1.5,
123
+ fill: resolvedColor
124
+ })
125
+ })
126
+ });
127
+ }
128
+ return /* @__PURE__ */ _jsx("div", {
129
+ ref,
130
+ className: clsx("sparkline", sparkline_module_default.sparkline, className),
131
+ children: /* @__PURE__ */ _jsx(LineChart, {
132
+ data: seriesWithGradient,
133
+ width,
134
+ height,
135
+ margin: finalMargin,
136
+ chartId,
137
+ withGradientFill,
138
+ withTooltips: false,
139
+ showLegend: false,
140
+ gridVisibility: "none",
141
+ options: {
142
+ axis: {
143
+ x: {
144
+ display: false
145
+ },
146
+ y: {
147
+ display: false
148
+ }
149
+ }
150
+ },
151
+ curveType: "monotone",
152
+ animation
153
+ })
154
+ });
155
+ });
156
+ SparklineComponent.displayName = "SparklineComponent";
157
+ var SparklineUnresponsive = SparklineComponent;
158
+ SparklineUnresponsive.displayName = "SparklineUnresponsive";
159
+ var Sparkline = withResponsive(SparklineUnresponsive);
160
+
161
+ export {
162
+ SparklineUnresponsive,
163
+ Sparkline
164
+ };
165
+ //# sourceMappingURL=chunk-WMWAUOQ4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/sparkline/sparkline.tsx","../src/charts/sparkline/sparkline.module.scss"],"sourcesContent":["import clsx from 'clsx';\nimport { useMemo, forwardRef } from 'react';\nimport { useGlobalChartsTheme } from '../../providers';\nimport { LineChartUnresponsive } from '../line-chart';\nimport { withResponsive } from '../private/with-responsive';\nimport styles from './sparkline.module.scss';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DEFAULT_WIDTH = 100;\nconst DEFAULT_HEIGHT = 40;\n\n/**\n * Transforms a simple number array into SeriesData format for LineChart.\n * Uses index-based dates to create a linear x-axis.\n *\n * @param data - Array of numeric values to plot\n * @param color - Optional color for the line stroke\n * @param strokeWidth - Optional stroke width for the line\n * @return SeriesData array suitable for LineChart\n */\nconst transformToSeriesData = (data, color, strokeWidth) => {\n // Use a fixed base date and increment by index to create linear spacing\n const baseDate = new Date(2000, 0, 1);\n return [{\n label: 'sparkline',\n data: data.map((value, index) => ({\n date: new Date(baseDate.getTime() + index * 86400000),\n // Add days\n value\n })),\n options: {\n stroke: color,\n seriesLineStyle: strokeWidth ? {\n strokeWidth\n } : undefined\n }\n }];\n};\nconst SparklineComponent = /*#__PURE__*/forwardRef(({\n data,\n width = DEFAULT_WIDTH,\n height = DEFAULT_HEIGHT,\n color,\n strokeWidth: strokeWidthProp,\n withGradientFill = true,\n gradient,\n className,\n chartId,\n margin: marginProp,\n animation\n}, ref) => {\n const theme = useGlobalChartsTheme();\n\n // Get theme defaults for sparkline\n const themeStrokeWidth = theme.sparkline?.strokeWidth ?? 1.5;\n\n // Use prop values or fall back to theme defaults\n const strokeWidth = strokeWidthProp ?? themeStrokeWidth;\n\n // Transform number[] to SeriesData[] for LineChart\n const seriesData = useMemo(() => {\n if (!data || data.length === 0) {\n return [];\n }\n return transformToSeriesData(data, color, strokeWidth);\n }, [data, color, strokeWidth]);\n\n // Merge margins with theme defaults\n const finalMargin = useMemo(() => {\n const themeMargin = theme.sparkline?.margin ?? {\n top: 2,\n right: 2,\n bottom: 2,\n left: 2\n };\n const margin = marginProp ?? themeMargin;\n return {\n ...themeMargin,\n ...margin\n };\n }, [marginProp, theme.sparkline?.margin]);\n\n // Build gradient options for the series if custom gradient is provided\n // Note: This must be called before any early returns to follow React hooks rules\n const seriesWithGradient = useMemo(() => {\n if (!gradient || seriesData.length === 0) {\n return seriesData;\n }\n return seriesData.map(series => ({\n ...series,\n options: {\n ...series.options,\n gradient: {\n from: gradient.from || color || '#000000',\n to: gradient.to || '#ffffff',\n fromOpacity: gradient.fromOpacity ?? 0.5,\n toOpacity: gradient.toOpacity ?? 0.0\n }\n }\n }));\n }, [seriesData, gradient, color]);\n\n // Handle empty data\n if (!data || data.length === 0) {\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n className: clsx('sparkline', styles.sparkline, styles['sparkline--empty'], className),\n style: {\n width,\n height\n }\n });\n }\n\n // Handle single data point - render a simple dot\n if (data.length === 1) {\n const cx = width / 2;\n const cy = height / 2;\n const resolvedColor = color || '#000000';\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n className: clsx('sparkline', styles.sparkline, styles['sparkline--single-point'], className),\n style: {\n width,\n height\n },\n children: /*#__PURE__*/_jsx(\"svg\", {\n width: width,\n height: height,\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/_jsx(\"circle\", {\n cx: cx,\n cy: cy,\n r: strokeWidth * 1.5,\n fill: resolvedColor\n })\n })\n });\n }\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n className: clsx('sparkline', styles.sparkline, className),\n children: /*#__PURE__*/_jsx(LineChartUnresponsive, {\n data: seriesWithGradient,\n width: width,\n height: height,\n margin: finalMargin,\n chartId: chartId,\n withGradientFill: withGradientFill,\n withTooltips: false,\n showLegend: false,\n gridVisibility: \"none\",\n options: {\n axis: {\n x: {\n display: false\n },\n y: {\n display: false\n }\n }\n },\n curveType: \"monotone\",\n animation: animation\n })\n });\n});\nSparklineComponent.displayName = 'SparklineComponent';\n\n/**\n * Sparkline - A minimal line chart for inline data visualization.\n *\n * Sparklines are compact charts designed to be embedded inline with text or\n * displayed in small spaces like table cells or dashboards. They show trends\n * without axes, labels, or other chart chrome.\n *\n * This component is built on top of LineChart with preconfigured settings\n * for minimal display (no axes, grid, tooltips, or legend).\n */\nconst SparklineUnresponsive = SparklineComponent;\nSparklineUnresponsive.displayName = 'SparklineUnresponsive';\n\n/**\n * Responsive Sparkline chart component\n */\nconst Sparkline = withResponsive(SparklineUnresponsive);\nexport { Sparkline as default, SparklineUnresponsive };","import 'css-chunk:src/charts/sparkline/sparkline.module.scss';export default {\n \"sparkline\": \"a8ccharts-o-3Z8B\",\n \"sparkline--empty\": \"a8ccharts-CbLbcd\"\n};"],"mappings":"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","names":[]}
@@ -0,0 +1,66 @@
1
+ // src/components/trend-indicator/trend-indicator.tsx
2
+ import clsx from "clsx";
3
+
4
+ // src/components/trend-indicator/trend-indicator.module.scss
5
+ var trend_indicator_module_default = {
6
+ "trend-indicator": "a8ccharts-tGw1PY",
7
+ "trend-indicator--up": "a8ccharts-Fn-D1W",
8
+ "trend-indicator--down": "a8ccharts-HqtGQO",
9
+ "trend-indicator--neutral": "a8ccharts-S10nvO",
10
+ "trend-indicator__icon": "a8ccharts-5HjpOT",
11
+ "trend-indicator__value": "a8ccharts-muLL2Q"
12
+ };
13
+
14
+ // src/components/trend-indicator/trend-indicator.tsx
15
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
+ var DIRECTION_LABELS = {
17
+ up: "Increase",
18
+ down: "Decrease",
19
+ neutral: "No change"
20
+ };
21
+ var Icon = ({
22
+ direction
23
+ }) => {
24
+ if (direction === "neutral") {
25
+ return null;
26
+ }
27
+ const isUp = direction === "up";
28
+ return /* @__PURE__ */ _jsx("svg", {
29
+ className: trend_indicator_module_default["trend-indicator__icon"],
30
+ viewBox: "0 0 16 16",
31
+ fill: "none",
32
+ "aria-hidden": "true",
33
+ children: /* @__PURE__ */ _jsx("path", {
34
+ d: isUp ? "M8 13V3M4 7l4-4 4 4" : "M8 3v10M4 9l4 4 4-4",
35
+ stroke: "currentColor",
36
+ strokeWidth: "1.5",
37
+ strokeLinecap: "round",
38
+ strokeLinejoin: "round"
39
+ })
40
+ });
41
+ };
42
+ function TrendIndicator({
43
+ direction,
44
+ value,
45
+ className,
46
+ style,
47
+ showIcon = true
48
+ }) {
49
+ const ariaLabel = `${DIRECTION_LABELS[direction]}: ${value}`;
50
+ return /* @__PURE__ */ _jsxs("span", {
51
+ className: clsx(trend_indicator_module_default["trend-indicator"], trend_indicator_module_default[`trend-indicator--${direction}`], className),
52
+ style,
53
+ "aria-label": ariaLabel,
54
+ children: [showIcon && /* @__PURE__ */ _jsx(Icon, {
55
+ direction
56
+ }), /* @__PURE__ */ _jsx("span", {
57
+ className: trend_indicator_module_default["trend-indicator__value"],
58
+ children: value
59
+ })]
60
+ });
61
+ }
62
+
63
+ export {
64
+ TrendIndicator
65
+ };
66
+ //# sourceMappingURL=chunk-XWYZIFZW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/trend-indicator/trend-indicator.tsx","../src/components/trend-indicator/trend-indicator.module.scss"],"sourcesContent":["import clsx from 'clsx';\nimport styles from './trend-indicator.module.scss';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst DIRECTION_LABELS = {\n up: 'Increase',\n down: 'Decrease',\n neutral: 'No change'\n};\nconst Icon = ({\n direction\n}) => {\n if (direction === 'neutral') {\n return null;\n }\n const isUp = direction === 'up';\n return /*#__PURE__*/_jsx(\"svg\", {\n className: styles['trend-indicator__icon'],\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/_jsx(\"path\", {\n d: isUp ? 'M8 13V3M4 7l4-4 4 4' : 'M8 3v10M4 9l4 4 4-4',\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n });\n};\n\n/**\n * TrendIndicator displays a directional trend with a value.\n * Used to show percentage changes or growth metrics.\n *\n * @param {TrendIndicatorProps} props - Component props\n * @return {JSX.Element} The rendered trend indicator\n */\nexport function TrendIndicator({\n direction,\n value,\n className,\n style,\n showIcon = true\n}) {\n const ariaLabel = `${DIRECTION_LABELS[direction]}: ${value}`;\n return /*#__PURE__*/_jsxs(\"span\", {\n className: clsx(styles['trend-indicator'], styles[`trend-indicator--${direction}`], className),\n style: style,\n \"aria-label\": ariaLabel,\n children: [showIcon && /*#__PURE__*/_jsx(Icon, {\n direction: direction\n }), /*#__PURE__*/_jsx(\"span\", {\n className: styles['trend-indicator__value'],\n children: value\n })]\n });\n}","import 'css-chunk:src/components/trend-indicator/trend-indicator.module.scss';export default {\n \"trend-indicator\": \"a8ccharts-tGw1PY\",\n \"trend-indicator--up\": \"a8ccharts-Fn-D1W\",\n \"trend-indicator--down\": \"a8ccharts-HqtGQO\",\n \"trend-indicator--neutral\": \"a8ccharts-S10nvO\",\n \"trend-indicator__icon\": \"a8ccharts-5HjpOT\",\n \"trend-indicator__value\": \"a8ccharts-muLL2Q\"\n};"],"mappings":";AAAA,OAAO,UAAU;;;ACA6D,IAAO,iCAAQ;AAAA,EAC3F,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,yBAAyB;AAAA,EACzB,4BAA4B;AAAA,EAC5B,yBAAyB;AAAA,EACzB,0BAA0B;AAC5B;;;ADLA,SAAS,OAAO,MAAM,QAAQ,aAAa;AAC3C,IAAM,mBAAmB;AAAA,EACvB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AACX;AACA,IAAM,OAAO,CAAC;AAAA,EACZ;AACF,MAAM;AACJ,MAAI,cAAc,WAAW;AAC3B,WAAO;AAAA,EACT;AACA,QAAM,OAAO,cAAc;AAC3B,SAAoB,qBAAK,OAAO;AAAA,IAC9B,WAAW,+BAAO,uBAAuB;AAAA,IACzC,SAAS;AAAA,IACT,MAAM;AAAA,IACN,eAAe;AAAA,IACf,UAAuB,qBAAK,QAAQ;AAAA,MAClC,GAAG,OAAO,wBAAwB;AAAA,MAClC,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,MACf,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH,CAAC;AACH;AASO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAG;AACD,QAAM,YAAY,GAAG,iBAAiB,SAAS,CAAC,KAAK,KAAK;AAC1D,SAAoB,sBAAM,QAAQ;AAAA,IAChC,WAAW,KAAK,+BAAO,iBAAiB,GAAG,+BAAO,oBAAoB,SAAS,EAAE,GAAG,SAAS;AAAA,IAC7F;AAAA,IACA,cAAc;AAAA,IACd,UAAU,CAAC,YAAyB,qBAAK,MAAM;AAAA,MAC7C;AAAA,IACF,CAAC,GAAgB,qBAAK,QAAQ;AAAA,MAC5B,WAAW,+BAAO,wBAAwB;AAAA,MAC1C,UAAU;AAAA,IACZ,CAAC,CAAC;AAAA,EACJ,CAAC;AACH;","names":[]}
@@ -8,11 +8,11 @@ var base_tooltip_module_default = {
8
8
 
9
9
  // src/components/tooltip/base-tooltip.tsx
10
10
  var _jsxruntime = require('react/jsx-runtime');
11
- var DefaultTooltipContent = ({ data }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
12
- _optionalChain([data, 'optionalAccess', _ => _.label]),
13
- ": ",
14
- _optionalChain([data, 'optionalAccess', _2 => _2.valueDisplay]) || _numberformatters.formatNumber.call(void 0, _optionalChain([data, 'optionalAccess', _3 => _3.value]))
15
- ] });
11
+ var DefaultTooltipContent = ({
12
+ data
13
+ }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, {
14
+ children: [_optionalChain([data, 'optionalAccess', _ => _.label]), ": ", _optionalChain([data, 'optionalAccess', _2 => _2.valueDisplay]) || _numberformatters.formatNumber.call(void 0, _optionalChain([data, 'optionalAccess', _3 => _3.value]))]
15
+ });
16
16
  var BaseTooltip = ({
17
17
  data,
18
18
  top,
@@ -23,11 +23,23 @@ var BaseTooltip = ({
23
23
  style,
24
24
  renderContainer = true
25
25
  }) => {
26
- const content = children || data && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component, { data, className });
26
+ const content = children || data && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component, {
27
+ data,
28
+ className
29
+ });
27
30
  if (!renderContainer) {
28
31
  return content;
29
32
  }
30
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: base_tooltip_module_default.tooltip, style: { top, left, ...style }, role: "tooltip", children: content });
33
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {
34
+ className: base_tooltip_module_default.tooltip,
35
+ style: {
36
+ top,
37
+ left,
38
+ ...style
39
+ },
40
+ role: "tooltip",
41
+ children: content
42
+ });
31
43
  };
32
44
 
33
45
  // src/components/tooltip/accessible-tooltip.tsx
@@ -96,24 +108,26 @@ var AccessibleTooltip = ({
96
108
  return (params) => {
97
109
  const tooltipContent = renderTooltip(params);
98
110
  if (selectedIndex !== void 0) {
99
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
100
- "div",
101
- {
102
- ref: tooltipRef,
103
- tabIndex: -1,
104
- role: "tooltip",
105
- "aria-atomic": "true",
106
- className: keyboardFocusedClassName,
107
- "data-testid": `chart-tooltip-${selectedIndex}`,
108
- children: tooltipContent
109
- },
110
- `chart-tooltip-${selectedIndex}`
111
- );
111
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {
112
+ ref: tooltipRef,
113
+ tabIndex: -1,
114
+ role: "tooltip",
115
+ "aria-atomic": "true",
116
+ className: keyboardFocusedClassName,
117
+ children: tooltipContent
118
+ }, `chart-tooltip-${selectedIndex}`);
112
119
  }
113
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { role: "tooltip", "aria-live": "polite", children: tooltipContent });
120
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {
121
+ role: "tooltip",
122
+ "aria-live": "polite",
123
+ children: tooltipContent
124
+ });
114
125
  };
115
126
  }, [renderTooltip, selectedIndex, tooltipRef, keyboardFocusedClassName]);
116
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _xychart.Tooltip, { ...props, renderTooltip: focusableRenderTooltip });
127
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _xychart.Tooltip, {
128
+ ...props,
129
+ renderTooltip: focusableRenderTooltip
130
+ });
117
131
  };
118
132
  var useKeyboardNavigation = ({
119
133
  selectedIndex,
@@ -123,14 +137,11 @@ var useKeyboardNavigation = ({
123
137
  chartRef,
124
138
  totalPoints
125
139
  }) => {
126
- const tooltipRef = _react.useCallback.call(void 0,
127
- (element) => {
128
- if (element && selectedIndex !== void 0) {
129
- element.focus();
130
- }
131
- },
132
- [selectedIndex]
133
- );
140
+ const tooltipRef = _react.useCallback.call(void 0, (element) => {
141
+ if (element && selectedIndex !== void 0) {
142
+ element.focus();
143
+ }
144
+ }, [selectedIndex]);
134
145
  const onChartFocus = _react.useCallback.call(void 0, () => {
135
146
  if (!isNavigating && selectedIndex !== void 0) {
136
147
  setSelectedIndex(0);
@@ -139,37 +150,34 @@ var useKeyboardNavigation = ({
139
150
  const onChartBlur = _react.useCallback.call(void 0, () => {
140
151
  setIsNavigating(false);
141
152
  }, [setIsNavigating]);
142
- const onChartKeyDown = _react.useCallback.call(void 0,
143
- (event) => {
144
- if (totalPoints === 0) return;
145
- if (event.key === "Tab") {
146
- _optionalChain([chartRef, 'access', _10 => _10.current, 'optionalAccess', _11 => _11.focus, 'call', _12 => _12()]);
147
- setSelectedIndex(void 0);
148
- setIsNavigating(false);
149
- return;
150
- }
151
- const currentSelectedIndex = selectedIndex === void 0 ? -1 : selectedIndex;
152
- if (currentSelectedIndex + 1 >= totalPoints && ["ArrowRight"].includes(event.key)) {
153
- _optionalChain([chartRef, 'access', _13 => _13.current, 'optionalAccess', _14 => _14.focus, 'call', _15 => _15()]);
154
- setSelectedIndex(void 0);
155
- setIsNavigating(false);
156
- return;
157
- }
158
- event.preventDefault();
159
- if (["ArrowRight"].includes(event.key)) {
160
- setIsNavigating(true);
161
- setSelectedIndex((currentSelectedIndex + 1) % totalPoints);
162
- } else if (["ArrowLeft"].includes(event.key)) {
163
- setIsNavigating(true);
164
- setSelectedIndex((currentSelectedIndex - 1 + totalPoints) % totalPoints);
165
- } else if (event.key === "Escape") {
166
- setSelectedIndex(void 0);
167
- setIsNavigating(false);
168
- _optionalChain([chartRef, 'access', _16 => _16.current, 'optionalAccess', _17 => _17.focus, 'call', _18 => _18()]);
169
- }
170
- },
171
- [totalPoints, selectedIndex, setSelectedIndex, setIsNavigating, chartRef]
172
- );
153
+ const onChartKeyDown = _react.useCallback.call(void 0, (event) => {
154
+ if (totalPoints === 0) return;
155
+ if (event.key === "Tab") {
156
+ _optionalChain([chartRef, 'access', _10 => _10.current, 'optionalAccess', _11 => _11.focus, 'call', _12 => _12()]);
157
+ setSelectedIndex(void 0);
158
+ setIsNavigating(false);
159
+ return;
160
+ }
161
+ const currentSelectedIndex = selectedIndex === void 0 ? -1 : selectedIndex;
162
+ if (currentSelectedIndex + 1 >= totalPoints && ["ArrowRight"].includes(event.key)) {
163
+ _optionalChain([chartRef, 'access', _13 => _13.current, 'optionalAccess', _14 => _14.focus, 'call', _15 => _15()]);
164
+ setSelectedIndex(void 0);
165
+ setIsNavigating(false);
166
+ return;
167
+ }
168
+ event.preventDefault();
169
+ if (["ArrowRight"].includes(event.key)) {
170
+ setIsNavigating(true);
171
+ setSelectedIndex((currentSelectedIndex + 1) % totalPoints);
172
+ } else if (["ArrowLeft"].includes(event.key)) {
173
+ setIsNavigating(true);
174
+ setSelectedIndex((currentSelectedIndex - 1 + totalPoints) % totalPoints);
175
+ } else if (event.key === "Escape") {
176
+ setSelectedIndex(void 0);
177
+ setIsNavigating(false);
178
+ _optionalChain([chartRef, 'access', _16 => _16.current, 'optionalAccess', _17 => _17.focus, 'call', _18 => _18()]);
179
+ }
180
+ }, [totalPoints, selectedIndex, setSelectedIndex, setIsNavigating, chartRef]);
173
181
  return {
174
182
  tooltipRef,
175
183
  onChartFocus,
@@ -183,4 +191,4 @@ var useKeyboardNavigation = ({
183
191
 
184
192
 
185
193
  exports.BaseTooltip = BaseTooltip; exports.AccessibleTooltip = AccessibleTooltip; exports.useKeyboardNavigation = useKeyboardNavigation;
186
- //# sourceMappingURL=chunk-7HROSZRS.cjs.map
194
+ //# sourceMappingURL=chunk-Y3NNQMAX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-Y3NNQMAX.cjs","../src/components/tooltip/base-tooltip.tsx","../src/components/tooltip/base-tooltip.module.scss","../src/components/tooltip/accessible-tooltip.tsx"],"names":["_jsx"],"mappings":"AAAA;ACAA,iEAA6B;ADE7B;AACA;AEHmE,IAAO,4BAAA,EAAQ;AAAA,EAChF,SAAA,EAAW;AACb,CAAA;AFKA;AACA;ACNA,+CAAkE;AAClE,IAAM,sBAAA,EAAwB,CAAC;AAAA,EAC7B;AACF,CAAA,EAAA,mBAAmB,8BAAA,oBAAM,EAAW;AAAA,EAClC,QAAA,EAAU,iBAAC,IAAA,2BAAM,OAAA,EAAO,IAAA,kBAAM,IAAA,6BAAM,eAAA,GAAgB,4CAAA,gBAAa,IAAA,6BAAM,OAAK,CAAC;AAC/E,CAAC,CAAA;AACM,IAAM,YAAA,EAAc,CAAC;AAAA,EAC1B,IAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA,EAAW,UAAA,EAAY,qBAAA;AAAA,EACvB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,gBAAA,EAAkB;AACpB,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,QAAA,EAAU,SAAA,GAAY,KAAA,mBAAqB,6BAAA,SAAK,EAAW;AAAA,IAC/D,IAAA;AAAA,IACA;AAAA,EACF,CAAC,CAAA;AACD,EAAA,GAAA,CAAI,CAAC,eAAA,EAAiB;AACpB,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,uBAAoB,6BAAA,KAAK,EAAO;AAAA,IAC9B,SAAA,EAAW,2BAAA,CAAO,OAAA;AAAA,IAClB,KAAA,EAAO;AAAA,MACL,GAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAG;AAAA,IACL,CAAA;AAAA,IACA,IAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAU;AAAA,EACZ,CAAC,CAAA;AACH,CAAA;ADQA;AACA;AG5CA,wCAAwC;AACxC,8BAA4D;AAK5D;AACO,IAAM,kBAAA,EAAoB,CAAC;AAAA,EAChC,aAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,wBAAA;AAAA,EACA,OAAA,EAAS,CAAC,CAAA;AAAA,EACV,KAAA,EAAO,OAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,eAAA,EAAiB,+BAAA,uBAAyB,CAAA;AAChD,EAAA,MAAM,YAAA,EAAc,4BAAA,CAAQ,EAAA,GAAM;AAChC,IAAA,GAAA,CAAI,KAAA,IAAS,YAAA,EAAc,OAAO,CAAC,CAAA;AACnC,IAAA,GAAA,CAAI,MAAA,CAAO,OAAA,IAAW,CAAA,EAAG,OAAO,CAAC,CAAA;AACjC,IAAA,MAAM,cAAA,EAAgB,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAA,GAAK,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA;AAChE,IAAA,MAAM,UAAA,EAAY,CAAC,CAAA;AAGnB,IAAA,IAAA,CAAA,IAAS,eAAA,EAAiB,CAAA,EAAG,eAAA,EAAiB,aAAA,EAAe,cAAA,EAAA,EAAkB;AAC7E,MAAA,IAAA,CAAA,IAAS,YAAA,EAAc,CAAA,EAAG,YAAA,EAAc,MAAA,CAAO,MAAA,EAAQ,WAAA,EAAA,EAAe;AACpE,QAAA,MAAM,WAAA,EAAa,MAAA,CAAO,WAAW,CAAA;AACrC,QAAA,GAAA,CAAI,eAAA,EAAiB,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ;AAC3C,UAAA,SAAA,CAAU,IAAA,CAAK;AAAA,YACb,KAAA,EAAO,UAAA,CAAW,IAAA,CAAK,cAAc,CAAA;AAAA,YACrC,WAAA,EAAa,UAAA,CAAW,KAAA;AAAA,YACxB,WAAA;AAAA,YACA;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,SAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAI,CAAC,CAAA;AAGjB,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,cAAA,IAAkB,KAAA,CAAA,EAAW;AAC/B,sBAAA,cAAA,6BAAgB,WAAA,mBAAY,GAAA;AAC5B,MAAA,MAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,KAAA,IAAS,OAAA,EAAS;AAEpB,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,EAAA,GAAU;AAC3B,QAAA,GAAA,CAAI,cAAA,EAAgB,CAAA,CAAE,IAAA,CAAK,MAAA,EAAQ;AACjC,UAAA,MAAM,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,aAAa,CAAA;AAClC,0BAAA,cAAA,6BAAgB,WAAA,mBAAY;AAAA,YAC1B,KAAA;AAAA,YACA,GAAA,EAAK,CAAA,CAAE,KAAA;AAAA,YACP;AAAA,UACF,CAAC,GAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAAA,IACH,EAAA,KAAA,GAAA,CAAW,KAAA,IAAS,YAAA,EAAc;AAEhC,MAAA,GAAA,CAAI,cAAA,EAAgB,WAAA,CAAY,MAAA,EAAQ;AACtC,QAAA,MAAM,YAAA,EAAc,WAAA,CAAY,aAAa,CAAA;AAC7C,wBAAA,cAAA,6BAAgB,WAAA,mBAAY;AAAA,UAC1B,KAAA,EAAO,WAAA,CAAY,KAAA;AAAA,UACnB,GAAA,EAAK,WAAA,CAAY,WAAA;AAAA,UACjB,KAAA,EAAO,WAAA,CAAY;AAAA,QACrB,CAAC,GAAA;AAAA,MACH;AAAA,IACF;AAAA,EAIF,CAAA,EAAG,CAAC,aAAA,EAAe,WAAA,EAAa,MAAM,CAAC,CAAA;AAGvC,EAAA,MAAM,uBAAA,EAAyB,4BAAA,CAAQ,EAAA,GAAM;AAC3C,IAAA,GAAA,CAAI,CAAC,aAAA,EAAe,OAAO,KAAA,CAAA;AAC3B,IAAA,OAAO,CAAA,MAAA,EAAA,GAAU;AACf,MAAA,MAAM,eAAA,EAAiB,aAAA,CAAc,MAAM,CAAA;AAC3C,MAAA,GAAA,CAAI,cAAA,IAAkB,KAAA,CAAA,EAAW;AAC/B,QAAA,uBAAoBA,6BAAAA,KAAK,EAAO;AAAA,UAC9B,GAAA,EAAK,UAAA;AAAA,UACL,QAAA,EAAU,CAAA,CAAA;AAAA,UACV,IAAA,EAAM,SAAA;AAAA,UACN,aAAA,EAAe,MAAA;AAAA,UACf,SAAA,EAAW,wBAAA;AAAA,UACX,QAAA,EAAU;AAAA,QACZ,CAAA,EAAG,CAAA,cAAA,EAAiB,aAAa,CAAA,CAAA;AACnC,MAAA;AACgC,MAAA;AACxB,QAAA;AACO,QAAA;AACH,QAAA;AACX,MAAA;AACH,IAAA;AACgC,EAAA;AACA,EAAA;AAC7B,IAAA;AACY,IAAA;AAChB,EAAA;AACH;AAIsC;AACpC,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACI;AAE2B,EAAA;AACI,IAAA;AACjB,MAAA;AAChB,IAAA;AACgB,EAAA;AAGqB,EAAA;AAChB,IAAA;AACD,MAAA;AACpB,IAAA;AAC+B,EAAA;AAGK,EAAA;AACf,IAAA;AACH,EAAA;AACe,EAAA;AACV,IAAA;AAGE,IAAA;AACC,sBAAA;AACE,MAAA;AACL,MAAA;AACrB,MAAA;AACF,IAAA;AAC6B,IAAA;AACG,IAAA;AACN,sBAAA;AACE,MAAA;AACL,MAAA;AACrB,MAAA;AACF,IAAA;AACqB,IAAA;AACgB,IAAA;AACf,MAAA;AACF,MAAA;AACc,IAAA;AACZ,MAAA;AACF,MAAA;AACe,IAAA;AACP,MAAA;AACL,MAAA;AACG,sBAAA;AAC1B,IAAA;AAC8B,EAAA;AACzB,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AHqB0C;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-Y3NNQMAX.cjs","sourcesContent":[null,"import { formatNumber } from '@automattic/number-formatters';\nimport styles from './base-tooltip.module.scss';\nimport { Fragment as _Fragment, jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nconst DefaultTooltipContent = ({\n data\n}) => /*#__PURE__*/_jsxs(_Fragment, {\n children: [data?.label, \": \", data?.valueDisplay || formatNumber(data?.value)]\n});\nexport const BaseTooltip = ({\n data,\n top,\n left,\n component: Component = DefaultTooltipContent,\n children,\n className,\n style,\n renderContainer = true\n}) => {\n const content = children || data && /*#__PURE__*/_jsx(Component, {\n data: data,\n className: className\n });\n if (!renderContainer) {\n return content;\n }\n return /*#__PURE__*/_jsx(\"div\", {\n className: styles.tooltip,\n style: {\n top,\n left,\n ...style\n },\n role: \"tooltip\",\n children: content\n });\n};","import 'css-chunk:src/components/tooltip/base-tooltip.module.scss';export default {\n \"tooltip\": \"a8ccharts-OfX6nd\"\n};","import { Tooltip, TooltipContext } from '@visx/xychart';\nimport { useContext, useEffect, useCallback, useMemo } from 'react';\n\n// Type for flattened tooltip data used in individual mode\n\n// Enhanced tooltip with keyboard navigation and accessibility\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const AccessibleTooltip = ({\n renderTooltip,\n selectedIndex,\n tooltipRef,\n keyboardFocusedClassName,\n series = [],\n mode = 'group',\n ...props\n}) => {\n const tooltipContext = useContext(TooltipContext);\n const tooltipData = useMemo(() => {\n if (mode !== 'individual') return [];\n if (series.length === 0) return [];\n const maxDataPoints = Math.max(...series.map(s => s.data.length));\n const flattened = [];\n\n // Pattern: [series1[0], series2[0], series3[0], series1[1], series2[1], series3[1], ...]\n for (let dataPointIndex = 0; dataPointIndex < maxDataPoints; dataPointIndex++) {\n for (let seriesIndex = 0; seriesIndex < series.length; seriesIndex++) {\n const seriesData = series[seriesIndex];\n if (dataPointIndex < seriesData.data.length) {\n flattened.push({\n datum: seriesData.data[dataPointIndex],\n seriesLabel: seriesData.label,\n seriesIndex,\n dataPointIndex\n });\n }\n }\n }\n return flattened;\n }, [series, mode]);\n\n // Handle tooltip highlighting for keyboard navigation\n useEffect(() => {\n if (selectedIndex === undefined) {\n tooltipContext?.hideTooltip();\n return;\n }\n if (mode === 'group') {\n // Show all series at the selected data point index in single tooltip.\n series.forEach((s, index) => {\n if (selectedIndex < s.data.length) {\n const datum = s.data[selectedIndex];\n tooltipContext?.showTooltip({\n datum,\n key: s.label,\n index\n });\n }\n });\n } else if (mode === 'individual') {\n // Show individual tooltips for each datapoint from each series.\n if (selectedIndex < tooltipData.length) {\n const tooltipItem = tooltipData[selectedIndex];\n tooltipContext?.showTooltip({\n datum: tooltipItem.datum,\n key: tooltipItem.seriesLabel,\n index: tooltipItem.seriesIndex\n });\n }\n }\n\n // Don't include tooltipContext in the dependency array to avoid loop.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedIndex, tooltipData, series]);\n\n // Create a focusable renderTooltip that includes accessibility features\n const focusableRenderTooltip = useMemo(() => {\n if (!renderTooltip) return undefined;\n return params => {\n const tooltipContent = renderTooltip(params);\n if (selectedIndex !== undefined) {\n return /*#__PURE__*/_jsx(\"div\", {\n ref: tooltipRef,\n tabIndex: -1,\n role: \"tooltip\",\n \"aria-atomic\": \"true\",\n className: keyboardFocusedClassName,\n children: tooltipContent\n }, `chart-tooltip-${selectedIndex}`);\n }\n return /*#__PURE__*/_jsx(\"div\", {\n role: \"tooltip\",\n \"aria-live\": \"polite\",\n children: tooltipContent\n });\n };\n }, [renderTooltip, selectedIndex, tooltipRef, keyboardFocusedClassName]);\n return /*#__PURE__*/_jsx(Tooltip, {\n ...props,\n renderTooltip: focusableRenderTooltip\n });\n};\n\n// Keyboard navigation hook for charts\n\nexport const useKeyboardNavigation = ({\n selectedIndex,\n setSelectedIndex,\n isNavigating,\n setIsNavigating,\n chartRef,\n totalPoints\n}) => {\n // Focus the tooltip as soon as it is rendered\n const tooltipRef = useCallback(element => {\n if (element && selectedIndex !== undefined) {\n element.focus();\n }\n }, [selectedIndex]);\n\n // On each focus of chart, reset the selectedIndex to 0, if keyboard navigation is not already active\n const onChartFocus = useCallback(() => {\n if (!isNavigating && selectedIndex !== undefined) {\n setSelectedIndex(0);\n }\n }, [isNavigating, selectedIndex, setSelectedIndex]);\n\n // On each blur of chart, keyboard navigation should restart from first tooltip\n const onChartBlur = useCallback(() => {\n setIsNavigating(false);\n }, [setIsNavigating]);\n const onChartKeyDown = useCallback(event => {\n if (totalPoints === 0) return;\n\n // Keep focus on the chart if tab is pressed\n if (event.key === 'Tab') {\n chartRef.current?.focus();\n setSelectedIndex(undefined);\n setIsNavigating(false);\n return;\n }\n const currentSelectedIndex = selectedIndex === undefined ? -1 : selectedIndex;\n if (currentSelectedIndex + 1 >= totalPoints && ['ArrowRight'].includes(event.key)) {\n chartRef.current?.focus();\n setSelectedIndex(undefined);\n setIsNavigating(false);\n return;\n }\n event.preventDefault();\n if (['ArrowRight'].includes(event.key)) {\n setIsNavigating(true);\n setSelectedIndex((currentSelectedIndex + 1) % totalPoints);\n } else if (['ArrowLeft'].includes(event.key)) {\n setIsNavigating(true);\n setSelectedIndex((currentSelectedIndex - 1 + totalPoints) % totalPoints);\n } else if (event.key === 'Escape') {\n setSelectedIndex(undefined);\n setIsNavigating(false);\n chartRef.current?.focus();\n }\n }, [totalPoints, selectedIndex, setSelectedIndex, setIsNavigating, chartRef]);\n return {\n tooltipRef,\n onChartFocus,\n onChartBlur,\n onChartKeyDown\n };\n};\n\n// Re-export the base Tooltip for backwards compatibility\nexport { Tooltip };"]}
@@ -0,0 +1,120 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunk7QDEU3KNcjs = require('./chunk-7QDEU3KN.cjs');
4
+
5
+
6
+
7
+
8
+ var _chunkLSV7F26Bcjs = require('./chunk-LSV7F26B.cjs');
9
+
10
+
11
+
12
+
13
+ var _chunkZVGEDXDPcjs = require('./chunk-ZVGEDXDP.cjs');
14
+
15
+ // src/charts/geo-chart/geo-chart.tsx
16
+ var _i18n = require('@wordpress/i18n');
17
+ var _clsx = require('clsx'); var _clsx2 = _interopRequireDefault(_clsx);
18
+ var _react = require('react');
19
+ var _reactgooglecharts = require('react-google-charts');
20
+
21
+ // src/charts/geo-chart/geo-chart.module.scss
22
+ var geo_chart_module_default = {
23
+ "container": "a8ccharts-JvcqOz"
24
+ };
25
+
26
+ // src/charts/geo-chart/geo-chart.tsx
27
+ var _jsxruntime = require('react/jsx-runtime');
28
+ var DEFAULT_FEATURE_FILL_COLOR = "#ffffff";
29
+ var DEFAULT_BACKGROUND_COLOR = "#ffffff";
30
+ var GeoChartInternal = ({
31
+ className,
32
+ data,
33
+ width,
34
+ height,
35
+ region = "world",
36
+ resolution = "countries",
37
+ renderPlaceholder
38
+ }) => {
39
+ const {
40
+ getElementStyles,
41
+ theme: {
42
+ geoChart: {
43
+ featureFillColor
44
+ },
45
+ backgroundColor
46
+ }
47
+ } = _chunkLSV7F26Bcjs.useGlobalChartsContext.call(void 0, );
48
+ const loadingPlaceholder = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {
49
+ className: _clsx2.default.call(void 0, "geo-chart", geo_chart_module_default.container, className),
50
+ style: {
51
+ width,
52
+ height
53
+ },
54
+ children: renderPlaceholder ? renderPlaceholder() : _i18n.__.call(void 0, "Loading map", "jetpack-charts")
55
+ });
56
+ const fullColorHex = getElementStyles({
57
+ index: 0
58
+ }).color;
59
+ const lightColorHex = _chunkZVGEDXDPcjs.lightenHexColor.call(void 0, fullColorHex, 0.8);
60
+ const backgroundColorHex = _chunkZVGEDXDPcjs.normalizeColorToHex.call(void 0, backgroundColor, null, _chunkZVGEDXDPcjs.resolveCssVariable) || DEFAULT_BACKGROUND_COLOR;
61
+ const defaultFillColorHex = _chunkZVGEDXDPcjs.normalizeColorToHex.call(void 0, featureFillColor, null, _chunkZVGEDXDPcjs.resolveCssVariable) || DEFAULT_FEATURE_FILL_COLOR;
62
+ const hasHtmlTooltips = _react.useMemo.call(void 0, () => data.length > 0 && data[0].some((col) => typeof col === "object" && col !== null && "role" in col && col.role === "tooltip" && "p" in col && typeof col.p === "object" && col.p !== null && "html" in col.p && col.p.html === true), [data]);
63
+ const options = _react.useMemo.call(void 0, () => ({
64
+ ...region !== "world" && {
65
+ region
66
+ },
67
+ ...resolution !== "countries" && {
68
+ resolution
69
+ },
70
+ colorAxis: {
71
+ colors: [lightColorHex, fullColorHex]
72
+ },
73
+ backgroundColor: backgroundColorHex,
74
+ datalessRegionColor: defaultFillColorHex,
75
+ defaultColor: defaultFillColorHex,
76
+ tooltip: {
77
+ trigger: "focus",
78
+ isHtml: hasHtmlTooltips
79
+ },
80
+ legend: "none",
81
+ keepAspectRatio: true
82
+ }), [region, resolution, lightColorHex, fullColorHex, backgroundColorHex, defaultFillColorHex, hasHtmlTooltips]);
83
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {
84
+ className: _clsx2.default.call(void 0, "geo-chart", geo_chart_module_default.container, className),
85
+ style: {
86
+ width,
87
+ height,
88
+ backgroundColor
89
+ },
90
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactgooglecharts.Chart, {
91
+ chartType: "GeoChart",
92
+ width,
93
+ height,
94
+ data,
95
+ options,
96
+ loader: loadingPlaceholder
97
+ })
98
+ });
99
+ };
100
+ var GeoChartWithProvider = (props) => {
101
+ const existingContext = _react.useContext.call(void 0, _chunkLSV7F26Bcjs.GlobalChartsContext);
102
+ if (existingContext) {
103
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, GeoChartInternal, {
104
+ ...props
105
+ });
106
+ }
107
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLSV7F26Bcjs.GlobalChartsProvider, {
108
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, GeoChartInternal, {
109
+ ...props
110
+ })
111
+ });
112
+ };
113
+ GeoChartWithProvider.displayName = "GeoChart";
114
+ var GeoChartResponsive = _chunk7QDEU3KNcjs.withResponsive.call(void 0, GeoChartWithProvider);
115
+
116
+
117
+
118
+
119
+ exports.GeoChartWithProvider = GeoChartWithProvider; exports.GeoChartResponsive = GeoChartResponsive;
120
+ //# sourceMappingURL=chunk-ZXEFMKVP.cjs.map