velo-plot 1.11.1
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/LICENSE +21 -0
- package/README.md +119 -0
- package/dist/EventEmitter-DAbs2K1C.js +60 -0
- package/dist/EventEmitter-DAbs2K1C.js.map +1 -0
- package/dist/core/Chart.d.ts +15 -0
- package/dist/core/ChartControls.d.ts +41 -0
- package/dist/core/ChartInitQueue.d.ts +50 -0
- package/dist/core/ChartLegend.d.ts +74 -0
- package/dist/core/ChartStatistics.d.ts +18 -0
- package/dist/core/EventEmitter.d.ts +30 -0
- package/dist/core/InteractionManager.d.ts +96 -0
- package/dist/core/OverlayRenderer.d.ts +89 -0
- package/dist/core/Series.d.ts +4 -0
- package/dist/core/animation/AnimationEngine.d.ts +156 -0
- package/dist/core/animation/index.d.ts +6 -0
- package/dist/core/annotations/AnnotationManager.d.ts +61 -0
- package/dist/core/annotations/index.d.ts +5 -0
- package/dist/core/annotations/types.d.ts +159 -0
- package/dist/core/chart/ChartAnimatedNavigation.d.ts +53 -0
- package/dist/core/chart/ChartAxisManager.d.ts +61 -0
- package/dist/core/chart/ChartCore.d.ts +336 -0
- package/dist/core/chart/ChartExporter.d.ts +18 -0
- package/dist/core/chart/ChartNavigation.d.ts +33 -0
- package/dist/core/chart/ChartPluginBridge.d.ts +34 -0
- package/dist/core/chart/ChartRenderLoop.d.ts +100 -0
- package/dist/core/chart/ChartRenderer.d.ts +52 -0
- package/dist/core/chart/ChartScaling.d.ts +31 -0
- package/dist/core/chart/ChartSeries.d.ts +4 -0
- package/dist/core/chart/ChartSetup.d.ts +67 -0
- package/dist/core/chart/ChartStateManager.d.ts +54 -0
- package/dist/core/chart/ChartUI.d.ts +40 -0
- package/dist/core/chart/exporter/SVGExporter.d.ts +6 -0
- package/dist/core/chart/exporter/index.d.ts +5 -0
- package/dist/core/chart/index.d.ts +14 -0
- package/dist/core/chart/series/SeriesActions.d.ts +7 -0
- package/dist/core/chart/series/SeriesBuffer.d.ts +4 -0
- package/dist/core/chart/series/index.d.ts +6 -0
- package/dist/core/chart/series/types.d.ts +22 -0
- package/dist/core/chart/types.d.ts +188 -0
- package/dist/core/clipboard/index.d.ts +137 -0
- package/dist/core/debug/index.d.ts +143 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/keybindings/index.d.ts +157 -0
- package/dist/core/layout/index.d.ts +12 -0
- package/dist/core/layout/types.d.ts +165 -0
- package/dist/core/loading/index.d.ts +104 -0
- package/dist/core/locale/index.d.ts +91 -0
- package/dist/core/responsive/ResponsiveManager.d.ts +133 -0
- package/dist/core/responsive/index.d.ts +4 -0
- package/dist/core/selection/SelectionManager.d.ts +165 -0
- package/dist/core/selection/index.d.ts +4 -0
- package/dist/core/series/Series.d.ts +73 -0
- package/dist/core/series/SeriesBounds.d.ts +3 -0
- package/dist/core/series/SeriesDataUtils.d.ts +7 -0
- package/dist/core/series/index.d.ts +6 -0
- package/dist/core/sync/index.d.ts +147 -0
- package/dist/core/theme-editor/index.d.ts +122 -0
- package/dist/examples/PluginDemonstration.d.ts +20 -0
- package/dist/examples.d.ts +25 -0
- package/dist/gpu/adapter/gpuRenderer.d.ts +135 -0
- package/dist/gpu/adapter/index.d.ts +7 -0
- package/dist/gpu/adapter/seriesAdapter.d.ts +88 -0
- package/dist/gpu/backends/webgl/WebGLBackend.d.ts +42 -0
- package/dist/gpu/backends/webgl/index.d.ts +5 -0
- package/dist/gpu/backends/webgl/programFactory.d.ts +30 -0
- package/dist/gpu/backends/webgl/shaders.d.ts +14 -0
- package/dist/gpu/backends/webgpu/MassiveDataRenderer.d.ts +111 -0
- package/dist/gpu/backends/webgpu/WebGPUBackend.d.ts +58 -0
- package/dist/gpu/backends/webgpu/pipelines/bandPipeline.d.ts +24 -0
- package/dist/gpu/backends/webgpu/pipelines/heatmapPipeline.d.ts +28 -0
- package/dist/gpu/backends/webgpu/pipelines/index.d.ts +10 -0
- package/dist/gpu/backends/webgpu/pipelines/instancedLinePipeline.d.ts +23 -0
- package/dist/gpu/backends/webgpu/pipelines/instancedPointPipeline.d.ts +25 -0
- package/dist/gpu/backends/webgpu/pipelines/linePipeline.d.ts +23 -0
- package/dist/gpu/backends/webgpu/pipelines/pointPipeline.d.ts +28 -0
- package/dist/gpu/backends/webgpu/pipelines/trianglePipeline.d.ts +5 -0
- package/dist/gpu/backends/webgpu/pipelines/triangleShader.d.ts +1 -0
- package/dist/gpu/backends/webgpu/shaders/heatmap.wgsl.d.ts +8 -0
- package/dist/gpu/backends/webgpu/shaders/index.d.ts +8 -0
- package/dist/gpu/backends/webgpu/shaders/instanced.wgsl.d.ts +16 -0
- package/dist/gpu/backends/webgpu/shaders/line.wgsl.d.ts +8 -0
- package/dist/gpu/backends/webgpu/shaders/point.wgsl.d.ts +9 -0
- package/dist/gpu/benchmark/benchmark.d.ts +74 -0
- package/dist/gpu/benchmark/index.d.ts +5 -0
- package/dist/gpu/compute/gpuCompute.d.ts +72 -0
- package/dist/gpu/compute/index.d.ts +6 -0
- package/dist/gpu/compute/shaders.d.ts +9 -0
- package/dist/gpu/drawList.d.ts +77 -0
- package/dist/gpu/examples/gallery.d.ts +20 -0
- package/dist/gpu/examples/index.d.ts +3 -0
- package/dist/gpu/examples/webgpu-line-demo.d.ts +8 -0
- package/dist/gpu/examples/webgpu-triangle.d.ts +1 -0
- package/dist/gpu/frame.d.ts +25 -0
- package/dist/gpu/index.d.ts +24 -0
- package/dist/gpu/resources/bufferStore.d.ts +40 -0
- package/dist/gpu/resources/index.d.ts +9 -0
- package/dist/gpu/resources/pipelineCache.d.ts +33 -0
- package/dist/gpu/resources/textureStore.d.ts +41 -0
- package/dist/gpu/types.d.ts +47 -0
- package/dist/index-BMiZoKmm.js +536 -0
- package/dist/index-BMiZoKmm.js.map +1 -0
- package/dist/index-Ce2JgkH_.js +282 -0
- package/dist/index-Ce2JgkH_.js.map +1 -0
- package/dist/index-D8ifudJH.js +2431 -0
- package/dist/index-D8ifudJH.js.map +1 -0
- package/dist/index-Dag88bW4.js +499 -0
- package/dist/index-Dag88bW4.js.map +1 -0
- package/dist/index-qhscKTDy.js +309 -0
- package/dist/index-qhscKTDy.js.map +1 -0
- package/dist/index-x4stH3jD.js +282 -0
- package/dist/index-x4stH3jD.js.map +1 -0
- package/dist/index.core-CYu3tydL.js +7252 -0
- package/dist/index.core-CYu3tydL.js.map +1 -0
- package/dist/index.core.d.ts +20 -0
- package/dist/index.d.ts +51 -0
- package/dist/overlay/CanvasOverlay.d.ts +102 -0
- package/dist/overlay/index.d.ts +4 -0
- package/dist/plugins/3d/Area3DRenderer.d.ts +122 -0
- package/dist/plugins/3d/Axes3D.d.ts +104 -0
- package/dist/plugins/3d/Bubble3DRenderer.d.ts +198 -0
- package/dist/plugins/3d/Impulse3DRenderer.d.ts +130 -0
- package/dist/plugins/3d/Line3DRenderer.d.ts +118 -0
- package/dist/plugins/3d/PointCloud3DRenderer.d.ts +84 -0
- package/dist/plugins/3d/Raycaster3D.d.ts +137 -0
- package/dist/plugins/3d/Ribbon3DRenderer.d.ts +83 -0
- package/dist/plugins/3d/SurfaceBar3DRenderer.d.ts +92 -0
- package/dist/plugins/3d/SurfaceMesh3DRenderer.d.ts +130 -0
- package/dist/plugins/3d/Tooltip3D.d.ts +71 -0
- package/dist/plugins/3d/VectorField3DRenderer.d.ts +86 -0
- package/dist/plugins/3d/Voxel3DRenderer.d.ts +89 -0
- package/dist/plugins/3d/Waterfall3DRenderer.d.ts +94 -0
- package/dist/plugins/3d/camera/OrbitCamera.d.ts +99 -0
- package/dist/plugins/3d/camera/index.d.ts +1 -0
- package/dist/plugins/3d/colorThemes.d.ts +39 -0
- package/dist/plugins/3d/controls/OrbitController.d.ts +69 -0
- package/dist/plugins/3d/controls/index.d.ts +1 -0
- package/dist/plugins/3d/index.d.ts +50 -0
- package/dist/plugins/3d/math/Mat4.d.ts +33 -0
- package/dist/plugins/3d/math/Vec3.d.ts +37 -0
- package/dist/plugins/3d/math/index.d.ts +4 -0
- package/dist/plugins/3d/mesh/InstancedMesh.d.ts +42 -0
- package/dist/plugins/3d/mesh/geometry.d.ts +34 -0
- package/dist/plugins/3d/mesh/index.d.ts +2 -0
- package/dist/plugins/3d/series/Area3D.d.ts +17 -0
- package/dist/plugins/3d/series/Column3D.d.ts +20 -0
- package/dist/plugins/3d/series/Heatmap3D.d.ts +17 -0
- package/dist/plugins/3d/series/Impulse3D.d.ts +16 -0
- package/dist/plugins/3d/series/PointLine3D.d.ts +20 -0
- package/dist/plugins/3d/series/Ribbon3D.d.ts +17 -0
- package/dist/plugins/3d/series/Scatter3D.d.ts +21 -0
- package/dist/plugins/3d/series/SurfaceMesh3D.d.ts +35 -0
- package/dist/plugins/3d/series/Waterfall3D.d.ts +38 -0
- package/dist/plugins/3d/series/index.d.ts +13 -0
- package/dist/plugins/3d/series/types.d.ts +143 -0
- package/dist/plugins/3d/shader/index.d.ts +2 -0
- package/dist/plugins/3d/shader/programs.d.ts +24 -0
- package/dist/plugins/3d/shader/sources.d.ts +27 -0
- package/dist/plugins/3d/types.d.ts +71 -0
- package/dist/plugins/3d.d.ts +3 -0
- package/dist/plugins/3d.js +5498 -0
- package/dist/plugins/3d.js.map +1 -0
- package/dist/plugins/PluginContext.d.ts +53 -0
- package/dist/plugins/PluginManager.d.ts +129 -0
- package/dist/plugins/PluginRegistry.d.ts +38 -0
- package/dist/plugins/analysis/SeriesFit.d.ts +3 -0
- package/dist/plugins/analysis/contours.d.ts +20 -0
- package/dist/plugins/analysis/fft.d.ts +138 -0
- package/dist/plugins/analysis/filters.d.ts +76 -0
- package/dist/plugins/analysis/fitting.d.ts +24 -0
- package/dist/plugins/analysis/index.d.ts +29 -0
- package/dist/plugins/analysis/indicators.d.ts +148 -0
- package/dist/plugins/analysis/math.d.ts +32 -0
- package/dist/plugins/analysis/statistics.d.ts +78 -0
- package/dist/plugins/analysis/utils.d.ts +150 -0
- package/dist/plugins/analysis.d.ts +3 -0
- package/dist/plugins/analysis.js +1202 -0
- package/dist/plugins/analysis.js.map +1 -0
- package/dist/plugins/annotations/index.d.ts +16 -0
- package/dist/plugins/annotations.d.ts +3 -0
- package/dist/plugins/annotations.js +438 -0
- package/dist/plugins/annotations.js.map +1 -0
- package/dist/plugins/anomaly-detection/algorithms.d.ts +38 -0
- package/dist/plugins/anomaly-detection/index.d.ts +16 -0
- package/dist/plugins/anomaly-detection/types.d.ts +57 -0
- package/dist/plugins/broken-axis/BrokenAxisScale.d.ts +24 -0
- package/dist/plugins/broken-axis/exports.d.ts +6 -0
- package/dist/plugins/broken-axis/index.d.ts +6 -0
- package/dist/plugins/broken-axis/types.d.ts +50 -0
- package/dist/plugins/builtins/crosshair/CrosshairPlugin.d.ts +40 -0
- package/dist/plugins/builtins/crosshair/index.d.ts +1 -0
- package/dist/plugins/builtins/data-logger/DataLoggerPlugin.d.ts +11 -0
- package/dist/plugins/builtins/data-logger/index.d.ts +1 -0
- package/dist/plugins/builtins/direction-indicator/DirectionIndicatorPlugin.d.ts +17 -0
- package/dist/plugins/builtins/direction-indicator/index.d.ts +2 -0
- package/dist/plugins/builtins/grid-highlight/GridHighlightPlugin.d.ts +17 -0
- package/dist/plugins/builtins/grid-highlight/index.d.ts +1 -0
- package/dist/plugins/builtins/index.d.ts +25 -0
- package/dist/plugins/builtins/stats/StatsPlugin.d.ts +11 -0
- package/dist/plugins/builtins/stats/index.d.ts +1 -0
- package/dist/plugins/builtins/watermark/WatermarkPlugin.d.ts +15 -0
- package/dist/plugins/builtins/watermark/index.d.ts +1 -0
- package/dist/plugins/caching/exports.d.ts +6 -0
- package/dist/plugins/caching/index.d.ts +6 -0
- package/dist/plugins/caching/types.d.ts +120 -0
- package/dist/plugins/clipboard/index.d.ts +20 -0
- package/dist/plugins/clipboard.d.ts +3 -0
- package/dist/plugins/clipboard.js +270 -0
- package/dist/plugins/clipboard.js.map +1 -0
- package/dist/plugins/context-menu/index.d.ts +12 -0
- package/dist/plugins/context-menu/renderer.d.ts +43 -0
- package/dist/plugins/context-menu/types.d.ts +202 -0
- package/dist/plugins/context-menu.d.ts +3 -0
- package/dist/plugins/context-menu.js +621 -0
- package/dist/plugins/context-menu.js.map +1 -0
- package/dist/plugins/data-export/formatters.d.ts +34 -0
- package/dist/plugins/data-export/index.d.ts +15 -0
- package/dist/plugins/data-export/types.d.ts +166 -0
- package/dist/plugins/data-export.d.ts +3 -0
- package/dist/plugins/data-export.js +463 -0
- package/dist/plugins/data-export.js.map +1 -0
- package/dist/plugins/data-transform/index.d.ts +6 -0
- package/dist/plugins/data-transform/types.d.ts +34 -0
- package/dist/plugins/debug/index.d.ts +24 -0
- package/dist/plugins/debug.d.ts +3 -0
- package/dist/plugins/debug.js +330 -0
- package/dist/plugins/debug.js.map +1 -0
- package/dist/plugins/drag-edit/exports.d.ts +6 -0
- package/dist/plugins/drag-edit/index.d.ts +6 -0
- package/dist/plugins/drag-edit/types.d.ts +118 -0
- package/dist/plugins/forecasting/algorithms.d.ts +6 -0
- package/dist/plugins/forecasting/exports.d.ts +3 -0
- package/dist/plugins/forecasting/index.d.ts +11 -0
- package/dist/plugins/forecasting/types.d.ts +88 -0
- package/dist/plugins/gpu/index.d.ts +24 -0
- package/dist/plugins/gpu.d.ts +3 -0
- package/dist/plugins/gpu.js +2430 -0
- package/dist/plugins/gpu.js.map +1 -0
- package/dist/plugins/i18n/index.d.ts +22 -0
- package/dist/plugins/i18n.d.ts +3 -0
- package/dist/plugins/i18n.js +37 -0
- package/dist/plugins/i18n.js.map +1 -0
- package/dist/plugins/index.d.ts +110 -0
- package/dist/plugins/keyboard/index.d.ts +15 -0
- package/dist/plugins/keyboard.d.ts +3 -0
- package/dist/plugins/keyboard.js +8 -0
- package/dist/plugins/keyboard.js.map +1 -0
- package/dist/plugins/latex/exports.d.ts +6 -0
- package/dist/plugins/latex/index.d.ts +8 -0
- package/dist/plugins/latex/parser.d.ts +6 -0
- package/dist/plugins/latex/renderer.d.ts +6 -0
- package/dist/plugins/latex/symbols.d.ts +28 -0
- package/dist/plugins/latex/types.d.ts +88 -0
- package/dist/plugins/lazy-load/exports.d.ts +6 -0
- package/dist/plugins/lazy-load/index.d.ts +6 -0
- package/dist/plugins/lazy-load/types.d.ts +121 -0
- package/dist/plugins/loading/index.d.ts +15 -0
- package/dist/plugins/loading.d.ts +3 -0
- package/dist/plugins/loading.js +7 -0
- package/dist/plugins/loading.js.map +1 -0
- package/dist/plugins/ml-integration/exports.d.ts +11 -0
- package/dist/plugins/ml-integration/index.d.ts +6 -0
- package/dist/plugins/ml-integration/native-algorithms.d.ts +69 -0
- package/dist/plugins/ml-integration/types.d.ts +74 -0
- package/dist/plugins/offscreen/exports.d.ts +6 -0
- package/dist/plugins/offscreen/index.d.ts +6 -0
- package/dist/plugins/offscreen/pool.d.ts +32 -0
- package/dist/plugins/offscreen/types.d.ts +35 -0
- package/dist/plugins/pattern-recognition/index.d.ts +6 -0
- package/dist/plugins/pattern-recognition/patterns.d.ts +3 -0
- package/dist/plugins/pattern-recognition/types.d.ts +245 -0
- package/dist/plugins/radar/index.d.ts +6 -0
- package/dist/plugins/radar/types.d.ts +40 -0
- package/dist/plugins/regression/algorithms.d.ts +6 -0
- package/dist/plugins/regression/index.d.ts +6 -0
- package/dist/plugins/regression/types.d.ts +261 -0
- package/dist/plugins/roi/exports.d.ts +6 -0
- package/dist/plugins/roi/index.d.ts +49 -0
- package/dist/plugins/roi/types.d.ts +60 -0
- package/dist/plugins/snapshot/index.d.ts +11 -0
- package/dist/plugins/snapshot/types.d.ts +38 -0
- package/dist/plugins/streaming/index.d.ts +32 -0
- package/dist/plugins/streaming.d.ts +3 -0
- package/dist/plugins/streaming.js +13 -0
- package/dist/plugins/streaming.js.map +1 -0
- package/dist/plugins/sync/index.d.ts +22 -0
- package/dist/plugins/sync.d.ts +3 -0
- package/dist/plugins/sync.js +261 -0
- package/dist/plugins/sync.js.map +1 -0
- package/dist/plugins/theme-editor/index.d.ts +18 -0
- package/dist/plugins/theme-editor.d.ts +3 -0
- package/dist/plugins/theme-editor.js +7 -0
- package/dist/plugins/theme-editor.js.map +1 -0
- package/dist/plugins/tools/delta-tool/index.d.ts +159 -0
- package/dist/plugins/tools/index.d.ts +21 -0
- package/dist/plugins/tools/peak-tool/index.d.ts +159 -0
- package/dist/plugins/tools/tooltip/TooltipManager.d.ts +213 -0
- package/dist/plugins/tools/tooltip/TooltipPositioner.d.ts +83 -0
- package/dist/plugins/tools/tooltip/TooltipRenderer.d.ts +64 -0
- package/dist/plugins/tools/tooltip/index.d.ts +18 -0
- package/dist/plugins/tools/tooltip/templates/AnnotationTemplate.d.ts +18 -0
- package/dist/plugins/tools/tooltip/templates/CrosshairTemplate.d.ts +39 -0
- package/dist/plugins/tools/tooltip/templates/DefaultTemplate.d.ts +30 -0
- package/dist/plugins/tools/tooltip/templates/HeatmapTemplate.d.ts +34 -0
- package/dist/plugins/tools/tooltip/templates/MinimalTemplate.d.ts +26 -0
- package/dist/plugins/tools/tooltip/templates/RangeTemplate.d.ts +18 -0
- package/dist/plugins/tools/tooltip/templates/ScientificTemplate.d.ts +34 -0
- package/dist/plugins/tools/tooltip/templates/index.d.ts +27 -0
- package/dist/plugins/tools/tooltip/themes.d.ts +48 -0
- package/dist/plugins/tools/tooltip/types.d.ts +396 -0
- package/dist/plugins/tools.d.ts +3 -0
- package/dist/plugins/tools.js +9 -0
- package/dist/plugins/tools.js.map +1 -0
- package/dist/plugins/types.d.ts +451 -0
- package/dist/plugins/video-recorder/exports.d.ts +6 -0
- package/dist/plugins/video-recorder/index.d.ts +6 -0
- package/dist/plugins/video-recorder/types.d.ts +55 -0
- package/dist/plugins/virtualization/exports.d.ts +6 -0
- package/dist/plugins/virtualization/index.d.ts +6 -0
- package/dist/plugins/virtualization/types.d.ts +48 -0
- package/dist/react/SciPlot.d.ts +60 -0
- package/dist/react/index.d.ts +5 -0
- package/dist/react/useSciPlot.d.ts +56 -0
- package/dist/renderer/BarRenderer.d.ts +14 -0
- package/dist/renderer/CandlestickRenderer.d.ts +12 -0
- package/dist/renderer/GaugeRenderer.d.ts +3 -0
- package/dist/renderer/HeatmapRenderer.d.ts +15 -0
- package/dist/renderer/NativeWebGLRenderer.d.ts +16 -0
- package/dist/renderer/PolarRenderer.d.ts +64 -0
- package/dist/renderer/RendererInterface.d.ts +70 -0
- package/dist/renderer/SankeyRenderer.d.ts +3 -0
- package/dist/renderer/WebGPURenderer.d.ts +16 -0
- package/dist/renderer/index.d.ts +13 -0
- package/dist/renderer/native/NativeWebGLRenderer.d.ts +31 -0
- package/dist/renderer/native/bufferStore.d.ts +11 -0
- package/dist/renderer/native/draw.d.ts +47 -0
- package/dist/renderer/native/programFactory.d.ts +3 -0
- package/dist/renderer/native/renderFrame.d.ts +3 -0
- package/dist/renderer/native/shaderSources.d.ts +6 -0
- package/dist/renderer/native/textureStore.d.ts +8 -0
- package/dist/renderer/native/types.d.ts +77 -0
- package/dist/renderer/native/utils.d.ts +31 -0
- package/dist/renderer/radar/RadarRenderer.d.ts +71 -0
- package/dist/renderer/radar/index.d.ts +10 -0
- package/dist/renderer/shaders.d.ts +77 -0
- package/dist/renderer/ternary/TernaryRenderer.d.ts +39 -0
- package/dist/renderer/ternary/index.d.ts +6 -0
- package/dist/renderer/ternary/types.d.ts +56 -0
- package/dist/scales/index.d.ts +54 -0
- package/dist/serialization/index.d.ts +153 -0
- package/dist/streaming/backpressure.d.ts +179 -0
- package/dist/streaming/index.d.ts +7 -0
- package/dist/streaming/mock.d.ts +12 -0
- package/dist/streaming/types.d.ts +57 -0
- package/dist/streaming/utils.d.ts +19 -0
- package/dist/streaming/websocket.d.ts +6 -0
- package/dist/testing/index.d.ts +225 -0
- package/dist/theme/colorSchemes.d.ts +56 -0
- package/dist/theme/index.d.ts +138 -0
- package/dist/types.d.ts +753 -0
- package/dist/utils-Dbro9-qM.js +254 -0
- package/dist/utils-Dbro9-qM.js.map +1 -0
- package/dist/velo-plot.d.ts +1 -0
- package/dist/velo-plot.full.d.ts +1 -0
- package/dist/velo-plot.full.js +5804 -0
- package/dist/velo-plot.full.js.map +1 -0
- package/dist/velo-plot.js +31 -0
- package/dist/velo-plot.js.map +1 -0
- package/dist/workers/downsample.d.ts +34 -0
- package/dist/workers/downsample.worker.d.ts +46 -0
- package/package.json +185 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-menu.js","sources":["../../src/plugins/context-menu/renderer.ts","../../src/plugins/context-menu/index.ts"],"sourcesContent":["/**\n * Context Menu Renderer\n * \n * Handles DOM creation and rendering of the context menu.\n * \n * @module plugins/context-menu/renderer\n */\n\nimport type { \n MenuItem, \n MenuStyle, \n MenuPosition,\n MenuContext,\n MenuState \n} from \"./types\";\n\n// ============================================\n// Default Styles\n// ============================================\n\nconst DEFAULT_STYLE: Required<MenuStyle> = {\n backgroundColor: 'rgba(30, 30, 40, 0.95)',\n textColor: '#e0e0e0',\n borderColor: 'rgba(100, 100, 120, 0.5)',\n borderRadius: '8px',\n boxShadow: '0 8px 32px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.1)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '13px',\n itemPadding: '8px 16px',\n hoverBackground: 'rgba(0, 242, 255, 0.15)',\n separatorColor: 'rgba(100, 100, 120, 0.3)',\n disabledOpacity: 0.4,\n minWidth: '180px',\n maxWidth: '300px',\n animationDuration: '150ms'\n};\n\n// ============================================\n// Menu Renderer Class\n// ============================================\n\nexport class MenuRenderer {\n private _container: HTMLElement;\n private menuElement: HTMLDivElement | null = null;\n private style: Required<MenuStyle>;\n private onItemClick: (item: MenuItem, context: MenuContext) => void;\n private zIndex: number;\n\n constructor(\n container: HTMLElement,\n style: MenuStyle | undefined,\n zIndex: number,\n onItemClick: (item: MenuItem, context: MenuContext) => void\n ) {\n this._container = container;\n this.style = { ...DEFAULT_STYLE, ...style };\n this.zIndex = zIndex;\n this.onItemClick = onItemClick;\n }\n\n /**\n * Show the context menu\n */\n show(state: MenuState): void {\n this.hide();\n\n if (!state.items.length || !state.context) return;\n\n this.menuElement = this.createMenu(state.items, state.context);\n this.positionMenu(state.position);\n document.body.appendChild(this.menuElement);\n\n // Animate in\n requestAnimationFrame(() => {\n if (this.menuElement) {\n this.menuElement.style.opacity = '1';\n this.menuElement.style.transform = 'scale(1)';\n }\n });\n\n // Add click-outside listener\n document.addEventListener('mousedown', this.handleOutsideClick);\n document.addEventListener('keydown', this.handleKeyDown);\n }\n\n /**\n * Hide the context menu\n */\n hide(): void {\n if (this.menuElement) {\n this.menuElement.style.opacity = '0';\n this.menuElement.style.transform = 'scale(0.95)';\n \n setTimeout(() => {\n if (this.menuElement?.parentNode) {\n this.menuElement.parentNode.removeChild(this.menuElement);\n }\n this.menuElement = null;\n }, 100);\n }\n\n document.removeEventListener('mousedown', this.handleOutsideClick);\n document.removeEventListener('keydown', this.handleKeyDown);\n }\n\n /**\n * Check if menu is visible\n */\n isVisible(): boolean {\n return this.menuElement !== null;\n }\n\n /**\n * Destroy the renderer\n */\n destroy(): void {\n this.hide();\n }\n\n /**\n * Update styling\n */\n updateStyle(style: MenuStyle): void {\n this.style = { ...DEFAULT_STYLE, ...style };\n }\n\n /**\n * Get container reference\n */\n getContainer(): HTMLElement {\n return this._container;\n }\n\n // ============================================\n // Private Methods\n // ============================================\n\n private createMenu(items: MenuItem[], context: MenuContext): HTMLDivElement {\n const menu = document.createElement('div');\n menu.className = 'velo-plot-context-menu';\n menu.style.cssText = this.getMenuStyle();\n\n items.forEach(item => {\n const element = this.createMenuItem(item, context);\n if (element) {\n menu.appendChild(element);\n }\n });\n\n return menu;\n }\n\n private createMenuItem(item: MenuItem, context: MenuContext): HTMLElement | null {\n // Hidden items\n if ('hidden' in item && item.hidden) return null;\n\n // Separator\n if (item.type === 'separator') {\n const sep = document.createElement('div');\n sep.className = 'velo-plot-menu-separator';\n sep.style.cssText = `\n height: 1px;\n margin: 4px 8px;\n background: ${this.style.separatorColor};\n `;\n return sep;\n }\n\n // Regular item\n const el = document.createElement('div');\n el.className = 'velo-plot-menu-item';\n \n const isDisabled = 'disabled' in item && Boolean(item.disabled);\n el.style.cssText = this.getItemStyle(isDisabled);\n\n // Icon\n if ('icon' in item && item.icon) {\n const icon = document.createElement('span');\n icon.className = 'velo-plot-menu-icon';\n icon.style.cssText = 'margin-right: 12px; width: 16px; text-align: center;';\n icon.textContent = item.icon;\n el.appendChild(icon);\n }\n\n // Label\n const label = document.createElement('span');\n label.className = 'velo-plot-menu-label';\n label.style.cssText = 'flex: 1;';\n label.textContent = item.label;\n el.appendChild(label);\n\n // Checkbox/Radio indicator\n if (item.type === 'checkbox') {\n const check = document.createElement('span');\n check.style.cssText = 'margin-left: 12px; width: 16px;';\n check.textContent = item.checked ? '✓' : '';\n el.appendChild(check);\n }\n\n if (item.type === 'radio') {\n const radio = document.createElement('span');\n radio.style.cssText = 'margin-left: 12px; width: 16px;';\n radio.textContent = item.selected ? '●' : '○';\n el.appendChild(radio);\n }\n\n // Shortcut\n if ('shortcut' in item && item.shortcut) {\n const shortcut = document.createElement('span');\n shortcut.className = 'velo-plot-menu-shortcut';\n shortcut.style.cssText = `\n margin-left: 24px;\n opacity: 0.5;\n font-size: 11px;\n `;\n shortcut.textContent = item.shortcut;\n el.appendChild(shortcut);\n }\n\n // Submenu arrow\n if (item.type === 'submenu') {\n const arrow = document.createElement('span');\n arrow.style.cssText = 'margin-left: 8px;';\n arrow.textContent = '▶';\n el.appendChild(arrow);\n\n // Create submenu on hover\n el.addEventListener('mouseenter', () => {\n this.showSubmenu(el, item.items, context);\n });\n el.addEventListener('mouseleave', (e: MouseEvent) => {\n this.hideSubmenu(el, e);\n });\n }\n\n // Hover effects\n if (!isDisabled) {\n el.addEventListener('mouseenter', () => {\n el.style.background = this.style.hoverBackground;\n });\n el.addEventListener('mouseleave', () => {\n el.style.background = 'transparent';\n });\n\n // Click handler\n el.addEventListener('click', (e) => {\n e.stopPropagation();\n if (item.type !== 'submenu') {\n this.onItemClick(item, context);\n }\n });\n }\n\n return el;\n }\n\n private showSubmenu(parent: HTMLElement, items: MenuItem[], context: MenuContext): void {\n // Remove any existing submenu\n const existing = parent.querySelector('.velo-plot-submenu');\n if (existing) return;\n\n const submenu = document.createElement('div');\n submenu.className = 'velo-plot-submenu';\n submenu.style.cssText = `\n ${this.getMenuStyle()}\n position: absolute;\n left: 100%;\n top: 0;\n margin-left: 4px;\n `;\n\n items.forEach(item => {\n const el = this.createMenuItem(item, context);\n if (el) submenu.appendChild(el);\n });\n\n parent.style.position = 'relative';\n parent.appendChild(submenu);\n }\n\n private hideSubmenu(parent: HTMLElement, e: MouseEvent): void {\n const submenu = parent.querySelector('.velo-plot-submenu');\n if (!submenu) return;\n\n // Check if moving to submenu\n const rect = submenu.getBoundingClientRect();\n if (\n e.clientX >= rect.left &&\n e.clientX <= rect.right &&\n e.clientY >= rect.top &&\n e.clientY <= rect.bottom\n ) {\n return;\n }\n\n setTimeout(() => {\n submenu.remove();\n }, 100);\n }\n\n private positionMenu(position: MenuPosition): void {\n if (!this.menuElement) return;\n\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n \n // Initial position\n this.menuElement.style.left = `${position.x}px`;\n this.menuElement.style.top = `${position.y}px`;\n\n // Get actual dimensions\n const rect = this.menuElement.getBoundingClientRect();\n\n // Adjust if off-screen\n if (rect.right > viewportWidth) {\n this.menuElement.style.left = `${position.x - rect.width}px`;\n }\n if (rect.bottom > viewportHeight) {\n this.menuElement.style.top = `${position.y - rect.height}px`;\n }\n }\n\n private getMenuStyle(): string {\n return `\n position: fixed;\n z-index: ${this.zIndex};\n background: ${this.style.backgroundColor};\n color: ${this.style.textColor};\n border: 1px solid ${this.style.borderColor};\n border-radius: ${this.style.borderRadius};\n box-shadow: ${this.style.boxShadow};\n font-family: ${this.style.fontFamily};\n font-size: ${this.style.fontSize};\n min-width: ${this.style.minWidth};\n max-width: ${this.style.maxWidth};\n padding: 4px 0;\n opacity: 0;\n transform: scale(0.95);\n transform-origin: top left;\n transition: opacity ${this.style.animationDuration}, transform ${this.style.animationDuration};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n `;\n }\n\n private getItemStyle(disabled: boolean): string {\n return `\n display: flex;\n align-items: center;\n padding: ${this.style.itemPadding};\n cursor: ${disabled ? 'default' : 'pointer'};\n opacity: ${disabled ? this.style.disabledOpacity : 1};\n user-select: none;\n transition: background 100ms;\n `;\n }\n\n private handleOutsideClick = (e: MouseEvent): void => {\n if (this.menuElement && !this.menuElement.contains(e.target as Node)) {\n this.hide();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') {\n this.hide();\n }\n };\n}\n","/**\n * Sci Plot - Context Menu Plugin\n * \n * Provides a customizable right-click context menu for chart interactions.\n * \n * @module plugins/context-menu\n * \n * @example\n * ```typescript\n * import { createChart } from 'velo-plot';\n * import { PluginContextMenu } from 'velo-plot/plugins/context-menu';\n * \n * const chart = createChart({ container });\n * chart.use(PluginContextMenu({\n * items: [\n * { label: 'Zoom to Fit', icon: '🔍', action: 'zoomToFit' },\n * { type: 'separator' },\n * { label: 'Export...', icon: '💾', type: 'submenu', items: [\n * { label: 'CSV', action: 'exportCSV' },\n * { label: 'JSON', action: 'exportJSON' },\n * ]},\n * ]\n * }));\n * ```\n */\n\nimport type { PluginManifest, ChartPlugin, PluginContext } from \"../types\";\nimport type {\n PluginContextMenuConfig,\n MenuItem,\n MenuContext,\n MenuState,\n BuiltinAction,\n MenuActionItem\n} from \"./types\";\nimport { MenuRenderer } from \"./renderer\";\n\n// Re-export types\nexport * from \"./types\";\n\n// ============================================\n// Default Menu Items\n// ============================================\n\nconst DEFAULT_PLOT_ITEMS: MenuItem[] = [\n { \n label: 'Zoom to Fit', \n icon: '⊡', \n action: 'zoomToFit',\n shortcut: 'Home'\n },\n { \n label: 'Reset View', \n icon: '↻', \n action: 'resetView',\n shortcut: 'R'\n },\n { type: 'separator' },\n {\n label: 'Interaction Mode',\n icon: '✋',\n type: 'submenu',\n items: [\n { label: 'Pan', icon: '✋', action: 'panMode' },\n { label: 'Box Zoom', icon: '⬚', action: 'boxZoomMode' },\n { label: 'Select', icon: '➤', action: 'selectMode' },\n ]\n },\n { type: 'separator' },\n {\n label: 'Export',\n icon: '💾',\n type: 'submenu',\n items: [\n { label: 'CSV', icon: '📄', action: 'exportCSV' },\n { label: 'JSON', icon: '📋', action: 'exportJSON' },\n { label: 'Image', icon: '🖼️', action: 'exportImage' },\n ]\n },\n { \n label: 'Copy to Clipboard', \n icon: '📋', \n action: 'copyToClipboard',\n shortcut: 'Ctrl+C'\n },\n { type: 'separator' },\n {\n label: 'Annotations',\n icon: '📝',\n type: 'submenu',\n items: [\n { label: 'Add Horizontal Line', icon: '—', action: 'addHorizontalLine' },\n { label: 'Add Vertical Line', icon: '|', action: 'addVerticalLine' },\n { label: 'Add Text', icon: 'T', action: 'addTextAnnotation' },\n { type: 'separator' },\n { label: 'Clear All', icon: '🗑️', action: 'clearAnnotations' },\n ]\n },\n { type: 'separator' },\n { \n label: 'Toggle Legend', \n icon: '☰', \n action: 'toggleLegend',\n shortcut: 'L'\n },\n { \n label: 'Toggle Grid', \n icon: '#', \n action: 'toggleGrid',\n shortcut: 'G'\n },\n { \n label: 'Show Statistics', \n icon: '📊', \n action: 'showStats',\n shortcut: 'S'\n },\n];\n\n// ============================================\n// Plugin Definition\n// ============================================\n\nconst manifestContextMenu: PluginManifest = {\n name: \"velo-plot-context-menu\",\n version: \"1.0.0\",\n description: \"Customizable right-click context menu for velo-plot\",\n author: \"Sci Plot Team\",\n provides: [\"interaction\"],\n tags: [\"context-menu\", \"right-click\", \"menu\", \"ui\"],\n};\n\n/**\n * Sci Plot Context Menu Plugin\n * \n * Adds a customizable context menu with built-in actions and \n * extensibility for custom menu items.\n */\nexport function PluginContextMenu(\n config: PluginContextMenuConfig = {}\n): ChartPlugin<PluginContextMenuConfig> {\n \n const {\n enabled = true,\n items = [],\n templates = [],\n useDefaults = true,\n style,\n preventDefault = true,\n showOnRightClick = true,\n showOnLongPress = true,\n longPressDuration = 500,\n beforeShow,\n afterHide,\n zIndex = 10000\n } = config;\n\n let _ctx: PluginContext | null = null;\n let renderer: MenuRenderer | null = null;\n let state: MenuState = {\n visible: false,\n position: { x: 0, y: 0 },\n items: [],\n submenuPath: [],\n context: null\n };\n\n // Long press handling\n let longPressTimer: ReturnType<typeof setTimeout> | null = null;\n let longPressStart: { x: number; y: number } | null = null;\n\n // ============================================\n // Action Handlers\n // ============================================\n\n function executeAction(action: BuiltinAction, context: MenuContext): void {\n if (!_ctx) return;\n\n const chart = _ctx.chart as any;\n\n switch (action) {\n case 'zoomToFit':\n chart.zoomToFit?.();\n break;\n \n case 'zoomIn':\n chart.zoom?.(1.5);\n break;\n \n case 'zoomOut':\n chart.zoom?.(0.67);\n break;\n \n case 'resetView':\n chart.resetView?.();\n break;\n \n case 'panMode':\n chart.setMode?.('pan');\n break;\n \n case 'boxZoomMode':\n chart.setMode?.('boxZoom');\n break;\n \n case 'selectMode':\n chart.setMode?.('select');\n break;\n \n case 'exportCSV':\n executeExport('csv');\n break;\n \n case 'exportJSON':\n executeExport('json');\n break;\n \n case 'exportImage':\n downloadImage();\n break;\n \n case 'copyToClipboard':\n copyToClipboard();\n break;\n \n case 'toggleLegend':\n chart.setShowLegend?.(!chart.getShowLegend?.());\n break;\n \n case 'toggleGrid':\n chart.setShowGrid?.(!chart.getShowGrid?.());\n break;\n \n case 'toggleCrosshair':\n // Toggle crosshair if available\n break;\n \n case 'addHorizontalLine':\n addAnnotation('hline', context);\n break;\n \n case 'addVerticalLine':\n addAnnotation('vline', context);\n break;\n \n case 'addTextAnnotation':\n addAnnotation('text', context);\n break;\n \n case 'clearAnnotations':\n chart.clearAnnotations?.();\n break;\n \n case 'showStats':\n // Show stats panel\n break;\n }\n }\n\n function executeExport(format: 'csv' | 'json'): void {\n const chart = _ctx?.chart as any;\n const exportPlugin = chart?.plugins?.get('velo-plot-data-export')?.api;\n \n if (exportPlugin) {\n exportPlugin.download(format);\n } else {\n // Fallback to basic export\n const data = chart.toCSV?.() || chart.toJSON?.();\n if (data) {\n downloadString(data, `chart.${format}`, `text/${format}`);\n }\n }\n }\n\n function downloadImage(): void {\n const chart = _ctx?.chart as any;\n const dataUrl = chart.toImage?.('png');\n if (dataUrl) {\n const link = document.createElement('a');\n link.href = dataUrl;\n link.download = 'chart.png';\n link.click();\n }\n }\n\n function copyToClipboard(): void {\n const chart = _ctx?.chart as any;\n const data = chart.toCSV?.();\n if (data) {\n navigator.clipboard.writeText(data).catch(console.error);\n }\n }\n\n function addAnnotation(type: 'hline' | 'vline' | 'text', context: MenuContext): void {\n if (!context.dataPosition) return;\n \n const chart = _ctx?.chart as any;\n const { x, y } = context.dataPosition;\n\n switch (type) {\n case 'hline':\n chart.addAnnotation?.({\n type: 'horizontalLine',\n y,\n color: '#ff6b6b',\n label: `Y = ${y.toFixed(4)}`\n });\n break;\n \n case 'vline':\n chart.addAnnotation?.({\n type: 'verticalLine',\n x,\n color: '#4ecdc4',\n label: `X = ${x.toFixed(4)}`\n });\n break;\n \n case 'text':\n chart.addAnnotation?.({\n type: 'text',\n x,\n y,\n text: 'Annotation',\n color: '#ffffff'\n });\n break;\n }\n }\n\n function downloadString(content: string, filename: string, type: string): void {\n const blob = new Blob([content], { type });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.click();\n URL.revokeObjectURL(url);\n }\n\n // ============================================\n // Menu Logic\n // ============================================\n\n function buildMenuContext(event: MouseEvent): MenuContext {\n const chart = _ctx?.chart as any;\n const container = _ctx?.ui.container;\n \n if (!container) {\n return {\n chart,\n event,\n pixelPosition: { x: event.clientX, y: event.clientY },\n dataPosition: null,\n seriesId: null,\n annotationId: null,\n pointIndex: null,\n area: 'outside'\n };\n }\n\n const rect = container.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n\n // Determine area\n const plotArea = _ctx?.render.plotArea;\n let area: MenuContext['area'] = 'outside';\n \n if (plotArea) {\n if (x >= plotArea.x && x <= plotArea.x + plotArea.width &&\n y >= plotArea.y && y <= plotArea.y + plotArea.height) {\n area = 'plot';\n } else if (y > plotArea.y + plotArea.height) {\n area = 'xAxis';\n } else if (x < plotArea.x) {\n area = 'yAxis';\n }\n }\n\n // Convert to data coordinates\n let dataPosition: { x: number; y: number } | null = null;\n if (area === 'plot' && _ctx) {\n dataPosition = {\n x: _ctx.coords.pixelToDataX(x),\n y: _ctx.coords.pixelToDataY(y)\n };\n }\n\n // Try to detect series/point\n let seriesId: string | null = null;\n let pointIndex: number | null = null;\n \n if (dataPosition && _ctx) {\n const pick = _ctx.coords.pickPoint(x, y, 10);\n if (pick) {\n seriesId = pick.seriesId;\n pointIndex = pick.index;\n }\n }\n\n return {\n chart,\n event,\n pixelPosition: { x, y },\n dataPosition,\n seriesId,\n annotationId: null,\n pointIndex,\n area\n };\n }\n\n function getMenuItems(context: MenuContext): MenuItem[] {\n // Try templates first\n for (const template of templates) {\n if (template.condition?.(context)) {\n return [...template.items];\n }\n }\n\n // Build items based on context\n let menuItems: MenuItem[] = [];\n\n if (useDefaults) {\n menuItems = [...DEFAULT_PLOT_ITEMS];\n }\n\n // Add custom items\n if (items.length > 0) {\n if (menuItems.length > 0) {\n menuItems.push({ type: 'separator' });\n }\n menuItems.push(...items);\n }\n\n // Apply beforeShow hook\n if (beforeShow) {\n const result = beforeShow(context);\n if (result === false) {\n return [];\n }\n menuItems = result;\n }\n\n return menuItems;\n }\n\n function showMenu(event: MouseEvent): void {\n if (!enabled || !_ctx) return;\n\n const context = buildMenuContext(event);\n const menuItems = getMenuItems(context);\n\n if (menuItems.length === 0) return;\n\n state = {\n visible: true,\n position: { x: event.clientX, y: event.clientY },\n items: menuItems,\n submenuPath: [],\n context\n };\n\n renderer?.show(state);\n }\n\n function hideMenu(): void {\n state = {\n ...state,\n visible: false,\n context: null\n };\n\n renderer?.hide();\n afterHide?.();\n }\n\n function handleItemClick(item: MenuItem, context: MenuContext): void {\n hideMenu();\n\n if (item.type === 'separator' || item.type === 'submenu') {\n return;\n }\n\n if (item.type === 'checkbox' && item.onChange) {\n item.onChange(!item.checked, context);\n return;\n }\n\n if (item.type === 'radio' && item.onChange) {\n item.onChange(item.value, context);\n return;\n }\n\n // Action item\n const actionItem = item as MenuActionItem;\n \n if (actionItem.onClick) {\n actionItem.onClick(context);\n } else if (actionItem.action) {\n executeAction(actionItem.action, context);\n }\n }\n\n // ============================================\n // Event Handlers\n // ============================================\n\n function handleContextMenu(e: MouseEvent): void {\n if (!showOnRightClick) return;\n \n if (preventDefault) {\n e.preventDefault();\n }\n\n showMenu(e);\n }\n\n function handleTouchStart(e: TouchEvent): void {\n if (!showOnLongPress) return;\n\n const touch = e.touches[0];\n longPressStart = { x: touch.clientX, y: touch.clientY };\n\n longPressTimer = setTimeout(() => {\n if (longPressStart) {\n const syntheticEvent = new MouseEvent('contextmenu', {\n clientX: longPressStart.x,\n clientY: longPressStart.y\n });\n showMenu(syntheticEvent);\n }\n }, longPressDuration);\n }\n\n function handleTouchMove(e: TouchEvent): void {\n if (!longPressStart || !longPressTimer) return;\n\n const touch = e.touches[0];\n const dx = touch.clientX - longPressStart.x;\n const dy = touch.clientY - longPressStart.y;\n\n // Cancel if moved too far\n if (Math.sqrt(dx * dx + dy * dy) > 10) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n longPressStart = null;\n }\n }\n\n function handleTouchEnd(): void {\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n longPressStart = null;\n }\n\n // ============================================\n // Plugin Implementation\n // ============================================\n\n return {\n manifest: manifestContextMenu,\n\n onInit(ctx: PluginContext) {\n _ctx = ctx;\n\n const container = ctx.ui.container;\n\n renderer = new MenuRenderer(\n container,\n style,\n zIndex,\n handleItemClick\n );\n\n // Attach event listeners\n container.addEventListener('contextmenu', handleContextMenu);\n container.addEventListener('touchstart', handleTouchStart, { passive: true });\n container.addEventListener('touchmove', handleTouchMove, { passive: true });\n container.addEventListener('touchend', handleTouchEnd);\n\n ctx.log.info('ContextMenu plugin initialized');\n },\n\n onDestroy() {\n const container = _ctx?.ui.container;\n\n if (container) {\n container.removeEventListener('contextmenu', handleContextMenu);\n container.removeEventListener('touchstart', handleTouchStart);\n container.removeEventListener('touchmove', handleTouchMove);\n container.removeEventListener('touchend', handleTouchEnd);\n }\n\n renderer?.destroy();\n renderer = null;\n _ctx = null;\n },\n\n api: {\n /**\n * Show the context menu programmatically\n */\n show(x: number, y: number, customItems?: MenuItem[]) {\n const event = new MouseEvent('contextmenu', { clientX: x, clientY: y });\n const context = buildMenuContext(event);\n \n state = {\n visible: true,\n position: { x, y },\n items: customItems || getMenuItems(context),\n submenuPath: [],\n context\n };\n\n renderer?.show(state);\n },\n\n /**\n * Hide the context menu\n */\n hide() {\n hideMenu();\n },\n\n /**\n * Check if menu is visible\n */\n isVisible(): boolean {\n return renderer?.isVisible() ?? false;\n },\n\n /**\n * Update menu items dynamically\n */\n setItems(newItems: MenuItem[]) {\n // Update for next show\n (config as any).items = newItems;\n },\n\n /**\n * Enable/disable the menu\n */\n setEnabled(value: boolean) {\n (config as any).enabled = value;\n },\n\n /**\n * Update styling\n */\n setStyle(newStyle: typeof style) {\n renderer?.updateStyle(newStyle || {});\n },\n\n /**\n * Get available built-in actions\n */\n getBuiltinActions(): BuiltinAction[] {\n return [\n 'zoomToFit', 'zoomIn', 'zoomOut', 'resetView',\n 'panMode', 'boxZoomMode', 'selectMode',\n 'exportCSV', 'exportJSON', 'exportImage', 'copyToClipboard',\n 'toggleLegend', 'toggleGrid', 'toggleCrosshair',\n 'addHorizontalLine', 'addVerticalLine', 'addTextAnnotation', 'clearAnnotations',\n 'showStats'\n ];\n }\n }\n };\n}\n\nexport default PluginContextMenu;\n"],"names":["DEFAULT_STYLE","MenuRenderer","container","style","zIndex","onItemClick","__publicField","e","state","_a","items","context","menu","item","element","sep","el","isDisabled","icon","label","check","radio","shortcut","arrow","parent","submenu","rect","position","viewportWidth","viewportHeight","disabled","DEFAULT_PLOT_ITEMS","manifestContextMenu","PluginContextMenu","config","enabled","templates","useDefaults","preventDefault","showOnRightClick","showOnLongPress","longPressDuration","beforeShow","afterHide","_ctx","renderer","longPressTimer","longPressStart","executeAction","action","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","chart","executeExport","downloadImage","copyToClipboard","addAnnotation","format","exportPlugin","data","downloadString","dataUrl","link","type","x","y","content","filename","blob","url","buildMenuContext","event","plotArea","area","dataPosition","seriesId","pointIndex","pick","getMenuItems","template","menuItems","result","showMenu","hideMenu","handleItemClick","actionItem","handleContextMenu","handleTouchStart","touch","syntheticEvent","handleTouchMove","dx","dy","handleTouchEnd","ctx","customItems","newItems","value","newStyle"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { DataExportOptions, ExportFormat, FormatConfig, SeriesExportInfo } from './types';
|
|
2
|
+
|
|
3
|
+
export declare const FORMAT_CONFIGS: Record<ExportFormat, FormatConfig>;
|
|
4
|
+
/**
|
|
5
|
+
* Format data as CSV or TSV
|
|
6
|
+
*/
|
|
7
|
+
export declare function formatCSV(seriesData: SeriesExportInfo[], options: DataExportOptions): string;
|
|
8
|
+
/**
|
|
9
|
+
* Format data as JSON
|
|
10
|
+
*/
|
|
11
|
+
export declare function formatJSON(seriesData: SeriesExportInfo[], options: DataExportOptions, viewBounds?: {
|
|
12
|
+
xMin: number;
|
|
13
|
+
xMax: number;
|
|
14
|
+
yMin: number;
|
|
15
|
+
yMax: number;
|
|
16
|
+
}): string;
|
|
17
|
+
/**
|
|
18
|
+
* Format data for MATLAB compatibility
|
|
19
|
+
* Outputs JSON that can be easily loaded in MATLAB using jsondecode()
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatMATLAB(seriesData: SeriesExportInfo[], options: DataExportOptions): string;
|
|
22
|
+
/**
|
|
23
|
+
* Format data for Python/NumPy compatibility
|
|
24
|
+
* Outputs JSON that can be easily loaded in Python
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatPython(seriesData: SeriesExportInfo[], options: DataExportOptions): string;
|
|
27
|
+
/**
|
|
28
|
+
* Format data as binary Float32Array
|
|
29
|
+
*
|
|
30
|
+
* Binary format structure:
|
|
31
|
+
* - Header (32 bytes): magic number, version, series count, reserved
|
|
32
|
+
* - Per series: name length (4 bytes), name (UTF-8), point count (4 bytes), x data, y data
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatBinary(seriesData: SeriesExportInfo[]): ArrayBuffer;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ChartPlugin } from '../types';
|
|
2
|
+
import { PluginDataExportConfig } from './types';
|
|
3
|
+
|
|
4
|
+
export * from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Sci Plot Data Export Plugin
|
|
7
|
+
*
|
|
8
|
+
* Provides comprehensive data export functionality with support for
|
|
9
|
+
* multiple scientific and standard data formats.
|
|
10
|
+
*
|
|
11
|
+
* @param config - Plugin configuration options
|
|
12
|
+
* @returns ChartPlugin instance
|
|
13
|
+
*/
|
|
14
|
+
export declare function PluginDataExport(config?: PluginDataExportConfig): ChartPlugin<PluginDataExportConfig>;
|
|
15
|
+
export default PluginDataExport;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { SeriesData } from '../../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Supported export formats
|
|
5
|
+
*/
|
|
6
|
+
export type ExportFormat = 'csv' | 'tsv' | 'json' | 'matlab' | 'python' | 'xlsx' | 'binary';
|
|
7
|
+
/**
|
|
8
|
+
* Data range for export
|
|
9
|
+
*/
|
|
10
|
+
export type ExportRange = 'all' | 'visible' | 'selected';
|
|
11
|
+
/**
|
|
12
|
+
* Compression options
|
|
13
|
+
*/
|
|
14
|
+
export type CompressionType = 'none' | 'gzip' | 'deflate';
|
|
15
|
+
/**
|
|
16
|
+
* Options for column mapping
|
|
17
|
+
*/
|
|
18
|
+
export interface ColumnMapping {
|
|
19
|
+
/** Source data key */
|
|
20
|
+
source: 'x' | 'y' | 'y2' | 'yError' | 'open' | 'high' | 'low' | 'close';
|
|
21
|
+
/** Output column name */
|
|
22
|
+
name: string;
|
|
23
|
+
/** Number format (e.g., 'fixed:6', 'exponential:3') */
|
|
24
|
+
format?: string;
|
|
25
|
+
/** Unit to append to header */
|
|
26
|
+
unit?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Advanced export options
|
|
30
|
+
*/
|
|
31
|
+
export interface DataExportOptions {
|
|
32
|
+
/** Format to export */
|
|
33
|
+
format: ExportFormat;
|
|
34
|
+
/** Series IDs to export (all if not specified) */
|
|
35
|
+
seriesIds?: string[];
|
|
36
|
+
/** Data range to export */
|
|
37
|
+
range?: ExportRange;
|
|
38
|
+
/** Include file headers/metadata */
|
|
39
|
+
includeHeaders?: boolean;
|
|
40
|
+
/** Include export timestamp */
|
|
41
|
+
includeTimestamp?: boolean;
|
|
42
|
+
/** Numeric precision (decimal places) */
|
|
43
|
+
precision?: number;
|
|
44
|
+
/** Column delimiter for CSV/TSV */
|
|
45
|
+
delimiter?: string;
|
|
46
|
+
/** Line ending style */
|
|
47
|
+
lineEnding?: '\n' | '\r\n';
|
|
48
|
+
/** Custom column mapping */
|
|
49
|
+
columns?: ColumnMapping[];
|
|
50
|
+
/** Include metadata as comments/headers */
|
|
51
|
+
includeMetadata?: boolean;
|
|
52
|
+
/** Metadata object to include */
|
|
53
|
+
metadata?: Record<string, string | number | boolean>;
|
|
54
|
+
/** Prettify JSON output */
|
|
55
|
+
prettyPrint?: boolean;
|
|
56
|
+
/** Scientific notation threshold */
|
|
57
|
+
scientificThreshold?: number;
|
|
58
|
+
/** Filename for download */
|
|
59
|
+
filename?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Result of an export operation
|
|
63
|
+
*/
|
|
64
|
+
export interface ExportResult {
|
|
65
|
+
/** Success status */
|
|
66
|
+
success: boolean;
|
|
67
|
+
/** Generated content (for string formats) */
|
|
68
|
+
content?: string;
|
|
69
|
+
/** Generated blob (for binary formats) */
|
|
70
|
+
blob?: Blob;
|
|
71
|
+
/** Content type (MIME type) */
|
|
72
|
+
contentType: string;
|
|
73
|
+
/** Suggested filename */
|
|
74
|
+
filename: string;
|
|
75
|
+
/** Number of series exported */
|
|
76
|
+
seriesCount: number;
|
|
77
|
+
/** Total points exported */
|
|
78
|
+
pointCount: number;
|
|
79
|
+
/** Export timestamp */
|
|
80
|
+
timestamp: string;
|
|
81
|
+
/** Any warnings during export */
|
|
82
|
+
warnings?: string[];
|
|
83
|
+
/** Error message if failed */
|
|
84
|
+
error?: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Format-specific configuration
|
|
88
|
+
*/
|
|
89
|
+
export interface FormatConfig {
|
|
90
|
+
/** MIME type */
|
|
91
|
+
mimeType: string;
|
|
92
|
+
/** File extension */
|
|
93
|
+
extension: string;
|
|
94
|
+
/** BOM (Byte Order Mark) for Excel compatibility */
|
|
95
|
+
bom?: string;
|
|
96
|
+
/** Whether format supports binary data */
|
|
97
|
+
binary?: boolean;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* MATLAB export structure
|
|
101
|
+
*/
|
|
102
|
+
export interface MatlabExportData {
|
|
103
|
+
/** Variable name */
|
|
104
|
+
name: string;
|
|
105
|
+
/** Variable type */
|
|
106
|
+
type: 'double' | 'single' | 'struct';
|
|
107
|
+
/** Data values */
|
|
108
|
+
data: number[] | MatlabExportData[];
|
|
109
|
+
/** Dimensions */
|
|
110
|
+
size: [number, number];
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Python/NumPy export structure
|
|
114
|
+
*/
|
|
115
|
+
export interface NumpyExportData {
|
|
116
|
+
/** Array dtype */
|
|
117
|
+
dtype: 'float32' | 'float64';
|
|
118
|
+
/** Array shape */
|
|
119
|
+
shape: number[];
|
|
120
|
+
/** Flattened data (row-major) */
|
|
121
|
+
data: number[];
|
|
122
|
+
/** Variable name suggestion */
|
|
123
|
+
name?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Configuration for PluginDataExport
|
|
127
|
+
*/
|
|
128
|
+
export interface PluginDataExportConfig {
|
|
129
|
+
/** Enabled export formats */
|
|
130
|
+
formats?: ExportFormat[];
|
|
131
|
+
/** Default export format */
|
|
132
|
+
defaultFormat?: ExportFormat;
|
|
133
|
+
/** Default precision */
|
|
134
|
+
defaultPrecision?: number;
|
|
135
|
+
/** Include metadata by default */
|
|
136
|
+
includeMetadata?: boolean;
|
|
137
|
+
/** Auto-download on export */
|
|
138
|
+
autoDownload?: boolean;
|
|
139
|
+
/** Custom filename generator */
|
|
140
|
+
filenameGenerator?: (format: ExportFormat, seriesIds: string[]) => string;
|
|
141
|
+
/** Pre-export hook */
|
|
142
|
+
beforeExport?: (options: DataExportOptions) => DataExportOptions | false;
|
|
143
|
+
/** Post-export hook */
|
|
144
|
+
afterExport?: (result: ExportResult) => void;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Series data with metadata for export
|
|
148
|
+
*/
|
|
149
|
+
export interface SeriesExportInfo {
|
|
150
|
+
id: string;
|
|
151
|
+
name?: string;
|
|
152
|
+
type: string;
|
|
153
|
+
data: SeriesData;
|
|
154
|
+
pointCount: number;
|
|
155
|
+
style: Record<string, unknown>;
|
|
156
|
+
yAxisId?: string;
|
|
157
|
+
metadata?: Record<string, unknown>;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Export progress callback
|
|
161
|
+
*/
|
|
162
|
+
export type ExportProgressCallback = (progress: {
|
|
163
|
+
current: number;
|
|
164
|
+
total: number;
|
|
165
|
+
phase: 'collecting' | 'formatting' | 'encoding' | 'complete';
|
|
166
|
+
}) => void;
|