@wick-charts/vue 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +18 -3
  2. package/dist/BarSeries.vue.js +26 -20
  3. package/dist/CandlestickSeries.vue.js +30 -24
  4. package/dist/ChartContainer.vue.js +88 -65
  5. package/dist/HeatmapSeries.vue.js +40 -0
  6. package/dist/HeatmapSeries.vue2.js +4 -0
  7. package/dist/LineSeries.vue.js +26 -20
  8. package/dist/PieSeries.vue.js +24 -18
  9. package/dist/core/dist/animation/animator.js +21 -21
  10. package/dist/core/dist/animation/config.js +114 -87
  11. package/dist/core/dist/animation/easing.js +3 -1
  12. package/dist/core/dist/animation/intro-wave.js +68 -0
  13. package/dist/core/dist/axis/dom-labels.js +13 -14
  14. package/dist/core/dist/chart/badge-animator.js +56 -0
  15. package/dist/core/dist/chart/edge-indicators.js +28 -13
  16. package/dist/core/dist/chart/last-value.js +18 -17
  17. package/dist/core/dist/chart/y-target.js +13 -12
  18. package/dist/core/dist/chart.js +908 -626
  19. package/dist/core/dist/components/annotation-chip.js +28 -0
  20. package/dist/core/dist/components/edge-indicator.js +58 -26
  21. package/dist/core/dist/components/loading-indicator.js +46 -0
  22. package/dist/core/dist/components/marker.js +49 -31
  23. package/dist/core/dist/components/reference-line.js +27 -36
  24. package/dist/core/dist/components/time-region.js +30 -28
  25. package/dist/core/dist/data/store.js +38 -19
  26. package/dist/core/dist/data/sync.js +60 -38
  27. package/dist/core/dist/heatmap-tooltip.js +16 -0
  28. package/dist/core/dist/interactions/handler.js +67 -43
  29. package/dist/core/dist/perf/perf-hud.js +2 -2
  30. package/dist/core/dist/scales/x-scale.js +85 -37
  31. package/dist/core/dist/scales/y-scale.js +38 -27
  32. package/dist/core/dist/series/bar-intro.js +18 -0
  33. package/dist/core/dist/series/bar.js +337 -205
  34. package/dist/core/dist/series/base-multi-layer.js +224 -96
  35. package/dist/core/dist/series/candlestick-intro.js +57 -0
  36. package/dist/core/dist/series/candlestick.js +454 -276
  37. package/dist/core/dist/series/heatmap.js +387 -0
  38. package/dist/core/dist/series/line-intro.js +85 -0
  39. package/dist/core/dist/series/line.js +590 -282
  40. package/dist/core/dist/series/painters/builtins.js +2 -2
  41. package/dist/core/dist/series/pie.js +396 -259
  42. package/dist/core/dist/series/register-builtins.js +8 -7
  43. package/dist/core/dist/series/types.js +6 -0
  44. package/dist/core/dist/series/wave-intro.js +26 -0
  45. package/dist/core/dist/theme/create.js +69 -63
  46. package/dist/core/dist/theme/themes/mint-breeze.js +2 -2
  47. package/dist/core/dist/theme/themes/sand-dune.js +2 -2
  48. package/dist/core/dist/utils/color.js +109 -34
  49. package/dist/core/dist/utils/deep-equal.js +18 -0
  50. package/dist/core/dist/utils/time.js +25 -19
  51. package/dist/index.d.ts +1411 -122
  52. package/dist/index.js +177 -130
  53. package/dist/ui/Crosshair.vue.js +20 -21
  54. package/dist/ui/HeatmapTooltip.vue.js +96 -0
  55. package/dist/ui/HeatmapTooltip.vue2.js +4 -0
  56. package/dist/ui/InfoBar.vue.js +46 -47
  57. package/dist/ui/Legend.vue.js +80 -79
  58. package/dist/ui/PieLegend.vue.js +5 -5
  59. package/dist/ui/PieTooltip.vue.js +77 -67
  60. package/dist/ui/Tooltip.vue.js +60 -60
  61. package/dist/ui/YAxis.vue.js +2 -2
  62. package/dist/ui/YLabel.vue.js +94 -61
  63. package/package.json +2 -2
  64. package/src/BarSeries.vue +23 -7
  65. package/src/CandlestickSeries.vue +23 -7
  66. package/src/ChartContainer.vue +134 -12
  67. package/src/HeatmapSeries.vue +69 -0
  68. package/src/LineSeries.vue +23 -7
  69. package/src/PieSeries.vue +22 -6
  70. package/src/index.ts +84 -3
  71. package/src/ui/Crosshair.vue +1 -2
  72. package/src/ui/HeatmapTooltip.vue +144 -0
  73. package/src/ui/InfoBar.vue +1 -2
  74. package/src/ui/Legend.vue +13 -0
  75. package/src/ui/Marker.vue +1 -1
  76. package/src/ui/PieTooltip.vue +10 -0
  77. package/src/ui/ReferenceLine.vue +2 -2
  78. package/src/ui/TimeRegion.vue +2 -2
  79. package/src/ui/Tooltip.vue +2 -2
  80. package/src/ui/YLabel.vue +123 -8
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ import { ShallowRef } from 'vue';
8
8
  declare const __VLS_component: DefineComponent<__VLS_Props_3, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_3> & Readonly<{}>, {
9
9
  theme: ChartTheme;
10
10
  gradient: boolean;
11
+ interactive: boolean;
11
12
  headerLayout: "overlay" | "inline";
12
13
  }, {}, {}, {}, string, ComponentProvideOptions, false, {
13
14
  titleAnchor: HTMLDivElement;
@@ -19,30 +20,30 @@ legendAnchor: HTMLDivElement;
19
20
  navigatorAnchor: HTMLDivElement;
20
21
  }, HTMLDivElement>;
21
22
 
22
- declare const __VLS_component_2: DefineComponent<__VLS_Props_6, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_6> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
23
+ declare const __VLS_component_2: DefineComponent<__VLS_Props_8, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_8> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
23
24
 
24
- declare const __VLS_component_3: DefineComponent<__VLS_Props_7, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_7> & Readonly<{}>, {
25
+ declare const __VLS_component_3: DefineComponent<__VLS_Props_9, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_9> & Readonly<{}>, {
25
26
  position: "bottom" | "right";
26
27
  mode: LegendMode;
27
28
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
28
29
 
29
- declare const __VLS_component_4: DefineComponent<__VLS_Props_11, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_11> & Readonly<{}>, {
30
+ declare const __VLS_component_4: DefineComponent<__VLS_Props_13, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_13> & Readonly<{}>, {
30
31
  position: PieLegendPosition;
31
32
  format: ValueFormatter;
32
33
  mode: PieLegendMode;
33
34
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
34
35
 
35
- declare const __VLS_component_5: DefineComponent<__VLS_Props_12, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_12> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
36
+ declare const __VLS_component_5: DefineComponent<__VLS_Props_14, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_14> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
36
37
  containerRef: HTMLDivElement;
37
38
  }, any>;
38
39
 
39
- declare const __VLS_component_6: DefineComponent<__VLS_Props_16, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_16> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
40
+ declare const __VLS_component_6: DefineComponent<__VLS_Props_18, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_18> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
40
41
 
41
- declare const __VLS_component_7: DefineComponent<__VLS_Props_17, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_17> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
42
+ declare const __VLS_component_7: DefineComponent<__VLS_Props_19, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_19> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
42
43
  containerRef: HTMLDivElement;
43
44
  }, any>;
44
45
 
45
- declare const __VLS_component_8: DefineComponent<__VLS_Props_19, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_19> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
46
+ declare const __VLS_component_8: DefineComponent<__VLS_Props_21, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_21> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
46
47
 
47
48
  declare type __VLS_Props = {
48
49
  /** Flat `TimePoint[]`, `TimePoint[][]`, or named `{ label, color?, data }` layers. Time accepts ms or `Date`. */
@@ -50,9 +51,34 @@ declare type __VLS_Props = {
50
51
  options?: Partial<BarSeriesOptions>;
51
52
  /** Stable series ID — same value across remounts. */
52
53
  id?: string;
54
+ /** Show/hide the series without unmounting it — excludes it from the Y-range fit and tooltip/legend. Default `true`. Live. */
55
+ visible?: boolean;
53
56
  };
54
57
 
55
58
  declare type __VLS_Props_10 = {
59
+ /** X anchor — epoch ms or a `Date`. */
60
+ time: TimeValue;
61
+ /** Y anchor as a data value. Omit and set `seriesId` to snap to that series' value at `time`. */
62
+ value?: number;
63
+ /** Snap Y to this series' value at `time` when `value` is omitted. Also the default color source. */
64
+ seriesId?: string;
65
+ /** Glyph at the anchor. Default: `'dot'`. Arrows point their tip at the anchor. */
66
+ shape?: MarkerShape;
67
+ /** Reuse the line pulse halo around the anchor. Default: `false`. */
68
+ pulse?: boolean;
69
+ /** Optional text label drawn as a callout chip whose tail points at the anchor. */
70
+ label?: string;
71
+ /** Color override. Falls back to the series color (when `seriesId` is set), then the theme line color. */
72
+ color?: string;
73
+ };
74
+
75
+ declare type __VLS_Props_11 = {
76
+ data: NavigatorData;
77
+ /** Strip height in CSS pixels. Defaults to `theme.navigator.height` (60). */
78
+ height?: number;
79
+ };
80
+
81
+ declare type __VLS_Props_12 = {
56
82
  value: number;
57
83
  /**
58
84
  * Value-to-string formatter. Defaults to the current locale's
@@ -64,7 +90,7 @@ declare type __VLS_Props_10 = {
64
90
  spinDuration?: number;
65
91
  };
66
92
 
67
- declare type __VLS_Props_11 = {
93
+ declare type __VLS_Props_13 = {
68
94
  /**
69
95
  * Owning series id. **Optional** — when omitted, the first visible pie
70
96
  * series is picked.
@@ -78,7 +104,7 @@ declare type __VLS_Props_11 = {
78
104
  position?: PieLegendPosition;
79
105
  };
80
106
 
81
- declare type __VLS_Props_12 = {
107
+ declare type __VLS_Props_14 = {
82
108
  /**
83
109
  * Owning series id. **Optional** — when omitted, the first visible pie
84
110
  * series is picked.
@@ -88,14 +114,14 @@ declare type __VLS_Props_12 = {
88
114
  format?: ValueFormatter;
89
115
  };
90
116
 
91
- declare type __VLS_Props_13 = {
117
+ declare type __VLS_Props_15 = {
92
118
  /** Horizontal line at this Y data value. Mutually exclusive with `time`. */
93
119
  value?: number;
94
120
  /** Vertical line at this `time` (epoch ms or `Date`). Mutually exclusive with `value`. */
95
121
  time?: TimeValue;
96
- /** Line and label-pill color. Default: the theme line color. */
122
+ /** Line and label-chip accent color. Default: the theme line color. */
97
123
  color?: string;
98
- /** Optional text label drawn in a pill at the line's near end. */
124
+ /** Optional text label drawn in an annotation chip at the line's near end. */
99
125
  label?: string;
100
126
  /** Dash style. Default: `'dashed'`. */
101
127
  style?: ReferenceLineStyle;
@@ -103,27 +129,27 @@ declare type __VLS_Props_13 = {
103
129
  width?: number;
104
130
  };
105
131
 
106
- declare type __VLS_Props_14 = {
132
+ declare type __VLS_Props_16 = {
107
133
  /** Desired number of labels (≥ 2). Overrides chart-level `axis.x.labelCount`. */
108
134
  labelCount?: number;
109
135
  /** Minimum pixel gap between adjacent labels (hard floor). Overrides chart-level. */
110
136
  minLabelSpacing?: number;
111
137
  };
112
138
 
113
- declare type __VLS_Props_15 = {
139
+ declare type __VLS_Props_17 = {
114
140
  /** Left edge — epoch ms or a `Date`. */
115
141
  from: TimeValue;
116
142
  /** Right edge — epoch ms or a `Date`. Omit (or pass `'now'`) for an open-ended band to the right edge. */
117
143
  to?: TimeRegionEnd;
118
144
  /** Band fill — any CSS color, typically translucent. Default: a faint tint of `color`. */
119
145
  fill?: string;
120
- /** Optional text label drawn in a pill at the top of the band. */
146
+ /** Optional text label drawn in an annotation chip at the top of the band. */
121
147
  label?: string;
122
- /** Edge-line and label-pill accent. Default: the theme's muted axis text color. */
148
+ /** Edge-line and label-chip accent. Default: the theme's muted axis text color. */
123
149
  color?: string;
124
150
  };
125
151
 
126
- declare type __VLS_Props_16 = {
152
+ declare type __VLS_Props_18 = {
127
153
  /**
128
154
  * @deprecated Use the named `sub` slot instead — it accepts arbitrary
129
155
  * inline markup (icons, badges, formatted text) to mirror React's
@@ -137,12 +163,22 @@ declare type __VLS_Props_16 = {
137
163
  sub?: string;
138
164
  };
139
165
 
140
- declare type __VLS_Props_17 = {
166
+ declare type __VLS_Props_19 = {
141
167
  sort?: SnapshotSort;
142
168
  format?: TooltipFormatter;
143
169
  };
144
170
 
145
- declare type __VLS_Props_18 = {
171
+ declare type __VLS_Props_2 = {
172
+ /** Flat `OHLCInput[]`, or `{ label, data }` to name the stream. */
173
+ data: CandlestickData;
174
+ options?: Partial<CandlestickSeriesOptions>;
175
+ /** Stable series ID — same value across remounts. */
176
+ id?: string;
177
+ /** Show/hide the series without unmounting it — excludes it from the Y-range fit and tooltip/legend. Default `true`. Live. */
178
+ visible?: boolean;
179
+ };
180
+
181
+ declare type __VLS_Props_20 = {
146
182
  /** Custom tick-label formatter. Overrides the built-in range-adaptive default. */
147
183
  format?: ValueFormatter;
148
184
  /**
@@ -154,7 +190,7 @@ declare type __VLS_Props_18 = {
154
190
  minLabelSpacing?: number;
155
191
  };
156
192
 
157
- declare type __VLS_Props_19 = {
193
+ declare type __VLS_Props_21 = {
158
194
  /**
159
195
  * Owning series id. **Optional** — when omitted, the first visible
160
196
  * single-layer time series is picked, falling back to the first visible
@@ -164,18 +200,17 @@ declare type __VLS_Props_19 = {
164
200
  color?: string;
165
201
  /** Custom formatter; routed through NumberFlow's `formatter` so the digit animation still plays. */
166
202
  format?: ValueFormatter;
167
- };
168
-
169
- declare type __VLS_Props_2 = {
170
- /** Flat `OHLCInput[]`, or `{ label, data }` to name the stream. */
171
- data: CandlestickData;
172
- options?: Partial<CandlestickSeriesOptions>;
173
- /** Stable series ID — same value across remounts. */
174
- id?: string;
203
+ /**
204
+ * Badge motion. `true` (default) glides + counts up + fades in with the
205
+ * intro; `false` snaps with no easing; an object tunes individual parts.
206
+ */
207
+ animate?: YLabelAnimate;
175
208
  };
176
209
 
177
210
  declare type __VLS_Props_3 = {
211
+ /** Visual theme. Live — changing this at runtime updates all themed elements. */
178
212
  theme?: ChartTheme;
213
+ /** Grouped axis configuration (Y/X visibility, bounds, sizing). Live. */
179
214
  axis?: AxisConfig;
180
215
  /**
181
216
  * Viewport padding. `top`/`bottom` are in pixels. `left`/`right` accept either pixels (`50`)
@@ -215,16 +250,33 @@ declare type __VLS_Props_3 = {
215
250
  */
216
251
  initialRange?: VisibleRangeSpec;
217
252
  };
218
- /** Show the chart background gradient. Defaults to true. */
253
+ /**
254
+ * Controlled visible range. Same shape as the imperative
255
+ * `chart.setVisibleRange` — a bar count, an explicit `{from, to}` window,
256
+ * or `{from, bars}`. Every reference/value change applies via
257
+ * `chart.setVisibleRange`, so pair it with `onVisibleRangeChange` for a
258
+ * two-way binding; a same-value literal (compared structurally) is a
259
+ * no-op, so an inline object doesn't re-apply on every render.
260
+ *
261
+ * For a one-shot initial window that isn't re-applied on every prop
262
+ * change, use `viewport.initialRange` instead.
263
+ */
264
+ visibleRange?: VisibleRangeSpec;
265
+ /** Show the chart background gradient. Live. Defaults to true. */
219
266
  gradient?: boolean;
220
- /** Enable zoom, pan, and crosshair interactions. Defaults to true. */
267
+ /**
268
+ * Enable zoom, pan, and crosshair interactions. Defaults to true.
269
+ *
270
+ * Mount-only — core has no `setInteractive`, so changing this prop after
271
+ * mount is ignored.
272
+ */
221
273
  interactive?: boolean;
222
- /** Background grid configuration. Default: `{ visible: true }`. */
274
+ /** Background grid configuration. Live. Default: `{ visible: true }`. */
223
275
  grid?: {
224
276
  visible: boolean;
225
277
  };
226
278
  /**
227
- * How `<Title>` and `<InfoBar>` are positioned relative to the canvas.
279
+ * How `<Title>` and `<InfoBar>` are positioned relative to the canvas. Live.
228
280
  * - `'overlay'` (default): absolute overlays on top of the canvas.
229
281
  * - `'inline'`: flex siblings above the canvas — the canvas (and grid) shift down.
230
282
  */
@@ -235,10 +287,10 @@ declare type __VLS_Props_3 = {
235
287
  * `<CandlestickSeries>` / `<BarSeries>` override these chart-level
236
288
  * defaults unless the category here is explicitly `false`.
237
289
  *
238
- * **Init-only by reference identity.** A new `animations` reference
239
- * recreates the underlying `ChartInstance`. Hoist the object outside
240
- * the render scope — an inline literal tears the chart down on every
241
- * re-render.
290
+ * **Init-only, but diffed by value, not reference.** A same-value
291
+ * inline object literal is a no-op — only a genuine change to the
292
+ * resolved config recreates the underlying `ChartInstance`, since the
293
+ * animation engine doesn't support live reconfiguration yet.
242
294
  */
243
295
  animations?: boolean | AnimationsConfig;
244
296
  /**
@@ -253,56 +305,94 @@ declare type __VLS_Props_3 = {
253
305
  * the prop identity later is ignored.
254
306
  */
255
307
  onEdgeReached?: (info: EdgeReachedInfo) => void;
308
+ /**
309
+ * Fired on a click (or tap) on the chart canvas that isn't the tail end
310
+ * of a pan drag. `info.spatialHit` resolves a pie/heatmap/custom-spatial
311
+ * series directly under the pointer; for a time-series series, resolve
312
+ * the point yourself from `info.time` (`chart.getDataAtTime` /
313
+ * `buildHoverSnapshots`). Live — the latest callback is always used.
314
+ */
315
+ onPointClick?: (info: PointClickInfo) => void;
316
+ /**
317
+ * Fired on a double-click on the chart canvas. The chart also responds
318
+ * by calling `fitContent()`. Live — the latest callback is always used.
319
+ */
320
+ onPointDoubleClick?: (info: PointClickInfo) => void;
321
+ /**
322
+ * Fired when the spatially-hovered series/index changes (pie, heatmap,
323
+ * or a custom spatial kind) — `null` when the pointer leaves every hit
324
+ * area. Live — the latest callback is always used.
325
+ */
326
+ onSeriesHover?: (hit: SeriesHoverInfo | null) => void;
327
+ /**
328
+ * Fired once the underlying `ChartInstance` is constructed — on mount,
329
+ * and again if the chart is ever rebuilt (a genuine `animations` value
330
+ * change). Live — the latest callback is always used for the next rebuild.
331
+ */
332
+ onReady?: (chart: ChartInstance) => void;
333
+ /**
334
+ * Fired whenever the committed visible range changes — pan, zoom,
335
+ * `fitContent()`, a data update that shifts the tail-scroll window, or a
336
+ * `visibleRange` prop change. Live — the latest callback is always used.
337
+ */
338
+ onVisibleRangeChange?: (range: VisibleRange) => void;
339
+ /**
340
+ * Fired on every crosshair move, with `null` when the pointer leaves the
341
+ * chart. Live — the latest callback is always used.
342
+ */
343
+ onCrosshairMove?: (position: CrosshairPosition | null) => void;
256
344
  };
257
345
 
258
346
  declare type __VLS_Props_4 = {
347
+ data: HeatmapCellData[];
348
+ options?: Partial<HeatmapSeriesOptions>;
349
+ /** Stable series ID — same value across remounts. */
350
+ id?: string;
351
+ /** Show/hide the series without unmounting it — excludes it from the Y-range fit and tooltip/legend. Default `true`. Live. */
352
+ visible?: boolean;
353
+ };
354
+
355
+ declare type __VLS_Props_5 = {
259
356
  /** Flat `TimePoint[]`, `TimePoint[][]`, or named `{ label, color?, data }` layers. Time accepts ms or `Date`. */
260
357
  data: MultiLayerData;
261
358
  options?: Partial<LineSeriesOptions>;
262
359
  /** Stable series ID — same value across remounts. */
263
360
  id?: string;
361
+ /** Show/hide the series without unmounting it — excludes it from the Y-range fit and tooltip/legend. Default `true`. Live. */
362
+ visible?: boolean;
264
363
  };
265
364
 
266
- declare type __VLS_Props_5 = {
365
+ declare type __VLS_Props_6 = {
267
366
  data: PieSliceData[];
268
367
  options?: Partial<PieSeriesOptions>;
269
368
  /** Stable series ID — same value across remounts. */
270
369
  id?: string;
370
+ /** Show/hide the series without unmounting it — excludes it from the Y-range fit and tooltip/legend. Default `true`. Live. */
371
+ visible?: boolean;
271
372
  };
272
373
 
273
- declare type __VLS_Props_6 = {
374
+ declare type __VLS_Props_7 = {
375
+ /**
376
+ * Owning series id. **Optional** — when omitted, the first visible heatmap
377
+ * series is picked.
378
+ */
379
+ seriesId?: string;
380
+ /** Custom formatter for the cell value. Default: plain integers, compact decimals. */
381
+ format?: ValueFormatter;
382
+ };
383
+
384
+ declare type __VLS_Props_8 = {
274
385
  sort?: SnapshotSort;
275
386
  format?: TooltipFormatter;
276
387
  };
277
388
 
278
- declare type __VLS_Props_7 = {
389
+ declare type __VLS_Props_9 = {
279
390
  items?: LegendItemOverride[];
280
391
  position?: 'bottom' | 'right';
281
392
  /** `'isolate'` shows only the clicked item; `'solo'` is a @deprecated alias. */
282
393
  mode?: LegendMode;
283
- };
284
-
285
- declare type __VLS_Props_8 = {
286
- /** X anchor — epoch ms or a `Date`. */
287
- time: TimeValue;
288
- /** Y anchor as a data value. Omit and set `seriesId` to snap to that series' value at `time`. */
289
- value?: number;
290
- /** Snap Y to this series' value at `time` when `value` is omitted. Also the default color source. */
291
- seriesId?: string;
292
- /** Glyph at the anchor. Default: `'dot'`. Arrows point their tip at the anchor. */
293
- shape?: MarkerShape;
294
- /** Reuse the line pulse halo around the anchor. Default: `false`. */
295
- pulse?: boolean;
296
- /** Optional text label drawn in a pill next to the anchor. */
297
- label?: string;
298
- /** Color override. Falls back to the series color (when `seriesId` is set), then the theme line color. */
299
- color?: string;
300
- };
301
-
302
- declare type __VLS_Props_9 = {
303
- data: NavigatorData;
304
- /** Strip height in CSS pixels. Defaults to `theme.navigator.height` (60). */
305
- height?: number;
394
+ /** Fired after a click changes series visibility — via the built-in UI or a custom slot calling `item.toggle()`/`isolate()` directly. */
395
+ onToggle?: (info: LegendToggleInfo) => void;
306
396
  };
307
397
 
308
398
  declare function __VLS_template(): {
@@ -452,6 +542,7 @@ declare function __VLS_template_8(): {
452
542
  isLive: boolean;
453
543
  direction: YLabelDirection;
454
544
  format: ValueFormatter;
545
+ opacity: number;
455
546
  }): unknown;
456
547
  }> & {
457
548
  default?(ctx: {
@@ -461,6 +552,7 @@ declare function __VLS_template_8(): {
461
552
  isLive: boolean;
462
553
  direction: YLabelDirection;
463
554
  format: ValueFormatter;
555
+ opacity: number;
464
556
  }): unknown;
465
557
  };
466
558
  refs: {};
@@ -542,7 +634,7 @@ export declare const andromeda: ThemePreset;
542
634
  * - `axis.ticks` — axis tick label cross-fade.
543
635
  * - `toggle` — series visibility (alpha fade + Y re-fit, locked to one
544
636
  * duration so they finish on the same frame).
545
- * - `series.{line,candlestick,bar,pie}` — per-series-type data tweens.
637
+ * - `series.{line,candlestick,bar,pie,heatmap}` — per-series-type data tweens.
546
638
  *
547
639
  * Top-level `false` disables every animation category. `axis: false`
548
640
  * disables both axes and ticks. `axis.y: false` / `axis.x: false` disables
@@ -555,7 +647,7 @@ export declare const andromeda: ThemePreset;
555
647
  * own override; an explicit `series.<type>: false` (or top-level `false`)
556
648
  * is a hard disable that overrides per-series.
557
649
  */
558
- declare interface AnimationsConfig {
650
+ export declare interface AnimationsConfig {
559
651
  /**
560
652
  * Axis-level animation. `false` collapses both axes and ticks to instant.
561
653
  */
@@ -664,6 +756,15 @@ declare interface AnimationsConfig {
664
756
  * @default {@link DEFAULT_LINE_ENTRY}
665
757
  */
666
758
  entry?: AnimationTime;
759
+ /**
760
+ * Initial-load reveal — the line draws itself left-to-right
761
+ * on the first data seed, with a glowing head riding the
762
+ * reveal front. The value is the per-element wave duration;
763
+ * the full sweep lasts ~2×. `false` / `0` disables the intro.
764
+ *
765
+ * @default {@link DEFAULT_LINE_INTRO}
766
+ */
767
+ intro?: AnimationTime;
667
768
  /**
668
769
  * Last-value chase duration on `updateLastPoint`. `false` /
669
770
  * `0` snaps to the target instantly.
@@ -691,6 +792,15 @@ declare interface AnimationsConfig {
691
792
  * @default {@link DEFAULT_CANDLESTICK_ENTRY}
692
793
  */
693
794
  entry?: AnimationTime;
795
+ /**
796
+ * Initial-load reveal — candles unfold in a left-to-right
797
+ * wave on the first data seed. The value is the per-candle
798
+ * wave duration; the full wave lasts ~2×. `false` / `0`
799
+ * disables the intro.
800
+ *
801
+ * @default {@link DEFAULT_CANDLESTICK_INTRO}
802
+ */
803
+ intro?: AnimationTime;
694
804
  /**
695
805
  * Live OHLC chase duration on `updateLastPoint`. `false` / `0`
696
806
  * snaps to the target instantly.
@@ -710,6 +820,15 @@ declare interface AnimationsConfig {
710
820
  * @default {@link DEFAULT_BAR_ENTRY}
711
821
  */
712
822
  entry?: AnimationTime;
823
+ /**
824
+ * Initial-load reveal — bars grow from the baseline in a
825
+ * left-to-right wave on the first data seed. The value is the
826
+ * per-bar wave duration; the full wave lasts ~2×. `false` /
827
+ * `0` disables the intro.
828
+ *
829
+ * @default {@link DEFAULT_BAR_INTRO}
830
+ */
831
+ intro?: AnimationTime;
713
832
  /**
714
833
  * Live value chase duration on `updateLastPoint`. `false` /
715
834
  * `0` snaps to the target instantly.
@@ -719,13 +838,15 @@ declare interface AnimationsConfig {
719
838
  smooth?: AnimationTime;
720
839
  };
721
840
  /**
722
- * Pie segment entry/update tweens. Parsed at config-time; the actual
723
- * wiring lands in a later phase — providing a value here today is a
724
- * no-op but the shape is stable.
841
+ * Pie segment entry/update tweens. `false` disables the slice
842
+ * entry sweep (`update` is still parse-only; wiring lands in a
843
+ * later phase).
725
844
  */
726
845
  pie?: false | {
727
846
  /**
728
- * Slice grow-in duration on first paint.
847
+ * Initial-load reveal — slices unfurl clockwise over this
848
+ * total duration on the first data seed, then the outside
849
+ * labels chain in. `false` / `0` disables the intro.
729
850
  *
730
851
  * @default {@link DEFAULT_PIE_ENTRY}
731
852
  */
@@ -737,6 +858,25 @@ declare interface AnimationsConfig {
737
858
  */
738
859
  update?: AnimationTime;
739
860
  };
861
+ /**
862
+ * Heatmap tweens. `false` disables the entrance wave, value tween,
863
+ * and hover lift.
864
+ */
865
+ heatmap?: false | {
866
+ /**
867
+ * Per-cell entrance duration — the diagonal reveal wave on
868
+ * first paint / grid-shape change.
869
+ *
870
+ * @default {@link DEFAULT_HEATMAP_ENTRY}
871
+ */
872
+ entry?: AnimationTime;
873
+ /**
874
+ * In-place value/color tween and hover-lift ease.
875
+ *
876
+ * @default {@link DEFAULT_HEATMAP_UPDATE}
877
+ */
878
+ update?: AnimationTime;
879
+ };
740
880
  };
741
881
  }
742
882
 
@@ -757,7 +897,7 @@ declare interface AnimationState {
757
897
  * - `string` in `<n>ms` or `<n>s` form (`"250ms"`, `"1s"`, `"2.5s"`)
758
898
  * - `false` — disable (equivalent to `0`)
759
899
  */
760
- declare type AnimationTime = Milliseconds | string | false;
900
+ export declare type AnimationTime = Milliseconds | string | false;
761
901
 
762
902
  /**
763
903
  * Build a 2-stop candle-body gradient around a single hex color — a lightened
@@ -853,6 +993,21 @@ declare interface AxisTickTrackerOptions {
853
993
 
854
994
  export declare const ayuMirage: ThemePreset;
855
995
 
996
+ /**
997
+ * History back-fill: the reveal front sweeps from the data boundary into
998
+ * the prepended span. Meant for the `historyReveal` option, whose localized
999
+ * frame interprets clip coordinates in reveal space — `x = 0` at the
1000
+ * boundary, increasing toward the older end, `width` = the prepended span's
1001
+ * bitmap width — so the line reads as plotting itself backwards. The
1002
+ * default `historyReveal` for the line series.
1003
+ */
1004
+ export declare function backfillSweepIntro(): LineIntroFn;
1005
+
1006
+ /** Declarative per-bar transform — translation and opacity only; growth is
1007
+ * expressed through {@link BarIntroDirectives.value} instead so stacked
1008
+ * columns rise as one attached unit. */
1009
+ export declare type BarElementTransform = WaveIntroTransform;
1010
+
856
1011
  /**
857
1012
  * Entrance animation styles for bars.
858
1013
  * - `'none'` — no animation.
@@ -861,7 +1016,7 @@ export declare const ayuMirage: ThemePreset;
861
1016
  * - `'slide'` — translates in from the right with a fade.
862
1017
  * - `'fade-grow'` *(default)* — fade + grow combined.
863
1018
  */
864
- declare type BarEntryAnimation = 'none' | 'fade' | 'grow' | 'slide' | 'fade-grow';
1019
+ export declare type BarEntryAnimation = 'none' | 'fade' | 'grow' | 'slide' | 'fade-grow';
865
1020
 
866
1021
  /** Post-transform bitmap rectangle a bar painter fills. */
867
1022
  declare interface BarGeometry {
@@ -873,6 +1028,57 @@ declare interface BarGeometry {
873
1028
  baselineY: number;
874
1029
  }
875
1030
 
1031
+ /** What one intro frame should look like. */
1032
+ export declare interface BarIntroDirectives {
1033
+ /** Horizontal clip window in bitmap px applied to the whole pass.
1034
+ * Omitted sides default to the pane edges. */
1035
+ clip?: {
1036
+ fromX?: number;
1037
+ toX?: number;
1038
+ };
1039
+ /** Per-value transform applied before geometry and stacking. Scaling the
1040
+ * value grows the bar from the baseline on every render path. */
1041
+ value?: (args: BarIntroValueArgs) => number;
1042
+ /** Per-bar transform applied after the geometry is resolved. */
1043
+ element?: (el: BarIntroElement) => BarElementTransform;
1044
+ }
1045
+
1046
+ /** Arguments handed to {@link BarIntroDirectives.element} per drawn bar. */
1047
+ export declare interface BarIntroElement extends WaveIntroElement {
1048
+ /** Settled left edge in bitmap px. */
1049
+ x: number;
1050
+ /** Settled top edge in bitmap px. */
1051
+ topY: number;
1052
+ /** Settled bar height in bitmap px. */
1053
+ barHeight: number;
1054
+ /** Y the bar grows from — the zero line, or the segment's own base for
1055
+ * stacked bars. */
1056
+ baselineY: number;
1057
+ /** Bar body width in bitmap px. */
1058
+ barWidth: number;
1059
+ }
1060
+
1061
+ /** One frame of bar intro choreography. */
1062
+ export declare type BarIntroFn = (frame: BarIntroFrame) => BarIntroDirectives;
1063
+
1064
+ /** Read view of one bar intro frame. */
1065
+ export declare interface BarIntroFrame extends WaveIntroFrame {
1066
+ /** Time → bitmap X through the live time scale. */
1067
+ timeToX(time: number): number;
1068
+ }
1069
+
1070
+ /** Arguments handed to {@link BarIntroDirectives.value} for every rendered value. */
1071
+ export declare interface BarIntroValueArgs {
1072
+ layerIndex: number;
1073
+ time: number;
1074
+ /** The value the renderer would draw without the intro (live smoothing included). */
1075
+ value: number;
1076
+ /** Normalized x-position across the visible window, clamped to `[0, 1]`. */
1077
+ position: number;
1078
+ /** Eased wave progress for this value, staggered left → right. */
1079
+ progress: number;
1080
+ }
1081
+
876
1082
  /** Arguments handed to a {@link BarPainter} once per bar / stacked segment. */
877
1083
  export declare interface BarPaintArgs {
878
1084
  geom: BarGeometry;
@@ -898,7 +1104,9 @@ export declare interface BarPaintArgs {
898
1104
  /** Paints one bar / stacked segment. Owns its fill — it calls `ctx.fill()`. */
899
1105
  export declare type BarPainter = (env: PaintEnv, args: BarPaintArgs) => void;
900
1106
 
901
- export declare const BarSeries: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
1107
+ export declare const BarSeries: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
1108
+ visible: boolean;
1109
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
902
1110
 
903
1111
  /** Series definition for `chart.addSeries` — keeps the chart renderer-agnostic
904
1112
  * so hosts that never render bars don't bundle this module. */
@@ -938,6 +1146,63 @@ export declare interface BarSeriesOptions {
938
1146
  * @see BarSeriesOptions.entryAnimation
939
1147
  */
940
1148
  entryMs?: number | false;
1149
+ /**
1150
+ * Initial-load intro animation — a `BarIntroFn`, usually one of the
1151
+ * shipped factories: `growIntro()` (the default), `springIntro()`,
1152
+ * `riseIntro()`, `fadeIntro()`, `wipeIntro()`. Independent of
1153
+ * `entryAnimation` — the intro plays once on the first data seed,
1154
+ * streaming entrances keep their own style.
1155
+ *
1156
+ * @see introMs — cross-linked duration for this animation.
1157
+ */
1158
+ introAnimation?: BarIntroFn;
1159
+ /**
1160
+ * Initial-load reveal duration in milliseconds. On the first data seed
1161
+ * (empty → non-empty) bars reveal in a left-to-right wave: each bar
1162
+ * tweens for `introMs`, starts staggered across another `introMs`, so
1163
+ * the full wave lasts ~2×. The visual style is picked by
1164
+ * `introAnimation`. Default: `500`.
1165
+ *
1166
+ * ```
1167
+ * // Per-series override:
1168
+ * <BarSeries options={{ introMs: 800 }} data={data} />
1169
+ *
1170
+ * // Chart-level default:
1171
+ * <ChartContainer animations={{ series: { bar: { intro: 800 } } }}>
1172
+ * <BarSeries data={data} />
1173
+ * </ChartContainer>
1174
+ * ```
1175
+ *
1176
+ * `false` or `0` disables the intro. Bulk re-seeds of a non-empty series
1177
+ * never replay it. Skipped entirely under `prefers-reduced-motion`.
1178
+ */
1179
+ introMs?: number | false;
1180
+ /**
1181
+ * History-prepend reveal — plays when older points land at the front of
1182
+ * the series (the `EdgeLoader` load-more-on-scroll path). A wave sweeps
1183
+ * from the data boundary into the new history; each bar's stagger
1184
+ * position is `0` at the boundary and `1` at the deepest new point, so
1185
+ * intro factories that read `el.progress` (`fadeIntro()` — the default,
1186
+ * `riseIntro()`, `growIntro()`, `springIntro()`) work here unchanged.
1187
+ * Clip directives are interpreted in reveal space: `x = 0` at the
1188
+ * boundary, increasing toward the older end.
1189
+ *
1190
+ * The fn receives a localized frame: `range` is the prepended time span
1191
+ * (not the visible window) and `width` is that span's bitmap width.
1192
+ *
1193
+ * `'none'` disables the reveal — prepended points appear instantly.
1194
+ *
1195
+ * @see historyRevealMs — cross-linked duration for this animation.
1196
+ */
1197
+ historyReveal?: BarIntroFn | 'none';
1198
+ /**
1199
+ * History-prepend reveal duration in milliseconds — the per-bar wave
1200
+ * duration; the full reveal lasts ~2×. Default: `400`. `false` or `0`
1201
+ * disables the reveal. Skipped entirely under `prefers-reduced-motion`.
1202
+ *
1203
+ * @see BarSeriesOptions.historyReveal
1204
+ */
1205
+ historyRevealMs?: number | false;
941
1206
  /**
942
1207
  * How long the displayed bar value takes to catch up to the actual one
943
1208
  * on every `updateLastPoint`. Default: `250` ms.
@@ -995,10 +1260,11 @@ export declare interface BarSeriesOptions {
995
1260
  * Multi-layer renderers (Line, Bar) override them against each internal store.
996
1261
  *
997
1262
  * Time-series data queries are NOT here — they live on {@link TimeSeriesRenderer}
998
- * as required methods, so Chart narrows via `kind !== 'pie'` and calls them
999
- * directly (no optional chaining).
1263
+ * as required methods, so Chart narrows via {@link isTimeSeriesRenderer} and
1264
+ * calls them directly (no optional chaining). Never narrow by comparing `kind`
1265
+ * against a single spatial value — new spatial kinds slip through such guards.
1000
1266
  */
1001
- declare interface BaseSeriesRenderer {
1267
+ export declare interface BaseSeriesRenderer {
1002
1268
  /** Paint the series on the main layer. */
1003
1269
  render(ctx: SeriesRenderContext): void;
1004
1270
  /**
@@ -1008,6 +1274,21 @@ declare interface BaseSeriesRenderer {
1008
1274
  setData(data: unknown, layerIndex?: number): void;
1009
1275
  /** Append a single point (real-time tick). Optional — not all renderers support streaming. */
1010
1276
  appendPoint?(point: unknown, layerIndex?: number): void;
1277
+ /**
1278
+ * Insert older points at the front of the series (history prepend / load-more).
1279
+ * The suffix already on screen is untouched, so — unlike {@link setData} — this
1280
+ * does NOT re-arm the intro, clear entrance/chase state, or force a Y snap.
1281
+ * Optional; not all renderers support it.
1282
+ */
1283
+ prependPoints?(points: unknown[], layerIndex?: number): void;
1284
+ /**
1285
+ * Seed the placeholder shapes a loading indicator was showing at the data
1286
+ * boundary, called by the chart right before the matching
1287
+ * {@link prependPoints}. A history reveal that supports morphing (e.g.
1288
+ * `skeletonMorphIntro`) grows the real elements out of these shapes; a
1289
+ * renderer that doesn't implement this simply plays its plain reveal.
1290
+ */
1291
+ setHistoryHandoff?(bars: PlaceholderBar[]): void;
1011
1292
  /** Replace the last point in place (live candle update). Optional. */
1012
1293
  updateLastPoint?(point: unknown, layerIndex?: number): void;
1013
1294
  /**
@@ -1077,6 +1358,14 @@ declare interface BaseSeriesRenderer {
1077
1358
  value: number;
1078
1359
  isLive: boolean;
1079
1360
  } | null;
1361
+ /**
1362
+ * Stacked value at an arbitrary `time` — the cumulative stack top at that
1363
+ * sample, mirroring {@link getStackedLastValue} but anywhere in the window
1364
+ * (used for the YLabel intro count-up start so it shares the stack basis).
1365
+ * Single-layer renderers return the nearest sample's value; `null` when no
1366
+ * layer has a sample near `time`.
1367
+ */
1368
+ getStackedValueAtTime?(time: number, interval: number): number | null;
1080
1369
  /**
1081
1370
  * Per-layer last snapshots, each with its own `time`. Useful for ragged
1082
1371
  * multi-layer series where layers advance independently — last-mode
@@ -1124,6 +1413,13 @@ declare interface BaseSeriesRenderer {
1124
1413
  getLayerAlpha?(index: number): number;
1125
1414
  /** True while the renderer has an active animation (Chart polls per frame). */
1126
1415
  readonly needsAnimation?: boolean;
1416
+ /**
1417
+ * Reveal-front position in `[0, 1]` of the initial-load intro across the
1418
+ * visible window — `1` once settled (or when the renderer has no intro).
1419
+ * Overlays (the Y-label badge, annotations) key their own entrance off this
1420
+ * so they reveal in step with the series draw. Omitted → treated as `1`.
1421
+ */
1422
+ getIntroFront?(): number;
1127
1423
  /**
1128
1424
  * Optional overlay hook. Chart invokes this during the overlay pass so each
1129
1425
  * renderer can paint type-specific overlays (crosshair dots, pulse dots).
@@ -1146,7 +1442,7 @@ declare interface BaseSeriesRenderer {
1146
1442
  dispose(): void;
1147
1443
  }
1148
1444
 
1149
- declare interface BitmapCoordinateSpace {
1445
+ export declare interface BitmapCoordinateSpace {
1150
1446
  context: CanvasRenderingContext2D;
1151
1447
  bitmapSize: {
1152
1448
  width: number;
@@ -1204,6 +1500,24 @@ export declare interface BuildLastSnapshotsArgs {
1204
1500
  cacheKey: string;
1205
1501
  }
1206
1502
 
1503
+ /** What one element should look like this frame. Every field is optional —
1504
+ * an empty object renders the element settled. */
1505
+ export declare interface CandleElementTransform extends WaveIntroTransform {
1506
+ /** Lerp factor from `anchorY` toward the settled edges: `0` = collapsed
1507
+ * at the anchor, `1` = settled. Applied before the offsets. */
1508
+ unfold?: number;
1509
+ /** Absolute top edge override in bitmap px — replaces the `unfold` math
1510
+ * for this frame (the offsets still apply). Lets a morph start from
1511
+ * arbitrary geometry instead of the anchor. */
1512
+ topY?: number;
1513
+ /** Absolute bottom edge override in bitmap px — see {@link topY}. */
1514
+ bottomY?: number;
1515
+ /** Blend of the element's fill toward the theme's muted placeholder gray
1516
+ * (the axis text color): `0` = the candle's own color, `1` = fully
1517
+ * placeholder-colored. Volume bars ignore it. */
1518
+ tint?: number;
1519
+ }
1520
+
1207
1521
  /** Post-transform bitmap rectangle a candle-body painter fills. */
1208
1522
  declare interface CandleGeometry {
1209
1523
  x: number;
@@ -1212,6 +1526,51 @@ declare interface CandleGeometry {
1212
1526
  height: number;
1213
1527
  }
1214
1528
 
1529
+ /** What one intro frame should look like. */
1530
+ export declare interface CandleIntroDirectives {
1531
+ /** Horizontal clip window in bitmap px applied to the whole pass (volume
1532
+ * band included). Omitted sides default to the pane edges. */
1533
+ clip?: {
1534
+ fromX?: number;
1535
+ toX?: number;
1536
+ };
1537
+ /** Per-element transform — called for every wick, body, and volume bar. */
1538
+ element?: (el: CandleIntroElement) => CandleElementTransform;
1539
+ }
1540
+
1541
+ /** Arguments handed to {@link CandleIntroDirectives.element} per element. */
1542
+ export declare interface CandleIntroElement extends WaveIntroElement {
1543
+ /** Which candle element is being transformed. */
1544
+ element: 'wick' | 'body' | 'volume';
1545
+ /** Settled left edge in bitmap px. */
1546
+ x: number;
1547
+ /** Settled top edge in bitmap px. */
1548
+ topY: number;
1549
+ /** Settled bottom edge in bitmap px. */
1550
+ bottomY: number;
1551
+ /** Y the element unfolds around — the open price for wick/body, the band
1552
+ * baseline for volume. */
1553
+ anchorY: number;
1554
+ /** Element width in bitmap px. */
1555
+ barWidth: number;
1556
+ }
1557
+
1558
+ /** One frame of candlestick intro choreography. */
1559
+ export declare type CandleIntroFn = (frame: CandleIntroFrame) => CandleIntroDirectives;
1560
+
1561
+ /** Read view of one candlestick intro frame. */
1562
+ export declare interface CandleIntroFrame extends WaveIntroFrame {
1563
+ /** Time → bitmap X through the live time scale. */
1564
+ timeToX(time: number): number;
1565
+ /**
1566
+ * Placeholder shapes the loading indicator was showing when this history
1567
+ * reveal armed — present only on a history-reveal frame that followed a
1568
+ * loading-indicator hand-off (see `skeletonMorphIntro`). Absent on
1569
+ * initial-load intro frames and on reveals with no hand-off.
1570
+ */
1571
+ placeholders?: readonly MorphPlaceholder[];
1572
+ }
1573
+
1215
1574
  /** Arguments handed to a {@link CandlePainter} once per candle body. */
1216
1575
  export declare interface CandlePaintArgs {
1217
1576
  geom: CandleGeometry;
@@ -1265,9 +1624,11 @@ declare interface CandlestickDirectionColors {
1265
1624
  * - `'fade-unfold'` *(default)* — fade + unfold combined; the default because a lone fade is
1266
1625
  * hard to notice in streaming demos, while the body-unfold gives a clear visual anchor.
1267
1626
  */
1268
- declare type CandlestickEntryAnimation = 'none' | 'fade' | 'unfold' | 'slide' | 'fade-unfold';
1627
+ export declare type CandlestickEntryAnimation = 'none' | 'fade' | 'unfold' | 'slide' | 'fade-unfold';
1269
1628
 
1270
- export declare const CandlestickSeries: DefineComponent<__VLS_Props_2, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_2> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
1629
+ export declare const CandlestickSeries: DefineComponent<__VLS_Props_2, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_2> & Readonly<{}>, {
1630
+ visible: boolean;
1631
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
1271
1632
 
1272
1633
  /** Series definition for `chart.addSeries` — keeps the chart renderer-agnostic
1273
1634
  * so hosts that never render candles don't bundle this module. */
@@ -1310,6 +1671,63 @@ export declare interface CandlestickSeriesOptions {
1310
1671
  * @see CandlestickSeriesOptions.entryAnimation
1311
1672
  */
1312
1673
  entryMs?: number | false;
1674
+ /**
1675
+ * Initial-load intro animation — a `CandleIntroFn`, usually one of the
1676
+ * shipped factories: `candleUnfoldIntro()` (the default),
1677
+ * `wickBodyIntro()`, `riseIntro()`, `fadeIntro()`. Independent of
1678
+ * `entryAnimation` — the intro plays once on the first data seed,
1679
+ * streaming entrances keep their own style.
1680
+ *
1681
+ * @see introMs — cross-linked duration for this animation.
1682
+ */
1683
+ introAnimation?: CandleIntroFn;
1684
+ /**
1685
+ * Initial-load reveal duration in milliseconds. On the first data seed
1686
+ * (empty → non-empty) candles reveal in a left-to-right wave: each candle
1687
+ * tweens for `introMs`, starts staggered across another `introMs`, so the
1688
+ * full wave lasts ~2×. The visual style is picked by `introAnimation`.
1689
+ * Default: `500`.
1690
+ *
1691
+ * ```
1692
+ * // Per-series override:
1693
+ * <CandlestickSeries options={{ introMs: 800 }} data={data} />
1694
+ *
1695
+ * // Chart-level default:
1696
+ * <ChartContainer animations={{ series: { candlestick: { intro: 800 } } }}>
1697
+ * <CandlestickSeries data={data} />
1698
+ * </ChartContainer>
1699
+ * ```
1700
+ *
1701
+ * `false` or `0` disables the intro. Bulk re-seeds of a non-empty series
1702
+ * never replay it. Skipped entirely under `prefers-reduced-motion`.
1703
+ */
1704
+ introMs?: number | false;
1705
+ /**
1706
+ * History-prepend reveal — plays when older points land at the front of
1707
+ * the series (the `EdgeLoader` load-more-on-scroll path). A wave sweeps
1708
+ * from the data boundary into the new history; each candle's stagger
1709
+ * position is `0` at the boundary and `1` at the deepest new point, so
1710
+ * intro factories that read `el.progress` (`fadeIntro()` — the default,
1711
+ * `riseIntro()`, `candleUnfoldIntro()`, `wickBodyIntro()`) work here
1712
+ * unchanged. Clip directives are interpreted in reveal space: `x = 0` at
1713
+ * the boundary, increasing toward the older end.
1714
+ *
1715
+ * The fn receives a localized frame: `range` is the prepended time span
1716
+ * (not the visible window) and `width` is that span's bitmap width.
1717
+ *
1718
+ * `'none'` disables the reveal — prepended points appear instantly.
1719
+ *
1720
+ * @see historyRevealMs — cross-linked duration for this animation.
1721
+ */
1722
+ historyReveal?: CandleIntroFn | 'none';
1723
+ /**
1724
+ * History-prepend reveal duration in milliseconds — the per-candle wave
1725
+ * duration; the full reveal lasts ~2×. Default: `400`. `false` or `0`
1726
+ * disables the reveal. Skipped entirely under `prefers-reduced-motion`.
1727
+ *
1728
+ * @see CandlestickSeriesOptions.historyReveal
1729
+ */
1730
+ historyRevealMs?: number | false;
1313
1731
  /**
1314
1732
  * How long the displayed OHLC takes to catch up to the actual last value
1315
1733
  * on every `updateLastPoint`. Default: `250` ms.
@@ -1349,13 +1767,36 @@ export declare interface CandlestickSeriesOptions {
1349
1767
  candlePainter?: CandlePainter;
1350
1768
  }
1351
1769
 
1770
+ /** Each candle unfolds from its open price in a left-to-right wave — the
1771
+ * default intro. Alpha rides the same progress as the unfold so a candle
1772
+ * still waiting for the wave front stays invisible instead of painting as
1773
+ * a flat, min-height line at its open price. */
1774
+ export declare function candleUnfoldIntro(): CandleIntroFn;
1775
+
1352
1776
  export declare const catppuccin: ThemePreset;
1353
1777
 
1778
+ /**
1779
+ * Center-out reveal: the clip window opens from the pane's horizontal
1780
+ * center outward, a glowing head riding each front.
1781
+ */
1782
+ export declare function centerOutIntro(): LineIntroFn;
1783
+
1354
1784
  export declare const ChartContainer: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
1355
1785
 
1356
1786
  /** Events emitted by {@link ChartInstance}. */
1357
1787
  declare interface ChartEvents {
1358
1788
  crosshairMove: (pos: CrosshairPosition | null) => void;
1789
+ /** Fired on a click (or tap) on the chart canvas that isn't the tail end of a pan drag. */
1790
+ pointClick: (info: PointClickInfo) => void;
1791
+ /** Fired on a double-click on the chart canvas. Chart also responds by calling `fitContent()`. */
1792
+ pointDoubleClick: (info: PointClickInfo) => void;
1793
+ /**
1794
+ * Fired when the spatially-hovered series/index changes (pie, heatmap, or
1795
+ * a custom spatial kind) — `null` when the pointer leaves every hit area.
1796
+ * Time-series series have no pixel geometry to hover this way; read
1797
+ * `crosshairMove` + `getDataAtTime`/`buildHoverSnapshots` for those.
1798
+ */
1799
+ seriesHover: (hit: SeriesHoverInfo | null) => void;
1359
1800
  viewportChange: () => void;
1360
1801
  dataUpdate: () => void;
1361
1802
  seriesChange: () => void;
@@ -1422,6 +1863,10 @@ export declare class ChartInstance extends EventEmitter<ChartEvents> implements
1422
1863
  id?: string;
1423
1864
  label?: string;
1424
1865
  }>): string;
1866
+ addSeries(type: 'heatmap', options?: Partial<HeatmapSeriesOptions & {
1867
+ id?: string;
1868
+ label?: string;
1869
+ }>): string;
1425
1870
  addSeries<O>(def: SeriesDefinition<O>, options?: Partial<O> & {
1426
1871
  layers?: number;
1427
1872
  id?: string;
@@ -1488,6 +1933,14 @@ export declare class ChartInstance extends EventEmitter<ChartEvents> implements
1488
1933
  * underlying animator mutates between frames.
1489
1934
  */
1490
1935
  getAnimationState(): AnimationState;
1936
+ /**
1937
+ * Reveal-front position in `[0, 1]` of any in-flight initial-load intro.
1938
+ * With a `seriesId`, that series' own front; without, the minimum across
1939
+ * every visible time series — overlays wait for the slowest reveal. `1`
1940
+ * whenever nothing is introing. Overlay components (the Y-label badge,
1941
+ * annotations) read this to reveal their entrance in step with the draw.
1942
+ */
1943
+ getIntroFront(seriesId?: string): number;
1491
1944
  /**
1492
1945
  * Replace all data for a series.
1493
1946
  *
@@ -1500,6 +1953,20 @@ export declare class ChartInstance extends EventEmitter<ChartEvents> implements
1500
1953
  setSeriesData(id: string, data: unknown, layerIndex?: number): void;
1501
1954
  /** Append a new data point to the end of a series (real-time tick). */
1502
1955
  appendData(id: string, point: OHLCInput | TimePointInput, layerIndex?: number): void;
1956
+ /**
1957
+ * Prepend older points to the front of a series — the "load more history on
1958
+ * scroll" path. Unlike {@link setSeriesData}, this deliberately does NOT set
1959
+ * `#dataReplaceSnapPending`: the visible window and the data inside it don't
1960
+ * change, so the viewport must stay put (X) and the Y axis eases if newly
1961
+ * revealed history shifts the range — instead of the full-span re-fit and
1962
+ * instant dual-axis snap a bulk `setSeriesData` replace would force. Routes
1963
+ * through the streaming `onPointAppended` engine signal via `onDataChanged`.
1964
+ *
1965
+ * `points` must be sorted ascending and sit strictly before the current
1966
+ * first point; the sync reconciler guarantees this before calling here.
1967
+ * No-op if the renderer doesn't support prepend.
1968
+ */
1969
+ prependData(id: string, points: (OHLCInput | TimePointInput)[], layerIndex?: number): void;
1503
1970
  /** Update the last data point of a series in place (e.g. live candle update). */
1504
1971
  updateData(id: string, point: OHLCInput | TimePointInput, layerIndex?: number): void;
1505
1972
  /**
@@ -1517,7 +1984,7 @@ export declare class ChartInstance extends EventEmitter<ChartEvents> implements
1517
1984
  */
1518
1985
  keepLast(id: string, count: number, layerIndex?: number): void;
1519
1986
  /** Update visual options (color, width, etc.) for an existing series. */
1520
- updateSeriesOptions(id: string, options: Partial<CandlestickSeriesOptions> | Partial<LineSeriesOptions> | Partial<BarSeriesOptions> | Partial<PieSeriesOptions>): void;
1987
+ updateSeriesOptions(id: string, options: Partial<CandlestickSeriesOptions> | Partial<LineSeriesOptions> | Partial<BarSeriesOptions> | Partial<PieSeriesOptions> | Partial<HeatmapSeriesOptions>): void;
1521
1988
  /**
1522
1989
  * Batch multiple updates: suppress recomputes until `fn` returns. Exceptions
1523
1990
  * inside `fn` still flush the batch so counters don't leak across calls.
@@ -1615,6 +2082,13 @@ export declare class ChartInstance extends EventEmitter<ChartEvents> implements
1615
2082
  * current crosshair is a no-op (no emit). Combined with the y-preservation
1616
2083
  * above, this lets N charts broadcast their hover to each other without
1617
2084
  * a feedback-loop guard.
2085
+ *
2086
+ * The echo protection assumes the broadcast is **synchronous** (call
2087
+ * `setCrosshair` directly from the `crosshairMove` listener). An echo
2088
+ * routed through an async hop — a state store, a React render — can
2089
+ * arrive with a stale `time` while the origin chart streams, miss the
2090
+ * idempotency check, and flip that chart to time-anchored until the next
2091
+ * real pointer move (see {@link #syncCrosshairToViewport}).
1618
2092
  */
1619
2093
  setCrosshair(pos: {
1620
2094
  time: number;
@@ -1644,15 +2118,17 @@ export declare class ChartInstance extends EventEmitter<ChartEvents> implements
1644
2118
  }[] | null;
1645
2119
  getSeriesIds(): string[];
1646
2120
  /**
1647
- * Filter `getSeriesIds()` by renderer type. `'pie'` returns pie series,
1648
- * `'time'` returns line/bar/candlestick.
2121
+ * Filter `getSeriesIds()` by renderer type. A concrete kind (`'pie'`,
2122
+ * `'heatmap'`, a custom kind, …) returns series of that exact kind;
2123
+ * `'time'` returns every time-axis series (line/bar/candlestick and any
2124
+ * custom time-series kind).
1649
2125
  *
1650
2126
  * - `opts.visibleOnly` — exclude series with `isSeriesVisible=false`; for
1651
2127
  * multi-layer series also exclude when every layer is hidden.
1652
2128
  * - `opts.singleLayerOnly` — exclude series with more than one layer.
1653
2129
  * Useful for YLabel fallback priority (stick to a single line first).
1654
2130
  */
1655
- getSeriesIdsByType(type: 'pie' | 'time', opts?: {
2131
+ getSeriesIdsByType(type: SeriesKind | 'time', opts?: {
1656
2132
  visibleOnly?: boolean;
1657
2133
  singleLayerOnly?: boolean;
1658
2134
  }): string[];
@@ -1666,6 +2142,14 @@ export declare class ChartInstance extends EventEmitter<ChartEvents> implements
1666
2142
  value: number;
1667
2143
  isLive: boolean;
1668
2144
  } | null;
2145
+ /**
2146
+ * Stacked value at an arbitrary `time` — the cumulative stack top at that
2147
+ * sample, sharing a basis with {@link getStackedLastValue}. Falls back to the
2148
+ * nearest raw sample (close / value) for renderers without a stacked concept
2149
+ * (Candlestick, single-layer Line/Bar). Returns `null` for unknown ids or
2150
+ * when no sample sits near `time`. Used by the YLabel intro count-up start.
2151
+ */
2152
+ getStackedValueAtTime(seriesId: string, time: number): number | null;
1669
2153
  /**
1670
2154
  * Per-layer last snapshots with each layer's own `time`. Returns `null`
1671
2155
  * for single-layer renderers or when no visible layer has data. Used by
@@ -1710,6 +2194,12 @@ export declare class ChartInstance extends EventEmitter<ChartEvents> implements
1710
2194
  /** Apply a new theme and update series colors where appropriate. */
1711
2195
  setTheme(theme: ChartTheme): void;
1712
2196
  getTheme(): ChartTheme;
2197
+ /** BCP 47 locale applied to the built-in time-axis / tooltip / crosshair formatting. */
2198
+ setLocale(locale: string | undefined): void;
2199
+ getLocale(): string | undefined;
2200
+ /** IANA timezone applied to the same built-in date-time formatting. */
2201
+ setTimeZone(timeZone: string | undefined): void;
2202
+ getTimeZone(): string | undefined;
1713
2203
  /** Update axis configuration and re-render. */
1714
2204
  setAxis(config: AxisConfig): void;
1715
2205
  /**
@@ -1756,6 +2246,13 @@ export declare class ChartInstance extends EventEmitter<ChartEvents> implements
1756
2246
  setEdgeState(side: EdgeSide, state: EdgeState): void;
1757
2247
  /** Read the current host-declared state for a given edge. */
1758
2248
  getEdgeState(side: EdgeSide): EdgeState;
2249
+ /**
2250
+ * Swap the painter used for a side's `loading` spinner — the same
2251
+ * pluggable-function contract as the series intro animations. `null`
2252
+ * (default) falls back to the built-in three-dot spinner. Takes effect
2253
+ * immediately if that side is currently in the `loading` state.
2254
+ */
2255
+ setEdgeIndicator(side: EdgeSide, indicator: LoadingIndicatorFn | null): void;
1759
2256
  /**
1760
2257
  * Notify chart that a YLabel overlay is mounted / unmounted. Currently a
1761
2258
  * no-op — placeholder for the right-padding reflow that will adjust the
@@ -1860,6 +2357,19 @@ export declare interface ChartOptions {
1860
2357
  };
1861
2358
  /** Enable zoom, pan, and crosshair interactions. Defaults to true. */
1862
2359
  interactive?: boolean;
2360
+ /**
2361
+ * BCP 47 locale applied to the built-in time-axis / tooltip / crosshair
2362
+ * date-time formatting (e.g. `'de-DE'`). Default: `'en-US'`. Live —
2363
+ * `chart.setLocale()` updates it after construction. Ignored for a series
2364
+ * that installs a custom formatter via `chart.timeScale.setFormat()`.
2365
+ */
2366
+ locale?: string;
2367
+ /**
2368
+ * IANA timezone applied to the same built-in date-time formatting (e.g.
2369
+ * `'America/New_York'`). Default: the browser's local timezone. Live —
2370
+ * `chart.setTimeZone()` updates it after construction.
2371
+ */
2372
+ timeZone?: string;
1863
2373
  /** Background grid configuration. Default: `{ visible: true }`. */
1864
2374
  grid?: {
1865
2375
  visible: boolean;
@@ -1986,6 +2496,20 @@ export declare interface ChartTheme {
1986
2496
  */
1987
2497
  otherColor: string;
1988
2498
  };
2499
+ /**
2500
+ * Heatmap sequential ramp. Optional so hand-built theme literals keep
2501
+ * compiling — the renderer falls back to a ramp derived from
2502
+ * {@link ChartTheme.line} `color` and the background at render time.
2503
+ */
2504
+ heatmap?: {
2505
+ /**
2506
+ * Ramp stops, low → high, interpolated perceptually. {@link createTheme}
2507
+ * derives a two-stop single-hue ramp: a faint accent wash near the
2508
+ * surface up to the full accent — which flips anchor automatically with
2509
+ * theme polarity (low values sink into the background in both modes).
2510
+ */
2511
+ colors: string[];
2512
+ };
1989
2513
  /** Bollinger band / envelope fill colors. */
1990
2514
  bands: {
1991
2515
  /** Fill for the upper band region (above the middle band). */
@@ -2156,12 +2680,38 @@ export declare interface CrosshairPosition {
2156
2680
  /** Path-shape selector for {@link tracePath}. */
2157
2681
  export declare type CurveKind = 'straight' | 'smooth' | 'stepped';
2158
2682
 
2159
- export declare function detectInterval(times: number[]): number;
2683
+ /**
2684
+ * A custom spatial renderer with no time axis — implement this (rather than
2685
+ * {@link PieSeriesRenderer} / {@link HeatmapSeriesRenderer}, which are reserved
2686
+ * for the built-ins) when writing a new non-time-axis series from scratch,
2687
+ * e.g. a radar or treemap chart. Pick any `kind` that isn't a built-in one.
2688
+ */
2689
+ export declare interface CustomSpatialSeriesRenderer extends BaseSeriesRenderer {
2690
+ readonly kind: string;
2691
+ }
2692
+
2693
+ /**
2694
+ * Structural equality for plain option bags that may carry function-valued
2695
+ * fields (e.g. `AnimationsConfig.axis.y.curve`, a transition factory).
2696
+ * Functions (and any other non-plain value) compare by reference — only
2697
+ * arrays and plain objects recurse. Used to tell a caller's brand-new inline
2698
+ * object literal (same values, new reference) apart from a genuine option
2699
+ * change, so wrappers can skip an expensive rebuild in the former case.
2700
+ */
2701
+ export declare function deepEqual(a: unknown, b: unknown): boolean;
2702
+
2703
+ declare const _default: DefineComponent<__VLS_Props_16, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_16> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
2704
+ containerRef: HTMLDivElement;
2705
+ }, HTMLDivElement>;
2706
+ export { _default as TimeAxis }
2707
+ export { _default as XAxis }
2708
+
2709
+ export declare function detectInterval(times: number[]): number;
2160
2710
 
2161
2711
  export declare const dracula: ThemePreset;
2162
2712
 
2163
2713
  /** Payload for {@link ChartOptions.onEdgeReached}. */
2164
- declare interface EdgeReachedInfo {
2714
+ export declare interface EdgeReachedInfo {
2165
2715
  side: EdgeSide;
2166
2716
  /** Time units the user pulled past the soft bound. */
2167
2717
  overshoot: number;
@@ -2170,7 +2720,9 @@ declare interface EdgeReachedInfo {
2170
2720
  }
2171
2721
 
2172
2722
  /** Which data side the user pulled past during a gesture. */
2173
- declare type EdgeSide = 'left' | 'right';
2723
+ export declare type EdgeSide = 'left' | 'right';
2724
+
2725
+ declare type EdgeSide_2 = 'left' | 'right';
2174
2726
 
2175
2727
  /**
2176
2728
  * Host-controlled visual state for a chart edge:
@@ -2179,7 +2731,7 @@ declare type EdgeSide = 'left' | 'right';
2179
2731
  * - `no-data`: a dashed boundary line + "No more data" label appears at the data edge.
2180
2732
  * - `has-more`: reserved — currently behaves like `idle`. Use when more data exists but is not being fetched.
2181
2733
  */
2182
- declare type EdgeState = 'idle' | 'loading' | 'no-data' | 'has-more';
2734
+ export declare type EdgeState = 'idle' | 'loading' | 'no-data' | 'has-more';
2183
2735
 
2184
2736
  declare class EventEmitter<Events = Record<string, Listener>> {
2185
2737
  private listeners;
@@ -2189,6 +2741,12 @@ declare class EventEmitter<Events = Record<string, Listener>> {
2189
2741
  removeAllListeners(): void;
2190
2742
  }
2191
2743
 
2744
+ /**
2745
+ * Plain staggered fade-in, no geometry motion. Works for both bar and
2746
+ * candlestick series.
2747
+ */
2748
+ export declare function fadeIntro(): WaveIntroFn;
2749
+
2192
2750
  /**
2193
2751
  * Fill a rounded rectangle with per-corner masking, using manual `arcTo` so the
2194
2752
  * output is deterministic and independent of `CanvasRenderingContext2D.roundRect`
@@ -2211,7 +2769,7 @@ export declare function formatCompact(v: number, opts?: {
2211
2769
  decimals?: number;
2212
2770
  }): string;
2213
2771
 
2214
- export declare function formatDate(timestamp: number): string;
2772
+ export declare function formatDate(timestamp: number, opts?: TimeFormatOptions): string;
2215
2773
 
2216
2774
  /**
2217
2775
  * Full-precision display that adapts decimal count to the value's magnitude.
@@ -2220,7 +2778,7 @@ export declare function formatDate(timestamp: number): string;
2220
2778
  */
2221
2779
  export declare function formatPriceAdaptive(v: number): string;
2222
2780
 
2223
- export declare function formatTime(timestamp: number, interval: number): string;
2781
+ export declare function formatTime(timestamp: number, interval: number, opts?: TimeFormatOptions): string;
2224
2782
 
2225
2783
  declare type FrameKind = 'main' | 'overlay';
2226
2784
 
@@ -2235,10 +2793,103 @@ declare interface FrameTimingSample {
2235
2793
 
2236
2794
  export declare const githubLight: ThemePreset;
2237
2795
 
2796
+ /** Bars fade-grow up from the baseline in a left-to-right wave — the
2797
+ * default intro. */
2798
+ export declare function growIntro(): BarIntroFn;
2799
+
2238
2800
  export declare const gruvbox: ThemePreset;
2239
2801
 
2240
2802
  export declare const handwritten: ThemePreset;
2241
2803
 
2804
+ /** One cell of a heatmap matrix — a (column, row) coordinate with a magnitude. */
2805
+ export declare interface HeatmapCellData {
2806
+ /** Column key. Column order follows first appearance unless {@link HeatmapSeriesOptions.columns} pins it. */
2807
+ x: string;
2808
+ /** Row key. Row order follows first appearance unless {@link HeatmapSeriesOptions.rows} pins it. */
2809
+ y: string;
2810
+ /** Magnitude mapped onto the sequential color ramp. */
2811
+ value: number;
2812
+ /** Explicit fill override for this cell. Skips the ramp entirely. */
2813
+ color?: string;
2814
+ }
2815
+
2816
+ /** Per-cell value labels drawn inside heatmap cells. */
2817
+ export declare interface HeatmapCellLabelsOptions {
2818
+ /** Font size in CSS pixels. Default: 10. */
2819
+ fontSize?: number;
2820
+ /**
2821
+ * Value formatter. Default: decimals adapt to the value domain — 2 for
2822
+ * unit-scale domains (correlations), integers for wide ones, compact
2823
+ * notation (`1.2K`) past 1000.
2824
+ */
2825
+ format?: (value: number) => string;
2826
+ }
2827
+
2828
+ export declare const HeatmapSeries: DefineComponent<__VLS_Props_4, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_4> & Readonly<{}>, {
2829
+ visible: boolean;
2830
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
2831
+
2832
+ /** Series definition for `chart.addSeries` — keeps the chart renderer-agnostic
2833
+ * so hosts that never render heatmaps don't bundle this module. */
2834
+ export declare const HeatmapSeriesDef: SeriesDefinition<HeatmapSeriesOptions>;
2835
+
2836
+ /** Visual options for a heatmap series. */
2837
+ export declare interface HeatmapSeriesOptions {
2838
+ /**
2839
+ * Sequential ramp stops, low → high, interpolated perceptually (OKLab).
2840
+ * Two stops give a classic single-hue ramp; three make a diverging scale.
2841
+ * Default: derived from the theme — a faint wash of the accent color near
2842
+ * the surface up to the full accent (`theme.heatmap.colors` when present).
2843
+ */
2844
+ colors?: string[];
2845
+ /** Domain minimum mapped to the first ramp stop. Default: the data minimum. */
2846
+ min?: number;
2847
+ /** Domain maximum mapped to the last ramp stop. Default: the data maximum. */
2848
+ max?: number;
2849
+ /** Surface gap between adjacent cells in CSS pixels. Default: 2. */
2850
+ gap?: number;
2851
+ /** Cell corner radius in CSS pixels. Default: 3. */
2852
+ cornerRadius?: number;
2853
+ /** Draw row labels (left) and column labels (bottom). Default: true. */
2854
+ axisLabels?: boolean;
2855
+ /** Draw the value inside each cell (auto-skipped when it doesn't fit). Default: false. */
2856
+ cellLabels?: boolean | HeatmapCellLabelsOptions;
2857
+ /** Explicit column order. Keys absent from the data render as empty columns. */
2858
+ columns?: string[];
2859
+ /** Explicit row order. Keys absent from the data render as empty rows. */
2860
+ rows?: string[];
2861
+ /**
2862
+ * Entrance duration per cell in milliseconds — the diagonal reveal wave on
2863
+ * first paint / grid-shape change. `0` paints instantly.
2864
+ * Default: chart animation config (600).
2865
+ */
2866
+ entryMs?: number;
2867
+ /**
2868
+ * Value/color tween duration when a cell's value changes in place, and the
2869
+ * hover-lift ease. `0` snaps. Default: chart animation config (300).
2870
+ */
2871
+ updateMs?: number;
2872
+ }
2873
+
2874
+ /** A spatial matrix renderer with no time axis (Heatmap). Has no time-series queries. */
2875
+ export declare interface HeatmapSeriesRenderer extends BaseSeriesRenderer {
2876
+ readonly kind: 'heatmap';
2877
+ }
2878
+
2879
+ export declare const HeatmapTooltip: DefineComponent<__VLS_Props_7, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_7> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
2880
+
2881
+ /**
2882
+ * Velocity-matched cubic Hermite Y transition. Direction-aware: per-call
2883
+ * `expandMs` (outward, default 250 ms via the engine) and `contractMs`
2884
+ * (inward, default 2500 ms — sticky-Y) are supplied through `retarget()`.
2885
+ *
2886
+ * Default Y transition. Bounded duration — after the supplied settle each
2887
+ * side lands exactly at the target with zero velocity, unlike spring's
2888
+ * asymptotic approach. Predictable for animations whose end-state matters
2889
+ * (axis labels can settle in a known time).
2890
+ */
2891
+ export declare function hermite(): TransitionFactory<YRange>;
2892
+
2242
2893
  export declare const highContrast: ThemePreset;
2243
2894
 
2244
2895
  /** Horizontal padding expressed as a fixed pixel offset or a number of data intervals. */
@@ -2256,6 +2907,17 @@ export declare interface HoverInfo {
2256
2907
 
2257
2908
  export declare const InfoBar: __VLS_WithTemplateSlots_2<typeof __VLS_component_2, __VLS_TemplateResult_2["slots"]>;
2258
2909
 
2910
+ export declare function isDarkBg(bg: string): boolean;
2911
+
2912
+ /**
2913
+ * Narrow a renderer to the time-axis variant. A capability check, not a
2914
+ * `kind` allowlist — any renderer implementing the required time-series
2915
+ * queries (own a `getTimeBounds()`) counts, including custom series kinds.
2916
+ * The chart's viewport, crosshair, interval detection, and Y autoscale all
2917
+ * dispatch through this guard.
2918
+ */
2919
+ export declare function isTimeSeriesRenderer(renderer: SeriesRenderer): renderer is TimeSeriesRenderer;
2920
+
2259
2921
  export declare const lavenderMist: ThemePreset;
2260
2922
 
2261
2923
  export declare const Legend: __VLS_WithTemplateSlots_3<typeof __VLS_component_3, __VLS_TemplateResult_3["slots"]>;
@@ -2305,6 +2967,14 @@ declare interface LegendItemOverride {
2305
2967
 
2306
2968
  declare type LegendMode = 'toggle' | 'isolate' | 'solo';
2307
2969
 
2970
+ /** Payload for the `onToggle` prop — one entry per user click, regardless of built-in vs custom rendering. */
2971
+ declare interface LegendToggleInfo {
2972
+ /** The clicked item's id (matches {@link LegendItem.id}). */
2973
+ id: string;
2974
+ /** Which interaction produced this change. */
2975
+ action: 'toggle' | 'isolate' | 'unisolate';
2976
+ }
2977
+
2308
2978
  export declare const lightPink: ThemePreset;
2309
2979
 
2310
2980
  /** Internal bookkeeping for a registered reference line. `coord` is a Y value (horizontal) or normalized epoch ms (vertical). */
@@ -2326,6 +2996,91 @@ declare interface LineEntry {
2326
2996
  */
2327
2997
  declare type LineEntryAnimation = 'none' | 'grow' | 'fade';
2328
2998
 
2999
+ /** What one intro frame should look like. Every field is optional — an empty
3000
+ * object renders the frame settled. */
3001
+ export declare interface LineIntroDirectives {
3002
+ /**
3003
+ * Horizontal clip window in bitmap pixels. Omitted sides default to the
3004
+ * pane edges, so `{ toX }` is a left-to-right reveal and `{ fromX }` a
3005
+ * right-to-left one.
3006
+ */
3007
+ clip?: {
3008
+ fromX?: number;
3009
+ toX?: number;
3010
+ };
3011
+ /**
3012
+ * Draw a stroke-only ghost of the full line under the main pass at this
3013
+ * alpha (the area fill is left to the main pass).
3014
+ */
3015
+ ghostAlpha?: number;
3016
+ /**
3017
+ * Head-glow anchors — the renderer draws a pulse dot per visible layer at
3018
+ * each head's `time` (bell-faded over the intro window). Heads are
3019
+ * skipped for stacked series, where a single layer's Y is meaningless.
3020
+ */
3021
+ heads?: Array<{
3022
+ x: number;
3023
+ time: number;
3024
+ }>;
3025
+ /**
3026
+ * Per-value transform applied to every rendered value (stroke, area,
3027
+ * stacked cumulative, trailing endpoint, overlay pulse) via the
3028
+ * renderer's `effectiveValue` hook.
3029
+ */
3030
+ value?: (args: LineIntroValueArgs) => number;
3031
+ }
3032
+
3033
+ /** One frame of intro choreography. See the module docs for the contract. */
3034
+ export declare type LineIntroFn = (frame: LineIntroFrame) => LineIntroDirectives;
3035
+
3036
+ /** Read view of one intro frame — everything a {@link LineIntroFn} may need. */
3037
+ export declare interface LineIntroFrame {
3038
+ /** Linear intro progress in `[0, 1]` over the whole reveal window. */
3039
+ progress: number;
3040
+ /** Visible time range. */
3041
+ range: VisibleRange;
3042
+ /**
3043
+ * Plot-area width in bitmap pixels — the span `timeToX` maps the visible
3044
+ * range onto (excludes the Y-axis strip sharing the canvas).
3045
+ */
3046
+ width: number;
3047
+ /** Plot-area height in bitmap pixels (excludes the X-axis strip). */
3048
+ height: number;
3049
+ /** The series' stacking mode — path-based intros usually degrade to a plain clip when stacked. */
3050
+ stacking: StackingMode;
3051
+ /** Time → bitmap X through the live time scale. */
3052
+ timeToX(time: number): number;
3053
+ /** Bitmap X → time — the inverse of {@link timeToX}, for mapping a clip front back into the time domain. */
3054
+ xToTime(x: number): number;
3055
+ /** Value → bitmap Y through the live Y scale. */
3056
+ valueToY(value: number): number;
3057
+ /** Number of layers in the series. */
3058
+ layerCount: number;
3059
+ /** Visible data of one layer (memoized per frame). */
3060
+ layerData(layerIndex: number): readonly TimePoint[];
3061
+ /** Mean of the layer's visible finite values, or `null` for an empty/poisoned layer (memoized per frame). */
3062
+ layerMean(layerIndex: number): number | null;
3063
+ /**
3064
+ * Bitmap-space polyline of the first visible layer (finite values only,
3065
+ * memoized per frame), or `null` when no layer has two drawable points.
3066
+ */
3067
+ primaryPath(): ReadonlyArray<{
3068
+ x: number;
3069
+ y: number;
3070
+ time: number;
3071
+ }> | null;
3072
+ }
3073
+
3074
+ /** Arguments handed to {@link LineIntroDirectives.value} for every rendered value. */
3075
+ export declare interface LineIntroValueArgs {
3076
+ layerIndex: number;
3077
+ time: number;
3078
+ /** The value the renderer would draw without the intro (live smoothing included). */
3079
+ value: number;
3080
+ /** Normalized x-position of `time` across the visible range, clamped to `[0, 1]`. */
3081
+ position: number;
3082
+ }
3083
+
2329
3084
  /** Arguments handed to a {@link LinePainter} once per finite run. */
2330
3085
  export declare interface LinePaintArgs {
2331
3086
  /**
@@ -2365,7 +3120,9 @@ declare interface LinePoint {
2365
3120
  y: number;
2366
3121
  }
2367
3122
 
2368
- export declare const LineSeries: DefineComponent<__VLS_Props_4, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_4> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
3123
+ export declare const LineSeries: DefineComponent<__VLS_Props_5, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_5> & Readonly<{}>, {
3124
+ visible: boolean;
3125
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
2369
3126
 
2370
3127
  /** Series definition for `chart.addSeries` — keeps the chart renderer-agnostic
2371
3128
  * so hosts that never render lines don't bundle this module. */
@@ -2434,6 +3191,66 @@ export declare interface LineSeriesOptions {
2434
3191
  * @see LineSeriesOptions.entryAnimation
2435
3192
  */
2436
3193
  entryMs?: number | false;
3194
+ /**
3195
+ * Initial-load reveal duration in milliseconds. On the first data seed
3196
+ * (empty → non-empty) the line draws itself left-to-right — stroke and
3197
+ * area sweep in behind a glowing head that rides the reveal front. The
3198
+ * full sweep lasts ~2× `introMs`. Default: `500`.
3199
+ *
3200
+ * ```
3201
+ * // Per-series override:
3202
+ * <LineSeries options={{ introMs: 800 }} data={data} />
3203
+ *
3204
+ * // Chart-level default:
3205
+ * <ChartContainer animations={{ series: { line: { intro: 800 } } }}>
3206
+ * <LineSeries data={data} />
3207
+ * </ChartContainer>
3208
+ * ```
3209
+ *
3210
+ * `false` or `0` disables the intro. Bulk re-seeds of a non-empty series
3211
+ * never replay it. Skipped entirely under `prefers-reduced-motion`.
3212
+ */
3213
+ introMs?: number | false;
3214
+ /**
3215
+ * Initial-load reveal choreography — a `LineIntroFn` called once per
3216
+ * frame while the intro plays. The shipped styles are factories over the
3217
+ * same contract: `unfoldIntro()` (the default — amplitude springs from
3218
+ * the mean into shape), `sweepIntro()` (left-to-right draw-on with a
3219
+ * glowing head), `traceIntro()` (faint ghost, then an ink sweep),
3220
+ * `plotterIntro()` (head advances at constant path speed), `centerOutIntro()`
3221
+ * (clip opens from the pane's center outward). Style is specific to the
3222
+ * line series; there is no chart-level override for style — only for
3223
+ * duration (`introMs`).
3224
+ *
3225
+ * @see LineIntroFn — the custom-fn contract (frame → directives).
3226
+ * @see introMs — cross-linked duration for this animation.
3227
+ */
3228
+ introAnimation?: LineIntroFn;
3229
+ /**
3230
+ * History-prepend reveal — plays when older points land at the front of
3231
+ * the series (the `EdgeLoader` load-more-on-scroll path). Default: the
3232
+ * line back-fills itself from the data boundary into the new history
3233
+ * behind a moving clip front (`backfillSweepIntro()`).
3234
+ *
3235
+ * A custom `LineIntroFn` receives a localized frame: `range` is the
3236
+ * prepended time span with `range.to` at the data boundary (not the
3237
+ * visible window), `width` is that span's bitmap width, and `progress`
3238
+ * runs over the reveal. Value-transform directives are applied to the
3239
+ * prepended points only.
3240
+ *
3241
+ * `'none'` disables the reveal — prepended points appear instantly.
3242
+ *
3243
+ * @see historyRevealMs — cross-linked duration for this animation.
3244
+ */
3245
+ historyReveal?: LineIntroFn | 'none';
3246
+ /**
3247
+ * History-prepend reveal duration in milliseconds — the full sweep lasts
3248
+ * ~2×. Default: `400`. `false` or `0` disables the reveal. Skipped
3249
+ * entirely under `prefers-reduced-motion`.
3250
+ *
3251
+ * @see LineSeriesOptions.historyReveal
3252
+ */
3253
+ historyRevealMs?: number | false;
2437
3254
  /**
2438
3255
  * How long the displayed last value takes to catch up to the actual one
2439
3256
  * on every `updateLastPoint`. Default: `250` ms.
@@ -2495,11 +3312,90 @@ export declare interface LineSeriesOptions {
2495
3312
  /** Color below the threshold. Default: the series' resolved color. */
2496
3313
  below?: string;
2497
3314
  };
3315
+ /**
3316
+ * Dot markers at each data point. Hidden by default.
3317
+ *
3318
+ * Dots ride the same animated geometry as the stroke (entrance unfurl,
3319
+ * live-value smoothing, stacked cumulative), so they glide with the line
3320
+ * instead of snapping. When the visible points sit too dense to read as
3321
+ * discrete markers (average spacing under ~1.5 dot diameters, e.g. zoomed
3322
+ * far out), the dots are skipped for that frame — they'd merge into a fat
3323
+ * line and hide the stroke. Zooming back in brings them back.
3324
+ *
3325
+ * ```
3326
+ * <LineSeries data={data} options={{ points: { visible: true } }} />
3327
+ * ```
3328
+ */
3329
+ points?: {
3330
+ /** Whether a dot is drawn at each data point. */
3331
+ visible: boolean;
3332
+ /** Dot radius in CSS pixels. Default: `3`. */
3333
+ radius?: number;
3334
+ /** Fill color override. Default: the layer's resolved series color. */
3335
+ color?: string;
3336
+ };
2498
3337
  }
2499
3338
 
2500
3339
  declare type Listener = (...args: any[]) => void;
2501
3340
 
2502
- export declare const Marker: DefineComponent<__VLS_Props_8, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_8> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
3341
+ /** Read view of one loading-indicator frame — everything a {@link LoadingIndicatorFn} may need. */
3342
+ export declare interface LoadingIndicatorArgs {
3343
+ scope: BitmapCoordinateSpace;
3344
+ theme: ChartTheme;
3345
+ /**
3346
+ * Plot-area size in CSS/media pixels (excludes the axis bands) — multiply
3347
+ * by the scope's pixel ratios to get bitmap units.
3348
+ */
3349
+ chartMediaWidth: number;
3350
+ chartMediaHeight: number;
3351
+ /** Animation timestamp, typically `performance.now()`. */
3352
+ now: number;
3353
+ /**
3354
+ * Which edge this indicator's stage is anchored to. `'left'` means the
3355
+ * data boundary sits at local x = `chartMediaWidth` (the stage extends
3356
+ * further away from the data as x decreases); `'right'` means the
3357
+ * boundary sits at local x = `0`. Present only when painted by
3358
+ * `chart.setEdgeIndicator` — absent for a hypothetical future non-edge
3359
+ * caller.
3360
+ */
3361
+ side?: EdgeSide_2;
3362
+ /**
3363
+ * Y position (media px, within `[0, chartMediaHeight]`) of the boundary
3364
+ * point on the chart's primary visible time series — lets an indicator
3365
+ * start exactly where the real data leaves off. `undefined` when there's
3366
+ * no visible time series or no data resolvable at the boundary.
3367
+ */
3368
+ edgeValueY?: number;
3369
+ /**
3370
+ * Media px between adjacent bars at the chart's current zoom level — lets
3371
+ * an indicator size its placeholder shapes to match the real candles/bars
3372
+ * that will render once data lands. `undefined` when not resolvable (e.g.
3373
+ * a chart with no meaningful viewport span yet).
3374
+ */
3375
+ barSpacing?: number;
3376
+ /**
3377
+ * Kind of the primary visible time series (`'candlestick'`, `'line'`,
3378
+ * `'bar'`, ...) — lets an indicator adapt its shape to what's actually
3379
+ * loading instead of always drawing one fixed shape. `undefined` when
3380
+ * unresolvable.
3381
+ */
3382
+ seriesKind?: SeriesKind;
3383
+ /**
3384
+ * Report the placeholder shapes drawn this frame. The chart snapshots the
3385
+ * latest report and, when the fetched history lands, hands it to the
3386
+ * series' history reveal — a morph-style reveal (`skeletonMorphIntro`)
3387
+ * grows the real candles out of these exact placeholders instead of
3388
+ * cross-fading. Optional both ways: an indicator that never reports (or
3389
+ * a chart caller that doesn't collect) simply falls back to the plain
3390
+ * reveal.
3391
+ */
3392
+ reportPlaceholders?(bars: PlaceholderBar[]): void;
3393
+ }
3394
+
3395
+ /** Pure function contract for a pluggable loading indicator. */
3396
+ export declare type LoadingIndicatorFn = (args: LoadingIndicatorArgs) => void;
3397
+
3398
+ export declare const Marker: DefineComponent<__VLS_Props_10, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_10> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
2503
3399
 
2504
3400
  /**
2505
3401
  * A point annotation pinned to a `time` (X) and a `value` (Y) — "anomaly opened
@@ -2521,7 +3417,12 @@ export declare interface MarkerConfig {
2521
3417
  shape?: MarkerShape;
2522
3418
  /** Reuse the line pulse halo around the anchor. Default: `false`. */
2523
3419
  pulse?: boolean;
2524
- /** Optional text label drawn in a pill next to the anchor. */
3420
+ /**
3421
+ * Optional text label, drawn as a callout chip whose tail points at the
3422
+ * anchor — above it for `arrow-down` / `dot` / `circle`, below for
3423
+ * `arrow-up`, flipping when the plot edge would cut it off. On arrow
3424
+ * shapes the tail replaces the glyph.
3425
+ */
2525
3426
  label?: string;
2526
3427
  /** Color override. Falls back to the series color (when `seriesId` is set), then the theme line color. */
2527
3428
  color?: string;
@@ -2539,7 +3440,13 @@ declare interface MarkerEntry {
2539
3440
  color?: string;
2540
3441
  }
2541
3442
 
2542
- /** Glyph drawn at the marker anchor. Arrows point their tip *at* the anchor point. */
3443
+ /**
3444
+ * Glyph drawn at the marker anchor. On a bare marker, arrows point their tip
3445
+ * *at* the anchor point. On a labeled marker the callout tail does the
3446
+ * pointing instead — the arrow glyph is dropped and the shape only picks the
3447
+ * callout's side: above the anchor for `arrow-down`, below for `arrow-up`.
3448
+ * `dot` and `circle` keep their glyph under the callout.
3449
+ */
2543
3450
  export declare type MarkerShape = 'dot' | 'circle' | 'arrow-up' | 'arrow-down';
2544
3451
 
2545
3452
  export declare const materialPalenight: ThemePreset;
@@ -2557,8 +3464,37 @@ export declare const minimalLight: ThemePreset;
2557
3464
 
2558
3465
  export declare const mintBreeze: ThemePreset;
2559
3466
 
3467
+ /**
3468
+ * Blend two colors perceptually (OKLab), `t` in [0, 1]. Accepts `#rgb`,
3469
+ * `#rrggbb`, and `rgb()/rgba()` inputs; anything else (named colors,
3470
+ * `hsl()`) falls back to a hard switch at `t = 0.5` — it never produces a
3471
+ * NaN canvas fill. An `rgba()` input's alpha interpolates linearly alongside
3472
+ * the OKLab channels — the result is an `rgba()` string whenever either
3473
+ * endpoint is translucent, an opaque hex otherwise. Results are cached on a
3474
+ * quantized `t` (1/256 steps), so per-frame per-cell sampling stays
3475
+ * allocation-free after the first frame.
3476
+ */
3477
+ export declare function mixColors(from: string, to: string, t: number): string;
3478
+
2560
3479
  export declare const monokaiPro: ThemePreset;
2561
3480
 
3481
+ /**
3482
+ * One placeholder shape a loading indicator painted at the data boundary,
3483
+ * mapped into bitmap space — what a morph-style history reveal grows the
3484
+ * real candles out of. Re-anchored to the boundary every frame, so the
3485
+ * morph stays glued while the user keeps panning.
3486
+ */
3487
+ declare interface MorphPlaceholder {
3488
+ /** Bar center X, bitmap px. */
3489
+ x: number;
3490
+ /** Bar center Y, bitmap px. */
3491
+ y: number;
3492
+ /** Half the body height, bitmap px. */
3493
+ halfHeight: number;
3494
+ /** Body width, bitmap px. */
3495
+ width: number;
3496
+ }
3497
+
2562
3498
  /**
2563
3499
  * Omnivorous `data` shape for line and bar series. Accepts, interchangeably:
2564
3500
  * - `TimePointInput[]` — one auto-named layer (the common single-series case);
@@ -2569,9 +3505,9 @@ export declare const monokaiPro: ThemePreset;
2569
3505
  * Everything normalizes to `SeriesLayer[]` internally (see `toLayers`). Time
2570
3506
  * accepts epoch milliseconds or a `Date` on every point.
2571
3507
  */
2572
- declare type MultiLayerData = TimePointInput[] | SeriesLayer<TimePointInput> | Array<TimePointInput[] | SeriesLayer<TimePointInput>>;
3508
+ export declare type MultiLayerData = TimePointInput[] | SeriesLayer<TimePointInput> | Array<TimePointInput[] | SeriesLayer<TimePointInput>>;
2573
3509
 
2574
- declare const Navigator_2: DefineComponent<__VLS_Props_9, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_9> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
3510
+ declare const Navigator_2: DefineComponent<__VLS_Props_11, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_11> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
2575
3511
  stripRef: HTMLDivElement;
2576
3512
  }, any>;
2577
3513
  export { Navigator_2 as Navigator }
@@ -2663,7 +3599,7 @@ export declare const nightOwl: ThemePreset;
2663
3599
  /** Convert a {@link TimeValue} (number ms or Date) to a millisecond timestamp. */
2664
3600
  export declare function normalizeTime(t: TimeValue): number;
2665
3601
 
2666
- export declare const NumberFlow: DefineComponent<__VLS_Props_10, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_10> & Readonly<{}>, {
3602
+ export declare const NumberFlow: DefineComponent<__VLS_Props_12, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_12> & Readonly<{}>, {
2667
3603
  locale: string;
2668
3604
  spinDuration: number;
2669
3605
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
@@ -2686,7 +3622,7 @@ export declare type OHLCInput = Omit<OHLCData, 'time'> & {
2686
3622
  export declare const oneDarkPro: ThemePreset;
2687
3623
 
2688
3624
  /** Overlay render state passed to {@link SeriesRenderer.drawOverlay}. */
2689
- declare interface OverlayRenderContext {
3625
+ export declare interface OverlayRenderContext {
2690
3626
  scope: BitmapCoordinateSpace;
2691
3627
  timeScale: XScale;
2692
3628
  yScale: YScale;
@@ -2746,6 +3682,13 @@ declare interface PanZoomTarget {
2746
3682
  zoomAt(centerTime: number, factor: number, chartWidth?: number): void;
2747
3683
  }
2748
3684
 
3685
+ /**
3686
+ * Parse an {@link AnimationTime} to milliseconds. Invalid strings throw at
3687
+ * config-resolution time, so a typo surfaces at startup, not silently as zero
3688
+ * animation later. Used once per field in `resolveAnimationsConfig`.
3689
+ */
3690
+ export declare function parseAnimationTime(value: AnimationTime): Milliseconds;
3691
+
2749
3692
  export declare const peachCream: ThemePreset;
2750
3693
 
2751
3694
  /**
@@ -2961,7 +3904,9 @@ declare interface PieOtherOptions {
2961
3904
  color?: string;
2962
3905
  }
2963
3906
 
2964
- export declare const PieSeries: DefineComponent<__VLS_Props_5, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_5> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
3907
+ export declare const PieSeries: DefineComponent<__VLS_Props_6, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_6> & Readonly<{}>, {
3908
+ visible: boolean;
3909
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
2965
3910
 
2966
3911
  /** Series definition for `chart.addSeries` — keeps the chart renderer-agnostic
2967
3912
  * so hosts that never render pies don't bundle this module. */
@@ -2975,6 +3920,16 @@ export declare interface PieSeriesOptions {
2975
3920
  innerRadiusRatio: number;
2976
3921
  /** Gap between slices in degrees. Default: 1.15° (≈ 0.02 rad). */
2977
3922
  padAngle: number;
3923
+ /**
3924
+ * Rounds each slice's corners in CSS pixels — the two where the outer rim
3925
+ * meets the straight edges, plus two more on the inner rim once
3926
+ * `innerRadiusRatio > 0` carves out a donut hole. Default: 3 (matching the
3927
+ * bar/candlestick families); pass 0 for sharp wedges. Thin rings and narrow
3928
+ * slices automatically clamp the radius down to whatever they can fit
3929
+ * without the corners overlapping, so a value that's too large for a given
3930
+ * slice degrades gracefully instead of producing a malformed shape.
3931
+ */
3932
+ cornerRadius?: number;
2978
3933
  /** Display the label shown in the tooltip. */
2979
3934
  label?: string;
2980
3935
  /** Per-slice label rendering on the pie itself. See {@link PieLabelsOptions}. */
@@ -2995,6 +3950,27 @@ export declare interface PieSeriesOptions {
2995
3950
  * value.
2996
3951
  */
2997
3952
  animate?: boolean;
3953
+ /**
3954
+ * Initial-load reveal duration in milliseconds. On the first data seed
3955
+ * (empty → non-empty) slices unfurl clockwise over this total duration,
3956
+ * then the outside labels draw in. Default: `600`.
3957
+ *
3958
+ * ```
3959
+ * // Per-series override:
3960
+ * <PieSeries options={{ entryMs: 900 }} data={data} />
3961
+ *
3962
+ * // Chart-level default:
3963
+ * <ChartContainer animations={{ series: { pie: { entry: 900 } } }}>
3964
+ * <PieSeries data={data} />
3965
+ * </ChartContainer>
3966
+ * ```
3967
+ *
3968
+ * `false` or `0` disables the intro (a chart-level
3969
+ * `animations.series.pie: false` also force-disables it). Bulk re-seeds
3970
+ * of a non-empty series never replay it. Skipped entirely under
3971
+ * `prefers-reduced-motion`.
3972
+ */
3973
+ entryMs?: number | false;
2998
3974
  /**
2999
3975
  * Per-slice radial *depth* gradient — a subtle lightening from the slice
3000
3976
  * center toward its edge that gives the pie a soft 3D sheen. On by default.
@@ -3039,7 +4015,7 @@ export declare interface PieSeriesOptions {
3039
4015
  }
3040
4016
 
3041
4017
  /** A spatial renderer with no time axis (Pie). Has no time-series queries. */
3042
- declare interface PieSeriesRenderer extends BaseSeriesRenderer {
4018
+ export declare interface PieSeriesRenderer extends BaseSeriesRenderer {
3043
4019
  readonly kind: 'pie';
3044
4020
  }
3045
4021
 
@@ -3054,6 +4030,51 @@ export declare interface PieSliceData {
3054
4030
 
3055
4031
  export declare const PieTooltip: __VLS_WithTemplateSlots_5<typeof __VLS_component_5, __VLS_TemplateResult_5["slots"]>;
3056
4032
 
4033
+ /**
4034
+ * One placeholder shape a loading indicator painted, in chart-media pixels
4035
+ * relative to the data boundary — the hand-off currency between an edge
4036
+ * indicator and a series' history reveal. `offsetX` grows away from the
4037
+ * data (into the overshoot zone), so the geometry stays glued to the
4038
+ * boundary while the user keeps panning.
4039
+ */
4040
+ declare interface PlaceholderBar {
4041
+ /** Distance from the data boundary to the bar's center, media px, ≥ 0. */
4042
+ offsetX: number;
4043
+ /** Bar center Y, media px within the plot area. */
4044
+ y: number;
4045
+ /** Half the body height, media px. */
4046
+ halfHeight: number;
4047
+ /** Body width, media px. */
4048
+ width: number;
4049
+ }
4050
+
4051
+ /**
4052
+ * Chart-recorder pen: the reveal front advances at constant speed along the
4053
+ * polyline's arc length (bitmap space), so it decelerates through volatile
4054
+ * stretches and races across flat ones. Falls back to the plain sweep for
4055
+ * stacked series and degenerate paths.
4056
+ */
4057
+ export declare function plotterIntro(): LineIntroFn;
4058
+
4059
+ /**
4060
+ * Payload for `pointClick` / `pointDoubleClick`. `spatialHit` resolves a
4061
+ * no-time-axis series (pie, heatmap, or a custom spatial kind) directly
4062
+ * under the pointer — for time-series series (line/bar/candlestick, or a
4063
+ * custom time-axis kind), resolve the point yourself from `time`, e.g. via
4064
+ * `buildHoverSnapshots(chart, { time: info.time, cacheKey: '…' })` or
4065
+ * `chart.getDataAtTime(seriesId, info.time)`.
4066
+ */
4067
+ export declare interface PointClickInfo {
4068
+ mediaX: number;
4069
+ mediaY: number;
4070
+ time: number;
4071
+ y: number;
4072
+ spatialHit: {
4073
+ seriesId: string;
4074
+ index: number;
4075
+ } | null;
4076
+ }
4077
+
3057
4078
  export declare const quietLight: ThemePreset;
3058
4079
 
3059
4080
  /** Axis-aligned rectangle in media (CSS) coordinates. */
@@ -3064,7 +4085,7 @@ declare interface Rect {
3064
4085
  height: number;
3065
4086
  }
3066
4087
 
3067
- export declare const ReferenceLine: DefineComponent<__VLS_Props_13, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_13> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
4088
+ export declare const ReferenceLine: DefineComponent<__VLS_Props_15, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_15> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
3068
4089
 
3069
4090
  /**
3070
4091
  * A straight reference line across the plot — a horizontal threshold / baseline
@@ -3079,9 +4100,9 @@ export declare interface ReferenceLineConfig {
3079
4100
  value?: number;
3080
4101
  /** Vertical line at this `time` (epoch ms or `Date`). Mutually exclusive with {@link value}. */
3081
4102
  time?: TimeValue;
3082
- /** Line and label-pill color. Default: the theme line color. */
4103
+ /** Line and label-chip accent color. Default: the theme line color. */
3083
4104
  color?: string;
3084
- /** Optional text label drawn in a pill at the line's near end. */
4105
+ /** Optional text label drawn in an annotation chip at the line's near end. */
3085
4106
  label?: string;
3086
4107
  /** Dash style. Default: `'dashed'`. */
3087
4108
  style?: ReferenceLineStyle;
@@ -3106,7 +4127,7 @@ declare interface RegionEntry {
3106
4127
  }
3107
4128
 
3108
4129
  /**
3109
- * Register the four built-in series so the string form
4130
+ * Register the five built-in series so the string form
3110
4131
  * `chart.addSeries('line', …)` resolves. Call it once at startup.
3111
4132
  *
3112
4133
  * Importing this helper pulls every renderer into the bundle — hosts that
@@ -3136,7 +4157,7 @@ export declare function registerSeriesDefinition(def: SeriesDefinition): void;
3136
4157
  * but spatial renderers (Pie) need the raw pixel reservation to keep their
3137
4158
  * layout out of the Title / InfoBar overlay regions.
3138
4159
  */
3139
- declare interface RenderPadding {
4160
+ export declare interface RenderPadding {
3140
4161
  top: number;
3141
4162
  bottom: number;
3142
4163
  }
@@ -3195,6 +4216,14 @@ declare interface RetargetOptions {
3195
4216
  contractMs?: number;
3196
4217
  }
3197
4218
 
4219
+ /**
4220
+ * Elements float up into place from below, fading in along the wave.
4221
+ * Works for both bar and candlestick series.
4222
+ */
4223
+ export declare function riseIntro(options?: {
4224
+ travel?: number;
4225
+ }): WaveIntroFn;
4226
+
3198
4227
  export declare const rosePineDawn: ThemePreset;
3199
4228
 
3200
4229
  /** DEFAULT bar painter (registered as `'rounded'`). Trusts the engine-supplied
@@ -3218,6 +4247,13 @@ export declare interface RoundedRectArgs {
3218
4247
  corners: CornerMask;
3219
4248
  }
3220
4249
 
4250
+ /**
4251
+ * Sample a multi-stop ramp at `t` in [0, 1] with perceptual interpolation
4252
+ * between adjacent stops. A single-stop ramp returns that stop; an empty
4253
+ * ramp returns transparent black (defensive — resolved options never allow it).
4254
+ */
4255
+ export declare function sampleRamp(stops: readonly string[], t: number): string;
4256
+
3221
4257
  export declare const sandDune: ThemePreset;
3222
4258
 
3223
4259
  /** Environment the chart hands a {@link SeriesDefinition} when constructing its renderer. */
@@ -3243,6 +4279,20 @@ export declare interface SeriesDefinition<O = Record<string, unknown>> {
3243
4279
  create(env: SeriesCreateEnv, options: Partial<O>): SeriesRenderer;
3244
4280
  }
3245
4281
 
4282
+ /** Which spatial series (pie, heatmap, or a custom spatial kind) is currently hovered, and its slice/cell info. */
4283
+ export declare interface SeriesHoverInfo {
4284
+ seriesId: string;
4285
+ index: number;
4286
+ info: HoverInfo | null;
4287
+ }
4288
+
4289
+ /**
4290
+ * Discriminant for the {@link SeriesRenderer} union. Open-ended — a custom
4291
+ * series (see {@link CustomSpatialSeriesRenderer} / {@link TimeSeriesRenderer})
4292
+ * picks any string that isn't one of the built-ins.
4293
+ */
4294
+ export declare type SeriesKind = 'candlestick' | 'line' | 'bar' | 'pie' | 'heatmap' | (string & {});
4295
+
3246
4296
  /**
3247
4297
  * A single named (and optionally colored) layer. Carries the layer's display
3248
4298
  * name and color *alongside* its data, so `Tooltip` / `Legend` show per-layer
@@ -3258,7 +4308,7 @@ declare interface SeriesLayer<T> {
3258
4308
  data: T[];
3259
4309
  }
3260
4310
 
3261
- declare interface SeriesRenderContext {
4311
+ export declare interface SeriesRenderContext {
3262
4312
  scope: BitmapCoordinateSpace;
3263
4313
  timeScale: XScale;
3264
4314
  yScale: YScale;
@@ -3282,9 +4332,10 @@ declare interface SeriesRenderContext {
3282
4332
 
3283
4333
  /**
3284
4334
  * Every series renderer is one of these. Discriminated on `kind`: narrow with
3285
- * `kind === 'pie'` (or `!== 'pie'`) to reach the variant-specific surface.
4335
+ * {@link isTimeSeriesRenderer} to reach the time-axis surface — spatial kinds
4336
+ * (pie, heatmap, and any custom spatial kind) have no time-series queries.
3286
4337
  */
3287
- declare type SeriesRenderer = TimeSeriesRenderer | PieSeriesRenderer;
4338
+ export declare type SeriesRenderer = TimeSeriesRenderer | PieSeriesRenderer | HeatmapSeriesRenderer | CustomSpatialSeriesRenderer;
3288
4339
 
3289
4340
  /**
3290
4341
  * Frozen, per-row snapshot of a series at a single point in time. The shape
@@ -3312,8 +4363,8 @@ export declare interface SeriesSnapshot {
3312
4363
  readonly color: string;
3313
4364
  }
3314
4365
 
3315
- /** Supported primary series types. */
3316
- export declare type SeriesType = 'candlestick' | 'line' | 'bar' | 'pie';
4366
+ /** Primary series types. Open-ended — a custom {@link SeriesDefinition} picks any string that isn't a built-in. */
4367
+ export declare type SeriesType = 'candlestick' | 'line' | 'bar' | 'pie' | 'heatmap' | (string & {});
3317
4368
 
3318
4369
  /** Width and height pair. */
3319
4370
  declare interface Size {
@@ -3321,17 +4372,97 @@ declare interface Size {
3321
4372
  height: number;
3322
4373
  }
3323
4374
 
4375
+ /**
4376
+ * "Chart skeleton" — muted placeholder candle shapes with a soft shimmer
4377
+ * band sweeping across them, the classic skeleton-screen pattern adapted for
4378
+ * a time-series stage. The bar nearest the boundary is centered on the real
4379
+ * {@link LoadingIndicatorArgs.edgeValueY} so it still visually picks up
4380
+ * where the chart leaves off; the rest are honest placeholders (a gentle
4381
+ * taper), not a prediction. Falls back to mid-height when no boundary value
4382
+ * is resolvable (e.g. an empty chart).
4383
+ *
4384
+ * Placeholder size tracks {@link LoadingIndicatorArgs.barSpacing} — the
4385
+ * chart's actual current zoom level — so bars don't visually "pop" to a
4386
+ * different size once real data lands; when it isn't resolvable, falls back
4387
+ * to a fixed gap. Wick stubs only draw for `seriesKind === 'candlestick'`
4388
+ * (or when the kind isn't resolvable, since candlestick is the common case);
4389
+ * a `'line'`/`'bar'` series gets a plain placeholder body instead, since a
4390
+ * wick reads as OHLC-specific.
4391
+ */
4392
+ export declare const skeletonLoadingIndicator: LoadingIndicatorFn;
4393
+
4394
+ /**
4395
+ * Skeleton morph: candles that land where the loading indicator's
4396
+ * placeholder bars stood grow out of those exact shapes — geometry eases
4397
+ * from the placeholder body to the real OHLC, fill blends from the muted
4398
+ * placeholder gray to the candle's own color. Candles outside the
4399
+ * placeholder zone (and any reveal with no hand-off, e.g. a custom
4400
+ * indicator that never reports its shapes) play the `fallback` instead —
4401
+ * `fadeIntro()` unless overridden.
4402
+ *
4403
+ * Meant for the `historyReveal` option, paired with an `EdgeLoader` whose
4404
+ * indicator reports placeholders (`skeletonLoadingIndicator` does).
4405
+ */
4406
+ export declare function skeletonMorphIntro(options?: {
4407
+ fallback?: CandleIntroFn;
4408
+ }): CandleIntroFn;
4409
+
3324
4410
  export declare type SliceInfo = HoverInfo;
3325
4411
 
3326
4412
  /** `curve: 'smooth'` — monotone cubic. The in-flight last segment stays straight
3327
4413
  * while the trailing endpoint is growing so the head can't wobble / overshoot. */
3328
4414
  export declare const smoothCurve: LinePainter;
3329
4415
 
4416
+ /**
4417
+ * Snap factory — no animation, no parameters. Generic so it works for both
4418
+ * Y and X. Exposed so power users can opt out of axis motion without
4419
+ * disabling other animations:
4420
+ *
4421
+ * ```
4422
+ * animations: { axis: { y: { curve: snap() } } }
4423
+ * ```
4424
+ */
4425
+ export declare function snap<T extends YRange | VisibleRange = YRange>(): TransitionFactory<T>;
4426
+
3330
4427
  /** Sort order applied to a snapshot list by the helper. */
3331
4428
  export declare type SnapshotSort = 'none' | 'asc' | 'desc';
3332
4429
 
3333
4430
  export declare const solarizedLight: ThemePreset;
3334
4431
 
4432
+ /**
4433
+ * Critically-damped spring transition factory. Generic over the value type
4434
+ * so the same factory works for both Y (`YRange`) and X (`VisibleRange`).
4435
+ *
4436
+ * The factory dispatches at construction time based on the shape of the
4437
+ * initial value:
4438
+ *
4439
+ * - `{ min, max }` → {@link YRangeSpring} (direction-aware ω: expand vs
4440
+ * contract, used by the sticky-Y mechanism).
4441
+ * - `{ from, to }` → {@link VisibleRangeSpring} (single ω, no direction
4442
+ * asymmetry — X has no analog of sticky-Y).
4443
+ *
4444
+ * Both implementations carry velocity through mid-flight retargets so
4445
+ * wheel-zoom sequences and rapid streaming ticks stay continuous.
4446
+ *
4447
+ * Usage:
4448
+ * ```ts
4449
+ * animations: {
4450
+ * axis: {
4451
+ * y: { curve: spring() },
4452
+ * x: { curve: spring() },
4453
+ * },
4454
+ * }
4455
+ * ```
4456
+ *
4457
+ * The engine is the single source of truth for the per-call durations —
4458
+ * settle times come through `RetargetOptions.expandMs` / `contractMs`.
4459
+ */
4460
+ export declare function spring<T extends YRange | VisibleRange = YRange>(): TransitionFactory<T>;
4461
+
4462
+ /** Bars grow from the baseline with a soft ease-out-back overshoot past
4463
+ * their final height before settling. */
4464
+ export declare function springIntro(): BarIntroFn;
4465
+
3335
4466
  /** Stacking mode for bar/line series: off (overlap), normal (stacked), percent (100% stacked). */
3336
4467
  export declare type StackingMode = 'off' | 'normal' | 'percent';
3337
4468
 
@@ -3342,6 +4473,11 @@ export declare const steppedCurve: LinePainter;
3342
4473
  * the pre-feature stroke path. */
3343
4474
  export declare const straightCurve: LinePainter;
3344
4475
 
4476
+ /** Left-to-right draw-on behind a clip edge with a glowing head. */
4477
+ export declare function sweepIntro(options?: {
4478
+ head?: boolean;
4479
+ }): LineIntroFn;
4480
+
3345
4481
  /**
3346
4482
  * Input config for {@link createTheme}. Mirrors the structure of {@link ChartTheme}
3347
4483
  * but everything is optional except `background`. Missing values are derived automatically.
@@ -3361,6 +4497,7 @@ export declare interface ThemeConfig {
3361
4497
  seriesColors?: string[];
3362
4498
  bar?: Partial<NonNullable<ChartTheme['bar']>>;
3363
4499
  pie?: Partial<NonNullable<ChartTheme['pie']>>;
4500
+ heatmap?: Partial<NonNullable<ChartTheme['heatmap']>>;
3364
4501
  bands?: Partial<ChartTheme['bands']>;
3365
4502
  crosshair?: Partial<ChartTheme['crosshair']>;
3366
4503
  axis?: Partial<ChartTheme['axis']>;
@@ -3424,9 +4561,18 @@ declare interface TickTrackerSnapshot {
3424
4561
  readonly isAnimating: boolean;
3425
4562
  }
3426
4563
 
3427
- export declare const TimeAxis: DefineComponent<__VLS_Props_14, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_14> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
3428
- containerRef: HTMLDivElement;
3429
- }, HTMLDivElement>;
4564
+ /** Locale / timezone override for {@link formatTime} / {@link formatDate}. Any field omitted keeps the built-in default. */
4565
+ export declare interface TimeFormatOptions {
4566
+ /** BCP 47 locale tag (e.g. `'de-DE'`). Default: `'en-US'`. */
4567
+ locale?: string;
4568
+ /** IANA timezone name (e.g. `'America/New_York'`). Default: the browser's local timezone. */
4569
+ timeZone?: string;
4570
+ /** 12-hour clock. Default: `false` (24-hour), preserved from the original hardcoded behavior. */
4571
+ hour12?: boolean;
4572
+ }
4573
+
4574
+ /** Custom time-tick formatter, mirroring {@link YScale}'s `ValueFormatter` contract. */
4575
+ export declare type TimeFormatter = (timestamp: number, interval: number) => string;
3430
4576
 
3431
4577
  /** A single time-value data point for line and bar series. Time is a timestamp in milliseconds. */
3432
4578
  export declare interface TimePoint {
@@ -3439,7 +4585,7 @@ export declare type TimePointInput = Omit<TimePoint, 'time'> & {
3439
4585
  time: TimeValue;
3440
4586
  };
3441
4587
 
3442
- export declare const TimeRegion: DefineComponent<__VLS_Props_15, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_15> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
4588
+ export declare const TimeRegion: DefineComponent<__VLS_Props_17, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_17> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
3443
4589
 
3444
4590
  /**
3445
4591
  * A translucent vertical band shading the interval `[from, to]` — Grafana's
@@ -3458,9 +4604,9 @@ export declare interface TimeRegionConfig {
3458
4604
  to?: TimeRegionEnd;
3459
4605
  /** Band fill — any CSS color, typically translucent. Default: a faint tint of `color`. */
3460
4606
  fill?: string;
3461
- /** Optional text label drawn in a pill at the top of the band. */
4607
+ /** Optional text label drawn in an annotation chip at the top of the band. */
3462
4608
  label?: string;
3463
- /** Edge-line and label-pill accent. Default: the theme's muted axis text color. */
4609
+ /** Edge-line and label-chip accent. Default: the theme's muted axis text color. */
3464
4610
  color?: string;
3465
4611
  }
3466
4612
 
@@ -3478,8 +4624,8 @@ export declare type TimeRegionEnd = TimeValue | 'now';
3478
4624
  * `getLastDataPoint` / `getSecondLastDataPoint` / `getVisibleDataPoints` are
3479
4625
  * pinned to layer 0 (see {@link BaseMultiLayerSeries}).
3480
4626
  */
3481
- declare interface TimeSeriesRenderer extends BaseSeriesRenderer {
3482
- readonly kind: 'candlestick' | 'line' | 'bar';
4627
+ export declare interface TimeSeriesRenderer extends BaseSeriesRenderer {
4628
+ readonly kind: 'candlestick' | 'line' | 'bar' | (string & {});
3483
4629
  /** Earliest/latest sample time across all owned layers, or null when empty. */
3484
4630
  getTimeBounds(): {
3485
4631
  first: number;
@@ -3500,6 +4646,9 @@ declare interface TimeSeriesRenderer extends BaseSeriesRenderer {
3500
4646
  } | null;
3501
4647
  }
3502
4648
 
4649
+ /** Custom tick-value generator — replaces the built-in `niceTimeIntervals` tier resolution entirely when installed. */
4650
+ export declare type TimeTickGenerator = (range: XRange, dataInterval: number) => number[];
4651
+
3503
4652
  /**
3504
4653
  * Accepted time input: a timestamp in **milliseconds** (like `Date.now()`) or a `Date` object.
3505
4654
  * `Date` values are converted to milliseconds internally via `Date.getTime()`.
@@ -3550,6 +4699,15 @@ export declare interface TooltipPositionArgs {
3550
4699
  offsetY?: number;
3551
4700
  }
3552
4701
 
4702
+ /**
4703
+ * Blueprint → ink: a faint stroke-only ghost of the whole line shows from
4704
+ * the first frame, while the full-color pass (area included) sweeps across
4705
+ * behind the same front as `'sweep'`.
4706
+ */
4707
+ export declare function traceIntro(options?: {
4708
+ ghostAlpha?: number;
4709
+ }): LineIntroFn;
4710
+
3553
4711
  /**
3554
4712
  * Emit path commands for one run of points onto `env.ctx`. Issues only
3555
4713
  * `moveTo` / `lineTo` / `bezierCurveTo`; it never opens or closes a path, so the
@@ -3584,7 +4742,7 @@ export declare interface TracePathArgs {
3584
4742
  * Other animation math (entry tweens, pulse, axis tick fade) stays
3585
4743
  * engine-fixed.
3586
4744
  */
3587
- declare interface Transition<T> {
4745
+ export declare interface Transition<T> {
3588
4746
  /** Current sampled position. Read by renderers on every frame. */
3589
4747
  readonly current: T;
3590
4748
  /** Active retarget destination. May equal `current` after settle. */
@@ -3610,7 +4768,7 @@ declare interface Transition<T> {
3610
4768
  * Holds the initial value so the produced transition starts pinned to
3611
4769
  * the same value the chart will render on its first frame.
3612
4770
  */
3613
- declare interface TransitionContext<T> {
4771
+ export declare interface TransitionContext<T> {
3614
4772
  initial: T;
3615
4773
  }
3616
4774
 
@@ -3620,7 +4778,7 @@ declare interface TransitionContext<T> {
3620
4778
  * smoothing strategy. Built-in factories: {@link hermite} (Y default),
3621
4779
  * {@link spring} (X default, also valid for Y), {@link snap} (no animation).
3622
4780
  */
3623
- declare type TransitionFactory<T> = (ctx: TransitionContext<T>) => Transition<T>;
4781
+ export declare type TransitionFactory<T> = (ctx: TransitionContext<T>) => Transition<T>;
3624
4782
 
3625
4783
  /** Font family and base font size used across the chart. */
3626
4784
  export declare interface Typography {
@@ -3630,6 +4788,17 @@ export declare interface Typography {
3630
4788
  fontSize: number;
3631
4789
  }
3632
4790
 
4791
+ /**
4792
+ * Amplitude unfold: every value lerps from its layer's visible mean toward
4793
+ * its real value with a soft ease-out-back overshoot, staggered
4794
+ * left-to-right by `stagger` (fraction of the window; default 0.35,
4795
+ * clamped to `[0, 0.9]` — at 1 the rightmost points would never finish
4796
+ * their tween and snap on settle).
4797
+ */
4798
+ export declare function unfoldIntro(options?: {
4799
+ stagger?: number;
4800
+ }): LineIntroFn;
4801
+
3633
4802
  export declare function useChartInstance(): ChartInstance;
3634
4803
 
3635
4804
  export declare function useCrosshairPosition(chart: ChartInstance): Ref<CrosshairPosition | null>;
@@ -3678,6 +4847,9 @@ declare type ValueColor = string | ((value: number) => string);
3678
4847
  /** Signature for a value-to-string formatter (YAxis, YLabel, Pie, Sparkline, NumberFlow). */
3679
4848
  export declare type ValueFormatter = (value: number) => string;
3680
4849
 
4850
+ /** Custom tick-value generator — replaces the built-in {1,2,5}×10^k resolution entirely when installed. */
4851
+ export declare type ValueTickGenerator = (range: YRange) => number[];
4852
+
3681
4853
  /** @deprecated Use {@link XRange} instead. Visible time range of the chart. */
3682
4854
  export declare type VisibleRange = XRange;
3683
4855
 
@@ -3691,7 +4863,7 @@ export declare type VisibleRange = XRange;
3691
4863
  * right by `bars` data intervals. Useful for "show N bars starting
3692
4864
  * here" patterns (warm-up windows for streaming charts, etc.).
3693
4865
  */
3694
- declare type VisibleRangeSpec = number | {
4866
+ export declare type VisibleRangeSpec = number | {
3695
4867
  from: TimeValue;
3696
4868
  to: TimeValue;
3697
4869
  } | {
@@ -3699,6 +4871,70 @@ declare type VisibleRangeSpec = number | {
3699
4871
  bars: number;
3700
4872
  };
3701
4873
 
4874
+ /** Directives shape common to both series (each extends it with its own
4875
+ * element/value callbacks). */
4876
+ export declare interface WaveIntroDirectives {
4877
+ /**
4878
+ * Horizontal clip window in bitmap pixels applied to the whole series
4879
+ * pass. Omitted sides default to the pane edges, so `{ toX }` is a
4880
+ * left-to-right reveal.
4881
+ */
4882
+ clip?: {
4883
+ fromX?: number;
4884
+ toX?: number;
4885
+ };
4886
+ element?: (el: WaveIntroElement) => WaveIntroTransform;
4887
+ }
4888
+
4889
+ /** Per-element fields common to the bar and candlestick intro contracts. */
4890
+ export declare interface WaveIntroElement {
4891
+ /** Eased wave progress for this element, staggered left → right. */
4892
+ progress: number;
4893
+ /** Normalized x-position across the visible window, clamped to `[0, 1]`. */
4894
+ position: number;
4895
+ /** The element's time coordinate. */
4896
+ time: number;
4897
+ }
4898
+
4899
+ /** An intro function built only from the shared fields — assignable to both
4900
+ * `BarIntroFn` and `CandleIntroFn`. */
4901
+ export declare type WaveIntroFn = (frame: WaveIntroFrame) => WaveIntroDirectives;
4902
+
4903
+ /** Frame fields common to the bar and candlestick intro contracts. */
4904
+ export declare interface WaveIntroFrame {
4905
+ /** Linear intro progress in `[0, 1]` over the whole reveal window. */
4906
+ progress: number;
4907
+ /**
4908
+ * Plot-area width in bitmap pixels — the span the time scale maps the
4909
+ * visible range onto (excludes the Y-axis strip sharing the canvas).
4910
+ */
4911
+ width: number;
4912
+ /** Plot-area height in bitmap pixels (excludes the X-axis strip). */
4913
+ height: number;
4914
+ /** Visible time range. */
4915
+ range: VisibleRange;
4916
+ }
4917
+
4918
+ /** Declarative transform understood by both series' element callbacks. */
4919
+ export declare interface WaveIntroTransform {
4920
+ /** Horizontal translation in bitmap px. */
4921
+ offsetX?: number;
4922
+ /** Vertical translation in bitmap px. */
4923
+ offsetY?: number;
4924
+ /** Opacity multiplier in `[0, 1]`. */
4925
+ alpha?: number;
4926
+ }
4927
+
4928
+ /** Two-phase reveal: wicks needle out first as a skeleton, then bodies (and
4929
+ * volume) unfold over them from the open price. */
4930
+ export declare function wickBodyIntro(): CandleIntroFn;
4931
+
4932
+ /**
4933
+ * A hard reveal front sweeps left to right; elements appear fully formed
4934
+ * behind it. Works for both bar and candlestick series.
4935
+ */
4936
+ export declare function wipeIntro(): WaveIntroFn;
4937
+
3702
4938
  /** Configuration for the X (time) axis. */
3703
4939
  export declare interface XAxisConfig {
3704
4940
  /** Height in CSS pixels. Default: 30. */
@@ -3713,7 +4949,7 @@ declare interface XRange {
3713
4949
  to: number;
3714
4950
  }
3715
4951
 
3716
- declare class XScale {
4952
+ export declare class XScale {
3717
4953
  /**
3718
4954
  * Shared fade state for time ticks. Grid lines (canvas) and DOM tick labels
3719
4955
  * read opacity from the same tracker, so a tick fading in/out looks
@@ -3727,6 +4963,12 @@ declare class XScale {
3727
4963
  private dataInterval;
3728
4964
  private labelCountHintValue;
3729
4965
  private minSpacingValue;
4966
+ /** Custom formatter (driven by `setFormat` / a future `<TimeAxis format=…>`). */
4967
+ private customFormat;
4968
+ /** Custom tick generator — bypasses tier resolution in `niceTickValues` when set. */
4969
+ private customTickGenerator;
4970
+ private localeValue;
4971
+ private timeZoneValue;
3730
4972
  private resolvedInterval;
3731
4973
  private lastInterval;
3732
4974
  /**
@@ -3743,6 +4985,28 @@ declare class XScale {
3743
4985
  update(range: XRange, mediaWidth: number, pixelRatio: number, dataInterval?: number): void;
3744
4986
  setLabelCount(n: number | null | undefined): void;
3745
4987
  setMinSpacing(px: number | null | undefined): void;
4988
+ /** Install (or clear) a custom tick-label formatter. */
4989
+ setFormat(fn: TimeFormatter | null): void;
4990
+ /** Read back the currently installed formatter — null when the built-in is active. */
4991
+ getFormat(): TimeFormatter | null;
4992
+ /**
4993
+ * Install (or clear) a custom tick-value generator. When set, it replaces
4994
+ * `niceTimeIntervals` tier resolution entirely — `niceTickValues` calls it
4995
+ * directly with the current range and reports its own tick spacing.
4996
+ */
4997
+ setTickGenerator(fn: TimeTickGenerator | null): void;
4998
+ /** BCP 47 locale applied to the built-in formatter. Ignored while a custom `setFormat` is installed. */
4999
+ setLocale(locale: string | undefined): void;
5000
+ getLocale(): string | undefined;
5001
+ /** IANA timezone applied to the built-in formatter. Ignored while a custom `setFormat` is installed. */
5002
+ setTimeZone(timeZone: string | undefined): void;
5003
+ getTimeZone(): string | undefined;
5004
+ /**
5005
+ * Format a tick timestamp for display. A custom formatter (via
5006
+ * {@link setFormat}) wins; otherwise falls back to the built-in
5007
+ * `formatTime`, applying the installed locale/timezone.
5008
+ */
5009
+ formatX(timestamp: number, interval: number): string;
3746
5010
  private resetHysteresis;
3747
5011
  timeToX(time: number): number;
3748
5012
  timeToBitmapX(time: number): number;
@@ -3770,7 +5034,7 @@ declare class XScale {
3770
5034
  private countTicks;
3771
5035
  }
3772
5036
 
3773
- export declare const YAxis: DefineComponent<__VLS_Props_18, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_18> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
5037
+ export declare const YAxis: DefineComponent<__VLS_Props_20, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_20> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
3774
5038
  containerRef: HTMLDivElement;
3775
5039
  }, HTMLDivElement>;
3776
5040
 
@@ -3788,6 +5052,23 @@ export declare interface YAxisConfig {
3788
5052
 
3789
5053
  export declare const YLabel: __VLS_WithTemplateSlots_8<typeof __VLS_component_8, __VLS_TemplateResult_8["slots"]>;
3790
5054
 
5055
+ /**
5056
+ * Badge motion: `true` (default) glides + counts up + fades in with the intro;
5057
+ * `false` snaps with no easing (the pre-animation behavior); an object tunes
5058
+ * individual parts.
5059
+ */
5060
+ declare type YLabelAnimate = boolean | YLabelAnimateOptions;
5061
+
5062
+ /** Fine-grained badge motion tuning. See the framework `YLabel`'s `animate` prop. */
5063
+ declare interface YLabelAnimateOptions {
5064
+ /** Glide the badge vertically across value jumps instead of snapping. Default `true`. */
5065
+ glide?: boolean;
5066
+ /** Count the value up from the first visible sample to the last during the initial reveal. Default `true`. */
5067
+ countUp?: boolean;
5068
+ /** Settle time (ms) for the vertical glide. Default {@link DEFAULT_SETTLE_MS}. */
5069
+ settleMs?: number;
5070
+ }
5071
+
3791
5072
  /** Direction of the current value vs. previous close. Drives the badge color in the default UI. */
3792
5073
  declare type YLabelDirection = 'up' | 'down' | 'neutral';
3793
5074
 
@@ -3804,7 +5085,7 @@ export declare interface YRange {
3804
5085
  * Maps values to vertical pixel positions (and vice versa).
3805
5086
  * Also provides tick generation and value formatting for the Y axis.
3806
5087
  */
3807
- declare class YScale {
5088
+ export declare class YScale {
3808
5089
  /** Shared fade state for Y ticks; see {@link TimeScale.tickTracker}. */
3809
5090
  readonly tickTracker: AxisTickTracker;
3810
5091
  private min;
@@ -3827,6 +5108,8 @@ declare class YScale {
3827
5108
  private lastRawInterval;
3828
5109
  /** Custom formatter (driven by `<YAxis format=…>`). */
3829
5110
  private customFormat;
5111
+ /** Custom tick generator — bypasses {1,2,5}×10^k resolution in `niceTickValues` when set. */
5112
+ private customTickGenerator;
3830
5113
  private get labelCountHint();
3831
5114
  private get minLabelSpacing();
3832
5115
  /** Recalculate the scale with a new Y range, chart height, and device pixel ratio. */
@@ -3840,6 +5123,12 @@ declare class YScale {
3840
5123
  setFormat(fn: ValueFormatter | null): void;
3841
5124
  /** Read back the currently installed formatter — null when the built-in is active. */
3842
5125
  getFormat(): ValueFormatter | null;
5126
+ /**
5127
+ * Install (or clear) a custom tick-value generator. When set, it replaces
5128
+ * {1,2,5}×10^k resolution entirely — `niceTickValues` calls it directly
5129
+ * with the current range.
5130
+ */
5131
+ setTickGenerator(fn: ValueTickGenerator | null): void;
3843
5132
  /** Convert a value to a Y position in CSS (media) pixels. */
3844
5133
  valueToY(value: number): number;
3845
5134
  /** Convert a value to a Y position in physical (bitmap) pixels. */