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