openalgo-charts 1.0.8 → 1.0.9

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.
package/README.md CHANGED
@@ -4,11 +4,11 @@
4
4
 
5
5
  **A from-scratch, dependency-free HTML5-canvas charting engine for OpenAlgo.**
6
6
 
7
- Professional interactive financial charts, on-chart trading, and live data - in under 40 KB Brotli, with zero runtime dependencies.
7
+ Professional interactive charts, indicators, drawing tools, order flow, and on-chart trading — six lazy-loaded tiers, zero runtime dependencies, ~33 KB Brotli for the base engine.
8
8
 
9
9
  [![npm version](https://img.shields.io/npm/v/openalgo-charts.svg?color=cb3837&label=npm)](https://www.npmjs.com/package/openalgo-charts)
10
10
  [![license](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](./LICENSE)
11
- [![bundle](https://img.shields.io/badge/brotli-~33%20KB%20base%20%C2%B7%20~58%20KB%20full-brightgreen.svg)](./ARCHITECTURE.md)
11
+ [![bundle](https://img.shields.io/badge/brotli-33%20KB%20base%20%C2%B7%2058%20KB%20all%20tiers-brightgreen.svg)](#size-budget)
12
12
  [![tests](https://img.shields.io/badge/tests-468%20passing-brightgreen.svg)](#develop)
13
13
  [![dependencies](https://img.shields.io/badge/runtime%20deps-0-brightgreen.svg)](#principles)
14
14
 
@@ -30,7 +30,7 @@ Right-click the chart to place market / limit / stop orders, drag the order and
30
30
 
31
31
  ## Examples gallery
32
32
 
33
- Every chart in the [live gallery](https://marketcalls.github.io/openalgo-charts/examples) is the real library running in your browser - switch tabs, hover the crosshair, drag the order lines. What you see is the code that ran.
33
+ Every chart in the [live gallery](https://marketcalls.github.io/openalgo-charts/examples) is the real library running in your browser - switch tabs, hover the crosshair, drag the order lines, place a drawing. What you see is the code that ran.
34
34
 
35
35
  <p align="center">
36
36
  <img src="docs/demo1.png" alt="Chart-type switcher, custom themes, data tooltips, and event markers" width="49%" />
@@ -54,27 +54,81 @@ const chart = createChart(document.getElementById('chart'));
54
54
  chart.addSeries('candlestick').setData(generateBars(1700000000, 200, 3600));
55
55
  ```
56
56
 
57
- Loadable tiers - lazy-load only what you use:
57
+ ## Tiers
58
58
 
59
- | Import | Contents |
60
- |---|---|
61
- | `openalgo-charts` | Base engine + all standard chart types, indicators, primitives, trading overlay |
62
- | `openalgo-charts/trade` | On-chart order/position/bracket tools + DOM ladder |
63
- | `openalgo-charts/transform` | Renko, Range bars, Point &amp; Figure, Kagi, Line Break, Heikin Ashi |
64
- | `openalgo-charts/profile` | Volume Profile, Market Profile (TPO), Footprint, Order flow |
65
- | `openalgo-charts/indicators` | 18 built-in indicators + the Tier-2 (external-data) contract |
66
- | `openalgo-charts/draw` | 18 drawing tools + a headless drawing controller |
59
+ Import only what you use. Each tier is a separate bundle that registers into the base engine's registries, so the cost of a feature you don't load is zero.
60
+
61
+ | Import | Contents | Brotli |
62
+ |---|---|---|
63
+ | `openalgo-charts` | Engine, 13 chart types, panes &amp; scales, primitives, registries, chart state, trading overlay, OpenAlgo feeds | 32.7 KB |
64
+ | `openalgo-charts/indicators` | 18 built-in indicators + the Tier-2 (external-data) contract | 4.5 KB |
65
+ | `openalgo-charts/draw` | 18 drawing tools + a headless drawing controller | 6.3 KB |
66
+ | `openalgo-charts/transform` | Heikin Ashi, Renko, Range bars, Line Break, Point &amp; Figure, Kagi | 2.7 KB |
67
+ | `openalgo-charts/profile` | Volume Profile, Market Profile (TPO), Footprint, order flow | 5.5 KB |
68
+ | `openalgo-charts/trade` | Order / position / bracket tools + DOM ladder | 6.6 KB |
69
+
70
+ Everything together is **58 KB Brotli**.
67
71
 
68
72
  ## What's built
69
73
 
70
- - **Chart types:** candles, hollow/volume candles, bars, high-low, line, line+markers, step, area, HLC-area, baseline, columns, histogram.
71
- - **Transforms:** Heikin Ashi, Renko, Range bars, Line Break, Point &amp; Figure, Kagi.
72
- - **Profiles &amp; order flow:** Volume Profile, Market Profile (TPO), Footprint, cumulative delta.
73
- - **Indicators:** 18 built-ins via `chart.addIndicator(...)` - SMA, EMA, WMA, VWAP, Bollinger, Supertrend, Parabolic SAR, Ichimoku, RSI, MACD, Stochastic, ADX/DMI, CCI, MFI, ATR, Volume, OBV, A/D - plus a registry for your own, and a Tier-2 contract for indicators with external data (open interest, CVD).
74
- - **Trading:** order/position/bracket lines, live P&amp;L, one-click + drag-to-modify, OCO, validation, analyzer mode, and a depth-of-market ladder (5 to 200 levels).
75
- - **Drawing tools:** 18 tools (trend/ray/fib/channel/position/measure/text/...) with a headless controller - placement, selection, per-anchor drag, magnet snap, undo/redo, and persistence through the chart state.
76
- - **Panes:** draggable dividers, move/maximize/remove, and TradingView-style pane legends with inline show-hide / settings / delete controls.
77
- - **Live + historical** OpenAlgo data (REST history + WebSocket ticks with auto-reconnect), a unified `chart.on(...)` event bus, markers/signals, earnings/dividend/expiry event markers, and custom price/time formatters.
74
+ ### Chart types &amp; transforms
75
+ Candles, hollow and volume candles, OHLC bars, high-low, line, line+markers, step, area, HLC-area, baseline, columns, histogram — plus Heikin Ashi, Renko, Range bars, Line Break, **Point &amp; Figure** (fixed / percent / ATR box sizing, high-low or close construction), and Kagi.
76
+
77
+ ### Indicators
78
+
79
+ ```ts
80
+ import 'openalgo-charts/indicators';
81
+
82
+ chart.addIndicator('bollinger'); // overlays the price pane
83
+ const macd = chart.addIndicator('macd', { fastPeriod: 8 }); // gets its own pane
84
+ macd.setSettings({ 'macd:width': 2, 'macd:lineStyle': 'dashed' });
85
+ ```
86
+
87
+ 18 built-ins: SMA, EMA, WMA, VWAP, Bollinger Bands, Supertrend, Parabolic SAR, Ichimoku Cloud, RSI, MACD, Stochastic, ADX/DMI, CCI, MFI, ATR, Volume, OBV, A/D.
88
+
89
+ The chart owns the whole lifecycle — series, pane placement, reference levels, fixed ranges (RSI 0..100), recompute on data change, teardown. Every plot gets colour, opacity, thickness, and line style for free, generated from the descriptor. Write your own with `registerIndicator`, or use the **Tier-2 contract** for indicators whose data isn't derived from OHLCV (open interest, CVD, any external feed).
90
+
91
+ ### Drawing tools
92
+
93
+ ```ts
94
+ import { DrawingController } from 'openalgo-charts/draw';
95
+
96
+ const draw = new DrawingController(chart, { magnet: true });
97
+ draw.setTool('trend-line'); // the next two clicks place it
98
+ ```
99
+
100
+ 18 tools: trend line, ray, extended line, arrow, horizontal line/ray, vertical line, cross line, rectangle, ellipse, parallel channel, fib retracement/extension, long/short position (with R:R and risk-based sizing), measure, text, path.
101
+
102
+ Headless by design — no toolbar, no dialogs. Placement with live preview, selection, whole-shape and per-anchor dragging, magnet snap to O/H/L/C, undo/redo (a drag is one step), and persistence. Anchors are `{ time, price }`, never pixels, so they survive zoom and resolve inside collapsed session gaps and past the last bar.
103
+
104
+ ### Panes &amp; legends
105
+ Draggable pane dividers, move / maximize / remove, and TradingView-style pane legends showing one reading per plot in that plot's own colour, with inline show-hide / settings / move / delete controls revealed on hover.
106
+
107
+ ### Trading
108
+ Order, position, and bracket lines with live P&amp;L, one-click and drag-to-modify, OCO, validation, an order state machine, analyzer (sandbox) mode, and a depth-of-market ladder (5 to 200 levels).
109
+
110
+ ### Profiles &amp; order flow
111
+ Volume Profile, Market Profile (TPO), Footprint, and cumulative delta.
112
+
113
+ ### State
114
+ `chart.getState()` / `chart.restoreState()` capture the viewport, grid, panes, price scales, indicator instances, and drawings as one JSON payload — saved layouts and templates with no extra storage plumbing.
115
+
116
+ ### Data
117
+ OpenAlgo REST history + WebSocket ticks with auto-reconnect and resubscribe, live candle aggregation, tick/volume bars, a unified `chart.on(...)` event bus, markers and signals, earnings/dividend/expiry event markers, and custom price/time formatters.
118
+
119
+ ## Size budget
120
+
121
+ Enforced in CI by [`size-limit`](./.size-limit.json) — nothing is excluded, because there are no runtime dependencies to exclude.
122
+
123
+ | Bundle | Limit | Actual |
124
+ |---|---|---|
125
+ | Base engine | 34 KB | 32.72 KB |
126
+ | Base + trade | 40.5 KB | 39.31 KB |
127
+ | Indicators tier | 9 KB | 4.47 KB |
128
+ | Draw tier | 14 KB | 6.25 KB |
129
+ | Transform tier | 5 KB | 2.66 KB |
130
+ | Profile tier | 8 KB | 5.53 KB |
131
+ | **Everything** | **72 KB** | **58.22 KB** |
78
132
 
79
133
  ## Documentation
80
134
 
@@ -89,6 +143,16 @@ npm run build # build the library (dist/) the live
89
143
  cd website && npm install && npm run dev # http://localhost:3000/openalgo-charts
90
144
  ```
91
145
 
146
+ ## Examples
147
+
148
+ Runnable demos in [`examples/`](./examples), including a full **yfinance terminal** ([`examples/yfinance`](./examples/yfinance)) with a TradingView-style shell: symbol search, interval pills, chart-type picker, indicator menu, a vertical drawing rail, a floating properties bar, generated indicator settings, and layout persistence.
149
+
150
+ ```bash
151
+ npm run build
152
+ cd examples/yfinance && pip install -r requirements.txt && python server.py
153
+ # → http://127.0.0.1:8000/examples/yfinance/index.html
154
+ ```
155
+
92
156
  ## Develop
93
157
 
94
158
  ```bash
@@ -103,14 +167,25 @@ npm run verify # typecheck + test + build + size
103
167
 
104
168
  ## Principles
105
169
 
106
- - **Single canvas pipeline** (no SVG, no DOM-per-bar) - small and fast.
107
- - **Gapless time axis by default** - weekends, holidays, and session breaks collapse.
108
- - **Zero runtime dependencies** - nothing is excluded from the size budget.
170
+ - **Single canvas pipeline** (no SVG, no DOM-per-bar) — small and fast.
171
+ - **Gapless time axis by default** — weekends, holidays, and session breaks collapse.
172
+ - **Registries, not switches** — chart types, indicators, and drawing tools are all descriptors. Adding one is a registration, never a core change.
173
+ - **Zero runtime dependencies** — nothing is excluded from the size budget.
109
174
  - **Apache-2.0**, original code.
110
175
 
111
176
  ## Status &amp; limitations
112
177
 
113
- Version **1.0.8 (published)** - all engine build phases are implemented with 468 unit tests, base engine ~33 KB Brotli, full package ~58 KB Brotli (all six tiers). The OpenAlgo WS/trade adapters ship and auto-reconnect, but their exact message/endpoint schemas should be verified against your running OpenAlgo build. An optional DOM chrome package (toolbar, dialogs, command palette, objects panel) is the next planned piece; the Footprint/order-flow renderer still needs its visual pass, and overlay and `indexed-to-100` price scales are unimplemented - see [`ARCHITECTURE.md`](./ARCHITECTURE.md) for the honest deferred list.
178
+ Version **1.0.8 (published)**. All engine build phases are implemented with 468 unit tests across 47 files.
179
+
180
+ Known gaps, stated plainly:
181
+
182
+ - The **Footprint / order-flow renderer** works but has not had its visual pass — hardcoded colours (not theme-aware), a single display mode, no `setOptions`, and `stackedImbalances` is computed but not drawn.
183
+ - **Footprint and order flow need trade-by-trade data classified bid/ask.** OpenAlgo does not store this by default, so it is live-session-only unless you add a tick recorder. See [`ARCHITECTURE.md`](./ARCHITECTURE.md) §6A.
184
+ - The OpenAlgo **WS/trade adapter wire schemas** ship with injectable transports and offline tests, but the exact field names should be verified against your running OpenAlgo build.
185
+ - Price-scale **`percentage`** and **`indexed-to-100`** modes, and overlay scales on a shared axis, are not implemented.
186
+ - An optional **DOM chrome package** (toolbar, dialogs, command palette, objects panel) is the next planned piece; today that UI lives in the examples.
187
+
188
+ See [`ARCHITECTURE.md`](./ARCHITECTURE.md) §13a for the full deferred list.
114
189
 
115
190
  ## License
116
191
 
@@ -403,6 +403,19 @@ interface DrawingStyle {
403
403
  wrapWidth?: number;
404
404
  /** Horizontal alignment within the box. Defaults to 'left'. */
405
405
  textAlign?: 'left' | 'center' | 'right';
406
+ /** Vertical placement within the box. Defaults to 'top'. */
407
+ textVAlign?: 'top' | 'middle' | 'bottom';
408
+ /**
409
+ * Where a shape's label sits relative to the shape: `inside` the outline, or
410
+ * `outside` just above it. Shapes only — the text tool *is* its own box.
411
+ */
412
+ textPosition?: 'inside' | 'outside';
413
+ /**
414
+ * Label colour. Shapes need this separate from `color`, which is the outline —
415
+ * a purple rectangle with white text is one shape with two colours.
416
+ * Falls back to `color`.
417
+ */
418
+ fontColor?: string;
406
419
  /** Position tools: capital base and risk per trade, for the size readout. */
407
420
  accountSize?: number;
408
421
  risk?: number;
@@ -1565,6 +1578,8 @@ declare class Chart {
1565
1578
  private _clickCb;
1566
1579
  private _crosshairCb;
1567
1580
  private _pointerMoved;
1581
+ /** While true, pointer gestures place anchors instead of panning. */
1582
+ private _placementMode;
1568
1583
  private _downPane;
1569
1584
  private _downX;
1570
1585
  private _downLocalY;
@@ -1755,6 +1770,14 @@ declare class Chart {
1755
1770
  * at runtime. Pass undefined to restore the IST default.
1756
1771
  */
1757
1772
  setTimeFormatter(fn: ((utcSeconds: number, tickMark?: TickMarkType) => string) | undefined): void;
1773
+ /**
1774
+ * Turn pointer gestures into anchor placement instead of panning. A host arms
1775
+ * this while a drawing tool is active: a press no longer scrolls the chart, and
1776
+ * a press-drag-release is reported as two `click` events (press point, then
1777
+ * release point, the latter tagged `viaDrag`) so a two-point shape can be drawn
1778
+ * in one gesture. `DrawingController` drives this for you.
1779
+ */
1780
+ setPlacementMode(active: boolean): void;
1758
1781
  /** Swap the palette at runtime (dark/light toggle) without recreating the chart. */
1759
1782
  setTheme(theme: ChartTheme): void;
1760
1783
  /**
@@ -1971,6 +1994,11 @@ declare class DrawingController {
1971
1994
  constructor(chart: Chart, options?: DrawingControllerOptions);
1972
1995
  /** Arm a tool for placement, or pass null to return to the cursor. */
1973
1996
  setTool(toolId: string | null): void;
1997
+ /**
1998
+ * Ask the chart to stop panning and report gestures as anchor placement.
1999
+ * Guarded so a base bundle predating `setPlacementMode` still loads the tier.
2000
+ */
2001
+ private _setPlacementMode;
1974
2002
  activeTool(): string | null;
1975
2003
  setOptions(patch: DrawingControllerOptions): void;
1976
2004
  /** Every drawing, in creation order. */
package/dist/index.d.ts CHANGED
@@ -1704,6 +1704,8 @@ declare class Chart {
1704
1704
  private _clickCb;
1705
1705
  private _crosshairCb;
1706
1706
  private _pointerMoved;
1707
+ /** While true, pointer gestures place anchors instead of panning. */
1708
+ private _placementMode;
1707
1709
  private _downPane;
1708
1710
  private _downX;
1709
1711
  private _downLocalY;
@@ -1894,6 +1896,14 @@ declare class Chart {
1894
1896
  * at runtime. Pass undefined to restore the IST default.
1895
1897
  */
1896
1898
  setTimeFormatter(fn: ((utcSeconds: number, tickMark?: TickMarkType) => string) | undefined): void;
1899
+ /**
1900
+ * Turn pointer gestures into anchor placement instead of panning. A host arms
1901
+ * this while a drawing tool is active: a press no longer scrolls the chart, and
1902
+ * a press-drag-release is reported as two `click` events (press point, then
1903
+ * release point, the latter tagged `viaDrag`) so a two-point shape can be drawn
1904
+ * in one gesture. `DrawingController` drives this for you.
1905
+ */
1906
+ setPlacementMode(active: boolean): void;
1897
1907
  /** Swap the palette at runtime (dark/light toggle) without recreating the chart. */
1898
1908
  setTheme(theme: ChartTheme): void;
1899
1909
  /**
@@ -1,2 +1,2 @@
1
- function t(t,e,i,n){const s=n.x-i.x,r=n.y-i.y,o=s*s+r*r;if(0===o)return Math.hypot(t-i.x,e-i.y);let l=((t-i.x)*s+(e-i.y)*r)/o;return l=l<0?0:l>1?1:l,Math.hypot(t-(i.x+l*s),e-(i.y+l*r))}function e(t,e,i,n){const s=n.x-i.x,r=n.y-i.y,o=Math.hypot(s,r);return 0===o?Math.hypot(t-i.x,e-i.y):Math.abs(r*(t-i.x)-s*(e-i.y))/o}function i(t,e){return Math.abs(t-e)}function n(t,e){return Math.abs(t-e)}function s(e,i,n){let s=1/0;for(let r=1;r<n.length;r++){const o=t(e,i,n[r-1],n[r]);o<s&&(s=o)}return s}function r(t,e){return{x0:Math.min(t.x,e.x),y0:Math.min(t.y,e.y),x1:Math.max(t.x,e.x),y1:Math.max(t.y,e.y)}}function o(e,i,n,s,o){const l=r(n,s);if(e>=l.x0&&e<=l.x1&&i>=l.y0&&i<=l.y1&&o)return 0;const a=[{x:l.x0,y:l.y0},{x:l.x1,y:l.y0},{x:l.x1,y:l.y1},{x:l.x0,y:l.y1}];let c=1/0;for(let n=0;n<4;n++){const s=t(e,i,a[n],a[(n+1)%4]);s<c&&(c=s)}return c}function l(t,e,i,n,s){const o=r(i,n),l=(o.x0+o.x1)/2,a=(o.y0+o.y1)/2,c=Math.max(1e-6,(o.x1-o.x0)/2),h=Math.max(1e-6,(o.y1-o.y0)/2),d=(t-l)/c,p=(e-a)/h,u=Math.hypot(d,p);return s&&u<=1?0:Math.abs(u-1)*Math.min(c,h)}function a(t,e,i,n,s){const r=e.x-t.x;if(0===r)return[t,e];const o=(e.y-t.y)/r;return[n?{x:0,y:t.y+(0-t.x)*o}:t,s?{x:i,y:t.y+(i-t.x)*o}:e]}const c=new Map;function h(t){c.set(t.id,t)}function d(t){const e=c.get(t);if(void 0===e)throw new Error(`openalgo-charts: unknown drawing tool "${t}"`);return e}function p(t){return c.has(t)}function u(){return Array.from(c.values())}function x(t){const{ctx:e,rc:i,style:n}=t,s=i.dpr;e.strokeStyle=n.color,e.lineWidth=Math.max(1,Math.round(n.lineWidth*s)),e.lineJoin="round",e.lineCap="round",e.setLineDash("dashed"===n.lineStyle?[6*s,4*s]:"dotted"===n.lineStyle?[1*s,3*s]:[])}function y(t){return t.style.fillColor??t.style.color}function f(t,e){if(!0!==t.style.fill)return;const{ctx:i}=t;i.save(),i.globalAlpha=t.style.fillOpacity??.12,i.fillStyle=y(t),e(),i.restore()}function g(t,e,i,n,s){const{ctx:r,rc:o,style:l}=t,a=(l.fontSize??11)*o.dpr;r.save(),r.setLineDash([]),r.font=`${a}px ui-sans-serif, system-ui, sans-serif`,r.textBaseline="middle",r.textAlign="left";const c=r.measureText(e).width;r.globalAlpha=.85,r.fillStyle=o.theme.background,r.fillRect(i-2*o.dpr,n-.75*a,c+4*o.dpr,1.5*a),r.globalAlpha=1,r.fillStyle=s??l.color,r.fillText(e,i,n),r.restore()}const _=[0,.236,.382,.5,.618,.786,1];function m(i,n,s,r){return{id:i,name:n,points:2,defaultStyle:{extendLeft:s,extendRight:r},draw:t=>{const[e,i]=a(t.pts[0],t.pts[1],t.rc.plotWidth*t.rc.dpr,t.style.extendLeft??s,t.style.extendRight??r);x(t),t.ctx.beginPath(),t.ctx.moveTo(e.x,e.y),t.ctx.lineTo(i.x,i.y),t.ctx.stroke(),t.ctx.setLineDash([])},distance:(i,n,o)=>{const l=o.drawing.style.extendLeft??s,c=o.drawing.style.extendRight??r;if(l&&c)return e(i,n,o.pts[0],o.pts[1]);const[h,d]=a(o.pts[0],o.pts[1],o.rc.plotWidth,l,c);return t(i,n,h,d)}}}const w=m("trend-line","Trend Line",!1,!1),b=m("ray","Ray",!1,!0),v=m("extended-line","Extended Line",!0,!0),S={id:"arrow",name:"Arrow",points:2,draw:t=>{const[e,i]=t.pts;x(t),t.ctx.beginPath(),t.ctx.moveTo(e.x,e.y),t.ctx.lineTo(i.x,i.y),t.ctx.stroke();const n=Math.max(8,5*t.style.lineWidth)*t.rc.dpr,s=Math.atan2(i.y-e.y,i.x-e.x);t.ctx.beginPath(),t.ctx.moveTo(i.x,i.y),t.ctx.lineTo(i.x-n*Math.cos(s-.4),i.y-n*Math.sin(s-.4)),t.ctx.lineTo(i.x-n*Math.cos(s+.4),i.y-n*Math.sin(s+.4)),t.ctx.closePath(),t.ctx.fillStyle=t.style.color,t.ctx.fill(),t.ctx.setLineDash([])},distance:(e,i,n)=>t(e,i,n.pts[0],n.pts[1])},M={id:"horizontal-line",name:"Horizontal Line",points:1,defaultStyle:{showLabels:!0},draw:t=>{const e=Math.round(t.pts[0].y)+.5;x(t),t.ctx.beginPath(),t.ctx.moveTo(0,e),t.ctx.lineTo(t.rc.plotWidth*t.rc.dpr,e),t.ctx.stroke(),t.ctx.setLineDash([]),!1!==t.style.showLabels&&g(t,t.formatPrice(t.drawing.points[0].price),4*t.rc.dpr,e-8*t.rc.dpr)},distance:(t,e,n)=>i(e,n.pts[0].y)},P={id:"horizontal-ray",name:"Horizontal Ray",points:1,defaultStyle:{showLabels:!0},draw:t=>{const e=Math.round(t.pts[0].y)+.5;x(t),t.ctx.beginPath(),t.ctx.moveTo(t.pts[0].x,e),t.ctx.lineTo(t.rc.plotWidth*t.rc.dpr,e),t.ctx.stroke(),t.ctx.setLineDash([]),!1!==t.style.showLabels&&g(t,t.formatPrice(t.drawing.points[0].price),t.pts[0].x+4*t.rc.dpr,e-8*t.rc.dpr)},distance:(t,e,n)=>t<n.pts[0].x?null:i(e,n.pts[0].y)},T={id:"vertical-line",name:"Vertical Line",points:1,draw:t=>{const e=Math.round(t.pts[0].x)+.5;x(t),t.ctx.beginPath(),t.ctx.moveTo(e,0),t.ctx.lineTo(e,t.rc.plotHeight*t.rc.dpr),t.ctx.stroke(),t.ctx.setLineDash([])},distance:(t,e,i)=>n(t,i.pts[0].x)},L={id:"cross-line",name:"Cross Line",points:1,draw:t=>{const e=Math.round(t.pts[0].x)+.5,i=Math.round(t.pts[0].y)+.5;x(t),t.ctx.beginPath(),t.ctx.moveTo(e,0),t.ctx.lineTo(e,t.rc.plotHeight*t.rc.dpr),t.ctx.moveTo(0,i),t.ctx.lineTo(t.rc.plotWidth*t.rc.dpr,i),t.ctx.stroke(),t.ctx.setLineDash([])},distance:(t,e,s)=>Math.min(n(t,s.pts[0].x),i(e,s.pts[0].y))},k={id:"rectangle",name:"Rectangle",points:2,defaultStyle:{fill:!0},draw:t=>{const e=r(t.pts[0],t.pts[1]);f(t,()=>t.ctx.fillRect(e.x0,e.y0,e.x1-e.x0,e.y1-e.y0)),x(t),t.ctx.strokeRect(e.x0,e.y0,e.x1-e.x0,e.y1-e.y0),t.ctx.setLineDash([])},distance:(t,e,i)=>o(t,e,i.pts[0],i.pts[1],!0===i.drawing.style.fill)},O={id:"ellipse",name:"Ellipse",points:2,defaultStyle:{fill:!0},draw:t=>{const e=r(t.pts[0],t.pts[1]),i=(e.x0+e.x1)/2,n=(e.y0+e.y1)/2,s=Math.max(1,(e.x1-e.x0)/2),o=Math.max(1,(e.y1-e.y0)/2),l=()=>{t.ctx.beginPath(),t.ctx.ellipse(i,n,s,o,0,0,2*Math.PI)};f(t,()=>{l(),t.ctx.fill()}),x(t),l(),t.ctx.stroke(),t.ctx.setLineDash([])},distance:(t,e,i)=>l(t,e,i.pts[0],i.pts[1],!0===i.drawing.style.fill)},D={id:"parallel-channel",name:"Parallel Channel",points:3,defaultStyle:{fill:!0},draw:t=>{const[e,i,n]=t.pts,s=n.y-(e.y+.5*(i.y-e.y)),r={x:e.x,y:e.y+s},o={x:i.x,y:i.y+s};f(t,()=>{t.ctx.beginPath(),t.ctx.moveTo(e.x,e.y),t.ctx.lineTo(i.x,i.y),t.ctx.lineTo(o.x,o.y),t.ctx.lineTo(r.x,r.y),t.ctx.closePath(),t.ctx.fill()}),x(t),t.ctx.beginPath(),t.ctx.moveTo(e.x,e.y),t.ctx.lineTo(i.x,i.y),t.ctx.moveTo(r.x,r.y),t.ctx.lineTo(o.x,o.y),t.ctx.stroke(),t.ctx.setLineDash([])},distance:(e,i,n)=>{const[s,r,o]=n.pts,l=o.y-(s.y+.5*(r.y-s.y)),a=t(e,i,s,r),c=t(e,i,{x:s.x,y:s.y+l},{x:r.x,y:r.y+l});return Math.min(a,c)}};function R(t,e,i){return{id:t,name:e,points:i,defaultStyle:{showLabels:!0,levels:[..._],fill:!0,fillOpacity:.06},draw:t=>{const e=t.style.levels??_,n=t.drawing.points,s=2===i?n[0].price:n[2].price,r=n[1].price-n[0].price,o=Math.min(t.pts[0].x,t.pts[i-1].x),l=Math.max(t.pts[0].x,t.pts[i-1].x),a=!0===t.style.extendRight?t.rc.plotWidth*t.rc.dpr:l;x(t);let c=null;for(const i of e){const e=s+r*i,n=Math.round(t.rc.priceScale.priceToY(e)*t.rc.dpr)+.5;!0===t.style.fill&&null!==c&&(t.ctx.save(),t.ctx.globalAlpha=t.style.fillOpacity??.06,t.ctx.fillStyle=y(t),t.ctx.fillRect(o,Math.min(c,n),a-o,Math.abs(n-c)),t.ctx.restore()),c=n,t.ctx.beginPath(),t.ctx.moveTo(o,n),t.ctx.lineTo(a,n),t.ctx.stroke(),!1!==t.style.showLabels&&g(t,`${(100*i).toFixed(1)}% ${t.formatPrice(e)}`,o+4*t.rc.dpr,n-8*t.rc.dpr)}t.ctx.setLineDash([])},distance:(t,e,n)=>{const s=n.drawing.style.levels??_,r=n.drawing.points,o=2===i?r[0].price:r[2].price,l=r[1].price-r[0].price,a=Math.min(n.pts[0].x,n.pts[i-1].x),c=!0===n.drawing.style.extendRight?n.rc.plotWidth:Math.max(n.pts[0].x,n.pts[i-1].x);if(t<a-4||t>c+4)return null;let h=1/0;for(const t of s){const i=Math.abs(e-n.rc.priceScale.priceToY(o+l*t));i<h&&(h=i)}return h}}}const W=R("fib-retracement","Fib Retracement",2),$=R("fib-extension","Fib Extension",3),I={id:"measure",name:"Measure",points:2,defaultStyle:{fill:!0,showLabels:!0,fillOpacity:.1},draw:t=>{const e=r(t.pts[0],t.pts[1]),i=t.drawing.points,n=i[1].price-i[0].price,s=0!==i[0].price?n/i[0].price*100:0,o=n>=0,l=o?"#26a69a":"#ef5350";t.ctx.save(),t.ctx.globalAlpha=t.style.fillOpacity??.1,t.ctx.fillStyle=l,t.ctx.fillRect(e.x0,e.y0,e.x1-e.x0,e.y1-e.y0),t.ctx.restore(),x(t),t.ctx.strokeStyle=l,t.ctx.strokeRect(e.x0,e.y0,e.x1-e.x0,e.y1-e.y0),t.ctx.setLineDash([]);const a=t.rc.dataLayer.timeToIndexFloat(i[0].time),c=t.rc.dataLayer.timeToIndexFloat(i[1].time),h=Math.abs(Math.round(c-a)),d=o?"+":"";g(t,`${d}${t.formatPrice(n)} (${d}${s.toFixed(2)}%) ${h} bars`,e.x0+4*t.rc.dpr,e.y0-10*t.rc.dpr,l)},distance:(t,e,i)=>o(t,e,i.pts[0],i.pts[1],!0)};function j(t,e,i){return{id:t,name:e,points:3,defaultStyle:{showLabels:!0,fillOpacity:.13,accountSize:1e5,risk:1},draw:t=>{const[e,n,s]=t.drawing.points,r=t.rc.dpr,o=Math.min(t.pts[0].x,t.pts[1].x,t.pts[2].x),l=Math.max(t.pts[0].x,t.pts[1].x,t.pts[2].x),a=t.rc.priceScale.priceToY(e.price)*r,c=t.rc.priceScale.priceToY(n.price)*r,h=t.rc.priceScale.priceToY(s.price)*r,d=(e,i,n)=>{t.ctx.save(),t.ctx.globalAlpha=t.style.fillOpacity??.13,t.ctx.fillStyle=n,t.ctx.fillRect(o,Math.min(e,i),l-o,Math.abs(i-e)),t.ctx.restore()};d(a,c,"#26a69a"),d(a,h,"#ef5350"),x(t);for(const e of[a,c,h]){const i=Math.round(e)+.5;t.ctx.beginPath(),t.ctx.moveTo(o,i),t.ctx.lineTo(l,i),t.ctx.stroke()}if(t.ctx.setLineDash([]),!1===t.style.showLabels)return;const p=Math.abs(e.price-s.price),u=Math.abs(n.price-e.price),y=p>0?u/p:0,f=t.style.accountSize??0,_=t.style.risk??0,m=p>0&&f>0?Math.floor(f*_/100/p):0;g(t,`${i?"LONG":"SHORT"} R:R ${y.toFixed(2)}${m>0?` qty ${m}`:""}`,o+4*r,a-10*r)},distance:(t,e,i)=>{const n=Math.min(i.pts[0].x,i.pts[1].x,i.pts[2].x),s=Math.max(i.pts[0].x,i.pts[1].x,i.pts[2].x);if(t<n-4||t>s+4)return null;const r=i.drawing.points.map(t=>i.rc.priceScale.priceToY(t.price)),o=Math.min(...r),l=Math.max(...r);return e>=o&&e<=l?0:Math.min(Math.abs(e-o),Math.abs(e-l))}}}const A=j("long-position","Long Position",!0),F=j("short-position","Short Position",!1);function C(t,e){const i="bold"===t.fontWeight?"700 ":"";return`${"italic"===t.fontStyle?"italic ":""}${i}${e}px ${t.fontFamily??"ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif"}`}function N(t,e,i){const n=(e.fontSize??13)*i;t.font=C(e,n);const s=function(t,e,i){const n=(e.text??"").split("\n");if(!0!==e.wrap)return n;const s=[];for(const e of n){const n=e.split(/\s+/).filter(t=>""!==t);if(0===n.length){s.push("");continue}let r=n[0];for(let e=1;e<n.length;e++){const o=`${r} ${n[e]}`;t.measureText(o).width>i?(s.push(r),r=n[e]):r=o}s.push(r)}return s}(t,e,(e.wrapWidth??220)*i);let r=0;for(const e of s)r=Math.max(r,t.measureText(e).width);const o=1.35*n;return{lines:s,width:r+10*i,height:s.length*o+10*i,lineHeight:o}}const z={id:"text",name:"Text",points:1,defaultStyle:{text:"Text",fontSize:14,fontWeight:"normal",fontStyle:"normal",background:!1,backgroundOpacity:1,border:!1,wrap:!1,wrapWidth:220,textAlign:"left"},draw:t=>{const{ctx:e,rc:i,style:n}=t,s=i.dpr,r=N(e,n,s),o=t.pts[0].x,l=t.pts[0].y;e.save(),e.setLineDash([]),!0===n.background&&(e.globalAlpha=n.backgroundOpacity??1,e.fillStyle=n.backgroundColor??i.theme.background,e.beginPath(),e.roundRect(o,l,r.width,r.height,4*s),e.fill(),e.globalAlpha=1),!0===n.border&&(e.strokeStyle=n.borderColor??n.color,e.lineWidth=Math.max(1,n.lineWidth*s),e.beginPath(),e.roundRect(o,l,r.width,r.height,4*s),e.stroke()),e.font=C(n,(n.fontSize??13)*s),e.fillStyle=n.color,e.textBaseline="top";const a=n.textAlign??"left";e.textAlign=a;const c="center"===a?o+r.width/2:"right"===a?o+r.width-5*s:o+5*s;let h=l+5*s;for(const t of r.lines)e.fillText(t,c,h),h+=r.lineHeight;e.restore()},distance:(t,e,i)=>{const n=i.drawing.style,s=n.fontSize??13,r=i.pts[0],o=function(){if(void 0!==U)return U;try{U="undefined"==typeof document?null:document.createElement("canvas").getContext("2d")}catch{U=null}return U}(),l=null===o?{width:(n.text??"").length*s*.6+10,height:1.35*s+10}:N(o,n,1);return t>=r.x-3&&t<=r.x+l.width+3&&e>=r.y-3&&e<=r.y+l.height+3?0:null}};let U;const H={id:"path",name:"Path",points:0,draw:t=>{if(!(t.pts.length<2)){x(t),t.ctx.beginPath(),t.ctx.moveTo(t.pts[0].x,t.pts[0].y);for(let e=1;e<t.pts.length;e++)t.ctx.lineTo(t.pts[e].x,t.pts[e].y);t.ctx.stroke(),t.ctx.setLineDash([])}},distance:(t,e,i)=>i.pts.length<2?null:s(t,e,i.pts)},J=[w,b,v,S,M,P,T,L,k,O,D,W,$,A,F,I,z,H];let E=!1;function Y(){if(!E){E=!0;for(const t of J)h(t)}}class B{constructor(){Object.defineProperty(this,"_drawings",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_host",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_selected",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_preview",{enumerable:!0,configurable:!0,writable:!0,value:null})}attached(t){this._host=t}detached(){this._host=null}zOrder(){return"top"}autoscaleInfo(){return null}setDrawings(t){this._drawings=t.slice(),this._host?.requestUpdate()}setSelected(t){t!==this._selected&&(this._selected=t,this._host?.requestUpdate())}setPreview(t){this._preview=t,this._host?.requestUpdate()}_project(t,e,i){return{x:t.timeScale.indexToX(t.dataLayer.timeToIndexFloat(e)),y:t.priceScale.priceToY(i)}}_points(t,e){return e.points.map(e=>this._project(t,e.time,e.price))}draw(t,e){const i=null===this._preview?this._drawings:[...this._drawings,this._preview];for(const n of i){if(!1===n.visible||!p(n.tool))continue;const i=d(n.tool);if(n.points.length<Math.max(1,i.points))continue;const s=this._points(e,n);if(!s.some(t=>Number.isFinite(t.x)&&Number.isFinite(t.y)))continue;const r={color:n.style.color??e.theme.lineColor,lineWidth:n.style.lineWidth??1.5,...n.style},o=e.dpr;t.save(),n===this._preview&&(t.globalAlpha=.7),i.draw({ctx:t,rc:e,drawing:n,selected:n.id===this._selected,pts:s.map(t=>({x:t.x*o,y:t.y*o})),style:{...r,color:r.color,lineWidth:r.lineWidth},formatPrice:t=>e.priceScale.format(t)}),t.restore(),n.id===this._selected&&!0!==n.locked&&this._drawHandles(t,e,s)}}_drawHandles(t,e,i){const n=e.dpr;t.save(),t.setLineDash([]),t.lineWidth=Math.max(1,Math.round(1.5*n));for(const s of i)t.beginPath(),t.arc(s.x*n,s.y*n,5*n,0,2*Math.PI),t.fillStyle=e.theme.background,t.fill(),t.strokeStyle=e.theme.lineColor,t.stroke();t.restore()}hitTest(t,e,i){if(null!==this._selected){const n=this._drawings.find(t=>t.id===this._selected);if(void 0!==n&&!0!==n.locked){const s=this._points(i,n);for(let i=0;i<s.length;i++)if(Math.hypot(t-s[i].x,e-s[i].y)<=7)return{externalId:`draw:${n.id}#${i}`,zOrder:"top",distance:0,cursor:"grabbing",draggable:!0}}}let n=null;for(let s=this._drawings.length-1;s>=0;s--){const r=this._drawings[s];if(!1===r.visible||!0===r.locked||!p(r.tool))continue;const o=d(r.tool);if(r.points.length<Math.max(1,o.points))continue;const l=o.distance(t,e,{pts:this._points(i,r),drawing:r,rc:i});null===l||!Number.isFinite(l)||l>6||(null===n||l<n.distance)&&(n={id:r.id,distance:l})}return null===n?null:{externalId:`draw:${n.id}`,zOrder:"top",distance:n.distance,cursor:"move",draggable:!0}}}let q=1;class G{constructor(t,e={}){Object.defineProperty(this,"_chart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_opts",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_layers",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"_drawings",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_tool",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_pending",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_pendingPane",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_selected",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_undo",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_redo",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_dragStart",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_off",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_lastCursor",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_lastBar",{enumerable:!0,configurable:!0,writable:!0,value:null}),this._chart=t,this._opts={magnet:e.magnet??!1,stayInDrawingMode:e.stayInDrawingMode??!1,historyLimit:e.historyLimit??50,defaultStyle:e.defaultStyle??{}},this._off.push(t.on("click",t=>this._onClick(t))),this._off.push(t.on("crosshair:move",t=>this._onCrosshair(t))),this._off.push(t.on("drag",t=>this._onDrag(t))),this._off.push(t.on("drag:end",()=>this._onDragEnd()));const i=t.drawingState();Array.isArray(i)&&(this._drawings=i.map(t=>({...t}))),this._sync()}setTool(t){if(null!==t&&!p(t))throw new Error(`openalgo-charts: unknown drawing tool "${t}"`);this._tool=t,this._pending=[],this._syncPreview(),this._chart.emit("draw:tool",{tool:t})}activeTool(){return this._tool}setOptions(t){this._opts={...this._opts,...t,defaultStyle:t.defaultStyle??this._opts.defaultStyle}}drawings(){return this._drawings}get(t){return this._drawings.find(e=>e.id===t)}add(t){this._pushUndo();const e=d(t.tool),i={...t,id:t.id??"d"+q++,style:{...this._opts.defaultStyle,...e.defaultStyle,...t.style}};return this._drawings.push(i),this._sync(),this._chart.emit("draw:add",{drawing:i}),i}update(t,e){const i=this.get(t);return void 0!==i&&(this._pushUndo(),void 0!==e.points&&(i.points=e.points.map(t=>({...t}))),void 0!==e.style&&(i.style={...i.style,...e.style}),void 0!==e.locked&&(i.locked=e.locked),void 0!==e.visible&&(i.visible=e.visible),this._sync(),this._chart.emit("draw:update",{drawing:i}),!0)}remove(t){const e=this._drawings.findIndex(e=>e.id===t);if(e<0)return!1;this._pushUndo();const[i]=this._drawings.splice(e,1);return this._selected===t&&(this._selected=null),this._sync(),this._chart.emit("draw:remove",{drawing:i}),!0}clear(){0!==this._drawings.length&&(this._pushUndo(),this._drawings=[],this._selected=null,this._sync())}select(t){this._selected=t;for(const e of this._layers.values())e.setSelected(t);this._chart.emit("draw:select",{id:t})}selected(){return this._selected}undo(){const t=this._undo.pop();return void 0!==t&&(this._redo.push(JSON.stringify(this._drawings)),this._drawings=JSON.parse(t),this._drawings.some(t=>t.id===this._selected)||(this._selected=null),this._sync(),!0)}redo(){const t=this._redo.pop();return void 0!==t&&(this._undo.push(JSON.stringify(this._drawings)),this._drawings=JSON.parse(t),this._sync(),!0)}canUndo(){return this._undo.length>0}canRedo(){return this._redo.length>0}toJSON(){return this._drawings.map(t=>({...t,points:t.points.map(t=>({...t})),style:{...t.style}}))}fromJSON(t){this._drawings=Array.isArray(t)?t.map(t=>({...t})):[],this._selected=null,this._undo=[],this._redo=[],this._sync()}destroy(){for(const t of this._off)t();this._off.length=0;for(const[t,e]of this._layers)this._chart.removePrimitive(e);this._layers.clear()}_onCrosshair(t){const e=t.time,i=t.price,n=t.paneIndex??null;this._lastCursor=null===e||null===i||null===n?null:{time:e,price:i,paneIndex:n},this._lastBar=t.bar??null,null!==this._tool&&this._pending.length>0&&this._syncPreview()}_onClick(t){if(null===this._tool)null!==t.id&&t.id.startsWith("draw:")?this.select(t.id.slice(5).split("#")[0]):null===t.id&&this.select(null);else{if(null===t.price||!Number.isFinite(t.price)||!Number.isFinite(t.time))return;this._placePoint({time:t.time,price:this._snap(t.price,t.paneIndex)},t.paneIndex)}}_placePoint(t,e){0===this._pending.length&&(this._pendingPane=e),this._pending.push(t);const i=d(this._tool);if(i.points>0&&this._pending.length>=i.points){const t=this.add({tool:i.id,points:this._pending,style:{},paneIndex:this._pendingPane});this._pending=[],this._opts.stayInDrawingMode||(this._tool=null),this._syncPreview(),this.select(t.id),this._chart.emit("draw:tool",{tool:this._tool})}else this._syncPreview()}_snap(t,e){if(!this._opts.magnet||0!==e)return t;const i=this._lastBar;if(null===i)return t;let n=t,s=1/0;for(const e of[i.open,i.high,i.low,i.close]){const i=Math.abs(e-t);i<s&&(s=i,n=e)}return n}_onDrag(t){if(!t.id.startsWith("draw:"))return;const[e,i]=t.id.slice(5).split("#"),n=this.get(e);if(void 0===n||!0===n.locked)return;const s=void 0===i?null:Number(i);null!==this._dragStart&&this._dragStart.id===e&&this._dragStart.handle===s||(this._pushUndo(),this._dragStart={id:e,handle:s,points:n.points.map(t=>({...t})),from:{time:t.fromTime??t.time,price:t.fromPrice??t.price}});const r=this._dragStart;if(null===s){const e=t.time-r.from.time,i=t.price-r.from.price;n.points=r.points.map(t=>({time:t.time+e,price:t.price+i}))}else s>=0&&s<n.points.length&&(n.points=r.points.map((e,i)=>i===s?{time:t.time,price:t.price}:{...e}));this._sync()}_onDragEnd(){if(null===this._dragStart)return;const t=this.get(this._dragStart.id);this._dragStart=null,void 0!==t&&this._chart.emit("draw:update",{drawing:t})}_layerFor(t){let e=this._layers.get(t);return void 0===e&&(e=new B,this._chart.addPrimitive(e,t),this._layers.set(t,e)),e}_sync(){const t=new Map;for(const e of this._drawings){const i=t.get(e.paneIndex)??[];i.push(e),t.set(e.paneIndex,i)}for(const[e,i]of t)this._layerFor(e).setDrawings(i);for(const[e,i]of this._layers)t.has(e)||i.setDrawings([]),i.setSelected(this._selected);this._chart.setDrawingState(this.toJSON())}_syncPreview(){for(const t of this._layers.values())t.setPreview(null);if(null===this._tool||0===this._pending.length)return;const t=this._lastCursor,e=null===t?this._pending:[...this._pending,{time:t.time,price:t.price}];this._layerFor(this._pendingPane).setPreview({id:"__preview",tool:this._tool,points:e,style:this._opts.defaultStyle,paneIndex:this._pendingPane})}_pushUndo(){this._undo.push(JSON.stringify(this._drawings)),this._undo.length>this._opts.historyLimit&&this._undo.shift(),this._redo=[]}}const V="draw";Y();export{S as ARROW,J as BUILTIN_DRAWING_TOOLS,L as CROSS_LINE,V as DRAW_TIER,G as DrawingController,B as DrawingLayer,O as ELLIPSE,v as EXTENDED_LINE,$ as FIB_EXTENSION,W as FIB_RETRACEMENT,M as HORIZONTAL_LINE,P as HORIZONTAL_RAY,A as LONG_POSITION,I as MEASURE,D as PARALLEL_CHANNEL,H as PATH,b as RAY,k as RECTANGLE,F as SHORT_POSITION,z as TEXT,w as TREND_LINE,T as VERTICAL_LINE,l as distToEllipse,e as distToLine,s as distToPolyline,o as distToRect,t as distToSegment,a as extendSegment,d as getDrawingTool,p as hasDrawingTool,r as rectOf,Y as registerBuiltinDrawingTools,h as registerDrawingTool,u as registeredDrawingTools};
1
+ function t(t,e,i,n){const s=n.x-i.x,r=n.y-i.y,o=s*s+r*r;if(0===o)return Math.hypot(t-i.x,e-i.y);let l=((t-i.x)*s+(e-i.y)*r)/o;return l=l<0?0:l>1?1:l,Math.hypot(t-(i.x+l*s),e-(i.y+l*r))}function e(t,e,i,n){const s=n.x-i.x,r=n.y-i.y,o=Math.hypot(s,r);return 0===o?Math.hypot(t-i.x,e-i.y):Math.abs(r*(t-i.x)-s*(e-i.y))/o}function i(t,e){return Math.abs(t-e)}function n(t,e){return Math.abs(t-e)}function s(e,i,n){let s=1/0;for(let r=1;r<n.length;r++){const o=t(e,i,n[r-1],n[r]);o<s&&(s=o)}return s}function r(t,e){return{x0:Math.min(t.x,e.x),y0:Math.min(t.y,e.y),x1:Math.max(t.x,e.x),y1:Math.max(t.y,e.y)}}function o(e,i,n,s,o){const l=r(n,s);if(e>=l.x0&&e<=l.x1&&i>=l.y0&&i<=l.y1&&o)return 0;const a=[{x:l.x0,y:l.y0},{x:l.x1,y:l.y0},{x:l.x1,y:l.y1},{x:l.x0,y:l.y1}];let c=1/0;for(let n=0;n<4;n++){const s=t(e,i,a[n],a[(n+1)%4]);s<c&&(c=s)}return c}function l(t,e,i,n,s){const o=r(i,n),l=(o.x0+o.x1)/2,a=(o.y0+o.y1)/2,c=Math.max(1e-6,(o.x1-o.x0)/2),h=Math.max(1e-6,(o.y1-o.y0)/2),d=(t-l)/c,p=(e-a)/h,u=Math.hypot(d,p);return s&&u<=1?0:Math.abs(u-1)*Math.min(c,h)}function a(t,e,i,n,s){const r=e.x-t.x;if(0===r)return[t,e];const o=(e.y-t.y)/r;return[n?{x:0,y:t.y+(0-t.x)*o}:t,s?{x:i,y:t.y+(i-t.x)*o}:e]}const c=new Map;function h(t){c.set(t.id,t)}function d(t){const e=c.get(t);if(void 0===e)throw new Error(`openalgo-charts: unknown drawing tool "${t}"`);return e}function p(t){return c.has(t)}function u(){return Array.from(c.values())}function x(t){const{ctx:e,rc:i,style:n}=t,s=i.dpr;e.strokeStyle=n.color,e.lineWidth=Math.max(1,Math.round(n.lineWidth*s)),e.lineJoin="round",e.lineCap="round",e.setLineDash("dashed"===n.lineStyle?[6*s,4*s]:"dotted"===n.lineStyle?[1*s,3*s]:[])}function y(t){return t.style.fillColor??t.style.color}function f(t,e){if(!0!==t.style.fill)return;const{ctx:i}=t;i.save(),i.globalAlpha=t.style.fillOpacity??.12,i.fillStyle=y(t),e(),i.restore()}function g(t,e,i,n,s){const{ctx:r,rc:o,style:l}=t,a=(l.fontSize??11)*o.dpr;r.save(),r.setLineDash([]),r.font=`${a}px ui-sans-serif, system-ui, sans-serif`,r.textBaseline="middle",r.textAlign="left";const c=r.measureText(e).width;r.globalAlpha=.85,r.fillStyle=o.theme.background,r.fillRect(i-2*o.dpr,n-.75*a,c+4*o.dpr,1.5*a),r.globalAlpha=1,r.fillStyle=s??l.color,r.fillText(e,i,n),r.restore()}const _=[0,.236,.382,.5,.618,.786,1];function m(i,n,s,r){return{id:i,name:n,points:2,defaultStyle:{extendLeft:s,extendRight:r},draw:t=>{const[e,i]=a(t.pts[0],t.pts[1],t.rc.plotWidth*t.rc.dpr,t.style.extendLeft??s,t.style.extendRight??r);x(t),t.ctx.beginPath(),t.ctx.moveTo(e.x,e.y),t.ctx.lineTo(i.x,i.y),t.ctx.stroke(),t.ctx.setLineDash([])},distance:(i,n,o)=>{const l=o.drawing.style.extendLeft??s,c=o.drawing.style.extendRight??r;if(l&&c)return e(i,n,o.pts[0],o.pts[1]);const[h,d]=a(o.pts[0],o.pts[1],o.rc.plotWidth,l,c);return t(i,n,h,d)}}}const w=m("trend-line","Trend Line",!1,!1),b=m("ray","Ray",!1,!0),v=m("extended-line","Extended Line",!0,!0),M={id:"arrow",name:"Arrow",points:2,draw:t=>{const[e,i]=t.pts;x(t),t.ctx.beginPath(),t.ctx.moveTo(e.x,e.y),t.ctx.lineTo(i.x,i.y),t.ctx.stroke();const n=Math.max(8,5*t.style.lineWidth)*t.rc.dpr,s=Math.atan2(i.y-e.y,i.x-e.x);t.ctx.beginPath(),t.ctx.moveTo(i.x,i.y),t.ctx.lineTo(i.x-n*Math.cos(s-.4),i.y-n*Math.sin(s-.4)),t.ctx.lineTo(i.x-n*Math.cos(s+.4),i.y-n*Math.sin(s+.4)),t.ctx.closePath(),t.ctx.fillStyle=t.style.color,t.ctx.fill(),t.ctx.setLineDash([])},distance:(e,i,n)=>t(e,i,n.pts[0],n.pts[1])},S={id:"horizontal-line",name:"Horizontal Line",points:1,defaultStyle:{showLabels:!0},draw:t=>{const e=Math.round(t.pts[0].y)+.5;x(t),t.ctx.beginPath(),t.ctx.moveTo(0,e),t.ctx.lineTo(t.rc.plotWidth*t.rc.dpr,e),t.ctx.stroke(),t.ctx.setLineDash([]),!1!==t.style.showLabels&&g(t,t.formatPrice(t.drawing.points[0].price),4*t.rc.dpr,e-8*t.rc.dpr)},distance:(t,e,n)=>i(e,n.pts[0].y)},P={id:"horizontal-ray",name:"Horizontal Ray",points:1,defaultStyle:{showLabels:!0},draw:t=>{const e=Math.round(t.pts[0].y)+.5;x(t),t.ctx.beginPath(),t.ctx.moveTo(t.pts[0].x,e),t.ctx.lineTo(t.rc.plotWidth*t.rc.dpr,e),t.ctx.stroke(),t.ctx.setLineDash([]),!1!==t.style.showLabels&&g(t,t.formatPrice(t.drawing.points[0].price),t.pts[0].x+4*t.rc.dpr,e-8*t.rc.dpr)},distance:(t,e,n)=>t<n.pts[0].x?null:i(e,n.pts[0].y)},T={id:"vertical-line",name:"Vertical Line",points:1,draw:t=>{const e=Math.round(t.pts[0].x)+.5;x(t),t.ctx.beginPath(),t.ctx.moveTo(e,0),t.ctx.lineTo(e,t.rc.plotHeight*t.rc.dpr),t.ctx.stroke(),t.ctx.setLineDash([])},distance:(t,e,i)=>n(t,i.pts[0].x)},L={id:"cross-line",name:"Cross Line",points:1,draw:t=>{const e=Math.round(t.pts[0].x)+.5,i=Math.round(t.pts[0].y)+.5;x(t),t.ctx.beginPath(),t.ctx.moveTo(e,0),t.ctx.lineTo(e,t.rc.plotHeight*t.rc.dpr),t.ctx.moveTo(0,i),t.ctx.lineTo(t.rc.plotWidth*t.rc.dpr,i),t.ctx.stroke(),t.ctx.setLineDash([])},distance:(t,e,s)=>Math.min(n(t,s.pts[0].x),i(e,s.pts[0].y))},k={id:"rectangle",name:"Rectangle",points:2,defaultStyle:{fill:!0,fontSize:14,textAlign:"left",textVAlign:"top",textPosition:"inside"},draw:t=>{const e=r(t.pts[0],t.pts[1]);f(t,()=>t.ctx.fillRect(e.x0,e.y0,e.x1-e.x0,e.y1-e.y0)),x(t),t.ctx.strokeRect(e.x0,e.y0,e.x1-e.x0,e.y1-e.y0),t.ctx.setLineDash([]),J(t,e.x0,e.y0,e.x1,e.y1)},distance:(t,e,i)=>o(t,e,i.pts[0],i.pts[1],!0===i.drawing.style.fill)},O={id:"ellipse",name:"Ellipse",points:2,defaultStyle:{fill:!0,fontSize:14,textAlign:"center",textVAlign:"middle",textPosition:"inside"},draw:t=>{const e=r(t.pts[0],t.pts[1]),i=(e.x0+e.x1)/2,n=(e.y0+e.y1)/2,s=Math.max(1,(e.x1-e.x0)/2),o=Math.max(1,(e.y1-e.y0)/2),l=()=>{t.ctx.beginPath(),t.ctx.ellipse(i,n,s,o,0,0,2*Math.PI)};f(t,()=>{l(),t.ctx.fill()}),x(t),l(),t.ctx.stroke(),t.ctx.setLineDash([]),J(t,e.x0,e.y0,e.x1,e.y1)},distance:(t,e,i)=>l(t,e,i.pts[0],i.pts[1],!0===i.drawing.style.fill)},D={id:"parallel-channel",name:"Parallel Channel",points:3,defaultStyle:{fill:!0},draw:t=>{const[e,i,n]=t.pts,s=n.y-(e.y+.5*(i.y-e.y)),r={x:e.x,y:e.y+s},o={x:i.x,y:i.y+s};f(t,()=>{t.ctx.beginPath(),t.ctx.moveTo(e.x,e.y),t.ctx.lineTo(i.x,i.y),t.ctx.lineTo(o.x,o.y),t.ctx.lineTo(r.x,r.y),t.ctx.closePath(),t.ctx.fill()}),x(t),t.ctx.beginPath(),t.ctx.moveTo(e.x,e.y),t.ctx.lineTo(i.x,i.y),t.ctx.moveTo(r.x,r.y),t.ctx.lineTo(o.x,o.y),t.ctx.stroke(),t.ctx.setLineDash([]),J(t,Math.min(e.x,i.x),Math.min(e.y,i.y,r.y,o.y),Math.max(e.x,i.x),Math.max(e.y,i.y,r.y,o.y))},distance:(e,i,n)=>{const[s,r,o]=n.pts,l=o.y-(s.y+.5*(r.y-s.y)),a=t(e,i,s,r),c=t(e,i,{x:s.x,y:s.y+l},{x:r.x,y:r.y+l});return Math.min(a,c)}};function A(t,e,i){return{id:t,name:e,points:i,defaultStyle:{showLabels:!0,levels:[..._],fill:!0,fillOpacity:.06},draw:t=>{const e=t.style.levels??_,n=t.drawing.points,s=2===i?n[0].price:n[2].price,r=n[1].price-n[0].price,o=Math.min(t.pts[0].x,t.pts[i-1].x),l=Math.max(t.pts[0].x,t.pts[i-1].x),a=!0===t.style.extendRight?t.rc.plotWidth*t.rc.dpr:l;x(t);let c=null;for(const i of e){const e=s+r*i,n=Math.round(t.rc.priceScale.priceToY(e)*t.rc.dpr)+.5;!0===t.style.fill&&null!==c&&(t.ctx.save(),t.ctx.globalAlpha=t.style.fillOpacity??.06,t.ctx.fillStyle=y(t),t.ctx.fillRect(o,Math.min(c,n),a-o,Math.abs(n-c)),t.ctx.restore()),c=n,t.ctx.beginPath(),t.ctx.moveTo(o,n),t.ctx.lineTo(a,n),t.ctx.stroke(),!1!==t.style.showLabels&&g(t,`${(100*i).toFixed(1)}% ${t.formatPrice(e)}`,o+4*t.rc.dpr,n-8*t.rc.dpr)}t.ctx.setLineDash([])},distance:(t,e,n)=>{const s=n.drawing.style.levels??_,r=n.drawing.points,o=2===i?r[0].price:r[2].price,l=r[1].price-r[0].price,a=Math.min(n.pts[0].x,n.pts[i-1].x),c=!0===n.drawing.style.extendRight?n.rc.plotWidth:Math.max(n.pts[0].x,n.pts[i-1].x);if(t<a-4||t>c+4)return null;let h=1/0;for(const t of s){const i=Math.abs(e-n.rc.priceScale.priceToY(o+l*t));i<h&&(h=i)}return h}}}const R=A("fib-retracement","Fib Retracement",2),W=A("fib-extension","Fib Extension",3),$={id:"measure",name:"Measure",points:2,defaultStyle:{fill:!0,showLabels:!0,fillOpacity:.1},draw:t=>{const e=r(t.pts[0],t.pts[1]),i=t.drawing.points,n=i[1].price-i[0].price,s=0!==i[0].price?n/i[0].price*100:0,o=n>=0,l=o?"#26a69a":"#ef5350";t.ctx.save(),t.ctx.globalAlpha=t.style.fillOpacity??.1,t.ctx.fillStyle=l,t.ctx.fillRect(e.x0,e.y0,e.x1-e.x0,e.y1-e.y0),t.ctx.restore(),x(t),t.ctx.strokeStyle=l,t.ctx.strokeRect(e.x0,e.y0,e.x1-e.x0,e.y1-e.y0),t.ctx.setLineDash([]);const a=t.rc.dataLayer.timeToIndexFloat(i[0].time),c=t.rc.dataLayer.timeToIndexFloat(i[1].time),h=Math.abs(Math.round(c-a)),d=o?"+":"";g(t,`${d}${t.formatPrice(n)} (${d}${s.toFixed(2)}%) ${h} bars`,e.x0+4*t.rc.dpr,e.y0-10*t.rc.dpr,l)},distance:(t,e,i)=>o(t,e,i.pts[0],i.pts[1],!0)};function I(t,e,i){return{id:t,name:e,points:3,defaultStyle:{showLabels:!0,fillOpacity:.13,accountSize:1e5,risk:1},draw:t=>{const[e,n,s]=t.drawing.points,r=t.rc.dpr,o=Math.min(t.pts[0].x,t.pts[1].x,t.pts[2].x),l=Math.max(t.pts[0].x,t.pts[1].x,t.pts[2].x),a=t.rc.priceScale.priceToY(e.price)*r,c=t.rc.priceScale.priceToY(n.price)*r,h=t.rc.priceScale.priceToY(s.price)*r,d=(e,i,n)=>{t.ctx.save(),t.ctx.globalAlpha=t.style.fillOpacity??.13,t.ctx.fillStyle=n,t.ctx.fillRect(o,Math.min(e,i),l-o,Math.abs(i-e)),t.ctx.restore()};d(a,c,"#26a69a"),d(a,h,"#ef5350"),x(t);for(const e of[a,c,h]){const i=Math.round(e)+.5;t.ctx.beginPath(),t.ctx.moveTo(o,i),t.ctx.lineTo(l,i),t.ctx.stroke()}if(t.ctx.setLineDash([]),!1===t.style.showLabels)return;const p=Math.abs(e.price-s.price),u=Math.abs(n.price-e.price),y=p>0?u/p:0,f=t.style.accountSize??0,_=t.style.risk??0,m=p>0&&f>0?Math.floor(f*_/100/p):0;g(t,`${i?"LONG":"SHORT"} R:R ${y.toFixed(2)}${m>0?` qty ${m}`:""}`,o+4*r,a-10*r)},distance:(t,e,i)=>{const n=Math.min(i.pts[0].x,i.pts[1].x,i.pts[2].x),s=Math.max(i.pts[0].x,i.pts[1].x,i.pts[2].x);if(t<n-4||t>s+4)return null;const r=i.drawing.points.map(t=>i.rc.priceScale.priceToY(t.price)),o=Math.min(...r),l=Math.max(...r);return e>=o&&e<=l?0:Math.min(Math.abs(e-o),Math.abs(e-l))}}}const j=I("long-position","Long Position",!0),z=I("short-position","Short Position",!1),C=1.35,F="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif";function N(t,e){const i="bold"===t.fontWeight?"700 ":"";return`${"italic"===t.fontStyle?"italic ":""}${i}${e}px ${t.fontFamily??F}`}function U(t,e,i){const n=(e.text??"").split("\n");if(!0!==e.wrap)return n;const s=[];for(const e of n){const n=e.split(/\s+/).filter(t=>""!==t);if(0===n.length){s.push("");continue}let r=n[0];for(let e=1;e<n.length;e++){const o=`${r} ${n[e]}`;t.measureText(o).width>i?(s.push(r),r=n[e]):r=o}s.push(r)}return s}function H(t,e,i){const n=(e.fontSize??13)*i;t.font=N(e,n);const s=U(t,e,(e.wrapWidth??220)*i);let r=0;for(const e of s)r=Math.max(r,t.measureText(e).width);const o=n*C;return{lines:s,width:r+10*i,height:s.length*o+10*i,lineHeight:o}}function J(t,e,i,n,s){const{ctx:r,rc:o,style:l}=t,a=l.text;if(void 0===a||""===a)return;const c=o.dpr,h=(l.fontSize??14)*c,d=6*c;r.save(),r.setLineDash([]),r.font=N(l,h),r.fillStyle=l.fontColor??l.color,r.textBaseline="top";const p=!0===l.wrap?U(r,l,Math.max(20*c,n-e-2*d)):a.split("\n"),u=h*C,x=p.length*u,y=l.textAlign??"left";r.textAlign=y;const f="center"===y?(e+n)/2:"right"===y?n-d:e+d;let g;if("outside"===l.textPosition)g=i-x-d;else{const t=l.textVAlign??"top";g="middle"===t?(i+s-x)/2:"bottom"===t?s-x-d:i+d}for(const t of p)r.fillText(t,f,g),g+=u;r.restore()}const E={id:"text",name:"Text",points:1,defaultStyle:{text:"Text",fontSize:14,fontWeight:"normal",fontStyle:"normal",background:!1,backgroundOpacity:1,border:!1,wrap:!1,wrapWidth:220,textAlign:"left"},draw:t=>{const{ctx:e,rc:i,style:n}=t,s=i.dpr,r=H(e,n,s),o=t.pts[0].x,l=t.pts[0].y;e.save(),e.setLineDash([]),!0===n.background&&(e.globalAlpha=n.backgroundOpacity??1,e.fillStyle=n.backgroundColor??i.theme.background,e.beginPath(),e.roundRect(o,l,r.width,r.height,4*s),e.fill(),e.globalAlpha=1),!0===n.border&&(e.strokeStyle=n.borderColor??n.color,e.lineWidth=Math.max(1,n.lineWidth*s),e.beginPath(),e.roundRect(o,l,r.width,r.height,4*s),e.stroke()),e.font=N(n,(n.fontSize??13)*s),e.fillStyle=n.color,e.textBaseline="top";const a=n.textAlign??"left";e.textAlign=a;const c="center"===a?o+r.width/2:"right"===a?o+r.width-5*s:o+5*s;let h=l+5*s;for(const t of r.lines)e.fillText(t,c,h),h+=r.lineHeight;e.restore()},distance:(t,e,i)=>{const n=i.drawing.style,s=n.fontSize??13,r=i.pts[0],o=function(){if(void 0!==Y)return Y;try{Y="undefined"==typeof document?null:document.createElement("canvas").getContext("2d")}catch{Y=null}return Y}(),l=null===o?{width:(n.text??"").length*s*.6+10,height:s*C+10}:H(o,n,1);return t>=r.x-3&&t<=r.x+l.width+3&&e>=r.y-3&&e<=r.y+l.height+3?0:null}};let Y;const B={id:"path",name:"Path",points:0,draw:t=>{if(!(t.pts.length<2)){x(t),t.ctx.beginPath(),t.ctx.moveTo(t.pts[0].x,t.pts[0].y);for(let e=1;e<t.pts.length;e++)t.ctx.lineTo(t.pts[e].x,t.pts[e].y);t.ctx.stroke(),t.ctx.setLineDash([])}},distance:(t,e,i)=>i.pts.length<2?null:s(t,e,i.pts)},q=[w,b,v,M,S,P,T,L,k,O,D,R,W,j,z,$,E,B];let V=!1;function G(){if(!V){V=!0;for(const t of q)h(t)}}class X{constructor(){Object.defineProperty(this,"_drawings",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_host",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_selected",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_preview",{enumerable:!0,configurable:!0,writable:!0,value:null})}attached(t){this._host=t}detached(){this._host=null}zOrder(){return"top"}autoscaleInfo(){return null}setDrawings(t){this._drawings=t.slice(),this._host?.requestUpdate()}setSelected(t){t!==this._selected&&(this._selected=t,this._host?.requestUpdate())}setPreview(t){this._preview=t,this._host?.requestUpdate()}_project(t,e,i){return{x:t.timeScale.indexToX(t.dataLayer.timeToIndexFloat(e)),y:t.priceScale.priceToY(i)}}_points(t,e){return e.points.map(e=>this._project(t,e.time,e.price))}draw(t,e){const i=null===this._preview?this._drawings:[...this._drawings,this._preview];for(const n of i){if(!1===n.visible||!p(n.tool))continue;const i=d(n.tool);if(n.points.length<Math.max(1,i.points))continue;const s=this._points(e,n);if(!s.some(t=>Number.isFinite(t.x)&&Number.isFinite(t.y)))continue;const r={color:n.style.color??e.theme.lineColor,lineWidth:n.style.lineWidth??1.5,...n.style},o=e.dpr;t.save(),n===this._preview&&(t.globalAlpha=.7),i.draw({ctx:t,rc:e,drawing:n,selected:n.id===this._selected,pts:s.map(t=>({x:t.x*o,y:t.y*o})),style:{...r,color:r.color,lineWidth:r.lineWidth},formatPrice:t=>e.priceScale.format(t)}),t.restore(),n.id===this._selected&&!0!==n.locked&&this._drawHandles(t,e,s)}}_drawHandles(t,e,i){const n=e.dpr;t.save(),t.setLineDash([]),t.lineWidth=Math.max(1,Math.round(1.5*n));for(const s of i)t.beginPath(),t.arc(s.x*n,s.y*n,5*n,0,2*Math.PI),t.fillStyle=e.theme.background,t.fill(),t.strokeStyle=e.theme.lineColor,t.stroke();t.restore()}hitTest(t,e,i){if(null!==this._selected){const n=this._drawings.find(t=>t.id===this._selected);if(void 0!==n&&!0!==n.locked){const s=this._points(i,n);for(let i=0;i<s.length;i++)if(Math.hypot(t-s[i].x,e-s[i].y)<=7)return{externalId:`draw:${n.id}#${i}`,zOrder:"top",distance:0,cursor:"grabbing",draggable:!0}}}let n=null;for(let s=this._drawings.length-1;s>=0;s--){const r=this._drawings[s];if(!1===r.visible||!0===r.locked||!p(r.tool))continue;const o=d(r.tool);if(r.points.length<Math.max(1,o.points))continue;const l=o.distance(t,e,{pts:this._points(i,r),drawing:r,rc:i});null===l||!Number.isFinite(l)||l>6||(null===n||l<n.distance)&&(n={id:r.id,distance:l})}return null===n?null:{externalId:`draw:${n.id}`,zOrder:"top",distance:n.distance,cursor:"move",draggable:!0}}}let K=1;class Q{constructor(t,e={}){Object.defineProperty(this,"_chart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_opts",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_layers",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"_drawings",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_tool",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_pending",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_pendingPane",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_selected",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_undo",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_redo",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_dragStart",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_off",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_lastCursor",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_lastBar",{enumerable:!0,configurable:!0,writable:!0,value:null}),this._chart=t,this._opts={magnet:e.magnet??!1,stayInDrawingMode:e.stayInDrawingMode??!1,historyLimit:e.historyLimit??50,defaultStyle:e.defaultStyle??{}},this._off.push(t.on("click",t=>this._onClick(t))),this._off.push(t.on("crosshair:move",t=>this._onCrosshair(t))),this._off.push(t.on("drag",t=>this._onDrag(t))),this._off.push(t.on("drag:end",()=>this._onDragEnd()));const i=t.drawingState();Array.isArray(i)&&(this._drawings=i.map(t=>({...t}))),this._sync()}setTool(t){if(null!==t&&!p(t))throw new Error(`openalgo-charts: unknown drawing tool "${t}"`);this._tool=t,this._pending=[],this._setPlacementMode(null!==t),this._syncPreview(),this._chart.emit("draw:tool",{tool:t})}_setPlacementMode(t){const e=this._chart;e.setPlacementMode?.(t)}activeTool(){return this._tool}setOptions(t){this._opts={...this._opts,...t,defaultStyle:t.defaultStyle??this._opts.defaultStyle}}drawings(){return this._drawings}get(t){return this._drawings.find(e=>e.id===t)}add(t){this._pushUndo();const e=d(t.tool),i={...t,id:t.id??"d"+K++,style:{...this._opts.defaultStyle,...e.defaultStyle,...t.style}};return this._drawings.push(i),this._sync(),this._chart.emit("draw:add",{drawing:i}),i}update(t,e){const i=this.get(t);return void 0!==i&&(this._pushUndo(),void 0!==e.points&&(i.points=e.points.map(t=>({...t}))),void 0!==e.style&&(i.style={...i.style,...e.style}),void 0!==e.locked&&(i.locked=e.locked),void 0!==e.visible&&(i.visible=e.visible),this._sync(),this._chart.emit("draw:update",{drawing:i}),!0)}remove(t){const e=this._drawings.findIndex(e=>e.id===t);if(e<0)return!1;this._pushUndo();const[i]=this._drawings.splice(e,1);return this._selected===t&&(this._selected=null),this._sync(),this._chart.emit("draw:remove",{drawing:i}),!0}clear(){0!==this._drawings.length&&(this._pushUndo(),this._drawings=[],this._selected=null,this._sync())}select(t){this._selected=t;for(const e of this._layers.values())e.setSelected(t);this._chart.emit("draw:select",{id:t})}selected(){return this._selected}undo(){const t=this._undo.pop();return void 0!==t&&(this._redo.push(JSON.stringify(this._drawings)),this._drawings=JSON.parse(t),this._drawings.some(t=>t.id===this._selected)||(this._selected=null),this._sync(),!0)}redo(){const t=this._redo.pop();return void 0!==t&&(this._undo.push(JSON.stringify(this._drawings)),this._drawings=JSON.parse(t),this._sync(),!0)}canUndo(){return this._undo.length>0}canRedo(){return this._redo.length>0}toJSON(){return this._drawings.map(t=>({...t,points:t.points.map(t=>({...t})),style:{...t.style}}))}fromJSON(t){this._drawings=Array.isArray(t)?t.map(t=>({...t})):[],this._selected=null,this._undo=[],this._redo=[],this._sync()}destroy(){this._setPlacementMode(!1);for(const t of this._off)t();this._off.length=0;for(const[t,e]of this._layers)this._chart.removePrimitive(e);this._layers.clear()}_onCrosshair(t){const e=t.time,i=t.price,n=t.paneIndex??null;this._lastCursor=null===e||null===i||null===n?null:{time:e,price:i,paneIndex:n},this._lastBar=t.bar??null,null!==this._tool&&this._pending.length>0&&this._syncPreview()}_onClick(t){if(null===this._tool)null!==t.id&&t.id.startsWith("draw:")?this.select(t.id.slice(5).split("#")[0]):null===t.id&&this.select(null);else{if(!0===t.viaDrag&&0===this._pending.length)return;if(null===t.price||!Number.isFinite(t.price)||!Number.isFinite(t.time))return;this._placePoint({time:t.time,price:this._snap(t.price,t.paneIndex)},t.paneIndex)}}_placePoint(t,e){0===this._pending.length&&(this._pendingPane=e),this._pending.push(t);const i=d(this._tool);if(i.points>0&&this._pending.length>=i.points){const t=this.add({tool:i.id,points:this._pending,style:{},paneIndex:this._pendingPane});this._pending=[],this._opts.stayInDrawingMode||(this._tool=null,this._setPlacementMode(!1)),this._syncPreview(),this.select(t.id),this._chart.emit("draw:tool",{tool:this._tool})}else this._syncPreview()}_snap(t,e){if(!this._opts.magnet||0!==e)return t;const i=this._lastBar;if(null===i)return t;let n=t,s=1/0;for(const e of[i.open,i.high,i.low,i.close]){const i=Math.abs(e-t);i<s&&(s=i,n=e)}return n}_onDrag(t){if(!t.id.startsWith("draw:"))return;const[e,i]=t.id.slice(5).split("#"),n=this.get(e);if(void 0===n||!0===n.locked)return;const s=void 0===i?null:Number(i);null!==this._dragStart&&this._dragStart.id===e&&this._dragStart.handle===s||(this._pushUndo(),this._dragStart={id:e,handle:s,points:n.points.map(t=>({...t})),from:{time:t.fromTime??t.time,price:t.fromPrice??t.price}});const r=this._dragStart;if(null===s){const e=t.time-r.from.time,i=t.price-r.from.price;n.points=r.points.map(t=>({time:t.time+e,price:t.price+i}))}else s>=0&&s<n.points.length&&(n.points=r.points.map((e,i)=>i===s?{time:t.time,price:t.price}:{...e}));this._sync()}_onDragEnd(){if(null===this._dragStart)return;const t=this.get(this._dragStart.id);this._dragStart=null,void 0!==t&&this._chart.emit("draw:update",{drawing:t})}_layerFor(t){let e=this._layers.get(t);return void 0===e&&(e=new X,this._chart.addPrimitive(e,t),this._layers.set(t,e)),e}_sync(){const t=new Map;for(const e of this._drawings){const i=t.get(e.paneIndex)??[];i.push(e),t.set(e.paneIndex,i)}for(const[e,i]of t)this._layerFor(e).setDrawings(i);for(const[e,i]of this._layers)t.has(e)||i.setDrawings([]),i.setSelected(this._selected);this._chart.setDrawingState(this.toJSON())}_syncPreview(){for(const t of this._layers.values())t.setPreview(null);if(null===this._tool||0===this._pending.length)return;const t=this._lastCursor,e=null===t?this._pending:[...this._pending,{time:t.time,price:t.price}];this._layerFor(this._pendingPane).setPreview({id:"__preview",tool:this._tool,points:e,style:this._opts.defaultStyle,paneIndex:this._pendingPane})}_pushUndo(){this._undo.push(JSON.stringify(this._drawings)),this._undo.length>this._opts.historyLimit&&this._undo.shift(),this._redo=[]}}const Z="draw";G();export{M as ARROW,q as BUILTIN_DRAWING_TOOLS,L as CROSS_LINE,Z as DRAW_TIER,Q as DrawingController,X as DrawingLayer,O as ELLIPSE,v as EXTENDED_LINE,W as FIB_EXTENSION,R as FIB_RETRACEMENT,S as HORIZONTAL_LINE,P as HORIZONTAL_RAY,j as LONG_POSITION,$ as MEASURE,D as PARALLEL_CHANNEL,B as PATH,b as RAY,k as RECTANGLE,z as SHORT_POSITION,E as TEXT,w as TREND_LINE,T as VERTICAL_LINE,l as distToEllipse,e as distToLine,s as distToPolyline,o as distToRect,t as distToSegment,a as extendSegment,d as getDrawingTool,p as hasDrawingTool,r as rectOf,G as registerBuiltinDrawingTools,h as registerDrawingTool,u as registeredDrawingTools};
2
2
  //# sourceMappingURL=openalgo-charts.draw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"openalgo-charts.draw.mjs","sources":["../src/draw/geometry.ts","../src/draw/tools.ts","../src/draw/layer.ts","../src/draw/controller.ts","../src/draw/index.ts"],"sourcesContent":[null,null,null,null,null],"names":["distToSegment","px","py","a","b","dx","x","dy","y","len2","Math","hypot","t","distToLine","len","abs","distToHorizontal","distToVertical","distToPolyline","pts","best","Infinity","i","length","d","rectOf","x0","min","y0","x1","max","y1","distToRect","filled","r","corners","distToEllipse","cx","cy","rx","ry","nx","ny","norm","extendSegment","width","left","right","slope","registry","Map","registerDrawingTool","tool","set","id","getDrawingTool","get","undefined","Error","hasDrawingTool","has","registeredDrawingTools","Array","from","values","applyStroke","c","ctx","rc","style","dpr","strokeStyle","color","lineWidth","round","lineJoin","lineCap","setLineDash","lineStyle","fillStyleOf","fillColor","withFill","paint","fill","save","globalAlpha","fillOpacity","fillStyle","restore","label","text","size","fontSize","font","textBaseline","textAlign","w","measureText","theme","background","fillRect","fillText","DEFAULT_FIB","lineTool","name","points","defaultStyle","extendLeft","extendRight","draw","plotWidth","beginPath","moveTo","lineTo","stroke","distance","h","el","drawing","er","TREND_LINE","RAY","EXTENDED_LINE","ARROW","head","ang","atan2","cos","sin","closePath","HORIZONTAL_LINE","showLabels","formatPrice","price","_x","HORIZONTAL_RAY","VERTICAL_LINE","plotHeight","_y","CROSS_LINE","RECTANGLE","strokeRect","ELLIPSE","path","ellipse","PI","PARALLEL_CHANNEL","a2","b2","d1","d2","fibTool","anchors","levels","p","span","prevY","lv","priceScale","priceToY","toFixed","FIB_RETRACEMENT","FIB_EXTENSION","MEASURE","chg","pct","up","tint","i0","dataLayer","timeToIndexFloat","time","i1","bars","sign","positionTool","long","accountSize","risk","entry","target","stop","yE","yT","yS","band","yA","yB","yy","reward","rr","account","riskPct","qty","floor","ys","map","lo","hi","LONG_POSITION","SHORT_POSITION","textFont","sizePx","weight","fontWeight","fontStyle","fontFamily","textBox","lines","maxWidth","paragraphs","split","wrap","out","para","words","filter","push","line","next","textLines","wrapWidth","l","lineHeight","TEXT_PAD","height","TEXT","backgroundOpacity","border","box","backgroundColor","roundRect","borderColor","align","tx","ty","probe","_probe","document","createElement","getContext","measureContext","PATH","BUILTIN_DRAWING_TOOLS","_registered","registerBuiltinDrawingTools","DrawingLayer","constructor","Object","defineProperty","this","attached","host","_host","detached","zOrder","autoscaleInfo","setDrawings","drawings","_drawings","slice","requestUpdate","setSelected","_selected","setPreview","_preview","_project","timeScale","indexToX","_points","all","visible","media","some","Number","isFinite","lineColor","selected","v","format","locked","_drawHandles","arc","hitTest","sel","find","HANDLE","externalId","cursor","draggable","dist","nextId","DrawingController","chart","options","value","_chart","_opts","magnet","stayInDrawingMode","historyLimit","_off","on","_onClick","_onCrosshair","_onDrag","_onDragEnd","saved","drawingState","isArray","_sync","setTool","toolId","_tool","_pending","_syncPreview","emit","activeTool","setOptions","patch","add","_pushUndo","created","update","remove","findIndex","removed","splice","clear","select","layer","_layers","undo","snap","_undo","pop","_redo","JSON","stringify","parse","redo","canUndo","canRedo","toJSON","fromJSON","data","destroy","off","pane","removePrimitive","paneIndex","_lastCursor","_lastBar","bar","startsWith","_placePoint","_snap","point","_pendingPane","bestD","open","high","low","close","rawId","handleStr","handle","_dragStart","q","fromTime","fromPrice","start","dt","dp","_layerFor","addPrimitive","byPane","list","setDrawingState","shift","DRAW_TIER"],"mappings":"AAQM,SAAUA,EAAcC,EAAYC,EAAYC,EAAgBC,GACpE,MAAMC,EAAKD,EAAEE,EAAIH,EAAEG,EACbC,EAAKH,EAAEI,EAAIL,EAAEK,EACbC,EAAOJ,EAAKA,EAAKE,EAAKA,EAC5B,GAAa,IAATE,EAAY,OAAOC,KAAKC,MAAMV,EAAKE,EAAEG,EAAGJ,EAAKC,EAAEK,GAEnD,IAAII,IAAMX,EAAKE,EAAEG,GAAKD,GAAMH,EAAKC,EAAEK,GAAKD,GAAME,EAE9C,OADAG,EAAIA,EAAI,EAAI,EAAIA,EAAI,EAAI,EAAIA,EACrBF,KAAKC,MAAMV,GAAME,EAAEG,EAAIM,EAAIP,GAAKH,GAAMC,EAAEK,EAAII,EAAIL,GACzD,CAGM,SAAUM,EAAWZ,EAAYC,EAAYC,EAAgBC,GACjE,MAAMC,EAAKD,EAAEE,EAAIH,EAAEG,EACbC,EAAKH,EAAEI,EAAIL,EAAEK,EACbM,EAAMJ,KAAKC,MAAMN,EAAIE,GAC3B,OAAY,IAARO,EAAkBJ,KAAKC,MAAMV,EAAKE,EAAEG,EAAGJ,EAAKC,EAAEK,GAC3CE,KAAKK,IAAIR,GAAMN,EAAKE,EAAEG,GAAKD,GAAMH,EAAKC,EAAEK,IAAMM,CACvD,CAGgB,SAAAE,EAAiBd,EAAYM,GAC3C,OAAOE,KAAKK,IAAIb,EAAKM,EACvB,CAGgB,SAAAS,EAAehB,EAAYK,GACzC,OAAOI,KAAKK,IAAId,EAAKK,EACvB,UAGgBY,EAAejB,EAAYC,EAAYiB,GACrD,IAAIC,EAAOC,IACX,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAAII,OAAQD,IAAK,CACnC,MAAME,EAAIxB,EAAcC,EAAIC,EAAIiB,EAAIG,EAAI,GAAIH,EAAIG,IAC5CE,EAAIJ,IAAMA,EAAOI,GAEvB,OAAOJ,CACT,CAGgB,SAAAK,EAAOtB,EAAgBC,GACrC,MAAO,CACLsB,GAAIhB,KAAKiB,IAAIxB,EAAEG,EAAGF,EAAEE,GAAIsB,GAAIlB,KAAKiB,IAAIxB,EAAEK,EAAGJ,EAAEI,GAC5CqB,GAAInB,KAAKoB,IAAI3B,EAAEG,EAAGF,EAAEE,GAAIyB,GAAIrB,KAAKoB,IAAI3B,EAAEK,EAAGJ,EAAEI,GAEhD,CAOM,SAAUwB,EAAW/B,EAAYC,EAAYC,EAAgBC,EAAgB6B,GACjF,MAAMC,EAAIT,EAAOtB,EAAGC,GAEpB,GADeH,GAAMiC,EAAER,IAAMzB,GAAMiC,EAAEL,IAAM3B,GAAMgC,EAAEN,IAAM1B,GAAMgC,EAAEH,IACnDE,EAAQ,OAAO,EAC7B,MAAME,EAAyB,CAC7B,CAAE7B,EAAG4B,EAAER,GAAIlB,EAAG0B,EAAEN,IAAM,CAAEtB,EAAG4B,EAAEL,GAAIrB,EAAG0B,EAAEN,IACtC,CAAEtB,EAAG4B,EAAEL,GAAIrB,EAAG0B,EAAEH,IAAM,CAAEzB,EAAG4B,EAAER,GAAIlB,EAAG0B,EAAEH,KAExC,IAAIX,EAAOC,IACX,IAAK,IAAIC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAME,EAAIxB,EAAcC,EAAIC,EAAIiC,EAAQb,GAAIa,GAASb,EAAI,GAAK,IAC1DE,EAAIJ,IAAMA,EAAOI,GAEvB,OAAOJ,CACT,CAOM,SAAUgB,EAAcnC,EAAYC,EAAYC,EAAgBC,EAAgB6B,GACpF,MAAMC,EAAIT,EAAOtB,EAAGC,GACdiC,GAAMH,EAAER,GAAKQ,EAAEL,IAAM,EACrBS,GAAMJ,EAAEN,GAAKM,EAAEH,IAAM,EACrBQ,EAAK7B,KAAKoB,IAAI,MAAOI,EAAEL,GAAKK,EAAER,IAAM,GACpCc,EAAK9B,KAAKoB,IAAI,MAAOI,EAAEH,GAAKG,EAAEN,IAAM,GACpCa,GAAMxC,EAAKoC,GAAME,EACjBG,GAAMxC,EAAKoC,GAAME,EACjBG,EAAOjC,KAAKC,MAAM8B,EAAIC,GAC5B,OAAIT,GAAUU,GAAQ,EAAU,EACzBjC,KAAKK,IAAI4B,EAAO,GAAKjC,KAAKiB,IAAIY,EAAIC,EAC3C,CAGM,SAAUI,EACdzC,EAAgBC,EAAgByC,EAAeC,EAAeC,GAE9D,MAAM1C,EAAKD,EAAEE,EAAIH,EAAEG,EACnB,GAAW,IAAPD,EAAU,MAAO,CAACF,EAAGC,GACzB,MAAM4C,GAAS5C,EAAEI,EAAIL,EAAEK,GAAKH,EAG5B,MAAO,CAFOyC,EAAO,CAAExC,EAAG,EAAGE,EAAGL,EAAEK,GAAK,EAAIL,EAAEG,GAAK0C,GAAU7C,EAChD4C,EAAQ,CAAEzC,EAAGuC,EAAOrC,EAAGL,EAAEK,GAAKqC,EAAQ1C,EAAEG,GAAK0C,GAAU5C,EAErE,CC3FA,MAAM6C,EAAW,IAAIC,IAEf,SAAUC,EAAoBC,GAClCH,EAASI,IAAID,EAAKE,GAAIF,EACxB,CAEM,SAAUG,EAAeD,GAC7B,MAAM1C,EAAIqC,EAASO,IAAIF,GACvB,QAAUG,IAAN7C,EAAiB,MAAM,IAAI8C,MAAM,0CAA0CJ,MAC/E,OAAO1C,CACT,CAEM,SAAU+C,EAAeL,GAC7B,OAAOL,EAASW,IAAIN,EACtB,UAEgBO,IACd,OAAOC,MAAMC,KAAKd,EAASe,SAC7B,CAIA,SAASC,EAAYC,GACnB,MAAMC,IAAEA,EAAGC,GAAEA,EAAEC,MAAEA,GAAUH,EACrB1C,EAAI4C,EAAGE,IACbH,EAAII,YAAcF,EAAMG,MACxBL,EAAIM,UAAY/D,KAAKoB,IAAI,EAAGpB,KAAKgE,MAAML,EAAMI,UAAYjD,IACzD2C,EAAIQ,SAAW,QACfR,EAAIS,QAAU,QACdT,EAAIU,YACkB,WAApBR,EAAMS,UAAyB,CAAC,EAAItD,EAAG,EAAIA,GACnB,WAApB6C,EAAMS,UAAyB,CAAC,EAAItD,EAAG,EAAIA,GAC3C,GAER,CAEA,SAASuD,EAAYb,GACnB,OAAOA,EAAEG,MAAMW,WAAad,EAAEG,MAAMG,KACtC,CAEA,SAASS,EAASf,EAAgBgB,GAChC,IAAqB,IAAjBhB,EAAEG,MAAMc,KAAe,OAC3B,MAAMhB,IAAEA,GAAQD,EAChBC,EAAIiB,OACJjB,EAAIkB,YAAcnB,EAAEG,MAAMiB,aAAe,IACzCnB,EAAIoB,UAAYR,EAAYb,GAC5BgB,IACAf,EAAIqB,SACN,CAEA,SAASC,EAAMvB,EAAgBwB,EAAcpF,EAAWE,EAAWgE,GACjE,MAAML,IAAEA,EAAGC,GAAEA,EAAEC,MAAEA,GAAUH,EACrByB,GAAQtB,EAAMuB,UAAY,IAAMxB,EAAGE,IACzCH,EAAIiB,OACJjB,EAAIU,YAAY,IAChBV,EAAI0B,KAAO,GAAGF,2CACdxB,EAAI2B,aAAe,SACnB3B,EAAI4B,UAAY,OAChB,MAAMC,EAAI7B,EAAI8B,YAAYP,GAAM7C,MAChCsB,EAAIkB,YAAc,IAClBlB,EAAIoB,UAAYnB,EAAG8B,MAAMC,WACzBhC,EAAIiC,SAAS9F,EAAI,EAAI8D,EAAGE,IAAK9D,EAAW,IAAPmF,EAAaK,EAAI,EAAI5B,EAAGE,IAAY,IAAPqB,GAC9DxB,EAAIkB,YAAc,EAClBlB,EAAIoB,UAAYf,GAASH,EAAMG,MAC/BL,EAAIkC,SAASX,EAAMpF,EAAGE,GACtB2D,EAAIqB,SACN,CAEA,MAAMc,EAAiC,CAAC,EAAG,KAAO,KAAO,GAAK,KAAO,KAAO,GAK5E,SAASC,EAASjD,EAAYkD,EAAc1D,EAAeC,GACzD,MAAO,CACLO,KAAIkD,OAAMC,OAAQ,EAClBC,aAAc,CAAEC,WAAY7D,EAAM8D,YAAa7D,GAC/C8D,KAAO3C,IACL,MAAO/D,EAAGC,GAAKwC,EACbsB,EAAE/C,IAAI,GAAI+C,EAAE/C,IAAI,GAAI+C,EAAEE,GAAG0C,UAAY5C,EAAEE,GAAGE,IAC1CJ,EAAEG,MAAMsC,YAAc7D,EAAMoB,EAAEG,MAAMuC,aAAe7D,GAErDkB,EAAYC,GACZA,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAO7G,EAAEG,EAAGH,EAAEK,GACpB0D,EAAEC,IAAI8C,OAAO7G,EAAEE,EAAGF,EAAEI,GACpB0D,EAAEC,IAAI+C,SACNhD,EAAEC,IAAIU,YAAY,KAEpBsC,SAAU,CAAC7G,EAAGE,EAAG4G,KACf,MAAMC,EAAKD,EAAEE,QAAQjD,MAAMsC,YAAc7D,EACnCyE,EAAKH,EAAEE,QAAQjD,MAAMuC,aAAe7D,EAC1C,GAAIsE,GAAME,EAAI,OAAO1G,EAAWP,EAAGE,EAAG4G,EAAEjG,IAAI,GAAIiG,EAAEjG,IAAI,IACtD,MAAOhB,EAAGC,GAAKwC,EAAcwE,EAAEjG,IAAI,GAAIiG,EAAEjG,IAAI,GAAIiG,EAAEhD,GAAG0C,UAAWO,EAAIE,GACrE,OAAOvH,EAAcM,EAAGE,EAAGL,EAAGC,IAGpC,CAEO,MAAMoH,EAAajB,EAAS,aAAc,cAAc,GAAO,GACzDkB,EAAMlB,EAAS,MAAO,OAAO,GAAO,GACpCmB,EAAgBnB,EAAS,gBAAiB,iBAAiB,GAAM,GAEjEoB,EAAqB,CAChCrE,GAAI,QAASkD,KAAM,QAASC,OAAQ,EACpCI,KAAO3C,IACL,MAAO/D,EAAGC,GAAK8D,EAAE/C,IACjB8C,EAAYC,GACZA,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAO7G,EAAEG,EAAGH,EAAEK,GACpB0D,EAAEC,IAAI8C,OAAO7G,EAAEE,EAAGF,EAAEI,GACpB0D,EAAEC,IAAI+C,SAEN,MAAMU,EAAOlH,KAAKoB,IAAI,EAAuB,EAApBoC,EAAEG,MAAMI,WAAiBP,EAAEE,GAAGE,IACjDuD,EAAMnH,KAAKoH,MAAM1H,EAAEI,EAAIL,EAAEK,EAAGJ,EAAEE,EAAIH,EAAEG,GAC1C4D,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAO5G,EAAEE,EAAGF,EAAEI,GACpB0D,EAAEC,IAAI8C,OAAO7G,EAAEE,EAAIsH,EAAOlH,KAAKqH,IAAIF,EAAM,IAAMzH,EAAEI,EAAIoH,EAAOlH,KAAKsH,IAAIH,EAAM,KAC3E3D,EAAEC,IAAI8C,OAAO7G,EAAEE,EAAIsH,EAAOlH,KAAKqH,IAAIF,EAAM,IAAMzH,EAAEI,EAAIoH,EAAOlH,KAAKsH,IAAIH,EAAM,KAC3E3D,EAAEC,IAAI8D,YACN/D,EAAEC,IAAIoB,UAAYrB,EAAEG,MAAMG,MAC1BN,EAAEC,IAAIgB,OACNjB,EAAEC,IAAIU,YAAY,KAEpBsC,SAAU,CAAC7G,EAAGE,EAAG4G,IAAMpH,EAAcM,EAAGE,EAAG4G,EAAEjG,IAAI,GAAIiG,EAAEjG,IAAI,KAGhD+G,EAA+B,CAC1C5E,GAAI,kBAAmBkD,KAAM,kBAAmBC,OAAQ,EACxDC,aAAc,CAAEyB,YAAY,GAC5BtB,KAAO3C,IACL,MAAM1D,EAAIE,KAAKgE,MAAMR,EAAE/C,IAAI,GAAGX,GAAK,GACnCyD,EAAYC,GACZA,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAO,EAAGxG,GAChB0D,EAAEC,IAAI8C,OAAO/C,EAAEE,GAAG0C,UAAY5C,EAAEE,GAAGE,IAAK9D,GACxC0D,EAAEC,IAAI+C,SACNhD,EAAEC,IAAIU,YAAY,KACS,IAAvBX,EAAEG,MAAM8D,YACV1C,EAAMvB,EAAGA,EAAEkE,YAAYlE,EAAEoD,QAAQb,OAAO,GAAG4B,OAAQ,EAAInE,EAAEE,GAAGE,IAAK9D,EAAI,EAAI0D,EAAEE,GAAGE,MAGlF6C,SAAU,CAACmB,EAAI9H,EAAG4G,IAAMpG,EAAiBR,EAAG4G,EAAEjG,IAAI,GAAGX,IAG1C+H,EAA8B,CACzCjF,GAAI,iBAAkBkD,KAAM,iBAAkBC,OAAQ,EACtDC,aAAc,CAAEyB,YAAY,GAC5BtB,KAAO3C,IACL,MAAM1D,EAAIE,KAAKgE,MAAMR,EAAE/C,IAAI,GAAGX,GAAK,GACnCyD,EAAYC,GACZA,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAO9C,EAAE/C,IAAI,GAAGb,EAAGE,GACzB0D,EAAEC,IAAI8C,OAAO/C,EAAEE,GAAG0C,UAAY5C,EAAEE,GAAGE,IAAK9D,GACxC0D,EAAEC,IAAI+C,SACNhD,EAAEC,IAAIU,YAAY,KACS,IAAvBX,EAAEG,MAAM8D,YACV1C,EAAMvB,EAAGA,EAAEkE,YAAYlE,EAAEoD,QAAQb,OAAO,GAAG4B,OAAQnE,EAAE/C,IAAI,GAAGb,EAAI,EAAI4D,EAAEE,GAAGE,IAAK9D,EAAI,EAAI0D,EAAEE,GAAGE,MAG/F6C,SAAU,CAAC7G,EAAGE,EAAG4G,IAAO9G,EAAI8G,EAAEjG,IAAI,GAAGb,EAAI,KAAOU,EAAiBR,EAAG4G,EAAEjG,IAAI,GAAGX,IAGlEgI,EAA6B,CACxClF,GAAI,gBAAiBkD,KAAM,gBAAiBC,OAAQ,EACpDI,KAAO3C,IACL,MAAM5D,EAAII,KAAKgE,MAAMR,EAAE/C,IAAI,GAAGb,GAAK,GACnC2D,EAAYC,GACZA,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAO1G,EAAG,GAChB4D,EAAEC,IAAI8C,OAAO3G,EAAG4D,EAAEE,GAAGqE,WAAavE,EAAEE,GAAGE,KACvCJ,EAAEC,IAAI+C,SACNhD,EAAEC,IAAIU,YAAY,KAEpBsC,SAAU,CAAC7G,EAAGoI,EAAItB,IAAMnG,EAAeX,EAAG8G,EAAEjG,IAAI,GAAGb,IAGxCqI,EAA0B,CACrCrF,GAAI,aAAckD,KAAM,aAAcC,OAAQ,EAC9CI,KAAO3C,IACL,MAAM5D,EAAII,KAAKgE,MAAMR,EAAE/C,IAAI,GAAGb,GAAK,GAC7BE,EAAIE,KAAKgE,MAAMR,EAAE/C,IAAI,GAAGX,GAAK,GACnCyD,EAAYC,GACZA,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAO1G,EAAG,GAAI4D,EAAEC,IAAI8C,OAAO3G,EAAG4D,EAAEE,GAAGqE,WAAavE,EAAEE,GAAGE,KAC3DJ,EAAEC,IAAI6C,OAAO,EAAGxG,GAAI0D,EAAEC,IAAI8C,OAAO/C,EAAEE,GAAG0C,UAAY5C,EAAEE,GAAGE,IAAK9D,GAC5D0D,EAAEC,IAAI+C,SACNhD,EAAEC,IAAIU,YAAY,KAEpBsC,SAAU,CAAC7G,EAAGE,EAAG4G,IAAM1G,KAAKiB,IAAIV,EAAeX,EAAG8G,EAAEjG,IAAI,GAAGb,GAAIU,EAAiBR,EAAG4G,EAAEjG,IAAI,GAAGX,KAKjFoI,EAAyB,CACpCtF,GAAI,YAAakD,KAAM,YAAaC,OAAQ,EAC5CC,aAAc,CAAEvB,MAAM,GACtB0B,KAAO3C,IACL,MAAMhC,EAAIT,EAAOyC,EAAE/C,IAAI,GAAI+C,EAAE/C,IAAI,IACjC8D,EAASf,EAAG,IAAMA,EAAEC,IAAIiC,SAASlE,EAAER,GAAIQ,EAAEN,GAAIM,EAAEL,GAAKK,EAAER,GAAIQ,EAAEH,GAAKG,EAAEN,KACnEqC,EAAYC,GACZA,EAAEC,IAAI0E,WAAW3G,EAAER,GAAIQ,EAAEN,GAAIM,EAAEL,GAAKK,EAAER,GAAIQ,EAAEH,GAAKG,EAAEN,IACnDsC,EAAEC,IAAIU,YAAY,KAEpBsC,SAAU,CAAC7G,EAAGE,EAAG4G,IAAMpF,EAAW1B,EAAGE,EAAG4G,EAAEjG,IAAI,GAAIiG,EAAEjG,IAAI,IAA6B,IAAzBiG,EAAEE,QAAQjD,MAAMc,OAGjE2D,EAAuB,CAClCxF,GAAI,UAAWkD,KAAM,UAAWC,OAAQ,EACxCC,aAAc,CAAEvB,MAAM,GACtB0B,KAAO3C,IACL,MAAMhC,EAAIT,EAAOyC,EAAE/C,IAAI,GAAI+C,EAAE/C,IAAI,IAC3BkB,GAAMH,EAAER,GAAKQ,EAAEL,IAAM,EACrBS,GAAMJ,EAAEN,GAAKM,EAAEH,IAAM,EACrBQ,EAAK7B,KAAKoB,IAAI,GAAII,EAAEL,GAAKK,EAAER,IAAM,GACjCc,EAAK9B,KAAKoB,IAAI,GAAII,EAAEH,GAAKG,EAAEN,IAAM,GACjCmH,EAAO,KACX7E,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6E,QAAQ3G,EAAIC,EAAIC,EAAIC,EAAI,EAAG,EAAa,EAAV9B,KAAKuI,KAE3ChE,EAASf,EAAG,KAAQ6E,IAAQ7E,EAAEC,IAAIgB,SAClClB,EAAYC,GACZ6E,IACA7E,EAAEC,IAAI+C,SACNhD,EAAEC,IAAIU,YAAY,KAEpBsC,SAAU,CAAC7G,EAAGE,EAAG4G,IAAMhF,EAAc9B,EAAGE,EAAG4G,EAAEjG,IAAI,GAAIiG,EAAEjG,IAAI,IAA6B,IAAzBiG,EAAEE,QAAQjD,MAAMc,OAGpE+D,EAAgC,CAC3C5F,GAAI,mBAAoBkD,KAAM,mBAAoBC,OAAQ,EAC1DC,aAAc,CAAEvB,MAAM,GACtB0B,KAAO3C,IACL,MAAO/D,EAAGC,EAAGQ,GAAKsD,EAAE/C,IAEdZ,EAAKK,EAAEJ,GAAKL,EAAEK,EAAkB,IAAbJ,EAAEI,EAAIL,EAAEK,IAC3B2I,EAAK,CAAE7I,EAAGH,EAAEG,EAAGE,EAAGL,EAAEK,EAAID,GACxB6I,EAAK,CAAE9I,EAAGF,EAAEE,EAAGE,EAAGJ,EAAEI,EAAID,GAC9B0E,EAASf,EAAG,KACVA,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAO7G,EAAEG,EAAGH,EAAEK,GAAI0D,EAAEC,IAAI8C,OAAO7G,EAAEE,EAAGF,EAAEI,GAC5C0D,EAAEC,IAAI8C,OAAOmC,EAAG9I,EAAG8I,EAAG5I,GAAI0D,EAAEC,IAAI8C,OAAOkC,EAAG7I,EAAG6I,EAAG3I,GAChD0D,EAAEC,IAAI8D,YACN/D,EAAEC,IAAIgB,SAERlB,EAAYC,GACZA,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAO7G,EAAEG,EAAGH,EAAEK,GAAI0D,EAAEC,IAAI8C,OAAO7G,EAAEE,EAAGF,EAAEI,GAC5C0D,EAAEC,IAAI6C,OAAOmC,EAAG7I,EAAG6I,EAAG3I,GAAI0D,EAAEC,IAAI8C,OAAOmC,EAAG9I,EAAG8I,EAAG5I,GAChD0D,EAAEC,IAAI+C,SACNhD,EAAEC,IAAIU,YAAY,KAEpBsC,SAAU,CAAC7G,EAAGE,EAAG4G,KACf,MAAOjH,EAAGC,EAAGQ,GAAKwG,EAAEjG,IACdZ,EAAKK,EAAEJ,GAAKL,EAAEK,EAAkB,IAAbJ,EAAEI,EAAIL,EAAEK,IAC3B6I,EAAKrJ,EAAcM,EAAGE,EAAGL,EAAGC,GAC5BkJ,EAAKtJ,EAAcM,EAAGE,EAAG,CAAEF,EAAGH,EAAEG,EAAGE,EAAGL,EAAEK,EAAID,GAAM,CAAED,EAAGF,EAAEE,EAAGE,EAAGJ,EAAEI,EAAID,IAC3E,OAAOG,KAAKiB,IAAI0H,EAAIC,KAOxB,SAASC,EAAQjG,EAAYkD,EAAcgD,GACzC,MAAO,CACLlG,KAAIkD,OAAMC,OAAQ+C,EAClB9C,aAAc,CAAEyB,YAAY,EAAMsB,OAAQ,IAAInD,GAAcnB,MAAM,EAAMG,YAAa,KACrFuB,KAAO3C,IACL,MAAMuF,EAASvF,EAAEG,MAAMoF,QAAUnD,EAC3BoD,EAAIxF,EAAEoD,QAAQb,OAEd1C,EAAmB,IAAZyF,EAAgBE,EAAE,GAAGrB,MAAQqB,EAAE,GAAGrB,MACzCsB,EAAuBD,EAAE,GAAGrB,MAAQqB,EAAE,GAAGrB,MACzC3G,EAAKhB,KAAKiB,IAAIuC,EAAE/C,IAAI,GAAGb,EAAG4D,EAAE/C,IAAIqI,EAAU,GAAGlJ,GAC7CuB,EAAKnB,KAAKoB,IAAIoC,EAAE/C,IAAI,GAAGb,EAAG4D,EAAE/C,IAAIqI,EAAU,GAAGlJ,GAC7CyC,GAAgC,IAAxBmB,EAAEG,MAAMuC,YAAuB1C,EAAEE,GAAG0C,UAAY5C,EAAEE,GAAGE,IAAMzC,EACzEoC,EAAYC,GACZ,IAAI0F,EAAuB,KAC3B,IAAK,MAAMC,KAAMJ,EAAQ,CACvB,MAAMpB,EAAQtE,EAAO4F,EAAOE,EACtBrJ,EAAIE,KAAKgE,MAAMR,EAAEE,GAAG0F,WAAWC,SAAS1B,GAASnE,EAAEE,GAAGE,KAAO,IAC9C,IAAjBJ,EAAEG,MAAMc,MAA2B,OAAVyE,IAC3B1F,EAAEC,IAAIiB,OACNlB,EAAEC,IAAIkB,YAAcnB,EAAEG,MAAMiB,aAAe,IAC3CpB,EAAEC,IAAIoB,UAAYR,EAAYb,GAC9BA,EAAEC,IAAIiC,SAAS1E,EAAIhB,KAAKiB,IAAIiI,EAAOpJ,GAAIuC,EAAQrB,EAAIhB,KAAKK,IAAIP,EAAIoJ,IAChE1F,EAAEC,IAAIqB,WAERoE,EAAQpJ,EACR0D,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAOtF,EAAIlB,GACjB0D,EAAEC,IAAI8C,OAAOlE,EAAOvC,GACpB0D,EAAEC,IAAI+C,UACqB,IAAvBhD,EAAEG,MAAM8D,YACV1C,EAAMvB,EAAG,IAAS,IAAL2F,GAAUG,QAAQ,QAAQ9F,EAAEkE,YAAYC,KAAU3G,EAAK,EAAIwC,EAAEE,GAAGE,IAAK9D,EAAI,EAAI0D,EAAEE,GAAGE,KAGnGJ,EAAEC,IAAIU,YAAY,KAEpBsC,SAAU,CAAC7G,EAAGE,EAAG4G,KACf,MAAMqC,EAASrC,EAAEE,QAAQjD,MAAMoF,QAAUnD,EACnCoD,EAAItC,EAAEE,QAAQb,OACd1C,EAAmB,IAAZyF,EAAgBE,EAAE,GAAGrB,MAAQqB,EAAE,GAAGrB,MACzCsB,EAAOD,EAAE,GAAGrB,MAAQqB,EAAE,GAAGrB,MACzB3G,EAAKhB,KAAKiB,IAAIyF,EAAEjG,IAAI,GAAGb,EAAG8G,EAAEjG,IAAIqI,EAAU,GAAGlJ,GAC7CuB,GAAqC,IAAhCuF,EAAEE,QAAQjD,MAAMuC,YACvBQ,EAAEhD,GAAG0C,UAAYpG,KAAKoB,IAAIsF,EAAEjG,IAAI,GAAGb,EAAG8G,EAAEjG,IAAIqI,EAAU,GAAGlJ,GAC7D,GAAIA,EAAIoB,EAAK,GAAKpB,EAAIuB,EAAK,EAAG,OAAO,KACrC,IAAIT,EAAOC,IACX,IAAK,MAAMwI,KAAMJ,EAAQ,CACvB,MAAMjI,EAAId,KAAKK,IAAIP,EAAI4G,EAAEhD,GAAG0F,WAAWC,SAAShG,EAAO4F,EAAOE,IAC1DrI,EAAIJ,IAAMA,EAAOI,GAEvB,OAAOJ,GAGb,CAEO,MAAM6I,EAAkBV,EAAQ,kBAAmB,kBAAmB,GAChEW,EAAgBX,EAAQ,gBAAiB,gBAAiB,GAI1DY,EAAuB,CAClC7G,GAAI,UAAWkD,KAAM,UAAWC,OAAQ,EACxCC,aAAc,CAAEvB,MAAM,EAAMgD,YAAY,EAAM7C,YAAa,IAC3DuB,KAAO3C,IACL,MAAMhC,EAAIT,EAAOyC,EAAE/C,IAAI,GAAI+C,EAAE/C,IAAI,IAC3BuI,EAAIxF,EAAEoD,QAAQb,OACd2D,EAAMV,EAAE,GAAGrB,MAAQqB,EAAE,GAAGrB,MACxBgC,EAAqB,IAAfX,EAAE,GAAGrB,MAAe+B,EAAMV,EAAE,GAAGrB,MAAS,IAAM,EACpDiC,EAAKF,GAAO,EACZG,EAAOD,EAAK,UAAY,UAC9BpG,EAAEC,IAAIiB,OACNlB,EAAEC,IAAIkB,YAAcnB,EAAEG,MAAMiB,aAAe,GAC3CpB,EAAEC,IAAIoB,UAAYgF,EAClBrG,EAAEC,IAAIiC,SAASlE,EAAER,GAAIQ,EAAEN,GAAIM,EAAEL,GAAKK,EAAER,GAAIQ,EAAEH,GAAKG,EAAEN,IACjDsC,EAAEC,IAAIqB,UACNvB,EAAYC,GACZA,EAAEC,IAAII,YAAcgG,EACpBrG,EAAEC,IAAI0E,WAAW3G,EAAER,GAAIQ,EAAEN,GAAIM,EAAEL,GAAKK,EAAER,GAAIQ,EAAEH,GAAKG,EAAEN,IACnDsC,EAAEC,IAAIU,YAAY,IAGlB,MAAM2F,EAAKtG,EAAEE,GAAGqG,UAAUC,iBAAiBhB,EAAE,GAAGiB,MAC1CC,EAAK1G,EAAEE,GAAGqG,UAAUC,iBAAiBhB,EAAE,GAAGiB,MAC1CE,EAAOnK,KAAKK,IAAIL,KAAKgE,MAAMkG,EAAKJ,IAChCM,EAAOR,EAAK,IAAM,GACxB7E,EACEvB,EAAG,GAAG4G,IAAO5G,EAAEkE,YAAYgC,QAAUU,IAAOT,EAAIL,QAAQ,SAASa,SACjE3I,EAAER,GAAK,EAAIwC,EAAEE,GAAGE,IAAKpC,EAAEN,GAAK,GAAKsC,EAAEE,GAAGE,IAAKiG,IAG/CpD,SAAU,CAAC7G,EAAGE,EAAG4G,IAAMpF,EAAW1B,EAAGE,EAAG4G,EAAEjG,IAAI,GAAIiG,EAAEjG,IAAI,IAAI,IAI9D,SAAS4J,EAAazH,EAAYkD,EAAcwE,GAC9C,MAAO,CACL1H,KAAIkD,OAAMC,OAAQ,EAClBC,aAAc,CAAEyB,YAAY,EAAM7C,YAAa,IAAM2F,YAAa,IAAQC,KAAM,GAChFrE,KAAO3C,IACL,MAAOiH,EAAOC,EAAQC,GAAQnH,EAAEoD,QAAQb,OAClCjF,EAAI0C,EAAEE,GAAGE,IACT5C,EAAKhB,KAAKiB,IAAIuC,EAAE/C,IAAI,GAAGb,EAAG4D,EAAE/C,IAAI,GAAGb,EAAG4D,EAAE/C,IAAI,GAAGb,GAC/CuB,EAAKnB,KAAKoB,IAAIoC,EAAE/C,IAAI,GAAGb,EAAG4D,EAAE/C,IAAI,GAAGb,EAAG4D,EAAE/C,IAAI,GAAGb,GAC/CgL,EAAKpH,EAAEE,GAAG0F,WAAWC,SAASoB,EAAM9C,OAAS7G,EAC7C+J,EAAKrH,EAAEE,GAAG0F,WAAWC,SAASqB,EAAO/C,OAAS7G,EAC9CgK,EAAKtH,EAAEE,GAAG0F,WAAWC,SAASsB,EAAKhD,OAAS7G,EAC5CiK,EAAO,CAACC,EAAYC,EAAYnH,KACpCN,EAAEC,IAAIiB,OACNlB,EAAEC,IAAIkB,YAAcnB,EAAEG,MAAMiB,aAAe,IAC3CpB,EAAEC,IAAIoB,UAAYf,EAClBN,EAAEC,IAAIiC,SAAS1E,EAAIhB,KAAKiB,IAAI+J,EAAIC,GAAK9J,EAAKH,EAAIhB,KAAKK,IAAI4K,EAAKD,IAC5DxH,EAAEC,IAAIqB,WAERiG,EAAKH,EAAIC,EAAI,WACbE,EAAKH,EAAIE,EAAI,WACbvH,EAAYC,GACZ,IAAK,MAAM1D,IAAK,CAAC8K,EAAIC,EAAIC,GAAK,CAC5B,MAAMI,EAAKlL,KAAKgE,MAAMlE,GAAK,GAC3B0D,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAOtF,EAAIkK,GACjB1H,EAAEC,IAAI8C,OAAOpF,EAAI+J,GACjB1H,EAAEC,IAAI+C,SAGR,GADAhD,EAAEC,IAAIU,YAAY,KACS,IAAvBX,EAAEG,MAAM8D,WAAsB,OAClC,MAAM+C,EAAOxK,KAAKK,IAAIoK,EAAM9C,MAAQgD,EAAKhD,OACnCwD,EAASnL,KAAKK,IAAIqK,EAAO/C,MAAQ8C,EAAM9C,OACvCyD,EAAKZ,EAAO,EAAIW,EAASX,EAAO,EAGhCa,EAAU7H,EAAEG,MAAM4G,aAAe,EACjCe,EAAU9H,EAAEG,MAAM6G,MAAQ,EAC1Be,EAAMf,EAAO,GAAKa,EAAU,EAAIrL,KAAKwL,MAAOH,EAAUC,EAAU,IAAOd,GAAQ,EAErFzF,EAAMvB,EAAG,GADG8G,EAAO,OAAS,gBACJc,EAAG9B,QAAQ,KAAKiC,EAAM,EAAI,SAASA,IAAQ,KAAMvK,EAAK,EAAIF,EAAG8J,EAAK,GAAK9J,IAEjG2F,SAAU,CAAC7G,EAAGE,EAAG4G,KACf,MAAM1F,EAAKhB,KAAKiB,IAAIyF,EAAEjG,IAAI,GAAGb,EAAG8G,EAAEjG,IAAI,GAAGb,EAAG8G,EAAEjG,IAAI,GAAGb,GAC/CuB,EAAKnB,KAAKoB,IAAIsF,EAAEjG,IAAI,GAAGb,EAAG8G,EAAEjG,IAAI,GAAGb,EAAG8G,EAAEjG,IAAI,GAAGb,GACrD,GAAIA,EAAIoB,EAAK,GAAKpB,EAAIuB,EAAK,EAAG,OAAO,KACrC,MAAMsK,EAAK/E,EAAEE,QAAQb,OAAO2F,IAAK1C,GAAMtC,EAAEhD,GAAG0F,WAAWC,SAASL,EAAErB,QAC5DgE,EAAK3L,KAAKiB,OAAOwK,GACjBG,EAAK5L,KAAKoB,OAAOqK,GACvB,OAAO3L,GAAK6L,GAAM7L,GAAK8L,EAAK,EAAI5L,KAAKiB,IAAIjB,KAAKK,IAAIP,EAAI6L,GAAK3L,KAAKK,IAAIP,EAAI8L,KAG9E,CAEO,MAAMC,EAAgBxB,EAAa,gBAAiB,iBAAiB,GAC/DyB,EAAiBzB,EAAa,iBAAkB,kBAAkB,GAS/E,SAAS0B,EAASpI,EAAqBqI,GACrC,MAAMC,EAA8B,SAArBtI,EAAMuI,WAAwB,OAAS,GAEtD,MAAO,GAD4B,WAApBvI,EAAMwI,UAAyB,UAAY,KACvCF,IAASD,OAAYrI,EAAMyI,YAN3B,yEAOrB,CA0BA,SAASC,EACP5I,EACAE,EACAC,GAEA,MAAMqB,GAAQtB,EAAMuB,UAAY,IAAMtB,EACtCH,EAAI0B,KAAO4G,EAASpI,EAAOsB,GAC3B,MACMqH,EA3BR,SAAmB7I,EAA+BE,EAAqB4I,GACrE,MAAMC,GAAc7I,EAAMqB,MAAQ,IAAIyH,MAAM,MAC5C,IAAmB,IAAf9I,EAAM+I,KAAe,OAAOF,EAChC,MAAMG,EAAgB,GACtB,IAAK,MAAMC,KAAQJ,EAAY,CAC7B,MAAMK,EAAQD,EAAKH,MAAM,OAAOK,OAAQxH,GAAY,KAANA,GAC9C,GAAqB,IAAjBuH,EAAMhM,OAAc,CAAE8L,EAAII,KAAK,IAAK,SACxC,IAAIC,EAAOH,EAAM,GACjB,IAAK,IAAIjM,EAAI,EAAGA,EAAIiM,EAAMhM,OAAQD,IAAK,CACrC,MAAMqM,EAAO,GAAGD,KAAQH,EAAMjM,KAC1B6C,EAAI8B,YAAY0H,GAAM9K,MAAQoK,GAAYI,EAAII,KAAKC,GAAOA,EAAOH,EAAMjM,IACtEoM,EAAOC,EAEdN,EAAII,KAAKC,GAEX,OAAOL,CACT,CAWgBO,CAAUzJ,EAAKE,GADXA,EAAMwJ,WAAa,KAAOvJ,GAE5C,IAAIzB,EAAQ,EACZ,IAAK,MAAMiL,KAAKd,EAAOnK,EAAQnC,KAAKoB,IAAIe,EAAOsB,EAAI8B,YAAY6H,GAAGjL,OAClE,MAAMkL,EA7CS,KA6CIpI,EACnB,MAAO,CACLqH,QACAnK,MAAOA,EAAQmL,GAAe1J,EAC9B2J,OAAQjB,EAAMzL,OAASwM,EAAaC,GAAe1J,EACnDyJ,aAEJ,CAEa,MAAAG,EAAoB,CAC/B5K,GAAI,OAAQkD,KAAM,OAAQC,OAAQ,EAClCC,aAAc,CACZhB,KAAM,OAAQE,SAAU,GAAIgH,WAAY,SAAUC,UAAW,SAC7D1G,YAAY,EAAOgI,kBAAmB,EAAGC,QAAQ,EAAOhB,MAAM,EAC9DS,UAAW,IAAK9H,UAAW,QAE7Bc,KAAO3C,IACL,MAAMC,IAAEA,EAAGC,GAAEA,EAAEC,MAAEA,GAAUH,EACrB1C,EAAI4C,EAAGE,IACP+J,EAAMtB,EAAQ5I,EAAKE,EAAO7C,GAC1BlB,EAAI4D,EAAE/C,IAAI,GAAGb,EACbE,EAAI0D,EAAE/C,IAAI,GAAGX,EAEnB2D,EAAIiB,OACJjB,EAAIU,YAAY,KACS,IAArBR,EAAM8B,aACRhC,EAAIkB,YAAchB,EAAM8J,mBAAqB,EAC7ChK,EAAIoB,UAAYlB,EAAMiK,iBAAmBlK,EAAG8B,MAAMC,WAClDhC,EAAI4C,YACJ5C,EAAIoK,UAAUjO,EAAGE,EAAG6N,EAAIxL,MAAOwL,EAAIJ,OAAQ,EAAIzM,GAC/C2C,EAAIgB,OACJhB,EAAIkB,YAAc,IAEC,IAAjBhB,EAAM+J,SACRjK,EAAII,YAAcF,EAAMmK,aAAenK,EAAMG,MAC7CL,EAAIM,UAAY/D,KAAKoB,IAAI,EAAGuC,EAAMI,UAAYjD,GAC9C2C,EAAI4C,YACJ5C,EAAIoK,UAAUjO,EAAGE,EAAG6N,EAAIxL,MAAOwL,EAAIJ,OAAQ,EAAIzM,GAC/C2C,EAAI+C,UAGN/C,EAAI0B,KAAO4G,EAASpI,GAAQA,EAAMuB,UAAY,IAAMpE,GACpD2C,EAAIoB,UAAYlB,EAAMG,MACtBL,EAAI2B,aAAe,MACnB,MAAM2I,EAAQpK,EAAM0B,WAAa,OACjC5B,EAAI4B,UAAY0I,EAEhB,MAAMC,EAAe,WAAVD,EAAqBnO,EAAI+N,EAAIxL,MAAQ,EAClC,UAAV4L,EAAoBnO,EAAI+N,EAAIxL,MA9FnB,EA8FsCrB,EAC/ClB,EA/FS,EA+FMkB,EACnB,IAAImN,EAAKnO,EAhGI,EAgGWgB,EACxB,IAAK,MAAMkM,KAAQW,EAAIrB,MACrB7I,EAAIkC,SAASqH,EAAMgB,EAAIC,GACvBA,GAAMN,EAAIN,WAGZ5J,EAAIqB,WAEN2B,SAAU,CAAC7G,EAAGE,EAAG4G,KAGf,MAAM/C,EAAQ+C,EAAEE,QAAQjD,MAClBsB,EAAOtB,EAAMuB,UAAY,GACzB8D,EAAItC,EAAEjG,IAAI,GACVyN,EAWV,WACE,QAAenL,IAAXoL,EAAsB,OAAOA,EACjC,IACEA,EAA8B,oBAAbC,SAA2B,KAAOA,SAASC,cAAc,UAAUC,WAAW,MAC/F,MACAH,EAAS,KAEX,OAAOA,CACT,CAnBkBI,GACRZ,EAAgB,OAAVO,EACR,CAAE/L,OAAQwB,EAAMqB,MAAQ,IAAInE,OAASoE,EAAO,GAAM,GAAIsI,OA/G7C,KA+GqDtI,EAAkB,IAChFoH,EAAQ6B,EAAOvK,EAAO,GAC1B,OAAO/D,GAAKoJ,EAAEpJ,EAAI,GAAKA,GAAKoJ,EAAEpJ,EAAI+N,EAAIxL,MAAQ,GACzCrC,GAAKkJ,EAAElJ,EAAI,GAAKA,GAAKkJ,EAAElJ,EAAI6N,EAAIJ,OAAS,EAAI,EAAI,OAKzD,IAAIY,EAWS,MAAAK,EAAoB,CAC/B5L,GAAI,OAAQkD,KAAM,OAAQC,OAAQ,EAClCI,KAAO3C,IACL,KAAIA,EAAE/C,IAAII,OAAS,GAAnB,CACA0C,EAAYC,GACZA,EAAEC,IAAI4C,YACN7C,EAAEC,IAAI6C,OAAO9C,EAAE/C,IAAI,GAAGb,EAAG4D,EAAE/C,IAAI,GAAGX,GAClC,IAAK,IAAIc,EAAI,EAAGA,EAAI4C,EAAE/C,IAAII,OAAQD,IAAK4C,EAAEC,IAAI8C,OAAO/C,EAAE/C,IAAIG,GAAGhB,EAAG4D,EAAE/C,IAAIG,GAAGd,GACzE0D,EAAEC,IAAI+C,SACNhD,EAAEC,IAAIU,YAAY,GANI,GAQxBsC,SAAU,CAAC7G,EAAGE,EAAG4G,IAAOA,EAAEjG,IAAII,OAAS,EAAI,KAAOL,EAAeZ,EAAGE,EAAG4G,EAAEjG,MAI9DgO,EAAgD,CAC3D3H,EAAYC,EAAKC,EAAeC,EAChCO,EAAiBK,EAAgBC,EAAeG,EAChDC,EAAWE,EAASI,EACpBe,EAAiBC,EACjBqC,EAAeC,EAAgBrC,EAC/B+D,EAAMgB,GAGR,IAAIE,GAAc,WAGFC,IACd,IAAID,EAAJ,CACAA,GAAc,EACd,IAAK,MAAMxO,KAAKuO,EAAuBhM,EAAoBvC,EAF1C,CAGnB,OC9jBa0O,EAAb,WAAAC,GACUC,OAAAC,eAAAC,KAAA,YAAA,iDAAuB,KACvBF,OAAAC,eAAAC,KAAA,QAAA,iDAA8B,OAC9BF,OAAAC,eAAAC,KAAA,YAAA,iDAA2B,OAE3BF,OAAAC,eAAAC,KAAA,WAAA,iDAA2B,OAE5B,QAAAC,CAASC,GAA6BF,KAAKG,MAAQD,CAAK,CACxD,QAAAE,GAAmBJ,KAAKG,MAAQ,IAAK,CACrC,MAAAE,GAAmB,MAAO,KAAM,CAEhC,aAAAC,GAAwB,OAAO,IAAK,CAEpC,WAAAC,CAAYC,GACjBR,KAAKS,UAAYD,EAASE,QAC1BV,KAAKG,OAAOQ,gBAGP,WAAAC,CAAYhN,GACbA,IAAOoM,KAAKa,YAChBb,KAAKa,UAAYjN,EACjBoM,KAAKG,OAAOQ,iBAGP,UAAAG,CAAWlJ,GAChBoI,KAAKe,SAAWnJ,EAChBoI,KAAKG,OAAOQ,gBAIN,QAAAK,CAAStM,EAA4BuG,EAActC,GACzD,MAAO,CACL/H,EAAG8D,EAAGuM,UAAUC,SAASxM,EAAGqG,UAAUC,iBAAiBC,IACvDnK,EAAG4D,EAAG0F,WAAWC,SAAS1B,IAItB,OAAAwI,CAAQzM,EAA4B5C,GAC1C,OAAOA,EAAEiF,OAAO2F,IAAK1C,GAAMgG,KAAKgB,SAAStM,EAAIsF,EAAEiB,KAAMjB,EAAErB,QAGlD,IAAAxB,CAAK1C,EAA+BC,GACzC,MAAM0M,EAAwB,OAAlBpB,KAAKe,SAAoBf,KAAKS,UAAY,IAAIT,KAAKS,UAAWT,KAAKe,UAC/E,IAAK,MAAMjP,KAAKsP,EAAK,CACnB,IAAkB,IAAdtP,EAAEuP,UAAsBpN,EAAenC,EAAE4B,MAAO,SACpD,MAAMA,EAAOG,EAAe/B,EAAE4B,MAC9B,GAAI5B,EAAEiF,OAAOlF,OAASb,KAAKoB,IAAI,EAAGsB,EAAKqD,QAAS,SAChD,MAAMuK,EAAQtB,KAAKmB,QAAQzM,EAAI5C,GAG/B,IAAKwP,EAAMC,KAAMvH,GAAMwH,OAAOC,SAASzH,EAAEpJ,IAAM4Q,OAAOC,SAASzH,EAAElJ,IAAK,SAEtE,MAAM6D,EAAQ,CACZG,MAAOhD,EAAE6C,MAAMG,OAASJ,EAAG8B,MAAMkL,UACjC3M,UAAWjD,EAAE6C,MAAMI,WAAa,OAC7BjD,EAAE6C,OAEDC,EAAMF,EAAGE,IACfH,EAAIiB,OACA5D,IAAMkO,KAAKe,WAAUtM,EAAIkB,YAAc,IAC3CjC,EAAKyD,KAAK,CACR1C,MAAKC,KAAIkD,QAAS9F,EAAG6P,SAAU7P,EAAE8B,KAAOoM,KAAKa,UAC7CpP,IAAK6P,EAAM5E,IAAK1C,IAAC,CAAQpJ,EAAGoJ,EAAEpJ,EAAIgE,EAAK9D,EAAGkJ,EAAElJ,EAAI8D,KAChDD,MAAO,IAAKA,EAAOG,MAAOH,EAAMG,MAAOC,UAAWJ,EAAMI,WACxD2D,YAAckJ,GAAMlN,EAAG0F,WAAWyH,OAAOD,KAE3CnN,EAAIqB,UAEAhE,EAAE8B,KAAOoM,KAAKa,YAA0B,IAAb/O,EAAEgQ,QAAiB9B,KAAK+B,aAAatN,EAAKC,EAAI4M,IAIzE,YAAAS,CAAatN,EAA+BC,EAA4BjD,GAC9E,MAAMmD,EAAMF,EAAGE,IACfH,EAAIiB,OACJjB,EAAIU,YAAY,IAChBV,EAAIM,UAAY/D,KAAKoB,IAAI,EAAGpB,KAAKgE,MAAM,IAAMJ,IAC7C,IAAK,MAAMoF,KAAKvI,EACdgD,EAAI4C,YACJ5C,EAAIuN,IAAIhI,EAAEpJ,EAAIgE,EAAKoF,EAAElJ,EAAI8D,EAjFhB,EAiF8BA,EAAK,EAAa,EAAV5D,KAAKuI,IACpD9E,EAAIoB,UAAYnB,EAAG8B,MAAMC,WACzBhC,EAAIgB,OACJhB,EAAII,YAAcH,EAAG8B,MAAMkL,UAC3BjN,EAAI+C,SAEN/C,EAAIqB,UAGC,OAAAmM,CAAQrR,EAAWE,EAAW4D,GAGnC,GAAuB,OAAnBsL,KAAKa,UAAoB,CAC3B,MAAMqB,EAAMlC,KAAKS,UAAU0B,KAAMrQ,GAAMA,EAAE8B,KAAOoM,KAAKa,WACrD,QAAY9M,IAARmO,IAAoC,IAAfA,EAAIJ,OAAiB,CAC5C,MAAMrQ,EAAMuO,KAAKmB,QAAQzM,EAAIwN,GAC7B,IAAK,IAAItQ,EAAI,EAAGA,EAAIH,EAAII,OAAQD,IAC9B,GAAIZ,KAAKC,MAAML,EAAIa,EAAIG,GAAGhB,EAAGE,EAAIW,EAAIG,GAAGd,IAAMsR,EAC5C,MAAO,CACLC,WAAY,QAAQH,EAAItO,MAAMhC,IAC9ByO,OAAQ,MAAO5I,SAAU,EAAG6K,OAAQ,WAAYC,WAAW,IAOrE,IAAI7Q,EAAgD,KAEpD,IAAK,IAAIE,EAAIoO,KAAKS,UAAU5O,OAAS,EAAGD,GAAK,EAAGA,IAAK,CACnD,MAAME,EAAIkO,KAAKS,UAAU7O,GACzB,IAAkB,IAAdE,EAAEuP,UAAkC,IAAbvP,EAAEgQ,SAAoB7N,EAAenC,EAAE4B,MAAO,SACzE,MAAMA,EAAOG,EAAe/B,EAAE4B,MAC9B,GAAI5B,EAAEiF,OAAOlF,OAASb,KAAKoB,IAAI,EAAGsB,EAAKqD,QAAS,SAChD,MAAMyL,EAAO9O,EAAK+D,SAAS7G,EAAGE,EAAG,CAAEW,IAAKuO,KAAKmB,QAAQzM,EAAI5C,GAAI8F,QAAS9F,EAAG4C,OAI5D,OAAT8N,IAAkBhB,OAAOC,SAASe,IAASA,EAzHxC,IA0HM,OAAT9Q,GAAiB8Q,EAAO9Q,EAAK+F,YAAU/F,EAAO,CAAEkC,GAAI9B,EAAE8B,GAAI6D,SAAU+K,IAE1E,OAAa,OAAT9Q,EAAsB,KACnB,CACL2Q,WAAY,QAAQ3Q,EAAKkC,KACzByM,OAAQ,MAAO5I,SAAU/F,EAAK+F,SAAU6K,OAAQ,OAAQC,WAAW,IC/FzE,IAAIE,EAAS,QAEAC,EAkBX,WAAA7C,CAAmB8C,EAAcC,EAAoC,IAjBpD9C,OAAAC,eAAAC,KAAA,SAAA,0DACTF,OAAAC,eAAAC,KAAA,QAAA,0DACSF,OAAAC,eAAAC,KAAA,UAAA,2CAAU6C,MAAA,IAAIrP,MACvBsM,OAAAC,eAAAC,KAAA,YAAA,iDAAuB,KACvBF,OAAAC,eAAAC,KAAA,QAAA,iDAAuB,OACvBF,OAAAC,eAAAC,KAAA,WAAA,iDAA2B,KAC3BF,OAAAC,eAAAC,KAAA,eAAA,iDAAe,IACfF,OAAAC,eAAAC,KAAA,YAAA,iDAA2B,OAE3BF,OAAAC,eAAAC,KAAA,QAAA,iDAAkB,KAClBF,OAAAC,eAAAC,KAAA,QAAA,iDAAkB,KAClBF,OAAAC,eAAAC,KAAA,aAAA,iDAAuG,OAC9FF,OAAAC,eAAAC,KAAA,OAAA,iDAAuB,KAChCF,OAAAC,eAAAC,KAAA,cAAA,iDAAyE,OAEzEF,OAAAC,eAAAC,KAAA,WAAA,iDAA8E,OAGpFA,KAAK8C,OAASH,EACd3C,KAAK+C,MAAQ,CACXC,OAAQJ,EAAQI,SAAU,EAC1BC,kBAAmBL,EAAQK,oBAAqB,EAChDC,aAAcN,EAAQM,cAAgB,GACtClM,aAAc4L,EAAQ5L,cAAgB,CAAE,GAE1CgJ,KAAKmD,KAAKpF,KAAK4E,EAAMS,GAAG,QAAUpJ,GAAMgG,KAAKqD,SAASrJ,KACtDgG,KAAKmD,KAAKpF,KAAK4E,EAAMS,GAAG,iBAAmBpJ,GAAMgG,KAAKsD,aAAatJ,KACnEgG,KAAKmD,KAAKpF,KAAK4E,EAAMS,GAAG,OAASpJ,GAAMgG,KAAKuD,QAAQvJ,KACpDgG,KAAKmD,KAAKpF,KAAK4E,EAAMS,GAAG,WAAY,IAAMpD,KAAKwD,eAE/C,MAAMC,EAAQd,EAAMe,eAChBtP,MAAMuP,QAAQF,KAAQzD,KAAKS,UAAagD,EAAoB/G,IAAK5K,QAAYA,MACjFkO,KAAK4D,QAMA,OAAAC,CAAQC,GACb,GAAe,OAAXA,IAAoB7P,EAAe6P,GACrC,MAAM,IAAI9P,MAAM,0CAA0C8P,MAE5D9D,KAAK+D,MAAQD,EACb9D,KAAKgE,SAAW,GAChBhE,KAAKiE,eACLjE,KAAK8C,OAAOoB,KAAK,YAAa,CAAExQ,KAAMoQ,IAGjC,UAAAK,GACL,OAAOnE,KAAK+D,MAGP,UAAAK,CAAWC,GAChBrE,KAAK+C,MAAQ,IAAK/C,KAAK+C,SAAUsB,EAAOrN,aAAcqN,EAAMrN,cAAgBgJ,KAAK+C,MAAM/L,cAIlF,QAAAwJ,GACL,OAAOR,KAAKS,UAGP,GAAA3M,CAAIF,GACT,OAAOoM,KAAKS,UAAU0B,KAAMrQ,GAAMA,EAAE8B,KAAOA,GAItC,GAAA0Q,CAAI1M,GACToI,KAAKuE,YACL,MAAM7Q,EAAOG,EAAe+D,EAAQlE,MAC9B8Q,EAAmB,IACpB5M,EACHhE,GAAIgE,EAAQhE,IAAM,IAAI6O,IACtB9N,MAAO,IAAKqL,KAAK+C,MAAM/L,gBAAiBtD,EAAKsD,gBAAiBY,EAAQjD,QAKxE,OAHAqL,KAAKS,UAAU1C,KAAKyG,GACpBxE,KAAK4D,QACL5D,KAAK8C,OAAOoB,KAAK,WAAY,CAAEtM,QAAS4M,IACjCA,EAGF,MAAAC,CAAO7Q,EAAYyQ,GACxB,MAAMvS,EAAIkO,KAAKlM,IAAIF,GACnB,YAAUG,IAANjC,IACJkO,KAAKuE,iBACgBxQ,IAAjBsQ,EAAMtN,SAAsBjF,EAAEiF,OAASsN,EAAMtN,OAAO2F,IAAK1C,IAAO,IAAKA,WACrDjG,IAAhBsQ,EAAM1P,QAAqB7C,EAAE6C,MAAQ,IAAK7C,EAAE6C,SAAU0P,EAAM1P,aAC3CZ,IAAjBsQ,EAAMvC,SAAsBhQ,EAAEgQ,OAASuC,EAAMvC,aAC3B/N,IAAlBsQ,EAAMhD,UAAuBvP,EAAEuP,QAAUgD,EAAMhD,SACnDrB,KAAK4D,QACL5D,KAAK8C,OAAOoB,KAAK,cAAe,CAAEtM,QAAS9F,KACpC,GAGF,MAAA4S,CAAO9Q,GACZ,MAAMhC,EAAIoO,KAAKS,UAAUkE,UAAW7S,GAAMA,EAAE8B,KAAOA,GACnD,GAAIhC,EAAI,EAAG,OAAO,EAClBoO,KAAKuE,YACL,MAAOK,GAAW5E,KAAKS,UAAUoE,OAAOjT,EAAG,GAI3C,OAHIoO,KAAKa,YAAcjN,IAAIoM,KAAKa,UAAY,MAC5Cb,KAAK4D,QACL5D,KAAK8C,OAAOoB,KAAK,cAAe,CAAEtM,QAASgN,KACpC,EAGF,KAAAE,GACyB,IAA1B9E,KAAKS,UAAU5O,SACnBmO,KAAKuE,YACLvE,KAAKS,UAAY,GACjBT,KAAKa,UAAY,KACjBb,KAAK4D,SAGA,MAAAmB,CAAOnR,GACZoM,KAAKa,UAAYjN,EACjB,IAAK,MAAMoR,KAAShF,KAAKiF,QAAQ3Q,SAAU0Q,EAAMpE,YAAYhN,GAC7DoM,KAAK8C,OAAOoB,KAAK,cAAe,CAAEtQ,OAG7B,QAAA+N,GACL,OAAO3B,KAAKa,UAGP,IAAAqE,GACL,MAAMC,EAAOnF,KAAKoF,MAAMC,MACxB,YAAatR,IAAToR,IACJnF,KAAKsF,MAAMvH,KAAKwH,KAAKC,UAAUxF,KAAKS,YACpCT,KAAKS,UAAY8E,KAAKE,MAAMN,GACvBnF,KAAKS,UAAUc,KAAMzP,GAAMA,EAAE8B,KAAOoM,KAAKa,aAAYb,KAAKa,UAAY,MAC3Eb,KAAK4D,SACE,GAGF,IAAA8B,GACL,MAAMP,EAAOnF,KAAKsF,MAAMD,MACxB,YAAatR,IAAToR,IACJnF,KAAKoF,MAAMrH,KAAKwH,KAAKC,UAAUxF,KAAKS,YACpCT,KAAKS,UAAY8E,KAAKE,MAAMN,GAC5BnF,KAAK4D,SACE,GAGF,OAAA+B,GAAqB,OAAO3F,KAAKoF,MAAMvT,OAAS,CAAE,CAClD,OAAA+T,GAAqB,OAAO5F,KAAKsF,MAAMzT,OAAS,CAAE,CAGlD,MAAAgU,GACL,OAAO7F,KAAKS,UAAU/D,IAAK5K,QAAYA,EAAGiF,OAAQjF,EAAEiF,OAAO2F,IAAK1C,IAAO,IAAKA,KAAOrF,MAAO,IAAK7C,EAAE6C,UAG5F,QAAAmR,CAASC,GACd/F,KAAKS,UAAYrM,MAAMuP,QAAQoC,GAASA,EAAmBrJ,IAAK5K,IAAO,IAAKA,KAAQ,GACpFkO,KAAKa,UAAY,KACjBb,KAAKoF,MAAQ,GACbpF,KAAKsF,MAAQ,GACbtF,KAAK4D,QAGA,OAAAoC,GACL,IAAK,MAAMC,KAAOjG,KAAKmD,KAAM8C,IAC7BjG,KAAKmD,KAAKtR,OAAS,EACnB,IAAK,MAAOqU,EAAMlB,KAAUhF,KAAKiF,QAE/BjF,KAAK8C,OAAOqD,gBAAgBnB,GAE9BhF,KAAKiF,QAAQH,QAKP,YAAAxB,CAAatJ,GACnB,MAAMiB,EAAOjB,EAAEiB,KACTtC,EAAQqB,EAAErB,MACVyN,EAAapM,EAAEoM,WAA+B,KACpDpG,KAAKqG,YAAuB,OAATpL,GAA2B,OAAVtC,GAAgC,OAAdyN,EAClD,KAAO,CAAEnL,OAAMtC,QAAOyN,aAC1BpG,KAAKsG,SAAYtM,EAAEuM,KAA6E,KAE7E,OAAfvG,KAAK+D,OAAkB/D,KAAKgE,SAASnS,OAAS,GAAGmO,KAAKiE,eAGpD,QAAAZ,CAASrJ,GAEf,GAAmB,OAAfgG,KAAK+D,MAOI,OAAT/J,EAAEpG,IAAeoG,EAAEpG,GAAG4S,WAAW,SACnCxG,KAAK+E,OAAO/K,EAAEpG,GAAG8M,MAAM,GAAgBjD,MAAM,KAAK,IAGvC,OAATzD,EAAEpG,IAAaoM,KAAK+E,OAAO,UAX/B,CAGE,GAAgB,OAAZ/K,EAAErB,QAAmB6I,OAAOC,SAASzH,EAAErB,SAAW6I,OAAOC,SAASzH,EAAEiB,MAAO,OAC/E+E,KAAKyG,YAAY,CAAExL,KAAMjB,EAAEiB,KAAMtC,MAAOqH,KAAK0G,MAAM1M,EAAErB,MAAOqB,EAAEoM,YAAcpM,EAAEoM,YAU1E,WAAAK,CAAYE,EAAqBP,GACV,IAAzBpG,KAAKgE,SAASnS,SAAcmO,KAAK4G,aAAeR,GACpDpG,KAAKgE,SAASjG,KAAK4I,GACnB,MAAMjT,EAAOG,EAAemM,KAAK+D,OACjC,GAAIrQ,EAAKqD,OAAS,GAAKiJ,KAAKgE,SAASnS,QAAU6B,EAAKqD,OAAQ,CAC1D,MAAMyN,EAAUxE,KAAKsE,IAAI,CACvB5Q,KAAMA,EAAKE,GAAImD,OAAQiJ,KAAKgE,SAAUrP,MAAO,CAAE,EAAEyR,UAAWpG,KAAK4G,eAEnE5G,KAAKgE,SAAW,GACXhE,KAAK+C,MAAME,oBAAmBjD,KAAK+D,MAAQ,MAChD/D,KAAKiE,eACLjE,KAAK+E,OAAOP,EAAQ5Q,IACpBoM,KAAK8C,OAAOoB,KAAK,YAAa,CAAExQ,KAAMsM,KAAK+D,aAE3C/D,KAAKiE,eAKD,KAAAyC,CAAM/N,EAAeyN,GAC3B,IAAKpG,KAAK+C,MAAMC,QAAwB,IAAdoD,EAAiB,OAAOzN,EAClD,MAAM4N,EAAMvG,KAAKsG,SACjB,GAAY,OAARC,EAAc,OAAO5N,EACzB,IAAIjH,EAAOiH,EACPkO,EAAQlV,IACZ,IAAK,MAAMiQ,IAAK,CAAC2E,EAAIO,KAAMP,EAAIQ,KAAMR,EAAIS,IAAKT,EAAIU,OAAQ,CACxD,MAAMnV,EAAId,KAAKK,IAAIuQ,EAAIjJ,GACnB7G,EAAI+U,IAASA,EAAQ/U,EAAGJ,EAAOkQ,GAErC,OAAOlQ,EAGD,OAAA6R,CAAQvJ,GACd,IAAKA,EAAEpG,GAAG4S,WAAW,SAAU,OAC/B,MAAOU,EAAOC,GAAanN,EAAEpG,GAAG8M,MAAM,GAAgBjD,MAAM,KACtD3L,EAAIkO,KAAKlM,IAAIoT,GACnB,QAAUnT,IAANjC,IAAgC,IAAbA,EAAEgQ,OAAiB,OAC1C,MAAMsF,OAAuBrT,IAAdoT,EAA0B,KAAO3F,OAAO2F,GAE/B,OAApBnH,KAAKqH,YAAuBrH,KAAKqH,WAAWzT,KAAOsT,GAASlH,KAAKqH,WAAWD,SAAWA,IAGzFpH,KAAKuE,YACLvE,KAAKqH,WAAa,CAChBzT,GAAIsT,EAAOE,SACXrQ,OAAQjF,EAAEiF,OAAO2F,IAAK4K,QAAYA,KAClCjT,KAAM,CACJ4G,KAAMjB,EAAEuN,UAAYvN,EAAEiB,KACtBtC,MAAOqB,EAAEwN,WAAaxN,EAAErB,SAI9B,MAAM8O,EAAQzH,KAAKqH,WACnB,GAAe,OAAXD,EAAiB,CAEnB,MAAMM,EAAK1N,EAAEiB,KAAOwM,EAAMpT,KAAK4G,KACzB0M,EAAK3N,EAAErB,MAAQ8O,EAAMpT,KAAKsE,MAChC7G,EAAEiF,OAAS0Q,EAAM1Q,OAAO2F,IAAK4K,KAASrM,KAAMqM,EAAErM,KAAOyM,EAAI/O,MAAO2O,EAAE3O,MAAQgP,UACjEP,GAAU,GAAKA,EAAStV,EAAEiF,OAAOlF,SAC1CC,EAAEiF,OAAS0Q,EAAM1Q,OAAO2F,IAAI,CAAC4K,EAAG1V,IAAOA,IAAMwV,EAAS,CAAEnM,KAAMjB,EAAEiB,KAAMtC,MAAOqB,EAAErB,OAAU,IAAK2O,KAEhGtH,KAAK4D,QAGC,UAAAJ,GACN,GAAwB,OAApBxD,KAAKqH,WAAqB,OAC9B,MAAMvV,EAAIkO,KAAKlM,IAAIkM,KAAKqH,WAAWzT,IACnCoM,KAAKqH,WAAa,UACRtT,IAANjC,GAAiBkO,KAAK8C,OAAOoB,KAAK,cAAe,CAAEtM,QAAS9F,IAK1D,SAAA8V,CAAUxB,GAChB,IAAIpB,EAAQhF,KAAKiF,QAAQnR,IAAIsS,GAM7B,YALcrS,IAAViR,IACFA,EAAQ,IAAIpF,EACZI,KAAK8C,OAAO+E,aAAa7C,EAAOoB,GAChCpG,KAAKiF,QAAQtR,IAAIyS,EAAWpB,IAEvBA,EAID,KAAApB,GACN,MAAMkE,EAAS,IAAItU,IACnB,IAAK,MAAM1B,KAAKkO,KAAKS,UAAW,CAC9B,MAAMsH,EAAOD,EAAOhU,IAAIhC,EAAEsU,YAAc,GACxC2B,EAAKhK,KAAKjM,GACVgW,EAAOnU,IAAI7B,EAAEsU,UAAW2B,GAE1B,IAAK,MAAO7B,EAAM6B,KAASD,EAAQ9H,KAAK4H,UAAU1B,GAAM3F,YAAYwH,GAEpE,IAAK,MAAO7B,EAAMlB,KAAUhF,KAAKiF,QAC1B6C,EAAO5T,IAAIgS,IAAOlB,EAAMzE,YAAY,IACzCyE,EAAMpE,YAAYZ,KAAKa,WAEzBb,KAAK8C,OAAOkF,gBAAgBhI,KAAK6F,UAI3B,YAAA5B,GACN,IAAK,MAAMe,KAAShF,KAAKiF,QAAQ3Q,SAAU0Q,EAAMlE,WAAW,MAC5D,GAAmB,OAAfd,KAAK+D,OAA2C,IAAzB/D,KAAKgE,SAASnS,OAAc,OACvD,MAAMyQ,EAAStC,KAAKqG,YACdtP,EAAoB,OAAXuL,EACXtC,KAAKgE,SACL,IAAIhE,KAAKgE,SAAU,CAAE/I,KAAMqH,EAAOrH,KAAMtC,MAAO2J,EAAO3J,QAC1DqH,KAAK4H,UAAU5H,KAAK4G,cAAc9F,WAAW,CAC3ClN,GAAI,YAAaF,KAAMsM,KAAK+D,MAAOhN,SAAQpC,MAAOqL,KAAK+C,MAAM/L,aAAcoP,UAAWpG,KAAK4G,eAIvF,SAAArC,GACNvE,KAAKoF,MAAMrH,KAAKwH,KAAKC,UAAUxF,KAAKS,YAChCT,KAAKoF,MAAMvT,OAASmO,KAAK+C,MAAMG,cAAclD,KAAKoF,MAAM6C,QAC5DjI,KAAKsF,MAAQ,IC/UV,MAAM4C,EAAY,OAEzBvI"}
1
+ {"version":3,"file":"openalgo-charts.draw.mjs","sources":["../src/draw/geometry.ts","../src/draw/tools.ts","../src/draw/layer.ts","../src/draw/controller.ts","../src/draw/index.ts"],"sourcesContent":[null,null,null,null,null],"names":["distToSegment","px","py","a","b","dx","x","dy","y","len2","Math","hypot","t","distToLine","len","abs","distToHorizontal","distToVertical","distToPolyline","pts","best","Infinity","i","length","d","rectOf","x0","min","y0","x1","max","y1","distToRect","filled","r","corners","distToEllipse","cx","cy","rx","ry","nx","ny","norm","extendSegment","width","left","right","slope","registry","Map","registerDrawingTool","tool","set","id","getDrawingTool","get","undefined","Error","hasDrawingTool","has","registeredDrawingTools","Array","from","values","applyStroke","c","ctx","rc","style","dpr","strokeStyle","color","lineWidth","round","lineJoin","lineCap","setLineDash","lineStyle","fillStyleOf","fillColor","withFill","paint","fill","save","globalAlpha","fillOpacity","fillStyle","restore","label","text","size","fontSize","font","textBaseline","textAlign","w","measureText","theme","background","fillRect","fillText","DEFAULT_FIB","lineTool","name","points","defaultStyle","extendLeft","extendRight","draw","plotWidth","beginPath","moveTo","lineTo","stroke","distance","h","el","drawing","er","TREND_LINE","RAY","EXTENDED_LINE","ARROW","head","ang","atan2","cos","sin","closePath","HORIZONTAL_LINE","showLabels","formatPrice","price","_x","HORIZONTAL_RAY","VERTICAL_LINE","plotHeight","_y","CROSS_LINE","RECTANGLE","textVAlign","textPosition","strokeRect","shapeLabel","ELLIPSE","path","ellipse","PI","PARALLEL_CHANNEL","a2","b2","d1","d2","fibTool","anchors","levels","p","span","prevY","lv","priceScale","priceToY","toFixed","FIB_RETRACEMENT","FIB_EXTENSION","MEASURE","chg","pct","up","tint","i0","dataLayer","timeToIndexFloat","time","i1","bars","sign","positionTool","long","accountSize","risk","entry","target","stop","yE","yT","yS","band","yA","yB","yy","reward","rr","account","riskPct","qty","floor","ys","map","lo","hi","LONG_POSITION","SHORT_POSITION","LINE_GAP","DEFAULT_FONT","textFont","sizePx","weight","fontWeight","fontStyle","fontFamily","textLines","maxWidth","paragraphs","split","wrap","out","para","words","filter","push","line","next","textBox","lines","wrapWidth","l","lineHeight","TEXT_PAD","height","pad","fontColor","blockH","align","tx","ty","v","TEXT","backgroundOpacity","border","box","backgroundColor","roundRect","borderColor","probe","_probe","document","createElement","getContext","measureContext","PATH","BUILTIN_DRAWING_TOOLS","_registered","registerBuiltinDrawingTools","DrawingLayer","constructor","Object","defineProperty","this","attached","host","_host","detached","zOrder","autoscaleInfo","setDrawings","drawings","_drawings","slice","requestUpdate","setSelected","_selected","setPreview","_preview","_project","timeScale","indexToX","_points","all","visible","media","some","Number","isFinite","lineColor","selected","format","locked","_drawHandles","arc","hitTest","sel","find","HANDLE","externalId","cursor","draggable","dist","nextId","DrawingController","chart","options","value","_chart","_opts","magnet","stayInDrawingMode","historyLimit","_off","on","_onClick","_onCrosshair","_onDrag","_onDragEnd","saved","drawingState","isArray","_sync","setTool","toolId","_tool","_pending","_setPlacementMode","_syncPreview","emit","active","setPlacementMode","activeTool","setOptions","patch","add","_pushUndo","created","update","remove","findIndex","removed","splice","clear","select","layer","_layers","undo","snap","_undo","pop","_redo","JSON","stringify","parse","redo","canUndo","canRedo","toJSON","fromJSON","data","destroy","off","pane","removePrimitive","paneIndex","_lastCursor","_lastBar","bar","startsWith","viaDrag","_placePoint","_snap","point","_pendingPane","bestD","open","high","low","close","rawId","handleStr","handle","_dragStart","q","fromTime","fromPrice","start","dt","dp","_layerFor","addPrimitive","byPane","list","setDrawingState","shift","DRAW_TIER"],"mappings":"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"}