@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,70 @@
1
+ "use strict";
2
+ /**
3
+ * Radar-chart shaping shared by chart renderers.
4
+ *
5
+ * A radar chart plots each series as a closed polygon over a set of
6
+ * "indicators" (one axis per category). echarts needs a top-level
7
+ * `radar.indicator: [{ name, max }]` plus series of shape
8
+ * `{ value: number[], name }`. plotly uses `scatterpolar` traces with
9
+ * `r` (the values) and `theta` (the category names).
10
+ *
11
+ * These helpers are pure transforms over already-extracted category
12
+ * labels and per-series numeric values.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.buildRadarSeriesData = exports.buildRadarIndicators = void 0;
16
+ var tslib_1 = require("tslib");
17
+ var isFiniteNum = function (v) {
18
+ return typeof v === "number" && Number.isFinite(v);
19
+ };
20
+ var toNumber = function (v) {
21
+ return isFiniteNum(v) ? v : 0;
22
+ };
23
+ /**
24
+ * Build echarts radar indicators from category labels and series.
25
+ * The `max` per indicator is the largest value seen across all series at
26
+ * that category (rounded up a touch so the polygon doesn't touch the
27
+ * rim). When every series is empty at an index, `max` defaults to 1.
28
+ */
29
+ var buildRadarIndicators = function (categories, series) {
30
+ return categories.map(function (label, i) {
31
+ var e_1, _a;
32
+ var max = 0;
33
+ try {
34
+ for (var series_1 = tslib_1.__values(series), series_1_1 = series_1.next(); !series_1_1.done; series_1_1 = series_1.next()) {
35
+ var s = series_1_1.value;
36
+ var v = s.values[i];
37
+ if (isFiniteNum(v))
38
+ max = Math.max(max, v);
39
+ }
40
+ }
41
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
42
+ finally {
43
+ try {
44
+ if (series_1_1 && !series_1_1.done && (_a = series_1.return)) _a.call(series_1);
45
+ }
46
+ finally { if (e_1) throw e_1.error; }
47
+ }
48
+ return {
49
+ name: String(label !== null && label !== void 0 ? label : ""),
50
+ // Pad by 10% so the outermost ring has breathing room; never 0.
51
+ max: max > 0 ? max * 1.1 : 1,
52
+ };
53
+ });
54
+ };
55
+ exports.buildRadarIndicators = buildRadarIndicators;
56
+ /**
57
+ * Shape series into echarts radar data: one entry per series with its
58
+ * value vector aligned to the indicator order. Missing/non-numeric
59
+ * values become 0 so the polygon stays closed.
60
+ */
61
+ var buildRadarSeriesData = function (series, indicatorCount) {
62
+ return series.map(function (s) {
63
+ var value = [];
64
+ for (var i = 0; i < indicatorCount; i++) {
65
+ value.push(toNumber(s.values[i]));
66
+ }
67
+ return { value: value, name: s.name };
68
+ });
69
+ };
70
+ exports.buildRadarSeriesData = buildRadarSeriesData;
@@ -0,0 +1,22 @@
1
+ export type RegionMapGeo = {
2
+ /** The map's region names — the match targets for data labels. */
3
+ regionNames: string[];
4
+ };
5
+ /**
6
+ * Host-provided geo data: register `geoJson` under `name` so region-map
7
+ * specs with `geoScope: name` can render on it (e.g. a US-states map).
8
+ * Region matching targets each feature's `properties.name`. The actual
9
+ * `echarts.registerMap` call is deferred until the map modules have
10
+ * loaded, so this is safe to call at module scope.
11
+ */
12
+ export declare const registerChartGeoMap: (name: string, geoJson: object) => void;
13
+ /**
14
+ * Resolve the geo data for a scope, loading the echarts map modules
15
+ * (and, for "world", the bundled world GeoJSON) on first use. Resolves
16
+ * null — never throws — when the scope is unknown or an asset failed
17
+ * to load; the renderer then draws an empty chart.
18
+ */
19
+ export declare const loadRegionMapGeo: (scope: string) => Promise<RegionMapGeo | null>;
20
+ /** Test hook — resets the module-level registries and latches. */
21
+ export declare const __resetRegionMapLoaderForTests: () => void;
22
+ //# sourceMappingURL=region-map-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region-map-loader.d.ts","sourceRoot":"","sources":["../../../utils/region-map-loader.ts"],"names":[],"mappings":"AAsCA,MAAM,MAAM,YAAY,GAAG;IACzB,kEAAkE;IAClE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAmDF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,IAMnE,CAAC;AAkCF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,KACZ,OAAO,CAAC,YAAY,GAAG,IAAI,CAyB7B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,8BAA8B,QAAO,IAKjD,CAAC"}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.__resetRegionMapLoaderForTests = exports.loadRegionMapGeo = exports.registerChartGeoMap = void 0;
4
+ var tslib_1 = require("tslib");
5
+ /**
6
+ * Lazy loader + registry for region-map (choropleth) geo data.
7
+ *
8
+ * echarts ships no map geometry, and the world GeoJSON plus the map
9
+ * chart module are dead weight for every non-map chart — so nothing
10
+ * here is imported eagerly. The renderer calls `loadRegionMapGeo(scope)`
11
+ * the first time a region-map spec is actually about to render:
12
+ *
13
+ * - the echarts `MapChart` / `GeoComponent` / `VisualMapComponent`
14
+ * modules are dynamically imported and registered once
15
+ * - the default `"world"` scope is built by dynamically importing the
16
+ * `world-atlas` countries TopoJSON (~110 KB) and converting it with
17
+ * `topojson-client`
18
+ * - any other scope must have been provided by the host through
19
+ * `registerChartGeoMap(name, geoJson)` (e.g. a US-states GeoJSON)
20
+ *
21
+ * Failures latch (mirroring `echarts-gl-loader.ts`): a failed import
22
+ * warns once and keeps resolving null, so the renderer draws an empty
23
+ * chart instead of crashing or re-fetching on every update. Everything
24
+ * is SSR-safe — no window/document access.
25
+ */
26
+ var echarts = tslib_1.__importStar(require("echarts/core"));
27
+ var region_map_1 = require("./region-map");
28
+ var registeredMaps = new Map();
29
+ var modulesPromise = null;
30
+ var worldPromise = null;
31
+ var warnedScopes = new Set();
32
+ var extractRegionNames = function (geoJson) {
33
+ var e_1, _a;
34
+ var _b;
35
+ var features = geoJson === null || geoJson === void 0 ? void 0 : geoJson.features;
36
+ if (!Array.isArray(features))
37
+ return [];
38
+ var names = [];
39
+ try {
40
+ for (var features_1 = tslib_1.__values(features), features_1_1 = features_1.next(); !features_1_1.done; features_1_1 = features_1.next()) {
41
+ var feature = features_1_1.value;
42
+ var name_1 = (_b = feature === null || feature === void 0 ? void 0 : feature.properties) === null || _b === void 0 ? void 0 : _b.name;
43
+ if (typeof name_1 === "string" && name_1.length > 0) {
44
+ names.push(name_1);
45
+ }
46
+ }
47
+ }
48
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
49
+ finally {
50
+ try {
51
+ if (features_1_1 && !features_1_1.done && (_a = features_1.return)) _a.call(features_1);
52
+ }
53
+ finally { if (e_1) throw e_1.error; }
54
+ }
55
+ return names;
56
+ };
57
+ var warnOnce = function (scope, message) {
58
+ if (warnedScopes.has(scope))
59
+ return;
60
+ warnedScopes.add(scope);
61
+ // eslint-disable-next-line no-console
62
+ console.warn(message);
63
+ };
64
+ /**
65
+ * Register the echarts modules the choropleth needs (map series, geo
66
+ * coordinate system, visualMap). Dynamically imported so non-map
67
+ * charts never pay for them; a failed import latches as unavailable.
68
+ */
69
+ var ensureEchartsMapModules = function () {
70
+ if (!modulesPromise) {
71
+ modulesPromise = Promise.all([
72
+ Promise.resolve().then(function () { return tslib_1.__importStar(require("echarts/charts")); }),
73
+ Promise.resolve().then(function () { return tslib_1.__importStar(require("echarts/components")); }),
74
+ ])
75
+ .then(function (_a) {
76
+ var _b = tslib_1.__read(_a, 2), charts = _b[0], components = _b[1];
77
+ echarts.use([
78
+ charts.MapChart,
79
+ components.GeoComponent,
80
+ components.VisualMapComponent,
81
+ ]);
82
+ return true;
83
+ })
84
+ .catch(function () { return false; });
85
+ }
86
+ return modulesPromise;
87
+ };
88
+ /**
89
+ * Host-provided geo data: register `geoJson` under `name` so region-map
90
+ * specs with `geoScope: name` can render on it (e.g. a US-states map).
91
+ * Region matching targets each feature's `properties.name`. The actual
92
+ * `echarts.registerMap` call is deferred until the map modules have
93
+ * loaded, so this is safe to call at module scope.
94
+ */
95
+ var registerChartGeoMap = function (name, geoJson) {
96
+ registeredMaps.set(name, {
97
+ geoJson: geoJson,
98
+ regionNames: extractRegionNames(geoJson),
99
+ applied: false,
100
+ });
101
+ };
102
+ exports.registerChartGeoMap = registerChartGeoMap;
103
+ var loadWorldGeoMap = function () {
104
+ if (!worldPromise) {
105
+ worldPromise = Promise.all([
106
+ Promise.resolve().then(function () { return tslib_1.__importStar(require("world-atlas/countries-110m.json")); }),
107
+ Promise.resolve().then(function () { return tslib_1.__importStar(require("topojson-client")); }),
108
+ ])
109
+ .then(function (_a) {
110
+ var _b;
111
+ var _c = tslib_1.__read(_a, 2), topologyModule = _c[0], topojson = _c[1];
112
+ var topology = (_b = topologyModule.default) !== null && _b !== void 0 ? _b : topologyModule;
113
+ var geoJson = topojson.feature(topology, topology.objects.countries);
114
+ var entry = {
115
+ geoJson: geoJson,
116
+ regionNames: extractRegionNames(geoJson),
117
+ applied: false,
118
+ };
119
+ registeredMaps.set(region_map_1.WORLD_GEO_SCOPE, entry);
120
+ return entry;
121
+ })
122
+ .catch(function () {
123
+ warnOnce(region_map_1.WORLD_GEO_SCOPE, "[charts] Failed to load the world map geometry for region-map charts; the chart will render empty.");
124
+ return null;
125
+ });
126
+ }
127
+ return worldPromise;
128
+ };
129
+ /**
130
+ * Resolve the geo data for a scope, loading the echarts map modules
131
+ * (and, for "world", the bundled world GeoJSON) on first use. Resolves
132
+ * null — never throws — when the scope is unknown or an asset failed
133
+ * to load; the renderer then draws an empty chart.
134
+ */
135
+ var loadRegionMapGeo = function (scope) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
136
+ var modulesReady, entry;
137
+ var _a;
138
+ return tslib_1.__generator(this, function (_b) {
139
+ switch (_b.label) {
140
+ case 0: return [4 /*yield*/, ensureEchartsMapModules()];
141
+ case 1:
142
+ modulesReady = _b.sent();
143
+ if (!modulesReady) {
144
+ warnOnce("echarts-map-modules", "[charts] Failed to load the echarts map modules for region-map charts; the chart will render empty.");
145
+ return [2 /*return*/, null];
146
+ }
147
+ entry = (_a = registeredMaps.get(scope)) !== null && _a !== void 0 ? _a : null;
148
+ if (!(!entry && scope === region_map_1.WORLD_GEO_SCOPE)) return [3 /*break*/, 3];
149
+ return [4 /*yield*/, loadWorldGeoMap()];
150
+ case 2:
151
+ entry = _b.sent();
152
+ _b.label = 3;
153
+ case 3:
154
+ if (!entry) {
155
+ warnOnce(scope, "[charts] Region map: no geo data registered for scope \"".concat(scope, "\". Register one with registerChartGeoMap(\"").concat(scope, "\", geoJson)."));
156
+ return [2 /*return*/, null];
157
+ }
158
+ if (!entry.applied) {
159
+ echarts.registerMap(scope, entry.geoJson);
160
+ entry.applied = true;
161
+ }
162
+ return [2 /*return*/, { regionNames: entry.regionNames }];
163
+ }
164
+ });
165
+ }); };
166
+ exports.loadRegionMapGeo = loadRegionMapGeo;
167
+ /** Test hook — resets the module-level registries and latches. */
168
+ var __resetRegionMapLoaderForTests = function () {
169
+ registeredMaps.clear();
170
+ modulesPromise = null;
171
+ worldPromise = null;
172
+ warnedScopes.clear();
173
+ };
174
+ exports.__resetRegionMapLoaderForTests = __resetRegionMapLoaderForTests;
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Region map / filled map (OOXML chartex `<cx:regionMap>`) helpers.
3
+ *
4
+ * Excel's filled map paints a choropleth: values keyed by geography
5
+ * (country/state names) shade regions on a map. The spec reuses the
6
+ * existing series/domain data model — the category domain carries the
7
+ * region labels and the first series carries the values — plus an
8
+ * optional `geoScope` naming the registered echarts map ("world" by
9
+ * default).
10
+ *
11
+ * Everything here is pure: region-name normalization + alias matching,
12
+ * choropleth data assembly, and the sequential color ramp for the value
13
+ * scale. The geo asset loading lives in `region-map-loader.ts`.
14
+ */
15
+ type MaybeLike<T> = T | null | undefined;
16
+ /** Default geo scope — the lazily loaded world map. */
17
+ export declare const WORLD_GEO_SCOPE = "world";
18
+ /**
19
+ * True when a basic-chart spec should render as a region-map
20
+ * choropleth: the first-class `"regionMap"` chart type, or any payload
21
+ * degraded to another `chartType` that preserves the authored class as
22
+ * `sourceChartType: "REGION_MAP"` (case-insensitive, mirroring
23
+ * `isParetoSpec` / `isOfPieChartSpec`).
24
+ */
25
+ export declare const isRegionMapSpec: (spec: {
26
+ chartType?: string;
27
+ sourceChartType?: MaybeLike<string>;
28
+ }) => boolean;
29
+ /** Coerce a `geoScope` value to a usable map name (default "world"). */
30
+ export declare const resolveGeoScope: (raw: MaybeLike<string>) => string;
31
+ /**
32
+ * Normalize a region label for matching: trim, collapse whitespace,
33
+ * casefold, strip diacritics ("Côte d'Ivoire" → "cote d'ivoire"),
34
+ * unify curly apostrophes, and drop periods ("U.S." → "us").
35
+ */
36
+ export declare const normalizeRegionKey: (name: MaybeLike<string>) => string;
37
+ /**
38
+ * Groups of equivalent region names. Members are matched through
39
+ * `normalizeRegionKey`, so casing/diacritics/periods don't matter.
40
+ * Each group binds only when one of its members actually exists on the
41
+ * loaded map, so the table is map-agnostic: the canonical spellings
42
+ * below cover both the bundled world map's Natural Earth names
43
+ * ("United States of America", "Dem. Rep. Congo", …) and the long-form
44
+ * names hosts commonly author.
45
+ */
46
+ export declare const REGION_NAME_ALIASES: readonly (readonly string[])[];
47
+ /**
48
+ * Build a lookup from normalized label → the map's own region name.
49
+ * Exact (normalized) names always win; alias-group members resolve to
50
+ * whichever member exists on the map, and never shadow a real region
51
+ * name.
52
+ */
53
+ export declare const buildRegionNameIndex: (regionNames: readonly string[]) => Map<string, string>;
54
+ export type RegionMapDatum = {
55
+ /** The map's own region name (echarts matches `data[].name` on it). */
56
+ name: string;
57
+ value: number;
58
+ };
59
+ export type RegionMapData = {
60
+ /** Matched regions, deduped by region (last value wins). */
61
+ data: RegionMapDatum[];
62
+ /** Labels that matched no region on the map — skipped, never fatal. */
63
+ unmatched: string[];
64
+ /** visualMap extent derived from the matched values. */
65
+ min: number;
66
+ max: number;
67
+ };
68
+ /**
69
+ * Assemble echarts `map`-series data from parallel label/value arrays
70
+ * (category domain = region labels, first series = values).
71
+ *
72
+ * - labels are matched exactly first, then through the normalization +
73
+ * alias layer; unmatched labels are collected (not thrown)
74
+ * - blank labels and non-finite values are skipped
75
+ * - duplicate labels collapse onto one region (last value wins)
76
+ * - min/max span the matched values; degenerate extents are widened so
77
+ * the visualMap ramp stays valid (no data → 0..1, all-equal → the
78
+ * value against 0, all-zero → 0..1)
79
+ */
80
+ export declare const buildRegionMapData: (labels: readonly MaybeLike<string | number>[], values: readonly MaybeLike<string | number | boolean>[], regionNames: readonly string[]) => RegionMapData;
81
+ /** Linear RGB mix of two 6-digit hex colors; `t` 0 → a, 1 → b. */
82
+ export declare const mixHexColors: (a: string, b: string, t: number) => string;
83
+ /**
84
+ * Sequential (single-hue, light→dark) color ramp for the choropleth's
85
+ * value scale, derived from the theme accent. Dark mode gets its own
86
+ * steps mixed toward the dark chart surface rather than a flipped
87
+ * light ramp, so low values stay legible on a dark background.
88
+ */
89
+ export declare const buildSequentialColorRamp: (accentColor: MaybeLike<string>, isDarkMode: boolean) => string[];
90
+ /**
91
+ * `console.warn` the unmatched region labels for a scope once — the
92
+ * chart re-renders on every data tick, so an unguarded warn would spam
93
+ * the console. Keyed by scope + label set; a different set of
94
+ * unmatched labels warns again.
95
+ */
96
+ export declare const warnOnceForUnmatchedRegions: (scope: string, unmatched: readonly string[]) => void;
97
+ /** Test hook — resets the warn-once registry. */
98
+ export declare const __resetRegionMapWarningsForTests: () => void;
99
+ export {};
100
+ //# sourceMappingURL=region-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region-map.d.ts","sourceRoot":"","sources":["../../../utils/region-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAEzC,uDAAuD;AACvD,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CACrC,KAAG,OAGoD,CAAC;AAEzD,wEAAwE;AACxE,eAAO,MAAM,eAAe,GAAI,KAAK,SAAS,CAAC,MAAM,CAAC,KAAG,MAGxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,SAAS,CAAC,MAAM,CAAC,KAAG,MAS3C,CAAC;AAEnB;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAqDpD,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,aAAa,SAAS,MAAM,EAAE,KAC7B,GAAG,CAAC,MAAM,EAAE,MAAM,CA2BpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,4DAA4D;IAC5D,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,uEAAuE;IACvE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAOF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,SAAS,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC7C,QAAQ,SAAS,SAAS,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,EACvD,aAAa,SAAS,MAAM,EAAE,KAC7B,aAiCF,CAAC;AAeF,kEAAkE;AAClE,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAU9D,CAAC;AAOF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,aAAa,SAAS,CAAC,MAAM,CAAC,EAC9B,YAAY,OAAO,KAClB,MAAM,EAWR,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GACtC,OAAO,MAAM,EACb,WAAW,SAAS,MAAM,EAAE,KAC3B,IAUF,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,gCAAgC,QAAO,IAEnD,CAAC"}