@tradecanvas/commons 1.46.0 → 1.48.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
@@ -360,7 +360,7 @@ function ve(e, t, n) {
360
360
  }
361
361
  //#endregion
362
362
  //#region src/utils/timezone.ts
363
- var g = 6e4, _ = 1440 * g, v = 15 * g, ye = 8192, y = 7 * _, be = 4096, xe = new Set([
363
+ var g = 6e4, ye = 1440 * g, _ = 15 * g, be = 8192, xe = 7 * ye, Se = 4096, Ce = new Set([
364
364
  "UTC",
365
365
  "Etc/UTC",
366
366
  "GMT",
@@ -371,9 +371,9 @@ var g = 6e4, _ = 1440 * g, v = 15 * g, ye = 8192, y = 7 * _, be = 4096, xe = new
371
371
  "Etc/Universal",
372
372
  "Zulu",
373
373
  "Etc/Zulu"
374
- ]), Se = /* @__PURE__ */ new Map(), b = /* @__PURE__ */ new Map(), Ce = /* @__PURE__ */ new Map();
375
- function we(e) {
376
- let t = Se.get(e);
374
+ ]), we = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map(), Te = /* @__PURE__ */ new Map();
375
+ function Ee(e) {
376
+ let t = we.get(e);
377
377
  return t || (t = new Intl.DateTimeFormat("en-US", {
378
378
  timeZone: e,
379
379
  hourCycle: "h23",
@@ -383,34 +383,34 @@ function we(e) {
383
383
  hour: "numeric",
384
384
  minute: "numeric",
385
385
  second: "numeric"
386
- }), Se.set(e, t)), t;
386
+ }), we.set(e, t)), t;
387
387
  }
388
- function x(e) {
388
+ function y(e) {
389
389
  if (!e) return !1;
390
390
  try {
391
- return we(e), !0;
391
+ return Ee(e), !0;
392
392
  } catch {
393
393
  return !1;
394
394
  }
395
395
  }
396
- function S(e, t) {
397
- if (!Number.isFinite(t) || xe.has(e)) return 0;
398
- let n = Ce.get(e);
399
- n || (n = /* @__PURE__ */ new Map(), Ce.set(e, n));
400
- let r = Math.floor(t / y), i = n.get(r);
401
- return i || (i = Te(e, r * y), n.size >= be && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
402
- }
403
- function Te(e, t) {
404
- let n = C(e, t), r = t + y - v, i = C(e, r);
396
+ function b(e, t) {
397
+ if (!Number.isFinite(t) || Ce.has(e)) return 0;
398
+ let n = Te.get(e);
399
+ n || (n = /* @__PURE__ */ new Map(), Te.set(e, n));
400
+ let r = Math.floor(t / xe), i = n.get(r);
401
+ return i || (i = De(e, r * xe), n.size >= Se && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
402
+ }
403
+ function De(e, t) {
404
+ let n = x(e, t), r = t + xe - _, i = x(e, r);
405
405
  if (i === n) return {
406
406
  before: n,
407
407
  change: Infinity,
408
408
  after: i
409
409
  };
410
410
  let a = t;
411
- for (; r - a > v;) {
412
- let t = a + Math.floor((r - a) / v / 2) * v;
413
- C(e, t) === n ? a = t : r = t;
411
+ for (; r - a > _;) {
412
+ let t = a + Math.floor((r - a) / _ / 2) * _;
413
+ x(e, t) === n ? a = t : r = t;
414
414
  }
415
415
  return {
416
416
  before: n,
@@ -418,11 +418,11 @@ function Te(e, t) {
418
418
  after: i
419
419
  };
420
420
  }
421
- function C(e, t) {
422
- let n = Math.floor(t / v), r = `${e}|${n}`, i = b.get(r);
421
+ function x(e, t) {
422
+ let n = Math.floor(t / _), r = `${e}|${n}`, i = v.get(r);
423
423
  if (i !== void 0) return i;
424
- let a = n * v, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
425
- for (let t of we(e).formatToParts(new Date(a))) {
424
+ let a = n * _, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
425
+ for (let t of Ee(e).formatToParts(new Date(a))) {
426
426
  let e = Number(t.value);
427
427
  switch (t.type) {
428
428
  case "year":
@@ -446,20 +446,20 @@ function C(e, t) {
446
446
  }
447
447
  }
448
448
  let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / g);
449
- return b.size >= ye && b.clear(), b.set(r, f), f;
449
+ return v.size >= be && v.clear(), v.set(r, f), f;
450
450
  }
451
- function w(e, t) {
452
- return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : S(e, t);
451
+ function S(e, t) {
452
+ return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : b(e, t);
453
453
  }
454
- function Ee(e, t) {
455
- let n = e - w(t, e - _) * g;
456
- if (n + w(t, n) * g === e) return n;
457
- let r = e - w(t, e + _) * g;
458
- return r + w(t, r) * g === e ? r : n;
454
+ function Oe(e, t) {
455
+ let n = e - S(t, e - ye) * g;
456
+ if (n + S(t, n) * g === e) return n;
457
+ let r = e - S(t, e + ye) * g;
458
+ return r + S(t, r) * g === e ? r : n;
459
459
  }
460
- var De = /* @__PURE__ */ new Map();
461
- function Oe(e, t, n) {
462
- let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = De.get(r);
460
+ var ke = /* @__PURE__ */ new Map();
461
+ function Ae(e, t, n) {
462
+ let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = ke.get(r);
463
463
  if (i) return i;
464
464
  let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
465
465
  try {
@@ -474,11 +474,11 @@ function Oe(e, t, n) {
474
474
  });
475
475
  }
476
476
  let s = typeof n == "number" ? n * g : 0;
477
- return i = (e) => o.format(new Date(e + s)), De.set(r, i), i;
477
+ return i = (e) => o.format(new Date(e + s)), ke.set(r, i), i;
478
478
  }
479
479
  //#endregion
480
480
  //#region src/utils/time.ts
481
- var ke = {
481
+ var je = {
482
482
  "1s": 1e3,
483
483
  "5s": 5e3,
484
484
  "15s": 15e3,
@@ -505,16 +505,16 @@ var ke = {
505
505
  "3M": 7776e6,
506
506
  "6M": 15552e6,
507
507
  "12M": 31536e6
508
- }, Ae = {
508
+ }, C = {
509
509
  s: 1e3,
510
510
  m: 6e4,
511
511
  h: 36e5,
512
512
  d: 864e5,
513
513
  w: 6048e5,
514
514
  M: 2592e6
515
- }, je = /^([1-9]\d*)([smhdwM])$/;
516
- function T(e) {
517
- let t = je.exec(e);
515
+ }, Me = /^([1-9]\d*)([smhdwM])$/;
516
+ function w(e) {
517
+ let t = Me.exec(e);
518
518
  if (!t) return null;
519
519
  let n = Number(t[1]);
520
520
  return Number.isSafeInteger(n) ? {
@@ -522,24 +522,24 @@ function T(e) {
522
522
  unit: t[2]
523
523
  } : null;
524
524
  }
525
- var Me = 1e6;
526
- function Ne(e) {
525
+ var Ne = 1e6;
526
+ function Pe(e) {
527
527
  let t = /^([1-9]\d*)T$/.exec(e);
528
528
  if (!t) return null;
529
529
  let n = Number(t[1]);
530
- return Number.isSafeInteger(n) && n <= Me ? n : null;
530
+ return Number.isSafeInteger(n) && n <= Ne ? n : null;
531
531
  }
532
- function Pe(e) {
533
- return T(e) !== null;
532
+ function Fe(e) {
533
+ return w(e) !== null;
534
534
  }
535
- function E(e) {
536
- let t = ke[e];
535
+ function T(e) {
536
+ let t = je[e];
537
537
  if (t !== void 0) return t;
538
- let n = T(e);
539
- return n ? n.count * Ae[n.unit] : NaN;
538
+ let n = w(e);
539
+ return n ? n.count * C[n.unit] : NaN;
540
540
  }
541
- function Fe(e, t) {
542
- let n = new Date(e), r = E(t);
541
+ function Ie(e, t) {
542
+ let n = new Date(e), r = T(t);
543
543
  return r >= 864e5 ? n.toLocaleDateString(void 0, {
544
544
  month: "short",
545
545
  day: "numeric"
@@ -552,11 +552,11 @@ function Fe(e, t) {
552
552
  second: "2-digit"
553
553
  });
554
554
  }
555
- function Ie(e, t) {
556
- let n = E(t);
555
+ function Le(e, t) {
556
+ let n = T(t);
557
557
  return Math.floor(e / n) * n;
558
558
  }
559
- function Le(e, t) {
559
+ function Re(e, t) {
560
560
  if (t === null) {
561
561
  let t = new Date(e);
562
562
  return {
@@ -567,7 +567,7 @@ function Le(e, t) {
567
567
  minutes: t.getMinutes()
568
568
  };
569
569
  }
570
- let n = new Date(e + w(t, e) * 6e4);
570
+ let n = new Date(e + S(t, e) * 6e4);
571
571
  return {
572
572
  year: n.getUTCFullYear(),
573
573
  month: n.getUTCMonth() + 1,
@@ -576,11 +576,11 @@ function Le(e, t) {
576
576
  minutes: n.getUTCMinutes()
577
577
  };
578
578
  }
579
- function Re(e) {
579
+ function ze(e) {
580
580
  return e.hours === 0 && e.minutes === 0;
581
581
  }
582
- var ze = 20 * 36e5;
583
- function Be(e) {
582
+ var Be = 20 * 36e5;
583
+ function Ve(e) {
584
584
  let t = Math.min(e.length, 64);
585
585
  if (t < 2) return;
586
586
  let n = ce(e), r = Infinity;
@@ -588,81 +588,81 @@ function Be(e) {
588
588
  let t = Math.abs(e[i].time - e[i - 1].time) * n;
589
589
  t > 0 && t < r && (r = t);
590
590
  }
591
- return r === Infinity ? void 0 : r >= ze;
591
+ return r === Infinity ? void 0 : r >= Be;
592
592
  }
593
- function Ve(e, t = Date.now()) {
594
- let n = w(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
593
+ function He(e, t = Date.now()) {
594
+ let n = S(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
595
595
  return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
596
596
  }
597
- var He = Date.UTC(1970, 0, 5);
598
- function Ue(e, t, n = 1) {
599
- let { count: r, unit: i } = T(t) ?? {
597
+ var Ue = Date.UTC(1970, 0, 5);
598
+ function We(e, t, n = 1) {
599
+ let { count: r, unit: i } = w(t) ?? {
600
600
  count: 1,
601
601
  unit: "m"
602
602
  };
603
603
  if (i === "s" || i === "m" || i === "h" || i === "d") {
604
- let t = r * Ae[i];
604
+ let t = r * C[i];
605
605
  return Math.floor(e / t) * t;
606
606
  }
607
607
  let a = new Date(e);
608
608
  if (i === "w") {
609
- let e = Ae.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
609
+ let e = C.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
610
610
  if (r <= 1) return i;
611
- let o = Math.floor((i - He) / (7 * e));
612
- return He + Math.floor(o / r) * r * 7 * e;
611
+ let o = Math.floor((i - Ue) / (7 * e));
612
+ return Ue + Math.floor(o / r) * r * 7 * e;
613
613
  }
614
614
  let o = a.getUTCFullYear() * 12 + a.getUTCMonth(), s = Math.floor(o / r) * r;
615
615
  return Date.UTC(Math.floor(s / 12), s % 12, 1);
616
616
  }
617
617
  //#endregion
618
618
  //#region src/utils/precision.ts
619
- var We = 64, D = /* @__PURE__ */ new Map();
620
- function Ge(e, t) {
621
- let n = `${e}|${t}`, r = D.get(n);
622
- return r || (D.size >= We && D.clear(), r = new Intl.NumberFormat(e, {
619
+ var Ge = 64, E = /* @__PURE__ */ new Map();
620
+ function Ke(e, t) {
621
+ let n = `${e}|${t}`, r = E.get(n);
622
+ return r || (E.size >= Ge && E.clear(), r = new Intl.NumberFormat(e, {
623
623
  minimumFractionDigits: t,
624
624
  maximumFractionDigits: t
625
- }), D.set(n, r)), r;
625
+ }), E.set(n, r)), r;
626
626
  }
627
- function Ke(e, t, n) {
628
- return t.formatPrice ? t.formatPrice(e) : O(e, n ?? qe(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
627
+ function qe(e, t, n) {
628
+ return t.formatPrice ? t.formatPrice(e) : D(e, n ?? Je(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
629
629
  }
630
- function O(e, t = 2, n = "en-US") {
631
- return Ge(n, t).format(e);
630
+ function D(e, t = 2, n = "en-US") {
631
+ return Ke(n, t).format(e);
632
632
  }
633
- function qe(e, t) {
633
+ function Je(e, t) {
634
634
  if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
635
635
  let n = oe(e, t, 8);
636
636
  return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
637
637
  }
638
- function Je(e, t, n, r = 2, i = "en-US") {
638
+ function Ye(e, t, n, r = 2, i = "en-US") {
639
639
  if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
640
640
  if (t === "percentage") {
641
641
  let t = (e / n - 1) * 100;
642
642
  return `${t > 0 ? "+" : ""}${t.toFixed(2)}%`;
643
643
  }
644
- return O(e / n * 100, 2, i);
644
+ return D(e / n * 100, 2, i);
645
645
  }
646
- return O(e, r, i);
646
+ return D(e, r, i);
647
647
  }
648
- function Ye(e, t, n = 1) {
648
+ function Xe(e, t, n = 1) {
649
649
  let r = Number.isInteger(n) && n > 1 ? n : 1;
650
650
  if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
651
651
  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)) : "";
652
652
  return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
653
653
  }
654
- function Xe(e) {
654
+ function Ze(e) {
655
655
  if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
656
656
  let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
657
657
  return 1 / (e.denominator * t);
658
658
  }
659
- function Ze(e) {
660
- return e ? typeof e == "function" ? e : Xe(e) === null ? null : (t) => Ye(t, e.denominator, e.subDenominator) : null;
661
- }
662
659
  function Qe(e) {
663
- 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);
660
+ return e ? typeof e == "function" ? e : Ze(e) === null ? null : (t) => Xe(t, e.denominator, e.subDenominator) : null;
664
661
  }
665
662
  function $e(e) {
663
+ 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);
664
+ }
665
+ function et(e) {
666
666
  let t = 0;
667
667
  for (let n of e) {
668
668
  let e = n.toString(), r = e.indexOf(".");
@@ -672,7 +672,7 @@ function $e(e) {
672
672
  }
673
673
  //#endregion
674
674
  //#region src/utils/priceSource.ts
675
- var et = [
675
+ var tt = [
676
676
  "close",
677
677
  "open",
678
678
  "high",
@@ -682,10 +682,10 @@ var et = [
682
682
  "ohlc4",
683
683
  "hlcc4"
684
684
  ];
685
- function tt(e) {
686
- return typeof e == "string" && et.includes(e);
685
+ function nt(e) {
686
+ return typeof e == "string" && tt.includes(e);
687
687
  }
688
- function nt(e, t) {
688
+ function rt(e, t) {
689
689
  switch (t) {
690
690
  case "open": return e.open;
691
691
  case "high": return e.high;
@@ -697,13 +697,13 @@ function nt(e, t) {
697
697
  default: return e.close;
698
698
  }
699
699
  }
700
- var rt = /^ind:([^:]+):(.+)$/;
701
- function it(e, t) {
700
+ var it = /^ind:([^:]+):(.+)$/;
701
+ function at(e, t) {
702
702
  return `ind:${e}:${t}`;
703
703
  }
704
- function at(e) {
704
+ function ot(e) {
705
705
  if (typeof e != "string") return null;
706
- let t = rt.exec(e);
706
+ let t = it.exec(e);
707
707
  return t ? {
708
708
  instanceId: t[1],
709
709
  key: t[2]
@@ -711,11 +711,11 @@ function at(e) {
711
711
  }
712
712
  //#endregion
713
713
  //#region src/utils/resample.ts
714
- var ot = 864e5;
715
- function st(e, t, n = 1) {
714
+ var st = 864e5;
715
+ function ct(e, t, n = 1) {
716
716
  let r = [], i = null;
717
717
  for (let a of e) {
718
- let e = Ue(a.time, t, n);
718
+ let e = We(a.time, t, n);
719
719
  i === null || e !== i.time ? (i = {
720
720
  time: e,
721
721
  open: a.open,
@@ -727,37 +727,37 @@ function st(e, t, n = 1) {
727
727
  }
728
728
  return r;
729
729
  }
730
- var k = (e) => e === "s" || e === "m" || e === "h" || e === "d";
731
- function ct(e, t) {
732
- let n = T(e), r = T(t);
730
+ var O = (e) => e === "s" || e === "m" || e === "h" || e === "d";
731
+ function lt(e, t) {
732
+ let n = w(e), r = w(t);
733
733
  if (!n || !r) return !1;
734
- let i = E(e);
735
- return n.unit === "d" && n.count > 1 ? !1 : k(r.unit) ? k(n.unit) && E(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : k(n.unit) && ot % i === 0;
734
+ let i = T(e);
735
+ 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) && st % i === 0;
736
736
  }
737
- function lt(e, t) {
737
+ function ut(e, t) {
738
738
  let n = null, r = 0;
739
739
  for (let i of t) {
740
- if (!ct(i, e)) continue;
741
- let t = E(i);
740
+ if (!lt(i, e)) continue;
741
+ let t = T(i);
742
742
  t > r && (n = i, r = t);
743
743
  }
744
744
  return n;
745
745
  }
746
746
  //#endregion
747
747
  //#region src/utils/symbols.ts
748
- function ut(e, t) {
748
+ function dt(e, t) {
749
749
  if (!e) return 0;
750
750
  if (e === t) return 1e3;
751
751
  if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
752
752
  let n = e.indexOf(t);
753
753
  return n >= 0 ? 300 - Math.min(100, n) : 0;
754
754
  }
755
- function dt(e, t, n = 50, r) {
755
+ function ft(e, t, n = 50, r) {
756
756
  let i = t.trim().toUpperCase();
757
757
  if (!i) return e.slice(0, n);
758
758
  let a = [];
759
759
  for (let t of e) {
760
- let e = Math.max(ut(t.symbol.toUpperCase(), i), ut((t.description ?? "").toUpperCase(), i) * .8);
760
+ let e = Math.max(dt(t.symbol.toUpperCase(), i), dt((t.description ?? "").toUpperCase(), i) * .8);
761
761
  e > 0 && a.push({
762
762
  info: t,
763
763
  score: e + (r?.(t) ?? 0)
@@ -765,7 +765,7 @@ function dt(e, t, n = 50, r) {
765
765
  }
766
766
  return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
767
767
  }
768
- function ft(e) {
768
+ function pt(e) {
769
769
  let t = typeof e == "number" ? e : Number(e);
770
770
  if (!Number.isFinite(t) || t <= 0) return 0;
771
771
  for (let e = 0; e <= 12; e++) {
@@ -774,7 +774,10 @@ function ft(e) {
774
774
  }
775
775
  return 12;
776
776
  }
777
- function A(e) {
777
+ function mt(e) {
778
+ return e?.timeZone ?? e?.timezone;
779
+ }
780
+ function k(e) {
778
781
  let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
779
782
  if (!t) return null;
780
783
  let n = Number(t[1]), r = Number(t[2]);
@@ -782,26 +785,26 @@ function A(e) {
782
785
  }
783
786
  //#endregion
784
787
  //#region src/utils/marketStatus.ts
785
- var j = 864e5, M = 6e4, pt = 8;
786
- function mt(e, t) {
787
- let n = e?.timezone, r = (e?.sessions ?? []).flatMap((e) => {
788
- let t = A(e.start), n = A(e.end);
788
+ var A = 864e5, j = 6e4, ht = 8;
789
+ function gt(e, t) {
790
+ let n = mt(e), r = (e?.sessions ?? []).flatMap((e) => {
791
+ let t = k(e.start), n = k(e.end);
789
792
  return t === null || n === null || t === n ? [] : [{
790
793
  start: t,
791
794
  end: n,
792
795
  days: Array.isArray(e.days) ? e.days : null
793
796
  }];
794
797
  });
795
- if (!n || !x(n) || r.length === 0 || !Number.isFinite(t)) return {
798
+ if (!n || !y(n) || r.length === 0 || !Number.isFinite(t)) return {
796
799
  state: "always",
797
800
  next: null
798
801
  };
799
- let i = S(n, t) * M, a = Math.floor((t + i) / j) * j, o = (e) => e - S(n, e - S(n, e - i) * M) * M, s = [];
800
- for (let e = -1; e <= pt; e++) {
801
- let t = a + e * j, n = (Math.floor(t / j) + 4) % 7;
802
+ 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 = [];
803
+ for (let e = -1; e <= ht; e++) {
804
+ let t = a + e * A, n = (Math.floor(t / A) + 4) % 7;
802
805
  for (let e of r) {
803
806
  if (e.days && !e.days.includes(n)) continue;
804
- let r = t + e.start * M, i = (e.end > e.start ? t : t + j) + e.end * M;
807
+ let r = t + e.start * j, i = (e.end > e.start ? t : t + A) + e.end * j;
805
808
  s.push([o(r), o(i)]);
806
809
  }
807
810
  }
@@ -824,15 +827,15 @@ function mt(e, t) {
824
827
  }
825
828
  //#endregion
826
829
  //#region src/utils/drawingOptions.ts
827
- var ht = 48, gt = 2e3, _t = 1e4;
828
- function vt(e) {
830
+ var _t = 48, vt = 2e3, yt = 1e4;
831
+ function bt(e) {
829
832
  if (!Array.isArray(e)) return;
830
833
  let t = [];
831
834
  for (let n of e) {
832
- if (t.length >= ht) break;
835
+ if (t.length >= _t) break;
833
836
  if (typeof n != "object" || !n) continue;
834
837
  let { value: e, visible: r, color: i } = n;
835
- if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > _t || r !== void 0 && typeof r != "boolean") continue;
838
+ if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > yt || r !== void 0 && typeof r != "boolean") continue;
836
839
  let a = {
837
840
  value: e,
838
841
  visible: r ?? !0
@@ -841,68 +844,68 @@ function vt(e) {
841
844
  }
842
845
  return t;
843
846
  }
844
- function yt(e, t) {
847
+ function xt(e, t) {
845
848
  switch (e.kind) {
846
849
  case "boolean": return typeof t == "boolean" ? t : void 0;
847
850
  case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
848
851
  case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
849
- case "levels": return vt(t);
850
- case "text": return typeof t == "string" ? t.slice(0, gt) : void 0;
852
+ case "levels": return bt(t);
853
+ case "text": return typeof t == "string" ? t.slice(0, vt) : void 0;
851
854
  }
852
855
  }
853
- function bt(e, t) {
856
+ function St(e, t) {
854
857
  if (!e || typeof t != "object" || !t) return {};
855
858
  let n = {};
856
859
  for (let [r, i] of Object.entries(t)) {
857
860
  let t = e[r];
858
861
  if (!t) continue;
859
- let a = yt(t, i);
862
+ let a = xt(t, i);
860
863
  a !== void 0 && (n[r] = a);
861
864
  }
862
865
  return n;
863
866
  }
864
- function xt(e) {
867
+ function Ct(e) {
865
868
  return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
866
869
  }
867
- function St(e, t, n) {
870
+ function wt(e, t, n) {
868
871
  let r = e?.[n];
869
- return r ? xt((t && n in t ? yt(r, t[n]) : void 0) ?? r.default) : t?.[n];
872
+ return r ? Ct((t && n in t ? xt(r, t[n]) : void 0) ?? r.default) : t?.[n];
870
873
  }
871
- function Ct(e, t) {
874
+ function Tt(e, t) {
872
875
  let n = {};
873
- for (let r of Object.keys(e ?? {})) n[r] = St(e, t, r);
876
+ for (let r of Object.keys(e ?? {})) n[r] = wt(e, t, r);
874
877
  return n;
875
878
  }
876
879
  //#endregion
877
880
  //#region src/utils/drawingStyle.ts
878
- var wt = [
881
+ var Et = [
879
882
  "solid",
880
883
  "dashed",
881
884
  "dotted"
882
- ], Tt = 64, Et = 2e3, Dt = 20, Ot = 200;
883
- function kt(e, t, n) {
885
+ ], Dt = 64, Ot = 2e3, kt = 20, At = 200;
886
+ function M(e, t, n) {
884
887
  return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
885
888
  }
886
- function At(e) {
887
- return typeof e == "string" && e.length > 0 && e.length <= Tt ? e : void 0;
888
- }
889
889
  function jt(e) {
890
+ return typeof e == "string" && e.length > 0 && e.length <= Dt ? e : void 0;
891
+ }
892
+ function Mt(e) {
890
893
  if (typeof e != "object" || !e) return {};
891
- let t = e, n = {}, r = At(t.color);
894
+ let t = e, n = {}, r = jt(t.color);
892
895
  r !== void 0 && (n.color = r);
893
- let i = kt(t.lineWidth, .5, Dt);
894
- i !== void 0 && (n.lineWidth = i), wt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
895
- let a = At(t.fillColor);
896
+ let i = M(t.lineWidth, .5, kt);
897
+ i !== void 0 && (n.lineWidth = i), Et.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
898
+ let a = jt(t.fillColor);
896
899
  a !== void 0 && (n.fillColor = a);
897
- let o = kt(t.fillOpacity, 0, 1);
900
+ let o = M(t.fillOpacity, 0, 1);
898
901
  o !== void 0 && (n.fillOpacity = o);
899
- let s = kt(t.fontSize, 6, Ot);
900
- return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, Et)), n;
902
+ let s = M(t.fontSize, 6, At);
903
+ return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, Ot)), n;
901
904
  }
902
905
  //#endregion
903
906
  //#region src/utils/chartTypeOptions.ts
904
907
  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);
905
- function Mt(e) {
908
+ function Nt(e) {
906
909
  if (!F(e)) return {};
907
910
  let t = {};
908
911
  if (F(e.renko)) {
@@ -938,8 +941,8 @@ function Mt(e) {
938
941
  }
939
942
  //#endregion
940
943
  //#region src/constants/themes.ts
941
- var Nt = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", Pt = {
942
- family: Nt,
944
+ var Pt = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", Ft = {
945
+ family: Pt,
943
946
  sizeSmall: 11,
944
947
  sizeMedium: 13,
945
948
  sizeLarge: 15
@@ -954,27 +957,27 @@ var Nt = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
954
957
  rose: "#e25592",
955
958
  neutral: "#7d8696",
956
959
  ink: "#131416"
957
- }, Ft = .22;
960
+ }, It = .22;
958
961
  function L(e) {
959
- return h(e, Ft);
962
+ return h(e, It);
960
963
  }
961
- var It = "#fbfaf6", R = "#1b1d21", Lt = "#131416", z = "#e6e3dc", Rt = "#1f7a5c", zt = "#b8423f", Bt = "#4fae8a", Vt = "#e2706b", Ht = "#6a6966", Ut = "#8d8a84", Wt = [
964
+ var Lt = "#fbfaf6", R = "#1b1d21", Rt = "#131416", z = "#e6e3dc", zt = "#1f7a5c", Bt = "#b8423f", Vt = "#4fae8a", Ht = "#e2706b", Ut = "#6a6966", Wt = "#8d8a84", Gt = [
962
965
  I.blue,
963
966
  I.ochre,
964
967
  I.violet,
965
968
  I.cyan,
966
969
  I.rose
967
- ], Gt = {
970
+ ], Kt = {
968
971
  name: "dark",
969
- background: Lt,
972
+ background: Rt,
970
973
  text: z,
971
974
  textSecondary: "#8d8b86",
972
975
  grid: "#1d1e21",
973
- crosshair: Ht,
974
- candleUp: Bt,
975
- candleDown: Vt,
976
- candleUpWick: Bt,
977
- candleDownWick: Vt,
976
+ crosshair: Ut,
977
+ candleUp: Vt,
978
+ candleDown: Ht,
979
+ candleUpWick: Vt,
980
+ candleDownWick: Ht,
978
981
  lineColor: z,
979
982
  areaTopColor: h(z, .14),
980
983
  areaBottomColor: h(z, 0),
@@ -983,18 +986,18 @@ var It = "#fbfaf6", R = "#1b1d21", Lt = "#131416", z = "#e6e3dc", Rt = "#1f7a5c"
983
986
  axisLine: "#2a2b2f",
984
987
  axisLabel: "#a9a6a0",
985
988
  axisLabelBackground: "#232427",
986
- font: Pt
987
- }, Kt = {
989
+ font: Ft
990
+ }, qt = {
988
991
  name: "light",
989
- background: It,
992
+ background: Lt,
990
993
  text: R,
991
994
  textSecondary: "#6b6f76",
992
995
  grid: "#ece8df",
993
- crosshair: Ut,
994
- candleUp: Rt,
995
- candleDown: zt,
996
- candleUpWick: Rt,
997
- candleDownWick: zt,
996
+ crosshair: Wt,
997
+ candleUp: zt,
998
+ candleDown: Bt,
999
+ candleUpWick: zt,
1000
+ candleDownWick: Bt,
998
1001
  lineColor: R,
999
1002
  areaTopColor: h(R, .12),
1000
1003
  areaBottomColor: h(R, 0),
@@ -1003,8 +1006,8 @@ var It = "#fbfaf6", R = "#1b1d21", Lt = "#131416", z = "#e6e3dc", Rt = "#1f7a5c"
1003
1006
  axisLine: "#cfcac0",
1004
1007
  axisLabel: "#4a4e57",
1005
1008
  axisLabelBackground: "#eeebe3",
1006
- font: Pt
1007
- }, qt = {
1009
+ font: Ft
1010
+ }, B = {
1008
1011
  name: "terminal",
1009
1012
  background: "#0E0E0E",
1010
1013
  text: "#C0C0C0",
@@ -1029,8 +1032,8 @@ var It = "#fbfaf6", R = "#1b1d21", Lt = "#131416", z = "#e6e3dc", Rt = "#1f7a5c"
1029
1032
  sizeMedium: 12,
1030
1033
  sizeLarge: 14
1031
1034
  }
1032
- }, Jt = new Set([qt.volumeUp, qt.volumeDown]);
1033
- function B(e) {
1035
+ }, Jt = new Set([B.volumeUp, B.volumeDown]);
1036
+ function V(e) {
1034
1037
  let t = (e, t) => {
1035
1038
  if (!Jt.has(e)) return e;
1036
1039
  let n = L(t);
@@ -1052,46 +1055,46 @@ var Yt = [
1052
1055
  /^[a-z]{3,30}$/i,
1053
1056
  /^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
1054
1057
  ];
1055
- function V(e) {
1058
+ function en(e) {
1056
1059
  return typeof e == "string" && e.length <= Zt && $t.some((t) => t.test(e.trim()));
1057
1060
  }
1058
- function en(e, t) {
1061
+ function tn(e, t) {
1059
1062
  switch (e) {
1060
- case "color": return V(t);
1063
+ case "color": return en(t);
1061
1064
  case "lineStyle": return Yt.includes(t);
1062
1065
  case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= Xt;
1063
1066
  case "boolean": return typeof t == "boolean";
1064
1067
  }
1065
1068
  }
1066
- function tn(e) {
1069
+ function nn(e) {
1067
1070
  return Object.prototype.hasOwnProperty.call(t, e);
1068
1071
  }
1069
- function nn(e) {
1072
+ function rn(e) {
1070
1073
  let n = {}, r = [];
1071
1074
  if (typeof e != "object" || !e || Array.isArray(e)) return {
1072
1075
  overrides: {},
1073
1076
  rejected: r
1074
1077
  };
1075
- for (let [i, a] of Object.entries(e)) tn(i) ? a === null ? n[i] = null : en(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
1078
+ for (let [i, a] of Object.entries(e)) nn(i) ? a === null ? n[i] = null : tn(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
1076
1079
  return {
1077
1080
  overrides: n,
1078
1081
  rejected: r
1079
1082
  };
1080
1083
  }
1081
- function rn(e) {
1084
+ function an(e) {
1082
1085
  if (typeof e != "object" || !e || Array.isArray(e)) return null;
1083
1086
  let { background: t, separator: n } = e, r = {
1084
- ...V(t) ? { background: t } : {},
1085
- ...V(n) ? { separator: n } : {}
1087
+ ...en(t) ? { background: t } : {},
1088
+ ...en(n) ? { separator: n } : {}
1086
1089
  };
1087
1090
  return Object.keys(r).length > 0 ? r : null;
1088
1091
  }
1089
- var an = /^[A-Za-z0-9_]{1,32}$/;
1090
- function on(e) {
1092
+ var on = /^[A-Za-z0-9_]{1,32}$/;
1093
+ function sn(e) {
1091
1094
  if (typeof e != "object" || !e || Array.isArray(e)) return;
1092
1095
  let t = {};
1093
1096
  for (let [n, r] of Object.entries(e)) {
1094
- if (!an.test(n) || typeof r != "object" || !r) continue;
1097
+ if (!on.test(n) || typeof r != "object" || !r) continue;
1095
1098
  let { lineStyle: e, visible: i } = r, a = {
1096
1099
  ...Yt.includes(e) ? { lineStyle: e } : {},
1097
1100
  ...typeof i == "boolean" ? { visible: i } : {}
@@ -1100,10 +1103,10 @@ function on(e) {
1100
1103
  }
1101
1104
  return Object.keys(t).length > 0 ? t : void 0;
1102
1105
  }
1103
- function sn(e, t, n = 1) {
1106
+ function cn(e, t, n = 1) {
1104
1107
  return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
1105
1108
  }
1106
- function cn(e, t, n) {
1109
+ function ln(e, t, n) {
1107
1110
  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;
1108
1111
  return {
1109
1112
  up: o,
@@ -1124,8 +1127,8 @@ function H(e, t, n) {
1124
1127
  width: e(`${t}.width`) ?? n.width
1125
1128
  };
1126
1129
  }
1127
- function ln(e, t, n) {
1128
- let { style: r, ...i } = e, a = n, o = (e) => a[e], s = cn(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
1130
+ function un(e, t, n) {
1131
+ let { style: r, ...i } = e, a = n, o = (e) => a[e], s = ln(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
1129
1132
  panes: {
1130
1133
  background: l("panes.background", c),
1131
1134
  separator: l("panes.separatorColor", i.axisLine),
@@ -1224,7 +1227,7 @@ function ln(e, t, n) {
1224
1227
  style: d
1225
1228
  };
1226
1229
  }
1227
- var un = {
1230
+ var dn = {
1228
1231
  "background.color": (e) => e.background,
1229
1232
  "panes.background": (e, t) => t.panes.background,
1230
1233
  "panes.separatorColor": (e, t) => t.panes.separator,
@@ -1243,8 +1246,8 @@ var un = {
1243
1246
  "lastPrice.downColor": (e, t) => t.lastPrice.down,
1244
1247
  "lastPrice.style": (e, t) => t.lastPrice.style,
1245
1248
  "lastPrice.width": (e, t) => t.lastPrice.width,
1246
- "volume.upColor": (e) => B(e).up,
1247
- "volume.downColor": (e) => B(e).down,
1249
+ "volume.upColor": (e) => V(e).up,
1250
+ "volume.downColor": (e) => V(e).down,
1248
1251
  "sessionBreaks.color": (e, t) => t.sessionBreaks.color,
1249
1252
  "sessionBreaks.style": (e, t) => t.sessionBreaks.style,
1250
1253
  "sessionBreaks.width": (e, t) => t.sessionBreaks.width,
@@ -1261,16 +1264,16 @@ var un = {
1261
1264
  "tradeZones.lossColor": (e, t) => t.tradeZones.loss,
1262
1265
  "tradeZones.activeColor": (e, t) => t.tradeZones.active,
1263
1266
  "drawings.handleColor": (e, t) => t.drawings.handle
1264
- }, dn = {
1267
+ }, fn = {
1265
1268
  visible: "visible",
1266
1269
  color: "color",
1267
1270
  style: "style",
1268
1271
  width: "width"
1269
1272
  };
1270
- function fn(e, t, n, r = "candlestick") {
1273
+ function pn(e, t, n, r = "candlestick") {
1271
1274
  let i = n.split(".");
1272
1275
  if (i[0] === "series") {
1273
- let n = cn(e, (e) => t[e], i[1]);
1276
+ let n = ln(e, (e) => t[e], i[1]);
1274
1277
  switch (i[2]) {
1275
1278
  case "upColor": return n.up;
1276
1279
  case "downColor": return n.down;
@@ -1283,12 +1286,12 @@ function fn(e, t, n, r = "candlestick") {
1283
1286
  case "bottomColor": return n.bottom;
1284
1287
  }
1285
1288
  }
1286
- let a = ln(e, r, t), o = a.style;
1287
- return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][dn[i[2]]] : un[n]?.(a, o) ?? null;
1289
+ let a = un(e, r, t), o = a.style;
1290
+ return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][fn[i[2]]] : dn[n]?.(a, o) ?? null;
1288
1291
  }
1289
1292
  //#endregion
1290
1293
  //#region src/constants/defaults.ts
1291
- var pn = {
1294
+ var mn = {
1292
1295
  autoScale: !0,
1293
1296
  rightMargin: 5,
1294
1297
  minBarSpacing: 2,
@@ -1299,7 +1302,7 @@ var pn = {
1299
1302
  vLineStyle: "solid"
1300
1303
  },
1301
1304
  crosshair: { mode: "magnet" }
1302
- }, mn = [
1305
+ }, hn = [
1303
1306
  "1s",
1304
1307
  "1m",
1305
1308
  "3m",
@@ -1316,7 +1319,7 @@ var pn = {
1316
1319
  "3d",
1317
1320
  "1w",
1318
1321
  "1M"
1319
- ], hn = [
1322
+ ], gn = [
1320
1323
  "1m",
1321
1324
  "5m",
1322
1325
  "15m",
@@ -1330,7 +1333,7 @@ var pn = {
1330
1333
  "3M",
1331
1334
  "6M",
1332
1335
  "12M"
1333
- ], gn = [
1336
+ ], _n = [
1334
1337
  "1m",
1335
1338
  "5m",
1336
1339
  "15m",
@@ -1340,7 +1343,7 @@ var pn = {
1340
1343
  "1d",
1341
1344
  "1w",
1342
1345
  "1M"
1343
- ], _n = [
1346
+ ], vn = [
1344
1347
  "1m",
1345
1348
  "5m",
1346
1349
  "15m",
@@ -1348,7 +1351,7 @@ var pn = {
1348
1351
  "4h",
1349
1352
  "1d",
1350
1353
  "1w"
1351
- ], vn = 8, yn = 2, bn = 70, xn = 30, Sn = 60, Cn = 120, wn = (1 + Math.sqrt(5)) / 2, Tn = [
1354
+ ], yn = 8, bn = 2, xn = 70, Sn = 30, Cn = 60, wn = 120, Tn = (1 + Math.sqrt(5)) / 2, En = [
1352
1355
  1,
1353
1356
  2,
1354
1357
  3,
@@ -1360,8 +1363,8 @@ var pn = {
1360
1363
  55,
1361
1364
  89
1362
1365
  ];
1363
- function En(e, t, n = 1) {
1364
- return Math.round(e * wn ** (t / n));
1366
+ function Dn(e, t, n = 1) {
1367
+ return Math.round(e * Tn ** (t / n));
1365
1368
  }
1366
1369
  //#endregion
1367
1370
  //#region src/i18n/en.ts
@@ -1468,7 +1471,7 @@ var U = {
1468
1471
  error: "Error",
1469
1472
  numberDecimalSeparator: ".",
1470
1473
  numberGroupSeparator: ","
1471
- }, Dn = {
1474
+ }, On = {
1472
1475
  candlestick: "Nến",
1473
1476
  line: "Đường",
1474
1477
  area: "Vùng",
@@ -1571,20 +1574,20 @@ var U = {
1571
1574
  error: "Lỗi",
1572
1575
  numberDecimalSeparator: ",",
1573
1576
  numberGroupSeparator: "."
1574
- }, W = new Map([["en", U], ["vi", Dn]]), G = "en", On = U;
1575
- function kn(e) {
1576
- G = e, On = W.get(e) ?? U;
1577
+ }, W = new Map([["en", U], ["vi", On]]), G = "en", kn = U;
1578
+ function An(e) {
1579
+ G = e, kn = W.get(e) ?? U;
1577
1580
  }
1578
- function An() {
1581
+ function jn() {
1579
1582
  return G;
1580
1583
  }
1581
- function jn(e) {
1582
- return On[e] ?? U[e] ?? e;
1584
+ function Mn(e) {
1585
+ return kn[e] ?? U[e] ?? e;
1583
1586
  }
1584
- function Mn(e, t) {
1587
+ function Nn(e, t) {
1585
1588
  W.set(e, t);
1586
1589
  }
1587
- function Nn(e) {
1590
+ function Pn(e) {
1588
1591
  return W.get(e ?? G) ?? U;
1589
1592
  }
1590
1593
  function K(e, t = 2, n) {
@@ -1592,10 +1595,10 @@ function K(e, t = 2, n) {
1592
1595
  for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
1593
1596
  return c && (u = "-" + u), s ? u + i + s : u;
1594
1597
  }
1595
- function Pn(e) {
1598
+ function Fn(e) {
1596
1599
  return K(e, 0, "vi");
1597
1600
  }
1598
- function Fn(e, t) {
1601
+ function In(e, t) {
1599
1602
  return e >= 1e9 ? K(e / 1e9, 2, t ?? G) + "B" : e >= 1e6 ? K(e / 1e6, 2, t ?? G) + "M" : e >= 1e3 ? K(e / 1e3, 2, t ?? G) + "K" : K(e, 0, t ?? G);
1600
1603
  }
1601
1604
  //#endregion
@@ -1607,7 +1610,7 @@ var q = {
1607
1610
  ceiling: "#D946EF",
1608
1611
  floor: "#06B6D4",
1609
1612
  reference: "#EAB308"
1610
- }, J = "Asia/Ho_Chi_Minh", In = [
1613
+ }, J = "Asia/Ho_Chi_Minh", Ln = [
1611
1614
  {
1612
1615
  name: "ATO",
1613
1616
  startTime: "09:00",
@@ -1638,7 +1641,7 @@ var q = {
1638
1641
  endTime: "14:45",
1639
1642
  type: "preClose"
1640
1643
  }
1641
- ], Ln = [
1644
+ ], Rn = [
1642
1645
  {
1643
1646
  name: "Phiên 1",
1644
1647
  startTime: "09:15",
@@ -1669,7 +1672,7 @@ var q = {
1669
1672
  endTime: "15:00",
1670
1673
  type: "postClose"
1671
1674
  }
1672
- ], Rn = [
1675
+ ], zn = [
1673
1676
  {
1674
1677
  name: "Phiên 1",
1675
1678
  startTime: "09:15",
@@ -1688,7 +1691,7 @@ var q = {
1688
1691
  endTime: "14:30",
1689
1692
  type: "continuous"
1690
1693
  }
1691
- ], zn = [
1694
+ ], Bn = [
1692
1695
  {
1693
1696
  name: "ATO",
1694
1697
  startTime: "08:45",
@@ -1719,7 +1722,7 @@ var q = {
1719
1722
  endTime: "14:45",
1720
1723
  type: "preClose"
1721
1724
  }
1722
- ], Bn = {
1725
+ ], Vn = {
1723
1726
  type: "stock",
1724
1727
  exchange: "HOSE",
1725
1728
  currency: "VND",
@@ -1746,12 +1749,12 @@ var q = {
1746
1749
  ceilingPercent: 7,
1747
1750
  floorPercent: 7
1748
1751
  },
1749
- sessions: In,
1752
+ sessions: Ln,
1750
1753
  colorScheme: q
1751
- }, Vn = {
1752
- ...Bn,
1753
- priceSteps: void 0
1754
1754
  }, Hn = {
1755
+ ...Vn,
1756
+ priceSteps: void 0
1757
+ }, Un = {
1755
1758
  type: "stock",
1756
1759
  exchange: "HNX",
1757
1760
  currency: "VND",
@@ -1764,9 +1767,9 @@ var q = {
1764
1767
  ceilingPercent: 10,
1765
1768
  floorPercent: 10
1766
1769
  },
1767
- sessions: Ln,
1770
+ sessions: Rn,
1768
1771
  colorScheme: q
1769
- }, Un = {
1772
+ }, Wn = {
1770
1773
  type: "stock",
1771
1774
  exchange: "UPCOM",
1772
1775
  currency: "VND",
@@ -1779,9 +1782,9 @@ var q = {
1779
1782
  ceilingPercent: 15,
1780
1783
  floorPercent: 15
1781
1784
  },
1782
- sessions: Rn,
1785
+ sessions: zn,
1783
1786
  colorScheme: q
1784
- }, Wn = {
1787
+ }, Gn = {
1785
1788
  type: "futures",
1786
1789
  exchange: "HNX",
1787
1790
  currency: "VND",
@@ -1795,14 +1798,14 @@ var q = {
1795
1798
  ceilingPercent: 7,
1796
1799
  floorPercent: 7
1797
1800
  },
1798
- sessions: zn,
1801
+ sessions: Bn,
1799
1802
  colorScheme: q
1800
- }, Gn = {
1803
+ }, Kn = {
1801
1804
  type: "crypto",
1802
1805
  currency: "USDT",
1803
1806
  pricePrecision: 2,
1804
1807
  priceLimits: { enabled: !1 }
1805
- }, Kn = {
1808
+ }, qn = {
1806
1809
  type: "stock",
1807
1810
  exchange: "NYSE",
1808
1811
  currency: "USD",
@@ -1831,7 +1834,7 @@ var q = {
1831
1834
  }
1832
1835
  ]
1833
1836
  };
1834
- function qn(e) {
1837
+ function Jn(e) {
1835
1838
  return {
1836
1839
  ...e,
1837
1840
  candleUp: q.up,
@@ -1841,65 +1844,65 @@ function qn(e) {
1841
1844
  };
1842
1845
  }
1843
1846
  var Y = 1e-9;
1844
- function X(e, t) {
1847
+ function Yn(e, t) {
1845
1848
  let n = t.priceStep;
1846
1849
  for (let r of t.priceSteps ?? []) e + Y >= r.from && (n = r.step);
1847
1850
  return n !== void 0 && n > 0 ? n : void 0;
1848
1851
  }
1849
- function Jn(e, t) {
1852
+ function Xn(e, t) {
1850
1853
  let n = t.priceStep;
1851
1854
  for (let r of t.priceSteps ?? []) e - Y > r.from && (n = r.step);
1852
1855
  return n !== void 0 && n > 0 ? n : void 0;
1853
1856
  }
1854
- function Z(e, t, n = "nearest") {
1855
- let r = X(e, t);
1857
+ function X(e, t, n = "nearest") {
1858
+ let r = Yn(e, t);
1856
1859
  if (r === void 0 || !Number.isFinite(e)) return e;
1857
1860
  let i = e / r, a = n === "down" ? Math.floor(i + Y) : n === "up" ? Math.ceil(i - Y) : Math.round(i);
1858
- return Number((a * r).toFixed(ft(r)));
1861
+ return Number((a * r).toFixed(pt(r)));
1859
1862
  }
1860
- function Yn(e, t) {
1863
+ function Zn(e, t) {
1861
1864
  if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
1862
- let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100, i = e, a = i * (1 + n), o = i * (1 - r), s = X(i, t);
1865
+ let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100, i = e, a = i * (1 + n), o = i * (1 - r), s = Yn(i, t);
1863
1866
  if (s === void 0) return {
1864
1867
  ceiling: a,
1865
1868
  floor: o,
1866
1869
  reference: i
1867
1870
  };
1868
- let c = Z(i + s, t);
1871
+ let c = X(i + s, t);
1869
1872
  if (Math.abs(i - s) < Y) return {
1870
1873
  ceiling: c,
1871
1874
  floor: i,
1872
1875
  reference: i
1873
1876
  };
1874
- let l = Z(a, t, "down"), u = Z(o, t, "up");
1875
- return l <= i && (l = c), u >= i && (u = Z(i - (Jn(i, t) ?? s), t)), u <= 0 && (u = i), {
1877
+ let l = X(a, t, "down"), u = X(o, t, "up");
1878
+ return l <= i && (l = c), u >= i && (u = X(i - (Xn(i, t) ?? s), t)), u <= 0 && (u = i), {
1876
1879
  ceiling: l,
1877
1880
  floor: u,
1878
1881
  reference: i
1879
1882
  };
1880
1883
  }
1881
- var Q = (e, t) => Math.round(e * t * 1e9) / 1e9;
1882
- function Xn(e, t) {
1884
+ var Z = (e, t) => Math.round(e * t * 1e9) / 1e9;
1885
+ function Qn(e, t) {
1883
1886
  let n = Math.round(Math.log10(t));
1884
1887
  return {
1885
1888
  ...e,
1886
1889
  pricePrecision: e.pricePrecision === void 0 ? void 0 : Math.max(0, e.pricePrecision - n),
1887
- priceStep: e.priceStep === void 0 ? void 0 : Q(e.priceStep, t),
1890
+ priceStep: e.priceStep === void 0 ? void 0 : Z(e.priceStep, t),
1888
1891
  priceSteps: e.priceSteps?.map((e) => ({
1889
- from: Q(e.from, t),
1890
- step: Q(e.step, t)
1892
+ from: Z(e.from, t),
1893
+ step: Z(e.step, t)
1891
1894
  })),
1892
1895
  priceLimits: e.priceLimits && {
1893
1896
  ...e.priceLimits,
1894
- referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 : Q(e.priceLimits.referencePrice, t)
1897
+ referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 : Z(e.priceLimits.referencePrice, t)
1895
1898
  }
1896
1899
  };
1897
1900
  }
1898
- var Zn = 6e4, Qn = 864e5;
1899
- function $n(e, t) {
1901
+ var $n = 6e4, er = 864e5;
1902
+ function tr(e, t) {
1900
1903
  let n, r;
1901
1904
  if (t) {
1902
- let i = new Date(e + S(t, e) * Zn);
1905
+ let i = new Date(e + b(t, e) * $n);
1903
1906
  n = i.getUTCHours(), r = i.getUTCMinutes();
1904
1907
  } else {
1905
1908
  let t = new Date(e);
@@ -1907,31 +1910,31 @@ function $n(e, t) {
1907
1910
  }
1908
1911
  return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
1909
1912
  }
1910
- function er(e, t = Date.now(), n) {
1911
- if (n !== void 0 && !x(n)) return null;
1912
- let r = $n(t, n);
1913
+ function nr(e, t = Date.now(), n) {
1914
+ if (n !== void 0 && !y(n)) return null;
1915
+ let r = tr(t, n);
1913
1916
  for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
1914
1917
  return null;
1915
1918
  }
1916
- var $ = (e) => String(e).padStart(2, "0"), tr = (e) => {
1919
+ var Q = (e) => String(e).padStart(2, "0"), $ = (e) => {
1917
1920
  let t = new Date(e);
1918
- return `${t.getUTCFullYear()}-${$(t.getUTCMonth() + 1)}-${$(t.getUTCDate())}`;
1919
- }, nr = 4, rr = 7 * 36e5;
1920
- function ir(e, t, n) {
1921
- let r = Date.UTC(e, t - 1, 1), i = 1 + (nr - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
1921
+ return `${t.getUTCFullYear()}-${Q(t.getUTCMonth() + 1)}-${Q(t.getUTCDate())}`;
1922
+ }, rr = 4, ir = 7 * 36e5;
1923
+ function ar(e, t, n) {
1924
+ let r = Date.UTC(e, t - 1, 1), i = 1 + (rr - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
1922
1925
  let t = new Date(e).getUTCDay();
1923
- return t === 0 || t === 6 || (n?.(tr(e)) ?? !1);
1926
+ return t === 0 || t === 6 || (n?.($(e)) ?? !1);
1924
1927
  };
1925
- for (; o(a);) a -= Qn;
1926
- return tr(a);
1928
+ for (; o(a);) a -= er;
1929
+ return $(a);
1927
1930
  }
1928
- function ar(e, t) {
1929
- let n = tr(e + rr), r = (e, n) => ({
1930
- symbol: `VN30F${$(e % 100)}${$(n)}`,
1931
+ function or(e, t) {
1932
+ let n = $(e + ir), r = (e, n) => ({
1933
+ symbol: `VN30F${Q(e % 100)}${Q(n)}`,
1931
1934
  year: e,
1932
1935
  month: n,
1933
- lastTradingDay: ir(e, n, t)
1934
- }), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + rr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
1936
+ lastTradingDay: ar(e, n, t)
1937
+ }), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + ir), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
1935
1938
  n > o.lastTradingDay && (o = i(o));
1936
1939
  let s = [o, i(o)], c = i(s[1]);
1937
1940
  for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
@@ -1939,7 +1942,7 @@ function ar(e, t) {
1939
1942
  }
1940
1943
  //#endregion
1941
1944
  //#region src/icons/iconSet.ts
1942
- var or = {
1945
+ var sr = {
1943
1946
  cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
1944
1947
  trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
1945
1948
  trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
@@ -2068,7 +2071,7 @@ var or = {
2068
2071
  ]
2069
2072
  ] },
2070
2073
  layoutGrid: { d: "M5 4.5h4.5a.5.5 0 0 1 .5.5v4.5a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V5a.5.5 0 0 1 .5-.5zM14.5 4.5H19a.5.5 0 0 1 .5.5v4.5a.5.5 0 0 1-.5.5h-4.5a.5.5 0 0 1-.5-.5V5a.5.5 0 0 1 .5-.5zM5 14h4.5a.5.5 0 0 1 .5.5V19a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5v-4.5A.5.5 0 0 1 5 14zM14.5 14H19a.5.5 0 0 1 .5.5V19a.5.5 0 0 1-.5.5h-4.5a.5.5 0 0 1-.5-.5v-4.5a.5.5 0 0 1 .5-.5z" }
2071
- }, sr = {
2074
+ }, cr = {
2072
2075
  trendLine: {
2073
2076
  d: "M5 18L19 6",
2074
2077
  dots: [[5, 18], [19, 6]]
@@ -2421,7 +2424,7 @@ var or = {
2421
2424
  ],
2422
2425
  dash: "M12 3V21"
2423
2426
  }
2424
- }, cr = {
2427
+ }, lr = {
2425
2428
  candlestick: {
2426
2429
  d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
2427
2430
  fills: ["M6.5 7h3a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1z", "M14.5 8.5h3a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1z"]
@@ -2488,21 +2491,21 @@ var or = {
2488
2491
  "M16 4.5h3v6h-3z"
2489
2492
  ]
2490
2493
  }
2491
- }, lr = 1.75, ur = .22, dr = /* @__PURE__ */ new WeakMap();
2492
- function fr(e) {
2493
- let t = dr.get(e);
2494
+ }, ur = 1.75, dr = .22, fr = /* @__PURE__ */ new WeakMap();
2495
+ function pr(e) {
2496
+ let t = fr.get(e);
2494
2497
  if (t) return t;
2495
2498
  let n = "";
2496
- e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${ur}" stroke="none"/>`);
2499
+ e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${dr}" stroke="none"/>`);
2497
2500
  for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
2498
2501
  e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
2499
- for (let [t, r, i = lr] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
2500
- return dr.set(e, n), n;
2502
+ for (let [t, r, i = ur] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
2503
+ return fr.set(e, n), n;
2501
2504
  }
2502
- function pr(e, t) {
2503
- return `<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${fr(e)}</svg>`;
2505
+ function mr(e, t) {
2506
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${pr(e)}</svg>`;
2504
2507
  }
2505
2508
  //#endregion
2506
- export { t as CHART_STYLE_KEYS, cr as CHART_TYPE_ICONS, qt as DARK_TERMINAL, Gt as DARK_THEME, yn as DEFAULT_BAR_SPACING, vn as DEFAULT_BAR_WIDTH, pn as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, Nt as DEFAULT_FONT_FAMILY, Cn as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, _n as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, sr as DRAWING_TOOL_ICONS, Tn as FIBONACCI, Ln as HNX_SESSIONS, In as HOSE_SESSIONS, lr as ICON_DOT_RADIUS, ur as ICON_SOFT_OPACITY, Kt as LIGHT_THEME, e as LayerType, Gn as MARKET_CRYPTO, Hn as MARKET_HNX, Bn as MARKET_HOSE, Vn as MARKET_HOSE_ETF, Kn as MARKET_NYSE, Un as MARKET_UPCOM, Wn as MARKET_VN30F, Sn as MIN_PANEL_HEIGHT, se as MS_TIME_THRESHOLD, wn as PHI, bn as PRICE_AXIS_WIDTH, et as PRICE_SOURCES, I as TC_PALETTE, Wt as TC_SERIES_COLORS, mn as TIMEFRAMES_CRYPTO, gn as TIMEFRAMES_FOREX, hn as TIMEFRAMES_STOCK, xn as TIME_AXIS_HEIGHT, or as UI_ICONS, Rn as UPCOM_SESSIONS, zn as VN30F_SESSIONS, q as VN_COLORS, Ft as VOLUME_ALPHA, Ie as alignToTimeframe, qe as autoPricePrecision, ce as barTimeUnit, Be as barsAreDaily, fn as chartStyleValue, ne as clamp, Yn as computePriceLimits, he as computePriceRange, oe as computeTickStep, qn as createVNTheme, $e as detectPrecision, St as drawingOption, U as en, fe as findBarIndex, me as fitPriceRange, Ye as formatFraction, K as formatNumber, O as formatPrice, Je as formatPriceScaleLabel, Fe as formatTimestamp, Pn as formatVND, Qe as formatVolume, Fn as formatVolumeLoc, Xe as fractionTick, er as getCurrentSession, An as getLocale, Nn as getLocaleStrings, _e as hexToRgba, pr as iconSvg, it as indicatorSource, ie as inverseLerp, Re as isDateOnly, tt as isPriceSource, Pe as isTimeFrame, x as isValidTimeZone, re as lerp, ve as lerpColor, sn as lineDash, mt as marketStatus, ge as mergeBar, m as niceNumber, ue as normalizeBar, le as normalizeBarTime, w as offsetAt, pe as padPriceRange, at as parseIndicatorSource, T as parseTimeframe, En as phiStep, lt as pickBaseTimeframe, Ze as priceFormatterFor, X as priceStepAt, Ke as priceTagText, dt as rankSymbols, nn as readChartStyleOverrides, Mt as readChartTypeOptions, on as readIndicatorPlotStyles, te as readNews, rn as readPaneStyle, l as readQuote, Mn as registerLocale, st as resampleBars, ln as resolveChartTheme, Ct as resolveDrawingOptions, B as resolveVolumeColors, Z as roundToPriceStep, ae as roundToStep, bt as sanitizeDrawingOptions, jt as sanitizeDrawingStyle, Xn as scaleMarketPrices, A as sessionMinute, kn as setLocale, de as sliceVisibleData, nt as sourcePrice, ft as stepDecimals, jn as t, Ne as tickBarCount, Le as timeParts, Ue as timeframeBucketStart, E as timeframeToMs, Ve as tzLabel, Dn as vi, ar as vn30fContracts, ir as vn30fLastTradingDay, L as volumeColor, Ee as wallToUtc, h as withAlpha, S as zoneOffsetMinutes, Oe as zonedDateFormatter };
2509
+ export { t as CHART_STYLE_KEYS, lr as CHART_TYPE_ICONS, B as DARK_TERMINAL, Kt as DARK_THEME, bn as DEFAULT_BAR_SPACING, yn as DEFAULT_BAR_WIDTH, mn as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, Pt as DEFAULT_FONT_FAMILY, wn as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, vn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, cr as DRAWING_TOOL_ICONS, En as FIBONACCI, Rn as HNX_SESSIONS, Ln as HOSE_SESSIONS, ur as ICON_DOT_RADIUS, dr as ICON_SOFT_OPACITY, qt as LIGHT_THEME, e as LayerType, Kn as MARKET_CRYPTO, Un as MARKET_HNX, Vn as MARKET_HOSE, Hn as MARKET_HOSE_ETF, qn as MARKET_NYSE, Wn as MARKET_UPCOM, Gn as MARKET_VN30F, Cn as MIN_PANEL_HEIGHT, se as MS_TIME_THRESHOLD, Tn as PHI, xn as PRICE_AXIS_WIDTH, tt as PRICE_SOURCES, I as TC_PALETTE, Gt as TC_SERIES_COLORS, hn as TIMEFRAMES_CRYPTO, _n as TIMEFRAMES_FOREX, gn as TIMEFRAMES_STOCK, Sn as TIME_AXIS_HEIGHT, sr as UI_ICONS, zn as UPCOM_SESSIONS, Bn as VN30F_SESSIONS, q as VN_COLORS, It as VOLUME_ALPHA, Le as alignToTimeframe, Je as autoPricePrecision, ce as barTimeUnit, Ve as barsAreDaily, pn as chartStyleValue, ne as clamp, Zn as computePriceLimits, he as computePriceRange, oe as computeTickStep, Jn as createVNTheme, et as detectPrecision, wt as drawingOption, U as en, fe as findBarIndex, me as fitPriceRange, Xe as formatFraction, K as formatNumber, D as formatPrice, Ye as formatPriceScaleLabel, Ie as formatTimestamp, Fn as formatVND, $e as formatVolume, In as formatVolumeLoc, Ze as fractionTick, nr as getCurrentSession, jn as getLocale, Pn as getLocaleStrings, _e as hexToRgba, mr as iconSvg, at as indicatorSource, ie as inverseLerp, ze as isDateOnly, nt as isPriceSource, Fe as isTimeFrame, y as isValidTimeZone, re as lerp, ve as lerpColor, cn as lineDash, gt as marketStatus, ge as mergeBar, m as niceNumber, ue as normalizeBar, le as normalizeBarTime, S as offsetAt, pe as padPriceRange, ot as parseIndicatorSource, w as parseTimeframe, Dn as phiStep, ut as pickBaseTimeframe, Qe as priceFormatterFor, Yn as priceStepAt, qe as priceTagText, ft as rankSymbols, rn as readChartStyleOverrides, Nt as readChartTypeOptions, sn as readIndicatorPlotStyles, te as readNews, an as readPaneStyle, l as readQuote, Nn as registerLocale, ct as resampleBars, un as resolveChartTheme, Tt as resolveDrawingOptions, V as resolveVolumeColors, X as roundToPriceStep, ae as roundToStep, St as sanitizeDrawingOptions, Mt as sanitizeDrawingStyle, Qn as scaleMarketPrices, k as sessionMinute, An as setLocale, de as sliceVisibleData, rt as sourcePrice, pt as stepDecimals, mt as symbolTimeZone, Mn as t, Pe as tickBarCount, Re as timeParts, We as timeframeBucketStart, T as timeframeToMs, He as tzLabel, On as vi, or as vn30fContracts, ar as vn30fLastTradingDay, L as volumeColor, Oe as wallToUtc, h as withAlpha, b as zoneOffsetMinutes, Ae as zonedDateFormatter };
2507
2510
 
2508
2511
  //# sourceMappingURL=index.js.map