@automattic/charts 0.58.0 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +7 -54
  3. package/dist/index.cjs +9606 -22
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.css +20 -25
  6. package/dist/index.css.map +1 -1
  7. package/dist/index.d.cts +1612 -33
  8. package/dist/index.d.ts +1612 -33
  9. package/dist/index.js +9640 -56
  10. package/dist/index.js.map +1 -1
  11. package/package.json +8 -125
  12. package/src/charts/bar-chart/bar-chart.module.scss +0 -5
  13. package/src/charts/bar-chart/bar-chart.tsx +131 -137
  14. package/src/charts/leaderboard-chart/leaderboard-chart.tsx +23 -40
  15. package/src/charts/line-chart/line-chart.module.scss +0 -5
  16. package/src/charts/line-chart/line-chart.tsx +190 -183
  17. package/src/charts/line-chart/private/line-chart-annotations-overlay.tsx +1 -2
  18. package/src/charts/pie-chart/pie-chart.module.scss +2 -10
  19. package/src/charts/pie-chart/pie-chart.tsx +198 -199
  20. package/src/charts/pie-chart/test/composition-api.test.tsx +3 -3
  21. package/src/charts/pie-chart/test/pie-chart.test.tsx +42 -35
  22. package/src/charts/pie-semi-circle-chart/pie-semi-circle-chart.module.scss +2 -8
  23. package/src/charts/pie-semi-circle-chart/pie-semi-circle-chart.tsx +155 -155
  24. package/src/charts/pie-semi-circle-chart/test/pie-semi-circle-chart.test.tsx +25 -25
  25. package/src/charts/private/chart-layout/chart-layout.module.scss +7 -0
  26. package/src/charts/private/chart-layout/chart-layout.tsx +106 -0
  27. package/src/charts/private/chart-layout/index.ts +2 -0
  28. package/src/charts/private/chart-layout/test/chart-layout.test.tsx +167 -0
  29. package/src/charts/private/single-chart-context/single-chart-context.tsx +2 -2
  30. package/src/charts/private/svg-empty-state/index.ts +1 -0
  31. package/src/charts/private/svg-empty-state/svg-empty-state.module.scss +7 -0
  32. package/src/charts/private/svg-empty-state/svg-empty-state.tsx +40 -0
  33. package/src/components/legend/hooks/test/use-chart-legend-items.test.tsx +12 -8
  34. package/src/components/legend/hooks/use-chart-legend-items.ts +12 -13
  35. package/src/components/legend/legend.tsx +33 -8
  36. package/src/components/legend/test/legend.test.tsx +93 -1
  37. package/src/hooks/index.ts +1 -0
  38. package/src/hooks/use-data-with-percentages.ts +24 -0
  39. package/src/hooks/use-interactive-legend-data.ts +18 -15
  40. package/src/index.ts +65 -2
  41. package/src/providers/chart-context/global-charts-provider.tsx +7 -1
  42. package/src/providers/chart-context/hooks/use-chart-registration.ts +2 -1
  43. package/src/providers/chart-context/types.ts +2 -2
  44. package/src/types.ts +27 -7
  45. package/src/utils/test/resolve-css-var.test.ts +2 -0
  46. package/dist/base-tooltip-DOq93wjU.d.cts +0 -38
  47. package/dist/base-tooltip-DOq93wjU.d.ts +0 -38
  48. package/dist/charts/bar-chart/index.cjs +0 -17
  49. package/dist/charts/bar-chart/index.cjs.map +0 -1
  50. package/dist/charts/bar-chart/index.css +0 -141
  51. package/dist/charts/bar-chart/index.css.map +0 -1
  52. package/dist/charts/bar-chart/index.d.cts +0 -36
  53. package/dist/charts/bar-chart/index.d.ts +0 -36
  54. package/dist/charts/bar-chart/index.js +0 -17
  55. package/dist/charts/bar-chart/index.js.map +0 -1
  56. package/dist/charts/bar-list-chart/index.cjs +0 -18
  57. package/dist/charts/bar-list-chart/index.cjs.map +0 -1
  58. package/dist/charts/bar-list-chart/index.css +0 -141
  59. package/dist/charts/bar-list-chart/index.css.map +0 -1
  60. package/dist/charts/bar-list-chart/index.d.cts +0 -92
  61. package/dist/charts/bar-list-chart/index.d.ts +0 -92
  62. package/dist/charts/bar-list-chart/index.js +0 -18
  63. package/dist/charts/bar-list-chart/index.js.map +0 -1
  64. package/dist/charts/conversion-funnel-chart/index.cjs +0 -11
  65. package/dist/charts/conversion-funnel-chart/index.cjs.map +0 -1
  66. package/dist/charts/conversion-funnel-chart/index.css +0 -157
  67. package/dist/charts/conversion-funnel-chart/index.css.map +0 -1
  68. package/dist/charts/conversion-funnel-chart/index.d.cts +0 -97
  69. package/dist/charts/conversion-funnel-chart/index.d.ts +0 -97
  70. package/dist/charts/conversion-funnel-chart/index.js +0 -11
  71. package/dist/charts/conversion-funnel-chart/index.js.map +0 -1
  72. package/dist/charts/geo-chart/index.cjs +0 -13
  73. package/dist/charts/geo-chart/index.cjs.map +0 -1
  74. package/dist/charts/geo-chart/index.css +0 -23
  75. package/dist/charts/geo-chart/index.css.map +0 -1
  76. package/dist/charts/geo-chart/index.d.cts +0 -67
  77. package/dist/charts/geo-chart/index.d.ts +0 -67
  78. package/dist/charts/geo-chart/index.js +0 -13
  79. package/dist/charts/geo-chart/index.js.map +0 -1
  80. package/dist/charts/leaderboard-chart/index.cjs +0 -21
  81. package/dist/charts/leaderboard-chart/index.cjs.map +0 -1
  82. package/dist/charts/leaderboard-chart/index.css +0 -160
  83. package/dist/charts/leaderboard-chart/index.css.map +0 -1
  84. package/dist/charts/leaderboard-chart/index.d.cts +0 -46
  85. package/dist/charts/leaderboard-chart/index.d.ts +0 -46
  86. package/dist/charts/leaderboard-chart/index.js +0 -21
  87. package/dist/charts/leaderboard-chart/index.js.map +0 -1
  88. package/dist/charts/line-chart/index.cjs +0 -17
  89. package/dist/charts/line-chart/index.cjs.map +0 -1
  90. package/dist/charts/line-chart/index.css +0 -213
  91. package/dist/charts/line-chart/index.css.map +0 -1
  92. package/dist/charts/line-chart/index.d.cts +0 -98
  93. package/dist/charts/line-chart/index.d.ts +0 -98
  94. package/dist/charts/line-chart/index.js +0 -17
  95. package/dist/charts/line-chart/index.js.map +0 -1
  96. package/dist/charts/pie-chart/index.cjs +0 -19
  97. package/dist/charts/pie-chart/index.cjs.map +0 -1
  98. package/dist/charts/pie-chart/index.css +0 -131
  99. package/dist/charts/pie-chart/index.css.map +0 -1
  100. package/dist/charts/pie-chart/index.d.cts +0 -91
  101. package/dist/charts/pie-chart/index.d.ts +0 -91
  102. package/dist/charts/pie-chart/index.js +0 -19
  103. package/dist/charts/pie-chart/index.js.map +0 -1
  104. package/dist/charts/pie-semi-circle-chart/index.cjs +0 -18
  105. package/dist/charts/pie-semi-circle-chart/index.cjs.map +0 -1
  106. package/dist/charts/pie-semi-circle-chart/index.css +0 -132
  107. package/dist/charts/pie-semi-circle-chart/index.css.map +0 -1
  108. package/dist/charts/pie-semi-circle-chart/index.d.cts +0 -88
  109. package/dist/charts/pie-semi-circle-chart/index.d.ts +0 -88
  110. package/dist/charts/pie-semi-circle-chart/index.js +0 -18
  111. package/dist/charts/pie-semi-circle-chart/index.js.map +0 -1
  112. package/dist/charts/sparkline/index.cjs +0 -18
  113. package/dist/charts/sparkline/index.cjs.map +0 -1
  114. package/dist/charts/sparkline/index.css +0 -230
  115. package/dist/charts/sparkline/index.css.map +0 -1
  116. package/dist/charts/sparkline/index.d.cts +0 -113
  117. package/dist/charts/sparkline/index.d.ts +0 -113
  118. package/dist/charts/sparkline/index.js +0 -18
  119. package/dist/charts/sparkline/index.js.map +0 -1
  120. package/dist/chunk-2A34OA5O.cjs +0 -51
  121. package/dist/chunk-2A34OA5O.cjs.map +0 -1
  122. package/dist/chunk-2I67QUIV.js +0 -895
  123. package/dist/chunk-2I67QUIV.js.map +0 -1
  124. package/dist/chunk-2ICEEQOC.js +0 -1071
  125. package/dist/chunk-2ICEEQOC.js.map +0 -1
  126. package/dist/chunk-4B7BL2DD.js +0 -120
  127. package/dist/chunk-4B7BL2DD.js.map +0 -1
  128. package/dist/chunk-4OXMTKAL.js +0 -401
  129. package/dist/chunk-4OXMTKAL.js.map +0 -1
  130. package/dist/chunk-ASLARV7L.cjs +0 -81
  131. package/dist/chunk-ASLARV7L.cjs.map +0 -1
  132. package/dist/chunk-B6NLZFRW.js +0 -617
  133. package/dist/chunk-B6NLZFRW.js.map +0 -1
  134. package/dist/chunk-BBAUQOW6.cjs +0 -120
  135. package/dist/chunk-BBAUQOW6.cjs.map +0 -1
  136. package/dist/chunk-BPYKWMI7.js +0 -194
  137. package/dist/chunk-BPYKWMI7.js.map +0 -1
  138. package/dist/chunk-CMMHCTBX.cjs +0 -373
  139. package/dist/chunk-CMMHCTBX.cjs.map +0 -1
  140. package/dist/chunk-CPPXJATQ.cjs +0 -1071
  141. package/dist/chunk-CPPXJATQ.cjs.map +0 -1
  142. package/dist/chunk-DKU775VC.js +0 -219
  143. package/dist/chunk-DKU775VC.js.map +0 -1
  144. package/dist/chunk-GRA7Y2ZG.cjs +0 -401
  145. package/dist/chunk-GRA7Y2ZG.cjs.map +0 -1
  146. package/dist/chunk-I2276W3I.cjs +0 -66
  147. package/dist/chunk-I2276W3I.cjs.map +0 -1
  148. package/dist/chunk-JJIMABHT.js +0 -351
  149. package/dist/chunk-JJIMABHT.js.map +0 -1
  150. package/dist/chunk-KJHWXOCZ.js +0 -421
  151. package/dist/chunk-KJHWXOCZ.js.map +0 -1
  152. package/dist/chunk-KRWGSOJ2.js +0 -91
  153. package/dist/chunk-KRWGSOJ2.js.map +0 -1
  154. package/dist/chunk-KXRWNFQJ.js +0 -51
  155. package/dist/chunk-KXRWNFQJ.js.map +0 -1
  156. package/dist/chunk-LTFH7SEG.js +0 -373
  157. package/dist/chunk-LTFH7SEG.js.map +0 -1
  158. package/dist/chunk-MUNOKLLE.js +0 -165
  159. package/dist/chunk-MUNOKLLE.js.map +0 -1
  160. package/dist/chunk-MXGLYWVP.cjs +0 -351
  161. package/dist/chunk-MXGLYWVP.cjs.map +0 -1
  162. package/dist/chunk-OP6PHB2U.js +0 -81
  163. package/dist/chunk-OP6PHB2U.js.map +0 -1
  164. package/dist/chunk-OYC34VTO.cjs +0 -3957
  165. package/dist/chunk-OYC34VTO.cjs.map +0 -1
  166. package/dist/chunk-PQL5I3F6.cjs +0 -421
  167. package/dist/chunk-PQL5I3F6.cjs.map +0 -1
  168. package/dist/chunk-REZTQ4PH.cjs +0 -488
  169. package/dist/chunk-REZTQ4PH.cjs.map +0 -1
  170. package/dist/chunk-TZRUHQOH.cjs +0 -91
  171. package/dist/chunk-TZRUHQOH.cjs.map +0 -1
  172. package/dist/chunk-UTYVIOWZ.js +0 -3957
  173. package/dist/chunk-UTYVIOWZ.js.map +0 -1
  174. package/dist/chunk-W2LDIX26.cjs +0 -165
  175. package/dist/chunk-W2LDIX26.cjs.map +0 -1
  176. package/dist/chunk-WSG64BVN.cjs +0 -219
  177. package/dist/chunk-WSG64BVN.cjs.map +0 -1
  178. package/dist/chunk-WTQYGUNF.js +0 -400
  179. package/dist/chunk-WTQYGUNF.js.map +0 -1
  180. package/dist/chunk-WYK7EL5R.cjs +0 -895
  181. package/dist/chunk-WYK7EL5R.cjs.map +0 -1
  182. package/dist/chunk-XC4KHJYX.cjs +0 -617
  183. package/dist/chunk-XC4KHJYX.cjs.map +0 -1
  184. package/dist/chunk-XVBH5XHE.cjs +0 -400
  185. package/dist/chunk-XVBH5XHE.cjs.map +0 -1
  186. package/dist/chunk-XWYZIFZW.js +0 -66
  187. package/dist/chunk-XWYZIFZW.js.map +0 -1
  188. package/dist/chunk-Y3NNQMAX.cjs +0 -194
  189. package/dist/chunk-Y3NNQMAX.cjs.map +0 -1
  190. package/dist/chunk-YAFQVVDI.js +0 -488
  191. package/dist/chunk-YAFQVVDI.js.map +0 -1
  192. package/dist/components/legend/index.cjs +0 -12
  193. package/dist/components/legend/index.cjs.map +0 -1
  194. package/dist/components/legend/index.css +0 -91
  195. package/dist/components/legend/index.css.map +0 -1
  196. package/dist/components/legend/index.d.cts +0 -37
  197. package/dist/components/legend/index.d.ts +0 -37
  198. package/dist/components/legend/index.js +0 -12
  199. package/dist/components/legend/index.js.map +0 -1
  200. package/dist/components/tooltip/index.cjs +0 -12
  201. package/dist/components/tooltip/index.cjs.map +0 -1
  202. package/dist/components/tooltip/index.css +0 -13
  203. package/dist/components/tooltip/index.css.map +0 -1
  204. package/dist/components/tooltip/index.d.cts +0 -71
  205. package/dist/components/tooltip/index.d.ts +0 -71
  206. package/dist/components/tooltip/index.js +0 -12
  207. package/dist/components/tooltip/index.js.map +0 -1
  208. package/dist/components/trend-indicator/index.cjs +0 -8
  209. package/dist/components/trend-indicator/index.cjs.map +0 -1
  210. package/dist/components/trend-indicator/index.css +0 -27
  211. package/dist/components/trend-indicator/index.css.map +0 -1
  212. package/dist/components/trend-indicator/index.d.cts +0 -44
  213. package/dist/components/trend-indicator/index.d.ts +0 -44
  214. package/dist/components/trend-indicator/index.js +0 -8
  215. package/dist/components/trend-indicator/index.js.map +0 -1
  216. package/dist/format-metric-value-MXm5DtQ_.d.cts +0 -24
  217. package/dist/format-metric-value-MXm5DtQ_.d.ts +0 -24
  218. package/dist/hooks/index.cjs +0 -29
  219. package/dist/hooks/index.cjs.map +0 -1
  220. package/dist/hooks/index.css +0 -9
  221. package/dist/hooks/index.css.map +0 -1
  222. package/dist/hooks/index.d.cts +0 -264
  223. package/dist/hooks/index.d.ts +0 -264
  224. package/dist/hooks/index.js +0 -29
  225. package/dist/hooks/index.js.map +0 -1
  226. package/dist/leaderboard-chart-BSbg0ufV.d.cts +0 -79
  227. package/dist/leaderboard-chart-odEYxxEC.d.ts +0 -79
  228. package/dist/legend-DFkosEvC.d.cts +0 -9
  229. package/dist/legend-DLswHhOk.d.ts +0 -9
  230. package/dist/providers/index.cjs +0 -21
  231. package/dist/providers/index.cjs.map +0 -1
  232. package/dist/providers/index.css +0 -9
  233. package/dist/providers/index.css.map +0 -1
  234. package/dist/providers/index.d.cts +0 -28
  235. package/dist/providers/index.d.ts +0 -28
  236. package/dist/providers/index.js +0 -21
  237. package/dist/providers/index.js.map +0 -1
  238. package/dist/themes-D0qc5JaW.d.cts +0 -67
  239. package/dist/themes-itO4Ht5g.d.ts +0 -67
  240. package/dist/types-B5f6XQ7Q.d.cts +0 -19
  241. package/dist/types-BsHooDbM.d.ts +0 -19
  242. package/dist/types-BuSrRM4p.d.ts +0 -49
  243. package/dist/types-ChOUI9-N.d.cts +0 -545
  244. package/dist/types-ChOUI9-N.d.ts +0 -545
  245. package/dist/types-Dfw9VOKI.d.cts +0 -49
  246. package/dist/utils/index.cjs +0 -44
  247. package/dist/utils/index.cjs.map +0 -1
  248. package/dist/utils/index.d.cts +0 -226
  249. package/dist/utils/index.d.ts +0 -226
  250. package/dist/utils/index.js +0 -44
  251. package/dist/utils/index.js.map +0 -1
  252. package/dist/with-responsive-CNfhzAUu.d.cts +0 -18
  253. package/dist/with-responsive-CNfhzAUu.d.ts +0 -18
@@ -1,264 +0,0 @@
1
- import { MouseEvent, RefObject } from 'react';
2
- import { D as DataPoint, o as SeriesData, p as SeriesDataOptions, B as BaseChartProps, d as DataPointDate } from '../types-ChOUI9-N.cjs';
3
- import * as _visx_xychart from '@visx/xychart';
4
- import { XYChartTheme } from '@visx/xychart';
5
- import '@visx/annotation/lib/components/CircleSubject';
6
- import '@visx/annotation/lib/components/Connector';
7
- import '@visx/annotation/lib/components/Label';
8
- import '@visx/annotation/lib/components/LineSubject';
9
- import '@visx/axis';
10
- import '@visx/legend/lib/types';
11
- import '@visx/scale';
12
- import '@visx/text/lib/Text';
13
- import '@wordpress/theme';
14
- import 'react-google-charts';
15
-
16
- /**
17
- * Custom hook to memoize a value using deep equality comparison.
18
- * Prevents unnecessary re-renders when objects have the same content but different references.
19
- *
20
- * @param value - The value to memoize with deep equality comparison
21
- * @return The memoized value that only changes when deeply different
22
- */
23
- declare const useDeepMemo: <T>(value: T) => T;
24
-
25
- type UseChartMouseHandlerProps = {
26
- /**
27
- * Whether tooltips are enabled
28
- */
29
- withTooltips: boolean;
30
- /**
31
- * Horizontal offset for tooltip positioning in pixels (default: 0)
32
- */
33
- offsetX?: number;
34
- /**
35
- * Vertical offset for tooltip positioning in pixels (default: -10)
36
- */
37
- offsetY?: number;
38
- };
39
- type UseChartMouseHandlerReturn = {
40
- /**
41
- * Handler for mouse move events
42
- */
43
- onMouseMove: (event: MouseEvent<SVGElement>, data: DataPoint) => void;
44
- /**
45
- * Handler for mouse leave events
46
- */
47
- onMouseLeave: () => void;
48
- /**
49
- * Whether the tooltip is currently open
50
- */
51
- tooltipOpen: boolean;
52
- /**
53
- * The current tooltip data
54
- */
55
- tooltipData: DataPoint | null;
56
- /**
57
- * The current tooltip left position
58
- */
59
- tooltipLeft: number | undefined;
60
- /**
61
- * The current tooltip top position
62
- */
63
- tooltipTop: number | undefined;
64
- };
65
- /**
66
- * Hook to handle mouse interactions for chart components
67
- *
68
- * @param {UseChartMouseHandlerProps} props - Hook configuration
69
- * @return {UseChartMouseHandlerReturn} Object containing handlers and tooltip state
70
- */
71
- declare const useChartMouseHandler: ({ withTooltips, offsetX, offsetY, }: UseChartMouseHandlerProps) => UseChartMouseHandlerReturn;
72
-
73
- declare const useXYChartTheme: (data: SeriesData[]) => _visx_xychart.XYChartTheme;
74
-
75
- /**
76
- * Hook that transforms and sorts chart data, handling date parsing and sorting
77
- *
78
- * This hook extracts the common data transformation logic used in both line-chart
79
- * and bar-chart components. It:
80
- * 1. Parses date strings into Date objects using parseAsLocalDate
81
- * 2. Sorts data points by date when date properties are present
82
- * 3. Returns the original data unchanged when no date properties are found
83
- *
84
- * @param {SeriesData[]} data - The raw chart data to transform
85
- * @return {SeriesData[]} The transformed and sorted data
86
- */
87
- declare const useChartDataTransform: (data: SeriesData[]) => {
88
- data: any[];
89
- group?: string;
90
- label: string;
91
- options?: SeriesDataOptions;
92
- }[];
93
-
94
- declare const useChartMargin: (height: number, options: BaseChartProps["options"], data: SeriesData[], theme: XYChartTheme, horizontal?: boolean) => {
95
- top: number;
96
- right: number;
97
- bottom: number;
98
- left: number;
99
- };
100
-
101
- /**
102
- * Hook to measure the width and height of a DOM element.
103
- * Returns a ref callback to attach to the element and the current dimensions in pixels.
104
- *
105
- * @param {object} props - Optional props.
106
- * @param {number} props.initialWidth - The initial width to use.
107
- * @param {number} props.initialHeight - The initial height to use.
108
- *
109
- * @return {[Function, number, number]} A tuple containing a ref callback, width, and height in pixels
110
- */
111
- declare function useElementSize<T extends HTMLElement = HTMLDivElement>({ initialWidth, initialHeight, }?: {
112
- initialWidth?: number;
113
- initialHeight?: number;
114
- }): [(node: T | null) => void, number, number];
115
-
116
- /**
117
- * Hook to detect if text content is truncated within its container.
118
- * Uses ResizeObserver to dynamically track changes in element size.
119
- *
120
- * @param enabled - Whether truncation detection should be active. Defaults to true.
121
- * @return A tuple containing:
122
- * - [0] refCallback: Function to attach to the text element as a ref
123
- * - [1] isTruncated: Boolean indicating if the text is currently truncated
124
- *
125
- * @example
126
- * ```tsx
127
- * const [textRef, isTruncated] = useTextTruncation(true);
128
- *
129
- * return (
130
- * <span ref={textRef} title={isTruncated ? fullText : undefined}>
131
- * {text}
132
- * </span>
133
- * );
134
- * ```
135
- */
136
- declare function useTextTruncation(enabled?: boolean): [(node: HTMLElement | null) => void, boolean];
137
-
138
- type EnhancedDataPoint = DataPointDate & {
139
- visualValue?: number;
140
- };
141
- interface EnhancedSeriesData extends Omit<SeriesData, 'data'> {
142
- data: EnhancedDataPoint[];
143
- }
144
- interface UseZeroValueDisplayOptions {
145
- enabled: boolean;
146
- /**
147
- * The pixel length of the value axis (height for vertical charts, width for
148
- * horizontal charts). Used to calculate a minimum visible value that ensures
149
- * zero-value bars are at least MIN_PIXEL_HEIGHT pixels tall along that axis.
150
- */
151
- valueAxisLength?: number;
152
- }
153
- declare const useZeroValueDisplay: (data: SeriesData[], options?: UseZeroValueDisplayOptions) => SeriesData[] | EnhancedSeriesData[];
154
-
155
- /**
156
- * Data point interface for charts with interactive legends.
157
- * Requires label for series identification, value for calculations, and percentage for display.
158
- */
159
- interface DataPointWithPercentage {
160
- label: string;
161
- value: number;
162
- percentage: number;
163
- }
164
- /**
165
- * Parameters for the useInteractiveLegendData hook.
166
- */
167
- interface UseInteractiveLegendDataParams<T extends DataPointWithPercentage> {
168
- /** The chart data to filter based on legend visibility */
169
- data: T[];
170
- /** Unique chart identifier, required for interactive legends */
171
- chartId: string | undefined;
172
- /** Whether interactive legend filtering is enabled */
173
- legendInteractive: boolean;
174
- /** Function to check if a series is visible in the legend */
175
- isSeriesVisible: (chartId: string, label: string) => boolean;
176
- }
177
- /**
178
- * Return value from the useInteractiveLegendData hook.
179
- */
180
- interface UseInteractiveLegendDataResult<T extends DataPointWithPercentage> {
181
- /** Filtered data array containing only visible segments with recalculated percentages */
182
- visibleData: T[];
183
- /** Boolean indicating if all segments are hidden */
184
- allSegmentsHidden: boolean;
185
- /**
186
- * Legend data with recalculated percentages for visible items.
187
- * Uses original data for hidden items, but shows recalculated percentages for visible ones.
188
- * This ensures the legend displays accurate percentages while maintaining all entries.
189
- */
190
- legendData: T[];
191
- }
192
- /**
193
- * Custom hook to filter and recalculate chart data for interactive legends.
194
- *
195
- * When interactive legends are enabled, this hook:
196
- * 1. Filters data to show only visible series based on legend selection
197
- * 2. Recalculates percentages so visible segments total 100%
198
- * 3. Tracks whether all segments are hidden to show empty state
199
- *
200
- * This is particularly useful for pie charts, donut charts, and semi-circle charts
201
- * where segment visibility and percentages need to be dynamically adjusted.
202
- *
203
- * @example
204
- * ```tsx
205
- * const { visibleData, allSegmentsHidden, legendData } = useInteractiveLegendData({
206
- * data: chartData,
207
- * chartId: 'my-pie-chart',
208
- * legendInteractive: true,
209
- * isSeriesVisible: (id, label) => context.isSeriesVisible(id, label),
210
- * });
211
- *
212
- * // Use legendData for creating legend items (shows recalculated percentages)
213
- * const legendItems = useChartLegendItems(legendData, legendOptions);
214
- *
215
- * if (allSegmentsHidden) {
216
- * return <EmptyState />;
217
- * }
218
- *
219
- * // Use visibleData for rendering the chart (only visible segments)
220
- * return <PieChart data={visibleData} />;
221
- * ```
222
- *
223
- * @param params - Configuration object for the hook
224
- * @param params.data - The chart data to filter
225
- * @param params.chartId - Unique identifier for the chart (required for interactive mode)
226
- * @param params.legendInteractive - Whether to enable interactive filtering
227
- * @param params.isSeriesVisible - Function to check series visibility
228
- * @return Object containing visibleData, allSegmentsHidden flag, and legendData with recalculated percentages
229
- */
230
- declare const useInteractiveLegendData: <T extends DataPointWithPercentage>({ data, chartId, legendInteractive, isSeriesVisible, }: UseInteractiveLegendDataParams<T>) => UseInteractiveLegendDataResult<T>;
231
-
232
- /**
233
- * Custom hook to determine if the user prefers reduced motion.
234
- * @return {boolean} A boolean indicating the user's preference for reduced motion.
235
- */
236
- declare function usePrefersReducedMotion(): boolean;
237
-
238
- /**
239
- * Relocates visx chart tooltip portals from `document.body` into a target
240
- * container element. This allows the tooltips to participate in the same CSS
241
- * stacking context as other elements in the container (e.g. a sticky header),
242
- * so z-index ordering works correctly between them.
243
- *
244
- * The relocated portal divs use `position: fixed` at the viewport origin to
245
- * preserve the tooltip coordinate system (visx calculates positions relative
246
- * to the viewport).
247
- *
248
- * Because the visx Portal class calls `document.body.removeChild(node)` during
249
- * unmount, we patch `document.body.removeChild` to gracefully handle nodes that
250
- * were moved out of body. Without this, React throws a "not a child of this
251
- * node" error when tooltips unmount.
252
- *
253
- * **Important:** The container and its ancestors must not have CSS `transform`,
254
- * `perspective`, or `filter` properties set, as these create a new containing
255
- * block for `position: fixed` children, breaking viewport-relative positioning.
256
- *
257
- * @param containerRef - Ref to the element that portals should be relocated into.
258
- * The element referenced here, or one of its ancestors,
259
- * should establish the desired stacking context (for example
260
- * by using position and z-index).
261
- */
262
- declare function useTooltipPortalRelocator(containerRef: RefObject<HTMLElement | null> | undefined): void;
263
-
264
- export { useChartDataTransform, useChartMargin, useChartMouseHandler, useDeepMemo, useElementSize, useInteractiveLegendData, usePrefersReducedMotion, useTextTruncation, useTooltipPortalRelocator, useXYChartTheme, useZeroValueDisplay };
@@ -1,264 +0,0 @@
1
- import { MouseEvent, RefObject } from 'react';
2
- import { D as DataPoint, o as SeriesData, p as SeriesDataOptions, B as BaseChartProps, d as DataPointDate } from '../types-ChOUI9-N.js';
3
- import * as _visx_xychart from '@visx/xychart';
4
- import { XYChartTheme } from '@visx/xychart';
5
- import '@visx/annotation/lib/components/CircleSubject';
6
- import '@visx/annotation/lib/components/Connector';
7
- import '@visx/annotation/lib/components/Label';
8
- import '@visx/annotation/lib/components/LineSubject';
9
- import '@visx/axis';
10
- import '@visx/legend/lib/types';
11
- import '@visx/scale';
12
- import '@visx/text/lib/Text';
13
- import '@wordpress/theme';
14
- import 'react-google-charts';
15
-
16
- /**
17
- * Custom hook to memoize a value using deep equality comparison.
18
- * Prevents unnecessary re-renders when objects have the same content but different references.
19
- *
20
- * @param value - The value to memoize with deep equality comparison
21
- * @return The memoized value that only changes when deeply different
22
- */
23
- declare const useDeepMemo: <T>(value: T) => T;
24
-
25
- type UseChartMouseHandlerProps = {
26
- /**
27
- * Whether tooltips are enabled
28
- */
29
- withTooltips: boolean;
30
- /**
31
- * Horizontal offset for tooltip positioning in pixels (default: 0)
32
- */
33
- offsetX?: number;
34
- /**
35
- * Vertical offset for tooltip positioning in pixels (default: -10)
36
- */
37
- offsetY?: number;
38
- };
39
- type UseChartMouseHandlerReturn = {
40
- /**
41
- * Handler for mouse move events
42
- */
43
- onMouseMove: (event: MouseEvent<SVGElement>, data: DataPoint) => void;
44
- /**
45
- * Handler for mouse leave events
46
- */
47
- onMouseLeave: () => void;
48
- /**
49
- * Whether the tooltip is currently open
50
- */
51
- tooltipOpen: boolean;
52
- /**
53
- * The current tooltip data
54
- */
55
- tooltipData: DataPoint | null;
56
- /**
57
- * The current tooltip left position
58
- */
59
- tooltipLeft: number | undefined;
60
- /**
61
- * The current tooltip top position
62
- */
63
- tooltipTop: number | undefined;
64
- };
65
- /**
66
- * Hook to handle mouse interactions for chart components
67
- *
68
- * @param {UseChartMouseHandlerProps} props - Hook configuration
69
- * @return {UseChartMouseHandlerReturn} Object containing handlers and tooltip state
70
- */
71
- declare const useChartMouseHandler: ({ withTooltips, offsetX, offsetY, }: UseChartMouseHandlerProps) => UseChartMouseHandlerReturn;
72
-
73
- declare const useXYChartTheme: (data: SeriesData[]) => _visx_xychart.XYChartTheme;
74
-
75
- /**
76
- * Hook that transforms and sorts chart data, handling date parsing and sorting
77
- *
78
- * This hook extracts the common data transformation logic used in both line-chart
79
- * and bar-chart components. It:
80
- * 1. Parses date strings into Date objects using parseAsLocalDate
81
- * 2. Sorts data points by date when date properties are present
82
- * 3. Returns the original data unchanged when no date properties are found
83
- *
84
- * @param {SeriesData[]} data - The raw chart data to transform
85
- * @return {SeriesData[]} The transformed and sorted data
86
- */
87
- declare const useChartDataTransform: (data: SeriesData[]) => {
88
- data: any[];
89
- group?: string;
90
- label: string;
91
- options?: SeriesDataOptions;
92
- }[];
93
-
94
- declare const useChartMargin: (height: number, options: BaseChartProps["options"], data: SeriesData[], theme: XYChartTheme, horizontal?: boolean) => {
95
- top: number;
96
- right: number;
97
- bottom: number;
98
- left: number;
99
- };
100
-
101
- /**
102
- * Hook to measure the width and height of a DOM element.
103
- * Returns a ref callback to attach to the element and the current dimensions in pixels.
104
- *
105
- * @param {object} props - Optional props.
106
- * @param {number} props.initialWidth - The initial width to use.
107
- * @param {number} props.initialHeight - The initial height to use.
108
- *
109
- * @return {[Function, number, number]} A tuple containing a ref callback, width, and height in pixels
110
- */
111
- declare function useElementSize<T extends HTMLElement = HTMLDivElement>({ initialWidth, initialHeight, }?: {
112
- initialWidth?: number;
113
- initialHeight?: number;
114
- }): [(node: T | null) => void, number, number];
115
-
116
- /**
117
- * Hook to detect if text content is truncated within its container.
118
- * Uses ResizeObserver to dynamically track changes in element size.
119
- *
120
- * @param enabled - Whether truncation detection should be active. Defaults to true.
121
- * @return A tuple containing:
122
- * - [0] refCallback: Function to attach to the text element as a ref
123
- * - [1] isTruncated: Boolean indicating if the text is currently truncated
124
- *
125
- * @example
126
- * ```tsx
127
- * const [textRef, isTruncated] = useTextTruncation(true);
128
- *
129
- * return (
130
- * <span ref={textRef} title={isTruncated ? fullText : undefined}>
131
- * {text}
132
- * </span>
133
- * );
134
- * ```
135
- */
136
- declare function useTextTruncation(enabled?: boolean): [(node: HTMLElement | null) => void, boolean];
137
-
138
- type EnhancedDataPoint = DataPointDate & {
139
- visualValue?: number;
140
- };
141
- interface EnhancedSeriesData extends Omit<SeriesData, 'data'> {
142
- data: EnhancedDataPoint[];
143
- }
144
- interface UseZeroValueDisplayOptions {
145
- enabled: boolean;
146
- /**
147
- * The pixel length of the value axis (height for vertical charts, width for
148
- * horizontal charts). Used to calculate a minimum visible value that ensures
149
- * zero-value bars are at least MIN_PIXEL_HEIGHT pixels tall along that axis.
150
- */
151
- valueAxisLength?: number;
152
- }
153
- declare const useZeroValueDisplay: (data: SeriesData[], options?: UseZeroValueDisplayOptions) => SeriesData[] | EnhancedSeriesData[];
154
-
155
- /**
156
- * Data point interface for charts with interactive legends.
157
- * Requires label for series identification, value for calculations, and percentage for display.
158
- */
159
- interface DataPointWithPercentage {
160
- label: string;
161
- value: number;
162
- percentage: number;
163
- }
164
- /**
165
- * Parameters for the useInteractiveLegendData hook.
166
- */
167
- interface UseInteractiveLegendDataParams<T extends DataPointWithPercentage> {
168
- /** The chart data to filter based on legend visibility */
169
- data: T[];
170
- /** Unique chart identifier, required for interactive legends */
171
- chartId: string | undefined;
172
- /** Whether interactive legend filtering is enabled */
173
- legendInteractive: boolean;
174
- /** Function to check if a series is visible in the legend */
175
- isSeriesVisible: (chartId: string, label: string) => boolean;
176
- }
177
- /**
178
- * Return value from the useInteractiveLegendData hook.
179
- */
180
- interface UseInteractiveLegendDataResult<T extends DataPointWithPercentage> {
181
- /** Filtered data array containing only visible segments with recalculated percentages */
182
- visibleData: T[];
183
- /** Boolean indicating if all segments are hidden */
184
- allSegmentsHidden: boolean;
185
- /**
186
- * Legend data with recalculated percentages for visible items.
187
- * Uses original data for hidden items, but shows recalculated percentages for visible ones.
188
- * This ensures the legend displays accurate percentages while maintaining all entries.
189
- */
190
- legendData: T[];
191
- }
192
- /**
193
- * Custom hook to filter and recalculate chart data for interactive legends.
194
- *
195
- * When interactive legends are enabled, this hook:
196
- * 1. Filters data to show only visible series based on legend selection
197
- * 2. Recalculates percentages so visible segments total 100%
198
- * 3. Tracks whether all segments are hidden to show empty state
199
- *
200
- * This is particularly useful for pie charts, donut charts, and semi-circle charts
201
- * where segment visibility and percentages need to be dynamically adjusted.
202
- *
203
- * @example
204
- * ```tsx
205
- * const { visibleData, allSegmentsHidden, legendData } = useInteractiveLegendData({
206
- * data: chartData,
207
- * chartId: 'my-pie-chart',
208
- * legendInteractive: true,
209
- * isSeriesVisible: (id, label) => context.isSeriesVisible(id, label),
210
- * });
211
- *
212
- * // Use legendData for creating legend items (shows recalculated percentages)
213
- * const legendItems = useChartLegendItems(legendData, legendOptions);
214
- *
215
- * if (allSegmentsHidden) {
216
- * return <EmptyState />;
217
- * }
218
- *
219
- * // Use visibleData for rendering the chart (only visible segments)
220
- * return <PieChart data={visibleData} />;
221
- * ```
222
- *
223
- * @param params - Configuration object for the hook
224
- * @param params.data - The chart data to filter
225
- * @param params.chartId - Unique identifier for the chart (required for interactive mode)
226
- * @param params.legendInteractive - Whether to enable interactive filtering
227
- * @param params.isSeriesVisible - Function to check series visibility
228
- * @return Object containing visibleData, allSegmentsHidden flag, and legendData with recalculated percentages
229
- */
230
- declare const useInteractiveLegendData: <T extends DataPointWithPercentage>({ data, chartId, legendInteractive, isSeriesVisible, }: UseInteractiveLegendDataParams<T>) => UseInteractiveLegendDataResult<T>;
231
-
232
- /**
233
- * Custom hook to determine if the user prefers reduced motion.
234
- * @return {boolean} A boolean indicating the user's preference for reduced motion.
235
- */
236
- declare function usePrefersReducedMotion(): boolean;
237
-
238
- /**
239
- * Relocates visx chart tooltip portals from `document.body` into a target
240
- * container element. This allows the tooltips to participate in the same CSS
241
- * stacking context as other elements in the container (e.g. a sticky header),
242
- * so z-index ordering works correctly between them.
243
- *
244
- * The relocated portal divs use `position: fixed` at the viewport origin to
245
- * preserve the tooltip coordinate system (visx calculates positions relative
246
- * to the viewport).
247
- *
248
- * Because the visx Portal class calls `document.body.removeChild(node)` during
249
- * unmount, we patch `document.body.removeChild` to gracefully handle nodes that
250
- * were moved out of body. Without this, React throws a "not a child of this
251
- * node" error when tooltips unmount.
252
- *
253
- * **Important:** The container and its ancestors must not have CSS `transform`,
254
- * `perspective`, or `filter` properties set, as these create a new containing
255
- * block for `position: fixed` children, breaking viewport-relative positioning.
256
- *
257
- * @param containerRef - Ref to the element that portals should be relocated into.
258
- * The element referenced here, or one of its ancestors,
259
- * should establish the desired stacking context (for example
260
- * by using position and z-index).
261
- */
262
- declare function useTooltipPortalRelocator(containerRef: RefObject<HTMLElement | null> | undefined): void;
263
-
264
- export { useChartDataTransform, useChartMargin, useChartMouseHandler, useDeepMemo, useElementSize, useInteractiveLegendData, usePrefersReducedMotion, useTextTruncation, useTooltipPortalRelocator, useXYChartTheme, useZeroValueDisplay };
@@ -1,29 +0,0 @@
1
- import {
2
- useChartDataTransform,
3
- useChartMargin,
4
- useChartMouseHandler,
5
- useDeepMemo,
6
- useElementSize,
7
- useInteractiveLegendData,
8
- usePrefersReducedMotion,
9
- useTextTruncation,
10
- useTooltipPortalRelocator,
11
- useXYChartTheme,
12
- useZeroValueDisplay
13
- } from "../chunk-2I67QUIV.js";
14
- import "../chunk-JJIMABHT.js";
15
- import "../chunk-G3PMV62Z.js";
16
- export {
17
- useChartDataTransform,
18
- useChartMargin,
19
- useChartMouseHandler,
20
- useDeepMemo,
21
- useElementSize,
22
- useInteractiveLegendData,
23
- usePrefersReducedMotion,
24
- useTextTruncation,
25
- useTooltipPortalRelocator,
26
- useXYChartTheme,
27
- useZeroValueDisplay
28
- };
29
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,79 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { R as ResponsiveConfig } from './with-responsive-CNfhzAUu.cjs';
3
- import * as react from 'react';
4
- import { ReactNode, FC } from 'react';
5
- import { a as BaseLegendProps, B as BaseLegendItem } from './types-Dfw9VOKI.cjs';
6
- import { B as BaseChartProps, L as LeaderboardEntry } from './types-ChOUI9-N.cjs';
7
-
8
- interface LeaderboardChartProps extends Pick<BaseChartProps<LeaderboardEntry>, 'className' | 'data' | 'showLegend' | 'legend' | 'chartId' | 'width' | 'height' | 'size' | 'gap' | 'animation'> {
9
- /**
10
- * Whether to show comparison data
11
- */
12
- withComparison?: boolean;
13
- /**
14
- * Whether to overlay the label on top of bar
15
- */
16
- withOverlayLabel?: boolean;
17
- /**
18
- * Primary color for current period bars
19
- */
20
- primaryColor?: string;
21
- /**
22
- * Secondary color for comparison period bars
23
- */
24
- secondaryColor?: string;
25
- /**
26
- * Formatter for values
27
- */
28
- valueFormatter?: (value: number) => string;
29
- /**
30
- * Formatter for delta values
31
- */
32
- deltaFormatter?: (value: number) => string;
33
- /**
34
- * Whether the chart is in loading state
35
- */
36
- loading?: boolean;
37
- /**
38
- * Custom styling for the chart container
39
- */
40
- style?: React.CSSProperties & {
41
- '--a8c--charts--leaderboard--bar--border-radius'?: string;
42
- };
43
- /**
44
- * Custom labels for legend items
45
- */
46
- legendLabels?: {
47
- /**
48
- * Label for primary period data
49
- */
50
- primary?: string;
51
- /**
52
- * Label for comparison period data (only used when withComparison is true)
53
- */
54
- comparison?: string;
55
- };
56
- /**
57
- * Child components for composition API
58
- */
59
- children?: ReactNode;
60
- }
61
-
62
- declare const LeaderboardChart: FC<LeaderboardChartProps> & {
63
- Legend: react.ForwardRefExoticComponent<Omit<BaseLegendProps, "items"> & {
64
- items?: BaseLegendItem[];
65
- chartId?: string;
66
- } & react.RefAttributes<HTMLDivElement>>;
67
- };
68
- declare const LeaderboardChartResponsive: (({ resizeDebounceTime, maxWidth, aspectRatio, size, width, height, ...chartProps }: Omit<LeaderboardChartProps, "width" | "height" | "size"> & {
69
- width?: number;
70
- height?: number;
71
- size?: number;
72
- } & ResponsiveConfig) => react_jsx_runtime.JSX.Element) & {
73
- Legend: react.ForwardRefExoticComponent<Omit<BaseLegendProps, "items"> & {
74
- items?: BaseLegendItem[];
75
- chartId?: string;
76
- } & react.RefAttributes<HTMLDivElement>>;
77
- };
78
-
79
- export { LeaderboardChartResponsive as L, LeaderboardChart as a, type LeaderboardChartProps as b };