@wick-charts/vue 0.1.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +200 -0
  2. package/dist/index.d.ts +1761 -198
  3. package/dist/index.js +4361 -1974
  4. package/package.json +2 -2
package/dist/index.d.ts CHANGED
@@ -1,125 +1,150 @@
1
- import { andromeda } from '@wick-charts/core';
2
- import { AxisBound } from '@wick-charts/core';
3
- import { AxisConfig } from '@wick-charts/core';
4
- import { ayuMirage } from '@wick-charts/core';
5
- import { BarSeriesOptions } from '@wick-charts/core';
6
- import { BarStacking } from '@wick-charts/core';
7
- import { buildTheme } from '@wick-charts/core';
8
- import { CandlestickSeriesOptions } from '@wick-charts/core';
9
- import { catppuccin } from '@wick-charts/core';
10
- import { ChartInstance } from '@wick-charts/core';
11
- import { ChartLayout } from '@wick-charts/core';
12
- import { ChartOptions } from '@wick-charts/core';
13
- import { ChartTheme } from '@wick-charts/core';
14
1
  import { ComponentOptionsMixin } from 'vue';
15
2
  import { ComponentProvideOptions } from 'vue';
16
- import { createTheme } from '@wick-charts/core';
17
- import { CrosshairPosition } from '@wick-charts/core';
18
- import { darkTheme } from '@wick-charts/core';
19
3
  import { DefineComponent } from 'vue';
20
- import { detectInterval } from '@wick-charts/core';
21
- import { dracula } from '@wick-charts/core';
22
- import { formatDate } from '@wick-charts/core';
23
- import { formatTime } from '@wick-charts/core';
24
- import { githubLight } from '@wick-charts/core';
25
- import { gruvbox } from '@wick-charts/core';
26
- import { handwritten } from '@wick-charts/core';
27
- import { highContrast } from '@wick-charts/core';
28
- import { lavenderMist } from '@wick-charts/core';
29
- import { lightPink } from '@wick-charts/core';
30
- import { lightTheme } from '@wick-charts/core';
31
- import { LineData } from '@wick-charts/core';
32
- import { LineSeriesOptions } from '@wick-charts/core';
33
- import { materialPalenight } from '@wick-charts/core';
34
- import { minimalLight } from '@wick-charts/core';
35
- import { mintBreeze } from '@wick-charts/core';
36
- import { monokaiPro } from '@wick-charts/core';
37
- import { nightOwl } from '@wick-charts/core';
38
- import { normalizeTime } from '@wick-charts/core';
39
- import { OHLCData } from '@wick-charts/core';
40
- import { OHLCInput } from '@wick-charts/core';
41
- import { oneDarkPro } from '@wick-charts/core';
42
- import { panda } from '@wick-charts/core';
43
- import { peachCream } from '@wick-charts/core';
44
- import { PieSeriesOptions } from '@wick-charts/core';
45
- import { PieSliceData } from '@wick-charts/core';
46
4
  import { PublicProps } from 'vue';
47
- import { quietLight } from '@wick-charts/core';
48
5
  import { Ref } from 'vue';
49
- import { rosePineDawn } from '@wick-charts/core';
50
- import { sandDune } from '@wick-charts/core';
51
- import { SeriesType } from '@wick-charts/core';
52
6
  import { ShallowRef } from 'vue';
53
- import { solarizedLight } from '@wick-charts/core';
54
- import { StackingMode } from '@wick-charts/core';
55
- import { ThemeConfig } from '@wick-charts/core';
56
- import { themes } from '@wick-charts/core';
57
- import { TimePoint } from '@wick-charts/core';
58
- import { TimePointInput } from '@wick-charts/core';
59
- import { TimeValue } from '@wick-charts/core';
60
- import { Typography } from '@wick-charts/core';
61
- import { VisibleRange } from '@wick-charts/core';
62
- import { XAxisConfig } from '@wick-charts/core';
63
- import { YAxisConfig } from '@wick-charts/core';
64
- import { YRange } from '@wick-charts/core';
65
7
 
66
8
  declare const __VLS_component: DefineComponent<__VLS_Props_3, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_3> & Readonly<{}>, {
67
9
  theme: ChartTheme;
68
10
  }, {}, {}, {}, string, ComponentProvideOptions, false, {
69
11
  containerRef: HTMLDivElement;
12
+ topOverlayRef: HTMLDivElement;
13
+ titleAnchor: HTMLDivElement;
14
+ infoBarAnchor: HTMLDivElement;
15
+ legendRightAnchor: HTMLDivElement;
16
+ legendAnchor: HTMLDivElement;
70
17
  }, HTMLDivElement>;
71
18
 
19
+ declare const __VLS_component_2: DefineComponent<__VLS_Props_6, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_6> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
20
+
21
+ declare const __VLS_component_3: DefineComponent<__VLS_Props_7, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_7> & Readonly<{}>, {
22
+ position: "bottom" | "right";
23
+ mode: LegendMode;
24
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
25
+
26
+ declare const __VLS_component_4: DefineComponent<__VLS_Props_9, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_9> & Readonly<{}>, {
27
+ format: ValueFormatter;
28
+ mode: PieLegendMode;
29
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
30
+
31
+ declare const __VLS_component_5: DefineComponent<__VLS_Props_10, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_10> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
32
+ containerRef: HTMLDivElement;
33
+ }, any>;
34
+
35
+ declare const __VLS_component_6: DefineComponent<__VLS_Props_11, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_11> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
36
+
37
+ declare const __VLS_component_7: DefineComponent<__VLS_Props_12, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_12> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
38
+ containerRef: HTMLDivElement;
39
+ }, any>;
40
+
41
+ declare const __VLS_component_8: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
42
+
43
+ declare const __VLS_component_9: DefineComponent<__VLS_Props_14, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_14> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
44
+
72
45
  declare type __VLS_Props = {
73
46
  data: TimePoint[][];
74
47
  options?: Partial<BarSeriesOptions>;
75
- label?: string;
48
+ /** Stable series ID — same value across remounts. */
49
+ id?: string;
76
50
  };
77
51
 
78
52
  declare type __VLS_Props_10 = {
79
- seriesId: string;
53
+ /**
54
+ * Owning series id. **Optional** — when omitted, the first visible pie
55
+ * series is picked.
56
+ */
57
+ seriesId?: string;
58
+ /** Custom formatter for the slice value. Default: shared `formatCompact`. */
59
+ format?: ValueFormatter;
60
+ };
61
+
62
+ declare type __VLS_Props_11 = {
63
+ sub?: string;
64
+ };
65
+
66
+ declare type __VLS_Props_12 = {
67
+ sort?: SnapshotSort;
68
+ format?: TooltipFormatter;
69
+ };
70
+
71
+ declare type __VLS_Props_13 = {
72
+ /** Custom tick-label formatter. Overrides the built-in range-adaptive default. */
73
+ format?: ValueFormatter;
74
+ };
75
+
76
+ declare type __VLS_Props_14 = {
77
+ /**
78
+ * Owning series id. **Optional** — when omitted, the first visible
79
+ * single-layer time series is picked, falling back to the first visible
80
+ * multi-layer time series.
81
+ */
82
+ seriesId?: string;
80
83
  color?: string;
84
+ /** Custom formatter; routed through NumberFlow's `formatter` so the digit animation still plays. */
85
+ format?: ValueFormatter;
81
86
  };
82
87
 
83
88
  declare type __VLS_Props_2 = {
84
- data: OHLCData[];
89
+ data: OHLCInput[];
85
90
  options?: Partial<CandlestickSeriesOptions>;
91
+ /** Stable series ID — same value across remounts. */
92
+ id?: string;
86
93
  };
87
94
 
88
95
  declare type __VLS_Props_3 = {
89
96
  theme?: ChartTheme;
90
97
  axis?: AxisConfig;
98
+ /** Background grid configuration. Default: `{ visible: true }`. */
99
+ grid?: {
100
+ visible: boolean;
101
+ };
91
102
  };
92
103
 
93
104
  declare type __VLS_Props_4 = {
94
105
  data: TimePoint[][];
95
106
  options?: Partial<LineSeriesOptions>;
96
- label?: string;
107
+ /** Stable series ID — same value across remounts. */
108
+ id?: string;
97
109
  };
98
110
 
99
111
  declare type __VLS_Props_5 = {
100
112
  data: PieSliceData[];
101
113
  options?: Partial<PieSeriesOptions>;
114
+ /** Stable series ID — same value across remounts. */
115
+ id?: string;
102
116
  };
103
117
 
104
118
  declare type __VLS_Props_6 = {
105
- value: number;
106
- format?: Intl.NumberFormatOptions;
107
- locale?: string;
108
- spinDuration?: number;
119
+ sort?: SnapshotSort;
120
+ format?: TooltipFormatter;
109
121
  };
110
122
 
111
123
  declare type __VLS_Props_7 = {
112
- seriesId: string;
113
- format?: 'value' | 'percent';
124
+ items?: LegendItemOverride[];
125
+ position?: 'bottom' | 'right';
126
+ /** `'isolate'` shows only the clicked item; `'solo'` is a @deprecated alias. */
127
+ mode?: LegendMode;
114
128
  };
115
129
 
116
130
  declare type __VLS_Props_8 = {
117
- seriesId: string;
131
+ value: number;
132
+ /** Value-to-string formatter. Defaults to the current locale's `Intl.NumberFormat`. */
133
+ format?: (value: number) => string;
134
+ locale?: string;
135
+ spinDuration?: number;
118
136
  };
119
137
 
120
138
  declare type __VLS_Props_9 = {
139
+ /**
140
+ * Owning series id. **Optional** — when omitted, the first visible pie
141
+ * series is picked.
142
+ */
121
143
  seriesId?: string;
122
- sort?: TooltipSort;
144
+ /** 'value' shows only the value, 'percent' only the percent, 'both' shows both. Default: 'both'. */
145
+ mode?: PieLegendMode;
146
+ /** Custom formatter for the absolute slice value. */
147
+ format?: ValueFormatter;
123
148
  };
124
149
 
125
150
  declare function __VLS_template(): {
@@ -129,172 +154,1587 @@ declare function __VLS_template(): {
129
154
  };
130
155
  refs: {
131
156
  containerRef: HTMLDivElement;
157
+ topOverlayRef: HTMLDivElement;
158
+ titleAnchor: HTMLDivElement;
159
+ infoBarAnchor: HTMLDivElement;
160
+ legendRightAnchor: HTMLDivElement;
161
+ legendAnchor: HTMLDivElement;
132
162
  };
133
163
  rootEl: HTMLDivElement;
134
164
  };
135
165
 
136
- declare type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
137
-
138
- declare type __VLS_WithTemplateSlots<T, S> = T & {
139
- new (): {
140
- $slots: S;
166
+ declare function __VLS_template_2(): {
167
+ attrs: Partial<{}>;
168
+ slots: Readonly<{
169
+ default?(ctx: {
170
+ snapshots: readonly SeriesSnapshot[];
171
+ time: number;
172
+ isHover: boolean;
173
+ }): unknown;
174
+ }> & {
175
+ default?(ctx: {
176
+ snapshots: readonly SeriesSnapshot[];
177
+ time: number;
178
+ isHover: boolean;
179
+ }): unknown;
141
180
  };
181
+ refs: {};
182
+ rootEl: any;
142
183
  };
143
184
 
144
- export { andromeda }
145
-
146
- export { AxisBound }
147
-
148
- export { AxisConfig }
149
-
150
- export { ayuMirage }
151
-
152
- export declare const BarSeries: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
153
- seriesId: (id: string) => any;
154
- }, string, PublicProps, Readonly<__VLS_Props> & Readonly<{
155
- onSeriesId?: ((id: string) => any) | undefined;
156
- }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
157
-
158
- export { BarSeriesOptions }
159
-
160
- export { BarStacking }
161
-
162
- export { buildTheme }
163
-
164
- export declare const CandlestickSeries: DefineComponent<__VLS_Props_2, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
165
- seriesId: (id: string) => any;
166
- }, string, PublicProps, Readonly<__VLS_Props_2> & Readonly<{
167
- onSeriesId?: ((id: string) => any) | undefined;
168
- }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
169
-
170
- export { CandlestickSeriesOptions }
185
+ declare function __VLS_template_3(): {
186
+ attrs: Partial<{}>;
187
+ slots: Readonly<{
188
+ default?(ctx: {
189
+ items: readonly LegendItem[];
190
+ }): unknown;
191
+ }> & {
192
+ default?(ctx: {
193
+ items: readonly LegendItem[];
194
+ }): unknown;
195
+ };
196
+ refs: {};
197
+ rootEl: any;
198
+ };
171
199
 
172
- export { catppuccin }
200
+ declare function __VLS_template_4(): {
201
+ attrs: Partial<{}>;
202
+ slots: Readonly<{
203
+ default?(ctx: {
204
+ slices: readonly SliceInfo[];
205
+ mode: PieLegendMode;
206
+ format: ValueFormatter;
207
+ }): unknown;
208
+ }> & {
209
+ default?(ctx: {
210
+ slices: readonly SliceInfo[];
211
+ mode: PieLegendMode;
212
+ format: ValueFormatter;
213
+ }): unknown;
214
+ };
215
+ refs: {};
216
+ rootEl: any;
217
+ };
173
218
 
174
- export declare const ChartContainer: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
219
+ declare function __VLS_template_5(): {
220
+ attrs: Partial<{}>;
221
+ slots: Readonly<{
222
+ default?(ctx: {
223
+ info: HoverInfo;
224
+ format: ValueFormatter;
225
+ }): unknown;
226
+ }> & {
227
+ default?(ctx: {
228
+ info: HoverInfo;
229
+ format: ValueFormatter;
230
+ }): unknown;
231
+ };
232
+ refs: {
233
+ containerRef: HTMLDivElement;
234
+ };
235
+ rootEl: any;
236
+ };
175
237
 
176
- export { ChartInstance }
238
+ declare function __VLS_template_6(): {
239
+ attrs: Partial<{}>;
240
+ slots: {
241
+ default?(_: {}): any;
242
+ };
243
+ refs: {};
244
+ rootEl: any;
245
+ };
177
246
 
178
- export { ChartLayout }
247
+ declare function __VLS_template_7(): {
248
+ attrs: Partial<{}>;
249
+ slots: Readonly<{
250
+ default?(ctx: {
251
+ snapshots: readonly SeriesSnapshot[];
252
+ time: number;
253
+ }): unknown;
254
+ }> & {
255
+ default?(ctx: {
256
+ snapshots: readonly SeriesSnapshot[];
257
+ time: number;
258
+ }): unknown;
259
+ };
260
+ refs: {
261
+ containerRef: HTMLDivElement;
262
+ };
263
+ rootEl: any;
264
+ };
179
265
 
180
- export { ChartOptions }
266
+ declare function __VLS_template_8(): {
267
+ attrs: Partial<{}>;
268
+ slots: Readonly<{
269
+ default?(ctx: {
270
+ snapshots: readonly SeriesSnapshot[];
271
+ time: number;
272
+ isHover: boolean;
273
+ }): unknown;
274
+ }> & {
275
+ default?(ctx: {
276
+ snapshots: readonly SeriesSnapshot[];
277
+ time: number;
278
+ isHover: boolean;
279
+ }): unknown;
280
+ };
281
+ refs: {};
282
+ rootEl: any;
283
+ };
181
284
 
182
- export { ChartTheme }
285
+ declare function __VLS_template_9(): {
286
+ attrs: Partial<{}>;
287
+ slots: Readonly<{
288
+ default?(ctx: {
289
+ value: number;
290
+ y: number;
291
+ bgColor: string;
292
+ isLive: boolean;
293
+ direction: YLabelDirection;
294
+ format: ValueFormatter;
295
+ }): unknown;
296
+ }> & {
297
+ default?(ctx: {
298
+ value: number;
299
+ y: number;
300
+ bgColor: string;
301
+ isLive: boolean;
302
+ direction: YLabelDirection;
303
+ format: ValueFormatter;
304
+ }): unknown;
305
+ };
306
+ refs: {};
307
+ rootEl: any;
308
+ };
183
309
 
184
- export { createTheme }
310
+ declare type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
185
311
 
186
- export declare const Crosshair: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
312
+ declare type __VLS_TemplateResult_2 = ReturnType<typeof __VLS_template_2>;
187
313
 
188
- export { CrosshairPosition }
314
+ declare type __VLS_TemplateResult_3 = ReturnType<typeof __VLS_template_3>;
189
315
 
190
- export { darkTheme }
316
+ declare type __VLS_TemplateResult_4 = ReturnType<typeof __VLS_template_4>;
191
317
 
192
- export { detectInterval }
318
+ declare type __VLS_TemplateResult_5 = ReturnType<typeof __VLS_template_5>;
193
319
 
194
- export { dracula }
320
+ declare type __VLS_TemplateResult_6 = ReturnType<typeof __VLS_template_6>;
195
321
 
196
- export { formatDate }
322
+ declare type __VLS_TemplateResult_7 = ReturnType<typeof __VLS_template_7>;
197
323
 
198
- export { formatTime }
324
+ declare type __VLS_TemplateResult_8 = ReturnType<typeof __VLS_template_8>;
199
325
 
200
- export { githubLight }
326
+ declare type __VLS_TemplateResult_9 = ReturnType<typeof __VLS_template_9>;
201
327
 
202
- export { gruvbox }
328
+ declare type __VLS_WithTemplateSlots<T, S> = T & {
329
+ new (): {
330
+ $slots: S;
331
+ };
332
+ };
203
333
 
204
- export { handwritten }
334
+ declare type __VLS_WithTemplateSlots_2<T, S> = T & {
335
+ new (): {
336
+ $slots: S;
337
+ };
338
+ };
205
339
 
206
- export { highContrast }
340
+ declare type __VLS_WithTemplateSlots_3<T, S> = T & {
341
+ new (): {
342
+ $slots: S;
343
+ };
344
+ };
207
345
 
208
- export { lavenderMist }
346
+ declare type __VLS_WithTemplateSlots_4<T, S> = T & {
347
+ new (): {
348
+ $slots: S;
349
+ };
350
+ };
209
351
 
210
- export { lightPink }
352
+ declare type __VLS_WithTemplateSlots_5<T, S> = T & {
353
+ new (): {
354
+ $slots: S;
355
+ };
356
+ };
211
357
 
212
- export { lightTheme }
358
+ declare type __VLS_WithTemplateSlots_6<T, S> = T & {
359
+ new (): {
360
+ $slots: S;
361
+ };
362
+ };
213
363
 
214
- export { LineData }
364
+ declare type __VLS_WithTemplateSlots_7<T, S> = T & {
365
+ new (): {
366
+ $slots: S;
367
+ };
368
+ };
215
369
 
216
- export declare const LineSeries: DefineComponent<__VLS_Props_4, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
217
- seriesId: (id: string) => any;
218
- }, string, PublicProps, Readonly<__VLS_Props_4> & Readonly<{
219
- onSeriesId?: ((id: string) => any) | undefined;
220
- }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
370
+ declare type __VLS_WithTemplateSlots_8<T, S> = T & {
371
+ new (): {
372
+ $slots: S;
373
+ };
374
+ };
221
375
 
222
- export { LineSeriesOptions }
376
+ declare type __VLS_WithTemplateSlots_9<T, S> = T & {
377
+ new (): {
378
+ $slots: S;
379
+ };
380
+ };
223
381
 
224
- export { materialPalenight }
382
+ export declare const andromeda: ThemePreset;
383
+
384
+ /**
385
+ * Chart-level animation configuration. Split into two independent domains so
386
+ * per-series defaults can't bleed into viewport-interaction timings:
387
+ *
388
+ * - `points` — animations applied to data: per-series entrance tween, live-
389
+ * tracking smoothing of the last candle/bar/line value, pulse cadence.
390
+ * These values act as defaults for each series. Per-series options always
391
+ * win unless the chart-level category is explicitly `false`, in which case
392
+ * the whole category is forced off.
393
+ *
394
+ * - `viewport` — animations applied to viewport interactions: post-gesture
395
+ * rebound duration and Y-axis range smoothing.
396
+ *
397
+ * User-initiated pan/zoom (wheel, drag, touch) always applies instantly. The
398
+ * latency of an exponential chase reads as laggy in practice. API-driven
399
+ * transitions (`fitToData`, `scrollToEnd`) and post-gesture rebound still
400
+ * tween via their own fixed-duration ease-out.
401
+ */
402
+ declare interface AnimationsConfig {
403
+ /**
404
+ * Data-series animations. `false` disables every point animation (entrance,
405
+ * live-smoothing, pulse) across every series. An object overrides individual
406
+ * categories; omitted fields fall back to the built-in defaults.
407
+ */
408
+ points?: false | {
409
+ /** Per-point entrance duration (ms). `false`/`0` disables. Default: 400. */
410
+ enterMs?: AnimationTime;
411
+ /**
412
+ * Exponential-smoothing time constant (ms) for live last-value chase.
413
+ * `false`/`0` disables smoothing — the last point snaps to the target.
414
+ * Default: 70 ms (equivalent to the legacy `liveSmoothRate = 14`).
415
+ */
416
+ smoothMs?: AnimationTime;
417
+ /** Pulse cycle period (ms) for the line last-point halo. Default: 600. */
418
+ pulseMs?: AnimationTime;
419
+ };
420
+ /**
421
+ * Viewport interaction animations. `false` disables both rebound and Y-axis
422
+ * smoothing — viewport changes snap instantly.
423
+ */
424
+ viewport?: false | {
425
+ /** Rebound (snap-back) duration after pan/zoom overshoot (ms). Default: 350. */
426
+ reboundMs?: AnimationTime;
427
+ /**
428
+ * Y-axis range transition scale. **Frame-count-based, calibrated at
429
+ * 60 Hz — not wall-clock ms.** Each render frame closes
430
+ * `min(1, 16 / yAxisMs)` of the remaining gap. Default 80 ≈ the
431
+ * legacy 0.2-per-frame closure. `false` / `0` snaps the Y range
432
+ * instantly. Unlike `smoothMs` / `entryMs` / `reboundMs`, the
433
+ * perceptual duration scales with frame time on refresh rates far
434
+ * from 60 Hz.
435
+ */
436
+ yAxisMs?: AnimationTime;
437
+ };
438
+ }
439
+
440
+ /** Options passed when creating a new {@link ChartInstance}. */
441
+ /**
442
+ * Time-value or boolean used throughout the animation API. `false` disables
443
+ * the category; a number configures its duration/time-constant in milliseconds
444
+ * (`0` also disables, useful when the caller wants a number shape).
445
+ */
446
+ declare type AnimationTime = number | false;
447
+
448
+ /**
449
+ * Defines a bound for the Y axis.
450
+ *
451
+ * - `"auto"` — fully automatic (default)
452
+ * - `number` — static value, e.g. `0` or `100`
453
+ * - `string` — percentage offset from the auto value, e.g. `"+10%"`, `"-5%"`
454
+ * - `(values: number[]) => number` — custom function receiving all visible values
455
+ */
456
+ export declare type AxisBound = 'auto' | number | string | ((values: number[]) => number);
457
+
458
+ /** Grouped axis configuration for both axes. */
459
+ export declare interface AxisConfig {
460
+ y?: YAxisConfig;
461
+ x?: XAxisConfig;
462
+ }
463
+
464
+ export declare const ayuMirage: ThemePreset;
465
+
466
+ /**
467
+ * Entrance animation styles for bars.
468
+ * - `'none'` — no animation.
469
+ * - `'fade'` — opacity 0→1.
470
+ * - `'grow'` — height grows from baseline.
471
+ * - `'slide'` — translates in from the right with a fade.
472
+ * - `'fade-grow'` *(default)* — fade + grow combined.
473
+ */
474
+ declare type BarEntryAnimation = 'none' | 'fade' | 'grow' | 'slide' | 'fade-grow';
475
+
476
+ export declare const BarSeries: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
477
+
478
+ /** Visual options for a bar series. */
479
+ export declare interface BarSeriesOptions {
480
+ /** Display label shown in the tooltip (e.g. "Volume"). */
481
+ label?: string;
482
+ /** One color per layer. */
483
+ colors: string[];
484
+ barWidthRatio: number;
485
+ /** Stacking mode. Default: 'off'. */
486
+ stacking: StackingMode;
487
+ /**
488
+ * Entrance animation style for newly appended bars. Style is specific to
489
+ * the bar series; there is no chart-level override for style — only for
490
+ * duration. Default: `'fade-grow'`.
491
+ *
492
+ * @see entryMs — cross-linked duration for this animation.
493
+ */
494
+ entryAnimation?: BarEntryAnimation;
495
+ /** @deprecated Use {@link entryAnimation} instead. */
496
+ enterAnimation?: BarEntryAnimation;
497
+ /**
498
+ * Entrance animation duration in milliseconds. `false` or `0` disables the
499
+ * per-bar entrance (equivalent to `entryAnimation: 'none'`). Omit to inherit
500
+ * from {@link AnimationsConfig.points}.`entryMs` (default 400).
501
+ *
502
+ * When `animations.points.entryMs` is `false` at the chart level, the
503
+ * entrance is forced off regardless of this field.
504
+ *
505
+ * @see BarSeriesOptions.entryAnimation
506
+ */
507
+ entryMs?: number | false;
508
+ /** @deprecated Use {@link entryMs} instead. */
509
+ enterMs?: number | false;
510
+ /**
511
+ * Exponential-smoothing time constant (ms) for live-tracking the last
512
+ * bar's value under `updateLastPoint`. `0` or `false` snaps directly to the
513
+ * target (no smoothing). Omit to inherit from
514
+ * {@link AnimationsConfig.points}.`smoothMs` (default 70 ms).
515
+ *
516
+ * When `animations.points.smoothMs` is `false` at the chart level, smoothing
517
+ * is forced off regardless of this field.
518
+ */
519
+ smoothMs?: number | false;
520
+ }
521
+
522
+ /** @deprecated Use {@link StackingMode} instead. */
523
+ export declare type BarStacking = StackingMode;
524
+
525
+ /**
526
+ * Snapshot every visible series / layer at `time`. Used by hover overlays
527
+ * (`InfoBar` in hover mode, `Tooltip`). Hidden series and hidden layers are
528
+ * skipped automatically — the returned array reflects what the chart would
529
+ * actually be drawing.
530
+ *
531
+ * The result is cached per `(chart, cacheKey)` slot; as long as
532
+ * `chart.getOverlayVersion()` hasn't changed and `time`/`sort` match the
533
+ * cached call, the **same reference** is returned. This makes
534
+ * `React.memo((a, b) => a.snapshots === b.snapshots)` skip renders on
535
+ * crosshair moves that stay within one data point.
536
+ */
537
+ export declare function buildHoverSnapshots(chart: ChartInstance, args: BuildHoverSnapshotsArgs): readonly SeriesSnapshot[];
538
+
539
+ export declare interface BuildHoverSnapshotsArgs {
540
+ /** Timestamp to resolve each series at. Typically `crosshair.time`. */
541
+ time: number;
542
+ /** Sort the output by numeric value. Default: `'none'`. */
543
+ sort?: SnapshotSort;
544
+ /**
545
+ * Cache bucket key. Distinct buckets (e.g. `'tooltip'`, `'infobar-hover'`)
546
+ * let separate overlays cache independently so they don't invalidate each
547
+ * other on every call.
548
+ */
549
+ cacheKey: string;
550
+ }
551
+
552
+ /**
553
+ * Snapshot every visible series / layer at its own last point. For
554
+ * multi-layer renderers each layer contributes its own `time`, so ragged
555
+ * streams (layer 1 newer than layer 0) show correctly instead of stalling
556
+ * at the primary layer's timestamp.
557
+ *
558
+ * Cached by `(chart, cacheKey)` + `sort`, invalidated on
559
+ * `chart.getOverlayVersion()` bump. `time` is not an input, so the slot is
560
+ * stored with `time: null`.
561
+ */
562
+ export declare function buildLastSnapshots(chart: ChartInstance, args: BuildLastSnapshotsArgs): readonly SeriesSnapshot[];
563
+
564
+ export declare interface BuildLastSnapshotsArgs {
565
+ sort?: SnapshotSort;
566
+ cacheKey: string;
567
+ }
568
+
569
+ /**
570
+ * Entrance animation styles for candlesticks (shown when a new candle appears via `appendData`).
571
+ * - `'none'` — no animation.
572
+ * - `'fade'` — opacity 0→1.
573
+ * - `'unfold'` — body scales from the open line outward.
574
+ * - `'slide'` — translates in from the right with a fade.
575
+ * - `'fade-unfold'` *(default)* — fade + unfold combined; the default because a lone fade is
576
+ * hard to notice in streaming demos, while the body-unfold gives a clear visual anchor.
577
+ */
578
+ declare type CandlestickEntryAnimation = 'none' | 'fade' | 'unfold' | 'slide' | 'fade-unfold';
579
+
580
+ export declare const CandlestickSeries: DefineComponent<__VLS_Props_2, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_2> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
581
+
582
+ /** Visual options for a candlestick series. */
583
+ export declare interface CandlestickSeriesOptions {
584
+ /** Display label shown in the tooltip. */
585
+ label?: string;
586
+ upColor: string;
587
+ downColor: string;
588
+ wickUpColor: string;
589
+ wickDownColor: string;
590
+ /** Width of candle body as a fraction of the available bar slot (0-1). */
591
+ bodyWidthRatio: number;
592
+ /** Apply a subtle vertical gradient to candle bodies. Default: true. */
593
+ bodyGradient?: boolean;
594
+ /** @deprecated Use {@link bodyGradient} instead. */
595
+ candleGradient?: boolean;
596
+ /**
597
+ * Entrance animation style for newly appended candles. Style is specific to
598
+ * the candlestick; there is no chart-level override for style — only for
599
+ * duration. Default: `'unfold'`.
600
+ *
601
+ * @see entryMs — cross-linked duration for this animation.
602
+ */
603
+ entryAnimation?: CandlestickEntryAnimation;
604
+ /** @deprecated Use {@link entryAnimation} instead. */
605
+ enterAnimation?: CandlestickEntryAnimation;
606
+ /**
607
+ * Entrance animation duration in milliseconds. `false` or `0` disables the
608
+ * per-candle entrance (equivalent to `entryAnimation: 'none'`). Omit to
609
+ * inherit from {@link AnimationsConfig.points}.`entryMs` (default 400).
610
+ *
611
+ * When `animations.points.entryMs` is `false` at the chart level, the
612
+ * entrance is forced off regardless of this field.
613
+ *
614
+ * @see CandlestickSeriesOptions.entryAnimation
615
+ */
616
+ entryMs?: number | false;
617
+ /** @deprecated Use {@link entryMs} instead. */
618
+ enterMs?: number | false;
619
+ /**
620
+ * Exponential-smoothing time constant (ms) for live-tracking the last
621
+ * candle's O/H/L/C under `updateLastPoint`. `0` or `false` snaps directly
622
+ * to the target (no smoothing). Omit to inherit from
623
+ * {@link AnimationsConfig.points}.`smoothMs` (default 70 ms).
624
+ *
625
+ * When `animations.points.smoothMs` is `false` at the chart level, smoothing
626
+ * is forced off regardless of this field.
627
+ */
628
+ smoothMs?: number | false;
629
+ }
630
+
631
+ export declare const catppuccin: ThemePreset;
225
632
 
226
- export { minimalLight }
633
+ export declare const ChartContainer: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
227
634
 
228
- export { mintBreeze }
635
+ /** Events emitted by {@link ChartInstance}. */
636
+ declare interface ChartEvents {
637
+ crosshairMove: (pos: CrosshairPosition | null) => void;
638
+ viewportChange: () => void;
639
+ dataUpdate: () => void;
640
+ seriesChange: () => void;
641
+ /**
642
+ * Fired whenever any state that affects **overlay components** (InfoBar,
643
+ * Tooltip, Legend, YLabel, PieLegend, PieTooltip) changes. Superset of
644
+ * `dataUpdate` and `seriesChange` — also fires on visibility toggles,
645
+ * series option changes, and theme swaps. Overlay components should
646
+ * subscribe to this instead of stacking multiple listeners.
647
+ */
648
+ overlayChange: () => void;
649
+ }
650
+
651
+ /**
652
+ * Core chart controller. Manages series, viewport, scales, and rendering.
653
+ * Create one per chart container and call {@link destroy} on unmount.
654
+ */
655
+ export declare class ChartInstance extends EventEmitter<ChartEvents> {
656
+ #private;
657
+ /** Maps time values to horizontal pixel coordinates. */
658
+ readonly timeScale: TimeScale;
659
+ /** Maps price/value to vertical pixel coordinates. */
660
+ readonly yScale: YScale;
661
+ get yAxisWidth(): number;
662
+ get xAxisHeight(): number;
663
+ constructor(container: HTMLElement, options?: ChartOptions);
664
+ /** Add a candlestick (OHLC) series and return its unique ID. */
665
+ addCandlestickSeries(options?: Partial<CandlestickSeriesOptions & {
666
+ id?: string;
667
+ }>): string;
668
+ /** Add a line series and return its unique ID. */
669
+ addLineSeries(options?: Partial<LineSeriesOptions & {
670
+ layers?: number;
671
+ id?: string;
672
+ }>): string;
673
+ /** Add a bar series and return its unique ID. */
674
+ addBarSeries(options?: Partial<BarSeriesOptions & {
675
+ layers?: number;
676
+ id?: string;
677
+ }>): string;
678
+ /** Add a pie/donut series. Set `innerRadiusRatio > 0` for donut. */
679
+ addPieSeries(options?: Partial<PieSeriesOptions & {
680
+ id?: string;
681
+ }>): string;
682
+ /** Remove a series by ID and clean up its resources. */
683
+ removeSeries(id: string): void;
684
+ /**
685
+ * Replace all data for a series.
686
+ *
687
+ * - Single-layer series (candlestick, single-layer line/bar, pie): pass `data` directly.
688
+ * - Multi-layer series (line/bar with multiple layers): pass `layerIndex` to target a specific layer.
689
+ *
690
+ * For line/bar accepts `TimePointInput[]` (time may be `Date`); for candlestick accepts `OHLCInput[]`;
691
+ * for pie accepts `PieSliceData[]`. Time fields are normalized internally.
692
+ */
693
+ setSeriesData(id: string, data: unknown, layerIndex?: number): void;
694
+ /** Append a new data point to the end of a series (real-time tick). */
695
+ appendData(id: string, point: OHLCInput | TimePointInput, layerIndex?: number): void;
696
+ /** Update the last data point of a series in place (e.g. live candle update). */
697
+ updateData(id: string, point: OHLCInput | TimePointInput, layerIndex?: number): void;
698
+ /** Update visual options (color, width, etc.) for an existing series. */
699
+ updateSeriesOptions(id: string, options: Partial<CandlestickSeriesOptions> | Partial<LineSeriesOptions> | Partial<BarSeriesOptions> | Partial<PieSeriesOptions>): void;
700
+ /**
701
+ * Batch multiple updates: suppress recomputes until `fn` returns. Exceptions
702
+ * inside `fn` still flush the batch so counters don't leak across calls.
703
+ */
704
+ batch(fn: () => void): void;
705
+ /** Show or hide a series. Hidden series are not rendered and excluded from Y-range. */
706
+ setSeriesVisible(seriesId: string, visible: boolean): void;
707
+ isSeriesVisible(seriesId: string): boolean;
708
+ /** Show or hide a specific layer within a multi-layer series. */
709
+ setLayerVisible(seriesId: string, layerIndex: number, visible: boolean): void;
710
+ isLayerVisible(seriesId: string, layerIndex: number): boolean;
711
+ /** Auto-fit the viewport to show all data across every series. */
712
+ fitContent(): void;
713
+ getVisibleRange(): VisibleRange;
714
+ /**
715
+ * Imperatively set the visible time range.
716
+ *
717
+ * Two forms:
718
+ * - `{ from, to }` — explicit millisecond range. Cancels any in-flight
719
+ * animation and applies immediately. Auto-scroll stays on only if the
720
+ * tail is inside the new range (mirrors pan semantics).
721
+ * - `number N` — shorthand for "show the last N bars from the tail".
722
+ * Resolved against the current data bounds and data interval; keeps
723
+ * auto-scroll on so streaming ticks continue to track the tail.
724
+ * No-op if data hasn't loaded yet.
725
+ *
726
+ * Typical use: on mount, zoom to the last N bars while keeping the full
727
+ * buffer available for pan-back history inspection.
728
+ */
729
+ setVisibleRange(range: VisibleRange | number): void;
730
+ getYRange(): YRange;
731
+ getCrosshairPosition(): CrosshairPosition | null;
732
+ /** Get the last visible value and whether the absolute last point is on screen. */
733
+ getLastValue(seriesId: string): {
734
+ value: number;
735
+ isLive: boolean;
736
+ } | null;
737
+ /** Get the second-to-last value, useful for computing change. */
738
+ getPreviousClose(seriesId: string): number | null;
739
+ getLastData(seriesId: string): OHLCData | TimePoint | null;
740
+ /** Find the data point closest to the given timestamp within one data interval. */
741
+ getDataAtTime(seriesId: string, time: number): OHLCData | TimePoint | null;
742
+ /**
743
+ * Get all layers' data at a given time for multi-layer series (Bar/Line
744
+ * with stacking). Each entry carries the owning `layerIndex` and the
745
+ * snapped sample time — callers must not derive layer identity from the
746
+ * array index, because hidden layers are filtered out.
747
+ */
748
+ getLayerSnapshots(seriesId: string, time: number): {
749
+ layerIndex: number;
750
+ time: number;
751
+ value: number;
752
+ color: string;
753
+ }[] | null;
754
+ getSeriesIds(): string[];
755
+ /**
756
+ * Type of a registered series, or `null` for unknown ids. `'pie'` for
757
+ * `PieRenderer`; everything else is a time-series (`'time'`).
758
+ */
759
+ getSeriesType(seriesId: string): 'pie' | 'time' | null;
760
+ /**
761
+ * Filter `getSeriesIds()` by renderer type. `'pie'` returns pie series,
762
+ * `'time'` returns line/bar/candlestick.
763
+ *
764
+ * - `opts.visibleOnly` — exclude series with `isSeriesVisible=false`; for
765
+ * multi-layer series also exclude when every layer is hidden.
766
+ * - `opts.singleLayerOnly` — exclude series with more than one layer.
767
+ * Useful for YLabel fallback priority (stick to a single line first).
768
+ */
769
+ getSeriesIdsByType(type: 'pie' | 'time', opts?: {
770
+ visibleOnly?: boolean;
771
+ singleLayerOnly?: boolean;
772
+ }): string[];
773
+ /**
774
+ * Cumulative top last-value for stacked series — the point a YLabel badge
775
+ * anchors to on the rendered stack head. Falls back to `getLastValue` for
776
+ * series without stacked concepts (Candlestick, single-layer Line/Bar).
777
+ * Returns `null` for unknown ids or empty series.
778
+ */
779
+ getStackedLastValue(seriesId: string): {
780
+ value: number;
781
+ isLive: boolean;
782
+ } | null;
783
+ /**
784
+ * Per-layer last snapshots with each layer's own `time`. Returns `null`
785
+ * for single-layer renderers or when no visible layer has data. Used by
786
+ * overlay components that must display every layer in last-mode even
787
+ * when layers advance at different rates (ragged streams).
788
+ */
789
+ getLayerLastSnapshots(seriesId: string): {
790
+ layerIndex: number;
791
+ time: number;
792
+ value: number;
793
+ color: string;
794
+ }[] | null;
795
+ /** Get the primary display color for a series. */
796
+ getSeriesColor(seriesId: string): string | null;
797
+ getSeriesLabel(seriesId: string): string | undefined;
798
+ /** Get per-layer colors for a series. Returns null for single-layer non-bar/line series. */
799
+ getSeriesLayers(seriesId: string): {
800
+ color: string;
801
+ }[] | null;
802
+ /** Get all slices with computed colors and percentages. Returns null for series without slice data (e.g. candlestick, line, bar). */
803
+ getSliceInfo(seriesId: string): SliceInfo[] | null;
804
+ /** Get hover info (label/value/percent/color) for the currently hovered element, or null. */
805
+ getHoverInfo(seriesId: string): HoverInfo | null;
806
+ /** Apply a new theme and update series colors where appropriate. */
807
+ setTheme(theme: ChartTheme): void;
808
+ getTheme(): ChartTheme;
809
+ /** Update axis configuration and re-render. */
810
+ setAxis(config: AxisConfig): void;
811
+ /**
812
+ * Apply label-density knobs driven by `<YAxis labelCount=… minLabelSpacing=…>`
813
+ * — kept separate from {@link setAxis} so component props don't force a
814
+ * Y-animation reset. Triggers a viewportChange + repaint so static charts
815
+ * react without waiting for pan/zoom.
816
+ */
817
+ setYAxisLabelDensity(params: {
818
+ labelCount?: number | null;
819
+ minLabelSpacing?: number | null;
820
+ }): void;
821
+ /** Label-density knobs for the time axis — mirror of {@link setYAxisLabelDensity}. */
822
+ setTimeAxisLabelDensity(params: {
823
+ labelCount?: number | null;
824
+ minLabelSpacing?: number | null;
825
+ }): void;
826
+ getMediaSize(): Size;
827
+ /** Returns layout metrics for the chart area, Y axis, and time axis. */
828
+ getLayout(): ChartLayout;
829
+ getDataInterval(): number;
830
+ /**
831
+ * Update viewport padding at runtime. Refits the visible time range to
832
+ * current data bounds **only when horizontal padding (left/right) changes**
833
+ * — vertical padding only affects the Y-range computation, so touching it
834
+ * shouldn't reset the user's zoom / auto-scroll state. This matters when
835
+ * a wrapper re-applies padding reactively (e.g. in response to a Title /
836
+ * TooltipLegend ResizeObserver).
837
+ */
838
+ setPadding(padding: ChartOptions['padding']): void;
839
+ /** Show or hide the background grid. Takes effect on the next render frame. */
840
+ setGrid(grid: {
841
+ visible: boolean;
842
+ }): void;
843
+ /**
844
+ * Set the visual state for one side of the chart. Typically called in
845
+ * response to the `onEdgeReached` callback:
846
+ * - `loading` while a history fetch is in flight,
847
+ * - `no-data` once the fetch confirmed there's nothing more,
848
+ * - `idle` when the host no longer wants any edge affordance.
849
+ * The state persists until replaced. `has-more` is accepted for API
850
+ * symmetry and currently renders identically to `idle`.
851
+ */
852
+ setEdgeState(side: EdgeSide, state: EdgeState): void;
853
+ /** Read the current host-declared state for a given edge. */
854
+ getEdgeState(side: EdgeSide): EdgeState;
855
+ /** Notify chart that a YLabel is present (affects right padding). */
856
+ setYLabel(has: boolean): void;
857
+ private updateViewportPadding;
858
+ /** Tear down the chart: cancel animations, remove listeners, and detach the canvas. */
859
+ destroy(): void;
860
+ /** The attached performance monitor, or `null` when instrumentation is disabled. */
861
+ getPerfMonitor(): PerfMonitor | null;
862
+ /** Compute the earliest and latest timestamps across all series. */
863
+ private getDataBounds;
864
+ private onDataChanged;
865
+ private updateDataInterval;
866
+ private updateYRange;
867
+ /** Resolve an {@link AxisBound} to a concrete numeric value. */
868
+ private resolveBound;
869
+ /**
870
+ * Lightweight scale sync: updates timeScale/yScale from current viewport state
871
+ * without advancing the Y smoothing animation. Called from the viewport 'change'
872
+ * handler so DOM axis components always read fresh coordinates on re-render.
873
+ */
874
+ private syncScales;
875
+ private updateScales;
876
+ /** Expensive: background, grid, all series. Only on data/viewport/resize change. */
877
+ private renderMain;
878
+ /** Cheap overlay: crosshair, nearest-point dots, pulse animation, edge indicator. */
879
+ private renderOverlay;
880
+ private drawEdgeIndicators;
881
+ /**
882
+ * Pick the boundary time to anchor the edge indicator at. Prefer the
883
+ * cached value emitted by the most recent `edgeReached` — that's the
884
+ * *exact* point the user overshot. Fall back to the current data edge
885
+ * when no gesture has fired yet (host might invoke `setEdgeState`
886
+ * directly on mount to show a "no-data" marker from the start).
887
+ */
888
+ private resolveEdgeBoundary;
889
+ }
890
+
891
+ /** Layout metrics describing the chart area, Y axis, and time axis sizes. */
892
+ export declare interface ChartLayout {
893
+ chartArea: Rect;
894
+ yAxisWidth: number;
895
+ xAxisHeight: number;
896
+ }
897
+
898
+ export declare interface ChartOptions {
899
+ theme?: ChartTheme;
900
+ axis?: AxisConfig;
901
+ /**
902
+ * Viewport padding. `top`/`bottom` are in pixels. `left`/`right` accept either pixels (`50`)
903
+ * or data intervals (`{ intervals: 3 }`). Defaults: `{ top: 20, bottom: 20, right: { intervals: 3 }, left: { intervals: 0 } }`.
904
+ */
905
+ padding?: {
906
+ top?: number;
907
+ bottom?: number;
908
+ right?: number | {
909
+ intervals: number;
910
+ };
911
+ left?: number | {
912
+ intervals: number;
913
+ };
914
+ };
915
+ /** Enable zoom, pan, and crosshair interactions. Defaults to true. */
916
+ interactive?: boolean;
917
+ /** Background grid configuration. Default: `{ visible: true }`. */
918
+ grid?: {
919
+ visible: boolean;
920
+ };
921
+ /**
922
+ * Animation control. Split into `points` (data-series animations) and
923
+ * `viewport` (pan/zoom rebound + Y-axis smoothing). See
924
+ * {@link AnimationsConfig} for the full shape and defaults.
925
+ *
926
+ * Shorthands:
927
+ * - `animations: true` (or omitted) uses built-in defaults.
928
+ * - `animations: false` disables every animation category.
929
+ * - `animations: { points: false }` disables all data-series animations.
930
+ * - `animations: { viewport: false }` disables rebound + Y-axis smoothing.
931
+ *
932
+ * Per-series options (`enterMs`, `smoothMs`, etc.) override chart-level
933
+ * defaults unless the category is explicitly `false` — then the chart-
934
+ * level gate wins.
935
+ */
936
+ animations?: boolean | AnimationsConfig;
937
+ /**
938
+ * Invoked after the user releases a pan/zoom gesture that pulled the
939
+ * viewport past a data edge by more than 10% of the visible range. Hosts
940
+ * typically respond by prefetching more history and calling
941
+ * {@link ChartInstance.setEdgeState} to show a spinner or "no more data"
942
+ * indicator at the corresponding edge.
943
+ */
944
+ onEdgeReached?: (info: EdgeReachedInfo) => void;
945
+ /**
946
+ * Runtime performance instrumentation. Opt-in — absent by default so the
947
+ * hot render path stays free of timing/counting overhead.
948
+ *
949
+ * - `false` / omitted — no instrumentation, no HUD, byte-identical to a perf-free build.
950
+ * - `true` — create an internal {@link PerfMonitor} and mount a visible HUD overlay.
951
+ * - `{ hud: true, ...options }` — same, with monitor options forwarded.
952
+ * - `{ hud: false, ...options }` — instrument but do not render a HUD (useful when
953
+ * the host app consumes stats via `monitor.onFrame` and renders its own UI).
954
+ * - `PerfMonitor` instance — attach to a pre-constructed monitor. Useful when several
955
+ * charts share one telemetry sink. HUD defaults to off in this mode.
956
+ */
957
+ perf?: boolean | PerfMonitor | (PerfMonitorOptions & {
958
+ hud?: boolean;
959
+ monitor?: PerfMonitor;
960
+ });
961
+ }
962
+
963
+ /**
964
+ * Complete visual theme for a chart instance.
965
+ * Controls colors for every visual element: background, series, axes, crosshair, tooltip, etc.
966
+ */
967
+ export declare interface ChartTheme {
968
+ /** Page/container background */
969
+ background: string;
970
+ /** Chart area gradient [top, bottom] — subtle vignette for depth */
971
+ chartGradient: [string, string];
972
+ typography: Typography;
973
+ /** Grid line appearance in the chart area. */
974
+ grid: {
975
+ color: string;
976
+ style: 'solid' | 'dashed' | 'dotted';
977
+ };
978
+ /** OHLC candlestick body and wick colors. */
979
+ candlestick: {
980
+ upColor: string;
981
+ downColor: string;
982
+ wickUpColor: string;
983
+ wickDownColor: string;
984
+ };
985
+ /** Default line series appearance including area gradient fill. */
986
+ line: {
987
+ color: string;
988
+ width: number;
989
+ areaTopColor: string;
990
+ areaBottomColor: string;
991
+ };
992
+ /** Color palette for multi-series charts (stacked bars, overlays). */
993
+ seriesColors: string[];
994
+ /** Bollinger band / envelope fill colors. */
995
+ bands: {
996
+ upper: string;
997
+ lower: string;
998
+ };
999
+ /** Crosshair line and axis label styling. */
1000
+ crosshair: {
1001
+ color: string;
1002
+ labelBackground: string;
1003
+ labelTextColor: string;
1004
+ };
1005
+ /** Axis tick label styling. */
1006
+ axis: {
1007
+ textColor: string;
1008
+ };
1009
+ /** Floating label shown at the current value level on the Y axis. */
1010
+ yLabel: {
1011
+ upBackground: string;
1012
+ downBackground: string;
1013
+ neutralBackground: string;
1014
+ textColor: string;
1015
+ };
1016
+ /** Hover tooltip styling. */
1017
+ tooltip: {
1018
+ background: string;
1019
+ textColor: string;
1020
+ borderColor: string;
1021
+ };
1022
+ }
229
1023
 
230
- export { monokaiPro }
1024
+ export declare function computeTooltipPosition(args: TooltipPositionArgs): TooltipPosition;
231
1025
 
232
- export { nightOwl }
1026
+ /**
1027
+ * Build a complete {@link ThemePreset} from a partial config.
1028
+ * Only `background` is required — everything else is derived from it.
1029
+ */
1030
+ export declare function createTheme(config: ThemeConfig): ThemePreset;
233
1031
 
234
- export { normalizeTime }
1032
+ export declare const Crosshair: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
235
1033
 
236
- export declare const NumberFlow: DefineComponent<__VLS_Props_6, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_6> & Readonly<{}>, {
1034
+ /** Crosshair position in both pixel and data space. */
1035
+ export declare interface CrosshairPosition {
1036
+ /** X position in CSS pixels relative to the chart container. */
1037
+ mediaX: number;
1038
+ /** Y position in CSS pixels relative to the chart container. */
1039
+ mediaY: number;
1040
+ /** Snapped time value (timestamp in milliseconds) under the crosshair. */
1041
+ time: number;
1042
+ /** Y (value) under the crosshair. */
1043
+ y: number;
1044
+ }
1045
+
1046
+ export declare const darkTheme: ChartTheme;
1047
+
1048
+ export declare function detectInterval(times: number[]): number;
1049
+
1050
+ export declare const dracula: ThemePreset;
1051
+
1052
+ /** Payload for {@link ChartOptions.onEdgeReached}. */
1053
+ declare interface EdgeReachedInfo {
1054
+ side: EdgeSide;
1055
+ /** Time units the user pulled past the soft bound. */
1056
+ overshoot: number;
1057
+ /** Soft-bound timestamp that was crossed (dataStart - leftPad or dataEnd + rightPad). */
1058
+ boundaryTime: number;
1059
+ }
1060
+
1061
+ /** Which data side the user pulled past during a gesture. */
1062
+ declare type EdgeSide = 'left' | 'right';
1063
+
1064
+ /**
1065
+ * Host-controlled visual state for a chart edge:
1066
+ * - `idle`: nothing rendered (default).
1067
+ * - `loading`: a subtle spinner appears in the overshoot area.
1068
+ * - `no-data`: a dashed boundary line + "No more data" label appears at the data edge.
1069
+ * - `has-more`: reserved — currently behaves like `idle`. Use when more data exists but is not being fetched.
1070
+ */
1071
+ declare type EdgeState = 'idle' | 'loading' | 'no-data' | 'has-more';
1072
+
1073
+ declare class EventEmitter<Events = Record<string, Listener>> {
1074
+ private listeners;
1075
+ on<K extends string & keyof Events>(event: K, listener: Events[K] & Listener): void;
1076
+ off<K extends string & keyof Events>(event: K, listener: Events[K] & Listener): void;
1077
+ protected emit<K extends string & keyof Events>(event: K, ...args: Events[K] extends (...a: infer A) => any ? A : never): void;
1078
+ removeAllListeners(): void;
1079
+ }
1080
+
1081
+ /**
1082
+ * Compact notation for large magnitudes (K / M / B / T) with adaptive
1083
+ * precision for values below 1. Default decimal count for the compact
1084
+ * suffixes can be overridden via `opts.decimals`.
1085
+ */
1086
+ export declare function formatCompact(v: number, opts?: {
1087
+ decimals?: number;
1088
+ }): string;
1089
+
1090
+ export declare function formatDate(timestamp: number): string;
1091
+
1092
+ /**
1093
+ * Full-precision display that adapts decimal count to the value's magnitude.
1094
+ * No K/M/B compression — callers wanting a short label should use
1095
+ * `formatCompact` instead.
1096
+ */
1097
+ export declare function formatPriceAdaptive(v: number): string;
1098
+
1099
+ export declare function formatTime(timestamp: number, interval: number): string;
1100
+
1101
+ declare type FrameKind = 'main' | 'overlay';
1102
+
1103
+ declare interface FrameTimingSample {
1104
+ /** Wall-clock ms for the most recent frame. */
1105
+ last: number;
1106
+ /** Median frame time over the rolling window. */
1107
+ p50: number;
1108
+ /** Tail frame time (worst 5%) — useful for spotting stutter. */
1109
+ p95: number;
1110
+ }
1111
+
1112
+ export declare const githubLight: ThemePreset;
1113
+
1114
+ export declare const gruvbox: ThemePreset;
1115
+
1116
+ export declare const handwritten: ThemePreset;
1117
+
1118
+ export declare const highContrast: ThemePreset;
1119
+
1120
+ /** Shape returned by {@link SeriesRenderer.getHoverInfo} / per-slice entries of {@link SeriesRenderer.getSliceInfo}. */
1121
+ export declare interface HoverInfo {
1122
+ label: string;
1123
+ value: number;
1124
+ percent: number;
1125
+ color: string;
1126
+ }
1127
+
1128
+ export declare const InfoBar: __VLS_WithTemplateSlots_2<typeof __VLS_component_2, __VLS_TemplateResult_2["slots"]>;
1129
+
1130
+ export declare const lavenderMist: ThemePreset;
1131
+
1132
+ export declare const Legend: __VLS_WithTemplateSlots_3<typeof __VLS_component_3, __VLS_TemplateResult_3["slots"]>;
1133
+
1134
+ /**
1135
+ * Canonical legend item — the unit every framework Legend passes to its
1136
+ * scoped slot (and the shape the built-in default UI consumes).
1137
+ *
1138
+ * Each item is **self-contained**: it carries its own identity and
1139
+ * pre-bound `toggle` / `isolate` closures, so slot code can freely sort,
1140
+ * filter, or remap items without risking a click on one row mutating the
1141
+ * wrong series.
1142
+ *
1143
+ * - `id` — row key for list rendering (React `key`, Vue `:key`,
1144
+ * Svelte `each … (key)`). Guaranteed unique within the array.
1145
+ * - `seriesId` — owning series id, **never includes a layer suffix**.
1146
+ * Use this for filtering/grouping; not unique across multi-layer rows.
1147
+ * - `layerIndex` — layer within a multi-layer series; `undefined` for
1148
+ * single-layer rows.
1149
+ * - `isDisabled` — current toggled-off state, derived from
1150
+ * `isSeriesVisible` / `isLayerVisible` plus local isolate-state in the
1151
+ * Legend component.
1152
+ */
1153
+ export declare interface LegendItem {
1154
+ readonly id: string;
1155
+ readonly seriesId: string;
1156
+ readonly layerIndex?: number;
1157
+ readonly label: string;
1158
+ readonly color: string;
1159
+ readonly isDisabled: boolean;
1160
+ /** Toggle just this item's visibility. */
1161
+ readonly toggle: () => void;
1162
+ /** Show only this item; calling again reveals everything (isolate/unisolate). */
1163
+ readonly isolate: () => void;
1164
+ }
1165
+
1166
+ /**
1167
+ * Minimal visual shape the {@link LegendProps.items} override accepts. The
1168
+ * canonical {@link LegendItem} (re-exported from `@wick-charts/core`) carries
1169
+ * the full identity + closures; those aren't meaningful for a pre-baked,
1170
+ * non-interactive legend.
1171
+ */
1172
+ declare interface LegendItemOverride {
1173
+ label: string;
1174
+ color: string;
1175
+ }
1176
+
1177
+ declare type LegendMode = 'toggle' | 'isolate' | 'solo';
1178
+
1179
+ export declare const lightPink: ThemePreset;
1180
+
1181
+ export declare const lightTheme: ChartTheme;
1182
+
1183
+ /** @deprecated Use {@link TimePoint} instead. */
1184
+ export declare type LineData = TimePoint;
1185
+
1186
+ /**
1187
+ * Entrance animation styles for new line points.
1188
+ * - `'none'` — new segments appear instantly.
1189
+ * - `'grow'` *(default)* — trailing segment reveals left-to-right.
1190
+ * - `'fade'` — geometry fixed; trailing segment strokes in with alpha 0→1.
1191
+ */
1192
+ declare type LineEntryAnimation = 'none' | 'grow' | 'fade';
1193
+
1194
+ export declare const LineSeries: DefineComponent<__VLS_Props_4, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_4> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
1195
+
1196
+ /** Visual options for a line series. */
1197
+ export declare interface LineSeriesOptions {
1198
+ /** Display label shown in the tooltip (e.g. "BTC", "Revenue"). */
1199
+ label?: string;
1200
+ /** One color per layer. */
1201
+ colors: string[];
1202
+ /** Stroke width in CSS pixels. Default: 1. `0` hides the line stroke. */
1203
+ strokeWidth: number;
1204
+ /** Area-fill configuration. Default: `{ visible: true }`. */
1205
+ area: {
1206
+ visible: boolean;
1207
+ };
1208
+ /**
1209
+ * Whether to show an animated pulsing dot at the last data point.
1210
+ */
1211
+ pulse: boolean;
1212
+ /**
1213
+ * Pulse cycle period in milliseconds. `false`/`0` disables the halo (both
1214
+ * the drawing and the associated animation loop). Omit to inherit from
1215
+ * {@link AnimationsConfig.points}.`pulseMs` (default 600 ms). When
1216
+ * `animations.points.pulseMs` is `false` at the chart level the pulse is
1217
+ * forced off regardless of this field.
1218
+ */
1219
+ pulseMs?: number | false;
1220
+ /** Stacking mode. Default: 'off'. */
1221
+ stacking: StackingMode;
1222
+ /**
1223
+ * Entrance animation style for new points. Style is specific to the line
1224
+ * series; there is no chart-level override for style — only for duration.
1225
+ * Default: `'grow'`.
1226
+ *
1227
+ * @see entryMs — cross-linked duration for this animation.
1228
+ */
1229
+ entryAnimation?: LineEntryAnimation;
1230
+ /** @deprecated Use {@link entryAnimation} instead. */
1231
+ enterAnimation?: LineEntryAnimation;
1232
+ /**
1233
+ * Entrance animation duration in milliseconds. `false` or `0` disables the
1234
+ * per-point entrance (equivalent to `entryAnimation: 'none'`). Omit to
1235
+ * inherit from {@link AnimationsConfig.points}.`entryMs` (default 400).
1236
+ *
1237
+ * When `animations.points.entryMs` is `false` at the chart level, the
1238
+ * entrance is forced off regardless of this field.
1239
+ *
1240
+ * @see LineSeriesOptions.entryAnimation
1241
+ */
1242
+ entryMs?: number | false;
1243
+ /** @deprecated Use {@link entryMs} instead. */
1244
+ enterMs?: number | false;
1245
+ /**
1246
+ * Exponential-smoothing time constant (ms) for live-tracking the last
1247
+ * point's value under `updateLastPoint`. `0` or `false` snaps directly to
1248
+ * the target (no smoothing). Omit to inherit from
1249
+ * {@link AnimationsConfig.points}.`smoothMs` (default 70 ms).
1250
+ *
1251
+ * When `animations.points.smoothMs` is `false` at the chart level, smoothing
1252
+ * is forced off regardless of this field.
1253
+ */
1254
+ smoothMs?: number | false;
1255
+ }
1256
+
1257
+ declare type Listener = (...args: any[]) => void;
1258
+
1259
+ export declare const materialPalenight: ThemePreset;
1260
+
1261
+ export declare const minimalLight: ThemePreset;
1262
+
1263
+ export declare const mintBreeze: ThemePreset;
1264
+
1265
+ export declare const monokaiPro: ThemePreset;
1266
+
1267
+ export declare const nightOwl: ThemePreset;
1268
+
1269
+ /** Convert a {@link TimeValue} (number ms or Date) to a millisecond timestamp. */
1270
+ export declare function normalizeTime(t: TimeValue): number;
1271
+
1272
+ export declare const NumberFlow: DefineComponent<__VLS_Props_8, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_8> & Readonly<{}>, {
237
1273
  locale: string;
238
1274
  spinDuration: number;
239
1275
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
240
1276
 
241
- export { OHLCData }
242
-
243
- export { OHLCInput }
244
-
245
- export { oneDarkPro }
246
-
247
- export { panda }
248
-
249
- export { peachCream }
250
-
251
- export declare const PieLegend: DefineComponent<__VLS_Props_7, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_7> & Readonly<{}>, {
252
- format: "value" | "percent";
253
- }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
254
-
255
- export declare const PieSeries: DefineComponent<__VLS_Props_5, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
256
- seriesId: (id: string) => any;
257
- }, string, PublicProps, Readonly<__VLS_Props_5> & Readonly<{
258
- onSeriesId?: ((id: string) => any) | undefined;
259
- }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
260
-
261
- export { PieSeriesOptions }
262
-
263
- export { PieSliceData }
264
-
265
- export declare const PieTooltip: DefineComponent<__VLS_Props_8, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_8> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
266
-
267
- export { quietLight }
268
-
269
- export { rosePineDawn }
270
-
271
- export { sandDune }
272
-
273
- export { SeriesType }
274
-
275
- export { solarizedLight }
276
-
277
- export { StackingMode }
1277
+ /** A single OHLC(V) candlestick data point. Time is a timestamp in milliseconds. */
1278
+ export declare interface OHLCData {
1279
+ time: number;
1280
+ open: number;
1281
+ high: number;
1282
+ low: number;
1283
+ close: number;
1284
+ volume?: number;
1285
+ }
1286
+
1287
+ /** {@link OHLCData} that also accepts `Date` for the time field. */
1288
+ export declare type OHLCInput = Omit<OHLCData, 'time'> & {
1289
+ time: TimeValue;
1290
+ };
278
1291
 
279
- export { ThemeConfig }
1292
+ export declare const oneDarkPro: ThemePreset;
1293
+
1294
+ export declare const panda: ThemePreset;
1295
+
1296
+ export declare const peachCream: ThemePreset;
1297
+
1298
+ /**
1299
+ * Collects per-frame timing, draw-call counts, per-series render ms, and heap
1300
+ * usage. All collection sites short-circuit to no-ops when no monitor is
1301
+ * attached to the chart, so the zero-perf path remains byte-identical to a
1302
+ * monitorless build.
1303
+ *
1304
+ * Not thread-safe (there are no threads) — a single chart writes to a single
1305
+ * monitor. Multiple charts may share a monitor, but `perSeries` keys must be
1306
+ * unique across charts or samples will collide.
1307
+ */
1308
+ declare class PerfMonitor {
1309
+ /** Draw-call tally map for the main layer. Mutated in place by the counting context; cleared at the start of each frame. */
1310
+ readonly drawCallsMain: Map<string, number>;
1311
+ /** Draw-call tally map for the overlay layer. Same contract as `drawCallsMain`. */
1312
+ readonly drawCallsOverlay: Map<string, number>;
1313
+ private readonly mainMs;
1314
+ private readonly overlayMs;
1315
+ private readonly mainStamps;
1316
+ private readonly overlayStamps;
1317
+ private readonly perSeriesMs;
1318
+ private readonly perSeriesStamps;
1319
+ private readonly listeners;
1320
+ private readonly windowMs;
1321
+ private readonly maxSamples;
1322
+ private readonly heapInterval;
1323
+ private heapCounter;
1324
+ private heapMb;
1325
+ private mainFrameCount;
1326
+ private overlayFrameCount;
1327
+ /** Most recent frame timestamp across either layer — anchor for age-based trimming. */
1328
+ private lastStamp;
1329
+ constructor(options?: PerfMonitorOptions);
1330
+ /** Clear the draw-call tally for the given layer. Call at the start of each frame. */
1331
+ resetDrawCalls(kind: FrameKind): void;
1332
+ /** Record a completed frame's wall-clock duration and emit stats to subscribers. */
1333
+ recordFrame(kind: FrameKind, ms: number, timestamp: number): void;
1334
+ /** Record one series renderer's time slice inside the main pass. Called from inside `renderMain`, so the enclosing `recordFrame('main', …)` trim takes care of age. */
1335
+ recordSeries(id: string, ms: number, timestamp?: number): void;
1336
+ /** Drop samples older than `windowMs` behind the newest recorded stamp, and enforce the hard per-layer cap. */
1337
+ private trimAll;
1338
+ /** Subscribe to per-frame stat snapshots. Returns an unsubscribe function. */
1339
+ onFrame(cb: (stats: PerfStats) => void): () => void;
1340
+ /** Snapshot current stats. Safe to call outside frames. */
1341
+ getStats(): PerfStats;
1342
+ destroy(): void;
1343
+ private sampleHeap;
1344
+ }
1345
+
1346
+ declare interface PerfMonitorOptions {
1347
+ /**
1348
+ * Age of the rolling window in milliseconds. Samples older than this are
1349
+ * dropped from FPS / percentile calculations. Defaults to 5000 (5 seconds).
1350
+ *
1351
+ * Tradeoff: smaller windows react faster to load changes but are noisier;
1352
+ * larger windows smooth spikes but lag. 5 s is a balance — it's long
1353
+ * enough that p95 is meaningful and short enough that numbers visibly
1354
+ * settle when you stop interacting.
1355
+ */
1356
+ windowMs?: number;
1357
+ /**
1358
+ * Hard cap on retained samples per layer. Belt-and-suspenders against a
1359
+ * runaway high-FPS layer growing the buffer unbounded. Defaults to 2000.
1360
+ */
1361
+ maxSamples?: number;
1362
+ /** Sample `performance.memory` every Nth main frame. Defaults to 30 (~0.5s at 60fps). */
1363
+ heapSampleEveryNFrames?: number;
1364
+ }
1365
+
1366
+ declare interface PerfStats {
1367
+ /**
1368
+ * Main-layer renders per second, derived from the interval between recent main
1369
+ * frames. Charts render on demand (data change, pan, zoom, resize, streaming
1370
+ * tick), so `0` during an idle chart is normal — not a stutter. `0` until two
1371
+ * frames have been recorded.
1372
+ */
1373
+ mainRendersPerSec: number;
1374
+ /** Same as {@link mainRendersPerSec} but for the overlay (crosshair + pulse) layer. */
1375
+ overlayRendersPerSec: number;
1376
+ /** @deprecated Alias for {@link mainRendersPerSec}. Kept for older consumers. */
1377
+ fps: number;
1378
+ mainFrameMs: FrameTimingSample;
1379
+ overlayFrameMs: FrameTimingSample;
1380
+ /** Total frames recorded per layer. Lets consumers distinguish "no data yet" from "drew once and ms is 0". */
1381
+ frameCount: {
1382
+ main: number;
1383
+ overlay: number;
1384
+ };
1385
+ drawCalls: {
1386
+ main: Record<string, number>;
1387
+ overlay: Record<string, number>;
1388
+ };
1389
+ perSeries: Record<string, FrameTimingSample>;
1390
+ /** `null` on browsers without `performance.memory` (Firefox, Safari). */
1391
+ heapMb: number | null;
1392
+ }
1393
+
1394
+ /**
1395
+ * How per-slice labels are drawn on a pie/donut.
1396
+ *
1397
+ * - `'outside'` (default) — a short leader line runs from the slice edge to a
1398
+ * text block outside the pie. Reserves horizontal space so the pie shrinks
1399
+ * to fit. Matches the canonical infographic look.
1400
+ * - `'inside'` — text sits on the slice. Auto-skipped when the measured text
1401
+ * won't fit the slice chord at the label radius.
1402
+ * - `'none'` — the renderer draws no labels (PieLegend / PieTooltip still work).
1403
+ */
1404
+ declare interface PieLabelsOptions {
1405
+ /** Default: `'outside'`. */
1406
+ mode?: 'inside' | 'outside' | 'none';
1407
+ /** What to display per label. Default: `'both'` (e.g. `"BTC 42%"`). */
1408
+ content?: 'percent' | 'label' | 'both';
1409
+ /** Font size in CSS pixels. Default: 11. */
1410
+ fontSize?: number;
1411
+ /**
1412
+ * Slices narrower than this (in degrees) get no on-pie label. Default: 2.5°
1413
+ * (≈ 0.7% of the pie). Raise when many tiny slices would crowd the
1414
+ * de-cluster pass into unreadable overlaps.
1415
+ */
1416
+ minSliceAngle?: number;
1417
+ /** Leader-line radial segment length in CSS pixels. Default: 12. */
1418
+ elbowLen?: number;
1419
+ /** Gap between leader line and text in CSS pixels. Default: 6. */
1420
+ legPad?: number;
1421
+ /**
1422
+ * Radial distance in CSS pixels from the pie's outer edge to the natural
1423
+ * label anchor point. The label then extends horizontally outward by
1424
+ * {@link railWidth} before the text starts. Clamped internally against
1425
+ * {@link elbowLen}. Default: 14.
1426
+ */
1427
+ distance?: number;
1428
+ /**
1429
+ * Horizontal length of the final leader-line segment in CSS pixels — the
1430
+ * straight tail that runs from the radial elbow out to the text anchor.
1431
+ * Higher values give a longer visible "rail" before the label. Default: 16.
1432
+ */
1433
+ railWidth?: number;
1434
+ /**
1435
+ * Minimum vertical gap between adjacent outside labels on the same side,
1436
+ * expressed as a multiplier of {@link fontSize}. Default: 1.8.
1437
+ */
1438
+ labelGap?: number;
1439
+ /**
1440
+ * @deprecated No effect in the radial per-slice layout. A label's X is
1441
+ * pinned to its slice midangle, so forcing the "other" side would flip
1442
+ * text direction without moving the label and push text across the pie.
1443
+ * Kept in the option surface for backwards compatibility.
1444
+ */
1445
+ balanceSides?: boolean;
1446
+ }
1447
+
1448
+ export declare const PieLegend: __VLS_WithTemplateSlots_4<typeof __VLS_component_4, __VLS_TemplateResult_4["slots"]>;
1449
+
1450
+ declare type PieLegendMode = 'value' | 'percent' | 'both';
1451
+
1452
+ export declare const PieSeries: DefineComponent<__VLS_Props_5, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_5> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
1453
+
1454
+ /** Visual options for a pie/donut series. `innerRadiusRatio > 0` makes it a donut. */
1455
+ export declare interface PieSeriesOptions {
1456
+ /** Palette fallback (defaults to theme.seriesColors). */
1457
+ colors?: string[];
1458
+ /** 0 = pie, 0.6 = donut. Fraction of the outer radius used as an inner hole. */
1459
+ innerRadiusRatio: number;
1460
+ /** Gap between slices in degrees. Default: 1.15° (≈ 0.02 rad). */
1461
+ padAngle: number;
1462
+ /** Display the label shown in the tooltip. */
1463
+ label?: string;
1464
+ /** Per-slice label rendering on the pie itself. See {@link PieLabelsOptions}. */
1465
+ sliceLabels?: PieLabelsOptions;
1466
+ /**
1467
+ * When `true`, enables pie motion effects: the outside-label entrance
1468
+ * draw-in on mount / data swap, and the hover-explode slice offset.
1469
+ * Default: `false` — labels paint fully on the first frame and hovered
1470
+ * slices stay in place (hover feedback is left to the tooltip / legend /
1471
+ * cursor). Enable for presentations where the motion adds narrative
1472
+ * value.
1473
+ */
1474
+ animate?: boolean;
1475
+ /**
1476
+ * Ambient *outer* drop-shadow behind each slice. Adds lift for flat
1477
+ * dashboards. Omit / `false` to disable (default). `true` uses soft
1478
+ * defaults; pass an object to tune individually.
1479
+ */
1480
+ shadow?: boolean | {
1481
+ /** Shadow color. Default: `rgba(0, 0, 0, 0.22)`. */
1482
+ color?: string;
1483
+ /** Blur radius in CSS pixels. Default: 24. */
1484
+ blur?: number;
1485
+ /** Horizontal offset in CSS pixels. Default: 0. */
1486
+ offsetX?: number;
1487
+ /** Vertical offset in CSS pixels. Default: 10. */
1488
+ offsetY?: number;
1489
+ };
1490
+ /**
1491
+ * Inner rim darkening — a dark band near each slice's outer edge that
1492
+ * gives the pie an "inset" / pressed look. Implemented by extending the
1493
+ * per-slice radial gradient with a dark edge stop, so it pairs naturally
1494
+ * with the existing depth gradient. Omit / `false` to disable (default).
1495
+ */
1496
+ innerShadow?: boolean | {
1497
+ /**
1498
+ * Rim color. Default: `rgba(0, 0, 0, 0.1)` (blended over the slice
1499
+ * color). Accepts any CSS color.
1500
+ */
1501
+ color?: string;
1502
+ /**
1503
+ * Fraction of the slice's radial span covered by the darkened band
1504
+ * (0..1). Default: 0.3 — darkening starts at 70% of the radius.
1505
+ */
1506
+ depth?: number;
1507
+ };
1508
+ }
280
1509
 
281
- export { themes }
1510
+ /** Optional min/max constraints for the Y axis. Omit a side for automatic scaling. */
1511
+ /** A single slice in a pie/donut chart. */
1512
+ export declare interface PieSliceData {
1513
+ label: string;
1514
+ value: number;
1515
+ /** Override color for this slice. Falls back to seriesColors palette. */
1516
+ color?: string;
1517
+ }
1518
+
1519
+ export declare const PieTooltip: __VLS_WithTemplateSlots_5<typeof __VLS_component_5, __VLS_TemplateResult_5["slots"]>;
1520
+
1521
+ export declare const quietLight: ThemePreset;
1522
+
1523
+ /** Axis-aligned rectangle in media (CSS) coordinates. */
1524
+ declare interface Rect {
1525
+ x: number;
1526
+ y: number;
1527
+ width: number;
1528
+ height: number;
1529
+ }
1530
+
1531
+ export declare const rosePineDawn: ThemePreset;
1532
+
1533
+ export declare const sandDune: ThemePreset;
1534
+
1535
+ /**
1536
+ * Frozen, per-row snapshot of a series at a single point in time. The shape
1537
+ * `buildHoverSnapshots` / `buildLastSnapshots` return to overlay slot
1538
+ * consumers.
1539
+ *
1540
+ * **Two identities, one snapshot:**
1541
+ * - `id` is the **row key** — guaranteed unique within the returned array,
1542
+ * safe for React `key`, Vue `:key`, Svelte `each … (key)`. For single-layer
1543
+ * series this equals the `seriesId`; for multi-layer series it's
1544
+ * `${seriesId}_layer${layerIndex}`.
1545
+ * - `seriesId` is the **owning series identity** — never carries a layer
1546
+ * suffix, not unique across multi-layer rows. Use it for filtering or
1547
+ * grouping (e.g. `snapshots.filter(s => s.seriesId === 'btc')`).
1548
+ *
1549
+ * `data` is a shallow clone, frozen along with the snapshot itself — a slot
1550
+ * consumer cannot accidentally mutate the chart's internal store.
1551
+ */
1552
+ export declare interface SeriesSnapshot {
1553
+ readonly id: string;
1554
+ readonly seriesId: string;
1555
+ readonly layerIndex?: number;
1556
+ readonly label?: string;
1557
+ readonly data: Readonly<OHLCData> | Readonly<TimePoint>;
1558
+ readonly color: string;
1559
+ }
1560
+
1561
+ /** Supported primary series types. */
1562
+ export declare type SeriesType = 'candlestick' | 'line' | 'bar' | 'pie';
1563
+
1564
+ /** Width and height pair. */
1565
+ declare interface Size {
1566
+ width: number;
1567
+ height: number;
1568
+ }
1569
+
1570
+ export declare type SliceInfo = HoverInfo;
1571
+
1572
+ /** Sort order applied to a snapshot list by the helper. */
1573
+ export declare type SnapshotSort = 'none' | 'asc' | 'desc';
1574
+
1575
+ export declare const solarizedLight: ThemePreset;
1576
+
1577
+ /** Stacking mode for bar/line series: off (overlap), normal (stacked), percent (100% stacked). */
1578
+ export declare type StackingMode = 'off' | 'normal' | 'percent';
1579
+
1580
+ /**
1581
+ * Input config for {@link createTheme}. Mirrors the structure of {@link ChartTheme}
1582
+ * but everything is optional except `background`. Missing values are derived automatically.
1583
+ */
1584
+ export declare interface ThemeConfig {
1585
+ name?: string;
1586
+ description?: string;
1587
+ background: string;
1588
+ chartGradient?: [string, string];
1589
+ typography?: Partial<ChartTheme['typography']>;
1590
+ grid?: Partial<ChartTheme['grid']>;
1591
+ candlestick?: Partial<ChartTheme['candlestick']>;
1592
+ line?: Partial<ChartTheme['line']>;
1593
+ seriesColors?: string[];
1594
+ bands?: Partial<ChartTheme['bands']>;
1595
+ crosshair?: Partial<ChartTheme['crosshair']>;
1596
+ axis?: Partial<ChartTheme['axis']>;
1597
+ yLabel?: Partial<ChartTheme['yLabel']>;
1598
+ tooltip?: Partial<ChartTheme['tooltip']>;
1599
+ /** URL to load the font (e.g. Google Fonts). */
1600
+ fontUrl?: string | null;
1601
+ }
1602
+
1603
+ export declare interface ThemePreset {
1604
+ name: string;
1605
+ description?: string;
1606
+ fontUrl: string | null;
1607
+ theme: ChartTheme;
1608
+ dark: boolean;
1609
+ /** Optional CSS background-image for the page */
1610
+ backgroundImage?: string;
1611
+ backgroundSize?: string;
1612
+ }
282
1613
 
283
1614
  export declare const TimeAxis: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
284
1615
 
285
- export { TimePoint }
286
-
287
- export { TimePointInput }
288
-
289
- export { TimeValue }
290
-
291
- export declare const Tooltip: DefineComponent<__VLS_Props_9, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_9> & Readonly<{}>, {
292
- sort: TooltipSort;
293
- }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
1616
+ /** A single time-value data point for line and bar series. Time is a timestamp in milliseconds. */
1617
+ export declare interface TimePoint {
1618
+ time: number;
1619
+ value: number;
1620
+ }
294
1621
 
295
- declare type TooltipSort = 'none' | 'asc' | 'desc';
1622
+ /** {@link TimePoint} that also accepts `Date` for the time field. */
1623
+ export declare type TimePointInput = Omit<TimePoint, 'time'> & {
1624
+ time: TimeValue;
1625
+ };
296
1626
 
297
- export { Typography }
1627
+ declare class TimeScale {
1628
+ private from;
1629
+ private to;
1630
+ private width;
1631
+ private pixelRatio;
1632
+ private dataInterval;
1633
+ private labelCountHintValue;
1634
+ private minSpacingValue;
1635
+ private resolvedInterval;
1636
+ private lastInterval;
1637
+ /**
1638
+ * "want" (desired interval post-floor) at the time lastInterval was snapped.
1639
+ * Hysteresis band anchors to this so micro range drift back across a tier
1640
+ * boundary doesn't flip the label density — mirrors YScale, see there for
1641
+ * the full reasoning.
1642
+ */
1643
+ private lastWant;
1644
+ /** Identifies the dataInterval bucket whose tier list drove lastInterval. */
1645
+ private lastBucketKey;
1646
+ private get labelCountHint();
1647
+ private get minLabelSpacing();
1648
+ update(range: VisibleRange, mediaWidth: number, pixelRatio: number, dataInterval?: number): void;
1649
+ setLabelCount(n: number | null | undefined): void;
1650
+ setMinSpacing(px: number | null | undefined): void;
1651
+ private resetHysteresis;
1652
+ timeToX(time: number): number;
1653
+ timeToBitmapX(time: number): number;
1654
+ xToTime(x: number): number;
1655
+ pixelDeltaToTimeDelta(pixelDelta: number): number;
1656
+ barWidthMedia(dataInterval: number): number;
1657
+ barWidthBitmap(dataInterval: number): number;
1658
+ /**
1659
+ * Evenly spaced "nice" tick times. Resolution uses the cached
1660
+ * `dataInterval` set by `update()`; callers that bypass `update()` can
1661
+ * still pass it here for back-compat.
1662
+ */
1663
+ niceTickValues(dataInterval: number): {
1664
+ ticks: number[];
1665
+ tickInterval: number;
1666
+ };
1667
+ getRange(): VisibleRange;
1668
+ getMediaWidth(): number;
1669
+ /**
1670
+ * Resolve the next tick interval. Walks `niceTimeIntervals(dataInterval)`
1671
+ * looking for the smallest tier ≥ desired spacing; retains the previous
1672
+ * tier inside a ratio band so micro pan/zoom doesn't flip label density.
1673
+ */
1674
+ private resolveInterval;
1675
+ private countTicks;
1676
+ }
1677
+
1678
+ /**
1679
+ * Accepted time input: a timestamp in **milliseconds** (like `Date.now()`) or a `Date` object.
1680
+ * `Date` values are converted to milliseconds internally via `Date.getTime()`.
1681
+ */
1682
+ export declare type TimeValue = number | Date;
1683
+
1684
+ export declare const Title: __VLS_WithTemplateSlots_6<typeof __VLS_component_6, __VLS_TemplateResult_6["slots"]>;
1685
+
1686
+ export declare const Tooltip: __VLS_WithTemplateSlots_7<typeof __VLS_component_7, __VLS_TemplateResult_7["slots"]>;
1687
+
1688
+ /** Fields surfaced to a `Tooltip` / `TooltipLegend` formatter. */
1689
+ export declare type TooltipField = 'open' | 'high' | 'low' | 'close' | 'volume' | 'value';
1690
+
1691
+ /** Signature for the tooltip formatter — single prop, field hint. */
1692
+ export declare type TooltipFormatter = (value: number, field: TooltipField) => string;
1693
+
1694
+ export declare const TooltipLegend: __VLS_WithTemplateSlots_8<typeof __VLS_component_8, __VLS_TemplateResult_8["slots"]>;
1695
+
1696
+ export declare interface TooltipPosition {
1697
+ left: number;
1698
+ top: number;
1699
+ }
1700
+
1701
+ /**
1702
+ * Pure positioning for a floating tooltip. Flip the tooltip to the other
1703
+ * side of the cursor when the preferred side would overflow, then clamp
1704
+ * into `[0, chart - size]` so the flipped side can't spill past the
1705
+ * opposite edge either.
1706
+ *
1707
+ * Works for time-series tooltips anchoring to the crosshair and pie
1708
+ * tooltips anchoring to a slice centroid alike — pass the chart bounds
1709
+ * that match the overlay container (media size minus axis gutters for
1710
+ * time-series, full media size for pie).
1711
+ */
1712
+ export declare interface TooltipPositionArgs {
1713
+ /** Cursor or anchor x in CSS pixels, relative to the chart area origin. */
1714
+ x: number;
1715
+ /** Cursor or anchor y in CSS pixels, relative to the chart area origin. */
1716
+ y: number;
1717
+ /** Plot-area width in CSS pixels. */
1718
+ chartWidth: number;
1719
+ /** Plot-area height in CSS pixels. */
1720
+ chartHeight: number;
1721
+ /** Tooltip box width in CSS pixels. */
1722
+ tooltipWidth: number;
1723
+ /** Tooltip box height in CSS pixels. */
1724
+ tooltipHeight: number;
1725
+ /** Gap between anchor and tooltip. Defaults to 16. */
1726
+ offsetX?: number;
1727
+ offsetY?: number;
1728
+ }
1729
+
1730
+ /** Font family and size tokens used across the chart. */
1731
+ export declare interface Typography {
1732
+ fontFamily: string;
1733
+ fontSize: number;
1734
+ axisFontSize: number;
1735
+ yFontSize: number;
1736
+ tooltipFontSize: number;
1737
+ }
298
1738
 
299
1739
  export declare function useChartInstance(): ChartInstance;
300
1740
 
@@ -313,16 +1753,139 @@ export declare function useVisibleRange(chart: ChartInstance): Ref<VisibleRange>
313
1753
 
314
1754
  export declare function useYRange(chart: ChartInstance): Ref<YRange>;
315
1755
 
316
- export { VisibleRange }
317
-
318
- export { XAxisConfig }
319
-
320
- export declare const YAxis: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
321
-
322
- export { YAxisConfig }
323
-
324
- export declare const YLabel: DefineComponent<__VLS_Props_10, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_10> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
325
-
326
- export { YRange }
1756
+ /**
1757
+ * Default value formatters used across the chart library.
1758
+ *
1759
+ * Two shapes are exposed:
1760
+ * - `formatCompact` — compact K/M/B/T suffixes for large magnitudes, adaptive
1761
+ * precision for values < 1. Intended for axis labels, legends, pie slices.
1762
+ * - `formatPriceAdaptive` — full-precision display that scales decimal count
1763
+ * to the magnitude. Intended for tooltip rows where users want to read the
1764
+ * exact number.
1765
+ *
1766
+ * Both handle the full range of JS numbers the library is likely to see:
1767
+ * - 0, ±Infinity, NaN
1768
+ * - BTC-style sub-cent prices (0.00001234 → "0.00001234", not "1.234e-5")
1769
+ * - trillion-scale values (5.4e12 → "5.40T")
1770
+ * - Number.MAX_SAFE_INTEGER falls back to scientific notation (>= 1e15)
1771
+ *
1772
+ * Consumers can import these directly, or swap them in per-component via the
1773
+ * `format` prop on Tooltip/TooltipLegend/YAxis/etc. (see framework wrappers).
1774
+ */
1775
+ /** Signature for a value-to-string formatter (YAxis, YLabel, Pie, Sparkline, NumberFlow). */
1776
+ export declare type ValueFormatter = (value: number) => string;
1777
+
1778
+ /** Time range (timestamps in milliseconds) of the currently visible portion of the chart. */
1779
+ export declare interface VisibleRange {
1780
+ from: number;
1781
+ to: number;
1782
+ }
1783
+
1784
+ /** Configuration for the X (time) axis. */
1785
+ export declare interface XAxisConfig {
1786
+ /** Height in CSS pixels. Default: 30. */
1787
+ height?: number;
1788
+ /** Whether the axis is visible. Default: true. When false, height is treated as 0. */
1789
+ visible?: boolean;
1790
+ }
1791
+
1792
+ export declare const YAxis: DefineComponent<__VLS_Props_13, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_13> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
1793
+
1794
+ /** Configuration for the Y axis. */
1795
+ export declare interface YAxisConfig {
1796
+ /** Width in CSS pixels. Default: 55. */
1797
+ width?: number;
1798
+ /** Minimum bound. Default: 'auto'. */
1799
+ min?: AxisBound;
1800
+ /** Maximum bound. Default: 'auto'. */
1801
+ max?: AxisBound;
1802
+ /** Whether the axis is visible. Default: true. When false, width is treated as 0. */
1803
+ visible?: boolean;
1804
+ }
1805
+
1806
+ export declare const YLabel: __VLS_WithTemplateSlots_9<typeof __VLS_component_9, __VLS_TemplateResult_9["slots"]>;
1807
+
1808
+ /** Direction of the current value vs. previous close. Drives the badge color in the default UI. */
1809
+ declare type YLabelDirection = 'up' | 'down' | 'neutral';
1810
+
1811
+ /** Min/max value range for the Y axis. */
1812
+ export declare interface YRange {
1813
+ min: number;
1814
+ max: number;
1815
+ }
1816
+
1817
+ /**
1818
+ * Maps values to vertical pixel positions (and vice versa).
1819
+ * Also provides tick generation and value formatting for the Y axis.
1820
+ */
1821
+ declare class YScale {
1822
+ private min;
1823
+ private max;
1824
+ private height;
1825
+ private pixelRatio;
1826
+ private labelCountHintValue;
1827
+ private minSpacingValue;
1828
+ /** Cached {1,2,5}×10^k interval resolved at update-time; null when degenerate. */
1829
+ private resolvedInterval;
1830
+ /** Previous resolved interval — drives the ratio-band hysteresis. */
1831
+ private lastInterval;
1832
+ /**
1833
+ * rawInterval at the moment `lastInterval` was snapped. Anchoring the
1834
+ * hysteresis band to *raw-at-snap* (not `lastInterval`) is what creates
1835
+ * naturally asymmetric tier hysteresis: after an escalation the band
1836
+ * starts just above the tier boundary, so live range drift back across
1837
+ * the boundary doesn't instantly flip back.
1838
+ */
1839
+ private lastRawInterval;
1840
+ /** Custom formatter (driven by `<YAxis format=…>`). */
1841
+ private customFormat;
1842
+ private get labelCountHint();
1843
+ private get minLabelSpacing();
1844
+ /** Recalculate the scale with a new Y range, chart height, and device pixel ratio. */
1845
+ update(range: YRange, mediaHeight: number, pixelRatio: number): void;
1846
+ /** Desired label count. Invalid values (NaN, <2, Infinity) clear the hint. */
1847
+ setLabelCount(n: number | null | undefined): void;
1848
+ /** Minimum pixel gap between adjacent labels. */
1849
+ setMinSpacing(px: number | null | undefined): void;
1850
+ private resetHysteresis;
1851
+ /** Install (or clear) a custom formatter. */
1852
+ setFormat(fn: ValueFormatter | null): void;
1853
+ /** Read back the currently installed formatter — null when the built-in is active. */
1854
+ getFormat(): ValueFormatter | null;
1855
+ /** Convert a value to a Y position in CSS (media) pixels. */
1856
+ valueToY(value: number): number;
1857
+ /** Convert a value to a Y position in physical (bitmap) pixels. */
1858
+ valueToBitmapY(value: number): number;
1859
+ /** Convert a Y position in CSS pixels back to a value. */
1860
+ yToValue(y: number): number;
1861
+ /**
1862
+ * Generate evenly spaced "nice" tick values for the current range and
1863
+ * chart height. Pure read — resolution happens in `update()`.
1864
+ */
1865
+ niceTickValues(): number[];
1866
+ getRange(): YRange;
1867
+ getMediaHeight(): number;
1868
+ /**
1869
+ * Format a tick value for display. When a custom formatter is installed
1870
+ * (via {@link setFormat} or the `format` prop on `<YAxis>`), it wins;
1871
+ * otherwise decimals are driven by the resolved tick interval — so
1872
+ * ticks at step 100 never render as "42000.0" just because the visible
1873
+ * range happens to be < 1000.
1874
+ */
1875
+ formatY(value: number): string;
1876
+ /**
1877
+ * Resolve the interval to a {1,2,5}×10^k tick size that satisfies the pixel
1878
+ * floor and (optionally) targets `labelCountHint` labels.
1879
+ *
1880
+ * Hysteresis: the band [0.8×, 1.25×] is anchored to **rawInterval at last
1881
+ * snap**, not to `lastInterval`. After an escalation (e.g. 100 → 200),
1882
+ * `lastRawInterval` sits just past the tier boundary, so typical live
1883
+ * range drift back across the boundary stays inside the band and does
1884
+ * *not* de-escalate. This prevents the 2-tier flicker users see when new
1885
+ * candles nudge the Y range across a raw-interval threshold.
1886
+ */
1887
+ private resolveInterval;
1888
+ private countTicks;
1889
+ }
327
1890
 
328
1891
  export { }