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.
- package/README.md +26 -12
- package/dist/ChartCore-AnR_3Xkb.js +7338 -0
- package/dist/ChartCore-AnR_3Xkb.js.map +1 -0
- package/dist/GpuChartRenderer-Dxc0hrQA.js +75 -0
- package/dist/GpuChartRenderer-Dxc0hrQA.js.map +1 -0
- package/dist/{index.core-COREBDNq.js → PluginRegistry-CzMHebYP.js} +24 -38
- package/dist/PluginRegistry-CzMHebYP.js.map +1 -0
- package/dist/a11y-Bw6urYpr.js +105 -0
- package/dist/a11y-Bw6urYpr.js.map +1 -0
- package/dist/angular/hooks-entry.d.ts +1 -0
- package/dist/angular/hooks.d.ts +26 -0
- package/dist/angular/index.d.ts +8 -0
- package/dist/angular/velo-plot.component.d.ts +46 -0
- package/dist/angular-hooks.d.ts +1 -0
- package/dist/angular-hooks.js +9 -0
- package/dist/angular-hooks.js.map +1 -0
- package/dist/angular.d.ts +1 -0
- package/dist/angular.js +166 -0
- package/dist/angular.js.map +1 -0
- package/dist/assets/indicator.worker-bv0zC4EX.js.map +1 -1
- package/dist/astro/StackedPlot.astro +19 -0
- package/dist/astro/VeloPlot.astro +23 -0
- package/dist/{axisFormat-CzumxpCL.js → axisFormat-Sz4WIJfQ.js} +2 -2
- package/dist/{axisFormat-CzumxpCL.js.map → axisFormat-Sz4WIJfQ.js.map} +1 -1
- package/dist/bindings/shared/a11y.d.ts +26 -0
- package/dist/bindings/shared/chartLifecycle.d.ts +16 -0
- package/dist/bindings/shared/chartSyncBridge.d.ts +8 -0
- package/dist/bindings/shared/dimensions.d.ts +1 -0
- package/dist/bindings/shared/index.d.ts +9 -0
- package/dist/bindings/shared/indicatorBridge.d.ts +11 -0
- package/dist/bindings/shared/optionsSync.d.ts +7 -0
- package/dist/bindings/shared/seriesDiff.d.ts +8 -0
- package/dist/bindings/shared/stackedSync.d.ts +9 -0
- package/dist/bindings/shared/types.d.ts +46 -0
- package/dist/bindings/test-utils/index.d.ts +35 -0
- package/dist/bindings/test-utils/mockLifecycle.d.ts +120 -0
- package/dist/bindings/test-utils/vitestSveltePlugin.d.ts +3 -0
- package/dist/chartSyncBridge-D_rCtbFq.js +58 -0
- package/dist/chartSyncBridge-D_rCtbFq.js.map +1 -0
- package/dist/core/Chart.d.ts +1 -1
- package/dist/core/ChartStatistics.d.ts +1 -1
- package/dist/core/InteractionManager.d.ts +7 -1
- package/dist/core/OverlayRenderer.d.ts +5 -0
- package/dist/core/annotations/types.d.ts +1 -1
- package/dist/core/chart/ChartCore.d.ts +14 -19
- package/dist/core/chart/ChartFeatureHooks.d.ts +7 -0
- package/dist/core/chart/chartExportPatch.d.ts +2 -0
- package/dist/core/chart/overlaySeriesRegistry.d.ts +7 -0
- package/dist/core/chart/series/SeriesActions.d.ts +1 -0
- package/dist/core/chart/series/SeriesBufferLite.d.ts +13 -0
- package/dist/core/chart/series/seriesOptionsRegistry.d.ts +8 -0
- package/dist/core/chart/series/seriesTypeRegistry.d.ts +5 -0
- package/dist/core/chart/types.d.ts +1 -1
- package/dist/core/clipboard/index.d.ts +1 -1
- package/dist/core/debug/index.d.ts +1 -1
- package/dist/core/keybindings/index.d.ts +1 -1
- package/dist/core/loading/index.d.ts +1 -1
- package/dist/core/locale/index.d.ts +1 -1
- package/dist/core/stacked/paneResize.d.ts +3 -0
- package/dist/core/stacked/types.d.ts +10 -0
- package/dist/core/theme-editor/index.d.ts +1 -1
- package/dist/createStackedChart-DqcLCFGS.js +1338 -0
- package/dist/createStackedChart-DqcLCFGS.js.map +1 -0
- package/dist/examples/PluginDemonstration.d.ts +1 -1
- package/dist/hooks-DH-3bewj.js +69 -0
- package/dist/hooks-DH-3bewj.js.map +1 -0
- package/dist/{index-BBpJwOct.js → index-0InEyj0q.js} +119 -121
- package/dist/index-0InEyj0q.js.map +1 -0
- package/dist/{index-qunX30Xu.js → index-B7PTX94B.js} +2133 -2133
- package/dist/index-B7PTX94B.js.map +1 -0
- package/dist/{index-BMiZoKmm.js → index-BgrvqltV.js} +67 -67
- package/dist/index-BgrvqltV.js.map +1 -0
- package/dist/{index-DoYxf1cV.js → index-CWxIHdwX.js} +38 -98
- package/dist/index-CWxIHdwX.js.map +1 -0
- package/dist/index-CaXWSOTk.js.map +1 -1
- package/dist/{mockDatafeed-927foCM4.js → index-Cv6ZDLWf.js} +227 -217
- package/dist/index-Cv6ZDLWf.js.map +1 -0
- package/dist/index-Dag88bW4.js.map +1 -1
- package/dist/index-qhscKTDy.js.map +1 -1
- package/dist/index.core.d.ts +9 -7
- package/dist/index.d.ts +2 -15
- package/dist/indicators--eJGmVox.js.map +1 -1
- package/dist/optionsSync-QUiN4Inw.js +119 -0
- package/dist/optionsSync-QUiN4Inw.js.map +1 -0
- package/dist/plugins/3d/index.d.ts +2 -2
- package/dist/plugins/3d.d.ts +2 -2
- package/dist/plugins/3d.js +3 -1
- package/dist/plugins/3d.js.map +1 -1
- package/dist/plugins/analysis/index.d.ts +1 -1
- package/dist/plugins/analysis/indicators.d.ts +1 -1
- package/dist/plugins/analysis.d.ts +2 -2
- package/dist/plugins/analysis.js +2 -2
- package/dist/plugins/analysis.js.map +1 -1
- package/dist/plugins/annotations/index.d.ts +1 -1
- package/dist/plugins/annotations.d.ts +2 -2
- package/dist/plugins/annotations.js.map +1 -1
- package/dist/plugins/anomaly-detection.js +1 -1
- package/dist/plugins/anomaly-detection.js.map +1 -1
- package/dist/plugins/broken-axis.d.ts +2 -2
- package/dist/plugins/builtins/crosshair/CrosshairPlugin.d.ts +1 -1
- package/dist/plugins/builtins/index.d.ts +1 -1
- package/dist/plugins/caching.d.ts +2 -2
- package/dist/plugins/clipboard/index.d.ts +2 -2
- package/dist/plugins/clipboard.d.ts +2 -2
- package/dist/plugins/clipboard.js.map +1 -1
- package/dist/plugins/context-menu/index.d.ts +1 -1
- package/dist/plugins/context-menu.d.ts +2 -2
- package/dist/plugins/context-menu.js +1 -1
- package/dist/plugins/context-menu.js.map +1 -1
- package/dist/plugins/createPlugin.d.ts +8 -0
- package/dist/plugins/data-export/index.d.ts +1 -1
- package/dist/plugins/data-export.d.ts +2 -2
- package/dist/plugins/data-export.js +2 -2
- package/dist/plugins/data-export.js.map +1 -1
- package/dist/plugins/data-transform.d.ts +2 -2
- package/dist/plugins/data-transform.js +19 -19
- package/dist/plugins/data-transform.js.map +1 -1
- package/dist/plugins/debug/index.d.ts +2 -2
- package/dist/plugins/debug.d.ts +2 -2
- package/dist/plugins/debug.js +33 -33
- package/dist/plugins/debug.js.map +1 -1
- package/dist/plugins/forecasting/index.d.ts +1 -1
- package/dist/plugins/forecasting.js.map +1 -1
- package/dist/plugins/gpu/index.d.ts +2 -2
- package/dist/plugins/gpu.d.ts +2 -2
- package/dist/plugins/gpu.js +2033 -209
- package/dist/plugins/gpu.js.map +1 -1
- package/dist/plugins/i18n/index.d.ts +2 -2
- package/dist/plugins/i18n.d.ts +2 -2
- package/dist/plugins/i18n.js +286 -23
- package/dist/plugins/i18n.js.map +1 -1
- package/dist/plugins/index.d.ts +1 -1
- package/dist/plugins/keyboard.d.ts +2 -2
- package/dist/plugins/keyboard.js +65 -5
- package/dist/plugins/keyboard.js.map +1 -1
- package/dist/plugins/latex.js +766 -207
- package/dist/plugins/latex.js.map +1 -1
- package/dist/plugins/lazy-load.d.ts +2 -2
- package/dist/plugins/loading/index.d.ts +2 -3
- package/dist/plugins/loading.d.ts +2 -2
- package/dist/plugins/loading.js +3 -4
- package/dist/plugins/ml-integration.d.ts +2 -2
- package/dist/plugins/ml-integration.js +5 -5
- package/dist/plugins/ml-integration.js.map +1 -1
- package/dist/plugins/offscreen.d.ts +2 -2
- package/dist/plugins/offscreen.js +11 -10
- package/dist/plugins/offscreen.js.map +1 -1
- package/dist/plugins/pattern-recognition.d.ts +2 -2
- package/dist/plugins/pattern-recognition.js +1 -1
- package/dist/plugins/pattern-recognition.js.map +1 -1
- package/dist/plugins/radar.d.ts +2 -2
- package/dist/plugins/regression.d.ts +2 -2
- package/dist/plugins/regression.js +255 -257
- package/dist/plugins/regression.js.map +1 -1
- package/dist/plugins/roi.js +9 -9
- package/dist/plugins/roi.js.map +1 -1
- package/dist/plugins/snapshot/index.d.ts +1 -1
- package/dist/plugins/snapshot/types.d.ts +1 -1
- package/dist/plugins/snapshot.d.ts +2 -2
- package/dist/plugins/snapshot.js.map +1 -1
- package/dist/plugins/streaming/index.d.ts +2 -2
- package/dist/plugins/streaming.d.ts +2 -2
- package/dist/plugins/streaming.js +1 -1
- package/dist/plugins/sync/index.d.ts +3 -2
- package/dist/plugins/sync.d.ts +2 -2
- package/dist/plugins/sync.js.map +1 -1
- package/dist/plugins/theme-editor/index.d.ts +1 -1
- package/dist/plugins/theme-editor.d.ts +2 -2
- package/dist/plugins/tools/index.d.ts +1 -1
- package/dist/plugins/tools/tooltip/index.d.ts +1 -1
- package/dist/plugins/tools.d.ts +2 -2
- package/dist/plugins/tools.js +1 -1
- package/dist/plugins/types.d.ts +1 -1
- package/dist/plugins/video-recorder.d.ts +2 -2
- package/dist/plugins/virtualization.d.ts +2 -2
- package/dist/plugins/virtualization.js +1 -1
- package/dist/pool-DZ8shSqv.js +109 -0
- package/dist/pool-DZ8shSqv.js.map +1 -0
- package/dist/react/StackedPlot.d.ts +31 -0
- package/dist/react/VeloPlot.d.ts +29 -0
- package/dist/react/index.d.ts +25 -3
- package/dist/react/useChartSync.d.ts +8 -0
- package/dist/react/useIndicator.d.ts +12 -0
- package/dist/react/useVeloPlot.d.ts +19 -0
- package/dist/react.js +325 -24
- package/dist/react.js.map +1 -1
- package/dist/renderer/NativeWebGLRenderer.d.ts +2 -1
- package/dist/renderer/native/NativeWebGLRenderer.d.ts +5 -1
- package/dist/renderer/native/draw.d.ts +2 -47
- package/dist/renderer/native/drawCore.d.ts +27 -0
- package/dist/renderer/native/drawExtended.d.ts +29 -0
- package/dist/renderer/native/frameRenderExtended.d.ts +1 -0
- package/dist/renderer/native/frameRenderRegistry.d.ts +27 -0
- package/dist/renderer/native/programFactoryCore.d.ts +6 -0
- package/dist/renderer/native/programFactoryExtended.d.ts +4 -0
- package/dist/renderer/native/utils.d.ts +3 -29
- package/dist/renderer/native/utilsCore.d.ts +14 -0
- package/dist/renderer/native/utilsExtended.d.ts +17 -0
- package/dist/renderer/overlaySeriesExtended.d.ts +1 -0
- package/dist/renderer/registerExtendedSeries.d.ts +1 -0
- package/dist/renderer/registerWebGPU.d.ts +2 -0
- package/dist/renderer/seriesBufferExtended.d.ts +4 -0
- package/dist/scientific/index.d.ts +44 -0
- package/dist/scientific/registerScientific.d.ts +1 -0
- package/dist/scientific.d.ts +1 -0
- package/dist/scientific.js +91 -0
- package/dist/scientific.js.map +1 -0
- package/dist/solid/VeloPlot.d.ts +16 -0
- package/dist/solid/index.d.ts +13 -0
- package/dist/solid/useChartSync.d.ts +6 -0
- package/dist/solid/useIndicator.d.ts +11 -0
- package/dist/solid/useStackedPlot.d.ts +14 -0
- package/dist/solid/useVeloPlot.d.ts +18 -0
- package/dist/solid.d.ts +1 -0
- package/dist/solid.js +169 -0
- package/dist/solid.js.map +1 -0
- package/dist/stackedSync-tnrunZMt.js +100 -0
- package/dist/stackedSync-tnrunZMt.js.map +1 -0
- package/dist/svelte/StackedPlot.svelte +29 -0
- package/dist/svelte/StackedPlot.test.ts +114 -0
- package/dist/svelte/VeloPlot.svelte +44 -0
- package/dist/svelte/VeloPlot.test.ts +105 -0
- package/dist/svelte/index.d.ts +11 -0
- package/dist/svelte/index.test.ts +20 -0
- package/dist/svelte/index.ts +15 -0
- package/dist/svelte/useChartSync.d.ts +8 -0
- package/dist/svelte/useChartSync.test.ts +49 -0
- package/dist/svelte/useChartSync.ts +29 -0
- package/dist/svelte/useIndicator.d.ts +13 -0
- package/dist/svelte/useIndicator.test.ts +67 -0
- package/dist/svelte/useIndicator.ts +43 -0
- package/dist/svelte/useStackedPlot.d.ts +16 -0
- package/dist/svelte/useStackedPlot.test.ts +76 -0
- package/dist/svelte/useStackedPlot.ts +54 -0
- package/dist/svelte/useVeloPlot.d.ts +21 -0
- package/dist/svelte/useVeloPlot.test.ts +100 -0
- package/dist/svelte/useVeloPlot.ts +81 -0
- package/dist/svelte.d.ts +1 -0
- package/dist/svelte.js +140 -0
- package/dist/svelte.js.map +1 -0
- package/dist/testing/index.d.ts +1 -1
- package/dist/theme/index.d.ts +2 -1
- package/dist/trading/index.d.ts +1 -4
- package/dist/trading/registerTrading.d.ts +3 -0
- package/dist/trading.js +42 -42
- package/dist/types.d.ts +4 -4
- package/dist/{utils-BK5UUXxj.js → utils-Dx0h0bgQ.js} +9 -9
- package/dist/{utils-BK5UUXxj.js.map → utils-Dx0h0bgQ.js.map} +1 -1
- package/dist/velo-plot.full.js +2216 -1346
- package/dist/velo-plot.full.js.map +1 -1
- package/dist/velo-plot.js +33 -28
- package/dist/velo-plot.js.map +1 -1
- package/dist/vue/StackedPlot.vue.d.ts +48 -0
- package/dist/vue/VeloPlot.vue.d.ts +64 -0
- package/dist/vue/index.d.ts +250 -0
- package/dist/vue/useChartSync.d.ts +52 -0
- package/dist/vue/useIndicator.d.ts +23 -0
- package/dist/vue/useStackedPlot.d.ts +15 -0
- package/dist/vue/useVeloPlot.d.ts +20 -0
- package/dist/vue.d.ts +1 -0
- package/dist/vue.js +309 -0
- package/dist/vue.js.map +1 -0
- package/dist/workers/indicatorsAsync.d.ts +2 -0
- package/dist/workers/pool.d.ts +9 -0
- package/package.json +96 -10
- package/dist/ChartCore-ivzLqxVb.js +0 -8350
- package/dist/ChartCore-ivzLqxVb.js.map +0 -1
- package/dist/SciPlot-CEU4ApgD.js +0 -463
- package/dist/SciPlot-CEU4ApgD.js.map +0 -1
- package/dist/createStackedChart-DxNW0VkF.js +0 -705
- package/dist/createStackedChart-DxNW0VkF.js.map +0 -1
- package/dist/gpuRenderer-BpaMYz-k.js +0 -1848
- package/dist/gpuRenderer-BpaMYz-k.js.map +0 -1
- package/dist/index-BBpJwOct.js.map +0 -1
- package/dist/index-BMiZoKmm.js.map +0 -1
- package/dist/index-DoYxf1cV.js.map +0 -1
- package/dist/index-qunX30Xu.js.map +0 -1
- package/dist/index-x4stH3jD.js +0 -282
- package/dist/index-x4stH3jD.js.map +0 -1
- package/dist/index.core-COREBDNq.js.map +0 -1
- package/dist/mockDatafeed-927foCM4.js.map +0 -1
- package/dist/pool-15HMCNv8.js +0 -88
- package/dist/pool-15HMCNv8.js.map +0 -1
- package/dist/react/SciPlot.d.ts +0 -60
- package/dist/react/useSciPlot.d.ts +0 -56
- package/dist/symbols-DT0eLlpW.js +0 -568
- 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
|
|
2
|
-
var g = (i, e, r) => e in i ?
|
|
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-
|
|
5
|
-
|
|
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
|
|
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
|
-
`[
|
|
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((
|
|
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
|
|
82
|
+
return t || (t = new d()), t;
|
|
86
83
|
}
|
|
87
|
-
function
|
|
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
|
|
93
|
+
function w(i, e) {
|
|
97
94
|
const r = h(i, e);
|
|
98
|
-
return
|
|
95
|
+
return p({ manifest: i, factory: r }), r;
|
|
99
96
|
}
|
|
100
|
-
async function
|
|
97
|
+
async function b(i, e) {
|
|
101
98
|
const r = a().get(i);
|
|
102
99
|
if (!r) {
|
|
103
|
-
console.warn(`[
|
|
100
|
+
console.warn(`[VeloPlot] Plugin "${i}" not found in registry`);
|
|
104
101
|
return;
|
|
105
102
|
}
|
|
106
103
|
return r(e);
|
|
107
104
|
}
|
|
108
|
-
function
|
|
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
|
|
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
|
|
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
|
-
|
|
157
|
-
|
|
158
|
-
|
|
144
|
+
w as a,
|
|
145
|
+
P as b,
|
|
146
|
+
m as c,
|
|
159
147
|
h as d,
|
|
160
|
-
|
|
161
|
-
R as f,
|
|
148
|
+
z as e,
|
|
162
149
|
a as g,
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
A as v
|
|
150
|
+
b as l,
|
|
151
|
+
p as r,
|
|
152
|
+
$ as v
|
|
167
153
|
};
|
|
168
|
-
//# sourceMappingURL=
|
|
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":";;;;AA6FO,SAASA,EAAeC,GAA2C;AACxE,SAAO,IAAIC,EAAoBD,CAAM;AACvC;AC1EA,MAAME,EAA6C;AAAA,EAAnD;AACY,IAAAC,EAAA,qCAAc,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKtB,SAASC,GAAkC;AACvC,UAAMC,IAAOD,EAAM,SAAS;AAE5B,IAAI,KAAK,QAAQ,IAAIC,CAAI,KACrB,QAAQ;AAAA,MACJ,+BAA+BA,CAAI;AAAA,IAAA,GAI3C,KAAK,QAAQ,IAAIA,GAAMD,CAAK;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAWC,GAAuB;AAC9B,UAAMC,IAAU,KAAK,QAAQ,IAAID,CAAI;AACrC,gBAAK,QAAQ,OAAOA,CAAI,GACjBC;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,IAAID,GAAyC;;AACzC,YAAOE,IAAA,KAAK,QAAQ,IAAIF,CAAI,MAArB,gBAAAE,EAAwB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAyB;AACrB,WAAO,MAAM,KAAK,KAAK,QAAQ,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiBC,GAAgD;AAC7D,UAAMC,IAA4B,CAAA;AAElC,gBAAK,QAAQ,QAAQ,CAACL,MAAU;;AAC5B,OAAIG,IAAAH,EAAM,SAAS,aAAf,QAAAG,EAAyB,SAASC,MAClCC,EAAQ,KAAKL,EAAM,QAAQ;AAAA,IAEnC,CAAC,GAEMK;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,UAAUC,GAA+B;AACrC,UAAMD,IAA4B,CAAA,GAC5BE,IAAWD,EAAI,YAAA;AAErB,gBAAK,QAAQ,QAAQ,CAACN,MAAU;;AAC5B,OAAIG,IAAAH,EAAM,SAAS,SAAf,QAAAG,EAAqB,KAAK,CAACK,MAAMA,EAAE,YAAA,EAAc,SAASD,CAAQ,MAClEF,EAAQ,KAAKL,EAAM,QAAQ;AAAA,IAEnC,CAAC,GAEMK;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,IAAIJ,GAAuB;AACvB,WAAO,KAAK,QAAQ,IAAIA,CAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAe;AACf,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACV,SAAK,QAAQ,MAAA;AAAA,EACjB;AACJ;AAMA,IAAIQ,IAA8C;AAK3C,SAASC,IAAoC;AAChD,SAAKD,MACDA,IAAmB,IAAIX,EAAA,IAEpBW;AACX;AAMO,SAASE,EAAeX,GAAkC;AAC7D,EAAAU,EAAA,EAAoB,SAASV,CAAK;AACtC;AAKO,SAASY,EACZC,GACAC,GACsB;AACtB,SAAO,CAACC,OAEG;AAAA,IACH,GAFWD,EAAQC,CAAM;AAAA,IAGzB,UAAAF;AAAA,EAAA;AAGZ;AAKO,SAASG,EACZH,GACAC,GACsB;AACtB,QAAMG,IAAgBL,EAAaC,GAAUC,CAAO;AACpD,SAAAH,EAAe,EAAE,UAAAE,GAAU,SAASI,EAAA,CAAgC,GAC7DA;AACX;AASA,eAAsBC,EAClBjB,GACAc,GAC2D;AAC3D,QAAMD,IAAUJ,IAAoB,IAAIT,CAAI;AAC5C,MAAI,CAACa,GAAS;AACV,YAAQ,KAAK,sBAAsBb,CAAI,yBAAyB;AAChE;AAAA,EACJ;AACA,SAAOa,EAAQC,CAAM;AACzB;AAKO,SAASI,IAAoE;AAChF,QAAMC,IAAWV,EAAA,GACXW,IAAiC;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAGEC,IAA2C,CAAA;AACjD,SAAAD,EAAW,QAAQ,CAACE,MAAQ;AACxB,IAAAD,EAAOC,CAAG,IAAIH,EAAS,iBAAiBG,CAAG;AAAA,EAC/C,CAAC,GAEMD;AACX;AASO,SAASE,EAAiBX,GAAoC;AACjE,QAAMY,IAAmB,CAAA;AAEzB,SAAKZ,EAAS,OAEF,yCAAyC,KAAKA,EAAS,IAAI,KACnEY,EAAO;AAAA,IACH;AAAA,EAAA,IAHJA,EAAO,KAAK,8BAA8B,GAOzCZ,EAAS,UAEF,kBAAkB,KAAKA,EAAS,OAAO,KAC/CY,EAAO,KAAK,+DAA+D,IAF3EA,EAAO,KAAK,iCAAiC,GAK7CZ,EAAS,iBACJ,MAAM,QAAQA,EAAS,YAAY,KACpCY,EAAO,KAAK,+BAA+B,IAI/CZ,EAAS,aACJ,MAAM,QAAQA,EAAS,QAAQ,KAChCY,EAAO,KAAK,2BAA2B,IAIxCA;AACX;AAKO,SAASC,EACZb,GACAc,GAC2C;AAC3C,QAAMC,IAAqB,CAAA;AAE3B,MAAIf,EAAS,eAAe;AACxB,UAAM,CAACgB,CAAQ,IAAIhB,EAAS,cAAc,MAAM,GAAG,EAAE,IAAI,MAAM,GACzD,CAACiB,CAAQ,IAAIH,EAAc,MAAM,GAAG,EAAE,IAAI,MAAM;AAEtD,QAAIE,IAAWC;AACX,aAAO;AAAA,QACH,YAAY;AAAA,QACZ,UAAU;AAAA,UACN,2BAA2BjB,EAAS,aAAa,iBAAiBc,CAAa;AAAA,QAAA;AAAA,MACnF;AAIR,IAAIE,IAAWC,KACXF,EAAS;AAAA,MACL,gCAAgCf,EAAS,aAAa;AAAA,IAAA;AAAA,EAGlE;AAEA,SAAO,EAAE,YAAY,IAAM,UAAAe,EAAA;AAC/B;"}
|
|
@@ -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":";AAqBA,MAAMA,IACJ;AAEK,SAASC,EACdC,IAA2B,IAC3BC,GACAC,GACQ;AACR,MAAIA,EAAa,QAAOA;AACxB,QAAMC,IAAQH,EAAO,IAAI,CAACI,MAAMA,EAAE,QAAQA,EAAE,EAAE,EAAE,KAAK,IAAI,GACnDC,IAAQJ,IACV,KAAKA,EAAO,KAAK,QAAQ,CAAC,CAAC,OAAOA,EAAO,KAAK,QAAQ,CAAC,CAAC,OAAOA,EAAO,KAAK,QAAQ,CAAC,CAAC,OAAOA,EAAO,KAAK,QAAQ,CAAC,CAAC,KAClH;AACJ,SAAO,QAAQE,IAAQ,YAAYA,CAAK,KAAK,EAAE,GAAGE,IAAQ,oBAAoBA,CAAK,KAAK,EAAE;AAC5F;AAEO,SAASC,EACdC,GACAC,GAMAC,IAAuB,CAAA,GACX;AACZ,EAAAF,EAAU,aAAa,QAAQ,KAAK,GACpCA,EAAU;AAAA,IACR;AAAA,IACAR,EAAeU,EAAQ,QAAQA,EAAQ,QAAQA,EAAQ,KAAK;AAAA,EAAA,GAE9DF,EAAU,aAAa,YAAY,GAAG;AAEtC,MAAIG;AACJ,EAAID,EAAQ,mBAAmB,OAC7BC,IAAW,IAAIC,EAAkB;AAAA,IAC/B,QAAQJ;AAAA,IACR,WAAW;AAAA,MACT,aAAa,MAAA;;AAAM,gBAAAK,IAAAJ,EAAM,cAAN,gBAAAI,EAAA,KAAAJ;AAAA;AAAA,MACnB,WAAW,MAAA;;AAAM,gBAAAI,IAAAJ,EAAM,QAAN,gBAAAI,EAAA,KAAAJ,GAAY,KAAK;AAAA;AAAA,MAClC,YAAY,MAAA;;AAAM,gBAAAI,IAAAJ,EAAM,QAAN,gBAAAI,EAAA,KAAAJ,GAAY,IAAI;AAAA;AAAA,MAClC,SAAS,MAAA;;AAAM,gBAAAI,IAAAJ,EAAM,QAAN,gBAAAI,EAAA,KAAAJ,GAAY,GAAG;AAAA;AAAA,MAC9B,WAAW,MAAA;;AAAM,gBAAAI,IAAAJ,EAAM,QAAN,gBAAAI,EAAA,KAAAJ,GAAY,GAAG;AAAA;AAAA,MAChC,UAAU,MAAM;;AACd,cAAMK,KAAID,IAAAJ,EAAM,kBAAN,gBAAAI,EAAA,KAAAJ;AACV,YAAI,CAACK,EAAG;AACR,cAAMC,KAAMD,EAAE,OAAOA,EAAE,QAAQ,KACzBE,KAAMF,EAAE,OAAOA,EAAE,QAAQ;AAC/B,SAAAG,IAAAR,EAAM,SAAN,QAAAQ,EAAA,KAAAR,GAAa;AAAA,UACX,GAAG,CAACK,EAAE,OAAOC,GAAID,EAAE,OAAOC,CAAE;AAAA,UAC5B,GAAG,CAACD,EAAE,OAAOE,GAAIF,EAAE,OAAOE,CAAE;AAAA,QAAA;AAAA,MAEhC;AAAA,MACA,WAAW,MAAM;;AACf,cAAMF,KAAID,IAAAJ,EAAM,kBAAN,gBAAAI,EAAA,KAAAJ;AACV,YAAI,CAACK,EAAG;AACR,cAAMC,KAAMD,EAAE,OAAOA,EAAE,QAAQ,KACzBE,KAAMF,EAAE,OAAOA,EAAE,QAAQ;AAC/B,SAAAG,IAAAR,EAAM,SAAN,QAAAQ,EAAA,KAAAR,GAAa;AAAA,UACX,GAAG,CAACK,EAAE,OAAOC,GAAID,EAAE,OAAOC,CAAE;AAAA,UAC5B,GAAG,CAACD,EAAE,OAAOE,GAAIF,EAAE,OAAOE,CAAE;AAAA,QAAA;AAAA,MAEhC;AAAA,MACA,UAAU,MAAA;;AAAM,gBAAAH,IAAAJ,EAAM,cAAN,gBAAAI,EAAA,KAAAJ;AAAA;AAAA,IAAkB;AAAA,EACpC,CACD;AAGH,QAAMS,IAAU,SAAS,cAAc,OAAO;AAC9C,SAAAA,EAAQ,YAAY,qBACpBA,EAAQ,aAAa,eAAe,OAAO,GAC3CA,EAAQ,MAAM,UAAUnB,GACxBoB,EAAcD,GAASR,EAAQ,UAAU,CAAA,GAAIA,EAAQ,MAAM,GAC3DF,EAAU,YAAYU,CAAO,GAEtB;AAAA,IACL,UAAAP;AAAA,IACA,SAAAO;AAAA,IACA,SAAS,MAAM;AACb,MAAAP,KAAA,QAAAA,EAAU,WACVO,EAAQ,OAAA;AAAA,IACV;AAAA,EAAA;AAEJ;AAEO,SAASE,EACdZ,GACAU,GACAR,GACM;AACN,EAAAF,EAAU;AAAA,IACR;AAAA,IACAR,EAAeU,EAAQ,QAAQA,EAAQ,QAAQA,EAAQ,KAAK;AAAA,EAAA,GAE1DQ,KACFC,EAAcD,GAASR,EAAQ,UAAU,CAAA,GAAIA,EAAQ,MAAM;AAE/D;AAEA,SAASS,EACPE,GACApB,GACAC,GACM;AACN,EAAAmB,EAAM,gBAAA;AACN,QAAMC,IAAU,SAAS,cAAc,SAAS;AAChD,EAAAA,EAAQ,cAAc,sBACtBD,EAAM,YAAYC,CAAO;AAEzB,QAAMC,IAAQ,SAAS,cAAc,OAAO,GACtCC,IAAY,SAAS,cAAc,IAAI;AAC7C,aAAWC,KAAK,CAAC,UAAU,UAAU,WAAW,SAAS,GAAG;AAC1D,UAAMC,IAAK,SAAS,cAAc,IAAI;AACtC,IAAAA,EAAG,cAAcD,GACjBD,EAAU,YAAYE,CAAE;AAAA,EAC1B;AACA,EAAAH,EAAM,YAAYC,CAAS,GAC3BH,EAAM,YAAYE,CAAK;AAEvB,QAAMI,IAAQ,SAAS,cAAc,OAAO;AAC5C,aAAWtB,KAAKJ,GAAQ;AACtB,UAAM2B,IAAK,SAAS,cAAc,IAAI,GAChCC,IAAO,SAAS,cAAc,IAAI;AACxC,IAAAA,EAAK,cAAcxB,EAAE,QAAQA,EAAE,IAC/BuB,EAAG,YAAYC,CAAI;AAEnB,UAAMC,IAAS,SAAS,cAAc,IAAI;AAC1C,IAAI,OAAOzB,KAAKA,EAAE,IAChByB,EAAO,cAAc,OAAOzB,EAAE,EAAE,MAAM,IAC7BA,EAAE,SAAS,YACpByB,EAAO,cAAc,OAAOzB,EAAE,KAAK,QAAQ,MAAM,IAEjDyB,EAAO,cAAc,KAEvBF,EAAG,YAAYE,CAAM;AAErB,UAAMC,IAAS,SAAS,cAAc,IAAI;AAC1C,IAAAA,EAAO,cAAc7B,IACjB,GAAGA,EAAO,KAAK,QAAQ,CAAC,CAAC,MAAMA,EAAO,KAAK,QAAQ,CAAC,CAAC,KACrD,KACJ0B,EAAG,YAAYG,CAAM;AAErB,UAAMC,IAAS,SAAS,cAAc,IAAI;AAC1C,IAAAA,EAAO,cAAc9B,IACjB,GAAGA,EAAO,KAAK,QAAQ,CAAC,CAAC,MAAMA,EAAO,KAAK,QAAQ,CAAC,CAAC,KACrD,KACJ0B,EAAG,YAAYI,CAAM,GAErBL,EAAM,YAAYC,CAAE;AAAA,EACtB;AACA,EAAAP,EAAM,YAAYM,CAAK;AACzB;"}
|
|
@@ -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'
|
package/dist/angular.js
ADDED
|
@@ -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
|