@tradecanvas/commons 1.53.1 → 1.54.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/constants/themes.d.ts +9 -1
- package/dist/constants/themes.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +364 -328
- package/dist/index.js.map +1 -1
- package/dist/types/builtInIndicators.d.ts +5 -4
- package/dist/types/builtInIndicators.d.ts.map +1 -1
- package/dist/types/chart.d.ts +6 -2
- package/dist/types/chart.d.ts.map +1 -1
- package/dist/types/events.d.ts +18 -0
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/theme.d.ts +13 -0
- package/dist/types/theme.d.ts.map +1 -1
- package/dist/utils/color.d.ts +10 -0
- package/dist/utils/color.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -350,7 +350,7 @@ function m(e, t) {
|
|
|
350
350
|
return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
|
|
351
351
|
}
|
|
352
352
|
var ye = 3;
|
|
353
|
-
function
|
|
353
|
+
function h(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,41 @@ function be(e) {
|
|
|
373
373
|
a: Math.min(1, Math.max(0, i))
|
|
374
374
|
};
|
|
375
375
|
}
|
|
376
|
-
function
|
|
377
|
-
let r =
|
|
376
|
+
function be(e, t, n) {
|
|
377
|
+
let r = h(e), i = h(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
380
|
return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(ye))})`;
|
|
381
381
|
}
|
|
382
|
+
function xe(e) {
|
|
383
|
+
let t = h(e);
|
|
384
|
+
if (!t) return null;
|
|
385
|
+
let n = (e) => {
|
|
386
|
+
let t = e / 255;
|
|
387
|
+
return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
|
|
388
|
+
};
|
|
389
|
+
return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b);
|
|
390
|
+
}
|
|
391
|
+
function g(e, t) {
|
|
392
|
+
let n = xe(e), r = xe(t);
|
|
393
|
+
return n === null || r === null ? null : (Math.max(n, r) + .05) / (Math.min(n, r) + .05);
|
|
394
|
+
}
|
|
395
|
+
var Se = 20;
|
|
396
|
+
function Ce(e, t, n, r) {
|
|
397
|
+
let i = g(e, t);
|
|
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;
|
|
402
|
+
}
|
|
403
|
+
return n;
|
|
404
|
+
}
|
|
405
|
+
function we(e, t, n) {
|
|
406
|
+
return (g(e, t) ?? 0) >= (g(e, n) ?? 0) ? t : n;
|
|
407
|
+
}
|
|
382
408
|
//#endregion
|
|
383
409
|
//#region src/utils/timezone.ts
|
|
384
|
-
var
|
|
410
|
+
var _ = 6e4, Te = 1440 * _, v = 15 * _, Ee = 8192, De = 7 * Te, Oe = 4096, ke = new Set([
|
|
385
411
|
"UTC",
|
|
386
412
|
"Etc/UTC",
|
|
387
413
|
"GMT",
|
|
@@ -392,9 +418,9 @@ var h = 6e4, Se = 1440 * h, g = 15 * h, Ce = 8192, _ = 7 * Se, we = 4096, Te = n
|
|
|
392
418
|
"Etc/Universal",
|
|
393
419
|
"Zulu",
|
|
394
420
|
"Etc/Zulu"
|
|
395
|
-
]),
|
|
396
|
-
function
|
|
397
|
-
let t =
|
|
421
|
+
]), Ae = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Map(), je = /* @__PURE__ */ new Map();
|
|
422
|
+
function Me(e) {
|
|
423
|
+
let t = Ae.get(e);
|
|
398
424
|
return t || (t = new Intl.DateTimeFormat("en-US", {
|
|
399
425
|
timeZone: e,
|
|
400
426
|
hourCycle: "h23",
|
|
@@ -404,34 +430,34 @@ function Oe(e) {
|
|
|
404
430
|
hour: "numeric",
|
|
405
431
|
minute: "numeric",
|
|
406
432
|
second: "numeric"
|
|
407
|
-
}),
|
|
433
|
+
}), Ae.set(e, t)), t;
|
|
408
434
|
}
|
|
409
|
-
function
|
|
435
|
+
function b(e) {
|
|
410
436
|
if (!e) return !1;
|
|
411
437
|
try {
|
|
412
|
-
return
|
|
438
|
+
return Me(e), !0;
|
|
413
439
|
} catch {
|
|
414
440
|
return !1;
|
|
415
441
|
}
|
|
416
442
|
}
|
|
417
|
-
function
|
|
418
|
-
if (!Number.isFinite(t) ||
|
|
419
|
-
let n =
|
|
420
|
-
n || (n = /* @__PURE__ */ new Map(),
|
|
421
|
-
let r = Math.floor(t /
|
|
422
|
-
return i || (i =
|
|
423
|
-
}
|
|
424
|
-
function
|
|
425
|
-
let n =
|
|
443
|
+
function x(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 = Ne(e, r * De), n.size >= Oe && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
|
|
449
|
+
}
|
|
450
|
+
function Ne(e, t) {
|
|
451
|
+
let n = Pe(e, t), r = t + De - v, i = Pe(e, r);
|
|
426
452
|
if (i === n) return {
|
|
427
453
|
before: n,
|
|
428
454
|
change: Infinity,
|
|
429
455
|
after: i
|
|
430
456
|
};
|
|
431
457
|
let a = t;
|
|
432
|
-
for (; r - a >
|
|
433
|
-
let t = a + Math.floor((r - a) /
|
|
434
|
-
|
|
458
|
+
for (; r - a > v;) {
|
|
459
|
+
let t = a + Math.floor((r - a) / v / 2) * v;
|
|
460
|
+
Pe(e, t) === n ? a = t : r = t;
|
|
435
461
|
}
|
|
436
462
|
return {
|
|
437
463
|
before: n,
|
|
@@ -439,11 +465,11 @@ function ke(e, t) {
|
|
|
439
465
|
after: i
|
|
440
466
|
};
|
|
441
467
|
}
|
|
442
|
-
function
|
|
443
|
-
let n = Math.floor(t /
|
|
468
|
+
function Pe(e, t) {
|
|
469
|
+
let n = Math.floor(t / v), r = `${e}|${n}`, i = y.get(r);
|
|
444
470
|
if (i !== void 0) return i;
|
|
445
|
-
let a = n *
|
|
446
|
-
for (let t of
|
|
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))) {
|
|
447
473
|
let e = Number(t.value);
|
|
448
474
|
switch (t.type) {
|
|
449
475
|
case "year":
|
|
@@ -466,24 +492,24 @@ function x(e, t) {
|
|
|
466
492
|
break;
|
|
467
493
|
}
|
|
468
494
|
}
|
|
469
|
-
let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) /
|
|
470
|
-
return
|
|
495
|
+
let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / _);
|
|
496
|
+
return y.size >= Ee && y.clear(), y.set(r, f), f;
|
|
471
497
|
}
|
|
472
498
|
function S(e) {
|
|
473
|
-
return e === 0 || typeof e == "string" &&
|
|
499
|
+
return e === 0 || typeof e == "string" && ke.has(e);
|
|
474
500
|
}
|
|
475
501
|
function C(e, t) {
|
|
476
|
-
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e :
|
|
502
|
+
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : x(e, t);
|
|
477
503
|
}
|
|
478
|
-
function
|
|
479
|
-
let n = e - C(t, e -
|
|
480
|
-
if (n + C(t, n) *
|
|
481
|
-
let r = e - C(t, e +
|
|
482
|
-
return r + C(t, r) *
|
|
504
|
+
function Fe(e, t) {
|
|
505
|
+
let n = e - C(t, e - Te) * _;
|
|
506
|
+
if (n + C(t, n) * _ === e) return n;
|
|
507
|
+
let r = e - C(t, e + Te) * _;
|
|
508
|
+
return r + C(t, r) * _ === e ? r : n;
|
|
483
509
|
}
|
|
484
|
-
var
|
|
485
|
-
function
|
|
486
|
-
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i =
|
|
510
|
+
var Ie = /* @__PURE__ */ new Map();
|
|
511
|
+
function Le(e, t, n) {
|
|
512
|
+
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = Ie.get(r);
|
|
487
513
|
if (i) return i;
|
|
488
514
|
let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
|
|
489
515
|
try {
|
|
@@ -497,12 +523,12 @@ function Me(e, t, n) {
|
|
|
497
523
|
timeZone: a
|
|
498
524
|
});
|
|
499
525
|
}
|
|
500
|
-
let s = typeof n == "number" ? n *
|
|
501
|
-
return i = (e) => o.format(new Date(e + s)),
|
|
526
|
+
let s = typeof n == "number" ? n * _ : 0;
|
|
527
|
+
return i = (e) => o.format(new Date(e + s)), Ie.set(r, i), i;
|
|
502
528
|
}
|
|
503
529
|
//#endregion
|
|
504
530
|
//#region src/utils/time.ts
|
|
505
|
-
var
|
|
531
|
+
var Re = {
|
|
506
532
|
"1s": 1e3,
|
|
507
533
|
"5s": 5e3,
|
|
508
534
|
"15s": 15e3,
|
|
@@ -536,9 +562,9 @@ var Ne = {
|
|
|
536
562
|
d: 864e5,
|
|
537
563
|
w: 6048e5,
|
|
538
564
|
M: 2592e6
|
|
539
|
-
},
|
|
565
|
+
}, ze = /^([1-9]\d*)([smhdwM])$/;
|
|
540
566
|
function T(e) {
|
|
541
|
-
let t =
|
|
567
|
+
let t = ze.exec(e);
|
|
542
568
|
if (!t) return null;
|
|
543
569
|
let n = Number(t[1]);
|
|
544
570
|
return Number.isSafeInteger(n) ? {
|
|
@@ -546,23 +572,23 @@ function T(e) {
|
|
|
546
572
|
unit: t[2]
|
|
547
573
|
} : null;
|
|
548
574
|
}
|
|
549
|
-
var
|
|
550
|
-
function
|
|
575
|
+
var Be = 1e6;
|
|
576
|
+
function Ve(e) {
|
|
551
577
|
let t = /^([1-9]\d*)T$/.exec(e);
|
|
552
578
|
if (!t) return null;
|
|
553
579
|
let n = Number(t[1]);
|
|
554
|
-
return Number.isSafeInteger(n) && n <=
|
|
580
|
+
return Number.isSafeInteger(n) && n <= Be ? n : null;
|
|
555
581
|
}
|
|
556
|
-
function
|
|
582
|
+
function He(e) {
|
|
557
583
|
return T(e) !== null;
|
|
558
584
|
}
|
|
559
585
|
function E(e) {
|
|
560
|
-
let t =
|
|
586
|
+
let t = Re[e];
|
|
561
587
|
if (t !== void 0) return t;
|
|
562
588
|
let n = T(e);
|
|
563
589
|
return n ? n.count * w[n.unit] : NaN;
|
|
564
590
|
}
|
|
565
|
-
function
|
|
591
|
+
function Ue(e, t) {
|
|
566
592
|
let n = new Date(e), r = E(t);
|
|
567
593
|
return r >= 864e5 ? n.toLocaleDateString(void 0, {
|
|
568
594
|
month: "short",
|
|
@@ -576,11 +602,11 @@ function Re(e, t) {
|
|
|
576
602
|
second: "2-digit"
|
|
577
603
|
});
|
|
578
604
|
}
|
|
579
|
-
function
|
|
605
|
+
function We(e, t) {
|
|
580
606
|
let n = E(t);
|
|
581
607
|
return Math.floor(e / n) * n;
|
|
582
608
|
}
|
|
583
|
-
function
|
|
609
|
+
function Ge(e, t) {
|
|
584
610
|
if (t === null) {
|
|
585
611
|
let t = new Date(e);
|
|
586
612
|
return {
|
|
@@ -600,11 +626,11 @@ function Be(e, t) {
|
|
|
600
626
|
minutes: n.getUTCMinutes()
|
|
601
627
|
};
|
|
602
628
|
}
|
|
603
|
-
function
|
|
629
|
+
function Ke(e) {
|
|
604
630
|
return e.hours === 0 && e.minutes === 0;
|
|
605
631
|
}
|
|
606
|
-
var
|
|
607
|
-
function
|
|
632
|
+
var qe = 20 * 36e5;
|
|
633
|
+
function Je(e) {
|
|
608
634
|
let t = Math.min(e.length, 64);
|
|
609
635
|
if (t < 2) return;
|
|
610
636
|
let n = le(e), r = Infinity;
|
|
@@ -612,40 +638,40 @@ function Ue(e) {
|
|
|
612
638
|
let t = Math.abs(e[i].time - e[i - 1].time) * n;
|
|
613
639
|
t > 0 && t < r && (r = t);
|
|
614
640
|
}
|
|
615
|
-
return r === Infinity ? void 0 : r >=
|
|
641
|
+
return r === Infinity ? void 0 : r >= qe;
|
|
616
642
|
}
|
|
617
|
-
function
|
|
643
|
+
function Ye(e, t = Date.now()) {
|
|
618
644
|
let n = C(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
|
|
619
645
|
return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
|
|
620
646
|
}
|
|
621
|
-
var
|
|
647
|
+
var Xe = Date.UTC(1970, 0, 5), Ze = w.m, D = w.d, Qe = 24, $e = {
|
|
622
648
|
count: 1,
|
|
623
649
|
unit: "m"
|
|
624
|
-
},
|
|
625
|
-
function
|
|
650
|
+
}, et = 256, O = /* @__PURE__ */ new Map();
|
|
651
|
+
function tt(e) {
|
|
626
652
|
let t = O.get(e);
|
|
627
|
-
return t || (t = T(e) ??
|
|
653
|
+
return t || (t = T(e) ?? $e, O.size >= et && O.clear(), O.set(e, t)), t;
|
|
628
654
|
}
|
|
629
|
-
function
|
|
655
|
+
function nt({ unit: e }) {
|
|
630
656
|
return e === "d" || e === "w" || e === "M";
|
|
631
657
|
}
|
|
632
|
-
function
|
|
633
|
-
return e.unit === "h" ? e.count > 1 &&
|
|
658
|
+
function rt(e) {
|
|
659
|
+
return e.unit === "h" ? e.count > 1 && Qe % e.count === 0 : nt(e);
|
|
634
660
|
}
|
|
635
|
-
function
|
|
636
|
-
return
|
|
661
|
+
function it(e) {
|
|
662
|
+
return rt(tt(e));
|
|
637
663
|
}
|
|
638
|
-
function
|
|
639
|
-
return
|
|
664
|
+
function at(e) {
|
|
665
|
+
return nt(tt(e));
|
|
640
666
|
}
|
|
641
|
-
function
|
|
667
|
+
function ot(e) {
|
|
642
668
|
return e !== void 0 && !S(e);
|
|
643
669
|
}
|
|
644
|
-
function
|
|
645
|
-
let r =
|
|
646
|
-
return !
|
|
670
|
+
function st(e, t, n = 1) {
|
|
671
|
+
let r = tt(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 % D === 0 ? ct(e, r, i) : Fe(ct(e + C(a, e) * Ze, r, i), a);
|
|
647
673
|
}
|
|
648
|
-
function
|
|
674
|
+
function ct(e, { count: t, unit: n }, r) {
|
|
649
675
|
if (n === "s" || n === "m" || n === "h" || n === "d") {
|
|
650
676
|
let r = t * w[n];
|
|
651
677
|
return Math.floor(e / r) * r;
|
|
@@ -654,68 +680,68 @@ function rt(e, { count: t, unit: n }, r) {
|
|
|
654
680
|
if (n === "w") {
|
|
655
681
|
let e = (i.getUTCDay() - r + 7) % 7, n = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate() - e);
|
|
656
682
|
if (t <= 1) return n;
|
|
657
|
-
let a = Math.floor((n -
|
|
658
|
-
return
|
|
683
|
+
let a = Math.floor((n - Xe) / (7 * D));
|
|
684
|
+
return Xe + Math.floor(a / t) * t * 7 * D;
|
|
659
685
|
}
|
|
660
686
|
let a = i.getUTCFullYear() * 12 + i.getUTCMonth(), o = Math.floor(a / t) * t;
|
|
661
687
|
return Date.UTC(Math.floor(o / 12), o % 12, 1);
|
|
662
688
|
}
|
|
663
|
-
function
|
|
664
|
-
return e % D === 0 ? 0 : n &&
|
|
689
|
+
function lt(e, t, n) {
|
|
690
|
+
return e % D === 0 ? 0 : n && st(e, "1d", { timeZone: n }) === e ? n : t;
|
|
665
691
|
}
|
|
666
|
-
function
|
|
667
|
-
return
|
|
692
|
+
function ut(e, t, n) {
|
|
693
|
+
return Ge(e, lt(e, t, n));
|
|
668
694
|
}
|
|
669
695
|
//#endregion
|
|
670
696
|
//#region src/utils/precision.ts
|
|
671
|
-
var
|
|
672
|
-
function
|
|
697
|
+
var dt = 64, k = /* @__PURE__ */ new Map();
|
|
698
|
+
function ft(e, t) {
|
|
673
699
|
let n = `${e}|${t}`, r = k.get(n);
|
|
674
|
-
return r || (k.size >=
|
|
700
|
+
return r || (k.size >= dt && k.clear(), r = new Intl.NumberFormat(e, {
|
|
675
701
|
minimumFractionDigits: t,
|
|
676
702
|
maximumFractionDigits: t
|
|
677
703
|
}), k.set(n, r)), r;
|
|
678
704
|
}
|
|
679
|
-
function
|
|
680
|
-
return t.formatPrice ? t.formatPrice(e) : A(e, n ?? t.pricePrecision ??
|
|
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");
|
|
681
707
|
}
|
|
682
708
|
function A(e, t = 2, n = "en-US") {
|
|
683
|
-
return
|
|
709
|
+
return ft(n, t).format(e);
|
|
684
710
|
}
|
|
685
|
-
function
|
|
711
|
+
function mt(e, t) {
|
|
686
712
|
if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
|
|
687
713
|
let n = se(e, t, 8);
|
|
688
714
|
return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
|
|
689
715
|
}
|
|
690
|
-
var
|
|
691
|
-
function
|
|
716
|
+
var ht = 2;
|
|
717
|
+
function gt(e, t, n, r = 2, i = "en-US") {
|
|
692
718
|
if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
|
|
693
719
|
if (t === "percentage") {
|
|
694
|
-
let t = (e / n - 1) * 100, r = A(Math.abs(t),
|
|
695
|
-
return `${r === A(0,
|
|
720
|
+
let t = (e / n - 1) * 100, r = A(Math.abs(t), ht, i);
|
|
721
|
+
return `${r === A(0, ht, i) ? "" : t > 0 ? "+" : "-"}${r}%`;
|
|
696
722
|
}
|
|
697
723
|
return A(e / n * 100, 2, i);
|
|
698
724
|
}
|
|
699
725
|
return A(e, r, i);
|
|
700
726
|
}
|
|
701
|
-
function
|
|
727
|
+
function _t(e, t, n = 1) {
|
|
702
728
|
let r = Number.isInteger(n) && n > 1 ? n : 1;
|
|
703
729
|
if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
|
|
704
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)) : "";
|
|
705
731
|
return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
|
|
706
732
|
}
|
|
707
|
-
function
|
|
733
|
+
function vt(e) {
|
|
708
734
|
if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
|
|
709
735
|
let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
|
|
710
736
|
return 1 / (e.denominator * t);
|
|
711
737
|
}
|
|
712
|
-
function
|
|
713
|
-
return e ? typeof e == "function" ? e :
|
|
738
|
+
function yt(e) {
|
|
739
|
+
return e ? typeof e == "function" ? e : vt(e) === null ? null : (t) => _t(t, e.denominator, e.subDenominator) : null;
|
|
714
740
|
}
|
|
715
|
-
function
|
|
741
|
+
function bt(e) {
|
|
716
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);
|
|
717
743
|
}
|
|
718
|
-
function
|
|
744
|
+
function xt(e) {
|
|
719
745
|
let t = 0;
|
|
720
746
|
for (let n of e) {
|
|
721
747
|
let e = n.toString(), r = e.indexOf(".");
|
|
@@ -725,7 +751,7 @@ function gt(e) {
|
|
|
725
751
|
}
|
|
726
752
|
//#endregion
|
|
727
753
|
//#region src/utils/priceSource.ts
|
|
728
|
-
var
|
|
754
|
+
var St = [
|
|
729
755
|
"close",
|
|
730
756
|
"open",
|
|
731
757
|
"high",
|
|
@@ -735,10 +761,10 @@ var _t = [
|
|
|
735
761
|
"ohlc4",
|
|
736
762
|
"hlcc4"
|
|
737
763
|
];
|
|
738
|
-
function
|
|
739
|
-
return typeof e == "string" &&
|
|
764
|
+
function Ct(e) {
|
|
765
|
+
return typeof e == "string" && St.includes(e);
|
|
740
766
|
}
|
|
741
|
-
function
|
|
767
|
+
function wt(e, t) {
|
|
742
768
|
switch (t) {
|
|
743
769
|
case "open": return e.open;
|
|
744
770
|
case "high": return e.high;
|
|
@@ -750,13 +776,13 @@ function yt(e, t) {
|
|
|
750
776
|
default: return e.close;
|
|
751
777
|
}
|
|
752
778
|
}
|
|
753
|
-
var
|
|
754
|
-
function
|
|
779
|
+
var Tt = /^ind:([^:]+):(.+)$/;
|
|
780
|
+
function Et(e, t) {
|
|
755
781
|
return `ind:${e}:${t}`;
|
|
756
782
|
}
|
|
757
|
-
function
|
|
783
|
+
function Dt(e) {
|
|
758
784
|
if (typeof e != "string") return null;
|
|
759
|
-
let t =
|
|
785
|
+
let t = Tt.exec(e);
|
|
760
786
|
return t ? {
|
|
761
787
|
instanceId: t[1],
|
|
762
788
|
key: t[2]
|
|
@@ -764,11 +790,11 @@ function St(e) {
|
|
|
764
790
|
}
|
|
765
791
|
//#endregion
|
|
766
792
|
//#region src/utils/resample.ts
|
|
767
|
-
var
|
|
768
|
-
function
|
|
769
|
-
let r =
|
|
793
|
+
var Ot = 864e5, kt = 6e4;
|
|
794
|
+
function At(e, t, n = 1) {
|
|
795
|
+
let r = jt(e, t, n), i = [], a = null;
|
|
770
796
|
for (let n of e) {
|
|
771
|
-
let e =
|
|
797
|
+
let e = st(n.time, t, r);
|
|
772
798
|
a === null || e !== a.time ? (a = {
|
|
773
799
|
time: e,
|
|
774
800
|
open: n.open,
|
|
@@ -780,29 +806,29 @@ function Tt(e, t, n = 1) {
|
|
|
780
806
|
}
|
|
781
807
|
return i;
|
|
782
808
|
}
|
|
783
|
-
function
|
|
784
|
-
return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || S(n.timeZone) ||
|
|
809
|
+
function jt(e, t, n) {
|
|
810
|
+
return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || S(n.timeZone) || !it(t) ? n : {
|
|
785
811
|
...n,
|
|
786
|
-
dates:
|
|
812
|
+
dates: Je(e) === !0
|
|
787
813
|
};
|
|
788
814
|
}
|
|
789
|
-
var
|
|
790
|
-
function
|
|
815
|
+
var Mt = (e) => e === "s" || e === "m" || e === "h" || e === "d";
|
|
816
|
+
function Nt(e, t) {
|
|
791
817
|
let n = T(e), r = T(t);
|
|
792
818
|
if (!n || !r) return !1;
|
|
793
819
|
let i = E(e);
|
|
794
|
-
return n.unit === "d" && n.count > 1 ? !1 :
|
|
820
|
+
return n.unit === "d" && n.count > 1 ? !1 : Mt(r.unit) ? Mt(n.unit) && E(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : Mt(n.unit) && Ot % i === 0;
|
|
795
821
|
}
|
|
796
|
-
function
|
|
822
|
+
function Pt(e, t) {
|
|
797
823
|
let n = E(e);
|
|
798
|
-
if (!(n <
|
|
824
|
+
if (!(n < Ot)) return !0;
|
|
799
825
|
let r = (/* @__PURE__ */ new Date()).getUTCFullYear();
|
|
800
|
-
return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => C(t, e) *
|
|
826
|
+
return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => C(t, e) * kt % n === 0);
|
|
801
827
|
}
|
|
802
|
-
function
|
|
803
|
-
let { timeZone: r } = n, i = r !== void 0 && !S(r) &&
|
|
828
|
+
function Ft(e, t, n = {}) {
|
|
829
|
+
let { timeZone: r } = n, i = r !== void 0 && !S(r) && it(e) ? r : void 0, a = null, o = 0;
|
|
804
830
|
for (let n of t) {
|
|
805
|
-
if (!
|
|
831
|
+
if (!Nt(n, e) || i !== void 0 && !Pt(n, i)) continue;
|
|
806
832
|
let t = E(n);
|
|
807
833
|
t > o && (a = n, o = t);
|
|
808
834
|
}
|
|
@@ -810,19 +836,19 @@ function kt(e, t, n = {}) {
|
|
|
810
836
|
}
|
|
811
837
|
//#endregion
|
|
812
838
|
//#region src/utils/symbols.ts
|
|
813
|
-
function
|
|
839
|
+
function It(e, t) {
|
|
814
840
|
if (!e) return 0;
|
|
815
841
|
if (e === t) return 1e3;
|
|
816
842
|
if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
|
|
817
843
|
let n = e.indexOf(t);
|
|
818
844
|
return n >= 0 ? 300 - Math.min(100, n) : 0;
|
|
819
845
|
}
|
|
820
|
-
function
|
|
846
|
+
function Lt(e, t, n = 50, r) {
|
|
821
847
|
let i = t.trim().toUpperCase();
|
|
822
848
|
if (!i) return e.slice(0, n);
|
|
823
849
|
let a = [];
|
|
824
850
|
for (let t of e) {
|
|
825
|
-
let e = Math.max(
|
|
851
|
+
let e = Math.max(It(t.symbol.toUpperCase(), i), It((t.description ?? "").toUpperCase(), i) * .8);
|
|
826
852
|
e > 0 && a.push({
|
|
827
853
|
info: t,
|
|
828
854
|
score: e + (r?.(t) ?? 0)
|
|
@@ -830,7 +856,7 @@ function jt(e, t, n = 50, r) {
|
|
|
830
856
|
}
|
|
831
857
|
return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
|
|
832
858
|
}
|
|
833
|
-
function
|
|
859
|
+
function Rt(e) {
|
|
834
860
|
let t = typeof e == "number" ? e : Number(e);
|
|
835
861
|
if (!Number.isFinite(t) || t <= 0) return 0;
|
|
836
862
|
for (let e = 0; e <= 12; e++) {
|
|
@@ -839,10 +865,10 @@ function Mt(e) {
|
|
|
839
865
|
}
|
|
840
866
|
return 12;
|
|
841
867
|
}
|
|
842
|
-
function
|
|
868
|
+
function zt(e) {
|
|
843
869
|
return e?.timeZone ?? e?.timezone;
|
|
844
870
|
}
|
|
845
|
-
function
|
|
871
|
+
function j(e) {
|
|
846
872
|
let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
|
|
847
873
|
if (!t) return null;
|
|
848
874
|
let n = Number(t[1]), r = Number(t[2]);
|
|
@@ -850,26 +876,26 @@ function M(e) {
|
|
|
850
876
|
}
|
|
851
877
|
//#endregion
|
|
852
878
|
//#region src/utils/marketStatus.ts
|
|
853
|
-
var
|
|
854
|
-
function
|
|
855
|
-
let n =
|
|
856
|
-
let t =
|
|
879
|
+
var M = 864e5, N = 6e4, Bt = 8;
|
|
880
|
+
function Vt(e, t) {
|
|
881
|
+
let n = zt(e), r = (e?.sessions ?? []).flatMap((e) => {
|
|
882
|
+
let t = j(e.start), n = j(e.end);
|
|
857
883
|
return t === null || n === null || t === n ? [] : [{
|
|
858
884
|
start: t,
|
|
859
885
|
end: n,
|
|
860
886
|
days: Array.isArray(e.days) ? e.days : null
|
|
861
887
|
}];
|
|
862
888
|
});
|
|
863
|
-
if (!n || !
|
|
889
|
+
if (!n || !b(n) || r.length === 0 || !Number.isFinite(t)) return {
|
|
864
890
|
state: "always",
|
|
865
891
|
next: null
|
|
866
892
|
};
|
|
867
|
-
let i =
|
|
868
|
-
for (let e = -1; e <=
|
|
869
|
-
let t = a + e *
|
|
893
|
+
let i = x(n, t) * N, a = Math.floor((t + i) / M) * M, o = (e) => e - x(n, e - x(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;
|
|
870
896
|
for (let e of r) {
|
|
871
897
|
if (e.days && !e.days.includes(n)) continue;
|
|
872
|
-
let r = t + e.start *
|
|
898
|
+
let r = t + e.start * N, i = (e.end > e.start ? t : t + M) + e.end * N;
|
|
873
899
|
s.push([o(r), o(i)]);
|
|
874
900
|
}
|
|
875
901
|
}
|
|
@@ -892,15 +918,15 @@ function Ft(e, t) {
|
|
|
892
918
|
}
|
|
893
919
|
//#endregion
|
|
894
920
|
//#region src/utils/drawingOptions.ts
|
|
895
|
-
var
|
|
896
|
-
function
|
|
921
|
+
var Ht = 48, Ut = 2e3, Wt = 1e4;
|
|
922
|
+
function Gt(e) {
|
|
897
923
|
if (!Array.isArray(e)) return;
|
|
898
924
|
let t = [];
|
|
899
925
|
for (let n of e) {
|
|
900
|
-
if (t.length >=
|
|
926
|
+
if (t.length >= Ht) break;
|
|
901
927
|
if (typeof n != "object" || !n) continue;
|
|
902
928
|
let { value: e, visible: r, color: i } = n;
|
|
903
|
-
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) >
|
|
929
|
+
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > Wt || r !== void 0 && typeof r != "boolean") continue;
|
|
904
930
|
let a = {
|
|
905
931
|
value: e,
|
|
906
932
|
visible: r ?? !0
|
|
@@ -909,109 +935,109 @@ function zt(e) {
|
|
|
909
935
|
}
|
|
910
936
|
return t;
|
|
911
937
|
}
|
|
912
|
-
function
|
|
938
|
+
function Kt(e, t) {
|
|
913
939
|
switch (e.kind) {
|
|
914
940
|
case "boolean": return typeof t == "boolean" ? t : void 0;
|
|
915
941
|
case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
|
|
916
942
|
case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
|
|
917
|
-
case "levels": return
|
|
918
|
-
case "text": return typeof t == "string" ? t.slice(0,
|
|
943
|
+
case "levels": return Gt(t);
|
|
944
|
+
case "text": return typeof t == "string" ? t.slice(0, Ut) : void 0;
|
|
919
945
|
}
|
|
920
946
|
}
|
|
921
|
-
function
|
|
947
|
+
function qt(e, t) {
|
|
922
948
|
if (!e || typeof t != "object" || !t) return {};
|
|
923
949
|
let n = {};
|
|
924
950
|
for (let [r, i] of Object.entries(t)) {
|
|
925
951
|
let t = e[r];
|
|
926
952
|
if (!t) continue;
|
|
927
|
-
let a =
|
|
953
|
+
let a = Kt(t, i);
|
|
928
954
|
a !== void 0 && (n[r] = a);
|
|
929
955
|
}
|
|
930
956
|
return n;
|
|
931
957
|
}
|
|
932
|
-
function
|
|
958
|
+
function Jt(e) {
|
|
933
959
|
return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
|
|
934
960
|
}
|
|
935
|
-
function
|
|
961
|
+
function Yt(e, t, n) {
|
|
936
962
|
let r = e?.[n];
|
|
937
|
-
return r ?
|
|
963
|
+
return r ? Jt((t && n in t ? Kt(r, t[n]) : void 0) ?? r.default) : t?.[n];
|
|
938
964
|
}
|
|
939
|
-
function
|
|
965
|
+
function Xt(e, t) {
|
|
940
966
|
let n = {};
|
|
941
|
-
for (let r of Object.keys(e ?? {})) n[r] =
|
|
967
|
+
for (let r of Object.keys(e ?? {})) n[r] = Yt(e, t, r);
|
|
942
968
|
return n;
|
|
943
969
|
}
|
|
944
970
|
//#endregion
|
|
945
971
|
//#region src/utils/drawingStyle.ts
|
|
946
|
-
var
|
|
972
|
+
var Zt = [
|
|
947
973
|
"solid",
|
|
948
974
|
"dashed",
|
|
949
975
|
"dotted"
|
|
950
|
-
],
|
|
951
|
-
function
|
|
976
|
+
], Qt = 64, $t = 2e3, en = 20, tn = 200;
|
|
977
|
+
function nn(e, t, n) {
|
|
952
978
|
return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
|
|
953
979
|
}
|
|
954
|
-
function
|
|
955
|
-
return typeof e == "string" && e.length > 0 && e.length <=
|
|
980
|
+
function rn(e) {
|
|
981
|
+
return typeof e == "string" && e.length > 0 && e.length <= Qt ? e : void 0;
|
|
956
982
|
}
|
|
957
|
-
function
|
|
983
|
+
function an(e) {
|
|
958
984
|
if (typeof e != "object" || !e) return {};
|
|
959
|
-
let t = e, n = {}, r =
|
|
985
|
+
let t = e, n = {}, r = rn(t.color);
|
|
960
986
|
r !== void 0 && (n.color = r);
|
|
961
|
-
let i =
|
|
962
|
-
i !== void 0 && (n.lineWidth = i),
|
|
963
|
-
let a =
|
|
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);
|
|
964
990
|
a !== void 0 && (n.fillColor = a);
|
|
965
|
-
let o =
|
|
991
|
+
let o = nn(t.fillOpacity, 0, 1);
|
|
966
992
|
o !== void 0 && (n.fillOpacity = o);
|
|
967
|
-
let s =
|
|
968
|
-
return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0,
|
|
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;
|
|
969
995
|
}
|
|
970
996
|
//#endregion
|
|
971
997
|
//#region src/utils/chartTypeOptions.ts
|
|
972
|
-
var
|
|
973
|
-
function
|
|
974
|
-
if (!
|
|
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);
|
|
999
|
+
function sn(e) {
|
|
1000
|
+
if (!F(e)) return {};
|
|
975
1001
|
let t = {};
|
|
976
|
-
if (
|
|
1002
|
+
if (F(e.renko)) {
|
|
977
1003
|
let { boxSize: n, atrPeriod: r } = e.renko;
|
|
978
1004
|
t.renko = {
|
|
979
|
-
...
|
|
980
|
-
...
|
|
1005
|
+
...P(n) || n === "atr" ? { boxSize: n } : {},
|
|
1006
|
+
...on(r, 1, 500) ? { atrPeriod: r } : {}
|
|
981
1007
|
};
|
|
982
1008
|
}
|
|
983
|
-
if (
|
|
1009
|
+
if (F(e.lineBreak)) {
|
|
984
1010
|
let { lines: n } = e.lineBreak;
|
|
985
|
-
t.lineBreak =
|
|
1011
|
+
t.lineBreak = on(n, 1, 10) ? { lines: n } : {};
|
|
986
1012
|
}
|
|
987
|
-
if (
|
|
1013
|
+
if (F(e.kagi)) {
|
|
988
1014
|
let { reversal: n, reversalType: r } = e.kagi;
|
|
989
1015
|
t.kagi = {
|
|
990
|
-
...
|
|
1016
|
+
...P(n) ? { reversal: n } : {},
|
|
991
1017
|
...r === "percent" || r === "price" ? { reversalType: r } : {}
|
|
992
1018
|
};
|
|
993
1019
|
}
|
|
994
|
-
if (
|
|
1020
|
+
if (F(e.pointAndFigure)) {
|
|
995
1021
|
let { boxSize: n, reversal: r } = e.pointAndFigure;
|
|
996
1022
|
t.pointAndFigure = {
|
|
997
|
-
...
|
|
998
|
-
...
|
|
1023
|
+
...P(n) || n === "auto" ? { boxSize: n } : {},
|
|
1024
|
+
...on(r, 1, 10) ? { reversal: r } : {}
|
|
999
1025
|
};
|
|
1000
1026
|
}
|
|
1001
|
-
if (
|
|
1027
|
+
if (F(e.rangeBars)) {
|
|
1002
1028
|
let { range: n } = e.rangeBars;
|
|
1003
|
-
t.rangeBars =
|
|
1029
|
+
t.rangeBars = P(n) || n === "auto" ? { range: n } : {};
|
|
1004
1030
|
}
|
|
1005
1031
|
return t;
|
|
1006
1032
|
}
|
|
1007
1033
|
//#endregion
|
|
1008
1034
|
//#region src/constants/themes.ts
|
|
1009
|
-
var
|
|
1010
|
-
family:
|
|
1035
|
+
var cn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", ln = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif", un = {
|
|
1036
|
+
family: cn,
|
|
1011
1037
|
sizeSmall: 11,
|
|
1012
1038
|
sizeMedium: 13,
|
|
1013
1039
|
sizeLarge: 15
|
|
1014
|
-
},
|
|
1040
|
+
}, I = {
|
|
1015
1041
|
amber: "#f2a93b",
|
|
1016
1042
|
up: "#1c9e6d",
|
|
1017
1043
|
down: "#e8505b",
|
|
@@ -1022,57 +1048,67 @@ var $t = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
|
|
|
1022
1048
|
rose: "#e25592",
|
|
1023
1049
|
neutral: "#7d8696",
|
|
1024
1050
|
ink: "#131416"
|
|
1025
|
-
},
|
|
1026
|
-
function
|
|
1027
|
-
return m(e,
|
|
1028
|
-
}
|
|
1029
|
-
var
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1051
|
+
}, dn = .22;
|
|
1052
|
+
function L(e) {
|
|
1053
|
+
return m(e, dn);
|
|
1054
|
+
}
|
|
1055
|
+
var fn = "#fbfaf6", R = "#1b1d21", pn = "#131416", z = "#e6e3dc", mn = "#1f7a5c", hn = "#b8423f", gn = "#4fae8a", _n = "#e2706b", vn = "#6a6966", yn = "#8d8a84", bn = {
|
|
1056
|
+
ceiling: "#FF00FF",
|
|
1057
|
+
floor: "#00FFFF",
|
|
1058
|
+
reference: "#FFD700"
|
|
1059
|
+
}, xn = {
|
|
1060
|
+
ceiling: "#a21caf",
|
|
1061
|
+
floor: "#0e7490",
|
|
1062
|
+
reference: "#8a6a00"
|
|
1063
|
+
}, Sn = [
|
|
1064
|
+
I.blue,
|
|
1065
|
+
I.ochre,
|
|
1066
|
+
I.violet,
|
|
1067
|
+
I.cyan,
|
|
1068
|
+
I.rose
|
|
1069
|
+
], Cn = {
|
|
1036
1070
|
name: "dark",
|
|
1037
|
-
background:
|
|
1038
|
-
text:
|
|
1071
|
+
background: pn,
|
|
1072
|
+
text: z,
|
|
1039
1073
|
textSecondary: "#8d8b86",
|
|
1040
1074
|
grid: "#1d1e21",
|
|
1041
|
-
crosshair:
|
|
1042
|
-
candleUp:
|
|
1043
|
-
candleDown:
|
|
1044
|
-
candleUpWick:
|
|
1045
|
-
candleDownWick:
|
|
1046
|
-
lineColor:
|
|
1047
|
-
areaTopColor: m(
|
|
1048
|
-
areaBottomColor: m(
|
|
1049
|
-
volumeUp: m(
|
|
1050
|
-
volumeDown: m(
|
|
1075
|
+
crosshair: vn,
|
|
1076
|
+
candleUp: gn,
|
|
1077
|
+
candleDown: _n,
|
|
1078
|
+
candleUpWick: gn,
|
|
1079
|
+
candleDownWick: _n,
|
|
1080
|
+
lineColor: z,
|
|
1081
|
+
areaTopColor: m(z, .14),
|
|
1082
|
+
areaBottomColor: m(z, 0),
|
|
1083
|
+
volumeUp: m(z, .14),
|
|
1084
|
+
volumeDown: m(z, .08),
|
|
1051
1085
|
axisLine: "#2a2b2f",
|
|
1052
1086
|
axisLabel: "#a9a6a0",
|
|
1053
1087
|
axisLabelBackground: "#232427",
|
|
1054
|
-
font:
|
|
1055
|
-
|
|
1088
|
+
font: un,
|
|
1089
|
+
priceLimits: bn
|
|
1090
|
+
}, wn = {
|
|
1056
1091
|
name: "light",
|
|
1057
|
-
background:
|
|
1058
|
-
text:
|
|
1092
|
+
background: fn,
|
|
1093
|
+
text: R,
|
|
1059
1094
|
textSecondary: "#6b6f76",
|
|
1060
1095
|
grid: "#ece8df",
|
|
1061
|
-
crosshair:
|
|
1062
|
-
candleUp:
|
|
1063
|
-
candleDown:
|
|
1064
|
-
candleUpWick:
|
|
1065
|
-
candleDownWick:
|
|
1066
|
-
lineColor:
|
|
1067
|
-
areaTopColor: m(
|
|
1068
|
-
areaBottomColor: m(
|
|
1069
|
-
volumeUp: m(
|
|
1070
|
-
volumeDown: m(
|
|
1096
|
+
crosshair: yn,
|
|
1097
|
+
candleUp: mn,
|
|
1098
|
+
candleDown: hn,
|
|
1099
|
+
candleUpWick: mn,
|
|
1100
|
+
candleDownWick: hn,
|
|
1101
|
+
lineColor: R,
|
|
1102
|
+
areaTopColor: m(R, .12),
|
|
1103
|
+
areaBottomColor: m(R, 0),
|
|
1104
|
+
volumeUp: m(R, .13),
|
|
1105
|
+
volumeDown: m(R, .08),
|
|
1071
1106
|
axisLine: "#cfcac0",
|
|
1072
1107
|
axisLabel: "#4a4e57",
|
|
1073
1108
|
axisLabelBackground: "#eeebe3",
|
|
1074
|
-
font:
|
|
1075
|
-
|
|
1109
|
+
font: un,
|
|
1110
|
+
priceLimits: xn
|
|
1111
|
+
}, B = {
|
|
1076
1112
|
name: "terminal",
|
|
1077
1113
|
background: "#0E0E0E",
|
|
1078
1114
|
text: "#C0C0C0",
|
|
@@ -1086,8 +1122,8 @@ var rn = "#fbfaf6", V = "#1b1d21", an = "#131416", H = "#e6e3dc", on = "#1f7a5c"
|
|
|
1086
1122
|
lineColor: "#3D8BFD",
|
|
1087
1123
|
areaTopColor: "rgba(61, 139, 253, 0.3)",
|
|
1088
1124
|
areaBottomColor: "rgba(61, 139, 253, 0.0)",
|
|
1089
|
-
volumeUp:
|
|
1090
|
-
volumeDown:
|
|
1125
|
+
volumeUp: L("#00FF87"),
|
|
1126
|
+
volumeDown: L("#FF3B4D"),
|
|
1091
1127
|
axisLine: "#1A1A1A",
|
|
1092
1128
|
axisLabel: "#8A8A8A",
|
|
1093
1129
|
axisLabelBackground: "#1A1A1A",
|
|
@@ -1097,11 +1133,11 @@ var rn = "#fbfaf6", V = "#1b1d21", an = "#131416", H = "#e6e3dc", on = "#1f7a5c"
|
|
|
1097
1133
|
sizeMedium: 12,
|
|
1098
1134
|
sizeLarge: 14
|
|
1099
1135
|
}
|
|
1100
|
-
},
|
|
1101
|
-
function
|
|
1136
|
+
}, Tn = new Set([B.volumeUp, B.volumeDown]);
|
|
1137
|
+
function V(e) {
|
|
1102
1138
|
let t = (e, t) => {
|
|
1103
|
-
if (!
|
|
1104
|
-
let n =
|
|
1139
|
+
if (!Tn.has(e)) return e;
|
|
1140
|
+
let n = L(t);
|
|
1105
1141
|
return n === t ? e : n;
|
|
1106
1142
|
};
|
|
1107
1143
|
return {
|
|
@@ -1111,67 +1147,67 @@ function _n(e) {
|
|
|
1111
1147
|
}
|
|
1112
1148
|
//#endregion
|
|
1113
1149
|
//#region src/utils/chartStyle.ts
|
|
1114
|
-
var
|
|
1150
|
+
var En = [
|
|
1115
1151
|
"solid",
|
|
1116
1152
|
"dashed",
|
|
1117
1153
|
"dotted"
|
|
1118
|
-
],
|
|
1154
|
+
], Dn = 20, On = 64, kn = 2, An = [
|
|
1119
1155
|
/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
|
|
1120
1156
|
/^[a-z]{3,30}$/i,
|
|
1121
1157
|
/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
|
|
1122
1158
|
];
|
|
1123
|
-
function
|
|
1124
|
-
return typeof e == "string" && e.length <=
|
|
1159
|
+
function H(e) {
|
|
1160
|
+
return typeof e == "string" && e.length <= On && An.some((t) => t.test(e.trim()));
|
|
1125
1161
|
}
|
|
1126
|
-
function
|
|
1162
|
+
function jn(e, t) {
|
|
1127
1163
|
switch (e) {
|
|
1128
|
-
case "color": return
|
|
1129
|
-
case "lineStyle": return
|
|
1130
|
-
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <=
|
|
1164
|
+
case "color": return H(t);
|
|
1165
|
+
case "lineStyle": return En.includes(t);
|
|
1166
|
+
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= Dn;
|
|
1131
1167
|
case "boolean": return typeof t == "boolean";
|
|
1132
1168
|
}
|
|
1133
1169
|
}
|
|
1134
|
-
function
|
|
1170
|
+
function Mn(e) {
|
|
1135
1171
|
return Object.prototype.hasOwnProperty.call(t, e);
|
|
1136
1172
|
}
|
|
1137
|
-
function
|
|
1173
|
+
function Nn(e) {
|
|
1138
1174
|
let n = {}, r = [];
|
|
1139
1175
|
if (typeof e != "object" || !e || Array.isArray(e)) return {
|
|
1140
1176
|
overrides: {},
|
|
1141
1177
|
rejected: r
|
|
1142
1178
|
};
|
|
1143
|
-
for (let [i, a] of Object.entries(e))
|
|
1179
|
+
for (let [i, a] of Object.entries(e)) Mn(i) ? a === null ? n[i] = null : jn(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
|
|
1144
1180
|
return {
|
|
1145
1181
|
overrides: n,
|
|
1146
1182
|
rejected: r
|
|
1147
1183
|
};
|
|
1148
1184
|
}
|
|
1149
|
-
function
|
|
1185
|
+
function Pn(e) {
|
|
1150
1186
|
if (typeof e != "object" || !e || Array.isArray(e)) return null;
|
|
1151
1187
|
let { background: t, separator: n } = e, r = {
|
|
1152
|
-
...
|
|
1153
|
-
...
|
|
1188
|
+
...H(t) ? { background: t } : {},
|
|
1189
|
+
...H(n) ? { separator: n } : {}
|
|
1154
1190
|
};
|
|
1155
1191
|
return Object.keys(r).length > 0 ? r : null;
|
|
1156
1192
|
}
|
|
1157
|
-
var
|
|
1158
|
-
function
|
|
1193
|
+
var Fn = /^[A-Za-z0-9_]{1,32}$/;
|
|
1194
|
+
function In(e) {
|
|
1159
1195
|
if (typeof e != "object" || !e || Array.isArray(e)) return;
|
|
1160
1196
|
let t = {};
|
|
1161
1197
|
for (let [n, r] of Object.entries(e)) {
|
|
1162
|
-
if (!
|
|
1198
|
+
if (!Fn.test(n) || typeof r != "object" || !r) continue;
|
|
1163
1199
|
let { lineStyle: e, visible: i } = r, a = {
|
|
1164
|
-
...
|
|
1200
|
+
...En.includes(e) ? { lineStyle: e } : {},
|
|
1165
1201
|
...typeof i == "boolean" ? { visible: i } : {}
|
|
1166
1202
|
};
|
|
1167
1203
|
Object.keys(a).length > 0 && (t[n] = a);
|
|
1168
1204
|
}
|
|
1169
1205
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
1170
1206
|
}
|
|
1171
|
-
function
|
|
1207
|
+
function Ln(e, t, n = 1) {
|
|
1172
1208
|
return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
|
|
1173
1209
|
}
|
|
1174
|
-
function
|
|
1210
|
+
function Rn(e, t, n) {
|
|
1175
1211
|
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;
|
|
1176
1212
|
return {
|
|
1177
1213
|
up: o,
|
|
@@ -1179,7 +1215,7 @@ function jn(e, t, n) {
|
|
|
1179
1215
|
wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
|
|
1180
1216
|
wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
|
|
1181
1217
|
line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
|
|
1182
|
-
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ??
|
|
1218
|
+
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? kn,
|
|
1183
1219
|
top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
|
|
1184
1220
|
bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
|
|
1185
1221
|
};
|
|
@@ -1192,8 +1228,8 @@ function U(e, t, n) {
|
|
|
1192
1228
|
width: e(`${t}.width`) ?? n.width
|
|
1193
1229
|
};
|
|
1194
1230
|
}
|
|
1195
|
-
function
|
|
1196
|
-
let { style: r, ...i } = e, a = n, o = (e) => a[e], s =
|
|
1231
|
+
function zn(e, t, n) {
|
|
1232
|
+
let { style: r, ...i } = e, a = n, o = (e) => a[e], s = Rn(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
|
|
1197
1233
|
panes: {
|
|
1198
1234
|
background: l("panes.background", c),
|
|
1199
1235
|
separator: l("panes.separatorColor", i.axisLine),
|
|
@@ -1292,7 +1328,7 @@ function Mn(e, t, n) {
|
|
|
1292
1328
|
style: d
|
|
1293
1329
|
};
|
|
1294
1330
|
}
|
|
1295
|
-
var
|
|
1331
|
+
var Bn = {
|
|
1296
1332
|
"background.color": (e) => e.background,
|
|
1297
1333
|
"panes.background": (e, t) => t.panes.background,
|
|
1298
1334
|
"panes.separatorColor": (e, t) => t.panes.separator,
|
|
@@ -1311,8 +1347,8 @@ var Nn = {
|
|
|
1311
1347
|
"lastPrice.downColor": (e, t) => t.lastPrice.down,
|
|
1312
1348
|
"lastPrice.style": (e, t) => t.lastPrice.style,
|
|
1313
1349
|
"lastPrice.width": (e, t) => t.lastPrice.width,
|
|
1314
|
-
"volume.upColor": (e) =>
|
|
1315
|
-
"volume.downColor": (e) =>
|
|
1350
|
+
"volume.upColor": (e) => V(e).up,
|
|
1351
|
+
"volume.downColor": (e) => V(e).down,
|
|
1316
1352
|
"sessionBreaks.color": (e, t) => t.sessionBreaks.color,
|
|
1317
1353
|
"sessionBreaks.style": (e, t) => t.sessionBreaks.style,
|
|
1318
1354
|
"sessionBreaks.width": (e, t) => t.sessionBreaks.width,
|
|
@@ -1329,16 +1365,16 @@ var Nn = {
|
|
|
1329
1365
|
"tradeZones.lossColor": (e, t) => t.tradeZones.loss,
|
|
1330
1366
|
"tradeZones.activeColor": (e, t) => t.tradeZones.active,
|
|
1331
1367
|
"drawings.handleColor": (e, t) => t.drawings.handle
|
|
1332
|
-
},
|
|
1368
|
+
}, Vn = {
|
|
1333
1369
|
visible: "visible",
|
|
1334
1370
|
color: "color",
|
|
1335
1371
|
style: "style",
|
|
1336
1372
|
width: "width"
|
|
1337
1373
|
};
|
|
1338
|
-
function
|
|
1374
|
+
function Hn(e, t, n, r = "candlestick") {
|
|
1339
1375
|
let i = n.split(".");
|
|
1340
1376
|
if (i[0] === "series") {
|
|
1341
|
-
let n =
|
|
1377
|
+
let n = Rn(e, (e) => t[e], i[1]);
|
|
1342
1378
|
switch (i[2]) {
|
|
1343
1379
|
case "upColor": return n.up;
|
|
1344
1380
|
case "downColor": return n.down;
|
|
@@ -1351,12 +1387,12 @@ function Fn(e, t, n, r = "candlestick") {
|
|
|
1351
1387
|
case "bottomColor": return n.bottom;
|
|
1352
1388
|
}
|
|
1353
1389
|
}
|
|
1354
|
-
let a =
|
|
1355
|
-
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][
|
|
1390
|
+
let a = zn(e, r, t), o = a.style;
|
|
1391
|
+
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][Vn[i[2]]] : Bn[n]?.(a, o) ?? null;
|
|
1356
1392
|
}
|
|
1357
1393
|
//#endregion
|
|
1358
1394
|
//#region src/constants/defaults.ts
|
|
1359
|
-
var
|
|
1395
|
+
var Un = {
|
|
1360
1396
|
autoScale: !0,
|
|
1361
1397
|
rightMargin: 5,
|
|
1362
1398
|
minBarSpacing: 2,
|
|
@@ -1367,7 +1403,7 @@ var In = {
|
|
|
1367
1403
|
vLineStyle: "solid"
|
|
1368
1404
|
},
|
|
1369
1405
|
crosshair: { mode: "magnet" }
|
|
1370
|
-
},
|
|
1406
|
+
}, Wn = [
|
|
1371
1407
|
"1s",
|
|
1372
1408
|
"1m",
|
|
1373
1409
|
"3m",
|
|
@@ -1384,7 +1420,7 @@ var In = {
|
|
|
1384
1420
|
"3d",
|
|
1385
1421
|
"1w",
|
|
1386
1422
|
"1M"
|
|
1387
|
-
],
|
|
1423
|
+
], Gn = [
|
|
1388
1424
|
"1m",
|
|
1389
1425
|
"5m",
|
|
1390
1426
|
"15m",
|
|
@@ -1398,7 +1434,7 @@ var In = {
|
|
|
1398
1434
|
"3M",
|
|
1399
1435
|
"6M",
|
|
1400
1436
|
"12M"
|
|
1401
|
-
],
|
|
1437
|
+
], Kn = [
|
|
1402
1438
|
"1m",
|
|
1403
1439
|
"5m",
|
|
1404
1440
|
"15m",
|
|
@@ -1408,7 +1444,7 @@ var In = {
|
|
|
1408
1444
|
"1d",
|
|
1409
1445
|
"1w",
|
|
1410
1446
|
"1M"
|
|
1411
|
-
],
|
|
1447
|
+
], qn = [
|
|
1412
1448
|
"1m",
|
|
1413
1449
|
"5m",
|
|
1414
1450
|
"15m",
|
|
@@ -1416,7 +1452,7 @@ var In = {
|
|
|
1416
1452
|
"4h",
|
|
1417
1453
|
"1d",
|
|
1418
1454
|
"1w"
|
|
1419
|
-
],
|
|
1455
|
+
], Jn = 8, Yn = 2, Xn = 70, Zn = 30, Qn = 60, $n = 120, er = (1 + Math.sqrt(5)) / 2, tr = [
|
|
1420
1456
|
1,
|
|
1421
1457
|
2,
|
|
1422
1458
|
3,
|
|
@@ -1428,8 +1464,8 @@ var In = {
|
|
|
1428
1464
|
55,
|
|
1429
1465
|
89
|
|
1430
1466
|
];
|
|
1431
|
-
function
|
|
1432
|
-
return Math.round(e *
|
|
1467
|
+
function nr(e, t, n = 1) {
|
|
1468
|
+
return Math.round(e * er ** (t / n));
|
|
1433
1469
|
}
|
|
1434
1470
|
//#endregion
|
|
1435
1471
|
//#region src/i18n/en.ts
|
|
@@ -1536,7 +1572,7 @@ var W = {
|
|
|
1536
1572
|
error: "Error",
|
|
1537
1573
|
numberDecimalSeparator: ".",
|
|
1538
1574
|
numberGroupSeparator: ","
|
|
1539
|
-
},
|
|
1575
|
+
}, rr = {
|
|
1540
1576
|
candlestick: "Nến",
|
|
1541
1577
|
line: "Đường",
|
|
1542
1578
|
area: "Vùng",
|
|
@@ -1639,20 +1675,20 @@ var W = {
|
|
|
1639
1675
|
error: "Lỗi",
|
|
1640
1676
|
numberDecimalSeparator: ",",
|
|
1641
1677
|
numberGroupSeparator: "."
|
|
1642
|
-
}, G = new Map([["en", W], ["vi",
|
|
1643
|
-
function
|
|
1644
|
-
K = e,
|
|
1678
|
+
}, G = new Map([["en", W], ["vi", rr]]), K = "en", ir = W;
|
|
1679
|
+
function ar(e) {
|
|
1680
|
+
K = e, ir = G.get(e) ?? W;
|
|
1645
1681
|
}
|
|
1646
|
-
function
|
|
1682
|
+
function or() {
|
|
1647
1683
|
return K;
|
|
1648
1684
|
}
|
|
1649
|
-
function
|
|
1650
|
-
return
|
|
1685
|
+
function sr(e) {
|
|
1686
|
+
return ir[e] ?? W[e] ?? e;
|
|
1651
1687
|
}
|
|
1652
|
-
function
|
|
1688
|
+
function cr(e, t) {
|
|
1653
1689
|
G.set(e, t);
|
|
1654
1690
|
}
|
|
1655
|
-
function
|
|
1691
|
+
function lr(e) {
|
|
1656
1692
|
return G.get(e ?? K) ?? W;
|
|
1657
1693
|
}
|
|
1658
1694
|
function q(e, t = 2, n) {
|
|
@@ -1660,10 +1696,10 @@ function q(e, t = 2, n) {
|
|
|
1660
1696
|
for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
|
|
1661
1697
|
return c && (u = "-" + u), s ? u + i + s : u;
|
|
1662
1698
|
}
|
|
1663
|
-
function
|
|
1699
|
+
function ur(e) {
|
|
1664
1700
|
return q(e, 0, "vi");
|
|
1665
1701
|
}
|
|
1666
|
-
function
|
|
1702
|
+
function dr(e, t) {
|
|
1667
1703
|
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);
|
|
1668
1704
|
}
|
|
1669
1705
|
//#endregion
|
|
@@ -1675,7 +1711,7 @@ var J = {
|
|
|
1675
1711
|
ceiling: "#D946EF",
|
|
1676
1712
|
floor: "#06B6D4",
|
|
1677
1713
|
reference: "#EAB308"
|
|
1678
|
-
}, Y = "Asia/Ho_Chi_Minh",
|
|
1714
|
+
}, Y = "Asia/Ho_Chi_Minh", fr = [
|
|
1679
1715
|
{
|
|
1680
1716
|
name: "ATO",
|
|
1681
1717
|
startTime: "09:00",
|
|
@@ -1706,7 +1742,7 @@ var J = {
|
|
|
1706
1742
|
endTime: "14:45",
|
|
1707
1743
|
type: "preClose"
|
|
1708
1744
|
}
|
|
1709
|
-
],
|
|
1745
|
+
], pr = [
|
|
1710
1746
|
{
|
|
1711
1747
|
name: "Phiên 1",
|
|
1712
1748
|
startTime: "09:15",
|
|
@@ -1737,7 +1773,7 @@ var J = {
|
|
|
1737
1773
|
endTime: "15:00",
|
|
1738
1774
|
type: "postClose"
|
|
1739
1775
|
}
|
|
1740
|
-
],
|
|
1776
|
+
], mr = [
|
|
1741
1777
|
{
|
|
1742
1778
|
name: "Phiên 1",
|
|
1743
1779
|
startTime: "09:15",
|
|
@@ -1756,7 +1792,7 @@ var J = {
|
|
|
1756
1792
|
endTime: "14:30",
|
|
1757
1793
|
type: "continuous"
|
|
1758
1794
|
}
|
|
1759
|
-
],
|
|
1795
|
+
], hr = [
|
|
1760
1796
|
{
|
|
1761
1797
|
name: "ATO",
|
|
1762
1798
|
startTime: "08:45",
|
|
@@ -1787,7 +1823,7 @@ var J = {
|
|
|
1787
1823
|
endTime: "14:45",
|
|
1788
1824
|
type: "preClose"
|
|
1789
1825
|
}
|
|
1790
|
-
],
|
|
1826
|
+
], gr = {
|
|
1791
1827
|
type: "stock",
|
|
1792
1828
|
exchange: "HOSE",
|
|
1793
1829
|
currency: "VND",
|
|
@@ -1814,12 +1850,12 @@ var J = {
|
|
|
1814
1850
|
ceilingPercent: 7,
|
|
1815
1851
|
floorPercent: 7
|
|
1816
1852
|
},
|
|
1817
|
-
sessions:
|
|
1853
|
+
sessions: fr,
|
|
1818
1854
|
colorScheme: J
|
|
1819
|
-
},
|
|
1820
|
-
...
|
|
1855
|
+
}, _r = {
|
|
1856
|
+
...gr,
|
|
1821
1857
|
priceSteps: void 0
|
|
1822
|
-
},
|
|
1858
|
+
}, vr = {
|
|
1823
1859
|
type: "stock",
|
|
1824
1860
|
exchange: "HNX",
|
|
1825
1861
|
currency: "VND",
|
|
@@ -1832,9 +1868,9 @@ var J = {
|
|
|
1832
1868
|
ceilingPercent: 10,
|
|
1833
1869
|
floorPercent: 10
|
|
1834
1870
|
},
|
|
1835
|
-
sessions:
|
|
1871
|
+
sessions: pr,
|
|
1836
1872
|
colorScheme: J
|
|
1837
|
-
},
|
|
1873
|
+
}, yr = {
|
|
1838
1874
|
type: "stock",
|
|
1839
1875
|
exchange: "UPCOM",
|
|
1840
1876
|
currency: "VND",
|
|
@@ -1847,9 +1883,9 @@ var J = {
|
|
|
1847
1883
|
ceilingPercent: 15,
|
|
1848
1884
|
floorPercent: 15
|
|
1849
1885
|
},
|
|
1850
|
-
sessions:
|
|
1886
|
+
sessions: mr,
|
|
1851
1887
|
colorScheme: J
|
|
1852
|
-
},
|
|
1888
|
+
}, br = {
|
|
1853
1889
|
type: "futures",
|
|
1854
1890
|
exchange: "HNX",
|
|
1855
1891
|
currency: "VND",
|
|
@@ -1863,14 +1899,14 @@ var J = {
|
|
|
1863
1899
|
ceilingPercent: 7,
|
|
1864
1900
|
floorPercent: 7
|
|
1865
1901
|
},
|
|
1866
|
-
sessions:
|
|
1902
|
+
sessions: hr,
|
|
1867
1903
|
colorScheme: J
|
|
1868
|
-
},
|
|
1904
|
+
}, xr = {
|
|
1869
1905
|
type: "crypto",
|
|
1870
1906
|
currency: "USDT",
|
|
1871
1907
|
pricePrecision: 2,
|
|
1872
1908
|
priceLimits: { enabled: !1 }
|
|
1873
|
-
},
|
|
1909
|
+
}, Sr = {
|
|
1874
1910
|
type: "stock",
|
|
1875
1911
|
exchange: "NYSE",
|
|
1876
1912
|
currency: "USD",
|
|
@@ -1899,7 +1935,7 @@ var J = {
|
|
|
1899
1935
|
}
|
|
1900
1936
|
]
|
|
1901
1937
|
};
|
|
1902
|
-
function
|
|
1938
|
+
function Cr(e) {
|
|
1903
1939
|
return {
|
|
1904
1940
|
...e,
|
|
1905
1941
|
candleUp: J.up,
|
|
@@ -1909,25 +1945,25 @@ function gr(e) {
|
|
|
1909
1945
|
};
|
|
1910
1946
|
}
|
|
1911
1947
|
var X = 1e-9;
|
|
1912
|
-
function
|
|
1948
|
+
function wr(e, t) {
|
|
1913
1949
|
let n = t.priceStep;
|
|
1914
1950
|
for (let r of t.priceSteps ?? []) e + X >= r.from && (n = r.step);
|
|
1915
1951
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
1916
1952
|
}
|
|
1917
|
-
function
|
|
1953
|
+
function Tr(e, t) {
|
|
1918
1954
|
let n = t.priceStep;
|
|
1919
1955
|
for (let r of t.priceSteps ?? []) e - X > r.from && (n = r.step);
|
|
1920
1956
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
1921
1957
|
}
|
|
1922
1958
|
function Z(e, t, n = "nearest") {
|
|
1923
|
-
let r =
|
|
1959
|
+
let r = wr(e, t);
|
|
1924
1960
|
if (r === void 0 || !Number.isFinite(e)) return e;
|
|
1925
1961
|
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(
|
|
1962
|
+
return Number((a * r).toFixed(Rt(r)));
|
|
1927
1963
|
}
|
|
1928
|
-
function
|
|
1964
|
+
function Er(e, t) {
|
|
1929
1965
|
if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
|
|
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 =
|
|
1966
|
+
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 = wr(i, t);
|
|
1931
1967
|
if (s === void 0) return {
|
|
1932
1968
|
ceiling: a,
|
|
1933
1969
|
floor: o,
|
|
@@ -1940,14 +1976,14 @@ function yr(e, t) {
|
|
|
1940
1976
|
reference: i
|
|
1941
1977
|
};
|
|
1942
1978
|
let l = Z(a, t, "down"), u = Z(o, t, "up");
|
|
1943
|
-
return l <= i && (l = c), u >= i && (u = Z(i - (
|
|
1979
|
+
return l <= i && (l = c), u >= i && (u = Z(i - (Tr(i, t) ?? s), t)), u <= 0 && (u = i), {
|
|
1944
1980
|
ceiling: l,
|
|
1945
1981
|
floor: u,
|
|
1946
1982
|
reference: i
|
|
1947
1983
|
};
|
|
1948
1984
|
}
|
|
1949
1985
|
var Q = (e, t) => Math.round(e * t * 1e9) / 1e9;
|
|
1950
|
-
function
|
|
1986
|
+
function Dr(e, t) {
|
|
1951
1987
|
let n = Math.round(Math.log10(t));
|
|
1952
1988
|
return {
|
|
1953
1989
|
...e,
|
|
@@ -1963,11 +1999,11 @@ function br(e, t) {
|
|
|
1963
1999
|
}
|
|
1964
2000
|
};
|
|
1965
2001
|
}
|
|
1966
|
-
var
|
|
1967
|
-
function
|
|
2002
|
+
var Or = 6e4, kr = 864e5;
|
|
2003
|
+
function Ar(e, t) {
|
|
1968
2004
|
let n, r;
|
|
1969
2005
|
if (t) {
|
|
1970
|
-
let i = new Date(e +
|
|
2006
|
+
let i = new Date(e + x(t, e) * Or);
|
|
1971
2007
|
n = i.getUTCHours(), r = i.getUTCMinutes();
|
|
1972
2008
|
} else {
|
|
1973
2009
|
let t = new Date(e);
|
|
@@ -1975,31 +2011,31 @@ function Cr(e, t) {
|
|
|
1975
2011
|
}
|
|
1976
2012
|
return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
1977
2013
|
}
|
|
1978
|
-
function
|
|
1979
|
-
if (n !== void 0 && !
|
|
1980
|
-
let r =
|
|
2014
|
+
function jr(e, t = Date.now(), n) {
|
|
2015
|
+
if (n !== void 0 && !b(n)) return null;
|
|
2016
|
+
let r = Ar(t, n);
|
|
1981
2017
|
for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
|
|
1982
2018
|
return null;
|
|
1983
2019
|
}
|
|
1984
|
-
var $ = (e) => String(e).padStart(2, "0"),
|
|
2020
|
+
var $ = (e) => String(e).padStart(2, "0"), Mr = (e) => {
|
|
1985
2021
|
let t = new Date(e);
|
|
1986
2022
|
return `${t.getUTCFullYear()}-${$(t.getUTCMonth() + 1)}-${$(t.getUTCDate())}`;
|
|
1987
|
-
},
|
|
1988
|
-
function
|
|
1989
|
-
let r = Date.UTC(e, t - 1, 1), i = 1 + (
|
|
2023
|
+
}, Nr = 4, Pr = 7 * 36e5;
|
|
2024
|
+
function Fr(e, t, n) {
|
|
2025
|
+
let r = Date.UTC(e, t - 1, 1), i = 1 + (Nr - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
|
|
1990
2026
|
let t = new Date(e).getUTCDay();
|
|
1991
|
-
return t === 0 || t === 6 || (n?.(
|
|
2027
|
+
return t === 0 || t === 6 || (n?.(Mr(e)) ?? !1);
|
|
1992
2028
|
};
|
|
1993
|
-
for (; o(a);) a -=
|
|
1994
|
-
return
|
|
2029
|
+
for (; o(a);) a -= kr;
|
|
2030
|
+
return Mr(a);
|
|
1995
2031
|
}
|
|
1996
|
-
function
|
|
1997
|
-
let n =
|
|
2032
|
+
function Ir(e, t) {
|
|
2033
|
+
let n = Mr(e + Pr), r = (e, n) => ({
|
|
1998
2034
|
symbol: `VN30F${$(e % 100)}${$(n)}`,
|
|
1999
2035
|
year: e,
|
|
2000
2036
|
month: n,
|
|
2001
|
-
lastTradingDay:
|
|
2002
|
-
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e +
|
|
2037
|
+
lastTradingDay: Fr(e, n, t)
|
|
2038
|
+
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + Pr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
|
|
2003
2039
|
n > o.lastTradingDay && (o = i(o));
|
|
2004
2040
|
let s = [o, i(o)], c = i(s[1]);
|
|
2005
2041
|
for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
|
|
@@ -2007,7 +2043,7 @@ function kr(e, t) {
|
|
|
2007
2043
|
}
|
|
2008
2044
|
//#endregion
|
|
2009
2045
|
//#region src/icons/iconSet.ts
|
|
2010
|
-
var
|
|
2046
|
+
var Lr = {
|
|
2011
2047
|
cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
|
|
2012
2048
|
trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
|
|
2013
2049
|
trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
|
|
@@ -2141,7 +2177,7 @@ var Ar = {
|
|
|
2141
2177
|
]
|
|
2142
2178
|
] },
|
|
2143
2179
|
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" }
|
|
2144
|
-
},
|
|
2180
|
+
}, Rr = {
|
|
2145
2181
|
trendLine: {
|
|
2146
2182
|
d: "M5 18L19 6",
|
|
2147
2183
|
dots: [[5, 18], [19, 6]]
|
|
@@ -2494,7 +2530,7 @@ var Ar = {
|
|
|
2494
2530
|
],
|
|
2495
2531
|
dash: "M12 3V21"
|
|
2496
2532
|
}
|
|
2497
|
-
},
|
|
2533
|
+
}, zr = {
|
|
2498
2534
|
candlestick: {
|
|
2499
2535
|
d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
|
|
2500
2536
|
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"]
|
|
@@ -2561,21 +2597,21 @@ var Ar = {
|
|
|
2561
2597
|
"M16 4.5h3v6h-3z"
|
|
2562
2598
|
]
|
|
2563
2599
|
}
|
|
2564
|
-
},
|
|
2565
|
-
function
|
|
2566
|
-
let t =
|
|
2600
|
+
}, Br = 1.75, Vr = .22, Hr = /* @__PURE__ */ new WeakMap();
|
|
2601
|
+
function Ur(e) {
|
|
2602
|
+
let t = Hr.get(e);
|
|
2567
2603
|
if (t) return t;
|
|
2568
2604
|
let n = "";
|
|
2569
|
-
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${
|
|
2605
|
+
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${Vr}" stroke="none"/>`);
|
|
2570
2606
|
for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
|
|
2571
2607
|
e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
|
|
2572
|
-
for (let [t, r, i =
|
|
2573
|
-
return
|
|
2608
|
+
for (let [t, r, i = Br] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
|
|
2609
|
+
return Hr.set(e, n), n;
|
|
2574
2610
|
}
|
|
2575
|
-
function
|
|
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">${
|
|
2611
|
+
function Wr(e, t) {
|
|
2612
|
+
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">${Ur(e)}</svg>`;
|
|
2577
2613
|
}
|
|
2578
2614
|
//#endregion
|
|
2579
|
-
export { t as CHART_STYLE_KEYS,
|
|
2615
|
+
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, Rr as DRAWING_TOOL_ICONS, tr as FIBONACCI, pr as HNX_SESSIONS, fr as HOSE_SESSIONS, Br as ICON_DOT_RADIUS, Vr as ICON_SOFT_OPACITY, xn as LIGHT_PRICE_LIMITS, wn as LIGHT_THEME, e as LayerType, xr as MARKET_CRYPTO, vr as MARKET_HNX, gr as MARKET_HOSE, _r as MARKET_HOSE_ETF, Sr as MARKET_NYSE, yr as MARKET_UPCOM, br as MARKET_VN30F, Qn as MIN_PANEL_HEIGHT, ce as MS_TIME_THRESHOLD, 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, Lr as UI_ICONS, mr as UPCOM_SESSIONS, hr as VN30F_SESSIONS, J as VN_COLORS, dn as VOLUME_ALPHA, We as alignToTimeframe, mt as autoPricePrecision, ut as barDateParts, lt as barDateZone, le as barTimeUnit, Je as barsAreDaily, Hn as chartStyleValue, ne as clamp, Er as computePriceLimits, ge as computePriceRange, se as computeTickStep, g as contrastRatio, Cr as createVNTheme, xt as detectPrecision, Yt as drawingOption, W as en, pe as findBarIndex, he as fitPriceRange, _t as formatFraction, q as formatNumber, A as formatPrice, gt as formatPriceScaleLabel, Ue as formatTimestamp, ur as formatVND, bt as formatVolume, dr as formatVolumeLoc, vt as fractionTick, jr as getCurrentSession, or as getLocale, lr as getLocaleStrings, ve as hexToRgba, Wr as iconSvg, Et as indicatorSource, we as inkOn, ie as inverseLerp, Ke as isDateOnly, Ct as isPriceSource, He as isTimeFrame, S as isUtcTimeZone, b as isValidTimeZone, re as lerp, be as lerpColor, Ln as lineDash, Vt as marketStatus, _e as mergeBar, oe as niceNumber, de as normalizeBar, ue as normalizeBarTime, C as offsetAt, me as padPriceRange, Dt as parseIndicatorSource, T as parseTimeframe, nr as phiStep, Ft as pickBaseTimeframe, yt as priceFormatterFor, wr as priceStepAt, pt as priceTagText, Lt as rankSymbols, Nn as readChartStyleOverrides, sn as readChartTypeOptions, In as readIndicatorPlotStyles, te as readNews, Pn as readPaneStyle, l as readQuote, Ce as readableOn, cr as registerLocale, At as resampleBars, zn as resolveChartTheme, Xt as resolveDrawingOptions, V as resolveVolumeColors, Z as roundToPriceStep, ae as roundToStep, qt as sanitizeDrawingOptions, an as sanitizeDrawingStyle, Dr as scaleMarketPrices, j as sessionMinute, ar as setLocale, fe as sliceVisibleData, wt as sourcePrice, Rt as stepDecimals, zt as symbolTimeZone, sr as t, Ve as tickBarCount, Ge as timeParts, st as timeframeBucketStart, it as timeframeFollowsDays, at as timeframeSpansDays, E as timeframeToMs, Ye as tzLabel, rr as vi, Ir as vn30fContracts, Fr as vn30fLastTradingDay, L as volumeColor, Fe as wallToUtc, m as withAlpha, x as zoneOffsetMinutes, Le as zonedDateFormatter };
|
|
2580
2616
|
|
|
2581
2617
|
//# sourceMappingURL=index.js.map
|