@svgrid/grid 3.0.3 → 3.0.4

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/README.md +2 -1
  2. package/dist/GridMenus.svelte +44 -2
  3. package/dist/SvChartMenu.svelte +69 -0
  4. package/dist/SvChartMenu.svelte.d.ts +11 -0
  5. package/dist/SvChartPanes.svelte +113 -0
  6. package/dist/SvChartPanes.svelte.d.ts +20 -0
  7. package/dist/SvGrid.controller.svelte.d.ts +110 -39
  8. package/dist/SvGrid.controller.svelte.js +655 -200
  9. package/dist/SvGrid.css +105 -2
  10. package/dist/SvGrid.svelte +386 -514
  11. package/dist/SvGrid.types.d.ts +210 -9
  12. package/dist/SvGridCellEditor.svelte +17 -0
  13. package/dist/SvGridChart.svelte +2257 -329
  14. package/dist/SvGridChart.svelte.d.ts +6 -106
  15. package/dist/SvGridChart.types.d.ts +338 -0
  16. package/dist/SvGridChart.types.js +1 -0
  17. package/dist/SvGridChartBuilder.svelte +323 -0
  18. package/dist/SvGridChartBuilder.svelte.d.ts +34 -0
  19. package/dist/SvGridChartPanel.svelte +221 -275
  20. package/dist/SvGridChartPickers.svelte +417 -0
  21. package/dist/SvGridChartPickers.svelte.d.ts +70 -0
  22. package/dist/SvGridChartView.svelte +13 -14
  23. package/dist/SvModal.svelte +7 -1
  24. package/dist/SvModal.svelte.d.ts +5 -0
  25. package/dist/ai.d.ts +40 -8
  26. package/dist/ai.js +135 -24
  27. package/dist/aria.d.ts +11 -0
  28. package/dist/build-api.js +108 -22
  29. package/dist/cdn/GridMenus-7kbpnnBW.js +635 -0
  30. package/dist/cdn/GridMenus-BL7ZgQvU.js +636 -0
  31. package/dist/cdn/SvChartMenu-Bl6PBbkT.js +58 -0
  32. package/dist/cdn/SvChartMenu-FBSMINA6.js +59 -0
  33. package/dist/cdn/{SvDateRangeInput-DMLKmGEc.js → SvDateRangeInput-BeU_TkbQ.js} +15 -14
  34. package/dist/cdn/{SvDateRangeInput-CaOuMs8O.js → SvDateRangeInput-yX8vzleW.js} +38 -37
  35. package/dist/cdn/{SvDateTimePicker-sonaH0oh.js → SvDateTimePicker-DQwt4UAs.js} +139 -180
  36. package/dist/cdn/SvDateTimePicker-vNU6bZ-q.js +775 -0
  37. package/dist/cdn/{SvGridCellEditor-CjEJMJKc.js → SvGridCellEditor-B1p-vCK5.js} +188 -178
  38. package/dist/cdn/{SvGridCellEditor-BWnTi2N7.js → SvGridCellEditor-D_0q4xAu.js} +98 -88
  39. package/dist/cdn/SvGridChart-C3EWAZaM.js +3574 -0
  40. package/dist/cdn/SvGridChart-DzLkSwCH.js +3572 -0
  41. package/dist/cdn/SvGridChartBuilder-BE2T1ykB.js +783 -0
  42. package/dist/cdn/SvGridChartBuilder-CfII62sZ.js +784 -0
  43. package/dist/cdn/SvGridChartPanel-CCX5_Wgd.js +675 -0
  44. package/dist/cdn/SvGridChartPanel-xf4sWVTo.js +699 -0
  45. package/dist/cdn/SvGridChartView-CfuXmY5I.js +48 -0
  46. package/dist/cdn/SvGridChartView-DYwabQWj.js +47 -0
  47. package/dist/cdn/SvMenuList-CLN8OuIK.js +452 -0
  48. package/dist/cdn/SvMenuList-DkGhNKjf.js +451 -0
  49. package/dist/cdn/SvModal-BAE-pjZX.js +396 -0
  50. package/dist/cdn/SvModal-CIZWCcad.js +397 -0
  51. package/dist/cdn/chart-Dz7SqMXH.js +4341 -0
  52. package/dist/cdn/chart-export-BXqueeWJ.js +135 -0
  53. package/dist/cdn/chart-export-pdf-DONFUnNY.js +110 -0
  54. package/dist/cdn/chart-panel-messages-CUbf2R4i.js +1052 -0
  55. package/dist/cdn/chart-panel-messages-CmNrMdsr.js +1053 -0
  56. package/dist/cdn/chart-summary-BJW_tg_X.js +138 -0
  57. package/dist/cdn/chart-trend-CaN9mDEV.js +50 -0
  58. package/dist/cdn/chart-validate-HcOVFAfJ.js +188 -0
  59. package/dist/cdn/{column-resize-DsfNXMom.js → column-resize-DpmOLfRp.js} +3 -3
  60. package/dist/cdn/{date-format-BnnHlqGw.js → date-format-CtquV-p3.js} +583 -603
  61. package/dist/cdn/{date-format-BNii4zeD.js → date-format-D6KFzU_W.js} +347 -367
  62. package/dist/cdn/dismissable-DAHetSNk.js +44 -0
  63. package/dist/cdn/editor-contract-LXgQJAgd.js +22 -0
  64. package/dist/cdn/focus-trap-BBOQYBma.js +65 -0
  65. package/dist/cdn/{row-resize-BRcimkUT.js → row-resize-niQCp040.js} +44 -36
  66. package/dist/cdn/{src-D6XvA1Ij.js → src-BKhZ6eXd.js} +10227 -9787
  67. package/dist/cdn/{src-Bugf5XlI.js → src-V1uu8iE9.js} +6568 -6128
  68. package/dist/cdn/svgrid.js +26 -15
  69. package/dist/cdn/svgrid.svelte-external.js +26 -15
  70. package/dist/chart-axes.d.ts +53 -0
  71. package/dist/chart-axes.js +351 -0
  72. package/dist/chart-cartesian.d.ts +88 -0
  73. package/dist/chart-cartesian.js +1862 -0
  74. package/dist/chart-decimate.d.ts +51 -0
  75. package/dist/chart-decimate.js +199 -0
  76. package/dist/chart-export-pdf.d.ts +47 -0
  77. package/dist/chart-export-pdf.js +187 -0
  78. package/dist/chart-export.d.ts +2 -1
  79. package/dist/chart-export.js +18 -3
  80. package/dist/chart-financial.d.ts +91 -0
  81. package/dist/chart-financial.js +175 -0
  82. package/dist/chart-flow.d.ts +10 -0
  83. package/dist/chart-flow.js +298 -0
  84. package/dist/chart-format.d.ts +18 -0
  85. package/dist/chart-format.js +65 -0
  86. package/dist/chart-grid.d.ts +8 -0
  87. package/dist/chart-grid.js +190 -0
  88. package/dist/chart-hierarchy.d.ts +17 -0
  89. package/dist/chart-hierarchy.js +146 -0
  90. package/dist/chart-indicators.d.ts +115 -0
  91. package/dist/chart-indicators.js +389 -0
  92. package/dist/chart-messages.d.ts +95 -0
  93. package/dist/chart-messages.js +92 -0
  94. package/dist/chart-motion.d.ts +16 -0
  95. package/dist/chart-motion.js +141 -0
  96. package/dist/chart-panel-messages.d.ts +265 -0
  97. package/dist/chart-panel-messages.js +285 -0
  98. package/dist/chart-pivot.d.ts +87 -0
  99. package/dist/chart-pivot.js +156 -0
  100. package/dist/chart-polar.d.ts +25 -0
  101. package/dist/chart-polar.js +700 -0
  102. package/dist/chart-samples.d.ts +16 -0
  103. package/dist/chart-samples.js +153 -0
  104. package/dist/chart-scale.d.ts +113 -0
  105. package/dist/chart-scale.js +405 -0
  106. package/dist/chart-stats.d.ts +111 -0
  107. package/dist/chart-stats.js +419 -0
  108. package/dist/chart-stream.d.ts +45 -0
  109. package/dist/chart-stream.js +91 -0
  110. package/dist/chart-summary.d.ts +27 -0
  111. package/dist/chart-summary.js +205 -0
  112. package/dist/chart-sync.svelte.d.ts +32 -0
  113. package/dist/chart-sync.svelte.js +23 -0
  114. package/dist/chart-table.d.ts +35 -0
  115. package/dist/chart-table.js +165 -0
  116. package/dist/chart-trend.d.ts +19 -0
  117. package/dist/chart-trend.js +61 -0
  118. package/dist/chart-types.d.ts +1456 -0
  119. package/dist/chart-types.js +6 -0
  120. package/dist/chart-validate.d.ts +43 -0
  121. package/dist/chart-validate.js +272 -0
  122. package/dist/chart-zoom.d.ts +40 -0
  123. package/dist/chart-zoom.js +145 -0
  124. package/dist/chart.d.ts +186 -865
  125. package/dist/chart.js +460 -2204
  126. package/dist/clipboard.d.ts +1 -0
  127. package/dist/clipboard.js +137 -18
  128. package/dist/column-resize.d.ts +3 -0
  129. package/dist/column-resize.js +4 -1
  130. package/dist/columns.js +3 -0
  131. package/dist/command-context.d.ts +19 -0
  132. package/dist/command-context.js +116 -0
  133. package/dist/core.d.ts +7 -0
  134. package/dist/createPopoverSelect.svelte.d.ts +2 -2
  135. package/dist/editing.d.ts +2 -8
  136. package/dist/editing.js +262 -33
  137. package/dist/fill-patterns.d.ts +0 -5
  138. package/dist/fill-patterns.js +56 -2
  139. package/dist/grid-messages.d.ts +10 -3
  140. package/dist/grid-messages.js +5 -0
  141. package/dist/history.d.ts +83 -0
  142. package/dist/history.js +133 -0
  143. package/dist/index.d.ts +24 -6
  144. package/dist/index.js +20 -2
  145. package/dist/keyboard-handlers.js +88 -31
  146. package/dist/keyboard.d.ts +55 -0
  147. package/dist/keyboard.js +132 -0
  148. package/dist/menus.d.ts +3 -1
  149. package/dist/menus.js +7 -2
  150. package/dist/merges.d.ts +97 -0
  151. package/dist/merges.js +147 -0
  152. package/dist/row-resize.d.ts +3 -0
  153. package/dist/row-resize.js +14 -0
  154. package/dist/scroll-sync.d.ts +1 -0
  155. package/dist/scroll-sync.js +24 -0
  156. package/dist/selection.d.ts +16 -0
  157. package/dist/selection.js +108 -16
  158. package/dist/shortcut-registry.d.ts +145 -0
  159. package/dist/shortcut-registry.js +44 -0
  160. package/dist/svgrid-wrapper.types.d.ts +213 -22
  161. package/dist/virtualization/virtualizer.js +38 -17
  162. package/package.json +6 -1
  163. package/src/GridMenus.svelte +44 -2
  164. package/src/SvChartMenu.svelte +69 -0
  165. package/src/SvChartPanes.svelte +113 -0
  166. package/src/SvChartPanes.test.ts +66 -0
  167. package/src/SvGrid.controller.svelte.ts +629 -172
  168. package/src/SvGrid.css +105 -2
  169. package/src/SvGrid.svelte +386 -514
  170. package/src/SvGrid.types.ts +188 -8
  171. package/src/SvGridCellEditor.svelte +17 -0
  172. package/src/SvGridChart.svelte +2257 -329
  173. package/src/SvGridChart.test.ts +1419 -1
  174. package/src/SvGridChart.types.ts +336 -0
  175. package/src/SvGridChartBuilder.svelte +323 -0
  176. package/src/SvGridChartPanel.svelte +221 -275
  177. package/src/SvGridChartPickers.svelte +417 -0
  178. package/src/SvGridChartView.svelte +13 -14
  179. package/src/SvModal.svelte +7 -1
  180. package/src/SvModal.test.ts +9 -0
  181. package/src/ai.test.ts +57 -2
  182. package/src/ai.ts +166 -22
  183. package/src/aria.d.ts +11 -0
  184. package/src/build-api.coverage.test.ts +184 -0
  185. package/src/build-api.ts +107 -18
  186. package/src/chart-axes.test.ts +573 -0
  187. package/src/chart-axes.ts +342 -0
  188. package/src/chart-cartesian.ts +1863 -0
  189. package/src/chart-decimate.test.ts +249 -0
  190. package/src/chart-decimate.ts +186 -0
  191. package/src/chart-export-pdf.test.ts +91 -0
  192. package/src/chart-export-pdf.ts +207 -0
  193. package/src/chart-export.test.ts +14 -0
  194. package/src/chart-export.ts +13 -3
  195. package/src/chart-financial.ts +208 -0
  196. package/src/chart-flow.ts +286 -0
  197. package/src/chart-format.ts +67 -0
  198. package/src/chart-grid.ts +179 -0
  199. package/src/chart-hierarchy.ts +135 -0
  200. package/src/chart-indicators.test.ts +443 -0
  201. package/src/chart-indicators.ts +384 -0
  202. package/src/chart-messages.test.ts +21 -0
  203. package/src/chart-messages.ts +184 -0
  204. package/src/chart-motion.test.ts +71 -0
  205. package/src/chart-motion.ts +148 -0
  206. package/src/chart-panel-messages.test.ts +29 -0
  207. package/src/chart-panel-messages.ts +550 -0
  208. package/src/chart-pivot.test.ts +54 -0
  209. package/src/chart-pivot.ts +225 -0
  210. package/src/chart-polar.ts +674 -0
  211. package/src/chart-samples.ts +106 -0
  212. package/src/chart-scale.ts +394 -0
  213. package/src/chart-series-types.test.ts +714 -0
  214. package/src/chart-stats.ts +409 -0
  215. package/src/chart-stream.test.ts +75 -0
  216. package/src/chart-stream.ts +114 -0
  217. package/src/chart-summary.test.ts +90 -0
  218. package/src/chart-summary.ts +197 -0
  219. package/src/chart-sync.svelte.ts +41 -0
  220. package/src/chart-table.test.ts +76 -0
  221. package/src/chart-table.ts +178 -0
  222. package/src/chart-trend.ts +47 -0
  223. package/src/chart-types.ts +1309 -0
  224. package/src/chart-validate.test.ts +100 -0
  225. package/src/chart-validate.ts +247 -0
  226. package/src/chart-zoom.test.ts +137 -0
  227. package/src/chart-zoom.ts +124 -0
  228. package/src/chart.coverage.test.ts +81 -0
  229. package/src/chart.test.ts +56 -3
  230. package/src/chart.ts +557 -2784
  231. package/src/clipboard.test.ts +151 -0
  232. package/src/clipboard.ts +145 -16
  233. package/src/column-resize.ts +7 -1
  234. package/src/columns.ts +2 -0
  235. package/src/command-context.test.ts +200 -0
  236. package/src/command-context.ts +137 -0
  237. package/src/core.ts +7 -0
  238. package/src/editing.test.ts +281 -3
  239. package/src/editing.ts +256 -38
  240. package/src/fill-patterns.test.ts +35 -0
  241. package/src/fill-patterns.ts +56 -2
  242. package/src/grid-messages.ts +16 -3
  243. package/src/history.test.ts +196 -0
  244. package/src/history.ts +162 -0
  245. package/src/icon-seam.test.ts +3 -2
  246. package/src/index.ts +150 -2
  247. package/src/keyboard-handlers.coverage.test.ts +126 -6
  248. package/src/keyboard-handlers.ts +91 -30
  249. package/src/keyboard-shortcuts.seam.test.ts +200 -0
  250. package/src/keyboard.test.ts +124 -1
  251. package/src/keyboard.ts +142 -0
  252. package/src/menus.test.ts +26 -0
  253. package/src/menus.ts +10 -3
  254. package/src/merges.test.ts +112 -0
  255. package/src/merges.ts +168 -0
  256. package/src/pivot.grid.test.ts +40 -5
  257. package/src/row-resize.test.ts +44 -0
  258. package/src/row-resize.ts +17 -0
  259. package/src/scroll-sync.test.ts +42 -1
  260. package/src/scroll-sync.ts +25 -0
  261. package/src/selection.multi-range.test.ts +34 -0
  262. package/src/selection.test.ts +30 -2
  263. package/src/selection.ts +111 -19
  264. package/src/shortcut-registry.test.ts +97 -0
  265. package/src/shortcut-registry.ts +181 -0
  266. package/src/svgrid-wrapper.types.ts +184 -13
  267. package/src/svgrid.behavior.test.ts +135 -0
  268. package/src/svgrid.charting.test.ts +513 -3
  269. package/src/svgrid.context-menu.test.ts +31 -0
  270. package/src/svgrid.new-features.wrapper.test.ts +10 -3
  271. package/src/virtualization/virtualizer.ts +39 -17
  272. package/dist/cdn/GridMenus-CHOMnW-c.js +0 -602
  273. package/dist/cdn/GridMenus-DhdPF700.js +0 -603
  274. package/dist/cdn/SvDateTimePicker-CCbDZNZB.js +0 -816
  275. package/dist/cdn/SvGridChart-1PMSp2LZ.js +0 -1481
  276. package/dist/cdn/SvGridChart-D02avhyr.js +0 -1480
  277. package/dist/cdn/SvGridChartPanel-DJnViOv4.js +0 -834
  278. package/dist/cdn/SvGridChartPanel-vPTNerFZ.js +0 -810
  279. package/dist/cdn/SvGridChartView-C--HhdUo.js +0 -56
  280. package/dist/cdn/SvGridChartView-KyyFG-wY.js +0 -55
  281. package/dist/cdn/chart-DLg3_zTQ.js +0 -1652
@@ -1,1652 +0,0 @@
1
- import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
- import { r as t } from "./cell-formatting-C2Hf5gqd.js";
3
- //#region src/chart.ts
4
- var n = /* @__PURE__ */ e({
5
- DEFAULT_PALETTE: () => o,
6
- boxStats: () => r,
7
- buildChart: () => j,
8
- buildLinePath: () => b,
9
- chartScales: () => y,
10
- computeOverlay: () => T,
11
- exponentialMovingAverage: () => w,
12
- formatChartValue: () => O,
13
- linearTrend: () => S,
14
- niceLogScale: () => _,
15
- niceScale: () => E,
16
- ordinalDateTicks: () => A,
17
- pickContrastText: () => g,
18
- rowsToBoxSpec: () => I,
19
- rowsToChartSpec: () => N,
20
- rowsToDirectSpec: () => ae,
21
- rowsToGaugeSpec: () => R,
22
- rowsToScatterSpec: () => L,
23
- sampleGradient: () => m,
24
- simpleMovingAverage: () => C,
25
- sliceChartWindow: () => M,
26
- specToCalendar: () => F,
27
- specToSankey: () => ie,
28
- specToTreemap: () => P
29
- });
30
- function r(e, t = 1.5) {
31
- let n = e.filter((e) => Number.isFinite(e)).slice().sort((e, t) => e - t);
32
- if (!n.length) return null;
33
- let r = (e) => {
34
- let t = (n.length - 1) * e, r = Math.floor(t), i = Math.ceil(t);
35
- return r === i ? n[r] : n[r] + (n[i] - n[r]) * (t - r);
36
- }, i = r(.25), a = r(.5), o = r(.75), s = i - t * (o - i), c = o + t * (o - i), l = n.filter((e) => e >= s && e <= c), u = n.filter((e) => e < s || e > c);
37
- return {
38
- min: l.length ? l[0] : n[0],
39
- q1: i,
40
- median: a,
41
- q3: o,
42
- max: l.length ? l[l.length - 1] : n[n.length - 1],
43
- ...u.length ? { outliers: u } : {}
44
- };
45
- }
46
- function i(e, t, n, r) {
47
- let i = Math.max(1, Math.ceil((r ? 18 : 60) / Math.max(n, .001))), a = [];
48
- for (let n = 0; n < e.length; n += i) a.push({
49
- label: e[n],
50
- x: t(n)
51
- });
52
- return a;
53
- }
54
- function a(e, t) {
55
- if (e == null) return null;
56
- if (typeof e == "number") {
57
- if (!Number.isFinite(e)) return null;
58
- let n = Math.abs(e);
59
- return {
60
- lo: t - n,
61
- hi: t + n
62
- };
63
- }
64
- return !Number.isFinite(e.lo) || !Number.isFinite(e.hi) ? null : {
65
- lo: Math.min(e.lo, e.hi),
66
- hi: Math.max(e.lo, e.hi)
67
- };
68
- }
69
- var o = [
70
- "#2563eb",
71
- "#16a34a",
72
- "#f59e0b",
73
- "#ef4444",
74
- "#8b5cf6",
75
- "#0ea5e9",
76
- "#ec4899",
77
- "#14b8a6"
78
- ];
79
- function s(e) {
80
- return Math.round(e * 100) / 100;
81
- }
82
- function c(e, t) {
83
- if (e <= 0) return 1;
84
- let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
85
- return i = t ? r < 1.5 ? 1 : r < 3 ? 2 : r < 7 ? 5 : 10 : r <= 1 ? 1 : r <= 2 ? 2 : r <= 5 ? 5 : 10, i * 10 ** n;
86
- }
87
- var l = [
88
- "#eff6ff",
89
- "#bfdbfe",
90
- "#60a5fa",
91
- "#2563eb",
92
- "#1e3a8a"
93
- ], u = [
94
- "#b91c1c",
95
- "#fca5a5",
96
- "#f1f5f9",
97
- "#93c5fd",
98
- "#1d4ed8"
99
- ], d = [
100
- "#1c2c4d",
101
- "#1d4ed8",
102
- "#3b82f6",
103
- "#60a5fa",
104
- "#bae6fd"
105
- ], f = [
106
- "#f87171",
107
- "#b91c1c",
108
- "#222b3d",
109
- "#1d4ed8",
110
- "#60a5fa"
111
- ];
112
- function p(e, t, n, r = "light") {
113
- if (Array.isArray(e) && e.length >= 2) return e;
114
- let i = r === "dark";
115
- return e === "diverging" || e == null && t < 0 && n > 0 ? i ? f : u : i ? d : l;
116
- }
117
- function m(e, t) {
118
- if (!e.length) return "#888";
119
- let n = Math.max(0, Math.min(1, t));
120
- if (e.length === 1) return e[0];
121
- let r = n * (e.length - 1), i = Math.floor(r), a = r - i, o = h(e[i]), s = h(e[Math.min(e.length - 1, i + 1)]);
122
- if (!o || !s) return e[i] ?? "#888";
123
- let c = (e, t) => Math.round(e + (t - e) * a), l = (e) => e.toString(16).padStart(2, "0");
124
- return "#" + l(c(o.r, s.r)) + l(c(o.g, s.g)) + l(c(o.b, s.b));
125
- }
126
- function h(e) {
127
- let t = /^#?([0-9a-f]{6})$/i.exec(e.trim());
128
- if (!t) return null;
129
- let n = parseInt(t[1], 16);
130
- return {
131
- r: n >> 16 & 255,
132
- g: n >> 8 & 255,
133
- b: n & 255
134
- };
135
- }
136
- function g(e) {
137
- let t = h(e);
138
- if (!t) return "#0f172a";
139
- let n = (e) => {
140
- let t = e / 255;
141
- return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
142
- };
143
- return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b) > .5 ? "#0f172a" : "#ffffff";
144
- }
145
- function _(e, t) {
146
- (!Number.isFinite(e) || e <= 0) && (e = 1), (!Number.isFinite(t) || t <= e) && (t = e * 10);
147
- let n = Math.floor(Math.log10(e)), r = Math.ceil(Math.log10(t)), i = [];
148
- for (let e = n; e <= r; e += 1) i.push(10 ** e);
149
- return {
150
- min: 10 ** n,
151
- max: 10 ** r,
152
- step: 10,
153
- ticks: i
154
- };
155
- }
156
- function v(e, t, n, r) {
157
- return Number.isFinite(e) ? r ? e <= 0 || t <= 0 ? null : (Math.log10(e) - Math.log10(t)) / (Math.log10(n) - Math.log10(t)) : (e - t) / (n - t) : null;
158
- }
159
- function y(e) {
160
- let t = e.axes;
161
- if (!t) return null;
162
- let { x: n, y: r, h: i } = e.plot, a = (e) => (t) => {
163
- let n = v(t, e.min, e.max, e.log);
164
- return n === null ? NaN : r + i - n * i;
165
- }, o = a(t.y), s = t.y2 ? a(t.y2) : o, c = (e) => (t) => {
166
- let n = i === 0 ? 0 : (r + i - t) / i;
167
- if (!e.log) return e.min + n * (e.max - e.min);
168
- let a = Math.log10(e.min);
169
- return 10 ** (a + n * (Math.log10(e.max) - a));
170
- };
171
- return {
172
- xOf: (e) => n + t.slot * e + t.slot / 2,
173
- yOf: (e, t) => t === "right" ? s(e) : o(e),
174
- xInvert: (e) => Math.max(0, Math.min(t.count - 1, Math.floor((e - n) / (t.slot || 1)))),
175
- yInvert: (e, n) => n === "right" && t.y2 ? c(t.y2)(e) : c(t.y)(e)
176
- };
177
- }
178
- function b(e, t) {
179
- if (!t) {
180
- let t = "", n = !1;
181
- for (let r of e) {
182
- if (!r.defined) {
183
- n = !1;
184
- continue;
185
- }
186
- t += `${n ? "L" : "M"}${r.x},${r.y} `, n = !0;
187
- }
188
- return t.trim();
189
- }
190
- let n = [], r = [];
191
- for (let t of e) t.defined ? r.push({
192
- x: t.x,
193
- y: t.y
194
- }) : r.length && (n.push(r), r = []);
195
- return r.length && n.push(r), n.map(x).filter(Boolean).join(" ");
196
- }
197
- function x(e) {
198
- let t = e.length;
199
- if (t === 0) return "";
200
- if (t === 1) return `M${e[0].x},${e[0].y}`;
201
- if (t === 2) return `M${e[0].x},${e[0].y} L${e[1].x},${e[1].y}`;
202
- let n = Array(t - 1), r = Array(t - 1);
203
- for (let i = 0; i < t - 1; i += 1) {
204
- let t = e[i + 1].x - e[i].x;
205
- n[i] = t, r[i] = t === 0 ? 0 : (e[i + 1].y - e[i].y) / t;
206
- }
207
- let i = Array(t);
208
- i[0] = r[0], i[t - 1] = r[t - 2];
209
- for (let e = 1; e < t - 1; e += 1) r[e - 1] * r[e] <= 0 ? i[e] = 0 : i[e] = (r[e - 1] + r[e]) / 2;
210
- for (let e = 0; e < t - 1; e += 1) {
211
- if (r[e] === 0) {
212
- i[e] = 0, i[e + 1] = 0;
213
- continue;
214
- }
215
- let t = i[e] / r[e], n = i[e + 1] / r[e], a = Math.hypot(t, n);
216
- a > 3 && (i[e] = 3 / a * t * r[e], i[e + 1] = 3 / a * n * r[e]);
217
- }
218
- let a = `M${e[0].x},${e[0].y}`;
219
- for (let r = 0; r < t - 1; r += 1) {
220
- let t = n[r], o = e[r].x + t / 3, s = e[r].y + i[r] * t / 3, c = e[r + 1].x - t / 3, l = e[r + 1].y - i[r + 1] * t / 3;
221
- a += ` C${o},${s} ${c},${l} ${e[r + 1].x},${e[r + 1].y}`;
222
- }
223
- return a;
224
- }
225
- function S(e) {
226
- let t = 0, n = 0, r = 0, i = 0, a = 0;
227
- for (let o = 0; o < e.length; o += 1) {
228
- let s = e[o];
229
- Number.isFinite(s) && (t += 1, n += o, r += s, i += o * o, a += o * s);
230
- }
231
- if (t < 2) return e.map(() => NaN);
232
- let o = t * i - n * n;
233
- if (o === 0) return e.map(() => r / t);
234
- let s = (t * a - n * r) / o, c = (r - s * n) / t;
235
- return e.map((e, t) => s * t + c);
236
- }
237
- function C(e, t) {
238
- if (t < 1) return e.slice();
239
- let n = Array(e.length).fill(NaN), r = 0, i = 0;
240
- for (let a = 0; a < e.length; a += 1) {
241
- let o = e[a];
242
- if (Number.isFinite(o) && (r += o, i += 1), a >= t) {
243
- let n = e[a - t];
244
- Number.isFinite(n) && (r -= n, --i);
245
- }
246
- a >= t - 1 && i > 0 && (n[a] = r / i);
247
- }
248
- return n;
249
- }
250
- function w(e, t) {
251
- let n = 2 / (Math.max(1, t) + 1), r = Array(e.length).fill(NaN), i = null;
252
- for (let t = 0; t < e.length; t += 1) {
253
- let a = e[t];
254
- if (!Number.isFinite(a)) {
255
- r[t] = i ?? NaN;
256
- continue;
257
- }
258
- i = i == null ? a : n * a + (1 - n) * i, r[t] = i;
259
- }
260
- return r;
261
- }
262
- function T(e, t) {
263
- if (t === "linear") return S(e);
264
- let n = /^(sma|ema):(\d+)$/.exec(t);
265
- if (!n) return e.map(() => NaN);
266
- let r = Number(n[2]);
267
- return n[1] === "ema" ? w(e, r) : C(e, r);
268
- }
269
- function E(e, t, n = 4) {
270
- (!Number.isFinite(e) || !Number.isFinite(t)) && (e = 0, t = 1), e === t && (e === 0 ? t = 1 : (e = Math.min(0, e), t = Math.max(0, t)), e === t && (t = e + 1));
271
- let r = c(c(t - e, !1) / Math.max(1, n), !0), i = Math.floor(e / r) * r, a = Math.ceil(t / r) * r, o = [];
272
- for (let e = i; e <= a + r * .5; e += r) o.push(s(e));
273
- return {
274
- min: i,
275
- max: a,
276
- step: r,
277
- ticks: o
278
- };
279
- }
280
- function D(e) {
281
- let t = Math.abs(e);
282
- return t >= 1e6 ? `${(e / 1e6).toFixed(t % 1e6 ? 1 : 0)}M` : t >= 1e3 ? `${(e / 1e3).toFixed(t % 1e3 ? 1 : 0)}k` : String(Math.round(e * 100) / 100);
283
- }
284
- function O(e, n, r) {
285
- if (!Number.isFinite(e)) return "";
286
- if (r && (r.locale || r.currency)) {
287
- let i = n === "currency" ? "currency" : n === "percent" ? "percent" : "decimal", a = {
288
- notation: "compact",
289
- maximumFractionDigits: 1
290
- };
291
- return i === "currency" ? (a.style = "currency", a.currency = r.currency || "USD") : i === "percent" && (a.style = "percent"), t(r.locale, a).format(e);
292
- }
293
- if (n === "currency") return `${e < 0 ? "-" : ""}$${D(Math.abs(e))}`;
294
- if (n === "percent") {
295
- let t = e * 100;
296
- return `${Math.round(t * 10) / 10}%`;
297
- }
298
- return D(e);
299
- }
300
- var k = 864e5;
301
- function ee(e, t) {
302
- let n = t - e, r = n <= 7 * k ? k : n <= 70 * k ? 7 * k : n <= 800 * k ? 30 * k : 365 * k, i = [];
303
- for (let n = Math.ceil(e / r) * r; n <= t + 1; n += r) i.push(n);
304
- return i.length || i.push(e, t), i;
305
- }
306
- function A(e, t = 6) {
307
- if (e.length <= 1) return e.length ? [0] : [];
308
- let n = {
309
- day: (e) => `${e.getUTCFullYear()}-${e.getUTCMonth()}-${e.getUTCDate()}`,
310
- week: (e) => Math.floor((Date.UTC(e.getUTCFullYear(), e.getUTCMonth(), e.getUTCDate()) / k + 4) / 7),
311
- month: (e) => `${e.getUTCFullYear()}-${e.getUTCMonth()}`,
312
- year: (e) => e.getUTCFullYear()
313
- }, r = null;
314
- for (let i of [
315
- "day",
316
- "week",
317
- "month",
318
- "year"
319
- ]) {
320
- let a = [], o = null;
321
- for (let t = 0; t < e.length; t += 1) {
322
- let r = e[t];
323
- if (!Number.isFinite(r)) continue;
324
- let s = n[i](new Date(r));
325
- s !== o && a.push(t), o = s;
326
- }
327
- if (r = a, a.length <= t * 2) break;
328
- }
329
- let i = r ?? [];
330
- if (i.length > t) {
331
- let e = Math.ceil(i.length / t);
332
- i = i.filter((t, n) => n % e === 0);
333
- }
334
- if (i.length < 2) {
335
- let n = Math.max(1, Math.ceil(e.length / t));
336
- i = e.map((e, t) => t).filter((e) => e % n === 0);
337
- }
338
- return i;
339
- }
340
- function te(e, t) {
341
- let n = new Date(e);
342
- return t <= 70 * k ? n.toLocaleDateString(void 0, {
343
- month: "short",
344
- day: "numeric"
345
- }) : t <= 800 * k ? n.toLocaleDateString(void 0, {
346
- month: "short",
347
- year: "2-digit"
348
- }) : String(n.getFullYear());
349
- }
350
- function ne(e, t) {
351
- let n = e.type ?? t;
352
- return n === "candlestick" || n === "ohlc" || e.ohlc ? "candle" : n === "boxplot" || e.boxes ? "box" : n === "line" || n === "area" ? n : "bar";
353
- }
354
- function re(e, t, n, r = [], i = !1) {
355
- let o = Infinity, s = -Infinity, c = (e) => {
356
- Number.isFinite(e) && (i && e <= 0 || (e < o && (o = e), e > s && (s = e)));
357
- };
358
- for (let e of r) c(e);
359
- let l = e.filter((e) => e.kind === "bar" || e.kind === "area"), u = e.filter((e) => e.kind === "line");
360
- if (n && l.length) for (let e = 0; e < t.length; e += 1) {
361
- let t = 0, n = 0;
362
- for (let r of l) {
363
- let i = r.values[e] ?? 0;
364
- i >= 0 ? t += i : n += i;
365
- }
366
- c(t), c(n);
367
- }
368
- else for (let e of l) for (let t of e.values) c(t);
369
- for (let e of u) for (let t of e.values) c(t);
370
- for (let t of e) if (t.kind === "candle") for (let e of t.ohlc ?? []) e && (c(e.h), c(e.l));
371
- for (let t of e) if (t.kind === "box") {
372
- for (let e of t.boxes ?? []) if (e) {
373
- c(e.min), c(e.max);
374
- for (let t of e.outliers ?? []) c(t);
375
- }
376
- }
377
- for (let t of e) t.errors && t.errors.forEach((e, n) => {
378
- let r = a(e, t.values[n] ?? 0);
379
- r && (c(r.lo), c(r.hi));
380
- });
381
- return o === Infinity && (o = +!!i, s = i ? 10 : 1), l.length && !i && (o = Math.min(o, 0), s = Math.max(s, 0)), i ? _(o, s) : E(o, s);
382
- }
383
- function j(e, t = "light") {
384
- let n = e.width ?? 520, r = e.height ?? 300, c = e.palette ?? o, l = !!(e.stacked || e.stacked100), u = e.series.map((t, n) => ({
385
- ...t,
386
- color: t.color ?? c[n % c.length],
387
- kind: ne(t, e.type),
388
- axis: t.axis ?? "left"
389
- })), d = u.map((e) => ({
390
- label: e.label,
391
- color: e.color
392
- })), f = {
393
- type: e.type,
394
- width: n,
395
- height: r,
396
- plot: {
397
- x: 0,
398
- y: 0,
399
- w: n,
400
- h: r
401
- },
402
- axes: null,
403
- bars: [],
404
- candles: [],
405
- boxes: [],
406
- errorBars: [],
407
- lines: [],
408
- slices: [],
409
- yTicks: [],
410
- y2Ticks: [],
411
- hasRightAxis: !1,
412
- xTicks: [],
413
- categoryGroupTicks: [],
414
- xLabelRotated: !1,
415
- legend: d,
416
- donut: null,
417
- referenceLines: [],
418
- scatterPoints: [],
419
- orientation: "vertical",
420
- valueTicks: [],
421
- catTicks: [],
422
- referenceLinesV: [],
423
- overlays: [],
424
- annotations: [],
425
- heatmapCells: [],
426
- heatmapRowTicks: [],
427
- heatmapColTicks: [],
428
- heatmapLegend: [],
429
- funnelSegments: [],
430
- radarRings: [],
431
- radarAxes: [],
432
- radarSeries: [],
433
- radarCenter: null,
434
- treemapCells: [],
435
- calendarCells: [],
436
- calendarMonthTicks: [],
437
- calendarLegend: [],
438
- gauge: null,
439
- sankeyNodes: [],
440
- sankeyLinks: []
441
- };
442
- if (e.type === "waterfall") {
443
- let t = u[0];
444
- if (!t) return { ...f };
445
- let i = e.waterfallColors ?? {}, a = i.positive ?? "#16a34a", o = i.negative ?? "#ef4444", c = i.total ?? "#475569", l = e.categories.reduce((e, t) => Math.max(e, t.length), 0), d = e.categories.length > 8 || l > 9, p = 48 + (e.yAxisTitle ? 16 : 0), m = (d ? 54 : 28) + (e.xAxisTitle ? 16 : 0), h = Math.max(1, n - p - 12), g = Math.max(1, r - 10 - m), _ = {
446
- x: p,
447
- y: 10,
448
- w: h,
449
- h: g
450
- }, v = e.waterfallTotals ?? [], y = [], b = 0;
451
- e.categories.forEach((e, n) => {
452
- let r = t.values[n] ?? 0;
453
- v[n] ? y.push({
454
- from: 0,
455
- to: b,
456
- value: b,
457
- isTotal: !0
458
- }) : (y.push({
459
- from: b,
460
- to: b + r,
461
- value: r,
462
- isTotal: !1
463
- }), b += r);
464
- });
465
- let x = 0, S = 0;
466
- for (let e of y) e.from < x && (x = e.from), e.to < x && (x = e.to), e.from > S && (S = e.from), e.to > S && (S = e.to);
467
- let C = E(x, S), w = (e) => s(10 + g - (e - C.min) / (C.max - C.min || 1) * g), T = h / Math.max(1, e.categories.length), D = T * .2, k = Math.max(1, T - D), ee = y.map((n, r) => {
468
- let i = w(Math.max(n.from, n.to)), l = w(Math.min(n.from, n.to)), u = p + T * r + D / 2, d = n.isTotal ? c : n.value >= 0 ? a : o;
469
- return {
470
- x: s(u),
471
- y: i,
472
- w: s(k),
473
- h: Math.max(1, l - i),
474
- color: d,
475
- label: e.categories[r] ?? String(r),
476
- series: t.label,
477
- value: n.value
478
- };
479
- }), A = [{
480
- path: y.map((e, t) => {
481
- let n = p + T * t + D / 2 + k, r = w(e.to), i = p + T * (t + 1) + D / 2;
482
- return t < y.length - 1 ? `M${n},${r} L${i},${r}` : "";
483
- }).filter(Boolean).join(" "),
484
- areaPath: "",
485
- color: "var(--sg-muted, #94a3b8)",
486
- label: "",
487
- points: []
488
- }], te = e.categories.map((e, t) => ({
489
- label: e,
490
- x: s(p + T * t + T / 2)
491
- })), ne = C.ticks.map((t) => ({
492
- value: t,
493
- y: w(t),
494
- label: O(t, e.valueFormat, e)
495
- }));
496
- return {
497
- ...f,
498
- plot: _,
499
- bars: ee,
500
- lines: A,
501
- yTicks: ne,
502
- xTicks: te,
503
- xLabelRotated: d
504
- };
505
- }
506
- if (e.type === "funnel") {
507
- let t = u[0];
508
- if (!t || !t.values.length) return { ...f };
509
- let i = Math.max(1, n - 20 - 20), a = Math.max(1, r - 16 - 16), s = {
510
- x: 20,
511
- y: 16,
512
- w: i,
513
- h: a
514
- }, c = a / t.values.length, l = Math.max(...t.values.map((e) => Number.isFinite(e) ? e : 0)), d = t.values[0] ?? 0, p = (e) => l > 0 ? e / l * i : 0, m = 20 + i / 2, h = e.palette ?? o, _ = t.values.map((n, r) => {
515
- let i = t.values[r + 1] ?? n * .8, a = p(n), o = p(i), s = 16 + c * r, l = s + c, u = `M${m - a / 2},${s} L${m + a / 2},${s} L${m + o / 2},${l} L${m - o / 2},${l} Z`, f = t.color ?? h[r % h.length];
516
- return {
517
- path: u,
518
- color: f,
519
- label: e.categories[r] ?? t.label,
520
- value: n,
521
- conversion: d > 0 ? n / d : 0,
522
- dropoff: r === 0 ? 0 : (t.values[r - 1] ?? n) > 0 ? 1 - n / (t.values[r - 1] ?? n) : 0,
523
- cx: m,
524
- cy: (s + l) / 2,
525
- textColor: g(f)
526
- };
527
- });
528
- return {
529
- ...f,
530
- plot: s,
531
- funnelSegments: _
532
- };
533
- }
534
- if (e.type === "radar") {
535
- if (!u.length || !e.categories.length) return { ...f };
536
- let t = Math.max(1, n - 30 - 30), i = Math.max(1, r - 24 - 24), a = {
537
- x: 30,
538
- y: 24,
539
- w: t,
540
- h: i
541
- }, c = 30 + t / 2, l = 24 + i / 2, d = Math.max(20, Math.min(t, i) / 2 - 20), p = e.categories, m = p.length, h = 0;
542
- for (let e of u) for (let t of e.values) Number.isFinite(t) && t > h && (h = t);
543
- h === 0 && (h = 1);
544
- let g = Array.from({ length: 5 }, (e, t) => (t + 1) / 5 * h), _ = (e) => -Math.PI / 2 + e / m * Math.PI * 2, v = (e, t) => {
545
- let n = t / h, r = _(e);
546
- return {
547
- x: s(c + d * n * Math.cos(r)),
548
- y: s(l + d * n * Math.sin(r))
549
- };
550
- }, y = p.map((e, t) => {
551
- let n = v(t, h);
552
- return {
553
- label: e,
554
- x: n.x,
555
- y: n.y
556
- };
557
- }), b = u.map((t, n) => {
558
- let r = t.values.map((e, t) => {
559
- let n = v(t, Number.isFinite(e) ? e : 0);
560
- return {
561
- x: n.x,
562
- y: n.y,
563
- value: e,
564
- axis: p[t] ?? ""
565
- };
566
- }), i = r.length ? r.map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`).join(" ") + " Z" : "", a = e.palette ?? o;
567
- return {
568
- label: t.label,
569
- color: t.color ?? a[n % a.length],
570
- path: i,
571
- points: r
572
- };
573
- });
574
- return {
575
- ...f,
576
- plot: a,
577
- radarRings: g,
578
- radarAxes: y,
579
- radarSeries: b,
580
- radarCenter: {
581
- cx: c,
582
- cy: l,
583
- r: d
584
- }
585
- };
586
- }
587
- if (e.type === "calendar") {
588
- let i = e.calendarValues ?? [];
589
- if (!i.length && !e.calendarStart) return { ...f };
590
- let a = /* @__PURE__ */ new Map(), o = Infinity, s = -Infinity;
591
- for (let e of i) a.set(e.date, e.value), Number.isFinite(e.value) && (e.value < o && (o = e.value), e.value > s && (s = e.value));
592
- o === Infinity && (o = 0, s = 1), o === s && (s = o + 1);
593
- let c = p(e.colorScale, o, s, t), l = (e) => m(c, (e - o) / (s - o)), u = i.map((e) => e.date).sort(), d = e.calendarStart ?? u[0] ?? "2026-01-01", h = e.calendarEnd ?? u[u.length - 1] ?? d, g = /* @__PURE__ */ new Date(d + "T00:00:00Z"), _ = /* @__PURE__ */ new Date(h + "T00:00:00Z");
594
- g.setUTCDate(g.getUTCDate() - g.getUTCDay()), _.setUTCDate(_.getUTCDate() + (6 - _.getUTCDay()));
595
- let v = Math.round((_.getTime() - g.getTime()) / 864e5) + 1, y = Math.ceil(v / 7), b = Math.max(1, n - 36 - 80), x = Math.max(1, r - 26 - 16), S = Math.floor(b / y), C = Math.floor(x / 7), w = Math.max(6, Math.min(S, C)), T = {
596
- x: 36,
597
- y: 26,
598
- w: w * y,
599
- h: w * 7
600
- }, E = [], D = -1, k = [];
601
- for (let e = 0; e < v; e += 1) {
602
- let t = new Date(g.getTime() + e * 864e5), n = Math.floor(e / 7), r = e % 7, i = t.toISOString().slice(0, 10), o = a.has(i), s = a.get(i) ?? 0;
603
- E.push({
604
- x: 36 + n * w,
605
- y: 26 + r * w,
606
- size: w,
607
- date: i,
608
- value: s,
609
- defined: o,
610
- color: o ? l(s) : "transparent"
611
- }), t.getUTCDate() === 1 && t.getUTCMonth() !== D && (D = t.getUTCMonth(), k.push({
612
- label: t.toLocaleDateString(void 0, { month: "short" }),
613
- x: 36 + n * w
614
- }));
615
- }
616
- let ee = Array.from({ length: 5 }, (t, n) => {
617
- let r = n / 4, i = o + (s - o) * r;
618
- return {
619
- value: i,
620
- color: l(i),
621
- label: O(i, e.valueFormat, e)
622
- };
623
- });
624
- return {
625
- ...f,
626
- plot: T,
627
- calendarCells: E,
628
- calendarMonthTicks: k,
629
- calendarLegend: ee
630
- };
631
- }
632
- if (e.type === "gauge") {
633
- let t = e.gaugeMin ?? 0, i = e.gaugeMax ?? 100, a = Math.max(t, Math.min(i, e.gaugeValue ?? 0)), o = e.gaugeTarget, c = n / 2, l = r * .78, u = Math.min(n * .42, r * .65), d = Math.PI, p = 2 * Math.PI, m = (e) => d + (e - t) / (i - t || 1) * (p - d), h = (e, t, n) => {
634
- let r = c + n * Math.cos(e), i = l + n * Math.sin(e), a = c + n * Math.cos(t), o = l + n * Math.sin(t);
635
- return `M${r},${i} A${n},${n} 0 ${+(t - e > Math.PI)} 1 ${a},${o}`;
636
- }, g = h(d, p, u), _ = h(d, m(a), u), v = (e.gaugeRanges ?? []).map((e) => ({
637
- path: h(m(e.from), m(e.to), u - 16),
638
- color: e.color,
639
- from: e.from,
640
- to: e.to
641
- })), y = null;
642
- if (o != null && Number.isFinite(o)) {
643
- let e = m(Math.max(t, Math.min(i, o))), n = u - 12, r = u + 4;
644
- y = {
645
- x1: c + n * Math.cos(e),
646
- y1: l + n * Math.sin(e),
647
- x2: c + r * Math.cos(e),
648
- y2: l + r * Math.sin(e)
649
- };
650
- }
651
- let b = [];
652
- for (let e = 0; e <= 20; e++) {
653
- let t = d + e / 20 * (p - d), n = e % 5 == 0, r = u + 9, i = u + (n ? 17 : 13);
654
- b.push({
655
- x1: c + r * Math.cos(t),
656
- y1: l + r * Math.sin(t),
657
- x2: c + i * Math.cos(t),
658
- y2: l + i * Math.sin(t),
659
- major: n
660
- });
661
- }
662
- let x = m(a), S = u - 14, C = x + Math.PI / 2, w = (e, t) => `${s(c + e * Math.cos(t))},${s(l + e * Math.sin(t))}`, T = `M${w(9, C)} L${w(S, x)} L${w(9, C + Math.PI)} L${w(5, x + Math.PI)} Z`, E = null, D = e.gaugeRanges ?? [];
663
- for (let e of D) if (a >= e.from && a < e.to) {
664
- E = e.color;
665
- break;
666
- }
667
- if (E == null) for (let e of D) a >= e.from && a <= e.to && (E = e.color);
668
- return {
669
- ...f,
670
- plot: {
671
- x: 0,
672
- y: 0,
673
- w: n,
674
- h: r
675
- },
676
- gauge: {
677
- cx: c,
678
- cy: l,
679
- r: u,
680
- trackPath: g,
681
- valuePath: _,
682
- rangePaths: v,
683
- target: y,
684
- ticks: b,
685
- needle: {
686
- path: T,
687
- hubR: 6
688
- },
689
- valueColor: E,
690
- minLabel: {
691
- x: c - u,
692
- y: l + 20
693
- },
694
- maxLabel: {
695
- x: c + u,
696
- y: l + 20
697
- },
698
- value: a,
699
- min: t,
700
- max: i,
701
- unit: e.gaugeUnit ?? ""
702
- }
703
- };
704
- }
705
- if (e.type === "treemap") {
706
- let t = e.treemap;
707
- if (!t) return { ...f };
708
- let i = Math.max(1, n - 4 - 4), a = Math.max(1, r - 4 - 4), c = {
709
- x: 4,
710
- y: 4,
711
- w: i,
712
- h: a
713
- }, l = e.palette ?? o, u = [];
714
- function d(e) {
715
- return e.children?.length ? e.children.reduce((e, t) => e + d(t), 0) : Math.max(0, e.value ?? 0);
716
- }
717
- function p(e, t, n, r, i, a) {
718
- if (!e.length || r <= 0 || i <= 0) return;
719
- let o = e.map(d), c = o.reduce((e, t) => e + t, 0);
720
- if (c <= 0) return;
721
- let f = e.map((e, t) => ({
722
- node: e,
723
- value: o[t]
724
- })).sort((e, t) => t.value - e.value), m = t, h = n, _ = r, v = i, y = c, b = [], x = (e, t, n, r) => {
725
- if (n <= 0) return Infinity;
726
- let i = n * r / t, a = 0;
727
- for (let n of e) {
728
- let e = n * r / i, o = Math.max(t / e, e / t);
729
- o > a && (a = o);
730
- }
731
- return a;
732
- };
733
- function S() {
734
- if (!b.length) return;
735
- let e = b.reduce((e, t) => e + t.value, 0), t = _ * v / y, n = _ >= v, r = n ? v : _, i = e * t / r, o = 0;
736
- for (let e of b) {
737
- let r = e.value * t / i, c = n ? m : m + o, d = n ? h + o : h, f = n ? i : r, _ = n ? r : i, v = e.node.color ?? l[(a + u.length) % l.length];
738
- if (e.node.children?.length) {
739
- u.push({
740
- x: s(c),
741
- y: s(d),
742
- w: s(f),
743
- h: s(_),
744
- color: v,
745
- textColor: g(v),
746
- name: e.node.name,
747
- value: e.value,
748
- depth: a
749
- });
750
- let t = Math.min(18, _ * .25);
751
- p(e.node.children, c + 1, d + t, f - 2, _ - t - 1, a + 1);
752
- } else u.push({
753
- x: s(c),
754
- y: s(d),
755
- w: s(f),
756
- h: s(_),
757
- color: v,
758
- textColor: g(v),
759
- name: e.node.name,
760
- value: e.value,
761
- depth: a
762
- });
763
- o += r;
764
- }
765
- n ? (m += i, _ -= i) : (h += i, v -= i), y -= e, b = [];
766
- }
767
- for (let e of f) {
768
- let t = _ * v / y, n = Math.min(_, v), r = b.reduce((e, t) => e + t.value, 0), i = x(b.map((e) => e.value), n, r, t), a = x([...b.map((e) => e.value), e.value], n, r + e.value, t);
769
- b.length && a > i && S(), b.push(e);
770
- }
771
- S();
772
- }
773
- return p(t.children ?? [t], 4, 4, i, a, 0), {
774
- ...f,
775
- plot: c,
776
- treemapCells: u
777
- };
778
- }
779
- if (e.type === "sankey") {
780
- let t = e.sankeyNodes ?? [], i = e.sankeyLinks ?? [];
781
- if (!t.length || !i.length) return { ...f };
782
- let a = Math.max(1, n - 10 - 10), s = Math.max(1, r - 14 - 14), c = {
783
- x: 10,
784
- y: 14,
785
- w: a,
786
- h: s
787
- }, l = e.palette ?? o, u = new Map(t.map((e) => [e.id, e])), d = new Set(i.map((e) => e.target)), p = t.filter((e) => !d.has(e.id)), m = /* @__PURE__ */ new Map();
788
- function h(e, t, n) {
789
- if (!n.has(e)) {
790
- n.add(e), (t > (m.get(e) ?? 0) || !m.has(e)) && m.set(e, t);
791
- for (let r of i) r.source === e && h(r.target, t + 1, n);
792
- n.delete(e);
793
- }
794
- }
795
- for (let e of p) h(e.id, 0, /* @__PURE__ */ new Set());
796
- for (let e of t) m.has(e.id) || m.set(e.id, 0);
797
- let g = Math.max(...m.values()) + 1, _ = g > 1 ? (a - 14 * g) / (g - 1) : 0, v = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Map();
798
- for (let e of i) v.set(e.target, (v.get(e.target) ?? 0) + e.value), y.set(e.source, (y.get(e.source) ?? 0) + e.value);
799
- let b = /* @__PURE__ */ new Map();
800
- for (let e of t) {
801
- let t = m.get(e.id) ?? 0, n = b.get(t) ?? [];
802
- n.push(e.id), b.set(t, n);
803
- }
804
- let x = 0;
805
- for (let e of b.values()) {
806
- let t = e.reduce((e, t) => e + Math.max(v.get(t) ?? 0, y.get(t) ?? 0), 0);
807
- t > x && (x = t);
808
- }
809
- if (x === 0) return {
810
- ...f,
811
- plot: c
812
- };
813
- let S = (s - 64) / x, C = [];
814
- for (let [e, t] of b) {
815
- let n = t.map((e) => Math.max(8, Math.max(v.get(e) ?? 0, y.get(e) ?? 0) * S)), r = 14 + (s - (n.reduce((e, t) => e + t, 0) + 8 * (t.length - 1))) / 2, i = 10 + e * (14 + _);
816
- t.forEach((t, a) => {
817
- let o = u.get(t), s = n[a];
818
- C.push({
819
- id: t,
820
- label: o.label ?? t,
821
- color: o.color ?? l[C.length % l.length],
822
- x: i,
823
- y: r,
824
- w: 14,
825
- h: s,
826
- column: e,
827
- totalIn: v.get(t) ?? 0,
828
- totalOut: y.get(t) ?? 0
829
- }), r += s + 8;
830
- });
831
- }
832
- let w = new Map(C.map((e) => [e.id, e])), T = /* @__PURE__ */ new Map(), E = /* @__PURE__ */ new Map(), D = [], O = i.slice().sort((e, t) => t.value - e.value);
833
- for (let e of O) {
834
- let t = w.get(e.source), n = w.get(e.target);
835
- if (!t || !n) continue;
836
- let r = Math.max(1, e.value * S), i = t.y + (E.get(t.id) ?? 0) + r / 2, a = n.y + (T.get(n.id) ?? 0) + r / 2;
837
- E.set(t.id, (E.get(t.id) ?? 0) + r), T.set(n.id, (T.get(n.id) ?? 0) + r);
838
- let o = t.x + t.w, s = n.x, c = (o + s) / 2, l = `M${o},${i} C${c},${i} ${c},${a} ${s},${a}`;
839
- D.push({
840
- path: l,
841
- color: e.color ?? t.color,
842
- width: r,
843
- source: e.source,
844
- target: e.target,
845
- value: e.value
846
- });
847
- }
848
- return {
849
- ...f,
850
- plot: c,
851
- sankeyNodes: C,
852
- sankeyLinks: D
853
- };
854
- }
855
- if (e.type === "heatmap") {
856
- if (!u.length || !e.categories.length) return {
857
- ...f,
858
- plot: {
859
- x: 0,
860
- y: 0,
861
- w: n,
862
- h: r
863
- }
864
- };
865
- let i = u.reduce((e, t) => Math.max(e, t.label.length), 0), a = 12 + Math.min(180, Math.max(60, i * 7)), o = Math.max(1, n - a - 64), c = Math.max(1, r - 12 - 32), l = {
866
- x: a,
867
- y: 12,
868
- w: o,
869
- h: c
870
- }, d = o / e.categories.length, h = c / u.length, _ = Infinity, v = -Infinity;
871
- for (let e of u) for (let t of e.values) Number.isFinite(t) && (t < _ && (_ = t), t > v && (v = t));
872
- _ === Infinity && (_ = 0, v = 1), _ === v && (v = _ + 1);
873
- let y = p(e.colorScale, _, v, t), b = (e) => m(y, (e - _) / (v - _)), x = [];
874
- u.forEach((t, n) => {
875
- t.values.forEach((r, i) => {
876
- if (!Number.isFinite(r)) return;
877
- let o = b(r);
878
- x.push({
879
- x: s(a + d * i),
880
- y: s(12 + h * n),
881
- w: s(d),
882
- h: s(h),
883
- color: o,
884
- textColor: g(o),
885
- value: r,
886
- rowLabel: t.label,
887
- colLabel: e.categories[i] ?? ""
888
- });
889
- });
890
- });
891
- let S = u.map((e, t) => ({
892
- value: t,
893
- y: s(12 + h * t + h / 2),
894
- label: e.label
895
- })), C = e.categories.map((e, t) => ({
896
- label: e,
897
- x: s(a + d * t + d / 2)
898
- })), w = Array.from({ length: 5 }, (t, n) => {
899
- let r = n / 4, i = _ + (v - _) * r;
900
- return {
901
- value: i,
902
- color: b(i),
903
- label: O(i, e.valueFormat, e)
904
- };
905
- });
906
- return {
907
- ...f,
908
- plot: l,
909
- heatmapCells: x,
910
- heatmapRowTicks: S,
911
- heatmapColTicks: C,
912
- heatmapLegend: w
913
- };
914
- }
915
- if (e.type === "pie") {
916
- let t = u[0];
917
- if (!t) return f;
918
- let i = t.values.reduce((e, t) => e + Math.max(0, t), 0) || 1, a = n / 2, o = r / 2, l = Math.min(n, r) / 2 - 10, d = l * Math.min(.9, Math.max(0, e.innerRadius ?? 0)), p = -Math.PI / 2, m = t.values.map((t, n) => {
919
- let r = Math.max(0, t) / i, u = p, f = p + r * Math.PI * 2;
920
- p = f;
921
- let m = +(f - u > Math.PI), h = (u + f) / 2, g = (l + d) / 2 || l * .6, _ = a + l * Math.cos(u), v = o + l * Math.sin(u), y = a + l * Math.cos(f), b = o + l * Math.sin(f), x;
922
- if (r >= .999) x = d ? `M${s(a - l)},${s(o)} A${l},${l} 0 1 1 ${s(a + l)},${s(o)} A${l},${l} 0 1 1 ${s(a - l)},${s(o)} ZM${s(a - d)},${s(o)} A${d},${d} 0 1 0 ${s(a + d)},${s(o)} A${d},${d} 0 1 0 ${s(a - d)},${s(o)} Z` : `M${s(a - l)},${s(o)} A${l},${l} 0 1 1 ${s(a + l)},${s(o)} A${l},${l} 0 1 1 ${s(a - l)},${s(o)} Z`;
923
- else if (d > 0) {
924
- let e = a + d * Math.cos(u), t = o + d * Math.sin(u), n = a + d * Math.cos(f), r = o + d * Math.sin(f);
925
- x = `M${s(_)},${s(v)} A${l},${l} 0 ${m} 1 ${s(y)},${s(b)} L${s(n)},${s(r)} A${d},${d} 0 ${m} 0 ${s(e)},${s(t)} Z`;
926
- } else x = `M${s(a)},${s(o)} L${s(_)},${s(v)} A${l},${l} 0 ${m} 1 ${s(y)},${s(b)} Z`;
927
- let S = e.categories[n] ?? String(n);
928
- return {
929
- path: x,
930
- color: e.categoryColors?.[S] ?? c[n % c.length],
931
- label: S,
932
- value: t,
933
- percent: r * 100,
934
- cx: s(a + g * Math.cos(h)),
935
- cy: s(o + g * Math.sin(h))
936
- };
937
- });
938
- return {
939
- ...f,
940
- slices: m,
941
- legend: e.categories.map((t, n) => ({
942
- label: t,
943
- color: e.categoryColors?.[t] ?? c[n % c.length]
944
- })),
945
- donut: d > 0 ? {
946
- cx: s(a),
947
- cy: s(o),
948
- r: s(d),
949
- total: t.values.reduce((e, t) => e + Math.max(0, t), 0)
950
- } : null
951
- };
952
- }
953
- if (e.type === "scatter") {
954
- let t = 48 + (e.yAxisTitle ? 16 : 0), i = 28 + (e.xAxisTitle ? 16 : 0), a = Math.max(1, n - t - 12), o = Math.max(1, r - 10 - i), c = {
955
- x: t,
956
- y: 10,
957
- w: a,
958
- h: o
959
- }, l = Infinity, d = -Infinity, p = Infinity, m = -Infinity, h = Infinity, g = -Infinity;
960
- for (let e of u) for (let t of e.points ?? []) Number.isFinite(t.x) && (l = Math.min(l, t.x), d = Math.max(d, t.x)), Number.isFinite(t.y) && (p = Math.min(p, t.y), m = Math.max(m, t.y)), t.r != null && Number.isFinite(t.r) && (h = Math.min(h, t.r), g = Math.max(g, t.r));
961
- if (l === Infinity) return {
962
- ...f,
963
- plot: c
964
- };
965
- let _ = E(l, d), v = E(p, m), y = g > h, b = (e) => s(t + (e - _.min) / (_.max - _.min || 1) * a), x = (e) => s(10 + o - (e - v.min) / (v.max - v.min || 1) * o), S = (e) => y && e != null && Number.isFinite(e) ? s(4 + (e - h) / (g - h || 1) * 14) : 5, C = [];
966
- for (let e of u) for (let t of e.points ?? []) !Number.isFinite(t.x) || !Number.isFinite(t.y) || C.push({
967
- cx: b(t.x),
968
- cy: x(t.y),
969
- r: S(t.r),
970
- color: e.color,
971
- label: t.label ?? "",
972
- series: e.label,
973
- x: t.x,
974
- y: t.y
975
- });
976
- let w = (e.referenceLines ?? []).map((t) => ({
977
- y: x(t.value),
978
- label: t.label ?? O(t.value, e.valueFormat, e),
979
- color: t.color ?? "#ef4444",
980
- dashed: t.dashed !== !1
981
- }));
982
- return {
983
- ...f,
984
- plot: c,
985
- scatterPoints: C,
986
- referenceLines: w,
987
- yTicks: v.ticks.map((t) => ({
988
- value: t,
989
- y: x(t),
990
- label: O(t, e.valueFormat, e)
991
- })),
992
- xTicks: _.ticks.map((e) => ({
993
- label: D(e),
994
- x: b(e)
995
- }))
996
- };
997
- }
998
- if (e.orientation === "horizontal" && u.length > 0 && u.every((e) => e.kind === "bar")) {
999
- let t = e.categories.reduce((e, t) => Math.max(e, t.length), 0), i = Math.min(150, 18 + t * 6.4) + (e.yAxisTitle ? 16 : 0), a = 26 + (e.xAxisTitle ? 16 : 0), o = Math.max(1, n - i - 16), c = Math.max(1, r - 8 - a), d = {
1000
- x: i,
1001
- y: 8,
1002
- w: o,
1003
- h: c
1004
- }, p = (e.referenceLines ?? []).map((e) => e.value), m = e.stacked100 ? E(0, 100) : re(u, e.categories, l, p), h = (e) => s(i + (e - m.min) / (m.max - m.min || 1) * o), g = e.categories.length, _ = c / Math.max(1, g), v = _ * .2, y = _ - v, b = (e) => 8 + _ * e + v / 2, x = h(Math.min(Math.max(0, m.min), m.max)), S = [];
1005
- if (l) {
1006
- let t = e.stacked100 ? e.categories.map((e, t) => u.reduce((e, n) => e + Math.abs(Number.isFinite(n.values[t]) ? n.values[t] : 0), 0) || 1) : null, n = Array(g).fill(0), r = Array(g).fill(0);
1007
- for (let i of u) i.values.forEach((a, o) => {
1008
- if (!Number.isFinite(a)) return;
1009
- let c = t ? a / t[o] * 100 : a, l, u;
1010
- c >= 0 ? (l = h(n[o]), u = h(n[o] + c), n[o] += c) : (l = h(r[o] + c), u = h(r[o]), r[o] += c), S.push({
1011
- x: Math.min(l, u),
1012
- y: s(b(o)),
1013
- w: s(Math.abs(u - l)),
1014
- h: s(Math.max(1, y)),
1015
- color: i.color,
1016
- label: e.categories[o] ?? String(o),
1017
- series: i.label,
1018
- value: a
1019
- });
1020
- });
1021
- } else {
1022
- let t = y / u.length;
1023
- u.forEach((n, r) => {
1024
- n.values.forEach((i, a) => {
1025
- if (!Number.isFinite(i)) return;
1026
- let o = h(i);
1027
- S.push({
1028
- x: Math.min(o, x),
1029
- y: s(b(a) + t * r),
1030
- w: s(Math.max(1, Math.abs(o - x))),
1031
- h: s(Math.max(1, t - 1)),
1032
- color: n.color,
1033
- label: e.categories[a] ?? String(a),
1034
- series: n.label,
1035
- value: i
1036
- });
1037
- });
1038
- });
1039
- }
1040
- let C = m.ticks.map((t) => ({
1041
- label: e.stacked100 ? `${D(t)}%` : O(t, e.valueFormat, e),
1042
- x: h(t)
1043
- })), w = e.categories.map((e, t) => ({
1044
- value: t,
1045
- y: s(b(t) + y / 2),
1046
- label: e
1047
- })), T = (e.referenceLines ?? []).map((t) => ({
1048
- x: h(t.value),
1049
- label: t.label ?? O(t.value, e.valueFormat, e),
1050
- color: t.color ?? "#ef4444",
1051
- dashed: t.dashed !== !1
1052
- }));
1053
- return {
1054
- ...f,
1055
- plot: d,
1056
- bars: S,
1057
- orientation: "horizontal",
1058
- valueTicks: C,
1059
- catTicks: w,
1060
- referenceLinesV: T,
1061
- xLabelRotated: !1
1062
- };
1063
- }
1064
- let h = u.filter((e) => e.axis === "left"), _ = u.filter((e) => e.axis === "right"), y = _.length > 0, S = e.categories.reduce((e, t) => Math.max(e, t.length), 0), C = e.categories.length > 8 || S > 9, w = e.categoryGroups && e.categoryGroups.length > 0 && e.xType !== "time" && e.orientation !== "horizontal" && e.categoryGroups.reduce((e, t) => e + t.span, 0) === e.categories.length ? e.categoryGroups : null, k = w ? 18 : 0, j = 48 + (e.yAxisTitle ? 16 : 0), M = (y ? 48 : 12) + (e.y2AxisTitle ? 16 : 0), N = (C ? 54 : 28) + (e.xAxisTitle ? 16 : 0) + k, P = Math.max(1, n - j - M), F = Math.max(1, r - 10 - N), ie = {
1065
- x: j,
1066
- y: 10,
1067
- w: P,
1068
- h: F
1069
- }, ae = (e.referenceLines ?? []).filter((e) => e.axis !== "right").map((e) => e.value), I = (e.referenceLines ?? []).filter((e) => e.axis === "right").map((e) => e.value), L = e.yScale === "log", R = e.y2Scale === "log", z = e.stacked100 ? E(0, 100) : re(h, e.categories, l, ae, L), B = y ? e.stacked100 ? E(0, 100) : re(_, e.categories, l, I, R) : null, V = (e, t, n = !1) => {
1070
- let r = v(t, e.min, e.max, n);
1071
- return r === null ? NaN : s(10 + F - r * F);
1072
- }, oe = (e) => V(z, e, L), se = (e) => V(B ?? z, e, R), H = (e) => e.axis === "right" ? B ?? z : z, U = (e) => e.axis === "right" ? R : L, W = e.categories.length, G = P / Math.max(1, W), K = e.xType === "time" || e.xType === "ordinal-time" ? e.categories.map((e) => Date.parse(e)) : null, q = !!K && K.some((e) => Number.isFinite(e)), ce = q && e.xType === "time", J = q ? Math.min(...K.filter(Number.isFinite)) : 0, Y = q && Math.max(...K.filter(Number.isFinite)) - J || 1, X = (e) => ce && Number.isFinite(K[e]) ? s(j + (K[e] - J) / Y * P) : s(j + G * e + G / 2), le = ce ? ee(J, J + Y).map((e) => ({
1073
- label: te(e, Y),
1074
- x: s(j + (e - J) / Y * P)
1075
- })) : q ? A(K).map((e) => ({
1076
- label: te(K[e], Y),
1077
- x: X(e)
1078
- })) : i(e.categories, X, G, C), ue = [];
1079
- if (w && !q) {
1080
- let e = 0;
1081
- for (let t of w) {
1082
- let n = s(j + G * e), r = s(j + G * (e + t.span));
1083
- ue.push({
1084
- label: t.label,
1085
- x0: n,
1086
- x1: r,
1087
- xCenter: s((n + r) / 2)
1088
- }), e += t.span;
1089
- }
1090
- }
1091
- let Z = u.filter((e) => e.kind === "bar"), de = [];
1092
- if (Z.length) {
1093
- let t = G * .2;
1094
- if (l) {
1095
- let n = G - t, r = (e) => j + G * e + t / 2;
1096
- for (let t of ["left", "right"]) {
1097
- let i = Z.filter((e) => e.axis === t);
1098
- if (!i.length) continue;
1099
- let a = t === "right" ? se : oe, o = e.stacked100 ? e.categories.map((e, t) => i.reduce((e, n) => e + Math.abs(Number.isFinite(n.values[t]) ? n.values[t] : 0), 0) || 1) : null, c = Array(W).fill(0), l = Array(W).fill(0);
1100
- for (let t of i) t.values.forEach((i, u) => {
1101
- if (!Number.isFinite(i)) return;
1102
- let d = o ? i / o[u] * 100 : i, f, p;
1103
- d >= 0 ? (f = a(c[u] + d), p = a(c[u]), c[u] += d) : (f = a(l[u]), p = a(l[u] + d), l[u] += d), de.push({
1104
- x: s(r(u)),
1105
- y: Math.min(f, p),
1106
- w: s(Math.max(1, n)),
1107
- h: s(Math.abs(p - f)),
1108
- color: t.color,
1109
- label: e.categories[u] ?? String(u),
1110
- series: t.label,
1111
- value: i
1112
- });
1113
- });
1114
- }
1115
- } else {
1116
- let n = (G - t) / Z.length;
1117
- Z.forEach((r, i) => {
1118
- let a = H(r), o = U(r), c = o ? V(a, a.min, o) : V(a, Math.min(Math.max(0, a.min), a.max), o);
1119
- r.values.forEach((l, u) => {
1120
- if (!Number.isFinite(l) || o && l <= 0) return;
1121
- let d = j + G * u + t / 2 + n * i, f = V(a, l, o);
1122
- de.push({
1123
- x: s(d),
1124
- y: Math.min(f, c),
1125
- w: s(Math.max(1, n - 1)),
1126
- h: s(Math.max(1, Math.abs(f - c))),
1127
- color: r.color,
1128
- label: e.categories[u] ?? String(u),
1129
- series: r.label,
1130
- value: l
1131
- });
1132
- });
1133
- });
1134
- }
1135
- }
1136
- let Q = u.filter((e) => e.kind === "candle"), fe = [];
1137
- if (Q.length) {
1138
- let t = e.candleColors?.up ?? "#16a34a", n = e.candleColors?.down ?? "#ef4444", r = Math.max(1, G * .7 / Q.length);
1139
- Q.forEach((i, a) => {
1140
- let o = H(i), c = U(i);
1141
- (i.ohlc ?? []).forEach((l, u) => {
1142
- if (!l || ![
1143
- l.o,
1144
- l.h,
1145
- l.l,
1146
- l.c
1147
- ].every(Number.isFinite) || c && (l.o <= 0 || l.h <= 0 || l.l <= 0 || l.c <= 0)) return;
1148
- let d = j + G * u + G / 2 - r * Q.length / 2 + r * a, f = V(o, l.o, c), p = V(o, l.c, c), m = l.c >= l.o;
1149
- fe.push({
1150
- x: s(d),
1151
- w: s(r),
1152
- xCenter: s(d + r / 2),
1153
- yOpen: f,
1154
- yClose: p,
1155
- yHigh: V(o, l.h, c),
1156
- yLow: V(o, l.l, c),
1157
- bodyY: Math.min(f, p),
1158
- bodyH: Math.max(1, Math.abs(p - f)),
1159
- up: m,
1160
- color: m ? t : n,
1161
- label: e.categories[u] ?? String(u),
1162
- series: i.label,
1163
- o: l.o,
1164
- h: l.h,
1165
- l: l.l,
1166
- c: l.c
1167
- });
1168
- });
1169
- });
1170
- }
1171
- let $ = u.filter((e) => e.kind === "box"), pe = [];
1172
- if ($.length) {
1173
- let t = Math.max(1, G * .6 / $.length);
1174
- $.forEach((n, r) => {
1175
- let i = H(n), a = U(n);
1176
- (n.boxes ?? []).forEach((o, c) => {
1177
- if (!o || ![
1178
- o.min,
1179
- o.q1,
1180
- o.median,
1181
- o.q3,
1182
- o.max
1183
- ].every(Number.isFinite) || a && o.min <= 0) return;
1184
- let l = j + G * c + G / 2 - t * $.length / 2 + t * r, u = V(i, o.q1, a), d = V(i, o.q3, a);
1185
- pe.push({
1186
- x: s(l),
1187
- w: s(t),
1188
- xCenter: s(l + t / 2),
1189
- yMin: V(i, o.min, a),
1190
- yQ1: u,
1191
- yMedian: V(i, o.median, a),
1192
- yQ3: d,
1193
- yMax: V(i, o.max, a),
1194
- boxY: Math.min(u, d),
1195
- boxH: Math.max(1, Math.abs(u - d)),
1196
- outliers: (o.outliers ?? []).filter((e) => Number.isFinite(e) && (!a || e > 0)).map((e) => ({
1197
- y: V(i, e, a),
1198
- value: e
1199
- })),
1200
- color: n.color,
1201
- label: e.categories[c] ?? String(c),
1202
- series: n.label,
1203
- min: o.min,
1204
- q1: o.q1,
1205
- median: o.median,
1206
- q3: o.q3,
1207
- max: o.max
1208
- });
1209
- });
1210
- });
1211
- }
1212
- let me = [];
1213
- for (let t of u) {
1214
- if (!t.errors) continue;
1215
- let n = H(t), r = U(t);
1216
- t.errors.forEach((i, o) => {
1217
- let c = t.values[o];
1218
- if (!Number.isFinite(c)) return;
1219
- let l = a(i, c);
1220
- l && (r && l.lo <= 0 || me.push({
1221
- xCenter: s(j + G * o + G / 2),
1222
- yLo: V(n, l.lo, r),
1223
- yHi: V(n, l.hi, r),
1224
- cap: s(Math.min(6, G * .15)),
1225
- color: t.color,
1226
- label: e.categories[o] ?? String(o),
1227
- series: t.label,
1228
- lo: l.lo,
1229
- hi: l.hi
1230
- }));
1231
- });
1232
- }
1233
- let he = [], ge = {
1234
- left: Array(W).fill(0),
1235
- right: Array(W).fill(0)
1236
- }, _e = {
1237
- left: null,
1238
- right: null
1239
- };
1240
- if (e.stacked100) for (let t of ["left", "right"]) {
1241
- let n = u.filter((e) => e.kind === "area" && e.axis === t);
1242
- n.length && (_e[t] = e.categories.map((e, t) => n.reduce((e, n) => e + Math.abs(Number.isFinite(n.values[t]) ? n.values[t] : 0), 0) || 1));
1243
- }
1244
- for (let t of u) {
1245
- if (t.kind === "bar" || t.kind === "candle" || t.kind === "box") continue;
1246
- let n = H(t), r = U(t), i = (e) => V(n, e, r), a = l && t.kind === "area", o = (e) => X(e), c, u = null;
1247
- if (a) {
1248
- let n = ge[t.axis], r = n.slice(), a = _e[t.axis];
1249
- c = t.values.map((t, r) => {
1250
- let s = Number.isFinite(t) ? t : 0, c = a ? s / a[r] * 100 : s, l = (n[r] ?? 0) + c;
1251
- return n[r] = l, {
1252
- x: o(r),
1253
- y: i(l),
1254
- label: e.categories[r] ?? String(r),
1255
- value: t,
1256
- defined: Number.isFinite(t)
1257
- };
1258
- }), u = r.map((e, t) => ({
1259
- x: o(t),
1260
- y: i(e)
1261
- }));
1262
- } else c = t.values.map((t, n) => {
1263
- let r = Number.isFinite(t);
1264
- return {
1265
- x: o(n),
1266
- y: r ? i(t) : NaN,
1267
- label: e.categories[n] ?? String(n),
1268
- value: t,
1269
- defined: r
1270
- };
1271
- });
1272
- let d = !!t.smooth, f = b(c, d), p = "";
1273
- if (t.kind === "area" && c.length) {
1274
- if (u) p = `${d ? x(c.map((e) => ({
1275
- x: e.x,
1276
- y: e.y
1277
- }))) : c.map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`).join(" ")} ${d ? `L${u[u.length - 1].x},${u[u.length - 1].y} ` + x(u.slice().reverse()).replace(/^M[^ ]+ /, "") : u.slice().reverse().map((e) => `L${e.x},${e.y}`).join(" ")} Z`;
1278
- else {
1279
- let e = s(i(Math.min(Math.max(0, n.min), n.max))), t = [], r = [];
1280
- for (let e of c) e.defined ? r.push(e) : r.length && (t.push(r), r = []);
1281
- r.length && t.push(r), p = t.map((t) => `${d ? x(t.map((e) => ({
1282
- x: e.x,
1283
- y: e.y
1284
- }))) : t.map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`).join(" ")} L${t[t.length - 1].x},${e} L${t[0].x},${e} Z`).join(" ");
1285
- }
1286
- }
1287
- let m = "";
1288
- if (t.upperValues?.length === t.values.length && t.lowerValues?.length === t.values.length) {
1289
- let e = [], n = [];
1290
- for (let a = 0; a < t.values.length; a += 1) {
1291
- let s = t.upperValues[a], c = t.lowerValues[a];
1292
- !Number.isFinite(s) || !Number.isFinite(c) || r && (s <= 0 || c <= 0) || (e.push({
1293
- x: o(a),
1294
- y: i(s)
1295
- }), n.push({
1296
- x: o(a),
1297
- y: i(c)
1298
- }));
1299
- }
1300
- e.length >= 2 && (m = `${d ? x(e) : e.map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`).join(" ")} ${d ? `L${n[n.length - 1].x},${n[n.length - 1].y} ` + x(n.slice().reverse()).replace(/^M[^ ]+ /, "") : n.slice().reverse().map((e) => `L${e.x},${e.y}`).join(" ")} Z`);
1301
- }
1302
- he.push({
1303
- path: f,
1304
- areaPath: p,
1305
- color: t.color,
1306
- label: t.label,
1307
- points: c,
1308
- bandPath: m
1309
- });
1310
- }
1311
- let ve = (t, n) => t.ticks.map((r) => ({
1312
- value: r,
1313
- y: V(t, r, n),
1314
- label: e.stacked100 ? `${s(r)}%` : O(r, e.valueFormat, e)
1315
- })), ye = (e.referenceLines ?? []).map((t) => {
1316
- let n = t.axis === "right", r = n ? B ?? z : z, i = n ? R : L;
1317
- return {
1318
- y: V(r, t.value, i),
1319
- label: t.label ?? O(t.value, e.valueFormat, e),
1320
- color: t.color ?? "#ef4444",
1321
- dashed: t.dashed !== !1
1322
- };
1323
- }), be = [];
1324
- for (let t of u) {
1325
- if (!t.overlay) continue;
1326
- let n = H(t), r = U(t), i = T(t.values, t.overlay), a = t.overlayColor ?? t.color, o = i.map((t, i) => {
1327
- let a = Number.isFinite(t) && (!r || t > 0);
1328
- return {
1329
- x: X(i),
1330
- y: a ? V(n, t, r) : NaN,
1331
- label: e.categories[i] ?? String(i),
1332
- value: t,
1333
- defined: a
1334
- };
1335
- }), s = b(o, !!t.smooth);
1336
- be.push({
1337
- path: s,
1338
- areaPath: "",
1339
- color: a,
1340
- label: `${t.label} (${t.overlay})`,
1341
- points: o
1342
- });
1343
- }
1344
- let xe = [];
1345
- for (let t of e.annotations ?? []) {
1346
- let n = null, r = null;
1347
- if ("category" in t.at) {
1348
- let i = e.categories.indexOf(t.at.category);
1349
- if (i < 0) continue;
1350
- n = X(i);
1351
- let a = t.at.series, o = a ? u.find((e) => e.label === a) : u[0];
1352
- if (o) {
1353
- let e = o.values[i];
1354
- Number.isFinite(e) && (r = V(H(o), e, U(o)));
1355
- }
1356
- r ??= 10 + F / 2;
1357
- } else n = j + P / 2, r = Number.isFinite(t.at.y) ? V(z, t.at.y, L) : 10 + F / 2;
1358
- n != null && r != null && Number.isFinite(r) && xe.push({
1359
- x: n,
1360
- y: r,
1361
- label: t.label,
1362
- color: t.color ?? "#0f172a",
1363
- placement: t.placement ?? "top"
1364
- });
1365
- }
1366
- return {
1367
- ...f,
1368
- plot: ie,
1369
- axes: {
1370
- y: {
1371
- min: z.min,
1372
- max: z.max,
1373
- log: L
1374
- },
1375
- y2: B ? {
1376
- min: B.min,
1377
- max: B.max,
1378
- log: R
1379
- } : null,
1380
- slot: G,
1381
- count: e.categories.length
1382
- },
1383
- bars: de,
1384
- candles: fe,
1385
- boxes: pe,
1386
- errorBars: me,
1387
- lines: he,
1388
- yTicks: ve(z, L),
1389
- y2Ticks: B ? ve(B, R) : [],
1390
- hasRightAxis: y,
1391
- xTicks: le,
1392
- categoryGroupTicks: ue,
1393
- xLabelRotated: !q && C,
1394
- referenceLines: ye,
1395
- overlays: be,
1396
- annotations: xe
1397
- };
1398
- }
1399
- function M(e, t, n) {
1400
- let r = Math.max(0, t), i = Math.min(e.categories.length - 1, n), a = (e) => e ? e.slice(r, i + 1) : void 0;
1401
- return {
1402
- ...e,
1403
- categories: e.categories.slice(r, i + 1),
1404
- series: e.series.map((e) => ({
1405
- ...e,
1406
- values: e.values.slice(r, i + 1),
1407
- rowIds: a(e.rowIds),
1408
- upperValues: a(e.upperValues),
1409
- lowerValues: a(e.lowerValues),
1410
- ohlc: a(e.ohlc),
1411
- boxes: a(e.boxes),
1412
- errors: a(e.errors)
1413
- })),
1414
- waterfallTotals: a(e.waterfallTotals)
1415
- };
1416
- }
1417
- function N(e, t) {
1418
- let n = t.reduce ?? "sum", r = Array.isArray(t.value) ? t.value : [t.value], i = (e, t) => n === "count" ? t : n === "avg" ? t ? e / t : 0 : e, a = [], o = /* @__PURE__ */ new Map(), s = (e) => {
1419
- let t = o.get(e);
1420
- return t === void 0 && (t = a.length, o.set(e, t), a.push(e)), t;
1421
- }, c = /* @__PURE__ */ new Map(), l = (e) => {
1422
- let t = c.get(e);
1423
- return t || (t = [], c.set(e, t)), t;
1424
- }, u = t.idField !== void 0;
1425
- for (let n of e) {
1426
- let e = s(String(n[t.category] ?? "")), i = u ? n[t.idField] : void 0;
1427
- if (t.series) {
1428
- let a = l(String(n[t.series] ?? "")), o = Number(n[r[0]]), s = a[e] ??= {
1429
- sum: 0,
1430
- count: 0,
1431
- rowIds: []
1432
- };
1433
- Number.isFinite(o) && (s.sum += o, s.count += 1, i !== void 0 && s.rowIds.push(i));
1434
- } else for (let t of r) {
1435
- let r = l(t), a = Number(n[t]), o = r[e] ??= {
1436
- sum: 0,
1437
- count: 0,
1438
- rowIds: []
1439
- };
1440
- Number.isFinite(a) && (o.sum += a, o.count += 1, i !== void 0 && o.rowIds.push(i));
1441
- }
1442
- }
1443
- let d = [...c.entries()].map(([e, n]) => ({
1444
- label: t.series ? e : t.seriesLabel && r.length === 1 ? t.seriesLabel : e,
1445
- values: a.map((e, t) => {
1446
- let r = n[t] ?? {
1447
- sum: 0,
1448
- count: 0,
1449
- rowIds: []
1450
- };
1451
- return i(r.sum, r.count);
1452
- }),
1453
- rowIds: u ? a.map((e, t) => (n[t]?.rowIds ?? []).slice()) : void 0
1454
- })), f = a.map((e, t) => d.reduce((e, n) => e + (Number.isFinite(n.values[t]) ? n.values[t] : 0), 0)), p = t.sort ?? (t.topN ? "value-desc" : "none"), m = a.map((e, t) => t);
1455
- p === "value-desc" ? m.sort((e, t) => f[t] - f[e]) : p === "value-asc" ? m.sort((e, t) => f[e] - f[t]) : p === "category" && m.sort((e, t) => a[e].localeCompare(a[t]));
1456
- let h, g;
1457
- if (t.topN && m.length > t.topN) {
1458
- let e = m.slice(0, t.topN), n = m.slice(t.topN);
1459
- h = e.map((e) => a[e]).concat(t.otherLabel ?? "Other"), g = d.map((t) => ({
1460
- label: t.label,
1461
- values: e.map((e) => t.values[e]).concat(n.reduce((e, n) => e + (Number.isFinite(t.values[n]) ? t.values[n] : 0), 0)),
1462
- rowIds: t.rowIds ? e.map((e) => t.rowIds[e]).concat([n.flatMap((e) => t.rowIds[e] ?? [])]) : void 0
1463
- }));
1464
- } else h = m.map((e) => a[e]), g = d.map((e) => ({
1465
- label: e.label,
1466
- values: m.map((t) => e.values[t]),
1467
- rowIds: e.rowIds ? m.map((t) => e.rowIds[t]) : void 0
1468
- }));
1469
- return {
1470
- type: t.type,
1471
- categories: h,
1472
- series: g,
1473
- width: t.width,
1474
- height: t.height,
1475
- stacked: t.stacked,
1476
- stacked100: t.stacked100,
1477
- palette: t.palette
1478
- };
1479
- }
1480
- function P(e, t = "Total") {
1481
- let n = (e) => typeof e == "number" && Number.isFinite(e) && e > 0 ? e : 0;
1482
- if (e.series.length <= 1) {
1483
- let r = e.series[0];
1484
- return {
1485
- name: t,
1486
- children: e.categories.map((e, t) => ({
1487
- name: e,
1488
- value: n(r?.values[t])
1489
- })).filter((e) => e.value > 0)
1490
- };
1491
- }
1492
- return {
1493
- name: t,
1494
- children: e.categories.map((t, r) => ({
1495
- name: t,
1496
- children: e.series.map((e) => ({
1497
- name: e.label,
1498
- value: n(e.values[r])
1499
- })).filter((e) => e.value > 0)
1500
- })).filter((e) => e.children.length > 0)
1501
- };
1502
- }
1503
- function F(e) {
1504
- let t = e.series[0], n = [];
1505
- return e.categories.forEach((e, r) => {
1506
- let i = Date.parse(e);
1507
- if (!Number.isFinite(i)) return;
1508
- let a = t?.values[r];
1509
- typeof a != "number" || !Number.isFinite(a) || n.push({
1510
- date: new Date(i).toISOString().slice(0, 10),
1511
- value: a
1512
- });
1513
- }), n;
1514
- }
1515
- function ie(e) {
1516
- let t = [], n = /* @__PURE__ */ new Set();
1517
- return e.categories.forEach((r, i) => {
1518
- for (let a of e.series) {
1519
- let e = a.values[i];
1520
- if (typeof e != "number" || !Number.isFinite(e) || e <= 0) continue;
1521
- let o = `from:${r}`, s = `to:${a.label}`;
1522
- o !== s && (n.add(o), n.add(s), t.push({
1523
- source: o,
1524
- target: s,
1525
- value: e
1526
- }));
1527
- }
1528
- }), {
1529
- nodes: [...n].map((e) => ({
1530
- id: e,
1531
- label: e.slice(e.indexOf(":") + 1)
1532
- })),
1533
- links: t
1534
- };
1535
- }
1536
- function ae(e, t, n) {
1537
- let r = n.category, i = n.value, a = n.series;
1538
- if (e === "scatter") {
1539
- let e = n.value2;
1540
- return !i || !e ? null : L(t, {
1541
- x: i,
1542
- y: e,
1543
- ...a ? { series: a } : {},
1544
- ...n.palette ? { palette: n.palette } : {}
1545
- });
1546
- }
1547
- if (e === "gauge") return i ? R(t, {
1548
- value: i,
1549
- ...n.reduce ? { reduce: n.reduce } : {}
1550
- }) : null;
1551
- if (e === "boxplot") {
1552
- if (!r || !i) return null;
1553
- let e = I(t, {
1554
- category: r,
1555
- value: i,
1556
- ...a ? { series: a } : {}
1557
- });
1558
- return n.palette && (e.palette = n.palette), e;
1559
- }
1560
- return null;
1561
- }
1562
- function I(e, t) {
1563
- let n = [], i = /* @__PURE__ */ new Set();
1564
- for (let r of e) {
1565
- let e = String(r[t.category] ?? "");
1566
- i.has(e) || (i.add(e), n.push(e));
1567
- }
1568
- let a = [], o = /* @__PURE__ */ new Set();
1569
- if (t.series) for (let n of e) {
1570
- let e = String(n[t.series] ?? "");
1571
- o.has(e) || (o.add(e), a.push(e));
1572
- }
1573
- else a.push(t.seriesLabel ?? String(t.value));
1574
- return {
1575
- type: "boxplot",
1576
- categories: n,
1577
- series: a.map((i) => {
1578
- let a = n.map((n) => {
1579
- let a = [];
1580
- for (let r of e) {
1581
- if (String(r[t.category] ?? "") !== n || t.series && String(r[t.series] ?? "") !== i) continue;
1582
- let e = r[t.value];
1583
- if (e == null || e === "") continue;
1584
- let o = Number(e);
1585
- Number.isFinite(o) && a.push(o);
1586
- }
1587
- return r(a, t.whisker);
1588
- });
1589
- return {
1590
- label: i,
1591
- values: a.map((e) => e ? e.median : NaN),
1592
- boxes: a
1593
- };
1594
- }),
1595
- ...t.width ? { width: t.width } : {},
1596
- ...t.height ? { height: t.height } : {}
1597
- };
1598
- }
1599
- function L(e, t) {
1600
- let n = /* @__PURE__ */ new Map();
1601
- for (let r of e) {
1602
- let e = Number(r[t.x]), i = Number(r[t.y]);
1603
- if (!Number.isFinite(e) || !Number.isFinite(i)) continue;
1604
- let a = t.series ? String(r[t.series] ?? "") : t.y, o = {
1605
- x: e,
1606
- y: i
1607
- };
1608
- if (t.r) {
1609
- let e = Number(r[t.r]);
1610
- Number.isFinite(e) && (o.r = e);
1611
- }
1612
- t.label && (o.label = String(r[t.label] ?? ""));
1613
- let s = n.get(a);
1614
- s ? s.push(o) : n.set(a, [o]);
1615
- }
1616
- return {
1617
- type: "scatter",
1618
- categories: [],
1619
- series: [...n].map(([e, t]) => ({
1620
- label: e,
1621
- values: [],
1622
- points: t
1623
- })),
1624
- palette: t.palette,
1625
- width: t.width,
1626
- height: t.height,
1627
- xAxisTitle: t.x,
1628
- yAxisTitle: t.y
1629
- };
1630
- }
1631
- function R(e, t) {
1632
- let n = t.reduce ?? "sum", r = 0, i = 0;
1633
- for (let n of e) {
1634
- let e = Number(n[t.value]);
1635
- Number.isFinite(e) && (r += e, i += 1);
1636
- }
1637
- let a = n === "count" ? i : n === "avg" ? i ? r / i : 0 : r, o = t.min ?? Math.min(0, a);
1638
- return {
1639
- type: "gauge",
1640
- categories: [],
1641
- series: [],
1642
- gaugeValue: a,
1643
- gaugeMin: o,
1644
- gaugeMax: t.max ?? (a > o ? E(o, a).max : o + 1),
1645
- gaugeTarget: t.target,
1646
- gaugeUnit: t.unit,
1647
- width: t.width,
1648
- height: t.height
1649
- };
1650
- }
1651
- //#endregion
1652
- export { ae as _, y as a, M as b, w as c, _ as d, E as f, N as g, I as h, b as i, O as l, g as m, r as n, n as o, A as p, j as r, T as s, o as t, S as u, m as v, C as y };