@tradecanvas/commons 1.4.0 → 1.7.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 (61) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +67 -67
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.js +617 -122
  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 +103 -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 +139 -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/drawingOptions.d.ts +8 -0
  42. package/dist/utils/drawingOptions.d.ts.map +1 -0
  43. package/dist/utils/drawingStyle.d.ts +9 -0
  44. package/dist/utils/drawingStyle.d.ts.map +1 -0
  45. package/dist/utils/index.d.ts +8 -0
  46. package/dist/utils/index.d.ts.map +1 -1
  47. package/dist/utils/marketStatus.d.ts +16 -0
  48. package/dist/utils/marketStatus.d.ts.map +1 -0
  49. package/dist/utils/precision.d.ts +18 -0
  50. package/dist/utils/precision.d.ts.map +1 -1
  51. package/dist/utils/priceSource.d.ts +15 -0
  52. package/dist/utils/priceSource.d.ts.map +1 -0
  53. package/dist/utils/resample.d.ts +13 -0
  54. package/dist/utils/resample.d.ts.map +1 -0
  55. package/dist/utils/symbols.d.ts +13 -0
  56. package/dist/utils/symbols.d.ts.map +1 -0
  57. package/dist/utils/time.d.ts +17 -6
  58. package/dist/utils/time.d.ts.map +1 -1
  59. package/dist/utils/timezone.d.ts +28 -0
  60. package/dist/utils/timezone.d.ts.map +1 -0
  61. 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 m(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 h(e) {
82
157
  return e > 0xe8d4a51000 ? e : e * 1e3;
83
158
  }
84
- function m(e) {
159
+ function oe(e) {
85
160
  return {
86
- time: p(e.time ?? e.t ?? 0),
161
+ time: h(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 se(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 ce(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 le(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 ue(e, t) {
126
201
  return {
127
202
  ...e,
128
203
  high: Math.max(e.high, t.price),
@@ -134,15 +209,15 @@ function g(e, t) {
134
209
  }
135
210
  //#endregion
136
211
  //#region src/utils/color.ts
137
- function _(e, t = 1) {
212
+ function g(e, t = 1) {
138
213
  return `rgba(${parseInt(e.slice(1, 3), 16)}, ${parseInt(e.slice(3, 5), 16)}, ${parseInt(e.slice(5, 7), 16)}, ${t})`;
139
214
  }
140
- function v(e, t) {
141
- if (e.startsWith("#")) return _(e, t);
215
+ function de(e, t) {
216
+ if (e.startsWith("#")) return g(e, t);
142
217
  let n = e.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
143
218
  return n ? `rgba(${n[1]}, ${n[2]}, ${n[3]}, ${t})` : e;
144
219
  }
145
- function ne(e, t, n) {
220
+ function fe(e, t, n) {
146
221
  let r = (e) => (e = e.replace("#", ""), e.length === 3 && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]), {
147
222
  r: parseInt(e.slice(0, 2), 16),
148
223
  g: parseInt(e.slice(2, 4), 16),
@@ -151,8 +226,126 @@ function ne(e, t, n) {
151
226
  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
227
  }
153
228
  //#endregion
229
+ //#region src/utils/timezone.ts
230
+ var _ = 6e4, v = 1440 * _, y = 15 * _, pe = 8192, b = 7 * v, me = 4096, he = new Set([
231
+ "UTC",
232
+ "Etc/UTC",
233
+ "GMT",
234
+ "Etc/GMT",
235
+ "UCT",
236
+ "Etc/UCT",
237
+ "Universal",
238
+ "Etc/Universal",
239
+ "Zulu",
240
+ "Etc/Zulu"
241
+ ]), ge = /* @__PURE__ */ new Map(), x = /* @__PURE__ */ new Map(), _e = /* @__PURE__ */ new Map();
242
+ function ve(e) {
243
+ let t = ge.get(e);
244
+ return t || (t = new Intl.DateTimeFormat("en-US", {
245
+ timeZone: e,
246
+ hourCycle: "h23",
247
+ year: "numeric",
248
+ month: "numeric",
249
+ day: "numeric",
250
+ hour: "numeric",
251
+ minute: "numeric",
252
+ second: "numeric"
253
+ }), ge.set(e, t)), t;
254
+ }
255
+ function ye(e) {
256
+ if (!e) return !1;
257
+ try {
258
+ return ve(e), !0;
259
+ } catch {
260
+ return !1;
261
+ }
262
+ }
263
+ function S(e, t) {
264
+ if (!Number.isFinite(t) || he.has(e)) return 0;
265
+ let n = _e.get(e);
266
+ n || (n = /* @__PURE__ */ new Map(), _e.set(e, n));
267
+ let r = Math.floor(t / b), i = n.get(r);
268
+ return i || (i = be(e, r * b), n.size >= me && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
269
+ }
270
+ function be(e, t) {
271
+ let n = C(e, t), r = t + b - y, i = C(e, r);
272
+ if (i === n) return {
273
+ before: n,
274
+ change: Infinity,
275
+ after: i
276
+ };
277
+ let a = t;
278
+ for (; r - a > y;) {
279
+ let t = a + Math.floor((r - a) / y / 2) * y;
280
+ C(e, t) === n ? a = t : r = t;
281
+ }
282
+ return {
283
+ before: n,
284
+ change: r,
285
+ after: i
286
+ };
287
+ }
288
+ function C(e, t) {
289
+ let n = Math.floor(t / y), r = `${e}|${n}`, i = x.get(r);
290
+ if (i !== void 0) return i;
291
+ let a = n * y, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
292
+ for (let t of ve(e).formatToParts(new Date(a))) {
293
+ let e = Number(t.value);
294
+ switch (t.type) {
295
+ case "year":
296
+ o = e;
297
+ break;
298
+ case "month":
299
+ s = e;
300
+ break;
301
+ case "day":
302
+ c = e;
303
+ break;
304
+ case "hour":
305
+ l = e % 24;
306
+ break;
307
+ case "minute":
308
+ u = e;
309
+ break;
310
+ case "second":
311
+ d = e;
312
+ break;
313
+ }
314
+ }
315
+ let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / _);
316
+ return x.size >= pe && x.clear(), x.set(r, f), f;
317
+ }
318
+ function w(e, t) {
319
+ return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : S(e, t);
320
+ }
321
+ function xe(e, t) {
322
+ let n = e - w(t, e - v) * _;
323
+ if (n + w(t, n) * _ === e) return n;
324
+ let r = e - w(t, e + v) * _;
325
+ return r + w(t, r) * _ === e ? r : n;
326
+ }
327
+ var T = /* @__PURE__ */ new Map();
328
+ function Se(e, t, n) {
329
+ let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = T.get(r);
330
+ if (i) return i;
331
+ let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
332
+ try {
333
+ o = new Intl.DateTimeFormat(e, {
334
+ ...t,
335
+ timeZone: a
336
+ });
337
+ } catch {
338
+ o = new Intl.DateTimeFormat("en-US", {
339
+ ...t,
340
+ timeZone: a
341
+ });
342
+ }
343
+ let s = typeof n == "number" ? n * _ : 0;
344
+ return i = (e) => o.format(new Date(e + s)), T.set(r, i), i;
345
+ }
346
+ //#endregion
154
347
  //#region src/utils/time.ts
155
- var y = {
348
+ var Ce = {
156
349
  "1s": 1e3,
157
350
  "5s": 5e3,
158
351
  "15s": 15e3,
@@ -179,12 +372,41 @@ var y = {
179
372
  "3M": 7776e6,
180
373
  "6M": 15552e6,
181
374
  "12M": 31536e6
182
- };
183
- function re(e) {
184
- return y[e];
375
+ }, E = {
376
+ s: 1e3,
377
+ m: 6e4,
378
+ h: 36e5,
379
+ d: 864e5,
380
+ w: 6048e5,
381
+ M: 2592e6
382
+ }, we = /^([1-9]\d*)([smhdwM])$/;
383
+ function D(e) {
384
+ let t = we.exec(e);
385
+ if (!t) return null;
386
+ let n = Number(t[1]);
387
+ return Number.isSafeInteger(n) ? {
388
+ count: n,
389
+ unit: t[2]
390
+ } : null;
185
391
  }
186
- function ie(e, t) {
187
- let n = new Date(e), r = y[t];
392
+ var Te = 1e6;
393
+ function Ee(e) {
394
+ let t = /^([1-9]\d*)T$/.exec(e);
395
+ if (!t) return null;
396
+ let n = Number(t[1]);
397
+ return Number.isSafeInteger(n) && n <= Te ? n : null;
398
+ }
399
+ function De(e) {
400
+ return D(e) !== null;
401
+ }
402
+ function O(e) {
403
+ let t = Ce[e];
404
+ if (t !== void 0) return t;
405
+ let n = D(e);
406
+ return n ? n.count * E[n.unit] : NaN;
407
+ }
408
+ function Oe(e, t) {
409
+ let n = new Date(e), r = O(t);
188
410
  return r >= 864e5 ? n.toLocaleDateString(void 0, {
189
411
  month: "short",
190
412
  day: "numeric"
@@ -197,11 +419,11 @@ function ie(e, t) {
197
419
  second: "2-digit"
198
420
  });
199
421
  }
200
- function ae(e, t) {
201
- let n = y[t];
422
+ function ke(e, t) {
423
+ let n = O(t);
202
424
  return Math.floor(e / n) * n;
203
425
  }
204
- function oe(e, t) {
426
+ function Ae(e, t) {
205
427
  if (t === null) {
206
428
  let t = new Date(e);
207
429
  return {
@@ -212,7 +434,7 @@ function oe(e, t) {
212
434
  minutes: t.getMinutes()
213
435
  };
214
436
  }
215
- let n = new Date(e + t * 6e4);
437
+ let n = new Date(e + w(t, e) * 6e4);
216
438
  return {
217
439
  year: n.getUTCFullYear(),
218
440
  month: n.getUTCMonth() + 1,
@@ -221,72 +443,79 @@ function oe(e, t) {
221
443
  minutes: n.getUTCMinutes()
222
444
  };
223
445
  }
224
- function se(e) {
446
+ function je(e) {
225
447
  return e.hours === 0 && e.minutes === 0;
226
448
  }
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")}`;
449
+ function Me(e, t = Date.now()) {
450
+ let n = w(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
451
+ return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
230
452
  }
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
- } : {
453
+ var k = Date.UTC(1970, 0, 5);
454
+ function A(e, t, n = 1) {
455
+ let { count: r, unit: i } = D(t) ?? {
238
456
  count: 1,
239
457
  unit: "m"
240
458
  };
241
- }
242
- function ue(e, t, n = 1) {
243
- let { count: r, unit: i } = le(t);
244
459
  if (i === "s" || i === "m" || i === "h" || i === "d") {
245
- let n = y[t];
246
- return Math.floor(e / n) * n;
460
+ let t = r * E[i];
461
+ return Math.floor(e / t) * t;
247
462
  }
248
463
  let a = new Date(e);
249
464
  if (i === "w") {
250
- let e = y["1d"], t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
465
+ let e = E.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
251
466
  if (r <= 1) return i;
252
- let o = Math.floor((i - b) / (7 * e));
253
- return b + Math.floor(o / r) * r * 7 * e;
467
+ let o = Math.floor((i - k) / (7 * e));
468
+ return k + Math.floor(o / r) * r * 7 * e;
254
469
  }
255
470
  let o = a.getUTCFullYear() * 12 + a.getUTCMonth(), s = Math.floor(o / r) * r;
256
471
  return Date.UTC(Math.floor(s / 12), s % 12, 1);
257
472
  }
258
473
  //#endregion
259
474
  //#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, {
475
+ var Ne = 64, j = /* @__PURE__ */ new Map();
476
+ function Pe(e, t) {
477
+ let n = `${e}|${t}`, r = j.get(n);
478
+ return r || (j.size >= Ne && j.clear(), r = new Intl.NumberFormat(e, {
264
479
  minimumFractionDigits: t,
265
480
  maximumFractionDigits: t
266
- }), S.set(n, r)), r;
481
+ }), j.set(n, r)), r;
267
482
  }
268
- function w(e, t = 2, n = "en-US") {
269
- return C(n, t).format(e);
483
+ function M(e, t = 2, n = "en-US") {
484
+ return Pe(n, t).format(e);
270
485
  }
271
- function T(e, t) {
486
+ function Fe(e, t) {
272
487
  if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
273
- let n = f(e, t, 8);
488
+ let n = m(e, t, 8);
274
489
  return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
275
490
  }
276
- function E(e, t, n, r = 2, i = "en-US") {
491
+ function Ie(e, t, n, r = 2, i = "en-US") {
277
492
  if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
278
493
  if (t === "percentage") {
279
494
  let t = (e / n - 1) * 100;
280
495
  return `${t > 0 ? "+" : ""}${t.toFixed(2)}%`;
281
496
  }
282
- return w(e / n * 100, 2, i);
497
+ return M(e / n * 100, 2, i);
283
498
  }
284
- return w(e, r, i);
499
+ return M(e, r, i);
285
500
  }
286
- function D(e) {
501
+ function N(e, t, n = 1) {
502
+ let r = Number.isInteger(n) && n > 1 ? n : 1;
503
+ if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
504
+ 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)) : "";
505
+ return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
506
+ }
507
+ function P(e) {
508
+ if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
509
+ let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
510
+ return 1 / (e.denominator * t);
511
+ }
512
+ function Le(e) {
513
+ return e ? typeof e == "function" ? e : P(e) === null ? null : (t) => N(t, e.denominator, e.subDenominator) : null;
514
+ }
515
+ function Re(e) {
287
516
  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
517
  }
289
- function O(e) {
518
+ function ze(e) {
290
519
  let t = 0;
291
520
  for (let n of e) {
292
521
  let e = n.toString(), r = e.indexOf(".");
@@ -295,8 +524,274 @@ function O(e) {
295
524
  return Math.min(t, 8);
296
525
  }
297
526
  //#endregion
527
+ //#region src/utils/priceSource.ts
528
+ var F = [
529
+ "close",
530
+ "open",
531
+ "high",
532
+ "low",
533
+ "hl2",
534
+ "hlc3",
535
+ "ohlc4",
536
+ "hlcc4"
537
+ ];
538
+ function Be(e) {
539
+ return typeof e == "string" && F.includes(e);
540
+ }
541
+ function Ve(e, t) {
542
+ switch (t) {
543
+ case "open": return e.open;
544
+ case "high": return e.high;
545
+ case "low": return e.low;
546
+ case "hl2": return (e.high + e.low) / 2;
547
+ case "hlc3": return (e.high + e.low + e.close) / 3;
548
+ case "ohlc4": return (e.open + e.high + e.low + e.close) / 4;
549
+ case "hlcc4": return (e.high + e.low + 2 * e.close) / 4;
550
+ default: return e.close;
551
+ }
552
+ }
553
+ var He = /^ind:([^:]+):(.+)$/;
554
+ function Ue(e, t) {
555
+ return `ind:${e}:${t}`;
556
+ }
557
+ function We(e) {
558
+ if (typeof e != "string") return null;
559
+ let t = He.exec(e);
560
+ return t ? {
561
+ instanceId: t[1],
562
+ key: t[2]
563
+ } : null;
564
+ }
565
+ //#endregion
566
+ //#region src/utils/resample.ts
567
+ var Ge = 864e5;
568
+ function Ke(e, t, n = 1) {
569
+ let r = [], i = null;
570
+ for (let a of e) {
571
+ let e = A(a.time, t, n);
572
+ i === null || e !== i.time ? (i = {
573
+ time: e,
574
+ open: a.open,
575
+ high: a.high,
576
+ low: a.low,
577
+ close: a.close,
578
+ volume: a.volume
579
+ }, 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);
580
+ }
581
+ return r;
582
+ }
583
+ var I = (e) => e === "s" || e === "m" || e === "h" || e === "d";
584
+ function qe(e, t) {
585
+ let n = D(e), r = D(t);
586
+ if (!n || !r) return !1;
587
+ let i = O(e);
588
+ return n.unit === "d" && n.count > 1 ? !1 : I(r.unit) ? I(n.unit) && O(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : I(n.unit) && Ge % i === 0;
589
+ }
590
+ function Je(e, t) {
591
+ let n = null, r = 0;
592
+ for (let i of t) {
593
+ if (!qe(i, e)) continue;
594
+ let t = O(i);
595
+ t > r && (n = i, r = t);
596
+ }
597
+ return n;
598
+ }
599
+ //#endregion
600
+ //#region src/utils/symbols.ts
601
+ function L(e, t) {
602
+ if (!e) return 0;
603
+ if (e === t) return 1e3;
604
+ if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
605
+ let n = e.indexOf(t);
606
+ return n >= 0 ? 300 - Math.min(100, n) : 0;
607
+ }
608
+ function Ye(e, t, n = 50, r) {
609
+ let i = t.trim().toUpperCase();
610
+ if (!i) return e.slice(0, n);
611
+ let a = [];
612
+ for (let t of e) {
613
+ let e = Math.max(L(t.symbol.toUpperCase(), i), L((t.description ?? "").toUpperCase(), i) * .8);
614
+ e > 0 && a.push({
615
+ info: t,
616
+ score: e + (r?.(t) ?? 0)
617
+ });
618
+ }
619
+ return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
620
+ }
621
+ function Xe(e) {
622
+ let t = typeof e == "number" ? e : Number(e);
623
+ if (!Number.isFinite(t) || t <= 0) return 0;
624
+ for (let e = 0; e <= 12; e++) {
625
+ let n = t * 10 ** e;
626
+ if (Math.abs(n - Math.round(n)) < 1e-9 * Math.max(1, n)) return e;
627
+ }
628
+ return 12;
629
+ }
630
+ function R(e) {
631
+ let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
632
+ if (!t) return null;
633
+ let n = Number(t[1]), r = Number(t[2]);
634
+ return n === 24 && r === 0 ? 1440 : n < 24 && r < 60 ? n * 60 + r : null;
635
+ }
636
+ //#endregion
637
+ //#region src/utils/marketStatus.ts
638
+ var z = 864e5, B = 6e4, Ze = 8;
639
+ function Qe(e, t) {
640
+ let n = e?.timezone, r = (e?.sessions ?? []).flatMap((e) => {
641
+ let t = R(e.start), n = R(e.end);
642
+ return t === null || n === null || t === n ? [] : [{
643
+ start: t,
644
+ end: n,
645
+ days: Array.isArray(e.days) ? e.days : null
646
+ }];
647
+ });
648
+ if (!n || !ye(n) || r.length === 0 || !Number.isFinite(t)) return {
649
+ state: "always",
650
+ next: null
651
+ };
652
+ let i = S(n, t) * B, a = Math.floor((t + i) / z) * z, o = (e) => e - S(n, e - S(n, e - i) * B) * B, s = [];
653
+ for (let e = -1; e <= Ze; e++) {
654
+ let t = a + e * z, n = (Math.floor(t / z) + 4) % 7;
655
+ for (let e of r) {
656
+ if (e.days && !e.days.includes(n)) continue;
657
+ let r = t + e.start * B, i = (e.end > e.start ? t : t + z) + e.end * B;
658
+ s.push([o(r), o(i)]);
659
+ }
660
+ }
661
+ s.sort((e, t) => e[0] - t[0]);
662
+ let c = [];
663
+ for (let [e, t] of s) {
664
+ let n = c[c.length - 1];
665
+ n && e <= n[1] ? c[c.length - 1] = [n[0], Math.max(n[1], t)] : c.push([e, t]);
666
+ }
667
+ let l = c.find(([e, n]) => e <= t && t < n);
668
+ if (l) return {
669
+ state: "open",
670
+ next: l[1]
671
+ };
672
+ let u = c.find(([e]) => e > t);
673
+ return {
674
+ state: "closed",
675
+ next: u ? u[0] : null
676
+ };
677
+ }
678
+ //#endregion
679
+ //#region src/utils/drawingOptions.ts
680
+ var $e = 48, et = 2e3, tt = 1e4;
681
+ function nt(e) {
682
+ if (!Array.isArray(e)) return;
683
+ let t = [];
684
+ for (let n of e) {
685
+ if (t.length >= $e) break;
686
+ if (typeof n != "object" || !n) continue;
687
+ let { value: e, visible: r, color: i } = n;
688
+ if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > tt || r !== void 0 && typeof r != "boolean") continue;
689
+ let a = {
690
+ value: e,
691
+ visible: r ?? !0
692
+ };
693
+ typeof i == "string" && i && (a.color = i), t.push(a);
694
+ }
695
+ return t;
696
+ }
697
+ function V(e, t) {
698
+ switch (e.kind) {
699
+ case "boolean": return typeof t == "boolean" ? t : void 0;
700
+ case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
701
+ case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
702
+ case "levels": return nt(t);
703
+ case "text": return typeof t == "string" ? t.slice(0, et) : void 0;
704
+ }
705
+ }
706
+ function rt(e, t) {
707
+ if (!e || typeof t != "object" || !t) return {};
708
+ let n = {};
709
+ for (let [r, i] of Object.entries(t)) {
710
+ let t = e[r];
711
+ if (!t) continue;
712
+ let a = V(t, i);
713
+ a !== void 0 && (n[r] = a);
714
+ }
715
+ return n;
716
+ }
717
+ function it(e) {
718
+ return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
719
+ }
720
+ function at(e, t, n) {
721
+ let r = e?.[n];
722
+ return r ? it((t && n in t ? V(r, t[n]) : void 0) ?? r.default) : t?.[n];
723
+ }
724
+ function ot(e, t) {
725
+ let n = {};
726
+ for (let r of Object.keys(e ?? {})) n[r] = at(e, t, r);
727
+ return n;
728
+ }
729
+ //#endregion
730
+ //#region src/utils/drawingStyle.ts
731
+ var st = [
732
+ "solid",
733
+ "dashed",
734
+ "dotted"
735
+ ], ct = 64, lt = 2e3, ut = 20, dt = 200;
736
+ function H(e, t, n) {
737
+ return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
738
+ }
739
+ function ft(e) {
740
+ return typeof e == "string" && e.length > 0 && e.length <= ct ? e : void 0;
741
+ }
742
+ function pt(e) {
743
+ if (typeof e != "object" || !e) return {};
744
+ let t = e, n = {}, r = ft(t.color);
745
+ r !== void 0 && (n.color = r);
746
+ let i = H(t.lineWidth, .5, ut);
747
+ i !== void 0 && (n.lineWidth = i), st.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
748
+ let a = ft(t.fillColor);
749
+ a !== void 0 && (n.fillColor = a);
750
+ let o = H(t.fillOpacity, 0, 1);
751
+ o !== void 0 && (n.fillOpacity = o);
752
+ let s = H(t.fontSize, 6, dt);
753
+ return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, lt)), n;
754
+ }
755
+ //#endregion
756
+ //#region src/utils/chartTypeOptions.ts
757
+ var U = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, W = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, G = (e) => typeof e == "object" && !!e && !Array.isArray(e);
758
+ function mt(e) {
759
+ if (!G(e)) return {};
760
+ let t = {};
761
+ if (G(e.renko)) {
762
+ let { boxSize: n, atrPeriod: r } = e.renko;
763
+ t.renko = {
764
+ ...U(n) || n === "atr" ? { boxSize: n } : {},
765
+ ...W(r, 1, 500) ? { atrPeriod: r } : {}
766
+ };
767
+ }
768
+ if (G(e.lineBreak)) {
769
+ let { lines: n } = e.lineBreak;
770
+ t.lineBreak = W(n, 1, 10) ? { lines: n } : {};
771
+ }
772
+ if (G(e.kagi)) {
773
+ let { reversal: n, reversalType: r } = e.kagi;
774
+ t.kagi = {
775
+ ...U(n) ? { reversal: n } : {},
776
+ ...r === "percent" || r === "price" ? { reversalType: r } : {}
777
+ };
778
+ }
779
+ if (G(e.pointAndFigure)) {
780
+ let { boxSize: n, reversal: r } = e.pointAndFigure;
781
+ t.pointAndFigure = {
782
+ ...U(n) || n === "auto" ? { boxSize: n } : {},
783
+ ...W(r, 1, 10) ? { reversal: r } : {}
784
+ };
785
+ }
786
+ if (G(e.rangeBars)) {
787
+ let { range: n } = e.rangeBars;
788
+ t.rangeBars = U(n) || n === "auto" ? { range: n } : {};
789
+ }
790
+ return t;
791
+ }
792
+ //#endregion
298
793
  //#region src/constants/defaults.ts
299
- var k = {
794
+ var ht = {
300
795
  autoScale: !0,
301
796
  rightMargin: 5,
302
797
  minBarSpacing: 2,
@@ -307,7 +802,7 @@ var k = {
307
802
  vLineStyle: "solid"
308
803
  },
309
804
  crosshair: { mode: "magnet" }
310
- }, A = [
805
+ }, gt = [
311
806
  "1s",
312
807
  "1m",
313
808
  "3m",
@@ -324,7 +819,7 @@ var k = {
324
819
  "3d",
325
820
  "1w",
326
821
  "1M"
327
- ], j = [
822
+ ], _t = [
328
823
  "1m",
329
824
  "5m",
330
825
  "15m",
@@ -338,7 +833,7 @@ var k = {
338
833
  "3M",
339
834
  "6M",
340
835
  "12M"
341
- ], M = [
836
+ ], vt = [
342
837
  "1m",
343
838
  "5m",
344
839
  "15m",
@@ -348,7 +843,7 @@ var k = {
348
843
  "1d",
349
844
  "1w",
350
845
  "1M"
351
- ], N = [
846
+ ], yt = [
352
847
  "1m",
353
848
  "5m",
354
849
  "15m",
@@ -356,12 +851,12 @@ var k = {
356
851
  "4h",
357
852
  "1d",
358
853
  "1w"
359
- ], P = 8, F = 2, I = 70, L = 30, R = 60, z = 120, B = {
854
+ ], bt = 8, xt = 2, St = 70, Ct = 30, wt = 60, Tt = 120, Et = {
360
855
  family: "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif",
361
856
  sizeSmall: 10,
362
857
  sizeMedium: 12,
363
858
  sizeLarge: 14
364
- }, V = {
859
+ }, K = {
365
860
  amber: "#f2a93b",
366
861
  up: "#1fa874",
367
862
  down: "#e8505b",
@@ -372,15 +867,15 @@ var k = {
372
867
  rose: "#e25592",
373
868
  neutral: "#7d8696",
374
869
  ink: "#0c1016"
375
- }, H = [
376
- V.blue,
377
- V.ochre,
378
- V.violet,
379
- V.cyan,
380
- V.rose
381
- ], U = {
870
+ }, Dt = [
871
+ K.blue,
872
+ K.ochre,
873
+ K.violet,
874
+ K.cyan,
875
+ K.rose
876
+ ], Ot = {
382
877
  name: "dark",
383
- background: V.ink,
878
+ background: K.ink,
384
879
  text: "#d9dde4",
385
880
  textSecondary: "#7d8696",
386
881
  grid: "#161b23",
@@ -389,7 +884,7 @@ var k = {
389
884
  candleDown: "#f0616d",
390
885
  candleUpWick: "#3ccf91",
391
886
  candleDownWick: "#f0616d",
392
- lineColor: V.amber,
887
+ lineColor: K.amber,
393
888
  areaTopColor: "rgba(242, 169, 59, 0.32)",
394
889
  areaBottomColor: "rgba(242, 169, 59, 0.0)",
395
890
  volumeUp: "rgba(60, 207, 145, 0.28)",
@@ -397,8 +892,8 @@ var k = {
397
892
  axisLine: "#1f2630",
398
893
  axisLabel: "#c3c9d3",
399
894
  axisLabelBackground: "#1f2630",
400
- font: B
401
- }, de = {
895
+ font: Et
896
+ }, kt = {
402
897
  name: "light",
403
898
  background: "#ffffff",
404
899
  text: "#0f131a",
@@ -417,8 +912,8 @@ var k = {
417
912
  axisLine: "#dde1e7",
418
913
  axisLabel: "#3f4754",
419
914
  axisLabelBackground: "#eef0f3",
420
- font: B
421
- }, fe = {
915
+ font: Et
916
+ }, At = {
422
917
  name: "terminal",
423
918
  background: "#0E0E0E",
424
919
  text: "#C0C0C0",
@@ -443,7 +938,7 @@ var k = {
443
938
  sizeMedium: 12,
444
939
  sizeLarge: 14
445
940
  }
446
- }, W = {
941
+ }, q = {
447
942
  candlestick: "Candlestick",
448
943
  line: "Line",
449
944
  area: "Area",
@@ -546,7 +1041,7 @@ var k = {
546
1041
  error: "Error",
547
1042
  numberDecimalSeparator: ".",
548
1043
  numberGroupSeparator: ","
549
- }, G = {
1044
+ }, J = {
550
1045
  candlestick: "Nến",
551
1046
  line: "Đường",
552
1047
  area: "Vùng",
@@ -649,43 +1144,43 @@ var k = {
649
1144
  error: "Lỗi",
650
1145
  numberDecimalSeparator: ",",
651
1146
  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;
1147
+ }, Y = new Map([["en", q], ["vi", J]]), X = "en", jt = q;
1148
+ function Mt(e) {
1149
+ X = e, jt = Y.get(e) ?? q;
655
1150
  }
656
- function me() {
657
- return q;
1151
+ function Nt() {
1152
+ return X;
658
1153
  }
659
- function he(e) {
660
- return J[e] ?? W[e] ?? e;
1154
+ function Pt(e) {
1155
+ return jt[e] ?? q[e] ?? e;
661
1156
  }
662
- function ge(e, t) {
663
- K.set(e, t);
1157
+ function Ft(e, t) {
1158
+ Y.set(e, t);
664
1159
  }
665
- function _e(e) {
666
- return K.get(e ?? q) ?? W;
1160
+ function It(e) {
1161
+ return Y.get(e ?? X) ?? q;
667
1162
  }
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 = "";
1163
+ function Z(e, t = 2, n) {
1164
+ let r = Y.get(n ?? X) ?? q, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
670
1165
  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
1166
  return c && (u = "-" + u), s ? u + i + s : u;
672
1167
  }
673
- function ve(e) {
674
- return Y(e, 0, "vi");
1168
+ function Lt(e) {
1169
+ return Z(e, 0, "vi");
675
1170
  }
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);
1171
+ function Rt(e, t) {
1172
+ 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
1173
  }
679
1174
  //#endregion
680
1175
  //#region src/market/presets.ts
681
- var X = {
1176
+ var Q = {
682
1177
  up: "#FF0000",
683
1178
  down: "#0000FF",
684
1179
  unchanged: "#FFD700",
685
1180
  ceiling: "#FF00FF",
686
1181
  floor: "#00FFFF",
687
1182
  reference: "#FFD700"
688
- }, Z = [
1183
+ }, zt = [
689
1184
  {
690
1185
  name: "ATO",
691
1186
  startTime: "09:00",
@@ -716,7 +1211,7 @@ var X = {
716
1211
  endTime: "14:45",
717
1212
  type: "preClose"
718
1213
  }
719
- ], Q = [
1214
+ ], $ = [
720
1215
  {
721
1216
  name: "Phiên 1",
722
1217
  startTime: "09:00",
@@ -741,7 +1236,7 @@ var X = {
741
1236
  endTime: "14:45",
742
1237
  type: "preClose"
743
1238
  }
744
- ], be = {
1239
+ ], Bt = {
745
1240
  type: "stock",
746
1241
  exchange: "HOSE",
747
1242
  currency: "VND",
@@ -753,9 +1248,9 @@ var X = {
753
1248
  ceilingPercent: 7,
754
1249
  floorPercent: 7
755
1250
  },
756
- sessions: Z,
757
- colorScheme: X
758
- }, xe = {
1251
+ sessions: zt,
1252
+ colorScheme: Q
1253
+ }, Vt = {
759
1254
  type: "stock",
760
1255
  exchange: "HNX",
761
1256
  currency: "VND",
@@ -767,9 +1262,9 @@ var X = {
767
1262
  ceilingPercent: 10,
768
1263
  floorPercent: 10
769
1264
  },
770
- sessions: Q,
771
- colorScheme: X
772
- }, Se = {
1265
+ sessions: $,
1266
+ colorScheme: Q
1267
+ }, Ht = {
773
1268
  type: "stock",
774
1269
  exchange: "UPCOM",
775
1270
  currency: "VND",
@@ -781,14 +1276,14 @@ var X = {
781
1276
  ceilingPercent: 15,
782
1277
  floorPercent: 15
783
1278
  },
784
- sessions: Q,
785
- colorScheme: X
786
- }, Ce = {
1279
+ sessions: $,
1280
+ colorScheme: Q
1281
+ }, Ut = {
787
1282
  type: "crypto",
788
1283
  currency: "USDT",
789
1284
  pricePrecision: 2,
790
1285
  priceLimits: { enabled: !1 }
791
- }, $ = {
1286
+ }, Wt = {
792
1287
  type: "stock",
793
1288
  exchange: "NYSE",
794
1289
  currency: "USD",
@@ -816,18 +1311,18 @@ var X = {
816
1311
  }
817
1312
  ]
818
1313
  };
819
- function we(e) {
1314
+ function Gt(e) {
820
1315
  return {
821
1316
  ...e,
822
- candleUp: X.up,
823
- candleDown: X.down,
824
- candleUpWick: X.up,
825
- candleDownWick: X.down,
1317
+ candleUp: Q.up,
1318
+ candleDown: Q.down,
1319
+ candleUpWick: Q.up,
1320
+ candleDownWick: Q.down,
826
1321
  volumeUp: "rgba(255, 0, 0, 0.3)",
827
1322
  volumeDown: "rgba(0, 0, 255, 0.3)"
828
1323
  };
829
1324
  }
830
- function Te(e, t) {
1325
+ function Kt(e, t) {
831
1326
  if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
832
1327
  let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100;
833
1328
  return {
@@ -836,12 +1331,12 @@ function Te(e, t) {
836
1331
  reference: e
837
1332
  };
838
1333
  }
839
- function Ee(e) {
1334
+ function qt(e) {
840
1335
  let t = /* @__PURE__ */ new Date(), n = `${String(t.getHours()).padStart(2, "0")}:${String(t.getMinutes()).padStart(2, "0")}`;
841
1336
  for (let t of e) if (n >= t.startTime && n < t.endTime) return t;
842
1337
  return null;
843
1338
  }
844
1339
  //#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 };
1340
+ export { At as DARK_TERMINAL, Ot as DARK_THEME, xt as DEFAULT_BAR_SPACING, bt as DEFAULT_BAR_WIDTH, ht as DEFAULT_CHART_OPTIONS, t as DEFAULT_DRAWING_STYLE, Tt as DEFAULT_PANEL_HEIGHT, a as DEFAULT_RECONNECT, r as DEFAULT_SIGNAL_STYLE, o as DEFAULT_STREAM_CONFIG, yt as DEFAULT_TIMEFRAME_FAVORITES, i as DEFAULT_TRADE_ZONE_STYLE, n as DEFAULT_TRADING_CONFIG, $ as HNX_SESSIONS, zt as HOSE_SESSIONS, kt as LIGHT_THEME, e as LayerType, Ut as MARKET_CRYPTO, Vt as MARKET_HNX, Bt as MARKET_HOSE, Wt as MARKET_NYSE, Ht as MARKET_UPCOM, wt as MIN_PANEL_HEIGHT, St as PRICE_AXIS_WIDTH, F as PRICE_SOURCES, K as TC_PALETTE, Dt as TC_SERIES_COLORS, gt as TIMEFRAMES_CRYPTO, vt as TIMEFRAMES_FOREX, _t as TIMEFRAMES_STOCK, Ct as TIME_AXIS_HEIGHT, Q as VN_COLORS, ke as alignToTimeframe, Fe as autoPricePrecision, ne as clamp, Kt as computePriceLimits, le as computePriceRange, m as computeTickStep, Gt as createVNTheme, ze as detectPrecision, at as drawingOption, q as en, ce as findBarIndex, N as formatFraction, Z as formatNumber, M as formatPrice, Ie as formatPriceScaleLabel, Oe as formatTimestamp, Lt as formatVND, Re as formatVolume, Rt as formatVolumeLoc, P as fractionTick, qt as getCurrentSession, Nt as getLocale, It as getLocaleStrings, g as hexToRgba, Ue as indicatorSource, ie as inverseLerp, je as isDateOnly, Be as isPriceSource, De as isTimeFrame, ye as isValidTimeZone, re as lerp, fe as lerpColor, Qe as marketStatus, ue as mergeBar, p as niceNumber, oe as normalizeBar, h as normalizeBarTime, w as offsetAt, We as parseIndicatorSource, D as parseTimeframe, Je as pickBaseTimeframe, Le as priceFormatterFor, Ye as rankSymbols, mt as readChartTypeOptions, te as readNews, c as readQuote, Ft as registerLocale, Ke as resampleBars, ot as resolveDrawingOptions, ae as roundToStep, rt as sanitizeDrawingOptions, pt as sanitizeDrawingStyle, R as sessionMinute, Mt as setLocale, se as sliceVisibleData, Ve as sourcePrice, Xe as stepDecimals, Pt as t, Ee as tickBarCount, Ae as timeParts, A as timeframeBucketStart, O as timeframeToMs, Me as tzLabel, J as vi, xe as wallToUtc, de as withAlpha, S as zoneOffsetMinutes, Se as zonedDateFormatter };
846
1341
 
847
1342
  //# sourceMappingURL=index.js.map