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