@tradecanvas/commons 1.50.0 → 1.52.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.js CHANGED
@@ -245,26 +245,26 @@ function ie(e, t, n) {
245
245
  function ae(e, t) {
246
246
  return Math.round(e / t) * t;
247
247
  }
248
- function m(e, t) {
248
+ function oe(e, t) {
249
249
  let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
250
250
  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;
251
251
  }
252
- function oe(e, t, n) {
253
- return m(m(t - e, !1) / (n - 1), !0);
252
+ function se(e, t, n) {
253
+ return oe(oe(t - e, !1) / (n - 1), !0);
254
254
  }
255
255
  //#endregion
256
256
  //#region src/utils/data.ts
257
- var se = 1e11;
258
- function ce(e) {
257
+ var ce = 1e11;
258
+ function le(e) {
259
259
  let t = e.length > 0 ? e[e.length - 1].time : NaN;
260
260
  return Number.isFinite(t) ? Math.abs(t) >= 1e11 ? 1 : 1e3 : 1;
261
261
  }
262
- function le(e, t) {
262
+ function ue(e, t) {
263
263
  return t === void 0 ? Math.abs(e) >= 1e11 ? e : e * 1e3 : e * t;
264
264
  }
265
- function ue(e) {
265
+ function de(e) {
266
266
  return {
267
- time: le(e.time ?? e.t ?? 0),
267
+ time: ue(e.time ?? e.t ?? 0),
268
268
  open: e.open ?? e.o ?? 0,
269
269
  high: e.high ?? e.h ?? 0,
270
270
  low: e.low ?? e.l ?? 0,
@@ -272,11 +272,11 @@ function ue(e) {
272
272
  volume: e.volume ?? e.v ?? 0
273
273
  };
274
274
  }
275
- function de(e, t, n) {
275
+ function fe(e, t, n) {
276
276
  let r = Math.max(0, t), i = Math.min(e.length, n + 1);
277
277
  return e.slice(r, i);
278
278
  }
279
- function fe(e, t) {
279
+ function pe(e, t) {
280
280
  let n = 0, r = e.length - 1;
281
281
  for (; n <= r;) {
282
282
  let i = n + r >>> 1;
@@ -286,7 +286,7 @@ function fe(e, t) {
286
286
  }
287
287
  return n;
288
288
  }
289
- function pe(e, t, n, r = !1) {
289
+ function me(e, t, n, r = !1) {
290
290
  let i = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
291
291
  if (Number.isFinite(i)) {
292
292
  let r = i || Math.log(1 + 2 * n), a = Math.exp(r * n);
@@ -301,7 +301,7 @@ function pe(e, t, n, r = !1) {
301
301
  max: t + a * n
302
302
  };
303
303
  }
304
- function me(e, t, n, r = !1) {
304
+ function he(e, t, n, r = !1) {
305
305
  let i = Math.max(1 - n.top - n.bottom, 2 ** -52), a = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
306
306
  if (Number.isFinite(a)) {
307
307
  let r = (a || Math.log(1.01)) / i;
@@ -316,7 +316,7 @@ function me(e, t, n, r = !1) {
316
316
  max: t + o * n.top
317
317
  };
318
318
  }
319
- function he(e, t, n, r = .05, i = !1) {
319
+ function ge(e, t, n, r = .05, i = !1) {
320
320
  if (e.length === 0) return {
321
321
  min: 0,
322
322
  max: 1
@@ -326,9 +326,9 @@ function he(e, t, n, r = .05, i = !1) {
326
326
  return s === Infinity ? {
327
327
  min: 0,
328
328
  max: 1
329
- } : pe(s, c, r, i);
329
+ } : me(s, c, r, i);
330
330
  }
331
- function ge(e, t) {
331
+ function _e(e, t) {
332
332
  return {
333
333
  ...e,
334
334
  high: Math.max(e.high, t.price),
@@ -339,27 +339,49 @@ function ge(e, t) {
339
339
  }
340
340
  //#endregion
341
341
  //#region src/utils/color.ts
342
- function _e(e, t = 1) {
342
+ function ve(e, t = 1) {
343
343
  let n = e.slice(1);
344
344
  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})`;
345
345
  }
346
- function h(e, t) {
346
+ function m(e, t) {
347
347
  let n = e.trim();
348
- if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return _e(n, t);
348
+ if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return ve(n, t);
349
349
  let r = n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);
350
350
  return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
351
351
  }
352
- function ve(e, t, n) {
353
- let r = (e) => (e = e.replace("#", ""), e.length === 3 && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]), {
354
- r: parseInt(e.slice(0, 2), 16),
355
- g: parseInt(e.slice(2, 4), 16),
356
- b: parseInt(e.slice(4, 6), 16)
357
- }), i = r(e), a = r(t);
358
- return `rgb(${Math.round(i.r + (a.r - i.r) * n)},${Math.round(i.g + (a.g - i.g) * n)},${Math.round(i.b + (a.b - i.b) * n)})`;
352
+ var ye = 3;
353
+ function be(e) {
354
+ let t = e.trim(), n = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(t);
355
+ if (n) {
356
+ let e = n[1];
357
+ e.length <= 4 && (e = [...e].map((e) => e + e).join(""));
358
+ let t = (t) => parseInt(e.slice(t, t + 2), 16);
359
+ return {
360
+ r: t(0),
361
+ g: t(2),
362
+ b: t(4),
363
+ a: e.length === 8 ? t(6) / 255 : 1
364
+ };
365
+ }
366
+ let r = /^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:\s*[,/]\s*([\d.]+)(%)?)?\s*\)$/i.exec(t);
367
+ if (!r) return null;
368
+ let i = r[4] === void 0 ? 1 : Number(r[4]) / (r[5] ? 100 : 1);
369
+ return {
370
+ r: Number(r[1]),
371
+ g: Number(r[2]),
372
+ b: Number(r[3]),
373
+ a: Math.min(1, Math.max(0, i))
374
+ };
375
+ }
376
+ function xe(e, t, n) {
377
+ let r = be(e), i = be(t);
378
+ if (!r || !i) return n < .5 ? e : t;
379
+ let a = r.a + (i.a - r.a) * n, o = (e, t) => a === 0 ? 0 : Math.round((e * r.a + (t * i.a - e * r.a) * n) / a), s = `${o(r.r, i.r)},${o(r.g, i.g)},${o(r.b, i.b)}`;
380
+ return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(ye))})`;
359
381
  }
360
382
  //#endregion
361
383
  //#region src/utils/timezone.ts
362
- var g = 6e4, _ = 1440 * g, v = 15 * g, ye = 8192, y = 7 * _, be = 4096, xe = new Set([
384
+ var h = 6e4, Se = 1440 * h, g = 15 * h, Ce = 8192, _ = 7 * Se, we = 4096, Te = new Set([
363
385
  "UTC",
364
386
  "Etc/UTC",
365
387
  "GMT",
@@ -370,9 +392,9 @@ var g = 6e4, _ = 1440 * g, v = 15 * g, ye = 8192, y = 7 * _, be = 4096, xe = new
370
392
  "Etc/Universal",
371
393
  "Zulu",
372
394
  "Etc/Zulu"
373
- ]), Se = /* @__PURE__ */ new Map(), b = /* @__PURE__ */ new Map(), Ce = /* @__PURE__ */ new Map();
374
- function we(e) {
375
- let t = Se.get(e);
395
+ ]), Ee = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map(), De = /* @__PURE__ */ new Map();
396
+ function Oe(e) {
397
+ let t = Ee.get(e);
376
398
  return t || (t = new Intl.DateTimeFormat("en-US", {
377
399
  timeZone: e,
378
400
  hourCycle: "h23",
@@ -382,34 +404,34 @@ function we(e) {
382
404
  hour: "numeric",
383
405
  minute: "numeric",
384
406
  second: "numeric"
385
- }), Se.set(e, t)), t;
407
+ }), Ee.set(e, t)), t;
386
408
  }
387
- function x(e) {
409
+ function y(e) {
388
410
  if (!e) return !1;
389
411
  try {
390
- return we(e), !0;
412
+ return Oe(e), !0;
391
413
  } catch {
392
414
  return !1;
393
415
  }
394
416
  }
395
- function S(e, t) {
396
- if (!Number.isFinite(t) || xe.has(e)) return 0;
397
- let n = Ce.get(e);
398
- n || (n = /* @__PURE__ */ new Map(), Ce.set(e, n));
399
- let r = Math.floor(t / y), i = n.get(r);
400
- return i || (i = Te(e, r * y), n.size >= be && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
417
+ function b(e, t) {
418
+ if (!Number.isFinite(t) || Te.has(e)) return 0;
419
+ let n = De.get(e);
420
+ n || (n = /* @__PURE__ */ new Map(), De.set(e, n));
421
+ let r = Math.floor(t / _), i = n.get(r);
422
+ return i || (i = ke(e, r * _), n.size >= we && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
401
423
  }
402
- function Te(e, t) {
403
- let n = C(e, t), r = t + y - v, i = C(e, r);
424
+ function ke(e, t) {
425
+ let n = x(e, t), r = t + _ - g, i = x(e, r);
404
426
  if (i === n) return {
405
427
  before: n,
406
428
  change: Infinity,
407
429
  after: i
408
430
  };
409
431
  let a = t;
410
- for (; r - a > v;) {
411
- let t = a + Math.floor((r - a) / v / 2) * v;
412
- C(e, t) === n ? a = t : r = t;
432
+ for (; r - a > g;) {
433
+ let t = a + Math.floor((r - a) / g / 2) * g;
434
+ x(e, t) === n ? a = t : r = t;
413
435
  }
414
436
  return {
415
437
  before: n,
@@ -417,11 +439,11 @@ function Te(e, t) {
417
439
  after: i
418
440
  };
419
441
  }
420
- function C(e, t) {
421
- let n = Math.floor(t / v), r = `${e}|${n}`, i = b.get(r);
442
+ function x(e, t) {
443
+ let n = Math.floor(t / g), r = `${e}|${n}`, i = v.get(r);
422
444
  if (i !== void 0) return i;
423
- let a = n * v, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
424
- for (let t of we(e).formatToParts(new Date(a))) {
445
+ let a = n * g, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
446
+ for (let t of Oe(e).formatToParts(new Date(a))) {
425
447
  let e = Number(t.value);
426
448
  switch (t.type) {
427
449
  case "year":
@@ -444,21 +466,24 @@ function C(e, t) {
444
466
  break;
445
467
  }
446
468
  }
447
- let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / g);
448
- return b.size >= ye && b.clear(), b.set(r, f), f;
469
+ let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / h);
470
+ return v.size >= Ce && v.clear(), v.set(r, f), f;
449
471
  }
450
- function w(e, t) {
451
- return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : S(e, t);
472
+ function S(e) {
473
+ return e === 0 || typeof e == "string" && Te.has(e);
452
474
  }
453
- function Ee(e, t) {
454
- let n = e - w(t, e - _) * g;
455
- if (n + w(t, n) * g === e) return n;
456
- let r = e - w(t, e + _) * g;
457
- return r + w(t, r) * g === e ? r : n;
475
+ function C(e, t) {
476
+ return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : b(e, t);
458
477
  }
459
- var De = /* @__PURE__ */ new Map();
460
- function Oe(e, t, n) {
461
- let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = De.get(r);
478
+ function Ae(e, t) {
479
+ let n = e - C(t, e - Se) * h;
480
+ if (n + C(t, n) * h === e) return n;
481
+ let r = e - C(t, e + Se) * h;
482
+ return r + C(t, r) * h === e ? r : n;
483
+ }
484
+ var je = /* @__PURE__ */ new Map();
485
+ function Me(e, t, n) {
486
+ let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = je.get(r);
462
487
  if (i) return i;
463
488
  let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
464
489
  try {
@@ -472,12 +497,12 @@ function Oe(e, t, n) {
472
497
  timeZone: a
473
498
  });
474
499
  }
475
- let s = typeof n == "number" ? n * g : 0;
476
- return i = (e) => o.format(new Date(e + s)), De.set(r, i), i;
500
+ let s = typeof n == "number" ? n * h : 0;
501
+ return i = (e) => o.format(new Date(e + s)), je.set(r, i), i;
477
502
  }
478
503
  //#endregion
479
504
  //#region src/utils/time.ts
480
- var ke = {
505
+ var Ne = {
481
506
  "1s": 1e3,
482
507
  "5s": 5e3,
483
508
  "15s": 15e3,
@@ -504,16 +529,16 @@ var ke = {
504
529
  "3M": 7776e6,
505
530
  "6M": 15552e6,
506
531
  "12M": 31536e6
507
- }, Ae = {
532
+ }, w = {
508
533
  s: 1e3,
509
534
  m: 6e4,
510
535
  h: 36e5,
511
536
  d: 864e5,
512
537
  w: 6048e5,
513
538
  M: 2592e6
514
- }, je = /^([1-9]\d*)([smhdwM])$/;
539
+ }, Pe = /^([1-9]\d*)([smhdwM])$/;
515
540
  function T(e) {
516
- let t = je.exec(e);
541
+ let t = Pe.exec(e);
517
542
  if (!t) return null;
518
543
  let n = Number(t[1]);
519
544
  return Number.isSafeInteger(n) ? {
@@ -521,23 +546,23 @@ function T(e) {
521
546
  unit: t[2]
522
547
  } : null;
523
548
  }
524
- var Me = 1e6;
525
- function Ne(e) {
549
+ var Fe = 1e6;
550
+ function Ie(e) {
526
551
  let t = /^([1-9]\d*)T$/.exec(e);
527
552
  if (!t) return null;
528
553
  let n = Number(t[1]);
529
- return Number.isSafeInteger(n) && n <= Me ? n : null;
554
+ return Number.isSafeInteger(n) && n <= Fe ? n : null;
530
555
  }
531
- function Pe(e) {
556
+ function Le(e) {
532
557
  return T(e) !== null;
533
558
  }
534
559
  function E(e) {
535
- let t = ke[e];
560
+ let t = Ne[e];
536
561
  if (t !== void 0) return t;
537
562
  let n = T(e);
538
- return n ? n.count * Ae[n.unit] : NaN;
563
+ return n ? n.count * w[n.unit] : NaN;
539
564
  }
540
- function Fe(e, t) {
565
+ function Re(e, t) {
541
566
  let n = new Date(e), r = E(t);
542
567
  return r >= 864e5 ? n.toLocaleDateString(void 0, {
543
568
  month: "short",
@@ -551,11 +576,11 @@ function Fe(e, t) {
551
576
  second: "2-digit"
552
577
  });
553
578
  }
554
- function Ie(e, t) {
579
+ function ze(e, t) {
555
580
  let n = E(t);
556
581
  return Math.floor(e / n) * n;
557
582
  }
558
- function Le(e, t) {
583
+ function Be(e, t) {
559
584
  if (t === null) {
560
585
  let t = new Date(e);
561
586
  return {
@@ -566,7 +591,7 @@ function Le(e, t) {
566
591
  minutes: t.getMinutes()
567
592
  };
568
593
  }
569
- let n = new Date(e + w(t, e) * 6e4);
594
+ let n = new Date(e + C(t, e) * 6e4);
570
595
  return {
571
596
  year: n.getUTCFullYear(),
572
597
  month: n.getUTCMonth() + 1,
@@ -575,93 +600,122 @@ function Le(e, t) {
575
600
  minutes: n.getUTCMinutes()
576
601
  };
577
602
  }
578
- function Re(e) {
603
+ function Ve(e) {
579
604
  return e.hours === 0 && e.minutes === 0;
580
605
  }
581
- var ze = 20 * 36e5;
582
- function Be(e) {
606
+ var He = 20 * 36e5;
607
+ function Ue(e) {
583
608
  let t = Math.min(e.length, 64);
584
609
  if (t < 2) return;
585
- let n = ce(e), r = Infinity;
610
+ let n = le(e), r = Infinity;
586
611
  for (let i = 1; i < t; i++) {
587
612
  let t = Math.abs(e[i].time - e[i - 1].time) * n;
588
613
  t > 0 && t < r && (r = t);
589
614
  }
590
- return r === Infinity ? void 0 : r >= ze;
615
+ return r === Infinity ? void 0 : r >= He;
591
616
  }
592
- function Ve(e, t = Date.now()) {
593
- let n = w(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
617
+ function We(e, t = Date.now()) {
618
+ let n = C(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
594
619
  return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
595
620
  }
596
- var He = Date.UTC(1970, 0, 5);
597
- function Ue(e, t, n = 1) {
598
- let { count: r, unit: i } = T(t) ?? {
599
- count: 1,
600
- unit: "m"
601
- };
602
- if (i === "s" || i === "m" || i === "h" || i === "d") {
603
- let t = r * Ae[i];
604
- return Math.floor(e / t) * t;
621
+ var Ge = Date.UTC(1970, 0, 5), Ke = w.m, D = w.d, qe = 24, Je = {
622
+ count: 1,
623
+ unit: "m"
624
+ }, Ye = 256, O = /* @__PURE__ */ new Map();
625
+ function Xe(e) {
626
+ let t = O.get(e);
627
+ return t || (t = T(e) ?? Je, O.size >= Ye && O.clear(), O.set(e, t)), t;
628
+ }
629
+ function Ze({ unit: e }) {
630
+ return e === "d" || e === "w" || e === "M";
631
+ }
632
+ function Qe(e) {
633
+ return e.unit === "h" ? e.count > 1 && qe % e.count === 0 : Ze(e);
634
+ }
635
+ function $e(e) {
636
+ return Qe(Xe(e));
637
+ }
638
+ function et(e) {
639
+ return Ze(Xe(e));
640
+ }
641
+ function tt(e) {
642
+ return e !== void 0 && !S(e);
643
+ }
644
+ function nt(e, t, n = 1) {
645
+ let r = Xe(t), i = typeof n == "number" ? n : n.weekStartsOn ?? 1, a = typeof n == "number" ? void 0 : n.timeZone;
646
+ return !tt(a) || !Qe(r) || typeof n == "object" && n.dates && e % D === 0 ? rt(e, r, i) : Ae(rt(e + C(a, e) * Ke, r, i), a);
647
+ }
648
+ function rt(e, { count: t, unit: n }, r) {
649
+ if (n === "s" || n === "m" || n === "h" || n === "d") {
650
+ let r = t * w[n];
651
+ return Math.floor(e / r) * r;
605
652
  }
606
- let a = new Date(e);
607
- if (i === "w") {
608
- let e = Ae.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
609
- if (r <= 1) return i;
610
- let o = Math.floor((i - He) / (7 * e));
611
- return He + Math.floor(o / r) * r * 7 * e;
653
+ let i = new Date(e);
654
+ if (n === "w") {
655
+ let e = (i.getUTCDay() - r + 7) % 7, n = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate() - e);
656
+ if (t <= 1) return n;
657
+ let a = Math.floor((n - Ge) / (7 * D));
658
+ return Ge + Math.floor(a / t) * t * 7 * D;
612
659
  }
613
- let o = a.getUTCFullYear() * 12 + a.getUTCMonth(), s = Math.floor(o / r) * r;
614
- return Date.UTC(Math.floor(s / 12), s % 12, 1);
660
+ let a = i.getUTCFullYear() * 12 + i.getUTCMonth(), o = Math.floor(a / t) * t;
661
+ return Date.UTC(Math.floor(o / 12), o % 12, 1);
662
+ }
663
+ function it(e, t, n) {
664
+ return e % D === 0 ? 0 : n && nt(e, "1d", { timeZone: n }) === e ? n : t;
665
+ }
666
+ function at(e, t, n) {
667
+ return Be(e, it(e, t, n));
615
668
  }
616
669
  //#endregion
617
670
  //#region src/utils/precision.ts
618
- var We = 64, D = /* @__PURE__ */ new Map();
619
- function Ge(e, t) {
620
- let n = `${e}|${t}`, r = D.get(n);
621
- return r || (D.size >= We && D.clear(), r = new Intl.NumberFormat(e, {
671
+ var ot = 64, k = /* @__PURE__ */ new Map();
672
+ function st(e, t) {
673
+ let n = `${e}|${t}`, r = k.get(n);
674
+ return r || (k.size >= ot && k.clear(), r = new Intl.NumberFormat(e, {
622
675
  minimumFractionDigits: t,
623
676
  maximumFractionDigits: t
624
- }), D.set(n, r)), r;
677
+ }), k.set(n, r)), r;
625
678
  }
626
- function Ke(e, t, n) {
627
- return t.formatPrice ? t.formatPrice(e) : O(e, n ?? qe(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
679
+ function ct(e, t, n) {
680
+ return t.formatPrice ? t.formatPrice(e) : A(e, n ?? t.pricePrecision ?? lt(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
628
681
  }
629
- function O(e, t = 2, n = "en-US") {
630
- return Ge(n, t).format(e);
682
+ function A(e, t = 2, n = "en-US") {
683
+ return st(n, t).format(e);
631
684
  }
632
- function qe(e, t) {
685
+ function lt(e, t) {
633
686
  if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
634
- let n = oe(e, t, 8);
687
+ let n = se(e, t, 8);
635
688
  return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
636
689
  }
637
- function Je(e, t, n, r = 2, i = "en-US") {
690
+ var ut = 2;
691
+ function dt(e, t, n, r = 2, i = "en-US") {
638
692
  if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
639
693
  if (t === "percentage") {
640
- let t = (e / n - 1) * 100;
641
- return `${t > 0 ? "+" : ""}${t.toFixed(2)}%`;
694
+ let t = (e / n - 1) * 100, r = A(Math.abs(t), ut, i);
695
+ return `${r === A(0, ut, i) ? "" : t > 0 ? "+" : "-"}${r}%`;
642
696
  }
643
- return O(e / n * 100, 2, i);
697
+ return A(e / n * 100, 2, i);
644
698
  }
645
- return O(e, r, i);
699
+ return A(e, r, i);
646
700
  }
647
- function Ye(e, t, n = 1) {
701
+ function ft(e, t, n = 1) {
648
702
  let r = Number.isInteger(n) && n > 1 ? n : 1;
649
703
  if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
650
704
  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)) : "";
651
705
  return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
652
706
  }
653
- function Xe(e) {
707
+ function pt(e) {
654
708
  if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
655
709
  let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
656
710
  return 1 / (e.denominator * t);
657
711
  }
658
- function Ze(e) {
659
- return e ? typeof e == "function" ? e : Xe(e) === null ? null : (t) => Ye(t, e.denominator, e.subDenominator) : null;
712
+ function mt(e) {
713
+ return e ? typeof e == "function" ? e : pt(e) === null ? null : (t) => ft(t, e.denominator, e.subDenominator) : null;
660
714
  }
661
- function Qe(e) {
715
+ function ht(e) {
662
716
  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);
663
717
  }
664
- function $e(e) {
718
+ function gt(e) {
665
719
  let t = 0;
666
720
  for (let n of e) {
667
721
  let e = n.toString(), r = e.indexOf(".");
@@ -671,7 +725,7 @@ function $e(e) {
671
725
  }
672
726
  //#endregion
673
727
  //#region src/utils/priceSource.ts
674
- var et = [
728
+ var _t = [
675
729
  "close",
676
730
  "open",
677
731
  "high",
@@ -681,10 +735,10 @@ var et = [
681
735
  "ohlc4",
682
736
  "hlcc4"
683
737
  ];
684
- function tt(e) {
685
- return typeof e == "string" && et.includes(e);
738
+ function vt(e) {
739
+ return typeof e == "string" && _t.includes(e);
686
740
  }
687
- function nt(e, t) {
741
+ function yt(e, t) {
688
742
  switch (t) {
689
743
  case "open": return e.open;
690
744
  case "high": return e.high;
@@ -696,13 +750,13 @@ function nt(e, t) {
696
750
  default: return e.close;
697
751
  }
698
752
  }
699
- var rt = /^ind:([^:]+):(.+)$/;
700
- function it(e, t) {
753
+ var bt = /^ind:([^:]+):(.+)$/;
754
+ function xt(e, t) {
701
755
  return `ind:${e}:${t}`;
702
756
  }
703
- function at(e) {
757
+ function St(e) {
704
758
  if (typeof e != "string") return null;
705
- let t = rt.exec(e);
759
+ let t = bt.exec(e);
706
760
  return t ? {
707
761
  instanceId: t[1],
708
762
  key: t[2]
@@ -710,53 +764,65 @@ function at(e) {
710
764
  }
711
765
  //#endregion
712
766
  //#region src/utils/resample.ts
713
- var ot = 864e5;
714
- function st(e, t, n = 1) {
715
- let r = [], i = null;
716
- for (let a of e) {
717
- let e = Ue(a.time, t, n);
718
- i === null || e !== i.time ? (i = {
767
+ var Ct = 864e5, wt = 6e4;
768
+ function Tt(e, t, n = 1) {
769
+ let r = Et(e, t, n), i = [], a = null;
770
+ for (let n of e) {
771
+ let e = nt(n.time, t, r);
772
+ a === null || e !== a.time ? (a = {
719
773
  time: e,
720
- open: a.open,
721
- high: a.high,
722
- low: a.low,
723
- close: a.close,
724
- volume: a.volume
725
- }, r.push(i)) : (a.high > i.high && (i.high = a.high), a.low < i.low && (i.low = a.low), i.close = a.close, i.volume += a.volume);
774
+ open: n.open,
775
+ high: n.high,
776
+ low: n.low,
777
+ close: n.close,
778
+ volume: n.volume
779
+ }, i.push(a)) : (n.high > a.high && (a.high = n.high), n.low < a.low && (a.low = n.low), a.close = n.close, a.volume += n.volume);
726
780
  }
727
- return r;
781
+ return i;
782
+ }
783
+ function Et(e, t, n) {
784
+ return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || S(n.timeZone) || !$e(t) ? n : {
785
+ ...n,
786
+ dates: Ue(e) === !0
787
+ };
728
788
  }
729
- var k = (e) => e === "s" || e === "m" || e === "h" || e === "d";
730
- function ct(e, t) {
789
+ var j = (e) => e === "s" || e === "m" || e === "h" || e === "d";
790
+ function Dt(e, t) {
731
791
  let n = T(e), r = T(t);
732
792
  if (!n || !r) return !1;
733
793
  let i = E(e);
734
- return n.unit === "d" && n.count > 1 ? !1 : k(r.unit) ? k(n.unit) && E(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : k(n.unit) && ot % i === 0;
735
- }
736
- function lt(e, t) {
737
- let n = null, r = 0;
738
- for (let i of t) {
739
- if (!ct(i, e)) continue;
740
- let t = E(i);
741
- t > r && (n = i, r = t);
794
+ return n.unit === "d" && n.count > 1 ? !1 : j(r.unit) ? j(n.unit) && E(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : j(n.unit) && Ct % i === 0;
795
+ }
796
+ function Ot(e, t) {
797
+ let n = E(e);
798
+ if (!(n < Ct)) return !0;
799
+ let r = (/* @__PURE__ */ new Date()).getUTCFullYear();
800
+ return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => C(t, e) * wt % n === 0);
801
+ }
802
+ function kt(e, t, n = {}) {
803
+ let { timeZone: r } = n, i = r !== void 0 && !S(r) && $e(e) ? r : void 0, a = null, o = 0;
804
+ for (let n of t) {
805
+ if (!Dt(n, e) || i !== void 0 && !Ot(n, i)) continue;
806
+ let t = E(n);
807
+ t > o && (a = n, o = t);
742
808
  }
743
- return n;
809
+ return a;
744
810
  }
745
811
  //#endregion
746
812
  //#region src/utils/symbols.ts
747
- function ut(e, t) {
813
+ function At(e, t) {
748
814
  if (!e) return 0;
749
815
  if (e === t) return 1e3;
750
816
  if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
751
817
  let n = e.indexOf(t);
752
818
  return n >= 0 ? 300 - Math.min(100, n) : 0;
753
819
  }
754
- function dt(e, t, n = 50, r) {
820
+ function jt(e, t, n = 50, r) {
755
821
  let i = t.trim().toUpperCase();
756
822
  if (!i) return e.slice(0, n);
757
823
  let a = [];
758
824
  for (let t of e) {
759
- let e = Math.max(ut(t.symbol.toUpperCase(), i), ut((t.description ?? "").toUpperCase(), i) * .8);
825
+ let e = Math.max(At(t.symbol.toUpperCase(), i), At((t.description ?? "").toUpperCase(), i) * .8);
760
826
  e > 0 && a.push({
761
827
  info: t,
762
828
  score: e + (r?.(t) ?? 0)
@@ -764,7 +830,7 @@ function dt(e, t, n = 50, r) {
764
830
  }
765
831
  return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
766
832
  }
767
- function ft(e) {
833
+ function Mt(e) {
768
834
  let t = typeof e == "number" ? e : Number(e);
769
835
  if (!Number.isFinite(t) || t <= 0) return 0;
770
836
  for (let e = 0; e <= 12; e++) {
@@ -773,10 +839,10 @@ function ft(e) {
773
839
  }
774
840
  return 12;
775
841
  }
776
- function pt(e) {
842
+ function Nt(e) {
777
843
  return e?.timeZone ?? e?.timezone;
778
844
  }
779
- function A(e) {
845
+ function M(e) {
780
846
  let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
781
847
  if (!t) return null;
782
848
  let n = Number(t[1]), r = Number(t[2]);
@@ -784,26 +850,26 @@ function A(e) {
784
850
  }
785
851
  //#endregion
786
852
  //#region src/utils/marketStatus.ts
787
- var j = 864e5, M = 6e4, mt = 8;
788
- function ht(e, t) {
789
- let n = pt(e), r = (e?.sessions ?? []).flatMap((e) => {
790
- let t = A(e.start), n = A(e.end);
853
+ var N = 864e5, P = 6e4, Pt = 8;
854
+ function Ft(e, t) {
855
+ let n = Nt(e), r = (e?.sessions ?? []).flatMap((e) => {
856
+ let t = M(e.start), n = M(e.end);
791
857
  return t === null || n === null || t === n ? [] : [{
792
858
  start: t,
793
859
  end: n,
794
860
  days: Array.isArray(e.days) ? e.days : null
795
861
  }];
796
862
  });
797
- if (!n || !x(n) || r.length === 0 || !Number.isFinite(t)) return {
863
+ if (!n || !y(n) || r.length === 0 || !Number.isFinite(t)) return {
798
864
  state: "always",
799
865
  next: null
800
866
  };
801
- let i = S(n, t) * M, a = Math.floor((t + i) / j) * j, o = (e) => e - S(n, e - S(n, e - i) * M) * M, s = [];
802
- for (let e = -1; e <= mt; e++) {
803
- let t = a + e * j, n = (Math.floor(t / j) + 4) % 7;
867
+ let i = b(n, t) * P, a = Math.floor((t + i) / N) * N, o = (e) => e - b(n, e - b(n, e - i) * P) * P, s = [];
868
+ for (let e = -1; e <= Pt; e++) {
869
+ let t = a + e * N, n = (Math.floor(t / N) + 4) % 7;
804
870
  for (let e of r) {
805
871
  if (e.days && !e.days.includes(n)) continue;
806
- let r = t + e.start * M, i = (e.end > e.start ? t : t + j) + e.end * M;
872
+ let r = t + e.start * P, i = (e.end > e.start ? t : t + N) + e.end * P;
807
873
  s.push([o(r), o(i)]);
808
874
  }
809
875
  }
@@ -826,15 +892,15 @@ function ht(e, t) {
826
892
  }
827
893
  //#endregion
828
894
  //#region src/utils/drawingOptions.ts
829
- var gt = 48, _t = 2e3, vt = 1e4;
830
- function yt(e) {
895
+ var It = 48, Lt = 2e3, Rt = 1e4;
896
+ function zt(e) {
831
897
  if (!Array.isArray(e)) return;
832
898
  let t = [];
833
899
  for (let n of e) {
834
- if (t.length >= gt) break;
900
+ if (t.length >= It) break;
835
901
  if (typeof n != "object" || !n) continue;
836
902
  let { value: e, visible: r, color: i } = n;
837
- if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > vt || r !== void 0 && typeof r != "boolean") continue;
903
+ if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > Rt || r !== void 0 && typeof r != "boolean") continue;
838
904
  let a = {
839
905
  value: e,
840
906
  visible: r ?? !0
@@ -843,109 +909,109 @@ function yt(e) {
843
909
  }
844
910
  return t;
845
911
  }
846
- function bt(e, t) {
912
+ function Bt(e, t) {
847
913
  switch (e.kind) {
848
914
  case "boolean": return typeof t == "boolean" ? t : void 0;
849
915
  case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
850
916
  case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
851
- case "levels": return yt(t);
852
- case "text": return typeof t == "string" ? t.slice(0, _t) : void 0;
917
+ case "levels": return zt(t);
918
+ case "text": return typeof t == "string" ? t.slice(0, Lt) : void 0;
853
919
  }
854
920
  }
855
- function xt(e, t) {
921
+ function Vt(e, t) {
856
922
  if (!e || typeof t != "object" || !t) return {};
857
923
  let n = {};
858
924
  for (let [r, i] of Object.entries(t)) {
859
925
  let t = e[r];
860
926
  if (!t) continue;
861
- let a = bt(t, i);
927
+ let a = Bt(t, i);
862
928
  a !== void 0 && (n[r] = a);
863
929
  }
864
930
  return n;
865
931
  }
866
- function St(e) {
932
+ function Ht(e) {
867
933
  return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
868
934
  }
869
- function Ct(e, t, n) {
935
+ function Ut(e, t, n) {
870
936
  let r = e?.[n];
871
- return r ? St((t && n in t ? bt(r, t[n]) : void 0) ?? r.default) : t?.[n];
937
+ return r ? Ht((t && n in t ? Bt(r, t[n]) : void 0) ?? r.default) : t?.[n];
872
938
  }
873
- function wt(e, t) {
939
+ function Wt(e, t) {
874
940
  let n = {};
875
- for (let r of Object.keys(e ?? {})) n[r] = Ct(e, t, r);
941
+ for (let r of Object.keys(e ?? {})) n[r] = Ut(e, t, r);
876
942
  return n;
877
943
  }
878
944
  //#endregion
879
945
  //#region src/utils/drawingStyle.ts
880
- var Tt = [
946
+ var Gt = [
881
947
  "solid",
882
948
  "dashed",
883
949
  "dotted"
884
- ], Et = 64, Dt = 2e3, Ot = 20, kt = 200;
885
- function N(e, t, n) {
950
+ ], Kt = 64, qt = 2e3, Jt = 20, Yt = 200;
951
+ function F(e, t, n) {
886
952
  return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
887
953
  }
888
- function At(e) {
889
- return typeof e == "string" && e.length > 0 && e.length <= Et ? e : void 0;
954
+ function Xt(e) {
955
+ return typeof e == "string" && e.length > 0 && e.length <= Kt ? e : void 0;
890
956
  }
891
- function jt(e) {
957
+ function Zt(e) {
892
958
  if (typeof e != "object" || !e) return {};
893
- let t = e, n = {}, r = At(t.color);
959
+ let t = e, n = {}, r = Xt(t.color);
894
960
  r !== void 0 && (n.color = r);
895
- let i = N(t.lineWidth, .5, Ot);
896
- i !== void 0 && (n.lineWidth = i), Tt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
897
- let a = At(t.fillColor);
961
+ let i = F(t.lineWidth, .5, Jt);
962
+ i !== void 0 && (n.lineWidth = i), Gt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
963
+ let a = Xt(t.fillColor);
898
964
  a !== void 0 && (n.fillColor = a);
899
- let o = N(t.fillOpacity, 0, 1);
965
+ let o = F(t.fillOpacity, 0, 1);
900
966
  o !== void 0 && (n.fillOpacity = o);
901
- let s = N(t.fontSize, 6, kt);
902
- return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, Dt)), n;
967
+ let s = F(t.fontSize, 6, Yt);
968
+ return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, qt)), n;
903
969
  }
904
970
  //#endregion
905
971
  //#region src/utils/chartTypeOptions.ts
906
- var P = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, F = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, I = (e) => typeof e == "object" && !!e && !Array.isArray(e);
907
- function Mt(e) {
908
- if (!I(e)) return {};
972
+ var I = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, L = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, R = (e) => typeof e == "object" && !!e && !Array.isArray(e);
973
+ function Qt(e) {
974
+ if (!R(e)) return {};
909
975
  let t = {};
910
- if (I(e.renko)) {
976
+ if (R(e.renko)) {
911
977
  let { boxSize: n, atrPeriod: r } = e.renko;
912
978
  t.renko = {
913
- ...P(n) || n === "atr" ? { boxSize: n } : {},
914
- ...F(r, 1, 500) ? { atrPeriod: r } : {}
979
+ ...I(n) || n === "atr" ? { boxSize: n } : {},
980
+ ...L(r, 1, 500) ? { atrPeriod: r } : {}
915
981
  };
916
982
  }
917
- if (I(e.lineBreak)) {
983
+ if (R(e.lineBreak)) {
918
984
  let { lines: n } = e.lineBreak;
919
- t.lineBreak = F(n, 1, 10) ? { lines: n } : {};
985
+ t.lineBreak = L(n, 1, 10) ? { lines: n } : {};
920
986
  }
921
- if (I(e.kagi)) {
987
+ if (R(e.kagi)) {
922
988
  let { reversal: n, reversalType: r } = e.kagi;
923
989
  t.kagi = {
924
- ...P(n) ? { reversal: n } : {},
990
+ ...I(n) ? { reversal: n } : {},
925
991
  ...r === "percent" || r === "price" ? { reversalType: r } : {}
926
992
  };
927
993
  }
928
- if (I(e.pointAndFigure)) {
994
+ if (R(e.pointAndFigure)) {
929
995
  let { boxSize: n, reversal: r } = e.pointAndFigure;
930
996
  t.pointAndFigure = {
931
- ...P(n) || n === "auto" ? { boxSize: n } : {},
932
- ...F(r, 1, 10) ? { reversal: r } : {}
997
+ ...I(n) || n === "auto" ? { boxSize: n } : {},
998
+ ...L(r, 1, 10) ? { reversal: r } : {}
933
999
  };
934
1000
  }
935
- if (I(e.rangeBars)) {
1001
+ if (R(e.rangeBars)) {
936
1002
  let { range: n } = e.rangeBars;
937
- t.rangeBars = P(n) || n === "auto" ? { range: n } : {};
1003
+ t.rangeBars = I(n) || n === "auto" ? { range: n } : {};
938
1004
  }
939
1005
  return t;
940
1006
  }
941
1007
  //#endregion
942
1008
  //#region src/constants/themes.ts
943
- var Nt = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", Pt = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif", Ft = {
944
- family: Nt,
1009
+ var $t = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", en = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif", tn = {
1010
+ family: $t,
945
1011
  sizeSmall: 11,
946
1012
  sizeMedium: 13,
947
1013
  sizeLarge: 15
948
- }, L = {
1014
+ }, z = {
949
1015
  amber: "#f2a93b",
950
1016
  up: "#1c9e6d",
951
1017
  down: "#e8505b",
@@ -956,57 +1022,57 @@ var Nt = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
956
1022
  rose: "#e25592",
957
1023
  neutral: "#7d8696",
958
1024
  ink: "#131416"
959
- }, It = .22;
960
- function R(e) {
961
- return h(e, It);
962
- }
963
- var Lt = "#fbfaf6", z = "#1b1d21", Rt = "#131416", B = "#e6e3dc", zt = "#1f7a5c", Bt = "#b8423f", Vt = "#4fae8a", Ht = "#e2706b", Ut = "#6a6966", Wt = "#8d8a84", Gt = [
964
- L.blue,
965
- L.ochre,
966
- L.violet,
967
- L.cyan,
968
- L.rose
969
- ], Kt = {
1025
+ }, nn = .22;
1026
+ function B(e) {
1027
+ return m(e, nn);
1028
+ }
1029
+ var rn = "#fbfaf6", V = "#1b1d21", an = "#131416", H = "#e6e3dc", on = "#1f7a5c", sn = "#b8423f", cn = "#4fae8a", ln = "#e2706b", un = "#6a6966", dn = "#8d8a84", fn = [
1030
+ z.blue,
1031
+ z.ochre,
1032
+ z.violet,
1033
+ z.cyan,
1034
+ z.rose
1035
+ ], pn = {
970
1036
  name: "dark",
971
- background: Rt,
972
- text: B,
1037
+ background: an,
1038
+ text: H,
973
1039
  textSecondary: "#8d8b86",
974
1040
  grid: "#1d1e21",
975
- crosshair: Ut,
976
- candleUp: Vt,
977
- candleDown: Ht,
978
- candleUpWick: Vt,
979
- candleDownWick: Ht,
980
- lineColor: B,
981
- areaTopColor: h(B, .14),
982
- areaBottomColor: h(B, 0),
983
- volumeUp: h(B, .14),
984
- volumeDown: h(B, .08),
1041
+ crosshair: un,
1042
+ candleUp: cn,
1043
+ candleDown: ln,
1044
+ candleUpWick: cn,
1045
+ candleDownWick: ln,
1046
+ lineColor: H,
1047
+ areaTopColor: m(H, .14),
1048
+ areaBottomColor: m(H, 0),
1049
+ volumeUp: m(H, .14),
1050
+ volumeDown: m(H, .08),
985
1051
  axisLine: "#2a2b2f",
986
1052
  axisLabel: "#a9a6a0",
987
1053
  axisLabelBackground: "#232427",
988
- font: Ft
989
- }, qt = {
1054
+ font: tn
1055
+ }, mn = {
990
1056
  name: "light",
991
- background: Lt,
992
- text: z,
1057
+ background: rn,
1058
+ text: V,
993
1059
  textSecondary: "#6b6f76",
994
1060
  grid: "#ece8df",
995
- crosshair: Wt,
996
- candleUp: zt,
997
- candleDown: Bt,
998
- candleUpWick: zt,
999
- candleDownWick: Bt,
1000
- lineColor: z,
1001
- areaTopColor: h(z, .12),
1002
- areaBottomColor: h(z, 0),
1003
- volumeUp: h(z, .13),
1004
- volumeDown: h(z, .08),
1061
+ crosshair: dn,
1062
+ candleUp: on,
1063
+ candleDown: sn,
1064
+ candleUpWick: on,
1065
+ candleDownWick: sn,
1066
+ lineColor: V,
1067
+ areaTopColor: m(V, .12),
1068
+ areaBottomColor: m(V, 0),
1069
+ volumeUp: m(V, .13),
1070
+ volumeDown: m(V, .08),
1005
1071
  axisLine: "#cfcac0",
1006
1072
  axisLabel: "#4a4e57",
1007
1073
  axisLabelBackground: "#eeebe3",
1008
- font: Ft
1009
- }, Jt = {
1074
+ font: tn
1075
+ }, hn = {
1010
1076
  name: "terminal",
1011
1077
  background: "#0E0E0E",
1012
1078
  text: "#C0C0C0",
@@ -1020,8 +1086,8 @@ var Lt = "#fbfaf6", z = "#1b1d21", Rt = "#131416", B = "#e6e3dc", zt = "#1f7a5c"
1020
1086
  lineColor: "#3D8BFD",
1021
1087
  areaTopColor: "rgba(61, 139, 253, 0.3)",
1022
1088
  areaBottomColor: "rgba(61, 139, 253, 0.0)",
1023
- volumeUp: R("#00FF87"),
1024
- volumeDown: R("#FF3B4D"),
1089
+ volumeUp: B("#00FF87"),
1090
+ volumeDown: B("#FF3B4D"),
1025
1091
  axisLine: "#1A1A1A",
1026
1092
  axisLabel: "#8A8A8A",
1027
1093
  axisLabelBackground: "#1A1A1A",
@@ -1031,11 +1097,11 @@ var Lt = "#fbfaf6", z = "#1b1d21", Rt = "#131416", B = "#e6e3dc", zt = "#1f7a5c"
1031
1097
  sizeMedium: 12,
1032
1098
  sizeLarge: 14
1033
1099
  }
1034
- }, Yt = new Set([Jt.volumeUp, Jt.volumeDown]);
1035
- function Xt(e) {
1100
+ }, gn = new Set([hn.volumeUp, hn.volumeDown]);
1101
+ function _n(e) {
1036
1102
  let t = (e, t) => {
1037
- if (!Yt.has(e)) return e;
1038
- let n = R(t);
1103
+ if (!gn.has(e)) return e;
1104
+ let n = B(t);
1039
1105
  return n === t ? e : n;
1040
1106
  };
1041
1107
  return {
@@ -1045,67 +1111,67 @@ function Xt(e) {
1045
1111
  }
1046
1112
  //#endregion
1047
1113
  //#region src/utils/chartStyle.ts
1048
- var Zt = [
1114
+ var vn = [
1049
1115
  "solid",
1050
1116
  "dashed",
1051
1117
  "dotted"
1052
- ], Qt = 20, $t = 64, en = 2, tn = [
1118
+ ], yn = 20, bn = 64, xn = 2, Sn = [
1053
1119
  /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
1054
1120
  /^[a-z]{3,30}$/i,
1055
1121
  /^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
1056
1122
  ];
1057
- function V(e) {
1058
- return typeof e == "string" && e.length <= $t && tn.some((t) => t.test(e.trim()));
1123
+ function Cn(e) {
1124
+ return typeof e == "string" && e.length <= bn && Sn.some((t) => t.test(e.trim()));
1059
1125
  }
1060
- function nn(e, t) {
1126
+ function wn(e, t) {
1061
1127
  switch (e) {
1062
- case "color": return V(t);
1063
- case "lineStyle": return Zt.includes(t);
1064
- case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= Qt;
1128
+ case "color": return Cn(t);
1129
+ case "lineStyle": return vn.includes(t);
1130
+ case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= yn;
1065
1131
  case "boolean": return typeof t == "boolean";
1066
1132
  }
1067
1133
  }
1068
- function rn(e) {
1134
+ function Tn(e) {
1069
1135
  return Object.prototype.hasOwnProperty.call(t, e);
1070
1136
  }
1071
- function an(e) {
1137
+ function En(e) {
1072
1138
  let n = {}, r = [];
1073
1139
  if (typeof e != "object" || !e || Array.isArray(e)) return {
1074
1140
  overrides: {},
1075
1141
  rejected: r
1076
1142
  };
1077
- for (let [i, a] of Object.entries(e)) rn(i) ? a === null ? n[i] = null : nn(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
1143
+ for (let [i, a] of Object.entries(e)) Tn(i) ? a === null ? n[i] = null : wn(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
1078
1144
  return {
1079
1145
  overrides: n,
1080
1146
  rejected: r
1081
1147
  };
1082
1148
  }
1083
- function on(e) {
1149
+ function Dn(e) {
1084
1150
  if (typeof e != "object" || !e || Array.isArray(e)) return null;
1085
1151
  let { background: t, separator: n } = e, r = {
1086
- ...V(t) ? { background: t } : {},
1087
- ...V(n) ? { separator: n } : {}
1152
+ ...Cn(t) ? { background: t } : {},
1153
+ ...Cn(n) ? { separator: n } : {}
1088
1154
  };
1089
1155
  return Object.keys(r).length > 0 ? r : null;
1090
1156
  }
1091
- var sn = /^[A-Za-z0-9_]{1,32}$/;
1092
- function cn(e) {
1157
+ var On = /^[A-Za-z0-9_]{1,32}$/;
1158
+ function kn(e) {
1093
1159
  if (typeof e != "object" || !e || Array.isArray(e)) return;
1094
1160
  let t = {};
1095
1161
  for (let [n, r] of Object.entries(e)) {
1096
- if (!sn.test(n) || typeof r != "object" || !r) continue;
1162
+ if (!On.test(n) || typeof r != "object" || !r) continue;
1097
1163
  let { lineStyle: e, visible: i } = r, a = {
1098
- ...Zt.includes(e) ? { lineStyle: e } : {},
1164
+ ...vn.includes(e) ? { lineStyle: e } : {},
1099
1165
  ...typeof i == "boolean" ? { visible: i } : {}
1100
1166
  };
1101
1167
  Object.keys(a).length > 0 && (t[n] = a);
1102
1168
  }
1103
1169
  return Object.keys(t).length > 0 ? t : void 0;
1104
1170
  }
1105
- function ln(e, t, n = 1) {
1171
+ function An(e, t, n = 1) {
1106
1172
  return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
1107
1173
  }
1108
- function un(e, t, n) {
1174
+ function jn(e, t, n) {
1109
1175
  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;
1110
1176
  return {
1111
1177
  up: o,
@@ -1113,12 +1179,12 @@ function un(e, t, n) {
1113
1179
  wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
1114
1180
  wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
1115
1181
  line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
1116
- lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? en,
1182
+ lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? xn,
1117
1183
  top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
1118
1184
  bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
1119
1185
  };
1120
1186
  }
1121
- function H(e, t, n) {
1187
+ function U(e, t, n) {
1122
1188
  return {
1123
1189
  visible: e(`${t}.visible`) ?? n.visible,
1124
1190
  color: e(`${t}.color`) ?? n.color,
@@ -1126,21 +1192,21 @@ function H(e, t, n) {
1126
1192
  width: e(`${t}.width`) ?? n.width
1127
1193
  };
1128
1194
  }
1129
- function dn(e, t, n) {
1130
- let { style: r, ...i } = e, a = n, o = (e) => a[e], s = un(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
1195
+ function Mn(e, t, n) {
1196
+ let { style: r, ...i } = e, a = n, o = (e) => a[e], s = jn(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
1131
1197
  panes: {
1132
1198
  background: l("panes.background", c),
1133
1199
  separator: l("panes.separatorColor", i.axisLine),
1134
1200
  title: l("panes.titleColor", i.textSecondary)
1135
1201
  },
1136
1202
  grid: {
1137
- horizontal: H(o, "grid.horizontal", {
1203
+ horizontal: U(o, "grid.horizontal", {
1138
1204
  visible: !0,
1139
1205
  color: i.grid,
1140
1206
  style: "solid",
1141
1207
  width: 1
1142
1208
  }),
1143
- vertical: H(o, "grid.vertical", {
1209
+ vertical: U(o, "grid.vertical", {
1144
1210
  visible: !0,
1145
1211
  color: i.grid,
1146
1212
  style: "solid",
@@ -1148,13 +1214,13 @@ function dn(e, t, n) {
1148
1214
  })
1149
1215
  },
1150
1216
  crosshair: {
1151
- horizontal: H(o, "crosshair.horizontal", {
1217
+ horizontal: U(o, "crosshair.horizontal", {
1152
1218
  visible: !0,
1153
1219
  color: i.crosshair,
1154
1220
  style: "solid",
1155
1221
  width: 1
1156
1222
  }),
1157
- vertical: H(o, "crosshair.vertical", {
1223
+ vertical: U(o, "crosshair.vertical", {
1158
1224
  visible: !0,
1159
1225
  color: i.crosshair,
1160
1226
  style: "solid",
@@ -1226,7 +1292,7 @@ function dn(e, t, n) {
1226
1292
  style: d
1227
1293
  };
1228
1294
  }
1229
- var fn = {
1295
+ var Nn = {
1230
1296
  "background.color": (e) => e.background,
1231
1297
  "panes.background": (e, t) => t.panes.background,
1232
1298
  "panes.separatorColor": (e, t) => t.panes.separator,
@@ -1245,8 +1311,8 @@ var fn = {
1245
1311
  "lastPrice.downColor": (e, t) => t.lastPrice.down,
1246
1312
  "lastPrice.style": (e, t) => t.lastPrice.style,
1247
1313
  "lastPrice.width": (e, t) => t.lastPrice.width,
1248
- "volume.upColor": (e) => Xt(e).up,
1249
- "volume.downColor": (e) => Xt(e).down,
1314
+ "volume.upColor": (e) => _n(e).up,
1315
+ "volume.downColor": (e) => _n(e).down,
1250
1316
  "sessionBreaks.color": (e, t) => t.sessionBreaks.color,
1251
1317
  "sessionBreaks.style": (e, t) => t.sessionBreaks.style,
1252
1318
  "sessionBreaks.width": (e, t) => t.sessionBreaks.width,
@@ -1263,16 +1329,16 @@ var fn = {
1263
1329
  "tradeZones.lossColor": (e, t) => t.tradeZones.loss,
1264
1330
  "tradeZones.activeColor": (e, t) => t.tradeZones.active,
1265
1331
  "drawings.handleColor": (e, t) => t.drawings.handle
1266
- }, pn = {
1332
+ }, Pn = {
1267
1333
  visible: "visible",
1268
1334
  color: "color",
1269
1335
  style: "style",
1270
1336
  width: "width"
1271
1337
  };
1272
- function mn(e, t, n, r = "candlestick") {
1338
+ function Fn(e, t, n, r = "candlestick") {
1273
1339
  let i = n.split(".");
1274
1340
  if (i[0] === "series") {
1275
- let n = un(e, (e) => t[e], i[1]);
1341
+ let n = jn(e, (e) => t[e], i[1]);
1276
1342
  switch (i[2]) {
1277
1343
  case "upColor": return n.up;
1278
1344
  case "downColor": return n.down;
@@ -1285,12 +1351,12 @@ function mn(e, t, n, r = "candlestick") {
1285
1351
  case "bottomColor": return n.bottom;
1286
1352
  }
1287
1353
  }
1288
- let a = dn(e, r, t), o = a.style;
1289
- return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][pn[i[2]]] : fn[n]?.(a, o) ?? null;
1354
+ let a = Mn(e, r, t), o = a.style;
1355
+ return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][Pn[i[2]]] : Nn[n]?.(a, o) ?? null;
1290
1356
  }
1291
1357
  //#endregion
1292
1358
  //#region src/constants/defaults.ts
1293
- var hn = {
1359
+ var In = {
1294
1360
  autoScale: !0,
1295
1361
  rightMargin: 5,
1296
1362
  minBarSpacing: 2,
@@ -1301,7 +1367,7 @@ var hn = {
1301
1367
  vLineStyle: "solid"
1302
1368
  },
1303
1369
  crosshair: { mode: "magnet" }
1304
- }, gn = [
1370
+ }, Ln = [
1305
1371
  "1s",
1306
1372
  "1m",
1307
1373
  "3m",
@@ -1318,7 +1384,7 @@ var hn = {
1318
1384
  "3d",
1319
1385
  "1w",
1320
1386
  "1M"
1321
- ], _n = [
1387
+ ], Rn = [
1322
1388
  "1m",
1323
1389
  "5m",
1324
1390
  "15m",
@@ -1332,7 +1398,7 @@ var hn = {
1332
1398
  "3M",
1333
1399
  "6M",
1334
1400
  "12M"
1335
- ], vn = [
1401
+ ], zn = [
1336
1402
  "1m",
1337
1403
  "5m",
1338
1404
  "15m",
@@ -1342,7 +1408,7 @@ var hn = {
1342
1408
  "1d",
1343
1409
  "1w",
1344
1410
  "1M"
1345
- ], yn = [
1411
+ ], Bn = [
1346
1412
  "1m",
1347
1413
  "5m",
1348
1414
  "15m",
@@ -1350,7 +1416,7 @@ var hn = {
1350
1416
  "4h",
1351
1417
  "1d",
1352
1418
  "1w"
1353
- ], bn = 8, xn = 2, Sn = 70, Cn = 30, wn = 60, Tn = 120, En = (1 + Math.sqrt(5)) / 2, Dn = [
1419
+ ], Vn = 8, Hn = 2, Un = 70, Wn = 30, Gn = 60, Kn = 120, qn = (1 + Math.sqrt(5)) / 2, Jn = [
1354
1420
  1,
1355
1421
  2,
1356
1422
  3,
@@ -1362,12 +1428,12 @@ var hn = {
1362
1428
  55,
1363
1429
  89
1364
1430
  ];
1365
- function On(e, t, n = 1) {
1366
- return Math.round(e * En ** (t / n));
1431
+ function Yn(e, t, n = 1) {
1432
+ return Math.round(e * qn ** (t / n));
1367
1433
  }
1368
1434
  //#endregion
1369
1435
  //#region src/i18n/en.ts
1370
- var U = {
1436
+ var W = {
1371
1437
  candlestick: "Candlestick",
1372
1438
  line: "Line",
1373
1439
  area: "Area",
@@ -1470,7 +1536,7 @@ var U = {
1470
1536
  error: "Error",
1471
1537
  numberDecimalSeparator: ".",
1472
1538
  numberGroupSeparator: ","
1473
- }, kn = {
1539
+ }, Xn = {
1474
1540
  candlestick: "Nến",
1475
1541
  line: "Đường",
1476
1542
  area: "Vùng",
@@ -1573,43 +1639,43 @@ var U = {
1573
1639
  error: "Lỗi",
1574
1640
  numberDecimalSeparator: ",",
1575
1641
  numberGroupSeparator: "."
1576
- }, W = new Map([["en", U], ["vi", kn]]), G = "en", An = U;
1577
- function jn(e) {
1578
- G = e, An = W.get(e) ?? U;
1642
+ }, G = new Map([["en", W], ["vi", Xn]]), K = "en", Zn = W;
1643
+ function Qn(e) {
1644
+ K = e, Zn = G.get(e) ?? W;
1579
1645
  }
1580
- function Mn() {
1581
- return G;
1646
+ function $n() {
1647
+ return K;
1582
1648
  }
1583
- function Nn(e) {
1584
- return An[e] ?? U[e] ?? e;
1649
+ function er(e) {
1650
+ return Zn[e] ?? W[e] ?? e;
1585
1651
  }
1586
- function Pn(e, t) {
1587
- W.set(e, t);
1652
+ function tr(e, t) {
1653
+ G.set(e, t);
1588
1654
  }
1589
- function Fn(e) {
1590
- return W.get(e ?? G) ?? U;
1655
+ function nr(e) {
1656
+ return G.get(e ?? K) ?? W;
1591
1657
  }
1592
- function K(e, t = 2, n) {
1593
- 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 = "";
1658
+ function q(e, t = 2, n) {
1659
+ let r = G.get(n ?? K) ?? W, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
1594
1660
  for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
1595
1661
  return c && (u = "-" + u), s ? u + i + s : u;
1596
1662
  }
1597
- function In(e) {
1598
- return K(e, 0, "vi");
1663
+ function rr(e) {
1664
+ return q(e, 0, "vi");
1599
1665
  }
1600
- function Ln(e, t) {
1601
- return e >= 1e9 ? K(e / 1e9, 2, t ?? G) + "B" : e >= 1e6 ? K(e / 1e6, 2, t ?? G) + "M" : e >= 1e3 ? K(e / 1e3, 2, t ?? G) + "K" : K(e, 0, t ?? G);
1666
+ function ir(e, t) {
1667
+ return e >= 1e9 ? q(e / 1e9, 2, t ?? K) + "B" : e >= 1e6 ? q(e / 1e6, 2, t ?? K) + "M" : e >= 1e3 ? q(e / 1e3, 2, t ?? K) + "K" : q(e, 0, t ?? K);
1602
1668
  }
1603
1669
  //#endregion
1604
1670
  //#region src/market/presets.ts
1605
- var q = {
1671
+ var J = {
1606
1672
  up: "#22C55E",
1607
1673
  down: "#EF4444",
1608
1674
  unchanged: "#EAB308",
1609
1675
  ceiling: "#D946EF",
1610
1676
  floor: "#06B6D4",
1611
1677
  reference: "#EAB308"
1612
- }, J = "Asia/Ho_Chi_Minh", Rn = [
1678
+ }, Y = "Asia/Ho_Chi_Minh", ar = [
1613
1679
  {
1614
1680
  name: "ATO",
1615
1681
  startTime: "09:00",
@@ -1640,7 +1706,7 @@ var q = {
1640
1706
  endTime: "14:45",
1641
1707
  type: "preClose"
1642
1708
  }
1643
- ], zn = [
1709
+ ], or = [
1644
1710
  {
1645
1711
  name: "Phiên 1",
1646
1712
  startTime: "09:15",
@@ -1671,7 +1737,7 @@ var q = {
1671
1737
  endTime: "15:00",
1672
1738
  type: "postClose"
1673
1739
  }
1674
- ], Bn = [
1740
+ ], sr = [
1675
1741
  {
1676
1742
  name: "Phiên 1",
1677
1743
  startTime: "09:15",
@@ -1690,7 +1756,7 @@ var q = {
1690
1756
  endTime: "14:30",
1691
1757
  type: "continuous"
1692
1758
  }
1693
- ], Vn = [
1759
+ ], cr = [
1694
1760
  {
1695
1761
  name: "ATO",
1696
1762
  startTime: "08:45",
@@ -1721,7 +1787,7 @@ var q = {
1721
1787
  endTime: "14:45",
1722
1788
  type: "preClose"
1723
1789
  }
1724
- ], Hn = {
1790
+ ], lr = {
1725
1791
  type: "stock",
1726
1792
  exchange: "HOSE",
1727
1793
  currency: "VND",
@@ -1742,48 +1808,48 @@ var q = {
1742
1808
  step: .1
1743
1809
  }
1744
1810
  ],
1745
- timeZone: J,
1811
+ timeZone: Y,
1746
1812
  priceLimits: {
1747
1813
  enabled: !0,
1748
1814
  ceilingPercent: 7,
1749
1815
  floorPercent: 7
1750
1816
  },
1751
- sessions: Rn,
1752
- colorScheme: q
1753
- }, Un = {
1754
- ...Hn,
1817
+ sessions: ar,
1818
+ colorScheme: J
1819
+ }, ur = {
1820
+ ...lr,
1755
1821
  priceSteps: void 0
1756
- }, Wn = {
1822
+ }, dr = {
1757
1823
  type: "stock",
1758
1824
  exchange: "HNX",
1759
1825
  currency: "VND",
1760
1826
  pricePrecision: 1,
1761
1827
  volumeUnit: 100,
1762
1828
  priceStep: .1,
1763
- timeZone: J,
1829
+ timeZone: Y,
1764
1830
  priceLimits: {
1765
1831
  enabled: !0,
1766
1832
  ceilingPercent: 10,
1767
1833
  floorPercent: 10
1768
1834
  },
1769
- sessions: zn,
1770
- colorScheme: q
1771
- }, Gn = {
1835
+ sessions: or,
1836
+ colorScheme: J
1837
+ }, fr = {
1772
1838
  type: "stock",
1773
1839
  exchange: "UPCOM",
1774
1840
  currency: "VND",
1775
1841
  pricePrecision: 1,
1776
1842
  volumeUnit: 100,
1777
1843
  priceStep: .1,
1778
- timeZone: J,
1844
+ timeZone: Y,
1779
1845
  priceLimits: {
1780
1846
  enabled: !0,
1781
1847
  ceilingPercent: 15,
1782
1848
  floorPercent: 15
1783
1849
  },
1784
- sessions: Bn,
1785
- colorScheme: q
1786
- }, Kn = {
1850
+ sessions: sr,
1851
+ colorScheme: J
1852
+ }, pr = {
1787
1853
  type: "futures",
1788
1854
  exchange: "HNX",
1789
1855
  currency: "VND",
@@ -1791,20 +1857,20 @@ var q = {
1791
1857
  volumeUnit: 1,
1792
1858
  priceStep: .1,
1793
1859
  contractMultiplier: 1e5,
1794
- timeZone: J,
1860
+ timeZone: Y,
1795
1861
  priceLimits: {
1796
1862
  enabled: !0,
1797
1863
  ceilingPercent: 7,
1798
1864
  floorPercent: 7
1799
1865
  },
1800
- sessions: Vn,
1801
- colorScheme: q
1802
- }, qn = {
1866
+ sessions: cr,
1867
+ colorScheme: J
1868
+ }, mr = {
1803
1869
  type: "crypto",
1804
1870
  currency: "USDT",
1805
1871
  pricePrecision: 2,
1806
1872
  priceLimits: { enabled: !1 }
1807
- }, Jn = {
1873
+ }, hr = {
1808
1874
  type: "stock",
1809
1875
  exchange: "NYSE",
1810
1876
  currency: "USD",
@@ -1833,55 +1899,55 @@ var q = {
1833
1899
  }
1834
1900
  ]
1835
1901
  };
1836
- function Yn(e) {
1902
+ function gr(e) {
1837
1903
  return {
1838
1904
  ...e,
1839
- candleUp: q.up,
1840
- candleDown: q.down,
1841
- candleUpWick: q.up,
1842
- candleDownWick: q.down
1905
+ candleUp: J.up,
1906
+ candleDown: J.down,
1907
+ candleUpWick: J.up,
1908
+ candleDownWick: J.down
1843
1909
  };
1844
1910
  }
1845
- var Y = 1e-9;
1846
- function X(e, t) {
1911
+ var X = 1e-9;
1912
+ function _r(e, t) {
1847
1913
  let n = t.priceStep;
1848
- for (let r of t.priceSteps ?? []) e + Y >= r.from && (n = r.step);
1914
+ for (let r of t.priceSteps ?? []) e + X >= r.from && (n = r.step);
1849
1915
  return n !== void 0 && n > 0 ? n : void 0;
1850
1916
  }
1851
- function Xn(e, t) {
1917
+ function vr(e, t) {
1852
1918
  let n = t.priceStep;
1853
- for (let r of t.priceSteps ?? []) e - Y > r.from && (n = r.step);
1919
+ for (let r of t.priceSteps ?? []) e - X > r.from && (n = r.step);
1854
1920
  return n !== void 0 && n > 0 ? n : void 0;
1855
1921
  }
1856
1922
  function Z(e, t, n = "nearest") {
1857
- let r = X(e, t);
1923
+ let r = _r(e, t);
1858
1924
  if (r === void 0 || !Number.isFinite(e)) return e;
1859
- let i = e / r, a = n === "down" ? Math.floor(i + Y) : n === "up" ? Math.ceil(i - Y) : Math.round(i);
1860
- return Number((a * r).toFixed(ft(r)));
1925
+ let i = e / r, a = n === "down" ? Math.floor(i + X) : n === "up" ? Math.ceil(i - X) : Math.round(i);
1926
+ return Number((a * r).toFixed(Mt(r)));
1861
1927
  }
1862
- function Zn(e, t) {
1928
+ function yr(e, t) {
1863
1929
  if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
1864
- let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100, i = e, a = i * (1 + n), o = i * (1 - r), s = X(i, t);
1930
+ let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100, i = e, a = i * (1 + n), o = i * (1 - r), s = _r(i, t);
1865
1931
  if (s === void 0) return {
1866
1932
  ceiling: a,
1867
1933
  floor: o,
1868
1934
  reference: i
1869
1935
  };
1870
1936
  let c = Z(i + s, t);
1871
- if (Math.abs(i - s) < Y) return {
1937
+ if (Math.abs(i - s) < X) return {
1872
1938
  ceiling: c,
1873
1939
  floor: i,
1874
1940
  reference: i
1875
1941
  };
1876
1942
  let l = Z(a, t, "down"), u = Z(o, t, "up");
1877
- return l <= i && (l = c), u >= i && (u = Z(i - (Xn(i, t) ?? s), t)), u <= 0 && (u = i), {
1943
+ return l <= i && (l = c), u >= i && (u = Z(i - (vr(i, t) ?? s), t)), u <= 0 && (u = i), {
1878
1944
  ceiling: l,
1879
1945
  floor: u,
1880
1946
  reference: i
1881
1947
  };
1882
1948
  }
1883
1949
  var Q = (e, t) => Math.round(e * t * 1e9) / 1e9;
1884
- function Qn(e, t) {
1950
+ function br(e, t) {
1885
1951
  let n = Math.round(Math.log10(t));
1886
1952
  return {
1887
1953
  ...e,
@@ -1897,11 +1963,11 @@ function Qn(e, t) {
1897
1963
  }
1898
1964
  };
1899
1965
  }
1900
- var $n = 6e4, er = 864e5;
1901
- function tr(e, t) {
1966
+ var xr = 6e4, Sr = 864e5;
1967
+ function Cr(e, t) {
1902
1968
  let n, r;
1903
1969
  if (t) {
1904
- let i = new Date(e + S(t, e) * $n);
1970
+ let i = new Date(e + b(t, e) * xr);
1905
1971
  n = i.getUTCHours(), r = i.getUTCMinutes();
1906
1972
  } else {
1907
1973
  let t = new Date(e);
@@ -1909,31 +1975,31 @@ function tr(e, t) {
1909
1975
  }
1910
1976
  return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
1911
1977
  }
1912
- function nr(e, t = Date.now(), n) {
1913
- if (n !== void 0 && !x(n)) return null;
1914
- let r = tr(t, n);
1978
+ function wr(e, t = Date.now(), n) {
1979
+ if (n !== void 0 && !y(n)) return null;
1980
+ let r = Cr(t, n);
1915
1981
  for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
1916
1982
  return null;
1917
1983
  }
1918
- var $ = (e) => String(e).padStart(2, "0"), rr = (e) => {
1984
+ var $ = (e) => String(e).padStart(2, "0"), Tr = (e) => {
1919
1985
  let t = new Date(e);
1920
1986
  return `${t.getUTCFullYear()}-${$(t.getUTCMonth() + 1)}-${$(t.getUTCDate())}`;
1921
- }, ir = 4, ar = 7 * 36e5;
1922
- function or(e, t, n) {
1923
- let r = Date.UTC(e, t - 1, 1), i = 1 + (ir - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
1987
+ }, Er = 4, Dr = 7 * 36e5;
1988
+ function Or(e, t, n) {
1989
+ let r = Date.UTC(e, t - 1, 1), i = 1 + (Er - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
1924
1990
  let t = new Date(e).getUTCDay();
1925
- return t === 0 || t === 6 || (n?.(rr(e)) ?? !1);
1991
+ return t === 0 || t === 6 || (n?.(Tr(e)) ?? !1);
1926
1992
  };
1927
- for (; o(a);) a -= er;
1928
- return rr(a);
1993
+ for (; o(a);) a -= Sr;
1994
+ return Tr(a);
1929
1995
  }
1930
- function sr(e, t) {
1931
- let n = rr(e + ar), r = (e, n) => ({
1996
+ function kr(e, t) {
1997
+ let n = Tr(e + Dr), r = (e, n) => ({
1932
1998
  symbol: `VN30F${$(e % 100)}${$(n)}`,
1933
1999
  year: e,
1934
2000
  month: n,
1935
- lastTradingDay: or(e, n, t)
1936
- }), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + ar), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
2001
+ lastTradingDay: Or(e, n, t)
2002
+ }), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + Dr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
1937
2003
  n > o.lastTradingDay && (o = i(o));
1938
2004
  let s = [o, i(o)], c = i(s[1]);
1939
2005
  for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
@@ -1941,7 +2007,7 @@ function sr(e, t) {
1941
2007
  }
1942
2008
  //#endregion
1943
2009
  //#region src/icons/iconSet.ts
1944
- var cr = {
2010
+ var Ar = {
1945
2011
  cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
1946
2012
  trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
1947
2013
  trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
@@ -2070,7 +2136,7 @@ var cr = {
2070
2136
  ]
2071
2137
  ] },
2072
2138
  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" }
2073
- }, lr = {
2139
+ }, jr = {
2074
2140
  trendLine: {
2075
2141
  d: "M5 18L19 6",
2076
2142
  dots: [[5, 18], [19, 6]]
@@ -2423,7 +2489,7 @@ var cr = {
2423
2489
  ],
2424
2490
  dash: "M12 3V21"
2425
2491
  }
2426
- }, ur = {
2492
+ }, Mr = {
2427
2493
  candlestick: {
2428
2494
  d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
2429
2495
  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"]
@@ -2490,21 +2556,21 @@ var cr = {
2490
2556
  "M16 4.5h3v6h-3z"
2491
2557
  ]
2492
2558
  }
2493
- }, dr = 1.75, fr = .22, pr = /* @__PURE__ */ new WeakMap();
2494
- function mr(e) {
2495
- let t = pr.get(e);
2559
+ }, Nr = 1.75, Pr = .22, Fr = /* @__PURE__ */ new WeakMap();
2560
+ function Ir(e) {
2561
+ let t = Fr.get(e);
2496
2562
  if (t) return t;
2497
2563
  let n = "";
2498
- e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${fr}" stroke="none"/>`);
2564
+ e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${Pr}" stroke="none"/>`);
2499
2565
  for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
2500
2566
  e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
2501
- for (let [t, r, i = dr] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
2502
- return pr.set(e, n), n;
2567
+ for (let [t, r, i = Nr] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
2568
+ return Fr.set(e, n), n;
2503
2569
  }
2504
- function hr(e, t) {
2505
- return `<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${mr(e)}</svg>`;
2570
+ function Lr(e, t) {
2571
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${Ir(e)}</svg>`;
2506
2572
  }
2507
2573
  //#endregion
2508
- export { t as CHART_STYLE_KEYS, ur as CHART_TYPE_ICONS, Jt as DARK_TERMINAL, Kt as DARK_THEME, xn as DEFAULT_BAR_SPACING, bn as DEFAULT_BAR_WIDTH, hn as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, Nt as DEFAULT_FONT_FAMILY, Tn as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, yn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, lr as DRAWING_TOOL_ICONS, Dn as FIBONACCI, zn as HNX_SESSIONS, Rn as HOSE_SESSIONS, dr as ICON_DOT_RADIUS, fr as ICON_SOFT_OPACITY, qt as LIGHT_THEME, e as LayerType, qn as MARKET_CRYPTO, Wn as MARKET_HNX, Hn as MARKET_HOSE, Un as MARKET_HOSE_ETF, Jn as MARKET_NYSE, Gn as MARKET_UPCOM, Kn as MARKET_VN30F, wn as MIN_PANEL_HEIGHT, se as MS_TIME_THRESHOLD, En as PHI, Sn as PRICE_AXIS_WIDTH, et as PRICE_SOURCES, Pt as SANS_FONT_FAMILY, L as TC_PALETTE, Gt as TC_SERIES_COLORS, gn as TIMEFRAMES_CRYPTO, vn as TIMEFRAMES_FOREX, _n as TIMEFRAMES_STOCK, Cn as TIME_AXIS_HEIGHT, cr as UI_ICONS, Bn as UPCOM_SESSIONS, Vn as VN30F_SESSIONS, q as VN_COLORS, It as VOLUME_ALPHA, Ie as alignToTimeframe, qe as autoPricePrecision, ce as barTimeUnit, Be as barsAreDaily, mn as chartStyleValue, ne as clamp, Zn as computePriceLimits, he as computePriceRange, oe as computeTickStep, Yn as createVNTheme, $e as detectPrecision, Ct as drawingOption, U as en, fe as findBarIndex, me as fitPriceRange, Ye as formatFraction, K as formatNumber, O as formatPrice, Je as formatPriceScaleLabel, Fe as formatTimestamp, In as formatVND, Qe as formatVolume, Ln as formatVolumeLoc, Xe as fractionTick, nr as getCurrentSession, Mn as getLocale, Fn as getLocaleStrings, _e as hexToRgba, hr as iconSvg, it as indicatorSource, ie as inverseLerp, Re as isDateOnly, tt as isPriceSource, Pe as isTimeFrame, x as isValidTimeZone, re as lerp, ve as lerpColor, ln as lineDash, ht as marketStatus, ge as mergeBar, m as niceNumber, ue as normalizeBar, le as normalizeBarTime, w as offsetAt, pe as padPriceRange, at as parseIndicatorSource, T as parseTimeframe, On as phiStep, lt as pickBaseTimeframe, Ze as priceFormatterFor, X as priceStepAt, Ke as priceTagText, dt as rankSymbols, an as readChartStyleOverrides, Mt as readChartTypeOptions, cn as readIndicatorPlotStyles, te as readNews, on as readPaneStyle, l as readQuote, Pn as registerLocale, st as resampleBars, dn as resolveChartTheme, wt as resolveDrawingOptions, Xt as resolveVolumeColors, Z as roundToPriceStep, ae as roundToStep, xt as sanitizeDrawingOptions, jt as sanitizeDrawingStyle, Qn as scaleMarketPrices, A as sessionMinute, jn as setLocale, de as sliceVisibleData, nt as sourcePrice, ft as stepDecimals, pt as symbolTimeZone, Nn as t, Ne as tickBarCount, Le as timeParts, Ue as timeframeBucketStart, E as timeframeToMs, Ve as tzLabel, kn as vi, sr as vn30fContracts, or as vn30fLastTradingDay, R as volumeColor, Ee as wallToUtc, h as withAlpha, S as zoneOffsetMinutes, Oe as zonedDateFormatter };
2574
+ export { t as CHART_STYLE_KEYS, Mr as CHART_TYPE_ICONS, hn as DARK_TERMINAL, pn as DARK_THEME, Hn as DEFAULT_BAR_SPACING, Vn as DEFAULT_BAR_WIDTH, In as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, $t as DEFAULT_FONT_FAMILY, Kn as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, Bn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, jr as DRAWING_TOOL_ICONS, Jn as FIBONACCI, or as HNX_SESSIONS, ar as HOSE_SESSIONS, Nr as ICON_DOT_RADIUS, Pr as ICON_SOFT_OPACITY, mn as LIGHT_THEME, e as LayerType, mr as MARKET_CRYPTO, dr as MARKET_HNX, lr as MARKET_HOSE, ur as MARKET_HOSE_ETF, hr as MARKET_NYSE, fr as MARKET_UPCOM, pr as MARKET_VN30F, Gn as MIN_PANEL_HEIGHT, ce as MS_TIME_THRESHOLD, qn as PHI, Un as PRICE_AXIS_WIDTH, _t as PRICE_SOURCES, en as SANS_FONT_FAMILY, z as TC_PALETTE, fn as TC_SERIES_COLORS, Ln as TIMEFRAMES_CRYPTO, zn as TIMEFRAMES_FOREX, Rn as TIMEFRAMES_STOCK, Wn as TIME_AXIS_HEIGHT, Ar as UI_ICONS, sr as UPCOM_SESSIONS, cr as VN30F_SESSIONS, J as VN_COLORS, nn as VOLUME_ALPHA, ze as alignToTimeframe, lt as autoPricePrecision, at as barDateParts, it as barDateZone, le as barTimeUnit, Ue as barsAreDaily, Fn as chartStyleValue, ne as clamp, yr as computePriceLimits, ge as computePriceRange, se as computeTickStep, gr as createVNTheme, gt as detectPrecision, Ut as drawingOption, W as en, pe as findBarIndex, he as fitPriceRange, ft as formatFraction, q as formatNumber, A as formatPrice, dt as formatPriceScaleLabel, Re as formatTimestamp, rr as formatVND, ht as formatVolume, ir as formatVolumeLoc, pt as fractionTick, wr as getCurrentSession, $n as getLocale, nr as getLocaleStrings, ve as hexToRgba, Lr as iconSvg, xt as indicatorSource, ie as inverseLerp, Ve as isDateOnly, vt as isPriceSource, Le as isTimeFrame, S as isUtcTimeZone, y as isValidTimeZone, re as lerp, xe as lerpColor, An as lineDash, Ft as marketStatus, _e as mergeBar, oe as niceNumber, de as normalizeBar, ue as normalizeBarTime, C as offsetAt, me as padPriceRange, St as parseIndicatorSource, T as parseTimeframe, Yn as phiStep, kt as pickBaseTimeframe, mt as priceFormatterFor, _r as priceStepAt, ct as priceTagText, jt as rankSymbols, En as readChartStyleOverrides, Qt as readChartTypeOptions, kn as readIndicatorPlotStyles, te as readNews, Dn as readPaneStyle, l as readQuote, tr as registerLocale, Tt as resampleBars, Mn as resolveChartTheme, Wt as resolveDrawingOptions, _n as resolveVolumeColors, Z as roundToPriceStep, ae as roundToStep, Vt as sanitizeDrawingOptions, Zt as sanitizeDrawingStyle, br as scaleMarketPrices, M as sessionMinute, Qn as setLocale, fe as sliceVisibleData, yt as sourcePrice, Mt as stepDecimals, Nt as symbolTimeZone, er as t, Ie as tickBarCount, Be as timeParts, nt as timeframeBucketStart, $e as timeframeFollowsDays, et as timeframeSpansDays, E as timeframeToMs, We as tzLabel, Xn as vi, kr as vn30fContracts, Or as vn30fLastTradingDay, B as volumeColor, Ae as wallToUtc, m as withAlpha, b as zoneOffsetMinutes, Me as zonedDateFormatter };
2509
2575
 
2510
2576
  //# sourceMappingURL=index.js.map