@tradecanvas/chart 1.1.0 → 1.3.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 (52) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +100 -26
  3. package/dist/Chart.d.ts +45 -0
  4. package/dist/Chart.d.ts.map +1 -1
  5. package/dist/DataManager.d.ts.map +1 -1
  6. package/dist/DragDropImporter-BazeSQPD.cjs +2 -0
  7. package/dist/DragDropImporter-BazeSQPD.cjs.map +1 -0
  8. package/dist/{DragDropImporter-CLtRQjKD.js → DragDropImporter-cURSpfUb.js} +390 -253
  9. package/dist/DragDropImporter-cURSpfUb.js.map +1 -0
  10. package/dist/charts/IndicatorPriceRange.d.ts +7 -3
  11. package/dist/charts/IndicatorPriceRange.d.ts.map +1 -1
  12. package/dist/index.cjs +1 -1
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.ts +4 -3
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +29 -29
  17. package/dist/index.js.map +1 -1
  18. package/dist/interaction/verticalPanGate.d.ts +22 -0
  19. package/dist/interaction/verticalPanGate.d.ts.map +1 -0
  20. package/dist/layout/LayoutManager.d.ts +3 -0
  21. package/dist/layout/LayoutManager.d.ts.map +1 -1
  22. package/dist/layout/priceAxisWidth.d.ts +22 -0
  23. package/dist/layout/priceAxisWidth.d.ts.map +1 -0
  24. package/dist/widget/ChartWidget.d.ts +24 -1
  25. package/dist/widget/ChartWidget.d.ts.map +1 -1
  26. package/dist/widget/WidgetDrawingSidebar.d.ts.map +1 -1
  27. package/dist/widget/WidgetHotkeySheet.d.ts +4 -2
  28. package/dist/widget/WidgetHotkeySheet.d.ts.map +1 -1
  29. package/dist/widget/WidgetLoadingOverlay.d.ts +43 -0
  30. package/dist/widget/WidgetLoadingOverlay.d.ts.map +1 -0
  31. package/dist/widget/WidgetObjectTree.d.ts +1 -1
  32. package/dist/widget/WidgetObjectTree.d.ts.map +1 -1
  33. package/dist/widget/WidgetSettings.d.ts +3 -1
  34. package/dist/widget/WidgetSettings.d.ts.map +1 -1
  35. package/dist/widget/WidgetToolbar.d.ts +4 -1
  36. package/dist/widget/WidgetToolbar.d.ts.map +1 -1
  37. package/dist/widget/WidgetWatchlist.d.ts +4 -1
  38. package/dist/widget/WidgetWatchlist.d.ts.map +1 -1
  39. package/dist/widget/i18n.d.ts +70 -0
  40. package/dist/widget/i18n.d.ts.map +1 -0
  41. package/dist/widget/icons.d.ts.map +1 -1
  42. package/dist/widget/index.cjs +2554 -2380
  43. package/dist/widget/index.cjs.map +1 -1
  44. package/dist/widget/index.js +725 -258
  45. package/dist/widget/index.js.map +1 -1
  46. package/dist/widget/types.d.ts +10 -0
  47. package/dist/widget/types.d.ts.map +1 -1
  48. package/dist/widget/widgetConfig.d.ts.map +1 -1
  49. package/package.json +6 -3
  50. package/dist/DragDropImporter-CLtRQjKD.js.map +0 -1
  51. package/dist/DragDropImporter-pPS0fl5H.cjs +0 -2
  52. package/dist/DragDropImporter-pPS0fl5H.cjs.map +0 -1
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 TradeCanvas Contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 TradeCanvas Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -8,10 +8,10 @@ High-performance canvas trading chart with built-in indicators, drawing tools, a
8
8
 
9
9
  Most chart libraries make you choose: pretty charts with no trading features, or trading features with an ugly API. TradeCanvas gives you both.
10
10
 
11
- - **33 built-in indicators** — SMA, EMA, Hull MA, RSI, MACD, Bollinger, Ichimoku, Pivot Points, Anchored VWAP, ZigZag, Linear Regression Channel, Awesome / Chaikin Oscillator, and more. No separate calculation library needed.
12
- - **24 drawing tools** — Trendlines, Fibonacci (retracement, extension, time zones), horizontal/vertical lines, channels, Elliott waves, Gann fans / boxes, Pitchfork, Volume Profile range. With undo/redo and full serialization.
11
+ - **70 built-in indicators** — SMA, EMA, TEMA, VWMA, Hull MA, RSI, MACD, Bollinger, Envelope, Ichimoku, Pivot Points, Anchored VWAP, ZigZag, Linear Regression Channel, Awesome / Chaikin Oscillator, and more. No separate calculation library needed.
12
+ - **40 drawing tools** — Trendlines (info line, trend angle, cross line), Fibonacci (retracement, extension, channel, time zones, speed resistance fan), horizontal/vertical lines, channels, pitchforks (Andrews, Schiff, modified Schiff), Gann fans / boxes, cyclic lines, harmonic patterns (XABCD, ABCD, head and shoulders, Elliott waves), date & price range, Long/Short Position, Volume Profile range. With undo/redo and full serialization.
13
13
  - **17 chart types** — Candlestick, line, area, bar, hollow candle, baseline, Heikin-Ashi, Renko, Kagi, Line Break, Point & Figure, Range Bars, Volume Candles, **Equivolume**, HLC Area, Step Line, Line+Markers.
14
- - **TradingView-grade interaction** *(new in 0.9)* — drag the price/time axes to scale, double-click to auto-fit, `Shift+drag` to measure (bars × price Δ × %), `Alt+click` to pin a comparison tooltip, axis-following price/time pill labels under the cursor, bar-hover highlight.
14
+ - **Pro-grade interaction** — pan freely past the last bar into empty future space (drawings can go there too), drag the price/time axes to scale, double-click to auto-fit, `Ctrl/⌘+drag` to select several drawings (then move, restyle or delete them together), `Shift+drag` to measure (bars × price Δ × %), `Alt+click` to pin a comparison tooltip, context cursors (crosshair, grabbing hand, resize arrows), axis-following price/time pill labels under the cursor, bar-hover highlight.
15
15
  - **Trading overlay** — Render open positions with entry line, P&L zone, and SL/TP markers. Orders as dashed lines. Drag SL/TP to modify. Cleanly opt-out via `features.trading: false` for non-trading projects.
16
16
  - **Real-time streaming** — Built-in Binance adapter. Plug in your own data source with the adapter interface.
17
17
  - **Strategy backtester** — `@tradecanvas/analytics` ships a bar-by-bar `Backtester` with virtual fills, commission/slippage models, portfolio tracking, and risk metrics (Sharpe, Sortino, Calmar, max drawdown). **Now with 4 ready-to-use reference strategies + Monte Carlo path-dependence analysis.**
@@ -38,7 +38,7 @@ yarn add @tradecanvas/chart
38
38
 
39
39
  ## Quick Start
40
40
 
41
- The fastest path is `ChartWidget` — drop-in component with a full TradingView-like UI (toolbar, drawing sidebar, settings dialog, status bar). Zero framework dependency.
41
+ The fastest path is `ChartWidget` — drop-in component with a full trading UI (toolbar, drawing sidebar, settings dialog, status bar). Zero framework dependency.
42
42
 
43
43
  ```typescript
44
44
  import { ChartWidget } from '@tradecanvas/chart/widget'
@@ -53,7 +53,7 @@ const widget = new ChartWidget(document.getElementById('chart')!, {
53
53
  })
54
54
  ```
55
55
 
56
- That's it. Live data, all 33 indicators, all 24 drawing tools, command palette (`Ctrl+K`), symbol search (`Ctrl+P`), hotkey sheet (`?`), shift-drag measure, alt-click tooltip pin, and drag-drop CSV/JSON loading.
56
+ That's it. Live data, all 70 indicators, all 40 drawing tools, command palette (`Ctrl+K`), symbol search (`Ctrl+P`), hotkey sheet (`?`), shift-drag measure, alt-click tooltip pin, and drag-drop CSV/JSON loading.
57
57
 
58
58
  ## Headless Chart
59
59
 
@@ -69,7 +69,7 @@ const chart = new Chart(document.getElementById('chart')!, {
69
69
  drawings: true,
70
70
  indicators: true,
71
71
  trading: true, // set false to disable orders/positions entirely
72
- tradingContextMenu: true, // set false to keep overlay but drop right-click menu
72
+ tradingContextMenu: true, // opt-in right-click order menu (off by default)
73
73
  volume: true,
74
74
  },
75
75
  })
@@ -100,6 +100,30 @@ chart.connect({ adapter, symbol: 'BTCUSDT', timeframe: '5m', historyLimit: 300 }
100
100
  | `onSymbolChange` | `(symbol) => void` | — | Symbol change callback |
101
101
  | `onTimeframeChange` | `(tf) => void` | — | Timeframe change callback |
102
102
  | `onReady` | `(chart) => void` | — | Fired when chart is ready |
103
+ | `locale` | `string` | `'en'` | UI chrome language — built-in `'en'` / `'vi'`, see **Widget i18n** below |
104
+ | `messages` | `Partial<Record<MessageKey, string>>` | — | Override or add individual UI strings on top of `locale` |
105
+
106
+ ### Widget i18n
107
+
108
+ `locale` and `messages` translate `ChartWidget`'s own chrome — toolbar, watchlist, indicator-picker section headers (Popular/All, overlay/panel tags), status bar, settings panel (titles/tabs/section headers), and hotkey sheet (title/group headers). Set at construction; not currently hot-swappable at runtime.
109
+
110
+ ```ts
111
+ new ChartWidget(el, {
112
+ locale: 'vi', // built-in Vietnamese table
113
+ messages: { 'watchlist.title': 'Theo dõi' }, // override/add individual keys — always wins
114
+ chartOptions: { numberLocale: 'vi-VN' }, // separate: number/date formatting (see below)
115
+ });
116
+ ```
117
+
118
+ `locale`/`messages` only cover chrome **text**; they're independent of `chartOptions.numberLocale`, which controls number/date **formatting** (price axis, legend, watchlist prices, current-price tag, session-break dates) via `Intl`/`toLocaleString`.
119
+
120
+ Not yet covered by `locale` (still English; PRs welcome, or override via `messages`/your own CSS):
121
+ - Indicator and drawing-tool **names** (SMA, Bollinger Bands, Trend Line, …) — these come from `widgetConfig.ts`'s data tables, not the message catalog.
122
+ - Individual settings rows beyond the tab/section level (e.g. "Up Body", "Grid Lines").
123
+ - Individual hotkey-sheet shortcut labels and key-cap text (group titles are translated).
124
+ - Alerts panel, symbol search, command palette, data window, depth ladder, bracket bar, replay bar, drawing-style panel, object tree.
125
+
126
+ See `packages/library/src/widget/i18n.ts` for the full key list (`MessageKey`) and the English/Vietnamese tables.
103
127
 
104
128
  ### Widget vs Headless
105
129
 
@@ -112,6 +136,52 @@ chart.connect({ adapter, symbol: 'BTCUSDT', timeframe: '5m', historyLimit: 300 }
112
136
  | Customization | Full control | Toggle sections on/off |
113
137
  | Advanced access | Direct API | `widget.getChart()` for direct API |
114
138
 
139
+ ### Widget Theming
140
+
141
+ `ChartWidget`'s own chrome (toolbar, sidebars, settings panel, watchlist — everything *outside* the canvas) is styled entirely through CSS custom properties on `.tcw-root`, the widget's own root element. These are a **stable, documented contract**: additive-only across minor/patch releases — a property is never renamed or removed without a major version bump. Override them from the host page; no build step or theme object needed.
142
+
143
+ ```css
144
+ /* Dark is the default (no attribute needed); light sets data-tcw-theme="light" */
145
+ .my-app .tcw-root:not([data-tcw-theme="light"]) {
146
+ --tcw-bg: #0a0a0f;
147
+ --tcw-accent: #7c5cff;
148
+ --tcw-radius: 0px;
149
+ --tcw-radius-lg: 0px;
150
+ }
151
+ ```
152
+
153
+ | Variable | Default (dark) | Purpose |
154
+ |---|---|---|
155
+ | `--tcw-bg` | `#080b10` | Root background |
156
+ | `--tcw-bg-surface` | `#0c1016` | Panel / toolbar surface |
157
+ | `--tcw-bg-elevated` | `#141922` | Popovers, dropdowns, modals |
158
+ | `--tcw-bg-overlay` | `rgba(20,25,34,.5)` | Backdrop behind overlays |
159
+ | `--tcw-border` | `#1f2630` | Default border |
160
+ | `--tcw-border-strong` | `#2a323e` | Emphasized border (focus rings, dividers) |
161
+ | `--tcw-text` | `#e7e9ee` | Primary text |
162
+ | `--tcw-text-dim` | `#aab1bd` | Secondary text |
163
+ | `--tcw-text-muted` | `#758091` | Tertiary / placeholder text |
164
+ | `--tcw-accent` | `#f2a93b` | Primary accent (active tab, focus, links) |
165
+ | `--tcw-accent-ink` | `#1a1204` | Text and icons on an accent fill |
166
+ | `--tcw-accent-hover` | `#f5b95c` | Accent hover state |
167
+ | `--tcw-accent-soft` | `rgba(242,169,59,.14)` | Accent tint (selected row background) |
168
+ | `--tcw-accent-glow` | `rgba(242,169,59,.22)` | Accent glow (focus halo) |
169
+ | `--tcw-accent-line` | `rgba(242,169,59,.55)` | Accent border/underline |
170
+ | `--tcw-red` / `--tcw-red-soft` | `#e8505b` / tint | Down/sell/negative |
171
+ | `--tcw-green` / `--tcw-green-soft` | `#1fa874` / tint | Up/buy/positive |
172
+ | `--tcw-amber` | `#ff9f43` | Warning |
173
+ | `--tcw-hover-bg` | `rgba(255,255,255,.05)` | Row/button hover background |
174
+ | `--tcw-active-bg` | `rgba(255,255,255,.08)` | Row/button pressed background |
175
+ | `--tcw-divider` | `rgba(255,255,255,.06)` | Hairline dividers |
176
+ | `--tcw-ease` / `--tcw-ease-out` | cubic-bezier | Transition easing |
177
+ | `--tcw-dur-fast` / `-normal` / `-slow` | `120ms` / `180ms` / `260ms` | Transition durations |
178
+ | `--tcw-radius-sm` / `-base` / `-lg` / `-xl` | `4px` / `6px` / `10px` / `14px` | Corner radii — set to `0` for a square look |
179
+ | `--tcw-shadow-sm` / `-md` / `-lg` / `-xl` | box-shadow values | Elevation |
180
+ | `--tcw-ring` | `0 0 0 2px rgba(242,169,59,.45)` | Focus ring |
181
+ | `--tcw-font-mono` | `'JetBrains Mono', …` | Monospace font stack (price ladder, code) |
182
+
183
+ Light theme (`[data-tcw-theme="light"]`) redefines the color group (`--tcw-bg*`, `--tcw-border*`, `--tcw-text*`, `--tcw-accent*`, `--tcw-hover-bg`, `--tcw-active-bg`, `--tcw-divider`, `--tcw-shadow*`) with its own defaults — override both selectors if you support both themes.
184
+
115
185
  ## Features
116
186
 
117
187
  ### Chart Types
@@ -177,7 +247,7 @@ import {
177
247
  } from '@tradecanvas/chart'
178
248
 
179
249
  // Sparkline in a 120x48 container
180
- new SparklineChart(el, { data: [100, 102, 98, 105, 103], mode: 'area', color: '#26A69A' })
250
+ new SparklineChart(el, { data: [100, 102, 98, 105, 103], mode: 'area', color: '#1fa874' })
181
251
 
182
252
  // Equity curve with drawdown
183
253
  new EquityCurveChart(el, { data: equityPoints, drawdown: true, benchmark: spyData })
@@ -198,13 +268,18 @@ new WaterfallChart(el, {
198
268
  ],
199
269
  })
200
270
 
201
- // Fear & Greed gauge
271
+ // Fear & Greed gauge: zones light up to the value, the label shows the current zone
202
272
  const gauge = new GaugeChart(el, {
203
273
  value: 72,
274
+ label: 'Fear & Greed',
204
275
  zones: [
205
- { from: 0, to: 25, color: '#ef4444' },
206
- { from: 75, to: 100, color: '#10b981' },
276
+ { from: 0, to: 25, color: '#e8505b', label: 'Extreme fear' },
277
+ { from: 25, to: 45, color: '#f2a93b', label: 'Fear' },
278
+ { from: 45, to: 55, color: '#8a93a3', label: 'Neutral' },
279
+ { from: 55, to: 75, color: '#62c895', label: 'Greed' },
280
+ { from: 75, to: 100, color: '#1fa874', label: 'Extreme greed' },
207
281
  ],
282
+ // pointer: 'needle', // classic needle instead of the ring marker
208
283
  })
209
284
  gauge.setValue(85) // animates smoothly
210
285
  ```
@@ -290,8 +365,8 @@ chart.addSignalMarker({
290
365
  // Color-code by source
291
366
  chart.setSignalMarkerStyle({
292
367
  sourceColors: {
293
- 'ema-crossover': '#2196F3',
294
- 'rsi-divergence': '#FF9800',
368
+ 'ema-crossover': '#4c8dff',
369
+ 'rsi-divergence': '#f2a93b',
295
370
  'whale-flow': '#9C27B0',
296
371
  },
297
372
  })
@@ -399,8 +474,8 @@ chart.setTheme(DARK_TERMINAL) // fintech terminal: #0E0E0E bg, #00FF87/#FF3B4D
399
474
  // Or customize any preset
400
475
  chart.setTheme({
401
476
  ...DARK_THEME,
402
- candleUp: '#26A69A',
403
- candleDown: '#EF5350',
477
+ candleUp: '#1fa874',
478
+ candleDown: '#e8505b',
404
479
  background: '#0a0a0f',
405
480
  })
406
481
  ```
@@ -447,7 +522,7 @@ replay.start()
447
522
  // replay.pause(); replay.resume(); replay.step(5); replay.seek(200); replay.setSpeed(20)
448
523
  ```
449
524
 
450
- ### Chart Interaction (TradingView-style)
525
+ ### Chart Interaction
451
526
 
452
527
  Every gesture you'd expect from a desktop trading chart is built in:
453
528
 
@@ -632,12 +707,9 @@ interface OHLCBar {
632
707
 
633
708
  | Example | Description |
634
709
  |---|---|
635
- | [Live Demo](https://bonguynvan.github.io/tradecanvas/) | Full-featured demo with live Binance data |
636
- | [examples/basic](./examples/basic/) | Vanilla JS + live Binance streaming |
637
- | [examples/vanilla-static](./examples/vanilla-static/) | Vanilla JS + static data (offline) |
638
- | [examples/react](./examples/react/) | React 19 integration |
639
- | [examples/svelte](./examples/svelte/) | Svelte 5 integration |
640
- | [examples/vue](./examples/vue/) | Vue 3 integration |
710
+ | [Live demo](https://bonguynvan.github.io/tradecanvas/) | Feature Lab: drawing tools, indicators, trading, replay, sub-cent prices + Vietnamese UI, 200k bars, slow-network switching — each on a live chart |
711
+ | [StackBlitz sandboxes](https://bonguynvan.github.io/tradecanvas/examples/) | One-click, forkable: vanilla `Chart`, `ChartWidget`, React / Vue / Svelte wrappers, finance charts |
712
+ | [`@tradecanvas/react`](https://www.npmjs.com/package/@tradecanvas/react) · [`/vue`](https://www.npmjs.com/package/@tradecanvas/vue) · [`/svelte`](https://www.npmjs.com/package/@tradecanvas/svelte) | Framework components — reactive props, typed, zero boilerplate |
641
713
 
642
714
  ## Browser Support
643
715
 
@@ -740,15 +812,17 @@ onUnmounted(() => chart?.destroy())
740
812
 
741
813
  ## Architecture
742
814
 
743
- Multi-layer canvas for optimal rendering — only dirty layers repaint each frame:
815
+ Two stacked canvases — a hover repaints only the thin top one:
744
816
 
745
817
  ```
746
- UI Layer (price axis, legend, live price) z=3
747
- Overlay Layer (drawings, trading positions/orders) z=2
748
- Main Layer (candles, indicators, volume) z=1
749
- Background (grid, watermark) z=0
818
+ Top canvas (crosshair + axis pills, legend, countdown, measure) z=1
819
+ Scene canvas (grid, candles, indicators, drawings, orders, axes) z=0
750
820
  ```
751
821
 
822
+ ## Related projects
823
+
824
+ - **[bo-grid](https://github.com/bonguynvan/bo-grid)** — tiny, fast **Svelte 5** data grid for fintech UIs: canvas sparklines, batched realtime cell updates, virtual scrolling, grouping / pivot / tree data, and Excel export, with a core that gzips to ~32 KB. The table half of the same toolkit — pair it with TradeCanvas for a full trading desk. **[Live demo](https://bonguynvan.github.io/bo-grid/)**
825
+
752
826
  ## License
753
827
 
754
828
  [MIT](./LICENSE)
package/dist/Chart.d.ts CHANGED
@@ -23,6 +23,9 @@ export declare class Chart {
23
23
  private resolvedLayoutCache;
24
24
  private panelInfoCache;
25
25
  private renderScheduled;
26
+ /** Current price-axis width; grows to fit long (e.g. sub-cent) labels. */
27
+ private priceAxisWidth;
28
+ private measureCtx;
26
29
  private containerSizeCache;
27
30
  private containerSizeCacheTime;
28
31
  private lastEmittedRange;
@@ -45,7 +48,11 @@ export declare class Chart {
45
48
  private signalMarkerManager;
46
49
  private tradeZoneManager;
47
50
  private measureOverlay;
51
+ private selectionBoxOverlay;
48
52
  private replayManager;
53
+ private replayBarUnsub;
54
+ /** True while `replaySeek` runs: its bar is a jump, not a replay step. */
55
+ private replaySeeking;
49
56
  private undoRedoManager;
50
57
  private autoSaveScheduler;
51
58
  private animator;
@@ -63,6 +70,13 @@ export declare class Chart {
63
70
  private container;
64
71
  private currentPriceLine;
65
72
  private numberLocale;
73
+ /**
74
+ * The `autoScale` the chart was constructed with — distinct from
75
+ * `this.options.autoScale`, which drag-to-scale/vertical-pan mutate at
76
+ * runtime to freeze the Y-axis. `setData()` restores this default so a
77
+ * freeze on the old symbol doesn't silently carry over to a new one.
78
+ */
79
+ private defaultAutoScale;
66
80
  private keyboardHandler;
67
81
  private onWindowKeyDown;
68
82
  private currentSymbol;
@@ -273,9 +287,23 @@ export declare class Chart {
273
287
  setAutoScroll(enabled: boolean): void;
274
288
  scrollTo(timestamp: number): void;
275
289
  scrollToEnd(): void;
290
+ /**
291
+ * Show the bars between two timestamps edge to edge. Times past either end
292
+ * of the data are allowed (they map into the empty future / past).
293
+ */
276
294
  setVisibleRange(fromTimestamp: number, toTimestamp: number): void;
295
+ /** Change free-panning bounds at runtime — see `ChartOptions.freePan` / `panLimits`. */
296
+ setPanLimits(limits: {
297
+ freePan?: boolean;
298
+ minVisibleBars?: number;
299
+ }): void;
277
300
  zoomIn(): void;
278
301
  zoomOut(): void;
302
+ /**
303
+ * Fit all bars on screen with the usual right margin, resting at the live
304
+ * edge — so new bars keep following afterwards. If they can't all fit at
305
+ * the minimum bar width, the newest ones are shown.
306
+ */
279
307
  fitContent(): void;
280
308
  on<K extends ChartEventType>(type: K, handler: (event: ChartEvent<K extends keyof ChartEventMap ? ChartEventMap[K] : unknown>) => void): void;
281
309
  off<K extends ChartEventType>(type: K, handler: (event: ChartEvent<K extends keyof ChartEventMap ? ChartEventMap[K] : unknown>) => void): void;
@@ -433,8 +461,25 @@ export declare class Chart {
433
461
  private getDisplayData;
434
462
  /** Lightweight render for streaming updates. No layout resolve, no indicator recalc. */
435
463
  private scheduleRender;
464
+ /**
465
+ * Push the display data into the viewport and apply auto-scale. The single
466
+ * place auto-scale is computed — both the live-tick path (`scheduleRender`)
467
+ * and the pan/zoom/data path (`updateViewportAndRender`) go through it.
468
+ * They used to diverge: ticks fit candles only while pan/zoom also fit
469
+ * overlay indicators (Bollinger, Keltner, Ichimoku…), so the price scale
470
+ * jumped on every tick and jumped back on every pan frame.
471
+ */
472
+ private applyDataToViewport;
436
473
  /** Full update: resolve layout, update viewport, sync context, request render. */
437
474
  private updateViewportAndRender;
475
+ /**
476
+ * Size the price axis to its widest label (tick labels, last-price tag,
477
+ * crosshair pill), as an auto-width scale — so a sub-cent
478
+ * price isn't clipped. Returns true when the width, and so the layout,
479
+ * changed.
480
+ */
481
+ private fitPriceAxisWidth;
482
+ private measureText;
438
483
  /**
439
484
  * Fire the public viewport events (`visibleRangeChange`, `priceRangeChange`,
440
485
  * `zoomChange`) whenever the corresponding piece of viewport state changed
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../src/Chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,OAAO,EACP,UAAU,EACV,KAAK,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AA6D9B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAW5E,qBAAa,KAAK;IAChB,MAAM,CAAC,OAAO,SAAwE;IAEtF,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,mBAAmB,CAA8D;IACzF,OAAO,CAAC,cAAc,CAA8D;IACpF,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,kBAAkB,CAAkD;IAC5E,OAAO,CAAC,sBAAsB,CAAK;IAGnC,OAAO,CAAC,gBAAgB,CAA6C;IACrE,OAAO,CAAC,qBAAqB,CAA6C;IAC1E,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,iBAAiB,CAAuD;IAChF,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,gBAAgB,CAA+C;IACvE,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,eAAe,CAA6C;IACpE,OAAO,CAAC,aAAa,CAAc;gBAGvB,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG;QAAE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;KAAE;IA8evF,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAiB/B,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAS7B;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAWjC,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAiBjC,gFAAgF;IAChF,qBAAqB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAcnF,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI;IAUnD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAM,EAAE,QAAQ,GAAE,aAAwB,GAAG,MAAM,GAAG,IAAI;IAgBnI,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAK5F,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAYzC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAI9D,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAIhD,oGAAoG;IACpG,IAAI,OAAO,IAAI,aAAa,CAE3B;IAED,MAAM,CAAC,UAAU,IAAI,mBAAmB,EAAE;IAQ1C,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAKnE,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAOpD,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAOlD,cAAc,IAAI,eAAe,GAAG,IAAI;IAIxC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAInD,eAAe,IAAI,YAAY;IAI/B,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAIrC,4EAA4E;IAC5E,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAI3E,WAAW,IAAI,YAAY,EAAE;IAI7B,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;IAI3C,iFAAiF;IACjF,UAAU,CAAC,KAAK,EAAE;QAChB,IAAI,EAAE,OAAO,sBAAsB,EAAE,eAAe,CAAC;QACrD,OAAO,EAAE,OAAO,sBAAsB,EAAE,WAAW,EAAE,CAAC;QACtD,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,GAAG,MAAM,GAAG,IAAI;IAOjB;;;OAGG;IACH,OAAO,IAAI,MAAM,GAAG,IAAI;IASxB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI/B,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAIrD,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAInD,aAAa,IAAI,IAAI;IAIrB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAMhD,IAAI,IAAI,OAAO;IAKf,IAAI,IAAI,OAAO;IAKf,gBAAgB,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAM1D,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIxC,gBAAgB,IAAI,OAAO;IAM3B,eAAe,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAIzB,eAAe,IAAI,IAAI;IAIvB,eAAe,IAAI,IAAI;IAMvB,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5C,iBAAiB,CAAC,MAAM,GAAE,KAAK,GAAG,MAAc,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAgB1E,aAAa,CAAC,MAAM,GAAE,KAAK,GAAG,MAAc,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAatE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,IAAI;IAI9C,eAAe,IAAI,IAAI;IAIvB,OAAO,CAAC,gBAAgB;IAMxB,sBAAsB,IAAI,mBAAmB,EAAE;IAI/C,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAOtF,mEAAmE;IACnE,mBAAmB,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,UAAU,EAAE,mBAAmB,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE;IAI/I,qDAAqD;IACrD,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAM/D,2DAA2D;IAC3D,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAM9F,qDAAqD;IACrD,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAOrH,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI;IAKvC;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,OAAO,sBAAsB,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IASrF,aAAa,IAAI,IAAI;IAIrB,cAAc,IAAI,OAAO;IAIzB,eAAe,IAAI,OAAO;IAI1B;;;;;;OAMG;IACH,eAAe,CAAC,IAAI,EAAE,OAAO,sBAAsB,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IASxF,gBAAgB,IAAI,IAAI;IAIxB,iBAAiB,IAAI,OAAO;IAI5B,kBAAkB,IAAI,OAAO;IAI7B;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,GAAG,IAAI;IAK/E,YAAY,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI;IAKhD,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAK3C,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAW1D;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAqB3B,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAOtD;;;;;;;;;;;OAWG;IACG,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DlD;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvE;;;OAGG;IACG,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAOxB;;;;;;;OAOG;IACH,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,GAAE,eAAoB,GAAG,IAAI;IAqB/E,gFAAgF;IAChF,mBAAmB,IAAI,IAAI;IAW3B,kFAAkF;IAClF,mBAAmB,IAAI,gBAAgB,GAAG,IAAI;IAI9C,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK9C,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO/C,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlF,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKrC,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAKrD,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI;IAKlD,mBAAmB,IAAI,IAAI;IAO3B,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKnC,UAAU,IAAI,OAAO;IAIrB;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,OAAO,sBAAsB,EAAE,cAAc,GAAG,IAAI;IAKvE,YAAY,IAAI,OAAO,sBAAsB,EAAE,cAAc;IAI7D,sBAAsB,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAKvH,kBAAkB,IAAI,eAAe;IAIrC,iBAAiB,IAAI,cAAc;IAInC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYjC,WAAW,IAAI,IAAI;IAKnB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAuBjE,MAAM,IAAI,IAAI;IAMd,OAAO,IAAI,IAAI;IAMf,UAAU,IAAI,IAAI;IAQlB,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,SAAS,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAI7I,GAAG,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,SAAS,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAI9I,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAI9D,kBAAkB,IAAI,IAAI;IAM1B,QAAQ,CAAC,WAAW,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI;IAQ9C,QAAQ,IAAI,KAAK;IAMjB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAO9E,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKpC,WAAW,IAAI,OAAO;IAMtB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAK5D,gBAAgB,IAAI,MAAM;IAI1B,oBAAoB,CAAC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,IAAI;IAOlE,OAAO,IAAI,UAAU;IAMrB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKtC,aAAa,IAAI,OAAO;IAMxB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOxC,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK/C,sBAAsB,IAAI,OAAO;IAIjC,sBAAsB,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAUzH,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK/C,sBAAsB,IAAI,OAAO;IAIjC,sBAAsB,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAYlN,yEAAyE;IACzE,qBAAqB,IAAI,OAAO,mBAAmB,EAAE,kBAAkB,GAAG,IAAI;IAM9E,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK9C,qBAAqB,IAAI,OAAO;IAIhC,qBAAqB,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAM5E;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,OAAO,sBAAsB,EAAE,SAAS,GAAG,IAAI;IAOxE,iBAAiB,IAAI,IAAI;IAOzB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK9C,qBAAqB,IAAI,OAAO;IAIhC,qBAAqB,CAAC,MAAM,EAAE,OAAO,mBAAmB,EAAE,WAAW,GAAG,IAAI;IAK5E;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAS/C,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK9C,qBAAqB,IAAI,OAAO;IAIhC,qBAAqB,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAWvH,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKhD,uBAAuB,IAAI,OAAO;IAIlC;;;;OAIG;IACH,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,mBAAmB,EAAE,kBAAkB,CAAC,GAAG,IAAI;IAO9F,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMzC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,mBAAmB,EAAE,YAAY,CAAC,GAAG,IAAI;IAK1E,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKnC;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAOxC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAKnC,mFAAmF;IAC7E,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAaxC,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAK5B,cAAc,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAO5C,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,OAAO,mBAAmB,EAAE,cAA2B,EAClE,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,SAAU,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,GAAG,IAAI;IAOhB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK7B,SAAS,IAAI,OAAO,mBAAmB,EAAE,UAAU,EAAE;IAIrD,WAAW,IAAI,IAAI;IAKnB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAO7B,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,sBAAsB,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAI1G,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIpC,gBAAgB,IAAI,OAAO,sBAAsB,EAAE,YAAY,EAAE;IAIjE,gBAAgB,CAAC,OAAO,EAAE,OAAO,sBAAsB,EAAE,YAAY,EAAE,GAAG,IAAI;IAI9E,kBAAkB,IAAI,IAAI;IAI1B,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,sBAAsB,EAAE,iBAAiB,CAAC,GAAG,IAAI;IAM5F,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,sBAAsB,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAIlG,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,sBAAsB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI;IAIzG,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIjC,aAAa,IAAI,OAAO,sBAAsB,EAAE,SAAS,EAAE;IAI3D,aAAa,CAAC,KAAK,EAAE,OAAO,sBAAsB,EAAE,SAAS,EAAE,GAAG,IAAI;IAItE,eAAe,IAAI,IAAI;IAIvB,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,sBAAsB,EAAE,cAAc,CAAC,GAAG,IAAI;IAMtF,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,mBAAmB,EAAE,YAAY,CAAC,GAAG,IAAI;IAc7E,WAAW,IAAI,IAAI;IACnB,YAAY,IAAI,IAAI;IACpB,UAAU,IAAI,IAAI;IAClB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC/B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IACnC,cAAc,IAAI,SAAS,GAAG,QAAQ,GAAG,SAAS;IAClD,iBAAiB,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAIxE,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAetC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc7B,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQ1C,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAShC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQxC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQrC,eAAe,IAAI,MAAM;IAMzB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IA8BrC,SAAS,IAAI,YAAY,GAAG,IAAI;IAIhC,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAc5C,6CAA6C;IAC7C,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAIjD,uEAAuE;IACvE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IA8BjD,MAAM,IAAI,IAAI;IAgBd,OAAO,IAAI,IAAI;IAwBf,OAAO,CAAC,mBAAmB;IAI3B,4EAA4E;IAC5E,OAAO,CAAC,cAAc;IAStB,wFAAwF;IACxF,OAAO,CAAC,cAAc;IAYtB,kFAAkF;IAClF,OAAO,CAAC,uBAAuB;IAiD/B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,iBAAiB;IAOzB,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,qBAAqB;IAmC7B,OAAO,CAAC,iBAAiB;IA4DzB,0EAA0E;IAC1E,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,gBAAgB;CAazB"}
1
+ {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../src/Chart.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataManager.d.ts","sourceRoot":"","sources":["../src/DataManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AA4BhE,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAkB;IAE9B,OAAO,IAAI,UAAU;IAIrB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAO/B,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAK7B,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAUjC,qBAAqB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAOnF,SAAS,IAAI,MAAM;IAInB,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"DataManager.d.ts","sourceRoot":"","sources":["../src/DataManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAmChE,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAkB;IAE9B,OAAO,IAAI,UAAU;IAIrB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAe/B,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAK7B,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAUjC,qBAAqB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAOnF,SAAS,IAAI,MAAM;IAInB,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,2 @@
1
+ let e=require(`@tradecanvas/commons`),t=require(`@tradecanvas/core`);function n(e){switch(e){case`candlestick`:case`heikinAshi`:case`lineBreak`:case`rangeBars`:return new t.CandlestickRenderer;case`line`:return new t.LineRenderer;case`area`:return new t.AreaRenderer;case`bar`:return new t.BarRenderer;case`hollowCandle`:return new t.HollowCandleRenderer;case`baseline`:return new t.BaselineRenderer;case`renko`:return new t.RenkoRenderer;case`kagi`:return new t.KagiRenderer;case`pointAndFigure`:return new t.PointAndFigureRenderer;case`volumeCandles`:return new t.VolumeCandleRenderer;case`equivolume`:return new t.EquivolumeRenderer;case`hlcArea`:return new t.HLCAreaRenderer;case`stepLine`:return new t.StepLineRenderer;case`lineWithMarkers`:return new t.LineWithMarkersRenderer;default:return new t.CandlestickRenderer}}function r(e,n){if(n.length===0)return n;switch(e){case`heikinAshi`:return(0,t.toHeikinAshi)(n);case`renko`:return(0,t.toRenko)(n,{brickSize:0,useATR:!0,atrPeriod:14});case`lineBreak`:return(0,t.toLineBreak)(n,3);case`kagi`:return(0,t.toKagi)(n,4);case`pointAndFigure`:return(0,t.toPointAndFigure)(n,i(n)*.01,3);case`rangeBars`:return(0,t.toRangeBars)(n,{rangeSize:i(n)*.005});default:return n}}function i(e){let t=0;for(let n of e)t+=n.close;return t/e.length}function a(e,t){let r=t?.(e);return r?r.createRenderer():n(e)}function o(e,t,n){if(t.length===0)return t;let i=n?.(e);return i?.transform?i.transform(t):r(e,t)}var s={min:0,max:100},c=.1;function l(e,t,n){if(!e)return{...s};let r=1/0,i=-1/0;if(e.series){let a=Math.min(n,e.series.length-1);for(let n=Math.max(0,t);n<=a;n++){let t=e.series[n];if(t)for(let e in t){let n=t[e];n!==void 0&&Number.isFinite(n)&&(n<r&&(r=n),n>i&&(i=n))}}}else{let a=0;for(let[,o]of e.values){if(a>=t&&a<=n)for(let e in o){let t=o[e];t!==void 0&&Number.isFinite(t)&&(t<r&&(r=t),t>i&&(i=t))}a++}}if(r===1/0)return{...s};let a=i-r||1;return{min:r-a*c,max:i+a*c}}var u=class{timer=null;delayMs=0;key=null;constructor(e){this.save=e}enable(e,t){this.key=e,this.delayMs=t}disable(){this.key=null,this.delayMs=0,this.cancel()}schedule(){this.delayMs<=0||!this.key||(this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>{this.timer=null,this.key&&this.save(this.key)},this.delayMs))}cancel(){this.timer&&=(clearTimeout(this.timer),null)}isEnabled(){return this.delayMs>0&&this.key!==null}hasPending(){return this.timer!==null}};function d(e){if(!e||typeof e.time!=`number`)return!1;let{open:t,high:n,low:r,close:i}=e;return!(!isFinite(t)||!isFinite(n)||!isFinite(r)||!isFinite(i)||t<0||n<0||r<0||i<0||n<r||e.volume!==void 0&&(!isFinite(e.volume)||e.volume<0))}function f(e){return e.volume!==void 0&&e.high>=e.open&&e.high>=e.close&&e.low<=e.open&&e.low<=e.close}function p(e){return{...e,high:Math.max(e.open,e.high,e.low,e.close),low:Math.min(e.open,e.high,e.low,e.close),volume:e.volume===void 0?0:Math.max(0,e.volume)}}var m=class{data=[];getData(){return this.data}setData(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];d(r)&&t.push(f(r)?r:p(r))}this.data=t}appendBar(e){d(e)&&this.data.push(p(e))}updateLastBar(e){if(!d(e))return;let t=p(e);if(this.data.length===0){this.data.push(t);return}this.data[this.data.length-1]=t}updateLastBarFromTick(t){this.data.length!==0&&(!isFinite(t.price)||t.price<0||t.volume!==void 0&&(!isFinite(t.volume)||t.volume<0)||(this.data[this.data.length-1]=(0,e.mergeBar)(this.data[this.data.length-1],t)))}getLength(){return this.data.length}clear(){this.data=[]}},h=class{theme;constructor(t){!t||t===`dark`?this.theme={...e.DARK_THEME}:t===`light`?this.theme={...e.LIGHT_THEME}:this.theme={...t}}getTheme(){return this.theme}setTheme(t){t===`dark`?this.theme={...e.DARK_THEME}:t===`light`?this.theme={...e.LIGHT_THEME}:this.theme={...t}}},g=200,_=80,v=class{panels=[];containerWidth=0;containerHeight=0;priceAxisWidth=e.PRICE_AXIS_WIDTH;resize(e,t){this.containerWidth=e,this.containerHeight=t}addPanel(t,n=`bottom`,r){let i=n===`left`||n===`right`;this.panels.push({id:t,position:n,size:r??(i?g:e.DEFAULT_PANEL_HEIGHT),minSize:i?_:e.MIN_PANEL_HEIGHT,content:{type:`indicator`,indicatorInstanceId:t}})}removePanel(e){this.panels=this.panels.filter(t=>t.id!==e)}setPanelPosition(t,n){let r=this.panels.find(e=>e.id===t);if(r){let t=r.position===`left`||r.position===`right`,i=n===`left`||n===`right`;r.position=n,t!==i&&(r.size=i?g:e.DEFAULT_PANEL_HEIGHT,r.minSize=i?_:e.MIN_PANEL_HEIGHT)}}setPanelSize(e,t){let n=this.panels.find(t=>t.id===e);n&&(n.size=Math.max(n.minSize,t))}setPriceAxisWidth(e){this.priceAxisWidth=e}getPanels(){return this.panels}resolve(){let t=this.panels.filter(e=>e.position===`left`),n=this.panels.filter(e=>e.position===`right`),r=this.panels.filter(e=>e.position===`top`),i=this.panels.filter(e=>e.position===`bottom`),a=t.reduce((e,t)=>e+t.size,0),o=n.reduce((e,t)=>e+t.size,0),s=r.reduce((e,t)=>e+t.size,0),c=i.reduce((e,t)=>e+t.size,0),l={x:a,y:s,width:Math.max(0,this.containerWidth-a-o-this.priceAxisWidth),height:Math.max(0,this.containerHeight-s-c-e.TIME_AXIS_HEIGHT)},u=[],d=[],f=0;for(let n of t)u.push({config:n,rect:{x:f,y:0,width:n.size,height:this.containerHeight-e.TIME_AXIS_HEIGHT}}),d.push({panelId:n.id,rect:{x:f+n.size-2,y:0,width:4,height:this.containerHeight},orientation:`vertical`}),f+=n.size;let p=0;for(let e of r)u.push({config:e,rect:{x:a,y:p,width:l.width,height:e.size}}),d.push({panelId:e.id,rect:{x:a,y:p+e.size-2,width:l.width,height:4},orientation:`horizontal`}),p+=e.size;p=l.y+l.height;for(let e of i)u.push({config:e,rect:{x:a,y:p,width:l.width,height:e.size}}),d.push({panelId:e.id,rect:{x:a,y:p-2,width:l.width,height:4},orientation:`horizontal`}),p+=e.size;f=a+l.width+this.priceAxisWidth;for(let t of n)u.push({config:t,rect:{x:f,y:0,width:t.size,height:this.containerHeight-e.TIME_AXIS_HEIGHT}}),d.push({panelId:t.id,rect:{x:f-2,y:0,width:4,height:this.containerHeight},orientation:`vertical`}),f+=t.size;return{mainChartRect:l,panels:u,dividers:d}}getMainChartRect(){return this.resolve().mainChartRect}},y=14,ee=14,b=22,x=4;function S(t){let{min:n,max:r,lastPrice:i,locale:a,fontFamily:o,fontSizeSmall:s,measure:c}=t,l=(0,e.autoPricePrecision)(n,r),u=t.tagPrecision??l,d=i===null?[n,r]:[n,r,i],f=e.PRICE_AXIS_WIDTH;for(let t of d){if(!Number.isFinite(t))continue;let n=(0,e.formatPrice)(t,l,a),r=(0,e.formatPrice)(t,u,a);f=Math.max(f,c(n,`500 ${s}px ${o}`)+y,c(r,`bold 11px ${o}`)+ee,c(r,`600 ${s}px ${o}`)+b)}return f<=e.PRICE_AXIS_WIDTH?e.PRICE_AXIS_WIDTH:Math.ceil(f/x)*x}function C(e,t){return t>e||t<=e-12?t:e}var te=class{netY=0;travelX=0;engaged=!1;reset(){this.netY=0,this.travelX=0,this.engaged=!1}step(e,t,n){if(this.engaged)return!0;if(this.netY+=t,this.travelX+=Math.abs(e),!n)this.engaged=!0;else{let e=Math.abs(this.netY);this.engaged=e>24&&e>=this.travelX*.5}return this.engaged}},w=1;function T(e,t){return e.filter(e=>(e.descriptor.layer??`overlay`)===t)}function E(e){switch(e.kind){case`indicator`:return`indicator:${e.plugin.descriptor.id}`;case`drawing`:return`drawing:${e.plugin.descriptor.type}`;case`chartType`:return`chartType:${e.plugin.descriptor.type}`;case`overlay`:return`overlay:${e.plugin.descriptor.id}`}}var D=new Map;function O(e){D.set(E(e),e)}function k(e){return D.delete(e)}function A(){return[...D.values()]}function j(){D.clear()}var M=class{plugins=new Map;constructor(e,t={}){if(this.indicatorEngine=e,t.inheritGlobal!==!1)for(let e of A())this.add(e);for(let e of t.plugins??[])this.add(e)}register(e){this.add(e)}unregister(e){return this.plugins.delete(e)}list(){return[...this.plugins.values()]}registerIndicator(e){this.add({kind:`indicator`,plugin:e})}getChartType(e){let t=this.plugins.get(`chartType:${e}`);return t?.kind===`chartType`?t.plugin:void 0}getOverlays(){let e=[];for(let t of this.plugins.values())t.kind===`overlay`&&e.push(t.plugin);return e}add(e){this.plugins.set(E(e),e),e.kind===`indicator`&&this.indicatorEngine.register(e.plugin)}},N={orderPlace:(e,t)=>e.placeOrder(t),orderModify:(e,t)=>e.modifyOrder(t),orderCancel:(e,t)=>e.cancelOrder(t),positionModify:(e,t)=>e.modifyPosition(t),positionClose:(e,t)=>e.closePosition(t)};function P(e,t){let n=[],r=e=>t.setOrders(e.data??[]),i=e=>t.setPositions(e.data??[]),a=e=>t.onError(e.data??{message:`Execution error`});e.on(`orders`,r),e.on(`positions`,i),e.on(`error`,a),n.push(()=>e.off(`orders`,r),()=>e.off(`positions`,i),()=>e.off(`error`,a));for(let r of Object.keys(N)){let i=N[r],a=t.onIntent(r,n=>{Promise.resolve(i(e,n)).catch(e=>t.onError({message:`Execution command failed: ${r}`,cause:e}))});n.push(a)}return()=>{for(let e of n)e()}}var F=class{static version=`1.3.0`;engine;viewport;dataManager;themeManager;layoutManager;pluginManager;indicatorEngine;drawingManager;drawingRenderer;tradingManager;tradingRenderer;eventBus;streamManager=null;executionAdapter=null;execTeardown=null;autoScrollOnNewBar=!0;displayDataCache=null;resolvedLayoutCache=null;panelInfoCache=null;renderScheduled=!1;priceAxisWidth=e.PRICE_AXIS_WIDTH;measureCtx;containerSizeCache=null;containerSizeCacheTime=0;lastEmittedRange=null;lastEmittedPriceRange=null;lastEmittedBarWidth=null;chartLegend;watermark;barCountdown;sessionBreaks;sessionShading;compareRenderer;countdownInterval=null;volumeRenderer;volumeProfile;marketProfile;depthHeatmap;periodLevels;pivotMarkers;alertManager;signalMarkerManager;tradeZoneManager;measureOverlay;selectionBoxOverlay=new t.SelectionBoxOverlay;replayManager;replayBarUnsub=null;replaySeeking=!1;undoRedoManager;autoSaveScheduler=new u(e=>this.saveState(e));animator;crosshairTooltip;pinnedTooltip;interactionManager;crosshairHandler;chartRenderer;gridRenderer;priceAxis;timeAxis;options;features;marketConfig=null;container;currentPriceLine;numberLocale;defaultAutoScale;keyboardHandler=null;onWindowKeyDown=null;currentSymbol=``;constructor(n,r){this.container=n,this.options=r,this.numberLocale=r.numberLocale??`en-US`,this.defaultAutoScale=r.autoScale!==!1;let i=r.features??{};this.features={drawings:i.drawings??!0,drawingTools:i.drawingTools??[],drawingMagnet:i.drawingMagnet??!0,drawingUndoRedo:i.drawingUndoRedo??!0,trading:i.trading??!0,tradingContextMenu:i.tradingContextMenu??!1,indicators:i.indicators??!0,indicatorIds:i.indicatorIds??[],panning:i.panning??!0,zooming:i.zooming??!0,crosshair:i.crosshair??!0,crosshairTooltip:i.crosshairTooltip??!0,keyboard:i.keyboard??!0,priceAxis:i.priceAxis??!0,timeAxis:i.timeAxis??!0,grid:i.grid??r.grid?.visible??!0,legend:i.legend??!0,volume:i.volume??!0,watermark:i.watermark??!0,saveLoad:i.saveLoad??!0,screenshot:i.screenshot??!0,alerts:i.alerts??!0,replay:i.replay??!0,sessionBreaks:i.sessionBreaks??!0,barCountdown:i.barCountdown??!0,compareSymbols:i.compareSymbols??!0,dataExport:i.dataExport??!0,logScale:i.logScale??!0,timeframes:i.timeframes??[],defaultTimeframeFavorites:i.defaultTimeframeFavorites??[]},n.style.position=`relative`,n.style.overflow=`hidden`,n.tabIndex=0,n.style.outline=`none`,this.dataManager=new m,this.themeManager=new h(r.theme),this.layoutManager=new v,this.indicatorEngine=new t.IndicatorEngine,this.pluginManager=new M(this.indicatorEngine,{plugins:r.plugins}),this.eventBus=new t.EventBus,(0,t.registerBuiltInIndicators)(this.indicatorEngine),this.drawingManager=new t.DrawingManager,(0,t.registerBuiltInDrawingTools)(this.drawingManager),this.drawingRenderer=new t.DrawingRenderer(this.drawingManager),this.drawingManager.setRequestRender(()=>{this.syncRenderContext(),this.engine.requestRender(e.LayerType.Overlay),this.scheduleAutoSave()}),this.drawingManager.setEventCallback((e,t)=>{this.eventBus.emit(e,t)}),this.undoRedoManager=new t.UndoRedoManager,this.drawingManager.setUndoRedoManager(this.undoRedoManager),this.drawingManager.setDataGetter(()=>this.dataManager.getData()),this.drawingManager.setDisplayDataGetter(()=>this.getDisplayData()),r.crosshair?.mode===`magnet`&&this.drawingManager.setMagnetMode(`magnet`),this.tradingManager=new t.TradingManager({enabled:this.features.trading,contextMenu:{enabled:this.features.tradingContextMenu}}),this.tradingRenderer=new t.TradingRenderer(this.tradingManager),this.tradingManager.setContainer(n),this.tradingManager.setRequestRender(()=>this.engine.requestRender(e.LayerType.Overlay)),this.tradingManager.setEventCallback((e,t)=>{this.eventBus.emit(e,t)}),this.engine=new t.RenderEngine(n);let a=this.engine.dprManager.getContainerSize();if(this.viewport=new t.Viewport(a.width,a.height,r.minBarSpacing??2,r.maxBarSpacing??30,r.rightMargin??5),this.viewport.setPanLimits({freePan:r.freePan??!0,minVisibleBars:r.panLimits?.minVisibleBars??3}),this.layoutManager.resize(a.width,a.height),this.engine.onContainerResize=e=>{if(e.width<=0||e.height<=0)return;let t=this.viewport.isAtEnd();this.viewport.resize(e.width,e.height),this.layoutManager.resize(e.width,e.height),this.updateViewportAndRender(t)},this.chartRenderer=this.createChartRenderer(r.chartType),this.gridRenderer=new t.GridRenderer,r.grid?.visible===!1&&this.gridRenderer.setVisible(!1),this.priceAxis=new t.PriceAxis,this.priceAxis.setLocale(this.numberLocale),this.timeAxis=new t.TimeAxis,this.crosshairHandler=new t.CrosshairHandler,this.crosshairHandler.setLocale(this.numberLocale),r.crosshair?.mode&&this.crosshairHandler.setMode(r.crosshair.mode),this.crosshairHandler.setCallback((e,n)=>{if(e!==null&&n){let r=this.dataManager.getData(),i=e<r.length?r[e]:void 0;if(this.chartLegend.setHoverBar(i??null),i&&this.features.crosshairTooltip){let a=this.viewport.getState();this.crosshairTooltip.show(n,i,this.themeManager.getTheme(),this.cachedContainerSize(),{prevClose:e>0?r[e-1]?.close:void 0,priceRange:a.priceRange,plot:a.chartRect,barStepMs:(0,t.barTimeStep)(r)})}this.pinnedTooltip.isPinned()&&this.pinnedTooltip.reposition(this.viewport.getState(),i??null,e,this.themeManager.getTheme()),this.eventBus.emit(`crosshairMove`,{point:n,bar:i,barIndex:e})}else this.crosshairTooltip.hide(),this.chartLegend.setHoverBar(null)}),this.chartLegend=new t.ChartLegend,this.chartLegend.setChartType(r.chartType),this.chartLegend.setLocale(this.numberLocale),this.watermark=new t.Watermark,r.watermark&&this.watermark.setConfig(r.watermark),this.volumeRenderer=new t.VolumeRenderer,this.volumeProfile=new t.VolumeProfileRenderer,this.marketProfile=new t.MarketProfileRenderer,this.depthHeatmap=new t.DepthHeatmapRenderer,this.periodLevels=new t.PeriodLevelsRenderer,this.pivotMarkers=new t.PivotMarkersRenderer,this.barCountdown=new t.BarCountdown,this.sessionBreaks=new t.SessionBreaks,this.sessionBreaks.setLocale(this.numberLocale),this.sessionShading=new t.SessionShading,this.compareRenderer=new t.CompareRenderer,r.sessionBreaks?this.sessionBreaks.setConfig({visible:r.sessionBreaks.visible??!0,color:r.sessionBreaks.color,lineStyle:r.sessionBreaks.lineStyle,lineWidth:r.sessionBreaks.lineWidth}):r.features?.sessionBreaks!==!1&&this.sessionBreaks.setVisible(!0),r.logScale&&this.viewport.setLogScale(!0),this.animator=new t.Animator,this.crosshairTooltip=new t.CrosshairTooltip,this.crosshairTooltip.create(n),this.crosshairTooltip.setLocale(this.numberLocale),this.pinnedTooltip=new t.PinnedTooltip,this.pinnedTooltip.create(n),this.keyboardHandler=new t.KeyboardHandler({scrollBars:e=>{let t=this.viewport.getState().barWidth+this.viewport.getState().barSpacing;this.viewport.scrollBy(e*t),this.updateViewportAndRender()},zoom:e=>{let t=this.viewport.getState().chartRect.width;this.viewport.zoom(e,t/2),this.updateViewportAndRender()},goToStart:()=>{this.viewport.scrollBy(-1/0),this.updateViewportAndRender()},goToEnd:()=>{this.viewport.scrollToEnd(),this.updateViewportAndRender()},fitContent:()=>this.fitContent()}),this.keyboardHandler.setEnabled(this.features.keyboard),this.onWindowKeyDown=e=>{if(!this.keyboardHandler)return;let t=document.activeElement;t&&t!==this.container&&!this.container.contains(t)||t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable)||this.keyboardHandler.handleKey(e)&&e.preventDefault()},window.addEventListener(`keydown`,this.onWindowKeyDown),this.currentPriceLine=new t.CurrentPriceLine,this.currentPriceLine.setLocale(this.numberLocale),this.priceAxis.setReservedPriceProvider(()=>this.currentPriceLine.isVisible()?this.currentPriceLine.getPrice():null),this.alertManager=new t.AlertManager,this.alertManager.setRequestRender(()=>this.engine.requestRender(e.LayerType.Overlay)),this.alertManager.on(`triggered`,e=>{let t={id:e.id,price:e.price,condition:e.condition,message:e.message,triggered:e.triggered};this.eventBus.emit(`alertTriggered`,t),this.eventBus.emit(`dataUpdate`,{alert:`triggered`,alertId:e.id,price:e.price,message:e.message})}),this.alertManager.on(`added`,e=>{this.eventBus.emit(`alertAdd`,{id:e.id,price:e.price,condition:e.condition,message:e.message,triggered:e.triggered})}),this.alertManager.on(`removed`,e=>{this.eventBus.emit(`alertRemove`,{id:e})}),this.alertManager.on(`updated`,e=>{this.eventBus.emit(`alertUpdate`,{id:e.id,price:e.price,condition:e.condition,message:e.message,triggered:e.triggered})}),this.signalMarkerManager=new t.SignalMarkerManager,this.signalMarkerManager.setRequestRender(()=>this.engine.requestRender(e.LayerType.Overlay)),this.signalMarkerManager.setDataGetter(()=>this.dataManager.getData()),this.signalMarkerManager.on(`added`,e=>{this.eventBus.emit(`signalMarkerAdd`,{id:e.id,source:e.source,direction:e.direction})}),this.signalMarkerManager.on(`removed`,e=>{this.eventBus.emit(`signalMarkerRemove`,{id:e})}),this.tradeZoneManager=new t.TradeZoneManager,this.tradeZoneManager.setRequestRender(()=>this.engine.requestRender(e.LayerType.Overlay)),this.tradeZoneManager.setDataGetter(()=>this.dataManager.getData()),this.tradeZoneManager.on(`added`,e=>{this.eventBus.emit(`tradeZoneAdd`,{id:e.id,direction:e.direction})}),this.tradeZoneManager.on(`removed`,e=>{this.eventBus.emit(`tradeZoneRemove`,{id:e})}),this.replayManager=new t.ReplayManager,this.measureOverlay=new t.MeasureOverlay,this.interactionManager=new t.InteractionManager(n),this.features.panning){let e=new te;this.interactionManager.setPanHandler(new t.PanHandler((t,n)=>{t&&this.viewport.scrollBy(t),e.step(t,n,this.options.autoScale!==!1)&&n&&(this.options.autoScale=!1,this.viewport.panPriceRange(n)),this.updateViewportAndRender()},()=>e.reset()))}if(this.features.zooming){this.interactionManager.setZoomHandler(new t.ZoomHandler((e,t)=>{this.viewport.zoom(e,t),this.updateViewportAndRender()}));let e=new t.AxisDragHandler(e=>{this.options.autoScale=!1,this.viewport.scalePriceRange(e),this.syncRenderContext(),this.engine.requestRender(),this.emitViewportEvents()},e=>{let t=this.viewport.getState().chartRect.width;this.viewport.zoom(1/e-1,t/2),this.updateViewportAndRender()});this.interactionManager.setAxisDragHandler(e,()=>this.viewport.getState(),e=>{e===`price`?(this.options.autoScale=!0,this.updateViewportAndRender()):this.fitContent()})}if(this.features.crosshair&&this.interactionManager.setCrosshairHandler(this.crosshairHandler),this.features.drawings&&this.interactionManager.setDrawingManager(this.drawingManager,()=>({...this.viewport.getState(),data:this.getDisplayData()})),this.features.trading&&this.interactionManager.setTradingManager(this.tradingManager,()=>({...this.viewport.getState(),data:this.getDisplayData()})),this.features.alerts){let e=new t.AlertDragHandler(this.alertManager,()=>this.viewport.getState());this.interactionManager.setAlertDragHandler(e)}let o=new t.PaneResizeHandler;o.configure(()=>this.getResolvedLayout(),(e,t)=>this.setPanelSize(e,t)),this.interactionManager.setPaneResizeHandler(o),this.interactionManager.setAltClickHandler(t=>{let n=this.getDisplayData();if(n.length===0)return;let r=this.viewport.getState(),i=r.barWidth+r.barSpacing,a=Math.round((r.offset+t.x)/i);a<0||a>=n.length||(this.pinnedTooltip.isPinned()&&this.pinnedTooltip.getPinnedIndex()===a?this.pinnedTooltip.unpin():this.pinnedTooltip.pin(n[a],a,this.themeManager.getTheme()),this.pinnedTooltip.reposition(this.viewport.getState(),this.dataManager.getData()[a]??null,a,this.themeManager.getTheme()),this.engine.requestRender(e.LayerType.Overlay))}),this.interactionManager.setClickHandler(e=>{let n=this.getDisplayData();if(this.eventBus.emit(`click`,{x:e.x,y:e.y}),n.length===0)return;let r=(0,t.xToBarIndex)(e.x,this.viewport.getState());r<0||r>=n.length||this.eventBus.emit(`barClick`,{bar:n[r],barIndex:r,point:e})}),this.interactionManager.setEscapeHandler(()=>{if(this.features.trading&&this.tradingManager.isBracketActive()){this.tradingManager.cancelBracket(),this.eventBus.emit(`dataUpdate`,{bracket:`cancelled`});return}this.pinnedTooltip.isPinned()&&(this.pinnedTooltip.unpin(),this.engine.requestRender(e.LayerType.Overlay))}),this.interactionManager.setConfirmHandler(()=>this.features.trading&&this.tradingManager.isBracketActive()?(this.tradingManager.confirmBracket(),!0):!1),this.interactionManager.setMeasureHandlers({begin:e=>{this.measureOverlay.begin(e,this.viewport.getState(),this.getDisplayData())},move:e=>{this.measureOverlay.update(e,this.viewport.getState(),this.getDisplayData())},end:()=>{this.measureOverlay.end()}});let s=e=>{let t=this.viewport.getState().chartRect;return{x:Math.max(t.x,Math.min(t.x+t.width,e.x)),y:Math.max(t.y,Math.min(t.y+t.height,e.y))}};this.interactionManager.setBoxSelectHandlers({begin:e=>this.selectionBoxOverlay.begin(s(e)),move:e=>this.selectionBoxOverlay.update(s(e)),end:()=>{let t=this.selectionBoxOverlay.end();if(!t||!this.features.drawings)return;let n={...this.viewport.getState(),data:this.getDisplayData()};t.isClick?this.drawingManager.toggleSelectionAt({x:t.x1,y:t.y1},n):this.drawingManager.selectInRect(t,n),this.engine.requestRender(e.LayerType.Overlay)},cancel:()=>this.selectionBoxOverlay.cancel()}),this.interactionManager.setOverlayDirtyCallback(t=>{this.engine.requestRender(t?e.LayerType.Hover:e.LayerType.Overlay)}),this.interactionManager.attach(),this.syncRenderContext(),this.engine.start()}setData(e){this.dataManager.setData(e),this.crosshairHandler.setData(this.dataManager.getData()),this.displayDataCache=null,this.sessionBreaks.invalidateCache(),this.options.autoScale=this.defaultAutoScale,this.alertManager.clearLastValues(),this.indicatorEngine.recalculateAll(this.dataManager.getData()),e.length>0&&this.currentPriceLine.setPrice(e[e.length-1].close),this.updateViewportAndRender(!0),this.eventBus.emit(`dataUpdate`,{length:e.length})}appendBar(e){let t=this.autoScrollOnNewBar&&this.viewport.isAtEnd();this.dataManager.appendBar(e);let n=this.dataManager.getData();this.crosshairHandler.setData(n),this.displayDataCache=null,this.indicatorEngine.recalculateFrom(n,n.length-2),this.updateViewportAndRender(t)}appendBars(e){if(e.length===0)return;let t=this.viewport.isAtEnd(),n=this.dataManager.getLength()-1;for(let t of e)this.dataManager.appendBar(t);this.displayDataCache=null,this.indicatorEngine.recalculateFrom(this.dataManager.getData(),n),this.crosshairHandler.setData(this.dataManager.getData()),this.updateViewportAndRender(t)}updateLastBar(e){this.dataManager.updateLastBar(e),this.currentPriceLine.setPrice(e.close),this.options.chartType!==`candlestick`&&this.options.chartType!==`line`&&this.options.chartType!==`area`&&this.options.chartType!==`bar`&&this.options.chartType!==`hollowCandle`&&(this.displayDataCache=null);let t=this.dataManager.getData();this.indicatorEngine.recalculateFrom(t,t.length-1),this.scheduleRender()}updateLastBarFromTick(e){this.dataManager.updateLastBarFromTick(e),this.currentPriceLine.setPrice(e.price),this.options.chartType!==`candlestick`&&this.options.chartType!==`line`&&this.options.chartType!==`area`&&this.options.chartType!==`bar`&&this.options.chartType!==`hollowCandle`&&(this.displayDataCache=null);let t=this.dataManager.getData();this.indicatorEngine.recalculateFrom(t,t.length-1),this.scheduleRender()}setChartType(e){this.options.chartType=e,this.chartRenderer=this.createChartRenderer(e),this.chartLegend.setChartType(e),this.displayDataCache=null,this.updateViewportAndRender(!0)}addIndicator(e,t={},n=`bottom`){if(!this.features.indicators||this.features.indicatorIds.length>0&&!this.features.indicatorIds.includes(e))return null;let r=this.indicatorEngine.addIndicator(e,t,this.dataManager.getData());return this.indicatorEngine.getAvailableIndicators().find(t=>t.id===e)?.placement===`panel`?(this.layoutManager.addPanel(r,n),this.updateViewportAndRender()):this.engine.requestRender(),this.eventBus.emit(`indicatorAdd`,{instanceId:r,id:e}),r}updateIndicator(e,t){this.indicatorEngine.updateIndicator(e,t,this.dataManager.getData()),this.engine.requestRender()}removeIndicator(e){let t=this.layoutManager.getPanels().some(t=>t.id===e);this.indicatorEngine.removeIndicator(e),this.layoutManager.removePanel(e),this.eventBus.emit(`indicatorRemove`,{instanceId:e}),t?this.updateViewportAndRender():this.engine.requestRender()}getIndicatorOutput(e){return this.indicatorEngine.getOutput(e)}registerIndicator(e){this.pluginManager.registerIndicator(e)}get plugins(){return this.pluginManager}static indicators(){let e=new t.IndicatorEngine;return(0,t.registerBuiltInIndicators)(e),e.getAvailableIndicators()}setPanelPosition(e,t){this.layoutManager.setPanelPosition(e,t),this.engine.requestRender()}setPanelSize(e,t){this.layoutManager.setPanelSize(e,t),this.updateViewportAndRender()}setDrawingTool(e){this.features.drawings&&(e&&this.features.drawingTools.length>0&&!this.features.drawingTools.includes(e)||this.drawingManager.setActiveTool(e))}getDrawingTool(){return this.drawingManager.getActiveTool()}setDrawingStyle(e){this.drawingManager.setStyle(e)}getDrawingStyle(){return this.drawingManager.getActiveStyle()}getSelectedDrawingId(){return this.drawingManager.getSelectedDrawingId()}setSelectedDrawingStyle(e,t){return this.drawingManager.setSelectedDrawingStyle(e,t)}getDrawings(){return this.drawingManager.getDrawings()}setDrawings(e){this.drawingManager.setDrawings(e)}addDrawing(e){if(!this.features.drawings)return null;let t=this.drawingManager.addDrawing(e);return this.scheduleAutoSave(),t}autoFib(){if(!this.features.drawings)return null;let e=this.getDisplayData(),n=this.viewport.getState(),r=(0,t.findDominantSwing)(e,n.visibleRange.from,n.visibleRange.to);return r?this.addDrawing({type:`fibRetracement`,anchors:[r[0],r[1]]}):null}removeDrawing(e){this.drawingManager.removeDrawing(e)}setDrawingVisible(e,t){this.drawingManager.setDrawingVisible(e,t)}setDrawingLocked(e,t){this.drawingManager.setDrawingLocked(e,t)}clearDrawings(){this.drawingManager.clearDrawings()}registerDrawingTool(e){this.drawingManager.register(e)}undo(){return this.features.drawingUndoRedo?this.drawingManager.undo():!1}redo(){return this.features.drawingUndoRedo?this.drawingManager.redo():!1}getUndoRedoState(){return this.undoRedoManager.getState()}setDrawingMagnet(e){this.drawingManager.setMagnetMode(e?`magnet`:`none`)}getDrawingMagnet(){return this.drawingManager.getMagnetMode()===`magnet`}lockAllDrawings(){this.drawingManager.lockAllDrawings()}unlockAllDrawings(){this.drawingManager.unlockAllDrawings()}hideAllDrawings(){this.drawingManager.hideAllDrawings()}showAllDrawings(){this.drawingManager.showAllDrawings()}duplicateDrawing(e){let t=e??this.drawingManager.getSelectedDrawingId();return t?this.drawingManager.duplicateDrawing(t):null}exportVisibleData(e=`csv`,n){let r=this.viewport.getState(),i=this.dataManager.getData(),a=Math.max(0,r.visibleRange.from),o=Math.min(i.length-1,r.visibleRange.to),s=i.slice(a,o+1);if(e===`json`){let e=t.DataExporter.toJSON(s);t.DataExporter.download(e,n??`chart-data.json`,`application/json`)}else{let e=t.DataExporter.toCSV(s);t.DataExporter.download(e,n??`chart-data.csv`,`text/csv`)}}exportAllData(e=`csv`,n){let r=this.dataManager.getData();if(e===`json`){let e=t.DataExporter.toJSON(r);t.DataExporter.download(e,n??`chart-data.json`,`application/json`)}else{let e=t.DataExporter.toCSV(r);t.DataExporter.download(e,n??`chart-data.csv`,`text/csv`)}}setAutoSave(e,t=5e3){this.autoSaveScheduler.enable(e,t)}disableAutoSave(){this.autoSaveScheduler.disable()}scheduleAutoSave(){this.autoSaveScheduler.schedule()}getAvailableIndicators(){return this.indicatorEngine.getAvailableIndicators()}getIndicatorInputs(e){let t=this.indicatorEngine.getAvailableIndicators().find(t=>t.id===e);return t?{id:t.id,params:t.defaultConfig}:null}getActiveIndicators(){return this.indicatorEngine.getActiveIndicators()}setIndicatorVisible(e,t){this.indicatorEngine.setVisible(e,t)!==null&&this.updateViewportAndRender()}getIndicatorConfig(e){let t=this.indicatorEngine.getIndicatorConfig(e);return t?{id:t.id,params:{...t.params}}:null}updateIndicatorStyle(e,t){this.indicatorEngine.updateIndicatorStyle(e,t),this.engine.requestRender()}setOrders(e){this.features.trading&&this.tradingManager.setOrders(e)}startBracket(e,t){if(!this.features.trading)return!1;let n=this.dataManager.getData(),r=t??(n.length>0?n[n.length-1].close:null);return r===null?!1:(this.tradingManager.startBracket(e,r),!0)}cancelBracket(){this.features.trading&&this.tradingManager.cancelBracket()}confirmBracket(){return this.features.trading?this.tradingManager.confirmBracket():!1}isBracketActive(){return this.features.trading&&this.tradingManager.isBracketActive()}startOrderDraft(e,t){if(!this.features.trading)return!1;let n=this.dataManager.getData(),r=t??(n.length>0?n[n.length-1].close:null);return r===null?!1:(this.tradingManager.startOrderDraft(e,r),!0)}cancelOrderDraft(){this.features.trading&&this.tradingManager.cancelOrderDraft()}confirmOrderDraft(){return this.features.trading?this.tradingManager.confirmOrderDraft():!1}isOrderDraftActive(){return this.features.trading&&this.tradingManager.isOrderDraftActive()}placeOrderIntent(e){this.features.trading&&this.eventBus.emit(`orderPlace`,e)}setPositions(e){this.features.trading&&this.tradingManager.setPositions(e)}setDepthData(e){this.features.trading&&this.tradingManager.setDepthData(e)}setCurrentPrice(e,t){this.tradingManager.setCurrentPrice(e),this.currentPriceLine.setPrice(e),this.scheduleRender(),this.features.alerts&&(this.alertManager.checkPrice(e),this.feedIndicatorAlerts())}feedIndicatorAlerts(){let e=this.alertManager.getAlerts(),t=this.dataManager.getData();if(t.length===0)return;let n=t.length-1,r=new Set;for(let t of e){if(t.channel===`price`||r.has(t.channel))continue;r.add(t.channel);let e=t.channel.indexOf(`:`);if(e<0)continue;let i=t.channel.slice(0,e),a=t.channel.slice(e+1),o=this.indicatorEngine.getOutput(i)?.series?.[n]?.[a];typeof o==`number`&&Number.isFinite(o)&&this.alertManager.checkChannel(t.channel,o)}}setTradingConfig(e){this.features.trading&&this.tradingManager.setConfig(e)}async connect(n){this.disconnectStream(),this.streamManager=new t.StreamManager,this.streamManager.on(`snapshot`,e=>{this.setData(e)}),this.streamManager.on(`barClose`,e=>{let t=this.autoScrollOnNewBar&&this.viewport.isAtEnd();this.dataManager.appendBar(e);let n=this.dataManager.getData();this.crosshairHandler.setData(n),this.displayDataCache=null,this.indicatorEngine.recalculateFrom(n,n.length-2),this.updateViewportAndRender(t)}),this.streamManager.on(`barUpdate`,e=>{this.dataManager.updateLastBar(e),this.currentPriceLine.setPrice(e.close);let t=this.dataManager.getData();this.indicatorEngine.recalculateFrom(t,t.length-1),this.scheduleRender()}),this.streamManager.on(`priceChange`,({price:t,previousClose:n})=>{this.tradingManager.setCurrentPrice(t),this.currentPriceLine.setPrice(t,n??void 0),this.engine.requestRender(e.LayerType.Overlay)}),this.streamManager.on(`connectionChange`,e=>{this.eventBus.emit(`dataUpdate`,{connection:e})}),this.streamManager.on(`error`,e=>{this.eventBus.emit(`dataUpdate`,{error:e.message})}),this.autoScrollOnNewBar=n.autoScroll!==!1,this.currentSymbol=n.symbol;let r=this.streamManager;if(await r.connect(n),this.streamManager!==r)return;let i=(0,e.timeframeToMs)(n.timeframe);this.barCountdown.setTimeframeMs(i),this.countdownInterval&&clearInterval(this.countdownInterval),this.countdownInterval=setInterval(()=>{this.barCountdown.isVisible()&&this.engine.requestRender(e.LayerType.Hover)},1e3)}async switchStream(t,n){this.streamManager&&(this.currentSymbol=t,this.barCountdown.setTimeframeMs((0,e.timeframeToMs)(n)),await this.streamManager.switchTo(t,n))}async setTimeframe(e){if(!this.streamManager)throw Error(`No active stream. Call connect() first.`);await this.switchStream(this.currentSymbol,e)}disconnectStream(){this.streamManager&&=(this.streamManager.dispose(),null)}connectExecution(e,t={}){if(!this.features.trading)throw Error(`connectExecution requires features.trading to be enabled`);this.disconnectExecution(),this.executionAdapter=e,this.execTeardown=P(e,{onIntent:(e,t)=>{let n=e=>t(e.payload);return this.eventBus.on(e,n),()=>this.eventBus.off(e,n)},setOrders:e=>this.setOrders(e),setPositions:e=>this.setPositions(e),onError:e=>this.eventBus.emit(`executionError`,e)}),Promise.resolve(e.connect(t)).catch(e=>this.eventBus.emit(`executionError`,{message:`Execution connect failed`,cause:e}))}disconnectExecution(){this.execTeardown&&=(this.execTeardown(),null),this.executionAdapter&&=(this.executionAdapter.disconnect(),null)}getExecutionAdapter(){return this.executionAdapter}setBarCountdownVisible(t){this.barCountdown.setVisible(t),this.engine.requestRender(e.LayerType.Hover)}setSessionBreaksVisible(t){this.sessionBreaks.setVisible(t),this.engine.requestRender(e.LayerType.Background)}addCompareSymbol(t,n,r,i){this.compareRenderer.addSymbol({id:t,label:n,data:r,color:i,visible:!0}),this.engine.requestRender(e.LayerType.Main)}removeCompareSymbol(t){this.compareRenderer.removeSymbol(t),this.engine.requestRender(e.LayerType.Main)}updateCompareData(t,n){this.compareRenderer.setSymbolData(t,n),this.engine.requestRender(e.LayerType.Main)}setCompareMode(t){this.compareRenderer.setMode(t),this.engine.requestRender(e.LayerType.Main)}clearCompareSymbols(){this.compareRenderer.clear(),this.engine.requestRender(e.LayerType.Main)}setLogScale(e){this.viewport.setLogScale(e),this.updateViewportAndRender()}isLogScale(){return this.viewport.isLogScale()}setScaleMode(e){this.viewport.setScaleMode(e),this.updateViewportAndRender()}getScaleMode(){return this.viewport.getScaleMode()}setSessionBreaksConfig(t){this.sessionBreaks.setConfig(t),this.engine.requestRender(e.LayerType.Background)}getConnectionState(){return this.streamManager?.getConnectionState()??`disconnected`}getConnectionInfo(){return this.streamManager?.getConnectionInfo()??{state:`disconnected`}}setAutoScroll(e){this.autoScrollOnNewBar=e}scrollTo(e){let t=this.dataManager.getData();for(let n=0;n<t.length;n++)if(t[n].time>=e){let e=this.viewport.getState().barWidth+this.viewport.getState().barSpacing;this.viewport.scrollBy(n*e-this.viewport.getState().offset),this.updateViewportAndRender();return}}scrollToEnd(){this.viewport.scrollToEnd(),this.updateViewportAndRender()}setVisibleRange(e,n){let r=this.dataManager.getData();if(r.length===0)return;let i=(0,t.timestampToBarIndex)(Math.min(e,n),r),a=(0,t.timestampToBarIndex)(Math.max(e,n),r);this.viewport.zoomToBarRange(i,a),this.updateViewportAndRender()}setPanLimits(e){this.viewport.setPanLimits(e),this.updateViewportAndRender()}zoomIn(){let e=this.viewport.getState().chartRect.width;this.viewport.zoom(.2,e/2),this.updateViewportAndRender()}zoomOut(){let e=this.viewport.getState().chartRect.width;this.viewport.zoom(-.2,e/2),this.updateViewportAndRender()}fitContent(){let e=this.dataManager.getLength();e!==0&&(this.viewport.zoomToBarRange(0,e-1+this.viewport.getRightMargin()),this.viewport.scrollToEnd(),this.updateViewportAndRender())}on(e,t){this.eventBus.on(e,t)}off(e,t){this.eventBus.off(e,t)}enableTauriBridge(e){this.eventBus.enableTauriBridge({enabled:!0,...e})}disableTauriBridge(){this.eventBus.disableTauriBridge()}setTheme(e){this.themeManager.setTheme(e),this.syncRenderContext(),this.container.style.backgroundColor=this.themeManager.getTheme().background,this.engine.requestRender(),this.eventBus.emit(`themeChange`,{theme:e})}getTheme(){return this.themeManager.getTheme()}setWatermark(t,n){this.watermark.setConfig({text:t,...n}),this.engine.requestRender(e.LayerType.Background)}setAutoScale(e){this.options.autoScale=e,this.defaultAutoScale=e,this.updateViewportAndRender()}isAutoScale(){return this.options.autoScale!==!1}setCrosshairMode(t){this.crosshairHandler.setMode(t),this.engine.requestRender(e.LayerType.Hover)}getCrosshairMode(){return this.crosshairHandler.getMode()}setCrosshairPosition(t){t&&this.crosshairHandler.onPointerMove(t),this.engine.requestRender(e.LayerType.Hover)}getData(){return this.dataManager.getData()}setGridVisible(t){this.gridRenderer.setVisible(t),this.engine.requestRender(e.LayerType.Background)}isGridVisible(){return this.gridRenderer.isVisible()}setVolumeVisible(t){this.volumeRenderer.setVisible(t),this.engine.requestRender(e.LayerType.Main)}setVolumeProfileVisible(t){this.volumeProfile.setVisible(t),this.engine.requestRender(e.LayerType.Main)}isVolumeProfileVisible(){return this.volumeProfile.isVisible()}setVolumeProfileConfig(t){t.buckets!==void 0&&this.volumeProfile.setBuckets(t.buckets),t.widthRatio!==void 0&&this.volumeProfile.setWidthRatio(t.widthRatio),t.opacity!==void 0&&this.volumeProfile.setOpacity(t.opacity),t.highlightPoC!==void 0&&this.volumeProfile.setHighlightPoC(t.highlightPoC),this.engine.requestRender(e.LayerType.Main)}setMarketProfileVisible(t){this.marketProfile.setVisible(t),this.engine.requestRender(e.LayerType.Main)}isMarketProfileVisible(){return this.marketProfile.isVisible()}setMarketProfileConfig(t){t.buckets!==void 0&&this.marketProfile.setBuckets(t.buckets),t.widthRatio!==void 0&&this.marketProfile.setWidthRatio(t.widthRatio),t.opacity!==void 0&&this.marketProfile.setOpacity(t.opacity),t.valueAreaPct!==void 0&&this.marketProfile.setValueAreaPct(t.valueAreaPct),t.highlightPoC!==void 0&&this.marketProfile.setHighlightPoC(t.highlightPoC),t.showStats!==void 0&&this.marketProfile.setShowStats(t.showStats),t.splitBySession!==void 0&&this.marketProfile.setSplitBySession(t.splitBySession),t.letters!==void 0&&this.marketProfile.setLetters(t.letters),this.engine.requestRender(e.LayerType.Main)}getMarketProfileStats(){return this.marketProfile.getStats()}setDepthHeatmapVisible(t){this.depthHeatmap.setVisible(t),this.engine.requestRender(e.LayerType.Main)}isDepthHeatmapVisible(){return this.depthHeatmap.isVisible()}setDepthHeatmapConfig(t){t.opacity!==void 0&&this.depthHeatmap.setOpacity(t.opacity),t.capacity!==void 0&&this.depthHeatmap.setCapacity(t.capacity),this.engine.requestRender(e.LayerType.Main)}pushDepthSnapshot(t){let n=this.dataManager.getData();n.length!==0&&(this.depthHeatmap.push(n[n.length-1].time,t),this.depthHeatmap.isVisible()&&this.engine.requestRender(e.LayerType.Main))}clearDepthHeatmap(){this.depthHeatmap.clear(),this.engine.requestRender(e.LayerType.Main)}setPeriodLevelsVisible(t){this.periodLevels.setVisible(t),this.engine.requestRender(e.LayerType.Main)}isPeriodLevelsVisible(){return this.periodLevels.isVisible()}setPeriodLevelsPeriod(t){this.periodLevels.setPeriod(t),this.engine.requestRender(e.LayerType.Main)}setTimezoneOffset(t){this.timeAxis.setTimezoneOffset(t),this.crosshairHandler.setTimezoneOffset(t),this.crosshairTooltip.setTimezoneOffset(t),this.engine.requestRender(e.LayerType.UI)}setPivotMarkersVisible(t){this.pivotMarkers.setVisible(t),this.engine.requestRender(e.LayerType.Overlay)}isPivotMarkersVisible(){return this.pivotMarkers.isVisible()}setPivotMarkersConfig(t){(t.left!==void 0||t.right!==void 0)&&this.pivotMarkers.setStrength(t.left??5,t.right??t.left??5),t.showLabels!==void 0&&this.pivotMarkers.setShowLabels(t.showLabels),t.structureLabels!==void 0&&this.pivotMarkers.setStructureLabels(t.structureLabels),this.engine.requestRender(e.LayerType.Overlay)}setSessionShadingVisible(t){this.sessionShading.setVisible(t),this.engine.requestRender(e.LayerType.Background)}isSessionShadingVisible(){return this.sessionShading.isVisible()}setSessionShadingConfig(t){this.sessionShading.setConfig(t),this.engine.requestRender(e.LayerType.Background)}setTooltipVisible(e){e||this.crosshairTooltip.hide()}setLegend(t){this.chartLegend.setConfig(t),this.engine.requestRender(e.LayerType.Hover)}setSymbolName(t){this.chartLegend.setSymbol(t),this.engine.requestRender(e.LayerType.Hover)}setStatusText(t){this.chartLegend.setStatusText(t),this.engine.requestRender(e.LayerType.Hover)}screenshot(e){this.features.screenshot&&t.Screenshot.download(this.container,e,this.themeManager.getTheme().background)}async copyScreenshot(){if(!this.features.screenshot)return!1;try{let e=await t.Screenshot.toBlob(this.container,this.themeManager.getTheme().background),n=globalThis.ClipboardItem;return!e||!navigator.clipboard?.write||!n?!1:(await navigator.clipboard.write([new n({"image/png":e})]),!0)}catch{return!1}}screenshotDataURL(){return this.features.screenshot?t.Screenshot.toDataURL(this.container,this.themeManager.getTheme().background):null}async screenshotBlob(){return this.features.screenshot?t.Screenshot.toBlob(this.container,this.themeManager.getTheme().background):null}addAlert(e,t=`crossing`,n,r=`price`,i){if(!this.features.alerts)return null;let a=this.alertManager.addAlert(e,t,n,!1,r,i);return this.scheduleAutoSave(),a}removeAlert(e){this.alertManager.removeAlert(e),this.scheduleAutoSave()}getAlerts(){return this.alertManager.getAlerts()}clearAlerts(){this.alertManager.clearAlerts(),this.scheduleAutoSave()}saveAlerts(e){this.alertManager.saveToStorage(e)}loadAlerts(t){this.alertManager.loadFromStorage(t),this.engine.requestRender(e.LayerType.Overlay)}addSignalMarker(e){return this.signalMarkerManager.addMarker(e)}removeSignalMarker(e){this.signalMarkerManager.removeMarker(e)}getSignalMarkers(){return this.signalMarkerManager.getMarkers()}setSignalMarkers(e){this.signalMarkerManager.setMarkers(e)}clearSignalMarkers(){this.signalMarkerManager.clearMarkers()}setSignalMarkerStyle(e){this.signalMarkerManager.setStyle(e)}addTradeZone(e){return this.tradeZoneManager.addZone(e)}updateTradeZone(e,t){this.tradeZoneManager.updateZone(e,t)}removeTradeZone(e){this.tradeZoneManager.removeZone(e)}getTradeZones(){return this.tradeZoneManager.getZones()}setTradeZones(e){this.tradeZoneManager.setZones(e)}clearTradeZones(){this.tradeZoneManager.clearZones()}setTradeZoneStyle(e){this.tradeZoneManager.setStyle(e)}replayStart(e){if(!this.features.replay)return;let t=this.dataManager.getData();this.replayManager.load(t);let n=-1;this.replayBarUnsub?.(),this.replayBarUnsub=this.replayManager.on(`bar`,({bar:e,index:r})=>{let i=r+1,a=n>0&&i>n&&this.dataManager.getLength()===n,o=!(a&&!this.replaySeeking)||this.autoScrollOnNewBar&&this.viewport.isAtEnd();if(a){for(let e=n;e<i;e++)this.dataManager.appendBar(t[e]);this.indicatorEngine.recalculateFrom(this.dataManager.getData(),n)}else this.dataManager.setData(t.slice(0,i)),this.indicatorEngine.recalculateAll(this.dataManager.getData());n=i,this.crosshairHandler.setData(this.dataManager.getData()),this.displayDataCache=null,this.updateViewportAndRender(o)}),this.replayManager.play(e)}replayPause(){this.replayManager.pause()}replayResume(){this.replayManager.resume()}replayStop(){this.replayManager.stop()}replaySeek(e){this.replaySeeking=!0;try{this.replayManager.seekTo(e)}finally{this.replaySeeking=!1}}setReplaySpeed(e){this.replayManager.setSpeed(e)}getReplayState(){return this.replayManager.getState()}getReplayProgress(){return this.replayManager.getProgress()}saveState(e){if(!this.features.saveLoad)return null;let n=t.ChartStateManager.capture({getDrawings:()=>this.getDrawings(),getTheme:()=>this.getTheme(),getAlerts:()=>this.getAlerts()},{chartType:this.options.chartType}),r=t.ChartStateManager.serialize(n);return e&&t.ChartStateManager.saveToStorage(e,n),r}loadState(e){if(!this.features.saveLoad)return;let n=t.ChartStateManager.deserialize(e);if(n.chartType&&this.setChartType(n.chartType),n.drawings&&this.setDrawings(n.drawings),n.theme&&this.setTheme(n.theme),n.alerts){this.clearAlerts();for(let e of n.alerts)this.addAlert(e.price,e.condition,e.message)}}loadStateFromStorage(e){if(!this.features.saveLoad)return!1;let n=t.ChartStateManager.loadFromStorage(e);return n?(this.loadState(t.ChartStateManager.serialize(n)),!0):!1}downloadState(e){if(!this.features.saveLoad)return;let n=t.ChartStateManager.capture({getDrawings:()=>this.getDrawings(),getTheme:()=>this.getTheme(),getAlerts:()=>this.getAlerts()},{chartType:this.options.chartType});t.ChartStateManager.downloadFile(n,e)}async loadStateFromFile(){if(!this.features.saveLoad)return;let e=await t.ChartStateManager.loadFromFile();this.loadState(t.ChartStateManager.serialize(e))}setLocale(t){(0,e.setLocale)(t),this.engine.requestRender()}setNumberLocale(e){this.numberLocale=e,this.priceAxis.setLocale(e),this.crosshairHandler.setLocale(e),this.chartLegend.setLocale(e),this.crosshairTooltip.setLocale(e),this.sessionBreaks.setLocale(e),this.currentPriceLine.setLocale(e),this.updateViewportAndRender()}getNumberLocale(){return this.numberLocale}setMarket(e){if(this.marketConfig=e,e.colorScheme){let t={...this.themeManager.getTheme(),candleUp:e.colorScheme.up,candleDown:e.colorScheme.down,candleUpWick:e.colorScheme.up,candleDownWick:e.colorScheme.down,volumeUp:e.colorScheme.up.replace(`)`,`, 0.3)`).replace(`rgb(`,`rgba(`)||`${e.colorScheme.up}4D`,volumeDown:e.colorScheme.down.replace(`)`,`, 0.3)`).replace(`rgb(`,`rgba(`)||`${e.colorScheme.down}4D`};this.themeManager.setTheme(t)}e.pricePrecision!==void 0&&(this.tradingManager.setConfig({pricePrecision:e.pricePrecision}),this.alertManager.setPricePrecision(e.pricePrecision),this.streamManager?.priceLine.setPricePrecision(e.pricePrecision),this.currentPriceLine.setPricePrecision(e.pricePrecision),this.crosshairHandler.setPricePrecision(e.pricePrecision),this.chartLegend.setPricePrecision(e.pricePrecision),this.crosshairTooltip.setPricePrecision(e.pricePrecision)),this.updateViewportAndRender()}getMarket(){return this.marketConfig}setPriceLimits(t){this.marketConfig&&((0,e.computePriceLimits)(t,this.marketConfig)&&(this.marketConfig.priceLimits={...this.marketConfig.priceLimits,referencePrice:t}),this.engine.requestRender())}getFeatures(){return this.features}setFeatures(t){Object.assign(this.features,t),(t.crosshair===!1||t.crosshairTooltip===!1)&&this.crosshairTooltip.hide(),t.grid!==void 0&&this.engine.requestRender(e.LayerType.Background),t.volume!==void 0&&(this.volumeRenderer.setVisible(t.volume),this.engine.requestRender(e.LayerType.Main)),t.drawings===!1&&this.drawingManager.setActiveTool(null),t.trading===!1&&(this.tradingManager.setOrders([]),this.tradingManager.setPositions([])),t.keyboard!==void 0&&this.keyboardHandler?.setEnabled(t.keyboard),this.engine.requestRender()}resize(){let e=this.engine.dprManager.readContainerSize();if(e.width<=0||e.height<=0)return;this.containerSizeCache=e,this.containerSizeCacheTime=Date.now();let t=this.engine.dprManager.getDpr();this.engine.layerManager.resize(e,t);let n=this.viewport.isAtEnd();this.viewport.resize(e.width,e.height),this.layoutManager.resize(e.width,e.height),this.updateViewportAndRender(n),this.eventBus.emit(`resize`,e)}destroy(){this.countdownInterval&&clearInterval(this.countdownInterval),this.disableAutoSave(),this.disconnectStream(),this.disconnectExecution(),this.onWindowKeyDown&&=(window.removeEventListener(`keydown`,this.onWindowKeyDown),null),this.keyboardHandler=null,this.interactionManager.detach(),this.tradingManager.destroy(),this.animator.dispose(),this.crosshairTooltip.destroy(),this.pinnedTooltip.destroy(),this.replayManager.dispose(),this.undoRedoManager.clear(),this.engine.destroy(),this.eventBus.destroy(),this.container.innerHTML=``}createChartRenderer(e){return a(e,e=>this.pluginManager.getChartType(e))}getDisplayData(){if(this.displayDataCache)return this.displayDataCache;let e=this.dataManager.getData();if(e.length===0)return e;let t=o(this.options.chartType,e,e=>this.pluginManager.getChartType(e));return this.displayDataCache=t,t}scheduleRender(){this.renderScheduled||(this.renderScheduled=!0,requestAnimationFrame(()=>{this.renderScheduled=!1,this.applyDataToViewport(),this.fitPriceAxisWidth()&&this.applyDataToViewport(),this.syncRenderContext(),this.engine.requestRender(),this.emitViewportEvents()}))}applyDataToViewport(e=!1){let t=this.getDisplayData(),n=this.options.autoScale!==!1;this.viewport.updateData(t,n&&!e),e&&(this.viewport.scrollToEnd(),n&&this.viewport.updateData(t,!0));let r=this.viewport.getState();if(t.length>0){let e=Math.max(0,Math.min(r.visibleRange.from,t.length-1));this.viewport.setScaleBaseline(t[e]?.close)}if(n){let e=this.indicatorEngine.getOverlayPriceRange(r.visibleRange.from,Math.min(r.visibleRange.to,t.length-1));if(e){let t=r.priceRange,n=Math.min(t.min,e.min),i=Math.max(t.max,e.max);if(n<t.min||i>t.max){let e=i-n||1;this.viewport.setPriceRange(n-e*.02,i+e*.02)}}}return t}updateViewportAndRender(e=!1){this.resolvedLayoutCache=null,this.panelInfoCache=null;let t=this.getResolvedLayout();this.viewport.setChartRect(t.mainChartRect),this.applyDataToViewport(e),this.fitPriceAxisWidth()&&this.applyDataToViewport(e),this.syncRenderContext(),this.engine.requestRender(),this.emitViewportEvents()}fitPriceAxisWidth(){if(!this.features.priceAxis)return!1;let{priceRange:e}=this.viewport.getState(),t=this.themeManager.getTheme(),n=S({min:e.min,max:e.max,lastPrice:this.currentPriceLine.getPrice(),tagPrecision:this.marketConfig?.pricePrecision??null,locale:this.numberLocale,fontFamily:t.font.family,fontSizeSmall:t.font.sizeSmall,measure:(e,t)=>this.measureText(e,t)}),r=C(this.priceAxisWidth,n);return r===this.priceAxisWidth?!1:(this.priceAxisWidth=r,this.layoutManager.setPriceAxisWidth(r),this.viewport.setPriceAxisWidth(r),this.resolvedLayoutCache=null,this.panelInfoCache=null,this.viewport.setChartRect(this.getResolvedLayout().mainChartRect),!0)}measureText(e,t){this.measureCtx===void 0&&(this.measureCtx=typeof document<`u`?document.createElement(`canvas`).getContext(`2d`):null);let n=this.measureCtx;return n?(n.font=t,n.measureText(e).width):e.length*7}emitViewportEvents(){let e=this.viewport.getState(),t=Math.max(0,Math.floor(e.visibleRange.from)),n=Math.max(t,Math.ceil(e.visibleRange.to));(!this.lastEmittedRange||this.lastEmittedRange.from!==t||this.lastEmittedRange.to!==n)&&(this.lastEmittedRange={from:t,to:n},this.eventBus.emit(`visibleRangeChange`,{from:t,to:n}));let{min:r,max:i}=e.priceRange;(!this.lastEmittedPriceRange||this.lastEmittedPriceRange.min!==r||this.lastEmittedPriceRange.max!==i)&&(this.lastEmittedPriceRange={min:r,max:i},this.eventBus.emit(`priceRangeChange`,{min:r,max:i})),this.lastEmittedBarWidth!==e.barWidth&&(this.lastEmittedBarWidth=e.barWidth,this.eventBus.emit(`zoomChange`,{barWidth:e.barWidth}))}getResolvedLayout(){return this.resolvedLayoutCache||=this.layoutManager.resolve(),this.resolvedLayoutCache}cachedContainerSize(){let e=Date.now();return(!this.containerSizeCache||e-this.containerSizeCacheTime>500)&&(this.containerSizeCache=this.engine.dprManager.getContainerSize(),this.containerSizeCacheTime=e),this.containerSizeCache}buildPanelRenderInfos(){if(this.panelInfoCache)return this.panelInfoCache;let e=this.getResolvedLayout(),t=this.viewport.getState(),{from:n,to:r}=t.visibleRange,i=e.panels.map(e=>{let i=l(this.indicatorEngine.getOutput(e.config.id),n,r),a={x:e.rect.x,y:e.rect.y+20,width:e.rect.width,height:Math.max(0,e.rect.height-20)};return{instanceId:e.config.id,rect:e.rect,viewport:{...t,chartRect:a,priceRange:i}}});return this.panelInfoCache=i,i}syncRenderContext(){this.pinnedTooltip.isPinned()&&this.pinnedTooltip.reposition(this.viewport.getState(),null,null,this.themeManager.getTheme());let e=this.getResolvedLayout(),t=this.features.indicators?this.buildPanelRenderInfos():[],n=e.panels.filter(e=>e.config.position===`bottom`).reduce((e,t)=>e+t.rect.height,0),r=e.mainChartRect.y+e.mainChartRect.height+n,i=this.getDisplayData();this.engine.setRenderContext({chartRenderer:this.chartRenderer,gridRenderer:this.features.grid?this.gridRenderer:null,priceAxis:this.features.priceAxis?this.priceAxis:null,timeAxis:this.features.timeAxis?this.timeAxis:null,crosshairHandler:this.features.crosshair?this.crosshairHandler:null,indicatorEngine:this.features.indicators?this.indicatorEngine:null,drawingRenderer:this.features.drawings?this.drawingRenderer:null,tradingRenderer:this.features.trading?this.tradingRenderer:null,currentPriceLine:this.currentPriceLine,chartLegend:this.features.legend?this.chartLegend:null,volumeRenderer:this.features.volume?this.volumeRenderer:null,volumeProfile:this.volumeProfile,marketProfile:this.marketProfile,depthHeatmap:this.depthHeatmap,periodLevels:this.periodLevels,pivotMarkers:this.pivotMarkers,watermark:this.features.watermark?this.watermark:null,barCountdown:this.barCountdown,sessionBreaks:this.sessionBreaks,sessionShading:this.sessionShading,compareRenderer:this.compareRenderer,alertManager:this.features.alerts?this.alertManager:null,measureOverlay:this.measureOverlay,selectionBoxOverlay:this.selectionBoxOverlay,signalMarkerManager:this.signalMarkerManager,tradeZoneManager:this.tradeZoneManager,panels:t,priceLimits:this.buildPriceLimits(),timeAxisY:r,viewport:{...this.viewport.getState(),data:i},theme:this.themeManager.getTheme(),data:i,numberLocale:this.numberLocale,renderOverlayPlugins:(e,t)=>this.drawOverlayPlugins(e,t)})}drawOverlayPlugins(e,t){let n=T(this.pluginManager.getOverlays(),t);if(n.length===0)return;let r={viewport:this.viewport.getState(),data:this.getDisplayData(),theme:this.themeManager.getTheme()};for(let t of n)t.render(e,r)}buildPriceLimits(){if(!this.marketConfig?.priceLimits?.enabled||!this.marketConfig.priceLimits.referencePrice)return null;let t=(0,e.computePriceLimits)(this.marketConfig.priceLimits.referencePrice,this.marketConfig);return t?{...t,colors:this.marketConfig.colorScheme?{ceiling:this.marketConfig.colorScheme.ceiling,floor:this.marketConfig.colorScheme.floor,reference:this.marketConfig.colorScheme.reference}:void 0}:null}},I=[`time`,`timestamp`,`date`,`datetime`,`t`],L=[`open`,`o`],R=[`high`,`h`],z=[`low`,`l`],B=[`close`,`c`],V=[`volume`,`vol`,`v`];function H(e){let t=e.trim();return t?t[0]===`[`||t[0]===`{`?U(t):W(t):{data:[],rowCount:0,skipped:0}}function U(e){let t;try{t=JSON.parse(e)}catch(e){throw Error(`Invalid JSON: ${e.message}`)}if(!Array.isArray(t))throw Error(`Expected a JSON array of OHLCV rows`);let n=[],r=0;for(let e of t){let t=Array.isArray(e)?Y(e):J(e);t?n.push(t):r++}return Q(n,t.length,r)}function W(e){let t=e.split(/\r?\n/).filter(e=>e.trim().length>0);if(t.length===0)return{data:[],rowCount:0,skipped:0};let n=G(t[0]),r=K(t[0],n).map(e=>e.trim().toLowerCase()),i=r.some(e=>isNaN(Number(e))&&e.length>0),a=i?q(r):{time:0,open:1,high:2,low:3,close:4,volume:5};if(a.time<0||a.open<0||a.high<0||a.low<0||a.close<0)throw Error(`CSV is missing required column(s): time, open, high, low, close`);let o=[],s=0;for(let e=+!!i;e<t.length;e++){let r=K(t[e],n),i=Z(r[a.time]),c=X(r[a.open]),l=X(r[a.high]),u=X(r[a.low]),d=X(r[a.close]),f=a.volume>=0?Number(r[a.volume]):0;if(i===null||![c,l,u,d].every(Number.isFinite)){s++;continue}o.push({time:i,open:c,high:l,low:u,close:d,volume:Number.isFinite(f)?f:0})}return Q(o,t.length-+!!i,s)}function G(e){let t={",":0,";":0," ":0,"|":0};for(let n of e)n in t&&t[n]++;let n=`,`,r=0;for(let[e,i]of Object.entries(t))i>r&&(n=e,r=i);return n}function K(e,t){let n=[],r=``,i=!1;for(let a=0;a<e.length;a++){let o=e[a];o===`"`?i&&e[a+1]===`"`?(r+=`"`,a++):i=!i:o===t&&!i?(n.push(r),r=``):r+=o}return n.push(r),n}function q(e){let t=t=>e.findIndex(e=>t.includes(e));return{time:t(I),open:t(L),high:t(R),low:t(z),close:t(B),volume:t(V)}}function J(e){let t=t=>{for(let n of t){if(e[n]!==void 0)return e[n];let t=n.toUpperCase();if(e[t]!==void 0)return e[t]}},n=Z(String(t(I)??``)),r=Number(t(L)),i=Number(t(R)),a=Number(t(z)),o=Number(t(B)),s=Number(t(V)??0);return n===null||![r,i,a,o].every(Number.isFinite)?null:{time:n,open:r,high:i,low:a,close:o,volume:Number.isFinite(s)?s:0}}function Y(e){if(e.length<5)return null;let t=Z(String(e[0])),n=Number(e[1]),r=Number(e[2]),i=Number(e[3]),a=Number(e[4]),o=e.length>=6?Number(e[5]):0;return t===null||![n,r,i,a].every(Number.isFinite)?null:{time:t,open:n,high:r,low:i,close:a,volume:Number.isFinite(o)?o:0}}function X(e){return e===void 0||e.trim()===``?NaN:Number(e)}function Z(e){let t=e.trim();if(!t)return null;let n=Number(t);if(Number.isFinite(n)&&n>0)return n<0xe8d4a51000?n*1e3:n;let r=Date.parse(t);return Number.isFinite(r)?r:null}function Q(e,t,n){e.sort((e,t)=>e.time-t.time);let r=[];for(let t of e)r.length>0&&r[r.length-1].time===t.time?r[r.length-1]=t:r.push(t);return{data:r,rowCount:t,skipped:n}}var ne=class{host;overlay=null;callbacks;bound;depth=0;constructor(e,t){this.host=e,this.callbacks=t,this.bound={dragenter:e=>this.onDragEnter(e),dragover:e=>this.onDragOver(e),dragleave:e=>this.onDragLeave(e),drop:e=>this.onDrop(e)}}attach(){this.host.addEventListener(`dragenter`,this.bound.dragenter),this.host.addEventListener(`dragover`,this.bound.dragover),this.host.addEventListener(`dragleave`,this.bound.dragleave),this.host.addEventListener(`drop`,this.bound.drop)}detach(){this.host.removeEventListener(`dragenter`,this.bound.dragenter),this.host.removeEventListener(`dragover`,this.bound.dragover),this.host.removeEventListener(`dragleave`,this.bound.dragleave),this.host.removeEventListener(`drop`,this.bound.drop),this.hideOverlay()}onDragEnter(e){$(e)&&(e.preventDefault(),this.depth++,this.showOverlay())}onDragOver(e){$(e)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`))}onDragLeave(e){$(e)&&(this.depth=Math.max(0,this.depth-1),this.depth===0&&this.hideOverlay())}async onDrop(e){e.preventDefault(),this.depth=0,this.hideOverlay();let t=e.dataTransfer?.files?.[0];if(t)try{let e=H(await t.text());if(e.data.length===0)throw Error(`No valid OHLCV rows found in "${t.name}"`);this.callbacks.onData(e.data,e,t)}catch(e){this.callbacks.onError?.(e,t)}}showOverlay(){this.overlay||(this.overlay=document.createElement(`div`),Object.assign(this.overlay.style,{position:`absolute`,inset:`8px`,zIndex:`90`,pointerEvents:`none`,borderRadius:`10px`,border:`2px dashed var(--tcw-accent, #f2a93b)`,background:`rgba(79, 136, 255, 0.06)`,display:`flex`,alignItems:`center`,justifyContent:`center`,color:`var(--tcw-accent, #f2a93b)`,fontSize:`14px`,fontWeight:`600`,letterSpacing:`-0.005em`,fontFamily:`inherit`,backdropFilter:`blur(2px)`}),this.overlay.textContent=`Drop CSV or JSON to load chart data`,getComputedStyle(this.host).position===`static`&&(this.host.style.position=`relative`),this.host.appendChild(this.overlay))}hideOverlay(){this.overlay?.remove(),this.overlay=null}};function $(e){return e.dataTransfer?.types?.includes(`Files`)??!1}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return T}});
2
+ //# sourceMappingURL=DragDropImporter-BazeSQPD.cjs.map