@tradecanvas/commons 1.4.0 → 1.10.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.
Files changed (63) hide show
  1. package/dist/constants/themes.d.ts +19 -0
  2. package/dist/constants/themes.d.ts.map +1 -1
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.js +659 -126
  6. package/dist/index.js.map +1 -1
  7. package/dist/types/a11y.d.ts +18 -0
  8. package/dist/types/a11y.d.ts.map +1 -0
  9. package/dist/types/chart.d.ts +113 -2
  10. package/dist/types/chart.d.ts.map +1 -1
  11. package/dist/types/drawing.d.ts +85 -1
  12. package/dist/types/drawing.d.ts.map +1 -1
  13. package/dist/types/events.d.ts +150 -1
  14. package/dist/types/events.d.ts.map +1 -1
  15. package/dist/types/execution.d.ts +20 -1
  16. package/dist/types/execution.d.ts.map +1 -1
  17. package/dist/types/index.d.ts +4 -0
  18. package/dist/types/index.d.ts.map +1 -1
  19. package/dist/types/indicator.d.ts +81 -0
  20. package/dist/types/indicator.d.ts.map +1 -1
  21. package/dist/types/layout.d.ts +8 -0
  22. package/dist/types/layout.d.ts.map +1 -1
  23. package/dist/types/news.d.ts +18 -0
  24. package/dist/types/news.d.ts.map +1 -0
  25. package/dist/types/ohlc.d.ts +11 -1
  26. package/dist/types/ohlc.d.ts.map +1 -1
  27. package/dist/types/quote.d.ts +40 -0
  28. package/dist/types/quote.d.ts.map +1 -0
  29. package/dist/types/realtime.d.ts +50 -0
  30. package/dist/types/realtime.d.ts.map +1 -1
  31. package/dist/types/rendering.d.ts +11 -0
  32. package/dist/types/rendering.d.ts.map +1 -1
  33. package/dist/types/symbol.d.ts +42 -0
  34. package/dist/types/symbol.d.ts.map +1 -0
  35. package/dist/types/theme.d.ts +6 -0
  36. package/dist/types/theme.d.ts.map +1 -1
  37. package/dist/types/trading.d.ts +33 -2
  38. package/dist/types/trading.d.ts.map +1 -1
  39. package/dist/utils/chartTypeOptions.d.ts +9 -0
  40. package/dist/utils/chartTypeOptions.d.ts.map +1 -0
  41. package/dist/utils/color.d.ts +4 -0
  42. package/dist/utils/color.d.ts.map +1 -1
  43. package/dist/utils/drawingOptions.d.ts +8 -0
  44. package/dist/utils/drawingOptions.d.ts.map +1 -0
  45. package/dist/utils/drawingStyle.d.ts +9 -0
  46. package/dist/utils/drawingStyle.d.ts.map +1 -0
  47. package/dist/utils/index.d.ts +8 -0
  48. package/dist/utils/index.d.ts.map +1 -1
  49. package/dist/utils/marketStatus.d.ts +16 -0
  50. package/dist/utils/marketStatus.d.ts.map +1 -0
  51. package/dist/utils/precision.d.ts +18 -0
  52. package/dist/utils/precision.d.ts.map +1 -1
  53. package/dist/utils/priceSource.d.ts +15 -0
  54. package/dist/utils/priceSource.d.ts.map +1 -0
  55. package/dist/utils/resample.d.ts +13 -0
  56. package/dist/utils/resample.d.ts.map +1 -0
  57. package/dist/utils/symbols.d.ts +13 -0
  58. package/dist/utils/symbols.d.ts.map +1 -0
  59. package/dist/utils/time.d.ts +29 -8
  60. package/dist/utils/time.d.ts.map +1 -1
  61. package/dist/utils/timezone.d.ts +28 -0
  62. package/dist/utils/timezone.d.ts.map +1 -0
  63. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -26,6 +26,13 @@ var e = /* @__PURE__ */ function(e) {
26
26
  maxWidth: 100
27
27
  },
28
28
  contextMenu: { enabled: !0 },
29
+ lineButtons: {
30
+ cancel: !0,
31
+ close: !0,
32
+ reverse: !0,
33
+ removeStops: !0
34
+ },
35
+ fillMarks: !0,
29
36
  pricePrecision: 2,
30
37
  dragThreshold: 3
31
38
  }, r = {
@@ -54,36 +61,104 @@ var e = /* @__PURE__ */ function(e) {
54
61
  autoScroll: !0,
55
62
  showCurrentPriceLine: !0,
56
63
  aggregateTicks: !1
64
+ }, s = [
65
+ "change",
66
+ "changePercent",
67
+ "open",
68
+ "high",
69
+ "low",
70
+ "prevClose",
71
+ "volume",
72
+ "bid",
73
+ "ask",
74
+ "time"
75
+ ];
76
+ function c(e) {
77
+ if (!e || typeof e != "object") return null;
78
+ let t = e, n = typeof t.symbol == "string" ? t.symbol.trim() : "";
79
+ if (!n || n.length > 64 || !l(t.last)) return null;
80
+ let r = {
81
+ symbol: n,
82
+ last: t.last
83
+ };
84
+ for (let e of s) {
85
+ let n = t[e];
86
+ l(n) && (r[e] = n);
87
+ }
88
+ let i = r.prevClose ?? r.open;
89
+ if (r.change === void 0 && i !== void 0 && (r.change = r.last - i), r.changePercent === void 0 && r.change !== void 0) {
90
+ let e = r.last - r.change;
91
+ e !== 0 && (r.changePercent = r.change / e * 100);
92
+ }
93
+ return r;
94
+ }
95
+ function l(e) {
96
+ return typeof e == "number" && Number.isFinite(e);
97
+ }
98
+ //#endregion
99
+ //#region src/types/news.ts
100
+ var u = 300, d = 1e3, f = (e, t) => {
101
+ if (typeof e != "string") return;
102
+ let n = e.trim();
103
+ return n ? n.slice(0, t) : void 0;
104
+ }, ee = (e) => {
105
+ if (typeof e == "string") try {
106
+ let t = new URL(e);
107
+ return t.protocol === "https:" || t.protocol === "http:" ? t.href : void 0;
108
+ } catch {
109
+ return;
110
+ }
57
111
  };
112
+ function te(e, t = 20) {
113
+ if (!Array.isArray(e)) return [];
114
+ let n = [];
115
+ for (let t of e) {
116
+ if (!t || typeof t != "object") continue;
117
+ let e = t, r = f(e.title, u);
118
+ if (!r || typeof e.time != "number" || !Number.isFinite(e.time)) continue;
119
+ let i = {
120
+ title: r,
121
+ time: e.time
122
+ }, a = ee(e.url);
123
+ a && (i.url = a);
124
+ let o = f(e.source, u);
125
+ o && (i.source = o);
126
+ let s = f(e.summary, d);
127
+ s && (i.summary = s);
128
+ let c = f(e.id, u);
129
+ c && (i.id = c), n.push(i);
130
+ }
131
+ return n.sort((e, t) => t.time - e.time).slice(0, Math.max(0, t));
132
+ }
58
133
  //#endregion
59
134
  //#region src/utils/math.ts
60
- function s(e, t, n) {
135
+ function ne(e, t, n) {
61
136
  return Math.max(t, Math.min(n, e));
62
137
  }
63
- function c(e, t, n) {
138
+ function re(e, t, n) {
64
139
  return e + (t - e) * n;
65
140
  }
66
- function l(e, t, n) {
141
+ function ie(e, t, n) {
67
142
  return e === t ? 0 : (n - e) / (t - e);
68
143
  }
69
- function u(e, t) {
144
+ function ae(e, t) {
70
145
  return Math.round(e / t) * t;
71
146
  }
72
- function d(e, t) {
147
+ function p(e, t) {
73
148
  let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
74
149
  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;
75
150
  }
76
- function f(e, t, n) {
77
- return d(d(t - e, !1) / (n - 1), !0);
151
+ function oe(e, t, n) {
152
+ return p(p(t - e, !1) / (n - 1), !0);
78
153
  }
79
154
  //#endregion
80
155
  //#region src/utils/data.ts
81
- function p(e) {
156
+ function se(e) {
82
157
  return e > 0xe8d4a51000 ? e : e * 1e3;
83
158
  }
84
- function m(e) {
159
+ function ce(e) {
85
160
  return {
86
- time: p(e.time ?? e.t ?? 0),
161
+ time: se(e.time ?? e.t ?? 0),
87
162
  open: e.open ?? e.o ?? 0,
88
163
  high: e.high ?? e.h ?? 0,
89
164
  low: e.low ?? e.l ?? 0,
@@ -91,11 +166,11 @@ function m(e) {
91
166
  volume: e.volume ?? e.v ?? 0
92
167
  };
93
168
  }
94
- function ee(e, t, n) {
169
+ function le(e, t, n) {
95
170
  let r = Math.max(0, t), i = Math.min(e.length, n + 1);
96
171
  return e.slice(r, i);
97
172
  }
98
- function te(e, t) {
173
+ function ue(e, t) {
99
174
  let n = 0, r = e.length - 1;
100
175
  for (; n <= r;) {
101
176
  let i = n + r >>> 1;
@@ -105,7 +180,7 @@ function te(e, t) {
105
180
  }
106
181
  return n;
107
182
  }
108
- function h(e, t, n, r = .05) {
183
+ function de(e, t, n, r = .05) {
109
184
  if (e.length === 0) return {
110
185
  min: 0,
111
186
  max: 1
@@ -122,7 +197,7 @@ function h(e, t, n, r = .05) {
122
197
  max: s + c * r
123
198
  };
124
199
  }
125
- function g(e, t) {
200
+ function fe(e, t) {
126
201
  return {
127
202
  ...e,
128
203
  high: Math.max(e.high, t.price),
@@ -134,15 +209,17 @@ function g(e, t) {
134
209
  }
135
210
  //#endregion
136
211
  //#region src/utils/color.ts
137
- function _(e, t = 1) {
138
- return `rgba(${parseInt(e.slice(1, 3), 16)}, ${parseInt(e.slice(3, 5), 16)}, ${parseInt(e.slice(5, 7), 16)}, ${t})`;
212
+ function pe(e, t = 1) {
213
+ let n = e.slice(1);
214
+ 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})`;
139
215
  }
140
- function v(e, t) {
141
- if (e.startsWith("#")) return _(e, t);
142
- let n = e.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
143
- return n ? `rgba(${n[1]}, ${n[2]}, ${n[3]}, ${t})` : e;
216
+ function me(e, t) {
217
+ let n = e.trim();
218
+ if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return pe(n, t);
219
+ let r = n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);
220
+ return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
144
221
  }
145
- function ne(e, t, n) {
222
+ function he(e, t, n) {
146
223
  let r = (e) => (e = e.replace("#", ""), e.length === 3 && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]), {
147
224
  r: parseInt(e.slice(0, 2), 16),
148
225
  g: parseInt(e.slice(2, 4), 16),
@@ -151,8 +228,126 @@ function ne(e, t, n) {
151
228
  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)})`;
152
229
  }
153
230
  //#endregion
231
+ //#region src/utils/timezone.ts
232
+ var m = 6e4, h = 1440 * m, g = 15 * m, ge = 8192, _ = 7 * h, _e = 4096, ve = new Set([
233
+ "UTC",
234
+ "Etc/UTC",
235
+ "GMT",
236
+ "Etc/GMT",
237
+ "UCT",
238
+ "Etc/UCT",
239
+ "Universal",
240
+ "Etc/Universal",
241
+ "Zulu",
242
+ "Etc/Zulu"
243
+ ]), ye = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Map();
244
+ function be(e) {
245
+ let t = ye.get(e);
246
+ return t || (t = new Intl.DateTimeFormat("en-US", {
247
+ timeZone: e,
248
+ hourCycle: "h23",
249
+ year: "numeric",
250
+ month: "numeric",
251
+ day: "numeric",
252
+ hour: "numeric",
253
+ minute: "numeric",
254
+ second: "numeric"
255
+ }), ye.set(e, t)), t;
256
+ }
257
+ function xe(e) {
258
+ if (!e) return !1;
259
+ try {
260
+ return be(e), !0;
261
+ } catch {
262
+ return !1;
263
+ }
264
+ }
265
+ function b(e, t) {
266
+ if (!Number.isFinite(t) || ve.has(e)) return 0;
267
+ let n = y.get(e);
268
+ n || (n = /* @__PURE__ */ new Map(), y.set(e, n));
269
+ let r = Math.floor(t / _), i = n.get(r);
270
+ return i || (i = Se(e, r * _), n.size >= _e && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
271
+ }
272
+ function Se(e, t) {
273
+ let n = x(e, t), r = t + _ - g, i = x(e, r);
274
+ if (i === n) return {
275
+ before: n,
276
+ change: Infinity,
277
+ after: i
278
+ };
279
+ let a = t;
280
+ for (; r - a > g;) {
281
+ let t = a + Math.floor((r - a) / g / 2) * g;
282
+ x(e, t) === n ? a = t : r = t;
283
+ }
284
+ return {
285
+ before: n,
286
+ change: r,
287
+ after: i
288
+ };
289
+ }
290
+ function x(e, t) {
291
+ let n = Math.floor(t / g), r = `${e}|${n}`, i = v.get(r);
292
+ if (i !== void 0) return i;
293
+ let a = n * g, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
294
+ for (let t of be(e).formatToParts(new Date(a))) {
295
+ let e = Number(t.value);
296
+ switch (t.type) {
297
+ case "year":
298
+ o = e;
299
+ break;
300
+ case "month":
301
+ s = e;
302
+ break;
303
+ case "day":
304
+ c = e;
305
+ break;
306
+ case "hour":
307
+ l = e % 24;
308
+ break;
309
+ case "minute":
310
+ u = e;
311
+ break;
312
+ case "second":
313
+ d = e;
314
+ break;
315
+ }
316
+ }
317
+ let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / m);
318
+ return v.size >= ge && v.clear(), v.set(r, f), f;
319
+ }
320
+ function S(e, t) {
321
+ return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : b(e, t);
322
+ }
323
+ function Ce(e, t) {
324
+ let n = e - S(t, e - h) * m;
325
+ if (n + S(t, n) * m === e) return n;
326
+ let r = e - S(t, e + h) * m;
327
+ return r + S(t, r) * m === e ? r : n;
328
+ }
329
+ var C = /* @__PURE__ */ new Map();
330
+ function we(e, t, n) {
331
+ let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = C.get(r);
332
+ if (i) return i;
333
+ let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
334
+ try {
335
+ o = new Intl.DateTimeFormat(e, {
336
+ ...t,
337
+ timeZone: a
338
+ });
339
+ } catch {
340
+ o = new Intl.DateTimeFormat("en-US", {
341
+ ...t,
342
+ timeZone: a
343
+ });
344
+ }
345
+ let s = typeof n == "number" ? n * m : 0;
346
+ return i = (e) => o.format(new Date(e + s)), C.set(r, i), i;
347
+ }
348
+ //#endregion
154
349
  //#region src/utils/time.ts
155
- var y = {
350
+ var Te = {
156
351
  "1s": 1e3,
157
352
  "5s": 5e3,
158
353
  "15s": 15e3,
@@ -179,12 +374,41 @@ var y = {
179
374
  "3M": 7776e6,
180
375
  "6M": 15552e6,
181
376
  "12M": 31536e6
182
- };
183
- function re(e) {
184
- return y[e];
377
+ }, w = {
378
+ s: 1e3,
379
+ m: 6e4,
380
+ h: 36e5,
381
+ d: 864e5,
382
+ w: 6048e5,
383
+ M: 2592e6
384
+ }, Ee = /^([1-9]\d*)([smhdwM])$/;
385
+ function T(e) {
386
+ let t = Ee.exec(e);
387
+ if (!t) return null;
388
+ let n = Number(t[1]);
389
+ return Number.isSafeInteger(n) ? {
390
+ count: n,
391
+ unit: t[2]
392
+ } : null;
393
+ }
394
+ var De = 1e6;
395
+ function Oe(e) {
396
+ let t = /^([1-9]\d*)T$/.exec(e);
397
+ if (!t) return null;
398
+ let n = Number(t[1]);
399
+ return Number.isSafeInteger(n) && n <= De ? n : null;
400
+ }
401
+ function ke(e) {
402
+ return T(e) !== null;
185
403
  }
186
- function ie(e, t) {
187
- let n = new Date(e), r = y[t];
404
+ function E(e) {
405
+ let t = Te[e];
406
+ if (t !== void 0) return t;
407
+ let n = T(e);
408
+ return n ? n.count * w[n.unit] : NaN;
409
+ }
410
+ function Ae(e, t) {
411
+ let n = new Date(e), r = E(t);
188
412
  return r >= 864e5 ? n.toLocaleDateString(void 0, {
189
413
  month: "short",
190
414
  day: "numeric"
@@ -197,11 +421,11 @@ function ie(e, t) {
197
421
  second: "2-digit"
198
422
  });
199
423
  }
200
- function ae(e, t) {
201
- let n = y[t];
424
+ function je(e, t) {
425
+ let n = E(t);
202
426
  return Math.floor(e / n) * n;
203
427
  }
204
- function oe(e, t) {
428
+ function Me(e, t) {
205
429
  if (t === null) {
206
430
  let t = new Date(e);
207
431
  return {
@@ -212,7 +436,7 @@ function oe(e, t) {
212
436
  minutes: t.getMinutes()
213
437
  };
214
438
  }
215
- let n = new Date(e + t * 6e4);
439
+ let n = new Date(e + S(t, e) * 6e4);
216
440
  return {
217
441
  year: n.getUTCFullYear(),
218
442
  month: n.getUTCMonth() + 1,
@@ -221,72 +445,90 @@ function oe(e, t) {
221
445
  minutes: n.getUTCMinutes()
222
446
  };
223
447
  }
224
- function se(e) {
448
+ function Ne(e) {
225
449
  return e.hours === 0 && e.minutes === 0;
226
450
  }
227
- function ce(e) {
228
- let t = e === null ? -(/* @__PURE__ */ new Date()).getTimezoneOffset() : e, n = t >= 0 ? "+" : "-", r = Math.abs(t), i = Math.floor(r / 60), a = r % 60;
229
- return a === 0 ? `UTC${n}${i}` : `UTC${n}${i}:${String(a).padStart(2, "0")}`;
451
+ var Pe = 20 * 36e5;
452
+ function Fe(e) {
453
+ let t = Math.min(e.length, 64);
454
+ if (t < 2) return;
455
+ let n = (e) => e > 0xe8d4a51000 ? e : e * 1e3, r = Infinity;
456
+ for (let i = 1; i < t; i++) {
457
+ let t = Math.abs(n(e[i].time) - n(e[i - 1].time));
458
+ t > 0 && t < r && (r = t);
459
+ }
460
+ return r === Infinity ? void 0 : r >= Pe;
230
461
  }
231
- var b = Date.UTC(1970, 0, 5);
232
- function le(e) {
233
- let t = /^(\d+)([smhdwM])$/.exec(e);
234
- return t ? {
235
- count: parseInt(t[1], 10),
236
- unit: t[2]
237
- } : {
462
+ function Ie(e, t = Date.now()) {
463
+ let n = S(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
464
+ return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
465
+ }
466
+ var D = Date.UTC(1970, 0, 5);
467
+ function O(e, t, n = 1) {
468
+ let { count: r, unit: i } = T(t) ?? {
238
469
  count: 1,
239
470
  unit: "m"
240
471
  };
241
- }
242
- function ue(e, t, n = 1) {
243
- let { count: r, unit: i } = le(t);
244
472
  if (i === "s" || i === "m" || i === "h" || i === "d") {
245
- let n = y[t];
246
- return Math.floor(e / n) * n;
473
+ let t = r * w[i];
474
+ return Math.floor(e / t) * t;
247
475
  }
248
476
  let a = new Date(e);
249
477
  if (i === "w") {
250
- let e = y["1d"], t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
478
+ let e = w.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
251
479
  if (r <= 1) return i;
252
- let o = Math.floor((i - b) / (7 * e));
253
- return b + Math.floor(o / r) * r * 7 * e;
480
+ let o = Math.floor((i - D) / (7 * e));
481
+ return D + Math.floor(o / r) * r * 7 * e;
254
482
  }
255
483
  let o = a.getUTCFullYear() * 12 + a.getUTCMonth(), s = Math.floor(o / r) * r;
256
484
  return Date.UTC(Math.floor(s / 12), s % 12, 1);
257
485
  }
258
486
  //#endregion
259
487
  //#region src/utils/precision.ts
260
- var x = 64, S = /* @__PURE__ */ new Map();
261
- function C(e, t) {
262
- let n = `${e}|${t}`, r = S.get(n);
263
- return r || (S.size >= x && S.clear(), r = new Intl.NumberFormat(e, {
488
+ var Le = 64, k = /* @__PURE__ */ new Map();
489
+ function Re(e, t) {
490
+ let n = `${e}|${t}`, r = k.get(n);
491
+ return r || (k.size >= Le && k.clear(), r = new Intl.NumberFormat(e, {
264
492
  minimumFractionDigits: t,
265
493
  maximumFractionDigits: t
266
- }), S.set(n, r)), r;
494
+ }), k.set(n, r)), r;
267
495
  }
268
- function w(e, t = 2, n = "en-US") {
269
- return C(n, t).format(e);
496
+ function A(e, t = 2, n = "en-US") {
497
+ return Re(n, t).format(e);
270
498
  }
271
- function T(e, t) {
499
+ function ze(e, t) {
272
500
  if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
273
- let n = f(e, t, 8);
501
+ let n = oe(e, t, 8);
274
502
  return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
275
503
  }
276
- function E(e, t, n, r = 2, i = "en-US") {
504
+ function Be(e, t, n, r = 2, i = "en-US") {
277
505
  if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
278
506
  if (t === "percentage") {
279
507
  let t = (e / n - 1) * 100;
280
508
  return `${t > 0 ? "+" : ""}${t.toFixed(2)}%`;
281
509
  }
282
- return w(e / n * 100, 2, i);
510
+ return A(e / n * 100, 2, i);
283
511
  }
284
- return w(e, r, i);
512
+ return A(e, r, i);
513
+ }
514
+ function Ve(e, t, n = 1) {
515
+ let r = Number.isInteger(n) && n > 1 ? n : 1;
516
+ if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
517
+ 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)) : "";
518
+ return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
519
+ }
520
+ function He(e) {
521
+ if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
522
+ let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
523
+ return 1 / (e.denominator * t);
285
524
  }
286
- function D(e) {
525
+ function Ue(e) {
526
+ return e ? typeof e == "function" ? e : He(e) === null ? null : (t) => Ve(t, e.denominator, e.subDenominator) : null;
527
+ }
528
+ function We(e) {
287
529
  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);
288
530
  }
289
- function O(e) {
531
+ function Ge(e) {
290
532
  let t = 0;
291
533
  for (let n of e) {
292
534
  let e = n.toString(), r = e.indexOf(".");
@@ -295,8 +537,274 @@ function O(e) {
295
537
  return Math.min(t, 8);
296
538
  }
297
539
  //#endregion
540
+ //#region src/utils/priceSource.ts
541
+ var Ke = [
542
+ "close",
543
+ "open",
544
+ "high",
545
+ "low",
546
+ "hl2",
547
+ "hlc3",
548
+ "ohlc4",
549
+ "hlcc4"
550
+ ];
551
+ function qe(e) {
552
+ return typeof e == "string" && Ke.includes(e);
553
+ }
554
+ function Je(e, t) {
555
+ switch (t) {
556
+ case "open": return e.open;
557
+ case "high": return e.high;
558
+ case "low": return e.low;
559
+ case "hl2": return (e.high + e.low) / 2;
560
+ case "hlc3": return (e.high + e.low + e.close) / 3;
561
+ case "ohlc4": return (e.open + e.high + e.low + e.close) / 4;
562
+ case "hlcc4": return (e.high + e.low + 2 * e.close) / 4;
563
+ default: return e.close;
564
+ }
565
+ }
566
+ var Ye = /^ind:([^:]+):(.+)$/;
567
+ function Xe(e, t) {
568
+ return `ind:${e}:${t}`;
569
+ }
570
+ function Ze(e) {
571
+ if (typeof e != "string") return null;
572
+ let t = Ye.exec(e);
573
+ return t ? {
574
+ instanceId: t[1],
575
+ key: t[2]
576
+ } : null;
577
+ }
578
+ //#endregion
579
+ //#region src/utils/resample.ts
580
+ var Qe = 864e5;
581
+ function $e(e, t, n = 1) {
582
+ let r = [], i = null;
583
+ for (let a of e) {
584
+ let e = O(a.time, t, n);
585
+ i === null || e !== i.time ? (i = {
586
+ time: e,
587
+ open: a.open,
588
+ high: a.high,
589
+ low: a.low,
590
+ close: a.close,
591
+ volume: a.volume
592
+ }, 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);
593
+ }
594
+ return r;
595
+ }
596
+ var j = (e) => e === "s" || e === "m" || e === "h" || e === "d";
597
+ function et(e, t) {
598
+ let n = T(e), r = T(t);
599
+ if (!n || !r) return !1;
600
+ let i = E(e);
601
+ 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) && Qe % i === 0;
602
+ }
603
+ function tt(e, t) {
604
+ let n = null, r = 0;
605
+ for (let i of t) {
606
+ if (!et(i, e)) continue;
607
+ let t = E(i);
608
+ t > r && (n = i, r = t);
609
+ }
610
+ return n;
611
+ }
612
+ //#endregion
613
+ //#region src/utils/symbols.ts
614
+ function nt(e, t) {
615
+ if (!e) return 0;
616
+ if (e === t) return 1e3;
617
+ if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
618
+ let n = e.indexOf(t);
619
+ return n >= 0 ? 300 - Math.min(100, n) : 0;
620
+ }
621
+ function rt(e, t, n = 50, r) {
622
+ let i = t.trim().toUpperCase();
623
+ if (!i) return e.slice(0, n);
624
+ let a = [];
625
+ for (let t of e) {
626
+ let e = Math.max(nt(t.symbol.toUpperCase(), i), nt((t.description ?? "").toUpperCase(), i) * .8);
627
+ e > 0 && a.push({
628
+ info: t,
629
+ score: e + (r?.(t) ?? 0)
630
+ });
631
+ }
632
+ return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
633
+ }
634
+ function it(e) {
635
+ let t = typeof e == "number" ? e : Number(e);
636
+ if (!Number.isFinite(t) || t <= 0) return 0;
637
+ for (let e = 0; e <= 12; e++) {
638
+ let n = t * 10 ** e;
639
+ if (Math.abs(n - Math.round(n)) < 1e-9 * Math.max(1, n)) return e;
640
+ }
641
+ return 12;
642
+ }
643
+ function M(e) {
644
+ let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
645
+ if (!t) return null;
646
+ let n = Number(t[1]), r = Number(t[2]);
647
+ return n === 24 && r === 0 ? 1440 : n < 24 && r < 60 ? n * 60 + r : null;
648
+ }
649
+ //#endregion
650
+ //#region src/utils/marketStatus.ts
651
+ var N = 864e5, P = 6e4, at = 8;
652
+ function ot(e, t) {
653
+ let n = e?.timezone, r = (e?.sessions ?? []).flatMap((e) => {
654
+ let t = M(e.start), n = M(e.end);
655
+ return t === null || n === null || t === n ? [] : [{
656
+ start: t,
657
+ end: n,
658
+ days: Array.isArray(e.days) ? e.days : null
659
+ }];
660
+ });
661
+ if (!n || !xe(n) || r.length === 0 || !Number.isFinite(t)) return {
662
+ state: "always",
663
+ next: null
664
+ };
665
+ 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 = [];
666
+ for (let e = -1; e <= at; e++) {
667
+ let t = a + e * N, n = (Math.floor(t / N) + 4) % 7;
668
+ for (let e of r) {
669
+ if (e.days && !e.days.includes(n)) continue;
670
+ let r = t + e.start * P, i = (e.end > e.start ? t : t + N) + e.end * P;
671
+ s.push([o(r), o(i)]);
672
+ }
673
+ }
674
+ s.sort((e, t) => e[0] - t[0]);
675
+ let c = [];
676
+ for (let [e, t] of s) {
677
+ let n = c[c.length - 1];
678
+ n && e <= n[1] ? c[c.length - 1] = [n[0], Math.max(n[1], t)] : c.push([e, t]);
679
+ }
680
+ let l = c.find(([e, n]) => e <= t && t < n);
681
+ if (l) return {
682
+ state: "open",
683
+ next: l[1]
684
+ };
685
+ let u = c.find(([e]) => e > t);
686
+ return {
687
+ state: "closed",
688
+ next: u ? u[0] : null
689
+ };
690
+ }
691
+ //#endregion
692
+ //#region src/utils/drawingOptions.ts
693
+ var st = 48, ct = 2e3, lt = 1e4;
694
+ function ut(e) {
695
+ if (!Array.isArray(e)) return;
696
+ let t = [];
697
+ for (let n of e) {
698
+ if (t.length >= st) break;
699
+ if (typeof n != "object" || !n) continue;
700
+ let { value: e, visible: r, color: i } = n;
701
+ if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > lt || r !== void 0 && typeof r != "boolean") continue;
702
+ let a = {
703
+ value: e,
704
+ visible: r ?? !0
705
+ };
706
+ typeof i == "string" && i && (a.color = i), t.push(a);
707
+ }
708
+ return t;
709
+ }
710
+ function dt(e, t) {
711
+ switch (e.kind) {
712
+ case "boolean": return typeof t == "boolean" ? t : void 0;
713
+ case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
714
+ case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
715
+ case "levels": return ut(t);
716
+ case "text": return typeof t == "string" ? t.slice(0, ct) : void 0;
717
+ }
718
+ }
719
+ function ft(e, t) {
720
+ if (!e || typeof t != "object" || !t) return {};
721
+ let n = {};
722
+ for (let [r, i] of Object.entries(t)) {
723
+ let t = e[r];
724
+ if (!t) continue;
725
+ let a = dt(t, i);
726
+ a !== void 0 && (n[r] = a);
727
+ }
728
+ return n;
729
+ }
730
+ function pt(e) {
731
+ return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
732
+ }
733
+ function mt(e, t, n) {
734
+ let r = e?.[n];
735
+ return r ? pt((t && n in t ? dt(r, t[n]) : void 0) ?? r.default) : t?.[n];
736
+ }
737
+ function ht(e, t) {
738
+ let n = {};
739
+ for (let r of Object.keys(e ?? {})) n[r] = mt(e, t, r);
740
+ return n;
741
+ }
742
+ //#endregion
743
+ //#region src/utils/drawingStyle.ts
744
+ var gt = [
745
+ "solid",
746
+ "dashed",
747
+ "dotted"
748
+ ], _t = 64, vt = 2e3, yt = 20, bt = 200;
749
+ function F(e, t, n) {
750
+ return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
751
+ }
752
+ function xt(e) {
753
+ return typeof e == "string" && e.length > 0 && e.length <= _t ? e : void 0;
754
+ }
755
+ function St(e) {
756
+ if (typeof e != "object" || !e) return {};
757
+ let t = e, n = {}, r = xt(t.color);
758
+ r !== void 0 && (n.color = r);
759
+ let i = F(t.lineWidth, .5, yt);
760
+ i !== void 0 && (n.lineWidth = i), gt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
761
+ let a = xt(t.fillColor);
762
+ a !== void 0 && (n.fillColor = a);
763
+ let o = F(t.fillOpacity, 0, 1);
764
+ o !== void 0 && (n.fillOpacity = o);
765
+ let s = F(t.fontSize, 6, bt);
766
+ return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, vt)), n;
767
+ }
768
+ //#endregion
769
+ //#region src/utils/chartTypeOptions.ts
770
+ 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);
771
+ function Ct(e) {
772
+ if (!R(e)) return {};
773
+ let t = {};
774
+ if (R(e.renko)) {
775
+ let { boxSize: n, atrPeriod: r } = e.renko;
776
+ t.renko = {
777
+ ...I(n) || n === "atr" ? { boxSize: n } : {},
778
+ ...L(r, 1, 500) ? { atrPeriod: r } : {}
779
+ };
780
+ }
781
+ if (R(e.lineBreak)) {
782
+ let { lines: n } = e.lineBreak;
783
+ t.lineBreak = L(n, 1, 10) ? { lines: n } : {};
784
+ }
785
+ if (R(e.kagi)) {
786
+ let { reversal: n, reversalType: r } = e.kagi;
787
+ t.kagi = {
788
+ ...I(n) ? { reversal: n } : {},
789
+ ...r === "percent" || r === "price" ? { reversalType: r } : {}
790
+ };
791
+ }
792
+ if (R(e.pointAndFigure)) {
793
+ let { boxSize: n, reversal: r } = e.pointAndFigure;
794
+ t.pointAndFigure = {
795
+ ...I(n) || n === "auto" ? { boxSize: n } : {},
796
+ ...L(r, 1, 10) ? { reversal: r } : {}
797
+ };
798
+ }
799
+ if (R(e.rangeBars)) {
800
+ let { range: n } = e.rangeBars;
801
+ t.rangeBars = I(n) || n === "auto" ? { range: n } : {};
802
+ }
803
+ return t;
804
+ }
805
+ //#endregion
298
806
  //#region src/constants/defaults.ts
299
- var k = {
807
+ var wt = {
300
808
  autoScale: !0,
301
809
  rightMargin: 5,
302
810
  minBarSpacing: 2,
@@ -307,7 +815,7 @@ var k = {
307
815
  vLineStyle: "solid"
308
816
  },
309
817
  crosshair: { mode: "magnet" }
310
- }, A = [
818
+ }, Tt = [
311
819
  "1s",
312
820
  "1m",
313
821
  "3m",
@@ -324,7 +832,7 @@ var k = {
324
832
  "3d",
325
833
  "1w",
326
834
  "1M"
327
- ], j = [
835
+ ], Et = [
328
836
  "1m",
329
837
  "5m",
330
838
  "15m",
@@ -338,7 +846,7 @@ var k = {
338
846
  "3M",
339
847
  "6M",
340
848
  "12M"
341
- ], M = [
849
+ ], Dt = [
342
850
  "1m",
343
851
  "5m",
344
852
  "15m",
@@ -348,7 +856,7 @@ var k = {
348
856
  "1d",
349
857
  "1w",
350
858
  "1M"
351
- ], N = [
859
+ ], Ot = [
352
860
  "1m",
353
861
  "5m",
354
862
  "15m",
@@ -356,8 +864,8 @@ var k = {
356
864
  "4h",
357
865
  "1d",
358
866
  "1w"
359
- ], P = 8, F = 2, I = 70, L = 30, R = 60, z = 120, B = {
360
- family: "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif",
867
+ ], kt = 8, At = 2, jt = 70, Mt = 30, Nt = 60, Pt = 120, z = "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif", B = {
868
+ family: z,
361
869
  sizeSmall: 10,
362
870
  sizeMedium: 12,
363
871
  sizeLarge: 14
@@ -372,33 +880,37 @@ var k = {
372
880
  rose: "#e25592",
373
881
  neutral: "#7d8696",
374
882
  ink: "#0c1016"
375
- }, H = [
883
+ }, Ft = .22;
884
+ function H(e) {
885
+ return me(e, Ft);
886
+ }
887
+ var U = "#2eb88a", W = "#e85a67", It = [
376
888
  V.blue,
377
889
  V.ochre,
378
890
  V.violet,
379
891
  V.cyan,
380
892
  V.rose
381
- ], U = {
893
+ ], G = {
382
894
  name: "dark",
383
895
  background: V.ink,
384
896
  text: "#d9dde4",
385
897
  textSecondary: "#7d8696",
386
898
  grid: "#161b23",
387
899
  crosshair: "#8a93a3",
388
- candleUp: "#3ccf91",
389
- candleDown: "#f0616d",
390
- candleUpWick: "#3ccf91",
391
- candleDownWick: "#f0616d",
900
+ candleUp: U,
901
+ candleDown: W,
902
+ candleUpWick: U,
903
+ candleDownWick: W,
392
904
  lineColor: V.amber,
393
905
  areaTopColor: "rgba(242, 169, 59, 0.32)",
394
906
  areaBottomColor: "rgba(242, 169, 59, 0.0)",
395
- volumeUp: "rgba(60, 207, 145, 0.28)",
396
- volumeDown: "rgba(240, 97, 109, 0.28)",
907
+ volumeUp: H(U),
908
+ volumeDown: H(W),
397
909
  axisLine: "#1f2630",
398
- axisLabel: "#c3c9d3",
910
+ axisLabel: "#9aa3b2",
399
911
  axisLabelBackground: "#1f2630",
400
912
  font: B
401
- }, de = {
913
+ }, K = {
402
914
  name: "light",
403
915
  background: "#ffffff",
404
916
  text: "#0f131a",
@@ -412,13 +924,13 @@ var k = {
412
924
  lineColor: "#c77a0a",
413
925
  areaTopColor: "rgba(199, 122, 10, 0.24)",
414
926
  areaBottomColor: "rgba(199, 122, 10, 0.0)",
415
- volumeUp: "rgba(22, 163, 106, 0.25)",
416
- volumeDown: "rgba(217, 65, 79, 0.25)",
927
+ volumeUp: H("#16a36a"),
928
+ volumeDown: H("#d9414f"),
417
929
  axisLine: "#dde1e7",
418
- axisLabel: "#3f4754",
930
+ axisLabel: "#5b6472",
419
931
  axisLabelBackground: "#eef0f3",
420
932
  font: B
421
- }, fe = {
933
+ }, q = {
422
934
  name: "terminal",
423
935
  background: "#0E0E0E",
424
936
  text: "#C0C0C0",
@@ -443,7 +955,28 @@ var k = {
443
955
  sizeMedium: 12,
444
956
  sizeLarge: 14
445
957
  }
446
- }, W = {
958
+ }, Lt = new Set([
959
+ G.volumeUp,
960
+ G.volumeDown,
961
+ K.volumeUp,
962
+ K.volumeDown,
963
+ q.volumeUp,
964
+ q.volumeDown
965
+ ]);
966
+ function Rt(e) {
967
+ let t = (e, t) => {
968
+ if (!Lt.has(e)) return e;
969
+ let n = H(t);
970
+ return n === t ? e : n;
971
+ };
972
+ return {
973
+ up: t(e.volumeUp, e.candleUp),
974
+ down: t(e.volumeDown, e.candleDown)
975
+ };
976
+ }
977
+ //#endregion
978
+ //#region src/i18n/en.ts
979
+ var J = {
447
980
  candlestick: "Candlestick",
448
981
  line: "Line",
449
982
  area: "Area",
@@ -546,7 +1079,7 @@ var k = {
546
1079
  error: "Error",
547
1080
  numberDecimalSeparator: ".",
548
1081
  numberGroupSeparator: ","
549
- }, G = {
1082
+ }, zt = {
550
1083
  candlestick: "Nến",
551
1084
  line: "Đường",
552
1085
  area: "Vùng",
@@ -649,43 +1182,43 @@ var k = {
649
1182
  error: "Lỗi",
650
1183
  numberDecimalSeparator: ",",
651
1184
  numberGroupSeparator: "."
652
- }, K = new Map([["en", W], ["vi", G]]), q = "en", J = W;
653
- function pe(e) {
654
- q = e, J = K.get(e) ?? W;
1185
+ }, Y = new Map([["en", J], ["vi", zt]]), X = "en", Bt = J;
1186
+ function Vt(e) {
1187
+ X = e, Bt = Y.get(e) ?? J;
655
1188
  }
656
- function me() {
657
- return q;
1189
+ function Ht() {
1190
+ return X;
658
1191
  }
659
- function he(e) {
660
- return J[e] ?? W[e] ?? e;
1192
+ function Ut(e) {
1193
+ return Bt[e] ?? J[e] ?? e;
661
1194
  }
662
- function ge(e, t) {
663
- K.set(e, t);
1195
+ function Wt(e, t) {
1196
+ Y.set(e, t);
664
1197
  }
665
- function _e(e) {
666
- return K.get(e ?? q) ?? W;
1198
+ function Gt(e) {
1199
+ return Y.get(e ?? X) ?? J;
667
1200
  }
668
- function Y(e, t = 2, n) {
669
- let r = K.get(n ?? q) ?? W, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
1201
+ function Z(e, t = 2, n) {
1202
+ let r = Y.get(n ?? X) ?? J, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
670
1203
  for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
671
1204
  return c && (u = "-" + u), s ? u + i + s : u;
672
1205
  }
673
- function ve(e) {
674
- return Y(e, 0, "vi");
1206
+ function Kt(e) {
1207
+ return Z(e, 0, "vi");
675
1208
  }
676
- function ye(e, t) {
677
- return e >= 1e9 ? Y(e / 1e9, 2, t ?? q) + "B" : e >= 1e6 ? Y(e / 1e6, 2, t ?? q) + "M" : e >= 1e3 ? Y(e / 1e3, 2, t ?? q) + "K" : Y(e, 0, t ?? q);
1209
+ function qt(e, t) {
1210
+ return e >= 1e9 ? Z(e / 1e9, 2, t ?? X) + "B" : e >= 1e6 ? Z(e / 1e6, 2, t ?? X) + "M" : e >= 1e3 ? Z(e / 1e3, 2, t ?? X) + "K" : Z(e, 0, t ?? X);
678
1211
  }
679
1212
  //#endregion
680
1213
  //#region src/market/presets.ts
681
- var X = {
1214
+ var Q = {
682
1215
  up: "#FF0000",
683
1216
  down: "#0000FF",
684
1217
  unchanged: "#FFD700",
685
1218
  ceiling: "#FF00FF",
686
1219
  floor: "#00FFFF",
687
1220
  reference: "#FFD700"
688
- }, Z = [
1221
+ }, Jt = [
689
1222
  {
690
1223
  name: "ATO",
691
1224
  startTime: "09:00",
@@ -716,7 +1249,7 @@ var X = {
716
1249
  endTime: "14:45",
717
1250
  type: "preClose"
718
1251
  }
719
- ], Q = [
1252
+ ], $ = [
720
1253
  {
721
1254
  name: "Phiên 1",
722
1255
  startTime: "09:00",
@@ -741,7 +1274,7 @@ var X = {
741
1274
  endTime: "14:45",
742
1275
  type: "preClose"
743
1276
  }
744
- ], be = {
1277
+ ], Yt = {
745
1278
  type: "stock",
746
1279
  exchange: "HOSE",
747
1280
  currency: "VND",
@@ -753,9 +1286,9 @@ var X = {
753
1286
  ceilingPercent: 7,
754
1287
  floorPercent: 7
755
1288
  },
756
- sessions: Z,
757
- colorScheme: X
758
- }, xe = {
1289
+ sessions: Jt,
1290
+ colorScheme: Q
1291
+ }, Xt = {
759
1292
  type: "stock",
760
1293
  exchange: "HNX",
761
1294
  currency: "VND",
@@ -767,9 +1300,9 @@ var X = {
767
1300
  ceilingPercent: 10,
768
1301
  floorPercent: 10
769
1302
  },
770
- sessions: Q,
771
- colorScheme: X
772
- }, Se = {
1303
+ sessions: $,
1304
+ colorScheme: Q
1305
+ }, Zt = {
773
1306
  type: "stock",
774
1307
  exchange: "UPCOM",
775
1308
  currency: "VND",
@@ -781,14 +1314,14 @@ var X = {
781
1314
  ceilingPercent: 15,
782
1315
  floorPercent: 15
783
1316
  },
784
- sessions: Q,
785
- colorScheme: X
786
- }, Ce = {
1317
+ sessions: $,
1318
+ colorScheme: Q
1319
+ }, Qt = {
787
1320
  type: "crypto",
788
1321
  currency: "USDT",
789
1322
  pricePrecision: 2,
790
1323
  priceLimits: { enabled: !1 }
791
- }, $ = {
1324
+ }, $t = {
792
1325
  type: "stock",
793
1326
  exchange: "NYSE",
794
1327
  currency: "USD",
@@ -816,18 +1349,18 @@ var X = {
816
1349
  }
817
1350
  ]
818
1351
  };
819
- function we(e) {
1352
+ function en(e) {
820
1353
  return {
821
1354
  ...e,
822
- candleUp: X.up,
823
- candleDown: X.down,
824
- candleUpWick: X.up,
825
- candleDownWick: X.down,
1355
+ candleUp: Q.up,
1356
+ candleDown: Q.down,
1357
+ candleUpWick: Q.up,
1358
+ candleDownWick: Q.down,
826
1359
  volumeUp: "rgba(255, 0, 0, 0.3)",
827
1360
  volumeDown: "rgba(0, 0, 255, 0.3)"
828
1361
  };
829
1362
  }
830
- function Te(e, t) {
1363
+ function tn(e, t) {
831
1364
  if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
832
1365
  let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100;
833
1366
  return {
@@ -836,12 +1369,12 @@ function Te(e, t) {
836
1369
  reference: e
837
1370
  };
838
1371
  }
839
- function Ee(e) {
1372
+ function nn(e) {
840
1373
  let t = /* @__PURE__ */ new Date(), n = `${String(t.getHours()).padStart(2, "0")}:${String(t.getMinutes()).padStart(2, "0")}`;
841
1374
  for (let t of e) if (n >= t.startTime && n < t.endTime) return t;
842
1375
  return null;
843
1376
  }
844
1377
  //#endregion
845
- export { fe as DARK_TERMINAL, U as DARK_THEME, F as DEFAULT_BAR_SPACING, P as DEFAULT_BAR_WIDTH, k as DEFAULT_CHART_OPTIONS, t as DEFAULT_DRAWING_STYLE, z as DEFAULT_PANEL_HEIGHT, a as DEFAULT_RECONNECT, r as DEFAULT_SIGNAL_STYLE, o as DEFAULT_STREAM_CONFIG, N as DEFAULT_TIMEFRAME_FAVORITES, i as DEFAULT_TRADE_ZONE_STYLE, n as DEFAULT_TRADING_CONFIG, Q as HNX_SESSIONS, Z as HOSE_SESSIONS, de as LIGHT_THEME, e as LayerType, Ce as MARKET_CRYPTO, xe as MARKET_HNX, be as MARKET_HOSE, $ as MARKET_NYSE, Se as MARKET_UPCOM, R as MIN_PANEL_HEIGHT, I as PRICE_AXIS_WIDTH, V as TC_PALETTE, H as TC_SERIES_COLORS, A as TIMEFRAMES_CRYPTO, M as TIMEFRAMES_FOREX, j as TIMEFRAMES_STOCK, L as TIME_AXIS_HEIGHT, X as VN_COLORS, ae as alignToTimeframe, T as autoPricePrecision, s as clamp, Te as computePriceLimits, h as computePriceRange, f as computeTickStep, we as createVNTheme, O as detectPrecision, W as en, te as findBarIndex, Y as formatNumber, w as formatPrice, E as formatPriceScaleLabel, ie as formatTimestamp, ve as formatVND, D as formatVolume, ye as formatVolumeLoc, Ee as getCurrentSession, me as getLocale, _e as getLocaleStrings, _ as hexToRgba, l as inverseLerp, se as isDateOnly, c as lerp, ne as lerpColor, g as mergeBar, d as niceNumber, m as normalizeBar, p as normalizeBarTime, ge as registerLocale, u as roundToStep, pe as setLocale, ee as sliceVisibleData, he as t, oe as timeParts, ue as timeframeBucketStart, re as timeframeToMs, ce as tzLabel, G as vi, v as withAlpha };
1378
+ export { q as DARK_TERMINAL, G as DARK_THEME, At as DEFAULT_BAR_SPACING, kt as DEFAULT_BAR_WIDTH, wt as DEFAULT_CHART_OPTIONS, t as DEFAULT_DRAWING_STYLE, z as DEFAULT_FONT_FAMILY, Pt as DEFAULT_PANEL_HEIGHT, a as DEFAULT_RECONNECT, r as DEFAULT_SIGNAL_STYLE, o as DEFAULT_STREAM_CONFIG, Ot as DEFAULT_TIMEFRAME_FAVORITES, i as DEFAULT_TRADE_ZONE_STYLE, n as DEFAULT_TRADING_CONFIG, $ as HNX_SESSIONS, Jt as HOSE_SESSIONS, K as LIGHT_THEME, e as LayerType, Qt as MARKET_CRYPTO, Xt as MARKET_HNX, Yt as MARKET_HOSE, $t as MARKET_NYSE, Zt as MARKET_UPCOM, Nt as MIN_PANEL_HEIGHT, jt as PRICE_AXIS_WIDTH, Ke as PRICE_SOURCES, V as TC_PALETTE, It as TC_SERIES_COLORS, Tt as TIMEFRAMES_CRYPTO, Dt as TIMEFRAMES_FOREX, Et as TIMEFRAMES_STOCK, Mt as TIME_AXIS_HEIGHT, Q as VN_COLORS, Ft as VOLUME_ALPHA, je as alignToTimeframe, ze as autoPricePrecision, Fe as barsAreDaily, ne as clamp, tn as computePriceLimits, de as computePriceRange, oe as computeTickStep, en as createVNTheme, Ge as detectPrecision, mt as drawingOption, J as en, ue as findBarIndex, Ve as formatFraction, Z as formatNumber, A as formatPrice, Be as formatPriceScaleLabel, Ae as formatTimestamp, Kt as formatVND, We as formatVolume, qt as formatVolumeLoc, He as fractionTick, nn as getCurrentSession, Ht as getLocale, Gt as getLocaleStrings, pe as hexToRgba, Xe as indicatorSource, ie as inverseLerp, Ne as isDateOnly, qe as isPriceSource, ke as isTimeFrame, xe as isValidTimeZone, re as lerp, he as lerpColor, ot as marketStatus, fe as mergeBar, p as niceNumber, ce as normalizeBar, se as normalizeBarTime, S as offsetAt, Ze as parseIndicatorSource, T as parseTimeframe, tt as pickBaseTimeframe, Ue as priceFormatterFor, rt as rankSymbols, Ct as readChartTypeOptions, te as readNews, c as readQuote, Wt as registerLocale, $e as resampleBars, ht as resolveDrawingOptions, Rt as resolveVolumeColors, ae as roundToStep, ft as sanitizeDrawingOptions, St as sanitizeDrawingStyle, M as sessionMinute, Vt as setLocale, le as sliceVisibleData, Je as sourcePrice, it as stepDecimals, Ut as t, Oe as tickBarCount, Me as timeParts, O as timeframeBucketStart, E as timeframeToMs, Ie as tzLabel, zt as vi, H as volumeColor, Ce as wallToUtc, me as withAlpha, b as zoneOffsetMinutes, we as zonedDateFormatter };
846
1379
 
847
1380
  //# sourceMappingURL=index.js.map