@rowsncolumns/charts 27.0.30

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 (281) hide show
  1. package/LICENSE.md +100 -0
  2. package/Readme.md +81 -0
  3. package/dist/cjs/atoms/editing-chart.atom.d.ts +13 -0
  4. package/dist/cjs/atoms/editing-chart.atom.d.ts.map +1 -0
  5. package/dist/cjs/atoms/editing-chart.atom.js +26 -0
  6. package/dist/cjs/basic-chart/basic-chart.d.ts +5 -0
  7. package/dist/cjs/basic-chart/basic-chart.d.ts.map +1 -0
  8. package/dist/cjs/basic-chart/basic-chart.js +2250 -0
  9. package/dist/cjs/basic-chart/helpers.d.ts +12 -0
  10. package/dist/cjs/basic-chart/helpers.d.ts.map +1 -0
  11. package/dist/cjs/basic-chart/helpers.js +105 -0
  12. package/dist/cjs/basic-chart/index.d.ts +5 -0
  13. package/dist/cjs/basic-chart/index.d.ts.map +1 -0
  14. package/dist/cjs/basic-chart/index.js +12 -0
  15. package/dist/cjs/components/dialogs/chart-editor-dialog.d.ts +5 -0
  16. package/dist/cjs/components/dialogs/chart-editor-dialog.d.ts.map +1 -0
  17. package/dist/cjs/components/dialogs/chart-editor-dialog.js +25 -0
  18. package/dist/cjs/components/editors/chart-editor.d.ts +10 -0
  19. package/dist/cjs/components/editors/chart-editor.d.ts.map +1 -0
  20. package/dist/cjs/components/editors/chart-editor.js +631 -0
  21. package/dist/cjs/components/editors/chart-range-input.d.ts +17 -0
  22. package/dist/cjs/components/editors/chart-range-input.d.ts.map +1 -0
  23. package/dist/cjs/components/editors/chart-range-input.js +16 -0
  24. package/dist/cjs/config.d.ts +19 -0
  25. package/dist/cjs/config.d.ts.map +1 -0
  26. package/dist/cjs/config.js +196 -0
  27. package/dist/cjs/hooks/use-chart-editor.d.ts +8 -0
  28. package/dist/cjs/hooks/use-chart-editor.d.ts.map +1 -0
  29. package/dist/cjs/hooks/use-chart-editor.js +29 -0
  30. package/dist/cjs/hooks/use-charts.d.ts +35 -0
  31. package/dist/cjs/hooks/use-charts.d.ts.map +1 -0
  32. package/dist/cjs/hooks/use-charts.js +67 -0
  33. package/dist/cjs/hooks/use-on-create-chart.d.ts +13 -0
  34. package/dist/cjs/hooks/use-on-create-chart.d.ts.map +1 -0
  35. package/dist/cjs/hooks/use-on-create-chart.js +24 -0
  36. package/dist/cjs/hooks/use-on-delete-chart.d.ts +8 -0
  37. package/dist/cjs/hooks/use-on-delete-chart.d.ts.map +1 -0
  38. package/dist/cjs/hooks/use-on-delete-chart.js +19 -0
  39. package/dist/cjs/hooks/use-on-move-chart.d.ts +8 -0
  40. package/dist/cjs/hooks/use-on-move-chart.d.ts.map +1 -0
  41. package/dist/cjs/hooks/use-on-move-chart.js +15 -0
  42. package/dist/cjs/hooks/use-on-resize-chart.d.ts +8 -0
  43. package/dist/cjs/hooks/use-on-resize-chart.d.ts.map +1 -0
  44. package/dist/cjs/hooks/use-on-resize-chart.js +15 -0
  45. package/dist/cjs/hooks/use-on-update-chart.d.ts +9 -0
  46. package/dist/cjs/hooks/use-on-update-chart.d.ts.map +1 -0
  47. package/dist/cjs/hooks/use-on-update-chart.js +15 -0
  48. package/dist/cjs/index.d.ts +11 -0
  49. package/dist/cjs/index.d.ts.map +1 -0
  50. package/dist/cjs/index.js +18 -0
  51. package/dist/cjs/interface/create-chart.d.ts +9 -0
  52. package/dist/cjs/interface/create-chart.d.ts.map +1 -0
  53. package/dist/cjs/interface/create-chart.js +110 -0
  54. package/dist/cjs/interface/delete-chart.d.ts +4 -0
  55. package/dist/cjs/interface/delete-chart.d.ts.map +1 -0
  56. package/dist/cjs/interface/delete-chart.js +26 -0
  57. package/dist/cjs/interface/move-chart.d.ts +5 -0
  58. package/dist/cjs/interface/move-chart.d.ts.map +1 -0
  59. package/dist/cjs/interface/move-chart.js +28 -0
  60. package/dist/cjs/interface/resize-chart.d.ts +5 -0
  61. package/dist/cjs/interface/resize-chart.d.ts.map +1 -0
  62. package/dist/cjs/interface/resize-chart.js +30 -0
  63. package/dist/cjs/interface/update-chart.d.ts +4 -0
  64. package/dist/cjs/interface/update-chart.d.ts.map +1 -0
  65. package/dist/cjs/interface/update-chart.js +29 -0
  66. package/dist/cjs/plotly/basic-chart/basic-chart.d.ts +5 -0
  67. package/dist/cjs/plotly/basic-chart/basic-chart.d.ts.map +1 -0
  68. package/dist/cjs/plotly/basic-chart/basic-chart.js +1586 -0
  69. package/dist/cjs/plotly/basic-chart/helpers.d.ts +20 -0
  70. package/dist/cjs/plotly/basic-chart/helpers.d.ts.map +1 -0
  71. package/dist/cjs/plotly/basic-chart/helpers.js +114 -0
  72. package/dist/cjs/plotly/basic-chart/index.d.ts +5 -0
  73. package/dist/cjs/plotly/basic-chart/index.d.ts.map +1 -0
  74. package/dist/cjs/plotly/basic-chart/index.js +12 -0
  75. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  76. package/dist/cjs/types.d.ts +27 -0
  77. package/dist/cjs/types.d.ts.map +1 -0
  78. package/dist/cjs/types.js +2 -0
  79. package/dist/cjs/utils/aggregation.d.ts +6 -0
  80. package/dist/cjs/utils/aggregation.d.ts.map +1 -0
  81. package/dist/cjs/utils/aggregation.js +127 -0
  82. package/dist/cjs/utils/bar-layout.d.ts +57 -0
  83. package/dist/cjs/utils/bar-layout.d.ts.map +1 -0
  84. package/dist/cjs/utils/bar-layout.js +81 -0
  85. package/dist/cjs/utils/boxplot.d.ts +62 -0
  86. package/dist/cjs/utils/boxplot.d.ts.map +1 -0
  87. package/dist/cjs/utils/boxplot.js +105 -0
  88. package/dist/cjs/utils/bubble.d.ts +52 -0
  89. package/dist/cjs/utils/bubble.d.ts.map +1 -0
  90. package/dist/cjs/utils/bubble.js +139 -0
  91. package/dist/cjs/utils/chart-spec-utils.d.ts +67 -0
  92. package/dist/cjs/utils/chart-spec-utils.d.ts.map +1 -0
  93. package/dist/cjs/utils/chart-spec-utils.js +355 -0
  94. package/dist/cjs/utils/echarts-gl-loader.d.ts +11 -0
  95. package/dist/cjs/utils/echarts-gl-loader.d.ts.map +1 -0
  96. package/dist/cjs/utils/echarts-gl-loader.js +59 -0
  97. package/dist/cjs/utils/error-bars.d.ts +58 -0
  98. package/dist/cjs/utils/error-bars.d.ts.map +1 -0
  99. package/dist/cjs/utils/error-bars.js +154 -0
  100. package/dist/cjs/utils/gradient.d.ts +52 -0
  101. package/dist/cjs/utils/gradient.d.ts.map +1 -0
  102. package/dist/cjs/utils/gradient.js +93 -0
  103. package/dist/cjs/utils/hierarchy.d.ts +28 -0
  104. package/dist/cjs/utils/hierarchy.d.ts.map +1 -0
  105. package/dist/cjs/utils/hierarchy.js +186 -0
  106. package/dist/cjs/utils/histogram.d.ts +46 -0
  107. package/dist/cjs/utils/histogram.d.ts.map +1 -0
  108. package/dist/cjs/utils/histogram.js +125 -0
  109. package/dist/cjs/utils/of-pie.d.ts +101 -0
  110. package/dist/cjs/utils/of-pie.d.ts.map +1 -0
  111. package/dist/cjs/utils/of-pie.js +159 -0
  112. package/dist/cjs/utils/overrides.d.ts +12 -0
  113. package/dist/cjs/utils/overrides.d.ts.map +1 -0
  114. package/dist/cjs/utils/overrides.js +171 -0
  115. package/dist/cjs/utils/radar.d.ts +37 -0
  116. package/dist/cjs/utils/radar.d.ts.map +1 -0
  117. package/dist/cjs/utils/radar.js +70 -0
  118. package/dist/cjs/utils/region-map-loader.d.ts +22 -0
  119. package/dist/cjs/utils/region-map-loader.d.ts.map +1 -0
  120. package/dist/cjs/utils/region-map-loader.js +174 -0
  121. package/dist/cjs/utils/region-map.d.ts +100 -0
  122. package/dist/cjs/utils/region-map.d.ts.map +1 -0
  123. package/dist/cjs/utils/region-map.js +327 -0
  124. package/dist/cjs/utils/stock.d.ts +64 -0
  125. package/dist/cjs/utils/stock.d.ts.map +1 -0
  126. package/dist/cjs/utils/stock.js +153 -0
  127. package/dist/cjs/utils/three-d.d.ts +96 -0
  128. package/dist/cjs/utils/three-d.d.ts.map +1 -0
  129. package/dist/cjs/utils/three-d.js +191 -0
  130. package/dist/cjs/utils/trendline.d.ts +41 -0
  131. package/dist/cjs/utils/trendline.d.ts.map +1 -0
  132. package/dist/cjs/utils/trendline.js +303 -0
  133. package/dist/cjs/utils/waterfall.d.ts +24 -0
  134. package/dist/cjs/utils/waterfall.d.ts.map +1 -0
  135. package/dist/cjs/utils/waterfall.js +61 -0
  136. package/dist/cjs/utils/webgl.d.ts +12 -0
  137. package/dist/cjs/utils/webgl.d.ts.map +1 -0
  138. package/dist/cjs/utils/webgl.js +36 -0
  139. package/dist/cjs/vitest.config.d.ts +3 -0
  140. package/dist/cjs/vitest.config.d.ts.map +1 -0
  141. package/dist/cjs/vitest.config.js +9 -0
  142. package/dist/esm/atoms/editing-chart.atom.d.ts +13 -0
  143. package/dist/esm/atoms/editing-chart.atom.d.ts.map +1 -0
  144. package/dist/esm/atoms/editing-chart.atom.js +12 -0
  145. package/dist/esm/basic-chart/basic-chart.d.ts +5 -0
  146. package/dist/esm/basic-chart/basic-chart.d.ts.map +1 -0
  147. package/dist/esm/basic-chart/basic-chart.js +2343 -0
  148. package/dist/esm/basic-chart/helpers.d.ts +12 -0
  149. package/dist/esm/basic-chart/helpers.d.ts.map +1 -0
  150. package/dist/esm/basic-chart/helpers.js +98 -0
  151. package/dist/esm/basic-chart/index.d.ts +5 -0
  152. package/dist/esm/basic-chart/index.d.ts.map +1 -0
  153. package/dist/esm/basic-chart/index.js +7 -0
  154. package/dist/esm/components/dialogs/chart-editor-dialog.d.ts +5 -0
  155. package/dist/esm/components/dialogs/chart-editor-dialog.d.ts.map +1 -0
  156. package/dist/esm/components/dialogs/chart-editor-dialog.js +19 -0
  157. package/dist/esm/components/editors/chart-editor.d.ts +10 -0
  158. package/dist/esm/components/editors/chart-editor.d.ts.map +1 -0
  159. package/dist/esm/components/editors/chart-editor.js +550 -0
  160. package/dist/esm/components/editors/chart-range-input.d.ts +17 -0
  161. package/dist/esm/components/editors/chart-range-input.d.ts.map +1 -0
  162. package/dist/esm/components/editors/chart-range-input.js +10 -0
  163. package/dist/esm/config.d.ts +19 -0
  164. package/dist/esm/config.d.ts.map +1 -0
  165. package/dist/esm/config.js +161 -0
  166. package/dist/esm/hooks/use-chart-editor.d.ts +8 -0
  167. package/dist/esm/hooks/use-chart-editor.d.ts.map +1 -0
  168. package/dist/esm/hooks/use-chart-editor.js +32 -0
  169. package/dist/esm/hooks/use-charts.d.ts +35 -0
  170. package/dist/esm/hooks/use-charts.d.ts.map +1 -0
  171. package/dist/esm/hooks/use-charts.js +62 -0
  172. package/dist/esm/hooks/use-on-create-chart.d.ts +13 -0
  173. package/dist/esm/hooks/use-on-create-chart.d.ts.map +1 -0
  174. package/dist/esm/hooks/use-on-create-chart.js +19 -0
  175. package/dist/esm/hooks/use-on-delete-chart.d.ts +8 -0
  176. package/dist/esm/hooks/use-on-delete-chart.d.ts.map +1 -0
  177. package/dist/esm/hooks/use-on-delete-chart.js +14 -0
  178. package/dist/esm/hooks/use-on-move-chart.d.ts +8 -0
  179. package/dist/esm/hooks/use-on-move-chart.d.ts.map +1 -0
  180. package/dist/esm/hooks/use-on-move-chart.js +10 -0
  181. package/dist/esm/hooks/use-on-resize-chart.d.ts +8 -0
  182. package/dist/esm/hooks/use-on-resize-chart.d.ts.map +1 -0
  183. package/dist/esm/hooks/use-on-resize-chart.js +10 -0
  184. package/dist/esm/hooks/use-on-update-chart.d.ts +9 -0
  185. package/dist/esm/hooks/use-on-update-chart.d.ts.map +1 -0
  186. package/dist/esm/hooks/use-on-update-chart.js +10 -0
  187. package/dist/esm/index.d.ts +11 -0
  188. package/dist/esm/index.d.ts.map +1 -0
  189. package/dist/esm/index.js +13 -0
  190. package/dist/esm/interface/create-chart.d.ts +9 -0
  191. package/dist/esm/interface/create-chart.d.ts.map +1 -0
  192. package/dist/esm/interface/create-chart.js +126 -0
  193. package/dist/esm/interface/delete-chart.d.ts +4 -0
  194. package/dist/esm/interface/delete-chart.d.ts.map +1 -0
  195. package/dist/esm/interface/delete-chart.js +20 -0
  196. package/dist/esm/interface/move-chart.d.ts +5 -0
  197. package/dist/esm/interface/move-chart.d.ts.map +1 -0
  198. package/dist/esm/interface/move-chart.js +22 -0
  199. package/dist/esm/interface/resize-chart.d.ts +5 -0
  200. package/dist/esm/interface/resize-chart.d.ts.map +1 -0
  201. package/dist/esm/interface/resize-chart.js +24 -0
  202. package/dist/esm/interface/update-chart.d.ts +4 -0
  203. package/dist/esm/interface/update-chart.d.ts.map +1 -0
  204. package/dist/esm/interface/update-chart.js +26 -0
  205. package/dist/esm/plotly/basic-chart/basic-chart.d.ts +5 -0
  206. package/dist/esm/plotly/basic-chart/basic-chart.d.ts.map +1 -0
  207. package/dist/esm/plotly/basic-chart/basic-chart.js +1682 -0
  208. package/dist/esm/plotly/basic-chart/helpers.d.ts +20 -0
  209. package/dist/esm/plotly/basic-chart/helpers.d.ts.map +1 -0
  210. package/dist/esm/plotly/basic-chart/helpers.js +107 -0
  211. package/dist/esm/plotly/basic-chart/index.d.ts +5 -0
  212. package/dist/esm/plotly/basic-chart/index.d.ts.map +1 -0
  213. package/dist/esm/plotly/basic-chart/index.js +7 -0
  214. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  215. package/dist/esm/types.d.ts +27 -0
  216. package/dist/esm/types.d.ts.map +1 -0
  217. package/dist/esm/types.js +1 -0
  218. package/dist/esm/utils/aggregation.d.ts +6 -0
  219. package/dist/esm/utils/aggregation.d.ts.map +1 -0
  220. package/dist/esm/utils/aggregation.js +96 -0
  221. package/dist/esm/utils/bar-layout.d.ts +57 -0
  222. package/dist/esm/utils/bar-layout.d.ts.map +1 -0
  223. package/dist/esm/utils/bar-layout.js +70 -0
  224. package/dist/esm/utils/boxplot.d.ts +62 -0
  225. package/dist/esm/utils/boxplot.d.ts.map +1 -0
  226. package/dist/esm/utils/boxplot.js +91 -0
  227. package/dist/esm/utils/bubble.d.ts +52 -0
  228. package/dist/esm/utils/bubble.d.ts.map +1 -0
  229. package/dist/esm/utils/bubble.js +122 -0
  230. package/dist/esm/utils/chart-spec-utils.d.ts +67 -0
  231. package/dist/esm/utils/chart-spec-utils.d.ts.map +1 -0
  232. package/dist/esm/utils/chart-spec-utils.js +270 -0
  233. package/dist/esm/utils/echarts-gl-loader.d.ts +11 -0
  234. package/dist/esm/utils/echarts-gl-loader.d.ts.map +1 -0
  235. package/dist/esm/utils/echarts-gl-loader.js +51 -0
  236. package/dist/esm/utils/error-bars.d.ts +58 -0
  237. package/dist/esm/utils/error-bars.d.ts.map +1 -0
  238. package/dist/esm/utils/error-bars.js +134 -0
  239. package/dist/esm/utils/gradient.d.ts +52 -0
  240. package/dist/esm/utils/gradient.d.ts.map +1 -0
  241. package/dist/esm/utils/gradient.js +84 -0
  242. package/dist/esm/utils/hierarchy.d.ts +28 -0
  243. package/dist/esm/utils/hierarchy.d.ts.map +1 -0
  244. package/dist/esm/utils/hierarchy.js +150 -0
  245. package/dist/esm/utils/histogram.d.ts +46 -0
  246. package/dist/esm/utils/histogram.d.ts.map +1 -0
  247. package/dist/esm/utils/histogram.js +95 -0
  248. package/dist/esm/utils/of-pie.d.ts +101 -0
  249. package/dist/esm/utils/of-pie.d.ts.map +1 -0
  250. package/dist/esm/utils/of-pie.js +141 -0
  251. package/dist/esm/utils/overrides.d.ts +12 -0
  252. package/dist/esm/utils/overrides.d.ts.map +1 -0
  253. package/dist/esm/utils/overrides.js +159 -0
  254. package/dist/esm/utils/radar.d.ts +37 -0
  255. package/dist/esm/utils/radar.d.ts.map +1 -0
  256. package/dist/esm/utils/radar.js +49 -0
  257. package/dist/esm/utils/region-map-loader.d.ts +22 -0
  258. package/dist/esm/utils/region-map-loader.d.ts.map +1 -0
  259. package/dist/esm/utils/region-map-loader.js +141 -0
  260. package/dist/esm/utils/region-map.d.ts +100 -0
  261. package/dist/esm/utils/region-map.d.ts.map +1 -0
  262. package/dist/esm/utils/region-map.js +266 -0
  263. package/dist/esm/utils/stock.d.ts +64 -0
  264. package/dist/esm/utils/stock.d.ts.map +1 -0
  265. package/dist/esm/utils/stock.js +123 -0
  266. package/dist/esm/utils/three-d.d.ts +96 -0
  267. package/dist/esm/utils/three-d.d.ts.map +1 -0
  268. package/dist/esm/utils/three-d.js +162 -0
  269. package/dist/esm/utils/trendline.d.ts +41 -0
  270. package/dist/esm/utils/trendline.d.ts.map +1 -0
  271. package/dist/esm/utils/trendline.js +257 -0
  272. package/dist/esm/utils/waterfall.d.ts +24 -0
  273. package/dist/esm/utils/waterfall.d.ts.map +1 -0
  274. package/dist/esm/utils/waterfall.js +55 -0
  275. package/dist/esm/utils/webgl.d.ts +12 -0
  276. package/dist/esm/utils/webgl.d.ts.map +1 -0
  277. package/dist/esm/utils/webgl.js +30 -0
  278. package/dist/esm/vitest.config.d.ts +3 -0
  279. package/dist/esm/vitest.config.d.ts.map +1 -0
  280. package/dist/esm/vitest.config.js +7 -0
  281. package/package.json +96 -0
@@ -0,0 +1,52 @@
1
+ export declare const toLabelString: (value: unknown) => string;
2
+ export declare const toNumericValue: (value: unknown) => number | null;
3
+ export declare const createBubbleSizeScale: (values: number[]) => (value: number) => number;
4
+ export type BubbleSeriesInput = {
5
+ name?: string | null;
6
+ values: (string | number | boolean | null | undefined)[];
7
+ /**
8
+ * Per-series X values. Excel's scatter charts always carry per-series
9
+ * `xVal` (each series has its own x/y pair). Excel's bubble charts
10
+ * typically share an X axis but the OOXML format allows per-series.
11
+ * When omitted, the shared `xValues` arg on `PrepareBubbleSeriesArgs`
12
+ * is used — preserves the old shared-X behaviour for fixtures that
13
+ * pass a single domain.
14
+ */
15
+ xValues?: (string | number | boolean | null | undefined)[];
16
+ /**
17
+ * Per-series bubble sizes. Bubble charts may carry one `bubbleSize`
18
+ * per series; falls back to the shared `sizeValues` when omitted.
19
+ */
20
+ sizeValues?: (string | number | boolean | null | undefined)[];
21
+ };
22
+ export type BubbleSeriesPoint = {
23
+ value: [number, number, number];
24
+ name: string;
25
+ xLabel?: string;
26
+ };
27
+ export type PreparedBubbleSeries = {
28
+ name: string;
29
+ points: BubbleSeriesPoint[];
30
+ };
31
+ export type PrepareBubbleSeriesArgs = {
32
+ /**
33
+ * Shared X values across all series. Used as the fallback when a
34
+ * series doesn't carry its own `xValues`. For pure-scatter charts
35
+ * (per-series xVal) this is typically `[]` and each series provides
36
+ * its own.
37
+ */
38
+ xValues: (string | number | boolean | null | undefined)[];
39
+ labelValues: (string | number | boolean | null | undefined)[];
40
+ /**
41
+ * Shared size values. Same fallback semantics as `xValues`.
42
+ */
43
+ sizeValues: (string | number | boolean | null | undefined)[];
44
+ series: BubbleSeriesInput[];
45
+ };
46
+ export type BubbleSeriesResult = {
47
+ categories: string[];
48
+ series: PreparedBubbleSeries[];
49
+ sizeValues: number[];
50
+ };
51
+ export declare const prepareBubbleSeriesData: ({ xValues, labelValues, sizeValues, series, }: PrepareBubbleSeriesArgs) => BubbleSeriesResult;
52
+ //# sourceMappingURL=bubble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bubble.d.ts","sourceRoot":"","sources":["../../../utils/bubble.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,MACU,CAAC;AAE1D,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,IAYxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,EAAE,aAQrC,MAAM,WAOtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IACzD;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IAC3D;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;;OAKG;IACH,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IAC1D,WAAW,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IAC9D;;OAEG;IACH,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IAC7D,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAwCF,eAAO,MAAM,uBAAuB,GAAI,+CAKrC,uBAAuB,KAAG,kBAsF5B,CAAC"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prepareBubbleSeriesData = exports.createBubbleSizeScale = exports.toNumericValue = exports.toLabelString = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var toLabelString = function (value) {
6
+ return value === null || value === undefined ? "" : "".concat(value);
7
+ };
8
+ exports.toLabelString = toLabelString;
9
+ var toNumericValue = function (value) {
10
+ if (typeof value === "number" && Number.isFinite(value)) {
11
+ return value;
12
+ }
13
+ if (typeof value === "string") {
14
+ var parsed = Number(value);
15
+ return Number.isFinite(parsed) ? parsed : null;
16
+ }
17
+ if (typeof value === "boolean") {
18
+ return value ? 1 : 0;
19
+ }
20
+ return null;
21
+ };
22
+ exports.toNumericValue = toNumericValue;
23
+ var createBubbleSizeScale = function (values) {
24
+ var valid = values.filter(function (value) { return Number.isFinite(value); });
25
+ if (valid.length === 0) {
26
+ return function () { return 24; };
27
+ }
28
+ var min = Math.min.apply(Math, tslib_1.__spreadArray([], tslib_1.__read(valid), false));
29
+ var max = Math.max.apply(Math, tslib_1.__spreadArray([], tslib_1.__read(valid), false));
30
+ var range = max - min || 1;
31
+ return function (value) {
32
+ if (!Number.isFinite(value)) {
33
+ return 24;
34
+ }
35
+ var ratio = (value - min) / range;
36
+ return 12 + ratio * 42;
37
+ };
38
+ };
39
+ exports.createBubbleSizeScale = createBubbleSizeScale;
40
+ /**
41
+ * Build the X-coordinate index for a series. Numeric values map to
42
+ * their own coordinate; string values become categorical (deduped into
43
+ * the shared `categories` array with stable indices so multiple series
44
+ * agree on which integer maps to which label).
45
+ */
46
+ var buildXCoordinates = function (xValues, categories, categoryIndex) {
47
+ var xCoordinates = [];
48
+ xValues.forEach(function (value, idx) {
49
+ var _a;
50
+ var numeric = (0, exports.toNumericValue)(value);
51
+ if (numeric !== null) {
52
+ xCoordinates[idx] = { coordinate: numeric };
53
+ return;
54
+ }
55
+ var label = (0, exports.toLabelString)(value);
56
+ if (!label) {
57
+ xCoordinates[idx] = { coordinate: idx };
58
+ return;
59
+ }
60
+ if (!categoryIndex.has(label)) {
61
+ categoryIndex.set(label, categories.length);
62
+ categories.push(label);
63
+ }
64
+ xCoordinates[idx] = {
65
+ coordinate: (_a = categoryIndex.get(label)) !== null && _a !== void 0 ? _a : idx,
66
+ label: label,
67
+ };
68
+ });
69
+ return xCoordinates;
70
+ };
71
+ var prepareBubbleSeriesData = function (_a) {
72
+ var xValues = _a.xValues, labelValues = _a.labelValues, sizeValues = _a.sizeValues, series = _a.series;
73
+ var normalizedLabels = labelValues.map(exports.toLabelString);
74
+ var sharedNormalizedSizeValues = sizeValues.map(function (value) {
75
+ return value === undefined || value === null ? null : (0, exports.toNumericValue)(value);
76
+ });
77
+ var categories = [];
78
+ var categoryIndex = new Map();
79
+ // Shared X coordinates — used when a series doesn't carry its own
80
+ // `xValues`. Categories built here populate the shared category
81
+ // table so per-series string-X series stay in sync.
82
+ var sharedXCoordinates = buildXCoordinates(xValues, categories, categoryIndex);
83
+ var allSizeValues = [];
84
+ var preparedSeries = series.map(function (serie, seriesIndex) {
85
+ var _a, _b, _c;
86
+ // Per-series X values (scatter always; bubble may) override the
87
+ // shared X for this series only. Categories are still pooled.
88
+ var seriesXCoordinates = serie.xValues
89
+ ? buildXCoordinates(serie.xValues, categories, categoryIndex)
90
+ : sharedXCoordinates;
91
+ var seriesXValues = (_a = serie.xValues) !== null && _a !== void 0 ? _a : xValues;
92
+ // Per-series sizes — bubble charts can carry one bubbleSize per
93
+ // series. Falls back to the shared array.
94
+ var seriesNormalizedSizeValues = serie.sizeValues
95
+ ? serie.sizeValues.map(function (value) {
96
+ return value === undefined || value === null
97
+ ? null
98
+ : (0, exports.toNumericValue)(value);
99
+ })
100
+ : sharedNormalizedSizeValues;
101
+ var points = [];
102
+ var yValues = serie.values.map(function (value) { return (0, exports.toNumericValue)(value); });
103
+ var pointCount = Math.max(yValues.length, seriesXCoordinates.length);
104
+ for (var i = 0; i < pointCount; i++) {
105
+ var y = yValues[i];
106
+ var coordinate = seriesXCoordinates[i];
107
+ if (y === null || y === undefined || !coordinate) {
108
+ continue;
109
+ }
110
+ var sizeSource = seriesNormalizedSizeValues[i];
111
+ var resolvedSize = typeof sizeSource === "number" && Number.isFinite(sizeSource)
112
+ ? sizeSource
113
+ : y;
114
+ var sizeValue = typeof resolvedSize === "number" && Number.isFinite(resolvedSize)
115
+ ? resolvedSize
116
+ : 0;
117
+ allSizeValues.push(sizeValue);
118
+ var label = (_b = normalizedLabels[i]) !== null && _b !== void 0 ? _b : "";
119
+ var coordinateLabel = categories.length > 0
120
+ ? (_c = coordinate.label) !== null && _c !== void 0 ? _c : (0, exports.toLabelString)(seriesXValues[i])
121
+ : undefined;
122
+ points.push({
123
+ value: [coordinate.coordinate, y, sizeValue],
124
+ name: label,
125
+ xLabel: coordinateLabel,
126
+ });
127
+ }
128
+ var name = serie.name && serie.name.trim()
129
+ ? serie.name
130
+ : "Series ".concat(seriesIndex + 1);
131
+ return { name: name, points: points };
132
+ });
133
+ return {
134
+ categories: categories,
135
+ series: preparedSeries,
136
+ sizeValues: allSizeValues,
137
+ };
138
+ };
139
+ exports.prepareBubbleSeriesData = prepareBubbleSeriesData;
@@ -0,0 +1,67 @@
1
+ import type { BasicChartSpec, ChartData, EmbeddedChart, SheetRange, TreemapChart } from "@rowsncolumns/spreadsheet";
2
+ type ChartType = EmbeddedChart["spec"]["chartType"];
3
+ type ChartCategory = "basic" | "bubble" | "hierarchy";
4
+ type ChartSpec = EmbeddedChart["spec"];
5
+ export declare const BASIC_CHART_TYPES: Set<"bar" | "column" | "line" | "pie" | "area" | "doughnut" | "radar" | "stock" | "histogram" | "boxplot" | "waterfall" | "funnel" | "combo" | "regionMap" | "treemap" | "sunburst" | "bubble" | "scatter">;
6
+ export declare const BUBBLE_CHART_TYPES: Set<"bar" | "column" | "line" | "pie" | "area" | "doughnut" | "radar" | "stock" | "histogram" | "boxplot" | "waterfall" | "funnel" | "combo" | "regionMap" | "treemap" | "sunburst" | "bubble" | "scatter">;
7
+ export declare const HIERARCHY_CHART_TYPES: Set<"bar" | "column" | "line" | "pie" | "area" | "doughnut" | "radar" | "stock" | "histogram" | "boxplot" | "waterfall" | "funnel" | "combo" | "regionMap" | "treemap" | "sunburst" | "bubble" | "scatter">;
8
+ /**
9
+ * Returns the category of a chart type.
10
+ */
11
+ export declare const getChartCategory: (chartType: ChartType) => ChartCategory;
12
+ /**
13
+ * Type guards for chart specs
14
+ */
15
+ export declare const isBasicChartSpec: (spec: ChartSpec) => spec is ChartSpec & BasicChartSpec;
16
+ export type BubbleChartEditorSpec = {
17
+ chartType: "bubble" | "scatter";
18
+ domains: ChartData[];
19
+ series: ChartData[];
20
+ bubbleLabels?: ChartData[];
21
+ bubbleSizes?: ChartData[];
22
+ useFirstRowAsHeaders?: boolean;
23
+ /** Scatter only — line/marker mix (mirrors OOXML `<c:scatterStyle>`). */
24
+ scatterStyle?: "line" | "marker" | "lineMarker" | "smoothMarker" | "smooth" | "none" | null;
25
+ };
26
+ export declare const isBubbleChartSpec: (spec: ChartSpec) => spec is ChartSpec & BubbleChartEditorSpec;
27
+ export type HierarchyChartSpec = TreemapChart & {
28
+ useFirstRowAsHeaders?: boolean;
29
+ };
30
+ export declare const isHierarchyChartSpec: (spec: ChartSpec) => spec is ChartSpec & HierarchyChartSpec;
31
+ /**
32
+ * Returns the default spec for a given chart type.
33
+ */
34
+ export declare const getDefaultChartTypeSpec: (chartType: ChartType) => Partial<ChartSpec>;
35
+ /**
36
+ * Returns the properties that should be removed when transitioning
37
+ * from one chart type to another.
38
+ */
39
+ export declare const getPropertiesToRemove: (fromType: ChartType, toType: ChartType) => string[];
40
+ /**
41
+ * Checks if chart data array is empty or contains only placeholder entries.
42
+ */
43
+ export declare const isPlaceholderChartData: (data?: ChartData[]) => boolean;
44
+ /**
45
+ * Merges chart data arrays, preserving current data if incoming is placeholder.
46
+ */
47
+ export declare const mergeChartDataArray: (current?: ChartData[], incoming?: ChartData[]) => ChartData[];
48
+ /**
49
+ * Merges chart specs, handling chart type transitions by clearing
50
+ * type-specific properties when the chart type changes.
51
+ * Also handles special merging for chart data arrays.
52
+ */
53
+ export declare const mergeChartSpec: (existingSpec: ChartSpec, incomingSpec: Partial<ChartSpec>) => ChartSpec;
54
+ /**
55
+ * Extracts all SheetRange objects from a ChartSpec.
56
+ * Useful for subscribing to data changes across all chart data sources.
57
+ */
58
+ export declare const getChartDataRanges: (spec: ChartSpec) => SheetRange[];
59
+ /**
60
+ * Coerce an `onRequestCalculate` result into a chart label. Formula
61
+ * errors (#NAME?, #REF!, …) resolve as FormulaError values, and array
62
+ * previews aren't printable — both blank the label instead of
63
+ * rendering an error object in the legend.
64
+ */
65
+ export declare const coerceCalculatedLabel: (result: unknown) => string;
66
+ export {};
67
+ //# sourceMappingURL=chart-spec-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-spec-utils.d.ts","sourceRoot":"","sources":["../../../utils/chart-spec-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,2BAA2B,CAAC;AAEnC,KAAK,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;AACpD,KAAK,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AACtD,KAAK,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAEvC,eAAO,MAAM,iBAAiB,6MAe5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,6MAA4C,CAAC;AAE5E,eAAO,MAAM,qBAAqB,6MAGhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,SAAS,KAAG,aAKvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,cAAuD,CAAC;AAE/E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yEAAyE;IACzE,YAAY,CAAC,EACT,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,cAAc,GACd,QAAQ,GACR,MAAM,GACN,IAAI,CAAC;CACV,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,qBACiB,CAAC;AAEzC,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,kBACoB,CAAC;AAwC5C;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,WAAW,SAAS,KACnB,OAAO,CAAC,SAAS,CAEnB,CAAC;AA2DF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,SAAS,EACnB,QAAQ,SAAS,KAChB,MAAM,EAoBR,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,SAAS,EAAE,KAAG,OAM3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,SAAS,EAAE,EACrB,WAAW,SAAS,EAAE,KACrB,SAAS,EAKX,CAAC;AA+BF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,cAAc,SAAS,EACvB,cAAc,OAAO,CAAC,SAAS,CAAC,KAC/B,SAmDF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,SAAS,KAAG,UAAU,EAsB9D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,OAAO,KAAG,MAQvD,CAAC"}
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.coerceCalculatedLabel = exports.getChartDataRanges = exports.mergeChartSpec = exports.mergeChartDataArray = exports.isPlaceholderChartData = exports.getPropertiesToRemove = exports.getDefaultChartTypeSpec = exports.isHierarchyChartSpec = exports.isBubbleChartSpec = exports.isBasicChartSpec = exports.getChartCategory = exports.HIERARCHY_CHART_TYPES = exports.BUBBLE_CHART_TYPES = exports.BASIC_CHART_TYPES = void 0;
4
+ var tslib_1 = require("tslib");
5
+ exports.BASIC_CHART_TYPES = new Set([
6
+ "bar",
7
+ "column",
8
+ "line",
9
+ "pie",
10
+ "area",
11
+ "doughnut",
12
+ "radar",
13
+ "stock",
14
+ "histogram",
15
+ "boxplot",
16
+ "waterfall",
17
+ "funnel",
18
+ "combo",
19
+ "regionMap",
20
+ ]);
21
+ exports.BUBBLE_CHART_TYPES = new Set(["bubble", "scatter"]);
22
+ exports.HIERARCHY_CHART_TYPES = new Set([
23
+ "treemap",
24
+ "sunburst",
25
+ ]);
26
+ /**
27
+ * Returns the category of a chart type.
28
+ */
29
+ var getChartCategory = function (chartType) {
30
+ if (exports.BASIC_CHART_TYPES.has(chartType))
31
+ return "basic";
32
+ if (exports.BUBBLE_CHART_TYPES.has(chartType))
33
+ return "bubble";
34
+ if (exports.HIERARCHY_CHART_TYPES.has(chartType))
35
+ return "hierarchy";
36
+ return "basic";
37
+ };
38
+ exports.getChartCategory = getChartCategory;
39
+ /**
40
+ * Type guards for chart specs
41
+ */
42
+ var isBasicChartSpec = function (spec) { return exports.BASIC_CHART_TYPES.has(spec.chartType); };
43
+ exports.isBasicChartSpec = isBasicChartSpec;
44
+ var isBubbleChartSpec = function (spec) {
45
+ return exports.BUBBLE_CHART_TYPES.has(spec.chartType);
46
+ };
47
+ exports.isBubbleChartSpec = isBubbleChartSpec;
48
+ var isHierarchyChartSpec = function (spec) {
49
+ return exports.HIERARCHY_CHART_TYPES.has(spec.chartType);
50
+ };
51
+ exports.isHierarchyChartSpec = isHierarchyChartSpec;
52
+ /**
53
+ * Default specs for each chart type.
54
+ * These provide sensible defaults when creating new charts.
55
+ */
56
+ var DEFAULT_CHART_TYPE_SPECS = {
57
+ line: { chartType: "line", smooth: false },
58
+ bar: { chartType: "bar", stackedType: "UNSTACKED" },
59
+ column: { chartType: "column", stackedType: "UNSTACKED" },
60
+ pie: { chartType: "pie", stackedType: "UNSTACKED", radius: [0, "75%"] },
61
+ area: { chartType: "area" },
62
+ doughnut: {
63
+ chartType: "doughnut",
64
+ stackedType: "UNSTACKED",
65
+ doughnutHoleSize: 0.5,
66
+ },
67
+ radar: { chartType: "radar" },
68
+ stock: { chartType: "stock" },
69
+ histogram: { chartType: "histogram" },
70
+ boxplot: { chartType: "boxplot" },
71
+ waterfall: { chartType: "waterfall" },
72
+ funnel: { chartType: "funnel" },
73
+ combo: { chartType: "combo" },
74
+ regionMap: { chartType: "regionMap", geoScope: "world" },
75
+ bubble: {
76
+ chartType: "bubble",
77
+ bubbleLabels: [{ sources: [] }],
78
+ useFirstRowAsHeaders: true,
79
+ },
80
+ scatter: {
81
+ chartType: "scatter",
82
+ bubbleLabels: [{ sources: [] }],
83
+ useFirstRowAsHeaders: true,
84
+ },
85
+ treemap: { chartType: "treemap", useFirstRowAsHeaders: true },
86
+ sunburst: { chartType: "sunburst", useFirstRowAsHeaders: true },
87
+ };
88
+ /**
89
+ * Returns the default spec for a given chart type.
90
+ */
91
+ var getDefaultChartTypeSpec = function (chartType) {
92
+ var _a;
93
+ return (_a = DEFAULT_CHART_TYPE_SPECS[chartType]) !== null && _a !== void 0 ? _a : { chartType: chartType };
94
+ };
95
+ exports.getDefaultChartTypeSpec = getDefaultChartTypeSpec;
96
+ /**
97
+ * Properties specific to individual chart types within the basic category.
98
+ * These should be cleared when switching between chart types within basic charts.
99
+ */
100
+ var BASIC_CHART_TYPE_PROPERTIES = {
101
+ line: ["smooth"],
102
+ // `doughnutHoleSize` is deliberately NOT cleared when leaving pie so
103
+ // upgrading a legacy pie-based doughnut (pie + doughnutHoleSize) to
104
+ // the first-class doughnut token keeps the authored hole size.
105
+ pie: [
106
+ "radius",
107
+ // Of-pie composite fields (pie-of-pie / bar-of-pie) — meaningless
108
+ // on any other chart type, so drop them on transition.
109
+ "sourceChartType",
110
+ "ofPieType",
111
+ "splitType",
112
+ "splitPos",
113
+ "secondPieSize",
114
+ ],
115
+ doughnut: ["doughnutHoleSize"],
116
+ waterfall: ["totalIndices"],
117
+ boxplot: ["quartileMethod", "showOutliers", "showMeanMarker"],
118
+ // Region map (filled map / choropleth) — the geo scope and the
119
+ // authored-class marker are meaningless on any other chart type.
120
+ regionMap: ["sourceChartType", "geoScope"],
121
+ };
122
+ /**
123
+ * Properties specific to each chart category.
124
+ * These should be cleared when switching between categories.
125
+ */
126
+ var CATEGORY_SPECIFIC_PROPERTIES = {
127
+ basic: [
128
+ "smooth",
129
+ "radius",
130
+ "stackedType",
131
+ "doughnutHoleSize",
132
+ "totalIndices",
133
+ "sourceChartType",
134
+ "ofPieType",
135
+ "splitType",
136
+ "splitPos",
137
+ "secondPieSize",
138
+ "quartileMethod",
139
+ "showOutliers",
140
+ "showMeanMarker",
141
+ "geoScope",
142
+ ],
143
+ bubble: [
144
+ "bubbleLabels",
145
+ "bubbleSizes",
146
+ "useFirstRowAsHeaders",
147
+ "scatterStyle",
148
+ ],
149
+ hierarchy: ["labels", "parentLabels", "sizeData", "useFirstRowAsHeaders"],
150
+ };
151
+ /**
152
+ * Returns the properties that should be removed when transitioning
153
+ * from one chart type to another.
154
+ */
155
+ var getPropertiesToRemove = function (fromType, toType) {
156
+ var _a;
157
+ // No changes needed if same chart type
158
+ if (fromType === toType) {
159
+ return [];
160
+ }
161
+ var fromCategory = (0, exports.getChartCategory)(fromType);
162
+ var toCategory = (0, exports.getChartCategory)(toType);
163
+ if (fromCategory !== toCategory) {
164
+ // Switching between categories - remove all category-specific properties
165
+ return CATEGORY_SPECIFIC_PROPERTIES[fromCategory];
166
+ }
167
+ // Switching within basic charts - only remove chart-specific properties
168
+ if (fromCategory === "basic") {
169
+ return (_a = BASIC_CHART_TYPE_PROPERTIES[fromType]) !== null && _a !== void 0 ? _a : [];
170
+ }
171
+ return [];
172
+ };
173
+ exports.getPropertiesToRemove = getPropertiesToRemove;
174
+ /**
175
+ * Checks if chart data array is empty or contains only placeholder entries.
176
+ */
177
+ var isPlaceholderChartData = function (data) {
178
+ if (!data || data.length === 0)
179
+ return true;
180
+ return data.every(function (entry) {
181
+ var _a;
182
+ var sources = (_a = entry === null || entry === void 0 ? void 0 : entry.sources) !== null && _a !== void 0 ? _a : [];
183
+ return sources.length === 0 || sources.every(function (source) { return !source; });
184
+ });
185
+ };
186
+ exports.isPlaceholderChartData = isPlaceholderChartData;
187
+ /**
188
+ * Merges chart data arrays, preserving current data if incoming is placeholder.
189
+ */
190
+ var mergeChartDataArray = function (current, incoming) {
191
+ var _a;
192
+ if (!incoming || (0, exports.isPlaceholderChartData)(incoming)) {
193
+ return (_a = current !== null && current !== void 0 ? current : incoming) !== null && _a !== void 0 ? _a : [];
194
+ }
195
+ return incoming;
196
+ };
197
+ exports.mergeChartDataArray = mergeChartDataArray;
198
+ /**
199
+ * Chart data fields specific to each category.
200
+ */
201
+ var CATEGORY_DATA_FIELDS = {
202
+ basic: ["domains", "series"],
203
+ bubble: ["domains", "series", "bubbleLabels", "bubbleSizes"],
204
+ hierarchy: ["labels", "parentLabels", "sizeData"],
205
+ };
206
+ /**
207
+ * Merges chart specs, handling chart type transitions by clearing
208
+ * type-specific properties when the chart type changes.
209
+ * Also handles special merging for chart data arrays.
210
+ */
211
+ var mergeChartSpec = function (existingSpec, incomingSpec) {
212
+ var e_1, _a, e_2, _b, e_3, _c;
213
+ var incomingChartType = incomingSpec.chartType;
214
+ var existingChartType = existingSpec.chartType;
215
+ var existingCategory = (0, exports.getChartCategory)(existingChartType);
216
+ var targetCategory = incomingChartType
217
+ ? (0, exports.getChartCategory)(incomingChartType)
218
+ : existingCategory;
219
+ var isCategoryChange = incomingChartType && existingCategory !== targetCategory;
220
+ // Start with a copy of existing spec
221
+ var merged = tslib_1.__assign({}, existingSpec);
222
+ // Handle chart type changes - remove type-specific properties
223
+ if (incomingChartType && incomingChartType !== existingChartType) {
224
+ var propertiesToRemove = (0, exports.getPropertiesToRemove)(existingChartType, incomingChartType);
225
+ try {
226
+ for (var propertiesToRemove_1 = tslib_1.__values(propertiesToRemove), propertiesToRemove_1_1 = propertiesToRemove_1.next(); !propertiesToRemove_1_1.done; propertiesToRemove_1_1 = propertiesToRemove_1.next()) {
227
+ var prop = propertiesToRemove_1_1.value;
228
+ delete merged[prop];
229
+ }
230
+ }
231
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
232
+ finally {
233
+ try {
234
+ if (propertiesToRemove_1_1 && !propertiesToRemove_1_1.done && (_a = propertiesToRemove_1.return)) _a.call(propertiesToRemove_1);
235
+ }
236
+ finally { if (e_1) throw e_1.error; }
237
+ }
238
+ }
239
+ // When switching categories, remove data fields from old category
240
+ if (isCategoryChange) {
241
+ var oldCategoryDataFields = CATEGORY_DATA_FIELDS[existingCategory];
242
+ try {
243
+ for (var oldCategoryDataFields_1 = tslib_1.__values(oldCategoryDataFields), oldCategoryDataFields_1_1 = oldCategoryDataFields_1.next(); !oldCategoryDataFields_1_1.done; oldCategoryDataFields_1_1 = oldCategoryDataFields_1.next()) {
244
+ var field = oldCategoryDataFields_1_1.value;
245
+ delete merged[field];
246
+ }
247
+ }
248
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
249
+ finally {
250
+ try {
251
+ if (oldCategoryDataFields_1_1 && !oldCategoryDataFields_1_1.done && (_b = oldCategoryDataFields_1.return)) _b.call(oldCategoryDataFields_1);
252
+ }
253
+ finally { if (e_2) throw e_2.error; }
254
+ }
255
+ }
256
+ // Apply incoming spec properties
257
+ Object.assign(merged, incomingSpec);
258
+ // Handle chart data array merging - preserve existing if incoming is placeholder
259
+ // Only merge data fields that belong to the target category
260
+ var existingWithData = existingSpec;
261
+ var incomingWithData = incomingSpec;
262
+ var targetDataFields = CATEGORY_DATA_FIELDS[targetCategory];
263
+ try {
264
+ for (var targetDataFields_1 = tslib_1.__values(targetDataFields), targetDataFields_1_1 = targetDataFields_1.next(); !targetDataFields_1_1.done; targetDataFields_1_1 = targetDataFields_1.next()) {
265
+ var field = targetDataFields_1_1.value;
266
+ var existingData = isCategoryChange ? undefined : existingWithData[field];
267
+ var incomingData = incomingWithData[field];
268
+ if (existingData !== undefined || incomingData !== undefined) {
269
+ merged[field] = (0, exports.mergeChartDataArray)(existingData, incomingData);
270
+ }
271
+ }
272
+ }
273
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
274
+ finally {
275
+ try {
276
+ if (targetDataFields_1_1 && !targetDataFields_1_1.done && (_c = targetDataFields_1.return)) _c.call(targetDataFields_1);
277
+ }
278
+ finally { if (e_3) throw e_3.error; }
279
+ }
280
+ return merged;
281
+ };
282
+ exports.mergeChartSpec = mergeChartSpec;
283
+ /**
284
+ * Extracts all SheetRange objects from a ChartSpec.
285
+ * Useful for subscribing to data changes across all chart data sources.
286
+ */
287
+ var getChartDataRanges = function (spec) {
288
+ var e_4, _a, e_5, _b, e_6, _c;
289
+ var ranges = [];
290
+ var category = (0, exports.getChartCategory)(spec.chartType);
291
+ var dataFields = CATEGORY_DATA_FIELDS[category];
292
+ var specWithData = spec;
293
+ try {
294
+ for (var dataFields_1 = tslib_1.__values(dataFields), dataFields_1_1 = dataFields_1.next(); !dataFields_1_1.done; dataFields_1_1 = dataFields_1.next()) {
295
+ var field = dataFields_1_1.value;
296
+ var chartDataArray = specWithData[field];
297
+ if (chartDataArray) {
298
+ try {
299
+ for (var chartDataArray_1 = (e_5 = void 0, tslib_1.__values(chartDataArray)), chartDataArray_1_1 = chartDataArray_1.next(); !chartDataArray_1_1.done; chartDataArray_1_1 = chartDataArray_1.next()) {
300
+ var chartData = chartDataArray_1_1.value;
301
+ if (chartData === null || chartData === void 0 ? void 0 : chartData.sources) {
302
+ try {
303
+ for (var _d = (e_6 = void 0, tslib_1.__values(chartData.sources)), _e = _d.next(); !_e.done; _e = _d.next()) {
304
+ var source = _e.value;
305
+ if (source) {
306
+ ranges.push(source);
307
+ }
308
+ }
309
+ }
310
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
311
+ finally {
312
+ try {
313
+ if (_e && !_e.done && (_c = _d.return)) _c.call(_d);
314
+ }
315
+ finally { if (e_6) throw e_6.error; }
316
+ }
317
+ }
318
+ }
319
+ }
320
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
321
+ finally {
322
+ try {
323
+ if (chartDataArray_1_1 && !chartDataArray_1_1.done && (_b = chartDataArray_1.return)) _b.call(chartDataArray_1);
324
+ }
325
+ finally { if (e_5) throw e_5.error; }
326
+ }
327
+ }
328
+ }
329
+ }
330
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
331
+ finally {
332
+ try {
333
+ if (dataFields_1_1 && !dataFields_1_1.done && (_a = dataFields_1.return)) _a.call(dataFields_1);
334
+ }
335
+ finally { if (e_4) throw e_4.error; }
336
+ }
337
+ return ranges;
338
+ };
339
+ exports.getChartDataRanges = getChartDataRanges;
340
+ /**
341
+ * Coerce an `onRequestCalculate` result into a chart label. Formula
342
+ * errors (#NAME?, #REF!, …) resolve as FormulaError values, and array
343
+ * previews aren't printable — both blank the label instead of
344
+ * rendering an error object in the legend.
345
+ */
346
+ var coerceCalculatedLabel = function (result) {
347
+ if (typeof result === "string") {
348
+ return result;
349
+ }
350
+ if (typeof result === "number" || typeof result === "boolean") {
351
+ return String(result);
352
+ }
353
+ return "";
354
+ };
355
+ exports.coerceCalculatedLabel = coerceCalculatedLabel;
@@ -0,0 +1,11 @@
1
+ export type EchartsGlLoadState = "unloaded" | "loading" | "ready" | "failed";
2
+ export declare const getEchartsGlState: () => EchartsGlLoadState;
3
+ /**
4
+ * Kick off (or join) the echarts-gl dynamic import and register the 3-D
5
+ * charts/components the renderer uses. Resolves true when 3-D rendering is
6
+ * available, false when the import failed (renderer keeps the 2-D fallback).
7
+ */
8
+ export declare const loadEchartsGl: () => Promise<boolean>;
9
+ /** Test hook — resets the module-level load state. */
10
+ export declare const __resetEchartsGlLoaderForTests: () => void;
11
+ //# sourceMappingURL=echarts-gl-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echarts-gl-loader.d.ts","sourceRoot":"","sources":["../../../utils/echarts-gl-loader.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAK7E,eAAO,MAAM,iBAAiB,QAAO,kBAA2B,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,OAAO,CAAC,OAAO,CAyB/C,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,8BAA8B,QAAO,IAGjD,CAAC"}