@tradecanvas/commons 0.1.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/defaults.d.ts +18 -0
  2. package/dist/constants/defaults.d.ts.map +1 -0
  3. package/dist/constants/index.d.ts +3 -0
  4. package/dist/constants/index.d.ts.map +1 -0
  5. package/dist/constants/themes.d.ts +4 -0
  6. package/dist/constants/themes.d.ts.map +1 -0
  7. package/dist/i18n/en.d.ts +3 -0
  8. package/dist/i18n/en.d.ts.map +1 -0
  9. package/dist/i18n/index.d.ts +13 -0
  10. package/dist/i18n/index.d.ts.map +1 -0
  11. package/dist/i18n/types.d.ts +116 -0
  12. package/dist/i18n/types.d.ts.map +1 -0
  13. package/dist/i18n/vi.d.ts +3 -0
  14. package/dist/i18n/vi.d.ts.map +1 -0
  15. package/dist/index.cjs +2 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +6 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +692 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/market/index.d.ts +3 -0
  22. package/dist/market/index.d.ts.map +1 -0
  23. package/dist/market/presets.d.ts +18 -0
  24. package/dist/market/presets.d.ts.map +1 -0
  25. package/dist/market/types.d.ts +38 -0
  26. package/dist/market/types.d.ts.map +1 -0
  27. package/dist/types/axis.d.ts +11 -0
  28. package/dist/types/axis.d.ts.map +1 -0
  29. package/dist/types/chart.d.ts +138 -0
  30. package/dist/types/chart.d.ts.map +1 -0
  31. package/dist/types/drawing.d.ts +38 -0
  32. package/dist/types/drawing.d.ts.map +1 -0
  33. package/dist/types/events.d.ts +30 -0
  34. package/dist/types/events.d.ts.map +1 -0
  35. package/dist/types/index.d.ts +12 -0
  36. package/dist/types/index.d.ts.map +1 -0
  37. package/dist/types/indicator.d.ts +41 -0
  38. package/dist/types/indicator.d.ts.map +1 -0
  39. package/dist/types/layout.d.ts +31 -0
  40. package/dist/types/layout.d.ts.map +1 -0
  41. package/dist/types/ohlc.d.ts +16 -0
  42. package/dist/types/ohlc.d.ts.map +1 -0
  43. package/dist/types/realtime.d.ts +79 -0
  44. package/dist/types/realtime.d.ts.map +1 -0
  45. package/dist/types/rendering.d.ts +37 -0
  46. package/dist/types/rendering.d.ts.map +1 -0
  47. package/dist/types/theme.d.ts +29 -0
  48. package/dist/types/theme.d.ts.map +1 -0
  49. package/dist/types/trading.d.ts +80 -0
  50. package/dist/types/trading.d.ts.map +1 -0
  51. package/dist/utils/color.d.ts +3 -0
  52. package/dist/utils/color.d.ts.map +1 -0
  53. package/dist/utils/data.d.ts +13 -0
  54. package/dist/utils/data.d.ts.map +1 -0
  55. package/dist/utils/index.d.ts +6 -0
  56. package/dist/utils/index.d.ts.map +1 -0
  57. package/dist/utils/math.d.ts +7 -0
  58. package/dist/utils/math.d.ts.map +1 -0
  59. package/dist/utils/precision.d.ts +4 -0
  60. package/dist/utils/precision.d.ts.map +1 -0
  61. package/dist/utils/time.d.ts +5 -0
  62. package/dist/utils/time.d.ts.map +1 -0
  63. package/package.json +34 -0
package/dist/index.js ADDED
@@ -0,0 +1,692 @@
1
+ //#region src/types/rendering.ts
2
+ var e = /* @__PURE__ */ function(e) {
3
+ return e[e.Background = 0] = "Background", e[e.Main = 1] = "Main", e[e.Panel = 2] = "Panel", e[e.Overlay = 3] = "Overlay", e[e.UI = 4] = "UI", e;
4
+ }({}), t = {
5
+ color: "#2196F3",
6
+ lineWidth: 1,
7
+ lineStyle: "solid",
8
+ fillColor: "rgba(33, 150, 243, 0.1)",
9
+ fillOpacity: .1,
10
+ fontSize: 12
11
+ }, n = {
12
+ enabled: !0,
13
+ orderColors: {
14
+ buy: "#26A69A",
15
+ sell: "#EF5350"
16
+ },
17
+ positionColors: {
18
+ profit: "#26A69A",
19
+ loss: "#EF5350",
20
+ entry: "#2196F3"
21
+ },
22
+ depthOverlay: {
23
+ enabled: !1,
24
+ bidColor: "rgba(38,166,154,0.15)",
25
+ askColor: "rgba(239,83,80,0.15)",
26
+ maxWidth: 100
27
+ },
28
+ contextMenu: { enabled: !0 },
29
+ pricePrecision: 2,
30
+ dragThreshold: 3
31
+ }, r = {
32
+ enabled: !0,
33
+ maxRetries: Infinity,
34
+ baseDelay: 1e3,
35
+ maxDelay: 3e4,
36
+ backoffMultiplier: 2
37
+ }, i = {
38
+ historyLimit: 500,
39
+ autoScroll: !0,
40
+ showCurrentPriceLine: !0,
41
+ aggregateTicks: !1
42
+ };
43
+ //#endregion
44
+ //#region src/utils/math.ts
45
+ function a(e, t, n) {
46
+ return Math.max(t, Math.min(n, e));
47
+ }
48
+ function o(e, t, n) {
49
+ return e + (t - e) * n;
50
+ }
51
+ function s(e, t, n) {
52
+ return e === t ? 0 : (n - e) / (t - e);
53
+ }
54
+ function c(e, t) {
55
+ return Math.round(e / t) * t;
56
+ }
57
+ function l(e, t) {
58
+ let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
59
+ 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;
60
+ }
61
+ function u(e, t, n) {
62
+ return l(l(t - e, !1) / (n - 1), !0);
63
+ }
64
+ //#endregion
65
+ //#region src/utils/data.ts
66
+ function d(e, t, n) {
67
+ let r = Math.max(0, t), i = Math.min(e.length, n + 1);
68
+ return e.slice(r, i);
69
+ }
70
+ function f(e, t) {
71
+ let n = 0, r = e.length - 1;
72
+ for (; n <= r;) {
73
+ let i = n + r >>> 1;
74
+ if (e[i].time < t) n = i + 1;
75
+ else if (e[i].time > t) r = i - 1;
76
+ else return i;
77
+ }
78
+ return n;
79
+ }
80
+ function p(e, t, n, r = .05) {
81
+ if (e.length === 0) return {
82
+ min: 0,
83
+ max: 1
84
+ };
85
+ let i = Math.max(0, t), a = Math.min(e.length - 1, n), o = Infinity, s = -Infinity;
86
+ for (let t = i; t <= a; t++) e[t].low < o && (o = e[t].low), e[t].high > s && (s = e[t].high);
87
+ if (o === Infinity) return {
88
+ min: 0,
89
+ max: 1
90
+ };
91
+ let c = s - o || 1;
92
+ return {
93
+ min: o - c * r,
94
+ max: s + c * r
95
+ };
96
+ }
97
+ function m(e, t) {
98
+ return {
99
+ ...e,
100
+ high: Math.max(e.high, t.price),
101
+ low: Math.min(e.low, t.price),
102
+ close: t.price,
103
+ volume: e.volume + (t.volume ?? 0),
104
+ time: t.time
105
+ };
106
+ }
107
+ //#endregion
108
+ //#region src/utils/color.ts
109
+ function h(e, t = 1) {
110
+ return `rgba(${parseInt(e.slice(1, 3), 16)}, ${parseInt(e.slice(3, 5), 16)}, ${parseInt(e.slice(5, 7), 16)}, ${t})`;
111
+ }
112
+ function ee(e, t) {
113
+ if (e.startsWith("#")) return h(e, t);
114
+ let n = e.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
115
+ return n ? `rgba(${n[1]}, ${n[2]}, ${n[3]}, ${t})` : e;
116
+ }
117
+ //#endregion
118
+ //#region src/utils/time.ts
119
+ var g = {
120
+ "1s": 1e3,
121
+ "5s": 5e3,
122
+ "15s": 15e3,
123
+ "30s": 3e4,
124
+ "1m": 6e4,
125
+ "3m": 18e4,
126
+ "5m": 3e5,
127
+ "15m": 9e5,
128
+ "30m": 18e5,
129
+ "45m": 27e5,
130
+ "1h": 36e5,
131
+ "2h": 72e5,
132
+ "3h": 108e5,
133
+ "4h": 144e5,
134
+ "6h": 216e5,
135
+ "8h": 288e5,
136
+ "12h": 432e5,
137
+ "1d": 864e5,
138
+ "2d": 1728e5,
139
+ "3d": 2592e5,
140
+ "1w": 6048e5,
141
+ "2w": 12096e5,
142
+ "1M": 2592e6,
143
+ "3M": 7776e6,
144
+ "6M": 15552e6,
145
+ "12M": 31536e6
146
+ };
147
+ function _(e) {
148
+ return g[e];
149
+ }
150
+ function v(e, t) {
151
+ let n = new Date(e), r = g[t];
152
+ return r >= 864e5 ? n.toLocaleDateString(void 0, {
153
+ month: "short",
154
+ day: "numeric"
155
+ }) : r >= 36e5 ? n.toLocaleTimeString(void 0, {
156
+ hour: "2-digit",
157
+ minute: "2-digit"
158
+ }) : n.toLocaleTimeString(void 0, {
159
+ hour: "2-digit",
160
+ minute: "2-digit",
161
+ second: "2-digit"
162
+ });
163
+ }
164
+ function y(e, t) {
165
+ let n = g[t];
166
+ return Math.floor(e / n) * n;
167
+ }
168
+ //#endregion
169
+ //#region src/utils/precision.ts
170
+ function b(e, t = 2) {
171
+ return e.toFixed(t);
172
+ }
173
+ function x(e) {
174
+ 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);
175
+ }
176
+ function S(e) {
177
+ let t = 0;
178
+ for (let n of e) {
179
+ let e = n.toString(), r = e.indexOf(".");
180
+ r >= 0 && (t = Math.max(t, e.length - r - 1));
181
+ }
182
+ return Math.min(t, 8);
183
+ }
184
+ //#endregion
185
+ //#region src/constants/defaults.ts
186
+ var C = {
187
+ autoScale: !0,
188
+ rightMargin: 5,
189
+ minBarSpacing: 2,
190
+ maxBarSpacing: 30,
191
+ grid: {
192
+ visible: !0,
193
+ hLineStyle: "solid",
194
+ vLineStyle: "solid"
195
+ },
196
+ crosshair: { mode: "magnet" }
197
+ }, w = [
198
+ "1s",
199
+ "1m",
200
+ "3m",
201
+ "5m",
202
+ "15m",
203
+ "30m",
204
+ "1h",
205
+ "2h",
206
+ "4h",
207
+ "6h",
208
+ "8h",
209
+ "12h",
210
+ "1d",
211
+ "3d",
212
+ "1w",
213
+ "1M"
214
+ ], T = [
215
+ "1m",
216
+ "5m",
217
+ "15m",
218
+ "30m",
219
+ "1h",
220
+ "2h",
221
+ "4h",
222
+ "1d",
223
+ "1w",
224
+ "1M",
225
+ "3M",
226
+ "6M",
227
+ "12M"
228
+ ], E = [
229
+ "1m",
230
+ "5m",
231
+ "15m",
232
+ "30m",
233
+ "1h",
234
+ "4h",
235
+ "1d",
236
+ "1w",
237
+ "1M"
238
+ ], D = [
239
+ "1m",
240
+ "5m",
241
+ "15m",
242
+ "1h",
243
+ "4h",
244
+ "1d",
245
+ "1w"
246
+ ], O = 8, k = 2, A = 70, j = 30, M = 60, N = 120, P = {
247
+ family: "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif",
248
+ sizeSmall: 10,
249
+ sizeMedium: 12,
250
+ sizeLarge: 14
251
+ }, F = {
252
+ name: "dark",
253
+ background: "#131722",
254
+ text: "#D1D4DC",
255
+ textSecondary: "#787B86",
256
+ grid: "#1E222D",
257
+ crosshair: "#9598A1",
258
+ candleUp: "#26A69A",
259
+ candleDown: "#EF5350",
260
+ candleUpWick: "#26A69A",
261
+ candleDownWick: "#EF5350",
262
+ lineColor: "#2196F3",
263
+ areaTopColor: "rgba(33, 150, 243, 0.4)",
264
+ areaBottomColor: "rgba(33, 150, 243, 0.0)",
265
+ volumeUp: "rgba(38, 166, 154, 0.3)",
266
+ volumeDown: "rgba(239, 83, 80, 0.3)",
267
+ axisLine: "#2A2E39",
268
+ axisLabel: "#D1D4DC",
269
+ axisLabelBackground: "#2A2E39",
270
+ font: P
271
+ }, I = {
272
+ name: "light",
273
+ background: "#FFFFFF",
274
+ text: "#131722",
275
+ textSecondary: "#787B86",
276
+ grid: "#F0F3FA",
277
+ crosshair: "#9598A1",
278
+ candleUp: "#26A69A",
279
+ candleDown: "#EF5350",
280
+ candleUpWick: "#26A69A",
281
+ candleDownWick: "#EF5350",
282
+ lineColor: "#2196F3",
283
+ areaTopColor: "rgba(33, 150, 243, 0.4)",
284
+ areaBottomColor: "rgba(33, 150, 243, 0.0)",
285
+ volumeUp: "rgba(38, 166, 154, 0.3)",
286
+ volumeDown: "rgba(239, 83, 80, 0.3)",
287
+ axisLine: "#E0E3EB",
288
+ axisLabel: "#131722",
289
+ axisLabelBackground: "#F0F3FA",
290
+ font: P
291
+ }, L = {
292
+ candlestick: "Candlestick",
293
+ line: "Line",
294
+ area: "Area",
295
+ bar: "OHLC Bar",
296
+ price: "Price",
297
+ volume: "Volume",
298
+ time: "Time",
299
+ open: "Open",
300
+ high: "High",
301
+ low: "Low",
302
+ close: "Close",
303
+ sma: "SMA",
304
+ ema: "EMA",
305
+ bollingerBands: "Bollinger Bands",
306
+ vwap: "VWAP",
307
+ ichimoku: "Ichimoku Cloud",
308
+ parabolicSAR: "Parabolic SAR",
309
+ supertrend: "Supertrend",
310
+ keltnerChannel: "Keltner Channel",
311
+ donchianChannel: "Donchian Channel",
312
+ rsi: "RSI",
313
+ macd: "MACD",
314
+ stochastic: "Stochastic",
315
+ atr: "ATR",
316
+ adx: "ADX",
317
+ obv: "OBV",
318
+ williamsR: "Williams %R",
319
+ cci: "CCI",
320
+ mfi: "MFI",
321
+ aroon: "Aroon",
322
+ roc: "ROC",
323
+ tsi: "TSI",
324
+ cmf: "CMF",
325
+ stddev: "Std Dev",
326
+ volumeProfile: "Volume Profile",
327
+ accumulationDistribution: "A/D Line",
328
+ vroc: "VROC",
329
+ trendLine: "Trend Line",
330
+ horizontalLine: "Horizontal Line",
331
+ verticalLine: "Vertical Line",
332
+ ray: "Ray",
333
+ extendedLine: "Extended Line",
334
+ parallelChannel: "Parallel Channel",
335
+ regressionChannel: "Regression Channel",
336
+ fibRetracement: "Fibonacci Retracement",
337
+ fibExtension: "Fibonacci Extension",
338
+ rectangle: "Rectangle",
339
+ ellipse: "Ellipse",
340
+ triangle: "Triangle",
341
+ pitchfork: "Andrews' Pitchfork",
342
+ elliottWave: "Elliott Wave",
343
+ priceRange: "Price Range",
344
+ dateRange: "Date Range",
345
+ measure: "Measure",
346
+ textTool: "Text",
347
+ arrow: "Arrow",
348
+ clearAll: "Clear All",
349
+ buy: "Buy",
350
+ sell: "Sell",
351
+ buyLimit: "Buy Limit",
352
+ sellLimit: "Sell Limit",
353
+ buyStop: "Buy Stop",
354
+ sellStop: "Sell Stop",
355
+ stopLoss: "Stop Loss",
356
+ takeProfit: "Take Profit",
357
+ market: "Market",
358
+ limit: "Limit",
359
+ stop: "Stop",
360
+ cancel: "Cancel",
361
+ modify: "Modify",
362
+ quantity: "Qty",
363
+ pnl: "P&L",
364
+ activeOrders: "Active Orders",
365
+ positions: "Positions",
366
+ noOrders: "No active orders",
367
+ noPositions: "No open positions",
368
+ placeOrder: "Place Order",
369
+ rightClickToTrade: "Right-click chart to place orders",
370
+ ceiling: "Ceiling",
371
+ floor: "Floor",
372
+ reference: "Reference",
373
+ session: "Session",
374
+ preOpen: "Pre-Open",
375
+ continuous: "Continuous",
376
+ preClose: "Pre-Close",
377
+ closed: "Closed",
378
+ settings: "Settings",
379
+ theme: "Theme",
380
+ darkTheme: "Dark",
381
+ lightTheme: "Light",
382
+ tools: "Tools",
383
+ indicators: "Indicators",
384
+ overlays: "Overlays",
385
+ panels: "Panels",
386
+ orders: "Orders",
387
+ autoScale: "Auto Scale",
388
+ crosshair: "Crosshair",
389
+ grid: "Grid",
390
+ loading: "Loading...",
391
+ error: "Error",
392
+ numberDecimalSeparator: ".",
393
+ numberGroupSeparator: ","
394
+ }, R = {
395
+ candlestick: "Nến",
396
+ line: "Đường",
397
+ area: "Vùng",
398
+ bar: "Thanh OHLC",
399
+ price: "Giá",
400
+ volume: "Khối lượng",
401
+ time: "Thời gian",
402
+ open: "Mở",
403
+ high: "Cao",
404
+ low: "Thấp",
405
+ close: "Đóng",
406
+ sma: "SMA",
407
+ ema: "EMA",
408
+ bollingerBands: "Dải Bollinger",
409
+ vwap: "VWAP",
410
+ ichimoku: "Mây Ichimoku",
411
+ parabolicSAR: "Parabolic SAR",
412
+ supertrend: "Supertrend",
413
+ keltnerChannel: "Kênh Keltner",
414
+ donchianChannel: "Kênh Donchian",
415
+ rsi: "RSI",
416
+ macd: "MACD",
417
+ stochastic: "Stochastic",
418
+ atr: "ATR",
419
+ adx: "ADX",
420
+ obv: "OBV",
421
+ williamsR: "Williams %R",
422
+ cci: "CCI",
423
+ mfi: "MFI",
424
+ aroon: "Aroon",
425
+ roc: "ROC",
426
+ tsi: "TSI",
427
+ cmf: "CMF",
428
+ stddev: "Độ lệch chuẩn",
429
+ volumeProfile: "Phân bổ KL",
430
+ accumulationDistribution: "Tích lũy/Phân phối",
431
+ vroc: "VROC",
432
+ trendLine: "Đường xu hướng",
433
+ horizontalLine: "Đường ngang",
434
+ verticalLine: "Đường dọc",
435
+ ray: "Tia",
436
+ extendedLine: "Đường kéo dài",
437
+ parallelChannel: "Kênh song song",
438
+ regressionChannel: "Kênh hồi quy",
439
+ fibRetracement: "Fibonacci thoái lui",
440
+ fibExtension: "Fibonacci mở rộng",
441
+ rectangle: "Hình chữ nhật",
442
+ ellipse: "Hình elip",
443
+ triangle: "Tam giác",
444
+ pitchfork: "Chĩa ba Andrews",
445
+ elliottWave: "Sóng Elliott",
446
+ priceRange: "Khoảng giá",
447
+ dateRange: "Khoảng thời gian",
448
+ measure: "Đo lường",
449
+ textTool: "Chữ",
450
+ arrow: "Mũi tên",
451
+ clearAll: "Xóa tất cả",
452
+ buy: "Mua",
453
+ sell: "Bán",
454
+ buyLimit: "Mua giới hạn",
455
+ sellLimit: "Bán giới hạn",
456
+ buyStop: "Mua chặn",
457
+ sellStop: "Bán chặn",
458
+ stopLoss: "Cắt lỗ",
459
+ takeProfit: "Chốt lời",
460
+ market: "Thị trường",
461
+ limit: "Giới hạn",
462
+ stop: "Dừng",
463
+ cancel: "Hủy",
464
+ modify: "Sửa",
465
+ quantity: "KL",
466
+ pnl: "Lãi/Lỗ",
467
+ activeOrders: "Lệnh chờ",
468
+ positions: "Vị thế",
469
+ noOrders: "Không có lệnh chờ",
470
+ noPositions: "Không có vị thế mở",
471
+ placeOrder: "Đặt lệnh",
472
+ rightClickToTrade: "Nhấp chuột phải để đặt lệnh",
473
+ ceiling: "Trần",
474
+ floor: "Sàn",
475
+ reference: "Tham chiếu",
476
+ session: "Phiên",
477
+ preOpen: "Trước giờ mở",
478
+ continuous: "Liên tục",
479
+ preClose: "Trước giờ đóng",
480
+ closed: "Đóng cửa",
481
+ settings: "Cài đặt",
482
+ theme: "Giao diện",
483
+ darkTheme: "Tối",
484
+ lightTheme: "Sáng",
485
+ tools: "Công cụ",
486
+ indicators: "Chỉ báo",
487
+ overlays: "Phủ lên",
488
+ panels: "Bảng",
489
+ orders: "Lệnh",
490
+ autoScale: "Tự co giãn",
491
+ crosshair: "Chữ thập",
492
+ grid: "Lưới",
493
+ loading: "Đang tải...",
494
+ error: "Lỗi",
495
+ numberDecimalSeparator: ",",
496
+ numberGroupSeparator: "."
497
+ }, z = new Map([["en", L], ["vi", R]]), B = "en", V = L;
498
+ function H(e) {
499
+ B = e, V = z.get(e) ?? L;
500
+ }
501
+ function U() {
502
+ return B;
503
+ }
504
+ function W(e) {
505
+ return V[e] ?? L[e] ?? e;
506
+ }
507
+ function G(e, t) {
508
+ z.set(e, t);
509
+ }
510
+ function K(e) {
511
+ return z.get(e ?? B) ?? L;
512
+ }
513
+ function q(e, t = 2, n) {
514
+ let r = z.get(n ?? B) ?? L, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
515
+ for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
516
+ return c && (u = "-" + u), s ? u + i + s : u;
517
+ }
518
+ function J(e) {
519
+ return q(e, 0, "vi");
520
+ }
521
+ function Y(e, t) {
522
+ return e >= 1e9 ? q(e / 1e9, 2, t ?? B) + "B" : e >= 1e6 ? q(e / 1e6, 2, t ?? B) + "M" : e >= 1e3 ? q(e / 1e3, 2, t ?? B) + "K" : q(e, 0, t ?? B);
523
+ }
524
+ //#endregion
525
+ //#region src/market/presets.ts
526
+ var X = {
527
+ up: "#FF0000",
528
+ down: "#0000FF",
529
+ unchanged: "#FFD700",
530
+ ceiling: "#FF00FF",
531
+ floor: "#00FFFF",
532
+ reference: "#FFD700"
533
+ }, Z = [
534
+ {
535
+ name: "ATO",
536
+ startTime: "09:00",
537
+ endTime: "09:15",
538
+ type: "preOpen"
539
+ },
540
+ {
541
+ name: "Phiên 1",
542
+ startTime: "09:15",
543
+ endTime: "11:30",
544
+ type: "continuous"
545
+ },
546
+ {
547
+ name: "Nghỉ trưa",
548
+ startTime: "11:30",
549
+ endTime: "13:00",
550
+ type: "closed"
551
+ },
552
+ {
553
+ name: "Phiên 2",
554
+ startTime: "13:00",
555
+ endTime: "14:30",
556
+ type: "continuous"
557
+ },
558
+ {
559
+ name: "ATC",
560
+ startTime: "14:30",
561
+ endTime: "14:45",
562
+ type: "preClose"
563
+ }
564
+ ], Q = [
565
+ {
566
+ name: "Phiên 1",
567
+ startTime: "09:00",
568
+ endTime: "11:30",
569
+ type: "continuous"
570
+ },
571
+ {
572
+ name: "Nghỉ trưa",
573
+ startTime: "11:30",
574
+ endTime: "13:00",
575
+ type: "closed"
576
+ },
577
+ {
578
+ name: "Phiên 2",
579
+ startTime: "13:00",
580
+ endTime: "14:30",
581
+ type: "continuous"
582
+ },
583
+ {
584
+ name: "ATC",
585
+ startTime: "14:30",
586
+ endTime: "14:45",
587
+ type: "preClose"
588
+ }
589
+ ], $ = {
590
+ type: "stock",
591
+ exchange: "HOSE",
592
+ currency: "VND",
593
+ pricePrecision: 2,
594
+ volumeUnit: 10,
595
+ priceStep: .05,
596
+ priceLimits: {
597
+ enabled: !0,
598
+ ceilingPercent: 7,
599
+ floorPercent: 7
600
+ },
601
+ sessions: Z,
602
+ colorScheme: X
603
+ }, te = {
604
+ type: "stock",
605
+ exchange: "HNX",
606
+ currency: "VND",
607
+ pricePrecision: 1,
608
+ volumeUnit: 100,
609
+ priceStep: .1,
610
+ priceLimits: {
611
+ enabled: !0,
612
+ ceilingPercent: 10,
613
+ floorPercent: 10
614
+ },
615
+ sessions: Q,
616
+ colorScheme: X
617
+ }, ne = {
618
+ type: "stock",
619
+ exchange: "UPCOM",
620
+ currency: "VND",
621
+ pricePrecision: 1,
622
+ volumeUnit: 100,
623
+ priceStep: .1,
624
+ priceLimits: {
625
+ enabled: !0,
626
+ ceilingPercent: 15,
627
+ floorPercent: 15
628
+ },
629
+ sessions: Q,
630
+ colorScheme: X
631
+ }, re = {
632
+ type: "crypto",
633
+ currency: "USDT",
634
+ pricePrecision: 2,
635
+ priceLimits: { enabled: !1 }
636
+ }, ie = {
637
+ type: "stock",
638
+ exchange: "NYSE",
639
+ currency: "USD",
640
+ pricePrecision: 2,
641
+ priceStep: .01,
642
+ priceLimits: { enabled: !1 },
643
+ sessions: [
644
+ {
645
+ name: "Pre-Market",
646
+ startTime: "04:00",
647
+ endTime: "09:30",
648
+ type: "preOpen"
649
+ },
650
+ {
651
+ name: "Regular",
652
+ startTime: "09:30",
653
+ endTime: "16:00",
654
+ type: "continuous"
655
+ },
656
+ {
657
+ name: "After-Hours",
658
+ startTime: "16:00",
659
+ endTime: "20:00",
660
+ type: "preClose"
661
+ }
662
+ ]
663
+ };
664
+ function ae(e) {
665
+ return {
666
+ ...e,
667
+ candleUp: X.up,
668
+ candleDown: X.down,
669
+ candleUpWick: X.up,
670
+ candleDownWick: X.down,
671
+ volumeUp: "rgba(255, 0, 0, 0.3)",
672
+ volumeDown: "rgba(0, 0, 255, 0.3)"
673
+ };
674
+ }
675
+ function oe(e, t) {
676
+ if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
677
+ let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100;
678
+ return {
679
+ ceiling: e * (1 + n),
680
+ floor: e * (1 - r),
681
+ reference: e
682
+ };
683
+ }
684
+ function se(e) {
685
+ let t = /* @__PURE__ */ new Date(), n = `${String(t.getHours()).padStart(2, "0")}:${String(t.getMinutes()).padStart(2, "0")}`;
686
+ for (let t of e) if (n >= t.startTime && n < t.endTime) return t;
687
+ return null;
688
+ }
689
+ //#endregion
690
+ export { F as DARK_THEME, k as DEFAULT_BAR_SPACING, O as DEFAULT_BAR_WIDTH, C as DEFAULT_CHART_OPTIONS, t as DEFAULT_DRAWING_STYLE, N as DEFAULT_PANEL_HEIGHT, r as DEFAULT_RECONNECT, i as DEFAULT_STREAM_CONFIG, D as DEFAULT_TIMEFRAME_FAVORITES, n as DEFAULT_TRADING_CONFIG, Q as HNX_SESSIONS, Z as HOSE_SESSIONS, I as LIGHT_THEME, e as LayerType, re as MARKET_CRYPTO, te as MARKET_HNX, $ as MARKET_HOSE, ie as MARKET_NYSE, ne as MARKET_UPCOM, M as MIN_PANEL_HEIGHT, A as PRICE_AXIS_WIDTH, w as TIMEFRAMES_CRYPTO, E as TIMEFRAMES_FOREX, T as TIMEFRAMES_STOCK, j as TIME_AXIS_HEIGHT, X as VN_COLORS, y as alignToTimeframe, a as clamp, oe as computePriceLimits, p as computePriceRange, u as computeTickStep, ae as createVNTheme, S as detectPrecision, L as en, f as findBarIndex, q as formatNumber, b as formatPrice, v as formatTimestamp, J as formatVND, x as formatVolume, Y as formatVolumeLoc, se as getCurrentSession, U as getLocale, K as getLocaleStrings, h as hexToRgba, s as inverseLerp, o as lerp, m as mergeBar, l as niceNumber, G as registerLocale, c as roundToStep, H as setLocale, d as sliceVisibleData, W as t, _ as timeframeToMs, R as vi, ee as withAlpha };
691
+
692
+ //# sourceMappingURL=index.js.map