@tradecanvas/chart 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +858 -828
  3. package/dist/Chart.d.ts +124 -1
  4. package/dist/Chart.d.ts.map +1 -1
  5. package/dist/DragDropImporter-C5kgfbET.cjs +2 -0
  6. package/dist/DragDropImporter-C5kgfbET.cjs.map +1 -0
  7. package/dist/{DragDropImporter-cURSpfUb.js → DragDropImporter-Dd9Mud5J.js} +376 -160
  8. package/dist/DragDropImporter-Dd9Mud5J.js.map +1 -0
  9. package/dist/PaneManager.d.ts.map +1 -1
  10. package/dist/charts/ChartTypeStrategy.d.ts +6 -0
  11. package/dist/charts/ChartTypeStrategy.d.ts.map +1 -1
  12. package/dist/grid/ChartGrid.d.ts +1 -0
  13. package/dist/grid/ChartGrid.d.ts.map +1 -1
  14. package/dist/index.cjs +1 -1
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +70 -85
  19. package/dist/index.js.map +1 -1
  20. package/dist/widget/ChartWidget.d.ts +71 -7
  21. package/dist/widget/ChartWidget.d.ts.map +1 -1
  22. package/dist/widget/WidgetCommandPalette.d.ts +3 -1
  23. package/dist/widget/WidgetCommandPalette.d.ts.map +1 -1
  24. package/dist/widget/WidgetDrawingSidebar.d.ts +12 -0
  25. package/dist/widget/WidgetDrawingSidebar.d.ts.map +1 -1
  26. package/dist/widget/WidgetGoToDate.d.ts +45 -0
  27. package/dist/widget/WidgetGoToDate.d.ts.map +1 -0
  28. package/dist/widget/WidgetHotkeySheet.d.ts +3 -1
  29. package/dist/widget/WidgetHotkeySheet.d.ts.map +1 -1
  30. package/dist/widget/WidgetIndicatorLegend.d.ts +68 -0
  31. package/dist/widget/WidgetIndicatorLegend.d.ts.map +1 -0
  32. package/dist/widget/WidgetLoadingOverlay.d.ts.map +1 -1
  33. package/dist/widget/WidgetReplayBar.d.ts +37 -7
  34. package/dist/widget/WidgetReplayBar.d.ts.map +1 -1
  35. package/dist/widget/WidgetSettings.d.ts +13 -1
  36. package/dist/widget/WidgetSettings.d.ts.map +1 -1
  37. package/dist/widget/WidgetStatusBar.d.ts +16 -1
  38. package/dist/widget/WidgetStatusBar.d.ts.map +1 -1
  39. package/dist/widget/WidgetSymbolSearch.d.ts +3 -1
  40. package/dist/widget/WidgetSymbolSearch.d.ts.map +1 -1
  41. package/dist/widget/WidgetToolbar.d.ts +12 -3
  42. package/dist/widget/WidgetToolbar.d.ts.map +1 -1
  43. package/dist/widget/WidgetTooltip.d.ts +43 -0
  44. package/dist/widget/WidgetTooltip.d.ts.map +1 -0
  45. package/dist/widget/escapeHtml.d.ts +3 -0
  46. package/dist/widget/escapeHtml.d.ts.map +1 -0
  47. package/dist/widget/i18n.d.ts +26 -0
  48. package/dist/widget/i18n.d.ts.map +1 -1
  49. package/dist/widget/iconSet.d.ts +26 -0
  50. package/dist/widget/iconSet.d.ts.map +1 -0
  51. package/dist/widget/icons.d.ts +5 -0
  52. package/dist/widget/icons.d.ts.map +1 -1
  53. package/dist/widget/index.cjs +3035 -2561
  54. package/dist/widget/index.cjs.map +1 -1
  55. package/dist/widget/index.d.ts +3 -0
  56. package/dist/widget/index.d.ts.map +1 -1
  57. package/dist/widget/index.js +1546 -585
  58. package/dist/widget/index.js.map +1 -1
  59. package/dist/widget/legendValues.d.ts +14 -0
  60. package/dist/widget/legendValues.d.ts.map +1 -0
  61. package/dist/widget/types.d.ts +34 -8
  62. package/dist/widget/types.d.ts.map +1 -1
  63. package/dist/widget/widgetConfig.d.ts +1 -5
  64. package/dist/widget/widgetConfig.d.ts.map +1 -1
  65. package/dist/widget/widgetTimeframes.d.ts +20 -0
  66. package/dist/widget/widgetTimeframes.d.ts.map +1 -0
  67. package/package.json +3 -3
  68. package/dist/DragDropImporter-BazeSQPD.cjs +0 -2
  69. package/dist/DragDropImporter-BazeSQPD.cjs.map +0 -1
  70. package/dist/DragDropImporter-cURSpfUb.js.map +0 -1
@@ -9,6 +9,19 @@ export declare class ChartWidget {
9
9
  private sidebar;
10
10
  private settings;
11
11
  private statusBar;
12
+ private goToDate;
13
+ private readonly tooltip;
14
+ private indicatorLegend;
15
+ private legendFrame;
16
+ /**
17
+ * Modals (settings, search, command palette, hotkeys) mount here: it carries
18
+ * the theme tokens to `document.body`, and moves inside the widget while
19
+ * the widget is fullscreen, where nothing outside it is shown.
20
+ */
21
+ private readonly portal;
22
+ private readonly overlayHost;
23
+ private readonly onRootPointerDown;
24
+ private readonly onFullscreenChange;
12
25
  private commandPalette;
13
26
  private symbolSearch;
14
27
  private hotkeySheet;
@@ -23,16 +36,24 @@ export declare class ChartWidget {
23
36
  private depthLadder;
24
37
  private dataWindow;
25
38
  private lastHoverIndex;
39
+ /** The bar the on-chart indicator values are read at; null = the latest. */
40
+ private legendHoverIndex;
26
41
  private favoritesStore;
42
+ /** Timeframes pinned to the toolbar (same store shape as drawing favourites). */
43
+ private timeframeFavorites;
44
+ /** Timeframes on offer, shortest first. */
45
+ private timeframes;
27
46
  private watchlist;
28
47
  private watchlistSparkBuffer;
29
48
  private sessionRefPrice;
30
49
  /** Per-symbol refPrice explicitly pushed by the host via `setWatchlistEntry` — takes precedence over `sessionRefPrice`. */
31
50
  private hostWatchlistRefPrice;
32
51
  private watchlistInterval;
33
- private replayOriginalData;
34
52
  private replayPollInterval;
53
+ /** Bars revealed per second. */
35
54
  private replaySpeed;
55
+ /** While picking the start bar: shades the bars right of the pointer. */
56
+ private replayShade;
36
57
  private layoutKeyPrefix;
37
58
  private layoutDebounceMs;
38
59
  private activeLayoutKey;
@@ -70,12 +91,22 @@ export declare class ChartWidget {
70
91
  */
71
92
  setWatchlistEntry(symbol: string, entry: Partial<WatchlistEntry>): void;
72
93
  private tickWatchlist;
94
+ /** Ignored when the chart's `features.timeframes` whitelist leaves `tf` out. */
73
95
  setTimeframe(tf: TimeFrame): Promise<void>;
74
96
  setTheme(theme: import('@tradecanvas/commons').ThemeName | Theme): void;
75
97
  getChart(): Chart;
76
98
  destroy(): void;
77
99
  private handleSymbolClick;
78
100
  private handleTimeframe;
101
+ /** Fill the screen with the widget, or leave fullscreen. */
102
+ toggleFullscreen(): void;
103
+ /** The display timezone from the settings: minutes east of UTC, null = local. */
104
+ private displayTzOffset;
105
+ private toggleGoToDate;
106
+ private goToWallTime;
107
+ /** Pinned timeframes that are still on offer, shortest first. */
108
+ private pinnedTimeframes;
109
+ private handleToggleTimeframeFavorite;
79
110
  /**
80
111
  * Load the widget's base series. Prefer this over `getChart().setData()` so
81
112
  * client-side timeframe resampling has a finest-resolution source to
@@ -125,6 +156,10 @@ export declare class ChartWidget {
125
156
  private getAlertChannelValue;
126
157
  private formatAlertPrice;
127
158
  private handleChartType;
159
+ /**
160
+ * Add another instance — picking EMA twice gives two EMAs (e.g. 20 and 50
161
+ * once their settings are changed). Remove one from its chip.
162
+ */
128
163
  private handleAddIndicator;
129
164
  private handleRemoveIndicator;
130
165
  private toggleCommandPalette;
@@ -132,6 +167,7 @@ export declare class ChartWidget {
132
167
  private handleAction;
133
168
  private handleDrawingTool;
134
169
  private handleCancelDrawing;
170
+ private handleToggleStayInDrawing;
135
171
  private handleToggleMagnet;
136
172
  private handleToggleTheme;
137
173
  private openSettings;
@@ -148,22 +184,50 @@ export declare class ChartWidget {
148
184
  clearSavedLayout(symbol?: string): void;
149
185
  private applySymbolLayout;
150
186
  private flushActiveLayout;
151
- /**
152
- * After loading a layout, the chart restores indicator instances but our
153
- * `state.activeIndicators` map (used to render the chip strip) is stale.
154
- * Rebuild it from the live `getActiveIndicators` list.
155
- */
156
- private rebuildActiveIndicatorsMapFromChart;
187
+ /** Rebuild the chip strip from the chart's indicator instances. */
188
+ private syncIndicatorsFromChart;
157
189
  /** Open (or close) bar replay with its scrubber — what the toolbar's Replay button does. */
158
190
  toggleReplay(): void;
191
+ /**
192
+ * Open replay in "pick a start bar" mode: the bars right of the pointer
193
+ * are shaded, and a click cuts the chart there and waits paused. Play
194
+ * starts from a default point; "random bar" picks one.
195
+ */
159
196
  private enterReplay;
197
+ private readonly hideReplayShade;
198
+ /**
199
+ * Open replay (if it isn't open) and start it at bar `index` — paused, or
200
+ * playing when `play` is set — skipping the pick-a-bar step.
201
+ */
202
+ replayFrom(index: number, play?: boolean): void;
203
+ /** Cut the chart at `index` and wait paused (or play at once). */
204
+ private startReplayAt;
205
+ /** Bars available to replay: the whole series, not the slice on screen. */
206
+ private replayTotal;
207
+ /** Mirror the replay engine in the bar; close it if the session ended elsewhere. */
208
+ private syncReplayBar;
209
+ private stepReplay;
210
+ /** Replay shortcuts: Shift+←/→ step one bar; Escape cancels picking a start bar. */
211
+ private handleReplayKey;
212
+ private positionReplayShade;
213
+ /** Leave replay and return to the live series (with updates that arrived meanwhile). */
160
214
  private exitReplay;
215
+ private teardownReplayUi;
161
216
  private applySettings;
162
217
  private resetSettings;
163
218
  private connectStream;
219
+ /** Redraw the on-chart indicator list on the next frame (coalesced). */
220
+ private scheduleLegend;
221
+ private renderLegend;
164
222
  private updateUI;
165
223
  private resolveIsDark;
166
224
  private resolveTheme;
167
225
  private isColorDark;
168
226
  }
227
+ /**
228
+ * "EMA 20", "BB 20 2", "MACD 12 26 9": the short name plus up to three
229
+ * numeric parameters, in the indicator's own order, so two instances of the
230
+ * same indicator can be told apart.
231
+ */
232
+ export declare function indicatorChipLabel(id: string, params: Record<string, unknown>, defaults?: Record<string, unknown>): string;
169
233
  //# sourceMappingURL=ChartWidget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartWidget.d.ts","sourceRoot":"","sources":["../../src/widget/ChartWidget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChartWidget.d.ts","sourceRoot":"","sources":["../../src/widget/ChartWidget.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ export interface CommandPaletteCallbacks {
15
15
  onClose: () => void;
16
16
  }
17
17
  export declare class WidgetCommandPalette {
18
+ private readonly host;
18
19
  private backdrop;
19
20
  private modal;
20
21
  private input;
@@ -24,7 +25,8 @@ export declare class WidgetCommandPalette {
24
25
  private selectedIndex;
25
26
  private callbacks;
26
27
  private boundKeydown;
27
- constructor(callbacks: CommandPaletteCallbacks);
28
+ /** Where the overlay mounts (the widget's portal: themed, and inside it when fullscreen). */
29
+ constructor(callbacks: CommandPaletteCallbacks, host?: () => HTMLElement);
28
30
  open(items: CommandItem[]): void;
29
31
  close(): void;
30
32
  isOpen(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetCommandPalette.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetCommandPalette.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAElF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,WAAW,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAA6B;gBAErC,SAAS,EAAE,uBAAuB;IAK9C,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI;IAoDhC,KAAK,IAAI,IAAI;IAWb,MAAM,IAAI,OAAO;IAIjB,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,UAAU;IA2DlB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,MAAM;IAwBd,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,aAAa;IAWrB,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"WidgetCommandPalette.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetCommandPalette.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAElF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,WAAW,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,qBAAa,oBAAoB;IAc7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAbvB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAA6B;IAEjD,6FAA6F;gBAE3F,SAAS,EAAE,uBAAuB,EACjB,IAAI,GAAE,MAAM,WAAiC;IAMhE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI;IAmDhC,KAAK,IAAI,IAAI;IAWb,MAAM,IAAI,OAAO;IAIjB,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,UAAU;IA2DlB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,MAAM;IAwBd,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,aAAa;IAWrB,OAAO,IAAI,IAAI;CAGhB"}
@@ -5,9 +5,15 @@ export declare class WidgetDrawingSidebar {
5
5
  private el;
6
6
  private groupWraps;
7
7
  private groupButtons;
8
+ /** Per group, the icon holder in its button and the tool it stands for (the last one used). */
9
+ private groupIcons;
10
+ private groupTools;
8
11
  private cursorBtn;
9
12
  private magnetBtn;
13
+ private stayBtn;
10
14
  private flyoutEl;
15
+ private flyoutIdx;
16
+ private flyoutHideTimer;
11
17
  private favoritesEl;
12
18
  private favoritesDivider;
13
19
  private favorites;
@@ -17,6 +23,12 @@ export declare class WidgetDrawingSidebar {
17
23
  setFavorites(favorites: string[]): void;
18
24
  private renderFavorites;
19
25
  private showFlyout;
26
+ /**
27
+ * Close a moment after the pointer leaves, so one that slips off the menu
28
+ * on its way to an item (a diagonal move) doesn't lose it.
29
+ */
30
+ private scheduleHideFlyout;
31
+ private cancelHideFlyout;
20
32
  private hideFlyout;
21
33
  update(state: WidgetState): void;
22
34
  private divider;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetDrawingSidebar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetDrawingSidebar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAqC/E,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,SAAS,CAAgB;gBAErB,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB;IASjF,OAAO,CAAC,KAAK;IAmGb,qCAAqC;IACrC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,UAAU;IAsClB,OAAO,CAAC,UAAU;IAOlB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IA4BhC,OAAO,CAAC,OAAO;IAMf,OAAO,IAAI,IAAI;CAIhB"}
1
+ {"version":3,"file":"WidgetDrawingSidebar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetDrawingSidebar.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAkB/E,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,YAAY,CAA2B;IAC/C,+FAA+F;IAC/F,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,SAAS,CAAgB;gBAErB,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB;IASjF,OAAO,CAAC,KAAK;IA8Hb,qCAAqC;IACrC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,UAAU;IAqDlB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,UAAU;IASlB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAwChC,OAAO,CAAC,OAAO;IAMf,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * A wall-clock date ("2026-03-01") and time ("14:30", empty = midnight) in the
3
+ * display timezone (`tzOffsetMinutes` east of UTC; null = the browser's) as a
4
+ * UTC timestamp. Null when the date or time is not valid.
5
+ */
6
+ export declare function wallTimeToUtc(date: string, time: string, tzOffsetMinutes: number | null): number | null;
7
+ /** The date and time fields' values for `ts` in the display timezone. */
8
+ export declare function utcToWallTime(ts: number, tzOffsetMinutes: number | null): {
9
+ date: string;
10
+ time: string;
11
+ };
12
+ export interface GoToDateLabels {
13
+ title: string;
14
+ date: string;
15
+ time: string;
16
+ submit: string;
17
+ cancel: string;
18
+ }
19
+ /**
20
+ * "Go to date" popover: a date and an optional time. Enter submits, Escape or
21
+ * a click outside closes it, and focus returns to whatever opened it.
22
+ */
23
+ export declare class WidgetGoToDate {
24
+ private readonly host;
25
+ private readonly labels;
26
+ private readonly onSubmit;
27
+ private form;
28
+ private returnFocus;
29
+ /** The button that opened it: pressing it again toggles, so it's not "outside". */
30
+ private opener;
31
+ private readonly onOutside;
32
+ constructor(host: HTMLElement, labels: GoToDateLabels, onSubmit: (value: {
33
+ date: string;
34
+ time: string;
35
+ }) => void);
36
+ isOpen(): boolean;
37
+ open(initial: {
38
+ date: string;
39
+ time: string;
40
+ }, opener?: Element | null): void;
41
+ close(): void;
42
+ destroy(): void;
43
+ private field;
44
+ }
45
+ //# sourceMappingURL=WidgetGoToDate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetGoToDate.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetGoToDate.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAavG;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAcxG;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,cAAc;IAWvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAZ3B,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,WAAW,CAA4B;IAC/C,mFAAmF;IACnF,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGxB;gBAGiB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI;IAG5E,MAAM,IAAI,OAAO;IAIjB,IAAI,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,GAAE,OAAO,GAAG,IAAW,GAAG,IAAI;IAmDlF,KAAK,IAAI,IAAI;IAUb,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,KAAK;CAad"}
@@ -8,12 +8,14 @@ export interface HotkeySheetCallbacks {
8
8
  onClose: () => void;
9
9
  }
10
10
  export declare class WidgetHotkeySheet {
11
+ private readonly host;
11
12
  private backdrop;
12
13
  private modal;
13
14
  private callbacks;
14
15
  private t;
15
16
  private boundKeydown;
16
- constructor(callbacks: HotkeySheetCallbacks, t: Translator);
17
+ /** Where the overlay mounts (the widget's portal: themed, and inside it when fullscreen). */
18
+ constructor(callbacks: HotkeySheetCallbacks, t: Translator, host?: () => HTMLElement);
17
19
  open(): void;
18
20
  close(): void;
19
21
  isOpen(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetHotkeySheet.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetHotkeySheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA8ED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,CAAC,CAAa;IACtB,OAAO,CAAC,YAAY,CAA6B;gBAErC,SAAS,EAAE,oBAAoB,EAAE,CAAC,EAAE,UAAU;IAW1D,IAAI,IAAI,IAAI;IAuFZ,KAAK,IAAI,IAAI;IASb,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"WidgetHotkeySheet.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetHotkeySheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAkFD,qBAAa,iBAAiB;IAW1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAVvB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,CAAC,CAAa;IACtB,OAAO,CAAC,YAAY,CAA6B;IAEjD,6FAA6F;gBAE3F,SAAS,EAAE,oBAAoB,EAC/B,CAAC,EAAE,UAAU,EACI,IAAI,GAAE,MAAM,WAAiC;IAYhE,IAAI,IAAI,IAAI;IAsFZ,KAAK,IAAI,IAAI;IASb,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,68 @@
1
+ export interface IndicatorLegendRow {
2
+ instanceId: string;
3
+ /** "EMA 50", "MACD 12 26 9". */
4
+ label: string;
5
+ visible: boolean;
6
+ /** The values at the bar in view; `color` null = the neutral text colour. */
7
+ values: readonly {
8
+ text: string;
9
+ color: string | null;
10
+ }[];
11
+ /**
12
+ * Where the row sits inside its own pane (container px, `width` = the room
13
+ * it may take); null = stacked under the OHLCV legend.
14
+ */
15
+ pane: {
16
+ x: number;
17
+ y: number;
18
+ width: number;
19
+ } | null;
20
+ }
21
+ export interface IndicatorLegendCallbacks {
22
+ onToggleVisible: (instanceId: string, visible: boolean) => void;
23
+ onSettings: (instanceId: string) => void;
24
+ onRemove: (instanceId: string) => void;
25
+ }
26
+ export interface IndicatorLegendLabels {
27
+ show: string;
28
+ hide: string;
29
+ settings: string;
30
+ remove: string;
31
+ collapse: string;
32
+ expand: string;
33
+ }
34
+ /**
35
+ * The indicators on the chart itself, instead of chips in the toolbar: price
36
+ * pane indicators stack under the OHLCV legend, pane indicators sit at the
37
+ * top of their pane. Each row reads "EMA 50 123.45" and, on hover or focus,
38
+ * offers show/hide, settings and remove. A long stack can be collapsed.
39
+ *
40
+ * `update()` is cheap to call every frame: rows are kept by instance id and
41
+ * only changed text and positions are written.
42
+ */
43
+ export declare class WidgetIndicatorLegend {
44
+ private readonly host;
45
+ private readonly callbacks;
46
+ private readonly labels;
47
+ private readonly stack;
48
+ private readonly toggle;
49
+ private readonly rows;
50
+ private collapsed;
51
+ private toggleKey;
52
+ private stackKey;
53
+ constructor(host: HTMLElement, callbacks: IndicatorLegendCallbacks, labels: IndicatorLegendLabels);
54
+ update(rows: readonly IndicatorLegendRow[], overlay: {
55
+ left: number;
56
+ top: number;
57
+ }): void;
58
+ destroy(): void;
59
+ private createRow;
60
+ private fill;
61
+ /** Pane rows are placed in their pane; stacked rows flow in the stack. */
62
+ private place;
63
+ private setCollapsed;
64
+ private overlayCount;
65
+ /** Written only when something changed: `update()` runs every frame. */
66
+ private renderToggle;
67
+ }
68
+ //# sourceMappingURL=WidgetIndicatorLegend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetIndicatorLegend.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetIndicatorLegend.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,MAAM,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IAC1D;;;OAGG;IACH,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAkBD;;;;;;;;GAQG;AACH,qBAAa,qBAAqB;IAS9B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,QAAQ,CAAM;gBAGH,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,wBAAwB,EACnC,MAAM,EAAE,qBAAqB;IAehD,MAAM,CAAC,IAAI,EAAE,SAAS,kBAAkB,EAAE,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAiCzF,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,SAAS;IAwCjB,OAAO,CAAC,IAAI;IAwBZ,0EAA0E;IAC1E,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,YAAY;IAIpB,wEAAwE;IACxE,OAAO,CAAC,YAAY;CAcrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetLoadingOverlay.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetLoadingOverlay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAkBzC;;;;;;;;;;GAUG;AACH,qBAAa,oBAAoB;IAOE,OAAO,CAAC,QAAQ,CAAC,WAAW;IAN7D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,SAAS,CAA8C;IAE/D,OAAO,CAAC,KAAK,CAA4C;gBAE7C,MAAM,EAAE,WAAW,EAAmB,WAAW,EAAE,MAAM;IAyCrE;;;OAGG;IACH,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,UAAQ,GAAG,IAAI;IAgBnD,8EAA8E;IAC9E,GAAG,IAAI,IAAI;IAMX,wEAAwE;IACxE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3B,8EAA8E;IAC9E,QAAQ,IAAI,OAAO;IAInB,iEAAiE;IACjE,SAAS,IAAI,OAAO;IAIpB,uDAAuD;IACvD,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,UAAU;CAMnB"}
1
+ {"version":3,"file":"WidgetLoadingOverlay.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetLoadingOverlay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAkBzC;;;;;;;;;;GAUG;AACH,qBAAa,oBAAoB;IAOE,OAAO,CAAC,QAAQ,CAAC,WAAW;IAN7D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,SAAS,CAA8C;IAE/D,OAAO,CAAC,KAAK,CAA4C;gBAE7C,MAAM,EAAE,WAAW,EAAmB,WAAW,EAAE,MAAM;IA0CrE;;;OAGG;IACH,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,UAAQ,GAAG,IAAI;IAgBnD,8EAA8E;IAC9E,GAAG,IAAI,IAAI;IAMX,wEAAwE;IACxE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3B,8EAA8E;IAC9E,QAAQ,IAAI,OAAO;IAInB,iEAAiE;IACjE,SAAS,IAAI,OAAO;IAIpB,uDAAuD;IACvD,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,UAAU;CAMnB"}
@@ -1,37 +1,67 @@
1
1
  /**
2
- * Replay scrubber bar — surfaces the chart's existing replay engine as a
3
- * visible bottom-of-chart control. Mounts under the chart container, owns
4
- * its own lifecycle, and reports user intent up via callbacks (no chart
5
- * coupling — the host calls chart.replayStart() / replayPause() / etc.).
2
+ * Replay control bar. Surfaces the chart's replay engine as a floating
3
+ * bottom-of-chart control and reports user intent through callbacks (no
4
+ * chart coupling — the host calls chart.replayStart() / replayPause() / …).
5
+ *
6
+ * Two modes: `select` (pick the start bar: a hint, "random bar", play from a
7
+ * default start) and `replay` (step, play/pause, scrub, speed). "Back to
8
+ * realtime" is always there and is highlighted once the replay reaches the
9
+ * last bar.
6
10
  */
7
11
  export interface ReplayBarCallbacks {
8
12
  onPlay: () => void;
9
13
  onPause: () => void;
10
- onStop: () => void;
11
14
  onStepBack: () => void;
12
15
  onStepForward: () => void;
13
16
  onSeek: (index: number) => void;
17
+ /** Bars revealed per second. */
14
18
  onSpeedChange: (barsPerSecond: number) => void;
19
+ onRandomStart: () => void;
15
20
  onClose: () => void;
16
21
  }
22
+ export interface ReplayBarLabels {
23
+ selectHint: string;
24
+ random: string;
25
+ realtime: string;
26
+ barsPerSecond: string;
27
+ play: string;
28
+ pause: string;
29
+ stepBack: string;
30
+ stepForward: string;
31
+ }
32
+ export declare const DEFAULT_REPLAY_LABELS: ReplayBarLabels;
17
33
  export type ReplayBarState = 'playing' | 'paused' | 'stopped';
34
+ export type ReplayBarMode = 'select' | 'replay';
35
+ /** Replay speeds, in bars revealed per second. */
36
+ export declare const REPLAY_SPEEDS: readonly [1, 2, 3, 5, 10, 25, 50];
37
+ export declare const DEFAULT_REPLAY_SPEED = 5;
18
38
  export declare class WidgetReplayBar {
39
+ private readonly callbacks;
19
40
  private root;
20
41
  private scrubber;
21
42
  private progressLabel;
22
43
  private playBtn;
44
+ private realtimeBtn;
23
45
  private state;
46
+ private mode;
47
+ private ended;
24
48
  private total;
25
49
  private speed;
26
- private callbacks;
27
- constructor(callbacks: ReplayBarCallbacks);
50
+ private readonly labels;
51
+ constructor(callbacks: ReplayBarCallbacks, labels?: Partial<ReplayBarLabels>);
28
52
  mount(host: HTMLElement, opts: {
29
53
  total: number;
30
54
  speed?: number;
55
+ mode?: ReplayBarMode;
31
56
  }): void;
32
57
  unmount(): void;
33
58
  isMounted(): boolean;
59
+ getMode(): ReplayBarMode;
60
+ setMode(mode: ReplayBarMode): void;
34
61
  setState(state: ReplayBarState): void;
62
+ /** The replay sits on its last bar: nothing left to play. */
63
+ setEnded(ended: boolean): void;
64
+ /** `current`: index of the bar on screen. */
35
65
  setProgress(current: number, total: number): void;
36
66
  destroy(): void;
37
67
  private markup;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetReplayBar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetReplayBar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,aAAa,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAI9D,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAAqB;gBAE1B,SAAS,EAAE,kBAAkB;IAIzC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAevE,OAAO,IAAI,IAAI;IASf,SAAS,IAAI,OAAO;IAIpB,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAKrC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAWjD,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,MAAM;CAKf"}
1
+ {"version":3,"file":"WidgetReplayBar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetReplayBar.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,gCAAgC;IAChC,aAAa,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,qBAAqB,EAAE,eASnC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhD,kDAAkD;AAClD,eAAO,MAAM,aAAa,mCAAoC,CAAC;AAC/D,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,qBAAa,eAAe;IAad,OAAO,CAAC,QAAQ,CAAC,SAAS;IAZtC,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAEZ,SAAS,EAAE,kBAAkB,EAAE,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAIjG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,aAAa,CAAA;KAAE,GAAG,IAAI;IAkB7F,OAAO,IAAI,IAAI;IAWf,SAAS,IAAI,OAAO;IAIpB,OAAO,IAAI,aAAa;IAIxB,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IASlC,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAKrC,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAM9B,6CAA6C;IAC7C,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAWjD,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,MAAM;IAsBd,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,MAAM;CAiBf"}
@@ -1,6 +1,9 @@
1
1
  import { ChartSettingsState, SettingsCallbacks } from './types.js';
2
2
  import { Translator } from './i18n.js';
3
3
  export declare class WidgetSettings {
4
+ private readonly available;
5
+ /** Where the panel mounts (the widget's portal: themed, and inside it when fullscreen). */
6
+ private readonly host;
4
7
  private callbacks;
5
8
  private t;
6
9
  private backdrop;
@@ -9,7 +12,16 @@ export declare class WidgetSettings {
9
12
  private currentSettings;
10
13
  private bodyEl;
11
14
  private tabButtons;
12
- constructor(callbacks: SettingsCallbacks, t: Translator);
15
+ /**
16
+ * `barCountdown` / `logScale` false leave out the controls for features the
17
+ * chart has switched off.
18
+ */
19
+ constructor(callbacks: SettingsCallbacks, t: Translator, available?: {
20
+ barCountdown?: boolean;
21
+ logScale?: boolean;
22
+ },
23
+ /** Where the panel mounts (the widget's portal: themed, and inside it when fullscreen). */
24
+ host?: () => HTMLElement);
13
25
  open(currentSettings: ChartSettingsState): void;
14
26
  close(): void;
15
27
  private buildModal;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetSettings.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAExE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAK5C,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,CAAC,CAAa;IACtB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAA2B;gBAEjC,SAAS,EAAE,iBAAiB,EAAE,CAAC,EAAE,UAAU;IAKvD,IAAI,CAAC,eAAe,EAAE,kBAAkB,GAAG,IAAI;IAM/C,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,UAAU;IAuFlB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,gBAAgB;IAyDxB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,QAAQ;IA+BhB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,SAAS;IA4BjB,OAAO,CAAC,QAAQ;IA2ChB,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"WidgetSettings.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAExE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAK5C,qBAAa,cAAc;IAiBvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,2FAA2F;IAC3F,OAAO,CAAC,QAAQ,CAAC,IAAI;IAlBvB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,CAAC,CAAa;IACtB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAA2B;IAE7C;;;OAGG;gBAED,SAAS,EAAE,iBAAiB,EAC5B,CAAC,EAAE,UAAU,EACI,SAAS,GAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO;IAC/E,2FAA2F;IAC1E,IAAI,GAAE,MAAM,WAAiC;IAMhE,IAAI,CAAC,eAAe,EAAE,kBAAkB,GAAG,IAAI;IAM/C,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,UAAU;IAuFlB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,gBAAgB;IA2DxB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,QAAQ;IA+BhB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,SAAS;IA4BjB,OAAO,CAAC,QAAQ;IA2ChB,OAAO,IAAI,IAAI;CAGhB"}
@@ -1,9 +1,23 @@
1
+ import { RangePreset } from '@tradecanvas/core';
2
+ export interface StatusBarRange {
3
+ presets: readonly RangePreset[];
4
+ /** Button text per preset; the preset itself when missing. */
5
+ presetLabels?: Partial<Record<RangePreset, string>>;
6
+ groupLabel: string;
7
+ goToLabel: string;
8
+ onPreset: (preset: RangePreset) => void;
9
+ onGoTo: () => void;
10
+ }
11
+ /**
12
+ * Bottom bar: range presets and "go to date" on the left (when `range` is
13
+ * given), connection state and symbol on the right.
14
+ */
1
15
  export declare class WidgetStatusBar {
2
16
  private el;
3
17
  private dotEl;
4
18
  private messageEl;
5
19
  private infoEl;
6
- constructor(host: HTMLElement);
20
+ constructor(host: HTMLElement, range?: StatusBarRange);
7
21
  update(state: {
8
22
  connectionState: string;
9
23
  message: string;
@@ -11,5 +25,6 @@ export declare class WidgetStatusBar {
11
25
  timeframe: string;
12
26
  }): void;
13
27
  destroy(): void;
28
+ private buildRange;
14
29
  }
15
30
  //# sourceMappingURL=WidgetStatusBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetStatusBar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetStatusBar.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAkB;gBAEpB,IAAI,EAAE,WAAW;IAsB7B,MAAM,CAAC,KAAK,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAYpG,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"WidgetStatusBar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetStatusBar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,8DAA8D;IAC9D,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAkB;gBAEpB,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,cAAc;IA6BrD,MAAM,CAAC,KAAK,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAYpG,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,UAAU;CA2BnB"}
@@ -8,6 +8,7 @@ export interface SymbolSearchCallbacks {
8
8
  onClose: () => void;
9
9
  }
10
10
  export declare class WidgetSymbolSearch {
11
+ private readonly host;
11
12
  private backdrop;
12
13
  private modal;
13
14
  private input;
@@ -20,7 +21,8 @@ export declare class WidgetSymbolSearch {
20
21
  private boundKeydown;
21
22
  /** One-shot pick override — when set, this open() routes picks here instead. */
22
23
  private pickOverride;
23
- constructor(callbacks: SymbolSearchCallbacks);
24
+ /** Where the overlay mounts (the widget's portal: themed, and inside it when fullscreen). */
25
+ constructor(callbacks: SymbolSearchCallbacks, host?: () => HTMLElement);
24
26
  open(symbols: string[], current: string, onPick?: (symbol: string) => void): void;
25
27
  close(): void;
26
28
  isOpen(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetSymbolSearch.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSymbolSearch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAOD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,YAAY,CAA6B;IACjD,gFAAgF;IAChF,OAAO,CAAC,YAAY,CAA2C;gBAEnD,SAAS,EAAE,qBAAqB;IAK5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAwDjF,KAAK,IAAI,IAAI;IAYb,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,UAAU;IA0ClB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,aAAa;CA0BtB"}
1
+ {"version":3,"file":"WidgetSymbolSearch.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSymbolSearch.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAOD,qBAAa,kBAAkB;IAiB3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAhBvB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,YAAY,CAA6B;IACjD,gFAAgF;IAChF,OAAO,CAAC,YAAY,CAA2C;IAE/D,6FAA6F;gBAE3F,SAAS,EAAE,qBAAqB,EACf,IAAI,GAAE,MAAM,WAAiC;IAMhE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAuDjF,KAAK,IAAI,IAAI;IAYb,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,UAAU;IA0ClB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,aAAa;CA0BtB"}
@@ -1,3 +1,4 @@
1
+ import { TimeFrame } from '@tradecanvas/commons';
1
2
  import { ToolbarConfig, ToolbarCallbacks, WidgetState } from './types.js';
2
3
  import { Translator } from './i18n.js';
3
4
  export declare class WidgetToolbar {
@@ -7,16 +8,24 @@ export declare class WidgetToolbar {
7
8
  private el;
8
9
  private chartTypeDropdown;
9
10
  private indicatorDropdown;
10
- private tfButtons;
11
- private chipsContainer;
11
+ private tfGroup;
12
+ private tfDropdown;
13
+ private tfFavorites;
14
+ private tfRendered;
12
15
  private themeBtn;
16
+ private fullscreenBtn;
13
17
  constructor(host: HTMLElement, config: ToolbarConfig, callbacks: ToolbarCallbacks, t: Translator);
14
18
  private build;
19
+ /** Swap the fullscreen button between enter and exit. */
20
+ setFullscreen(on: boolean): void;
15
21
  private chartTypeLabel;
16
22
  private buildChartTypeMenu;
23
+ /** Re-pin after the user starred or unstarred a timeframe. */
24
+ setTimeframeFavorites(favorites: TimeFrame[]): void;
25
+ private buildTimeframeMenu;
26
+ private renderTimeframes;
17
27
  private buildIndicatorMenu;
18
28
  update(state: WidgetState): void;
19
- private getActiveIndicatorList;
20
29
  private sep;
21
30
  private spacer;
22
31
  private iconBtn;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetToolbar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetToolbar.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AAGhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,CAAC,CAAa;IACtB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAkC;gBAEtC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU;IAUhG,OAAO,CAAC,KAAK;IAgHb,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,kBAAkB;IA8B1B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAyDhC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,OAAO;IASf,OAAO,IAAI,IAAI;CAKhB"}
1
+ {"version":3,"file":"WidgetToolbar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetToolbar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,CAAC,CAAa;IACtB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,aAAa,CAAkC;gBAE3C,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU;IAUhG,OAAO,CAAC,KAAK;IA2Hb,yDAAyD;IACzD,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAQhC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,kBAAkB;IAkB1B,8DAA8D;IAC9D,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI;IAMnD,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,kBAAkB;IA4B1B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAiChC,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,OAAO;IASf,OAAO,IAAI,IAAI;CAKhB"}