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
@@ -0,0 +1,75 @@
1
+ var a = Object.defineProperty;
2
+ var n = (r, e, t) => e in r ? a(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
+ var s = (r, e, t) => n(r, typeof e != "symbol" ? e + "" : e, t);
4
+ import { GpuRenderer as h } from "./plugins/gpu.js";
5
+ const u = {};
6
+ class o {
7
+ constructor(e, t) {
8
+ s(this, "gpu");
9
+ s(this, "dpr");
10
+ s(this, "canvas");
11
+ this.gpu = e, this.canvas = t, this.dpr = window.devicePixelRatio || 1;
12
+ }
13
+ get available() {
14
+ return this.gpu.available;
15
+ }
16
+ get backend() {
17
+ return this.gpu.activeBackend ?? "webgl";
18
+ }
19
+ setDPR(e) {
20
+ this.dpr = e, this.gpu.setDPR(e);
21
+ }
22
+ createBuffer(e, t) {
23
+ if (e.endsWith("_step")) {
24
+ this.gpu.createStepBuffer(e, t);
25
+ return;
26
+ }
27
+ this.gpu.createBuffer(e, t);
28
+ }
29
+ updateBuffer(e, t, i) {
30
+ return this.gpu.updateBuffer(e, t, i);
31
+ }
32
+ getBuffer(e) {
33
+ return this.gpu.hasBuffer(e) ? u : void 0;
34
+ }
35
+ deleteBuffer(e) {
36
+ this.gpu.deleteBuffer(e);
37
+ }
38
+ createColormapTexture(e, t) {
39
+ const i = e.replace(/_colormap$/, "");
40
+ this.gpu.createColormapTexture(i, t);
41
+ }
42
+ getTexture(e) {
43
+ const t = e.replace(/_colormap$/, "");
44
+ return this.gpu.hasColormap(t) ? u : void 0;
45
+ }
46
+ render(e, t) {
47
+ this.gpu.renderNativeSeries(e, {
48
+ bounds: t.bounds,
49
+ backgroundColor: t.backgroundColor,
50
+ plotArea: t.plotArea,
51
+ invertX: t.invertX,
52
+ plotAreaBackground: t.plotAreaBackground,
53
+ dpr: this.dpr
54
+ });
55
+ }
56
+ resize() {
57
+ const e = this.canvas.getBoundingClientRect(), t = Math.round(e.width * this.dpr), i = Math.round(e.height * this.dpr);
58
+ (this.canvas.width !== t || this.canvas.height !== i) && (this.canvas.width = t, this.canvas.height = i), this.gpu.resize();
59
+ }
60
+ getLimits() {
61
+ return this.gpu.getLimits();
62
+ }
63
+ destroy() {
64
+ this.gpu.destroy();
65
+ }
66
+ }
67
+ async function d(r, e = {}) {
68
+ const t = new h(r, e);
69
+ return await t.init() ? new o(t, r) : null;
70
+ }
71
+ export {
72
+ o as GpuChartRenderer,
73
+ d as createGpuChartRenderer
74
+ };
75
+ //# sourceMappingURL=GpuChartRenderer-Dxc0hrQA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GpuChartRenderer-Dxc0hrQA.js","sources":["../src/renderer/GpuChartRenderer.ts"],"sourcesContent":["/**\n * GpuChartRenderer — chart-facing adapter over GpuRenderer (WebGPU / WebGL backend).\n * Implements the same surface as NativeWebGLRenderer for ChartCore integration.\n */\n\nimport { GpuRenderer, type GpuRendererOptions } from \"../gpu/adapter/gpuRenderer\";\nimport type {\n NativeRenderOptions,\n NativeSeriesRenderData,\n} from \"./native/types\";\n\n/** Placeholder returned from getBuffer/getTexture when GPU abstraction owns the data. */\nconst GPU_HANDLE = {} as WebGLBuffer;\n\nexport class GpuChartRenderer {\n private gpu: GpuRenderer;\n private dpr: number;\n private readonly canvas: HTMLCanvasElement;\n\n constructor(gpu: GpuRenderer, canvas: HTMLCanvasElement) {\n this.gpu = gpu;\n this.canvas = canvas;\n this.dpr = window.devicePixelRatio || 1;\n }\n\n get available(): boolean {\n return this.gpu.available;\n }\n\n get backend(): \"webgpu\" | \"webgl\" {\n return this.gpu.activeBackend ?? \"webgl\";\n }\n\n setDPR(dpr: number): void {\n this.dpr = dpr;\n this.gpu.setDPR(dpr);\n }\n\n createBuffer(id: string, data: Float32Array): void {\n if (id.endsWith(\"_step\")) {\n this.gpu.createStepBuffer(id, data);\n return;\n }\n this.gpu.createBuffer(id, data);\n }\n\n updateBuffer(id: string, data: Float32Array, offsetInBytes: number): boolean {\n return this.gpu.updateBuffer(id, data, offsetInBytes);\n }\n\n getBuffer(id: string): WebGLBuffer | undefined {\n return this.gpu.hasBuffer(id) ? GPU_HANDLE : undefined;\n }\n\n deleteBuffer(id: string): void {\n this.gpu.deleteBuffer(id);\n }\n\n createColormapTexture(id: string, data: Uint8Array): void {\n const seriesId = id.replace(/_colormap$/, \"\");\n this.gpu.createColormapTexture(seriesId, data);\n }\n\n getTexture(id: string): WebGLTexture | undefined {\n const seriesId = id.replace(/_colormap$/, \"\");\n return this.gpu.hasColormap(seriesId)\n ? (GPU_HANDLE as unknown as WebGLTexture)\n : undefined;\n }\n\n render(series: NativeSeriesRenderData[], options: NativeRenderOptions): void {\n this.gpu.renderNativeSeries(series, {\n bounds: options.bounds,\n backgroundColor: options.backgroundColor,\n plotArea: options.plotArea,\n invertX: options.invertX,\n plotAreaBackground: options.plotAreaBackground,\n dpr: this.dpr,\n });\n }\n\n resize(): void {\n const rect = this.canvas.getBoundingClientRect();\n const width = Math.round(rect.width * this.dpr);\n const height = Math.round(rect.height * this.dpr);\n if (this.canvas.width !== width || this.canvas.height !== height) {\n this.canvas.width = width;\n this.canvas.height = height;\n }\n this.gpu.resize();\n }\n\n getLimits(): Record<string, unknown> {\n return this.gpu.getLimits();\n }\n\n destroy(): void {\n this.gpu.destroy();\n }\n}\n\nexport async function createGpuChartRenderer(\n canvas: HTMLCanvasElement,\n options: GpuRendererOptions = {},\n): Promise<GpuChartRenderer | null> {\n const gpu = new GpuRenderer(canvas, options);\n const ok = await gpu.init();\n if (!ok) return null;\n return new GpuChartRenderer(gpu, canvas);\n}\n"],"names":["GPU_HANDLE","GpuChartRenderer","gpu","canvas","__publicField","dpr","id","data","offsetInBytes","seriesId","series","options","rect","width","height","createGpuChartRenderer","GpuRenderer"],"mappings":";;;;AAYA,MAAMA,IAAa,CAAA;AAEZ,MAAMC,EAAiB;AAAA,EAK5B,YAAYC,GAAkBC,GAA2B;AAJjD,IAAAC,EAAA;AACA,IAAAA,EAAA;AACS,IAAAA,EAAA;AAGf,SAAK,MAAMF,GACX,KAAK,SAASC,GACd,KAAK,MAAM,OAAO,oBAAoB;AAAA,EACxC;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,IAAI,UAA8B;AAChC,WAAO,KAAK,IAAI,iBAAiB;AAAA,EACnC;AAAA,EAEA,OAAOE,GAAmB;AACxB,SAAK,MAAMA,GACX,KAAK,IAAI,OAAOA,CAAG;AAAA,EACrB;AAAA,EAEA,aAAaC,GAAYC,GAA0B;AACjD,QAAID,EAAG,SAAS,OAAO,GAAG;AACxB,WAAK,IAAI,iBAAiBA,GAAIC,CAAI;AAClC;AAAA,IACF;AACA,SAAK,IAAI,aAAaD,GAAIC,CAAI;AAAA,EAChC;AAAA,EAEA,aAAaD,GAAYC,GAAoBC,GAAgC;AAC3E,WAAO,KAAK,IAAI,aAAaF,GAAIC,GAAMC,CAAa;AAAA,EACtD;AAAA,EAEA,UAAUF,GAAqC;AAC7C,WAAO,KAAK,IAAI,UAAUA,CAAE,IAAIN,IAAa;AAAA,EAC/C;AAAA,EAEA,aAAaM,GAAkB;AAC7B,SAAK,IAAI,aAAaA,CAAE;AAAA,EAC1B;AAAA,EAEA,sBAAsBA,GAAYC,GAAwB;AACxD,UAAME,IAAWH,EAAG,QAAQ,cAAc,EAAE;AAC5C,SAAK,IAAI,sBAAsBG,GAAUF,CAAI;AAAA,EAC/C;AAAA,EAEA,WAAWD,GAAsC;AAC/C,UAAMG,IAAWH,EAAG,QAAQ,cAAc,EAAE;AAC5C,WAAO,KAAK,IAAI,YAAYG,CAAQ,IAC/BT,IACD;AAAA,EACN;AAAA,EAEA,OAAOU,GAAkCC,GAAoC;AAC3E,SAAK,IAAI,mBAAmBD,GAAQ;AAAA,MAClC,QAAQC,EAAQ;AAAA,MAChB,iBAAiBA,EAAQ;AAAA,MACzB,UAAUA,EAAQ;AAAA,MAClB,SAASA,EAAQ;AAAA,MACjB,oBAAoBA,EAAQ;AAAA,MAC5B,KAAK,KAAK;AAAA,IAAA,CACX;AAAA,EACH;AAAA,EAEA,SAAe;AACb,UAAMC,IAAO,KAAK,OAAO,sBAAA,GACnBC,IAAQ,KAAK,MAAMD,EAAK,QAAQ,KAAK,GAAG,GACxCE,IAAS,KAAK,MAAMF,EAAK,SAAS,KAAK,GAAG;AAChD,KAAI,KAAK,OAAO,UAAUC,KAAS,KAAK,OAAO,WAAWC,OACxD,KAAK,OAAO,QAAQD,GACpB,KAAK,OAAO,SAASC,IAEvB,KAAK,IAAI,OAAA;AAAA,EACX;AAAA,EAEA,YAAqC;AACnC,WAAO,KAAK,IAAI,UAAA;AAAA,EAClB;AAAA,EAEA,UAAgB;AACd,SAAK,IAAI,QAAA;AAAA,EACX;AACF;AAEA,eAAsBC,EACpBZ,GACAQ,IAA8B,IACI;AAClC,QAAMT,IAAM,IAAIc,EAAYb,GAAQQ,CAAO;AAE3C,SADW,MAAMT,EAAI,KAAA,IAEd,IAAID,EAAiBC,GAAKC,CAAM,IADvB;AAElB;"}
@@ -1,14 +1,11 @@
1
- var l = Object.defineProperty;
2
- var g = (i, e, r) => e in i ? l(i, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : i[e] = r;
1
+ var c = Object.defineProperty;
2
+ var g = (i, e, r) => e in i ? c(i, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : i[e] = r;
3
3
  var u = (i, e, r) => g(i, typeof e != "symbol" ? e + "" : e, r);
4
- import { N as f } from "./ChartCore-ivzLqxVb.js";
5
- import "./axisFormat-CzumxpCL.js";
6
- import "./index-x4stH3jD.js";
7
- import "./symbols-DT0eLlpW.js";
8
- function w(i) {
4
+ import { N as f } from "./ChartCore-AnR_3Xkb.js";
5
+ function m(i) {
9
6
  return new f(i);
10
7
  }
11
- class p {
8
+ class d {
12
9
  constructor() {
13
10
  u(this, "entries", /* @__PURE__ */ new Map());
14
11
  }
@@ -18,7 +15,7 @@ class p {
18
15
  register(e) {
19
16
  const r = e.manifest.name;
20
17
  this.entries.has(r) && console.warn(
21
- `[SciPlot Registry] Plugin "${r}" is already registered, overwriting`
18
+ `[VeloPlot Registry] Plugin "${r}" is already registered, overwriting`
22
19
  ), this.entries.set(r, e);
23
20
  }
24
21
  /**
@@ -58,7 +55,7 @@ class p {
58
55
  const r = [], n = e.toLowerCase();
59
56
  return this.entries.forEach((s) => {
60
57
  var o;
61
- (o = s.manifest.tags) != null && o.some((c) => c.toLowerCase().includes(n)) && r.push(s.manifest);
58
+ (o = s.manifest.tags) != null && o.some((l) => l.toLowerCase().includes(n)) && r.push(s.manifest);
62
59
  }), r;
63
60
  }
64
61
  /**
@@ -82,9 +79,9 @@ class p {
82
79
  }
83
80
  let t = null;
84
81
  function a() {
85
- return t || (t = new p()), t;
82
+ return t || (t = new d()), t;
86
83
  }
87
- function d(i) {
84
+ function p(i) {
88
85
  a().register(i);
89
86
  }
90
87
  function h(i, e) {
@@ -93,19 +90,19 @@ function h(i, e) {
93
90
  manifest: i
94
91
  });
95
92
  }
96
- function $(i, e) {
93
+ function w(i, e) {
97
94
  const r = h(i, e);
98
- return d({ manifest: i, factory: r }), r;
95
+ return p({ manifest: i, factory: r }), r;
99
96
  }
100
- async function C(i, e) {
97
+ async function b(i, e) {
101
98
  const r = a().get(i);
102
99
  if (!r) {
103
- console.warn(`[SciPlot] Plugin "${i}" not found in registry`);
100
+ console.warn(`[VeloPlot] Plugin "${i}" not found in registry`);
104
101
  return;
105
102
  }
106
103
  return r(e);
107
104
  }
108
- function z() {
105
+ function P() {
109
106
  const i = a(), e = [
110
107
  "analysis",
111
108
  "visualization",
@@ -120,13 +117,13 @@ function z() {
120
117
  r[n] = i.findByCapability(n);
121
118
  }), r;
122
119
  }
123
- function A(i) {
120
+ function $(i) {
124
121
  const e = [];
125
122
  return i.name ? /^[@a-z0-9-]+\/[a-z0-9-]+$|^[a-z0-9-]+$/.test(i.name) || e.push(
126
123
  'Invalid name format. Use lowercase with hyphens, optionally scoped (e.g., "@org/name")'
127
124
  ) : e.push("Missing required field: name"), i.version ? /^\d+\.\d+\.\d+$/.test(i.version) || e.push("Invalid version format. Use semantic versioning (e.g., 1.0.0)") : e.push("Missing required field: version"), i.dependencies && (Array.isArray(i.dependencies) || e.push("dependencies must be an array")), i.provides && (Array.isArray(i.provides) || e.push("provides must be an array")), e;
128
125
  }
129
- function M(i, e) {
126
+ function z(i, e) {
130
127
  const r = [];
131
128
  if (i.engineVersion) {
132
129
  const [n] = i.engineVersion.split(".").map(Number), [s] = e.split(".").map(Number);
@@ -143,26 +140,15 @@ function M(i, e) {
143
140
  }
144
141
  return { compatible: !0, warnings: r };
145
142
  }
146
- function R(i) {
147
- return i;
148
- }
149
- function q(i, e) {
150
- return (r) => ({
151
- ...e(r),
152
- manifest: i
153
- });
154
- }
155
143
  export {
156
- $ as a,
157
- z as b,
158
- w as c,
144
+ w as a,
145
+ P as b,
146
+ m as c,
159
147
  h as d,
160
- M as e,
161
- R as f,
148
+ z as e,
162
149
  a as g,
163
- q as h,
164
- C as l,
165
- d as r,
166
- A as v
150
+ b as l,
151
+ p as r,
152
+ $ as v
167
153
  };
168
- //# sourceMappingURL=index.core-COREBDNq.js.map
154
+ //# sourceMappingURL=PluginRegistry-CzMHebYP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginRegistry-CzMHebYP.js","sources":["../src/renderer/RendererInterface.ts","../src/plugins/PluginRegistry.ts"],"sourcesContent":["/**\n * WebGL Renderer Interface & Factory\n *\n * This module provides a common interface for WebGL rendering.\n * Currently optimized for NativeWebGLRenderer (zero dependencies).\n */\n\nimport type { Bounds } from '../types';\nimport { NativeWebGLRenderer } from './NativeWebGLRenderer';\n\n// ============================================\n// Common Types\n// ============================================\n\nexport interface SeriesRenderData {\n id: string;\n buffer: WebGLBuffer;\n count: number;\n style: any;\n visible: boolean;\n type: string;\n zBounds?: { min: number; max: number };\n colormapTexture?: WebGLTexture;\n}\n\nexport interface RenderOptions {\n bounds: Bounds;\n backgroundColor?: [number, number, number, number];\n}\n\n// ============================================\n// Renderer Interface\n// ============================================\n\n/**\n * Common interface for all WebGL renderer implementations\n */\nexport interface IWebGLRenderer {\n /** Check if WebGL is available and initialized */\n readonly available: boolean;\n\n /**\n * Create or update a GPU buffer with interleaved X,Y data\n * @param id - Unique buffer identifier\n * @param data - Interleaved Float32Array [x0, y0, x1, y1, ...]\n */\n createBuffer(id: string, data: Float32Array): void;\n\n /**\n * Get a buffer by ID\n */\n getBuffer(id: string): WebGLBuffer | undefined;\n\n /**\n * Delete a buffer and free GPU memory\n */\n deleteBuffer(id: string): void;\n \n /** \n * Create a 1D texture for heatmaps \n */\n createColormapTexture(id: string, data: Uint8Array): WebGLTexture;\n\n /**\n * Render a frame with all visible series\n */\n render(series: SeriesRenderData[], options: RenderOptions): void;\n\n /**\n * Handle canvas resize\n */\n resize(): void;\n\n /**\n * Get WebGL capabilities/limits\n */\n getLimits(): Record<string, unknown>;\n\n /**\n * Cleanup and destroy all GPU resources\n */\n destroy(): void;\n}\n\n// ============================================\n// Factory Functions\n// ============================================\n\n/**\n * Create a WebGL renderer (Native WebGL)\n *\n * @param canvas - Target canvas element\n */\nexport function createRenderer(canvas: HTMLCanvasElement): IWebGLRenderer {\n return new NativeWebGLRenderer(canvas);\n}\n\n/**\n * Create a renderer synchronously (native only)\n */\nexport { NativeWebGLRenderer as createNativeRenderer } from './NativeWebGLRenderer';\n","/**\n * Velo Plot - Global Plugin Registry\n * \n * Provides a global registry for third-party plugins that can be\n * discovered and loaded by name without explicit imports.\n * \n * @module plugins/PluginRegistry\n */\n\nimport type {\n PluginFactory,\n PluginManifest,\n PluginCapability,\n PluginRegistry,\n PluginRegistryEntry,\n} from \"./types\";\n\n// ============================================\n// Global Registry Implementation\n// ============================================\n\nclass PluginRegistryImpl implements PluginRegistry {\n private entries = new Map<string, PluginRegistryEntry>();\n\n /**\n * Register a plugin globally\n */\n register(entry: PluginRegistryEntry): void {\n const name = entry.manifest.name;\n\n if (this.entries.has(name)) {\n console.warn(\n `[VeloPlot Registry] Plugin \"${name}\" is already registered, overwriting`\n );\n }\n\n this.entries.set(name, entry);\n }\n\n /**\n * Unregister a plugin\n */\n unregister(name: string): boolean {\n const existed = this.entries.has(name);\n this.entries.delete(name);\n return existed;\n }\n\n /**\n * Get a registered plugin factory by name\n */\n get(name: string): PluginFactory | undefined {\n return this.entries.get(name)?.factory;\n }\n\n /**\n * List all registered plugins\n */\n list(): PluginManifest[] {\n return Array.from(this.entries.values()).map((e) => e.manifest);\n }\n\n /**\n * Search plugins by capability\n */\n findByCapability(capability: PluginCapability): PluginManifest[] {\n const results: PluginManifest[] = [];\n\n this.entries.forEach((entry) => {\n if (entry.manifest.provides?.includes(capability)) {\n results.push(entry.manifest);\n }\n });\n\n return results;\n }\n\n /**\n * Search plugins by tag\n */\n findByTag(tag: string): PluginManifest[] {\n const results: PluginManifest[] = [];\n const lowerTag = tag.toLowerCase();\n\n this.entries.forEach((entry) => {\n if (entry.manifest.tags?.some((t) => t.toLowerCase().includes(lowerTag))) {\n results.push(entry.manifest);\n }\n });\n\n return results;\n }\n\n /**\n * Check if a plugin is registered\n */\n has(name: string): boolean {\n return this.entries.has(name);\n }\n\n /**\n * Get plugin count\n */\n get size(): number {\n return this.entries.size;\n }\n\n /**\n * Clear all registrations\n */\n clear(): void {\n this.entries.clear();\n }\n}\n\n// ============================================\n// Singleton Instance\n// ============================================\n\nlet registryInstance: PluginRegistryImpl | null = null;\n\n/**\n * Get the global plugin registry singleton\n */\nexport function getPluginRegistry(): PluginRegistry {\n if (!registryInstance) {\n registryInstance = new PluginRegistryImpl();\n }\n return registryInstance;\n}\n\n/**\n * Register a plugin in the global registry\n * Shorthand for getPluginRegistry().register()\n */\nexport function registerPlugin(entry: PluginRegistryEntry): void {\n getPluginRegistry().register(entry);\n}\n\n/**\n * Create a plugin factory with manifest validation\n */\nexport function definePlugin<TConfig = unknown>(\n manifest: PluginManifest,\n factory: (config?: TConfig) => Omit<import(\"./types\").ChartPlugin<TConfig>, \"manifest\">\n): PluginFactory<TConfig> {\n return (config?: TConfig) => {\n const plugin = factory(config);\n return {\n ...plugin,\n manifest,\n };\n };\n}\n\n/**\n * Register a plugin from definition\n */\nexport function defineAndRegister<TConfig = unknown>(\n manifest: PluginManifest,\n factory: (config?: TConfig) => Omit<import(\"./types\").ChartPlugin<TConfig>, \"manifest\">\n): PluginFactory<TConfig> {\n const pluginFactory = definePlugin(manifest, factory);\n registerPlugin({ manifest, factory: pluginFactory as PluginFactory });\n return pluginFactory;\n}\n\n// ============================================\n// Plugin Discovery Helpers\n// ============================================\n\n/**\n * Load a plugin from the registry by name\n */\nexport async function loadPlugin<TConfig = unknown>(\n name: string,\n config?: TConfig\n): Promise<import(\"./types\").ChartPlugin<TConfig> | undefined> {\n const factory = getPluginRegistry().get(name);\n if (!factory) {\n console.warn(`[VeloPlot] Plugin \"${name}\" not found in registry`);\n return undefined;\n }\n return factory(config) as import(\"./types\").ChartPlugin<TConfig>;\n}\n\n/**\n * List available plugins by category\n */\nexport function listPluginsByCategory(): Record<PluginCapability, PluginManifest[]> {\n const registry = getPluginRegistry();\n const categories: PluginCapability[] = [\n \"analysis\",\n \"visualization\",\n \"interaction\",\n \"data-source\",\n \"export\",\n \"ui\",\n \"annotation\",\n \"theme\",\n ];\n\n const result: Record<string, PluginManifest[]> = {};\n categories.forEach((cat) => {\n result[cat] = registry.findByCapability(cat);\n });\n\n return result as Record<PluginCapability, PluginManifest[]>;\n}\n\n// ============================================\n// Plugin Validation\n// ============================================\n\n/**\n * Validate a plugin manifest\n */\nexport function validateManifest(manifest: PluginManifest): string[] {\n const errors: string[] = [];\n\n if (!manifest.name) {\n errors.push(\"Missing required field: name\");\n } else if (!/^[@a-z0-9-]+\\/[a-z0-9-]+$|^[a-z0-9-]+$/.test(manifest.name)) {\n errors.push(\n 'Invalid name format. Use lowercase with hyphens, optionally scoped (e.g., \"@org/name\")'\n );\n }\n\n if (!manifest.version) {\n errors.push(\"Missing required field: version\");\n } else if (!/^\\d+\\.\\d+\\.\\d+$/.test(manifest.version)) {\n errors.push(\"Invalid version format. Use semantic versioning (e.g., 1.0.0)\");\n }\n\n if (manifest.dependencies) {\n if (!Array.isArray(manifest.dependencies)) {\n errors.push(\"dependencies must be an array\");\n }\n }\n\n if (manifest.provides) {\n if (!Array.isArray(manifest.provides)) {\n errors.push(\"provides must be an array\");\n }\n }\n\n return errors;\n}\n\n/**\n * Validate a plugin for compatibility\n */\nexport function checkPluginCompatibility(\n manifest: PluginManifest,\n engineVersion: string\n): { compatible: boolean; warnings: string[] } {\n const warnings: string[] = [];\n\n if (manifest.engineVersion) {\n const [reqMajor] = manifest.engineVersion.split(\".\").map(Number);\n const [curMajor] = engineVersion.split(\".\").map(Number);\n\n if (reqMajor > curMajor) {\n return {\n compatible: false,\n warnings: [\n `Plugin requires engine v${manifest.engineVersion}, current is v${engineVersion}`,\n ],\n };\n }\n\n if (reqMajor < curMajor) {\n warnings.push(\n `Plugin was built for engine v${manifest.engineVersion}, may have compatibility issues`\n );\n }\n }\n\n return { compatible: true, warnings };\n}\n"],"names":["createRenderer","canvas","NativeWebGLRenderer","PluginRegistryImpl","__publicField","entry","name","existed","_a","capability","results","tag","lowerTag","t","registryInstance","getPluginRegistry","registerPlugin","definePlugin","manifest","factory","config","defineAndRegister","pluginFactory","loadPlugin","listPluginsByCategory","registry","categories","result","cat","validateManifest","errors","checkPluginCompatibility","engineVersion","warnings","reqMajor","curMajor"],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import { K as C } from "./index-CWxIHdwX.js";
2
+ const g = "position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0";
3
+ function y(i = [], n, t) {
4
+ if (t) return t;
5
+ const x = i.map((e) => e.name ?? e.id).join(", "), l = n ? `X ${n.xMin.toFixed(2)} to ${n.xMax.toFixed(2)}, Y ${n.yMin.toFixed(2)} to ${n.yMax.toFixed(2)}` : "";
6
+ return `Chart${x ? ` showing ${x}` : ""}${l ? `. Visible range: ${l}` : ""}`;
7
+ }
8
+ function r(i, n, t = {}) {
9
+ i.setAttribute("role", "img"), i.setAttribute(
10
+ "aria-label",
11
+ y(t.series, t.bounds, t.label)
12
+ ), i.setAttribute("tabindex", "0");
13
+ let x;
14
+ t.enableKeyboard !== !1 && (x = new C({
15
+ target: i,
16
+ callbacks: {
17
+ onResetZoom: () => {
18
+ var e;
19
+ return (e = n.resetZoom) == null ? void 0 : e.call(n);
20
+ },
21
+ onPanLeft: () => {
22
+ var e;
23
+ return (e = n.pan) == null ? void 0 : e.call(n, -20, 0);
24
+ },
25
+ onPanRight: () => {
26
+ var e;
27
+ return (e = n.pan) == null ? void 0 : e.call(n, 20, 0);
28
+ },
29
+ onPanUp: () => {
30
+ var e;
31
+ return (e = n.pan) == null ? void 0 : e.call(n, 0, -20);
32
+ },
33
+ onPanDown: () => {
34
+ var e;
35
+ return (e = n.pan) == null ? void 0 : e.call(n, 0, 20);
36
+ },
37
+ onZoomIn: () => {
38
+ var d, s;
39
+ const e = (d = n.getViewBounds) == null ? void 0 : d.call(n);
40
+ if (!e) return;
41
+ const a = (e.xMax - e.xMin) * 0.1, o = (e.yMax - e.yMin) * 0.1;
42
+ (s = n.zoom) == null || s.call(n, {
43
+ x: [e.xMin + a, e.xMax - a],
44
+ y: [e.yMin + o, e.yMax - o]
45
+ });
46
+ },
47
+ onZoomOut: () => {
48
+ var d, s;
49
+ const e = (d = n.getViewBounds) == null ? void 0 : d.call(n);
50
+ if (!e) return;
51
+ const a = (e.xMax - e.xMin) * 0.1, o = (e.yMax - e.yMin) * 0.1;
52
+ (s = n.zoom) == null || s.call(n, {
53
+ x: [e.xMin - a, e.xMax + a],
54
+ y: [e.yMin - o, e.yMax + o]
55
+ });
56
+ },
57
+ onEscape: () => {
58
+ var e;
59
+ return (e = n.resetZoom) == null ? void 0 : e.call(n);
60
+ }
61
+ }
62
+ }));
63
+ const l = document.createElement("table");
64
+ return l.className = "velo-plot-sr-only", l.setAttribute("aria-hidden", "false"), l.style.cssText = g, M(l, t.series ?? [], t.bounds), i.appendChild(l), {
65
+ keyboard: x,
66
+ srTable: l,
67
+ cleanup: () => {
68
+ x == null || x.destroy(), l.remove();
69
+ }
70
+ };
71
+ }
72
+ function b(i, n, t) {
73
+ i.setAttribute(
74
+ "aria-label",
75
+ y(t.series, t.bounds, t.label)
76
+ ), n && M(n, t.series ?? [], t.bounds);
77
+ }
78
+ function M(i, n, t) {
79
+ i.replaceChildren();
80
+ const x = document.createElement("caption");
81
+ x.textContent = "Chart data summary", i.appendChild(x);
82
+ const l = document.createElement("thead"), e = document.createElement("tr");
83
+ for (const o of ["Series", "Points", "X range", "Y range"]) {
84
+ const d = document.createElement("th");
85
+ d.textContent = o, e.appendChild(d);
86
+ }
87
+ l.appendChild(e), i.appendChild(l);
88
+ const a = document.createElement("tbody");
89
+ for (const o of n) {
90
+ const d = document.createElement("tr"), s = document.createElement("td");
91
+ s.textContent = o.name ?? o.id, d.appendChild(s);
92
+ const m = document.createElement("td");
93
+ "x" in o && o.x ? m.textContent = String(o.x.length) : o.type === "heatmap" ? m.textContent = String(o.data.zValues.length) : m.textContent = "0", d.appendChild(m);
94
+ const p = document.createElement("td");
95
+ p.textContent = t ? `${t.xMin.toFixed(2)} – ${t.xMax.toFixed(2)}` : "—", d.appendChild(p);
96
+ const u = document.createElement("td");
97
+ u.textContent = t ? `${t.yMin.toFixed(2)} – ${t.yMax.toFixed(2)}` : "—", d.appendChild(u), a.appendChild(d);
98
+ }
99
+ i.appendChild(a);
100
+ }
101
+ export {
102
+ r as a,
103
+ b as u
104
+ };
105
+ //# sourceMappingURL=a11y-Bw6urYpr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a11y-Bw6urYpr.js","sources":["../src/bindings/shared/a11y.ts"],"sourcesContent":["/**\n * Accessibility helpers for chart bindings.\n */\n\nimport type { Bounds } from \"../../types\";\nimport type { VeloPlotSeries } from \"./types\";\nimport { KeyBindingManager } from \"../../core/keybindings\";\n\nexport interface A11yOptions {\n label?: string;\n series?: VeloPlotSeries[];\n bounds?: Bounds | null;\n enableKeyboard?: boolean;\n}\n\nexport interface A11yHandle {\n keyboard?: KeyBindingManager;\n srTable?: HTMLTableElement;\n cleanup: () => void;\n}\n\nconst SR_ONLY_STYLE =\n \"position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0\";\n\nexport function buildAriaLabel(\n series: VeloPlotSeries[] = [],\n bounds?: Bounds | null,\n customLabel?: string,\n): string {\n if (customLabel) return customLabel;\n const names = series.map((s) => s.name ?? s.id).join(\", \");\n const range = bounds\n ? `X ${bounds.xMin.toFixed(2)} to ${bounds.xMax.toFixed(2)}, Y ${bounds.yMin.toFixed(2)} to ${bounds.yMax.toFixed(2)}`\n : \"\";\n return `Chart${names ? ` showing ${names}` : \"\"}${range ? `. Visible range: ${range}` : \"\"}`;\n}\n\nexport function applyChartA11y(\n container: HTMLElement,\n chart: {\n resetZoom?: () => void;\n zoom?: (opts: { x?: [number, number]; y?: [number, number] }) => void;\n pan?: (dx: number, dy: number) => void;\n getViewBounds?: () => Bounds;\n },\n options: A11yOptions = {},\n): A11yHandle {\n container.setAttribute(\"role\", \"img\");\n container.setAttribute(\n \"aria-label\",\n buildAriaLabel(options.series, options.bounds, options.label),\n );\n container.setAttribute(\"tabindex\", \"0\");\n\n let keyboard: KeyBindingManager | undefined;\n if (options.enableKeyboard !== false) {\n keyboard = new KeyBindingManager({\n target: container,\n callbacks: {\n onResetZoom: () => chart.resetZoom?.(),\n onPanLeft: () => chart.pan?.(-20, 0),\n onPanRight: () => chart.pan?.(20, 0),\n onPanUp: () => chart.pan?.(0, -20),\n onPanDown: () => chart.pan?.(0, 20),\n onZoomIn: () => {\n const b = chart.getViewBounds?.();\n if (!b) return;\n const dx = (b.xMax - b.xMin) * 0.1;\n const dy = (b.yMax - b.yMin) * 0.1;\n chart.zoom?.({\n x: [b.xMin + dx, b.xMax - dx],\n y: [b.yMin + dy, b.yMax - dy],\n });\n },\n onZoomOut: () => {\n const b = chart.getViewBounds?.();\n if (!b) return;\n const dx = (b.xMax - b.xMin) * 0.1;\n const dy = (b.yMax - b.yMin) * 0.1;\n chart.zoom?.({\n x: [b.xMin - dx, b.xMax + dx],\n y: [b.yMin - dy, b.yMax + dy],\n });\n },\n onEscape: () => chart.resetZoom?.(),\n },\n });\n }\n\n const srTable = document.createElement(\"table\");\n srTable.className = \"velo-plot-sr-only\";\n srTable.setAttribute(\"aria-hidden\", \"false\");\n srTable.style.cssText = SR_ONLY_STYLE;\n updateSrTable(srTable, options.series ?? [], options.bounds);\n container.appendChild(srTable);\n\n return {\n keyboard,\n srTable,\n cleanup: () => {\n keyboard?.destroy();\n srTable.remove();\n },\n };\n}\n\nexport function updateA11y(\n container: HTMLElement,\n srTable: HTMLTableElement | undefined,\n options: A11yOptions,\n): void {\n container.setAttribute(\n \"aria-label\",\n buildAriaLabel(options.series, options.bounds, options.label),\n );\n if (srTable) {\n updateSrTable(srTable, options.series ?? [], options.bounds);\n }\n}\n\nfunction updateSrTable(\n table: HTMLTableElement,\n series: VeloPlotSeries[],\n bounds?: Bounds | null,\n): void {\n table.replaceChildren();\n const caption = document.createElement(\"caption\");\n caption.textContent = \"Chart data summary\";\n table.appendChild(caption);\n\n const thead = document.createElement(\"thead\");\n const headerRow = document.createElement(\"tr\");\n for (const h of [\"Series\", \"Points\", \"X range\", \"Y range\"]) {\n const th = document.createElement(\"th\");\n th.textContent = h;\n headerRow.appendChild(th);\n }\n thead.appendChild(headerRow);\n table.appendChild(thead);\n\n const tbody = document.createElement(\"tbody\");\n for (const s of series) {\n const tr = document.createElement(\"tr\");\n const name = document.createElement(\"td\");\n name.textContent = s.name ?? s.id;\n tr.appendChild(name);\n\n const points = document.createElement(\"td\");\n if (\"x\" in s && s.x) {\n points.textContent = String(s.x.length);\n } else if (s.type === \"heatmap\") {\n points.textContent = String(s.data.zValues.length);\n } else {\n points.textContent = \"0\";\n }\n tr.appendChild(points);\n\n const xRange = document.createElement(\"td\");\n xRange.textContent = bounds\n ? `${bounds.xMin.toFixed(2)} – ${bounds.xMax.toFixed(2)}`\n : \"—\";\n tr.appendChild(xRange);\n\n const yRange = document.createElement(\"td\");\n yRange.textContent = bounds\n ? `${bounds.yMin.toFixed(2)} – ${bounds.yMax.toFixed(2)}`\n : \"—\";\n tr.appendChild(yRange);\n\n tbody.appendChild(tr);\n }\n table.appendChild(tbody);\n}\n"],"names":["SR_ONLY_STYLE","buildAriaLabel","series","bounds","customLabel","names","s","range","applyChartA11y","container","chart","options","keyboard","KeyBindingManager","_a","b","dx","dy","_b","srTable","updateSrTable","updateA11y","table","caption","thead","headerRow","h","th","tbody","tr","name","points","xRange","yRange"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { VeloPlotHost, useVeloPlotAngular, useStackedPlotAngular, useIndicatorAngular, useChartSyncAngular, } from './hooks';
@@ -0,0 +1,26 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { Chart } from '../core/Chart';
3
+ import { StackedChart, StackedChartOptions } from '../core/stacked';
4
+ import { ChartLike, SyncOptions, ChartGroup } from '../core/sync';
5
+ import { ChartBindingOptions, IndicatorHost } from '../bindings/shared';
6
+ import { AddIndicatorOptions, AddIndicatorResult } from '../core/indicator/addIndicator';
7
+ import { IndicatorPresetName } from '../core/indicator/indicatorPresets';
8
+
9
+ export declare class VeloPlotHost implements OnDestroy {
10
+ chart: Chart | null;
11
+ private destroy;
12
+ mount(container: HTMLDivElement, options?: ChartBindingOptions): void;
13
+ ngOnDestroy(): void;
14
+ }
15
+ export declare function useVeloPlotAngular(): VeloPlotHost;
16
+ export declare function useStackedPlotAngular(container: HTMLDivElement, options: Omit<StackedChartOptions, "container">): {
17
+ stack: StackedChart;
18
+ destroy: () => void;
19
+ };
20
+ export declare function useIndicatorAngular(host: IndicatorHost, preset: IndicatorPresetName, options?: AddIndicatorOptions): Promise<AddIndicatorResult & {
21
+ paneId?: string;
22
+ }>;
23
+ export declare function useChartSyncAngular(charts: ChartLike[], options?: SyncOptions): {
24
+ group: ChartGroup | null;
25
+ destroy: () => void;
26
+ };
@@ -0,0 +1,8 @@
1
+ import { VeloPlotComponent as VeloPlotComponentImpl } from './velo-plot.component';
2
+ import { useVeloPlotAngular as useVeloPlotAngularImpl } from './hooks';
3
+ export { VeloPlotComponent, StackedPlotComponent, } from './velo-plot.component';
4
+ export { VeloPlotHost, useVeloPlotAngular, useStackedPlotAngular, useIndicatorAngular, useChartSyncAngular, } from './hooks';
5
+ /** @deprecated Use `VeloPlotComponent` instead. **Removed in v4.0.** */
6
+ export declare const SciPlotComponent: typeof VeloPlotComponentImpl;
7
+ /** @deprecated Use `useVeloPlotAngular` instead. **Removed in v4.0.** */
8
+ export declare const useSciPlotAngular: typeof useVeloPlotAngularImpl;
@@ -0,0 +1,46 @@
1
+ import { ElementRef, OnDestroy, AfterViewInit } from '@angular/core';
2
+ import { StackedChart, StackedPaneConfig, StackedChartOptions } from '../core/stacked';
3
+ import { Chart } from '../core/Chart';
4
+ import { Bounds, CursorOptions } from '../types';
5
+ import { VeloPlotSeries, ChartBindingOptions } from '../bindings/shared';
6
+
7
+ export declare class VeloPlotComponent implements OnDestroy, AfterViewInit {
8
+ readonly series: import('@angular/core').InputSignal<VeloPlotSeries[]>;
9
+ readonly width: import('@angular/core').InputSignal<string | number>;
10
+ readonly height: import('@angular/core').InputSignal<string | number>;
11
+ readonly cursor: import('@angular/core').InputSignal<CursorOptions | undefined>;
12
+ readonly chartOptions: import('@angular/core').InputSignal<ChartBindingOptions>;
13
+ readonly zoomChange: import('@angular/core').OutputEmitterRef<Bounds>;
14
+ readonly containerRef: import('@angular/core').Signal<ElementRef<HTMLDivElement> | undefined>;
15
+ chart: Chart | null;
16
+ private destroy;
17
+ private previousSeries;
18
+ private prevSync;
19
+ constructor();
20
+ ngAfterViewInit(): void;
21
+ mountChart(container: HTMLDivElement): void;
22
+ get widthStyle(): string;
23
+ get heightStyle(): string;
24
+ ngOnDestroy(): void;
25
+ private syncOptionsAndSeries;
26
+ private applySeries;
27
+ resetZoom(): void;
28
+ getChart(): Chart | null;
29
+ }
30
+ export declare class StackedPlotComponent implements OnDestroy, AfterViewInit {
31
+ readonly panes: import('@angular/core').InputSignal<StackedPaneConfig[]>;
32
+ readonly width: import('@angular/core').InputSignal<string | number>;
33
+ readonly height: import('@angular/core').InputSignal<string | number>;
34
+ readonly stackOptions: import('@angular/core').InputSignal<Omit<StackedChartOptions, "container" | "panes">>;
35
+ readonly containerRef: import('@angular/core').Signal<ElementRef<HTMLDivElement> | undefined>;
36
+ stack: StackedChart | null;
37
+ private destroy;
38
+ get widthStyle(): string;
39
+ get heightStyle(): string;
40
+ ngAfterViewInit(): void;
41
+ mountStack(container: HTMLDivElement): void;
42
+ ngOnDestroy(): void;
43
+ fitAll(): void;
44
+ resetAll(): void;
45
+ }
46
+ export { useVeloPlotAngular, useStackedPlotAngular, useIndicatorAngular, useChartSyncAngular } from './hooks';
@@ -0,0 +1 @@
1
+ export * from './angular/hooks-entry'
@@ -0,0 +1,9 @@
1
+ import { V as l, c as o, b as u, a as e, u as r } from "./hooks-DH-3bewj.js";
2
+ export {
3
+ l as VeloPlotHost,
4
+ o as useChartSyncAngular,
5
+ u as useIndicatorAngular,
6
+ e as useStackedPlotAngular,
7
+ r as useVeloPlotAngular
8
+ };
9
+ //# sourceMappingURL=angular-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-hooks.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1 @@
1
+ export * from './angular/index'
@@ -0,0 +1,166 @@
1
+ var Q = Object.create;
2
+ var C = Object.defineProperty;
3
+ var T = Object.getOwnPropertyDescriptor;
4
+ var $ = (e, t) => (t = Symbol[e]) ? t : Symbol.for("Symbol." + e), f = (e) => {
5
+ throw TypeError(e);
6
+ };
7
+ var j = (e, t, s) => t in e ? C(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s;
8
+ var L = (e, t) => C(e, "name", { value: t, configurable: !0 });
9
+ var b = (e) => [, , , Q((e == null ? void 0 : e[$("metadata")]) ?? null)], q = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], S = (e) => e !== void 0 && typeof e != "function" ? f("Function expected") : e, U = (e, t, s, c, r) => ({ kind: q[e], name: t, metadata: c, addInitializer: (h) => s._ ? f("Already initialized") : r.push(S(h || null)) }), W = (e, t) => j(t, $("metadata"), e[3]), R = (e, t, s, c) => {
10
+ for (var r = 0, h = e[t >> 1], u = h && h.length; r < u; r++) t & 1 ? h[r].call(s) : c = h[r].call(s, c);
11
+ return c;
12
+ }, x = (e, t, s, c, r, h) => {
13
+ var u, a, z, y, v, i = t & 7, k = !!(t & 8), p = !!(t & 16), w = i > 3 ? e.length + 1 : i ? k ? 1 : 2 : 0, B = q[i + 5], H = i > 3 && (e[w - 1] = []), N = e[w] || (e[w] = []), l = i && (!p && !k && (r = r.prototype), i < 5 && (i > 3 || !p) && T(i < 4 ? r : { get [s]() {
14
+ return M(this, h);
15
+ }, set [s](o) {
16
+ return P(this, h, o);
17
+ } }, s));
18
+ i ? p && i < 4 && L(h, (i > 2 ? "set " : i > 1 ? "get " : "") + s) : L(r, s);
19
+ for (var A = c.length - 1; A >= 0; A--)
20
+ y = U(i, s, z = {}, e[3], N), i && (y.static = k, y.private = p, v = y.access = { has: p ? (o) => X(r, o) : (o) => s in o }, i ^ 3 && (v.get = p ? (o) => (i ^ 1 ? M : Y)(o, r, i ^ 4 ? h : l.get) : (o) => o[s]), i > 2 && (v.set = p ? (o, O) => P(o, r, O, i ^ 4 ? h : l.set) : (o, O) => o[s] = O)), a = (0, c[A])(i ? i < 4 ? p ? h : l[B] : i > 4 ? void 0 : { get: l.get, set: l.set } : r, y), z._ = 1, i ^ 4 || a === void 0 ? S(a) && (i > 4 ? H.unshift(a) : i ? p ? h = a : l[B] = a : r = a) : typeof a != "object" || a === null ? f("Object expected") : (S(u = a.get) && (l.get = u), S(u = a.set) && (l.set = u), S(u = a.init) && H.unshift(u));
21
+ return i || W(e, r), l && C(r, s, l), p ? i ^ 4 ? h : l : r;
22
+ }, n = (e, t, s) => j(e, typeof t != "symbol" ? t + "" : t, s), D = (e, t, s) => t.has(e) || f("Cannot " + s), X = (e, t) => Object(t) !== t ? f('Cannot use the "in" operator on this value') : e.has(t), M = (e, t, s) => (D(e, t, "read from private field"), s ? s.call(e) : t.get(e));
23
+ var P = (e, t, s, c) => (D(e, t, "write to private field"), c ? c.call(e, s) : t.set(e, s), s), Y = (e, t, s) => (D(e, t, "access private method"), s);
24
+ import { input as d, output as _, viewChild as J, effect as tt, Component as K } from "@angular/core";
25
+ import { c as et } from "./createStackedChart-DqcLCFGS.js";
26
+ import { p as I, o as st, s as it, d as rt } from "./optionsSync-QUiN4Inw.js";
27
+ import { c as nt } from "./chartSyncBridge-D_rCtbFq.js";
28
+ import { u as ht } from "./hooks-DH-3bewj.js";
29
+ import { V as gt, c as mt, b as vt, a as kt } from "./hooks-DH-3bewj.js";
30
+ function m(e) {
31
+ return typeof e == "number" ? `${e}px` : e;
32
+ }
33
+ var F, E;
34
+ F = [K({
35
+ selector: "velo-plot",
36
+ standalone: !0,
37
+ template: '<div #container class="velo-plot-container" role="img" [style.width]="widthStyle" [style.height]="heightStyle"></div>',
38
+ styles: [":host { display: block; } .velo-plot-container { position: relative; }"]
39
+ })];
40
+ class g {
41
+ constructor() {
42
+ n(this, "series", d([]));
43
+ n(this, "width", d("100%"));
44
+ n(this, "height", d(400));
45
+ n(this, "cursor", d());
46
+ n(this, "chartOptions", d({}));
47
+ n(this, "zoomChange", _());
48
+ n(this, "containerRef", J("container"));
49
+ n(this, "chart", null);
50
+ n(this, "destroy", null);
51
+ n(this, "previousSeries", /* @__PURE__ */ new Map());
52
+ n(this, "prevSync", I({}));
53
+ tt(() => {
54
+ this.containerRef(), this.syncOptionsAndSeries();
55
+ });
56
+ }
57
+ ngAfterViewInit() {
58
+ var s;
59
+ const t = (s = this.containerRef()) == null ? void 0 : s.nativeElement;
60
+ t && this.mountChart(t);
61
+ }
62
+ mountChart(t) {
63
+ if (this.chart) return;
64
+ const s = nt(t, this.chartOptions());
65
+ this.chart = s.chart, this.destroy = s.destroy, this.prevSync = I(this.chartOptions()), this.syncOptionsAndSeries();
66
+ }
67
+ get widthStyle() {
68
+ return m(this.width());
69
+ }
70
+ get heightStyle() {
71
+ return m(this.height());
72
+ }
73
+ ngOnDestroy() {
74
+ var t;
75
+ (t = this.destroy) == null || t.call(this), this.chart = null;
76
+ }
77
+ syncOptionsAndSeries() {
78
+ if (!this.chart) return;
79
+ const t = I(this.chartOptions());
80
+ st(this.prevSync, t) && (it(this.chart, this.prevSync, t), this.prevSync = t), this.applySeries();
81
+ }
82
+ applySeries() {
83
+ this.chart && (this.previousSeries = rt(
84
+ {
85
+ addSeries: (t) => this.chart.addSeries(t),
86
+ updateSeries: (t, s) => this.chart.updateSeries(t, s),
87
+ removeSeries: (t) => this.chart.removeSeries(t),
88
+ autoScale: () => this.chart.autoScale()
89
+ },
90
+ this.series(),
91
+ this.previousSeries
92
+ ));
93
+ }
94
+ resetZoom() {
95
+ var t;
96
+ (t = this.chart) == null || t.resetZoom();
97
+ }
98
+ getChart() {
99
+ return this.chart;
100
+ }
101
+ }
102
+ E = b(null), g = x(E, 0, "VeloPlotComponent", F, g), R(E, 1, g);
103
+ var G, Z;
104
+ G = [K({
105
+ selector: "velo-stacked-plot",
106
+ standalone: !0,
107
+ template: '<div #container class="velo-plot-stacked" role="img" [style.width]="widthStyle" [style.height]="heightStyle"></div>',
108
+ styles: [":host { display: block; } .velo-plot-stacked { position: relative; }"]
109
+ })];
110
+ class V {
111
+ constructor() {
112
+ n(this, "panes", d([]));
113
+ n(this, "width", d("100%"));
114
+ n(this, "height", d(480));
115
+ n(this, "stackOptions", d({}));
116
+ n(this, "containerRef", J("container"));
117
+ n(this, "stack", null);
118
+ n(this, "destroy", null);
119
+ }
120
+ get widthStyle() {
121
+ return m(this.width());
122
+ }
123
+ get heightStyle() {
124
+ return m(this.height());
125
+ }
126
+ ngAfterViewInit() {
127
+ var s;
128
+ const t = (s = this.containerRef()) == null ? void 0 : s.nativeElement;
129
+ t && this.mountStack(t);
130
+ }
131
+ mountStack(t) {
132
+ if (this.stack) return;
133
+ const s = et({
134
+ ...this.stackOptions(),
135
+ panes: this.panes(),
136
+ container: t
137
+ });
138
+ this.stack = s, this.destroy = () => s.destroy();
139
+ }
140
+ ngOnDestroy() {
141
+ var t;
142
+ (t = this.destroy) == null || t.call(this), this.stack = null;
143
+ }
144
+ fitAll() {
145
+ var t;
146
+ (t = this.stack) == null || t.fitAll();
147
+ }
148
+ resetAll() {
149
+ var t;
150
+ (t = this.stack) == null || t.resetAll();
151
+ }
152
+ }
153
+ Z = b(null), V = x(Z, 0, "StackedPlotComponent", G, V), R(Z, 1, V);
154
+ const ut = g, yt = ht;
155
+ export {
156
+ ut as SciPlotComponent,
157
+ V as StackedPlotComponent,
158
+ g as VeloPlotComponent,
159
+ gt as VeloPlotHost,
160
+ mt as useChartSyncAngular,
161
+ vt as useIndicatorAngular,
162
+ yt as useSciPlotAngular,
163
+ kt as useStackedPlotAngular,
164
+ ht as useVeloPlotAngular
165
+ };
166
+ //# sourceMappingURL=angular.js.map