@tradecanvas/commons 1.56.0 → 1.59.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
@@ -198,11 +198,11 @@ function u(e) {
198
198
  }
199
199
  //#endregion
200
200
  //#region src/types/news.ts
201
- var d = 300, f = 1e3, p = (e, t) => {
201
+ var d = 300, ee = 1e3, f = (e, t) => {
202
202
  if (typeof e != "string") return;
203
203
  let n = e.trim();
204
204
  return n ? n.slice(0, t) : void 0;
205
- }, ee = (e) => {
205
+ }, te = (e) => {
206
206
  if (typeof e == "string") try {
207
207
  let t = new URL(e);
208
208
  return t.protocol === "https:" || t.protocol === "http:" ? t.href : void 0;
@@ -210,61 +210,61 @@ var d = 300, f = 1e3, p = (e, t) => {
210
210
  return;
211
211
  }
212
212
  };
213
- function te(e, t = 20) {
213
+ function ne(e, t = 20) {
214
214
  if (!Array.isArray(e)) return [];
215
215
  let n = [];
216
216
  for (let t of e) {
217
217
  if (!t || typeof t != "object") continue;
218
- let e = t, r = p(e.title, d);
218
+ let e = t, r = f(e.title, d);
219
219
  if (!r || typeof e.time != "number" || !Number.isFinite(e.time)) continue;
220
220
  let i = {
221
221
  title: r,
222
222
  time: e.time
223
- }, a = ee(e.url);
223
+ }, a = te(e.url);
224
224
  a && (i.url = a);
225
- let o = p(e.source, d);
225
+ let o = f(e.source, d);
226
226
  o && (i.source = o);
227
- let s = p(e.summary, f);
227
+ let s = f(e.summary, ee);
228
228
  s && (i.summary = s);
229
- let c = p(e.id, d);
229
+ let c = f(e.id, d);
230
230
  c && (i.id = c), n.push(i);
231
231
  }
232
232
  return n.sort((e, t) => t.time - e.time).slice(0, Math.max(0, t));
233
233
  }
234
234
  //#endregion
235
235
  //#region src/utils/math.ts
236
- function ne(e, t, n) {
236
+ function re(e, t, n) {
237
237
  return Math.max(t, Math.min(n, e));
238
238
  }
239
- function re(e, t, n) {
239
+ function ie(e, t, n) {
240
240
  return e + (t - e) * n;
241
241
  }
242
- function ie(e, t, n) {
242
+ function ae(e, t, n) {
243
243
  return e === t ? 0 : (n - e) / (t - e);
244
244
  }
245
- function ae(e, t) {
245
+ function oe(e, t) {
246
246
  return Math.round(e / t) * t;
247
247
  }
248
- function oe(e, t) {
248
+ function se(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 se(e, t, n) {
253
- return oe(oe(t - e, !1) / (n - 1), !0);
252
+ function ce(e, t, n) {
253
+ return se(se(t - e, !1) / (n - 1), !0);
254
254
  }
255
255
  //#endregion
256
256
  //#region src/utils/data.ts
257
- var ce = 1e11;
258
- function le(e) {
257
+ var le = 1e11;
258
+ function ue(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 ue(e, t) {
262
+ function de(e, t) {
263
263
  return t === void 0 ? Math.abs(e) >= 1e11 ? e : e * 1e3 : e * t;
264
264
  }
265
- function de(e) {
265
+ function fe(e) {
266
266
  return {
267
- time: ue(e.time ?? e.t ?? 0),
267
+ time: de(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 de(e) {
272
272
  volume: e.volume ?? e.v ?? 0
273
273
  };
274
274
  }
275
- function fe(e, t, n) {
275
+ function pe(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 pe(e, t) {
279
+ function me(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 pe(e, t) {
286
286
  }
287
287
  return n;
288
288
  }
289
- function me(e, t, n, r = !1) {
289
+ function he(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 me(e, t, n, r = !1) {
301
301
  max: t + a * n
302
302
  };
303
303
  }
304
- function he(e, t, n, r = !1) {
304
+ function ge(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 he(e, t, n, r = !1) {
316
316
  max: t + o * n.top
317
317
  };
318
318
  }
319
- function ge(e, t, n, r = .05, i = !1) {
319
+ function _e(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 ge(e, t, n, r = .05, i = !1) {
326
326
  return s === Infinity ? {
327
327
  min: 0,
328
328
  max: 1
329
- } : me(s, c, r, i);
329
+ } : he(s, c, r, i);
330
330
  }
331
- function _e(e, t) {
331
+ function ve(e, t) {
332
332
  return {
333
333
  ...e,
334
334
  high: Math.max(e.high, t.price),
@@ -339,18 +339,18 @@ function _e(e, t) {
339
339
  }
340
340
  //#endregion
341
341
  //#region src/utils/color.ts
342
- function ve(e, t = 1) {
342
+ function ye(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 m(e, t) {
346
+ function p(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 ve(n, t);
348
+ if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return ye(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
- var ye = 3;
353
- function h(e) {
352
+ var be = 3;
353
+ function xe(e) {
354
354
  let t = e.trim(), n = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(t);
355
355
  if (n) {
356
356
  let e = n[1];
@@ -373,14 +373,14 @@ function h(e) {
373
373
  a: Math.min(1, Math.max(0, i))
374
374
  };
375
375
  }
376
- function be(e, t, n) {
377
- let r = h(e), i = h(t);
376
+ function Se(e, t, n) {
377
+ let r = xe(e), i = xe(t);
378
378
  if (!r || !i) return n < .5 ? e : t;
379
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))})`;
380
+ return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(be))})`;
381
381
  }
382
- function xe(e) {
383
- let t = h(e);
382
+ function Ce(e) {
383
+ let t = xe(e);
384
384
  if (!t) return null;
385
385
  let n = (e) => {
386
386
  let t = e / 255;
@@ -388,26 +388,26 @@ function xe(e) {
388
388
  };
389
389
  return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b);
390
390
  }
391
- function g(e, t) {
392
- let n = xe(e), r = xe(t);
391
+ function m(e, t) {
392
+ let n = Ce(e), r = Ce(t);
393
393
  return n === null || r === null ? null : (Math.max(n, r) + .05) / (Math.min(n, r) + .05);
394
394
  }
395
- var Se = 20;
396
- function Ce(e, t, n, r) {
397
- let i = g(e, t);
395
+ var we = 20;
396
+ function Te(e, t, n, r) {
397
+ let i = m(e, t);
398
398
  if (i === null || i >= r) return e;
399
- for (let i = 1; i <= Se; i++) {
400
- let a = be(e, n, i / Se);
401
- if ((g(a, t) ?? 0) >= r) return a;
399
+ for (let i = 1; i <= we; i++) {
400
+ let a = Se(e, n, i / we);
401
+ if ((m(a, t) ?? 0) >= r) return a;
402
402
  }
403
403
  return n;
404
404
  }
405
- function we(e, t, n) {
406
- return (g(e, t) ?? 0) >= (g(e, n) ?? 0) ? t : n;
405
+ function Ee(e, t, n) {
406
+ return (m(e, t) ?? 0) >= (m(e, n) ?? 0) ? t : n;
407
407
  }
408
408
  //#endregion
409
409
  //#region src/utils/timezone.ts
410
- var _ = 6e4, Te = 1440 * _, v = 15 * _, Ee = 8192, De = 7 * Te, Oe = 4096, ke = new Set([
410
+ var h = 6e4, De = 1440 * h, g = 15 * h, Oe = 8192, ke = 7 * De, Ae = 4096, je = new Set([
411
411
  "UTC",
412
412
  "Etc/UTC",
413
413
  "GMT",
@@ -418,9 +418,9 @@ var _ = 6e4, Te = 1440 * _, v = 15 * _, Ee = 8192, De = 7 * Te, Oe = 4096, ke =
418
418
  "Etc/Universal",
419
419
  "Zulu",
420
420
  "Etc/Zulu"
421
- ]), Ae = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Map(), je = /* @__PURE__ */ new Map();
422
- function Me(e) {
423
- let t = Ae.get(e);
421
+ ]), Me = /* @__PURE__ */ new Map(), _ = /* @__PURE__ */ new Map(), Ne = /* @__PURE__ */ new Map();
422
+ function Pe(e) {
423
+ let t = Me.get(e);
424
424
  return t || (t = new Intl.DateTimeFormat("en-US", {
425
425
  timeZone: e,
426
426
  hourCycle: "h23",
@@ -430,34 +430,34 @@ function Me(e) {
430
430
  hour: "numeric",
431
431
  minute: "numeric",
432
432
  second: "numeric"
433
- }), Ae.set(e, t)), t;
433
+ }), Me.set(e, t)), t;
434
434
  }
435
- function b(e) {
435
+ function v(e) {
436
436
  if (!e) return !1;
437
437
  try {
438
- return Me(e), !0;
438
+ return Pe(e), !0;
439
439
  } catch {
440
440
  return !1;
441
441
  }
442
442
  }
443
- function x(e, t) {
444
- if (!Number.isFinite(t) || ke.has(e)) return 0;
445
- let n = je.get(e);
446
- n || (n = /* @__PURE__ */ new Map(), je.set(e, n));
447
- let r = Math.floor(t / De), i = n.get(r);
448
- return i || (i = Ne(e, r * De), n.size >= Oe && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
443
+ function y(e, t) {
444
+ if (!Number.isFinite(t) || je.has(e)) return 0;
445
+ let n = Ne.get(e);
446
+ n || (n = /* @__PURE__ */ new Map(), Ne.set(e, n));
447
+ let r = Math.floor(t / ke), i = n.get(r);
448
+ return i || (i = Fe(e, r * ke), n.size >= Ae && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
449
449
  }
450
- function Ne(e, t) {
451
- let n = Pe(e, t), r = t + De - v, i = Pe(e, r);
450
+ function Fe(e, t) {
451
+ let n = b(e, t), r = t + ke - g, i = b(e, r);
452
452
  if (i === n) return {
453
453
  before: n,
454
454
  change: Infinity,
455
455
  after: i
456
456
  };
457
457
  let a = t;
458
- for (; r - a > v;) {
459
- let t = a + Math.floor((r - a) / v / 2) * v;
460
- Pe(e, t) === n ? a = t : r = t;
458
+ for (; r - a > g;) {
459
+ let t = a + Math.floor((r - a) / g / 2) * g;
460
+ b(e, t) === n ? a = t : r = t;
461
461
  }
462
462
  return {
463
463
  before: n,
@@ -465,11 +465,11 @@ function Ne(e, t) {
465
465
  after: i
466
466
  };
467
467
  }
468
- function Pe(e, t) {
469
- let n = Math.floor(t / v), r = `${e}|${n}`, i = y.get(r);
468
+ function b(e, t) {
469
+ let n = Math.floor(t / g), r = `${e}|${n}`, i = _.get(r);
470
470
  if (i !== void 0) return i;
471
- let a = n * v, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
472
- for (let t of Me(e).formatToParts(new Date(a))) {
471
+ let a = n * g, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
472
+ for (let t of Pe(e).formatToParts(new Date(a))) {
473
473
  let e = Number(t.value);
474
474
  switch (t.type) {
475
475
  case "year":
@@ -492,24 +492,24 @@ function Pe(e, t) {
492
492
  break;
493
493
  }
494
494
  }
495
- let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / _);
496
- return y.size >= Ee && y.clear(), y.set(r, f), f;
495
+ let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / h);
496
+ return _.size >= Oe && _.clear(), _.set(r, ee), ee;
497
497
  }
498
- function S(e) {
499
- return e === 0 || typeof e == "string" && ke.has(e);
498
+ function x(e) {
499
+ return e === 0 || typeof e == "string" && je.has(e);
500
500
  }
501
- function C(e, t) {
502
- return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : x(e, t);
501
+ function S(e, t) {
502
+ return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : y(e, t);
503
503
  }
504
- function Fe(e, t) {
505
- let n = e - C(t, e - Te) * _;
506
- if (n + C(t, n) * _ === e) return n;
507
- let r = e - C(t, e + Te) * _;
508
- return r + C(t, r) * _ === e ? r : n;
509
- }
510
- var Ie = /* @__PURE__ */ new Map();
511
- function Le(e, t, n) {
512
- let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = Ie.get(r);
504
+ function Ie(e, t) {
505
+ let n = e - S(t, e - De) * h;
506
+ if (n + S(t, n) * h === e) return n;
507
+ let r = e - S(t, e + De) * h;
508
+ return r + S(t, r) * h === e ? r : n;
509
+ }
510
+ var Le = /* @__PURE__ */ new Map();
511
+ function Re(e, t, n) {
512
+ let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = Le.get(r);
513
513
  if (i) return i;
514
514
  let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
515
515
  try {
@@ -523,12 +523,12 @@ function Le(e, t, n) {
523
523
  timeZone: a
524
524
  });
525
525
  }
526
- let s = typeof n == "number" ? n * _ : 0;
527
- return i = (e) => o.format(new Date(e + s)), Ie.set(r, i), i;
526
+ let s = typeof n == "number" ? n * h : 0;
527
+ return i = (e) => o.format(new Date(e + s)), Le.set(r, i), i;
528
528
  }
529
529
  //#endregion
530
530
  //#region src/utils/time.ts
531
- var Re = {
531
+ var ze = {
532
532
  "1s": 1e3,
533
533
  "5s": 5e3,
534
534
  "15s": 15e3,
@@ -555,16 +555,16 @@ var Re = {
555
555
  "3M": 7776e6,
556
556
  "6M": 15552e6,
557
557
  "12M": 31536e6
558
- }, w = {
558
+ }, C = {
559
559
  s: 1e3,
560
560
  m: 6e4,
561
561
  h: 36e5,
562
562
  d: 864e5,
563
563
  w: 6048e5,
564
564
  M: 2592e6
565
- }, ze = /^([1-9]\d*)([smhdwM])$/;
566
- function T(e) {
567
- let t = ze.exec(e);
565
+ }, Be = /^([1-9]\d*)([smhdwM])$/;
566
+ function w(e) {
567
+ let t = Be.exec(e);
568
568
  if (!t) return null;
569
569
  let n = Number(t[1]);
570
570
  return Number.isSafeInteger(n) ? {
@@ -572,24 +572,24 @@ function T(e) {
572
572
  unit: t[2]
573
573
  } : null;
574
574
  }
575
- var Be = 1e6;
576
- function Ve(e) {
575
+ var Ve = 1e6;
576
+ function He(e) {
577
577
  let t = /^([1-9]\d*)T$/.exec(e);
578
578
  if (!t) return null;
579
579
  let n = Number(t[1]);
580
- return Number.isSafeInteger(n) && n <= Be ? n : null;
580
+ return Number.isSafeInteger(n) && n <= Ve ? n : null;
581
581
  }
582
- function He(e) {
583
- return T(e) !== null;
582
+ function Ue(e) {
583
+ return w(e) !== null;
584
584
  }
585
- function E(e) {
586
- let t = Re[e];
585
+ function T(e) {
586
+ let t = ze[e];
587
587
  if (t !== void 0) return t;
588
- let n = T(e);
589
- return n ? n.count * w[n.unit] : NaN;
588
+ let n = w(e);
589
+ return n ? n.count * C[n.unit] : NaN;
590
590
  }
591
- function Ue(e, t) {
592
- let n = new Date(e), r = E(t);
591
+ function We(e, t) {
592
+ let n = new Date(e), r = T(t);
593
593
  return r >= 864e5 ? n.toLocaleDateString(void 0, {
594
594
  month: "short",
595
595
  day: "numeric"
@@ -602,11 +602,11 @@ function Ue(e, t) {
602
602
  second: "2-digit"
603
603
  });
604
604
  }
605
- function We(e, t) {
606
- let n = E(t);
605
+ function Ge(e, t) {
606
+ let n = T(t);
607
607
  return Math.floor(e / n) * n;
608
608
  }
609
- function Ge(e, t) {
609
+ function Ke(e, t) {
610
610
  if (t === null) {
611
611
  let t = new Date(e);
612
612
  return {
@@ -617,7 +617,7 @@ function Ge(e, t) {
617
617
  minutes: t.getMinutes()
618
618
  };
619
619
  }
620
- let n = new Date(e + C(t, e) * 6e4);
620
+ let n = new Date(e + S(t, e) * 6e4);
621
621
  return {
622
622
  year: n.getUTCFullYear(),
623
623
  month: n.getUTCMonth() + 1,
@@ -626,71 +626,71 @@ function Ge(e, t) {
626
626
  minutes: n.getUTCMinutes()
627
627
  };
628
628
  }
629
- function Ke(e) {
629
+ function qe(e) {
630
630
  return e.hours === 0 && e.minutes === 0;
631
631
  }
632
- var qe = 20 * 36e5;
633
- function Je(e) {
632
+ var Je = 20 * 36e5;
633
+ function Ye(e) {
634
634
  let t = Math.min(e.length, 64);
635
635
  if (t < 2) return;
636
- let n = le(e), r = Infinity;
636
+ let n = ue(e), r = Infinity;
637
637
  for (let i = 1; i < t; i++) {
638
638
  let t = Math.abs(e[i].time - e[i - 1].time) * n;
639
639
  t > 0 && t < r && (r = t);
640
640
  }
641
- return r === Infinity ? void 0 : r >= qe;
641
+ return r === Infinity ? void 0 : r >= Je;
642
642
  }
643
- function Ye(e, t = Date.now()) {
644
- let n = C(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
643
+ function Xe(e, t = Date.now()) {
644
+ let n = S(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
645
645
  return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
646
646
  }
647
- var Xe = Date.UTC(1970, 0, 5), Ze = w.m, D = w.d, Qe = 24, $e = {
647
+ var Ze = Date.UTC(1970, 0, 5), Qe = C.m, E = C.d, $e = 24, et = {
648
648
  count: 1,
649
649
  unit: "m"
650
- }, et = 256, O = /* @__PURE__ */ new Map();
651
- function tt(e) {
652
- let t = O.get(e);
653
- return t || (t = T(e) ?? $e, O.size >= et && O.clear(), O.set(e, t)), t;
650
+ }, tt = 256, D = /* @__PURE__ */ new Map();
651
+ function O(e) {
652
+ let t = D.get(e);
653
+ return t || (t = w(e) ?? et, D.size >= tt && D.clear(), D.set(e, t)), t;
654
654
  }
655
655
  function nt({ unit: e }) {
656
656
  return e === "d" || e === "w" || e === "M";
657
657
  }
658
658
  function rt(e) {
659
- return e.unit === "h" ? e.count > 1 && Qe % e.count === 0 : nt(e);
659
+ return e.unit === "h" ? e.count > 1 && $e % e.count === 0 : nt(e);
660
660
  }
661
661
  function it(e) {
662
- return rt(tt(e));
662
+ return rt(O(e));
663
663
  }
664
664
  function at(e) {
665
- return nt(tt(e));
665
+ return nt(O(e));
666
666
  }
667
667
  function ot(e) {
668
- return e !== void 0 && !S(e);
668
+ return e !== void 0 && !x(e);
669
669
  }
670
670
  function st(e, t, n = 1) {
671
- let r = tt(t), i = typeof n == "number" ? n : n.weekStartsOn ?? 1, a = typeof n == "number" ? void 0 : n.timeZone;
672
- return !ot(a) || !rt(r) || typeof n == "object" && n.dates && e % D === 0 ? ct(e, r, i) : Fe(ct(e + C(a, e) * Ze, r, i), a);
671
+ let r = O(t), i = typeof n == "number" ? n : n.weekStartsOn ?? 1, a = typeof n == "number" ? void 0 : n.timeZone;
672
+ return !ot(a) || !rt(r) || typeof n == "object" && n.dates && e % E === 0 ? ct(e, r, i) : Ie(ct(e + S(a, e) * Qe, r, i), a);
673
673
  }
674
674
  function ct(e, { count: t, unit: n }, r) {
675
675
  if (n === "s" || n === "m" || n === "h" || n === "d") {
676
- let r = t * w[n];
676
+ let r = t * C[n];
677
677
  return Math.floor(e / r) * r;
678
678
  }
679
679
  let i = new Date(e);
680
680
  if (n === "w") {
681
681
  let e = (i.getUTCDay() - r + 7) % 7, n = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate() - e);
682
682
  if (t <= 1) return n;
683
- let a = Math.floor((n - Xe) / (7 * D));
684
- return Xe + Math.floor(a / t) * t * 7 * D;
683
+ let a = Math.floor((n - Ze) / (7 * E));
684
+ return Ze + Math.floor(a / t) * t * 7 * E;
685
685
  }
686
686
  let a = i.getUTCFullYear() * 12 + i.getUTCMonth(), o = Math.floor(a / t) * t;
687
687
  return Date.UTC(Math.floor(o / 12), o % 12, 1);
688
688
  }
689
689
  function lt(e, t, n) {
690
- return e % D === 0 ? 0 : n && st(e, "1d", { timeZone: n }) === e ? n : t;
690
+ return e % E === 0 ? 0 : n && st(e, "1d", { timeZone: n }) === e ? n : t;
691
691
  }
692
692
  function ut(e, t, n) {
693
- return Ge(e, lt(e, t, n));
693
+ return Ke(e, lt(e, t, n));
694
694
  }
695
695
  //#endregion
696
696
  //#region src/utils/precision.ts
@@ -710,7 +710,7 @@ function A(e, t = 2, n = "en-US") {
710
710
  }
711
711
  function mt(e, t) {
712
712
  if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
713
- let n = se(e, t, 8);
713
+ let n = ce(e, t, 8);
714
714
  return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
715
715
  }
716
716
  var ht = 2;
@@ -807,29 +807,29 @@ function At(e, t, n = 1) {
807
807
  return i;
808
808
  }
809
809
  function jt(e, t, n) {
810
- return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || S(n.timeZone) || !it(t) ? n : {
810
+ return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || x(n.timeZone) || !it(t) ? n : {
811
811
  ...n,
812
- dates: Je(e) === !0
812
+ dates: Ye(e) === !0
813
813
  };
814
814
  }
815
815
  var Mt = (e) => e === "s" || e === "m" || e === "h" || e === "d";
816
816
  function Nt(e, t) {
817
- let n = T(e), r = T(t);
817
+ let n = w(e), r = w(t);
818
818
  if (!n || !r) return !1;
819
- let i = E(e);
820
- return n.unit === "d" && n.count > 1 ? !1 : Mt(r.unit) ? Mt(n.unit) && E(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : Mt(n.unit) && Ot % i === 0;
819
+ let i = T(e);
820
+ return n.unit === "d" && n.count > 1 ? !1 : Mt(r.unit) ? Mt(n.unit) && T(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : Mt(n.unit) && Ot % i === 0;
821
821
  }
822
822
  function Pt(e, t) {
823
- let n = E(e);
823
+ let n = T(e);
824
824
  if (!(n < Ot)) return !0;
825
825
  let r = (/* @__PURE__ */ new Date()).getUTCFullYear();
826
- return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => C(t, e) * kt % n === 0);
826
+ return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => S(t, e) * kt % n === 0);
827
827
  }
828
828
  function Ft(e, t, n = {}) {
829
- let { timeZone: r } = n, i = r !== void 0 && !S(r) && it(e) ? r : void 0, a = null, o = 0;
829
+ let { timeZone: r } = n, i = r !== void 0 && !x(r) && it(e) ? r : void 0, a = null, o = 0;
830
830
  for (let n of t) {
831
831
  if (!Nt(n, e) || i !== void 0 && !Pt(n, i)) continue;
832
- let t = E(n);
832
+ let t = T(n);
833
833
  t > o && (a = n, o = t);
834
834
  }
835
835
  return a;
@@ -868,7 +868,7 @@ function Rt(e) {
868
868
  function zt(e) {
869
869
  return e?.timeZone ?? e?.timezone;
870
870
  }
871
- function j(e) {
871
+ function Bt(e) {
872
872
  let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
873
873
  if (!t) return null;
874
874
  let n = Number(t[1]), r = Number(t[2]);
@@ -876,26 +876,26 @@ function j(e) {
876
876
  }
877
877
  //#endregion
878
878
  //#region src/utils/marketStatus.ts
879
- var M = 864e5, N = 6e4, Bt = 8;
880
- function Vt(e, t) {
879
+ var j = 864e5, M = 6e4, Vt = 8;
880
+ function Ht(e, t) {
881
881
  let n = zt(e), r = (e?.sessions ?? []).flatMap((e) => {
882
- let t = j(e.start), n = j(e.end);
882
+ let t = Bt(e.start), n = Bt(e.end);
883
883
  return t === null || n === null || t === n ? [] : [{
884
884
  start: t,
885
885
  end: n,
886
886
  days: Array.isArray(e.days) ? e.days : null
887
887
  }];
888
888
  });
889
- if (!n || !b(n) || r.length === 0 || !Number.isFinite(t)) return {
889
+ if (!n || !v(n) || r.length === 0 || !Number.isFinite(t)) return {
890
890
  state: "always",
891
891
  next: null
892
892
  };
893
- let i = x(n, t) * N, a = Math.floor((t + i) / M) * M, o = (e) => e - x(n, e - x(n, e - i) * N) * N, s = [];
894
- for (let e = -1; e <= Bt; e++) {
895
- let t = a + e * M, n = (Math.floor(t / M) + 4) % 7;
893
+ let i = y(n, t) * M, a = Math.floor((t + i) / j) * j, o = (e) => e - y(n, e - y(n, e - i) * M) * M, s = [];
894
+ for (let e = -1; e <= Vt; e++) {
895
+ let t = a + e * j, n = (Math.floor(t / j) + 4) % 7;
896
896
  for (let e of r) {
897
897
  if (e.days && !e.days.includes(n)) continue;
898
- let r = t + e.start * N, i = (e.end > e.start ? t : t + M) + e.end * N;
898
+ let r = t + e.start * M, i = (e.end > e.start ? t : t + j) + e.end * M;
899
899
  s.push([o(r), o(i)]);
900
900
  }
901
901
  }
@@ -918,15 +918,15 @@ function Vt(e, t) {
918
918
  }
919
919
  //#endregion
920
920
  //#region src/utils/drawingOptions.ts
921
- var Ht = 48, Ut = 2e3, Wt = 1e4;
922
- function Gt(e) {
921
+ var Ut = 48, Wt = 2e3, Gt = 1e4;
922
+ function Kt(e) {
923
923
  if (!Array.isArray(e)) return;
924
924
  let t = [];
925
925
  for (let n of e) {
926
- if (t.length >= Ht) break;
926
+ if (t.length >= Ut) break;
927
927
  if (typeof n != "object" || !n) continue;
928
928
  let { value: e, visible: r, color: i } = n;
929
- if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > Wt || r !== void 0 && typeof r != "boolean") continue;
929
+ if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > Gt || r !== void 0 && typeof r != "boolean") continue;
930
930
  let a = {
931
931
  value: e,
932
932
  visible: r ?? !0
@@ -935,98 +935,98 @@ function Gt(e) {
935
935
  }
936
936
  return t;
937
937
  }
938
- function Kt(e, t) {
938
+ function qt(e, t) {
939
939
  switch (e.kind) {
940
940
  case "boolean": return typeof t == "boolean" ? t : void 0;
941
941
  case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
942
942
  case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
943
- case "levels": return Gt(t);
944
- case "text": return typeof t == "string" ? t.slice(0, Ut) : void 0;
943
+ case "levels": return Kt(t);
944
+ case "text": return typeof t == "string" ? t.slice(0, Wt) : void 0;
945
945
  }
946
946
  }
947
- function qt(e, t) {
947
+ function Jt(e, t) {
948
948
  if (!e || typeof t != "object" || !t) return {};
949
949
  let n = {};
950
950
  for (let [r, i] of Object.entries(t)) {
951
951
  let t = e[r];
952
952
  if (!t) continue;
953
- let a = Kt(t, i);
953
+ let a = qt(t, i);
954
954
  a !== void 0 && (n[r] = a);
955
955
  }
956
956
  return n;
957
957
  }
958
- function Jt(e) {
958
+ function Yt(e) {
959
959
  return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
960
960
  }
961
- function Yt(e, t, n) {
961
+ function Xt(e, t, n) {
962
962
  let r = e?.[n];
963
- return r ? Jt((t && n in t ? Kt(r, t[n]) : void 0) ?? r.default) : t?.[n];
963
+ return r ? Yt((t && n in t ? qt(r, t[n]) : void 0) ?? r.default) : t?.[n];
964
964
  }
965
- function Xt(e, t) {
965
+ function Zt(e, t) {
966
966
  let n = {};
967
- for (let r of Object.keys(e ?? {})) n[r] = Yt(e, t, r);
967
+ for (let r of Object.keys(e ?? {})) n[r] = Xt(e, t, r);
968
968
  return n;
969
969
  }
970
970
  //#endregion
971
971
  //#region src/utils/drawingStyle.ts
972
- var Zt = [
972
+ var Qt = [
973
973
  "solid",
974
974
  "dashed",
975
975
  "dotted"
976
- ], Qt = 64, $t = 2e3, en = 20, tn = 200;
977
- function nn(e, t, n) {
976
+ ], $t = 64, en = 2e3, tn = 20, nn = 200;
977
+ function rn(e, t, n) {
978
978
  return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
979
979
  }
980
- function rn(e) {
981
- return typeof e == "string" && e.length > 0 && e.length <= Qt ? e : void 0;
982
- }
983
980
  function an(e) {
981
+ return typeof e == "string" && e.length > 0 && e.length <= $t ? e : void 0;
982
+ }
983
+ function on(e) {
984
984
  if (typeof e != "object" || !e) return {};
985
- let t = e, n = {}, r = rn(t.color);
985
+ let t = e, n = {}, r = an(t.color);
986
986
  r !== void 0 && (n.color = r);
987
- let i = nn(t.lineWidth, .5, en);
988
- i !== void 0 && (n.lineWidth = i), Zt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
989
- let a = rn(t.fillColor);
987
+ let i = rn(t.lineWidth, .5, tn);
988
+ i !== void 0 && (n.lineWidth = i), Qt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
989
+ let a = an(t.fillColor);
990
990
  a !== void 0 && (n.fillColor = a);
991
- let o = nn(t.fillOpacity, 0, 1);
991
+ let o = rn(t.fillOpacity, 0, 1);
992
992
  o !== void 0 && (n.fillOpacity = o);
993
- let s = nn(t.fontSize, 6, tn);
994
- return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, $t)), n;
993
+ let s = rn(t.fontSize, 6, nn);
994
+ return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, en)), n;
995
995
  }
996
996
  //#endregion
997
997
  //#region src/utils/chartTypeOptions.ts
998
- var P = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, on = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, F = (e) => typeof e == "object" && !!e && !Array.isArray(e);
998
+ var N = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, P = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, F = (e) => typeof e == "object" && !!e && !Array.isArray(e);
999
999
  function sn(e) {
1000
1000
  if (!F(e)) return {};
1001
1001
  let t = {};
1002
1002
  if (F(e.renko)) {
1003
1003
  let { boxSize: n, atrPeriod: r } = e.renko;
1004
1004
  t.renko = {
1005
- ...P(n) || n === "atr" ? { boxSize: n } : {},
1006
- ...on(r, 1, 500) ? { atrPeriod: r } : {}
1005
+ ...N(n) || n === "atr" ? { boxSize: n } : {},
1006
+ ...P(r, 1, 500) ? { atrPeriod: r } : {}
1007
1007
  };
1008
1008
  }
1009
1009
  if (F(e.lineBreak)) {
1010
1010
  let { lines: n } = e.lineBreak;
1011
- t.lineBreak = on(n, 1, 10) ? { lines: n } : {};
1011
+ t.lineBreak = P(n, 1, 10) ? { lines: n } : {};
1012
1012
  }
1013
1013
  if (F(e.kagi)) {
1014
1014
  let { reversal: n, reversalType: r } = e.kagi;
1015
1015
  t.kagi = {
1016
- ...P(n) ? { reversal: n } : {},
1016
+ ...N(n) ? { reversal: n } : {},
1017
1017
  ...r === "percent" || r === "price" ? { reversalType: r } : {}
1018
1018
  };
1019
1019
  }
1020
1020
  if (F(e.pointAndFigure)) {
1021
1021
  let { boxSize: n, reversal: r } = e.pointAndFigure;
1022
1022
  t.pointAndFigure = {
1023
- ...P(n) || n === "auto" ? { boxSize: n } : {},
1024
- ...on(r, 1, 10) ? { reversal: r } : {}
1023
+ ...N(n) || n === "auto" ? { boxSize: n } : {},
1024
+ ...P(r, 1, 10) ? { reversal: r } : {}
1025
1025
  };
1026
1026
  }
1027
1027
  if (F(e.rangeBars)) {
1028
1028
  let { range: n } = e.rangeBars;
1029
- t.rangeBars = P(n) || n === "auto" ? { range: n } : {};
1029
+ t.rangeBars = N(n) || n === "auto" ? { range: n } : {};
1030
1030
  }
1031
1031
  return t;
1032
1032
  }
@@ -1050,7 +1050,7 @@ var cn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
1050
1050
  ink: "#131416"
1051
1051
  }, dn = .22;
1052
1052
  function L(e) {
1053
- return m(e, dn);
1053
+ return p(e, dn);
1054
1054
  }
1055
1055
  var fn = "#fbfaf6", R = "#1b1d21", pn = "#131416", z = "#e6e3dc", mn = "#1f7a5c", hn = "#b8423f", gn = "#4fae8a", _n = "#e2706b", vn = "#6a6966", yn = "#8d8a84", bn = {
1056
1056
  ceiling: "#FF00FF",
@@ -1078,10 +1078,10 @@ var fn = "#fbfaf6", R = "#1b1d21", pn = "#131416", z = "#e6e3dc", mn = "#1f7a5c"
1078
1078
  candleUpWick: gn,
1079
1079
  candleDownWick: _n,
1080
1080
  lineColor: z,
1081
- areaTopColor: m(z, .14),
1082
- areaBottomColor: m(z, 0),
1083
- volumeUp: m(z, .14),
1084
- volumeDown: m(z, .08),
1081
+ areaTopColor: p(z, .14),
1082
+ areaBottomColor: p(z, 0),
1083
+ volumeUp: p(z, .14),
1084
+ volumeDown: p(z, .08),
1085
1085
  axisLine: "#2a2b2f",
1086
1086
  axisLabel: "#a9a6a0",
1087
1087
  axisLabelBackground: "#232427",
@@ -1099,10 +1099,10 @@ var fn = "#fbfaf6", R = "#1b1d21", pn = "#131416", z = "#e6e3dc", mn = "#1f7a5c"
1099
1099
  candleUpWick: mn,
1100
1100
  candleDownWick: hn,
1101
1101
  lineColor: R,
1102
- areaTopColor: m(R, .12),
1103
- areaBottomColor: m(R, 0),
1104
- volumeUp: m(R, .13),
1105
- volumeDown: m(R, .08),
1102
+ areaTopColor: p(R, .12),
1103
+ areaBottomColor: p(R, 0),
1104
+ volumeUp: p(R, .13),
1105
+ volumeDown: p(R, .08),
1106
1106
  axisLine: "#cfcac0",
1107
1107
  axisLabel: "#4a4e57",
1108
1108
  axisLabelBackground: "#eeebe3",
@@ -1699,7 +1699,21 @@ function q(e, t = 2, n) {
1699
1699
  function ur(e) {
1700
1700
  return q(e, 0, "vi");
1701
1701
  }
1702
- function dr(e, t) {
1702
+ var dr = [
1703
+ [0xe8d4a51000, "조"],
1704
+ [1e8, "억"],
1705
+ [1e4, "만"]
1706
+ ];
1707
+ function fr(e) {
1708
+ return /^ko([-_]|$)/i.test(e);
1709
+ }
1710
+ function pr(e, t) {
1711
+ let n = t ?? K;
1712
+ if (!Number.isFinite(e)) return String(e);
1713
+ if (fr(n)) {
1714
+ for (let [t, r] of dr) if (Math.round(e / t * 100) >= 100) return q(e / t, 2, n) + r;
1715
+ return q(e, 0, n);
1716
+ }
1703
1717
  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);
1704
1718
  }
1705
1719
  //#endregion
@@ -1711,7 +1725,14 @@ var J = {
1711
1725
  ceiling: "#D946EF",
1712
1726
  floor: "#06B6D4",
1713
1727
  reference: "#EAB308"
1714
- }, Y = "Asia/Ho_Chi_Minh", fr = [
1728
+ }, Y = "Asia/Ho_Chi_Minh", mr = {
1729
+ up: "#E8313F",
1730
+ down: "#2F6FEB",
1731
+ unchanged: "#8B8F99",
1732
+ ceiling: "#C2121F",
1733
+ floor: "#1E4FC2",
1734
+ reference: "#8B8F99"
1735
+ }, hr = "Asia/Seoul", gr = [
1715
1736
  {
1716
1737
  name: "ATO",
1717
1738
  startTime: "09:00",
@@ -1742,7 +1763,7 @@ var J = {
1742
1763
  endTime: "14:45",
1743
1764
  type: "preClose"
1744
1765
  }
1745
- ], pr = [
1766
+ ], _r = [
1746
1767
  {
1747
1768
  name: "Phiên 1",
1748
1769
  startTime: "09:15",
@@ -1773,7 +1794,7 @@ var J = {
1773
1794
  endTime: "15:00",
1774
1795
  type: "postClose"
1775
1796
  }
1776
- ], mr = [
1797
+ ], vr = [
1777
1798
  {
1778
1799
  name: "Phiên 1",
1779
1800
  startTime: "09:15",
@@ -1792,7 +1813,7 @@ var J = {
1792
1813
  endTime: "14:30",
1793
1814
  type: "continuous"
1794
1815
  }
1795
- ], hr = [
1816
+ ], yr = [
1796
1817
  {
1797
1818
  name: "ATO",
1798
1819
  startTime: "08:45",
@@ -1823,7 +1844,147 @@ var J = {
1823
1844
  endTime: "14:45",
1824
1845
  type: "preClose"
1825
1846
  }
1826
- ], gr = {
1847
+ ], br = [
1848
+ {
1849
+ name: "장전 동시호가",
1850
+ startTime: "08:30",
1851
+ endTime: "09:00",
1852
+ type: "preOpen"
1853
+ },
1854
+ {
1855
+ name: "정규장",
1856
+ startTime: "09:00",
1857
+ endTime: "15:20",
1858
+ type: "continuous"
1859
+ },
1860
+ {
1861
+ name: "장마감 동시호가",
1862
+ startTime: "15:20",
1863
+ endTime: "15:30",
1864
+ type: "preClose"
1865
+ },
1866
+ {
1867
+ name: "장후 시간외",
1868
+ startTime: "15:40",
1869
+ endTime: "16:00",
1870
+ type: "postClose"
1871
+ },
1872
+ {
1873
+ name: "애프터마켓",
1874
+ startTime: "16:00",
1875
+ endTime: "20:00",
1876
+ type: "postClose"
1877
+ }
1878
+ ], xr = [
1879
+ {
1880
+ name: "프리마켓",
1881
+ startTime: "08:00",
1882
+ endTime: "08:50",
1883
+ type: "preOpen"
1884
+ },
1885
+ {
1886
+ name: "메인마켓",
1887
+ startTime: "09:00",
1888
+ endTime: "15:20",
1889
+ type: "continuous"
1890
+ },
1891
+ {
1892
+ name: "애프터마켓",
1893
+ startTime: "15:40",
1894
+ endTime: "20:00",
1895
+ type: "postClose"
1896
+ }
1897
+ ], Sr = [
1898
+ {
1899
+ from: 0,
1900
+ step: 1
1901
+ },
1902
+ {
1903
+ from: 2e3,
1904
+ step: 5
1905
+ },
1906
+ {
1907
+ from: 5e3,
1908
+ step: 10
1909
+ },
1910
+ {
1911
+ from: 2e4,
1912
+ step: 50
1913
+ },
1914
+ {
1915
+ from: 5e4,
1916
+ step: 100
1917
+ },
1918
+ {
1919
+ from: 2e5,
1920
+ step: 500
1921
+ },
1922
+ {
1923
+ from: 5e5,
1924
+ step: 1e3
1925
+ }
1926
+ ], Cr = [
1927
+ {
1928
+ from: 0,
1929
+ step: 1e-8
1930
+ },
1931
+ {
1932
+ from: 1e-5,
1933
+ step: 1e-7
1934
+ },
1935
+ {
1936
+ from: 1e-4,
1937
+ step: 1e-6
1938
+ },
1939
+ {
1940
+ from: .001,
1941
+ step: 1e-5
1942
+ },
1943
+ {
1944
+ from: .01,
1945
+ step: 1e-4
1946
+ },
1947
+ {
1948
+ from: .1,
1949
+ step: .001
1950
+ },
1951
+ {
1952
+ from: 1,
1953
+ step: .01
1954
+ },
1955
+ {
1956
+ from: 10,
1957
+ step: .1
1958
+ },
1959
+ {
1960
+ from: 100,
1961
+ step: 1
1962
+ },
1963
+ {
1964
+ from: 5e3,
1965
+ step: 5
1966
+ },
1967
+ {
1968
+ from: 1e4,
1969
+ step: 10
1970
+ },
1971
+ {
1972
+ from: 5e4,
1973
+ step: 50
1974
+ },
1975
+ {
1976
+ from: 1e5,
1977
+ step: 100
1978
+ },
1979
+ {
1980
+ from: 5e5,
1981
+ step: 500
1982
+ },
1983
+ {
1984
+ from: 1e6,
1985
+ step: 1e3
1986
+ }
1987
+ ], wr = {
1827
1988
  type: "stock",
1828
1989
  exchange: "HOSE",
1829
1990
  currency: "VND",
@@ -1850,12 +2011,12 @@ var J = {
1850
2011
  ceilingPercent: 7,
1851
2012
  floorPercent: 7
1852
2013
  },
1853
- sessions: fr,
2014
+ sessions: gr,
1854
2015
  colorScheme: J
1855
- }, _r = {
1856
- ...gr,
2016
+ }, Tr = {
2017
+ ...wr,
1857
2018
  priceSteps: void 0
1858
- }, vr = {
2019
+ }, Er = {
1859
2020
  type: "stock",
1860
2021
  exchange: "HNX",
1861
2022
  currency: "VND",
@@ -1868,9 +2029,9 @@ var J = {
1868
2029
  ceilingPercent: 10,
1869
2030
  floorPercent: 10
1870
2031
  },
1871
- sessions: pr,
2032
+ sessions: _r,
1872
2033
  colorScheme: J
1873
- }, yr = {
2034
+ }, Dr = {
1874
2035
  type: "stock",
1875
2036
  exchange: "UPCOM",
1876
2037
  currency: "VND",
@@ -1883,9 +2044,9 @@ var J = {
1883
2044
  ceilingPercent: 15,
1884
2045
  floorPercent: 15
1885
2046
  },
1886
- sessions: mr,
2047
+ sessions: vr,
1887
2048
  colorScheme: J
1888
- }, br = {
2049
+ }, Or = {
1889
2050
  type: "futures",
1890
2051
  exchange: "HNX",
1891
2052
  currency: "VND",
@@ -1899,14 +2060,44 @@ var J = {
1899
2060
  ceilingPercent: 7,
1900
2061
  floorPercent: 7
1901
2062
  },
1902
- sessions: hr,
2063
+ sessions: yr,
1903
2064
  colorScheme: J
1904
- }, xr = {
2065
+ }, kr = {
2066
+ type: "stock",
2067
+ exchange: "KRX",
2068
+ currency: "KRW",
2069
+ pricePrecision: 0,
2070
+ volumeUnit: 1,
2071
+ priceStep: 1,
2072
+ priceSteps: Sr,
2073
+ timeZone: hr,
2074
+ priceLimits: {
2075
+ enabled: !0,
2076
+ ceilingPercent: 30,
2077
+ floorPercent: 30,
2078
+ roundMove: !0
2079
+ },
2080
+ sessions: br,
2081
+ colorScheme: mr
2082
+ }, Ar = {
2083
+ ...kr,
2084
+ exchange: "NXT",
2085
+ sessions: xr
2086
+ }, jr = {
2087
+ type: "crypto",
2088
+ exchange: "UPBIT",
2089
+ currency: "KRW",
2090
+ priceStep: 1e-8,
2091
+ priceSteps: Cr,
2092
+ timeZone: hr,
2093
+ priceLimits: { enabled: !1 },
2094
+ colorScheme: mr
2095
+ }, Mr = {
1905
2096
  type: "crypto",
1906
2097
  currency: "USDT",
1907
2098
  pricePrecision: 2,
1908
2099
  priceLimits: { enabled: !1 }
1909
- }, Sr = {
2100
+ }, Nr = {
1910
2101
  type: "stock",
1911
2102
  exchange: "NYSE",
1912
2103
  currency: "USD",
@@ -1935,35 +2126,38 @@ var J = {
1935
2126
  }
1936
2127
  ]
1937
2128
  };
1938
- function Cr(e) {
2129
+ function Pr(e) {
2130
+ return Fr(e, J);
2131
+ }
2132
+ function Fr(e, t) {
1939
2133
  return {
1940
2134
  ...e,
1941
- candleUp: J.up,
1942
- candleDown: J.down,
1943
- candleUpWick: J.up,
1944
- candleDownWick: J.down
2135
+ candleUp: t.up,
2136
+ candleDown: t.down,
2137
+ candleUpWick: t.up,
2138
+ candleDownWick: t.down
1945
2139
  };
1946
2140
  }
1947
2141
  var X = 1e-9;
1948
- function wr(e, t) {
2142
+ function Ir(e, t) {
1949
2143
  let n = t.priceStep;
1950
2144
  for (let r of t.priceSteps ?? []) e + X >= r.from && (n = r.step);
1951
2145
  return n !== void 0 && n > 0 ? n : void 0;
1952
2146
  }
1953
- function Tr(e, t) {
2147
+ function Lr(e, t) {
1954
2148
  let n = t.priceStep;
1955
2149
  for (let r of t.priceSteps ?? []) e - X > r.from && (n = r.step);
1956
2150
  return n !== void 0 && n > 0 ? n : void 0;
1957
2151
  }
1958
2152
  function Z(e, t, n = "nearest") {
1959
- let r = wr(e, t);
2153
+ let r = Ir(e, t);
1960
2154
  if (r === void 0 || !Number.isFinite(e)) return e;
1961
2155
  let i = e / r, a = n === "down" ? Math.floor(i + X) : n === "up" ? Math.ceil(i - X) : Math.round(i);
1962
2156
  return Number((a * r).toFixed(Rt(r)));
1963
2157
  }
1964
- function Er(e, t) {
2158
+ function Rr(e, t) {
1965
2159
  if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
1966
- 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 = wr(i, t);
2160
+ 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 = Ir(i, t);
1967
2161
  if (s === void 0) return {
1968
2162
  ceiling: a,
1969
2163
  floor: o,
@@ -1975,15 +2169,23 @@ function Er(e, t) {
1975
2169
  floor: i,
1976
2170
  reference: i
1977
2171
  };
1978
- let l = Z(a, t, "down"), u = Z(o, t, "up");
1979
- return l <= i && (l = c), u >= i && (u = Z(i - (Tr(i, t) ?? s), t)), u <= 0 && (u = i), {
2172
+ let l, u;
2173
+ if (t.priceLimits.roundMove) {
2174
+ let e = {
2175
+ ...t,
2176
+ priceStep: s,
2177
+ priceSteps: void 0
2178
+ };
2179
+ l = Z(i + Z(i * n, e, "down"), t, "down"), u = Z(i - Z(i * r, e, "down"), t, "down");
2180
+ } else l = Z(a, t, "down"), u = Z(o, t, "up");
2181
+ return l <= i && (l = c), u >= i && (u = Z(i - (Lr(i, t) ?? s), t)), u <= 0 && (u = i), {
1980
2182
  ceiling: l,
1981
2183
  floor: u,
1982
2184
  reference: i
1983
2185
  };
1984
2186
  }
1985
2187
  var Q = (e, t) => Math.round(e * t * 1e9) / 1e9;
1986
- function Dr(e, t) {
2188
+ function zr(e, t) {
1987
2189
  let n = Math.round(Math.log10(t));
1988
2190
  return {
1989
2191
  ...e,
@@ -1999,11 +2201,11 @@ function Dr(e, t) {
1999
2201
  }
2000
2202
  };
2001
2203
  }
2002
- var Or = 6e4, kr = 864e5;
2003
- function Ar(e, t) {
2204
+ var Br = 6e4, Vr = 864e5;
2205
+ function Hr(e, t) {
2004
2206
  let n, r;
2005
2207
  if (t) {
2006
- let i = new Date(e + x(t, e) * Or);
2208
+ let i = new Date(e + y(t, e) * Br);
2007
2209
  n = i.getUTCHours(), r = i.getUTCMinutes();
2008
2210
  } else {
2009
2211
  let t = new Date(e);
@@ -2011,31 +2213,31 @@ function Ar(e, t) {
2011
2213
  }
2012
2214
  return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
2013
2215
  }
2014
- function jr(e, t = Date.now(), n) {
2015
- if (n !== void 0 && !b(n)) return null;
2016
- let r = Ar(t, n);
2216
+ function Ur(e, t = Date.now(), n) {
2217
+ if (n !== void 0 && !v(n)) return null;
2218
+ let r = Hr(t, n);
2017
2219
  for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
2018
2220
  return null;
2019
2221
  }
2020
- var $ = (e) => String(e).padStart(2, "0"), Mr = (e) => {
2222
+ var $ = (e) => String(e).padStart(2, "0"), Wr = (e) => {
2021
2223
  let t = new Date(e);
2022
2224
  return `${t.getUTCFullYear()}-${$(t.getUTCMonth() + 1)}-${$(t.getUTCDate())}`;
2023
- }, Nr = 4, Pr = 7 * 36e5;
2024
- function Fr(e, t, n) {
2025
- let r = Date.UTC(e, t - 1, 1), i = 1 + (Nr - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
2225
+ }, Gr = 4, Kr = 7 * 36e5;
2226
+ function qr(e, t, n) {
2227
+ let r = Date.UTC(e, t - 1, 1), i = 1 + (Gr - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
2026
2228
  let t = new Date(e).getUTCDay();
2027
- return t === 0 || t === 6 || (n?.(Mr(e)) ?? !1);
2229
+ return t === 0 || t === 6 || (n?.(Wr(e)) ?? !1);
2028
2230
  };
2029
- for (; o(a);) a -= kr;
2030
- return Mr(a);
2231
+ for (; o(a);) a -= Vr;
2232
+ return Wr(a);
2031
2233
  }
2032
- function Ir(e, t) {
2033
- let n = Mr(e + Pr), r = (e, n) => ({
2234
+ function Jr(e, t) {
2235
+ let n = Wr(e + Kr), r = (e, n) => ({
2034
2236
  symbol: `VN30F${$(e % 100)}${$(n)}`,
2035
2237
  year: e,
2036
2238
  month: n,
2037
- lastTradingDay: Fr(e, n, t)
2038
- }), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + Pr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
2239
+ lastTradingDay: qr(e, n, t)
2240
+ }), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + Kr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
2039
2241
  n > o.lastTradingDay && (o = i(o));
2040
2242
  let s = [o, i(o)], c = i(s[1]);
2041
2243
  for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
@@ -2043,7 +2245,7 @@ function Ir(e, t) {
2043
2245
  }
2044
2246
  //#endregion
2045
2247
  //#region src/icons/iconSet.ts
2046
- var Lr = {
2248
+ var Yr = {
2047
2249
  cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
2048
2250
  trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
2049
2251
  trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
@@ -2177,7 +2379,7 @@ var Lr = {
2177
2379
  ]
2178
2380
  ] },
2179
2381
  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" }
2180
- }, Rr = {
2382
+ }, Xr = {
2181
2383
  trendLine: {
2182
2384
  d: "M5 18L19 6",
2183
2385
  dots: [[5, 18], [19, 6]]
@@ -2530,7 +2732,7 @@ var Lr = {
2530
2732
  ],
2531
2733
  dash: "M12 3V21"
2532
2734
  }
2533
- }, zr = {
2735
+ }, Zr = {
2534
2736
  candlestick: {
2535
2737
  d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
2536
2738
  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"]
@@ -2597,21 +2799,21 @@ var Lr = {
2597
2799
  "M16 4.5h3v6h-3z"
2598
2800
  ]
2599
2801
  }
2600
- }, Br = 1.75, Vr = .22, Hr = /* @__PURE__ */ new WeakMap();
2601
- function Ur(e) {
2602
- let t = Hr.get(e);
2802
+ }, Qr = 1.75, $r = .22, ei = /* @__PURE__ */ new WeakMap();
2803
+ function ti(e) {
2804
+ let t = ei.get(e);
2603
2805
  if (t) return t;
2604
2806
  let n = "";
2605
- e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${Vr}" stroke="none"/>`);
2807
+ e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${$r}" stroke="none"/>`);
2606
2808
  for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
2607
2809
  e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
2608
- for (let [t, r, i = Br] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
2609
- return Hr.set(e, n), n;
2810
+ for (let [t, r, i = Qr] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
2811
+ return ei.set(e, n), n;
2610
2812
  }
2611
- function Wr(e, t) {
2612
- 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">${Ur(e)}</svg>`;
2813
+ function ni(e, t) {
2814
+ 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">${ti(e)}</svg>`;
2613
2815
  }
2614
2816
  //#endregion
2615
- export { t as CHART_STYLE_KEYS, zr as CHART_TYPE_ICONS, bn as DARK_PRICE_LIMITS, B as DARK_TERMINAL, Cn as DARK_THEME, Yn as DEFAULT_BAR_SPACING, Jn as DEFAULT_BAR_WIDTH, Un as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, cn as DEFAULT_FONT_FAMILY, $n as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, qn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, Rr as DRAWING_TOOL_ICONS, tr as FIBONACCI, pr as HNX_SESSIONS, fr as HOSE_SESSIONS, Br as ICON_DOT_RADIUS, Vr as ICON_SOFT_OPACITY, xn as LIGHT_PRICE_LIMITS, wn as LIGHT_THEME, e as LayerType, xr as MARKET_CRYPTO, vr as MARKET_HNX, gr as MARKET_HOSE, _r as MARKET_HOSE_ETF, Sr as MARKET_NYSE, yr as MARKET_UPCOM, br as MARKET_VN30F, Qn as MIN_PANEL_HEIGHT, ce as MS_TIME_THRESHOLD, er as PHI, Xn as PRICE_AXIS_WIDTH, St as PRICE_SOURCES, ln as SANS_FONT_FAMILY, I as TC_PALETTE, Sn as TC_SERIES_COLORS, Wn as TIMEFRAMES_CRYPTO, Kn as TIMEFRAMES_FOREX, Gn as TIMEFRAMES_STOCK, Zn as TIME_AXIS_HEIGHT, Lr as UI_ICONS, mr as UPCOM_SESSIONS, hr as VN30F_SESSIONS, J as VN_COLORS, dn as VOLUME_ALPHA, We as alignToTimeframe, mt as autoPricePrecision, ut as barDateParts, lt as barDateZone, le as barTimeUnit, Je as barsAreDaily, Hn as chartStyleValue, ne as clamp, Er as computePriceLimits, ge as computePriceRange, se as computeTickStep, g as contrastRatio, Cr as createVNTheme, xt as detectPrecision, Yt as drawingOption, W as en, pe as findBarIndex, he as fitPriceRange, _t as formatFraction, q as formatNumber, A as formatPrice, gt as formatPriceScaleLabel, Ue as formatTimestamp, ur as formatVND, bt as formatVolume, dr as formatVolumeLoc, vt as fractionTick, jr as getCurrentSession, or as getLocale, lr as getLocaleStrings, ve as hexToRgba, Wr as iconSvg, Et as indicatorSource, we as inkOn, ie as inverseLerp, Ke as isDateOnly, Ct as isPriceSource, He as isTimeFrame, S as isUtcTimeZone, b as isValidTimeZone, re as lerp, be as lerpColor, Ln as lineDash, Vt as marketStatus, _e as mergeBar, oe as niceNumber, de as normalizeBar, ue as normalizeBarTime, C as offsetAt, me as padPriceRange, Dt as parseIndicatorSource, T as parseTimeframe, nr as phiStep, Ft as pickBaseTimeframe, yt as priceFormatterFor, wr as priceStepAt, pt as priceTagText, Lt as rankSymbols, Nn as readChartStyleOverrides, sn as readChartTypeOptions, In as readIndicatorPlotStyles, te as readNews, Pn as readPaneStyle, l as readQuote, Ce as readableOn, cr as registerLocale, At as resampleBars, zn as resolveChartTheme, Xt as resolveDrawingOptions, V as resolveVolumeColors, Z as roundToPriceStep, ae as roundToStep, qt as sanitizeDrawingOptions, an as sanitizeDrawingStyle, Dr as scaleMarketPrices, j as sessionMinute, ar as setLocale, fe as sliceVisibleData, wt as sourcePrice, Rt as stepDecimals, zt as symbolTimeZone, sr as t, Ve as tickBarCount, Ge as timeParts, st as timeframeBucketStart, it as timeframeFollowsDays, at as timeframeSpansDays, E as timeframeToMs, Ye as tzLabel, rr as vi, Ir as vn30fContracts, Fr as vn30fLastTradingDay, L as volumeColor, Fe as wallToUtc, m as withAlpha, x as zoneOffsetMinutes, Le as zonedDateFormatter };
2817
+ export { t as CHART_STYLE_KEYS, Zr as CHART_TYPE_ICONS, bn as DARK_PRICE_LIMITS, B as DARK_TERMINAL, Cn as DARK_THEME, Yn as DEFAULT_BAR_SPACING, Jn as DEFAULT_BAR_WIDTH, Un as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, cn as DEFAULT_FONT_FAMILY, $n as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, qn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, Xr as DRAWING_TOOL_ICONS, tr as FIBONACCI, _r as HNX_SESSIONS, gr as HOSE_SESSIONS, Qr as ICON_DOT_RADIUS, $r as ICON_SOFT_OPACITY, br as KRX_SESSIONS, mr as KR_COLORS, xn as LIGHT_PRICE_LIMITS, wn as LIGHT_THEME, e as LayerType, Mr as MARKET_CRYPTO, Er as MARKET_HNX, wr as MARKET_HOSE, Tr as MARKET_HOSE_ETF, kr as MARKET_KRX, Ar as MARKET_NXT, Nr as MARKET_NYSE, jr as MARKET_UPBIT_KRW, Dr as MARKET_UPCOM, Or as MARKET_VN30F, Qn as MIN_PANEL_HEIGHT, le as MS_TIME_THRESHOLD, xr as NXT_SESSIONS, er as PHI, Xn as PRICE_AXIS_WIDTH, St as PRICE_SOURCES, ln as SANS_FONT_FAMILY, I as TC_PALETTE, Sn as TC_SERIES_COLORS, Wn as TIMEFRAMES_CRYPTO, Kn as TIMEFRAMES_FOREX, Gn as TIMEFRAMES_STOCK, Zn as TIME_AXIS_HEIGHT, Yr as UI_ICONS, vr as UPCOM_SESSIONS, yr as VN30F_SESSIONS, J as VN_COLORS, dn as VOLUME_ALPHA, Ge as alignToTimeframe, mt as autoPricePrecision, ut as barDateParts, lt as barDateZone, ue as barTimeUnit, Ye as barsAreDaily, Hn as chartStyleValue, re as clamp, Rr as computePriceLimits, _e as computePriceRange, ce as computeTickStep, m as contrastRatio, Fr as createMarketTheme, Pr as createVNTheme, xt as detectPrecision, Xt as drawingOption, W as en, me as findBarIndex, ge as fitPriceRange, _t as formatFraction, q as formatNumber, A as formatPrice, gt as formatPriceScaleLabel, We as formatTimestamp, ur as formatVND, bt as formatVolume, pr as formatVolumeLoc, vt as fractionTick, Ur as getCurrentSession, or as getLocale, lr as getLocaleStrings, ye as hexToRgba, ni as iconSvg, Et as indicatorSource, Ee as inkOn, ae as inverseLerp, qe as isDateOnly, Ct as isPriceSource, Ue as isTimeFrame, x as isUtcTimeZone, v as isValidTimeZone, ie as lerp, Se as lerpColor, Ln as lineDash, Ht as marketStatus, ve as mergeBar, se as niceNumber, fe as normalizeBar, de as normalizeBarTime, S as offsetAt, he as padPriceRange, Dt as parseIndicatorSource, w as parseTimeframe, nr as phiStep, Ft as pickBaseTimeframe, yt as priceFormatterFor, Ir as priceStepAt, pt as priceTagText, Lt as rankSymbols, Nn as readChartStyleOverrides, sn as readChartTypeOptions, In as readIndicatorPlotStyles, ne as readNews, Pn as readPaneStyle, l as readQuote, Te as readableOn, cr as registerLocale, At as resampleBars, zn as resolveChartTheme, Zt as resolveDrawingOptions, V as resolveVolumeColors, Z as roundToPriceStep, oe as roundToStep, Jt as sanitizeDrawingOptions, on as sanitizeDrawingStyle, zr as scaleMarketPrices, Bt as sessionMinute, ar as setLocale, pe as sliceVisibleData, wt as sourcePrice, Rt as stepDecimals, zt as symbolTimeZone, sr as t, He as tickBarCount, Ke as timeParts, st as timeframeBucketStart, it as timeframeFollowsDays, at as timeframeSpansDays, T as timeframeToMs, Xe as tzLabel, fr as usesKoreanUnits, rr as vi, Jr as vn30fContracts, qr as vn30fLastTradingDay, L as volumeColor, Ie as wallToUtc, p as withAlpha, y as zoneOffsetMinutes, Re as zonedDateFormatter };
2616
2818
 
2617
2819
  //# sourceMappingURL=index.js.map