blazeplot 0.1.1 → 0.1.3
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 +20 -50
- package/dist/core/DataCursor.d.ts +2 -2
- package/dist/core/DataCursor.d.ts.map +1 -1
- package/dist/core/MinMaxPyramid.d.ts +7 -3
- package/dist/core/MinMaxPyramid.d.ts.map +1 -1
- package/dist/core/RingBuffer.d.ts +1 -0
- package/dist/core/RingBuffer.d.ts.map +1 -1
- package/dist/core/SeriesStore.d.ts +3 -3
- package/dist/core/SeriesStore.d.ts.map +1 -1
- package/dist/core/StaticDataset.d.ts +14 -0
- package/dist/core/StaticDataset.d.ts.map +1 -0
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/types.d.ts +14 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +189 -96
- package/dist/index.js.map +1 -1
- package/dist/ui/Chart.d.ts.map +1 -1
- package/package.json +2 -3
- package/ROADMAP.md +0 -263
package/README.md
CHANGED
|
@@ -5,18 +5,9 @@
|
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
[](https://github.com/Federicocervelli/blazeplot/actions)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Fast WebGL2 plotting engine for the browser 🔥
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Built on WebGL2 + [regl](https://github.com/regl-project/regl). No Canvas2D, no SVG, no DOM layout.
|
|
13
|
-
|
|
14
|
-
## Target
|
|
15
|
-
|
|
16
|
-
- **10M+** resident points per series
|
|
17
|
-
- **60 Hz** smooth append + render
|
|
18
|
-
- **Zero allocations** in the frame loop
|
|
19
|
-
- **Multi-series** with independent buffers and LOD
|
|
10
|
+
GPU-native, zero DOM. Built on WebGL2 + [regl](https://github.com/regl-project/regl). No Canvas2D, no SVG, no layout thrashing.
|
|
20
11
|
|
|
21
12
|
## Installation
|
|
22
13
|
|
|
@@ -44,19 +35,18 @@ const series = chart.addSeries(
|
|
|
44
35
|
chart.setViewport({ xMin: 0, xMax: 1000, yMin: -2, yMax: 2 });
|
|
45
36
|
chart.start();
|
|
46
37
|
|
|
47
|
-
|
|
38
|
+
const xs = new Float64Array(256);
|
|
39
|
+
const ys = new Float32Array(256);
|
|
40
|
+
let t = 0;
|
|
41
|
+
|
|
48
42
|
function push() {
|
|
49
|
-
|
|
50
|
-
const xs = new Float64Array(n);
|
|
51
|
-
const ys = new Float32Array(n);
|
|
52
|
-
for (let i = 0; i < n; i++) {
|
|
43
|
+
for (let i = 0; i < 256; i++) {
|
|
53
44
|
xs[i] = t++;
|
|
54
45
|
ys[i] = Math.sin(t * 0.01) * 0.5 + Math.random() * 0.01;
|
|
55
46
|
}
|
|
56
47
|
series.append(xs, ys);
|
|
57
48
|
requestAnimationFrame(push);
|
|
58
49
|
}
|
|
59
|
-
let t = 0;
|
|
60
50
|
push();
|
|
61
51
|
```
|
|
62
52
|
|
|
@@ -64,12 +54,13 @@ push();
|
|
|
64
54
|
|
|
65
55
|
| | |
|
|
66
56
|
|---|---|
|
|
67
|
-
| **
|
|
68
|
-
| **
|
|
69
|
-
| **
|
|
57
|
+
| **WebGL2 rendering** | GPU-accelerated from the ground up. No Canvas2D fallback, no DOM text nodes. |
|
|
58
|
+
| **Flexible data model** | Streaming ring buffer or static arrays. Bring your own data shape. |
|
|
59
|
+
| **LOD downsampling** | Min/max pyramid for efficient line rendering at any zoom level — sparse views show raw points, dense views show vertical segments. |
|
|
60
|
+
| **Pan & zoom** | Pointer/touch pan and wheel zoom via `Camera2D`. Customizable viewport policies. |
|
|
70
61
|
| **Grid lines** | Data-anchored grid rendered as WebGL line lists. |
|
|
71
62
|
| **Multi-series** | Independent buffers, styles, and visibility per series. |
|
|
72
|
-
| **
|
|
63
|
+
| **Benchmark overlay** | Built-in fps, frame time, vertex count, draw calls. |
|
|
73
64
|
| **ResizeObserver** | Automatic DPR-aware canvas sizing. |
|
|
74
65
|
|
|
75
66
|
## API
|
|
@@ -111,8 +102,8 @@ push();
|
|
|
111
102
|
|
|
112
103
|
| Signature | Description |
|
|
113
104
|
|---|---|
|
|
114
|
-
| `series.append(xs, ys)` | Append typed arrays of X
|
|
115
|
-
| `series.clear()` | Clear all data and reset
|
|
105
|
+
| `series.append(xs, ys)` | Append typed arrays of X and Y values (streaming). |
|
|
106
|
+
| `series.clear()` | Clear all data and reset. |
|
|
116
107
|
| `series.setVisible(v)` | Toggle visibility. |
|
|
117
108
|
| `series.visible` | Current visibility state. |
|
|
118
109
|
| `series.length` | Number of samples buffered. |
|
|
@@ -123,7 +114,7 @@ push();
|
|
|
123
114
|
|---|---|
|
|
124
115
|
| `mode` | `"line"` / `"envelope"` / `"scatter"` (envelope and scatter roadmap-only). |
|
|
125
116
|
| `capacity` | Ring buffer capacity (samples). |
|
|
126
|
-
| `downsample` | `"minmax"` (
|
|
117
|
+
| `downsample` | `"minmax"` (LOD for line rendering). |
|
|
127
118
|
|
|
128
119
|
### `SeriesStyle`
|
|
129
120
|
|
|
@@ -142,36 +133,15 @@ interface ViewportPolicy {
|
|
|
142
133
|
}
|
|
143
134
|
```
|
|
144
135
|
|
|
145
|
-
Built-in data types: `Viewport`, `PanIntent`, `ZoomIntent`, `ZoomAxis`.
|
|
146
|
-
|
|
147
136
|
### Lower-level primitives
|
|
148
137
|
|
|
149
|
-
`Camera2D`, `RingBuffer`, `MinMaxPyramid`, `AxisController` are exported for advanced use cases
|
|
150
|
-
|
|
151
|
-
## How it works
|
|
152
|
-
|
|
153
|
-
```
|
|
154
|
-
Data stream ──► RingBuffer (resident, wraps at capacity)
|
|
155
|
-
│
|
|
156
|
-
▼
|
|
157
|
-
MinMaxPyramid (full rebuild today, incremental roadmap)
|
|
158
|
-
│
|
|
159
|
-
▼
|
|
160
|
-
SeriesStore.query() ──► LODView (buckets for visible range)
|
|
161
|
-
│
|
|
162
|
-
▼
|
|
163
|
-
Renderer (regl / WebGL2)
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
The render loop decides per-frame:
|
|
167
|
-
- **Few visible samples** → raw line strip from ring buffer
|
|
168
|
-
- **Many visible samples** → min/max vertical segments from the pyramid
|
|
138
|
+
`Camera2D`, `RingBuffer`, `MinMaxPyramid`, `AxisController` are exported for advanced use cases.
|
|
169
139
|
|
|
170
140
|
## Architecture
|
|
171
141
|
|
|
172
142
|
```
|
|
173
143
|
src/
|
|
174
|
-
core/ # Data
|
|
144
|
+
core/ # Data model — series, datasets, LOD
|
|
175
145
|
render/ # GPU abstraction + regl backend
|
|
176
146
|
interaction/ # Camera, input, axis ticks
|
|
177
147
|
ui/ # Orchestrator (Chart)
|
|
@@ -184,7 +154,7 @@ bun install
|
|
|
184
154
|
bun run dev # Vite dev server → preview/
|
|
185
155
|
bun run build # Package build (JS + declarations)
|
|
186
156
|
bun run build:js # JS-only build
|
|
187
|
-
bun test #
|
|
157
|
+
bun test # Tests
|
|
188
158
|
bun run typecheck # TypeScript strict check
|
|
189
159
|
```
|
|
190
160
|
|
|
@@ -199,8 +169,8 @@ Output:
|
|
|
199
169
|
```
|
|
200
170
|
dist/index.js ES module
|
|
201
171
|
dist/index.d.ts TypeScript declarations
|
|
202
|
-
dist/index.js.map Source map
|
|
203
|
-
dist/*.d.ts.map Declaration maps
|
|
204
172
|
```
|
|
205
173
|
|
|
174
|
+
## Why WebGL2?
|
|
206
175
|
|
|
176
|
+
Canvas2D and SVG are CPU-bound — every point becomes a draw call or a DOM node. BlazePlot keeps data on the GPU, streams only visible vertices, and avoids DOM entirely. For dense line plots (millions of points), interactive scatter, or real-time streaming, the difference is orders of magnitude.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Dataset } from './types.js';
|
|
2
2
|
export declare class DataCursor {
|
|
3
3
|
private _index;
|
|
4
4
|
private _buffer;
|
|
5
|
-
bind(buffer:
|
|
5
|
+
bind(buffer: Dataset): void;
|
|
6
6
|
get index(): number;
|
|
7
7
|
seekTimestamp(x: number): number;
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataCursor.d.ts","sourceRoot":"","sources":["../../src/core/DataCursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"DataCursor.d.ts","sourceRoot":"","sources":["../../src/core/DataCursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAAwB;IAEvC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAK3B,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAYjC"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import { LODView, Viewport } from './types.js';
|
|
2
|
-
import { RingBuffer } from './RingBuffer.js';
|
|
1
|
+
import { Dataset, LODView, Viewport } from './types.js';
|
|
3
2
|
export declare class MinMaxPyramid {
|
|
4
3
|
readonly bucketSize: number;
|
|
5
4
|
private levels;
|
|
6
5
|
private levelLengths;
|
|
7
6
|
private levelSampleWidths;
|
|
7
|
+
private _builtLen;
|
|
8
|
+
private _lastRangeStart;
|
|
8
9
|
constructor(bucketSize?: number);
|
|
9
|
-
build(source:
|
|
10
|
+
build(source: Dataset): void;
|
|
11
|
+
incrementalBuild(source: Dataset): void;
|
|
12
|
+
private appendTail;
|
|
13
|
+
private ensureLevelData;
|
|
10
14
|
query(_viewport: Viewport, pixelWidth: number, xRange: {
|
|
11
15
|
start: number;
|
|
12
16
|
length: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinMaxPyramid.d.ts","sourceRoot":"","sources":["../../src/core/MinMaxPyramid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MinMaxPyramid.d.ts","sourceRoot":"","sources":["../../src/core/MinMaxPyramid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI7D,qBAAa,aAAa;IAOZ,QAAQ,CAAC,UAAU,EAAE,MAAM;IANvC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,eAAe,CAAe;gBAEjB,UAAU,GAAE,MAAU;IAS3C,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAuD5B,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAwBvC,OAAO,CAAC,UAAU;IAkDlB,OAAO,CAAC,eAAe;IAYvB,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;CAsCnG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RingBuffer.d.ts","sourceRoot":"","sources":["../../src/core/RingBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,qBAAa,UAAU;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,KAAK,CAAa;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,QAAQ,EAAE,MAAM;IAU5B,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,KAAK,IAAI,SAAS,GAAG,IAAI,CAG5B;IAED,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAOhC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAKnD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK3B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK3B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAW9B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAW9B,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;CAKzB"}
|
|
1
|
+
{"version":3,"file":"RingBuffer.d.ts","sourceRoot":"","sources":["../../src/core/RingBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,qBAAa,UAAU;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,KAAK,CAAa;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,QAAQ,EAAE,MAAM;IAU5B,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,KAAK,IAAI,SAAS,GAAG,IAAI,CAG5B;IAED,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAOhC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;IAOxD,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAKnD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK3B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK3B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAW9B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAW9B,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;CAKzB"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Dataset, LODView, Viewport, SeriesConfig, SeriesStyle } from './types.js';
|
|
2
2
|
export declare class SeriesStore {
|
|
3
3
|
readonly config: SeriesConfig;
|
|
4
4
|
readonly style: SeriesStyle;
|
|
5
|
-
private readonly
|
|
5
|
+
private readonly dataset;
|
|
6
6
|
private readonly pyramid;
|
|
7
7
|
private _dirty;
|
|
8
8
|
private _visible;
|
|
9
|
-
constructor(config: SeriesConfig, style: SeriesStyle);
|
|
9
|
+
constructor(dataset: Dataset, config: SeriesConfig, style: SeriesStyle);
|
|
10
10
|
get dirty(): boolean;
|
|
11
11
|
get length(): number;
|
|
12
12
|
get visible(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeriesStore.d.ts","sourceRoot":"","sources":["../../src/core/SeriesStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"SeriesStore.d.ts","sourceRoot":"","sources":["../../src/core/SeriesStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG3G,qBAAa,WAAW;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAiB;gBAErB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW;IAWtE,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;IAUxD,KAAK,IAAI,IAAI;IAUb,cAAc,IAAI,IAAI;IAMtB,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAetD,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IAM9C,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAmBnF,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;CAqCzF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Dataset, TimeRange } from './types.js';
|
|
2
|
+
export declare class StaticDataset implements Dataset {
|
|
3
|
+
private readonly xData;
|
|
4
|
+
private readonly yData;
|
|
5
|
+
constructor(xData: ArrayLike<number>, yData: ArrayLike<number>);
|
|
6
|
+
get length(): number;
|
|
7
|
+
get range(): TimeRange | null;
|
|
8
|
+
getX(index: number): number;
|
|
9
|
+
getY(index: number): number;
|
|
10
|
+
lowerBoundX(x: number): number;
|
|
11
|
+
upperBoundX(x: number): number;
|
|
12
|
+
private assertValidIndex;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=StaticDataset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaticDataset.d.ts","sourceRoot":"","sources":["../../src/core/StaticDataset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,aAAc,YAAW,OAAO;IAEzC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EACxB,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC;IAG3C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,KAAK,IAAI,SAAS,GAAG,IAAI,CAG5B;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK3B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK3B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAW9B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAW9B,OAAO,CAAC,gBAAgB;CAKzB"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export type { Viewport, LODBucket, LODView, TimeRange, SeriesStyle, SeriesMode, SeriesConfig } from './types.js';
|
|
1
|
+
export type { Viewport, LODBucket, LODView, TimeRange, SeriesStyle, SeriesMode, SeriesConfig, Dataset, AppendableDataset } from './types.js';
|
|
2
2
|
export { RingBuffer } from './RingBuffer.js';
|
|
3
|
+
export { StaticDataset } from './StaticDataset.js';
|
|
3
4
|
export { MinMaxPyramid } from './MinMaxPyramid.js';
|
|
4
5
|
export { SeriesStore } from './SeriesStore.js';
|
|
5
6
|
export { DataCursor } from './DataCursor.js';
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7I,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -25,9 +25,23 @@ export interface SeriesStyle {
|
|
|
25
25
|
readonly lineWidth: number;
|
|
26
26
|
}
|
|
27
27
|
export type SeriesMode = "line" | "envelope" | "scatter";
|
|
28
|
+
export interface Dataset {
|
|
29
|
+
readonly length: number;
|
|
30
|
+
readonly range: TimeRange | null;
|
|
31
|
+
getX(index: number): number;
|
|
32
|
+
getY(index: number): number;
|
|
33
|
+
lowerBoundX(x: number): number;
|
|
34
|
+
upperBoundX(x: number): number;
|
|
35
|
+
}
|
|
36
|
+
export interface AppendableDataset extends Dataset {
|
|
37
|
+
push(x: number, y: number): void;
|
|
38
|
+
append(x: ArrayLike<number>, y: ArrayLike<number>): void;
|
|
39
|
+
clear(): void;
|
|
40
|
+
}
|
|
28
41
|
export interface SeriesConfig {
|
|
29
42
|
readonly mode: SeriesMode;
|
|
30
43
|
readonly capacity: number;
|
|
31
44
|
readonly downsample: "minmax";
|
|
45
|
+
readonly dataset?: Dataset;
|
|
32
46
|
}
|
|
33
47
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAEzD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACzD,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,9 +2,10 @@ export { Chart } from './ui/Chart.js';
|
|
|
2
2
|
export type { ChartFrameStats, ChartOptions } from './ui/Chart.js';
|
|
3
3
|
export { SeriesStore } from './core/SeriesStore.js';
|
|
4
4
|
export { RingBuffer } from './core/RingBuffer.js';
|
|
5
|
+
export { StaticDataset } from './core/StaticDataset.js';
|
|
5
6
|
export { MinMaxPyramid } from './core/MinMaxPyramid.js';
|
|
6
7
|
export { Camera2D } from './interaction/Camera2D.js';
|
|
7
8
|
export { AxisController } from './interaction/AxisController.js';
|
|
8
|
-
export type { Viewport, LODBucket, LODView, TimeRange, SeriesStyle, SeriesMode, SeriesConfig } from './core/types.js';
|
|
9
|
+
export type { Viewport, LODBucket, LODView, TimeRange, SeriesStyle, SeriesMode, SeriesConfig, Dataset, AppendableDataset } from './core/types.js';
|
|
9
10
|
export type { PanIntent, ZoomAxis, ZoomIntent, ViewportPolicy } from './interaction/types.js';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAClJ,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|