@tradecanvas/commons 1.12.0 → 1.13.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.
package/dist/index.js CHANGED
@@ -2,13 +2,103 @@
2
2
  var e = /* @__PURE__ */ function(e) {
3
3
  return e[e.Background = 0] = "Background", e[e.Main = 1] = "Main", e[e.Panel = 2] = "Panel", e[e.Overlay = 3] = "Overlay", e[e.UI = 4] = "UI", e[e.Hover = 5] = "Hover", e;
4
4
  }({}), t = {
5
+ "background.color": "color",
6
+ "panes.background": "color",
7
+ "panes.separatorColor": "color",
8
+ "panes.titleColor": "color",
9
+ "grid.horizontal.visible": "boolean",
10
+ "grid.horizontal.color": "color",
11
+ "grid.horizontal.style": "lineStyle",
12
+ "grid.horizontal.width": "width",
13
+ "grid.vertical.visible": "boolean",
14
+ "grid.vertical.color": "color",
15
+ "grid.vertical.style": "lineStyle",
16
+ "grid.vertical.width": "width",
17
+ "crosshair.horizontal.visible": "boolean",
18
+ "crosshair.horizontal.color": "color",
19
+ "crosshair.horizontal.style": "lineStyle",
20
+ "crosshair.horizontal.width": "width",
21
+ "crosshair.vertical.visible": "boolean",
22
+ "crosshair.vertical.color": "color",
23
+ "crosshair.vertical.style": "lineStyle",
24
+ "crosshair.vertical.width": "width",
25
+ "crosshair.labelBackground": "color",
26
+ "crosshair.labelTextColor": "color",
27
+ "axis.price.lineColor": "color",
28
+ "axis.price.textColor": "color",
29
+ "axis.time.lineColor": "color",
30
+ "axis.time.textColor": "color",
31
+ "legend.textColor": "color",
32
+ "legend.labelColor": "color",
33
+ "watermark.color": "color",
34
+ "lastPrice.visible": "boolean",
35
+ "lastPrice.upColor": "color",
36
+ "lastPrice.downColor": "color",
37
+ "lastPrice.style": "lineStyle",
38
+ "lastPrice.width": "width",
39
+ "volume.upColor": "color",
40
+ "volume.downColor": "color",
41
+ "sessionBreaks.color": "color",
42
+ "sessionBreaks.style": "lineStyle",
43
+ "sessionBreaks.width": "width",
44
+ "highLow.color": "color",
45
+ "series.candlestick.upColor": "color",
46
+ "series.candlestick.downColor": "color",
47
+ "series.candlestick.wickUpColor": "color",
48
+ "series.candlestick.wickDownColor": "color",
49
+ "series.heikinAshi.upColor": "color",
50
+ "series.heikinAshi.downColor": "color",
51
+ "series.heikinAshi.wickUpColor": "color",
52
+ "series.heikinAshi.wickDownColor": "color",
53
+ "series.hollowCandle.upColor": "color",
54
+ "series.hollowCandle.downColor": "color",
55
+ "series.volumeCandles.upColor": "color",
56
+ "series.volumeCandles.downColor": "color",
57
+ "series.volumeCandles.wickUpColor": "color",
58
+ "series.volumeCandles.wickDownColor": "color",
59
+ "series.equivolume.upColor": "color",
60
+ "series.equivolume.downColor": "color",
61
+ "series.equivolume.wickUpColor": "color",
62
+ "series.equivolume.wickDownColor": "color",
63
+ "series.bar.upColor": "color",
64
+ "series.bar.downColor": "color",
65
+ "series.hiLo.upColor": "color",
66
+ "series.hiLo.downColor": "color",
67
+ "series.renko.upColor": "color",
68
+ "series.renko.downColor": "color",
69
+ "series.lineBreak.upColor": "color",
70
+ "series.lineBreak.downColor": "color",
71
+ "series.rangeBars.upColor": "color",
72
+ "series.rangeBars.downColor": "color",
73
+ "series.kagi.upColor": "color",
74
+ "series.kagi.downColor": "color",
75
+ "series.pointAndFigure.upColor": "color",
76
+ "series.pointAndFigure.downColor": "color",
77
+ "series.baseline.upColor": "color",
78
+ "series.baseline.downColor": "color",
79
+ "series.baseline.lineWidth": "width",
80
+ "series.line.color": "color",
81
+ "series.line.lineWidth": "width",
82
+ "series.stepLine.color": "color",
83
+ "series.stepLine.lineWidth": "width",
84
+ "series.lineWithMarkers.color": "color",
85
+ "series.lineWithMarkers.lineWidth": "width",
86
+ "series.area.lineColor": "color",
87
+ "series.area.lineWidth": "width",
88
+ "series.area.topColor": "color",
89
+ "series.area.bottomColor": "color",
90
+ "series.hlcArea.lineColor": "color",
91
+ "series.hlcArea.lineWidth": "width",
92
+ "series.hlcArea.topColor": "color",
93
+ "series.hlcArea.bottomColor": "color"
94
+ }, n = {
5
95
  color: "#4c8dff",
6
96
  lineWidth: 1,
7
97
  lineStyle: "solid",
8
98
  fillColor: "rgba(76, 141, 255, 0.1)",
9
99
  fillOpacity: .1,
10
100
  fontSize: 12
11
- }, n = {
101
+ }, r = {
12
102
  enabled: !0,
13
103
  orderColors: {
14
104
  buy: "#1fa874",
@@ -35,14 +125,14 @@ var e = /* @__PURE__ */ function(e) {
35
125
  fillMarks: !0,
36
126
  pricePrecision: 2,
37
127
  dragThreshold: 3
38
- }, r = {
128
+ }, i = {
39
129
  longColor: "#1fa874",
40
130
  shortColor: "#e8505b",
41
131
  neutralColor: "#9E9E9E",
42
132
  arrowSize: 12,
43
133
  showLabel: !0,
44
134
  showConfidence: !0
45
- }, i = {
135
+ }, a = {
46
136
  profitColor: "#1fa874",
47
137
  lossColor: "#e8505b",
48
138
  activeColor: "#4c8dff",
@@ -50,18 +140,18 @@ var e = /* @__PURE__ */ function(e) {
50
140
  borderWidth: 1,
51
141
  showLabel: !0,
52
142
  showPnl: !0
53
- }, a = {
143
+ }, o = {
54
144
  enabled: !0,
55
145
  maxRetries: Infinity,
56
146
  baseDelay: 1e3,
57
147
  maxDelay: 3e4,
58
148
  backoffMultiplier: 2
59
- }, o = {
149
+ }, s = {
60
150
  historyLimit: 500,
61
151
  autoScroll: !0,
62
152
  showCurrentPriceLine: !0,
63
153
  aggregateTicks: !1
64
- }, s = [
154
+ }, c = [
65
155
  "change",
66
156
  "changePercent",
67
157
  "open",
@@ -73,17 +163,17 @@ var e = /* @__PURE__ */ function(e) {
73
163
  "ask",
74
164
  "time"
75
165
  ];
76
- function c(e) {
166
+ function l(e) {
77
167
  if (!e || typeof e != "object") return null;
78
168
  let t = e, n = typeof t.symbol == "string" ? t.symbol.trim() : "";
79
- if (!n || n.length > 64 || !l(t.last)) return null;
169
+ if (!n || n.length > 64 || !u(t.last)) return null;
80
170
  let r = {
81
171
  symbol: n,
82
172
  last: t.last
83
173
  };
84
- for (let e of s) {
174
+ for (let e of c) {
85
175
  let n = t[e];
86
- l(n) && (r[e] = n);
176
+ u(n) && (r[e] = n);
87
177
  }
88
178
  let i = r.prevClose ?? r.open;
89
179
  if (r.change === void 0 && i !== void 0 && (r.change = r.last - i), r.changePercent === void 0 && r.change !== void 0) {
@@ -92,12 +182,12 @@ function c(e) {
92
182
  }
93
183
  return r;
94
184
  }
95
- function l(e) {
185
+ function u(e) {
96
186
  return typeof e == "number" && Number.isFinite(e);
97
187
  }
98
188
  //#endregion
99
189
  //#region src/types/news.ts
100
- var u = 300, d = 1e3, f = (e, t) => {
190
+ var d = 300, f = 1e3, p = (e, t) => {
101
191
  if (typeof e != "string") return;
102
192
  let n = e.trim();
103
193
  return n ? n.slice(0, t) : void 0;
@@ -114,18 +204,18 @@ function te(e, t = 20) {
114
204
  let n = [];
115
205
  for (let t of e) {
116
206
  if (!t || typeof t != "object") continue;
117
- let e = t, r = f(e.title, u);
207
+ let e = t, r = p(e.title, d);
118
208
  if (!r || typeof e.time != "number" || !Number.isFinite(e.time)) continue;
119
209
  let i = {
120
210
  title: r,
121
211
  time: e.time
122
212
  }, a = ee(e.url);
123
213
  a && (i.url = a);
124
- let o = f(e.source, u);
214
+ let o = p(e.source, d);
125
215
  o && (i.source = o);
126
- let s = f(e.summary, d);
216
+ let s = p(e.summary, f);
127
217
  s && (i.summary = s);
128
- let c = f(e.id, u);
218
+ let c = p(e.id, d);
129
219
  c && (i.id = c), n.push(i);
130
220
  }
131
221
  return n.sort((e, t) => t.time - e.time).slice(0, Math.max(0, t));
@@ -144,12 +234,12 @@ function ie(e, t, n) {
144
234
  function ae(e, t) {
145
235
  return Math.round(e / t) * t;
146
236
  }
147
- function p(e, t) {
237
+ function m(e, t) {
148
238
  let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
149
239
  return i = t ? r < 1.5 ? 1 : r < 3 ? 2 : r < 7 ? 5 : 10 : r <= 1 ? 1 : r <= 2 ? 2 : r <= 5 ? 5 : 10, i * 10 ** n;
150
240
  }
151
241
  function oe(e, t, n) {
152
- return p(p(t - e, !1) / (n - 1), !0);
242
+ return m(m(t - e, !1) / (n - 1), !0);
153
243
  }
154
244
  //#endregion
155
245
  //#region src/utils/data.ts
@@ -229,7 +319,7 @@ function he(e, t, n) {
229
319
  }
230
320
  //#endregion
231
321
  //#region src/utils/timezone.ts
232
- var m = 6e4, h = 1440 * m, g = 15 * m, ge = 8192, _ = 7 * h, _e = 4096, ve = new Set([
322
+ var h = 6e4, g = 1440 * h, _ = 15 * h, ge = 8192, v = 7 * g, _e = 4096, ve = new Set([
233
323
  "UTC",
234
324
  "Etc/UTC",
235
325
  "GMT",
@@ -240,8 +330,8 @@ var m = 6e4, h = 1440 * m, g = 15 * m, ge = 8192, _ = 7 * h, _e = 4096, ve = new
240
330
  "Etc/Universal",
241
331
  "Zulu",
242
332
  "Etc/Zulu"
243
- ]), ye = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Map();
244
- function be(e) {
333
+ ]), ye = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Map(), be = /* @__PURE__ */ new Map();
334
+ function xe(e) {
245
335
  let t = ye.get(e);
246
336
  return t || (t = new Intl.DateTimeFormat("en-US", {
247
337
  timeZone: e,
@@ -254,31 +344,31 @@ function be(e) {
254
344
  second: "numeric"
255
345
  }), ye.set(e, t)), t;
256
346
  }
257
- function xe(e) {
347
+ function Se(e) {
258
348
  if (!e) return !1;
259
349
  try {
260
- return be(e), !0;
350
+ return xe(e), !0;
261
351
  } catch {
262
352
  return !1;
263
353
  }
264
354
  }
265
355
  function b(e, t) {
266
356
  if (!Number.isFinite(t) || ve.has(e)) return 0;
267
- let n = y.get(e);
268
- n || (n = /* @__PURE__ */ new Map(), y.set(e, n));
269
- let r = Math.floor(t / _), i = n.get(r);
270
- return i || (i = Se(e, r * _), n.size >= _e && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
357
+ let n = be.get(e);
358
+ n || (n = /* @__PURE__ */ new Map(), be.set(e, n));
359
+ let r = Math.floor(t / v), i = n.get(r);
360
+ return i || (i = Ce(e, r * v), n.size >= _e && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
271
361
  }
272
- function Se(e, t) {
273
- let n = x(e, t), r = t + _ - g, i = x(e, r);
362
+ function Ce(e, t) {
363
+ let n = x(e, t), r = t + v - _, i = x(e, r);
274
364
  if (i === n) return {
275
365
  before: n,
276
366
  change: Infinity,
277
367
  after: i
278
368
  };
279
369
  let a = t;
280
- for (; r - a > g;) {
281
- let t = a + Math.floor((r - a) / g / 2) * g;
370
+ for (; r - a > _;) {
371
+ let t = a + Math.floor((r - a) / _ / 2) * _;
282
372
  x(e, t) === n ? a = t : r = t;
283
373
  }
284
374
  return {
@@ -288,10 +378,10 @@ function Se(e, t) {
288
378
  };
289
379
  }
290
380
  function x(e, t) {
291
- let n = Math.floor(t / g), r = `${e}|${n}`, i = v.get(r);
381
+ let n = Math.floor(t / _), r = `${e}|${n}`, i = y.get(r);
292
382
  if (i !== void 0) return i;
293
- let a = n * g, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
294
- for (let t of be(e).formatToParts(new Date(a))) {
383
+ let a = n * _, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
384
+ for (let t of xe(e).formatToParts(new Date(a))) {
295
385
  let e = Number(t.value);
296
386
  switch (t.type) {
297
387
  case "year":
@@ -314,21 +404,21 @@ function x(e, t) {
314
404
  break;
315
405
  }
316
406
  }
317
- let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / m);
318
- return v.size >= ge && v.clear(), v.set(r, f), f;
407
+ let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / h);
408
+ return y.size >= ge && y.clear(), y.set(r, f), f;
319
409
  }
320
410
  function S(e, t) {
321
411
  return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : b(e, t);
322
412
  }
323
- function Ce(e, t) {
324
- let n = e - S(t, e - h) * m;
325
- if (n + S(t, n) * m === e) return n;
326
- let r = e - S(t, e + h) * m;
327
- return r + S(t, r) * m === e ? r : n;
328
- }
329
- var C = /* @__PURE__ */ new Map();
330
- function we(e, t, n) {
331
- let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = C.get(r);
413
+ function we(e, t) {
414
+ let n = e - S(t, e - g) * h;
415
+ if (n + S(t, n) * h === e) return n;
416
+ let r = e - S(t, e + g) * h;
417
+ return r + S(t, r) * h === e ? r : n;
418
+ }
419
+ var Te = /* @__PURE__ */ new Map();
420
+ function Ee(e, t, n) {
421
+ let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = Te.get(r);
332
422
  if (i) return i;
333
423
  let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
334
424
  try {
@@ -342,12 +432,12 @@ function we(e, t, n) {
342
432
  timeZone: a
343
433
  });
344
434
  }
345
- let s = typeof n == "number" ? n * m : 0;
346
- return i = (e) => o.format(new Date(e + s)), C.set(r, i), i;
435
+ let s = typeof n == "number" ? n * h : 0;
436
+ return i = (e) => o.format(new Date(e + s)), Te.set(r, i), i;
347
437
  }
348
438
  //#endregion
349
439
  //#region src/utils/time.ts
350
- var Te = {
440
+ var De = {
351
441
  "1s": 1e3,
352
442
  "5s": 5e3,
353
443
  "15s": 15e3,
@@ -374,16 +464,16 @@ var Te = {
374
464
  "3M": 7776e6,
375
465
  "6M": 15552e6,
376
466
  "12M": 31536e6
377
- }, w = {
467
+ }, C = {
378
468
  s: 1e3,
379
469
  m: 6e4,
380
470
  h: 36e5,
381
471
  d: 864e5,
382
472
  w: 6048e5,
383
473
  M: 2592e6
384
- }, Ee = /^([1-9]\d*)([smhdwM])$/;
385
- function T(e) {
386
- let t = Ee.exec(e);
474
+ }, Oe = /^([1-9]\d*)([smhdwM])$/;
475
+ function w(e) {
476
+ let t = Oe.exec(e);
387
477
  if (!t) return null;
388
478
  let n = Number(t[1]);
389
479
  return Number.isSafeInteger(n) ? {
@@ -391,24 +481,24 @@ function T(e) {
391
481
  unit: t[2]
392
482
  } : null;
393
483
  }
394
- var De = 1e6;
395
- function Oe(e) {
484
+ var ke = 1e6;
485
+ function Ae(e) {
396
486
  let t = /^([1-9]\d*)T$/.exec(e);
397
487
  if (!t) return null;
398
488
  let n = Number(t[1]);
399
- return Number.isSafeInteger(n) && n <= De ? n : null;
489
+ return Number.isSafeInteger(n) && n <= ke ? n : null;
400
490
  }
401
- function ke(e) {
402
- return T(e) !== null;
491
+ function je(e) {
492
+ return w(e) !== null;
403
493
  }
404
- function E(e) {
405
- let t = Te[e];
494
+ function T(e) {
495
+ let t = De[e];
406
496
  if (t !== void 0) return t;
407
- let n = T(e);
408
- return n ? n.count * w[n.unit] : NaN;
497
+ let n = w(e);
498
+ return n ? n.count * C[n.unit] : NaN;
409
499
  }
410
- function Ae(e, t) {
411
- let n = new Date(e), r = E(t);
500
+ function Me(e, t) {
501
+ let n = new Date(e), r = T(t);
412
502
  return r >= 864e5 ? n.toLocaleDateString(void 0, {
413
503
  month: "short",
414
504
  day: "numeric"
@@ -421,11 +511,11 @@ function Ae(e, t) {
421
511
  second: "2-digit"
422
512
  });
423
513
  }
424
- function je(e, t) {
425
- let n = E(t);
514
+ function Ne(e, t) {
515
+ let n = T(t);
426
516
  return Math.floor(e / n) * n;
427
517
  }
428
- function Me(e, t) {
518
+ function Pe(e, t) {
429
519
  if (t === null) {
430
520
  let t = new Date(e);
431
521
  return {
@@ -445,11 +535,11 @@ function Me(e, t) {
445
535
  minutes: n.getUTCMinutes()
446
536
  };
447
537
  }
448
- function Ne(e) {
538
+ function Fe(e) {
449
539
  return e.hours === 0 && e.minutes === 0;
450
540
  }
451
- var Pe = 20 * 36e5;
452
- function Fe(e) {
541
+ var Ie = 20 * 36e5;
542
+ function Le(e) {
453
543
  let t = Math.min(e.length, 64);
454
544
  if (t < 2) return;
455
545
  let n = (e) => e > 0xe8d4a51000 ? e : e * 1e3, r = Infinity;
@@ -457,78 +547,78 @@ function Fe(e) {
457
547
  let t = Math.abs(n(e[i].time) - n(e[i - 1].time));
458
548
  t > 0 && t < r && (r = t);
459
549
  }
460
- return r === Infinity ? void 0 : r >= Pe;
550
+ return r === Infinity ? void 0 : r >= Ie;
461
551
  }
462
- function Ie(e, t = Date.now()) {
552
+ function Re(e, t = Date.now()) {
463
553
  let n = S(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
464
554
  return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
465
555
  }
466
- var D = Date.UTC(1970, 0, 5);
467
- function O(e, t, n = 1) {
468
- let { count: r, unit: i } = T(t) ?? {
556
+ var ze = Date.UTC(1970, 0, 5);
557
+ function Be(e, t, n = 1) {
558
+ let { count: r, unit: i } = w(t) ?? {
469
559
  count: 1,
470
560
  unit: "m"
471
561
  };
472
562
  if (i === "s" || i === "m" || i === "h" || i === "d") {
473
- let t = r * w[i];
563
+ let t = r * C[i];
474
564
  return Math.floor(e / t) * t;
475
565
  }
476
566
  let a = new Date(e);
477
567
  if (i === "w") {
478
- let e = w.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
568
+ let e = C.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
479
569
  if (r <= 1) return i;
480
- let o = Math.floor((i - D) / (7 * e));
481
- return D + Math.floor(o / r) * r * 7 * e;
570
+ let o = Math.floor((i - ze) / (7 * e));
571
+ return ze + Math.floor(o / r) * r * 7 * e;
482
572
  }
483
573
  let o = a.getUTCFullYear() * 12 + a.getUTCMonth(), s = Math.floor(o / r) * r;
484
574
  return Date.UTC(Math.floor(s / 12), s % 12, 1);
485
575
  }
486
576
  //#endregion
487
577
  //#region src/utils/precision.ts
488
- var Le = 64, k = /* @__PURE__ */ new Map();
489
- function Re(e, t) {
490
- let n = `${e}|${t}`, r = k.get(n);
491
- return r || (k.size >= Le && k.clear(), r = new Intl.NumberFormat(e, {
578
+ var Ve = 64, E = /* @__PURE__ */ new Map();
579
+ function He(e, t) {
580
+ let n = `${e}|${t}`, r = E.get(n);
581
+ return r || (E.size >= Ve && E.clear(), r = new Intl.NumberFormat(e, {
492
582
  minimumFractionDigits: t,
493
583
  maximumFractionDigits: t
494
- }), k.set(n, r)), r;
584
+ }), E.set(n, r)), r;
495
585
  }
496
- function A(e, t = 2, n = "en-US") {
497
- return Re(n, t).format(e);
586
+ function D(e, t = 2, n = "en-US") {
587
+ return He(n, t).format(e);
498
588
  }
499
- function ze(e, t) {
589
+ function Ue(e, t) {
500
590
  if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
501
591
  let n = oe(e, t, 8);
502
592
  return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
503
593
  }
504
- function Be(e, t, n, r = 2, i = "en-US") {
594
+ function We(e, t, n, r = 2, i = "en-US") {
505
595
  if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
506
596
  if (t === "percentage") {
507
597
  let t = (e / n - 1) * 100;
508
598
  return `${t > 0 ? "+" : ""}${t.toFixed(2)}%`;
509
599
  }
510
- return A(e / n * 100, 2, i);
600
+ return D(e / n * 100, 2, i);
511
601
  }
512
- return A(e, r, i);
602
+ return D(e, r, i);
513
603
  }
514
- function Ve(e, t, n = 1) {
604
+ function Ge(e, t, n = 1) {
515
605
  let r = Number.isInteger(n) && n > 1 ? n : 1;
516
606
  if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
517
607
  let i = t * r, a = Math.round(Math.abs(e) * i), o = Math.floor(a / i), s = a - o * i, c = Math.floor(s / r), l = String(t - 1).length, u = r > 1 ? String(Math.floor((s - c * r) / r * 10)) : "";
518
608
  return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
519
609
  }
520
- function He(e) {
610
+ function Ke(e) {
521
611
  if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
522
612
  let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
523
613
  return 1 / (e.denominator * t);
524
614
  }
525
- function Ue(e) {
526
- return e ? typeof e == "function" ? e : He(e) === null ? null : (t) => Ve(t, e.denominator, e.subDenominator) : null;
615
+ function qe(e) {
616
+ return e ? typeof e == "function" ? e : Ke(e) === null ? null : (t) => Ge(t, e.denominator, e.subDenominator) : null;
527
617
  }
528
- function We(e) {
618
+ function Je(e) {
529
619
  return e >= 1e9 ? (e / 1e9).toFixed(2) + "B" : e >= 1e6 ? (e / 1e6).toFixed(2) + "M" : e >= 1e3 ? (e / 1e3).toFixed(2) + "K" : e.toFixed(0);
530
620
  }
531
- function Ge(e) {
621
+ function Ye(e) {
532
622
  let t = 0;
533
623
  for (let n of e) {
534
624
  let e = n.toString(), r = e.indexOf(".");
@@ -538,7 +628,7 @@ function Ge(e) {
538
628
  }
539
629
  //#endregion
540
630
  //#region src/utils/priceSource.ts
541
- var Ke = [
631
+ var Xe = [
542
632
  "close",
543
633
  "open",
544
634
  "high",
@@ -548,10 +638,10 @@ var Ke = [
548
638
  "ohlc4",
549
639
  "hlcc4"
550
640
  ];
551
- function qe(e) {
552
- return typeof e == "string" && Ke.includes(e);
641
+ function Ze(e) {
642
+ return typeof e == "string" && Xe.includes(e);
553
643
  }
554
- function Je(e, t) {
644
+ function Qe(e, t) {
555
645
  switch (t) {
556
646
  case "open": return e.open;
557
647
  case "high": return e.high;
@@ -563,13 +653,13 @@ function Je(e, t) {
563
653
  default: return e.close;
564
654
  }
565
655
  }
566
- var Ye = /^ind:([^:]+):(.+)$/;
567
- function Xe(e, t) {
656
+ var $e = /^ind:([^:]+):(.+)$/;
657
+ function et(e, t) {
568
658
  return `ind:${e}:${t}`;
569
659
  }
570
- function Ze(e) {
660
+ function tt(e) {
571
661
  if (typeof e != "string") return null;
572
- let t = Ye.exec(e);
662
+ let t = $e.exec(e);
573
663
  return t ? {
574
664
  instanceId: t[1],
575
665
  key: t[2]
@@ -577,11 +667,11 @@ function Ze(e) {
577
667
  }
578
668
  //#endregion
579
669
  //#region src/utils/resample.ts
580
- var Qe = 864e5;
581
- function $e(e, t, n = 1) {
670
+ var nt = 864e5;
671
+ function rt(e, t, n = 1) {
582
672
  let r = [], i = null;
583
673
  for (let a of e) {
584
- let e = O(a.time, t, n);
674
+ let e = Be(a.time, t, n);
585
675
  i === null || e !== i.time ? (i = {
586
676
  time: e,
587
677
  open: a.open,
@@ -593,37 +683,37 @@ function $e(e, t, n = 1) {
593
683
  }
594
684
  return r;
595
685
  }
596
- var j = (e) => e === "s" || e === "m" || e === "h" || e === "d";
597
- function et(e, t) {
598
- let n = T(e), r = T(t);
686
+ var O = (e) => e === "s" || e === "m" || e === "h" || e === "d";
687
+ function it(e, t) {
688
+ let n = w(e), r = w(t);
599
689
  if (!n || !r) return !1;
600
- let i = E(e);
601
- return n.unit === "d" && n.count > 1 ? !1 : j(r.unit) ? j(n.unit) && E(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : j(n.unit) && Qe % i === 0;
690
+ let i = T(e);
691
+ return n.unit === "d" && n.count > 1 ? !1 : O(r.unit) ? O(n.unit) && T(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : O(n.unit) && nt % i === 0;
602
692
  }
603
- function tt(e, t) {
693
+ function at(e, t) {
604
694
  let n = null, r = 0;
605
695
  for (let i of t) {
606
- if (!et(i, e)) continue;
607
- let t = E(i);
696
+ if (!it(i, e)) continue;
697
+ let t = T(i);
608
698
  t > r && (n = i, r = t);
609
699
  }
610
700
  return n;
611
701
  }
612
702
  //#endregion
613
703
  //#region src/utils/symbols.ts
614
- function nt(e, t) {
704
+ function ot(e, t) {
615
705
  if (!e) return 0;
616
706
  if (e === t) return 1e3;
617
707
  if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
618
708
  let n = e.indexOf(t);
619
709
  return n >= 0 ? 300 - Math.min(100, n) : 0;
620
710
  }
621
- function rt(e, t, n = 50, r) {
711
+ function st(e, t, n = 50, r) {
622
712
  let i = t.trim().toUpperCase();
623
713
  if (!i) return e.slice(0, n);
624
714
  let a = [];
625
715
  for (let t of e) {
626
- let e = Math.max(nt(t.symbol.toUpperCase(), i), nt((t.description ?? "").toUpperCase(), i) * .8);
716
+ let e = Math.max(ot(t.symbol.toUpperCase(), i), ot((t.description ?? "").toUpperCase(), i) * .8);
627
717
  e > 0 && a.push({
628
718
  info: t,
629
719
  score: e + (r?.(t) ?? 0)
@@ -631,7 +721,7 @@ function rt(e, t, n = 50, r) {
631
721
  }
632
722
  return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
633
723
  }
634
- function it(e) {
724
+ function ct(e) {
635
725
  let t = typeof e == "number" ? e : Number(e);
636
726
  if (!Number.isFinite(t) || t <= 0) return 0;
637
727
  for (let e = 0; e <= 12; e++) {
@@ -640,7 +730,7 @@ function it(e) {
640
730
  }
641
731
  return 12;
642
732
  }
643
- function M(e) {
733
+ function k(e) {
644
734
  let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
645
735
  if (!t) return null;
646
736
  let n = Number(t[1]), r = Number(t[2]);
@@ -648,26 +738,26 @@ function M(e) {
648
738
  }
649
739
  //#endregion
650
740
  //#region src/utils/marketStatus.ts
651
- var N = 864e5, P = 6e4, at = 8;
652
- function ot(e, t) {
741
+ var A = 864e5, j = 6e4, lt = 8;
742
+ function ut(e, t) {
653
743
  let n = e?.timezone, r = (e?.sessions ?? []).flatMap((e) => {
654
- let t = M(e.start), n = M(e.end);
744
+ let t = k(e.start), n = k(e.end);
655
745
  return t === null || n === null || t === n ? [] : [{
656
746
  start: t,
657
747
  end: n,
658
748
  days: Array.isArray(e.days) ? e.days : null
659
749
  }];
660
750
  });
661
- if (!n || !xe(n) || r.length === 0 || !Number.isFinite(t)) return {
751
+ if (!n || !Se(n) || r.length === 0 || !Number.isFinite(t)) return {
662
752
  state: "always",
663
753
  next: null
664
754
  };
665
- let i = b(n, t) * P, a = Math.floor((t + i) / N) * N, o = (e) => e - b(n, e - b(n, e - i) * P) * P, s = [];
666
- for (let e = -1; e <= at; e++) {
667
- let t = a + e * N, n = (Math.floor(t / N) + 4) % 7;
755
+ let i = b(n, t) * j, a = Math.floor((t + i) / A) * A, o = (e) => e - b(n, e - b(n, e - i) * j) * j, s = [];
756
+ for (let e = -1; e <= lt; e++) {
757
+ let t = a + e * A, n = (Math.floor(t / A) + 4) % 7;
668
758
  for (let e of r) {
669
759
  if (e.days && !e.days.includes(n)) continue;
670
- let r = t + e.start * P, i = (e.end > e.start ? t : t + N) + e.end * P;
760
+ let r = t + e.start * j, i = (e.end > e.start ? t : t + A) + e.end * j;
671
761
  s.push([o(r), o(i)]);
672
762
  }
673
763
  }
@@ -690,15 +780,15 @@ function ot(e, t) {
690
780
  }
691
781
  //#endregion
692
782
  //#region src/utils/drawingOptions.ts
693
- var st = 48, ct = 2e3, lt = 1e4;
694
- function ut(e) {
783
+ var dt = 48, ft = 2e3, pt = 1e4;
784
+ function mt(e) {
695
785
  if (!Array.isArray(e)) return;
696
786
  let t = [];
697
787
  for (let n of e) {
698
- if (t.length >= st) break;
788
+ if (t.length >= dt) break;
699
789
  if (typeof n != "object" || !n) continue;
700
790
  let { value: e, visible: r, color: i } = n;
701
- if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > lt || r !== void 0 && typeof r != "boolean") continue;
791
+ if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > pt || r !== void 0 && typeof r != "boolean") continue;
702
792
  let a = {
703
793
  value: e,
704
794
  visible: r ?? !0
@@ -707,169 +797,109 @@ function ut(e) {
707
797
  }
708
798
  return t;
709
799
  }
710
- function dt(e, t) {
800
+ function ht(e, t) {
711
801
  switch (e.kind) {
712
802
  case "boolean": return typeof t == "boolean" ? t : void 0;
713
803
  case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
714
804
  case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
715
- case "levels": return ut(t);
716
- case "text": return typeof t == "string" ? t.slice(0, ct) : void 0;
805
+ case "levels": return mt(t);
806
+ case "text": return typeof t == "string" ? t.slice(0, ft) : void 0;
717
807
  }
718
808
  }
719
- function ft(e, t) {
809
+ function gt(e, t) {
720
810
  if (!e || typeof t != "object" || !t) return {};
721
811
  let n = {};
722
812
  for (let [r, i] of Object.entries(t)) {
723
813
  let t = e[r];
724
814
  if (!t) continue;
725
- let a = dt(t, i);
815
+ let a = ht(t, i);
726
816
  a !== void 0 && (n[r] = a);
727
817
  }
728
818
  return n;
729
819
  }
730
- function pt(e) {
820
+ function _t(e) {
731
821
  return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
732
822
  }
733
- function mt(e, t, n) {
823
+ function vt(e, t, n) {
734
824
  let r = e?.[n];
735
- return r ? pt((t && n in t ? dt(r, t[n]) : void 0) ?? r.default) : t?.[n];
825
+ return r ? _t((t && n in t ? ht(r, t[n]) : void 0) ?? r.default) : t?.[n];
736
826
  }
737
- function ht(e, t) {
827
+ function yt(e, t) {
738
828
  let n = {};
739
- for (let r of Object.keys(e ?? {})) n[r] = mt(e, t, r);
829
+ for (let r of Object.keys(e ?? {})) n[r] = vt(e, t, r);
740
830
  return n;
741
831
  }
742
832
  //#endregion
743
833
  //#region src/utils/drawingStyle.ts
744
- var gt = [
834
+ var bt = [
745
835
  "solid",
746
836
  "dashed",
747
837
  "dotted"
748
- ], _t = 64, vt = 2e3, yt = 20, bt = 200;
749
- function F(e, t, n) {
838
+ ], xt = 64, St = 2e3, Ct = 20, wt = 200;
839
+ function M(e, t, n) {
750
840
  return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
751
841
  }
752
- function xt(e) {
753
- return typeof e == "string" && e.length > 0 && e.length <= _t ? e : void 0;
842
+ function Tt(e) {
843
+ return typeof e == "string" && e.length > 0 && e.length <= xt ? e : void 0;
754
844
  }
755
- function St(e) {
845
+ function Et(e) {
756
846
  if (typeof e != "object" || !e) return {};
757
- let t = e, n = {}, r = xt(t.color);
847
+ let t = e, n = {}, r = Tt(t.color);
758
848
  r !== void 0 && (n.color = r);
759
- let i = F(t.lineWidth, .5, yt);
760
- i !== void 0 && (n.lineWidth = i), gt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
761
- let a = xt(t.fillColor);
849
+ let i = M(t.lineWidth, .5, Ct);
850
+ i !== void 0 && (n.lineWidth = i), bt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
851
+ let a = Tt(t.fillColor);
762
852
  a !== void 0 && (n.fillColor = a);
763
- let o = F(t.fillOpacity, 0, 1);
853
+ let o = M(t.fillOpacity, 0, 1);
764
854
  o !== void 0 && (n.fillOpacity = o);
765
- let s = F(t.fontSize, 6, bt);
766
- return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, vt)), n;
855
+ let s = M(t.fontSize, 6, wt);
856
+ return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, St)), n;
767
857
  }
768
858
  //#endregion
769
859
  //#region src/utils/chartTypeOptions.ts
770
- var I = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, L = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, R = (e) => typeof e == "object" && !!e && !Array.isArray(e);
771
- function Ct(e) {
772
- if (!R(e)) return {};
860
+ var N = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, P = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, F = (e) => typeof e == "object" && !!e && !Array.isArray(e);
861
+ function Dt(e) {
862
+ if (!F(e)) return {};
773
863
  let t = {};
774
- if (R(e.renko)) {
864
+ if (F(e.renko)) {
775
865
  let { boxSize: n, atrPeriod: r } = e.renko;
776
866
  t.renko = {
777
- ...I(n) || n === "atr" ? { boxSize: n } : {},
778
- ...L(r, 1, 500) ? { atrPeriod: r } : {}
867
+ ...N(n) || n === "atr" ? { boxSize: n } : {},
868
+ ...P(r, 1, 500) ? { atrPeriod: r } : {}
779
869
  };
780
870
  }
781
- if (R(e.lineBreak)) {
871
+ if (F(e.lineBreak)) {
782
872
  let { lines: n } = e.lineBreak;
783
- t.lineBreak = L(n, 1, 10) ? { lines: n } : {};
873
+ t.lineBreak = P(n, 1, 10) ? { lines: n } : {};
784
874
  }
785
- if (R(e.kagi)) {
875
+ if (F(e.kagi)) {
786
876
  let { reversal: n, reversalType: r } = e.kagi;
787
877
  t.kagi = {
788
- ...I(n) ? { reversal: n } : {},
878
+ ...N(n) ? { reversal: n } : {},
789
879
  ...r === "percent" || r === "price" ? { reversalType: r } : {}
790
880
  };
791
881
  }
792
- if (R(e.pointAndFigure)) {
882
+ if (F(e.pointAndFigure)) {
793
883
  let { boxSize: n, reversal: r } = e.pointAndFigure;
794
884
  t.pointAndFigure = {
795
- ...I(n) || n === "auto" ? { boxSize: n } : {},
796
- ...L(r, 1, 10) ? { reversal: r } : {}
885
+ ...N(n) || n === "auto" ? { boxSize: n } : {},
886
+ ...P(r, 1, 10) ? { reversal: r } : {}
797
887
  };
798
888
  }
799
- if (R(e.rangeBars)) {
889
+ if (F(e.rangeBars)) {
800
890
  let { range: n } = e.rangeBars;
801
- t.rangeBars = I(n) || n === "auto" ? { range: n } : {};
891
+ t.rangeBars = N(n) || n === "auto" ? { range: n } : {};
802
892
  }
803
893
  return t;
804
894
  }
805
895
  //#endregion
806
- //#region src/constants/defaults.ts
807
- var wt = {
808
- autoScale: !0,
809
- rightMargin: 5,
810
- minBarSpacing: 2,
811
- maxBarSpacing: 30,
812
- grid: {
813
- visible: !0,
814
- hLineStyle: "solid",
815
- vLineStyle: "solid"
816
- },
817
- crosshair: { mode: "magnet" }
818
- }, Tt = [
819
- "1s",
820
- "1m",
821
- "3m",
822
- "5m",
823
- "15m",
824
- "30m",
825
- "1h",
826
- "2h",
827
- "4h",
828
- "6h",
829
- "8h",
830
- "12h",
831
- "1d",
832
- "3d",
833
- "1w",
834
- "1M"
835
- ], Et = [
836
- "1m",
837
- "5m",
838
- "15m",
839
- "30m",
840
- "1h",
841
- "2h",
842
- "4h",
843
- "1d",
844
- "1w",
845
- "1M",
846
- "3M",
847
- "6M",
848
- "12M"
849
- ], Dt = [
850
- "1m",
851
- "5m",
852
- "15m",
853
- "30m",
854
- "1h",
855
- "4h",
856
- "1d",
857
- "1w",
858
- "1M"
859
- ], Ot = [
860
- "1m",
861
- "5m",
862
- "15m",
863
- "1h",
864
- "4h",
865
- "1d",
866
- "1w"
867
- ], kt = 8, At = 2, jt = 70, Mt = 30, Nt = 60, Pt = 120, z = "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif", B = {
868
- family: z,
896
+ //#region src/constants/themes.ts
897
+ var Ot = "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif", kt = {
898
+ family: Ot,
869
899
  sizeSmall: 10,
870
900
  sizeMedium: 12,
871
901
  sizeLarge: 14
872
- }, V = {
902
+ }, I = {
873
903
  amber: "#f2a93b",
874
904
  up: "#1fa874",
875
905
  down: "#e8505b",
@@ -880,37 +910,37 @@ var wt = {
880
910
  rose: "#e25592",
881
911
  neutral: "#7d8696",
882
912
  ink: "#0c1016"
883
- }, Ft = .22;
884
- function H(e) {
885
- return me(e, Ft);
886
- }
887
- var U = "#2eb88a", W = "#e85a67", It = [
888
- V.blue,
889
- V.ochre,
890
- V.violet,
891
- V.cyan,
892
- V.rose
893
- ], G = {
913
+ }, At = .22;
914
+ function L(e) {
915
+ return me(e, At);
916
+ }
917
+ var R = "#2eb88a", z = "#e85a67", jt = [
918
+ I.blue,
919
+ I.ochre,
920
+ I.violet,
921
+ I.cyan,
922
+ I.rose
923
+ ], B = {
894
924
  name: "dark",
895
- background: V.ink,
925
+ background: I.ink,
896
926
  text: "#d9dde4",
897
927
  textSecondary: "#7d8696",
898
928
  grid: "#161b23",
899
929
  crosshair: "#8a93a3",
900
- candleUp: U,
901
- candleDown: W,
902
- candleUpWick: U,
903
- candleDownWick: W,
904
- lineColor: V.amber,
930
+ candleUp: R,
931
+ candleDown: z,
932
+ candleUpWick: R,
933
+ candleDownWick: z,
934
+ lineColor: I.amber,
905
935
  areaTopColor: "rgba(242, 169, 59, 0.32)",
906
936
  areaBottomColor: "rgba(242, 169, 59, 0.0)",
907
- volumeUp: H(U),
908
- volumeDown: H(W),
937
+ volumeUp: L(R),
938
+ volumeDown: L(z),
909
939
  axisLine: "#1f2630",
910
940
  axisLabel: "#9aa3b2",
911
941
  axisLabelBackground: "#1f2630",
912
- font: B
913
- }, K = {
942
+ font: kt
943
+ }, V = {
914
944
  name: "light",
915
945
  background: "#ffffff",
916
946
  text: "#0f131a",
@@ -924,13 +954,13 @@ var U = "#2eb88a", W = "#e85a67", It = [
924
954
  lineColor: "#c77a0a",
925
955
  areaTopColor: "rgba(199, 122, 10, 0.24)",
926
956
  areaBottomColor: "rgba(199, 122, 10, 0.0)",
927
- volumeUp: H("#16a36a"),
928
- volumeDown: H("#d9414f"),
957
+ volumeUp: L("#16a36a"),
958
+ volumeDown: L("#d9414f"),
929
959
  axisLine: "#dde1e7",
930
960
  axisLabel: "#5b6472",
931
961
  axisLabelBackground: "#eef0f3",
932
- font: B
933
- }, q = {
962
+ font: kt
963
+ }, H = {
934
964
  name: "terminal",
935
965
  background: "#0E0E0E",
936
966
  text: "#C0C0C0",
@@ -955,18 +985,18 @@ var U = "#2eb88a", W = "#e85a67", It = [
955
985
  sizeMedium: 12,
956
986
  sizeLarge: 14
957
987
  }
958
- }, Lt = new Set([
959
- G.volumeUp,
960
- G.volumeDown,
961
- K.volumeUp,
962
- K.volumeDown,
963
- q.volumeUp,
964
- q.volumeDown
988
+ }, Mt = new Set([
989
+ B.volumeUp,
990
+ B.volumeDown,
991
+ V.volumeUp,
992
+ V.volumeDown,
993
+ H.volumeUp,
994
+ H.volumeDown
965
995
  ]);
966
- function Rt(e) {
996
+ function U(e) {
967
997
  let t = (e, t) => {
968
- if (!Lt.has(e)) return e;
969
- let n = H(t);
998
+ if (!Mt.has(e)) return e;
999
+ let n = L(t);
970
1000
  return n === t ? e : n;
971
1001
  };
972
1002
  return {
@@ -975,8 +1005,283 @@ function Rt(e) {
975
1005
  };
976
1006
  }
977
1007
  //#endregion
978
- //#region src/i18n/en.ts
979
- var J = {
1008
+ //#region src/utils/chartStyle.ts
1009
+ var Nt = [
1010
+ "solid",
1011
+ "dashed",
1012
+ "dotted"
1013
+ ], Pt = 20, Ft = 64, It = 2, Lt = [
1014
+ /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
1015
+ /^[a-z]{3,30}$/i,
1016
+ /^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
1017
+ ];
1018
+ function W(e) {
1019
+ return typeof e == "string" && e.length <= Ft && Lt.some((t) => t.test(e.trim()));
1020
+ }
1021
+ function Rt(e, t) {
1022
+ switch (e) {
1023
+ case "color": return W(t);
1024
+ case "lineStyle": return Nt.includes(t);
1025
+ case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= Pt;
1026
+ case "boolean": return typeof t == "boolean";
1027
+ }
1028
+ }
1029
+ function zt(e) {
1030
+ return Object.prototype.hasOwnProperty.call(t, e);
1031
+ }
1032
+ function Bt(e) {
1033
+ let n = {}, r = [];
1034
+ if (typeof e != "object" || !e || Array.isArray(e)) return {
1035
+ overrides: {},
1036
+ rejected: r
1037
+ };
1038
+ for (let [i, a] of Object.entries(e)) zt(i) ? a === null ? n[i] = null : Rt(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
1039
+ return {
1040
+ overrides: n,
1041
+ rejected: r
1042
+ };
1043
+ }
1044
+ function Vt(e) {
1045
+ if (typeof e != "object" || !e || Array.isArray(e)) return null;
1046
+ let { background: t, separator: n } = e, r = {
1047
+ ...W(t) ? { background: t } : {},
1048
+ ...W(n) ? { separator: n } : {}
1049
+ };
1050
+ return Object.keys(r).length > 0 ? r : null;
1051
+ }
1052
+ var Ht = /^[A-Za-z0-9_]{1,32}$/;
1053
+ function Ut(e) {
1054
+ if (typeof e != "object" || !e || Array.isArray(e)) return;
1055
+ let t = {};
1056
+ for (let [n, r] of Object.entries(e)) {
1057
+ if (!Ht.test(n) || typeof r != "object" || !r) continue;
1058
+ let { lineStyle: e, visible: i } = r, a = {
1059
+ ...Nt.includes(e) ? { lineStyle: e } : {},
1060
+ ...typeof i == "boolean" ? { visible: i } : {}
1061
+ };
1062
+ Object.keys(a).length > 0 && (t[n] = a);
1063
+ }
1064
+ return Object.keys(t).length > 0 ? t : void 0;
1065
+ }
1066
+ function Wt(e, t, n = 1) {
1067
+ return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
1068
+ }
1069
+ function Gt(e, t, n) {
1070
+ let r = (e) => t(`series.${n}.${e}`), i = r("upColor") ?? t("series.candlestick.upColor"), a = r("downColor") ?? t("series.candlestick.downColor"), o = i ?? e.candleUp, s = a ?? e.candleDown;
1071
+ return {
1072
+ up: o,
1073
+ down: s,
1074
+ wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
1075
+ wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
1076
+ line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
1077
+ lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? It,
1078
+ top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
1079
+ bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
1080
+ };
1081
+ }
1082
+ function G(e, t, n) {
1083
+ return {
1084
+ visible: e(`${t}.visible`) ?? n.visible,
1085
+ color: e(`${t}.color`) ?? n.color,
1086
+ style: e(`${t}.style`) ?? n.style,
1087
+ width: e(`${t}.width`) ?? n.width
1088
+ };
1089
+ }
1090
+ function Kt(e, t, n) {
1091
+ let { style: r, ...i } = e, a = n, o = (e) => a[e], s = Gt(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = {
1092
+ panes: {
1093
+ background: l("panes.background", c),
1094
+ separator: l("panes.separatorColor", i.axisLine),
1095
+ title: l("panes.titleColor", i.textSecondary)
1096
+ },
1097
+ grid: {
1098
+ horizontal: G(o, "grid.horizontal", {
1099
+ visible: !0,
1100
+ color: i.grid,
1101
+ style: "solid",
1102
+ width: 1
1103
+ }),
1104
+ vertical: G(o, "grid.vertical", {
1105
+ visible: !0,
1106
+ color: i.grid,
1107
+ style: "solid",
1108
+ width: 1
1109
+ })
1110
+ },
1111
+ crosshair: {
1112
+ horizontal: G(o, "crosshair.horizontal", {
1113
+ visible: !0,
1114
+ color: i.crosshair,
1115
+ style: "dashed",
1116
+ width: 1
1117
+ }),
1118
+ vertical: G(o, "crosshair.vertical", {
1119
+ visible: !0,
1120
+ color: i.crosshair,
1121
+ style: "dashed",
1122
+ width: 1
1123
+ }),
1124
+ labelBackground: l("crosshair.labelBackground", i.text),
1125
+ labelText: l("crosshair.labelTextColor", c)
1126
+ },
1127
+ axis: {
1128
+ price: {
1129
+ line: l("axis.price.lineColor", i.axisLine),
1130
+ text: l("axis.price.textColor", i.axisLabel)
1131
+ },
1132
+ time: {
1133
+ line: l("axis.time.lineColor", i.axisLine),
1134
+ text: l("axis.time.textColor", i.axisLabel)
1135
+ }
1136
+ },
1137
+ legend: {
1138
+ text: l("legend.textColor", i.text),
1139
+ label: l("legend.labelColor", i.textSecondary)
1140
+ },
1141
+ watermark: { color: o("watermark.color") ?? null },
1142
+ lastPrice: {
1143
+ visible: o("lastPrice.visible") ?? !0,
1144
+ up: l("lastPrice.upColor", s.up),
1145
+ down: l("lastPrice.downColor", s.down),
1146
+ style: o("lastPrice.style") ?? "dashed",
1147
+ width: o("lastPrice.width") ?? 1
1148
+ },
1149
+ sessionBreaks: {
1150
+ color: o("sessionBreaks.color") ?? null,
1151
+ style: o("sessionBreaks.style") ?? null,
1152
+ width: o("sessionBreaks.width") ?? null
1153
+ },
1154
+ highLow: { color: o("highLow.color") ?? null },
1155
+ series: { lineWidth: s.lineWidth }
1156
+ };
1157
+ return {
1158
+ ...i,
1159
+ background: c,
1160
+ candleUp: s.up,
1161
+ candleDown: s.down,
1162
+ candleUpWick: s.wickUp,
1163
+ candleDownWick: s.wickDown,
1164
+ lineColor: s.line,
1165
+ areaTopColor: s.top,
1166
+ areaBottomColor: s.bottom,
1167
+ volumeUp: l("volume.upColor", i.volumeUp),
1168
+ volumeDown: l("volume.downColor", i.volumeDown),
1169
+ style: u
1170
+ };
1171
+ }
1172
+ var qt = {
1173
+ "background.color": (e) => e.background,
1174
+ "panes.background": (e, t) => t.panes.background,
1175
+ "panes.separatorColor": (e, t) => t.panes.separator,
1176
+ "panes.titleColor": (e, t) => t.panes.title,
1177
+ "crosshair.labelBackground": (e, t) => t.crosshair.labelBackground,
1178
+ "crosshair.labelTextColor": (e, t) => t.crosshair.labelText,
1179
+ "axis.price.lineColor": (e, t) => t.axis.price.line,
1180
+ "axis.price.textColor": (e, t) => t.axis.price.text,
1181
+ "axis.time.lineColor": (e, t) => t.axis.time.line,
1182
+ "axis.time.textColor": (e, t) => t.axis.time.text,
1183
+ "legend.textColor": (e, t) => t.legend.text,
1184
+ "legend.labelColor": (e, t) => t.legend.label,
1185
+ "watermark.color": (e, t) => t.watermark.color,
1186
+ "lastPrice.visible": (e, t) => t.lastPrice.visible,
1187
+ "lastPrice.upColor": (e, t) => t.lastPrice.up,
1188
+ "lastPrice.downColor": (e, t) => t.lastPrice.down,
1189
+ "lastPrice.style": (e, t) => t.lastPrice.style,
1190
+ "lastPrice.width": (e, t) => t.lastPrice.width,
1191
+ "volume.upColor": (e) => U(e).up,
1192
+ "volume.downColor": (e) => U(e).down,
1193
+ "sessionBreaks.color": (e, t) => t.sessionBreaks.color,
1194
+ "sessionBreaks.style": (e, t) => t.sessionBreaks.style,
1195
+ "sessionBreaks.width": (e, t) => t.sessionBreaks.width,
1196
+ "highLow.color": (e, t) => t.highLow.color
1197
+ }, Jt = {
1198
+ visible: "visible",
1199
+ color: "color",
1200
+ style: "style",
1201
+ width: "width"
1202
+ };
1203
+ function Yt(e, t, n, r = "candlestick") {
1204
+ let i = n.split(".");
1205
+ if (i[0] === "series") {
1206
+ let n = Gt(e, (e) => t[e], i[1]);
1207
+ switch (i[2]) {
1208
+ case "upColor": return n.up;
1209
+ case "downColor": return n.down;
1210
+ case "wickUpColor": return n.wickUp;
1211
+ case "wickDownColor": return n.wickDown;
1212
+ case "color":
1213
+ case "lineColor": return n.line;
1214
+ case "lineWidth": return n.lineWidth;
1215
+ case "topColor": return n.top;
1216
+ case "bottomColor": return n.bottom;
1217
+ }
1218
+ }
1219
+ let a = Kt(e, r, t), o = a.style;
1220
+ return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][Jt[i[2]]] : qt[n]?.(a, o) ?? null;
1221
+ }
1222
+ //#endregion
1223
+ //#region src/constants/defaults.ts
1224
+ var Xt = {
1225
+ autoScale: !0,
1226
+ rightMargin: 5,
1227
+ minBarSpacing: 2,
1228
+ maxBarSpacing: 30,
1229
+ grid: {
1230
+ visible: !0,
1231
+ hLineStyle: "solid",
1232
+ vLineStyle: "solid"
1233
+ },
1234
+ crosshair: { mode: "magnet" }
1235
+ }, Zt = [
1236
+ "1s",
1237
+ "1m",
1238
+ "3m",
1239
+ "5m",
1240
+ "15m",
1241
+ "30m",
1242
+ "1h",
1243
+ "2h",
1244
+ "4h",
1245
+ "6h",
1246
+ "8h",
1247
+ "12h",
1248
+ "1d",
1249
+ "3d",
1250
+ "1w",
1251
+ "1M"
1252
+ ], Qt = [
1253
+ "1m",
1254
+ "5m",
1255
+ "15m",
1256
+ "30m",
1257
+ "1h",
1258
+ "2h",
1259
+ "4h",
1260
+ "1d",
1261
+ "1w",
1262
+ "1M",
1263
+ "3M",
1264
+ "6M",
1265
+ "12M"
1266
+ ], $t = [
1267
+ "1m",
1268
+ "5m",
1269
+ "15m",
1270
+ "30m",
1271
+ "1h",
1272
+ "4h",
1273
+ "1d",
1274
+ "1w",
1275
+ "1M"
1276
+ ], en = [
1277
+ "1m",
1278
+ "5m",
1279
+ "15m",
1280
+ "1h",
1281
+ "4h",
1282
+ "1d",
1283
+ "1w"
1284
+ ], tn = 8, nn = 2, rn = 70, an = 30, on = 60, sn = 120, K = {
980
1285
  candlestick: "Candlestick",
981
1286
  line: "Line",
982
1287
  area: "Area",
@@ -1079,7 +1384,7 @@ var J = {
1079
1384
  error: "Error",
1080
1385
  numberDecimalSeparator: ".",
1081
1386
  numberGroupSeparator: ","
1082
- }, zt = {
1387
+ }, cn = {
1083
1388
  candlestick: "Nến",
1084
1389
  line: "Đường",
1085
1390
  area: "Vùng",
@@ -1182,43 +1487,43 @@ var J = {
1182
1487
  error: "Lỗi",
1183
1488
  numberDecimalSeparator: ",",
1184
1489
  numberGroupSeparator: "."
1185
- }, Y = new Map([["en", J], ["vi", zt]]), X = "en", Bt = J;
1186
- function Vt(e) {
1187
- X = e, Bt = Y.get(e) ?? J;
1490
+ }, q = new Map([["en", K], ["vi", cn]]), J = "en", Y = K;
1491
+ function ln(e) {
1492
+ J = e, Y = q.get(e) ?? K;
1188
1493
  }
1189
- function Ht() {
1190
- return X;
1494
+ function un() {
1495
+ return J;
1191
1496
  }
1192
- function Ut(e) {
1193
- return Bt[e] ?? J[e] ?? e;
1497
+ function dn(e) {
1498
+ return Y[e] ?? K[e] ?? e;
1194
1499
  }
1195
- function Wt(e, t) {
1196
- Y.set(e, t);
1500
+ function fn(e, t) {
1501
+ q.set(e, t);
1197
1502
  }
1198
- function Gt(e) {
1199
- return Y.get(e ?? X) ?? J;
1503
+ function pn(e) {
1504
+ return q.get(e ?? J) ?? K;
1200
1505
  }
1201
- function Z(e, t = 2, n) {
1202
- let r = Y.get(n ?? X) ?? J, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
1506
+ function X(e, t = 2, n) {
1507
+ let r = q.get(n ?? J) ?? K, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
1203
1508
  for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
1204
1509
  return c && (u = "-" + u), s ? u + i + s : u;
1205
1510
  }
1206
- function Kt(e) {
1207
- return Z(e, 0, "vi");
1511
+ function mn(e) {
1512
+ return X(e, 0, "vi");
1208
1513
  }
1209
- function qt(e, t) {
1210
- return e >= 1e9 ? Z(e / 1e9, 2, t ?? X) + "B" : e >= 1e6 ? Z(e / 1e6, 2, t ?? X) + "M" : e >= 1e3 ? Z(e / 1e3, 2, t ?? X) + "K" : Z(e, 0, t ?? X);
1514
+ function hn(e, t) {
1515
+ return e >= 1e9 ? X(e / 1e9, 2, t ?? J) + "B" : e >= 1e6 ? X(e / 1e6, 2, t ?? J) + "M" : e >= 1e3 ? X(e / 1e3, 2, t ?? J) + "K" : X(e, 0, t ?? J);
1211
1516
  }
1212
1517
  //#endregion
1213
1518
  //#region src/market/presets.ts
1214
- var Q = {
1519
+ var Z = {
1215
1520
  up: "#FF0000",
1216
1521
  down: "#0000FF",
1217
1522
  unchanged: "#FFD700",
1218
1523
  ceiling: "#FF00FF",
1219
1524
  floor: "#00FFFF",
1220
1525
  reference: "#FFD700"
1221
- }, Jt = [
1526
+ }, Q = [
1222
1527
  {
1223
1528
  name: "ATO",
1224
1529
  startTime: "09:00",
@@ -1274,7 +1579,7 @@ var Q = {
1274
1579
  endTime: "14:45",
1275
1580
  type: "preClose"
1276
1581
  }
1277
- ], Yt = {
1582
+ ], gn = {
1278
1583
  type: "stock",
1279
1584
  exchange: "HOSE",
1280
1585
  currency: "VND",
@@ -1286,9 +1591,9 @@ var Q = {
1286
1591
  ceilingPercent: 7,
1287
1592
  floorPercent: 7
1288
1593
  },
1289
- sessions: Jt,
1290
- colorScheme: Q
1291
- }, Xt = {
1594
+ sessions: Q,
1595
+ colorScheme: Z
1596
+ }, _n = {
1292
1597
  type: "stock",
1293
1598
  exchange: "HNX",
1294
1599
  currency: "VND",
@@ -1301,8 +1606,8 @@ var Q = {
1301
1606
  floorPercent: 10
1302
1607
  },
1303
1608
  sessions: $,
1304
- colorScheme: Q
1305
- }, Zt = {
1609
+ colorScheme: Z
1610
+ }, vn = {
1306
1611
  type: "stock",
1307
1612
  exchange: "UPCOM",
1308
1613
  currency: "VND",
@@ -1315,13 +1620,13 @@ var Q = {
1315
1620
  floorPercent: 15
1316
1621
  },
1317
1622
  sessions: $,
1318
- colorScheme: Q
1319
- }, Qt = {
1623
+ colorScheme: Z
1624
+ }, yn = {
1320
1625
  type: "crypto",
1321
1626
  currency: "USDT",
1322
1627
  pricePrecision: 2,
1323
1628
  priceLimits: { enabled: !1 }
1324
- }, $t = {
1629
+ }, bn = {
1325
1630
  type: "stock",
1326
1631
  exchange: "NYSE",
1327
1632
  currency: "USD",
@@ -1349,18 +1654,18 @@ var Q = {
1349
1654
  }
1350
1655
  ]
1351
1656
  };
1352
- function en(e) {
1657
+ function xn(e) {
1353
1658
  return {
1354
1659
  ...e,
1355
- candleUp: Q.up,
1356
- candleDown: Q.down,
1357
- candleUpWick: Q.up,
1358
- candleDownWick: Q.down,
1660
+ candleUp: Z.up,
1661
+ candleDown: Z.down,
1662
+ candleUpWick: Z.up,
1663
+ candleDownWick: Z.down,
1359
1664
  volumeUp: "rgba(255, 0, 0, 0.3)",
1360
1665
  volumeDown: "rgba(0, 0, 255, 0.3)"
1361
1666
  };
1362
1667
  }
1363
- function tn(e, t) {
1668
+ function Sn(e, t) {
1364
1669
  if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
1365
1670
  let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100;
1366
1671
  return {
@@ -1369,12 +1674,12 @@ function tn(e, t) {
1369
1674
  reference: e
1370
1675
  };
1371
1676
  }
1372
- function nn(e) {
1677
+ function Cn(e) {
1373
1678
  let t = /* @__PURE__ */ new Date(), n = `${String(t.getHours()).padStart(2, "0")}:${String(t.getMinutes()).padStart(2, "0")}`;
1374
1679
  for (let t of e) if (n >= t.startTime && n < t.endTime) return t;
1375
1680
  return null;
1376
1681
  }
1377
1682
  //#endregion
1378
- export { q as DARK_TERMINAL, G as DARK_THEME, At as DEFAULT_BAR_SPACING, kt as DEFAULT_BAR_WIDTH, wt as DEFAULT_CHART_OPTIONS, t as DEFAULT_DRAWING_STYLE, z as DEFAULT_FONT_FAMILY, Pt as DEFAULT_PANEL_HEIGHT, a as DEFAULT_RECONNECT, r as DEFAULT_SIGNAL_STYLE, o as DEFAULT_STREAM_CONFIG, Ot as DEFAULT_TIMEFRAME_FAVORITES, i as DEFAULT_TRADE_ZONE_STYLE, n as DEFAULT_TRADING_CONFIG, $ as HNX_SESSIONS, Jt as HOSE_SESSIONS, K as LIGHT_THEME, e as LayerType, Qt as MARKET_CRYPTO, Xt as MARKET_HNX, Yt as MARKET_HOSE, $t as MARKET_NYSE, Zt as MARKET_UPCOM, Nt as MIN_PANEL_HEIGHT, jt as PRICE_AXIS_WIDTH, Ke as PRICE_SOURCES, V as TC_PALETTE, It as TC_SERIES_COLORS, Tt as TIMEFRAMES_CRYPTO, Dt as TIMEFRAMES_FOREX, Et as TIMEFRAMES_STOCK, Mt as TIME_AXIS_HEIGHT, Q as VN_COLORS, Ft as VOLUME_ALPHA, je as alignToTimeframe, ze as autoPricePrecision, Fe as barsAreDaily, ne as clamp, tn as computePriceLimits, de as computePriceRange, oe as computeTickStep, en as createVNTheme, Ge as detectPrecision, mt as drawingOption, J as en, ue as findBarIndex, Ve as formatFraction, Z as formatNumber, A as formatPrice, Be as formatPriceScaleLabel, Ae as formatTimestamp, Kt as formatVND, We as formatVolume, qt as formatVolumeLoc, He as fractionTick, nn as getCurrentSession, Ht as getLocale, Gt as getLocaleStrings, pe as hexToRgba, Xe as indicatorSource, ie as inverseLerp, Ne as isDateOnly, qe as isPriceSource, ke as isTimeFrame, xe as isValidTimeZone, re as lerp, he as lerpColor, ot as marketStatus, fe as mergeBar, p as niceNumber, ce as normalizeBar, se as normalizeBarTime, S as offsetAt, Ze as parseIndicatorSource, T as parseTimeframe, tt as pickBaseTimeframe, Ue as priceFormatterFor, rt as rankSymbols, Ct as readChartTypeOptions, te as readNews, c as readQuote, Wt as registerLocale, $e as resampleBars, ht as resolveDrawingOptions, Rt as resolveVolumeColors, ae as roundToStep, ft as sanitizeDrawingOptions, St as sanitizeDrawingStyle, M as sessionMinute, Vt as setLocale, le as sliceVisibleData, Je as sourcePrice, it as stepDecimals, Ut as t, Oe as tickBarCount, Me as timeParts, O as timeframeBucketStart, E as timeframeToMs, Ie as tzLabel, zt as vi, H as volumeColor, Ce as wallToUtc, me as withAlpha, b as zoneOffsetMinutes, we as zonedDateFormatter };
1683
+ export { t as CHART_STYLE_KEYS, H as DARK_TERMINAL, B as DARK_THEME, nn as DEFAULT_BAR_SPACING, tn as DEFAULT_BAR_WIDTH, Xt as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, Ot as DEFAULT_FONT_FAMILY, sn as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, en as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, $ as HNX_SESSIONS, Q as HOSE_SESSIONS, V as LIGHT_THEME, e as LayerType, yn as MARKET_CRYPTO, _n as MARKET_HNX, gn as MARKET_HOSE, bn as MARKET_NYSE, vn as MARKET_UPCOM, on as MIN_PANEL_HEIGHT, rn as PRICE_AXIS_WIDTH, Xe as PRICE_SOURCES, I as TC_PALETTE, jt as TC_SERIES_COLORS, Zt as TIMEFRAMES_CRYPTO, $t as TIMEFRAMES_FOREX, Qt as TIMEFRAMES_STOCK, an as TIME_AXIS_HEIGHT, Z as VN_COLORS, At as VOLUME_ALPHA, Ne as alignToTimeframe, Ue as autoPricePrecision, Le as barsAreDaily, Yt as chartStyleValue, ne as clamp, Sn as computePriceLimits, de as computePriceRange, oe as computeTickStep, xn as createVNTheme, Ye as detectPrecision, vt as drawingOption, K as en, ue as findBarIndex, Ge as formatFraction, X as formatNumber, D as formatPrice, We as formatPriceScaleLabel, Me as formatTimestamp, mn as formatVND, Je as formatVolume, hn as formatVolumeLoc, Ke as fractionTick, Cn as getCurrentSession, un as getLocale, pn as getLocaleStrings, pe as hexToRgba, et as indicatorSource, ie as inverseLerp, Fe as isDateOnly, Ze as isPriceSource, je as isTimeFrame, Se as isValidTimeZone, re as lerp, he as lerpColor, Wt as lineDash, ut as marketStatus, fe as mergeBar, m as niceNumber, ce as normalizeBar, se as normalizeBarTime, S as offsetAt, tt as parseIndicatorSource, w as parseTimeframe, at as pickBaseTimeframe, qe as priceFormatterFor, st as rankSymbols, Bt as readChartStyleOverrides, Dt as readChartTypeOptions, Ut as readIndicatorPlotStyles, te as readNews, Vt as readPaneStyle, l as readQuote, fn as registerLocale, rt as resampleBars, Kt as resolveChartTheme, yt as resolveDrawingOptions, U as resolveVolumeColors, ae as roundToStep, gt as sanitizeDrawingOptions, Et as sanitizeDrawingStyle, k as sessionMinute, ln as setLocale, le as sliceVisibleData, Qe as sourcePrice, ct as stepDecimals, dn as t, Ae as tickBarCount, Pe as timeParts, Be as timeframeBucketStart, T as timeframeToMs, Re as tzLabel, cn as vi, L as volumeColor, we as wallToUtc, me as withAlpha, b as zoneOffsetMinutes, Ee as zonedDateFormatter };
1379
1684
 
1380
1685
  //# sourceMappingURL=index.js.map