@tradecanvas/commons 1.32.0 → 1.35.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/golden.d.ts +15 -0
- package/dist/constants/golden.d.ts.map +1 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/themes.d.ts +17 -14
- 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 +375 -350
- package/dist/index.js.map +1 -1
- package/dist/market/presets.d.ts +5 -0
- package/dist/market/presets.d.ts.map +1 -1
- package/dist/types/chart.d.ts +1 -1
- package/dist/types/chart.d.ts.map +1 -1
- package/dist/types/events.d.ts +1 -1
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/indicator.d.ts +14 -0
- package/dist/types/indicator.d.ts.map +1 -1
- package/dist/types/rendering.d.ts +2 -0
- package/dist/types/rendering.d.ts.map +1 -1
- package/dist/types/trading.d.ts +3 -0
- package/dist/types/trading.d.ts.map +1 -1
- package/dist/utils/chartStyle.d.ts.map +1 -1
- package/dist/utils/data.d.ts +14 -0
- package/dist/utils/data.d.ts.map +1 -1
- package/dist/utils/precision.d.ts +8 -1
- package/dist/utils/precision.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -135,7 +135,6 @@ var e = /* @__PURE__ */ function(e) {
|
|
|
135
135
|
removeStops: !0
|
|
136
136
|
},
|
|
137
137
|
fillMarks: !0,
|
|
138
|
-
pricePrecision: 2,
|
|
139
138
|
dragThreshold: 3
|
|
140
139
|
}, i = {
|
|
141
140
|
longColor: "#1fa874",
|
|
@@ -302,7 +301,22 @@ function pe(e, t, n, r = !1) {
|
|
|
302
301
|
max: t + a * n
|
|
303
302
|
};
|
|
304
303
|
}
|
|
305
|
-
function me(e, t, n, r =
|
|
304
|
+
function me(e, t, n, r = !1) {
|
|
305
|
+
let i = Math.max(1 - n.top - n.bottom, 2 ** -52), a = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
|
|
306
|
+
if (Number.isFinite(a)) {
|
|
307
|
+
let r = (a || Math.log(1.01)) / i;
|
|
308
|
+
return {
|
|
309
|
+
min: e / Math.exp(r * n.bottom),
|
|
310
|
+
max: t * Math.exp(r * n.top)
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
let o = (t - e || 1) / i;
|
|
314
|
+
return {
|
|
315
|
+
min: e - o * n.bottom,
|
|
316
|
+
max: t + o * n.top
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
function he(e, t, n, r = .05, i = !1) {
|
|
306
320
|
if (e.length === 0) return {
|
|
307
321
|
min: 0,
|
|
308
322
|
max: 1
|
|
@@ -314,7 +328,7 @@ function me(e, t, n, r = .05, i = !1) {
|
|
|
314
328
|
max: 1
|
|
315
329
|
} : pe(s, c, r, i);
|
|
316
330
|
}
|
|
317
|
-
function
|
|
331
|
+
function ge(e, t) {
|
|
318
332
|
return {
|
|
319
333
|
...e,
|
|
320
334
|
high: Math.max(e.high, t.price),
|
|
@@ -326,13 +340,13 @@ function he(e, t) {
|
|
|
326
340
|
}
|
|
327
341
|
//#endregion
|
|
328
342
|
//#region src/utils/color.ts
|
|
329
|
-
function
|
|
343
|
+
function _e(e, t = 1) {
|
|
330
344
|
let n = e.slice(1);
|
|
331
345
|
return (n.length === 3 || n.length === 4) && (n = [...n.slice(0, 3)].map((e) => e + e).join("")), `rgba(${parseInt(n.slice(0, 2), 16)}, ${parseInt(n.slice(2, 4), 16)}, ${parseInt(n.slice(4, 6), 16)}, ${t})`;
|
|
332
346
|
}
|
|
333
|
-
function
|
|
347
|
+
function h(e, t) {
|
|
334
348
|
let n = e.trim();
|
|
335
|
-
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return
|
|
349
|
+
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return _e(n, t);
|
|
336
350
|
let r = n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);
|
|
337
351
|
return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
|
|
338
352
|
}
|
|
@@ -346,7 +360,7 @@ function ve(e, t, n) {
|
|
|
346
360
|
}
|
|
347
361
|
//#endregion
|
|
348
362
|
//#region src/utils/timezone.ts
|
|
349
|
-
var
|
|
363
|
+
var g = 6e4, _ = 1440 * g, v = 15 * g, ye = 8192, y = 7 * _, be = 4096, xe = new Set([
|
|
350
364
|
"UTC",
|
|
351
365
|
"Etc/UTC",
|
|
352
366
|
"GMT",
|
|
@@ -357,9 +371,9 @@ var h = 6e4, g = 1440 * h, _ = 15 * h, ye = 8192, be = 7 * g, xe = 4096, Se = ne
|
|
|
357
371
|
"Etc/Universal",
|
|
358
372
|
"Zulu",
|
|
359
373
|
"Etc/Zulu"
|
|
360
|
-
]),
|
|
361
|
-
function
|
|
362
|
-
let t =
|
|
374
|
+
]), Se = /* @__PURE__ */ new Map(), b = /* @__PURE__ */ new Map(), Ce = /* @__PURE__ */ new Map();
|
|
375
|
+
function we(e) {
|
|
376
|
+
let t = Se.get(e);
|
|
363
377
|
return t || (t = new Intl.DateTimeFormat("en-US", {
|
|
364
378
|
timeZone: e,
|
|
365
379
|
hourCycle: "h23",
|
|
@@ -369,34 +383,34 @@ function Te(e) {
|
|
|
369
383
|
hour: "numeric",
|
|
370
384
|
minute: "numeric",
|
|
371
385
|
second: "numeric"
|
|
372
|
-
}),
|
|
386
|
+
}), Se.set(e, t)), t;
|
|
373
387
|
}
|
|
374
|
-
function
|
|
388
|
+
function x(e) {
|
|
375
389
|
if (!e) return !1;
|
|
376
390
|
try {
|
|
377
|
-
return
|
|
391
|
+
return we(e), !0;
|
|
378
392
|
} catch {
|
|
379
393
|
return !1;
|
|
380
394
|
}
|
|
381
395
|
}
|
|
382
|
-
function
|
|
383
|
-
if (!Number.isFinite(t) ||
|
|
384
|
-
let n =
|
|
385
|
-
n || (n = /* @__PURE__ */ new Map(),
|
|
386
|
-
let r = Math.floor(t /
|
|
387
|
-
return i || (i =
|
|
396
|
+
function S(e, t) {
|
|
397
|
+
if (!Number.isFinite(t) || xe.has(e)) return 0;
|
|
398
|
+
let n = Ce.get(e);
|
|
399
|
+
n || (n = /* @__PURE__ */ new Map(), Ce.set(e, n));
|
|
400
|
+
let r = Math.floor(t / y), i = n.get(r);
|
|
401
|
+
return i || (i = Te(e, r * y), n.size >= be && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
|
|
388
402
|
}
|
|
389
|
-
function
|
|
390
|
-
let n =
|
|
403
|
+
function Te(e, t) {
|
|
404
|
+
let n = C(e, t), r = t + y - v, i = C(e, r);
|
|
391
405
|
if (i === n) return {
|
|
392
406
|
before: n,
|
|
393
407
|
change: Infinity,
|
|
394
408
|
after: i
|
|
395
409
|
};
|
|
396
410
|
let a = t;
|
|
397
|
-
for (; r - a >
|
|
398
|
-
let t = a + Math.floor((r - a) /
|
|
399
|
-
|
|
411
|
+
for (; r - a > v;) {
|
|
412
|
+
let t = a + Math.floor((r - a) / v / 2) * v;
|
|
413
|
+
C(e, t) === n ? a = t : r = t;
|
|
400
414
|
}
|
|
401
415
|
return {
|
|
402
416
|
before: n,
|
|
@@ -404,11 +418,11 @@ function De(e, t) {
|
|
|
404
418
|
after: i
|
|
405
419
|
};
|
|
406
420
|
}
|
|
407
|
-
function
|
|
408
|
-
let n = Math.floor(t /
|
|
421
|
+
function C(e, t) {
|
|
422
|
+
let n = Math.floor(t / v), r = `${e}|${n}`, i = b.get(r);
|
|
409
423
|
if (i !== void 0) return i;
|
|
410
|
-
let a = n *
|
|
411
|
-
for (let t of
|
|
424
|
+
let a = n * v, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
|
|
425
|
+
for (let t of we(e).formatToParts(new Date(a))) {
|
|
412
426
|
let e = Number(t.value);
|
|
413
427
|
switch (t.type) {
|
|
414
428
|
case "year":
|
|
@@ -431,21 +445,21 @@ function b(e, t) {
|
|
|
431
445
|
break;
|
|
432
446
|
}
|
|
433
447
|
}
|
|
434
|
-
let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) /
|
|
435
|
-
return
|
|
448
|
+
let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / g);
|
|
449
|
+
return b.size >= ye && b.clear(), b.set(r, f), f;
|
|
436
450
|
}
|
|
437
|
-
function
|
|
438
|
-
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e :
|
|
451
|
+
function w(e, t) {
|
|
452
|
+
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : S(e, t);
|
|
439
453
|
}
|
|
440
|
-
function
|
|
441
|
-
let n = e -
|
|
442
|
-
if (n +
|
|
443
|
-
let r = e -
|
|
444
|
-
return r +
|
|
454
|
+
function Ee(e, t) {
|
|
455
|
+
let n = e - w(t, e - _) * g;
|
|
456
|
+
if (n + w(t, n) * g === e) return n;
|
|
457
|
+
let r = e - w(t, e + _) * g;
|
|
458
|
+
return r + w(t, r) * g === e ? r : n;
|
|
445
459
|
}
|
|
446
|
-
var
|
|
447
|
-
function
|
|
448
|
-
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i =
|
|
460
|
+
var De = /* @__PURE__ */ new Map();
|
|
461
|
+
function Oe(e, t, n) {
|
|
462
|
+
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = De.get(r);
|
|
449
463
|
if (i) return i;
|
|
450
464
|
let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
|
|
451
465
|
try {
|
|
@@ -459,12 +473,12 @@ function Ae(e, t, n) {
|
|
|
459
473
|
timeZone: a
|
|
460
474
|
});
|
|
461
475
|
}
|
|
462
|
-
let s = typeof n == "number" ? n *
|
|
463
|
-
return i = (e) => o.format(new Date(e + s)),
|
|
476
|
+
let s = typeof n == "number" ? n * g : 0;
|
|
477
|
+
return i = (e) => o.format(new Date(e + s)), De.set(r, i), i;
|
|
464
478
|
}
|
|
465
479
|
//#endregion
|
|
466
480
|
//#region src/utils/time.ts
|
|
467
|
-
var
|
|
481
|
+
var ke = {
|
|
468
482
|
"1s": 1e3,
|
|
469
483
|
"5s": 5e3,
|
|
470
484
|
"15s": 15e3,
|
|
@@ -491,16 +505,16 @@ var je = {
|
|
|
491
505
|
"3M": 7776e6,
|
|
492
506
|
"6M": 15552e6,
|
|
493
507
|
"12M": 31536e6
|
|
494
|
-
},
|
|
508
|
+
}, Ae = {
|
|
495
509
|
s: 1e3,
|
|
496
510
|
m: 6e4,
|
|
497
511
|
h: 36e5,
|
|
498
512
|
d: 864e5,
|
|
499
513
|
w: 6048e5,
|
|
500
514
|
M: 2592e6
|
|
501
|
-
},
|
|
502
|
-
function
|
|
503
|
-
let t =
|
|
515
|
+
}, je = /^([1-9]\d*)([smhdwM])$/;
|
|
516
|
+
function T(e) {
|
|
517
|
+
let t = je.exec(e);
|
|
504
518
|
if (!t) return null;
|
|
505
519
|
let n = Number(t[1]);
|
|
506
520
|
return Number.isSafeInteger(n) ? {
|
|
@@ -508,24 +522,24 @@ function S(e) {
|
|
|
508
522
|
unit: t[2]
|
|
509
523
|
} : null;
|
|
510
524
|
}
|
|
511
|
-
var
|
|
512
|
-
function
|
|
525
|
+
var Me = 1e6;
|
|
526
|
+
function Ne(e) {
|
|
513
527
|
let t = /^([1-9]\d*)T$/.exec(e);
|
|
514
528
|
if (!t) return null;
|
|
515
529
|
let n = Number(t[1]);
|
|
516
|
-
return Number.isSafeInteger(n) && n <=
|
|
530
|
+
return Number.isSafeInteger(n) && n <= Me ? n : null;
|
|
517
531
|
}
|
|
518
|
-
function
|
|
519
|
-
return
|
|
532
|
+
function Pe(e) {
|
|
533
|
+
return T(e) !== null;
|
|
520
534
|
}
|
|
521
|
-
function
|
|
522
|
-
let t =
|
|
535
|
+
function E(e) {
|
|
536
|
+
let t = ke[e];
|
|
523
537
|
if (t !== void 0) return t;
|
|
524
|
-
let n =
|
|
525
|
-
return n ? n.count *
|
|
538
|
+
let n = T(e);
|
|
539
|
+
return n ? n.count * Ae[n.unit] : NaN;
|
|
526
540
|
}
|
|
527
|
-
function
|
|
528
|
-
let n = new Date(e), r =
|
|
541
|
+
function Fe(e, t) {
|
|
542
|
+
let n = new Date(e), r = E(t);
|
|
529
543
|
return r >= 864e5 ? n.toLocaleDateString(void 0, {
|
|
530
544
|
month: "short",
|
|
531
545
|
day: "numeric"
|
|
@@ -538,11 +552,11 @@ function Le(e, t) {
|
|
|
538
552
|
second: "2-digit"
|
|
539
553
|
});
|
|
540
554
|
}
|
|
541
|
-
function
|
|
542
|
-
let n =
|
|
555
|
+
function Ie(e, t) {
|
|
556
|
+
let n = E(t);
|
|
543
557
|
return Math.floor(e / n) * n;
|
|
544
558
|
}
|
|
545
|
-
function
|
|
559
|
+
function Le(e, t) {
|
|
546
560
|
if (t === null) {
|
|
547
561
|
let t = new Date(e);
|
|
548
562
|
return {
|
|
@@ -553,7 +567,7 @@ function ze(e, t) {
|
|
|
553
567
|
minutes: t.getMinutes()
|
|
554
568
|
};
|
|
555
569
|
}
|
|
556
|
-
let n = new Date(e +
|
|
570
|
+
let n = new Date(e + w(t, e) * 6e4);
|
|
557
571
|
return {
|
|
558
572
|
year: n.getUTCFullYear(),
|
|
559
573
|
month: n.getUTCMonth() + 1,
|
|
@@ -562,11 +576,11 @@ function ze(e, t) {
|
|
|
562
576
|
minutes: n.getUTCMinutes()
|
|
563
577
|
};
|
|
564
578
|
}
|
|
565
|
-
function
|
|
579
|
+
function Re(e) {
|
|
566
580
|
return e.hours === 0 && e.minutes === 0;
|
|
567
581
|
}
|
|
568
|
-
var
|
|
569
|
-
function
|
|
582
|
+
var ze = 20 * 36e5;
|
|
583
|
+
function Be(e) {
|
|
570
584
|
let t = Math.min(e.length, 64);
|
|
571
585
|
if (t < 2) return;
|
|
572
586
|
let n = ce(e), r = Infinity;
|
|
@@ -574,78 +588,81 @@ function He(e) {
|
|
|
574
588
|
let t = Math.abs(e[i].time - e[i - 1].time) * n;
|
|
575
589
|
t > 0 && t < r && (r = t);
|
|
576
590
|
}
|
|
577
|
-
return r === Infinity ? void 0 : r >=
|
|
591
|
+
return r === Infinity ? void 0 : r >= ze;
|
|
578
592
|
}
|
|
579
|
-
function
|
|
580
|
-
let n =
|
|
593
|
+
function Ve(e, t = Date.now()) {
|
|
594
|
+
let n = w(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
|
|
581
595
|
return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
|
|
582
596
|
}
|
|
583
|
-
var
|
|
584
|
-
function
|
|
585
|
-
let { count: r, unit: i } =
|
|
597
|
+
var He = Date.UTC(1970, 0, 5);
|
|
598
|
+
function Ue(e, t, n = 1) {
|
|
599
|
+
let { count: r, unit: i } = T(t) ?? {
|
|
586
600
|
count: 1,
|
|
587
601
|
unit: "m"
|
|
588
602
|
};
|
|
589
603
|
if (i === "s" || i === "m" || i === "h" || i === "d") {
|
|
590
|
-
let t = r *
|
|
604
|
+
let t = r * Ae[i];
|
|
591
605
|
return Math.floor(e / t) * t;
|
|
592
606
|
}
|
|
593
607
|
let a = new Date(e);
|
|
594
608
|
if (i === "w") {
|
|
595
|
-
let e =
|
|
609
|
+
let e = Ae.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
|
|
596
610
|
if (r <= 1) return i;
|
|
597
|
-
let o = Math.floor((i -
|
|
598
|
-
return
|
|
611
|
+
let o = Math.floor((i - He) / (7 * e));
|
|
612
|
+
return He + Math.floor(o / r) * r * 7 * e;
|
|
599
613
|
}
|
|
600
614
|
let o = a.getUTCFullYear() * 12 + a.getUTCMonth(), s = Math.floor(o / r) * r;
|
|
601
615
|
return Date.UTC(Math.floor(s / 12), s % 12, 1);
|
|
602
616
|
}
|
|
603
617
|
//#endregion
|
|
604
618
|
//#region src/utils/precision.ts
|
|
605
|
-
var
|
|
606
|
-
function
|
|
607
|
-
let n = `${e}|${t}`, r =
|
|
608
|
-
return r || (
|
|
619
|
+
var We = 64, D = /* @__PURE__ */ new Map();
|
|
620
|
+
function Ge(e, t) {
|
|
621
|
+
let n = `${e}|${t}`, r = D.get(n);
|
|
622
|
+
return r || (D.size >= We && D.clear(), r = new Intl.NumberFormat(e, {
|
|
609
623
|
minimumFractionDigits: t,
|
|
610
624
|
maximumFractionDigits: t
|
|
611
|
-
}),
|
|
625
|
+
}), D.set(n, r)), r;
|
|
612
626
|
}
|
|
613
|
-
function
|
|
614
|
-
return qe(
|
|
627
|
+
function Ke(e, t, n) {
|
|
628
|
+
return t.formatPrice ? t.formatPrice(e) : O(e, n ?? qe(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
|
|
615
629
|
}
|
|
616
|
-
function
|
|
630
|
+
function O(e, t = 2, n = "en-US") {
|
|
631
|
+
return Ge(n, t).format(e);
|
|
632
|
+
}
|
|
633
|
+
function qe(e, t) {
|
|
617
634
|
if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
|
|
618
635
|
let n = oe(e, t, 8);
|
|
619
636
|
return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
|
|
620
637
|
}
|
|
621
|
-
function
|
|
638
|
+
function Je(e, t, n, r = 2, i = "en-US") {
|
|
622
639
|
if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
|
|
623
640
|
if (t === "percentage") {
|
|
624
641
|
let t = (e / n - 1) * 100;
|
|
625
642
|
return `${t > 0 ? "+" : ""}${t.toFixed(2)}%`;
|
|
626
643
|
}
|
|
627
|
-
return
|
|
644
|
+
return O(e / n * 100, 2, i);
|
|
628
645
|
}
|
|
629
|
-
return
|
|
646
|
+
return O(e, r, i);
|
|
630
647
|
}
|
|
631
|
-
function
|
|
648
|
+
function Ye(e, t, n = 1) {
|
|
632
649
|
let r = Number.isInteger(n) && n > 1 ? n : 1;
|
|
633
650
|
if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
|
|
634
651
|
let i = t * r, a = Math.round(Math.abs(e) * i), o = Math.floor(a / i), s = a - o * i, c = Math.floor(s / r), l = String(t - 1).length, u = r > 1 ? String(Math.floor((s - c * r) / r * 10)) : "";
|
|
635
652
|
return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
|
|
636
653
|
}
|
|
637
|
-
function
|
|
654
|
+
function Xe(e) {
|
|
638
655
|
if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
|
|
639
656
|
let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
|
|
640
657
|
return 1 / (e.denominator * t);
|
|
641
658
|
}
|
|
642
|
-
function
|
|
643
|
-
return e ? typeof e == "function" ? e :
|
|
659
|
+
function Ze(e) {
|
|
660
|
+
return e ? typeof e == "function" ? e : Xe(e) === null ? null : (t) => Ye(t, e.denominator, e.subDenominator) : null;
|
|
644
661
|
}
|
|
645
|
-
function
|
|
662
|
+
function Qe(e) {
|
|
646
663
|
return e >= 1e9 ? (e / 1e9).toFixed(2) + "B" : e >= 1e6 ? (e / 1e6).toFixed(2) + "M" : e >= 1e3 ? (e / 1e3).toFixed(2) + "K" : e.toFixed(0);
|
|
647
664
|
}
|
|
648
|
-
function
|
|
665
|
+
function $e(e) {
|
|
649
666
|
let t = 0;
|
|
650
667
|
for (let n of e) {
|
|
651
668
|
let e = n.toString(), r = e.indexOf(".");
|
|
@@ -655,7 +672,7 @@ function tt(e) {
|
|
|
655
672
|
}
|
|
656
673
|
//#endregion
|
|
657
674
|
//#region src/utils/priceSource.ts
|
|
658
|
-
var
|
|
675
|
+
var et = [
|
|
659
676
|
"close",
|
|
660
677
|
"open",
|
|
661
678
|
"high",
|
|
@@ -665,10 +682,10 @@ var nt = [
|
|
|
665
682
|
"ohlc4",
|
|
666
683
|
"hlcc4"
|
|
667
684
|
];
|
|
668
|
-
function
|
|
669
|
-
return typeof e == "string" &&
|
|
685
|
+
function tt(e) {
|
|
686
|
+
return typeof e == "string" && et.includes(e);
|
|
670
687
|
}
|
|
671
|
-
function
|
|
688
|
+
function nt(e, t) {
|
|
672
689
|
switch (t) {
|
|
673
690
|
case "open": return e.open;
|
|
674
691
|
case "high": return e.high;
|
|
@@ -680,13 +697,13 @@ function it(e, t) {
|
|
|
680
697
|
default: return e.close;
|
|
681
698
|
}
|
|
682
699
|
}
|
|
683
|
-
var
|
|
684
|
-
function
|
|
700
|
+
var rt = /^ind:([^:]+):(.+)$/;
|
|
701
|
+
function it(e, t) {
|
|
685
702
|
return `ind:${e}:${t}`;
|
|
686
703
|
}
|
|
687
|
-
function
|
|
704
|
+
function at(e) {
|
|
688
705
|
if (typeof e != "string") return null;
|
|
689
|
-
let t =
|
|
706
|
+
let t = rt.exec(e);
|
|
690
707
|
return t ? {
|
|
691
708
|
instanceId: t[1],
|
|
692
709
|
key: t[2]
|
|
@@ -694,11 +711,11 @@ function st(e) {
|
|
|
694
711
|
}
|
|
695
712
|
//#endregion
|
|
696
713
|
//#region src/utils/resample.ts
|
|
697
|
-
var
|
|
698
|
-
function
|
|
714
|
+
var ot = 864e5;
|
|
715
|
+
function st(e, t, n = 1) {
|
|
699
716
|
let r = [], i = null;
|
|
700
717
|
for (let a of e) {
|
|
701
|
-
let e =
|
|
718
|
+
let e = Ue(a.time, t, n);
|
|
702
719
|
i === null || e !== i.time ? (i = {
|
|
703
720
|
time: e,
|
|
704
721
|
open: a.open,
|
|
@@ -710,37 +727,37 @@ function lt(e, t, n = 1) {
|
|
|
710
727
|
}
|
|
711
728
|
return r;
|
|
712
729
|
}
|
|
713
|
-
var
|
|
714
|
-
function
|
|
715
|
-
let n =
|
|
730
|
+
var k = (e) => e === "s" || e === "m" || e === "h" || e === "d";
|
|
731
|
+
function ct(e, t) {
|
|
732
|
+
let n = T(e), r = T(t);
|
|
716
733
|
if (!n || !r) return !1;
|
|
717
|
-
let i =
|
|
718
|
-
return n.unit === "d" && n.count > 1 ? !1 :
|
|
734
|
+
let i = E(e);
|
|
735
|
+
return n.unit === "d" && n.count > 1 ? !1 : k(r.unit) ? k(n.unit) && E(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : k(n.unit) && ot % i === 0;
|
|
719
736
|
}
|
|
720
|
-
function
|
|
737
|
+
function lt(e, t) {
|
|
721
738
|
let n = null, r = 0;
|
|
722
739
|
for (let i of t) {
|
|
723
|
-
if (!
|
|
724
|
-
let t =
|
|
740
|
+
if (!ct(i, e)) continue;
|
|
741
|
+
let t = E(i);
|
|
725
742
|
t > r && (n = i, r = t);
|
|
726
743
|
}
|
|
727
744
|
return n;
|
|
728
745
|
}
|
|
729
746
|
//#endregion
|
|
730
747
|
//#region src/utils/symbols.ts
|
|
731
|
-
function
|
|
748
|
+
function ut(e, t) {
|
|
732
749
|
if (!e) return 0;
|
|
733
750
|
if (e === t) return 1e3;
|
|
734
751
|
if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
|
|
735
752
|
let n = e.indexOf(t);
|
|
736
753
|
return n >= 0 ? 300 - Math.min(100, n) : 0;
|
|
737
754
|
}
|
|
738
|
-
function
|
|
755
|
+
function dt(e, t, n = 50, r) {
|
|
739
756
|
let i = t.trim().toUpperCase();
|
|
740
757
|
if (!i) return e.slice(0, n);
|
|
741
758
|
let a = [];
|
|
742
759
|
for (let t of e) {
|
|
743
|
-
let e = Math.max(
|
|
760
|
+
let e = Math.max(ut(t.symbol.toUpperCase(), i), ut((t.description ?? "").toUpperCase(), i) * .8);
|
|
744
761
|
e > 0 && a.push({
|
|
745
762
|
info: t,
|
|
746
763
|
score: e + (r?.(t) ?? 0)
|
|
@@ -748,7 +765,7 @@ function pt(e, t, n = 50, r) {
|
|
|
748
765
|
}
|
|
749
766
|
return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
|
|
750
767
|
}
|
|
751
|
-
function
|
|
768
|
+
function ft(e) {
|
|
752
769
|
let t = typeof e == "number" ? e : Number(e);
|
|
753
770
|
if (!Number.isFinite(t) || t <= 0) return 0;
|
|
754
771
|
for (let e = 0; e <= 12; e++) {
|
|
@@ -757,7 +774,7 @@ function mt(e) {
|
|
|
757
774
|
}
|
|
758
775
|
return 12;
|
|
759
776
|
}
|
|
760
|
-
function
|
|
777
|
+
function A(e) {
|
|
761
778
|
let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
|
|
762
779
|
if (!t) return null;
|
|
763
780
|
let n = Number(t[1]), r = Number(t[2]);
|
|
@@ -765,26 +782,26 @@ function E(e) {
|
|
|
765
782
|
}
|
|
766
783
|
//#endregion
|
|
767
784
|
//#region src/utils/marketStatus.ts
|
|
768
|
-
var
|
|
769
|
-
function
|
|
785
|
+
var j = 864e5, M = 6e4, pt = 8;
|
|
786
|
+
function mt(e, t) {
|
|
770
787
|
let n = e?.timezone, r = (e?.sessions ?? []).flatMap((e) => {
|
|
771
|
-
let t =
|
|
788
|
+
let t = A(e.start), n = A(e.end);
|
|
772
789
|
return t === null || n === null || t === n ? [] : [{
|
|
773
790
|
start: t,
|
|
774
791
|
end: n,
|
|
775
792
|
days: Array.isArray(e.days) ? e.days : null
|
|
776
793
|
}];
|
|
777
794
|
});
|
|
778
|
-
if (!n || !
|
|
795
|
+
if (!n || !x(n) || r.length === 0 || !Number.isFinite(t)) return {
|
|
779
796
|
state: "always",
|
|
780
797
|
next: null
|
|
781
798
|
};
|
|
782
|
-
let i =
|
|
783
|
-
for (let e = -1; e <=
|
|
784
|
-
let t = a + e *
|
|
799
|
+
let i = S(n, t) * M, a = Math.floor((t + i) / j) * j, o = (e) => e - S(n, e - S(n, e - i) * M) * M, s = [];
|
|
800
|
+
for (let e = -1; e <= pt; e++) {
|
|
801
|
+
let t = a + e * j, n = (Math.floor(t / j) + 4) % 7;
|
|
785
802
|
for (let e of r) {
|
|
786
803
|
if (e.days && !e.days.includes(n)) continue;
|
|
787
|
-
let r = t + e.start *
|
|
804
|
+
let r = t + e.start * M, i = (e.end > e.start ? t : t + j) + e.end * M;
|
|
788
805
|
s.push([o(r), o(i)]);
|
|
789
806
|
}
|
|
790
807
|
}
|
|
@@ -807,15 +824,15 @@ function gt(e, t) {
|
|
|
807
824
|
}
|
|
808
825
|
//#endregion
|
|
809
826
|
//#region src/utils/drawingOptions.ts
|
|
810
|
-
var
|
|
811
|
-
function
|
|
827
|
+
var ht = 48, gt = 2e3, _t = 1e4;
|
|
828
|
+
function vt(e) {
|
|
812
829
|
if (!Array.isArray(e)) return;
|
|
813
830
|
let t = [];
|
|
814
831
|
for (let n of e) {
|
|
815
|
-
if (t.length >=
|
|
832
|
+
if (t.length >= ht) break;
|
|
816
833
|
if (typeof n != "object" || !n) continue;
|
|
817
834
|
let { value: e, visible: r, color: i } = n;
|
|
818
|
-
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) >
|
|
835
|
+
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > _t || r !== void 0 && typeof r != "boolean") continue;
|
|
819
836
|
let a = {
|
|
820
837
|
value: e,
|
|
821
838
|
visible: r ?? !0
|
|
@@ -824,170 +841,170 @@ function bt(e) {
|
|
|
824
841
|
}
|
|
825
842
|
return t;
|
|
826
843
|
}
|
|
827
|
-
function
|
|
844
|
+
function yt(e, t) {
|
|
828
845
|
switch (e.kind) {
|
|
829
846
|
case "boolean": return typeof t == "boolean" ? t : void 0;
|
|
830
847
|
case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
|
|
831
848
|
case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
|
|
832
|
-
case "levels": return
|
|
833
|
-
case "text": return typeof t == "string" ? t.slice(0,
|
|
849
|
+
case "levels": return vt(t);
|
|
850
|
+
case "text": return typeof t == "string" ? t.slice(0, gt) : void 0;
|
|
834
851
|
}
|
|
835
852
|
}
|
|
836
|
-
function
|
|
853
|
+
function bt(e, t) {
|
|
837
854
|
if (!e || typeof t != "object" || !t) return {};
|
|
838
855
|
let n = {};
|
|
839
856
|
for (let [r, i] of Object.entries(t)) {
|
|
840
857
|
let t = e[r];
|
|
841
858
|
if (!t) continue;
|
|
842
|
-
let a =
|
|
859
|
+
let a = yt(t, i);
|
|
843
860
|
a !== void 0 && (n[r] = a);
|
|
844
861
|
}
|
|
845
862
|
return n;
|
|
846
863
|
}
|
|
847
|
-
function
|
|
864
|
+
function xt(e) {
|
|
848
865
|
return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
|
|
849
866
|
}
|
|
850
|
-
function
|
|
867
|
+
function St(e, t, n) {
|
|
851
868
|
let r = e?.[n];
|
|
852
|
-
return r ?
|
|
869
|
+
return r ? xt((t && n in t ? yt(r, t[n]) : void 0) ?? r.default) : t?.[n];
|
|
853
870
|
}
|
|
854
|
-
function
|
|
871
|
+
function Ct(e, t) {
|
|
855
872
|
let n = {};
|
|
856
|
-
for (let r of Object.keys(e ?? {})) n[r] =
|
|
873
|
+
for (let r of Object.keys(e ?? {})) n[r] = St(e, t, r);
|
|
857
874
|
return n;
|
|
858
875
|
}
|
|
859
876
|
//#endregion
|
|
860
877
|
//#region src/utils/drawingStyle.ts
|
|
861
|
-
var
|
|
878
|
+
var wt = [
|
|
862
879
|
"solid",
|
|
863
880
|
"dashed",
|
|
864
881
|
"dotted"
|
|
865
|
-
],
|
|
866
|
-
function
|
|
882
|
+
], Tt = 64, Et = 2e3, Dt = 20, Ot = 200;
|
|
883
|
+
function kt(e, t, n) {
|
|
867
884
|
return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
|
|
868
885
|
}
|
|
869
|
-
function
|
|
870
|
-
return typeof e == "string" && e.length > 0 && e.length <=
|
|
886
|
+
function At(e) {
|
|
887
|
+
return typeof e == "string" && e.length > 0 && e.length <= Tt ? e : void 0;
|
|
871
888
|
}
|
|
872
|
-
function
|
|
889
|
+
function jt(e) {
|
|
873
890
|
if (typeof e != "object" || !e) return {};
|
|
874
|
-
let t = e, n = {}, r =
|
|
891
|
+
let t = e, n = {}, r = At(t.color);
|
|
875
892
|
r !== void 0 && (n.color = r);
|
|
876
|
-
let i =
|
|
877
|
-
i !== void 0 && (n.lineWidth = i),
|
|
878
|
-
let a =
|
|
893
|
+
let i = kt(t.lineWidth, .5, Dt);
|
|
894
|
+
i !== void 0 && (n.lineWidth = i), wt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
|
|
895
|
+
let a = At(t.fillColor);
|
|
879
896
|
a !== void 0 && (n.fillColor = a);
|
|
880
|
-
let o =
|
|
897
|
+
let o = kt(t.fillOpacity, 0, 1);
|
|
881
898
|
o !== void 0 && (n.fillOpacity = o);
|
|
882
|
-
let s =
|
|
883
|
-
return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0,
|
|
899
|
+
let s = kt(t.fontSize, 6, Ot);
|
|
900
|
+
return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, Et)), n;
|
|
884
901
|
}
|
|
885
902
|
//#endregion
|
|
886
903
|
//#region src/utils/chartTypeOptions.ts
|
|
887
|
-
var
|
|
888
|
-
function
|
|
889
|
-
if (!
|
|
904
|
+
var N = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, P = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, F = (e) => typeof e == "object" && !!e && !Array.isArray(e);
|
|
905
|
+
function Mt(e) {
|
|
906
|
+
if (!F(e)) return {};
|
|
890
907
|
let t = {};
|
|
891
|
-
if (
|
|
908
|
+
if (F(e.renko)) {
|
|
892
909
|
let { boxSize: n, atrPeriod: r } = e.renko;
|
|
893
910
|
t.renko = {
|
|
894
|
-
...
|
|
895
|
-
...
|
|
911
|
+
...N(n) || n === "atr" ? { boxSize: n } : {},
|
|
912
|
+
...P(r, 1, 500) ? { atrPeriod: r } : {}
|
|
896
913
|
};
|
|
897
914
|
}
|
|
898
|
-
if (
|
|
915
|
+
if (F(e.lineBreak)) {
|
|
899
916
|
let { lines: n } = e.lineBreak;
|
|
900
|
-
t.lineBreak =
|
|
917
|
+
t.lineBreak = P(n, 1, 10) ? { lines: n } : {};
|
|
901
918
|
}
|
|
902
|
-
if (
|
|
919
|
+
if (F(e.kagi)) {
|
|
903
920
|
let { reversal: n, reversalType: r } = e.kagi;
|
|
904
921
|
t.kagi = {
|
|
905
|
-
...
|
|
922
|
+
...N(n) ? { reversal: n } : {},
|
|
906
923
|
...r === "percent" || r === "price" ? { reversalType: r } : {}
|
|
907
924
|
};
|
|
908
925
|
}
|
|
909
|
-
if (
|
|
926
|
+
if (F(e.pointAndFigure)) {
|
|
910
927
|
let { boxSize: n, reversal: r } = e.pointAndFigure;
|
|
911
928
|
t.pointAndFigure = {
|
|
912
|
-
...
|
|
913
|
-
...
|
|
929
|
+
...N(n) || n === "auto" ? { boxSize: n } : {},
|
|
930
|
+
...P(r, 1, 10) ? { reversal: r } : {}
|
|
914
931
|
};
|
|
915
932
|
}
|
|
916
|
-
if (
|
|
933
|
+
if (F(e.rangeBars)) {
|
|
917
934
|
let { range: n } = e.rangeBars;
|
|
918
|
-
t.rangeBars =
|
|
935
|
+
t.rangeBars = N(n) || n === "auto" ? { range: n } : {};
|
|
919
936
|
}
|
|
920
937
|
return t;
|
|
921
938
|
}
|
|
922
939
|
//#endregion
|
|
923
940
|
//#region src/constants/themes.ts
|
|
924
|
-
var
|
|
925
|
-
family:
|
|
926
|
-
sizeSmall:
|
|
927
|
-
sizeMedium:
|
|
928
|
-
sizeLarge:
|
|
929
|
-
},
|
|
941
|
+
var Nt = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", Pt = {
|
|
942
|
+
family: Nt,
|
|
943
|
+
sizeSmall: 11,
|
|
944
|
+
sizeMedium: 13,
|
|
945
|
+
sizeLarge: 15
|
|
946
|
+
}, I = {
|
|
930
947
|
amber: "#f2a93b",
|
|
931
|
-
up: "#
|
|
948
|
+
up: "#1c9e6d",
|
|
932
949
|
down: "#e8505b",
|
|
933
|
-
ochre: "#
|
|
934
|
-
blue: "#
|
|
935
|
-
violet: "#
|
|
950
|
+
ochre: "#c07c12",
|
|
951
|
+
blue: "#4688fa",
|
|
952
|
+
violet: "#9c73f8",
|
|
936
953
|
cyan: "#1398a8",
|
|
937
954
|
rose: "#e25592",
|
|
938
955
|
neutral: "#7d8696",
|
|
939
|
-
ink: "#
|
|
940
|
-
},
|
|
941
|
-
function
|
|
942
|
-
return
|
|
943
|
-
}
|
|
944
|
-
var
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
],
|
|
956
|
+
ink: "#131416"
|
|
957
|
+
}, Ft = .22;
|
|
958
|
+
function L(e) {
|
|
959
|
+
return h(e, Ft);
|
|
960
|
+
}
|
|
961
|
+
var It = "#fbfaf6", R = "#1b1d21", Lt = "#131416", z = "#e6e3dc", Rt = "#1f7a5c", zt = "#b8423f", Bt = "#4fae8a", Vt = "#e2706b", Ht = "#6a6966", Ut = "#8d8a84", Wt = [
|
|
962
|
+
I.blue,
|
|
963
|
+
I.ochre,
|
|
964
|
+
I.violet,
|
|
965
|
+
I.cyan,
|
|
966
|
+
I.rose
|
|
967
|
+
], Gt = {
|
|
951
968
|
name: "dark",
|
|
952
|
-
background:
|
|
953
|
-
text:
|
|
954
|
-
textSecondary: "#
|
|
955
|
-
grid: "#
|
|
956
|
-
crosshair:
|
|
957
|
-
candleUp:
|
|
958
|
-
candleDown:
|
|
959
|
-
candleUpWick:
|
|
960
|
-
candleDownWick:
|
|
961
|
-
lineColor:
|
|
962
|
-
areaTopColor:
|
|
963
|
-
areaBottomColor:
|
|
964
|
-
volumeUp:
|
|
965
|
-
volumeDown:
|
|
966
|
-
axisLine: "#
|
|
967
|
-
axisLabel: "#
|
|
968
|
-
axisLabelBackground: "#
|
|
969
|
-
font:
|
|
970
|
-
},
|
|
969
|
+
background: Lt,
|
|
970
|
+
text: z,
|
|
971
|
+
textSecondary: "#8d8b86",
|
|
972
|
+
grid: "#1d1e21",
|
|
973
|
+
crosshair: Ht,
|
|
974
|
+
candleUp: Bt,
|
|
975
|
+
candleDown: Vt,
|
|
976
|
+
candleUpWick: Bt,
|
|
977
|
+
candleDownWick: Vt,
|
|
978
|
+
lineColor: z,
|
|
979
|
+
areaTopColor: h(z, .14),
|
|
980
|
+
areaBottomColor: h(z, 0),
|
|
981
|
+
volumeUp: h(z, .14),
|
|
982
|
+
volumeDown: h(z, .08),
|
|
983
|
+
axisLine: "#2a2b2f",
|
|
984
|
+
axisLabel: "#a9a6a0",
|
|
985
|
+
axisLabelBackground: "#232427",
|
|
986
|
+
font: Pt
|
|
987
|
+
}, Kt = {
|
|
971
988
|
name: "light",
|
|
972
|
-
background:
|
|
973
|
-
text:
|
|
974
|
-
textSecondary: "#
|
|
975
|
-
grid: "#
|
|
976
|
-
crosshair:
|
|
977
|
-
candleUp:
|
|
978
|
-
candleDown:
|
|
979
|
-
candleUpWick:
|
|
980
|
-
candleDownWick:
|
|
981
|
-
lineColor:
|
|
982
|
-
areaTopColor:
|
|
983
|
-
areaBottomColor:
|
|
984
|
-
volumeUp:
|
|
985
|
-
volumeDown:
|
|
986
|
-
axisLine: "#
|
|
987
|
-
axisLabel: "#
|
|
988
|
-
axisLabelBackground: "#
|
|
989
|
-
font:
|
|
990
|
-
},
|
|
989
|
+
background: It,
|
|
990
|
+
text: R,
|
|
991
|
+
textSecondary: "#6b6f76",
|
|
992
|
+
grid: "#ece8df",
|
|
993
|
+
crosshair: Ut,
|
|
994
|
+
candleUp: Rt,
|
|
995
|
+
candleDown: zt,
|
|
996
|
+
candleUpWick: Rt,
|
|
997
|
+
candleDownWick: zt,
|
|
998
|
+
lineColor: R,
|
|
999
|
+
areaTopColor: h(R, .12),
|
|
1000
|
+
areaBottomColor: h(R, 0),
|
|
1001
|
+
volumeUp: h(R, .13),
|
|
1002
|
+
volumeDown: h(R, .08),
|
|
1003
|
+
axisLine: "#cfcac0",
|
|
1004
|
+
axisLabel: "#4a4e57",
|
|
1005
|
+
axisLabelBackground: "#eeebe3",
|
|
1006
|
+
font: Pt
|
|
1007
|
+
}, qt = {
|
|
991
1008
|
name: "terminal",
|
|
992
1009
|
background: "#0E0E0E",
|
|
993
1010
|
text: "#C0C0C0",
|
|
@@ -1001,8 +1018,8 @@ var F = "#2eb88a", I = "#e85a67", Lt = [
|
|
|
1001
1018
|
lineColor: "#3D8BFD",
|
|
1002
1019
|
areaTopColor: "rgba(61, 139, 253, 0.3)",
|
|
1003
1020
|
areaBottomColor: "rgba(61, 139, 253, 0.0)",
|
|
1004
|
-
volumeUp: "
|
|
1005
|
-
volumeDown: "
|
|
1021
|
+
volumeUp: L("#00FF87"),
|
|
1022
|
+
volumeDown: L("#FF3B4D"),
|
|
1006
1023
|
axisLine: "#1A1A1A",
|
|
1007
1024
|
axisLabel: "#8A8A8A",
|
|
1008
1025
|
axisLabelBackground: "#1A1A1A",
|
|
@@ -1012,18 +1029,11 @@ var F = "#2eb88a", I = "#e85a67", Lt = [
|
|
|
1012
1029
|
sizeMedium: 12,
|
|
1013
1030
|
sizeLarge: 14
|
|
1014
1031
|
}
|
|
1015
|
-
},
|
|
1016
|
-
L.volumeUp,
|
|
1017
|
-
L.volumeDown,
|
|
1018
|
-
R.volumeUp,
|
|
1019
|
-
R.volumeDown,
|
|
1020
|
-
z.volumeUp,
|
|
1021
|
-
z.volumeDown
|
|
1022
|
-
]);
|
|
1032
|
+
}, Jt = new Set([qt.volumeUp, qt.volumeDown]);
|
|
1023
1033
|
function B(e) {
|
|
1024
1034
|
let t = (e, t) => {
|
|
1025
|
-
if (!
|
|
1026
|
-
let n =
|
|
1035
|
+
if (!Jt.has(e)) return e;
|
|
1036
|
+
let n = L(t);
|
|
1027
1037
|
return n === t ? e : n;
|
|
1028
1038
|
};
|
|
1029
1039
|
return {
|
|
@@ -1033,42 +1043,42 @@ function B(e) {
|
|
|
1033
1043
|
}
|
|
1034
1044
|
//#endregion
|
|
1035
1045
|
//#region src/utils/chartStyle.ts
|
|
1036
|
-
var
|
|
1046
|
+
var Yt = [
|
|
1037
1047
|
"solid",
|
|
1038
1048
|
"dashed",
|
|
1039
1049
|
"dotted"
|
|
1040
|
-
],
|
|
1050
|
+
], Xt = 20, Zt = 64, Qt = 2, $t = [
|
|
1041
1051
|
/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
|
|
1042
1052
|
/^[a-z]{3,30}$/i,
|
|
1043
1053
|
/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
|
|
1044
1054
|
];
|
|
1045
1055
|
function V(e) {
|
|
1046
|
-
return typeof e == "string" && e.length <=
|
|
1056
|
+
return typeof e == "string" && e.length <= Zt && $t.some((t) => t.test(e.trim()));
|
|
1047
1057
|
}
|
|
1048
|
-
function
|
|
1058
|
+
function en(e, t) {
|
|
1049
1059
|
switch (e) {
|
|
1050
1060
|
case "color": return V(t);
|
|
1051
|
-
case "lineStyle": return
|
|
1052
|
-
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <=
|
|
1061
|
+
case "lineStyle": return Yt.includes(t);
|
|
1062
|
+
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= Xt;
|
|
1053
1063
|
case "boolean": return typeof t == "boolean";
|
|
1054
1064
|
}
|
|
1055
1065
|
}
|
|
1056
|
-
function
|
|
1066
|
+
function tn(e) {
|
|
1057
1067
|
return Object.prototype.hasOwnProperty.call(t, e);
|
|
1058
1068
|
}
|
|
1059
|
-
function
|
|
1069
|
+
function nn(e) {
|
|
1060
1070
|
let n = {}, r = [];
|
|
1061
1071
|
if (typeof e != "object" || !e || Array.isArray(e)) return {
|
|
1062
1072
|
overrides: {},
|
|
1063
1073
|
rejected: r
|
|
1064
1074
|
};
|
|
1065
|
-
for (let [i, a] of Object.entries(e))
|
|
1075
|
+
for (let [i, a] of Object.entries(e)) tn(i) ? a === null ? n[i] = null : en(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
|
|
1066
1076
|
return {
|
|
1067
1077
|
overrides: n,
|
|
1068
1078
|
rejected: r
|
|
1069
1079
|
};
|
|
1070
1080
|
}
|
|
1071
|
-
function
|
|
1081
|
+
function rn(e) {
|
|
1072
1082
|
if (typeof e != "object" || !e || Array.isArray(e)) return null;
|
|
1073
1083
|
let { background: t, separator: n } = e, r = {
|
|
1074
1084
|
...V(t) ? { background: t } : {},
|
|
@@ -1076,24 +1086,24 @@ function qt(e) {
|
|
|
1076
1086
|
};
|
|
1077
1087
|
return Object.keys(r).length > 0 ? r : null;
|
|
1078
1088
|
}
|
|
1079
|
-
var
|
|
1080
|
-
function
|
|
1089
|
+
var an = /^[A-Za-z0-9_]{1,32}$/;
|
|
1090
|
+
function on(e) {
|
|
1081
1091
|
if (typeof e != "object" || !e || Array.isArray(e)) return;
|
|
1082
1092
|
let t = {};
|
|
1083
1093
|
for (let [n, r] of Object.entries(e)) {
|
|
1084
|
-
if (!
|
|
1094
|
+
if (!an.test(n) || typeof r != "object" || !r) continue;
|
|
1085
1095
|
let { lineStyle: e, visible: i } = r, a = {
|
|
1086
|
-
...
|
|
1096
|
+
...Yt.includes(e) ? { lineStyle: e } : {},
|
|
1087
1097
|
...typeof i == "boolean" ? { visible: i } : {}
|
|
1088
1098
|
};
|
|
1089
1099
|
Object.keys(a).length > 0 && (t[n] = a);
|
|
1090
1100
|
}
|
|
1091
1101
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
1092
1102
|
}
|
|
1093
|
-
function
|
|
1103
|
+
function sn(e, t, n = 1) {
|
|
1094
1104
|
return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
|
|
1095
1105
|
}
|
|
1096
|
-
function
|
|
1106
|
+
function cn(e, t, n) {
|
|
1097
1107
|
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;
|
|
1098
1108
|
return {
|
|
1099
1109
|
up: o,
|
|
@@ -1101,7 +1111,7 @@ function Zt(e, t, n) {
|
|
|
1101
1111
|
wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
|
|
1102
1112
|
wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
|
|
1103
1113
|
line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
|
|
1104
|
-
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ??
|
|
1114
|
+
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? Qt,
|
|
1105
1115
|
top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
|
|
1106
1116
|
bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
|
|
1107
1117
|
};
|
|
@@ -1114,8 +1124,8 @@ function H(e, t, n) {
|
|
|
1114
1124
|
width: e(`${t}.width`) ?? n.width
|
|
1115
1125
|
};
|
|
1116
1126
|
}
|
|
1117
|
-
function
|
|
1118
|
-
let { style: r, ...i } = e, a = n, o = (e) => a[e], s =
|
|
1127
|
+
function ln(e, t, n) {
|
|
1128
|
+
let { style: r, ...i } = e, a = n, o = (e) => a[e], s = cn(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
|
|
1119
1129
|
panes: {
|
|
1120
1130
|
background: l("panes.background", c),
|
|
1121
1131
|
separator: l("panes.separatorColor", i.axisLine),
|
|
@@ -1139,13 +1149,13 @@ function Qt(e, t, n) {
|
|
|
1139
1149
|
horizontal: H(o, "crosshair.horizontal", {
|
|
1140
1150
|
visible: !0,
|
|
1141
1151
|
color: i.crosshair,
|
|
1142
|
-
style: "
|
|
1152
|
+
style: "solid",
|
|
1143
1153
|
width: 1
|
|
1144
1154
|
}),
|
|
1145
1155
|
vertical: H(o, "crosshair.vertical", {
|
|
1146
1156
|
visible: !0,
|
|
1147
1157
|
color: i.crosshair,
|
|
1148
|
-
style: "
|
|
1158
|
+
style: "solid",
|
|
1149
1159
|
width: 1
|
|
1150
1160
|
}),
|
|
1151
1161
|
labelBackground: l("crosshair.labelBackground", i.text),
|
|
@@ -1170,7 +1180,7 @@ function Qt(e, t, n) {
|
|
|
1170
1180
|
visible: o("lastPrice.visible") ?? !0,
|
|
1171
1181
|
up: l("lastPrice.upColor", s.up),
|
|
1172
1182
|
down: l("lastPrice.downColor", s.down),
|
|
1173
|
-
style: o("lastPrice.style") ?? "
|
|
1183
|
+
style: o("lastPrice.style") ?? "solid",
|
|
1174
1184
|
width: o("lastPrice.width") ?? 1
|
|
1175
1185
|
},
|
|
1176
1186
|
sessionBreaks: {
|
|
@@ -1214,7 +1224,7 @@ function Qt(e, t, n) {
|
|
|
1214
1224
|
style: d
|
|
1215
1225
|
};
|
|
1216
1226
|
}
|
|
1217
|
-
var
|
|
1227
|
+
var un = {
|
|
1218
1228
|
"background.color": (e) => e.background,
|
|
1219
1229
|
"panes.background": (e, t) => t.panes.background,
|
|
1220
1230
|
"panes.separatorColor": (e, t) => t.panes.separator,
|
|
@@ -1251,16 +1261,16 @@ var $t = {
|
|
|
1251
1261
|
"tradeZones.lossColor": (e, t) => t.tradeZones.loss,
|
|
1252
1262
|
"tradeZones.activeColor": (e, t) => t.tradeZones.active,
|
|
1253
1263
|
"drawings.handleColor": (e, t) => t.drawings.handle
|
|
1254
|
-
},
|
|
1264
|
+
}, dn = {
|
|
1255
1265
|
visible: "visible",
|
|
1256
1266
|
color: "color",
|
|
1257
1267
|
style: "style",
|
|
1258
1268
|
width: "width"
|
|
1259
1269
|
};
|
|
1260
|
-
function
|
|
1270
|
+
function fn(e, t, n, r = "candlestick") {
|
|
1261
1271
|
let i = n.split(".");
|
|
1262
1272
|
if (i[0] === "series") {
|
|
1263
|
-
let n =
|
|
1273
|
+
let n = cn(e, (e) => t[e], i[1]);
|
|
1264
1274
|
switch (i[2]) {
|
|
1265
1275
|
case "upColor": return n.up;
|
|
1266
1276
|
case "downColor": return n.down;
|
|
@@ -1273,12 +1283,12 @@ function tn(e, t, n, r = "candlestick") {
|
|
|
1273
1283
|
case "bottomColor": return n.bottom;
|
|
1274
1284
|
}
|
|
1275
1285
|
}
|
|
1276
|
-
let a =
|
|
1277
|
-
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][
|
|
1286
|
+
let a = ln(e, r, t), o = a.style;
|
|
1287
|
+
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][dn[i[2]]] : un[n]?.(a, o) ?? null;
|
|
1278
1288
|
}
|
|
1279
1289
|
//#endregion
|
|
1280
1290
|
//#region src/constants/defaults.ts
|
|
1281
|
-
var
|
|
1291
|
+
var pn = {
|
|
1282
1292
|
autoScale: !0,
|
|
1283
1293
|
rightMargin: 5,
|
|
1284
1294
|
minBarSpacing: 2,
|
|
@@ -1289,7 +1299,7 @@ var nn = {
|
|
|
1289
1299
|
vLineStyle: "solid"
|
|
1290
1300
|
},
|
|
1291
1301
|
crosshair: { mode: "magnet" }
|
|
1292
|
-
},
|
|
1302
|
+
}, mn = [
|
|
1293
1303
|
"1s",
|
|
1294
1304
|
"1m",
|
|
1295
1305
|
"3m",
|
|
@@ -1306,7 +1316,7 @@ var nn = {
|
|
|
1306
1316
|
"3d",
|
|
1307
1317
|
"1w",
|
|
1308
1318
|
"1M"
|
|
1309
|
-
],
|
|
1319
|
+
], hn = [
|
|
1310
1320
|
"1m",
|
|
1311
1321
|
"5m",
|
|
1312
1322
|
"15m",
|
|
@@ -1320,7 +1330,7 @@ var nn = {
|
|
|
1320
1330
|
"3M",
|
|
1321
1331
|
"6M",
|
|
1322
1332
|
"12M"
|
|
1323
|
-
],
|
|
1333
|
+
], gn = [
|
|
1324
1334
|
"1m",
|
|
1325
1335
|
"5m",
|
|
1326
1336
|
"15m",
|
|
@@ -1330,7 +1340,7 @@ var nn = {
|
|
|
1330
1340
|
"1d",
|
|
1331
1341
|
"1w",
|
|
1332
1342
|
"1M"
|
|
1333
|
-
],
|
|
1343
|
+
], _n = [
|
|
1334
1344
|
"1m",
|
|
1335
1345
|
"5m",
|
|
1336
1346
|
"15m",
|
|
@@ -1338,7 +1348,24 @@ var nn = {
|
|
|
1338
1348
|
"4h",
|
|
1339
1349
|
"1d",
|
|
1340
1350
|
"1w"
|
|
1341
|
-
],
|
|
1351
|
+
], vn = 8, yn = 2, bn = 70, xn = 30, Sn = 60, Cn = 120, wn = (1 + Math.sqrt(5)) / 2, Tn = [
|
|
1352
|
+
1,
|
|
1353
|
+
2,
|
|
1354
|
+
3,
|
|
1355
|
+
5,
|
|
1356
|
+
8,
|
|
1357
|
+
13,
|
|
1358
|
+
21,
|
|
1359
|
+
34,
|
|
1360
|
+
55,
|
|
1361
|
+
89
|
|
1362
|
+
];
|
|
1363
|
+
function En(e, t, n = 1) {
|
|
1364
|
+
return Math.round(e * wn ** (t / n));
|
|
1365
|
+
}
|
|
1366
|
+
//#endregion
|
|
1367
|
+
//#region src/i18n/en.ts
|
|
1368
|
+
var U = {
|
|
1342
1369
|
candlestick: "Candlestick",
|
|
1343
1370
|
line: "Line",
|
|
1344
1371
|
area: "Area",
|
|
@@ -1441,7 +1468,7 @@ var nn = {
|
|
|
1441
1468
|
error: "Error",
|
|
1442
1469
|
numberDecimalSeparator: ".",
|
|
1443
1470
|
numberGroupSeparator: ","
|
|
1444
|
-
},
|
|
1471
|
+
}, Dn = {
|
|
1445
1472
|
candlestick: "Nến",
|
|
1446
1473
|
line: "Đường",
|
|
1447
1474
|
area: "Vùng",
|
|
@@ -1544,20 +1571,20 @@ var nn = {
|
|
|
1544
1571
|
error: "Lỗi",
|
|
1545
1572
|
numberDecimalSeparator: ",",
|
|
1546
1573
|
numberGroupSeparator: "."
|
|
1547
|
-
}, W = new Map([["en", U], ["vi",
|
|
1548
|
-
function
|
|
1549
|
-
G = e,
|
|
1574
|
+
}, W = new Map([["en", U], ["vi", Dn]]), G = "en", On = U;
|
|
1575
|
+
function kn(e) {
|
|
1576
|
+
G = e, On = W.get(e) ?? U;
|
|
1550
1577
|
}
|
|
1551
|
-
function
|
|
1578
|
+
function An() {
|
|
1552
1579
|
return G;
|
|
1553
1580
|
}
|
|
1554
|
-
function
|
|
1555
|
-
return
|
|
1581
|
+
function jn(e) {
|
|
1582
|
+
return On[e] ?? U[e] ?? e;
|
|
1556
1583
|
}
|
|
1557
|
-
function
|
|
1584
|
+
function Mn(e, t) {
|
|
1558
1585
|
W.set(e, t);
|
|
1559
1586
|
}
|
|
1560
|
-
function
|
|
1587
|
+
function Nn(e) {
|
|
1561
1588
|
return W.get(e ?? G) ?? U;
|
|
1562
1589
|
}
|
|
1563
1590
|
function K(e, t = 2, n) {
|
|
@@ -1565,10 +1592,10 @@ function K(e, t = 2, n) {
|
|
|
1565
1592
|
for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
|
|
1566
1593
|
return c && (u = "-" + u), s ? u + i + s : u;
|
|
1567
1594
|
}
|
|
1568
|
-
function
|
|
1595
|
+
function Pn(e) {
|
|
1569
1596
|
return K(e, 0, "vi");
|
|
1570
1597
|
}
|
|
1571
|
-
function
|
|
1598
|
+
function Fn(e, t) {
|
|
1572
1599
|
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);
|
|
1573
1600
|
}
|
|
1574
1601
|
//#endregion
|
|
@@ -1580,7 +1607,7 @@ var q = {
|
|
|
1580
1607
|
ceiling: "#D946EF",
|
|
1581
1608
|
floor: "#06B6D4",
|
|
1582
1609
|
reference: "#EAB308"
|
|
1583
|
-
}, J = "Asia/Ho_Chi_Minh",
|
|
1610
|
+
}, J = "Asia/Ho_Chi_Minh", In = [
|
|
1584
1611
|
{
|
|
1585
1612
|
name: "ATO",
|
|
1586
1613
|
startTime: "09:00",
|
|
@@ -1611,7 +1638,7 @@ var q = {
|
|
|
1611
1638
|
endTime: "14:45",
|
|
1612
1639
|
type: "preClose"
|
|
1613
1640
|
}
|
|
1614
|
-
],
|
|
1641
|
+
], Ln = [
|
|
1615
1642
|
{
|
|
1616
1643
|
name: "Phiên 1",
|
|
1617
1644
|
startTime: "09:15",
|
|
@@ -1642,7 +1669,7 @@ var q = {
|
|
|
1642
1669
|
endTime: "15:00",
|
|
1643
1670
|
type: "postClose"
|
|
1644
1671
|
}
|
|
1645
|
-
],
|
|
1672
|
+
], Rn = [
|
|
1646
1673
|
{
|
|
1647
1674
|
name: "Phiên 1",
|
|
1648
1675
|
startTime: "09:15",
|
|
@@ -1661,7 +1688,7 @@ var q = {
|
|
|
1661
1688
|
endTime: "14:30",
|
|
1662
1689
|
type: "continuous"
|
|
1663
1690
|
}
|
|
1664
|
-
],
|
|
1691
|
+
], zn = [
|
|
1665
1692
|
{
|
|
1666
1693
|
name: "ATO",
|
|
1667
1694
|
startTime: "08:45",
|
|
@@ -1692,7 +1719,7 @@ var q = {
|
|
|
1692
1719
|
endTime: "14:45",
|
|
1693
1720
|
type: "preClose"
|
|
1694
1721
|
}
|
|
1695
|
-
],
|
|
1722
|
+
], Bn = {
|
|
1696
1723
|
type: "stock",
|
|
1697
1724
|
exchange: "HOSE",
|
|
1698
1725
|
currency: "VND",
|
|
@@ -1719,12 +1746,12 @@ var q = {
|
|
|
1719
1746
|
ceilingPercent: 7,
|
|
1720
1747
|
floorPercent: 7
|
|
1721
1748
|
},
|
|
1722
|
-
sessions:
|
|
1749
|
+
sessions: In,
|
|
1723
1750
|
colorScheme: q
|
|
1724
|
-
},
|
|
1725
|
-
...
|
|
1751
|
+
}, Vn = {
|
|
1752
|
+
...Bn,
|
|
1726
1753
|
priceSteps: void 0
|
|
1727
|
-
},
|
|
1754
|
+
}, Hn = {
|
|
1728
1755
|
type: "stock",
|
|
1729
1756
|
exchange: "HNX",
|
|
1730
1757
|
currency: "VND",
|
|
@@ -1737,9 +1764,9 @@ var q = {
|
|
|
1737
1764
|
ceilingPercent: 10,
|
|
1738
1765
|
floorPercent: 10
|
|
1739
1766
|
},
|
|
1740
|
-
sessions:
|
|
1767
|
+
sessions: Ln,
|
|
1741
1768
|
colorScheme: q
|
|
1742
|
-
},
|
|
1769
|
+
}, Un = {
|
|
1743
1770
|
type: "stock",
|
|
1744
1771
|
exchange: "UPCOM",
|
|
1745
1772
|
currency: "VND",
|
|
@@ -1752,9 +1779,9 @@ var q = {
|
|
|
1752
1779
|
ceilingPercent: 15,
|
|
1753
1780
|
floorPercent: 15
|
|
1754
1781
|
},
|
|
1755
|
-
sessions:
|
|
1782
|
+
sessions: Rn,
|
|
1756
1783
|
colorScheme: q
|
|
1757
|
-
},
|
|
1784
|
+
}, Wn = {
|
|
1758
1785
|
type: "futures",
|
|
1759
1786
|
exchange: "HNX",
|
|
1760
1787
|
currency: "VND",
|
|
@@ -1768,14 +1795,14 @@ var q = {
|
|
|
1768
1795
|
ceilingPercent: 7,
|
|
1769
1796
|
floorPercent: 7
|
|
1770
1797
|
},
|
|
1771
|
-
sessions:
|
|
1798
|
+
sessions: zn,
|
|
1772
1799
|
colorScheme: q
|
|
1773
|
-
},
|
|
1800
|
+
}, Gn = {
|
|
1774
1801
|
type: "crypto",
|
|
1775
1802
|
currency: "USDT",
|
|
1776
1803
|
pricePrecision: 2,
|
|
1777
1804
|
priceLimits: { enabled: !1 }
|
|
1778
|
-
},
|
|
1805
|
+
}, Kn = {
|
|
1779
1806
|
type: "stock",
|
|
1780
1807
|
exchange: "NYSE",
|
|
1781
1808
|
currency: "USD",
|
|
@@ -1804,77 +1831,75 @@ var q = {
|
|
|
1804
1831
|
}
|
|
1805
1832
|
]
|
|
1806
1833
|
};
|
|
1807
|
-
function
|
|
1834
|
+
function qn(e) {
|
|
1808
1835
|
return {
|
|
1809
1836
|
...e,
|
|
1810
1837
|
candleUp: q.up,
|
|
1811
1838
|
candleDown: q.down,
|
|
1812
1839
|
candleUpWick: q.up,
|
|
1813
|
-
candleDownWick: q.down
|
|
1814
|
-
volumeUp: P(q.up),
|
|
1815
|
-
volumeDown: P(q.down)
|
|
1840
|
+
candleDownWick: q.down
|
|
1816
1841
|
};
|
|
1817
1842
|
}
|
|
1818
1843
|
var Y = 1e-9;
|
|
1819
|
-
function
|
|
1844
|
+
function X(e, t) {
|
|
1820
1845
|
let n = t.priceStep;
|
|
1821
1846
|
for (let r of t.priceSteps ?? []) e + Y >= r.from && (n = r.step);
|
|
1822
1847
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
1823
1848
|
}
|
|
1824
|
-
function
|
|
1849
|
+
function Jn(e, t) {
|
|
1825
1850
|
let n = t.priceStep;
|
|
1826
1851
|
for (let r of t.priceSteps ?? []) e - Y > r.from && (n = r.step);
|
|
1827
1852
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
1828
1853
|
}
|
|
1829
|
-
function
|
|
1830
|
-
let r =
|
|
1854
|
+
function Z(e, t, n = "nearest") {
|
|
1855
|
+
let r = X(e, t);
|
|
1831
1856
|
if (r === void 0 || !Number.isFinite(e)) return e;
|
|
1832
1857
|
let i = e / r, a = n === "down" ? Math.floor(i + Y) : n === "up" ? Math.ceil(i - Y) : Math.round(i);
|
|
1833
|
-
return Number((a * r).toFixed(
|
|
1858
|
+
return Number((a * r).toFixed(ft(r)));
|
|
1834
1859
|
}
|
|
1835
|
-
function
|
|
1860
|
+
function Yn(e, t) {
|
|
1836
1861
|
if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
|
|
1837
|
-
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 =
|
|
1862
|
+
let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100, i = e, a = i * (1 + n), o = i * (1 - r), s = X(i, t);
|
|
1838
1863
|
if (s === void 0) return {
|
|
1839
1864
|
ceiling: a,
|
|
1840
1865
|
floor: o,
|
|
1841
1866
|
reference: i
|
|
1842
1867
|
};
|
|
1843
|
-
let c =
|
|
1868
|
+
let c = Z(i + s, t);
|
|
1844
1869
|
if (Math.abs(i - s) < Y) return {
|
|
1845
1870
|
ceiling: c,
|
|
1846
1871
|
floor: i,
|
|
1847
1872
|
reference: i
|
|
1848
1873
|
};
|
|
1849
|
-
let l =
|
|
1850
|
-
return l <= i && (l = c), u >= i && (u =
|
|
1874
|
+
let l = Z(a, t, "down"), u = Z(o, t, "up");
|
|
1875
|
+
return l <= i && (l = c), u >= i && (u = Z(i - (Jn(i, t) ?? s), t)), u <= 0 && (u = i), {
|
|
1851
1876
|
ceiling: l,
|
|
1852
1877
|
floor: u,
|
|
1853
1878
|
reference: i
|
|
1854
1879
|
};
|
|
1855
1880
|
}
|
|
1856
|
-
var
|
|
1857
|
-
function
|
|
1881
|
+
var Q = (e, t) => Math.round(e * t * 1e9) / 1e9;
|
|
1882
|
+
function Xn(e, t) {
|
|
1858
1883
|
let n = Math.round(Math.log10(t));
|
|
1859
1884
|
return {
|
|
1860
1885
|
...e,
|
|
1861
1886
|
pricePrecision: e.pricePrecision === void 0 ? void 0 : Math.max(0, e.pricePrecision - n),
|
|
1862
|
-
priceStep: e.priceStep === void 0 ? void 0 :
|
|
1887
|
+
priceStep: e.priceStep === void 0 ? void 0 : Q(e.priceStep, t),
|
|
1863
1888
|
priceSteps: e.priceSteps?.map((e) => ({
|
|
1864
|
-
from:
|
|
1865
|
-
step:
|
|
1889
|
+
from: Q(e.from, t),
|
|
1890
|
+
step: Q(e.step, t)
|
|
1866
1891
|
})),
|
|
1867
1892
|
priceLimits: e.priceLimits && {
|
|
1868
1893
|
...e.priceLimits,
|
|
1869
|
-
referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 :
|
|
1894
|
+
referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 : Q(e.priceLimits.referencePrice, t)
|
|
1870
1895
|
}
|
|
1871
1896
|
};
|
|
1872
1897
|
}
|
|
1873
|
-
var
|
|
1874
|
-
function
|
|
1898
|
+
var Zn = 6e4, Qn = 864e5;
|
|
1899
|
+
function $n(e, t) {
|
|
1875
1900
|
let n, r;
|
|
1876
1901
|
if (t) {
|
|
1877
|
-
let i = new Date(e +
|
|
1902
|
+
let i = new Date(e + S(t, e) * Zn);
|
|
1878
1903
|
n = i.getUTCHours(), r = i.getUTCMinutes();
|
|
1879
1904
|
} else {
|
|
1880
1905
|
let t = new Date(e);
|
|
@@ -1882,31 +1907,31 @@ function Vn(e, t) {
|
|
|
1882
1907
|
}
|
|
1883
1908
|
return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
1884
1909
|
}
|
|
1885
|
-
function
|
|
1886
|
-
if (n !== void 0 && !
|
|
1887
|
-
let r =
|
|
1910
|
+
function er(e, t = Date.now(), n) {
|
|
1911
|
+
if (n !== void 0 && !x(n)) return null;
|
|
1912
|
+
let r = $n(t, n);
|
|
1888
1913
|
for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
|
|
1889
1914
|
return null;
|
|
1890
1915
|
}
|
|
1891
|
-
var
|
|
1916
|
+
var $ = (e) => String(e).padStart(2, "0"), tr = (e) => {
|
|
1892
1917
|
let t = new Date(e);
|
|
1893
|
-
return `${t.getUTCFullYear()}-${
|
|
1894
|
-
},
|
|
1895
|
-
function
|
|
1896
|
-
let r = Date.UTC(e, t - 1, 1), i = 1 + (
|
|
1918
|
+
return `${t.getUTCFullYear()}-${$(t.getUTCMonth() + 1)}-${$(t.getUTCDate())}`;
|
|
1919
|
+
}, nr = 4, rr = 7 * 36e5;
|
|
1920
|
+
function ir(e, t, n) {
|
|
1921
|
+
let r = Date.UTC(e, t - 1, 1), i = 1 + (nr - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
|
|
1897
1922
|
let t = new Date(e).getUTCDay();
|
|
1898
|
-
return t === 0 || t === 6 || (n?.(
|
|
1923
|
+
return t === 0 || t === 6 || (n?.(tr(e)) ?? !1);
|
|
1899
1924
|
};
|
|
1900
|
-
for (; o(a);) a -=
|
|
1901
|
-
return
|
|
1925
|
+
for (; o(a);) a -= Qn;
|
|
1926
|
+
return tr(a);
|
|
1902
1927
|
}
|
|
1903
|
-
function
|
|
1904
|
-
let n =
|
|
1905
|
-
symbol: `VN30F${
|
|
1928
|
+
function ar(e, t) {
|
|
1929
|
+
let n = tr(e + rr), r = (e, n) => ({
|
|
1930
|
+
symbol: `VN30F${$(e % 100)}${$(n)}`,
|
|
1906
1931
|
year: e,
|
|
1907
1932
|
month: n,
|
|
1908
|
-
lastTradingDay:
|
|
1909
|
-
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e +
|
|
1933
|
+
lastTradingDay: ir(e, n, t)
|
|
1934
|
+
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + rr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
|
|
1910
1935
|
n > o.lastTradingDay && (o = i(o));
|
|
1911
1936
|
let s = [o, i(o)], c = i(s[1]);
|
|
1912
1937
|
for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
|
|
@@ -1914,7 +1939,7 @@ function Kn(e, t) {
|
|
|
1914
1939
|
}
|
|
1915
1940
|
//#endregion
|
|
1916
1941
|
//#region src/icons/iconSet.ts
|
|
1917
|
-
var
|
|
1942
|
+
var or = {
|
|
1918
1943
|
cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
|
|
1919
1944
|
trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
|
|
1920
1945
|
trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
|
|
@@ -2021,7 +2046,7 @@ var qn = {
|
|
|
2021
2046
|
]
|
|
2022
2047
|
] },
|
|
2023
2048
|
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" }
|
|
2024
|
-
},
|
|
2049
|
+
}, sr = {
|
|
2025
2050
|
trendLine: {
|
|
2026
2051
|
d: "M5 18L19 6",
|
|
2027
2052
|
dots: [[5, 18], [19, 6]]
|
|
@@ -2374,7 +2399,7 @@ var qn = {
|
|
|
2374
2399
|
],
|
|
2375
2400
|
dash: "M12 3V21"
|
|
2376
2401
|
}
|
|
2377
|
-
},
|
|
2402
|
+
}, cr = {
|
|
2378
2403
|
candlestick: {
|
|
2379
2404
|
d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
|
|
2380
2405
|
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"]
|
|
@@ -2441,21 +2466,21 @@ var qn = {
|
|
|
2441
2466
|
"M16 4.5h3v6h-3z"
|
|
2442
2467
|
]
|
|
2443
2468
|
}
|
|
2444
|
-
},
|
|
2445
|
-
function
|
|
2446
|
-
let t =
|
|
2469
|
+
}, lr = 1.75, ur = .22, dr = /* @__PURE__ */ new WeakMap();
|
|
2470
|
+
function fr(e) {
|
|
2471
|
+
let t = dr.get(e);
|
|
2447
2472
|
if (t) return t;
|
|
2448
2473
|
let n = "";
|
|
2449
|
-
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${
|
|
2474
|
+
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${ur}" stroke="none"/>`);
|
|
2450
2475
|
for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
|
|
2451
2476
|
e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
|
|
2452
|
-
for (let [t, r, i =
|
|
2453
|
-
return
|
|
2477
|
+
for (let [t, r, i = lr] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
|
|
2478
|
+
return dr.set(e, n), n;
|
|
2454
2479
|
}
|
|
2455
|
-
function
|
|
2456
|
-
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">${
|
|
2480
|
+
function pr(e, t) {
|
|
2481
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${fr(e)}</svg>`;
|
|
2457
2482
|
}
|
|
2458
2483
|
//#endregion
|
|
2459
|
-
export { t as CHART_STYLE_KEYS,
|
|
2484
|
+
export { t as CHART_STYLE_KEYS, cr as CHART_TYPE_ICONS, qt as DARK_TERMINAL, Gt as DARK_THEME, yn as DEFAULT_BAR_SPACING, vn as DEFAULT_BAR_WIDTH, pn as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, Nt as DEFAULT_FONT_FAMILY, Cn as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, _n as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, sr as DRAWING_TOOL_ICONS, Tn as FIBONACCI, Ln as HNX_SESSIONS, In as HOSE_SESSIONS, lr as ICON_DOT_RADIUS, ur as ICON_SOFT_OPACITY, Kt as LIGHT_THEME, e as LayerType, Gn as MARKET_CRYPTO, Hn as MARKET_HNX, Bn as MARKET_HOSE, Vn as MARKET_HOSE_ETF, Kn as MARKET_NYSE, Un as MARKET_UPCOM, Wn as MARKET_VN30F, Sn as MIN_PANEL_HEIGHT, se as MS_TIME_THRESHOLD, wn as PHI, bn as PRICE_AXIS_WIDTH, et as PRICE_SOURCES, I as TC_PALETTE, Wt as TC_SERIES_COLORS, mn as TIMEFRAMES_CRYPTO, gn as TIMEFRAMES_FOREX, hn as TIMEFRAMES_STOCK, xn as TIME_AXIS_HEIGHT, or as UI_ICONS, Rn as UPCOM_SESSIONS, zn as VN30F_SESSIONS, q as VN_COLORS, Ft as VOLUME_ALPHA, Ie as alignToTimeframe, qe as autoPricePrecision, ce as barTimeUnit, Be as barsAreDaily, fn as chartStyleValue, ne as clamp, Yn as computePriceLimits, he as computePriceRange, oe as computeTickStep, qn as createVNTheme, $e as detectPrecision, St as drawingOption, U as en, fe as findBarIndex, me as fitPriceRange, Ye as formatFraction, K as formatNumber, O as formatPrice, Je as formatPriceScaleLabel, Fe as formatTimestamp, Pn as formatVND, Qe as formatVolume, Fn as formatVolumeLoc, Xe as fractionTick, er as getCurrentSession, An as getLocale, Nn as getLocaleStrings, _e as hexToRgba, pr as iconSvg, it as indicatorSource, ie as inverseLerp, Re as isDateOnly, tt as isPriceSource, Pe as isTimeFrame, x as isValidTimeZone, re as lerp, ve as lerpColor, sn as lineDash, mt as marketStatus, ge as mergeBar, m as niceNumber, ue as normalizeBar, le as normalizeBarTime, w as offsetAt, pe as padPriceRange, at as parseIndicatorSource, T as parseTimeframe, En as phiStep, lt as pickBaseTimeframe, Ze as priceFormatterFor, X as priceStepAt, Ke as priceTagText, dt as rankSymbols, nn as readChartStyleOverrides, Mt as readChartTypeOptions, on as readIndicatorPlotStyles, te as readNews, rn as readPaneStyle, l as readQuote, Mn as registerLocale, st as resampleBars, ln as resolveChartTheme, Ct as resolveDrawingOptions, B as resolveVolumeColors, Z as roundToPriceStep, ae as roundToStep, bt as sanitizeDrawingOptions, jt as sanitizeDrawingStyle, Xn as scaleMarketPrices, A as sessionMinute, kn as setLocale, de as sliceVisibleData, nt as sourcePrice, ft as stepDecimals, jn as t, Ne as tickBarCount, Le as timeParts, Ue as timeframeBucketStart, E as timeframeToMs, Ve as tzLabel, Dn as vi, ar as vn30fContracts, ir as vn30fLastTradingDay, L as volumeColor, Ee as wallToUtc, h as withAlpha, S as zoneOffsetMinutes, Oe as zonedDateFormatter };
|
|
2460
2485
|
|
|
2461
2486
|
//# sourceMappingURL=index.js.map
|