@svgrid/grid 3.0.2 → 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-DNbz94Ct.js → src-BKhZ6eXd.js} +10227 -9787
  67. package/dist/cdn/{src-BJ2opd0j.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-DyFA-QxA.js +0 -602
  273. package/dist/cdn/GridMenus-M2XP9t0_.js +0 -603
  274. package/dist/cdn/SvDateTimePicker-CCbDZNZB.js +0 -816
  275. package/dist/cdn/SvGridChart-DAb9RbRs.js +0 -1480
  276. package/dist/cdn/SvGridChart-Yl-IXZFO.js +0 -1481
  277. package/dist/cdn/SvGridChartPanel-DayQpDsR.js +0 -834
  278. package/dist/cdn/SvGridChartPanel-aqf8n-vJ.js +0 -810
  279. package/dist/cdn/SvGridChartView-CxfakxR0.js +0 -56
  280. package/dist/cdn/SvGridChartView-Dm_YEx9L.js +0 -55
  281. package/dist/cdn/chart-CKJRCPOk.js +0 -1652
@@ -0,0 +1,4341 @@
1
+ import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
+ import { i as t, n, r, t as i } from "./chart-trend-CaN9mDEV.js";
3
+ //#region src/chart-scale.ts
4
+ var a = [
5
+ "#2563eb",
6
+ "#16a34a",
7
+ "#f59e0b",
8
+ "#ef4444",
9
+ "#8b5cf6",
10
+ "#0ea5e9",
11
+ "#ec4899",
12
+ "#14b8a6"
13
+ ];
14
+ function o(e) {
15
+ return Math.round(e * 100) / 100;
16
+ }
17
+ function s(e, t) {
18
+ if (e <= 0) return 1;
19
+ let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
20
+ 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;
21
+ }
22
+ var c = [
23
+ "#eff6ff",
24
+ "#bfdbfe",
25
+ "#60a5fa",
26
+ "#2563eb",
27
+ "#1e3a8a"
28
+ ], l = [
29
+ "#b91c1c",
30
+ "#fca5a5",
31
+ "#f1f5f9",
32
+ "#93c5fd",
33
+ "#1d4ed8"
34
+ ], u = [
35
+ "#1c2c4d",
36
+ "#1d4ed8",
37
+ "#3b82f6",
38
+ "#60a5fa",
39
+ "#bae6fd"
40
+ ], d = [
41
+ "#f87171",
42
+ "#b91c1c",
43
+ "#222b3d",
44
+ "#1d4ed8",
45
+ "#60a5fa"
46
+ ];
47
+ function f(e, t, n, r = "light") {
48
+ if (Array.isArray(e) && e.length >= 2) return e;
49
+ let i = r === "dark";
50
+ return e === "diverging" || e == null && t < 0 && n > 0 ? i ? d : l : i ? u : c;
51
+ }
52
+ function p(e, t) {
53
+ if (!e.length) return "#888";
54
+ let n = Math.max(0, Math.min(1, t));
55
+ if (e.length === 1) return e[0];
56
+ let r = n * (e.length - 1), i = Math.floor(r), a = r - i, o = m(e[i]), s = m(e[Math.min(e.length - 1, i + 1)]);
57
+ if (!o || !s) return e[i] ?? "#888";
58
+ let c = (e, t) => Math.round(e + (t - e) * a), l = (e) => e.toString(16).padStart(2, "0");
59
+ return "#" + l(c(o.r, s.r)) + l(c(o.g, s.g)) + l(c(o.b, s.b));
60
+ }
61
+ function m(e) {
62
+ let t = /^#?([0-9a-f]{6})$/i.exec(e.trim());
63
+ if (!t) return null;
64
+ let n = parseInt(t[1], 16);
65
+ return {
66
+ r: n >> 16 & 255,
67
+ g: n >> 8 & 255,
68
+ b: n & 255
69
+ };
70
+ }
71
+ function h(e) {
72
+ let t = m(e);
73
+ if (!t) return "#0f172a";
74
+ let n = (e) => {
75
+ let t = e / 255;
76
+ return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
77
+ };
78
+ return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b) > .5 ? "#0f172a" : "#ffffff";
79
+ }
80
+ function g(e, t) {
81
+ (!Number.isFinite(e) || e <= 0) && (e = 1), (!Number.isFinite(t) || t <= e) && (t = e * 10);
82
+ let n = Math.floor(Math.log10(e)), r = Math.ceil(Math.log10(t)), i = [];
83
+ for (let e = n; e <= r; e += 1) i.push(10 ** e);
84
+ return {
85
+ min: 10 ** n,
86
+ max: 10 ** r,
87
+ step: 10,
88
+ ticks: i
89
+ };
90
+ }
91
+ function _(e, t) {
92
+ if (!(e > 0) || !(t > e)) return [];
93
+ let n = Math.floor(Math.log10(e)), r = Math.ceil(Math.log10(t)), i = r - n < 3 ? [2, 5] : [], a = [];
94
+ for (let o = n; o <= r; o += 1) {
95
+ let n = 10 ** o;
96
+ for (let r of [1, ...i]) {
97
+ let i = n * r;
98
+ i >= e * .999 && i <= t * 1.001 && a.push(i);
99
+ }
100
+ }
101
+ return a;
102
+ }
103
+ function v(e, t, n, r) {
104
+ 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;
105
+ }
106
+ function y(e, t, n = 4) {
107
+ (!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));
108
+ let r = s(s(t - e, !1) / Math.max(1, n), !0), i = Math.floor(e / r) * r, a = Math.ceil(t / r) * r, c = [];
109
+ for (let e = i; e <= a + r * .5; e += r) c.push(o(e));
110
+ return {
111
+ min: i,
112
+ max: a,
113
+ step: r,
114
+ ticks: c
115
+ };
116
+ }
117
+ function b(e, t, n = {}) {
118
+ let r = n.min ?? e, i = n.max ?? t;
119
+ (!Number.isFinite(r) || !Number.isFinite(i)) && (r = Number.isFinite(r) ? r : 0, i = Number.isFinite(i) ? i : r + 1);
120
+ let a = n.nice !== !1, s = n.tickInterval;
121
+ if (s && s > 0 && Number.isFinite(s)) {
122
+ a && n.min == null && (r = Math.floor(r / s) * s), a && n.max == null && (i = Math.ceil(i / s) * s), i <= r && (i = r + s);
123
+ let e = [], t = Math.ceil(r / s - 1e-9) * s;
124
+ for (let n = t, r = 0; n <= i + s * 1e-6 && r < 1e3; n += s, r += 1) e.push(o(n) + 0);
125
+ return {
126
+ min: r,
127
+ max: i,
128
+ step: s,
129
+ ticks: e
130
+ };
131
+ }
132
+ if (a) {
133
+ let e = y(r, i, n.tickCount ?? 4);
134
+ if (n.min == null && n.max == null) return e;
135
+ let t = n.min ?? e.min, a = n.max ?? e.max;
136
+ return {
137
+ min: t,
138
+ max: a,
139
+ step: e.step,
140
+ ticks: e.ticks.filter((e) => e >= t - 1e-9 && e <= a + 1e-9)
141
+ };
142
+ }
143
+ i <= r && (i = r + 1);
144
+ let c = Math.max(1, Math.round(n.tickCount ?? 4)), l = (i - r) / c, u = Array.from({ length: c + 1 }, (e, t) => o(r + l * t));
145
+ return {
146
+ min: r,
147
+ max: i,
148
+ step: l,
149
+ ticks: u
150
+ };
151
+ }
152
+ var x = 864e5;
153
+ function S(e, t, n = 6) {
154
+ if (!(t > e)) return [e];
155
+ let r = Math.max(2, n) * 1.3, i = t - e, a = [
156
+ [1, 0],
157
+ [2, 0],
158
+ [7, 0],
159
+ [14, 0],
160
+ [0, 1],
161
+ [0, 3],
162
+ [0, 6],
163
+ [0, 12],
164
+ [0, 24],
165
+ [0, 60],
166
+ [0, 120]
167
+ ], [o, s] = a[a.length - 1];
168
+ for (let [e, t] of a) if (i / (e * 864e5 + t * 30.44 * 864e5) <= r) {
169
+ o = e, s = t;
170
+ break;
171
+ }
172
+ let c = new Date(e), l = [];
173
+ if (o) {
174
+ let n = Date.UTC(c.getUTCFullYear(), c.getUTCMonth(), c.getUTCDate());
175
+ for (o >= 7 && (n += (8 - new Date(n).getUTCDay()) % 7 * x); n < e;) n += o * x;
176
+ for (; n <= t + 1; n += o * x) l.push(n);
177
+ } else {
178
+ let n = Math.ceil((c.getUTCFullYear() * 12 + c.getUTCMonth()) / s) * s, r = (e) => Date.UTC(Math.floor(e / 12), e % 12, 1);
179
+ r(n) < e && (n += s);
180
+ for (let e = r(n); e <= t + 1; n += s, e = r(n)) l.push(e);
181
+ }
182
+ return l.length < 2 ? [e, t] : l;
183
+ }
184
+ function C(e, t = 6) {
185
+ if (e.length <= 1) return e.length ? [0] : [];
186
+ let n = {
187
+ day: (e) => `${e.getUTCFullYear()}-${e.getUTCMonth()}-${e.getUTCDate()}`,
188
+ week: (e) => Math.floor((Date.UTC(e.getUTCFullYear(), e.getUTCMonth(), e.getUTCDate()) / x + 3) / 7),
189
+ month: (e) => `${e.getUTCFullYear()}-${e.getUTCMonth()}`,
190
+ year: (e) => e.getUTCFullYear()
191
+ }, r = null;
192
+ for (let i of [
193
+ "day",
194
+ "week",
195
+ "month",
196
+ "year"
197
+ ]) {
198
+ let a = [], o = null;
199
+ for (let t = 0; t < e.length; t += 1) {
200
+ let r = e[t];
201
+ if (!Number.isFinite(r)) continue;
202
+ let s = n[i](new Date(r));
203
+ s !== o && a.push(t), o = s;
204
+ }
205
+ if (r = a, a.length <= t * 2) break;
206
+ }
207
+ let i = r ?? [];
208
+ if (i.length > t) {
209
+ let e = Math.ceil(i.length / t);
210
+ i = i.filter((t, n) => n % e === 0);
211
+ }
212
+ if (i.length < 2) {
213
+ let n = Math.max(1, Math.ceil(e.length / t));
214
+ i = e.map((e, t) => t).filter((e) => e % n === 0);
215
+ }
216
+ return i;
217
+ }
218
+ function w(e, t) {
219
+ let n = new Date(e);
220
+ return t < 24192e5 ? n.toLocaleDateString(void 0, {
221
+ month: "short",
222
+ day: "numeric",
223
+ timeZone: "UTC"
224
+ }) : t < 31104e6 ? n.toLocaleDateString(void 0, {
225
+ month: "short",
226
+ year: "2-digit",
227
+ timeZone: "UTC"
228
+ }) : String(n.getUTCFullYear());
229
+ }
230
+ function T(e, t = "day") {
231
+ let n = new Date(e);
232
+ return t === "year" ? String(n.getUTCFullYear()) : t === "month" ? n.toLocaleDateString(void 0, {
233
+ month: "short",
234
+ year: "numeric",
235
+ timeZone: "UTC"
236
+ }) : n.toLocaleDateString(void 0, {
237
+ year: "numeric",
238
+ month: "short",
239
+ day: "numeric",
240
+ timeZone: "UTC"
241
+ });
242
+ }
243
+ function E(e) {
244
+ let t = !0, n = !0, r = !1;
245
+ for (let i of e) {
246
+ if (!Number.isFinite(i)) continue;
247
+ r = !0;
248
+ let e = new Date(i);
249
+ if (e.getUTCDate() !== 1 || e.getUTCHours() !== 0) {
250
+ t = !1, n = !1;
251
+ break;
252
+ }
253
+ e.getUTCMonth() !== 0 && (n = !1);
254
+ }
255
+ return r ? n ? "year" : t ? "month" : "day" : "day";
256
+ }
257
+ function D(e, t, n, r) {
258
+ let i = Math.max(1, Math.ceil((r ? 18 : 60) / Math.max(n, .001))), a = [];
259
+ for (let n = 0; n < e.length; n += i) a.push({
260
+ label: e[n],
261
+ x: t(n)
262
+ });
263
+ return a;
264
+ }
265
+ function O(e, t) {
266
+ if (e == null) return null;
267
+ if (typeof e == "number") {
268
+ if (!Number.isFinite(e)) return null;
269
+ let n = Math.abs(e);
270
+ return {
271
+ lo: t - n,
272
+ hi: t + n
273
+ };
274
+ }
275
+ return !Number.isFinite(e.lo) || !Number.isFinite(e.hi) ? null : {
276
+ lo: Math.min(e.lo, e.hi),
277
+ hi: Math.max(e.lo, e.hi)
278
+ };
279
+ }
280
+ //#endregion
281
+ //#region src/chart-stats.ts
282
+ function k(e, t = 1.5) {
283
+ let n = e.filter((e) => Number.isFinite(e)).slice().sort((e, t) => e - t);
284
+ if (!n.length) return null;
285
+ let r = (e) => {
286
+ let t = (n.length - 1) * e, r = Math.floor(t), i = Math.ceil(t);
287
+ return r === i ? n[r] : n[r] + (n[i] - n[r]) * (t - r);
288
+ }, 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);
289
+ return {
290
+ min: l.length ? l[0] : n[0],
291
+ q1: i,
292
+ median: a,
293
+ q3: o,
294
+ max: l.length ? l[l.length - 1] : n[n.length - 1],
295
+ ...u.length ? { outliers: u } : {}
296
+ };
297
+ }
298
+ var A = (e) => ({
299
+ fitted: e.map(() => NaN),
300
+ r2: 0,
301
+ equation: "",
302
+ predict: () => NaN
303
+ }), j = (e, t) => t ? e.map((e, n) => t[n] ?? NaN) : e.map((e, t) => t);
304
+ function M(e, t) {
305
+ let n = 0, r = 0;
306
+ for (let i = 0; i < e.length; i += 1) Number.isFinite(e[i]) && Number.isFinite(t[i]) && (n += 1, r += e[i]);
307
+ if (n < 2) return 0;
308
+ r /= n;
309
+ let i = 0, a = 0;
310
+ for (let n = 0; n < e.length; n += 1) !Number.isFinite(e[n]) || !Number.isFinite(t[n]) || (i += (e[n] - t[n]) ** 2, a += (e[n] - r) ** 2);
311
+ return a === 0 ? +(i === 0) : Math.max(0, Math.min(1, 1 - i / a));
312
+ }
313
+ var N = (e) => Math.abs(e) >= 1e3 || Math.abs(e) < .001 && e !== 0 ? e.toExponential(2) : String(Math.round(e * 1e3) / 1e3);
314
+ function P(e, t) {
315
+ let n = t.length, r = e.map((e, n) => [...e, t[n]]);
316
+ for (let e = 0; e < n; e += 1) {
317
+ let t = e;
318
+ for (let i = e + 1; i < n; i += 1) Math.abs(r[i][e]) > Math.abs(r[t][e]) && (t = i);
319
+ if (Math.abs(r[t][e]) < 1e-12) return null;
320
+ [r[e], r[t]] = [r[t], r[e]];
321
+ for (let t = 0; t < n; t += 1) {
322
+ if (t === e) continue;
323
+ let i = r[t][e] / r[e][e];
324
+ for (let a = e; a <= n; a += 1) r[t][a] -= i * r[e][a];
325
+ }
326
+ }
327
+ return r.map((e, t) => e[n] / e[t]);
328
+ }
329
+ function F(e, t, n) {
330
+ let r = Math.max(1, Math.min(6, Math.round(t))), i = e.length, a = A(e), o = j(e, n), s = [];
331
+ for (let t = 0; t < i; t += 1) Number.isFinite(e[t]) && Number.isFinite(o[t]) && s.push(t);
332
+ if (s.length <= r) return a;
333
+ let c = Infinity, l = -Infinity;
334
+ for (let e of s) c = Math.min(c, o[e]), l = Math.max(l, o[e]);
335
+ n || (c = 0, l = Math.max(1, i - 1));
336
+ let u = Math.max(l - c, 1e-12), d = (e) => 2 * (e - c) / u - 1, f = Array.from({ length: r + 1 }, () => Array(r + 1).fill(0)), p = Array(r + 1).fill(0);
337
+ for (let t of s) {
338
+ let n = d(o[t]), i = e[t], a = [1];
339
+ for (let e = 1; e <= 2 * r; e += 1) a.push(a[e - 1] * n);
340
+ for (let e = 0; e <= r; e += 1) {
341
+ p[e] += a[e] * i;
342
+ for (let t = 0; t <= r; t += 1) f[e][t] += a[e + t];
343
+ }
344
+ }
345
+ let m = P(f, p);
346
+ if (!m) return a;
347
+ let h = (e) => {
348
+ let t = d(e), n = 0, i = 1;
349
+ for (let e = 0; e <= r; e += 1) n += m[e] * i, i *= t;
350
+ return n;
351
+ }, g = e.map((e, t) => Number.isFinite(e) && Number.isFinite(o[t]) ? h(o[t]) : NaN), _ = m.map((e, t) => t === 0 ? N(e) : `${N(e)} u^${t}`).reverse(), v = n ? `u = 2(x - ${N(c)})/${N(u)} - 1` : `u = 2x/${u} - 1`;
352
+ return {
353
+ fitted: g,
354
+ r2: M(e, g),
355
+ equation: `y = ${_.join(" + ")} (${v})`,
356
+ predict: h
357
+ };
358
+ }
359
+ function I(e, t) {
360
+ let n = j(e, t), { slope: r, intercept: i, ok: a } = te(n, e);
361
+ if (!a) return A(e);
362
+ let o = (e) => r * e + i, s = e.map((e, t) => Number.isFinite(e) && Number.isFinite(n[t]) ? o(n[t]) : NaN);
363
+ return {
364
+ fitted: s,
365
+ r2: M(e, s),
366
+ equation: `y = ${N(r)} x + ${N(i)}`,
367
+ predict: o
368
+ };
369
+ }
370
+ function L(e, t) {
371
+ let n = j(e, t), { slope: r, intercept: i, ok: a } = te(n, e.map((e) => Number.isFinite(e) && e > 0 ? Math.log(e) : NaN));
372
+ if (!a) return A(e);
373
+ let o = Math.exp(i), s = (e) => o * Math.exp(r * e), c = e.map((e, t) => Number.isFinite(e) && e > 0 && Number.isFinite(n[t]) ? s(n[t]) : NaN);
374
+ return {
375
+ fitted: c,
376
+ r2: M(e, c),
377
+ equation: `y = ${N(o)} e^(${N(r)} x)`,
378
+ predict: s
379
+ };
380
+ }
381
+ function R(e, t) {
382
+ let n = +!t, r = j(e, t).map((e) => e + n > 0 ? Math.log(e + n) : NaN), { slope: i, intercept: a, ok: o } = te(r, e);
383
+ if (!o) return A(e);
384
+ let s = (e) => e + n > 0 ? a + i * Math.log(e + n) : NaN, c = e.map((e, t) => Number.isFinite(e) && Number.isFinite(r[t]) ? a + i * r[t] : NaN), l = t ? "x" : "x + 1";
385
+ return {
386
+ fitted: c,
387
+ r2: M(e, c),
388
+ equation: `y = ${N(a)} + ${N(i)} ln(${l})`,
389
+ predict: s
390
+ };
391
+ }
392
+ function ee(e, t) {
393
+ let n = +!t, r = j(e, t).map((e) => e + n > 0 ? Math.log(e + n) : NaN), { slope: i, intercept: a, ok: o } = te(r, e.map((e) => Number.isFinite(e) && e > 0 ? Math.log(e) : NaN));
394
+ if (!o) return A(e);
395
+ let s = Math.exp(a), c = (e) => e + n > 0 ? s * (e + n) ** +i : NaN, l = e.map((e, t) => Number.isFinite(e) && e > 0 && Number.isFinite(r[t]) ? s * Math.exp(i * r[t]) : NaN), u = t ? "x" : "(x + 1)";
396
+ return {
397
+ fitted: l,
398
+ r2: M(e, l),
399
+ equation: `y = ${N(s)} ${u}^${N(i)}`,
400
+ predict: c
401
+ };
402
+ }
403
+ function te(e, t) {
404
+ let n = 0, r = 0, i = 0, a = 0, o = 0;
405
+ for (let s = 0; s < t.length; s += 1) {
406
+ let c = e[s], l = t[s];
407
+ !Number.isFinite(c) || !Number.isFinite(l) || (n += 1, r += c, i += l, a += c * c, o += c * l);
408
+ }
409
+ if (n < 2) return {
410
+ slope: 0,
411
+ intercept: 0,
412
+ ok: !1
413
+ };
414
+ let s = n * a - r * r, c = s === 0 ? 0 : (n * o - r * i) / s;
415
+ return {
416
+ slope: c,
417
+ intercept: (i - c * r) / n,
418
+ ok: !0
419
+ };
420
+ }
421
+ function z(e, t) {
422
+ if (t < 1) return e.slice();
423
+ let n = Array(e.length).fill(NaN), r = 0, i = 0;
424
+ for (let a = 0; a < e.length; a += 1) {
425
+ let o = e[a];
426
+ if (Number.isFinite(o) && (r += o, i += 1), a >= t) {
427
+ let n = e[a - t];
428
+ Number.isFinite(n) && (r -= n, --i);
429
+ }
430
+ a >= t - 1 && i > 0 && (n[a] = r / i);
431
+ }
432
+ return n;
433
+ }
434
+ function B(e, t) {
435
+ let n = 2 / (Math.max(1, t) + 1), r = Array(e.length).fill(NaN), i = null;
436
+ for (let t = 0; t < e.length; t += 1) {
437
+ let a = e[t];
438
+ if (!Number.isFinite(a)) {
439
+ r[t] = i ?? NaN;
440
+ continue;
441
+ }
442
+ i = i == null ? a : n * a + (1 - n) * i, r[t] = i;
443
+ }
444
+ return r;
445
+ }
446
+ function V(e) {
447
+ return e !== "sum" && e !== "avg" && e !== "count";
448
+ }
449
+ function H(e, t) {
450
+ let n = e.length;
451
+ switch (t) {
452
+ case "count": return n;
453
+ case "sum": {
454
+ let t = 0;
455
+ for (let n of e) t += n;
456
+ return t;
457
+ }
458
+ case "avg": {
459
+ if (!n) return 0;
460
+ let t = 0;
461
+ for (let n of e) t += n;
462
+ return t / n;
463
+ }
464
+ case "min": return n ? Math.min(...e) : NaN;
465
+ case "max": return n ? Math.max(...e) : NaN;
466
+ case "first": return n ? e[0] : NaN;
467
+ case "last": return n ? e[n - 1] : NaN;
468
+ case "countDistinct": return new Set(e).size;
469
+ case "median": return U(e, 50);
470
+ default: {
471
+ let n = /^p(\d+(?:\.\d+)?)$/.exec(t);
472
+ return n ? U(e, Number(n[1])) : NaN;
473
+ }
474
+ }
475
+ }
476
+ function U(e, t) {
477
+ let n = e.filter((e) => Number.isFinite(e)).slice().sort((e, t) => e - t);
478
+ if (!n.length) return NaN;
479
+ let r = (n.length - 1) * Math.max(0, Math.min(100, t)) / 100, i = Math.floor(r), a = Math.ceil(r);
480
+ return i === a ? n[i] : n[i] + (n[a] - n[i]) * (r - i);
481
+ }
482
+ function ne(e, t) {
483
+ let n = e instanceof Date ? e.getTime() : typeof e == "number" ? e : Date.parse(e);
484
+ if (!Number.isFinite(n)) return "";
485
+ let r = new Date(n), i = r.getUTCFullYear(), a = r.getUTCMonth(), o;
486
+ switch (t) {
487
+ case "day":
488
+ o = new Date(Date.UTC(i, a, r.getUTCDate()));
489
+ break;
490
+ case "week": {
491
+ let e = (r.getUTCDay() + 6) % 7;
492
+ o = new Date(Date.UTC(i, a, r.getUTCDate() - e));
493
+ break;
494
+ }
495
+ case "month":
496
+ o = new Date(Date.UTC(i, a, 1));
497
+ break;
498
+ case "quarter":
499
+ o = new Date(Date.UTC(i, a - a % 3, 1));
500
+ break;
501
+ default: o = new Date(Date.UTC(i, 0, 1));
502
+ }
503
+ return o.toISOString().slice(0, 10);
504
+ }
505
+ function re(e, t = {}) {
506
+ let n = e.filter((e) => Number.isFinite(e));
507
+ if (!n.length) return {
508
+ categories: [],
509
+ counts: [],
510
+ edges: [],
511
+ width: 0
512
+ };
513
+ let r = t.min ?? Math.min(...n), i = t.max ?? Math.max(...n);
514
+ i <= r && (i = r + 1);
515
+ let a;
516
+ if (t.bins && t.bins > 0) a = Math.round(t.bins);
517
+ else if (t.binWidth && t.binWidth > 0) a = Math.max(1, Math.ceil((i - r) / t.binWidth));
518
+ else if (t.method === "sqrt") a = Math.ceil(Math.sqrt(n.length));
519
+ else if (t.method === "fd") {
520
+ let e = U(n, 75) - U(n, 25), t = e > 0 ? 2 * e / Math.cbrt(n.length) : 0;
521
+ a = Math.ceil(t > 0 ? (i - r) / t : Math.log2(n.length) + 1);
522
+ } else a = Math.ceil(Math.log2(n.length) + 1);
523
+ a = Math.max(1, Math.min(1e3, a));
524
+ let o = t.binWidth && t.binWidth > 0 ? t.binWidth : (i - r) / a, s = o >= 1 ? 0 : Math.min(6, Math.ceil(-Math.log10(o)) + 1), c = (e) => Number(e.toFixed(s)), l = [];
525
+ for (let e = 0; e <= a; e += 1) l.push(c(r + e * o));
526
+ let u = Array(a).fill(0);
527
+ for (let e of n) {
528
+ let t = Math.floor((e - r) / o);
529
+ t >= a && (t = a - 1), t < 0 && (t = 0), u[t] = (u[t] ?? 0) + 1;
530
+ }
531
+ return {
532
+ categories: u.map((e, t) => String(c(r + (t + .5) * o))),
533
+ counts: u,
534
+ edges: l,
535
+ width: o
536
+ };
537
+ }
538
+ //#endregion
539
+ //#region src/chart-axes.ts
540
+ function W(e, t) {
541
+ let n = e.type ?? t;
542
+ return n === "candlestick" || n === "ohlc" || e.ohlc ? "candle" : n === "boxplot" || e.boxes ? "box" : n === "line" || n === "area" ? n : n === "stream" ? "area" : n === "range-bar" || n === "range-area" || n === "lollipop" || n === "dumbbell" ? n : n === "scatter" && e.type === "scatter" ? "scatter" : "bar";
543
+ }
544
+ function ie(e, t, n, r = [], i = !1, a = {}) {
545
+ let o = Infinity, s = -Infinity, c = (e) => {
546
+ Number.isFinite(e) && (i && e <= 0 || (e < o && (o = e), e > s && (s = e)));
547
+ };
548
+ for (let e of r) c(e);
549
+ let l = e.filter((e) => e.kind === "bar" || e.kind === "area"), u = e.filter((e) => e.kind === "line" || e.kind === "scatter" || e.kind === "lollipop");
550
+ for (let t of e) if (t.kind === "range-bar" || t.kind === "range-area" || t.kind === "dumbbell") {
551
+ for (let e of t.values) c(e);
552
+ for (let e of t.lowValues ?? []) c(e);
553
+ }
554
+ let d = /* @__PURE__ */ new Map();
555
+ l.forEach((e, t) => {
556
+ let r = e.stack ? `${e.kind}:${e.stack}` : n ? e.kind : `#${t}`, i = d.get(r);
557
+ i ? i.push(e) : d.set(r, [e]);
558
+ });
559
+ for (let e of d.values()) {
560
+ if (e.length === 1) {
561
+ for (let t of e[0].values) c(t);
562
+ continue;
563
+ }
564
+ for (let n = 0; n < t.length; n += 1) {
565
+ let t = 0, r = 0;
566
+ for (let i of e) {
567
+ let e = i.values[n] ?? 0;
568
+ e >= 0 ? t += e : r += e;
569
+ }
570
+ c(t), c(r);
571
+ }
572
+ }
573
+ for (let e of u) for (let t of e.values) c(t);
574
+ for (let t of e) if (t.kind === "candle") for (let e of t.ohlc ?? []) e && (c(e.h), c(e.l));
575
+ for (let t of e) if (t.kind === "box") {
576
+ for (let e of t.boxes ?? []) if (e) {
577
+ c(e.min), c(e.max);
578
+ for (let t of e.outliers ?? []) c(t);
579
+ }
580
+ }
581
+ for (let t of e) t.errors && t.errors.forEach((e, n) => {
582
+ let r = O(e, t.values[n] ?? 0);
583
+ r && (c(r.lo), c(r.hi));
584
+ });
585
+ if (o === Infinity && (o = +!!i, s = i ? 10 : 1), (l.length || e.some((e) => e.kind === "lollipop")) && !i && (o = Math.min(o, 0), s = Math.max(s, 0)), i) {
586
+ let e = g(o, s), t = a.min != null && a.min > 0 ? a.min : e.min, n = a.max != null && a.max > t ? a.max : e.max;
587
+ return t === e.min && n === e.max ? e : {
588
+ min: t,
589
+ max: n,
590
+ step: e.step,
591
+ ticks: e.ticks.filter((e) => e >= t && e <= n)
592
+ };
593
+ }
594
+ return b(o, s, a);
595
+ }
596
+ function ae(e) {
597
+ let t = e.axes;
598
+ if (!t) return null;
599
+ let { x: n, y: r, w: i, h: a } = e.plot, o = (e) => (t) => {
600
+ let n = v(t, e.min, e.max, e.log);
601
+ return n === null ? NaN : (e.reversed && (n = 1 - n), r + a - n * a);
602
+ }, s = o(t.y), c = t.y2 ? o(t.y2) : s, l = (e) => (t) => {
603
+ let n = a === 0 ? 0 : (r + a - t) / a;
604
+ if (e.reversed && (n = 1 - n), !e.log) return e.min + n * (e.max - e.min);
605
+ let i = Math.log10(e.min);
606
+ return 10 ** (i + n * (Math.log10(e.max) - i));
607
+ }, u = t.x, d = u && u.max - u.min || 1, f = u?.log && Math.log10(u.max) - Math.log10(u.min) || 1, p = (e) => {
608
+ if (!u || !Number.isFinite(e) || u.log && e <= 0) return NaN;
609
+ let t = u.log ? (Math.log10(e) - Math.log10(u.min)) / f : (e - u.min) / d;
610
+ return u.reversed && (t = 1 - t), n + t * i;
611
+ }, m = (e) => {
612
+ if (u?.values) {
613
+ let t = u.values[Math.round(e)];
614
+ if (t != null && Number.isFinite(t)) return p(t);
615
+ }
616
+ let r = n + t.slot * e + t.slot / 2;
617
+ return t.xReversed ? n + i - (r - n) : r;
618
+ }, h = (n) => {
619
+ if (u) {
620
+ if (n instanceof Date) return p(n.getTime());
621
+ if (typeof n == "number") return p(n);
622
+ let t = u.type === "time" ? Date.parse(n) : Number(n);
623
+ if (Number.isFinite(t)) return p(t);
624
+ let r = e.xTicks.findIndex((e) => e.label === n);
625
+ return r >= 0 ? e.xTicks[r].x : NaN;
626
+ }
627
+ if (typeof n == "number") return m(n);
628
+ let r = n instanceof Date ? n.toISOString() : n, i = t.labels ? t.labels.indexOf(r) : -1;
629
+ return i >= 0 ? m(i) : NaN;
630
+ }, g = (e) => {
631
+ let r = i === 0 ? 0 : (e - n) / i;
632
+ return (u ? u.reversed : t.xReversed) && (r = 1 - r), u?.log ? 10 ** (Math.log10(u.min) + r * f) : u ? u.min + r * d : Math.max(0, Math.min(t.count - 1, r * t.count - .5));
633
+ };
634
+ return {
635
+ xOf: m,
636
+ yOf: (e, t) => t === "right" ? c(e) : s(e),
637
+ xInvert: (e) => {
638
+ if (u?.values) {
639
+ let t = g(e), n = 0, r = Infinity;
640
+ return u.values.forEach((e, i) => {
641
+ let a = Math.abs(e - t);
642
+ a < r && (r = a, n = i);
643
+ }), n;
644
+ }
645
+ let r = Math.floor((e - n) / (t.slot || 1)), i = t.xReversed ? t.count - 1 - r : r;
646
+ return Math.max(0, Math.min(t.count - 1, i));
647
+ },
648
+ yInvert: (e, n) => n === "right" && t.y2 ? l(t.y2)(e) : l(t.y)(e),
649
+ xOfValue: h,
650
+ xInvertValue: g
651
+ };
652
+ }
653
+ function G(e) {
654
+ let t = e.xAxis ?? {}, n = e.yAxis ?? {}, r = e.y2Axis ?? {}, i = (e, t) => ({
655
+ ...e,
656
+ type: e.type ?? t.type,
657
+ scale: e.scale ?? t.scale,
658
+ title: e.title ?? t.title,
659
+ gridLines: e.gridLines ?? t.gridLines,
660
+ labels: e.labels !== !1,
661
+ nice: e.nice !== !1,
662
+ reversed: e.reversed === !0
663
+ });
664
+ return {
665
+ x: i(t, {
666
+ type: e.xType ?? "category",
667
+ scale: "linear",
668
+ title: e.xAxisTitle,
669
+ gridLines: !1
670
+ }),
671
+ y: i(n, {
672
+ type: "category",
673
+ scale: e.yScale ?? "linear",
674
+ title: e.yAxisTitle,
675
+ gridLines: !0
676
+ }),
677
+ y2: i(r, {
678
+ type: "category",
679
+ scale: e.y2Scale ?? "linear",
680
+ title: e.y2AxisTitle,
681
+ gridLines: !1
682
+ })
683
+ };
684
+ }
685
+ var oe = 22, se = 16, ce = 16;
686
+ function le(e, t, n) {
687
+ let r = (e.title ?? "").trim(), i = (e.subtitle ?? "").trim(), a = (e.caption ?? "").trim(), o = 0, s = null, c = null;
688
+ r && (o += oe, s = {
689
+ x: t / 2,
690
+ y: o - 6,
691
+ text: r
692
+ }), i && (o += se, c = {
693
+ x: t / 2,
694
+ y: o - 4,
695
+ text: i
696
+ }), o && (o += 4);
697
+ let l = 0, u = null;
698
+ return a && (l = ce, u = {
699
+ x: 8,
700
+ y: n - 5,
701
+ text: a
702
+ }), {
703
+ top: o,
704
+ bottom: l,
705
+ title: s,
706
+ subtitle: c,
707
+ caption: u
708
+ };
709
+ }
710
+ function ue(e, t, n, r, i) {
711
+ return n.formatter ? n.formatter(e, t) : i(e, n.format ?? r.valueFormat, r);
712
+ }
713
+ //#endregion
714
+ //#region src/chart-decimate.ts
715
+ var de = [
716
+ "values",
717
+ "rowIds",
718
+ "upperValues",
719
+ "lowerValues",
720
+ "ohlc",
721
+ "boxes",
722
+ "errors",
723
+ "markers",
724
+ "colors",
725
+ "lowValues",
726
+ "targets",
727
+ "volumes"
728
+ ], fe = ["waterfallTotals"];
729
+ function K(e, t) {
730
+ let n = (e) => {
731
+ if (!e) return;
732
+ let n = Array(t.length);
733
+ for (let r = 0; r < t.length; r += 1) n[r] = e[t[r]];
734
+ return n;
735
+ }, r = e.series.map((e) => {
736
+ let t = {
737
+ ...e,
738
+ values: n(e.values) ?? []
739
+ };
740
+ for (let r of de) {
741
+ if (r === "values") continue;
742
+ let i = e[r];
743
+ i && (t[r] = n(i));
744
+ }
745
+ return t;
746
+ }), i = {
747
+ ...e,
748
+ categories: n(e.categories) ?? [],
749
+ series: r
750
+ };
751
+ for (let t of fe) {
752
+ let r = e[t];
753
+ r && (i[t] = n(r));
754
+ }
755
+ return i;
756
+ }
757
+ function q(e, t, n) {
758
+ let r = e.length, i = (e) => n && Number.isFinite(n[e]) ? n[e] : e;
759
+ if (t >= r || r <= 2) return e.map((e, t) => t);
760
+ if (t < 3) return [0, r - 1];
761
+ let a = [0], o = (r - 2) / (t - 2), s = 0;
762
+ for (let n = 0; n < t - 2; n += 1) {
763
+ let t = Math.floor((n + 1) * o) + 1, c = Math.min(Math.floor((n + 2) * o) + 1, r), l = 0, u = 0, d = 0;
764
+ for (let n = t; n < c; n += 1) {
765
+ let t = e[n];
766
+ Number.isFinite(t) && (l += i(n), u += t, d += 1);
767
+ }
768
+ d ? (l /= d, u /= d) : (l = (i(t) + i(Math.min(c, r - 1))) / 2, u = e[s]);
769
+ let f = Math.floor(n * o) + 1, p = Math.min(Math.floor((n + 1) * o) + 1, r), m = i(s), h = Number.isFinite(e[s]) ? e[s] : 0, g = -1, _ = -1;
770
+ for (let t = f; t < p; t += 1) {
771
+ let n = e[t];
772
+ if (!Number.isFinite(n)) continue;
773
+ let r = Math.abs((m - l) * (n - h) - (m - i(t)) * (u - h));
774
+ r > _ && (_ = r, g = t);
775
+ }
776
+ g < 0 && (g = f), a.push(g), s = g;
777
+ }
778
+ return a.push(r - 1), a;
779
+ }
780
+ function J(e, t) {
781
+ let n = e.length;
782
+ if (t >= n || n <= 2) return e.map((e, t) => t);
783
+ let r = /* @__PURE__ */ new Set([0, n - 1]), i = n / Math.max(1, t);
784
+ for (let a = 0; a < t; a += 1) {
785
+ let t = Math.floor(a * i), o = Math.min(n, Math.floor((a + 1) * i)), s = -1, c = -1;
786
+ for (let n = t; n < o; n += 1) {
787
+ let t = e[n];
788
+ Number.isFinite(t) && ((s < 0 || t < e[s]) && (s = n), (c < 0 || t > e[c]) && (c = n));
789
+ }
790
+ s >= 0 && r.add(s), c >= 0 && r.add(c);
791
+ }
792
+ return [...r].sort((e, t) => e - t);
793
+ }
794
+ function pe(e, t) {
795
+ if (e === !1) return null;
796
+ let n = typeof e == "object" ? e : {}, r = Math.max(8, Math.round(n.target ?? t));
797
+ return {
798
+ method: n.method ?? "lttb",
799
+ target: r,
800
+ threshold: Math.max(r, Math.round(n.threshold ?? r))
801
+ };
802
+ }
803
+ function Y(e, t, n = e.decimate) {
804
+ let r = pe(n, t);
805
+ if (!r) return e;
806
+ let i = e.categories.length;
807
+ if (i <= r.threshold || !e.series.length) return e;
808
+ let a = (e) => e === "line" || e === "area";
809
+ if (!a(e.type) && !e.series.every((e) => a(e.type)) || e.series.some((e) => e.type && !a(e.type) || e.ohlc || e.boxes)) return e;
810
+ let o = (e.xAxis?.type ?? e.xType) === "number", s = o && e.xAxis?.scale === "log", c = o ? e.categories.map((e) => {
811
+ let t = Number(e);
812
+ return s ? t > 0 ? Math.log10(t) : NaN : t;
813
+ }) : void 0, l = /* @__PURE__ */ new Set();
814
+ for (let t of e.series) {
815
+ let e = r.method === "minmax" ? J(t.values, Math.floor(r.target / 2)) : q(t.values, r.target, c);
816
+ for (let t of e) l.add(t);
817
+ }
818
+ let u = [...l].sort((e, t) => e - t);
819
+ return u.length >= i ? e : K(e, u);
820
+ }
821
+ //#endregion
822
+ //#region src/chart-indicators.ts
823
+ var X = (e) => Array(e).fill(NaN);
824
+ function me(e, t) {
825
+ let n = e.length, r = Math.max(1, Math.floor(t)), i = X(n), a = r * (r + 1) / 2;
826
+ for (let t = r - 1; t < n; t += 1) {
827
+ let n = 0, o = !0;
828
+ for (let i = 0; i < r; i += 1) {
829
+ let a = e[t - i];
830
+ if (!Number.isFinite(a)) {
831
+ o = !1;
832
+ break;
833
+ }
834
+ n += a * (r - i);
835
+ }
836
+ o && (i[t] = n / a);
837
+ }
838
+ return i;
839
+ }
840
+ function he(e, t = 20, n = 2) {
841
+ let r = e.length, i = Math.max(1, Math.floor(t)), a = z(e, i), o = X(r), s = X(r);
842
+ for (let t = i - 1; t < r; t += 1) {
843
+ let r = a[t];
844
+ if (!Number.isFinite(r)) continue;
845
+ let c = 0, l = 0;
846
+ for (let n = t - i + 1; n <= t; n += 1) {
847
+ let t = e[n];
848
+ Number.isFinite(t) && (c += (t - r) * (t - r), l += 1);
849
+ }
850
+ let u = l ? Math.sqrt(c / l) : 0;
851
+ o[t] = r + n * u, s[t] = r - n * u;
852
+ }
853
+ return {
854
+ middle: a,
855
+ upper: o,
856
+ lower: s
857
+ };
858
+ }
859
+ function ge(e, t = 14) {
860
+ let n = e.length, r = Math.max(1, Math.floor(t)), i = X(n);
861
+ if (n <= r) return i;
862
+ let a = 0, o = 0;
863
+ for (let t = 1; t <= r; t += 1) {
864
+ let n = e[t] - e[t - 1];
865
+ n > 0 ? a += n : o -= n;
866
+ }
867
+ let s = a / r, c = o / r, l = (e, t) => t === 0 ? 100 : 100 - 100 / (1 + e / t);
868
+ i[r] = l(s, c);
869
+ for (let t = r + 1; t < n; t += 1) {
870
+ let n = e[t] - e[t - 1];
871
+ s = (s * (r - 1) + (n > 0 ? n : 0)) / r, c = (c * (r - 1) + (n < 0 ? -n : 0)) / r, i[t] = l(s, c);
872
+ }
873
+ return i;
874
+ }
875
+ function _e(e, t = 12, n = 26, r = 9) {
876
+ let i = e.length, a = B(e, t), o = B(e, n), s = X(i);
877
+ for (let e = n - 1; e < i; e += 1) s[e] = a[e] - o[e];
878
+ let c = X(i), l = X(i), u = 2 / (Math.max(1, r) + 1), d = null, f = 0;
879
+ for (let e = 0; e < i; e += 1) {
880
+ let t = s[e];
881
+ Number.isFinite(t) && (f += 1, d = d == null ? t : u * t + (1 - u) * d, f >= r && (c[e] = d, l[e] = t - d));
882
+ }
883
+ return {
884
+ macd: s,
885
+ signal: c,
886
+ histogram: l
887
+ };
888
+ }
889
+ var ve = (e) => (e.h + e.l + e.c) / 3;
890
+ function ye(e, t) {
891
+ let n = e.length, r = X(n), i = 0, a = 0;
892
+ for (let o = 0; o < n; o += 1) {
893
+ let n = e[o], s = t[o];
894
+ if (!n || !Number.isFinite(s)) {
895
+ r[o] = a > 0 ? i / a : NaN;
896
+ continue;
897
+ }
898
+ i += ve(n) * s, a += s, r[o] = a > 0 ? i / a : NaN;
899
+ }
900
+ return r;
901
+ }
902
+ function be(e, t) {
903
+ let n = e[t];
904
+ if (!n) return NaN;
905
+ let r = t > 0 ? e[t - 1] : null;
906
+ return r ? Math.max(n.h - n.l, Math.abs(n.h - r.c), Math.abs(n.l - r.c)) : n.h - n.l;
907
+ }
908
+ function xe(e, t = 14) {
909
+ let n = e.length, r = Math.max(1, Math.floor(t)), i = X(n);
910
+ if (n < r) return i;
911
+ let a = 0;
912
+ for (let t = 0; t < r; t += 1) {
913
+ let n = be(e, t);
914
+ if (!Number.isFinite(n)) return i;
915
+ a += n;
916
+ }
917
+ let o = a / r;
918
+ i[r - 1] = o;
919
+ for (let t = r; t < n; t += 1) {
920
+ let n = be(e, t);
921
+ if (!Number.isFinite(n)) {
922
+ i[t] = NaN;
923
+ continue;
924
+ }
925
+ o = (o * (r - 1) + n) / r, i[t] = o;
926
+ }
927
+ return i;
928
+ }
929
+ function Se(e, t = 14, n = 3) {
930
+ let r = e.length, i = Math.max(1, Math.floor(t)), a = X(r);
931
+ for (let t = i - 1; t < r; t += 1) {
932
+ let n = -Infinity, r = Infinity, o = !0;
933
+ for (let a = t - i + 1; a <= t; a += 1) {
934
+ let t = e[a];
935
+ if (!t) {
936
+ o = !1;
937
+ break;
938
+ }
939
+ t.h > n && (n = t.h), t.l < r && (r = t.l);
940
+ }
941
+ let s = e[t]?.c;
942
+ !o || s == null || (a[t] = n === r ? 50 : (s - r) / (n - r) * 100);
943
+ }
944
+ let o = Math.max(1, Math.floor(n)), s = X(r);
945
+ for (let e = o - 1; e < r; e += 1) {
946
+ let t = 0, n = !0;
947
+ for (let r = e - o + 1; r <= e; r += 1) {
948
+ if (!Number.isFinite(a[r])) {
949
+ n = !1;
950
+ break;
951
+ }
952
+ t += a[r];
953
+ }
954
+ n && (s[e] = t / o);
955
+ }
956
+ return {
957
+ k: a,
958
+ d: s
959
+ };
960
+ }
961
+ function Ce(e, t) {
962
+ let n = e.length, r = X(n), i = 0;
963
+ for (let a = 0; a < n; a += 1) {
964
+ let n = t[a];
965
+ if (!Number.isFinite(e[a]) || !Number.isFinite(n)) {
966
+ r[a] = i;
967
+ continue;
968
+ }
969
+ a > 0 && Number.isFinite(e[a - 1]) && (e[a] > e[a - 1] ? i += n : e[a] < e[a - 1] && (i -= n)), r[a] = i;
970
+ }
971
+ return r;
972
+ }
973
+ function we(e, t, n) {
974
+ return Te(e, t, n).values;
975
+ }
976
+ function Te(e, t, n) {
977
+ let r = (e) => e.equation ? {
978
+ values: e.fitted,
979
+ r2: e.r2,
980
+ equation: e.equation
981
+ } : { values: e.fitted }, i = Ee(e, t);
982
+ return i ? r(i) : { values: Oe(e, t, n) };
983
+ }
984
+ function Ee(e, t, n) {
985
+ if (t === "linear") return I(e, n);
986
+ if (t === "exp") return L(e, n);
987
+ if (t === "log") return R(e, n);
988
+ if (t === "power") return ee(e, n);
989
+ let r = /^poly:(\d+)$/.exec(t);
990
+ return r ? F(e, Number(r[1]), n) : null;
991
+ }
992
+ function De(e) {
993
+ let t = /^(sma|ema|wma|bb|poly):(\d+)/.exec(e);
994
+ return t ? `${t[1] === "poly" ? "poly" : t[1].toUpperCase()} ${t[2]}` : e === "linear" ? "trend" : e;
995
+ }
996
+ function Oe(e, t, n) {
997
+ if (t === "vwap") return n?.ohlc && n.volumes ? ye(n.ohlc, n.volumes) : e.map(() => NaN);
998
+ let r = /^bb:(\d+):(\d+(?:\.\d+)?)$/.exec(t);
999
+ if (r) return he(e, Number(r[1]), Number(r[2])).middle;
1000
+ let i = /^(sma|ema|wma):(\d+)$/.exec(t);
1001
+ if (!i) return e.map(() => NaN);
1002
+ let a = Number(i[2]);
1003
+ return i[1] === "wma" ? me(e, a) : i[1] === "ema" ? B(e, a) : z(e, a);
1004
+ }
1005
+ function ke(e, t) {
1006
+ return t.source ? e.series.find((e) => e.label === t.source) ?? null : e.series.find((e) => e.ohlc) ?? e.series[0] ?? null;
1007
+ }
1008
+ function Ae(e) {
1009
+ return e.ohlc ? e.ohlc.map((e) => e ? e.c : NaN) : e.values.slice();
1010
+ }
1011
+ function je(e, t) {
1012
+ let n = ke(e, t), r = e.categories.length, i = n ? Ae(n) : X(r), a = n?.ohlc ?? i.map((e) => Number.isFinite(e) ? {
1013
+ o: e,
1014
+ h: e,
1015
+ l: e,
1016
+ c: e
1017
+ } : null), o = n?.volumes ?? X(r), s = t.params ?? {}, c = {
1018
+ categories: e.categories,
1019
+ xType: e.xType,
1020
+ xAxis: e.xAxis,
1021
+ height: t.height ?? Math.max(90, Math.round((e.height ?? 300) / 3)),
1022
+ palette: e.palette,
1023
+ valueFormat: "number",
1024
+ locale: e.locale
1025
+ }, l = (e) => e.map(([e, t]) => ({
1026
+ value: e,
1027
+ label: t,
1028
+ dashed: !0
1029
+ }));
1030
+ switch (t.kind) {
1031
+ case "rsi": {
1032
+ let e = s.period ?? 14;
1033
+ return {
1034
+ ...c,
1035
+ type: "line",
1036
+ title: `RSI ${e}`,
1037
+ series: [{
1038
+ label: `RSI ${e}`,
1039
+ values: ge(i, e),
1040
+ marker: "none"
1041
+ }],
1042
+ yAxis: {
1043
+ min: 0,
1044
+ max: 100,
1045
+ tickInterval: 50,
1046
+ nice: !1
1047
+ },
1048
+ referenceLines: l([[30, "30"], [70, "70"]])
1049
+ };
1050
+ }
1051
+ case "stochastic": {
1052
+ let e = s.period ?? 14, t = s.smooth ?? 3, { k: n, d: r } = Se(a, e, t);
1053
+ return {
1054
+ ...c,
1055
+ type: "line",
1056
+ title: `Stochastic ${e}, ${t}`,
1057
+ series: [{
1058
+ label: "%K",
1059
+ values: n,
1060
+ marker: "none"
1061
+ }, {
1062
+ label: "%D",
1063
+ values: r,
1064
+ marker: "none",
1065
+ dash: [4, 3]
1066
+ }],
1067
+ yAxis: {
1068
+ min: 0,
1069
+ max: 100,
1070
+ tickInterval: 50,
1071
+ nice: !1
1072
+ },
1073
+ referenceLines: l([[20, "20"], [80, "80"]])
1074
+ };
1075
+ }
1076
+ case "macd": {
1077
+ let e = s.fast ?? 12, t = s.slow ?? 26, n = s.signal ?? 9, r = _e(i, e, t, n);
1078
+ return {
1079
+ ...c,
1080
+ type: "bar",
1081
+ title: `MACD ${e}, ${t}, ${n}`,
1082
+ series: [
1083
+ {
1084
+ label: "Histogram",
1085
+ values: r.histogram,
1086
+ colors: r.histogram.map((e) => e < 0 ? "#ef4444" : "#16a34a")
1087
+ },
1088
+ {
1089
+ label: "MACD",
1090
+ values: r.macd,
1091
+ type: "line",
1092
+ marker: "none"
1093
+ },
1094
+ {
1095
+ label: "Signal",
1096
+ values: r.signal,
1097
+ type: "line",
1098
+ marker: "none",
1099
+ dash: [4, 3]
1100
+ }
1101
+ ],
1102
+ referenceLines: l([[0, ""]])
1103
+ };
1104
+ }
1105
+ case "atr": {
1106
+ let e = s.period ?? 14;
1107
+ return {
1108
+ ...c,
1109
+ type: "line",
1110
+ title: `ATR ${e}`,
1111
+ series: [{
1112
+ label: `ATR ${e}`,
1113
+ values: xe(a, e),
1114
+ marker: "none"
1115
+ }],
1116
+ yAxis: { min: 0 }
1117
+ };
1118
+ }
1119
+ case "obv": return {
1120
+ ...c,
1121
+ type: "line",
1122
+ title: "OBV",
1123
+ series: [{
1124
+ label: "OBV",
1125
+ values: Ce(i, o),
1126
+ marker: "none"
1127
+ }],
1128
+ valueFormat: "compact"
1129
+ };
1130
+ default: {
1131
+ let e = a.map((e, t) => {
1132
+ if (!e) return null;
1133
+ let n = t > 0 ? a[t - 1] : null;
1134
+ return (n ? e.c >= n.c : e.c >= e.o) ? "#16a34a" : "#ef4444";
1135
+ });
1136
+ return {
1137
+ ...c,
1138
+ type: "bar",
1139
+ title: "Volume",
1140
+ series: [{
1141
+ label: "Volume",
1142
+ values: o.slice(),
1143
+ colors: e
1144
+ }],
1145
+ yAxis: { min: 0 },
1146
+ valueFormat: "compact"
1147
+ };
1148
+ }
1149
+ }
1150
+ }
1151
+ //#endregion
1152
+ //#region src/chart-financial.ts
1153
+ function Me(e) {
1154
+ let t = Array(e.length), n = null;
1155
+ for (let r = 0; r < e.length; r += 1) {
1156
+ let i = e[r];
1157
+ if (!i || ![
1158
+ i.o,
1159
+ i.h,
1160
+ i.l,
1161
+ i.c
1162
+ ].every(Number.isFinite)) {
1163
+ t[r] = null, n = null;
1164
+ continue;
1165
+ }
1166
+ let a = (i.o + i.h + i.l + i.c) / 4, o = n ? (n.o + n.c) / 2 : (i.o + i.c) / 2, s = {
1167
+ o,
1168
+ c: a,
1169
+ h: Math.max(i.h, o, a),
1170
+ l: Math.min(i.l, o, a)
1171
+ };
1172
+ t[r] = s, n = s;
1173
+ }
1174
+ return t;
1175
+ }
1176
+ function Ne(e, t, n) {
1177
+ let r = /* @__PURE__ */ new Map(), i = [];
1178
+ for (let a = 0; a < e.length; a += 1) {
1179
+ let o = Date.parse(e[a]);
1180
+ if (!Number.isFinite(o)) continue;
1181
+ let s = ne(o, n.bucket);
1182
+ if (!s) continue;
1183
+ let c = r.get(s);
1184
+ c || (c = {
1185
+ bar: null,
1186
+ vol: 0,
1187
+ first: Infinity,
1188
+ last: -Infinity
1189
+ }, r.set(s, c), i.push([s, Date.parse(s)]));
1190
+ let l = t[a];
1191
+ l && (c.bar ? (c.bar.h = Math.max(c.bar.h, l.h), c.bar.l = Math.min(c.bar.l, l.l), o >= c.last && (c.bar.c = l.c), o <= c.first && (c.bar.o = l.o)) : c.bar = { ...l }, o > c.last && (c.last = o), o < c.first && (c.first = o));
1192
+ let u = n.volumes?.[a];
1193
+ Number.isFinite(u) && (c.vol += u);
1194
+ }
1195
+ return i.sort((e, t) => e[1] - t[1]), {
1196
+ categories: i.map(([e]) => e),
1197
+ ohlc: i.map(([e]) => r.get(e).bar),
1198
+ ...n.volumes ? { volumes: i.map(([e]) => r.get(e).vol) } : {}
1199
+ };
1200
+ }
1201
+ function Pe(e, t) {
1202
+ let n = (t) => e.find((e) => t.test(e.field) || t.test(e.label))?.id ?? null;
1203
+ return {
1204
+ open: t?.open ?? n(/open/i),
1205
+ high: t?.high ?? n(/high/i),
1206
+ low: t?.low ?? n(/low/i),
1207
+ close: t?.close ?? n(/close|last|price/i),
1208
+ volume: t?.volume ?? n(/vol/i)
1209
+ };
1210
+ }
1211
+ function Fe(e, t, n, r) {
1212
+ let i = e(t), a = e(n.open), o = e(n.high), s = e(n.low), c = e(n.close);
1213
+ if (!i || !a || !o || !s || !c) return null;
1214
+ let l = e(n.volume);
1215
+ return {
1216
+ category: i,
1217
+ ohlc: {
1218
+ open: a,
1219
+ high: o,
1220
+ low: s,
1221
+ close: c,
1222
+ ...l ? { volume: l } : {},
1223
+ ...r.bucket ? { bucket: r.bucket } : {},
1224
+ ...r.candleStyle ? { candleStyle: r.candleStyle } : {},
1225
+ lastPriceLine: !0
1226
+ }
1227
+ };
1228
+ }
1229
+ function Ie(e) {
1230
+ let t = {
1231
+ sma: "sma:20",
1232
+ ema: "ema:20",
1233
+ bb: "bb:20:2",
1234
+ vwap: "vwap"
1235
+ }, n = [], r = null;
1236
+ for (let i of e) {
1237
+ let e = t[i];
1238
+ if (e) {
1239
+ r ??= e;
1240
+ continue;
1241
+ }
1242
+ (i === "volume" || i === "rsi" || i === "macd" || i === "stochastic" || i === "atr" || i === "obv") && n.push({ kind: i });
1243
+ }
1244
+ return {
1245
+ panes: n,
1246
+ overlay: r
1247
+ };
1248
+ }
1249
+ function Le(e, t) {
1250
+ let n = (e) => typeof e == "number" ? e : Number(e), r = e.map((e) => ({
1251
+ r: e,
1252
+ t: Date.parse(String(e[t.date]))
1253
+ })).filter((e) => Number.isFinite(e.t)).sort((e, t) => e.t - t.t), i = r.map((e) => new Date(e.t).toISOString().slice(0, 10)), a = r.map(({ r: e }) => {
1254
+ let r = {
1255
+ o: n(e[t.open]),
1256
+ h: n(e[t.high]),
1257
+ l: n(e[t.low]),
1258
+ c: n(e[t.close])
1259
+ };
1260
+ return [
1261
+ r.o,
1262
+ r.h,
1263
+ r.l,
1264
+ r.c
1265
+ ].every(Number.isFinite) ? r : null;
1266
+ }), o = t.volume ? r.map(({ r: e }) => n(e[t.volume])) : void 0;
1267
+ if (t.bucket) {
1268
+ let e = Ne(i, a, {
1269
+ bucket: t.bucket,
1270
+ volumes: o
1271
+ });
1272
+ i = e.categories, a = e.ohlc, o = e.volumes;
1273
+ }
1274
+ let s = {
1275
+ label: t.label ?? "Price",
1276
+ values: a.map((e) => e ? e.c : NaN),
1277
+ ohlc: a,
1278
+ ...o ? { volumes: o } : {}
1279
+ };
1280
+ return {
1281
+ type: t.type ?? "candlestick",
1282
+ categories: i,
1283
+ series: [s],
1284
+ xType: "ordinal-time",
1285
+ ...t.candleStyle ? { candleStyle: t.candleStyle } : {},
1286
+ ...t.lastPriceLine ? { lastPriceLine: !0 } : {}
1287
+ };
1288
+ }
1289
+ //#endregion
1290
+ //#region src/chart-cartesian.ts
1291
+ function Re(e, t, n = {}) {
1292
+ return ze(e, !!n.connectNulls).map((e) => Be(e, t, n.step)).filter(Boolean).join(" ");
1293
+ }
1294
+ function ze(e, t) {
1295
+ let n = [], r = [];
1296
+ for (let i of e) i.defined ? r.push({
1297
+ x: i.x,
1298
+ y: i.y
1299
+ }) : r.length && !t && (n.push(r), r = []);
1300
+ return r.length && n.push(r), n;
1301
+ }
1302
+ function Be(e, t, n) {
1303
+ return e.length ? n ? Ve(He(e, n)) : t ? Ge(e) : Ve(e) : "";
1304
+ }
1305
+ function Ve(e) {
1306
+ return e.map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`).join(" ");
1307
+ }
1308
+ function He(e, t) {
1309
+ let n = [];
1310
+ for (let r = 0; r < e.length; r += 1) {
1311
+ let i = e[r];
1312
+ if (r > 0) {
1313
+ let a = e[r - 1];
1314
+ if (t === "before") n.push({
1315
+ x: a.x,
1316
+ y: i.y
1317
+ });
1318
+ else if (t === "after") n.push({
1319
+ x: i.x,
1320
+ y: a.y
1321
+ });
1322
+ else {
1323
+ let e = o((a.x + i.x) / 2);
1324
+ n.push({
1325
+ x: e,
1326
+ y: a.y
1327
+ }, {
1328
+ x: e,
1329
+ y: i.y
1330
+ });
1331
+ }
1332
+ }
1333
+ n.push(i);
1334
+ }
1335
+ return n;
1336
+ }
1337
+ function Ue(e, t, n, r) {
1338
+ return !e.length || !t.length ? "" : `${Be(e, n, r)} ${Be(t.slice().reverse(), n, r).replace(/^M/, "L")} Z`;
1339
+ }
1340
+ function We(e, t) {
1341
+ let n = e.length, r = e[0]?.length ?? 0, i = Array(r).fill(0);
1342
+ if (!n || !r || t === "zero") return i;
1343
+ let a = (t, n) => {
1344
+ let r = e[t][n];
1345
+ return Number.isFinite(r) ? r : 0;
1346
+ };
1347
+ if (t === "silhouette") {
1348
+ for (let e = 0; e < r; e += 1) {
1349
+ let t = 0;
1350
+ for (let r = 0; r < n; r += 1) t += a(r, e);
1351
+ i[e] = -t / 2;
1352
+ }
1353
+ return i;
1354
+ }
1355
+ let o = 0;
1356
+ for (let e = 1; e < r; e += 1) {
1357
+ let t = 0, r = 0;
1358
+ for (let i = 0; i < n; i += 1) {
1359
+ let n = a(i, e), o = (n - a(i, e - 1)) / 2;
1360
+ for (let t = 0; t < i; t += 1) o += a(t, e) - a(t, e - 1);
1361
+ t += n, r += o * n;
1362
+ }
1363
+ i[e - 1] = o, t && (o -= r / t);
1364
+ }
1365
+ return i[r - 1] = o, i;
1366
+ }
1367
+ function Ge(e) {
1368
+ let t = e.length;
1369
+ if (t === 0) return "";
1370
+ if (t === 1) return `M${e[0].x},${e[0].y}`;
1371
+ if (t === 2) return `M${e[0].x},${e[0].y} L${e[1].x},${e[1].y}`;
1372
+ let n = Array(t - 1), r = Array(t - 1);
1373
+ for (let i = 0; i < t - 1; i += 1) {
1374
+ let t = e[i + 1].x - e[i].x;
1375
+ n[i] = t, r[i] = t === 0 ? 0 : (e[i + 1].y - e[i].y) / t;
1376
+ }
1377
+ let i = Array(t);
1378
+ i[0] = r[0], i[t - 1] = r[t - 2];
1379
+ 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;
1380
+ for (let e = 0; e < t - 1; e += 1) {
1381
+ if (r[e] === 0) {
1382
+ i[e] = 0, i[e + 1] = 0;
1383
+ continue;
1384
+ }
1385
+ let t = i[e] / r[e], n = i[e + 1] / r[e], a = Math.hypot(t, n);
1386
+ a > 3 && (i[e] = 3 / a * t * r[e], i[e + 1] = 3 / a * n * r[e]);
1387
+ }
1388
+ let a = `M${e[0].x},${e[0].y}`;
1389
+ for (let r = 0; r < t - 1; r += 1) {
1390
+ 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;
1391
+ a += ` C${o},${s} ${c},${l} ${e[r + 1].x},${e[r + 1].y}`;
1392
+ }
1393
+ return a;
1394
+ }
1395
+ function Ke(e, t, n, r) {
1396
+ let i = Math.max(.5, r);
1397
+ switch (e) {
1398
+ case "square": return `M${o(t - i)},${o(n - i)} h${o(2 * i)} v${o(2 * i)} h${o(-2 * i)} Z`;
1399
+ case "diamond": return `M${o(t)},${o(n - i * 1.3)} L${o(t + i * 1.3)},${o(n)} L${o(t)},${o(n + i * 1.3)} L${o(t - i * 1.3)},${o(n)} Z`;
1400
+ case "triangle": return `M${o(t)},${o(n - i * 1.2)} L${o(t + i * 1.2)},${o(n + i)} L${o(t - i * 1.2)},${o(n + i)} Z`;
1401
+ case "cross": return `M${o(t - i)},${o(n - i)} L${o(t + i)},${o(n + i)} M${o(t - i)},${o(n + i)} L${o(t + i)},${o(n - i)}`;
1402
+ default: return "";
1403
+ }
1404
+ }
1405
+ function qe(e, t) {
1406
+ let n = typeof e.marker == "string" ? { shape: e.marker } : e.marker ?? {}, r = e.markers?.[t] ?? void 0, i = r?.color ?? n.color ?? e.colors?.[t] ?? void 0, a = r?.shape ?? n.shape, o = r?.size ?? n.size;
1407
+ if (a == null && o == null && i == null) return;
1408
+ let s = {};
1409
+ return a != null && (s.shape = a), o != null && (s.size = o), i != null && (s.color = i), s;
1410
+ }
1411
+ function Je(e) {
1412
+ let t = {}, n = !1;
1413
+ if (e.strokeWidth != null && (t.strokeWidth = e.strokeWidth, n = !0), e.dash != null && (t.dash = Array.isArray(e.dash) ? e.dash.join(" ") : e.dash, n = !0), e.opacity != null && (t.opacity = e.opacity, n = !0), e.gradient) {
1414
+ let r = e.gradient === !0 ? {} : e.gradient;
1415
+ t.gradient = {
1416
+ from: r.from ?? e.color,
1417
+ to: r.to ?? "transparent"
1418
+ }, n = !0;
1419
+ }
1420
+ return n ? t : void 0;
1421
+ }
1422
+ function Ye(e, t, n, r = {}) {
1423
+ if (t.show === !1) return [];
1424
+ let i = [], a = r.share ? /* @__PURE__ */ new Map() : null;
1425
+ if (a) for (let t of e.bars) {
1426
+ let e = t.index === void 0 ? t.label : String(t.index);
1427
+ a.set(e, (a.get(e) ?? 0) + Math.abs(t.value));
1428
+ }
1429
+ let o = (e) => {
1430
+ let t = a.get(e.index === void 0 ? e.label : String(e.index)) || 0;
1431
+ return t ? `${Math.round(Math.abs(e.value) / t * 100)}%` : "";
1432
+ }, s = (e, r, i, s) => t.formatter ? t.formatter(e, {
1433
+ category: r,
1434
+ series: i
1435
+ }) : a && s ? o(s) : n(e, i), c = e.orientation === "horizontal", l = t.placement ?? (r.stacked ? "inside" : c ? "outside" : "top"), u = l === "inside" || l === "center";
1436
+ for (let t of e.bars) {
1437
+ let e = s(t.value, t.label, t.series, t);
1438
+ if (e) {
1439
+ if (c) {
1440
+ if (u) {
1441
+ if (t.w <= 18 || t.h < 8) continue;
1442
+ i.push({
1443
+ x: t.x + t.w / 2,
1444
+ y: t.y + t.h / 2 + 3,
1445
+ text: e,
1446
+ anchor: "middle",
1447
+ onBar: !0,
1448
+ series: t.series
1449
+ });
1450
+ } else {
1451
+ if (t.h < 8) continue;
1452
+ let n = t.value >= 0;
1453
+ i.push({
1454
+ x: n ? t.x + t.w + 3 : t.x - 3,
1455
+ y: t.y + t.h / 2 + 3,
1456
+ text: e,
1457
+ anchor: n ? "start" : "end",
1458
+ onBar: !1,
1459
+ series: t.series
1460
+ });
1461
+ }
1462
+ } else if (u) {
1463
+ if (t.h <= 13 || t.w < 14) continue;
1464
+ i.push({
1465
+ x: t.x + t.w / 2,
1466
+ y: t.y + t.h / 2 + 3,
1467
+ text: e,
1468
+ anchor: "middle",
1469
+ onBar: !0,
1470
+ series: t.series
1471
+ });
1472
+ } else {
1473
+ if (t.w < 6) continue;
1474
+ let n = t.value >= 0;
1475
+ i.push({
1476
+ x: t.x + t.w / 2,
1477
+ y: n ? t.y - 3 : t.y + t.h + 11,
1478
+ text: e,
1479
+ anchor: "middle",
1480
+ onBar: !1,
1481
+ series: t.series
1482
+ });
1483
+ }
1484
+ }
1485
+ }
1486
+ if (!r.dense) for (let t of e.lines) for (let e of t.points) {
1487
+ if (!e.defined) continue;
1488
+ let n = s(e.value, e.label, t.label);
1489
+ n && i.push({
1490
+ x: e.x,
1491
+ y: u ? e.y + 3 : e.y - 7,
1492
+ text: n,
1493
+ anchor: "middle",
1494
+ onBar: !1,
1495
+ series: t.label
1496
+ });
1497
+ }
1498
+ let d = t.rotation ?? 0;
1499
+ if (d) for (let e of i) e.angle = d;
1500
+ if (t.hideOverlap === !1 && !t.connector) return i;
1501
+ let f = [], p = Math.abs(d) >= 45, m = (e) => {
1502
+ let t = e.text.length * 5.6 + 2, n = p ? 10 : t, r = p ? t : 11, i = e.anchor === "middle" ? e.x - n / 2 : e.anchor === "end" ? e.x - n : e.x, a = p ? e.y - r : e.y - 10;
1503
+ return {
1504
+ x0: i,
1505
+ y0: a,
1506
+ x1: i + n,
1507
+ y1: a + r
1508
+ };
1509
+ }, h = (e) => f.some((t) => e.x0 < t.x1 && e.x1 > t.x0 && e.y0 < t.y1 && e.y1 > t.y0), g = [];
1510
+ for (let e of i) {
1511
+ let n = m(e);
1512
+ if (!h(n)) {
1513
+ f.push(n), g.push(e);
1514
+ continue;
1515
+ }
1516
+ if (!t.connector || e.onBar) continue;
1517
+ let r = {
1518
+ x: e.x,
1519
+ y: e.y
1520
+ }, i = null;
1521
+ for (let t = 1; t <= 4; t += 1) {
1522
+ let r = c ? {
1523
+ ...e,
1524
+ x: e.x + 12 * t
1525
+ } : {
1526
+ ...e,
1527
+ y: e.y - 12 * t
1528
+ };
1529
+ if (n = m(r), !h(n)) {
1530
+ i = r;
1531
+ break;
1532
+ }
1533
+ }
1534
+ i && (i.leader = c ? {
1535
+ x1: r.x,
1536
+ y1: r.y - 3,
1537
+ x2: i.x - 2,
1538
+ y2: i.y - 3
1539
+ } : {
1540
+ x1: r.x,
1541
+ y1: r.y + 1,
1542
+ x2: i.x,
1543
+ y2: i.y + 2
1544
+ }, f.push(n), g.push(i));
1545
+ }
1546
+ return g;
1547
+ }
1548
+ function Xe(e, n, i, a, s) {
1549
+ let c = e.categories, l = c.length, u = a / Math.max(1, l), d = n.reversed, f = (e) => {
1550
+ let t = i + u * e + u / 2;
1551
+ return o(d ? i + a - (t - i) : t);
1552
+ }, p = (e) => {
1553
+ let t = i + u * e;
1554
+ return d ? i + a - (t - i) - u : t;
1555
+ }, m = (e) => typeof n.labelRotation == "number" ? n.labelRotation : e ? -40 : 0, h = n.labels, y = (i, a) => n.formatter ? n.formatter(i, a) : n.format ? t(i, n.format, e) : r(i);
1556
+ if (n.type === "number") {
1557
+ let t = c.map((e) => Number(e)), r = t.filter(Number.isFinite), s = e.binEdges?.filter(Number.isFinite) ?? [], l = r.filter((e) => e > 0);
1558
+ if (n.scale === "log" && s.length < 2 && l.length > 0) {
1559
+ let e = g(Math.min(...l), Math.max(...l)), r = n.min != null && n.min > 0 ? n.min : e.min, s = n.max != null && n.max > r ? n.max : Math.max(e.max, r * 10), c = (e) => {
1560
+ let t = v(e, r, s, !0);
1561
+ return t === null ? NaN : o(i + (d ? 1 - t : t) * a);
1562
+ }, p = (e) => Number.isFinite(t[e]) && t[e] > 0 ? c(t[e]) : f(e), b = [...new Set(l)].map(c).sort((e, t) => e - t), x = Infinity;
1563
+ for (let e = 1; e < b.length; e += 1) x = Math.min(x, b[e] - b[e - 1]);
1564
+ let S = Number.isFinite(x) ? x : u;
1565
+ return {
1566
+ continuous: "number",
1567
+ log: !0,
1568
+ values: t,
1569
+ min: r,
1570
+ max: s,
1571
+ xCenter: p,
1572
+ xOfValue: c,
1573
+ ticks: _(r, s).map((e, t) => ({
1574
+ label: h ? y(e, t) : "",
1575
+ x: c(e)
1576
+ })),
1577
+ slot: u,
1578
+ barSlot: S,
1579
+ barX0: (e) => p(e) - S / 2,
1580
+ rotated: !1,
1581
+ angle: m(!1)
1582
+ };
1583
+ }
1584
+ if (r.length) {
1585
+ let c = s.length >= 2 ? b(Math.min(...s), Math.max(...s), {
1586
+ ...n,
1587
+ nice: e.xAxis?.nice === !0
1588
+ }) : b(Math.min(...r), Math.max(...r), n), l = c.max - c.min || 1, p = (e) => {
1589
+ if (!Number.isFinite(e)) return NaN;
1590
+ let t = (e - c.min) / l;
1591
+ return d && (t = 1 - t), o(i + t * a);
1592
+ }, g = (e) => Number.isFinite(t[e]) ? p(t[e]) : f(e), _ = [...new Set(r)].sort((e, t) => e - t), v = Infinity;
1593
+ for (let e = 1; e < _.length; e += 1) v = Math.min(v, _[e] - _[e - 1]);
1594
+ let x = s.length >= 2 ? (s[1] - s[0]) / l * a : Number.isFinite(v) ? v / l * a : u, S = s.length >= 2 ? Ze(s, Math.max(1, Math.floor(a / 40))) : c.ticks, C = s.length >= 2 ? Math.abs(s[1] - s[0]) : 1, w = C >= 1 ? 0 : Math.min(6, Math.ceil(-Math.log10(C)) + 1), T = (e, t) => n.formatter || n.format ? y(e, t) : e.toLocaleString(void 0, {
1595
+ minimumFractionDigits: w,
1596
+ maximumFractionDigits: w
1597
+ }), E = S.map((e, t) => ({
1598
+ label: h ? s.length >= 2 ? T(e, t) : y(e, t) : "",
1599
+ x: p(e)
1600
+ }));
1601
+ return {
1602
+ continuous: "number",
1603
+ values: t,
1604
+ min: c.min,
1605
+ max: c.max,
1606
+ xCenter: g,
1607
+ xOfValue: p,
1608
+ ticks: E,
1609
+ slot: u,
1610
+ barSlot: x,
1611
+ barX0: (e) => g(e) - x / 2,
1612
+ rotated: !1,
1613
+ angle: m(!1)
1614
+ };
1615
+ }
1616
+ }
1617
+ let x = n.type === "time" || n.type === "ordinal-time" ? c.map((e) => Date.parse(e)) : null, T = !!x && x.some((e) => Number.isFinite(e));
1618
+ if (T && n.type === "time") {
1619
+ let e = x.filter(Number.isFinite), t = n.min ?? Math.min(...e), r = n.max ?? Math.max(...e), s = r - t || 1, c = (e) => {
1620
+ if (!Number.isFinite(e)) return NaN;
1621
+ let n = (e - t) / s;
1622
+ return d && (n = 1 - n), o(i + n * a);
1623
+ }, l = (e) => Number.isFinite(x[e]) ? c(x[e]) : f(e), g = S(t, r, Math.max(2, Math.floor(a / 90))), _ = g.length > 1 ? g[1] - g[0] : s;
1624
+ return {
1625
+ continuous: "time",
1626
+ values: x,
1627
+ min: t,
1628
+ max: r,
1629
+ xCenter: l,
1630
+ xOfValue: c,
1631
+ ticks: g.map((e, t) => ({
1632
+ label: h ? n.formatter ? n.formatter(e, t) : w(e, _) : "",
1633
+ x: c(e)
1634
+ })),
1635
+ slot: u,
1636
+ barSlot: u,
1637
+ barX0: p,
1638
+ rotated: !1,
1639
+ angle: m(!1)
1640
+ };
1641
+ }
1642
+ if (T) {
1643
+ let e = x.filter(Number.isFinite), t = Math.max(...e) - Math.min(...e) || 1, r = C(x), i = r.length > 1 && Math.abs(x[r[1]] - x[r[0]]) || t, a = r.map((e, t) => ({
1644
+ label: h ? n.formatter ? n.formatter(x[e], t) : w(x[e], i) : "",
1645
+ x: f(e)
1646
+ }));
1647
+ return {
1648
+ continuous: null,
1649
+ values: x,
1650
+ min: 0,
1651
+ max: l - 1,
1652
+ xCenter: f,
1653
+ xOfValue: () => NaN,
1654
+ ticks: a,
1655
+ slot: u,
1656
+ barSlot: u,
1657
+ barX0: p,
1658
+ rotated: !1,
1659
+ angle: m(!1)
1660
+ };
1661
+ }
1662
+ let E = m(s), O = E !== 0, k = h ? D(c, f, u, O) : [];
1663
+ return {
1664
+ continuous: null,
1665
+ values: null,
1666
+ min: 0,
1667
+ max: l - 1,
1668
+ xCenter: f,
1669
+ xOfValue: () => NaN,
1670
+ ticks: k,
1671
+ slot: u,
1672
+ barSlot: u,
1673
+ barX0: p,
1674
+ rotated: O,
1675
+ angle: E
1676
+ };
1677
+ }
1678
+ function Ze(e, t) {
1679
+ if (e.length <= t) return e;
1680
+ let n = Math.ceil(e.length / t), r = e.filter((e, t) => t % n === 0);
1681
+ return r[r.length - 1] !== e[e.length - 1] && r.push(e[e.length - 1]), r;
1682
+ }
1683
+ function Qe(e, t, n) {
1684
+ if (t.continuous) {
1685
+ let e = typeof n == "number" ? n : t.continuous === "time" ? Date.parse(n) : Number(n);
1686
+ if (Number.isFinite(e)) return t.xOfValue(e);
1687
+ }
1688
+ if (typeof n == "number") return t.xCenter(n);
1689
+ let r = e.categories.indexOf(n);
1690
+ if (r >= 0) return t.xCenter(r);
1691
+ if (t.values) {
1692
+ let e = Date.parse(n);
1693
+ if (Number.isFinite(e)) {
1694
+ let n = t.values.findIndex((t) => t === e);
1695
+ if (n >= 0) return t.xCenter(n);
1696
+ }
1697
+ }
1698
+ return NaN;
1699
+ }
1700
+ function $e(e, t, n) {
1701
+ if (!t.labels) return 8;
1702
+ if (!n.rotated) return 28;
1703
+ if (typeof t.labelRotation != "number") return 54;
1704
+ let r = e.categories.reduce((e, t) => Math.max(e, Math.min(t.length, 18)), 0), i = Math.abs(n.angle) * Math.PI / 180;
1705
+ return 28 + Math.round(Math.min(72, r * 6 * Math.sin(i)));
1706
+ }
1707
+ function et(e) {
1708
+ let { spec: n, series: i, empty: a, width: s, height: c, frame: l, axes: u } = e, d = u.y.width ?? (u.y.labels ? 48 : 12) + (u.y.title ? 16 : 0), f = 10 + l.top, p = (u.x.labels ? 28 : 8) + (u.x.title ? 16 : 0) + l.bottom, m = Math.max(1, s - d - 12), h = Math.max(1, c - f - p), y = {
1709
+ x: d,
1710
+ y: f,
1711
+ w: m,
1712
+ h
1713
+ }, x = Infinity, S = -Infinity, C = Infinity, w = -Infinity, T = Infinity, E = -Infinity;
1714
+ for (let e of i) for (let t of e.points ?? []) Number.isFinite(t.x) && (x = Math.min(x, t.x), S = Math.max(S, t.x)), Number.isFinite(t.y) && (C = Math.min(C, t.y), w = Math.max(w, t.y)), t.r != null && Number.isFinite(t.r) && (T = Math.min(T, t.r), E = Math.max(E, t.r));
1715
+ if (x === Infinity) return {
1716
+ ...a,
1717
+ plot: y
1718
+ };
1719
+ let D = u.x.scale === "log" && i.some((e) => (e.points ?? []).some((e) => e.x > 0)), O = D ? (() => {
1720
+ let e = Infinity;
1721
+ for (let t of i) for (let n of t.points ?? []) n.x > 0 && n.x < e && (e = n.x);
1722
+ let t = g(e, S), n = u.x.min != null && u.x.min > 0 ? u.x.min : t.min, r = u.x.max != null && u.x.max > n ? u.x.max : Math.max(t.max, n * 10);
1723
+ return {
1724
+ min: n,
1725
+ max: r,
1726
+ step: 10,
1727
+ ticks: _(n, r)
1728
+ };
1729
+ })() : b(x, S, u.x), k = b(C, w, u.y), A = E > T, j = (e) => {
1730
+ if (D) {
1731
+ let t = v(e, O.min, O.max, !0);
1732
+ return t === null ? NaN : o(d + (u.x.reversed ? 1 - t : t) * m);
1733
+ }
1734
+ let t = (e - O.min) / (O.max - O.min || 1);
1735
+ return u.x.reversed && (t = 1 - t), o(d + t * m);
1736
+ }, M = (e) => {
1737
+ let t = (e - k.min) / (k.max - k.min || 1);
1738
+ return u.y.reversed && (t = 1 - t), o(f + h - t * h);
1739
+ }, N = (e) => A && e != null && Number.isFinite(e) ? o(4 + (e - T) / (E - T || 1) * 14) : 5, P = [];
1740
+ for (let e of i) (e.points ?? []).forEach((t, n) => {
1741
+ !Number.isFinite(t.x) || !Number.isFinite(t.y) || D && t.x <= 0 || P.push({
1742
+ cx: j(t.x),
1743
+ cy: M(t.y),
1744
+ r: N(t.r),
1745
+ color: e.colors?.[n] ?? e.color,
1746
+ label: t.label ?? "",
1747
+ series: e.label,
1748
+ x: t.x,
1749
+ y: t.y
1750
+ });
1751
+ });
1752
+ let F = [];
1753
+ for (let e of i) {
1754
+ if (!e.overlay) continue;
1755
+ let t = (e.points ?? []).filter((e) => Number.isFinite(e.x) && Number.isFinite(e.y) && (!D || e.x > 0)), n = Ee(t.map((e) => e.y), e.overlay, t.map((e) => e.x));
1756
+ if (!n || !n.equation) continue;
1757
+ let i = [];
1758
+ for (let e = 0; e <= 48; e += 1) {
1759
+ let t = e / 48, a = D ? 10 ** (Math.log10(O.min) + t * (Math.log10(O.max) - Math.log10(O.min))) : O.min + t * (O.max - O.min), o = n.predict(a), s = Number.isFinite(o) && o >= k.min && o <= k.max;
1760
+ i.push({
1761
+ x: j(a),
1762
+ y: s ? M(o) : NaN,
1763
+ label: r(a),
1764
+ value: o,
1765
+ defined: s
1766
+ });
1767
+ }
1768
+ F.push({
1769
+ path: Re(i, !1),
1770
+ areaPath: "",
1771
+ color: e.overlayColor ?? e.color,
1772
+ label: `${e.label} (${e.overlay})`,
1773
+ points: i,
1774
+ r2: n.r2,
1775
+ equation: n.equation
1776
+ });
1777
+ }
1778
+ let I = [], L = [];
1779
+ for (let e of n.referenceLines ?? []) {
1780
+ let i = Number(e.value);
1781
+ Number.isFinite(i) && (e.axis === "x" ? L.push({
1782
+ x: j(i),
1783
+ label: e.label ?? r(i),
1784
+ color: e.color ?? "#ef4444",
1785
+ dashed: e.dashed !== !1
1786
+ }) : I.push({
1787
+ y: M(i),
1788
+ label: e.label ?? t(i, n.valueFormat, n),
1789
+ color: e.color ?? "#ef4444",
1790
+ dashed: e.dashed !== !1
1791
+ }));
1792
+ }
1793
+ let R = [];
1794
+ for (let e of n.referenceBands ?? []) {
1795
+ let t = Number(e.from), n = Number(e.to);
1796
+ if (!(!Number.isFinite(t) || !Number.isFinite(n))) {
1797
+ if (e.axis === "x") {
1798
+ let r = j(Math.min(t, n)), i = j(Math.max(t, n));
1799
+ R.push({
1800
+ x: Math.min(r, i),
1801
+ y: f,
1802
+ w: Math.abs(i - r),
1803
+ h,
1804
+ color: e.color ?? "#64748b",
1805
+ opacity: e.opacity ?? .08,
1806
+ label: e.label ?? "",
1807
+ axis: "x"
1808
+ });
1809
+ } else {
1810
+ let r = M(Math.max(t, n)), i = M(Math.min(t, n));
1811
+ R.push({
1812
+ x: d,
1813
+ y: Math.min(r, i),
1814
+ w: m,
1815
+ h: Math.abs(i - r),
1816
+ color: e.color ?? "#64748b",
1817
+ opacity: e.opacity ?? .08,
1818
+ label: e.label ?? "",
1819
+ axis: "y"
1820
+ });
1821
+ }
1822
+ }
1823
+ }
1824
+ return {
1825
+ ...a,
1826
+ plot: y,
1827
+ axes: {
1828
+ y: {
1829
+ min: k.min,
1830
+ max: k.max,
1831
+ log: !1,
1832
+ reversed: u.y.reversed
1833
+ },
1834
+ y2: null,
1835
+ slot: m,
1836
+ count: 0,
1837
+ x: {
1838
+ type: "number",
1839
+ min: O.min,
1840
+ max: O.max,
1841
+ reversed: u.x.reversed,
1842
+ values: [],
1843
+ ...D ? { log: !0 } : {}
1844
+ }
1845
+ },
1846
+ grid: {
1847
+ x: u.x.gridLines,
1848
+ y: u.y.gridLines
1849
+ },
1850
+ scatterPoints: P,
1851
+ overlays: F,
1852
+ referenceLines: I,
1853
+ referenceLinesV: L,
1854
+ referenceBands: R,
1855
+ yTicks: k.ticks.map((e, r) => ({
1856
+ value: e,
1857
+ y: M(e),
1858
+ label: u.y.labels ? ue(e, r, u.y, n, t) : ""
1859
+ })),
1860
+ xTicks: O.ticks.map((e, i) => ({
1861
+ label: u.x.labels ? u.x.formatter ? u.x.formatter(e, i) : u.x.format ? t(e, u.x.format, n) : r(e) : "",
1862
+ x: j(e)
1863
+ }))
1864
+ };
1865
+ }
1866
+ function tt(e) {
1867
+ let { spec: n, series: i, empty: a, width: s, height: c, stacked: l, frame: u, axes: d } = e, f = n.categories.reduce((e, t) => Math.max(e, t.length), 0), p = d.x.labels ? Math.min(150, 18 + f * 6.4) + (d.y.title ? 16 : 0) : 12 + (d.y.title ? 16 : 0), m = 8 + u.top, h = (d.y.labels ? 26 : 8) + (d.x.title ? 16 : 0) + u.bottom, g = Math.max(1, s - p - 16), _ = Math.max(1, c - m - h), y = {
1868
+ x: p,
1869
+ y: m,
1870
+ w: g,
1871
+ h: _
1872
+ }, x = (n.referenceLines ?? []).filter((e) => e.axis !== "x").map((e) => Number(e.value)).concat((n.referenceBands ?? []).filter((e) => e.axis !== "x").flatMap((e) => [Number(e.from), Number(e.to)])), S = d.y.scale === "log", C = n.stacked100 ? b(0, 100) : ie(i, n.categories, l, x, S, d.y), w = (e) => {
1873
+ let t = v(e, C.min, C.max, S);
1874
+ return t === null ? NaN : (d.y.reversed && (t = 1 - t), o(p + t * g));
1875
+ }, T = n.categories.length, E = _ / Math.max(1, T), D = E * .2, O = E - D, k = (e) => m + E * (d.x.reversed ? T - 1 - e : e) + D / 2, A = w(S ? C.min : Math.min(Math.max(0, C.min), C.max)), j = [];
1876
+ if (l) {
1877
+ let e = n.stacked100 ? n.categories.map((e, t) => i.reduce((e, n) => e + Math.abs(Number.isFinite(n.values[t]) ? n.values[t] : 0), 0) || 1) : null, t = Array(T).fill(0), r = Array(T).fill(0);
1878
+ for (let a of i) a.values.forEach((i, s) => {
1879
+ if (!Number.isFinite(i)) return;
1880
+ let c = e ? i / e[s] * 100 : i, l, u;
1881
+ c >= 0 ? (l = w(t[s]), u = w(t[s] + c), t[s] += c) : (l = w(r[s] + c), u = w(r[s]), r[s] += c), !(!Number.isFinite(l) || !Number.isFinite(u)) && j.push({
1882
+ x: Math.min(l, u),
1883
+ y: o(k(s)),
1884
+ w: o(Math.abs(u - l)),
1885
+ h: o(Math.max(1, O)),
1886
+ color: a.colors?.[s] ?? a.color,
1887
+ label: n.categories[s] ?? String(s),
1888
+ series: a.label,
1889
+ value: i,
1890
+ index: s,
1891
+ ...a.opacity == null ? {} : { opacity: a.opacity }
1892
+ });
1893
+ });
1894
+ } else {
1895
+ let e = O / i.length;
1896
+ i.forEach((t, r) => {
1897
+ t.values.forEach((i, a) => {
1898
+ if (!Number.isFinite(i) || S && i <= 0) return;
1899
+ let s = w(i);
1900
+ Number.isFinite(s) && j.push({
1901
+ x: Math.min(s, A),
1902
+ y: o(k(a) + e * r),
1903
+ w: o(Math.max(1, Math.abs(s - A))),
1904
+ h: o(Math.max(1, e - 1)),
1905
+ color: t.colors?.[a] ?? t.color,
1906
+ label: n.categories[a] ?? String(a),
1907
+ series: t.label,
1908
+ value: i,
1909
+ index: a,
1910
+ ...t.opacity == null ? {} : { opacity: t.opacity }
1911
+ });
1912
+ });
1913
+ });
1914
+ }
1915
+ let M = C.ticks.map((e, i) => ({
1916
+ label: d.y.labels ? n.stacked100 ? `${r(e)}%` : ue(e, i, d.y, n, t) : "",
1917
+ x: w(e)
1918
+ })), N = d.x.labels ? n.categories.map((e, t) => ({
1919
+ value: t,
1920
+ y: o(k(t) + O / 2),
1921
+ label: e
1922
+ })) : [], P = [], F = [];
1923
+ for (let e of n.referenceLines ?? []) {
1924
+ if (e.axis === "x") {
1925
+ let t = typeof e.value == "number" ? e.value : n.categories.indexOf(e.value);
1926
+ if (t < 0 || !Number.isFinite(t)) continue;
1927
+ F.push({
1928
+ y: o(k(t) + O / 2),
1929
+ label: e.label ?? String(e.value),
1930
+ color: e.color ?? "#ef4444",
1931
+ dashed: e.dashed !== !1
1932
+ });
1933
+ continue;
1934
+ }
1935
+ let r = Number(e.value), i = w(r);
1936
+ Number.isFinite(i) && P.push({
1937
+ x: i,
1938
+ label: e.label ?? t(r, n.valueFormat, n),
1939
+ color: e.color ?? "#ef4444",
1940
+ dashed: e.dashed !== !1
1941
+ });
1942
+ }
1943
+ let I = [];
1944
+ for (let e of n.referenceBands ?? []) {
1945
+ if (e.axis === "x") {
1946
+ let t = typeof e.from == "number" ? e.from : n.categories.indexOf(e.from), r = typeof e.to == "number" ? e.to : n.categories.indexOf(e.to);
1947
+ if (t < 0 || r < 0) continue;
1948
+ let i = k(Math.min(t, r)) - D / 2, a = k(Math.max(t, r)) + O + D / 2;
1949
+ I.push({
1950
+ x: p,
1951
+ y: o(Math.min(i, a)),
1952
+ w: g,
1953
+ h: o(Math.abs(a - i)),
1954
+ color: e.color ?? "#64748b",
1955
+ opacity: e.opacity ?? .08,
1956
+ label: e.label ?? "",
1957
+ axis: "y"
1958
+ });
1959
+ continue;
1960
+ }
1961
+ let t = w(Number(e.from)), r = w(Number(e.to));
1962
+ !Number.isFinite(t) || !Number.isFinite(r) || I.push({
1963
+ x: Math.min(t, r),
1964
+ y: m,
1965
+ w: Math.abs(r - t),
1966
+ h: _,
1967
+ color: e.color ?? "#64748b",
1968
+ opacity: e.opacity ?? .08,
1969
+ label: e.label ?? "",
1970
+ axis: "x"
1971
+ });
1972
+ }
1973
+ return {
1974
+ ...a,
1975
+ plot: y,
1976
+ axes: {
1977
+ y: {
1978
+ min: C.min,
1979
+ max: C.max,
1980
+ log: S,
1981
+ reversed: d.y.reversed
1982
+ },
1983
+ y2: null,
1984
+ slot: E,
1985
+ count: T,
1986
+ xReversed: d.x.reversed,
1987
+ labels: n.categories
1988
+ },
1989
+ grid: {
1990
+ x: d.y.gridLines,
1991
+ y: d.x.gridLines
1992
+ },
1993
+ bars: j,
1994
+ orientation: "horizontal",
1995
+ valueTicks: M,
1996
+ catTicks: N,
1997
+ referenceLines: F,
1998
+ referenceLinesV: P,
1999
+ referenceBands: I,
2000
+ xLabelRotated: !1
2001
+ };
2002
+ }
2003
+ function nt(e) {
2004
+ let { spec: n, series: r, empty: i, width: a, height: s, stacked: c, frame: l, axes: u } = e, d = r.filter((e) => e.axis === "left"), f = r.filter((e) => e.axis === "right"), p = f.length > 0, m = n.categories.reduce((e, t) => Math.max(e, t.length), 0), h = n.categoryGroups && n.categoryGroups.length > 0 && u.x.type !== "time" && n.orientation !== "horizontal" && n.categoryGroups.reduce((e, t) => e + t.span, 0) === n.categories.length ? n.categoryGroups : null, g = h ? 18 : 0, _ = u.y.width ?? (u.y.labels ? 48 : 12) + (u.y.title ? 16 : 0), y = n.seriesLabels ? rt(n, r) : null, x = y ? Math.min(Math.floor(a / 3), 8 + Math.max(0, ...y.values()) * 6.2) : 0, S = (p ? u.y2.width ?? (u.y2.labels ? 48 : 12) : 12) + (u.y2.title ? 16 : 0) + x, C = 10 + l.top, w = Math.max(1, a - _ - S), T = m * 6.2 + 8 > w / Math.max(1, n.categories.length), E = Xe(n, u.x, _, w, T), D = $e(n, u.x, E) + (u.x.title ? 16 : 0) + g + l.bottom, k = Math.max(1, s - C - D), A = {
2005
+ x: _,
2006
+ y: C,
2007
+ w,
2008
+ h: k
2009
+ }, j = (n.referenceLines ?? []).filter((e) => e.axis !== "x"), M = (n.referenceBands ?? []).filter((e) => e.axis !== "x"), N = j.filter((e) => e.axis !== "right").map((e) => Number(e.value)).concat(M.filter((e) => e.axis !== "right").flatMap((e) => [Number(e.from), Number(e.to)])), P = j.filter((e) => e.axis === "right").map((e) => Number(e.value)).concat(M.filter((e) => e.axis === "right").flatMap((e) => [Number(e.from), Number(e.to)])), F = u.y.scale === "log", I = u.y2.scale === "log", L = (e) => e.kind === "area" ? e.stack ? `${e.axis}\u0000${e.stack}` : c ? e.axis : null : null, R = [...new Set(r.map(L).filter((e) => e !== null))], ee = n.stackOffset && n.stackOffset !== "zero" && !n.stacked100 ? n.stackOffset : null, te = /* @__PURE__ */ new Map(), z = {
2010
+ left: [],
2011
+ right: []
2012
+ };
2013
+ if (ee) for (let e of R) {
2014
+ let t = r.filter((t) => L(t) === e), n = t.map((e) => e.values), i = We(n, ee);
2015
+ te.set(e, i);
2016
+ let a = t[0].axis;
2017
+ i.forEach((e, t) => {
2018
+ let r = 0;
2019
+ for (let e of n) r += Number.isFinite(e[t]) ? e[t] : 0;
2020
+ z[a].push(e, e + r);
2021
+ });
2022
+ }
2023
+ let B = n.stacked100 ? b(0, 100) : ie(d, n.categories, c, N.concat(z.left), F, u.y), V = p ? n.stacked100 ? b(0, 100) : ie(f, n.categories, c, P.concat(z.right), I, u.y2) : null, H = (e, t, n = !1, r = !1) => {
2024
+ let i = v(t, e.min, e.max, n);
2025
+ return i === null ? NaN : (r && (i = 1 - i), o(C + k - i * k));
2026
+ }, U = (e) => H(B, e, F, u.y.reversed), ne = (e) => H(V ?? B, e, I, u.y2.reversed), re = (e) => e.axis === "right" ? V ?? B : B, W = (e) => e.axis === "right" ? I : F, ae = (e) => e.axis === "right" ? u.y2.reversed : u.y.reversed, G = (e, t) => H(re(e), t, W(e), ae(e)), oe = n.categories.length, { slot: se, xCenter: ce, ticks: le } = E, de = [];
2027
+ if (h && !E.values) {
2028
+ let e = 0;
2029
+ for (let t of h) {
2030
+ let n = o(_ + se * e), r = o(_ + se * (e + t.span));
2031
+ de.push({
2032
+ label: t.label,
2033
+ x0: n,
2034
+ x1: r,
2035
+ xCenter: o((n + r) / 2)
2036
+ }), e += t.span;
2037
+ }
2038
+ }
2039
+ let fe = r.filter((e) => e.kind === "bar" || e.kind === "range-bar" || e.kind === "lollipop" || e.kind === "dumbbell"), K = [], q = [];
2040
+ if (fe.length) {
2041
+ let e = n.type === "histogram", t = e ? 0 : E.barSlot * .2, r = E.barSlot - t, i = (e) => E.barX0(e) + t / 2, a = [], s = /* @__PURE__ */ new Map();
2042
+ for (let e of fe) {
2043
+ let t = e.kind === "bar" ? e.stack ?? (c ? "" : null) : null;
2044
+ if (t === null) {
2045
+ a.push({
2046
+ key: e.label,
2047
+ members: [e],
2048
+ stacked: !1
2049
+ });
2050
+ continue;
2051
+ }
2052
+ let n = s.get(t);
2053
+ n || (n = {
2054
+ key: t,
2055
+ members: [],
2056
+ stacked: !0
2057
+ }, s.set(t, n), a.push(n)), n.members.push(e);
2058
+ }
2059
+ let l = r / a.length;
2060
+ a.forEach((t, r) => {
2061
+ if (t.stacked) for (let s of ["left", "right"]) {
2062
+ let c = t.members.filter((e) => e.axis === s);
2063
+ if (!c.length) continue;
2064
+ let u = s === "right" ? ne : U, d = n.stacked100 ? n.categories.map((e, t) => c.reduce((e, n) => e + Math.abs(Number.isFinite(n.values[t]) ? n.values[t] : 0), 0) || 1) : null, f = Array(oe).fill(0), p = Array(oe).fill(0);
2065
+ for (let t of c) t.values.forEach((s, c) => {
2066
+ if (!Number.isFinite(s)) return;
2067
+ let m = d ? s / d[c] * 100 : s, h, g;
2068
+ m >= 0 ? (h = u(f[c] + m), g = u(f[c]), f[c] += m) : (h = u(p[c]), g = u(p[c] + m), p[c] += m), !(!Number.isFinite(h) || !Number.isFinite(g)) && K.push({
2069
+ x: o(i(c) + l * r),
2070
+ y: Math.min(h, g),
2071
+ w: o(Math.max(1, a.length > 1 ? l - +!e : l)),
2072
+ h: o(Math.abs(g - h)),
2073
+ color: t.colors?.[c] ?? t.color,
2074
+ label: n.categories[c] ?? String(c),
2075
+ series: t.label,
2076
+ value: s,
2077
+ index: c,
2078
+ ...t.opacity == null ? {} : { opacity: t.opacity }
2079
+ });
2080
+ });
2081
+ }
2082
+ });
2083
+ let u = a.map((e, t) => ({
2084
+ slot: e,
2085
+ si: t
2086
+ })).filter(({ slot: e }) => !e.stacked);
2087
+ if (u.length) {
2088
+ let t = l;
2089
+ u.forEach(({ slot: r, si: a }) => {
2090
+ let s = r.members[0], c = a, l = re(s), u = W(s), d = u ? G(s, l.min) : G(s, Math.min(Math.max(0, l.min), l.max)), f = o(Math.min(5, Math.max(2.5, t * .3)));
2091
+ s.values.forEach((r, a) => {
2092
+ if (!Number.isFinite(r) || u && r <= 0) return;
2093
+ let l = i(a) + t * c, p = G(s, r);
2094
+ if (!Number.isFinite(p)) return;
2095
+ let m = s.colors?.[a] ?? s.color, h = n.categories[a] ?? String(a);
2096
+ if (s.kind === "lollipop") {
2097
+ q.push({
2098
+ xCenter: o(l + t / 2),
2099
+ y0: d,
2100
+ y1: p,
2101
+ r: f,
2102
+ color: m,
2103
+ label: h,
2104
+ series: s.label,
2105
+ value: r,
2106
+ dumbbell: !1
2107
+ });
2108
+ return;
2109
+ }
2110
+ if (s.kind === "dumbbell" || s.kind === "range-bar") {
2111
+ let n = s.lowValues?.[a];
2112
+ if (!Number.isFinite(n) || u && n <= 0) return;
2113
+ let i = G(s, n);
2114
+ if (!Number.isFinite(i)) return;
2115
+ if (s.kind === "dumbbell") {
2116
+ q.push({
2117
+ xCenter: o(l + t / 2),
2118
+ y0: i,
2119
+ y1: p,
2120
+ r: f,
2121
+ color: m,
2122
+ color2: s.overlayColor ?? m,
2123
+ label: h,
2124
+ series: s.label,
2125
+ value: r,
2126
+ value2: n,
2127
+ dumbbell: !0
2128
+ });
2129
+ return;
2130
+ }
2131
+ K.push({
2132
+ x: o(l),
2133
+ y: Math.min(p, i),
2134
+ w: o(Math.max(1, t - +!e)),
2135
+ h: o(Math.max(1, Math.abs(p - i))),
2136
+ color: m,
2137
+ label: h,
2138
+ series: s.label,
2139
+ value: r,
2140
+ index: a,
2141
+ lo: n,
2142
+ ...s.opacity == null ? {} : { opacity: s.opacity }
2143
+ });
2144
+ return;
2145
+ }
2146
+ K.push({
2147
+ x: o(l),
2148
+ y: Math.min(p, d),
2149
+ w: o(Math.max(1, t - +!e)),
2150
+ h: o(Math.max(1, Math.abs(p - d))),
2151
+ color: m,
2152
+ label: h,
2153
+ series: s.label,
2154
+ value: r,
2155
+ index: a,
2156
+ ...s.opacity == null ? {} : { opacity: s.opacity }
2157
+ });
2158
+ });
2159
+ });
2160
+ }
2161
+ }
2162
+ let J = r.filter((e) => e.kind === "candle"), pe = [];
2163
+ if (J.length) {
2164
+ let e = n.candleColors?.up ?? "#16a34a", t = n.candleColors?.down ?? "#ef4444", r = Math.max(1, E.barSlot * .7 / J.length), i = n.candleStyle ?? "classic";
2165
+ J.forEach((a, s) => {
2166
+ let c = W(a), l = a.ohlc ?? [], u = i === "heikin-ashi" ? Me(l) : l, d = null;
2167
+ u.forEach((l, u) => {
2168
+ if (!l) {
2169
+ d = null;
2170
+ return;
2171
+ }
2172
+ if (![
2173
+ l.o,
2174
+ l.h,
2175
+ l.l,
2176
+ l.c
2177
+ ].every(Number.isFinite) || c && (l.o <= 0 || l.h <= 0 || l.l <= 0 || l.c <= 0)) return;
2178
+ let f = E.barX0(u) + E.barSlot / 2 - r * J.length / 2 + r * s, p = G(a, l.o), m = G(a, l.c), h = l.c >= l.o, g = i === "hollow" && d != null ? l.c >= d : h, _ = i === "hollow" ? h : g;
2179
+ d = l.c, pe.push({
2180
+ x: o(f),
2181
+ w: o(r),
2182
+ xCenter: o(f + r / 2),
2183
+ yOpen: p,
2184
+ yClose: m,
2185
+ yHigh: G(a, l.h),
2186
+ yLow: G(a, l.l),
2187
+ bodyY: Math.min(p, m),
2188
+ bodyH: Math.max(1, Math.abs(m - p)),
2189
+ up: g,
2190
+ hollow: _,
2191
+ color: g ? e : t,
2192
+ label: n.categories[u] ?? String(u),
2193
+ series: a.label,
2194
+ o: l.o,
2195
+ h: l.h,
2196
+ l: l.l,
2197
+ c: l.c
2198
+ });
2199
+ });
2200
+ });
2201
+ }
2202
+ let Y = r.filter((e) => e.kind === "box"), X = [];
2203
+ if (Y.length) {
2204
+ let e = Math.max(1, E.barSlot * .6 / Y.length);
2205
+ Y.forEach((t, r) => {
2206
+ let i = W(t);
2207
+ (t.boxes ?? []).forEach((a, s) => {
2208
+ if (!a || ![
2209
+ a.min,
2210
+ a.q1,
2211
+ a.median,
2212
+ a.q3,
2213
+ a.max
2214
+ ].every(Number.isFinite) || i && a.min <= 0) return;
2215
+ let c = E.barX0(s) + E.barSlot / 2 - e * Y.length / 2 + e * r, l = G(t, a.q1), u = G(t, a.q3);
2216
+ X.push({
2217
+ x: o(c),
2218
+ w: o(e),
2219
+ xCenter: o(c + e / 2),
2220
+ yMin: G(t, a.min),
2221
+ yQ1: l,
2222
+ yMedian: G(t, a.median),
2223
+ yQ3: u,
2224
+ yMax: G(t, a.max),
2225
+ boxY: Math.min(l, u),
2226
+ boxH: Math.max(1, Math.abs(l - u)),
2227
+ outliers: (a.outliers ?? []).filter((e) => Number.isFinite(e) && (!i || e > 0)).map((e) => ({
2228
+ y: G(t, e),
2229
+ value: e
2230
+ })),
2231
+ color: t.color,
2232
+ label: n.categories[s] ?? String(s),
2233
+ series: t.label,
2234
+ min: a.min,
2235
+ q1: a.q1,
2236
+ median: a.median,
2237
+ q3: a.q3,
2238
+ max: a.max
2239
+ });
2240
+ });
2241
+ });
2242
+ }
2243
+ let me = [];
2244
+ for (let e of r) {
2245
+ if (!e.errors) continue;
2246
+ let t = W(e);
2247
+ e.errors.forEach((r, i) => {
2248
+ let a = e.values[i];
2249
+ if (!Number.isFinite(a)) return;
2250
+ let s = O(r, a);
2251
+ s && (t && s.lo <= 0 || me.push({
2252
+ xCenter: o(E.barX0(i) + E.barSlot / 2),
2253
+ yLo: G(e, s.lo),
2254
+ yHi: G(e, s.hi),
2255
+ cap: o(Math.min(6, E.barSlot * .15)),
2256
+ color: e.color,
2257
+ label: n.categories[i] ?? String(i),
2258
+ series: e.label,
2259
+ lo: s.lo,
2260
+ hi: s.hi
2261
+ }));
2262
+ });
2263
+ }
2264
+ let ge = [], _e = /* @__PURE__ */ new Map(), ve = /* @__PURE__ */ new Map(), ye = /* @__PURE__ */ new Set();
2265
+ for (let e of R) if (_e.set(e, Array(oe).fill(0)), n.stacked100) {
2266
+ let t = r.filter((t) => L(t) === e);
2267
+ ve.set(e, n.categories.map((e, n) => t.reduce((e, t) => e + Math.abs(Number.isFinite(t.values[n]) ? t.values[n] : 0), 0) || 1));
2268
+ }
2269
+ for (let e of r) {
2270
+ if (e.kind === "bar" || e.kind === "candle" || e.kind === "box" || e.kind === "range-bar" || e.kind === "lollipop" || e.kind === "dumbbell") continue;
2271
+ let t = re(e), r = W(e), i = (t) => G(e, t), a = L(e), s = a !== null, c = (e) => ce(e), l, u = null, d = (t, r, i, a) => {
2272
+ let o = {
2273
+ x: c(t),
2274
+ y: i,
2275
+ label: n.categories[t] ?? String(t),
2276
+ value: r,
2277
+ defined: a
2278
+ }, s = qe(e, t);
2279
+ return s && (o.marker = s), o;
2280
+ };
2281
+ if (s) {
2282
+ let t = _e.get(a), n = te.get(a);
2283
+ if (n && !ye.has(a)) {
2284
+ for (let e = 0; e < oe; e += 1) t[e] = n[e] ?? 0;
2285
+ ye.add(a);
2286
+ }
2287
+ let r = t.slice(), o = ve.get(a);
2288
+ l = e.values.map((e, n) => {
2289
+ let r = Number.isFinite(e) ? e : 0, a = o ? r / o[n] * 100 : r, s = (t[n] ?? 0) + a;
2290
+ return t[n] = s, d(n, e, i(s), Number.isFinite(e));
2291
+ }), u = r.map((e, t) => ({
2292
+ x: c(t),
2293
+ y: i(e)
2294
+ }));
2295
+ } else l = e.values.map((e, t) => {
2296
+ let n = Number.isFinite(e) && Number.isFinite(i(e));
2297
+ return d(t, e, n ? i(e) : NaN, n);
2298
+ });
2299
+ let f = !!e.smooth && !e.step, p = e.step, m = !!e.connectNulls, h = e.kind === "scatter" ? "" : Re(l, f, {
2300
+ connectNulls: m,
2301
+ step: p
2302
+ }), g = "";
2303
+ if (e.kind === "range-area" && l.length) {
2304
+ let t = [], n = [];
2305
+ l.forEach((r, a) => {
2306
+ let o = e.lowValues?.[a];
2307
+ if (!r.defined || !Number.isFinite(o)) return;
2308
+ let s = i(o);
2309
+ Number.isFinite(s) && (t.push({
2310
+ x: r.x,
2311
+ y: r.y
2312
+ }), n.push({
2313
+ x: r.x,
2314
+ y: s
2315
+ }));
2316
+ }), t.length >= 2 && (g = Ue(t, n, f, p), h = `${Be(t, f, p)} ${Be(n, f, p)}`);
2317
+ } else if (e.kind === "area" && l.length) {
2318
+ if (u) g = Ue(l.map((e) => ({
2319
+ x: e.x,
2320
+ y: e.y
2321
+ })), u, f, p);
2322
+ else {
2323
+ let e = o(i(r ? t.min : Math.min(Math.max(0, t.min), t.max)));
2324
+ g = ze(l, m).map((t) => `${Be(t, f, p)} L${t[t.length - 1].x},${e} L${t[0].x},${e} Z`).join(" ");
2325
+ }
2326
+ }
2327
+ let _ = "";
2328
+ if (e.upperValues?.length === e.values.length && e.lowerValues?.length === e.values.length) {
2329
+ let t = [], n = [];
2330
+ for (let a = 0; a < e.values.length; a += 1) {
2331
+ let o = e.upperValues[a], s = e.lowerValues[a];
2332
+ !Number.isFinite(o) || !Number.isFinite(s) || r && (o <= 0 || s <= 0) || (t.push({
2333
+ x: c(a),
2334
+ y: i(o)
2335
+ }), n.push({
2336
+ x: c(a),
2337
+ y: i(s)
2338
+ }));
2339
+ }
2340
+ t.length >= 2 && (_ = Ue(t, n, f, p));
2341
+ }
2342
+ let v = {
2343
+ path: h,
2344
+ areaPath: g,
2345
+ color: e.color,
2346
+ label: e.label,
2347
+ points: l,
2348
+ bandPath: _
2349
+ };
2350
+ e.kind === "range-area" && (v.range = !0);
2351
+ let y = Je(e);
2352
+ y && (v.style = y), f && (v.smooth = !0), p && (v.step = p), ge.push(v);
2353
+ }
2354
+ let be = (e, r, i) => e.ticks.map((a, s) => ({
2355
+ value: a,
2356
+ y: H(e, a, i, r.reversed),
2357
+ label: r.labels ? n.stacked100 ? `${o(a)}%` : ue(a, s, r, n, t) : ""
2358
+ })), xe = [], Se = [];
2359
+ for (let e of n.referenceLines ?? []) {
2360
+ if (e.axis === "x") {
2361
+ let t = Qe(n, E, e.value);
2362
+ if (!Number.isFinite(t)) continue;
2363
+ Se.push({
2364
+ x: t,
2365
+ label: e.label ?? String(e.value),
2366
+ color: e.color ?? "#ef4444",
2367
+ dashed: e.dashed !== !1
2368
+ });
2369
+ continue;
2370
+ }
2371
+ let r = e.axis === "right", i = r ? V ?? B : B, a = r ? I : F, o = Number(e.value), s = H(i, o, a, r ? u.y2.reversed : u.y.reversed);
2372
+ Number.isFinite(s) && xe.push({
2373
+ y: s,
2374
+ label: e.label ?? t(o, n.valueFormat, n),
2375
+ color: e.color ?? "#ef4444",
2376
+ dashed: e.dashed !== !1
2377
+ });
2378
+ }
2379
+ let Ce = [];
2380
+ for (let e of n.referenceBands ?? []) {
2381
+ let t = e.color ?? "#64748b", r = e.opacity ?? .08, i = e.label ?? "";
2382
+ if (e.axis === "x") {
2383
+ let a = Qe(n, E, e.from), s = Qe(n, E, e.to);
2384
+ if (!Number.isFinite(a) || !Number.isFinite(s)) continue;
2385
+ if (!E.continuous) {
2386
+ let e = se / 2;
2387
+ a <= s ? (a -= e, s += e) : (a += e, s -= e);
2388
+ }
2389
+ Ce.push({
2390
+ x: o(Math.min(a, s)),
2391
+ y: C,
2392
+ w: o(Math.abs(s - a)),
2393
+ h: k,
2394
+ color: t,
2395
+ opacity: r,
2396
+ label: i,
2397
+ axis: "x"
2398
+ });
2399
+ continue;
2400
+ }
2401
+ let a = e.axis === "right", s = a ? V ?? B : B, c = a ? I : F, l = a ? u.y2.reversed : u.y.reversed, d = H(s, Number(e.from), c, l), f = H(s, Number(e.to), c, l);
2402
+ !Number.isFinite(d) || !Number.isFinite(f) || Ce.push({
2403
+ x: _,
2404
+ y: Math.min(d, f),
2405
+ w,
2406
+ h: Math.abs(f - d),
2407
+ color: t,
2408
+ opacity: r,
2409
+ label: i,
2410
+ axis: "y"
2411
+ });
2412
+ }
2413
+ let we = [];
2414
+ for (let e of r) {
2415
+ if (!e.overlay) continue;
2416
+ let t = W(e), r = Te(e.values, e.overlay, {
2417
+ ohlc: e.ohlc,
2418
+ volumes: e.volumes
2419
+ }), i = r.values, a = e.overlayColor ?? e.color, o = (r) => r.map((r, i) => {
2420
+ let a = Number.isFinite(r) && (!t || r > 0);
2421
+ return {
2422
+ x: ce(i),
2423
+ y: a ? G(e, r) : NaN,
2424
+ label: n.categories[i] ?? String(i),
2425
+ value: r,
2426
+ defined: a
2427
+ };
2428
+ }), s = o(i), c = Re(s, !!e.smooth), l = "", u = /^bb:(\d+):(\d+(?:\.\d+)?)$/.exec(e.overlay);
2429
+ if (u) {
2430
+ let { upper: t, lower: n } = he(e.values, Number(u[1]), Number(u[2])), r = o(t).filter((e) => e.defined), i = o(n).filter((e) => e.defined);
2431
+ r.length > 1 && i.length > 1 && (l = r.map((e, t) => `${t ? "L" : "M"}${e.x},${e.y}`).join(" ") + " " + i.slice().reverse().map((e) => `L${e.x},${e.y}`).join(" ") + " Z");
2432
+ }
2433
+ we.push({
2434
+ path: c,
2435
+ areaPath: "",
2436
+ color: a,
2437
+ label: `${e.label} (${e.overlay})`,
2438
+ points: s,
2439
+ ...l ? { bandPath: l } : {},
2440
+ ...r.r2 === void 0 ? {} : { r2: r.r2 },
2441
+ ...r.equation ? { equation: r.equation } : {}
2442
+ });
2443
+ }
2444
+ if (n.lastPriceLine) {
2445
+ let e = n.lastPriceLine === !0 ? {} : n.lastPriceLine, i = r.find((e) => e.ohlc) ?? r[0];
2446
+ if (i) {
2447
+ let r = -1;
2448
+ for (let e = i.values.length - 1; e >= 0; --e) if (Number.isFinite(i.values[e])) {
2449
+ r = e;
2450
+ break;
2451
+ }
2452
+ if (r >= 0) {
2453
+ let a = i.values[r], o = NaN;
2454
+ for (let e = r - 1; e >= 0; --e) if (Number.isFinite(i.values[e])) {
2455
+ o = i.values[e];
2456
+ break;
2457
+ }
2458
+ let s = G(i, a);
2459
+ Number.isFinite(s) && xe.push({
2460
+ y: s,
2461
+ label: e.label ?? t(a, n.valueFormat, n),
2462
+ color: e.color ?? (Number.isFinite(o) && a < o ? "#ef4444" : "#16a34a"),
2463
+ dashed: !0,
2464
+ pill: !0
2465
+ });
2466
+ }
2467
+ }
2468
+ }
2469
+ let Ee = [];
2470
+ for (let e of n.annotations ?? []) {
2471
+ let t = null, i = null;
2472
+ if ("category" in e.at) {
2473
+ let a = n.categories.indexOf(e.at.category);
2474
+ if (a < 0) continue;
2475
+ t = ce(a);
2476
+ let o = e.at.series, s = o ? r.find((e) => e.label === o) : r[0];
2477
+ if (s) {
2478
+ let e = s.values[a];
2479
+ Number.isFinite(e) && (i = G(s, e));
2480
+ }
2481
+ i ??= C + k / 2;
2482
+ } else {
2483
+ let r = Number.isFinite(e.at.x) ? Qe(n, E, e.at.x) : NaN;
2484
+ t = Number.isFinite(r) ? r : _ + w / 2, i = Number.isFinite(e.at.y) ? H(B, e.at.y, F, u.y.reversed) : C + k / 2;
2485
+ }
2486
+ t != null && i != null && Number.isFinite(i) && Ee.push({
2487
+ x: t,
2488
+ y: i,
2489
+ label: e.label,
2490
+ color: e.color ?? "#0f172a",
2491
+ placement: e.placement ?? "top",
2492
+ shape: e.shape ?? "dot",
2493
+ ...e.text ? { text: e.text } : {}
2494
+ });
2495
+ }
2496
+ let De = [];
2497
+ for (let e of n.drawings ?? []) {
2498
+ let r = e.axis === "right", i = r ? V ?? B : B, a = r ? I : F, s = r ? u.y2.reversed : u.y.reversed, c = [], l = !0;
2499
+ for (let t of e.points) {
2500
+ let e = Qe(n, E, t.x), r = H(i, t.y, a, s);
2501
+ if (!Number.isFinite(e) || !Number.isFinite(r)) {
2502
+ l = !1;
2503
+ break;
2504
+ }
2505
+ c.push({
2506
+ x: o(e),
2507
+ y: r
2508
+ });
2509
+ }
2510
+ if (!l || !c.length) continue;
2511
+ let d = e.color ?? "#0ea5e9", f = {
2512
+ id: e.id,
2513
+ kind: e.kind,
2514
+ points: c,
2515
+ color: d,
2516
+ ...e.text ? { text: e.text } : {}
2517
+ };
2518
+ if (e.kind === "fib" && c.length >= 2) {
2519
+ let r = e.points[0].y, o = e.points[1].y;
2520
+ f.levels = [
2521
+ 0,
2522
+ .236,
2523
+ .382,
2524
+ .5,
2525
+ .618,
2526
+ 1
2527
+ ].map((e) => {
2528
+ let c = o + (r - o) * e;
2529
+ return {
2530
+ ratio: e,
2531
+ y: H(i, c, a, s),
2532
+ label: `${(e * 100).toFixed(1)}% ${t(c, n.valueFormat, n)}`
2533
+ };
2534
+ });
2535
+ }
2536
+ e.kind === "hray" && (f.label = t(e.points[0].y, n.valueFormat, n)), De.push(f);
2537
+ }
2538
+ return {
2539
+ ...i,
2540
+ plot: A,
2541
+ axes: {
2542
+ y: {
2543
+ min: B.min,
2544
+ max: B.max,
2545
+ log: F,
2546
+ reversed: u.y.reversed
2547
+ },
2548
+ y2: V ? {
2549
+ min: V.min,
2550
+ max: V.max,
2551
+ log: I,
2552
+ reversed: u.y2.reversed
2553
+ } : null,
2554
+ slot: se,
2555
+ count: n.categories.length,
2556
+ ...E.continuous ? { x: {
2557
+ type: E.continuous,
2558
+ min: E.min,
2559
+ max: E.max,
2560
+ reversed: u.x.reversed,
2561
+ values: E.values ?? [],
2562
+ ...E.log ? { log: !0 } : {}
2563
+ } } : {},
2564
+ xReversed: u.x.reversed,
2565
+ labels: n.categories
2566
+ },
2567
+ grid: {
2568
+ x: u.x.gridLines,
2569
+ y: u.y.gridLines
2570
+ },
2571
+ bars: K,
2572
+ candles: pe,
2573
+ boxes: X,
2574
+ errorBars: me,
2575
+ stems: q,
2576
+ lines: ge,
2577
+ yTicks: be(B, u.y, F),
2578
+ y2Ticks: V ? be(V, u.y2, I) : [],
2579
+ hasRightAxis: p,
2580
+ xTicks: le,
2581
+ categoryGroupTicks: de,
2582
+ xLabelRotated: E.rotated,
2583
+ xLabelAngle: E.angle,
2584
+ referenceLines: xe,
2585
+ referenceLinesV: Se,
2586
+ referenceBands: Ce,
2587
+ overlays: we,
2588
+ annotations: Ee,
2589
+ drawings: De,
2590
+ seriesLabels: n.seriesLabels ? it(n, ge, A) : []
2591
+ };
2592
+ }
2593
+ function rt(e, t) {
2594
+ let n = /* @__PURE__ */ new Map(), r = typeof e.seriesLabels == "object" ? e.seriesLabels.formatter : void 0;
2595
+ for (let e of t) {
2596
+ if (e.kind !== "line" && e.kind !== "area") continue;
2597
+ let t = [...e.values].reverse().find((e) => Number.isFinite(e));
2598
+ t !== void 0 && n.set(e.label, (r ? r(e.label, t) : e.label).length);
2599
+ }
2600
+ return n;
2601
+ }
2602
+ function it(e, t, n) {
2603
+ let r = typeof e.seriesLabels == "object" ? e.seriesLabels.formatter : void 0, i = [];
2604
+ for (let e of t) {
2605
+ let t = [...e.points].reverse().find((e) => e.defined && Number.isFinite(e.y));
2606
+ t && i.push({
2607
+ x: o(t.x + 6),
2608
+ y: t.y,
2609
+ text: r ? r(e.label, t.value) : e.label,
2610
+ color: e.color,
2611
+ series: e.label
2612
+ });
2613
+ }
2614
+ i.sort((e, t) => e.y - t.y);
2615
+ for (let e = 1; e < i.length; e += 1) i[e].y = Math.max(i[e].y, i[e - 1].y + 12);
2616
+ let a = n.y + n.h - 2;
2617
+ for (let e = i.length - 1; e >= 0; --e) {
2618
+ let t = e === i.length - 1 ? a : i[e + 1].y - 12;
2619
+ i[e].y = Math.min(i[e].y, t);
2620
+ }
2621
+ for (let e of i) e.y = o(Math.max(n.y + 4, e.y));
2622
+ return i;
2623
+ }
2624
+ function at(e) {
2625
+ let { spec: n, series: r, empty: i, width: a, height: s, frame: c, axes: l } = e, u = r[0];
2626
+ if (!u || !n.categories.length) return { ...i };
2627
+ let d = u.targets ?? r[1]?.values ?? [], f = n.bulletRanges ?? n.gaugeRanges ?? [], p = n.categories.reduce((e, t) => Math.max(e, t.length), 0), m = l.x.labels ? Math.min(150, 18 + p * 6.4) : 12, h = 8 + c.top, g = (l.y.labels ? 26 : 8) + (l.y.title ? 16 : 0) + c.bottom, _ = Math.max(1, a - m - 16), v = Math.max(1, s - h - g), y = {
2628
+ x: m,
2629
+ y: h,
2630
+ w: _,
2631
+ h: v
2632
+ }, x = 0;
2633
+ for (let e of u.values) Number.isFinite(e) && e > x && (x = e);
2634
+ for (let e of d) Number.isFinite(e) && e > x && (x = e);
2635
+ for (let e of f) Number.isFinite(e.to) && e.to > x && (x = e.to);
2636
+ let S = b(0, x > 0 ? x : 1, l.y), C = (e) => o(m + (e - S.min) / (S.max - S.min || 1) * _), w = n.categories.length, T = v / w, E = T * .25, D = T - E, O = [];
2637
+ n.categories.forEach((e, t) => {
2638
+ let n = u.values[t], r = d[t], i = o(h + T * t + E / 2), a = Number.isFinite(n) ? n : 0;
2639
+ O.push({
2640
+ x: m,
2641
+ y: i,
2642
+ w: _,
2643
+ h: o(D),
2644
+ measureW: Math.max(0, C(Math.max(S.min, Math.min(S.max, a))) - m),
2645
+ targetX: Number.isFinite(r) ? C(Math.max(S.min, Math.min(S.max, r))) : null,
2646
+ ranges: f.map((e) => {
2647
+ let t = C(Math.max(S.min, Math.min(S.max, e.from))), n = C(Math.max(S.min, Math.min(S.max, e.to)));
2648
+ return {
2649
+ x: Math.min(t, n),
2650
+ w: Math.abs(n - t),
2651
+ color: e.color
2652
+ };
2653
+ }),
2654
+ color: u.colors?.[t] ?? u.color,
2655
+ label: e,
2656
+ series: u.label,
2657
+ value: a,
2658
+ target: Number.isFinite(r) ? r : null
2659
+ });
2660
+ });
2661
+ let k = S.ticks.map((e, r) => ({
2662
+ label: l.y.labels ? ue(e, r, l.y, n, t) : "",
2663
+ x: C(e)
2664
+ })), A = l.x.labels ? n.categories.map((e, t) => ({
2665
+ value: t,
2666
+ y: o(h + T * t + T / 2),
2667
+ label: e
2668
+ })) : [];
2669
+ return {
2670
+ ...i,
2671
+ plot: y,
2672
+ axes: {
2673
+ y: {
2674
+ min: S.min,
2675
+ max: S.max,
2676
+ log: !1
2677
+ },
2678
+ y2: null,
2679
+ slot: T,
2680
+ count: w,
2681
+ labels: n.categories
2682
+ },
2683
+ grid: {
2684
+ x: l.y.gridLines,
2685
+ y: !1
2686
+ },
2687
+ orientation: "horizontal",
2688
+ bullets: O,
2689
+ valueTicks: k,
2690
+ catTicks: A,
2691
+ legend: [{
2692
+ label: u.label,
2693
+ color: u.color
2694
+ }]
2695
+ };
2696
+ }
2697
+ //#endregion
2698
+ //#region src/chart-polar.ts
2699
+ function ot(e) {
2700
+ let { spec: t, series: n, width: r, height: i, empty: s, frame: c } = e;
2701
+ if (!n.length || !t.categories.length) return { ...s };
2702
+ let l = 24 + c.top, u = 24 + c.bottom, d = Math.max(1, r - 30 - 30), f = Math.max(1, i - l - u), p = {
2703
+ x: 30,
2704
+ y: l,
2705
+ w: d,
2706
+ h: f
2707
+ }, m = 30 + d / 2, h = l + f / 2, g = Math.max(20, Math.min(d, f) / 2 - 20), _ = t.categories, v = _.length, y = 0;
2708
+ for (let e of n) for (let t of e.values) Number.isFinite(t) && t > y && (y = t);
2709
+ y === 0 && (y = 1);
2710
+ let b = t.yAxis?.min ?? 0, x = t.yAxis?.max ?? Math.max(y, b + 1), S = x > b ? x - b : 1, C = Array.from({ length: 5 }, (e, t) => b + (t + 1) / 5 * S), w = (e) => -Math.PI / 2 + e / v * Math.PI * 2, T = (e, t) => {
2711
+ let n = Math.max(0, Math.min(1, (t - b) / S)), r = w(e);
2712
+ return {
2713
+ x: o(m + g * n * Math.cos(r)),
2714
+ y: o(h + g * n * Math.sin(r))
2715
+ };
2716
+ }, E = _.map((e, t) => {
2717
+ let n = T(t, x);
2718
+ return {
2719
+ label: e,
2720
+ x: n.x,
2721
+ y: n.y
2722
+ };
2723
+ }), D = n.map((e, n) => {
2724
+ let r = e.values.map((e, t) => {
2725
+ let n = T(t, Number.isFinite(e) ? e : b);
2726
+ return {
2727
+ x: n.x,
2728
+ y: n.y,
2729
+ value: e,
2730
+ axis: _[t] ?? ""
2731
+ };
2732
+ }), i = r.length ? r.map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`).join(" ") + " Z" : "", o = t.palette ?? a;
2733
+ return {
2734
+ label: e.label,
2735
+ color: e.color ?? o[n % o.length],
2736
+ path: i,
2737
+ points: r
2738
+ };
2739
+ });
2740
+ return {
2741
+ ...s,
2742
+ plot: p,
2743
+ radarRings: C,
2744
+ radarAxes: E,
2745
+ radarSeries: D,
2746
+ radarCenter: {
2747
+ cx: m,
2748
+ cy: h,
2749
+ r: g
2750
+ }
2751
+ };
2752
+ }
2753
+ function st(e) {
2754
+ let { spec: t, width: n, height: r, empty: i, frame: a } = e, s = t.gaugeMin ?? 0, c = t.gaugeMax ?? 100, l = Math.max(s, Math.min(c, t.gaugeValue ?? 0)), u = t.gaugeTarget, d = n / 2, f = Math.max(1, r - a.top - a.bottom), p = a.top + f * .78, m = Math.min(n * .42, f * .65), h = Math.PI, g = 2 * Math.PI, _ = (e) => h + (e - s) / (c - s || 1) * (g - h), v = (e, t, n) => {
2755
+ let r = d + n * Math.cos(e), i = p + n * Math.sin(e), a = d + n * Math.cos(t), o = p + n * Math.sin(t);
2756
+ return `M${r},${i} A${n},${n} 0 ${+(t - e > Math.PI)} 1 ${a},${o}`;
2757
+ }, y = v(h, g, m), b = v(h, _(l), m), x = (t.gaugeRanges ?? []).map((e) => ({
2758
+ path: v(_(e.from), _(e.to), m - 16),
2759
+ color: e.color,
2760
+ from: e.from,
2761
+ to: e.to
2762
+ })), S = null;
2763
+ if (u != null && Number.isFinite(u)) {
2764
+ let e = _(Math.max(s, Math.min(c, u))), t = m - 12, n = m + 4;
2765
+ S = {
2766
+ x1: d + t * Math.cos(e),
2767
+ y1: p + t * Math.sin(e),
2768
+ x2: d + n * Math.cos(e),
2769
+ y2: p + n * Math.sin(e)
2770
+ };
2771
+ }
2772
+ let C = [];
2773
+ for (let e = 0; e <= 20; e++) {
2774
+ let t = h + e / 20 * (g - h), n = e % 5 == 0, r = m + 9, i = m + (n ? 17 : 13);
2775
+ C.push({
2776
+ x1: d + r * Math.cos(t),
2777
+ y1: p + r * Math.sin(t),
2778
+ x2: d + i * Math.cos(t),
2779
+ y2: p + i * Math.sin(t),
2780
+ major: n
2781
+ });
2782
+ }
2783
+ let w = _(l), T = m - 14, E = w + Math.PI / 2, D = (e, t) => `${o(d + e * Math.cos(t))},${o(p + e * Math.sin(t))}`, O = `M${D(9, E)} L${D(T, w)} L${D(9, E + Math.PI)} L${D(5, w + Math.PI)} Z`, k = null, A = t.gaugeRanges ?? [];
2784
+ for (let e of A) if (l >= e.from && l < e.to) {
2785
+ k = e.color;
2786
+ break;
2787
+ }
2788
+ if (k == null) for (let e of A) l >= e.from && l <= e.to && (k = e.color);
2789
+ return {
2790
+ ...i,
2791
+ plot: {
2792
+ x: 0,
2793
+ y: 0,
2794
+ w: n,
2795
+ h: r
2796
+ },
2797
+ gauge: {
2798
+ cx: d,
2799
+ cy: p,
2800
+ r: m,
2801
+ trackPath: y,
2802
+ valuePath: b,
2803
+ rangePaths: x,
2804
+ target: S,
2805
+ ticks: C,
2806
+ needle: {
2807
+ path: O,
2808
+ hubR: 6
2809
+ },
2810
+ valueColor: k,
2811
+ minLabel: {
2812
+ x: d - m,
2813
+ y: p + 20
2814
+ },
2815
+ maxLabel: {
2816
+ x: d + m,
2817
+ y: p + 20
2818
+ },
2819
+ value: l,
2820
+ min: s,
2821
+ max: c,
2822
+ unit: t.gaugeUnit ?? ""
2823
+ }
2824
+ };
2825
+ }
2826
+ function ct(e) {
2827
+ let { spec: t, series: n, empty: r, width: i, height: a, palette: s, frame: c } = e, l = n[0];
2828
+ if (!l) return r;
2829
+ let u = l.values.reduce((e, t) => e + Math.max(0, t), 0) || 1, d = Math.max(1, a - c.top - c.bottom), f = c.top + d / 2, p = t.dataLabels?.placement === "outside" && t.dataLabels.show !== !1, m = 0, h = 0;
2830
+ if (p) {
2831
+ let e = -Math.PI / 2;
2832
+ t.categories.forEach((t, n) => {
2833
+ let r = Math.max(0, l.values[n] ?? 0) / u, i = e + r * Math.PI * 2 / 2;
2834
+ if (e += r * Math.PI * 2, r < .015) return;
2835
+ let a = (Math.min(t.length, 18) + 4) * 6.3;
2836
+ Math.cos(i) >= 0 ? h = Math.max(h, a) : m = Math.max(m, a);
2837
+ });
2838
+ }
2839
+ let g = p ? 26 + m : 10, _ = p ? 26 + h : 10, v = Math.max(12, Math.min(i, d) * .25), y = (i - g - _) / 2, b = Math.max(v, Math.min(d / 2 - (p ? 34 : 10), y)), x = p && y >= b ? g + y : i / 2, S = b * Math.min(.9, Math.max(0, t.innerRadius ?? 0)), C = -Math.PI / 2, w = l.values.map((e, n) => {
2840
+ let r = Math.max(0, e) / u, i = C, a = C + r * Math.PI * 2;
2841
+ C = a;
2842
+ let c = +(a - i > Math.PI), d = (i + a) / 2, p = (b + S) / 2 || b * .6, m = x + b * Math.cos(i), h = f + b * Math.sin(i), g = x + b * Math.cos(a), _ = f + b * Math.sin(a), v;
2843
+ if (r >= .999) v = S ? `M${o(x - b)},${o(f)} A${b},${b} 0 1 1 ${o(x + b)},${o(f)} A${b},${b} 0 1 1 ${o(x - b)},${o(f)} ZM${o(x - S)},${o(f)} A${S},${S} 0 1 0 ${o(x + S)},${o(f)} A${S},${S} 0 1 0 ${o(x - S)},${o(f)} Z` : `M${o(x - b)},${o(f)} A${b},${b} 0 1 1 ${o(x + b)},${o(f)} A${b},${b} 0 1 1 ${o(x - b)},${o(f)} Z`;
2844
+ else if (S > 0) {
2845
+ let e = x + S * Math.cos(i), t = f + S * Math.sin(i), n = x + S * Math.cos(a), r = f + S * Math.sin(a);
2846
+ v = `M${o(m)},${o(h)} A${b},${b} 0 ${c} 1 ${o(g)},${o(_)} L${o(n)},${o(r)} A${S},${S} 0 ${c} 0 ${o(e)},${o(t)} Z`;
2847
+ } else v = `M${o(x)},${o(f)} L${o(m)},${o(h)} A${b},${b} 0 ${c} 1 ${o(g)},${o(_)} Z`;
2848
+ let y = t.categories[n] ?? String(n);
2849
+ return {
2850
+ path: v,
2851
+ color: t.categoryColors?.[y] ?? l.colors?.[n] ?? s[n % s.length],
2852
+ label: y,
2853
+ value: e,
2854
+ percent: r * 100,
2855
+ cx: o(x + p * Math.cos(d)),
2856
+ cy: o(f + p * Math.sin(d)),
2857
+ arc: {
2858
+ a0: i,
2859
+ a1: a,
2860
+ r: b,
2861
+ ir: S,
2862
+ cx: x,
2863
+ cy: f
2864
+ }
2865
+ };
2866
+ });
2867
+ return p && lt(w, x, f, b, c.top, c.top + d, i), {
2868
+ ...r,
2869
+ slices: w,
2870
+ legend: t.categories.map((e, n) => ({
2871
+ label: e,
2872
+ color: t.categoryColors?.[e] ?? l.colors?.[n] ?? s[n % s.length]
2873
+ })),
2874
+ donut: S > 0 ? {
2875
+ cx: o(x),
2876
+ cy: o(f),
2877
+ r: o(S),
2878
+ total: l.values.reduce((e, t) => e + Math.max(0, t), 0)
2879
+ } : null
2880
+ };
2881
+ }
2882
+ function lt(e, t, n, r, i, a, s) {
2883
+ let c = (e) => Math.max(4, Math.floor((e - r - 26) / 6.3) - 4), l = c(s - t), u = c(t), d = [];
2884
+ for (let t of e) {
2885
+ if (!t.arc || t.percent < 1.5) continue;
2886
+ let e = (t.arc.a0 + t.arc.a1) / 2;
2887
+ d.push({
2888
+ slice: t,
2889
+ mid: e,
2890
+ ty: n + Math.sin(e) * (r + 16),
2891
+ right: Math.cos(e) >= 0
2892
+ });
2893
+ }
2894
+ for (let e of [!0, !1]) {
2895
+ let s = d.filter((t) => t.right === e).sort((e, t) => e.ty - t.ty);
2896
+ for (let e = 1; e < s.length; e += 1) s[e].ty = Math.max(s[e].ty, s[e - 1].ty + 13);
2897
+ let c = a - 6;
2898
+ for (let e = s.length - 1; e >= 0; --e) {
2899
+ let t = e === s.length - 1 ? c : s[e + 1].ty - 13;
2900
+ s[e].ty = Math.min(s[e].ty, t);
2901
+ }
2902
+ for (let e of s) e.ty < i + 6 && (e.ty = i + 6);
2903
+ for (let i of s) {
2904
+ let a = t + Math.cos(i.mid) * (r + 2), s = n + Math.sin(i.mid) * (r + 2), c = t + Math.cos(i.mid) * (r + 12), d = i.ty, f = e ? t + r + 22 : t - r - 22;
2905
+ i.slice.callout = {
2906
+ x1: o(a),
2907
+ y1: o(s),
2908
+ x2: o(c),
2909
+ y2: o(d),
2910
+ x3: o(f),
2911
+ tx: o(f + (e ? 4 : -4)),
2912
+ ty: o(i.ty),
2913
+ anchor: e ? "start" : "end",
2914
+ maxChars: e ? l : u
2915
+ };
2916
+ }
2917
+ }
2918
+ }
2919
+ function Z(e, t, n, r, i, a) {
2920
+ let s = Math.PI * 2, c = Math.max(0, Math.min(s, a - i));
2921
+ if (c <= 0 || r <= 0) return "";
2922
+ let l = (n, r) => `${o(e + n * Math.cos(r))},${o(t + n * Math.sin(r))}`;
2923
+ if (c >= s - 1e-6) {
2924
+ let e = `M${l(r, i)} A${o(r)},${o(r)} 0 1 1 ${l(r, i + Math.PI)} A${o(r)},${o(r)} 0 1 1 ${l(r, i)} Z`;
2925
+ return n <= 0 ? e : `${e} M${l(n, i)} A${o(n)},${o(n)} 0 1 0 ${l(n, i + Math.PI)} A${o(n)},${o(n)} 0 1 0 ${l(n, i)} Z`;
2926
+ }
2927
+ let u = +(c > Math.PI);
2928
+ return n <= 0 ? `M${o(e)},${o(t)} L${l(r, i)} A${o(r)},${o(r)} 0 ${u} 1 ${l(r, a)} Z` : `M${l(r, i)} A${o(r)},${o(r)} 0 ${u} 1 ${l(r, a)} L${l(n, a)} A${o(n)},${o(n)} 0 ${u} 0 ${l(n, i)} Z`;
2929
+ }
2930
+ function ut(e, t = 24) {
2931
+ let { width: n, height: r, frame: i } = e, a = Math.max(1, r - i.top - i.bottom), o = n / 2, s = i.top + a / 2, c = Math.max(10, Math.min(n, a) / 2 - t);
2932
+ return {
2933
+ cx: o,
2934
+ cy: s,
2935
+ r: c,
2936
+ plot: {
2937
+ x: o - c,
2938
+ y: s - c,
2939
+ w: 2 * c,
2940
+ h: 2 * c
2941
+ }
2942
+ };
2943
+ }
2944
+ function dt(e, t, n) {
2945
+ return t <= 0 ? e : p([e, n === "dark" ? "#111827" : "#ffffff"], Math.min(.6, t * .22));
2946
+ }
2947
+ var Q = -Math.PI / 2, $ = Math.PI * 2;
2948
+ function ft(e) {
2949
+ let { spec: t, empty: n, palette: r, theme: i } = e, a = t.tree ?? t.treemap;
2950
+ if (!a) return { ...n };
2951
+ let { cx: s, cy: c, r: l, plot: u } = ut(e, 12), d = (e) => e.children?.length ? e.children.reduce((e, t) => e + d(t), 0) : Math.max(0, e.value ?? 0), f = (e) => e.children?.length ? 1 + Math.max(...e.children.map(f)) : 0, p = a.children ?? [a], m = p.reduce((e, t) => e + d(t), 0);
2952
+ if (m <= 0) return {
2953
+ ...n,
2954
+ plot: u
2955
+ };
2956
+ let g = Math.max(1, f({
2957
+ name: "",
2958
+ children: p
2959
+ })), _ = l * Math.min(.6, Math.max(0, t.innerRadius ?? .18)), v = (l - _) / g, y = [], b = (e, t, n, a, l, u) => {
2960
+ let f = e.reduce((e, t) => e + d(t), 0);
2961
+ if (f <= 0) return;
2962
+ let p = t;
2963
+ e.forEach((e, m) => {
2964
+ let g = d(e);
2965
+ if (g <= 0) return;
2966
+ let x = (n - t) * g / f, S = e.color ?? (a === 0 ? r[m % r.length] : l), C = a === 0 ? S : dt(S, a, i), w = _ + v * a, T = w + v - 1, E = p + x / 2, D = (w + T) / 2, O = [...u, e.name];
2967
+ y.push({
2968
+ path: Z(s, c, w, T, p, p + x),
2969
+ color: C,
2970
+ textColor: h(C),
2971
+ label: e.name,
2972
+ series: u[u.length - 1] ?? "",
2973
+ value: g,
2974
+ a0: p,
2975
+ a1: p + x,
2976
+ r0: w,
2977
+ r1: T,
2978
+ cx: s,
2979
+ cy: c,
2980
+ depth: a,
2981
+ nodePath: O,
2982
+ lx: o(s + D * Math.cos(E)),
2983
+ ly: o(c + D * Math.sin(E))
2984
+ }), e.children?.length && b(e.children, p, p + x, a + 1, S, O), p += x;
2985
+ });
2986
+ };
2987
+ return b(p, Q, Q + $, 0, null, []), {
2988
+ ...n,
2989
+ plot: u,
2990
+ arcs: y,
2991
+ legend: p.map((e, t) => ({
2992
+ label: e.name,
2993
+ color: e.color ?? r[t % r.length]
2994
+ })),
2995
+ donut: _ > 0 ? {
2996
+ cx: o(s),
2997
+ cy: o(c),
2998
+ r: o(_),
2999
+ total: m
3000
+ } : null
3001
+ };
3002
+ }
3003
+ function pt(e) {
3004
+ let { spec: t, series: n, empty: r, palette: i } = e;
3005
+ if (!n.length || !t.categories.length) return { ...r };
3006
+ let { cx: a, cy: s, r: c, plot: l } = ut(e, 12), u = 0;
3007
+ for (let e of n) for (let t of e.values) Number.isFinite(t) && t > u && (u = t);
3008
+ u <= 0 && (u = 1);
3009
+ let d = t.categories.length, f = d * n.length, p = c * Math.min(.6, Math.max(0, t.innerRadius ?? .2)), m = (c - p) / Math.max(1, f), g = Math.min(3, m * .2), _ = [];
3010
+ for (let e = 0; e < d; e += 1) n.forEach((r, c) => {
3011
+ let l = r.values[e];
3012
+ if (!Number.isFinite(l) || l <= 0) return;
3013
+ let d = e * n.length + c, f = p + m * d + g / 2, v = f + m - g, y = Math.min($ * .9999, Math.max(0, l) / u * $), b = n.length === 1 ? t.categoryColors?.[t.categories[e]] ?? r.colors?.[e] ?? i[e % i.length] : r.colors?.[e] ?? r.color, x = Q + y / 2, S = (f + v) / 2;
3014
+ _.push({
3015
+ path: Z(a, s, f, v, Q, Q + y),
3016
+ trackPath: Z(a, s, f, v, Q, Q + $),
3017
+ color: b,
3018
+ textColor: h(b),
3019
+ label: t.categories[e],
3020
+ series: r.label,
3021
+ value: l,
3022
+ a0: Q,
3023
+ a1: Q + y,
3024
+ r0: f,
3025
+ r1: v,
3026
+ cx: a,
3027
+ cy: s,
3028
+ lx: o(a + S * Math.cos(x)),
3029
+ ly: o(s + S * Math.sin(x))
3030
+ });
3031
+ });
3032
+ return {
3033
+ ...r,
3034
+ plot: l,
3035
+ arcs: _,
3036
+ legend: n.length === 1 ? t.categories.map((e, n) => ({
3037
+ label: e,
3038
+ color: t.categoryColors?.[e] ?? i[n % i.length]
3039
+ })) : r.legend
3040
+ };
3041
+ }
3042
+ function mt(e) {
3043
+ let { spec: t, series: n, empty: r, palette: i, stacked: a } = e;
3044
+ if (!n.length || !t.categories.length) return { ...r };
3045
+ let s = t.type === "nightingale", { cx: c, cy: l, r: u, plot: d } = ut(e, 22), f = t.categories.length, p = a || s && n.length > 1, m = 0;
3046
+ if (p) for (let e = 0; e < f; e += 1) {
3047
+ let t = 0;
3048
+ for (let r of n) t += Number.isFinite(r.values[e]) ? Math.max(0, r.values[e]) : 0;
3049
+ t > m && (m = t);
3050
+ }
3051
+ else for (let e of n) for (let t of e.values) Number.isFinite(t) && t > m && (m = t);
3052
+ let g = b(0, m > 0 ? m : 1, t.yAxis ?? {}), _ = u * Math.min(.5, Math.max(0, t.innerRadius ?? (s ? 0 : .12))), v = (e) => {
3053
+ let t = Math.max(0, Math.min(1, (e - g.min) / (g.max - g.min || 1)));
3054
+ return _ + (u - _) * (s ? Math.sqrt(t) : t);
3055
+ }, y = $ / f, x = s ? 0 : y * .15, S = [];
3056
+ for (let e = 0; e < f; e += 1) {
3057
+ let r = Q + y * e + x / 2, a = Q + y * (e + 1) - x / 2;
3058
+ if (p) {
3059
+ let s = 0;
3060
+ n.forEach((u) => {
3061
+ let d = u.values[e];
3062
+ if (!Number.isFinite(d) || d <= 0) return;
3063
+ let f = v(s);
3064
+ s += d;
3065
+ let p = v(s), m = n.length === 1 ? t.categoryColors?.[t.categories[e]] ?? u.colors?.[e] ?? i[e % i.length] : u.colors?.[e] ?? u.color, g = (r + a) / 2, _ = (f + p) / 2;
3066
+ S.push({
3067
+ path: Z(c, l, f, p, r, a),
3068
+ color: m,
3069
+ textColor: h(m),
3070
+ label: t.categories[e],
3071
+ series: u.label,
3072
+ value: d,
3073
+ a0: r,
3074
+ a1: a,
3075
+ r0: f,
3076
+ r1: p,
3077
+ cx: c,
3078
+ cy: l,
3079
+ lx: o(c + _ * Math.cos(g)),
3080
+ ly: o(l + _ * Math.sin(g))
3081
+ });
3082
+ });
3083
+ } else {
3084
+ let s = (a - r) / n.length;
3085
+ n.forEach((a, u) => {
3086
+ let d = a.values[e];
3087
+ if (!Number.isFinite(d) || d <= 0) return;
3088
+ let f = r + s * u, p = f + s * (n.length > 1 ? .92 : 1), m = v(d), g = n.length === 1 ? t.categoryColors?.[t.categories[e]] ?? a.colors?.[e] ?? i[e % i.length] : a.colors?.[e] ?? a.color, y = (f + p) / 2, b = (_ + m) / 2;
3089
+ S.push({
3090
+ path: Z(c, l, _, m, f, p),
3091
+ color: g,
3092
+ textColor: h(g),
3093
+ label: t.categories[e],
3094
+ series: a.label,
3095
+ value: d,
3096
+ a0: f,
3097
+ a1: p,
3098
+ r0: _,
3099
+ r1: m,
3100
+ cx: c,
3101
+ cy: l,
3102
+ lx: o(c + b * Math.cos(y)),
3103
+ ly: o(l + b * Math.sin(y))
3104
+ });
3105
+ });
3106
+ }
3107
+ }
3108
+ let C = e.axes.x.labels ? t.categories.map((e, t) => {
3109
+ let n = Q + y * t + y / 2, r = u + 10;
3110
+ return {
3111
+ label: e,
3112
+ x: o(c + r * Math.cos(n)),
3113
+ y: o(l + r * Math.sin(n))
3114
+ };
3115
+ }) : [];
3116
+ return {
3117
+ ...r,
3118
+ plot: d,
3119
+ arcs: S,
3120
+ polarAxes: C,
3121
+ polarRings: g.ticks.filter((e) => e > g.min).map((e) => v(e)),
3122
+ radarCenter: {
3123
+ cx: c,
3124
+ cy: l,
3125
+ r: u
3126
+ },
3127
+ legend: n.length === 1 ? t.categories.map((e, n) => ({
3128
+ label: e,
3129
+ color: t.categoryColors?.[e] ?? i[n % i.length]
3130
+ })) : r.legend
3131
+ };
3132
+ }
3133
+ function ht(e) {
3134
+ let { spec: t, empty: n, palette: r } = e, i = t.sankeyNodes ?? [], a = (t.sankeyLinks ?? []).filter((e) => Number.isFinite(e.value) && e.value > 0);
3135
+ if (!i.length || !a.length) return { ...n };
3136
+ let { cx: s, cy: c, r: l, plot: u } = ut(e, 28), d = /* @__PURE__ */ new Map();
3137
+ for (let e of a) d.set(e.source, (d.get(e.source) ?? 0) + e.value), e.target !== e.source && d.set(e.target, (d.get(e.target) ?? 0) + e.value);
3138
+ let f = i.filter((e) => (d.get(e.id) ?? 0) > 0), p = f.reduce((e, t) => e + (d.get(t.id) ?? 0), 0);
3139
+ if (p <= 0) return {
3140
+ ...n,
3141
+ plot: u
3142
+ };
3143
+ let m = Math.min(.06, $ / (f.length * 8)), g = $ - m * f.length, _ = l - Math.max(8, l * .09), v = [], y = /* @__PURE__ */ new Map(), b = Q;
3144
+ f.forEach((e, t) => {
3145
+ let n = d.get(e.id) ?? 0, i = g * n / p, a = e.color ?? r[t % r.length];
3146
+ y.set(e.id, {
3147
+ a0: b,
3148
+ a1: b + i,
3149
+ cursor: b,
3150
+ color: a
3151
+ });
3152
+ let u = b + i / 2, f = l + 12;
3153
+ v.push({
3154
+ path: Z(s, c, _, l, b, b + i),
3155
+ color: a,
3156
+ textColor: h(a),
3157
+ label: e.label ?? e.id,
3158
+ series: "",
3159
+ value: n,
3160
+ a0: b,
3161
+ a1: b + i,
3162
+ r0: _,
3163
+ r1: l,
3164
+ cx: s,
3165
+ cy: c,
3166
+ lx: o(s + f * Math.cos(u)),
3167
+ ly: o(c + f * Math.sin(u))
3168
+ }), b += i + m;
3169
+ });
3170
+ let x = (e, t) => `${o(s + e * Math.cos(t))},${o(c + e * Math.sin(t))}`, S = [], C = (e, t) => {
3171
+ let n = y.get(e);
3172
+ if (!n) return null;
3173
+ let r = (n.a1 - n.a0) * t / (d.get(e) ?? 1), i = {
3174
+ a0: n.cursor,
3175
+ a1: n.cursor + r
3176
+ };
3177
+ return n.cursor += r, i;
3178
+ }, w = a.slice().sort((e, t) => t.value - e.value);
3179
+ for (let e of w) {
3180
+ let t = C(e.source, e.value), n = e.target === e.source ? t : C(e.target, e.value);
3181
+ if (!t || !n) continue;
3182
+ let r = +(t.a1 - t.a0 > Math.PI), i = +(n.a1 - n.a0 > Math.PI), a = `M${x(_, t.a0)} A${o(_)},${o(_)} 0 ${r} 1 ${x(_, t.a1)} Q${o(s)},${o(c)} ${x(_, n.a0)} A${o(_)},${o(_)} 0 ${i} 1 ${x(_, n.a1)} Q${o(s)},${o(c)} ${x(_, t.a0)} Z`;
3183
+ S.push({
3184
+ path: a,
3185
+ color: e.color ?? y.get(e.source).color,
3186
+ source: e.source,
3187
+ target: e.target,
3188
+ value: e.value
3189
+ });
3190
+ }
3191
+ return {
3192
+ ...n,
3193
+ plot: u,
3194
+ arcs: v,
3195
+ chordRibbons: S,
3196
+ legend: f.map((e, t) => ({
3197
+ label: e.label ?? e.id,
3198
+ color: e.color ?? r[t % r.length]
3199
+ }))
3200
+ };
3201
+ }
3202
+ //#endregion
3203
+ //#region src/chart-flow.ts
3204
+ function gt(e) {
3205
+ let { spec: n, series: r, width: i, height: a, empty: s, frame: c, axes: l } = e, u = r[0];
3206
+ if (!u) return { ...s };
3207
+ let d = n.waterfallColors ?? {}, f = d.positive ?? "#16a34a", p = d.negative ?? "#ef4444", m = d.total ?? "#475569", h = n.categories.reduce((e, t) => Math.max(e, t.length), 0), g = 48 + (l.y.title ? 16 : 0), _ = 10 + c.top, v = Math.max(1, i - g - 12), b = typeof l.x.labelRotation == "number" ? l.x.labelRotation !== 0 : h * 6.2 + 8 > v / Math.max(1, n.categories.length), x = typeof l.x.labelRotation == "number" ? l.x.labelRotation : b ? -40 : 0, S = (b ? 54 : 28) + (l.x.title ? 16 : 0) + c.bottom, C = Math.max(1, a - _ - S), w = {
3208
+ x: g,
3209
+ y: _,
3210
+ w: v,
3211
+ h: C
3212
+ }, T = n.waterfallTotals ?? [], E = [], D = 0;
3213
+ n.categories.forEach((e, t) => {
3214
+ let n = u.values[t] ?? 0;
3215
+ T[t] ? (Number.isFinite(n) && n !== 0 && (D = n), E.push({
3216
+ from: 0,
3217
+ to: D,
3218
+ value: D,
3219
+ isTotal: !0
3220
+ })) : (E.push({
3221
+ from: D,
3222
+ to: D + n,
3223
+ value: n,
3224
+ isTotal: !1
3225
+ }), D += n);
3226
+ });
3227
+ let O = 0, k = 0;
3228
+ for (let e of E) e.from < O && (O = e.from), e.to < O && (O = e.to), e.from > k && (k = e.from), e.to > k && (k = e.to);
3229
+ let A = y(O, k), j = (e) => o(_ + C - (e - A.min) / (A.max - A.min || 1) * C), M = v / Math.max(1, n.categories.length), N = M * .2, P = Math.max(1, M - N), F = E.map((e, t) => {
3230
+ let r = j(Math.max(e.from, e.to)), i = j(Math.min(e.from, e.to)), a = g + M * t + N / 2, s = e.isTotal ? m : e.value >= 0 ? f : p;
3231
+ return {
3232
+ x: o(a),
3233
+ y: r,
3234
+ w: o(P),
3235
+ h: Math.max(1, i - r),
3236
+ color: s,
3237
+ label: n.categories[t] ?? String(t),
3238
+ series: u.label,
3239
+ value: e.value,
3240
+ index: t
3241
+ };
3242
+ }), I = [{
3243
+ path: E.map((e, t) => {
3244
+ let n = g + M * t + N / 2 + P, r = j(e.to), i = g + M * (t + 1) + N / 2;
3245
+ return t < E.length - 1 ? `M${n},${r} L${i},${r}` : "";
3246
+ }).filter(Boolean).join(" "),
3247
+ areaPath: "",
3248
+ color: "var(--sg-muted, #94a3b8)",
3249
+ label: "",
3250
+ points: []
3251
+ }], L = n.categories.map((e, t) => ({
3252
+ label: e,
3253
+ x: o(g + M * t + M / 2)
3254
+ })), R = A.ticks.map((e) => ({
3255
+ value: e,
3256
+ y: j(e),
3257
+ label: t(e, n.valueFormat, n)
3258
+ }));
3259
+ return {
3260
+ ...s,
3261
+ plot: w,
3262
+ bars: F,
3263
+ lines: I,
3264
+ yTicks: R,
3265
+ xTicks: L,
3266
+ xLabelRotated: b,
3267
+ xLabelAngle: x
3268
+ };
3269
+ }
3270
+ function _t(e) {
3271
+ let { spec: t, series: n, width: r, height: i, empty: o, frame: s } = e, c = n[0];
3272
+ if (!c || !c.values.length) return { ...o };
3273
+ let l = 16 + s.top, u = 16 + s.bottom, d = Math.max(1, r - 20 - 20), f = Math.max(1, i - l - u), p = {
3274
+ x: 20,
3275
+ y: l,
3276
+ w: d,
3277
+ h: f
3278
+ }, m = c.values.length, g = f / m, _ = Math.max(...c.values.map((e) => Number.isFinite(e) ? e : 0)), v = c.values[0] ?? 0, y = (e) => _ > 0 ? e / _ * d : 0, b = 20 + d / 2, x = t.palette ?? a, S = t.funnelShape ?? "trapezoid", C = c.values.map((e, n) => {
3279
+ let r = c.values[n + 1] ?? e * .8, i = l + g * n, a = i + g, o;
3280
+ if (S === "pyramid") {
3281
+ let e = d * n / m, t = d * (n + 1) / m;
3282
+ o = `M${b - e / 2},${i} L${b + e / 2},${i} L${b + t / 2},${a} L${b - t / 2},${a} Z`;
3283
+ } else if (S === "cone") {
3284
+ let e = d * (1 - n / m), t = d * (1 - (n + 1) / m);
3285
+ o = `M${b - e / 2},${i} L${b + e / 2},${i} L${b + t / 2},${a} L${b - t / 2},${a} Z`;
3286
+ } else {
3287
+ let t = y(e), n = y(r);
3288
+ o = `M${b - t / 2},${i} L${b + t / 2},${i} L${b + n / 2},${a} L${b - n / 2},${a} Z`;
3289
+ }
3290
+ let s = c.color ?? x[n % x.length];
3291
+ return {
3292
+ path: o,
3293
+ color: s,
3294
+ label: t.categories[n] ?? c.label,
3295
+ value: e,
3296
+ conversion: v > 0 ? e / v : 0,
3297
+ dropoff: n === 0 ? 0 : (c.values[n - 1] ?? e) > 0 ? 1 - e / (c.values[n - 1] ?? e) : 0,
3298
+ cx: b,
3299
+ cy: (i + a) / 2,
3300
+ textColor: h(s)
3301
+ };
3302
+ });
3303
+ return {
3304
+ ...o,
3305
+ plot: p,
3306
+ funnelSegments: C
3307
+ };
3308
+ }
3309
+ function vt(e) {
3310
+ let { spec: t, width: n, height: r, empty: i, frame: o } = e, s = t.sankeyNodes ?? [], c = t.sankeyLinks ?? [];
3311
+ if (!s.length || !c.length) return { ...i };
3312
+ let l = 14 + o.top, u = 14 + o.bottom, d = Math.max(1, n - 10 - 10), f = Math.max(1, r - l - u), p = {
3313
+ x: 10,
3314
+ y: l,
3315
+ w: d,
3316
+ h: f
3317
+ }, m = t.palette ?? a, h = new Map(s.map((e) => [e.id, e])), g = new Set(c.map((e) => e.target)), _ = s.filter((e) => !g.has(e.id)), v = /* @__PURE__ */ new Map();
3318
+ function y(e, t, n) {
3319
+ if (!n.has(e)) {
3320
+ n.add(e), (t > (v.get(e) ?? 0) || !v.has(e)) && v.set(e, t);
3321
+ for (let r of c) r.source === e && y(r.target, t + 1, n);
3322
+ n.delete(e);
3323
+ }
3324
+ }
3325
+ for (let e of _) y(e.id, 0, /* @__PURE__ */ new Set());
3326
+ for (let e of s) v.has(e.id) || v.set(e.id, 0);
3327
+ let b = Math.max(...v.values()) + 1, x = b > 1 ? (d - 14 * b) / (b - 1) : 0, S = /* @__PURE__ */ new Map(), C = /* @__PURE__ */ new Map();
3328
+ for (let e of c) S.set(e.target, (S.get(e.target) ?? 0) + e.value), C.set(e.source, (C.get(e.source) ?? 0) + e.value);
3329
+ let w = /* @__PURE__ */ new Map();
3330
+ for (let e of s) {
3331
+ let t = v.get(e.id) ?? 0, n = w.get(t) ?? [];
3332
+ n.push(e.id), w.set(t, n);
3333
+ }
3334
+ let T = 0;
3335
+ for (let e of w.values()) {
3336
+ let t = e.reduce((e, t) => e + Math.max(S.get(t) ?? 0, C.get(t) ?? 0), 0);
3337
+ t > T && (T = t);
3338
+ }
3339
+ if (T === 0) return {
3340
+ ...i,
3341
+ plot: p
3342
+ };
3343
+ let E = (f - 64) / T, D = [];
3344
+ for (let [e, t] of w) {
3345
+ let n = t.map((e) => Math.max(8, Math.max(S.get(e) ?? 0, C.get(e) ?? 0) * E)), r = l + (f - (n.reduce((e, t) => e + t, 0) + 8 * (t.length - 1))) / 2, i = 10 + e * (14 + x);
3346
+ t.forEach((t, a) => {
3347
+ let o = h.get(t), s = n[a];
3348
+ D.push({
3349
+ id: t,
3350
+ label: o.label ?? t,
3351
+ color: o.color ?? m[D.length % m.length],
3352
+ x: i,
3353
+ y: r,
3354
+ w: 14,
3355
+ h: s,
3356
+ column: e,
3357
+ totalIn: S.get(t) ?? 0,
3358
+ totalOut: C.get(t) ?? 0
3359
+ }), r += s + 8;
3360
+ });
3361
+ }
3362
+ let O = new Map(D.map((e) => [e.id, e])), k = /* @__PURE__ */ new Map(), A = /* @__PURE__ */ new Map(), j = [], M = c.slice().sort((e, t) => t.value - e.value);
3363
+ for (let e of M) {
3364
+ let t = O.get(e.source), n = O.get(e.target);
3365
+ if (!t || !n) continue;
3366
+ let r = Math.max(1, e.value * E), i = t.y + (A.get(t.id) ?? 0) + r / 2, a = n.y + (k.get(n.id) ?? 0) + r / 2;
3367
+ A.set(t.id, (A.get(t.id) ?? 0) + r), k.set(n.id, (k.get(n.id) ?? 0) + r);
3368
+ let o = t.x + t.w, s = n.x, c = (o + s) / 2, l = `M${o},${i} C${c},${i} ${c},${a} ${s},${a}`;
3369
+ j.push({
3370
+ path: l,
3371
+ color: e.color ?? t.color,
3372
+ width: r,
3373
+ source: e.source,
3374
+ target: e.target,
3375
+ value: e.value
3376
+ });
3377
+ }
3378
+ return {
3379
+ ...i,
3380
+ plot: p,
3381
+ sankeyNodes: D,
3382
+ sankeyLinks: j
3383
+ };
3384
+ }
3385
+ //#endregion
3386
+ //#region src/chart-grid.ts
3387
+ function yt(e) {
3388
+ let { spec: n, width: r, height: i, theme: a, empty: o, frame: s } = e, c = n.calendarValues ?? [];
3389
+ if (!c.length && !n.calendarStart) return { ...o };
3390
+ let l = /* @__PURE__ */ new Map(), u = Infinity, d = -Infinity;
3391
+ for (let e of c) l.set(e.date, e.value), Number.isFinite(e.value) && (e.value < u && (u = e.value), e.value > d && (d = e.value));
3392
+ u === Infinity && (u = 0, d = 1), u === d && (d = u + 1);
3393
+ let m = f(n.colorScale, u, d, a), h = (e) => p(m, (e - u) / (d - u)), g = c.map((e) => e.date).sort(), _ = n.calendarStart ?? g[0] ?? "2026-01-01", v = n.calendarEnd ?? g[g.length - 1] ?? _, y = /* @__PURE__ */ new Date(_ + "T00:00:00Z"), b = /* @__PURE__ */ new Date(v + "T00:00:00Z");
3394
+ y.setUTCDate(y.getUTCDate() - y.getUTCDay()), b.setUTCDate(b.getUTCDate() + (6 - b.getUTCDay()));
3395
+ let x = Math.round((b.getTime() - y.getTime()) / 864e5) + 1, S = Math.ceil(x / 7), C = 26 + s.top, w = 16 + s.bottom, T = Math.max(1, r - 36 - 80), E = Math.max(1, i - C - w), D = Math.floor(T / S), O = Math.floor(E / 7), k = Math.max(6, Math.min(D, O)), A = {
3396
+ x: 36,
3397
+ y: C,
3398
+ w: k * S,
3399
+ h: k * 7
3400
+ }, j = [], M = -1, N = [];
3401
+ for (let e = 0; e < x; e += 1) {
3402
+ let t = new Date(y.getTime() + e * 864e5), n = Math.floor(e / 7), r = e % 7, i = t.toISOString().slice(0, 10), a = l.has(i), o = l.get(i) ?? 0;
3403
+ j.push({
3404
+ x: 36 + n * k,
3405
+ y: C + r * k,
3406
+ size: k,
3407
+ date: i,
3408
+ value: o,
3409
+ defined: a,
3410
+ color: a ? h(o) : "transparent"
3411
+ }), t.getUTCDate() === 1 && t.getUTCMonth() !== M && i >= _ && i <= v && (M = t.getUTCMonth(), N.push({
3412
+ label: t.toLocaleDateString(void 0, { month: "short" }),
3413
+ x: 36 + n * k
3414
+ }));
3415
+ }
3416
+ let P = Array.from({ length: 5 }, (e, r) => {
3417
+ let i = r / 4, a = bt(u, d, i);
3418
+ return {
3419
+ value: a,
3420
+ color: h(a),
3421
+ label: t(a, n.valueFormat, n)
3422
+ };
3423
+ });
3424
+ return {
3425
+ ...o,
3426
+ plot: A,
3427
+ calendarCells: j,
3428
+ calendarMonthTicks: N,
3429
+ calendarLegend: P
3430
+ };
3431
+ }
3432
+ function bt(e, t, n) {
3433
+ let r = e + (t - e) * n, i = Math.abs(t - e) / 4;
3434
+ if (!(i > 0)) return r;
3435
+ let a = i >= 1 ? 0 : Math.min(6, Math.ceil(-Math.log10(i)) + 1);
3436
+ return Number(r.toFixed(a));
3437
+ }
3438
+ function xt(e) {
3439
+ let { spec: n, series: r, width: i, height: a, theme: s, empty: c, frame: l } = e;
3440
+ if (!r.length || !n.categories.length) return {
3441
+ ...c,
3442
+ plot: {
3443
+ x: 0,
3444
+ y: 0,
3445
+ w: i,
3446
+ h: a
3447
+ }
3448
+ };
3449
+ let u = r.reduce((e, t) => Math.max(e, t.label.length), 0), d = 12 + Math.min(180, Math.max(60, u * 7)), m = 12 + l.top, g = 32 + l.bottom, _ = Math.max(1, i - d - 64), v = Math.max(1, a - m - g), y = {
3450
+ x: d,
3451
+ y: m,
3452
+ w: _,
3453
+ h: v
3454
+ }, b = _ / n.categories.length, x = v / r.length, S = Infinity, C = -Infinity;
3455
+ for (let e of r) for (let t of e.values) Number.isFinite(t) && (t < S && (S = t), t > C && (C = t));
3456
+ S === Infinity && (S = 0, C = 1), S === C && (C = S + 1);
3457
+ let w = f(n.colorScale, S, C, s), T = (e) => p(w, (e - S) / (C - S)), E = [];
3458
+ r.forEach((e, t) => {
3459
+ e.values.forEach((r, i) => {
3460
+ if (!Number.isFinite(r)) return;
3461
+ let a = T(r);
3462
+ E.push({
3463
+ x: o(d + b * i),
3464
+ y: o(m + x * t),
3465
+ w: o(b),
3466
+ h: o(x),
3467
+ color: a,
3468
+ textColor: h(a),
3469
+ value: r,
3470
+ rowLabel: e.label,
3471
+ colLabel: n.categories[i] ?? ""
3472
+ });
3473
+ });
3474
+ });
3475
+ let O = r.map((e, t) => ({
3476
+ value: t,
3477
+ y: o(m + x * t + x / 2),
3478
+ label: e.label
3479
+ })), k = D(n.categories, (e) => o(d + b * e + b / 2), b, !1), A = Array.from({ length: 5 }, (e, r) => {
3480
+ let i = r / 4, a = bt(S, C, i);
3481
+ return {
3482
+ value: a,
3483
+ color: T(a),
3484
+ label: t(a, n.valueFormat, n)
3485
+ };
3486
+ });
3487
+ return {
3488
+ ...c,
3489
+ plot: y,
3490
+ heatmapCells: E,
3491
+ heatmapRowTicks: O,
3492
+ heatmapColTicks: k,
3493
+ heatmapLegend: A
3494
+ };
3495
+ }
3496
+ //#endregion
3497
+ //#region src/chart-hierarchy.ts
3498
+ function St(e) {
3499
+ let { spec: t, width: n, height: r, empty: i, frame: s } = e, c = t.treemap ?? t.tree;
3500
+ if (!c) return { ...i };
3501
+ let l = 4 + s.top, u = 4 + s.bottom, d = Math.max(1, n - 4 - 4), f = Math.max(1, r - l - u), p = {
3502
+ x: 4,
3503
+ y: l,
3504
+ w: d,
3505
+ h: f
3506
+ }, m = t.palette ?? a, g = [];
3507
+ function _(e) {
3508
+ return e.children?.length ? e.children.reduce((e, t) => e + _(t), 0) : Math.max(0, e.value ?? 0);
3509
+ }
3510
+ function v(e, t, n, r, i, a) {
3511
+ if (!e.length || r <= 0 || i <= 0) return;
3512
+ let s = e.map(_), c = s.reduce((e, t) => e + t, 0);
3513
+ if (c <= 0) return;
3514
+ let l = e.map((e, t) => ({
3515
+ node: e,
3516
+ value: s[t]
3517
+ })).sort((e, t) => t.value - e.value), u = t, d = n, f = r, p = i, y = c, b = [], x = (e, t, n, r) => {
3518
+ if (n <= 0) return Infinity;
3519
+ let i = n * r / t, a = 0;
3520
+ for (let n of e) {
3521
+ let e = n * r / i, o = Math.max(t / e, e / t);
3522
+ o > a && (a = o);
3523
+ }
3524
+ return a;
3525
+ };
3526
+ function S() {
3527
+ if (!b.length) return;
3528
+ let e = b.reduce((e, t) => e + t.value, 0), t = f * p / y, n = f >= p, r = n ? p : f, i = e * t / r, s = 0;
3529
+ for (let e of b) {
3530
+ let r = e.value * t / i, c = n ? u : u + s, l = n ? d + s : d, f = n ? i : r, p = n ? r : i, _ = e.node.color ?? m[(a + g.length) % m.length];
3531
+ if (e.node.children?.length) {
3532
+ g.push({
3533
+ x: o(c),
3534
+ y: o(l),
3535
+ w: o(f),
3536
+ h: o(p),
3537
+ color: _,
3538
+ textColor: h(_),
3539
+ name: e.node.name,
3540
+ value: e.value,
3541
+ depth: a
3542
+ });
3543
+ let t = Math.min(18, p * .25);
3544
+ v(e.node.children, c + 1, l + t, f - 2, p - t - 1, a + 1);
3545
+ } else g.push({
3546
+ x: o(c),
3547
+ y: o(l),
3548
+ w: o(f),
3549
+ h: o(p),
3550
+ color: _,
3551
+ textColor: h(_),
3552
+ name: e.node.name,
3553
+ value: e.value,
3554
+ depth: a
3555
+ });
3556
+ s += r;
3557
+ }
3558
+ n ? (u += i, f -= i) : (d += i, p -= i), y -= e, b = [];
3559
+ }
3560
+ for (let e of l) {
3561
+ let t = f * p / y, n = Math.min(f, p), 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);
3562
+ b.length && a > i && S(), b.push(e);
3563
+ }
3564
+ S();
3565
+ }
3566
+ return v(c.children ?? [c], 4, l, d, f, 0), {
3567
+ ...i,
3568
+ plot: p,
3569
+ treemapCells: g
3570
+ };
3571
+ }
3572
+ function Ct(e, t) {
3573
+ let n = e;
3574
+ for (let e of t) if (n = n?.children?.find((t) => t.name === e), !n) return null;
3575
+ return n ?? null;
3576
+ }
3577
+ function wt(e, t) {
3578
+ let n = (e, r) => {
3579
+ for (let i of e.children ?? []) {
3580
+ let e = [...r, i.name];
3581
+ if (i.name === t) return e;
3582
+ let a = n(i, e);
3583
+ if (a) return a;
3584
+ }
3585
+ return null;
3586
+ };
3587
+ return n(e, []);
3588
+ }
3589
+ //#endregion
3590
+ //#region src/chart-pivot.ts
3591
+ var Tt = /* @__PURE__ */ new Set([
3592
+ "scatter",
3593
+ "gauge",
3594
+ "boxplot",
3595
+ "histogram",
3596
+ "range-bar",
3597
+ "range-area",
3598
+ "dumbbell",
3599
+ "bullet",
3600
+ "candlestick",
3601
+ "ohlc"
3602
+ ]);
3603
+ function Et(e) {
3604
+ return !e || Tt.has(e) ? "bar" : e;
3605
+ }
3606
+ function Dt(e, t, n) {
3607
+ let r = e[e.length - 1];
3608
+ return r && t.find((e) => n(e.id) === r)?.id || null;
3609
+ }
3610
+ function Ot(e, t, n) {
3611
+ let r = [], i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map();
3612
+ for (let t of e) {
3613
+ let e = i.get(t.category);
3614
+ e === void 0 && (e = r.length, i.set(t.category, e), r.push(t.category));
3615
+ let o = n ? t.series ?? "" : "value", s = a.get(o);
3616
+ s || (s = [], a.set(o, s)), s[e] = (s[e] ?? 0) + t.value;
3617
+ }
3618
+ return {
3619
+ type: t,
3620
+ categories: r,
3621
+ series: [...a.entries()].map(([e, t]) => ({
3622
+ label: e,
3623
+ values: r.map((e, n) => t[n] ?? 0)
3624
+ }))
3625
+ };
3626
+ }
3627
+ function kt(e) {
3628
+ if (!e) return {};
3629
+ let t = Array.isArray(e.locales) ? e.locales[0] : e.locales, n = t ? { locale: t } : {};
3630
+ return e.type === "number" ? {
3631
+ ...n,
3632
+ valueFormat: "number"
3633
+ } : e.type === "currency" ? {
3634
+ ...n,
3635
+ valueFormat: "currency",
3636
+ currency: e.currency ?? "USD"
3637
+ } : e.type === "percent" ? e.valueIsPercentPoints ? {
3638
+ ...n,
3639
+ yAxis: { formatter: (e) => `${e}%` }
3640
+ } : {
3641
+ ...n,
3642
+ valueFormat: "percent"
3643
+ } : {};
3644
+ }
3645
+ function At(e, t = {}) {
3646
+ let n = Et(t.type), r = e.rows.filter((e) => e.__pivotKind === "leaf");
3647
+ r.length || (r = e.rows.filter((e) => e.__pivotKind === "grandTotal")), r.length || (r = e.rows.slice()), t.maxCategories && r.length > t.maxCategories && (r = r.slice(0, t.maxCategories));
3648
+ let i = new Map(e.rows.map((e) => [e.__pivotId, e])), a = (e) => String(e.__pivotLabel ?? "").trim() || "(blank)", o = r.map(a), s = (e) => e.__pivotParentId ? i.get(e.__pivotParentId) : void 0, c = r.length > 0 && r.every((e) => s(e) !== void 0), l;
3649
+ if (c) {
3650
+ l = [];
3651
+ let e;
3652
+ for (let t of r) {
3653
+ let n = t.__pivotParentId, r = l[l.length - 1];
3654
+ r && n === e ? r.span += 1 : (l.push({
3655
+ label: a(s(t)),
3656
+ span: 1
3657
+ }), e = n);
3658
+ }
3659
+ }
3660
+ let u = [], d = (e, n) => {
3661
+ for (let r of e ?? []) !r || r.id === "__pivotRowHeader" || !t.includeTotals && typeof r.id == "string" && r.id.startsWith("pv_group__grand") || (Array.isArray(r.columns) ? d(r.columns, [...n, String(r.header ?? "")]) : typeof r.id == "string" && u.push({
3662
+ id: r.id,
3663
+ path: n,
3664
+ header: String(r.header ?? "")
3665
+ }));
3666
+ };
3667
+ d(e.columns, []);
3668
+ let f = t.includeTotals ? u : u.filter((e) => !e.id.includes("__total")), p = new Set(f.map((e) => e.header)), m = f.map((e) => ({
3669
+ label: e.path.length === 0 ? e.header : p.size > 1 ? [...e.path, e.header].join(" · ") : e.path.join(" · "),
3670
+ values: r.map((t) => {
3671
+ let n = t[e.id];
3672
+ return n == null || n === "" ? NaN : typeof n == "number" ? n : Number(n);
3673
+ })
3674
+ })), h = p.size === 1 && f.length ? f[0].header : "", g = t.yAxisTitle === void 0 ? h : t.yAxisTitle, _ = (t.measures ?? []).map((e) => e.format), v = _[0] && _.every((e) => e && JSON.stringify(e) === JSON.stringify(_[0])) ? _[0] : void 0, y = kt(t.format ?? v);
3675
+ return {
3676
+ type: n,
3677
+ categories: o,
3678
+ series: m,
3679
+ ...l && l.length > 1 ? { categoryGroups: l } : {},
3680
+ ...t.stacked || t.stacked100 ? { stacked: !0 } : {},
3681
+ ...t.stacked100 ? { stacked100: !0 } : {},
3682
+ ...t.palette ? { palette: t.palette } : {},
3683
+ ...y,
3684
+ ...g ? { yAxis: {
3685
+ ...y.yAxis,
3686
+ title: g
3687
+ } } : {}
3688
+ };
3689
+ }
3690
+ //#endregion
3691
+ //#region src/chart.ts
3692
+ var jt = /* @__PURE__ */ e({
3693
+ CHART_RESPONSIVE_PRESETS: () => Wt,
3694
+ DEFAULT_PALETTE: () => a,
3695
+ PER_CATEGORY_SERIES_KEYS: () => de,
3696
+ PER_CATEGORY_SPEC_KEYS: () => fe,
3697
+ applyChartFormat: () => Gt,
3698
+ arcPath: () => Z,
3699
+ atr: () => xe,
3700
+ binValues: () => re,
3701
+ bollingerBands: () => he,
3702
+ boxStats: () => k,
3703
+ bucketStart: () => ne,
3704
+ bucketsToChartSpec: () => Ot,
3705
+ buildChart: () => Ft,
3706
+ buildLinePath: () => Re,
3707
+ chartScales: () => ae,
3708
+ chartStyleVars: () => Mt,
3709
+ computeOverlay: () => we,
3710
+ computeOverlayFit: () => Te,
3711
+ decimateSpec: () => Y,
3712
+ exponentialFit: () => L,
3713
+ exponentialMovingAverage: () => B,
3714
+ formatChartValue: () => t,
3715
+ guessOhlcColumns: () => Pe,
3716
+ heikinAshi: () => Me,
3717
+ indicatorPane: () => je,
3718
+ layoutDataLabels: () => Ye,
3719
+ linearFit: () => I,
3720
+ linearTrend: () => i,
3721
+ logarithmicFit: () => R,
3722
+ lttb: () => q,
3723
+ macd: () => _e,
3724
+ markerPath: () => Ke,
3725
+ matchResponsiveRules: () => Nt,
3726
+ minMaxIndices: () => J,
3727
+ niceLogScale: () => g,
3728
+ niceScale: () => y,
3729
+ obv: () => Ce,
3730
+ ohlcDirectOptions: () => Fe,
3731
+ ordinalDateTicks: () => C,
3732
+ overlayName: () => De,
3733
+ paretoSpec: () => Rt,
3734
+ pearson: () => n,
3735
+ percentile: () => U,
3736
+ pickCategories: () => K,
3737
+ pickContrastText: () => h,
3738
+ pivotChartType: () => Et,
3739
+ pivotFilterColumn: () => Dt,
3740
+ pivotResultToChartSpec: () => At,
3741
+ polynomialFit: () => F,
3742
+ powerFit: () => ee,
3743
+ rSquared: () => M,
3744
+ reduceValues: () => H,
3745
+ regressionFit: () => Ee,
3746
+ resampleOhlc: () => Ne,
3747
+ resolveResponsive: () => Pt,
3748
+ rowsToBoxSpec: () => qt,
3749
+ rowsToChartSpec: () => Lt,
3750
+ rowsToDirectSpec: () => Kt,
3751
+ rowsToGaugeSpec: () => Yt,
3752
+ rowsToHistogramSpec: () => zt,
3753
+ rowsToOhlcSpec: () => Le,
3754
+ rowsToRangeSpec: () => Bt,
3755
+ rowsToScatterSpec: () => Jt,
3756
+ rsi: () => ge,
3757
+ sampleGradient: () => p,
3758
+ simpleMovingAverage: () => z,
3759
+ sliceChartWindow: () => It,
3760
+ specToCalendar: () => Ht,
3761
+ specToSankey: () => Ut,
3762
+ specToTreemap: () => Vt,
3763
+ splitPanelIndicators: () => Ie,
3764
+ stochastic: () => Se,
3765
+ streamBaseline: () => We,
3766
+ vwap: () => ye,
3767
+ wma: () => me
3768
+ });
3769
+ function Mt(e) {
3770
+ if (!e) return "";
3771
+ let t = [];
3772
+ return e.background && t.push(`--sg-chart-bg:${e.background}`, `--sg-bg:${e.background}`), e.textColor && t.push(`--sg-fg:${e.textColor}`, `--sg-muted:${e.textColor}`), e.gridColor && t.push(`--sg-border:${e.gridColor}`), e.fontSize && Number.isFinite(e.fontSize) && e.fontSize > 0 && t.push(`--sg-chart-font-scale:${Math.round(e.fontSize / 12 * 1e3) / 1e3}`), e.fontFamily && t.push(`font-family:${e.fontFamily}`), t.join(";");
3773
+ }
3774
+ function Nt(e, t, n) {
3775
+ return e?.length ? e.filter((e) => (e.maxWidth == null || t <= e.maxWidth) && (e.minWidth == null || t >= e.minWidth) && (e.maxHeight == null || n <= e.maxHeight)) : [];
3776
+ }
3777
+ function Pt(e, t, n) {
3778
+ let r = Nt(e.responsive, t, n);
3779
+ if (!r.length) return e;
3780
+ let i = e;
3781
+ for (let e of r) {
3782
+ if (!e.spec) continue;
3783
+ let { width: t, height: n, responsive: r, ...a } = e.spec, o = {
3784
+ ...i,
3785
+ ...a
3786
+ };
3787
+ for (let e of [
3788
+ "xAxis",
3789
+ "yAxis",
3790
+ "y2Axis"
3791
+ ]) a[e] && (o[e] = {
3792
+ ...i[e] ?? {},
3793
+ ...a[e]
3794
+ });
3795
+ i = o;
3796
+ }
3797
+ return i;
3798
+ }
3799
+ function Ft(e, t = "light") {
3800
+ let n = e.width ?? 520, r = e.height ?? 300, i = Pt(e, n, r);
3801
+ if (i.type === "pareto") return Ft(Rt(i), t);
3802
+ let o = i.palette ?? a, s = !!(i.stacked || i.stacked100), c = i.series.map((e, t) => ({
3803
+ ...e,
3804
+ values: (e.nullAs ?? i.nullAs) === "zero" ? e.values.map((e) => Number.isFinite(e) ? e : 0) : e.values,
3805
+ color: e.color ?? o[t % o.length],
3806
+ kind: W(e, i.type),
3807
+ axis: e.axis ?? "left"
3808
+ })), l = le(i, n, r), u = G(i), d = c.map((e) => ({
3809
+ label: e.label,
3810
+ color: e.color
3811
+ })), f = {
3812
+ spec: i,
3813
+ theme: t,
3814
+ width: n,
3815
+ height: r,
3816
+ palette: o,
3817
+ stacked: s,
3818
+ series: c,
3819
+ legend: d,
3820
+ empty: {
3821
+ type: i.type,
3822
+ width: n,
3823
+ height: r,
3824
+ plot: {
3825
+ x: 0,
3826
+ y: 0,
3827
+ w: n,
3828
+ h: r
3829
+ },
3830
+ axes: null,
3831
+ frame: l,
3832
+ grid: {
3833
+ x: !1,
3834
+ y: !1
3835
+ },
3836
+ referenceBands: [],
3837
+ bars: [],
3838
+ candles: [],
3839
+ boxes: [],
3840
+ errorBars: [],
3841
+ stems: [],
3842
+ arcs: [],
3843
+ chordRibbons: [],
3844
+ bullets: [],
3845
+ drawings: [],
3846
+ seriesLabels: [],
3847
+ polarAxes: [],
3848
+ polarRings: [],
3849
+ lines: [],
3850
+ slices: [],
3851
+ yTicks: [],
3852
+ y2Ticks: [],
3853
+ hasRightAxis: !1,
3854
+ xTicks: [],
3855
+ categoryGroupTicks: [],
3856
+ xLabelRotated: !1,
3857
+ xLabelAngle: 0,
3858
+ legend: d,
3859
+ donut: null,
3860
+ referenceLines: [],
3861
+ scatterPoints: [],
3862
+ orientation: "vertical",
3863
+ valueTicks: [],
3864
+ catTicks: [],
3865
+ referenceLinesV: [],
3866
+ overlays: [],
3867
+ annotations: [],
3868
+ heatmapCells: [],
3869
+ heatmapRowTicks: [],
3870
+ heatmapColTicks: [],
3871
+ heatmapLegend: [],
3872
+ funnelSegments: [],
3873
+ radarRings: [],
3874
+ radarAxes: [],
3875
+ radarSeries: [],
3876
+ radarCenter: null,
3877
+ treemapCells: [],
3878
+ calendarCells: [],
3879
+ calendarMonthTicks: [],
3880
+ calendarLegend: [],
3881
+ gauge: null,
3882
+ sankeyNodes: [],
3883
+ sankeyLinks: []
3884
+ },
3885
+ frame: l,
3886
+ axes: u
3887
+ };
3888
+ return i.type === "waterfall" ? gt(f) : i.type === "funnel" ? _t(f) : i.type === "radar" ? ot(f) : i.type === "calendar" ? yt(f) : i.type === "gauge" ? st(f) : i.type === "treemap" ? St(f) : i.type === "sankey" ? vt(f) : i.type === "heatmap" ? xt(f) : i.type === "pie" ? ct(f) : i.type === "scatter" ? et(f) : i.type === "sunburst" ? ft(f) : i.type === "radial-bar" ? pt(f) : i.type === "radial-column" || i.type === "nightingale" ? mt(f) : i.type === "chord" ? ht(f) : i.type === "bullet" ? at(f) : i.orientation === "horizontal" && i.type !== "histogram" && c.length > 0 && c.every((e) => e.kind === "bar") ? tt(f) : nt(f);
3889
+ }
3890
+ function It(e, t, n) {
3891
+ let r = Math.max(0, t), i = Math.min(e.categories.length - 1, n);
3892
+ if (i < r) return {
3893
+ ...e,
3894
+ categories: [],
3895
+ series: e.series.map((e) => ({
3896
+ ...e,
3897
+ values: []
3898
+ }))
3899
+ };
3900
+ let a = Array(i - r + 1);
3901
+ for (let e = r; e <= i; e += 1) a[e - r] = e;
3902
+ return K(e, a);
3903
+ }
3904
+ function Lt(e, t) {
3905
+ let n = t.reduce ?? "sum", r = V(n), i = Array.isArray(t.value) ? t.value : [t.value], a = (e) => r ? H(e.samples, n) : n === "count" ? e.count : n === "avg" ? e.count ? e.sum / e.count : 0 : e.sum, o = [], s = /* @__PURE__ */ new Map(), c = (e) => {
3906
+ let t = s.get(e);
3907
+ return t === void 0 && (t = o.length, s.set(e, t), o.push(e)), t;
3908
+ }, l = /* @__PURE__ */ new Map(), u = (e) => {
3909
+ let t = l.get(e);
3910
+ return t || (t = [], l.set(e, t)), t;
3911
+ }, d = (e, t, n) => {
3912
+ e.sum += t, e.count += 1, r && e.samples.push(t), n !== void 0 && e.rowIds.push(n);
3913
+ }, f = () => ({
3914
+ sum: 0,
3915
+ count: 0,
3916
+ rowIds: [],
3917
+ samples: []
3918
+ }), p = t.idField !== void 0;
3919
+ for (let n of e) {
3920
+ let e = n[t.category], r = t.bucket ? ne(e, t.bucket) : String(e ?? "");
3921
+ if (t.bucket && !r) continue;
3922
+ let a = c(r), o = p ? n[t.idField] : void 0;
3923
+ if (t.series) {
3924
+ let e = u(String(n[t.series] ?? "")), r = Number(n[i[0]]), s = e[a] ??= f();
3925
+ Number.isFinite(r) && d(s, r, o);
3926
+ } else for (let e of i) {
3927
+ let t = u(e), r = Number(n[e]), i = t[a] ??= f();
3928
+ Number.isFinite(r) && d(i, r, o);
3929
+ }
3930
+ }
3931
+ let m = [...l.entries()].map(([e, n]) => ({
3932
+ label: t.series ? e : t.seriesLabel && i.length === 1 ? t.seriesLabel : e,
3933
+ values: o.map((e, t) => a(n[t] ?? f())),
3934
+ rowIds: p ? o.map((e, t) => (n[t]?.rowIds ?? []).slice()) : void 0
3935
+ })), h = o.map((e, t) => m.reduce((e, n) => e + (Number.isFinite(n.values[t]) ? n.values[t] : 0), 0)), g = t.sort ?? (t.topN ? "value-desc" : t.bucket ? "category" : "none"), _ = o.map((e, t) => t);
3936
+ g === "value-desc" ? _.sort((e, t) => h[t] - h[e]) : g === "value-asc" ? _.sort((e, t) => h[e] - h[t]) : g === "category" && _.sort((e, t) => o[e].localeCompare(o[t]));
3937
+ let v, y;
3938
+ if (t.topN && _.length > t.topN) {
3939
+ let e = t.otherLabel ?? "Other", n = _.find((t) => o[t] === e), r = _.slice(0, t.topN).filter((e) => e !== n), i = _.filter((e) => !r.includes(e));
3940
+ v = r.map((e) => o[e]).concat(e), y = m.map((e) => ({
3941
+ label: e.label,
3942
+ values: r.map((t) => e.values[t]).concat(i.reduce((t, n) => t + (Number.isFinite(e.values[n]) ? e.values[n] : 0), 0)),
3943
+ rowIds: e.rowIds ? r.map((t) => e.rowIds[t]).concat([i.flatMap((t) => e.rowIds[t] ?? [])]) : void 0
3944
+ }));
3945
+ } else v = _.map((e) => o[e]), y = m.map((e) => ({
3946
+ label: e.label,
3947
+ values: _.map((t) => e.values[t]),
3948
+ rowIds: e.rowIds ? _.map((t) => e.rowIds[t]) : void 0
3949
+ }));
3950
+ return {
3951
+ type: t.type,
3952
+ categories: v,
3953
+ series: y,
3954
+ width: t.width,
3955
+ height: t.height,
3956
+ stacked: t.stacked,
3957
+ stacked100: t.stacked100,
3958
+ palette: t.palette,
3959
+ ...t.bucket ? { xType: "ordinal-time" } : {}
3960
+ };
3961
+ }
3962
+ function Rt(e, t = 80) {
3963
+ let n = e.series[0];
3964
+ if (!n) return {
3965
+ ...e,
3966
+ type: "bar"
3967
+ };
3968
+ let r = K(e, e.categories.map((e, t) => t).sort((e, t) => (n.values[t] ?? 0) - (n.values[e] ?? 0))), i = r.series[0].values.map((e) => Number.isFinite(e) ? Math.max(0, e) : 0), a = i.reduce((e, t) => e + t, 0) || 1, o = 0, s = i.map((e) => (o += e, Math.round(o / a * 1e3) / 10));
3969
+ return {
3970
+ ...r,
3971
+ type: "bar",
3972
+ series: [{
3973
+ ...r.series[0],
3974
+ type: "bar"
3975
+ }, {
3976
+ label: "Cumulative %",
3977
+ values: s,
3978
+ type: "line",
3979
+ axis: "right",
3980
+ marker: "circle",
3981
+ color: r.series[0].overlayColor ?? "#ef4444"
3982
+ }],
3983
+ y2Axis: {
3984
+ min: 0,
3985
+ max: 100,
3986
+ tickInterval: 25,
3987
+ formatter: (e) => `${e}%`,
3988
+ ...e.y2Axis ?? {}
3989
+ },
3990
+ referenceLines: [...e.referenceLines ?? [], ...t > 0 ? [{
3991
+ value: t,
3992
+ axis: "right",
3993
+ label: `${t}%`,
3994
+ dashed: !0
3995
+ }] : []]
3996
+ };
3997
+ }
3998
+ function zt(e, t) {
3999
+ let n = re(e.map((e) => Number(e[t.value])).filter(Number.isFinite), {
4000
+ bins: t.bins,
4001
+ binWidth: t.binWidth,
4002
+ method: t.method,
4003
+ min: t.min,
4004
+ max: t.max
4005
+ }), r = (t.series ? [...new Set(e.map((e) => String(e[t.series] ?? "")))].map((n) => ({
4006
+ label: n,
4007
+ rows: e.filter((e) => String(e[t.series] ?? "") === n)
4008
+ })) : [{
4009
+ label: t.seriesLabel ?? String(t.value),
4010
+ rows: e
4011
+ }]).map((e) => {
4012
+ let r = Array(n.counts.length).fill(0), i = n.edges[0] ?? 0;
4013
+ for (let a of e.rows) {
4014
+ let e = Number(a[t.value]);
4015
+ if (!Number.isFinite(e) || !n.width) continue;
4016
+ let o = Math.floor((e - i) / n.width);
4017
+ o >= r.length && (o = r.length - 1), o < 0 && (o = 0), r[o] = (r[o] ?? 0) + 1;
4018
+ }
4019
+ return {
4020
+ label: e.label,
4021
+ values: r
4022
+ };
4023
+ });
4024
+ return {
4025
+ type: "histogram",
4026
+ categories: n.categories,
4027
+ series: r,
4028
+ binEdges: n.edges,
4029
+ xType: "number",
4030
+ ...t.palette ? { palette: t.palette } : {},
4031
+ ...t.width ? { width: t.width } : {},
4032
+ ...t.height ? { height: t.height } : {}
4033
+ };
4034
+ }
4035
+ function Bt(e, t) {
4036
+ let n = [], r = /* @__PURE__ */ new Set();
4037
+ for (let i of e) {
4038
+ let e = String(i[t.category] ?? "");
4039
+ r.has(e) || (r.add(e), n.push(e));
4040
+ }
4041
+ let i = (t.series ? [...new Set(e.map((e) => String(e[t.series] ?? "")))] : [t.seriesLabel ?? `${String(t.low)} to ${String(t.high)}`]).map((r) => {
4042
+ let i = Array(n.length).fill(NaN), a = Array(n.length).fill(NaN);
4043
+ for (let o of e) {
4044
+ if (t.series && String(o[t.series] ?? "") !== r) continue;
4045
+ let e = n.indexOf(String(o[t.category] ?? "")), s = Number(o[t.low]), c = Number(o[t.high]);
4046
+ e < 0 || !Number.isFinite(s) || !Number.isFinite(c) || (i[e] = Math.min(s, c), a[e] = Math.max(s, c));
4047
+ }
4048
+ return {
4049
+ label: r,
4050
+ values: a,
4051
+ lowValues: i
4052
+ };
4053
+ });
4054
+ return {
4055
+ type: t.type ?? "range-bar",
4056
+ categories: n,
4057
+ series: i,
4058
+ ...t.palette ? { palette: t.palette } : {},
4059
+ ...t.width ? { width: t.width } : {},
4060
+ ...t.height ? { height: t.height } : {}
4061
+ };
4062
+ }
4063
+ function Vt(e, t = "Total") {
4064
+ let n = (e) => typeof e == "number" && Number.isFinite(e) && e > 0 ? e : 0;
4065
+ if (e.series.length <= 1) {
4066
+ let r = e.series[0];
4067
+ return {
4068
+ name: t,
4069
+ children: e.categories.map((e, t) => ({
4070
+ name: e,
4071
+ value: n(r?.values[t])
4072
+ })).filter((e) => e.value > 0)
4073
+ };
4074
+ }
4075
+ return {
4076
+ name: t,
4077
+ children: e.categories.map((t, r) => ({
4078
+ name: t,
4079
+ children: e.series.map((e) => ({
4080
+ name: e.label,
4081
+ value: n(e.values[r])
4082
+ })).filter((e) => e.value > 0)
4083
+ })).filter((e) => e.children.length > 0)
4084
+ };
4085
+ }
4086
+ function Ht(e) {
4087
+ let t = e.series[0], n = [];
4088
+ return e.categories.forEach((e, r) => {
4089
+ let i = Date.parse(e);
4090
+ if (!Number.isFinite(i)) return;
4091
+ let a = t?.values[r];
4092
+ typeof a != "number" || !Number.isFinite(a) || n.push({
4093
+ date: new Date(i).toISOString().slice(0, 10),
4094
+ value: a
4095
+ });
4096
+ }), n;
4097
+ }
4098
+ function Ut(e) {
4099
+ let t = [], n = /* @__PURE__ */ new Set();
4100
+ return e.categories.forEach((r, i) => {
4101
+ for (let a of e.series) {
4102
+ let e = a.values[i];
4103
+ if (typeof e != "number" || !Number.isFinite(e) || e <= 0) continue;
4104
+ let o = `from:${r}`, s = `to:${a.label}`;
4105
+ o !== s && (n.add(o), n.add(s), t.push({
4106
+ source: o,
4107
+ target: s,
4108
+ value: e
4109
+ }));
4110
+ }
4111
+ }), {
4112
+ nodes: [...n].map((e) => ({
4113
+ id: e,
4114
+ label: e.slice(e.indexOf(":") + 1)
4115
+ })),
4116
+ links: t
4117
+ };
4118
+ }
4119
+ var Wt = { compact: (e) => ({
4120
+ maxWidth: e,
4121
+ spec: {
4122
+ seriesLabels: !1,
4123
+ dataLabels: { show: !1 },
4124
+ xAxis: { labelRotation: 90 }
4125
+ },
4126
+ legend: !1
4127
+ }) };
4128
+ function Gt(e, t) {
4129
+ if (!t) return e;
4130
+ let n = { ...e };
4131
+ t.title !== void 0 && (n.title = t.title || void 0), t.subtitle !== void 0 && (n.subtitle = t.subtitle || void 0), t.caption !== void 0 && (n.caption = t.caption || void 0), t.palette && (n.palette = t.palette), t.seriesLabels !== void 0 && (n.seriesLabels = t.seriesLabels), t.style && (n.style = {
4132
+ ...e.style,
4133
+ ...t.style
4134
+ }), t.compactBelow != null && t.compactBelow > 0 && (n.responsive = [...e.responsive ?? [], Wt.compact(t.compactBelow)]);
4135
+ let r = (e, t) => {
4136
+ if (!t) return e;
4137
+ let n = { ...e };
4138
+ return t.min !== void 0 && (t.min === null ? delete n.min : n.min = t.min), t.max !== void 0 && (t.max === null ? delete n.max : n.max = t.max), t.title !== void 0 && (n.title = t.title || void 0), t.gridLines !== void 0 && (n.gridLines = t.gridLines), t.format !== void 0 && (n.format = t.format), n;
4139
+ };
4140
+ if (t.xAxis) {
4141
+ let e = { ...n.xAxis };
4142
+ t.xAxis.title !== void 0 && (e.title = t.xAxis.title || void 0), t.xAxis.gridLines !== void 0 && (e.gridLines = t.xAxis.gridLines), t.xAxis.labelRotation !== void 0 && (e.labelRotation = t.xAxis.labelRotation), n.xAxis = e;
4143
+ }
4144
+ return t.yAxis && (n.yAxis = r(n.yAxis, t.yAxis)), t.y2Axis && (n.y2Axis = r(n.y2Axis, t.y2Axis)), t.series && (n.series = e.series.map((e) => {
4145
+ let n = t.series[e.label];
4146
+ if (!n) return e;
4147
+ let r = { ...e };
4148
+ return n.color && (r.color = n.color), n.type && (r.type = n.type), n.axis && (r.axis = n.axis), n.marker && (r.marker = n.marker), n.strokeWidth !== void 0 && (r.strokeWidth = n.strokeWidth), n.dash !== void 0 && (r.dash = n.dash || void 0), n.smooth !== void 0 && (r.smooth = n.smooth), n.stack !== void 0 && (r.stack = n.stack || void 0), r;
4149
+ })), n;
4150
+ }
4151
+ function Kt(e, t, n) {
4152
+ let r = n.category, i = n.value, a = n.series;
4153
+ if (e === "candlestick" || e === "ohlc") {
4154
+ let i = n.ohlc;
4155
+ if (!r || !i) return null;
4156
+ let a = (e) => e;
4157
+ return Le(t, {
4158
+ date: r,
4159
+ open: a(i.open),
4160
+ high: a(i.high),
4161
+ low: a(i.low),
4162
+ close: a(i.close),
4163
+ ...i.volume ? { volume: a(i.volume) } : {},
4164
+ ...i.bucket ? { bucket: i.bucket } : {},
4165
+ ...i.candleStyle ? { candleStyle: i.candleStyle } : {},
4166
+ ...i.lastPriceLine ? { lastPriceLine: !0 } : {},
4167
+ type: e
4168
+ });
4169
+ }
4170
+ if (e === "scatter") {
4171
+ let e = n.value2;
4172
+ return !i || !e ? null : Jt(t, {
4173
+ x: i,
4174
+ y: e,
4175
+ ...a ? { series: a } : {},
4176
+ ...n.palette ? { palette: n.palette } : {}
4177
+ });
4178
+ }
4179
+ if (e === "gauge") return i ? Yt(t, {
4180
+ value: i,
4181
+ ...n.reduce ? { reduce: n.reduce } : {}
4182
+ }) : null;
4183
+ if (e === "boxplot") {
4184
+ if (!r || !i) return null;
4185
+ let e = qt(t, {
4186
+ category: r,
4187
+ value: i,
4188
+ ...a ? { series: a } : {}
4189
+ });
4190
+ return n.palette && (e.palette = n.palette), e;
4191
+ }
4192
+ if (e === "histogram") return i ? zt(t, {
4193
+ value: i,
4194
+ ...a ? { series: a } : {},
4195
+ ...n.bins ? { bins: n.bins } : {},
4196
+ ...n.palette ? { palette: n.palette } : {}
4197
+ }) : null;
4198
+ if (e === "range-bar" || e === "range-area" || e === "dumbbell") {
4199
+ let o = n.value2;
4200
+ if (!r || !i || !o) return null;
4201
+ let s = Lt(t, {
4202
+ type: "bar",
4203
+ category: r,
4204
+ value: i,
4205
+ ...a ? { series: a } : {},
4206
+ reduce: n.reduce ?? "sum"
4207
+ }), c = Lt(t, {
4208
+ type: "bar",
4209
+ category: r,
4210
+ value: o,
4211
+ ...a ? { series: a } : {},
4212
+ reduce: n.reduce ?? "sum"
4213
+ });
4214
+ return {
4215
+ type: e,
4216
+ categories: c.categories,
4217
+ series: c.series.map((e, t) => ({
4218
+ ...e,
4219
+ label: a ? e.label : `${String(i)} to ${String(o)}`,
4220
+ lowValues: s.series[t]?.values.map((t, n) => Math.min(t, e.values[n] ?? t)) ?? [],
4221
+ values: e.values.map((e, n) => Math.max(e, s.series[t]?.values[n] ?? e))
4222
+ })),
4223
+ ...n.palette ? { palette: n.palette } : {}
4224
+ };
4225
+ }
4226
+ if (e === "bullet") {
4227
+ if (!r || !i) return null;
4228
+ let e = Lt(t, {
4229
+ type: "bar",
4230
+ category: r,
4231
+ value: i,
4232
+ reduce: n.reduce ?? "sum"
4233
+ }), a = n.value2, o = a ? Lt(t, {
4234
+ type: "bar",
4235
+ category: r,
4236
+ value: a,
4237
+ reduce: n.reduce ?? "sum"
4238
+ }) : null;
4239
+ return {
4240
+ type: "bullet",
4241
+ categories: e.categories,
4242
+ series: [{
4243
+ ...e.series[0],
4244
+ ...o ? { targets: o.series[0].values } : {}
4245
+ }],
4246
+ ...n.palette ? { palette: n.palette } : {}
4247
+ };
4248
+ }
4249
+ return null;
4250
+ }
4251
+ function qt(e, t) {
4252
+ let n = [], r = /* @__PURE__ */ new Set();
4253
+ for (let i of e) {
4254
+ let e = String(i[t.category] ?? "");
4255
+ r.has(e) || (r.add(e), n.push(e));
4256
+ }
4257
+ let i = [], a = /* @__PURE__ */ new Set();
4258
+ if (t.series) for (let n of e) {
4259
+ let e = String(n[t.series] ?? "");
4260
+ a.has(e) || (a.add(e), i.push(e));
4261
+ }
4262
+ else i.push(t.seriesLabel ?? String(t.value));
4263
+ return {
4264
+ type: "boxplot",
4265
+ categories: n,
4266
+ series: i.map((r) => {
4267
+ let i = n.map((n) => {
4268
+ let i = [];
4269
+ for (let a of e) {
4270
+ if (String(a[t.category] ?? "") !== n || t.series && String(a[t.series] ?? "") !== r) continue;
4271
+ let e = a[t.value];
4272
+ if (e == null || e === "") continue;
4273
+ let o = Number(e);
4274
+ Number.isFinite(o) && i.push(o);
4275
+ }
4276
+ return k(i, t.whisker);
4277
+ });
4278
+ return {
4279
+ label: r,
4280
+ values: i.map((e) => e ? e.median : NaN),
4281
+ boxes: i
4282
+ };
4283
+ }),
4284
+ ...t.width ? { width: t.width } : {},
4285
+ ...t.height ? { height: t.height } : {}
4286
+ };
4287
+ }
4288
+ function Jt(e, t) {
4289
+ let n = /* @__PURE__ */ new Map();
4290
+ for (let r of e) {
4291
+ let e = Number(r[t.x]), i = Number(r[t.y]);
4292
+ if (!Number.isFinite(e) || !Number.isFinite(i)) continue;
4293
+ let a = t.series ? String(r[t.series] ?? "") : t.y, o = {
4294
+ x: e,
4295
+ y: i
4296
+ };
4297
+ if (t.r) {
4298
+ let e = Number(r[t.r]);
4299
+ Number.isFinite(e) && (o.r = e);
4300
+ }
4301
+ t.label && (o.label = String(r[t.label] ?? ""));
4302
+ let s = n.get(a);
4303
+ s ? s.push(o) : n.set(a, [o]);
4304
+ }
4305
+ return {
4306
+ type: "scatter",
4307
+ categories: [],
4308
+ series: [...n].map(([e, t]) => ({
4309
+ label: e,
4310
+ values: [],
4311
+ points: t
4312
+ })),
4313
+ palette: t.palette,
4314
+ width: t.width,
4315
+ height: t.height,
4316
+ xAxisTitle: t.x,
4317
+ yAxisTitle: t.y
4318
+ };
4319
+ }
4320
+ function Yt(e, t) {
4321
+ let n = [];
4322
+ for (let r of e) {
4323
+ let e = Number(r[t.value]);
4324
+ Number.isFinite(e) && n.push(e);
4325
+ }
4326
+ let r = H(n, t.reduce ?? "sum"), i = Number.isFinite(r) ? r : 0, a = t.min ?? Math.min(0, i);
4327
+ return {
4328
+ type: "gauge",
4329
+ categories: [],
4330
+ series: [],
4331
+ gaugeValue: i,
4332
+ gaugeMin: a,
4333
+ gaugeMax: t.max ?? (i > a ? y(a, i).max : a + 1),
4334
+ gaugeTarget: t.target,
4335
+ gaugeUnit: t.unit,
4336
+ width: t.width,
4337
+ height: t.height
4338
+ };
4339
+ }
4340
+ //#endregion
4341
+ export { K as $, Pe as A, _e as B, Ct as C, Ye as D, Re as E, xe as F, Se as G, De as H, he as I, de as J, ye as K, we as L, Ne as M, Le as N, Ke as O, Ie as P, J as Q, Te as R, At as S, Z as T, Ee as U, Ce as V, ge as W, Y as X, fe as Y, q as Z, Ht as _, g as _t, jt as a, B as at, Et as b, h as bt, Pt as c, U as ct, Kt as d, M as dt, ae as et, Yt as f, H as ft, It as g, T as gt, Jt as h, E as ht, Mt as i, L as it, Me as j, We as k, qt as l, F as lt, Bt as m, a as mt, Gt as n, k as nt, Nt as o, I as ot, zt as p, z as pt, me as q, Ft as r, ne as rt, Rt as s, R as st, Wt as t, re as tt, Lt as u, ee as ut, Ut as v, y as vt, wt as w, Dt as x, p as xt, Vt as y, C as yt, je as z };