@tradecanvas/core 1.0.2 → 1.0.3

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/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { DARK_THEME as e, DEFAULT_BAR_SPACING as t, DEFAULT_BAR_WIDTH as n, DEFAULT_RECONNECT as r, DEFAULT_SIGNAL_STYLE as i, DEFAULT_STREAM_CONFIG as a, DEFAULT_TRADE_ZONE_STYLE as o, DEFAULT_TRADING_CONFIG as s, LIGHT_THEME as c, LayerType as l, PRICE_AXIS_WIDTH as u, TIME_AXIS_HEIGHT as d, clamp as f, computePriceRange as p, computeTickStep as m, formatPrice as h, formatPriceScaleLabel as g, lerpColor as _, sliceVisibleData as v, timeParts as y, timeframeBucketStart as b, timeframeToMs as x, tzLabel as S, withAlpha as C } from "@tradecanvas/commons";
1
+ import { DARK_THEME as e, DEFAULT_BAR_SPACING as t, DEFAULT_BAR_WIDTH as n, DEFAULT_RECONNECT as r, DEFAULT_SIGNAL_STYLE as i, DEFAULT_STREAM_CONFIG as a, DEFAULT_TRADE_ZONE_STYLE as o, DEFAULT_TRADING_CONFIG as s, LIGHT_THEME as c, LayerType as l, PRICE_AXIS_WIDTH as u, TIME_AXIS_HEIGHT as d, clamp as f, computePriceRange as p, computeTickStep as m, formatPrice as h, formatPriceScaleLabel as g, isDateOnly as _, lerpColor as v, sliceVisibleData as y, timeParts as b, timeframeBucketStart as x, timeframeToMs as S, tzLabel as C, withAlpha as w } from "@tradecanvas/commons";
2
2
  //#region src/engine/CanvasLayer.ts
3
- var w = class {
3
+ var T = class {
4
4
  canvas;
5
5
  ctx;
6
6
  dpr = 1;
@@ -24,7 +24,7 @@ var w = class {
24
24
  destroy() {
25
25
  this.canvas.remove();
26
26
  }
27
- }, T = class {
27
+ }, E = class {
28
28
  layers = /* @__PURE__ */ new Map();
29
29
  constructor(e) {
30
30
  this.container = e;
@@ -36,7 +36,7 @@ var w = class {
36
36
  l.Main,
37
37
  l.Overlay,
38
38
  l.UI
39
- ]) this.layers.set(e, new w(this.container, e));
39
+ ]) this.layers.set(e, new T(this.container, e));
40
40
  }
41
41
  getLayer(e) {
42
42
  return this.layers.get(e);
@@ -48,7 +48,7 @@ var w = class {
48
48
  for (let e of this.layers.values()) e.destroy();
49
49
  this.layers.clear();
50
50
  }
51
- }, E = class {
51
+ }, D = class {
52
52
  animFrameId = 0;
53
53
  running = !1;
54
54
  dirtyLayers = /* @__PURE__ */ new Set();
@@ -77,7 +77,7 @@ var w = class {
77
77
  }
78
78
  });
79
79
  }
80
- }, D = class {
80
+ }, O = class {
81
81
  observer = null;
82
82
  callback = null;
83
83
  currentDpr = 1;
@@ -120,10 +120,10 @@ var w = class {
120
120
  };
121
121
  //#endregion
122
122
  //#region src/viewport/ScaleMapping.ts
123
- function O(e, t) {
123
+ function k(e, t) {
124
124
  return e * (t.barWidth + t.barSpacing) - t.offset + t.chartRect.x + t.barWidth / 2;
125
125
  }
126
- function k(e, t) {
126
+ function A(e, t) {
127
127
  let { min: n, max: r } = t.priceRange;
128
128
  if (t.logScale && n > 0 && r > 0) {
129
129
  let i = Math.log(n), a = Math.log(r) - i;
@@ -136,11 +136,11 @@ function k(e, t) {
136
136
  let a = (e - n) / i;
137
137
  return t.chartRect.y + t.chartRect.height * (1 - a);
138
138
  }
139
- function A(e, t) {
139
+ function j(e, t) {
140
140
  let n = t.barWidth + t.barSpacing;
141
141
  return Math.round((e - t.chartRect.x - t.barWidth / 2 + t.offset) / n);
142
142
  }
143
- function j(e, t) {
143
+ function M(e, t) {
144
144
  let { min: n, max: r } = t.priceRange, i = 1 - (e - t.chartRect.y) / t.chartRect.height;
145
145
  if (t.logScale && n > 0 && r > 0) {
146
146
  let e = Math.log(n);
@@ -148,7 +148,7 @@ function j(e, t) {
148
148
  }
149
149
  return n + (r - n) * i;
150
150
  }
151
- function M(e, t) {
151
+ function N(e, t) {
152
152
  if (t.length === 0) return -1;
153
153
  if (e <= t[0].time) return 0;
154
154
  if (e >= t[t.length - 1].time) return t.length - 1;
@@ -163,15 +163,15 @@ function M(e, t) {
163
163
  let i = t[r].time, a = t[n].time, o = a === i ? 0 : (e - i) / (a - i);
164
164
  return r + o;
165
165
  }
166
- function N(e, t) {
167
- let n = t.data;
168
- return n && n.length > 0 ? M(e, n) : e;
169
- }
170
166
  function P(e, t) {
171
- return O(N(e, t), t);
167
+ let n = t.data;
168
+ return n && n.length > 0 ? N(e, n) : e;
172
169
  }
173
170
  function F(e, t) {
174
- let n = A(e, t), r = t.data;
171
+ return k(P(e, t), t);
172
+ }
173
+ function I(e, t) {
174
+ let n = j(e, t), r = t.data;
175
175
  return r && r.length > 0 ? r[Math.max(0, Math.min(r.length - 1, n))].time : n;
176
176
  }
177
177
  //#endregion
@@ -187,7 +187,7 @@ var ee = class {
187
187
  uiLayer;
188
188
  onContainerResize = null;
189
189
  constructor(e) {
190
- this.layerManager = new T(e), this.renderLoop = new E(), this.dprManager = new D(e), this.layerManager.createLayers(), this.cacheLayerRefs(), this.renderLoop.setCallback((e) => this.render(e)), this.dprManager.onResize((e, t) => {
190
+ this.layerManager = new E(e), this.renderLoop = new D(), this.dprManager = new O(e), this.layerManager.createLayers(), this.cacheLayerRefs(), this.renderLoop.setCallback((e) => this.render(e)), this.dprManager.onResize((e, t) => {
191
191
  this.layerManager.resize(e, t), this.renderLoop.markAllDirty(), this.onContainerResize?.(e);
192
192
  });
193
193
  let t = this.dprManager.getContainerSize(), n = this.dprManager.getDpr();
@@ -237,8 +237,8 @@ var ee = class {
237
237
  if (i && t.panels.length > 0) for (let n of t.panels) {
238
238
  let a = n.rect;
239
239
  if (i.x >= a.x && i.x <= a.x + a.width && i.y >= a.y && i.y <= a.y + a.height) {
240
- let o = n.viewport, s = i.x, c = A(s, o);
241
- s = O(Math.max(0, Math.min((t.data?.length ?? 1) - 1, Math.round(c))), o), e.save(), e.beginPath(), e.rect(a.x, a.y, a.width, a.height), e.clip(), e.setLineDash([4, 4]), e.strokeStyle = r.crosshair, e.lineWidth = 1, e.beginPath(), e.moveTo(Math.round(s) + .5, a.y), e.lineTo(Math.round(s) + .5, a.y + a.height), e.stroke(), e.beginPath(), e.moveTo(a.x, Math.round(i.y) + .5), e.lineTo(a.x + a.width, Math.round(i.y) + .5), e.stroke(), e.setLineDash([]), e.restore();
240
+ let o = n.viewport, s = i.x, c = j(s, o);
241
+ s = k(Math.max(0, Math.min((t.data?.length ?? 1) - 1, Math.round(c))), o), e.save(), e.beginPath(), e.rect(a.x, a.y, a.width, a.height), e.clip(), e.setLineDash([4, 4]), e.strokeStyle = r.crosshair, e.lineWidth = 1, e.beginPath(), e.moveTo(Math.round(s) + .5, a.y), e.lineTo(Math.round(s) + .5, a.y + a.height), e.stroke(), e.beginPath(), e.moveTo(a.x, Math.round(i.y) + .5), e.lineTo(a.x + a.width, Math.round(i.y) + .5), e.stroke(), e.setLineDash([]), e.restore();
242
242
  break;
243
243
  }
244
244
  }
@@ -261,17 +261,17 @@ var ee = class {
261
261
  let v = m(f, p, 4), y = Math.ceil(f / v) * v, b = v < 1 ? Math.ceil(-Math.log10(v)) + 1 : +(v < 10);
262
262
  e.font = s, e.textBaseline = "middle", e.textAlign = "left";
263
263
  for (let n = y; n <= p; n += v) {
264
- let i = k(n, t);
264
+ let i = A(n, t);
265
265
  i < _.y || i > _.y + _.height || (e.strokeStyle = r.axisLine, e.beginPath(), e.moveTo(g, Math.round(i) + .5), e.lineTo(g + 4, Math.round(i) + .5), e.stroke(), e.fillStyle = r.axisLabel, e.fillText(h(n, b, a), g + 6, i));
266
266
  }
267
267
  if (n && n.x >= d.x && n.x <= d.x + d.width && n.y >= d.y && n.y <= d.y + d.height) {
268
- let i = h(j(n.y, t), b, a);
268
+ let i = h(M(n.y, t), b, a);
269
269
  e.font = `bold ${r.font.sizeSmall}px ${r.font.family}`;
270
270
  let o = e.measureText(i).width, s = Math.min(o + 10, u - 2);
271
271
  e.fillStyle = r.crosshair, e.fillRect(g + 1, n.y - 9, s, 18), e.fillStyle = r.background, e.textBaseline = "middle", e.textAlign = "left", e.fillText(i, g + 5, n.y);
272
272
  }
273
273
  if (n && o) {
274
- let a = A(n.x, t), u = Math.max(0, Math.min((i?.length ?? 1) - 1, Math.round(a))), f = o.getOutput(l.instanceId);
274
+ let a = j(n.x, t), u = Math.max(0, Math.min((i?.length ?? 1) - 1, Math.round(a))), f = o.getOutput(l.instanceId);
275
275
  if (f?.series && u < f.series.length) {
276
276
  let t = f.series[u];
277
277
  if (t) {
@@ -311,7 +311,7 @@ var ee = class {
311
311
  }
312
312
  ], o = `bold 9px ${n.font.family}`, s = `10px ${n.font.family}`;
313
313
  for (let { price: n, color: r, label: c } of a) {
314
- let a = k(n, t);
314
+ let a = A(n, t);
315
315
  if (a < i.y || a > i.y + i.height) continue;
316
316
  e.setLineDash([8, 4]), e.strokeStyle = r, e.lineWidth = 1, e.beginPath(), e.moveTo(i.x, Math.round(a) + .5), e.lineTo(i.x + i.width, Math.round(a) + .5), e.stroke(), e.setLineDash([]), e.font = o, e.fillStyle = r, e.textBaseline = "bottom", e.textAlign = "left", e.fillText(`${c} ${n.toFixed(2)}`, i.x + 4, a - 2);
317
317
  let l = i.x + i.width + 1;
@@ -472,7 +472,7 @@ var ee = class {
472
472
  //#endregion
473
473
  //#region src/viewport/DataWindow.ts
474
474
  function ne(e, t) {
475
- return v(e, t.visibleRange.from, t.visibleRange.to);
475
+ return y(e, t.visibleRange.from, t.visibleRange.to);
476
476
  }
477
477
  //#endregion
478
478
  //#region src/charts/CandlestickRenderer.ts
@@ -923,7 +923,7 @@ function Ee(e, t, n, r = 48) {
923
923
  }
924
924
  function De(e, t, n, r = {}) {
925
925
  if (e.length === 0 || n - t <= 0) return [];
926
- let i = [], a = 0, o = b(e[0].time, "1d"), s = (a, o, s) => {
926
+ let i = [], a = 0, o = x(e[0].time, "1d"), s = (a, o, s) => {
927
927
  let c = we(e.slice(a, o + 1), t, n, r);
928
928
  c && i.push({
929
929
  startIndex: a,
@@ -933,7 +933,7 @@ function De(e, t, n, r = {}) {
933
933
  });
934
934
  };
935
935
  for (let t = 1; t < e.length; t++) {
936
- let n = b(e[t].time, "1d");
936
+ let n = x(e[t].time, "1d");
937
937
  n !== o && (s(a, t - 1, o), a = t, o = n);
938
938
  }
939
939
  return s(a, e.length - 1, o), i;
@@ -1040,7 +1040,7 @@ var Oe = class {
1040
1040
  let c = o.max - o.min, l = (e) => a.y + a.height * (1 - (e - o.min) / c), u = r.barWidth / 2;
1041
1041
  e.save();
1042
1042
  for (let c of s) {
1043
- let s = c.profile, d = s.buckets.length, f = a.height / d, p = O(n + c.startIndex, r) - u, m = O(n + c.endIndex, r) + u, h = Math.max(2, m - p), g = 1 / s.maxCount, _ = this.letters && f >= 7, v = _ ? Ee(t.slice(c.startIndex, c.endIndex + 1), o.min, o.max, this.buckets) : null;
1043
+ let s = c.profile, d = s.buckets.length, f = a.height / d, p = k(n + c.startIndex, r) - u, m = k(n + c.endIndex, r) + u, h = Math.max(2, m - p), g = 1 / s.maxCount, _ = this.letters && f >= 7, v = _ ? Ee(t.slice(c.startIndex, c.endIndex + 1), o.min, o.max, this.buckets) : null;
1044
1044
  if (_ && v) {
1045
1045
  e.font = `${Math.min(11, Math.floor(f))}px ui-monospace, monospace`, e.textBaseline = "middle", e.textAlign = "left";
1046
1046
  let t = Math.max(1, Math.floor(h / 6));
@@ -1105,7 +1105,7 @@ function Ae(e, t, n, r, i, a) {
1105
1105
  function je(e, t) {
1106
1106
  let n = t === "day" ? "1d" : "1w", r = [];
1107
1107
  for (let t of e) {
1108
- let e = b(t.time, n), i = r[r.length - 1];
1108
+ let e = x(t.time, n), i = r[r.length - 1];
1109
1109
  i && i.key === e ? (i.high = Math.max(i.high, t.high), i.low = Math.min(i.low, t.low), i.close = t.close) : r.push({
1110
1110
  key: e,
1111
1111
  open: t.open,
@@ -1167,7 +1167,7 @@ var Ne = class {
1167
1167
  let { chartRect: a } = n, o = a.y, s = a.y + a.height;
1168
1168
  e.save(), e.font = `600 10px ${r.font.family}`, e.textBaseline = "middle";
1169
1169
  for (let t of i) {
1170
- let i = k(t.price, n);
1170
+ let i = A(t.price, n);
1171
1171
  if (i < o || i > s) continue;
1172
1172
  let c = Pe(t, r);
1173
1173
  e.strokeStyle = c, e.globalAlpha = .7, e.lineWidth = 1, e.setLineDash([5, 4]), e.beginPath(), e.moveTo(a.x, Math.round(i) + .5), e.lineTo(a.x + a.width, Math.round(i) + .5), e.stroke(), e.setLineDash([]), e.globalAlpha = 1;
@@ -1240,7 +1240,7 @@ var Le = class {
1240
1240
  e.save(), e.font = `10px ${r.font.family}`, e.textAlign = "center";
1241
1241
  for (let t of a) {
1242
1242
  if (t.index < o - 1 || t.index > s + 1) continue;
1243
- let i = O(t.index, n), a = k(t.price, n), c = t.type === "high", l = c ? r.candleDown : r.candleUp, u = c ? a - 8 : a + 8;
1243
+ let i = k(t.index, n), a = A(t.price, n), c = t.type === "high", l = c ? r.candleDown : r.candleUp, u = c ? a - 8 : a + 8;
1244
1244
  e.fillStyle = l, e.beginPath(), c ? (e.moveTo(i - 5, u - 5), e.lineTo(i + 5, u - 5), e.lineTo(i, u)) : (e.moveTo(i - 5, u + 5), e.lineTo(i + 5, u + 5), e.lineTo(i, u)), e.closePath(), e.fill();
1245
1245
  let d = this.structureLabels && "label" in t ? String(t.label) : this.showLabels ? Re(t.price) : null;
1246
1246
  d && (e.textBaseline = c ? "bottom" : "top", e.fillText(d, i, c ? u - 5 - 1 : u + 5 + 1));
@@ -1318,7 +1318,7 @@ var ze = class {
1318
1318
  let a = 1 / i, { chartRect: o } = t, s = Math.max(2, t.barWidth + t.barSpacing), c = o.x, l = o.x + o.width, u = o.y, d = o.y + o.height;
1319
1319
  e.save();
1320
1320
  for (let i of r) {
1321
- let r = P(i.time, t);
1321
+ let r = F(i.time, t);
1322
1322
  if (r < c - s || r > l + s) continue;
1323
1323
  let o = r - s / 2;
1324
1324
  this.drawSide(e, i.bids, n.candleUp, o, s, t, a, u, d), this.drawSide(e, i.asks, n.candleDown, o, s, t, a, u, d);
@@ -1330,7 +1330,7 @@ var ze = class {
1330
1330
  let l = Ve(t, a);
1331
1331
  e.fillStyle = n;
1332
1332
  for (let n of t) {
1333
- let t = k(n.price, a);
1333
+ let t = A(n.price, a);
1334
1334
  t < s - l || t > c + l || (e.globalAlpha = Math.min(1, Math.sqrt(n.volume * o)) * this.opacity, e.fillRect(r, t - l / 2, i, l));
1335
1335
  }
1336
1336
  e.globalAlpha = 1;
@@ -1345,7 +1345,7 @@ function Ve(e, t) {
1345
1345
  }
1346
1346
  if (r.length === 0) return 3;
1347
1347
  r.sort((e, t) => e - t);
1348
- let i = r[Math.floor(r.length / 2)], a = Math.abs(k(n[0], t) - k(n[0] + i, t));
1348
+ let i = r[Math.floor(r.length / 2)], a = Math.abs(A(n[0], t) - A(n[0] + i, t));
1349
1349
  return Math.max(2, Math.min(a, 12));
1350
1350
  }
1351
1351
  //#endregion
@@ -1391,15 +1391,15 @@ var He = class {
1391
1391
  e.strokeStyle = t.color, e.lineWidth = t.lineWidth ?? 1.5, e.lineJoin = "round", e.beginPath();
1392
1392
  let u = !1, d = Math.min(n.length, t.data.length);
1393
1393
  for (let n = s; n < d; n++) {
1394
- let i = O(n, r);
1394
+ let i = k(n, r);
1395
1395
  if (i < a.x - o) continue;
1396
1396
  if (i > a.x + a.width + o) break;
1397
1397
  let s;
1398
- s = this.mode === "percent" ? k(c * (1 + (t.data[n].close - l) / l), r) : k(t.data[n].close, r), u ? e.lineTo(i, s) : (e.moveTo(i, s), u = !0);
1398
+ s = this.mode === "percent" ? A(c * (1 + (t.data[n].close - l) / l), r) : A(t.data[n].close, r), u ? e.lineTo(i, s) : (e.moveTo(i, s), u = !0);
1399
1399
  }
1400
1400
  if (e.stroke(), u) {
1401
- let n = Math.min(s + 2, d - 1), i = O(n, r) + 4, a;
1402
- a = this.mode === "percent" ? k(c * (1 + (t.data[n].close - l) / l), r) - 4 : k(t.data[n].close, r) - 4, e.fillStyle = t.color, e.font = "bold 10px sans-serif", e.textBaseline = "bottom", e.textAlign = "left", e.fillText(t.label, i, a);
1401
+ let n = Math.min(s + 2, d - 1), i = k(n, r) + 4, a;
1402
+ a = this.mode === "percent" ? A(c * (1 + (t.data[n].close - l) / l), r) - 4 : A(t.data[n].close, r) - 4, e.fillStyle = t.color, e.font = "bold 10px sans-serif", e.textBaseline = "bottom", e.textAlign = "left", e.fillText(t.label, i, a);
1403
1403
  }
1404
1404
  }
1405
1405
  };
@@ -1601,7 +1601,7 @@ function Ye(e, t) {
1601
1601
  }
1602
1602
  //#endregion
1603
1603
  //#region src/indicators/IndicatorBase.ts
1604
- var I = class {
1604
+ var L = class {
1605
1605
  drawLine(e, t, n, r) {
1606
1606
  if (!(t.length < 2)) {
1607
1607
  e.beginPath(), e.strokeStyle = n, e.lineWidth = r, e.lineJoin = "round", e.moveTo(t[0].x, t[0].y);
@@ -1630,8 +1630,8 @@ var I = class {
1630
1630
  for (let s = a; s <= o && s < n.length; s++) {
1631
1631
  let a = e.values.get(n[s].time);
1632
1632
  a && a[t] !== void 0 && i.push({
1633
- x: O(s, r),
1634
- y: k(a[t], r)
1633
+ x: k(s, r),
1634
+ y: A(a[t], r)
1635
1635
  });
1636
1636
  }
1637
1637
  return i;
@@ -1751,7 +1751,7 @@ var I = class {
1751
1751
  };
1752
1752
  //#endregion
1753
1753
  //#region src/indicators/params.ts
1754
- function L(e, t, n) {
1754
+ function R(e, t, n) {
1755
1755
  let r = e.params[t];
1756
1756
  if (typeof r == "number" && Number.isFinite(r)) return r;
1757
1757
  if (typeof r == "string") {
@@ -1760,13 +1760,13 @@ function L(e, t, n) {
1760
1760
  }
1761
1761
  return n;
1762
1762
  }
1763
- function R(e, t, n, r = 1) {
1764
- let i = L(e, t, n);
1763
+ function z(e, t, n, r = 1) {
1764
+ let i = R(e, t, n);
1765
1765
  return Math.max(r, Math.floor(i));
1766
1766
  }
1767
1767
  //#endregion
1768
1768
  //#region src/indicators/overlay/SMA.ts
1769
- var Qe = class extends I {
1769
+ var Qe = class extends L {
1770
1770
  descriptor = {
1771
1771
  id: "sma",
1772
1772
  name: "Simple Moving Average",
@@ -1774,7 +1774,7 @@ var Qe = class extends I {
1774
1774
  defaultConfig: { period: 20 }
1775
1775
  };
1776
1776
  calculate(e, t) {
1777
- let n = R(t, "period", 20, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = 0;
1777
+ let n = z(t, "period", 20, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = 0;
1778
1778
  for (let t = 0; t < e.length; t++) if (a += e[t].close, t >= n && (a -= e[t - n].close), t >= n - 1) {
1779
1779
  let o = { value: a / n };
1780
1780
  r.set(e[t].time, o), i[t] = o;
@@ -1793,12 +1793,12 @@ var Qe = class extends I {
1793
1793
  for (let t = a; t <= o && t < i.length; t++) {
1794
1794
  let r = i[t];
1795
1795
  if (!r || r.value === void 0) continue;
1796
- let a = O(t, n), o = k(r.value, n);
1796
+ let a = k(t, n), o = A(r.value, n);
1797
1797
  s ? e.lineTo(a, o) : (e.moveTo(a, o), s = !0);
1798
1798
  }
1799
1799
  e.stroke();
1800
1800
  }
1801
- }, $e = class extends I {
1801
+ }, $e = class extends L {
1802
1802
  descriptor = {
1803
1803
  id: "ema",
1804
1804
  name: "Exponential Moving Average",
@@ -1806,7 +1806,7 @@ var Qe = class extends I {
1806
1806
  defaultConfig: { period: 20 }
1807
1807
  };
1808
1808
  calculate(e, t) {
1809
- let n = R(t, "period", 20, 1), r = 2 / (n + 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = 0;
1809
+ let n = z(t, "period", 20, 1), r = 2 / (n + 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = 0;
1810
1810
  for (let t = 0; t < e.length; t++) {
1811
1811
  if (t < n - 1) {
1812
1812
  o += e[t].close;
@@ -1830,12 +1830,12 @@ var Qe = class extends I {
1830
1830
  for (let t = a; t <= o && t < i.length; t++) {
1831
1831
  let r = i[t];
1832
1832
  if (!r || r.value === void 0) continue;
1833
- let a = O(t, n), o = k(r.value, n);
1833
+ let a = k(t, n), o = A(r.value, n);
1834
1834
  s ? e.lineTo(a, o) : (e.moveTo(a, o), s = !0);
1835
1835
  }
1836
1836
  e.stroke();
1837
1837
  }
1838
- }, et = class extends I {
1838
+ }, et = class extends L {
1839
1839
  descriptor = {
1840
1840
  id: "bb",
1841
1841
  name: "Bollinger Bands",
@@ -1846,7 +1846,7 @@ var Qe = class extends I {
1846
1846
  }
1847
1847
  };
1848
1848
  calculate(e, t) {
1849
- let n = R(t, "period", 20, 1), r = L(t, "stdDev", 2), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = 0, s = 0;
1849
+ let n = z(t, "period", 20, 1), r = R(t, "stdDev", 2), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = 0, s = 0;
1850
1850
  for (let t = 0; t < e.length; t++) {
1851
1851
  let c = e[t].close;
1852
1852
  if (o += c, s += c * c, t >= n) {
@@ -1874,14 +1874,14 @@ var Qe = class extends I {
1874
1874
  for (let e = a; e <= o && e < i.length; e++) {
1875
1875
  let t = i[e];
1876
1876
  if (!t || t.upper === void 0) continue;
1877
- let r = O(e, n);
1878
- l[s] = r, u[s] = k(t.upper, n), d[s] = r, f[s] = k(t.middle, n), p[s] = r, m[s] = k(t.lower, n), s++;
1877
+ let r = k(e, n);
1878
+ l[s] = r, u[s] = A(t.upper, n), d[s] = r, f[s] = A(t.middle, n), p[s] = r, m[s] = A(t.lower, n), s++;
1879
1879
  }
1880
1880
  if (!(s < 2)) {
1881
1881
  e.beginPath(), e.moveTo(l[0], u[0]);
1882
1882
  for (let t = 1; t < s; t++) e.lineTo(l[t], u[t]);
1883
1883
  for (let t = s - 1; t >= 0; t--) e.lineTo(p[t], m[t]);
1884
- e.closePath(), e.fillStyle = C(r.colors[0], .1), e.fill(), e.beginPath(), e.strokeStyle = r.colors[0], e.lineWidth = r.lineWidths[0], e.lineJoin = "round", e.moveTo(l[0], u[0]);
1884
+ e.closePath(), e.fillStyle = w(r.colors[0], .1), e.fill(), e.beginPath(), e.strokeStyle = r.colors[0], e.lineWidth = r.lineWidths[0], e.lineJoin = "round", e.moveTo(l[0], u[0]);
1885
1885
  for (let t = 1; t < s; t++) e.lineTo(l[t], u[t]);
1886
1886
  e.stroke(), e.beginPath(), e.strokeStyle = r.colors[1] ?? r.colors[0], e.moveTo(d[0], f[0]);
1887
1887
  for (let t = 1; t < s; t++) e.lineTo(d[t], f[t]);
@@ -1890,7 +1890,7 @@ var Qe = class extends I {
1890
1890
  e.stroke();
1891
1891
  }
1892
1892
  }
1893
- }, tt = class extends I {
1893
+ }, tt = class extends L {
1894
1894
  descriptor = {
1895
1895
  id: "vwap",
1896
1896
  name: "Volume Weighted Average Price",
@@ -1920,12 +1920,12 @@ var Qe = class extends I {
1920
1920
  for (let t = a; t <= o && t < i.length; t++) {
1921
1921
  let r = i[t];
1922
1922
  if (!r || r.value === void 0) continue;
1923
- let a = O(t, n), o = k(r.value, n);
1923
+ let a = k(t, n), o = A(r.value, n);
1924
1924
  s ? e.lineTo(a, o) : (e.moveTo(a, o), s = !0);
1925
1925
  }
1926
1926
  e.stroke();
1927
1927
  }
1928
- }, nt = class extends I {
1928
+ }, nt = class extends L {
1929
1929
  descriptor = {
1930
1930
  id: "ichimoku",
1931
1931
  name: "Ichimoku Cloud",
@@ -1938,7 +1938,7 @@ var Qe = class extends I {
1938
1938
  }
1939
1939
  };
1940
1940
  calculate(e, t) {
1941
- let n = R(t, "tenkan", 9, 1), r = R(t, "kijun", 26, 1), i = R(t, "senkou", 52, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = (t) => {
1941
+ let n = z(t, "tenkan", 9, 1), r = z(t, "kijun", 26, 1), i = z(t, "senkou", 52, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = (t) => {
1942
1942
  let n = new Float64Array(e.length), r = new Float64Array(e.length);
1943
1943
  for (let i = 0; i < e.length; i++) {
1944
1944
  let a = -Infinity, o = Infinity, s = Math.max(0, i - t + 1);
@@ -1966,15 +1966,15 @@ var Qe = class extends I {
1966
1966
  for (let e = a; e <= o && e < i.length; e++) {
1967
1967
  let t = i[e];
1968
1968
  if (!t) continue;
1969
- let r = O(e, n);
1970
- t.tenkan !== void 0 && (c[u] = r, l[u] = k(t.tenkan, n), u++), t.kijun !== void 0 && (d[p] = r, f[p] = k(t.kijun, n), p++), t.senkouA !== void 0 && (m[g] = r, h[g] = k(t.senkouA, n), g++), t.senkouB !== void 0 && (_[y] = r, v[y] = k(t.senkouB, n), y++);
1969
+ let r = k(e, n);
1970
+ t.tenkan !== void 0 && (c[u] = r, l[u] = A(t.tenkan, n), u++), t.kijun !== void 0 && (d[p] = r, f[p] = A(t.kijun, n), p++), t.senkouA !== void 0 && (m[g] = r, h[g] = A(t.senkouA, n), g++), t.senkouB !== void 0 && (_[y] = r, v[y] = A(t.senkouB, n), y++);
1971
1971
  }
1972
1972
  if (g > 1 && y > 1) {
1973
1973
  let t = Math.min(g, y);
1974
1974
  e.beginPath(), e.moveTo(m[0], h[0]);
1975
1975
  for (let n = 1; n < t; n++) e.lineTo(m[n], h[n]);
1976
1976
  for (let n = t - 1; n >= 0; n--) e.lineTo(_[n], v[n]);
1977
- e.closePath(), e.fillStyle = C(r.colors[2] ?? "#26A69A", .15), e.fill();
1977
+ e.closePath(), e.fillStyle = w(r.colors[2] ?? "#26A69A", .15), e.fill();
1978
1978
  }
1979
1979
  let b = (t, n, r, i, a) => {
1980
1980
  if (!(r < 2)) {
@@ -1985,7 +1985,7 @@ var Qe = class extends I {
1985
1985
  };
1986
1986
  b(c, l, u, r.colors[0], r.lineWidths[0]), b(d, f, p, r.colors[1] ?? "#FF9800", r.lineWidths[0]), b(m, h, g, r.colors[2] ?? "#26A69A", 1), b(_, v, y, r.colors[3] ?? "#EF5350", 1);
1987
1987
  }
1988
- }, rt = class extends I {
1988
+ }, rt = class extends L {
1989
1989
  descriptor = {
1990
1990
  id: "psar",
1991
1991
  name: "Parabolic SAR",
@@ -1996,7 +1996,7 @@ var Qe = class extends I {
1996
1996
  }
1997
1997
  };
1998
1998
  calculate(e, t) {
1999
- let n = L(t, "step", .02), r = L(t, "max", .2), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
1999
+ let n = R(t, "step", .02), r = R(t, "max", .2), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2000
2000
  if (e.length < 2) return {
2001
2001
  values: i,
2002
2002
  series: a
@@ -2027,11 +2027,11 @@ var Qe = class extends I {
2027
2027
  for (let t = a; t <= o && t < i.length; t++) {
2028
2028
  let a = i[t];
2029
2029
  if (!a || a.value === void 0) continue;
2030
- let o = O(t, n), c = k(a.value, n);
2030
+ let o = k(t, n), c = A(a.value, n);
2031
2031
  e.beginPath(), e.arc(o, c, s, 0, Math.PI * 2), e.fillStyle = a.trend === 1 ? r.colors[0] : r.colors[1] ?? "#EF5350", e.fill();
2032
2032
  }
2033
2033
  }
2034
- }, it = class extends I {
2034
+ }, it = class extends L {
2035
2035
  descriptor = {
2036
2036
  id: "supertrend",
2037
2037
  name: "Supertrend",
@@ -2042,7 +2042,7 @@ var Qe = class extends I {
2042
2042
  }
2043
2043
  };
2044
2044
  calculate(e, t) {
2045
- let n = R(t, "period", 10, 1), r = L(t, "multiplier", 3), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2045
+ let n = z(t, "period", 10, 1), r = R(t, "multiplier", 3), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2046
2046
  if (e.length < n) return {
2047
2047
  values: i,
2048
2048
  series: a
@@ -2075,11 +2075,11 @@ var Qe = class extends I {
2075
2075
  for (let t = a; t <= o && t < i.length; t++) {
2076
2076
  let a = i[t];
2077
2077
  if (!a || a.value === void 0) continue;
2078
- let o = O(t, n), f = k(a.value, n), p = a.trend ?? 1;
2078
+ let o = k(t, n), f = A(a.value, n), p = a.trend ?? 1;
2079
2079
  d !== 0 && (e.beginPath(), e.strokeStyle = p === 1 ? s : c, e.lineWidth = r.lineWidths[0] + .5, e.moveTo(l, u), e.lineTo(o, f), e.stroke()), l = o, u = f, d = p;
2080
2080
  }
2081
2081
  }
2082
- }, at = class extends I {
2082
+ }, at = class extends L {
2083
2083
  descriptor = {
2084
2084
  id: "keltner",
2085
2085
  name: "Keltner Channel",
@@ -2091,7 +2091,7 @@ var Qe = class extends I {
2091
2091
  }
2092
2092
  };
2093
2093
  calculate(e, t) {
2094
- let n = R(t, "emaPeriod", 20, 1), r = R(t, "atrPeriod", 10, 1), i = L(t, "multiplier", 1.5), a = /* @__PURE__ */ new Map();
2094
+ let n = z(t, "emaPeriod", 20, 1), r = z(t, "atrPeriod", 10, 1), i = R(t, "multiplier", 1.5), a = /* @__PURE__ */ new Map();
2095
2095
  if (e.length < Math.max(n, r)) return { values: a };
2096
2096
  let o = 2 / (n + 1), s = e[0].close, c = [s];
2097
2097
  for (let t = 1; t < e.length; t++) s = (e[t].close - s) * o + s, c.push(s);
@@ -2122,21 +2122,21 @@ var Qe = class extends I {
2122
2122
  for (let e = a; e <= o && e < i.length; e++) {
2123
2123
  let t = i[e];
2124
2124
  if (!t) continue;
2125
- let r = O(e, n);
2125
+ let r = k(e, n);
2126
2126
  t.upper !== void 0 && s.push({
2127
2127
  x: r,
2128
- y: k(t.upper, n)
2128
+ y: A(t.upper, n)
2129
2129
  }), t.middle !== void 0 && c.push({
2130
2130
  x: r,
2131
- y: k(t.middle, n)
2131
+ y: A(t.middle, n)
2132
2132
  }), t.lower !== void 0 && l.push({
2133
2133
  x: r,
2134
- y: k(t.lower, n)
2134
+ y: A(t.lower, n)
2135
2135
  });
2136
2136
  }
2137
- this.drawBand(e, s, l, C(r.colors[0], .08)), this.drawLine(e, s, r.colors[0], r.lineWidths[0]), this.drawLine(e, c, r.colors[1] ?? r.colors[0], r.lineWidths[0]), this.drawLine(e, l, r.colors[0], r.lineWidths[0]);
2137
+ this.drawBand(e, s, l, w(r.colors[0], .08)), this.drawLine(e, s, r.colors[0], r.lineWidths[0]), this.drawLine(e, c, r.colors[1] ?? r.colors[0], r.lineWidths[0]), this.drawLine(e, l, r.colors[0], r.lineWidths[0]);
2138
2138
  }
2139
- }, ot = class extends I {
2139
+ }, ot = class extends L {
2140
2140
  descriptor = {
2141
2141
  id: "donchian",
2142
2142
  name: "Donchian Channel",
@@ -2144,7 +2144,7 @@ var Qe = class extends I {
2144
2144
  defaultConfig: { period: 20 }
2145
2145
  };
2146
2146
  calculate(e, t) {
2147
- let n = R(t, "period", 20, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2147
+ let n = z(t, "period", 20, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2148
2148
  for (let t = n - 1; t < e.length; t++) {
2149
2149
  let a = -Infinity, o = Infinity;
2150
2150
  for (let r = t - n + 1; r <= t; r++) e[r].high > a && (a = e[r].high), e[r].low < o && (o = e[r].low);
@@ -2167,19 +2167,19 @@ var Qe = class extends I {
2167
2167
  for (let e = a; e <= o && e < i.length; e++) {
2168
2168
  let t = i[e];
2169
2169
  if (!t) continue;
2170
- let r = O(e, n);
2170
+ let r = k(e, n);
2171
2171
  t.upper !== void 0 && s.push({
2172
2172
  x: r,
2173
- y: k(t.upper, n)
2173
+ y: A(t.upper, n)
2174
2174
  }), t.middle !== void 0 && c.push({
2175
2175
  x: r,
2176
- y: k(t.middle, n)
2176
+ y: A(t.middle, n)
2177
2177
  }), t.lower !== void 0 && l.push({
2178
2178
  x: r,
2179
- y: k(t.lower, n)
2179
+ y: A(t.lower, n)
2180
2180
  });
2181
2181
  }
2182
- this.drawBand(e, s, l, C(r.colors[0], .08)), this.drawLine(e, s, r.colors[0], r.lineWidths[0]), this.drawLine(e, c, r.colors[1] ?? "#787B86", 1), this.drawLine(e, l, r.colors[0], r.lineWidths[0]);
2182
+ this.drawBand(e, s, l, w(r.colors[0], .08)), this.drawLine(e, s, r.colors[0], r.lineWidths[0]), this.drawLine(e, c, r.colors[1] ?? "#787B86", 1), this.drawLine(e, l, r.colors[0], r.lineWidths[0]);
2183
2183
  }
2184
2184
  }, st = [
2185
2185
  "s3",
@@ -2189,7 +2189,7 @@ var Qe = class extends I {
2189
2189
  "r1",
2190
2190
  "r2",
2191
2191
  "r3"
2192
- ], ct = class extends I {
2192
+ ], ct = class extends L {
2193
2193
  descriptor = {
2194
2194
  id: "pivots",
2195
2195
  name: "Pivot Points (Classic)",
@@ -2197,7 +2197,7 @@ var Qe = class extends I {
2197
2197
  defaultConfig: { lookback: 24 }
2198
2198
  };
2199
2199
  calculate(e, t) {
2200
- let n = R(t, "lookback", 24, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2200
+ let n = z(t, "lookback", 24, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2201
2201
  if (e.length <= n) return {
2202
2202
  values: r,
2203
2203
  series: i
@@ -2231,13 +2231,13 @@ var Qe = class extends I {
2231
2231
  for (let s = a; s <= o && s < i.length; s++) {
2232
2232
  let a = i[s]?.[t];
2233
2233
  if (a === void 0) continue;
2234
- let o = O(s, n), c = k(a, n);
2234
+ let o = k(s, n), c = A(a, n);
2235
2235
  r ? e.lineTo(o, c) : (e.moveTo(o, c), r = !0);
2236
2236
  }
2237
2237
  e.stroke(), e.setLineDash([]);
2238
2238
  }
2239
2239
  }
2240
- }, lt = class extends I {
2240
+ }, lt = class extends L {
2241
2241
  descriptor = {
2242
2242
  id: "avwap",
2243
2243
  name: "Anchored VWAP",
@@ -2245,7 +2245,7 @@ var Qe = class extends I {
2245
2245
  defaultConfig: { anchorTime: 0 }
2246
2246
  };
2247
2247
  calculate(e, t) {
2248
- let n = L(t, "anchorTime", 0), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = 0;
2248
+ let n = R(t, "anchorTime", 0), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = 0;
2249
2249
  if (n > 0 && (a = e.findIndex((e) => e.time >= n), a < 0)) return {
2250
2250
  values: r,
2251
2251
  series: i
@@ -2272,12 +2272,12 @@ var Qe = class extends I {
2272
2272
  for (let t = a; t <= o && t < i.length; t++) {
2273
2273
  let r = i[t];
2274
2274
  if (!r || r.value === void 0) continue;
2275
- let a = O(t, n), o = k(r.value, n);
2275
+ let a = k(t, n), o = A(r.value, n);
2276
2276
  s ? e.lineTo(a, o) : (e.moveTo(a, o), s = !0);
2277
2277
  }
2278
2278
  e.stroke();
2279
2279
  }
2280
- }, ut = class extends I {
2280
+ }, ut = class extends L {
2281
2281
  descriptor = {
2282
2282
  id: "zigzag",
2283
2283
  name: "ZigZag",
@@ -2285,7 +2285,7 @@ var Qe = class extends I {
2285
2285
  defaultConfig: { deviation: 5 }
2286
2286
  };
2287
2287
  calculate(e, t) {
2288
- let n = Math.max(.01, L(t, "deviation", 5)) / 100, r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2288
+ let n = Math.max(.01, R(t, "deviation", 5)) / 100, r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2289
2289
  if (e.length < 2) return {
2290
2290
  values: r,
2291
2291
  series: i,
@@ -2336,13 +2336,13 @@ var Qe = class extends I {
2336
2336
  if (!(!i || i.length < 2)) {
2337
2337
  e.beginPath(), e.strokeStyle = r.colors[0], e.lineWidth = r.lineWidths[0], e.lineJoin = "round";
2338
2338
  for (let t = 0; t < i.length; t++) {
2339
- let r = i[t], a = O(r.idx, n), o = k(r.price, n);
2339
+ let r = i[t], a = k(r.idx, n), o = A(r.price, n);
2340
2340
  t === 0 ? e.moveTo(a, o) : e.lineTo(a, o);
2341
2341
  }
2342
2342
  e.stroke();
2343
2343
  }
2344
2344
  }
2345
- }, dt = class extends I {
2345
+ }, dt = class extends L {
2346
2346
  descriptor = {
2347
2347
  id: "lrc",
2348
2348
  name: "Linear Regression Channel",
@@ -2353,7 +2353,7 @@ var Qe = class extends I {
2353
2353
  }
2354
2354
  };
2355
2355
  calculate(e, t) {
2356
- let n = R(t, "period", 100, 2), r = L(t, "stdDev", 2), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2356
+ let n = z(t, "period", 100, 2), r = R(t, "stdDev", 2), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2357
2357
  if (e.length < n) return {
2358
2358
  values: i,
2359
2359
  series: a
@@ -2391,21 +2391,21 @@ var Qe = class extends I {
2391
2391
  for (let e = a; e <= o && e < i.length; e++) {
2392
2392
  let t = i[e];
2393
2393
  if (!t) continue;
2394
- let r = O(e, n);
2394
+ let r = k(e, n);
2395
2395
  t.middle !== void 0 && c.push({
2396
2396
  x: r,
2397
- y: k(t.middle, n)
2397
+ y: A(t.middle, n)
2398
2398
  }), t.upper !== void 0 && s.push({
2399
2399
  x: r,
2400
- y: k(t.upper, n)
2400
+ y: A(t.upper, n)
2401
2401
  }), t.lower !== void 0 && l.push({
2402
2402
  x: r,
2403
- y: k(t.lower, n)
2403
+ y: A(t.lower, n)
2404
2404
  });
2405
2405
  }
2406
- this.drawBand(e, s, l, C(r.colors[0], .08)), this.drawLine(e, s, r.colors[0], r.lineWidths[0]), this.drawLine(e, c, r.colors[1] ?? r.colors[0], r.lineWidths[0]), this.drawLine(e, l, r.colors[0], r.lineWidths[0]);
2406
+ this.drawBand(e, s, l, w(r.colors[0], .08)), this.drawLine(e, s, r.colors[0], r.lineWidths[0]), this.drawLine(e, c, r.colors[1] ?? r.colors[0], r.lineWidths[0]), this.drawLine(e, l, r.colors[0], r.lineWidths[0]);
2407
2407
  }
2408
- }, ft = class extends I {
2408
+ }, ft = class extends L {
2409
2409
  descriptor = {
2410
2410
  id: "hma",
2411
2411
  name: "Hull Moving Average",
@@ -2413,7 +2413,7 @@ var Qe = class extends I {
2413
2413
  defaultConfig: { period: 21 }
2414
2414
  };
2415
2415
  calculate(e, t) {
2416
- let n = R(t, "period", 21, 2), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2416
+ let n = z(t, "period", 21, 2), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2417
2417
  if (e.length < n) return {
2418
2418
  values: r,
2419
2419
  series: i
@@ -2438,7 +2438,7 @@ var Qe = class extends I {
2438
2438
  for (let t = a; t <= o && t < i.length; t++) {
2439
2439
  let r = i[t];
2440
2440
  if (!r || r.value === void 0) continue;
2441
- let a = O(t, n), o = k(r.value, n);
2441
+ let a = k(t, n), o = A(r.value, n);
2442
2442
  s ? e.lineTo(a, o) : (e.moveTo(a, o), s = !0);
2443
2443
  }
2444
2444
  e.stroke();
@@ -2473,7 +2473,7 @@ function mt(e, t) {
2473
2473
  }
2474
2474
  //#endregion
2475
2475
  //#region src/indicators/overlay/MTFMovingAverage.ts
2476
- var ht = class extends I {
2476
+ var ht = class extends L {
2477
2477
  descriptor = {
2478
2478
  id: "mtfma",
2479
2479
  name: "MTF Moving Average",
@@ -2484,19 +2484,19 @@ var ht = class extends I {
2484
2484
  }
2485
2485
  };
2486
2486
  calculate(e, t) {
2487
- let n = R(t, "period", 50, 1), r = String(t.params.timeframe ?? "1d"), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2487
+ let n = z(t, "period", 50, 1), r = String(t.params.timeframe ?? "1d"), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2488
2488
  if (e.length === 0) return {
2489
2489
  values: i,
2490
2490
  series: a
2491
2491
  };
2492
- let o = [], s = b(e[0].time, r), c = e[0].close, l = null, u = () => {
2492
+ let o = [], s = x(e[0].time, r), c = e[0].close, l = null, u = () => {
2493
2493
  if (o.length < n) return;
2494
2494
  let e = 0;
2495
2495
  for (let t = o.length - n; t < o.length; t++) e += o[t];
2496
2496
  l = e / n;
2497
2497
  };
2498
2498
  for (let t = 0; t < e.length; t++) {
2499
- let n = b(e[t].time, r);
2499
+ let n = x(e[t].time, r);
2500
2500
  if (n !== s && (o.push(c), u(), s = n), c = e[t].close, l !== null) {
2501
2501
  let n = { value: l };
2502
2502
  i.set(e[t].time, n), a[t] = n;
@@ -2516,12 +2516,12 @@ var ht = class extends I {
2516
2516
  for (let t = a; t <= o && t < i.length; t++) {
2517
2517
  let r = i[t];
2518
2518
  if (!r || r.value === void 0) continue;
2519
- let a = O(t, n), o = k(r.value, n);
2519
+ let a = k(t, n), o = A(r.value, n);
2520
2520
  s ? e.lineTo(a, o) : (e.moveTo(a, o), s = !0);
2521
2521
  }
2522
2522
  e.stroke();
2523
2523
  }
2524
- }, gt = class extends I {
2524
+ }, gt = class extends L {
2525
2525
  descriptor = {
2526
2526
  id: "svwap",
2527
2527
  name: "Session VWAP",
@@ -2529,14 +2529,14 @@ var ht = class extends I {
2529
2529
  defaultConfig: { bands: 1 }
2530
2530
  };
2531
2531
  calculate(e, t) {
2532
- let n = Math.min(3, R(t, "bands", 1, 0)), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2532
+ let n = Math.min(3, z(t, "bands", 1, 0)), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2533
2533
  if (e.length === 0) return {
2534
2534
  values: r,
2535
2535
  series: i
2536
2536
  };
2537
- let a = b(e[0].time, "1d"), o = 0, s = 0, c = 0;
2537
+ let a = x(e[0].time, "1d"), o = 0, s = 0, c = 0;
2538
2538
  for (let t = 0; t < e.length; t++) {
2539
- let l = e[t], u = b(l.time, "1d");
2539
+ let l = e[t], u = x(l.time, "1d");
2540
2540
  u !== a && (o = 0, s = 0, c = 0, a = u);
2541
2541
  let d = (l.high + l.low + l.close) / 3;
2542
2542
  if (o += d * l.volume, s += d * d * l.volume, c += l.volume, c > 0) {
@@ -2573,12 +2573,12 @@ var ht = class extends I {
2573
2573
  s = !1;
2574
2574
  continue;
2575
2575
  }
2576
- let l = O(c, n), u = k(i, n), d = r.session !== o;
2576
+ let l = k(c, n), u = A(i, n), d = r.session !== o;
2577
2577
  !s || d ? (e.moveTo(l, u), s = !0) : e.lineTo(l, u), o = r.session;
2578
2578
  }
2579
2579
  e.stroke();
2580
2580
  }
2581
- }, _t = class extends I {
2581
+ }, _t = class extends L {
2582
2582
  descriptor = {
2583
2583
  id: "chandelier",
2584
2584
  name: "Chandelier Exit",
@@ -2589,7 +2589,7 @@ var ht = class extends I {
2589
2589
  }
2590
2590
  };
2591
2591
  calculate(e, t) {
2592
- let n = R(t, "period", 22, 1), r = L(t, "multiplier", 3), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
2592
+ let n = z(t, "period", 22, 1), r = R(t, "multiplier", 3), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
2593
2593
  if (o <= n) return {
2594
2594
  values: i,
2595
2595
  series: a
@@ -2629,14 +2629,14 @@ var ht = class extends I {
2629
2629
  c = !1;
2630
2630
  continue;
2631
2631
  }
2632
- let o = O(r, n), s = k(a[t], n);
2632
+ let o = k(r, n), s = A(a[t], n);
2633
2633
  c ? e.lineTo(o, s) : (e.moveTo(o, s), c = !0);
2634
2634
  }
2635
2635
  e.stroke(), e.setLineDash([]);
2636
2636
  };
2637
2637
  s("long", r.colors[0] ?? "#26A69A"), s("short", r.colors[1] ?? "#EF5350");
2638
2638
  }
2639
- }, vt = class extends I {
2639
+ }, vt = class extends L {
2640
2640
  descriptor = {
2641
2641
  id: "alligator",
2642
2642
  name: "Alligator",
@@ -2651,7 +2651,7 @@ var ht = class extends I {
2651
2651
  }
2652
2652
  };
2653
2653
  calculate(e, t) {
2654
- let n = R(t, "jaw", 13, 1), r = R(t, "teeth", 8, 1), i = R(t, "lips", 5, 1), a = R(t, "jawShift", 8, 0), o = R(t, "teethShift", 5, 0), s = R(t, "lipsShift", 3, 0), c = /* @__PURE__ */ new Map(), l = e.length, u = Array(l).fill(null);
2654
+ let n = z(t, "jaw", 13, 1), r = z(t, "teeth", 8, 1), i = z(t, "lips", 5, 1), a = z(t, "jawShift", 8, 0), o = z(t, "teethShift", 5, 0), s = z(t, "lipsShift", 3, 0), c = /* @__PURE__ */ new Map(), l = e.length, u = Array(l).fill(null);
2655
2655
  if (l === 0) return {
2656
2656
  values: c,
2657
2657
  series: u
@@ -2680,7 +2680,7 @@ var ht = class extends I {
2680
2680
  c = !1;
2681
2681
  continue;
2682
2682
  }
2683
- let o = O(r, n), s = k(a[t], n);
2683
+ let o = k(r, n), s = A(a[t], n);
2684
2684
  c ? e.lineTo(o, s) : (e.moveTo(o, s), c = !0);
2685
2685
  }
2686
2686
  e.stroke();
@@ -2700,7 +2700,7 @@ function yt(e, t) {
2700
2700
  }
2701
2701
  //#endregion
2702
2702
  //#region src/indicators/panel/AwesomeOscillator.ts
2703
- var bt = class extends I {
2703
+ var bt = class extends L {
2704
2704
  descriptor = {
2705
2705
  id: "ao",
2706
2706
  name: "Awesome Oscillator",
@@ -2711,7 +2711,7 @@ var bt = class extends I {
2711
2711
  }
2712
2712
  };
2713
2713
  calculate(e, t) {
2714
- let n = R(t, "fast", 5, 1), r = R(t, "slow", 34, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2714
+ let n = z(t, "fast", 5, 1), r = z(t, "slow", 34, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2715
2715
  if (e.length < r) return {
2716
2716
  values: i,
2717
2717
  series: a
@@ -2744,11 +2744,11 @@ var bt = class extends I {
2744
2744
  for (let t = o; t <= s && t < i.length; t++) {
2745
2745
  let r = i[t];
2746
2746
  if (!r || r.value === void 0) continue;
2747
- let a = O(t, n), o = d(r.value), s = Math.min(o, f), c = Math.max(Math.abs(o - f), 1);
2747
+ let a = k(t, n), o = d(r.value), s = Math.min(o, f), c = Math.max(Math.abs(o - f), 1);
2748
2748
  e.fillStyle = r.up ? m : h, e.fillRect(a - p, s, n.barWidth, c);
2749
2749
  }
2750
2750
  }
2751
- }, xt = class extends I {
2751
+ }, xt = class extends L {
2752
2752
  descriptor = {
2753
2753
  id: "chaikinOsc",
2754
2754
  name: "Chaikin Oscillator",
@@ -2759,7 +2759,7 @@ var bt = class extends I {
2759
2759
  }
2760
2760
  };
2761
2761
  calculate(e, t) {
2762
- let n = R(t, "fast", 3, 1), r = R(t, "slow", 10, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2762
+ let n = z(t, "fast", 3, 1), r = z(t, "slow", 10, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null);
2763
2763
  if (e.length < r) return {
2764
2764
  values: i,
2765
2765
  series: a
@@ -2793,11 +2793,11 @@ var bt = class extends I {
2793
2793
  for (let t = o; t <= s && t < i.length; t++) {
2794
2794
  let r = i[t];
2795
2795
  if (!r || r.value === void 0) continue;
2796
- let a = O(t, n), o = d(r.value), s = Math.min(o, f), c = Math.max(Math.abs(o - f), 1);
2796
+ let a = k(t, n), o = d(r.value), s = Math.min(o, f), c = Math.max(Math.abs(o - f), 1);
2797
2797
  e.fillStyle = r.value >= 0 ? m : h, e.fillRect(a - p, s, n.barWidth, c);
2798
2798
  }
2799
2799
  }
2800
- }, St = class extends I {
2800
+ }, St = class extends L {
2801
2801
  descriptor = {
2802
2802
  id: "rsi",
2803
2803
  name: "Relative Strength Index",
@@ -2805,7 +2805,7 @@ var bt = class extends I {
2805
2805
  defaultConfig: { period: 14 }
2806
2806
  };
2807
2807
  calculate(e, t) {
2808
- let n = R(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2808
+ let n = z(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
2809
2809
  if (e.length < n + 1) return {
2810
2810
  values: r,
2811
2811
  series: i
@@ -2843,12 +2843,12 @@ var bt = class extends I {
2843
2843
  for (let t = o; t <= s && t < i.length; t++) {
2844
2844
  let r = i[t];
2845
2845
  if (!r || r.value === void 0) continue;
2846
- let a = O(t, n), o = c(r.value);
2846
+ let a = k(t, n), o = c(r.value);
2847
2847
  l ? e.lineTo(a, o) : (e.moveTo(a, o), l = !0);
2848
2848
  }
2849
2849
  e.stroke();
2850
2850
  }
2851
- }, Ct = class extends I {
2851
+ }, Ct = class extends L {
2852
2852
  descriptor = {
2853
2853
  id: "macd",
2854
2854
  name: "MACD",
@@ -2860,7 +2860,7 @@ var bt = class extends I {
2860
2860
  }
2861
2861
  };
2862
2862
  calculate(e, t) {
2863
- let n = R(t, "fast", 12, 1), r = R(t, "slow", 26, 1), i = R(t, "signal", 9, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null);
2863
+ let n = z(t, "fast", 12, 1), r = z(t, "slow", 26, 1), i = z(t, "signal", 9, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null);
2864
2864
  if (e.length < r) return {
2865
2865
  values: a,
2866
2866
  series: o
@@ -2899,7 +2899,7 @@ var bt = class extends I {
2899
2899
  for (let e = o; e <= s && e < i.length; e++) {
2900
2900
  let t = i[e];
2901
2901
  if (!t) continue;
2902
- let r = O(e, n);
2902
+ let r = k(e, n);
2903
2903
  if (t.histogram !== void 0) {
2904
2904
  let e = d(t.histogram), i = Math.min(e, f), a = Math.max(Math.abs(e - f), 1);
2905
2905
  t.histogram >= 0 ? v.rect(r - p, i, n.barWidth, a) : y.rect(r - p, i, n.barWidth, a);
@@ -2915,7 +2915,7 @@ var bt = class extends I {
2915
2915
  }
2916
2916
  e.fillStyle = m, e.fill(v), e.fillStyle = h, e.fill(y), e.strokeStyle = g, e.lineWidth = r.lineWidths[0], e.lineJoin = "round", e.stroke(S), e.strokeStyle = _, e.stroke(C);
2917
2917
  }
2918
- }, wt = class extends I {
2918
+ }, wt = class extends L {
2919
2919
  descriptor = {
2920
2920
  id: "stochastic",
2921
2921
  name: "Stochastic Oscillator",
@@ -2927,7 +2927,7 @@ var bt = class extends I {
2927
2927
  }
2928
2928
  };
2929
2929
  calculate(e, t) {
2930
- let n = R(t, "kPeriod", 14, 1), r = R(t, "dPeriod", 3, 1), i = R(t, "smooth", 3, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null);
2930
+ let n = z(t, "kPeriod", 14, 1), r = z(t, "dPeriod", 3, 1), i = z(t, "smooth", 3, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null);
2931
2931
  if (e.length < n) return {
2932
2932
  values: a,
2933
2933
  series: o
@@ -2983,14 +2983,14 @@ var bt = class extends I {
2983
2983
  for (let r = o; r <= s && r < i.length; r++) {
2984
2984
  let a = i[r];
2985
2985
  if (!a || a[t] === void 0) continue;
2986
- let o = O(r, n), s = c(a[t]);
2986
+ let o = k(r, n), s = c(a[t]);
2987
2987
  l ? e.lineTo(o, s) : (e.moveTo(o, s), l = !0);
2988
2988
  }
2989
2989
  e.stroke();
2990
2990
  };
2991
2991
  l("k", r.colors[0]), l("d", r.colors[1] ?? "#FF9800");
2992
2992
  }
2993
- }, Tt = class extends I {
2993
+ }, Tt = class extends L {
2994
2994
  descriptor = {
2995
2995
  id: "atr",
2996
2996
  name: "Average True Range",
@@ -2998,7 +2998,7 @@ var bt = class extends I {
2998
2998
  defaultConfig: { period: 14 }
2999
2999
  };
3000
3000
  calculate(e, t) {
3001
- let n = R(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3001
+ let n = z(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3002
3002
  if (e.length < 2) return {
3003
3003
  values: r,
3004
3004
  series: i
@@ -3038,13 +3038,13 @@ var bt = class extends I {
3038
3038
  for (let t = o; t <= s && t < i.length; t++) {
3039
3039
  let r = i[t];
3040
3040
  if (r && r.value !== void 0) {
3041
- let i = O(t, n), a = p(r.value);
3041
+ let i = k(t, n), a = p(r.value);
3042
3042
  m ? e.lineTo(i, a) : (e.moveTo(i, a), m = !0);
3043
3043
  }
3044
3044
  }
3045
3045
  e.stroke();
3046
3046
  }
3047
- }, Et = class extends I {
3047
+ }, Et = class extends L {
3048
3048
  descriptor = {
3049
3049
  id: "adx",
3050
3050
  name: "Average Directional Index",
@@ -3052,7 +3052,7 @@ var bt = class extends I {
3052
3052
  defaultConfig: { period: 14 }
3053
3053
  };
3054
3054
  calculate(e, t) {
3055
- let n = R(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3055
+ let n = z(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3056
3056
  if (e.length < n * 2) return {
3057
3057
  values: r,
3058
3058
  series: i
@@ -3110,14 +3110,14 @@ var bt = class extends I {
3110
3110
  for (let r = o; r <= s && r < i.length; r++) {
3111
3111
  let a = i[r];
3112
3112
  if (!a || a[t] === void 0) continue;
3113
- let o = O(r, n), s = c(a[t]);
3113
+ let o = k(r, n), s = c(a[t]);
3114
3114
  l ? e.lineTo(o, s) : (e.moveTo(o, s), l = !0);
3115
3115
  }
3116
3116
  e.stroke();
3117
3117
  };
3118
3118
  l("adx", r.colors[0]), l("plusDI", r.colors[1] ?? "#26A69A"), l("minusDI", r.colors[2] ?? "#EF5350");
3119
3119
  }
3120
- }, Dt = class extends I {
3120
+ }, Dt = class extends L {
3121
3121
  descriptor = {
3122
3122
  id: "obv",
3123
3123
  name: "On Balance Volume",
@@ -3157,13 +3157,13 @@ var bt = class extends I {
3157
3157
  for (let t = o; t <= s && t < i.length; t++) {
3158
3158
  let r = i[t];
3159
3159
  if (r && r.value !== void 0) {
3160
- let i = O(t, n), a = p(r.value);
3160
+ let i = k(t, n), a = p(r.value);
3161
3161
  m ? e.lineTo(i, a) : (e.moveTo(i, a), m = !0);
3162
3162
  }
3163
3163
  }
3164
3164
  e.stroke();
3165
3165
  }
3166
- }, Ot = class extends I {
3166
+ }, Ot = class extends L {
3167
3167
  descriptor = {
3168
3168
  id: "williamsR",
3169
3169
  name: "Williams %R",
@@ -3171,7 +3171,7 @@ var bt = class extends I {
3171
3171
  defaultConfig: { period: 14 }
3172
3172
  };
3173
3173
  calculate(e, t) {
3174
- let n = R(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3174
+ let n = z(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3175
3175
  for (let t = n - 1; t < e.length; t++) {
3176
3176
  let a = -Infinity, o = Infinity;
3177
3177
  for (let r = t - n + 1; r <= t; r++) e[r].high > a && (a = e[r].high), e[r].low < o && (o = e[r].low);
@@ -3197,13 +3197,13 @@ var bt = class extends I {
3197
3197
  for (let t = o; t <= s && t < i.length; t++) {
3198
3198
  let r = i[t];
3199
3199
  if (r && r.value !== void 0) {
3200
- let i = O(t, n), a = c(r.value);
3200
+ let i = k(t, n), a = c(r.value);
3201
3201
  l ? e.lineTo(i, a) : (e.moveTo(i, a), l = !0);
3202
3202
  }
3203
3203
  }
3204
3204
  e.stroke();
3205
3205
  }
3206
- }, kt = class extends I {
3206
+ }, kt = class extends L {
3207
3207
  descriptor = {
3208
3208
  id: "cci",
3209
3209
  name: "Commodity Channel Index",
@@ -3211,7 +3211,7 @@ var bt = class extends I {
3211
3211
  defaultConfig: { period: 20 }
3212
3212
  };
3213
3213
  calculate(e, t) {
3214
- let n = R(t, "period", 20, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3214
+ let n = z(t, "period", 20, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3215
3215
  for (let t = n - 1; t < e.length; t++) {
3216
3216
  let a = 0;
3217
3217
  for (let r = t - n + 1; r <= t; r++) a += (e[r].high + e[r].low + e[r].close) / 3;
@@ -3252,13 +3252,13 @@ var bt = class extends I {
3252
3252
  for (let t = o; t <= s && t < i.length; t++) {
3253
3253
  let r = i[t];
3254
3254
  if (r && r.value !== void 0) {
3255
- let i = O(t, n), a = m(r.value);
3255
+ let i = k(t, n), a = m(r.value);
3256
3256
  h ? e.lineTo(i, a) : (e.moveTo(i, a), h = !0);
3257
3257
  }
3258
3258
  }
3259
3259
  e.stroke();
3260
3260
  }
3261
- }, At = class extends I {
3261
+ }, At = class extends L {
3262
3262
  descriptor = {
3263
3263
  id: "mfi",
3264
3264
  name: "Money Flow Index",
@@ -3266,7 +3266,7 @@ var bt = class extends I {
3266
3266
  defaultConfig: { period: 14 }
3267
3267
  };
3268
3268
  calculate(e, t) {
3269
- let n = R(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3269
+ let n = z(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3270
3270
  if (e.length < n + 1) return {
3271
3271
  values: r,
3272
3272
  series: i
@@ -3297,13 +3297,13 @@ var bt = class extends I {
3297
3297
  for (let t = o; t <= s && t < i.length; t++) {
3298
3298
  let r = i[t];
3299
3299
  if (r && r.value !== void 0) {
3300
- let i = O(t, n), a = c(r.value);
3300
+ let i = k(t, n), a = c(r.value);
3301
3301
  l ? e.lineTo(i, a) : (e.moveTo(i, a), l = !0);
3302
3302
  }
3303
3303
  }
3304
3304
  e.stroke();
3305
3305
  }
3306
- }, jt = class extends I {
3306
+ }, jt = class extends L {
3307
3307
  descriptor = {
3308
3308
  id: "aroon",
3309
3309
  name: "Aroon",
@@ -3311,7 +3311,7 @@ var bt = class extends I {
3311
3311
  defaultConfig: { period: 25 }
3312
3312
  };
3313
3313
  calculate(e, t) {
3314
- let n = R(t, "period", 25, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3314
+ let n = z(t, "period", 25, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3315
3315
  for (let t = n; t < e.length; t++) {
3316
3316
  let a = 0, o = 0, s = -Infinity, c = Infinity;
3317
3317
  for (let r = 0; r <= n; r++) {
@@ -3338,14 +3338,14 @@ var bt = class extends I {
3338
3338
  for (let r = o; r <= s && r < i.length; r++) {
3339
3339
  let a = i[r];
3340
3340
  if (!a || a[t] === void 0) continue;
3341
- let o = O(r, n), s = c(a[t]);
3341
+ let o = k(r, n), s = c(a[t]);
3342
3342
  l ? e.lineTo(o, s) : (e.moveTo(o, s), l = !0);
3343
3343
  }
3344
3344
  e.stroke();
3345
3345
  };
3346
3346
  l("up", r.colors[0]), l("down", r.colors[1] ?? "#EF5350");
3347
3347
  }
3348
- }, Mt = class extends I {
3348
+ }, Mt = class extends L {
3349
3349
  descriptor = {
3350
3350
  id: "roc",
3351
3351
  name: "Rate of Change",
@@ -3353,7 +3353,7 @@ var bt = class extends I {
3353
3353
  defaultConfig: { period: 12 }
3354
3354
  };
3355
3355
  calculate(e, t) {
3356
- let n = R(t, "period", 12, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3356
+ let n = z(t, "period", 12, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3357
3357
  for (let t = n; t < e.length; t++) {
3358
3358
  let a = e[t - n].close, o = { value: a === 0 ? 0 : (e[t].close - a) / a * 100 };
3359
3359
  r.set(e[t].time, o), i[t] = o;
@@ -3383,13 +3383,13 @@ var bt = class extends I {
3383
3383
  for (let t = o; t <= s && t < i.length; t++) {
3384
3384
  let r = i[t];
3385
3385
  if (r && r.value !== void 0) {
3386
- let i = O(t, n), a = m(r.value);
3386
+ let i = k(t, n), a = m(r.value);
3387
3387
  h ? e.lineTo(i, a) : (e.moveTo(i, a), h = !0);
3388
3388
  }
3389
3389
  }
3390
3390
  e.stroke();
3391
3391
  }
3392
- }, Nt = class extends I {
3392
+ }, Nt = class extends L {
3393
3393
  descriptor = {
3394
3394
  id: "tsi",
3395
3395
  name: "True Strength Index",
@@ -3406,7 +3406,7 @@ var bt = class extends I {
3406
3406
  return r;
3407
3407
  }
3408
3408
  calculate(e, t) {
3409
- let n = R(t, "longPeriod", 25, 1), r = R(t, "shortPeriod", 13, 1), i = R(t, "signalPeriod", 7, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null);
3409
+ let n = z(t, "longPeriod", 25, 1), r = z(t, "shortPeriod", 13, 1), i = z(t, "signalPeriod", 7, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null);
3410
3410
  if (e.length < 2) return {
3411
3411
  values: a,
3412
3412
  series: o
@@ -3451,14 +3451,14 @@ var bt = class extends I {
3451
3451
  for (let r = o; r <= s && r < i.length; r++) {
3452
3452
  let a = i[r];
3453
3453
  if (!a || a[t] === void 0) continue;
3454
- let o = O(r, n), s = m(a[t]);
3454
+ let o = k(r, n), s = m(a[t]);
3455
3455
  c ? e.lineTo(o, s) : (e.moveTo(o, s), c = !0);
3456
3456
  }
3457
3457
  e.stroke();
3458
3458
  };
3459
3459
  h("tsi", r.colors[0]), h("signal", r.colors[1] ?? "#FF9800");
3460
3460
  }
3461
- }, Pt = class extends I {
3461
+ }, Pt = class extends L {
3462
3462
  descriptor = {
3463
3463
  id: "cmf",
3464
3464
  name: "Chaikin Money Flow",
@@ -3466,7 +3466,7 @@ var bt = class extends I {
3466
3466
  defaultConfig: { period: 20 }
3467
3467
  };
3468
3468
  calculate(e, t) {
3469
- let n = R(t, "period", 20, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3469
+ let n = z(t, "period", 20, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3470
3470
  for (let t = n - 1; t < e.length; t++) {
3471
3471
  let a = 0, o = 0;
3472
3472
  for (let r = t - n + 1; r <= t; r++) {
@@ -3496,14 +3496,14 @@ var bt = class extends I {
3496
3496
  for (let t = o; t <= s && t < i.length; t++) {
3497
3497
  let a = i[t];
3498
3498
  if (a && a.value !== void 0) {
3499
- let i = O(t, n), o = m(a.value), s = m(0);
3499
+ let i = k(t, n), o = m(a.value), s = m(0);
3500
3500
  e.fillStyle = a.value >= 0 ? r.colors[0] : r.colors[1] ?? "#EF5350";
3501
3501
  let c = Math.min(o, s);
3502
3502
  e.fillRect(i - h, c, n.barWidth, Math.max(Math.abs(o - s), 1));
3503
3503
  }
3504
3504
  }
3505
3505
  }
3506
- }, Ft = class extends I {
3506
+ }, Ft = class extends L {
3507
3507
  descriptor = {
3508
3508
  id: "voldelta",
3509
3509
  name: "Volume Delta",
@@ -3511,7 +3511,7 @@ var bt = class extends I {
3511
3511
  defaultConfig: { mode: 0 }
3512
3512
  };
3513
3513
  calculate(e, t) {
3514
- let n = L(t, "mode", 0) >= 1, r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = 0;
3514
+ let n = R(t, "mode", 0) >= 1, r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = 0;
3515
3515
  for (let t = 0; t < e.length; t++) {
3516
3516
  let o = e[t], s = o.close >= o.open, c = s ? o.volume : -o.volume;
3517
3517
  a += c;
@@ -3539,11 +3539,11 @@ var bt = class extends I {
3539
3539
  for (let t = o; t <= s && t < i.length; t++) {
3540
3540
  let r = i[t];
3541
3541
  if (!r || r.value === void 0) continue;
3542
- let a = O(t, n), o = l(r.value), s = Math.min(o, u), c = Math.max(Math.abs(o - u), 1);
3542
+ let a = k(t, n), o = l(r.value), s = Math.min(o, u), c = Math.max(Math.abs(o - u), 1);
3543
3543
  e.fillStyle = r.up ? f : p, e.fillRect(a - d, s, n.barWidth, c);
3544
3544
  }
3545
3545
  }
3546
- }, It = class extends I {
3546
+ }, It = class extends L {
3547
3547
  descriptor = {
3548
3548
  id: "vortex",
3549
3549
  name: "Vortex Indicator",
@@ -3551,7 +3551,7 @@ var bt = class extends I {
3551
3551
  defaultConfig: { period: 14 }
3552
3552
  };
3553
3553
  calculate(e, t) {
3554
- let n = R(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3554
+ let n = z(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3555
3555
  if (e.length <= n) return {
3556
3556
  values: r,
3557
3557
  series: i
@@ -3601,14 +3601,14 @@ var bt = class extends I {
3601
3601
  for (let r = o; r <= s && r < i.length; r++) {
3602
3602
  let a = i[r];
3603
3603
  if (!a || a[t] === void 0) continue;
3604
- let o = O(r, n), s = f(a[t]);
3604
+ let o = k(r, n), s = f(a[t]);
3605
3605
  c ? e.lineTo(o, s) : (e.moveTo(o, s), c = !0);
3606
3606
  }
3607
3607
  e.stroke();
3608
3608
  };
3609
3609
  p("viPlus", r.colors[0] ?? "#26A69A"), p("viMinus", r.colors[1] ?? "#EF5350");
3610
3610
  }
3611
- }, Lt = class extends I {
3611
+ }, Lt = class extends L {
3612
3612
  descriptor = {
3613
3613
  id: "chop",
3614
3614
  name: "Choppiness Index",
@@ -3616,7 +3616,7 @@ var bt = class extends I {
3616
3616
  defaultConfig: { period: 14 }
3617
3617
  };
3618
3618
  calculate(e, t) {
3619
- let n = R(t, "period", 14, 2), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3619
+ let n = z(t, "period", 14, 2), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3620
3620
  if (e.length <= n) return {
3621
3621
  values: r,
3622
3622
  series: i
@@ -3655,12 +3655,12 @@ var bt = class extends I {
3655
3655
  for (let t = o; t <= s && t < i.length; t++) {
3656
3656
  let r = i[t];
3657
3657
  if (!r || r.value === void 0) continue;
3658
- let a = O(t, n), o = c(r.value);
3658
+ let a = k(t, n), o = c(r.value);
3659
3659
  l ? e.lineTo(a, o) : (e.moveTo(a, o), l = !0);
3660
3660
  }
3661
3661
  e.stroke();
3662
3662
  }
3663
- }, Rt = class extends I {
3663
+ }, Rt = class extends L {
3664
3664
  descriptor = {
3665
3665
  id: "uo",
3666
3666
  name: "Ultimate Oscillator",
@@ -3672,7 +3672,7 @@ var bt = class extends I {
3672
3672
  }
3673
3673
  };
3674
3674
  calculate(e, t) {
3675
- let n = R(t, "fast", 7, 1), r = R(t, "mid", 14, 1), i = R(t, "slow", 28, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null);
3675
+ let n = z(t, "fast", 7, 1), r = z(t, "mid", 14, 1), i = z(t, "slow", 28, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null);
3676
3676
  if (e.length <= i) return {
3677
3677
  values: a,
3678
3678
  series: o
@@ -3710,7 +3710,7 @@ var bt = class extends I {
3710
3710
  for (let t = o; t <= s && t < i.length; t++) {
3711
3711
  let r = i[t];
3712
3712
  if (!r || r.value === void 0) continue;
3713
- let a = O(t, n), o = c(r.value);
3713
+ let a = k(t, n), o = c(r.value);
3714
3714
  l ? e.lineTo(a, o) : (e.moveTo(a, o), l = !0);
3715
3715
  }
3716
3716
  e.stroke();
@@ -3721,7 +3721,7 @@ function zt(e, t) {
3721
3721
  }
3722
3722
  //#endregion
3723
3723
  //#region src/indicators/panel/ForceIndex.ts
3724
- var Bt = class extends I {
3724
+ var Bt = class extends L {
3725
3725
  descriptor = {
3726
3726
  id: "fi",
3727
3727
  name: "Force Index",
@@ -3729,7 +3729,7 @@ var Bt = class extends I {
3729
3729
  defaultConfig: { period: 13 }
3730
3730
  };
3731
3731
  calculate(e, t) {
3732
- let n = R(t, "period", 13, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3732
+ let n = z(t, "period", 13, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
3733
3733
  if (e.length < 2) return {
3734
3734
  values: r,
3735
3735
  series: i
@@ -3762,12 +3762,12 @@ var Bt = class extends I {
3762
3762
  for (let t = o; t <= s && t < i.length; t++) {
3763
3763
  let r = i[t];
3764
3764
  if (!r || r.value === void 0) continue;
3765
- let a = O(t, n), o = l(r.value);
3765
+ let a = k(t, n), o = l(r.value);
3766
3766
  d ? e.lineTo(a, o) : (e.moveTo(a, o), d = !0);
3767
3767
  }
3768
3768
  e.stroke();
3769
3769
  }
3770
- }, Vt = class extends I {
3770
+ }, Vt = class extends L {
3771
3771
  descriptor = {
3772
3772
  id: "crsi",
3773
3773
  name: "Connors RSI",
@@ -3779,7 +3779,7 @@ var Bt = class extends I {
3779
3779
  }
3780
3780
  };
3781
3781
  calculate(e, t) {
3782
- let n = R(t, "rsiPeriod", 3, 1), r = R(t, "streakPeriod", 2, 1), i = R(t, "rankPeriod", 100, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = e.length;
3782
+ let n = z(t, "rsiPeriod", 3, 1), r = z(t, "streakPeriod", 2, 1), i = z(t, "rankPeriod", 100, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = e.length;
3783
3783
  if (s < 2) return {
3784
3784
  values: a,
3785
3785
  series: o
@@ -3816,7 +3816,7 @@ var Bt = class extends I {
3816
3816
  for (let t = o; t <= s && t < i.length; t++) {
3817
3817
  let r = i[t];
3818
3818
  if (!r || r.value === void 0) continue;
3819
- let a = O(t, n), o = c(r.value);
3819
+ let a = k(t, n), o = c(r.value);
3820
3820
  l ? e.lineTo(a, o) : (e.moveTo(a, o), l = !0);
3821
3821
  }
3822
3822
  e.stroke();
@@ -3839,7 +3839,7 @@ function Ht(e, t) {
3839
3839
  }
3840
3840
  //#endregion
3841
3841
  //#region src/indicators/panel/Coppock.ts
3842
- var Ut = class extends I {
3842
+ var Ut = class extends L {
3843
3843
  descriptor = {
3844
3844
  id: "coppock",
3845
3845
  name: "Coppock Curve",
@@ -3851,7 +3851,7 @@ var Ut = class extends I {
3851
3851
  }
3852
3852
  };
3853
3853
  calculate(e, t) {
3854
- let n = R(t, "longRoc", 14, 1), r = R(t, "shortRoc", 11, 1), i = R(t, "wma", 10, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = e.length, c = Math.max(n, r);
3854
+ let n = z(t, "longRoc", 14, 1), r = z(t, "shortRoc", 11, 1), i = z(t, "wma", 10, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = e.length, c = Math.max(n, r);
3855
3855
  if (s <= c + i) return {
3856
3856
  values: a,
3857
3857
  series: o
@@ -3893,12 +3893,12 @@ var Ut = class extends I {
3893
3893
  for (let t = o; t <= s && t < i.length; t++) {
3894
3894
  let r = i[t];
3895
3895
  if (!r || r.value === void 0) continue;
3896
- let a = O(t, n), o = l(r.value);
3896
+ let a = k(t, n), o = l(r.value);
3897
3897
  d ? e.lineTo(a, o) : (e.moveTo(a, o), d = !0);
3898
3898
  }
3899
3899
  e.stroke();
3900
3900
  }
3901
- }, Wt = class extends I {
3901
+ }, Wt = class extends L {
3902
3902
  descriptor = {
3903
3903
  id: "kst",
3904
3904
  name: "Know Sure Thing",
@@ -3916,14 +3916,14 @@ var Ut = class extends I {
3916
3916
  }
3917
3917
  };
3918
3918
  calculate(e, t) {
3919
- let n = R(t, "roc1", 10, 1), r = R(t, "roc2", 15, 1), i = R(t, "roc3", 20, 1), a = R(t, "roc4", 30, 1), o = R(t, "sma1", 10, 1), s = R(t, "sma2", 10, 1), c = R(t, "sma3", 10, 1), l = R(t, "sma4", 15, 1), u = R(t, "signal", 9, 1), d = /* @__PURE__ */ new Map(), f = Array(e.length).fill(null), p = e.length;
3919
+ let n = z(t, "roc1", 10, 1), r = z(t, "roc2", 15, 1), i = z(t, "roc3", 20, 1), a = z(t, "roc4", 30, 1), o = z(t, "sma1", 10, 1), s = z(t, "sma2", 10, 1), c = z(t, "sma3", 10, 1), l = z(t, "sma4", 15, 1), u = z(t, "signal", 9, 1), d = /* @__PURE__ */ new Map(), f = Array(e.length).fill(null), p = e.length;
3920
3920
  if (p < 2) return {
3921
3921
  values: d,
3922
3922
  series: f
3923
3923
  };
3924
- let m = e.map((e) => e.close), h = z(Gt(m, n), o), g = z(Gt(m, r), s), _ = z(Gt(m, i), c), v = z(Gt(m, a), l), y = Array(p).fill(void 0);
3924
+ let m = e.map((e) => e.close), h = B(Gt(m, n), o), g = B(Gt(m, r), s), _ = B(Gt(m, i), c), v = B(Gt(m, a), l), y = Array(p).fill(void 0);
3925
3925
  for (let e = 0; e < p; e++) h[e] === void 0 || g[e] === void 0 || _[e] === void 0 || v[e] === void 0 || (y[e] = h[e] * 1 + g[e] * 2 + _[e] * 3 + v[e] * 4);
3926
- let b = z(y, u);
3926
+ let b = B(y, u);
3927
3927
  for (let t = 0; t < p; t++) {
3928
3928
  if (y[t] === void 0) continue;
3929
3929
  let n = { value: y[t] };
@@ -3957,7 +3957,7 @@ var Ut = class extends I {
3957
3957
  c = !1;
3958
3958
  continue;
3959
3959
  }
3960
- let o = O(r, n), s = l(a[t]);
3960
+ let o = k(r, n), s = l(a[t]);
3961
3961
  c ? e.lineTo(o, s) : (e.moveTo(o, s), c = !0);
3962
3962
  }
3963
3963
  e.stroke();
@@ -3970,7 +3970,7 @@ function Gt(e, t) {
3970
3970
  for (let r = t; r < e.length; r++) n[r] = e[r - t] === 0 ? 0 : (e[r] - e[r - t]) / e[r - t] * 100;
3971
3971
  return n;
3972
3972
  }
3973
- function z(e, t) {
3973
+ function B(e, t) {
3974
3974
  let n = Array(e.length).fill(void 0);
3975
3975
  for (let r = t - 1; r < e.length; r++) {
3976
3976
  let i = 0, a = !0;
@@ -3988,7 +3988,7 @@ function z(e, t) {
3988
3988
  }
3989
3989
  //#endregion
3990
3990
  //#region src/indicators/panel/ElderRay.ts
3991
- var Kt = class extends I {
3991
+ var Kt = class extends L {
3992
3992
  descriptor = {
3993
3993
  id: "elderray",
3994
3994
  name: "Elder Ray",
@@ -3996,7 +3996,7 @@ var Kt = class extends I {
3996
3996
  defaultConfig: { period: 13 }
3997
3997
  };
3998
3998
  calculate(e, t) {
3999
- let n = R(t, "period", 13, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
3999
+ let n = z(t, "period", 13, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4000
4000
  if (a === 0) return {
4001
4001
  values: r,
4002
4002
  series: i
@@ -4032,7 +4032,7 @@ var Kt = class extends I {
4032
4032
  for (let t = o; t <= s && t < i.length; t++) {
4033
4033
  let r = i[t];
4034
4034
  if (!r) continue;
4035
- let a = O(t, n);
4035
+ let a = k(t, n);
4036
4036
  if (r.bull !== void 0) {
4037
4037
  let t = l(r.bull);
4038
4038
  e.fillStyle = f, e.globalAlpha = .8, e.fillRect(a - d, Math.min(t, u), Math.max(1, d), Math.abs(t - u));
@@ -4044,7 +4044,7 @@ var Kt = class extends I {
4044
4044
  }
4045
4045
  e.globalAlpha = 1;
4046
4046
  }
4047
- }, qt = class extends I {
4047
+ }, qt = class extends L {
4048
4048
  descriptor = {
4049
4049
  id: "stc",
4050
4050
  name: "Schaff Trend Cycle",
@@ -4056,7 +4056,7 @@ var Kt = class extends I {
4056
4056
  }
4057
4057
  };
4058
4058
  calculate(e, t) {
4059
- let n = R(t, "fast", 23, 1), r = R(t, "slow", 50, 1), i = R(t, "cycle", 10, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = e.length;
4059
+ let n = z(t, "fast", 23, 1), r = z(t, "slow", 50, 1), i = z(t, "cycle", 10, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = e.length;
4060
4060
  if (s === 0) return {
4061
4061
  values: a,
4062
4062
  series: o
@@ -4089,7 +4089,7 @@ var Kt = class extends I {
4089
4089
  for (let t = o; t <= s && t < i.length; t++) {
4090
4090
  let r = i[t];
4091
4091
  if (!r || r.value === void 0) continue;
4092
- let a = O(t, n), o = c(r.value);
4092
+ let a = k(t, n), o = c(r.value);
4093
4093
  l ? e.lineTo(a, o) : (e.moveTo(a, o), l = !0);
4094
4094
  }
4095
4095
  e.stroke();
@@ -4116,7 +4116,7 @@ function Jt(e, t) {
4116
4116
  }
4117
4117
  //#endregion
4118
4118
  //#region src/indicators/panel/Klinger.ts
4119
- var Yt = class extends I {
4119
+ var Yt = class extends L {
4120
4120
  descriptor = {
4121
4121
  id: "kvo",
4122
4122
  name: "Klinger Oscillator",
@@ -4128,7 +4128,7 @@ var Yt = class extends I {
4128
4128
  }
4129
4129
  };
4130
4130
  calculate(e, t) {
4131
- let n = R(t, "fast", 34, 1), r = R(t, "slow", 55, 1), i = R(t, "signal", 13, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = e.length;
4131
+ let n = z(t, "fast", 34, 1), r = z(t, "slow", 55, 1), i = z(t, "signal", 13, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = e.length;
4132
4132
  if (s < 2) return {
4133
4133
  values: a,
4134
4134
  series: o
@@ -4176,14 +4176,14 @@ var Yt = class extends I {
4176
4176
  c = !1;
4177
4177
  continue;
4178
4178
  }
4179
- let o = O(r, n), s = l(a[t]);
4179
+ let o = k(r, n), s = l(a[t]);
4180
4180
  c ? e.lineTo(o, s) : (e.moveTo(o, s), c = !0);
4181
4181
  }
4182
4182
  e.stroke();
4183
4183
  };
4184
4184
  d("value", r.colors[0] ?? "#2962FF"), d("signal", r.colors[1] ?? "#FF9800");
4185
4185
  }
4186
- }, Xt = class extends I {
4186
+ }, Xt = class extends L {
4187
4187
  descriptor = {
4188
4188
  id: "fisher",
4189
4189
  name: "Fisher Transform",
@@ -4191,7 +4191,7 @@ var Yt = class extends I {
4191
4191
  defaultConfig: { period: 9 }
4192
4192
  };
4193
4193
  calculate(e, t) {
4194
- let n = R(t, "period", 9, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4194
+ let n = z(t, "period", 9, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4195
4195
  if (a < n) return {
4196
4196
  values: r,
4197
4197
  series: i
@@ -4237,14 +4237,14 @@ var Yt = class extends I {
4237
4237
  c = !1;
4238
4238
  continue;
4239
4239
  }
4240
- let o = O(r, n), s = l(a[t]);
4240
+ let o = k(r, n), s = l(a[t]);
4241
4241
  c ? e.lineTo(o, s) : (e.moveTo(o, s), c = !0);
4242
4242
  }
4243
4243
  e.stroke();
4244
4244
  };
4245
4245
  d("value", r.colors[0] ?? "#2962FF"), d("trigger", r.colors[1] ?? "#FF9800");
4246
4246
  }
4247
- }, Zt = class extends I {
4247
+ }, Zt = class extends L {
4248
4248
  descriptor = {
4249
4249
  id: "dpo",
4250
4250
  name: "Detrended Price Oscillator",
@@ -4252,7 +4252,7 @@ var Yt = class extends I {
4252
4252
  defaultConfig: { period: 20 }
4253
4253
  };
4254
4254
  calculate(e, t) {
4255
- let n = R(t, "period", 20, 2), r = Math.floor(n / 2) + 1, i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
4255
+ let n = z(t, "period", 20, 2), r = Math.floor(n / 2) + 1, i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
4256
4256
  if (o < n) return {
4257
4257
  values: i,
4258
4258
  series: a
@@ -4282,11 +4282,11 @@ var Yt = class extends I {
4282
4282
  for (let t = o; t <= s && t < i.length; t++) {
4283
4283
  let r = i[t];
4284
4284
  if (!r || r.value === void 0) continue;
4285
- let a = O(t, n), o = l(r.value);
4285
+ let a = k(t, n), o = l(r.value);
4286
4286
  e.fillStyle = r.value >= 0 ? f : p, e.fillRect(a - d, Math.min(o, u), n.barWidth, Math.max(1, Math.abs(o - u)));
4287
4287
  }
4288
4288
  }
4289
- }, Qt = class extends I {
4289
+ }, Qt = class extends L {
4290
4290
  descriptor = {
4291
4291
  id: "bop",
4292
4292
  name: "Balance of Power",
@@ -4294,7 +4294,7 @@ var Yt = class extends I {
4294
4294
  defaultConfig: { smooth: 14 }
4295
4295
  };
4296
4296
  calculate(e, t) {
4297
- let n = R(t, "smooth", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4297
+ let n = z(t, "smooth", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4298
4298
  if (a === 0) return {
4299
4299
  values: r,
4300
4300
  series: i
@@ -4323,12 +4323,12 @@ var Yt = class extends I {
4323
4323
  for (let t = o; t <= s && t < i.length; t++) {
4324
4324
  let r = i[t];
4325
4325
  if (!r || r.value === void 0) continue;
4326
- let a = O(t, n), o = c(Math.max(-1, Math.min(1, r.value)));
4326
+ let a = k(t, n), o = c(Math.max(-1, Math.min(1, r.value)));
4327
4327
  u ? e.lineTo(a, o) : (e.moveTo(a, o), u = !0);
4328
4328
  }
4329
4329
  e.stroke();
4330
4330
  }
4331
- }, $t = class extends I {
4331
+ }, $t = class extends L {
4332
4332
  descriptor = {
4333
4333
  id: "massindex",
4334
4334
  name: "Mass Index",
@@ -4339,7 +4339,7 @@ var Yt = class extends I {
4339
4339
  }
4340
4340
  };
4341
4341
  calculate(e, t) {
4342
- let n = R(t, "ema", 9, 1), r = R(t, "sum", 25, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
4342
+ let n = z(t, "ema", 9, 1), r = z(t, "sum", 25, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
4343
4343
  if (o < r) return {
4344
4344
  values: i,
4345
4345
  series: a
@@ -4380,12 +4380,12 @@ var Yt = class extends I {
4380
4380
  for (let t = o; t <= s && t < i.length; t++) {
4381
4381
  let r = i[t];
4382
4382
  if (!r || r.value === void 0) continue;
4383
- let a = O(t, n), o = d(r.value);
4383
+ let a = k(t, n), o = d(r.value);
4384
4384
  f ? e.lineTo(a, o) : (e.moveTo(a, o), f = !0);
4385
4385
  }
4386
4386
  e.stroke();
4387
4387
  }
4388
- }, en = class extends I {
4388
+ }, en = class extends L {
4389
4389
  descriptor = {
4390
4390
  id: "cmo",
4391
4391
  name: "Chande Momentum",
@@ -4393,7 +4393,7 @@ var Yt = class extends I {
4393
4393
  defaultConfig: { period: 9 }
4394
4394
  };
4395
4395
  calculate(e, t) {
4396
- let n = R(t, "period", 9, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4396
+ let n = z(t, "period", 9, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4397
4397
  if (a <= n) return {
4398
4398
  values: r,
4399
4399
  series: i
@@ -4431,12 +4431,12 @@ var Yt = class extends I {
4431
4431
  for (let t = o; t <= s && t < i.length; t++) {
4432
4432
  let r = i[t];
4433
4433
  if (!r || r.value === void 0) continue;
4434
- let a = O(t, n), o = c(r.value);
4434
+ let a = k(t, n), o = c(r.value);
4435
4435
  l ? e.lineTo(a, o) : (e.moveTo(a, o), l = !0);
4436
4436
  }
4437
4437
  e.stroke();
4438
4438
  }
4439
- }, tn = class extends I {
4439
+ }, tn = class extends L {
4440
4440
  descriptor = {
4441
4441
  id: "trix",
4442
4442
  name: "TRIX",
@@ -4447,14 +4447,14 @@ var Yt = class extends I {
4447
4447
  }
4448
4448
  };
4449
4449
  calculate(e, t) {
4450
- let n = R(t, "period", 15, 1), r = R(t, "signal", 9, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
4450
+ let n = z(t, "period", 15, 1), r = z(t, "signal", 9, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
4451
4451
  if (o < 2) return {
4452
4452
  values: i,
4453
4453
  series: a
4454
4454
  };
4455
- let s = B(B(B(e.map((e) => e.close), n), n), n), c = Array(o).fill(0);
4455
+ let s = nn(nn(nn(e.map((e) => e.close), n), n), n), c = Array(o).fill(0);
4456
4456
  for (let e = 1; e < o; e++) c[e] = s[e - 1] === 0 ? 0 : (s[e] - s[e - 1]) / s[e - 1] * 100;
4457
- let l = B(c, r), u = 3 * n;
4457
+ let l = nn(c, r), u = 3 * n;
4458
4458
  for (let t = u; t < o; t++) {
4459
4459
  let n = {
4460
4460
  value: c[t],
@@ -4490,7 +4490,7 @@ var Yt = class extends I {
4490
4490
  c = !1;
4491
4491
  continue;
4492
4492
  }
4493
- let o = O(r, n), s = l(a[t]);
4493
+ let o = k(r, n), s = l(a[t]);
4494
4494
  c ? e.lineTo(o, s) : (e.moveTo(o, s), c = !0);
4495
4495
  }
4496
4496
  e.stroke();
@@ -4498,7 +4498,7 @@ var Yt = class extends I {
4498
4498
  d("value", r.colors[0] ?? "#2962FF"), d("signal", r.colors[1] ?? "#FF9800");
4499
4499
  }
4500
4500
  };
4501
- function B(e, t) {
4501
+ function nn(e, t) {
4502
4502
  let n = 2 / (t + 1), r = Array(e.length).fill(0), i = e[0] ?? 0;
4503
4503
  r[0] = i;
4504
4504
  for (let t = 1; t < e.length; t++) i = e[t] * n + i * (1 - n), r[t] = i;
@@ -4506,7 +4506,7 @@ function B(e, t) {
4506
4506
  }
4507
4507
  //#endregion
4508
4508
  //#region src/indicators/panel/EaseOfMovement.ts
4509
- var nn = class extends I {
4509
+ var rn = class extends L {
4510
4510
  descriptor = {
4511
4511
  id: "emv",
4512
4512
  name: "Ease of Movement",
@@ -4514,7 +4514,7 @@ var nn = class extends I {
4514
4514
  defaultConfig: { period: 14 }
4515
4515
  };
4516
4516
  calculate(e, t) {
4517
- let n = R(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4517
+ let n = z(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4518
4518
  if (a < 2) return {
4519
4519
  values: r,
4520
4520
  series: i
@@ -4535,10 +4535,10 @@ var nn = class extends I {
4535
4535
  };
4536
4536
  }
4537
4537
  render(e, t, n, r) {
4538
- rn(e, t, n, r);
4538
+ an(e, t, n, r);
4539
4539
  }
4540
4540
  };
4541
- function rn(e, t, n, r) {
4541
+ function an(e, t, n, r) {
4542
4542
  let i = t.series;
4543
4543
  if (!i) return;
4544
4544
  let { chartRect: a } = n, { from: o, to: s } = n.visibleRange, c = 0;
@@ -4553,14 +4553,14 @@ function rn(e, t, n, r) {
4553
4553
  for (let t = o; t <= s && t < i.length; t++) {
4554
4554
  let r = i[t];
4555
4555
  if (!r || r.value === void 0) continue;
4556
- let a = O(t, n), o = l(r.value);
4556
+ let a = k(t, n), o = l(r.value);
4557
4557
  d ? e.lineTo(a, o) : (e.moveTo(a, o), d = !0);
4558
4558
  }
4559
4559
  e.stroke();
4560
4560
  }
4561
4561
  //#endregion
4562
4562
  //#region src/indicators/panel/WilliamsAD.ts
4563
- var an = class extends I {
4563
+ var on = class extends L {
4564
4564
  descriptor = {
4565
4565
  id: "wad",
4566
4566
  name: "Williams A/D",
@@ -4587,10 +4587,10 @@ var an = class extends I {
4587
4587
  };
4588
4588
  }
4589
4589
  render(e, t, n, r) {
4590
- on(e, t, n, r, O);
4590
+ sn(e, t, n, r, k);
4591
4591
  }
4592
4592
  };
4593
- function on(e, t, n, r, i) {
4593
+ function sn(e, t, n, r, i) {
4594
4594
  let a = t.series;
4595
4595
  if (!a) return;
4596
4596
  let { chartRect: o } = n, { from: s, to: c } = n.visibleRange, l = Infinity, u = -Infinity;
@@ -4612,7 +4612,7 @@ function on(e, t, n, r, i) {
4612
4612
  }
4613
4613
  //#endregion
4614
4614
  //#region src/indicators/panel/PriceVolumeTrend.ts
4615
- var sn = class extends I {
4615
+ var cn = class extends L {
4616
4616
  descriptor = {
4617
4617
  id: "pvt",
4618
4618
  name: "Price Volume Trend",
@@ -4639,9 +4639,9 @@ var sn = class extends I {
4639
4639
  };
4640
4640
  }
4641
4641
  render(e, t, n, r) {
4642
- on(e, t, n, r, O);
4642
+ sn(e, t, n, r, k);
4643
4643
  }
4644
- }, cn = class extends I {
4644
+ }, ln = class extends L {
4645
4645
  descriptor = {
4646
4646
  id: "chaikinvol",
4647
4647
  name: "Chaikin Volatility",
@@ -4652,7 +4652,7 @@ var sn = class extends I {
4652
4652
  }
4653
4653
  };
4654
4654
  calculate(e, t) {
4655
- let n = R(t, "ema", 10, 1), r = R(t, "roc", 10, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
4655
+ let n = z(t, "ema", 10, 1), r = z(t, "roc", 10, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
4656
4656
  if (o <= r) return {
4657
4657
  values: i,
4658
4658
  series: a
@@ -4670,9 +4670,9 @@ var sn = class extends I {
4670
4670
  };
4671
4671
  }
4672
4672
  render(e, t, n, r) {
4673
- rn(e, t, n, r);
4673
+ an(e, t, n, r);
4674
4674
  }
4675
- }, ln = class extends I {
4675
+ }, un = class extends L {
4676
4676
  descriptor = {
4677
4677
  id: "rvi",
4678
4678
  name: "Relative Vigor Index",
@@ -4680,7 +4680,7 @@ var sn = class extends I {
4680
4680
  defaultConfig: { period: 10 }
4681
4681
  };
4682
4682
  calculate(e, t) {
4683
- let n = R(t, "period", 10, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4683
+ let n = z(t, "period", 10, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
4684
4684
  if (a < n + 3) return {
4685
4685
  values: r,
4686
4686
  series: i
@@ -4728,14 +4728,14 @@ var sn = class extends I {
4728
4728
  c = !1;
4729
4729
  continue;
4730
4730
  }
4731
- let o = O(r, n), s = l(a[t]);
4731
+ let o = k(r, n), s = l(a[t]);
4732
4732
  c ? e.lineTo(o, s) : (e.moveTo(o, s), c = !0);
4733
4733
  }
4734
4734
  e.stroke();
4735
4735
  };
4736
4736
  d("value", r.colors[0] ?? "#2962FF"), d("signal", r.colors[1] ?? "#FF9800");
4737
4737
  }
4738
- }, un = class extends I {
4738
+ }, dn = class extends L {
4739
4739
  descriptor = {
4740
4740
  id: "stochrsi",
4741
4741
  name: "Stochastic RSI",
@@ -4748,12 +4748,12 @@ var sn = class extends I {
4748
4748
  }
4749
4749
  };
4750
4750
  calculate(e, t) {
4751
- let n = R(t, "rsiPeriod", 14, 1), r = R(t, "stochPeriod", 14, 1), i = R(t, "k", 3, 1), a = R(t, "d", 3, 1), o = /* @__PURE__ */ new Map(), s = Array(e.length).fill(null), c = e.length;
4751
+ let n = z(t, "rsiPeriod", 14, 1), r = z(t, "stochPeriod", 14, 1), i = z(t, "k", 3, 1), a = z(t, "d", 3, 1), o = /* @__PURE__ */ new Map(), s = Array(e.length).fill(null), c = e.length;
4752
4752
  if (c <= n + r) return {
4753
4753
  values: o,
4754
4754
  series: s
4755
4755
  };
4756
- let l = dn(e.map((e) => e.close), n), u = Array(c).fill(void 0);
4756
+ let l = fn(e.map((e) => e.close), n), u = Array(c).fill(void 0);
4757
4757
  for (let e = 0; e < c; e++) {
4758
4758
  if (l[e] === void 0) continue;
4759
4759
  let t = Infinity, n = -Infinity, i = !0;
@@ -4766,7 +4766,7 @@ var sn = class extends I {
4766
4766
  }
4767
4767
  i && (u[e] = n - t > 0 ? (l[e] - t) / (n - t) * 100 : 0);
4768
4768
  }
4769
- let d = fn(u, i), f = fn(d, a);
4769
+ let d = pn(u, i), f = pn(d, a);
4770
4770
  for (let t = 0; t < c; t++) {
4771
4771
  if (d[t] === void 0) continue;
4772
4772
  let n = { k: d[t] };
@@ -4796,7 +4796,7 @@ var sn = class extends I {
4796
4796
  l = !1;
4797
4797
  continue;
4798
4798
  }
4799
- let o = O(r, n), s = c(a[t]);
4799
+ let o = k(r, n), s = c(a[t]);
4800
4800
  l ? e.lineTo(o, s) : (e.moveTo(o, s), l = !0);
4801
4801
  }
4802
4802
  e.stroke();
@@ -4804,7 +4804,7 @@ var sn = class extends I {
4804
4804
  l("k", r.colors[0] ?? "#2962FF"), l("d", r.colors[1] ?? "#FF9800");
4805
4805
  }
4806
4806
  };
4807
- function dn(e, t) {
4807
+ function fn(e, t) {
4808
4808
  let n = e.length, r = Array(n).fill(void 0);
4809
4809
  if (n <= t) return r;
4810
4810
  let i = 0, a = 0;
@@ -4819,7 +4819,7 @@ function dn(e, t) {
4819
4819
  }
4820
4820
  return r;
4821
4821
  }
4822
- function fn(e, t) {
4822
+ function pn(e, t) {
4823
4823
  let n = Array(e.length).fill(void 0);
4824
4824
  for (let r = t - 1; r < e.length; r++) {
4825
4825
  let i = 0, a = !0;
@@ -4836,7 +4836,7 @@ function fn(e, t) {
4836
4836
  }
4837
4837
  //#endregion
4838
4838
  //#region src/indicators/panel/PercentagePriceOscillator.ts
4839
- var pn = class extends I {
4839
+ var mn = class extends L {
4840
4840
  descriptor = {
4841
4841
  id: "ppo",
4842
4842
  name: "Percentage Price Oscillator",
@@ -4848,14 +4848,14 @@ var pn = class extends I {
4848
4848
  }
4849
4849
  };
4850
4850
  calculate(e, t) {
4851
- let n = R(t, "fast", 12, 1), r = R(t, "slow", 26, 1), i = R(t, "signal", 9, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = e.length;
4851
+ let n = z(t, "fast", 12, 1), r = z(t, "slow", 26, 1), i = z(t, "signal", 9, 1), a = /* @__PURE__ */ new Map(), o = Array(e.length).fill(null), s = e.length;
4852
4852
  if (s <= r) return {
4853
4853
  values: a,
4854
4854
  series: o
4855
4855
  };
4856
- let c = e.map((e) => e.close), l = mn(c, n), u = mn(c, r), d = Array(s).fill(void 0);
4856
+ let c = e.map((e) => e.close), l = hn(c, n), u = hn(c, r), d = Array(s).fill(void 0);
4857
4857
  for (let e = 0; e < s; e++) l[e] === void 0 || u[e] === void 0 || u[e] === 0 || (d[e] = (l[e] - u[e]) / u[e] * 100);
4858
- let f = mn(d, i);
4858
+ let f = hn(d, i);
4859
4859
  for (let t = 0; t < s; t++) {
4860
4860
  if (d[t] === void 0) continue;
4861
4861
  let n = { value: d[t] };
@@ -4886,7 +4886,7 @@ var pn = class extends I {
4886
4886
  for (let t = o; t <= s && t < i.length; t++) {
4887
4887
  let r = i[t]?.hist;
4888
4888
  if (r === void 0) continue;
4889
- let a = O(t, n), o = l(r);
4889
+ let a = k(t, n), o = l(r);
4890
4890
  e.fillStyle = r >= 0 ? "rgba(38,166,154,0.5)" : "rgba(239,83,80,0.5)";
4891
4891
  let s = Math.min(o, u);
4892
4892
  e.fillRect(a - d / 2, s, d, Math.max(1, Math.abs(o - u)));
@@ -4901,7 +4901,7 @@ var pn = class extends I {
4901
4901
  c = !1;
4902
4902
  continue;
4903
4903
  }
4904
- let o = O(r, n), s = l(a[t]);
4904
+ let o = k(r, n), s = l(a[t]);
4905
4905
  c ? e.lineTo(o, s) : (e.moveTo(o, s), c = !0);
4906
4906
  }
4907
4907
  e.stroke();
@@ -4909,7 +4909,7 @@ var pn = class extends I {
4909
4909
  f("value", r.colors[0] ?? "#2962FF"), f("signal", r.colors[1] ?? "#FF9800");
4910
4910
  }
4911
4911
  };
4912
- function mn(e, t) {
4912
+ function hn(e, t) {
4913
4913
  let n = e.length, r = Array(n).fill(void 0), i = 2 / (t + 1), a, o = 0, s = 0;
4914
4914
  for (let c = 0; c < n; c++) {
4915
4915
  let n = e[c];
@@ -4919,7 +4919,7 @@ function mn(e, t) {
4919
4919
  }
4920
4920
  //#endregion
4921
4921
  //#region src/indicators/panel/AcceleratorOscillator.ts
4922
- var hn = class extends I {
4922
+ var gn = class extends L {
4923
4923
  descriptor = {
4924
4924
  id: "ac",
4925
4925
  name: "Accelerator Oscillator",
@@ -4933,7 +4933,7 @@ var hn = class extends I {
4933
4933
  series: n
4934
4934
  };
4935
4935
  let i = e.map((e) => (e.high + e.low) / 2), a = Array(r).fill(void 0);
4936
- for (let e = 33; e < r; e++) a[e] = gn(i, e, 5) - gn(i, e, 34);
4936
+ for (let e = 33; e < r; e++) a[e] = _n(i, e, 5) - _n(i, e, 34);
4937
4937
  for (let i = 37; i < r; i++) {
4938
4938
  let r = 0;
4939
4939
  for (let e = i - 4; e <= i; e++) r += a[e];
@@ -4963,21 +4963,21 @@ var hn = class extends I {
4963
4963
  f = void 0;
4964
4964
  continue;
4965
4965
  }
4966
- let a = O(t, n), o = l(r);
4966
+ let a = k(t, n), o = l(r);
4967
4967
  e.fillStyle = (f === void 0 ? r >= 0 : r >= f) ? "rgba(38,166,154,0.85)" : "rgba(239,83,80,0.85)";
4968
4968
  let s = Math.min(o, u);
4969
4969
  e.fillRect(a - d / 2, s, d, Math.max(1, Math.abs(o - u))), f = r;
4970
4970
  }
4971
4971
  }
4972
4972
  };
4973
- function gn(e, t, n) {
4973
+ function _n(e, t, n) {
4974
4974
  let r = 0;
4975
4975
  for (let i = t - n + 1; i <= t; i++) r += e[i];
4976
4976
  return r / n;
4977
4977
  }
4978
4978
  //#endregion
4979
4979
  //#region src/indicators/panel/RelativeMomentumIndex.ts
4980
- var _n = class extends I {
4980
+ var vn = class extends L {
4981
4981
  descriptor = {
4982
4982
  id: "rmi",
4983
4983
  name: "Relative Momentum Index",
@@ -4988,7 +4988,7 @@ var _n = class extends I {
4988
4988
  }
4989
4989
  };
4990
4990
  calculate(e, t) {
4991
- let n = R(t, "period", 20, 1), r = R(t, "momentum", 5, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
4991
+ let n = z(t, "period", 20, 1), r = z(t, "momentum", 5, 1), i = /* @__PURE__ */ new Map(), a = Array(e.length).fill(null), o = e.length;
4992
4992
  if (o <= n + r) return {
4993
4993
  values: i,
4994
4994
  series: a
@@ -5029,12 +5029,12 @@ var _n = class extends I {
5029
5029
  l = !1;
5030
5030
  continue;
5031
5031
  }
5032
- let a = O(t, n), o = c(r.value);
5032
+ let a = k(t, n), o = c(r.value);
5033
5033
  l ? e.lineTo(a, o) : (e.moveTo(a, o), l = !0);
5034
5034
  }
5035
5035
  e.stroke();
5036
5036
  }
5037
- }, vn = class extends I {
5037
+ }, yn = class extends L {
5038
5038
  descriptor = {
5039
5039
  id: "disparity",
5040
5040
  name: "Disparity Index",
@@ -5042,7 +5042,7 @@ var _n = class extends I {
5042
5042
  defaultConfig: { period: 14 }
5043
5043
  };
5044
5044
  calculate(e, t) {
5045
- let n = R(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
5045
+ let n = z(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
5046
5046
  if (a < n) return {
5047
5047
  values: r,
5048
5048
  series: i
@@ -5058,9 +5058,9 @@ var _n = class extends I {
5058
5058
  };
5059
5059
  }
5060
5060
  render(e, t, n, r) {
5061
- rn(e, t, n, r);
5061
+ an(e, t, n, r);
5062
5062
  }
5063
- }, yn = class extends I {
5063
+ }, bn = class extends L {
5064
5064
  descriptor = {
5065
5065
  id: "qstick",
5066
5066
  name: "Qstick",
@@ -5068,7 +5068,7 @@ var _n = class extends I {
5068
5068
  defaultConfig: { period: 8 }
5069
5069
  };
5070
5070
  calculate(e, t) {
5071
- let n = R(t, "period", 8, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
5071
+ let n = z(t, "period", 8, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
5072
5072
  if (a < n) return {
5073
5073
  values: r,
5074
5074
  series: i
@@ -5087,9 +5087,9 @@ var _n = class extends I {
5087
5087
  };
5088
5088
  }
5089
5089
  render(e, t, n, r) {
5090
- rn(e, t, n, r);
5090
+ an(e, t, n, r);
5091
5091
  }
5092
- }, bn = class extends I {
5092
+ }, xn = class extends L {
5093
5093
  descriptor = {
5094
5094
  id: "pgo",
5095
5095
  name: "Pretty Good Oscillator",
@@ -5097,7 +5097,7 @@ var _n = class extends I {
5097
5097
  defaultConfig: { period: 14 }
5098
5098
  };
5099
5099
  calculate(e, t) {
5100
- let n = R(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
5100
+ let n = z(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null), a = e.length;
5101
5101
  if (a <= n) return {
5102
5102
  values: r,
5103
5103
  series: i
@@ -5151,12 +5151,12 @@ var _n = class extends I {
5151
5151
  u = !1;
5152
5152
  continue;
5153
5153
  }
5154
- let a = O(t, n), o = l(r.value);
5154
+ let a = k(t, n), o = l(r.value);
5155
5155
  u ? e.lineTo(a, o) : (e.moveTo(a, o), u = !0);
5156
5156
  }
5157
5157
  e.stroke();
5158
5158
  }
5159
- }, xn = class extends I {
5159
+ }, Sn = class extends L {
5160
5160
  descriptor = {
5161
5161
  id: "stddev",
5162
5162
  name: "Standard Deviation",
@@ -5164,7 +5164,7 @@ var _n = class extends I {
5164
5164
  defaultConfig: { period: 20 }
5165
5165
  };
5166
5166
  calculate(e, t) {
5167
- let n = R(t, "period", 20, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
5167
+ let n = z(t, "period", 20, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
5168
5168
  for (let t = n - 1; t < e.length; t++) {
5169
5169
  let a = 0;
5170
5170
  for (let r = t - n + 1; r <= t; r++) a += e[r].close;
@@ -5196,13 +5196,13 @@ var _n = class extends I {
5196
5196
  for (let t = o; t <= s && t < i.length; t++) {
5197
5197
  let r = i[t];
5198
5198
  if (r && r.value !== void 0) {
5199
- let i = O(t, n), a = p(r.value);
5199
+ let i = k(t, n), a = p(r.value);
5200
5200
  m ? e.lineTo(i, a) : (e.moveTo(i, a), m = !0);
5201
5201
  }
5202
5202
  }
5203
5203
  e.stroke();
5204
5204
  }
5205
- }, Sn = class extends I {
5205
+ }, Cn = class extends L {
5206
5206
  descriptor = {
5207
5207
  id: "volumeProfile",
5208
5208
  name: "Volume Profile",
@@ -5210,7 +5210,7 @@ var _n = class extends I {
5210
5210
  defaultConfig: { rows: 24 }
5211
5211
  };
5212
5212
  calculate(e, t) {
5213
- let n = R(t, "rows", 24, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
5213
+ let n = z(t, "rows", 24, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
5214
5214
  if (e.length === 0) return {
5215
5215
  values: r,
5216
5216
  series: i
@@ -5252,7 +5252,7 @@ var _n = class extends I {
5252
5252
  e.fillStyle = l[t] > u * .7 ? r.colors[1] ?? "rgba(255, 152, 0, 0.5)" : r.colors[0] ?? "rgba(33, 150, 243, 0.3)", e.fillRect(i.x, s - d / 2, p, Math.max(d - 1, 1));
5253
5253
  }
5254
5254
  }
5255
- }, Cn = class extends I {
5255
+ }, wn = class extends L {
5256
5256
  descriptor = {
5257
5257
  id: "ad",
5258
5258
  name: "Accumulation/Distribution",
@@ -5292,13 +5292,13 @@ var _n = class extends I {
5292
5292
  for (let t = o; t <= s && t < i.length; t++) {
5293
5293
  let r = i[t];
5294
5294
  if (r && r.value !== void 0) {
5295
- let i = O(t, n), a = p(r.value);
5295
+ let i = k(t, n), a = p(r.value);
5296
5296
  m ? e.lineTo(i, a) : (e.moveTo(i, a), m = !0);
5297
5297
  }
5298
5298
  }
5299
5299
  e.stroke();
5300
5300
  }
5301
- }, wn = class extends I {
5301
+ }, Tn = class extends L {
5302
5302
  descriptor = {
5303
5303
  id: "vroc",
5304
5304
  name: "Volume Rate of Change",
@@ -5306,7 +5306,7 @@ var _n = class extends I {
5306
5306
  defaultConfig: { period: 14 }
5307
5307
  };
5308
5308
  calculate(e, t) {
5309
- let n = R(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
5309
+ let n = z(t, "period", 14, 1), r = /* @__PURE__ */ new Map(), i = Array(e.length).fill(null);
5310
5310
  for (let t = n; t < e.length; t++) {
5311
5311
  let a = e[t - n].volume, o = { value: a === 0 ? 0 : (e[t].volume - a) / a * 100 };
5312
5312
  r.set(e[t].time, o), i[t] = o;
@@ -5331,7 +5331,7 @@ var _n = class extends I {
5331
5331
  for (let t = o; t <= s && t < i.length; t++) {
5332
5332
  let r = i[t];
5333
5333
  if (r && r.value !== void 0) {
5334
- let i = O(t, n), a = m(r.value);
5334
+ let i = k(t, n), a = m(r.value);
5335
5335
  h ? e.lineTo(i, a) : (e.moveTo(i, a), h = !0);
5336
5336
  }
5337
5337
  }
@@ -5340,19 +5340,19 @@ var _n = class extends I {
5340
5340
  };
5341
5341
  //#endregion
5342
5342
  //#region src/indicators/registry.ts
5343
- function Tn(e) {
5344
- e.register(new Qe()), e.register(new $e()), e.register(new et()), e.register(new tt()), e.register(new nt()), e.register(new rt()), e.register(new it()), e.register(new at()), e.register(new ot()), e.register(new ct()), e.register(new lt()), e.register(new ut()), e.register(new dt()), e.register(new ft()), e.register(new ht()), e.register(new gt()), e.register(new _t()), e.register(new vt()), e.register(new St()), e.register(new Ct()), e.register(new wt()), e.register(new Tt()), e.register(new Et()), e.register(new Dt()), e.register(new Ot()), e.register(new kt()), e.register(new At()), e.register(new jt()), e.register(new Mt()), e.register(new Nt()), e.register(new Pt()), e.register(new xn()), e.register(new Sn()), e.register(new Cn()), e.register(new wn()), e.register(new bt()), e.register(new xt()), e.register(new Ft()), e.register(new It()), e.register(new Lt()), e.register(new Rt()), e.register(new Bt()), e.register(new Vt()), e.register(new Ut()), e.register(new Wt()), e.register(new Kt()), e.register(new qt()), e.register(new Yt()), e.register(new Xt()), e.register(new Zt()), e.register(new Qt()), e.register(new $t()), e.register(new en()), e.register(new tn()), e.register(new nn()), e.register(new sn()), e.register(new an()), e.register(new cn()), e.register(new ln()), e.register(new un()), e.register(new pn()), e.register(new hn()), e.register(new _n()), e.register(new vn()), e.register(new yn()), e.register(new bn());
5343
+ function En(e) {
5344
+ e.register(new Qe()), e.register(new $e()), e.register(new et()), e.register(new tt()), e.register(new nt()), e.register(new rt()), e.register(new it()), e.register(new at()), e.register(new ot()), e.register(new ct()), e.register(new lt()), e.register(new ut()), e.register(new dt()), e.register(new ft()), e.register(new ht()), e.register(new gt()), e.register(new _t()), e.register(new vt()), e.register(new St()), e.register(new Ct()), e.register(new wt()), e.register(new Tt()), e.register(new Et()), e.register(new Dt()), e.register(new Ot()), e.register(new kt()), e.register(new At()), e.register(new jt()), e.register(new Mt()), e.register(new Nt()), e.register(new Pt()), e.register(new Sn()), e.register(new Cn()), e.register(new wn()), e.register(new Tn()), e.register(new bt()), e.register(new xt()), e.register(new Ft()), e.register(new It()), e.register(new Lt()), e.register(new Rt()), e.register(new Bt()), e.register(new Vt()), e.register(new Ut()), e.register(new Wt()), e.register(new Kt()), e.register(new qt()), e.register(new Yt()), e.register(new Xt()), e.register(new Zt()), e.register(new Qt()), e.register(new $t()), e.register(new en()), e.register(new tn()), e.register(new rn()), e.register(new cn()), e.register(new on()), e.register(new ln()), e.register(new un()), e.register(new dn()), e.register(new mn()), e.register(new gn()), e.register(new vn()), e.register(new yn()), e.register(new bn()), e.register(new xn());
5345
5345
  }
5346
5346
  //#endregion
5347
5347
  //#region src/indicators/worker/messages.ts
5348
- function En(e) {
5348
+ function Dn(e) {
5349
5349
  if (typeof e != "object" || !e) return !1;
5350
5350
  let t = e;
5351
5351
  return typeof t.requestId == "number" ? t.type === "result" || t.type === "pong" || t.type === "error" : !1;
5352
5352
  }
5353
5353
  //#endregion
5354
5354
  //#region src/indicators/worker/IndicatorWorkerHost.ts
5355
- var Dn = class {
5355
+ var On = class {
5356
5356
  worker;
5357
5357
  fallbackPlugins;
5358
5358
  timeoutMs;
@@ -5417,7 +5417,7 @@ var Dn = class {
5417
5417
  handleMessage(e) {
5418
5418
  let t = e.data;
5419
5419
  if (t !== void 0) {
5420
- if (!En(t)) return;
5420
+ if (!Dn(t)) return;
5421
5421
  this.dispatchResponse(t);
5422
5422
  return;
5423
5423
  }
@@ -5438,7 +5438,7 @@ var Dn = class {
5438
5438
  t.resolve(e.output);
5439
5439
  }
5440
5440
  }
5441
- }, On = class {
5441
+ }, kn = class {
5442
5442
  visible = !0;
5443
5443
  setVisible(e) {
5444
5444
  this.visible = e;
@@ -5467,7 +5467,7 @@ var Dn = class {
5467
5467
  }
5468
5468
  e.stroke();
5469
5469
  }
5470
- }, kn = class {
5470
+ }, An = class {
5471
5471
  locale = "en-US";
5472
5472
  setLocale(e) {
5473
5473
  this.locale = e;
@@ -5490,7 +5490,7 @@ var Dn = class {
5490
5490
  e.stroke(), e.globalAlpha = 1, e.fillStyle = n.axisLabel;
5491
5491
  for (let { y: t, text: n } of h) e.fillText(n, a + 8, t);
5492
5492
  }
5493
- }, An = (e) => e < 10 ? "0" + e : "" + e, jn = class {
5493
+ }, jn = (e) => e < 10 ? "0" + e : "" + e, Mn = class {
5494
5494
  tzOffsetMinutes = null;
5495
5495
  setTimezoneOffset(e) {
5496
5496
  this.tzOffsetMinutes = e;
@@ -5503,13 +5503,13 @@ var Dn = class {
5503
5503
  let f = -1;
5504
5504
  for (let t = l; t <= u && t < r.length; t++) {
5505
5505
  if (t % c !== 0) continue;
5506
- let n = t * s + d, i = r[t].time, { day: a, month: l, hours: u, minutes: p } = y(i > 0xe8d4a51000 ? i : i * 1e3, this.tzOffsetMinutes), m;
5507
- a === f ? m = `${An(u)}:${An(p)}` : (m = `${l}/${a}`, f = a), e.fillText(m, n, o + 7);
5506
+ let n = t * s + d, i = r[t].time, a = b(i > 0xe8d4a51000 ? i : i * 1e3, this.tzOffsetMinutes), { year: l, day: u, month: p, hours: m, minutes: h } = a, g;
5507
+ _(a) ? g = `${p}/${u}/${l}` : u === f ? g = `${jn(m)}:${jn(h)}` : (g = `${p}/${u}`, f = u), e.fillText(g, n, o + 7);
5508
5508
  }
5509
5509
  let p = a.x + a.width - 4, m = o + 7;
5510
- e.font = `500 ${n.font.sizeSmall - 1}px ${n.font.family}`, e.textAlign = "right", e.textBaseline = "top", e.globalAlpha = .75, e.fillStyle = n.textSecondary, e.fillText(S(this.tzOffsetMinutes), p, m), e.globalAlpha = 1;
5510
+ e.font = `500 ${n.font.sizeSmall - 1}px ${n.font.family}`, e.textAlign = "right", e.textBaseline = "top", e.globalAlpha = .75, e.fillStyle = n.textSecondary, e.fillText(C(this.tzOffsetMinutes), p, m), e.globalAlpha = 1;
5511
5511
  }
5512
- }, Mn = class {
5512
+ }, Nn = class {
5513
5513
  panHandler = null;
5514
5514
  zoomHandler = null;
5515
5515
  crosshairHandler = null;
@@ -5793,7 +5793,7 @@ var Dn = class {
5793
5793
  y: (e.clientY + t.clientY) / 2 - n.top
5794
5794
  };
5795
5795
  }
5796
- }, Nn = class {
5796
+ }, Pn = class {
5797
5797
  dragging = !1;
5798
5798
  lastX = 0;
5799
5799
  lastY = 0;
@@ -5832,7 +5832,7 @@ var Dn = class {
5832
5832
  stopMomentum() {
5833
5833
  this.momentumId &&= (cancelAnimationFrame(this.momentumId), 0);
5834
5834
  }
5835
- }, Pn = class {
5835
+ }, Fn = class {
5836
5836
  callback;
5837
5837
  sensitivity;
5838
5838
  pendingDelta = 0;
@@ -5851,7 +5851,7 @@ var Dn = class {
5851
5851
  dispose() {
5852
5852
  this.rafId &&= (cancelAnimationFrame(this.rafId), 0);
5853
5853
  }
5854
- }, Fn = class {
5854
+ }, In = class {
5855
5855
  dragging = !1;
5856
5856
  axis = null;
5857
5857
  startPos = {
@@ -5891,7 +5891,7 @@ var Dn = class {
5891
5891
  isActive() {
5892
5892
  return this.dragging;
5893
5893
  }
5894
- }, In = class {
5894
+ }, Ln = class {
5895
5895
  draggingId = null;
5896
5896
  constructor(e, t) {
5897
5897
  this.alerts = e, this.viewportGetter = t;
@@ -5909,7 +5909,7 @@ var Dn = class {
5909
5909
  move(e) {
5910
5910
  if (this.draggingId === null) return;
5911
5911
  let t = this.viewportGetter();
5912
- t && this.alerts.updateAlertPrice(this.draggingId, j(e.y, t));
5912
+ t && this.alerts.updateAlertPrice(this.draggingId, M(e.y, t));
5913
5913
  }
5914
5914
  end() {
5915
5915
  this.draggingId = null;
@@ -5917,7 +5917,7 @@ var Dn = class {
5917
5917
  isActive() {
5918
5918
  return this.draggingId !== null;
5919
5919
  }
5920
- }, Ln = class {
5920
+ }, Rn = class {
5921
5921
  state = null;
5922
5922
  layoutGetter = null;
5923
5923
  onResize = null;
@@ -5928,7 +5928,7 @@ var Dn = class {
5928
5928
  this.layoutGetter = e, this.onResize = t;
5929
5929
  }
5930
5930
  hitTest(e, t) {
5931
- for (let n of t.dividers) if (Rn(e, n.rect, this.tolerance)) {
5931
+ for (let n of t.dividers) if (zn(e, n.rect, this.tolerance)) {
5932
5932
  let e = t.panels.find((e) => e.config.id === n.panelId);
5933
5933
  if (e) return {
5934
5934
  panelId: n.panelId,
@@ -5990,12 +5990,12 @@ var Dn = class {
5990
5990
  return this.state !== null;
5991
5991
  }
5992
5992
  };
5993
- function Rn(e, t, n) {
5993
+ function zn(e, t, n) {
5994
5994
  return e.x >= t.x - n && e.x <= t.x + t.width + n && e.y >= t.y - n && e.y <= t.y + t.height + n;
5995
5995
  }
5996
5996
  //#endregion
5997
5997
  //#region src/interaction/CrosshairHandler.ts
5998
- var zn = class {
5998
+ var Bn = class {
5999
5999
  position = null;
6000
6000
  callback = null;
6001
6001
  data = [];
@@ -6045,8 +6045,8 @@ var zn = class {
6045
6045
  if (!this.position || this.mode === "hidden") return;
6046
6046
  let { chartRect: r } = t, { x: i, y: a } = this.position;
6047
6047
  if (i < r.x || i > r.x + r.width || a < r.y || a > r.y + r.height) return;
6048
- let o = A(i, t);
6049
- if (o = Math.max(0, Math.min(this.data.length - 1, o)), this.magnetMode && o >= 0 && o < this.data.length && (i = O(o, t)), o !== this.lastCallbackBarIndex && (this.pendingBarIndex = o, this.pendingPoint = {
6048
+ let o = j(i, t);
6049
+ if (o = Math.max(0, Math.min(this.data.length - 1, o)), this.magnetMode && o >= 0 && o < this.data.length && (i = k(o, t)), o !== this.lastCallbackBarIndex && (this.pendingBarIndex = o, this.pendingPoint = {
6050
6050
  x: i,
6051
6051
  y: a
6052
6052
  }, this.lastCallbackBarIndex = o, this.scheduleCallback()), this.magnetMode && o >= 0 && o < this.data.length) {
@@ -6059,11 +6059,11 @@ var zn = class {
6059
6059
  if (!this.position || this.mode === "hidden") return;
6060
6060
  let { chartRect: a } = t, { x: o, y: s } = this.position;
6061
6061
  if (o < a.x || o > a.x + a.width || s < a.y || s > a.y + a.height) return;
6062
- let c = A(o, t);
6063
- c = Math.max(0, Math.min(r.length - 1, c)), this.magnetMode && c >= 0 && c < r.length && (o = O(c, t));
6062
+ let c = j(o, t);
6063
+ c = Math.max(0, Math.min(r.length - 1, c)), this.magnetMode && c >= 0 && c < r.length && (o = k(c, t));
6064
6064
  let l = `600 ${n.font.sizeSmall}px ${n.font.family}`;
6065
- if (Bn(e, {
6066
- text: h(j(s, t), this.pricePrecision, this.locale),
6065
+ if (Vn(e, {
6066
+ text: h(M(s, t), this.pricePrecision, this.locale),
6067
6067
  anchorX: a.x + a.width,
6068
6068
  anchorY: s,
6069
6069
  orientation: "right",
@@ -6071,8 +6071,8 @@ var zn = class {
6071
6071
  fg: n.background,
6072
6072
  font: l
6073
6073
  }), c >= 0 && c < r.length) {
6074
- let t = Vn(r[c].time, this.tzOffsetMinutes), s = i ?? a.y + a.height;
6075
- Bn(e, {
6074
+ let t = Hn(r[c].time, this.tzOffsetMinutes), s = i ?? a.y + a.height;
6075
+ Vn(e, {
6076
6076
  text: t,
6077
6077
  anchorX: o,
6078
6078
  anchorY: s,
@@ -6092,7 +6092,7 @@ var zn = class {
6092
6092
  this.callback?.(e, t);
6093
6093
  }
6094
6094
  };
6095
- function Bn(e, t) {
6095
+ function Vn(e, t) {
6096
6096
  e.save(), e.font = t.font;
6097
6097
  let n = Math.ceil(e.measureText(t.text).width) + 16;
6098
6098
  if (t.orientation === "right") {
@@ -6104,13 +6104,13 @@ function Bn(e, t) {
6104
6104
  }
6105
6105
  e.restore();
6106
6106
  }
6107
- function Vn(e, t) {
6108
- let { month: n, day: r, hours: i, minutes: a } = y(e > 0xe8d4a51000 ? e : e * 1e3, t);
6109
- return `${n}/${r} ${i < 10 ? "0" + i : i}:${a < 10 ? "0" + a : a}`;
6107
+ function Hn(e, t) {
6108
+ let n = b(e > 0xe8d4a51000 ? e : e * 1e3, t), { year: r, month: i, day: a, hours: o, minutes: s } = n;
6109
+ return _(n) ? `${i}/${a}/${r}` : `${i}/${a} ${o < 10 ? "0" + o : o}:${s < 10 ? "0" + s : s}`;
6110
6110
  }
6111
6111
  //#endregion
6112
6112
  //#region src/interaction/KeyboardHandler.ts
6113
- var Hn = class {
6113
+ var Un = class {
6114
6114
  callbacks;
6115
6115
  enabled = !0;
6116
6116
  constructor(e) {
@@ -6136,7 +6136,7 @@ var Hn = class {
6136
6136
  default: return !1;
6137
6137
  }
6138
6138
  }
6139
- }, Un = class {
6139
+ }, Wn = class {
6140
6140
  el = null;
6141
6141
  visible = !1;
6142
6142
  timeEl;
@@ -6175,8 +6175,8 @@ var Hn = class {
6175
6175
  this.changeEl.textContent = `${l}${a(s)} (${l}${c.toFixed(2)}%)`, this.changeEl.style.color = i;
6176
6176
  let u = t.volume;
6177
6177
  this.volEl.textContent = `Vol ${u >= 1e6 ? (u / 1e6).toFixed(1) + "M" : u >= 1e3 ? (u / 1e3).toFixed(1) + "K" : u.toFixed(0)}`, this.volEl.style.color = n.textSecondary;
6178
- let d = Wn(n.background);
6179
- this.el.style.background = d ? Gn(n.background, .95) : Gn(n.background, .97), this.el.style.border = `1px solid ${n.axisLine}`, this.el.style.boxShadow = d ? "0 4px 12px rgba(0,0,0,0.5)" : "0 4px 12px rgba(0,0,0,0.15)", this.el.style.color = n.text, this.el.style.backdropFilter = "blur(8px)", !this.measured && this.visible && (this.measuredWidth = this.el.offsetWidth, this.measuredHeight = this.el.offsetHeight, this.measured = !0);
6178
+ let d = Gn(n.background);
6179
+ this.el.style.background = d ? Kn(n.background, .95) : Kn(n.background, .97), this.el.style.border = `1px solid ${n.axisLine}`, this.el.style.boxShadow = d ? "0 4px 12px rgba(0,0,0,0.5)" : "0 4px 12px rgba(0,0,0,0.15)", this.el.style.color = n.text, this.el.style.backdropFilter = "blur(8px)", !this.measured && this.visible && (this.measuredWidth = this.el.offsetWidth, this.measuredHeight = this.el.offsetHeight, this.measured = !0);
6180
6180
  let f = e.x + 16, p = e.y - 40;
6181
6181
  f + this.measuredWidth > r.width - 80 && (f = e.x - this.measuredWidth - 16), p < 4 && (p = 4), p + this.measuredHeight > r.height && (p = r.height - this.measuredHeight - 4), this.el.style.transform = `translate(${Math.round(f)}px, ${Math.round(p)}px)`, this.el.style.left = "0", this.el.style.top = "0", this.visible ||= (this.el.style.display = "block", !0);
6182
6182
  }
@@ -6201,7 +6201,7 @@ var Hn = class {
6201
6201
  return document.createElement("span");
6202
6202
  }
6203
6203
  };
6204
- function Wn(e) {
6204
+ function Gn(e) {
6205
6205
  if (e.startsWith("#")) {
6206
6206
  let t = e.slice(1), n = t.length === 3 ? t.split("").map((e) => e + e).join("") : t.slice(0, 6), r = parseInt(n.slice(0, 2), 16), i = parseInt(n.slice(2, 4), 16), a = parseInt(n.slice(4, 6), 16);
6207
6207
  return (.299 * r + .587 * i + .114 * a) / 255 < .5;
@@ -6213,7 +6213,7 @@ function Wn(e) {
6213
6213
  }
6214
6214
  return !0;
6215
6215
  }
6216
- function Gn(e, t) {
6216
+ function Kn(e, t) {
6217
6217
  if (e.startsWith("#")) {
6218
6218
  let n = e.slice(1), r = n.length === 3 ? n.split("").map((e) => e + e).join("") : n.slice(0, 6);
6219
6219
  return `rgba(${parseInt(r.slice(0, 2), 16)}, ${parseInt(r.slice(2, 4), 16)}, ${parseInt(r.slice(4, 6), 16)}, ${t})`;
@@ -6222,7 +6222,7 @@ function Gn(e, t) {
6222
6222
  }
6223
6223
  //#endregion
6224
6224
  //#region src/interaction/PinnedTooltip.ts
6225
- var Kn = class {
6225
+ var qn = class {
6226
6226
  el = null;
6227
6227
  deltaEl = null;
6228
6228
  timeEl = null;
@@ -6252,14 +6252,14 @@ var Kn = class {
6252
6252
  if (!this.el || !this.timeEl || !this.ohlcEl) return;
6253
6253
  this.pinnedBar = e, this.pinnedIndex = t;
6254
6254
  let r = e.close >= e.open ? n.candleUp : n.candleDown, i = new Date(e.time > 0xe8d4a51000 ? e.time : e.time * 1e3);
6255
- this.timeEl.textContent = `${i.getMonth() + 1}/${i.getDate()} ${qn(i.getHours())}:${qn(i.getMinutes())}`, this.timeEl.style.color = n.textSecondary, this.ohlcEl.innerHTML = `
6255
+ this.timeEl.textContent = `${i.getMonth() + 1}/${i.getDate()} ${Jn(i.getHours())}:${Jn(i.getMinutes())}`, this.timeEl.style.color = n.textSecondary, this.ohlcEl.innerHTML = `
6256
6256
  <span style="opacity:.6">O </span><span style="color:${r}">${V(e.open)}</span>
6257
6257
  <span style="opacity:.6"> H </span><span style="color:${r}">${V(e.high)}</span>
6258
6258
  <span style="opacity:.6"> L </span><span style="color:${r}">${V(e.low)}</span>
6259
6259
  <span style="opacity:.6"> C </span><span style="color:${r}">${V(e.close)}</span>
6260
6260
  `;
6261
- let a = Jn(n.background);
6262
- this.el.style.background = Yn(n.background, a ? .96 : .97), this.el.style.border = `1px solid ${r}`, this.el.style.boxShadow = a ? "0 4px 12px rgba(0,0,0,0.55)" : "0 4px 12px rgba(0,0,0,0.18)", this.el.style.color = n.text, this.el.style.backdropFilter = "blur(8px)", this.el.style.display = "block";
6261
+ let a = Yn(n.background);
6262
+ this.el.style.background = Xn(n.background, a ? .96 : .97), this.el.style.border = `1px solid ${r}`, this.el.style.boxShadow = a ? "0 4px 12px rgba(0,0,0,0.55)" : "0 4px 12px rgba(0,0,0,0.18)", this.el.style.color = n.text, this.el.style.backdropFilter = "blur(8px)", this.el.style.display = "block";
6263
6263
  }
6264
6264
  unpin() {
6265
6265
  this.pinnedBar = null, this.pinnedIndex = -1, this.el && (this.el.style.display = "none");
@@ -6272,7 +6272,7 @@ var Kn = class {
6272
6272
  }
6273
6273
  reposition(e, t, n, r) {
6274
6274
  if (!this.el || !this.pinnedBar) return;
6275
- let i = O(this.pinnedIndex, e), a = k(this.pinnedBar.close, e), o = e.chartRect, s = i >= o.x - 4 && i <= o.x + o.width + 4;
6275
+ let i = k(this.pinnedIndex, e), a = A(this.pinnedBar.close, e), o = e.chartRect, s = i >= o.x - 4 && i <= o.x + o.width + 4;
6276
6276
  this.el.style.opacity = s ? "1" : "0.35";
6277
6277
  let c = Math.max(o.x, Math.min(o.x + o.width - 180, i + 8)), l = Math.max(o.y, Math.min(o.y + o.height - 90, a - 64));
6278
6278
  if (this.el.style.transform = `translate(${Math.round(c)}px, ${Math.round(l)}px)`, this.el.style.left = "0", this.el.style.top = "0", this.deltaEl) if (t && n !== null && n !== this.pinnedIndex) {
@@ -6287,17 +6287,17 @@ var Kn = class {
6287
6287
  function V(e) {
6288
6288
  return e.toFixed(2);
6289
6289
  }
6290
- function qn(e) {
6290
+ function Jn(e) {
6291
6291
  return e < 10 ? "0" + e : "" + e;
6292
6292
  }
6293
- function Jn(e) {
6293
+ function Yn(e) {
6294
6294
  if (e.startsWith("#")) {
6295
6295
  let t = e.slice(1), n = t.length === 3 ? t.split("").map((e) => e + e).join("") : t.slice(0, 6), r = parseInt(n.slice(0, 2), 16), i = parseInt(n.slice(2, 4), 16), a = parseInt(n.slice(4, 6), 16);
6296
6296
  return (.299 * r + .587 * i + .114 * a) / 255 < .5;
6297
6297
  }
6298
6298
  return !0;
6299
6299
  }
6300
- function Yn(e, t) {
6300
+ function Xn(e, t) {
6301
6301
  if (e.startsWith("#")) {
6302
6302
  let n = e.slice(1), r = n.length === 3 ? n.split("").map((e) => e + e).join("") : n.slice(0, 6);
6303
6303
  return `rgba(${parseInt(r.slice(0, 2), 16)}, ${parseInt(r.slice(2, 4), 16)}, ${parseInt(r.slice(4, 6), 16)}, ${t})`;
@@ -6306,7 +6306,7 @@ function Yn(e, t) {
6306
6306
  }
6307
6307
  //#endregion
6308
6308
  //#region src/events/EventBus.ts
6309
- var Xn = class {
6309
+ var Zn = class {
6310
6310
  listeners = /* @__PURE__ */ new Map();
6311
6311
  tauriBridge = null;
6312
6312
  on(e, t) {
@@ -6347,14 +6347,14 @@ var Xn = class {
6347
6347
  }
6348
6348
  anchorToPixel(e, t) {
6349
6349
  return {
6350
- x: P(e.time, t),
6351
- y: k(e.price, t)
6350
+ x: F(e.time, t),
6351
+ y: A(e.price, t)
6352
6352
  };
6353
6353
  }
6354
6354
  pixelToAnchor(e, t) {
6355
6355
  return {
6356
- time: F(e.x, t),
6357
- price: j(e.y, t)
6356
+ time: I(e.x, t),
6357
+ price: M(e.y, t)
6358
6358
  };
6359
6359
  }
6360
6360
  applyLineStyle(e, t) {
@@ -6392,7 +6392,7 @@ var Xn = class {
6392
6392
  let r = n.x - t.x, i = n.y - t.y, a = Math.hypot(r, i);
6393
6393
  return a === 0 ? Math.hypot(e.x - t.x, e.y - t.y) : Math.abs(r * (t.y - e.y) - i * (t.x - e.x)) / a;
6394
6394
  }
6395
- }, Zn = 1;
6395
+ }, Qn = 1;
6396
6396
  function U(e) {
6397
6397
  return {
6398
6398
  ...e,
@@ -6401,7 +6401,7 @@ function U(e) {
6401
6401
  meta: e.meta ? { ...e.meta } : void 0
6402
6402
  };
6403
6403
  }
6404
- var Qn = class {
6404
+ var $n = class {
6405
6405
  registry = /* @__PURE__ */ new Map();
6406
6406
  drawings = [];
6407
6407
  state = "idle";
@@ -6462,7 +6462,7 @@ var Qn = class {
6462
6462
  time: e,
6463
6463
  price: t
6464
6464
  };
6465
- let i = !!(n?.data && n.data.length > 0), a = Math.max(0, Math.min(r.length - 1, Math.round(i ? M(e, r) : e))), o = r[a], s = [
6465
+ let i = !!(n?.data && n.data.length > 0), a = Math.max(0, Math.min(r.length - 1, Math.round(i ? N(e, r) : e))), o = r[a], s = [
6466
6466
  o.open,
6467
6467
  o.high,
6468
6468
  o.low,
@@ -6586,7 +6586,7 @@ var Qn = class {
6586
6586
  if (this.state === "creating" && this.creatingDrawing) {
6587
6587
  let n = this.registry.get(this.creatingDrawing.type);
6588
6588
  if (n && this.committedAnchors < n.descriptor.requiredAnchors) {
6589
- let n = F(e.x, t), r = j(e.y, t);
6589
+ let n = I(e.x, t), r = M(e.y, t);
6590
6590
  return this.previewAnchor = this.snapToOHLC(n, r, t), this.requestRender?.(), !0;
6591
6591
  }
6592
6592
  }
@@ -6621,7 +6621,7 @@ var Qn = class {
6621
6621
  this.drawings = this.upgradeLegacyAnchors(e), this.requestRender?.();
6622
6622
  }
6623
6623
  addDrawing(e) {
6624
- let t = e.id ?? `tc_drawing_${Zn++}`, n = {
6624
+ let t = e.id ?? `tc_drawing_${Qn++}`, n = {
6625
6625
  id: t,
6626
6626
  type: e.type,
6627
6627
  anchors: e.anchors.map((e) => ({ ...e })),
@@ -6668,7 +6668,7 @@ var Qn = class {
6668
6668
  let t = this.drawings.find((t) => t.id === e);
6669
6669
  if (!t) return null;
6670
6670
  let n = structuredClone(t);
6671
- n.id = `tc_drawing_${Zn++}`;
6671
+ n.id = `tc_drawing_${Qn++}`;
6672
6672
  let r = this.computeBarOffsetTime(3);
6673
6673
  return n.anchors = n.anchors.map((e) => ({
6674
6674
  ...e,
@@ -6717,9 +6717,9 @@ var Qn = class {
6717
6717
  if (!this.activeTool) return !1;
6718
6718
  let n = this.registry.get(this.activeTool);
6719
6719
  if (!n) return !1;
6720
- let r = F(e.x, t), i = j(e.y, t), a = this.snapToOHLC(r, i, t);
6720
+ let r = I(e.x, t), i = M(e.y, t), a = this.snapToOHLC(r, i, t);
6721
6721
  return this.creatingDrawing ? (this.creatingDrawing.anchors.push(a), this.committedAnchors++, this.previewAnchor = null, this.committedAnchors >= n.descriptor.requiredAnchors && this.finalizeCreation(), this.requestRender?.(), !0) : (this.creatingDrawing = {
6722
- id: `tc_drawing_${Zn++}`,
6722
+ id: `tc_drawing_${Qn++}`,
6723
6723
  type: this.activeTool,
6724
6724
  anchors: [a],
6725
6725
  style: { ...this.activeStyle },
@@ -6757,7 +6757,7 @@ var Qn = class {
6757
6757
  handleMove(e, t) {
6758
6758
  let n = this.drawings.find((e) => e.id === this.selectedDrawingId);
6759
6759
  if (!n || !this.dragStartPoint) return !1;
6760
- let r = F(e.x, t) - F(this.dragStartPoint.x, t), i = j(e.y, t) - j(this.dragStartPoint.y, t);
6760
+ let r = I(e.x, t) - I(this.dragStartPoint.x, t), i = M(e.y, t) - M(this.dragStartPoint.y, t);
6761
6761
  return n.anchors = this.dragStartAnchors.map((e) => ({
6762
6762
  time: e.time + r,
6763
6763
  price: e.price + i
@@ -6766,11 +6766,11 @@ var Qn = class {
6766
6766
  handleResize(e, t) {
6767
6767
  let n = this.drawings.find((e) => e.id === this.selectedDrawingId);
6768
6768
  return !n || this.dragAnchorIndex < 0 ? !1 : (n.anchors[this.dragAnchorIndex] = {
6769
- time: F(e.x, t),
6770
- price: j(e.y, t)
6769
+ time: I(e.x, t),
6770
+ price: M(e.y, t)
6771
6771
  }, this.requestRender?.(), !0);
6772
6772
  }
6773
- }, $n = class {
6773
+ }, er = class {
6774
6774
  constructor(e) {
6775
6775
  this.manager = e;
6776
6776
  }
@@ -6780,7 +6780,7 @@ var Qn = class {
6780
6780
  };
6781
6781
  //#endregion
6782
6782
  //#region src/drawings/autoFib.ts
6783
- function er(e, t, n) {
6783
+ function tr(e, t, n) {
6784
6784
  let r = Math.max(0, t), i = Math.min(e.length - 1, n);
6785
6785
  if (i <= r) return null;
6786
6786
  let a = r, o = r;
@@ -6797,7 +6797,7 @@ function er(e, t, n) {
6797
6797
  }
6798
6798
  //#endregion
6799
6799
  //#region src/drawings/tools/TrendLine.ts
6800
- var tr = class extends H {
6800
+ var nr = class extends H {
6801
6801
  descriptor = {
6802
6802
  type: "trendLine",
6803
6803
  name: "Trend Line",
@@ -6813,7 +6813,7 @@ var tr = class extends H {
6813
6813
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n);
6814
6814
  return this.distanceToLine(e, i, a) <= r;
6815
6815
  }
6816
- }, nr = class extends H {
6816
+ }, rr = class extends H {
6817
6817
  descriptor = {
6818
6818
  type: "horizontalLine",
6819
6819
  name: "Horizontal Line",
@@ -6821,15 +6821,15 @@ var tr = class extends H {
6821
6821
  };
6822
6822
  render(e, t, n, r) {
6823
6823
  if (t.anchors.length < 1) return;
6824
- let i = k(t.anchors[0].price, n), { chartRect: a } = n;
6824
+ let i = A(t.anchors[0].price, n), { chartRect: a } = n;
6825
6825
  this.applyLineStyle(e, t.style), e.beginPath(), e.moveTo(a.x, i), e.lineTo(a.x + a.width, i), e.stroke(), this.resetLineStyle(e), e.fillStyle = t.style.color, e.font = "11px sans-serif", e.textBaseline = "bottom", e.fillText(t.anchors[0].price.toFixed(2), a.x + 4, i - 3), r && this.renderAnchorHandles(e, t, n);
6826
6826
  }
6827
6827
  hitTest(e, t, n, r) {
6828
6828
  if (t.anchors.length < 1) return !1;
6829
- let i = k(t.anchors[0].price, n);
6829
+ let i = A(t.anchors[0].price, n);
6830
6830
  return Math.abs(e.y - i) <= r && e.x >= n.chartRect.x && e.x <= n.chartRect.x + n.chartRect.width;
6831
6831
  }
6832
- }, rr = class extends H {
6832
+ }, ir = class extends H {
6833
6833
  descriptor = {
6834
6834
  type: "verticalLine",
6835
6835
  name: "Vertical Line",
@@ -6845,7 +6845,7 @@ var tr = class extends H {
6845
6845
  let i = this.anchorToPixel(t.anchors[0], n), { chartRect: a } = n;
6846
6846
  return Math.abs(e.x - i.x) <= r && e.y >= a.y && e.y <= a.y + a.height;
6847
6847
  }
6848
- }, ir = class extends H {
6848
+ }, ar = class extends H {
6849
6849
  descriptor = {
6850
6850
  type: "ray",
6851
6851
  name: "Ray",
@@ -6863,7 +6863,7 @@ var tr = class extends H {
6863
6863
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n), o = a.x - i.x, s = a.y - i.y;
6864
6864
  return ((e.x - i.x) * o + (e.y - i.y) * s) / (o * o + s * s) < 0 ? !1 : this.distanceToInfiniteLine(e, i, a) <= r;
6865
6865
  }
6866
- }, ar = class extends H {
6866
+ }, or = class extends H {
6867
6867
  descriptor = {
6868
6868
  type: "extendedLine",
6869
6869
  name: "Extended Line",
@@ -6881,7 +6881,7 @@ var tr = class extends H {
6881
6881
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n);
6882
6882
  return this.distanceToInfiniteLine(e, i, a) <= r;
6883
6883
  }
6884
- }, or = class extends H {
6884
+ }, sr = class extends H {
6885
6885
  descriptor = {
6886
6886
  type: "parallelChannel",
6887
6887
  name: "Parallel Channel",
@@ -6918,7 +6918,7 @@ var tr = class extends H {
6918
6918
  }
6919
6919
  return !1;
6920
6920
  }
6921
- }, sr = class extends H {
6921
+ }, cr = class extends H {
6922
6922
  descriptor = {
6923
6923
  type: "regressionChannel",
6924
6924
  name: "Regression Channel",
@@ -6949,7 +6949,7 @@ var tr = class extends H {
6949
6949
  .618,
6950
6950
  .786,
6951
6951
  1
6952
- ], cr = class extends H {
6952
+ ], lr = class extends H {
6953
6953
  descriptor = {
6954
6954
  type: "fibRetracement",
6955
6955
  name: "Fibonacci Retracement",
@@ -6960,12 +6960,12 @@ var tr = class extends H {
6960
6960
  let { chartRect: i } = n, a = t.anchors[0].price, o = t.anchors[1].price, s = a - o;
6961
6961
  e.font = "11px sans-serif", e.textBaseline = "middle";
6962
6962
  for (let r of W) {
6963
- let a = o + s * (1 - r), c = k(a, n);
6963
+ let a = o + s * (1 - r), c = A(a, n);
6964
6964
  this.applyLineStyle(e, t.style), e.globalAlpha = r === 0 || r === 1 ? 1 : .7, e.beginPath(), e.moveTo(i.x, c), e.lineTo(i.x + i.width, c), e.stroke(), e.fillStyle = t.style.color, e.textAlign = "left", e.fillText(`${(r * 100).toFixed(1)}% (${a.toFixed(2)})`, i.x + 4, c - 2);
6965
6965
  }
6966
6966
  if (e.globalAlpha = 1, t.style.fillColor) {
6967
6967
  for (let r = 0; r < W.length - 1; r++) {
6968
- let a = o + s * (1 - W[r]), c = o + s * (1 - W[r + 1]), l = k(a, n), u = k(c, n);
6968
+ let a = o + s * (1 - W[r]), c = o + s * (1 - W[r + 1]), l = A(a, n), u = A(c, n);
6969
6969
  e.fillStyle = t.style.fillColor, e.globalAlpha = .05 + r * .02, e.fillRect(i.x, Math.min(l, u), i.width, Math.abs(u - l));
6970
6970
  }
6971
6971
  e.globalAlpha = 1;
@@ -6978,12 +6978,12 @@ var tr = class extends H {
6978
6978
  if (e.x < i.x - r || e.x > i.x + i.width + r) return !1;
6979
6979
  let a = t.anchors[0].price, o = t.anchors[1].price, s = a - o;
6980
6980
  for (let t of W) {
6981
- let i = k(o + s * (1 - t), n);
6981
+ let i = A(o + s * (1 - t), n);
6982
6982
  if (Math.abs(e.y - i) <= r) return !0;
6983
6983
  }
6984
6984
  return !1;
6985
6985
  }
6986
- }, lr = [
6986
+ }, ur = [
6987
6987
  0,
6988
6988
  .618,
6989
6989
  1,
@@ -6992,7 +6992,7 @@ var tr = class extends H {
6992
6992
  2.618,
6993
6993
  3.618,
6994
6994
  4.236
6995
- ], ur = class extends H {
6995
+ ], dr = class extends H {
6996
6996
  descriptor = {
6997
6997
  type: "fibExtension",
6998
6998
  name: "Fibonacci Extension",
@@ -7008,8 +7008,8 @@ var tr = class extends H {
7008
7008
  }
7009
7009
  let { chartRect: i } = n, a = t.anchors[0].price, o = t.anchors[1].price, s = t.anchors[2].price, c = a - o;
7010
7010
  e.font = "11px sans-serif", e.textBaseline = "middle", e.textAlign = "left";
7011
- for (let r of lr) {
7012
- let a = k(s + c * r, n);
7011
+ for (let r of ur) {
7012
+ let a = A(s + c * r, n);
7013
7013
  this.applyLineStyle(e, t.style), e.globalAlpha = r === 0 || r === 1 ? 1 : .6, e.beginPath(), e.moveTo(i.x, a), e.lineTo(i.x + i.width, a), e.stroke(), e.fillStyle = t.style.color, e.fillText(`${(r * 100).toFixed(1)}%`, i.x + 4, a - 2);
7014
7014
  }
7015
7015
  e.globalAlpha = 1, this.resetLineStyle(e), r && this.renderAnchorHandles(e, t, n);
@@ -7019,13 +7019,13 @@ var tr = class extends H {
7019
7019
  let { chartRect: i } = n;
7020
7020
  if (e.x < i.x - r || e.x > i.x + i.width + r) return !1;
7021
7021
  let a = t.anchors[0].price - t.anchors[1].price;
7022
- for (let i of lr) {
7023
- let o = k(t.anchors[2].price + a * i, n);
7022
+ for (let i of ur) {
7023
+ let o = A(t.anchors[2].price + a * i, n);
7024
7024
  if (Math.abs(e.y - o) <= r) return !0;
7025
7025
  }
7026
7026
  return !1;
7027
7027
  }
7028
- }, dr = class extends H {
7028
+ }, fr = class extends H {
7029
7029
  descriptor = {
7030
7030
  type: "rectangle",
7031
7031
  name: "Rectangle",
@@ -7043,7 +7043,7 @@ var tr = class extends H {
7043
7043
  let u = Math.min(i.x, a.x) + r, d = Math.min(i.y, a.y) + r, f = Math.max(i.x, a.x) - r, p = Math.max(i.y, a.y) - r;
7044
7044
  return !(e.x > u && e.x < f && e.y > d && e.y < p) || !!t.style.fillColor;
7045
7045
  }
7046
- }, fr = class extends H {
7046
+ }, pr = class extends H {
7047
7047
  descriptor = {
7048
7048
  type: "ellipse",
7049
7049
  name: "Ellipse",
@@ -7059,7 +7059,7 @@ var tr = class extends H {
7059
7059
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n), o = (i.x + a.x) / 2, s = (i.y + a.y) / 2, c = Math.max(Math.abs(a.x - i.x) / 2, 1), l = Math.max(Math.abs(a.y - i.y) / 2, 1), u = (e.x - o) / c, d = (e.y - s) / l, f = Math.sqrt(u * u + d * d), p = r / Math.max(Math.min(c, l), 4);
7060
7060
  return t.style.fillColor ? f <= 1 + p : Math.abs(f - 1) <= p;
7061
7061
  }
7062
- }, pr = class extends H {
7062
+ }, mr = class extends H {
7063
7063
  descriptor = {
7064
7064
  type: "triangle",
7065
7065
  name: "Triangle",
@@ -7085,7 +7085,7 @@ var tr = class extends H {
7085
7085
  }
7086
7086
  return !1;
7087
7087
  }
7088
- }, mr = class extends H {
7088
+ }, hr = class extends H {
7089
7089
  descriptor = {
7090
7090
  type: "pitchfork",
7091
7091
  name: "Andrews' Pitchfork",
@@ -7121,7 +7121,7 @@ var tr = class extends H {
7121
7121
  };
7122
7122
  return this.distanceToInfiniteLine(e, a, u) <= r || this.distanceToInfiniteLine(e, o, d) <= r;
7123
7123
  }
7124
- }, hr = [
7124
+ }, gr = [
7125
7125
  "1",
7126
7126
  "2",
7127
7127
  "3",
@@ -7130,7 +7130,7 @@ var tr = class extends H {
7130
7130
  "A",
7131
7131
  "B",
7132
7132
  "C"
7133
- ], gr = class extends H {
7133
+ ], _r = class extends H {
7134
7134
  descriptor = {
7135
7135
  type: "elliottWave",
7136
7136
  name: "Elliott Wave",
@@ -7142,9 +7142,9 @@ var tr = class extends H {
7142
7142
  this.applyLineStyle(e, t.style), e.beginPath(), e.moveTo(i[0].x, i[0].y);
7143
7143
  for (let t = 1; t < i.length; t++) e.lineTo(i[t].x, i[t].y);
7144
7144
  e.stroke(), this.resetLineStyle(e), e.font = "bold 12px sans-serif", e.fillStyle = t.style.color, e.textAlign = "center";
7145
- for (let t = 0; t < i.length && t < hr.length; t++) {
7145
+ for (let t = 0; t < i.length && t < gr.length; t++) {
7146
7146
  let n = t % 2 == 0 ? -12 : 12;
7147
- e.textBaseline = n < 0 ? "bottom" : "top", e.fillText(hr[t], i[t].x, i[t].y + n);
7147
+ e.textBaseline = n < 0 ? "bottom" : "top", e.fillText(gr[t], i[t].x, i[t].y + n);
7148
7148
  }
7149
7149
  r && this.renderAnchorHandles(e, t, n);
7150
7150
  }
@@ -7154,7 +7154,7 @@ var tr = class extends H {
7154
7154
  for (let t = 0; t < i.length - 1; t++) if (this.distanceToLine(e, i[t], i[t + 1]) <= r) return !0;
7155
7155
  return !1;
7156
7156
  }
7157
- }, _r = class extends H {
7157
+ }, vr = class extends H {
7158
7158
  descriptor = {
7159
7159
  type: "priceRange",
7160
7160
  name: "Price Range",
@@ -7172,7 +7172,7 @@ var tr = class extends H {
7172
7172
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n), o = Math.min(i.x, a.x), s = Math.max(i.x, a.x), c = Math.min(i.y, a.y), l = Math.max(i.y, a.y);
7173
7173
  return e.x >= o - r && e.x <= s + r && e.y >= c - r && e.y <= l + r;
7174
7174
  }
7175
- }, vr = class extends H {
7175
+ }, yr = class extends H {
7176
7176
  descriptor = {
7177
7177
  type: "dateRange",
7178
7178
  name: "Date Range",
@@ -7182,7 +7182,7 @@ var tr = class extends H {
7182
7182
  if (t.anchors.length < 2) return;
7183
7183
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n), { chartRect: o } = n, s = Math.min(i.x, a.x), c = Math.max(i.x, a.x);
7184
7184
  e.fillStyle = "rgba(33, 150, 243, 0.08)", e.fillRect(s, o.y, c - s, o.height), this.applyLineStyle(e, t.style), e.beginPath(), e.moveTo(s, o.y), e.lineTo(s, o.y + o.height), e.stroke(), e.beginPath(), e.moveTo(c, o.y), e.lineTo(c, o.y + o.height), e.stroke(), this.resetLineStyle(e);
7185
- let l = N(t.anchors[0].time, n), u = N(t.anchors[1].time, n), d = Math.max(0, Math.round(Math.abs(u - l)));
7185
+ let l = P(t.anchors[0].time, n), u = P(t.anchors[1].time, n), d = Math.max(0, Math.round(Math.abs(u - l)));
7186
7186
  e.font = "12px sans-serif", e.fillStyle = t.style.color, e.textAlign = "center", e.textBaseline = "top", e.fillText(`${d} bars`, (s + c) / 2, o.y + 4), r && this.renderAnchorHandles(e, t, n);
7187
7187
  }
7188
7188
  hitTest(e, t, n, r) {
@@ -7190,7 +7190,7 @@ var tr = class extends H {
7190
7190
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n), { chartRect: o } = n, s = Math.min(i.x, a.x), c = Math.max(i.x, a.x);
7191
7191
  return e.x >= s - r && e.x <= c + r && e.y >= o.y && e.y <= o.y + o.height;
7192
7192
  }
7193
- }, yr = class extends H {
7193
+ }, br = class extends H {
7194
7194
  descriptor = {
7195
7195
  type: "measure",
7196
7196
  name: "Measure",
@@ -7200,7 +7200,7 @@ var tr = class extends H {
7200
7200
  if (t.anchors.length < 2) return;
7201
7201
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n);
7202
7202
  this.applyLineStyle(e, t.style), e.setLineDash([4, 4]), e.beginPath(), e.moveTo(i.x, i.y), e.lineTo(a.x, a.y), e.stroke(), this.resetLineStyle(e);
7203
- let o = t.anchors[1].price - t.anchors[0].price, s = N(t.anchors[0].time, n), c = N(t.anchors[1].time, n), l = Math.max(0, Math.round(Math.abs(c - s))), u = t.anchors[0].price === 0 ? 0 : o / t.anchors[0].price * 100, d = [`Price: ${o >= 0 ? "+" : ""}${o.toFixed(2)} (${u >= 0 ? "+" : ""}${u.toFixed(2)}%)`, `Bars: ${l}`], f = (i.x + a.x) / 2, p = (i.y + a.y) / 2;
7203
+ let o = t.anchors[1].price - t.anchors[0].price, s = P(t.anchors[0].time, n), c = P(t.anchors[1].time, n), l = Math.max(0, Math.round(Math.abs(c - s))), u = t.anchors[0].price === 0 ? 0 : o / t.anchors[0].price * 100, d = [`Price: ${o >= 0 ? "+" : ""}${o.toFixed(2)} (${u >= 0 ? "+" : ""}${u.toFixed(2)}%)`, `Bars: ${l}`], f = (i.x + a.x) / 2, p = (i.y + a.y) / 2;
7204
7204
  e.font = "11px sans-serif", e.textAlign = "center", e.textBaseline = "bottom";
7205
7205
  let m = Math.max(...d.map((t) => e.measureText(t).width));
7206
7206
  e.fillStyle = "rgba(0, 0, 0, 0.7)", e.fillRect(f - m / 2 - 6, p - d.length * 14 - 4, m + 12, d.length * 14 + 8), e.fillStyle = "#FFFFFF";
@@ -7215,12 +7215,12 @@ var tr = class extends H {
7215
7215
  };
7216
7216
  //#endregion
7217
7217
  //#region src/drawings/tools/TextAnnotation.ts
7218
- function br(e, t = "Text") {
7218
+ function xr(e, t = "Text") {
7219
7219
  if (typeof e.style.text == "string" && e.style.text.length > 0) return e.style.text;
7220
7220
  let n = e.meta?.text;
7221
7221
  return typeof n == "string" && n.length > 0 ? n : t;
7222
7222
  }
7223
- var xr = class extends H {
7223
+ var Sr = class extends H {
7224
7224
  descriptor = {
7225
7225
  type: "text",
7226
7226
  name: "Text",
@@ -7228,7 +7228,7 @@ var xr = class extends H {
7228
7228
  };
7229
7229
  render(e, t, n, r) {
7230
7230
  if (t.anchors.length < 1) return;
7231
- let i = this.anchorToPixel(t.anchors[0], n), a = br(t), o = t.style.fontSize || 14;
7231
+ let i = this.anchorToPixel(t.anchors[0], n), a = xr(t), o = t.style.fontSize || 14;
7232
7232
  if (e.font = `${o}px sans-serif`, e.fillStyle = t.style.color, e.textAlign = "left", e.textBaseline = "top", r) {
7233
7233
  let n = e.measureText(a);
7234
7234
  e.strokeStyle = t.style.color, e.lineWidth = 1, e.setLineDash([3, 3]), e.strokeRect(i.x - 2, i.y - 2, n.width + 4, o + 4), e.setLineDash([]);
@@ -7240,7 +7240,7 @@ var xr = class extends H {
7240
7240
  let i = this.anchorToPixel(t.anchors[0], n), a = t.style.fontSize || 14;
7241
7241
  return e.x >= i.x - r && e.x <= i.x + 80 + r && e.y >= i.y - r && e.y <= i.y + a + r;
7242
7242
  }
7243
- }, Sr = class extends H {
7243
+ }, Cr = class extends H {
7244
7244
  descriptor = {
7245
7245
  type: "arrow",
7246
7246
  name: "Arrow",
@@ -7258,7 +7258,7 @@ var xr = class extends H {
7258
7258
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n);
7259
7259
  return this.distanceToLine(e, i, a) <= r;
7260
7260
  }
7261
- }, Cr = [
7261
+ }, wr = [
7262
7262
  {
7263
7263
  label: "8x1",
7264
7264
  ratio: 8
@@ -7295,7 +7295,7 @@ var xr = class extends H {
7295
7295
  label: "1x8",
7296
7296
  ratio: .125
7297
7297
  }
7298
- ], wr = class extends H {
7298
+ ], Tr = class extends H {
7299
7299
  descriptor = {
7300
7300
  type: "gannFan",
7301
7301
  name: "Gann Fan",
@@ -7307,7 +7307,7 @@ var xr = class extends H {
7307
7307
  if (Math.abs(o) < 1) return;
7308
7308
  let c = s / o, l = o > 0 ? 1 : -1, { chartRect: u } = n, d = l > 0 ? u.x + u.width : u.x;
7309
7309
  this.applyLineStyle(e, t.style);
7310
- for (let { label: n, ratio: r } of Cr) {
7310
+ for (let { label: n, ratio: r } of wr) {
7311
7311
  let a = c * r, o = d, s = i.y + a * (o - i.x);
7312
7312
  e.globalAlpha = r === 1 ? 1 : .5, e.lineWidth = r === 1 ? t.style.lineWidth : Math.max(.5, t.style.lineWidth * .7), e.beginPath(), e.moveTo(i.x, i.y), e.lineTo(o, s), e.stroke();
7313
7313
  let f = o - l * 4, p = s;
@@ -7320,7 +7320,7 @@ var xr = class extends H {
7320
7320
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n), o = a.x - i.x, s = a.y - i.y;
7321
7321
  if (Math.abs(o) < 1) return !1;
7322
7322
  let c = s / o, l = o > 0 ? 1 : -1, { chartRect: u } = n, d = l > 0 ? u.x + u.width : u.x;
7323
- for (let { ratio: t } of Cr) {
7323
+ for (let { ratio: t } of wr) {
7324
7324
  let n = c * t, a = d, o = i.y + n * (a - i.x);
7325
7325
  if (this.distanceToLine(e, i, {
7326
7326
  x: a,
@@ -7329,7 +7329,7 @@ var xr = class extends H {
7329
7329
  }
7330
7330
  return !1;
7331
7331
  }
7332
- }, Tr = [
7332
+ }, Er = [
7333
7333
  0,
7334
7334
  .25,
7335
7335
  .333,
@@ -7337,7 +7337,7 @@ var xr = class extends H {
7337
7337
  .667,
7338
7338
  .75,
7339
7339
  1
7340
- ], Er = class extends H {
7340
+ ], Dr = class extends H {
7341
7341
  descriptor = {
7342
7342
  type: "gannBox",
7343
7343
  name: "Gann Box",
@@ -7348,18 +7348,18 @@ var xr = class extends H {
7348
7348
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n), o = Math.min(i.x, a.x), s = Math.max(i.x, a.x), c = Math.min(i.y, a.y), l = Math.max(i.y, a.y), u = s - o, d = l - c;
7349
7349
  if (!(u < 2 || d < 2)) {
7350
7350
  this.applyLineStyle(e, t.style), e.strokeRect(o, c, u, d), e.save(), e.globalAlpha = .35;
7351
- for (let t of Tr) {
7351
+ for (let t of Er) {
7352
7352
  if (t === 0 || t === 1) continue;
7353
7353
  let n = c + d * t;
7354
7354
  e.beginPath(), e.moveTo(o, n), e.lineTo(s, n), e.stroke();
7355
7355
  }
7356
- for (let t of Tr) {
7356
+ for (let t of Er) {
7357
7357
  if (t === 0 || t === 1) continue;
7358
7358
  let n = o + u * t;
7359
7359
  e.beginPath(), e.moveTo(n, c), e.lineTo(n, l), e.stroke();
7360
7360
  }
7361
7361
  e.globalAlpha = .5, e.setLineDash([4, 3]), e.beginPath(), e.moveTo(o, c), e.lineTo(s, l), e.stroke(), e.beginPath(), e.moveTo(s, c), e.lineTo(o, l), e.stroke(), e.restore(), this.resetLineStyle(e), e.fillStyle = t.style.color, e.font = "8px sans-serif", e.globalAlpha = .6, e.textBaseline = "bottom", e.textAlign = "right";
7362
- for (let t of Tr) {
7362
+ for (let t of Er) {
7363
7363
  if (t === 0 || t === 1) continue;
7364
7364
  let n = c + d * t;
7365
7365
  e.fillText(`${(t * 100).toFixed(0)}%`, o - 3, n);
@@ -7384,7 +7384,7 @@ var xr = class extends H {
7384
7384
  y: l
7385
7385
  }) <= r;
7386
7386
  }
7387
- }, Dr = class extends H {
7387
+ }, Or = class extends H {
7388
7388
  descriptor = {
7389
7389
  type: "anchoredVWAP",
7390
7390
  name: "Anchored VWAP",
@@ -7400,11 +7400,11 @@ var xr = class extends H {
7400
7400
  }
7401
7401
  render(e, t, n, r) {
7402
7402
  if (t.anchors.length < 1 || !this.dataGetter) return;
7403
- let i = this.dataGetter(), a = Math.max(0, Math.round(N(t.anchors[0].time, n)));
7403
+ let i = this.dataGetter(), a = Math.max(0, Math.round(P(t.anchors[0].time, n)));
7404
7404
  if (a >= i.length) return;
7405
7405
  let { vwap: o, upper1: s, lower1: c, upper2: l, lower2: u } = this.computeVWAP(i, a), { chartRect: d } = n, f = n.barWidth + n.barSpacing;
7406
7406
  if (this.applyLineStyle(e, t.style), e.lineWidth = t.style.lineWidth + .5, this.drawLine(e, o, a, n, d, f), this.showBands && o.length > 1 && (e.globalAlpha = .4, e.lineWidth = Math.max(.5, t.style.lineWidth * .6), e.setLineDash([4, 3]), this.drawLine(e, s, a, n, d, f), this.drawLine(e, c, a, n, d, f), e.globalAlpha = .25, this.drawLine(e, l, a, n, d, f), this.drawLine(e, u, a, n, d, f), e.globalAlpha = 1), this.resetLineStyle(e), o.length > 0) {
7407
- let r = o[o.length - 1], i = O(a + o.length - 1, n), s = k(r, n);
7407
+ let r = o[o.length - 1], i = k(a + o.length - 1, n), s = A(r, n);
7408
7408
  i >= d.x && i <= d.x + d.width && (e.fillStyle = t.style.color, e.font = "bold 9px sans-serif", e.textAlign = "left", e.textBaseline = "middle", e.fillText(`AVWAP ${r.toFixed(2)}`, i + 6, s));
7409
7409
  }
7410
7410
  r && this.renderAnchorHandles(e, t, n);
@@ -7413,10 +7413,10 @@ var xr = class extends H {
7413
7413
  e.beginPath();
7414
7414
  let o = !1;
7415
7415
  for (let s = 0; s < t.length; s++) {
7416
- let c = O(n + s, r);
7416
+ let c = k(n + s, r);
7417
7417
  if (c < i.x - a) continue;
7418
7418
  if (c > i.x + i.width + a) break;
7419
- let l = k(t[s], r);
7419
+ let l = A(t[s], r);
7420
7420
  o ? e.lineTo(c, l) : (e.moveTo(c, l), o = !0);
7421
7421
  }
7422
7422
  e.stroke();
@@ -7441,11 +7441,11 @@ var xr = class extends H {
7441
7441
  }
7442
7442
  hitTest(e, t, n, r) {
7443
7443
  if (t.anchors.length < 1 || !this.dataGetter) return !1;
7444
- let i = this.dataGetter(), a = Math.max(0, Math.round(N(t.anchors[0].time, n)));
7444
+ let i = this.dataGetter(), a = Math.max(0, Math.round(P(t.anchors[0].time, n)));
7445
7445
  if (a >= i.length) return !1;
7446
7446
  let { vwap: o } = this.computeVWAP(i, a);
7447
7447
  for (let t = 1; t < o.length; t++) {
7448
- let i = O(a + t - 1, n), s = k(o[t - 1], n), c = O(a + t, n), l = k(o[t], n);
7448
+ let i = k(a + t - 1, n), s = A(o[t - 1], n), c = k(a + t, n), l = A(o[t], n);
7449
7449
  if (this.distanceToLine(e, {
7450
7450
  x: i,
7451
7451
  y: s
@@ -7456,7 +7456,7 @@ var xr = class extends H {
7456
7456
  }
7457
7457
  return !1;
7458
7458
  }
7459
- }, Or = class extends H {
7459
+ }, kr = class extends H {
7460
7460
  descriptor = {
7461
7461
  type: "volumeProfileRange",
7462
7462
  name: "Volume Profile (Range)",
@@ -7469,7 +7469,7 @@ var xr = class extends H {
7469
7469
  }
7470
7470
  render(e, t, n, r) {
7471
7471
  if (t.anchors.length < 2 || !this.dataGetter) return;
7472
- let i = this.dataGetter(), a = Math.round(N(t.anchors[0].time, n)), o = Math.round(N(t.anchors[1].time, n)), s = Math.max(0, Math.min(a, o)), c = Math.min(i.length - 1, Math.max(a, o));
7472
+ let i = this.dataGetter(), a = Math.round(P(t.anchors[0].time, n)), o = Math.round(P(t.anchors[1].time, n)), s = Math.max(0, Math.min(a, o)), c = Math.min(i.length - 1, Math.max(a, o));
7473
7473
  if (s >= i.length || c < 0 || s > c) return;
7474
7474
  let l = Infinity, u = -Infinity;
7475
7475
  for (let e = s; e <= c; e++) i[e].low < l && (l = i[e].low), i[e].high > u && (u = i[e].high);
@@ -7482,15 +7482,15 @@ var xr = class extends H {
7482
7482
  if (p === 0) return;
7483
7483
  let m = 0;
7484
7484
  for (let e = 1; e < this.numBins; e++) f[e] > f[m] && (m = e);
7485
- let h = O(c, n) + n.barWidth, g = t.style.color, _ = t.style.fillColor ?? "#FF9800";
7485
+ let h = k(c, n) + n.barWidth, g = t.style.color, _ = t.style.fillColor ?? "#FF9800";
7486
7486
  e.save();
7487
7487
  for (let t = 0; t < this.numBins; t++) {
7488
- let r = f[t] / p * 100, i = l + (t + 1) * d, a = l + t * d, o = k(i, n), s = k(a, n), c = Math.abs(s - o);
7488
+ let r = f[t] / p * 100, i = l + (t + 1) * d, a = l + t * d, o = A(i, n), s = A(a, n), c = Math.abs(s - o);
7489
7489
  e.globalAlpha = .35, e.fillStyle = t === m ? _ : g, e.fillRect(h, Math.min(o, s), r, Math.max(1, c - .5));
7490
7490
  }
7491
- let v = l + (m + .5) * d, y = k(v, n);
7491
+ let v = l + (m + .5) * d, y = A(v, n);
7492
7492
  e.globalAlpha = .7, e.strokeStyle = _, e.lineWidth = 1, e.setLineDash([4, 3]), e.beginPath();
7493
- let b = O(s, n) - n.barWidth / 2;
7493
+ let b = k(s, n) - n.barWidth / 2;
7494
7494
  e.moveTo(b, y), e.lineTo(h + 100, y), e.stroke(), e.fillStyle = _, e.font = "9px sans-serif", e.textAlign = "left", e.textBaseline = "bottom", e.globalAlpha = .8, e.fillText(`POC ${v.toFixed(2)}`, h + 100 + 4, y - 2), e.restore(), r && this.renderAnchorHandles(e, t, n);
7495
7495
  }
7496
7496
  hitTest(e, t, n, r) {
@@ -7498,7 +7498,7 @@ var xr = class extends H {
7498
7498
  let i = this.anchorToPixel(t.anchors[0], n), a = this.anchorToPixel(t.anchors[1], n), o = Math.min(i.x, a.x) - r, s = Math.max(i.x, a.x) + 100 + r, c = Math.min(i.y, a.y) - r, l = Math.max(i.y, a.y) + r;
7499
7499
  return e.x >= o && e.x <= s && e.y >= c && e.y <= l;
7500
7500
  }
7501
- }, kr = [
7501
+ }, Ar = [
7502
7502
  1,
7503
7503
  2,
7504
7504
  3,
@@ -7508,7 +7508,7 @@ var xr = class extends H {
7508
7508
  21,
7509
7509
  34,
7510
7510
  55
7511
- ], Ar = class extends H {
7511
+ ], jr = class extends H {
7512
7512
  descriptor = {
7513
7513
  type: "fibTimeZones",
7514
7514
  name: "Fibonacci Time Zones",
@@ -7520,8 +7520,8 @@ var xr = class extends H {
7520
7520
  if (a === 0) return;
7521
7521
  let { chartRect: o } = n;
7522
7522
  e.font = "11px sans-serif", e.textBaseline = "top", e.textAlign = "center", this.applyLineStyle(e, t.style);
7523
- for (let r of kr) {
7524
- let s = P(i.time + a * r, n);
7523
+ for (let r of Ar) {
7524
+ let s = F(i.time + a * r, n);
7525
7525
  s < o.x || s > o.x + o.width || (e.globalAlpha = r === 1 ? 1 : .55, e.beginPath(), e.moveTo(s, o.y), e.lineTo(s, o.y + o.height), e.stroke(), e.fillStyle = t.style.color, e.fillText(String(r), s, o.y + 2));
7526
7526
  }
7527
7527
  e.globalAlpha = 1, this.resetLineStyle(e), r && this.renderAnchorHandles(e, t, n);
@@ -7532,8 +7532,8 @@ var xr = class extends H {
7532
7532
  if (a === 0) return !1;
7533
7533
  let { chartRect: o } = n;
7534
7534
  if (e.y < o.y || e.y > o.y + o.height) return !1;
7535
- for (let t of kr) {
7536
- let o = P(i.time + a * t, n);
7535
+ for (let t of Ar) {
7536
+ let o = F(i.time + a * t, n);
7537
7537
  if (Math.abs(e.x - o) <= r) return !0;
7538
7538
  }
7539
7539
  return !1;
@@ -7541,16 +7541,16 @@ var xr = class extends H {
7541
7541
  };
7542
7542
  //#endregion
7543
7543
  //#region src/drawings/tools/index.ts
7544
- function jr(e) {
7545
- e.register(new tr()), e.register(new nr()), e.register(new rr()), e.register(new ir()), e.register(new ar()), e.register(new or()), e.register(new sr()), e.register(new cr()), e.register(new ur()), e.register(new dr()), e.register(new fr()), e.register(new pr()), e.register(new mr()), e.register(new gr()), e.register(new _r()), e.register(new vr()), e.register(new yr()), e.register(new xr()), e.register(new Sr()), e.register(new wr()), e.register(new Er()), e.register(new Dr()), e.register(new Or()), e.register(new Ar());
7544
+ function Mr(e) {
7545
+ e.register(new nr()), e.register(new rr()), e.register(new ir()), e.register(new ar()), e.register(new or()), e.register(new sr()), e.register(new cr()), e.register(new lr()), e.register(new dr()), e.register(new fr()), e.register(new pr()), e.register(new mr()), e.register(new hr()), e.register(new _r()), e.register(new vr()), e.register(new yr()), e.register(new br()), e.register(new Sr()), e.register(new Cr()), e.register(new Tr()), e.register(new Dr()), e.register(new Or()), e.register(new kr()), e.register(new jr());
7546
7546
  }
7547
7547
  //#endregion
7548
7548
  //#region src/trading/OrderRenderer.ts
7549
- var Mr = class {
7549
+ var Nr = class {
7550
7550
  render(e, t, n, r, i, a) {
7551
7551
  let o = i.orderColors?.buy ?? "#26A69A", s = i.orderColors?.sell ?? "#EF5350", { chartRect: c } = n;
7552
7552
  for (let i of t) {
7553
- let t = a?.orderId === i.id && a.sourceType === "order", l = k(t ? a.currentPrice : i.price, n);
7553
+ let t = a?.orderId === i.id && a.sourceType === "order", l = A(t ? a.currentPrice : i.price, n);
7554
7554
  if (l < c.y || l > c.y + c.height) continue;
7555
7555
  let u = i.side === "buy" ? o : s;
7556
7556
  e.setLineDash([6, 4]), e.strokeStyle = u, e.lineWidth = 1, e.beginPath(), e.moveTo(c.x, Math.round(l) + .5), e.lineTo(c.x + c.width, Math.round(l) + .5), e.stroke(), e.setLineDash([]);
@@ -7560,7 +7560,7 @@ var Mr = class {
7560
7560
  e.fillStyle = u, e.fillRect(c.x + 4, l - 8, f, 16), e.fillStyle = "#FFFFFF", e.textBaseline = "middle", e.textAlign = "left", e.fillText(d, c.x + 8, l);
7561
7561
  let p = c.x + 4 + f + 6;
7562
7562
  if (e.fillStyle = u, e.beginPath(), i.side === "buy" ? (e.moveTo(p, l + 4), e.lineTo(p + 5, l - 2), e.lineTo(p + 10, l + 4)) : (e.moveTo(p, l - 4), e.lineTo(p + 5, l + 2), e.lineTo(p + 10, l - 4)), e.fill(), t) {
7563
- let t = k(a.startPrice, n);
7563
+ let t = A(a.startPrice, n);
7564
7564
  e.setLineDash([2, 4]), e.strokeStyle = u, e.globalAlpha = .3, e.beginPath(), e.moveTo(c.x, Math.round(t) + .5), e.lineTo(c.x + c.width, Math.round(t) + .5), e.stroke(), e.globalAlpha = 1, e.setLineDash([]);
7565
7565
  }
7566
7566
  }
@@ -7568,7 +7568,7 @@ var Mr = class {
7568
7568
  renderAxisBadges(e, t, n, r, i, a) {
7569
7569
  let o = i.orderColors?.buy ?? "#26A69A", s = i.orderColors?.sell ?? "#EF5350", c = i.pricePrecision ?? 2, { chartRect: l } = n, d = l.x + l.width + 1;
7570
7570
  for (let i of t) {
7571
- let t = a?.orderId === i.id && a.sourceType === "order" ? a.currentPrice : i.price, f = k(t, n);
7571
+ let t = a?.orderId === i.id && a.sourceType === "order" ? a.currentPrice : i.price, f = A(t, n);
7572
7572
  if (f < l.y || f > l.y + l.height) continue;
7573
7573
  let p = i.side === "buy" ? o : s, m = `${t.toFixed(c)} x ${i.quantity}`;
7574
7574
  e.font = `11px ${r.font.family}`;
@@ -7579,7 +7579,7 @@ var Mr = class {
7579
7579
  hitTest(e, t, n, r) {
7580
7580
  for (let i of t) {
7581
7581
  if (i.draggable === !1) continue;
7582
- let t = k(i.price, n);
7582
+ let t = A(i.price, n);
7583
7583
  if (Math.abs(e - t) <= r) return i;
7584
7584
  }
7585
7585
  return null;
@@ -7587,7 +7587,7 @@ var Mr = class {
7587
7587
  };
7588
7588
  //#endregion
7589
7589
  //#region src/trading/positionFormat.ts
7590
- function Nr(e, t, n) {
7590
+ function Pr(e, t, n) {
7591
7591
  let r = Math.min(Math.max(e.closedQuantity ?? 0, 0), e.quantity), i = e.quantity - r, a = e.side === "buy" ? 1 : -1, o = (t - e.entryPrice) * i * a, s = e.entryPrice === 0 ? 0 : (t - e.entryPrice) / e.entryPrice * 100 * a;
7592
7592
  return {
7593
7593
  side: e.side,
@@ -7601,9 +7601,9 @@ function Nr(e, t, n) {
7601
7601
  precision: n
7602
7602
  };
7603
7603
  }
7604
- var Pr = /\{(side|qty|closedQty|openQty|entry|price|pnl|pnlPct|pnlSign)\}/g;
7605
- function Fr(e, t) {
7606
- return e.replace(Pr, (e, n) => {
7604
+ var Fr = /\{(side|qty|closedQty|openQty|entry|price|pnl|pnlPct|pnlSign)\}/g;
7605
+ function Ir(e, t) {
7606
+ return e.replace(Fr, (e, n) => {
7607
7607
  switch (n) {
7608
7608
  case "side": return t.side.toUpperCase();
7609
7609
  case "qty": return String(t.quantity);
@@ -7618,10 +7618,10 @@ function Fr(e, t) {
7618
7618
  }
7619
7619
  });
7620
7620
  }
7621
- function Ir(e, t) {
7622
- return typeof e == "function" ? e(t) : Fr(e ?? "{side} {qty} | P&L: {pnlSign}{pnl}", t);
7621
+ function Lr(e, t) {
7622
+ return typeof e == "function" ? e(t) : Ir(e ?? "{side} {qty} | P&L: {pnlSign}{pnl}", t);
7623
7623
  }
7624
- function Lr(e, t, n) {
7624
+ function Rr(e, t, n) {
7625
7625
  if (!t || t.length === 0) return n;
7626
7626
  let r = [...t].sort((e, t) => e.pnl - t.pnl), i;
7627
7627
  for (let t of r) if (e >= t.pnl) i = t.color;
@@ -7630,30 +7630,30 @@ function Lr(e, t, n) {
7630
7630
  }
7631
7631
  //#endregion
7632
7632
  //#region src/trading/PositionRenderer.ts
7633
- var Rr = class {
7633
+ var zr = class {
7634
7634
  render(e, t, n, r, i, a) {
7635
7635
  let { chartRect: o } = r, s = a.positionColors?.profit ?? "#26A69A", c = a.positionColors?.loss ?? "#EF5350", l = a.positionColors?.entry ?? "#2196F3", u = a.pricePrecision ?? 2;
7636
7636
  for (let d of t) {
7637
- let t = k(d.entryPrice, r);
7637
+ let t = A(d.entryPrice, r);
7638
7638
  if (e.strokeStyle = l, e.lineWidth = 1.5, e.setLineDash([]), e.beginPath(), e.moveTo(o.x, Math.round(t) + .5), e.lineTo(o.x + o.width, Math.round(t) + .5), e.stroke(), n !== null) {
7639
- let f = k(n, r), p = Nr(d, n, u), m = p.pnl, h = m >= 0 ? s : c, g = Lr(m, a.pnlThresholds, h);
7639
+ let f = A(n, r), p = Pr(d, n, u), m = p.pnl, h = m >= 0 ? s : c, g = Rr(m, a.pnlThresholds, h);
7640
7640
  e.fillStyle = g, e.globalAlpha = .08;
7641
7641
  let _ = Math.min(t, f), v = Math.abs(f - t);
7642
7642
  if (e.fillRect(o.x, _, o.width, v), e.globalAlpha = 1, p.closedQuantity > 0 && d.quantity > 0) {
7643
7643
  let t = p.closedQuantity / d.quantity;
7644
7644
  e.fillStyle = l, e.globalAlpha = .25, e.fillRect(o.x, _, Math.max(2, o.width * t * .04) + 2, v), e.globalAlpha = 1;
7645
7645
  }
7646
- let y = Ir(a.positionLabel, p);
7646
+ let y = Lr(a.positionLabel, p);
7647
7647
  e.font = `bold 11px ${i.font.family}`;
7648
7648
  let b = e.measureText(y).width + 12, x = o.x + 8;
7649
7649
  e.fillStyle = g, e.globalAlpha = .9, e.fillRect(x, t - 10, b, 20), e.globalAlpha = 1, e.fillStyle = "#FFFFFF", e.textBaseline = "middle", e.textAlign = "left", e.fillText(y, x + 6, t);
7650
7650
  }
7651
7651
  if (d.stopLoss !== void 0) {
7652
- let t = k(d.stopLoss, r);
7652
+ let t = A(d.stopLoss, r);
7653
7653
  e.setLineDash([4, 4]), e.strokeStyle = c, e.lineWidth = 1, e.beginPath(), e.moveTo(o.x, Math.round(t) + .5), e.lineTo(o.x + o.width, Math.round(t) + .5), e.stroke(), e.font = `bold 10px ${i.font.family}`, e.fillStyle = c, e.fillRect(o.x + 4, t - 8, 24, 16), e.fillStyle = "#FFFFFF", e.textAlign = "left", e.textBaseline = "middle", e.fillText("SL", o.x + 8, t);
7654
7654
  }
7655
7655
  if (d.takeProfit !== void 0) {
7656
- let t = k(d.takeProfit, r);
7656
+ let t = A(d.takeProfit, r);
7657
7657
  e.setLineDash([4, 4]), e.strokeStyle = s, e.lineWidth = 1, e.beginPath(), e.moveTo(o.x, Math.round(t) + .5), e.lineTo(o.x + o.width, Math.round(t) + .5), e.stroke(), e.font = `bold 10px ${i.font.family}`, e.fillStyle = s, e.fillRect(o.x + 4, t - 8, 24, 16), e.fillStyle = "#FFFFFF", e.textAlign = "left", e.textBaseline = "middle", e.fillText("TP", o.x + 8, t);
7658
7658
  }
7659
7659
  e.setLineDash([]);
@@ -7662,11 +7662,11 @@ var Rr = class {
7662
7662
  renderAxisBadges(e, t, n, r, i) {
7663
7663
  let { chartRect: a } = n, o = i.positionColors?.entry ?? "#2196F3", s = i.pricePrecision ?? 2, c = a.x + a.width + 1;
7664
7664
  for (let i of t) {
7665
- let t = k(i.entryPrice, n);
7665
+ let t = A(i.entryPrice, n);
7666
7666
  e.fillStyle = o, e.fillRect(c, t - 9, u - 2, 18), e.fillStyle = "#FFFFFF", e.font = `11px ${r.font.family}`, e.textAlign = "left", e.textBaseline = "middle", e.fillText(i.entryPrice.toFixed(s), c + 5, t);
7667
7667
  }
7668
7668
  }
7669
- }, zr = class {
7669
+ }, Br = class {
7670
7670
  render(e, t, n, r) {
7671
7671
  if (!r.depthOverlay?.enabled) return;
7672
7672
  let { chartRect: i } = n, a = r.depthOverlay.bidColor ?? "rgba(38,166,154,0.15)", o = r.depthOverlay.askColor ?? "rgba(239,83,80,0.15)", s = r.depthOverlay.maxWidth ?? 100, c = 0, l = [], u = 0;
@@ -7681,23 +7681,23 @@ var Rr = class {
7681
7681
  cumVol: u
7682
7682
  }), u > c && (c = u);
7683
7683
  if (c === 0) return;
7684
- let f = Math.max(1, t.bids.length > 1 ? Math.abs(k(t.bids[0].price, n) - k(t.bids[1].price, n)) : 4), p = i.x + i.width;
7684
+ let f = Math.max(1, t.bids.length > 1 ? Math.abs(A(t.bids[0].price, n) - A(t.bids[1].price, n)) : 4), p = i.x + i.width;
7685
7685
  e.fillStyle = a;
7686
7686
  for (let { price: t, cumVol: r } of l) {
7687
- let a = k(t, n);
7687
+ let a = A(t, n);
7688
7688
  if (a < i.y || a > i.y + i.height) continue;
7689
7689
  let o = r / c * s;
7690
7690
  e.fillRect(p - o, a - f / 2, o, f);
7691
7691
  }
7692
7692
  e.fillStyle = o;
7693
7693
  for (let { price: t, cumVol: r } of d) {
7694
- let a = k(t, n);
7694
+ let a = A(t, n);
7695
7695
  if (a < i.y || a > i.y + i.height) continue;
7696
7696
  let o = r / c * s;
7697
7697
  e.fillRect(p - o, a - f / 2, o, f);
7698
7698
  }
7699
7699
  }
7700
- }, Br = class {
7700
+ }, Vr = class {
7701
7701
  dragState = null;
7702
7702
  startY = 0;
7703
7703
  dragging = !1;
@@ -7707,7 +7707,7 @@ var Rr = class {
7707
7707
  onPointerDown(e, t, n, r, i) {
7708
7708
  for (let n of t) {
7709
7709
  if (n.draggable === !1) continue;
7710
- let t = k(n.price, r);
7710
+ let t = A(n.price, r);
7711
7711
  if (Math.abs(e.y - t) <= i) return this.dragState = {
7712
7712
  orderId: n.id,
7713
7713
  sourceType: "order",
@@ -7717,7 +7717,7 @@ var Rr = class {
7717
7717
  }
7718
7718
  for (let t of n) {
7719
7719
  if (t.stopLoss !== void 0) {
7720
- let n = k(t.stopLoss, r);
7720
+ let n = A(t.stopLoss, r);
7721
7721
  if (Math.abs(e.y - n) <= i) return this.dragState = {
7722
7722
  orderId: t.id,
7723
7723
  sourceType: "stopLoss",
@@ -7726,7 +7726,7 @@ var Rr = class {
7726
7726
  }, this.startY = e.y, this.dragging = !1, !0;
7727
7727
  }
7728
7728
  if (t.takeProfit !== void 0) {
7729
- let n = k(t.takeProfit, r);
7729
+ let n = A(t.takeProfit, r);
7730
7730
  if (Math.abs(e.y - n) <= i) return this.dragState = {
7731
7731
  orderId: t.id,
7732
7732
  sourceType: "takeProfit",
@@ -7743,7 +7743,7 @@ var Rr = class {
7743
7743
  if (Math.abs(e.y - this.startY) < this.dragThreshold) return !0;
7744
7744
  this.dragging = !0;
7745
7745
  }
7746
- return this.dragState.currentPrice = j(e.y, t), !0;
7746
+ return this.dragState.currentPrice = M(e.y, t), !0;
7747
7747
  }
7748
7748
  onPointerUp() {
7749
7749
  if (!this.dragState) return null;
@@ -7761,7 +7761,7 @@ var Rr = class {
7761
7761
  isActive() {
7762
7762
  return this.dragState !== null;
7763
7763
  }
7764
- }, Vr = class {
7764
+ }, Hr = class {
7765
7765
  menuElement = null;
7766
7766
  removeHandler = null;
7767
7767
  onItemSelect = null;
@@ -7848,7 +7848,7 @@ var Rr = class {
7848
7848
  };
7849
7849
  //#endregion
7850
7850
  //#region src/trading/BracketTool.ts
7851
- function Hr(e, t, n = {}) {
7851
+ function Ur(e, t, n = {}) {
7852
7852
  let r = Math.max(Math.abs(t) * (n.riskFraction ?? .01), 1e-8), i = r * (n.riskReward ?? 2);
7853
7853
  return e === "buy" ? {
7854
7854
  side: e,
@@ -7862,11 +7862,11 @@ function Hr(e, t, n = {}) {
7862
7862
  takeProfit: t - i
7863
7863
  };
7864
7864
  }
7865
- function Ur(e) {
7865
+ function Wr(e) {
7866
7866
  let t = Math.abs(e.entry - e.stopLoss);
7867
7867
  return t === 0 ? 0 : Math.abs(e.takeProfit - e.entry) / t;
7868
7868
  }
7869
- var Wr = 6, Gr = class {
7869
+ var Gr = 6, Kr = class {
7870
7870
  draft = null;
7871
7871
  dragging = null;
7872
7872
  defaults;
@@ -7874,7 +7874,7 @@ var Wr = 6, Gr = class {
7874
7874
  this.defaults = e;
7875
7875
  }
7876
7876
  start(e, t) {
7877
- this.draft = Hr(e, t, this.defaults), this.dragging = null;
7877
+ this.draft = Ur(e, t, this.defaults), this.dragging = null;
7878
7878
  }
7879
7879
  cancel() {
7880
7880
  this.draft = null, this.dragging = null;
@@ -7891,9 +7891,9 @@ var Wr = 6, Gr = class {
7891
7891
  "entry",
7892
7892
  "sl",
7893
7893
  "tp"
7894
- ], r = null, i = Wr;
7894
+ ], r = null, i = Gr;
7895
7895
  for (let a of n) {
7896
- let n = k(this.priceOf(a), t), o = Math.abs(n - e.y);
7896
+ let n = A(this.priceOf(a), t), o = Math.abs(n - e.y);
7897
7897
  o <= i && (i = o, r = a);
7898
7898
  }
7899
7899
  return r;
@@ -7904,8 +7904,8 @@ var Wr = 6, Gr = class {
7904
7904
  }
7905
7905
  drag(e, t) {
7906
7906
  if (!this.draft || !this.dragging) return !1;
7907
- let n = j(e.y, t);
7908
- return this.draft = Kr(this.draft, this.dragging, n), !0;
7907
+ let n = M(e.y, t);
7908
+ return this.draft = qr(this.draft, this.dragging, n), !0;
7909
7909
  }
7910
7910
  endDrag() {
7911
7911
  this.dragging = null;
@@ -7920,22 +7920,22 @@ var Wr = 6, Gr = class {
7920
7920
  render(e, t, n, r = 2) {
7921
7921
  let i = this.draft;
7922
7922
  if (!i) return;
7923
- let { chartRect: a } = t, o = a.x, s = a.x + a.width, c = k(i.entry, t), l = k(i.stopLoss, t), u = k(i.takeProfit, t), d = n.candleUp, f = n.candleDown;
7924
- e.save(), e.globalAlpha = .12, e.fillStyle = d, e.fillRect(o, Math.min(c, u), a.width, Math.abs(u - c)), e.fillStyle = f, e.fillRect(o, Math.min(c, l), a.width, Math.abs(l - c)), e.globalAlpha = 1, qr(e, o, s, c, n.text, [6, 3]), qr(e, o, s, u, d, []), qr(e, o, s, l, f, []);
7925
- let p = Ur(i), m = i.side === "buy" ? "LONG" : "SHORT";
7926
- Jr(e, o + 6, c, `${m} entry ${i.entry.toFixed(r)}`, n.text, n.background), Jr(e, o + 6, u, `TP ${i.takeProfit.toFixed(r)} · ${p.toFixed(2)}R`, d, n.background), Jr(e, o + 6, l, `SL ${i.stopLoss.toFixed(r)}`, f, n.background);
7923
+ let { chartRect: a } = t, o = a.x, s = a.x + a.width, c = A(i.entry, t), l = A(i.stopLoss, t), u = A(i.takeProfit, t), d = n.candleUp, f = n.candleDown;
7924
+ e.save(), e.globalAlpha = .12, e.fillStyle = d, e.fillRect(o, Math.min(c, u), a.width, Math.abs(u - c)), e.fillStyle = f, e.fillRect(o, Math.min(c, l), a.width, Math.abs(l - c)), e.globalAlpha = 1, Jr(e, o, s, c, n.text, [6, 3]), Jr(e, o, s, u, d, []), Jr(e, o, s, l, f, []);
7925
+ let p = Wr(i), m = i.side === "buy" ? "LONG" : "SHORT";
7926
+ Yr(e, o + 6, c, `${m} entry ${i.entry.toFixed(r)}`, n.text, n.background), Yr(e, o + 6, u, `TP ${i.takeProfit.toFixed(r)} · ${p.toFixed(2)}R`, d, n.background), Yr(e, o + 6, l, `SL ${i.stopLoss.toFixed(r)}`, f, n.background);
7927
7927
  for (let [r, a] of [
7928
7928
  [i.entry, n.text],
7929
7929
  [i.takeProfit, d],
7930
7930
  [i.stopLoss, f]
7931
7931
  ]) {
7932
- let n = k(r, t);
7932
+ let n = A(r, t);
7933
7933
  e.fillStyle = a, e.beginPath(), e.arc(s - 6, n, 3.5, 0, Math.PI * 2), e.fill();
7934
7934
  }
7935
7935
  e.restore();
7936
7936
  }
7937
7937
  };
7938
- function Kr(e, t, n) {
7938
+ function qr(e, t, n) {
7939
7939
  let r = e.side === "buy";
7940
7940
  if (t === "entry") {
7941
7941
  let t = n - e.entry;
@@ -7959,20 +7959,20 @@ function Kr(e, t, n) {
7959
7959
  takeProfit: i
7960
7960
  };
7961
7961
  }
7962
- function qr(e, t, n, r, i, a) {
7962
+ function Jr(e, t, n, r, i, a) {
7963
7963
  e.strokeStyle = i, e.lineWidth = 1, e.setLineDash(a), e.beginPath(), e.moveTo(t, Math.round(r) + .5), e.lineTo(n, Math.round(r) + .5), e.stroke(), e.setLineDash([]);
7964
7964
  }
7965
- function Jr(e, t, n, r, i, a) {
7965
+ function Yr(e, t, n, r, i, a) {
7966
7966
  e.font = "600 10px system-ui, sans-serif", e.textBaseline = "middle", e.textAlign = "left";
7967
7967
  let o = e.measureText(r).width;
7968
7968
  e.globalAlpha = .85, e.fillStyle = a, e.fillRect(t - 3, n - 8, o + 6, 16), e.globalAlpha = 1, e.fillStyle = i, e.fillText(r, t, n + .5);
7969
7969
  }
7970
7970
  //#endregion
7971
7971
  //#region src/trading/OrderDraftTool.ts
7972
- function Yr(e, t, n) {
7972
+ function Xr(e, t, n) {
7973
7973
  return n == null ? "limit" : e === "buy" ? t <= n ? "limit" : "stop" : t >= n ? "limit" : "stop";
7974
7974
  }
7975
- var Xr = 6, Zr = class {
7975
+ var Zr = 6, Qr = class {
7976
7976
  draft = null;
7977
7977
  dragging = !1;
7978
7978
  start(e, t, n = 1) {
@@ -8003,19 +8003,19 @@ var Xr = 6, Zr = class {
8003
8003
  toIntent(e) {
8004
8004
  return this.draft ? {
8005
8005
  side: this.draft.side,
8006
- type: Yr(this.draft.side, this.draft.price, e),
8006
+ type: Xr(this.draft.side, this.draft.price, e),
8007
8007
  price: this.draft.price,
8008
8008
  quantity: this.draft.quantity
8009
8009
  } : null;
8010
8010
  }
8011
8011
  hitTest(e, t) {
8012
- return this.draft ? Math.abs(k(this.draft.price, t) - e.y) <= Xr : !1;
8012
+ return this.draft ? Math.abs(A(this.draft.price, t) - e.y) <= Zr : !1;
8013
8013
  }
8014
8014
  beginDrag(e, t) {
8015
8015
  return this.hitTest(e, t) ? (this.dragging = !0, !0) : !1;
8016
8016
  }
8017
8017
  drag(e, t) {
8018
- return !this.draft || !this.dragging ? !1 : this.setPrice(j(e.y, t));
8018
+ return !this.draft || !this.dragging ? !1 : this.setPrice(M(e.y, t));
8019
8019
  }
8020
8020
  endDrag() {
8021
8021
  this.dragging = !1;
@@ -8023,35 +8023,35 @@ var Xr = 6, Zr = class {
8023
8023
  render(e, t, n, r, i = 2) {
8024
8024
  let a = this.draft;
8025
8025
  if (!a) return;
8026
- let { chartRect: o } = t, s = o.x, c = o.x + o.width, l = k(a.price, t), u = Yr(a.side, a.price, r), d = a.side === "buy" ? n.candleUp : n.candleDown;
8027
- e.save(), Qr(e, s, c, l, d, [6, 3]);
8026
+ let { chartRect: o } = t, s = o.x, c = o.x + o.width, l = A(a.price, t), u = Xr(a.side, a.price, r), d = a.side === "buy" ? n.candleUp : n.candleDown;
8027
+ e.save(), $r(e, s, c, l, d, [6, 3]);
8028
8028
  let f = a.side === "buy" ? "BUY" : "SELL";
8029
- $r(e, s + 6, l, `${f} ${u.toUpperCase()} ${a.price.toFixed(i)}`, d, n.background), e.fillStyle = d, e.beginPath(), e.arc(c - 6, l, 3.5, 0, Math.PI * 2), e.fill(), e.restore();
8029
+ ei(e, s + 6, l, `${f} ${u.toUpperCase()} ${a.price.toFixed(i)}`, d, n.background), e.fillStyle = d, e.beginPath(), e.arc(c - 6, l, 3.5, 0, Math.PI * 2), e.fill(), e.restore();
8030
8030
  }
8031
8031
  };
8032
- function Qr(e, t, n, r, i, a) {
8032
+ function $r(e, t, n, r, i, a) {
8033
8033
  e.strokeStyle = i, e.lineWidth = 1, e.setLineDash(a), e.beginPath(), e.moveTo(t, Math.round(r) + .5), e.lineTo(n, Math.round(r) + .5), e.stroke(), e.setLineDash([]);
8034
8034
  }
8035
- function $r(e, t, n, r, i, a) {
8035
+ function ei(e, t, n, r, i, a) {
8036
8036
  e.font = "600 10px system-ui, sans-serif", e.textBaseline = "middle", e.textAlign = "left";
8037
8037
  let o = e.measureText(r).width;
8038
8038
  e.globalAlpha = .85, e.fillStyle = a, e.fillRect(t - 3, n - 8, o + 6, 16), e.globalAlpha = 1, e.fillStyle = i, e.fillText(r, t, n + .5);
8039
8039
  }
8040
8040
  //#endregion
8041
8041
  //#region src/trading/TradingManager.ts
8042
- var ei = class {
8042
+ var ti = class {
8043
8043
  orders = [];
8044
8044
  positions = [];
8045
8045
  depthData = null;
8046
8046
  currentPrice = null;
8047
8047
  config;
8048
- orderRenderer = new Mr();
8049
- positionRenderer = new Rr();
8050
- depthOverlay = new zr();
8048
+ orderRenderer = new Nr();
8049
+ positionRenderer = new zr();
8050
+ depthOverlay = new Br();
8051
8051
  dragHandler;
8052
- contextMenu = new Vr();
8053
- bracket = new Gr();
8054
- orderDraft = new Zr();
8052
+ contextMenu = new Hr();
8053
+ bracket = new Kr();
8054
+ orderDraft = new Qr();
8055
8055
  requestRender = null;
8056
8056
  eventCallback = null;
8057
8057
  container = null;
@@ -8059,7 +8059,7 @@ var ei = class {
8059
8059
  this.config = {
8060
8060
  ...s,
8061
8061
  ...e
8062
- }, this.dragHandler = new Br(this.config.dragThreshold), this.contextMenu.onItemSelect = (e) => {
8062
+ }, this.dragHandler = new Vr(this.config.dragThreshold), this.contextMenu.onItemSelect = (e) => {
8063
8063
  this.eventCallback?.("orderPlace", e);
8064
8064
  };
8065
8065
  }
@@ -8100,7 +8100,7 @@ var ei = class {
8100
8100
  entry: e.entry,
8101
8101
  stopLoss: e.stopLoss,
8102
8102
  takeProfit: e.takeProfit,
8103
- riskReward: Ur(e)
8103
+ riskReward: Wr(e)
8104
8104
  }), this.bracket.cancel(), this.requestRender?.(), !0) : !1;
8105
8105
  }
8106
8106
  isBracketActive() {
@@ -8150,7 +8150,7 @@ var ei = class {
8150
8150
  }
8151
8151
  onContextMenu(e, t) {
8152
8152
  if (!this.config.enabled || !this.config.contextMenu?.enabled || !this.container) return !1;
8153
- let n = j(e.y, t);
8153
+ let n = M(e.y, t);
8154
8154
  return this.contextMenu.show(e, n, this.container, this.config), !0;
8155
8155
  }
8156
8156
  render(e, t, n) {
@@ -8162,7 +8162,7 @@ var ei = class {
8162
8162
  destroy() {
8163
8163
  this.contextMenu.destroy();
8164
8164
  }
8165
- }, ti = class {
8165
+ }, ni = class {
8166
8166
  constructor(e) {
8167
8167
  this.manager = e;
8168
8168
  }
@@ -8172,7 +8172,7 @@ var ei = class {
8172
8172
  renderAxisBadges(e, t, n) {
8173
8173
  this.manager.renderAxisBadges(e, t, n);
8174
8174
  }
8175
- }, ni = class {
8175
+ }, ri = class {
8176
8176
  name = "paper";
8177
8177
  state = "disconnected";
8178
8178
  listeners = /* @__PURE__ */ new Map();
@@ -8209,7 +8209,7 @@ var ei = class {
8209
8209
  price: e.price,
8210
8210
  stopPrice: e.stopPrice,
8211
8211
  quantity: e.quantity ?? 1,
8212
- label: e.type === "market" ? void 0 : ri(e.type),
8212
+ label: e.type === "market" ? void 0 : ii(e.type),
8213
8213
  draggable: !0
8214
8214
  };
8215
8215
  return e.type === "market" ? this.fill(t, this.markPrice || e.price) : (this.orders = [...this.orders, t], this.emit("orders", this.orders)), t;
@@ -8300,7 +8300,7 @@ var ei = class {
8300
8300
  }
8301
8301
  }
8302
8302
  };
8303
- function ri(e) {
8303
+ function ii(e) {
8304
8304
  switch (e) {
8305
8305
  case "stop": return "STOP";
8306
8306
  case "stopLimit": return "STOP LIMIT";
@@ -8331,7 +8331,7 @@ var G = class {
8331
8331
  removeAllListeners() {
8332
8332
  this.listeners.clear();
8333
8333
  }
8334
- }, ii = class extends G {
8334
+ }, ai = class extends G {
8335
8335
  currentBar = null;
8336
8336
  timeframeMs;
8337
8337
  tickRing;
@@ -8339,10 +8339,10 @@ var G = class {
8339
8339
  ringCount = 0;
8340
8340
  ringCapacity;
8341
8341
  constructor(e, t = 1e3) {
8342
- super(), this.timeframeMs = x(e), this.ringCapacity = t, this.tickRing = Array(t);
8342
+ super(), this.timeframeMs = S(e), this.ringCapacity = t, this.tickRing = Array(t);
8343
8343
  }
8344
8344
  setTimeframe(e) {
8345
- this.timeframeMs = x(e), this.currentBar = null, this.ringHead = 0, this.ringCount = 0;
8345
+ this.timeframeMs = S(e), this.currentBar = null, this.ringHead = 0, this.ringCount = 0;
8346
8346
  }
8347
8347
  processTick(e) {
8348
8348
  let t = (this.ringHead + this.ringCount) % this.ringCapacity;
@@ -8393,7 +8393,7 @@ var G = class {
8393
8393
  alignToTimeframe(e) {
8394
8394
  return Math.floor(e / this.timeframeMs) * this.timeframeMs;
8395
8395
  }
8396
- }, ai = class extends G {
8396
+ }, oi = class extends G {
8397
8397
  config;
8398
8398
  attempt = 0;
8399
8399
  timer = null;
@@ -8440,7 +8440,7 @@ var G = class {
8440
8440
  let e = this.config.baseDelay, t = this.config.backoffMultiplier ** (this.attempt - 1), n = Math.min(e * t, this.config.maxDelay), r = n * .25 * (Math.random() * 2 - 1);
8441
8441
  return Math.max(0, Math.round(n + r));
8442
8442
  }
8443
- }, oi = class {
8443
+ }, si = class {
8444
8444
  price = null;
8445
8445
  previousClose = null;
8446
8446
  visible = !0;
@@ -8460,7 +8460,7 @@ var G = class {
8460
8460
  }
8461
8461
  render(e, t, n) {
8462
8462
  if (!this.visible || this.price === null) return;
8463
- let r = k(this.price, t), { chartRect: i } = t;
8463
+ let r = A(this.price, t), { chartRect: i } = t;
8464
8464
  if (r < i.y || r > i.y + i.height) return;
8465
8465
  let a = this.previousClose === null || this.price >= this.previousClose ? n.candleUp ?? "#26A69A" : n.candleDown ?? "#EF5350", o = Date.now() < this.flashUntil;
8466
8466
  e.setLineDash([4, 3]), e.strokeStyle = a, e.lineWidth = 1, e.globalAlpha = o ? 1 : .7, e.beginPath(), e.moveTo(i.x, Math.round(r) + .5), e.lineTo(i.x + i.width, Math.round(r) + .5), e.stroke(), e.setLineDash([]), e.globalAlpha = 1;
@@ -8471,12 +8471,12 @@ var G = class {
8471
8471
  let f = s - 5;
8472
8472
  e.beginPath(), e.moveTo(f, r), e.lineTo(f + 5, r - 5), e.lineTo(f + 5, r + 5), e.closePath(), e.fill(), e.fillStyle = "#FFFFFF", e.textBaseline = "middle", e.textAlign = "left", e.fillText(c, s + 5, r);
8473
8473
  }
8474
- }, si = class extends G {
8474
+ }, ci = class extends G {
8475
8475
  config = null;
8476
8476
  adapter = null;
8477
8477
  aggregator = null;
8478
8478
  reconnector;
8479
- priceLine = new oi();
8479
+ priceLine = new si();
8480
8480
  state = "disconnected";
8481
8481
  lastPrice = null;
8482
8482
  previousClose = null;
@@ -8484,13 +8484,13 @@ var G = class {
8484
8484
  heartbeatTimer = null;
8485
8485
  lastMessageTime = 0;
8486
8486
  constructor() {
8487
- super(), this.reconnector = new ai(), this.wireReconnector();
8487
+ super(), this.reconnector = new oi(), this.wireReconnector();
8488
8488
  }
8489
8489
  async connect(e) {
8490
8490
  this.disconnect(), this.config = {
8491
8491
  ...a,
8492
8492
  ...e
8493
- }, this.adapter = e.adapter, this.aggregator = new ii(e.timeframe), this.reconnector.removeAllListeners(), this.reconnector.stop(), this.reconnector = new ai(e.reconnect ?? r), this.wireReconnector(), this.aggregator.on("bar", (e) => {
8493
+ }, this.adapter = e.adapter, this.aggregator = new ai(e.timeframe), this.reconnector.removeAllListeners(), this.reconnector.stop(), this.reconnector = new oi(e.reconnect ?? r), this.wireReconnector(), this.aggregator.on("bar", (e) => {
8494
8494
  this.emit("barUpdate", e), this.updatePrice(e.close);
8495
8495
  }), this.aggregator.on("barClose", (e) => {
8496
8496
  this.previousClose = e.close, this.emit("barClose", e);
@@ -8600,7 +8600,7 @@ var G = class {
8600
8600
  dispose() {
8601
8601
  this.disconnect(), this.removeAllListeners();
8602
8602
  }
8603
- }, ci = class extends G {
8603
+ }, li = class extends G {
8604
8604
  data;
8605
8605
  speed;
8606
8606
  index;
@@ -8687,7 +8687,7 @@ var G = class {
8687
8687
  };
8688
8688
  //#endregion
8689
8689
  //#region src/realtime/adapters/binanceTypes.ts
8690
- function li(e) {
8690
+ function ui(e) {
8691
8691
  if (!Array.isArray(e) || e.length < 6) return null;
8692
8692
  let t = e[0];
8693
8693
  if (typeof t != "number" || !Number.isFinite(t)) return null;
@@ -8701,8 +8701,8 @@ function li(e) {
8701
8701
  volume: o
8702
8702
  };
8703
8703
  }
8704
- function ui(e) {
8705
- if (!di(e)) return null;
8704
+ function di(e) {
8705
+ if (!fi(e)) return null;
8706
8706
  let t = e.t;
8707
8707
  if (typeof t != "number" || !Number.isFinite(t)) return null;
8708
8708
  let n = K(e.o), r = K(e.h), i = K(e.l), a = K(e.c), o = K(e.v);
@@ -8728,12 +8728,12 @@ function K(e) {
8728
8728
  }
8729
8729
  return null;
8730
8730
  }
8731
- function di(e) {
8731
+ function fi(e) {
8732
8732
  return typeof e == "object" && !!e;
8733
8733
  }
8734
8734
  //#endregion
8735
8735
  //#region src/realtime/adapters/BinanceAdapter.ts
8736
- var fi = {
8736
+ var pi = {
8737
8737
  "1s": "1s",
8738
8738
  "1m": "1m",
8739
8739
  "3m": "3m",
@@ -8750,7 +8750,7 @@ var fi = {
8750
8750
  "3d": "3d",
8751
8751
  "1w": "1w",
8752
8752
  "1M": "1M"
8753
- }, pi = class {
8753
+ }, mi = class {
8754
8754
  name = "binance";
8755
8755
  ws = null;
8756
8756
  state = "disconnected";
@@ -8771,13 +8771,13 @@ var fi = {
8771
8771
  return this.state;
8772
8772
  }
8773
8773
  async fetchHistory(e, t, n = 500) {
8774
- let r = fi[t] ?? "15m", i = `${this.restBase}/klines?symbol=${e}&interval=${r}&limit=${n}`, a = await fetch(i);
8774
+ let r = pi[t] ?? "15m", i = `${this.restBase}/klines?symbol=${e}&interval=${r}&limit=${n}`, a = await fetch(i);
8775
8775
  if (!a.ok) throw Error(`Binance REST error: ${a.status}`);
8776
8776
  let o = await a.json();
8777
8777
  if (!Array.isArray(o)) return [];
8778
8778
  let s = [];
8779
8779
  for (let e of o) {
8780
- let t = li(e);
8780
+ let t = ui(e);
8781
8781
  t && s.push(t);
8782
8782
  }
8783
8783
  return s;
@@ -8794,7 +8794,7 @@ var fi = {
8794
8794
  }
8795
8795
  connectWs() {
8796
8796
  if (!this.config) return;
8797
- let e = `${this.config.symbol.toLowerCase()}@kline_${fi[this.config.timeframe] ?? "15m"}`, t = `${this.wsBase}/${e}`;
8797
+ let e = `${this.config.symbol.toLowerCase()}@kline_${pi[this.config.timeframe] ?? "15m"}`, t = `${this.wsBase}/${e}`;
8798
8798
  this.setState("connecting");
8799
8799
  try {
8800
8800
  this.ws = new WebSocket(t);
@@ -8819,7 +8819,7 @@ var fi = {
8819
8819
  };
8820
8820
  }
8821
8821
  handleKline(e) {
8822
- let t = ui(e);
8822
+ let t = di(e);
8823
8823
  if (!t) return;
8824
8824
  let { bar: n, closed: r } = t;
8825
8825
  this.emitEvent("bar", {
@@ -8845,7 +8845,7 @@ var fi = {
8845
8845
  for (let e of n) e(r);
8846
8846
  }
8847
8847
  }
8848
- }, mi = class {
8848
+ }, hi = class {
8849
8849
  name = "mock";
8850
8850
  state = "disconnected";
8851
8851
  listeners = /* @__PURE__ */ new Map();
@@ -8885,7 +8885,7 @@ var fi = {
8885
8885
  this.disconnect(), this.listeners.clear();
8886
8886
  }
8887
8887
  generateHistory(e, t) {
8888
- let n = [], r = Date.now(), i = x(e), a = this.options.basePrice, o = this.options.volatility / 100;
8888
+ let n = [], r = Date.now(), i = S(e), a = this.options.basePrice, o = this.options.volatility / 100;
8889
8889
  for (let e = t - 1; e >= 0; e--) {
8890
8890
  let t = r - e * i, s = (Math.random() - .48) * a * o, c = a;
8891
8891
  a += s;
@@ -8908,7 +8908,7 @@ var fi = {
8908
8908
  if (this.state !== "connected" || !this.config) return;
8909
8909
  let e = this.options.volatility / 100, t = (Math.random() - .48) * this.currentPrice * e * .3;
8910
8910
  this.currentPrice += t;
8911
- let n = Date.now(), r = x(this.config.timeframe), i = {
8911
+ let n = Date.now(), r = S(this.config.timeframe), i = {
8912
8912
  time: Math.floor(n / r) * r,
8913
8913
  open: this.currentPrice - t,
8914
8914
  high: Math.max(this.currentPrice, this.currentPrice - t) + Math.abs(t) * .2,
@@ -8940,7 +8940,7 @@ var fi = {
8940
8940
  for (let e of n) e(r);
8941
8941
  }
8942
8942
  }
8943
- }, hi = class {
8943
+ }, gi = class {
8944
8944
  name;
8945
8945
  ws = null;
8946
8946
  state = "disconnected";
@@ -9054,7 +9054,7 @@ var fi = {
9054
9054
  for (let e of n) e(r);
9055
9055
  }
9056
9056
  }
9057
- }, gi = class {
9057
+ }, _i = class {
9058
9058
  name;
9059
9059
  state = "disconnected";
9060
9060
  listeners = /* @__PURE__ */ new Map();
@@ -9155,7 +9155,7 @@ function J(e) {
9155
9155
  }
9156
9156
  //#endregion
9157
9157
  //#region src/realtime/adapters/CoinbaseAdapter.ts
9158
- var _i = {
9158
+ var vi = {
9159
9159
  "1m": 60,
9160
9160
  "5m": 300,
9161
9161
  "15m": 900,
@@ -9163,35 +9163,35 @@ var _i = {
9163
9163
  "6h": 21600,
9164
9164
  "1d": 86400
9165
9165
  };
9166
- function vi(e) {
9167
- return _i[e] ?? 3600;
9166
+ function yi(e) {
9167
+ return vi[e] ?? 3600;
9168
9168
  }
9169
- var yi = class extends gi {
9169
+ var bi = class extends _i {
9170
9170
  constructor(e = {}) {
9171
9171
  let t = e.restBase ?? "https://api.exchange.coinbase.com";
9172
9172
  super({
9173
9173
  name: "coinbase",
9174
9174
  intervalMs: e.intervalMs ?? 5e3,
9175
9175
  pollLimit: 2,
9176
- fetchBars: (e, n) => bi(t, e, n)
9176
+ fetchBars: (e, n) => xi(t, e, n)
9177
9177
  });
9178
9178
  }
9179
9179
  };
9180
- async function bi(e, t, n) {
9181
- let r = `${e}/products/${t}/candles?granularity=${vi(n)}`, i = await fetch(r);
9180
+ async function xi(e, t, n) {
9181
+ let r = `${e}/products/${t}/candles?granularity=${yi(n)}`, i = await fetch(r);
9182
9182
  if (!i.ok) throw Error(`Coinbase REST error: ${i.status}`);
9183
- return xi(await i.json());
9183
+ return Si(await i.json());
9184
9184
  }
9185
- function xi(e) {
9185
+ function Si(e) {
9186
9186
  if (!Array.isArray(e)) return [];
9187
9187
  let t = [];
9188
9188
  for (let n of e) {
9189
- let e = Si(n);
9189
+ let e = Ci(n);
9190
9190
  e && t.push(e);
9191
9191
  }
9192
9192
  return t.sort((e, t) => e.time - t.time), t;
9193
9193
  }
9194
- function Si(e) {
9194
+ function Ci(e) {
9195
9195
  if (!Array.isArray(e) || e.length < 6) return null;
9196
9196
  let t = q(e[0]), n = q(e[1]), r = q(e[2]), i = q(e[3]), a = q(e[4]), o = q(e[5]);
9197
9197
  return t === null || n === null || r === null || i === null || a === null || o === null ? null : {
@@ -9205,7 +9205,7 @@ function Si(e) {
9205
9205
  }
9206
9206
  //#endregion
9207
9207
  //#region src/realtime/adapters/BybitAdapter.ts
9208
- var Ci = {
9208
+ var wi = {
9209
9209
  "1m": "1",
9210
9210
  "3m": "3",
9211
9211
  "5m": "5",
@@ -9220,10 +9220,10 @@ var Ci = {
9220
9220
  "1w": "W",
9221
9221
  "1M": "M"
9222
9222
  };
9223
- function wi(e) {
9224
- return Ci[e] ?? "1";
9223
+ function Ti(e) {
9224
+ return wi[e] ?? "1";
9225
9225
  }
9226
- var Ti = class extends hi {
9226
+ var Ei = class extends gi {
9227
9227
  constructor(e = {}) {
9228
9228
  let t = e.restBase ?? "https://api.bybit.com", n = e.wsBase ?? "wss://stream.bybit.com/v5/public/spot", r = e.category ?? "spot";
9229
9229
  super({
@@ -9231,18 +9231,18 @@ var Ti = class extends hi {
9231
9231
  wsUrl: () => n,
9232
9232
  subscribeMessage: (e) => ({
9233
9233
  op: "subscribe",
9234
- args: [`kline.${wi(e.timeframe)}.${e.symbol}`]
9234
+ args: [`kline.${Ti(e.timeframe)}.${e.symbol}`]
9235
9235
  }),
9236
9236
  unsubscribeMessage: (e) => ({
9237
9237
  op: "unsubscribe",
9238
- args: [`kline.${wi(e.timeframe)}.${e.symbol}`]
9238
+ args: [`kline.${Ti(e.timeframe)}.${e.symbol}`]
9239
9239
  }),
9240
- parseMessage: Ei,
9241
- fetchHistory: (e, n, i) => Di(t, r, e, n, i)
9240
+ parseMessage: Di,
9241
+ fetchHistory: (e, n, i) => Oi(t, r, e, n, i)
9242
9242
  });
9243
9243
  }
9244
9244
  };
9245
- function Ei(e) {
9245
+ function Di(e) {
9246
9246
  if (!J(e) || typeof e.topic != "string" || !e.topic.startsWith("kline.")) return null;
9247
9247
  let t = e.data;
9248
9248
  if (!Array.isArray(t) || t.length === 0) return null;
@@ -9263,23 +9263,23 @@ function Ei(e) {
9263
9263
  closed: l
9264
9264
  };
9265
9265
  }
9266
- async function Di(e, t, n, r, i) {
9267
- let a = `${e}/v5/market/kline?category=${t}&symbol=${n}&interval=${wi(r)}&limit=${Math.min(Math.max(i, 1), 1e3)}`, o = await fetch(a);
9266
+ async function Oi(e, t, n, r, i) {
9267
+ let a = `${e}/v5/market/kline?category=${t}&symbol=${n}&interval=${Ti(r)}&limit=${Math.min(Math.max(i, 1), 1e3)}`, o = await fetch(a);
9268
9268
  if (!o.ok) throw Error(`Bybit REST error: ${o.status}`);
9269
- return Oi(await o.json());
9269
+ return ki(await o.json());
9270
9270
  }
9271
- function Oi(e) {
9271
+ function ki(e) {
9272
9272
  if (!J(e) || !J(e.result)) return [];
9273
9273
  let t = e.result.list;
9274
9274
  if (!Array.isArray(t)) return [];
9275
9275
  let n = [];
9276
9276
  for (let e of t) {
9277
- let t = ki(e);
9277
+ let t = Ai(e);
9278
9278
  t && n.push(t);
9279
9279
  }
9280
9280
  return n.sort((e, t) => e.time - t.time), n;
9281
9281
  }
9282
- function ki(e) {
9282
+ function Ai(e) {
9283
9283
  if (!Array.isArray(e) || e.length < 6) return null;
9284
9284
  let t = q(e[0]), n = q(e[1]), r = q(e[2]), i = q(e[3]), a = q(e[4]), o = q(e[5]);
9285
9285
  return t === null || n === null || r === null || i === null || a === null || o === null ? null : {
@@ -9293,7 +9293,7 @@ function ki(e) {
9293
9293
  }
9294
9294
  //#endregion
9295
9295
  //#region src/realtime/adapters/KrakenAdapter.ts
9296
- var Ai = {
9296
+ var ji = {
9297
9297
  "1m": 1,
9298
9298
  "5m": 5,
9299
9299
  "15m": 15,
@@ -9303,10 +9303,10 @@ var Ai = {
9303
9303
  "1d": 1440,
9304
9304
  "1w": 10080
9305
9305
  };
9306
- function ji(e) {
9307
- return Ai[e] ?? 1;
9306
+ function Mi(e) {
9307
+ return ji[e] ?? 1;
9308
9308
  }
9309
- var Mi = class extends hi {
9309
+ var Ni = class extends gi {
9310
9310
  constructor(e = {}) {
9311
9311
  let t = e.restBase ?? "https://api.kraken.com", n = e.wsBase ?? "wss://ws.kraken.com/v2";
9312
9312
  super({
@@ -9317,7 +9317,7 @@ var Mi = class extends hi {
9317
9317
  params: {
9318
9318
  channel: "ohlc",
9319
9319
  symbol: [e.symbol],
9320
- interval: ji(e.timeframe)
9320
+ interval: Mi(e.timeframe)
9321
9321
  }
9322
9322
  }),
9323
9323
  unsubscribeMessage: (e) => ({
@@ -9325,15 +9325,15 @@ var Mi = class extends hi {
9325
9325
  params: {
9326
9326
  channel: "ohlc",
9327
9327
  symbol: [e.symbol],
9328
- interval: ji(e.timeframe)
9328
+ interval: Mi(e.timeframe)
9329
9329
  }
9330
9330
  }),
9331
- parseMessage: Ni,
9332
- fetchHistory: (e, n) => Pi(t, e, n)
9331
+ parseMessage: Pi,
9332
+ fetchHistory: (e, n) => Fi(t, e, n)
9333
9333
  });
9334
9334
  }
9335
9335
  };
9336
- function Ni(e) {
9336
+ function Pi(e) {
9337
9337
  if (!J(e) || e.channel !== "ohlc") return null;
9338
9338
  let t = e.data;
9339
9339
  if (!Array.isArray(t) || t.length === 0) return null;
@@ -9352,12 +9352,12 @@ function Ni(e) {
9352
9352
  closed: !1
9353
9353
  };
9354
9354
  }
9355
- async function Pi(e, t, n) {
9356
- let r = ji(n), i = t.replace("/", ""), a = `${e}/0/public/OHLC?pair=${encodeURIComponent(i)}&interval=${r}`, o = await fetch(a);
9355
+ async function Fi(e, t, n) {
9356
+ let r = Mi(n), i = t.replace("/", ""), a = `${e}/0/public/OHLC?pair=${encodeURIComponent(i)}&interval=${r}`, o = await fetch(a);
9357
9357
  if (!o.ok) throw Error(`Kraken REST error: ${o.status}`);
9358
- return Fi(await o.json());
9358
+ return Ii(await o.json());
9359
9359
  }
9360
- function Fi(e) {
9360
+ function Ii(e) {
9361
9361
  if (!J(e) || !J(e.result)) return [];
9362
9362
  let t = null;
9363
9363
  for (let [n, r] of Object.entries(e.result)) if (n !== "last" && Array.isArray(r)) {
@@ -9367,12 +9367,12 @@ function Fi(e) {
9367
9367
  if (!Array.isArray(t)) return [];
9368
9368
  let n = [];
9369
9369
  for (let e of t) {
9370
- let t = Ii(e);
9370
+ let t = Li(e);
9371
9371
  t && n.push(t);
9372
9372
  }
9373
9373
  return n.sort((e, t) => e.time - t.time), n;
9374
9374
  }
9375
- function Ii(e) {
9375
+ function Li(e) {
9376
9376
  if (!Array.isArray(e) || e.length < 7) return null;
9377
9377
  let t = q(e[0]), n = q(e[1]), r = q(e[2]), i = q(e[3]), a = q(e[4]), o = q(e[6]);
9378
9378
  return t === null || n === null || r === null || i === null || a === null || o === null ? null : {
@@ -9386,7 +9386,7 @@ function Ii(e) {
9386
9386
  }
9387
9387
  //#endregion
9388
9388
  //#region src/ui/ChartLegend.ts
9389
- var Li = {
9389
+ var Ri = {
9390
9390
  visible: !0,
9391
9391
  showSymbol: !0,
9392
9392
  showOHLC: !0,
@@ -9394,8 +9394,8 @@ var Li = {
9394
9394
  showVolume: !0,
9395
9395
  position: "top-left",
9396
9396
  fontSize: 12
9397
- }, Ri = class {
9398
- config = { ...Li };
9397
+ }, zi = class {
9398
+ config = { ...Ri };
9399
9399
  symbol = "";
9400
9400
  timeframe = "";
9401
9401
  hoverBar = null;
@@ -9486,7 +9486,7 @@ var Li = {
9486
9486
  }
9487
9487
  }
9488
9488
  }
9489
- }, zi = class {
9489
+ }, Bi = class {
9490
9490
  static toDataURL(e, t) {
9491
9491
  let n = e.querySelectorAll("canvas");
9492
9492
  if (n.length === 0) return "";
@@ -9508,7 +9508,7 @@ var Li = {
9508
9508
  let i = document.createElement("a");
9509
9509
  i.href = r, i.download = t, document.body.appendChild(i), i.click(), document.body.removeChild(i);
9510
9510
  }
9511
- }, Bi = class {
9511
+ }, Vi = class {
9512
9512
  config = null;
9513
9513
  setConfig(e) {
9514
9514
  this.config = e;
@@ -9518,7 +9518,7 @@ var Li = {
9518
9518
  let { chartRect: r } = t, i = this.config.fontSize ?? 48, a = this.config.color ?? n.textSecondary;
9519
9519
  e.save(), e.globalAlpha = .07, e.font = `bold ${i}px ${n.font.family}`, e.fillStyle = a, e.textAlign = "center", e.textBaseline = "middle", e.fillText(this.config.text, r.x + r.width / 2, r.y + r.height / 2), e.restore();
9520
9520
  }
9521
- }, Vi = class {
9521
+ }, Hi = class {
9522
9522
  visible = !0;
9523
9523
  timeframeMs = 0;
9524
9524
  setVisible(e) {
@@ -9534,14 +9534,14 @@ var Li = {
9534
9534
  if (!this.visible || this.timeframeMs <= 0 || r.length === 0) return;
9535
9535
  let i = r[r.length - 1], a = (i.time > 0xe8d4a51000 ? i.time : i.time * 1e3) + this.timeframeMs - Date.now();
9536
9536
  if (a <= 0) return;
9537
- let o = this.formatRemaining(a), s = O(r.length - 1, t), c = t.chartRect.y + t.chartRect.height - 4;
9537
+ let o = this.formatRemaining(a), s = k(r.length - 1, t), c = t.chartRect.y + t.chartRect.height - 4;
9538
9538
  s < t.chartRect.x || s > t.chartRect.x + t.chartRect.width || (e.font = `${n.font.sizeSmall}px ${n.font.family}`, e.textBaseline = "bottom", e.textAlign = "center", e.fillStyle = n.textSecondary, e.fillText(o, s, c));
9539
9539
  }
9540
9540
  formatRemaining(e) {
9541
9541
  let t = Math.ceil(e / 1e3), n = Math.floor(t / 3600), r = Math.floor(t % 3600 / 60), i = t % 60;
9542
9542
  return n > 0 ? `${n}:${String(r).padStart(2, "0")}:${String(i).padStart(2, "0")}` : `${r}:${String(i).padStart(2, "0")}`;
9543
9543
  }
9544
- }, Hi = class {
9544
+ }, Ui = class {
9545
9545
  config = { visible: !1 };
9546
9546
  cachedBreaksTyped = [];
9547
9547
  lastDataLength = 0;
@@ -9588,21 +9588,21 @@ var Li = {
9588
9588
  render(e, t, n, r) {
9589
9589
  if (!this.config.visible || r.length < 2) return;
9590
9590
  let i = this.computeBreaksTyped(r);
9591
- if (i.length === 0 || Ki(r) >= 1380 * 60 * 1e3) return;
9591
+ if (i.length === 0 || qi(r) >= 1380 * 60 * 1e3) return;
9592
9592
  let { chartRect: a } = t, o = this.config.color ?? n.axisLine, s = this.config.lineWidth ?? 1, c = this.config.lineStyle ?? "dashed";
9593
9593
  e.save(), c === "dashed" ? e.setLineDash([6, 4]) : c === "dotted" && e.setLineDash([2, 3]), e.font = `600 11px ${n.font.family}`, e.textBaseline = "top", e.textAlign = "left";
9594
9594
  for (let r of i) {
9595
- let i = O(r.idx, t) - (t.barWidth + t.barSpacing) / 2;
9595
+ let i = k(r.idx, t) - (t.barWidth + t.barSpacing) / 2;
9596
9596
  if (i < a.x - 1 || i > a.x + a.width + 1) continue;
9597
9597
  let c = Math.round(i) + .5, l = .25, u = s, d = null;
9598
- r.kind === "day" ? l = .22 : r.kind === "week" ? (l = .34, d = Wi(r.date)) : r.kind === "month" ? (l = .5, u = s + .5, d = Gi(r.date)) : (l = .7, u = s + 1, d = String(r.date.getFullYear())), e.globalAlpha = l, e.strokeStyle = o, e.lineWidth = u, e.beginPath(), e.moveTo(c, a.y), e.lineTo(c, a.y + a.height), e.stroke(), d && (e.globalAlpha = Math.min(1, l + .35), e.fillStyle = n.textSecondary, e.fillText(d, c + 4, a.y + 4));
9598
+ r.kind === "day" ? l = .22 : r.kind === "week" ? (l = .34, d = Gi(r.date)) : r.kind === "month" ? (l = .5, u = s + .5, d = Ki(r.date)) : (l = .7, u = s + 1, d = String(r.date.getFullYear())), e.globalAlpha = l, e.strokeStyle = o, e.lineWidth = u, e.beginPath(), e.moveTo(c, a.y), e.lineTo(c, a.y + a.height), e.stroke(), d && (e.globalAlpha = Math.min(1, l + .35), e.fillStyle = n.textSecondary, e.fillText(d, c + 4, a.y + 4));
9599
9599
  }
9600
9600
  e.restore();
9601
9601
  }
9602
9602
  invalidateCache() {
9603
9603
  this.lastDataLength = 0, this.cachedBreaksTyped = [];
9604
9604
  }
9605
- }, Ui = [
9605
+ }, Wi = [
9606
9606
  "Jan",
9607
9607
  "Feb",
9608
9608
  "Mar",
@@ -9616,13 +9616,13 @@ var Li = {
9616
9616
  "Nov",
9617
9617
  "Dec"
9618
9618
  ];
9619
- function Wi(e) {
9620
- return `${Ui[e.getMonth()]} ${e.getDate()}`;
9621
- }
9622
9619
  function Gi(e) {
9623
- return `${Ui[e.getMonth()]} ${String(e.getFullYear()).slice(-2)}`;
9620
+ return `${Wi[e.getMonth()]} ${e.getDate()}`;
9624
9621
  }
9625
9622
  function Ki(e) {
9623
+ return `${Wi[e.getMonth()]} ${String(e.getFullYear()).slice(-2)}`;
9624
+ }
9625
+ function qi(e) {
9626
9626
  if (e.length < 2) return 0;
9627
9627
  let t = Math.min(50, e.length - 1), n = [];
9628
9628
  for (let r = 1; r <= t; r++) {
@@ -9633,24 +9633,24 @@ function Ki(e) {
9633
9633
  }
9634
9634
  //#endregion
9635
9635
  //#region src/ui/sessionHours.ts
9636
- var qi = 864e5;
9637
- function Ji(e, t) {
9638
- let n = ((e + t * 6e4) % qi + qi) % qi;
9636
+ var Ji = 864e5;
9637
+ function Yi(e, t) {
9638
+ let n = ((e + t * 6e4) % Ji + Ji) % Ji;
9639
9639
  return Math.floor(n / 6e4);
9640
9640
  }
9641
- function Yi(e, t) {
9642
- let n = Ji(e, t.tzOffsetMinutes), { startMinute: r, endMinute: i } = t;
9641
+ function Xi(e, t) {
9642
+ let n = Yi(e, t.tzOffsetMinutes), { startMinute: r, endMinute: i } = t;
9643
9643
  return r === i ? !0 : r < i ? n >= r && n < i : n >= r || n < i;
9644
9644
  }
9645
9645
  //#endregion
9646
9646
  //#region src/ui/SessionShading.ts
9647
- var Xi = {
9647
+ var Zi = {
9648
9648
  startMinute: 570,
9649
9649
  endMinute: 960,
9650
9650
  tzOffsetMinutes: -300
9651
- }, Zi = class {
9651
+ }, Qi = class {
9652
9652
  visible = !1;
9653
- config = { ...Xi };
9653
+ config = { ...Zi };
9654
9654
  setVisible(e) {
9655
9655
  this.visible = e;
9656
9656
  }
@@ -9673,16 +9673,16 @@ var Xi = {
9673
9673
  let l = n.barWidth + n.barSpacing, u = r.name === "light";
9674
9674
  e.save(), e.fillStyle = u ? "rgba(0,0,0,0.045)" : "rgba(0,0,0,0.28)";
9675
9675
  let d = -1, f = (t, r) => {
9676
- let a = O(t, n) - l / 2, o = O(r, n) + l / 2;
9676
+ let a = k(t, n) - l / 2, o = k(r, n) + l / 2;
9677
9677
  e.fillRect(a, i.y, o - a, i.height);
9678
9678
  };
9679
9679
  for (let e = s; e <= c; e++) {
9680
- let n = !Yi(t[e].time, this.config);
9680
+ let n = !Xi(t[e].time, this.config);
9681
9681
  n && d === -1 ? d = e : !n && d !== -1 && (f(d, e - 1), d = -1);
9682
9682
  }
9683
9683
  d !== -1 && f(d, c), e.restore();
9684
9684
  }
9685
- }, Qi = 1, $i = class extends G {
9685
+ }, $i = 1, ea = class extends G {
9686
9686
  alerts = [];
9687
9687
  lastValues = /* @__PURE__ */ new Map();
9688
9688
  requestRender = null;
@@ -9694,7 +9694,7 @@ var Xi = {
9694
9694
  this.pricePrecision = e;
9695
9695
  }
9696
9696
  addAlert(e, t = "crossing", n, r = !1, i = "price", a) {
9697
- let o = `tc_alert_${Qi++}`, s = {
9697
+ let o = `tc_alert_${$i++}`, s = {
9698
9698
  id: o,
9699
9699
  price: e,
9700
9700
  condition: t,
@@ -9718,7 +9718,7 @@ var Xi = {
9718
9718
  let i = null, a = n;
9719
9719
  for (let n of this.alerts) {
9720
9720
  if (n.channel !== "price") continue;
9721
- let r = Math.abs(k(n.price, t) - e.y);
9721
+ let r = Math.abs(A(n.price, t) - e.y);
9722
9722
  r <= a && (a = r, i = n);
9723
9723
  }
9724
9724
  return i;
@@ -9795,7 +9795,7 @@ var Xi = {
9795
9795
  let { chartRect: r } = t;
9796
9796
  for (let i of this.alerts) {
9797
9797
  if (i.channel !== "price") continue;
9798
- let a = k(i.price, t);
9798
+ let a = A(i.price, t);
9799
9799
  if (a < r.y || a > r.y + r.height) continue;
9800
9800
  let o = i.triggered ? "#FF9800" : "#FFD700";
9801
9801
  e.setLineDash([2, 6]), e.strokeStyle = o, e.lineWidth = 1, e.beginPath(), e.moveTo(r.x, Math.round(a) + .5), e.lineTo(r.x + r.width, Math.round(a) + .5), e.stroke(), e.setLineDash([]), e.font = `10px ${n.font.family}`, e.fillStyle = o, e.textBaseline = "bottom", e.textAlign = "right";
@@ -9803,7 +9803,7 @@ var Xi = {
9803
9803
  e.fillText(s, r.x + r.width - 4, a - 2);
9804
9804
  }
9805
9805
  }
9806
- }, ea = class extends G {
9806
+ }, ta = class extends G {
9807
9807
  data = [];
9808
9808
  currentIndex = 0;
9809
9809
  timer = null;
@@ -9872,13 +9872,13 @@ function X(e) {
9872
9872
  function Z(e) {
9873
9873
  return Array.isArray(e) ? e : [];
9874
9874
  }
9875
- function ta(e, t) {
9875
+ function na(e, t) {
9876
9876
  return typeof e == "string" ? e : t;
9877
9877
  }
9878
- function na(e, t) {
9878
+ function ra(e, t) {
9879
9879
  return typeof e == "number" && Number.isFinite(e) ? e : t;
9880
9880
  }
9881
- function ra(e) {
9881
+ function ia(e) {
9882
9882
  if (!X(e) || typeof e.id != "string" || typeof e.type != "string" || !Array.isArray(e.anchors) || e.anchors.length === 0 || !X(e.style)) return null;
9883
9883
  let t = [];
9884
9884
  for (let n of e.anchors) {
@@ -9899,14 +9899,14 @@ function ra(e) {
9899
9899
  meta: X(e.meta) ? e.meta : void 0
9900
9900
  };
9901
9901
  }
9902
- function ia(e) {
9902
+ function aa(e) {
9903
9903
  return !X(e) || typeof e.id != "string" || typeof e.side != "string" || typeof e.type != "string" || typeof e.price != "number" || typeof e.quantity != "number" ? null : e;
9904
9904
  }
9905
- function aa(e) {
9905
+ function oa(e) {
9906
9906
  return !X(e) || typeof e.id != "string" || typeof e.side != "string" || typeof e.entryPrice != "number" || typeof e.quantity != "number" ? null : e;
9907
9907
  }
9908
- function oa(e) {
9909
- if (!X(e)) return sa();
9908
+ function sa(e) {
9909
+ if (!X(e)) return ca();
9910
9910
  typeof e.version == "number" && e.version !== Y && console.warn(`Chart state version mismatch: ${e.version} vs ${Y}`);
9911
9911
  let t = X(e.viewport) ? e.viewport : {}, n = [];
9912
9912
  for (let t of Z(e.indicators)) X(t) && (typeof t.id != "string" || typeof t.instanceId != "string" || X(t.params) && n.push({
@@ -9917,31 +9917,31 @@ function oa(e) {
9917
9917
  }));
9918
9918
  let r = [];
9919
9919
  for (let t of Z(e.drawings)) {
9920
- let e = ra(t);
9920
+ let e = ia(t);
9921
9921
  e && r.push(e);
9922
9922
  }
9923
9923
  let i = [];
9924
9924
  for (let t of Z(e.orders)) {
9925
- let e = ia(t);
9925
+ let e = aa(t);
9926
9926
  e && i.push(e);
9927
9927
  }
9928
9928
  let a = [];
9929
9929
  for (let t of Z(e.positions)) {
9930
- let e = aa(t);
9930
+ let e = oa(t);
9931
9931
  e && a.push(e);
9932
9932
  }
9933
9933
  let o = [];
9934
9934
  for (let t of Z(e.alerts)) X(t) && typeof t.id == "string" && o.push(t);
9935
9935
  return {
9936
9936
  version: typeof e.version == "number" ? e.version : Y,
9937
- timestamp: na(e.timestamp, Date.now()),
9937
+ timestamp: ra(e.timestamp, Date.now()),
9938
9938
  symbol: typeof e.symbol == "string" ? e.symbol : void 0,
9939
9939
  timeframe: typeof e.timeframe == "string" ? e.timeframe : void 0,
9940
- chartType: ta(e.chartType, "candlestick"),
9940
+ chartType: na(e.chartType, "candlestick"),
9941
9941
  viewport: {
9942
- barWidth: na(t.barWidth, 8),
9943
- barSpacing: na(t.barSpacing, 2),
9944
- offset: na(t.offset, 0)
9942
+ barWidth: ra(t.barWidth, 8),
9943
+ barSpacing: ra(t.barSpacing, 2),
9944
+ offset: ra(t.offset, 0)
9945
9945
  },
9946
9946
  theme: typeof e.theme == "string" ? e.theme : void 0,
9947
9947
  locale: typeof e.locale == "string" ? e.locale : void 0,
@@ -9952,7 +9952,7 @@ function oa(e) {
9952
9952
  alerts: o
9953
9953
  };
9954
9954
  }
9955
- function sa() {
9955
+ function ca() {
9956
9956
  return {
9957
9957
  version: Y,
9958
9958
  timestamp: Date.now(),
@@ -9969,7 +9969,7 @@ function sa() {
9969
9969
  alerts: []
9970
9970
  };
9971
9971
  }
9972
- var ca = class {
9972
+ var la = class {
9973
9973
  static capture(e, t) {
9974
9974
  return {
9975
9975
  version: Y,
@@ -9994,7 +9994,7 @@ var ca = class {
9994
9994
  return JSON.stringify(e);
9995
9995
  }
9996
9996
  static deserialize(e) {
9997
- return oa(JSON.parse(e));
9997
+ return sa(JSON.parse(e));
9998
9998
  }
9999
9999
  static saveToStorage(e, t) {
10000
10000
  localStorage.setItem(e, this.serialize(t));
@@ -10021,7 +10021,7 @@ var ca = class {
10021
10021
  }, n.click();
10022
10022
  });
10023
10023
  }
10024
- }, la = class {
10024
+ }, ua = class {
10025
10025
  undoStack = [];
10026
10026
  redoStack = [];
10027
10027
  maxHistory = 50;
@@ -10057,7 +10057,7 @@ var ca = class {
10057
10057
  redoCount: this.redoStack.length
10058
10058
  };
10059
10059
  }
10060
- }, ua = class {
10060
+ }, da = class {
10061
10061
  static toCSV(e) {
10062
10062
  return ["Time,Open,High,Low,Close,Volume", ...e.map((e) => `${new Date(e.time).toISOString()},${e.open},${e.high},${e.low},${e.close},${e.volume}`)].join("\n");
10063
10063
  }
@@ -10075,7 +10075,7 @@ var ca = class {
10075
10075
  let r = new Blob([e], { type: n }), i = URL.createObjectURL(r), a = document.createElement("a");
10076
10076
  a.href = i, a.download = t, document.body.appendChild(a), a.click(), document.body.removeChild(a), URL.revokeObjectURL(i);
10077
10077
  }
10078
- }, da = 1, fa = class extends G {
10078
+ }, fa = 1, pa = class extends G {
10079
10079
  markers = [];
10080
10080
  style = { ...i };
10081
10081
  requestRender = null;
@@ -10096,7 +10096,7 @@ var ca = class {
10096
10096
  return { ...this.style };
10097
10097
  }
10098
10098
  addMarker(e) {
10099
- let t = e.id ?? `tc_signal_${da++}`, n = {
10099
+ let t = e.id ?? `tc_signal_${fa++}`, n = {
10100
10100
  ...e,
10101
10101
  id: t
10102
10102
  };
@@ -10120,9 +10120,9 @@ var ca = class {
10120
10120
  let { chartRect: i, visibleRange: a } = t, o = this.style, s = o.arrowSize ?? 12;
10121
10121
  e.save(), e.beginPath(), e.rect(i.x, i.y, i.width, i.height), e.clip();
10122
10122
  for (let c of this.markers) {
10123
- let l = M(c.time, r);
10123
+ let l = N(c.time, r);
10124
10124
  if (l < a.from - 1 || l > a.to + 1) continue;
10125
- let u = O(l, t), d = k(c.price, t);
10125
+ let u = k(l, t), d = A(c.price, t);
10126
10126
  if (u < i.x - s || u > i.x + i.width + s || d < i.y - s || d > i.y + i.height + s) continue;
10127
10127
  let f = this.resolveColor(c, o), p = s * Math.max(.6, Math.min(1, c.confidence));
10128
10128
  if (this.renderArrow(e, u, d, c.direction, p, f), o.showLabel && c.label) {
@@ -10150,7 +10150,7 @@ var ca = class {
10150
10150
  renderArrow(e, t, n, r, i, a) {
10151
10151
  e.fillStyle = a, e.beginPath(), r === "long" ? (e.moveTo(t, n - i), e.lineTo(t - i * .6, n), e.lineTo(t - i * .2, n), e.lineTo(t - i * .2, n + i * .4), e.lineTo(t + i * .2, n + i * .4), e.lineTo(t + i * .2, n), e.lineTo(t + i * .6, n)) : r === "short" ? (e.moveTo(t, n + i), e.lineTo(t - i * .6, n), e.lineTo(t - i * .2, n), e.lineTo(t - i * .2, n - i * .4), e.lineTo(t + i * .2, n - i * .4), e.lineTo(t + i * .2, n), e.lineTo(t + i * .6, n)) : e.arc(t, n, i * .4, 0, Math.PI * 2), e.closePath(), e.fill();
10152
10152
  }
10153
- }, pa = 1, ma = class extends G {
10153
+ }, ma = 1, ha = class extends G {
10154
10154
  zones = [];
10155
10155
  style = { ...o };
10156
10156
  requestRender = null;
@@ -10175,7 +10175,7 @@ var ca = class {
10175
10175
  return { ...this.style };
10176
10176
  }
10177
10177
  addZone(e) {
10178
- let t = e.id ?? `tc_zone_${pa++}`, n = {
10178
+ let t = e.id ?? `tc_zone_${ma++}`, n = {
10179
10179
  ...e,
10180
10180
  id: t
10181
10181
  };
@@ -10209,11 +10209,11 @@ var ca = class {
10209
10209
  e.restore();
10210
10210
  }
10211
10211
  renderZone(e, t, n, r, i, a) {
10212
- let { chartRect: o, visibleRange: s } = r, c = M(t.entryTime, n), l = t.exitTime == null ? n.length - 1 : M(t.exitTime, n);
10212
+ let { chartRect: o, visibleRange: s } = r, c = N(t.entryTime, n), l = t.exitTime == null ? n.length - 1 : N(t.exitTime, n);
10213
10213
  if (l < s.from || c > s.to) return;
10214
- let u = O(c, r), d = O(l, r), f = Math.max(o.x, Math.min(u, d)), p = Math.min(o.x + o.width, Math.max(u, d));
10214
+ let u = k(c, r), d = k(l, r), f = Math.max(o.x, Math.min(u, d)), p = Math.min(o.x + o.width, Math.max(u, d));
10215
10215
  if (p - f < 1) return;
10216
- let m = k(t.entryPrice, r), h = t.exitPrice == null ? k(t.entryPrice, r) : k(t.exitPrice, r), g = Math.min(m, h), _ = Math.max(Math.max(m, h) - g, 2), v = t.exitTime == null, y = t.pnl == null ? t.direction === "long" ? (t.exitPrice ?? t.entryPrice) >= t.entryPrice : (t.exitPrice ?? t.entryPrice) <= t.entryPrice : t.pnl >= 0, b = v ? a.activeColor ?? "#2196F3" : y ? a.profitColor ?? "#26A69A" : a.lossColor ?? "#EF5350";
10216
+ let m = A(t.entryPrice, r), h = t.exitPrice == null ? A(t.entryPrice, r) : A(t.exitPrice, r), g = Math.min(m, h), _ = Math.max(Math.max(m, h) - g, 2), v = t.exitTime == null, y = t.pnl == null ? t.direction === "long" ? (t.exitPrice ?? t.entryPrice) >= t.entryPrice : (t.exitPrice ?? t.entryPrice) <= t.entryPrice : t.pnl >= 0, b = v ? a.activeColor ?? "#2196F3" : y ? a.profitColor ?? "#26A69A" : a.lossColor ?? "#EF5350";
10217
10217
  e.fillStyle = b, e.globalAlpha = a.fillOpacity ?? .12, e.fillRect(f, g, p - f, _), e.globalAlpha = 1;
10218
10218
  let x = a.borderWidth ?? 1;
10219
10219
  e.strokeStyle = b, e.lineWidth = x, e.setLineDash([]), e.beginPath(), e.moveTo(f, Math.round(m) + .5), e.lineTo(p, Math.round(m) + .5), e.stroke(), !v && t.exitPrice != null && (e.setLineDash([3, 3]), e.beginPath(), e.moveTo(f, Math.round(h) + .5), e.lineTo(p, Math.round(h) + .5), e.stroke(), e.setLineDash([]));
@@ -10226,7 +10226,7 @@ var ca = class {
10226
10226
  }
10227
10227
  a.showLabel && t.label && (e.font = `9px ${i.font.family}`, e.fillStyle = b, e.globalAlpha = .8, e.textBaseline = "top", e.textAlign = "left", e.fillText(t.label, f + 4, m + 3), e.globalAlpha = 1);
10228
10228
  }
10229
- }, ha = class {
10229
+ }, ga = class {
10230
10230
  active = !1;
10231
10231
  startBar = 0;
10232
10232
  startPrice = 0;
@@ -10238,34 +10238,34 @@ var ca = class {
10238
10238
  return this.active;
10239
10239
  }
10240
10240
  begin(e, t, n) {
10241
- let r = Math.round(A(e.x, t)), i = j(e.y, t);
10242
- this.startBar = r, this.startPrice = i, this.endBar = r, this.endPrice = i, this.startTime = ga(r, n), this.endTime = this.startTime, this.active = !0;
10241
+ let r = Math.round(j(e.x, t)), i = M(e.y, t);
10242
+ this.startBar = r, this.startPrice = i, this.endBar = r, this.endPrice = i, this.startTime = _a(r, n), this.endTime = this.startTime, this.active = !0;
10243
10243
  }
10244
10244
  update(e, t, n) {
10245
10245
  if (!this.active) return;
10246
- let r = Math.round(A(e.x, t));
10247
- this.endBar = r, this.endPrice = j(e.y, t), this.endTime = ga(r, n);
10246
+ let r = Math.round(j(e.x, t));
10247
+ this.endBar = r, this.endPrice = M(e.y, t), this.endTime = _a(r, n);
10248
10248
  }
10249
10249
  end() {
10250
10250
  this.active = !1;
10251
10251
  }
10252
10252
  render(e, t, n) {
10253
10253
  if (!this.active) return;
10254
- let r = O(this.startBar, t), i = O(this.endBar, t), a = k(this.startPrice, t), o = k(this.endPrice, t), s = Math.min(r, i), c = Math.max(r, i), l = Math.min(a, o), u = Math.max(a, o), d = c - s, f = u - l, p = this.endPrice >= this.startPrice ? n.candleUp : n.candleDown, m = Sa(p, .14);
10255
- e.save(), e.fillStyle = m, e.fillRect(s, l, d, f), e.strokeStyle = p, e.lineWidth = 1, e.setLineDash([4, 3]), e.strokeRect(s + .5, l + .5, d, f), e.setLineDash([]), e.strokeStyle = p, e.lineWidth = 1.5, e.beginPath(), e.moveTo(r, a), e.lineTo(i, o), e.stroke(), ya(e, r, a, p), ya(e, i, o, p);
10256
- let h = Math.abs(this.endBar - this.startBar), g = this.endPrice - this.startPrice, _ = this.startPrice === 0 ? 0 : g / this.startPrice * 100, v = this.startTime !== null && this.endTime !== null ? va(Math.abs(this.endTime - this.startTime)) : null, y = [], b = g > 0 ? "+" : g < 0 ? "−" : "", x = Math.abs(g);
10257
- y.push(`${b}${_a(x)} (${b}${Math.abs(_).toFixed(2)}%)`), y.push(`${h} bars${v ? " · " + v : ""}`), ba(e, i, o, y, p, n), e.restore();
10254
+ let r = k(this.startBar, t), i = k(this.endBar, t), a = A(this.startPrice, t), o = A(this.endPrice, t), s = Math.min(r, i), c = Math.max(r, i), l = Math.min(a, o), u = Math.max(a, o), d = c - s, f = u - l, p = this.endPrice >= this.startPrice ? n.candleUp : n.candleDown, m = Ca(p, .14);
10255
+ e.save(), e.fillStyle = m, e.fillRect(s, l, d, f), e.strokeStyle = p, e.lineWidth = 1, e.setLineDash([4, 3]), e.strokeRect(s + .5, l + .5, d, f), e.setLineDash([]), e.strokeStyle = p, e.lineWidth = 1.5, e.beginPath(), e.moveTo(r, a), e.lineTo(i, o), e.stroke(), ba(e, r, a, p), ba(e, i, o, p);
10256
+ let h = Math.abs(this.endBar - this.startBar), g = this.endPrice - this.startPrice, _ = this.startPrice === 0 ? 0 : g / this.startPrice * 100, v = this.startTime !== null && this.endTime !== null ? ya(Math.abs(this.endTime - this.startTime)) : null, y = [], b = g > 0 ? "+" : g < 0 ? "−" : "", x = Math.abs(g);
10257
+ y.push(`${b}${va(x)} (${b}${Math.abs(_).toFixed(2)}%)`), y.push(`${h} bars${v ? " · " + v : ""}`), xa(e, i, o, y, p, n), e.restore();
10258
10258
  }
10259
10259
  };
10260
- function ga(e, t) {
10260
+ function _a(e, t) {
10261
10261
  if (e < 0 || e >= t.length) return null;
10262
10262
  let n = t[e].time;
10263
10263
  return n > 0xe8d4a51000 ? n : n * 1e3;
10264
10264
  }
10265
- function _a(e) {
10265
+ function va(e) {
10266
10266
  return e >= 1e3 ? e.toFixed(2) : e >= 1 ? e.toFixed(4) : e.toPrecision(4);
10267
10267
  }
10268
- function va(e) {
10268
+ function ya(e) {
10269
10269
  let t = e / 1e3;
10270
10270
  if (t < 60) return `${t.toFixed(0)}s`;
10271
10271
  let n = t / 60;
@@ -10277,10 +10277,10 @@ function va(e) {
10277
10277
  let a = i / 30;
10278
10278
  return a < 12 ? `${a.toFixed(1)}mo` : `${(i / 365).toFixed(1)}y`;
10279
10279
  }
10280
- function ya(e, t, n, r) {
10280
+ function ba(e, t, n, r) {
10281
10281
  e.fillStyle = r, e.beginPath(), e.arc(t, n, 3.5, 0, Math.PI * 2), e.fill(), e.fillStyle = "#fff", e.beginPath(), e.arc(t, n, 1.5, 0, Math.PI * 2), e.fill();
10282
10282
  }
10283
- function ba(e, t, n, r, i, a) {
10283
+ function xa(e, t, n, r, i, a) {
10284
10284
  e.font = `600 11px ${a.font.family}`;
10285
10285
  let o = 0;
10286
10286
  for (let t of r) {
@@ -10288,13 +10288,13 @@ function ba(e, t, n, r, i, a) {
10288
10288
  n > o && (o = n);
10289
10289
  }
10290
10290
  let s = Math.ceil(o) + 16, c = r.length * 14 + 12, l = t + 8, u = n + 8, d = e.canvas.clientWidth || e.canvas.width;
10291
- l + s > d - 4 && (l = t - s - 8), l < 4 && (l = 4), e.fillStyle = a.background, e.globalAlpha = .96, xa(e, l, u, s, c, 6), e.fill(), e.globalAlpha = 1, e.strokeStyle = i, e.lineWidth = 1, xa(e, l + .5, u + .5, s - 1, c - 1, 6), e.stroke(), e.fillStyle = a.text, e.textBaseline = "top", e.textAlign = "left";
10291
+ l + s > d - 4 && (l = t - s - 8), l < 4 && (l = 4), e.fillStyle = a.background, e.globalAlpha = .96, Sa(e, l, u, s, c, 6), e.fill(), e.globalAlpha = 1, e.strokeStyle = i, e.lineWidth = 1, Sa(e, l + .5, u + .5, s - 1, c - 1, 6), e.stroke(), e.fillStyle = a.text, e.textBaseline = "top", e.textAlign = "left";
10292
10292
  for (let t = 0; t < r.length; t++) e.fillStyle = t === 0 ? i : a.textSecondary, e.fillText(r[t], l + 8, u + 6 + t * 14);
10293
10293
  }
10294
- function xa(e, t, n, r, i, a) {
10294
+ function Sa(e, t, n, r, i, a) {
10295
10295
  e.beginPath(), e.moveTo(t + a, n), e.arcTo(t + r, n, t + r, n + i, a), e.arcTo(t + r, n + i, t, n + i, a), e.arcTo(t, n + i, t, n, a), e.arcTo(t, n, t + r, n, a), e.closePath();
10296
10296
  }
10297
- function Sa(e, t) {
10297
+ function Ca(e, t) {
10298
10298
  if (e.startsWith("#")) {
10299
10299
  let n = 0, r = 0, i = 0;
10300
10300
  return e.length === 4 ? (n = parseInt(e[1] + e[1], 16), r = parseInt(e[2] + e[2], 16), i = parseInt(e[3] + e[3], 16)) : e.length >= 7 && (n = parseInt(e.slice(1, 3), 16), r = parseInt(e.slice(3, 5), 16), i = parseInt(e.slice(5, 7), 16)), `rgba(${n},${r},${i},${t})`;
@@ -10307,7 +10307,7 @@ function Sa(e, t) {
10307
10307
  }
10308
10308
  //#endregion
10309
10309
  //#region src/animation/Animator.ts
10310
- var Ca = {
10310
+ var wa = {
10311
10311
  linear: (e) => e,
10312
10312
  easeOutCubic: (e) => 1 - (1 - e) ** 3,
10313
10313
  easeOutQuart: (e) => 1 - (1 - e) ** 4,
@@ -10315,7 +10315,7 @@ var Ca = {
10315
10315
  easeOutExpo: (e) => e === 1 ? 1 : 1 - 2 ** (-10 * e),
10316
10316
  easeOutElastic: (e) => e === 0 || e === 1 ? e : 2 ** (-10 * e) * Math.sin((e * 10 - .75) * (2 * Math.PI / 3)) + 1,
10317
10317
  spring: (e) => 1 - Math.E ** (-6 * e) * Math.cos(8 * e)
10318
- }, wa = class {
10318
+ }, Ta = class {
10319
10319
  animations = /* @__PURE__ */ new Map();
10320
10320
  frameId = 0;
10321
10321
  running = !1;
@@ -10323,7 +10323,7 @@ var Ca = {
10323
10323
  this.animations.set(e, {
10324
10324
  startTime: -1,
10325
10325
  duration: t.duration,
10326
- easing: t.easing ?? Ca.easeOutCubic,
10326
+ easing: t.easing ?? wa.easeOutCubic,
10327
10327
  onUpdate: t.onUpdate,
10328
10328
  onComplete: t.onComplete
10329
10329
  }), this.running || (this.running = !0, this.tick());
@@ -10358,10 +10358,10 @@ var Ca = {
10358
10358
  };
10359
10359
  //#endregion
10360
10360
  //#region src/finance/BaseFinanceChart.ts
10361
- function Ta(t) {
10361
+ function Ea(t) {
10362
10362
  return !t || t === "dark" ? e : t === "light" ? c : t;
10363
10363
  }
10364
- var Ea = class {
10364
+ var Da = class {
10365
10365
  canvas;
10366
10366
  ctx;
10367
10367
  container;
@@ -10372,7 +10372,7 @@ var Ea = class {
10372
10372
  frameId = null;
10373
10373
  resizeObserver;
10374
10374
  constructor(e, t) {
10375
- this.container = e, this.theme = Ta(t), this.canvas = document.createElement("canvas"), this.canvas.style.width = "100%", this.canvas.style.height = "100%", this.canvas.style.display = "block", e.appendChild(this.canvas), this.ctx = this.canvas.getContext("2d"), this.dpr = window.devicePixelRatio || 1, this.updateSize(), this.resizeObserver = new ResizeObserver(() => {
10375
+ this.container = e, this.theme = Ea(t), this.canvas = document.createElement("canvas"), this.canvas.style.width = "100%", this.canvas.style.height = "100%", this.canvas.style.display = "block", e.appendChild(this.canvas), this.ctx = this.canvas.getContext("2d"), this.dpr = window.devicePixelRatio || 1, this.updateSize(), this.resizeObserver = new ResizeObserver(() => {
10376
10376
  this.updateSize(), this.requestRender();
10377
10377
  }), this.resizeObserver.observe(e);
10378
10378
  }
@@ -10387,12 +10387,12 @@ var Ea = class {
10387
10387
  }));
10388
10388
  }
10389
10389
  setTheme(e) {
10390
- this.theme = Ta(e), this.requestRender();
10390
+ this.theme = Ea(e), this.requestRender();
10391
10391
  }
10392
10392
  destroy() {
10393
10393
  this.frameId !== null && cancelAnimationFrame(this.frameId), this.resizeObserver.disconnect(), this.canvas.remove();
10394
10394
  }
10395
- }, Da = class {
10395
+ }, Oa = class {
10396
10396
  pos = null;
10397
10397
  canvas;
10398
10398
  onUpdate;
@@ -10424,7 +10424,7 @@ var Ea = class {
10424
10424
  };
10425
10425
  //#endregion
10426
10426
  //#region src/finance/SparklineRenderer.ts
10427
- function Oa(e, t, n, r, i) {
10427
+ function ka(e, t, n, r, i) {
10428
10428
  let { data: a, mode: o = "area", lineWidth: s = 1.5, showLastPoint: c = !1, showMinMax: l = !1 } = r;
10429
10429
  if (a.length < 2 || t <= 0 || n <= 0) return;
10430
10430
  let u = r.color ?? i.lineColor, d = r.fillColor ?? u, f = t - 4, p = n - 4, m = Infinity, h = -Infinity, g = 0, _ = 0;
@@ -10449,8 +10449,8 @@ function Oa(e, t, n, r, i) {
10449
10449
  }
10450
10450
  //#endregion
10451
10451
  //#region src/finance/DepthChartRenderer.ts
10452
- var ka = 50, Aa = 60, ja = 20, Ma = .2;
10453
- function Na(e) {
10452
+ var Aa = 50, ja = 60, Ma = 20, Na = .2;
10453
+ function Pa(e) {
10454
10454
  let t = [...e].sort((e, t) => t.price - e.price), n = [], r = 0;
10455
10455
  for (let e of t) r += e.volume, n.push({
10456
10456
  price: e.price,
@@ -10458,7 +10458,7 @@ function Na(e) {
10458
10458
  });
10459
10459
  return n;
10460
10460
  }
10461
- function Pa(e) {
10461
+ function Fa(e) {
10462
10462
  let t = [...e].sort((e, t) => e.price - t.price), n = [], r = 0;
10463
10463
  for (let e of t) r += e.volume, n.push({
10464
10464
  price: e.price,
@@ -10466,20 +10466,20 @@ function Pa(e) {
10466
10466
  });
10467
10467
  return n;
10468
10468
  }
10469
- function Fa(e, t) {
10469
+ function Ia(e, t) {
10470
10470
  return {
10471
- left: ka,
10472
- right: e - Aa,
10473
- top: ja,
10474
- bottom: t - ja,
10475
- plotWidth: e - ka - Aa,
10476
- plotHeight: t - ja * 2
10471
+ left: Aa,
10472
+ right: e - ja,
10473
+ top: Ma,
10474
+ bottom: t - Ma,
10475
+ plotWidth: e - Aa - ja,
10476
+ plotHeight: t - Ma * 2
10477
10477
  };
10478
10478
  }
10479
- function Ia(e, t, n, r) {
10479
+ function La(e, t, n, r) {
10480
10480
  e.fillStyle = r, e.fillRect(0, 0, t, n);
10481
10481
  }
10482
- function La(e, t, n, r, i, a, o, s) {
10482
+ function Ra(e, t, n, r, i, a, o, s) {
10483
10483
  let { left: c, right: l, top: u, bottom: d, plotWidth: f, plotHeight: p } = t;
10484
10484
  e.save(), e.strokeStyle = a.grid, e.lineWidth = .5, e.fillStyle = a.axisLabel, e.font = `${a.font.sizeSmall}px ${a.font.family}`;
10485
10485
  let h = m(0, i, 5);
@@ -10494,7 +10494,7 @@ function La(e, t, n, r, i, a, o, s) {
10494
10494
  }
10495
10495
  e.restore();
10496
10496
  }
10497
- function Ra(e, t, n, r, i, a, o, s, c) {
10497
+ function za(e, t, n, r, i, a, o, s, c) {
10498
10498
  if (t.length === 0) return;
10499
10499
  let { left: l, bottom: u, plotWidth: d, plotHeight: f } = n, p = (e) => l + (e - r) / i * d, m = (e) => u - e / a * f;
10500
10500
  if (e.beginPath(), c === "bid") {
@@ -10527,14 +10527,14 @@ function Ra(e, t, n, r, i, a, o, s, c) {
10527
10527
  }
10528
10528
  e.strokeStyle = s, e.lineWidth = 1.5, e.stroke();
10529
10529
  }
10530
- function za(e, t, n, r, i, a, o, s, c) {
10530
+ function Ba(e, t, n, r, i, a, o, s, c) {
10531
10531
  let { left: l, top: u, bottom: d, plotWidth: f } = r, p = l + (t - i) / a * f;
10532
10532
  if (e.save(), e.strokeStyle = o.textSecondary, e.lineWidth = 1, e.setLineDash([4, 4]), e.beginPath(), e.moveTo(p, u), e.lineTo(p, d), e.stroke(), e.restore(), s) {
10533
10533
  let t = `Spread: ${c(n)}`;
10534
10534
  e.save(), e.font = `${o.font.sizeSmall}px ${o.font.family}`, e.fillStyle = o.textSecondary, e.textAlign = "center", e.textBaseline = "bottom", e.fillText(t, p, u - 2), e.restore();
10535
10535
  }
10536
10536
  }
10537
- function Ba(e, t, n, r, i, a, o, s, c, l, u) {
10537
+ function Va(e, t, n, r, i, a, o, s, c, l, u) {
10538
10538
  let { left: d, top: f, bottom: p, plotWidth: m, plotHeight: h } = i, g = t.x;
10539
10539
  if (g < d || g > i.right) return;
10540
10540
  let _ = a + (g - d) / m * o, v = 0, y = "";
@@ -10560,47 +10560,47 @@ function Ba(e, t, n, r, i, a, o, s, c, l, u) {
10560
10560
  for (let t = 0; t < b.length; t++) e.fillText(b[t], C + 8, w + 6 + t * (c.font.sizeSmall + 4));
10561
10561
  e.restore();
10562
10562
  }
10563
- function Va(e) {
10563
+ function Ha(e) {
10564
10564
  return e.toFixed(2);
10565
10565
  }
10566
- function Ha(e) {
10566
+ function Ua(e) {
10567
10567
  return e >= 1e6 ? (e / 1e6).toFixed(2) + "M" : e >= 1e3 ? (e / 1e3).toFixed(1) + "K" : e.toFixed(0);
10568
10568
  }
10569
- function Ua(e, t, n, r, i, a) {
10569
+ function Wa(e, t, n, r, i, a) {
10570
10570
  let { data: o } = r;
10571
10571
  if (o.bids.length === 0 && o.asks.length === 0 || t <= 0 || n <= 0) return;
10572
- let s = r.bidColor ?? i.candleUp, c = r.askColor ?? i.candleDown, l = r.bidFillColor ?? s + "40", u = r.askFillColor ?? c + "40", d = r.midPriceLine !== !1, f = r.spreadLabel !== !1, p = r.priceFormat ?? Va, m = r.volumeFormat ?? Ha, h = Na(o.bids), g = Pa(o.asks), _ = h.length > 0 ? h[0].price : 0, v = g.length > 0 ? g[0].price : 0, y = h.length > 0 && g.length > 0 ? (_ + v) / 2 : _ || v, b = g.length > 0 && h.length > 0 ? v - _ : 0, x = h.length > 0 ? h[h.length - 1].price : y, S = g.length > 0 ? g[g.length - 1].price : y, C = Math.max(y - x, S - y) * (1 + Ma), w = y - C, T = y + C, E = T - w, D = h.length > 0 ? h[h.length - 1].cumulativeVolume : 0, O = g.length > 0 ? g[g.length - 1].cumulativeVolume : 0, k = Math.max(D, O) || 1, A = Fa(t, n);
10573
- Ia(e, t, n, i.background), La(e, A, w, T, k, i, p, m), Ra(e, h, A, w, E, k, l, s, "bid"), Ra(e, g, A, w, E, k, u, c, "ask"), d && za(e, y, b, A, w, E, i, f, p), a && Ba(e, a, h, g, A, w, E, k, i, p, m);
10572
+ let s = r.bidColor ?? i.candleUp, c = r.askColor ?? i.candleDown, l = r.bidFillColor ?? s + "40", u = r.askFillColor ?? c + "40", d = r.midPriceLine !== !1, f = r.spreadLabel !== !1, p = r.priceFormat ?? Ha, m = r.volumeFormat ?? Ua, h = Pa(o.bids), g = Fa(o.asks), _ = h.length > 0 ? h[0].price : 0, v = g.length > 0 ? g[0].price : 0, y = h.length > 0 && g.length > 0 ? (_ + v) / 2 : _ || v, b = g.length > 0 && h.length > 0 ? v - _ : 0, x = h.length > 0 ? h[h.length - 1].price : y, S = g.length > 0 ? g[g.length - 1].price : y, C = Math.max(y - x, S - y) * (1 + Na), w = y - C, T = y + C, E = T - w, D = h.length > 0 ? h[h.length - 1].cumulativeVolume : 0, O = g.length > 0 ? g[g.length - 1].cumulativeVolume : 0, k = Math.max(D, O) || 1, A = Ia(t, n);
10573
+ La(e, t, n, i.background), Ra(e, A, w, T, k, i, p, m), za(e, h, A, w, E, k, l, s, "bid"), za(e, g, A, w, E, k, u, c, "ask"), d && Ba(e, y, b, A, w, E, i, f, p), a && Va(e, a, h, g, A, w, E, k, i, p, m);
10574
10574
  }
10575
10575
  //#endregion
10576
10576
  //#region src/finance/EquityCurveRenderer.ts
10577
- var Wa = 70, Ga = 30, Ka = 20, qa = 20, Ja = .05;
10578
- function Ya(e, t) {
10577
+ var Ga = 70, Ka = 30, qa = 20, Ja = 20, Ya = .05;
10578
+ function Xa(e, t) {
10579
10579
  return {
10580
- left: Wa,
10581
- right: e - Ka,
10582
- top: qa,
10583
- bottom: t - Ga,
10584
- plotWidth: e - Wa - Ka,
10585
- plotHeight: t - qa - Ga
10580
+ left: Ga,
10581
+ right: e - qa,
10582
+ top: Ja,
10583
+ bottom: t - Ka,
10584
+ plotWidth: e - Ga - qa,
10585
+ plotHeight: t - Ja - Ka
10586
10586
  };
10587
10587
  }
10588
- function Xa(e, t) {
10588
+ function Za(e, t) {
10589
10589
  let n = Infinity, r = -Infinity;
10590
10590
  for (let t of e) t.value < n && (n = t.value), t.value > r && (r = t.value);
10591
10591
  if (t) for (let e of t) e.value < n && (n = e.value), e.value > r && (r = e.value);
10592
- let i = (r - n) * Ja;
10592
+ let i = (r - n) * Ya;
10593
10593
  return {
10594
10594
  valMin: n - i,
10595
10595
  valMax: r + i
10596
10596
  };
10597
10597
  }
10598
- function Za(e) {
10598
+ function Qa(e) {
10599
10599
  let t = [], n = -Infinity;
10600
10600
  for (let r of e) r.value > n && (n = r.value), t.push(n);
10601
10601
  return t;
10602
10602
  }
10603
- function Qa(e) {
10603
+ function $a(e) {
10604
10604
  let t = 864e5;
10605
10605
  if (365.25 * t, e < 7 * t) {
10606
10606
  let e = new Intl.DateTimeFormat(void 0, {
@@ -10622,13 +10622,13 @@ function Qa(e) {
10622
10622
  });
10623
10623
  return (e) => n.format(new Date(e));
10624
10624
  }
10625
- function $a(e) {
10625
+ function eo(e) {
10626
10626
  return Math.abs(e) >= 1e6 ? (e / 1e6).toFixed(2) + "M" : Math.abs(e) >= 1e3 ? (e / 1e3).toFixed(1) + "K" : e.toFixed(2);
10627
10627
  }
10628
- function eo(e, t, n, r) {
10628
+ function to(e, t, n, r) {
10629
10629
  e.fillStyle = r, e.fillRect(0, 0, t, n);
10630
10630
  }
10631
- function to(e, t, n, r, i, a, o, s, c) {
10631
+ function no(e, t, n, r, i, a, o, s, c) {
10632
10632
  let { left: l, right: u, top: d, bottom: f, plotWidth: p, plotHeight: h } = t;
10633
10633
  e.save(), e.strokeStyle = o.grid, e.lineWidth = .5, e.fillStyle = o.axisLabel, e.font = `${o.font.sizeSmall}px ${o.font.family}`;
10634
10634
  let g = m(n, r, 6), _ = Math.ceil(n / g) * g;
@@ -10643,21 +10643,21 @@ function to(e, t, n, r, i, a, o, s, c) {
10643
10643
  }
10644
10644
  e.restore();
10645
10645
  }
10646
- function no(e, t, n, r, i, a, o, s, c) {
10646
+ function ro(e, t, n, r, i, a, o, s, c) {
10647
10647
  if (t.length < 2) return;
10648
10648
  let { left: l, bottom: u, plotWidth: d, plotHeight: f } = n, p = (e) => l + (e - r) / i * d, m = (e) => u - (e - a) / o * f;
10649
10649
  e.save(), e.beginPath(), e.moveTo(p(t[0].time), m(t[0].value));
10650
10650
  for (let n = 1; n < t.length; n++) e.lineTo(p(t[n].time), m(t[n].value));
10651
10651
  e.strokeStyle = s, e.lineWidth = c, e.lineJoin = "round", e.stroke(), e.restore();
10652
10652
  }
10653
- function ro(e, t, n, r, i, a, o, s) {
10653
+ function io(e, t, n, r, i, a, o, s) {
10654
10654
  if (t.length < 2) return;
10655
10655
  let { left: c, bottom: l, plotWidth: u, plotHeight: d } = n, f = (e) => c + (e - r) / i * u, p = (e) => l - (e - a) / o * d, m = e.createLinearGradient(0, n.top, 0, l);
10656
10656
  m.addColorStop(0, s + "40"), m.addColorStop(1, "transparent"), e.save(), e.beginPath(), e.moveTo(f(t[0].time), p(t[0].value));
10657
10657
  for (let n = 1; n < t.length; n++) e.lineTo(f(t[n].time), p(t[n].value));
10658
10658
  e.lineTo(f(t[t.length - 1].time), l), e.lineTo(f(t[0].time), l), e.closePath(), e.fillStyle = m, e.fill(), e.restore();
10659
10659
  }
10660
- function io(e, t, n, r, i, a, o, s, c) {
10660
+ function ao(e, t, n, r, i, a, o, s, c) {
10661
10661
  if (t.length < 2) return;
10662
10662
  let { left: l, bottom: u, plotWidth: d, plotHeight: f } = r, p = (e) => l + (e - i) / a * d, m = (e) => u - (e - o) / s * f;
10663
10663
  e.save(), e.fillStyle = c, e.beginPath(), e.moveTo(p(t[0].time), m(n[0]));
@@ -10665,12 +10665,12 @@ function io(e, t, n, r, i, a, o, s, c) {
10665
10665
  for (let n = t.length - 1; n >= 0; n--) e.lineTo(p(t[n].time), m(t[n].value));
10666
10666
  e.closePath(), e.fill(), e.restore();
10667
10667
  }
10668
- function ao(e, t, n, r, i, a, o, s, c, l) {
10668
+ function oo(e, t, n, r, i, a, o, s, c, l) {
10669
10669
  if (t.length === 0) return;
10670
10670
  let { left: u, bottom: d, plotWidth: f, plotHeight: p } = n, m = t[t.length - 1], h = u + (m.time - r) / i * f, g = d - (m.value - a) / o * p;
10671
10671
  e.save(), e.font = `${l.font.sizeSmall}px ${l.font.family}`, e.fillStyle = c, e.textAlign = "left", e.textBaseline = "middle", e.fillText(s, h + 4, g), e.restore();
10672
10672
  }
10673
- function oo(e, t, n, r, i, a, o, s, c, l, u, d) {
10673
+ function so(e, t, n, r, i, a, o, s, c, l, u, d) {
10674
10674
  let { left: f, top: p, bottom: m, plotWidth: h, plotHeight: g } = i, _ = t.x;
10675
10675
  if (_ < f || _ > i.right) return;
10676
10676
  e.save(), e.strokeStyle = l.crosshair, e.lineWidth = .5, e.setLineDash([4, 4]), e.beginPath(), e.moveTo(_, p), e.lineTo(_, m), e.stroke(), e.restore();
@@ -10688,15 +10688,15 @@ function oo(e, t, n, r, i, a, o, s, c, l, u, d) {
10688
10688
  for (let t = 0; t < S.length; t++) e.fillText(S[t], D + 8, O + 6 + t * (l.font.sizeSmall + 4));
10689
10689
  e.restore();
10690
10690
  }
10691
- function so(e, t, n, r, i, a) {
10691
+ function co(e, t, n, r, i, a) {
10692
10692
  let { data: o } = r;
10693
10693
  if (o.length < 2 || t <= 0 || n <= 0) return;
10694
- let s = r.lineColor ?? i.lineColor, c = r.lineWidth ?? 1.5, l = r.drawdown === !0, u = r.drawdownColor ?? i.candleDown + "30", d = r.fillArea === !0, f = r.benchmark, p = r.benchmarkColor ?? i.textSecondary, m = r.benchmarkLabel ?? "Benchmark", h = r.valueFormat ?? $a, { valMin: g, valMax: _ } = Xa(o, f), v = _ - g || 1, y = o[0].time, b = o[o.length - 1].time, x = b - y || 1, S = r.timeFormat ?? Qa(x), C = Ya(t, n);
10695
- eo(e, t, n, i.background), to(e, C, g, _, y, b, i, h, S), l && io(e, o, Za(o), C, y, x, g, v, u), d && ro(e, o, C, y, x, g, v, s), no(e, o, C, y, x, g, v, s, c), f && f.length >= 2 && (no(e, f, C, y, x, g, v, p, 1), ao(e, f, C, y, x, g, v, m, p, i)), a && oo(e, a, o, f, C, y, x, g, v, i, S, h);
10694
+ let s = r.lineColor ?? i.lineColor, c = r.lineWidth ?? 1.5, l = r.drawdown === !0, u = r.drawdownColor ?? i.candleDown + "30", d = r.fillArea === !0, f = r.benchmark, p = r.benchmarkColor ?? i.textSecondary, m = r.benchmarkLabel ?? "Benchmark", h = r.valueFormat ?? eo, { valMin: g, valMax: _ } = Za(o, f), v = _ - g || 1, y = o[0].time, b = o[o.length - 1].time, x = b - y || 1, S = r.timeFormat ?? $a(x), C = Xa(t, n);
10695
+ to(e, t, n, i.background), no(e, C, g, _, y, b, i, h, S), l && ao(e, o, Qa(o), C, y, x, g, v, u), d && io(e, o, C, y, x, g, v, s), ro(e, o, C, y, x, g, v, s, c), f && f.length >= 2 && (ro(e, f, C, y, x, g, v, p, 1), oo(e, f, C, y, x, g, v, m, p, i)), a && so(e, a, o, f, C, y, x, g, v, i, S, h);
10696
10696
  }
10697
10697
  //#endregion
10698
10698
  //#region src/finance/HeatmapLayout.ts
10699
- function co(e, t, n) {
10699
+ function lo(e, t, n) {
10700
10700
  if (e.length === 0) return [];
10701
10701
  let r = e.length, i = Math.ceil(Math.sqrt(r)), a = Math.ceil(r / i), o = t.width / i, s = t.height / a, c = [];
10702
10702
  for (let a = 0; a < r; a++) {
@@ -10713,7 +10713,7 @@ function co(e, t, n) {
10713
10713
  }
10714
10714
  return c;
10715
10715
  }
10716
- function lo(e, t) {
10716
+ function uo(e, t) {
10717
10717
  let n = e.reduce((e, t) => e + t, 0);
10718
10718
  if (n === 0 || t === 0) return Infinity;
10719
10719
  let r = 0;
@@ -10723,7 +10723,7 @@ function lo(e, t) {
10723
10723
  }
10724
10724
  return r;
10725
10725
  }
10726
- function uo(e, t, n, r, i, a) {
10726
+ function fo(e, t, n, r, i, a) {
10727
10727
  let o = r ? n.height : n.width, s = e.reduce((e, t) => e + t, 0), c = o > 0 ? s / o : 0, l = 0;
10728
10728
  for (let o = 0; o < e.length; o++) {
10729
10729
  let s = c > 0 ? e[o] / c : 0, u;
@@ -10743,19 +10743,19 @@ function uo(e, t, n, r, i, a) {
10743
10743
  }), l += s;
10744
10744
  }
10745
10745
  }
10746
- function fo(e, t, n, r, i) {
10746
+ function po(e, t, n, r, i) {
10747
10747
  if (e.length === 0) return;
10748
10748
  let a = n.width >= n.height, o = a ? n.height : n.width;
10749
10749
  if (e.length === 1) {
10750
- uo(e, t, n, a, r, i);
10750
+ fo(e, t, n, a, r, i);
10751
10751
  return;
10752
10752
  }
10753
10753
  let s = [], c = [], l = 0;
10754
10754
  for (; l < e.length;) {
10755
10755
  let u = [...s, e[l]];
10756
- if (s.length === 0 || lo(u, o) <= lo(s, o)) s.push(e[l]), c.push(t[l]), l++;
10756
+ if (s.length === 0 || uo(u, o) <= uo(s, o)) s.push(e[l]), c.push(t[l]), l++;
10757
10757
  else {
10758
- uo(s, c, n, a, r, i);
10758
+ fo(s, c, n, a, r, i);
10759
10759
  let u = s.reduce((e, t) => e + t, 0), d = o > 0 ? u / o : 0;
10760
10760
  n = a ? {
10761
10761
  x: n.x + d,
@@ -10767,43 +10767,43 @@ function fo(e, t, n, r, i) {
10767
10767
  y: n.y + d,
10768
10768
  width: n.width,
10769
10769
  height: n.height - d
10770
- }, fo(e.slice(l), t.slice(l), n, r, i);
10770
+ }, po(e.slice(l), t.slice(l), n, r, i);
10771
10771
  return;
10772
10772
  }
10773
10773
  }
10774
- s.length > 0 && uo(s, c, n, a, r, i);
10774
+ s.length > 0 && fo(s, c, n, a, r, i);
10775
10775
  }
10776
- function po(e, t, n) {
10776
+ function mo(e, t, n) {
10777
10777
  if (e.length === 0) return [];
10778
10778
  let r = [...e].sort((e, t) => t.weight - e.weight), i = r.reduce((e, t) => e + Math.max(0, t.weight), 0);
10779
10779
  if (i === 0) return [];
10780
10780
  let a = t.width * t.height, o = r.map((e) => Math.max(0, e.weight) / i * a), s = r.map((e) => e.id), c = [];
10781
- return fo(o, s, { ...t }, n, c), c;
10781
+ return po(o, s, { ...t }, n, c), c;
10782
10782
  }
10783
10783
  //#endregion
10784
10784
  //#region src/finance/HeatmapRenderer.ts
10785
- function mo(e) {
10785
+ function ho(e) {
10786
10786
  return (e >= 0 ? "+" : "") + e.toFixed(2) + "%";
10787
10787
  }
10788
- function ho(e) {
10788
+ function go(e) {
10789
10789
  return e.label;
10790
10790
  }
10791
- function go(e, t) {
10791
+ function _o(e, t) {
10792
10792
  let n = t.min ?? -5, r = t.max ?? 5;
10793
10793
  if (e <= n) return t.negative;
10794
10794
  if (e >= r) return t.positive;
10795
10795
  if (e < 0) {
10796
10796
  let r = 1 - e / n;
10797
- return _(t.negative, t.zero, r);
10797
+ return v(t.negative, t.zero, r);
10798
10798
  }
10799
10799
  let i = e / r;
10800
- return _(t.zero, t.positive, i);
10800
+ return v(t.zero, t.positive, i);
10801
10801
  }
10802
- function _o(e, t, n, r, i, a) {
10802
+ function vo(e, t, n, r, i, a) {
10803
10803
  let o = Math.min(a, r / 2, i / 2);
10804
10804
  e.beginPath(), e.moveTo(t + o, n), e.lineTo(t + r - o, n), e.arcTo(t + r, n, t + r, n + o, o), e.lineTo(t + r, n + i - o), e.arcTo(t + r, n + i, t + r - o, n + i, o), e.lineTo(t + o, n + i), e.arcTo(t, n + i, t, n + i - o, o), e.lineTo(t, n + o), e.arcTo(t, n, t + o, n, o), e.closePath();
10805
10805
  }
10806
- function vo(e, t, n, r, i, a, o, s, c, l, u) {
10806
+ function yo(e, t, n, r, i, a, o, s, c, l, u) {
10807
10807
  if (i < 40 || a < 30) return;
10808
10808
  let d = n + i / 2, f = r + a / 2;
10809
10809
  if (e.save(), e.shadowColor = "rgba(0,0,0,0.6)", e.shadowBlur = 2, e.fillStyle = "#FFFFFF", e.textAlign = "center", s) {
@@ -10816,22 +10816,22 @@ function vo(e, t, n, r, i, a, o, s, c, l, u) {
10816
10816
  }
10817
10817
  e.restore();
10818
10818
  }
10819
- function yo(e, t, n, r, i, a, o, s) {
10819
+ function bo(e, t, n, r, i, a, o, s) {
10820
10820
  let c = [o(t), s(t.value)];
10821
10821
  if (t.meta) for (let [e, n] of Object.entries(t.meta)) c.push(e + ": " + String(n));
10822
10822
  e.save(), e.font = a.font.sizeSmall + "px " + a.font.family;
10823
10823
  let l = Math.max(...c.map((t) => e.measureText(t).width)) + 16, u = a.font.sizeSmall + 4, d = c.length * u + 12, f = n.x + 14, p = n.y - d / 2;
10824
- f + l > r && (f = n.x - l - 14), p < 0 && (p = 0), p + d > i && (p = i - d), e.fillStyle = a.axisLabelBackground, e.globalAlpha = .92, _o(e, f, p, l, d, 4), e.fill(), e.globalAlpha = 1, e.fillStyle = a.text, e.textBaseline = "top", e.textAlign = "left";
10824
+ f + l > r && (f = n.x - l - 14), p < 0 && (p = 0), p + d > i && (p = i - d), e.fillStyle = a.axisLabelBackground, e.globalAlpha = .92, vo(e, f, p, l, d, 4), e.fill(), e.globalAlpha = 1, e.fillStyle = a.text, e.textBaseline = "top", e.textAlign = "left";
10825
10825
  for (let t = 0; t < c.length; t++) e.fillText(c[t], f + 8, p + 6 + t * u);
10826
10826
  e.restore();
10827
10827
  }
10828
- function bo(e, t, n, r, i, a, o, s) {
10828
+ function xo(e, t, n, r, i, a, o, s) {
10829
10829
  if (r.length === 0 || i.length === 0 || t <= 0 || n <= 0) return null;
10830
10830
  let c = a.colorScale ?? {
10831
10831
  negative: "#EF5350",
10832
10832
  zero: "#424242",
10833
10833
  positive: "#26A69A"
10834
- }, l = a.cellRadius ?? 4, u = a.showLabels !== !1, d = a.showValues !== !1, f = a.valueFormat ?? mo, p = a.labelFormat ?? ho, m = /* @__PURE__ */ new Map();
10834
+ }, l = a.cellRadius ?? 4, u = a.showLabels !== !1, d = a.showValues !== !1, f = a.valueFormat ?? ho, p = a.labelFormat ?? go, m = /* @__PURE__ */ new Map();
10835
10835
  for (let e of r) m.set(e.id, e);
10836
10836
  let h = null, g = null;
10837
10837
  if (s) for (let e of i) {
@@ -10852,37 +10852,37 @@ function bo(e, t, n, r, i, a, o, s) {
10852
10852
  if (!n) continue;
10853
10853
  let { x: r, y: i, width: a, height: s } = t.rect;
10854
10854
  if (a <= 0 || s <= 0) continue;
10855
- let g = go(n.value, c);
10856
- _o(e, r, i, a, s, l), e.fillStyle = g, e.fill(), vo(e, n, r, i, a, s, o, u, d, p, f), t.id === h && (_o(e, r, i, a, s, l), e.strokeStyle = "#FFFFFF", e.lineWidth = 1.5, e.stroke());
10855
+ let g = _o(n.value, c);
10856
+ vo(e, r, i, a, s, l), e.fillStyle = g, e.fill(), yo(e, n, r, i, a, s, o, u, d, p, f), t.id === h && (vo(e, r, i, a, s, l), e.strokeStyle = "#FFFFFF", e.lineWidth = 1.5, e.stroke());
10857
10857
  }
10858
- return g && s && yo(e, g.cell, s, t, n, o, p, f), g;
10858
+ return g && s && bo(e, g.cell, s, t, n, o, p, f), g;
10859
10859
  }
10860
10860
  //#endregion
10861
10861
  //#region src/finance/WaterfallRenderer.ts
10862
- var xo = 60, So = 12, Co = 24, wo = 40, To = .7, Eo = 1;
10863
- function Do(e) {
10862
+ var So = 60, Co = 12, wo = 24, To = 40, Eo = .7, Do = 1;
10863
+ function Oo(e) {
10864
10864
  return e.type ? e.type : e.value > 0 ? "positive" : e.value < 0 ? "negative" : "subtotal";
10865
10865
  }
10866
- function Oo(e) {
10866
+ function ko(e) {
10867
10867
  let t = Math.abs(e);
10868
10868
  return t >= 1e6 ? (e / 1e6).toFixed(2) + "M" : t >= 1e3 ? (e / 1e3).toFixed(1) + "K" : e.toFixed(2);
10869
10869
  }
10870
- function ko(e, t) {
10870
+ function Ao(e, t) {
10871
10871
  return {
10872
- left: xo,
10873
- right: e - So,
10874
- top: Co,
10875
- bottom: t - wo,
10876
- plotWidth: e - xo - So,
10877
- plotHeight: t - Co - wo
10872
+ left: So,
10873
+ right: e - Co,
10874
+ top: wo,
10875
+ bottom: t - To,
10876
+ plotWidth: e - So - Co,
10877
+ plotHeight: t - wo - To
10878
10878
  };
10879
10879
  }
10880
- function Ao(e, t, n, r, i) {
10880
+ function jo(e, t, n, r, i) {
10881
10881
  let a = Array(e.length), o = Array(e.length), s = t.plotWidth / e.length, c = s * n, l = (s - c) / 2, { left: u, bottom: d, plotHeight: f } = t, p = 0;
10882
10882
  for (let t = 0; t < e.length; t++) {
10883
- let n = e[t], m = Do(n), h, g;
10883
+ let n = e[t], m = Oo(n), h, g;
10884
10884
  m === "total" || m === "subtotal" ? (h = 0, g = n.value, p = n.value) : (h = p, g = p + n.value, p = g);
10885
- let _ = Math.min(h, g), v = Math.max(h, g), y = d - (_ - r) / i * f, b = d - (v - r) / i * f, x = Math.min(y, b), S = Math.max(Math.abs(b - y), Eo), C = u + t * s, w = C + l;
10885
+ let _ = Math.min(h, g), v = Math.max(h, g), y = d - (_ - r) / i * f, b = d - (v - r) / i * f, x = Math.min(y, b), S = Math.max(Math.abs(b - y), Do), C = u + t * s, w = C + l;
10886
10886
  a[t] = {
10887
10887
  label: n.label,
10888
10888
  value: n.value,
@@ -10902,14 +10902,14 @@ function Ao(e, t, n, r, i) {
10902
10902
  cumulatives: o
10903
10903
  };
10904
10904
  }
10905
- function jo(e) {
10905
+ function Mo(e) {
10906
10906
  if (e.length === 0) return {
10907
10907
  valMin: 0,
10908
10908
  valMax: 1
10909
10909
  };
10910
10910
  let t = 0, n = 0, r = 0;
10911
10911
  for (let i = 0; i < e.length; i++) {
10912
- let a = e[i], o = Do(a), s, c;
10912
+ let a = e[i], o = Oo(a), s, c;
10913
10913
  o === "total" || o === "subtotal" ? (s = 0, c = a.value, r = a.value) : (s = r, c = r + a.value, r = c), s < t && (t = s), c < t && (t = c), s > n && (n = s), c > n && (n = c);
10914
10914
  }
10915
10915
  let i = (n - t || 1) * .1;
@@ -10918,10 +10918,10 @@ function jo(e) {
10918
10918
  valMax: n + i
10919
10919
  };
10920
10920
  }
10921
- function Mo(e, t, n, r) {
10921
+ function No(e, t, n, r) {
10922
10922
  e.fillStyle = r, e.fillRect(0, 0, t, n);
10923
10923
  }
10924
- function No(e, t, n, r, i, a) {
10924
+ function Po(e, t, n, r, i, a) {
10925
10925
  let { left: o, right: s, top: c, bottom: l, plotHeight: u } = t, d = r - n || 1;
10926
10926
  e.strokeStyle = i.grid, e.lineWidth = .5, e.fillStyle = i.axisLabel, e.font = `${i.font.sizeSmall}px ${i.font.family}`, e.textAlign = "right", e.textBaseline = "middle";
10927
10927
  let f = m(n, r, 5), p = Math.ceil(n / f) * f;
@@ -10940,7 +10940,7 @@ function No(e, t, n, r, i, a) {
10940
10940
  e.strokeStyle = i.axisLine, e.lineWidth = 1, e.beginPath(), e.moveTo(o, t), e.lineTo(s, t), e.stroke();
10941
10941
  }
10942
10942
  }
10943
- function Po(e, t, n) {
10943
+ function Fo(e, t, n) {
10944
10944
  let r = [
10945
10945
  "positive",
10946
10946
  "negative",
@@ -10959,7 +10959,7 @@ function Po(e, t, n) {
10959
10959
  s && (e.fillStyle = o, e.fill());
10960
10960
  }
10961
10961
  }
10962
- function Fo(e, t, n, r, i, a, o) {
10962
+ function Io(e, t, n, r, i, a, o) {
10963
10963
  if (o === "none" || t.length < 2) return;
10964
10964
  let { bottom: s, plotHeight: c } = n;
10965
10965
  e.strokeStyle = a, e.lineWidth = 1, o === "dashed" ? e.setLineDash([4, 4]) : e.setLineDash([]), e.beginPath();
@@ -10969,7 +10969,7 @@ function Fo(e, t, n, r, i, a, o) {
10969
10969
  }
10970
10970
  e.stroke(), e.setLineDash([]);
10971
10971
  }
10972
- function Io(e, t, n, r, i, a) {
10972
+ function Lo(e, t, n, r, i, a) {
10973
10973
  e.fillStyle = r.text, e.font = `${r.font.sizeSmall}px ${r.font.family}`, e.textAlign = "center";
10974
10974
  for (let r = 0; r < t.length; r++) {
10975
10975
  let o = t[r], s;
@@ -10978,7 +10978,7 @@ function Io(e, t, n, r, i, a) {
10978
10978
  o.end < o.start ? (e.textBaseline = "top", e.fillText(s, c, o.rectY + o.rectH + 4)) : (e.textBaseline = "bottom", e.fillText(s, c, o.rectY - 4));
10979
10979
  }
10980
10980
  }
10981
- function Lo(e, t, n, r, i) {
10981
+ function Ro(e, t, n, r, i) {
10982
10982
  e.fillStyle = r.axisLabel, e.font = `${r.font.sizeSmall}px ${r.font.family}`, e.textAlign = "center", e.textBaseline = "top";
10983
10983
  let a = n.bottom + 6, o = t.length > 0 ? t[0].slotW - 4 : 0, s = !1;
10984
10984
  for (let n = 0; n < t.length; n++) if (e.measureText(i(t[n].label)).width > o) {
@@ -10999,7 +10999,7 @@ function Lo(e, t, n, r, i) {
10999
10999
  }
11000
11000
  e.setTransform(1, 0, 0, 1, 0, 0), e.restore();
11001
11001
  }
11002
- function Ro(e, t, n) {
11002
+ function zo(e, t, n) {
11003
11003
  if (t < n.left || t > n.right) return null;
11004
11004
  for (let n = 0; n < e.length; n++) {
11005
11005
  let r = e[n];
@@ -11007,7 +11007,7 @@ function Ro(e, t, n) {
11007
11007
  }
11008
11008
  return null;
11009
11009
  }
11010
- function zo(e, t, n, r, i, a, o, s) {
11010
+ function Bo(e, t, n, r, i, a, o, s) {
11011
11011
  let c = t[r], l = n[r], u = Math.round(c.slotX + c.slotW / 2) + .5;
11012
11012
  e.strokeStyle = o.crosshair, e.lineWidth = .5, e.setLineDash([4, 4]), e.beginPath(), e.moveTo(u, a.top), e.lineTo(u, a.bottom), e.stroke(), e.setLineDash([]);
11013
11013
  let d = [
@@ -11026,31 +11026,31 @@ function zo(e, t, n, r, i, a, o, s) {
11026
11026
  let _ = o.font.sizeSmall + 4;
11027
11027
  for (let t = 0; t < d.length; t++) e.fillText(d[t], h + 8, g + 6 + t * _);
11028
11028
  }
11029
- function Bo(e, t, n, r, i, a) {
11029
+ function Vo(e, t, n, r, i, a) {
11030
11030
  let { data: o } = r;
11031
11031
  if (!o || o.length === 0 || t <= 0 || n <= 0) return { hitBar: null };
11032
- let s = r.positiveColor ?? i.candleUp, c = r.negativeColor ?? i.candleDown, l = r.totalColor ?? i.lineColor, u = r.subtotalColor ?? i.textSecondary, d = r.connectorColor ?? i.textSecondary, f = r.connectorStyle ?? "dashed", p = r.barWidth ?? To, m = r.showValues !== !1, h = r.showDelta !== !1, g = r.valueFormat ?? Oo, _ = r.labelFormat ?? ((e) => e), { valMin: v, valMax: y } = jo(o), b = y - v || 1, x = ko(t, n), { bars: S, cumulatives: C } = Ao(o, x, p, v, b);
11033
- Mo(e, t, n, i.background), No(e, x, v, y, i, g), Fo(e, S, x, v, b, d, f), Po(e, S, {
11032
+ let s = r.positiveColor ?? i.candleUp, c = r.negativeColor ?? i.candleDown, l = r.totalColor ?? i.lineColor, u = r.subtotalColor ?? i.textSecondary, d = r.connectorColor ?? i.textSecondary, f = r.connectorStyle ?? "dashed", p = r.barWidth ?? Eo, m = r.showValues !== !1, h = r.showDelta !== !1, g = r.valueFormat ?? ko, _ = r.labelFormat ?? ((e) => e), { valMin: v, valMax: y } = Mo(o), b = y - v || 1, x = Ao(t, n), { bars: S, cumulatives: C } = jo(o, x, p, v, b);
11033
+ No(e, t, n, i.background), Po(e, x, v, y, i, g), Io(e, S, x, v, b, d, f), Fo(e, S, {
11034
11034
  positive: s,
11035
11035
  negative: c,
11036
11036
  total: l,
11037
11037
  subtotal: u
11038
- }), m && Io(e, S, C, i, g, h), Lo(e, S, x, i, _);
11039
- let w = a ? Ro(S, a.x, x) : null;
11040
- return a && w !== null && zo(e, S, C, w, a, x, i, g), { hitBar: w };
11038
+ }), m && Lo(e, S, C, i, g, h), Ro(e, S, x, i, _);
11039
+ let w = a ? zo(S, a.x, x) : null;
11040
+ return a && w !== null && Bo(e, S, C, w, a, x, i, g), { hitBar: w };
11041
11041
  }
11042
11042
  //#endregion
11043
11043
  //#region src/finance/GaugeRenderer.ts
11044
- var Vo = Math.PI / 180, Ho = 135, Uo = 405, Wo = .25;
11045
- function Go(e) {
11044
+ var Ho = Math.PI / 180, Uo = 135, Wo = 405, Go = .25;
11045
+ function Ko(e) {
11046
11046
  let t = Math.abs(e);
11047
11047
  return t >= 1e6 ? (e / 1e6).toFixed(2) + "M" : t >= 1e3 ? (e / 1e3).toFixed(1) + "K" : Number.isInteger(e) ? e.toFixed(0) : e.toFixed(1);
11048
11048
  }
11049
11049
  function Q(e, t, n) {
11050
11050
  return e < t ? t : e > n ? n : e;
11051
11051
  }
11052
- function Ko(e, t, n) {
11053
- let r = n.min ?? 0, i = n.max ?? 100, a = i - r || 1, o = (n.startAngle ?? Ho) * Vo, s = (n.endAngle ?? Uo) * Vo, c = n.thickness ?? Wo, l = e / 2, u = t / 2 + t * .05, d = Math.max(10, Math.min(e, t) / 2 - 24);
11052
+ function qo(e, t, n) {
11053
+ let r = n.min ?? 0, i = n.max ?? 100, a = i - r || 1, o = (n.startAngle ?? Uo) * Ho, s = (n.endAngle ?? Wo) * Ho, c = n.thickness ?? Go, l = e / 2, u = t / 2 + t * .05, d = Math.max(10, Math.min(e, t) / 2 - 24);
11054
11054
  return {
11055
11055
  cx: l,
11056
11056
  cy: u,
@@ -11068,38 +11068,38 @@ function $(e, t) {
11068
11068
  let n = Q((e - t.min) / t.range, 0, 1);
11069
11069
  return t.startAngle + t.angleRange * n;
11070
11070
  }
11071
- function qo(e, t, n, r) {
11071
+ function Jo(e, t, n, r) {
11072
11072
  e.fillStyle = r, e.fillRect(0, 0, t, n);
11073
11073
  }
11074
- function Jo(e, t, n) {
11074
+ function Yo(e, t, n) {
11075
11075
  e.beginPath(), e.arc(t.cx, t.cy, t.radius, t.startAngle, t.endAngle, !1), e.arc(t.cx, t.cy, t.innerRadius, t.endAngle, t.startAngle, !0), e.closePath(), e.fillStyle = n, e.fill();
11076
11076
  }
11077
- function Yo(e, t, n) {
11077
+ function Xo(e, t, n) {
11078
11078
  let r = Q(n.from, t.min, t.max), i = Q(n.to, t.min, t.max);
11079
11079
  if (i <= r) return;
11080
11080
  let a = $(r, t), o = $(i, t);
11081
11081
  e.beginPath(), e.arc(t.cx, t.cy, t.radius, a, o, !1), e.arc(t.cx, t.cy, t.innerRadius, o, a, !0), e.closePath(), e.fillStyle = n.color, e.fill();
11082
11082
  }
11083
- function Xo(e, t, n, r, i) {
11083
+ function Zo(e, t, n, r, i) {
11084
11084
  let a = $(n, t);
11085
11085
  a <= t.startAngle || (e.globalAlpha = i, e.beginPath(), e.arc(t.cx, t.cy, t.radius, t.startAngle, a, !1), e.arc(t.cx, t.cy, t.innerRadius, a, t.startAngle, !0), e.closePath(), e.fillStyle = r, e.fill(), e.globalAlpha = 1);
11086
11086
  }
11087
- function Zo(e, t, n, r) {
11087
+ function Qo(e, t, n, r) {
11088
11088
  let i = $(n, t), a = Math.cos(i), o = Math.sin(i), s = t.radius - 2, c = t.innerRadius * .25, l = -o, u = a, d = t.cx + a * s, f = t.cy + o * s, p = t.cx + l * 4 - a * c, m = t.cy + u * 4 - o * c, h = t.cx - l * 4 - a * c, g = t.cy - u * 4 - o * c;
11089
11089
  e.beginPath(), e.moveTo(d, f), e.lineTo(p, m), e.lineTo(h, g), e.closePath(), e.fillStyle = r, e.fill(), e.beginPath(), e.arc(t.cx, t.cy, Math.max(4, t.innerRadius * .12), 0, Math.PI * 2), e.fill();
11090
11090
  }
11091
- function Qo(e, t, n, r, i) {
11091
+ function $o(e, t, n, r, i) {
11092
11092
  let a = Math.round(t.innerRadius * .55), o = Math.round(i.font.sizeMedium);
11093
11093
  e.fillStyle = i.text, e.textAlign = "center", e.textBaseline = "middle", e.font = `600 ${a}px ${i.font.family}`;
11094
11094
  let s = !!r, c = s ? t.cy - o * .6 : t.cy - a * .1;
11095
11095
  e.fillText(n, t.cx, c), s && (e.fillStyle = i.textSecondary, e.font = `${o}px ${i.font.family}`, e.fillText(r, t.cx, t.cy + a * .55));
11096
11096
  }
11097
- function $o(e, t, n, r) {
11097
+ function es(e, t, n, r) {
11098
11098
  e.fillStyle = r.textSecondary, e.font = `${r.font.sizeSmall}px ${r.font.family}`;
11099
11099
  let i = t.radius + 10, a = Math.cos(t.startAngle), o = Math.sin(t.startAngle), s = Math.cos(t.endAngle), c = Math.sin(t.endAngle), l = t.cx + a * i, u = t.cy + o * i, d = t.cx + s * i, f = t.cy + c * i;
11100
11100
  e.textBaseline = "middle", e.textAlign = a < -.2 ? "right" : a > .2 ? "left" : "center", e.fillText(n(t.min), l, u), e.textAlign = s < -.2 ? "right" : s > .2 ? "left" : "center", e.fillText(n(t.max), d, f);
11101
11101
  }
11102
- function es(e, t, n, r) {
11102
+ function ts(e, t, n, r) {
11103
11103
  e.fillStyle = r.textSecondary, e.font = `${r.font.sizeSmall}px ${r.font.family}`, e.textAlign = "center", e.textBaseline = "middle";
11104
11104
  let i = (t.radius + t.innerRadius) / 2;
11105
11105
  for (let r = 0; r < n.length; r++) {
@@ -11109,15 +11109,15 @@ function es(e, t, n, r) {
11109
11109
  e.fillText(a.label, s, c);
11110
11110
  }
11111
11111
  }
11112
- function ts(e, t, n, r, i, a) {
11112
+ function ns(e, t, n, r, i, a) {
11113
11113
  if (t <= 0 || n <= 0) return;
11114
- let o = Ko(t, n, r), s = r.trackColor ?? i.grid, c = r.needleColor ?? i.text, l = r.showValue !== !1, u = r.showZoneLabels === !0, d = r.valueFormat ?? Go, f = Q(a, o.min, o.max);
11115
- qo(e, t, n, i.background), Jo(e, o, s);
11114
+ let o = qo(t, n, r), s = r.trackColor ?? i.grid, c = r.needleColor ?? i.text, l = r.showValue !== !1, u = r.showZoneLabels === !0, d = r.valueFormat ?? Ko, f = Q(a, o.min, o.max);
11115
+ Jo(e, t, n, i.background), Yo(e, o, s);
11116
11116
  let p = r.zones;
11117
- if (p && p.length > 0) for (let t = 0; t < p.length; t++) Yo(e, o, p[t]);
11118
- Xo(e, o, f, c, .12), Zo(e, o, f, c), l && Qo(e, o, d(f), r.label, i), $o(e, o, d, i), u && p && p.length > 0 && es(e, o, p, i);
11117
+ if (p && p.length > 0) for (let t = 0; t < p.length; t++) Xo(e, o, p[t]);
11118
+ Zo(e, o, f, c, .12), Qo(e, o, f, c), l && $o(e, o, d(f), r.label, i), es(e, o, d, i), u && p && p.length > 0 && ts(e, o, p, i);
11119
11119
  }
11120
11120
  //#endregion
11121
- export { Et as ADXIndicator, Tt as ATRIndicator, hn as AcceleratorOscillatorIndicator, Cn as AccumulationDistributionIndicator, In as AlertDragHandler, $i as AlertManager, vt as AlligatorIndicator, lt as AnchoredVWAPIndicator, Dr as AnchoredVWAPTool, wa as Animator, ce as AreaRenderer, jt as AroonIndicator, Sr as ArrowTool, bt as AwesomeOscillatorIndicator, Fn as AxisDragHandler, Qt as BalanceOfPowerIndicator, Vi as BarCountdown, le as BarRenderer, Ea as BaseFinanceChart, de as BaselineRenderer, pi as BinanceAdapter, et as BollingerBandsIndicator, Gr as BracketTool, Ti as BybitAdapter, kt as CCIIndicator, Pt as CMFIndicator, re as CandlestickRenderer, w as CanvasLayer, xt as ChaikinOscillatorIndicator, cn as ChaikinVolatilityIndicator, en as ChandeMomentumIndicator, _t as ChandelierExitIndicator, Ri as ChartLegend, ca as ChartStateManager, Lt as ChoppinessIndexIndicator, yi as CoinbaseAdapter, He as CompareRenderer, Vt as ConnorsRSIIndicator, Ut as CoppockIndicator, zn as CrosshairHandler, Un as CrosshairTooltip, oi as CurrentPriceLine, Li as DEFAULT_LEGEND_CONFIG, Xi as DEFAULT_SESSION_HOURS, D as DPRManager, ua as DataExporter, vr as DateRangeTool, ze as DepthHeatmapBuffer, Be as DepthHeatmapRenderer, zr as DepthOverlay, Zt as DetrendedPriceOscillatorIndicator, vn as DisparityIndexIndicator, ot as DonchianChannelIndicator, H as DrawingBase, Qn as DrawingManager, $n as DrawingRenderer, $e as EMAIndicator, nn as EaseOfMovementIndicator, Ca as Easing, Kt as ElderRayIndicator, gr as ElliottWaveTool, fr as EllipseTool, G as Emitter, ge as EquivolumeRenderer, Xn as EventBus, ar as ExtendedLineTool, ur as FibExtensionTool, cr as FibRetracementTool, Ar as FibTimeZonesTool, Da as FinanceCrosshair, Xt as FisherTransformIndicator, Bt as ForceIndexIndicator, Er as GannBoxTool, wr as GannFanTool, On as GridRenderer, ve as HLCAreaRenderer, ue as HollowCandleRenderer, nr as HorizontalLineTool, ft as HullMAIndicator, nt as IchimokuIndicator, I as IndicatorBase, Ze as IndicatorEngine, Dn as IndicatorWorkerHost, Mn as InteractionManager, Wt as KSTIndicator, pe as KagiRenderer, at as KeltnerChannelIndicator, Hn as KeyboardHandler, Yt as KlingerIndicator, Mi as KrakenAdapter, T as LayerManager, se as LineRenderer, be as LineWithMarkersRenderer, dt as LinearRegressionChannelIndicator, Ct as MACDIndicator, At as MFIIndicator, ht as MTFMovingAverageIndicator, Oe as MarketProfileRenderer, $t as MassIndexIndicator, ha as MeasureOverlay, yr as MeasureTool, mi as MockAdapter, Dt as OBVIndicator, Zr as OrderDraftTool, Mr as OrderRenderer, Nn as PanHandler, Ln as PaneResizeHandler, ni as PaperExecutionAdapter, rt as ParabolicSARIndicator, or as ParallelChannelTool, pn as PercentagePriceOscillatorIndicator, Ne as PeriodLevelsRenderer, Kn as PinnedTooltip, mr as PitchforkTool, Le as PivotMarkersRenderer, ct as PivotPointsIndicator, me as PointAndFigureRenderer, gi as PollingAdapter, Rr as PositionRenderer, bn as PrettyGoodOscillatorIndicator, kn as PriceAxis, _r as PriceRangeTool, sn as PriceVolumeTrendIndicator, yn as QstickIndicator, Mt as ROCIndicator, St as RSIIndicator, ir as RayTool, ai as ReconnectManager, dr as RectangleTool, sr as RegressionChannelTool, _n as RelativeMomentumIndexIndicator, ln as RelativeVigorIndicator, ee as RenderEngine, E as RenderLoop, fe as RenkoRenderer, ci as ReplayController, ea as ReplayManager, Qe as SMAIndicator, qt as SchaffTrendCycleIndicator, zi as Screenshot, Hi as SessionBreaks, Zi as SessionShading, gt as SessionVWAPIndicator, fa as SignalMarkerManager, xn as StdDevIndicator, ye as StepLineRenderer, wt as StochasticIndicator, un as StochasticRSIIndicator, si as StreamManager, it as SupertrendIndicator, tn as TRIXIndicator, Nt as TSIIndicator, xr as TextAnnotationTool, ii as TickAggregator, jn as TimeAxis, ma as TradeZoneManager, Vr as TradingContextMenu, Br as TradingDragHandler, ei as TradingManager, ti as TradingRenderer, tr as TrendLineTool, pr as TriangleTool, Rt as UltimateOscillatorIndicator, la as UndoRedoManager, wn as VROCIndicator, tt as VWAPIndicator, rr as VerticalLineTool, te as Viewport, he as VolumeCandleRenderer, Ft as VolumeDeltaIndicator, Sn as VolumeProfileIndicator, Or as VolumeProfileRangeTool, Se as VolumeProfileRenderer, xe as VolumeRenderer, It as VortexIndicator, Bi as Watermark, hi as WebSocketAdapter, an as WilliamsADIndicator, Ot as WilliamsRIndicator, ut as ZigZagIndicator, Pn as ZoomHandler, Ee as assignSessionLetters, O as barIndexToX, Ur as bracketRiskReward, Fe as classifyPivots, Hr as computeBracketDefaults, we as computeMarketProfile, Me as computePeriodLevels, De as computeSessionProfiles, er as findDominantSwing, Ie as findPivots, R as getIntParam, L as getNumberParam, ne as getVisibleData, Yr as inferOrderType, Yi as isRegularSession, En as isWorkerResponse, po as layoutSquarifiedTreemap, co as layoutUniformGrid, ie as lttbDownsample, oe as lttbVisibleIndices, Ji as minuteOfDay, k as priceToY, jr as registerBuiltInDrawingTools, Tn as registerBuiltInIndicators, Ua as renderDepthChart, so as renderEquityCurve, ts as renderGauge, bo as renderHeatmap, Oa as renderSparkline, Bo as renderWaterfall, N as resolveBarIndex, P as timeToX, M as timestampToBarIndex, Ue as toHeikinAshi, qe as toKagi, Ke as toLineBreak, Je as toPointAndFigure, Ye as toRangeBars, We as toRenko, Te as tpoLetter, A as xToBarIndex, F as xToTime, j as yToPrice };
11121
+ export { Et as ADXIndicator, Tt as ATRIndicator, gn as AcceleratorOscillatorIndicator, wn as AccumulationDistributionIndicator, Ln as AlertDragHandler, ea as AlertManager, vt as AlligatorIndicator, lt as AnchoredVWAPIndicator, Or as AnchoredVWAPTool, Ta as Animator, ce as AreaRenderer, jt as AroonIndicator, Cr as ArrowTool, bt as AwesomeOscillatorIndicator, In as AxisDragHandler, Qt as BalanceOfPowerIndicator, Hi as BarCountdown, le as BarRenderer, Da as BaseFinanceChart, de as BaselineRenderer, mi as BinanceAdapter, et as BollingerBandsIndicator, Kr as BracketTool, Ei as BybitAdapter, kt as CCIIndicator, Pt as CMFIndicator, re as CandlestickRenderer, T as CanvasLayer, xt as ChaikinOscillatorIndicator, ln as ChaikinVolatilityIndicator, en as ChandeMomentumIndicator, _t as ChandelierExitIndicator, zi as ChartLegend, la as ChartStateManager, Lt as ChoppinessIndexIndicator, bi as CoinbaseAdapter, He as CompareRenderer, Vt as ConnorsRSIIndicator, Ut as CoppockIndicator, Bn as CrosshairHandler, Wn as CrosshairTooltip, si as CurrentPriceLine, Ri as DEFAULT_LEGEND_CONFIG, Zi as DEFAULT_SESSION_HOURS, O as DPRManager, da as DataExporter, yr as DateRangeTool, ze as DepthHeatmapBuffer, Be as DepthHeatmapRenderer, Br as DepthOverlay, Zt as DetrendedPriceOscillatorIndicator, yn as DisparityIndexIndicator, ot as DonchianChannelIndicator, H as DrawingBase, $n as DrawingManager, er as DrawingRenderer, $e as EMAIndicator, rn as EaseOfMovementIndicator, wa as Easing, Kt as ElderRayIndicator, _r as ElliottWaveTool, pr as EllipseTool, G as Emitter, ge as EquivolumeRenderer, Zn as EventBus, or as ExtendedLineTool, dr as FibExtensionTool, lr as FibRetracementTool, jr as FibTimeZonesTool, Oa as FinanceCrosshair, Xt as FisherTransformIndicator, Bt as ForceIndexIndicator, Dr as GannBoxTool, Tr as GannFanTool, kn as GridRenderer, ve as HLCAreaRenderer, ue as HollowCandleRenderer, rr as HorizontalLineTool, ft as HullMAIndicator, nt as IchimokuIndicator, L as IndicatorBase, Ze as IndicatorEngine, On as IndicatorWorkerHost, Nn as InteractionManager, Wt as KSTIndicator, pe as KagiRenderer, at as KeltnerChannelIndicator, Un as KeyboardHandler, Yt as KlingerIndicator, Ni as KrakenAdapter, E as LayerManager, se as LineRenderer, be as LineWithMarkersRenderer, dt as LinearRegressionChannelIndicator, Ct as MACDIndicator, At as MFIIndicator, ht as MTFMovingAverageIndicator, Oe as MarketProfileRenderer, $t as MassIndexIndicator, ga as MeasureOverlay, br as MeasureTool, hi as MockAdapter, Dt as OBVIndicator, Qr as OrderDraftTool, Nr as OrderRenderer, Pn as PanHandler, Rn as PaneResizeHandler, ri as PaperExecutionAdapter, rt as ParabolicSARIndicator, sr as ParallelChannelTool, mn as PercentagePriceOscillatorIndicator, Ne as PeriodLevelsRenderer, qn as PinnedTooltip, hr as PitchforkTool, Le as PivotMarkersRenderer, ct as PivotPointsIndicator, me as PointAndFigureRenderer, _i as PollingAdapter, zr as PositionRenderer, xn as PrettyGoodOscillatorIndicator, An as PriceAxis, vr as PriceRangeTool, cn as PriceVolumeTrendIndicator, bn as QstickIndicator, Mt as ROCIndicator, St as RSIIndicator, ar as RayTool, oi as ReconnectManager, fr as RectangleTool, cr as RegressionChannelTool, vn as RelativeMomentumIndexIndicator, un as RelativeVigorIndicator, ee as RenderEngine, D as RenderLoop, fe as RenkoRenderer, li as ReplayController, ta as ReplayManager, Qe as SMAIndicator, qt as SchaffTrendCycleIndicator, Bi as Screenshot, Ui as SessionBreaks, Qi as SessionShading, gt as SessionVWAPIndicator, pa as SignalMarkerManager, Sn as StdDevIndicator, ye as StepLineRenderer, wt as StochasticIndicator, dn as StochasticRSIIndicator, ci as StreamManager, it as SupertrendIndicator, tn as TRIXIndicator, Nt as TSIIndicator, Sr as TextAnnotationTool, ai as TickAggregator, Mn as TimeAxis, ha as TradeZoneManager, Hr as TradingContextMenu, Vr as TradingDragHandler, ti as TradingManager, ni as TradingRenderer, nr as TrendLineTool, mr as TriangleTool, Rt as UltimateOscillatorIndicator, ua as UndoRedoManager, Tn as VROCIndicator, tt as VWAPIndicator, ir as VerticalLineTool, te as Viewport, he as VolumeCandleRenderer, Ft as VolumeDeltaIndicator, Cn as VolumeProfileIndicator, kr as VolumeProfileRangeTool, Se as VolumeProfileRenderer, xe as VolumeRenderer, It as VortexIndicator, Vi as Watermark, gi as WebSocketAdapter, on as WilliamsADIndicator, Ot as WilliamsRIndicator, ut as ZigZagIndicator, Fn as ZoomHandler, Ee as assignSessionLetters, k as barIndexToX, Wr as bracketRiskReward, Fe as classifyPivots, Ur as computeBracketDefaults, we as computeMarketProfile, Me as computePeriodLevels, De as computeSessionProfiles, tr as findDominantSwing, Ie as findPivots, z as getIntParam, R as getNumberParam, ne as getVisibleData, Xr as inferOrderType, Xi as isRegularSession, Dn as isWorkerResponse, mo as layoutSquarifiedTreemap, lo as layoutUniformGrid, ie as lttbDownsample, oe as lttbVisibleIndices, Yi as minuteOfDay, A as priceToY, Mr as registerBuiltInDrawingTools, En as registerBuiltInIndicators, Wa as renderDepthChart, co as renderEquityCurve, ns as renderGauge, xo as renderHeatmap, ka as renderSparkline, Vo as renderWaterfall, P as resolveBarIndex, F as timeToX, N as timestampToBarIndex, Ue as toHeikinAshi, qe as toKagi, Ke as toLineBreak, Je as toPointAndFigure, Ye as toRangeBars, We as toRenko, Te as tpoLetter, j as xToBarIndex, I as xToTime, M as yToPrice };
11122
11122
 
11123
11123
  //# sourceMappingURL=index.js.map