@tradecanvas/chart 0.8.2 → 0.14.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 (78) hide show
  1. package/README.md +86 -4
  2. package/dist/Chart.d.ts +121 -1
  3. package/dist/Chart.d.ts.map +1 -1
  4. package/dist/{Chart-Cn_TSMO7.js → DragDropImporter-Br2ez5Gz.js} +560 -91
  5. package/dist/DragDropImporter-Br2ez5Gz.js.map +1 -0
  6. package/dist/DragDropImporter-ycI_Tcs6.cjs +2 -0
  7. package/dist/DragDropImporter-ycI_Tcs6.cjs.map +1 -0
  8. package/dist/finance/PerformanceDashboard.d.ts +43 -0
  9. package/dist/finance/PerformanceDashboard.d.ts.map +1 -0
  10. package/dist/finance/index.d.ts +4 -0
  11. package/dist/finance/index.d.ts.map +1 -1
  12. package/dist/finance/performanceData.d.ts +39 -0
  13. package/dist/finance/performanceData.d.ts.map +1 -0
  14. package/dist/index.cjs +1 -1
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.ts +5 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +287 -30
  19. package/dist/index.js.map +1 -1
  20. package/dist/io/DragDropImporter.d.ts +34 -0
  21. package/dist/io/DragDropImporter.d.ts.map +1 -0
  22. package/dist/io/index.d.ts +7 -0
  23. package/dist/io/index.d.ts.map +1 -0
  24. package/dist/io/parseOHLCV.d.ts +21 -0
  25. package/dist/io/parseOHLCV.d.ts.map +1 -0
  26. package/dist/io/resampleOHLCV.d.ts +29 -0
  27. package/dist/io/resampleOHLCV.d.ts.map +1 -0
  28. package/dist/widget/AlertNotifier.d.ts +32 -0
  29. package/dist/widget/AlertNotifier.d.ts.map +1 -0
  30. package/dist/widget/ChartWidget.d.ts +100 -2
  31. package/dist/widget/ChartWidget.d.ts.map +1 -1
  32. package/dist/widget/DrawingFavoritesStore.d.ts +22 -0
  33. package/dist/widget/DrawingFavoritesStore.d.ts.map +1 -0
  34. package/dist/widget/DrawingTemplateStore.d.ts +29 -0
  35. package/dist/widget/DrawingTemplateStore.d.ts.map +1 -0
  36. package/dist/widget/WidgetAlertsPanel.d.ts +58 -0
  37. package/dist/widget/WidgetAlertsPanel.d.ts.map +1 -0
  38. package/dist/widget/WidgetBracketBar.d.ts +21 -0
  39. package/dist/widget/WidgetBracketBar.d.ts.map +1 -0
  40. package/dist/widget/WidgetDataWindow.d.ts +41 -0
  41. package/dist/widget/WidgetDataWindow.d.ts.map +1 -0
  42. package/dist/widget/WidgetDepthLadder.d.ts +29 -0
  43. package/dist/widget/WidgetDepthLadder.d.ts.map +1 -0
  44. package/dist/widget/WidgetDrawingSidebar.d.ts +6 -0
  45. package/dist/widget/WidgetDrawingSidebar.d.ts.map +1 -1
  46. package/dist/widget/WidgetDrawingStyle.d.ts +36 -0
  47. package/dist/widget/WidgetDrawingStyle.d.ts.map +1 -0
  48. package/dist/widget/WidgetHotkeySheet.d.ts +20 -0
  49. package/dist/widget/WidgetHotkeySheet.d.ts.map +1 -0
  50. package/dist/widget/WidgetIndicatorSettings.d.ts +42 -0
  51. package/dist/widget/WidgetIndicatorSettings.d.ts.map +1 -0
  52. package/dist/widget/WidgetObjectTree.d.ts +59 -0
  53. package/dist/widget/WidgetObjectTree.d.ts.map +1 -0
  54. package/dist/widget/WidgetReplayBar.d.ts +41 -0
  55. package/dist/widget/WidgetReplayBar.d.ts.map +1 -0
  56. package/dist/widget/WidgetSettings.d.ts +1 -0
  57. package/dist/widget/WidgetSettings.d.ts.map +1 -1
  58. package/dist/widget/WidgetSymbolSearch.d.ts +34 -0
  59. package/dist/widget/WidgetSymbolSearch.d.ts.map +1 -0
  60. package/dist/widget/WidgetToolbar.d.ts.map +1 -1
  61. package/dist/widget/WidgetWatchlist.d.ts +39 -0
  62. package/dist/widget/WidgetWatchlist.d.ts.map +1 -0
  63. package/dist/widget/icons.d.ts.map +1 -1
  64. package/dist/widget/index.cjs +2372 -877
  65. package/dist/widget/index.cjs.map +1 -1
  66. package/dist/widget/index.js +2455 -185
  67. package/dist/widget/index.js.map +1 -1
  68. package/dist/widget/ladderRows.d.ts +21 -0
  69. package/dist/widget/ladderRows.d.ts.map +1 -0
  70. package/dist/widget/types.d.ts +91 -1
  71. package/dist/widget/types.d.ts.map +1 -1
  72. package/dist/widget/widgetConfig.d.ts.map +1 -1
  73. package/dist/widget/widgetShareState.d.ts +26 -0
  74. package/dist/widget/widgetShareState.d.ts.map +1 -0
  75. package/package.json +3 -3
  76. package/dist/Chart-Br_N-BCL.cjs +0 -2
  77. package/dist/Chart-Br_N-BCL.cjs.map +0 -1
  78. package/dist/Chart-Cn_TSMO7.js.map +0 -1
@@ -0,0 +1,34 @@
1
+ import { DataSeries } from '@tradecanvas/commons';
2
+ import { ParseResult } from './parseOHLCV.js';
3
+ export interface DragDropImporterCallbacks {
4
+ /** Called with the parsed series. Hook into chart.setData() here. */
5
+ onData: (data: DataSeries, result: ParseResult, file: File) => void;
6
+ /** Called when parsing throws. Hook a toast/banner here. */
7
+ onError?: (err: Error, file: File) => void;
8
+ }
9
+ /**
10
+ * Hooks `dragover` / `drop` on a host element so users can drop a CSV / JSON
11
+ * file onto the chart and get it loaded. A subtle dashed-outline overlay
12
+ * shows up during the drag for visual confirmation.
13
+ *
14
+ * The host owns calling `chart.setData()` via the `onData` callback — the
15
+ * importer stays decoupled from Chart so it can be reused in other surfaces
16
+ * (backtester UI, comparison views, etc.).
17
+ */
18
+ export declare class DragDropImporter {
19
+ private host;
20
+ private overlay;
21
+ private callbacks;
22
+ private bound;
23
+ private depth;
24
+ constructor(host: HTMLElement, callbacks: DragDropImporterCallbacks);
25
+ attach(): void;
26
+ detach(): void;
27
+ private onDragEnter;
28
+ private onDragOver;
29
+ private onDragLeave;
30
+ private onDrop;
31
+ private showOverlay;
32
+ private hideOverlay;
33
+ }
34
+ //# sourceMappingURL=DragDropImporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DragDropImporter.d.ts","sourceRoot":"","sources":["../../src/io/DragDropImporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE/D,MAAM,WAAW,yBAAyB;IACxC,qEAAqE;IACrE,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACpE,4DAA4D;IAC5D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,KAAK,CAA2I;IACxJ,OAAO,CAAC,KAAK,CAAK;gBAEN,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB;IAWnE,MAAM,IAAI,IAAI;IAOd,MAAM,IAAI,IAAI;IAQd,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,WAAW;YAML,MAAM;IAoBpB,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,WAAW;CAIpB"}
@@ -0,0 +1,7 @@
1
+ export { parseOHLCV } from './parseOHLCV.js';
2
+ export type { ParseResult } from './parseOHLCV.js';
3
+ export { DragDropImporter } from './DragDropImporter.js';
4
+ export type { DragDropImporterCallbacks } from './DragDropImporter.js';
5
+ export { resampleOHLCV, inferTimeframeMs, canResample } from './resampleOHLCV.js';
6
+ export type { ResampleOptions } from './resampleOHLCV.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/io/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAClF,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { DataSeries } from '@tradecanvas/commons';
2
+ /**
3
+ * Best-effort parser for OHLCV CSV / JSON drops.
4
+ *
5
+ * Recognises:
6
+ * - CSV (header-driven, comma / semicolon / tab delimiters)
7
+ * - JSON array of objects (`[{ time, open, high, low, close, volume }]`)
8
+ * - JSON array of arrays (`[[time, open, high, low, close, volume]]`)
9
+ *
10
+ * Time columns auto-detect ISO strings, unix-seconds, and unix-ms. Returned
11
+ * bars are sorted ascending by time and de-duplicated on collision.
12
+ */
13
+ export interface ParseResult {
14
+ data: DataSeries;
15
+ /** Total rows seen — useful for "imported 4321 of 5000 rows" style toasts. */
16
+ rowCount: number;
17
+ /** Rows skipped because of missing/invalid required fields. */
18
+ skipped: number;
19
+ }
20
+ export declare function parseOHLCV(text: string): ParseResult;
21
+ //# sourceMappingURL=parseOHLCV.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseOHLCV.d.ts","sourceRoot":"","sources":["../../src/io/parseOHLCV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;CACjB;AASD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAQpD"}
@@ -0,0 +1,29 @@
1
+ import { DataSeries, TimeFrame } from '@tradecanvas/commons';
2
+ export interface ResampleOptions {
3
+ /** 0 = Sunday, 1 = Monday (default) — anchor for weekly buckets. */
4
+ weekStartsOn?: 0 | 1;
5
+ }
6
+ /**
7
+ * Aggregate a finer OHLCV series into a coarser timeframe.
8
+ *
9
+ * Bars are grouped by calendar-aware bucket (see `timeframeBucketStart`):
10
+ * open = first bar's open, high/low = extremes, close = last bar's close,
11
+ * volume = sum. Input bars are assumed sorted ascending by `time` and are
12
+ * never mutated.
13
+ *
14
+ * Upsampling (target finer than source) cannot synthesize data — pass a target
15
+ * coarser than the source. Use `inferTimeframeMs` to detect the source spacing.
16
+ */
17
+ export declare function resampleOHLCV(bars: DataSeries, target: TimeFrame, opts?: ResampleOptions): DataSeries;
18
+ /**
19
+ * Estimate the source bar spacing in milliseconds from the median gap between
20
+ * consecutive bars. Robust to occasional gaps (weekends, halts). Returns 0 for
21
+ * series with fewer than two bars.
22
+ */
23
+ export declare function inferTimeframeMs(bars: DataSeries): number;
24
+ /**
25
+ * Whether `target` is coarser than (or equal to) the source spacing, i.e. a
26
+ * valid downsample. A non-positive `sourceMs` (unknown) is treated as valid.
27
+ */
28
+ export declare function canResample(sourceMs: number, target: TimeFrame): boolean;
29
+ //# sourceMappingURL=resampleOHLCV.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resampleOHLCV.d.ts","sourceRoot":"","sources":["../../src/io/resampleOHLCV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAW,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAG3E,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,eAAoB,GACzB,UAAU,CAkCZ;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAUzD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAGxE"}
@@ -0,0 +1,32 @@
1
+ export interface AlertNotifyOptions {
2
+ /** Play a sound on trigger. `true` = built-in beep, string = audio URL. Default `false`. */
3
+ sound?: boolean | string;
4
+ /** Show a desktop notification (requests permission on first use). Default `false`. */
5
+ desktop?: boolean;
6
+ /** Title for desktop notifications. Default `'Price alert'`. */
7
+ title?: string;
8
+ }
9
+ /** True when the Notification API is present and not denied. */
10
+ export declare function canRequestNotifications(): boolean;
11
+ /**
12
+ * Plays a sound and/or raises a desktop notification when a price alert fires.
13
+ * Browser-API heavy by nature — every entry point is guarded so it degrades to
14
+ * a no-op in SSR, unsupported browsers, or when permission is denied.
15
+ */
16
+ export declare class AlertNotifier {
17
+ private options;
18
+ private audioCtx;
19
+ private audioEl;
20
+ private permissionAsked;
21
+ constructor(options?: AlertNotifyOptions);
22
+ setOptions(options: AlertNotifyOptions): void;
23
+ /** Fire the configured notifications for a triggered alert. */
24
+ notify(message: string): void;
25
+ private playSound;
26
+ /** A short two-tone beep via Web Audio — no asset required. */
27
+ private beep;
28
+ private ensurePermission;
29
+ private showDesktop;
30
+ destroy(): void;
31
+ }
32
+ //# sourceMappingURL=AlertNotifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertNotifier.d.ts","sourceRoot":"","sources":["../../src/widget/AlertNotifier.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,gEAAgE;AAChE,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,eAAe,CAAS;gBAEpB,OAAO,GAAE,kBAAuB;IAc5C,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAI7C,+DAA+D;IAC/D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK7B,OAAO,CAAC,SAAS;IASjB,+DAA+D;IAC/D,OAAO,CAAC,IAAI;IAwBZ,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,WAAW;IAanB,OAAO,IAAI,IAAI;CAShB"}
@@ -1,6 +1,7 @@
1
- import { Theme, TimeFrame } from '@tradecanvas/commons';
1
+ import { Theme, TimeFrame, DepthData, DataSeries } from '@tradecanvas/commons';
2
2
  import { Chart } from '../Chart.js';
3
3
  import { ChartWidgetOptions } from './types.js';
4
+ import { WatchlistEntry } from './WidgetWatchlist.js';
4
5
  export declare class ChartWidget {
5
6
  private chart;
6
7
  private state;
@@ -9,23 +10,98 @@ export declare class ChartWidget {
9
10
  private settings;
10
11
  private statusBar;
11
12
  private commandPalette;
13
+ private symbolSearch;
14
+ private hotkeySheet;
15
+ private replayBar;
16
+ private dragDrop;
17
+ private alertsPanel;
18
+ private objectTree;
19
+ private indicatorSettings;
20
+ private drawingStyle;
21
+ private bracketBar;
22
+ private alertNotifier;
23
+ private depthLadder;
24
+ private dataWindow;
25
+ private lastHoverIndex;
26
+ private favoritesStore;
27
+ private watchlist;
28
+ private watchlistSparkBuffer;
29
+ private sessionRefPrice;
30
+ private watchlistInterval;
31
+ private replayOriginalData;
32
+ private replayPollInterval;
33
+ private replaySpeed;
34
+ private layoutKeyPrefix;
35
+ private layoutDebounceMs;
36
+ private activeLayoutKey;
12
37
  private root;
13
38
  private chartContainer;
14
39
  private destroyed;
15
40
  private options;
16
- private symbolIndex;
17
41
  private symbols;
18
42
  private settingsState;
19
43
  private adapter;
20
44
  private boundGlobalKeydown;
45
+ private baseSeries;
46
+ private baseTimeframeMs;
47
+ private compares;
21
48
  constructor(container: HTMLElement, options?: ChartWidgetOptions);
49
+ /** Replace the searchable symbol catalog. Does not change the active symbol. */
50
+ setSymbols(symbols: string[]): void;
22
51
  setSymbol(symbol: string): Promise<void>;
52
+ /**
53
+ * Push an entry into the watchlist (e.g., from your own WebSocket).
54
+ * Call with the symbols you care about; the active symbol is updated
55
+ * automatically from the chart's live data.
56
+ */
57
+ setWatchlistEntry(symbol: string, entry: Partial<WatchlistEntry>): void;
58
+ private tickWatchlist;
23
59
  setTimeframe(tf: TimeFrame): Promise<void>;
24
60
  setTheme(theme: import('@tradecanvas/commons').ThemeName | Theme): void;
25
61
  getChart(): Chart;
26
62
  destroy(): void;
27
63
  private handleSymbolClick;
28
64
  private handleTimeframe;
65
+ /**
66
+ * Load the widget's base series. Prefer this over `getChart().setData()` so
67
+ * client-side timeframe resampling has a finest-resolution source to
68
+ * aggregate from. The data is rendered at the current timeframe (resampled
69
+ * when that timeframe is coarser than the data's native spacing).
70
+ */
71
+ setData(data: DataSeries): void;
72
+ /** Render the base series at the active timeframe, resampling when coarser. */
73
+ private applyTimeframeData;
74
+ private toggleAlerts;
75
+ private handleToggleFavorite;
76
+ /** Encode the current view (symbol, timeframe, chart type, scale, indicators, drawings). */
77
+ exportState(): string;
78
+ /** Restore a view from an `exportState()` string. Returns false if malformed. */
79
+ importState(encoded: string): Promise<boolean>;
80
+ /** Copy the chart image to the clipboard, with a toast on success/failure. */
81
+ copyChartImage(): Promise<void>;
82
+ /** Copy a shareable deep-link (current view encoded in the URL hash) to the clipboard. */
83
+ copyShareLink(): Promise<void>;
84
+ /** Feed order-book depth to the chart overlay, depth ladder, and heatmap. */
85
+ setDepth(depth: DepthData | null): void;
86
+ /** Begin a draggable bracket order at the latest price and show the action bar. */
87
+ startBracket(side: 'buy' | 'sell'): void;
88
+ private buildDataWindowModel;
89
+ private toggleDataWindow;
90
+ private toggleObjects;
91
+ private openIndicatorSettings;
92
+ private refreshObjects;
93
+ private handleAddCompare;
94
+ /** Overlay another symbol's normalized series. Fetches history via the adapter. */
95
+ addCompareSymbol(symbol: string): Promise<void>;
96
+ private handleRemoveCompare;
97
+ /** Refetch every comparison overlay at the current symbol/timeframe. */
98
+ private refetchCompares;
99
+ private refreshAlerts;
100
+ /** Price + every active indicator line, as selectable alert sources. */
101
+ private buildAlertSources;
102
+ /** Latest value for an alert source channel (price or indicator line). */
103
+ private getAlertChannelValue;
104
+ private formatAlertPrice;
29
105
  private handleChartType;
30
106
  private handleAddIndicator;
31
107
  private handleRemoveIndicator;
@@ -37,6 +113,28 @@ export declare class ChartWidget {
37
113
  private handleToggleMagnet;
38
114
  private handleToggleTheme;
39
115
  private openSettings;
116
+ /**
117
+ * Show a transient toast inside the widget. Auto-dismisses after 3.5s.
118
+ * Used by the drag-drop importer for success / failure feedback, but
119
+ * exposed so apps can post their own (e.g. "alert triggered at 64,200").
120
+ */
121
+ toast(message: string, kind?: 'info' | 'error'): void;
122
+ /**
123
+ * Wipe the layout saved for `symbol` (or the active symbol if omitted).
124
+ * Useful as an "Reset layout" command in user-facing menus.
125
+ */
126
+ clearSavedLayout(symbol?: string): void;
127
+ private applySymbolLayout;
128
+ private flushActiveLayout;
129
+ /**
130
+ * After loading a layout, the chart restores indicator instances but our
131
+ * `state.activeIndicators` map (used to render the chip strip) is stale.
132
+ * Rebuild it from the live `getActiveIndicators` list.
133
+ */
134
+ private rebuildActiveIndicatorsMapFromChart;
135
+ private toggleReplay;
136
+ private enterReplay;
137
+ private exitReplay;
40
138
  private applySettings;
41
139
  private resetSettings;
42
140
  private connectStream;
@@ -1 +1 @@
1
- {"version":3,"file":"ChartWidget.d.ts","sourceRoot":"","sources":["../../src/widget/ChartWidget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8B,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,EAAE,kBAAkB,EAAmC,MAAM,YAAY,CAAC;AAUtF,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,OAAO,CAA2D;IAC1E,OAAO,CAAC,kBAAkB,CAA6C;gBAE3D,SAAS,EAAE,WAAW,EAAE,OAAO,GAAE,kBAAuB;IAoK9D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxC,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD,QAAQ,CAAC,KAAK,EAAE,OAAO,sBAAsB,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI;IASvE,QAAQ,IAAI,KAAK;IAIjB,OAAO,IAAI,IAAI;IAmBf,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,iBAAiB;IAmDzB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,aAAa;YAKP,aAAa;IAwC3B,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,WAAW;CAUpB"}
1
+ {"version":3,"file":"ChartWidget.d.ts","sourceRoot":"","sources":["../../src/widget/ChartWidget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { KeyValueStorage } from './DrawingTemplateStore.js';
2
+ /**
3
+ * An ordered, de-duplicated set of pinned drawing-tool ids, persisted to a
4
+ * key-value store. Order is insertion order (most-recently-pinned last).
5
+ */
6
+ export declare class DrawingFavoritesStore {
7
+ private storageKey;
8
+ private storage;
9
+ private favorites;
10
+ constructor(storageKey?: string, storage?: KeyValueStorage | null);
11
+ list(): string[];
12
+ has(tool: string): boolean;
13
+ add(tool: string): void;
14
+ remove(tool: string): void;
15
+ /** Toggle a tool's pinned state. Returns the new state (true = pinned). */
16
+ toggle(tool: string): boolean;
17
+ /** Seed the favorites only when none are stored yet (first run). */
18
+ seedDefaults(tools: string[]): void;
19
+ private load;
20
+ private persist;
21
+ }
22
+ //# sourceMappingURL=DrawingFavoritesStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawingFavoritesStore.d.ts","sourceRoot":"","sources":["../../src/widget/DrawingFavoritesStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAUjE;;;GAGG;AACH,qBAAa,qBAAqB;IAI9B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IAJjB,OAAO,CAAC,SAAS,CAAgB;gBAGvB,UAAU,SAAuB,EACjC,OAAO,GAAE,eAAe,GAAG,IAAuB;IAK5D,IAAI,IAAI,MAAM,EAAE;IAIhB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMvB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM1B,2EAA2E;IAC3E,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAS7B,oEAAoE;IACpE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAMnC,OAAO,CAAC,IAAI;IAcZ,OAAO,CAAC,OAAO;CAQhB"}
@@ -0,0 +1,29 @@
1
+ import { DrawingStyle } from '@tradecanvas/commons';
2
+ export interface DrawingStyleTemplate {
3
+ name: string;
4
+ style: Partial<DrawingStyle>;
5
+ }
6
+ /** Minimal storage surface — satisfied by `localStorage` and easy to mock. */
7
+ export interface KeyValueStorage {
8
+ getItem(key: string): string | null;
9
+ setItem(key: string, value: string): void;
10
+ }
11
+ /**
12
+ * Named drawing-style presets, persisted to a key-value store. Templates are
13
+ * upserted by name (case-sensitive) and ordered most-recently-saved last.
14
+ */
15
+ export declare class DrawingTemplateStore {
16
+ private storageKey;
17
+ private storage;
18
+ private templates;
19
+ constructor(storageKey?: string, storage?: KeyValueStorage | null);
20
+ list(): DrawingStyleTemplate[];
21
+ get(name: string): DrawingStyleTemplate | null;
22
+ /** Insert or replace a template by name. */
23
+ save(name: string, style: Partial<DrawingStyle>): void;
24
+ remove(name: string): void;
25
+ clear(): void;
26
+ private load;
27
+ private persist;
28
+ }
29
+ //# sourceMappingURL=DrawingTemplateStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawingTemplateStore.d.ts","sourceRoot":"","sources":["../../src/widget/DrawingTemplateStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9B;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAyBD;;;GAGG;AACH,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IAJjB,OAAO,CAAC,SAAS,CAA8B;gBAGrC,UAAU,SAAuB,EACjC,OAAO,GAAE,eAAe,GAAG,IAAuB;IAK5D,IAAI,IAAI,oBAAoB,EAAE;IAI9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IAK9C,4CAA4C;IAC5C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAStD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO1B,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,IAAI;IAeZ,OAAO,CAAC,OAAO;CAQhB"}
@@ -0,0 +1,58 @@
1
+ import { AlertCondition } from '@tradecanvas/core';
2
+ export interface AlertListItem {
3
+ id: string;
4
+ price: number;
5
+ condition: string;
6
+ message?: string;
7
+ triggered: boolean;
8
+ channel?: string;
9
+ label?: string;
10
+ }
11
+ export interface AlertSource {
12
+ /** `'price'` or `<instanceId>:<key>`. */
13
+ channel: string;
14
+ label: string;
15
+ }
16
+ export interface AlertsPanelCallbacks {
17
+ onAdd: (price: number, condition: AlertCondition, message: string | undefined, channel: string, label: string) => void;
18
+ onRemove: (id: string) => void;
19
+ onClear: () => void;
20
+ /** Latest value for a source channel, used to prefill the add form. */
21
+ getChannelValue: (channel: string) => number | null;
22
+ formatPrice: (price: number) => string;
23
+ }
24
+ /**
25
+ * Floating price-alerts panel. Lists current alerts (with condition, price,
26
+ * message, and a delete control) and an inline form to add a new one prefilled
27
+ * with the current price. Toggled from the toolbar bell button; the host wires
28
+ * add/remove back to the chart's `AlertManager`.
29
+ */
30
+ export declare class WidgetAlertsPanel {
31
+ private el;
32
+ private listEl;
33
+ private priceInput;
34
+ private conditionSelect;
35
+ private sourceSelect;
36
+ private messageInput;
37
+ private emptyEl;
38
+ private callbacks;
39
+ private open;
40
+ private alerts;
41
+ private sources;
42
+ constructor(host: HTMLElement, callbacks: AlertsPanelCallbacks);
43
+ /** Replace the alert-source options (price + indicator lines). */
44
+ setSources(sources: AlertSource[]): void;
45
+ private renderSources;
46
+ isOpen(): boolean;
47
+ toggle(): void;
48
+ openPanel(): void;
49
+ /** Fill the value input with the selected source's current value. */
50
+ private prefillPrice;
51
+ close(): void;
52
+ /** Replace the displayed alert list. */
53
+ setAlerts(alerts: AlertListItem[]): void;
54
+ destroy(): void;
55
+ private submitForm;
56
+ private renderList;
57
+ }
58
+ //# sourceMappingURL=WidgetAlertsPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetAlertsPanel.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetAlertsPanel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvH,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uEAAuE;IACvE,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACpD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAqBD;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAyD;gBAE5D,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB;IAiF9D,kEAAkE;IAClE,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI;IAKxC,OAAO,CAAC,aAAa;IAarB,MAAM,IAAI,OAAO;IAIjB,MAAM,IAAI,IAAI;IAId,SAAS,IAAI,IAAI;IAMjB,qEAAqE;IACrE,OAAO,CAAC,YAAY;IAKpB,KAAK,IAAI,IAAI;IAKb,wCAAwC;IACxC,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IAKxC,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,UAAU;CAiDnB"}
@@ -0,0 +1,21 @@
1
+ export interface BracketBarCallbacks {
2
+ onConfirm: () => void;
3
+ onCancel: () => void;
4
+ }
5
+ /**
6
+ * Floating confirm/cancel bar shown while a bracket order is being placed.
7
+ * The live entry / SL / TP numbers are drawn on the chart canvas; this bar
8
+ * just carries the commit and discard actions (also bound to Enter / Esc).
9
+ */
10
+ export declare class WidgetBracketBar {
11
+ private el;
12
+ private labelEl;
13
+ private callbacks;
14
+ private visible;
15
+ constructor(host: HTMLElement, callbacks: BracketBarCallbacks);
16
+ show(side: 'buy' | 'sell'): void;
17
+ hide(): void;
18
+ isVisible(): boolean;
19
+ destroy(): void;
20
+ }
21
+ //# sourceMappingURL=WidgetBracketBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetBracketBar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetBracketBar.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB;IAiC7D,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAOhC,IAAI,IAAI,IAAI;IAKZ,SAAS,IAAI,OAAO;IAIpB,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,41 @@
1
+ export interface DataWindowIndicator {
2
+ name: string;
3
+ values: {
4
+ key: string;
5
+ value: number;
6
+ }[];
7
+ }
8
+ export interface DataWindowModel {
9
+ ohlc: {
10
+ open: number;
11
+ high: number;
12
+ low: number;
13
+ close: number;
14
+ volume: number;
15
+ } | null;
16
+ change: number;
17
+ changePct: number;
18
+ indicators: DataWindowIndicator[];
19
+ }
20
+ export interface DataWindowCallbacks {
21
+ formatPrice: (price: number) => string;
22
+ }
23
+ /**
24
+ * Data Window — a floating readout of the exact O/H/L/C/V, change, and every
25
+ * active indicator value at the hovered bar. Updated from `crosshairMove`.
26
+ */
27
+ export declare class WidgetDataWindow {
28
+ private el;
29
+ private bodyEl;
30
+ private callbacks;
31
+ private open;
32
+ constructor(host: HTMLElement, callbacks: DataWindowCallbacks);
33
+ isOpen(): boolean;
34
+ toggle(): void;
35
+ openPanel(): void;
36
+ close(): void;
37
+ destroy(): void;
38
+ render(model: DataWindowModel): void;
39
+ private row;
40
+ }
41
+ //# sourceMappingURL=WidgetDataWindow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetDataWindow.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetDataWindow.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACxF,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB;IA4B7D,MAAM,IAAI,OAAO;IAIjB,MAAM,IAAI,IAAI;IAId,SAAS,IAAI,IAAI;IAKjB,KAAK,IAAI,IAAI;IAKb,OAAO,IAAI,IAAI;IAIf,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAkCpC,OAAO,CAAC,GAAG;CAaZ"}
@@ -0,0 +1,29 @@
1
+ import { DepthData } from '@tradecanvas/commons';
2
+ export interface DepthLadderCallbacks {
3
+ /** Buy at `price` (clicked an ask cell) or sell at `price` (clicked a bid cell). */
4
+ onTrade: (side: 'buy' | 'sell', price: number) => void;
5
+ formatPrice: (price: number) => string;
6
+ }
7
+ /**
8
+ * Depth-of-market ladder (DOM). Renders the order book as price rows with bid
9
+ * and ask size columns; clicking an ask cell buys at that price, a bid cell
10
+ * sells. Fed by `setData(depth)`; the bar widths scale to the largest visible
11
+ * size.
12
+ */
13
+ export declare class WidgetDepthLadder {
14
+ private el;
15
+ private bodyEl;
16
+ private callbacks;
17
+ private open;
18
+ private levels;
19
+ constructor(host: HTMLElement, callbacks: DepthLadderCallbacks, levels?: number);
20
+ isOpen(): boolean;
21
+ toggle(): void;
22
+ openPanel(): void;
23
+ close(): void;
24
+ setData(depth: DepthData | null): void;
25
+ destroy(): void;
26
+ private renderEmpty;
27
+ private render;
28
+ }
29
+ //# sourceMappingURL=WidgetDepthLadder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetDepthLadder.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetDepthLadder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAItD,MAAM,WAAW,oBAAoB;IACnC,oFAAoF;IACpF,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,SAAK;IAkC3E,MAAM,IAAI,OAAO;IAIjB,MAAM,IAAI,IAAI;IAId,SAAS,IAAI,IAAI;IAKjB,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAQtC,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,MAAM;CAiDf"}
@@ -8,8 +8,14 @@ export declare class WidgetDrawingSidebar {
8
8
  private cursorBtn;
9
9
  private magnetBtn;
10
10
  private flyoutEl;
11
+ private favoritesEl;
12
+ private favoritesDivider;
13
+ private favorites;
11
14
  constructor(host: HTMLElement, config: SidebarConfig, callbacks: SidebarCallbacks);
12
15
  private build;
16
+ /** Update the pinned-tools strip. */
17
+ setFavorites(favorites: string[]): void;
18
+ private renderFavorites;
13
19
  private showFlyout;
14
20
  private hideFlyout;
15
21
  update(state: WidgetState): void;
@@ -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;AAO/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;gBAEnC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB;IASjF,OAAO,CAAC,KAAK;IA8Eb,OAAO,CAAC,UAAU;IA8BlB,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":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAgC/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"}
@@ -0,0 +1,36 @@
1
+ import { DrawingStyle } from '@tradecanvas/commons';
2
+ import { DrawingTemplateStore } from './DrawingTemplateStore.js';
3
+ export interface DrawingStyleCallbacks {
4
+ /** Apply a style change to the active (next) drawing and the selected one. */
5
+ onStyleChange: (style: Partial<DrawingStyle>) => void;
6
+ /** Current active drawing style, for seeding controls and saving templates. */
7
+ getStyle: () => DrawingStyle;
8
+ }
9
+ /**
10
+ * Drawing style popover — pick colour, line width, and line style for the next
11
+ * drawing (and the selected one), plus save/apply named style templates
12
+ * persisted via `DrawingTemplateStore`.
13
+ */
14
+ export declare class WidgetDrawingStyle {
15
+ private el;
16
+ private templatesEl;
17
+ private nameInput;
18
+ private callbacks;
19
+ private store;
20
+ private open;
21
+ constructor(host: HTMLElement, callbacks: DrawingStyleCallbacks, store: DrawingTemplateStore);
22
+ isOpen(): boolean;
23
+ toggle(): void;
24
+ openPanel(): void;
25
+ close(): void;
26
+ destroy(): void;
27
+ private colorRow;
28
+ private widthRow;
29
+ private lineStyleRow;
30
+ private applyStyle;
31
+ /** Mark the controls matching the current active style. */
32
+ private syncActiveControls;
33
+ private saveTemplate;
34
+ private renderTemplates;
35
+ }
36
+ //# sourceMappingURL=WidgetDrawingStyle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetDrawingStyle.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetDrawingStyle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACtD,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,YAAY,CAAC;CAC9B;AAMD;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,EAAE,oBAAoB;IAuD5F,MAAM,IAAI,OAAO;IAIjB,MAAM,IAAI,IAAI;IAId,SAAS,IAAI,IAAI;IAOjB,KAAK,IAAI,IAAI;IAKb,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,QAAQ;IAqBhB,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,UAAU;IAKlB,2DAA2D;IAC3D,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,eAAe;CA4CxB"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Keyboard-shortcut reference sheet. Bound to `?` (and `Shift+/`). Surfaces
3
+ * shortcuts so users discover the widget's hidden interaction model — a
4
+ * premium-feel detail TradingView, Linear, Figma, etc. all ship.
5
+ */
6
+ export interface HotkeySheetCallbacks {
7
+ onClose: () => void;
8
+ }
9
+ export declare class WidgetHotkeySheet {
10
+ private backdrop;
11
+ private modal;
12
+ private callbacks;
13
+ private boundKeydown;
14
+ constructor(callbacks: HotkeySheetCallbacks);
15
+ open(): void;
16
+ close(): void;
17
+ isOpen(): boolean;
18
+ destroy(): void;
19
+ }
20
+ //# sourceMappingURL=WidgetHotkeySheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetHotkeySheet.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetHotkeySheet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAiED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,YAAY,CAA6B;gBAErC,SAAS,EAAE,oBAAoB;IAU3C,IAAI,IAAI,IAAI;IAsFZ,KAAK,IAAI,IAAI;IASb,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,IAAI;CAGhB"}