chartgpu 0.1.0 → 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/LICENSE +1 -1
- package/README.md +141 -9
- package/dist/ChartGPU.d.ts +5 -3
- package/dist/ChartGPU.d.ts.map +1 -1
- package/dist/assets/ChartGPU-zgkjfPqp.js +15 -0
- package/dist/assets/GPUContext-CgqhC6W6.js +1 -0
- package/dist/assets/basic-line-DfRo2Pom.js +1 -0
- package/dist/assets/chart-sync-Bjf8c5Oo.js +1 -0
- package/dist/assets/createChartSync-BUGadH_x.js +1 -0
- package/dist/assets/createDataZoomSlider-DLbAKjVh.js +162 -0
- package/dist/assets/data-update-animation-BYhFrQqE.js +1 -0
- package/dist/assets/grid-test-6lXNOD1c.js +1 -0
- package/dist/assets/grouped-bar-pr-ZGxGI.js +1 -0
- package/dist/assets/hello-world-B3dB8WNo.js +9 -0
- package/dist/assets/interactive-aPGxN-b-.js +14 -0
- package/dist/assets/live-streaming-N4vKWEcJ.js +1 -0
- package/dist/assets/million-points-DVnJu39j.js +1 -0
- package/dist/assets/pie-BR5SmRvW.js +1 -0
- package/dist/assets/pie-c06rKDKR.js +321 -0
- package/dist/assets/sampling-F-iafT6-.js +1 -0
- package/dist/assets/scales-D-5MHN10.js +37 -0
- package/dist/assets/scatter-CVFSpSfu.js +1 -0
- package/dist/components/formatTooltip.d.ts +7 -0
- package/dist/components/formatTooltip.d.ts.map +1 -1
- package/dist/config/OptionResolver.d.ts +21 -2
- package/dist/config/OptionResolver.d.ts.map +1 -1
- package/dist/config/defaults.d.ts +16 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/types.d.ts +49 -4
- package/dist/config/types.d.ts.map +1 -1
- package/dist/core/createRenderCoordinator.d.ts +2 -2
- package/dist/core/createRenderCoordinator.d.ts.map +1 -1
- package/dist/data/ohlcSample.d.ts +21 -0
- package/dist/data/ohlcSample.d.ts.map +1 -0
- package/dist/examples/basic-line/index.html +90 -0
- package/dist/examples/chart-sync/index.html +102 -0
- package/dist/examples/data-update-animation/index.html +193 -0
- package/dist/examples/grid-test/index.html +90 -0
- package/dist/examples/grouped-bar/index.html +91 -0
- package/dist/examples/hello-world/index.html +32 -0
- package/dist/examples/index.html +142 -0
- package/dist/examples/interactive/index.html +101 -0
- package/dist/examples/live-streaming/index.html +150 -0
- package/dist/examples/million-points/index.html +220 -0
- package/dist/examples/pie/index.html +132 -0
- package/dist/examples/sampling/index.html +249 -0
- package/dist/examples/scatter/index.html +91 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4035 -2996
- package/dist/index.js.map +1 -1
- package/dist/interaction/createInsideZoom.d.ts.map +1 -1
- package/dist/interaction/findCandlestick.d.ts +41 -0
- package/dist/interaction/findCandlestick.d.ts.map +1 -0
- package/dist/renderers/createAxisRenderer.d.ts +1 -1
- package/dist/renderers/createAxisRenderer.d.ts.map +1 -1
- package/dist/renderers/createCandlestickRenderer.d.ts +19 -0
- package/dist/renderers/createCandlestickRenderer.d.ts.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
const n=`// area.wgsl
|
|
2
|
+
// Minimal area-fill shader (triangle-strip):
|
|
3
|
+
// - Vertex input: vec2<f32> position in data coords
|
|
4
|
+
// - Uniforms: clip-space transform + baseline value + solid RGBA color
|
|
5
|
+
// - Topology: triangle-strip
|
|
6
|
+
// - CPU duplicates vertices as p0,p0,p1,p1,... and we use vertex_index parity:
|
|
7
|
+
// even index -> "top" vertex (original y)
|
|
8
|
+
// odd index -> "baseline" vertex (uniform baseline)
|
|
9
|
+
|
|
10
|
+
struct VSUniforms {
|
|
11
|
+
transform: mat4x4<f32>,
|
|
12
|
+
baseline: f32,
|
|
13
|
+
// Pad to 16-byte multiple (uniform buffer layout requirements).
|
|
14
|
+
_pad0: vec3<f32>,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
@group(0) @binding(0) var<uniform> vsUniforms: VSUniforms;
|
|
18
|
+
|
|
19
|
+
struct FSUniforms {
|
|
20
|
+
color: vec4<f32>,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
@group(0) @binding(1) var<uniform> fsUniforms: FSUniforms;
|
|
24
|
+
|
|
25
|
+
struct VSIn {
|
|
26
|
+
@location(0) position: vec2<f32>,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
struct VSOut {
|
|
30
|
+
@builtin(position) clipPosition: vec4<f32>,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
@vertex
|
|
34
|
+
fn vsMain(in: VSIn, @builtin(vertex_index) vertexIndex: u32) -> VSOut {
|
|
35
|
+
var out: VSOut;
|
|
36
|
+
let useBaseline = (vertexIndex & 1u) == 1u;
|
|
37
|
+
let y = select(in.position.y, vsUniforms.baseline, useBaseline);
|
|
38
|
+
let pos = vec2<f32>(in.position.x, y);
|
|
39
|
+
out.clipPosition = vsUniforms.transform * vec4<f32>(pos, 0.0, 1.0);
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@fragment
|
|
44
|
+
fn fsMain() -> @location(0) vec4<f32> {
|
|
45
|
+
return fsUniforms.color;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
`,e=`// line.wgsl
|
|
49
|
+
// Minimal line-strip shader:
|
|
50
|
+
// - Vertex input: vec2<f32> position in data coords
|
|
51
|
+
// - Uniforms: clip-space transform + solid RGBA color
|
|
52
|
+
|
|
53
|
+
struct VSUniforms {
|
|
54
|
+
transform: mat4x4<f32>,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
@group(0) @binding(0) var<uniform> vsUniforms: VSUniforms;
|
|
58
|
+
|
|
59
|
+
struct FSUniforms {
|
|
60
|
+
color: vec4<f32>,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
@group(0) @binding(1) var<uniform> fsUniforms: FSUniforms;
|
|
64
|
+
|
|
65
|
+
struct VSIn {
|
|
66
|
+
@location(0) position: vec2<f32>,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
struct VSOut {
|
|
70
|
+
@builtin(position) clipPosition: vec4<f32>,
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
@vertex
|
|
74
|
+
fn vsMain(in: VSIn) -> VSOut {
|
|
75
|
+
var out: VSOut;
|
|
76
|
+
out.clipPosition = vsUniforms.transform * vec4<f32>(in.position, 0.0, 1.0);
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@fragment
|
|
81
|
+
fn fsMain() -> @location(0) vec4<f32> {
|
|
82
|
+
return fsUniforms.color;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
`,i=`// scatter.wgsl
|
|
86
|
+
// Instanced anti-aliased circle shader (SDF):
|
|
87
|
+
// - Per-instance vertex input:
|
|
88
|
+
// - center = vec2<f32> point center (transformed by VSUniforms.transform)
|
|
89
|
+
// - radiusPx = f32 circle radius in pixels
|
|
90
|
+
// - Draw call: draw(6, instanceCount) using triangle-list expansion in VS
|
|
91
|
+
// - Uniforms:
|
|
92
|
+
// - @group(0) @binding(0): VSUniforms { transform, viewportPx }
|
|
93
|
+
// - @group(0) @binding(1): FSUniforms { color }
|
|
94
|
+
//
|
|
95
|
+
// Notes:
|
|
96
|
+
// - \`viewportPx\` is the current render target size in pixels (width, height).
|
|
97
|
+
// - The quad is expanded in clip space using \`radiusPx\` and \`viewportPx\`.
|
|
98
|
+
|
|
99
|
+
struct VSUniforms {
|
|
100
|
+
transform: mat4x4<f32>,
|
|
101
|
+
viewportPx: vec2<f32>,
|
|
102
|
+
// Pad to 16-byte alignment (mat4x4 is 64B; vec2 adds 8B; pad to 80B).
|
|
103
|
+
_pad0: vec2<f32>,
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
@group(0) @binding(0) var<uniform> vsUniforms: VSUniforms;
|
|
107
|
+
|
|
108
|
+
struct FSUniforms {
|
|
109
|
+
color: vec4<f32>,
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
@group(0) @binding(1) var<uniform> fsUniforms: FSUniforms;
|
|
113
|
+
|
|
114
|
+
struct VSIn {
|
|
115
|
+
@location(0) center: vec2<f32>,
|
|
116
|
+
@location(1) radiusPx: f32,
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
struct VSOut {
|
|
120
|
+
@builtin(position) clipPosition: vec4<f32>,
|
|
121
|
+
@location(0) localPx: vec2<f32>,
|
|
122
|
+
@location(1) radiusPx: f32,
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
@vertex
|
|
126
|
+
fn vsMain(in: VSIn, @builtin(vertex_index) vertexIndex: u32) -> VSOut {
|
|
127
|
+
// Fixed local corners for 2 triangles (triangle-list).
|
|
128
|
+
// \`localNdc\` is a quad in [-1, 1]^2; we convert it to pixel offsets via radiusPx.
|
|
129
|
+
let localNdc = array<vec2<f32>, 6>(
|
|
130
|
+
vec2<f32>(-1.0, -1.0),
|
|
131
|
+
vec2<f32>( 1.0, -1.0),
|
|
132
|
+
vec2<f32>(-1.0, 1.0),
|
|
133
|
+
vec2<f32>(-1.0, 1.0),
|
|
134
|
+
vec2<f32>( 1.0, -1.0),
|
|
135
|
+
vec2<f32>( 1.0, 1.0)
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
let corner = localNdc[vertexIndex];
|
|
139
|
+
let localPx = corner * in.radiusPx;
|
|
140
|
+
|
|
141
|
+
// Convert pixel offset to clip-space offset.
|
|
142
|
+
// Clip space spans [-1, 1] across the viewport, so px -> clip is (2 / viewportPx).
|
|
143
|
+
let localClip = localPx * (2.0 / vsUniforms.viewportPx);
|
|
144
|
+
|
|
145
|
+
let centerClip = (vsUniforms.transform * vec4<f32>(in.center, 0.0, 1.0)).xy;
|
|
146
|
+
|
|
147
|
+
var out: VSOut;
|
|
148
|
+
out.clipPosition = vec4<f32>(centerClip + localClip, 0.0, 1.0);
|
|
149
|
+
out.localPx = localPx;
|
|
150
|
+
out.radiusPx = in.radiusPx;
|
|
151
|
+
return out;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
@fragment
|
|
155
|
+
fn fsMain(in: VSOut) -> @location(0) vec4<f32> {
|
|
156
|
+
// Signed distance to the circle boundary (negative inside).
|
|
157
|
+
let dist = length(in.localPx) - in.radiusPx;
|
|
158
|
+
|
|
159
|
+
// Analytic-ish AA: smooth edge based on derivative of dist in screen space.
|
|
160
|
+
let w = fwidth(dist);
|
|
161
|
+
let a = 1.0 - smoothstep(0.0, w, dist);
|
|
162
|
+
|
|
163
|
+
// Discard fully outside to avoid unnecessary blending work.
|
|
164
|
+
if (a <= 0.0) {
|
|
165
|
+
discard;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return vec4<f32>(fsUniforms.color.rgb, fsUniforms.color.a * a);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
`,t=`// pie.wgsl
|
|
172
|
+
// Instanced anti-aliased pie-slice shader (instanced quad + SDF mask).
|
|
173
|
+
//
|
|
174
|
+
// - Per-instance vertex input:
|
|
175
|
+
// - center = vec2<f32> slice center (transformed by VSUniforms.transform)
|
|
176
|
+
// - startAngleRad = f32 start angle in radians
|
|
177
|
+
// - endAngleRad = f32 end angle in radians
|
|
178
|
+
// - radiiPx = vec2<f32>(innerRadiusPx, outerRadiusPx) in *device pixels*
|
|
179
|
+
// - color = vec4<f32> RGBA color in [0..1]
|
|
180
|
+
//
|
|
181
|
+
// - Draw call: draw(6, instanceCount) using triangle-list expansion in VS
|
|
182
|
+
//
|
|
183
|
+
// - Uniforms:
|
|
184
|
+
// - @group(0) @binding(0): VSUniforms { transform, viewportPx }
|
|
185
|
+
//
|
|
186
|
+
// Notes:
|
|
187
|
+
// - The quad is expanded in clip space using \`radiusPx\` and \`viewportPx\`.
|
|
188
|
+
// - Fragment uses an SDF mask for the circle boundary + an angular wedge mask.
|
|
189
|
+
// - Fully outside fragments are discarded to avoid unnecessary blending work.
|
|
190
|
+
//
|
|
191
|
+
// Conventions: matches other shaders in this repo (vsMain/fsMain, group 0 bindings,
|
|
192
|
+
// and explicit uniform padding/alignment where needed).
|
|
193
|
+
|
|
194
|
+
const PI: f32 = 3.141592653589793;
|
|
195
|
+
const TAU: f32 = 6.283185307179586; // 2*pi
|
|
196
|
+
|
|
197
|
+
struct VSUniforms {
|
|
198
|
+
transform: mat4x4<f32>,
|
|
199
|
+
viewportPx: vec2<f32>,
|
|
200
|
+
// Pad to 16-byte alignment (mat4x4 is 64B; vec2 adds 8B; pad to 80B).
|
|
201
|
+
_pad0: vec2<f32>,
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
@group(0) @binding(0) var<uniform> vsUniforms: VSUniforms;
|
|
205
|
+
|
|
206
|
+
struct VSIn {
|
|
207
|
+
@location(0) center: vec2<f32>,
|
|
208
|
+
@location(1) startAngleRad: f32,
|
|
209
|
+
@location(2) endAngleRad: f32,
|
|
210
|
+
@location(3) radiiPx: vec2<f32>, // (innerPx, outerPx)
|
|
211
|
+
@location(4) color: vec4<f32>,
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
struct VSOut {
|
|
215
|
+
@builtin(position) clipPosition: vec4<f32>,
|
|
216
|
+
@location(0) localPx: vec2<f32>,
|
|
217
|
+
@location(1) startAngleRad: f32,
|
|
218
|
+
@location(2) endAngleRad: f32,
|
|
219
|
+
@location(3) radiiPx: vec2<f32>,
|
|
220
|
+
@location(4) color: vec4<f32>,
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
@vertex
|
|
224
|
+
fn vsMain(in: VSIn, @builtin(vertex_index) vertexIndex: u32) -> VSOut {
|
|
225
|
+
// Fixed local corners for 2 triangles (triangle-list).
|
|
226
|
+
// \`localNdc\` is a quad in [-1, 1]^2; we convert it to pixel offsets via radiusPx.
|
|
227
|
+
let localNdc = array<vec2<f32>, 6>(
|
|
228
|
+
vec2<f32>(-1.0, -1.0),
|
|
229
|
+
vec2<f32>( 1.0, -1.0),
|
|
230
|
+
vec2<f32>(-1.0, 1.0),
|
|
231
|
+
vec2<f32>(-1.0, 1.0),
|
|
232
|
+
vec2<f32>( 1.0, -1.0),
|
|
233
|
+
vec2<f32>( 1.0, 1.0)
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
let corner = localNdc[vertexIndex];
|
|
237
|
+
let outerPx = in.radiiPx.y;
|
|
238
|
+
let localPx = corner * outerPx;
|
|
239
|
+
|
|
240
|
+
// Convert pixel offset to clip-space offset.
|
|
241
|
+
// Clip space spans [-1, 1] across the viewport, so px -> clip is (2 / viewportPx).
|
|
242
|
+
let localClip = localPx * (2.0 / vsUniforms.viewportPx);
|
|
243
|
+
|
|
244
|
+
let centerClip = (vsUniforms.transform * vec4<f32>(in.center, 0.0, 1.0)).xy;
|
|
245
|
+
|
|
246
|
+
var out: VSOut;
|
|
247
|
+
out.clipPosition = vec4<f32>(centerClip + localClip, 0.0, 1.0);
|
|
248
|
+
out.localPx = localPx;
|
|
249
|
+
out.startAngleRad = in.startAngleRad;
|
|
250
|
+
out.endAngleRad = in.endAngleRad;
|
|
251
|
+
out.radiiPx = in.radiiPx;
|
|
252
|
+
out.color = in.color;
|
|
253
|
+
return out;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
fn wrapToTau(theta: f32) -> f32 {
|
|
257
|
+
// Maps theta to [0, TAU). (Input often comes from atan2 in [-PI, PI].)
|
|
258
|
+
return select(theta, theta + TAU, theta < 0.0);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
@fragment
|
|
262
|
+
fn fsMain(in: VSOut) -> @location(0) vec4<f32> {
|
|
263
|
+
let p = in.localPx;
|
|
264
|
+
let r = length(p);
|
|
265
|
+
|
|
266
|
+
let innerPx = in.radiiPx.x;
|
|
267
|
+
let outerPx = in.radiiPx.y;
|
|
268
|
+
|
|
269
|
+
// --- Radial mask: ring between inner and outer radii (inner==0 => pie) ---
|
|
270
|
+
// Positive inside the ring, negative outside.
|
|
271
|
+
let radialDist = min(r - innerPx, outerPx - r);
|
|
272
|
+
let radialW = fwidth(radialDist);
|
|
273
|
+
let radialA = smoothstep(-radialW, radialW, radialDist);
|
|
274
|
+
|
|
275
|
+
if (radialA <= 0.0) {
|
|
276
|
+
discard;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Compute fragment angle in [0, TAU).
|
|
280
|
+
let angle = wrapToTau(atan2(p.y, p.x));
|
|
281
|
+
|
|
282
|
+
// --- Angular mask: wedge between start/end angles with wrap ---
|
|
283
|
+
let start = in.startAngleRad;
|
|
284
|
+
let end = in.endAngleRad;
|
|
285
|
+
|
|
286
|
+
// Compute span in [0, 2π) with wrap.
|
|
287
|
+
var span = end - start;
|
|
288
|
+
span = span + select(0.0, TAU, span < 0.0);
|
|
289
|
+
|
|
290
|
+
// Compute rel in [0, 2π) with wrap.
|
|
291
|
+
var rel = angle - start;
|
|
292
|
+
rel = rel + select(0.0, TAU, rel < 0.0);
|
|
293
|
+
|
|
294
|
+
let inside = rel <= span;
|
|
295
|
+
|
|
296
|
+
// Signed angular distance (in radians) to nearest boundary.
|
|
297
|
+
// - Inside: +min(rel, span-rel)
|
|
298
|
+
// - Outside: -min(rel-span, 2π-rel)
|
|
299
|
+
let dIn = min(rel, max(span - rel, 0.0));
|
|
300
|
+
let dOutA = max(rel - span, 0.0);
|
|
301
|
+
let dOutB = max(TAU - rel, 0.0);
|
|
302
|
+
let dOut = min(dOutA, dOutB);
|
|
303
|
+
|
|
304
|
+
let signedAngleDist = select(-dOut, dIn, inside);
|
|
305
|
+
|
|
306
|
+
// Convert to approximate pixel distance to the boundary ray.
|
|
307
|
+
// (For small angles, perpendicular distance to a ray ≈ r * angle.)
|
|
308
|
+
let angleDistPx = signedAngleDist * max(r, 1.0);
|
|
309
|
+
|
|
310
|
+
let angW = fwidth(angleDistPx);
|
|
311
|
+
let angularA = smoothstep(-angW, angW, angleDistPx);
|
|
312
|
+
|
|
313
|
+
let aOut = radialA * angularA;
|
|
314
|
+
if (aOut <= 0.0) {
|
|
315
|
+
discard;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return vec4<f32>(in.color.rgb, in.color.a * aOut);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
`;export{n as a,e as l,t as p,i as s};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./GPUContext-CgqhC6W6.js";import{C as R}from"./ChartGPU-zgkjfPqp.js";import"./createDataZoomSlider-DLbAKjVh.js";import"./scales-D-5MHN10.js";import"./pie-c06rKDKR.js";const y=e=>{const t=document.getElementById("error");t&&(t.textContent=e,t.style.display="block")},p=e=>new Intl.NumberFormat(void 0).format(Math.max(0,Math.floor(e))),c=(e,t)=>{const n=document.getElementById(e);n&&(n.textContent=t)},b=e=>{const t=Math.max(2,Math.floor(e)),n=new Array(t),r=[12500,31e3,48e3,66500,84250],s=34;for(let o=0;o<t;o++){const a=o,l=Math.sin(o*.0014)*1.2+Math.sin(o*17e-5+1.1)*.6,i=Math.sin(o*.085)*.25+Math.sin(o*.17+.4)*.12;let m=0;for(const h of r){const d=o-h;m+=6.5*Math.exp(-(d*d)/(2*s*s))}n[o]=[a,l+i+m]}return n},v=(e,t)=>{let n=null;const r=()=>{n===null&&(n=requestAnimationFrame(()=>{n=null;for(const o of t)o.resize()}))},s=new ResizeObserver(()=>r());for(const o of e)s.observe(o);return s},S=e=>{switch(e){case"none":case"lttb":case"average":case"max":case"min":return e;default:return"lttb"}},_=e=>{const t=Number(e);return Number.isFinite(t)?Math.max(2,Math.floor(t)):2e3},I=(e,t,n)=>({grid:{left:70,right:24,top:24,bottom:44},xAxis:{type:"value",min:0,max:n,name:"Index"},yAxis:{type:"value",name:"Value"},tooltip:{trigger:"item"},dataZoom:[{type:"inside"},{type:"slider"}],palette:["#4a9eff"],animation:{duration:900,easing:"cubicOut",delay:0},series:[{type:"line",name:"zoom-aware sampling",data:e,color:"#4a9eff",lineStyle:{width:2,opacity:1},sampling:t.mode,samplingThreshold:t.threshold}]}),L=(e,t,n)=>Math.max(t,Math.min(n,e|0)),f=e=>`${e.toFixed(2)}%`,F=(e,t)=>{const o=Math.max(.001,Math.min(1,t)),a=Number.isFinite(e)?Math.max(1,e|0):1,l=Math.min(2e5,Math.max(2,a*32));return L(Math.round(a/o),2,l)},g=(e,t,n,r)=>{const s=(r==null?void 0:r.start)??0,o=(r==null?void 0:r.end)??100,a=Math.max(0,Math.min(100,o)-Math.max(0,s)),l=Math.max(0,Math.min(1,a/100)),i=Math.max(2,Math.floor(e*l)),m=n.mode==="none"?i:F(n.threshold,l),h=n.mode==="none"?i:Math.min(i,m);c("totalPoints",p(e)),c("xDomain",`0 → ${p(t)}`),c("samplingResolved",n.mode),c("samplingThresholdResolved",p(n.threshold)),c("zoomRange",`${f(s)} → ${f(o)}`),c("zoomSpan",`${f(a)} (of full span)`),c("visibleRawPoints",p(i)),c("targetPoints",n.mode==="none"?"— (sampling: none)":p(m)),c("expectedRendered",p(h))};async function w(){const e=document.getElementById("chart");if(!(e instanceof HTMLElement))throw new Error("Chart container not found");const t=document.getElementById("samplingMode"),n=document.getElementById("samplingThreshold"),r=document.getElementById("apply");if(!(t instanceof HTMLSelectElement))throw new Error("Sampling mode control not found");if(!(n instanceof HTMLInputElement))throw new Error("Sampling threshold control not found");if(!(r instanceof HTMLButtonElement))throw new Error("Apply button not found");t.value="lttb",n.value="2000";const s=b(1e5),o=s.length-1;let a={mode:"lttb",threshold:2e3},l=I(s,a,o);const i=await R.create(e,l),m=v([e],[i]);i.resize();const h=()=>{a={mode:S(t.value),threshold:_(n.value)},l=I(s,a,o),i.setOption(l),g(s.length,o,a,i.getZoomRange())};r.addEventListener("click",h),n.addEventListener("keydown",u=>{u.key==="Enter"&&h()});let d=null,M="";const E=()=>{const u=i.getZoomRange(),x=u?`${u.start.toFixed(3)}:${u.end.toFixed(3)}:${a.mode}:${a.threshold}`:`null:${a.mode}:${a.threshold}`;x!==M&&(M=x,g(s.length,o,a,u)),d=requestAnimationFrame(E)};g(s.length,o,a,i.getZoomRange()),d=requestAnimationFrame(E);let T=!1;const A=()=>{T||(T=!0,d!==null&&cancelAnimationFrame(d),m.disconnect(),i.dispose())};window.addEventListener("beforeunload",A)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{w().catch(e=>{console.error(e),y(e instanceof Error?e.message:String(e))})}):w().catch(e=>{console.error(e),y(e instanceof Error?e.message:String(e))});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const V=`// grid.wgsl
|
|
2
|
+
// Minimal grid line shader:
|
|
3
|
+
// - Vertex input: vec2<f32> position in clip-space coordinates
|
|
4
|
+
// - Uniforms: identity transform + solid RGBA color
|
|
5
|
+
|
|
6
|
+
struct VSUniforms {
|
|
7
|
+
transform: mat4x4<f32>,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
@group(0) @binding(0) var<uniform> vsUniforms: VSUniforms;
|
|
11
|
+
|
|
12
|
+
struct FSUniforms {
|
|
13
|
+
color: vec4<f32>,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
@group(0) @binding(1) var<uniform> fsUniforms: FSUniforms;
|
|
17
|
+
|
|
18
|
+
struct VSIn {
|
|
19
|
+
@location(0) position: vec2<f32>,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
struct VSOut {
|
|
23
|
+
@builtin(position) clipPosition: vec4<f32>,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
@vertex
|
|
27
|
+
fn vsMain(in: VSIn) -> VSOut {
|
|
28
|
+
var out: VSOut;
|
|
29
|
+
out.clipPosition = vsUniforms.transform * vec4<f32>(in.position, 0.0, 1.0);
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@fragment
|
|
34
|
+
fn fsMain() -> @location(0) vec4<f32> {
|
|
35
|
+
return fsUniforms.color;
|
|
36
|
+
}
|
|
37
|
+
`,q="vsMain",Y="fsMain",j=t=>Number.isInteger(t)&&t>0&&(t&t-1)===0,K=(t,e)=>{if(!Number.isFinite(t)||t<0)throw new Error(`alignTo(value): value must be a finite non-negative number. Received: ${String(t)}`);if(!j(e))throw new Error(`alignTo(alignment): alignment must be a positive power of two. Received: ${String(e)}`);return Math.floor(t)+e-1&~(e-1)},H=(t,e)=>"module"in e?{module:e.module,entryPoint:e.entryPoint||"",constants:e.constants}:{module:Z(t,e.code,e.label),entryPoint:e.entryPoint||"",constants:e.constants};function Z(t,e,r){if(typeof e!="string"||e.length===0)throw new Error("createShaderModule(code): WGSL code must be a non-empty string.");return t.createShaderModule({code:e,label:r})}function X(t,e){const r=e.layout??(e.bindGroupLayouts?t.createPipelineLayout({bindGroupLayouts:[...e.bindGroupLayouts]}):"auto"),n=H(t,e.vertex),o=n.entryPoint||q;let i;if(e.fragment){const f=H(t,e.fragment),a=f.entryPoint||Y;let g=e.fragment.targets;if(!g){const u=e.fragment.formats;if(!u)throw new Error("createRenderPipeline(fragment): provide either `fragment.targets` or `fragment.formats` when a fragment stage is present.");g=(Array.isArray(u)?u:[u]).map(v=>({format:v,blend:e.fragment.blend,writeMask:e.fragment.writeMask}))}i={module:f.module,entryPoint:a,targets:[...g],constants:f.constants}}const s=e.primitive??{topology:"triangle-list"},h=e.multisample??{count:1};return t.createRenderPipeline({label:e.label,layout:r,vertex:{module:n.module,entryPoint:o,buffers:e.vertex.buffers?[...e.vertex.buffers]:[],constants:n.constants},fragment:i,primitive:s,depthStencil:e.depthStencil,multisample:h})}function _(t,e,r){if(!Number.isFinite(e)||e<=0)throw new Error(`createUniformBuffer(size): size must be a positive number. Received: ${String(e)}`);const n=(r==null?void 0:r.alignment)??16,o=K(e,Math.max(4,n)),i=t.limits.maxUniformBufferBindingSize;if(o>i)throw new Error(`createUniformBuffer(size): requested size ${o} exceeds device.limits.maxUniformBufferBindingSize (${i}).`);return t.createBuffer({label:r==null?void 0:r.label,size:o,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST})}function z(t,e,r){const n=r instanceof ArrayBuffer?{arrayBuffer:r,offset:0,size:r.byteLength}:{arrayBuffer:r.buffer,offset:r.byteOffset,size:r.byteLength};if(n.size!==0){if(n.offset&3||n.size&3)throw new Error(`writeUniformBuffer(data): data byteOffset (${n.offset}) and byteLength (${n.size}) must be multiples of 4 for queue.writeBuffer().`);if(n.size>e.size)throw new Error(`writeUniformBuffer(data): data byteLength (${n.size}) exceeds buffer.size (${e.size}).`);t.queue.writeBuffer(e,0,n.arrayBuffer,n.offset,n.size)}}const O=t=>Math.min(1,Math.max(0,t)),W=t=>Math.min(255,Math.max(0,t)),T=t=>{const e=Number.parseInt(t,16);return Number.isFinite(e)?e:0},G=t=>{const e=Number.parseInt(t,16);return Number.isFinite(e)?e:0},J=t=>{const e=t.trim();if(!e.startsWith("#"))return null;const r=e.slice(1);if(r.length===3){const n=T(r[0]),o=T(r[1]),i=T(r[2]);return[n*17/255,o*17/255,i*17/255,1]}if(r.length===4){const n=T(r[0]),o=T(r[1]),i=T(r[2]),s=T(r[3]);return[n*17/255,o*17/255,i*17/255,s*17/255]}if(r.length===6){const n=G(r.slice(0,2)),o=G(r.slice(2,4)),i=G(r.slice(4,6));return[n/255,o/255,i/255,1]}if(r.length===8){const n=G(r.slice(0,2)),o=G(r.slice(2,4)),i=G(r.slice(4,6)),s=G(r.slice(6,8));return[n/255,o/255,i/255,s/255]}return null},M=t=>{const e=t.trim();if(e.length===0)return null;if(e.endsWith("%")){const n=Number.parseFloat(e.slice(0,-1));return Number.isFinite(n)?W(n/100*255):null}const r=Number.parseFloat(e);return Number.isFinite(r)?W(r):null},Q=t=>{const e=t.trim();if(e.length===0)return null;if(e.endsWith("%")){const n=Number.parseFloat(e.slice(0,-1));return Number.isFinite(n)?O(n/100):null}const r=Number.parseFloat(e);return Number.isFinite(r)?O(r):null},ee=t=>{const e=t.trim(),r=/^(rgba?|RGBA?)\(\s*([^\)]*)\s*\)$/.exec(e);if(!r)return null;const n=r[1].toLowerCase(),i=r[2].split(",").map(s=>s.trim());if(n==="rgb"){if(i.length!==3)return null;const s=M(i[0]),h=M(i[1]),f=M(i[2]);return s==null||h==null||f==null?null:[s/255,h/255,f/255,1]}if(n==="rgba"){if(i.length!==4)return null;const s=M(i[0]),h=M(i[1]),f=M(i[2]),a=Q(i[3]);return s==null||h==null||f==null||a==null?null:[s/255,h/255,f/255,a]}return null},I=t=>{if(typeof t!="string")return null;const e=t.trim();if(e.length===0)return null;const r=J(e);if(r)return r;const n=ee(e);return n||null},pe=(t,e={r:0,g:0,b:0,a:1})=>{const r=I(t);if(!r)return e;const[n,o,i,s]=r;return{r:n,g:o,b:i,a:s}},te="bgra8unorm",re=5,ne=6,ie=[1,1,1,.8],se=()=>{const t=new ArrayBuffer(64);return new Float32Array(t).set([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),t},oe=t=>Number.isFinite(t.left)&&Number.isFinite(t.right)&&Number.isFinite(t.top)&&Number.isFinite(t.bottom)&&Number.isFinite(t.canvasWidth)&&Number.isFinite(t.canvasHeight),ae=(t,e,r,n)=>{const{left:o,right:i,top:s,bottom:h,canvasWidth:f,canvasHeight:a}=n;if(!oe(n))throw new Error("AxisRenderer.prepare: gridArea dimensions must be finite numbers.");if(f<=0||a<=0)throw new Error("AxisRenderer.prepare: canvas dimensions must be positive.");const g=window.devicePixelRatio||1,u=o*g,w=f-i*g,v=s*g,A=a-h*g,b=u/f*2-1,B=w/f*2-1,l=1-v/a*2,d=1-A/a*2,p=t.tickLength??ne;if(!Number.isFinite(p)||p<0)throw new Error("AxisRenderer.prepare: tickLength must be a finite non-negative number.");const y=re,R=p*g,U=R/f*2,x=R/a*2,F=t.min??(r==="x"?e.invert(b):e.invert(d)),S=t.max??(r==="x"?e.invert(B):e.invert(l)),E=1+y,m=new Float32Array(E*2*2);let c=0;if(r==="x"){m[c++]=b,m[c++]=d,m[c++]=B,m[c++]=d;const L=d,P=L-x;for(let N=0;N<y;N++){const k=N/(y-1),$=F+k*(S-F),C=e.scale($);m[c++]=C,m[c++]=L,m[c++]=C,m[c++]=P}}else{m[c++]=b,m[c++]=d,m[c++]=b,m[c++]=l;const L=b,P=L-U;for(let N=0;N<y;N++){const k=N/(y-1),$=F+k*(S-F),C=e.scale($);m[c++]=L,m[c++]=C,m[c++]=P,m[c++]=C}}return m};function ge(t,e){let r=!1;const n=(e==null?void 0:e.targetFormat)??te,o=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),i=_(t,64,{label:"axisRenderer/vsUniforms"}),s=_(t,16,{label:"axisRenderer/fsUniformsLine"}),h=_(t,16,{label:"axisRenderer/fsUniformsTick"}),f=t.createBindGroup({layout:o,entries:[{binding:0,resource:{buffer:i}},{binding:1,resource:{buffer:s}}]}),a=t.createBindGroup({layout:o,entries:[{binding:0,resource:{buffer:i}},{binding:1,resource:{buffer:h}}]}),g=X(t,{label:"axisRenderer/pipeline",bindGroupLayouts:[o],vertex:{code:V,label:"grid.wgsl",buffers:[{arrayStride:8,stepMode:"vertex",attributes:[{shaderLocation:0,format:"float32x2",offset:0}]}]},fragment:{code:V,label:"grid.wgsl",formats:n,blend:{color:{operation:"add",srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{operation:"add",srcFactor:"one",dstFactor:"one-minus-src-alpha"}}},primitive:{topology:"line-list",cullMode:"none"},multisample:{count:1}});let u=null,w=0;const v=()=>{if(r)throw new Error("AxisRenderer is disposed.")};return{prepare:(l,d,p,y,R,U)=>{if(v(),p!=="x"&&p!=="y")throw new Error("AxisRenderer.prepare: orientation must be 'x' or 'y'.");const x=ae(l,d,p,y),F=x.byteLength,S=Math.max(4,F);if(!u||u.size<S){if(u)try{u.destroy()}catch{}u=t.createBuffer({label:"axisRenderer/vertexBuffer",size:S,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}t.queue.writeBuffer(u,0,x.buffer,0,x.byteLength),w=x.length/2,z(t,i,se());const E=R??"rgba(255,255,255,0.8)",m=U??E,c=I(E)??ie,L=I(m)??c,P=new ArrayBuffer(4*4);new Float32Array(P).set([c[0],c[1],c[2],c[3]]),z(t,s,P);const N=new ArrayBuffer(4*4);new Float32Array(N).set([L[0],L[1],L[2],L[3]]),z(t,h,N)},render:l=>{v(),!(w===0||!u)&&(l.setPipeline(g),l.setVertexBuffer(0,u),l.setBindGroup(0,f),l.draw(Math.min(2,w)),w>2&&(l.setBindGroup(0,a),l.draw(w-2,1,2,0)))},dispose:()=>{if(!r){r=!0;try{i.destroy()}catch{}try{s.destroy()}catch{}try{h.destroy()}catch{}if(u)try{u.destroy()}catch{}u=null,w=0}}}}const ce="bgra8unorm",fe=5,ue=6,le="rgba(255,255,255,0.15)",me=[1,1,1,.15],be=()=>{const t=new ArrayBuffer(64);return new Float32Array(t).set([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),t},de=(t,e,r)=>{const{left:n,right:o,top:i,bottom:s,canvasWidth:h,canvasHeight:f}=t,a=window.devicePixelRatio||1,g=n*a,u=h-o*a,w=i*a,v=f-s*a,A=u-g,b=v-w,B=e+r,l=new Float32Array(B*2*2);let d=0;for(let p=0;p<e;p++){const y=e===1?.5:p/(e-1),R=w+y*b,U=g/h*2-1,x=u/h*2-1,F=1-R/f*2;l[d++]=U,l[d++]=F,l[d++]=x,l[d++]=F}for(let p=0;p<r;p++){const y=r===1?.5:p/(r-1),U=(g+y*A)/h*2-1,x=1-w/f*2,F=1-v/f*2;l[d++]=U,l[d++]=x,l[d++]=U,l[d++]=F}return l};function he(t,e){let r=!1;const n=(e==null?void 0:e.targetFormat)??ce,o=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),i=_(t,64,{label:"gridRenderer/vsUniforms"}),s=_(t,16,{label:"gridRenderer/fsUniforms"}),h=t.createBindGroup({layout:o,entries:[{binding:0,resource:{buffer:i}},{binding:1,resource:{buffer:s}}]}),f=X(t,{label:"gridRenderer/pipeline",bindGroupLayouts:[o],vertex:{code:V,label:"grid.wgsl",buffers:[{arrayStride:8,stepMode:"vertex",attributes:[{shaderLocation:0,format:"float32x2",offset:0}]}]},fragment:{code:V,label:"grid.wgsl",formats:n,blend:{color:{operation:"add",srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{operation:"add",srcFactor:"one",dstFactor:"one-minus-src-alpha"}}},primitive:{topology:"line-list",cullMode:"none"},multisample:{count:1}});let a=null,g=0;const u=()=>{if(r)throw new Error("GridRenderer is disposed.")};return{prepare:(b,B)=>{u();const l=B!=null&&typeof B=="object"&&("lineCount"in B||"color"in B),d=l?B:void 0,p=l?d==null?void 0:d.lineCount:B,y=(p==null?void 0:p.horizontal)??fe,R=(p==null?void 0:p.vertical)??ue,U=(d==null?void 0:d.color)??le;if(y<0||R<0)throw new Error("GridRenderer.prepare: line counts must be non-negative.");if(!Number.isFinite(b.left)||!Number.isFinite(b.right)||!Number.isFinite(b.top)||!Number.isFinite(b.bottom)||!Number.isFinite(b.canvasWidth)||!Number.isFinite(b.canvasHeight))throw new Error("GridRenderer.prepare: gridArea dimensions must be finite numbers.");if(b.canvasWidth<=0||b.canvasHeight<=0)throw new Error("GridRenderer.prepare: canvas dimensions must be positive.");if(y===0&&R===0){g=0;return}const x=de(b,y,R),F=x.byteLength,S=Math.max(4,F);if(!a||a.size<S){if(a)try{a.destroy()}catch{}a=t.createBuffer({label:"gridRenderer/vertexBuffer",size:S,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}t.queue.writeBuffer(a,0,x.buffer,0,x.byteLength),g=(y+R)*2;const E=be();z(t,i,E);const m=I(U)??me,c=new ArrayBuffer(4*4);new Float32Array(c).set([m[0],m[1],m[2],m[3]]),z(t,s,c)},render:b=>{u(),!(g===0||!a)&&(b.setPipeline(f),b.setBindGroup(0,h),b.setVertexBuffer(0,a),b.draw(g))},dispose:()=>{if(!r){r=!0;try{i.destroy()}catch{}try{s.destroy()}catch{}if(a)try{a.destroy()}catch{}a=null,g=0}}}}const D=(t,e)=>{if(!Number.isFinite(e))throw new Error(`${t} must be a finite number. Received: ${String(e)}`)};function ye(){let t=0,e=1,r=0,n=1;const o={domain(i,s){return D("domain min",i),D("domain max",s),t=i,e=s,o},range(i,s){return D("range min",i),D("range max",s),r=i,n=s,o},scale(i){if(!Number.isFinite(i))return Number.NaN;if(t===e)return(r+n)/2;const s=(i-t)/(e-t);return r+s*(n-r)},invert(i){if(!Number.isFinite(i))return Number.NaN;if(t===e)return t;if(r===n)return(t+e)/2;const s=(i-r)/(n-r);return t+s*(e-t)}};return o}export{ye as a,ge as b,he as c,_ as d,X as e,pe as f,I as p,z as w};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./GPUContext-CgqhC6W6.js";import{C as h}from"./ChartGPU-zgkjfPqp.js";import"./createDataZoomSlider-DLbAKjVh.js";import"./scales-D-5MHN10.js";import"./pie-c06rKDKR.js";const x=t=>{const n=document.getElementById("error");n&&(n.textContent=t,n.style.display="block")},b=t=>{let n=t|0;return()=>{n|=0,n=n+1831565813|0;let e=Math.imul(n^n>>>15,1|n);return e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296}},f=(t,n,e)=>{const a=Math.max(0,Math.floor(t)),i=b(n),s=new Array(a),d=e.xMax-e.xMin,u=e.yMax-e.yMin,l=e.sizeMin??1,c=(e.sizeMax??8)-l;for(let o=0;o<a;o++){const r=e.xMin+i()*d,y=e.yMin+i()*u;if(e.includeSize){const z=l+i()*c;s[o]=[r,y,z]}else s[o]=[r,y]}return s.sort((o,r)=>o[0]-r[0]),s};async function M(){const t=document.getElementById("chart");if(!t)throw new Error("Chart container not found");const n=0,e=100,a=0,i=100,s=f(4500,1,{xMin:n,xMax:e,yMin:a,yMax:i}),d=f(4500,2,{xMin:n,xMax:e,yMin:a,yMax:i,includeSize:!0,sizeMin:1.25,sizeMax:7.5}),u=f(1e3,3,{xMin:n,xMax:e,yMin:a,yMax:i}),l={grid:{left:70,right:24,top:24,bottom:56},xAxis:{type:"value",min:n,max:e,name:"X"},yAxis:{type:"value",min:a,max:i,name:"Y"},palette:["#4a9eff","#ff4ab0","#40d17c"],animation:{duration:900,easing:"cubicOut",delay:0},series:[{type:"scatter",name:"fixed symbolSize (3)",data:s,symbolSize:3,color:"#4a9eff"},{type:"scatter",name:"per-point size ([x,y,size])",data:d,symbolSize:2,color:"#ff4ab0"},{type:"scatter",name:"symbolSize function",data:u,symbolSize:([r])=>1.5+4*Math.abs(Math.sin(r*.12)),color:"#40d17c"}]},m=await h.create(t,l);let c=!1;const o=new ResizeObserver(()=>{c||(c=!0,requestAnimationFrame(()=>{c=!1,m.resize()}))});o.observe(t),m.resize(),window.addEventListener("beforeunload",()=>{o.disconnect(),m.dispose()})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{M().catch(t=>{console.error(t),x(t instanceof Error?t.message:String(t))})}):M().catch(t=>{console.error(t),x(t instanceof Error?t.message:String(t))});
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import type { TooltipParams } from '../config/types';
|
|
2
|
+
/**
|
|
3
|
+
* Default tooltip formatter for candlestick series in item mode.
|
|
4
|
+
* Renders O/H/L/C values with colored arrow and percentage change.
|
|
5
|
+
*/
|
|
6
|
+
export declare function formatCandlestickTooltip(params: TooltipParams): string;
|
|
2
7
|
/**
|
|
3
8
|
* Default tooltip formatter for item mode.
|
|
4
9
|
* Returns a compact single-row HTML snippet: dot + series name + y value.
|
|
10
|
+
* For candlestick series, returns O/H/L/C with arrow and percentage change.
|
|
5
11
|
*/
|
|
6
12
|
export declare function formatTooltipItem(params: TooltipParams): string;
|
|
7
13
|
/**
|
|
8
14
|
* Default tooltip formatter for axis mode.
|
|
9
15
|
* Renders an x header line then one row per series with the y value.
|
|
16
|
+
* Candlestick series show O/H/L/C values with arrow and percentage change.
|
|
10
17
|
*/
|
|
11
18
|
export declare function formatTooltipAxis(params: TooltipParams[]): string;
|
|
12
19
|
//# sourceMappingURL=formatTooltip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatTooltip.d.ts","sourceRoot":"","sources":["../../src/components/formatTooltip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"formatTooltip.d.ts","sourceRoot":"","sources":["../../src/components/formatTooltip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAqIrD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAK/D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAkBjE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AreaStyleConfig, AxisConfig, ChartGPUOptions, GridConfig, LineStyleConfig, AreaSeriesConfig, BarSeriesConfig, LineSeriesConfig, PieDataItem, PieSeriesConfig, ScatterSeriesConfig, SeriesSampling } from './types';
|
|
1
|
+
import type { AreaStyleConfig, AxisConfig, CandlestickItemStyleConfig, CandlestickSeriesConfig, CandlestickStyle, ChartGPUOptions, GridConfig, LineStyleConfig, AreaSeriesConfig, BarSeriesConfig, LineSeriesConfig, PieDataItem, PieSeriesConfig, ScatterSeriesConfig, SeriesSampling } from './types';
|
|
2
2
|
import type { ThemeConfig } from '../themes/types';
|
|
3
3
|
export type ResolvedGridConfig = Readonly<Required<GridConfig>>;
|
|
4
4
|
export type ResolvedLineStyleConfig = Readonly<Required<Omit<LineStyleConfig, 'color'>> & {
|
|
@@ -80,7 +80,26 @@ export type ResolvedPieSeriesConfig = Readonly<Omit<PieSeriesConfig, 'color' | '
|
|
|
80
80
|
readonly color: string;
|
|
81
81
|
readonly data: ReadonlyArray<ResolvedPieDataItem>;
|
|
82
82
|
}>;
|
|
83
|
-
export type
|
|
83
|
+
export type ResolvedCandlestickItemStyleConfig = Readonly<Required<CandlestickItemStyleConfig>>;
|
|
84
|
+
export type ResolvedCandlestickSeriesConfig = Readonly<Omit<CandlestickSeriesConfig, 'color' | 'style' | 'itemStyle' | 'barWidth' | 'barMinWidth' | 'barMaxWidth' | 'sampling' | 'samplingThreshold' | 'data'> & {
|
|
85
|
+
readonly color: string;
|
|
86
|
+
readonly style: CandlestickStyle;
|
|
87
|
+
readonly itemStyle: ResolvedCandlestickItemStyleConfig;
|
|
88
|
+
readonly barWidth: number | string;
|
|
89
|
+
readonly barMinWidth: number;
|
|
90
|
+
readonly barMaxWidth: number;
|
|
91
|
+
readonly sampling: 'none' | 'ohlc';
|
|
92
|
+
readonly samplingThreshold: number;
|
|
93
|
+
/** Original (unsampled) series data. */
|
|
94
|
+
readonly rawData: Readonly<CandlestickSeriesConfig['data']>;
|
|
95
|
+
readonly data: Readonly<CandlestickSeriesConfig['data']>;
|
|
96
|
+
/**
|
|
97
|
+
* Bounds computed from the original (unsampled) data. Used for axis auto-bounds so sampling
|
|
98
|
+
* cannot clip outliers.
|
|
99
|
+
*/
|
|
100
|
+
readonly rawBounds?: RawBounds;
|
|
101
|
+
}>;
|
|
102
|
+
export type ResolvedSeriesConfig = ResolvedLineSeriesConfig | ResolvedAreaSeriesConfig | ResolvedBarSeriesConfig | ResolvedScatterSeriesConfig | ResolvedPieSeriesConfig | ResolvedCandlestickSeriesConfig;
|
|
84
103
|
export interface ResolvedChartGPUOptions extends Omit<ChartGPUOptions, 'grid' | 'xAxis' | 'yAxis' | 'theme' | 'palette' | 'series'> {
|
|
85
104
|
readonly grid: ResolvedGridConfig;
|
|
86
105
|
readonly xAxis: AxisConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptionResolver.d.ts","sourceRoot":"","sources":["../../src/config/OptionResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,eAAe,EAIf,UAAU,EACV,eAAe,
|
|
1
|
+
{"version":3,"file":"OptionResolver.d.ts","sourceRoot":"","sources":["../../src/config/OptionResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,0BAA0B,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EAIf,UAAU,EACV,eAAe,EAGf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,cAAc,EACf,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAChE,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACtH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEtH,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7F,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAC7C,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,mBAAmB,GAAG,MAAM,CAAC,GAAG;IACxG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC,CACF,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAC7C,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,mBAAmB,GAAG,MAAM,CAAC,GAAG;IAC1F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC,CACF,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAC5C,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,UAAU,GAAG,mBAAmB,GAAG,MAAM,CAAC,GAAG;IAC3E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC,CACF,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAChD,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,UAAU,GAAG,mBAAmB,GAAG,MAAM,CAAC,GAAG;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC,CACF,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEpG,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAC5C,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;CACnD,CACF,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,QAAQ,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC;AAEhG,MAAM,MAAM,+BAA+B,GAAG,QAAQ,CACpD,IAAI,CAAC,uBAAuB,EAAE,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,GAAG,mBAAmB,GAAG,MAAM,CAAC,GAAG;IACxJ,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,kCAAkC,CAAC;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC,CACF,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,wBAAwB,GACxB,uBAAuB,GACvB,2BAA2B,GAC3B,uBAAuB,GACvB,+BAA+B,CAAC;AAEpC,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1F,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;CACtD;AA6ND,wBAAgB,cAAc,CAAC,WAAW,GAAE,eAAoB,GAAG,uBAAuB,CAwOzF;AAED,eAAO,MAAM,cAAc;;CAAuC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CandlestickStyle } from './types';
|
|
1
2
|
export declare const defaultGrid: {
|
|
2
3
|
readonly left: 60;
|
|
3
4
|
readonly right: 20;
|
|
@@ -12,6 +13,21 @@ export declare const defaultLineStyle: {
|
|
|
12
13
|
export declare const defaultAreaStyle: {
|
|
13
14
|
readonly opacity: 0.25;
|
|
14
15
|
};
|
|
16
|
+
export declare const candlestickDefaults: {
|
|
17
|
+
readonly style: CandlestickStyle;
|
|
18
|
+
readonly itemStyle: {
|
|
19
|
+
readonly upColor: "#22c55e";
|
|
20
|
+
readonly downColor: "#ef4444";
|
|
21
|
+
readonly upBorderColor: "#22c55e";
|
|
22
|
+
readonly downBorderColor: "#ef4444";
|
|
23
|
+
readonly borderWidth: 1;
|
|
24
|
+
};
|
|
25
|
+
readonly barWidth: "80%";
|
|
26
|
+
readonly barMinWidth: 1;
|
|
27
|
+
readonly barMaxWidth: 50;
|
|
28
|
+
readonly sampling: "ohlc";
|
|
29
|
+
readonly samplingThreshold: 5000;
|
|
30
|
+
};
|
|
15
31
|
export declare const defaultOptions: {
|
|
16
32
|
readonly grid: {
|
|
17
33
|
readonly left: 60;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,gBAAgB,EAIjB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,WAAW;;;;;CAKiB,CAAC;AAE1C,eAAO,MAAM,cAAc,8GAUjB,CAAC;AAEX,eAAO,MAAM,gBAAgB;;;CAGgC,CAAC;AAE9D,eAAO,MAAM,gBAAgB;;CAEgC,CAAC;AAE9D,eAAO,MAAM,mBAAmB;oBACV,gBAAgB;;;;;;;;;;;;;CAa5B,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;CAY1B,CAAC"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { ThemeConfig } from '../themes/types';
|
|
5
5
|
export type AxisType = 'value' | 'time' | 'category';
|
|
6
|
-
export type SeriesType = 'line' | 'area' | 'bar' | 'scatter' | 'pie';
|
|
6
|
+
export type SeriesType = 'line' | 'area' | 'bar' | 'scatter' | 'pie' | 'candlestick';
|
|
7
7
|
/**
|
|
8
8
|
* A single data point for a series.
|
|
9
9
|
*/
|
|
@@ -13,7 +13,26 @@ export type DataPoint = DataPointTuple | Readonly<{
|
|
|
13
13
|
y: number;
|
|
14
14
|
size?: number;
|
|
15
15
|
}>;
|
|
16
|
-
|
|
16
|
+
/**
|
|
17
|
+
* OHLC (Open-High-Low-Close) data point for candlestick charts.
|
|
18
|
+
* Order matches ECharts convention: [timestamp, open, close, low, high].
|
|
19
|
+
*/
|
|
20
|
+
export type OHLCDataPointTuple = readonly [
|
|
21
|
+
timestamp: number,
|
|
22
|
+
open: number,
|
|
23
|
+
close: number,
|
|
24
|
+
low: number,
|
|
25
|
+
high: number
|
|
26
|
+
];
|
|
27
|
+
export type OHLCDataPointObject = Readonly<{
|
|
28
|
+
timestamp: number;
|
|
29
|
+
open: number;
|
|
30
|
+
close: number;
|
|
31
|
+
low: number;
|
|
32
|
+
high: number;
|
|
33
|
+
}>;
|
|
34
|
+
export type OHLCDataPoint = OHLCDataPointTuple | OHLCDataPointObject;
|
|
35
|
+
export type SeriesSampling = 'none' | 'lttb' | 'average' | 'max' | 'min' | 'ohlc';
|
|
17
36
|
/**
|
|
18
37
|
* Scatter points use the tuple form `[x, y, size?]`.
|
|
19
38
|
*/
|
|
@@ -153,7 +172,28 @@ export interface PieSeriesConfig extends Omit<SeriesConfigBase, 'data' | 'sampli
|
|
|
153
172
|
readonly data: ReadonlyArray<PieDataItem>;
|
|
154
173
|
readonly itemStyle?: PieItemStyleConfig;
|
|
155
174
|
}
|
|
156
|
-
export type
|
|
175
|
+
export type CandlestickStyle = 'classic' | 'hollow';
|
|
176
|
+
export interface CandlestickItemStyleConfig {
|
|
177
|
+
readonly upColor?: string;
|
|
178
|
+
readonly downColor?: string;
|
|
179
|
+
readonly upBorderColor?: string;
|
|
180
|
+
readonly downBorderColor?: string;
|
|
181
|
+
readonly borderWidth?: number;
|
|
182
|
+
}
|
|
183
|
+
export interface CandlestickSeriesConfig extends Omit<SeriesConfigBase, 'data'> {
|
|
184
|
+
readonly type: 'candlestick';
|
|
185
|
+
readonly data: ReadonlyArray<OHLCDataPoint>;
|
|
186
|
+
readonly style?: CandlestickStyle;
|
|
187
|
+
readonly itemStyle?: CandlestickItemStyleConfig;
|
|
188
|
+
readonly barWidth?: number | string;
|
|
189
|
+
readonly barMinWidth?: number;
|
|
190
|
+
readonly barMaxWidth?: number;
|
|
191
|
+
/**
|
|
192
|
+
* Sampling strategy for candlestick data. Only 'none' and 'ohlc' are supported.
|
|
193
|
+
*/
|
|
194
|
+
readonly sampling?: 'none' | 'ohlc';
|
|
195
|
+
}
|
|
196
|
+
export type SeriesConfig = LineSeriesConfig | AreaSeriesConfig | BarSeriesConfig | ScatterSeriesConfig | PieSeriesConfig | CandlestickSeriesConfig;
|
|
157
197
|
/**
|
|
158
198
|
* Parameters passed to tooltip formatter function.
|
|
159
199
|
*/
|
|
@@ -161,7 +201,12 @@ export interface TooltipParams {
|
|
|
161
201
|
readonly seriesName: string;
|
|
162
202
|
readonly seriesIndex: number;
|
|
163
203
|
readonly dataIndex: number;
|
|
164
|
-
|
|
204
|
+
/**
|
|
205
|
+
* Value tuple for the data point.
|
|
206
|
+
* - Cartesian series (line, area, bar, scatter): [x, y]
|
|
207
|
+
* - Candlestick series: [timestamp, open, close, low, high]
|
|
208
|
+
*/
|
|
209
|
+
readonly value: readonly [number, number] | readonly [number, number, number, number, number];
|
|
165
210
|
readonly color: string;
|
|
166
211
|
}
|
|
167
212
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AACrD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ResolvedChartGPUOptions } from '../config/OptionResolver';
|
|
2
|
-
import type { DataPoint } from '../config/types';
|
|
2
|
+
import type { DataPoint, OHLCDataPoint } from '../config/types';
|
|
3
3
|
export interface GPUContextLike {
|
|
4
4
|
readonly device: GPUDevice | null;
|
|
5
5
|
readonly canvas: HTMLCanvasElement | null;
|
|
@@ -15,7 +15,7 @@ export interface RenderCoordinator {
|
|
|
15
15
|
*
|
|
16
16
|
* Appends are coalesced and flushed once per render frame.
|
|
17
17
|
*/
|
|
18
|
-
appendData(seriesIndex: number, newPoints: ReadonlyArray<DataPoint>): void;
|
|
18
|
+
appendData(seriesIndex: number, newPoints: ReadonlyArray<DataPoint> | ReadonlyArray<OHLCDataPoint>): void;
|
|
19
19
|
/**
|
|
20
20
|
* Gets the current “interaction x” in domain units (or `null` when inactive).
|
|
21
21
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRenderCoordinator.d.ts","sourceRoot":"","sources":["../../src/core/createRenderCoordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"createRenderCoordinator.d.ts","sourceRoot":"","sources":["../../src/core/createRenderCoordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,uBAAuB,EAExB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAmB,SAAS,EAAkB,aAAa,EAA4C,MAAM,iBAAiB,CAAC;AA0C3I,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,eAAe,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC3D;;;;;OAKG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IAC1G;;;;;OAKG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1D;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACzF;;OAEG;IACH,YAAY,IAAI,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAChE;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC7F,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CACvC,CAAC,CAAC;AA6hCH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,uBAAuB,EAChC,SAAS,CAAC,EAAE,0BAA0B,GACrC,iBAAiB,CA6wEnB"}
|