@tradecanvas/commons 1.79.1 → 1.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +385 -381
- package/dist/index.js.map +1 -1
- package/dist/utils/symbols.d.ts +6 -0
- package/dist/utils/symbols.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -249,26 +249,26 @@ function ce(e, t, n) {
|
|
|
249
249
|
function le(e, t) {
|
|
250
250
|
return Math.round(e / t) * t;
|
|
251
251
|
}
|
|
252
|
-
function
|
|
252
|
+
function p(e, t) {
|
|
253
253
|
let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
|
|
254
254
|
return i = t ? r < 1.5 ? 1 : r < 3 ? 2 : r < 7 ? 5 : 10 : r <= 1 ? 1 : r <= 2 ? 2 : r <= 5 ? 5 : 10, i * 10 ** n;
|
|
255
255
|
}
|
|
256
|
-
function
|
|
257
|
-
return
|
|
256
|
+
function ue(e, t, n) {
|
|
257
|
+
return p(p(t - e, !1) / (n - 1), !0);
|
|
258
258
|
}
|
|
259
259
|
//#endregion
|
|
260
260
|
//#region src/utils/data.ts
|
|
261
|
-
var
|
|
262
|
-
function
|
|
261
|
+
var de = 1e11;
|
|
262
|
+
function fe(e) {
|
|
263
263
|
let t = e.length > 0 ? e[e.length - 1].time : NaN;
|
|
264
264
|
return Number.isFinite(t) ? Math.abs(t) >= 1e11 ? 1 : 1e3 : 1;
|
|
265
265
|
}
|
|
266
|
-
function
|
|
266
|
+
function pe(e, t) {
|
|
267
267
|
return t === void 0 ? Math.abs(e) >= 1e11 ? e : e * 1e3 : e * t;
|
|
268
268
|
}
|
|
269
|
-
function
|
|
269
|
+
function me(e) {
|
|
270
270
|
return {
|
|
271
|
-
time:
|
|
271
|
+
time: pe(e.time ?? e.t ?? 0),
|
|
272
272
|
open: e.open ?? e.o ?? 0,
|
|
273
273
|
high: e.high ?? e.h ?? 0,
|
|
274
274
|
low: e.low ?? e.l ?? 0,
|
|
@@ -276,11 +276,11 @@ function he(e) {
|
|
|
276
276
|
volume: e.volume ?? e.v ?? 0
|
|
277
277
|
};
|
|
278
278
|
}
|
|
279
|
-
function
|
|
279
|
+
function he(e, t, n) {
|
|
280
280
|
let r = Math.max(0, t), i = Math.min(e.length, n + 1);
|
|
281
281
|
return e.slice(r, i);
|
|
282
282
|
}
|
|
283
|
-
function
|
|
283
|
+
function ge(e, t) {
|
|
284
284
|
let n = 0, r = e.length - 1;
|
|
285
285
|
for (; n <= r;) {
|
|
286
286
|
let i = n + r >>> 1;
|
|
@@ -290,7 +290,7 @@ function _e(e, t) {
|
|
|
290
290
|
}
|
|
291
291
|
return n;
|
|
292
292
|
}
|
|
293
|
-
function
|
|
293
|
+
function _e(e, t, n, r = !1) {
|
|
294
294
|
let i = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
|
|
295
295
|
if (Number.isFinite(i)) {
|
|
296
296
|
let r = i || Math.log(1 + 2 * n), a = Math.exp(r * n);
|
|
@@ -305,7 +305,7 @@ function ve(e, t, n, r = !1) {
|
|
|
305
305
|
max: t + a * n
|
|
306
306
|
};
|
|
307
307
|
}
|
|
308
|
-
function
|
|
308
|
+
function ve(e, t, n, r = !1) {
|
|
309
309
|
let i = Math.max(1 - n.top - n.bottom, 2 ** -52), a = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
|
|
310
310
|
if (Number.isFinite(a)) {
|
|
311
311
|
let r = (a || Math.log(1.01)) / i;
|
|
@@ -320,7 +320,7 @@ function ye(e, t, n, r = !1) {
|
|
|
320
320
|
max: t + o * n.top
|
|
321
321
|
};
|
|
322
322
|
}
|
|
323
|
-
function
|
|
323
|
+
function ye(e, t, n, r = .05, i = !1) {
|
|
324
324
|
if (e.length === 0) return {
|
|
325
325
|
min: 0,
|
|
326
326
|
max: 1
|
|
@@ -330,9 +330,9 @@ function be(e, t, n, r = .05, i = !1) {
|
|
|
330
330
|
return s === Infinity ? {
|
|
331
331
|
min: 0,
|
|
332
332
|
max: 1
|
|
333
|
-
} :
|
|
333
|
+
} : _e(s, c, r, i);
|
|
334
334
|
}
|
|
335
|
-
function
|
|
335
|
+
function be(e, t) {
|
|
336
336
|
return {
|
|
337
337
|
...e,
|
|
338
338
|
high: Math.max(e.high, t.price),
|
|
@@ -343,18 +343,18 @@ function xe(e, t) {
|
|
|
343
343
|
}
|
|
344
344
|
//#endregion
|
|
345
345
|
//#region src/utils/color.ts
|
|
346
|
-
function
|
|
346
|
+
function xe(e, t = 1) {
|
|
347
347
|
let n = e.slice(1);
|
|
348
348
|
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})`;
|
|
349
349
|
}
|
|
350
|
-
function
|
|
350
|
+
function m(e, t) {
|
|
351
351
|
let n = e.trim();
|
|
352
|
-
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return
|
|
352
|
+
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return xe(n, t);
|
|
353
353
|
let r = n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);
|
|
354
354
|
return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
|
|
355
355
|
}
|
|
356
|
-
var
|
|
357
|
-
function
|
|
356
|
+
var Se = 3;
|
|
357
|
+
function Ce(e) {
|
|
358
358
|
let t = e.trim(), n = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(t);
|
|
359
359
|
if (n) {
|
|
360
360
|
let e = n[1];
|
|
@@ -377,14 +377,14 @@ function we(e) {
|
|
|
377
377
|
a: Math.min(1, Math.max(0, i))
|
|
378
378
|
};
|
|
379
379
|
}
|
|
380
|
-
function
|
|
381
|
-
let r =
|
|
380
|
+
function we(e, t, n) {
|
|
381
|
+
let r = Ce(e), i = Ce(t);
|
|
382
382
|
if (!r || !i) return n < .5 ? e : t;
|
|
383
383
|
let a = r.a + (i.a - r.a) * n, o = (e, t) => a === 0 ? 0 : Math.round((e * r.a + (t * i.a - e * r.a) * n) / a), s = `${o(r.r, i.r)},${o(r.g, i.g)},${o(r.b, i.b)}`;
|
|
384
|
-
return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(
|
|
384
|
+
return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(Se))})`;
|
|
385
385
|
}
|
|
386
|
-
function
|
|
387
|
-
let t =
|
|
386
|
+
function Te(e) {
|
|
387
|
+
let t = Ce(e);
|
|
388
388
|
if (!t) return null;
|
|
389
389
|
let n = (e) => {
|
|
390
390
|
let t = e / 255;
|
|
@@ -392,26 +392,26 @@ function Ee(e) {
|
|
|
392
392
|
};
|
|
393
393
|
return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b);
|
|
394
394
|
}
|
|
395
|
-
function
|
|
396
|
-
let n =
|
|
395
|
+
function h(e, t) {
|
|
396
|
+
let n = Te(e), r = Te(t);
|
|
397
397
|
return n === null || r === null ? null : (Math.max(n, r) + .05) / (Math.min(n, r) + .05);
|
|
398
398
|
}
|
|
399
|
-
var
|
|
400
|
-
function
|
|
401
|
-
let i =
|
|
399
|
+
var Ee = 20;
|
|
400
|
+
function De(e, t, n, r) {
|
|
401
|
+
let i = h(e, t);
|
|
402
402
|
if (i === null || i >= r) return e;
|
|
403
|
-
for (let i = 1; i <=
|
|
404
|
-
let a =
|
|
405
|
-
if ((
|
|
403
|
+
for (let i = 1; i <= Ee; i++) {
|
|
404
|
+
let a = we(e, n, i / Ee);
|
|
405
|
+
if ((h(a, t) ?? 0) >= r) return a;
|
|
406
406
|
}
|
|
407
407
|
return n;
|
|
408
408
|
}
|
|
409
|
-
function
|
|
410
|
-
return (
|
|
409
|
+
function Oe(e, t, n) {
|
|
410
|
+
return (h(e, t) ?? 0) >= (h(e, n) ?? 0) ? t : n;
|
|
411
411
|
}
|
|
412
412
|
//#endregion
|
|
413
413
|
//#region src/utils/timezone.ts
|
|
414
|
-
var
|
|
414
|
+
var g = 6e4, ke = 1440 * g, _ = 15 * g, Ae = 8192, je = 7 * ke, Me = 4096, Ne = new Set([
|
|
415
415
|
"UTC",
|
|
416
416
|
"Etc/UTC",
|
|
417
417
|
"GMT",
|
|
@@ -448,20 +448,20 @@ function b(e, t) {
|
|
|
448
448
|
if (!Number.isFinite(t) || Ne.has(e)) return 0;
|
|
449
449
|
let n = Fe.get(e);
|
|
450
450
|
n || (n = /* @__PURE__ */ new Map(), Fe.set(e, n));
|
|
451
|
-
let r = Math.floor(t /
|
|
452
|
-
return i || (i = Le(e, r *
|
|
451
|
+
let r = Math.floor(t / je), i = n.get(r);
|
|
452
|
+
return i || (i = Le(e, r * je), n.size >= Me && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
|
|
453
453
|
}
|
|
454
454
|
function Le(e, t) {
|
|
455
|
-
let n =
|
|
455
|
+
let n = x(e, t), r = t + je - _, i = x(e, r);
|
|
456
456
|
if (i === n) return {
|
|
457
457
|
before: n,
|
|
458
458
|
change: Infinity,
|
|
459
459
|
after: i
|
|
460
460
|
};
|
|
461
461
|
let a = t;
|
|
462
|
-
for (; r - a >
|
|
463
|
-
let t = a + Math.floor((r - a) /
|
|
464
|
-
|
|
462
|
+
for (; r - a > _;) {
|
|
463
|
+
let t = a + Math.floor((r - a) / _ / 2) * _;
|
|
464
|
+
x(e, t) === n ? a = t : r = t;
|
|
465
465
|
}
|
|
466
466
|
return {
|
|
467
467
|
before: n,
|
|
@@ -469,10 +469,10 @@ function Le(e, t) {
|
|
|
469
469
|
after: i
|
|
470
470
|
};
|
|
471
471
|
}
|
|
472
|
-
function
|
|
473
|
-
let n = Math.floor(t /
|
|
472
|
+
function x(e, t) {
|
|
473
|
+
let n = Math.floor(t / _), r = `${e}|${n}`, i = v.get(r);
|
|
474
474
|
if (i !== void 0) return i;
|
|
475
|
-
let a = n *
|
|
475
|
+
let a = n * _, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
|
|
476
476
|
for (let t of Ie(e).formatToParts(new Date(a))) {
|
|
477
477
|
let e = Number(t.value);
|
|
478
478
|
switch (t.type) {
|
|
@@ -496,24 +496,24 @@ function Re(e, t) {
|
|
|
496
496
|
break;
|
|
497
497
|
}
|
|
498
498
|
}
|
|
499
|
-
let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) /
|
|
500
|
-
return v.size >=
|
|
499
|
+
let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / g);
|
|
500
|
+
return v.size >= Ae && v.clear(), v.set(r, ee), ee;
|
|
501
501
|
}
|
|
502
|
-
function
|
|
502
|
+
function S(e) {
|
|
503
503
|
return e === 0 || typeof e == "string" && Ne.has(e);
|
|
504
504
|
}
|
|
505
|
-
function
|
|
505
|
+
function C(e, t) {
|
|
506
506
|
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : b(e, t);
|
|
507
507
|
}
|
|
508
|
-
function
|
|
509
|
-
let n = e -
|
|
510
|
-
if (n +
|
|
511
|
-
let r = e -
|
|
512
|
-
return r +
|
|
513
|
-
}
|
|
514
|
-
var
|
|
515
|
-
function
|
|
516
|
-
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i =
|
|
508
|
+
function Re(e, t) {
|
|
509
|
+
let n = e - C(t, e - ke) * g;
|
|
510
|
+
if (n + C(t, n) * g === e) return n;
|
|
511
|
+
let r = e - C(t, e + ke) * g;
|
|
512
|
+
return r + C(t, r) * g === e ? r : n;
|
|
513
|
+
}
|
|
514
|
+
var ze = /* @__PURE__ */ new Map();
|
|
515
|
+
function Be(e, t, n) {
|
|
516
|
+
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = ze.get(r);
|
|
517
517
|
if (i) return i;
|
|
518
518
|
let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
|
|
519
519
|
try {
|
|
@@ -527,12 +527,12 @@ function Ve(e, t, n) {
|
|
|
527
527
|
timeZone: a
|
|
528
528
|
});
|
|
529
529
|
}
|
|
530
|
-
let s = typeof n == "number" ? n *
|
|
531
|
-
return i = (e) => o.format(new Date(e + s)),
|
|
530
|
+
let s = typeof n == "number" ? n * g : 0;
|
|
531
|
+
return i = (e) => o.format(new Date(e + s)), ze.set(r, i), i;
|
|
532
532
|
}
|
|
533
533
|
//#endregion
|
|
534
534
|
//#region src/utils/time.ts
|
|
535
|
-
var
|
|
535
|
+
var Ve = {
|
|
536
536
|
"1s": 1e3,
|
|
537
537
|
"5s": 5e3,
|
|
538
538
|
"15s": 15e3,
|
|
@@ -559,16 +559,16 @@ var He = {
|
|
|
559
559
|
"3M": 7776e6,
|
|
560
560
|
"6M": 15552e6,
|
|
561
561
|
"12M": 31536e6
|
|
562
|
-
},
|
|
562
|
+
}, w = {
|
|
563
563
|
s: 1e3,
|
|
564
564
|
m: 6e4,
|
|
565
565
|
h: 36e5,
|
|
566
566
|
d: 864e5,
|
|
567
567
|
w: 6048e5,
|
|
568
568
|
M: 2592e6
|
|
569
|
-
},
|
|
570
|
-
function
|
|
571
|
-
let t =
|
|
569
|
+
}, He = /^([1-9]\d*)([smhdwM])$/;
|
|
570
|
+
function T(e) {
|
|
571
|
+
let t = He.exec(e);
|
|
572
572
|
if (!t) return null;
|
|
573
573
|
let n = Number(t[1]);
|
|
574
574
|
return Number.isSafeInteger(n) ? {
|
|
@@ -576,24 +576,24 @@ function w(e) {
|
|
|
576
576
|
unit: t[2]
|
|
577
577
|
} : null;
|
|
578
578
|
}
|
|
579
|
-
var
|
|
580
|
-
function
|
|
579
|
+
var Ue = 1e6;
|
|
580
|
+
function We(e) {
|
|
581
581
|
let t = /^([1-9]\d*)T$/.exec(e);
|
|
582
582
|
if (!t) return null;
|
|
583
583
|
let n = Number(t[1]);
|
|
584
|
-
return Number.isSafeInteger(n) && n <=
|
|
584
|
+
return Number.isSafeInteger(n) && n <= Ue ? n : null;
|
|
585
585
|
}
|
|
586
|
-
function
|
|
587
|
-
return
|
|
586
|
+
function Ge(e) {
|
|
587
|
+
return T(e) !== null;
|
|
588
588
|
}
|
|
589
|
-
function
|
|
590
|
-
let t =
|
|
589
|
+
function E(e) {
|
|
590
|
+
let t = Ve[e];
|
|
591
591
|
if (t !== void 0) return t;
|
|
592
|
-
let n =
|
|
593
|
-
return n ? n.count *
|
|
592
|
+
let n = T(e);
|
|
593
|
+
return n ? n.count * w[n.unit] : NaN;
|
|
594
594
|
}
|
|
595
|
-
function
|
|
596
|
-
let n = new Date(e), r =
|
|
595
|
+
function Ke(e, t) {
|
|
596
|
+
let n = new Date(e), r = E(t);
|
|
597
597
|
return r >= 864e5 ? n.toLocaleDateString(void 0, {
|
|
598
598
|
month: "short",
|
|
599
599
|
day: "numeric"
|
|
@@ -606,11 +606,11 @@ function qe(e, t) {
|
|
|
606
606
|
second: "2-digit"
|
|
607
607
|
});
|
|
608
608
|
}
|
|
609
|
-
function
|
|
610
|
-
let n =
|
|
609
|
+
function qe(e, t) {
|
|
610
|
+
let n = E(t);
|
|
611
611
|
return Math.floor(e / n) * n;
|
|
612
612
|
}
|
|
613
|
-
function
|
|
613
|
+
function Je(e, t) {
|
|
614
614
|
if (t === null) {
|
|
615
615
|
let t = new Date(e);
|
|
616
616
|
return {
|
|
@@ -621,7 +621,7 @@ function Ye(e, t) {
|
|
|
621
621
|
minutes: t.getMinutes()
|
|
622
622
|
};
|
|
623
623
|
}
|
|
624
|
-
let n = new Date(e +
|
|
624
|
+
let n = new Date(e + C(t, e) * 6e4);
|
|
625
625
|
return {
|
|
626
626
|
year: n.getUTCFullYear(),
|
|
627
627
|
month: n.getUTCMonth() + 1,
|
|
@@ -630,122 +630,122 @@ function Ye(e, t) {
|
|
|
630
630
|
minutes: n.getUTCMinutes()
|
|
631
631
|
};
|
|
632
632
|
}
|
|
633
|
-
function
|
|
633
|
+
function Ye(e) {
|
|
634
634
|
return e.hours === 0 && e.minutes === 0;
|
|
635
635
|
}
|
|
636
|
-
var
|
|
637
|
-
function
|
|
636
|
+
var Xe = 20 * 36e5;
|
|
637
|
+
function Ze(e) {
|
|
638
638
|
let t = Math.min(e.length, 64);
|
|
639
639
|
if (t < 2) return;
|
|
640
|
-
let n =
|
|
640
|
+
let n = fe(e), r = Infinity;
|
|
641
641
|
for (let i = 1; i < t; i++) {
|
|
642
642
|
let t = Math.abs(e[i].time - e[i - 1].time) * n;
|
|
643
643
|
t > 0 && t < r && (r = t);
|
|
644
644
|
}
|
|
645
|
-
return r === Infinity ? void 0 : r >=
|
|
645
|
+
return r === Infinity ? void 0 : r >= Xe;
|
|
646
646
|
}
|
|
647
|
-
function
|
|
648
|
-
let n =
|
|
647
|
+
function Qe(e, t = Date.now()) {
|
|
648
|
+
let n = C(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
|
|
649
649
|
return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
|
|
650
650
|
}
|
|
651
|
-
var
|
|
651
|
+
var $e = Date.UTC(1970, 0, 5), et = w.m, D = w.d, tt = 24, nt = {
|
|
652
652
|
count: 1,
|
|
653
653
|
unit: "m"
|
|
654
|
-
},
|
|
655
|
-
function
|
|
656
|
-
let t =
|
|
657
|
-
return t || (t =
|
|
654
|
+
}, rt = 256, O = /* @__PURE__ */ new Map();
|
|
655
|
+
function k(e) {
|
|
656
|
+
let t = O.get(e);
|
|
657
|
+
return t || (t = T(e) ?? nt, O.size >= rt && O.clear(), O.set(e, t)), t;
|
|
658
658
|
}
|
|
659
|
-
function
|
|
659
|
+
function it({ unit: e }) {
|
|
660
660
|
return e === "d" || e === "w" || e === "M";
|
|
661
661
|
}
|
|
662
|
-
function
|
|
663
|
-
return e.unit === "h" ? e.count > 1 &&
|
|
662
|
+
function at(e) {
|
|
663
|
+
return e.unit === "h" ? e.count > 1 && tt % e.count === 0 : it(e);
|
|
664
664
|
}
|
|
665
|
-
function
|
|
666
|
-
return
|
|
665
|
+
function ot(e) {
|
|
666
|
+
return at(k(e));
|
|
667
667
|
}
|
|
668
|
-
function
|
|
669
|
-
return
|
|
668
|
+
function st(e) {
|
|
669
|
+
return it(k(e));
|
|
670
670
|
}
|
|
671
|
-
function
|
|
672
|
-
return e !== void 0 && !
|
|
671
|
+
function ct(e) {
|
|
672
|
+
return e !== void 0 && !S(e);
|
|
673
673
|
}
|
|
674
|
-
function
|
|
675
|
-
let r =
|
|
676
|
-
return !
|
|
674
|
+
function lt(e, t, n = 1) {
|
|
675
|
+
let r = k(t), i = typeof n == "number" ? n : n.weekStartsOn ?? 1, a = typeof n == "number" ? void 0 : n.timeZone;
|
|
676
|
+
return !ct(a) || !at(r) || typeof n == "object" && n.dates && e % D === 0 ? ut(e, r, i) : Re(ut(e + C(a, e) * et, r, i), a);
|
|
677
677
|
}
|
|
678
|
-
function
|
|
678
|
+
function ut(e, { count: t, unit: n }, r) {
|
|
679
679
|
if (n === "s" || n === "m" || n === "h" || n === "d") {
|
|
680
|
-
let r = t *
|
|
680
|
+
let r = t * w[n];
|
|
681
681
|
return Math.floor(e / r) * r;
|
|
682
682
|
}
|
|
683
683
|
let i = new Date(e);
|
|
684
684
|
if (n === "w") {
|
|
685
685
|
let e = (i.getUTCDay() - r + 7) % 7, n = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate() - e);
|
|
686
686
|
if (t <= 1) return n;
|
|
687
|
-
let a = Math.floor((n -
|
|
688
|
-
return
|
|
687
|
+
let a = Math.floor((n - $e) / (7 * D));
|
|
688
|
+
return $e + Math.floor(a / t) * t * 7 * D;
|
|
689
689
|
}
|
|
690
690
|
let a = i.getUTCFullYear() * 12 + i.getUTCMonth(), o = Math.floor(a / t) * t;
|
|
691
691
|
return Date.UTC(Math.floor(o / 12), o % 12, 1);
|
|
692
692
|
}
|
|
693
|
-
function
|
|
694
|
-
return e %
|
|
693
|
+
function dt(e, t, n) {
|
|
694
|
+
return e % D === 0 ? 0 : n && lt(e, "1d", { timeZone: n }) === e ? n : t;
|
|
695
695
|
}
|
|
696
|
-
function
|
|
697
|
-
return
|
|
696
|
+
function ft(e, t, n) {
|
|
697
|
+
return Je(e, dt(e, t, n));
|
|
698
698
|
}
|
|
699
699
|
//#endregion
|
|
700
700
|
//#region src/utils/precision.ts
|
|
701
|
-
var
|
|
702
|
-
function
|
|
703
|
-
let n = `${e}|${t}`, r =
|
|
704
|
-
return r || (
|
|
701
|
+
var pt = 64, A = /* @__PURE__ */ new Map();
|
|
702
|
+
function mt(e, t) {
|
|
703
|
+
let n = `${e}|${t}`, r = A.get(n);
|
|
704
|
+
return r || (A.size >= pt && A.clear(), r = new Intl.NumberFormat(e, {
|
|
705
705
|
minimumFractionDigits: t,
|
|
706
706
|
maximumFractionDigits: t
|
|
707
|
-
}),
|
|
707
|
+
}), A.set(n, r)), r;
|
|
708
708
|
}
|
|
709
|
-
function
|
|
710
|
-
return t.formatPrice ? t.formatPrice(e) :
|
|
709
|
+
function ht(e, t, n) {
|
|
710
|
+
return t.formatPrice ? t.formatPrice(e) : j(e, n ?? t.pricePrecision ?? gt(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
|
|
711
711
|
}
|
|
712
|
-
function
|
|
713
|
-
return
|
|
712
|
+
function j(e, t = 2, n = "en-US") {
|
|
713
|
+
return mt(n, t).format(e);
|
|
714
714
|
}
|
|
715
|
-
function
|
|
715
|
+
function gt(e, t) {
|
|
716
716
|
if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
|
|
717
|
-
let n =
|
|
717
|
+
let n = ue(e, t, 8);
|
|
718
718
|
return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
|
|
719
719
|
}
|
|
720
|
-
var
|
|
721
|
-
function
|
|
720
|
+
var _t = 2;
|
|
721
|
+
function vt(e, t, n, r = 2, i = "en-US") {
|
|
722
722
|
if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
|
|
723
723
|
if (t === "percentage") {
|
|
724
|
-
let t = (e / n - 1) * 100, r =
|
|
725
|
-
return `${r ===
|
|
724
|
+
let t = (e / n - 1) * 100, r = j(Math.abs(t), _t, i);
|
|
725
|
+
return `${r === j(0, _t, i) ? "" : t > 0 ? "+" : "-"}${r}%`;
|
|
726
726
|
}
|
|
727
|
-
return
|
|
727
|
+
return j(e / n * 100, 2, i);
|
|
728
728
|
}
|
|
729
|
-
return
|
|
729
|
+
return j(e, r, i);
|
|
730
730
|
}
|
|
731
|
-
function
|
|
731
|
+
function yt(e, t, n = 1) {
|
|
732
732
|
let r = Number.isInteger(n) && n > 1 ? n : 1;
|
|
733
733
|
if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
|
|
734
734
|
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)) : "";
|
|
735
735
|
return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
|
|
736
736
|
}
|
|
737
|
-
function
|
|
737
|
+
function bt(e) {
|
|
738
738
|
if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
|
|
739
739
|
let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
|
|
740
740
|
return 1 / (e.denominator * t);
|
|
741
741
|
}
|
|
742
|
-
function
|
|
743
|
-
return e ? typeof e == "function" ? e :
|
|
742
|
+
function xt(e) {
|
|
743
|
+
return e ? typeof e == "function" ? e : bt(e) === null ? null : (t) => yt(t, e.denominator, e.subDenominator) : null;
|
|
744
744
|
}
|
|
745
|
-
function
|
|
745
|
+
function St(e) {
|
|
746
746
|
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);
|
|
747
747
|
}
|
|
748
|
-
function
|
|
748
|
+
function Ct(e) {
|
|
749
749
|
let t = 0;
|
|
750
750
|
for (let n of e) {
|
|
751
751
|
let e = n.toString(), r = e.indexOf(".");
|
|
@@ -755,7 +755,7 @@ function wt(e) {
|
|
|
755
755
|
}
|
|
756
756
|
//#endregion
|
|
757
757
|
//#region src/utils/priceSource.ts
|
|
758
|
-
var
|
|
758
|
+
var wt = [
|
|
759
759
|
"close",
|
|
760
760
|
"open",
|
|
761
761
|
"high",
|
|
@@ -765,10 +765,10 @@ var Tt = [
|
|
|
765
765
|
"ohlc4",
|
|
766
766
|
"hlcc4"
|
|
767
767
|
];
|
|
768
|
-
function
|
|
769
|
-
return typeof e == "string" &&
|
|
768
|
+
function Tt(e) {
|
|
769
|
+
return typeof e == "string" && wt.includes(e);
|
|
770
770
|
}
|
|
771
|
-
function
|
|
771
|
+
function Et(e, t) {
|
|
772
772
|
switch (t) {
|
|
773
773
|
case "open": return e.open;
|
|
774
774
|
case "high": return e.high;
|
|
@@ -780,13 +780,13 @@ function Dt(e, t) {
|
|
|
780
780
|
default: return e.close;
|
|
781
781
|
}
|
|
782
782
|
}
|
|
783
|
-
var
|
|
784
|
-
function
|
|
783
|
+
var Dt = /^ind:([^:]+):(.+)$/;
|
|
784
|
+
function Ot(e, t) {
|
|
785
785
|
return `ind:${e}:${t}`;
|
|
786
786
|
}
|
|
787
|
-
function
|
|
787
|
+
function kt(e) {
|
|
788
788
|
if (typeof e != "string") return null;
|
|
789
|
-
let t =
|
|
789
|
+
let t = Dt.exec(e);
|
|
790
790
|
return t ? {
|
|
791
791
|
instanceId: t[1],
|
|
792
792
|
key: t[2]
|
|
@@ -794,11 +794,11 @@ function At(e) {
|
|
|
794
794
|
}
|
|
795
795
|
//#endregion
|
|
796
796
|
//#region src/utils/resample.ts
|
|
797
|
-
var
|
|
798
|
-
function
|
|
799
|
-
let r =
|
|
797
|
+
var At = 864e5, jt = 6e4;
|
|
798
|
+
function Mt(e, t, n = 1) {
|
|
799
|
+
let r = Nt(e, t, n), i = [], a = null;
|
|
800
800
|
for (let n of e) {
|
|
801
|
-
let e =
|
|
801
|
+
let e = lt(n.time, t, r);
|
|
802
802
|
a === null || e !== a.time ? (a = {
|
|
803
803
|
time: e,
|
|
804
804
|
open: n.open,
|
|
@@ -810,36 +810,40 @@ function Nt(e, t, n = 1) {
|
|
|
810
810
|
}
|
|
811
811
|
return i;
|
|
812
812
|
}
|
|
813
|
-
function
|
|
814
|
-
return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 ||
|
|
813
|
+
function Nt(e, t, n) {
|
|
814
|
+
return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || S(n.timeZone) || !ot(t) ? n : {
|
|
815
815
|
...n,
|
|
816
|
-
dates:
|
|
816
|
+
dates: Ze(e) === !0
|
|
817
817
|
};
|
|
818
818
|
}
|
|
819
|
-
var
|
|
820
|
-
function
|
|
821
|
-
let n =
|
|
819
|
+
var Pt = (e) => e === "s" || e === "m" || e === "h" || e === "d";
|
|
820
|
+
function Ft(e, t) {
|
|
821
|
+
let n = T(e), r = T(t);
|
|
822
822
|
if (!n || !r) return !1;
|
|
823
|
-
let i =
|
|
824
|
-
return n.unit === "d" && n.count > 1 ? !1 :
|
|
823
|
+
let i = E(e);
|
|
824
|
+
return n.unit === "d" && n.count > 1 ? !1 : Pt(r.unit) ? Pt(n.unit) && E(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : Pt(n.unit) && At % i === 0;
|
|
825
825
|
}
|
|
826
|
-
function
|
|
827
|
-
let n =
|
|
828
|
-
if (!(n <
|
|
826
|
+
function It(e, t) {
|
|
827
|
+
let n = E(e);
|
|
828
|
+
if (!(n < At)) return !0;
|
|
829
829
|
let r = (/* @__PURE__ */ new Date()).getUTCFullYear();
|
|
830
|
-
return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) =>
|
|
830
|
+
return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => C(t, e) * jt % n === 0);
|
|
831
831
|
}
|
|
832
|
-
function
|
|
833
|
-
let { timeZone: r } = n, i = r !== void 0 && !
|
|
832
|
+
function Lt(e, t, n = {}) {
|
|
833
|
+
let { timeZone: r } = n, i = r !== void 0 && !S(r) && ot(e) ? r : void 0, a = null, o = 0;
|
|
834
834
|
for (let n of t) {
|
|
835
|
-
if (!
|
|
836
|
-
let t =
|
|
835
|
+
if (!Ft(n, e) || i !== void 0 && !It(n, i)) continue;
|
|
836
|
+
let t = E(n);
|
|
837
837
|
t > o && (a = n, o = t);
|
|
838
838
|
}
|
|
839
839
|
return a;
|
|
840
840
|
}
|
|
841
841
|
//#endregion
|
|
842
842
|
//#region src/utils/symbols.ts
|
|
843
|
+
function Rt(e) {
|
|
844
|
+
let t = e.lastIndexOf(":");
|
|
845
|
+
return t <= 0 || t === e.length - 1 ? e : e.slice(t + 1);
|
|
846
|
+
}
|
|
843
847
|
function zt(e, t) {
|
|
844
848
|
if (!e) return 0;
|
|
845
849
|
if (e === t) return 1e3;
|
|
@@ -880,7 +884,7 @@ function Ut(e) {
|
|
|
880
884
|
}
|
|
881
885
|
//#endregion
|
|
882
886
|
//#region src/utils/marketStatus.ts
|
|
883
|
-
var
|
|
887
|
+
var M = 864e5, N = 6e4, Wt = 8;
|
|
884
888
|
function Gt(e, t) {
|
|
885
889
|
let n = Ht(e), r = (e?.sessions ?? []).flatMap((e) => {
|
|
886
890
|
let t = Ut(e.start), n = Ut(e.end);
|
|
@@ -894,12 +898,12 @@ function Gt(e, t) {
|
|
|
894
898
|
state: "always",
|
|
895
899
|
next: null
|
|
896
900
|
};
|
|
897
|
-
let i = b(n, t) *
|
|
901
|
+
let i = b(n, t) * N, a = Math.floor((t + i) / M) * M, o = (e) => e - b(n, e - b(n, e - i) * N) * N, s = [];
|
|
898
902
|
for (let e = -1; e <= Wt; e++) {
|
|
899
|
-
let t = a + e *
|
|
903
|
+
let t = a + e * M, n = (Math.floor(t / M) + 4) % 7;
|
|
900
904
|
for (let e of r) {
|
|
901
905
|
if (e.days && !e.days.includes(n)) continue;
|
|
902
|
-
let r = t + e.start *
|
|
906
|
+
let r = t + e.start * N, i = (e.end > e.start ? t : t + M) + e.end * N;
|
|
903
907
|
s.push([o(r), o(i)]);
|
|
904
908
|
}
|
|
905
909
|
}
|
|
@@ -989,16 +993,16 @@ var tn = [
|
|
|
989
993
|
function dn(e, t, n) {
|
|
990
994
|
return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
|
|
991
995
|
}
|
|
992
|
-
function
|
|
996
|
+
function P(e) {
|
|
993
997
|
return typeof e == "string" && e.length > 0 && e.length <= nn ? e : void 0;
|
|
994
998
|
}
|
|
995
999
|
function fn(e) {
|
|
996
1000
|
if (typeof e != "object" || !e) return {};
|
|
997
|
-
let t = e, n = {}, r =
|
|
1001
|
+
let t = e, n = {}, r = P(t.color);
|
|
998
1002
|
r !== void 0 && (n.color = r);
|
|
999
1003
|
let i = dn(t.lineWidth, .5, an);
|
|
1000
1004
|
i !== void 0 && (n.lineWidth = i), tn.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
|
|
1001
|
-
let a =
|
|
1005
|
+
let a = P(t.fillColor);
|
|
1002
1006
|
a !== void 0 && (n.fillColor = a);
|
|
1003
1007
|
let o = dn(t.fillOpacity, 0, 1);
|
|
1004
1008
|
o !== void 0 && (n.fillOpacity = o);
|
|
@@ -1011,56 +1015,56 @@ function fn(e) {
|
|
|
1011
1015
|
"textBorder"
|
|
1012
1016
|
]) typeof t[e] == "boolean" && (n[e] = t[e]);
|
|
1013
1017
|
ln.includes(t.textAlign) && (n.textAlign = t.textAlign), un.includes(t.textVAlign) && (n.textVAlign = t.textVAlign);
|
|
1014
|
-
let c =
|
|
1018
|
+
let c = P(t.textColor);
|
|
1015
1019
|
c !== void 0 && (n.textColor = c);
|
|
1016
|
-
let l =
|
|
1020
|
+
let l = P(t.borderColor);
|
|
1017
1021
|
return l !== void 0 && (n.borderColor = l), typeof t.textWrap == "number" && Number.isFinite(t.textWrap) && t.textWrap >= 0 && (n.textWrap = t.textWrap === 0 ? 0 : Math.min(sn, Math.max(cn, t.textWrap))), n;
|
|
1018
1022
|
}
|
|
1019
1023
|
//#endregion
|
|
1020
1024
|
//#region src/utils/chartTypeOptions.ts
|
|
1021
|
-
var
|
|
1022
|
-
function
|
|
1023
|
-
if (!
|
|
1025
|
+
var F = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, I = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, L = (e) => typeof e == "object" && !!e && !Array.isArray(e);
|
|
1026
|
+
function pn(e) {
|
|
1027
|
+
if (!L(e)) return {};
|
|
1024
1028
|
let t = {};
|
|
1025
|
-
if (
|
|
1029
|
+
if (L(e.renko)) {
|
|
1026
1030
|
let { boxSize: n, atrPeriod: r } = e.renko;
|
|
1027
1031
|
t.renko = {
|
|
1028
|
-
...
|
|
1029
|
-
...
|
|
1032
|
+
...F(n) || n === "atr" ? { boxSize: n } : {},
|
|
1033
|
+
...I(r, 1, 500) ? { atrPeriod: r } : {}
|
|
1030
1034
|
};
|
|
1031
1035
|
}
|
|
1032
|
-
if (
|
|
1036
|
+
if (L(e.lineBreak)) {
|
|
1033
1037
|
let { lines: n } = e.lineBreak;
|
|
1034
|
-
t.lineBreak =
|
|
1038
|
+
t.lineBreak = I(n, 1, 10) ? { lines: n } : {};
|
|
1035
1039
|
}
|
|
1036
|
-
if (
|
|
1040
|
+
if (L(e.kagi)) {
|
|
1037
1041
|
let { reversal: n, reversalType: r } = e.kagi;
|
|
1038
1042
|
t.kagi = {
|
|
1039
|
-
...
|
|
1043
|
+
...F(n) ? { reversal: n } : {},
|
|
1040
1044
|
...r === "percent" || r === "price" ? { reversalType: r } : {}
|
|
1041
1045
|
};
|
|
1042
1046
|
}
|
|
1043
|
-
if (
|
|
1047
|
+
if (L(e.pointAndFigure)) {
|
|
1044
1048
|
let { boxSize: n, reversal: r } = e.pointAndFigure;
|
|
1045
1049
|
t.pointAndFigure = {
|
|
1046
|
-
...
|
|
1047
|
-
...
|
|
1050
|
+
...F(n) || n === "auto" ? { boxSize: n } : {},
|
|
1051
|
+
...I(r, 1, 10) ? { reversal: r } : {}
|
|
1048
1052
|
};
|
|
1049
1053
|
}
|
|
1050
|
-
if (
|
|
1054
|
+
if (L(e.rangeBars)) {
|
|
1051
1055
|
let { range: n } = e.rangeBars;
|
|
1052
|
-
t.rangeBars =
|
|
1056
|
+
t.rangeBars = F(n) || n === "auto" ? { range: n } : {};
|
|
1053
1057
|
}
|
|
1054
1058
|
return t;
|
|
1055
1059
|
}
|
|
1056
1060
|
//#endregion
|
|
1057
1061
|
//#region src/constants/themes.ts
|
|
1058
|
-
var
|
|
1059
|
-
family:
|
|
1062
|
+
var mn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", hn = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif", gn = {
|
|
1063
|
+
family: mn,
|
|
1060
1064
|
sizeSmall: 11,
|
|
1061
1065
|
sizeMedium: 13,
|
|
1062
1066
|
sizeLarge: 15
|
|
1063
|
-
},
|
|
1067
|
+
}, R = {
|
|
1064
1068
|
amber: "#f2a93b",
|
|
1065
1069
|
up: "#1c9e6d",
|
|
1066
1070
|
down: "#e8505b",
|
|
@@ -1071,67 +1075,67 @@ var hn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
|
|
|
1071
1075
|
rose: "#e25592",
|
|
1072
1076
|
neutral: "#7d8696",
|
|
1073
1077
|
ink: "#131416"
|
|
1074
|
-
},
|
|
1075
|
-
function
|
|
1076
|
-
return
|
|
1078
|
+
}, _n = .22;
|
|
1079
|
+
function z(e) {
|
|
1080
|
+
return m(e, _n);
|
|
1077
1081
|
}
|
|
1078
|
-
var
|
|
1082
|
+
var vn = "#fbfaf6", B = "#1b1d21", yn = "#131416", V = "#e6e3dc", bn = "#1f7a5c", xn = "#b8423f", Sn = "#4fae8a", Cn = "#e2706b", wn = "#6a6966", Tn = "#8d8a84", En = {
|
|
1079
1083
|
ceiling: "#FF00FF",
|
|
1080
1084
|
floor: "#00FFFF",
|
|
1081
1085
|
reference: "#FFD700"
|
|
1082
|
-
},
|
|
1086
|
+
}, Dn = {
|
|
1083
1087
|
ceiling: "#a21caf",
|
|
1084
1088
|
floor: "#0e7490",
|
|
1085
1089
|
reference: "#8a6a00"
|
|
1086
|
-
},
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
],
|
|
1090
|
+
}, On = [
|
|
1091
|
+
R.blue,
|
|
1092
|
+
R.ochre,
|
|
1093
|
+
R.violet,
|
|
1094
|
+
R.cyan,
|
|
1095
|
+
R.rose
|
|
1096
|
+
], kn = {
|
|
1093
1097
|
name: "dark",
|
|
1094
|
-
background:
|
|
1095
|
-
text:
|
|
1098
|
+
background: yn,
|
|
1099
|
+
text: V,
|
|
1096
1100
|
textSecondary: "#8d8b86",
|
|
1097
1101
|
grid: "#1d1e21",
|
|
1098
|
-
crosshair:
|
|
1099
|
-
candleUp:
|
|
1100
|
-
candleDown:
|
|
1101
|
-
candleUpWick:
|
|
1102
|
-
candleDownWick:
|
|
1103
|
-
lineColor:
|
|
1104
|
-
areaTopColor:
|
|
1105
|
-
areaBottomColor:
|
|
1106
|
-
volumeUp:
|
|
1107
|
-
volumeDown:
|
|
1102
|
+
crosshair: wn,
|
|
1103
|
+
candleUp: Sn,
|
|
1104
|
+
candleDown: Cn,
|
|
1105
|
+
candleUpWick: Sn,
|
|
1106
|
+
candleDownWick: Cn,
|
|
1107
|
+
lineColor: V,
|
|
1108
|
+
areaTopColor: m(V, .14),
|
|
1109
|
+
areaBottomColor: m(V, 0),
|
|
1110
|
+
volumeUp: m(V, .14),
|
|
1111
|
+
volumeDown: m(V, .08),
|
|
1108
1112
|
axisLine: "#2a2b2f",
|
|
1109
1113
|
axisLabel: "#a9a6a0",
|
|
1110
1114
|
axisLabelBackground: "#232427",
|
|
1111
|
-
font:
|
|
1112
|
-
priceLimits:
|
|
1113
|
-
},
|
|
1115
|
+
font: gn,
|
|
1116
|
+
priceLimits: En
|
|
1117
|
+
}, An = {
|
|
1114
1118
|
name: "light",
|
|
1115
|
-
background:
|
|
1116
|
-
text:
|
|
1119
|
+
background: vn,
|
|
1120
|
+
text: B,
|
|
1117
1121
|
textSecondary: "#6b6f76",
|
|
1118
1122
|
grid: "#ece8df",
|
|
1119
|
-
crosshair:
|
|
1120
|
-
candleUp:
|
|
1121
|
-
candleDown:
|
|
1122
|
-
candleUpWick:
|
|
1123
|
-
candleDownWick:
|
|
1124
|
-
lineColor:
|
|
1125
|
-
areaTopColor:
|
|
1126
|
-
areaBottomColor:
|
|
1127
|
-
volumeUp:
|
|
1128
|
-
volumeDown:
|
|
1123
|
+
crosshair: Tn,
|
|
1124
|
+
candleUp: bn,
|
|
1125
|
+
candleDown: xn,
|
|
1126
|
+
candleUpWick: bn,
|
|
1127
|
+
candleDownWick: xn,
|
|
1128
|
+
lineColor: B,
|
|
1129
|
+
areaTopColor: m(B, .12),
|
|
1130
|
+
areaBottomColor: m(B, 0),
|
|
1131
|
+
volumeUp: m(B, .13),
|
|
1132
|
+
volumeDown: m(B, .08),
|
|
1129
1133
|
axisLine: "#cfcac0",
|
|
1130
1134
|
axisLabel: "#4a4e57",
|
|
1131
1135
|
axisLabelBackground: "#eeebe3",
|
|
1132
|
-
font:
|
|
1133
|
-
priceLimits:
|
|
1134
|
-
},
|
|
1136
|
+
font: gn,
|
|
1137
|
+
priceLimits: Dn
|
|
1138
|
+
}, jn = {
|
|
1135
1139
|
name: "terminal",
|
|
1136
1140
|
background: "#0E0E0E",
|
|
1137
1141
|
text: "#C0C0C0",
|
|
@@ -1145,8 +1149,8 @@ var yn = "#fbfaf6", R = "#1b1d21", bn = "#131416", z = "#e6e3dc", xn = "#1f7a5c"
|
|
|
1145
1149
|
lineColor: "#3D8BFD",
|
|
1146
1150
|
areaTopColor: "rgba(61, 139, 253, 0.3)",
|
|
1147
1151
|
areaBottomColor: "rgba(61, 139, 253, 0.0)",
|
|
1148
|
-
volumeUp:
|
|
1149
|
-
volumeDown:
|
|
1152
|
+
volumeUp: z("#00FF87"),
|
|
1153
|
+
volumeDown: z("#FF3B4D"),
|
|
1150
1154
|
axisLine: "#1A1A1A",
|
|
1151
1155
|
axisLabel: "#8A8A8A",
|
|
1152
1156
|
axisLabelBackground: "#1A1A1A",
|
|
@@ -1156,11 +1160,11 @@ var yn = "#fbfaf6", R = "#1b1d21", bn = "#131416", z = "#e6e3dc", xn = "#1f7a5c"
|
|
|
1156
1160
|
sizeMedium: 12,
|
|
1157
1161
|
sizeLarge: 14
|
|
1158
1162
|
}
|
|
1159
|
-
}, Mn = new Set([
|
|
1160
|
-
function
|
|
1163
|
+
}, Mn = new Set([jn.volumeUp, jn.volumeDown]);
|
|
1164
|
+
function Nn(e) {
|
|
1161
1165
|
let t = (e, t) => {
|
|
1162
1166
|
if (!Mn.has(e)) return e;
|
|
1163
|
-
let n =
|
|
1167
|
+
let n = z(t);
|
|
1164
1168
|
return n === t ? e : n;
|
|
1165
1169
|
};
|
|
1166
1170
|
return {
|
|
@@ -1170,67 +1174,67 @@ function V(e) {
|
|
|
1170
1174
|
}
|
|
1171
1175
|
//#endregion
|
|
1172
1176
|
//#region src/utils/chartStyle.ts
|
|
1173
|
-
var
|
|
1177
|
+
var Pn = [
|
|
1174
1178
|
"solid",
|
|
1175
1179
|
"dashed",
|
|
1176
1180
|
"dotted"
|
|
1177
|
-
],
|
|
1181
|
+
], Fn = 20, In = 64, Ln = 2, Rn = [
|
|
1178
1182
|
/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
|
|
1179
1183
|
/^[a-z]{3,30}$/i,
|
|
1180
1184
|
/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
|
|
1181
1185
|
];
|
|
1182
|
-
function
|
|
1183
|
-
return typeof e == "string" && e.length <=
|
|
1186
|
+
function zn(e) {
|
|
1187
|
+
return typeof e == "string" && e.length <= In && Rn.some((t) => t.test(e.trim()));
|
|
1184
1188
|
}
|
|
1185
|
-
function
|
|
1189
|
+
function Bn(e, t) {
|
|
1186
1190
|
switch (e) {
|
|
1187
|
-
case "color": return
|
|
1188
|
-
case "lineStyle": return
|
|
1189
|
-
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <=
|
|
1191
|
+
case "color": return zn(t);
|
|
1192
|
+
case "lineStyle": return Pn.includes(t);
|
|
1193
|
+
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= Fn;
|
|
1190
1194
|
case "boolean": return typeof t == "boolean";
|
|
1191
1195
|
}
|
|
1192
1196
|
}
|
|
1193
|
-
function
|
|
1197
|
+
function Vn(e) {
|
|
1194
1198
|
return Object.prototype.hasOwnProperty.call(t, e);
|
|
1195
1199
|
}
|
|
1196
|
-
function
|
|
1200
|
+
function Hn(e) {
|
|
1197
1201
|
let n = {}, r = [];
|
|
1198
1202
|
if (typeof e != "object" || !e || Array.isArray(e)) return {
|
|
1199
1203
|
overrides: {},
|
|
1200
1204
|
rejected: r
|
|
1201
1205
|
};
|
|
1202
|
-
for (let [i, a] of Object.entries(e))
|
|
1206
|
+
for (let [i, a] of Object.entries(e)) Vn(i) ? a === null ? n[i] = null : Bn(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
|
|
1203
1207
|
return {
|
|
1204
1208
|
overrides: n,
|
|
1205
1209
|
rejected: r
|
|
1206
1210
|
};
|
|
1207
1211
|
}
|
|
1208
|
-
function
|
|
1212
|
+
function Un(e) {
|
|
1209
1213
|
if (typeof e != "object" || !e || Array.isArray(e)) return null;
|
|
1210
1214
|
let { background: t, separator: n } = e, r = {
|
|
1211
|
-
...
|
|
1212
|
-
...
|
|
1215
|
+
...zn(t) ? { background: t } : {},
|
|
1216
|
+
...zn(n) ? { separator: n } : {}
|
|
1213
1217
|
};
|
|
1214
1218
|
return Object.keys(r).length > 0 ? r : null;
|
|
1215
1219
|
}
|
|
1216
|
-
var
|
|
1217
|
-
function
|
|
1220
|
+
var Wn = /^[A-Za-z0-9_]{1,32}$/;
|
|
1221
|
+
function Gn(e) {
|
|
1218
1222
|
if (typeof e != "object" || !e || Array.isArray(e)) return;
|
|
1219
1223
|
let t = {};
|
|
1220
1224
|
for (let [n, r] of Object.entries(e)) {
|
|
1221
|
-
if (!
|
|
1225
|
+
if (!Wn.test(n) || typeof r != "object" || !r) continue;
|
|
1222
1226
|
let { lineStyle: e, visible: i } = r, a = {
|
|
1223
|
-
...
|
|
1227
|
+
...Pn.includes(e) ? { lineStyle: e } : {},
|
|
1224
1228
|
...typeof i == "boolean" ? { visible: i } : {}
|
|
1225
1229
|
};
|
|
1226
1230
|
Object.keys(a).length > 0 && (t[n] = a);
|
|
1227
1231
|
}
|
|
1228
1232
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
1229
1233
|
}
|
|
1230
|
-
function
|
|
1234
|
+
function Kn(e, t, n = 1) {
|
|
1231
1235
|
return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
|
|
1232
1236
|
}
|
|
1233
|
-
function
|
|
1237
|
+
function qn(e, t, n) {
|
|
1234
1238
|
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;
|
|
1235
1239
|
return {
|
|
1236
1240
|
up: o,
|
|
@@ -1238,7 +1242,7 @@ function Kn(e, t, n) {
|
|
|
1238
1242
|
wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
|
|
1239
1243
|
wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
|
|
1240
1244
|
line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
|
|
1241
|
-
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ??
|
|
1245
|
+
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? Ln,
|
|
1242
1246
|
top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
|
|
1243
1247
|
bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
|
|
1244
1248
|
};
|
|
@@ -1251,8 +1255,8 @@ function H(e, t, n) {
|
|
|
1251
1255
|
width: e(`${t}.width`) ?? n.width
|
|
1252
1256
|
};
|
|
1253
1257
|
}
|
|
1254
|
-
function
|
|
1255
|
-
let { style: r, ...i } = e, a = n, o = (e) => a[e], s =
|
|
1258
|
+
function Jn(e, t, n) {
|
|
1259
|
+
let { style: r, ...i } = e, a = n, o = (e) => a[e], s = qn(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
|
|
1256
1260
|
panes: {
|
|
1257
1261
|
background: l("panes.background", c),
|
|
1258
1262
|
separator: l("panes.separatorColor", i.axisLine),
|
|
@@ -1351,7 +1355,7 @@ function qn(e, t, n) {
|
|
|
1351
1355
|
style: d
|
|
1352
1356
|
};
|
|
1353
1357
|
}
|
|
1354
|
-
var
|
|
1358
|
+
var Yn = {
|
|
1355
1359
|
"background.color": (e) => e.background,
|
|
1356
1360
|
"panes.background": (e, t) => t.panes.background,
|
|
1357
1361
|
"panes.separatorColor": (e, t) => t.panes.separator,
|
|
@@ -1370,8 +1374,8 @@ var Jn = {
|
|
|
1370
1374
|
"lastPrice.downColor": (e, t) => t.lastPrice.down,
|
|
1371
1375
|
"lastPrice.style": (e, t) => t.lastPrice.style,
|
|
1372
1376
|
"lastPrice.width": (e, t) => t.lastPrice.width,
|
|
1373
|
-
"volume.upColor": (e) =>
|
|
1374
|
-
"volume.downColor": (e) =>
|
|
1377
|
+
"volume.upColor": (e) => Nn(e).up,
|
|
1378
|
+
"volume.downColor": (e) => Nn(e).down,
|
|
1375
1379
|
"sessionBreaks.color": (e, t) => t.sessionBreaks.color,
|
|
1376
1380
|
"sessionBreaks.style": (e, t) => t.sessionBreaks.style,
|
|
1377
1381
|
"sessionBreaks.width": (e, t) => t.sessionBreaks.width,
|
|
@@ -1388,16 +1392,16 @@ var Jn = {
|
|
|
1388
1392
|
"tradeZones.lossColor": (e, t) => t.tradeZones.loss,
|
|
1389
1393
|
"tradeZones.activeColor": (e, t) => t.tradeZones.active,
|
|
1390
1394
|
"drawings.handleColor": (e, t) => t.drawings.handle
|
|
1391
|
-
},
|
|
1395
|
+
}, Xn = {
|
|
1392
1396
|
visible: "visible",
|
|
1393
1397
|
color: "color",
|
|
1394
1398
|
style: "style",
|
|
1395
1399
|
width: "width"
|
|
1396
1400
|
};
|
|
1397
|
-
function
|
|
1401
|
+
function Zn(e, t, n, r = "candlestick") {
|
|
1398
1402
|
let i = n.split(".");
|
|
1399
1403
|
if (i[0] === "series") {
|
|
1400
|
-
let n =
|
|
1404
|
+
let n = qn(e, (e) => t[e], i[1]);
|
|
1401
1405
|
switch (i[2]) {
|
|
1402
1406
|
case "upColor": return n.up;
|
|
1403
1407
|
case "downColor": return n.down;
|
|
@@ -1410,12 +1414,12 @@ function Xn(e, t, n, r = "candlestick") {
|
|
|
1410
1414
|
case "bottomColor": return n.bottom;
|
|
1411
1415
|
}
|
|
1412
1416
|
}
|
|
1413
|
-
let a =
|
|
1414
|
-
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][
|
|
1417
|
+
let a = Jn(e, r, t), o = a.style;
|
|
1418
|
+
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][Xn[i[2]]] : Yn[n]?.(a, o) ?? null;
|
|
1415
1419
|
}
|
|
1416
1420
|
//#endregion
|
|
1417
1421
|
//#region src/constants/defaults.ts
|
|
1418
|
-
var
|
|
1422
|
+
var Qn = {
|
|
1419
1423
|
autoScale: !0,
|
|
1420
1424
|
rightMargin: 5,
|
|
1421
1425
|
minBarSpacing: 2,
|
|
@@ -1426,7 +1430,7 @@ var Zn = {
|
|
|
1426
1430
|
vLineStyle: "solid"
|
|
1427
1431
|
},
|
|
1428
1432
|
crosshair: { mode: "magnet" }
|
|
1429
|
-
},
|
|
1433
|
+
}, $n = [
|
|
1430
1434
|
"1s",
|
|
1431
1435
|
"1m",
|
|
1432
1436
|
"3m",
|
|
@@ -1443,7 +1447,7 @@ var Zn = {
|
|
|
1443
1447
|
"3d",
|
|
1444
1448
|
"1w",
|
|
1445
1449
|
"1M"
|
|
1446
|
-
],
|
|
1450
|
+
], er = [
|
|
1447
1451
|
"1m",
|
|
1448
1452
|
"5m",
|
|
1449
1453
|
"15m",
|
|
@@ -1457,7 +1461,7 @@ var Zn = {
|
|
|
1457
1461
|
"3M",
|
|
1458
1462
|
"6M",
|
|
1459
1463
|
"12M"
|
|
1460
|
-
],
|
|
1464
|
+
], tr = [
|
|
1461
1465
|
"1m",
|
|
1462
1466
|
"5m",
|
|
1463
1467
|
"15m",
|
|
@@ -1467,7 +1471,7 @@ var Zn = {
|
|
|
1467
1471
|
"1d",
|
|
1468
1472
|
"1w",
|
|
1469
1473
|
"1M"
|
|
1470
|
-
],
|
|
1474
|
+
], nr = [
|
|
1471
1475
|
"1m",
|
|
1472
1476
|
"5m",
|
|
1473
1477
|
"15m",
|
|
@@ -1475,7 +1479,7 @@ var Zn = {
|
|
|
1475
1479
|
"4h",
|
|
1476
1480
|
"1d",
|
|
1477
1481
|
"1w"
|
|
1478
|
-
],
|
|
1482
|
+
], rr = 8, ir = 2, ar = 70, or = 30, sr = 60, cr = 120, lr = (1 + Math.sqrt(5)) / 2, ur = [
|
|
1479
1483
|
1,
|
|
1480
1484
|
2,
|
|
1481
1485
|
3,
|
|
@@ -1487,8 +1491,8 @@ var Zn = {
|
|
|
1487
1491
|
55,
|
|
1488
1492
|
89
|
|
1489
1493
|
];
|
|
1490
|
-
function
|
|
1491
|
-
return Math.round(e *
|
|
1494
|
+
function dr(e, t, n = 1) {
|
|
1495
|
+
return Math.round(e * lr ** (t / n));
|
|
1492
1496
|
}
|
|
1493
1497
|
//#endregion
|
|
1494
1498
|
//#region src/i18n/en.ts
|
|
@@ -1595,7 +1599,7 @@ var U = {
|
|
|
1595
1599
|
error: "Error",
|
|
1596
1600
|
numberDecimalSeparator: ".",
|
|
1597
1601
|
numberGroupSeparator: ","
|
|
1598
|
-
},
|
|
1602
|
+
}, fr = {
|
|
1599
1603
|
candlestick: "Nến",
|
|
1600
1604
|
line: "Đường",
|
|
1601
1605
|
area: "Vùng",
|
|
@@ -1698,20 +1702,20 @@ var U = {
|
|
|
1698
1702
|
error: "Lỗi",
|
|
1699
1703
|
numberDecimalSeparator: ",",
|
|
1700
1704
|
numberGroupSeparator: "."
|
|
1701
|
-
}, W = new Map([["en", U], ["vi",
|
|
1702
|
-
function
|
|
1703
|
-
G = e,
|
|
1705
|
+
}, W = new Map([["en", U], ["vi", fr]]), G = "en", pr = U;
|
|
1706
|
+
function mr(e) {
|
|
1707
|
+
G = e, pr = W.get(e) ?? U;
|
|
1704
1708
|
}
|
|
1705
|
-
function
|
|
1709
|
+
function hr() {
|
|
1706
1710
|
return G;
|
|
1707
1711
|
}
|
|
1708
|
-
function
|
|
1709
|
-
return
|
|
1712
|
+
function gr(e) {
|
|
1713
|
+
return pr[e] ?? U[e] ?? e;
|
|
1710
1714
|
}
|
|
1711
|
-
function
|
|
1715
|
+
function _r(e, t) {
|
|
1712
1716
|
W.set(e, t);
|
|
1713
1717
|
}
|
|
1714
|
-
function
|
|
1718
|
+
function vr(e) {
|
|
1715
1719
|
return W.get(e ?? G) ?? U;
|
|
1716
1720
|
}
|
|
1717
1721
|
function K(e, t = 2, n) {
|
|
@@ -1719,32 +1723,32 @@ function K(e, t = 2, n) {
|
|
|
1719
1723
|
for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
|
|
1720
1724
|
return c && (u = "-" + u), s ? u + i + s : u;
|
|
1721
1725
|
}
|
|
1722
|
-
function
|
|
1726
|
+
function yr(e) {
|
|
1723
1727
|
return K(e, 0, "vi");
|
|
1724
1728
|
}
|
|
1725
|
-
var
|
|
1729
|
+
var br = [
|
|
1726
1730
|
[0xe8d4a51000, "조"],
|
|
1727
1731
|
[1e8, "억"],
|
|
1728
1732
|
[1e4, "만"]
|
|
1729
1733
|
];
|
|
1730
|
-
function
|
|
1734
|
+
function xr(e) {
|
|
1731
1735
|
return /^ko([-_]|$)/i.test(e);
|
|
1732
1736
|
}
|
|
1733
|
-
function
|
|
1737
|
+
function Sr(e, t, n) {
|
|
1734
1738
|
try {
|
|
1735
|
-
return
|
|
1739
|
+
return j(e, t, n);
|
|
1736
1740
|
} catch {
|
|
1737
1741
|
return K(e, t, "en");
|
|
1738
1742
|
}
|
|
1739
1743
|
}
|
|
1740
|
-
function
|
|
1744
|
+
function Cr(e, t) {
|
|
1741
1745
|
let n = t ?? G;
|
|
1742
1746
|
if (!Number.isFinite(e)) return String(e);
|
|
1743
|
-
if (
|
|
1744
|
-
for (let [t, r] of
|
|
1747
|
+
if (xr(n)) {
|
|
1748
|
+
for (let [t, r] of br) if (Math.round(e / t * 100) >= 100) return K(e / t, 2, n) + r;
|
|
1745
1749
|
return K(e, 0, n);
|
|
1746
1750
|
}
|
|
1747
|
-
let r = W.has(n) ? (e, t) => K(e, t, n) : (e, t) =>
|
|
1751
|
+
let r = W.has(n) ? (e, t) => K(e, t, n) : (e, t) => Sr(e, t, n);
|
|
1748
1752
|
return e >= 1e9 ? r(e / 1e9, 2) + "B" : e >= 1e6 ? r(e / 1e6, 2) + "M" : e >= 1e3 ? r(e / 1e3, 2) + "K" : r(e, 0);
|
|
1749
1753
|
}
|
|
1750
1754
|
//#endregion
|
|
@@ -1756,14 +1760,14 @@ var q = {
|
|
|
1756
1760
|
ceiling: "#D946EF",
|
|
1757
1761
|
floor: "#06B6D4",
|
|
1758
1762
|
reference: "#EAB308"
|
|
1759
|
-
}, J = "Asia/Ho_Chi_Minh",
|
|
1763
|
+
}, J = "Asia/Ho_Chi_Minh", wr = {
|
|
1760
1764
|
up: "#E8313F",
|
|
1761
1765
|
down: "#2F6FEB",
|
|
1762
1766
|
unchanged: "#8B8F99",
|
|
1763
1767
|
ceiling: "#C2121F",
|
|
1764
1768
|
floor: "#1E4FC2",
|
|
1765
1769
|
reference: "#8B8F99"
|
|
1766
|
-
},
|
|
1770
|
+
}, Tr = "Asia/Seoul", Er = [
|
|
1767
1771
|
{
|
|
1768
1772
|
name: "ATO",
|
|
1769
1773
|
startTime: "09:00",
|
|
@@ -1794,7 +1798,7 @@ var q = {
|
|
|
1794
1798
|
endTime: "14:45",
|
|
1795
1799
|
type: "preClose"
|
|
1796
1800
|
}
|
|
1797
|
-
],
|
|
1801
|
+
], Dr = [
|
|
1798
1802
|
{
|
|
1799
1803
|
name: "Phiên 1",
|
|
1800
1804
|
startTime: "09:15",
|
|
@@ -1825,7 +1829,7 @@ var q = {
|
|
|
1825
1829
|
endTime: "15:00",
|
|
1826
1830
|
type: "postClose"
|
|
1827
1831
|
}
|
|
1828
|
-
],
|
|
1832
|
+
], Or = [
|
|
1829
1833
|
{
|
|
1830
1834
|
name: "Phiên 1",
|
|
1831
1835
|
startTime: "09:15",
|
|
@@ -1844,7 +1848,7 @@ var q = {
|
|
|
1844
1848
|
endTime: "14:30",
|
|
1845
1849
|
type: "continuous"
|
|
1846
1850
|
}
|
|
1847
|
-
],
|
|
1851
|
+
], kr = [
|
|
1848
1852
|
{
|
|
1849
1853
|
name: "ATO",
|
|
1850
1854
|
startTime: "08:45",
|
|
@@ -1875,7 +1879,7 @@ var q = {
|
|
|
1875
1879
|
endTime: "14:45",
|
|
1876
1880
|
type: "preClose"
|
|
1877
1881
|
}
|
|
1878
|
-
],
|
|
1882
|
+
], Ar = [
|
|
1879
1883
|
{
|
|
1880
1884
|
name: "장전 동시호가",
|
|
1881
1885
|
startTime: "08:30",
|
|
@@ -1906,7 +1910,7 @@ var q = {
|
|
|
1906
1910
|
endTime: "20:00",
|
|
1907
1911
|
type: "postClose"
|
|
1908
1912
|
}
|
|
1909
|
-
],
|
|
1913
|
+
], jr = [
|
|
1910
1914
|
{
|
|
1911
1915
|
name: "프리마켓",
|
|
1912
1916
|
startTime: "08:00",
|
|
@@ -1925,7 +1929,7 @@ var q = {
|
|
|
1925
1929
|
endTime: "20:00",
|
|
1926
1930
|
type: "postClose"
|
|
1927
1931
|
}
|
|
1928
|
-
],
|
|
1932
|
+
], Mr = [
|
|
1929
1933
|
{
|
|
1930
1934
|
from: 0,
|
|
1931
1935
|
step: 1
|
|
@@ -1954,7 +1958,7 @@ var q = {
|
|
|
1954
1958
|
from: 5e5,
|
|
1955
1959
|
step: 1e3
|
|
1956
1960
|
}
|
|
1957
|
-
],
|
|
1961
|
+
], Nr = [
|
|
1958
1962
|
{
|
|
1959
1963
|
from: 0,
|
|
1960
1964
|
step: 1e-8
|
|
@@ -2015,7 +2019,7 @@ var q = {
|
|
|
2015
2019
|
from: 1e6,
|
|
2016
2020
|
step: 1e3
|
|
2017
2021
|
}
|
|
2018
|
-
],
|
|
2022
|
+
], Pr = {
|
|
2019
2023
|
type: "stock",
|
|
2020
2024
|
exchange: "HOSE",
|
|
2021
2025
|
currency: "VND",
|
|
@@ -2042,12 +2046,12 @@ var q = {
|
|
|
2042
2046
|
ceilingPercent: 7,
|
|
2043
2047
|
floorPercent: 7
|
|
2044
2048
|
},
|
|
2045
|
-
sessions:
|
|
2049
|
+
sessions: Er,
|
|
2046
2050
|
colorScheme: q
|
|
2047
|
-
},
|
|
2048
|
-
...
|
|
2051
|
+
}, Fr = {
|
|
2052
|
+
...Pr,
|
|
2049
2053
|
priceSteps: void 0
|
|
2050
|
-
},
|
|
2054
|
+
}, Ir = {
|
|
2051
2055
|
type: "stock",
|
|
2052
2056
|
exchange: "HNX",
|
|
2053
2057
|
currency: "VND",
|
|
@@ -2060,9 +2064,9 @@ var q = {
|
|
|
2060
2064
|
ceilingPercent: 10,
|
|
2061
2065
|
floorPercent: 10
|
|
2062
2066
|
},
|
|
2063
|
-
sessions:
|
|
2067
|
+
sessions: Dr,
|
|
2064
2068
|
colorScheme: q
|
|
2065
|
-
},
|
|
2069
|
+
}, Lr = {
|
|
2066
2070
|
type: "stock",
|
|
2067
2071
|
exchange: "UPCOM",
|
|
2068
2072
|
currency: "VND",
|
|
@@ -2075,9 +2079,9 @@ var q = {
|
|
|
2075
2079
|
ceilingPercent: 15,
|
|
2076
2080
|
floorPercent: 15
|
|
2077
2081
|
},
|
|
2078
|
-
sessions:
|
|
2082
|
+
sessions: Or,
|
|
2079
2083
|
colorScheme: q
|
|
2080
|
-
},
|
|
2084
|
+
}, Rr = {
|
|
2081
2085
|
type: "futures",
|
|
2082
2086
|
exchange: "HNX",
|
|
2083
2087
|
currency: "VND",
|
|
@@ -2091,44 +2095,44 @@ var q = {
|
|
|
2091
2095
|
ceilingPercent: 7,
|
|
2092
2096
|
floorPercent: 7
|
|
2093
2097
|
},
|
|
2094
|
-
sessions:
|
|
2098
|
+
sessions: kr,
|
|
2095
2099
|
colorScheme: q
|
|
2096
|
-
},
|
|
2100
|
+
}, zr = {
|
|
2097
2101
|
type: "stock",
|
|
2098
2102
|
exchange: "KRX",
|
|
2099
2103
|
currency: "KRW",
|
|
2100
2104
|
pricePrecision: 0,
|
|
2101
2105
|
volumeUnit: 1,
|
|
2102
2106
|
priceStep: 1,
|
|
2103
|
-
priceSteps:
|
|
2104
|
-
timeZone:
|
|
2107
|
+
priceSteps: Mr,
|
|
2108
|
+
timeZone: Tr,
|
|
2105
2109
|
priceLimits: {
|
|
2106
2110
|
enabled: !0,
|
|
2107
2111
|
ceilingPercent: 30,
|
|
2108
2112
|
floorPercent: 30,
|
|
2109
2113
|
roundMove: !0
|
|
2110
2114
|
},
|
|
2111
|
-
sessions:
|
|
2112
|
-
colorScheme:
|
|
2113
|
-
},
|
|
2114
|
-
...
|
|
2115
|
+
sessions: Ar,
|
|
2116
|
+
colorScheme: wr
|
|
2117
|
+
}, Br = {
|
|
2118
|
+
...zr,
|
|
2115
2119
|
exchange: "NXT",
|
|
2116
|
-
sessions:
|
|
2117
|
-
},
|
|
2120
|
+
sessions: jr
|
|
2121
|
+
}, Vr = {
|
|
2118
2122
|
type: "crypto",
|
|
2119
2123
|
exchange: "UPBIT",
|
|
2120
2124
|
currency: "KRW",
|
|
2121
2125
|
priceStep: 1e-8,
|
|
2122
|
-
priceSteps:
|
|
2123
|
-
timeZone:
|
|
2126
|
+
priceSteps: Nr,
|
|
2127
|
+
timeZone: Tr,
|
|
2124
2128
|
priceLimits: { enabled: !1 },
|
|
2125
|
-
colorScheme:
|
|
2126
|
-
},
|
|
2129
|
+
colorScheme: wr
|
|
2130
|
+
}, Hr = {
|
|
2127
2131
|
type: "crypto",
|
|
2128
2132
|
currency: "USDT",
|
|
2129
2133
|
pricePrecision: 2,
|
|
2130
2134
|
priceLimits: { enabled: !1 }
|
|
2131
|
-
},
|
|
2135
|
+
}, Ur = {
|
|
2132
2136
|
type: "stock",
|
|
2133
2137
|
exchange: "NYSE",
|
|
2134
2138
|
currency: "USD",
|
|
@@ -2157,10 +2161,10 @@ var q = {
|
|
|
2157
2161
|
}
|
|
2158
2162
|
]
|
|
2159
2163
|
};
|
|
2160
|
-
function
|
|
2161
|
-
return
|
|
2164
|
+
function Wr(e) {
|
|
2165
|
+
return Gr(e, q);
|
|
2162
2166
|
}
|
|
2163
|
-
function
|
|
2167
|
+
function Gr(e, t) {
|
|
2164
2168
|
return {
|
|
2165
2169
|
...e,
|
|
2166
2170
|
candleUp: t.up,
|
|
@@ -2169,33 +2173,33 @@ function Ur(e, t) {
|
|
|
2169
2173
|
candleDownWick: t.down
|
|
2170
2174
|
};
|
|
2171
2175
|
}
|
|
2172
|
-
var
|
|
2173
|
-
function
|
|
2176
|
+
var Y = 1e-9;
|
|
2177
|
+
function Kr(e, t) {
|
|
2174
2178
|
let n = t.priceStep;
|
|
2175
|
-
for (let r of t.priceSteps ?? []) e +
|
|
2179
|
+
for (let r of t.priceSteps ?? []) e + Y >= r.from && (n = r.step);
|
|
2176
2180
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
2177
2181
|
}
|
|
2178
|
-
function
|
|
2182
|
+
function qr(e, t) {
|
|
2179
2183
|
let n = t.priceStep;
|
|
2180
|
-
for (let r of t.priceSteps ?? []) e -
|
|
2184
|
+
for (let r of t.priceSteps ?? []) e - Y > r.from && (n = r.step);
|
|
2181
2185
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
2182
2186
|
}
|
|
2183
|
-
function
|
|
2184
|
-
let r =
|
|
2187
|
+
function X(e, t, n = "nearest") {
|
|
2188
|
+
let r = Kr(e, t);
|
|
2185
2189
|
if (r === void 0 || !Number.isFinite(e)) return e;
|
|
2186
|
-
let i = e / r, a = n === "down" ? Math.floor(i +
|
|
2190
|
+
let i = e / r, a = n === "down" ? Math.floor(i + Y) : n === "up" ? Math.ceil(i - Y) : Math.round(i);
|
|
2187
2191
|
return Number((a * r).toFixed(Vt(r)));
|
|
2188
2192
|
}
|
|
2189
|
-
function
|
|
2193
|
+
function Jr(e, t) {
|
|
2190
2194
|
if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
|
|
2191
|
-
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 =
|
|
2195
|
+
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 = Kr(i, t);
|
|
2192
2196
|
if (s === void 0) return {
|
|
2193
2197
|
ceiling: a,
|
|
2194
2198
|
floor: o,
|
|
2195
2199
|
reference: i
|
|
2196
2200
|
};
|
|
2197
|
-
let c =
|
|
2198
|
-
if (Math.abs(i - s) <
|
|
2201
|
+
let c = X(i + s, t);
|
|
2202
|
+
if (Math.abs(i - s) < Y) return {
|
|
2199
2203
|
ceiling: c,
|
|
2200
2204
|
floor: i,
|
|
2201
2205
|
reference: i
|
|
@@ -2207,36 +2211,36 @@ function Kr(e, t) {
|
|
|
2207
2211
|
priceStep: s,
|
|
2208
2212
|
priceSteps: void 0
|
|
2209
2213
|
};
|
|
2210
|
-
l =
|
|
2211
|
-
} else l =
|
|
2212
|
-
return l <= i && (l = c), u >= i && (u =
|
|
2214
|
+
l = X(i + X(i * n, e, "down"), t, "down"), u = X(i - X(i * r, e, "down"), t, "down");
|
|
2215
|
+
} else l = X(a, t, "down"), u = X(o, t, "up");
|
|
2216
|
+
return l <= i && (l = c), u >= i && (u = X(i - (qr(i, t) ?? s), t)), u <= 0 && (u = i), {
|
|
2213
2217
|
ceiling: l,
|
|
2214
2218
|
floor: u,
|
|
2215
2219
|
reference: i
|
|
2216
2220
|
};
|
|
2217
2221
|
}
|
|
2218
|
-
var
|
|
2219
|
-
function
|
|
2222
|
+
var Z = (e, t) => Math.round(e * t * 1e9) / 1e9;
|
|
2223
|
+
function Yr(e, t) {
|
|
2220
2224
|
let n = Math.round(Math.log10(t));
|
|
2221
2225
|
return {
|
|
2222
2226
|
...e,
|
|
2223
2227
|
pricePrecision: e.pricePrecision === void 0 ? void 0 : Math.max(0, e.pricePrecision - n),
|
|
2224
|
-
priceStep: e.priceStep === void 0 ? void 0 :
|
|
2228
|
+
priceStep: e.priceStep === void 0 ? void 0 : Z(e.priceStep, t),
|
|
2225
2229
|
priceSteps: e.priceSteps?.map((e) => ({
|
|
2226
|
-
from:
|
|
2227
|
-
step:
|
|
2230
|
+
from: Z(e.from, t),
|
|
2231
|
+
step: Z(e.step, t)
|
|
2228
2232
|
})),
|
|
2229
2233
|
priceLimits: e.priceLimits && {
|
|
2230
2234
|
...e.priceLimits,
|
|
2231
|
-
referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 :
|
|
2235
|
+
referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 : Z(e.priceLimits.referencePrice, t)
|
|
2232
2236
|
}
|
|
2233
2237
|
};
|
|
2234
2238
|
}
|
|
2235
|
-
var
|
|
2236
|
-
function
|
|
2239
|
+
var Xr = 6e4, Zr = 864e5;
|
|
2240
|
+
function Qr(e, t) {
|
|
2237
2241
|
let n, r;
|
|
2238
2242
|
if (t) {
|
|
2239
|
-
let i = new Date(e + b(t, e) *
|
|
2243
|
+
let i = new Date(e + b(t, e) * Xr);
|
|
2240
2244
|
n = i.getUTCHours(), r = i.getUTCMinutes();
|
|
2241
2245
|
} else {
|
|
2242
2246
|
let t = new Date(e);
|
|
@@ -2244,31 +2248,31 @@ function Xr(e, t) {
|
|
|
2244
2248
|
}
|
|
2245
2249
|
return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
2246
2250
|
}
|
|
2247
|
-
function
|
|
2251
|
+
function $r(e, t = Date.now(), n) {
|
|
2248
2252
|
if (n !== void 0 && !y(n)) return null;
|
|
2249
|
-
let r =
|
|
2253
|
+
let r = Qr(t, n);
|
|
2250
2254
|
for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
|
|
2251
2255
|
return null;
|
|
2252
2256
|
}
|
|
2253
|
-
var
|
|
2257
|
+
var Q = (e) => String(e).padStart(2, "0"), $ = (e) => {
|
|
2254
2258
|
let t = new Date(e);
|
|
2255
|
-
return `${t.getUTCFullYear()}-${
|
|
2256
|
-
},
|
|
2257
|
-
function
|
|
2258
|
-
let r = Date.UTC(e, t - 1, 1), i = 1 + (
|
|
2259
|
+
return `${t.getUTCFullYear()}-${Q(t.getUTCMonth() + 1)}-${Q(t.getUTCDate())}`;
|
|
2260
|
+
}, ei = 4, ti = 7 * 36e5;
|
|
2261
|
+
function ni(e, t, n) {
|
|
2262
|
+
let r = Date.UTC(e, t - 1, 1), i = 1 + (ei - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
|
|
2259
2263
|
let t = new Date(e).getUTCDay();
|
|
2260
|
-
return t === 0 || t === 6 || (n?.(
|
|
2264
|
+
return t === 0 || t === 6 || (n?.($(e)) ?? !1);
|
|
2261
2265
|
};
|
|
2262
|
-
for (; o(a);) a -=
|
|
2263
|
-
return
|
|
2266
|
+
for (; o(a);) a -= Zr;
|
|
2267
|
+
return $(a);
|
|
2264
2268
|
}
|
|
2265
|
-
function
|
|
2266
|
-
let n =
|
|
2267
|
-
symbol: `VN30F${
|
|
2269
|
+
function ri(e, t) {
|
|
2270
|
+
let n = $(e + ti), r = (e, n) => ({
|
|
2271
|
+
symbol: `VN30F${Q(e % 100)}${Q(n)}`,
|
|
2268
2272
|
year: e,
|
|
2269
2273
|
month: n,
|
|
2270
|
-
lastTradingDay:
|
|
2271
|
-
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e +
|
|
2274
|
+
lastTradingDay: ni(e, n, t)
|
|
2275
|
+
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + ti), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
|
|
2272
2276
|
n > o.lastTradingDay && (o = i(o));
|
|
2273
2277
|
let s = [o, i(o)], c = i(s[1]);
|
|
2274
2278
|
for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
|
|
@@ -2276,7 +2280,7 @@ function ni(e, t) {
|
|
|
2276
2280
|
}
|
|
2277
2281
|
//#endregion
|
|
2278
2282
|
//#region src/icons/iconSet.ts
|
|
2279
|
-
var
|
|
2283
|
+
var ii = {
|
|
2280
2284
|
cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
|
|
2281
2285
|
trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
|
|
2282
2286
|
trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
|
|
@@ -2443,7 +2447,7 @@ var ri = {
|
|
|
2443
2447
|
]
|
|
2444
2448
|
] },
|
|
2445
2449
|
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" }
|
|
2446
|
-
},
|
|
2450
|
+
}, ai = {
|
|
2447
2451
|
trendLine: {
|
|
2448
2452
|
d: "M5 18L19 6",
|
|
2449
2453
|
dots: [[5, 18], [19, 6]]
|
|
@@ -2803,7 +2807,7 @@ var ri = {
|
|
|
2803
2807
|
],
|
|
2804
2808
|
dash: "M12 3V21"
|
|
2805
2809
|
}
|
|
2806
|
-
},
|
|
2810
|
+
}, oi = {
|
|
2807
2811
|
candlestick: {
|
|
2808
2812
|
d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
|
|
2809
2813
|
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"]
|
|
@@ -2870,21 +2874,21 @@ var ri = {
|
|
|
2870
2874
|
"M16 4.5h3v6h-3z"
|
|
2871
2875
|
]
|
|
2872
2876
|
}
|
|
2873
|
-
},
|
|
2874
|
-
function
|
|
2875
|
-
let t =
|
|
2877
|
+
}, si = 1.75, ci = .22, li = /* @__PURE__ */ new WeakMap();
|
|
2878
|
+
function ui(e) {
|
|
2879
|
+
let t = li.get(e);
|
|
2876
2880
|
if (t) return t;
|
|
2877
2881
|
let n = "";
|
|
2878
|
-
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${
|
|
2882
|
+
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${ci}" stroke="none"/>`);
|
|
2879
2883
|
for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
|
|
2880
2884
|
e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
|
|
2881
|
-
for (let [t, r, i =
|
|
2882
|
-
return
|
|
2885
|
+
for (let [t, r, i = si] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
|
|
2886
|
+
return li.set(e, n), n;
|
|
2883
2887
|
}
|
|
2884
|
-
function
|
|
2885
|
-
return `<svg xmlns="http://www.w3.org/2000/svg" class="tc-icon" 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">${
|
|
2888
|
+
function di(e, t) {
|
|
2889
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" class="tc-icon" 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">${ui(e)}</svg>`;
|
|
2886
2890
|
}
|
|
2887
2891
|
//#endregion
|
|
2888
|
-
export { t as CHART_STYLE_KEYS,
|
|
2892
|
+
export { t as CHART_STYLE_KEYS, oi as CHART_TYPE_ICONS, En as DARK_PRICE_LIMITS, jn as DARK_TERMINAL, kn as DARK_THEME, ir as DEFAULT_BAR_SPACING, rr as DEFAULT_BAR_WIDTH, Qn as DEFAULT_CHART_OPTIONS, a as DEFAULT_DRAWING_STYLE, mn as DEFAULT_FONT_FAMILY, cr as DEFAULT_PANEL_HEIGHT, l as DEFAULT_RECONNECT, s as DEFAULT_SIGNAL_STYLE, u as DEFAULT_STREAM_CONFIG, nr as DEFAULT_TIMEFRAME_FAVORITES, c as DEFAULT_TRADE_ZONE_STYLE, o as DEFAULT_TRADING_CONFIG, ai as DRAWING_TOOL_ICONS, ur as FIBONACCI, Dr as HNX_SESSIONS, Er as HOSE_SESSIONS, si as ICON_DOT_RADIUS, ci as ICON_SOFT_OPACITY, Ar as KRX_SESSIONS, wr as KR_COLORS, Dn as LIGHT_PRICE_LIMITS, An as LIGHT_THEME, n as LINE_TINT_FILL, e as LayerType, Hr as MARKET_CRYPTO, Ir as MARKET_HNX, Pr as MARKET_HOSE, Fr as MARKET_HOSE_ETF, zr as MARKET_KRX, Br as MARKET_NXT, Ur as MARKET_NYSE, Vr as MARKET_UPBIT_KRW, Lr as MARKET_UPCOM, Rr as MARKET_VN30F, sr as MIN_PANEL_HEIGHT, de as MS_TIME_THRESHOLD, jr as NXT_SESSIONS, lr as PHI, ar as PRICE_AXIS_WIDTH, wt as PRICE_SOURCES, hn as SANS_FONT_FAMILY, R as TC_PALETTE, On as TC_SERIES_COLORS, $n as TIMEFRAMES_CRYPTO, tr as TIMEFRAMES_FOREX, er as TIMEFRAMES_STOCK, or as TIME_AXIS_HEIGHT, ii as UI_ICONS, Or as UPCOM_SESSIONS, kr as VN30F_SESSIONS, q as VN_COLORS, _n as VOLUME_ALPHA, qe as alignToTimeframe, gt as autoPricePrecision, ft as barDateParts, dt as barDateZone, fe as barTimeUnit, Ze as barsAreDaily, Zn as chartStyleValue, oe as clamp, Jr as computePriceLimits, ye as computePriceRange, ue as computeTickStep, h as contrastRatio, Gr as createMarketTheme, Wr as createVNTheme, Ct as detectPrecision, $t as drawingOption, U as en, ge as findBarIndex, ve as fitPriceRange, yt as formatFraction, K as formatNumber, j as formatPrice, vt as formatPriceScaleLabel, Ke as formatTimestamp, yr as formatVND, St as formatVolume, Cr as formatVolumeLoc, bt as fractionTick, $r as getCurrentSession, hr as getLocale, vr as getLocaleStrings, xe as hexToRgba, di as iconSvg, Ot as indicatorSource, Oe as inkOn, ce as inverseLerp, Ye as isDateOnly, Tt as isPriceSource, Ge as isTimeFrame, S as isUtcTimeZone, y as isValidTimeZone, se as lerp, we as lerpColor, Kn as lineDash, Gt as marketStatus, be as mergeBar, p as niceNumber, me as normalizeBar, pe as normalizeBarTime, C as offsetAt, r as ownFillColor, _e as padPriceRange, kt as parseIndicatorSource, T as parseTimeframe, dr as phiStep, Lt as pickBaseTimeframe, xt as priceFormatterFor, Kr as priceStepAt, ht as priceTagText, Bt as rankSymbols, Hn as readChartStyleOverrides, pn as readChartTypeOptions, Gn as readIndicatorPlotStyles, ae as readNews, Un as readPaneStyle, ee as readQuote, De as readableOn, _r as registerLocale, Mt as resampleBars, Jn as resolveChartTheme, en as resolveDrawingOptions, Nn as resolveVolumeColors, X as roundToPriceStep, le as roundToStep, Zt as sanitizeDrawingOptions, fn as sanitizeDrawingStyle, Yr as scaleMarketPrices, Ut as sessionMinute, mr as setLocale, he as sliceVisibleData, Et as sourcePrice, Vt as stepDecimals, Ht as symbolTimeZone, gr as t, We as tickBarCount, Rt as tickerOf, Je as timeParts, lt as timeframeBucketStart, ot as timeframeFollowsDays, st as timeframeSpansDays, E as timeframeToMs, Qe as tzLabel, xr as usesKoreanUnits, fr as vi, ri as vn30fContracts, ni as vn30fLastTradingDay, z as volumeColor, Re as wallToUtc, m as withAlpha, b as zoneOffsetMinutes, Be as zonedDateFormatter };
|
|
2889
2893
|
|
|
2890
2894
|
//# sourceMappingURL=index.js.map
|