minerva-design 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/charts/engine/data.cjs +1 -1
  3. package/dist/charts/engine/data.cjs.map +1 -1
  4. package/dist/charts/engine/data.d.cts +2 -0
  5. package/dist/charts/engine/data.d.ts +2 -0
  6. package/dist/charts/engine/data.js +6 -4
  7. package/dist/charts/engine/data.js.map +1 -1
  8. package/dist/charts/engine/defaults.cjs +1 -1
  9. package/dist/charts/engine/defaults.cjs.map +1 -1
  10. package/dist/charts/engine/defaults.js +22 -18
  11. package/dist/charts/engine/defaults.js.map +1 -1
  12. package/dist/charts/engine/graph/chart.cjs +1 -1
  13. package/dist/charts/engine/graph/chart.cjs.map +1 -1
  14. package/dist/charts/engine/graph/chart.js +532 -493
  15. package/dist/charts/engine/graph/chart.js.map +1 -1
  16. package/dist/charts/engine/graph/geometry.cjs +1 -1
  17. package/dist/charts/engine/graph/geometry.cjs.map +1 -1
  18. package/dist/charts/engine/graph/geometry.d.cts +12 -2
  19. package/dist/charts/engine/graph/geometry.d.ts +12 -2
  20. package/dist/charts/engine/graph/geometry.js +35 -31
  21. package/dist/charts/engine/graph/geometry.js.map +1 -1
  22. package/dist/charts/engine/model.cjs +1 -1
  23. package/dist/charts/engine/model.cjs.map +1 -1
  24. package/dist/charts/engine/model.js +95 -74
  25. package/dist/charts/engine/model.js.map +1 -1
  26. package/dist/charts/engine/orderbook/field.cjs +1 -1
  27. package/dist/charts/engine/orderbook/field.cjs.map +1 -1
  28. package/dist/charts/engine/orderbook/field.d.cts +15 -2
  29. package/dist/charts/engine/orderbook/field.d.ts +15 -2
  30. package/dist/charts/engine/orderbook/field.js +21 -9
  31. package/dist/charts/engine/orderbook/field.js.map +1 -1
  32. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  33. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  34. package/dist/charts/engine/orderbook/heatmap.d.cts +29 -0
  35. package/dist/charts/engine/orderbook/heatmap.d.ts +29 -0
  36. package/dist/charts/engine/orderbook/heatmap.js +576 -453
  37. package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
  38. package/dist/charts/engine/orderbook/types.d.cts +36 -11
  39. package/dist/charts/engine/orderbook/types.d.ts +36 -11
  40. package/dist/charts/engine/presets.cjs +1 -1
  41. package/dist/charts/engine/presets.cjs.map +1 -1
  42. package/dist/charts/engine/presets.d.cts +16 -3
  43. package/dist/charts/engine/presets.d.ts +16 -3
  44. package/dist/charts/engine/presets.js +42 -32
  45. package/dist/charts/engine/presets.js.map +1 -1
  46. package/dist/charts/engine/scene.cjs +1 -1
  47. package/dist/charts/engine/scene.cjs.map +1 -1
  48. package/dist/charts/engine/scene.d.cts +4 -2
  49. package/dist/charts/engine/scene.d.ts +4 -2
  50. package/dist/charts/engine/scene.js +185 -107
  51. package/dist/charts/engine/scene.js.map +1 -1
  52. package/dist/charts/engine/three-d/oit.cjs +119 -34
  53. package/dist/charts/engine/three-d/oit.cjs.map +1 -1
  54. package/dist/charts/engine/three-d/oit.d.cts +65 -10
  55. package/dist/charts/engine/three-d/oit.d.ts +65 -10
  56. package/dist/charts/engine/three-d/oit.js +119 -34
  57. package/dist/charts/engine/three-d/oit.js.map +1 -1
  58. package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
  59. package/dist/charts/engine/three-d/render-types.d.cts +19 -0
  60. package/dist/charts/engine/three-d/render-types.d.ts +19 -0
  61. package/dist/charts/engine/three-d/render-types.js.map +1 -1
  62. package/dist/charts/engine/three-d/shaders.cjs +14 -6
  63. package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
  64. package/dist/charts/engine/three-d/shaders.d.cts +6 -1
  65. package/dist/charts/engine/three-d/shaders.d.ts +6 -1
  66. package/dist/charts/engine/three-d/shaders.js +40 -26
  67. package/dist/charts/engine/three-d/shaders.js.map +1 -1
  68. package/dist/charts/engine/three-d/webgl.cjs +1 -1
  69. package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
  70. package/dist/charts/engine/three-d/webgl.js +167 -125
  71. package/dist/charts/engine/three-d/webgl.js.map +1 -1
  72. package/dist/charts/engine/three-d/webgpu.cjs +1 -1
  73. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
  74. package/dist/charts/engine/three-d/webgpu.js +169 -140
  75. package/dist/charts/engine/three-d/webgpu.js.map +1 -1
  76. package/dist/charts/engine/trading/chart.cjs +1 -1
  77. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  78. package/dist/charts/engine/trading/chart.js +1149 -1023
  79. package/dist/charts/engine/trading/chart.js.map +1 -1
  80. package/dist/charts/engine/trading/labels.cjs +1 -1
  81. package/dist/charts/engine/trading/labels.cjs.map +1 -1
  82. package/dist/charts/engine/trading/labels.js +12 -0
  83. package/dist/charts/engine/trading/labels.js.map +1 -1
  84. package/dist/charts/engine/trading/layout.cjs +2 -0
  85. package/dist/charts/engine/trading/layout.cjs.map +1 -0
  86. package/dist/charts/engine/trading/layout.d.cts +37 -0
  87. package/dist/charts/engine/trading/layout.d.ts +37 -0
  88. package/dist/charts/engine/trading/layout.js +63 -0
  89. package/dist/charts/engine/trading/layout.js.map +1 -0
  90. package/dist/charts/engine/trading/types.d.cts +24 -7
  91. package/dist/charts/engine/trading/types.d.ts +24 -7
  92. package/dist/charts/engine/types.d.cts +21 -8
  93. package/dist/charts/engine/types.d.ts +21 -8
  94. package/dist/core/contracts.cjs +1 -1
  95. package/dist/core/contracts.cjs.map +1 -1
  96. package/dist/core/contracts.js +1 -1
  97. package/dist/core/contracts.js.map +1 -1
  98. package/dist/native/charts/src/engine/data.cjs +1 -1
  99. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  100. package/dist/native/charts/src/engine/data.js +6 -4
  101. package/dist/native/charts/src/engine/data.js.map +1 -1
  102. package/dist/native/charts/src/engine/model.cjs +1 -1
  103. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  104. package/dist/native/charts/src/engine/model.js +104 -83
  105. package/dist/native/charts/src/engine/model.js.map +1 -1
  106. package/dist/native/charts/src/engine/presets.cjs +1 -1
  107. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  108. package/dist/native/charts/src/engine/presets.js +42 -32
  109. package/dist/native/charts/src/engine/presets.js.map +1 -1
  110. package/dist/native/charts/src/engine/scene.cjs +1 -1
  111. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  112. package/dist/native/charts/src/engine/scene.js +185 -107
  113. package/dist/native/charts/src/engine/scene.js.map +1 -1
  114. package/dist/taro/index.js +1263 -1152
  115. package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +11 -0
  116. package/dist/vue/components/Chart/orderbook.d.ts +7 -0
  117. package/dist/vue/components/Chart/orderbook.js +2 -0
  118. package/dist/vue/components/Chart/orderbook.js.map +1 -1
  119. package/dist/weapp/charts/canvas.js +234 -58
  120. package/package.json +1 -1
@@ -1,20 +1,21 @@
1
1
  import { createDataCanvas as e, styleElement as t } from "../dom.js";
2
2
  import { luminance as n, mix as r, packColor as i, parseColor as a, toCss as o } from "../color.js";
3
- import { localeLabels as s, resolveLocale as c } from "../locale.js";
4
- import { stepDecimals as l } from "../scale.js";
5
- import { createRenderer as u } from "../renderers/detect.js";
6
- import { followDefaultRenderer as d } from "../renderers/follow.js";
7
- import { readTheme as f, themeColorsChanged as p, watchTheme as m } from "../theme.js";
8
- import { anchorCount as h, drawingPrices as g, handlePoints as _, hitDrawing as v, isFillable as y, isPosition as b, moveHandle as ee, paintDrawing as te, setDash as ne } from "./drawings.js";
9
- import { DAY as re, HOUR as ie, MINUTE as ae, boundaryWeight as oe, detectPrecision as se, formatCountdown as ce, formatCrosshairTime as le, formatFixed as ue, formatPercent as de, formatVolume as fe, inferTimeframe as pe, isTimeZone as me, pickTicks as he, priceFormatter as ge, redUpLocale as _e, tickText as ve, zoneOffset as ye } from "./format.js";
10
- import { AreaBuffer as be, BarBuffer as xe, LineBuffer as Se, TrendBuffer as Ce, candleMetrics as we, clampRange as Te, pixelRange as Ee } from "./geometry.js";
11
- import { heikinAshiInto as De, parseTimeframe as Oe, volumeProfile as ke } from "./indicators.js";
12
- import { TRADING_LABELS as Ae, fill as x } from "./labels.js";
13
- import { createScale as je, fitScale as Me, fromScaled as Ne, panScale as Pe, scaleTicks as Fe, scaledAt as Ie, toScaled as Le, valueAt as Re, yOf as S, yOfScaled as ze, zoomScale as Be } from "./scale.js";
14
- import { appendBars as Ve, barAt as He, createPyramid as Ue, createRangePyramid as We, createStore as Ge, indexOfTime as Ke, inputLength as qe, invalidateRangePyramid as Je, lowerBoundTime as Ye, prependBars as Xe, pyramidLevel as Ze, rangeLevel as Qe, readBar as $e, setBars as et, updateBar as tt } from "./store.js";
15
- import { LINE_COLORS as nt, buildStudies as rt } from "./studies.js";
3
+ import { languageOf as s, localeLabels as c, resolveLocale as l } from "../locale.js";
4
+ import { stepDecimals as u } from "../scale.js";
5
+ import { createRenderer as d } from "../renderers/detect.js";
6
+ import { followDefaultRenderer as f } from "../renderers/follow.js";
7
+ import { readTheme as p, themeColorsChanged as m, watchTheme as h } from "../theme.js";
8
+ import { anchorCount as g, drawingPrices as _, handlePoints as v, hitDrawing as y, isFillable as b, isPosition as x, moveHandle as S, paintDrawing as ee, setDash as te } from "./drawings.js";
9
+ import { DAY as ne, HOUR as re, MINUTE as ie, boundaryWeight as ae, detectPrecision as C, formatCountdown as oe, formatCrosshairTime as se, formatFixed as ce, formatPercent as le, formatVolume as ue, inferTimeframe as de, isTimeZone as fe, pickTicks as pe, priceFormatter as me, redUpLocale as he, tickText as ge, zoneOffset as _e } from "./format.js";
10
+ import { AreaBuffer as ve, BarBuffer as ye, LineBuffer as be, TrendBuffer as xe, candleMetrics as Se, clampRange as Ce, pixelRange as we } from "./geometry.js";
11
+ import { heikinAshiInto as Te, parseTimeframe as Ee, volumeProfile as De } from "./indicators.js";
12
+ import { TRADING_LABELS as Oe, fill as ke } from "./labels.js";
13
+ import { firstFree as Ae, placeTags as je, stackLabels as Me } from "./layout.js";
14
+ import { createScale as Ne, fitScale as Pe, fromScaled as Fe, panScale as Ie, scaleTicks as Le, scaledAt as Re, toScaled as ze, valueAt as Be, yOf as w, yOfScaled as Ve, zoomScale as He } from "./scale.js";
15
+ import { appendBars as Ue, barAt as We, createPyramid as Ge, createRangePyramid as Ke, createStore as qe, indexOfTime as Je, inputLength as Ye, invalidateRangePyramid as Xe, lowerBoundTime as Ze, prependBars as Qe, pyramidLevel as $e, rangeLevel as et, readBar as tt, setBars as nt, updateBar as rt } from "./store.js";
16
+ import { LINE_COLORS as it, buildStudies as at } from "./studies.js";
16
17
  //#region src/engine/trading/chart.ts
17
- var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color, #089981)", lt = "var(--danger-color, #f23645)", ut = "var(--warning-color, #f59e0b)", dt = "var(--primary-color, #2962ff)", ft = 100, pt = [
18
+ var ot = 28, st = 60, ct = 60, lt = 48, T = "price", ut = "var(--success-color, #089981)", dt = "var(--danger-color, #f23645)", ft = "var(--warning-color, #f59e0b)", pt = "var(--primary-color, #2962ff)", mt = 100, ht = [
18
19
  "#2962ff",
19
20
  "#089981",
20
21
  "#f23645",
@@ -23,26 +24,26 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
23
24
  "#0ea5e9",
24
25
  "#ec4899",
25
26
  "#787b86"
26
- ], mt = [
27
+ ], gt = [
27
28
  "solid",
28
29
  "dashed",
29
30
  "dotted"
30
- ], ht = /* @__PURE__ */ new WeakMap(), gt = {
31
+ ], _t = /* @__PURE__ */ new WeakMap(), vt = {
31
32
  order: "limit",
32
33
  position: "position",
33
34
  takeProfit: "takeProfit",
34
35
  stopLoss: "stopLoss",
35
36
  alert: "alert"
36
- }, w = (e, t, n) => e < t ? t : e > n ? n : e, _t = (e) => {
37
+ }, E = (e, t, n) => e < t ? t : e > n ? n : e, yt = (e) => {
37
38
  let t = a(e);
38
39
  return t && n(t) > .5 ? "#0b0e11" : "#fff";
39
- }, T = Number.isFinite, vt = "B S O Shift+O ArrowUp ArrowDown Shift+ArrowUp Shift+ArrowDown Enter Escape Delete", yt = {
40
+ }, D = Number.isFinite, bt = "B S Alt+B Alt+S O Shift+O ArrowUp ArrowDown Shift+ArrowUp Shift+ArrowDown Enter Escape Delete", xt = (e, t, n) => D(n) ? e === "buy" ? t <= n ? "limit" : "stop" : t >= n ? "limit" : "stop" : "limit", St = {
40
41
  minWidth: "0",
41
42
  maxWidth: "100%",
42
43
  overflow: "hidden",
43
44
  textOverflow: "ellipsis"
44
- }, bt = "display:inline-flex;gap:3px;max-width:100%;overflow:hidden;text-overflow:ellipsis", E = (n, a = {}) => {
45
- let E = n.ownerDocument, xt = E.defaultView, D = { ...a }, St = !1, Ct = (e, n) => t(E.createElement(e), n), O = Ct("div", {
45
+ }, Ct = "display:inline-flex;gap:3px;max-width:100%;overflow:hidden;text-overflow:ellipsis", O = (n, a = {}) => {
46
+ let O = n.ownerDocument, wt = O.defaultView, k = { ...a }, Tt = !1, Et = (e, n) => t(O.createElement(e), n), A = Et("div", {
46
47
  position: "relative",
47
48
  width: "100%",
48
49
  height: "100%",
@@ -55,17 +56,17 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
55
56
  color: "var(--text-color, #1f2937)",
56
57
  cursor: "crosshair"
57
58
  });
58
- O.className = "minerva-trading-chart", O.tabIndex = 0, O.setAttribute("role", "figure"), O.setAttribute("aria-roledescription", "chart");
59
- let wt = (e) => Ct(e, {
59
+ A.className = "minerva-trading-chart", A.tabIndex = 0, A.setAttribute("role", "figure"), A.setAttribute("aria-roledescription", "chart");
60
+ let Dt = (e) => Et(e, {
60
61
  position: "absolute",
61
62
  left: "0",
62
63
  top: "0",
63
64
  pointerEvents: "none"
64
- }), Tt = wt("canvas"), Et = wt("canvas");
65
- Tt.setAttribute("aria-hidden", "true"), Et.setAttribute("aria-hidden", "true");
66
- let Dt = wt("div");
67
- Dt.style.right = "0", Dt.style.bottom = "0";
68
- let Ot = Ct("button", {
65
+ }), Ot = Dt("canvas"), kt = Dt("canvas");
66
+ Ot.setAttribute("aria-hidden", "true"), kt.setAttribute("aria-hidden", "true");
67
+ let At = Dt("div");
68
+ At.style.right = "0", At.style.bottom = "0";
69
+ let jt = Et("button", {
69
70
  position: "absolute",
70
71
  display: "none",
71
72
  alignItems: "center",
@@ -80,8 +81,8 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
80
81
  boxShadow: "0 4px 14px -4px rgba(15, 23, 42, 0.25)",
81
82
  cursor: "pointer"
82
83
  });
83
- Ot.type = "button", Ot.innerHTML = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 3l5 5-5 5M9 3l5 5-5 5\"/></svg>";
84
- let kt = Ct("div", {
84
+ jt.type = "button", jt.innerHTML = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 3l5 5-5 5M9 3l5 5-5 5\"/></svg>";
85
+ let Mt = Et("div", {
85
86
  position: "absolute",
86
87
  width: "1px",
87
88
  height: "1px",
@@ -90,8 +91,8 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
90
91
  clipPath: "inset(50%)",
91
92
  whiteSpace: "nowrap"
92
93
  });
93
- kt.setAttribute("aria-live", "polite");
94
- let k = Ct("div", {
94
+ Mt.setAttribute("aria-live", "polite");
95
+ let Nt = Et("div", {
95
96
  position: "absolute",
96
97
  display: "none",
97
98
  alignItems: "center",
@@ -104,8 +105,8 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
104
105
  zIndex: "2",
105
106
  cursor: "default"
106
107
  });
107
- k.className = "minerva-trading-toolbar", k.setAttribute("role", "toolbar");
108
- let A = Ct("textarea", {
108
+ Nt.className = "minerva-trading-toolbar", Nt.setAttribute("role", "toolbar");
109
+ let j = Et("textarea", {
109
110
  position: "absolute",
110
111
  display: "none",
111
112
  minWidth: "120px",
@@ -121,174 +122,174 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
121
122
  boxShadow: "0 6px 18px -6px rgba(15, 23, 42, 0.3)",
122
123
  zIndex: "3"
123
124
  });
124
- A.rows = 1;
125
- let At = Ct("style", {});
126
- At.textContent = ".minerva-trading-toolbar button{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;padding:0 5px;border-radius:5px;cursor:pointer;color:var(--text-color,#1f2937)}.minerva-trading-toolbar button:hover{background:color-mix(in srgb,var(--text-color,#1f2937) 9%,transparent)}.minerva-trading-toolbar button:focus-visible{box-shadow:inset 0 0 0 2px var(--primary-color,#2962ff)}.minerva-trading-toolbar button[aria-pressed=\"true\"]{background:color-mix(in srgb,var(--primary-color,#2962ff) 16%,transparent);color:var(--primary-color,#2962ff)}.minerva-trading-toolbar .sep{width:1px;height:18px;margin:0 3px;background:var(--border-color,#e5e7eb)}", O.append(At, Tt, Et, Dt, Ot, k, A, kt), n.appendChild(O);
127
- let j = Ge(), jt = Ue(), Mt = {
128
- time: j.time,
125
+ j.rows = 1;
126
+ let Pt = Et("style", {});
127
+ Pt.textContent = ".minerva-trading-toolbar button{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;padding:0 5px;border-radius:5px;cursor:pointer;color:var(--text-color,#1f2937)}.minerva-trading-toolbar button:hover{background:color-mix(in srgb,var(--text-color,#1f2937) 9%,transparent)}.minerva-trading-toolbar button:focus-visible{box-shadow:inset 0 0 0 2px var(--primary-color,#2962ff)}.minerva-trading-toolbar button[aria-pressed=\"true\"]{background:color-mix(in srgb,var(--primary-color,#2962ff) 16%,transparent);color:var(--primary-color,#2962ff)}.minerva-trading-toolbar .sep{width:1px;height:18px;margin:0 3px;background:var(--border-color,#e5e7eb)}", A.append(Pt, Ot, kt, At, jt, Nt, j, Mt), n.appendChild(A);
128
+ let M = qe(), Ft = Ge(), It = {
129
+ time: M.time,
129
130
  open: /* @__PURE__ */ new Float64Array(),
130
131
  high: /* @__PURE__ */ new Float64Array(),
131
132
  low: /* @__PURE__ */ new Float64Array(),
132
133
  close: /* @__PURE__ */ new Float64Array(),
133
- volume: j.volume
134
- }, Nt = 0, Pt = Ue(), M = [], Ft = /* @__PURE__ */ new Map(), It = /* @__PURE__ */ new Map(), Lt = [], Rt = /* @__PURE__ */ new WeakMap(), zt = /* @__PURE__ */ new WeakMap(), Bt = 0, Vt = 0, Ht = 2, Ut = re, N = D.barSpacing ?? 8, P = NaN, F = 0, I = 0, Wt = at, Gt = 0, Kt = 0, L = [], qt = /* @__PURE__ */ new Map(), Jt = /* @__PURE__ */ new Map(), Yt = null, Xt = 0, R = f(O), Zt = 0, Qt = 0, z = null, $t = 0, en = 0, tn = [], nn = "", rn = -1, an = 0, on, sn = new Promise((e) => {
135
- on = e;
136
- }), B = null, V = null, H = null, U = null, cn = /* @__PURE__ */ new Map(), ln = null, un = null, dn = null, fn = null, W = D.drawings ?? [], pn = null, mn = W, hn = [], gn = [], _n = "false|false", vn = D.drawingMode ?? "cursor", yn = null, bn = null, G = null, xn = 0, Sn = C, Cn = 0, wn = /* @__PURE__ */ new Map(), Tn = null, En = "", Dn = !1, On = /* @__PURE__ */ new Map(), kn = null, An = [], jn = -1, Mn = null, Nn = !1, Pn = null, Fn = "", In = NaN, Ln = null, K = null, Rn = !1, zn = 4, Bn = null, Vn = /* @__PURE__ */ new Map(), q = (e, t) => {
137
- Vn.get(e)?.forEach((e) => e(t));
138
- }, J = c(D.locale), Hn = s(Ae, J, D.labels), Un = () => {
139
- J = c(D.locale), Hn = s(Ae, J, D.labels);
140
- }, Wn = () => Hn, Y = () => j.length, Gn = () => D.chartStyle ?? "candles", Kn = () => D.colorConvention === "redUp" || D.colorConvention === "auto" && _e(J), qn = () => D.upColor ?? (Kn() ? lt : ct), Jn = () => D.downColor ?? (Kn() ? ct : lt), Yn = (e, t = R.primary) => R.resolve ? R.resolve(e, t) : t, X = (e, t = 1) => o(Yn(e), t), Xn = () => D.precision ?? Ht, Zn = ge(2, void 0), Qn = "", Z = (e) => {
141
- if (D.formatPrice) return D.formatPrice(e);
142
- let t = `${Xn()}|${J}`;
143
- return t !== Qn && (Zn = ge(Xn(), J), Qn = t), Zn(e);
144
- }, $n = () => (D.timeframe === void 0 ? null : Oe(D.timeframe)) ?? {
134
+ volume: M.volume
135
+ }, Lt = 0, Rt = Ge(), zt = [], Bt = /* @__PURE__ */ new Map(), Vt = /* @__PURE__ */ new Map(), Ht = [], Ut = /* @__PURE__ */ new WeakMap(), Wt = /* @__PURE__ */ new WeakMap(), Gt = 0, Kt = 0, qt = 2, Jt = ne, N = k.barSpacing ?? 8, P = NaN, F = 0, I = 0, Yt = st, Xt = 0, Zt = 0, L = [], Qt = /* @__PURE__ */ new Map(), $t = /* @__PURE__ */ new Map(), en = null, tn = 0, R = p(A), nn = 0, rn = 0, z = null, an = 0, on = 0, sn = [], cn = "", ln = -1, un = 0, dn, fn = new Promise((e) => {
136
+ dn = e;
137
+ }), B = null, V = null, pn = !1, H = null, U = null, mn = /* @__PURE__ */ new Map(), hn = null, gn = null, _n = null, vn = null, W = k.drawings ?? [], yn = null, bn = W, xn = [], Sn = [], Cn = "false|false", wn = k.drawingMode ?? "cursor", Tn = null, En = null, G = null, Dn = 0, On = T, kn = 0, An = /* @__PURE__ */ new Map(), jn = null, Mn = "", Nn = !1, Pn = /* @__PURE__ */ new Map(), Fn = null, In = [], Ln = -1, Rn = null, zn = !1, Bn = null, Vn = "", Hn = NaN, Un = null, K = null, Wn = !1, Gn = 4, Kn = null, qn = /* @__PURE__ */ new Map(), q = (e, t) => {
138
+ qn.get(e)?.forEach((e) => e(t));
139
+ }, J = l(k.locale), Jn = c(Oe, J, k.labels), Yn = () => {
140
+ J = l(k.locale), Jn = c(Oe, J, k.labels);
141
+ }, Xn = () => Jn, Y = () => M.length, Zn = () => k.chartStyle ?? "candles", Qn = () => k.colorConvention === "redUp" || k.colorConvention === "auto" && he(J), $n = () => k.upColor ?? (Qn() ? dt : ut), er = () => k.downColor ?? (Qn() ? ut : dt), tr = (e, t = R.primary) => R.resolve ? R.resolve(e, t) : t, X = (e, t = 1) => o(tr(e), t), nr = () => k.precision ?? qt, rr = me(2, void 0), ir = "", Z = (e) => {
142
+ if (k.formatPrice) return k.formatPrice(e);
143
+ let t = `${nr()}|${J}`;
144
+ return t !== ir && (rr = me(nr(), J), ir = t), rr(e);
145
+ }, ar = () => (k.timeframe === void 0 ? null : Ee(k.timeframe)) ?? {
145
146
  unit: "ms",
146
- count: Ut,
147
- ms: Ut
148
- }, er = () => $n().ms, tr = (e, t = 400) => `${t} ${e}px ${R.fontFamily}`, nr = (e) => It.get(e.id) ?? e.config.visible ?? !0, Q = (e) => F + (e - P) * N, rr = (e) => P - (F - e) / N, ir = (e) => {
147
+ count: Jt,
148
+ ms: Jt
149
+ }, or = () => ar().ms, Q = (e, t = 400) => `${t} ${e}px ${R.fontFamily}`, sr = (e) => Vt.get(e.id) ?? e.config.visible ?? !0, cr = (e) => F + (e - P) * N, lr = (e) => P - (F - e) / N, ur = (e) => {
149
150
  let t = Y();
150
151
  if (!t) return 0;
151
152
  let n = Math.round(e);
152
- return n < 0 ? j.time[0] + n * er() : n >= t ? j.time[t - 1] + (n - t + 1) * er() : j.time[n];
153
- }, ar = (e) => {
153
+ return n < 0 ? M.time[0] + n * or() : n >= t ? M.time[t - 1] + (n - t + 1) * or() : M.time[n];
154
+ }, dr = (e) => {
154
155
  let t = Y();
155
156
  if (!t) return 0;
156
157
  let n = Math.floor(e);
157
158
  if (n < 0 || n >= t - 1) {
158
159
  let r = n < 0 ? 0 : t - 1;
159
- return j.time[r] + (e - r) * er();
160
+ return M.time[r] + (e - r) * or();
160
161
  }
161
162
  let r = e - n;
162
- return j.time[n] + r * (j.time[n + 1] - j.time[n]);
163
- }, or = (e) => {
163
+ return M.time[n] + r * (M.time[n + 1] - M.time[n]);
164
+ }, fr = (e) => {
164
165
  let t = Y();
165
166
  if (!t) return 0;
166
- if (e >= j.time[t - 1]) return t - 1 + (e - j.time[t - 1]) / er();
167
- if (e <= j.time[0]) return (e - j.time[0]) / er();
168
- let n = Ke(j.time, t, e), r = j.time[n + 1] - j.time[n];
169
- return n + (r > 0 ? (e - j.time[n]) / r : 0);
170
- }, sr, cr = (e) => D.utcOffset ?? (sr ? ye(e, sr) : -new Date(T(e) ? e : 0).getTimezoneOffset()), lr = (e) => cr(e), ur = (e) => e + cr(e) * ae, dr = (e) => e === "up" ? qn() : e === "down" ? Jn() : e, fr = (e, t, n) => e.level ? Qe(n, t, Y(), e.level) : {
167
+ if (e >= M.time[t - 1]) return t - 1 + (e - M.time[t - 1]) / or();
168
+ if (e <= M.time[0]) return (e - M.time[0]) / or();
169
+ let n = Je(M.time, t, e), r = M.time[n + 1] - M.time[n];
170
+ return n + (r > 0 ? (e - M.time[n]) / r : 0);
171
+ }, pr, mr = (e) => k.utcOffset ?? (pr ? _e(e, pr) : -new Date(D(e) ? e : 0).getTimezoneOffset()), hr = (e) => mr(e), gr = (e) => e + mr(e) * ie, _r = (e) => e === "up" ? $n() : e === "down" ? er() : e, vr = (e, t, n) => e.level ? et(n, t, Y(), e.level) : {
171
172
  min: t,
172
173
  max: t,
173
174
  last: t
174
- }, pr = (e) => {
175
- let t = zt.get(e);
176
- return t || zt.set(e, t = We()), t;
177
- }, mr = (e) => {
178
- let t = Rt.get(e);
179
- return t || Rt.set(e, t = We()), t;
180
- }, hr = (e) => {
175
+ }, yr = (e) => {
176
+ let t = Wt.get(e);
177
+ return t || Wt.set(e, t = Ke()), t;
178
+ }, br = (e) => {
179
+ let t = Ut.get(e);
180
+ return t || Ut.set(e, t = Ke()), t;
181
+ }, xr = (e) => {
181
182
  let t = Y();
182
183
  if (!t) return 0;
183
- let n = j.time[t - 1];
184
- return e > n ? t - 1 + (e - n) / er() : e < j.time[0] ? (e - j.time[0]) / er() : Ke(j.time, t, e);
185
- }, gr = () => Gn() === "heikinAshi" ? Mt : j, _r = (e) => {
186
- for (let t of M) {
187
- Ft.set(t, Math.min(Ft.get(t) ?? 0, e));
184
+ let n = M.time[t - 1];
185
+ return e > n ? t - 1 + (e - n) / or() : e < M.time[0] ? (e - M.time[0]) / or() : Je(M.time, t, e);
186
+ }, Sr = () => Zn() === "heikinAshi" ? It : M, Cr = (e) => {
187
+ for (let t of zt) {
188
+ Bt.set(t, Math.min(Bt.get(t) ?? 0, e));
188
189
  for (let n of t.outputs) {
189
- let t = Rt.get(n);
190
- t && Je(t, e);
190
+ let t = Ut.get(n);
191
+ t && Xe(t, e);
191
192
  }
192
- let n = zt.get(t);
193
- n && Je(n, e);
193
+ let n = Wt.get(t);
194
+ n && Xe(n, e);
194
195
  }
195
- Nt = Math.min(Nt, e);
196
- for (let t of Lt) t.valid = Math.min(t.valid, e), Je(t.lod, e);
197
- Bn = null;
196
+ Lt = Math.min(Lt, e);
197
+ for (let t of Ht) t.valid = Math.min(t.valid, e), Xe(t.lod, e);
198
+ Kn = null;
198
199
  let t = (t) => {
199
200
  for (let n of t.levels) n && (n.valid = Math.min(n.valid, Math.floor(e / n.size)));
200
201
  };
201
- t(jt), t(Pt);
202
- }, vr = () => {
202
+ t(Ft), t(Rt);
203
+ }, wr = () => {
203
204
  let e = Y();
204
- for (let t of M) {
205
- let n = Ft.get(t) ?? 0;
206
- n < e && (t.compute(j, n), Ft.set(t, e));
205
+ for (let t of zt) {
206
+ let n = Bt.get(t) ?? 0;
207
+ n < e && (t.compute(M, n), Bt.set(t, e));
207
208
  }
208
- if (Mt.time = j.time, Mt.volume = j.volume, Gn() === "heikinAshi" && Nt < e) {
209
- if (Mt.open.length < j.capacity) for (let e of [
209
+ if (It.time = M.time, It.volume = M.volume, Zn() === "heikinAshi" && Lt < e) {
210
+ if (It.open.length < M.capacity) for (let e of [
210
211
  "open",
211
212
  "high",
212
213
  "low",
213
214
  "close"
214
215
  ]) {
215
- let t = new Float64Array(j.capacity);
216
- t.set(Mt[e].subarray(0, Nt)), Mt[e] = t;
216
+ let t = new Float64Array(M.capacity);
217
+ t.set(It[e].subarray(0, Lt)), It[e] = t;
217
218
  }
218
- De(j.open, j.high, j.low, j.close, e, Mt, Nt), Nt = e;
219
+ Te(M.open, M.high, M.low, M.close, e, It, Lt), Lt = e;
219
220
  }
220
- for (let t of Lt) if (!(t.valid >= e)) {
221
- if (t.values.length < j.capacity) {
222
- let e = new Float64Array(j.capacity).fill(NaN);
221
+ for (let t of Ht) if (!(t.valid >= e)) {
222
+ if (t.values.length < M.capacity) {
223
+ let e = new Float64Array(M.capacity).fill(NaN);
223
224
  e.set(t.values.subarray(0, t.valid)), t.values = e;
224
225
  }
225
226
  for (let n = t.valid; n < e; n++) {
226
- let e = Ye(t.times, t.times.length, j.time[n] + .5) - 1;
227
+ let e = Ze(t.times, t.times.length, M.time[n] + .5) - 1;
227
228
  t.values[n] = e >= 0 ? t.data[e] : NaN;
228
229
  }
229
230
  t.valid = e;
230
231
  }
231
- }, yr = (e) => {
232
- _r(e);
232
+ }, Tr = (e) => {
233
+ Cr(e);
233
234
  let t = Y();
234
- e < t - 1 && Bt++, Vt++, t && (Ht = Math.max(e === 0 ? 0 : Ht, se(j.close, e, t), se(j.open, Math.max(e, t - 50), t)), (e === 0 || t < 80) && (Ut = pe(j.time, t))), $();
235
- }, br = () => {
236
- let { studies: e, reused: t } = rt(D.indicators ?? [], M, lr);
237
- for (let e of M) t.has(e) || Ft.delete(e);
238
- for (let n of e) t.has(n) || Ft.set(n, 0);
239
- M = e;
240
- for (let e of [...It.keys()]) M.some((t) => t.id === e) || It.delete(e);
241
- }, xr = () => {
242
- Lt = (D.compare ?? []).map((e, t) => {
235
+ e < t - 1 && Gt++, Kt++, t && (qt = Math.max(e === 0 ? 0 : qt, C(M.close, e, t), C(M.open, Math.max(e, t - 50), t)), (e === 0 || t < 80) && (Jt = de(M.time, t))), $();
236
+ }, Er = () => {
237
+ let { studies: e, reused: t } = at(k.indicators ?? [], zt, hr);
238
+ for (let e of zt) t.has(e) || Bt.delete(e);
239
+ for (let n of e) t.has(n) || Bt.set(n, 0);
240
+ zt = e;
241
+ for (let e of [...Vt.keys()]) zt.some((t) => t.id === e) || Vt.delete(e);
242
+ }, Dr = () => {
243
+ Ht = (k.compare ?? []).map((e, t) => {
243
244
  let n = [...e.data].sort((e, t) => e.time - t.time);
244
245
  return {
245
246
  id: e.id ?? e.name,
246
247
  name: e.name,
247
- color: e.color ?? nt[(t + 2) % nt.length],
248
+ color: e.color ?? it[(t + 2) % it.length],
248
249
  width: e.lineWidth ?? 1.5,
249
250
  times: Float64Array.from(n, (e) => e.time),
250
251
  data: Float64Array.from(n, (e) => e.value),
251
252
  values: /* @__PURE__ */ new Float64Array(),
252
253
  valid: 0,
253
- lod: We()
254
+ lod: Ke()
254
255
  };
255
256
  });
256
- }, Sr = () => {
257
+ }, Or = () => {
257
258
  let e = Y();
258
- if (!e || !T(P)) return !0;
259
- let t = Q(e - 1);
259
+ if (!e || !D(P)) return !0;
260
+ let t = cr(e - 1);
260
261
  return t >= 0 && t <= F + N * .5;
261
- }, Cr = (e) => {
262
- et(j, e), jt = Ue(), Pt = Ue(), Nt = 0, In = NaN;
263
- for (let e of qt.values()) e.auto = !0;
264
- P = Y() - 1 + (D.rightOffset ?? 8), un = null, dn = null, yr(0);
265
- }, wr = (e) => {
266
- let t = Y(), n = qe(e);
262
+ }, kr = (e) => {
263
+ nt(M, e), Ft = Ge(), Rt = Ge(), Lt = 0, Hn = NaN;
264
+ for (let e of Qt.values()) e.auto = !0;
265
+ P = Y() - 1 + (k.rightOffset ?? 8), gn = null, _n = null, Tr(0);
266
+ }, Ar = (e) => {
267
+ let t = Y(), n = Ye(e);
267
268
  if (t >= 2 && n >= t) {
268
- let r = He(e, 0).time, i = j.time[t - 1];
269
- if (r === j.time[0] && He(e, t - 2).time === j.time[t - 2]) {
270
- let r = Sr(), i = t, a = t;
269
+ let r = We(e, 0).time, i = M.time[t - 1];
270
+ if (r === M.time[0] && We(e, t - 2).time === M.time[t - 2]) {
271
+ let r = Or(), i = t, a = t;
271
272
  for (let r = t - 1; r < n; r++) {
272
- let t = tt(j, He(e, r));
273
+ let t = rt(M, We(e, r));
273
274
  t >= 0 && (a = Math.min(a, t));
274
275
  }
275
- r && (P += Y() - i), a < Y() && yr(a);
276
+ r && (P += Y() - i), a < Y() && Tr(a);
276
277
  return;
277
278
  }
278
- if (He(e, n - 1).time === i && n > t) {
279
+ if (We(e, n - 1).time === i && n > t) {
279
280
  let r = n - t;
280
- et(j, e), jt = Ue(), Pt = Ue(), Nt = 0, P += r, yr(0);
281
+ nt(M, e), Ft = Ge(), Rt = Ge(), Lt = 0, P += r, Tr(0);
281
282
  return;
282
283
  }
283
284
  }
284
- Cr(e);
285
- }, Tr = () => {
286
- let e = M.filter((e) => !e.overlay), t = I, n = e.map((e) => Jt.get(e.id) ?? e.height), r = n.reduce((e, t) => e + t, 0), i = Math.max(0, t * .62), a = r > i && r > 0 ? i / r : 1, o = n.map((e) => Math.max(st * Math.min(1, a * 2), e * a)), s = Math.max(40, t - o.reduce((e, t) => e + t, 0)), c = [], l = (e, t) => {
287
- let n = qt.get(e);
288
- return n || (n = je(t), qt.set(e, n)), n.mode !== t && (n.mode = t, n.auto = !0), n;
289
- }, u = l(C, D.scaleMode ?? "linear");
285
+ kr(e);
286
+ }, jr = () => {
287
+ let e = zt.filter((e) => !e.overlay), t = I, n = e.map((e) => $t.get(e.id) ?? e.height), r = n.reduce((e, t) => e + t, 0), i = Math.max(0, t * .62), a = r > i && r > 0 ? i / r : 1, o = n.map((e) => Math.max(lt * Math.min(1, a * 2), e * a)), s = Math.max(40, t - o.reduce((e, t) => e + t, 0)), c = [], l = (e, t) => {
288
+ let n = Qt.get(e);
289
+ return n || (n = Ne(t), Qt.set(e, n)), n.mode !== t && (n.mode = t, n.auto = !0), n;
290
+ }, u = l(T, k.scaleMode ?? "linear");
290
291
  u.top = 0, u.height = s, u.marginTop = .1, u.marginBottom = .08, c.push({
291
- id: C,
292
+ id: T,
292
293
  study: null,
293
294
  scale: u,
294
295
  top: 0,
@@ -309,19 +310,19 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
309
310
  step: 0
310
311
  }), d += o[t];
311
312
  });
312
- for (let e of [...qt.keys()]) c.some((t) => t.id === e) || qt.delete(e);
313
+ for (let e of [...Qt.keys()]) c.some((t) => t.id === e) || Qt.delete(e);
313
314
  L = c;
314
- }, Er = (e) => L.find((t) => e >= t.top && e < t.top + t.height) ?? null, Dr = () => {
315
+ }, Mr = (e) => L.find((t) => e >= t.top && e < t.top + t.height) ?? null, Nr = () => {
315
316
  let e = Y(), t = Math.min(1, F * .8 / Math.max(1, e));
316
- N = w(N, Math.max(1e-4, t), ot);
317
+ N = E(N, Math.max(1e-4, t), ct);
317
318
  let n = F / N;
318
- T(P) || (P = e - 1 + (D.rightOffset ?? 8));
319
- let r = Math.max(0, e - 1) + Math.max(D.rightOffset ?? 8, n * .75), i = Math.min(n * .25, r);
320
- P = w(P, i, r);
321
- }, Or = () => {
319
+ D(P) || (P = e - 1 + (k.rightOffset ?? 8));
320
+ let r = Math.max(0, e - 1) + Math.max(k.rightOffset ?? 8, n * .75), i = Math.min(n * .25, r);
321
+ P = E(P, i, r);
322
+ }, Pr = () => {
322
323
  let e = Y();
323
324
  if (!e) return null;
324
- let t = P - F / N, n = N >= 2 ? 0 : Math.ceil(Math.log2(2 / N)), r = 2 ** n, i = gr(), a = n ? Ze(Gn() === "heikinAshi" ? Pt : jt, i, e, n) : i, o = Math.floor((e - 1) / r), s = w(Math.floor(t) - 1, 0, e - 1), c = w(Math.ceil(P) + 1, 0, e - 1), l = w(Math.ceil(t - .5), 0, e - 1), u = w(Math.floor(P + .5), 0, e - 1);
325
+ let t = P - F / N, n = N >= 2 ? 0 : Math.ceil(Math.log2(2 / N)), r = 2 ** n, i = Sr(), a = n ? $e(Zn() === "heikinAshi" ? Rt : Ft, i, e, n) : i, o = Math.floor((e - 1) / r), s = E(Math.floor(t) - 1, 0, e - 1), c = E(Math.ceil(P) + 1, 0, e - 1), l = E(Math.ceil(t - .5), 0, e - 1), u = E(Math.floor(P + .5), 0, e - 1);
325
326
  return {
326
327
  left: t,
327
328
  level: n,
@@ -333,70 +334,70 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
333
334
  s1: Math.floor(u / r),
334
335
  last: o
335
336
  };
336
- }, kr = (e, t) => t * e.size + (e.size - 1) / 2, Ar = (e, t) => Math.min(e.size, Y() - t * e.size), jr = () => w(Math.ceil(P - F / N - .5), 0, Math.max(0, Y() - 1)), Mr = (e) => {
337
+ }, Fr = (e, t) => t * e.size + (e.size - 1) / 2, Ir = (e, t) => Math.min(e.size, Y() - t * e.size), Lr = () => E(Math.ceil(P - F / N - .5), 0, Math.max(0, Y() - 1)), Rr = (e) => {
337
338
  let t = Y();
338
- for (let n = jr(); n < t; n++) {
339
+ for (let n = Lr(); n < t; n++) {
339
340
  let t = e.values[n];
340
- if (T(t) && t !== 0) return t;
341
+ if (D(t) && t !== 0) return t;
341
342
  }
342
343
  return NaN;
343
- }, Nr = (e, t, n) => e.mode === "percent" ? (t / n - 1) * 100 : Le(e, t), Pr = () => D.baselinePrice ?? gr().close[jr()], Fr = (e, t, n, r, i) => {
344
- let a = fr(e, t, n), o = Math.round(r / e.size), s = w(e.s0 - o, 0, e.last), c = w(e.s1 - o, 0, e.last);
344
+ }, zr = (e, t, n) => e.mode === "percent" ? (t / n - 1) * 100 : ze(e, t), Br = () => k.baselinePrice ?? Sr().close[Lr()], Vr = (e, t, n, r, i) => {
345
+ let a = vr(e, t, n), o = Math.round(r / e.size), s = E(e.s0 - o, 0, e.last), c = E(e.s1 - o, 0, e.last);
345
346
  for (let e = s; e <= c; e++) a.min[e] < i[0] && (i[0] = a.min[e]), a.max[e] > i[1] && (i[1] = a.max[e]);
346
- }, Ir = (e, t) => {
347
- if (!D.autoscaleIncludesDrawings || !W.length) return;
347
+ }, Hr = (e, t) => {
348
+ if (!k.autoscaleIncludesDrawings || !W.length) return;
348
349
  let n = P - F / N, r = U?.kind === "drawing" ? U : null;
349
350
  for (let i of W) {
350
- if ((i.pane ?? C) !== e) continue;
351
+ if ((i.pane ?? T) !== e) continue;
351
352
  let a = r && r.id === i.id ? r.original : i;
352
- for (let e of g(a, hr, n, P)) e < t[0] && (t[0] = e), e > t[1] && (t[1] = e);
353
+ for (let e of _(a, xr, n, P)) e < t[0] && (t[0] = e), e > t[1] && (t[1] = e);
353
354
  }
354
- }, Lr = (e) => {
355
- Xt = 0;
355
+ }, Ur = (e) => {
356
+ tn = 0;
356
357
  for (let t of L) {
357
358
  let n = t.scale;
358
359
  if (!e) continue;
359
- if (t.id === C) {
360
- n.base = j.close[jr()] || 1;
361
- let { cols: t } = e, r = Gn(), i = r === "line" || r === "area" || r === "baseline", a = [Infinity, -Infinity];
360
+ if (t.id === T) {
361
+ n.base = M.close[Lr()] || 1;
362
+ let { cols: t } = e, r = Zn(), i = r === "line" || r === "area" || r === "baseline", a = [Infinity, -Infinity];
362
363
  for (let n = e.s0; n <= e.s1; n++) {
363
364
  let e = i ? t.close[n] : t.low[n], r = i ? t.close[n] : t.high[n];
364
365
  e < a[0] && (a[0] = e), r > a[1] && (a[1] = r);
365
366
  }
366
- for (let n of M) if (n.overlay && nr(n)) {
367
+ for (let n of zt) if (n.overlay && sr(n)) {
367
368
  if (n.type === "volume") {
368
369
  for (let n = e.s0; n <= e.s1; n++) {
369
- let r = t.volume[n] / Ar(e, n);
370
- r > Xt && (Xt = r);
370
+ let r = t.volume[n] / Ir(e, n);
371
+ r > tn && (tn = r);
371
372
  }
372
373
  continue;
373
374
  }
374
- for (let t of n.outputs) Fr(e, t.values, mr(t), t.shift, a);
375
+ for (let t of n.outputs) Vr(e, t.values, br(t), t.shift, a);
375
376
  }
376
- Ir(C, a);
377
+ Hr(T, a);
377
378
  let [o, s] = a;
378
379
  if (r === "baseline") {
379
- let e = Pr();
380
+ let e = Br();
380
381
  e < o && (o = e), e > s && (s = e);
381
382
  }
382
383
  if (!n.auto) continue;
383
- let c = Le(n, o), l = Le(n, s);
384
- n.mode === "log" && !(o > 0) && (c = Le(n, Math.max(s * .001, 1e-12)));
385
- for (let t of Lt) {
386
- let r = Mr(t), i = [Infinity, -Infinity];
387
- Fr(e, t.values, t.lod, 0, i);
384
+ let c = ze(n, o), l = ze(n, s);
385
+ n.mode === "log" && !(o > 0) && (c = ze(n, Math.max(s * .001, 1e-12)));
386
+ for (let t of Ht) {
387
+ let r = Rr(t), i = [Infinity, -Infinity];
388
+ Vr(e, t.values, t.lod, 0, i);
388
389
  for (let e of i) {
389
- let t = Nr(n, e, r);
390
+ let t = zr(n, e, r);
390
391
  t < c && (c = t), t > l && (l = t);
391
392
  }
392
393
  }
393
- n.mode === "percent" && Lt.length && (c = Math.min(c, 0), l = Math.max(l, 0)), Me(n, c, l);
394
+ n.mode === "percent" && Ht.length && (c = Math.min(c, 0), l = Math.max(l, 0)), Pe(n, c, l);
394
395
  continue;
395
396
  }
396
397
  let r = t.study;
397
398
  if (!r || !n.auto) continue;
398
399
  if (r.range) {
399
- Me(n, r.range[0], r.range[1]);
400
+ Pe(n, r.range[0], r.range[1]);
400
401
  continue;
401
402
  }
402
403
  let i = [Infinity, -Infinity];
@@ -404,39 +405,39 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
404
405
  for (let t of r.outputs) {
405
406
  if (t.kind === "volume") {
406
407
  for (let t = e.s0; t <= e.s1; t++) {
407
- let n = e.cols.volume[t] / Ar(e, t);
408
+ let n = e.cols.volume[t] / Ir(e, t);
408
409
  n > i[1] && (i[1] = n);
409
410
  }
410
411
  continue;
411
412
  }
412
- Fr(e, t.values, mr(t), t.shift, i);
413
+ Vr(e, t.values, br(t), t.shift, i);
413
414
  }
414
- Ir(t.id, i);
415
+ Hr(t.id, i);
415
416
  let [a, o] = i;
416
- if (r.bands && T(a) && T(o)) for (let e of r.bands) a = Math.min(a, e), o = Math.max(o, e);
417
- r.zero && T(a) && T(o) && (a = Math.min(a, 0), o = Math.max(o, 0)), Me(n, a, o);
417
+ if (r.bands && D(a) && D(o)) for (let e of r.bands) a = Math.min(a, e), o = Math.max(o, e);
418
+ r.zero && D(a) && D(o) && (a = Math.min(a, 0), o = Math.max(o, 0)), Pe(n, a, o);
418
419
  }
419
- }, Rr = (e, t) => {
420
+ }, Wr = (e, t) => {
420
421
  let n = Y();
421
422
  if (!n || !e) return [];
422
- let r = er(), i = r < re, a = Math.floor(Math.max(0, Math.ceil(P)) / e.size), o = (t) => t <= e.last ? e.cols.time[t] : j.time[n - 1] + (t * e.size - (n - 1)) * r, s = [], c = e.g0 > 0 ? ur(o(e.g0 - 1)) : NaN;
423
+ let r = or(), i = r < ne, a = Math.floor(Math.max(0, Math.ceil(P)) / e.size), o = (t) => t <= e.last ? e.cols.time[t] : M.time[n - 1] + (t * e.size - (n - 1)) * r, s = [], c = e.g0 > 0 ? gr(o(e.g0 - 1)) : NaN;
423
424
  for (let t = e.g0; t <= a; t++) {
424
- let n = ur(o(t)), r = Q(kr(e, t)), i = oe(c, n);
425
+ let n = gr(o(t)), r = cr(Fr(e, t)), i = ae(c, n);
425
426
  r >= -20 && r <= F + 20 && i > 10 && s.push({
426
427
  x: r,
427
428
  weight: i,
428
429
  time: n
429
430
  }), c = n;
430
431
  }
431
- t.font = tr(R.fontSize);
432
+ t.font = Q(R.fontSize);
432
433
  let l = i ? "00:00" : "Sep 30", u = Math.max(t.measureText(l).width, t.measureText("2024").width) + 34;
433
- return he(s, u).filter((e) => e.x > 8 && e.x < F - 8).map((e) => ({
434
+ return pe(s, u).filter((e) => e.x > 8 && e.x < F - 8).map((e) => ({
434
435
  x: e.x,
435
- text: ve(e.time, e.weight, J, i),
436
+ text: ge(e.time, e.weight, J, i),
436
437
  bold: e.weight >= (i ? 50 : 60)
437
438
  }));
438
- }, zr = (e, t) => e.id === C ? e.scale.mode === "percent" ? de(t, J, Math.min(2, l(e.step))) : Z(Ne(e.scale, t)) : e.study?.compact ? fe(t, J) : ue(t, Math.min(4, l(e.step)), J), Br = (e, t) => e.overlay && e.type !== "volume" ? Z(t) : e.compact ? fe(t, J) : ue(t, e.range ? 2 : Math.max(2, Math.min(6, Xn())), J), Vr = (e, t) => {
439
- let n = [], a = e.cols, o = Yn(qn()), s = Yn(Jn()), c = i(o), l = i(s), u = R.background, d = we(N * e.size * t, t), f = (n) => Q(kr(e, n)) * t, p = Gn(), m = Math.max(.5, d.body / 2), h = {
439
+ }, Gr = (e, t) => e.id === T ? e.scale.mode === "percent" ? le(t, J, Math.min(2, u(e.step))) : Z(Fe(e.scale, t)) : e.study?.compact ? ue(t, J) : ce(t, Math.min(4, u(e.step)), J), Kr = (e, t) => e.overlay && e.type !== "volume" ? Z(t) : e.compact ? ue(t, J) : ce(t, e.range ? 2 : Math.max(2, Math.min(6, nr())), J), qr = (e, t) => {
440
+ let n = [], a = e.cols, o = tr($n()), s = tr(er()), c = i(o), l = i(s), u = R.background, d = Se(N * e.size * t, t), f = (n) => cr(Fr(e, n)) * t, p = Zn(), m = Math.max(.5, d.body / 2), h = {
440
441
  up: i([
441
442
  o[0],
442
443
  o[1],
@@ -451,33 +452,33 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
451
452
  ])
452
453
  };
453
454
  for (let g of L) {
454
- let _ = g.top * t, v = (g.top + g.height) * t, y = g.scale, b = (e) => S(y, e) * t, ee = (t, n, r, i = b) => (a, o, s) => {
455
- let c = new Se(_, v);
455
+ let _ = g.top * t, v = (g.top + g.height) * t, y = g.scale, b = (e) => w(y, e) * t, x = (t, n, r, i = b) => (a, o, s) => {
456
+ let c = new be(_, v);
456
457
  for (let n = s ? Math.max(e.g0, a - 1) : a; n <= o; n++) c.push(f(n), i(t(n)));
457
458
  return c.count > 1 ? [c.item("", 0, n, r)] : [];
458
- }, te = (n, r, i, a, o = 0, s = b) => (c, l, u) => {
459
- let d = fr(e, n, r), p = o * N * t, m = Math.ceil(Math.abs(o) / e.size) + 1, h = u ? Math.max(0, c - 1) : c, g = l;
459
+ }, S = (n, r, i, a, o = 0, s = b) => (c, l, u) => {
460
+ let d = vr(e, n, r), p = o * N * t, m = Math.ceil(Math.abs(o) / e.size) + 1, h = u ? Math.max(0, c - 1) : c, g = l;
460
461
  !u && o > 0 && (h = Math.max(0, h - m)), !u && o < 0 && (g = Math.min(e.last - 1, g + m));
461
- let y = new Se(_, v), b = NaN;
462
+ let y = new be(_, v), b = NaN;
462
463
  for (let t = h; t <= g; t++) {
463
464
  let n = f(t) + p, r = d.min[t], i = d.max[t];
464
- if (!e.level || r === i || !T(r) || !T(i)) {
465
+ if (!e.level || r === i || !D(r) || !D(i)) {
465
466
  b = s(d.last[t]), y.push(n, b);
466
467
  continue;
467
468
  }
468
- let a = s(r), o = s(i), c = T(b) && Math.abs(b - o) < Math.abs(b - a) ? o : a, l = c === o ? a : o;
469
+ let a = s(r), o = s(i), c = D(b) && Math.abs(b - o) < Math.abs(b - a) ? o : a, l = c === o ? a : o;
469
470
  y.push(n, c), y.push(n, l), b = l;
470
471
  }
471
472
  return y.count > 1 ? [y.item("", 0, i, a)] : [];
472
- }, ne = (t, n, r, i, a) => (o, s, c) => {
473
- let l = fr(e, t.value, n), d = Y(), p = new Ce(_, v), m = NaN;
473
+ }, ee = (t, n, r, i, a) => (o, s, c) => {
474
+ let l = vr(e, t.value, n), d = Y(), p = new xe(_, v), m = NaN;
474
475
  for (let n = c ? Math.max(0, o - 1) : o; n <= s; n++) {
475
476
  let r = l.min[n], i = l.max[n];
476
- if (!T(r) || !T(i)) {
477
+ if (!D(r) || !D(i)) {
477
478
  p.break(), m = NaN;
478
479
  continue;
479
480
  }
480
- let a = t.direction[Math.min(d - 1, n * e.size + e.size - 1)] !== -1, o = f(n), s = b(r), c = b(i), u = T(m) && Math.abs(m - c) < Math.abs(m - s) ? c : s, h = u === c ? s : c;
481
+ let a = t.direction[Math.min(d - 1, n * e.size + e.size - 1)] !== -1, o = f(n), s = b(r), c = b(i), u = D(m) && Math.abs(m - c) < Math.abs(m - s) ? c : s, h = u === c ? s : c;
481
482
  p.push(o, u, a), h !== u && p.push(o, h, a), m = h;
482
483
  }
483
484
  let h = [
@@ -489,39 +490,39 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
489
490
  for (let [e, t] of [[p.up, "u"], [p.down, "d"]]) e.count > 1 && g.push(e.item(`${t}h`, 0, h, a + 2.5));
490
491
  return p.up.count > 1 && g.push(p.up.item("u", 0, r, a)), p.down.count > 1 && g.push(p.down.item("d", 0, i, a)), g;
491
492
  };
492
- if (g.id === C) {
493
- if (M.find((e) => e.overlay && e.type === "volume" && nr(e)) && Xt > 0) {
493
+ if (g.id === T) {
494
+ if (zt.find((e) => e.overlay && e.type === "volume" && sr(e)) && tn > 0) {
494
495
  let t = (v - _) * .2;
495
496
  n.push((n, r) => {
496
- let i = new xe();
497
+ let i = new ye();
497
498
  for (let o = n; o <= r; o++) {
498
- let n = a.volume[o] / Ar(e, o);
499
+ let n = a.volume[o] / Ir(e, o);
499
500
  if (!(n > 0)) continue;
500
- let r = v - n / Xt * t, [s, c] = Ee(r, v);
501
+ let r = v - n / tn * t, [s, c] = we(r, v);
501
502
  i.push(d.snap(f(o)), s, c, a.close[o] >= a.open[o] ? h.up : h.down);
502
503
  }
503
504
  return [i.item("", 0, m)];
504
505
  });
505
506
  }
506
- for (let e of Lt) {
507
- let r = Mr(e), i = Yn(e.color);
508
- n.push(te(e.values, e.lod, i, e.width, 0, (e) => ze(y, Nr(y, e, r)) * t));
507
+ for (let e of Ht) {
508
+ let r = Rr(e), i = tr(e.color);
509
+ n.push(S(e.values, e.lod, i, e.width, 0, (e) => Ve(y, zr(y, e, r)) * t));
509
510
  }
510
511
  if (p === "line" || p === "area" || p === "baseline") {
511
- let t = Yn(dt);
512
+ let t = tr(pt);
512
513
  if (p === "area" && n.push((n, r, i) => {
513
- let o = new be(_, v);
514
+ let o = new ve(_, v);
514
515
  for (let t = i ? Math.max(e.g0, n - 1) : n; t <= r; t++) o.push(f(t), b(a.close[t]), v);
515
516
  return o.count > 1 ? [o.item("", 0, t, .28)] : [];
516
517
  }), p === "baseline") {
517
- let t = b(Pr());
518
+ let t = b(Br());
518
519
  n.push((n, r, i) => {
519
- let c = new be(_, v), l = new be(_, v), u = new Se(_, v), d = new Se(_, v), p = NaN, m = NaN, h = (e, n) => {
520
+ let c = new ve(_, v), l = new ve(_, v), u = new be(_, v), d = new be(_, v), p = NaN, m = NaN, h = (e, n) => {
520
521
  c.push(e, Math.min(n, t), t), l.push(e, Math.max(n, t), t), n <= t ? u.push(e, n) : u.break(), n >= t ? d.push(e, n) : d.break();
521
522
  };
522
523
  for (let o = i ? Math.max(e.g0, n - 1) : n; o <= r; o++) {
523
524
  let e = f(o), n = b(a.close[o]);
524
- if (T(m) && (m - t) * (n - t) < 0) {
525
+ if (D(m) && (m - t) * (n - t) < 0) {
525
526
  let r = (t - m) / (n - m);
526
527
  h(p + (e - p) * r, t);
527
528
  }
@@ -530,67 +531,67 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
530
531
  let g = [];
531
532
  return c.count > 1 && g.push(c.item("u", 0, o, .22), l.item("d", 0, s, .22)), u.count > 1 && g.push(u.item("ul", 0, o, 2)), d.count > 1 && g.push(d.item("dl", 0, s, 2)), g;
532
533
  });
533
- } else n.push(ee((e) => a.close[e], t, 2));
534
+ } else n.push(x((e) => a.close[e], t, 2));
534
535
  } else {
535
536
  let e = p === "hollowCandles", t = p === "bars", r = d.wick, i = d.body;
536
537
  n.push((n, o) => {
537
- let s = new xe(), u = new xe(), p = new xe(), m = new xe(), h = Math.max(r, Math.round((i - r) / 2));
538
+ let s = new ye(), u = new ye(), p = new ye(), m = new ye(), h = Math.max(r, Math.round((i - r) / 2));
538
539
  for (let g = n; g <= o; g++) {
539
- let n = a.open[g], o = a.high[g], y = a.low[g], ee = a.close[g];
540
- if (!T(n) || !T(ee)) continue;
541
- let te = (e ? ee >= (g > 0 ? a.close[g - 1] : n) : ee >= n) ? c : l, ne = d.snap(f(g)), [re, ie] = Ee(b(o), b(y));
540
+ let n = a.open[g], o = a.high[g], y = a.low[g], x = a.close[g];
541
+ if (!D(n) || !D(x)) continue;
542
+ let S = (e ? x >= (g > 0 ? a.close[g - 1] : n) : x >= n) ? c : l, ee = d.snap(f(g)), [te, ne] = we(b(o), b(y));
542
543
  if (t) {
543
- let e = Te(re, ie, _, v);
544
- e && s.push(ne, e[0], e[1], te);
545
- for (let [e, t] of [[n, -1], [ee, 1]]) {
544
+ let e = Ce(te, ne, _, v);
545
+ e && s.push(ee, e[0], e[1], S);
546
+ for (let [e, t] of [[n, -1], [x, 1]]) {
546
547
  let n = Math.round(b(e) - r / 2);
547
- n < _ || n + r > v || m.push(ne + t * (r / 2 + h / 2), n, n + r, te);
548
+ n < _ || n + r > v || m.push(ee + t * (r / 2 + h / 2), n, n + r, S);
548
549
  }
549
550
  continue;
550
551
  }
551
- let [ae, oe] = Ee(b(n), b(ee));
552
+ let [re, ie] = we(b(n), b(x));
552
553
  if (i <= r) {
553
- let e = Te(re, ie, _, v);
554
- e && s.push(ne, e[0], e[1], te);
554
+ let e = Ce(te, ne, _, v);
555
+ e && s.push(ee, e[0], e[1], S);
555
556
  continue;
556
557
  }
557
- if (e && ee > n) {
558
- let e = [[re, ae], [oe, ie]];
558
+ if (e && x > n) {
559
+ let e = [[te, re], [ie, ne]];
559
560
  for (let [t, n] of e) {
560
- let e = n > t ? Te(t, n, _, v) : null;
561
- e && s.push(ne, e[0], e[1], te);
561
+ let e = n > t ? Ce(t, n, _, v) : null;
562
+ e && s.push(ee, e[0], e[1], S);
562
563
  }
563
- let t = Te(ae, oe, _, v);
564
- t && (s.push(ne - i / 2 + r / 2, t[0], t[1], te), s.push(ne + i / 2 - r / 2, t[0], t[1], te));
565
- for (let e of [ae, oe - r]) e >= _ && e + r <= v && p.push(ne, e, e + r, te);
564
+ let t = Ce(re, ie, _, v);
565
+ t && (s.push(ee - i / 2 + r / 2, t[0], t[1], S), s.push(ee + i / 2 - r / 2, t[0], t[1], S));
566
+ for (let e of [re, ie - r]) e >= _ && e + r <= v && p.push(ee, e, e + r, S);
566
567
  continue;
567
568
  }
568
- let se = Te(re, ie, _, v);
569
- se && s.push(ne, se[0], se[1], te);
570
- let ce = Te(ae, oe, _, v);
571
- ce && u.push(ne, ce[0], ce[1], te);
569
+ let ae = Ce(te, ne, _, v);
570
+ ae && s.push(ee, ae[0], ae[1], S);
571
+ let C = Ce(re, ie, _, v);
572
+ C && u.push(ee, C[0], C[1], S);
572
573
  }
573
574
  let g = [s.item("w", 0, r / 2)];
574
575
  return u.count && g.push(u.item("b", 0, i / 2)), p.count && g.push(p.item("c", 0, i / 2)), m.count && g.push(m.item("t", 0, h / 2)), g;
575
576
  });
576
577
  }
577
578
  }
578
- let re = g.id === C ? M.filter((e) => e.overlay && e.type !== "volume") : g.study ? [g.study] : [];
579
- for (let p of re) {
580
- if (!nr(p)) continue;
581
- let g = p.trend, [y, ee] = p.outputs;
582
- if (g && e.level && y && ee) {
583
- n.push(ne(g, pr(p), Yn(dr(y.color)), Yn(dr(ee.color)), y.width));
579
+ let te = g.id === T ? zt.filter((e) => e.overlay && e.type !== "volume") : g.study ? [g.study] : [];
580
+ for (let p of te) {
581
+ if (!sr(p)) continue;
582
+ let g = p.trend, [y, x] = p.outputs;
583
+ if (g && e.level && y && x) {
584
+ n.push(ee(g, yr(p), tr(_r(y.color)), tr(_r(x.color)), y.width));
584
585
  continue;
585
586
  }
586
587
  for (let g of p.outputs) if (g.kind === "volume") {
587
588
  let t = b(0);
588
589
  n.push((n, r) => {
589
- let i = new xe();
590
+ let i = new ye();
590
591
  for (let o = n; o <= r; o++) {
591
- let n = a.volume[o] / Ar(e, o);
592
+ let n = a.volume[o] / Ir(e, o);
592
593
  if (!(n > 0)) continue;
593
- let r = Te(...Ee(b(n), t), _, v);
594
+ let r = Ce(...we(b(n), t), _, v);
594
595
  r && i.push(d.snap(f(o)), r[0], r[1], a.close[o] >= a.open[o] ? h.up : h.down);
595
596
  }
596
597
  return [i.item("", 0, m)];
@@ -602,24 +603,24 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
602
603
  }, p = {
603
604
  up: i(r(u, o, .45)),
604
605
  down: i(r(u, s, .45))
605
- }, h = mr(g);
606
+ }, h = br(g);
606
607
  n.push((n, r) => {
607
- let i = fr(e, g.values, h), o = new xe();
608
+ let i = vr(e, g.values, h), o = new ye();
608
609
  for (let s = n; s <= r; s++) {
609
610
  let n = i.last[s];
610
- if (!T(n)) continue;
611
- let r = s > 0 ? i.last[s - 1] : n, c = n >= 0 ? n >= r ? a.up : p.up : n <= r ? a.down : p.down, l = Math.min(0, T(i.min[s]) ? i.min[s] : n), u = Math.max(0, T(i.max[s]) ? i.max[s] : n), m = Te(...e.level ? Ee(b(u), b(l)) : Ee(b(n), t), _, v);
611
+ if (!D(n)) continue;
612
+ let r = s > 0 ? i.last[s - 1] : n, c = n >= 0 ? n >= r ? a.up : p.up : n <= r ? a.down : p.down, l = Math.min(0, D(i.min[s]) ? i.min[s] : n), u = Math.max(0, D(i.max[s]) ? i.max[s] : n), m = Ce(...e.level ? we(b(u), b(l)) : we(b(n), t), _, v);
612
613
  m && o.push(d.snap(f(s)), m[0], m[1], c);
613
614
  }
614
615
  return [o.item("", 0, m)];
615
616
  });
616
617
  } else if (g.kind === "dots") {
617
- let r = g.color ? i(Yn(dr(g.color))) : 0, o = w(N * e.size * .22, 1.25, 2.6), s = o * t;
618
+ let r = g.color ? i(tr(_r(g.color))) : 0, o = E(N * e.size * .22, 1.25, 2.6), s = o * t;
618
619
  n.push((t, n) => {
619
- let i = new xe();
620
+ let i = new ye();
620
621
  for (let o = t; o <= n; o++) {
621
622
  let t = e.level ? g.values[Math.min(Y() - 1, o * e.size + e.size - 1)] : g.values[o];
622
- if (!T(t)) continue;
623
+ if (!D(t)) continue;
623
624
  let n = b(t);
624
625
  if (n < _ || n > v) continue;
625
626
  let u = r || (t <= a.close[o] ? c : l);
@@ -628,8 +629,8 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
628
629
  return i.count ? [i.item("", 0, s, 0, o)] : [];
629
630
  });
630
631
  } else {
631
- let e = Yn(dr(g.color));
632
- n.push(te(g.values, mr(g), [
632
+ let e = tr(_r(g.color));
633
+ n.push(S(g.values, br(g), [
633
634
  e[0],
634
635
  e[1],
635
636
  e[2],
@@ -639,14 +640,14 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
639
640
  }
640
641
  }
641
642
  return n;
642
- }, Hr = (e, t, n, r) => {
643
- let i = Math.min(n.g1, n.last - 1), a = r ? n.last >= n.g0 && n.last <= n.g1 ? e(n.last, n.last, !0) : [] : i >= n.g0 ? e(n.g0, i, !1) : [], o = ++an;
643
+ }, Jr = (e, t, n, r) => {
644
+ let i = Math.min(n.g1, n.last - 1), a = r ? n.last >= n.g0 && n.last <= n.g1 ? e(n.last, n.last, !0) : [] : i >= n.g0 ? e(n.g0, i, !1) : [], o = ++un;
644
645
  return a.map((e, n) => ({
645
646
  ...e,
646
647
  key: `L${t}:${n}:${e.kind}:${e.key}${r ? ":live" : ""}`,
647
648
  version: o
648
649
  }));
649
- }, Ur = (e, n) => {
650
+ }, Yr = (e, n) => {
650
651
  if (!z) return;
651
652
  let r = z.canvas;
652
653
  t(r, {
@@ -664,26 +665,26 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
664
665
  N,
665
666
  P,
666
667
  e.level,
667
- Gn(),
668
- Bt,
669
- Zt,
670
- Qt,
671
- Xt,
672
- Gn() === "baseline" ? Pr() : 0,
668
+ Zn(),
669
+ Gt,
670
+ nn,
671
+ rn,
672
+ tn,
673
+ Zn() === "baseline" ? Br() : 0,
673
674
  ...L.map((e) => `${e.id}:${e.top}:${e.height}:${e.scale.min}:${e.scale.max}:${e.scale.base}:${e.scale.mode}`),
674
- ...M.map((e) => `${e.id}:${nr(e)}`)
675
+ ...zt.map((e) => `${e.id}:${sr(e)}`)
675
676
  ].join("|");
676
- t === nn ? rn !== Vt && (rn = Vt, tn.forEach((t, n) => {
677
- t.live = Hr(t.fn, n, e, !0);
678
- })) : (nn = t, rn = Vt, tn = Vr(e, n).map((e) => ({
677
+ t === cn ? ln !== Kt && (ln = Kt, sn.forEach((t, n) => {
678
+ t.live = Jr(t.fn, n, e, !0);
679
+ })) : (cn = t, ln = Kt, sn = qr(e, n).map((e) => ({
679
680
  fn: e,
680
681
  main: [],
681
682
  live: []
682
- })), tn.forEach((t, n) => {
683
- t.main = Hr(t.fn, n, e, !1), t.live = Hr(t.fn, n, e, !0);
683
+ })), sn.forEach((t, n) => {
684
+ t.main = Jr(t.fn, n, e, !1), t.live = Jr(t.fn, n, e, !0);
684
685
  }));
685
- } else tn = [], nn = "";
686
- let o = tn.flatMap((e) => [...e.main, ...e.live]);
686
+ } else sn = [], cn = "";
687
+ let o = sn.flatMap((e) => [...e.main, ...e.live]);
687
688
  z.render(o, {
688
689
  transform: {
689
690
  xScale: 2 / i,
@@ -695,15 +696,15 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
695
696
  height: a,
696
697
  dpr: n
697
698
  });
698
- }, Wr = (e, t) => {
699
- let n = Math.max(1, Math.round(Gt * t)), r = Math.max(1, Math.round(Kt * t));
700
- e.width !== n && (e.width = n), e.height !== r && (e.height = r), e.style.width = `${Gt}px`, e.style.height = `${Kt}px`;
701
- }, Gr = (e, t, n, r, i, a) => {
699
+ }, Xr = (e, t) => {
700
+ let n = Math.max(1, Math.round(Xt * t)), r = Math.max(1, Math.round(Zt * t));
701
+ e.width !== n && (e.width = n), e.height !== r && (e.height = r), e.style.width = `${Xt}px`, e.style.height = `${Zt}px`;
702
+ }, Zr = (e, t, n, r, i, a) => {
702
703
  e.beginPath(), typeof e.roundRect == "function" ? e.roundRect(t, n, r, i, a) : e.rect(t, n, r, i);
703
- }, Kr = (e, t, n, r, i) => {
704
+ }, Qr = (e, t, n, r, i) => {
704
705
  let a = r.outputs[i.a], o = r.outputs[i.b];
705
706
  if (!a || !o) return;
706
- let s = fr(t, a.values, mr(a)), c = fr(t, o.values, mr(o)), l = a.shift, u = Math.ceil(Math.abs(l) / t.size) + 1, d = Math.max(0, t.g0 - (l > 0 ? u : 0)), f = Math.min(t.last, t.g1 + (l < 0 ? u : 0)), p = X(dr(i.color), i.opacity), m = X(dr(i.colorBelow ?? i.color), i.opacity);
707
+ let s = vr(t, a.values, br(a)), c = vr(t, o.values, br(o)), l = a.shift, u = Math.ceil(Math.abs(l) / t.size) + 1, d = Math.max(0, t.g0 - (l > 0 ? u : 0)), f = Math.min(t.last, t.g1 + (l < 0 ? u : 0)), p = X(_r(i.color), i.opacity), m = X(_r(i.colorBelow ?? i.color), i.opacity);
707
708
  e.save(), e.beginPath(), e.rect(0, n.top, F, n.height), e.clip();
708
709
  let h = [], g = 0, _ = () => {
709
710
  if (h.length > 1) {
@@ -718,11 +719,11 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
718
719
  };
719
720
  for (let e = d; e <= f; e++) {
720
721
  let r = s.last[e], i = c.last[e];
721
- if (!T(r) || !T(i)) {
722
+ if (!D(r) || !D(i)) {
722
723
  _(), g = 0;
723
724
  continue;
724
725
  }
725
- let a = Q(kr(t, e) + l), o = S(n.scale, r), u = S(n.scale, i), d = r >= i ? 1 : -1, f = h[h.length - 1];
726
+ let a = cr(Fr(t, e) + l), o = w(n.scale, r), u = w(n.scale, i), d = r >= i ? 1 : -1, f = h[h.length - 1];
726
727
  if (f && d !== g) {
727
728
  let e = f.ya - f.yb, t = e / (e - (o - u)), n = f.x + (a - f.x) * t, r = f.ya + (o - f.ya) * t;
728
729
  h.push({
@@ -742,13 +743,13 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
742
743
  });
743
744
  }
744
745
  _(), e.restore();
745
- }, qr = (e, t) => {
746
- if (!D.sessionBreaks || er() >= 864e5) return;
746
+ }, $r = (e, t) => {
747
+ if (!k.sessionBreaks || or() >= 864e5) return;
747
748
  let n = [], r = NaN;
748
749
  for (let e = Math.max(0, t.g0 - 1); e <= Math.min(t.g1, t.last); e++) {
749
- let i = Math.floor(ur(t.cols.time[e]) / re);
750
- if (T(r) && i !== r) {
751
- let r = Math.round(Q(e * t.size - .5)) + .5;
750
+ let i = Math.floor(gr(t.cols.time[e]) / ne);
751
+ if (D(r) && i !== r) {
752
+ let r = Math.round(cr(e * t.size - .5)) + .5;
752
753
  if (r > 0 && r < F && n.push(r), n.length > F / 6) return;
753
754
  }
754
755
  r = i;
@@ -758,26 +759,26 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
758
759
  for (let t of n) e.moveTo(t, 0), e.lineTo(t, I);
759
760
  e.stroke(), e.restore();
760
761
  }
761
- }, Jr = () => {
762
- let e = D.volumeProfile;
762
+ }, ei = () => {
763
+ let e = k.volumeProfile;
763
764
  return e ? e === !0 ? {} : e : null;
764
- }, Yr = (e, t) => {
765
- let n = Jr(), r = L[0];
766
- if (!n || !r || !j.hasVolume) return;
767
- let i = w(Math.floor(n.rows ?? 24), 2, 400), a = [
765
+ }, ti = (e, t) => {
766
+ let n = ei(), r = L[0];
767
+ if (!n || !r || !M.hasVolume) return;
768
+ let i = E(Math.floor(n.rows ?? 24), 2, 400), a = [
768
769
  t.level,
769
770
  t.s0,
770
771
  t.s1,
771
772
  i,
772
773
  n.valueArea ?? .7,
773
- Bt,
774
- Vt
774
+ Gt,
775
+ Kt
775
776
  ].join("|");
776
- if (!Bn || Bn.key !== a) {
777
- let e = t.level ? Ze(jt, j, Y(), t.level) : j;
778
- Bn = {
777
+ if (!Kn || Kn.key !== a) {
778
+ let e = t.level ? $e(Ft, M, Y(), t.level) : M;
779
+ Kn = {
779
780
  key: a,
780
- result: ke(e, {
781
+ result: De(e, {
781
782
  from: t.s0,
782
783
  to: t.s1,
783
784
  rows: i,
@@ -785,25 +786,25 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
785
786
  })
786
787
  };
787
788
  }
788
- let s = Bn.result;
789
+ let s = Kn.result;
789
790
  if (s.poc < 0) return;
790
791
  let c = 0;
791
792
  for (let e = 0; e < i; e++) c = Math.max(c, (s.up[e] ?? 0) + (s.down[e] ?? 0));
792
793
  if (!(c > 0)) return;
793
- let l = F * w(n.width ?? .28, .05, .9), u = (n.side ?? "right") === "right", d = Yn(dr(n.upColor ?? "up")), f = Yn(dr(n.downColor ?? "down"));
794
+ let l = F * E(n.width ?? .28, .05, .9), u = (n.side ?? "right") === "right", d = tr(_r(n.upColor ?? "up")), f = tr(_r(n.downColor ?? "down"));
794
795
  e.save(), e.beginPath(), e.rect(0, r.top, F, r.height), e.clip();
795
796
  for (let t = 0; t < i; t++) {
796
797
  let n = s.up[t] ?? 0, i = s.down[t] ?? 0;
797
798
  if (!(n + i > 0)) continue;
798
- let a = S(r.scale, s.low + t * s.step), p = S(r.scale, s.low + (t + 1) * s.step), m = Math.min(a, p), h = Math.max(1, Math.abs(p - a) - +(Math.abs(p - a) > 4)), g = t >= s.valueAreaFrom && t <= s.valueAreaTo ? .42 : .17, _ = n / c * l, v = i / c * l, y = u ? F : 0, b = u ? -1 : 1;
799
+ let a = w(r.scale, s.low + t * s.step), p = w(r.scale, s.low + (t + 1) * s.step), m = Math.min(a, p), h = Math.max(1, Math.abs(p - a) - +(Math.abs(p - a) > 4)), g = t >= s.valueAreaFrom && t <= s.valueAreaTo ? .42 : .17, _ = n / c * l, v = i / c * l, y = u ? F : 0, b = u ? -1 : 1;
799
800
  e.fillStyle = o(d, g), e.fillRect(Math.min(y, y + b * _), m, _, h), e.fillStyle = o(f, g);
800
- let ee = y + b * _;
801
- e.fillRect(Math.min(ee, ee + b * v), m, v, h);
801
+ let x = y + b * _;
802
+ e.fillRect(Math.min(x, x + b * v), m, v, h);
802
803
  }
803
- let p = Math.round(S(r.scale, s.low + (s.poc + .5) * s.step)) + .5;
804
- e.strokeStyle = X(n.pocColor ?? ut, .9), e.lineWidth = 1, e.beginPath(), e.moveTo(0, p), e.lineTo(F, p), e.stroke(), e.restore();
805
- }, Xr = (e, t, n) => {
806
- let r = o(R.grid), i = D.grid !== !1;
804
+ let p = Math.round(w(r.scale, s.low + (s.poc + .5) * s.step)) + .5;
805
+ e.strokeStyle = X(n.pocColor ?? ft, .9), e.lineWidth = 1, e.beginPath(), e.moveTo(0, p), e.lineTo(F, p), e.stroke(), e.restore();
806
+ }, ni = (e, t, n) => {
807
+ let r = o(R.grid), i = k.grid !== !1;
807
808
  if (e.lineWidth = 1, i) {
808
809
  e.strokeStyle = r, e.beginPath();
809
810
  for (let t of n) {
@@ -811,84 +812,84 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
811
812
  e.moveTo(n, 0), e.lineTo(n, I);
812
813
  }
813
814
  for (let t of L) for (let n of t.ticks) {
814
- let r = Math.round(ze(t.scale, n)) + .5;
815
+ let r = Math.round(Ve(t.scale, n)) + .5;
815
816
  r < t.top + 2 || r > t.top + t.height - 2 || (e.moveTo(0, r), e.lineTo(F, r));
816
817
  }
817
818
  e.stroke();
818
819
  }
819
- if (D.watermark) {
820
+ if (k.watermark) {
820
821
  let t = L[0];
821
- e.save(), e.font = tr(Math.min(56, Math.max(22, F / 14)), 700), e.fillStyle = o(R.text, .07), e.textAlign = "center", e.textBaseline = "middle", e.fillText(D.watermark, F / 2, t.top + t.height / 2), e.restore();
822
+ e.save(), e.font = Q(Math.min(56, Math.max(22, F / 14)), 700), e.fillStyle = o(R.text, .07), e.textAlign = "center", e.textBaseline = "middle", e.fillText(k.watermark, F / 2, t.top + t.height / 2), e.restore();
822
823
  }
823
824
  for (let t of L) {
824
825
  let n = t.study;
825
- if (n?.bands && nr(n)) {
826
- let r = Yn(dr(n.outputs[0]?.color ?? dt)), i = n.bands.map((e) => Math.round(S(t.scale, e)) + .5);
826
+ if (n?.bands && sr(n)) {
827
+ let r = tr(_r(n.outputs[0]?.color ?? pt)), i = n.bands.map((e) => Math.round(w(t.scale, e)) + .5);
827
828
  n.bandFill && i.length === 2 && (e.fillStyle = o(r, .07), e.fillRect(0, Math.min(i[0], i[1]), F, Math.abs(i[1] - i[0]))), e.save(), e.setLineDash([4, 4]), e.strokeStyle = o(R.textMuted, .45), e.beginPath();
828
829
  for (let n of i) n < t.top || n > t.top + t.height || (e.moveTo(0, n), e.lineTo(F, n));
829
830
  e.stroke(), e.restore();
830
831
  }
831
832
  }
832
833
  if (t) {
833
- qr(e, t);
834
- for (let n of M) {
835
- if (!n.fills.length || !nr(n)) continue;
834
+ $r(e, t);
835
+ for (let n of zt) {
836
+ if (!n.fills.length || !sr(n)) continue;
836
837
  let r = n.overlay ? L[0] : L.find((e) => e.study === n);
837
- if (r) for (let i of n.fills) Kr(e, t, r, n, i);
838
+ if (r) for (let i of n.fills) Qr(e, t, r, n, i);
838
839
  }
839
840
  let n = L[0];
840
- if (n && n.scale.mode === "percent" && Lt.length) {
841
- let t = Math.round(ze(n.scale, 0)) + .5;
841
+ if (n && n.scale.mode === "percent" && Ht.length) {
842
+ let t = Math.round(Ve(n.scale, 0)) + .5;
842
843
  t > n.top && t < n.top + n.height && (e.save(), e.strokeStyle = o(R.textMuted, .6), e.setLineDash([2, 3]), e.beginPath(), e.moveTo(0, t), e.lineTo(F, t), e.stroke(), e.restore());
843
844
  }
844
- Yr(e, t);
845
+ ti(e, t);
845
846
  }
846
847
  e.strokeStyle = o(R.axis), e.beginPath();
847
848
  for (let t of L.slice(1)) {
848
849
  let n = Math.round(t.top) + .5;
849
- e.moveTo(0, n), e.lineTo(Gt, n);
850
+ e.moveTo(0, n), e.lineTo(Xt, n);
850
851
  }
851
- e.moveTo(Math.round(F) + .5, 0), e.lineTo(Math.round(F) + .5, Kt), e.moveTo(0, Math.round(I) + .5), e.lineTo(Gt, Math.round(I) + .5), e.stroke();
852
- }, Zr = (e, t, n, r, i, a) => {
853
- let o = a ? 32 : 18, s = w(Math.round(t - 9), 0, I - o);
854
- Gr(e, F + 1, s, Wt - 2, o, 3), e.fillStyle = r, e.fill(), e.fillStyle = i, e.textAlign = "left", e.textBaseline = "middle", e.font = tr(R.fontSize, 500), e.fillText(n, F + 7, s + 9.5), a && (e.font = tr(R.fontSize - 1), e.fillText(a, F + 7, s + 24));
855
- }, Qr = (e) => L[0]?.scale.mode === "percent" ? de(Le(L[0].scale, e), J) : Z(e), $r = (e) => {
852
+ e.moveTo(Math.round(F) + .5, 0), e.lineTo(Math.round(F) + .5, Zt), e.moveTo(0, Math.round(I) + .5), e.lineTo(Xt, Math.round(I) + .5), e.stroke();
853
+ }, ri = (e, t, n, r, i, a, o) => {
854
+ let s = a ? 32 : 18, c = Math.round(o ?? E(Math.round(t - 9), 0, I - s));
855
+ Math.abs(c + 9 - t) > 1.5 && (e.save(), e.strokeStyle = r, e.lineWidth = 1, e.beginPath(), e.moveTo(F - 10, Math.round(t) + .5), e.lineTo(F - 4, Math.round(t) + .5), e.lineTo(F + 2, c + 9.5), e.stroke(), e.restore()), Zr(e, F + 1, c, Yt - 2, s, 3), e.fillStyle = r, e.fill(), e.fillStyle = i, e.textAlign = "left", e.textBaseline = "middle", e.font = Q(R.fontSize, 500), e.fillText(n, F + 7, c + 9.5), a && (e.font = Q(R.fontSize - 1), e.fillText(a, F + 7, c + 24));
856
+ }, ii = (e) => L[0]?.scale.mode === "percent" ? le(ze(L[0].scale, e), J) : Z(e), ai = (e) => {
856
857
  if (e.color) return X(e.color);
857
858
  let t = e.kind ?? "line";
858
- return X(t === "takeProfit" ? qn() : t === "stopLoss" ? Jn() : t === "alert" ? ut : t === "line" ? dt : e.side === "sell" ? Jn() : qn());
859
- }, ei = (e) => On.get(e.id) ?? e.price, ti = () => {
860
- if (!Yt || !L.length) return null;
859
+ return X(t === "takeProfit" ? $n() : t === "stopLoss" ? er() : t === "alert" ? ft : t === "line" ? pt : e.side === "sell" ? er() : $n());
860
+ }, oi = (e) => Pn.get(e.id) ?? e.price, si = () => {
861
+ if (!en || !L.length) return null;
861
862
  if (V !== null) {
862
- let e = V, t = e >= 0 && e < Y() ? gr().close[e] : NaN;
863
+ let e = V, t = e >= 0 && e < Y() ? Sr().close[e] : NaN;
863
864
  return {
864
865
  index: e,
865
866
  pane: L[0],
866
- y: S(L[0].scale, t),
867
+ y: w(L[0].scale, t),
867
868
  price: t
868
869
  };
869
870
  }
870
- if (!B && Pn) {
871
- let e = Math.round(hr(Pn.time)), t = Pn.price;
871
+ if (!B && Bn) {
872
+ let e = Math.round(xr(Bn.time)), t = Bn.price;
872
873
  return {
873
874
  index: e,
874
875
  pane: L[0],
875
- y: T(t) ? S(L[0].scale, t) : NaN,
876
+ y: D(t) ? w(L[0].scale, t) : NaN,
876
877
  price: t
877
878
  };
878
879
  }
879
880
  if (!B || B.x > F || B.y > I) return null;
880
- let e = Er(B.y);
881
+ let e = Mr(B.y);
881
882
  if (!e) return null;
882
- let t = Math.round(rr(B.x)), n = B.y, r = Re(e.scale, n);
883
- if (e.id === C && D.crosshair !== "free" && t >= 0 && t < Y() && vn === "cursor") {
884
- let i = gr(), a = Infinity;
883
+ let t = Math.round(lr(B.x)), n = B.y, r = Be(e.scale, n);
884
+ if (e.id === T && k.crosshair !== "free" && t >= 0 && t < Y() && wn === "cursor") {
885
+ let i = Sr(), a = Infinity;
885
886
  for (let o of [
886
887
  i.open[t],
887
888
  i.high[t],
888
889
  i.low[t],
889
890
  i.close[t]
890
891
  ]) {
891
- let t = S(e.scale, o);
892
+ let t = w(e.scale, o);
892
893
  Math.abs(t - B.y) < a && (a = Math.abs(t - B.y), n = t, r = o);
893
894
  }
894
895
  }
@@ -898,34 +899,40 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
898
899
  y: n,
899
900
  price: r
900
901
  };
901
- }, ni = (e) => L.find((t) => t.id === (e ?? C)) ?? null, ri = (e) => e ? {
902
- x: Q,
903
- y: (t) => S(e.scale, t),
904
- index: hr,
902
+ }, ci = (e) => L.find((t) => t.id === (e ?? T)) ?? null, li = (e) => e ? {
903
+ x: cr,
904
+ y: (t) => w(e.scale, t),
905
+ index: xr,
905
906
  left: 0,
906
907
  right: F,
907
908
  top: e.top,
908
909
  bottom: e.top + e.height
909
- } : null, ii = (e, t) => {
910
- let n = Wn(), r = Math.abs(t), i = [], a = Math.floor(r / re), o = Math.floor(r % re / ie), s = Math.floor(r % ie / ae);
911
- return a && i.push(x(n.days, { count: a })), o && i.push(x(n.hours, { count: o })), s && !a && i.push(x(n.minutes, { count: s })), `${x(Wn().bars, { count: e })}, ${i.join(" ") || x(n.minutes, { count: 0 })}`;
912
- }, ai = (e, t) => e.id === C ? Z(t) : zr(e, t), oi = (e) => {
913
- let t = 10 ** -Xn();
914
- return Number((Math.round(e / t) * t).toFixed(Xn()));
915
- }, si = (e, t, n, r, i, a = "center") => {
916
- e.font = tr(R.fontSize, 500);
917
- let o = e.measureText(t).width + 16, s = w(a === "center" ? n - o / 2 : a === "right" ? n - o : n, 2, Math.max(2, F - o - 2));
918
- return Gr(e, s, r, o, 22, 11), e.fillStyle = i, e.fill(), e.fillStyle = _t(i), e.textAlign = "center", e.textBaseline = "middle", e.fillText(t, s + o / 2, r + 11.5), o;
919
- }, ci = (e, t, n, r, i) => (An.push({
910
+ } : null, ui = (e, t) => {
911
+ let n = Xn(), r = Math.abs(t), i = [], a = Math.floor(r / ne), o = Math.floor(r % ne / re), s = Math.floor(r % re / ie);
912
+ return a && i.push(ke(n.days, { count: a })), o && i.push(ke(n.hours, { count: o })), s && !a && i.push(ke(n.minutes, { count: s })), `${ke(Xn().bars, { count: e })}, ${i.join(" ") || ke(n.minutes, { count: 0 })}`;
913
+ }, di = (e, t) => e.id === T ? Z(t) : Gr(e, t), fi = (e) => {
914
+ let t = 10 ** -nr();
915
+ return Number((Math.round(e / t) * t).toFixed(nr()));
916
+ }, pi = () => {
917
+ let e = Y();
918
+ return e ? M.close[e - 1] : NaN;
919
+ }, mi = (e, t, n) => {
920
+ let r = Xn(), i = e === "buy" ? t === "stop" ? r.buyStop : r.buyLimit : t === "stop" ? r.sellStop : r.sellLimit;
921
+ return ke(i, { price: Z(n) });
922
+ }, hi = (e, t, n, r, i, a = "center") => {
923
+ e.font = Q(R.fontSize, 500);
924
+ let o = e.measureText(t).width + 16, s = E(a === "center" ? n - o / 2 : a === "right" ? n - o : n, 2, Math.max(2, F - o - 2));
925
+ return Zr(e, s, r, o, 22, 11), e.fillStyle = i, e.fill(), e.fillStyle = yt(i), e.textAlign = "center", e.textBaseline = "middle", e.fillText(t, s + o / 2, r + 11.5), o;
926
+ }, gi = (e, t, n, r, i) => (In.push({
920
927
  x: e,
921
928
  y: t,
922
929
  w: n,
923
930
  h: r,
924
931
  action: i
925
- }), jn === An.length - 1), li = (e, t) => {
926
- let n = Y(), r = n ? j.close[n - 1] : NaN, i = G ? [...W, G] : W;
932
+ }), Ln === In.length - 1), _i = (e, t) => {
933
+ let n = Y(), r = n ? M.close[n - 1] : NaN, i = G ? [...W, G] : W;
927
934
  if (!i.length) return;
928
- let a = Wn(), o = {
935
+ let a = Xn(), o = {
929
936
  target: a.target,
930
937
  stop: a.stop,
931
938
  riskReward: a.riskReward,
@@ -934,44 +941,135 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
934
941
  short: a.short
935
942
  };
936
943
  for (let n of L) {
937
- let s = ri(n);
944
+ let s = li(n);
938
945
  if (!s) continue;
939
- let c = i.filter((e) => (e.pane ?? C) === n.id);
946
+ let c = i.filter((e) => (e.pane ?? T) === n.id);
940
947
  if (c.length) {
941
948
  e.save(), e.beginPath(), e.rect(0, n.top, F, n.height), e.clip();
942
949
  for (let i of c) {
943
- let c = te(e, i, s, {
950
+ let c = ee(e, i, s, {
944
951
  ...t,
945
- color: X(i.color ?? dt),
946
- font: tr(R.fontSize, 500),
952
+ color: X(i.color ?? pt),
953
+ font: Q(R.fontSize, 500),
947
954
  fontFamily: R.fontFamily,
948
- formatPrice: (e) => ai(n, e),
949
- formatPercent: (e) => de(e, J),
950
- formatSpan: ii,
951
- textOn: _t,
955
+ formatPrice: (e) => di(n, e),
956
+ formatPercent: (e) => le(e, J),
957
+ formatSpan: ui,
958
+ textOn: yt,
952
959
  defaultText: a.text,
953
960
  position: o,
954
- last: n.id === C ? r : NaN,
955
- fill: x
961
+ last: n.id === T ? r : NaN,
962
+ fill: ke
956
963
  }, {
957
- selected: i === G || i.id === yn,
958
- hovered: i.id === bn
964
+ selected: i === G || i.id === Tn,
965
+ hovered: i.id === En
959
966
  });
960
- c && wn.set(i.id, c);
967
+ c && An.set(i.id, c);
961
968
  }
962
969
  e.restore();
963
970
  }
964
971
  }
965
- }, ui = (e, t, n) => {
972
+ }, vi = (e, t, n) => {
966
973
  let r = L[0];
967
974
  if (!r) return;
968
- An = [];
969
- let i = Y(), a = o(R.text), s = o(R.textMuted), c = o(R.background), l = X(qn()), u = X(Jn()), d = Wn();
970
- if (e.save(), e.beginPath(), e.rect(0, r.top, F, r.height), e.clip(), t && D.highLowMarkers !== !1 && Gn() !== "line" && Gn() !== "area" && Gn() !== "baseline") {
975
+ In = [];
976
+ let i = Y(), a = o(R.text), s = o(R.textMuted), c = o(R.background), l = X($n()), u = X(er()), d = Xn(), f = i ? M.close[i - 1] : NaN, p = r.top + r.height, m = p - 32, h = [], g = (t, n, r, i = "left") => {
977
+ e.font = Q(R.fontSize, 500);
978
+ let a = e.measureText(t).width + 16, o = E(i === "center" ? n - a / 2 : n, 2, Math.max(2, F - a - 2));
979
+ return {
980
+ left: o,
981
+ top: r,
982
+ right: o + a,
983
+ bottom: r + 22
984
+ };
985
+ }, _ = null;
986
+ if (H?.kind === "create" && i) {
987
+ let t = Math.round(w(r.scale, H.price)) + .5;
988
+ if (D(t) && t >= r.top && t <= p) {
989
+ let n = Pa(H), i = mi(H.side, n, H.price);
990
+ e.font = Q(R.fontSize, 500);
991
+ let a = g(i, F - 56 - (e.measureText(i).width + 16), E(t - 11, r.top + 2, p - 24));
992
+ _ = {
993
+ y: t,
994
+ color: H.side === "buy" ? l : u,
995
+ text: i,
996
+ type: n,
997
+ box: a
998
+ }, h.push(a);
999
+ }
1000
+ }
1001
+ let v = Wn ? d.replayHint : K && i ? ke(d.replay, { time: se(gr(M.time[i - 1]), or(), J) }) : "";
1002
+ v && h.push(g(v, F / 2, m, "center"));
1003
+ let y = !!H && i > 0 && !v;
1004
+ y && h.push(g(d.orderHint, 8, m));
1005
+ let b = [];
1006
+ e.font = Q(R.fontSize, 600);
1007
+ for (let t of k.priceLines ?? []) {
1008
+ let n = oi(t), i = w(r.scale, n), a = Math.round(i) + .5;
1009
+ if (!D(a) || a < r.top || a > p) continue;
1010
+ let o = ai(t), s = t.kind ?? "line", m = vt[s], h = t.title ?? (m ? d[m] : ""), g = [];
1011
+ if (h && g.push({
1012
+ text: h,
1013
+ fill: o,
1014
+ color: yt(o)
1015
+ }), t.quantity !== void 0 && t.quantity !== "" && g.push({
1016
+ text: String(t.quantity),
1017
+ fill: c,
1018
+ color: o
1019
+ }), s === "position" && typeof t.quantity == "number" && D(f)) {
1020
+ let e = (f - n) * t.quantity * (t.side === "sell" ? -1 : 1), r = e >= 0 ? l : u;
1021
+ g.push({
1022
+ text: `${e >= 0 ? "+" : "−"}${Z(Math.abs(e))}`,
1023
+ fill: r,
1024
+ color: yt(r)
1025
+ });
1026
+ }
1027
+ t.cancellable && g.push({
1028
+ text: "×",
1029
+ fill: c,
1030
+ color: o,
1031
+ cancel: !0
1032
+ });
1033
+ let _ = g.length > 0 || !!t.draggable, v = g.map((t) => t.cancel ? 20 : e.measureText(t.text).width + 12), y = t.draggable ? 14 : 0, x = _ ? v.reduce((e, t) => e + t, 0) + y : 0;
1034
+ b.push({
1035
+ line: t,
1036
+ price: n,
1037
+ at: i,
1038
+ y: a,
1039
+ top: Math.round(a - 9.5),
1040
+ left: Math.round(F - x - 56),
1041
+ color: o,
1042
+ parts: g,
1043
+ widths: v,
1044
+ grip: y,
1045
+ total: x
1046
+ });
1047
+ }
1048
+ let x = b.filter((e) => e.total > 0).sort((e, t) => Number(t.line.kind === "position") - Number(e.line.kind === "position"));
1049
+ if (je(x.map((e) => ({
1050
+ right: F - 56,
1051
+ top: e.top,
1052
+ width: e.total,
1053
+ height: 18
1054
+ })), _ ? [_.box] : [], 6).forEach((e, t) => {
1055
+ let n = x[t];
1056
+ n && (n.left = Math.round(e), h.push({
1057
+ left: n.left - 4,
1058
+ top: n.top - 4,
1059
+ right: n.left + n.total + 4,
1060
+ bottom: n.top + 22
1061
+ }));
1062
+ }), e.save(), e.beginPath(), e.rect(0, r.top, F, r.height), e.clip(), t && k.highLowMarkers !== !1 && Zn() !== "line" && Zn() !== "area" && Zn() !== "baseline") {
971
1063
  let n = -Infinity, i = Infinity, a = -1, o = -1;
972
1064
  for (let e = t.s0; e <= t.s1; e++) t.cols.high[e] > n && (n = t.cols.high[e], a = e), t.cols.low[e] < i && (i = t.cols.low[e], o = e);
973
- e.font = tr(R.fontSize), e.fillStyle = s, e.strokeStyle = s, e.lineWidth = 1;
974
- for (let [s, c, l] of [[
1065
+ e.font = Q(R.fontSize), e.fillStyle = s, e.strokeStyle = s, e.lineWidth = 1;
1066
+ let c = bi.map((e) => ({
1067
+ left: 0,
1068
+ top: e.top,
1069
+ right: e.right,
1070
+ bottom: e.bottom
1071
+ }));
1072
+ for (let [s, l, u] of [[
975
1073
  a,
976
1074
  n,
977
1075
  !1
@@ -980,193 +1078,214 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
980
1078
  i,
981
1079
  !0
982
1080
  ]]) {
983
- if (s < 0 || !T(c)) continue;
984
- let n = Q(kr(t, s)), i = Z(c), a = e.measureText(i).width, o = w(S(r.scale, c) + (l ? 9 : -9), r.top + 8, r.top + r.height - 8), u = Math.min(n, n + (n > F * .6 ? -17 - a : 17 + a));
985
- for (let e of fi) u < e.right && o - 7 < e.bottom && o + 7 > e.top && e.bottom + 10 < r.top + r.height - 8 && (o = e.bottom + 10);
986
- let d = F - 4 - (n + 17 + a), f = n - 17 - a - 4, p = (d < 0 || n > F * .6) && f >= Math.min(0, d), m = p ? -1 : 1;
987
- e.textBaseline = "middle", e.textAlign = "left", e.beginPath(), e.moveTo(n, o), e.lineTo(n + m * 14, o), e.stroke();
988
- let h = w(p ? n - 17 - a : n + 17, 2, F - a - 2);
989
- e.fillText(i, h, o);
1081
+ if (s < 0 || !D(l)) continue;
1082
+ let n = cr(Fr(t, s)), i = Z(l), a = e.measureText(i).width, o = r.top + 8, d = p - 8, f = E(w(r.scale, l) + (u ? 9 : -9), o, d), m = F - 4 - (n + 17 + a), g = n - 17 - a - 4, _ = (m < 0 || n > F * .6) && g >= Math.min(0, m), v = [], y = u ? 1 : -1;
1083
+ for (let e of [
1084
+ 0,
1085
+ 1,
1086
+ 2,
1087
+ 3,
1088
+ -1,
1089
+ -2
1090
+ ]) {
1091
+ let t = E(f + e * y * 17, o, d);
1092
+ if (!v.some((e) => e.y === t)) for (let e of [_, !_]) v.push({
1093
+ y: t,
1094
+ left: e,
1095
+ tx: E(e ? n - 17 - a : n + 17, 2, F - a - 2)
1096
+ });
1097
+ }
1098
+ for (let e of bi) {
1099
+ let t = e.bottom + 10;
1100
+ if (!(t > d || v.some((e) => e.y === t))) for (let e of [_, !_]) v.push({
1101
+ y: t,
1102
+ left: e,
1103
+ tx: E(e ? n - 17 - a : n + 17, 2, F - a - 2)
1104
+ });
1105
+ }
1106
+ let b = v.map((e) => ({
1107
+ left: e.tx - 2,
1108
+ top: e.y - 8,
1109
+ right: e.tx + a + 2,
1110
+ bottom: e.y + 8
1111
+ })), x = Ae(b, [...h, ...c]);
1112
+ x < 0 && (x = Ae(b, h));
1113
+ let S = v[x], ee = b[x];
1114
+ if (!S || !ee) continue;
1115
+ h.push(ee);
1116
+ let te = S.left ? -1 : 1;
1117
+ e.textBaseline = "middle", e.textAlign = "left", e.beginPath(), e.moveTo(n, f), e.lineTo(n + te * 14, S.y), e.stroke(), e.fillText(i, S.tx, S.y);
990
1118
  }
991
1119
  }
992
- if (t && D.markers?.length) {
1120
+ if (t && k.markers?.length) {
993
1121
  let n = /* @__PURE__ */ new Map();
994
- e.font = tr(R.fontSize, 600), e.textAlign = "center";
995
- let a = D.markers.length > 400;
996
- for (let o of D.markers) {
997
- let s = hr(o.time);
1122
+ e.font = Q(R.fontSize, 600), e.textAlign = "center";
1123
+ let a = k.markers.length > 400;
1124
+ for (let o of k.markers) {
1125
+ let s = xr(o.time);
998
1126
  if (s < 0 || s > i - 1) continue;
999
1127
  let d = Math.floor(s / t.size);
1000
1128
  if (d < t.g0 || d > t.g1) continue;
1001
- let f = Math.round(Q(kr(t, d))), p = o.side === "sell", m = o.color ? X(o.color) : p ? u : l, h = `${d}:${p}`, g = n.get(h) ?? 0;
1129
+ let f = Math.round(cr(Fr(t, d))), p = o.side === "sell", m = o.color ? X(o.color) : p ? u : l, h = `${d}:${p}`, g = n.get(h) ?? 0;
1002
1130
  n.set(h, g + (o.text && !a ? 30 : 16));
1003
- let _ = S(r.scale, p ? t.cols.high[d] : t.cols.low[d]), v = p ? -1 : 1, y = _ + v * (6 + g);
1004
- e.fillStyle = m, e.beginPath(), e.moveTo(f, y), e.lineTo(f - 5.5, y + v * 7), e.lineTo(f - 2, y + v * 7), e.lineTo(f - 2, y + v * 12), e.lineTo(f + 2, y + v * 12), e.lineTo(f + 2, y + v * 7), e.lineTo(f + 5.5, y + v * 7), e.closePath(), e.fill(), o.text && !a && (e.textBaseline = p ? "bottom" : "top", e.fillText(o.text, f, y + v * 14)), o.price !== void 0 && T(o.price) && (e.beginPath(), e.arc(f, S(r.scale, o.price), 3, 0, Math.PI * 2), e.fill(), e.lineWidth = 1.5, e.strokeStyle = c, e.stroke());
1131
+ let _ = w(r.scale, p ? t.cols.high[d] : t.cols.low[d]), v = p ? -1 : 1, y = _ + v * (6 + g);
1132
+ e.fillStyle = m, e.beginPath(), e.moveTo(f, y), e.lineTo(f - 5.5, y + v * 7), e.lineTo(f - 2, y + v * 7), e.lineTo(f - 2, y + v * 12), e.lineTo(f + 2, y + v * 12), e.lineTo(f + 2, y + v * 7), e.lineTo(f + 5.5, y + v * 7), e.closePath(), e.fill(), o.text && !a && (e.textBaseline = p ? "bottom" : "top", e.fillText(o.text, f, y + v * 14)), o.price !== void 0 && D(o.price) && (e.beginPath(), e.arc(f, w(r.scale, o.price), 3, 0, Math.PI * 2), e.fill(), e.lineWidth = 1.5, e.strokeStyle = c, e.stroke());
1005
1133
  }
1006
1134
  }
1007
- e.restore(), li(e, {
1135
+ e.restore(), _i(e, {
1008
1136
  text: a,
1009
1137
  background: c,
1010
1138
  up: l,
1011
1139
  down: u
1012
1140
  }), e.save(), e.beginPath(), e.rect(0, r.top, F, r.height), e.clip();
1013
- let f = i ? j.close[i - 1] : NaN;
1014
- for (let t of D.priceLines ?? []) {
1015
- let n = ei(t), i = Math.round(S(r.scale, n)) + .5;
1016
- if (!T(i) || i < r.top || i > r.top + r.height) continue;
1017
- let a = $r(t), o = t.kind ?? "line", s = t.lineStyle ?? (o === "position" || o === "line" ? "solid" : "dashed");
1018
- e.save(), e.strokeStyle = a, e.lineWidth = kn === t.id || U?.kind === "order" && U.line.id === t.id || H?.kind === "move" && H.id === t.id ? 1.5 : 1, ne(e, s, 1), e.beginPath(), e.moveTo(0, i), e.lineTo(F, i), e.stroke(), e.restore();
1019
- let p = gt[o], m = t.title ?? (p ? d[p] : ""), h = [];
1020
- if (m && h.push({
1021
- text: m,
1022
- fill: a,
1023
- color: _t(a)
1024
- }), t.quantity !== void 0 && t.quantity !== "" && h.push({
1025
- text: String(t.quantity),
1026
- fill: c,
1027
- color: a
1028
- }), o === "position" && typeof t.quantity == "number" && T(f)) {
1029
- let e = (f - n) * t.quantity * (t.side === "sell" ? -1 : 1), r = e >= 0 ? l : u;
1030
- h.push({
1031
- text: `${e >= 0 ? "+" : "−"}${Z(Math.abs(e))}`,
1032
- fill: r,
1033
- color: _t(r)
1034
- });
1141
+ for (let t of b) {
1142
+ let { line: n, y: r, color: i } = t, a = n.kind ?? "line", o = n.lineStyle ?? (a === "position" || a === "line" ? "solid" : "dashed");
1143
+ if (e.save(), e.strokeStyle = i, e.lineWidth = Fn === n.id || U?.kind === "order" && U.line.id === n.id || H?.kind === "move" && H.id === n.id ? 1.5 : 1, te(e, o, 1), e.beginPath(), e.moveTo(0, r), e.lineTo(F, r), e.stroke(), e.restore(), !t.total) continue;
1144
+ let { parts: s, widths: l, grip: u, total: d, top: f } = t, p = t.left;
1145
+ if (e.font = Q(R.fontSize, 600), p + d < F - 56 && (e.save(), e.strokeStyle = i, e.lineWidth = 1, e.setLineDash([]), e.beginPath(), e.moveTo(p + d, r), e.lineTo(Math.min(p + d + 6, F - 56), r), e.stroke(), e.restore()), H?.kind === "move" && H.id === n.id && (Zr(e, p - 3.5, f - 3.5, d + 7, 25, 5), e.strokeStyle = X(pt), e.lineWidth = 2, e.setLineDash([]), e.stroke()), Zr(e, p - .5, f - .5, d + 1, 19, 3), e.fillStyle = c, e.fill(), e.strokeStyle = i, e.lineWidth = 1, e.setLineDash([]), e.stroke(), u) {
1146
+ e.fillStyle = i;
1147
+ for (let t = 0; t < 3; t++) e.fillRect(p + 4, f + 5 + t * 3.5, 6, 1.5);
1148
+ p += u;
1035
1149
  }
1036
- if (t.cancellable && h.push({
1037
- text: "×",
1038
- fill: c,
1039
- color: a,
1040
- cancel: !0
1041
- }), !h.length && !t.draggable) continue;
1042
- e.font = tr(R.fontSize, 600);
1043
- let g = h.map((t) => t.cancel ? 20 : e.measureText(t.text).width + 12), _ = t.draggable ? 14 : 0, v = g.reduce((e, t) => e + t, 0) + _, y = Math.round(F - v - 56), b = Math.round(i - 9.5);
1044
- if (H?.kind === "move" && H.id === t.id && (Gr(e, y - 3.5, b - 3.5, v + 7, 25, 5), e.strokeStyle = X(dt), e.lineWidth = 2, e.setLineDash([]), e.stroke()), Gr(e, y - .5, b - .5, v + 1, 19, 3), e.fillStyle = c, e.fill(), e.strokeStyle = a, e.lineWidth = 1, e.setLineDash([]), e.stroke(), _) {
1045
- e.fillStyle = a;
1046
- for (let t = 0; t < 3; t++) e.fillRect(y + 4, b + 5 + t * 3.5, 6, 1.5);
1047
- y += _;
1048
- }
1049
- e.textBaseline = "middle", e.textAlign = "center", h.forEach((n, r) => {
1050
- let i = g[r] ?? 0, o = n.fill;
1051
- n.cancel && (ci(y, b, i, 18, () => q("orderCancel", {
1052
- id: t.id,
1053
- line: t
1054
- })) && (o = a), e.fillStyle = a, e.fillRect(y, b + 3, 1, 12)), o !== c && (e.fillStyle = o, e.fillRect(y, b, i, 18)), e.fillStyle = n.cancel && o !== c ? _t(a) : n.color, n.cancel && (e.font = tr(R.fontSize + 3, 500)), e.fillText(n.text, y + i / 2, b + (n.cancel ? 9 : 9.5)), e.font = tr(R.fontSize, 600), y += i;
1150
+ e.textBaseline = "middle", e.textAlign = "center", s.forEach((t, r) => {
1151
+ let a = l[r] ?? 0, o = t.fill;
1152
+ t.cancel && (gi(p, f, a, 18, () => q("orderCancel", {
1153
+ id: n.id,
1154
+ line: n
1155
+ })) && (o = i), e.fillStyle = i, e.fillRect(p, f + 3, 1, 12)), o !== c && (e.fillStyle = o, e.fillRect(p, f, a, 18)), e.fillStyle = t.cancel && o !== c ? yt(i) : t.color, t.cancel && (e.font = Q(R.fontSize + 3, 500)), e.fillText(t.text, p + a / 2, f + (t.cancel ? 9 : 9.5)), e.font = Q(R.fontSize, 600), p += a;
1055
1156
  });
1056
1157
  }
1057
- let p = D.lastPriceLine !== !1 && i > 0, m = i > 0 && j.close[i - 1] >= j.open[i - 1], h = Gn() === "line" || Gn() === "area" ? X(dt) : m ? l : u;
1058
- if (p) {
1059
- let t = Math.round(S(r.scale, f)) + .5;
1060
- e.save(), e.strokeStyle = h, e.setLineDash([1, 2]), e.beginPath(), e.moveTo(0, t), e.lineTo(F, t), e.stroke(), e.restore();
1158
+ let S = k.lastPriceLine !== !1 && i > 0, ee = i > 0 && M.close[i - 1] >= M.open[i - 1], ne = Zn() === "line" || Zn() === "area" ? X(pt) : ee ? l : u;
1159
+ if (S) {
1160
+ let t = Math.round(w(r.scale, f)) + .5;
1161
+ e.save(), e.strokeStyle = ne, e.setLineDash([1, 2]), e.beginPath(), e.moveTo(0, t), e.lineTo(F, t), e.stroke(), e.restore();
1061
1162
  }
1062
1163
  e.restore();
1063
- let g = [];
1064
- for (let e of Lt) {
1164
+ let re = [];
1165
+ for (let e of Ht) {
1065
1166
  let t = i - 1;
1066
- for (; t >= 0 && !T(e.values[t]);) t--;
1167
+ for (; t >= 0 && !D(e.values[t]);) t--;
1067
1168
  if (t < 0) continue;
1068
- let n = e.values[t], a = Nr(r.scale, n, Mr(e)), o = ze(r.scale, a);
1069
- !T(o) || o < r.top || o > r.top + r.height || g.push({
1169
+ let n = e.values[t], a = zr(r.scale, n, Rr(e)), o = Ve(r.scale, a);
1170
+ !D(o) || o < r.top || o > r.top + r.height || re.push({
1070
1171
  y: o,
1071
- text: r.scale.mode === "percent" ? de(a, J) : Z(n),
1172
+ text: r.scale.mode === "percent" ? le(a, J) : Z(n),
1072
1173
  color: X(e.color)
1073
1174
  });
1074
1175
  }
1075
- let _ = [];
1076
- for (let e of D.priceLines ?? []) _.push({
1077
- pane: C,
1078
- y: S(r.scale, ei(e))
1176
+ let ie = [], ae = {
1177
+ position: 3,
1178
+ order: 2,
1179
+ takeProfit: 2,
1180
+ stopLoss: 2
1181
+ };
1182
+ for (let e of b) ie.push({
1183
+ pane: r,
1184
+ y: e.at,
1185
+ text: ii(e.price),
1186
+ fill: e.color,
1187
+ priority: H?.kind === "move" && H.id === e.line.id ? 6 : ae[e.line.kind ?? "line"] ?? 1
1079
1188
  });
1080
1189
  for (let e of W) {
1081
- let t = ni(e.pane);
1082
- t && e.type === "horizontalLine" && e.points[0] && _.push({
1083
- pane: t.id,
1084
- y: S(t.scale, e.points[0].price)
1190
+ let t = ci(e.pane);
1191
+ if (!t || e.type !== "horizontalLine" || !e.points[0]) continue;
1192
+ let n = e.points[0].price, r = w(t.scale, n);
1193
+ r < t.top || r > t.top + t.height || ie.push({
1194
+ pane: t,
1195
+ y: r,
1196
+ text: t.id === T ? ii(n) : di(t, n),
1197
+ fill: X(e.color ?? pt),
1198
+ priority: 0
1085
1199
  });
1086
1200
  }
1087
- for (let e of g) _.push({
1088
- pane: C,
1089
- y: e.y
1201
+ for (let e of re) ie.push({
1202
+ pane: r,
1203
+ y: e.y,
1204
+ text: e.text,
1205
+ fill: e.color,
1206
+ priority: 1
1090
1207
  });
1091
- p && _.push({
1092
- pane: C,
1093
- y: S(r.scale, f) + (D.countdown ? 7 : 0)
1094
- }), e.font = tr(R.fontSize), e.textAlign = "left", e.textBaseline = "middle", e.fillStyle = s;
1095
- for (let t of L) for (let n of t.ticks) {
1096
- let r = ze(t.scale, n);
1097
- if (r < t.top + 8 || r > t.top + t.height - 8) continue;
1098
- let i = D.countdown && t.id === C ? 18 : 14;
1099
- _.some((e) => e.pane === t.id && Math.abs(e.y - r) < i) || e.fillText(zr(t, n), F + 8, r);
1100
- }
1101
- e.textAlign = "center";
1102
- for (let t of n) e.font = tr(R.fontSize, t.bold ? 600 : 400), e.fillStyle = t.bold ? a : s, e.fillText(t.text, t.x, I + it / 2);
1103
- for (let t of D.priceLines ?? []) {
1104
- let n = ei(t), i = S(r.scale, n);
1105
- if (!T(i) || i < r.top || i > r.top + r.height) continue;
1106
- let a = $r(t);
1107
- Zr(e, i, Qr(n), a, _t(a));
1108
- }
1109
- for (let t of W) {
1110
- let n = ni(t.pane);
1111
- if (!n || t.type !== "horizontalLine" || !t.points[0]) continue;
1112
- let r = t.points[0].price, i = S(n.scale, r);
1113
- if (i < n.top || i > n.top + n.height) continue;
1114
- let a = X(t.color ?? dt);
1115
- Zr(e, i, n.id === C ? Qr(r) : ai(n, r), a, _t(a));
1116
- }
1117
- for (let t of g) Zr(e, t.y, t.text, t.color, _t(t.color));
1118
- if (p) {
1119
- let t;
1120
- if (D.countdown) {
1121
- let e = $n(), n = j.time[i - 1], r = n + e.ms;
1122
- if (e.unit === "month") {
1123
- let t = new Date(n);
1124
- r = Date.UTC(t.getUTCFullYear(), t.getUTCMonth() + e.count, t.getUTCDate(), t.getUTCHours(), t.getUTCMinutes());
1208
+ if (S) {
1209
+ let e;
1210
+ if (k.countdown) {
1211
+ let t = ar(), n = M.time[i - 1], r = n + t.ms;
1212
+ if (t.unit === "month") {
1213
+ let e = new Date(n);
1214
+ r = Date.UTC(e.getUTCFullYear(), e.getUTCMonth() + t.count, e.getUTCDate(), e.getUTCHours(), e.getUTCMinutes());
1125
1215
  }
1126
- t = ce(r - Date.now(), d);
1216
+ e = oe(r - Date.now(), d);
1127
1217
  }
1128
- Zr(e, S(r.scale, f), Qr(f), h, _t(h), t);
1218
+ ie.push({
1219
+ pane: r,
1220
+ y: w(r.scale, f),
1221
+ text: ii(f),
1222
+ fill: ne,
1223
+ second: e,
1224
+ priority: 5
1225
+ });
1129
1226
  }
1130
- let v = r.top + r.height - 32;
1131
- if (Rn) {
1132
- let t = B && B.x <= F ? B.x : NaN;
1133
- T(t) && (e.fillStyle = o(R.background, .62), e.fillRect(t, 0, F - t, I), e.strokeStyle = X(dt), e.lineWidth = 1.5, e.beginPath(), e.moveTo(Math.round(t) + .5, 0), e.lineTo(Math.round(t) + .5, I), e.stroke()), si(e, d.replayHint, F / 2, v, X(dt));
1134
- } else K && i && si(e, x(d.replay, { time: le(ur(j.time[i - 1]), er(), J) }), F / 2, v, X(dt));
1135
- if (H && i) {
1136
- if (H.kind === "create") {
1137
- let t = H.side === "buy" ? l : u, n = Math.round(S(r.scale, H.price)) + .5;
1138
- T(n) && n >= r.top && n <= r.top + r.height && (e.save(), e.strokeStyle = t, e.lineWidth = 1.5, e.setLineDash([6, 4]), e.beginPath(), e.moveTo(0, n), e.lineTo(F, n), e.stroke(), e.restore(), si(e, x(H.side === "buy" ? d.buyLimit : d.sellLimit, { price: Z(H.price) }), F - 56, w(n - 11, r.top + 2, r.top + r.height - 24), t, "right"), Zr(e, n, Qr(H.price), t, _t(t)));
1227
+ _ && H?.kind === "create" && ie.push({
1228
+ pane: r,
1229
+ y: _.y,
1230
+ text: ii(H.price),
1231
+ fill: _.color,
1232
+ priority: 7
1233
+ });
1234
+ for (let e of L) {
1235
+ let t = ie.filter((t) => t.pane === e);
1236
+ if (!t.length) continue;
1237
+ let n = Me(t.map((e) => ({
1238
+ top: Math.round(e.y - 9),
1239
+ height: e.second ? 32 : 18,
1240
+ priority: e.priority
1241
+ })), e.top, Math.min(e.top + e.height, I), 1);
1242
+ t.forEach((e, t) => e.top = n[t] ?? null);
1243
+ }
1244
+ e.font = Q(R.fontSize), e.textAlign = "left", e.textBaseline = "middle", e.fillStyle = s;
1245
+ for (let t of L) {
1246
+ let n = ie.filter((e) => e.pane === t && e.top != null);
1247
+ for (let r of t.ticks) {
1248
+ let i = Ve(t.scale, r);
1249
+ i < t.top + 8 || i > t.top + t.height - 8 || n.some((e) => i > (e.top ?? 0) - 6 && i < (e.top ?? 0) + (e.second ? 32 : 18) + 6) || e.fillText(Gr(t, r), F + 8, i);
1139
1250
  }
1140
- !K && !Rn && si(e, d.orderHint, 8, v, o(R.text, .86), "left");
1141
1251
  }
1142
- let y = ti();
1143
- if (y && t && !Rn) {
1144
- let t = Math.round(Q(y.index)) + .5;
1252
+ e.textAlign = "center";
1253
+ for (let t of n) e.font = Q(R.fontSize, t.bold ? 600 : 400), e.fillStyle = t.bold ? a : s, e.fillText(t.text, t.x, I + ot / 2);
1254
+ for (let t of [...ie].sort((e, t) => e.priority - t.priority)) t.top != null && ri(e, t.y, t.text, t.fill, yt(t.fill), t.second, t.top);
1255
+ if (Wn) {
1256
+ let t = B && B.x <= F ? B.x : NaN;
1257
+ D(t) && (e.fillStyle = o(R.background, .62), e.fillRect(t, 0, F - t, I), e.strokeStyle = X(pt), e.lineWidth = 1.5, e.beginPath(), e.moveTo(Math.round(t) + .5, 0), e.lineTo(Math.round(t) + .5, I), e.stroke());
1258
+ }
1259
+ v && hi(e, v, F / 2, m, X(pt)), _ && (e.save(), e.strokeStyle = _.color, e.lineWidth = 1.5, e.setLineDash(_.type === "stop" ? [2, 3] : [6, 4]), e.beginPath(), e.moveTo(0, _.y), e.lineTo(F, _.y), e.stroke(), e.restore(), hi(e, _.text, _.box.left, _.box.top, _.color, "left")), y && hi(e, d.orderHint, 8, m, o(R.text, .86), "left");
1260
+ let C = si();
1261
+ if (C && t && !Wn) {
1262
+ let t = Math.round(cr(C.index)) + .5;
1145
1263
  e.save(), e.strokeStyle = o(R.textMuted, .75), e.lineWidth = 1, e.setLineDash([4, 3]), e.beginPath(), t >= 0 && t <= F && (e.moveTo(t, 0), e.lineTo(t, I));
1146
- let n = Math.round(y.y) + .5;
1147
- T(n) && n >= y.pane.top && n <= y.pane.top + y.pane.height && (e.moveTo(0, n), e.lineTo(F, n)), e.stroke(), e.restore();
1264
+ let n = Math.round(C.y) + .5;
1265
+ D(n) && n >= C.pane.top && n <= C.pane.top + C.pane.height && (e.moveTo(0, n), e.lineTo(F, n)), e.stroke(), e.restore();
1148
1266
  let a = o(R.text);
1149
- if (T(y.y) && y.y >= y.pane.top && y.y <= y.pane.top + y.pane.height) {
1150
- let t = Ie(y.pane.scale, y.y), n = y.pane.id === C ? Qr(Ne(y.pane.scale, t)) : zr(y.pane, t);
1151
- Zr(e, y.y, n, a, c);
1267
+ if (D(C.y) && C.y >= C.pane.top && C.y <= C.pane.top + C.pane.height) {
1268
+ let t = Re(C.pane.scale, C.y), n = C.pane.id === T ? ii(Fe(C.pane.scale, t)) : Gr(C.pane, t);
1269
+ ri(e, C.y, n, a, c);
1152
1270
  }
1153
1271
  if (t >= 0 && t <= F && i) {
1154
- let n = le(ur(ir(y.index)), er(), J);
1155
- e.font = tr(R.fontSize, 500);
1156
- let r = e.measureText(n).width + 16, i = w(t - r / 2, 0, Gt - r);
1157
- Gr(e, i, I + 3, r, 21, 3), e.fillStyle = a, e.fill(), e.fillStyle = c, e.textAlign = "center", e.textBaseline = "middle", e.fillText(n, i + r / 2, I + 14);
1272
+ let n = se(gr(ur(C.index)), or(), J);
1273
+ e.font = Q(R.fontSize, 500);
1274
+ let r = e.measureText(n).width + 16, i = E(t - r / 2, 0, Xt - r);
1275
+ Zr(e, i, I + 3, r, 21, 3), e.fillStyle = a, e.fill(), e.fillStyle = c, e.textAlign = "center", e.textBaseline = "middle", e.fillText(n, i + r / 2, I + 14);
1158
1276
  }
1159
- if (D.orderEntry && B && y.pane.id === C && T(y.y) && vn === "cursor" && !U && i) {
1160
- let t = F - 18 - 4, n = w(Math.round(y.y - 9), r.top + 1, r.top + r.height - 18 - 1), i = oi(y.price), o = i < f ? "buy" : "sell", s = ci(t, n, 18, 18, () => q("orderCreate", {
1277
+ if (k.orderEntry && B && C.pane.id === T && D(C.y) && wn === "cursor" && !U && i) {
1278
+ let t = F - 18 - 4, n = E(Math.round(C.y - 9), r.top + 1, r.top + r.height - 18 - 1), i = fi(C.price), o = fi(f), s = i < o ? "buy" : "sell", d = pn ? s === "buy" ? "sell" : "buy" : s, p = xt(d, i, o), m = gi(t, n, 18, 18, () => q("orderCreate", {
1161
1279
  price: i,
1162
- side: o
1280
+ side: d,
1281
+ orderType: p
1163
1282
  }));
1164
- Gr(e, t, n, 18, 18, 4), e.fillStyle = s ? X(dt) : a, e.fill(), e.strokeStyle = s ? _t(X(dt)) : c, e.lineWidth = 1.5, e.beginPath(), e.moveTo(t + 5, n + 9), e.lineTo(t + 18 - 5, n + 9), e.moveTo(t + 9, n + 5), e.lineTo(t + 9, n + 18 - 5), e.stroke(), s && si(e, x(o === "buy" ? d.buyLimit : d.sellLimit, { price: Z(i) }), t - 6, n - 2, o === "buy" ? l : u, "right");
1283
+ Zr(e, t, n, 18, 18, 4), e.fillStyle = m ? X(pt) : a, e.fill(), e.strokeStyle = m ? yt(X(pt)) : c, e.lineWidth = 1.5, e.beginPath(), e.moveTo(t + 5, n + 9), e.lineTo(t + 18 - 5, n + 9), e.moveTo(t + 9, n + 5), e.lineTo(t + 9, n + 18 - 5), e.stroke(), m && hi(e, mi(d, p, i), t - 6, n - 2, d === "buy" ? l : u, "right");
1165
1284
  }
1166
1285
  }
1167
- }, di = "", fi = [], pi = /* @__PURE__ */ new Map(), mi = /* @__PURE__ */ new Map(), hi = (e) => {
1168
- let t = mi.get(e);
1169
- return t || (t = Ct("div", {
1286
+ }, yi = "", bi = [], xi = /* @__PURE__ */ new Map(), Si = /* @__PURE__ */ new Map(), Ci = (e) => {
1287
+ let t = Si.get(e);
1288
+ return t || (t = Et("div", {
1170
1289
  position: "absolute",
1171
1290
  left: "4px",
1172
1291
  display: "flex",
@@ -1180,9 +1299,9 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1180
1299
  fontVariantNumeric: "tabular-nums",
1181
1300
  whiteSpace: "nowrap",
1182
1301
  pointerEvents: "none"
1183
- }), Dt.appendChild(t), mi.set(e, t)), t;
1184
- }, gi = (e, t, n, r) => {
1185
- let i = Ct("div", {
1302
+ }), At.appendChild(t), Si.set(e, t)), t;
1303
+ }, wi = (e, t, n, r) => {
1304
+ let i = Et("div", {
1186
1305
  display: "flex",
1187
1306
  flexWrap: "wrap",
1188
1307
  alignItems: "center",
@@ -1194,32 +1313,32 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1194
1313
  borderRadius: "4px",
1195
1314
  background: "color-mix(in srgb, var(--surface-color, var(--background-color, #fff)) 86%, transparent)"
1196
1315
  }), a = null;
1197
- if (n) a = Ct("button", {
1316
+ if (n) a = Et("button", {
1198
1317
  all: "unset",
1199
1318
  cursor: "pointer",
1200
1319
  pointerEvents: "auto",
1201
1320
  color: "var(--text-color, #1f2937)",
1202
1321
  fontWeight: "500",
1203
1322
  borderRadius: "3px",
1204
- ...yt
1205
- }), a.type = "button", a.textContent = t, a.setAttribute("aria-label", x(Wn().toggleIndicator, { name: t })), a.addEventListener("click", (e) => {
1323
+ ...St
1324
+ }), a.type = "button", a.textContent = t, a.setAttribute("aria-label", ke(Xn().toggleIndicator, { name: t })), a.addEventListener("click", (e) => {
1206
1325
  e.stopPropagation();
1207
- let t = !nr(n);
1208
- It.set(n.id, t), q("indicatorToggle", {
1326
+ let t = !sr(n);
1327
+ Vt.set(n.id, t), q("indicatorToggle", {
1209
1328
  id: n.id,
1210
1329
  visible: t
1211
- }), bi(), $();
1330
+ }), Oi(), $();
1212
1331
  }), a.addEventListener("pointerdown", (e) => e.stopPropagation()), i.appendChild(a);
1213
1332
  else if (t) {
1214
- let e = Ct("span", {
1333
+ let e = Et("span", {
1215
1334
  fontWeight: "600",
1216
- ...yt
1335
+ ...St
1217
1336
  });
1218
1337
  e.textContent = t, i.appendChild(e);
1219
1338
  }
1220
1339
  let o = [];
1221
1340
  for (let e = 0; e < r; e++) {
1222
- let e = Ct("span", yt);
1341
+ let e = Et("span", St);
1223
1342
  i.appendChild(e), o.push(e);
1224
1343
  }
1225
1344
  return e.appendChild(i), {
@@ -1227,36 +1346,36 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1227
1346
  values: o,
1228
1347
  button: a
1229
1348
  };
1230
- }, _i = () => {
1231
- pi.clear();
1232
- for (let e of mi.values()) e.remove();
1233
- if (mi.clear(), D.legend === !1) return;
1234
- let e = hi(C), t = [D.symbol, D.labels?.timeframe ?? (typeof D.timeframe == "string" ? D.timeframe : "")].filter(Boolean).join(" · ");
1235
- pi.set("ohlc", gi(e, t, null, 1));
1236
- for (let t of M) {
1349
+ }, Ti = () => {
1350
+ xi.clear();
1351
+ for (let e of Si.values()) e.remove();
1352
+ if (Si.clear(), k.legend === !1) return;
1353
+ let e = Ci(T), t = [k.symbol, k.labels?.timeframe ?? (typeof k.timeframe == "string" ? k.timeframe : "")].filter(Boolean).join(" · ");
1354
+ xi.set("ohlc", wi(e, t, null, 1));
1355
+ for (let t of zt) {
1237
1356
  let n = t.mergeLegend ? 1 : t.outputs.length;
1238
- t.overlay && t.type === "volume" ? pi.set(t.id, gi(e, vi(t), t, 1)) : t.overlay && pi.set(t.id, gi(e, vi(t), t, n));
1357
+ t.overlay && t.type === "volume" ? xi.set(t.id, wi(e, Ei(t), t, 1)) : t.overlay && xi.set(t.id, wi(e, Ei(t), t, n));
1239
1358
  }
1240
- for (let t of Lt) pi.set(`compare:${t.id}`, gi(e, "", null, 1));
1241
- for (let e of M) e.overlay || pi.set(e.id, gi(hi(e.id), vi(e), e, e.mergeLegend ? 1 : e.outputs.length));
1242
- }, vi = (e) => e.type === "volume" ? Wn().volume : e.titleKey ? `${Wn()[e.titleKey]} ${e.title}` : e.title, yi = (e, t, n) => {
1359
+ for (let t of Ht) xi.set(`compare:${t.id}`, wi(e, "", null, 1));
1360
+ for (let e of zt) e.overlay || xi.set(e.id, wi(Ci(e.id), Ei(e), e, e.mergeLegend ? 1 : e.outputs.length));
1361
+ }, Ei = (e) => e.type === "volume" ? Xn().volume : e.titleKey ? `${Xn()[e.titleKey]} ${e.title}` : e.title, Di = (e, t, n) => {
1243
1362
  if (!e) return;
1244
1363
  e.textContent !== t && (e.textContent = t);
1245
1364
  let r = n ?? "";
1246
1365
  e.style.color !== r && (e.style.color = r);
1247
- }, bi = () => {
1366
+ }, Oi = () => {
1248
1367
  let e = [
1249
- D.legend !== !1,
1250
- D.symbol,
1251
- D.timeframe,
1252
- ...M.map((e) => `${e.id}:${vi(e)}:${e.outputs.length}`),
1253
- ...Lt.map((e) => e.id),
1254
- Hn.toggleIndicator,
1255
- D.labels?.timeframe
1368
+ k.legend !== !1,
1369
+ k.symbol,
1370
+ k.timeframe,
1371
+ ...zt.map((e) => `${e.id}:${Ei(e)}:${e.outputs.length}`),
1372
+ ...Ht.map((e) => e.id),
1373
+ Jn.toggleIndicator,
1374
+ k.labels?.timeframe
1256
1375
  ].join("|");
1257
- if (e !== di && (di = e, _i()), D.legend === !1) return;
1376
+ if (e !== yi && (yi = e, Ti()), k.legend === !1) return;
1258
1377
  for (let e of L) {
1259
- let t = mi.get(e.id);
1378
+ let t = Si.get(e.id);
1260
1379
  if (!t) continue;
1261
1380
  t.style.top = `${e.top + 6}px`;
1262
1381
  let n = `${Math.max(60, Math.floor(F - 10))}px`;
@@ -1264,211 +1383,211 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1264
1383
  let r = `${Math.max(18, Math.floor(e.height - 10))}px`;
1265
1384
  t.style.maxHeight !== r && (t.style.maxHeight = r);
1266
1385
  }
1267
- let t = mi.get(C), n = t ? Array.from(t.children, (e) => ({
1386
+ let t = Si.get(T), n = t ? Array.from(t.children, (e) => ({
1268
1387
  right: t.offsetLeft + e.offsetLeft + e.offsetWidth,
1269
1388
  top: t.offsetTop + e.offsetTop,
1270
1389
  bottom: t.offsetTop + e.offsetTop + e.offsetHeight
1271
- })) : [], r = n.length !== fi.length || n.some((e, t) => {
1272
- let n = fi[t];
1390
+ })) : [], r = n.length !== bi.length || n.some((e, t) => {
1391
+ let n = bi[t];
1273
1392
  return !n || n.right !== e.right || n.top !== e.top || n.bottom !== e.bottom;
1274
1393
  });
1275
- fi = n, r && $();
1276
- let i = Y(), a = ti(), o = w(a && a.index >= 0 && a.index < i ? a.index : i - 1, 0, Math.max(0, i - 1)), s = Wn(), c = pi.get("ohlc"), l = X(qn()), u = X(Jn());
1394
+ bi = n, r && $();
1395
+ let i = Y(), a = si(), o = E(a && a.index >= 0 && a.index < i ? a.index : i - 1, 0, Math.max(0, i - 1)), s = Xn(), c = xi.get("ohlc"), l = X($n()), u = X(er());
1277
1396
  if (c && i) {
1278
- let e = gr(), t = e.open[o], n = e.close[o], r = o > 0 ? e.close[o - 1] : t, i = n - r, a = n >= t ? l : u, d = c.values[0], f = [
1397
+ let e = Sr(), t = e.open[o], n = e.close[o], r = o > 0 ? e.close[o - 1] : t, i = n - r, a = n >= t ? l : u, d = c.values[0], f = [
1279
1398
  [s.open, e.open[o]],
1280
1399
  [s.high, e.high[o]],
1281
1400
  [s.low, e.low[o]],
1282
1401
  [s.close, n]
1283
- ].map(([e, t]) => `<span style="${bt}"><span style="color:var(--text-secondary-color,#6b7280)">${xi(String(e))}</span><span style="color:${a}">${xi(Z(t))}</span></span>`).join(""), p = r ? i / r * 100 : NaN, m = `${f}${`<span style="${bt}">${s.change ? `<span style="color:var(--text-secondary-color,#6b7280)">${xi(s.change)}</span>` : ""}<span style="color:${i >= 0 ? l : u}">${i >= 0 ? "+" : "−"}${xi(Z(Math.abs(i)))} (${xi(de(p, J))})</span></span>`}${j.hasVolume ? `<span style="${bt}"><span style="color:var(--text-secondary-color,#6b7280)">${xi(s.volume)}</span>${xi(fe(j.volume[o], J))}</span>` : ""}`;
1402
+ ].map(([e, t]) => `<span style="${Ct}"><span style="color:var(--text-secondary-color,#6b7280)">${ki(String(e))}</span><span style="color:${a}">${ki(Z(t))}</span></span>`).join(""), p = r ? i / r * 100 : NaN, m = `${f}${`<span style="${Ct}">${s.change ? `<span style="color:var(--text-secondary-color,#6b7280)">${ki(s.change)}</span>` : ""}<span style="color:${i >= 0 ? l : u}">${i >= 0 ? "+" : "−"}${ki(Z(Math.abs(i)))} (${ki(le(p, J))})</span></span>`}${M.hasVolume ? `<span style="${Ct}"><span style="color:var(--text-secondary-color,#6b7280)">${ki(s.volume)}</span>${ki(ue(M.volume[o], J))}</span>` : ""}`;
1284
1403
  d && d.dataset.html !== m && (d.innerHTML = m, d.dataset.html = m, d.style.display = "inline-flex", d.style.columnGap = "6px", d.style.flexWrap = "wrap");
1285
1404
  }
1286
- for (let e of M) {
1287
- let t = pi.get(e.id);
1405
+ for (let e of zt) {
1406
+ let t = xi.get(e.id);
1288
1407
  if (!t) continue;
1289
- let n = nr(e);
1408
+ let n = sr(e);
1290
1409
  t.row.style.opacity = n ? "1" : "0.5", t.button && (t.button.setAttribute("aria-pressed", String(n)), t.button.style.textDecoration = n ? "none" : "line-through");
1291
1410
  let r = e.outputs.length;
1292
1411
  if (e.mergeLegend) {
1293
- let r = e.outputs.find((e) => T(e.values[o]));
1294
- yi(t.values[0], n && i && r ? Br(e, r.values[o]) : "", r ? X(dr(r.color)) : void 0);
1412
+ let r = e.outputs.find((e) => D(e.values[o]));
1413
+ Di(t.values[0], n && i && r ? Kr(e, r.values[o]) : "", r ? X(_r(r.color)) : void 0);
1295
1414
  continue;
1296
1415
  }
1297
1416
  e.outputs.forEach((a, s) => {
1298
1417
  let c = t.values[e.type === "macd" ? (s + r - 1) % r : s];
1299
1418
  if (!n || !i) {
1300
- yi(c, "");
1419
+ Di(c, "");
1301
1420
  return;
1302
1421
  }
1303
1422
  if (a.kind === "volume") {
1304
- let e = j.close[o] >= j.open[o] ? l : u;
1305
- yi(c, fe(j.volume[o], J), e);
1423
+ let e = M.close[o] >= M.open[o] ? l : u;
1424
+ Di(c, ue(M.volume[o], J), e);
1306
1425
  return;
1307
1426
  }
1308
- let d = o - a.shift, f = d >= 0 && d < i ? a.values[d] : NaN, p = a.color ? X(dr(a.color)) : void 0;
1309
- a.kind === "histogram" && (p = f >= 0 ? l : u), a.kind === "dots" && !a.color && (p = f <= j.close[o] ? l : u);
1427
+ let d = o - a.shift, f = d >= 0 && d < i ? a.values[d] : NaN, p = a.color ? X(_r(a.color)) : void 0;
1428
+ a.kind === "histogram" && (p = f >= 0 ? l : u), a.kind === "dots" && !a.color && (p = f <= M.close[o] ? l : u);
1310
1429
  let m = e.outputs.length > 1 && !e.plainLegend ? `${a.label} ` : "";
1311
- yi(c, `${m}${Br(e, f)}`, p);
1430
+ Di(c, `${m}${Kr(e, f)}`, p);
1312
1431
  });
1313
1432
  }
1314
- for (let e of Lt) {
1315
- let t = pi.get(`compare:${e.id}`);
1433
+ for (let e of Ht) {
1434
+ let t = xi.get(`compare:${e.id}`);
1316
1435
  if (!t) continue;
1317
- let n = e.values[o], r = Mr(e), i = T(r) ? (n / r - 1) * 100 : NaN;
1318
- yi(t.values[0], `${e.name} ${Z(n)} ${de(i, J)}`, X(e.color));
1436
+ let n = e.values[o], r = Rr(e), i = D(r) ? (n / r - 1) * 100 : NaN;
1437
+ Di(t.values[0], `${e.name} ${Z(n)} ${le(i, J)}`, X(e.color));
1319
1438
  }
1320
- }, xi = (e) => e.replace(/[&<>"]/g, (e) => e === "&" ? "&amp;" : e === "<" ? "&lt;" : e === ">" ? "&gt;" : "&quot;"), $ = () => {
1321
- St || en || (en = xt?.requestAnimationFrame ? xt.requestAnimationFrame(wi) : setTimeout(() => wi(Date.now()), 16));
1322
- }, Si = (e) => {
1439
+ }, ki = (e) => e.replace(/[&<>"]/g, (e) => e === "&" ? "&amp;" : e === "<" ? "&lt;" : e === ">" ? "&gt;" : "&quot;"), $ = () => {
1440
+ Tt || on || (on = wt?.requestAnimationFrame ? wt.requestAnimationFrame(Mi) : setTimeout(() => Mi(Date.now()), 16));
1441
+ }, Ai = (e) => {
1323
1442
  let t = !1;
1324
- if (dn) {
1325
- let n = Math.min(1, (e - dn.start) / 320), r = 1 - (1 - n) ** 3;
1326
- P = dn.from + (dn.to - dn.from) * r, n >= 1 ? dn = null : t = !0;
1443
+ if (_n) {
1444
+ let n = Math.min(1, (e - _n.start) / 320), r = 1 - (1 - n) ** 3;
1445
+ P = _n.from + (_n.to - _n.from) * r, n >= 1 ? _n = null : t = !0;
1327
1446
  }
1328
- if (un) {
1329
- let n = Math.min(64, e - un.t);
1330
- un.t = e;
1447
+ if (gn) {
1448
+ let n = Math.min(64, e - gn.t);
1449
+ gn.t = e;
1331
1450
  let r = P;
1332
- P -= un.v * n / N, un.v *= Math.exp(-n / 320), Dr(), Math.abs(un.v) < .02 || P === r ? un = null : t = !0;
1451
+ P -= gn.v * n / N, gn.v *= Math.exp(-n / 320), Nr(), Math.abs(gn.v) < .02 || P === r ? gn = null : t = !0;
1333
1452
  }
1334
1453
  return t;
1335
- }, Ci = (e) => {
1336
- e.font = tr(R.fontSize, 500);
1454
+ }, ji = (e) => {
1455
+ e.font = Q(R.fontSize, 500);
1337
1456
  let t = 0;
1338
- for (let n of L) for (let r of n.ticks) t = Math.max(t, e.measureText(zr(n, r)).width);
1457
+ for (let n of L) for (let r of n.ticks) t = Math.max(t, e.measureText(Gr(n, r)).width);
1339
1458
  let n = Y();
1340
- n && (t = Math.max(t, e.measureText(Qr(j.close[n - 1])).width), D.countdown && (t = Math.max(t, e.measureText("00:00:00").width)));
1341
- let r = Math.max(at, Math.ceil(t + 18));
1342
- (r > Wt || r < Wt - 12) && (Wt = r);
1459
+ n && (t = Math.max(t, e.measureText(ii(M.close[n - 1])).width), k.countdown && (t = Math.max(t, e.measureText("00:00:00").width)));
1460
+ let r = Math.max(st, Math.ceil(t + 18));
1461
+ (r > Yt || r < Yt - 12) && (Yt = r);
1343
1462
  };
1344
- function wi(e) {
1345
- if (en = 0, St || (Gt = O.clientWidth, Kt = O.clientHeight, Gt <= 0 || Kt <= 0)) return;
1346
- let t = Si(typeof performance < "u" ? performance.now() : e ?? Date.now()), n = xt?.devicePixelRatio || 1;
1347
- vr(), Wr(Tt, n), Wr(Et, n);
1348
- let r = Tt.getContext("2d"), i = Et.getContext("2d");
1349
- I = Math.max(1, Kt - it);
1463
+ function Mi(e) {
1464
+ if (on = 0, Tt || (Xt = A.clientWidth, Zt = A.clientHeight, Xt <= 0 || Zt <= 0)) return;
1465
+ let t = Ai(typeof performance < "u" ? performance.now() : e ?? Date.now()), n = wt?.devicePixelRatio || 1;
1466
+ wr(), Xr(Ot, n), Xr(kt, n);
1467
+ let r = Ot.getContext("2d"), i = kt.getContext("2d");
1468
+ I = Math.max(1, Zt - ot);
1350
1469
  for (let e = 0; e < 2; e++) {
1351
- F = Math.max(1, Gt - Wt), Tr(), fn && ki(fn), Dr(), Yt = Or(), Lr(Yt);
1470
+ F = Math.max(1, Xt - Yt), jr(), vn && Li(vn), Nr(), en = Pr(), Ur(en);
1352
1471
  for (let e of L) {
1353
- let t = Fe(e.scale, e.id === C ? 44 : 30), n = e.study?.range, r = e.study?.bands;
1472
+ let t = Le(e.scale, e.id === T ? 44 : 30), n = e.study?.range, r = e.study?.bands;
1354
1473
  e.ticks = n && r ? [...r, (n[0] + n[1]) / 2].sort((e, t) => e - t) : t.scaled, e.step = t.step;
1355
1474
  }
1356
- let e = Wt;
1357
- if (i && Ci(i), Wt === e) break;
1475
+ let e = Yt;
1476
+ if (i && ji(i), Yt === e) break;
1358
1477
  }
1359
- let a = Yt;
1360
- fn = null;
1361
- let o = i ? Rr(a, i) : [];
1362
- Ur(a, n), r && (r.setTransform(n, 0, 0, n, 0, 0), r.clearRect(0, 0, Gt, Kt), Xr(r, a, o)), i && (i.setTransform(n, 0, 0, n, 0, 0), i.clearRect(0, 0, Gt, Kt), ui(i, a, o)), bi(), Ti(), ia(), Zi(), Di(), B && !U && Ji(B.x, B.y) !== jn && (ma(B.x, B.y), $()), t && $();
1478
+ let a = en;
1479
+ vn = null;
1480
+ let o = i ? Wr(a, i) : [];
1481
+ Yr(a, n), r && (r.setTransform(n, 0, 0, n, 0, 0), r.clearRect(0, 0, Xt, Zt), ni(r, a, o)), i && (i.setTransform(n, 0, 0, n, 0, 0), i.clearRect(0, 0, Xt, Zt), vi(i, a, o)), Oi(), Ni(), fa(), aa(), Fi(), B && !U && na(B.x, B.y) !== Ln && (Sa(B.x, B.y), $()), t && $();
1363
1482
  }
1364
- let Ti = () => {
1365
- let e = Y(), t = L[0], n = e > 0 && t && Q(e - 1) > F + N * .5;
1366
- if (Ot.style.display = n ? "flex" : "none", n && t) {
1367
- Ot.style.left = `${F - 40}px`, Ot.style.top = `${t.top + t.height - 40}px`;
1368
- let e = Wn().scrollToRealtime;
1369
- Ot.getAttribute("aria-label") !== e && (Ot.setAttribute("aria-label", e), Ot.title = e);
1370
- }
1371
- }, Ei = () => {
1483
+ let Ni = () => {
1484
+ let e = Y(), t = L[0], n = e > 0 && t && cr(e - 1) > F + N * .5;
1485
+ if (jt.style.display = n ? "flex" : "none", n && t) {
1486
+ jt.style.left = `${F - 40}px`, jt.style.top = `${t.top + t.height - 40}px`;
1487
+ let e = Xn().scrollToRealtime;
1488
+ jt.getAttribute("aria-label") !== e && (jt.setAttribute("aria-label", e), jt.title = e);
1489
+ }
1490
+ }, Pi = () => {
1372
1491
  let e = P - F / N;
1373
1492
  return {
1374
1493
  from: e,
1375
1494
  to: P,
1376
- fromTime: ir(e),
1377
- toTime: ir(P)
1495
+ fromTime: ur(e),
1496
+ toTime: ur(P)
1378
1497
  };
1379
- }, Di = () => {
1498
+ }, Fi = () => {
1380
1499
  let e = Y();
1381
1500
  if (!e) return;
1382
- let t = Ei();
1383
- (!Mn || Math.abs(Mn.from - t.from) > 1e-6 || Math.abs(Mn.to - t.to) > 1e-6) && (Mn = t, Nn || q("visibleRangeChange", t)), Nn = !1, t.from < 10 && In !== j.time[0] && (In = j.time[0], q("historyRequest", {
1384
- firstTime: j.time[0],
1501
+ let t = Pi();
1502
+ (!Rn || Math.abs(Rn.from - t.from) > 1e-6 || Math.abs(Rn.to - t.to) > 1e-6) && (Rn = t, zn || q("visibleRangeChange", t)), zn = !1, t.from < 10 && Hn !== M.time[0] && (Hn = M.time[0], q("historyRequest", {
1503
+ firstTime: M.time[0],
1385
1504
  count: e
1386
1505
  }));
1387
- let n = ti(), r = n && (B || V !== null) ? n : null, i = r ? `${r.index}|${r.price}|${r.pane.id}` : "";
1388
- if (i !== Fn) {
1389
- if (Fn = i, !r) q("crosshairMove", null);
1506
+ let n = si(), r = n && (B || V !== null) ? n : null, i = r ? `${r.index}|${r.price}|${r.pane.id}` : "";
1507
+ if (i !== Vn) {
1508
+ if (Vn = i, !r) q("crosshairMove", null);
1390
1509
  else {
1391
1510
  let t = {
1392
1511
  index: r.index,
1393
- time: ir(r.index),
1394
- bar: r.index >= 0 && r.index < e ? $e(j, r.index) : null,
1512
+ time: ur(r.index),
1513
+ bar: r.index >= 0 && r.index < e ? tt(M, r.index) : null,
1395
1514
  price: r.price,
1396
1515
  pane: r.pane.id,
1397
- x: Q(r.index),
1516
+ x: cr(r.index),
1398
1517
  y: r.y
1399
1518
  };
1400
1519
  q("crosshairMove", t);
1401
1520
  }
1402
1521
  }
1403
- }, Oi = (e) => {
1404
- let t = O.getBoundingClientRect();
1522
+ }, Ii = (e) => {
1523
+ let t = A.getBoundingClientRect();
1405
1524
  return {
1406
1525
  x: e.clientX - t.left,
1407
1526
  y: e.clientY - t.top
1408
1527
  };
1409
- }, ki = (e) => {
1410
- N = F / (e.to - e.from), P = e.to, Dr();
1411
- }, Ai = (e, t) => {
1528
+ }, Li = (e) => {
1529
+ N = F / (e.to - e.from), P = e.to, Nr();
1530
+ }, Ri = (e, t) => {
1412
1531
  let n = Y();
1413
- n && Sr() && (e = Math.min(F, Q(n - 1)));
1414
- let r = rr(e);
1415
- N *= t, Dr(), P = r + (F - e) / N, Dr(), un = null, dn = null, $();
1416
- }, ji = (e, t, n) => {
1417
- let r = Math.round(rr(e));
1532
+ n && Or() && (e = Math.min(F, cr(n - 1)));
1533
+ let r = lr(e);
1534
+ N *= t, Nr(), P = r + (F - e) / N, Nr(), gn = null, _n = null, $();
1535
+ }, zi = (e, t, n) => {
1536
+ let r = Math.round(lr(e));
1418
1537
  return {
1419
- time: ir(r),
1420
- price: Re(n.scale, t)
1538
+ time: ur(r),
1539
+ price: Be(n.scale, t)
1421
1540
  };
1422
- }, Mi = (e, t) => {
1423
- e !== vn && (vn = e, G = null, xn = 0, t && q("drawingToolChange", e), $());
1424
- }, Ni = (e) => {
1425
- e !== yn && (yn = e, Dn = !1, q("drawingSelect", e), $());
1426
- }, Pi = () => ({
1427
- canUndo: hn.length > 0,
1428
- canRedo: gn.length > 0
1429
- }), Fi = () => {
1430
- let e = Pi(), t = `${e.canUndo}|${e.canRedo}`;
1431
- t !== _n && (_n = t, q("undoChange", e));
1432
- }, Ii = (e, t = !0) => {
1433
- e !== mn && (hn.push(mn), hn.length > ft && hn.shift(), gn.length = 0, mn = e), W = e, t && (pn = e, q("drawingsChange", e)), yn && !e.some((e) => e.id === yn) && Ni(null), Fi(), $();
1434
- }, Li = (e) => {
1435
- mn = e, W = e, pn = e, G = null, yn && !e.some((e) => e.id === yn) && Ni(null), q("drawingsChange", e), Fi(), $();
1436
- }, Ri = () => {
1437
- let e = hn.pop();
1438
- e && (Tn && $i(!1), gn.push(mn), Li(e));
1439
- }, zi = () => {
1440
- let e = gn.pop();
1441
- e && (hn.push(mn), Li(e));
1442
1541
  }, Bi = (e, t) => {
1443
- W.some((t) => t.id === e) && Ii(W.map((n) => n.id === e ? {
1542
+ e !== wn && (wn = e, G = null, Dn = 0, t && q("drawingToolChange", e), $());
1543
+ }, Vi = (e) => {
1544
+ e !== Tn && (Tn = e, Nn = !1, q("drawingSelect", e), $());
1545
+ }, Hi = () => ({
1546
+ canUndo: xn.length > 0,
1547
+ canRedo: Sn.length > 0
1548
+ }), Ui = () => {
1549
+ let e = Hi(), t = `${e.canUndo}|${e.canRedo}`;
1550
+ t !== Cn && (Cn = t, q("undoChange", e));
1551
+ }, Wi = (e, t = !0) => {
1552
+ e !== bn && (xn.push(bn), xn.length > mt && xn.shift(), Sn.length = 0, bn = e), W = e, t && (yn = e, q("drawingsChange", e)), Tn && !e.some((e) => e.id === Tn) && Vi(null), Ui(), $();
1553
+ }, Gi = (e) => {
1554
+ bn = e, W = e, yn = e, G = null, Tn && !e.some((e) => e.id === Tn) && Vi(null), q("drawingsChange", e), Ui(), $();
1555
+ }, Ki = () => {
1556
+ let e = xn.pop();
1557
+ e && (jn && sa(!1), Sn.push(bn), Gi(e));
1558
+ }, qi = () => {
1559
+ let e = Sn.pop();
1560
+ e && (xn.push(bn), Gi(e));
1561
+ }, Ji = (e, t) => {
1562
+ W.some((t) => t.id === e) && Wi(W.map((n) => n.id === e ? {
1444
1563
  ...n,
1445
1564
  ...t,
1446
1565
  id: n.id,
1447
1566
  type: n.type
1448
1567
  } : n));
1449
- }, Vi = (e) => {
1450
- W.some((t) => t.id === e) && (yn === e && Ni(null), Ii(W.filter((t) => t.id !== e)));
1451
- }, Hi = (e, t, n) => {
1452
- let r = S(t.scale, e.price), i = Math.max(12, t.height * .07), a = Re(t.scale, r + (n ? -2 : 2) * i), o = Re(t.scale, r + (n ? 1 : -1) * i), s = Math.max(6, Math.round(F * .16 / N)), c = ir(Math.round(hr(e.time)) + s);
1568
+ }, Yi = (e) => {
1569
+ W.some((t) => t.id === e) && (Tn === e && Vi(null), Wi(W.filter((t) => t.id !== e)));
1570
+ }, Xi = (e, t, n) => {
1571
+ let r = w(t.scale, e.price), i = Math.max(12, t.height * .07), a = Be(t.scale, r + (n ? -2 : 2) * i), o = Be(t.scale, r + (n ? 1 : -1) * i), s = Math.max(6, Math.round(F * .16 / N)), c = ur(Math.round(xr(e.time)) + s);
1453
1572
  return [
1454
1573
  e,
1455
1574
  {
1456
1575
  time: c,
1457
- price: oi(a)
1576
+ price: fi(a)
1458
1577
  },
1459
1578
  {
1460
1579
  time: c,
1461
- price: oi(o)
1580
+ price: fi(o)
1462
1581
  }
1463
1582
  ];
1464
- }, Ui = () => {
1583
+ }, Zi = () => {
1465
1584
  if (!G) return;
1466
1585
  let e = G;
1467
- G = null, xn = 0, Ii([...W, e]), Ni(e.id), D.keepDrawingMode || Mi("cursor", !0), e.type === "text" && Qi(e.id, !0);
1468
- }, Wi = () => {
1586
+ G = null, Dn = 0, Wi([...W, e]), Vi(e.id), k.keepDrawingMode || Bi("cursor", !0), e.type === "text" && oa(e.id, !0);
1587
+ }, Qi = () => {
1469
1588
  if (!G) return;
1470
- if (xn--, xn <= 0) {
1471
- Ui();
1589
+ if (Dn--, Dn <= 0) {
1590
+ Zi();
1472
1591
  return;
1473
1592
  }
1474
1593
  let e = G.points[G.points.length - 1];
@@ -1476,28 +1595,28 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1476
1595
  ...G,
1477
1596
  points: [...G.points, e]
1478
1597
  });
1479
- }, Gi = (e, t) => {
1480
- let n = ni(Sn);
1481
- !G || !n || xn <= 0 || (G = {
1598
+ }, $i = (e, t) => {
1599
+ let n = ci(On);
1600
+ !G || !n || Dn <= 0 || (G = {
1482
1601
  ...G,
1483
- points: [...G.points.slice(0, -1), ji(e, t, n)]
1602
+ points: [...G.points.slice(0, -1), zi(e, t, n)]
1484
1603
  });
1485
- }, Ki = (e, t) => {
1604
+ }, ea = (e, t) => {
1486
1605
  let n = L[0];
1487
1606
  if (!n || e > F) return null;
1488
- for (let e of D.priceLines ?? []) if (e.draggable && Math.abs(S(n.scale, ei(e)) - t) <= 5) return e;
1607
+ for (let e of k.priceLines ?? []) if (e.draggable && Math.abs(w(n.scale, oi(e)) - t) <= 5) return e;
1489
1608
  return null;
1490
- }, qi = (e, t) => {
1609
+ }, ta = (e, t) => {
1491
1610
  if (e > F) return null;
1492
- let n = Er(t), r = ri(n);
1611
+ let n = Mr(t), r = li(n);
1493
1612
  if (!n || !r) return null;
1494
1613
  for (let i = W.length - 1; i >= 0; i--) {
1495
1614
  let a = W[i];
1496
- if (!a || (a.pane ?? C) !== n.id) continue;
1497
- let o = v(a, r, {
1615
+ if (!a || (a.pane ?? T) !== n.id) continue;
1616
+ let o = y(a, r, {
1498
1617
  x: e,
1499
1618
  y: t
1500
- }, 6, wn.get(a.id));
1619
+ }, 6, An.get(a.id));
1501
1620
  if (o) return {
1502
1621
  drawing: a,
1503
1622
  hit: o,
@@ -1505,81 +1624,81 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1505
1624
  };
1506
1625
  }
1507
1626
  return null;
1508
- }, Ji = (e, t) => An.findIndex((n) => e >= n.x && e <= n.x + n.w && t >= n.y && t <= n.y + n.h), Yi = (e) => {
1627
+ }, na = (e, t) => In.findIndex((n) => e >= n.x && e <= n.x + n.w && t >= n.y && t <= n.y + n.h), ra = (e) => {
1509
1628
  for (let t = 1; t < L.length; t++) if (Math.abs(L[t].top - e) <= 4) return t;
1510
1629
  return -1;
1511
- }, Xi = () => {
1512
- A.style.height = "auto", A.style.height = `${Math.max(28, A.scrollHeight + 2)}px`;
1513
- }, Zi = () => {
1514
- if (!Tn) return;
1515
- let e = Tn.id, t = W.find((t) => t.id === e), n = t ? ni(t.pane) : null, r = t?.points[0];
1630
+ }, ia = () => {
1631
+ j.style.height = "auto", j.style.height = `${Math.max(28, j.scrollHeight + 2)}px`;
1632
+ }, aa = () => {
1633
+ if (!jn) return;
1634
+ let e = jn.id, t = W.find((t) => t.id === e), n = t ? ci(t.pane) : null, r = t?.points[0];
1516
1635
  if (!t || !n || !r) return;
1517
- let i = Q(hr(r.time)), a = S(n.scale, r.price);
1518
- A.style.left = `${w(i, 2, Math.max(2, F - 160))}px`, A.style.top = `${w(a, 2, Math.max(2, I - 40))}px`;
1636
+ let i = cr(xr(r.time)), a = w(n.scale, r.price);
1637
+ j.style.left = `${E(i, 2, Math.max(2, F - 160))}px`, j.style.top = `${E(a, 2, Math.max(2, I - 40))}px`;
1519
1638
  };
1520
- function Qi(e, t) {
1639
+ function oa(e, t) {
1521
1640
  let n = W.find((t) => t.id === e);
1522
- n && !n.locked && (Tn = {
1641
+ n && !n.locked && (jn = {
1523
1642
  id: e,
1524
1643
  created: t
1525
- }, A.value = t ? "" : n.text ?? "", A.placeholder = Wn().text, A.setAttribute("aria-label", Wn().editText), A.style.display = "block", Zi(), Xi(), A.focus(), A.select(), $());
1644
+ }, j.value = t ? "" : n.text ?? "", j.placeholder = Xn().text, j.setAttribute("aria-label", Xn().editText), j.style.display = "block", aa(), ia(), j.focus(), j.select(), $());
1526
1645
  }
1527
- function $i(e) {
1528
- if (!Tn) return;
1529
- let { id: t, created: n } = Tn;
1530
- Tn = null, A.style.display = "none";
1531
- let r = A.value.replace(/\s+$/, ""), i = W.find((e) => e.id === t);
1646
+ function sa(e) {
1647
+ if (!jn) return;
1648
+ let { id: t, created: n } = jn;
1649
+ jn = null, j.style.display = "none";
1650
+ let r = j.value.replace(/\s+$/, ""), i = W.find((e) => e.id === t);
1532
1651
  if (i && n && (!e || !r)) {
1533
- let e = hn.pop();
1534
- Li(e ?? W.filter((e) => e.id !== t));
1652
+ let e = xn.pop();
1653
+ Gi(e ?? W.filter((e) => e.id !== t));
1535
1654
  } else if (i && e && r !== (i.text ?? "")) {
1536
1655
  if (n) {
1537
1656
  let e = W.map((e) => e.id === t ? {
1538
1657
  ...e,
1539
1658
  text: r
1540
1659
  } : e);
1541
- mn = e, W = e, pn = e, q("drawingsChange", e);
1542
- } else Bi(t, { text: r });
1660
+ bn = e, W = e, yn = e, q("drawingsChange", e);
1661
+ } else Ji(t, { text: r });
1543
1662
  }
1544
- (E.activeElement === A || E.activeElement === E.body) && O.focus(), $();
1663
+ (O.activeElement === j || O.activeElement === O.body) && A.focus(), $();
1545
1664
  }
1546
- A.addEventListener("keydown", (e) => {
1547
- e.stopPropagation(), e.key === "Enter" && !e.shiftKey ? (e.preventDefault(), $i(!0)) : e.key === "Escape" && (e.preventDefault(), $i(!1));
1548
- }), A.addEventListener("input", Xi), A.addEventListener("blur", () => $i(!0)), A.addEventListener("pointerdown", (e) => e.stopPropagation()), A.addEventListener("dblclick", (e) => e.stopPropagation());
1549
- let ea = (e, t = "", n = 1.5) => `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="${n}" stroke-linecap="round" stroke-linejoin="round"${t ? ` stroke-dasharray="${t}"` : ""} aria-hidden="true"><path d="${e}"/></svg>`, ta = (e, t, n, r) => {
1550
- let i = E.createElement("button");
1665
+ j.addEventListener("keydown", (e) => {
1666
+ e.stopPropagation(), e.key === "Enter" && !e.shiftKey ? (e.preventDefault(), sa(!0)) : e.key === "Escape" && (e.preventDefault(), sa(!1));
1667
+ }), j.addEventListener("input", ia), j.addEventListener("blur", () => sa(!0)), j.addEventListener("pointerdown", (e) => e.stopPropagation()), j.addEventListener("dblclick", (e) => e.stopPropagation());
1668
+ let ca = (e, t = "", n = 1.5) => `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="${n}" stroke-linecap="round" stroke-linejoin="round"${t ? ` stroke-dasharray="${t}"` : ""} aria-hidden="true"><path d="${e}"/></svg>`, la = (e, t, n, r) => {
1669
+ let i = O.createElement("button");
1551
1670
  return i.type = "button", i.setAttribute("aria-label", e), i.title = e, r !== void 0 && i.setAttribute("aria-pressed", String(r)), i.innerHTML = t, i.addEventListener("click", (e) => {
1552
1671
  e.stopPropagation(), n();
1553
1672
  }), i;
1554
- }, na = () => {
1555
- let e = E.createElement("span");
1673
+ }, ua = () => {
1674
+ let e = O.createElement("span");
1556
1675
  return e.className = "sep", e;
1557
- }, ra = (e) => {
1558
- k.textContent = "";
1559
- let t = Wn();
1560
- k.setAttribute("aria-label", t.lineStyle);
1676
+ }, da = (e) => {
1677
+ Nt.textContent = "";
1678
+ let t = Xn();
1679
+ Nt.setAttribute("aria-label", t.lineStyle);
1561
1680
  let n = e.id, r = [];
1562
1681
  if (!e.locked) {
1563
- let i = X(e.color ?? dt), a = ta(t.color, `<span style="display:block;width:14px;height:14px;border-radius:50%;background:${i};box-shadow:inset 0 0 0 1px rgba(127,127,127,.35)"></span>`, () => {
1564
- Dn = !Dn, En = "", ia();
1682
+ let i = X(e.color ?? pt), a = la(t.color, `<span style="display:block;width:14px;height:14px;border-radius:50%;background:${i};box-shadow:inset 0 0 0 1px rgba(127,127,127,.35)"></span>`, () => {
1683
+ Nn = !Nn, Mn = "", fa();
1565
1684
  });
1566
- a.setAttribute("aria-expanded", String(Dn)), r.push(a);
1685
+ a.setAttribute("aria-expanded", String(Nn)), r.push(a);
1567
1686
  let o = e.lineWidth ?? 1.5, s = [
1568
1687
  1,
1569
1688
  2,
1570
1689
  3,
1571
1690
  4
1572
1691
  ];
1573
- r.push(ta(`${t.lineWidth}: ${o}px`, `${ea("M2 8h12", "", Math.min(4, o))}<span style="font-size:11px;margin-left:3px">${o}</span>`, () => Bi(n, { lineWidth: s.find((e) => e > o) ?? s[0] })));
1692
+ r.push(la(`${t.lineWidth}: ${o}px`, `${ca("M2 8h12", "", Math.min(4, o))}<span style="font-size:11px;margin-left:3px">${o}</span>`, () => Ji(n, { lineWidth: s.find((e) => e > o) ?? s[0] })));
1574
1693
  let c = e.lineStyle ?? "solid";
1575
- r.push(ta(t.lineStyle, ea("M2 8h12", c === "dashed" ? "3.5 2.5" : c === "dotted" ? "0.1 3" : "", c === "dotted" ? 2.2 : 1.6), () => Bi(n, { lineStyle: mt[(mt.indexOf(c) + 1) % mt.length] }))), y(e.type) && r.push(ta(t.fill, "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"9\" rx=\"1.5\" fill=\"currentColor\" fill-opacity=\".3\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg>", () => Bi(n, { fill: e.fill === !1 }), e.fill !== !1)), e.type === "text" && r.push(ta(t.editText, ea("M3 13h3l7-7-3-3-7 7zM9 4l3 3"), () => Qi(n, !1))), r.push(na());
1694
+ r.push(la(t.lineStyle, ca("M2 8h12", c === "dashed" ? "3.5 2.5" : c === "dotted" ? "0.1 3" : "", c === "dotted" ? 2.2 : 1.6), () => Ji(n, { lineStyle: gt[(gt.indexOf(c) + 1) % gt.length] }))), b(e.type) && r.push(la(t.fill, "<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"9\" rx=\"1.5\" fill=\"currentColor\" fill-opacity=\".3\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg>", () => Ji(n, { fill: e.fill === !1 }), e.fill !== !1)), e.type === "text" && r.push(la(t.editText, ca("M3 13h3l7-7-3-3-7 7zM9 4l3 3"), () => oa(n, !1))), r.push(ua());
1576
1695
  }
1577
- if (r.push(ta(t.lock, e.locked ? ea("M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 4 0v2") : ea("M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 3.8-.9"), () => Bi(n, { locked: !e.locked }), !!e.locked)), !e.locked) {
1578
- let e = ta(t.remove, ea("M3 4.5h10M6.5 4.5V3h3v1.5M4.5 4.5l.7 8.5h5.6l.7-8.5"), () => Vi(n));
1696
+ if (r.push(la(t.lock, e.locked ? ca("M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 4 0v2") : ca("M4.5 7.5h7v6h-7zM6 7.5V5.5a2 2 0 0 1 3.8-.9"), () => Ji(n, { locked: !e.locked }), !!e.locked)), !e.locked) {
1697
+ let e = la(t.remove, ca("M3 4.5h10M6.5 4.5V3h3v1.5M4.5 4.5l.7 8.5h5.6l.7-8.5"), () => Yi(n));
1579
1698
  e.style.color = "var(--danger-color, #f23645)", r.push(e);
1580
1699
  }
1581
- if (k.append(...r), Dn && !e.locked) {
1582
- let r = Ct("div", {
1700
+ if (Nt.append(...r), Nn && !e.locked) {
1701
+ let r = Et("div", {
1583
1702
  position: "absolute",
1584
1703
  left: "0",
1585
1704
  top: "calc(100% + 4px)",
@@ -1591,19 +1710,19 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1591
1710
  background: "var(--surface-elevated-color, var(--surface-color, #fff))",
1592
1711
  boxShadow: "0 8px 24px -8px rgba(15, 23, 42, 0.35)"
1593
1712
  });
1594
- for (let i of pt) {
1595
- let a = ta(`${t.color} ${i}`, `<span style="display:block;width:16px;height:16px;border-radius:50%;background:${i}"></span>`, () => {
1596
- Dn = !1, Bi(n, { color: i });
1713
+ for (let i of ht) {
1714
+ let a = la(`${t.color} ${i}`, `<span style="display:block;width:16px;height:16px;border-radius:50%;background:${i}"></span>`, () => {
1715
+ Nn = !1, Ji(n, { color: i });
1597
1716
  }, (e.color ?? "").toLowerCase() === i);
1598
1717
  r.appendChild(a);
1599
1718
  }
1600
- k.appendChild(r);
1719
+ Nt.appendChild(r);
1601
1720
  }
1602
1721
  };
1603
- function ia() {
1604
- let e = yn ? W.find((e) => e.id === yn) : void 0, t = e ? ni(e.pane) : null, n = ri(t), r = U?.kind === "drawing" && U.moved;
1605
- if (!e || !t || !n || D.drawingToolbar === !1 || Tn || r || G) {
1606
- k.style.display = "none", En = "", Dn = !1;
1722
+ function fa() {
1723
+ let e = Tn ? W.find((e) => e.id === Tn) : void 0, t = e ? ci(e.pane) : null, n = li(t), r = U?.kind === "drawing" && U.moved;
1724
+ if (!e || !t || !n || k.drawingToolbar === !1 || jn || r || G) {
1725
+ Nt.style.display = "none", Mn = "", Nn = !1;
1607
1726
  return;
1608
1727
  }
1609
1728
  let i = [
@@ -1613,126 +1732,126 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1613
1732
  e.lineStyle,
1614
1733
  e.fill,
1615
1734
  e.locked,
1616
- Dn,
1735
+ Nn,
1617
1736
  J,
1618
- Zt
1737
+ nn
1619
1738
  ].join("|");
1620
- i !== En && (En = i, ra(e)), k.style.display = "flex";
1621
- let a = _(e, n, wn.get(e.id)), o = wn.get(e.id);
1739
+ i !== Mn && (Mn = i, da(e)), Nt.style.display = "flex";
1740
+ let a = v(e, n, An.get(e.id)), o = An.get(e.id);
1622
1741
  e.type === "text" && o && a.push({
1623
1742
  x: o.x + o.w,
1624
1743
  y: o.y + o.h
1625
1744
  });
1626
1745
  let s = Infinity, c = -Infinity, l = Infinity, u = -Infinity;
1627
- for (let e of a) s = Math.min(s, w(e.x, 0, F)), c = Math.max(c, w(e.x, 0, F)), l = Math.min(l, w(e.y, t.top, t.top + t.height)), u = Math.max(u, w(e.y, t.top, t.top + t.height));
1746
+ for (let e of a) s = Math.min(s, E(e.x, 0, F)), c = Math.max(c, E(e.x, 0, F)), l = Math.min(l, E(e.y, t.top, t.top + t.height)), u = Math.max(u, E(e.y, t.top, t.top + t.height));
1628
1747
  e.type === "horizontalLine" && (s = F * .35, c = F * .65);
1629
- let d = k.offsetWidth || 200, f = k.offsetHeight || 34, p = w((s + c) / 2 - d / 2, 4, Math.max(4, F - d - 4)), m = l - f - 14;
1630
- m < 4 && (m = u + 32), k.style.left = `${Math.round(p)}px`, k.style.top = `${Math.round(w(m, 4, Math.max(4, I - f - 4)))}px`;
1748
+ let d = Nt.offsetWidth || 200, f = Nt.offsetHeight || 34, p = E((s + c) / 2 - d / 2, 4, Math.max(4, F - d - 4)), m = l - f - 14;
1749
+ m < 4 && (m = u + 32), Nt.style.left = `${Math.round(p)}px`, Nt.style.top = `${Math.round(E(m, 4, Math.max(4, I - f - 4)))}px`;
1631
1750
  }
1632
- k.addEventListener("pointerdown", (e) => e.stopPropagation()), k.addEventListener("dblclick", (e) => e.stopPropagation()), k.addEventListener("pointermove", (e) => e.stopPropagation()), k.addEventListener("pointerenter", () => {
1633
- B = null, bn = null, O.style.cursor = "default", $();
1751
+ Nt.addEventListener("pointerdown", (e) => e.stopPropagation()), Nt.addEventListener("dblclick", (e) => e.stopPropagation()), Nt.addEventListener("pointermove", (e) => e.stopPropagation()), Nt.addEventListener("pointerenter", () => {
1752
+ B = null, En = null, A.style.cursor = "default", $();
1634
1753
  });
1635
- let aa = () => ({
1754
+ let pa = () => ({
1636
1755
  active: !!K,
1637
- picking: Rn,
1756
+ picking: Wn,
1638
1757
  playing: !!K?.playing,
1639
- speed: K?.speed ?? zn,
1758
+ speed: K?.speed ?? Gn,
1640
1759
  index: Y(),
1641
1760
  total: K ? K.source.length : Y(),
1642
- time: Y() ? j.time[Y() - 1] : NaN
1643
- }), oa = () => q("replayChange", aa()), sa = (e, t) => ({
1761
+ time: Y() ? M.time[Y() - 1] : NaN
1762
+ }), ma = () => q("replayChange", pa()), ha = (e, t) => ({
1644
1763
  time: e.time.subarray(0, t),
1645
1764
  open: e.open.subarray(0, t),
1646
1765
  high: e.high.subarray(0, t),
1647
1766
  low: e.low.subarray(0, t),
1648
1767
  close: e.close.subarray(0, t),
1649
1768
  volume: e.volume.subarray(0, t)
1650
- }), ca = (e, t) => {
1769
+ }), ga = (e, t) => {
1651
1770
  let n = e.hasVolume;
1652
- et(j, sa(e, t)), j.hasVolume = n, jt = Ue(), Pt = Ue(), Nt = 0, In = NaN, yr(0);
1653
- }, la = () => {
1771
+ nt(M, ha(e, t)), M.hasVolume = n, Ft = Ge(), Rt = Ge(), Lt = 0, Hn = NaN, Tr(0);
1772
+ }, _a = () => {
1654
1773
  K?.timer && clearInterval(K.timer), K && (K.timer = null, K.playing = !1);
1655
- }, ua = (e) => {
1656
- if (Rn = !1, !K) {
1774
+ }, va = (e) => {
1775
+ if (Wn = !1, !K) {
1657
1776
  if (!Y()) return;
1658
- let e = Ge();
1659
- et(e, sa(j, Y())), e.hasVolume = j.hasVolume, K = {
1777
+ let e = qe();
1778
+ nt(e, ha(M, Y())), e.hasVolume = M.hasVolume, K = {
1660
1779
  source: e,
1661
1780
  playing: !1,
1662
- speed: zn,
1781
+ speed: Gn,
1663
1782
  timer: null
1664
1783
  };
1665
1784
  }
1666
- la();
1667
- let t = w(Math.round(e) + 1, 1, K.source.length);
1668
- ca(K.source, t), P = t - 1 + (D.rightOffset ?? 8);
1669
- for (let e of qt.values()) e.auto = !0;
1670
- oa();
1671
- }, da = (e) => {
1785
+ _a();
1786
+ let t = E(Math.round(e) + 1, 1, K.source.length);
1787
+ ga(K.source, t), P = t - 1 + (k.rightOffset ?? 8);
1788
+ for (let e of Qt.values()) e.auto = !0;
1789
+ ma();
1790
+ }, ya = (e) => {
1672
1791
  if (!K) return;
1673
- let t = K.source, n = Y(), r = Sr(), i = -1;
1792
+ let t = K.source, n = Y(), r = Or(), i = -1;
1674
1793
  for (let n = 0; n < e && Y() < t.length; n++) {
1675
- let e = tt(j, $e(t, Y()));
1794
+ let e = rt(M, tt(t, Y()));
1676
1795
  i < 0 && (i = e);
1677
1796
  }
1678
- j.hasVolume = t.hasVolume, i >= 0 && (r && (P += Y() - n), yr(i)), Y() >= t.length && la(), oa();
1679
- }, fa = (e) => {
1797
+ M.hasVolume = t.hasVolume, i >= 0 && (r && (P += Y() - n), Tr(i)), Y() >= t.length && _a(), ma();
1798
+ }, ba = (e) => {
1680
1799
  if (!K) return;
1681
- if (e !== void 0 && e > 0 && (K.speed = zn = e), la(), Y() >= K.source.length) {
1682
- oa();
1800
+ if (e !== void 0 && e > 0 && (K.speed = Gn = e), _a(), Y() >= K.source.length) {
1801
+ ma();
1683
1802
  return;
1684
1803
  }
1685
1804
  let t = Math.max(16, 1e3 / K.speed), n = Math.max(1, Math.round(K.speed * t / 1e3));
1686
- K.playing = !0, K.timer = setInterval(() => da(n), t), oa();
1687
- }, pa = (e) => {
1688
- let t = Rn;
1689
- if (Rn = !1, !K) {
1690
- t && (oa(), $());
1805
+ K.playing = !0, K.timer = setInterval(() => ya(n), t), ma();
1806
+ }, xa = (e) => {
1807
+ let t = Wn;
1808
+ if (Wn = !1, !K) {
1809
+ t && (ma(), $());
1691
1810
  return;
1692
1811
  }
1693
- la();
1812
+ _a();
1694
1813
  let n = K.source;
1695
- K = null, e && ca(n, n.length), oa();
1696
- }, ma = (e, t) => {
1814
+ K = null, e && ga(n, n.length), ma();
1815
+ }, Sa = (e, t) => {
1697
1816
  let n = "crosshair";
1698
- kn = null;
1699
- let r = null, i = U ? -1 : Ji(e, t);
1700
- if (i !== jn && (jn = i), U?.kind === "pan" && U.moved) n = "grabbing";
1817
+ Fn = null;
1818
+ let r = null, i = U ? -1 : na(e, t);
1819
+ if (i !== Ln && (Ln = i), U?.kind === "pan" && U.moved) n = "grabbing";
1701
1820
  else if (i >= 0) n = "pointer";
1702
- else if (Rn && e <= F && t <= I) n = "pointer";
1703
- else if (Yi(t) > 0) n = "row-resize";
1821
+ else if (Wn && e <= F && t <= I) n = "pointer";
1822
+ else if (ra(t) > 0) n = "row-resize";
1704
1823
  else if (e > F && t < I) n = "ns-resize";
1705
1824
  else if (t > I) n = "ew-resize";
1706
- else if (vn === "cursor") {
1707
- let i = Ki(e, t);
1708
- if (i) n = "ns-resize", kn = i.id;
1825
+ else if (wn === "cursor") {
1826
+ let i = ea(e, t);
1827
+ if (i) n = "ns-resize", Fn = i.id;
1709
1828
  else {
1710
- let i = qi(e, t);
1829
+ let i = ta(e, t);
1711
1830
  i && (r = i.drawing.id, n = i.drawing.locked ? "pointer" : i.hit.part === "handle" ? "move" : "pointer");
1712
1831
  }
1713
1832
  }
1714
- r !== bn && (bn = r), O.style.cursor !== n && (O.style.cursor = n);
1715
- }, ha = (e) => {
1833
+ r !== En && (En = r), A.style.cursor !== n && (A.style.cursor = n);
1834
+ }, Ca = (e) => {
1716
1835
  if (e.button !== 0 && e.pointerType === "mouse") return;
1717
- let { x: t, y: n } = Oi(e);
1836
+ let { x: t, y: n } = Ii(e);
1718
1837
  if (B = {
1719
1838
  x: t,
1720
1839
  y: n
1721
- }, V = null, H && Ta(!0), un = null, dn = null, Tn && $i(!0), Dn && (Dn = !1, $()), e.pointerType === "touch" && (cn.set(e.pointerId, {
1840
+ }, V = null, H && Na(!0), gn = null, _n = null, jn && sa(!0), Nn && (Nn = !1, $()), e.pointerType === "touch" && (mn.set(e.pointerId, {
1722
1841
  x: t,
1723
1842
  y: n
1724
- }), cn.size === 2)) {
1725
- let [e, t] = [...cn.values()];
1726
- ln = {
1843
+ }), mn.size === 2)) {
1844
+ let [e, t] = [...mn.values()];
1845
+ hn = {
1727
1846
  distance: Math.hypot(e.x - t.x, e.y - t.y),
1728
1847
  spacing: N
1729
1848
  }, U = null;
1730
1849
  return;
1731
1850
  }
1732
1851
  try {
1733
- O.setPointerCapture(e.pointerId);
1852
+ A.setPointerCapture(e.pointerId);
1734
1853
  } catch {}
1735
- let r = Ji(t, n), i = An[r];
1854
+ let r = na(t, n), i = In[r];
1736
1855
  if (i) {
1737
1856
  U = {
1738
1857
  kind: "button",
@@ -1740,11 +1859,11 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1740
1859
  };
1741
1860
  return;
1742
1861
  }
1743
- if (Rn && t <= F && n <= I) {
1744
- ua(Math.min(Y() - 1, Math.round(rr(t))));
1862
+ if (Wn && t <= F && n <= I) {
1863
+ va(Math.min(Y() - 1, Math.round(lr(t))));
1745
1864
  return;
1746
1865
  }
1747
- let a = Yi(n);
1866
+ let a = ra(n);
1748
1867
  if (a > 0) {
1749
1868
  let e = L[a - 1], t = L[a];
1750
1869
  U = {
@@ -1757,7 +1876,7 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1757
1876
  return;
1758
1877
  }
1759
1878
  if (t > F && n < I) {
1760
- let e = Er(n);
1879
+ let e = Mr(n);
1761
1880
  e && (U = {
1762
1881
  kind: "axisY",
1763
1882
  pane: e,
@@ -1775,26 +1894,26 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1775
1894
  };
1776
1895
  return;
1777
1896
  }
1778
- let o = Er(n);
1779
- if (vn !== "cursor" && o && Y()) {
1897
+ let o = Mr(n);
1898
+ if (wn !== "cursor" && o && Y()) {
1780
1899
  if (G) {
1781
- Gi(t, n), Wi(), U = null, $();
1900
+ $i(t, n), Qi(), U = null, $();
1782
1901
  return;
1783
1902
  }
1784
- let e = vn, r = b(e), i = r ? L[0] : o, a = ji(t, w(n, i.top, i.top + i.height), i), s = h(e);
1785
- if (Sn = i.id, G = {
1786
- id: `drawing-${Date.now().toString(36)}-${++Cn}`,
1903
+ let e = wn, r = x(e), i = r ? L[0] : o, a = zi(t, E(n, i.top, i.top + i.height), i), s = g(e);
1904
+ if (On = i.id, G = {
1905
+ id: `drawing-${Date.now().toString(36)}-${++kn}`,
1787
1906
  type: e,
1788
- points: r ? Hi({
1907
+ points: r ? Xi({
1789
1908
  ...a,
1790
- price: oi(a.price)
1909
+ price: fi(a.price)
1791
1910
  }, i, e === "longPosition") : s === 1 ? [a] : [a, a],
1792
- ...i.id === C ? {} : { pane: i.id }
1911
+ ...i.id === T ? {} : { pane: i.id }
1793
1912
  }, s === 1) {
1794
- Ui();
1913
+ Zi();
1795
1914
  return;
1796
1915
  }
1797
- xn = s - 1, U = {
1916
+ Dn = s - 1, U = {
1798
1917
  kind: "create",
1799
1918
  pane: i,
1800
1919
  x: t,
@@ -1803,8 +1922,8 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1803
1922
  }, $();
1804
1923
  return;
1805
1924
  }
1806
- if (vn === "cursor") {
1807
- let e = Ki(t, n);
1925
+ if (wn === "cursor") {
1926
+ let e = ea(t, n);
1808
1927
  if (e) {
1809
1928
  U = {
1810
1929
  kind: "order",
@@ -1813,9 +1932,9 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1813
1932
  };
1814
1933
  return;
1815
1934
  }
1816
- let r = qi(t, n);
1935
+ let r = ta(t, n);
1817
1936
  if (r) {
1818
- Ni(r.drawing.id), r.drawing.locked || (U = {
1937
+ Vi(r.drawing.id), r.drawing.locked || (U = {
1819
1938
  kind: "drawing",
1820
1939
  id: r.drawing.id,
1821
1940
  pane: r.pane,
@@ -1840,63 +1959,63 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1840
1959
  lastT: e.timeStamp,
1841
1960
  velocity: 0
1842
1961
  };
1843
- }, ga = (e) => {
1844
- let { x: t, y: n } = Oi(e);
1962
+ }, wa = (e) => {
1963
+ let { x: t, y: n } = Ii(e);
1845
1964
  if (B = {
1846
1965
  x: t,
1847
1966
  y: n
1848
- }, e.pointerType === "touch" && cn.has(e.pointerId) && (cn.set(e.pointerId, {
1967
+ }, pn = e.altKey, e.pointerType === "touch" && mn.has(e.pointerId) && (mn.set(e.pointerId, {
1849
1968
  x: t,
1850
1969
  y: n
1851
- }), ln && cn.size === 2)) {
1852
- let [e, t] = [...cn.values()], n = Math.hypot(e.x - t.x, e.y - t.y), r = Y(), i = r && Sr() ? Math.min(F, Q(r - 1)) : (e.x + t.x) / 2, a = rr(i);
1853
- N = ln.spacing * n / Math.max(1, ln.distance), Dr(), P = a + (F - i) / N, Dr(), $();
1970
+ }), hn && mn.size === 2)) {
1971
+ let [e, t] = [...mn.values()], n = Math.hypot(e.x - t.x, e.y - t.y), r = Y(), i = r && Or() ? Math.min(F, cr(r - 1)) : (e.x + t.x) / 2, a = lr(i);
1972
+ N = hn.spacing * n / Math.max(1, hn.distance), Nr(), P = a + (F - i) / N, Nr(), $();
1854
1973
  return;
1855
1974
  }
1856
1975
  let r = U;
1857
1976
  if (!r) {
1858
- G && Gi(t, n), ma(t, n), $();
1977
+ G && $i(t, n), Sa(t, n), $();
1859
1978
  return;
1860
1979
  }
1861
1980
  switch (r.kind) {
1862
1981
  case "pan": {
1863
1982
  let i = t - r.x;
1864
1983
  if (!r.moved && Math.hypot(i, n - r.y) < 3) break;
1865
- r.moved = !0, P = r.right - i / N, r.pane && !r.pane.scale.auto && Pe(r.pane.scale, n - r.lastY), r.lastY = n;
1984
+ r.moved = !0, P = r.right - i / N, r.pane && !r.pane.scale.auto && Ie(r.pane.scale, n - r.lastY), r.lastY = n;
1866
1985
  let a = Math.max(1, e.timeStamp - r.lastT);
1867
- r.velocity = .6 * ((t - r.lastX) / a) + .4 * r.velocity, r.lastX = t, r.lastT = e.timeStamp, Dr(), O.style.cursor = "grabbing";
1986
+ r.velocity = .6 * ((t - r.lastX) / a) + .4 * r.velocity, r.lastX = t, r.lastT = e.timeStamp, Nr(), A.style.cursor = "grabbing";
1868
1987
  break;
1869
1988
  }
1870
1989
  case "axisY": {
1871
1990
  let e = r.pane.scale;
1872
- e.min = r.min, e.max = r.max, Be(e, Math.exp((n - r.y) * .006));
1991
+ e.min = r.min, e.max = r.max, He(e, Math.exp((n - r.y) * .006));
1873
1992
  break;
1874
1993
  }
1875
1994
  case "axisX": {
1876
1995
  let e = P;
1877
- N = r.spacing * Math.exp((t - r.x) * .006), Dr(), P = e, Dr();
1996
+ N = r.spacing * Math.exp((t - r.x) * .006), Nr(), P = e, Nr();
1878
1997
  break;
1879
1998
  }
1880
1999
  case "separator": {
1881
2000
  let e = n - r.y, t = L[r.index - 1], i = L[r.index];
1882
2001
  if (!t || !i) break;
1883
- let a = r.above + r.below, o = w(r.below - e, st, a - st);
1884
- Jt.set(i.id, o), t.id !== C && Jt.set(t.id, a - o);
2002
+ let a = r.above + r.below, o = E(r.below - e, lt, a - lt);
2003
+ $t.set(i.id, o), t.id !== T && $t.set(t.id, a - o);
1885
2004
  break;
1886
2005
  }
1887
2006
  case "order":
1888
- On.set(r.line.id, oi(Re(L[0].scale, n)));
2007
+ Pn.set(r.line.id, fi(Be(L[0].scale, n)));
1889
2008
  break;
1890
2009
  case "drawing": {
1891
2010
  if (!r.moved && Math.hypot(t - r.x, n - r.y) < 3) break;
1892
2011
  r.moved = !0;
1893
2012
  let e = r.pane.scale, i;
1894
- if (r.handle >= 0) i = ee(r.original, r.handle, ji(t, n, r.pane));
2013
+ if (r.handle >= 0) i = S(r.original, r.handle, zi(t, n, r.pane));
1895
2014
  else {
1896
- let a = Math.round(rr(t) - rr(r.x)), o = Ie(e, n) - Ie(e, r.y);
2015
+ let a = Math.round(lr(t) - lr(r.x)), o = Re(e, n) - Re(e, r.y);
1897
2016
  i = r.original.points.map((t) => ({
1898
- time: ir(Math.round(hr(t.time)) + a),
1899
- price: Ne(e, Le(e, t.price) + o)
2017
+ time: ur(Math.round(xr(t.time)) + a),
2018
+ price: Fe(e, ze(e, t.price) + o)
1900
2019
  }));
1901
2020
  }
1902
2021
  W = W.map((e) => e.id === r.id ? {
@@ -1906,191 +2025,198 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
1906
2025
  break;
1907
2026
  }
1908
2027
  case "create":
1909
- Math.hypot(t - r.x, n - r.y) >= 4 && (r.moved = !0), Gi(t, n);
2028
+ Math.hypot(t - r.x, n - r.y) >= 4 && (r.moved = !0), $i(t, n);
1910
2029
  break;
1911
- default: ma(t, n);
2030
+ default: Sa(t, n);
1912
2031
  }
1913
2032
  $();
1914
- }, _a = (e) => {
1915
- cn.delete(e.pointerId), cn.size < 2 && (ln = null);
2033
+ }, Ta = (e) => {
2034
+ mn.delete(e.pointerId), mn.size < 2 && (hn = null);
1916
2035
  let t = U;
1917
2036
  U = null;
1918
- let { x: n, y: r } = Oi(e);
2037
+ let { x: n, y: r } = Ii(e);
1919
2038
  if (e.pointerType === "touch" && (B = null), !t) {
1920
2039
  $();
1921
2040
  return;
1922
2041
  }
1923
2042
  switch (t.kind) {
1924
2043
  case "pan":
1925
- if (t.moved) D.kineticScroll !== !1 && e.timeStamp - t.lastT < 60 && Math.abs(t.velocity) > .25 && (un = {
2044
+ if (t.moved) k.kineticScroll !== !1 && e.timeStamp - t.lastT < 60 && Math.abs(t.velocity) > .25 && (gn = {
1926
2045
  v: t.velocity,
1927
2046
  t: typeof performance < "u" ? performance.now() : Date.now()
1928
2047
  });
1929
2048
  else {
1930
- yn && Ni(null);
1931
- let e = Er(r);
2049
+ Tn && Vi(null);
2050
+ let e = Mr(r);
1932
2051
  e && n <= F && q("click", {
1933
- index: Math.round(rr(n)),
1934
- time: ir(Math.round(rr(n))),
1935
- price: Re(e.scale, r),
2052
+ index: Math.round(lr(n)),
2053
+ time: ur(Math.round(lr(n))),
2054
+ price: Be(e.scale, r),
1936
2055
  pane: e.id
1937
2056
  });
1938
2057
  }
1939
2058
  break;
1940
2059
  case "order": {
1941
- let e = On.get(t.line.id);
2060
+ let e = Pn.get(t.line.id);
1942
2061
  e !== void 0 && e !== t.startPrice ? q("orderMove", {
1943
2062
  id: t.line.id,
1944
2063
  price: e,
1945
2064
  previousPrice: t.startPrice,
1946
2065
  line: t.line
1947
- }) : On.delete(t.line.id);
2066
+ }) : Pn.delete(t.line.id);
1948
2067
  break;
1949
2068
  }
1950
2069
  case "drawing":
1951
- t.moved && Ii(W);
2070
+ t.moved && Wi(W);
1952
2071
  break;
1953
2072
  case "create":
1954
- t.moved && Wi();
2073
+ t.moved && Qi();
1955
2074
  break;
1956
- case "button": Ji(n, r) >= 0 && t.action();
2075
+ case "button": na(n, r) >= 0 && t.action();
1957
2076
  }
1958
- ma(n, r), $();
1959
- }, va = (e) => {
1960
- U || e.pointerType === "touch" || (B = null, bn = null, kn = null, $());
1961
- }, ya = (e) => {
1962
- let t = D.wheel ?? "zoom";
2077
+ Sa(n, r), $();
2078
+ }, Ea = (e) => {
2079
+ U || e.pointerType === "touch" || (B = null, En = null, Fn = null, $());
2080
+ }, Da = (e) => {
2081
+ let t = k.wheel ?? "zoom";
1963
2082
  if (t === "none") return;
1964
- let { x: n } = Oi(e), r = e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? F : 1, i = e.deltaX * r, a = e.deltaY * r, o = e.ctrlKey || e.metaKey;
2083
+ let { x: n } = Ii(e), r = e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? F : 1, i = e.deltaX * r, a = e.deltaY * r, o = e.ctrlKey || e.metaKey;
1965
2084
  if (t === "modifier" && !o && Math.abs(i) <= Math.abs(a)) return;
1966
2085
  if (e.preventDefault(), V = null, Math.abs(i) > Math.abs(a) || e.shiftKey) {
1967
- P += (Math.abs(i) > Math.abs(a) ? i : a) / N, Dr(), un = null, $();
2086
+ P += (Math.abs(i) > Math.abs(a) ? i : a) / N, Nr(), gn = null, $();
1968
2087
  return;
1969
2088
  }
1970
2089
  let s = Math.exp(-a * (e.ctrlKey ? .01 : .0015));
1971
- Ai(Math.min(n, F), s);
1972
- }, ba = (e) => {
1973
- let { x: t, y: n } = Oi(e), r = vn === "cursor" ? qi(t, n) : null;
2090
+ Ri(Math.min(n, F), s);
2091
+ }, Oa = (e) => {
2092
+ let { x: t, y: n } = Ii(e), r = wn === "cursor" ? ta(t, n) : null;
1974
2093
  if (r?.drawing.type === "text") {
1975
- Qi(r.drawing.id, !1);
2094
+ oa(r.drawing.id, !1);
1976
2095
  return;
1977
2096
  }
1978
2097
  if (t > F && n < I) {
1979
- let e = Er(n);
2098
+ let e = Mr(n);
1980
2099
  e && (e.scale.auto = !0);
1981
- } else if (n > I) N = D.barSpacing ?? 8, Ra.scrollToRealtime(!0);
1982
- else for (let e of qt.values()) e.auto = !0;
2100
+ } else if (n > I) N = k.barSpacing ?? 8, Ja.scrollToRealtime(!0);
2101
+ else for (let e of Qt.values()) e.auto = !0;
1983
2102
  $();
1984
- }, xa = (e) => {
2103
+ }, ka = (e) => {
1985
2104
  if (e < 0 || e >= Y()) return;
1986
- let t = gr(), n = Wn();
1987
- kt.textContent = x(n.announcement, {
1988
- time: le(ur(j.time[e]), er(), J),
2105
+ let t = Sr(), n = Xn();
2106
+ Mt.textContent = ke(n.announcement, {
2107
+ time: se(gr(M.time[e]), or(), J),
1989
2108
  open: Z(t.open[e]),
1990
2109
  high: Z(t.high[e]),
1991
2110
  low: Z(t.low[e]),
1992
2111
  close: Z(t.close[e])
1993
2112
  });
1994
- }, Sa = (e) => {
1995
- kt.textContent = e;
1996
- }, Ca = () => (D.priceLines ?? []).filter((e) => e.draggable || e.cancellable), wa = (e) => {
1997
- let t = gt[e.kind ?? "line"];
1998
- return e.title ?? (t ? Wn()[t] : "");
1999
- }, Ta = (e) => {
2000
- H?.kind === "move" && e && (H.override === void 0 ? On.delete(H.id) : On.set(H.id, H.override)), H = null;
2001
- }, Ea = (e) => {
2113
+ }, Aa = (...e) => {
2114
+ let t = ["zh", "ja"].includes(s(J));
2115
+ Mt.textContent = e.filter(Boolean).map((e) => e.replace(/[.。]$/, "")).join(t ? "。" : ". ");
2116
+ }, ja = () => (k.priceLines ?? []).filter((e) => e.draggable || e.cancellable), Ma = (e) => {
2117
+ let t = vt[e.kind ?? "line"];
2118
+ return e.title ?? (t ? Xn()[t] : "");
2119
+ }, Na = (e) => {
2120
+ H?.kind === "move" && e && (H.override === void 0 ? Pn.delete(H.id) : Pn.set(H.id, H.override)), H = null;
2121
+ }, Pa = (e) => e.pinned ?? xt(e.side, e.price, fi(pi())), Fa = (e) => {
2002
2122
  let t = Y();
2003
- if (!D.orderEntry || !t || e.altKey || e.ctrlKey || e.metaKey) return !1;
2004
- let n = Wn(), r = e.key.length === 1 ? e.key.toLowerCase() : e.key, i = (e, t) => x(e === "buy" ? n.buyLimit : n.sellLimit, { price: Z(t) });
2005
- if (r === "b" || r === "s") {
2006
- Ta(!0);
2007
- let e = ti(), a = e && e.pane.id === C && T(e.price) ? e.price : j.close[t - 1], o = r === "b" ? "buy" : "sell";
2123
+ if (!k.orderEntry || !t || e.ctrlKey || e.metaKey) return !1;
2124
+ let n = Xn(), r = e.code === "KeyB" ? "b" : e.code === "KeyS" ? "s" : void 0, i = e.altKey ? r ? `alt+${r}` : "" : e.key.length === 1 ? e.key.toLowerCase() : e.key;
2125
+ if (i === "b" || i === "s" || i === "alt+b" || i === "alt+s") {
2126
+ let e = i.endsWith("b") ? "buy" : "sell", r, a;
2127
+ if (H?.kind === "create" && H.side === e) a = H.price, i.startsWith("alt") && (r = Pa(H) === "limit" ? "stop" : "limit");
2128
+ else {
2129
+ Na(!0);
2130
+ let n = si();
2131
+ a = fi(n && n.pane.id === T && D(n.price) ? n.price : M.close[t - 1]), i.startsWith("alt") && (r = xt(e, a, fi(M.close[t - 1])) === "limit" ? "stop" : "limit");
2132
+ }
2008
2133
  return H = {
2009
2134
  kind: "create",
2010
- side: o,
2011
- price: oi(a)
2012
- }, Sa(`${i(o, H.price)}. ${n.orderHint}`), !0;
2013
- }
2014
- if (r === "o") {
2015
- let t = Ca();
2135
+ side: e,
2136
+ price: a,
2137
+ pinned: r
2138
+ }, Aa(mi(e, Pa(H), a), n.orderHint, n.orderTypeHint), !0;
2139
+ }
2140
+ if (e.altKey) return !1;
2141
+ if (i === "o") {
2142
+ let t = ja();
2016
2143
  if (!t.length) return !1;
2017
2144
  let r = H?.kind === "move" ? H.id : null;
2018
- Ta(!0);
2145
+ Na(!0);
2019
2146
  let i = t.findIndex((e) => e.id === r), a = e.shiftKey ? -1 : 1, o = t[i < 0 ? a > 0 ? 0 : t.length - 1 : (i + a + t.length) % t.length];
2020
2147
  if (!o) return !1;
2021
2148
  H = {
2022
2149
  kind: "move",
2023
2150
  id: o.id,
2024
- start: ei(o),
2025
- override: On.get(o.id)
2151
+ start: oi(o),
2152
+ override: Pn.get(o.id)
2026
2153
  };
2027
- let s = x(n.orderLine, {
2028
- title: wa(o),
2029
- price: Z(ei(o))
2154
+ let s = ke(n.orderLine, {
2155
+ title: Ma(o),
2156
+ price: Z(oi(o))
2030
2157
  });
2031
- return Sa([
2032
- s,
2033
- o.draggable ? n.orderHint : "",
2034
- o.cancellable ? n.orderCancelHint : ""
2035
- ].filter(Boolean).join(". ")), !0;
2158
+ return Aa(s, o.draggable ? n.orderHint : "", o.cancellable ? n.orderCancelHint : ""), !0;
2036
2159
  }
2037
2160
  if (!H) return !1;
2038
- let a = H.kind === "move" ? H.id : null, o = (D.priceLines ?? []).find((e) => e.id === a);
2161
+ let a = H.kind === "move" ? H.id : null, o = (k.priceLines ?? []).find((e) => e.id === a);
2039
2162
  switch (e.key) {
2040
2163
  case "ArrowUp":
2041
2164
  case "ArrowDown": {
2042
- let t = 10 ** -Xn() * (e.shiftKey ? 10 : 1) * (e.key === "ArrowUp" ? 1 : -1);
2043
- if (H.kind === "create") H.price = oi(H.price + t), Sa(i(H.side, H.price));
2165
+ let t = 10 ** -nr() * (e.shiftKey ? 10 : 1) * (e.key === "ArrowUp" ? 1 : -1);
2166
+ if (H.kind === "create") H.price = fi(H.price + t), Aa(mi(H.side, Pa(H), H.price));
2044
2167
  else if (o?.draggable) {
2045
- let e = oi(ei(o) + t);
2046
- On.set(o.id, e), Sa(Z(e));
2168
+ let e = fi(oi(o) + t);
2169
+ Pn.set(o.id, e), Aa(Z(e));
2047
2170
  }
2048
2171
  return !0;
2049
2172
  }
2050
2173
  case "Enter": {
2051
2174
  if (H.kind === "create") {
2052
- let { price: e, side: t } = H;
2053
- return Ta(!1), q("orderCreate", {
2175
+ let { price: e, side: t } = H, r = Pa(H);
2176
+ return Na(!1), q("orderCreate", {
2054
2177
  price: e,
2055
- side: t
2056
- }), Sa(x(n.orderPlaced, { price: Z(e) })), !0;
2178
+ side: t,
2179
+ orderType: r
2180
+ }), Aa(mi(t, r, e), ke(n.orderPlaced, { price: Z(e) })), !0;
2057
2181
  }
2058
2182
  let e = H.start;
2059
- Ta(!1);
2060
- let t = o ? On.get(o.id) : void 0;
2183
+ Na(!1);
2184
+ let t = o ? Pn.get(o.id) : void 0;
2061
2185
  return o && t !== void 0 && t !== e && (q("orderMove", {
2062
2186
  id: o.id,
2063
2187
  price: t,
2064
2188
  previousPrice: e,
2065
2189
  line: o
2066
- }), Sa(x(n.orderPlaced, { price: Z(t) }))), !0;
2190
+ }), Aa(ke(n.orderPlaced, { price: Z(t) }))), !0;
2067
2191
  }
2068
- case "Escape": return H.kind === "create" ? Sa(n.orderCancelled) : o && Sa(x(n.orderLine, {
2069
- title: wa(o),
2192
+ case "Escape": return H.kind === "create" ? Aa(n.orderCancelled) : o && Aa(ke(n.orderLine, {
2193
+ title: Ma(o),
2070
2194
  price: Z(H.start)
2071
- })), Ta(!0), !0;
2195
+ })), Na(!0), !0;
2072
2196
  case "Delete":
2073
- case "Backspace": return o?.cancellable && (Ta(!0), q("orderCancel", {
2197
+ case "Backspace": return o?.cancellable && (Na(!0), q("orderCancel", {
2074
2198
  id: o.id,
2075
2199
  line: o
2076
- }), Sa(n.orderCancelled)), !0;
2200
+ }), Aa(n.orderCancelled)), !0;
2077
2201
  default: return !1;
2078
2202
  }
2203
+ }, Ia = (e) => {
2204
+ e.key === "Alt" && pn !== (e.type === "keydown") && (pn = e.type === "keydown", B && k.orderEntry && $());
2079
2205
  };
2080
- O.addEventListener("pointerdown", ha), O.addEventListener("pointermove", ga), O.addEventListener("pointerup", _a), O.addEventListener("pointercancel", _a), O.addEventListener("pointerleave", va), O.addEventListener("wheel", ya, { passive: !1 }), O.addEventListener("dblclick", ba), O.addEventListener("keydown", (e) => {
2081
- if (e.target === O && Ea(e)) {
2206
+ A.addEventListener("pointerdown", Ca), A.addEventListener("pointermove", wa), A.addEventListener("pointerup", Ta), A.addEventListener("pointercancel", Ta), A.addEventListener("pointerleave", Ea), A.addEventListener("wheel", Da, { passive: !1 }), A.addEventListener("dblclick", Oa), A.addEventListener("keydown", (e) => {
2207
+ if (Ia(e), e.target === A && Fa(e)) {
2082
2208
  e.preventDefault(), $();
2083
2209
  return;
2084
2210
  }
2085
2211
  if ((e.ctrlKey || e.metaKey) && !e.altKey) {
2086
2212
  let t = e.key.toLowerCase();
2087
- (t === "z" || t === "y") && (t === "y" || e.shiftKey ? zi() : Ri(), e.preventDefault());
2213
+ (t === "z" || t === "y") && (t === "y" || e.shiftKey ? qi() : Ki(), e.preventDefault());
2088
2214
  return;
2089
2215
  }
2090
2216
  let t = Y(), n = Math.max(1, Math.floor(F / N / 2)), r = (e) => {
2091
- V = w(e, 0, Math.max(0, t - 1));
2092
- let n = Q(V);
2093
- n < N && (P += (N - n) / N + 1), n > F - N && (P -= (n - F + N) / N - 1), Dr(), xa(V);
2217
+ V = E(e, 0, Math.max(0, t - 1));
2218
+ let n = cr(V);
2219
+ n < N && (P += (N - n) / N + 1), n > F - N && (P -= (n - F + N) / N - 1), Nr(), ka(V);
2094
2220
  }, i = V ?? Math.min(t - 1, Math.round(P));
2095
2221
  switch (e.key) {
2096
2222
  case "ArrowLeft":
@@ -2109,104 +2235,104 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
2109
2235
  r(0);
2110
2236
  break;
2111
2237
  case "End":
2112
- r(t - 1), Ra.scrollToRealtime(!0);
2238
+ r(t - 1), Ja.scrollToRealtime(!0);
2113
2239
  break;
2114
2240
  case "+":
2115
2241
  case "=":
2116
2242
  case "ArrowUp":
2117
- Ai(V === null ? F : Q(V), 1.2);
2243
+ Ri(V === null ? F : cr(V), 1.2);
2118
2244
  break;
2119
2245
  case "-":
2120
2246
  case "_":
2121
2247
  case "ArrowDown":
2122
- Ai(V === null ? F : Q(V), 1 / 1.2);
2248
+ Ri(V === null ? F : cr(V), 1 / 1.2);
2123
2249
  break;
2124
2250
  case "Escape":
2125
- Dn ? Dn = !1 : Rn ? pa(!1) : G ? (G = null, xn = 0) : vn === "cursor" ? yn ? Ni(null) : V = null : Mi("cursor", !0);
2251
+ Nn ? Nn = !1 : Wn ? xa(!1) : G ? (G = null, Dn = 0) : wn === "cursor" ? Tn ? Vi(null) : V = null : Bi("cursor", !0);
2126
2252
  break;
2127
2253
  case "Delete":
2128
2254
  case "Backspace": {
2129
- let e = W.find((e) => e.id === yn);
2255
+ let e = W.find((e) => e.id === Tn);
2130
2256
  if (!e || e.locked) return;
2131
- Vi(e.id);
2257
+ Yi(e.id);
2132
2258
  break;
2133
2259
  }
2134
2260
  default: return;
2135
2261
  }
2136
2262
  e.preventDefault(), $();
2137
- }), O.addEventListener("focus", () => {
2263
+ }), A.addEventListener("keyup", Ia), A.addEventListener("focus", () => {
2138
2264
  let e = !0;
2139
2265
  try {
2140
- e = O.matches(":focus-visible");
2266
+ e = A.matches(":focus-visible");
2141
2267
  } catch {}
2142
- e && (O.style.boxShadow = `inset 0 0 0 2px ${o(R.primary, .6)}`);
2143
- }), O.addEventListener("blur", () => {
2144
- O.style.boxShadow = "", H && (Ta(!0), $()), V !== null && (V = null, $());
2145
- }), Ot.addEventListener("pointerdown", (e) => e.stopPropagation()), Ot.addEventListener("click", () => Ra.scrollToRealtime(!0));
2146
- let Da = typeof ResizeObserver == "function" ? new ResizeObserver(() => $()) : null;
2147
- Da?.observe(O);
2148
- let Oa = () => {
2149
- if (St) return;
2150
- let e = f(O);
2151
- p(R, e) && Zt++, R = e, di = "", $();
2152
- }, ka = m(Oa), Aa = null;
2153
- typeof MutationObserver == "function" && O.ownerDocument && (Aa = new MutationObserver(() => {
2154
- if (D.locale) return;
2268
+ e && (A.style.boxShadow = `inset 0 0 0 2px ${o(R.primary, .6)}`);
2269
+ }), A.addEventListener("blur", () => {
2270
+ A.style.boxShadow = "", H && (Na(!0), $()), V !== null && (V = null, $());
2271
+ }), jt.addEventListener("pointerdown", (e) => e.stopPropagation()), jt.addEventListener("click", () => Ja.scrollToRealtime(!0));
2272
+ let La = typeof ResizeObserver == "function" ? new ResizeObserver(() => $()) : null;
2273
+ La?.observe(A);
2274
+ let Ra = () => {
2275
+ if (Tt) return;
2276
+ let e = p(A);
2277
+ m(R, e) && nn++, R = e, yi = "", $();
2278
+ }, za = h(Ra), Ba = null;
2279
+ typeof MutationObserver == "function" && A.ownerDocument && (Ba = new MutationObserver(() => {
2280
+ if (k.locale) return;
2155
2281
  let e = J;
2156
- Un(), J !== e && (di = "", Qt++, Fa(), $());
2157
- }), Aa.observe(O.ownerDocument.documentElement, {
2282
+ Yn(), J !== e && (yi = "", rn++, Ga(), $());
2283
+ }), Ba.observe(A.ownerDocument.documentElement, {
2158
2284
  attributes: !0,
2159
2285
  attributeFilter: ["lang"]
2160
2286
  }));
2161
- let ja = () => {
2162
- if (St) return null;
2163
- en && (xt?.cancelAnimationFrame ? xt.cancelAnimationFrame(en) : clearTimeout(en), en = 0), wi();
2164
- let e = xt?.devicePixelRatio || 1, t = E.createElement("canvas");
2165
- t.width = Math.max(1, Math.round(Gt * e)), t.height = Math.max(1, Math.round(Kt * e));
2287
+ let Va = () => {
2288
+ if (Tt) return null;
2289
+ on && (wt?.cancelAnimationFrame ? wt.cancelAnimationFrame(on) : clearTimeout(on), on = 0), Mi();
2290
+ let e = wt?.devicePixelRatio || 1, t = O.createElement("canvas");
2291
+ t.width = Math.max(1, Math.round(Xt * e)), t.height = Math.max(1, Math.round(Zt * e));
2166
2292
  let n = t.getContext("2d");
2167
2293
  if (!n) return null;
2168
2294
  n.fillStyle = o(R.background), n.fillRect(0, 0, t.width, t.height);
2169
2295
  try {
2170
- n.drawImage(Tt, 0, 0), z && n.drawImage(z.canvas, 0, 0, Math.round(F * e), Math.round(I * e)), n.drawImage(Et, 0, 0);
2296
+ n.drawImage(Ot, 0, 0), z && n.drawImage(z.canvas, 0, 0, Math.round(F * e), Math.round(I * e)), n.drawImage(kt, 0, 0);
2171
2297
  } catch {}
2172
2298
  n.setTransform(e, 0, 0, e, 0, 0);
2173
- let r = O.getBoundingClientRect(), i = xt ?? null;
2174
- return Dt.querySelectorAll("span, button").forEach((e) => {
2299
+ let r = A.getBoundingClientRect(), i = wt ?? null;
2300
+ return At.querySelectorAll("span, button").forEach((e) => {
2175
2301
  let t = e.textContent ?? "";
2176
2302
  if (e.children.length || !t.trim() || !i) return;
2177
2303
  let a = e.getBoundingClientRect(), s = i.getComputedStyle(e);
2178
2304
  n.font = `${s.fontWeight} ${s.fontSize} ${s.fontFamily}`, n.fillStyle = s.color || o(R.text), n.textAlign = "left", n.textBaseline = "middle", n.fillText(t, a.left - r.left, a.top - r.top + a.height / 2);
2179
2305
  }), t;
2180
- }, Ma = !1, Na = () => {
2181
- let e = E.fullscreenElement === O;
2182
- e !== Ma && (Ma = e, O.style.background = e ? o(R.background) : "", q("fullscreenChange", e), $());
2306
+ }, Ha = !1, Ua = () => {
2307
+ let e = O.fullscreenElement === A;
2308
+ e !== Ha && (Ha = e, A.style.background = e ? o(R.background) : "", q("fullscreenChange", e), $());
2183
2309
  };
2184
- E.addEventListener("fullscreenchange", Na);
2185
- let Pa = async (t = /* @__PURE__ */ new Set()) => {
2186
- let n = ++$t, r = await u(D.renderer ?? "auto", () => e(E), (e) => {
2187
- St || z?.kind !== e || (z.destroy(), z.canvas.remove(), z = null, Pa(/* @__PURE__ */ new Set([...t, e])));
2310
+ O.addEventListener("fullscreenchange", Ua);
2311
+ let Wa = async (t = /* @__PURE__ */ new Set()) => {
2312
+ let n = ++an, r = await d(k.renderer ?? "auto", () => e(O), (e) => {
2313
+ Tt || z?.kind !== e || (z.destroy(), z.canvas.remove(), z = null, Wa(/* @__PURE__ */ new Set([...t, e])));
2188
2314
  }, t);
2189
- if (St || n !== $t) {
2315
+ if (Tt || n !== an) {
2190
2316
  r?.destroy();
2191
2317
  return;
2192
2318
  }
2193
- z && (z.destroy(), z.canvas.remove()), z = r, nn = "", r && (O.dataset.renderer = r.kind, O.insertBefore(r.canvas, Et), q("renderer", r.kind)), on(r?.kind ?? null), $();
2194
- }, Fa = () => {
2195
- let e = D.symbol ?? "";
2196
- O.setAttribute("aria-label", D.ariaLabel ?? x(Wn().chart, { symbol: e }).trim());
2197
- let t = !!D.countdown && D.lastPriceLine !== !1;
2198
- t && !Ln && (Ln = setInterval($, 1e3)), !t && Ln && (clearInterval(Ln), Ln = null);
2199
- }, Ia = (e) => {
2200
- let t = D;
2201
- Un();
2202
- let n = t.timeZone && me(t.timeZone) ? t.timeZone : void 0, r = !!e && (t.utcOffset !== e.utcOffset || n !== sr);
2203
- if (sr = n, (!e || t.indicators !== e.indicators) && br(), r) for (let e of M) Ft.set(e, 0);
2204
- if ((!e || t.compare !== e.compare) && xr(), t.bars && (!e || t.bars !== e.bars) ? (K && pa(!1), e ? wr(t.bars) : Cr(t.bars)) : !t.bars && e?.bars && (K && pa(!1), Cr([])), e && t.barSpacing !== e.barSpacing && t.barSpacing && (N = t.barSpacing), e && t.scaleMode !== e.scaleMode) {
2205
- let e = qt.get(C);
2319
+ z && (z.destroy(), z.canvas.remove()), z = r, cn = "", r && (A.dataset.renderer = r.kind, A.insertBefore(r.canvas, kt), q("renderer", r.kind)), dn(r?.kind ?? null), $();
2320
+ }, Ga = () => {
2321
+ let e = k.symbol ?? "";
2322
+ A.setAttribute("aria-label", k.ariaLabel ?? ke(Xn().chart, { symbol: e }).trim());
2323
+ let t = !!k.countdown && k.lastPriceLine !== !1;
2324
+ t && !Un && (Un = setInterval($, 1e3)), !t && Un && (clearInterval(Un), Un = null);
2325
+ }, Ka = (e) => {
2326
+ let t = k;
2327
+ Yn();
2328
+ let n = t.timeZone && fe(t.timeZone) ? t.timeZone : void 0, r = !!e && (t.utcOffset !== e.utcOffset || n !== pr);
2329
+ if (pr = n, (!e || t.indicators !== e.indicators) && Er(), r) for (let e of zt) Bt.set(e, 0);
2330
+ if ((!e || t.compare !== e.compare) && Dr(), t.bars && (!e || t.bars !== e.bars) ? (K && xa(!1), e ? Ar(t.bars) : kr(t.bars)) : !t.bars && e?.bars && (K && xa(!1), kr([])), e && t.barSpacing !== e.barSpacing && t.barSpacing && (N = t.barSpacing), e && t.scaleMode !== e.scaleMode) {
2331
+ let e = Qt.get(T);
2206
2332
  e && (e.auto = !0);
2207
2333
  }
2208
- if (t.drawings && t.drawings !== pn && (!e || t.drawings !== e.drawings) && (e ? Ii(t.drawings, !1) : W = mn = t.drawings), e && (t.drawingMode ?? "cursor") !== (e.drawingMode ?? "cursor") && Mi(t.drawingMode ?? "cursor", !1), e && t.priceLines !== e.priceLines && (On.clear(), H?.kind === "move")) {
2209
- let e = H.id, t = Ca().find((t) => t.id === e);
2334
+ if (t.drawings && t.drawings !== yn && (!e || t.drawings !== e.drawings) && (e ? Wi(t.drawings, !1) : W = bn = t.drawings), e && (t.drawingMode ?? "cursor") !== (e.drawingMode ?? "cursor") && Bi(t.drawingMode ?? "cursor", !1), e && t.priceLines !== e.priceLines && (Pn.clear(), H?.kind === "move")) {
2335
+ let e = H.id, t = ja().find((t) => t.id === e);
2210
2336
  H = t ? {
2211
2337
  kind: "move",
2212
2338
  id: e,
@@ -2214,44 +2340,44 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
2214
2340
  override: void 0
2215
2341
  } : null;
2216
2342
  }
2217
- t.orderEntry ? O.setAttribute("aria-keyshortcuts", vt) : (O.removeAttribute("aria-keyshortcuts"), H && Ta(!0)), e && t.chartStyle !== e.chartStyle && (Nt = Math.min(Nt, 0)), Qt++, Fa(), $();
2343
+ t.orderEntry ? A.setAttribute("aria-keyshortcuts", bt) : (A.removeAttribute("aria-keyshortcuts"), H && Na(!0)), e && t.chartStyle !== e.chartStyle && (Lt = Math.min(Lt, 0)), rn++, Ga(), $();
2218
2344
  };
2219
- Ia(null), Pa();
2220
- let La = d(() => D.renderer, () => void Pa()), Ra = {
2345
+ Ka(null), Wa();
2346
+ let qa = f(() => k.renderer, () => void Wa()), Ja = {
2221
2347
  setOptions(e) {
2222
- if (St) return;
2223
- let t = D;
2224
- D = { ...e }, Ia(t), (e.renderer ?? "auto") !== (t.renderer ?? "auto") && Pa();
2348
+ if (Tt) return;
2349
+ let t = k;
2350
+ k = { ...e }, Ka(t), (e.renderer ?? "auto") !== (t.renderer ?? "auto") && Wa();
2225
2351
  },
2226
2352
  setBars(e) {
2227
- K && pa(!1), Cr(e);
2353
+ K && xa(!1), kr(e);
2228
2354
  },
2229
2355
  update(e) {
2230
2356
  if (K) {
2231
- tt(K.source, e);
2357
+ rt(K.source, e);
2232
2358
  return;
2233
2359
  }
2234
- let t = Y(), n = Sr(), r = tt(j, e);
2235
- r < 0 || (Y() > t && n && (P += Y() - t), yr(r));
2360
+ let t = Y(), n = Or(), r = rt(M, e);
2361
+ r < 0 || (Y() > t && n && (P += Y() - t), Tr(r));
2236
2362
  },
2237
2363
  appendBars(e) {
2238
2364
  if (K) {
2239
- Ve(K.source, e);
2365
+ Ue(K.source, e);
2240
2366
  return;
2241
2367
  }
2242
- let t = Y(), n = Sr(), r = Ve(j, e);
2243
- r < 0 || (n && (P += Y() - t), yr(r));
2368
+ let t = Y(), n = Or(), r = Ue(M, e);
2369
+ r < 0 || (n && (P += Y() - t), Tr(r));
2244
2370
  },
2245
2371
  prependBars(e) {
2246
- K && Xe(K.source, e);
2247
- let t = Xe(j, e);
2248
- t && (jt = Ue(), Pt = Ue(), Nt = 0, P += t, V !== null && (V += t), yr(0));
2372
+ K && Qe(K.source, e);
2373
+ let t = Qe(M, e);
2374
+ t && (Ft = Ge(), Rt = Ge(), Lt = 0, P += t, V !== null && (V += t), Tr(0));
2249
2375
  },
2250
2376
  getBarCount: () => Y(),
2251
- getBar: (e) => e >= 0 && e < Y() ? $e(j, Math.floor(e)) : null,
2377
+ getBar: (e) => e >= 0 && e < Y() ? tt(M, Math.floor(e)) : null,
2252
2378
  scrollToRealtime(e = !0) {
2253
- let t = Y() - 1 + (D.rightOffset ?? 8);
2254
- un = null, e && T(P) && Math.abs(t - P) * N < F * 6 ? dn = {
2379
+ let t = Y() - 1 + (k.rightOffset ?? 8);
2380
+ gn = null, e && D(P) && Math.abs(t - P) * N < F * 6 ? _n = {
2255
2381
  from: P,
2256
2382
  to: t,
2257
2383
  start: typeof performance < "u" ? performance.now() : Date.now()
@@ -2259,113 +2385,113 @@ var it = 28, at = 60, ot = 60, st = 48, C = "price", ct = "var(--success-color,
2259
2385
  },
2260
2386
  fitContent() {
2261
2387
  let e = Y();
2262
- e && Ra.setVisibleRange({
2388
+ e && Ja.setVisibleRange({
2263
2389
  from: -.5,
2264
- to: e - 1 + (D.rightOffset ?? 8)
2390
+ to: e - 1 + (k.rightOffset ?? 8)
2265
2391
  });
2266
2392
  },
2267
- getVisibleRange: () => Ei(),
2393
+ getVisibleRange: () => Pi(),
2268
2394
  setVisibleRange({ from: e, to: t }) {
2269
- t > e && (un = null, dn = null, fn = {
2395
+ t > e && (gn = null, _n = null, vn = {
2270
2396
  from: e,
2271
2397
  to: t
2272
- }, ki(fn), $());
2398
+ }, Li(vn), $());
2273
2399
  },
2274
2400
  getVisibleTimeRange() {
2275
- let e = Ei();
2401
+ let e = Pi();
2276
2402
  return {
2277
- from: ar(e.from),
2278
- to: ar(e.to)
2403
+ from: dr(e.from),
2404
+ to: dr(e.to)
2279
2405
  };
2280
2406
  },
2281
2407
  setVisibleTimeRange({ from: e, to: t }) {
2282
- Y() && t > e && Ra.setVisibleRange({
2283
- from: or(e),
2284
- to: or(t)
2408
+ Y() && t > e && Ja.setVisibleRange({
2409
+ from: fr(e),
2410
+ to: fr(t)
2285
2411
  });
2286
2412
  },
2287
2413
  setCrosshair(e, t) {
2288
- Pn = e === null || !T(e) ? null : {
2414
+ Bn = e === null || !D(e) ? null : {
2289
2415
  time: e,
2290
2416
  price: t ?? NaN
2291
2417
  }, $();
2292
2418
  },
2293
2419
  setScaleMode(e) {
2294
- D = {
2295
- ...D,
2420
+ k = {
2421
+ ...k,
2296
2422
  scaleMode: e
2297
2423
  };
2298
- let t = qt.get(C);
2424
+ let t = Qt.get(T);
2299
2425
  t && (t.auto = !0), $();
2300
2426
  },
2301
2427
  resetPriceScales() {
2302
- for (let e of qt.values()) e.auto = !0;
2428
+ for (let e of Qt.values()) e.auto = !0;
2303
2429
  $();
2304
2430
  },
2305
- setDrawingTool: (e) => Mi(e, !0),
2306
- getDrawingTool: () => vn,
2431
+ setDrawingTool: (e) => Bi(e, !0),
2432
+ getDrawingTool: () => wn,
2307
2433
  getDrawings: () => W,
2308
2434
  setDrawings(e) {
2309
- Ii(e, !1);
2435
+ Wi(e, !1);
2310
2436
  },
2311
- removeDrawing: Vi,
2312
- updateDrawing: Bi,
2313
- selectDrawing: (e) => Ni(e),
2314
- undo: Ri,
2315
- redo: zi,
2316
- getUndoState: Pi,
2437
+ removeDrawing: Yi,
2438
+ updateDrawing: Ji,
2439
+ selectDrawing: (e) => Vi(e),
2440
+ undo: Ki,
2441
+ redo: qi,
2442
+ getUndoState: Hi,
2317
2443
  startReplay(e) {
2318
2444
  if (!Y() && !K) return;
2319
2445
  if (e === void 0) {
2320
- K && pa(!0), Rn = !0, oa(), $();
2446
+ K && xa(!0), Wn = !0, ma(), $();
2321
2447
  return;
2322
2448
  }
2323
- let t = K ? K.source : j;
2324
- ua(Ke(t.time, t.length, e));
2449
+ let t = K ? K.source : M;
2450
+ va(Je(t.time, t.length, e));
2325
2451
  },
2326
- replayStep: (e = 1) => da(Math.max(1, Math.floor(e))),
2327
- replayPlay: (e) => fa(e),
2452
+ replayStep: (e = 1) => ya(Math.max(1, Math.floor(e))),
2453
+ replayPlay: (e) => ba(e),
2328
2454
  replayPause() {
2329
- K && (la(), oa());
2455
+ K && (_a(), ma());
2330
2456
  },
2331
- stopReplay: () => pa(!0),
2332
- getReplayState: aa,
2457
+ stopReplay: () => xa(!0),
2458
+ getReplayState: pa,
2333
2459
  toDataURL(e = "image/png", t) {
2334
- return ja()?.toDataURL(e, t) ?? "";
2460
+ return Va()?.toDataURL(e, t) ?? "";
2335
2461
  },
2336
2462
  toBlob(e = "image/png", t) {
2337
- let n = ja();
2463
+ let n = Va();
2338
2464
  return new Promise((r) => {
2339
2465
  !n || typeof n.toBlob != "function" ? r(null) : n.toBlob(r, e, t);
2340
2466
  });
2341
2467
  },
2342
2468
  async requestFullscreen() {
2343
- typeof O.requestFullscreen == "function" && await O.requestFullscreen();
2469
+ typeof A.requestFullscreen == "function" && await A.requestFullscreen();
2344
2470
  },
2345
2471
  async exitFullscreen() {
2346
- E.fullscreenElement === O && typeof E.exitFullscreen == "function" && await E.exitFullscreen();
2472
+ O.fullscreenElement === A && typeof O.exitFullscreen == "function" && await O.exitFullscreen();
2347
2473
  },
2348
- isFullscreen: () => E.fullscreenElement === O,
2474
+ isFullscreen: () => O.fullscreenElement === A,
2349
2475
  setIndicatorVisible(e, t) {
2350
- It.set(e, t), $();
2476
+ Vt.set(e, t), $();
2351
2477
  },
2352
2478
  getRenderer: () => z?.kind ?? null,
2353
- ready: sn,
2354
- refreshTheme: Oa,
2479
+ ready: fn,
2480
+ refreshTheme: Ra,
2355
2481
  resize: () => $(),
2356
2482
  on(e, t) {
2357
- let n = Vn.get(e);
2358
- return n || Vn.set(e, n = /* @__PURE__ */ new Set()), n.add(t), () => n.delete(t);
2483
+ let n = qn.get(e);
2484
+ return n || qn.set(e, n = /* @__PURE__ */ new Set()), n.add(t), () => n.delete(t);
2359
2485
  },
2360
2486
  destroy() {
2361
- St || (St = !0, en && (xt?.cancelAnimationFrame ? xt.cancelAnimationFrame(en) : clearTimeout(en)), Ln && clearInterval(Ln), K?.timer && clearInterval(K.timer), E.removeEventListener("fullscreenchange", Na), Da?.disconnect(), La(), ka(), Aa?.disconnect(), O.removeEventListener("wheel", ya), z?.destroy(), z = null, on(null), Vn.clear(), O.remove());
2487
+ Tt || (Tt = !0, on && (wt?.cancelAnimationFrame ? wt.cancelAnimationFrame(on) : clearTimeout(on)), Un && clearInterval(Un), K?.timer && clearInterval(K.timer), O.removeEventListener("fullscreenchange", Ua), La?.disconnect(), qa(), za(), Ba?.disconnect(), A.removeEventListener("wheel", Da), z?.destroy(), z = null, dn(null), qn.clear(), A.remove());
2362
2488
  }
2363
2489
  };
2364
- return ht.set(Ra, { setTimeRange(e) {
2365
- Nn = !0, Ra.setVisibleTimeRange(e);
2366
- } }), Ra;
2490
+ return _t.set(Ja, { setTimeRange(e) {
2491
+ zn = !0, Ja.setVisibleTimeRange(e);
2492
+ } }), Ja;
2367
2493
  };
2368
2494
  //#endregion
2369
- export { E as createTradingChart, ht as syncHooks };
2495
+ export { O as createTradingChart, _t as syncHooks };
2370
2496
 
2371
2497
  //# sourceMappingURL=chart.js.map