scichart-engine 0.4.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.
Files changed (135) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +81 -0
  3. package/dist/analysis/contours.d.ts +20 -0
  4. package/dist/analysis/fitting.d.ts +24 -0
  5. package/dist/analysis/index.d.ts +12 -0
  6. package/dist/analysis/math.d.ts +32 -0
  7. package/dist/analysis/utils.d.ts +150 -0
  8. package/dist/core/Chart.d.ts +15 -0
  9. package/dist/core/ChartControls.d.ts +30 -0
  10. package/dist/core/ChartLegend.d.ts +35 -0
  11. package/dist/core/ChartStatistics.d.ts +18 -0
  12. package/dist/core/EventEmitter.d.ts +30 -0
  13. package/dist/core/InteractionManager.d.ts +67 -0
  14. package/dist/core/OverlayRenderer.d.ts +67 -0
  15. package/dist/core/Series.d.ts +4 -0
  16. package/dist/core/annotations/AnnotationManager.d.ts +57 -0
  17. package/dist/core/annotations/index.d.ts +5 -0
  18. package/dist/core/annotations/types.d.ts +157 -0
  19. package/dist/core/chart/ChartCore.d.ts +103 -0
  20. package/dist/core/chart/ChartExporter.d.ts +18 -0
  21. package/dist/core/chart/ChartNavigation.d.ts +33 -0
  22. package/dist/core/chart/ChartRenderer.d.ts +53 -0
  23. package/dist/core/chart/ChartScaling.d.ts +26 -0
  24. package/dist/core/chart/ChartSeries.d.ts +4 -0
  25. package/dist/core/chart/ChartSetup.d.ts +64 -0
  26. package/dist/core/chart/ChartUI.d.ts +22 -0
  27. package/dist/core/chart/exporter/SVGExporter.d.ts +6 -0
  28. package/dist/core/chart/exporter/index.d.ts +5 -0
  29. package/dist/core/chart/index.d.ts +14 -0
  30. package/dist/core/chart/plugins/PluginManager.d.ts +13 -0
  31. package/dist/core/chart/plugins/types.d.ts +13 -0
  32. package/dist/core/chart/series/SeriesActions.d.ts +7 -0
  33. package/dist/core/chart/series/SeriesBuffer.d.ts +4 -0
  34. package/dist/core/chart/series/SeriesFit.d.ts +3 -0
  35. package/dist/core/chart/series/index.d.ts +7 -0
  36. package/dist/core/chart/series/types.d.ts +22 -0
  37. package/dist/core/chart/types.d.ts +72 -0
  38. package/dist/core/index.d.ts +9 -0
  39. package/dist/core/series/Series.d.ts +52 -0
  40. package/dist/core/series/SeriesBounds.d.ts +3 -0
  41. package/dist/core/series/SeriesDataUtils.d.ts +7 -0
  42. package/dist/core/series/index.d.ts +6 -0
  43. package/dist/core/tooltip/TooltipManager.d.ts +203 -0
  44. package/dist/core/tooltip/TooltipPositioner.d.ts +83 -0
  45. package/dist/core/tooltip/TooltipRenderer.d.ts +64 -0
  46. package/dist/core/tooltip/index.d.ts +18 -0
  47. package/dist/core/tooltip/templates/AnnotationTemplate.d.ts +18 -0
  48. package/dist/core/tooltip/templates/CrosshairTemplate.d.ts +30 -0
  49. package/dist/core/tooltip/templates/DefaultTemplate.d.ts +30 -0
  50. package/dist/core/tooltip/templates/HeatmapTemplate.d.ts +34 -0
  51. package/dist/core/tooltip/templates/MinimalTemplate.d.ts +26 -0
  52. package/dist/core/tooltip/templates/RangeTemplate.d.ts +18 -0
  53. package/dist/core/tooltip/templates/ScientificTemplate.d.ts +34 -0
  54. package/dist/core/tooltip/templates/index.d.ts +27 -0
  55. package/dist/core/tooltip/themes.d.ts +48 -0
  56. package/dist/core/tooltip/types.d.ts +396 -0
  57. package/dist/examples.d.ts +19 -0
  58. package/dist/gpu/adapter/gpuRenderer.d.ts +135 -0
  59. package/dist/gpu/adapter/index.d.ts +7 -0
  60. package/dist/gpu/adapter/seriesAdapter.d.ts +88 -0
  61. package/dist/gpu/backends/webgl/WebGLBackend.d.ts +42 -0
  62. package/dist/gpu/backends/webgl/index.d.ts +5 -0
  63. package/dist/gpu/backends/webgl/programFactory.d.ts +30 -0
  64. package/dist/gpu/backends/webgl/shaders.d.ts +14 -0
  65. package/dist/gpu/backends/webgpu/MassiveDataRenderer.d.ts +111 -0
  66. package/dist/gpu/backends/webgpu/WebGPUBackend.d.ts +58 -0
  67. package/dist/gpu/backends/webgpu/pipelines/bandPipeline.d.ts +24 -0
  68. package/dist/gpu/backends/webgpu/pipelines/heatmapPipeline.d.ts +28 -0
  69. package/dist/gpu/backends/webgpu/pipelines/index.d.ts +10 -0
  70. package/dist/gpu/backends/webgpu/pipelines/instancedLinePipeline.d.ts +23 -0
  71. package/dist/gpu/backends/webgpu/pipelines/instancedPointPipeline.d.ts +25 -0
  72. package/dist/gpu/backends/webgpu/pipelines/linePipeline.d.ts +23 -0
  73. package/dist/gpu/backends/webgpu/pipelines/pointPipeline.d.ts +28 -0
  74. package/dist/gpu/backends/webgpu/pipelines/trianglePipeline.d.ts +5 -0
  75. package/dist/gpu/backends/webgpu/pipelines/triangleShader.d.ts +1 -0
  76. package/dist/gpu/backends/webgpu/shaders/heatmap.wgsl.d.ts +8 -0
  77. package/dist/gpu/backends/webgpu/shaders/index.d.ts +8 -0
  78. package/dist/gpu/backends/webgpu/shaders/instanced.wgsl.d.ts +16 -0
  79. package/dist/gpu/backends/webgpu/shaders/line.wgsl.d.ts +8 -0
  80. package/dist/gpu/backends/webgpu/shaders/point.wgsl.d.ts +9 -0
  81. package/dist/gpu/benchmark/benchmark.d.ts +74 -0
  82. package/dist/gpu/benchmark/index.d.ts +5 -0
  83. package/dist/gpu/compute/gpuCompute.d.ts +72 -0
  84. package/dist/gpu/compute/index.d.ts +6 -0
  85. package/dist/gpu/compute/shaders.d.ts +9 -0
  86. package/dist/gpu/drawList.d.ts +77 -0
  87. package/dist/gpu/examples/gallery.d.ts +20 -0
  88. package/dist/gpu/examples/index.d.ts +3 -0
  89. package/dist/gpu/examples/webgpu-line-demo.d.ts +8 -0
  90. package/dist/gpu/examples/webgpu-triangle.d.ts +1 -0
  91. package/dist/gpu/frame.d.ts +25 -0
  92. package/dist/gpu/index.d.ts +24 -0
  93. package/dist/gpu/resources/bufferStore.d.ts +40 -0
  94. package/dist/gpu/resources/index.d.ts +9 -0
  95. package/dist/gpu/resources/pipelineCache.d.ts +33 -0
  96. package/dist/gpu/resources/textureStore.d.ts +41 -0
  97. package/dist/gpu/types.d.ts +47 -0
  98. package/dist/index.d.ts +34 -0
  99. package/dist/overlay/CanvasOverlay.d.ts +102 -0
  100. package/dist/overlay/index.d.ts +4 -0
  101. package/dist/react/SciChart.d.ts +60 -0
  102. package/dist/react/index.d.ts +5 -0
  103. package/dist/react/useSciChart.d.ts +56 -0
  104. package/dist/renderer/BarRenderer.d.ts +14 -0
  105. package/dist/renderer/CandlestickRenderer.d.ts +12 -0
  106. package/dist/renderer/HeatmapRenderer.d.ts +15 -0
  107. package/dist/renderer/NativeWebGLRenderer.d.ts +16 -0
  108. package/dist/renderer/RendererInterface.d.ts +70 -0
  109. package/dist/renderer/WebGPURenderer.d.ts +16 -0
  110. package/dist/renderer/index.d.ts +10 -0
  111. package/dist/renderer/native/NativeWebGLRenderer.d.ts +30 -0
  112. package/dist/renderer/native/bufferStore.d.ts +11 -0
  113. package/dist/renderer/native/draw.d.ts +31 -0
  114. package/dist/renderer/native/programFactory.d.ts +3 -0
  115. package/dist/renderer/native/renderFrame.d.ts +3 -0
  116. package/dist/renderer/native/shaderSources.d.ts +6 -0
  117. package/dist/renderer/native/textureStore.d.ts +8 -0
  118. package/dist/renderer/native/types.d.ts +58 -0
  119. package/dist/renderer/native/utils.d.ts +4 -0
  120. package/dist/renderer/shaders.d.ts +77 -0
  121. package/dist/scales/index.d.ts +54 -0
  122. package/dist/scichart-engine.es.js +8408 -0
  123. package/dist/scichart-engine.es.js.map +1 -0
  124. package/dist/scichart-engine.umd.js +871 -0
  125. package/dist/scichart-engine.umd.js.map +1 -0
  126. package/dist/streaming/index.d.ts +7 -0
  127. package/dist/streaming/mock.d.ts +12 -0
  128. package/dist/streaming/types.d.ts +57 -0
  129. package/dist/streaming/utils.d.ts +19 -0
  130. package/dist/streaming/websocket.d.ts +6 -0
  131. package/dist/theme/index.d.ts +123 -0
  132. package/dist/types.d.ts +333 -0
  133. package/dist/workers/downsample.d.ts +34 -0
  134. package/dist/workers/downsample.worker.d.ts +46 -0
  135. package/package.json +59 -0
@@ -0,0 +1,7 @@
1
+ /**
2
+ * WebSocket Streaming Barrel Export
3
+ */
4
+ export * from './types';
5
+ export * from './websocket';
6
+ export * from './utils';
7
+ export * from './mock';
@@ -0,0 +1,12 @@
1
+ import { DataPoint, WebSocketStream } from './types';
2
+
3
+ /**
4
+ * Mock WebSocket stream for testing
5
+ */
6
+ export declare function createMockStream(config: {
7
+ interval?: number;
8
+ generatePoint?: () => DataPoint;
9
+ }): WebSocketStream & {
10
+ start: () => void;
11
+ stop: () => void;
12
+ };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * WebSocket Streaming Types
3
+ */
4
+ export interface WebSocketStreamConfig {
5
+ /** WebSocket URL */
6
+ url: string;
7
+ /** Reconnection attempts (default: 5) */
8
+ maxReconnectAttempts?: number;
9
+ /** Delay between reconnection attempts in ms (default: 1000) */
10
+ reconnectDelay?: number;
11
+ /** Buffer size before flushing to chart (default: 10) */
12
+ bufferSize?: number;
13
+ /** Throttle updates in ms (default: 16 for 60fps) */
14
+ throttleMs?: number;
15
+ /** Transform incoming message to data point */
16
+ parseMessage?: (data: unknown) => DataPoint | DataPoint[] | null;
17
+ /** Called on connection open */
18
+ onConnect?: () => void;
19
+ /** Called on connection close */
20
+ onDisconnect?: (event: CloseEvent) => void;
21
+ /** Called on error */
22
+ onError?: (error: Event) => void;
23
+ /** Called when reconnecting */
24
+ onReconnect?: (attempt: number) => void;
25
+ }
26
+ export interface DataPoint {
27
+ x: number;
28
+ y: number;
29
+ seriesId?: string;
30
+ }
31
+ export interface WebSocketStream {
32
+ /** Connect to the WebSocket server */
33
+ connect(): void;
34
+ /** Disconnect from the WebSocket server */
35
+ disconnect(): void;
36
+ /** Check if connected */
37
+ isConnected(): boolean;
38
+ /** Get connection state */
39
+ getState(): WebSocketState;
40
+ /** Subscribe to data for a specific series */
41
+ subscribe(seriesId: string, callback: (points: DataPoint[]) => void): () => void;
42
+ /** Unsubscribe all listeners */
43
+ unsubscribeAll(): void;
44
+ /** Send a message to the WebSocket server */
45
+ send(message: unknown): void;
46
+ /** Get statistics */
47
+ getStats(): StreamStats;
48
+ }
49
+ export interface StreamStats {
50
+ messagesReceived: number;
51
+ pointsProcessed: number;
52
+ reconnectCount: number;
53
+ lastMessageTime: number | null;
54
+ connectionUptime: number;
55
+ bufferSize: number;
56
+ }
57
+ export type WebSocketState = 'connecting' | 'connected' | 'disconnected' | 'reconnecting' | 'error';
@@ -0,0 +1,19 @@
1
+ import { DataPoint, WebSocketStream } from './types';
2
+
3
+ /**
4
+ * Default message parser - expects { x, y, seriesId? } or array of same
5
+ */
6
+ export declare function defaultParser(data: unknown): DataPoint | DataPoint[] | null;
7
+ /**
8
+ * Helper to create a parser for custom message formats
9
+ */
10
+ export declare function createMessageParser<T>(transform: (message: T) => DataPoint | DataPoint[] | null): (data: unknown) => DataPoint | DataPoint[] | null;
11
+ /**
12
+ * Helper to connect a WebSocket stream to a chart
13
+ */
14
+ export declare function connectStreamToChart(stream: WebSocketStream, chart: {
15
+ appendData: (seriesId: string, data: {
16
+ x: Float32Array;
17
+ y: Float32Array;
18
+ }) => void;
19
+ }, seriesIds?: string[]): () => void;
@@ -0,0 +1,6 @@
1
+ import { WebSocketStreamConfig, WebSocketStream } from './types';
2
+
3
+ /**
4
+ * Create a WebSocket stream for real-time chart data
5
+ */
6
+ export declare function createWebSocketStream(config: WebSocketStreamConfig): WebSocketStream;
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Theme - Visual styling configuration for SciChart
3
+ *
4
+ * Provides customizable themes for the chart including:
5
+ * - Grid styling
6
+ * - Axis styling
7
+ * - Legend styling
8
+ * - Cursor styling
9
+ */
10
+ export interface GridTheme {
11
+ /** Grid visibility */
12
+ visible: boolean;
13
+ /** Major grid line color */
14
+ majorColor: string;
15
+ /** Minor grid line color */
16
+ minorColor: string;
17
+ /** Major grid line width */
18
+ majorWidth: number;
19
+ /** Minor grid line width */
20
+ minorWidth: number;
21
+ /** Line dash pattern for major lines [dash, gap] */
22
+ majorDash: number[];
23
+ /** Line dash pattern for minor lines [dash, gap] */
24
+ minorDash: number[];
25
+ /** Show minor grid lines */
26
+ showMinor: boolean;
27
+ /** Number of minor divisions between major lines */
28
+ minorDivisions: number;
29
+ }
30
+ export interface AxisTheme {
31
+ /** Axis line color */
32
+ lineColor: string;
33
+ /** Axis line width */
34
+ lineWidth: number;
35
+ /** Tick mark color */
36
+ tickColor: string;
37
+ /** Tick mark length */
38
+ tickLength: number;
39
+ /** Label color */
40
+ labelColor: string;
41
+ /** Label font size */
42
+ labelSize: number;
43
+ /** Axis title color */
44
+ titleColor: string;
45
+ /** Axis title font size */
46
+ titleSize: number;
47
+ /** Font family */
48
+ fontFamily: string;
49
+ }
50
+ export interface LegendTheme {
51
+ /** Legend visibility */
52
+ visible: boolean;
53
+ /** Position */
54
+ position: "top-left" | "top-right" | "bottom-left" | "bottom-right";
55
+ /** Background color */
56
+ backgroundColor: string;
57
+ /** Border color */
58
+ borderColor: string;
59
+ /** Border radius */
60
+ borderRadius: number;
61
+ /** Text color */
62
+ textColor: string;
63
+ /** Font size */
64
+ fontSize: number;
65
+ /** Font family */
66
+ fontFamily: string;
67
+ /** Padding inside legend */
68
+ padding: number;
69
+ /** Gap between items */
70
+ itemGap: number;
71
+ /** Color swatch size */
72
+ swatchSize: number;
73
+ }
74
+ export interface CursorTheme {
75
+ /** Cursor line color */
76
+ lineColor: string;
77
+ /** Cursor line width */
78
+ lineWidth: number;
79
+ /** Cursor line dash pattern */
80
+ lineDash: number[];
81
+ /** Tooltip background color */
82
+ tooltipBackground: string;
83
+ /** Tooltip border color */
84
+ tooltipBorder: string;
85
+ /** Tooltip text color */
86
+ tooltipColor: string;
87
+ /** Tooltip font size */
88
+ tooltipSize: number;
89
+ }
90
+ export interface ChartTheme {
91
+ /** Theme name */
92
+ name: string;
93
+ /** Background color */
94
+ backgroundColor: string;
95
+ /** Plot area border color */
96
+ plotBorderColor: string;
97
+ /** Grid theme */
98
+ grid: GridTheme;
99
+ /** X-axis theme */
100
+ xAxis: AxisTheme;
101
+ /** Y-axis theme */
102
+ yAxis: AxisTheme;
103
+ /** Legend theme */
104
+ legend: LegendTheme;
105
+ /** Cursor theme */
106
+ cursor: CursorTheme;
107
+ }
108
+ export declare const DARK_THEME: ChartTheme;
109
+ export declare const MIDNIGHT_THEME: ChartTheme;
110
+ /** Light theme - Clean white background */
111
+ export declare const LIGHT_THEME: ChartTheme;
112
+ /** Electrochemistry theme - Professional blue tones */
113
+ export declare const ELECTROCHEM_THEME: ChartTheme;
114
+ /**
115
+ * Create a custom theme by merging with base theme
116
+ */
117
+ export declare function createTheme(base: ChartTheme, overrides: Partial<ChartTheme>): ChartTheme;
118
+ /**
119
+ * Get a theme by name
120
+ */
121
+ export declare function getThemeByName(name: string): ChartTheme;
122
+ /** Default theme export */
123
+ export declare const DEFAULT_THEME: ChartTheme;
@@ -0,0 +1,333 @@
1
+ /**
2
+ * Core type definitions for SciChart Engine
3
+ */
4
+ /** 2D point */
5
+ export interface Point {
6
+ x: number;
7
+ y: number;
8
+ }
9
+ /** Rectangular bounds */
10
+ export interface Bounds {
11
+ xMin: number;
12
+ xMax: number;
13
+ yMin: number;
14
+ yMax: number;
15
+ }
16
+ /** Range tuple [min, max] */
17
+ export type Range = [number, number];
18
+ export type ScaleType = "linear" | "log";
19
+ export interface AxisOptions {
20
+ /** Unique ID for the axis (defaults to 'default') */
21
+ id?: string;
22
+ /** Axis position */
23
+ position?: "left" | "right" | "top" | "bottom";
24
+ /** Scale type */
25
+ scale?: ScaleType;
26
+ /** Axis label (e.g., 'E / V') */
27
+ label?: string;
28
+ /** Unit for formatting (e.g., 'V', 'A') */
29
+ unit?: string;
30
+ /** Unit prefix: 'auto' for automatic (µ, n, m, etc.) */
31
+ prefix?: "auto" | "µ" | "n" | "m" | "" | "k" | "M";
32
+ /** Fixed minimum value */
33
+ min?: number;
34
+ /** Fixed maximum value */
35
+ max?: number;
36
+ /** Enable autoscaling */
37
+ auto?: boolean;
38
+ }
39
+ export type SeriesType = "line" | "scatter" | "line+scatter" | "step" | "step+scatter" | "band" | "area" | "bar" | "heatmap" | "candlestick";
40
+ /** Step mode defines where the step occurs */
41
+ export type StepMode = "before" | "after" | "center";
42
+ /** Error bar direction */
43
+ export type ErrorBarDirection = "both" | "positive" | "negative";
44
+ export interface SeriesData {
45
+ /** X values (potential, time, etc.) */
46
+ x: Float32Array | Float64Array;
47
+ /** Y values (current, charge, etc.) */
48
+ y: Float32Array | Float64Array;
49
+ /** Symmetric Y error (±error) */
50
+ yError?: Float32Array | Float64Array;
51
+ /** Asymmetric Y error - positive direction (upward) */
52
+ yErrorPlus?: Float32Array | Float64Array;
53
+ /** Asymmetric Y error - negative direction (downward) */
54
+ yErrorMinus?: Float32Array | Float64Array;
55
+ /** Symmetric X error (±error) - for horizontal error bars */
56
+ xError?: Float32Array | Float64Array;
57
+ /** Asymmetric X error - positive direction (rightward) */
58
+ xErrorPlus?: Float32Array | Float64Array;
59
+ /** Asymmetric X error - negative direction (leftward) */
60
+ xErrorMinus?: Float32Array | Float64Array;
61
+ /** Second Y-values for band/area charts (lower boundary or baseline) */
62
+ y2?: Float32Array | Float64Array;
63
+ /** Open values for OHLC/Candlestick */
64
+ open?: Float32Array | Float64Array;
65
+ /** High values for OHLC/Candlestick */
66
+ high?: Float32Array | Float64Array;
67
+ /** Low values for OHLC/Candlestick */
68
+ low?: Float32Array | Float64Array;
69
+ /** Close values for OHLC/Candlestick */
70
+ close?: Float32Array | Float64Array;
71
+ }
72
+ /** Error bar styling options */
73
+ export interface ErrorBarStyle {
74
+ /** Show error bars (default: true if error data present) */
75
+ visible?: boolean;
76
+ /** Error bar color (default: same as series) */
77
+ color?: string;
78
+ /** Error bar line width (default: 1) */
79
+ width?: number;
80
+ /** Cap width in pixels (default: 6) */
81
+ capWidth?: number;
82
+ /** Show caps at the end of error bars (default: true) */
83
+ showCaps?: boolean;
84
+ /** Opacity (default: 0.7) */
85
+ opacity?: number;
86
+ /** Direction: show both, positive only, or negative only */
87
+ direction?: ErrorBarDirection;
88
+ }
89
+ export interface SeriesStyle {
90
+ /** Line/point color (hex or rgb) */
91
+ color?: string;
92
+ /** Line width in pixels */
93
+ width?: number;
94
+ /** Opacity (0-1) */
95
+ opacity?: number;
96
+ /** For scatter: point size */
97
+ pointSize?: number;
98
+ /** Smoothing factor (0 = none, 1 = full) */
99
+ smoothing?: number;
100
+ /** Step mode: where the step transition occurs (default: 'after') */
101
+ stepMode?: StepMode;
102
+ /** Error bar styling */
103
+ errorBars?: ErrorBarStyle;
104
+ /** Scatter symbol shape (default: 'circle') */
105
+ symbol?: ScatterSymbol;
106
+ /** Dash pattern [dash, gap] - empty for solid */
107
+ lineDash?: number[];
108
+ }
109
+ /** Available scatter symbol shapes */
110
+ export type ScatterSymbol = "circle" | "square" | "diamond" | "triangle" | "triangleDown" | "cross" | "x" | "star";
111
+ export interface SeriesOptions {
112
+ /** Unique identifier */
113
+ id: string;
114
+ /** Series type */
115
+ type: SeriesType;
116
+ /** ID of the Y Axis this series belongs to */
117
+ yAxisId?: string;
118
+ /** Data arrays */
119
+ data: SeriesData;
120
+ /** Visual style */
121
+ style?: SeriesStyle;
122
+ /** Visibility */
123
+ visible?: boolean;
124
+ /** Display name in legend */
125
+ name?: string;
126
+ /** Cycle number (for CV) */
127
+ cycle?: number;
128
+ /** Maximum number of points to keep (rolling window) */
129
+ maxPoints?: number;
130
+ /** Identifier for stacking series (same ID will be stacked together) */
131
+ stackId?: string;
132
+ }
133
+ export interface SeriesUpdateData {
134
+ /** New X values */
135
+ x?: Float32Array | Float64Array;
136
+ /** New Y values */
137
+ y?: Float32Array | Float64Array;
138
+ /** New Y2 values (for bands) */
139
+ y2?: Float32Array | Float64Array;
140
+ /** New Open values (for candlesticks) */
141
+ open?: Float32Array | Float64Array;
142
+ /** New High values (for candlesticks) */
143
+ high?: Float32Array | Float64Array;
144
+ /** New Low values (for candlesticks) */
145
+ low?: Float32Array | Float64Array;
146
+ /** New Close values (for candlesticks) */
147
+ close?: Float32Array | Float64Array;
148
+ /** If true, append to existing data; if false, replace */
149
+ append?: boolean;
150
+ }
151
+ export interface BarStyle extends Omit<SeriesStyle, "pointSize" | "symbol" | "smoothing" | "stepMode"> {
152
+ /** Bar width in data units (auto if not specified) */
153
+ barWidth?: number;
154
+ /** Gap between bars as a fraction of bar width (default: 0.2) */
155
+ barGap?: number;
156
+ /** Bar alignment: 'center' (default) | 'edge' */
157
+ barAlign?: "center" | "edge";
158
+ }
159
+ /** Color scale names for heatmaps */
160
+ export type ColorScaleName = "viridis" | "plasma" | "inferno" | "magma" | "jet" | "grayscale";
161
+ /** Interpolation method for heatmap rendering */
162
+ export type InterpolationType = "nearest" | "bilinear";
163
+ export interface PlotArea {
164
+ /** X position of plot area relative to canvas */
165
+ x: number;
166
+ /** Y position of plot area relative to canvas */
167
+ y: number;
168
+ /** Width of plot area */
169
+ width: number;
170
+ /** Height of plot area */
171
+ height: number;
172
+ /** Inner margins from container edges */
173
+ left?: number;
174
+ /** Inner margins from container edges */
175
+ right?: number;
176
+ /** Inner margins from container edges */
177
+ top?: number;
178
+ /** Inner margins from container edges */
179
+ bottom?: number;
180
+ }
181
+ export interface CursorState {
182
+ enabled: boolean;
183
+ x: number;
184
+ y: number;
185
+ crosshair: boolean;
186
+ tooltipText?: string;
187
+ }
188
+ export interface AxisLabels {
189
+ x?: string;
190
+ y?: string;
191
+ }
192
+ export interface ColorScale {
193
+ /** Color scale name */
194
+ name: ColorScaleName;
195
+ /** Minimum value for color mapping */
196
+ min?: number;
197
+ /** Maximum value for color mapping */
198
+ max?: number;
199
+ /** Use logarithmic scale (default: false) */
200
+ logScale?: boolean;
201
+ }
202
+ export interface HeatmapData {
203
+ /** X-axis values (column positions) */
204
+ xValues: Float32Array | Float64Array | number[];
205
+ /** Y-axis values (row positions) */
206
+ yValues: Float32Array | Float64Array | number[];
207
+ /** Z-values (intensity) as flattened 2D matrix [row-major order] */
208
+ zValues: Float32Array | Float64Array | number[];
209
+ }
210
+ export interface HeatmapStyle {
211
+ /** Color scale configuration */
212
+ colorScale?: ColorScale;
213
+ /** Interpolation method (default: 'bilinear') */
214
+ interpolation?: InterpolationType;
215
+ /** Show colorbar legend (default: true) */
216
+ showColorbar?: boolean;
217
+ /** Opacity (default: 1.0) */
218
+ opacity?: number;
219
+ }
220
+ export interface HeatmapOptions extends Omit<SeriesOptions, "data" | "style"> {
221
+ type: "heatmap";
222
+ /** Heatmap data with X, Y, Z values */
223
+ data: HeatmapData;
224
+ /** Heatmap-specific styling */
225
+ style?: HeatmapStyle;
226
+ }
227
+ export interface ChartOptions {
228
+ /** Target container element */
229
+ container: HTMLDivElement;
230
+ /** Renderer backend selection (default: 'webgl') */
231
+ renderer?: "webgl" | "webgpu";
232
+ /** X-axis configuration */
233
+ xAxis?: AxisOptions;
234
+ /** Y-axis configuration (single or array) */
235
+ yAxis?: AxisOptions | AxisOptions[];
236
+ /** Background color (overrides theme) */
237
+ background?: string;
238
+ /** Device pixel ratio (default: window.devicePixelRatio) */
239
+ devicePixelRatio?: number;
240
+ /** Theme name or custom theme object */
241
+ theme?: string | object;
242
+ /** Show legend (default: from theme) */
243
+ showLegend?: boolean;
244
+ /** Initial legend position {x, y} in pixels relative to chart area */
245
+ legendPosition?: {
246
+ x: number;
247
+ y: number;
248
+ };
249
+ /** Show in-chart controls (default: false) */
250
+ showControls?: boolean;
251
+ /** Automatically follow new data (default: false) */
252
+ autoScroll?: boolean;
253
+ /** Show statistics panel (default: false) */
254
+ showStatistics?: boolean;
255
+ /** Tooltip configuration */
256
+ tooltip?: import('./core/tooltip/types').TooltipOptions;
257
+ }
258
+ export interface ZoomOptions {
259
+ /** X-axis range [min, max] */
260
+ x?: Range;
261
+ /** Y-axis range [min, max] */
262
+ y?: Range;
263
+ /** ID of the specific Y axis to zoom (if applicable) */
264
+ axisId?: string;
265
+ /** Animate the transition */
266
+ animate?: boolean;
267
+ }
268
+ export interface CursorOptions {
269
+ /** Enable cursor */
270
+ enabled?: boolean;
271
+ /** Snap to nearest data point */
272
+ snap?: boolean;
273
+ /** Show crosshair lines */
274
+ crosshair?: boolean;
275
+ /** Custom tooltip formatter */
276
+ formatter?: (x: number, y: number, seriesId: string) => string;
277
+ }
278
+ export interface ZoomEvent {
279
+ x: Range;
280
+ y: Range;
281
+ }
282
+ export interface PanEvent {
283
+ deltaX: number;
284
+ deltaY: number;
285
+ }
286
+ export interface HoverEvent {
287
+ point: Point;
288
+ seriesId: string;
289
+ dataIndex: number;
290
+ }
291
+ export interface ClickEvent {
292
+ point: Point;
293
+ seriesId?: string;
294
+ dataIndex?: number;
295
+ }
296
+ /** Chart event map for type-safe event handling */
297
+ export interface ChartEventMap {
298
+ zoom: ZoomEvent;
299
+ pan: PanEvent;
300
+ hover: HoverEvent | null;
301
+ click: ClickEvent;
302
+ resize: {
303
+ width: number;
304
+ height: number;
305
+ };
306
+ render: {
307
+ fps: number;
308
+ frameTime: number;
309
+ };
310
+ legendMove: {
311
+ x: number;
312
+ y: number;
313
+ };
314
+ autoScale: undefined;
315
+ }
316
+ /** GPU uniform values */
317
+ export interface Uniforms {
318
+ scale: [number, number];
319
+ translate: [number, number];
320
+ color: [number, number, number, number];
321
+ resolution: [number, number];
322
+ }
323
+ /** Buffer configuration */
324
+ export interface BufferConfig {
325
+ usage: "static" | "dynamic" | "stream";
326
+ data: Float32Array;
327
+ }
328
+ /** Render state */
329
+ export interface RenderState {
330
+ needsRender: boolean;
331
+ lastFrameTime: number;
332
+ frameCount: number;
333
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * LTTB (Largest-Triangle-Three-Buckets) Downsampling Algorithm
3
+ *
4
+ * This algorithm downsamples time-series data while preserving visual features.
5
+ * It's much better than naive sampling for preserving peaks and valleys.
6
+ *
7
+ * Reference: https://skemman.is/bitstream/1946/15343/3/SS_MSthesis.pdf
8
+ */
9
+ export interface DownsampleResult {
10
+ x: Float32Array;
11
+ y: Float32Array;
12
+ /** Original indices of selected points */
13
+ indices: Uint32Array;
14
+ }
15
+ /**
16
+ * Downsample data using LTTB algorithm
17
+ *
18
+ * @param x - X values (e.g., potential)
19
+ * @param y - Y values (e.g., current)
20
+ * @param targetPoints - Number of output points
21
+ * @returns Downsampled data
22
+ */
23
+ export declare function lttbDownsample(x: Float32Array | Float64Array, y: Float32Array | Float64Array, targetPoints: number): DownsampleResult;
24
+ /**
25
+ * Min-Max per bucket downsampling
26
+ *
27
+ * Simpler alternative to LTTB that preserves extremes in each bucket.
28
+ * Uses 2 points per bucket (min and max), so output is ~2x target.
29
+ */
30
+ export declare function minMaxDownsample(x: Float32Array | Float64Array, y: Float32Array | Float64Array, bucketCount: number): DownsampleResult;
31
+ /**
32
+ * Calculate optimal target points based on canvas width
33
+ */
34
+ export declare function calculateTargetPoints(dataLength: number, canvasWidth: number, pointsPerPixel?: number): number;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Downsampling Web Worker
3
+ *
4
+ * Performs CPU-intensive downsampling off the main thread.
5
+ *
6
+ * Usage:
7
+ * ```typescript
8
+ * const worker = new Worker(new URL('./downsample.worker.ts', import.meta.url));
9
+ *
10
+ * worker.postMessage({
11
+ * type: 'downsample',
12
+ * x: xArray,
13
+ * y: yArray,
14
+ * targetPoints: 1000,
15
+ * algorithm: 'lttb'
16
+ * });
17
+ *
18
+ * worker.onmessage = (e) => {
19
+ * const { x, y, indices } = e.data;
20
+ * chart.setDownsampledData(x, y);
21
+ * };
22
+ * ```
23
+ */
24
+ interface DownsampleRequestMessage {
25
+ type: 'downsample';
26
+ id?: string;
27
+ x: Float32Array | Float64Array;
28
+ y: Float32Array | Float64Array;
29
+ targetPoints: number;
30
+ algorithm?: 'lttb' | 'minmax';
31
+ }
32
+ interface DownsampleResponseMessage {
33
+ type: 'downsample-result';
34
+ id?: string;
35
+ x: Float32Array;
36
+ y: Float32Array;
37
+ indices: Uint32Array;
38
+ originalLength: number;
39
+ duration: number;
40
+ }
41
+ interface ErrorMessage {
42
+ type: 'error';
43
+ id?: string;
44
+ error: string;
45
+ }
46
+ export type { DownsampleRequestMessage, DownsampleResponseMessage, ErrorMessage };