@tradecanvas/commons 1.24.0 → 1.26.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 +365 -350
- package/dist/index.js.map +1 -1
- package/dist/types/chart.d.ts +8 -4
- package/dist/types/chart.d.ts.map +1 -1
- package/dist/utils/data.d.ts +31 -4
- package/dist/utils/data.d.ts.map +1 -1
- package/dist/utils/time.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -255,12 +255,17 @@ function oe(e, t, n) {
|
|
|
255
255
|
}
|
|
256
256
|
//#endregion
|
|
257
257
|
//#region src/utils/data.ts
|
|
258
|
-
|
|
259
|
-
return e > 0xe8d4a51000 ? e : e * 1e3;
|
|
260
|
-
}
|
|
258
|
+
var se = 1e11;
|
|
261
259
|
function ce(e) {
|
|
260
|
+
let t = e.length > 0 ? e[e.length - 1].time : NaN;
|
|
261
|
+
return Number.isFinite(t) ? Math.abs(t) >= 1e11 ? 1 : 1e3 : 1;
|
|
262
|
+
}
|
|
263
|
+
function le(e, t) {
|
|
264
|
+
return t === void 0 ? Math.abs(e) >= 1e11 ? e : e * 1e3 : e * t;
|
|
265
|
+
}
|
|
266
|
+
function ue(e) {
|
|
262
267
|
return {
|
|
263
|
-
time:
|
|
268
|
+
time: le(e.time ?? e.t ?? 0),
|
|
264
269
|
open: e.open ?? e.o ?? 0,
|
|
265
270
|
high: e.high ?? e.h ?? 0,
|
|
266
271
|
low: e.low ?? e.l ?? 0,
|
|
@@ -268,11 +273,11 @@ function ce(e) {
|
|
|
268
273
|
volume: e.volume ?? e.v ?? 0
|
|
269
274
|
};
|
|
270
275
|
}
|
|
271
|
-
function
|
|
276
|
+
function de(e, t, n) {
|
|
272
277
|
let r = Math.max(0, t), i = Math.min(e.length, n + 1);
|
|
273
278
|
return e.slice(r, i);
|
|
274
279
|
}
|
|
275
|
-
function
|
|
280
|
+
function fe(e, t) {
|
|
276
281
|
let n = 0, r = e.length - 1;
|
|
277
282
|
for (; n <= r;) {
|
|
278
283
|
let i = n + r >>> 1;
|
|
@@ -282,24 +287,34 @@ function ue(e, t) {
|
|
|
282
287
|
}
|
|
283
288
|
return n;
|
|
284
289
|
}
|
|
285
|
-
function
|
|
290
|
+
function pe(e, t, n, r = !1) {
|
|
291
|
+
let i = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
|
|
292
|
+
if (Number.isFinite(i)) {
|
|
293
|
+
let r = i || Math.log(1 + 2 * n), a = Math.exp(r * n);
|
|
294
|
+
return {
|
|
295
|
+
min: e / a,
|
|
296
|
+
max: t * a
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
let a = t - e || 1;
|
|
300
|
+
return {
|
|
301
|
+
min: e - a * n,
|
|
302
|
+
max: t + a * n
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function me(e, t, n, r = .05, i = !1) {
|
|
286
306
|
if (e.length === 0) return {
|
|
287
307
|
min: 0,
|
|
288
308
|
max: 1
|
|
289
309
|
};
|
|
290
|
-
let
|
|
291
|
-
for (let t =
|
|
292
|
-
|
|
310
|
+
let a = Math.max(0, t), o = Math.min(e.length - 1, n), s = Infinity, c = -Infinity;
|
|
311
|
+
for (let t = a; t <= o; t++) e[t].low < s && (s = e[t].low), e[t].high > c && (c = e[t].high);
|
|
312
|
+
return s === Infinity ? {
|
|
293
313
|
min: 0,
|
|
294
314
|
max: 1
|
|
295
|
-
};
|
|
296
|
-
let c = s - o || 1;
|
|
297
|
-
return {
|
|
298
|
-
min: o - c * r,
|
|
299
|
-
max: s + c * r
|
|
300
|
-
};
|
|
315
|
+
} : pe(s, c, r, i);
|
|
301
316
|
}
|
|
302
|
-
function
|
|
317
|
+
function he(e, t) {
|
|
303
318
|
return {
|
|
304
319
|
...e,
|
|
305
320
|
high: Math.max(e.high, t.price),
|
|
@@ -311,17 +326,17 @@ function fe(e, t) {
|
|
|
311
326
|
}
|
|
312
327
|
//#endregion
|
|
313
328
|
//#region src/utils/color.ts
|
|
314
|
-
function
|
|
329
|
+
function ge(e, t = 1) {
|
|
315
330
|
let n = e.slice(1);
|
|
316
331
|
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})`;
|
|
317
332
|
}
|
|
318
|
-
function
|
|
333
|
+
function _e(e, t) {
|
|
319
334
|
let n = e.trim();
|
|
320
|
-
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return
|
|
335
|
+
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return ge(n, t);
|
|
321
336
|
let r = n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);
|
|
322
337
|
return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
|
|
323
338
|
}
|
|
324
|
-
function
|
|
339
|
+
function ve(e, t, n) {
|
|
325
340
|
let r = (e) => (e = e.replace("#", ""), e.length === 3 && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]), {
|
|
326
341
|
r: parseInt(e.slice(0, 2), 16),
|
|
327
342
|
g: parseInt(e.slice(2, 4), 16),
|
|
@@ -331,7 +346,7 @@ function he(e, t, n) {
|
|
|
331
346
|
}
|
|
332
347
|
//#endregion
|
|
333
348
|
//#region src/utils/timezone.ts
|
|
334
|
-
var h = 6e4,
|
|
349
|
+
var h = 6e4, ye = 1440 * h, g = 15 * h, be = 8192, xe = 7 * ye, Se = 4096, Ce = new Set([
|
|
335
350
|
"UTC",
|
|
336
351
|
"Etc/UTC",
|
|
337
352
|
"GMT",
|
|
@@ -342,9 +357,9 @@ var h = 6e4, g = 1440 * h, _ = 15 * h, ge = 8192, v = 7 * g, _e = 4096, ve = new
|
|
|
342
357
|
"Etc/Universal",
|
|
343
358
|
"Zulu",
|
|
344
359
|
"Etc/Zulu"
|
|
345
|
-
]),
|
|
346
|
-
function
|
|
347
|
-
let t =
|
|
360
|
+
]), we = /* @__PURE__ */ new Map(), _ = /* @__PURE__ */ new Map(), Te = /* @__PURE__ */ new Map();
|
|
361
|
+
function Ee(e) {
|
|
362
|
+
let t = we.get(e);
|
|
348
363
|
return t || (t = new Intl.DateTimeFormat("en-US", {
|
|
349
364
|
timeZone: e,
|
|
350
365
|
hourCycle: "h23",
|
|
@@ -354,34 +369,34 @@ function xe(e) {
|
|
|
354
369
|
hour: "numeric",
|
|
355
370
|
minute: "numeric",
|
|
356
371
|
second: "numeric"
|
|
357
|
-
}),
|
|
372
|
+
}), we.set(e, t)), t;
|
|
358
373
|
}
|
|
359
|
-
function
|
|
374
|
+
function v(e) {
|
|
360
375
|
if (!e) return !1;
|
|
361
376
|
try {
|
|
362
|
-
return
|
|
377
|
+
return Ee(e), !0;
|
|
363
378
|
} catch {
|
|
364
379
|
return !1;
|
|
365
380
|
}
|
|
366
381
|
}
|
|
367
|
-
function
|
|
368
|
-
if (!Number.isFinite(t) ||
|
|
369
|
-
let n =
|
|
370
|
-
n || (n = /* @__PURE__ */ new Map(),
|
|
371
|
-
let r = Math.floor(t /
|
|
372
|
-
return i || (i =
|
|
373
|
-
}
|
|
374
|
-
function
|
|
375
|
-
let n =
|
|
382
|
+
function y(e, t) {
|
|
383
|
+
if (!Number.isFinite(t) || Ce.has(e)) return 0;
|
|
384
|
+
let n = Te.get(e);
|
|
385
|
+
n || (n = /* @__PURE__ */ new Map(), Te.set(e, n));
|
|
386
|
+
let r = Math.floor(t / xe), i = n.get(r);
|
|
387
|
+
return i || (i = De(e, r * xe), n.size >= Se && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
|
|
388
|
+
}
|
|
389
|
+
function De(e, t) {
|
|
390
|
+
let n = b(e, t), r = t + xe - g, i = b(e, r);
|
|
376
391
|
if (i === n) return {
|
|
377
392
|
before: n,
|
|
378
393
|
change: Infinity,
|
|
379
394
|
after: i
|
|
380
395
|
};
|
|
381
396
|
let a = t;
|
|
382
|
-
for (; r - a >
|
|
383
|
-
let t = a + Math.floor((r - a) /
|
|
384
|
-
|
|
397
|
+
for (; r - a > g;) {
|
|
398
|
+
let t = a + Math.floor((r - a) / g / 2) * g;
|
|
399
|
+
b(e, t) === n ? a = t : r = t;
|
|
385
400
|
}
|
|
386
401
|
return {
|
|
387
402
|
before: n,
|
|
@@ -389,11 +404,11 @@ function Se(e, t) {
|
|
|
389
404
|
after: i
|
|
390
405
|
};
|
|
391
406
|
}
|
|
392
|
-
function
|
|
393
|
-
let n = Math.floor(t /
|
|
407
|
+
function b(e, t) {
|
|
408
|
+
let n = Math.floor(t / g), r = `${e}|${n}`, i = _.get(r);
|
|
394
409
|
if (i !== void 0) return i;
|
|
395
|
-
let a = n *
|
|
396
|
-
for (let t of
|
|
410
|
+
let a = n * g, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
|
|
411
|
+
for (let t of Ee(e).formatToParts(new Date(a))) {
|
|
397
412
|
let e = Number(t.value);
|
|
398
413
|
switch (t.type) {
|
|
399
414
|
case "year":
|
|
@@ -417,20 +432,20 @@ function S(e, t) {
|
|
|
417
432
|
}
|
|
418
433
|
}
|
|
419
434
|
let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / h);
|
|
420
|
-
return
|
|
435
|
+
return _.size >= be && _.clear(), _.set(r, f), f;
|
|
421
436
|
}
|
|
422
|
-
function
|
|
423
|
-
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e :
|
|
437
|
+
function x(e, t) {
|
|
438
|
+
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : y(e, t);
|
|
424
439
|
}
|
|
425
|
-
function
|
|
426
|
-
let n = e -
|
|
427
|
-
if (n +
|
|
428
|
-
let r = e -
|
|
429
|
-
return r +
|
|
440
|
+
function Oe(e, t) {
|
|
441
|
+
let n = e - x(t, e - ye) * h;
|
|
442
|
+
if (n + x(t, n) * h === e) return n;
|
|
443
|
+
let r = e - x(t, e + ye) * h;
|
|
444
|
+
return r + x(t, r) * h === e ? r : n;
|
|
430
445
|
}
|
|
431
|
-
var
|
|
432
|
-
function
|
|
433
|
-
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i =
|
|
446
|
+
var ke = /* @__PURE__ */ new Map();
|
|
447
|
+
function Ae(e, t, n) {
|
|
448
|
+
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = ke.get(r);
|
|
434
449
|
if (i) return i;
|
|
435
450
|
let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
|
|
436
451
|
try {
|
|
@@ -445,11 +460,11 @@ function Te(e, t, n) {
|
|
|
445
460
|
});
|
|
446
461
|
}
|
|
447
462
|
let s = typeof n == "number" ? n * h : 0;
|
|
448
|
-
return i = (e) => o.format(new Date(e + s)),
|
|
463
|
+
return i = (e) => o.format(new Date(e + s)), ke.set(r, i), i;
|
|
449
464
|
}
|
|
450
465
|
//#endregion
|
|
451
466
|
//#region src/utils/time.ts
|
|
452
|
-
var
|
|
467
|
+
var je = {
|
|
453
468
|
"1s": 1e3,
|
|
454
469
|
"5s": 5e3,
|
|
455
470
|
"15s": 15e3,
|
|
@@ -476,16 +491,16 @@ var Ee = {
|
|
|
476
491
|
"3M": 7776e6,
|
|
477
492
|
"6M": 15552e6,
|
|
478
493
|
"12M": 31536e6
|
|
479
|
-
},
|
|
494
|
+
}, S = {
|
|
480
495
|
s: 1e3,
|
|
481
496
|
m: 6e4,
|
|
482
497
|
h: 36e5,
|
|
483
498
|
d: 864e5,
|
|
484
499
|
w: 6048e5,
|
|
485
500
|
M: 2592e6
|
|
486
|
-
},
|
|
487
|
-
function
|
|
488
|
-
let t =
|
|
501
|
+
}, Me = /^([1-9]\d*)([smhdwM])$/;
|
|
502
|
+
function C(e) {
|
|
503
|
+
let t = Me.exec(e);
|
|
489
504
|
if (!t) return null;
|
|
490
505
|
let n = Number(t[1]);
|
|
491
506
|
return Number.isSafeInteger(n) ? {
|
|
@@ -493,24 +508,24 @@ function T(e) {
|
|
|
493
508
|
unit: t[2]
|
|
494
509
|
} : null;
|
|
495
510
|
}
|
|
496
|
-
var
|
|
497
|
-
function
|
|
511
|
+
var Ne = 1e6;
|
|
512
|
+
function Pe(e) {
|
|
498
513
|
let t = /^([1-9]\d*)T$/.exec(e);
|
|
499
514
|
if (!t) return null;
|
|
500
515
|
let n = Number(t[1]);
|
|
501
|
-
return Number.isSafeInteger(n) && n <=
|
|
516
|
+
return Number.isSafeInteger(n) && n <= Ne ? n : null;
|
|
502
517
|
}
|
|
503
|
-
function
|
|
504
|
-
return
|
|
518
|
+
function Fe(e) {
|
|
519
|
+
return C(e) !== null;
|
|
505
520
|
}
|
|
506
|
-
function
|
|
507
|
-
let t =
|
|
521
|
+
function w(e) {
|
|
522
|
+
let t = je[e];
|
|
508
523
|
if (t !== void 0) return t;
|
|
509
|
-
let n =
|
|
510
|
-
return n ? n.count *
|
|
524
|
+
let n = C(e);
|
|
525
|
+
return n ? n.count * S[n.unit] : NaN;
|
|
511
526
|
}
|
|
512
|
-
function
|
|
513
|
-
let n = new Date(e), r =
|
|
527
|
+
function Ie(e, t) {
|
|
528
|
+
let n = new Date(e), r = w(t);
|
|
514
529
|
return r >= 864e5 ? n.toLocaleDateString(void 0, {
|
|
515
530
|
month: "short",
|
|
516
531
|
day: "numeric"
|
|
@@ -523,11 +538,11 @@ function je(e, t) {
|
|
|
523
538
|
second: "2-digit"
|
|
524
539
|
});
|
|
525
540
|
}
|
|
526
|
-
function
|
|
527
|
-
let n =
|
|
541
|
+
function Le(e, t) {
|
|
542
|
+
let n = w(t);
|
|
528
543
|
return Math.floor(e / n) * n;
|
|
529
544
|
}
|
|
530
|
-
function
|
|
545
|
+
function Re(e, t) {
|
|
531
546
|
if (t === null) {
|
|
532
547
|
let t = new Date(e);
|
|
533
548
|
return {
|
|
@@ -538,7 +553,7 @@ function Ne(e, t) {
|
|
|
538
553
|
minutes: t.getMinutes()
|
|
539
554
|
};
|
|
540
555
|
}
|
|
541
|
-
let n = new Date(e +
|
|
556
|
+
let n = new Date(e + x(t, e) * 6e4);
|
|
542
557
|
return {
|
|
543
558
|
year: n.getUTCFullYear(),
|
|
544
559
|
month: n.getUTCMonth() + 1,
|
|
@@ -547,90 +562,90 @@ function Ne(e, t) {
|
|
|
547
562
|
minutes: n.getUTCMinutes()
|
|
548
563
|
};
|
|
549
564
|
}
|
|
550
|
-
function
|
|
565
|
+
function ze(e) {
|
|
551
566
|
return e.hours === 0 && e.minutes === 0;
|
|
552
567
|
}
|
|
553
|
-
var
|
|
554
|
-
function
|
|
568
|
+
var Be = 20 * 36e5;
|
|
569
|
+
function Ve(e) {
|
|
555
570
|
let t = Math.min(e.length, 64);
|
|
556
571
|
if (t < 2) return;
|
|
557
|
-
let n = (e)
|
|
572
|
+
let n = ce(e), r = Infinity;
|
|
558
573
|
for (let i = 1; i < t; i++) {
|
|
559
|
-
let t = Math.abs(
|
|
574
|
+
let t = Math.abs(e[i].time - e[i - 1].time) * n;
|
|
560
575
|
t > 0 && t < r && (r = t);
|
|
561
576
|
}
|
|
562
|
-
return r === Infinity ? void 0 : r >=
|
|
577
|
+
return r === Infinity ? void 0 : r >= Be;
|
|
563
578
|
}
|
|
564
|
-
function
|
|
565
|
-
let n =
|
|
579
|
+
function He(e, t = Date.now()) {
|
|
580
|
+
let n = x(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
|
|
566
581
|
return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
|
|
567
582
|
}
|
|
568
|
-
var
|
|
569
|
-
function
|
|
570
|
-
let { count: r, unit: i } =
|
|
583
|
+
var Ue = Date.UTC(1970, 0, 5);
|
|
584
|
+
function We(e, t, n = 1) {
|
|
585
|
+
let { count: r, unit: i } = C(t) ?? {
|
|
571
586
|
count: 1,
|
|
572
587
|
unit: "m"
|
|
573
588
|
};
|
|
574
589
|
if (i === "s" || i === "m" || i === "h" || i === "d") {
|
|
575
|
-
let t = r *
|
|
590
|
+
let t = r * S[i];
|
|
576
591
|
return Math.floor(e / t) * t;
|
|
577
592
|
}
|
|
578
593
|
let a = new Date(e);
|
|
579
594
|
if (i === "w") {
|
|
580
|
-
let e =
|
|
595
|
+
let e = S.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
|
|
581
596
|
if (r <= 1) return i;
|
|
582
|
-
let o = Math.floor((i -
|
|
583
|
-
return
|
|
597
|
+
let o = Math.floor((i - Ue) / (7 * e));
|
|
598
|
+
return Ue + Math.floor(o / r) * r * 7 * e;
|
|
584
599
|
}
|
|
585
600
|
let o = a.getUTCFullYear() * 12 + a.getUTCMonth(), s = Math.floor(o / r) * r;
|
|
586
601
|
return Date.UTC(Math.floor(s / 12), s % 12, 1);
|
|
587
602
|
}
|
|
588
603
|
//#endregion
|
|
589
604
|
//#region src/utils/precision.ts
|
|
590
|
-
var
|
|
591
|
-
function
|
|
592
|
-
let n = `${e}|${t}`, r =
|
|
593
|
-
return r || (
|
|
605
|
+
var Ge = 64, T = /* @__PURE__ */ new Map();
|
|
606
|
+
function Ke(e, t) {
|
|
607
|
+
let n = `${e}|${t}`, r = T.get(n);
|
|
608
|
+
return r || (T.size >= Ge && T.clear(), r = new Intl.NumberFormat(e, {
|
|
594
609
|
minimumFractionDigits: t,
|
|
595
610
|
maximumFractionDigits: t
|
|
596
|
-
}),
|
|
611
|
+
}), T.set(n, r)), r;
|
|
597
612
|
}
|
|
598
|
-
function
|
|
599
|
-
return
|
|
613
|
+
function E(e, t = 2, n = "en-US") {
|
|
614
|
+
return Ke(n, t).format(e);
|
|
600
615
|
}
|
|
601
|
-
function
|
|
616
|
+
function qe(e, t) {
|
|
602
617
|
if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
|
|
603
618
|
let n = oe(e, t, 8);
|
|
604
619
|
return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
|
|
605
620
|
}
|
|
606
|
-
function
|
|
621
|
+
function Je(e, t, n, r = 2, i = "en-US") {
|
|
607
622
|
if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
|
|
608
623
|
if (t === "percentage") {
|
|
609
624
|
let t = (e / n - 1) * 100;
|
|
610
625
|
return `${t > 0 ? "+" : ""}${t.toFixed(2)}%`;
|
|
611
626
|
}
|
|
612
|
-
return
|
|
627
|
+
return E(e / n * 100, 2, i);
|
|
613
628
|
}
|
|
614
|
-
return
|
|
629
|
+
return E(e, r, i);
|
|
615
630
|
}
|
|
616
|
-
function
|
|
631
|
+
function Ye(e, t, n = 1) {
|
|
617
632
|
let r = Number.isInteger(n) && n > 1 ? n : 1;
|
|
618
633
|
if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
|
|
619
634
|
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)) : "";
|
|
620
635
|
return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
|
|
621
636
|
}
|
|
622
|
-
function
|
|
637
|
+
function Xe(e) {
|
|
623
638
|
if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
|
|
624
639
|
let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
|
|
625
640
|
return 1 / (e.denominator * t);
|
|
626
641
|
}
|
|
627
|
-
function
|
|
628
|
-
return e ? typeof e == "function" ? e :
|
|
642
|
+
function Ze(e) {
|
|
643
|
+
return e ? typeof e == "function" ? e : Xe(e) === null ? null : (t) => Ye(t, e.denominator, e.subDenominator) : null;
|
|
629
644
|
}
|
|
630
|
-
function
|
|
645
|
+
function Qe(e) {
|
|
631
646
|
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);
|
|
632
647
|
}
|
|
633
|
-
function
|
|
648
|
+
function $e(e) {
|
|
634
649
|
let t = 0;
|
|
635
650
|
for (let n of e) {
|
|
636
651
|
let e = n.toString(), r = e.indexOf(".");
|
|
@@ -640,7 +655,7 @@ function Ye(e) {
|
|
|
640
655
|
}
|
|
641
656
|
//#endregion
|
|
642
657
|
//#region src/utils/priceSource.ts
|
|
643
|
-
var
|
|
658
|
+
var et = [
|
|
644
659
|
"close",
|
|
645
660
|
"open",
|
|
646
661
|
"high",
|
|
@@ -650,10 +665,10 @@ var Xe = [
|
|
|
650
665
|
"ohlc4",
|
|
651
666
|
"hlcc4"
|
|
652
667
|
];
|
|
653
|
-
function
|
|
654
|
-
return typeof e == "string" &&
|
|
668
|
+
function tt(e) {
|
|
669
|
+
return typeof e == "string" && et.includes(e);
|
|
655
670
|
}
|
|
656
|
-
function
|
|
671
|
+
function nt(e, t) {
|
|
657
672
|
switch (t) {
|
|
658
673
|
case "open": return e.open;
|
|
659
674
|
case "high": return e.high;
|
|
@@ -665,13 +680,13 @@ function Qe(e, t) {
|
|
|
665
680
|
default: return e.close;
|
|
666
681
|
}
|
|
667
682
|
}
|
|
668
|
-
var
|
|
669
|
-
function
|
|
683
|
+
var rt = /^ind:([^:]+):(.+)$/;
|
|
684
|
+
function it(e, t) {
|
|
670
685
|
return `ind:${e}:${t}`;
|
|
671
686
|
}
|
|
672
|
-
function
|
|
687
|
+
function at(e) {
|
|
673
688
|
if (typeof e != "string") return null;
|
|
674
|
-
let t =
|
|
689
|
+
let t = rt.exec(e);
|
|
675
690
|
return t ? {
|
|
676
691
|
instanceId: t[1],
|
|
677
692
|
key: t[2]
|
|
@@ -679,11 +694,11 @@ function tt(e) {
|
|
|
679
694
|
}
|
|
680
695
|
//#endregion
|
|
681
696
|
//#region src/utils/resample.ts
|
|
682
|
-
var
|
|
683
|
-
function
|
|
697
|
+
var ot = 864e5;
|
|
698
|
+
function st(e, t, n = 1) {
|
|
684
699
|
let r = [], i = null;
|
|
685
700
|
for (let a of e) {
|
|
686
|
-
let e =
|
|
701
|
+
let e = We(a.time, t, n);
|
|
687
702
|
i === null || e !== i.time ? (i = {
|
|
688
703
|
time: e,
|
|
689
704
|
open: a.open,
|
|
@@ -695,37 +710,37 @@ function rt(e, t, n = 1) {
|
|
|
695
710
|
}
|
|
696
711
|
return r;
|
|
697
712
|
}
|
|
698
|
-
var
|
|
699
|
-
function
|
|
700
|
-
let n =
|
|
713
|
+
var D = (e) => e === "s" || e === "m" || e === "h" || e === "d";
|
|
714
|
+
function ct(e, t) {
|
|
715
|
+
let n = C(e), r = C(t);
|
|
701
716
|
if (!n || !r) return !1;
|
|
702
|
-
let i =
|
|
703
|
-
return n.unit === "d" && n.count > 1 ? !1 :
|
|
717
|
+
let i = w(e);
|
|
718
|
+
return n.unit === "d" && n.count > 1 ? !1 : D(r.unit) ? D(n.unit) && w(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : D(n.unit) && ot % i === 0;
|
|
704
719
|
}
|
|
705
|
-
function
|
|
720
|
+
function lt(e, t) {
|
|
706
721
|
let n = null, r = 0;
|
|
707
722
|
for (let i of t) {
|
|
708
|
-
if (!
|
|
709
|
-
let t =
|
|
723
|
+
if (!ct(i, e)) continue;
|
|
724
|
+
let t = w(i);
|
|
710
725
|
t > r && (n = i, r = t);
|
|
711
726
|
}
|
|
712
727
|
return n;
|
|
713
728
|
}
|
|
714
729
|
//#endregion
|
|
715
730
|
//#region src/utils/symbols.ts
|
|
716
|
-
function
|
|
731
|
+
function ut(e, t) {
|
|
717
732
|
if (!e) return 0;
|
|
718
733
|
if (e === t) return 1e3;
|
|
719
734
|
if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
|
|
720
735
|
let n = e.indexOf(t);
|
|
721
736
|
return n >= 0 ? 300 - Math.min(100, n) : 0;
|
|
722
737
|
}
|
|
723
|
-
function
|
|
738
|
+
function dt(e, t, n = 50, r) {
|
|
724
739
|
let i = t.trim().toUpperCase();
|
|
725
740
|
if (!i) return e.slice(0, n);
|
|
726
741
|
let a = [];
|
|
727
742
|
for (let t of e) {
|
|
728
|
-
let e = Math.max(
|
|
743
|
+
let e = Math.max(ut(t.symbol.toUpperCase(), i), ut((t.description ?? "").toUpperCase(), i) * .8);
|
|
729
744
|
e > 0 && a.push({
|
|
730
745
|
info: t,
|
|
731
746
|
score: e + (r?.(t) ?? 0)
|
|
@@ -733,7 +748,7 @@ function ct(e, t, n = 50, r) {
|
|
|
733
748
|
}
|
|
734
749
|
return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
|
|
735
750
|
}
|
|
736
|
-
function
|
|
751
|
+
function ft(e) {
|
|
737
752
|
let t = typeof e == "number" ? e : Number(e);
|
|
738
753
|
if (!Number.isFinite(t) || t <= 0) return 0;
|
|
739
754
|
for (let e = 0; e <= 12; e++) {
|
|
@@ -742,7 +757,7 @@ function lt(e) {
|
|
|
742
757
|
}
|
|
743
758
|
return 12;
|
|
744
759
|
}
|
|
745
|
-
function
|
|
760
|
+
function O(e) {
|
|
746
761
|
let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
|
|
747
762
|
if (!t) return null;
|
|
748
763
|
let n = Number(t[1]), r = Number(t[2]);
|
|
@@ -750,26 +765,26 @@ function ut(e) {
|
|
|
750
765
|
}
|
|
751
766
|
//#endregion
|
|
752
767
|
//#region src/utils/marketStatus.ts
|
|
753
|
-
var
|
|
754
|
-
function
|
|
768
|
+
var k = 864e5, A = 6e4, pt = 8;
|
|
769
|
+
function mt(e, t) {
|
|
755
770
|
let n = e?.timezone, r = (e?.sessions ?? []).flatMap((e) => {
|
|
756
|
-
let t =
|
|
771
|
+
let t = O(e.start), n = O(e.end);
|
|
757
772
|
return t === null || n === null || t === n ? [] : [{
|
|
758
773
|
start: t,
|
|
759
774
|
end: n,
|
|
760
775
|
days: Array.isArray(e.days) ? e.days : null
|
|
761
776
|
}];
|
|
762
777
|
});
|
|
763
|
-
if (!n || !
|
|
778
|
+
if (!n || !v(n) || r.length === 0 || !Number.isFinite(t)) return {
|
|
764
779
|
state: "always",
|
|
765
780
|
next: null
|
|
766
781
|
};
|
|
767
|
-
let i =
|
|
768
|
-
for (let e = -1; e <=
|
|
769
|
-
let t = a + e *
|
|
782
|
+
let i = y(n, t) * A, a = Math.floor((t + i) / k) * k, o = (e) => e - y(n, e - y(n, e - i) * A) * A, s = [];
|
|
783
|
+
for (let e = -1; e <= pt; e++) {
|
|
784
|
+
let t = a + e * k, n = (Math.floor(t / k) + 4) % 7;
|
|
770
785
|
for (let e of r) {
|
|
771
786
|
if (e.days && !e.days.includes(n)) continue;
|
|
772
|
-
let r = t + e.start *
|
|
787
|
+
let r = t + e.start * A, i = (e.end > e.start ? t : t + k) + e.end * A;
|
|
773
788
|
s.push([o(r), o(i)]);
|
|
774
789
|
}
|
|
775
790
|
}
|
|
@@ -792,15 +807,15 @@ function ft(e, t) {
|
|
|
792
807
|
}
|
|
793
808
|
//#endregion
|
|
794
809
|
//#region src/utils/drawingOptions.ts
|
|
795
|
-
var
|
|
796
|
-
function
|
|
810
|
+
var ht = 48, gt = 2e3, _t = 1e4;
|
|
811
|
+
function vt(e) {
|
|
797
812
|
if (!Array.isArray(e)) return;
|
|
798
813
|
let t = [];
|
|
799
814
|
for (let n of e) {
|
|
800
|
-
if (t.length >=
|
|
815
|
+
if (t.length >= ht) break;
|
|
801
816
|
if (typeof n != "object" || !n) continue;
|
|
802
817
|
let { value: e, visible: r, color: i } = n;
|
|
803
|
-
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) >
|
|
818
|
+
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > _t || r !== void 0 && typeof r != "boolean") continue;
|
|
804
819
|
let a = {
|
|
805
820
|
value: e,
|
|
806
821
|
visible: r ?? !0
|
|
@@ -809,109 +824,109 @@ function gt(e) {
|
|
|
809
824
|
}
|
|
810
825
|
return t;
|
|
811
826
|
}
|
|
812
|
-
function
|
|
827
|
+
function yt(e, t) {
|
|
813
828
|
switch (e.kind) {
|
|
814
829
|
case "boolean": return typeof t == "boolean" ? t : void 0;
|
|
815
830
|
case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
|
|
816
831
|
case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
|
|
817
|
-
case "levels": return
|
|
818
|
-
case "text": return typeof t == "string" ? t.slice(0,
|
|
832
|
+
case "levels": return vt(t);
|
|
833
|
+
case "text": return typeof t == "string" ? t.slice(0, gt) : void 0;
|
|
819
834
|
}
|
|
820
835
|
}
|
|
821
|
-
function
|
|
836
|
+
function bt(e, t) {
|
|
822
837
|
if (!e || typeof t != "object" || !t) return {};
|
|
823
838
|
let n = {};
|
|
824
839
|
for (let [r, i] of Object.entries(t)) {
|
|
825
840
|
let t = e[r];
|
|
826
841
|
if (!t) continue;
|
|
827
|
-
let a =
|
|
842
|
+
let a = yt(t, i);
|
|
828
843
|
a !== void 0 && (n[r] = a);
|
|
829
844
|
}
|
|
830
845
|
return n;
|
|
831
846
|
}
|
|
832
|
-
function
|
|
847
|
+
function xt(e) {
|
|
833
848
|
return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
|
|
834
849
|
}
|
|
835
|
-
function
|
|
850
|
+
function St(e, t, n) {
|
|
836
851
|
let r = e?.[n];
|
|
837
|
-
return r ?
|
|
852
|
+
return r ? xt((t && n in t ? yt(r, t[n]) : void 0) ?? r.default) : t?.[n];
|
|
838
853
|
}
|
|
839
|
-
function
|
|
854
|
+
function Ct(e, t) {
|
|
840
855
|
let n = {};
|
|
841
|
-
for (let r of Object.keys(e ?? {})) n[r] =
|
|
856
|
+
for (let r of Object.keys(e ?? {})) n[r] = St(e, t, r);
|
|
842
857
|
return n;
|
|
843
858
|
}
|
|
844
859
|
//#endregion
|
|
845
860
|
//#region src/utils/drawingStyle.ts
|
|
846
|
-
var
|
|
861
|
+
var wt = [
|
|
847
862
|
"solid",
|
|
848
863
|
"dashed",
|
|
849
864
|
"dotted"
|
|
850
|
-
],
|
|
851
|
-
function
|
|
865
|
+
], Tt = 64, Et = 2e3, Dt = 20, Ot = 200;
|
|
866
|
+
function j(e, t, n) {
|
|
852
867
|
return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
|
|
853
868
|
}
|
|
854
|
-
function
|
|
855
|
-
return typeof e == "string" && e.length > 0 && e.length <=
|
|
869
|
+
function kt(e) {
|
|
870
|
+
return typeof e == "string" && e.length > 0 && e.length <= Tt ? e : void 0;
|
|
856
871
|
}
|
|
857
|
-
function
|
|
872
|
+
function At(e) {
|
|
858
873
|
if (typeof e != "object" || !e) return {};
|
|
859
|
-
let t = e, n = {}, r =
|
|
874
|
+
let t = e, n = {}, r = kt(t.color);
|
|
860
875
|
r !== void 0 && (n.color = r);
|
|
861
|
-
let i =
|
|
862
|
-
i !== void 0 && (n.lineWidth = i),
|
|
863
|
-
let a =
|
|
876
|
+
let i = j(t.lineWidth, .5, Dt);
|
|
877
|
+
i !== void 0 && (n.lineWidth = i), wt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
|
|
878
|
+
let a = kt(t.fillColor);
|
|
864
879
|
a !== void 0 && (n.fillColor = a);
|
|
865
|
-
let o =
|
|
880
|
+
let o = j(t.fillOpacity, 0, 1);
|
|
866
881
|
o !== void 0 && (n.fillOpacity = o);
|
|
867
|
-
let s =
|
|
868
|
-
return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0,
|
|
882
|
+
let s = j(t.fontSize, 6, Ot);
|
|
883
|
+
return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, Et)), n;
|
|
869
884
|
}
|
|
870
885
|
//#endregion
|
|
871
886
|
//#region src/utils/chartTypeOptions.ts
|
|
872
|
-
var
|
|
873
|
-
function
|
|
874
|
-
if (!
|
|
887
|
+
var M = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, N = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, P = (e) => typeof e == "object" && !!e && !Array.isArray(e);
|
|
888
|
+
function jt(e) {
|
|
889
|
+
if (!P(e)) return {};
|
|
875
890
|
let t = {};
|
|
876
|
-
if (
|
|
891
|
+
if (P(e.renko)) {
|
|
877
892
|
let { boxSize: n, atrPeriod: r } = e.renko;
|
|
878
893
|
t.renko = {
|
|
879
|
-
...
|
|
880
|
-
...
|
|
894
|
+
...M(n) || n === "atr" ? { boxSize: n } : {},
|
|
895
|
+
...N(r, 1, 500) ? { atrPeriod: r } : {}
|
|
881
896
|
};
|
|
882
897
|
}
|
|
883
|
-
if (
|
|
898
|
+
if (P(e.lineBreak)) {
|
|
884
899
|
let { lines: n } = e.lineBreak;
|
|
885
|
-
t.lineBreak =
|
|
900
|
+
t.lineBreak = N(n, 1, 10) ? { lines: n } : {};
|
|
886
901
|
}
|
|
887
|
-
if (
|
|
902
|
+
if (P(e.kagi)) {
|
|
888
903
|
let { reversal: n, reversalType: r } = e.kagi;
|
|
889
904
|
t.kagi = {
|
|
890
|
-
...
|
|
905
|
+
...M(n) ? { reversal: n } : {},
|
|
891
906
|
...r === "percent" || r === "price" ? { reversalType: r } : {}
|
|
892
907
|
};
|
|
893
908
|
}
|
|
894
|
-
if (
|
|
909
|
+
if (P(e.pointAndFigure)) {
|
|
895
910
|
let { boxSize: n, reversal: r } = e.pointAndFigure;
|
|
896
911
|
t.pointAndFigure = {
|
|
897
|
-
...
|
|
898
|
-
...
|
|
912
|
+
...M(n) || n === "auto" ? { boxSize: n } : {},
|
|
913
|
+
...N(r, 1, 10) ? { reversal: r } : {}
|
|
899
914
|
};
|
|
900
915
|
}
|
|
901
|
-
if (
|
|
916
|
+
if (P(e.rangeBars)) {
|
|
902
917
|
let { range: n } = e.rangeBars;
|
|
903
|
-
t.rangeBars =
|
|
918
|
+
t.rangeBars = M(n) || n === "auto" ? { range: n } : {};
|
|
904
919
|
}
|
|
905
920
|
return t;
|
|
906
921
|
}
|
|
907
922
|
//#endregion
|
|
908
923
|
//#region src/constants/themes.ts
|
|
909
|
-
var
|
|
910
|
-
family:
|
|
924
|
+
var Mt = "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif", Nt = {
|
|
925
|
+
family: Mt,
|
|
911
926
|
sizeSmall: 10,
|
|
912
927
|
sizeMedium: 12,
|
|
913
928
|
sizeLarge: 14
|
|
914
|
-
},
|
|
929
|
+
}, F = {
|
|
915
930
|
amber: "#f2a93b",
|
|
916
931
|
up: "#1fa874",
|
|
917
932
|
down: "#e8505b",
|
|
@@ -922,37 +937,37 @@ var At = "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif",
|
|
|
922
937
|
rose: "#e25592",
|
|
923
938
|
neutral: "#7d8696",
|
|
924
939
|
ink: "#0c1016"
|
|
925
|
-
},
|
|
926
|
-
function
|
|
927
|
-
return
|
|
928
|
-
}
|
|
929
|
-
var
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
],
|
|
940
|
+
}, Pt = .22;
|
|
941
|
+
function I(e) {
|
|
942
|
+
return _e(e, Pt);
|
|
943
|
+
}
|
|
944
|
+
var L = "#2eb88a", R = "#e85a67", Ft = [
|
|
945
|
+
F.blue,
|
|
946
|
+
F.ochre,
|
|
947
|
+
F.violet,
|
|
948
|
+
F.cyan,
|
|
949
|
+
F.rose
|
|
950
|
+
], z = {
|
|
936
951
|
name: "dark",
|
|
937
|
-
background:
|
|
952
|
+
background: F.ink,
|
|
938
953
|
text: "#d9dde4",
|
|
939
954
|
textSecondary: "#7d8696",
|
|
940
955
|
grid: "#161b23",
|
|
941
956
|
crosshair: "#8a93a3",
|
|
942
|
-
candleUp:
|
|
943
|
-
candleDown:
|
|
944
|
-
candleUpWick:
|
|
945
|
-
candleDownWick:
|
|
946
|
-
lineColor:
|
|
957
|
+
candleUp: L,
|
|
958
|
+
candleDown: R,
|
|
959
|
+
candleUpWick: L,
|
|
960
|
+
candleDownWick: R,
|
|
961
|
+
lineColor: F.amber,
|
|
947
962
|
areaTopColor: "rgba(242, 169, 59, 0.32)",
|
|
948
963
|
areaBottomColor: "rgba(242, 169, 59, 0.0)",
|
|
949
|
-
volumeUp:
|
|
950
|
-
volumeDown:
|
|
964
|
+
volumeUp: I(L),
|
|
965
|
+
volumeDown: I(R),
|
|
951
966
|
axisLine: "#1f2630",
|
|
952
967
|
axisLabel: "#9aa3b2",
|
|
953
968
|
axisLabelBackground: "#1f2630",
|
|
954
|
-
font:
|
|
955
|
-
},
|
|
969
|
+
font: Nt
|
|
970
|
+
}, B = {
|
|
956
971
|
name: "light",
|
|
957
972
|
background: "#ffffff",
|
|
958
973
|
text: "#0f131a",
|
|
@@ -966,13 +981,13 @@ var I = "#2eb88a", L = "#e85a67", Nt = [
|
|
|
966
981
|
lineColor: "#c77a0a",
|
|
967
982
|
areaTopColor: "rgba(199, 122, 10, 0.24)",
|
|
968
983
|
areaBottomColor: "rgba(199, 122, 10, 0.0)",
|
|
969
|
-
volumeUp:
|
|
970
|
-
volumeDown:
|
|
984
|
+
volumeUp: I("#16a36a"),
|
|
985
|
+
volumeDown: I("#d9414f"),
|
|
971
986
|
axisLine: "#dde1e7",
|
|
972
987
|
axisLabel: "#5b6472",
|
|
973
988
|
axisLabelBackground: "#eef0f3",
|
|
974
|
-
font:
|
|
975
|
-
},
|
|
989
|
+
font: Nt
|
|
990
|
+
}, V = {
|
|
976
991
|
name: "terminal",
|
|
977
992
|
background: "#0E0E0E",
|
|
978
993
|
text: "#C0C0C0",
|
|
@@ -997,18 +1012,18 @@ var I = "#2eb88a", L = "#e85a67", Nt = [
|
|
|
997
1012
|
sizeMedium: 12,
|
|
998
1013
|
sizeLarge: 14
|
|
999
1014
|
}
|
|
1000
|
-
},
|
|
1001
|
-
R.volumeUp,
|
|
1002
|
-
R.volumeDown,
|
|
1015
|
+
}, It = new Set([
|
|
1003
1016
|
z.volumeUp,
|
|
1004
1017
|
z.volumeDown,
|
|
1005
1018
|
B.volumeUp,
|
|
1006
|
-
B.volumeDown
|
|
1019
|
+
B.volumeDown,
|
|
1020
|
+
V.volumeUp,
|
|
1021
|
+
V.volumeDown
|
|
1007
1022
|
]);
|
|
1008
|
-
function
|
|
1023
|
+
function Lt(e) {
|
|
1009
1024
|
let t = (e, t) => {
|
|
1010
|
-
if (!
|
|
1011
|
-
let n =
|
|
1025
|
+
if (!It.has(e)) return e;
|
|
1026
|
+
let n = I(t);
|
|
1012
1027
|
return n === t ? e : n;
|
|
1013
1028
|
};
|
|
1014
1029
|
return {
|
|
@@ -1018,67 +1033,67 @@ function V(e) {
|
|
|
1018
1033
|
}
|
|
1019
1034
|
//#endregion
|
|
1020
1035
|
//#region src/utils/chartStyle.ts
|
|
1021
|
-
var
|
|
1036
|
+
var Rt = [
|
|
1022
1037
|
"solid",
|
|
1023
1038
|
"dashed",
|
|
1024
1039
|
"dotted"
|
|
1025
|
-
],
|
|
1040
|
+
], zt = 20, Bt = 64, Vt = 2, Ht = [
|
|
1026
1041
|
/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
|
|
1027
1042
|
/^[a-z]{3,30}$/i,
|
|
1028
1043
|
/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
|
|
1029
1044
|
];
|
|
1030
|
-
function
|
|
1031
|
-
return typeof e == "string" && e.length <=
|
|
1045
|
+
function Ut(e) {
|
|
1046
|
+
return typeof e == "string" && e.length <= Bt && Ht.some((t) => t.test(e.trim()));
|
|
1032
1047
|
}
|
|
1033
|
-
function
|
|
1048
|
+
function Wt(e, t) {
|
|
1034
1049
|
switch (e) {
|
|
1035
|
-
case "color": return
|
|
1036
|
-
case "lineStyle": return
|
|
1037
|
-
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <=
|
|
1050
|
+
case "color": return Ut(t);
|
|
1051
|
+
case "lineStyle": return Rt.includes(t);
|
|
1052
|
+
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= zt;
|
|
1038
1053
|
case "boolean": return typeof t == "boolean";
|
|
1039
1054
|
}
|
|
1040
1055
|
}
|
|
1041
|
-
function
|
|
1056
|
+
function Gt(e) {
|
|
1042
1057
|
return Object.prototype.hasOwnProperty.call(t, e);
|
|
1043
1058
|
}
|
|
1044
|
-
function
|
|
1059
|
+
function Kt(e) {
|
|
1045
1060
|
let n = {}, r = [];
|
|
1046
1061
|
if (typeof e != "object" || !e || Array.isArray(e)) return {
|
|
1047
1062
|
overrides: {},
|
|
1048
1063
|
rejected: r
|
|
1049
1064
|
};
|
|
1050
|
-
for (let [i, a] of Object.entries(e))
|
|
1065
|
+
for (let [i, a] of Object.entries(e)) Gt(i) ? a === null ? n[i] = null : Wt(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
|
|
1051
1066
|
return {
|
|
1052
1067
|
overrides: n,
|
|
1053
1068
|
rejected: r
|
|
1054
1069
|
};
|
|
1055
1070
|
}
|
|
1056
|
-
function
|
|
1071
|
+
function qt(e) {
|
|
1057
1072
|
if (typeof e != "object" || !e || Array.isArray(e)) return null;
|
|
1058
1073
|
let { background: t, separator: n } = e, r = {
|
|
1059
|
-
...
|
|
1060
|
-
...
|
|
1074
|
+
...Ut(t) ? { background: t } : {},
|
|
1075
|
+
...Ut(n) ? { separator: n } : {}
|
|
1061
1076
|
};
|
|
1062
1077
|
return Object.keys(r).length > 0 ? r : null;
|
|
1063
1078
|
}
|
|
1064
|
-
var
|
|
1065
|
-
function
|
|
1079
|
+
var Jt = /^[A-Za-z0-9_]{1,32}$/;
|
|
1080
|
+
function Yt(e) {
|
|
1066
1081
|
if (typeof e != "object" || !e || Array.isArray(e)) return;
|
|
1067
1082
|
let t = {};
|
|
1068
1083
|
for (let [n, r] of Object.entries(e)) {
|
|
1069
|
-
if (!
|
|
1084
|
+
if (!Jt.test(n) || typeof r != "object" || !r) continue;
|
|
1070
1085
|
let { lineStyle: e, visible: i } = r, a = {
|
|
1071
|
-
...
|
|
1086
|
+
...Rt.includes(e) ? { lineStyle: e } : {},
|
|
1072
1087
|
...typeof i == "boolean" ? { visible: i } : {}
|
|
1073
1088
|
};
|
|
1074
1089
|
Object.keys(a).length > 0 && (t[n] = a);
|
|
1075
1090
|
}
|
|
1076
1091
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
1077
1092
|
}
|
|
1078
|
-
function
|
|
1093
|
+
function Xt(e, t, n = 1) {
|
|
1079
1094
|
return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
|
|
1080
1095
|
}
|
|
1081
|
-
function
|
|
1096
|
+
function Zt(e, t, n) {
|
|
1082
1097
|
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;
|
|
1083
1098
|
return {
|
|
1084
1099
|
up: o,
|
|
@@ -1086,12 +1101,12 @@ function qt(e, t, n) {
|
|
|
1086
1101
|
wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
|
|
1087
1102
|
wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
|
|
1088
1103
|
line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
|
|
1089
|
-
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ??
|
|
1104
|
+
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? Vt,
|
|
1090
1105
|
top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
|
|
1091
1106
|
bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
|
|
1092
1107
|
};
|
|
1093
1108
|
}
|
|
1094
|
-
function
|
|
1109
|
+
function H(e, t, n) {
|
|
1095
1110
|
return {
|
|
1096
1111
|
visible: e(`${t}.visible`) ?? n.visible,
|
|
1097
1112
|
color: e(`${t}.color`) ?? n.color,
|
|
@@ -1099,21 +1114,21 @@ function U(e, t, n) {
|
|
|
1099
1114
|
width: e(`${t}.width`) ?? n.width
|
|
1100
1115
|
};
|
|
1101
1116
|
}
|
|
1102
|
-
function
|
|
1103
|
-
let { style: r, ...i } = e, a = n, o = (e) => a[e], s =
|
|
1117
|
+
function Qt(e, t, n) {
|
|
1118
|
+
let { style: r, ...i } = e, a = n, o = (e) => a[e], s = Zt(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
|
|
1104
1119
|
panes: {
|
|
1105
1120
|
background: l("panes.background", c),
|
|
1106
1121
|
separator: l("panes.separatorColor", i.axisLine),
|
|
1107
1122
|
title: l("panes.titleColor", i.textSecondary)
|
|
1108
1123
|
},
|
|
1109
1124
|
grid: {
|
|
1110
|
-
horizontal:
|
|
1125
|
+
horizontal: H(o, "grid.horizontal", {
|
|
1111
1126
|
visible: !0,
|
|
1112
1127
|
color: i.grid,
|
|
1113
1128
|
style: "solid",
|
|
1114
1129
|
width: 1
|
|
1115
1130
|
}),
|
|
1116
|
-
vertical:
|
|
1131
|
+
vertical: H(o, "grid.vertical", {
|
|
1117
1132
|
visible: !0,
|
|
1118
1133
|
color: i.grid,
|
|
1119
1134
|
style: "solid",
|
|
@@ -1121,13 +1136,13 @@ function Jt(e, t, n) {
|
|
|
1121
1136
|
})
|
|
1122
1137
|
},
|
|
1123
1138
|
crosshair: {
|
|
1124
|
-
horizontal:
|
|
1139
|
+
horizontal: H(o, "crosshair.horizontal", {
|
|
1125
1140
|
visible: !0,
|
|
1126
1141
|
color: i.crosshair,
|
|
1127
1142
|
style: "dashed",
|
|
1128
1143
|
width: 1
|
|
1129
1144
|
}),
|
|
1130
|
-
vertical:
|
|
1145
|
+
vertical: H(o, "crosshair.vertical", {
|
|
1131
1146
|
visible: !0,
|
|
1132
1147
|
color: i.crosshair,
|
|
1133
1148
|
style: "dashed",
|
|
@@ -1199,7 +1214,7 @@ function Jt(e, t, n) {
|
|
|
1199
1214
|
style: d
|
|
1200
1215
|
};
|
|
1201
1216
|
}
|
|
1202
|
-
var
|
|
1217
|
+
var $t = {
|
|
1203
1218
|
"background.color": (e) => e.background,
|
|
1204
1219
|
"panes.background": (e, t) => t.panes.background,
|
|
1205
1220
|
"panes.separatorColor": (e, t) => t.panes.separator,
|
|
@@ -1218,8 +1233,8 @@ var Yt = {
|
|
|
1218
1233
|
"lastPrice.downColor": (e, t) => t.lastPrice.down,
|
|
1219
1234
|
"lastPrice.style": (e, t) => t.lastPrice.style,
|
|
1220
1235
|
"lastPrice.width": (e, t) => t.lastPrice.width,
|
|
1221
|
-
"volume.upColor": (e) =>
|
|
1222
|
-
"volume.downColor": (e) =>
|
|
1236
|
+
"volume.upColor": (e) => Lt(e).up,
|
|
1237
|
+
"volume.downColor": (e) => Lt(e).down,
|
|
1223
1238
|
"sessionBreaks.color": (e, t) => t.sessionBreaks.color,
|
|
1224
1239
|
"sessionBreaks.style": (e, t) => t.sessionBreaks.style,
|
|
1225
1240
|
"sessionBreaks.width": (e, t) => t.sessionBreaks.width,
|
|
@@ -1236,16 +1251,16 @@ var Yt = {
|
|
|
1236
1251
|
"tradeZones.lossColor": (e, t) => t.tradeZones.loss,
|
|
1237
1252
|
"tradeZones.activeColor": (e, t) => t.tradeZones.active,
|
|
1238
1253
|
"drawings.handleColor": (e, t) => t.drawings.handle
|
|
1239
|
-
},
|
|
1254
|
+
}, en = {
|
|
1240
1255
|
visible: "visible",
|
|
1241
1256
|
color: "color",
|
|
1242
1257
|
style: "style",
|
|
1243
1258
|
width: "width"
|
|
1244
1259
|
};
|
|
1245
|
-
function
|
|
1260
|
+
function tn(e, t, n, r = "candlestick") {
|
|
1246
1261
|
let i = n.split(".");
|
|
1247
1262
|
if (i[0] === "series") {
|
|
1248
|
-
let n =
|
|
1263
|
+
let n = Zt(e, (e) => t[e], i[1]);
|
|
1249
1264
|
switch (i[2]) {
|
|
1250
1265
|
case "upColor": return n.up;
|
|
1251
1266
|
case "downColor": return n.down;
|
|
@@ -1258,12 +1273,12 @@ function Zt(e, t, n, r = "candlestick") {
|
|
|
1258
1273
|
case "bottomColor": return n.bottom;
|
|
1259
1274
|
}
|
|
1260
1275
|
}
|
|
1261
|
-
let a =
|
|
1262
|
-
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][
|
|
1276
|
+
let a = Qt(e, r, t), o = a.style;
|
|
1277
|
+
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][en[i[2]]] : $t[n]?.(a, o) ?? null;
|
|
1263
1278
|
}
|
|
1264
1279
|
//#endregion
|
|
1265
1280
|
//#region src/constants/defaults.ts
|
|
1266
|
-
var
|
|
1281
|
+
var nn = {
|
|
1267
1282
|
autoScale: !0,
|
|
1268
1283
|
rightMargin: 5,
|
|
1269
1284
|
minBarSpacing: 2,
|
|
@@ -1274,7 +1289,7 @@ var Qt = {
|
|
|
1274
1289
|
vLineStyle: "solid"
|
|
1275
1290
|
},
|
|
1276
1291
|
crosshair: { mode: "magnet" }
|
|
1277
|
-
},
|
|
1292
|
+
}, rn = [
|
|
1278
1293
|
"1s",
|
|
1279
1294
|
"1m",
|
|
1280
1295
|
"3m",
|
|
@@ -1291,7 +1306,7 @@ var Qt = {
|
|
|
1291
1306
|
"3d",
|
|
1292
1307
|
"1w",
|
|
1293
1308
|
"1M"
|
|
1294
|
-
],
|
|
1309
|
+
], an = [
|
|
1295
1310
|
"1m",
|
|
1296
1311
|
"5m",
|
|
1297
1312
|
"15m",
|
|
@@ -1305,7 +1320,7 @@ var Qt = {
|
|
|
1305
1320
|
"3M",
|
|
1306
1321
|
"6M",
|
|
1307
1322
|
"12M"
|
|
1308
|
-
],
|
|
1323
|
+
], on = [
|
|
1309
1324
|
"1m",
|
|
1310
1325
|
"5m",
|
|
1311
1326
|
"15m",
|
|
@@ -1315,7 +1330,7 @@ var Qt = {
|
|
|
1315
1330
|
"1d",
|
|
1316
1331
|
"1w",
|
|
1317
1332
|
"1M"
|
|
1318
|
-
],
|
|
1333
|
+
], sn = [
|
|
1319
1334
|
"1m",
|
|
1320
1335
|
"5m",
|
|
1321
1336
|
"15m",
|
|
@@ -1323,7 +1338,7 @@ var Qt = {
|
|
|
1323
1338
|
"4h",
|
|
1324
1339
|
"1d",
|
|
1325
1340
|
"1w"
|
|
1326
|
-
],
|
|
1341
|
+
], cn = 8, ln = 2, un = 70, dn = 30, fn = 60, pn = 120, U = {
|
|
1327
1342
|
candlestick: "Candlestick",
|
|
1328
1343
|
line: "Line",
|
|
1329
1344
|
area: "Area",
|
|
@@ -1426,7 +1441,7 @@ var Qt = {
|
|
|
1426
1441
|
error: "Error",
|
|
1427
1442
|
numberDecimalSeparator: ".",
|
|
1428
1443
|
numberGroupSeparator: ","
|
|
1429
|
-
},
|
|
1444
|
+
}, mn = {
|
|
1430
1445
|
candlestick: "Nến",
|
|
1431
1446
|
line: "Đường",
|
|
1432
1447
|
area: "Vùng",
|
|
@@ -1529,43 +1544,43 @@ var Qt = {
|
|
|
1529
1544
|
error: "Lỗi",
|
|
1530
1545
|
numberDecimalSeparator: ",",
|
|
1531
1546
|
numberGroupSeparator: "."
|
|
1532
|
-
},
|
|
1533
|
-
function
|
|
1534
|
-
|
|
1547
|
+
}, W = new Map([["en", U], ["vi", mn]]), G = "en", hn = U;
|
|
1548
|
+
function gn(e) {
|
|
1549
|
+
G = e, hn = W.get(e) ?? U;
|
|
1535
1550
|
}
|
|
1536
|
-
function
|
|
1537
|
-
return
|
|
1551
|
+
function _n() {
|
|
1552
|
+
return G;
|
|
1538
1553
|
}
|
|
1539
|
-
function
|
|
1540
|
-
return
|
|
1554
|
+
function vn(e) {
|
|
1555
|
+
return hn[e] ?? U[e] ?? e;
|
|
1541
1556
|
}
|
|
1542
|
-
function
|
|
1543
|
-
|
|
1557
|
+
function yn(e, t) {
|
|
1558
|
+
W.set(e, t);
|
|
1544
1559
|
}
|
|
1545
|
-
function
|
|
1546
|
-
return
|
|
1560
|
+
function bn(e) {
|
|
1561
|
+
return W.get(e ?? G) ?? U;
|
|
1547
1562
|
}
|
|
1548
|
-
function
|
|
1549
|
-
let r =
|
|
1563
|
+
function K(e, t = 2, n) {
|
|
1564
|
+
let r = W.get(n ?? G) ?? U, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
|
|
1550
1565
|
for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
|
|
1551
1566
|
return c && (u = "-" + u), s ? u + i + s : u;
|
|
1552
1567
|
}
|
|
1553
|
-
function
|
|
1554
|
-
return
|
|
1568
|
+
function xn(e) {
|
|
1569
|
+
return K(e, 0, "vi");
|
|
1555
1570
|
}
|
|
1556
|
-
function
|
|
1557
|
-
return e >= 1e9 ?
|
|
1571
|
+
function Sn(e, t) {
|
|
1572
|
+
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);
|
|
1558
1573
|
}
|
|
1559
1574
|
//#endregion
|
|
1560
1575
|
//#region src/market/presets.ts
|
|
1561
|
-
var
|
|
1576
|
+
var q = {
|
|
1562
1577
|
up: "#22C55E",
|
|
1563
1578
|
down: "#EF4444",
|
|
1564
1579
|
unchanged: "#EAB308",
|
|
1565
1580
|
ceiling: "#D946EF",
|
|
1566
1581
|
floor: "#06B6D4",
|
|
1567
1582
|
reference: "#EAB308"
|
|
1568
|
-
},
|
|
1583
|
+
}, J = "Asia/Ho_Chi_Minh", Cn = [
|
|
1569
1584
|
{
|
|
1570
1585
|
name: "ATO",
|
|
1571
1586
|
startTime: "09:00",
|
|
@@ -1596,7 +1611,7 @@ var J = {
|
|
|
1596
1611
|
endTime: "14:45",
|
|
1597
1612
|
type: "preClose"
|
|
1598
1613
|
}
|
|
1599
|
-
],
|
|
1614
|
+
], wn = [
|
|
1600
1615
|
{
|
|
1601
1616
|
name: "Phiên 1",
|
|
1602
1617
|
startTime: "09:15",
|
|
@@ -1627,7 +1642,7 @@ var J = {
|
|
|
1627
1642
|
endTime: "15:00",
|
|
1628
1643
|
type: "postClose"
|
|
1629
1644
|
}
|
|
1630
|
-
],
|
|
1645
|
+
], Tn = [
|
|
1631
1646
|
{
|
|
1632
1647
|
name: "Phiên 1",
|
|
1633
1648
|
startTime: "09:15",
|
|
@@ -1646,7 +1661,7 @@ var J = {
|
|
|
1646
1661
|
endTime: "14:30",
|
|
1647
1662
|
type: "continuous"
|
|
1648
1663
|
}
|
|
1649
|
-
],
|
|
1664
|
+
], En = [
|
|
1650
1665
|
{
|
|
1651
1666
|
name: "ATO",
|
|
1652
1667
|
startTime: "08:45",
|
|
@@ -1677,7 +1692,7 @@ var J = {
|
|
|
1677
1692
|
endTime: "14:45",
|
|
1678
1693
|
type: "preClose"
|
|
1679
1694
|
}
|
|
1680
|
-
],
|
|
1695
|
+
], Dn = {
|
|
1681
1696
|
type: "stock",
|
|
1682
1697
|
exchange: "HOSE",
|
|
1683
1698
|
currency: "VND",
|
|
@@ -1698,48 +1713,48 @@ var J = {
|
|
|
1698
1713
|
step: .1
|
|
1699
1714
|
}
|
|
1700
1715
|
],
|
|
1701
|
-
timeZone:
|
|
1716
|
+
timeZone: J,
|
|
1702
1717
|
priceLimits: {
|
|
1703
1718
|
enabled: !0,
|
|
1704
1719
|
ceilingPercent: 7,
|
|
1705
1720
|
floorPercent: 7
|
|
1706
1721
|
},
|
|
1707
|
-
sessions:
|
|
1708
|
-
colorScheme:
|
|
1709
|
-
},
|
|
1710
|
-
...
|
|
1722
|
+
sessions: Cn,
|
|
1723
|
+
colorScheme: q
|
|
1724
|
+
}, On = {
|
|
1725
|
+
...Dn,
|
|
1711
1726
|
priceSteps: void 0
|
|
1712
|
-
},
|
|
1727
|
+
}, kn = {
|
|
1713
1728
|
type: "stock",
|
|
1714
1729
|
exchange: "HNX",
|
|
1715
1730
|
currency: "VND",
|
|
1716
1731
|
pricePrecision: 1,
|
|
1717
1732
|
volumeUnit: 100,
|
|
1718
1733
|
priceStep: .1,
|
|
1719
|
-
timeZone:
|
|
1734
|
+
timeZone: J,
|
|
1720
1735
|
priceLimits: {
|
|
1721
1736
|
enabled: !0,
|
|
1722
1737
|
ceilingPercent: 10,
|
|
1723
1738
|
floorPercent: 10
|
|
1724
1739
|
},
|
|
1725
|
-
sessions:
|
|
1726
|
-
colorScheme:
|
|
1727
|
-
},
|
|
1740
|
+
sessions: wn,
|
|
1741
|
+
colorScheme: q
|
|
1742
|
+
}, An = {
|
|
1728
1743
|
type: "stock",
|
|
1729
1744
|
exchange: "UPCOM",
|
|
1730
1745
|
currency: "VND",
|
|
1731
1746
|
pricePrecision: 1,
|
|
1732
1747
|
volumeUnit: 100,
|
|
1733
1748
|
priceStep: .1,
|
|
1734
|
-
timeZone:
|
|
1749
|
+
timeZone: J,
|
|
1735
1750
|
priceLimits: {
|
|
1736
1751
|
enabled: !0,
|
|
1737
1752
|
ceilingPercent: 15,
|
|
1738
1753
|
floorPercent: 15
|
|
1739
1754
|
},
|
|
1740
|
-
sessions:
|
|
1741
|
-
colorScheme:
|
|
1742
|
-
},
|
|
1755
|
+
sessions: Tn,
|
|
1756
|
+
colorScheme: q
|
|
1757
|
+
}, jn = {
|
|
1743
1758
|
type: "futures",
|
|
1744
1759
|
exchange: "HNX",
|
|
1745
1760
|
currency: "VND",
|
|
@@ -1747,20 +1762,20 @@ var J = {
|
|
|
1747
1762
|
volumeUnit: 1,
|
|
1748
1763
|
priceStep: .1,
|
|
1749
1764
|
contractMultiplier: 1e5,
|
|
1750
|
-
timeZone:
|
|
1765
|
+
timeZone: J,
|
|
1751
1766
|
priceLimits: {
|
|
1752
1767
|
enabled: !0,
|
|
1753
1768
|
ceilingPercent: 7,
|
|
1754
1769
|
floorPercent: 7
|
|
1755
1770
|
},
|
|
1756
|
-
sessions:
|
|
1757
|
-
colorScheme:
|
|
1758
|
-
},
|
|
1771
|
+
sessions: En,
|
|
1772
|
+
colorScheme: q
|
|
1773
|
+
}, Mn = {
|
|
1759
1774
|
type: "crypto",
|
|
1760
1775
|
currency: "USDT",
|
|
1761
1776
|
pricePrecision: 2,
|
|
1762
1777
|
priceLimits: { enabled: !1 }
|
|
1763
|
-
},
|
|
1778
|
+
}, Nn = {
|
|
1764
1779
|
type: "stock",
|
|
1765
1780
|
exchange: "NYSE",
|
|
1766
1781
|
currency: "USD",
|
|
@@ -1789,77 +1804,77 @@ var J = {
|
|
|
1789
1804
|
}
|
|
1790
1805
|
]
|
|
1791
1806
|
};
|
|
1792
|
-
function
|
|
1807
|
+
function Pn(e) {
|
|
1793
1808
|
return {
|
|
1794
1809
|
...e,
|
|
1795
|
-
candleUp:
|
|
1796
|
-
candleDown:
|
|
1797
|
-
candleUpWick:
|
|
1798
|
-
candleDownWick:
|
|
1799
|
-
volumeUp:
|
|
1800
|
-
volumeDown:
|
|
1810
|
+
candleUp: q.up,
|
|
1811
|
+
candleDown: q.down,
|
|
1812
|
+
candleUpWick: q.up,
|
|
1813
|
+
candleDownWick: q.down,
|
|
1814
|
+
volumeUp: I(q.up),
|
|
1815
|
+
volumeDown: I(q.down)
|
|
1801
1816
|
};
|
|
1802
1817
|
}
|
|
1803
|
-
var
|
|
1804
|
-
function
|
|
1818
|
+
var Y = 1e-9;
|
|
1819
|
+
function Fn(e, t) {
|
|
1805
1820
|
let n = t.priceStep;
|
|
1806
|
-
for (let r of t.priceSteps ?? []) e +
|
|
1821
|
+
for (let r of t.priceSteps ?? []) e + Y >= r.from && (n = r.step);
|
|
1807
1822
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
1808
1823
|
}
|
|
1809
|
-
function
|
|
1824
|
+
function In(e, t) {
|
|
1810
1825
|
let n = t.priceStep;
|
|
1811
|
-
for (let r of t.priceSteps ?? []) e -
|
|
1826
|
+
for (let r of t.priceSteps ?? []) e - Y > r.from && (n = r.step);
|
|
1812
1827
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
1813
1828
|
}
|
|
1814
|
-
function
|
|
1815
|
-
let r =
|
|
1829
|
+
function X(e, t, n = "nearest") {
|
|
1830
|
+
let r = Fn(e, t);
|
|
1816
1831
|
if (r === void 0 || !Number.isFinite(e)) return e;
|
|
1817
|
-
let i = e / r, a = n === "down" ? Math.floor(i +
|
|
1818
|
-
return Number((a * r).toFixed(
|
|
1832
|
+
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(ft(r)));
|
|
1819
1834
|
}
|
|
1820
|
-
function
|
|
1835
|
+
function Ln(e, t) {
|
|
1821
1836
|
if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
|
|
1822
|
-
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 =
|
|
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 = Fn(i, t);
|
|
1823
1838
|
if (s === void 0) return {
|
|
1824
1839
|
ceiling: a,
|
|
1825
1840
|
floor: o,
|
|
1826
1841
|
reference: i
|
|
1827
1842
|
};
|
|
1828
|
-
let c =
|
|
1829
|
-
if (Math.abs(i - s) <
|
|
1843
|
+
let c = X(i + s, t);
|
|
1844
|
+
if (Math.abs(i - s) < Y) return {
|
|
1830
1845
|
ceiling: c,
|
|
1831
1846
|
floor: i,
|
|
1832
1847
|
reference: i
|
|
1833
1848
|
};
|
|
1834
|
-
let l =
|
|
1835
|
-
return l <= i && (l = c), u >= i && (u =
|
|
1849
|
+
let l = X(a, t, "down"), u = X(o, t, "up");
|
|
1850
|
+
return l <= i && (l = c), u >= i && (u = X(i - (In(i, t) ?? s), t)), u <= 0 && (u = i), {
|
|
1836
1851
|
ceiling: l,
|
|
1837
1852
|
floor: u,
|
|
1838
1853
|
reference: i
|
|
1839
1854
|
};
|
|
1840
1855
|
}
|
|
1841
|
-
var
|
|
1842
|
-
function
|
|
1856
|
+
var Z = (e, t) => Math.round(e * t * 1e9) / 1e9;
|
|
1857
|
+
function Rn(e, t) {
|
|
1843
1858
|
let n = Math.round(Math.log10(t));
|
|
1844
1859
|
return {
|
|
1845
1860
|
...e,
|
|
1846
1861
|
pricePrecision: e.pricePrecision === void 0 ? void 0 : Math.max(0, e.pricePrecision - n),
|
|
1847
|
-
priceStep: e.priceStep === void 0 ? void 0 :
|
|
1862
|
+
priceStep: e.priceStep === void 0 ? void 0 : Z(e.priceStep, t),
|
|
1848
1863
|
priceSteps: e.priceSteps?.map((e) => ({
|
|
1849
|
-
from:
|
|
1850
|
-
step:
|
|
1864
|
+
from: Z(e.from, t),
|
|
1865
|
+
step: Z(e.step, t)
|
|
1851
1866
|
})),
|
|
1852
1867
|
priceLimits: e.priceLimits && {
|
|
1853
1868
|
...e.priceLimits,
|
|
1854
|
-
referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 :
|
|
1869
|
+
referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 : Z(e.priceLimits.referencePrice, t)
|
|
1855
1870
|
}
|
|
1856
1871
|
};
|
|
1857
1872
|
}
|
|
1858
|
-
var
|
|
1859
|
-
function
|
|
1873
|
+
var zn = 6e4, Bn = 864e5;
|
|
1874
|
+
function Vn(e, t) {
|
|
1860
1875
|
let n, r;
|
|
1861
1876
|
if (t) {
|
|
1862
|
-
let i = new Date(e +
|
|
1877
|
+
let i = new Date(e + y(t, e) * zn);
|
|
1863
1878
|
n = i.getUTCHours(), r = i.getUTCMinutes();
|
|
1864
1879
|
} else {
|
|
1865
1880
|
let t = new Date(e);
|
|
@@ -1867,37 +1882,37 @@ function Ln(e, t) {
|
|
|
1867
1882
|
}
|
|
1868
1883
|
return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
1869
1884
|
}
|
|
1870
|
-
function
|
|
1871
|
-
if (n !== void 0 && !
|
|
1872
|
-
let r =
|
|
1885
|
+
function Hn(e, t = Date.now(), n) {
|
|
1886
|
+
if (n !== void 0 && !v(n)) return null;
|
|
1887
|
+
let r = Vn(t, n);
|
|
1873
1888
|
for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
|
|
1874
1889
|
return null;
|
|
1875
1890
|
}
|
|
1876
|
-
var
|
|
1891
|
+
var Q = (e) => String(e).padStart(2, "0"), $ = (e) => {
|
|
1877
1892
|
let t = new Date(e);
|
|
1878
|
-
return `${t.getUTCFullYear()}-${
|
|
1879
|
-
},
|
|
1880
|
-
function
|
|
1881
|
-
let r = Date.UTC(e, t - 1, 1), i = 1 + (
|
|
1893
|
+
return `${t.getUTCFullYear()}-${Q(t.getUTCMonth() + 1)}-${Q(t.getUTCDate())}`;
|
|
1894
|
+
}, Un = 4, Wn = 7 * 36e5;
|
|
1895
|
+
function Gn(e, t, n) {
|
|
1896
|
+
let r = Date.UTC(e, t - 1, 1), i = 1 + (Un - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
|
|
1882
1897
|
let t = new Date(e).getUTCDay();
|
|
1883
|
-
return t === 0 || t === 6 || (n?.(
|
|
1898
|
+
return t === 0 || t === 6 || (n?.($(e)) ?? !1);
|
|
1884
1899
|
};
|
|
1885
|
-
for (; o(a);) a -=
|
|
1886
|
-
return
|
|
1900
|
+
for (; o(a);) a -= Bn;
|
|
1901
|
+
return $(a);
|
|
1887
1902
|
}
|
|
1888
|
-
function
|
|
1889
|
-
let n =
|
|
1890
|
-
symbol: `VN30F${
|
|
1903
|
+
function Kn(e, t) {
|
|
1904
|
+
let n = $(e + Wn), r = (e, n) => ({
|
|
1905
|
+
symbol: `VN30F${Q(e % 100)}${Q(n)}`,
|
|
1891
1906
|
year: e,
|
|
1892
1907
|
month: n,
|
|
1893
|
-
lastTradingDay:
|
|
1894
|
-
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e +
|
|
1908
|
+
lastTradingDay: Gn(e, n, t)
|
|
1909
|
+
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + Wn), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
|
|
1895
1910
|
n > o.lastTradingDay && (o = i(o));
|
|
1896
1911
|
let s = [o, i(o)], c = i(s[1]);
|
|
1897
1912
|
for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
|
|
1898
1913
|
return s;
|
|
1899
1914
|
}
|
|
1900
1915
|
//#endregion
|
|
1901
|
-
export { t as CHART_STYLE_KEYS,
|
|
1916
|
+
export { t as CHART_STYLE_KEYS, V as DARK_TERMINAL, z as DARK_THEME, ln as DEFAULT_BAR_SPACING, cn as DEFAULT_BAR_WIDTH, nn as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, Mt as DEFAULT_FONT_FAMILY, pn as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, sn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, wn as HNX_SESSIONS, Cn as HOSE_SESSIONS, B as LIGHT_THEME, e as LayerType, Mn as MARKET_CRYPTO, kn as MARKET_HNX, Dn as MARKET_HOSE, On as MARKET_HOSE_ETF, Nn as MARKET_NYSE, An as MARKET_UPCOM, jn as MARKET_VN30F, fn as MIN_PANEL_HEIGHT, se as MS_TIME_THRESHOLD, un as PRICE_AXIS_WIDTH, et as PRICE_SOURCES, F as TC_PALETTE, Ft as TC_SERIES_COLORS, rn as TIMEFRAMES_CRYPTO, on as TIMEFRAMES_FOREX, an as TIMEFRAMES_STOCK, dn as TIME_AXIS_HEIGHT, Tn as UPCOM_SESSIONS, En as VN30F_SESSIONS, q as VN_COLORS, Pt as VOLUME_ALPHA, Le as alignToTimeframe, qe as autoPricePrecision, ce as barTimeUnit, Ve as barsAreDaily, tn as chartStyleValue, ne as clamp, Ln as computePriceLimits, me as computePriceRange, oe as computeTickStep, Pn as createVNTheme, $e as detectPrecision, St as drawingOption, U as en, fe as findBarIndex, Ye as formatFraction, K as formatNumber, E as formatPrice, Je as formatPriceScaleLabel, Ie as formatTimestamp, xn as formatVND, Qe as formatVolume, Sn as formatVolumeLoc, Xe as fractionTick, Hn as getCurrentSession, _n as getLocale, bn as getLocaleStrings, ge as hexToRgba, it as indicatorSource, ie as inverseLerp, ze as isDateOnly, tt as isPriceSource, Fe as isTimeFrame, v as isValidTimeZone, re as lerp, ve as lerpColor, Xt as lineDash, mt as marketStatus, he as mergeBar, m as niceNumber, ue as normalizeBar, le as normalizeBarTime, x as offsetAt, pe as padPriceRange, at as parseIndicatorSource, C as parseTimeframe, lt as pickBaseTimeframe, Ze as priceFormatterFor, Fn as priceStepAt, dt as rankSymbols, Kt as readChartStyleOverrides, jt as readChartTypeOptions, Yt as readIndicatorPlotStyles, te as readNews, qt as readPaneStyle, l as readQuote, yn as registerLocale, st as resampleBars, Qt as resolveChartTheme, Ct as resolveDrawingOptions, Lt as resolveVolumeColors, X as roundToPriceStep, ae as roundToStep, bt as sanitizeDrawingOptions, At as sanitizeDrawingStyle, Rn as scaleMarketPrices, O as sessionMinute, gn as setLocale, de as sliceVisibleData, nt as sourcePrice, ft as stepDecimals, vn as t, Pe as tickBarCount, Re as timeParts, We as timeframeBucketStart, w as timeframeToMs, He as tzLabel, mn as vi, Kn as vn30fContracts, Gn as vn30fLastTradingDay, I as volumeColor, Oe as wallToUtc, _e as withAlpha, y as zoneOffsetMinutes, Ae as zonedDateFormatter };
|
|
1902
1917
|
|
|
1903
1918
|
//# sourceMappingURL=index.js.map
|