@tradecanvas/commons 1.51.0 → 1.53.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 ie(e, t, n) {
245
245
  function ae(e, t) {
246
246
  return Math.round(e / t) * t;
247
247
  }
248
- function m(e, t) {
248
+ function oe(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 oe(e, t, n) {
253
- return m(m(t - e, !1) / (n - 1), !0);
252
+ function se(e, t, n) {
253
+ return oe(oe(t - e, !1) / (n - 1), !0);
254
254
  }
255
255
  //#endregion
256
256
  //#region src/utils/data.ts
257
- var se = 1e11;
258
- function ce(e) {
257
+ var ce = 1e11;
258
+ function le(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 le(e, t) {
262
+ function ue(e, t) {
263
263
  return t === void 0 ? Math.abs(e) >= 1e11 ? e : e * 1e3 : e * t;
264
264
  }
265
- function ue(e) {
265
+ function de(e) {
266
266
  return {
267
- time: le(e.time ?? e.t ?? 0),
267
+ time: ue(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 ue(e) {
272
272
  volume: e.volume ?? e.v ?? 0
273
273
  };
274
274
  }
275
- function de(e, t, n) {
275
+ function fe(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 fe(e, t) {
279
+ function pe(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 fe(e, t) {
286
286
  }
287
287
  return n;
288
288
  }
289
- function pe(e, t, n, r = !1) {
289
+ function me(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 pe(e, t, n, r = !1) {
301
301
  max: t + a * n
302
302
  };
303
303
  }
304
- function me(e, t, n, r = !1) {
304
+ function he(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 me(e, t, n, r = !1) {
316
316
  max: t + o * n.top
317
317
  };
318
318
  }
319
- function he(e, t, n, r = .05, i = !1) {
319
+ function ge(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 he(e, t, n, r = .05, i = !1) {
326
326
  return s === Infinity ? {
327
327
  min: 0,
328
328
  max: 1
329
- } : pe(s, c, r, i);
329
+ } : me(s, c, r, i);
330
330
  }
331
- function ge(e, t) {
331
+ function _e(e, t) {
332
332
  return {
333
333
  ...e,
334
334
  high: Math.max(e.high, t.price),
@@ -339,18 +339,18 @@ function ge(e, t) {
339
339
  }
340
340
  //#endregion
341
341
  //#region src/utils/color.ts
342
- function _e(e, t = 1) {
342
+ function ve(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 h(e, t) {
346
+ function m(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 _e(n, t);
348
+ if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return ve(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 ve = 3;
353
- function ye(e) {
352
+ var ye = 3;
353
+ function be(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,15 +373,15 @@ function ye(e) {
373
373
  a: Math.min(1, Math.max(0, i))
374
374
  };
375
375
  }
376
- function be(e, t, n) {
377
- let r = ye(e), i = ye(t);
376
+ function xe(e, t, n) {
377
+ let r = be(e), i = be(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(ve))})`;
380
+ return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(ye))})`;
381
381
  }
382
382
  //#endregion
383
383
  //#region src/utils/timezone.ts
384
- var g = 6e4, _ = 1440 * g, v = 15 * g, xe = 8192, y = 7 * _, Se = 4096, Ce = new Set([
384
+ var h = 6e4, Se = 1440 * h, g = 15 * h, Ce = 8192, _ = 7 * Se, we = 4096, Te = new Set([
385
385
  "UTC",
386
386
  "Etc/UTC",
387
387
  "GMT",
@@ -392,9 +392,9 @@ var g = 6e4, _ = 1440 * g, v = 15 * g, xe = 8192, y = 7 * _, Se = 4096, Ce = new
392
392
  "Etc/Universal",
393
393
  "Zulu",
394
394
  "Etc/Zulu"
395
- ]), we = /* @__PURE__ */ new Map(), b = /* @__PURE__ */ new Map(), Te = /* @__PURE__ */ new Map();
396
- function Ee(e) {
397
- let t = we.get(e);
395
+ ]), Ee = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map(), De = /* @__PURE__ */ new Map();
396
+ function Oe(e) {
397
+ let t = Ee.get(e);
398
398
  return t || (t = new Intl.DateTimeFormat("en-US", {
399
399
  timeZone: e,
400
400
  hourCycle: "h23",
@@ -404,34 +404,34 @@ function Ee(e) {
404
404
  hour: "numeric",
405
405
  minute: "numeric",
406
406
  second: "numeric"
407
- }), we.set(e, t)), t;
407
+ }), Ee.set(e, t)), t;
408
408
  }
409
- function x(e) {
409
+ function y(e) {
410
410
  if (!e) return !1;
411
411
  try {
412
- return Ee(e), !0;
412
+ return Oe(e), !0;
413
413
  } catch {
414
414
  return !1;
415
415
  }
416
416
  }
417
- function S(e, t) {
418
- if (!Number.isFinite(t) || Ce.has(e)) return 0;
419
- let n = Te.get(e);
420
- n || (n = /* @__PURE__ */ new Map(), Te.set(e, n));
421
- let r = Math.floor(t / y), i = n.get(r);
422
- return i || (i = De(e, r * y), n.size >= Se && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
417
+ function b(e, t) {
418
+ if (!Number.isFinite(t) || Te.has(e)) return 0;
419
+ let n = De.get(e);
420
+ n || (n = /* @__PURE__ */ new Map(), De.set(e, n));
421
+ let r = Math.floor(t / _), i = n.get(r);
422
+ return i || (i = ke(e, r * _), n.size >= we && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
423
423
  }
424
- function De(e, t) {
425
- let n = C(e, t), r = t + y - v, i = C(e, r);
424
+ function ke(e, t) {
425
+ let n = x(e, t), r = t + _ - g, i = x(e, r);
426
426
  if (i === n) return {
427
427
  before: n,
428
428
  change: Infinity,
429
429
  after: i
430
430
  };
431
431
  let a = t;
432
- for (; r - a > v;) {
433
- let t = a + Math.floor((r - a) / v / 2) * v;
434
- C(e, t) === n ? a = t : r = t;
432
+ for (; r - a > g;) {
433
+ let t = a + Math.floor((r - a) / g / 2) * g;
434
+ x(e, t) === n ? a = t : r = t;
435
435
  }
436
436
  return {
437
437
  before: n,
@@ -439,11 +439,11 @@ function De(e, t) {
439
439
  after: i
440
440
  };
441
441
  }
442
- function C(e, t) {
443
- let n = Math.floor(t / v), r = `${e}|${n}`, i = b.get(r);
442
+ function x(e, t) {
443
+ let n = Math.floor(t / g), r = `${e}|${n}`, i = v.get(r);
444
444
  if (i !== void 0) return i;
445
- let a = n * v, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
446
- for (let t of Ee(e).formatToParts(new Date(a))) {
445
+ let a = n * g, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
446
+ for (let t of Oe(e).formatToParts(new Date(a))) {
447
447
  let e = Number(t.value);
448
448
  switch (t.type) {
449
449
  case "year":
@@ -466,21 +466,24 @@ function C(e, t) {
466
466
  break;
467
467
  }
468
468
  }
469
- let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / g);
470
- return b.size >= xe && b.clear(), b.set(r, f), f;
469
+ let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / h);
470
+ return v.size >= Ce && v.clear(), v.set(r, f), f;
471
+ }
472
+ function S(e) {
473
+ return e === 0 || typeof e == "string" && Te.has(e);
471
474
  }
472
- function w(e, t) {
473
- return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : S(e, t);
475
+ function C(e, t) {
476
+ return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : b(e, t);
474
477
  }
475
- function Oe(e, t) {
476
- let n = e - w(t, e - _) * g;
477
- if (n + w(t, n) * g === e) return n;
478
- let r = e - w(t, e + _) * g;
479
- return r + w(t, r) * g === e ? r : n;
478
+ function Ae(e, t) {
479
+ let n = e - C(t, e - Se) * h;
480
+ if (n + C(t, n) * h === e) return n;
481
+ let r = e - C(t, e + Se) * h;
482
+ return r + C(t, r) * h === e ? r : n;
480
483
  }
481
- var ke = /* @__PURE__ */ new Map();
482
- function Ae(e, t, n) {
483
- let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = ke.get(r);
484
+ var je = /* @__PURE__ */ new Map();
485
+ function Me(e, t, n) {
486
+ let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = je.get(r);
484
487
  if (i) return i;
485
488
  let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
486
489
  try {
@@ -494,12 +497,12 @@ function Ae(e, t, n) {
494
497
  timeZone: a
495
498
  });
496
499
  }
497
- let s = typeof n == "number" ? n * g : 0;
498
- return i = (e) => o.format(new Date(e + s)), ke.set(r, i), i;
500
+ let s = typeof n == "number" ? n * h : 0;
501
+ return i = (e) => o.format(new Date(e + s)), je.set(r, i), i;
499
502
  }
500
503
  //#endregion
501
504
  //#region src/utils/time.ts
502
- var je = {
505
+ var Ne = {
503
506
  "1s": 1e3,
504
507
  "5s": 5e3,
505
508
  "15s": 15e3,
@@ -526,16 +529,16 @@ var je = {
526
529
  "3M": 7776e6,
527
530
  "6M": 15552e6,
528
531
  "12M": 31536e6
529
- }, Me = {
532
+ }, w = {
530
533
  s: 1e3,
531
534
  m: 6e4,
532
535
  h: 36e5,
533
536
  d: 864e5,
534
537
  w: 6048e5,
535
538
  M: 2592e6
536
- }, Ne = /^([1-9]\d*)([smhdwM])$/;
539
+ }, Pe = /^([1-9]\d*)([smhdwM])$/;
537
540
  function T(e) {
538
- let t = Ne.exec(e);
541
+ let t = Pe.exec(e);
539
542
  if (!t) return null;
540
543
  let n = Number(t[1]);
541
544
  return Number.isSafeInteger(n) ? {
@@ -543,23 +546,23 @@ function T(e) {
543
546
  unit: t[2]
544
547
  } : null;
545
548
  }
546
- var Pe = 1e6;
547
- function Fe(e) {
549
+ var Fe = 1e6;
550
+ function Ie(e) {
548
551
  let t = /^([1-9]\d*)T$/.exec(e);
549
552
  if (!t) return null;
550
553
  let n = Number(t[1]);
551
- return Number.isSafeInteger(n) && n <= Pe ? n : null;
554
+ return Number.isSafeInteger(n) && n <= Fe ? n : null;
552
555
  }
553
- function Ie(e) {
556
+ function Le(e) {
554
557
  return T(e) !== null;
555
558
  }
556
559
  function E(e) {
557
- let t = je[e];
560
+ let t = Ne[e];
558
561
  if (t !== void 0) return t;
559
562
  let n = T(e);
560
- return n ? n.count * Me[n.unit] : NaN;
563
+ return n ? n.count * w[n.unit] : NaN;
561
564
  }
562
- function Le(e, t) {
565
+ function Re(e, t) {
563
566
  let n = new Date(e), r = E(t);
564
567
  return r >= 864e5 ? n.toLocaleDateString(void 0, {
565
568
  month: "short",
@@ -573,11 +576,11 @@ function Le(e, t) {
573
576
  second: "2-digit"
574
577
  });
575
578
  }
576
- function Re(e, t) {
579
+ function ze(e, t) {
577
580
  let n = E(t);
578
581
  return Math.floor(e / n) * n;
579
582
  }
580
- function ze(e, t) {
583
+ function Be(e, t) {
581
584
  if (t === null) {
582
585
  let t = new Date(e);
583
586
  return {
@@ -588,7 +591,7 @@ function ze(e, t) {
588
591
  minutes: t.getMinutes()
589
592
  };
590
593
  }
591
- let n = new Date(e + w(t, e) * 6e4);
594
+ let n = new Date(e + C(t, e) * 6e4);
592
595
  return {
593
596
  year: n.getUTCFullYear(),
594
597
  month: n.getUTCMonth() + 1,
@@ -597,93 +600,122 @@ function ze(e, t) {
597
600
  minutes: n.getUTCMinutes()
598
601
  };
599
602
  }
600
- function Be(e) {
603
+ function Ve(e) {
601
604
  return e.hours === 0 && e.minutes === 0;
602
605
  }
603
- var Ve = 20 * 36e5;
604
- function He(e) {
606
+ var He = 20 * 36e5;
607
+ function Ue(e) {
605
608
  let t = Math.min(e.length, 64);
606
609
  if (t < 2) return;
607
- let n = ce(e), r = Infinity;
610
+ let n = le(e), r = Infinity;
608
611
  for (let i = 1; i < t; i++) {
609
612
  let t = Math.abs(e[i].time - e[i - 1].time) * n;
610
613
  t > 0 && t < r && (r = t);
611
614
  }
612
- return r === Infinity ? void 0 : r >= Ve;
615
+ return r === Infinity ? void 0 : r >= He;
613
616
  }
614
- function Ue(e, t = Date.now()) {
615
- let n = w(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
617
+ function We(e, t = Date.now()) {
618
+ let n = C(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
616
619
  return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
617
620
  }
618
- var We = Date.UTC(1970, 0, 5);
619
- function Ge(e, t, n = 1) {
620
- let { count: r, unit: i } = T(t) ?? {
621
- count: 1,
622
- unit: "m"
623
- };
624
- if (i === "s" || i === "m" || i === "h" || i === "d") {
625
- let t = r * Me[i];
626
- return Math.floor(e / t) * t;
621
+ var Ge = Date.UTC(1970, 0, 5), Ke = w.m, D = w.d, qe = 24, Je = {
622
+ count: 1,
623
+ unit: "m"
624
+ }, Ye = 256, O = /* @__PURE__ */ new Map();
625
+ function Xe(e) {
626
+ let t = O.get(e);
627
+ return t || (t = T(e) ?? Je, O.size >= Ye && O.clear(), O.set(e, t)), t;
628
+ }
629
+ function Ze({ unit: e }) {
630
+ return e === "d" || e === "w" || e === "M";
631
+ }
632
+ function Qe(e) {
633
+ return e.unit === "h" ? e.count > 1 && qe % e.count === 0 : Ze(e);
634
+ }
635
+ function $e(e) {
636
+ return Qe(Xe(e));
637
+ }
638
+ function et(e) {
639
+ return Ze(Xe(e));
640
+ }
641
+ function tt(e) {
642
+ return e !== void 0 && !S(e);
643
+ }
644
+ function nt(e, t, n = 1) {
645
+ let r = Xe(t), i = typeof n == "number" ? n : n.weekStartsOn ?? 1, a = typeof n == "number" ? void 0 : n.timeZone;
646
+ return !tt(a) || !Qe(r) || typeof n == "object" && n.dates && e % D === 0 ? rt(e, r, i) : Ae(rt(e + C(a, e) * Ke, r, i), a);
647
+ }
648
+ function rt(e, { count: t, unit: n }, r) {
649
+ if (n === "s" || n === "m" || n === "h" || n === "d") {
650
+ let r = t * w[n];
651
+ return Math.floor(e / r) * r;
627
652
  }
628
- let a = new Date(e);
629
- if (i === "w") {
630
- let e = Me.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
631
- if (r <= 1) return i;
632
- let o = Math.floor((i - We) / (7 * e));
633
- return We + Math.floor(o / r) * r * 7 * e;
653
+ let i = new Date(e);
654
+ if (n === "w") {
655
+ let e = (i.getUTCDay() - r + 7) % 7, n = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate() - e);
656
+ if (t <= 1) return n;
657
+ let a = Math.floor((n - Ge) / (7 * D));
658
+ return Ge + Math.floor(a / t) * t * 7 * D;
634
659
  }
635
- let o = a.getUTCFullYear() * 12 + a.getUTCMonth(), s = Math.floor(o / r) * r;
636
- return Date.UTC(Math.floor(s / 12), s % 12, 1);
660
+ let a = i.getUTCFullYear() * 12 + i.getUTCMonth(), o = Math.floor(a / t) * t;
661
+ return Date.UTC(Math.floor(o / 12), o % 12, 1);
662
+ }
663
+ function it(e, t, n) {
664
+ return e % D === 0 ? 0 : n && nt(e, "1d", { timeZone: n }) === e ? n : t;
665
+ }
666
+ function at(e, t, n) {
667
+ return Be(e, it(e, t, n));
637
668
  }
638
669
  //#endregion
639
670
  //#region src/utils/precision.ts
640
- var Ke = 64, D = /* @__PURE__ */ new Map();
641
- function qe(e, t) {
642
- let n = `${e}|${t}`, r = D.get(n);
643
- return r || (D.size >= Ke && D.clear(), r = new Intl.NumberFormat(e, {
671
+ var ot = 64, k = /* @__PURE__ */ new Map();
672
+ function st(e, t) {
673
+ let n = `${e}|${t}`, r = k.get(n);
674
+ return r || (k.size >= ot && k.clear(), r = new Intl.NumberFormat(e, {
644
675
  minimumFractionDigits: t,
645
676
  maximumFractionDigits: t
646
- }), D.set(n, r)), r;
677
+ }), k.set(n, r)), r;
647
678
  }
648
- function Je(e, t, n) {
649
- return t.formatPrice ? t.formatPrice(e) : O(e, n ?? Ye(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
679
+ function ct(e, t, n) {
680
+ return t.formatPrice ? t.formatPrice(e) : A(e, n ?? t.pricePrecision ?? lt(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
650
681
  }
651
- function O(e, t = 2, n = "en-US") {
652
- return qe(n, t).format(e);
682
+ function A(e, t = 2, n = "en-US") {
683
+ return st(n, t).format(e);
653
684
  }
654
- function Ye(e, t) {
685
+ function lt(e, t) {
655
686
  if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
656
- let n = oe(e, t, 8);
687
+ let n = se(e, t, 8);
657
688
  return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
658
689
  }
659
- function Xe(e, t, n, r = 2, i = "en-US") {
690
+ var ut = 2;
691
+ function dt(e, t, n, r = 2, i = "en-US") {
660
692
  if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
661
693
  if (t === "percentage") {
662
- let t = (e / n - 1) * 100;
663
- return `${t > 0 ? "+" : ""}${t.toFixed(2)}%`;
694
+ let t = (e / n - 1) * 100, r = A(Math.abs(t), ut, i);
695
+ return `${r === A(0, ut, i) ? "" : t > 0 ? "+" : "-"}${r}%`;
664
696
  }
665
- return O(e / n * 100, 2, i);
697
+ return A(e / n * 100, 2, i);
666
698
  }
667
- return O(e, r, i);
699
+ return A(e, r, i);
668
700
  }
669
- function Ze(e, t, n = 1) {
701
+ function ft(e, t, n = 1) {
670
702
  let r = Number.isInteger(n) && n > 1 ? n : 1;
671
703
  if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
672
704
  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)) : "";
673
705
  return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
674
706
  }
675
- function Qe(e) {
707
+ function pt(e) {
676
708
  if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
677
709
  let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
678
710
  return 1 / (e.denominator * t);
679
711
  }
680
- function $e(e) {
681
- return e ? typeof e == "function" ? e : Qe(e) === null ? null : (t) => Ze(t, e.denominator, e.subDenominator) : null;
712
+ function mt(e) {
713
+ return e ? typeof e == "function" ? e : pt(e) === null ? null : (t) => ft(t, e.denominator, e.subDenominator) : null;
682
714
  }
683
- function et(e) {
715
+ function ht(e) {
684
716
  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);
685
717
  }
686
- function tt(e) {
718
+ function gt(e) {
687
719
  let t = 0;
688
720
  for (let n of e) {
689
721
  let e = n.toString(), r = e.indexOf(".");
@@ -693,7 +725,7 @@ function tt(e) {
693
725
  }
694
726
  //#endregion
695
727
  //#region src/utils/priceSource.ts
696
- var nt = [
728
+ var _t = [
697
729
  "close",
698
730
  "open",
699
731
  "high",
@@ -703,10 +735,10 @@ var nt = [
703
735
  "ohlc4",
704
736
  "hlcc4"
705
737
  ];
706
- function rt(e) {
707
- return typeof e == "string" && nt.includes(e);
738
+ function vt(e) {
739
+ return typeof e == "string" && _t.includes(e);
708
740
  }
709
- function it(e, t) {
741
+ function yt(e, t) {
710
742
  switch (t) {
711
743
  case "open": return e.open;
712
744
  case "high": return e.high;
@@ -718,13 +750,13 @@ function it(e, t) {
718
750
  default: return e.close;
719
751
  }
720
752
  }
721
- var at = /^ind:([^:]+):(.+)$/;
722
- function ot(e, t) {
753
+ var bt = /^ind:([^:]+):(.+)$/;
754
+ function xt(e, t) {
723
755
  return `ind:${e}:${t}`;
724
756
  }
725
- function st(e) {
757
+ function St(e) {
726
758
  if (typeof e != "string") return null;
727
- let t = at.exec(e);
759
+ let t = bt.exec(e);
728
760
  return t ? {
729
761
  instanceId: t[1],
730
762
  key: t[2]
@@ -732,53 +764,65 @@ function st(e) {
732
764
  }
733
765
  //#endregion
734
766
  //#region src/utils/resample.ts
735
- var ct = 864e5;
736
- function lt(e, t, n = 1) {
737
- let r = [], i = null;
738
- for (let a of e) {
739
- let e = Ge(a.time, t, n);
740
- i === null || e !== i.time ? (i = {
767
+ var Ct = 864e5, wt = 6e4;
768
+ function Tt(e, t, n = 1) {
769
+ let r = Et(e, t, n), i = [], a = null;
770
+ for (let n of e) {
771
+ let e = nt(n.time, t, r);
772
+ a === null || e !== a.time ? (a = {
741
773
  time: e,
742
- open: a.open,
743
- high: a.high,
744
- low: a.low,
745
- close: a.close,
746
- volume: a.volume
747
- }, r.push(i)) : (a.high > i.high && (i.high = a.high), a.low < i.low && (i.low = a.low), i.close = a.close, i.volume += a.volume);
774
+ open: n.open,
775
+ high: n.high,
776
+ low: n.low,
777
+ close: n.close,
778
+ volume: n.volume
779
+ }, i.push(a)) : (n.high > a.high && (a.high = n.high), n.low < a.low && (a.low = n.low), a.close = n.close, a.volume += n.volume);
748
780
  }
749
- return r;
781
+ return i;
782
+ }
783
+ function Et(e, t, n) {
784
+ return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || S(n.timeZone) || !$e(t) ? n : {
785
+ ...n,
786
+ dates: Ue(e) === !0
787
+ };
750
788
  }
751
- var k = (e) => e === "s" || e === "m" || e === "h" || e === "d";
752
- function ut(e, t) {
789
+ var j = (e) => e === "s" || e === "m" || e === "h" || e === "d";
790
+ function Dt(e, t) {
753
791
  let n = T(e), r = T(t);
754
792
  if (!n || !r) return !1;
755
793
  let i = E(e);
756
- 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) && ct % i === 0;
757
- }
758
- function dt(e, t) {
759
- let n = null, r = 0;
760
- for (let i of t) {
761
- if (!ut(i, e)) continue;
762
- let t = E(i);
763
- t > r && (n = i, r = t);
794
+ return n.unit === "d" && n.count > 1 ? !1 : j(r.unit) ? j(n.unit) && E(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : j(n.unit) && Ct % i === 0;
795
+ }
796
+ function Ot(e, t) {
797
+ let n = E(e);
798
+ if (!(n < Ct)) return !0;
799
+ let r = (/* @__PURE__ */ new Date()).getUTCFullYear();
800
+ return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => C(t, e) * wt % n === 0);
801
+ }
802
+ function kt(e, t, n = {}) {
803
+ let { timeZone: r } = n, i = r !== void 0 && !S(r) && $e(e) ? r : void 0, a = null, o = 0;
804
+ for (let n of t) {
805
+ if (!Dt(n, e) || i !== void 0 && !Ot(n, i)) continue;
806
+ let t = E(n);
807
+ t > o && (a = n, o = t);
764
808
  }
765
- return n;
809
+ return a;
766
810
  }
767
811
  //#endregion
768
812
  //#region src/utils/symbols.ts
769
- function ft(e, t) {
813
+ function At(e, t) {
770
814
  if (!e) return 0;
771
815
  if (e === t) return 1e3;
772
816
  if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
773
817
  let n = e.indexOf(t);
774
818
  return n >= 0 ? 300 - Math.min(100, n) : 0;
775
819
  }
776
- function pt(e, t, n = 50, r) {
820
+ function jt(e, t, n = 50, r) {
777
821
  let i = t.trim().toUpperCase();
778
822
  if (!i) return e.slice(0, n);
779
823
  let a = [];
780
824
  for (let t of e) {
781
- let e = Math.max(ft(t.symbol.toUpperCase(), i), ft((t.description ?? "").toUpperCase(), i) * .8);
825
+ let e = Math.max(At(t.symbol.toUpperCase(), i), At((t.description ?? "").toUpperCase(), i) * .8);
782
826
  e > 0 && a.push({
783
827
  info: t,
784
828
  score: e + (r?.(t) ?? 0)
@@ -786,7 +830,7 @@ function pt(e, t, n = 50, r) {
786
830
  }
787
831
  return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
788
832
  }
789
- function mt(e) {
833
+ function Mt(e) {
790
834
  let t = typeof e == "number" ? e : Number(e);
791
835
  if (!Number.isFinite(t) || t <= 0) return 0;
792
836
  for (let e = 0; e <= 12; e++) {
@@ -795,10 +839,10 @@ function mt(e) {
795
839
  }
796
840
  return 12;
797
841
  }
798
- function ht(e) {
842
+ function Nt(e) {
799
843
  return e?.timeZone ?? e?.timezone;
800
844
  }
801
- function A(e) {
845
+ function M(e) {
802
846
  let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
803
847
  if (!t) return null;
804
848
  let n = Number(t[1]), r = Number(t[2]);
@@ -806,26 +850,26 @@ function A(e) {
806
850
  }
807
851
  //#endregion
808
852
  //#region src/utils/marketStatus.ts
809
- var j = 864e5, M = 6e4, gt = 8;
810
- function _t(e, t) {
811
- let n = ht(e), r = (e?.sessions ?? []).flatMap((e) => {
812
- let t = A(e.start), n = A(e.end);
853
+ var N = 864e5, P = 6e4, Pt = 8;
854
+ function Ft(e, t) {
855
+ let n = Nt(e), r = (e?.sessions ?? []).flatMap((e) => {
856
+ let t = M(e.start), n = M(e.end);
813
857
  return t === null || n === null || t === n ? [] : [{
814
858
  start: t,
815
859
  end: n,
816
860
  days: Array.isArray(e.days) ? e.days : null
817
861
  }];
818
862
  });
819
- if (!n || !x(n) || r.length === 0 || !Number.isFinite(t)) return {
863
+ if (!n || !y(n) || r.length === 0 || !Number.isFinite(t)) return {
820
864
  state: "always",
821
865
  next: null
822
866
  };
823
- 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 = [];
824
- for (let e = -1; e <= gt; e++) {
825
- let t = a + e * j, n = (Math.floor(t / j) + 4) % 7;
867
+ let i = b(n, t) * P, a = Math.floor((t + i) / N) * N, o = (e) => e - b(n, e - b(n, e - i) * P) * P, s = [];
868
+ for (let e = -1; e <= Pt; e++) {
869
+ let t = a + e * N, n = (Math.floor(t / N) + 4) % 7;
826
870
  for (let e of r) {
827
871
  if (e.days && !e.days.includes(n)) continue;
828
- let r = t + e.start * M, i = (e.end > e.start ? t : t + j) + e.end * M;
872
+ let r = t + e.start * P, i = (e.end > e.start ? t : t + N) + e.end * P;
829
873
  s.push([o(r), o(i)]);
830
874
  }
831
875
  }
@@ -848,15 +892,15 @@ function _t(e, t) {
848
892
  }
849
893
  //#endregion
850
894
  //#region src/utils/drawingOptions.ts
851
- var vt = 48, yt = 2e3, bt = 1e4;
852
- function xt(e) {
895
+ var It = 48, Lt = 2e3, Rt = 1e4;
896
+ function zt(e) {
853
897
  if (!Array.isArray(e)) return;
854
898
  let t = [];
855
899
  for (let n of e) {
856
- if (t.length >= vt) break;
900
+ if (t.length >= It) break;
857
901
  if (typeof n != "object" || !n) continue;
858
902
  let { value: e, visible: r, color: i } = n;
859
- if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > bt || r !== void 0 && typeof r != "boolean") continue;
903
+ if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > Rt || r !== void 0 && typeof r != "boolean") continue;
860
904
  let a = {
861
905
  value: e,
862
906
  visible: r ?? !0
@@ -865,109 +909,109 @@ function xt(e) {
865
909
  }
866
910
  return t;
867
911
  }
868
- function St(e, t) {
912
+ function Bt(e, t) {
869
913
  switch (e.kind) {
870
914
  case "boolean": return typeof t == "boolean" ? t : void 0;
871
915
  case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
872
916
  case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
873
- case "levels": return xt(t);
874
- case "text": return typeof t == "string" ? t.slice(0, yt) : void 0;
917
+ case "levels": return zt(t);
918
+ case "text": return typeof t == "string" ? t.slice(0, Lt) : void 0;
875
919
  }
876
920
  }
877
- function Ct(e, t) {
921
+ function Vt(e, t) {
878
922
  if (!e || typeof t != "object" || !t) return {};
879
923
  let n = {};
880
924
  for (let [r, i] of Object.entries(t)) {
881
925
  let t = e[r];
882
926
  if (!t) continue;
883
- let a = St(t, i);
927
+ let a = Bt(t, i);
884
928
  a !== void 0 && (n[r] = a);
885
929
  }
886
930
  return n;
887
931
  }
888
- function wt(e) {
932
+ function Ht(e) {
889
933
  return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
890
934
  }
891
- function Tt(e, t, n) {
935
+ function Ut(e, t, n) {
892
936
  let r = e?.[n];
893
- return r ? wt((t && n in t ? St(r, t[n]) : void 0) ?? r.default) : t?.[n];
937
+ return r ? Ht((t && n in t ? Bt(r, t[n]) : void 0) ?? r.default) : t?.[n];
894
938
  }
895
- function Et(e, t) {
939
+ function Wt(e, t) {
896
940
  let n = {};
897
- for (let r of Object.keys(e ?? {})) n[r] = Tt(e, t, r);
941
+ for (let r of Object.keys(e ?? {})) n[r] = Ut(e, t, r);
898
942
  return n;
899
943
  }
900
944
  //#endregion
901
945
  //#region src/utils/drawingStyle.ts
902
- var Dt = [
946
+ var Gt = [
903
947
  "solid",
904
948
  "dashed",
905
949
  "dotted"
906
- ], Ot = 64, kt = 2e3, At = 20, jt = 200;
907
- function Mt(e, t, n) {
950
+ ], Kt = 64, qt = 2e3, Jt = 20, Yt = 200;
951
+ function F(e, t, n) {
908
952
  return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
909
953
  }
910
- function Nt(e) {
911
- return typeof e == "string" && e.length > 0 && e.length <= Ot ? e : void 0;
954
+ function Xt(e) {
955
+ return typeof e == "string" && e.length > 0 && e.length <= Kt ? e : void 0;
912
956
  }
913
- function Pt(e) {
957
+ function Zt(e) {
914
958
  if (typeof e != "object" || !e) return {};
915
- let t = e, n = {}, r = Nt(t.color);
959
+ let t = e, n = {}, r = Xt(t.color);
916
960
  r !== void 0 && (n.color = r);
917
- let i = Mt(t.lineWidth, .5, At);
918
- i !== void 0 && (n.lineWidth = i), Dt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
919
- let a = Nt(t.fillColor);
961
+ let i = F(t.lineWidth, .5, Jt);
962
+ i !== void 0 && (n.lineWidth = i), Gt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
963
+ let a = Xt(t.fillColor);
920
964
  a !== void 0 && (n.fillColor = a);
921
- let o = Mt(t.fillOpacity, 0, 1);
965
+ let o = F(t.fillOpacity, 0, 1);
922
966
  o !== void 0 && (n.fillOpacity = o);
923
- let s = Mt(t.fontSize, 6, jt);
924
- return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, kt)), n;
967
+ let s = F(t.fontSize, 6, Yt);
968
+ return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, qt)), n;
925
969
  }
926
970
  //#endregion
927
971
  //#region src/utils/chartTypeOptions.ts
928
- 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);
929
- function Ft(e) {
930
- if (!F(e)) return {};
972
+ var I = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, L = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, R = (e) => typeof e == "object" && !!e && !Array.isArray(e);
973
+ function Qt(e) {
974
+ if (!R(e)) return {};
931
975
  let t = {};
932
- if (F(e.renko)) {
976
+ if (R(e.renko)) {
933
977
  let { boxSize: n, atrPeriod: r } = e.renko;
934
978
  t.renko = {
935
- ...N(n) || n === "atr" ? { boxSize: n } : {},
936
- ...P(r, 1, 500) ? { atrPeriod: r } : {}
979
+ ...I(n) || n === "atr" ? { boxSize: n } : {},
980
+ ...L(r, 1, 500) ? { atrPeriod: r } : {}
937
981
  };
938
982
  }
939
- if (F(e.lineBreak)) {
983
+ if (R(e.lineBreak)) {
940
984
  let { lines: n } = e.lineBreak;
941
- t.lineBreak = P(n, 1, 10) ? { lines: n } : {};
985
+ t.lineBreak = L(n, 1, 10) ? { lines: n } : {};
942
986
  }
943
- if (F(e.kagi)) {
987
+ if (R(e.kagi)) {
944
988
  let { reversal: n, reversalType: r } = e.kagi;
945
989
  t.kagi = {
946
- ...N(n) ? { reversal: n } : {},
990
+ ...I(n) ? { reversal: n } : {},
947
991
  ...r === "percent" || r === "price" ? { reversalType: r } : {}
948
992
  };
949
993
  }
950
- if (F(e.pointAndFigure)) {
994
+ if (R(e.pointAndFigure)) {
951
995
  let { boxSize: n, reversal: r } = e.pointAndFigure;
952
996
  t.pointAndFigure = {
953
- ...N(n) || n === "auto" ? { boxSize: n } : {},
954
- ...P(r, 1, 10) ? { reversal: r } : {}
997
+ ...I(n) || n === "auto" ? { boxSize: n } : {},
998
+ ...L(r, 1, 10) ? { reversal: r } : {}
955
999
  };
956
1000
  }
957
- if (F(e.rangeBars)) {
1001
+ if (R(e.rangeBars)) {
958
1002
  let { range: n } = e.rangeBars;
959
- t.rangeBars = N(n) || n === "auto" ? { range: n } : {};
1003
+ t.rangeBars = I(n) || n === "auto" ? { range: n } : {};
960
1004
  }
961
1005
  return t;
962
1006
  }
963
1007
  //#endregion
964
1008
  //#region src/constants/themes.ts
965
- var It = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", Lt = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif", Rt = {
966
- family: It,
1009
+ var $t = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", en = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif", tn = {
1010
+ family: $t,
967
1011
  sizeSmall: 11,
968
1012
  sizeMedium: 13,
969
1013
  sizeLarge: 15
970
- }, I = {
1014
+ }, z = {
971
1015
  amber: "#f2a93b",
972
1016
  up: "#1c9e6d",
973
1017
  down: "#e8505b",
@@ -978,57 +1022,57 @@ var It = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
978
1022
  rose: "#e25592",
979
1023
  neutral: "#7d8696",
980
1024
  ink: "#131416"
981
- }, zt = .22;
982
- function L(e) {
983
- return h(e, zt);
984
- }
985
- var Bt = "#fbfaf6", R = "#1b1d21", Vt = "#131416", z = "#e6e3dc", Ht = "#1f7a5c", Ut = "#b8423f", Wt = "#4fae8a", Gt = "#e2706b", Kt = "#6a6966", qt = "#8d8a84", Jt = [
986
- I.blue,
987
- I.ochre,
988
- I.violet,
989
- I.cyan,
990
- I.rose
991
- ], Yt = {
1025
+ }, nn = .22;
1026
+ function B(e) {
1027
+ return m(e, nn);
1028
+ }
1029
+ var rn = "#fbfaf6", V = "#1b1d21", an = "#131416", H = "#e6e3dc", on = "#1f7a5c", sn = "#b8423f", cn = "#4fae8a", ln = "#e2706b", un = "#6a6966", dn = "#8d8a84", fn = [
1030
+ z.blue,
1031
+ z.ochre,
1032
+ z.violet,
1033
+ z.cyan,
1034
+ z.rose
1035
+ ], pn = {
992
1036
  name: "dark",
993
- background: Vt,
994
- text: z,
1037
+ background: an,
1038
+ text: H,
995
1039
  textSecondary: "#8d8b86",
996
1040
  grid: "#1d1e21",
997
- crosshair: Kt,
998
- candleUp: Wt,
999
- candleDown: Gt,
1000
- candleUpWick: Wt,
1001
- candleDownWick: Gt,
1002
- lineColor: z,
1003
- areaTopColor: h(z, .14),
1004
- areaBottomColor: h(z, 0),
1005
- volumeUp: h(z, .14),
1006
- volumeDown: h(z, .08),
1041
+ crosshair: un,
1042
+ candleUp: cn,
1043
+ candleDown: ln,
1044
+ candleUpWick: cn,
1045
+ candleDownWick: ln,
1046
+ lineColor: H,
1047
+ areaTopColor: m(H, .14),
1048
+ areaBottomColor: m(H, 0),
1049
+ volumeUp: m(H, .14),
1050
+ volumeDown: m(H, .08),
1007
1051
  axisLine: "#2a2b2f",
1008
1052
  axisLabel: "#a9a6a0",
1009
1053
  axisLabelBackground: "#232427",
1010
- font: Rt
1011
- }, Xt = {
1054
+ font: tn
1055
+ }, mn = {
1012
1056
  name: "light",
1013
- background: Bt,
1014
- text: R,
1057
+ background: rn,
1058
+ text: V,
1015
1059
  textSecondary: "#6b6f76",
1016
1060
  grid: "#ece8df",
1017
- crosshair: qt,
1018
- candleUp: Ht,
1019
- candleDown: Ut,
1020
- candleUpWick: Ht,
1021
- candleDownWick: Ut,
1022
- lineColor: R,
1023
- areaTopColor: h(R, .12),
1024
- areaBottomColor: h(R, 0),
1025
- volumeUp: h(R, .13),
1026
- volumeDown: h(R, .08),
1061
+ crosshair: dn,
1062
+ candleUp: on,
1063
+ candleDown: sn,
1064
+ candleUpWick: on,
1065
+ candleDownWick: sn,
1066
+ lineColor: V,
1067
+ areaTopColor: m(V, .12),
1068
+ areaBottomColor: m(V, 0),
1069
+ volumeUp: m(V, .13),
1070
+ volumeDown: m(V, .08),
1027
1071
  axisLine: "#cfcac0",
1028
1072
  axisLabel: "#4a4e57",
1029
1073
  axisLabelBackground: "#eeebe3",
1030
- font: Rt
1031
- }, Zt = {
1074
+ font: tn
1075
+ }, hn = {
1032
1076
  name: "terminal",
1033
1077
  background: "#0E0E0E",
1034
1078
  text: "#C0C0C0",
@@ -1042,8 +1086,8 @@ var Bt = "#fbfaf6", R = "#1b1d21", Vt = "#131416", z = "#e6e3dc", Ht = "#1f7a5c"
1042
1086
  lineColor: "#3D8BFD",
1043
1087
  areaTopColor: "rgba(61, 139, 253, 0.3)",
1044
1088
  areaBottomColor: "rgba(61, 139, 253, 0.0)",
1045
- volumeUp: L("#00FF87"),
1046
- volumeDown: L("#FF3B4D"),
1089
+ volumeUp: B("#00FF87"),
1090
+ volumeDown: B("#FF3B4D"),
1047
1091
  axisLine: "#1A1A1A",
1048
1092
  axisLabel: "#8A8A8A",
1049
1093
  axisLabelBackground: "#1A1A1A",
@@ -1053,11 +1097,11 @@ var Bt = "#fbfaf6", R = "#1b1d21", Vt = "#131416", z = "#e6e3dc", Ht = "#1f7a5c"
1053
1097
  sizeMedium: 12,
1054
1098
  sizeLarge: 14
1055
1099
  }
1056
- }, Qt = new Set([Zt.volumeUp, Zt.volumeDown]);
1057
- function B(e) {
1100
+ }, gn = new Set([hn.volumeUp, hn.volumeDown]);
1101
+ function _n(e) {
1058
1102
  let t = (e, t) => {
1059
- if (!Qt.has(e)) return e;
1060
- let n = L(t);
1103
+ if (!gn.has(e)) return e;
1104
+ let n = B(t);
1061
1105
  return n === t ? e : n;
1062
1106
  };
1063
1107
  return {
@@ -1067,67 +1111,67 @@ function B(e) {
1067
1111
  }
1068
1112
  //#endregion
1069
1113
  //#region src/utils/chartStyle.ts
1070
- var $t = [
1114
+ var vn = [
1071
1115
  "solid",
1072
1116
  "dashed",
1073
1117
  "dotted"
1074
- ], en = 20, tn = 64, nn = 2, rn = [
1118
+ ], yn = 20, bn = 64, xn = 2, Sn = [
1075
1119
  /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
1076
1120
  /^[a-z]{3,30}$/i,
1077
1121
  /^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
1078
1122
  ];
1079
- function V(e) {
1080
- return typeof e == "string" && e.length <= tn && rn.some((t) => t.test(e.trim()));
1123
+ function Cn(e) {
1124
+ return typeof e == "string" && e.length <= bn && Sn.some((t) => t.test(e.trim()));
1081
1125
  }
1082
- function an(e, t) {
1126
+ function wn(e, t) {
1083
1127
  switch (e) {
1084
- case "color": return V(t);
1085
- case "lineStyle": return $t.includes(t);
1086
- case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= en;
1128
+ case "color": return Cn(t);
1129
+ case "lineStyle": return vn.includes(t);
1130
+ case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= yn;
1087
1131
  case "boolean": return typeof t == "boolean";
1088
1132
  }
1089
1133
  }
1090
- function on(e) {
1134
+ function Tn(e) {
1091
1135
  return Object.prototype.hasOwnProperty.call(t, e);
1092
1136
  }
1093
- function sn(e) {
1137
+ function En(e) {
1094
1138
  let n = {}, r = [];
1095
1139
  if (typeof e != "object" || !e || Array.isArray(e)) return {
1096
1140
  overrides: {},
1097
1141
  rejected: r
1098
1142
  };
1099
- for (let [i, a] of Object.entries(e)) on(i) ? a === null ? n[i] = null : an(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
1143
+ for (let [i, a] of Object.entries(e)) Tn(i) ? a === null ? n[i] = null : wn(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
1100
1144
  return {
1101
1145
  overrides: n,
1102
1146
  rejected: r
1103
1147
  };
1104
1148
  }
1105
- function cn(e) {
1149
+ function Dn(e) {
1106
1150
  if (typeof e != "object" || !e || Array.isArray(e)) return null;
1107
1151
  let { background: t, separator: n } = e, r = {
1108
- ...V(t) ? { background: t } : {},
1109
- ...V(n) ? { separator: n } : {}
1152
+ ...Cn(t) ? { background: t } : {},
1153
+ ...Cn(n) ? { separator: n } : {}
1110
1154
  };
1111
1155
  return Object.keys(r).length > 0 ? r : null;
1112
1156
  }
1113
- var ln = /^[A-Za-z0-9_]{1,32}$/;
1114
- function un(e) {
1157
+ var On = /^[A-Za-z0-9_]{1,32}$/;
1158
+ function kn(e) {
1115
1159
  if (typeof e != "object" || !e || Array.isArray(e)) return;
1116
1160
  let t = {};
1117
1161
  for (let [n, r] of Object.entries(e)) {
1118
- if (!ln.test(n) || typeof r != "object" || !r) continue;
1162
+ if (!On.test(n) || typeof r != "object" || !r) continue;
1119
1163
  let { lineStyle: e, visible: i } = r, a = {
1120
- ...$t.includes(e) ? { lineStyle: e } : {},
1164
+ ...vn.includes(e) ? { lineStyle: e } : {},
1121
1165
  ...typeof i == "boolean" ? { visible: i } : {}
1122
1166
  };
1123
1167
  Object.keys(a).length > 0 && (t[n] = a);
1124
1168
  }
1125
1169
  return Object.keys(t).length > 0 ? t : void 0;
1126
1170
  }
1127
- function dn(e, t, n = 1) {
1171
+ function An(e, t, n = 1) {
1128
1172
  return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
1129
1173
  }
1130
- function fn(e, t, n) {
1174
+ function jn(e, t, n) {
1131
1175
  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;
1132
1176
  return {
1133
1177
  up: o,
@@ -1135,12 +1179,12 @@ function fn(e, t, n) {
1135
1179
  wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
1136
1180
  wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
1137
1181
  line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
1138
- lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? nn,
1182
+ lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? xn,
1139
1183
  top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
1140
1184
  bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
1141
1185
  };
1142
1186
  }
1143
- function H(e, t, n) {
1187
+ function U(e, t, n) {
1144
1188
  return {
1145
1189
  visible: e(`${t}.visible`) ?? n.visible,
1146
1190
  color: e(`${t}.color`) ?? n.color,
@@ -1148,21 +1192,21 @@ function H(e, t, n) {
1148
1192
  width: e(`${t}.width`) ?? n.width
1149
1193
  };
1150
1194
  }
1151
- function pn(e, t, n) {
1152
- let { style: r, ...i } = e, a = n, o = (e) => a[e], s = fn(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
1195
+ function Mn(e, t, n) {
1196
+ let { style: r, ...i } = e, a = n, o = (e) => a[e], s = jn(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
1153
1197
  panes: {
1154
1198
  background: l("panes.background", c),
1155
1199
  separator: l("panes.separatorColor", i.axisLine),
1156
1200
  title: l("panes.titleColor", i.textSecondary)
1157
1201
  },
1158
1202
  grid: {
1159
- horizontal: H(o, "grid.horizontal", {
1203
+ horizontal: U(o, "grid.horizontal", {
1160
1204
  visible: !0,
1161
1205
  color: i.grid,
1162
1206
  style: "solid",
1163
1207
  width: 1
1164
1208
  }),
1165
- vertical: H(o, "grid.vertical", {
1209
+ vertical: U(o, "grid.vertical", {
1166
1210
  visible: !0,
1167
1211
  color: i.grid,
1168
1212
  style: "solid",
@@ -1170,13 +1214,13 @@ function pn(e, t, n) {
1170
1214
  })
1171
1215
  },
1172
1216
  crosshair: {
1173
- horizontal: H(o, "crosshair.horizontal", {
1217
+ horizontal: U(o, "crosshair.horizontal", {
1174
1218
  visible: !0,
1175
1219
  color: i.crosshair,
1176
1220
  style: "solid",
1177
1221
  width: 1
1178
1222
  }),
1179
- vertical: H(o, "crosshair.vertical", {
1223
+ vertical: U(o, "crosshair.vertical", {
1180
1224
  visible: !0,
1181
1225
  color: i.crosshair,
1182
1226
  style: "solid",
@@ -1248,7 +1292,7 @@ function pn(e, t, n) {
1248
1292
  style: d
1249
1293
  };
1250
1294
  }
1251
- var mn = {
1295
+ var Nn = {
1252
1296
  "background.color": (e) => e.background,
1253
1297
  "panes.background": (e, t) => t.panes.background,
1254
1298
  "panes.separatorColor": (e, t) => t.panes.separator,
@@ -1267,8 +1311,8 @@ var mn = {
1267
1311
  "lastPrice.downColor": (e, t) => t.lastPrice.down,
1268
1312
  "lastPrice.style": (e, t) => t.lastPrice.style,
1269
1313
  "lastPrice.width": (e, t) => t.lastPrice.width,
1270
- "volume.upColor": (e) => B(e).up,
1271
- "volume.downColor": (e) => B(e).down,
1314
+ "volume.upColor": (e) => _n(e).up,
1315
+ "volume.downColor": (e) => _n(e).down,
1272
1316
  "sessionBreaks.color": (e, t) => t.sessionBreaks.color,
1273
1317
  "sessionBreaks.style": (e, t) => t.sessionBreaks.style,
1274
1318
  "sessionBreaks.width": (e, t) => t.sessionBreaks.width,
@@ -1285,16 +1329,16 @@ var mn = {
1285
1329
  "tradeZones.lossColor": (e, t) => t.tradeZones.loss,
1286
1330
  "tradeZones.activeColor": (e, t) => t.tradeZones.active,
1287
1331
  "drawings.handleColor": (e, t) => t.drawings.handle
1288
- }, hn = {
1332
+ }, Pn = {
1289
1333
  visible: "visible",
1290
1334
  color: "color",
1291
1335
  style: "style",
1292
1336
  width: "width"
1293
1337
  };
1294
- function gn(e, t, n, r = "candlestick") {
1338
+ function Fn(e, t, n, r = "candlestick") {
1295
1339
  let i = n.split(".");
1296
1340
  if (i[0] === "series") {
1297
- let n = fn(e, (e) => t[e], i[1]);
1341
+ let n = jn(e, (e) => t[e], i[1]);
1298
1342
  switch (i[2]) {
1299
1343
  case "upColor": return n.up;
1300
1344
  case "downColor": return n.down;
@@ -1307,12 +1351,12 @@ function gn(e, t, n, r = "candlestick") {
1307
1351
  case "bottomColor": return n.bottom;
1308
1352
  }
1309
1353
  }
1310
- let a = pn(e, r, t), o = a.style;
1311
- return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][hn[i[2]]] : mn[n]?.(a, o) ?? null;
1354
+ let a = Mn(e, r, t), o = a.style;
1355
+ return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][Pn[i[2]]] : Nn[n]?.(a, o) ?? null;
1312
1356
  }
1313
1357
  //#endregion
1314
1358
  //#region src/constants/defaults.ts
1315
- var _n = {
1359
+ var In = {
1316
1360
  autoScale: !0,
1317
1361
  rightMargin: 5,
1318
1362
  minBarSpacing: 2,
@@ -1323,7 +1367,7 @@ var _n = {
1323
1367
  vLineStyle: "solid"
1324
1368
  },
1325
1369
  crosshair: { mode: "magnet" }
1326
- }, vn = [
1370
+ }, Ln = [
1327
1371
  "1s",
1328
1372
  "1m",
1329
1373
  "3m",
@@ -1340,7 +1384,7 @@ var _n = {
1340
1384
  "3d",
1341
1385
  "1w",
1342
1386
  "1M"
1343
- ], yn = [
1387
+ ], Rn = [
1344
1388
  "1m",
1345
1389
  "5m",
1346
1390
  "15m",
@@ -1354,7 +1398,7 @@ var _n = {
1354
1398
  "3M",
1355
1399
  "6M",
1356
1400
  "12M"
1357
- ], bn = [
1401
+ ], zn = [
1358
1402
  "1m",
1359
1403
  "5m",
1360
1404
  "15m",
@@ -1364,7 +1408,7 @@ var _n = {
1364
1408
  "1d",
1365
1409
  "1w",
1366
1410
  "1M"
1367
- ], xn = [
1411
+ ], Bn = [
1368
1412
  "1m",
1369
1413
  "5m",
1370
1414
  "15m",
@@ -1372,7 +1416,7 @@ var _n = {
1372
1416
  "4h",
1373
1417
  "1d",
1374
1418
  "1w"
1375
- ], Sn = 8, Cn = 2, wn = 70, Tn = 30, En = 60, Dn = 120, On = (1 + Math.sqrt(5)) / 2, kn = [
1419
+ ], Vn = 8, Hn = 2, Un = 70, Wn = 30, Gn = 60, Kn = 120, qn = (1 + Math.sqrt(5)) / 2, Jn = [
1376
1420
  1,
1377
1421
  2,
1378
1422
  3,
@@ -1384,12 +1428,12 @@ var _n = {
1384
1428
  55,
1385
1429
  89
1386
1430
  ];
1387
- function An(e, t, n = 1) {
1388
- return Math.round(e * On ** (t / n));
1431
+ function Yn(e, t, n = 1) {
1432
+ return Math.round(e * qn ** (t / n));
1389
1433
  }
1390
1434
  //#endregion
1391
1435
  //#region src/i18n/en.ts
1392
- var U = {
1436
+ var W = {
1393
1437
  candlestick: "Candlestick",
1394
1438
  line: "Line",
1395
1439
  area: "Area",
@@ -1492,7 +1536,7 @@ var U = {
1492
1536
  error: "Error",
1493
1537
  numberDecimalSeparator: ".",
1494
1538
  numberGroupSeparator: ","
1495
- }, jn = {
1539
+ }, Xn = {
1496
1540
  candlestick: "Nến",
1497
1541
  line: "Đường",
1498
1542
  area: "Vùng",
@@ -1595,43 +1639,43 @@ var U = {
1595
1639
  error: "Lỗi",
1596
1640
  numberDecimalSeparator: ",",
1597
1641
  numberGroupSeparator: "."
1598
- }, W = new Map([["en", U], ["vi", jn]]), G = "en", Mn = U;
1599
- function Nn(e) {
1600
- G = e, Mn = W.get(e) ?? U;
1642
+ }, G = new Map([["en", W], ["vi", Xn]]), K = "en", Zn = W;
1643
+ function Qn(e) {
1644
+ K = e, Zn = G.get(e) ?? W;
1601
1645
  }
1602
- function Pn() {
1603
- return G;
1646
+ function $n() {
1647
+ return K;
1604
1648
  }
1605
- function Fn(e) {
1606
- return Mn[e] ?? U[e] ?? e;
1649
+ function er(e) {
1650
+ return Zn[e] ?? W[e] ?? e;
1607
1651
  }
1608
- function In(e, t) {
1609
- W.set(e, t);
1652
+ function tr(e, t) {
1653
+ G.set(e, t);
1610
1654
  }
1611
- function Ln(e) {
1612
- return W.get(e ?? G) ?? U;
1655
+ function nr(e) {
1656
+ return G.get(e ?? K) ?? W;
1613
1657
  }
1614
- function K(e, t = 2, n) {
1615
- let r = W.get(n ?? G) ?? U, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
1658
+ function q(e, t = 2, n) {
1659
+ let r = G.get(n ?? K) ?? W, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
1616
1660
  for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
1617
1661
  return c && (u = "-" + u), s ? u + i + s : u;
1618
1662
  }
1619
- function Rn(e) {
1620
- return K(e, 0, "vi");
1663
+ function rr(e) {
1664
+ return q(e, 0, "vi");
1621
1665
  }
1622
- function zn(e, t) {
1623
- 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);
1666
+ function ir(e, t) {
1667
+ return e >= 1e9 ? q(e / 1e9, 2, t ?? K) + "B" : e >= 1e6 ? q(e / 1e6, 2, t ?? K) + "M" : e >= 1e3 ? q(e / 1e3, 2, t ?? K) + "K" : q(e, 0, t ?? K);
1624
1668
  }
1625
1669
  //#endregion
1626
1670
  //#region src/market/presets.ts
1627
- var q = {
1671
+ var J = {
1628
1672
  up: "#22C55E",
1629
1673
  down: "#EF4444",
1630
1674
  unchanged: "#EAB308",
1631
1675
  ceiling: "#D946EF",
1632
1676
  floor: "#06B6D4",
1633
1677
  reference: "#EAB308"
1634
- }, J = "Asia/Ho_Chi_Minh", Bn = [
1678
+ }, Y = "Asia/Ho_Chi_Minh", ar = [
1635
1679
  {
1636
1680
  name: "ATO",
1637
1681
  startTime: "09:00",
@@ -1662,7 +1706,7 @@ var q = {
1662
1706
  endTime: "14:45",
1663
1707
  type: "preClose"
1664
1708
  }
1665
- ], Vn = [
1709
+ ], or = [
1666
1710
  {
1667
1711
  name: "Phiên 1",
1668
1712
  startTime: "09:15",
@@ -1693,7 +1737,7 @@ var q = {
1693
1737
  endTime: "15:00",
1694
1738
  type: "postClose"
1695
1739
  }
1696
- ], Hn = [
1740
+ ], sr = [
1697
1741
  {
1698
1742
  name: "Phiên 1",
1699
1743
  startTime: "09:15",
@@ -1712,7 +1756,7 @@ var q = {
1712
1756
  endTime: "14:30",
1713
1757
  type: "continuous"
1714
1758
  }
1715
- ], Un = [
1759
+ ], cr = [
1716
1760
  {
1717
1761
  name: "ATO",
1718
1762
  startTime: "08:45",
@@ -1743,7 +1787,7 @@ var q = {
1743
1787
  endTime: "14:45",
1744
1788
  type: "preClose"
1745
1789
  }
1746
- ], Wn = {
1790
+ ], lr = {
1747
1791
  type: "stock",
1748
1792
  exchange: "HOSE",
1749
1793
  currency: "VND",
@@ -1764,48 +1808,48 @@ var q = {
1764
1808
  step: .1
1765
1809
  }
1766
1810
  ],
1767
- timeZone: J,
1811
+ timeZone: Y,
1768
1812
  priceLimits: {
1769
1813
  enabled: !0,
1770
1814
  ceilingPercent: 7,
1771
1815
  floorPercent: 7
1772
1816
  },
1773
- sessions: Bn,
1774
- colorScheme: q
1775
- }, Gn = {
1776
- ...Wn,
1817
+ sessions: ar,
1818
+ colorScheme: J
1819
+ }, ur = {
1820
+ ...lr,
1777
1821
  priceSteps: void 0
1778
- }, Kn = {
1822
+ }, dr = {
1779
1823
  type: "stock",
1780
1824
  exchange: "HNX",
1781
1825
  currency: "VND",
1782
1826
  pricePrecision: 1,
1783
1827
  volumeUnit: 100,
1784
1828
  priceStep: .1,
1785
- timeZone: J,
1829
+ timeZone: Y,
1786
1830
  priceLimits: {
1787
1831
  enabled: !0,
1788
1832
  ceilingPercent: 10,
1789
1833
  floorPercent: 10
1790
1834
  },
1791
- sessions: Vn,
1792
- colorScheme: q
1793
- }, qn = {
1835
+ sessions: or,
1836
+ colorScheme: J
1837
+ }, fr = {
1794
1838
  type: "stock",
1795
1839
  exchange: "UPCOM",
1796
1840
  currency: "VND",
1797
1841
  pricePrecision: 1,
1798
1842
  volumeUnit: 100,
1799
1843
  priceStep: .1,
1800
- timeZone: J,
1844
+ timeZone: Y,
1801
1845
  priceLimits: {
1802
1846
  enabled: !0,
1803
1847
  ceilingPercent: 15,
1804
1848
  floorPercent: 15
1805
1849
  },
1806
- sessions: Hn,
1807
- colorScheme: q
1808
- }, Jn = {
1850
+ sessions: sr,
1851
+ colorScheme: J
1852
+ }, pr = {
1809
1853
  type: "futures",
1810
1854
  exchange: "HNX",
1811
1855
  currency: "VND",
@@ -1813,20 +1857,20 @@ var q = {
1813
1857
  volumeUnit: 1,
1814
1858
  priceStep: .1,
1815
1859
  contractMultiplier: 1e5,
1816
- timeZone: J,
1860
+ timeZone: Y,
1817
1861
  priceLimits: {
1818
1862
  enabled: !0,
1819
1863
  ceilingPercent: 7,
1820
1864
  floorPercent: 7
1821
1865
  },
1822
- sessions: Un,
1823
- colorScheme: q
1824
- }, Yn = {
1866
+ sessions: cr,
1867
+ colorScheme: J
1868
+ }, mr = {
1825
1869
  type: "crypto",
1826
1870
  currency: "USDT",
1827
1871
  pricePrecision: 2,
1828
1872
  priceLimits: { enabled: !1 }
1829
- }, Xn = {
1873
+ }, hr = {
1830
1874
  type: "stock",
1831
1875
  exchange: "NYSE",
1832
1876
  currency: "USD",
@@ -1855,55 +1899,55 @@ var q = {
1855
1899
  }
1856
1900
  ]
1857
1901
  };
1858
- function Zn(e) {
1902
+ function gr(e) {
1859
1903
  return {
1860
1904
  ...e,
1861
- candleUp: q.up,
1862
- candleDown: q.down,
1863
- candleUpWick: q.up,
1864
- candleDownWick: q.down
1905
+ candleUp: J.up,
1906
+ candleDown: J.down,
1907
+ candleUpWick: J.up,
1908
+ candleDownWick: J.down
1865
1909
  };
1866
1910
  }
1867
- var Y = 1e-9;
1868
- function X(e, t) {
1911
+ var X = 1e-9;
1912
+ function _r(e, t) {
1869
1913
  let n = t.priceStep;
1870
- for (let r of t.priceSteps ?? []) e + Y >= r.from && (n = r.step);
1914
+ for (let r of t.priceSteps ?? []) e + X >= r.from && (n = r.step);
1871
1915
  return n !== void 0 && n > 0 ? n : void 0;
1872
1916
  }
1873
- function Qn(e, t) {
1917
+ function vr(e, t) {
1874
1918
  let n = t.priceStep;
1875
- for (let r of t.priceSteps ?? []) e - Y > r.from && (n = r.step);
1919
+ for (let r of t.priceSteps ?? []) e - X > r.from && (n = r.step);
1876
1920
  return n !== void 0 && n > 0 ? n : void 0;
1877
1921
  }
1878
1922
  function Z(e, t, n = "nearest") {
1879
- let r = X(e, t);
1923
+ let r = _r(e, t);
1880
1924
  if (r === void 0 || !Number.isFinite(e)) return e;
1881
- let i = e / r, a = n === "down" ? Math.floor(i + Y) : n === "up" ? Math.ceil(i - Y) : Math.round(i);
1882
- return Number((a * r).toFixed(mt(r)));
1925
+ let i = e / r, a = n === "down" ? Math.floor(i + X) : n === "up" ? Math.ceil(i - X) : Math.round(i);
1926
+ return Number((a * r).toFixed(Mt(r)));
1883
1927
  }
1884
- function $n(e, t) {
1928
+ function yr(e, t) {
1885
1929
  if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
1886
- 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);
1930
+ 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 = _r(i, t);
1887
1931
  if (s === void 0) return {
1888
1932
  ceiling: a,
1889
1933
  floor: o,
1890
1934
  reference: i
1891
1935
  };
1892
1936
  let c = Z(i + s, t);
1893
- if (Math.abs(i - s) < Y) return {
1937
+ if (Math.abs(i - s) < X) return {
1894
1938
  ceiling: c,
1895
1939
  floor: i,
1896
1940
  reference: i
1897
1941
  };
1898
1942
  let l = Z(a, t, "down"), u = Z(o, t, "up");
1899
- return l <= i && (l = c), u >= i && (u = Z(i - (Qn(i, t) ?? s), t)), u <= 0 && (u = i), {
1943
+ return l <= i && (l = c), u >= i && (u = Z(i - (vr(i, t) ?? s), t)), u <= 0 && (u = i), {
1900
1944
  ceiling: l,
1901
1945
  floor: u,
1902
1946
  reference: i
1903
1947
  };
1904
1948
  }
1905
1949
  var Q = (e, t) => Math.round(e * t * 1e9) / 1e9;
1906
- function er(e, t) {
1950
+ function br(e, t) {
1907
1951
  let n = Math.round(Math.log10(t));
1908
1952
  return {
1909
1953
  ...e,
@@ -1919,11 +1963,11 @@ function er(e, t) {
1919
1963
  }
1920
1964
  };
1921
1965
  }
1922
- var tr = 6e4, nr = 864e5;
1923
- function rr(e, t) {
1966
+ var xr = 6e4, Sr = 864e5;
1967
+ function Cr(e, t) {
1924
1968
  let n, r;
1925
1969
  if (t) {
1926
- let i = new Date(e + S(t, e) * tr);
1970
+ let i = new Date(e + b(t, e) * xr);
1927
1971
  n = i.getUTCHours(), r = i.getUTCMinutes();
1928
1972
  } else {
1929
1973
  let t = new Date(e);
@@ -1931,31 +1975,31 @@ function rr(e, t) {
1931
1975
  }
1932
1976
  return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
1933
1977
  }
1934
- function ir(e, t = Date.now(), n) {
1935
- if (n !== void 0 && !x(n)) return null;
1936
- let r = rr(t, n);
1978
+ function wr(e, t = Date.now(), n) {
1979
+ if (n !== void 0 && !y(n)) return null;
1980
+ let r = Cr(t, n);
1937
1981
  for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
1938
1982
  return null;
1939
1983
  }
1940
- var $ = (e) => String(e).padStart(2, "0"), ar = (e) => {
1984
+ var $ = (e) => String(e).padStart(2, "0"), Tr = (e) => {
1941
1985
  let t = new Date(e);
1942
1986
  return `${t.getUTCFullYear()}-${$(t.getUTCMonth() + 1)}-${$(t.getUTCDate())}`;
1943
- }, or = 4, sr = 7 * 36e5;
1944
- function cr(e, t, n) {
1945
- let r = Date.UTC(e, t - 1, 1), i = 1 + (or - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
1987
+ }, Er = 4, Dr = 7 * 36e5;
1988
+ function Or(e, t, n) {
1989
+ let r = Date.UTC(e, t - 1, 1), i = 1 + (Er - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
1946
1990
  let t = new Date(e).getUTCDay();
1947
- return t === 0 || t === 6 || (n?.(ar(e)) ?? !1);
1991
+ return t === 0 || t === 6 || (n?.(Tr(e)) ?? !1);
1948
1992
  };
1949
- for (; o(a);) a -= nr;
1950
- return ar(a);
1993
+ for (; o(a);) a -= Sr;
1994
+ return Tr(a);
1951
1995
  }
1952
- function lr(e, t) {
1953
- let n = ar(e + sr), r = (e, n) => ({
1996
+ function kr(e, t) {
1997
+ let n = Tr(e + Dr), r = (e, n) => ({
1954
1998
  symbol: `VN30F${$(e % 100)}${$(n)}`,
1955
1999
  year: e,
1956
2000
  month: n,
1957
- lastTradingDay: cr(e, n, t)
1958
- }), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + sr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
2001
+ lastTradingDay: Or(e, n, t)
2002
+ }), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + Dr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
1959
2003
  n > o.lastTradingDay && (o = i(o));
1960
2004
  let s = [o, i(o)], c = i(s[1]);
1961
2005
  for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
@@ -1963,7 +2007,7 @@ function lr(e, t) {
1963
2007
  }
1964
2008
  //#endregion
1965
2009
  //#region src/icons/iconSet.ts
1966
- var ur = {
2010
+ var Ar = {
1967
2011
  cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
1968
2012
  trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
1969
2013
  trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
@@ -2067,6 +2111,11 @@ var ur = {
2067
2111
  enter: { d: "M19 5v6.5a3 3 0 0 1-3 3H5.5M9.5 10L5 14.5L9.5 19" },
2068
2112
  stepBack: { d: "M6 5v14M18.5 5.5v13L8.5 12z" },
2069
2113
  stepForward: { d: "M18 5v14M5.5 5.5v13l10-6.5z" },
2114
+ replayPick: {
2115
+ d: "M7.5 3.5V7M7.5 17V20.5M6 7h3a1.5 1.5 0 0 1 1.5 1.5v7A1.5 1.5 0 0 1 9 17H6a1.5 1.5 0 0 1-1.5-1.5v-7A1.5 1.5 0 0 1 6 7z",
2116
+ dash: "M15 3V21",
2117
+ soft: "M15 4h4.5a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H15z"
2118
+ },
2070
2119
  ladder: { d: "M4 6H11M13 6H17M6 10H11M13 10H20M8 14H11M13 14H15M5 18H11M13 18H19" },
2071
2120
  save: { d: "M5.5 3.5h10.5l4.5 4.5v10.5a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2v-13a2 2 0 0 1 2-2zM8 3.5v5h7v-5M7.5 20.5v-6h9v6" },
2072
2121
  folder: { d: "M3.5 7a2 2 0 0 1 2-2h4l2 2.5h7a2 2 0 0 1 2 2V17a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2z" },
@@ -2092,7 +2141,7 @@ var ur = {
2092
2141
  ]
2093
2142
  ] },
2094
2143
  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" }
2095
- }, dr = {
2144
+ }, jr = {
2096
2145
  trendLine: {
2097
2146
  d: "M5 18L19 6",
2098
2147
  dots: [[5, 18], [19, 6]]
@@ -2445,7 +2494,7 @@ var ur = {
2445
2494
  ],
2446
2495
  dash: "M12 3V21"
2447
2496
  }
2448
- }, fr = {
2497
+ }, Mr = {
2449
2498
  candlestick: {
2450
2499
  d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
2451
2500
  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"]
@@ -2512,21 +2561,21 @@ var ur = {
2512
2561
  "M16 4.5h3v6h-3z"
2513
2562
  ]
2514
2563
  }
2515
- }, pr = 1.75, mr = .22, hr = /* @__PURE__ */ new WeakMap();
2516
- function gr(e) {
2517
- let t = hr.get(e);
2564
+ }, Nr = 1.75, Pr = .22, Fr = /* @__PURE__ */ new WeakMap();
2565
+ function Ir(e) {
2566
+ let t = Fr.get(e);
2518
2567
  if (t) return t;
2519
2568
  let n = "";
2520
- e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${mr}" stroke="none"/>`);
2569
+ e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${Pr}" stroke="none"/>`);
2521
2570
  for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
2522
2571
  e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
2523
- for (let [t, r, i = pr] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
2524
- return hr.set(e, n), n;
2572
+ for (let [t, r, i = Nr] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
2573
+ return Fr.set(e, n), n;
2525
2574
  }
2526
- function _r(e, t) {
2527
- 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">${gr(e)}</svg>`;
2575
+ function Lr(e, t) {
2576
+ 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">${Ir(e)}</svg>`;
2528
2577
  }
2529
2578
  //#endregion
2530
- export { t as CHART_STYLE_KEYS, fr as CHART_TYPE_ICONS, Zt as DARK_TERMINAL, Yt as DARK_THEME, Cn as DEFAULT_BAR_SPACING, Sn as DEFAULT_BAR_WIDTH, _n as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, It as DEFAULT_FONT_FAMILY, Dn as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, xn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, dr as DRAWING_TOOL_ICONS, kn as FIBONACCI, Vn as HNX_SESSIONS, Bn as HOSE_SESSIONS, pr as ICON_DOT_RADIUS, mr as ICON_SOFT_OPACITY, Xt as LIGHT_THEME, e as LayerType, Yn as MARKET_CRYPTO, Kn as MARKET_HNX, Wn as MARKET_HOSE, Gn as MARKET_HOSE_ETF, Xn as MARKET_NYSE, qn as MARKET_UPCOM, Jn as MARKET_VN30F, En as MIN_PANEL_HEIGHT, se as MS_TIME_THRESHOLD, On as PHI, wn as PRICE_AXIS_WIDTH, nt as PRICE_SOURCES, Lt as SANS_FONT_FAMILY, I as TC_PALETTE, Jt as TC_SERIES_COLORS, vn as TIMEFRAMES_CRYPTO, bn as TIMEFRAMES_FOREX, yn as TIMEFRAMES_STOCK, Tn as TIME_AXIS_HEIGHT, ur as UI_ICONS, Hn as UPCOM_SESSIONS, Un as VN30F_SESSIONS, q as VN_COLORS, zt as VOLUME_ALPHA, Re as alignToTimeframe, Ye as autoPricePrecision, ce as barTimeUnit, He as barsAreDaily, gn as chartStyleValue, ne as clamp, $n as computePriceLimits, he as computePriceRange, oe as computeTickStep, Zn as createVNTheme, tt as detectPrecision, Tt as drawingOption, U as en, fe as findBarIndex, me as fitPriceRange, Ze as formatFraction, K as formatNumber, O as formatPrice, Xe as formatPriceScaleLabel, Le as formatTimestamp, Rn as formatVND, et as formatVolume, zn as formatVolumeLoc, Qe as fractionTick, ir as getCurrentSession, Pn as getLocale, Ln as getLocaleStrings, _e as hexToRgba, _r as iconSvg, ot as indicatorSource, ie as inverseLerp, Be as isDateOnly, rt as isPriceSource, Ie as isTimeFrame, x as isValidTimeZone, re as lerp, be as lerpColor, dn as lineDash, _t as marketStatus, ge as mergeBar, m as niceNumber, ue as normalizeBar, le as normalizeBarTime, w as offsetAt, pe as padPriceRange, st as parseIndicatorSource, T as parseTimeframe, An as phiStep, dt as pickBaseTimeframe, $e as priceFormatterFor, X as priceStepAt, Je as priceTagText, pt as rankSymbols, sn as readChartStyleOverrides, Ft as readChartTypeOptions, un as readIndicatorPlotStyles, te as readNews, cn as readPaneStyle, l as readQuote, In as registerLocale, lt as resampleBars, pn as resolveChartTheme, Et as resolveDrawingOptions, B as resolveVolumeColors, Z as roundToPriceStep, ae as roundToStep, Ct as sanitizeDrawingOptions, Pt as sanitizeDrawingStyle, er as scaleMarketPrices, A as sessionMinute, Nn as setLocale, de as sliceVisibleData, it as sourcePrice, mt as stepDecimals, ht as symbolTimeZone, Fn as t, Fe as tickBarCount, ze as timeParts, Ge as timeframeBucketStart, E as timeframeToMs, Ue as tzLabel, jn as vi, lr as vn30fContracts, cr as vn30fLastTradingDay, L as volumeColor, Oe as wallToUtc, h as withAlpha, S as zoneOffsetMinutes, Ae as zonedDateFormatter };
2579
+ export { t as CHART_STYLE_KEYS, Mr as CHART_TYPE_ICONS, hn as DARK_TERMINAL, pn as DARK_THEME, Hn as DEFAULT_BAR_SPACING, Vn as DEFAULT_BAR_WIDTH, In as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, $t as DEFAULT_FONT_FAMILY, Kn as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, Bn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, jr as DRAWING_TOOL_ICONS, Jn as FIBONACCI, or as HNX_SESSIONS, ar as HOSE_SESSIONS, Nr as ICON_DOT_RADIUS, Pr as ICON_SOFT_OPACITY, mn as LIGHT_THEME, e as LayerType, mr as MARKET_CRYPTO, dr as MARKET_HNX, lr as MARKET_HOSE, ur as MARKET_HOSE_ETF, hr as MARKET_NYSE, fr as MARKET_UPCOM, pr as MARKET_VN30F, Gn as MIN_PANEL_HEIGHT, ce as MS_TIME_THRESHOLD, qn as PHI, Un as PRICE_AXIS_WIDTH, _t as PRICE_SOURCES, en as SANS_FONT_FAMILY, z as TC_PALETTE, fn as TC_SERIES_COLORS, Ln as TIMEFRAMES_CRYPTO, zn as TIMEFRAMES_FOREX, Rn as TIMEFRAMES_STOCK, Wn as TIME_AXIS_HEIGHT, Ar as UI_ICONS, sr as UPCOM_SESSIONS, cr as VN30F_SESSIONS, J as VN_COLORS, nn as VOLUME_ALPHA, ze as alignToTimeframe, lt as autoPricePrecision, at as barDateParts, it as barDateZone, le as barTimeUnit, Ue as barsAreDaily, Fn as chartStyleValue, ne as clamp, yr as computePriceLimits, ge as computePriceRange, se as computeTickStep, gr as createVNTheme, gt as detectPrecision, Ut as drawingOption, W as en, pe as findBarIndex, he as fitPriceRange, ft as formatFraction, q as formatNumber, A as formatPrice, dt as formatPriceScaleLabel, Re as formatTimestamp, rr as formatVND, ht as formatVolume, ir as formatVolumeLoc, pt as fractionTick, wr as getCurrentSession, $n as getLocale, nr as getLocaleStrings, ve as hexToRgba, Lr as iconSvg, xt as indicatorSource, ie as inverseLerp, Ve as isDateOnly, vt as isPriceSource, Le as isTimeFrame, S as isUtcTimeZone, y as isValidTimeZone, re as lerp, xe as lerpColor, An as lineDash, Ft as marketStatus, _e as mergeBar, oe as niceNumber, de as normalizeBar, ue as normalizeBarTime, C as offsetAt, me as padPriceRange, St as parseIndicatorSource, T as parseTimeframe, Yn as phiStep, kt as pickBaseTimeframe, mt as priceFormatterFor, _r as priceStepAt, ct as priceTagText, jt as rankSymbols, En as readChartStyleOverrides, Qt as readChartTypeOptions, kn as readIndicatorPlotStyles, te as readNews, Dn as readPaneStyle, l as readQuote, tr as registerLocale, Tt as resampleBars, Mn as resolveChartTheme, Wt as resolveDrawingOptions, _n as resolveVolumeColors, Z as roundToPriceStep, ae as roundToStep, Vt as sanitizeDrawingOptions, Zt as sanitizeDrawingStyle, br as scaleMarketPrices, M as sessionMinute, Qn as setLocale, fe as sliceVisibleData, yt as sourcePrice, Mt as stepDecimals, Nt as symbolTimeZone, er as t, Ie as tickBarCount, Be as timeParts, nt as timeframeBucketStart, $e as timeframeFollowsDays, et as timeframeSpansDays, E as timeframeToMs, We as tzLabel, Xn as vi, kr as vn30fContracts, Or as vn30fLastTradingDay, B as volumeColor, Ae as wallToUtc, m as withAlpha, b as zoneOffsetMinutes, Me as zonedDateFormatter };
2531
2580
 
2532
2581
  //# sourceMappingURL=index.js.map