@tradecanvas/commons 1.23.0 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +363 -358
- package/dist/index.js.map +1 -1
- package/dist/utils/data.d.ts +19 -3
- package/dist/utils/data.d.ts.map +1 -1
- package/dist/utils/time.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -199,11 +199,11 @@ function u(e) {
|
|
|
199
199
|
}
|
|
200
200
|
//#endregion
|
|
201
201
|
//#region src/types/news.ts
|
|
202
|
-
var d = 300,
|
|
202
|
+
var d = 300, ee = 1e3, f = (e, t) => {
|
|
203
203
|
if (typeof e != "string") return;
|
|
204
204
|
let n = e.trim();
|
|
205
205
|
return n ? n.slice(0, t) : void 0;
|
|
206
|
-
},
|
|
206
|
+
}, te = (e) => {
|
|
207
207
|
if (typeof e == "string") try {
|
|
208
208
|
let t = new URL(e);
|
|
209
209
|
return t.protocol === "https:" || t.protocol === "http:" ? t.href : void 0;
|
|
@@ -211,56 +211,61 @@ var d = 300, f = 1e3, p = (e, t) => {
|
|
|
211
211
|
return;
|
|
212
212
|
}
|
|
213
213
|
};
|
|
214
|
-
function
|
|
214
|
+
function ne(e, t = 20) {
|
|
215
215
|
if (!Array.isArray(e)) return [];
|
|
216
216
|
let n = [];
|
|
217
217
|
for (let t of e) {
|
|
218
218
|
if (!t || typeof t != "object") continue;
|
|
219
|
-
let e = t, r =
|
|
219
|
+
let e = t, r = f(e.title, d);
|
|
220
220
|
if (!r || typeof e.time != "number" || !Number.isFinite(e.time)) continue;
|
|
221
221
|
let i = {
|
|
222
222
|
title: r,
|
|
223
223
|
time: e.time
|
|
224
|
-
}, a =
|
|
224
|
+
}, a = te(e.url);
|
|
225
225
|
a && (i.url = a);
|
|
226
|
-
let o =
|
|
226
|
+
let o = f(e.source, d);
|
|
227
227
|
o && (i.source = o);
|
|
228
|
-
let s =
|
|
228
|
+
let s = f(e.summary, ee);
|
|
229
229
|
s && (i.summary = s);
|
|
230
|
-
let c =
|
|
230
|
+
let c = f(e.id, d);
|
|
231
231
|
c && (i.id = c), n.push(i);
|
|
232
232
|
}
|
|
233
233
|
return n.sort((e, t) => t.time - e.time).slice(0, Math.max(0, t));
|
|
234
234
|
}
|
|
235
235
|
//#endregion
|
|
236
236
|
//#region src/utils/math.ts
|
|
237
|
-
function
|
|
237
|
+
function re(e, t, n) {
|
|
238
238
|
return Math.max(t, Math.min(n, e));
|
|
239
239
|
}
|
|
240
|
-
function
|
|
240
|
+
function ie(e, t, n) {
|
|
241
241
|
return e + (t - e) * n;
|
|
242
242
|
}
|
|
243
|
-
function
|
|
243
|
+
function ae(e, t, n) {
|
|
244
244
|
return e === t ? 0 : (n - e) / (t - e);
|
|
245
245
|
}
|
|
246
|
-
function
|
|
246
|
+
function oe(e, t) {
|
|
247
247
|
return Math.round(e / t) * t;
|
|
248
248
|
}
|
|
249
|
-
function
|
|
249
|
+
function se(e, t) {
|
|
250
250
|
let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
|
|
251
251
|
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;
|
|
252
252
|
}
|
|
253
|
-
function
|
|
254
|
-
return
|
|
253
|
+
function ce(e, t, n) {
|
|
254
|
+
return se(se(t - e, !1) / (n - 1), !0);
|
|
255
255
|
}
|
|
256
256
|
//#endregion
|
|
257
257
|
//#region src/utils/data.ts
|
|
258
|
-
|
|
259
|
-
|
|
258
|
+
var le = 1e11;
|
|
259
|
+
function ue(e) {
|
|
260
|
+
let t = e.length > 0 ? e[e.length - 1].time : NaN;
|
|
261
|
+
return Number.isFinite(t) ? Math.abs(t) >= 1e11 ? 1 : 1e3 : 1;
|
|
262
|
+
}
|
|
263
|
+
function de(e, t) {
|
|
264
|
+
return t === void 0 ? Math.abs(e) >= 1e11 ? e : e * 1e3 : e * t;
|
|
260
265
|
}
|
|
261
|
-
function
|
|
266
|
+
function fe(e) {
|
|
262
267
|
return {
|
|
263
|
-
time:
|
|
268
|
+
time: de(e.time ?? e.t ?? 0),
|
|
264
269
|
open: e.open ?? e.o ?? 0,
|
|
265
270
|
high: e.high ?? e.h ?? 0,
|
|
266
271
|
low: e.low ?? e.l ?? 0,
|
|
@@ -268,11 +273,11 @@ function ce(e) {
|
|
|
268
273
|
volume: e.volume ?? e.v ?? 0
|
|
269
274
|
};
|
|
270
275
|
}
|
|
271
|
-
function
|
|
276
|
+
function pe(e, t, n) {
|
|
272
277
|
let r = Math.max(0, t), i = Math.min(e.length, n + 1);
|
|
273
278
|
return e.slice(r, i);
|
|
274
279
|
}
|
|
275
|
-
function
|
|
280
|
+
function me(e, t) {
|
|
276
281
|
let n = 0, r = e.length - 1;
|
|
277
282
|
for (; n <= r;) {
|
|
278
283
|
let i = n + r >>> 1;
|
|
@@ -282,7 +287,7 @@ function ue(e, t) {
|
|
|
282
287
|
}
|
|
283
288
|
return n;
|
|
284
289
|
}
|
|
285
|
-
function
|
|
290
|
+
function he(e, t, n, r = .05) {
|
|
286
291
|
if (e.length === 0) return {
|
|
287
292
|
min: 0,
|
|
288
293
|
max: 1
|
|
@@ -299,7 +304,7 @@ function de(e, t, n, r = .05) {
|
|
|
299
304
|
max: s + c * r
|
|
300
305
|
};
|
|
301
306
|
}
|
|
302
|
-
function
|
|
307
|
+
function ge(e, t) {
|
|
303
308
|
return {
|
|
304
309
|
...e,
|
|
305
310
|
high: Math.max(e.high, t.price),
|
|
@@ -311,17 +316,17 @@ function fe(e, t) {
|
|
|
311
316
|
}
|
|
312
317
|
//#endregion
|
|
313
318
|
//#region src/utils/color.ts
|
|
314
|
-
function
|
|
319
|
+
function _e(e, t = 1) {
|
|
315
320
|
let n = e.slice(1);
|
|
316
321
|
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})`;
|
|
317
322
|
}
|
|
318
|
-
function
|
|
323
|
+
function ve(e, t) {
|
|
319
324
|
let n = e.trim();
|
|
320
|
-
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return
|
|
325
|
+
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return _e(n, t);
|
|
321
326
|
let r = n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);
|
|
322
327
|
return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
|
|
323
328
|
}
|
|
324
|
-
function
|
|
329
|
+
function ye(e, t, n) {
|
|
325
330
|
let r = (e) => (e = e.replace("#", ""), e.length === 3 && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]), {
|
|
326
331
|
r: parseInt(e.slice(0, 2), 16),
|
|
327
332
|
g: parseInt(e.slice(2, 4), 16),
|
|
@@ -331,7 +336,7 @@ function he(e, t, n) {
|
|
|
331
336
|
}
|
|
332
337
|
//#endregion
|
|
333
338
|
//#region src/utils/timezone.ts
|
|
334
|
-
var
|
|
339
|
+
var p = 6e4, m = 1440 * p, h = 15 * p, be = 8192, g = 7 * m, xe = 4096, Se = new Set([
|
|
335
340
|
"UTC",
|
|
336
341
|
"Etc/UTC",
|
|
337
342
|
"GMT",
|
|
@@ -342,9 +347,9 @@ var h = 6e4, g = 1440 * h, _ = 15 * h, ge = 8192, v = 7 * g, _e = 4096, ve = new
|
|
|
342
347
|
"Etc/Universal",
|
|
343
348
|
"Zulu",
|
|
344
349
|
"Etc/Zulu"
|
|
345
|
-
]),
|
|
346
|
-
function
|
|
347
|
-
let t =
|
|
350
|
+
]), Ce = /* @__PURE__ */ new Map(), _ = /* @__PURE__ */ new Map(), we = /* @__PURE__ */ new Map();
|
|
351
|
+
function Te(e) {
|
|
352
|
+
let t = Ce.get(e);
|
|
348
353
|
return t || (t = new Intl.DateTimeFormat("en-US", {
|
|
349
354
|
timeZone: e,
|
|
350
355
|
hourCycle: "h23",
|
|
@@ -354,34 +359,34 @@ function xe(e) {
|
|
|
354
359
|
hour: "numeric",
|
|
355
360
|
minute: "numeric",
|
|
356
361
|
second: "numeric"
|
|
357
|
-
}),
|
|
362
|
+
}), Ce.set(e, t)), t;
|
|
358
363
|
}
|
|
359
|
-
function
|
|
364
|
+
function Ee(e) {
|
|
360
365
|
if (!e) return !1;
|
|
361
366
|
try {
|
|
362
|
-
return
|
|
367
|
+
return Te(e), !0;
|
|
363
368
|
} catch {
|
|
364
369
|
return !1;
|
|
365
370
|
}
|
|
366
371
|
}
|
|
367
|
-
function
|
|
368
|
-
if (!Number.isFinite(t) ||
|
|
369
|
-
let n =
|
|
370
|
-
n || (n = /* @__PURE__ */ new Map(),
|
|
371
|
-
let r = Math.floor(t /
|
|
372
|
-
return i || (i =
|
|
372
|
+
function v(e, t) {
|
|
373
|
+
if (!Number.isFinite(t) || Se.has(e)) return 0;
|
|
374
|
+
let n = we.get(e);
|
|
375
|
+
n || (n = /* @__PURE__ */ new Map(), we.set(e, n));
|
|
376
|
+
let r = Math.floor(t / g), i = n.get(r);
|
|
377
|
+
return i || (i = De(e, r * g), n.size >= xe && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
|
|
373
378
|
}
|
|
374
|
-
function
|
|
375
|
-
let n =
|
|
379
|
+
function De(e, t) {
|
|
380
|
+
let n = Oe(e, t), r = t + g - h, i = Oe(e, r);
|
|
376
381
|
if (i === n) return {
|
|
377
382
|
before: n,
|
|
378
383
|
change: Infinity,
|
|
379
384
|
after: i
|
|
380
385
|
};
|
|
381
386
|
let a = t;
|
|
382
|
-
for (; r - a >
|
|
383
|
-
let t = a + Math.floor((r - a) /
|
|
384
|
-
|
|
387
|
+
for (; r - a > h;) {
|
|
388
|
+
let t = a + Math.floor((r - a) / h / 2) * h;
|
|
389
|
+
Oe(e, t) === n ? a = t : r = t;
|
|
385
390
|
}
|
|
386
391
|
return {
|
|
387
392
|
before: n,
|
|
@@ -389,11 +394,11 @@ function Se(e, t) {
|
|
|
389
394
|
after: i
|
|
390
395
|
};
|
|
391
396
|
}
|
|
392
|
-
function
|
|
393
|
-
let n = Math.floor(t /
|
|
397
|
+
function Oe(e, t) {
|
|
398
|
+
let n = Math.floor(t / h), r = `${e}|${n}`, i = _.get(r);
|
|
394
399
|
if (i !== void 0) return i;
|
|
395
|
-
let a = n *
|
|
396
|
-
for (let t of
|
|
400
|
+
let a = n * h, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
|
|
401
|
+
for (let t of Te(e).formatToParts(new Date(a))) {
|
|
397
402
|
let e = Number(t.value);
|
|
398
403
|
switch (t.type) {
|
|
399
404
|
case "year":
|
|
@@ -416,21 +421,21 @@ function S(e, t) {
|
|
|
416
421
|
break;
|
|
417
422
|
}
|
|
418
423
|
}
|
|
419
|
-
let
|
|
420
|
-
return
|
|
424
|
+
let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / p);
|
|
425
|
+
return _.size >= be && _.clear(), _.set(r, ee), ee;
|
|
421
426
|
}
|
|
422
|
-
function
|
|
423
|
-
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e :
|
|
427
|
+
function y(e, t) {
|
|
428
|
+
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : v(e, t);
|
|
424
429
|
}
|
|
425
|
-
function
|
|
426
|
-
let n = e -
|
|
427
|
-
if (n +
|
|
428
|
-
let r = e -
|
|
429
|
-
return r +
|
|
430
|
+
function ke(e, t) {
|
|
431
|
+
let n = e - y(t, e - m) * p;
|
|
432
|
+
if (n + y(t, n) * p === e) return n;
|
|
433
|
+
let r = e - y(t, e + m) * p;
|
|
434
|
+
return r + y(t, r) * p === e ? r : n;
|
|
430
435
|
}
|
|
431
|
-
var
|
|
432
|
-
function
|
|
433
|
-
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i =
|
|
436
|
+
var Ae = /* @__PURE__ */ new Map();
|
|
437
|
+
function je(e, t, n) {
|
|
438
|
+
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = Ae.get(r);
|
|
434
439
|
if (i) return i;
|
|
435
440
|
let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
|
|
436
441
|
try {
|
|
@@ -444,12 +449,12 @@ function Te(e, t, n) {
|
|
|
444
449
|
timeZone: a
|
|
445
450
|
});
|
|
446
451
|
}
|
|
447
|
-
let s = typeof n == "number" ? n *
|
|
448
|
-
return i = (e) => o.format(new Date(e + s)),
|
|
452
|
+
let s = typeof n == "number" ? n * p : 0;
|
|
453
|
+
return i = (e) => o.format(new Date(e + s)), Ae.set(r, i), i;
|
|
449
454
|
}
|
|
450
455
|
//#endregion
|
|
451
456
|
//#region src/utils/time.ts
|
|
452
|
-
var
|
|
457
|
+
var Me = {
|
|
453
458
|
"1s": 1e3,
|
|
454
459
|
"5s": 5e3,
|
|
455
460
|
"15s": 15e3,
|
|
@@ -476,16 +481,16 @@ var Ee = {
|
|
|
476
481
|
"3M": 7776e6,
|
|
477
482
|
"6M": 15552e6,
|
|
478
483
|
"12M": 31536e6
|
|
479
|
-
},
|
|
484
|
+
}, b = {
|
|
480
485
|
s: 1e3,
|
|
481
486
|
m: 6e4,
|
|
482
487
|
h: 36e5,
|
|
483
488
|
d: 864e5,
|
|
484
489
|
w: 6048e5,
|
|
485
490
|
M: 2592e6
|
|
486
|
-
},
|
|
487
|
-
function
|
|
488
|
-
let t =
|
|
491
|
+
}, Ne = /^([1-9]\d*)([smhdwM])$/;
|
|
492
|
+
function x(e) {
|
|
493
|
+
let t = Ne.exec(e);
|
|
489
494
|
if (!t) return null;
|
|
490
495
|
let n = Number(t[1]);
|
|
491
496
|
return Number.isSafeInteger(n) ? {
|
|
@@ -493,24 +498,24 @@ function T(e) {
|
|
|
493
498
|
unit: t[2]
|
|
494
499
|
} : null;
|
|
495
500
|
}
|
|
496
|
-
var
|
|
497
|
-
function
|
|
501
|
+
var Pe = 1e6;
|
|
502
|
+
function Fe(e) {
|
|
498
503
|
let t = /^([1-9]\d*)T$/.exec(e);
|
|
499
504
|
if (!t) return null;
|
|
500
505
|
let n = Number(t[1]);
|
|
501
|
-
return Number.isSafeInteger(n) && n <=
|
|
506
|
+
return Number.isSafeInteger(n) && n <= Pe ? n : null;
|
|
502
507
|
}
|
|
503
|
-
function
|
|
504
|
-
return
|
|
508
|
+
function Ie(e) {
|
|
509
|
+
return x(e) !== null;
|
|
505
510
|
}
|
|
506
|
-
function
|
|
507
|
-
let t =
|
|
511
|
+
function S(e) {
|
|
512
|
+
let t = Me[e];
|
|
508
513
|
if (t !== void 0) return t;
|
|
509
|
-
let n =
|
|
510
|
-
return n ? n.count *
|
|
514
|
+
let n = x(e);
|
|
515
|
+
return n ? n.count * b[n.unit] : NaN;
|
|
511
516
|
}
|
|
512
|
-
function
|
|
513
|
-
let n = new Date(e), r =
|
|
517
|
+
function Le(e, t) {
|
|
518
|
+
let n = new Date(e), r = S(t);
|
|
514
519
|
return r >= 864e5 ? n.toLocaleDateString(void 0, {
|
|
515
520
|
month: "short",
|
|
516
521
|
day: "numeric"
|
|
@@ -523,11 +528,11 @@ function je(e, t) {
|
|
|
523
528
|
second: "2-digit"
|
|
524
529
|
});
|
|
525
530
|
}
|
|
526
|
-
function
|
|
527
|
-
let n =
|
|
531
|
+
function Re(e, t) {
|
|
532
|
+
let n = S(t);
|
|
528
533
|
return Math.floor(e / n) * n;
|
|
529
534
|
}
|
|
530
|
-
function
|
|
535
|
+
function ze(e, t) {
|
|
531
536
|
if (t === null) {
|
|
532
537
|
let t = new Date(e);
|
|
533
538
|
return {
|
|
@@ -538,7 +543,7 @@ function Ne(e, t) {
|
|
|
538
543
|
minutes: t.getMinutes()
|
|
539
544
|
};
|
|
540
545
|
}
|
|
541
|
-
let n = new Date(e +
|
|
546
|
+
let n = new Date(e + y(t, e) * 6e4);
|
|
542
547
|
return {
|
|
543
548
|
year: n.getUTCFullYear(),
|
|
544
549
|
month: n.getUTCMonth() + 1,
|
|
@@ -547,90 +552,90 @@ function Ne(e, t) {
|
|
|
547
552
|
minutes: n.getUTCMinutes()
|
|
548
553
|
};
|
|
549
554
|
}
|
|
550
|
-
function
|
|
555
|
+
function Be(e) {
|
|
551
556
|
return e.hours === 0 && e.minutes === 0;
|
|
552
557
|
}
|
|
553
|
-
var
|
|
554
|
-
function
|
|
558
|
+
var Ve = 20 * 36e5;
|
|
559
|
+
function He(e) {
|
|
555
560
|
let t = Math.min(e.length, 64);
|
|
556
561
|
if (t < 2) return;
|
|
557
|
-
let n = (e)
|
|
562
|
+
let n = ue(e), r = Infinity;
|
|
558
563
|
for (let i = 1; i < t; i++) {
|
|
559
|
-
let t = Math.abs(
|
|
564
|
+
let t = Math.abs(e[i].time - e[i - 1].time) * n;
|
|
560
565
|
t > 0 && t < r && (r = t);
|
|
561
566
|
}
|
|
562
|
-
return r === Infinity ? void 0 : r >=
|
|
567
|
+
return r === Infinity ? void 0 : r >= Ve;
|
|
563
568
|
}
|
|
564
|
-
function
|
|
565
|
-
let n =
|
|
569
|
+
function Ue(e, t = Date.now()) {
|
|
570
|
+
let n = y(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
|
|
566
571
|
return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
|
|
567
572
|
}
|
|
568
|
-
var
|
|
569
|
-
function
|
|
570
|
-
let { count: r, unit: i } =
|
|
573
|
+
var We = Date.UTC(1970, 0, 5);
|
|
574
|
+
function Ge(e, t, n = 1) {
|
|
575
|
+
let { count: r, unit: i } = x(t) ?? {
|
|
571
576
|
count: 1,
|
|
572
577
|
unit: "m"
|
|
573
578
|
};
|
|
574
579
|
if (i === "s" || i === "m" || i === "h" || i === "d") {
|
|
575
|
-
let t = r *
|
|
580
|
+
let t = r * b[i];
|
|
576
581
|
return Math.floor(e / t) * t;
|
|
577
582
|
}
|
|
578
583
|
let a = new Date(e);
|
|
579
584
|
if (i === "w") {
|
|
580
|
-
let e =
|
|
585
|
+
let e = b.d, t = (a.getUTCDay() - n + 7) % 7, i = Date.UTC(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate() - t);
|
|
581
586
|
if (r <= 1) return i;
|
|
582
|
-
let o = Math.floor((i -
|
|
583
|
-
return
|
|
587
|
+
let o = Math.floor((i - We) / (7 * e));
|
|
588
|
+
return We + Math.floor(o / r) * r * 7 * e;
|
|
584
589
|
}
|
|
585
590
|
let o = a.getUTCFullYear() * 12 + a.getUTCMonth(), s = Math.floor(o / r) * r;
|
|
586
591
|
return Date.UTC(Math.floor(s / 12), s % 12, 1);
|
|
587
592
|
}
|
|
588
593
|
//#endregion
|
|
589
594
|
//#region src/utils/precision.ts
|
|
590
|
-
var
|
|
591
|
-
function
|
|
592
|
-
let n = `${e}|${t}`, r =
|
|
593
|
-
return r || (
|
|
595
|
+
var Ke = 64, C = /* @__PURE__ */ new Map();
|
|
596
|
+
function qe(e, t) {
|
|
597
|
+
let n = `${e}|${t}`, r = C.get(n);
|
|
598
|
+
return r || (C.size >= Ke && C.clear(), r = new Intl.NumberFormat(e, {
|
|
594
599
|
minimumFractionDigits: t,
|
|
595
600
|
maximumFractionDigits: t
|
|
596
|
-
}),
|
|
601
|
+
}), C.set(n, r)), r;
|
|
597
602
|
}
|
|
598
|
-
function
|
|
599
|
-
return
|
|
603
|
+
function w(e, t = 2, n = "en-US") {
|
|
604
|
+
return qe(n, t).format(e);
|
|
600
605
|
}
|
|
601
|
-
function
|
|
606
|
+
function Je(e, t) {
|
|
602
607
|
if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
|
|
603
|
-
let n =
|
|
608
|
+
let n = ce(e, t, 8);
|
|
604
609
|
return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
|
|
605
610
|
}
|
|
606
|
-
function
|
|
611
|
+
function Ye(e, t, n, r = 2, i = "en-US") {
|
|
607
612
|
if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
|
|
608
613
|
if (t === "percentage") {
|
|
609
614
|
let t = (e / n - 1) * 100;
|
|
610
615
|
return `${t > 0 ? "+" : ""}${t.toFixed(2)}%`;
|
|
611
616
|
}
|
|
612
|
-
return
|
|
617
|
+
return w(e / n * 100, 2, i);
|
|
613
618
|
}
|
|
614
|
-
return
|
|
619
|
+
return w(e, r, i);
|
|
615
620
|
}
|
|
616
|
-
function
|
|
621
|
+
function Xe(e, t, n = 1) {
|
|
617
622
|
let r = Number.isInteger(n) && n > 1 ? n : 1;
|
|
618
623
|
if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
|
|
619
624
|
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)) : "";
|
|
620
625
|
return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
|
|
621
626
|
}
|
|
622
|
-
function
|
|
627
|
+
function Ze(e) {
|
|
623
628
|
if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
|
|
624
629
|
let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
|
|
625
630
|
return 1 / (e.denominator * t);
|
|
626
631
|
}
|
|
627
|
-
function
|
|
628
|
-
return e ? typeof e == "function" ? e :
|
|
632
|
+
function Qe(e) {
|
|
633
|
+
return e ? typeof e == "function" ? e : Ze(e) === null ? null : (t) => Xe(t, e.denominator, e.subDenominator) : null;
|
|
629
634
|
}
|
|
630
|
-
function
|
|
635
|
+
function $e(e) {
|
|
631
636
|
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);
|
|
632
637
|
}
|
|
633
|
-
function
|
|
638
|
+
function et(e) {
|
|
634
639
|
let t = 0;
|
|
635
640
|
for (let n of e) {
|
|
636
641
|
let e = n.toString(), r = e.indexOf(".");
|
|
@@ -640,7 +645,7 @@ function Ye(e) {
|
|
|
640
645
|
}
|
|
641
646
|
//#endregion
|
|
642
647
|
//#region src/utils/priceSource.ts
|
|
643
|
-
var
|
|
648
|
+
var tt = [
|
|
644
649
|
"close",
|
|
645
650
|
"open",
|
|
646
651
|
"high",
|
|
@@ -650,10 +655,10 @@ var Xe = [
|
|
|
650
655
|
"ohlc4",
|
|
651
656
|
"hlcc4"
|
|
652
657
|
];
|
|
653
|
-
function
|
|
654
|
-
return typeof e == "string" &&
|
|
658
|
+
function nt(e) {
|
|
659
|
+
return typeof e == "string" && tt.includes(e);
|
|
655
660
|
}
|
|
656
|
-
function
|
|
661
|
+
function rt(e, t) {
|
|
657
662
|
switch (t) {
|
|
658
663
|
case "open": return e.open;
|
|
659
664
|
case "high": return e.high;
|
|
@@ -665,13 +670,13 @@ function Qe(e, t) {
|
|
|
665
670
|
default: return e.close;
|
|
666
671
|
}
|
|
667
672
|
}
|
|
668
|
-
var
|
|
669
|
-
function
|
|
673
|
+
var it = /^ind:([^:]+):(.+)$/;
|
|
674
|
+
function at(e, t) {
|
|
670
675
|
return `ind:${e}:${t}`;
|
|
671
676
|
}
|
|
672
|
-
function
|
|
677
|
+
function ot(e) {
|
|
673
678
|
if (typeof e != "string") return null;
|
|
674
|
-
let t =
|
|
679
|
+
let t = it.exec(e);
|
|
675
680
|
return t ? {
|
|
676
681
|
instanceId: t[1],
|
|
677
682
|
key: t[2]
|
|
@@ -679,11 +684,11 @@ function tt(e) {
|
|
|
679
684
|
}
|
|
680
685
|
//#endregion
|
|
681
686
|
//#region src/utils/resample.ts
|
|
682
|
-
var
|
|
683
|
-
function
|
|
687
|
+
var st = 864e5;
|
|
688
|
+
function ct(e, t, n = 1) {
|
|
684
689
|
let r = [], i = null;
|
|
685
690
|
for (let a of e) {
|
|
686
|
-
let e =
|
|
691
|
+
let e = Ge(a.time, t, n);
|
|
687
692
|
i === null || e !== i.time ? (i = {
|
|
688
693
|
time: e,
|
|
689
694
|
open: a.open,
|
|
@@ -695,37 +700,37 @@ function rt(e, t, n = 1) {
|
|
|
695
700
|
}
|
|
696
701
|
return r;
|
|
697
702
|
}
|
|
698
|
-
var
|
|
699
|
-
function
|
|
700
|
-
let n =
|
|
703
|
+
var T = (e) => e === "s" || e === "m" || e === "h" || e === "d";
|
|
704
|
+
function lt(e, t) {
|
|
705
|
+
let n = x(e), r = x(t);
|
|
701
706
|
if (!n || !r) return !1;
|
|
702
|
-
let i =
|
|
703
|
-
return n.unit === "d" && n.count > 1 ? !1 :
|
|
707
|
+
let i = S(e);
|
|
708
|
+
return n.unit === "d" && n.count > 1 ? !1 : T(r.unit) ? T(n.unit) && S(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : T(n.unit) && st % i === 0;
|
|
704
709
|
}
|
|
705
|
-
function
|
|
710
|
+
function ut(e, t) {
|
|
706
711
|
let n = null, r = 0;
|
|
707
712
|
for (let i of t) {
|
|
708
|
-
if (!
|
|
709
|
-
let t =
|
|
713
|
+
if (!lt(i, e)) continue;
|
|
714
|
+
let t = S(i);
|
|
710
715
|
t > r && (n = i, r = t);
|
|
711
716
|
}
|
|
712
717
|
return n;
|
|
713
718
|
}
|
|
714
719
|
//#endregion
|
|
715
720
|
//#region src/utils/symbols.ts
|
|
716
|
-
function
|
|
721
|
+
function dt(e, t) {
|
|
717
722
|
if (!e) return 0;
|
|
718
723
|
if (e === t) return 1e3;
|
|
719
724
|
if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
|
|
720
725
|
let n = e.indexOf(t);
|
|
721
726
|
return n >= 0 ? 300 - Math.min(100, n) : 0;
|
|
722
727
|
}
|
|
723
|
-
function
|
|
728
|
+
function ft(e, t, n = 50, r) {
|
|
724
729
|
let i = t.trim().toUpperCase();
|
|
725
730
|
if (!i) return e.slice(0, n);
|
|
726
731
|
let a = [];
|
|
727
732
|
for (let t of e) {
|
|
728
|
-
let e = Math.max(
|
|
733
|
+
let e = Math.max(dt(t.symbol.toUpperCase(), i), dt((t.description ?? "").toUpperCase(), i) * .8);
|
|
729
734
|
e > 0 && a.push({
|
|
730
735
|
info: t,
|
|
731
736
|
score: e + (r?.(t) ?? 0)
|
|
@@ -733,7 +738,7 @@ function ct(e, t, n = 50, r) {
|
|
|
733
738
|
}
|
|
734
739
|
return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
|
|
735
740
|
}
|
|
736
|
-
function
|
|
741
|
+
function pt(e) {
|
|
737
742
|
let t = typeof e == "number" ? e : Number(e);
|
|
738
743
|
if (!Number.isFinite(t) || t <= 0) return 0;
|
|
739
744
|
for (let e = 0; e <= 12; e++) {
|
|
@@ -742,7 +747,7 @@ function lt(e) {
|
|
|
742
747
|
}
|
|
743
748
|
return 12;
|
|
744
749
|
}
|
|
745
|
-
function
|
|
750
|
+
function E(e) {
|
|
746
751
|
let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
|
|
747
752
|
if (!t) return null;
|
|
748
753
|
let n = Number(t[1]), r = Number(t[2]);
|
|
@@ -750,26 +755,26 @@ function ut(e) {
|
|
|
750
755
|
}
|
|
751
756
|
//#endregion
|
|
752
757
|
//#region src/utils/marketStatus.ts
|
|
753
|
-
var
|
|
754
|
-
function
|
|
758
|
+
var D = 864e5, O = 6e4, mt = 8;
|
|
759
|
+
function ht(e, t) {
|
|
755
760
|
let n = e?.timezone, r = (e?.sessions ?? []).flatMap((e) => {
|
|
756
|
-
let t =
|
|
761
|
+
let t = E(e.start), n = E(e.end);
|
|
757
762
|
return t === null || n === null || t === n ? [] : [{
|
|
758
763
|
start: t,
|
|
759
764
|
end: n,
|
|
760
765
|
days: Array.isArray(e.days) ? e.days : null
|
|
761
766
|
}];
|
|
762
767
|
});
|
|
763
|
-
if (!n || !
|
|
768
|
+
if (!n || !Ee(n) || r.length === 0 || !Number.isFinite(t)) return {
|
|
764
769
|
state: "always",
|
|
765
770
|
next: null
|
|
766
771
|
};
|
|
767
|
-
let i =
|
|
768
|
-
for (let e = -1; e <=
|
|
769
|
-
let t = a + e *
|
|
772
|
+
let i = v(n, t) * O, a = Math.floor((t + i) / D) * D, o = (e) => e - v(n, e - v(n, e - i) * O) * O, s = [];
|
|
773
|
+
for (let e = -1; e <= mt; e++) {
|
|
774
|
+
let t = a + e * D, n = (Math.floor(t / D) + 4) % 7;
|
|
770
775
|
for (let e of r) {
|
|
771
776
|
if (e.days && !e.days.includes(n)) continue;
|
|
772
|
-
let r = t + e.start *
|
|
777
|
+
let r = t + e.start * O, i = (e.end > e.start ? t : t + D) + e.end * O;
|
|
773
778
|
s.push([o(r), o(i)]);
|
|
774
779
|
}
|
|
775
780
|
}
|
|
@@ -792,15 +797,15 @@ function ft(e, t) {
|
|
|
792
797
|
}
|
|
793
798
|
//#endregion
|
|
794
799
|
//#region src/utils/drawingOptions.ts
|
|
795
|
-
var
|
|
796
|
-
function
|
|
800
|
+
var gt = 48, _t = 2e3, vt = 1e4;
|
|
801
|
+
function yt(e) {
|
|
797
802
|
if (!Array.isArray(e)) return;
|
|
798
803
|
let t = [];
|
|
799
804
|
for (let n of e) {
|
|
800
|
-
if (t.length >=
|
|
805
|
+
if (t.length >= gt) break;
|
|
801
806
|
if (typeof n != "object" || !n) continue;
|
|
802
807
|
let { value: e, visible: r, color: i } = n;
|
|
803
|
-
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) >
|
|
808
|
+
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > vt || r !== void 0 && typeof r != "boolean") continue;
|
|
804
809
|
let a = {
|
|
805
810
|
value: e,
|
|
806
811
|
visible: r ?? !0
|
|
@@ -809,109 +814,109 @@ function gt(e) {
|
|
|
809
814
|
}
|
|
810
815
|
return t;
|
|
811
816
|
}
|
|
812
|
-
function
|
|
817
|
+
function bt(e, t) {
|
|
813
818
|
switch (e.kind) {
|
|
814
819
|
case "boolean": return typeof t == "boolean" ? t : void 0;
|
|
815
820
|
case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
|
|
816
821
|
case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
|
|
817
|
-
case "levels": return
|
|
818
|
-
case "text": return typeof t == "string" ? t.slice(0,
|
|
822
|
+
case "levels": return yt(t);
|
|
823
|
+
case "text": return typeof t == "string" ? t.slice(0, _t) : void 0;
|
|
819
824
|
}
|
|
820
825
|
}
|
|
821
|
-
function
|
|
826
|
+
function xt(e, t) {
|
|
822
827
|
if (!e || typeof t != "object" || !t) return {};
|
|
823
828
|
let n = {};
|
|
824
829
|
for (let [r, i] of Object.entries(t)) {
|
|
825
830
|
let t = e[r];
|
|
826
831
|
if (!t) continue;
|
|
827
|
-
let a =
|
|
832
|
+
let a = bt(t, i);
|
|
828
833
|
a !== void 0 && (n[r] = a);
|
|
829
834
|
}
|
|
830
835
|
return n;
|
|
831
836
|
}
|
|
832
|
-
function
|
|
837
|
+
function St(e) {
|
|
833
838
|
return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
|
|
834
839
|
}
|
|
835
|
-
function
|
|
840
|
+
function Ct(e, t, n) {
|
|
836
841
|
let r = e?.[n];
|
|
837
|
-
return r ?
|
|
842
|
+
return r ? St((t && n in t ? bt(r, t[n]) : void 0) ?? r.default) : t?.[n];
|
|
838
843
|
}
|
|
839
|
-
function
|
|
844
|
+
function wt(e, t) {
|
|
840
845
|
let n = {};
|
|
841
|
-
for (let r of Object.keys(e ?? {})) n[r] =
|
|
846
|
+
for (let r of Object.keys(e ?? {})) n[r] = Ct(e, t, r);
|
|
842
847
|
return n;
|
|
843
848
|
}
|
|
844
849
|
//#endregion
|
|
845
850
|
//#region src/utils/drawingStyle.ts
|
|
846
|
-
var
|
|
851
|
+
var Tt = [
|
|
847
852
|
"solid",
|
|
848
853
|
"dashed",
|
|
849
854
|
"dotted"
|
|
850
|
-
],
|
|
851
|
-
function
|
|
855
|
+
], Et = 64, Dt = 2e3, Ot = 20, kt = 200;
|
|
856
|
+
function k(e, t, n) {
|
|
852
857
|
return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
|
|
853
858
|
}
|
|
854
|
-
function
|
|
855
|
-
return typeof e == "string" && e.length > 0 && e.length <=
|
|
859
|
+
function At(e) {
|
|
860
|
+
return typeof e == "string" && e.length > 0 && e.length <= Et ? e : void 0;
|
|
856
861
|
}
|
|
857
|
-
function
|
|
862
|
+
function jt(e) {
|
|
858
863
|
if (typeof e != "object" || !e) return {};
|
|
859
|
-
let t = e, n = {}, r =
|
|
864
|
+
let t = e, n = {}, r = At(t.color);
|
|
860
865
|
r !== void 0 && (n.color = r);
|
|
861
|
-
let i =
|
|
862
|
-
i !== void 0 && (n.lineWidth = i),
|
|
863
|
-
let a =
|
|
866
|
+
let i = k(t.lineWidth, .5, Ot);
|
|
867
|
+
i !== void 0 && (n.lineWidth = i), Tt.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
|
|
868
|
+
let a = At(t.fillColor);
|
|
864
869
|
a !== void 0 && (n.fillColor = a);
|
|
865
|
-
let o =
|
|
870
|
+
let o = k(t.fillOpacity, 0, 1);
|
|
866
871
|
o !== void 0 && (n.fillOpacity = o);
|
|
867
|
-
let s =
|
|
868
|
-
return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0,
|
|
872
|
+
let s = k(t.fontSize, 6, kt);
|
|
873
|
+
return s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, Dt)), n;
|
|
869
874
|
}
|
|
870
875
|
//#endregion
|
|
871
876
|
//#region src/utils/chartTypeOptions.ts
|
|
872
|
-
var
|
|
873
|
-
function
|
|
874
|
-
if (!
|
|
877
|
+
var A = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, j = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, M = (e) => typeof e == "object" && !!e && !Array.isArray(e);
|
|
878
|
+
function Mt(e) {
|
|
879
|
+
if (!M(e)) return {};
|
|
875
880
|
let t = {};
|
|
876
|
-
if (
|
|
881
|
+
if (M(e.renko)) {
|
|
877
882
|
let { boxSize: n, atrPeriod: r } = e.renko;
|
|
878
883
|
t.renko = {
|
|
879
|
-
...
|
|
880
|
-
...
|
|
884
|
+
...A(n) || n === "atr" ? { boxSize: n } : {},
|
|
885
|
+
...j(r, 1, 500) ? { atrPeriod: r } : {}
|
|
881
886
|
};
|
|
882
887
|
}
|
|
883
|
-
if (
|
|
888
|
+
if (M(e.lineBreak)) {
|
|
884
889
|
let { lines: n } = e.lineBreak;
|
|
885
|
-
t.lineBreak =
|
|
890
|
+
t.lineBreak = j(n, 1, 10) ? { lines: n } : {};
|
|
886
891
|
}
|
|
887
|
-
if (
|
|
892
|
+
if (M(e.kagi)) {
|
|
888
893
|
let { reversal: n, reversalType: r } = e.kagi;
|
|
889
894
|
t.kagi = {
|
|
890
|
-
...
|
|
895
|
+
...A(n) ? { reversal: n } : {},
|
|
891
896
|
...r === "percent" || r === "price" ? { reversalType: r } : {}
|
|
892
897
|
};
|
|
893
898
|
}
|
|
894
|
-
if (
|
|
899
|
+
if (M(e.pointAndFigure)) {
|
|
895
900
|
let { boxSize: n, reversal: r } = e.pointAndFigure;
|
|
896
901
|
t.pointAndFigure = {
|
|
897
|
-
...
|
|
898
|
-
...
|
|
902
|
+
...A(n) || n === "auto" ? { boxSize: n } : {},
|
|
903
|
+
...j(r, 1, 10) ? { reversal: r } : {}
|
|
899
904
|
};
|
|
900
905
|
}
|
|
901
|
-
if (
|
|
906
|
+
if (M(e.rangeBars)) {
|
|
902
907
|
let { range: n } = e.rangeBars;
|
|
903
|
-
t.rangeBars =
|
|
908
|
+
t.rangeBars = A(n) || n === "auto" ? { range: n } : {};
|
|
904
909
|
}
|
|
905
910
|
return t;
|
|
906
911
|
}
|
|
907
912
|
//#endregion
|
|
908
913
|
//#region src/constants/themes.ts
|
|
909
|
-
var
|
|
910
|
-
family:
|
|
914
|
+
var Nt = "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif", Pt = {
|
|
915
|
+
family: Nt,
|
|
911
916
|
sizeSmall: 10,
|
|
912
917
|
sizeMedium: 12,
|
|
913
918
|
sizeLarge: 14
|
|
914
|
-
},
|
|
919
|
+
}, N = {
|
|
915
920
|
amber: "#f2a93b",
|
|
916
921
|
up: "#1fa874",
|
|
917
922
|
down: "#e8505b",
|
|
@@ -922,37 +927,37 @@ var At = "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif",
|
|
|
922
927
|
rose: "#e25592",
|
|
923
928
|
neutral: "#7d8696",
|
|
924
929
|
ink: "#0c1016"
|
|
925
|
-
},
|
|
926
|
-
function
|
|
927
|
-
return
|
|
928
|
-
}
|
|
929
|
-
var
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
],
|
|
930
|
+
}, Ft = .22;
|
|
931
|
+
function P(e) {
|
|
932
|
+
return ve(e, Ft);
|
|
933
|
+
}
|
|
934
|
+
var F = "#2eb88a", I = "#e85a67", It = [
|
|
935
|
+
N.blue,
|
|
936
|
+
N.ochre,
|
|
937
|
+
N.violet,
|
|
938
|
+
N.cyan,
|
|
939
|
+
N.rose
|
|
940
|
+
], L = {
|
|
936
941
|
name: "dark",
|
|
937
|
-
background:
|
|
942
|
+
background: N.ink,
|
|
938
943
|
text: "#d9dde4",
|
|
939
944
|
textSecondary: "#7d8696",
|
|
940
945
|
grid: "#161b23",
|
|
941
946
|
crosshair: "#8a93a3",
|
|
942
|
-
candleUp:
|
|
943
|
-
candleDown:
|
|
944
|
-
candleUpWick:
|
|
945
|
-
candleDownWick:
|
|
946
|
-
lineColor:
|
|
947
|
+
candleUp: F,
|
|
948
|
+
candleDown: I,
|
|
949
|
+
candleUpWick: F,
|
|
950
|
+
candleDownWick: I,
|
|
951
|
+
lineColor: N.amber,
|
|
947
952
|
areaTopColor: "rgba(242, 169, 59, 0.32)",
|
|
948
953
|
areaBottomColor: "rgba(242, 169, 59, 0.0)",
|
|
949
|
-
volumeUp: F
|
|
950
|
-
volumeDown:
|
|
954
|
+
volumeUp: P(F),
|
|
955
|
+
volumeDown: P(I),
|
|
951
956
|
axisLine: "#1f2630",
|
|
952
957
|
axisLabel: "#9aa3b2",
|
|
953
958
|
axisLabelBackground: "#1f2630",
|
|
954
|
-
font:
|
|
955
|
-
},
|
|
959
|
+
font: Pt
|
|
960
|
+
}, R = {
|
|
956
961
|
name: "light",
|
|
957
962
|
background: "#ffffff",
|
|
958
963
|
text: "#0f131a",
|
|
@@ -966,13 +971,13 @@ var I = "#2eb88a", L = "#e85a67", Nt = [
|
|
|
966
971
|
lineColor: "#c77a0a",
|
|
967
972
|
areaTopColor: "rgba(199, 122, 10, 0.24)",
|
|
968
973
|
areaBottomColor: "rgba(199, 122, 10, 0.0)",
|
|
969
|
-
volumeUp:
|
|
970
|
-
volumeDown:
|
|
974
|
+
volumeUp: P("#16a36a"),
|
|
975
|
+
volumeDown: P("#d9414f"),
|
|
971
976
|
axisLine: "#dde1e7",
|
|
972
977
|
axisLabel: "#5b6472",
|
|
973
978
|
axisLabelBackground: "#eef0f3",
|
|
974
|
-
font:
|
|
975
|
-
},
|
|
979
|
+
font: Pt
|
|
980
|
+
}, z = {
|
|
976
981
|
name: "terminal",
|
|
977
982
|
background: "#0E0E0E",
|
|
978
983
|
text: "#C0C0C0",
|
|
@@ -997,18 +1002,18 @@ var I = "#2eb88a", L = "#e85a67", Nt = [
|
|
|
997
1002
|
sizeMedium: 12,
|
|
998
1003
|
sizeLarge: 14
|
|
999
1004
|
}
|
|
1000
|
-
},
|
|
1005
|
+
}, Lt = new Set([
|
|
1006
|
+
L.volumeUp,
|
|
1007
|
+
L.volumeDown,
|
|
1001
1008
|
R.volumeUp,
|
|
1002
1009
|
R.volumeDown,
|
|
1003
1010
|
z.volumeUp,
|
|
1004
|
-
z.volumeDown
|
|
1005
|
-
B.volumeUp,
|
|
1006
|
-
B.volumeDown
|
|
1011
|
+
z.volumeDown
|
|
1007
1012
|
]);
|
|
1008
|
-
function
|
|
1013
|
+
function B(e) {
|
|
1009
1014
|
let t = (e, t) => {
|
|
1010
|
-
if (!
|
|
1011
|
-
let n =
|
|
1015
|
+
if (!Lt.has(e)) return e;
|
|
1016
|
+
let n = P(t);
|
|
1012
1017
|
return n === t ? e : n;
|
|
1013
1018
|
};
|
|
1014
1019
|
return {
|
|
@@ -1018,67 +1023,67 @@ function V(e) {
|
|
|
1018
1023
|
}
|
|
1019
1024
|
//#endregion
|
|
1020
1025
|
//#region src/utils/chartStyle.ts
|
|
1021
|
-
var
|
|
1026
|
+
var Rt = [
|
|
1022
1027
|
"solid",
|
|
1023
1028
|
"dashed",
|
|
1024
1029
|
"dotted"
|
|
1025
|
-
],
|
|
1030
|
+
], zt = 20, Bt = 64, Vt = 2, Ht = [
|
|
1026
1031
|
/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
|
|
1027
1032
|
/^[a-z]{3,30}$/i,
|
|
1028
1033
|
/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
|
|
1029
1034
|
];
|
|
1030
|
-
function
|
|
1031
|
-
return typeof e == "string" && e.length <=
|
|
1035
|
+
function V(e) {
|
|
1036
|
+
return typeof e == "string" && e.length <= Bt && Ht.some((t) => t.test(e.trim()));
|
|
1032
1037
|
}
|
|
1033
|
-
function
|
|
1038
|
+
function Ut(e, t) {
|
|
1034
1039
|
switch (e) {
|
|
1035
|
-
case "color": return
|
|
1036
|
-
case "lineStyle": return
|
|
1037
|
-
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <=
|
|
1040
|
+
case "color": return V(t);
|
|
1041
|
+
case "lineStyle": return Rt.includes(t);
|
|
1042
|
+
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= zt;
|
|
1038
1043
|
case "boolean": return typeof t == "boolean";
|
|
1039
1044
|
}
|
|
1040
1045
|
}
|
|
1041
|
-
function
|
|
1046
|
+
function Wt(e) {
|
|
1042
1047
|
return Object.prototype.hasOwnProperty.call(t, e);
|
|
1043
1048
|
}
|
|
1044
|
-
function
|
|
1049
|
+
function Gt(e) {
|
|
1045
1050
|
let n = {}, r = [];
|
|
1046
1051
|
if (typeof e != "object" || !e || Array.isArray(e)) return {
|
|
1047
1052
|
overrides: {},
|
|
1048
1053
|
rejected: r
|
|
1049
1054
|
};
|
|
1050
|
-
for (let [i, a] of Object.entries(e))
|
|
1055
|
+
for (let [i, a] of Object.entries(e)) Wt(i) ? a === null ? n[i] = null : Ut(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
|
|
1051
1056
|
return {
|
|
1052
1057
|
overrides: n,
|
|
1053
1058
|
rejected: r
|
|
1054
1059
|
};
|
|
1055
1060
|
}
|
|
1056
|
-
function
|
|
1061
|
+
function Kt(e) {
|
|
1057
1062
|
if (typeof e != "object" || !e || Array.isArray(e)) return null;
|
|
1058
1063
|
let { background: t, separator: n } = e, r = {
|
|
1059
|
-
...
|
|
1060
|
-
...
|
|
1064
|
+
...V(t) ? { background: t } : {},
|
|
1065
|
+
...V(n) ? { separator: n } : {}
|
|
1061
1066
|
};
|
|
1062
1067
|
return Object.keys(r).length > 0 ? r : null;
|
|
1063
1068
|
}
|
|
1064
|
-
var
|
|
1065
|
-
function
|
|
1069
|
+
var qt = /^[A-Za-z0-9_]{1,32}$/;
|
|
1070
|
+
function Jt(e) {
|
|
1066
1071
|
if (typeof e != "object" || !e || Array.isArray(e)) return;
|
|
1067
1072
|
let t = {};
|
|
1068
1073
|
for (let [n, r] of Object.entries(e)) {
|
|
1069
|
-
if (!
|
|
1074
|
+
if (!qt.test(n) || typeof r != "object" || !r) continue;
|
|
1070
1075
|
let { lineStyle: e, visible: i } = r, a = {
|
|
1071
|
-
...
|
|
1076
|
+
...Rt.includes(e) ? { lineStyle: e } : {},
|
|
1072
1077
|
...typeof i == "boolean" ? { visible: i } : {}
|
|
1073
1078
|
};
|
|
1074
1079
|
Object.keys(a).length > 0 && (t[n] = a);
|
|
1075
1080
|
}
|
|
1076
1081
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
1077
1082
|
}
|
|
1078
|
-
function
|
|
1083
|
+
function Yt(e, t, n = 1) {
|
|
1079
1084
|
return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
|
|
1080
1085
|
}
|
|
1081
|
-
function
|
|
1086
|
+
function Xt(e, t, n) {
|
|
1082
1087
|
let r = (e) => t(`series.${n}.${e}`), i = r("upColor") ?? t("series.candlestick.upColor"), a = r("downColor") ?? t("series.candlestick.downColor"), o = i ?? e.candleUp, s = a ?? e.candleDown;
|
|
1083
1088
|
return {
|
|
1084
1089
|
up: o,
|
|
@@ -1086,12 +1091,12 @@ function qt(e, t, n) {
|
|
|
1086
1091
|
wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
|
|
1087
1092
|
wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
|
|
1088
1093
|
line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
|
|
1089
|
-
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ??
|
|
1094
|
+
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? Vt,
|
|
1090
1095
|
top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
|
|
1091
1096
|
bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
|
|
1092
1097
|
};
|
|
1093
1098
|
}
|
|
1094
|
-
function
|
|
1099
|
+
function H(e, t, n) {
|
|
1095
1100
|
return {
|
|
1096
1101
|
visible: e(`${t}.visible`) ?? n.visible,
|
|
1097
1102
|
color: e(`${t}.color`) ?? n.color,
|
|
@@ -1099,21 +1104,21 @@ function U(e, t, n) {
|
|
|
1099
1104
|
width: e(`${t}.width`) ?? n.width
|
|
1100
1105
|
};
|
|
1101
1106
|
}
|
|
1102
|
-
function
|
|
1103
|
-
let { style: r, ...i } = e, a = n, o = (e) => a[e], s =
|
|
1107
|
+
function Zt(e, t, n) {
|
|
1108
|
+
let { style: r, ...i } = e, a = n, o = (e) => a[e], s = Xt(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
|
|
1104
1109
|
panes: {
|
|
1105
1110
|
background: l("panes.background", c),
|
|
1106
1111
|
separator: l("panes.separatorColor", i.axisLine),
|
|
1107
1112
|
title: l("panes.titleColor", i.textSecondary)
|
|
1108
1113
|
},
|
|
1109
1114
|
grid: {
|
|
1110
|
-
horizontal:
|
|
1115
|
+
horizontal: H(o, "grid.horizontal", {
|
|
1111
1116
|
visible: !0,
|
|
1112
1117
|
color: i.grid,
|
|
1113
1118
|
style: "solid",
|
|
1114
1119
|
width: 1
|
|
1115
1120
|
}),
|
|
1116
|
-
vertical:
|
|
1121
|
+
vertical: H(o, "grid.vertical", {
|
|
1117
1122
|
visible: !0,
|
|
1118
1123
|
color: i.grid,
|
|
1119
1124
|
style: "solid",
|
|
@@ -1121,13 +1126,13 @@ function Jt(e, t, n) {
|
|
|
1121
1126
|
})
|
|
1122
1127
|
},
|
|
1123
1128
|
crosshair: {
|
|
1124
|
-
horizontal:
|
|
1129
|
+
horizontal: H(o, "crosshair.horizontal", {
|
|
1125
1130
|
visible: !0,
|
|
1126
1131
|
color: i.crosshair,
|
|
1127
1132
|
style: "dashed",
|
|
1128
1133
|
width: 1
|
|
1129
1134
|
}),
|
|
1130
|
-
vertical:
|
|
1135
|
+
vertical: H(o, "crosshair.vertical", {
|
|
1131
1136
|
visible: !0,
|
|
1132
1137
|
color: i.crosshair,
|
|
1133
1138
|
style: "dashed",
|
|
@@ -1199,7 +1204,7 @@ function Jt(e, t, n) {
|
|
|
1199
1204
|
style: d
|
|
1200
1205
|
};
|
|
1201
1206
|
}
|
|
1202
|
-
var
|
|
1207
|
+
var Qt = {
|
|
1203
1208
|
"background.color": (e) => e.background,
|
|
1204
1209
|
"panes.background": (e, t) => t.panes.background,
|
|
1205
1210
|
"panes.separatorColor": (e, t) => t.panes.separator,
|
|
@@ -1218,8 +1223,8 @@ var Yt = {
|
|
|
1218
1223
|
"lastPrice.downColor": (e, t) => t.lastPrice.down,
|
|
1219
1224
|
"lastPrice.style": (e, t) => t.lastPrice.style,
|
|
1220
1225
|
"lastPrice.width": (e, t) => t.lastPrice.width,
|
|
1221
|
-
"volume.upColor": (e) =>
|
|
1222
|
-
"volume.downColor": (e) =>
|
|
1226
|
+
"volume.upColor": (e) => B(e).up,
|
|
1227
|
+
"volume.downColor": (e) => B(e).down,
|
|
1223
1228
|
"sessionBreaks.color": (e, t) => t.sessionBreaks.color,
|
|
1224
1229
|
"sessionBreaks.style": (e, t) => t.sessionBreaks.style,
|
|
1225
1230
|
"sessionBreaks.width": (e, t) => t.sessionBreaks.width,
|
|
@@ -1236,16 +1241,16 @@ var Yt = {
|
|
|
1236
1241
|
"tradeZones.lossColor": (e, t) => t.tradeZones.loss,
|
|
1237
1242
|
"tradeZones.activeColor": (e, t) => t.tradeZones.active,
|
|
1238
1243
|
"drawings.handleColor": (e, t) => t.drawings.handle
|
|
1239
|
-
},
|
|
1244
|
+
}, $t = {
|
|
1240
1245
|
visible: "visible",
|
|
1241
1246
|
color: "color",
|
|
1242
1247
|
style: "style",
|
|
1243
1248
|
width: "width"
|
|
1244
1249
|
};
|
|
1245
|
-
function
|
|
1250
|
+
function en(e, t, n, r = "candlestick") {
|
|
1246
1251
|
let i = n.split(".");
|
|
1247
1252
|
if (i[0] === "series") {
|
|
1248
|
-
let n =
|
|
1253
|
+
let n = Xt(e, (e) => t[e], i[1]);
|
|
1249
1254
|
switch (i[2]) {
|
|
1250
1255
|
case "upColor": return n.up;
|
|
1251
1256
|
case "downColor": return n.down;
|
|
@@ -1258,12 +1263,12 @@ function Zt(e, t, n, r = "candlestick") {
|
|
|
1258
1263
|
case "bottomColor": return n.bottom;
|
|
1259
1264
|
}
|
|
1260
1265
|
}
|
|
1261
|
-
let a =
|
|
1262
|
-
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][
|
|
1266
|
+
let a = Zt(e, r, t), o = a.style;
|
|
1267
|
+
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][$t[i[2]]] : Qt[n]?.(a, o) ?? null;
|
|
1263
1268
|
}
|
|
1264
1269
|
//#endregion
|
|
1265
1270
|
//#region src/constants/defaults.ts
|
|
1266
|
-
var
|
|
1271
|
+
var tn = {
|
|
1267
1272
|
autoScale: !0,
|
|
1268
1273
|
rightMargin: 5,
|
|
1269
1274
|
minBarSpacing: 2,
|
|
@@ -1274,7 +1279,7 @@ var Qt = {
|
|
|
1274
1279
|
vLineStyle: "solid"
|
|
1275
1280
|
},
|
|
1276
1281
|
crosshair: { mode: "magnet" }
|
|
1277
|
-
},
|
|
1282
|
+
}, nn = [
|
|
1278
1283
|
"1s",
|
|
1279
1284
|
"1m",
|
|
1280
1285
|
"3m",
|
|
@@ -1291,7 +1296,7 @@ var Qt = {
|
|
|
1291
1296
|
"3d",
|
|
1292
1297
|
"1w",
|
|
1293
1298
|
"1M"
|
|
1294
|
-
],
|
|
1299
|
+
], rn = [
|
|
1295
1300
|
"1m",
|
|
1296
1301
|
"5m",
|
|
1297
1302
|
"15m",
|
|
@@ -1305,7 +1310,7 @@ var Qt = {
|
|
|
1305
1310
|
"3M",
|
|
1306
1311
|
"6M",
|
|
1307
1312
|
"12M"
|
|
1308
|
-
],
|
|
1313
|
+
], an = [
|
|
1309
1314
|
"1m",
|
|
1310
1315
|
"5m",
|
|
1311
1316
|
"15m",
|
|
@@ -1315,7 +1320,7 @@ var Qt = {
|
|
|
1315
1320
|
"1d",
|
|
1316
1321
|
"1w",
|
|
1317
1322
|
"1M"
|
|
1318
|
-
],
|
|
1323
|
+
], on = [
|
|
1319
1324
|
"1m",
|
|
1320
1325
|
"5m",
|
|
1321
1326
|
"15m",
|
|
@@ -1323,7 +1328,7 @@ var Qt = {
|
|
|
1323
1328
|
"4h",
|
|
1324
1329
|
"1d",
|
|
1325
1330
|
"1w"
|
|
1326
|
-
],
|
|
1331
|
+
], sn = 8, cn = 2, ln = 70, un = 30, dn = 60, fn = 120, U = {
|
|
1327
1332
|
candlestick: "Candlestick",
|
|
1328
1333
|
line: "Line",
|
|
1329
1334
|
area: "Area",
|
|
@@ -1426,7 +1431,7 @@ var Qt = {
|
|
|
1426
1431
|
error: "Error",
|
|
1427
1432
|
numberDecimalSeparator: ".",
|
|
1428
1433
|
numberGroupSeparator: ","
|
|
1429
|
-
},
|
|
1434
|
+
}, pn = {
|
|
1430
1435
|
candlestick: "Nến",
|
|
1431
1436
|
line: "Đường",
|
|
1432
1437
|
area: "Vùng",
|
|
@@ -1529,43 +1534,43 @@ var Qt = {
|
|
|
1529
1534
|
error: "Lỗi",
|
|
1530
1535
|
numberDecimalSeparator: ",",
|
|
1531
1536
|
numberGroupSeparator: "."
|
|
1532
|
-
},
|
|
1533
|
-
function
|
|
1534
|
-
|
|
1537
|
+
}, W = new Map([["en", U], ["vi", pn]]), G = "en", mn = U;
|
|
1538
|
+
function hn(e) {
|
|
1539
|
+
G = e, mn = W.get(e) ?? U;
|
|
1535
1540
|
}
|
|
1536
|
-
function
|
|
1537
|
-
return
|
|
1541
|
+
function gn() {
|
|
1542
|
+
return G;
|
|
1538
1543
|
}
|
|
1539
|
-
function
|
|
1540
|
-
return
|
|
1544
|
+
function _n(e) {
|
|
1545
|
+
return mn[e] ?? U[e] ?? e;
|
|
1541
1546
|
}
|
|
1542
|
-
function
|
|
1543
|
-
|
|
1547
|
+
function vn(e, t) {
|
|
1548
|
+
W.set(e, t);
|
|
1544
1549
|
}
|
|
1545
|
-
function
|
|
1546
|
-
return
|
|
1550
|
+
function yn(e) {
|
|
1551
|
+
return W.get(e ?? G) ?? U;
|
|
1547
1552
|
}
|
|
1548
|
-
function
|
|
1549
|
-
let r =
|
|
1553
|
+
function K(e, t = 2, n) {
|
|
1554
|
+
let r = W.get(n ?? G) ?? U, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
|
|
1550
1555
|
for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
|
|
1551
1556
|
return c && (u = "-" + u), s ? u + i + s : u;
|
|
1552
1557
|
}
|
|
1553
|
-
function
|
|
1554
|
-
return
|
|
1558
|
+
function bn(e) {
|
|
1559
|
+
return K(e, 0, "vi");
|
|
1555
1560
|
}
|
|
1556
|
-
function
|
|
1557
|
-
return e >= 1e9 ?
|
|
1561
|
+
function xn(e, t) {
|
|
1562
|
+
return e >= 1e9 ? K(e / 1e9, 2, t ?? G) + "B" : e >= 1e6 ? K(e / 1e6, 2, t ?? G) + "M" : e >= 1e3 ? K(e / 1e3, 2, t ?? G) + "K" : K(e, 0, t ?? G);
|
|
1558
1563
|
}
|
|
1559
1564
|
//#endregion
|
|
1560
1565
|
//#region src/market/presets.ts
|
|
1561
|
-
var
|
|
1566
|
+
var q = {
|
|
1562
1567
|
up: "#22C55E",
|
|
1563
1568
|
down: "#EF4444",
|
|
1564
1569
|
unchanged: "#EAB308",
|
|
1565
1570
|
ceiling: "#D946EF",
|
|
1566
1571
|
floor: "#06B6D4",
|
|
1567
1572
|
reference: "#EAB308"
|
|
1568
|
-
},
|
|
1573
|
+
}, J = "Asia/Ho_Chi_Minh", Sn = [
|
|
1569
1574
|
{
|
|
1570
1575
|
name: "ATO",
|
|
1571
1576
|
startTime: "09:00",
|
|
@@ -1596,7 +1601,7 @@ var J = {
|
|
|
1596
1601
|
endTime: "14:45",
|
|
1597
1602
|
type: "preClose"
|
|
1598
1603
|
}
|
|
1599
|
-
],
|
|
1604
|
+
], Cn = [
|
|
1600
1605
|
{
|
|
1601
1606
|
name: "Phiên 1",
|
|
1602
1607
|
startTime: "09:15",
|
|
@@ -1627,7 +1632,7 @@ var J = {
|
|
|
1627
1632
|
endTime: "15:00",
|
|
1628
1633
|
type: "postClose"
|
|
1629
1634
|
}
|
|
1630
|
-
],
|
|
1635
|
+
], wn = [
|
|
1631
1636
|
{
|
|
1632
1637
|
name: "Phiên 1",
|
|
1633
1638
|
startTime: "09:15",
|
|
@@ -1646,7 +1651,7 @@ var J = {
|
|
|
1646
1651
|
endTime: "14:30",
|
|
1647
1652
|
type: "continuous"
|
|
1648
1653
|
}
|
|
1649
|
-
],
|
|
1654
|
+
], Tn = [
|
|
1650
1655
|
{
|
|
1651
1656
|
name: "ATO",
|
|
1652
1657
|
startTime: "08:45",
|
|
@@ -1677,7 +1682,7 @@ var J = {
|
|
|
1677
1682
|
endTime: "14:45",
|
|
1678
1683
|
type: "preClose"
|
|
1679
1684
|
}
|
|
1680
|
-
],
|
|
1685
|
+
], En = {
|
|
1681
1686
|
type: "stock",
|
|
1682
1687
|
exchange: "HOSE",
|
|
1683
1688
|
currency: "VND",
|
|
@@ -1698,48 +1703,48 @@ var J = {
|
|
|
1698
1703
|
step: .1
|
|
1699
1704
|
}
|
|
1700
1705
|
],
|
|
1701
|
-
timeZone:
|
|
1706
|
+
timeZone: J,
|
|
1702
1707
|
priceLimits: {
|
|
1703
1708
|
enabled: !0,
|
|
1704
1709
|
ceilingPercent: 7,
|
|
1705
1710
|
floorPercent: 7
|
|
1706
1711
|
},
|
|
1707
|
-
sessions:
|
|
1708
|
-
colorScheme:
|
|
1709
|
-
},
|
|
1710
|
-
...
|
|
1712
|
+
sessions: Sn,
|
|
1713
|
+
colorScheme: q
|
|
1714
|
+
}, Dn = {
|
|
1715
|
+
...En,
|
|
1711
1716
|
priceSteps: void 0
|
|
1712
|
-
},
|
|
1717
|
+
}, On = {
|
|
1713
1718
|
type: "stock",
|
|
1714
1719
|
exchange: "HNX",
|
|
1715
1720
|
currency: "VND",
|
|
1716
1721
|
pricePrecision: 1,
|
|
1717
1722
|
volumeUnit: 100,
|
|
1718
1723
|
priceStep: .1,
|
|
1719
|
-
timeZone:
|
|
1724
|
+
timeZone: J,
|
|
1720
1725
|
priceLimits: {
|
|
1721
1726
|
enabled: !0,
|
|
1722
1727
|
ceilingPercent: 10,
|
|
1723
1728
|
floorPercent: 10
|
|
1724
1729
|
},
|
|
1725
|
-
sessions:
|
|
1726
|
-
colorScheme:
|
|
1727
|
-
},
|
|
1730
|
+
sessions: Cn,
|
|
1731
|
+
colorScheme: q
|
|
1732
|
+
}, kn = {
|
|
1728
1733
|
type: "stock",
|
|
1729
1734
|
exchange: "UPCOM",
|
|
1730
1735
|
currency: "VND",
|
|
1731
1736
|
pricePrecision: 1,
|
|
1732
1737
|
volumeUnit: 100,
|
|
1733
1738
|
priceStep: .1,
|
|
1734
|
-
timeZone:
|
|
1739
|
+
timeZone: J,
|
|
1735
1740
|
priceLimits: {
|
|
1736
1741
|
enabled: !0,
|
|
1737
1742
|
ceilingPercent: 15,
|
|
1738
1743
|
floorPercent: 15
|
|
1739
1744
|
},
|
|
1740
|
-
sessions:
|
|
1741
|
-
colorScheme:
|
|
1742
|
-
},
|
|
1745
|
+
sessions: wn,
|
|
1746
|
+
colorScheme: q
|
|
1747
|
+
}, An = {
|
|
1743
1748
|
type: "futures",
|
|
1744
1749
|
exchange: "HNX",
|
|
1745
1750
|
currency: "VND",
|
|
@@ -1747,20 +1752,20 @@ var J = {
|
|
|
1747
1752
|
volumeUnit: 1,
|
|
1748
1753
|
priceStep: .1,
|
|
1749
1754
|
contractMultiplier: 1e5,
|
|
1750
|
-
timeZone:
|
|
1755
|
+
timeZone: J,
|
|
1751
1756
|
priceLimits: {
|
|
1752
1757
|
enabled: !0,
|
|
1753
1758
|
ceilingPercent: 7,
|
|
1754
1759
|
floorPercent: 7
|
|
1755
1760
|
},
|
|
1756
|
-
sessions:
|
|
1757
|
-
colorScheme:
|
|
1758
|
-
},
|
|
1761
|
+
sessions: Tn,
|
|
1762
|
+
colorScheme: q
|
|
1763
|
+
}, jn = {
|
|
1759
1764
|
type: "crypto",
|
|
1760
1765
|
currency: "USDT",
|
|
1761
1766
|
pricePrecision: 2,
|
|
1762
1767
|
priceLimits: { enabled: !1 }
|
|
1763
|
-
},
|
|
1768
|
+
}, Mn = {
|
|
1764
1769
|
type: "stock",
|
|
1765
1770
|
exchange: "NYSE",
|
|
1766
1771
|
currency: "USD",
|
|
@@ -1789,77 +1794,77 @@ var J = {
|
|
|
1789
1794
|
}
|
|
1790
1795
|
]
|
|
1791
1796
|
};
|
|
1792
|
-
function
|
|
1797
|
+
function Nn(e) {
|
|
1793
1798
|
return {
|
|
1794
1799
|
...e,
|
|
1795
|
-
candleUp:
|
|
1796
|
-
candleDown:
|
|
1797
|
-
candleUpWick:
|
|
1798
|
-
candleDownWick:
|
|
1799
|
-
volumeUp:
|
|
1800
|
-
volumeDown:
|
|
1800
|
+
candleUp: q.up,
|
|
1801
|
+
candleDown: q.down,
|
|
1802
|
+
candleUpWick: q.up,
|
|
1803
|
+
candleDownWick: q.down,
|
|
1804
|
+
volumeUp: P(q.up),
|
|
1805
|
+
volumeDown: P(q.down)
|
|
1801
1806
|
};
|
|
1802
1807
|
}
|
|
1803
|
-
var
|
|
1804
|
-
function
|
|
1808
|
+
var Y = 1e-9;
|
|
1809
|
+
function Pn(e, t) {
|
|
1805
1810
|
let n = t.priceStep;
|
|
1806
|
-
for (let r of t.priceSteps ?? []) e +
|
|
1811
|
+
for (let r of t.priceSteps ?? []) e + Y >= r.from && (n = r.step);
|
|
1807
1812
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
1808
1813
|
}
|
|
1809
|
-
function
|
|
1814
|
+
function Fn(e, t) {
|
|
1810
1815
|
let n = t.priceStep;
|
|
1811
|
-
for (let r of t.priceSteps ?? []) e -
|
|
1816
|
+
for (let r of t.priceSteps ?? []) e - Y > r.from && (n = r.step);
|
|
1812
1817
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
1813
1818
|
}
|
|
1814
|
-
function
|
|
1815
|
-
let r =
|
|
1819
|
+
function X(e, t, n = "nearest") {
|
|
1820
|
+
let r = Pn(e, t);
|
|
1816
1821
|
if (r === void 0 || !Number.isFinite(e)) return e;
|
|
1817
|
-
let i = e / r, a = n === "down" ? Math.floor(i +
|
|
1818
|
-
return Number((a * r).toFixed(
|
|
1822
|
+
let i = e / r, a = n === "down" ? Math.floor(i + Y) : n === "up" ? Math.ceil(i - Y) : Math.round(i);
|
|
1823
|
+
return Number((a * r).toFixed(pt(r)));
|
|
1819
1824
|
}
|
|
1820
|
-
function
|
|
1825
|
+
function In(e, t) {
|
|
1821
1826
|
if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
|
|
1822
|
-
let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100, i = e, a = i * (1 + n), o = i * (1 - r), s =
|
|
1827
|
+
let n = t.priceLimits.ceilingPercent / 100, r = (t.priceLimits.floorPercent ?? t.priceLimits.ceilingPercent) / 100, i = e, a = i * (1 + n), o = i * (1 - r), s = Pn(i, t);
|
|
1823
1828
|
if (s === void 0) return {
|
|
1824
1829
|
ceiling: a,
|
|
1825
1830
|
floor: o,
|
|
1826
1831
|
reference: i
|
|
1827
1832
|
};
|
|
1828
|
-
let c =
|
|
1829
|
-
if (Math.abs(i - s) <
|
|
1833
|
+
let c = X(i + s, t);
|
|
1834
|
+
if (Math.abs(i - s) < Y) return {
|
|
1830
1835
|
ceiling: c,
|
|
1831
1836
|
floor: i,
|
|
1832
1837
|
reference: i
|
|
1833
1838
|
};
|
|
1834
|
-
let l =
|
|
1835
|
-
return l <= i && (l = c), u >= i && (u =
|
|
1839
|
+
let l = X(a, t, "down"), u = X(o, t, "up");
|
|
1840
|
+
return l <= i && (l = c), u >= i && (u = X(i - (Fn(i, t) ?? s), t)), u <= 0 && (u = i), {
|
|
1836
1841
|
ceiling: l,
|
|
1837
1842
|
floor: u,
|
|
1838
1843
|
reference: i
|
|
1839
1844
|
};
|
|
1840
1845
|
}
|
|
1841
|
-
var
|
|
1842
|
-
function
|
|
1846
|
+
var Z = (e, t) => Math.round(e * t * 1e9) / 1e9;
|
|
1847
|
+
function Ln(e, t) {
|
|
1843
1848
|
let n = Math.round(Math.log10(t));
|
|
1844
1849
|
return {
|
|
1845
1850
|
...e,
|
|
1846
1851
|
pricePrecision: e.pricePrecision === void 0 ? void 0 : Math.max(0, e.pricePrecision - n),
|
|
1847
|
-
priceStep: e.priceStep === void 0 ? void 0 :
|
|
1852
|
+
priceStep: e.priceStep === void 0 ? void 0 : Z(e.priceStep, t),
|
|
1848
1853
|
priceSteps: e.priceSteps?.map((e) => ({
|
|
1849
|
-
from:
|
|
1850
|
-
step:
|
|
1854
|
+
from: Z(e.from, t),
|
|
1855
|
+
step: Z(e.step, t)
|
|
1851
1856
|
})),
|
|
1852
1857
|
priceLimits: e.priceLimits && {
|
|
1853
1858
|
...e.priceLimits,
|
|
1854
|
-
referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 :
|
|
1859
|
+
referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 : Z(e.priceLimits.referencePrice, t)
|
|
1855
1860
|
}
|
|
1856
1861
|
};
|
|
1857
1862
|
}
|
|
1858
|
-
var
|
|
1859
|
-
function
|
|
1863
|
+
var Rn = 6e4, zn = 864e5;
|
|
1864
|
+
function Bn(e, t) {
|
|
1860
1865
|
let n, r;
|
|
1861
1866
|
if (t) {
|
|
1862
|
-
let i = new Date(e +
|
|
1867
|
+
let i = new Date(e + v(t, e) * Rn);
|
|
1863
1868
|
n = i.getUTCHours(), r = i.getUTCMinutes();
|
|
1864
1869
|
} else {
|
|
1865
1870
|
let t = new Date(e);
|
|
@@ -1867,37 +1872,37 @@ function Ln(e, t) {
|
|
|
1867
1872
|
}
|
|
1868
1873
|
return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
1869
1874
|
}
|
|
1870
|
-
function
|
|
1871
|
-
if (n !== void 0 && !
|
|
1872
|
-
let r =
|
|
1875
|
+
function Vn(e, t = Date.now(), n) {
|
|
1876
|
+
if (n !== void 0 && !Ee(n)) return null;
|
|
1877
|
+
let r = Bn(t, n);
|
|
1873
1878
|
for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
|
|
1874
1879
|
return null;
|
|
1875
1880
|
}
|
|
1876
|
-
var
|
|
1881
|
+
var Q = (e) => String(e).padStart(2, "0"), $ = (e) => {
|
|
1877
1882
|
let t = new Date(e);
|
|
1878
|
-
return `${t.getUTCFullYear()}-${
|
|
1879
|
-
},
|
|
1880
|
-
function
|
|
1881
|
-
let r = Date.UTC(e, t - 1, 1), i = 1 + (
|
|
1883
|
+
return `${t.getUTCFullYear()}-${Q(t.getUTCMonth() + 1)}-${Q(t.getUTCDate())}`;
|
|
1884
|
+
}, Hn = 4, Un = 7 * 36e5;
|
|
1885
|
+
function Wn(e, t, n) {
|
|
1886
|
+
let r = Date.UTC(e, t - 1, 1), i = 1 + (Hn - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
|
|
1882
1887
|
let t = new Date(e).getUTCDay();
|
|
1883
|
-
return t === 0 || t === 6 || (n?.(
|
|
1888
|
+
return t === 0 || t === 6 || (n?.($(e)) ?? !1);
|
|
1884
1889
|
};
|
|
1885
|
-
for (; o(a);) a -=
|
|
1886
|
-
return
|
|
1890
|
+
for (; o(a);) a -= zn;
|
|
1891
|
+
return $(a);
|
|
1887
1892
|
}
|
|
1888
|
-
function
|
|
1889
|
-
let n =
|
|
1890
|
-
symbol: `VN30F${
|
|
1893
|
+
function Gn(e, t) {
|
|
1894
|
+
let n = $(e + Un), r = (e, n) => ({
|
|
1895
|
+
symbol: `VN30F${Q(e % 100)}${Q(n)}`,
|
|
1891
1896
|
year: e,
|
|
1892
1897
|
month: n,
|
|
1893
|
-
lastTradingDay:
|
|
1894
|
-
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e +
|
|
1898
|
+
lastTradingDay: Wn(e, n, t)
|
|
1899
|
+
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + Un), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
|
|
1895
1900
|
n > o.lastTradingDay && (o = i(o));
|
|
1896
1901
|
let s = [o, i(o)], c = i(s[1]);
|
|
1897
1902
|
for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
|
|
1898
1903
|
return s;
|
|
1899
1904
|
}
|
|
1900
1905
|
//#endregion
|
|
1901
|
-
export { t as CHART_STYLE_KEYS,
|
|
1906
|
+
export { t as CHART_STYLE_KEYS, z as DARK_TERMINAL, L as DARK_THEME, cn as DEFAULT_BAR_SPACING, sn as DEFAULT_BAR_WIDTH, tn as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, Nt as DEFAULT_FONT_FAMILY, fn as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, on as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, Cn as HNX_SESSIONS, Sn as HOSE_SESSIONS, R as LIGHT_THEME, e as LayerType, jn as MARKET_CRYPTO, On as MARKET_HNX, En as MARKET_HOSE, Dn as MARKET_HOSE_ETF, Mn as MARKET_NYSE, kn as MARKET_UPCOM, An as MARKET_VN30F, dn as MIN_PANEL_HEIGHT, le as MS_TIME_THRESHOLD, ln as PRICE_AXIS_WIDTH, tt as PRICE_SOURCES, N as TC_PALETTE, It as TC_SERIES_COLORS, nn as TIMEFRAMES_CRYPTO, an as TIMEFRAMES_FOREX, rn as TIMEFRAMES_STOCK, un as TIME_AXIS_HEIGHT, wn as UPCOM_SESSIONS, Tn as VN30F_SESSIONS, q as VN_COLORS, Ft as VOLUME_ALPHA, Re as alignToTimeframe, Je as autoPricePrecision, ue as barTimeUnit, He as barsAreDaily, en as chartStyleValue, re as clamp, In as computePriceLimits, he as computePriceRange, ce as computeTickStep, Nn as createVNTheme, et as detectPrecision, Ct as drawingOption, U as en, me as findBarIndex, Xe as formatFraction, K as formatNumber, w as formatPrice, Ye as formatPriceScaleLabel, Le as formatTimestamp, bn as formatVND, $e as formatVolume, xn as formatVolumeLoc, Ze as fractionTick, Vn as getCurrentSession, gn as getLocale, yn as getLocaleStrings, _e as hexToRgba, at as indicatorSource, ae as inverseLerp, Be as isDateOnly, nt as isPriceSource, Ie as isTimeFrame, Ee as isValidTimeZone, ie as lerp, ye as lerpColor, Yt as lineDash, ht as marketStatus, ge as mergeBar, se as niceNumber, fe as normalizeBar, de as normalizeBarTime, y as offsetAt, ot as parseIndicatorSource, x as parseTimeframe, ut as pickBaseTimeframe, Qe as priceFormatterFor, Pn as priceStepAt, ft as rankSymbols, Gt as readChartStyleOverrides, Mt as readChartTypeOptions, Jt as readIndicatorPlotStyles, ne as readNews, Kt as readPaneStyle, l as readQuote, vn as registerLocale, ct as resampleBars, Zt as resolveChartTheme, wt as resolveDrawingOptions, B as resolveVolumeColors, X as roundToPriceStep, oe as roundToStep, xt as sanitizeDrawingOptions, jt as sanitizeDrawingStyle, Ln as scaleMarketPrices, E as sessionMinute, hn as setLocale, pe as sliceVisibleData, rt as sourcePrice, pt as stepDecimals, _n as t, Fe as tickBarCount, ze as timeParts, Ge as timeframeBucketStart, S as timeframeToMs, Ue as tzLabel, pn as vi, Gn as vn30fContracts, Wn as vn30fLastTradingDay, P as volumeColor, ke as wallToUtc, ve as withAlpha, v as zoneOffsetMinutes, je as zonedDateFormatter };
|
|
1902
1907
|
|
|
1903
1908
|
//# sourceMappingURL=index.js.map
|