@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,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.__resetEchartsGlLoaderForTests = exports.loadEchartsGl = exports.getEchartsGlState = void 0;
4
+ var tslib_1 = require("tslib");
5
+ /**
6
+ * Lazy loader for echarts-gl.
7
+ *
8
+ * echarts-gl (plus its claygl dependency) is a large chunk that only 3-D /
9
+ * surface specs need, so it is NEVER imported eagerly — the renderer calls
10
+ * `loadEchartsGl()` the first time a 3-D spec is actually about to render,
11
+ * draws the 2-D fallback immediately, and upgrades to 3-D when the module
12
+ * resolves. A failed import latches the "failed" state so the renderer
13
+ * keeps the 2-D fallback without retrying on every update.
14
+ */
15
+ var components_1 = require("echarts/components");
16
+ var echarts = tslib_1.__importStar(require("echarts/core"));
17
+ var state = "unloaded";
18
+ var loadPromise = null;
19
+ var getEchartsGlState = function () { return state; };
20
+ exports.getEchartsGlState = getEchartsGlState;
21
+ /**
22
+ * Kick off (or join) the echarts-gl dynamic import and register the 3-D
23
+ * charts/components the renderer uses. Resolves true when 3-D rendering is
24
+ * available, false when the import failed (renderer keeps the 2-D fallback).
25
+ */
26
+ var loadEchartsGl = function () {
27
+ if (!loadPromise) {
28
+ state = "loading";
29
+ loadPromise = Promise.all([
30
+ Promise.resolve().then(function () { return tslib_1.__importStar(require("echarts-gl/charts")); }),
31
+ Promise.resolve().then(function () { return tslib_1.__importStar(require("echarts-gl/components")); }),
32
+ ])
33
+ .then(function (_a) {
34
+ var _b = tslib_1.__read(_a, 2), glCharts = _b[0], glComponents = _b[1];
35
+ echarts.use([
36
+ glCharts.Bar3DChart,
37
+ glCharts.Line3DChart,
38
+ glCharts.SurfaceChart,
39
+ glComponents.Grid3DComponent,
40
+ // Surface plots color their z-heights through a visualMap ramp.
41
+ components_1.VisualMapComponent,
42
+ ]);
43
+ state = "ready";
44
+ return true;
45
+ })
46
+ .catch(function () {
47
+ state = "failed";
48
+ return false;
49
+ });
50
+ }
51
+ return loadPromise;
52
+ };
53
+ exports.loadEchartsGl = loadEchartsGl;
54
+ /** Test hook — resets the module-level load state. */
55
+ var __resetEchartsGlLoaderForTests = function () {
56
+ state = "unloaded";
57
+ loadPromise = null;
58
+ };
59
+ exports.__resetEchartsGlLoaderForTests = __resetEchartsGlLoaderForTests;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Error-bar magnitudes shared by chart renderers.
3
+ *
4
+ * Mirrors OOXML `<c:errBars>`. Given a series' numeric values and an
5
+ * error-bar spec, this returns the +/- magnitude for each data point so
6
+ * the renderer can draw whiskers. Both echarts (via a custom series) and
7
+ * plotly (via native `error_y`/`error_x`) consume the same arrays.
8
+ *
9
+ * Supported valueTypes: fixedVal, percentage, stdDev, stdErr, custom.
10
+ * `custom` (Excel `errValType="cust"`) reads per-point plus/minus
11
+ * magnitudes from `plusValues` / `minusValues` — resolved from the
12
+ * spec's `plusRange` / `minusRange` worksheet ranges via
13
+ * `resolveCustomErrorBarValues` before this runs.
14
+ */
15
+ export type ErrorBarValueType = "fixedVal" | "percentage" | "stdDev" | "stdErr" | "custom";
16
+ export type ErrorBarSpecInput = {
17
+ valueType?: ErrorBarValueType | null;
18
+ value?: number | null;
19
+ barType?: "both" | "plus" | "minus" | null;
20
+ /**
21
+ * Custom only — per-point upward magnitudes, index-aligned with the
22
+ * series values. Missing/non-finite entries draw no upper whisker.
23
+ */
24
+ plusValues?: (number | null | undefined)[] | null;
25
+ /** Custom only — per-point downward magnitudes. */
26
+ minusValues?: (number | null | undefined)[] | null;
27
+ };
28
+ export type ErrorBarMagnitudes = {
29
+ /** Upward magnitude per point (>= 0). */
30
+ plus: number[];
31
+ /** Downward magnitude per point (>= 0). */
32
+ minus: number[];
33
+ };
34
+ /**
35
+ * Resolve a custom error-bar spec's `plusRange` / `minusRange` into the
36
+ * `plusValues` / `minusValues` arrays `computeErrorBars` consumes.
37
+ *
38
+ * Range resolution is injected so this stays renderer-agnostic — both
39
+ * chart renderers pass the same `getSeriesValuesFromRange` extractor
40
+ * they already use for series data. Non-custom specs pass through
41
+ * untouched. Cells that don't hold finite numbers resolve to null
42
+ * (zero magnitude), keeping the arrays index-aligned with the range.
43
+ */
44
+ export declare const resolveCustomErrorBarValues: <TRange>(spec: (ErrorBarSpecInput & {
45
+ plusRange?: TRange | null;
46
+ minusRange?: TRange | null;
47
+ }) | null | undefined, getValuesFromRange: (range: TRange) => unknown[] | null | undefined) => ErrorBarSpecInput | null | undefined;
48
+ /**
49
+ * Compute per-point error-bar magnitudes for a series.
50
+ *
51
+ * @param values Raw series y-values (non-finite entries become 0
52
+ * magnitude so the arrays stay index-aligned).
53
+ * @param spec The parsed error-bar spec.
54
+ * @returns Plus/minus magnitude arrays, or null when the spec is
55
+ * undrawable (zero magnitude, or custom without values).
56
+ */
57
+ export declare const computeErrorBars: (values: (number | null | undefined)[], spec: ErrorBarSpecInput | null | undefined) => ErrorBarMagnitudes | null;
58
+ //# sourceMappingURL=error-bars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-bars.d.ts","sourceRoot":"","sources":["../../../utils/error-bars.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,QAAQ,CAAC;AAEb,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAC3C;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC;IAClD,mDAAmD;IACnD,WAAW,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,yCAAyC;IACzC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,2CAA2C;IAC3C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAoBF;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,GAAI,MAAM,EAChD,MACI,CAAC,iBAAiB,GAAG;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC,GACF,IAAI,GACJ,SAAS,EACb,oBAAoB,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,KAClE,iBAAiB,GAAG,IAAI,GAAG,SAgB7B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EACrC,MAAM,iBAAiB,GAAG,IAAI,GAAG,SAAS,KACzC,kBAAkB,GAAG,IAsEvB,CAAC"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ /**
3
+ * Error-bar magnitudes shared by chart renderers.
4
+ *
5
+ * Mirrors OOXML `<c:errBars>`. Given a series' numeric values and an
6
+ * error-bar spec, this returns the +/- magnitude for each data point so
7
+ * the renderer can draw whiskers. Both echarts (via a custom series) and
8
+ * plotly (via native `error_y`/`error_x`) consume the same arrays.
9
+ *
10
+ * Supported valueTypes: fixedVal, percentage, stdDev, stdErr, custom.
11
+ * `custom` (Excel `errValType="cust"`) reads per-point plus/minus
12
+ * magnitudes from `plusValues` / `minusValues` — resolved from the
13
+ * spec's `plusRange` / `minusRange` worksheet ranges via
14
+ * `resolveCustomErrorBarValues` before this runs.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.computeErrorBars = exports.resolveCustomErrorBarValues = void 0;
18
+ var tslib_1 = require("tslib");
19
+ var isFiniteNum = function (v) {
20
+ return typeof v === "number" && Number.isFinite(v);
21
+ };
22
+ var mean = function (nums) {
23
+ return nums.length === 0 ? 0 : nums.reduce(function (s, n) { return s + n; }, 0) / nums.length;
24
+ };
25
+ /**
26
+ * Population-style standard deviation (divides by N), matching Excel's
27
+ * STDEVP, which is what chart stdDev error bars use.
28
+ */
29
+ var stdDev = function (nums) {
30
+ if (nums.length === 0)
31
+ return 0;
32
+ var m = mean(nums);
33
+ var variance = nums.reduce(function (s, n) { return s + Math.pow((n - m), 2); }, 0) / nums.length;
34
+ return Math.sqrt(variance);
35
+ };
36
+ /**
37
+ * Resolve a custom error-bar spec's `plusRange` / `minusRange` into the
38
+ * `plusValues` / `minusValues` arrays `computeErrorBars` consumes.
39
+ *
40
+ * Range resolution is injected so this stays renderer-agnostic — both
41
+ * chart renderers pass the same `getSeriesValuesFromRange` extractor
42
+ * they already use for series data. Non-custom specs pass through
43
+ * untouched. Cells that don't hold finite numbers resolve to null
44
+ * (zero magnitude), keeping the arrays index-aligned with the range.
45
+ */
46
+ var resolveCustomErrorBarValues = function (spec, getValuesFromRange) {
47
+ var _a, _b;
48
+ if (!spec || spec.valueType !== "custom")
49
+ return spec;
50
+ var resolve = function (range) {
51
+ var _a;
52
+ if (!range)
53
+ return undefined;
54
+ return ((_a = getValuesFromRange(range)) !== null && _a !== void 0 ? _a : []).map(function (raw) {
55
+ var n = typeof raw === "string" ? Number(raw) : raw;
56
+ return isFiniteNum(n) ? n : null;
57
+ });
58
+ };
59
+ return tslib_1.__assign(tslib_1.__assign({}, spec), { plusValues: (_a = spec.plusValues) !== null && _a !== void 0 ? _a : resolve(spec.plusRange), minusValues: (_b = spec.minusValues) !== null && _b !== void 0 ? _b : resolve(spec.minusRange) });
60
+ };
61
+ exports.resolveCustomErrorBarValues = resolveCustomErrorBarValues;
62
+ /**
63
+ * Compute per-point error-bar magnitudes for a series.
64
+ *
65
+ * @param values Raw series y-values (non-finite entries become 0
66
+ * magnitude so the arrays stay index-aligned).
67
+ * @param spec The parsed error-bar spec.
68
+ * @returns Plus/minus magnitude arrays, or null when the spec is
69
+ * undrawable (zero magnitude, or custom without values).
70
+ */
71
+ var computeErrorBars = function (values, spec) {
72
+ var e_1, _a;
73
+ var _b, _c;
74
+ if (!spec)
75
+ return null;
76
+ var valueType = (_b = spec.valueType) !== null && _b !== void 0 ? _b : "fixedVal";
77
+ var barType = (_c = spec.barType) !== null && _c !== void 0 ? _c : "both";
78
+ // `custom` — asymmetric per-point magnitudes read from the resolved
79
+ // plus/minus ranges. Arrays are index-aligned with `values`; entries
80
+ // beyond a range's length (or non-finite ones) get 0 magnitude.
81
+ if (valueType === "custom") {
82
+ var plusSource_1 = barType === "minus" ? null : spec.plusValues;
83
+ var minusSource_1 = barType === "plus" ? null : spec.minusValues;
84
+ var plus_1 = values.map(function (_, i) {
85
+ var v = plusSource_1 === null || plusSource_1 === void 0 ? void 0 : plusSource_1[i];
86
+ return isFiniteNum(v) ? Math.abs(v) : 0;
87
+ });
88
+ var minus_1 = values.map(function (_, i) {
89
+ var v = minusSource_1 === null || minusSource_1 === void 0 ? void 0 : minusSource_1[i];
90
+ return isFiniteNum(v) ? Math.abs(v) : 0;
91
+ });
92
+ if (plus_1.every(function (v) { return v === 0; }) && minus_1.every(function (v) { return v === 0; })) {
93
+ return null;
94
+ }
95
+ return { plus: plus_1, minus: minus_1 };
96
+ }
97
+ var numeric = values.filter(isFiniteNum);
98
+ var magnitudeFor;
99
+ switch (valueType) {
100
+ case "fixedVal": {
101
+ var v_1 = isFiniteNum(spec.value) ? Math.abs(spec.value) : 0;
102
+ if (v_1 === 0)
103
+ return null;
104
+ magnitudeFor = function () { return v_1; };
105
+ break;
106
+ }
107
+ case "percentage": {
108
+ var pct_1 = isFiniteNum(spec.value) ? Math.abs(spec.value) : 0;
109
+ if (pct_1 === 0)
110
+ return null;
111
+ magnitudeFor = function (v) { return Math.abs(v) * (pct_1 / 100); };
112
+ break;
113
+ }
114
+ case "stdDev": {
115
+ var multiplier = isFiniteNum(spec.value) ? Math.abs(spec.value) : 1;
116
+ var sd = stdDev(numeric);
117
+ if (sd === 0)
118
+ return null;
119
+ var mag_1 = sd * multiplier;
120
+ magnitudeFor = function () { return mag_1; };
121
+ break;
122
+ }
123
+ case "stdErr": {
124
+ var sd = stdDev(numeric);
125
+ if (sd === 0 || numeric.length === 0)
126
+ return null;
127
+ var se_1 = sd / Math.sqrt(numeric.length);
128
+ magnitudeFor = function () { return se_1; };
129
+ break;
130
+ }
131
+ default:
132
+ return null;
133
+ }
134
+ var plus = [];
135
+ var minus = [];
136
+ try {
137
+ for (var values_1 = tslib_1.__values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {
138
+ var raw = values_1_1.value;
139
+ var v = isFiniteNum(raw) ? raw : 0;
140
+ var mag = magnitudeFor(v);
141
+ plus.push(barType === "minus" ? 0 : mag);
142
+ minus.push(barType === "plus" ? 0 : mag);
143
+ }
144
+ }
145
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
146
+ finally {
147
+ try {
148
+ if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);
149
+ }
150
+ finally { if (e_1) throw e_1.error; }
151
+ }
152
+ return { plus: plus, minus: minus };
153
+ };
154
+ exports.computeErrorBars = computeErrorBars;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Series gradient-fill helpers shared by chart renderers.
3
+ *
4
+ * Mirrors OOXML `<a:gradFill>` carried on a series via
5
+ * `ChartData.gradient`. A linear gradient has a `degree` rotation and a
6
+ * list of color stops; a `path` gradient is radial-ish with inset axes.
7
+ *
8
+ * echarts: paints faithfully via `echarts.graphic.LinearGradient`. We
9
+ * produce the constructor args (x, y, x2, y2, colorStops) so the
10
+ * renderer can `new echarts.graphic.LinearGradient(...)`.
11
+ *
12
+ * plotly: has NO faithful per-trace gradient fill for bar/line series.
13
+ * We degrade to a representative solid color (the middle stop) so the
14
+ * series still reads as "the gradient color". Documented as
15
+ * lower-fidelity.
16
+ */
17
+ export type GradientSpec = {
18
+ type: "linear" | "path";
19
+ degree?: number | null;
20
+ left?: number | null;
21
+ right?: number | null;
22
+ top?: number | null;
23
+ bottom?: number | null;
24
+ stops: Array<{
25
+ position: number;
26
+ color: string;
27
+ }>;
28
+ };
29
+ export type EchartsLinearGradientArgs = {
30
+ x: number;
31
+ y: number;
32
+ x2: number;
33
+ y2: number;
34
+ colorStops: Array<{
35
+ offset: number;
36
+ color: string;
37
+ }>;
38
+ };
39
+ /**
40
+ * Build the args for `new echarts.graphic.LinearGradient(x, y, x2, y2,
41
+ * colorStops)`. Returns null when there are no usable stops. A `path`
42
+ * gradient is approximated as a linear gradient (echarts core has no
43
+ * radial graphic for series fills).
44
+ */
45
+ export declare const gradientToEcharts: (gradient: GradientSpec | null | undefined) => EchartsLinearGradientArgs | null;
46
+ /**
47
+ * Plotly fallback: there is no per-trace gradient, so pick a single
48
+ * representative color (the median stop). Returns undefined when no
49
+ * usable stops exist.
50
+ */
51
+ export declare const gradientToPlotly: (gradient: GradientSpec | null | undefined) => string | undefined;
52
+ //# sourceMappingURL=gradient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../../../utils/gradient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD,CAAC;AA0CF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,YAAY,GAAG,IAAI,GAAG,SAAS,KACxC,yBAAyB,GAAG,IAY9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,YAAY,GAAG,IAAI,GAAG,SAAS,KACxC,MAAM,GAAG,SAMX,CAAC"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ /**
3
+ * Series gradient-fill helpers shared by chart renderers.
4
+ *
5
+ * Mirrors OOXML `<a:gradFill>` carried on a series via
6
+ * `ChartData.gradient`. A linear gradient has a `degree` rotation and a
7
+ * list of color stops; a `path` gradient is radial-ish with inset axes.
8
+ *
9
+ * echarts: paints faithfully via `echarts.graphic.LinearGradient`. We
10
+ * produce the constructor args (x, y, x2, y2, colorStops) so the
11
+ * renderer can `new echarts.graphic.LinearGradient(...)`.
12
+ *
13
+ * plotly: has NO faithful per-trace gradient fill for bar/line series.
14
+ * We degrade to a representative solid color (the middle stop) so the
15
+ * series still reads as "the gradient color". Documented as
16
+ * lower-fidelity.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.gradientToPlotly = exports.gradientToEcharts = void 0;
20
+ /**
21
+ * Normalize + sort stops to echarts' `{ offset, color }` shape. Positions
22
+ * are clamped to 0..1; offsets <0 or >1 are not allowed by echarts.
23
+ */
24
+ var toColorStops = function (stops) {
25
+ return (stops !== null && stops !== void 0 ? stops : [])
26
+ .filter(function (s) { return s && typeof s.color === "string"; })
27
+ .map(function (s) {
28
+ var _a;
29
+ return ({
30
+ offset: Math.max(0, Math.min(1, (_a = s.position) !== null && _a !== void 0 ? _a : 0)),
31
+ color: s.color,
32
+ });
33
+ })
34
+ .sort(function (a, b) { return a.offset - b.offset; });
35
+ };
36
+ /**
37
+ * Convert a gradient `degree` (clockwise from the +x axis, OOXML uses
38
+ * 60000ths of a degree but the parser already normalizes to plain
39
+ * degrees) into echarts' (x, y) -> (x2, y2) endpoints inside the unit
40
+ * box. 0° = left→right, 90° = top→bottom.
41
+ */
42
+ var degreeToEndpoints = function (degree) {
43
+ var rad = (degree * Math.PI) / 180;
44
+ // Direction vector of the gradient axis.
45
+ var dx = Math.cos(rad);
46
+ var dy = Math.sin(rad);
47
+ // Project the direction through the centre of the unit box so the ramp
48
+ // is axis-aligned for the cardinal angles (0° = left→right, 90° =
49
+ // top→bottom) and points sensibly for everything in between.
50
+ return {
51
+ x: 0.5 - dx / 2,
52
+ y: 0.5 - dy / 2,
53
+ x2: 0.5 + dx / 2,
54
+ y2: 0.5 + dy / 2,
55
+ };
56
+ };
57
+ /**
58
+ * Build the args for `new echarts.graphic.LinearGradient(x, y, x2, y2,
59
+ * colorStops)`. Returns null when there are no usable stops. A `path`
60
+ * gradient is approximated as a linear gradient (echarts core has no
61
+ * radial graphic for series fills).
62
+ */
63
+ var gradientToEcharts = function (gradient) {
64
+ var _a;
65
+ if (!gradient)
66
+ return null;
67
+ var colorStops = toColorStops(gradient.stops);
68
+ if (colorStops.length < 1)
69
+ return null;
70
+ // A single stop is a solid color; still emit a valid gradient (two
71
+ // identical stops) so callers have a uniform return type.
72
+ var stops = colorStops.length === 1
73
+ ? [colorStops[0], { offset: 1, color: colorStops[0].color }]
74
+ : colorStops;
75
+ var _b = degreeToEndpoints((_a = gradient.degree) !== null && _a !== void 0 ? _a : 90), x = _b.x, y = _b.y, x2 = _b.x2, y2 = _b.y2;
76
+ return { x: x, y: y, x2: x2, y2: y2, colorStops: stops };
77
+ };
78
+ exports.gradientToEcharts = gradientToEcharts;
79
+ /**
80
+ * Plotly fallback: there is no per-trace gradient, so pick a single
81
+ * representative color (the median stop). Returns undefined when no
82
+ * usable stops exist.
83
+ */
84
+ var gradientToPlotly = function (gradient) {
85
+ if (!gradient)
86
+ return undefined;
87
+ var stops = toColorStops(gradient.stops);
88
+ if (stops.length === 0)
89
+ return undefined;
90
+ // Median stop is the most "representative" of the ramp.
91
+ return stops[Math.floor(stops.length / 2)].color;
92
+ };
93
+ exports.gradientToPlotly = gradientToPlotly;
@@ -0,0 +1,28 @@
1
+ import type { ChartSpec, SheetRange, TreemapChart } from "@rowsncolumns/spreadsheet";
2
+ type Extractor = (range: SheetRange, hiddenStrategy?: ChartSpec["hiddenDimensionStrategy"]) => (string | number | boolean | null | undefined)[];
3
+ export type HierarchyRow = {
4
+ label: string;
5
+ parent: string | null;
6
+ value: number | null;
7
+ };
8
+ export type HierarchyNode = {
9
+ name: string;
10
+ id?: string;
11
+ value?: number | null;
12
+ children?: HierarchyNode[];
13
+ };
14
+ type ExtractOptions = {
15
+ getDomainValuesFromRange: Extractor;
16
+ getSeriesValuesFromRange: Extractor;
17
+ hiddenDimensionStrategy?: ChartSpec["hiddenDimensionStrategy"];
18
+ };
19
+ export declare const getHierarchyHeaderTitle: (spec: TreemapChart, options: ExtractOptions) => string | undefined;
20
+ export declare const extractHierarchyRows: (spec: TreemapChart, options: ExtractOptions) => HierarchyRow[];
21
+ export declare const buildHierarchyTree: (rows: HierarchyRow[]) => HierarchyNode[];
22
+ export declare const toPlotlyHierarchy: (rows: HierarchyRow[]) => {
23
+ labels: string[];
24
+ parents: string[];
25
+ values: number[];
26
+ };
27
+ export {};
28
+ //# sourceMappingURL=hierarchy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../../utils/hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EACV,YAAY,EACb,MAAM,2BAA2B,CAAC;AAEnC,KAAK,SAAS,GAAG,CACf,KAAK,EAAE,UAAU,EACjB,cAAc,CAAC,EAAE,SAAS,CAAC,yBAAyB,CAAC,KAClD,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,wBAAwB,EAAE,SAAS,CAAC;IACpC,wBAAwB,EAAE,SAAS,CAAC;IACpC,uBAAuB,CAAC,EAAE,SAAS,CAAC,yBAAyB,CAAC,CAAC;CAChE,CAAC;AA+CF,eAAO,MAAM,uBAAuB,GAClC,MAAM,YAAY,EAClB,SAAS,cAAc,KACtB,MAAM,GAAG,SAgBX,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,YAAY,EAClB,SAAS,cAAc,KACtB,YAAY,EAyCd,CAAC;AAyBF,eAAO,MAAM,kBAAkB,GAAI,MAAM,YAAY,EAAE,KAAG,aAAa,EAoDtE,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,YAAY,EAAE;;;;CAoBrD,CAAC"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toPlotlyHierarchy = exports.buildHierarchyTree = exports.extractHierarchyRows = exports.getHierarchyHeaderTitle = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var flattenChartData = function (chartData, extractor, hiddenStrategy, skipFirstRow) {
6
+ if (skipFirstRow === void 0) { skipFirstRow = false; }
7
+ if (!chartData || chartData.length === 0)
8
+ return [];
9
+ var values = [];
10
+ chartData.forEach(function (entry) {
11
+ entry.sources.forEach(function (source) {
12
+ var _a;
13
+ var extracted = (_a = extractor(source, hiddenStrategy)) !== null && _a !== void 0 ? _a : [];
14
+ var trimmed = skipFirstRow && extracted.length > 0 ? extracted.slice(1) : extracted;
15
+ values.push.apply(values, tslib_1.__spreadArray([], tslib_1.__read(trimmed), false));
16
+ });
17
+ });
18
+ return values;
19
+ };
20
+ var toLabelString = function (value) {
21
+ if (value === null || value === undefined)
22
+ return "";
23
+ return "".concat(value).trim();
24
+ };
25
+ var toParentLabel = function (value) {
26
+ var label = toLabelString(value);
27
+ return label === "" ? null : label;
28
+ };
29
+ var toNumericValue = function (value) {
30
+ if (typeof value === "number" && Number.isFinite(value)) {
31
+ return value;
32
+ }
33
+ if (typeof value === "string") {
34
+ var parsed = Number(value);
35
+ return Number.isFinite(parsed) ? parsed : null;
36
+ }
37
+ if (typeof value === "boolean") {
38
+ return value ? 1 : 0;
39
+ }
40
+ return null;
41
+ };
42
+ var getHierarchyHeaderTitle = function (spec, options) {
43
+ var e_1, _a, e_2, _b;
44
+ var _c, _d, _e;
45
+ if (spec.useFirstRowAsHeaders === false)
46
+ return undefined;
47
+ var getDomainValuesFromRange = options.getDomainValuesFromRange;
48
+ try {
49
+ for (var _f = tslib_1.__values((_c = spec.parentLabels) !== null && _c !== void 0 ? _c : []), _g = _f.next(); !_g.done; _g = _f.next()) {
50
+ var entry = _g.value;
51
+ try {
52
+ for (var _h = (e_2 = void 0, tslib_1.__values((_d = entry.sources) !== null && _d !== void 0 ? _d : [])), _j = _h.next(); !_j.done; _j = _h.next()) {
53
+ var source = _j.value;
54
+ var values = (_e = getDomainValuesFromRange(source, options.hiddenDimensionStrategy)) !== null && _e !== void 0 ? _e : [];
55
+ if (values.length > 0) {
56
+ var header = toLabelString(values[0]);
57
+ if (header) {
58
+ return header;
59
+ }
60
+ }
61
+ }
62
+ }
63
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
64
+ finally {
65
+ try {
66
+ if (_j && !_j.done && (_b = _h.return)) _b.call(_h);
67
+ }
68
+ finally { if (e_2) throw e_2.error; }
69
+ }
70
+ }
71
+ }
72
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
73
+ finally {
74
+ try {
75
+ if (_g && !_g.done && (_a = _f.return)) _a.call(_f);
76
+ }
77
+ finally { if (e_1) throw e_1.error; }
78
+ }
79
+ return undefined;
80
+ };
81
+ exports.getHierarchyHeaderTitle = getHierarchyHeaderTitle;
82
+ var extractHierarchyRows = function (spec, options) {
83
+ var getDomainValuesFromRange = options.getDomainValuesFromRange, getSeriesValuesFromRange = options.getSeriesValuesFromRange;
84
+ var hiddenStrategy = options.hiddenDimensionStrategy;
85
+ var skipHeaders = spec.useFirstRowAsHeaders !== false;
86
+ var labels = flattenChartData(spec.labels, getDomainValuesFromRange, hiddenStrategy, skipHeaders).map(toLabelString);
87
+ var parents = flattenChartData(spec.parentLabels, getDomainValuesFromRange, hiddenStrategy, skipHeaders);
88
+ var sizes = flattenChartData(spec.sizeData, getSeriesValuesFromRange, hiddenStrategy, skipHeaders);
89
+ var rows = [];
90
+ var seenLabels = new Set();
91
+ for (var i = 0; i < labels.length; i++) {
92
+ var label = labels[i];
93
+ if (!label)
94
+ continue;
95
+ if (seenLabels.has(label)) {
96
+ throw new Error("Duplicate hierarchy label detected: ".concat(label));
97
+ }
98
+ seenLabels.add(label);
99
+ rows.push({
100
+ label: label,
101
+ parent: toParentLabel(parents[i]),
102
+ value: toNumericValue(sizes[i]),
103
+ });
104
+ }
105
+ return rows;
106
+ };
107
+ exports.extractHierarchyRows = extractHierarchyRows;
108
+ var getOrCreateNode = function (nodes, name) {
109
+ var existing = nodes.get(name);
110
+ if (existing)
111
+ return existing;
112
+ var node = {
113
+ name: name,
114
+ value: 0,
115
+ parent: null,
116
+ children: new Set(),
117
+ };
118
+ nodes.set(name, node);
119
+ return node;
120
+ };
121
+ var buildHierarchyTree = function (rows) {
122
+ var nodes = new Map();
123
+ rows.forEach(function (row) {
124
+ var _a;
125
+ if (!row.label)
126
+ return;
127
+ var labelNode = getOrCreateNode(nodes, row.label);
128
+ var numericValue = (_a = row.value) !== null && _a !== void 0 ? _a : 0;
129
+ labelNode.value += numericValue;
130
+ var parentName = row.parent && row.parent !== row.label ? row.parent : null;
131
+ if (parentName) {
132
+ var parentNode = getOrCreateNode(nodes, parentName);
133
+ parentNode.children.add(row.label);
134
+ if (labelNode.parent == null) {
135
+ labelNode.parent = parentName;
136
+ }
137
+ }
138
+ });
139
+ var buildNode = function (internal) {
140
+ var children = internal.children.size > 0
141
+ ? Array.from(internal.children).map(function (childName) {
142
+ return buildNode(getOrCreateNode(nodes, childName));
143
+ })
144
+ : undefined;
145
+ var value = children && children.length > 0
146
+ ? children.reduce(function (sum, child) { var _a; return sum + ((_a = child.value) !== null && _a !== void 0 ? _a : 0); }, 0)
147
+ : internal.value;
148
+ var node = {
149
+ name: internal.name,
150
+ id: internal.name,
151
+ value: value,
152
+ };
153
+ if (children && children.length > 0) {
154
+ node.children = children;
155
+ }
156
+ return node;
157
+ };
158
+ var roots = [];
159
+ nodes.forEach(function (internal) {
160
+ if (internal.parent == null) {
161
+ roots.push(buildNode(internal));
162
+ }
163
+ });
164
+ return roots;
165
+ };
166
+ exports.buildHierarchyTree = buildHierarchyTree;
167
+ var toPlotlyHierarchy = function (rows) {
168
+ var tree = (0, exports.buildHierarchyTree)(rows);
169
+ var labels = [];
170
+ var parents = [];
171
+ var values = [];
172
+ var traverse = function (nodes, parentName) {
173
+ nodes.forEach(function (node) {
174
+ var _a;
175
+ labels.push(node.name);
176
+ parents.push(parentName !== null && parentName !== void 0 ? parentName : "");
177
+ values.push((_a = node.value) !== null && _a !== void 0 ? _a : 0);
178
+ if (node.children) {
179
+ traverse(node.children, node.name);
180
+ }
181
+ });
182
+ };
183
+ traverse(tree, null);
184
+ return { labels: labels, parents: parents, values: values };
185
+ };
186
+ exports.toPlotlyHierarchy = toPlotlyHierarchy;