velo-plot 2.0.0 → 3.0.0

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 (265) hide show
  1. package/README.md +15 -8
  2. package/dist/{ChartCore-BhQ4j7f5.js → ChartCore-BpzRvN4Y.js} +998 -855
  3. package/dist/ChartCore-BpzRvN4Y.js.map +1 -0
  4. package/dist/a11y-Bw6urYpr.js +105 -0
  5. package/dist/a11y-Bw6urYpr.js.map +1 -0
  6. package/dist/angular/hooks-entry.d.ts +1 -0
  7. package/dist/angular/hooks.d.ts +26 -0
  8. package/dist/angular/index.d.ts +8 -0
  9. package/dist/angular/velo-plot.component.d.ts +46 -0
  10. package/dist/angular-hooks.d.ts +1 -0
  11. package/dist/angular-hooks.js +9 -0
  12. package/dist/angular-hooks.js.map +1 -0
  13. package/dist/angular.d.ts +1 -0
  14. package/dist/angular.js +166 -0
  15. package/dist/angular.js.map +1 -0
  16. package/dist/assets/indicator.worker-bv0zC4EX.js.map +1 -1
  17. package/dist/astro/StackedPlot.astro +19 -0
  18. package/dist/astro/VeloPlot.astro +23 -0
  19. package/dist/{axisFormat-SPX-CD5s.js → axisFormat-CzumxpCL.js} +3 -3
  20. package/dist/axisFormat-CzumxpCL.js.map +1 -0
  21. package/dist/bindings/shared/a11y.d.ts +26 -0
  22. package/dist/bindings/shared/chartLifecycle.d.ts +16 -0
  23. package/dist/bindings/shared/chartSyncBridge.d.ts +8 -0
  24. package/dist/bindings/shared/dimensions.d.ts +1 -0
  25. package/dist/bindings/shared/index.d.ts +9 -0
  26. package/dist/bindings/shared/indicatorBridge.d.ts +11 -0
  27. package/dist/bindings/shared/optionsSync.d.ts +7 -0
  28. package/dist/bindings/shared/seriesDiff.d.ts +8 -0
  29. package/dist/bindings/shared/stackedSync.d.ts +9 -0
  30. package/dist/bindings/shared/types.d.ts +46 -0
  31. package/dist/bindings/test-utils/index.d.ts +35 -0
  32. package/dist/bindings/test-utils/mockLifecycle.d.ts +120 -0
  33. package/dist/bindings/test-utils/vitestSveltePlugin.d.ts +3 -0
  34. package/dist/chartSyncBridge-DbWrwtyP.js +57 -0
  35. package/dist/chartSyncBridge-DbWrwtyP.js.map +1 -0
  36. package/dist/core/Chart.d.ts +1 -1
  37. package/dist/core/InteractionManager.d.ts +7 -1
  38. package/dist/core/OverlayRenderer.d.ts +5 -0
  39. package/dist/core/annotations/types.d.ts +1 -1
  40. package/dist/core/chart/ChartAxisManager.d.ts +2 -0
  41. package/dist/core/chart/ChartCore.d.ts +17 -2
  42. package/dist/core/chart/ChartPluginBridge.d.ts +1 -0
  43. package/dist/core/chart/ChartRenderLoop.d.ts +2 -0
  44. package/dist/core/chart/ChartStateManager.d.ts +2 -0
  45. package/dist/core/chart/types.d.ts +6 -1
  46. package/dist/core/clipboard/index.d.ts +1 -1
  47. package/dist/core/debug/index.d.ts +1 -1
  48. package/dist/core/keybindings/index.d.ts +1 -1
  49. package/dist/core/loading/index.d.ts +1 -1
  50. package/dist/core/locale/index.d.ts +1 -1
  51. package/dist/core/stacked/paneResize.d.ts +3 -0
  52. package/dist/core/stacked/types.d.ts +10 -0
  53. package/dist/core/sync/index.d.ts +0 -1
  54. package/dist/core/theme-editor/index.d.ts +1 -1
  55. package/dist/createStackedChart-Dm-YqUT7.js +756 -0
  56. package/dist/createStackedChart-Dm-YqUT7.js.map +1 -0
  57. package/dist/examples/PluginDemonstration.d.ts +1 -1
  58. package/dist/gpuRenderer-BpaMYz-k.js.map +1 -1
  59. package/dist/hooks-CYPCxoZx.js +69 -0
  60. package/dist/hooks-CYPCxoZx.js.map +1 -0
  61. package/dist/{index-D7dTq6VB.js → index-0InEyj0q.js} +130 -134
  62. package/dist/index-0InEyj0q.js.map +1 -0
  63. package/dist/index-BMiZoKmm.js.map +1 -1
  64. package/dist/{index-DoYxf1cV.js → index-CWxIHdwX.js} +38 -98
  65. package/dist/index-CWxIHdwX.js.map +1 -0
  66. package/dist/{index-CUGS98p4.js → index-CaXWSOTk.js} +3 -6
  67. package/dist/index-CaXWSOTk.js.map +1 -0
  68. package/dist/index-Dag88bW4.js.map +1 -1
  69. package/dist/index-qhscKTDy.js.map +1 -1
  70. package/dist/{index-CWipqOLP.js → index-qunX30Xu.js} +2 -2
  71. package/dist/index-qunX30Xu.js.map +1 -0
  72. package/dist/index-x4stH3jD.js.map +1 -1
  73. package/dist/{index.core-fpZ1dYN0.js → index.core-BmZe2jRQ.js} +30 -29
  74. package/dist/index.core-BmZe2jRQ.js.map +1 -0
  75. package/dist/index.core.d.ts +1 -1
  76. package/dist/index.d.ts +3 -3
  77. package/dist/indicators--eJGmVox.js.map +1 -1
  78. package/dist/{mockDatafeed-Cdg5hKEo.js → mockDatafeed-DHIDPcpX.js} +150 -146
  79. package/dist/mockDatafeed-DHIDPcpX.js.map +1 -0
  80. package/dist/optionsSync-QUiN4Inw.js +119 -0
  81. package/dist/optionsSync-QUiN4Inw.js.map +1 -0
  82. package/dist/plugins/3d/index.d.ts +2 -2
  83. package/dist/plugins/3d.d.ts +2 -2
  84. package/dist/plugins/3d.js.map +1 -1
  85. package/dist/plugins/analysis/contours.d.ts +31 -0
  86. package/dist/plugins/analysis/index.d.ts +1 -1
  87. package/dist/plugins/analysis/indicators.d.ts +1 -1
  88. package/dist/plugins/analysis.d.ts +2 -2
  89. package/dist/plugins/analysis.js +495 -408
  90. package/dist/plugins/analysis.js.map +1 -1
  91. package/dist/plugins/annotations/index.d.ts +1 -1
  92. package/dist/plugins/annotations.d.ts +2 -2
  93. package/dist/plugins/annotations.js.map +1 -1
  94. package/dist/plugins/anomaly-detection.js +1 -1
  95. package/dist/plugins/anomaly-detection.js.map +1 -1
  96. package/dist/plugins/broken-axis.d.ts +2 -2
  97. package/dist/plugins/broken-axis.js +170 -181
  98. package/dist/plugins/broken-axis.js.map +1 -1
  99. package/dist/plugins/builtins/crosshair/CrosshairPlugin.d.ts +1 -1
  100. package/dist/plugins/builtins/index.d.ts +1 -1
  101. package/dist/plugins/caching.d.ts +2 -2
  102. package/dist/plugins/clipboard/index.d.ts +2 -2
  103. package/dist/plugins/clipboard.d.ts +2 -2
  104. package/dist/plugins/clipboard.js.map +1 -1
  105. package/dist/plugins/context-menu/index.d.ts +1 -1
  106. package/dist/plugins/context-menu.d.ts +2 -2
  107. package/dist/plugins/context-menu.js +1 -1
  108. package/dist/plugins/context-menu.js.map +1 -1
  109. package/dist/plugins/data-export/index.d.ts +1 -1
  110. package/dist/plugins/data-export.d.ts +2 -2
  111. package/dist/plugins/data-export.js +2 -2
  112. package/dist/plugins/data-export.js.map +1 -1
  113. package/dist/plugins/data-transform.d.ts +2 -2
  114. package/dist/plugins/data-transform.js +19 -19
  115. package/dist/plugins/data-transform.js.map +1 -1
  116. package/dist/plugins/debug/index.d.ts +2 -2
  117. package/dist/plugins/debug.d.ts +2 -2
  118. package/dist/plugins/debug.js +2 -2
  119. package/dist/plugins/debug.js.map +1 -1
  120. package/dist/plugins/forecasting/algorithms.d.ts +7 -2
  121. package/dist/plugins/forecasting/index.d.ts +1 -1
  122. package/dist/plugins/forecasting/types.d.ts +13 -3
  123. package/dist/plugins/forecasting.js +355 -175
  124. package/dist/plugins/forecasting.js.map +1 -1
  125. package/dist/plugins/gpu/index.d.ts +2 -2
  126. package/dist/plugins/gpu.d.ts +2 -2
  127. package/dist/plugins/gpu.js.map +1 -1
  128. package/dist/plugins/i18n/index.d.ts +2 -2
  129. package/dist/plugins/i18n.d.ts +2 -2
  130. package/dist/plugins/i18n.js.map +1 -1
  131. package/dist/plugins/index.d.ts +1 -1
  132. package/dist/plugins/keyboard.d.ts +2 -2
  133. package/dist/plugins/keyboard.js +65 -5
  134. package/dist/plugins/keyboard.js.map +1 -1
  135. package/dist/plugins/latex/symbols.d.ts +50 -0
  136. package/dist/plugins/latex/types.d.ts +13 -1
  137. package/dist/plugins/latex.js +351 -331
  138. package/dist/plugins/latex.js.map +1 -1
  139. package/dist/plugins/lazy-load.d.ts +2 -2
  140. package/dist/plugins/loading/index.d.ts +1 -1
  141. package/dist/plugins/loading.d.ts +2 -2
  142. package/dist/plugins/ml-integration/native-algorithms.d.ts +24 -4
  143. package/dist/plugins/ml-integration/types.d.ts +19 -0
  144. package/dist/plugins/ml-integration.d.ts +2 -2
  145. package/dist/plugins/ml-integration.js +190 -139
  146. package/dist/plugins/ml-integration.js.map +1 -1
  147. package/dist/plugins/offscreen.d.ts +2 -2
  148. package/dist/plugins/pattern-recognition/types.d.ts +28 -1
  149. package/dist/plugins/pattern-recognition.d.ts +2 -2
  150. package/dist/plugins/pattern-recognition.js +417 -344
  151. package/dist/plugins/pattern-recognition.js.map +1 -1
  152. package/dist/plugins/radar.d.ts +2 -2
  153. package/dist/plugins/regression.d.ts +2 -2
  154. package/dist/plugins/regression.js +1 -1
  155. package/dist/plugins/regression.js.map +1 -1
  156. package/dist/plugins/roi.js +9 -9
  157. package/dist/plugins/roi.js.map +1 -1
  158. package/dist/plugins/snapshot/index.d.ts +1 -1
  159. package/dist/plugins/snapshot/types.d.ts +1 -1
  160. package/dist/plugins/snapshot.d.ts +2 -2
  161. package/dist/plugins/snapshot.js +36 -36
  162. package/dist/plugins/snapshot.js.map +1 -1
  163. package/dist/plugins/streaming/index.d.ts +2 -2
  164. package/dist/plugins/streaming.d.ts +2 -2
  165. package/dist/plugins/sync/index.d.ts +3 -2
  166. package/dist/plugins/sync.d.ts +2 -2
  167. package/dist/plugins/sync.js +1 -1
  168. package/dist/plugins/sync.js.map +1 -1
  169. package/dist/plugins/theme-editor/index.d.ts +1 -1
  170. package/dist/plugins/theme-editor.d.ts +2 -2
  171. package/dist/plugins/tools/index.d.ts +1 -1
  172. package/dist/plugins/tools/tooltip/index.d.ts +1 -1
  173. package/dist/plugins/tools.d.ts +2 -2
  174. package/dist/plugins/tools.js +1 -1
  175. package/dist/plugins/types.d.ts +1 -1
  176. package/dist/plugins/video-recorder.d.ts +2 -2
  177. package/dist/plugins/virtualization.d.ts +2 -2
  178. package/dist/plugins/virtualization.js +1 -1
  179. package/dist/pool-DZ8shSqv.js +109 -0
  180. package/dist/pool-DZ8shSqv.js.map +1 -0
  181. package/dist/react/StackedPlot.d.ts +31 -0
  182. package/dist/react/VeloPlot.d.ts +29 -0
  183. package/dist/react/index.d.ts +25 -3
  184. package/dist/react/useChartSync.d.ts +8 -0
  185. package/dist/react/useIndicator.d.ts +12 -0
  186. package/dist/react/useVeloPlot.d.ts +19 -0
  187. package/dist/react.js +328 -24
  188. package/dist/react.js.map +1 -1
  189. package/dist/scientific/index.d.ts +48 -0
  190. package/dist/scientific.d.ts +1 -0
  191. package/dist/scientific.js +91 -0
  192. package/dist/scientific.js.map +1 -0
  193. package/dist/solid/VeloPlot.d.ts +16 -0
  194. package/dist/solid/index.d.ts +13 -0
  195. package/dist/solid/useChartSync.d.ts +6 -0
  196. package/dist/solid/useIndicator.d.ts +11 -0
  197. package/dist/solid/useStackedPlot.d.ts +14 -0
  198. package/dist/solid/useVeloPlot.d.ts +18 -0
  199. package/dist/solid.d.ts +1 -0
  200. package/dist/solid.js +172 -0
  201. package/dist/solid.js.map +1 -0
  202. package/dist/stackedSync-tnrunZMt.js +100 -0
  203. package/dist/stackedSync-tnrunZMt.js.map +1 -0
  204. package/dist/svelte/StackedPlot.svelte +29 -0
  205. package/dist/svelte/StackedPlot.test.ts +114 -0
  206. package/dist/svelte/VeloPlot.svelte +44 -0
  207. package/dist/svelte/VeloPlot.test.ts +105 -0
  208. package/dist/svelte/index.d.ts +11 -0
  209. package/dist/svelte/index.test.ts +20 -0
  210. package/dist/svelte/index.ts +15 -0
  211. package/dist/svelte/useChartSync.d.ts +8 -0
  212. package/dist/svelte/useChartSync.test.ts +49 -0
  213. package/dist/svelte/useChartSync.ts +29 -0
  214. package/dist/svelte/useIndicator.d.ts +13 -0
  215. package/dist/svelte/useIndicator.test.ts +67 -0
  216. package/dist/svelte/useIndicator.ts +43 -0
  217. package/dist/svelte/useStackedPlot.d.ts +16 -0
  218. package/dist/svelte/useStackedPlot.test.ts +76 -0
  219. package/dist/svelte/useStackedPlot.ts +54 -0
  220. package/dist/svelte/useVeloPlot.d.ts +21 -0
  221. package/dist/svelte/useVeloPlot.test.ts +100 -0
  222. package/dist/svelte/useVeloPlot.ts +81 -0
  223. package/dist/svelte.d.ts +1 -0
  224. package/dist/svelte.js +143 -0
  225. package/dist/svelte.js.map +1 -0
  226. package/dist/symbols-DT0eLlpW.js +568 -0
  227. package/dist/symbols-DT0eLlpW.js.map +1 -0
  228. package/dist/testing/index.d.ts +1 -1
  229. package/dist/theme/index.d.ts +2 -1
  230. package/dist/trading.js +7 -7
  231. package/dist/types.d.ts +1 -1
  232. package/dist/{utils-BK5UUXxj.js → utils-Dx0h0bgQ.js} +9 -9
  233. package/dist/{utils-BK5UUXxj.js.map → utils-Dx0h0bgQ.js.map} +1 -1
  234. package/dist/velo-plot.full.js +444 -433
  235. package/dist/velo-plot.full.js.map +1 -1
  236. package/dist/velo-plot.js +15 -15
  237. package/dist/vue/StackedPlot.vue.d.ts +48 -0
  238. package/dist/vue/VeloPlot.vue.d.ts +64 -0
  239. package/dist/vue/index.d.ts +250 -0
  240. package/dist/vue/useChartSync.d.ts +52 -0
  241. package/dist/vue/useIndicator.d.ts +23 -0
  242. package/dist/vue/useStackedPlot.d.ts +15 -0
  243. package/dist/vue/useVeloPlot.d.ts +20 -0
  244. package/dist/vue.d.ts +1 -0
  245. package/dist/vue.js +312 -0
  246. package/dist/vue.js.map +1 -0
  247. package/dist/workers/indicatorsAsync.d.ts +26 -0
  248. package/dist/workers/pool.d.ts +9 -0
  249. package/package.json +88 -10
  250. package/dist/ChartCore-BhQ4j7f5.js.map +0 -1
  251. package/dist/SciPlot-GJvw7GJo.js +0 -463
  252. package/dist/SciPlot-GJvw7GJo.js.map +0 -1
  253. package/dist/axisFormat-SPX-CD5s.js.map +0 -1
  254. package/dist/createStackedChart-DJSmqerD.js +0 -706
  255. package/dist/createStackedChart-DJSmqerD.js.map +0 -1
  256. package/dist/index-CUGS98p4.js.map +0 -1
  257. package/dist/index-CWipqOLP.js.map +0 -1
  258. package/dist/index-D7dTq6VB.js.map +0 -1
  259. package/dist/index-DoYxf1cV.js.map +0 -1
  260. package/dist/index.core-fpZ1dYN0.js.map +0 -1
  261. package/dist/mockDatafeed-Cdg5hKEo.js.map +0 -1
  262. package/dist/pool-15HMCNv8.js +0 -88
  263. package/dist/pool-15HMCNv8.js.map +0 -1
  264. package/dist/react/SciPlot.d.ts +0 -60
  265. package/dist/react/useSciPlot.d.ts +0 -56
@@ -1,706 +0,0 @@
1
- import { m as Lt, M as G, c as St, g as Yt, a as Bt, r as _t, h as Ot, b as jt, i as Nt } from "./ChartCore-BhQ4j7f5.js";
2
- import { c as Wt } from "./index-CUGS98p4.js";
3
- const ot = 5, rt = 1 / 6, qt = { top: 4, bottom: 8, left: 4 }, Dt = { bottom: 55 };
4
- function Gt(t) {
5
- if (typeof t == "number") return t;
6
- switch (t) {
7
- case "8k":
8
- return 8;
9
- case "4k":
10
- return 4;
11
- case "2k":
12
- return 2;
13
- default:
14
- return 1;
15
- }
16
- }
17
- function Ut(t) {
18
- return new Promise((n, o) => {
19
- const r = new Image();
20
- r.onload = () => n(r), r.onerror = o, r.src = t;
21
- });
22
- }
23
- function Pt(t, n) {
24
- const o = t.getBoundingClientRect();
25
- return {
26
- x: o.left - n.left,
27
- y: o.top - n.top,
28
- width: o.width,
29
- height: o.height
30
- };
31
- }
32
- async function Kt(t, n, o, r, a, d = {}) {
33
- var h;
34
- const {
35
- format: b = "png",
36
- quality: k = 0.92,
37
- resolution: y = "standard",
38
- includeBackground: R = !0,
39
- includeDividers: X = !0,
40
- transparent: H = !1
41
- } = d, E = Gt(y), $ = (((h = o[0]) == null ? void 0 : h.getDPR()) ?? (typeof window < "u" ? window.devicePixelRatio : 1)) * E, _ = o.map((l) => l.getDPR());
42
- try {
43
- if (E > 1) {
44
- for (const m of o)
45
- m.setDPR($), m.render();
46
- await new Promise((m) => requestAnimationFrame(m)), await new Promise((m) => setTimeout(m, 50));
47
- }
48
- const l = t.getBoundingClientRect(), T = Math.max(1, Math.round(l.width * $)), S = Math.max(1, Math.round(l.height * $)), u = document.createElement("canvas");
49
- u.width = T, u.height = S;
50
- const f = u.getContext("2d");
51
- if (!f) throw new Error("Failed to create export canvas");
52
- !H && R && (f.fillStyle = a || "#ffffff", f.fillRect(0, 0, T, S));
53
- const g = b === "jpeg" ? "jpeg" : "png";
54
- for (let m = 0; m < n.length; m++) {
55
- const w = Pt(n[m], l), M = o[m].exportImage(g), A = await Ut(M);
56
- f.drawImage(
57
- A,
58
- Math.round(w.x * $),
59
- Math.round(w.y * $),
60
- Math.round(w.width * $),
61
- Math.round(w.height * $)
62
- );
63
- }
64
- if (X && r.length) {
65
- f.fillStyle = "rgba(128, 128, 128, 0.35)";
66
- for (const m of r) {
67
- const w = Pt(m, l);
68
- f.fillRect(
69
- Math.round(w.x * $),
70
- Math.round(w.y * $),
71
- Math.max(1, Math.round(w.width * $)),
72
- Math.max(1, Math.round(w.height * $))
73
- );
74
- }
75
- }
76
- const v = b === "jpeg" ? "image/jpeg" : b === "webp" ? "image/webp" : "image/png";
77
- return u.toDataURL(v, k);
78
- } finally {
79
- if (E > 1)
80
- for (let l = 0; l < o.length; l++)
81
- o[l].setDPR(_[l]), o[l].render();
82
- }
83
- }
84
- const D = "velo-pane-divider", F = "velo-pane-resizing";
85
- function Qt(t) {
86
- if (typeof document > "u") return;
87
- let n = document.getElementById("velo-pane-divider-styles");
88
- n || (n = document.createElement("style"), n.id = "velo-pane-divider-styles", document.head.appendChild(n));
89
- const r = t === "horizontal" ? "ew-resize" : "ns-resize";
90
- n.textContent = `
91
- .${D} {
92
- flex: 0 0 var(--velo-divider-size, 6px);
93
- position: relative;
94
- cursor: ${r};
95
- touch-action: none;
96
- z-index: 20;
97
- background: transparent;
98
- user-select: none;
99
- }
100
- .${D}::after {
101
- content: "";
102
- position: absolute;
103
- background: rgba(128, 128, 128, 0.35);
104
- transition: background 0.15s;
105
- }
106
- .${D}[data-direction="vertical"]::after {
107
- left: 0;
108
- right: 0;
109
- top: 50%;
110
- transform: translateY(-50%);
111
- height: 1px;
112
- }
113
- .${D}[data-direction="horizontal"]::after {
114
- top: 0;
115
- bottom: 0;
116
- left: 50%;
117
- transform: translateX(-50%);
118
- width: 1px;
119
- }
120
- .${D}:hover::after,
121
- .${F} .${D}::after {
122
- background: rgba(0, 242, 255, 0.65);
123
- }
124
- .${D}[data-direction="vertical"]:hover::after,
125
- .${F} .${D}[data-direction="vertical"]::after {
126
- height: 2px;
127
- }
128
- .${D}[data-direction="horizontal"]:hover::after,
129
- .${F} .${D}[data-direction="horizontal"]::after {
130
- width: 2px;
131
- }
132
- .${D}-handle {
133
- position: absolute;
134
- left: 50%;
135
- top: 50%;
136
- transform: translate(-50%, -50%);
137
- width: 32px;
138
- height: 12px;
139
- display: flex;
140
- align-items: center;
141
- justify-content: center;
142
- opacity: 0;
143
- transition: opacity 0.15s;
144
- pointer-events: none;
145
- color: rgba(0, 242, 255, 0.9);
146
- font-size: 10px;
147
- line-height: 1;
148
- }
149
- .${D}:hover .${D}-handle,
150
- .${F} .${D}-handle {
151
- opacity: 1;
152
- }
153
- .${F} {
154
- cursor: ${r} !important;
155
- }
156
- .${F} * {
157
- cursor: ${r} !important;
158
- }
159
- .${F} [data-pane-id] {
160
- position: relative !important;
161
- overflow: hidden !important;
162
- }
163
- `;
164
- }
165
- function Zt(t, n, o) {
166
- const r = document.createElement("div");
167
- r.className = D, r.dataset.dividerIndex = String(t), r.dataset.direction = o, r.style.setProperty("--velo-divider-size", `${n}px`);
168
- const a = document.createElement("div");
169
- return a.className = `${D}-handle`, a.textContent = o === "horizontal" ? "⇔" : "⇕", r.appendChild(a), r;
170
- }
171
- function Vt(t, n) {
172
- const o = n === "horizontal" ? "min-width:0;" : "min-height:0;";
173
- return typeof t == "number" ? `flex:${t} 1 0;${o}` : `flex:1 1 ${t};${o}`;
174
- }
175
- function kt(t, n, o = rt, r = 0) {
176
- if (n < 1 || t <= 0) return 1;
177
- const a = t * o, d = Math.max(r, a);
178
- return Math.min(d, t / n);
179
- }
180
- function Jt(t, n, o = rt, r = 0) {
181
- return kt(t, n, o, r);
182
- }
183
- function te(t, n) {
184
- const o = t.length;
185
- if (o === 0) return t;
186
- const r = Math.max(1, Math.round(n)), a = t.reduce((y, R) => y + R, 0);
187
- if (a <= 0) {
188
- const y = Math.floor(r / o), R = t.map(() => y);
189
- return R[o - 1] = r - y * (o - 1), R;
190
- }
191
- const d = t.map((y) => y / a * r), b = [];
192
- let k = 0;
193
- for (let y = 0; y < o - 1; y++)
194
- b.push(Math.max(1, Math.round(d[y]))), k += b[y];
195
- return b.push(Math.max(1, r - k)), b;
196
- }
197
- function ee(t, n, o, r, a = {}) {
198
- const d = a.direction ?? "vertical", b = d === "horizontal";
199
- Qt(d);
200
- const k = a.minPaneRatio ?? rt, y = a.minPanePx ?? 0, R = a.dividerSize ?? 6, X = n.length, H = (h) => b ? Jt(h, X, k, y) : kt(h, X, k, y), E = [], W = [];
201
- if (n.length < 2)
202
- return { dividers: E, destroy: () => {
203
- } };
204
- const $ = () => {
205
- const h = E.length * R, l = b ? t.clientWidth : t.clientHeight;
206
- return Math.max(1, l - h);
207
- }, _ = (h, l, T, S) => {
208
- var A;
209
- const u = $(), f = H(u), g = S.reduce(
210
- (x, z, I) => I === h || I === l ? x : x + z,
211
- 0
212
- ), v = u - g;
213
- let m = S[h] + T;
214
- m = Math.max(f, Math.min(v - f, m));
215
- const w = v - m;
216
- S[h] = m, S[l] = w;
217
- const M = r.reduce((x, z) => x + z, 0);
218
- if (r[h] = m / u * M, r[l] = w / u * M, (A = a.onDragMove) == null || A.call(a, S, h, l), a.onResize) {
219
- const x = {};
220
- for (let z = 0; z < o.length; z++)
221
- x[o[z]] = r[z];
222
- a.onResize(x);
223
- }
224
- };
225
- for (let h = 0; h < n.length - 1; h++) {
226
- const l = Zt(h, R, d);
227
- n[h].after(l), E.push(l);
228
- const S = (u) => {
229
- var w, M;
230
- u.preventDefault(), l.setPointerCapture(u.pointerId), t.classList.add(F);
231
- const f = ((w = a.onDragStart) == null ? void 0 : w.call(a, h, h + 1)) ?? n.map(
232
- (A) => b ? A.getBoundingClientRect().width : A.getBoundingClientRect().height
233
- );
234
- (M = a.onDragMove) == null || M.call(a, f, h, h + 1);
235
- let g = b ? u.clientX : u.clientY;
236
- const v = (A) => {
237
- const x = b ? A.clientX : A.clientY, z = x - g;
238
- g = x, z !== 0 && _(h, h + 1, z, f);
239
- }, m = (A) => {
240
- var x;
241
- l.releasePointerCapture(A.pointerId), t.classList.remove(F), l.removeEventListener("pointermove", v), l.removeEventListener("pointerup", m), l.removeEventListener("pointercancel", m), (x = a.onDragEnd) == null || x.call(a, f);
242
- };
243
- l.addEventListener("pointermove", v), l.addEventListener("pointerup", m), l.addEventListener("pointercancel", m);
244
- };
245
- l.addEventListener("pointerdown", S), W.push(() => l.removeEventListener("pointerdown", S));
246
- }
247
- return {
248
- dividers: E,
249
- destroy: () => {
250
- for (const h of W) h();
251
- for (const h of E) h.remove();
252
- t.classList.remove(F);
253
- }
254
- };
255
- }
256
- function ne(t, n, o = "vertical") {
257
- for (let r = 0; r < t.length; r++)
258
- t[r].style.cssText = `${Vt(n[r], o)}position:relative;overflow:hidden;`;
259
- }
260
- function Rt(t) {
261
- return typeof t == "number" ? t : 1;
262
- }
263
- function oe(t, n = 6) {
264
- if (!Number.isFinite(t) || t <= 0) return n;
265
- const o = Math.floor(t / 36);
266
- return Math.max(2, Math.min(n, o));
267
- }
268
- function ie(t, n = 8) {
269
- if (!Number.isFinite(t) || t <= 0) return n;
270
- const o = Math.floor(t / 72);
271
- return Math.max(2, Math.min(n, o));
272
- }
273
- function zt(t) {
274
- var o;
275
- return t ? ((o = (Array.isArray(t) ? t : [t])[0]) == null ? void 0 : o.tickCount) ?? 6 : 6;
276
- }
277
- function re(t) {
278
- const n = t.wrapper.clientHeight, o = t.wrapper.clientWidth, r = oe(n, t.baseYTickCount);
279
- if (t.chart.updateYAxis("default", { tickCount: r }), t.showXAxis) {
280
- const a = ie(o, t.baseXTickCount);
281
- t.chart.updateXAxis({ tickCount: a });
282
- }
283
- }
284
- function Ct(t) {
285
- for (const n of t) re(n);
286
- }
287
- function Et(t) {
288
- const n = t ? Array.isArray(t) ? t : [t] : [{}];
289
- let o = 0, r = 0;
290
- for (const a of n)
291
- a.position === "right" ? r++ : o++;
292
- return { left: Math.max(1, o), right: r };
293
- }
294
- function ae(t, n) {
295
- var r;
296
- let o = 0;
297
- for (const a of t) {
298
- const { left: d } = Et((r = a.chart) == null ? void 0 : r.yAxis);
299
- o = Math.max(o, (d - 1) * 65);
300
- }
301
- return n + o;
302
- }
303
- function se(t, n) {
304
- var r;
305
- let o = 0;
306
- for (const a of t) {
307
- const { right: d } = Et((r = a.chart) == null ? void 0 : r.yAxis);
308
- o = Math.max(o, d * 65);
309
- }
310
- return n + o;
311
- }
312
- function ce(t, n) {
313
- const o = n === "horizontal" ? "min-width:0;" : "min-height:0;";
314
- return typeof t == "number" ? `flex:${t} 1 0;${o}` : `flex:1 1 ${t};${o}`;
315
- }
316
- function $t(t) {
317
- if (!(t != null && t.length)) return [];
318
- const n = [];
319
- for (const o of t)
320
- o.type === "indicator" ? n.push(...Yt(o)) : n.push(o);
321
- return n;
322
- }
323
- function Mt(t, n, o, r, a, d, b, k, y) {
324
- var M, A, x, z, I, V, U, K, Q, J, tt, et, nt;
325
- const R = r === 0, X = r === a - 1, H = y === "horizontal", W = !H && o.sharedXAxis !== "none" && !b, _ = H && (o.sharedYAxis ?? "left") !== "none" && !k, l = (o.gap ?? 0) > 0 ? qt : { top: 0, bottom: 0, left: 0 }, T = H ? {
326
- top: d.top,
327
- right: X ? d.right : l.left ?? 0,
328
- left: _ ? l.left ?? 4 : d.left,
329
- bottom: d.bottom
330
- } : {
331
- top: R ? d.top : l.top,
332
- right: d.right,
333
- left: d.left,
334
- bottom: W ? l.bottom : X ? ((A = (M = o.layout) == null ? void 0 : M.margins) == null ? void 0 : A.bottom) ?? Dt.bottom : d.bottom
335
- }, S = ((x = t.chart) == null ? void 0 : x.xAxis) ?? {}, u = {
336
- ...S,
337
- showLine: b ? S.showLine ?? !0 : !1,
338
- showTicks: b ? S.showTicks ?? !0 : !1,
339
- showLabels: b ? S.showLabels ?? !0 : !1
340
- }, f = ((z = t.chart) == null ? void 0 : z.yAxis) ?? {}, v = (Array.isArray(f) ? f : [f]).map((q) => ({
341
- ...q,
342
- showLine: k ? q.showLine ?? !0 : !1,
343
- showTicks: k ? q.showTicks ?? !0 : !1,
344
- showLabels: k ? q.showLabels ?? !0 : !1
345
- })), m = Array.isArray((I = t.chart) == null ? void 0 : I.yAxis) ? v : v[0];
346
- return (t.interactive ?? !0) || (n.style.pointerEvents = "none"), {
347
- ...t.chart,
348
- id: t.id,
349
- container: n,
350
- showLegend: ((V = t.chart) == null ? void 0 : V.showLegend) ?? o.showLegend ?? !1,
351
- theme: ((U = t.chart) == null ? void 0 : U.theme) ?? o.theme,
352
- devicePixelRatio: o.devicePixelRatio ?? ((K = t.chart) == null ? void 0 : K.devicePixelRatio),
353
- loading: ((Q = t.chart) == null ? void 0 : Q.loading) ?? !1,
354
- xAxis: u,
355
- yAxis: m,
356
- layout: Lt({
357
- ...o.layout,
358
- ...(J = t.chart) == null ? void 0 : J.layout,
359
- margins: { ...T, ...(tt = o.layout) == null ? void 0 : tt.margins, ...(nt = (et = t.chart) == null ? void 0 : et.layout) == null ? void 0 : nt.margins }
360
- })
361
- };
362
- }
363
- function it(t, n, o, r) {
364
- const a = n > 0 && o > 0 ? r === "horizontal" ? `margin-left:${n}px;` : `margin-top:${n}px;` : "";
365
- return `${ce(t, r)}position:relative;overflow:hidden;${a}`;
366
- }
367
- function le(t, n, o) {
368
- return t === !1 ? {
369
- axis: "none",
370
- syncCursor: !1,
371
- syncZoom: !1,
372
- syncPan: !1,
373
- bidirectional: !0,
374
- masterId: void 0
375
- } : {
376
- axis: o === "horizontal" ? "y" : "x",
377
- bidirectional: !0,
378
- masterId: n,
379
- syncCursor: !0,
380
- syncZoom: !0,
381
- syncPan: !0,
382
- ...typeof t == "object" ? t : {}
383
- };
384
- }
385
- function fe(t) {
386
- var ut, ht, ft, mt, gt, pt, yt, xt;
387
- const { container: n, panes: o } = t;
388
- if (!n) throw new Error("[StackedChart] container is required");
389
- if (o.length < 1 || o.length > ot)
390
- throw new Error(`[StackedChart] panes must be 1–${ot}`);
391
- const r = t.masterPaneId ?? o[0].id, a = t.direction ?? "vertical", d = a === "horizontal", b = t.sharedXAxis ?? "bottom", k = t.sharedYAxis ?? "left", y = t.gap ?? 0, R = t.resizable, X = !!R, H = typeof R == "object" ? R.dividerSize ?? 6 : 6, E = Lt(t.layout), W = ((ut = E.margins) == null ? void 0 : ut.left) ?? G.left, $ = ((ht = E.margins) == null ? void 0 : ht.right) ?? G.right, _ = ((ft = E.margins) == null ? void 0 : ft.top) ?? G.top, h = ae(o, W), l = se(o, $);
392
- n.replaceChildren(), n.style.display = "flex", n.style.flexDirection = d ? "row" : "column", n.style.width = "100%";
393
- const T = n.offsetHeight || parseInt(getComputedStyle(n).height, 10), S = n.offsetWidth || parseInt(getComputedStyle(n).width, 10);
394
- d ? (S > 0 ? (n.style.width = `${S}px`, n.style.minWidth = `${S}px`) : n.style.width || (n.style.minWidth = "480px"), n.style.height = T > 0 ? `${T}px` : "320px", n.style.minHeight = n.style.height) : T > 0 ? (n.style.height = `${T}px`, n.style.minHeight = `${T}px`) : n.style.height || (n.style.minHeight = "320px"), n.style.overflow = "hidden", n.style.position = "relative";
395
- const u = o.map((e) => e.id), f = o.map((e) => Rt(e.height)), g = /* @__PURE__ */ new Map(), v = [], m = [];
396
- let w = null, M = !1, A = 0, x = 0, z = null;
397
- const I = (e) => {
398
- const i = Array.from({ length: v.length }, (s, c) => c);
399
- for (const s of i) {
400
- const c = g.get(u[s]);
401
- c && c.resize();
402
- }
403
- Ct(
404
- i.map((s) => m[s]).filter(Boolean)
405
- );
406
- }, V = () => {
407
- A || (A = requestAnimationFrame(() => {
408
- A = 0, !M && I();
409
- }));
410
- }, U = new ResizeObserver(() => {
411
- M || V();
412
- });
413
- U.observe(n);
414
- const K = () => {
415
- for (let e = 0; e < v.length; e++)
416
- v[e].style.cssText = it(f[e], y, e, a);
417
- }, Q = () => {
418
- const e = (v.length - 1) * H;
419
- return d ? Math.max(1, n.clientWidth - e) : Math.max(1, n.clientHeight - e);
420
- }, J = () => {
421
- for (const e of v) {
422
- const i = e.firstElementChild;
423
- i && (i.style.cssText = "position:absolute;inset:0;width:100%;height:100%;");
424
- }
425
- }, tt = () => {
426
- const e = Q(), i = v.map(
427
- (c) => d ? c.getBoundingClientRect().width : c.getBoundingClientRect().height
428
- ), s = i.reduce((c, p) => c + p, 0);
429
- return s > 0 ? i.map((c) => c * (e / s)) : i;
430
- }, et = (e) => {
431
- for (let i = 0; i < v.length; i++) {
432
- const s = Math.max(1, Math.round(e[i])), c = y > 0 && i > 0 ? d ? `margin-left:${y}px;` : `margin-top:${y}px;` : "", p = d ? "width" : "height";
433
- v[i].style.cssText = `${p}:${s}px;flex:0 0 auto;min-height:0;min-width:0;position:relative;overflow:hidden;${c}`;
434
- }
435
- }, nt = () => {
436
- if (x = 0, !M || !z) return;
437
- const { sizes: e, leadingIdx: i, trailingIdx: s } = z;
438
- et(e);
439
- for (const c of [i, s]) {
440
- const p = g.get(u[c]);
441
- p && (p.resize(), Ct([m[c]]));
442
- }
443
- }, q = (e, i, s) => {
444
- z = { sizes: e, leadingIdx: i, trailingIdx: s }, !x && (x = requestAnimationFrame(nt));
445
- }, Tt = (e) => {
446
- const i = e.reduce((c, p) => c + p, 0);
447
- if (i <= 0) return;
448
- const s = f.reduce((c, p) => c + p, 0);
449
- for (let c = 0; c < f.length; c++)
450
- f[c] = e[c] / i * s;
451
- }, at = (e) => {
452
- var i;
453
- for (const s of g.values())
454
- (i = s.setResizeSuspended) == null || i.call(s, e);
455
- }, It = (e, i) => {
456
- var s, c, p, C, P, Y;
457
- for (let L = 0; L < u.length; L++)
458
- L === e || L === i || (c = (s = g.get(u[L])) == null ? void 0 : s.setResizeSuspended) == null || c.call(s, !0);
459
- (C = (p = g.get(u[e])) == null ? void 0 : p.setResizeSuspended) == null || C.call(p, !1), (Y = (P = g.get(u[i])) == null ? void 0 : P.setResizeSuspended) == null || Y.call(P, !1);
460
- }, st = d ? ((gt = (mt = t.layout) == null ? void 0 : mt.margins) == null ? void 0 : gt.bottom) ?? Dt.bottom : G.bottom;
461
- for (let e = 0; e < o.length; e++) {
462
- const i = o[e], s = e === 0, c = e === o.length - 1, p = d ? i.showXAxis ?? !0 : i.showXAxis ?? (b === "bottom" ? c : !0), C = d ? i.showYAxis ?? (k === "left" ? s : !0) : i.showYAxis ?? !0, P = document.createElement("div");
463
- P.dataset.paneId = i.id, P.style.cssText = it(f[e], y, e, a);
464
- const Y = document.createElement("div");
465
- Y.style.cssText = "position:absolute;inset:0;width:100%;height:100%;", P.appendChild(Y), n.appendChild(P), v.push(P);
466
- const L = St(
467
- Mt(
468
- i,
469
- Y,
470
- t,
471
- e,
472
- o.length,
473
- {
474
- left: d && !C ? G.left : h,
475
- right: l,
476
- top: _,
477
- bottom: st
478
- },
479
- p,
480
- C,
481
- a
482
- )
483
- ), j = $t(i.series);
484
- if (j.length)
485
- for (const N of j) L.addSeries(N);
486
- i.yRange && i.yRange !== "auto" && L.zoom({ y: i.yRange, animate: !1 }), g.set(i.id, L), m.push({
487
- chart: L,
488
- wrapper: P,
489
- baseYTickCount: zt((pt = i.chart) == null ? void 0 : pt.yAxis),
490
- baseXTickCount: ((xt = (yt = i.chart) == null ? void 0 : yt.xAxis) == null ? void 0 : xt.tickCount) ?? 8,
491
- showXAxis: p
492
- });
493
- }
494
- if (X && o.length > 1) {
495
- const e = typeof R == "object" ? {
496
- minPaneRatio: R.minPaneRatio,
497
- minPanePx: R.minPanePx,
498
- dividerSize: R.dividerSize
499
- } : {};
500
- w = ee(
501
- n,
502
- v,
503
- u,
504
- f,
505
- {
506
- direction: a,
507
- ...e,
508
- onDragStart: (i, s) => (M = !0, at(!0), It(i, s), tt()),
509
- onDragMove: (i, s, c) => {
510
- q(i, s, c);
511
- },
512
- onDragEnd: (i) => {
513
- x && (cancelAnimationFrame(x), x = 0), z = null, M = !1;
514
- const s = te(i, Q());
515
- Tt(s), J(), K(), at(!1), I();
516
- }
517
- }
518
- );
519
- }
520
- const Z = g.get(r);
521
- if (!Z)
522
- throw new Error(`[StackedChart] masterPaneId "${r}" not found in panes`);
523
- const O = Wt(
524
- Array.from(g.values()),
525
- le(t.sync, r, a)
526
- ), Ft = () => {
527
- const e = Z.theme ?? Z.baseTheme;
528
- return (e == null ? void 0 : e.backgroundColor) ?? "#ffffff";
529
- }, ct = () => {
530
- const i = Date.now();
531
- return new Promise((c) => {
532
- const p = () => {
533
- const C = Nt();
534
- if (C.pending === 0 && !C.isProcessing || Date.now() - i > 8e3) {
535
- c();
536
- return;
537
- }
538
- setTimeout(p, 50);
539
- };
540
- p();
541
- }).then(() => new Promise((c) => {
542
- requestAnimationFrame(() => {
543
- I(), c();
544
- });
545
- }));
546
- }, lt = async (e = {}) => {
547
- await ct();
548
- for (const s of g.values()) s.render();
549
- await new Promise((s) => requestAnimationFrame(s));
550
- const i = await Kt(
551
- n,
552
- v,
553
- Array.from(g.values()),
554
- (w == null ? void 0 : w.dividers) ?? [],
555
- Ft(),
556
- e
557
- );
558
- if (e.download) {
559
- const s = e.format === "jpeg" ? "jpg" : e.format ?? "png", c = document.createElement("a");
560
- c.download = `${e.fileName ?? "velo-plot-stack"}.${s}`, c.href = i, document.body.appendChild(c), c.click(), document.body.removeChild(c);
561
- }
562
- return i;
563
- }, dt = (e) => {
564
- var vt, wt, bt, At;
565
- if (g.size >= ot)
566
- throw new Error(`[StackedChart] Cannot exceed ${ot} panes`);
567
- if (g.has(e.id))
568
- throw new Error(`[StackedChart] Pane "${e.id}" already exists`);
569
- if (!d && b === "bottom" && u.length > 0) {
570
- const B = u[u.length - 1];
571
- (vt = g.get(B)) == null || vt.updateXAxis({
572
- showLabels: !1,
573
- showTicks: !1,
574
- showLine: !1
575
- });
576
- }
577
- const i = Rt(e.height ?? 0.25), s = f.reduce((B, Ht) => B + Ht, 0), c = s > 0 ? (1 - i) / s : 1;
578
- for (let B = 0; B < f.length; B++) f[B] *= c;
579
- const p = u.length;
580
- u.push(e.id), f.push(i);
581
- const C = document.createElement("div");
582
- C.dataset.paneId = e.id, C.style.cssText = it(f[p], y, p, a);
583
- const P = document.createElement("div");
584
- P.style.cssText = "position:absolute;inset:0;width:100%;height:100%;", C.appendChild(P), n.appendChild(C), v.push(C);
585
- const L = d ? e.showXAxis ?? !0 : e.showXAxis ?? (b === "bottom" ? !0 : !0), j = d ? e.showYAxis ?? (k === "left" ? p === 0 : !0) : e.showYAxis ?? !0, N = St(
586
- Mt(
587
- e,
588
- P,
589
- t,
590
- p,
591
- u.length,
592
- {
593
- left: d && !j ? G.left : h,
594
- right: l,
595
- top: _,
596
- bottom: st
597
- },
598
- L,
599
- j,
600
- a
601
- )
602
- ), Xt = $t(e.series);
603
- for (const B of Xt) N.addSeries(B);
604
- return e.yRange && e.yRange !== "auto" && N.zoom({ y: e.yRange, animate: !1 }), g.set(e.id, N), m.push({
605
- chart: N,
606
- wrapper: C,
607
- baseYTickCount: zt((wt = e.chart) == null ? void 0 : wt.yAxis),
608
- baseXTickCount: ((At = (bt = e.chart) == null ? void 0 : bt.xAxis) == null ? void 0 : At.tickCount) ?? 8,
609
- showXAxis: L
610
- }), O.add(N), K(), I(), N;
611
- };
612
- return {
613
- container: n,
614
- getPane(e) {
615
- return g.get(e);
616
- },
617
- getPanes() {
618
- return Array.from(g.values());
619
- },
620
- getMaster() {
621
- return Z;
622
- },
623
- getGroup() {
624
- return O;
625
- },
626
- fitAll(e) {
627
- O.fitAll(e);
628
- },
629
- resetAll() {
630
- O.resetAll();
631
- },
632
- resize() {
633
- I();
634
- },
635
- getPaneRatios() {
636
- const e = {};
637
- for (let i = 0; i < u.length; i++)
638
- e[u[i]] = f[i];
639
- return e;
640
- },
641
- setPaneRatios(e) {
642
- for (let i = 0; i < u.length; i++) {
643
- const s = u[i];
644
- e[s] !== void 0 && (f[i] = e[s]);
645
- }
646
- ne(v, f, a), I();
647
- },
648
- setSyncAxis(e) {
649
- O.syncAxis(e);
650
- },
651
- getSyncAxis() {
652
- return O.getOptions().axis ?? "x";
653
- },
654
- setSyncOptions(e) {
655
- O.updateOptions(e);
656
- },
657
- whenReady() {
658
- return ct();
659
- },
660
- exportImage(e) {
661
- return lt(e);
662
- },
663
- snapshot(e) {
664
- return lt(e);
665
- },
666
- addPane(e) {
667
- return dt(e);
668
- },
669
- async addIndicator(e, i = {}) {
670
- var L;
671
- const s = g.get(r) ?? Z;
672
- if (i.pane !== "new")
673
- return { ...await Bt(s, e, i), chart: s };
674
- const c = _t(s, i.sourceSeriesId), { x: p, prices: C } = Ot(c), P = await jt(e, p, C, {
675
- id: i.id ?? e,
676
- label: i.label ?? e.toUpperCase(),
677
- height: i.paneHeight ?? 0.25,
678
- showXAxis: i.showXAxis,
679
- period: i.period,
680
- fastPeriod: i.fastPeriod,
681
- slowPeriod: i.slowPeriod,
682
- signalPeriod: i.signalPeriod,
683
- stdDev: i.stdDev
684
- }, c), Y = dt(P);
685
- return {
686
- id: P.id,
687
- preset: e,
688
- placement: "oscillator",
689
- seriesIds: ((L = P.series) == null ? void 0 : L.map((j) => j.id)) ?? [],
690
- paneId: P.id,
691
- chart: Y
692
- };
693
- },
694
- destroy() {
695
- A && cancelAnimationFrame(A), x && cancelAnimationFrame(x), U.disconnect(), w == null || w.destroy(), O.destroy();
696
- for (const e of g.values()) e.destroy();
697
- g.clear(), n.replaceChildren();
698
- }
699
- };
700
- }
701
- export {
702
- ot as S,
703
- rt as a,
704
- fe as c
705
- };
706
- //# sourceMappingURL=createStackedChart-DJSmqerD.js.map