@tradecanvas/commons 1.57.0 → 1.59.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
@@ -245,26 +245,26 @@ function ae(e, t, n) {
245
245
  function oe(e, t) {
246
246
  return Math.round(e / t) * t;
247
247
  }
248
- function p(e, t) {
248
+ function se(e, t) {
249
249
  let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
250
250
  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;
251
251
  }
252
- function se(e, t, n) {
253
- return p(p(t - e, !1) / (n - 1), !0);
252
+ function ce(e, t, n) {
253
+ return se(se(t - e, !1) / (n - 1), !0);
254
254
  }
255
255
  //#endregion
256
256
  //#region src/utils/data.ts
257
- var ce = 1e11;
258
- function le(e) {
257
+ var le = 1e11;
258
+ function ue(e) {
259
259
  let t = e.length > 0 ? e[e.length - 1].time : NaN;
260
260
  return Number.isFinite(t) ? Math.abs(t) >= 1e11 ? 1 : 1e3 : 1;
261
261
  }
262
- function ue(e, t) {
262
+ function de(e, t) {
263
263
  return t === void 0 ? Math.abs(e) >= 1e11 ? e : e * 1e3 : e * t;
264
264
  }
265
- function de(e) {
265
+ function fe(e) {
266
266
  return {
267
- time: ue(e.time ?? e.t ?? 0),
267
+ time: de(e.time ?? e.t ?? 0),
268
268
  open: e.open ?? e.o ?? 0,
269
269
  high: e.high ?? e.h ?? 0,
270
270
  low: e.low ?? e.l ?? 0,
@@ -272,11 +272,11 @@ function de(e) {
272
272
  volume: e.volume ?? e.v ?? 0
273
273
  };
274
274
  }
275
- function fe(e, t, n) {
275
+ function pe(e, t, n) {
276
276
  let r = Math.max(0, t), i = Math.min(e.length, n + 1);
277
277
  return e.slice(r, i);
278
278
  }
279
- function pe(e, t) {
279
+ function me(e, t) {
280
280
  let n = 0, r = e.length - 1;
281
281
  for (; n <= r;) {
282
282
  let i = n + r >>> 1;
@@ -286,7 +286,7 @@ function pe(e, t) {
286
286
  }
287
287
  return n;
288
288
  }
289
- function me(e, t, n, r = !1) {
289
+ function he(e, t, n, r = !1) {
290
290
  let i = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
291
291
  if (Number.isFinite(i)) {
292
292
  let r = i || Math.log(1 + 2 * n), a = Math.exp(r * n);
@@ -301,7 +301,7 @@ function me(e, t, n, r = !1) {
301
301
  max: t + a * n
302
302
  };
303
303
  }
304
- function he(e, t, n, r = !1) {
304
+ function ge(e, t, n, r = !1) {
305
305
  let i = Math.max(1 - n.top - n.bottom, 2 ** -52), a = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
306
306
  if (Number.isFinite(a)) {
307
307
  let r = (a || Math.log(1.01)) / i;
@@ -316,7 +316,7 @@ function he(e, t, n, r = !1) {
316
316
  max: t + o * n.top
317
317
  };
318
318
  }
319
- function ge(e, t, n, r = .05, i = !1) {
319
+ function _e(e, t, n, r = .05, i = !1) {
320
320
  if (e.length === 0) return {
321
321
  min: 0,
322
322
  max: 1
@@ -326,9 +326,9 @@ function ge(e, t, n, r = .05, i = !1) {
326
326
  return s === Infinity ? {
327
327
  min: 0,
328
328
  max: 1
329
- } : me(s, c, r, i);
329
+ } : he(s, c, r, i);
330
330
  }
331
- function _e(e, t) {
331
+ function ve(e, t) {
332
332
  return {
333
333
  ...e,
334
334
  high: Math.max(e.high, t.price),
@@ -339,18 +339,18 @@ function _e(e, t) {
339
339
  }
340
340
  //#endregion
341
341
  //#region src/utils/color.ts
342
- function ve(e, t = 1) {
342
+ function ye(e, t = 1) {
343
343
  let n = e.slice(1);
344
344
  return (n.length === 3 || n.length === 4) && (n = [...n.slice(0, 3)].map((e) => e + e).join("")), `rgba(${parseInt(n.slice(0, 2), 16)}, ${parseInt(n.slice(2, 4), 16)}, ${parseInt(n.slice(4, 6), 16)}, ${t})`;
345
345
  }
346
- function m(e, t) {
346
+ function p(e, t) {
347
347
  let n = e.trim();
348
- if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return ve(n, t);
348
+ if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return ye(n, t);
349
349
  let r = n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);
350
350
  return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
351
351
  }
352
- var ye = 3;
353
- function h(e) {
352
+ var be = 3;
353
+ function xe(e) {
354
354
  let t = e.trim(), n = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(t);
355
355
  if (n) {
356
356
  let e = n[1];
@@ -373,14 +373,14 @@ function h(e) {
373
373
  a: Math.min(1, Math.max(0, i))
374
374
  };
375
375
  }
376
- function be(e, t, n) {
377
- let r = h(e), i = h(t);
376
+ function Se(e, t, n) {
377
+ let r = xe(e), i = xe(t);
378
378
  if (!r || !i) return n < .5 ? e : t;
379
379
  let a = r.a + (i.a - r.a) * n, o = (e, t) => a === 0 ? 0 : Math.round((e * r.a + (t * i.a - e * r.a) * n) / a), s = `${o(r.r, i.r)},${o(r.g, i.g)},${o(r.b, i.b)}`;
380
- return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(ye))})`;
380
+ return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(be))})`;
381
381
  }
382
- function xe(e) {
383
- let t = h(e);
382
+ function Ce(e) {
383
+ let t = xe(e);
384
384
  if (!t) return null;
385
385
  let n = (e) => {
386
386
  let t = e / 255;
@@ -388,26 +388,26 @@ function xe(e) {
388
388
  };
389
389
  return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b);
390
390
  }
391
- function g(e, t) {
392
- let n = xe(e), r = xe(t);
391
+ function m(e, t) {
392
+ let n = Ce(e), r = Ce(t);
393
393
  return n === null || r === null ? null : (Math.max(n, r) + .05) / (Math.min(n, r) + .05);
394
394
  }
395
- var Se = 20;
396
- function Ce(e, t, n, r) {
397
- let i = g(e, t);
395
+ var we = 20;
396
+ function Te(e, t, n, r) {
397
+ let i = m(e, t);
398
398
  if (i === null || i >= r) return e;
399
- for (let i = 1; i <= Se; i++) {
400
- let a = be(e, n, i / Se);
401
- if ((g(a, t) ?? 0) >= r) return a;
399
+ for (let i = 1; i <= we; i++) {
400
+ let a = Se(e, n, i / we);
401
+ if ((m(a, t) ?? 0) >= r) return a;
402
402
  }
403
403
  return n;
404
404
  }
405
- function we(e, t, n) {
406
- return (g(e, t) ?? 0) >= (g(e, n) ?? 0) ? t : n;
405
+ function Ee(e, t, n) {
406
+ return (m(e, t) ?? 0) >= (m(e, n) ?? 0) ? t : n;
407
407
  }
408
408
  //#endregion
409
409
  //#region src/utils/timezone.ts
410
- var _ = 6e4, Te = 1440 * _, v = 15 * _, Ee = 8192, De = 7 * Te, Oe = 4096, ke = new Set([
410
+ var h = 6e4, De = 1440 * h, g = 15 * h, Oe = 8192, ke = 7 * De, Ae = 4096, je = new Set([
411
411
  "UTC",
412
412
  "Etc/UTC",
413
413
  "GMT",
@@ -418,9 +418,9 @@ var _ = 6e4, Te = 1440 * _, v = 15 * _, Ee = 8192, De = 7 * Te, Oe = 4096, ke =
418
418
  "Etc/Universal",
419
419
  "Zulu",
420
420
  "Etc/Zulu"
421
- ]), Ae = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Map(), je = /* @__PURE__ */ new Map();
422
- function Me(e) {
423
- let t = Ae.get(e);
421
+ ]), Me = /* @__PURE__ */ new Map(), _ = /* @__PURE__ */ new Map(), Ne = /* @__PURE__ */ new Map();
422
+ function Pe(e) {
423
+ let t = Me.get(e);
424
424
  return t || (t = new Intl.DateTimeFormat("en-US", {
425
425
  timeZone: e,
426
426
  hourCycle: "h23",
@@ -430,34 +430,34 @@ function Me(e) {
430
430
  hour: "numeric",
431
431
  minute: "numeric",
432
432
  second: "numeric"
433
- }), Ae.set(e, t)), t;
433
+ }), Me.set(e, t)), t;
434
434
  }
435
- function Ne(e) {
435
+ function v(e) {
436
436
  if (!e) return !1;
437
437
  try {
438
- return Me(e), !0;
438
+ return Pe(e), !0;
439
439
  } catch {
440
440
  return !1;
441
441
  }
442
442
  }
443
- function b(e, t) {
444
- if (!Number.isFinite(t) || ke.has(e)) return 0;
445
- let n = je.get(e);
446
- n || (n = /* @__PURE__ */ new Map(), je.set(e, n));
447
- let r = Math.floor(t / De), i = n.get(r);
448
- return i || (i = Pe(e, r * De), n.size >= Oe && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
449
- }
450
- function Pe(e, t) {
451
- let n = Fe(e, t), r = t + De - v, i = Fe(e, r);
443
+ function y(e, t) {
444
+ if (!Number.isFinite(t) || je.has(e)) return 0;
445
+ let n = Ne.get(e);
446
+ n || (n = /* @__PURE__ */ new Map(), Ne.set(e, n));
447
+ let r = Math.floor(t / ke), i = n.get(r);
448
+ return i || (i = Fe(e, r * ke), n.size >= Ae && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
449
+ }
450
+ function Fe(e, t) {
451
+ let n = b(e, t), r = t + ke - g, i = b(e, r);
452
452
  if (i === n) return {
453
453
  before: n,
454
454
  change: Infinity,
455
455
  after: i
456
456
  };
457
457
  let a = t;
458
- for (; r - a > v;) {
459
- let t = a + Math.floor((r - a) / v / 2) * v;
460
- Fe(e, t) === n ? a = t : r = t;
458
+ for (; r - a > g;) {
459
+ let t = a + Math.floor((r - a) / g / 2) * g;
460
+ b(e, t) === n ? a = t : r = t;
461
461
  }
462
462
  return {
463
463
  before: n,
@@ -465,11 +465,11 @@ function Pe(e, t) {
465
465
  after: i
466
466
  };
467
467
  }
468
- function Fe(e, t) {
469
- let n = Math.floor(t / v), r = `${e}|${n}`, i = y.get(r);
468
+ function b(e, t) {
469
+ let n = Math.floor(t / g), r = `${e}|${n}`, i = _.get(r);
470
470
  if (i !== void 0) return i;
471
- let a = n * v, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
472
- for (let t of Me(e).formatToParts(new Date(a))) {
471
+ let a = n * g, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
472
+ for (let t of Pe(e).formatToParts(new Date(a))) {
473
473
  let e = Number(t.value);
474
474
  switch (t.type) {
475
475
  case "year":
@@ -492,20 +492,20 @@ function Fe(e, t) {
492
492
  break;
493
493
  }
494
494
  }
495
- let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / _);
496
- return y.size >= Ee && y.clear(), y.set(r, ee), ee;
495
+ let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / h);
496
+ return _.size >= Oe && _.clear(), _.set(r, ee), ee;
497
497
  }
498
498
  function x(e) {
499
- return e === 0 || typeof e == "string" && ke.has(e);
499
+ return e === 0 || typeof e == "string" && je.has(e);
500
500
  }
501
501
  function S(e, t) {
502
- return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : b(e, t);
502
+ return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : y(e, t);
503
503
  }
504
504
  function Ie(e, t) {
505
- let n = e - S(t, e - Te) * _;
506
- if (n + S(t, n) * _ === e) return n;
507
- let r = e - S(t, e + Te) * _;
508
- return r + S(t, r) * _ === e ? r : n;
505
+ let n = e - S(t, e - De) * h;
506
+ if (n + S(t, n) * h === e) return n;
507
+ let r = e - S(t, e + De) * h;
508
+ return r + S(t, r) * h === e ? r : n;
509
509
  }
510
510
  var Le = /* @__PURE__ */ new Map();
511
511
  function Re(e, t, n) {
@@ -523,7 +523,7 @@ function Re(e, t, n) {
523
523
  timeZone: a
524
524
  });
525
525
  }
526
- let s = typeof n == "number" ? n * _ : 0;
526
+ let s = typeof n == "number" ? n * h : 0;
527
527
  return i = (e) => o.format(new Date(e + s)), Le.set(r, i), i;
528
528
  }
529
529
  //#endregion
@@ -633,7 +633,7 @@ var Je = 20 * 36e5;
633
633
  function Ye(e) {
634
634
  let t = Math.min(e.length, 64);
635
635
  if (t < 2) return;
636
- let n = le(e), r = Infinity;
636
+ let n = ue(e), r = Infinity;
637
637
  for (let i = 1; i < t; i++) {
638
638
  let t = Math.abs(e[i].time - e[i - 1].time) * n;
639
639
  t > 0 && t < r && (r = t);
@@ -648,30 +648,30 @@ var Ze = Date.UTC(1970, 0, 5), Qe = C.m, E = C.d, $e = 24, et = {
648
648
  count: 1,
649
649
  unit: "m"
650
650
  }, tt = 256, D = /* @__PURE__ */ new Map();
651
- function nt(e) {
651
+ function O(e) {
652
652
  let t = D.get(e);
653
653
  return t || (t = w(e) ?? et, D.size >= tt && D.clear(), D.set(e, t)), t;
654
654
  }
655
- function rt({ unit: e }) {
655
+ function nt({ unit: e }) {
656
656
  return e === "d" || e === "w" || e === "M";
657
657
  }
658
+ function rt(e) {
659
+ return e.unit === "h" ? e.count > 1 && $e % e.count === 0 : nt(e);
660
+ }
658
661
  function it(e) {
659
- return e.unit === "h" ? e.count > 1 && $e % e.count === 0 : rt(e);
662
+ return rt(O(e));
660
663
  }
661
664
  function at(e) {
662
- return it(nt(e));
665
+ return nt(O(e));
663
666
  }
664
667
  function ot(e) {
665
- return rt(nt(e));
666
- }
667
- function st(e) {
668
668
  return e !== void 0 && !x(e);
669
669
  }
670
- function ct(e, t, n = 1) {
671
- let r = nt(t), i = typeof n == "number" ? n : n.weekStartsOn ?? 1, a = typeof n == "number" ? void 0 : n.timeZone;
672
- return !st(a) || !it(r) || typeof n == "object" && n.dates && e % E === 0 ? lt(e, r, i) : Ie(lt(e + S(a, e) * Qe, r, i), a);
670
+ function st(e, t, n = 1) {
671
+ let r = O(t), i = typeof n == "number" ? n : n.weekStartsOn ?? 1, a = typeof n == "number" ? void 0 : n.timeZone;
672
+ return !ot(a) || !rt(r) || typeof n == "object" && n.dates && e % E === 0 ? ct(e, r, i) : Ie(ct(e + S(a, e) * Qe, r, i), a);
673
673
  }
674
- function lt(e, { count: t, unit: n }, r) {
674
+ function ct(e, { count: t, unit: n }, r) {
675
675
  if (n === "s" || n === "m" || n === "h" || n === "d") {
676
676
  let r = t * C[n];
677
677
  return Math.floor(e / r) * r;
@@ -686,62 +686,62 @@ function lt(e, { count: t, unit: n }, r) {
686
686
  let a = i.getUTCFullYear() * 12 + i.getUTCMonth(), o = Math.floor(a / t) * t;
687
687
  return Date.UTC(Math.floor(o / 12), o % 12, 1);
688
688
  }
689
- function ut(e, t, n) {
690
- return e % E === 0 ? 0 : n && ct(e, "1d", { timeZone: n }) === e ? n : t;
689
+ function lt(e, t, n) {
690
+ return e % E === 0 ? 0 : n && st(e, "1d", { timeZone: n }) === e ? n : t;
691
691
  }
692
- function dt(e, t, n) {
693
- return Ke(e, ut(e, t, n));
692
+ function ut(e, t, n) {
693
+ return Ke(e, lt(e, t, n));
694
694
  }
695
695
  //#endregion
696
696
  //#region src/utils/precision.ts
697
- var ft = 64, O = /* @__PURE__ */ new Map();
698
- function pt(e, t) {
699
- let n = `${e}|${t}`, r = O.get(n);
700
- return r || (O.size >= ft && O.clear(), r = new Intl.NumberFormat(e, {
697
+ var dt = 64, k = /* @__PURE__ */ new Map();
698
+ function ft(e, t) {
699
+ let n = `${e}|${t}`, r = k.get(n);
700
+ return r || (k.size >= dt && k.clear(), r = new Intl.NumberFormat(e, {
701
701
  minimumFractionDigits: t,
702
702
  maximumFractionDigits: t
703
- }), O.set(n, r)), r;
703
+ }), k.set(n, r)), r;
704
704
  }
705
- function mt(e, t, n) {
706
- return t.formatPrice ? t.formatPrice(e) : k(e, n ?? t.pricePrecision ?? ht(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
705
+ function pt(e, t, n) {
706
+ return t.formatPrice ? t.formatPrice(e) : A(e, n ?? t.pricePrecision ?? mt(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
707
707
  }
708
- function k(e, t = 2, n = "en-US") {
709
- return pt(n, t).format(e);
708
+ function A(e, t = 2, n = "en-US") {
709
+ return ft(n, t).format(e);
710
710
  }
711
- function ht(e, t) {
711
+ function mt(e, t) {
712
712
  if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
713
- let n = se(e, t, 8);
713
+ let n = ce(e, t, 8);
714
714
  return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
715
715
  }
716
- var gt = 2;
717
- function _t(e, t, n, r = 2, i = "en-US") {
716
+ var ht = 2;
717
+ function gt(e, t, n, r = 2, i = "en-US") {
718
718
  if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
719
719
  if (t === "percentage") {
720
- let t = (e / n - 1) * 100, r = k(Math.abs(t), gt, i);
721
- return `${r === k(0, gt, i) ? "" : t > 0 ? "+" : "-"}${r}%`;
720
+ let t = (e / n - 1) * 100, r = A(Math.abs(t), ht, i);
721
+ return `${r === A(0, ht, i) ? "" : t > 0 ? "+" : "-"}${r}%`;
722
722
  }
723
- return k(e / n * 100, 2, i);
723
+ return A(e / n * 100, 2, i);
724
724
  }
725
- return k(e, r, i);
725
+ return A(e, r, i);
726
726
  }
727
- function vt(e, t, n = 1) {
727
+ function _t(e, t, n = 1) {
728
728
  let r = Number.isInteger(n) && n > 1 ? n : 1;
729
729
  if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
730
730
  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)) : "";
731
731
  return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
732
732
  }
733
- function yt(e) {
733
+ function vt(e) {
734
734
  if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
735
735
  let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
736
736
  return 1 / (e.denominator * t);
737
737
  }
738
- function bt(e) {
739
- return e ? typeof e == "function" ? e : yt(e) === null ? null : (t) => vt(t, e.denominator, e.subDenominator) : null;
738
+ function yt(e) {
739
+ return e ? typeof e == "function" ? e : vt(e) === null ? null : (t) => _t(t, e.denominator, e.subDenominator) : null;
740
740
  }
741
- function xt(e) {
741
+ function bt(e) {
742
742
  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);
743
743
  }
744
- function St(e) {
744
+ function xt(e) {
745
745
  let t = 0;
746
746
  for (let n of e) {
747
747
  let e = n.toString(), r = e.indexOf(".");
@@ -751,7 +751,7 @@ function St(e) {
751
751
  }
752
752
  //#endregion
753
753
  //#region src/utils/priceSource.ts
754
- var Ct = [
754
+ var St = [
755
755
  "close",
756
756
  "open",
757
757
  "high",
@@ -761,10 +761,10 @@ var Ct = [
761
761
  "ohlc4",
762
762
  "hlcc4"
763
763
  ];
764
- function wt(e) {
765
- return typeof e == "string" && Ct.includes(e);
764
+ function Ct(e) {
765
+ return typeof e == "string" && St.includes(e);
766
766
  }
767
- function Tt(e, t) {
767
+ function wt(e, t) {
768
768
  switch (t) {
769
769
  case "open": return e.open;
770
770
  case "high": return e.high;
@@ -776,13 +776,13 @@ function Tt(e, t) {
776
776
  default: return e.close;
777
777
  }
778
778
  }
779
- var Et = /^ind:([^:]+):(.+)$/;
780
- function Dt(e, t) {
779
+ var Tt = /^ind:([^:]+):(.+)$/;
780
+ function Et(e, t) {
781
781
  return `ind:${e}:${t}`;
782
782
  }
783
- function Ot(e) {
783
+ function Dt(e) {
784
784
  if (typeof e != "string") return null;
785
- let t = Et.exec(e);
785
+ let t = Tt.exec(e);
786
786
  return t ? {
787
787
  instanceId: t[1],
788
788
  key: t[2]
@@ -790,11 +790,11 @@ function Ot(e) {
790
790
  }
791
791
  //#endregion
792
792
  //#region src/utils/resample.ts
793
- var kt = 864e5, At = 6e4;
794
- function jt(e, t, n = 1) {
795
- let r = Mt(e, t, n), i = [], a = null;
793
+ var Ot = 864e5, kt = 6e4;
794
+ function At(e, t, n = 1) {
795
+ let r = jt(e, t, n), i = [], a = null;
796
796
  for (let n of e) {
797
- let e = ct(n.time, t, r);
797
+ let e = st(n.time, t, r);
798
798
  a === null || e !== a.time ? (a = {
799
799
  time: e,
800
800
  open: n.open,
@@ -806,27 +806,27 @@ function jt(e, t, n = 1) {
806
806
  }
807
807
  return i;
808
808
  }
809
- function Mt(e, t, n) {
810
- return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || x(n.timeZone) || !at(t) ? n : {
809
+ function jt(e, t, n) {
810
+ return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || x(n.timeZone) || !it(t) ? n : {
811
811
  ...n,
812
812
  dates: Ye(e) === !0
813
813
  };
814
814
  }
815
- var A = (e) => e === "s" || e === "m" || e === "h" || e === "d";
815
+ var Mt = (e) => e === "s" || e === "m" || e === "h" || e === "d";
816
816
  function Nt(e, t) {
817
817
  let n = w(e), r = w(t);
818
818
  if (!n || !r) return !1;
819
819
  let i = T(e);
820
- return n.unit === "d" && n.count > 1 ? !1 : A(r.unit) ? A(n.unit) && T(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : A(n.unit) && kt % i === 0;
820
+ return n.unit === "d" && n.count > 1 ? !1 : Mt(r.unit) ? Mt(n.unit) && T(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : Mt(n.unit) && Ot % i === 0;
821
821
  }
822
822
  function Pt(e, t) {
823
823
  let n = T(e);
824
- if (!(n < kt)) return !0;
824
+ if (!(n < Ot)) return !0;
825
825
  let r = (/* @__PURE__ */ new Date()).getUTCFullYear();
826
- return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => S(t, e) * At % n === 0);
826
+ return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => S(t, e) * kt % n === 0);
827
827
  }
828
828
  function Ft(e, t, n = {}) {
829
- let { timeZone: r } = n, i = r !== void 0 && !x(r) && at(e) ? r : void 0, a = null, o = 0;
829
+ let { timeZone: r } = n, i = r !== void 0 && !x(r) && it(e) ? r : void 0, a = null, o = 0;
830
830
  for (let n of t) {
831
831
  if (!Nt(n, e) || i !== void 0 && !Pt(n, i)) continue;
832
832
  let t = T(n);
@@ -868,7 +868,7 @@ function Rt(e) {
868
868
  function zt(e) {
869
869
  return e?.timeZone ?? e?.timezone;
870
870
  }
871
- function j(e) {
871
+ function Bt(e) {
872
872
  let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
873
873
  if (!t) return null;
874
874
  let n = Number(t[1]), r = Number(t[2]);
@@ -876,26 +876,26 @@ function j(e) {
876
876
  }
877
877
  //#endregion
878
878
  //#region src/utils/marketStatus.ts
879
- var M = 864e5, N = 6e4, Bt = 8;
880
- function Vt(e, t) {
879
+ var j = 864e5, M = 6e4, Vt = 8;
880
+ function Ht(e, t) {
881
881
  let n = zt(e), r = (e?.sessions ?? []).flatMap((e) => {
882
- let t = j(e.start), n = j(e.end);
882
+ let t = Bt(e.start), n = Bt(e.end);
883
883
  return t === null || n === null || t === n ? [] : [{
884
884
  start: t,
885
885
  end: n,
886
886
  days: Array.isArray(e.days) ? e.days : null
887
887
  }];
888
888
  });
889
- if (!n || !Ne(n) || r.length === 0 || !Number.isFinite(t)) return {
889
+ if (!n || !v(n) || r.length === 0 || !Number.isFinite(t)) return {
890
890
  state: "always",
891
891
  next: null
892
892
  };
893
- let i = b(n, t) * N, a = Math.floor((t + i) / M) * M, o = (e) => e - b(n, e - b(n, e - i) * N) * N, s = [];
894
- for (let e = -1; e <= Bt; e++) {
895
- let t = a + e * M, n = (Math.floor(t / M) + 4) % 7;
893
+ let i = y(n, t) * M, a = Math.floor((t + i) / j) * j, o = (e) => e - y(n, e - y(n, e - i) * M) * M, s = [];
894
+ for (let e = -1; e <= Vt; e++) {
895
+ let t = a + e * j, n = (Math.floor(t / j) + 4) % 7;
896
896
  for (let e of r) {
897
897
  if (e.days && !e.days.includes(n)) continue;
898
- let r = t + e.start * N, i = (e.end > e.start ? t : t + M) + e.end * N;
898
+ let r = t + e.start * M, i = (e.end > e.start ? t : t + j) + e.end * M;
899
899
  s.push([o(r), o(i)]);
900
900
  }
901
901
  }
@@ -918,15 +918,15 @@ function Vt(e, t) {
918
918
  }
919
919
  //#endregion
920
920
  //#region src/utils/drawingOptions.ts
921
- var Ht = 48, Ut = 2e3, Wt = 1e4;
922
- function Gt(e) {
921
+ var Ut = 48, Wt = 2e3, Gt = 1e4;
922
+ function Kt(e) {
923
923
  if (!Array.isArray(e)) return;
924
924
  let t = [];
925
925
  for (let n of e) {
926
- if (t.length >= Ht) break;
926
+ if (t.length >= Ut) break;
927
927
  if (typeof n != "object" || !n) continue;
928
928
  let { value: e, visible: r, color: i } = n;
929
- if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > Wt || r !== void 0 && typeof r != "boolean") continue;
929
+ if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > Gt || r !== void 0 && typeof r != "boolean") continue;
930
930
  let a = {
931
931
  value: e,
932
932
  visible: r ?? !0
@@ -935,98 +935,98 @@ function Gt(e) {
935
935
  }
936
936
  return t;
937
937
  }
938
- function Kt(e, t) {
938
+ function qt(e, t) {
939
939
  switch (e.kind) {
940
940
  case "boolean": return typeof t == "boolean" ? t : void 0;
941
941
  case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
942
942
  case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
943
- case "levels": return Gt(t);
944
- case "text": return typeof t == "string" ? t.slice(0, Ut) : void 0;
943
+ case "levels": return Kt(t);
944
+ case "text": return typeof t == "string" ? t.slice(0, Wt) : void 0;
945
945
  }
946
946
  }
947
- function qt(e, t) {
947
+ function Jt(e, t) {
948
948
  if (!e || typeof t != "object" || !t) return {};
949
949
  let n = {};
950
950
  for (let [r, i] of Object.entries(t)) {
951
951
  let t = e[r];
952
952
  if (!t) continue;
953
- let a = Kt(t, i);
953
+ let a = qt(t, i);
954
954
  a !== void 0 && (n[r] = a);
955
955
  }
956
956
  return n;
957
957
  }
958
- function Jt(e) {
958
+ function Yt(e) {
959
959
  return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
960
960
  }
961
- function Yt(e, t, n) {
961
+ function Xt(e, t, n) {
962
962
  let r = e?.[n];
963
- return r ? Jt((t && n in t ? Kt(r, t[n]) : void 0) ?? r.default) : t?.[n];
963
+ return r ? Yt((t && n in t ? qt(r, t[n]) : void 0) ?? r.default) : t?.[n];
964
964
  }
965
- function Xt(e, t) {
965
+ function Zt(e, t) {
966
966
  let n = {};
967
- for (let r of Object.keys(e ?? {})) n[r] = Yt(e, t, r);
967
+ for (let r of Object.keys(e ?? {})) n[r] = Xt(e, t, r);
968
968
  return n;
969
969
  }
970
970
  //#endregion
971
971
  //#region src/utils/drawingStyle.ts
972
- var Zt = [
972
+ var Qt = [
973
973
  "solid",
974
974
  "dashed",
975
975
  "dotted"
976
- ], Qt = 64, $t = 2e3, en = 20, tn = 200;
977
- function nn(e, t, n) {
976
+ ], $t = 64, en = 2e3, tn = 20, nn = 200;
977
+ function rn(e, t, n) {
978
978
  return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
979
979
  }
980
- function rn(e) {
981
- return typeof e == "string" && e.length > 0 && e.length <= Qt ? e : void 0;
982
- }
983
980
  function an(e) {
981
+ return typeof e == "string" && e.length > 0 && e.length <= $t ? e : void 0;
982
+ }
983
+ function on(e) {
984
984
  if (typeof e != "object" || !e) return {};
985
- let t = e, n = {}, r = rn(t.color);
985
+ let t = e, n = {}, r = an(t.color);
986
986
  r !== void 0 && (n.color = r);
987
- let i = nn(t.lineWidth, .5, en);
988
- i !== void 0 && (n.lineWidth = i), Zt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
989
- let a = rn(t.fillColor);
987
+ let i = rn(t.lineWidth, .5, tn);
988
+ i !== void 0 && (n.lineWidth = i), Qt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
989
+ let a = an(t.fillColor);
990
990
  a !== void 0 && (n.fillColor = a);
991
- let o = nn(t.fillOpacity, 0, 1);
991
+ let o = rn(t.fillOpacity, 0, 1);
992
992
  o !== void 0 && (n.fillOpacity = o);
993
- let s = nn(t.fontSize, 6, tn);
994
- return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, $t)), n;
993
+ let s = rn(t.fontSize, 6, nn);
994
+ return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, en)), n;
995
995
  }
996
996
  //#endregion
997
997
  //#region src/utils/chartTypeOptions.ts
998
- var P = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, on = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, F = (e) => typeof e == "object" && !!e && !Array.isArray(e);
998
+ 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);
999
999
  function sn(e) {
1000
1000
  if (!F(e)) return {};
1001
1001
  let t = {};
1002
1002
  if (F(e.renko)) {
1003
1003
  let { boxSize: n, atrPeriod: r } = e.renko;
1004
1004
  t.renko = {
1005
- ...P(n) || n === "atr" ? { boxSize: n } : {},
1006
- ...on(r, 1, 500) ? { atrPeriod: r } : {}
1005
+ ...N(n) || n === "atr" ? { boxSize: n } : {},
1006
+ ...P(r, 1, 500) ? { atrPeriod: r } : {}
1007
1007
  };
1008
1008
  }
1009
1009
  if (F(e.lineBreak)) {
1010
1010
  let { lines: n } = e.lineBreak;
1011
- t.lineBreak = on(n, 1, 10) ? { lines: n } : {};
1011
+ t.lineBreak = P(n, 1, 10) ? { lines: n } : {};
1012
1012
  }
1013
1013
  if (F(e.kagi)) {
1014
1014
  let { reversal: n, reversalType: r } = e.kagi;
1015
1015
  t.kagi = {
1016
- ...P(n) ? { reversal: n } : {},
1016
+ ...N(n) ? { reversal: n } : {},
1017
1017
  ...r === "percent" || r === "price" ? { reversalType: r } : {}
1018
1018
  };
1019
1019
  }
1020
1020
  if (F(e.pointAndFigure)) {
1021
1021
  let { boxSize: n, reversal: r } = e.pointAndFigure;
1022
1022
  t.pointAndFigure = {
1023
- ...P(n) || n === "auto" ? { boxSize: n } : {},
1024
- ...on(r, 1, 10) ? { reversal: r } : {}
1023
+ ...N(n) || n === "auto" ? { boxSize: n } : {},
1024
+ ...P(r, 1, 10) ? { reversal: r } : {}
1025
1025
  };
1026
1026
  }
1027
1027
  if (F(e.rangeBars)) {
1028
1028
  let { range: n } = e.rangeBars;
1029
- t.rangeBars = P(n) || n === "auto" ? { range: n } : {};
1029
+ t.rangeBars = N(n) || n === "auto" ? { range: n } : {};
1030
1030
  }
1031
1031
  return t;
1032
1032
  }
@@ -1050,7 +1050,7 @@ var cn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
1050
1050
  ink: "#131416"
1051
1051
  }, dn = .22;
1052
1052
  function L(e) {
1053
- return m(e, dn);
1053
+ return p(e, dn);
1054
1054
  }
1055
1055
  var fn = "#fbfaf6", R = "#1b1d21", pn = "#131416", z = "#e6e3dc", mn = "#1f7a5c", hn = "#b8423f", gn = "#4fae8a", _n = "#e2706b", vn = "#6a6966", yn = "#8d8a84", bn = {
1056
1056
  ceiling: "#FF00FF",
@@ -1078,10 +1078,10 @@ var fn = "#fbfaf6", R = "#1b1d21", pn = "#131416", z = "#e6e3dc", mn = "#1f7a5c"
1078
1078
  candleUpWick: gn,
1079
1079
  candleDownWick: _n,
1080
1080
  lineColor: z,
1081
- areaTopColor: m(z, .14),
1082
- areaBottomColor: m(z, 0),
1083
- volumeUp: m(z, .14),
1084
- volumeDown: m(z, .08),
1081
+ areaTopColor: p(z, .14),
1082
+ areaBottomColor: p(z, 0),
1083
+ volumeUp: p(z, .14),
1084
+ volumeDown: p(z, .08),
1085
1085
  axisLine: "#2a2b2f",
1086
1086
  axisLabel: "#a9a6a0",
1087
1087
  axisLabelBackground: "#232427",
@@ -1099,10 +1099,10 @@ var fn = "#fbfaf6", R = "#1b1d21", pn = "#131416", z = "#e6e3dc", mn = "#1f7a5c"
1099
1099
  candleUpWick: mn,
1100
1100
  candleDownWick: hn,
1101
1101
  lineColor: R,
1102
- areaTopColor: m(R, .12),
1103
- areaBottomColor: m(R, 0),
1104
- volumeUp: m(R, .13),
1105
- volumeDown: m(R, .08),
1102
+ areaTopColor: p(R, .12),
1103
+ areaBottomColor: p(R, 0),
1104
+ volumeUp: p(R, .13),
1105
+ volumeDown: p(R, .08),
1106
1106
  axisLine: "#cfcac0",
1107
1107
  axisLabel: "#4a4e57",
1108
1108
  axisLabelBackground: "#eeebe3",
@@ -1704,9 +1704,13 @@ var dr = [
1704
1704
  [1e8, "억"],
1705
1705
  [1e4, "만"]
1706
1706
  ];
1707
- function fr(e, t) {
1707
+ function fr(e) {
1708
+ return /^ko([-_]|$)/i.test(e);
1709
+ }
1710
+ function pr(e, t) {
1708
1711
  let n = t ?? K;
1709
- if (/^ko([-_]|$)/i.test(n)) {
1712
+ if (!Number.isFinite(e)) return String(e);
1713
+ if (fr(n)) {
1710
1714
  for (let [t, r] of dr) if (Math.round(e / t * 100) >= 100) return q(e / t, 2, n) + r;
1711
1715
  return q(e, 0, n);
1712
1716
  }
@@ -1721,14 +1725,14 @@ var J = {
1721
1725
  ceiling: "#D946EF",
1722
1726
  floor: "#06B6D4",
1723
1727
  reference: "#EAB308"
1724
- }, Y = "Asia/Ho_Chi_Minh", pr = {
1728
+ }, Y = "Asia/Ho_Chi_Minh", mr = {
1725
1729
  up: "#E8313F",
1726
1730
  down: "#2F6FEB",
1727
1731
  unchanged: "#8B8F99",
1728
1732
  ceiling: "#C2121F",
1729
1733
  floor: "#1E4FC2",
1730
1734
  reference: "#8B8F99"
1731
- }, mr = "Asia/Seoul", hr = [
1735
+ }, hr = "Asia/Seoul", gr = [
1732
1736
  {
1733
1737
  name: "ATO",
1734
1738
  startTime: "09:00",
@@ -1759,7 +1763,7 @@ var J = {
1759
1763
  endTime: "14:45",
1760
1764
  type: "preClose"
1761
1765
  }
1762
- ], gr = [
1766
+ ], _r = [
1763
1767
  {
1764
1768
  name: "Phiên 1",
1765
1769
  startTime: "09:15",
@@ -1790,7 +1794,7 @@ var J = {
1790
1794
  endTime: "15:00",
1791
1795
  type: "postClose"
1792
1796
  }
1793
- ], _r = [
1797
+ ], vr = [
1794
1798
  {
1795
1799
  name: "Phiên 1",
1796
1800
  startTime: "09:15",
@@ -1809,7 +1813,7 @@ var J = {
1809
1813
  endTime: "14:30",
1810
1814
  type: "continuous"
1811
1815
  }
1812
- ], vr = [
1816
+ ], yr = [
1813
1817
  {
1814
1818
  name: "ATO",
1815
1819
  startTime: "08:45",
@@ -1840,7 +1844,7 @@ var J = {
1840
1844
  endTime: "14:45",
1841
1845
  type: "preClose"
1842
1846
  }
1843
- ], yr = [
1847
+ ], br = [
1844
1848
  {
1845
1849
  name: "장전 동시호가",
1846
1850
  startTime: "08:30",
@@ -1871,7 +1875,7 @@ var J = {
1871
1875
  endTime: "20:00",
1872
1876
  type: "postClose"
1873
1877
  }
1874
- ], br = [
1878
+ ], xr = [
1875
1879
  {
1876
1880
  name: "프리마켓",
1877
1881
  startTime: "08:00",
@@ -1890,7 +1894,7 @@ var J = {
1890
1894
  endTime: "20:00",
1891
1895
  type: "postClose"
1892
1896
  }
1893
- ], xr = [
1897
+ ], Sr = [
1894
1898
  {
1895
1899
  from: 0,
1896
1900
  step: 1
@@ -1919,7 +1923,7 @@ var J = {
1919
1923
  from: 5e5,
1920
1924
  step: 1e3
1921
1925
  }
1922
- ], Sr = [
1926
+ ], Cr = [
1923
1927
  {
1924
1928
  from: 0,
1925
1929
  step: 1e-8
@@ -1980,7 +1984,7 @@ var J = {
1980
1984
  from: 1e6,
1981
1985
  step: 1e3
1982
1986
  }
1983
- ], Cr = {
1987
+ ], wr = {
1984
1988
  type: "stock",
1985
1989
  exchange: "HOSE",
1986
1990
  currency: "VND",
@@ -2007,12 +2011,12 @@ var J = {
2007
2011
  ceilingPercent: 7,
2008
2012
  floorPercent: 7
2009
2013
  },
2010
- sessions: hr,
2014
+ sessions: gr,
2011
2015
  colorScheme: J
2012
- }, wr = {
2013
- ...Cr,
2014
- priceSteps: void 0
2015
2016
  }, Tr = {
2017
+ ...wr,
2018
+ priceSteps: void 0
2019
+ }, Er = {
2016
2020
  type: "stock",
2017
2021
  exchange: "HNX",
2018
2022
  currency: "VND",
@@ -2025,9 +2029,9 @@ var J = {
2025
2029
  ceilingPercent: 10,
2026
2030
  floorPercent: 10
2027
2031
  },
2028
- sessions: gr,
2032
+ sessions: _r,
2029
2033
  colorScheme: J
2030
- }, Er = {
2034
+ }, Dr = {
2031
2035
  type: "stock",
2032
2036
  exchange: "UPCOM",
2033
2037
  currency: "VND",
@@ -2040,9 +2044,9 @@ var J = {
2040
2044
  ceilingPercent: 15,
2041
2045
  floorPercent: 15
2042
2046
  },
2043
- sessions: _r,
2047
+ sessions: vr,
2044
2048
  colorScheme: J
2045
- }, Dr = {
2049
+ }, Or = {
2046
2050
  type: "futures",
2047
2051
  exchange: "HNX",
2048
2052
  currency: "VND",
@@ -2056,44 +2060,44 @@ var J = {
2056
2060
  ceilingPercent: 7,
2057
2061
  floorPercent: 7
2058
2062
  },
2059
- sessions: vr,
2063
+ sessions: yr,
2060
2064
  colorScheme: J
2061
- }, Or = {
2065
+ }, kr = {
2062
2066
  type: "stock",
2063
2067
  exchange: "KRX",
2064
2068
  currency: "KRW",
2065
2069
  pricePrecision: 0,
2066
2070
  volumeUnit: 1,
2067
2071
  priceStep: 1,
2068
- priceSteps: xr,
2069
- timeZone: mr,
2072
+ priceSteps: Sr,
2073
+ timeZone: hr,
2070
2074
  priceLimits: {
2071
2075
  enabled: !0,
2072
2076
  ceilingPercent: 30,
2073
2077
  floorPercent: 30,
2074
2078
  roundMove: !0
2075
2079
  },
2076
- sessions: yr,
2077
- colorScheme: pr
2078
- }, kr = {
2079
- ...Or,
2080
- exchange: "NXT",
2081
- sessions: br
2080
+ sessions: br,
2081
+ colorScheme: mr
2082
2082
  }, Ar = {
2083
+ ...kr,
2084
+ exchange: "NXT",
2085
+ sessions: xr
2086
+ }, jr = {
2083
2087
  type: "crypto",
2084
2088
  exchange: "UPBIT",
2085
2089
  currency: "KRW",
2086
2090
  priceStep: 1e-8,
2087
- priceSteps: Sr,
2088
- timeZone: mr,
2091
+ priceSteps: Cr,
2092
+ timeZone: hr,
2089
2093
  priceLimits: { enabled: !1 },
2090
- colorScheme: pr
2091
- }, jr = {
2094
+ colorScheme: mr
2095
+ }, Mr = {
2092
2096
  type: "crypto",
2093
2097
  currency: "USDT",
2094
2098
  pricePrecision: 2,
2095
2099
  priceLimits: { enabled: !1 }
2096
- }, Mr = {
2100
+ }, Nr = {
2097
2101
  type: "stock",
2098
2102
  exchange: "NYSE",
2099
2103
  currency: "USD",
@@ -2122,10 +2126,10 @@ var J = {
2122
2126
  }
2123
2127
  ]
2124
2128
  };
2125
- function Nr(e) {
2126
- return Pr(e, J);
2129
+ function Pr(e) {
2130
+ return Fr(e, J);
2127
2131
  }
2128
- function Pr(e, t) {
2132
+ function Fr(e, t) {
2129
2133
  return {
2130
2134
  ...e,
2131
2135
  candleUp: t.up,
@@ -2135,25 +2139,25 @@ function Pr(e, t) {
2135
2139
  };
2136
2140
  }
2137
2141
  var X = 1e-9;
2138
- function Fr(e, t) {
2142
+ function Ir(e, t) {
2139
2143
  let n = t.priceStep;
2140
2144
  for (let r of t.priceSteps ?? []) e + X >= r.from && (n = r.step);
2141
2145
  return n !== void 0 && n > 0 ? n : void 0;
2142
2146
  }
2143
- function Ir(e, t) {
2147
+ function Lr(e, t) {
2144
2148
  let n = t.priceStep;
2145
2149
  for (let r of t.priceSteps ?? []) e - X > r.from && (n = r.step);
2146
2150
  return n !== void 0 && n > 0 ? n : void 0;
2147
2151
  }
2148
2152
  function Z(e, t, n = "nearest") {
2149
- let r = Fr(e, t);
2153
+ let r = Ir(e, t);
2150
2154
  if (r === void 0 || !Number.isFinite(e)) return e;
2151
2155
  let i = e / r, a = n === "down" ? Math.floor(i + X) : n === "up" ? Math.ceil(i - X) : Math.round(i);
2152
2156
  return Number((a * r).toFixed(Rt(r)));
2153
2157
  }
2154
- function Lr(e, t) {
2158
+ function Rr(e, t) {
2155
2159
  if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
2156
- 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 = Fr(i, t);
2160
+ 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 = Ir(i, t);
2157
2161
  if (s === void 0) return {
2158
2162
  ceiling: a,
2159
2163
  floor: o,
@@ -2174,14 +2178,14 @@ function Lr(e, t) {
2174
2178
  };
2175
2179
  l = Z(i + Z(i * n, e, "down"), t, "down"), u = Z(i - Z(i * r, e, "down"), t, "down");
2176
2180
  } else l = Z(a, t, "down"), u = Z(o, t, "up");
2177
- return l <= i && (l = c), u >= i && (u = Z(i - (Ir(i, t) ?? s), t)), u <= 0 && (u = i), {
2181
+ return l <= i && (l = c), u >= i && (u = Z(i - (Lr(i, t) ?? s), t)), u <= 0 && (u = i), {
2178
2182
  ceiling: l,
2179
2183
  floor: u,
2180
2184
  reference: i
2181
2185
  };
2182
2186
  }
2183
2187
  var Q = (e, t) => Math.round(e * t * 1e9) / 1e9;
2184
- function Rr(e, t) {
2188
+ function zr(e, t) {
2185
2189
  let n = Math.round(Math.log10(t));
2186
2190
  return {
2187
2191
  ...e,
@@ -2197,11 +2201,11 @@ function Rr(e, t) {
2197
2201
  }
2198
2202
  };
2199
2203
  }
2200
- var zr = 6e4, Br = 864e5;
2201
- function Vr(e, t) {
2204
+ var Br = 6e4, Vr = 864e5;
2205
+ function Hr(e, t) {
2202
2206
  let n, r;
2203
2207
  if (t) {
2204
- let i = new Date(e + b(t, e) * zr);
2208
+ let i = new Date(e + y(t, e) * Br);
2205
2209
  n = i.getUTCHours(), r = i.getUTCMinutes();
2206
2210
  } else {
2207
2211
  let t = new Date(e);
@@ -2209,31 +2213,31 @@ function Vr(e, t) {
2209
2213
  }
2210
2214
  return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
2211
2215
  }
2212
- function Hr(e, t = Date.now(), n) {
2213
- if (n !== void 0 && !Ne(n)) return null;
2214
- let r = Vr(t, n);
2216
+ function Ur(e, t = Date.now(), n) {
2217
+ if (n !== void 0 && !v(n)) return null;
2218
+ let r = Hr(t, n);
2215
2219
  for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
2216
2220
  return null;
2217
2221
  }
2218
- var $ = (e) => String(e).padStart(2, "0"), Ur = (e) => {
2222
+ var $ = (e) => String(e).padStart(2, "0"), Wr = (e) => {
2219
2223
  let t = new Date(e);
2220
2224
  return `${t.getUTCFullYear()}-${$(t.getUTCMonth() + 1)}-${$(t.getUTCDate())}`;
2221
- }, Wr = 4, Gr = 7 * 36e5;
2222
- function Kr(e, t, n) {
2223
- let r = Date.UTC(e, t - 1, 1), i = 1 + (Wr - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
2225
+ }, Gr = 4, Kr = 7 * 36e5;
2226
+ function qr(e, t, n) {
2227
+ let r = Date.UTC(e, t - 1, 1), i = 1 + (Gr - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
2224
2228
  let t = new Date(e).getUTCDay();
2225
- return t === 0 || t === 6 || (n?.(Ur(e)) ?? !1);
2229
+ return t === 0 || t === 6 || (n?.(Wr(e)) ?? !1);
2226
2230
  };
2227
- for (; o(a);) a -= Br;
2228
- return Ur(a);
2231
+ for (; o(a);) a -= Vr;
2232
+ return Wr(a);
2229
2233
  }
2230
- function qr(e, t) {
2231
- let n = Ur(e + Gr), r = (e, n) => ({
2234
+ function Jr(e, t) {
2235
+ let n = Wr(e + Kr), r = (e, n) => ({
2232
2236
  symbol: `VN30F${$(e % 100)}${$(n)}`,
2233
2237
  year: e,
2234
2238
  month: n,
2235
- lastTradingDay: Kr(e, n, t)
2236
- }), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + Gr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
2239
+ lastTradingDay: qr(e, n, t)
2240
+ }), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + Kr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
2237
2241
  n > o.lastTradingDay && (o = i(o));
2238
2242
  let s = [o, i(o)], c = i(s[1]);
2239
2243
  for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
@@ -2241,7 +2245,7 @@ function qr(e, t) {
2241
2245
  }
2242
2246
  //#endregion
2243
2247
  //#region src/icons/iconSet.ts
2244
- var Jr = {
2248
+ var Yr = {
2245
2249
  cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
2246
2250
  trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
2247
2251
  trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
@@ -2375,7 +2379,7 @@ var Jr = {
2375
2379
  ]
2376
2380
  ] },
2377
2381
  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" }
2378
- }, Yr = {
2382
+ }, Xr = {
2379
2383
  trendLine: {
2380
2384
  d: "M5 18L19 6",
2381
2385
  dots: [[5, 18], [19, 6]]
@@ -2728,7 +2732,7 @@ var Jr = {
2728
2732
  ],
2729
2733
  dash: "M12 3V21"
2730
2734
  }
2731
- }, Xr = {
2735
+ }, Zr = {
2732
2736
  candlestick: {
2733
2737
  d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
2734
2738
  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"]
@@ -2795,21 +2799,21 @@ var Jr = {
2795
2799
  "M16 4.5h3v6h-3z"
2796
2800
  ]
2797
2801
  }
2798
- }, Zr = 1.75, Qr = .22, $r = /* @__PURE__ */ new WeakMap();
2799
- function ei(e) {
2800
- let t = $r.get(e);
2802
+ }, Qr = 1.75, $r = .22, ei = /* @__PURE__ */ new WeakMap();
2803
+ function ti(e) {
2804
+ let t = ei.get(e);
2801
2805
  if (t) return t;
2802
2806
  let n = "";
2803
- e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${Qr}" stroke="none"/>`);
2807
+ e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${$r}" stroke="none"/>`);
2804
2808
  for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
2805
2809
  e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
2806
- for (let [t, r, i = Zr] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
2807
- return $r.set(e, n), n;
2810
+ for (let [t, r, i = Qr] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
2811
+ return ei.set(e, n), n;
2808
2812
  }
2809
- function ti(e, t) {
2810
- 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">${ei(e)}</svg>`;
2813
+ function ni(e, t) {
2814
+ 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">${ti(e)}</svg>`;
2811
2815
  }
2812
2816
  //#endregion
2813
- export { t as CHART_STYLE_KEYS, Xr as CHART_TYPE_ICONS, bn as DARK_PRICE_LIMITS, B as DARK_TERMINAL, Cn as DARK_THEME, Yn as DEFAULT_BAR_SPACING, Jn as DEFAULT_BAR_WIDTH, Un as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, cn as DEFAULT_FONT_FAMILY, $n as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, qn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, Yr as DRAWING_TOOL_ICONS, tr as FIBONACCI, gr as HNX_SESSIONS, hr as HOSE_SESSIONS, Zr as ICON_DOT_RADIUS, Qr as ICON_SOFT_OPACITY, yr as KRX_SESSIONS, pr as KR_COLORS, xn as LIGHT_PRICE_LIMITS, wn as LIGHT_THEME, e as LayerType, jr as MARKET_CRYPTO, Tr as MARKET_HNX, Cr as MARKET_HOSE, wr as MARKET_HOSE_ETF, Or as MARKET_KRX, kr as MARKET_NXT, Mr as MARKET_NYSE, Ar as MARKET_UPBIT_KRW, Er as MARKET_UPCOM, Dr as MARKET_VN30F, Qn as MIN_PANEL_HEIGHT, ce as MS_TIME_THRESHOLD, br as NXT_SESSIONS, er as PHI, Xn as PRICE_AXIS_WIDTH, Ct as PRICE_SOURCES, ln as SANS_FONT_FAMILY, I as TC_PALETTE, Sn as TC_SERIES_COLORS, Wn as TIMEFRAMES_CRYPTO, Kn as TIMEFRAMES_FOREX, Gn as TIMEFRAMES_STOCK, Zn as TIME_AXIS_HEIGHT, Jr as UI_ICONS, _r as UPCOM_SESSIONS, vr as VN30F_SESSIONS, J as VN_COLORS, dn as VOLUME_ALPHA, Ge as alignToTimeframe, ht as autoPricePrecision, dt as barDateParts, ut as barDateZone, le as barTimeUnit, Ye as barsAreDaily, Hn as chartStyleValue, re as clamp, Lr as computePriceLimits, ge as computePriceRange, se as computeTickStep, g as contrastRatio, Pr as createMarketTheme, Nr as createVNTheme, St as detectPrecision, Yt as drawingOption, W as en, pe as findBarIndex, he as fitPriceRange, vt as formatFraction, q as formatNumber, k as formatPrice, _t as formatPriceScaleLabel, We as formatTimestamp, ur as formatVND, xt as formatVolume, fr as formatVolumeLoc, yt as fractionTick, Hr as getCurrentSession, or as getLocale, lr as getLocaleStrings, ve as hexToRgba, ti as iconSvg, Dt as indicatorSource, we as inkOn, ae as inverseLerp, qe as isDateOnly, wt as isPriceSource, Ue as isTimeFrame, x as isUtcTimeZone, Ne as isValidTimeZone, ie as lerp, be as lerpColor, Ln as lineDash, Vt as marketStatus, _e as mergeBar, p as niceNumber, de as normalizeBar, ue as normalizeBarTime, S as offsetAt, me as padPriceRange, Ot as parseIndicatorSource, w as parseTimeframe, nr as phiStep, Ft as pickBaseTimeframe, bt as priceFormatterFor, Fr as priceStepAt, mt as priceTagText, Lt as rankSymbols, Nn as readChartStyleOverrides, sn as readChartTypeOptions, In as readIndicatorPlotStyles, ne as readNews, Pn as readPaneStyle, l as readQuote, Ce as readableOn, cr as registerLocale, jt as resampleBars, zn as resolveChartTheme, Xt as resolveDrawingOptions, V as resolveVolumeColors, Z as roundToPriceStep, oe as roundToStep, qt as sanitizeDrawingOptions, an as sanitizeDrawingStyle, Rr as scaleMarketPrices, j as sessionMinute, ar as setLocale, fe as sliceVisibleData, Tt as sourcePrice, Rt as stepDecimals, zt as symbolTimeZone, sr as t, He as tickBarCount, Ke as timeParts, ct as timeframeBucketStart, at as timeframeFollowsDays, ot as timeframeSpansDays, T as timeframeToMs, Xe as tzLabel, rr as vi, qr as vn30fContracts, Kr as vn30fLastTradingDay, L as volumeColor, Ie as wallToUtc, m as withAlpha, b as zoneOffsetMinutes, Re as zonedDateFormatter };
2817
+ export { t as CHART_STYLE_KEYS, Zr as CHART_TYPE_ICONS, bn as DARK_PRICE_LIMITS, B as DARK_TERMINAL, Cn as DARK_THEME, Yn as DEFAULT_BAR_SPACING, Jn as DEFAULT_BAR_WIDTH, Un as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, cn as DEFAULT_FONT_FAMILY, $n as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, qn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, Xr as DRAWING_TOOL_ICONS, tr as FIBONACCI, _r as HNX_SESSIONS, gr as HOSE_SESSIONS, Qr as ICON_DOT_RADIUS, $r as ICON_SOFT_OPACITY, br as KRX_SESSIONS, mr as KR_COLORS, xn as LIGHT_PRICE_LIMITS, wn as LIGHT_THEME, e as LayerType, Mr as MARKET_CRYPTO, Er as MARKET_HNX, wr as MARKET_HOSE, Tr as MARKET_HOSE_ETF, kr as MARKET_KRX, Ar as MARKET_NXT, Nr as MARKET_NYSE, jr as MARKET_UPBIT_KRW, Dr as MARKET_UPCOM, Or as MARKET_VN30F, Qn as MIN_PANEL_HEIGHT, le as MS_TIME_THRESHOLD, xr as NXT_SESSIONS, er as PHI, Xn as PRICE_AXIS_WIDTH, St as PRICE_SOURCES, ln as SANS_FONT_FAMILY, I as TC_PALETTE, Sn as TC_SERIES_COLORS, Wn as TIMEFRAMES_CRYPTO, Kn as TIMEFRAMES_FOREX, Gn as TIMEFRAMES_STOCK, Zn as TIME_AXIS_HEIGHT, Yr as UI_ICONS, vr as UPCOM_SESSIONS, yr as VN30F_SESSIONS, J as VN_COLORS, dn as VOLUME_ALPHA, Ge as alignToTimeframe, mt as autoPricePrecision, ut as barDateParts, lt as barDateZone, ue as barTimeUnit, Ye as barsAreDaily, Hn as chartStyleValue, re as clamp, Rr as computePriceLimits, _e as computePriceRange, ce as computeTickStep, m as contrastRatio, Fr as createMarketTheme, Pr as createVNTheme, xt as detectPrecision, Xt as drawingOption, W as en, me as findBarIndex, ge as fitPriceRange, _t as formatFraction, q as formatNumber, A as formatPrice, gt as formatPriceScaleLabel, We as formatTimestamp, ur as formatVND, bt as formatVolume, pr as formatVolumeLoc, vt as fractionTick, Ur as getCurrentSession, or as getLocale, lr as getLocaleStrings, ye as hexToRgba, ni as iconSvg, Et as indicatorSource, Ee as inkOn, ae as inverseLerp, qe as isDateOnly, Ct as isPriceSource, Ue as isTimeFrame, x as isUtcTimeZone, v as isValidTimeZone, ie as lerp, Se as lerpColor, Ln as lineDash, Ht as marketStatus, ve as mergeBar, se as niceNumber, fe as normalizeBar, de as normalizeBarTime, S as offsetAt, he as padPriceRange, Dt as parseIndicatorSource, w as parseTimeframe, nr as phiStep, Ft as pickBaseTimeframe, yt as priceFormatterFor, Ir as priceStepAt, pt as priceTagText, Lt as rankSymbols, Nn as readChartStyleOverrides, sn as readChartTypeOptions, In as readIndicatorPlotStyles, ne as readNews, Pn as readPaneStyle, l as readQuote, Te as readableOn, cr as registerLocale, At as resampleBars, zn as resolveChartTheme, Zt as resolveDrawingOptions, V as resolveVolumeColors, Z as roundToPriceStep, oe as roundToStep, Jt as sanitizeDrawingOptions, on as sanitizeDrawingStyle, zr as scaleMarketPrices, Bt as sessionMinute, ar as setLocale, pe as sliceVisibleData, wt as sourcePrice, Rt as stepDecimals, zt as symbolTimeZone, sr as t, He as tickBarCount, Ke as timeParts, st as timeframeBucketStart, it as timeframeFollowsDays, at as timeframeSpansDays, T as timeframeToMs, Xe as tzLabel, fr as usesKoreanUnits, rr as vi, Jr as vn30fContracts, qr as vn30fLastTradingDay, L as volumeColor, Ie as wallToUtc, p as withAlpha, y as zoneOffsetMinutes, Re as zonedDateFormatter };
2814
2818
 
2815
2819
  //# sourceMappingURL=index.js.map