minerva-design 1.2.0 → 1.3.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 (256) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/charts/canvas.d.cts +4 -1
  3. package/dist/charts/canvas.d.ts +4 -1
  4. package/dist/charts/core.cjs +1 -1
  5. package/dist/charts/core.d.cts +5 -2
  6. package/dist/charts/core.d.ts +5 -2
  7. package/dist/charts/core.js +6 -4
  8. package/dist/charts/engine/canvas.cjs +1 -1
  9. package/dist/charts/engine/canvas.cjs.map +1 -1
  10. package/dist/charts/engine/canvas.js +65 -53
  11. package/dist/charts/engine/canvas.js.map +1 -1
  12. package/dist/charts/engine/chart.cjs +1 -2
  13. package/dist/charts/engine/chart.cjs.map +1 -1
  14. package/dist/charts/engine/chart.js +342 -323
  15. package/dist/charts/engine/chart.js.map +1 -1
  16. package/dist/charts/engine/color.cjs +1 -1
  17. package/dist/charts/engine/color.cjs.map +1 -1
  18. package/dist/charts/engine/color.d.cts +17 -0
  19. package/dist/charts/engine/color.d.ts +17 -0
  20. package/dist/charts/engine/color.js +27 -3
  21. package/dist/charts/engine/color.js.map +1 -1
  22. package/dist/charts/engine/controller.cjs +2 -2
  23. package/dist/charts/engine/controller.cjs.map +1 -1
  24. package/dist/charts/engine/controller.d.cts +6 -0
  25. package/dist/charts/engine/controller.d.ts +6 -0
  26. package/dist/charts/engine/controller.js +317 -253
  27. package/dist/charts/engine/controller.js.map +1 -1
  28. package/dist/charts/engine/curve.cjs +2 -0
  29. package/dist/charts/engine/curve.cjs.map +1 -0
  30. package/dist/charts/engine/curve.d.cts +15 -0
  31. package/dist/charts/engine/curve.d.ts +15 -0
  32. package/dist/charts/engine/curve.js +56 -0
  33. package/dist/charts/engine/curve.js.map +1 -0
  34. package/dist/charts/engine/data.cjs +1 -1
  35. package/dist/charts/engine/data.cjs.map +1 -1
  36. package/dist/charts/engine/data.d.cts +15 -2
  37. package/dist/charts/engine/data.d.ts +15 -2
  38. package/dist/charts/engine/data.js +98 -38
  39. package/dist/charts/engine/data.js.map +1 -1
  40. package/dist/charts/engine/dom.cjs +1 -1
  41. package/dist/charts/engine/dom.cjs.map +1 -1
  42. package/dist/charts/engine/dom.d.cts +5 -3
  43. package/dist/charts/engine/dom.d.ts +5 -3
  44. package/dist/charts/engine/dom.js +27 -22
  45. package/dist/charts/engine/dom.js.map +1 -1
  46. package/dist/charts/engine/items.cjs +1 -1
  47. package/dist/charts/engine/items.cjs.map +1 -1
  48. package/dist/charts/engine/items.js +132 -61
  49. package/dist/charts/engine/items.js.map +1 -1
  50. package/dist/charts/engine/model.cjs +1 -1
  51. package/dist/charts/engine/model.cjs.map +1 -1
  52. package/dist/charts/engine/model.d.cts +30 -3
  53. package/dist/charts/engine/model.d.ts +30 -3
  54. package/dist/charts/engine/model.js +225 -108
  55. package/dist/charts/engine/model.js.map +1 -1
  56. package/dist/charts/engine/overlay.cjs +1 -1
  57. package/dist/charts/engine/overlay.cjs.map +1 -1
  58. package/dist/charts/engine/overlay.d.cts +2 -0
  59. package/dist/charts/engine/overlay.d.ts +2 -0
  60. package/dist/charts/engine/overlay.js +16 -16
  61. package/dist/charts/engine/overlay.js.map +1 -1
  62. package/dist/charts/engine/presets.cjs +2 -2
  63. package/dist/charts/engine/presets.cjs.map +1 -1
  64. package/dist/charts/engine/presets.d.cts +71 -5
  65. package/dist/charts/engine/presets.d.ts +71 -5
  66. package/dist/charts/engine/presets.js +120 -33
  67. package/dist/charts/engine/presets.js.map +1 -1
  68. package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
  69. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
  70. package/dist/charts/engine/renderers/canvas2d.js +149 -111
  71. package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
  72. package/dist/charts/engine/renderers/range.cjs +1 -1
  73. package/dist/charts/engine/renderers/range.cjs.map +1 -1
  74. package/dist/charts/engine/renderers/range.js +4 -4
  75. package/dist/charts/engine/renderers/range.js.map +1 -1
  76. package/dist/charts/engine/renderers/shaders.cjs +37 -19
  77. package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
  78. package/dist/charts/engine/renderers/shaders.d.cts +2 -2
  79. package/dist/charts/engine/renderers/shaders.d.ts +2 -2
  80. package/dist/charts/engine/renderers/shaders.js +37 -19
  81. package/dist/charts/engine/renderers/shaders.js.map +1 -1
  82. package/dist/charts/engine/renderers/types.cjs.map +1 -1
  83. package/dist/charts/engine/renderers/types.d.cts +11 -4
  84. package/dist/charts/engine/renderers/types.d.ts +11 -4
  85. package/dist/charts/engine/renderers/types.js.map +1 -1
  86. package/dist/charts/engine/renderers/webgl2.cjs +1 -1
  87. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
  88. package/dist/charts/engine/renderers/webgl2.js +33 -12
  89. package/dist/charts/engine/renderers/webgl2.js.map +1 -1
  90. package/dist/charts/engine/renderers/webgpu.cjs +1 -1
  91. package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
  92. package/dist/charts/engine/renderers/webgpu.js +18 -15
  93. package/dist/charts/engine/renderers/webgpu.js.map +1 -1
  94. package/dist/charts/engine/scene.cjs +1 -1
  95. package/dist/charts/engine/scene.cjs.map +1 -1
  96. package/dist/charts/engine/scene.d.cts +19 -6
  97. package/dist/charts/engine/scene.d.ts +19 -6
  98. package/dist/charts/engine/scene.js +201 -89
  99. package/dist/charts/engine/scene.js.map +1 -1
  100. package/dist/charts/engine/shapes/canvas.cjs +2 -0
  101. package/dist/charts/engine/shapes/canvas.cjs.map +1 -0
  102. package/dist/charts/engine/shapes/canvas.d.cts +58 -0
  103. package/dist/charts/engine/shapes/canvas.d.ts +58 -0
  104. package/dist/charts/engine/shapes/canvas.js +159 -0
  105. package/dist/charts/engine/shapes/canvas.js.map +1 -0
  106. package/dist/charts/engine/shapes/chart.cjs +2 -0
  107. package/dist/charts/engine/shapes/chart.cjs.map +1 -0
  108. package/dist/charts/engine/shapes/chart.d.cts +6 -0
  109. package/dist/charts/engine/shapes/chart.d.ts +6 -0
  110. package/dist/charts/engine/shapes/chart.js +273 -0
  111. package/dist/charts/engine/shapes/chart.js.map +1 -0
  112. package/dist/charts/engine/shapes/draw.cjs +2 -0
  113. package/dist/charts/engine/shapes/draw.cjs.map +1 -0
  114. package/dist/charts/engine/shapes/draw.d.cts +20 -0
  115. package/dist/charts/engine/shapes/draw.d.ts +20 -0
  116. package/dist/charts/engine/shapes/draw.js +152 -0
  117. package/dist/charts/engine/shapes/draw.js.map +1 -0
  118. package/dist/charts/engine/shapes/funnel.cjs +2 -0
  119. package/dist/charts/engine/shapes/funnel.cjs.map +1 -0
  120. package/dist/charts/engine/shapes/funnel.d.cts +6 -0
  121. package/dist/charts/engine/shapes/funnel.d.ts +6 -0
  122. package/dist/charts/engine/shapes/funnel.js +149 -0
  123. package/dist/charts/engine/shapes/funnel.js.map +1 -0
  124. package/dist/charts/engine/shapes/gauge.cjs +2 -0
  125. package/dist/charts/engine/shapes/gauge.cjs.map +1 -0
  126. package/dist/charts/engine/shapes/gauge.d.cts +7 -0
  127. package/dist/charts/engine/shapes/gauge.d.ts +7 -0
  128. package/dist/charts/engine/shapes/gauge.js +173 -0
  129. package/dist/charts/engine/shapes/gauge.js.map +1 -0
  130. package/dist/charts/engine/shapes/hit.cjs +2 -0
  131. package/dist/charts/engine/shapes/hit.cjs.map +1 -0
  132. package/dist/charts/engine/shapes/hit.d.cts +28 -0
  133. package/dist/charts/engine/shapes/hit.d.ts +28 -0
  134. package/dist/charts/engine/shapes/hit.js +124 -0
  135. package/dist/charts/engine/shapes/hit.js.map +1 -0
  136. package/dist/charts/engine/shapes/index.d.cts +9 -0
  137. package/dist/charts/engine/shapes/index.d.ts +9 -0
  138. package/dist/charts/engine/shapes/layout.cjs +3 -0
  139. package/dist/charts/engine/shapes/layout.cjs.map +1 -0
  140. package/dist/charts/engine/shapes/layout.d.cts +88 -0
  141. package/dist/charts/engine/shapes/layout.d.ts +88 -0
  142. package/dist/charts/engine/shapes/layout.js +266 -0
  143. package/dist/charts/engine/shapes/layout.js.map +1 -0
  144. package/dist/charts/engine/shapes/pie.cjs +2 -0
  145. package/dist/charts/engine/shapes/pie.cjs.map +1 -0
  146. package/dist/charts/engine/shapes/pie.d.cts +20 -0
  147. package/dist/charts/engine/shapes/pie.d.ts +20 -0
  148. package/dist/charts/engine/shapes/pie.js +302 -0
  149. package/dist/charts/engine/shapes/pie.js.map +1 -0
  150. package/dist/charts/engine/shapes/radar.cjs +2 -0
  151. package/dist/charts/engine/shapes/radar.cjs.map +1 -0
  152. package/dist/charts/engine/shapes/radar.d.cts +8 -0
  153. package/dist/charts/engine/shapes/radar.d.ts +8 -0
  154. package/dist/charts/engine/shapes/radar.js +197 -0
  155. package/dist/charts/engine/shapes/radar.js.map +1 -0
  156. package/dist/charts/engine/shapes/runtime.cjs +2 -0
  157. package/dist/charts/engine/shapes/runtime.cjs.map +1 -0
  158. package/dist/charts/engine/shapes/runtime.d.cts +29 -0
  159. package/dist/charts/engine/shapes/runtime.d.ts +29 -0
  160. package/dist/charts/engine/shapes/runtime.js +97 -0
  161. package/dist/charts/engine/shapes/runtime.js.map +1 -0
  162. package/dist/charts/engine/shapes/scene.cjs +2 -0
  163. package/dist/charts/engine/shapes/scene.cjs.map +1 -0
  164. package/dist/charts/engine/shapes/scene.d.cts +257 -0
  165. package/dist/charts/engine/shapes/scene.d.ts +257 -0
  166. package/dist/charts/engine/shapes/scene.js +123 -0
  167. package/dist/charts/engine/shapes/scene.js.map +1 -0
  168. package/dist/charts/engine/shapes/treemap.cjs +2 -0
  169. package/dist/charts/engine/shapes/treemap.cjs.map +1 -0
  170. package/dist/charts/engine/shapes/treemap.d.cts +14 -0
  171. package/dist/charts/engine/shapes/treemap.d.ts +14 -0
  172. package/dist/charts/engine/shapes/treemap.js +213 -0
  173. package/dist/charts/engine/shapes/treemap.js.map +1 -0
  174. package/dist/charts/engine/shapes/types.d.cts +292 -0
  175. package/dist/charts/engine/shapes/types.d.ts +292 -0
  176. package/dist/charts/engine/signature.cjs +2 -0
  177. package/dist/charts/engine/signature.cjs.map +1 -0
  178. package/dist/charts/engine/signature.d.cts +9 -0
  179. package/dist/charts/engine/signature.d.ts +9 -0
  180. package/dist/charts/engine/signature.js +13 -0
  181. package/dist/charts/engine/signature.js.map +1 -0
  182. package/dist/charts/engine/theme.cjs +1 -1
  183. package/dist/charts/engine/theme.cjs.map +1 -1
  184. package/dist/charts/engine/theme.d.cts +10 -1
  185. package/dist/charts/engine/theme.d.ts +10 -1
  186. package/dist/charts/engine/theme.js +40 -16
  187. package/dist/charts/engine/theme.js.map +1 -1
  188. package/dist/charts/engine/types.d.cts +70 -9
  189. package/dist/charts/engine/types.d.ts +70 -9
  190. package/dist/charts/index.cjs +1 -1
  191. package/dist/charts/index.d.cts +4 -2
  192. package/dist/charts/index.d.ts +4 -2
  193. package/dist/charts/index.js +8 -5
  194. package/dist/charts/react/Chart.cjs +1 -1
  195. package/dist/charts/react/Chart.cjs.map +1 -1
  196. package/dist/charts/react/Chart.d.cts +8 -1
  197. package/dist/charts/react/Chart.d.ts +8 -1
  198. package/dist/charts/react/Chart.js +66 -47
  199. package/dist/charts/react/Chart.js.map +1 -1
  200. package/dist/charts/react/charts.cjs +1 -1
  201. package/dist/charts/react/charts.cjs.map +1 -1
  202. package/dist/charts/react/charts.d.cts +10 -2
  203. package/dist/charts/react/charts.d.ts +10 -2
  204. package/dist/charts/react/charts.js +174 -51
  205. package/dist/charts/react/charts.js.map +1 -1
  206. package/dist/charts/react/shapes.cjs +2 -0
  207. package/dist/charts/react/shapes.cjs.map +1 -0
  208. package/dist/charts/react/shapes.d.cts +255 -0
  209. package/dist/charts/react/shapes.d.ts +255 -0
  210. package/dist/charts/react/shapes.js +242 -0
  211. package/dist/charts/react/shapes.js.map +1 -0
  212. package/dist/charts/react/types.d.cts +73 -4
  213. package/dist/charts/react/types.d.ts +73 -4
  214. package/dist/native/charts/src/engine/color.cjs +1 -1
  215. package/dist/native/charts/src/engine/color.cjs.map +1 -1
  216. package/dist/native/charts/src/engine/color.js +12 -3
  217. package/dist/native/charts/src/engine/color.js.map +1 -1
  218. package/dist/native/charts/src/engine/controller.cjs +2 -2
  219. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  220. package/dist/native/charts/src/engine/controller.js +334 -270
  221. package/dist/native/charts/src/engine/controller.js.map +1 -1
  222. package/dist/native/charts/src/engine/curve.cjs +2 -0
  223. package/dist/native/charts/src/engine/curve.cjs.map +1 -0
  224. package/dist/native/charts/src/engine/curve.js +56 -0
  225. package/dist/native/charts/src/engine/curve.js.map +1 -0
  226. package/dist/native/charts/src/engine/data.cjs +1 -1
  227. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  228. package/dist/native/charts/src/engine/data.js +98 -38
  229. package/dist/native/charts/src/engine/data.js.map +1 -1
  230. package/dist/native/charts/src/engine/model.cjs +1 -1
  231. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  232. package/dist/native/charts/src/engine/model.js +229 -112
  233. package/dist/native/charts/src/engine/model.js.map +1 -1
  234. package/dist/native/charts/src/engine/overlay.cjs +1 -1
  235. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  236. package/dist/native/charts/src/engine/overlay.js +16 -16
  237. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  238. package/dist/native/charts/src/engine/presets.cjs +1 -1
  239. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  240. package/dist/native/charts/src/engine/presets.js +11 -4
  241. package/dist/native/charts/src/engine/presets.js.map +1 -1
  242. package/dist/native/charts/src/engine/scene.cjs +1 -1
  243. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  244. package/dist/native/charts/src/engine/scene.js +209 -97
  245. package/dist/native/charts/src/engine/scene.js.map +1 -1
  246. package/dist/native/charts/src/engine/theme.cjs.map +1 -1
  247. package/dist/native/charts/src/engine/theme.js.map +1 -1
  248. package/dist/native/components/Chart/scene.cjs +1 -1
  249. package/dist/native/components/Chart/scene.cjs.map +1 -1
  250. package/dist/native/components/Chart/scene.js +31 -19
  251. package/dist/native/components/Chart/scene.js.map +1 -1
  252. package/dist/native/source/components/Chart/scene.tsx +54 -20
  253. package/dist/taro/index.js +1059 -579
  254. package/dist/uni/charts-canvas.js +3 -1
  255. package/dist/weapp/controls.js +966 -225
  256. package/package.json +1 -1
@@ -8,30 +8,51 @@ export type ChartRendererPreference = "auto" | ChartRendererKind;
8
8
  /** Scale of an axis */
9
9
  export type ChartAxisType = "linear" | "time" | "category";
10
10
  /** How a series is drawn */
11
- export type ChartSeriesType = "line" | "area" | "bar" | "scatter";
11
+ export type ChartSeriesType = "line" | "area" | "bar" | "scatter" | "candlestick" | "heatmap";
12
+ /** Shape of a line (and of the edge of an area) between its points */
13
+ export type ChartCurve = "linear" | "smooth" | "step";
12
14
  /** X value of a datum: a number, a `Date` (time axis) or a category name */
13
15
  export type ChartXValue = number | Date | string;
14
16
  /** One datum written as an object */
15
17
  export interface ChartPointDatum {
16
18
  /** X value; the datum index when omitted */
17
19
  x?: ChartXValue;
18
- /** Y value; `null` leaves a gap */
19
- y: number | null;
20
+ /**
21
+ * Y value; `null` leaves a gap. Candlesticks: the close. Heatmaps: the
22
+ * row (a number, or a category name of a `category` y axis)
23
+ */
24
+ y: number | string | null;
20
25
  /** Diameter of the dot in CSS pixels (scatter) */
21
26
  size?: number;
22
- /** Color of the dot (scatter); any CSS color */
27
+ /** Color of the dot or bar (scatter, bar); any CSS color */
23
28
  color?: string;
24
29
  /** Text drawn next to the dot (scatter with `showLabels`) and shown in the tooltip */
25
30
  label?: string;
31
+ /** Candlestick: opening value */
32
+ open?: number;
33
+ /** Candlestick: highest value */
34
+ high?: number;
35
+ /** Candlestick: lowest value */
36
+ low?: number;
37
+ /** Heatmap: value of the cell, mapped to `colorScale` */
38
+ value?: number | null;
26
39
  }
27
40
  /** Column-oriented data: the fastest form for large data sets (typed arrays are used as is) */
28
41
  export interface ChartColumnData {
29
42
  /** X values; the index when omitted */
30
43
  x?: ArrayLike<number> | readonly ChartXValue[];
31
- /** Y values (`NaN` / `null` leave a gap) */
32
- y: ArrayLike<number> | readonly (number | null)[];
44
+ /** Y values (`NaN` / `null` leave a gap); candlesticks: the closes; heatmaps: the rows */
45
+ y: ArrayLike<number> | readonly (number | string | null)[];
33
46
  /** Per-point diameters in CSS pixels (scatter) */
34
47
  size?: ArrayLike<number>;
48
+ /** Candlestick: opening values */
49
+ open?: ArrayLike<number>;
50
+ /** Candlestick: highest values */
51
+ high?: ArrayLike<number>;
52
+ /** Candlestick: lowest values */
53
+ low?: ArrayLike<number>;
54
+ /** Heatmap: values of the cells */
55
+ value?: ArrayLike<number> | readonly (number | null)[];
35
56
  }
36
57
  /**
37
58
  * Data of a series: y values only (`[3, 5, 2]`, typed arrays included),
@@ -65,17 +86,45 @@ export interface ChartSeries {
65
86
  pointSize?: number;
66
87
  /** Fill opacity (area, scatter), 0-1 */
67
88
  opacity?: number;
68
- /** Bars with the same stack id are stacked */
89
+ /**
90
+ * Series with the same stack id are stacked (bars, areas and lines; see
91
+ * `stackMode` for 100% stacks)
92
+ */
69
93
  stack?: string;
70
94
  /** Hides the series (it stays in the legend) */
71
95
  hidden?: boolean;
72
- /** Draws the `label` of each point next to it (scatter) */
96
+ /**
97
+ * Draws the `label` of each point next to it (scatter) or the value above
98
+ * each bar (bar)
99
+ */
73
100
  showLabels?: boolean;
101
+ /**
102
+ * Shape of the line between the points: straight, smooth (monotone, never
103
+ * overshoots the data) or steps (line / area)
104
+ * @default "linear"
105
+ */
106
+ curve?: ChartCurve;
107
+ /** Candlestick: color of the rising candles (close >= open); `--success-color` by default */
108
+ upColor?: string;
109
+ /** Candlestick: color of the falling candles; `--danger-color` by default */
110
+ downColor?: string;
111
+ /**
112
+ * Heatmap: colors from the lowest to the highest value (two or more)
113
+ * @default a ramp from the background to the series color
114
+ */
115
+ colorScale?: readonly string[];
116
+ /** Heatmap: values mapped to the ends of `colorScale`; the data range by default */
117
+ valueRange?: readonly [number, number];
118
+ /** Bar / heatmap: corner radius in CSS pixels (bars: 3, heatmap cells: 2) */
119
+ radius?: number;
120
+ /** Formats the values of this series in the tooltip (the y axis format by default) */
121
+ format?: (value: number) => string;
74
122
  }
75
123
  /** Options of an axis */
76
124
  export interface ChartAxisOptions {
77
125
  /**
78
- * Scale of the axis: `linear` numbers, `time` timestamps / dates, `category` names
126
+ * Scale of the axis: `linear` numbers, `time` timestamps / dates, `category`
127
+ * names (x axis, and y axis of heatmaps)
79
128
  * @default "linear"
80
129
  */
81
130
  type?: ChartAxisType;
@@ -255,6 +304,12 @@ export interface ChartOptions {
255
304
  palette?: readonly string[];
256
305
  /** Accessible name of the chart */
257
306
  ariaLabel?: string;
307
+ /**
308
+ * `percent` scales every stack to 100% at each x (the axis shows percents,
309
+ * the tooltip the actual values)
310
+ * @default "normal"
311
+ */
312
+ stackMode?: "normal" | "percent";
258
313
  }
259
314
  /** A point under the pointer */
260
315
  export interface ChartHoverItem {
@@ -268,6 +323,12 @@ export interface ChartHoverItem {
268
323
  /** Resolved color of the point */
269
324
  color: string;
270
325
  label?: string;
326
+ /** Candlestick: open / high / low (`y` is the close) */
327
+ open?: number;
328
+ high?: number;
329
+ low?: number;
330
+ /** Heatmap: value of the cell */
331
+ value?: number;
271
332
  }
272
333
  /** Hover / click payload */
273
334
  export interface ChartHoverEvent {
@@ -8,30 +8,51 @@ export type ChartRendererPreference = "auto" | ChartRendererKind;
8
8
  /** Scale of an axis */
9
9
  export type ChartAxisType = "linear" | "time" | "category";
10
10
  /** How a series is drawn */
11
- export type ChartSeriesType = "line" | "area" | "bar" | "scatter";
11
+ export type ChartSeriesType = "line" | "area" | "bar" | "scatter" | "candlestick" | "heatmap";
12
+ /** Shape of a line (and of the edge of an area) between its points */
13
+ export type ChartCurve = "linear" | "smooth" | "step";
12
14
  /** X value of a datum: a number, a `Date` (time axis) or a category name */
13
15
  export type ChartXValue = number | Date | string;
14
16
  /** One datum written as an object */
15
17
  export interface ChartPointDatum {
16
18
  /** X value; the datum index when omitted */
17
19
  x?: ChartXValue;
18
- /** Y value; `null` leaves a gap */
19
- y: number | null;
20
+ /**
21
+ * Y value; `null` leaves a gap. Candlesticks: the close. Heatmaps: the
22
+ * row (a number, or a category name of a `category` y axis)
23
+ */
24
+ y: number | string | null;
20
25
  /** Diameter of the dot in CSS pixels (scatter) */
21
26
  size?: number;
22
- /** Color of the dot (scatter); any CSS color */
27
+ /** Color of the dot or bar (scatter, bar); any CSS color */
23
28
  color?: string;
24
29
  /** Text drawn next to the dot (scatter with `showLabels`) and shown in the tooltip */
25
30
  label?: string;
31
+ /** Candlestick: opening value */
32
+ open?: number;
33
+ /** Candlestick: highest value */
34
+ high?: number;
35
+ /** Candlestick: lowest value */
36
+ low?: number;
37
+ /** Heatmap: value of the cell, mapped to `colorScale` */
38
+ value?: number | null;
26
39
  }
27
40
  /** Column-oriented data: the fastest form for large data sets (typed arrays are used as is) */
28
41
  export interface ChartColumnData {
29
42
  /** X values; the index when omitted */
30
43
  x?: ArrayLike<number> | readonly ChartXValue[];
31
- /** Y values (`NaN` / `null` leave a gap) */
32
- y: ArrayLike<number> | readonly (number | null)[];
44
+ /** Y values (`NaN` / `null` leave a gap); candlesticks: the closes; heatmaps: the rows */
45
+ y: ArrayLike<number> | readonly (number | string | null)[];
33
46
  /** Per-point diameters in CSS pixels (scatter) */
34
47
  size?: ArrayLike<number>;
48
+ /** Candlestick: opening values */
49
+ open?: ArrayLike<number>;
50
+ /** Candlestick: highest values */
51
+ high?: ArrayLike<number>;
52
+ /** Candlestick: lowest values */
53
+ low?: ArrayLike<number>;
54
+ /** Heatmap: values of the cells */
55
+ value?: ArrayLike<number> | readonly (number | null)[];
35
56
  }
36
57
  /**
37
58
  * Data of a series: y values only (`[3, 5, 2]`, typed arrays included),
@@ -65,17 +86,45 @@ export interface ChartSeries {
65
86
  pointSize?: number;
66
87
  /** Fill opacity (area, scatter), 0-1 */
67
88
  opacity?: number;
68
- /** Bars with the same stack id are stacked */
89
+ /**
90
+ * Series with the same stack id are stacked (bars, areas and lines; see
91
+ * `stackMode` for 100% stacks)
92
+ */
69
93
  stack?: string;
70
94
  /** Hides the series (it stays in the legend) */
71
95
  hidden?: boolean;
72
- /** Draws the `label` of each point next to it (scatter) */
96
+ /**
97
+ * Draws the `label` of each point next to it (scatter) or the value above
98
+ * each bar (bar)
99
+ */
73
100
  showLabels?: boolean;
101
+ /**
102
+ * Shape of the line between the points: straight, smooth (monotone, never
103
+ * overshoots the data) or steps (line / area)
104
+ * @default "linear"
105
+ */
106
+ curve?: ChartCurve;
107
+ /** Candlestick: color of the rising candles (close >= open); `--success-color` by default */
108
+ upColor?: string;
109
+ /** Candlestick: color of the falling candles; `--danger-color` by default */
110
+ downColor?: string;
111
+ /**
112
+ * Heatmap: colors from the lowest to the highest value (two or more)
113
+ * @default a ramp from the background to the series color
114
+ */
115
+ colorScale?: readonly string[];
116
+ /** Heatmap: values mapped to the ends of `colorScale`; the data range by default */
117
+ valueRange?: readonly [number, number];
118
+ /** Bar / heatmap: corner radius in CSS pixels (bars: 3, heatmap cells: 2) */
119
+ radius?: number;
120
+ /** Formats the values of this series in the tooltip (the y axis format by default) */
121
+ format?: (value: number) => string;
74
122
  }
75
123
  /** Options of an axis */
76
124
  export interface ChartAxisOptions {
77
125
  /**
78
- * Scale of the axis: `linear` numbers, `time` timestamps / dates, `category` names
126
+ * Scale of the axis: `linear` numbers, `time` timestamps / dates, `category`
127
+ * names (x axis, and y axis of heatmaps)
79
128
  * @default "linear"
80
129
  */
81
130
  type?: ChartAxisType;
@@ -255,6 +304,12 @@ export interface ChartOptions {
255
304
  palette?: readonly string[];
256
305
  /** Accessible name of the chart */
257
306
  ariaLabel?: string;
307
+ /**
308
+ * `percent` scales every stack to 100% at each x (the axis shows percents,
309
+ * the tooltip the actual values)
310
+ * @default "normal"
311
+ */
312
+ stackMode?: "normal" | "percent";
258
313
  }
259
314
  /** A point under the pointer */
260
315
  export interface ChartHoverItem {
@@ -268,6 +323,12 @@ export interface ChartHoverItem {
268
323
  /** Resolved color of the point */
269
324
  color: string;
270
325
  label?: string;
326
+ /** Candlestick: open / high / low (`y` is the close) */
327
+ open?: number;
328
+ high?: number;
329
+ low?: number;
330
+ /** Heatmap: value of the cell */
331
+ value?: number;
271
332
  }
272
333
  /** Hover / click payload */
273
334
  export interface ChartHoverEvent {
@@ -1 +1 @@
1
- "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./engine/format.cjs"),t=require("./engine/chart.cjs"),n=require("./react/Chart.cjs"),r=require("./engine/presets.cjs"),i=require("./react/charts.cjs"),a=require("./engine/controller.cjs"),o=require("./engine/canvas.cjs");require("./core.cjs"),exports.BarChart=i.BarChart,exports.Chart=n.Chart,exports.LineChart=i.LineChart,exports.QuadrantChart=i.QuadrantChart,exports.ScatterChart=i.ScatterChart,exports.createCanvasChart=o.createCanvasChart,exports.createChart=t.createChart,exports.createChartController=a.createChartController,exports.formatCompact=e.formatCompact,exports.quadrantCenter=r.quadrantCenter,exports.quadrantChartOptions=r.quadrantChartOptions,exports.quadrantOf=r.quadrantOf,exports.scenePrimitives=a.scenePrimitives;
1
+ "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./engine/format.cjs"),t=require("./engine/chart.cjs"),n=require("./react/Chart.cjs"),r=require("./engine/presets.cjs"),i=require("./react/charts.cjs"),a=require("./engine/shapes/chart.cjs"),o=require("./react/shapes.cjs"),s=require("./engine/shapes/canvas.cjs"),c=require("./engine/controller.cjs"),l=require("./engine/canvas.cjs");require("./core.cjs"),exports.AreaChart=i.AreaChart,exports.BarChart=i.BarChart,exports.CandlestickChart=i.CandlestickChart,exports.Chart=n.Chart,exports.DonutChart=o.DonutChart,exports.FunnelChart=o.FunnelChart,exports.GaugeChart=o.GaugeChart,exports.HeatmapChart=i.HeatmapChart,exports.LineChart=i.LineChart,exports.PieChart=o.PieChart,exports.QuadrantChart=i.QuadrantChart,exports.RadarChart=o.RadarChart,exports.ScatterChart=i.ScatterChart,exports.Sparkline=i.Sparkline,exports.TreemapChart=o.TreemapChart,exports.createCanvasChart=l.createCanvasChart,exports.createCanvasShapeChart=s.createCanvasShapeChart,exports.createChart=t.createChart,exports.createChartController=c.createChartController,exports.createShapeChart=a.createShapeChart,exports.formatCompact=e.formatCompact,exports.heatmapChartOptions=r.heatmapChartOptions,exports.quadrantCenter=r.quadrantCenter,exports.quadrantChartOptions=r.quadrantChartOptions,exports.quadrantOf=r.quadrantOf,exports.scenePrimitives=c.scenePrimitives,exports.sparklineOptions=r.sparklineOptions;
@@ -1,4 +1,6 @@
1
1
  export { Chart } from './react/Chart.cjs';
2
- export { BarChart, LineChart, QuadrantChart, ScatterChart, } from './react/charts.cjs';
3
- export type { BarChartProps, ChartCommonProps, ChartHandle, ChartProps, LineChartProps, QuadrantChartProps, QuadrantDropTarget, ScatterChartProps, } from './react/types.cjs';
2
+ export { AreaChart, BarChart, CandlestickChart, HeatmapChart, LineChart, QuadrantChart, ScatterChart, Sparkline, } from './react/charts.cjs';
3
+ export { DonutChart, FunnelChart, GaugeChart, PieChart, RadarChart, TreemapChart, } from './react/shapes.cjs';
4
+ export type { AreaChartProps, BarChartProps, CandlestickChartProps, ChartCommonProps, ChartHandle, ChartProps, HeatmapChartProps, LineChartProps, QuadrantChartProps, QuadrantDropTarget, ScatterChartProps, SparklineProps, } from './react/types.cjs';
5
+ export type { DonutChartProps, FunnelChartProps, GaugeChartProps, PieChartProps, RadarChartProps, ShapeChartCommonProps, ShapeChartHandle, TreemapChartProps, } from './react/shapes.cjs';
4
6
  export * from './core.cjs';
@@ -1,4 +1,6 @@
1
1
  export { Chart } from './react/Chart.js';
2
- export { BarChart, LineChart, QuadrantChart, ScatterChart, } from './react/charts.js';
3
- export type { BarChartProps, ChartCommonProps, ChartHandle, ChartProps, LineChartProps, QuadrantChartProps, QuadrantDropTarget, ScatterChartProps, } from './react/types.js';
2
+ export { AreaChart, BarChart, CandlestickChart, HeatmapChart, LineChart, QuadrantChart, ScatterChart, Sparkline, } from './react/charts.js';
3
+ export { DonutChart, FunnelChart, GaugeChart, PieChart, RadarChart, TreemapChart, } from './react/shapes.js';
4
+ export type { AreaChartProps, BarChartProps, CandlestickChartProps, ChartCommonProps, ChartHandle, ChartProps, HeatmapChartProps, LineChartProps, QuadrantChartProps, QuadrantDropTarget, ScatterChartProps, SparklineProps, } from './react/types.js';
5
+ export type { DonutChartProps, FunnelChartProps, GaugeChartProps, PieChartProps, RadarChartProps, ShapeChartCommonProps, ShapeChartHandle, TreemapChartProps, } from './react/shapes.js';
4
6
  export * from './core.js';
@@ -2,9 +2,12 @@
2
2
  import { formatCompact as e } from "./engine/format.js";
3
3
  import { createChart as t } from "./engine/chart.js";
4
4
  import { Chart as n } from "./react/Chart.js";
5
- import { quadrantCenter as r, quadrantChartOptions as i, quadrantOf as a } from "./engine/presets.js";
6
- import { BarChart as o, LineChart as s, QuadrantChart as c, ScatterChart as l } from "./react/charts.js";
7
- import { createChartController as u, scenePrimitives as d } from "./engine/controller.js";
8
- import { createCanvasChart as f } from "./engine/canvas.js";
5
+ import { heatmapChartOptions as r, quadrantCenter as i, quadrantChartOptions as a, quadrantOf as o, sparklineOptions as s } from "./engine/presets.js";
6
+ import { AreaChart as c, BarChart as l, CandlestickChart as u, HeatmapChart as d, LineChart as f, QuadrantChart as p, ScatterChart as m, Sparkline as h } from "./react/charts.js";
7
+ import { createShapeChart as g } from "./engine/shapes/chart.js";
8
+ import { DonutChart as _, FunnelChart as v, GaugeChart as y, PieChart as b, RadarChart as x, TreemapChart as S } from "./react/shapes.js";
9
+ import { createCanvasShapeChart as C } from "./engine/shapes/canvas.js";
10
+ import { createChartController as w, scenePrimitives as T } from "./engine/controller.js";
11
+ import { createCanvasChart as E } from "./engine/canvas.js";
9
12
  import "./core.js";
10
- export { o as BarChart, n as Chart, s as LineChart, c as QuadrantChart, l as ScatterChart, f as createCanvasChart, t as createChart, u as createChartController, e as formatCompact, r as quadrantCenter, i as quadrantChartOptions, a as quadrantOf, d as scenePrimitives };
13
+ export { c as AreaChart, l as BarChart, u as CandlestickChart, n as Chart, _ as DonutChart, v as FunnelChart, y as GaugeChart, d as HeatmapChart, f as LineChart, b as PieChart, p as QuadrantChart, x as RadarChart, m as ScatterChart, h as Sparkline, S as TreemapChart, E as createCanvasChart, C as createCanvasShapeChart, t as createChart, w as createChartController, g as createShapeChart, e as formatCompact, r as heatmapChartOptions, i as quadrantCenter, a as quadrantChartOptions, o as quadrantOf, T as scenePrimitives, s as sparklineOptions };
@@ -1,2 +1,2 @@
1
- "use client";const e=require("../engine/chart.cjs");let t=require("react"),n=require("react-dom"),r=require("react/jsx-runtime");var i=(e,t)=>e===void 0?t:typeof e==`number`?`${e}px`:e,a=e=>({series:e.series,xAxis:e.xAxis,yAxis:e.yAxis,renderer:e.renderer,legend:e.legend,tooltip:e.tooltip,crosshair:e.crosshair,annotations:e.annotations,interaction:e.interaction,padding:e.padding,palette:e.palette,ariaLabel:e.ariaLabel});function o({options:a,height:o,width:s,className:c,style:l,handleRef:u,renderTooltip:d,overlay:f,...p}){let m=(0,t.useRef)(null),h=(0,t.useRef)(null),g=(0,t.useRef)(p),_=(0,t.useRef)(d),[v,y]=(0,t.useState)(null),[b,x]=(0,t.useState)(null),S=(0,t.useMemo)(()=>typeof document>`u`?null:document.createElement(`div`),[]),C=(0,t.useMemo)(()=>{if(!d||!S||a.tooltip===!1)return a;let e=typeof a.tooltip==`object`?a.tooltip:{};return{...a,tooltip:{...e,render:e=>_.current?((0,n.flushSync)(()=>y(e)),S):null}}},[a,d,S]),w=(0,t.useRef)(C);return(0,t.useEffect)(()=>{g.current=p,_.current=d}),(0,t.useEffect)(()=>{let t=m.current;if(!t)return;let n=e.createChart(t,w.current);h.current=n;let r=[n.on(`hover`,e=>g.current.onHover?.(e)),n.on(`click`,e=>g.current.onPointClick?.(e)),n.on(`plotClick`,e=>g.current.onPlotClick?.(e)),n.on(`zoom`,e=>g.current.onZoom?.(e)),n.on(`renderer`,e=>g.current.onRendererChange?.(e)),n.on(`drag`,e=>g.current.onDrag?.(e)),n.on(`drop`,e=>g.current.onDrop?.(e)),n.on(`layout`,e=>x(e))];return()=>{r.forEach(e=>e()),n.destroy(),h.current=null}},[]),(0,t.useEffect)(()=>{w.current!==C&&(w.current=C,h.current?.setOptions(C))},[C]),(0,t.useImperativeHandle)(u,()=>({resetZoom:()=>h.current?.resetZoom(),getView:()=>h.current?.getView()??null,setView:e=>h.current?.setView(e),getRenderer:()=>h.current?.getRenderer()??null,getInstance:()=>h.current}),[]),(0,r.jsxs)(`div`,{className:c,style:{position:`relative`,width:i(s,`100%`),height:i(o,`320px`),...l},children:[(0,r.jsx)(`div`,{ref:m,style:{position:`absolute`,inset:0}}),f&&b&&(0,r.jsx)(`div`,{className:`minerva-chart-overlay`,style:{position:`absolute`,left:b.x,top:b.y,width:b.width,height:b.height,pointerEvents:`none`},children:f(b)}),S&&v&&d&&(0,n.createPortal)(d(v),S)]})}function s(e){let{height:t,width:n,className:i,style:s,ref:c,onHover:l,onPointClick:u,onPlotClick:d,onZoom:f,onRendererChange:p,renderTooltip:m}=e;return(0,r.jsx)(o,{options:a(e),height:t,width:n,className:i,style:s,handleRef:c,onHover:l,onPointClick:u,onPlotClick:d,onZoom:f,onRendererChange:p,renderTooltip:m})}exports.Chart=s,exports.ChartBase=o,exports.engineOptions=a;
1
+ "use client";const e=require("../engine/chart.cjs");let t=require("react"),n=require("react-dom"),r=require("react/jsx-runtime");var i=(e,t)=>e===void 0?t:typeof e==`number`?`${e}px`:e,a=e=>({series:e.series,xAxis:e.xAxis,yAxis:e.yAxis,renderer:e.renderer,legend:e.legend,tooltip:e.tooltip,crosshair:e.crosshair,annotations:e.annotations,interaction:e.interaction,padding:e.padding,palette:e.palette,ariaLabel:e.ariaLabel,stackMode:e.stackMode}),o=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},s=(e,t)=>{let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>e[n]===t[n]&&Object.prototype.hasOwnProperty.call(t,n))},c=(e,t)=>e===t?!0:Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):o(e)&&o(t)&&s(e,t),l=(e,t)=>{if(e===t)return!0;let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>{if(!Object.prototype.hasOwnProperty.call(t,n))return!1;if(n!==`series`)return c(e[n],t[n]);let r=e.series,i=t.series;return r===i||r.length===i.length&&r.every((e,t)=>e===i[t]||s(e,i[t]))})},u=(e,t)=>!!e&&e.x===t.x&&e.xLabel===t.xLabel&&e.items.length===t.items.length&&e.items.every((e,n)=>s(e,t.items[n]));function d({options:a,height:o,width:s,className:c,style:d,handleRef:f,renderTooltip:p,overlay:m,...h}){let g=(0,t.useRef)(null),_=(0,t.useRef)(null),v=(0,t.useRef)(h),y=(0,t.useRef)(p),b=(0,t.useRef)(null),[x,S]=(0,t.useState)(null),[C,w]=(0,t.useState)(null),T=(0,t.useMemo)(()=>typeof document>`u`?null:document.createElement(`div`),[]),[E,D]=(0,t.useState)(a);E!==a&&!l(E,a)&&D(a);let O=!!p,k=(0,t.useMemo)(()=>{if(!O||!T||E.tooltip===!1)return E;let e=typeof E.tooltip==`object`?E.tooltip:{};return{...E,tooltip:{...e,render:e=>y.current?(u(b.current,e)||(b.current=e,(0,n.flushSync)(()=>S(e))),T):null}}},[E,O,T]),A=(0,t.useRef)(k);return(0,t.useEffect)(()=>{v.current=h,y.current=p}),(0,t.useEffect)(()=>{let t=g.current;if(!t)return;let n=e.createChart(t,A.current);_.current=n;let r=[n.on(`hover`,e=>v.current.onHover?.(e)),n.on(`click`,e=>v.current.onPointClick?.(e)),n.on(`plotClick`,e=>v.current.onPlotClick?.(e)),n.on(`zoom`,e=>v.current.onZoom?.(e)),n.on(`renderer`,e=>v.current.onRendererChange?.(e)),n.on(`drag`,e=>v.current.onDrag?.(e)),n.on(`drop`,e=>v.current.onDrop?.(e)),n.on(`layout`,e=>w(e))];return()=>{r.forEach(e=>e()),n.destroy(),_.current=null}},[]),(0,t.useEffect)(()=>{A.current!==k&&(A.current=k,_.current?.setOptions(k))},[k]),(0,t.useImperativeHandle)(f,()=>({resetZoom:()=>_.current?.resetZoom(),getView:()=>_.current?.getView()??null,setView:e=>_.current?.setView(e),getRenderer:()=>_.current?.getRenderer()??null,getInstance:()=>_.current}),[]),(0,r.jsxs)(`div`,{className:c,style:{position:`relative`,width:i(s,`100%`),height:i(o,`320px`),...d},children:[(0,r.jsx)(`div`,{ref:g,style:{position:`absolute`,inset:0}}),m&&C&&(0,r.jsx)(`div`,{className:`minerva-chart-overlay`,style:{position:`absolute`,left:C.x,top:C.y,width:C.width,height:C.height,pointerEvents:`none`},children:m(C)}),T&&x&&p&&(0,n.createPortal)(p(x),T)]})}function f(e){let{height:t,width:n,className:i,style:o,ref:s,onHover:c,onPointClick:l,onPlotClick:u,onZoom:f,onRendererChange:p,renderTooltip:m}=e;return(0,r.jsx)(d,{options:a(e),height:t,width:n,className:i,style:o,handleRef:s,onHover:c,onPointClick:l,onPlotClick:u,onZoom:f,onRendererChange:p,renderTooltip:m})}exports.Chart=f,exports.ChartBase=d,exports.engineOptions=a,exports.sameOptions=l;
2
2
  //# sourceMappingURL=Chart.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.cjs","names":["useRef","useState","useMemo","createChart","createPortal","require_chart","react","react_dom","react_jsx_runtime","size","value","fallback","engineOptions","props","ChartBase","handlers","containerRef","chartRef","handlersRef","tooltipRef","renderTooltip","tipEvent","setTipEvent","plot","setPlot","tipHost","resolved","options","base","event","optionsRef","container","chart","offs","v","r","rect","off","handleRef","view","width","height","style","overlay","Chart","ref"],"sources":["../../../../charts/src/react/Chart.tsx"],"sourcesContent":["import {\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { createPortal, flushSync } from \"react-dom\";\nimport { createChart } from \"../engine/chart\";\nimport type {\n ChartDragEvent,\n ChartHoverEvent,\n ChartInstance,\n ChartOptions,\n ChartPlotClickEvent,\n ChartRect,\n ChartRendererKind,\n ChartView,\n} from \"../engine/types\";\nimport type { ChartCommonProps, ChartProps } from \"./types\";\n\ninterface Handlers {\n onHover?: (event: ChartHoverEvent | null) => void;\n onPointClick?: (event: ChartHoverEvent) => void;\n onPlotClick?: (event: ChartPlotClickEvent) => void;\n onZoom?: (view: ChartView) => void;\n onRendererChange?: (renderer: ChartRendererKind) => void;\n onDrag?: (event: ChartDragEvent) => void;\n onDrop?: (event: ChartDragEvent) => void;\n}\n\nconst size = (value: number | string | undefined, fallback: string) =>\n value === undefined\n ? fallback\n : typeof value === \"number\"\n ? `${value}px`\n : value;\n\n/** Engine options of the common props */\nexport const engineOptions = (\n props: Pick<\n ChartCommonProps,\n | \"xAxis\"\n | \"yAxis\"\n | \"renderer\"\n | \"legend\"\n | \"tooltip\"\n | \"crosshair\"\n | \"annotations\"\n | \"interaction\"\n | \"padding\"\n | \"palette\"\n | \"ariaLabel\"\n > &\n Pick<ChartOptions, \"series\">,\n): ChartOptions => ({\n series: props.series,\n xAxis: props.xAxis,\n yAxis: props.yAxis,\n renderer: props.renderer,\n legend: props.legend,\n tooltip: props.tooltip,\n crosshair: props.crosshair,\n annotations: props.annotations,\n interaction: props.interaction,\n padding: props.padding,\n palette: props.palette,\n ariaLabel: props.ariaLabel,\n});\n\ninterface ChartBaseProps extends Handlers {\n options: ChartOptions;\n height?: number | string;\n width?: number | string;\n className?: string;\n style?: CSSProperties;\n handleRef?: ChartCommonProps[\"ref\"];\n /** React content of the tooltip (replaces the engine's content) */\n renderTooltip?: (event: ChartHoverEvent) => ReactNode;\n /** React content placed over the chart, given the plot area */\n overlay?: (plot: ChartRect) => ReactNode;\n}\n\n/** Mounts the engine in a sized <div> and forwards option / handler changes */\nexport function ChartBase({\n options,\n height,\n width,\n className,\n style,\n handleRef,\n renderTooltip,\n overlay,\n ...handlers\n}: ChartBaseProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const chartRef = useRef<ChartInstance | null>(null);\n const handlersRef = useRef<Handlers>(handlers);\n const tooltipRef = useRef(renderTooltip);\n const [tipEvent, setTipEvent] = useState<ChartHoverEvent | null>(null);\n const [plot, setPlot] = useState<ChartRect | null>(null);\n const tipHost = useMemo(\n () =>\n typeof document === \"undefined\" ? null : document.createElement(\"div\"),\n [],\n );\n\n const resolved = useMemo((): ChartOptions => {\n if (!renderTooltip || !tipHost || options.tooltip === false) return options;\n const base = typeof options.tooltip === \"object\" ? options.tooltip : {};\n return {\n ...options,\n tooltip: {\n ...base,\n render: (event) => {\n if (!tooltipRef.current) return null;\n // render synchronously so the engine measures the final size\n flushSync(() => setTipEvent(event));\n return tipHost;\n },\n },\n };\n }, [options, renderTooltip, tipHost]);\n const optionsRef = useRef(resolved);\n\n useEffect(() => {\n handlersRef.current = handlers;\n tooltipRef.current = renderTooltip;\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const chart = createChart(container, optionsRef.current);\n chartRef.current = chart;\n const offs = [\n chart.on(\"hover\", (e) => handlersRef.current.onHover?.(e)),\n chart.on(\"click\", (e) => handlersRef.current.onPointClick?.(e)),\n chart.on(\"plotClick\", (e) => handlersRef.current.onPlotClick?.(e)),\n chart.on(\"zoom\", (v) => handlersRef.current.onZoom?.(v)),\n chart.on(\"renderer\", (r) => handlersRef.current.onRendererChange?.(r)),\n chart.on(\"drag\", (e) => handlersRef.current.onDrag?.(e)),\n chart.on(\"drop\", (e) => handlersRef.current.onDrop?.(e)),\n chart.on(\"layout\", (rect) => setPlot(rect)),\n ];\n return () => {\n offs.forEach((off) => off());\n chart.destroy();\n chartRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (optionsRef.current === resolved) return;\n optionsRef.current = resolved;\n chartRef.current?.setOptions(resolved);\n }, [resolved]);\n\n useImperativeHandle(\n handleRef,\n () => ({\n resetZoom: () => chartRef.current?.resetZoom(),\n getView: () => chartRef.current?.getView() ?? null,\n setView: (view) => chartRef.current?.setView(view),\n getRenderer: () => chartRef.current?.getRenderer() ?? null,\n getInstance: () => chartRef.current,\n }),\n [],\n );\n\n return (\n <div\n className={className}\n style={{\n position: \"relative\",\n width: size(width, \"100%\"),\n height: size(height, \"320px\"),\n ...style,\n }}\n >\n <div ref={containerRef} style={{ position: \"absolute\", inset: 0 }} />\n {overlay && plot && (\n <div\n className=\"minerva-chart-overlay\"\n style={{\n position: \"absolute\",\n left: plot.x,\n top: plot.y,\n width: plot.width,\n height: plot.height,\n pointerEvents: \"none\",\n }}\n >\n {overlay(plot)}\n </div>\n )}\n {tipHost &&\n tipEvent &&\n renderTooltip &&\n createPortal(renderTooltip(tipEvent), tipHost)}\n </div>\n );\n}\n\n/**\n * GPU chart (WebGPU, then WebGL2, then Canvas2D) mixing line, area, bar and\n * scatter series; zoomable, keyboard accessible and themed by the Minerva\n * CSS variables.\n */\nexport function Chart(props: ChartProps) {\n const {\n height,\n width,\n className,\n style,\n ref,\n onHover,\n onPointClick,\n onPlotClick,\n onZoom,\n onRendererChange,\n renderTooltip,\n } = props;\n return (\n <ChartBase\n options={engineOptions(props)}\n height={height}\n width={width}\n className={className}\n style={style}\n handleRef={ref}\n onHover={onHover}\n onPointClick={onPointClick}\n onPlotClick={onPlotClick}\n onZoom={onZoom}\n onRendererChange={onRendererChange}\n renderTooltip={renderTooltip}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Chart.cjs","names":["useRef","useState","useMemo","createChart","createPortal","require_chart","react","react_dom","react_jsx_runtime","size","value","fallback","engineOptions","props","isPlainObject","proto","shallowEqual","keys","a","b","key","sameValue","v","i","sameOptions","sa","sb","s","sameTooltipEvent","item","ChartBase","handlers","containerRef","chartRef","handlersRef","tooltipRef","renderTooltip","tipEventRef","tipEvent","setTipEvent","plot","setPlot","tipHost","stable","setStable","options","hasTooltip","resolved","base","event","optionsRef","container","chart","offs","r","rect","off","handleRef","view","width","height","style","overlay","Chart","ref"],"sources":["../../../../charts/src/react/Chart.tsx"],"sourcesContent":["import {\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { createPortal, flushSync } from \"react-dom\";\nimport { createChart } from \"../engine/chart\";\nimport type {\n ChartDragEvent,\n ChartHoverEvent,\n ChartInstance,\n ChartOptions,\n ChartPlotClickEvent,\n ChartRect,\n ChartRendererKind,\n ChartView,\n} from \"../engine/types\";\nimport type { ChartCommonProps, ChartProps } from \"./types\";\n\ninterface Handlers {\n onHover?: (event: ChartHoverEvent | null) => void;\n onPointClick?: (event: ChartHoverEvent) => void;\n onPlotClick?: (event: ChartPlotClickEvent) => void;\n onZoom?: (view: ChartView) => void;\n onRendererChange?: (renderer: ChartRendererKind) => void;\n onDrag?: (event: ChartDragEvent) => void;\n onDrop?: (event: ChartDragEvent) => void;\n}\n\nconst size = (value: number | string | undefined, fallback: string) =>\n value === undefined\n ? fallback\n : typeof value === \"number\"\n ? `${value}px`\n : value;\n\n/** Engine options of the common props */\nexport const engineOptions = (\n props: Pick<\n ChartCommonProps,\n | \"xAxis\"\n | \"yAxis\"\n | \"renderer\"\n | \"legend\"\n | \"tooltip\"\n | \"crosshair\"\n | \"annotations\"\n | \"interaction\"\n | \"padding\"\n | \"palette\"\n | \"ariaLabel\"\n > &\n Pick<ChartOptions, \"series\" | \"stackMode\">,\n): ChartOptions => ({\n series: props.series,\n xAxis: props.xAxis,\n yAxis: props.yAxis,\n renderer: props.renderer,\n legend: props.legend,\n tooltip: props.tooltip,\n crosshair: props.crosshair,\n annotations: props.annotations,\n interaction: props.interaction,\n padding: props.padding,\n palette: props.palette,\n ariaLabel: props.ariaLabel,\n stackMode: props.stackMode,\n});\n\ninterface ChartBaseProps extends Handlers {\n options: ChartOptions;\n height?: number | string;\n width?: number | string;\n className?: string;\n style?: CSSProperties;\n handleRef?: ChartCommonProps[\"ref\"];\n /** React content of the tooltip (replaces the engine's content) */\n renderTooltip?: (event: ChartHoverEvent) => ReactNode;\n /** React content placed over the chart, given the plot area */\n overlay?: (plot: ChartRect) => ReactNode;\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (typeof value !== \"object\" || value === null) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n};\n\n/** Same keys with identical values */\nconst shallowEqual = (\n a: Record<string, unknown>,\n b: Record<string, unknown>,\n): boolean => {\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) return false;\n return keys.every(\n (key) => a[key] === b[key] && Object.prototype.hasOwnProperty.call(b, key),\n );\n};\n\n/**\n * Identical values, or plain arrays / objects whose items are identical\n * (`[\"#f00\"]`, `{ title: \"x\" }` written inline)\n */\nconst sameValue = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n if (Array.isArray(a) && Array.isArray(b))\n return a.length === b.length && a.every((v, i) => v === b[i]);\n return isPlainObject(a) && isPlainObject(b) && shallowEqual(a, b);\n};\n\n/**\n * Whether `b` describes the same chart as `a`: top-level options compared by\n * identity (or one level deep for inline arrays / objects), series compared\n * one by one, each series shallowly (inline `series={[{ name, data }]}`\n * with a stable `data` stays equal). Data is never compared by content.\n */\nexport const sameOptions = (a: ChartOptions, b: ChartOptions): boolean => {\n if (a === b) return true;\n const keys = Object.keys(a) as (keyof ChartOptions)[];\n if (keys.length !== Object.keys(b).length) return false;\n return keys.every((key) => {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (key !== \"series\") return sameValue(a[key], b[key]);\n const sa = a.series;\n const sb = b.series;\n return (\n sa === sb ||\n (sa.length === sb.length &&\n sa.every(\n (s, i) =>\n s === sb[i] ||\n shallowEqual(\n s as unknown as Record<string, unknown>,\n sb[i] as unknown as Record<string, unknown>,\n ),\n ))\n );\n });\n};\n\n/** Same hovered points with the same values (same tooltip content) */\nconst sameTooltipEvent = (\n a: ChartHoverEvent | null,\n b: ChartHoverEvent,\n): boolean =>\n !!a &&\n a.x === b.x &&\n a.xLabel === b.xLabel &&\n a.items.length === b.items.length &&\n a.items.every((item, i) =>\n shallowEqual(\n item as unknown as Record<string, unknown>,\n b.items[i] as unknown as Record<string, unknown>,\n ),\n );\n\n/** Mounts the engine in a sized <div> and forwards option / handler changes */\nexport function ChartBase({\n options,\n height,\n width,\n className,\n style,\n handleRef,\n renderTooltip,\n overlay,\n ...handlers\n}: ChartBaseProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const chartRef = useRef<ChartInstance | null>(null);\n const handlersRef = useRef<Handlers>(handlers);\n const tooltipRef = useRef(renderTooltip);\n const tipEventRef = useRef<ChartHoverEvent | null>(null);\n const [tipEvent, setTipEvent] = useState<ChartHoverEvent | null>(null);\n const [plot, setPlot] = useState<ChartRect | null>(null);\n const tipHost = useMemo(\n () =>\n typeof document === \"undefined\" ? null : document.createElement(\"div\"),\n [],\n );\n\n // Parents pass a new options object on every render: keep the previous\n // one while it describes the same chart, so the engine isn't rebuilt\n // (state derived during render, the pattern React documents for it)\n const [stable, setStable] = useState(options);\n if (stable !== options && !sameOptions(stable, options)) setStable(options);\n // the render callback reads the latest `renderTooltip` through a ref: only\n // its presence matters here (inline callbacks change on every render)\n const hasTooltip = !!renderTooltip;\n\n const resolved = useMemo((): ChartOptions => {\n if (!hasTooltip || !tipHost || stable.tooltip === false) return stable;\n const base = typeof stable.tooltip === \"object\" ? stable.tooltip : {};\n return {\n ...stable,\n tooltip: {\n ...base,\n render: (event) => {\n if (!tooltipRef.current) return null;\n // render synchronously so the engine measures the final size;\n // pointer moves over the same points keep the rendered content\n if (!sameTooltipEvent(tipEventRef.current, event)) {\n tipEventRef.current = event;\n flushSync(() => setTipEvent(event));\n }\n return tipHost;\n },\n },\n };\n }, [stable, hasTooltip, tipHost]);\n const optionsRef = useRef(resolved);\n\n useEffect(() => {\n handlersRef.current = handlers;\n tooltipRef.current = renderTooltip;\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const chart = createChart(container, optionsRef.current);\n chartRef.current = chart;\n const offs = [\n chart.on(\"hover\", (e) => handlersRef.current.onHover?.(e)),\n chart.on(\"click\", (e) => handlersRef.current.onPointClick?.(e)),\n chart.on(\"plotClick\", (e) => handlersRef.current.onPlotClick?.(e)),\n chart.on(\"zoom\", (v) => handlersRef.current.onZoom?.(v)),\n chart.on(\"renderer\", (r) => handlersRef.current.onRendererChange?.(r)),\n chart.on(\"drag\", (e) => handlersRef.current.onDrag?.(e)),\n chart.on(\"drop\", (e) => handlersRef.current.onDrop?.(e)),\n chart.on(\"layout\", (rect) => setPlot(rect)),\n ];\n return () => {\n offs.forEach((off) => off());\n chart.destroy();\n chartRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (optionsRef.current === resolved) return;\n optionsRef.current = resolved;\n chartRef.current?.setOptions(resolved);\n }, [resolved]);\n\n useImperativeHandle(\n handleRef,\n () => ({\n resetZoom: () => chartRef.current?.resetZoom(),\n getView: () => chartRef.current?.getView() ?? null,\n setView: (view) => chartRef.current?.setView(view),\n getRenderer: () => chartRef.current?.getRenderer() ?? null,\n getInstance: () => chartRef.current,\n }),\n [],\n );\n\n return (\n <div\n className={className}\n style={{\n position: \"relative\",\n width: size(width, \"100%\"),\n height: size(height, \"320px\"),\n ...style,\n }}\n >\n <div ref={containerRef} style={{ position: \"absolute\", inset: 0 }} />\n {overlay && plot && (\n <div\n className=\"minerva-chart-overlay\"\n style={{\n position: \"absolute\",\n left: plot.x,\n top: plot.y,\n width: plot.width,\n height: plot.height,\n pointerEvents: \"none\",\n }}\n >\n {overlay(plot)}\n </div>\n )}\n {tipHost &&\n tipEvent &&\n renderTooltip &&\n createPortal(renderTooltip(tipEvent), tipHost)}\n </div>\n );\n}\n\n/**\n * GPU chart (WebGPU, then WebGL2, then Canvas2D) mixing line, area, bar and\n * scatter series; zoomable, keyboard accessible and themed by the Minerva\n * CSS variables.\n */\nexport function Chart(props: ChartProps) {\n const {\n height,\n width,\n className,\n style,\n ref,\n onHover,\n onPointClick,\n onPlotClick,\n onZoom,\n onRendererChange,\n renderTooltip,\n } = props;\n return (\n <ChartBase\n options={engineOptions(props)}\n height={height}\n width={width}\n className={className}\n style={style}\n handleRef={ref}\n onHover={onHover}\n onPointClick={onPointClick}\n onPlotClick={onPlotClick}\n onZoom={onZoom}\n onRendererChange={onRendererChange}\n renderTooltip={renderTooltip}\n />\n );\n}\n"],"mappings":"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"}
@@ -11,7 +11,7 @@ interface Handlers {
11
11
  onDrop?: (event: ChartDragEvent) => void;
12
12
  }
13
13
  /** Engine options of the common props */
14
- export declare const engineOptions: (props: Pick<ChartCommonProps, "xAxis" | "yAxis" | "renderer" | "legend" | "tooltip" | "crosshair" | "annotations" | "interaction" | "padding" | "palette" | "ariaLabel"> & Pick<ChartOptions, "series">) => ChartOptions;
14
+ export declare const engineOptions: (props: Pick<ChartCommonProps, "xAxis" | "yAxis" | "renderer" | "legend" | "tooltip" | "crosshair" | "annotations" | "interaction" | "padding" | "palette" | "ariaLabel"> & Pick<ChartOptions, "series" | "stackMode">) => ChartOptions;
15
15
  interface ChartBaseProps extends Handlers {
16
16
  options: ChartOptions;
17
17
  height?: number | string;
@@ -24,6 +24,13 @@ interface ChartBaseProps extends Handlers {
24
24
  /** React content placed over the chart, given the plot area */
25
25
  overlay?: (plot: ChartRect) => ReactNode;
26
26
  }
27
+ /**
28
+ * Whether `b` describes the same chart as `a`: top-level options compared by
29
+ * identity (or one level deep for inline arrays / objects), series compared
30
+ * one by one, each series shallowly (inline `series={[{ name, data }]}`
31
+ * with a stable `data` stays equal). Data is never compared by content.
32
+ */
33
+ export declare const sameOptions: (a: ChartOptions, b: ChartOptions) => boolean;
27
34
  /** Mounts the engine in a sized <div> and forwards option / handler changes */
28
35
  export declare function ChartBase({ options, height, width, className, style, handleRef, renderTooltip, overlay, ...handlers }: ChartBaseProps): import('react').JSX.Element;
29
36
  /**
@@ -11,7 +11,7 @@ interface Handlers {
11
11
  onDrop?: (event: ChartDragEvent) => void;
12
12
  }
13
13
  /** Engine options of the common props */
14
- export declare const engineOptions: (props: Pick<ChartCommonProps, "xAxis" | "yAxis" | "renderer" | "legend" | "tooltip" | "crosshair" | "annotations" | "interaction" | "padding" | "palette" | "ariaLabel"> & Pick<ChartOptions, "series">) => ChartOptions;
14
+ export declare const engineOptions: (props: Pick<ChartCommonProps, "xAxis" | "yAxis" | "renderer" | "legend" | "tooltip" | "crosshair" | "annotations" | "interaction" | "padding" | "palette" | "ariaLabel"> & Pick<ChartOptions, "series" | "stackMode">) => ChartOptions;
15
15
  interface ChartBaseProps extends Handlers {
16
16
  options: ChartOptions;
17
17
  height?: number | string;
@@ -24,6 +24,13 @@ interface ChartBaseProps extends Handlers {
24
24
  /** React content placed over the chart, given the plot area */
25
25
  overlay?: (plot: ChartRect) => ReactNode;
26
26
  }
27
+ /**
28
+ * Whether `b` describes the same chart as `a`: top-level options compared by
29
+ * identity (or one level deep for inline arrays / objects), series compared
30
+ * one by one, each series shallowly (inline `series={[{ name, data }]}`
31
+ * with a stable `data` stays equal). Data is never compared by content.
32
+ */
33
+ export declare const sameOptions: (a: ChartOptions, b: ChartOptions) => boolean;
27
34
  /** Mounts the engine in a sized <div> and forwards option / handler changes */
28
35
  export declare function ChartBase({ options, height, width, className, style, handleRef, renderTooltip, overlay, ...handlers }: ChartBaseProps): import('react').JSX.Element;
29
36
  /**
@@ -16,87 +16,106 @@ var u = (e, t) => e === void 0 ? t : typeof e == "number" ? `${e}px` : e, d = (e
16
16
  interaction: e.interaction,
17
17
  padding: e.padding,
18
18
  palette: e.palette,
19
- ariaLabel: e.ariaLabel
20
- });
21
- function f({ options: d, height: f, width: p, className: m, style: h, handleRef: g, renderTooltip: _, overlay: v, ...y }) {
22
- let b = i(null), x = i(null), S = i(y), C = i(_), [w, T] = a(null), [E, D] = a(null), O = r(() => typeof document > "u" ? null : document.createElement("div"), []), k = r(() => {
23
- if (!_ || !O || d.tooltip === !1) return d;
24
- let e = typeof d.tooltip == "object" ? d.tooltip : {};
19
+ ariaLabel: e.ariaLabel,
20
+ stackMode: e.stackMode
21
+ }), f = (e) => {
22
+ if (typeof e != "object" || !e) return !1;
23
+ let t = Object.getPrototypeOf(e);
24
+ return t === Object.prototype || t === null;
25
+ }, p = (e, t) => {
26
+ let n = Object.keys(e);
27
+ return n.length === Object.keys(t).length && n.every((n) => e[n] === t[n] && Object.prototype.hasOwnProperty.call(t, n));
28
+ }, m = (e, t) => e === t ? !0 : Array.isArray(e) && Array.isArray(t) ? e.length === t.length && e.every((e, n) => e === t[n]) : f(e) && f(t) && p(e, t), h = (e, t) => {
29
+ if (e === t) return !0;
30
+ let n = Object.keys(e);
31
+ return n.length === Object.keys(t).length && n.every((n) => {
32
+ if (!Object.prototype.hasOwnProperty.call(t, n)) return !1;
33
+ if (n !== "series") return m(e[n], t[n]);
34
+ let r = e.series, i = t.series;
35
+ return r === i || r.length === i.length && r.every((e, t) => e === i[t] || p(e, i[t]));
36
+ });
37
+ }, g = (e, t) => !!e && e.x === t.x && e.xLabel === t.xLabel && e.items.length === t.items.length && e.items.every((e, n) => p(e, t.items[n]));
38
+ function _({ options: d, height: f, width: p, className: m, style: _, handleRef: v, renderTooltip: y, overlay: b, ...x }) {
39
+ let S = i(null), C = i(null), w = i(x), T = i(y), E = i(null), [D, O] = a(null), [k, A] = a(null), j = r(() => typeof document > "u" ? null : document.createElement("div"), []), [M, N] = a(d);
40
+ M !== d && !h(M, d) && N(d);
41
+ let P = !!y, F = r(() => {
42
+ if (!P || !j || M.tooltip === !1) return M;
43
+ let e = typeof M.tooltip == "object" ? M.tooltip : {};
25
44
  return {
26
- ...d,
45
+ ...M,
27
46
  tooltip: {
28
47
  ...e,
29
- render: (e) => C.current ? (s(() => T(e)), O) : null
48
+ render: (e) => T.current ? (g(E.current, e) || (E.current = e, s(() => O(e))), j) : null
30
49
  }
31
50
  };
32
51
  }, [
33
- d,
34
- _,
35
- O
36
- ]), A = i(k);
52
+ M,
53
+ P,
54
+ j
55
+ ]), I = i(F);
37
56
  return t(() => {
38
- S.current = y, C.current = _;
57
+ w.current = x, T.current = y;
39
58
  }), t(() => {
40
- let t = b.current;
59
+ let t = S.current;
41
60
  if (!t) return;
42
- let n = e(t, A.current);
43
- x.current = n;
61
+ let n = e(t, I.current);
62
+ C.current = n;
44
63
  let r = [
45
- n.on("hover", (e) => S.current.onHover?.(e)),
46
- n.on("click", (e) => S.current.onPointClick?.(e)),
47
- n.on("plotClick", (e) => S.current.onPlotClick?.(e)),
48
- n.on("zoom", (e) => S.current.onZoom?.(e)),
49
- n.on("renderer", (e) => S.current.onRendererChange?.(e)),
50
- n.on("drag", (e) => S.current.onDrag?.(e)),
51
- n.on("drop", (e) => S.current.onDrop?.(e)),
52
- n.on("layout", (e) => D(e))
64
+ n.on("hover", (e) => w.current.onHover?.(e)),
65
+ n.on("click", (e) => w.current.onPointClick?.(e)),
66
+ n.on("plotClick", (e) => w.current.onPlotClick?.(e)),
67
+ n.on("zoom", (e) => w.current.onZoom?.(e)),
68
+ n.on("renderer", (e) => w.current.onRendererChange?.(e)),
69
+ n.on("drag", (e) => w.current.onDrag?.(e)),
70
+ n.on("drop", (e) => w.current.onDrop?.(e)),
71
+ n.on("layout", (e) => A(e))
53
72
  ];
54
73
  return () => {
55
- r.forEach((e) => e()), n.destroy(), x.current = null;
74
+ r.forEach((e) => e()), n.destroy(), C.current = null;
56
75
  };
57
76
  }, []), t(() => {
58
- A.current !== k && (A.current = k, x.current?.setOptions(k));
59
- }, [k]), n(g, () => ({
60
- resetZoom: () => x.current?.resetZoom(),
61
- getView: () => x.current?.getView() ?? null,
62
- setView: (e) => x.current?.setView(e),
63
- getRenderer: () => x.current?.getRenderer() ?? null,
64
- getInstance: () => x.current
77
+ I.current !== F && (I.current = F, C.current?.setOptions(F));
78
+ }, [F]), n(v, () => ({
79
+ resetZoom: () => C.current?.resetZoom(),
80
+ getView: () => C.current?.getView() ?? null,
81
+ setView: (e) => C.current?.setView(e),
82
+ getRenderer: () => C.current?.getRenderer() ?? null,
83
+ getInstance: () => C.current
65
84
  }), []), /* @__PURE__ */ l("div", {
66
85
  className: m,
67
86
  style: {
68
87
  position: "relative",
69
88
  width: u(p, "100%"),
70
89
  height: u(f, "320px"),
71
- ...h
90
+ ..._
72
91
  },
73
92
  children: [
74
93
  /* @__PURE__ */ c("div", {
75
- ref: b,
94
+ ref: S,
76
95
  style: {
77
96
  position: "absolute",
78
97
  inset: 0
79
98
  }
80
99
  }),
81
- v && E && /* @__PURE__ */ c("div", {
100
+ b && k && /* @__PURE__ */ c("div", {
82
101
  className: "minerva-chart-overlay",
83
102
  style: {
84
103
  position: "absolute",
85
- left: E.x,
86
- top: E.y,
87
- width: E.width,
88
- height: E.height,
104
+ left: k.x,
105
+ top: k.y,
106
+ width: k.width,
107
+ height: k.height,
89
108
  pointerEvents: "none"
90
109
  },
91
- children: v(E)
110
+ children: b(k)
92
111
  }),
93
- O && w && _ && o(_(w), O)
112
+ j && D && y && o(y(D), j)
94
113
  ]
95
114
  });
96
115
  }
97
- function p(e) {
98
- let { height: t, width: n, className: r, style: i, ref: a, onHover: o, onPointClick: s, onPlotClick: l, onZoom: u, onRendererChange: p, renderTooltip: m } = e;
99
- return /* @__PURE__ */ c(f, {
116
+ function v(e) {
117
+ let { height: t, width: n, className: r, style: i, ref: a, onHover: o, onPointClick: s, onPlotClick: l, onZoom: u, onRendererChange: f, renderTooltip: p } = e;
118
+ return /* @__PURE__ */ c(_, {
100
119
  options: d(e),
101
120
  height: t,
102
121
  width: n,
@@ -107,11 +126,11 @@ function p(e) {
107
126
  onPointClick: s,
108
127
  onPlotClick: l,
109
128
  onZoom: u,
110
- onRendererChange: p,
111
- renderTooltip: m
129
+ onRendererChange: f,
130
+ renderTooltip: p
112
131
  });
113
132
  }
114
133
  //#endregion
115
- export { p as Chart, f as ChartBase, d as engineOptions };
134
+ export { v as Chart, _ as ChartBase, d as engineOptions, h as sameOptions };
116
135
 
117
136
  //# sourceMappingURL=Chart.js.map