velo-plot 2.20.0 → 3.1.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 (287) hide show
  1. package/README.md +26 -12
  2. package/dist/ChartCore-AnR_3Xkb.js +7338 -0
  3. package/dist/ChartCore-AnR_3Xkb.js.map +1 -0
  4. package/dist/GpuChartRenderer-Dxc0hrQA.js +75 -0
  5. package/dist/GpuChartRenderer-Dxc0hrQA.js.map +1 -0
  6. package/dist/{index.core-COREBDNq.js → PluginRegistry-CzMHebYP.js} +24 -38
  7. package/dist/PluginRegistry-CzMHebYP.js.map +1 -0
  8. package/dist/a11y-Bw6urYpr.js +105 -0
  9. package/dist/a11y-Bw6urYpr.js.map +1 -0
  10. package/dist/angular/hooks-entry.d.ts +1 -0
  11. package/dist/angular/hooks.d.ts +26 -0
  12. package/dist/angular/index.d.ts +8 -0
  13. package/dist/angular/velo-plot.component.d.ts +46 -0
  14. package/dist/angular-hooks.d.ts +1 -0
  15. package/dist/angular-hooks.js +9 -0
  16. package/dist/angular-hooks.js.map +1 -0
  17. package/dist/angular.d.ts +1 -0
  18. package/dist/angular.js +166 -0
  19. package/dist/angular.js.map +1 -0
  20. package/dist/assets/indicator.worker-bv0zC4EX.js.map +1 -1
  21. package/dist/astro/StackedPlot.astro +19 -0
  22. package/dist/astro/VeloPlot.astro +23 -0
  23. package/dist/{axisFormat-CzumxpCL.js → axisFormat-Sz4WIJfQ.js} +2 -2
  24. package/dist/{axisFormat-CzumxpCL.js.map → axisFormat-Sz4WIJfQ.js.map} +1 -1
  25. package/dist/bindings/shared/a11y.d.ts +26 -0
  26. package/dist/bindings/shared/chartLifecycle.d.ts +16 -0
  27. package/dist/bindings/shared/chartSyncBridge.d.ts +8 -0
  28. package/dist/bindings/shared/dimensions.d.ts +1 -0
  29. package/dist/bindings/shared/index.d.ts +9 -0
  30. package/dist/bindings/shared/indicatorBridge.d.ts +11 -0
  31. package/dist/bindings/shared/optionsSync.d.ts +7 -0
  32. package/dist/bindings/shared/seriesDiff.d.ts +8 -0
  33. package/dist/bindings/shared/stackedSync.d.ts +9 -0
  34. package/dist/bindings/shared/types.d.ts +46 -0
  35. package/dist/bindings/test-utils/index.d.ts +35 -0
  36. package/dist/bindings/test-utils/mockLifecycle.d.ts +120 -0
  37. package/dist/bindings/test-utils/vitestSveltePlugin.d.ts +3 -0
  38. package/dist/chartSyncBridge-D_rCtbFq.js +58 -0
  39. package/dist/chartSyncBridge-D_rCtbFq.js.map +1 -0
  40. package/dist/core/Chart.d.ts +1 -1
  41. package/dist/core/ChartStatistics.d.ts +1 -1
  42. package/dist/core/InteractionManager.d.ts +7 -1
  43. package/dist/core/OverlayRenderer.d.ts +5 -0
  44. package/dist/core/annotations/types.d.ts +1 -1
  45. package/dist/core/chart/ChartCore.d.ts +14 -19
  46. package/dist/core/chart/ChartFeatureHooks.d.ts +7 -0
  47. package/dist/core/chart/chartExportPatch.d.ts +2 -0
  48. package/dist/core/chart/overlaySeriesRegistry.d.ts +7 -0
  49. package/dist/core/chart/series/SeriesActions.d.ts +1 -0
  50. package/dist/core/chart/series/SeriesBufferLite.d.ts +13 -0
  51. package/dist/core/chart/series/seriesOptionsRegistry.d.ts +8 -0
  52. package/dist/core/chart/series/seriesTypeRegistry.d.ts +5 -0
  53. package/dist/core/chart/types.d.ts +1 -1
  54. package/dist/core/clipboard/index.d.ts +1 -1
  55. package/dist/core/debug/index.d.ts +1 -1
  56. package/dist/core/keybindings/index.d.ts +1 -1
  57. package/dist/core/loading/index.d.ts +1 -1
  58. package/dist/core/locale/index.d.ts +1 -1
  59. package/dist/core/stacked/paneResize.d.ts +3 -0
  60. package/dist/core/stacked/types.d.ts +10 -0
  61. package/dist/core/theme-editor/index.d.ts +1 -1
  62. package/dist/createStackedChart-DqcLCFGS.js +1338 -0
  63. package/dist/createStackedChart-DqcLCFGS.js.map +1 -0
  64. package/dist/examples/PluginDemonstration.d.ts +1 -1
  65. package/dist/hooks-DH-3bewj.js +69 -0
  66. package/dist/hooks-DH-3bewj.js.map +1 -0
  67. package/dist/{index-BBpJwOct.js → index-0InEyj0q.js} +119 -121
  68. package/dist/index-0InEyj0q.js.map +1 -0
  69. package/dist/{index-qunX30Xu.js → index-B7PTX94B.js} +2133 -2133
  70. package/dist/index-B7PTX94B.js.map +1 -0
  71. package/dist/{index-BMiZoKmm.js → index-BgrvqltV.js} +67 -67
  72. package/dist/index-BgrvqltV.js.map +1 -0
  73. package/dist/{index-DoYxf1cV.js → index-CWxIHdwX.js} +38 -98
  74. package/dist/index-CWxIHdwX.js.map +1 -0
  75. package/dist/index-CaXWSOTk.js.map +1 -1
  76. package/dist/{mockDatafeed-927foCM4.js → index-Cv6ZDLWf.js} +227 -217
  77. package/dist/index-Cv6ZDLWf.js.map +1 -0
  78. package/dist/index-Dag88bW4.js.map +1 -1
  79. package/dist/index-qhscKTDy.js.map +1 -1
  80. package/dist/index.core.d.ts +9 -7
  81. package/dist/index.d.ts +2 -15
  82. package/dist/indicators--eJGmVox.js.map +1 -1
  83. package/dist/optionsSync-QUiN4Inw.js +119 -0
  84. package/dist/optionsSync-QUiN4Inw.js.map +1 -0
  85. package/dist/plugins/3d/index.d.ts +2 -2
  86. package/dist/plugins/3d.d.ts +2 -2
  87. package/dist/plugins/3d.js +3 -1
  88. package/dist/plugins/3d.js.map +1 -1
  89. package/dist/plugins/analysis/index.d.ts +1 -1
  90. package/dist/plugins/analysis/indicators.d.ts +1 -1
  91. package/dist/plugins/analysis.d.ts +2 -2
  92. package/dist/plugins/analysis.js +2 -2
  93. package/dist/plugins/analysis.js.map +1 -1
  94. package/dist/plugins/annotations/index.d.ts +1 -1
  95. package/dist/plugins/annotations.d.ts +2 -2
  96. package/dist/plugins/annotations.js.map +1 -1
  97. package/dist/plugins/anomaly-detection.js +1 -1
  98. package/dist/plugins/anomaly-detection.js.map +1 -1
  99. package/dist/plugins/broken-axis.d.ts +2 -2
  100. package/dist/plugins/builtins/crosshair/CrosshairPlugin.d.ts +1 -1
  101. package/dist/plugins/builtins/index.d.ts +1 -1
  102. package/dist/plugins/caching.d.ts +2 -2
  103. package/dist/plugins/clipboard/index.d.ts +2 -2
  104. package/dist/plugins/clipboard.d.ts +2 -2
  105. package/dist/plugins/clipboard.js.map +1 -1
  106. package/dist/plugins/context-menu/index.d.ts +1 -1
  107. package/dist/plugins/context-menu.d.ts +2 -2
  108. package/dist/plugins/context-menu.js +1 -1
  109. package/dist/plugins/context-menu.js.map +1 -1
  110. package/dist/plugins/createPlugin.d.ts +8 -0
  111. package/dist/plugins/data-export/index.d.ts +1 -1
  112. package/dist/plugins/data-export.d.ts +2 -2
  113. package/dist/plugins/data-export.js +2 -2
  114. package/dist/plugins/data-export.js.map +1 -1
  115. package/dist/plugins/data-transform.d.ts +2 -2
  116. package/dist/plugins/data-transform.js +19 -19
  117. package/dist/plugins/data-transform.js.map +1 -1
  118. package/dist/plugins/debug/index.d.ts +2 -2
  119. package/dist/plugins/debug.d.ts +2 -2
  120. package/dist/plugins/debug.js +33 -33
  121. package/dist/plugins/debug.js.map +1 -1
  122. package/dist/plugins/forecasting/index.d.ts +1 -1
  123. package/dist/plugins/forecasting.js.map +1 -1
  124. package/dist/plugins/gpu/index.d.ts +2 -2
  125. package/dist/plugins/gpu.d.ts +2 -2
  126. package/dist/plugins/gpu.js +2033 -209
  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 +286 -23
  131. package/dist/plugins/i18n.js.map +1 -1
  132. package/dist/plugins/index.d.ts +1 -1
  133. package/dist/plugins/keyboard.d.ts +2 -2
  134. package/dist/plugins/keyboard.js +65 -5
  135. package/dist/plugins/keyboard.js.map +1 -1
  136. package/dist/plugins/latex.js +766 -207
  137. package/dist/plugins/latex.js.map +1 -1
  138. package/dist/plugins/lazy-load.d.ts +2 -2
  139. package/dist/plugins/loading/index.d.ts +2 -3
  140. package/dist/plugins/loading.d.ts +2 -2
  141. package/dist/plugins/loading.js +3 -4
  142. package/dist/plugins/ml-integration.d.ts +2 -2
  143. package/dist/plugins/ml-integration.js +5 -5
  144. package/dist/plugins/ml-integration.js.map +1 -1
  145. package/dist/plugins/offscreen.d.ts +2 -2
  146. package/dist/plugins/offscreen.js +11 -10
  147. package/dist/plugins/offscreen.js.map +1 -1
  148. package/dist/plugins/pattern-recognition.d.ts +2 -2
  149. package/dist/plugins/pattern-recognition.js +1 -1
  150. package/dist/plugins/pattern-recognition.js.map +1 -1
  151. package/dist/plugins/radar.d.ts +2 -2
  152. package/dist/plugins/regression.d.ts +2 -2
  153. package/dist/plugins/regression.js +255 -257
  154. package/dist/plugins/regression.js.map +1 -1
  155. package/dist/plugins/roi.js +9 -9
  156. package/dist/plugins/roi.js.map +1 -1
  157. package/dist/plugins/snapshot/index.d.ts +1 -1
  158. package/dist/plugins/snapshot/types.d.ts +1 -1
  159. package/dist/plugins/snapshot.d.ts +2 -2
  160. package/dist/plugins/snapshot.js.map +1 -1
  161. package/dist/plugins/streaming/index.d.ts +2 -2
  162. package/dist/plugins/streaming.d.ts +2 -2
  163. package/dist/plugins/streaming.js +1 -1
  164. package/dist/plugins/sync/index.d.ts +3 -2
  165. package/dist/plugins/sync.d.ts +2 -2
  166. package/dist/plugins/sync.js.map +1 -1
  167. package/dist/plugins/theme-editor/index.d.ts +1 -1
  168. package/dist/plugins/theme-editor.d.ts +2 -2
  169. package/dist/plugins/tools/index.d.ts +1 -1
  170. package/dist/plugins/tools/tooltip/index.d.ts +1 -1
  171. package/dist/plugins/tools.d.ts +2 -2
  172. package/dist/plugins/tools.js +1 -1
  173. package/dist/plugins/types.d.ts +1 -1
  174. package/dist/plugins/video-recorder.d.ts +2 -2
  175. package/dist/plugins/virtualization.d.ts +2 -2
  176. package/dist/plugins/virtualization.js +1 -1
  177. package/dist/pool-DZ8shSqv.js +109 -0
  178. package/dist/pool-DZ8shSqv.js.map +1 -0
  179. package/dist/react/StackedPlot.d.ts +31 -0
  180. package/dist/react/VeloPlot.d.ts +29 -0
  181. package/dist/react/index.d.ts +25 -3
  182. package/dist/react/useChartSync.d.ts +8 -0
  183. package/dist/react/useIndicator.d.ts +12 -0
  184. package/dist/react/useVeloPlot.d.ts +19 -0
  185. package/dist/react.js +325 -24
  186. package/dist/react.js.map +1 -1
  187. package/dist/renderer/NativeWebGLRenderer.d.ts +2 -1
  188. package/dist/renderer/native/NativeWebGLRenderer.d.ts +5 -1
  189. package/dist/renderer/native/draw.d.ts +2 -47
  190. package/dist/renderer/native/drawCore.d.ts +27 -0
  191. package/dist/renderer/native/drawExtended.d.ts +29 -0
  192. package/dist/renderer/native/frameRenderExtended.d.ts +1 -0
  193. package/dist/renderer/native/frameRenderRegistry.d.ts +27 -0
  194. package/dist/renderer/native/programFactoryCore.d.ts +6 -0
  195. package/dist/renderer/native/programFactoryExtended.d.ts +4 -0
  196. package/dist/renderer/native/utils.d.ts +3 -29
  197. package/dist/renderer/native/utilsCore.d.ts +14 -0
  198. package/dist/renderer/native/utilsExtended.d.ts +17 -0
  199. package/dist/renderer/overlaySeriesExtended.d.ts +1 -0
  200. package/dist/renderer/registerExtendedSeries.d.ts +1 -0
  201. package/dist/renderer/registerWebGPU.d.ts +2 -0
  202. package/dist/renderer/seriesBufferExtended.d.ts +4 -0
  203. package/dist/scientific/index.d.ts +44 -0
  204. package/dist/scientific/registerScientific.d.ts +1 -0
  205. package/dist/scientific.d.ts +1 -0
  206. package/dist/scientific.js +91 -0
  207. package/dist/scientific.js.map +1 -0
  208. package/dist/solid/VeloPlot.d.ts +16 -0
  209. package/dist/solid/index.d.ts +13 -0
  210. package/dist/solid/useChartSync.d.ts +6 -0
  211. package/dist/solid/useIndicator.d.ts +11 -0
  212. package/dist/solid/useStackedPlot.d.ts +14 -0
  213. package/dist/solid/useVeloPlot.d.ts +18 -0
  214. package/dist/solid.d.ts +1 -0
  215. package/dist/solid.js +169 -0
  216. package/dist/solid.js.map +1 -0
  217. package/dist/stackedSync-tnrunZMt.js +100 -0
  218. package/dist/stackedSync-tnrunZMt.js.map +1 -0
  219. package/dist/svelte/StackedPlot.svelte +29 -0
  220. package/dist/svelte/StackedPlot.test.ts +114 -0
  221. package/dist/svelte/VeloPlot.svelte +44 -0
  222. package/dist/svelte/VeloPlot.test.ts +105 -0
  223. package/dist/svelte/index.d.ts +11 -0
  224. package/dist/svelte/index.test.ts +20 -0
  225. package/dist/svelte/index.ts +15 -0
  226. package/dist/svelte/useChartSync.d.ts +8 -0
  227. package/dist/svelte/useChartSync.test.ts +49 -0
  228. package/dist/svelte/useChartSync.ts +29 -0
  229. package/dist/svelte/useIndicator.d.ts +13 -0
  230. package/dist/svelte/useIndicator.test.ts +67 -0
  231. package/dist/svelte/useIndicator.ts +43 -0
  232. package/dist/svelte/useStackedPlot.d.ts +16 -0
  233. package/dist/svelte/useStackedPlot.test.ts +76 -0
  234. package/dist/svelte/useStackedPlot.ts +54 -0
  235. package/dist/svelte/useVeloPlot.d.ts +21 -0
  236. package/dist/svelte/useVeloPlot.test.ts +100 -0
  237. package/dist/svelte/useVeloPlot.ts +81 -0
  238. package/dist/svelte.d.ts +1 -0
  239. package/dist/svelte.js +140 -0
  240. package/dist/svelte.js.map +1 -0
  241. package/dist/testing/index.d.ts +1 -1
  242. package/dist/theme/index.d.ts +2 -1
  243. package/dist/trading/index.d.ts +1 -4
  244. package/dist/trading/registerTrading.d.ts +3 -0
  245. package/dist/trading.js +42 -42
  246. package/dist/types.d.ts +4 -4
  247. package/dist/{utils-BK5UUXxj.js → utils-Dx0h0bgQ.js} +9 -9
  248. package/dist/{utils-BK5UUXxj.js.map → utils-Dx0h0bgQ.js.map} +1 -1
  249. package/dist/velo-plot.full.js +2216 -1346
  250. package/dist/velo-plot.full.js.map +1 -1
  251. package/dist/velo-plot.js +33 -28
  252. package/dist/velo-plot.js.map +1 -1
  253. package/dist/vue/StackedPlot.vue.d.ts +48 -0
  254. package/dist/vue/VeloPlot.vue.d.ts +64 -0
  255. package/dist/vue/index.d.ts +250 -0
  256. package/dist/vue/useChartSync.d.ts +52 -0
  257. package/dist/vue/useIndicator.d.ts +23 -0
  258. package/dist/vue/useStackedPlot.d.ts +15 -0
  259. package/dist/vue/useVeloPlot.d.ts +20 -0
  260. package/dist/vue.d.ts +1 -0
  261. package/dist/vue.js +309 -0
  262. package/dist/vue.js.map +1 -0
  263. package/dist/workers/indicatorsAsync.d.ts +2 -0
  264. package/dist/workers/pool.d.ts +9 -0
  265. package/package.json +96 -10
  266. package/dist/ChartCore-ivzLqxVb.js +0 -8350
  267. package/dist/ChartCore-ivzLqxVb.js.map +0 -1
  268. package/dist/SciPlot-CEU4ApgD.js +0 -463
  269. package/dist/SciPlot-CEU4ApgD.js.map +0 -1
  270. package/dist/createStackedChart-DxNW0VkF.js +0 -705
  271. package/dist/createStackedChart-DxNW0VkF.js.map +0 -1
  272. package/dist/gpuRenderer-BpaMYz-k.js +0 -1848
  273. package/dist/gpuRenderer-BpaMYz-k.js.map +0 -1
  274. package/dist/index-BBpJwOct.js.map +0 -1
  275. package/dist/index-BMiZoKmm.js.map +0 -1
  276. package/dist/index-DoYxf1cV.js.map +0 -1
  277. package/dist/index-qunX30Xu.js.map +0 -1
  278. package/dist/index-x4stH3jD.js +0 -282
  279. package/dist/index-x4stH3jD.js.map +0 -1
  280. package/dist/index.core-COREBDNq.js.map +0 -1
  281. package/dist/mockDatafeed-927foCM4.js.map +0 -1
  282. package/dist/pool-15HMCNv8.js +0 -88
  283. package/dist/pool-15HMCNv8.js.map +0 -1
  284. package/dist/react/SciPlot.d.ts +0 -60
  285. package/dist/react/useSciPlot.d.ts +0 -56
  286. package/dist/symbols-DT0eLlpW.js +0 -568
  287. package/dist/symbols-DT0eLlpW.js.map +0 -1
package/dist/react.js CHANGED
@@ -1,31 +1,332 @@
1
- import { S as x, u as C } from "./SciPlot-CEU4ApgD.js";
2
- import { useRef as n, useState as a, useEffect as k, useCallback as f } from "react";
3
- import { c as m } from "./createStackedChart-DxNW0VkF.js";
4
- function A(c) {
5
- const s = n(null), r = n(null), [i, l] = a(null), [d, u] = a(!1), o = n(c);
6
- o.current = c, k(() => {
7
- const t = s.current;
8
- if (!t) return;
9
- const e = m({
10
- ...o.current,
11
- container: t
1
+ import { jsx as O, jsxs as A } from "react/jsx-runtime";
2
+ import { useState as R, useRef as m, useEffect as b, useCallback as E, forwardRef as F, useImperativeHandle as K, useMemo as T } from "react";
3
+ import { p as B, o as j, s as G, d as H } from "./optionsSync-QUiN4Inw.js";
4
+ import { c as J, a as X, i as Y, r as Z, b as q } from "./chartSyncBridge-D_rCtbFq.js";
5
+ import { a as D, u as L } from "./a11y-Bw6urYpr.js";
6
+ import { s as P, b as z, a as Q } from "./stackedSync-tnrunZMt.js";
7
+ import { c as U } from "./createStackedChart-DqcLCFGS.js";
8
+ function I(a, t = {}) {
9
+ const [l, n] = R(null), [i, p] = R(!1), [S, C] = R(null), [y, d] = R(null), c = m(null), o = m(null), v = m(t), x = m(B(t));
10
+ v.current = t, b(() => {
11
+ const r = a.current;
12
+ if (r) {
13
+ try {
14
+ const e = J(
15
+ r,
16
+ v.current,
17
+ {
18
+ onBoundsChange: d,
19
+ onError: C
20
+ }
21
+ );
22
+ c.current = e.chart, o.current = e.destroy, n(e.chart), p(!0), d(e.getBounds()), C(null), x.current = B(v.current);
23
+ } catch (e) {
24
+ console.error("[useVeloPlot] Failed to initialize chart:", e), C(e instanceof Error ? e : new Error(String(e))), p(!1);
25
+ }
26
+ return () => {
27
+ var e;
28
+ (e = o.current) == null || e.call(o), o.current = null, c.current = null, n(null), p(!1);
29
+ };
30
+ }
31
+ }, [a]), b(() => {
32
+ const r = c.current;
33
+ if (!r || !i) return;
34
+ const e = B(t), k = x.current;
35
+ j(k, e) && (G(r, k, e), x.current = e);
36
+ });
37
+ const s = E((r) => {
38
+ const e = c.current;
39
+ e && (e.addSeries(r), d(e.getViewBounds()));
40
+ }, []), f = E((r, e) => {
41
+ var k;
42
+ (k = c.current) == null || k.updateSeries(r, e);
43
+ }, []), g = E((r) => {
44
+ var e;
45
+ (e = c.current) == null || e.removeSeries(r);
46
+ }, []), u = E((r) => {
47
+ var e;
48
+ (e = c.current) == null || e.zoom(r);
49
+ }, []), h = E(() => {
50
+ const r = c.current;
51
+ r && (r.resetZoom(), d(r.getViewBounds()));
52
+ }, []);
53
+ return {
54
+ chart: l,
55
+ isReady: i,
56
+ error: S,
57
+ bounds: y,
58
+ addSeries: s,
59
+ updateSeries: f,
60
+ removeSeries: g,
61
+ zoom: u,
62
+ resetZoom: h
63
+ };
64
+ }
65
+ const N = F(
66
+ function({
67
+ series: t = [],
68
+ zoom: l,
69
+ onZoomChange: n,
70
+ cursor: i,
71
+ width: p = "100%",
72
+ height: S = 400,
73
+ className: C = "",
74
+ style: y = {},
75
+ debug: d = !1,
76
+ ariaLabel: c,
77
+ keyboardNav: o = !0,
78
+ ...v
79
+ }, x) {
80
+ const s = m(null), f = m(/* @__PURE__ */ new Map()), g = m(null), {
81
+ chart: u,
82
+ isReady: h,
83
+ bounds: r,
84
+ addSeries: e,
85
+ updateSeries: k,
86
+ removeSeries: V,
87
+ resetZoom: $
88
+ } = I(s, v);
89
+ K(
90
+ x,
91
+ () => ({
92
+ getChart: () => u,
93
+ resetZoom: $,
94
+ getBounds: () => r
95
+ }),
96
+ [u, $, r]
97
+ ), b(() => {
98
+ !h || !u || (f.current = H(
99
+ { addSeries: e, updateSeries: k, removeSeries: V, autoScale: () => u.autoScale() },
100
+ t,
101
+ f.current
102
+ ));
103
+ }, [t, h, u, e, k, V]), b(() => {
104
+ !h || !u || !l || u.zoom(l);
105
+ }, [h, u, l]), b(() => {
106
+ if (!h || !u || !n) return;
107
+ const M = (w) => {
108
+ n({
109
+ xMin: w.x[0],
110
+ xMax: w.x[1],
111
+ yMin: w.y[0],
112
+ yMax: w.y[1]
113
+ });
114
+ };
115
+ return u.on("zoom", M), () => u.off("zoom", M);
116
+ }, [h, u, n]), b(() => {
117
+ !h || !u || (i != null && i.enabled ? u.enableCursor(i) : u.disableCursor());
118
+ }, [h, u, i]), b(() => {
119
+ const M = s.current;
120
+ if (!(!h || !u || !M))
121
+ return g.current = D(M, u, {
122
+ label: c,
123
+ series: t,
124
+ bounds: r,
125
+ enableKeyboard: o
126
+ }), () => {
127
+ var w;
128
+ (w = g.current) == null || w.cleanup(), g.current = null;
129
+ };
130
+ }, [h, u, o, c, r, t]), b(() => {
131
+ const M = s.current;
132
+ !M || !g.current || L(M, g.current.srTable, {
133
+ label: c,
134
+ series: t,
135
+ bounds: r
136
+ });
137
+ }, [t, r, c]);
138
+ const _ = T(
139
+ () => ({
140
+ position: "relative",
141
+ width: typeof p == "number" ? `${p}px` : p,
142
+ height: typeof S == "number" ? `${S}px` : S,
143
+ outline: "none",
144
+ ...y
145
+ }),
146
+ [p, S, y]
147
+ );
148
+ return /* @__PURE__ */ O(
149
+ "div",
150
+ {
151
+ ref: s,
152
+ className: `velo-plot-container ${C}`,
153
+ style: _,
154
+ children: d && r && /* @__PURE__ */ A(
155
+ "div",
156
+ {
157
+ style: {
158
+ position: "absolute",
159
+ top: 8,
160
+ right: 8,
161
+ background: "rgba(0,0,0,0.7)",
162
+ color: "#0f0",
163
+ padding: "4px 8px",
164
+ borderRadius: 4,
165
+ fontSize: 11,
166
+ fontFamily: "monospace",
167
+ pointerEvents: "none"
168
+ },
169
+ children: [
170
+ /* @__PURE__ */ A("div", { children: [
171
+ "X: [",
172
+ r.xMin.toFixed(3),
173
+ ", ",
174
+ r.xMax.toFixed(3),
175
+ "]"
176
+ ] }),
177
+ /* @__PURE__ */ A("div", { children: [
178
+ "Y: [",
179
+ r.yMin.toExponential(2),
180
+ ", ",
181
+ r.yMax.toExponential(2),
182
+ "]"
183
+ ] }),
184
+ /* @__PURE__ */ A("div", { children: [
185
+ "Series: ",
186
+ t.length
187
+ ] })
188
+ ]
189
+ }
190
+ )
191
+ }
192
+ );
193
+ }
194
+ );
195
+ function W(a) {
196
+ const t = m(null), l = m(null), n = m(null), [i, p] = R(null), [S, C] = R(!1), y = m(a), d = m(P(a.panes)), c = m(/* @__PURE__ */ new Map());
197
+ y.current = a;
198
+ const o = E(() => {
199
+ var g;
200
+ const s = t.current;
201
+ if (!s) return;
202
+ (g = n.current) == null || g.call(n);
203
+ const f = U({
204
+ ...y.current,
205
+ container: s
12
206
  });
13
- return r.current = e, l(e), e.whenReady().then(() => u(!0)), () => {
14
- u(!1), e.destroy(), r.current = null, l(null);
15
- };
207
+ l.current = f, n.current = () => {
208
+ f.destroy(), l.current = null;
209
+ }, p(f), d.current = P(y.current.panes), c.current = z(
210
+ f,
211
+ y.current.panes,
212
+ /* @__PURE__ */ new Map()
213
+ ), f.whenReady().then(() => C(!0));
16
214
  }, []);
17
- const R = f((t) => {
18
- var e;
19
- (e = r.current) == null || e.fitAll(t);
20
- }, []), S = f(() => {
21
- var t;
22
- (t = r.current) == null || t.resetAll();
215
+ b(() => (o(), () => {
216
+ var s;
217
+ C(!1), (s = n.current) == null || s.call(n), n.current = null, p(null);
218
+ }), [o]), b(() => {
219
+ const s = l.current;
220
+ if (!s || !S) return;
221
+ if (P(a.panes) !== d.current) {
222
+ o();
223
+ return;
224
+ }
225
+ Q(s, a), c.current = z(
226
+ s,
227
+ a.panes,
228
+ c.current
229
+ );
230
+ });
231
+ const v = E((s) => {
232
+ var f;
233
+ (f = l.current) == null || f.fitAll(s);
234
+ }, []), x = E(() => {
235
+ var s;
236
+ (s = l.current) == null || s.resetAll();
23
237
  }, []);
24
- return { containerRef: s, stack: i, isReady: d, fitAll: R, resetAll: S };
238
+ return { containerRef: t, stack: i, isReady: S, fitAll: v, resetAll: x };
239
+ }
240
+ const ae = F(
241
+ function({
242
+ width: t = "100%",
243
+ height: l = 480,
244
+ className: n = "",
245
+ style: i = {},
246
+ indicators: p,
247
+ onCrosshairMove: S,
248
+ drawingTools: C,
249
+ ariaLabel: y,
250
+ panes: d,
251
+ ...c
252
+ }, o) {
253
+ const { containerRef: v, stack: x, isReady: s, fitAll: f, resetAll: g } = W({
254
+ panes: d,
255
+ ...c
256
+ });
257
+ K(
258
+ o,
259
+ () => ({
260
+ getStack: () => x,
261
+ fitAll: () => f(),
262
+ resetAll: g,
263
+ getBounds: () => (x == null ? void 0 : x.getMaster().getViewBounds()) ?? null
264
+ }),
265
+ [x, f, g]
266
+ );
267
+ const u = T(
268
+ () => ({
269
+ position: "relative",
270
+ width: typeof t == "number" ? `${t}px` : t,
271
+ height: typeof l == "number" ? `${l}px` : l,
272
+ ...i
273
+ }),
274
+ [t, l, i]
275
+ );
276
+ return /* @__PURE__ */ O(
277
+ "div",
278
+ {
279
+ ref: v,
280
+ className: `velo-plot-stacked ${n}`,
281
+ style: u,
282
+ role: "img",
283
+ "aria-label": y ?? `Stacked chart with ${d.length} panes`,
284
+ "data-ready": s ? "true" : "false"
285
+ }
286
+ );
287
+ }
288
+ );
289
+ function le(a, t, l = {}) {
290
+ const [n, i] = R(null), [p, S] = R(!1), [C, y] = R(null), d = m(n);
291
+ return d.current = n, b(() => {
292
+ if (!a) return;
293
+ let c = !1;
294
+ return S(!0), y(null), X(a, t, l).then((o) => {
295
+ c || (i(o), S(!1));
296
+ }).catch((o) => {
297
+ c || (y(o instanceof Error ? o : new Error(String(o))), S(!1));
298
+ }), () => {
299
+ c = !0;
300
+ const o = d.current;
301
+ o && !Y(a) && Z(a, o.id);
302
+ };
303
+ }, [a, t, JSON.stringify(l)]), { result: n, isLoading: p, error: C };
304
+ }
305
+ function ee(a, t) {
306
+ const [l, n] = R(null);
307
+ return b(() => {
308
+ if (a.length < 2) {
309
+ n(null);
310
+ return;
311
+ }
312
+ const i = q(a, t);
313
+ return n(i.group), () => {
314
+ i.destroy(), n(null);
315
+ };
316
+ }, [a, JSON.stringify(t)]), { group: l };
25
317
  }
318
+ const ie = ee, fe = N, de = N, pe = I, Se = I;
26
319
  export {
27
- x as SciPlot,
28
- C as useSciPlot,
29
- A as useStackedPlot
320
+ de as SciChart,
321
+ fe as SciPlot,
322
+ ae as StackedPlot,
323
+ N as VeloPlot,
324
+ ie as useChartGroup,
325
+ ee as useChartSync,
326
+ le as useIndicator,
327
+ Se as useSciChart,
328
+ pe as useSciPlot,
329
+ W as useStackedPlot,
330
+ I as useVeloPlot
30
331
  };
31
332
  //# sourceMappingURL=react.js.map
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sources":["../src/react/useStackedPlot.ts"],"sourcesContent":["/**\n * useStackedPlot - React hook for multi-pane stacked charts\n */\n\nimport {\n useEffect,\n useRef,\n useState,\n useCallback,\n type RefObject,\n} from \"react\";\nimport { createStackedChart } from \"../core/stacked\";\nimport type { StackedChart, StackedChartOptions } from \"../core/stacked\";\nimport type { Range } from \"../types\";\n\nexport interface UseStackedPlotOptions extends Omit<StackedChartOptions, \"container\"> {}\n\nexport interface UseStackedPlotReturn {\n containerRef: RefObject<HTMLDivElement>;\n stack: StackedChart | null;\n isReady: boolean;\n fitAll: (options?: { x?: Range; padding?: number }) => void;\n resetAll: () => void;\n}\n\nexport function useStackedPlot(\n options: UseStackedPlotOptions,\n): UseStackedPlotReturn {\n const containerRef = useRef<HTMLDivElement>(null);\n const stackRef = useRef<StackedChart | null>(null);\n const [stack, setStack] = useState<StackedChart | null>(null);\n const [isReady, setIsReady] = useState(false);\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const created = createStackedChart({\n ...optionsRef.current,\n container: el,\n });\n stackRef.current = created;\n setStack(created);\n\n created.whenReady().then(() => setIsReady(true));\n\n return () => {\n setIsReady(false);\n created.destroy();\n stackRef.current = null;\n setStack(null);\n };\n }, []);\n\n const fitAll = useCallback((opts?: { x?: Range; padding?: number }) => {\n stackRef.current?.fitAll(opts);\n }, []);\n\n const resetAll = useCallback(() => {\n stackRef.current?.resetAll();\n }, []);\n\n return { containerRef, stack, isReady, fitAll, resetAll };\n}\n"],"names":["useStackedPlot","options","containerRef","useRef","stackRef","stack","setStack","useState","isReady","setIsReady","optionsRef","useEffect","el","created","createStackedChart","fitAll","useCallback","opts","_a","resetAll"],"mappings":";;;AAyBO,SAASA,EACdC,GACsB;AACtB,QAAMC,IAAeC,EAAuB,IAAI,GAC1CC,IAAWD,EAA4B,IAAI,GAC3C,CAACE,GAAOC,CAAQ,IAAIC,EAA8B,IAAI,GACtD,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAK,GACtCG,IAAaP,EAAOF,CAAO;AACjC,EAAAS,EAAW,UAAUT,GAErBU,EAAU,MAAM;AACd,UAAMC,IAAKV,EAAa;AACxB,QAAI,CAACU,EAAI;AAET,UAAMC,IAAUC,EAAmB;AAAA,MACjC,GAAGJ,EAAW;AAAA,MACd,WAAWE;AAAA,IAAA,CACZ;AACD,WAAAR,EAAS,UAAUS,GACnBP,EAASO,CAAO,GAEhBA,EAAQ,YAAY,KAAK,MAAMJ,EAAW,EAAI,CAAC,GAExC,MAAM;AACX,MAAAA,EAAW,EAAK,GAChBI,EAAQ,QAAA,GACRT,EAAS,UAAU,MACnBE,EAAS,IAAI;AAAA,IACf;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAMS,IAASC,EAAY,CAACC,MAA2C;;AACrE,KAAAC,IAAAd,EAAS,YAAT,QAAAc,EAAkB,OAAOD;AAAA,EAC3B,GAAG,CAAA,CAAE,GAECE,IAAWH,EAAY,MAAM;;AACjC,KAAAE,IAAAd,EAAS,YAAT,QAAAc,EAAkB;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,SAAO,EAAE,cAAAhB,GAAc,OAAAG,GAAO,SAAAG,GAAS,QAAAO,GAAQ,UAAAI,EAAA;AACjD;"}
1
+ {"version":3,"file":"react.js","sources":["../src/react/useVeloPlot.ts","../src/react/VeloPlot.tsx","../src/react/useStackedPlot.ts","../src/react/StackedPlot.tsx","../src/react/useIndicator.ts","../src/react/useChartSync.ts","../src/react/index.ts"],"sourcesContent":["/**\n * useVeloPlot - React hook for Velo Plot\n */\n\nimport {\n useEffect,\n useRef,\n useState,\n useCallback,\n type RefObject,\n} from \"react\";\nimport type { Chart } from \"../core/Chart\";\nimport type {\n SeriesOptions,\n SeriesUpdateData,\n ZoomOptions,\n Bounds,\n} from \"../types\";\nimport {\n createChartLifecycle,\n type ChartBindingOptions,\n optionsChanged,\n syncChartOptions,\n pickSyncableOptions,\n} from \"../bindings/shared\";\n\nexport interface UseVeloPlotOptions extends ChartBindingOptions {}\n\nexport interface UseVeloPlotReturn {\n chart: Chart | null;\n isReady: boolean;\n error: Error | null;\n bounds: Bounds | null;\n addSeries: (options: SeriesOptions) => void;\n updateSeries: (id: string, data: SeriesUpdateData) => void;\n removeSeries: (id: string) => void;\n zoom: (options: ZoomOptions) => void;\n resetZoom: () => void;\n}\n\nexport function useVeloPlot(\n containerRef: RefObject<HTMLDivElement>,\n options: UseVeloPlotOptions = {},\n): UseVeloPlotReturn {\n const [chart, setChart] = useState<Chart | null>(null);\n const [isReady, setIsReady] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [bounds, setBounds] = useState<Bounds | null>(null);\n\n const chartRef = useRef<Chart | null>(null);\n const destroyRef = useRef<(() => void) | null>(null);\n const optionsRef = useRef(options);\n const prevSyncOptionsRef = useRef(pickSyncableOptions(options));\n optionsRef.current = options;\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n try {\n const handle = createChartLifecycle(\n container,\n optionsRef.current,\n {\n onBoundsChange: setBounds,\n onError: setError,\n },\n );\n chartRef.current = handle.chart;\n destroyRef.current = handle.destroy;\n setChart(handle.chart);\n setIsReady(true);\n setBounds(handle.getBounds());\n setError(null);\n prevSyncOptionsRef.current = pickSyncableOptions(optionsRef.current);\n } catch (err) {\n console.error(\"[useVeloPlot] Failed to initialize chart:\", err);\n setError(err instanceof Error ? err : new Error(String(err)));\n setIsReady(false);\n }\n\n return () => {\n destroyRef.current?.();\n destroyRef.current = null;\n chartRef.current = null;\n setChart(null);\n setIsReady(false);\n };\n }, [containerRef]);\n\n useEffect(() => {\n const currentChart = chartRef.current;\n if (!currentChart || !isReady) return;\n\n const next = pickSyncableOptions(options);\n const prev = prevSyncOptionsRef.current;\n if (optionsChanged(prev, next)) {\n syncChartOptions(currentChart, prev, next);\n prevSyncOptionsRef.current = next;\n }\n });\n\n const addSeries = useCallback((seriesOptions: SeriesOptions) => {\n const c = chartRef.current;\n if (c) {\n c.addSeries(seriesOptions);\n setBounds(c.getViewBounds());\n }\n }, []);\n\n const updateSeries = useCallback((id: string, data: SeriesUpdateData) => {\n chartRef.current?.updateSeries(id, data);\n }, []);\n\n const removeSeries = useCallback((id: string) => {\n chartRef.current?.removeSeries(id);\n }, []);\n\n const zoom = useCallback((zoomOptions: ZoomOptions) => {\n chartRef.current?.zoom(zoomOptions);\n }, []);\n\n const resetZoom = useCallback(() => {\n const c = chartRef.current;\n if (c) {\n c.resetZoom();\n setBounds(c.getViewBounds());\n }\n }, []);\n\n return {\n chart,\n isReady,\n error,\n bounds,\n addSeries,\n updateSeries,\n removeSeries,\n zoom,\n resetZoom,\n };\n}\n","/**\n * VeloPlot - React Component for Scientific Charts\n */\n\nimport {\n useRef,\n useEffect,\n useImperativeHandle,\n forwardRef,\n useMemo,\n type CSSProperties,\n} from \"react\";\nimport { useVeloPlot, type UseVeloPlotOptions } from \"./useVeloPlot\";\nimport type { ZoomOptions, CursorOptions, Bounds } from \"../types\";\nimport type { Chart } from \"../core/Chart\";\nimport {\n diffSeries,\n applyChartA11y,\n updateA11y,\n type VeloPlotSeries,\n} from \"../bindings/shared\";\n\nexport type { VeloPlotSeries } from \"../bindings/shared\";\n\nexport interface VeloPlotProps extends UseVeloPlotOptions {\n series?: VeloPlotSeries[];\n zoom?: ZoomOptions;\n onZoomChange?: (bounds: Bounds) => void;\n cursor?: CursorOptions;\n width?: number | string;\n height?: number | string;\n className?: string;\n style?: CSSProperties;\n debug?: boolean;\n /** Custom aria-label for accessibility */\n ariaLabel?: string;\n /** Enable keyboard navigation (default: true) */\n keyboardNav?: boolean;\n}\n\nexport interface VeloPlotRef {\n getChart: () => Chart | null;\n resetZoom: () => void;\n getBounds: () => Bounds | null;\n}\n\nexport const VeloPlot = forwardRef<VeloPlotRef, VeloPlotProps>(\n function VeloPlot(\n {\n series = [],\n zoom: zoomProp,\n onZoomChange,\n cursor,\n width = \"100%\",\n height = 400,\n className = \"\",\n style = {},\n debug = false,\n ariaLabel,\n keyboardNav = true,\n ...chartOptions\n },\n ref,\n ) {\n const containerRef = useRef<HTMLDivElement>(null);\n const previousSeriesRef = useRef<Map<string, VeloPlotSeries>>(new Map());\n const a11yRef = useRef<ReturnType<typeof applyChartA11y> | null>(null);\n\n const {\n chart,\n isReady,\n bounds,\n addSeries,\n updateSeries,\n removeSeries,\n resetZoom,\n } = useVeloPlot(containerRef, chartOptions);\n\n useImperativeHandle(\n ref,\n () => ({\n getChart: () => chart,\n resetZoom,\n getBounds: () => bounds,\n }),\n [chart, resetZoom, bounds],\n );\n\n useEffect(() => {\n if (!isReady || !chart) return;\n previousSeriesRef.current = diffSeries(\n { addSeries, updateSeries, removeSeries, autoScale: () => chart.autoScale() },\n series,\n previousSeriesRef.current,\n );\n }, [series, isReady, chart, addSeries, updateSeries, removeSeries]);\n\n useEffect(() => {\n if (!isReady || !chart || !zoomProp) return;\n chart.zoom(zoomProp);\n }, [isReady, chart, zoomProp]);\n\n useEffect(() => {\n if (!isReady || !chart || !onZoomChange) return;\n const handler = (event: { x: [number, number]; y: [number, number] }) => {\n onZoomChange({\n xMin: event.x[0],\n xMax: event.x[1],\n yMin: event.y[0],\n yMax: event.y[1],\n });\n };\n chart.on(\"zoom\", handler);\n return () => chart.off(\"zoom\", handler);\n }, [isReady, chart, onZoomChange]);\n\n useEffect(() => {\n if (!isReady || !chart) return;\n if (cursor?.enabled) {\n chart.enableCursor(cursor);\n } else {\n chart.disableCursor();\n }\n }, [isReady, chart, cursor]);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!isReady || !chart || !el) return;\n\n a11yRef.current = applyChartA11y(el, chart, {\n label: ariaLabel,\n series,\n bounds,\n enableKeyboard: keyboardNav,\n });\n\n return () => {\n a11yRef.current?.cleanup();\n a11yRef.current = null;\n };\n }, [isReady, chart, keyboardNav, ariaLabel, bounds, series]);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el || !a11yRef.current) return;\n updateA11y(el, a11yRef.current.srTable, {\n label: ariaLabel,\n series,\n bounds,\n });\n }, [series, bounds, ariaLabel]);\n\n const containerStyle = useMemo<CSSProperties>(\n () => ({\n position: \"relative\",\n width: typeof width === \"number\" ? `${width}px` : width,\n height: typeof height === \"number\" ? `${height}px` : height,\n outline: \"none\",\n ...style,\n }),\n [width, height, style],\n );\n\n return (\n <div\n ref={containerRef}\n className={`velo-plot-container ${className}`}\n style={containerStyle}\n >\n {debug && bounds && (\n <div\n style={{\n position: \"absolute\",\n top: 8,\n right: 8,\n background: \"rgba(0,0,0,0.7)\",\n color: \"#0f0\",\n padding: \"4px 8px\",\n borderRadius: 4,\n fontSize: 11,\n fontFamily: \"monospace\",\n pointerEvents: \"none\",\n }}\n >\n <div>\n X: [{bounds.xMin.toFixed(3)}, {bounds.xMax.toFixed(3)}]\n </div>\n <div>\n Y: [{bounds.yMin.toExponential(2)}, {bounds.yMax.toExponential(2)}]\n </div>\n <div>Series: {series.length}</div>\n </div>\n )}\n </div>\n );\n },\n);\n\nexport default VeloPlot;\n","/**\n * useStackedPlot - React hook for multi-pane stacked charts\n */\n\nimport {\n useEffect,\n useRef,\n useState,\n useCallback,\n type RefObject,\n} from \"react\";\nimport { createStackedChart } from \"../core/stacked\";\nimport type { StackedChart, StackedChartOptions } from \"../core/stacked\";\nimport type { Range } from \"../types\";\nimport {\n stackedStructureKey,\n syncStackedOptions,\n syncStackedPaneSeries,\n} from \"../bindings/shared\";\nimport type { VeloPlotSeries } from \"../bindings/shared\";\n\nexport interface UseStackedPlotOptions\n extends Omit<StackedChartOptions, \"container\"> {}\n\nexport interface UseStackedPlotReturn {\n containerRef: RefObject<HTMLDivElement>;\n stack: StackedChart | null;\n isReady: boolean;\n fitAll: (options?: { x?: Range; padding?: number }) => void;\n resetAll: () => void;\n}\n\nexport function useStackedPlot(\n options: UseStackedPlotOptions,\n): UseStackedPlotReturn {\n const containerRef = useRef<HTMLDivElement>(null);\n const stackRef = useRef<StackedChart | null>(null);\n const destroyRef = useRef<(() => void) | null>(null);\n const [stack, setStack] = useState<StackedChart | null>(null);\n const [isReady, setIsReady] = useState(false);\n\n const optionsRef = useRef(options);\n const structureKeyRef = useRef(stackedStructureKey(options.panes));\n const paneSeriesRef = useRef(new Map<string, Map<string, VeloPlotSeries>>());\n optionsRef.current = options;\n\n const mountStack = useCallback(() => {\n const el = containerRef.current;\n if (!el) return;\n\n destroyRef.current?.();\n const created = createStackedChart({\n ...optionsRef.current,\n container: el,\n });\n stackRef.current = created;\n destroyRef.current = () => {\n created.destroy();\n stackRef.current = null;\n };\n setStack(created);\n structureKeyRef.current = stackedStructureKey(optionsRef.current.panes);\n paneSeriesRef.current = syncStackedPaneSeries(\n created,\n optionsRef.current.panes,\n new Map(),\n );\n\n created.whenReady().then(() => setIsReady(true));\n }, []);\n\n useEffect(() => {\n mountStack();\n return () => {\n setIsReady(false);\n destroyRef.current?.();\n destroyRef.current = null;\n setStack(null);\n };\n }, [mountStack]);\n\n useEffect(() => {\n const current = stackRef.current;\n if (!current || !isReady) return;\n\n const nextKey = stackedStructureKey(options.panes);\n if (nextKey !== structureKeyRef.current) {\n mountStack();\n return;\n }\n\n syncStackedOptions(current, options);\n paneSeriesRef.current = syncStackedPaneSeries(\n current,\n options.panes,\n paneSeriesRef.current,\n );\n });\n\n const fitAll = useCallback((opts?: { x?: Range; padding?: number }) => {\n stackRef.current?.fitAll(opts);\n }, []);\n\n const resetAll = useCallback(() => {\n stackRef.current?.resetAll();\n }, []);\n\n return { containerRef, stack, isReady, fitAll, resetAll };\n}\n","/**\n * StackedPlot - Declarative React component for multi-pane charts\n */\n\nimport {\n forwardRef,\n useImperativeHandle,\n useMemo,\n type CSSProperties,\n} from \"react\";\nimport { useStackedPlot, type UseStackedPlotOptions } from \"./useStackedPlot\";\nimport type { StackedChart } from \"../core/stacked\";\nimport type { Bounds } from \"../types\";\nimport type { AddIndicatorOptions } from \"../core/indicator/addIndicator\";\nimport type { IndicatorPresetName } from \"../core/indicator/indicatorPresets\";\n\nexport interface StackedPlotIndicator extends AddIndicatorOptions {\n type: IndicatorPresetName;\n}\n\nexport interface StackedPlotProps extends UseStackedPlotOptions {\n width?: number | string;\n height?: number | string;\n className?: string;\n style?: CSSProperties;\n indicators?: StackedPlotIndicator[];\n onCrosshairMove?: (event: { price?: number; x: number }) => void;\n drawingTools?: string[];\n ariaLabel?: string;\n}\n\nexport interface StackedPlotRef {\n getStack: () => StackedChart | null;\n fitAll: () => void;\n resetAll: () => void;\n getBounds: () => Bounds | null;\n}\n\nexport const StackedPlot = forwardRef<StackedPlotRef, StackedPlotProps>(\n function StackedPlot(\n {\n width = \"100%\",\n height = 480,\n className = \"\",\n style = {},\n indicators: _indicators,\n onCrosshairMove: _onCrosshairMove,\n drawingTools: _drawingTools,\n ariaLabel,\n panes,\n ...stackOptions\n },\n ref,\n ) {\n const { containerRef, stack, isReady, fitAll, resetAll } = useStackedPlot({\n panes,\n ...stackOptions,\n });\n\n useImperativeHandle(\n ref,\n () => ({\n getStack: () => stack,\n fitAll: () => fitAll(),\n resetAll,\n getBounds: () => stack?.getMaster().getViewBounds() ?? null,\n }),\n [stack, fitAll, resetAll],\n );\n\n const containerStyle = useMemo<CSSProperties>(\n () => ({\n position: \"relative\",\n width: typeof width === \"number\" ? `${width}px` : width,\n height: typeof height === \"number\" ? `${height}px` : height,\n ...style,\n }),\n [width, height, style],\n );\n\n return (\n <div\n ref={containerRef as React.RefObject<HTMLDivElement>}\n className={`velo-plot-stacked ${className}`}\n style={containerStyle}\n role=\"img\"\n aria-label={ariaLabel ?? `Stacked chart with ${panes.length} panes`}\n data-ready={isReady ? \"true\" : \"false\"}\n />\n );\n },\n);\n\nexport default StackedPlot;\n","/**\n * useIndicator - React hook for trading indicators\n */\n\nimport { useEffect, useRef, useState } from \"react\";\nimport type { Chart } from \"../core/chart/types\";\nimport type { AddIndicatorOptions, AddIndicatorResult } from \"../core/indicator/addIndicator\";\nimport type { IndicatorPresetName } from \"../core/indicator/indicatorPresets\";\nimport {\n addIndicatorToHost,\n isStackedChart,\n removeIndicatorFromChart,\n type IndicatorHost,\n} from \"../bindings/shared\";\n\nexport interface UseIndicatorReturn {\n result: (AddIndicatorResult & { paneId?: string }) | null;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useIndicator(\n host: IndicatorHost,\n preset: IndicatorPresetName,\n options: AddIndicatorOptions = {},\n): UseIndicatorReturn {\n const [result, setResult] = useState<\n (AddIndicatorResult & { paneId?: string }) | null\n >(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const resultRef = useRef(result);\n resultRef.current = result;\n\n useEffect(() => {\n if (!host) return;\n\n let cancelled = false;\n setIsLoading(true);\n setError(null);\n\n addIndicatorToHost(host, preset, options)\n .then((res) => {\n if (!cancelled) {\n setResult(res);\n setIsLoading(false);\n }\n })\n .catch((err) => {\n if (!cancelled) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setIsLoading(false);\n }\n });\n\n return () => {\n cancelled = true;\n const res = resultRef.current;\n if (res && !isStackedChart(host)) {\n removeIndicatorFromChart(host as Chart, res.id);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [host, preset, JSON.stringify(options)]);\n\n return { result, isLoading, error };\n}\n","/**\n * useChartSync - React hook for synchronizing multiple charts\n */\n\nimport { useEffect, useState } from \"react\";\nimport type { ChartLike, SyncOptions } from \"../core/sync\";\nimport { ChartGroup } from \"../core/sync\";\nimport { createChartSync } from \"../bindings/shared\";\n\nexport interface UseChartSyncReturn {\n group: ChartGroup | null;\n}\n\nexport function useChartSync(\n charts: ChartLike[],\n options?: SyncOptions,\n): UseChartSyncReturn {\n const [group, setGroup] = useState<ChartGroup | null>(null);\n\n useEffect(() => {\n if (charts.length < 2) {\n setGroup(null);\n return;\n }\n\n const handle = createChartSync(charts, options);\n setGroup(handle.group);\n\n return () => {\n handle.destroy();\n setGroup(null);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [charts, JSON.stringify(options)]);\n\n return { group };\n}\n\n/** Alias matching roadmap naming (`useChartGroup` ≡ `useChartSync`). */\nexport const useChartGroup = useChartSync;\n","/**\n * React bindings for Velo Plot\n */\n\nexport {\n VeloPlot,\n type VeloPlotProps,\n type VeloPlotRef,\n type VeloPlotSeries,\n} from \"./VeloPlot\";\nexport {\n StackedPlot,\n type StackedPlotProps,\n type StackedPlotRef,\n type StackedPlotIndicator,\n} from \"./StackedPlot\";\nexport {\n useVeloPlot,\n type UseVeloPlotOptions,\n type UseVeloPlotReturn,\n} from \"./useVeloPlot\";\nexport {\n useStackedPlot,\n type UseStackedPlotOptions,\n type UseStackedPlotReturn,\n} from \"./useStackedPlot\";\nexport {\n useIndicator,\n type UseIndicatorReturn,\n} from \"./useIndicator\";\nexport {\n useChartSync,\n useChartGroup,\n type UseChartSyncReturn,\n} from \"./useChartSync\";\n\n// ---------------------------------------------------------------------------\n// Backward-compatible aliases (SciPlot / SciChart branding → VeloPlot)\n// Removed in v4.0.\n// ---------------------------------------------------------------------------\nimport { VeloPlot as VeloPlotImpl } from \"./VeloPlot\";\nimport { useVeloPlot as useVeloPlotImpl } from \"./useVeloPlot\";\n\n/**\n * @deprecated Use `VeloPlot` instead. **Removed in v4.0.**\n */\nexport const SciPlot = VeloPlotImpl;\n/**\n * @deprecated Use `VeloPlot` instead. **Removed in v4.0.**\n */\nexport const SciChart = VeloPlotImpl;\n/**\n * @deprecated Use `useVeloPlot` instead. **Removed in v4.0.**\n */\nexport const useSciPlot = useVeloPlotImpl;\n/**\n * @deprecated Use `useVeloPlot` instead. **Removed in v4.0.**\n */\nexport const useSciChart = useVeloPlotImpl;\n\nexport type {\n VeloPlotProps as SciPlotProps,\n VeloPlotRef as SciPlotRef,\n VeloPlotSeries as SciPlotSeries,\n VeloPlotProps as SciChartProps,\n VeloPlotRef as SciChartRef,\n VeloPlotSeries as SciChartSeries,\n} from \"./VeloPlot\";\nexport type {\n UseVeloPlotOptions as UseSciPlotOptions,\n UseVeloPlotReturn as UseSciPlotReturn,\n UseVeloPlotOptions as UseSciChartOptions,\n UseVeloPlotReturn as UseSciChartReturn,\n} from \"./useVeloPlot\";\n"],"names":["useVeloPlot","containerRef","options","chart","setChart","useState","isReady","setIsReady","error","setError","bounds","setBounds","chartRef","useRef","destroyRef","optionsRef","prevSyncOptionsRef","pickSyncableOptions","useEffect","container","handle","createChartLifecycle","err","_a","currentChart","next","prev","optionsChanged","syncChartOptions","addSeries","useCallback","seriesOptions","c","updateSeries","id","data","removeSeries","zoom","zoomOptions","resetZoom","VeloPlot","forwardRef","series","zoomProp","onZoomChange","cursor","width","height","className","style","debug","ariaLabel","keyboardNav","chartOptions","ref","previousSeriesRef","a11yRef","useImperativeHandle","diffSeries","handler","event","el","applyChartA11y","updateA11y","containerStyle","useMemo","jsx","jsxs","useStackedPlot","stackRef","stack","setStack","structureKeyRef","stackedStructureKey","paneSeriesRef","mountStack","created","createStackedChart","syncStackedPaneSeries","current","syncStackedOptions","fitAll","opts","resetAll","StackedPlot","_indicators","_onCrosshairMove","_drawingTools","panes","stackOptions","useIndicator","host","preset","result","setResult","isLoading","setIsLoading","resultRef","cancelled","addIndicatorToHost","res","isStackedChart","removeIndicatorFromChart","useChartSync","charts","group","setGroup","createChartSync","useChartGroup","SciPlot","VeloPlotImpl","SciChart","useSciPlot","useVeloPlotImpl","useSciChart"],"mappings":"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"}
@@ -12,5 +12,6 @@
12
12
  * - Minimal state changes per frame
13
13
  */
14
14
  export { NativeWebGLRenderer } from './native/NativeWebGLRenderer';
15
- export { interleaveBandData, interleaveData, interleaveStepData, interleaveErrorData, interleaveBoxPlotData, interleaveWaterfallData, parseColor, brightenColor, } from './native/utils';
15
+ export { interleaveBandData, interleaveData, interleaveStepData, interleaveErrorData, parseColor, brightenColor, } from './native/utilsCore';
16
+ export { interleaveBoxPlotData, interleaveWaterfallData, } from './native/utils';
16
17
  export type { NativeRenderOptions, NativeSeriesRenderData } from './native/types';
@@ -1,4 +1,4 @@
1
- import { NativeRenderOptions, NativeSeriesRenderData } from './types';
1
+ import { NativeRenderOptions, NativeSeriesRenderData, ProgramBundle } from './types';
2
2
 
3
3
  export declare class NativeWebGLRenderer {
4
4
  private canvas;
@@ -8,6 +8,10 @@ export declare class NativeWebGLRenderer {
8
8
  private buffers;
9
9
  private textures;
10
10
  private isInitialized;
11
+ private heatmapShaderReady;
12
+ /** Optional hook for extended bundles to install the heatmap shader program. */
13
+ static heatmapProgramInstaller: ((gl: WebGLRenderingContext, bundle: ProgramBundle) => void) | null;
14
+ installHeatmapProgram(): void;
11
15
  setDPR(dpr: number): void;
12
16
  constructor(canvas: HTMLCanvasElement);
13
17
  get available(): boolean;
@@ -1,47 +1,2 @@
1
- import { Bounds } from '../../types';
2
- import { ShaderProgram } from './types';
3
-
4
- export declare function calculateUniforms(bounds: Bounds, invertX?: boolean): {
5
- scale: [number, number];
6
- translate: [number, number];
7
- };
8
- export declare function renderLine(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
9
- scale: [number, number];
10
- translate: [number, number];
11
- }, color: [number, number, number, number], width?: number): void;
12
- export declare function renderBand(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
13
- scale: [number, number];
14
- translate: [number, number];
15
- }, color: [number, number, number, number]): void;
16
- export declare function renderPoints(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
17
- scale: [number, number];
18
- translate: [number, number];
19
- }, color: [number, number, number, number], pointSize: number, symbol?: string): void;
20
- export declare function renderHeatmap(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
21
- scale: [number, number];
22
- translate: [number, number];
23
- }, zBounds?: {
24
- min: number;
25
- max: number;
26
- }, texture?: WebGLTexture): void;
27
- export declare function renderBar(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
28
- scale: [number, number];
29
- translate: [number, number];
30
- }, color: [number, number, number, number]): void;
31
- export declare function renderErrorBars(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
32
- scale: [number, number];
33
- translate: [number, number];
34
- }, color: [number, number, number, number], width?: number): void;
35
- export declare function renderBoxPlot(gl: WebGLRenderingContext, programs: {
36
- line: ShaderProgram;
37
- point: ShaderProgram;
38
- }, data: {
39
- boxBuffer: WebGLBuffer;
40
- boxCount: number;
41
- linesBuffer: WebGLBuffer;
42
- linesCount: number;
43
- }, uniforms: {
44
- scale: [number, number];
45
- translate: [number, number];
46
- }, style: any): void;
47
- export declare function computeSeriesColor(style: any): [number, number, number, number];
1
+ export { calculateUniforms, renderLine, renderBand, renderPoints, renderErrorBars, computeSeriesColor, } from './drawCore';
2
+ export { renderHeatmap, renderBar, renderBoxPlot } from './drawExtended';
@@ -0,0 +1,27 @@
1
+ import { Bounds } from '../../types';
2
+ import { ShaderProgram } from './types';
3
+
4
+ export declare function calculateUniforms(bounds: Bounds, invertX?: boolean): {
5
+ scale: [number, number];
6
+ translate: [number, number];
7
+ };
8
+ export declare function renderLine(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
9
+ scale: [number, number];
10
+ translate: [number, number];
11
+ }, color: [number, number, number, number], width?: number): void;
12
+ export declare function renderBand(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
13
+ scale: [number, number];
14
+ translate: [number, number];
15
+ }, color: [number, number, number, number]): void;
16
+ export declare function renderPoints(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
17
+ scale: [number, number];
18
+ translate: [number, number];
19
+ }, color: [number, number, number, number], pointSize: number, symbol?: string): void;
20
+ export declare function renderErrorBars(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
21
+ scale: [number, number];
22
+ translate: [number, number];
23
+ }, color: [number, number, number, number], width?: number): void;
24
+ export declare function computeSeriesColor(style: {
25
+ color?: string;
26
+ opacity?: number;
27
+ }): [number, number, number, number];
@@ -0,0 +1,29 @@
1
+ import { ShaderProgram } from './types';
2
+
3
+ export declare function renderHeatmap(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
4
+ scale: [number, number];
5
+ translate: [number, number];
6
+ }, zBounds?: {
7
+ min: number;
8
+ max: number;
9
+ }, texture?: WebGLTexture): void;
10
+ export declare function renderBar(gl: WebGLRenderingContext, prog: ShaderProgram, buffer: WebGLBuffer, count: number, uniforms: {
11
+ scale: [number, number];
12
+ translate: [number, number];
13
+ }, color: [number, number, number, number]): void;
14
+ export declare function renderBoxPlot(gl: WebGLRenderingContext, programs: {
15
+ line: ShaderProgram;
16
+ point: ShaderProgram;
17
+ }, data: {
18
+ boxBuffer: WebGLBuffer;
19
+ boxCount: number;
20
+ linesBuffer: WebGLBuffer;
21
+ linesCount: number;
22
+ }, uniforms: {
23
+ scale: [number, number];
24
+ translate: [number, number];
25
+ }, style: {
26
+ color?: string;
27
+ opacity?: number;
28
+ width?: number;
29
+ }): void;
@@ -0,0 +1 @@
1
+ export declare function registerExtendedFrameRenderers(): void;
@@ -0,0 +1,27 @@
1
+ import { NativeSeriesRenderData, ProgramBundle, NativeRenderOptions } from './types';
2
+
3
+ export interface FrameRenderContext {
4
+ gl: WebGLRenderingContext;
5
+ canvas: HTMLCanvasElement;
6
+ dpr: number;
7
+ programs: ProgramBundle;
8
+ options: NativeRenderOptions;
9
+ bounds: {
10
+ xMin: number;
11
+ xMax: number;
12
+ yMin: number;
13
+ yMax: number;
14
+ };
15
+ pa: {
16
+ x: number;
17
+ y: number;
18
+ width: number;
19
+ height: number;
20
+ };
21
+ }
22
+ export type ExtendedFrameRenderer = (ctx: FrameRenderContext, s: NativeSeriesRenderData, seriesUniforms: {
23
+ scale: [number, number];
24
+ translate: [number, number];
25
+ }, color: [number, number, number, number]) => void;
26
+ export declare function registerFrameRenderer(type: string, fn: ExtendedFrameRenderer): void;
27
+ export declare function getFrameRenderer(type: string): ExtendedFrameRenderer | undefined;
@@ -0,0 +1,6 @@
1
+ import { ProgramBundle, ProgramMode, ShaderProgram } from './types';
2
+
3
+ declare function createProgram(gl: WebGLRenderingContext, vertSource: string, fragSource: string, mode: ProgramMode): ShaderProgram;
4
+ /** Core WebGL programs (line + scatter). Heatmap is registered by extended bundles. */
5
+ export declare function createCoreProgramBundle(gl: WebGLRenderingContext): ProgramBundle;
6
+ export { createProgram };
@@ -0,0 +1,4 @@
1
+ import { ProgramBundle } from './types';
2
+
3
+ /** Compile the heatmap shader program (scientific/trading/full bundles). */
4
+ export declare function registerHeatmapProgram(gl: WebGLRenderingContext, bundle: ProgramBundle): void;
@@ -1,31 +1,5 @@
1
- export declare function parseColor(color: string): [number, number, number, number];
2
- export declare function brightenColor(color: string, isDarkTheme?: boolean): string;
3
- export declare function interleaveData(x: Float32Array | Float64Array | number[], y: Float32Array | Float64Array | number[]): Float32Array;
4
- export declare function interleaveStepData(x: Float32Array | Float64Array | number[], y: Float32Array | Float64Array | number[], mode?: "before" | "after" | "center"): Float32Array;
5
- export declare function interleaveBandData(x: Float32Array | Float64Array | number[], y1: Float32Array | Float64Array | number[], y2: Float32Array | Float64Array | number[]): Float32Array;
6
- export declare function interleaveErrorData(x: Float32Array | Float64Array | number[], y: Float32Array | Float64Array | number[], yErr?: {
7
- yError?: Float32Array | Float64Array;
8
- yErrorMinus?: Float32Array | Float64Array;
9
- yErrorPlus?: Float32Array | Float64Array;
10
- }, xErr?: {
11
- xError?: Float32Array | Float64Array;
12
- xErrorMinus?: Float32Array | Float64Array;
13
- xErrorPlus?: Float32Array | Float64Array;
14
- }): Float32Array;
15
- export declare function interleaveBoxPlotData(x: Float32Array | Float64Array | number[], min: Float32Array | Float64Array | number[], q1: Float32Array | Float64Array | number[], median: Float32Array | Float64Array | number[], q3: Float32Array | Float64Array | number[], max: Float32Array | Float64Array | number[], width: number): {
16
- lines: Float32Array;
17
- boxes: Float32Array;
18
- };
19
1
  /**
20
- * Interleave data for Waterfall charts
21
- * Creates rectangles that show cumulative changes from a running total
2
+ * Native WebGL utilities — re-exports core + extended for backward compatibility.
22
3
  */
23
- export declare function interleaveWaterfallData(x: Float32Array | Float64Array | number[], y: Float32Array | Float64Array | number[], width: number, isSubtotal?: boolean[]): {
24
- positiveData: Float32Array;
25
- negativeData: Float32Array;
26
- subtotalData: Float32Array;
27
- connectorData: Float32Array;
28
- positiveCount: number;
29
- negativeCount: number;
30
- subtotalCount: number;
31
- };
4
+ export { parseColor, brightenColor, interleaveData, interleaveStepData, interleaveBandData, interleaveErrorData, } from './utilsCore';
5
+ export { interleaveBoxPlotData, interleaveWaterfallData, } from './utilsExtended';