@luxalgo/vela 0.5.1 → 0.5.2

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 (45) hide show
  1. package/dist/{DataProvider-DGesjOJT.d.ts → DataProvider-DTOEXKTI.d.ts} +1 -1
  2. package/dist/{DataProvider-BBQ3Hr21.d.cts → DataProvider-gnzv-dgc.d.cts} +1 -1
  3. package/dist/{chunk-ULIX6AE2.js → chunk-ATPU5CI6.js} +1 -1
  4. package/dist/{chunk-S6F6SQ2L.js → chunk-B5TIKQJ5.js} +60 -7
  5. package/dist/{chunk-EP6NDJYK.js → chunk-LJLZR44Y.js} +4 -2
  6. package/dist/{chunk-AIW3EJUE.js → chunk-P556H6EA.js} +329 -10
  7. package/dist/{chunk-FNOMKHEZ.js → chunk-RRFGWZNJ.js} +1321 -363
  8. package/dist/{chunk-5SE4PL3H.js → chunk-Y7TK4ZWK.js} +1363 -48
  9. package/dist/{contributions-BlV3kb0O.d.cts → contributions-Ci_i3IN2.d.cts} +33 -2
  10. package/dist/{contributions-6N0rbrPC.d.ts → contributions-b6AVrqqG.d.ts} +33 -2
  11. package/dist/{history-DX3Zne3a.d.cts → history-Cf1lVsap.d.cts} +15 -3
  12. package/dist/{history-BTd52YMA.d.ts → history-Ci3M0xLV.d.ts} +15 -3
  13. package/dist/index.cjs +1374 -366
  14. package/dist/index.d.cts +52 -19
  15. package/dist/index.d.ts +52 -19
  16. package/dist/index.js +4 -4
  17. package/dist/{options-DbQholFV.d.cts → options-XTBpbx0s.d.cts} +47 -1
  18. package/dist/{options-DbQholFV.d.ts → options-XTBpbx0s.d.ts} +47 -1
  19. package/dist/{plugin-TN3n-9YN.d.ts → plugin-CnNd7cuF.d.ts} +172 -25
  20. package/dist/{plugin-O34MbXf-.d.cts → plugin-DfH4Y-Om.d.cts} +172 -25
  21. package/dist/plugin.cjs +53 -7
  22. package/dist/plugin.d.cts +4 -4
  23. package/dist/plugin.d.ts +4 -4
  24. package/dist/plugin.js +2 -2
  25. package/dist/providers/binance.d.cts +2 -2
  26. package/dist/providers/binance.d.ts +2 -2
  27. package/dist/providers/coinbase.d.cts +2 -2
  28. package/dist/providers/coinbase.d.ts +2 -2
  29. package/dist/providers/hyperliquid.d.cts +2 -2
  30. package/dist/providers/hyperliquid.d.ts +2 -2
  31. package/dist/ui.cjs +332 -9
  32. package/dist/ui.d.cts +64 -2
  33. package/dist/ui.d.ts +64 -2
  34. package/dist/ui.js +3 -3
  35. package/dist/vela.global.js +1374 -366
  36. package/dist/vela.global.min.js +84 -34
  37. package/dist/widget.cjs +3348 -550
  38. package/dist/widget.d.cts +65 -7
  39. package/dist/widget.d.ts +65 -7
  40. package/dist/widget.js +169 -18
  41. package/dist/workspace.cjs +4251 -1400
  42. package/dist/workspace.d.cts +45 -9
  43. package/dist/workspace.d.ts +45 -9
  44. package/dist/workspace.js +226 -22
  45. package/package.json +1 -1
package/dist/widget.d.cts CHANGED
@@ -1,10 +1,10 @@
1
- import { W as WidgetContext, V as Vela, y as SidePanelButton } from './contributions-BlV3kb0O.cjs';
2
- export { ah as DEFAULT_PANEL_ORDER, z as SidePanelDescriptor, A as SidePanelHandle, U as WidgetActionDescriptor, X as WidgetActionTarget, Y as WidgetAttachment, a4 as registerSidePanel, a5 as registerWidgetAction, a6 as registerWidgetAttachment, a8 as sidePanels, ac as unregisterSidePanel, ad as unregisterWidgetAction, ae as unregisterWidgetAttachment, af as widgetActions, ag as widgetAttachments } from './contributions-BlV3kb0O.cjs';
3
- import { b as VelaOptions, q as DataWindowReadout } from './options-DbQholFV.cjs';
1
+ import { W as WidgetContext, V as Vela, y as SidePanelButton } from './contributions-Ci_i3IN2.cjs';
2
+ export { ah as DEFAULT_PANEL_ORDER, z as SidePanelDescriptor, A as SidePanelHandle, U as WidgetActionDescriptor, X as WidgetActionTarget, Y as WidgetAttachment, a4 as registerSidePanel, a5 as registerWidgetAction, a6 as registerWidgetAttachment, a8 as sidePanels, ac as unregisterSidePanel, ad as unregisterWidgetAction, ae as unregisterWidgetAttachment, af as widgetActions, ag as widgetAttachments } from './contributions-Ci_i3IN2.cjs';
3
+ import { b as VelaOptions, q as DataWindowReadout } from './options-XTBpbx0s.cjs';
4
4
  import { K as KeymapManager } from './keymap-CGOz5F5f.cjs';
5
- import { W as WidgetHistory, b as VelaShellOptions, e as WorkspaceState, a as RangePreset, i as PersistedState, P as PanelsState } from './history-DX3Zne3a.cjs';
6
- export { B as Bottombar, j as BottombarOptions, C as CellState, f as ChartState, I as IndicatorLoader, k as IndicatorManifest, l as IndicatorManifestEntry, m as RANGE_PRESETS, R as ResolvedIndicator, V as VelaStorage, n as WidgetStorage, g as decodeState, h as encodeState, o as legacyWidgetState, p as loadPersisted, q as localStorageAdapter, r as parsePersisted, t as resolveIndicators, s as sanitizeState, u as savePersisted } from './history-DX3Zne3a.cjs';
7
- import { a as SymbolDescriptor } from './DataProvider-BBQ3Hr21.cjs';
5
+ import { W as WidgetHistory, b as VelaShellOptions, e as WorkspaceState, a as RangePreset, i as PersistedState, P as PanelsState } from './history-Cf1lVsap.cjs';
6
+ export { B as Bottombar, j as BottombarOptions, C as CellState, f as ChartState, I as IndicatorLoader, k as IndicatorManifest, l as IndicatorManifestEntry, m as RANGE_PRESETS, R as ResolvedIndicator, V as VelaStorage, n as WidgetStorage, g as decodeState, h as encodeState, o as legacyWidgetState, p as loadPersisted, q as localStorageAdapter, r as parsePersisted, t as resolveIndicators, s as sanitizeState, u as savePersisted } from './history-Cf1lVsap.cjs';
7
+ import { a as SymbolDescriptor } from './DataProvider-gnzv-dgc.cjs';
8
8
  import { d as SidePanel } from './side-panel-CT9ZwIGz.cjs';
9
9
  export { D as DEFAULT_PANEL_MAX_WIDTH, a as DEFAULT_PANEL_MIN_WIDTH, b as DEFAULT_PANEL_WIDTH, S as SidePanelOptions, c as clampPanelWidth } from './side-panel-CT9ZwIGz.cjs';
10
10
 
@@ -30,6 +30,7 @@ declare class VelaWidget {
30
30
  private shortcutsHelp;
31
31
  private readonly contextMenu;
32
32
  private readonly symbolPicker;
33
+ /** Null when the host disabled it (`indicatorPicker: false`). */
33
34
  private readonly indicatorPicker;
34
35
  private readonly tfQuick;
35
36
  private inner;
@@ -53,6 +54,8 @@ declare class VelaWidget {
53
54
  private watermarkOn;
54
55
  /** Indicator titles (the in-chart legend rows) shown — reapplied across rebuilds. */
55
56
  private indicatorTitlesOn;
57
+ /** Plot values beside the legend titles shown — reapplied across rebuilds. */
58
+ private indicatorValuesOn;
56
59
  private pendingRange;
57
60
  /** Symbol already reported as unservable (the core re-reports on every index settle). */
58
61
  private unresolvedToasted;
@@ -96,7 +99,30 @@ declare class VelaWidget {
96
99
  private indicatorsPromise;
97
100
  private destroyed;
98
101
  private buildSeq;
102
+ /** The chrome size class — writes `data-layout` on the root (all mobile CSS keys
103
+ * off it) and pushes the mode into the renderer chrome on every change/rebuild. */
104
+ private layoutCtl;
105
+ private readonly mobileBar;
106
+ private readonly drawingPill;
107
+ private tfDrawer;
108
+ private drawingsDrawer;
109
+ private moreDrawer;
110
+ private timezoneDrawer;
111
+ private priceScaleDrawer;
112
+ /** Plot-local y of the last price-axis long-press (targets the pane under the finger). */
113
+ private priceScalePressY;
114
+ /** The active range chip id (both bottom bars + the timeframe drawer mirror it). */
115
+ private activeRangeId;
99
116
  constructor(container: HTMLElement | string, opts: VelaWidgetOptions);
117
+ /** The mode flipped (container resized across the breakpoint, or a coarse-pointer
118
+ * change). Close the open surfaces — a desktop card must not linger over the
119
+ * mobile chrome (and vice versa) — and re-present the renderer's own chrome. */
120
+ private onLayoutModeChange;
121
+ private openTimeframeDrawer;
122
+ private openDrawingsDrawer;
123
+ private openMoreDrawer;
124
+ private openTimezoneDrawer;
125
+ private openPriceScaleDrawer;
100
126
  /** Mount registered attachments not yet mounted on this widget (idempotent per id). */
101
127
  private mountAttachments;
102
128
  /** The context handed to contributed actions (see `registerWidgetAction`). */
@@ -158,6 +184,8 @@ declare class VelaWidget {
158
184
  setWatermarkVisible(visible: boolean): void;
159
185
  /** Show/hide the indicator titles — the in-chart legend rows (persisted). */
160
186
  setIndicatorTitlesVisible(visible: boolean): void;
187
+ /** Show/hide the plot values beside every indicator's legend title (persisted). */
188
+ setIndicatorValuesVisible(visible: boolean): void;
161
189
  /** Applied LIVE (renderer feature) — no rebuild; persists across rebuilds. */
162
190
  setPriceStyle(style: string): void;
163
191
  /** OHLC/change ink in the status line follows the ACTIVE price style's configured
@@ -275,6 +303,10 @@ declare class Topbar {
275
303
  private readonly styleMenu;
276
304
  private readonly tooltips;
277
305
  private readonly actionsHost;
306
+ /** Left-aligned contributed actions (`align: 'left'`) — right after the dropdowns. */
307
+ private readonly leftActionsHost;
308
+ /** The hairline after the left cluster — hidden while the cluster is empty. */
309
+ private readonly leftActionsSep;
278
310
  /** The side-panel toggle group — filled by the dock through {@link setPanelButtons}. */
279
311
  private readonly panelsHost;
280
312
  private undoBtn;
@@ -352,8 +384,22 @@ declare class Statusline {
352
384
  private isUp;
353
385
  /** 'ohlc' for bar-shaped styles; 'value' (the single plotted close) for line styles. */
354
386
  private readout;
387
+ /** Fit mode (multi-chart cells): one row, overflowing segments hidden — see {@link setFitMode}. */
388
+ private fitMode;
389
+ private fitRO;
355
390
  constructor(host: HTMLElement, symbol: string);
356
391
  setSymbol(symbol: string): void;
392
+ /**
393
+ * Multi-chart cells: keep the line on ONE row whatever the cell width — never wrap.
394
+ * Segments that don't fit are hidden outright rather than clipped mid-glyph, least
395
+ * important first: OHLC, then the bar change, the venue/timeframe meta, and the
396
+ * market badge; the logo + ticker always stay. Re-fits live on host resizes.
397
+ */
398
+ setFitMode(on: boolean): void;
399
+ /** Project the parts config onto the segments (the baseline fit() prunes from). */
400
+ private syncParts;
401
+ /** Hide overflowing segments until the row fits its max-width (fit mode only). */
402
+ private fit;
357
403
  /** Shape + color the value readout after the active price style: its own up/down
358
404
  * colors (candle bodies, bar ticks, the line color, …), the direction rule that
359
405
  * picks between them (`isUp` replaces close-vs-open where the style paints by
@@ -384,8 +430,17 @@ declare class Watermark {
384
430
  readonly el: HTMLElement;
385
431
  private readonly text;
386
432
  private readonly resizeObserver;
433
+ /** The host's visibility preference (the persisted watermark toggle). */
434
+ private shown;
435
+ /** A bar load is in flight with nothing painted — the loading affordance owns the
436
+ * canvas, so the mark stays out of its way. Starts true: the FIRST `load:start`
437
+ * fires during chart construction, before any subscriber can see it. */
438
+ private loading;
387
439
  constructor(host: HTMLElement, symbol: string, timeframe: string);
388
440
  setVisible(visible: boolean): void;
441
+ /** Loading and the watermark never share the canvas — hidden while a load is up. */
442
+ setLoading(loading: boolean): void;
443
+ private sync;
389
444
  update(symbol: string, timeframe: string): void;
390
445
  /** Measure the text at the cap and shrink it to the chart's own width. */
391
446
  private fit;
@@ -533,6 +588,9 @@ declare class PanelDock {
533
588
  toggle(id: string, open?: boolean): void;
534
589
  /** The open panel's id, or null when the column is closed. */
535
590
  get openId(): string | null;
591
+ /** The docked panels in dock order — what a non-topbar chrome (the mobile
592
+ * three-dots drawer) lists so every panel stays reachable there too. */
593
+ list(): ReadonlyArray<SidePanelButton>;
536
594
  /** The dock's persistable state, or null when there is nothing worth saving. */
537
595
  getState(): PanelsState | null;
538
596
  /**
@@ -800,7 +858,7 @@ declare function normalizeTimezone(zone: string): string;
800
858
  declare function tzOffset(zone: string, date?: Date): string;
801
859
  /** Dropdown row label — UTC omits the offset prefix. */
802
860
  declare function tzMenuLabel(zone: string, location: string): string;
803
- /** Compact label for the bottom-bar button ("UTC", "UTC+2 Paris"). */
861
+ /** Compact label for the bottom-bar button — just the offset ("UTC", "UTC+2", "UTC-9:30"). */
804
862
  declare function tzButtonLabel(zone: string): string;
805
863
 
806
864
  /** Sensible decimal count for a price magnitude (crypto-friendly). */
package/dist/widget.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { W as WidgetContext, V as Vela, y as SidePanelButton } from './contributions-6N0rbrPC.js';
2
- export { ah as DEFAULT_PANEL_ORDER, z as SidePanelDescriptor, A as SidePanelHandle, U as WidgetActionDescriptor, X as WidgetActionTarget, Y as WidgetAttachment, a4 as registerSidePanel, a5 as registerWidgetAction, a6 as registerWidgetAttachment, a8 as sidePanels, ac as unregisterSidePanel, ad as unregisterWidgetAction, ae as unregisterWidgetAttachment, af as widgetActions, ag as widgetAttachments } from './contributions-6N0rbrPC.js';
3
- import { b as VelaOptions, q as DataWindowReadout } from './options-DbQholFV.js';
1
+ import { W as WidgetContext, V as Vela, y as SidePanelButton } from './contributions-b6AVrqqG.js';
2
+ export { ah as DEFAULT_PANEL_ORDER, z as SidePanelDescriptor, A as SidePanelHandle, U as WidgetActionDescriptor, X as WidgetActionTarget, Y as WidgetAttachment, a4 as registerSidePanel, a5 as registerWidgetAction, a6 as registerWidgetAttachment, a8 as sidePanels, ac as unregisterSidePanel, ad as unregisterWidgetAction, ae as unregisterWidgetAttachment, af as widgetActions, ag as widgetAttachments } from './contributions-b6AVrqqG.js';
3
+ import { b as VelaOptions, q as DataWindowReadout } from './options-XTBpbx0s.js';
4
4
  import { K as KeymapManager } from './keymap-CGOz5F5f.js';
5
- import { W as WidgetHistory, b as VelaShellOptions, e as WorkspaceState, a as RangePreset, i as PersistedState, P as PanelsState } from './history-BTd52YMA.js';
6
- export { B as Bottombar, j as BottombarOptions, C as CellState, f as ChartState, I as IndicatorLoader, k as IndicatorManifest, l as IndicatorManifestEntry, m as RANGE_PRESETS, R as ResolvedIndicator, V as VelaStorage, n as WidgetStorage, g as decodeState, h as encodeState, o as legacyWidgetState, p as loadPersisted, q as localStorageAdapter, r as parsePersisted, t as resolveIndicators, s as sanitizeState, u as savePersisted } from './history-BTd52YMA.js';
7
- import { a as SymbolDescriptor } from './DataProvider-DGesjOJT.js';
5
+ import { W as WidgetHistory, b as VelaShellOptions, e as WorkspaceState, a as RangePreset, i as PersistedState, P as PanelsState } from './history-Ci3M0xLV.js';
6
+ export { B as Bottombar, j as BottombarOptions, C as CellState, f as ChartState, I as IndicatorLoader, k as IndicatorManifest, l as IndicatorManifestEntry, m as RANGE_PRESETS, R as ResolvedIndicator, V as VelaStorage, n as WidgetStorage, g as decodeState, h as encodeState, o as legacyWidgetState, p as loadPersisted, q as localStorageAdapter, r as parsePersisted, t as resolveIndicators, s as sanitizeState, u as savePersisted } from './history-Ci3M0xLV.js';
7
+ import { a as SymbolDescriptor } from './DataProvider-DTOEXKTI.js';
8
8
  import { d as SidePanel } from './side-panel-CT9ZwIGz.js';
9
9
  export { D as DEFAULT_PANEL_MAX_WIDTH, a as DEFAULT_PANEL_MIN_WIDTH, b as DEFAULT_PANEL_WIDTH, S as SidePanelOptions, c as clampPanelWidth } from './side-panel-CT9ZwIGz.js';
10
10
 
@@ -30,6 +30,7 @@ declare class VelaWidget {
30
30
  private shortcutsHelp;
31
31
  private readonly contextMenu;
32
32
  private readonly symbolPicker;
33
+ /** Null when the host disabled it (`indicatorPicker: false`). */
33
34
  private readonly indicatorPicker;
34
35
  private readonly tfQuick;
35
36
  private inner;
@@ -53,6 +54,8 @@ declare class VelaWidget {
53
54
  private watermarkOn;
54
55
  /** Indicator titles (the in-chart legend rows) shown — reapplied across rebuilds. */
55
56
  private indicatorTitlesOn;
57
+ /** Plot values beside the legend titles shown — reapplied across rebuilds. */
58
+ private indicatorValuesOn;
56
59
  private pendingRange;
57
60
  /** Symbol already reported as unservable (the core re-reports on every index settle). */
58
61
  private unresolvedToasted;
@@ -96,7 +99,30 @@ declare class VelaWidget {
96
99
  private indicatorsPromise;
97
100
  private destroyed;
98
101
  private buildSeq;
102
+ /** The chrome size class — writes `data-layout` on the root (all mobile CSS keys
103
+ * off it) and pushes the mode into the renderer chrome on every change/rebuild. */
104
+ private layoutCtl;
105
+ private readonly mobileBar;
106
+ private readonly drawingPill;
107
+ private tfDrawer;
108
+ private drawingsDrawer;
109
+ private moreDrawer;
110
+ private timezoneDrawer;
111
+ private priceScaleDrawer;
112
+ /** Plot-local y of the last price-axis long-press (targets the pane under the finger). */
113
+ private priceScalePressY;
114
+ /** The active range chip id (both bottom bars + the timeframe drawer mirror it). */
115
+ private activeRangeId;
99
116
  constructor(container: HTMLElement | string, opts: VelaWidgetOptions);
117
+ /** The mode flipped (container resized across the breakpoint, or a coarse-pointer
118
+ * change). Close the open surfaces — a desktop card must not linger over the
119
+ * mobile chrome (and vice versa) — and re-present the renderer's own chrome. */
120
+ private onLayoutModeChange;
121
+ private openTimeframeDrawer;
122
+ private openDrawingsDrawer;
123
+ private openMoreDrawer;
124
+ private openTimezoneDrawer;
125
+ private openPriceScaleDrawer;
100
126
  /** Mount registered attachments not yet mounted on this widget (idempotent per id). */
101
127
  private mountAttachments;
102
128
  /** The context handed to contributed actions (see `registerWidgetAction`). */
@@ -158,6 +184,8 @@ declare class VelaWidget {
158
184
  setWatermarkVisible(visible: boolean): void;
159
185
  /** Show/hide the indicator titles — the in-chart legend rows (persisted). */
160
186
  setIndicatorTitlesVisible(visible: boolean): void;
187
+ /** Show/hide the plot values beside every indicator's legend title (persisted). */
188
+ setIndicatorValuesVisible(visible: boolean): void;
161
189
  /** Applied LIVE (renderer feature) — no rebuild; persists across rebuilds. */
162
190
  setPriceStyle(style: string): void;
163
191
  /** OHLC/change ink in the status line follows the ACTIVE price style's configured
@@ -275,6 +303,10 @@ declare class Topbar {
275
303
  private readonly styleMenu;
276
304
  private readonly tooltips;
277
305
  private readonly actionsHost;
306
+ /** Left-aligned contributed actions (`align: 'left'`) — right after the dropdowns. */
307
+ private readonly leftActionsHost;
308
+ /** The hairline after the left cluster — hidden while the cluster is empty. */
309
+ private readonly leftActionsSep;
278
310
  /** The side-panel toggle group — filled by the dock through {@link setPanelButtons}. */
279
311
  private readonly panelsHost;
280
312
  private undoBtn;
@@ -352,8 +384,22 @@ declare class Statusline {
352
384
  private isUp;
353
385
  /** 'ohlc' for bar-shaped styles; 'value' (the single plotted close) for line styles. */
354
386
  private readout;
387
+ /** Fit mode (multi-chart cells): one row, overflowing segments hidden — see {@link setFitMode}. */
388
+ private fitMode;
389
+ private fitRO;
355
390
  constructor(host: HTMLElement, symbol: string);
356
391
  setSymbol(symbol: string): void;
392
+ /**
393
+ * Multi-chart cells: keep the line on ONE row whatever the cell width — never wrap.
394
+ * Segments that don't fit are hidden outright rather than clipped mid-glyph, least
395
+ * important first: OHLC, then the bar change, the venue/timeframe meta, and the
396
+ * market badge; the logo + ticker always stay. Re-fits live on host resizes.
397
+ */
398
+ setFitMode(on: boolean): void;
399
+ /** Project the parts config onto the segments (the baseline fit() prunes from). */
400
+ private syncParts;
401
+ /** Hide overflowing segments until the row fits its max-width (fit mode only). */
402
+ private fit;
357
403
  /** Shape + color the value readout after the active price style: its own up/down
358
404
  * colors (candle bodies, bar ticks, the line color, …), the direction rule that
359
405
  * picks between them (`isUp` replaces close-vs-open where the style paints by
@@ -384,8 +430,17 @@ declare class Watermark {
384
430
  readonly el: HTMLElement;
385
431
  private readonly text;
386
432
  private readonly resizeObserver;
433
+ /** The host's visibility preference (the persisted watermark toggle). */
434
+ private shown;
435
+ /** A bar load is in flight with nothing painted — the loading affordance owns the
436
+ * canvas, so the mark stays out of its way. Starts true: the FIRST `load:start`
437
+ * fires during chart construction, before any subscriber can see it. */
438
+ private loading;
387
439
  constructor(host: HTMLElement, symbol: string, timeframe: string);
388
440
  setVisible(visible: boolean): void;
441
+ /** Loading and the watermark never share the canvas — hidden while a load is up. */
442
+ setLoading(loading: boolean): void;
443
+ private sync;
389
444
  update(symbol: string, timeframe: string): void;
390
445
  /** Measure the text at the cap and shrink it to the chart's own width. */
391
446
  private fit;
@@ -533,6 +588,9 @@ declare class PanelDock {
533
588
  toggle(id: string, open?: boolean): void;
534
589
  /** The open panel's id, or null when the column is closed. */
535
590
  get openId(): string | null;
591
+ /** The docked panels in dock order — what a non-topbar chrome (the mobile
592
+ * three-dots drawer) lists so every panel stays reachable there too. */
593
+ list(): ReadonlyArray<SidePanelButton>;
536
594
  /** The dock's persistable state, or null when there is nothing worth saving. */
537
595
  getState(): PanelsState | null;
538
596
  /**
@@ -800,7 +858,7 @@ declare function normalizeTimezone(zone: string): string;
800
858
  declare function tzOffset(zone: string, date?: Date): string;
801
859
  /** Dropdown row label — UTC omits the offset prefix. */
802
860
  declare function tzMenuLabel(zone: string, location: string): string;
803
- /** Compact label for the bottom-bar button ("UTC", "UTC+2 Paris"). */
861
+ /** Compact label for the bottom-bar button — just the offset ("UTC", "UTC+2", "UTC-9:30"). */
804
862
  declare function tzButtonLabel(zone: string): string;
805
863
 
806
864
  /** Sensible decimal count for a price magnitude (crypto-friendly). */