@tradecanvas/commons 1.7.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +67 -67
- package/dist/constants/themes.d.ts +19 -0
- package/dist/constants/themes.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +268 -230
- package/dist/index.js.map +1 -1
- package/dist/types/chart.d.ts +10 -0
- package/dist/types/chart.d.ts.map +1 -1
- package/dist/types/events.d.ts +12 -1
- package/dist/types/events.d.ts.map +1 -1
- package/dist/utils/color.d.ts +4 -0
- package/dist/utils/color.d.ts.map +1 -1
- package/dist/utils/time.d.ts +12 -2
- package/dist/utils/time.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -148,17 +148,17 @@ function p(e, t) {
|
|
|
148
148
|
let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
|
|
149
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;
|
|
150
150
|
}
|
|
151
|
-
function
|
|
151
|
+
function oe(e, t, n) {
|
|
152
152
|
return p(p(t - e, !1) / (n - 1), !0);
|
|
153
153
|
}
|
|
154
154
|
//#endregion
|
|
155
155
|
//#region src/utils/data.ts
|
|
156
|
-
function
|
|
156
|
+
function se(e) {
|
|
157
157
|
return e > 0xe8d4a51000 ? e : e * 1e3;
|
|
158
158
|
}
|
|
159
|
-
function
|
|
159
|
+
function ce(e) {
|
|
160
160
|
return {
|
|
161
|
-
time:
|
|
161
|
+
time: se(e.time ?? e.t ?? 0),
|
|
162
162
|
open: e.open ?? e.o ?? 0,
|
|
163
163
|
high: e.high ?? e.h ?? 0,
|
|
164
164
|
low: e.low ?? e.l ?? 0,
|
|
@@ -166,11 +166,11 @@ function oe(e) {
|
|
|
166
166
|
volume: e.volume ?? e.v ?? 0
|
|
167
167
|
};
|
|
168
168
|
}
|
|
169
|
-
function
|
|
169
|
+
function le(e, t, n) {
|
|
170
170
|
let r = Math.max(0, t), i = Math.min(e.length, n + 1);
|
|
171
171
|
return e.slice(r, i);
|
|
172
172
|
}
|
|
173
|
-
function
|
|
173
|
+
function ue(e, t) {
|
|
174
174
|
let n = 0, r = e.length - 1;
|
|
175
175
|
for (; n <= r;) {
|
|
176
176
|
let i = n + r >>> 1;
|
|
@@ -180,7 +180,7 @@ function ce(e, t) {
|
|
|
180
180
|
}
|
|
181
181
|
return n;
|
|
182
182
|
}
|
|
183
|
-
function
|
|
183
|
+
function de(e, t, n, r = .05) {
|
|
184
184
|
if (e.length === 0) return {
|
|
185
185
|
min: 0,
|
|
186
186
|
max: 1
|
|
@@ -197,7 +197,7 @@ function le(e, t, n, r = .05) {
|
|
|
197
197
|
max: s + c * r
|
|
198
198
|
};
|
|
199
199
|
}
|
|
200
|
-
function
|
|
200
|
+
function fe(e, t) {
|
|
201
201
|
return {
|
|
202
202
|
...e,
|
|
203
203
|
high: Math.max(e.high, t.price),
|
|
@@ -209,15 +209,17 @@ function ue(e, t) {
|
|
|
209
209
|
}
|
|
210
210
|
//#endregion
|
|
211
211
|
//#region src/utils/color.ts
|
|
212
|
-
function
|
|
213
|
-
|
|
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})`;
|
|
214
215
|
}
|
|
215
|
-
function
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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;
|
|
219
221
|
}
|
|
220
|
-
function
|
|
222
|
+
function he(e, t, n) {
|
|
221
223
|
let r = (e) => (e = e.replace("#", ""), e.length === 3 && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]), {
|
|
222
224
|
r: parseInt(e.slice(0, 2), 16),
|
|
223
225
|
g: parseInt(e.slice(2, 4), 16),
|
|
@@ -227,7 +229,7 @@ function fe(e, t, n) {
|
|
|
227
229
|
}
|
|
228
230
|
//#endregion
|
|
229
231
|
//#region src/utils/timezone.ts
|
|
230
|
-
var
|
|
232
|
+
var m = 6e4, h = 1440 * m, g = 15 * m, ge = 8192, _ = 7 * h, _e = 4096, ve = new Set([
|
|
231
233
|
"UTC",
|
|
232
234
|
"Etc/UTC",
|
|
233
235
|
"GMT",
|
|
@@ -238,9 +240,9 @@ var _ = 6e4, v = 1440 * _, y = 15 * _, pe = 8192, b = 7 * v, me = 4096, he = new
|
|
|
238
240
|
"Etc/Universal",
|
|
239
241
|
"Zulu",
|
|
240
242
|
"Etc/Zulu"
|
|
241
|
-
]),
|
|
242
|
-
function
|
|
243
|
-
let t =
|
|
243
|
+
]), ye = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Map();
|
|
244
|
+
function be(e) {
|
|
245
|
+
let t = ye.get(e);
|
|
244
246
|
return t || (t = new Intl.DateTimeFormat("en-US", {
|
|
245
247
|
timeZone: e,
|
|
246
248
|
hourCycle: "h23",
|
|
@@ -250,34 +252,34 @@ function ve(e) {
|
|
|
250
252
|
hour: "numeric",
|
|
251
253
|
minute: "numeric",
|
|
252
254
|
second: "numeric"
|
|
253
|
-
}),
|
|
255
|
+
}), ye.set(e, t)), t;
|
|
254
256
|
}
|
|
255
|
-
function
|
|
257
|
+
function xe(e) {
|
|
256
258
|
if (!e) return !1;
|
|
257
259
|
try {
|
|
258
|
-
return
|
|
260
|
+
return be(e), !0;
|
|
259
261
|
} catch {
|
|
260
262
|
return !1;
|
|
261
263
|
}
|
|
262
264
|
}
|
|
263
|
-
function
|
|
264
|
-
if (!Number.isFinite(t) ||
|
|
265
|
-
let n =
|
|
266
|
-
n || (n = /* @__PURE__ */ new Map(),
|
|
267
|
-
let r = Math.floor(t /
|
|
268
|
-
return i || (i =
|
|
269
|
-
}
|
|
270
|
-
function
|
|
271
|
-
let n =
|
|
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);
|
|
272
274
|
if (i === n) return {
|
|
273
275
|
before: n,
|
|
274
276
|
change: Infinity,
|
|
275
277
|
after: i
|
|
276
278
|
};
|
|
277
279
|
let a = t;
|
|
278
|
-
for (; r - a >
|
|
279
|
-
let t = a + Math.floor((r - a) /
|
|
280
|
-
|
|
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;
|
|
281
283
|
}
|
|
282
284
|
return {
|
|
283
285
|
before: n,
|
|
@@ -285,11 +287,11 @@ function be(e, t) {
|
|
|
285
287
|
after: i
|
|
286
288
|
};
|
|
287
289
|
}
|
|
288
|
-
function
|
|
289
|
-
let n = Math.floor(t /
|
|
290
|
+
function x(e, t) {
|
|
291
|
+
let n = Math.floor(t / g), r = `${e}|${n}`, i = v.get(r);
|
|
290
292
|
if (i !== void 0) return i;
|
|
291
|
-
let a = n *
|
|
292
|
-
for (let t of
|
|
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))) {
|
|
293
295
|
let e = Number(t.value);
|
|
294
296
|
switch (t.type) {
|
|
295
297
|
case "year":
|
|
@@ -312,21 +314,21 @@ function C(e, t) {
|
|
|
312
314
|
break;
|
|
313
315
|
}
|
|
314
316
|
}
|
|
315
|
-
let f = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) /
|
|
316
|
-
return
|
|
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;
|
|
317
319
|
}
|
|
318
|
-
function
|
|
319
|
-
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e :
|
|
320
|
+
function S(e, t) {
|
|
321
|
+
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : b(e, t);
|
|
320
322
|
}
|
|
321
|
-
function
|
|
322
|
-
let n = e -
|
|
323
|
-
if (n +
|
|
324
|
-
let r = e -
|
|
325
|
-
return r +
|
|
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;
|
|
326
328
|
}
|
|
327
|
-
var
|
|
328
|
-
function
|
|
329
|
-
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i =
|
|
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);
|
|
330
332
|
if (i) return i;
|
|
331
333
|
let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
|
|
332
334
|
try {
|
|
@@ -340,12 +342,12 @@ function Se(e, t, n) {
|
|
|
340
342
|
timeZone: a
|
|
341
343
|
});
|
|
342
344
|
}
|
|
343
|
-
let s = typeof n == "number" ? n *
|
|
344
|
-
return i = (e) => o.format(new Date(e + s)),
|
|
345
|
+
let s = typeof n == "number" ? n * m : 0;
|
|
346
|
+
return i = (e) => o.format(new Date(e + s)), C.set(r, i), i;
|
|
345
347
|
}
|
|
346
348
|
//#endregion
|
|
347
349
|
//#region src/utils/time.ts
|
|
348
|
-
var
|
|
350
|
+
var Te = {
|
|
349
351
|
"1s": 1e3,
|
|
350
352
|
"5s": 5e3,
|
|
351
353
|
"15s": 15e3,
|
|
@@ -372,16 +374,16 @@ var Ce = {
|
|
|
372
374
|
"3M": 7776e6,
|
|
373
375
|
"6M": 15552e6,
|
|
374
376
|
"12M": 31536e6
|
|
375
|
-
},
|
|
377
|
+
}, w = {
|
|
376
378
|
s: 1e3,
|
|
377
379
|
m: 6e4,
|
|
378
380
|
h: 36e5,
|
|
379
381
|
d: 864e5,
|
|
380
382
|
w: 6048e5,
|
|
381
383
|
M: 2592e6
|
|
382
|
-
},
|
|
383
|
-
function
|
|
384
|
-
let t =
|
|
384
|
+
}, Ee = /^([1-9]\d*)([smhdwM])$/;
|
|
385
|
+
function T(e) {
|
|
386
|
+
let t = Ee.exec(e);
|
|
385
387
|
if (!t) return null;
|
|
386
388
|
let n = Number(t[1]);
|
|
387
389
|
return Number.isSafeInteger(n) ? {
|
|
@@ -389,24 +391,24 @@ function D(e) {
|
|
|
389
391
|
unit: t[2]
|
|
390
392
|
} : null;
|
|
391
393
|
}
|
|
392
|
-
var
|
|
393
|
-
function
|
|
394
|
+
var De = 1e6;
|
|
395
|
+
function Oe(e) {
|
|
394
396
|
let t = /^([1-9]\d*)T$/.exec(e);
|
|
395
397
|
if (!t) return null;
|
|
396
398
|
let n = Number(t[1]);
|
|
397
|
-
return Number.isSafeInteger(n) && n <=
|
|
399
|
+
return Number.isSafeInteger(n) && n <= De ? n : null;
|
|
398
400
|
}
|
|
399
|
-
function
|
|
400
|
-
return
|
|
401
|
+
function ke(e) {
|
|
402
|
+
return T(e) !== null;
|
|
401
403
|
}
|
|
402
|
-
function
|
|
403
|
-
let t =
|
|
404
|
+
function E(e) {
|
|
405
|
+
let t = Te[e];
|
|
404
406
|
if (t !== void 0) return t;
|
|
405
|
-
let n =
|
|
406
|
-
return n ? n.count *
|
|
407
|
+
let n = T(e);
|
|
408
|
+
return n ? n.count * w[n.unit] : NaN;
|
|
407
409
|
}
|
|
408
|
-
function
|
|
409
|
-
let n = new Date(e), r =
|
|
410
|
+
function Ae(e, t) {
|
|
411
|
+
let n = new Date(e), r = E(t);
|
|
410
412
|
return r >= 864e5 ? n.toLocaleDateString(void 0, {
|
|
411
413
|
month: "short",
|
|
412
414
|
day: "numeric"
|
|
@@ -419,11 +421,11 @@ function Oe(e, t) {
|
|
|
419
421
|
second: "2-digit"
|
|
420
422
|
});
|
|
421
423
|
}
|
|
422
|
-
function
|
|
423
|
-
let n =
|
|
424
|
+
function je(e, t) {
|
|
425
|
+
let n = E(t);
|
|
424
426
|
return Math.floor(e / n) * n;
|
|
425
427
|
}
|
|
426
|
-
function
|
|
428
|
+
function Me(e, t) {
|
|
427
429
|
if (t === null) {
|
|
428
430
|
let t = new Date(e);
|
|
429
431
|
return {
|
|
@@ -434,7 +436,7 @@ function Ae(e, t) {
|
|
|
434
436
|
minutes: t.getMinutes()
|
|
435
437
|
};
|
|
436
438
|
}
|
|
437
|
-
let n = new Date(e +
|
|
439
|
+
let n = new Date(e + S(t, e) * 6e4);
|
|
438
440
|
return {
|
|
439
441
|
year: n.getUTCFullYear(),
|
|
440
442
|
month: n.getUTCMonth() + 1,
|
|
@@ -443,79 +445,90 @@ function Ae(e, t) {
|
|
|
443
445
|
minutes: n.getUTCMinutes()
|
|
444
446
|
};
|
|
445
447
|
}
|
|
446
|
-
function
|
|
448
|
+
function Ne(e) {
|
|
447
449
|
return e.hours === 0 && e.minutes === 0;
|
|
448
450
|
}
|
|
449
|
-
|
|
450
|
-
|
|
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;
|
|
461
|
+
}
|
|
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;
|
|
451
464
|
return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
|
|
452
465
|
}
|
|
453
|
-
var
|
|
454
|
-
function
|
|
455
|
-
let { count: r, unit: i } =
|
|
466
|
+
var D = Date.UTC(1970, 0, 5);
|
|
467
|
+
function O(e, t, n = 1) {
|
|
468
|
+
let { count: r, unit: i } = T(t) ?? {
|
|
456
469
|
count: 1,
|
|
457
470
|
unit: "m"
|
|
458
471
|
};
|
|
459
472
|
if (i === "s" || i === "m" || i === "h" || i === "d") {
|
|
460
|
-
let t = r *
|
|
473
|
+
let t = r * w[i];
|
|
461
474
|
return Math.floor(e / t) * t;
|
|
462
475
|
}
|
|
463
476
|
let a = new Date(e);
|
|
464
477
|
if (i === "w") {
|
|
465
|
-
let e =
|
|
478
|
+
let e = w.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
|
|
466
479
|
if (r <= 1) return i;
|
|
467
|
-
let o = Math.floor((i -
|
|
468
|
-
return
|
|
480
|
+
let o = Math.floor((i - D) / (7 * e));
|
|
481
|
+
return D + Math.floor(o / r) * r * 7 * e;
|
|
469
482
|
}
|
|
470
483
|
let o = a.getUTCFullYear() * 12 + a.getUTCMonth(), s = Math.floor(o / r) * r;
|
|
471
484
|
return Date.UTC(Math.floor(s / 12), s % 12, 1);
|
|
472
485
|
}
|
|
473
486
|
//#endregion
|
|
474
487
|
//#region src/utils/precision.ts
|
|
475
|
-
var
|
|
476
|
-
function
|
|
477
|
-
let n = `${e}|${t}`, r =
|
|
478
|
-
return r || (
|
|
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, {
|
|
479
492
|
minimumFractionDigits: t,
|
|
480
493
|
maximumFractionDigits: t
|
|
481
|
-
}),
|
|
494
|
+
}), k.set(n, r)), r;
|
|
482
495
|
}
|
|
483
|
-
function
|
|
484
|
-
return
|
|
496
|
+
function A(e, t = 2, n = "en-US") {
|
|
497
|
+
return Re(n, t).format(e);
|
|
485
498
|
}
|
|
486
|
-
function
|
|
499
|
+
function ze(e, t) {
|
|
487
500
|
if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
|
|
488
|
-
let n =
|
|
501
|
+
let n = oe(e, t, 8);
|
|
489
502
|
return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
|
|
490
503
|
}
|
|
491
|
-
function
|
|
504
|
+
function Be(e, t, n, r = 2, i = "en-US") {
|
|
492
505
|
if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
|
|
493
506
|
if (t === "percentage") {
|
|
494
507
|
let t = (e / n - 1) * 100;
|
|
495
508
|
return `${t > 0 ? "+" : ""}${t.toFixed(2)}%`;
|
|
496
509
|
}
|
|
497
|
-
return
|
|
510
|
+
return A(e / n * 100, 2, i);
|
|
498
511
|
}
|
|
499
|
-
return
|
|
512
|
+
return A(e, r, i);
|
|
500
513
|
}
|
|
501
|
-
function
|
|
514
|
+
function Ve(e, t, n = 1) {
|
|
502
515
|
let r = Number.isInteger(n) && n > 1 ? n : 1;
|
|
503
516
|
if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
|
|
504
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)) : "";
|
|
505
518
|
return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
|
|
506
519
|
}
|
|
507
|
-
function
|
|
520
|
+
function He(e) {
|
|
508
521
|
if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
|
|
509
522
|
let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
|
|
510
523
|
return 1 / (e.denominator * t);
|
|
511
524
|
}
|
|
512
|
-
function
|
|
513
|
-
return e ? typeof e == "function" ? e :
|
|
525
|
+
function Ue(e) {
|
|
526
|
+
return e ? typeof e == "function" ? e : He(e) === null ? null : (t) => Ve(t, e.denominator, e.subDenominator) : null;
|
|
514
527
|
}
|
|
515
|
-
function
|
|
528
|
+
function We(e) {
|
|
516
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);
|
|
517
530
|
}
|
|
518
|
-
function
|
|
531
|
+
function Ge(e) {
|
|
519
532
|
let t = 0;
|
|
520
533
|
for (let n of e) {
|
|
521
534
|
let e = n.toString(), r = e.indexOf(".");
|
|
@@ -525,7 +538,7 @@ function ze(e) {
|
|
|
525
538
|
}
|
|
526
539
|
//#endregion
|
|
527
540
|
//#region src/utils/priceSource.ts
|
|
528
|
-
var
|
|
541
|
+
var Ke = [
|
|
529
542
|
"close",
|
|
530
543
|
"open",
|
|
531
544
|
"high",
|
|
@@ -535,10 +548,10 @@ var F = [
|
|
|
535
548
|
"ohlc4",
|
|
536
549
|
"hlcc4"
|
|
537
550
|
];
|
|
538
|
-
function
|
|
539
|
-
return typeof e == "string" &&
|
|
551
|
+
function qe(e) {
|
|
552
|
+
return typeof e == "string" && Ke.includes(e);
|
|
540
553
|
}
|
|
541
|
-
function
|
|
554
|
+
function Je(e, t) {
|
|
542
555
|
switch (t) {
|
|
543
556
|
case "open": return e.open;
|
|
544
557
|
case "high": return e.high;
|
|
@@ -550,13 +563,13 @@ function Ve(e, t) {
|
|
|
550
563
|
default: return e.close;
|
|
551
564
|
}
|
|
552
565
|
}
|
|
553
|
-
var
|
|
554
|
-
function
|
|
566
|
+
var Ye = /^ind:([^:]+):(.+)$/;
|
|
567
|
+
function Xe(e, t) {
|
|
555
568
|
return `ind:${e}:${t}`;
|
|
556
569
|
}
|
|
557
|
-
function
|
|
570
|
+
function Ze(e) {
|
|
558
571
|
if (typeof e != "string") return null;
|
|
559
|
-
let t =
|
|
572
|
+
let t = Ye.exec(e);
|
|
560
573
|
return t ? {
|
|
561
574
|
instanceId: t[1],
|
|
562
575
|
key: t[2]
|
|
@@ -564,11 +577,11 @@ function We(e) {
|
|
|
564
577
|
}
|
|
565
578
|
//#endregion
|
|
566
579
|
//#region src/utils/resample.ts
|
|
567
|
-
var
|
|
568
|
-
function
|
|
580
|
+
var Qe = 864e5;
|
|
581
|
+
function $e(e, t, n = 1) {
|
|
569
582
|
let r = [], i = null;
|
|
570
583
|
for (let a of e) {
|
|
571
|
-
let e =
|
|
584
|
+
let e = O(a.time, t, n);
|
|
572
585
|
i === null || e !== i.time ? (i = {
|
|
573
586
|
time: e,
|
|
574
587
|
open: a.open,
|
|
@@ -580,37 +593,37 @@ function Ke(e, t, n = 1) {
|
|
|
580
593
|
}
|
|
581
594
|
return r;
|
|
582
595
|
}
|
|
583
|
-
var
|
|
584
|
-
function
|
|
585
|
-
let n =
|
|
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);
|
|
586
599
|
if (!n || !r) return !1;
|
|
587
|
-
let i =
|
|
588
|
-
return n.unit === "d" && n.count > 1 ? !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;
|
|
589
602
|
}
|
|
590
|
-
function
|
|
603
|
+
function tt(e, t) {
|
|
591
604
|
let n = null, r = 0;
|
|
592
605
|
for (let i of t) {
|
|
593
|
-
if (!
|
|
594
|
-
let t =
|
|
606
|
+
if (!et(i, e)) continue;
|
|
607
|
+
let t = E(i);
|
|
595
608
|
t > r && (n = i, r = t);
|
|
596
609
|
}
|
|
597
610
|
return n;
|
|
598
611
|
}
|
|
599
612
|
//#endregion
|
|
600
613
|
//#region src/utils/symbols.ts
|
|
601
|
-
function
|
|
614
|
+
function nt(e, t) {
|
|
602
615
|
if (!e) return 0;
|
|
603
616
|
if (e === t) return 1e3;
|
|
604
617
|
if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
|
|
605
618
|
let n = e.indexOf(t);
|
|
606
619
|
return n >= 0 ? 300 - Math.min(100, n) : 0;
|
|
607
620
|
}
|
|
608
|
-
function
|
|
621
|
+
function rt(e, t, n = 50, r) {
|
|
609
622
|
let i = t.trim().toUpperCase();
|
|
610
623
|
if (!i) return e.slice(0, n);
|
|
611
624
|
let a = [];
|
|
612
625
|
for (let t of e) {
|
|
613
|
-
let e = Math.max(
|
|
626
|
+
let e = Math.max(nt(t.symbol.toUpperCase(), i), nt((t.description ?? "").toUpperCase(), i) * .8);
|
|
614
627
|
e > 0 && a.push({
|
|
615
628
|
info: t,
|
|
616
629
|
score: e + (r?.(t) ?? 0)
|
|
@@ -618,7 +631,7 @@ function Ye(e, t, n = 50, r) {
|
|
|
618
631
|
}
|
|
619
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);
|
|
620
633
|
}
|
|
621
|
-
function
|
|
634
|
+
function it(e) {
|
|
622
635
|
let t = typeof e == "number" ? e : Number(e);
|
|
623
636
|
if (!Number.isFinite(t) || t <= 0) return 0;
|
|
624
637
|
for (let e = 0; e <= 12; e++) {
|
|
@@ -627,7 +640,7 @@ function Xe(e) {
|
|
|
627
640
|
}
|
|
628
641
|
return 12;
|
|
629
642
|
}
|
|
630
|
-
function
|
|
643
|
+
function M(e) {
|
|
631
644
|
let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
|
|
632
645
|
if (!t) return null;
|
|
633
646
|
let n = Number(t[1]), r = Number(t[2]);
|
|
@@ -635,26 +648,26 @@ function R(e) {
|
|
|
635
648
|
}
|
|
636
649
|
//#endregion
|
|
637
650
|
//#region src/utils/marketStatus.ts
|
|
638
|
-
var
|
|
639
|
-
function
|
|
651
|
+
var N = 864e5, P = 6e4, at = 8;
|
|
652
|
+
function ot(e, t) {
|
|
640
653
|
let n = e?.timezone, r = (e?.sessions ?? []).flatMap((e) => {
|
|
641
|
-
let t =
|
|
654
|
+
let t = M(e.start), n = M(e.end);
|
|
642
655
|
return t === null || n === null || t === n ? [] : [{
|
|
643
656
|
start: t,
|
|
644
657
|
end: n,
|
|
645
658
|
days: Array.isArray(e.days) ? e.days : null
|
|
646
659
|
}];
|
|
647
660
|
});
|
|
648
|
-
if (!n || !
|
|
661
|
+
if (!n || !xe(n) || r.length === 0 || !Number.isFinite(t)) return {
|
|
649
662
|
state: "always",
|
|
650
663
|
next: null
|
|
651
664
|
};
|
|
652
|
-
let i =
|
|
653
|
-
for (let e = -1; e <=
|
|
654
|
-
let t = a + e *
|
|
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;
|
|
655
668
|
for (let e of r) {
|
|
656
669
|
if (e.days && !e.days.includes(n)) continue;
|
|
657
|
-
let r = t + e.start *
|
|
670
|
+
let r = t + e.start * P, i = (e.end > e.start ? t : t + N) + e.end * P;
|
|
658
671
|
s.push([o(r), o(i)]);
|
|
659
672
|
}
|
|
660
673
|
}
|
|
@@ -677,15 +690,15 @@ function Qe(e, t) {
|
|
|
677
690
|
}
|
|
678
691
|
//#endregion
|
|
679
692
|
//#region src/utils/drawingOptions.ts
|
|
680
|
-
var
|
|
681
|
-
function
|
|
693
|
+
var st = 48, ct = 2e3, lt = 1e4;
|
|
694
|
+
function ut(e) {
|
|
682
695
|
if (!Array.isArray(e)) return;
|
|
683
696
|
let t = [];
|
|
684
697
|
for (let n of e) {
|
|
685
|
-
if (t.length >=
|
|
698
|
+
if (t.length >= st) break;
|
|
686
699
|
if (typeof n != "object" || !n) continue;
|
|
687
700
|
let { value: e, visible: r, color: i } = n;
|
|
688
|
-
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) >
|
|
701
|
+
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > lt || r !== void 0 && typeof r != "boolean") continue;
|
|
689
702
|
let a = {
|
|
690
703
|
value: e,
|
|
691
704
|
visible: r ?? !0
|
|
@@ -694,104 +707,104 @@ function nt(e) {
|
|
|
694
707
|
}
|
|
695
708
|
return t;
|
|
696
709
|
}
|
|
697
|
-
function
|
|
710
|
+
function dt(e, t) {
|
|
698
711
|
switch (e.kind) {
|
|
699
712
|
case "boolean": return typeof t == "boolean" ? t : void 0;
|
|
700
713
|
case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
|
|
701
714
|
case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
|
|
702
|
-
case "levels": return
|
|
703
|
-
case "text": return typeof t == "string" ? t.slice(0,
|
|
715
|
+
case "levels": return ut(t);
|
|
716
|
+
case "text": return typeof t == "string" ? t.slice(0, ct) : void 0;
|
|
704
717
|
}
|
|
705
718
|
}
|
|
706
|
-
function
|
|
719
|
+
function ft(e, t) {
|
|
707
720
|
if (!e || typeof t != "object" || !t) return {};
|
|
708
721
|
let n = {};
|
|
709
722
|
for (let [r, i] of Object.entries(t)) {
|
|
710
723
|
let t = e[r];
|
|
711
724
|
if (!t) continue;
|
|
712
|
-
let a =
|
|
725
|
+
let a = dt(t, i);
|
|
713
726
|
a !== void 0 && (n[r] = a);
|
|
714
727
|
}
|
|
715
728
|
return n;
|
|
716
729
|
}
|
|
717
|
-
function
|
|
730
|
+
function pt(e) {
|
|
718
731
|
return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
|
|
719
732
|
}
|
|
720
|
-
function
|
|
733
|
+
function mt(e, t, n) {
|
|
721
734
|
let r = e?.[n];
|
|
722
|
-
return r ?
|
|
735
|
+
return r ? pt((t && n in t ? dt(r, t[n]) : void 0) ?? r.default) : t?.[n];
|
|
723
736
|
}
|
|
724
|
-
function
|
|
737
|
+
function ht(e, t) {
|
|
725
738
|
let n = {};
|
|
726
|
-
for (let r of Object.keys(e ?? {})) n[r] =
|
|
739
|
+
for (let r of Object.keys(e ?? {})) n[r] = mt(e, t, r);
|
|
727
740
|
return n;
|
|
728
741
|
}
|
|
729
742
|
//#endregion
|
|
730
743
|
//#region src/utils/drawingStyle.ts
|
|
731
|
-
var
|
|
744
|
+
var gt = [
|
|
732
745
|
"solid",
|
|
733
746
|
"dashed",
|
|
734
747
|
"dotted"
|
|
735
|
-
],
|
|
736
|
-
function
|
|
748
|
+
], _t = 64, vt = 2e3, yt = 20, bt = 200;
|
|
749
|
+
function F(e, t, n) {
|
|
737
750
|
return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
|
|
738
751
|
}
|
|
739
|
-
function
|
|
740
|
-
return typeof e == "string" && e.length > 0 && e.length <=
|
|
752
|
+
function xt(e) {
|
|
753
|
+
return typeof e == "string" && e.length > 0 && e.length <= _t ? e : void 0;
|
|
741
754
|
}
|
|
742
|
-
function
|
|
755
|
+
function St(e) {
|
|
743
756
|
if (typeof e != "object" || !e) return {};
|
|
744
|
-
let t = e, n = {}, r =
|
|
757
|
+
let t = e, n = {}, r = xt(t.color);
|
|
745
758
|
r !== void 0 && (n.color = r);
|
|
746
|
-
let i =
|
|
747
|
-
i !== void 0 && (n.lineWidth = i),
|
|
748
|
-
let a =
|
|
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);
|
|
749
762
|
a !== void 0 && (n.fillColor = a);
|
|
750
|
-
let o =
|
|
763
|
+
let o = F(t.fillOpacity, 0, 1);
|
|
751
764
|
o !== void 0 && (n.fillOpacity = o);
|
|
752
|
-
let s =
|
|
753
|
-
return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0,
|
|
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;
|
|
754
767
|
}
|
|
755
768
|
//#endregion
|
|
756
769
|
//#region src/utils/chartTypeOptions.ts
|
|
757
|
-
var
|
|
758
|
-
function
|
|
759
|
-
if (!
|
|
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 {};
|
|
760
773
|
let t = {};
|
|
761
|
-
if (
|
|
774
|
+
if (R(e.renko)) {
|
|
762
775
|
let { boxSize: n, atrPeriod: r } = e.renko;
|
|
763
776
|
t.renko = {
|
|
764
|
-
...
|
|
765
|
-
...
|
|
777
|
+
...I(n) || n === "atr" ? { boxSize: n } : {},
|
|
778
|
+
...L(r, 1, 500) ? { atrPeriod: r } : {}
|
|
766
779
|
};
|
|
767
780
|
}
|
|
768
|
-
if (
|
|
781
|
+
if (R(e.lineBreak)) {
|
|
769
782
|
let { lines: n } = e.lineBreak;
|
|
770
|
-
t.lineBreak =
|
|
783
|
+
t.lineBreak = L(n, 1, 10) ? { lines: n } : {};
|
|
771
784
|
}
|
|
772
|
-
if (
|
|
785
|
+
if (R(e.kagi)) {
|
|
773
786
|
let { reversal: n, reversalType: r } = e.kagi;
|
|
774
787
|
t.kagi = {
|
|
775
|
-
...
|
|
788
|
+
...I(n) ? { reversal: n } : {},
|
|
776
789
|
...r === "percent" || r === "price" ? { reversalType: r } : {}
|
|
777
790
|
};
|
|
778
791
|
}
|
|
779
|
-
if (
|
|
792
|
+
if (R(e.pointAndFigure)) {
|
|
780
793
|
let { boxSize: n, reversal: r } = e.pointAndFigure;
|
|
781
794
|
t.pointAndFigure = {
|
|
782
|
-
...
|
|
783
|
-
...
|
|
795
|
+
...I(n) || n === "auto" ? { boxSize: n } : {},
|
|
796
|
+
...L(r, 1, 10) ? { reversal: r } : {}
|
|
784
797
|
};
|
|
785
798
|
}
|
|
786
|
-
if (
|
|
799
|
+
if (R(e.rangeBars)) {
|
|
787
800
|
let { range: n } = e.rangeBars;
|
|
788
|
-
t.rangeBars =
|
|
801
|
+
t.rangeBars = I(n) || n === "auto" ? { range: n } : {};
|
|
789
802
|
}
|
|
790
803
|
return t;
|
|
791
804
|
}
|
|
792
805
|
//#endregion
|
|
793
806
|
//#region src/constants/defaults.ts
|
|
794
|
-
var
|
|
807
|
+
var wt = {
|
|
795
808
|
autoScale: !0,
|
|
796
809
|
rightMargin: 5,
|
|
797
810
|
minBarSpacing: 2,
|
|
@@ -802,7 +815,7 @@ var ht = {
|
|
|
802
815
|
vLineStyle: "solid"
|
|
803
816
|
},
|
|
804
817
|
crosshair: { mode: "magnet" }
|
|
805
|
-
},
|
|
818
|
+
}, Tt = [
|
|
806
819
|
"1s",
|
|
807
820
|
"1m",
|
|
808
821
|
"3m",
|
|
@@ -819,7 +832,7 @@ var ht = {
|
|
|
819
832
|
"3d",
|
|
820
833
|
"1w",
|
|
821
834
|
"1M"
|
|
822
|
-
],
|
|
835
|
+
], Et = [
|
|
823
836
|
"1m",
|
|
824
837
|
"5m",
|
|
825
838
|
"15m",
|
|
@@ -833,7 +846,7 @@ var ht = {
|
|
|
833
846
|
"3M",
|
|
834
847
|
"6M",
|
|
835
848
|
"12M"
|
|
836
|
-
],
|
|
849
|
+
], Dt = [
|
|
837
850
|
"1m",
|
|
838
851
|
"5m",
|
|
839
852
|
"15m",
|
|
@@ -843,7 +856,7 @@ var ht = {
|
|
|
843
856
|
"1d",
|
|
844
857
|
"1w",
|
|
845
858
|
"1M"
|
|
846
|
-
],
|
|
859
|
+
], Ot = [
|
|
847
860
|
"1m",
|
|
848
861
|
"5m",
|
|
849
862
|
"15m",
|
|
@@ -851,12 +864,12 @@ var ht = {
|
|
|
851
864
|
"4h",
|
|
852
865
|
"1d",
|
|
853
866
|
"1w"
|
|
854
|
-
],
|
|
855
|
-
family:
|
|
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,
|
|
856
869
|
sizeSmall: 10,
|
|
857
870
|
sizeMedium: 12,
|
|
858
871
|
sizeLarge: 14
|
|
859
|
-
},
|
|
872
|
+
}, V = {
|
|
860
873
|
amber: "#f2a93b",
|
|
861
874
|
up: "#1fa874",
|
|
862
875
|
down: "#e8505b",
|
|
@@ -867,33 +880,37 @@ var ht = {
|
|
|
867
880
|
rose: "#e25592",
|
|
868
881
|
neutral: "#7d8696",
|
|
869
882
|
ink: "#0c1016"
|
|
870
|
-
},
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
883
|
+
}, Ft = .22;
|
|
884
|
+
function H(e) {
|
|
885
|
+
return me(e, Ft);
|
|
886
|
+
}
|
|
887
|
+
var U = "#2eb88a", W = "#e85a67", It = [
|
|
888
|
+
V.blue,
|
|
889
|
+
V.ochre,
|
|
890
|
+
V.violet,
|
|
891
|
+
V.cyan,
|
|
892
|
+
V.rose
|
|
893
|
+
], G = {
|
|
877
894
|
name: "dark",
|
|
878
|
-
background:
|
|
895
|
+
background: V.ink,
|
|
879
896
|
text: "#d9dde4",
|
|
880
897
|
textSecondary: "#7d8696",
|
|
881
898
|
grid: "#161b23",
|
|
882
899
|
crosshair: "#8a93a3",
|
|
883
|
-
candleUp:
|
|
884
|
-
candleDown:
|
|
885
|
-
candleUpWick:
|
|
886
|
-
candleDownWick:
|
|
887
|
-
lineColor:
|
|
900
|
+
candleUp: U,
|
|
901
|
+
candleDown: W,
|
|
902
|
+
candleUpWick: U,
|
|
903
|
+
candleDownWick: W,
|
|
904
|
+
lineColor: V.amber,
|
|
888
905
|
areaTopColor: "rgba(242, 169, 59, 0.32)",
|
|
889
906
|
areaBottomColor: "rgba(242, 169, 59, 0.0)",
|
|
890
|
-
volumeUp:
|
|
891
|
-
volumeDown:
|
|
907
|
+
volumeUp: H(U),
|
|
908
|
+
volumeDown: H(W),
|
|
892
909
|
axisLine: "#1f2630",
|
|
893
|
-
axisLabel: "#
|
|
910
|
+
axisLabel: "#9aa3b2",
|
|
894
911
|
axisLabelBackground: "#1f2630",
|
|
895
|
-
font:
|
|
896
|
-
},
|
|
912
|
+
font: B
|
|
913
|
+
}, K = {
|
|
897
914
|
name: "light",
|
|
898
915
|
background: "#ffffff",
|
|
899
916
|
text: "#0f131a",
|
|
@@ -907,13 +924,13 @@ var ht = {
|
|
|
907
924
|
lineColor: "#c77a0a",
|
|
908
925
|
areaTopColor: "rgba(199, 122, 10, 0.24)",
|
|
909
926
|
areaBottomColor: "rgba(199, 122, 10, 0.0)",
|
|
910
|
-
volumeUp: "
|
|
911
|
-
volumeDown: "
|
|
927
|
+
volumeUp: H("#16a36a"),
|
|
928
|
+
volumeDown: H("#d9414f"),
|
|
912
929
|
axisLine: "#dde1e7",
|
|
913
|
-
axisLabel: "#
|
|
930
|
+
axisLabel: "#5b6472",
|
|
914
931
|
axisLabelBackground: "#eef0f3",
|
|
915
|
-
font:
|
|
916
|
-
},
|
|
932
|
+
font: B
|
|
933
|
+
}, q = {
|
|
917
934
|
name: "terminal",
|
|
918
935
|
background: "#0E0E0E",
|
|
919
936
|
text: "#C0C0C0",
|
|
@@ -938,7 +955,28 @@ var ht = {
|
|
|
938
955
|
sizeMedium: 12,
|
|
939
956
|
sizeLarge: 14
|
|
940
957
|
}
|
|
941
|
-
},
|
|
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 = {
|
|
942
980
|
candlestick: "Candlestick",
|
|
943
981
|
line: "Line",
|
|
944
982
|
area: "Area",
|
|
@@ -1041,7 +1079,7 @@ var ht = {
|
|
|
1041
1079
|
error: "Error",
|
|
1042
1080
|
numberDecimalSeparator: ".",
|
|
1043
1081
|
numberGroupSeparator: ","
|
|
1044
|
-
},
|
|
1082
|
+
}, zt = {
|
|
1045
1083
|
candlestick: "Nến",
|
|
1046
1084
|
line: "Đường",
|
|
1047
1085
|
area: "Vùng",
|
|
@@ -1144,31 +1182,31 @@ var ht = {
|
|
|
1144
1182
|
error: "Lỗi",
|
|
1145
1183
|
numberDecimalSeparator: ",",
|
|
1146
1184
|
numberGroupSeparator: "."
|
|
1147
|
-
}, Y = new Map([["en",
|
|
1148
|
-
function
|
|
1149
|
-
X = e,
|
|
1185
|
+
}, Y = new Map([["en", J], ["vi", zt]]), X = "en", Bt = J;
|
|
1186
|
+
function Vt(e) {
|
|
1187
|
+
X = e, Bt = Y.get(e) ?? J;
|
|
1150
1188
|
}
|
|
1151
|
-
function
|
|
1189
|
+
function Ht() {
|
|
1152
1190
|
return X;
|
|
1153
1191
|
}
|
|
1154
|
-
function
|
|
1155
|
-
return
|
|
1192
|
+
function Ut(e) {
|
|
1193
|
+
return Bt[e] ?? J[e] ?? e;
|
|
1156
1194
|
}
|
|
1157
|
-
function
|
|
1195
|
+
function Wt(e, t) {
|
|
1158
1196
|
Y.set(e, t);
|
|
1159
1197
|
}
|
|
1160
|
-
function
|
|
1161
|
-
return Y.get(e ?? X) ??
|
|
1198
|
+
function Gt(e) {
|
|
1199
|
+
return Y.get(e ?? X) ?? J;
|
|
1162
1200
|
}
|
|
1163
1201
|
function Z(e, t = 2, n) {
|
|
1164
|
-
let r = Y.get(n ?? X) ??
|
|
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 = "";
|
|
1165
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;
|
|
1166
1204
|
return c && (u = "-" + u), s ? u + i + s : u;
|
|
1167
1205
|
}
|
|
1168
|
-
function
|
|
1206
|
+
function Kt(e) {
|
|
1169
1207
|
return Z(e, 0, "vi");
|
|
1170
1208
|
}
|
|
1171
|
-
function
|
|
1209
|
+
function qt(e, t) {
|
|
1172
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);
|
|
1173
1211
|
}
|
|
1174
1212
|
//#endregion
|
|
@@ -1180,7 +1218,7 @@ var Q = {
|
|
|
1180
1218
|
ceiling: "#FF00FF",
|
|
1181
1219
|
floor: "#00FFFF",
|
|
1182
1220
|
reference: "#FFD700"
|
|
1183
|
-
},
|
|
1221
|
+
}, Jt = [
|
|
1184
1222
|
{
|
|
1185
1223
|
name: "ATO",
|
|
1186
1224
|
startTime: "09:00",
|
|
@@ -1236,7 +1274,7 @@ var Q = {
|
|
|
1236
1274
|
endTime: "14:45",
|
|
1237
1275
|
type: "preClose"
|
|
1238
1276
|
}
|
|
1239
|
-
],
|
|
1277
|
+
], Yt = {
|
|
1240
1278
|
type: "stock",
|
|
1241
1279
|
exchange: "HOSE",
|
|
1242
1280
|
currency: "VND",
|
|
@@ -1248,9 +1286,9 @@ var Q = {
|
|
|
1248
1286
|
ceilingPercent: 7,
|
|
1249
1287
|
floorPercent: 7
|
|
1250
1288
|
},
|
|
1251
|
-
sessions:
|
|
1289
|
+
sessions: Jt,
|
|
1252
1290
|
colorScheme: Q
|
|
1253
|
-
},
|
|
1291
|
+
}, Xt = {
|
|
1254
1292
|
type: "stock",
|
|
1255
1293
|
exchange: "HNX",
|
|
1256
1294
|
currency: "VND",
|
|
@@ -1264,7 +1302,7 @@ var Q = {
|
|
|
1264
1302
|
},
|
|
1265
1303
|
sessions: $,
|
|
1266
1304
|
colorScheme: Q
|
|
1267
|
-
},
|
|
1305
|
+
}, Zt = {
|
|
1268
1306
|
type: "stock",
|
|
1269
1307
|
exchange: "UPCOM",
|
|
1270
1308
|
currency: "VND",
|
|
@@ -1278,12 +1316,12 @@ var Q = {
|
|
|
1278
1316
|
},
|
|
1279
1317
|
sessions: $,
|
|
1280
1318
|
colorScheme: Q
|
|
1281
|
-
},
|
|
1319
|
+
}, Qt = {
|
|
1282
1320
|
type: "crypto",
|
|
1283
1321
|
currency: "USDT",
|
|
1284
1322
|
pricePrecision: 2,
|
|
1285
1323
|
priceLimits: { enabled: !1 }
|
|
1286
|
-
},
|
|
1324
|
+
}, $t = {
|
|
1287
1325
|
type: "stock",
|
|
1288
1326
|
exchange: "NYSE",
|
|
1289
1327
|
currency: "USD",
|
|
@@ -1311,7 +1349,7 @@ var Q = {
|
|
|
1311
1349
|
}
|
|
1312
1350
|
]
|
|
1313
1351
|
};
|
|
1314
|
-
function
|
|
1352
|
+
function en(e) {
|
|
1315
1353
|
return {
|
|
1316
1354
|
...e,
|
|
1317
1355
|
candleUp: Q.up,
|
|
@@ -1322,7 +1360,7 @@ function Gt(e) {
|
|
|
1322
1360
|
volumeDown: "rgba(0, 0, 255, 0.3)"
|
|
1323
1361
|
};
|
|
1324
1362
|
}
|
|
1325
|
-
function
|
|
1363
|
+
function tn(e, t) {
|
|
1326
1364
|
if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
|
|
1327
1365
|
let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100;
|
|
1328
1366
|
return {
|
|
@@ -1331,12 +1369,12 @@ function Kt(e, t) {
|
|
|
1331
1369
|
reference: e
|
|
1332
1370
|
};
|
|
1333
1371
|
}
|
|
1334
|
-
function
|
|
1372
|
+
function nn(e) {
|
|
1335
1373
|
let t = /* @__PURE__ */ new Date(), n = `${String(t.getHours()).padStart(2, "0")}:${String(t.getMinutes()).padStart(2, "0")}`;
|
|
1336
1374
|
for (let t of e) if (n >= t.startTime && n < t.endTime) return t;
|
|
1337
1375
|
return null;
|
|
1338
1376
|
}
|
|
1339
1377
|
//#endregion
|
|
1340
|
-
export {
|
|
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 };
|
|
1341
1379
|
|
|
1342
1380
|
//# sourceMappingURL=index.js.map
|