@tradecanvas/commons 1.61.0 → 1.62.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 +472 -457
- package/dist/index.js.map +1 -1
- package/dist/types/drawing.d.ts +18 -0
- package/dist/types/drawing.d.ts.map +1 -1
- package/dist/types/events.d.ts +2 -0
- package/dist/types/events.d.ts.map +1 -1
- package/dist/utils/drawingStyle.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -198,11 +198,11 @@ function u(e) {
|
|
|
198
198
|
}
|
|
199
199
|
//#endregion
|
|
200
200
|
//#region src/types/news.ts
|
|
201
|
-
var d = 300,
|
|
201
|
+
var d = 300, ee = 1e3, f = (e, t) => {
|
|
202
202
|
if (typeof e != "string") return;
|
|
203
203
|
let n = e.trim();
|
|
204
204
|
return n ? n.slice(0, t) : void 0;
|
|
205
|
-
},
|
|
205
|
+
}, te = (e) => {
|
|
206
206
|
if (typeof e == "string") try {
|
|
207
207
|
let t = new URL(e);
|
|
208
208
|
return t.protocol === "https:" || t.protocol === "http:" ? t.href : void 0;
|
|
@@ -210,61 +210,61 @@ var d = 300, f = 1e3, p = (e, t) => {
|
|
|
210
210
|
return;
|
|
211
211
|
}
|
|
212
212
|
};
|
|
213
|
-
function
|
|
213
|
+
function ne(e, t = 20) {
|
|
214
214
|
if (!Array.isArray(e)) return [];
|
|
215
215
|
let n = [];
|
|
216
216
|
for (let t of e) {
|
|
217
217
|
if (!t || typeof t != "object") continue;
|
|
218
|
-
let e = t, r =
|
|
218
|
+
let e = t, r = f(e.title, d);
|
|
219
219
|
if (!r || typeof e.time != "number" || !Number.isFinite(e.time)) continue;
|
|
220
220
|
let i = {
|
|
221
221
|
title: r,
|
|
222
222
|
time: e.time
|
|
223
|
-
}, a =
|
|
223
|
+
}, a = te(e.url);
|
|
224
224
|
a && (i.url = a);
|
|
225
|
-
let o =
|
|
225
|
+
let o = f(e.source, d);
|
|
226
226
|
o && (i.source = o);
|
|
227
|
-
let s =
|
|
227
|
+
let s = f(e.summary, ee);
|
|
228
228
|
s && (i.summary = s);
|
|
229
|
-
let c =
|
|
229
|
+
let c = f(e.id, d);
|
|
230
230
|
c && (i.id = c), n.push(i);
|
|
231
231
|
}
|
|
232
232
|
return n.sort((e, t) => t.time - e.time).slice(0, Math.max(0, t));
|
|
233
233
|
}
|
|
234
234
|
//#endregion
|
|
235
235
|
//#region src/utils/math.ts
|
|
236
|
-
function
|
|
236
|
+
function re(e, t, n) {
|
|
237
237
|
return Math.max(t, Math.min(n, e));
|
|
238
238
|
}
|
|
239
|
-
function
|
|
239
|
+
function ie(e, t, n) {
|
|
240
240
|
return e + (t - e) * n;
|
|
241
241
|
}
|
|
242
|
-
function
|
|
242
|
+
function ae(e, t, n) {
|
|
243
243
|
return e === t ? 0 : (n - e) / (t - e);
|
|
244
244
|
}
|
|
245
|
-
function
|
|
245
|
+
function oe(e, t) {
|
|
246
246
|
return Math.round(e / t) * t;
|
|
247
247
|
}
|
|
248
|
-
function
|
|
248
|
+
function se(e, t) {
|
|
249
249
|
let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
|
|
250
250
|
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;
|
|
251
251
|
}
|
|
252
|
-
function
|
|
253
|
-
return
|
|
252
|
+
function ce(e, t, n) {
|
|
253
|
+
return se(se(t - e, !1) / (n - 1), !0);
|
|
254
254
|
}
|
|
255
255
|
//#endregion
|
|
256
256
|
//#region src/utils/data.ts
|
|
257
|
-
var
|
|
258
|
-
function
|
|
257
|
+
var le = 1e11;
|
|
258
|
+
function ue(e) {
|
|
259
259
|
let t = e.length > 0 ? e[e.length - 1].time : NaN;
|
|
260
260
|
return Number.isFinite(t) ? Math.abs(t) >= 1e11 ? 1 : 1e3 : 1;
|
|
261
261
|
}
|
|
262
|
-
function
|
|
262
|
+
function de(e, t) {
|
|
263
263
|
return t === void 0 ? Math.abs(e) >= 1e11 ? e : e * 1e3 : e * t;
|
|
264
264
|
}
|
|
265
|
-
function
|
|
265
|
+
function fe(e) {
|
|
266
266
|
return {
|
|
267
|
-
time:
|
|
267
|
+
time: de(e.time ?? e.t ?? 0),
|
|
268
268
|
open: e.open ?? e.o ?? 0,
|
|
269
269
|
high: e.high ?? e.h ?? 0,
|
|
270
270
|
low: e.low ?? e.l ?? 0,
|
|
@@ -272,11 +272,11 @@ function de(e) {
|
|
|
272
272
|
volume: e.volume ?? e.v ?? 0
|
|
273
273
|
};
|
|
274
274
|
}
|
|
275
|
-
function
|
|
275
|
+
function pe(e, t, n) {
|
|
276
276
|
let r = Math.max(0, t), i = Math.min(e.length, n + 1);
|
|
277
277
|
return e.slice(r, i);
|
|
278
278
|
}
|
|
279
|
-
function
|
|
279
|
+
function me(e, t) {
|
|
280
280
|
let n = 0, r = e.length - 1;
|
|
281
281
|
for (; n <= r;) {
|
|
282
282
|
let i = n + r >>> 1;
|
|
@@ -286,7 +286,7 @@ function pe(e, t) {
|
|
|
286
286
|
}
|
|
287
287
|
return n;
|
|
288
288
|
}
|
|
289
|
-
function
|
|
289
|
+
function he(e, t, n, r = !1) {
|
|
290
290
|
let i = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
|
|
291
291
|
if (Number.isFinite(i)) {
|
|
292
292
|
let r = i || Math.log(1 + 2 * n), a = Math.exp(r * n);
|
|
@@ -301,7 +301,7 @@ function me(e, t, n, r = !1) {
|
|
|
301
301
|
max: t + a * n
|
|
302
302
|
};
|
|
303
303
|
}
|
|
304
|
-
function
|
|
304
|
+
function ge(e, t, n, r = !1) {
|
|
305
305
|
let i = Math.max(1 - n.top - n.bottom, 2 ** -52), a = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
|
|
306
306
|
if (Number.isFinite(a)) {
|
|
307
307
|
let r = (a || Math.log(1.01)) / i;
|
|
@@ -316,7 +316,7 @@ function he(e, t, n, r = !1) {
|
|
|
316
316
|
max: t + o * n.top
|
|
317
317
|
};
|
|
318
318
|
}
|
|
319
|
-
function
|
|
319
|
+
function _e(e, t, n, r = .05, i = !1) {
|
|
320
320
|
if (e.length === 0) return {
|
|
321
321
|
min: 0,
|
|
322
322
|
max: 1
|
|
@@ -326,9 +326,9 @@ function ge(e, t, n, r = .05, i = !1) {
|
|
|
326
326
|
return s === Infinity ? {
|
|
327
327
|
min: 0,
|
|
328
328
|
max: 1
|
|
329
|
-
} :
|
|
329
|
+
} : he(s, c, r, i);
|
|
330
330
|
}
|
|
331
|
-
function
|
|
331
|
+
function ve(e, t) {
|
|
332
332
|
return {
|
|
333
333
|
...e,
|
|
334
334
|
high: Math.max(e.high, t.price),
|
|
@@ -339,18 +339,18 @@ function _e(e, t) {
|
|
|
339
339
|
}
|
|
340
340
|
//#endregion
|
|
341
341
|
//#region src/utils/color.ts
|
|
342
|
-
function
|
|
342
|
+
function ye(e, t = 1) {
|
|
343
343
|
let n = e.slice(1);
|
|
344
344
|
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})`;
|
|
345
345
|
}
|
|
346
|
-
function
|
|
346
|
+
function p(e, t) {
|
|
347
347
|
let n = e.trim();
|
|
348
|
-
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return
|
|
348
|
+
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return ye(n, t);
|
|
349
349
|
let r = n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);
|
|
350
350
|
return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
|
|
351
351
|
}
|
|
352
|
-
var
|
|
353
|
-
function
|
|
352
|
+
var be = 3;
|
|
353
|
+
function xe(e) {
|
|
354
354
|
let t = e.trim(), n = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(t);
|
|
355
355
|
if (n) {
|
|
356
356
|
let e = n[1];
|
|
@@ -373,14 +373,14 @@ function h(e) {
|
|
|
373
373
|
a: Math.min(1, Math.max(0, i))
|
|
374
374
|
};
|
|
375
375
|
}
|
|
376
|
-
function
|
|
377
|
-
let r =
|
|
376
|
+
function Se(e, t, n) {
|
|
377
|
+
let r = xe(e), i = xe(t);
|
|
378
378
|
if (!r || !i) return n < .5 ? e : t;
|
|
379
379
|
let a = r.a + (i.a - r.a) * n, o = (e, t) => a === 0 ? 0 : Math.round((e * r.a + (t * i.a - e * r.a) * n) / a), s = `${o(r.r, i.r)},${o(r.g, i.g)},${o(r.b, i.b)}`;
|
|
380
|
-
return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(
|
|
380
|
+
return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(be))})`;
|
|
381
381
|
}
|
|
382
|
-
function
|
|
383
|
-
let t =
|
|
382
|
+
function Ce(e) {
|
|
383
|
+
let t = xe(e);
|
|
384
384
|
if (!t) return null;
|
|
385
385
|
let n = (e) => {
|
|
386
386
|
let t = e / 255;
|
|
@@ -388,26 +388,26 @@ function xe(e) {
|
|
|
388
388
|
};
|
|
389
389
|
return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b);
|
|
390
390
|
}
|
|
391
|
-
function
|
|
392
|
-
let n =
|
|
391
|
+
function m(e, t) {
|
|
392
|
+
let n = Ce(e), r = Ce(t);
|
|
393
393
|
return n === null || r === null ? null : (Math.max(n, r) + .05) / (Math.min(n, r) + .05);
|
|
394
394
|
}
|
|
395
|
-
var
|
|
396
|
-
function
|
|
397
|
-
let i =
|
|
395
|
+
var we = 20;
|
|
396
|
+
function Te(e, t, n, r) {
|
|
397
|
+
let i = m(e, t);
|
|
398
398
|
if (i === null || i >= r) return e;
|
|
399
|
-
for (let i = 1; i <=
|
|
400
|
-
let a =
|
|
401
|
-
if ((
|
|
399
|
+
for (let i = 1; i <= we; i++) {
|
|
400
|
+
let a = Se(e, n, i / we);
|
|
401
|
+
if ((m(a, t) ?? 0) >= r) return a;
|
|
402
402
|
}
|
|
403
403
|
return n;
|
|
404
404
|
}
|
|
405
|
-
function
|
|
406
|
-
return (
|
|
405
|
+
function Ee(e, t, n) {
|
|
406
|
+
return (m(e, t) ?? 0) >= (m(e, n) ?? 0) ? t : n;
|
|
407
407
|
}
|
|
408
408
|
//#endregion
|
|
409
409
|
//#region src/utils/timezone.ts
|
|
410
|
-
var
|
|
410
|
+
var h = 6e4, g = 1440 * h, _ = 15 * h, De = 8192, Oe = 7 * g, ke = 4096, Ae = new Set([
|
|
411
411
|
"UTC",
|
|
412
412
|
"Etc/UTC",
|
|
413
413
|
"GMT",
|
|
@@ -418,9 +418,9 @@ var _ = 6e4, Te = 1440 * _, v = 15 * _, Ee = 8192, De = 7 * Te, Oe = 4096, ke =
|
|
|
418
418
|
"Etc/Universal",
|
|
419
419
|
"Zulu",
|
|
420
420
|
"Etc/Zulu"
|
|
421
|
-
]),
|
|
422
|
-
function
|
|
423
|
-
let t =
|
|
421
|
+
]), je = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map(), Me = /* @__PURE__ */ new Map();
|
|
422
|
+
function Ne(e) {
|
|
423
|
+
let t = je.get(e);
|
|
424
424
|
return t || (t = new Intl.DateTimeFormat("en-US", {
|
|
425
425
|
timeZone: e,
|
|
426
426
|
hourCycle: "h23",
|
|
@@ -430,34 +430,34 @@ function Me(e) {
|
|
|
430
430
|
hour: "numeric",
|
|
431
431
|
minute: "numeric",
|
|
432
432
|
second: "numeric"
|
|
433
|
-
}),
|
|
433
|
+
}), je.set(e, t)), t;
|
|
434
434
|
}
|
|
435
|
-
function
|
|
435
|
+
function Pe(e) {
|
|
436
436
|
if (!e) return !1;
|
|
437
437
|
try {
|
|
438
|
-
return
|
|
438
|
+
return Ne(e), !0;
|
|
439
439
|
} catch {
|
|
440
440
|
return !1;
|
|
441
441
|
}
|
|
442
442
|
}
|
|
443
|
-
function
|
|
444
|
-
if (!Number.isFinite(t) ||
|
|
445
|
-
let n =
|
|
446
|
-
n || (n = /* @__PURE__ */ new Map(),
|
|
447
|
-
let r = Math.floor(t /
|
|
448
|
-
return i || (i =
|
|
449
|
-
}
|
|
450
|
-
function
|
|
451
|
-
let n =
|
|
443
|
+
function y(e, t) {
|
|
444
|
+
if (!Number.isFinite(t) || Ae.has(e)) return 0;
|
|
445
|
+
let n = Me.get(e);
|
|
446
|
+
n || (n = /* @__PURE__ */ new Map(), Me.set(e, n));
|
|
447
|
+
let r = Math.floor(t / Oe), i = n.get(r);
|
|
448
|
+
return i || (i = Fe(e, r * Oe), n.size >= ke && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
|
|
449
|
+
}
|
|
450
|
+
function Fe(e, t) {
|
|
451
|
+
let n = b(e, t), r = t + Oe - _, i = b(e, r);
|
|
452
452
|
if (i === n) return {
|
|
453
453
|
before: n,
|
|
454
454
|
change: Infinity,
|
|
455
455
|
after: i
|
|
456
456
|
};
|
|
457
457
|
let a = t;
|
|
458
|
-
for (; r - a >
|
|
459
|
-
let t = a + Math.floor((r - a) /
|
|
460
|
-
|
|
458
|
+
for (; r - a > _;) {
|
|
459
|
+
let t = a + Math.floor((r - a) / _ / 2) * _;
|
|
460
|
+
b(e, t) === n ? a = t : r = t;
|
|
461
461
|
}
|
|
462
462
|
return {
|
|
463
463
|
before: n,
|
|
@@ -465,11 +465,11 @@ function Pe(e, t) {
|
|
|
465
465
|
after: i
|
|
466
466
|
};
|
|
467
467
|
}
|
|
468
|
-
function
|
|
469
|
-
let n = Math.floor(t /
|
|
468
|
+
function b(e, t) {
|
|
469
|
+
let n = Math.floor(t / _), r = `${e}|${n}`, i = v.get(r);
|
|
470
470
|
if (i !== void 0) return i;
|
|
471
|
-
let a = n *
|
|
472
|
-
for (let t of
|
|
471
|
+
let a = n * _, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
|
|
472
|
+
for (let t of Ne(e).formatToParts(new Date(a))) {
|
|
473
473
|
let e = Number(t.value);
|
|
474
474
|
switch (t.type) {
|
|
475
475
|
case "year":
|
|
@@ -492,24 +492,24 @@ function x(e, t) {
|
|
|
492
492
|
break;
|
|
493
493
|
}
|
|
494
494
|
}
|
|
495
|
-
let
|
|
496
|
-
return
|
|
495
|
+
let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / h);
|
|
496
|
+
return v.size >= De && v.clear(), v.set(r, ee), ee;
|
|
497
497
|
}
|
|
498
|
-
function
|
|
499
|
-
return e === 0 || typeof e == "string" &&
|
|
498
|
+
function x(e) {
|
|
499
|
+
return e === 0 || typeof e == "string" && Ae.has(e);
|
|
500
500
|
}
|
|
501
|
-
function
|
|
502
|
-
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e :
|
|
501
|
+
function S(e, t) {
|
|
502
|
+
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : y(e, t);
|
|
503
503
|
}
|
|
504
|
-
function
|
|
505
|
-
let n = e -
|
|
506
|
-
if (n +
|
|
507
|
-
let r = e -
|
|
508
|
-
return r +
|
|
509
|
-
}
|
|
510
|
-
var
|
|
511
|
-
function
|
|
512
|
-
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i =
|
|
504
|
+
function Ie(e, t) {
|
|
505
|
+
let n = e - S(t, e - g) * h;
|
|
506
|
+
if (n + S(t, n) * h === e) return n;
|
|
507
|
+
let r = e - S(t, e + g) * h;
|
|
508
|
+
return r + S(t, r) * h === e ? r : n;
|
|
509
|
+
}
|
|
510
|
+
var Le = /* @__PURE__ */ new Map();
|
|
511
|
+
function Re(e, t, n) {
|
|
512
|
+
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = Le.get(r);
|
|
513
513
|
if (i) return i;
|
|
514
514
|
let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
|
|
515
515
|
try {
|
|
@@ -523,12 +523,12 @@ function Le(e, t, n) {
|
|
|
523
523
|
timeZone: a
|
|
524
524
|
});
|
|
525
525
|
}
|
|
526
|
-
let s = typeof n == "number" ? n *
|
|
527
|
-
return i = (e) => o.format(new Date(e + s)),
|
|
526
|
+
let s = typeof n == "number" ? n * h : 0;
|
|
527
|
+
return i = (e) => o.format(new Date(e + s)), Le.set(r, i), i;
|
|
528
528
|
}
|
|
529
529
|
//#endregion
|
|
530
530
|
//#region src/utils/time.ts
|
|
531
|
-
var
|
|
531
|
+
var ze = {
|
|
532
532
|
"1s": 1e3,
|
|
533
533
|
"5s": 5e3,
|
|
534
534
|
"15s": 15e3,
|
|
@@ -555,16 +555,16 @@ var Re = {
|
|
|
555
555
|
"3M": 7776e6,
|
|
556
556
|
"6M": 15552e6,
|
|
557
557
|
"12M": 31536e6
|
|
558
|
-
},
|
|
558
|
+
}, C = {
|
|
559
559
|
s: 1e3,
|
|
560
560
|
m: 6e4,
|
|
561
561
|
h: 36e5,
|
|
562
562
|
d: 864e5,
|
|
563
563
|
w: 6048e5,
|
|
564
564
|
M: 2592e6
|
|
565
|
-
},
|
|
566
|
-
function
|
|
567
|
-
let t =
|
|
565
|
+
}, Be = /^([1-9]\d*)([smhdwM])$/;
|
|
566
|
+
function w(e) {
|
|
567
|
+
let t = Be.exec(e);
|
|
568
568
|
if (!t) return null;
|
|
569
569
|
let n = Number(t[1]);
|
|
570
570
|
return Number.isSafeInteger(n) ? {
|
|
@@ -572,24 +572,24 @@ function T(e) {
|
|
|
572
572
|
unit: t[2]
|
|
573
573
|
} : null;
|
|
574
574
|
}
|
|
575
|
-
var
|
|
576
|
-
function
|
|
575
|
+
var Ve = 1e6;
|
|
576
|
+
function He(e) {
|
|
577
577
|
let t = /^([1-9]\d*)T$/.exec(e);
|
|
578
578
|
if (!t) return null;
|
|
579
579
|
let n = Number(t[1]);
|
|
580
|
-
return Number.isSafeInteger(n) && n <=
|
|
580
|
+
return Number.isSafeInteger(n) && n <= Ve ? n : null;
|
|
581
581
|
}
|
|
582
|
-
function
|
|
583
|
-
return
|
|
582
|
+
function Ue(e) {
|
|
583
|
+
return w(e) !== null;
|
|
584
584
|
}
|
|
585
|
-
function
|
|
586
|
-
let t =
|
|
585
|
+
function T(e) {
|
|
586
|
+
let t = ze[e];
|
|
587
587
|
if (t !== void 0) return t;
|
|
588
|
-
let n =
|
|
589
|
-
return n ? n.count *
|
|
588
|
+
let n = w(e);
|
|
589
|
+
return n ? n.count * C[n.unit] : NaN;
|
|
590
590
|
}
|
|
591
|
-
function
|
|
592
|
-
let n = new Date(e), r =
|
|
591
|
+
function We(e, t) {
|
|
592
|
+
let n = new Date(e), r = T(t);
|
|
593
593
|
return r >= 864e5 ? n.toLocaleDateString(void 0, {
|
|
594
594
|
month: "short",
|
|
595
595
|
day: "numeric"
|
|
@@ -602,11 +602,11 @@ function Ue(e, t) {
|
|
|
602
602
|
second: "2-digit"
|
|
603
603
|
});
|
|
604
604
|
}
|
|
605
|
-
function
|
|
606
|
-
let n =
|
|
605
|
+
function Ge(e, t) {
|
|
606
|
+
let n = T(t);
|
|
607
607
|
return Math.floor(e / n) * n;
|
|
608
608
|
}
|
|
609
|
-
function
|
|
609
|
+
function Ke(e, t) {
|
|
610
610
|
if (t === null) {
|
|
611
611
|
let t = new Date(e);
|
|
612
612
|
return {
|
|
@@ -617,7 +617,7 @@ function Ge(e, t) {
|
|
|
617
617
|
minutes: t.getMinutes()
|
|
618
618
|
};
|
|
619
619
|
}
|
|
620
|
-
let n = new Date(e +
|
|
620
|
+
let n = new Date(e + S(t, e) * 6e4);
|
|
621
621
|
return {
|
|
622
622
|
year: n.getUTCFullYear(),
|
|
623
623
|
month: n.getUTCMonth() + 1,
|
|
@@ -626,122 +626,122 @@ function Ge(e, t) {
|
|
|
626
626
|
minutes: n.getUTCMinutes()
|
|
627
627
|
};
|
|
628
628
|
}
|
|
629
|
-
function
|
|
629
|
+
function qe(e) {
|
|
630
630
|
return e.hours === 0 && e.minutes === 0;
|
|
631
631
|
}
|
|
632
|
-
var
|
|
633
|
-
function
|
|
632
|
+
var Je = 20 * 36e5;
|
|
633
|
+
function Ye(e) {
|
|
634
634
|
let t = Math.min(e.length, 64);
|
|
635
635
|
if (t < 2) return;
|
|
636
|
-
let n =
|
|
636
|
+
let n = ue(e), r = Infinity;
|
|
637
637
|
for (let i = 1; i < t; i++) {
|
|
638
638
|
let t = Math.abs(e[i].time - e[i - 1].time) * n;
|
|
639
639
|
t > 0 && t < r && (r = t);
|
|
640
640
|
}
|
|
641
|
-
return r === Infinity ? void 0 : r >=
|
|
641
|
+
return r === Infinity ? void 0 : r >= Je;
|
|
642
642
|
}
|
|
643
|
-
function
|
|
644
|
-
let n =
|
|
643
|
+
function Xe(e, t = Date.now()) {
|
|
644
|
+
let n = S(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
|
|
645
645
|
return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
|
|
646
646
|
}
|
|
647
|
-
var
|
|
647
|
+
var Ze = Date.UTC(1970, 0, 5), Qe = C.m, E = C.d, $e = 24, et = {
|
|
648
648
|
count: 1,
|
|
649
649
|
unit: "m"
|
|
650
|
-
},
|
|
651
|
-
function k(e) {
|
|
652
|
-
let t = O.get(e);
|
|
653
|
-
return t || (t = T(e) ?? $e, O.size >= et && O.clear(), O.set(e, t)), t;
|
|
654
|
-
}
|
|
655
|
-
function tt({ unit: e }) {
|
|
656
|
-
return e === "d" || e === "w" || e === "M";
|
|
657
|
-
}
|
|
650
|
+
}, tt = 256, D = /* @__PURE__ */ new Map();
|
|
658
651
|
function nt(e) {
|
|
659
|
-
|
|
652
|
+
let t = D.get(e);
|
|
653
|
+
return t || (t = w(e) ?? et, D.size >= tt && D.clear(), D.set(e, t)), t;
|
|
660
654
|
}
|
|
661
|
-
function rt(e) {
|
|
662
|
-
return
|
|
655
|
+
function rt({ unit: e }) {
|
|
656
|
+
return e === "d" || e === "w" || e === "M";
|
|
663
657
|
}
|
|
664
658
|
function it(e) {
|
|
665
|
-
return
|
|
659
|
+
return e.unit === "h" ? e.count > 1 && $e % e.count === 0 : rt(e);
|
|
666
660
|
}
|
|
667
661
|
function at(e) {
|
|
668
|
-
return
|
|
662
|
+
return it(nt(e));
|
|
663
|
+
}
|
|
664
|
+
function ot(e) {
|
|
665
|
+
return rt(nt(e));
|
|
666
|
+
}
|
|
667
|
+
function st(e) {
|
|
668
|
+
return e !== void 0 && !x(e);
|
|
669
669
|
}
|
|
670
|
-
function
|
|
671
|
-
let r =
|
|
672
|
-
return !
|
|
670
|
+
function ct(e, t, n = 1) {
|
|
671
|
+
let r = nt(t), i = typeof n == "number" ? n : n.weekStartsOn ?? 1, a = typeof n == "number" ? void 0 : n.timeZone;
|
|
672
|
+
return !st(a) || !it(r) || typeof n == "object" && n.dates && e % E === 0 ? lt(e, r, i) : Ie(lt(e + S(a, e) * Qe, r, i), a);
|
|
673
673
|
}
|
|
674
|
-
function
|
|
674
|
+
function lt(e, { count: t, unit: n }, r) {
|
|
675
675
|
if (n === "s" || n === "m" || n === "h" || n === "d") {
|
|
676
|
-
let r = t *
|
|
676
|
+
let r = t * C[n];
|
|
677
677
|
return Math.floor(e / r) * r;
|
|
678
678
|
}
|
|
679
679
|
let i = new Date(e);
|
|
680
680
|
if (n === "w") {
|
|
681
681
|
let e = (i.getUTCDay() - r + 7) % 7, n = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate() - e);
|
|
682
682
|
if (t <= 1) return n;
|
|
683
|
-
let a = Math.floor((n -
|
|
684
|
-
return
|
|
683
|
+
let a = Math.floor((n - Ze) / (7 * E));
|
|
684
|
+
return Ze + Math.floor(a / t) * t * 7 * E;
|
|
685
685
|
}
|
|
686
686
|
let a = i.getUTCFullYear() * 12 + i.getUTCMonth(), o = Math.floor(a / t) * t;
|
|
687
687
|
return Date.UTC(Math.floor(o / 12), o % 12, 1);
|
|
688
688
|
}
|
|
689
|
-
function
|
|
690
|
-
return e %
|
|
689
|
+
function ut(e, t, n) {
|
|
690
|
+
return e % E === 0 ? 0 : n && ct(e, "1d", { timeZone: n }) === e ? n : t;
|
|
691
691
|
}
|
|
692
|
-
function
|
|
693
|
-
return
|
|
692
|
+
function dt(e, t, n) {
|
|
693
|
+
return Ke(e, ut(e, t, n));
|
|
694
694
|
}
|
|
695
695
|
//#endregion
|
|
696
696
|
//#region src/utils/precision.ts
|
|
697
|
-
var
|
|
698
|
-
function
|
|
699
|
-
let n = `${e}|${t}`, r =
|
|
700
|
-
return r || (
|
|
697
|
+
var ft = 64, O = /* @__PURE__ */ new Map();
|
|
698
|
+
function pt(e, t) {
|
|
699
|
+
let n = `${e}|${t}`, r = O.get(n);
|
|
700
|
+
return r || (O.size >= ft && O.clear(), r = new Intl.NumberFormat(e, {
|
|
701
701
|
minimumFractionDigits: t,
|
|
702
702
|
maximumFractionDigits: t
|
|
703
|
-
}),
|
|
703
|
+
}), O.set(n, r)), r;
|
|
704
704
|
}
|
|
705
|
-
function
|
|
706
|
-
return t.formatPrice ? t.formatPrice(e) :
|
|
705
|
+
function mt(e, t, n) {
|
|
706
|
+
return t.formatPrice ? t.formatPrice(e) : k(e, n ?? t.pricePrecision ?? ht(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
|
|
707
707
|
}
|
|
708
|
-
function
|
|
709
|
-
return
|
|
708
|
+
function k(e, t = 2, n = "en-US") {
|
|
709
|
+
return pt(n, t).format(e);
|
|
710
710
|
}
|
|
711
|
-
function
|
|
711
|
+
function ht(e, t) {
|
|
712
712
|
if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
|
|
713
|
-
let n =
|
|
713
|
+
let n = ce(e, t, 8);
|
|
714
714
|
return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
|
|
715
715
|
}
|
|
716
|
-
var
|
|
717
|
-
function
|
|
716
|
+
var gt = 2;
|
|
717
|
+
function _t(e, t, n, r = 2, i = "en-US") {
|
|
718
718
|
if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
|
|
719
719
|
if (t === "percentage") {
|
|
720
|
-
let t = (e / n - 1) * 100, r =
|
|
721
|
-
return `${r ===
|
|
720
|
+
let t = (e / n - 1) * 100, r = k(Math.abs(t), gt, i);
|
|
721
|
+
return `${r === k(0, gt, i) ? "" : t > 0 ? "+" : "-"}${r}%`;
|
|
722
722
|
}
|
|
723
|
-
return
|
|
723
|
+
return k(e / n * 100, 2, i);
|
|
724
724
|
}
|
|
725
|
-
return
|
|
725
|
+
return k(e, r, i);
|
|
726
726
|
}
|
|
727
|
-
function
|
|
727
|
+
function vt(e, t, n = 1) {
|
|
728
728
|
let r = Number.isInteger(n) && n > 1 ? n : 1;
|
|
729
729
|
if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
|
|
730
730
|
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)) : "";
|
|
731
731
|
return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
|
|
732
732
|
}
|
|
733
|
-
function
|
|
733
|
+
function yt(e) {
|
|
734
734
|
if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
|
|
735
735
|
let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
|
|
736
736
|
return 1 / (e.denominator * t);
|
|
737
737
|
}
|
|
738
|
-
function
|
|
739
|
-
return e ? typeof e == "function" ? e :
|
|
738
|
+
function bt(e) {
|
|
739
|
+
return e ? typeof e == "function" ? e : yt(e) === null ? null : (t) => vt(t, e.denominator, e.subDenominator) : null;
|
|
740
740
|
}
|
|
741
|
-
function
|
|
741
|
+
function xt(e) {
|
|
742
742
|
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);
|
|
743
743
|
}
|
|
744
|
-
function
|
|
744
|
+
function St(e) {
|
|
745
745
|
let t = 0;
|
|
746
746
|
for (let n of e) {
|
|
747
747
|
let e = n.toString(), r = e.indexOf(".");
|
|
@@ -751,7 +751,7 @@ function bt(e) {
|
|
|
751
751
|
}
|
|
752
752
|
//#endregion
|
|
753
753
|
//#region src/utils/priceSource.ts
|
|
754
|
-
var
|
|
754
|
+
var Ct = [
|
|
755
755
|
"close",
|
|
756
756
|
"open",
|
|
757
757
|
"high",
|
|
@@ -761,10 +761,10 @@ var xt = [
|
|
|
761
761
|
"ohlc4",
|
|
762
762
|
"hlcc4"
|
|
763
763
|
];
|
|
764
|
-
function
|
|
765
|
-
return typeof e == "string" &&
|
|
764
|
+
function wt(e) {
|
|
765
|
+
return typeof e == "string" && Ct.includes(e);
|
|
766
766
|
}
|
|
767
|
-
function
|
|
767
|
+
function Tt(e, t) {
|
|
768
768
|
switch (t) {
|
|
769
769
|
case "open": return e.open;
|
|
770
770
|
case "high": return e.high;
|
|
@@ -776,13 +776,13 @@ function Ct(e, t) {
|
|
|
776
776
|
default: return e.close;
|
|
777
777
|
}
|
|
778
778
|
}
|
|
779
|
-
var
|
|
780
|
-
function
|
|
779
|
+
var Et = /^ind:([^:]+):(.+)$/;
|
|
780
|
+
function Dt(e, t) {
|
|
781
781
|
return `ind:${e}:${t}`;
|
|
782
782
|
}
|
|
783
|
-
function
|
|
783
|
+
function Ot(e) {
|
|
784
784
|
if (typeof e != "string") return null;
|
|
785
|
-
let t =
|
|
785
|
+
let t = Et.exec(e);
|
|
786
786
|
return t ? {
|
|
787
787
|
instanceId: t[1],
|
|
788
788
|
key: t[2]
|
|
@@ -790,11 +790,11 @@ function Et(e) {
|
|
|
790
790
|
}
|
|
791
791
|
//#endregion
|
|
792
792
|
//#region src/utils/resample.ts
|
|
793
|
-
var
|
|
794
|
-
function
|
|
795
|
-
let r =
|
|
793
|
+
var kt = 864e5, At = 6e4;
|
|
794
|
+
function jt(e, t, n = 1) {
|
|
795
|
+
let r = Mt(e, t, n), i = [], a = null;
|
|
796
796
|
for (let n of e) {
|
|
797
|
-
let e =
|
|
797
|
+
let e = ct(n.time, t, r);
|
|
798
798
|
a === null || e !== a.time ? (a = {
|
|
799
799
|
time: e,
|
|
800
800
|
open: n.open,
|
|
@@ -806,49 +806,49 @@ function kt(e, t, n = 1) {
|
|
|
806
806
|
}
|
|
807
807
|
return i;
|
|
808
808
|
}
|
|
809
|
-
function
|
|
810
|
-
return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 ||
|
|
809
|
+
function Mt(e, t, n) {
|
|
810
|
+
return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || x(n.timeZone) || !at(t) ? n : {
|
|
811
811
|
...n,
|
|
812
|
-
dates:
|
|
812
|
+
dates: Ye(e) === !0
|
|
813
813
|
};
|
|
814
814
|
}
|
|
815
|
-
var
|
|
816
|
-
function
|
|
817
|
-
let n =
|
|
815
|
+
var Nt = (e) => e === "s" || e === "m" || e === "h" || e === "d";
|
|
816
|
+
function Pt(e, t) {
|
|
817
|
+
let n = w(e), r = w(t);
|
|
818
818
|
if (!n || !r) return !1;
|
|
819
|
-
let i =
|
|
820
|
-
return n.unit === "d" && n.count > 1 ? !1 :
|
|
819
|
+
let i = T(e);
|
|
820
|
+
return n.unit === "d" && n.count > 1 ? !1 : Nt(r.unit) ? Nt(n.unit) && T(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : Nt(n.unit) && kt % i === 0;
|
|
821
821
|
}
|
|
822
|
-
function
|
|
823
|
-
let n =
|
|
824
|
-
if (!(n <
|
|
822
|
+
function Ft(e, t) {
|
|
823
|
+
let n = T(e);
|
|
824
|
+
if (!(n < kt)) return !0;
|
|
825
825
|
let r = (/* @__PURE__ */ new Date()).getUTCFullYear();
|
|
826
|
-
return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) =>
|
|
826
|
+
return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => S(t, e) * At % n === 0);
|
|
827
827
|
}
|
|
828
|
-
function
|
|
829
|
-
let { timeZone: r } = n, i = r !== void 0 && !
|
|
828
|
+
function It(e, t, n = {}) {
|
|
829
|
+
let { timeZone: r } = n, i = r !== void 0 && !x(r) && at(e) ? r : void 0, a = null, o = 0;
|
|
830
830
|
for (let n of t) {
|
|
831
|
-
if (!
|
|
832
|
-
let t =
|
|
831
|
+
if (!Pt(n, e) || i !== void 0 && !Ft(n, i)) continue;
|
|
832
|
+
let t = T(n);
|
|
833
833
|
t > o && (a = n, o = t);
|
|
834
834
|
}
|
|
835
835
|
return a;
|
|
836
836
|
}
|
|
837
837
|
//#endregion
|
|
838
838
|
//#region src/utils/symbols.ts
|
|
839
|
-
function
|
|
839
|
+
function Lt(e, t) {
|
|
840
840
|
if (!e) return 0;
|
|
841
841
|
if (e === t) return 1e3;
|
|
842
842
|
if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
|
|
843
843
|
let n = e.indexOf(t);
|
|
844
844
|
return n >= 0 ? 300 - Math.min(100, n) : 0;
|
|
845
845
|
}
|
|
846
|
-
function
|
|
846
|
+
function Rt(e, t, n = 50, r) {
|
|
847
847
|
let i = t.trim().toUpperCase();
|
|
848
848
|
if (!i) return e.slice(0, n);
|
|
849
849
|
let a = [];
|
|
850
850
|
for (let t of e) {
|
|
851
|
-
let e = Math.max(
|
|
851
|
+
let e = Math.max(Lt(t.symbol.toUpperCase(), i), Lt((t.description ?? "").toUpperCase(), i) * .8);
|
|
852
852
|
e > 0 && a.push({
|
|
853
853
|
info: t,
|
|
854
854
|
score: e + (r?.(t) ?? 0)
|
|
@@ -856,7 +856,7 @@ function It(e, t, n = 50, r) {
|
|
|
856
856
|
}
|
|
857
857
|
return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
|
|
858
858
|
}
|
|
859
|
-
function
|
|
859
|
+
function zt(e) {
|
|
860
860
|
let t = typeof e == "number" ? e : Number(e);
|
|
861
861
|
if (!Number.isFinite(t) || t <= 0) return 0;
|
|
862
862
|
for (let e = 0; e <= 12; e++) {
|
|
@@ -865,10 +865,10 @@ function Lt(e) {
|
|
|
865
865
|
}
|
|
866
866
|
return 12;
|
|
867
867
|
}
|
|
868
|
-
function
|
|
868
|
+
function Bt(e) {
|
|
869
869
|
return e?.timeZone ?? e?.timezone;
|
|
870
870
|
}
|
|
871
|
-
function
|
|
871
|
+
function Vt(e) {
|
|
872
872
|
let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
|
|
873
873
|
if (!t) return null;
|
|
874
874
|
let n = Number(t[1]), r = Number(t[2]);
|
|
@@ -876,26 +876,26 @@ function zt(e) {
|
|
|
876
876
|
}
|
|
877
877
|
//#endregion
|
|
878
878
|
//#region src/utils/marketStatus.ts
|
|
879
|
-
var
|
|
880
|
-
function
|
|
881
|
-
let n =
|
|
882
|
-
let t =
|
|
879
|
+
var A = 864e5, j = 6e4, Ht = 8;
|
|
880
|
+
function Ut(e, t) {
|
|
881
|
+
let n = Bt(e), r = (e?.sessions ?? []).flatMap((e) => {
|
|
882
|
+
let t = Vt(e.start), n = Vt(e.end);
|
|
883
883
|
return t === null || n === null || t === n ? [] : [{
|
|
884
884
|
start: t,
|
|
885
885
|
end: n,
|
|
886
886
|
days: Array.isArray(e.days) ? e.days : null
|
|
887
887
|
}];
|
|
888
888
|
});
|
|
889
|
-
if (!n || !
|
|
889
|
+
if (!n || !Pe(n) || r.length === 0 || !Number.isFinite(t)) return {
|
|
890
890
|
state: "always",
|
|
891
891
|
next: null
|
|
892
892
|
};
|
|
893
|
-
let i =
|
|
894
|
-
for (let e = -1; e <=
|
|
895
|
-
let t = a + e *
|
|
893
|
+
let i = y(n, t) * j, a = Math.floor((t + i) / A) * A, o = (e) => e - y(n, e - y(n, e - i) * j) * j, s = [];
|
|
894
|
+
for (let e = -1; e <= Ht; e++) {
|
|
895
|
+
let t = a + e * A, n = (Math.floor(t / A) + 4) % 7;
|
|
896
896
|
for (let e of r) {
|
|
897
897
|
if (e.days && !e.days.includes(n)) continue;
|
|
898
|
-
let r = t + e.start *
|
|
898
|
+
let r = t + e.start * j, i = (e.end > e.start ? t : t + A) + e.end * j;
|
|
899
899
|
s.push([o(r), o(i)]);
|
|
900
900
|
}
|
|
901
901
|
}
|
|
@@ -918,15 +918,15 @@ function Vt(e, t) {
|
|
|
918
918
|
}
|
|
919
919
|
//#endregion
|
|
920
920
|
//#region src/utils/drawingOptions.ts
|
|
921
|
-
var
|
|
922
|
-
function
|
|
921
|
+
var Wt = 48, Gt = 2e3, Kt = 1e4;
|
|
922
|
+
function qt(e) {
|
|
923
923
|
if (!Array.isArray(e)) return;
|
|
924
924
|
let t = [];
|
|
925
925
|
for (let n of e) {
|
|
926
|
-
if (t.length >=
|
|
926
|
+
if (t.length >= Wt) break;
|
|
927
927
|
if (typeof n != "object" || !n) continue;
|
|
928
928
|
let { value: e, visible: r, color: i } = n;
|
|
929
|
-
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) >
|
|
929
|
+
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > Kt || r !== void 0 && typeof r != "boolean") continue;
|
|
930
930
|
let a = {
|
|
931
931
|
value: e,
|
|
932
932
|
visible: r ?? !0
|
|
@@ -935,109 +935,124 @@ function Gt(e) {
|
|
|
935
935
|
}
|
|
936
936
|
return t;
|
|
937
937
|
}
|
|
938
|
-
function
|
|
938
|
+
function Jt(e, t) {
|
|
939
939
|
switch (e.kind) {
|
|
940
940
|
case "boolean": return typeof t == "boolean" ? t : void 0;
|
|
941
941
|
case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
|
|
942
942
|
case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
|
|
943
|
-
case "levels": return
|
|
944
|
-
case "text": return typeof t == "string" ? t.slice(0,
|
|
943
|
+
case "levels": return qt(t);
|
|
944
|
+
case "text": return typeof t == "string" ? t.slice(0, Gt) : void 0;
|
|
945
945
|
}
|
|
946
946
|
}
|
|
947
|
-
function
|
|
947
|
+
function Yt(e, t) {
|
|
948
948
|
if (!e || typeof t != "object" || !t) return {};
|
|
949
949
|
let n = {};
|
|
950
950
|
for (let [r, i] of Object.entries(t)) {
|
|
951
951
|
let t = e[r];
|
|
952
952
|
if (!t) continue;
|
|
953
|
-
let a =
|
|
953
|
+
let a = Jt(t, i);
|
|
954
954
|
a !== void 0 && (n[r] = a);
|
|
955
955
|
}
|
|
956
956
|
return n;
|
|
957
957
|
}
|
|
958
|
-
function
|
|
958
|
+
function Xt(e) {
|
|
959
959
|
return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
|
|
960
960
|
}
|
|
961
|
-
function
|
|
961
|
+
function Zt(e, t, n) {
|
|
962
962
|
let r = e?.[n];
|
|
963
|
-
return r ?
|
|
963
|
+
return r ? Xt((t && n in t ? Jt(r, t[n]) : void 0) ?? r.default) : t?.[n];
|
|
964
964
|
}
|
|
965
|
-
function
|
|
965
|
+
function Qt(e, t) {
|
|
966
966
|
let n = {};
|
|
967
|
-
for (let r of Object.keys(e ?? {})) n[r] =
|
|
967
|
+
for (let r of Object.keys(e ?? {})) n[r] = Zt(e, t, r);
|
|
968
968
|
return n;
|
|
969
969
|
}
|
|
970
970
|
//#endregion
|
|
971
971
|
//#region src/utils/drawingStyle.ts
|
|
972
|
-
var
|
|
972
|
+
var $t = [
|
|
973
973
|
"solid",
|
|
974
974
|
"dashed",
|
|
975
975
|
"dotted"
|
|
976
|
-
],
|
|
977
|
-
|
|
976
|
+
], en = 64, tn = 2e3, nn = 20, rn = 200, an = 4e3, on = 20, sn = [
|
|
977
|
+
"left",
|
|
978
|
+
"center",
|
|
979
|
+
"right"
|
|
980
|
+
];
|
|
981
|
+
function cn(e, t, n) {
|
|
978
982
|
return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
|
|
979
983
|
}
|
|
980
|
-
function
|
|
981
|
-
return typeof e == "string" && e.length > 0 && e.length <=
|
|
984
|
+
function M(e) {
|
|
985
|
+
return typeof e == "string" && e.length > 0 && e.length <= en ? e : void 0;
|
|
982
986
|
}
|
|
983
|
-
function
|
|
987
|
+
function ln(e) {
|
|
984
988
|
if (typeof e != "object" || !e) return {};
|
|
985
|
-
let t = e, n = {}, r =
|
|
989
|
+
let t = e, n = {}, r = M(t.color);
|
|
986
990
|
r !== void 0 && (n.color = r);
|
|
987
|
-
let i =
|
|
988
|
-
i !== void 0 && (n.lineWidth = i),
|
|
989
|
-
let a =
|
|
991
|
+
let i = cn(t.lineWidth, .5, nn);
|
|
992
|
+
i !== void 0 && (n.lineWidth = i), $t.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
|
|
993
|
+
let a = M(t.fillColor);
|
|
990
994
|
a !== void 0 && (n.fillColor = a);
|
|
991
|
-
let o =
|
|
995
|
+
let o = cn(t.fillOpacity, 0, 1);
|
|
992
996
|
o !== void 0 && (n.fillOpacity = o);
|
|
993
|
-
let s =
|
|
994
|
-
|
|
997
|
+
let s = cn(t.fontSize, 6, rn);
|
|
998
|
+
s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, tn));
|
|
999
|
+
for (let e of [
|
|
1000
|
+
"bold",
|
|
1001
|
+
"italic",
|
|
1002
|
+
"textBackground",
|
|
1003
|
+
"textBorder"
|
|
1004
|
+
]) typeof t[e] == "boolean" && (n[e] = t[e]);
|
|
1005
|
+
sn.includes(t.textAlign) && (n.textAlign = t.textAlign);
|
|
1006
|
+
let c = M(t.textColor);
|
|
1007
|
+
c !== void 0 && (n.textColor = c);
|
|
1008
|
+
let l = M(t.borderColor);
|
|
1009
|
+
return l !== void 0 && (n.borderColor = l), typeof t.textWrap == "number" && Number.isFinite(t.textWrap) && t.textWrap >= 0 && (n.textWrap = t.textWrap === 0 ? 0 : Math.min(an, Math.max(on, t.textWrap))), n;
|
|
995
1010
|
}
|
|
996
1011
|
//#endregion
|
|
997
1012
|
//#region src/utils/chartTypeOptions.ts
|
|
998
|
-
var
|
|
999
|
-
function
|
|
1000
|
-
if (!
|
|
1013
|
+
var N = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, un = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, P = (e) => typeof e == "object" && !!e && !Array.isArray(e);
|
|
1014
|
+
function dn(e) {
|
|
1015
|
+
if (!P(e)) return {};
|
|
1001
1016
|
let t = {};
|
|
1002
|
-
if (
|
|
1017
|
+
if (P(e.renko)) {
|
|
1003
1018
|
let { boxSize: n, atrPeriod: r } = e.renko;
|
|
1004
1019
|
t.renko = {
|
|
1005
|
-
...
|
|
1006
|
-
...
|
|
1020
|
+
...N(n) || n === "atr" ? { boxSize: n } : {},
|
|
1021
|
+
...un(r, 1, 500) ? { atrPeriod: r } : {}
|
|
1007
1022
|
};
|
|
1008
1023
|
}
|
|
1009
|
-
if (
|
|
1024
|
+
if (P(e.lineBreak)) {
|
|
1010
1025
|
let { lines: n } = e.lineBreak;
|
|
1011
|
-
t.lineBreak =
|
|
1026
|
+
t.lineBreak = un(n, 1, 10) ? { lines: n } : {};
|
|
1012
1027
|
}
|
|
1013
|
-
if (
|
|
1028
|
+
if (P(e.kagi)) {
|
|
1014
1029
|
let { reversal: n, reversalType: r } = e.kagi;
|
|
1015
1030
|
t.kagi = {
|
|
1016
|
-
...
|
|
1031
|
+
...N(n) ? { reversal: n } : {},
|
|
1017
1032
|
...r === "percent" || r === "price" ? { reversalType: r } : {}
|
|
1018
1033
|
};
|
|
1019
1034
|
}
|
|
1020
|
-
if (
|
|
1035
|
+
if (P(e.pointAndFigure)) {
|
|
1021
1036
|
let { boxSize: n, reversal: r } = e.pointAndFigure;
|
|
1022
1037
|
t.pointAndFigure = {
|
|
1023
|
-
...
|
|
1024
|
-
...
|
|
1038
|
+
...N(n) || n === "auto" ? { boxSize: n } : {},
|
|
1039
|
+
...un(r, 1, 10) ? { reversal: r } : {}
|
|
1025
1040
|
};
|
|
1026
1041
|
}
|
|
1027
|
-
if (
|
|
1042
|
+
if (P(e.rangeBars)) {
|
|
1028
1043
|
let { range: n } = e.rangeBars;
|
|
1029
|
-
t.rangeBars =
|
|
1044
|
+
t.rangeBars = N(n) || n === "auto" ? { range: n } : {};
|
|
1030
1045
|
}
|
|
1031
1046
|
return t;
|
|
1032
1047
|
}
|
|
1033
1048
|
//#endregion
|
|
1034
1049
|
//#region src/constants/themes.ts
|
|
1035
|
-
var
|
|
1036
|
-
family:
|
|
1050
|
+
var fn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", pn = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif", mn = {
|
|
1051
|
+
family: fn,
|
|
1037
1052
|
sizeSmall: 11,
|
|
1038
1053
|
sizeMedium: 13,
|
|
1039
1054
|
sizeLarge: 15
|
|
1040
|
-
},
|
|
1055
|
+
}, F = {
|
|
1041
1056
|
amber: "#f2a93b",
|
|
1042
1057
|
up: "#1c9e6d",
|
|
1043
1058
|
down: "#e8505b",
|
|
@@ -1048,67 +1063,67 @@ var cn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
|
|
|
1048
1063
|
rose: "#e25592",
|
|
1049
1064
|
neutral: "#7d8696",
|
|
1050
1065
|
ink: "#131416"
|
|
1051
|
-
},
|
|
1052
|
-
function
|
|
1053
|
-
return
|
|
1066
|
+
}, hn = .22;
|
|
1067
|
+
function I(e) {
|
|
1068
|
+
return p(e, hn);
|
|
1054
1069
|
}
|
|
1055
|
-
var
|
|
1070
|
+
var gn = "#fbfaf6", L = "#1b1d21", _n = "#131416", R = "#e6e3dc", vn = "#1f7a5c", yn = "#b8423f", bn = "#4fae8a", xn = "#e2706b", Sn = "#6a6966", Cn = "#8d8a84", wn = {
|
|
1056
1071
|
ceiling: "#FF00FF",
|
|
1057
1072
|
floor: "#00FFFF",
|
|
1058
1073
|
reference: "#FFD700"
|
|
1059
|
-
},
|
|
1074
|
+
}, Tn = {
|
|
1060
1075
|
ceiling: "#a21caf",
|
|
1061
1076
|
floor: "#0e7490",
|
|
1062
1077
|
reference: "#8a6a00"
|
|
1063
|
-
},
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
],
|
|
1078
|
+
}, En = [
|
|
1079
|
+
F.blue,
|
|
1080
|
+
F.ochre,
|
|
1081
|
+
F.violet,
|
|
1082
|
+
F.cyan,
|
|
1083
|
+
F.rose
|
|
1084
|
+
], Dn = {
|
|
1070
1085
|
name: "dark",
|
|
1071
|
-
background:
|
|
1072
|
-
text:
|
|
1086
|
+
background: _n,
|
|
1087
|
+
text: R,
|
|
1073
1088
|
textSecondary: "#8d8b86",
|
|
1074
1089
|
grid: "#1d1e21",
|
|
1075
|
-
crosshair:
|
|
1076
|
-
candleUp:
|
|
1077
|
-
candleDown:
|
|
1078
|
-
candleUpWick:
|
|
1079
|
-
candleDownWick:
|
|
1080
|
-
lineColor:
|
|
1081
|
-
areaTopColor:
|
|
1082
|
-
areaBottomColor:
|
|
1083
|
-
volumeUp:
|
|
1084
|
-
volumeDown:
|
|
1090
|
+
crosshair: Sn,
|
|
1091
|
+
candleUp: bn,
|
|
1092
|
+
candleDown: xn,
|
|
1093
|
+
candleUpWick: bn,
|
|
1094
|
+
candleDownWick: xn,
|
|
1095
|
+
lineColor: R,
|
|
1096
|
+
areaTopColor: p(R, .14),
|
|
1097
|
+
areaBottomColor: p(R, 0),
|
|
1098
|
+
volumeUp: p(R, .14),
|
|
1099
|
+
volumeDown: p(R, .08),
|
|
1085
1100
|
axisLine: "#2a2b2f",
|
|
1086
1101
|
axisLabel: "#a9a6a0",
|
|
1087
1102
|
axisLabelBackground: "#232427",
|
|
1088
|
-
font:
|
|
1089
|
-
priceLimits:
|
|
1090
|
-
},
|
|
1103
|
+
font: mn,
|
|
1104
|
+
priceLimits: wn
|
|
1105
|
+
}, On = {
|
|
1091
1106
|
name: "light",
|
|
1092
|
-
background:
|
|
1093
|
-
text:
|
|
1107
|
+
background: gn,
|
|
1108
|
+
text: L,
|
|
1094
1109
|
textSecondary: "#6b6f76",
|
|
1095
1110
|
grid: "#ece8df",
|
|
1096
|
-
crosshair:
|
|
1097
|
-
candleUp:
|
|
1098
|
-
candleDown:
|
|
1099
|
-
candleUpWick:
|
|
1100
|
-
candleDownWick:
|
|
1101
|
-
lineColor:
|
|
1102
|
-
areaTopColor:
|
|
1103
|
-
areaBottomColor:
|
|
1104
|
-
volumeUp:
|
|
1105
|
-
volumeDown:
|
|
1111
|
+
crosshair: Cn,
|
|
1112
|
+
candleUp: vn,
|
|
1113
|
+
candleDown: yn,
|
|
1114
|
+
candleUpWick: vn,
|
|
1115
|
+
candleDownWick: yn,
|
|
1116
|
+
lineColor: L,
|
|
1117
|
+
areaTopColor: p(L, .12),
|
|
1118
|
+
areaBottomColor: p(L, 0),
|
|
1119
|
+
volumeUp: p(L, .13),
|
|
1120
|
+
volumeDown: p(L, .08),
|
|
1106
1121
|
axisLine: "#cfcac0",
|
|
1107
1122
|
axisLabel: "#4a4e57",
|
|
1108
1123
|
axisLabelBackground: "#eeebe3",
|
|
1109
|
-
font:
|
|
1110
|
-
priceLimits:
|
|
1111
|
-
},
|
|
1124
|
+
font: mn,
|
|
1125
|
+
priceLimits: Tn
|
|
1126
|
+
}, z = {
|
|
1112
1127
|
name: "terminal",
|
|
1113
1128
|
background: "#0E0E0E",
|
|
1114
1129
|
text: "#C0C0C0",
|
|
@@ -1122,8 +1137,8 @@ var fn = "#fbfaf6", R = "#1b1d21", pn = "#131416", z = "#e6e3dc", mn = "#1f7a5c"
|
|
|
1122
1137
|
lineColor: "#3D8BFD",
|
|
1123
1138
|
areaTopColor: "rgba(61, 139, 253, 0.3)",
|
|
1124
1139
|
areaBottomColor: "rgba(61, 139, 253, 0.0)",
|
|
1125
|
-
volumeUp:
|
|
1126
|
-
volumeDown:
|
|
1140
|
+
volumeUp: I("#00FF87"),
|
|
1141
|
+
volumeDown: I("#FF3B4D"),
|
|
1127
1142
|
axisLine: "#1A1A1A",
|
|
1128
1143
|
axisLabel: "#8A8A8A",
|
|
1129
1144
|
axisLabelBackground: "#1A1A1A",
|
|
@@ -1133,11 +1148,11 @@ var fn = "#fbfaf6", R = "#1b1d21", pn = "#131416", z = "#e6e3dc", mn = "#1f7a5c"
|
|
|
1133
1148
|
sizeMedium: 12,
|
|
1134
1149
|
sizeLarge: 14
|
|
1135
1150
|
}
|
|
1136
|
-
},
|
|
1137
|
-
function
|
|
1151
|
+
}, kn = new Set([z.volumeUp, z.volumeDown]);
|
|
1152
|
+
function B(e) {
|
|
1138
1153
|
let t = (e, t) => {
|
|
1139
|
-
if (!
|
|
1140
|
-
let n =
|
|
1154
|
+
if (!kn.has(e)) return e;
|
|
1155
|
+
let n = I(t);
|
|
1141
1156
|
return n === t ? e : n;
|
|
1142
1157
|
};
|
|
1143
1158
|
return {
|
|
@@ -1147,67 +1162,67 @@ function V(e) {
|
|
|
1147
1162
|
}
|
|
1148
1163
|
//#endregion
|
|
1149
1164
|
//#region src/utils/chartStyle.ts
|
|
1150
|
-
var
|
|
1165
|
+
var An = [
|
|
1151
1166
|
"solid",
|
|
1152
1167
|
"dashed",
|
|
1153
1168
|
"dotted"
|
|
1154
|
-
],
|
|
1169
|
+
], jn = 20, Mn = 64, Nn = 2, Pn = [
|
|
1155
1170
|
/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
|
|
1156
1171
|
/^[a-z]{3,30}$/i,
|
|
1157
1172
|
/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
|
|
1158
1173
|
];
|
|
1159
|
-
function
|
|
1160
|
-
return typeof e == "string" && e.length <=
|
|
1174
|
+
function V(e) {
|
|
1175
|
+
return typeof e == "string" && e.length <= Mn && Pn.some((t) => t.test(e.trim()));
|
|
1161
1176
|
}
|
|
1162
|
-
function
|
|
1177
|
+
function Fn(e, t) {
|
|
1163
1178
|
switch (e) {
|
|
1164
|
-
case "color": return
|
|
1165
|
-
case "lineStyle": return
|
|
1166
|
-
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <=
|
|
1179
|
+
case "color": return V(t);
|
|
1180
|
+
case "lineStyle": return An.includes(t);
|
|
1181
|
+
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= jn;
|
|
1167
1182
|
case "boolean": return typeof t == "boolean";
|
|
1168
1183
|
}
|
|
1169
1184
|
}
|
|
1170
|
-
function
|
|
1185
|
+
function In(e) {
|
|
1171
1186
|
return Object.prototype.hasOwnProperty.call(t, e);
|
|
1172
1187
|
}
|
|
1173
|
-
function
|
|
1188
|
+
function Ln(e) {
|
|
1174
1189
|
let n = {}, r = [];
|
|
1175
1190
|
if (typeof e != "object" || !e || Array.isArray(e)) return {
|
|
1176
1191
|
overrides: {},
|
|
1177
1192
|
rejected: r
|
|
1178
1193
|
};
|
|
1179
|
-
for (let [i, a] of Object.entries(e))
|
|
1194
|
+
for (let [i, a] of Object.entries(e)) In(i) ? a === null ? n[i] = null : Fn(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
|
|
1180
1195
|
return {
|
|
1181
1196
|
overrides: n,
|
|
1182
1197
|
rejected: r
|
|
1183
1198
|
};
|
|
1184
1199
|
}
|
|
1185
|
-
function
|
|
1200
|
+
function Rn(e) {
|
|
1186
1201
|
if (typeof e != "object" || !e || Array.isArray(e)) return null;
|
|
1187
1202
|
let { background: t, separator: n } = e, r = {
|
|
1188
|
-
...
|
|
1189
|
-
...
|
|
1203
|
+
...V(t) ? { background: t } : {},
|
|
1204
|
+
...V(n) ? { separator: n } : {}
|
|
1190
1205
|
};
|
|
1191
1206
|
return Object.keys(r).length > 0 ? r : null;
|
|
1192
1207
|
}
|
|
1193
|
-
var
|
|
1194
|
-
function
|
|
1208
|
+
var zn = /^[A-Za-z0-9_]{1,32}$/;
|
|
1209
|
+
function Bn(e) {
|
|
1195
1210
|
if (typeof e != "object" || !e || Array.isArray(e)) return;
|
|
1196
1211
|
let t = {};
|
|
1197
1212
|
for (let [n, r] of Object.entries(e)) {
|
|
1198
|
-
if (!
|
|
1213
|
+
if (!zn.test(n) || typeof r != "object" || !r) continue;
|
|
1199
1214
|
let { lineStyle: e, visible: i } = r, a = {
|
|
1200
|
-
...
|
|
1215
|
+
...An.includes(e) ? { lineStyle: e } : {},
|
|
1201
1216
|
...typeof i == "boolean" ? { visible: i } : {}
|
|
1202
1217
|
};
|
|
1203
1218
|
Object.keys(a).length > 0 && (t[n] = a);
|
|
1204
1219
|
}
|
|
1205
1220
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
1206
1221
|
}
|
|
1207
|
-
function
|
|
1222
|
+
function Vn(e, t, n = 1) {
|
|
1208
1223
|
return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
|
|
1209
1224
|
}
|
|
1210
|
-
function
|
|
1225
|
+
function Hn(e, t, n) {
|
|
1211
1226
|
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;
|
|
1212
1227
|
return {
|
|
1213
1228
|
up: o,
|
|
@@ -1215,12 +1230,12 @@ function Rn(e, t, n) {
|
|
|
1215
1230
|
wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
|
|
1216
1231
|
wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
|
|
1217
1232
|
line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
|
|
1218
|
-
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ??
|
|
1233
|
+
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? Nn,
|
|
1219
1234
|
top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
|
|
1220
1235
|
bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
|
|
1221
1236
|
};
|
|
1222
1237
|
}
|
|
1223
|
-
function
|
|
1238
|
+
function H(e, t, n) {
|
|
1224
1239
|
return {
|
|
1225
1240
|
visible: e(`${t}.visible`) ?? n.visible,
|
|
1226
1241
|
color: e(`${t}.color`) ?? n.color,
|
|
@@ -1228,21 +1243,21 @@ function U(e, t, n) {
|
|
|
1228
1243
|
width: e(`${t}.width`) ?? n.width
|
|
1229
1244
|
};
|
|
1230
1245
|
}
|
|
1231
|
-
function
|
|
1232
|
-
let { style: r, ...i } = e, a = n, o = (e) => a[e], s =
|
|
1246
|
+
function Un(e, t, n) {
|
|
1247
|
+
let { style: r, ...i } = e, a = n, o = (e) => a[e], s = Hn(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
|
|
1233
1248
|
panes: {
|
|
1234
1249
|
background: l("panes.background", c),
|
|
1235
1250
|
separator: l("panes.separatorColor", i.axisLine),
|
|
1236
1251
|
title: l("panes.titleColor", i.textSecondary)
|
|
1237
1252
|
},
|
|
1238
1253
|
grid: {
|
|
1239
|
-
horizontal:
|
|
1254
|
+
horizontal: H(o, "grid.horizontal", {
|
|
1240
1255
|
visible: !0,
|
|
1241
1256
|
color: i.grid,
|
|
1242
1257
|
style: "solid",
|
|
1243
1258
|
width: 1
|
|
1244
1259
|
}),
|
|
1245
|
-
vertical:
|
|
1260
|
+
vertical: H(o, "grid.vertical", {
|
|
1246
1261
|
visible: !0,
|
|
1247
1262
|
color: i.grid,
|
|
1248
1263
|
style: "solid",
|
|
@@ -1250,13 +1265,13 @@ function zn(e, t, n) {
|
|
|
1250
1265
|
})
|
|
1251
1266
|
},
|
|
1252
1267
|
crosshair: {
|
|
1253
|
-
horizontal:
|
|
1268
|
+
horizontal: H(o, "crosshair.horizontal", {
|
|
1254
1269
|
visible: !0,
|
|
1255
1270
|
color: i.crosshair,
|
|
1256
1271
|
style: "solid",
|
|
1257
1272
|
width: 1
|
|
1258
1273
|
}),
|
|
1259
|
-
vertical:
|
|
1274
|
+
vertical: H(o, "crosshair.vertical", {
|
|
1260
1275
|
visible: !0,
|
|
1261
1276
|
color: i.crosshair,
|
|
1262
1277
|
style: "solid",
|
|
@@ -1328,7 +1343,7 @@ function zn(e, t, n) {
|
|
|
1328
1343
|
style: d
|
|
1329
1344
|
};
|
|
1330
1345
|
}
|
|
1331
|
-
var
|
|
1346
|
+
var Wn = {
|
|
1332
1347
|
"background.color": (e) => e.background,
|
|
1333
1348
|
"panes.background": (e, t) => t.panes.background,
|
|
1334
1349
|
"panes.separatorColor": (e, t) => t.panes.separator,
|
|
@@ -1347,8 +1362,8 @@ var Bn = {
|
|
|
1347
1362
|
"lastPrice.downColor": (e, t) => t.lastPrice.down,
|
|
1348
1363
|
"lastPrice.style": (e, t) => t.lastPrice.style,
|
|
1349
1364
|
"lastPrice.width": (e, t) => t.lastPrice.width,
|
|
1350
|
-
"volume.upColor": (e) =>
|
|
1351
|
-
"volume.downColor": (e) =>
|
|
1365
|
+
"volume.upColor": (e) => B(e).up,
|
|
1366
|
+
"volume.downColor": (e) => B(e).down,
|
|
1352
1367
|
"sessionBreaks.color": (e, t) => t.sessionBreaks.color,
|
|
1353
1368
|
"sessionBreaks.style": (e, t) => t.sessionBreaks.style,
|
|
1354
1369
|
"sessionBreaks.width": (e, t) => t.sessionBreaks.width,
|
|
@@ -1365,16 +1380,16 @@ var Bn = {
|
|
|
1365
1380
|
"tradeZones.lossColor": (e, t) => t.tradeZones.loss,
|
|
1366
1381
|
"tradeZones.activeColor": (e, t) => t.tradeZones.active,
|
|
1367
1382
|
"drawings.handleColor": (e, t) => t.drawings.handle
|
|
1368
|
-
},
|
|
1383
|
+
}, Gn = {
|
|
1369
1384
|
visible: "visible",
|
|
1370
1385
|
color: "color",
|
|
1371
1386
|
style: "style",
|
|
1372
1387
|
width: "width"
|
|
1373
1388
|
};
|
|
1374
|
-
function
|
|
1389
|
+
function Kn(e, t, n, r = "candlestick") {
|
|
1375
1390
|
let i = n.split(".");
|
|
1376
1391
|
if (i[0] === "series") {
|
|
1377
|
-
let n =
|
|
1392
|
+
let n = Hn(e, (e) => t[e], i[1]);
|
|
1378
1393
|
switch (i[2]) {
|
|
1379
1394
|
case "upColor": return n.up;
|
|
1380
1395
|
case "downColor": return n.down;
|
|
@@ -1387,12 +1402,12 @@ function Hn(e, t, n, r = "candlestick") {
|
|
|
1387
1402
|
case "bottomColor": return n.bottom;
|
|
1388
1403
|
}
|
|
1389
1404
|
}
|
|
1390
|
-
let a =
|
|
1391
|
-
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][
|
|
1405
|
+
let a = Un(e, r, t), o = a.style;
|
|
1406
|
+
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][Gn[i[2]]] : Wn[n]?.(a, o) ?? null;
|
|
1392
1407
|
}
|
|
1393
1408
|
//#endregion
|
|
1394
1409
|
//#region src/constants/defaults.ts
|
|
1395
|
-
var
|
|
1410
|
+
var qn = {
|
|
1396
1411
|
autoScale: !0,
|
|
1397
1412
|
rightMargin: 5,
|
|
1398
1413
|
minBarSpacing: 2,
|
|
@@ -1403,7 +1418,7 @@ var Un = {
|
|
|
1403
1418
|
vLineStyle: "solid"
|
|
1404
1419
|
},
|
|
1405
1420
|
crosshair: { mode: "magnet" }
|
|
1406
|
-
},
|
|
1421
|
+
}, Jn = [
|
|
1407
1422
|
"1s",
|
|
1408
1423
|
"1m",
|
|
1409
1424
|
"3m",
|
|
@@ -1420,7 +1435,7 @@ var Un = {
|
|
|
1420
1435
|
"3d",
|
|
1421
1436
|
"1w",
|
|
1422
1437
|
"1M"
|
|
1423
|
-
],
|
|
1438
|
+
], Yn = [
|
|
1424
1439
|
"1m",
|
|
1425
1440
|
"5m",
|
|
1426
1441
|
"15m",
|
|
@@ -1434,7 +1449,7 @@ var Un = {
|
|
|
1434
1449
|
"3M",
|
|
1435
1450
|
"6M",
|
|
1436
1451
|
"12M"
|
|
1437
|
-
],
|
|
1452
|
+
], Xn = [
|
|
1438
1453
|
"1m",
|
|
1439
1454
|
"5m",
|
|
1440
1455
|
"15m",
|
|
@@ -1444,7 +1459,7 @@ var Un = {
|
|
|
1444
1459
|
"1d",
|
|
1445
1460
|
"1w",
|
|
1446
1461
|
"1M"
|
|
1447
|
-
],
|
|
1462
|
+
], Zn = [
|
|
1448
1463
|
"1m",
|
|
1449
1464
|
"5m",
|
|
1450
1465
|
"15m",
|
|
@@ -1452,7 +1467,7 @@ var Un = {
|
|
|
1452
1467
|
"4h",
|
|
1453
1468
|
"1d",
|
|
1454
1469
|
"1w"
|
|
1455
|
-
],
|
|
1470
|
+
], Qn = 8, $n = 2, er = 70, tr = 30, nr = 60, rr = 120, ir = (1 + Math.sqrt(5)) / 2, ar = [
|
|
1456
1471
|
1,
|
|
1457
1472
|
2,
|
|
1458
1473
|
3,
|
|
@@ -1464,12 +1479,12 @@ var Un = {
|
|
|
1464
1479
|
55,
|
|
1465
1480
|
89
|
|
1466
1481
|
];
|
|
1467
|
-
function
|
|
1468
|
-
return Math.round(e *
|
|
1482
|
+
function or(e, t, n = 1) {
|
|
1483
|
+
return Math.round(e * ir ** (t / n));
|
|
1469
1484
|
}
|
|
1470
1485
|
//#endregion
|
|
1471
1486
|
//#region src/i18n/en.ts
|
|
1472
|
-
var
|
|
1487
|
+
var U = {
|
|
1473
1488
|
candlestick: "Candlestick",
|
|
1474
1489
|
line: "Line",
|
|
1475
1490
|
area: "Area",
|
|
@@ -1572,7 +1587,7 @@ var W = {
|
|
|
1572
1587
|
error: "Error",
|
|
1573
1588
|
numberDecimalSeparator: ".",
|
|
1574
1589
|
numberGroupSeparator: ","
|
|
1575
|
-
},
|
|
1590
|
+
}, sr = {
|
|
1576
1591
|
candlestick: "Nến",
|
|
1577
1592
|
line: "Đường",
|
|
1578
1593
|
area: "Vùng",
|
|
@@ -1675,72 +1690,72 @@ var W = {
|
|
|
1675
1690
|
error: "Lỗi",
|
|
1676
1691
|
numberDecimalSeparator: ",",
|
|
1677
1692
|
numberGroupSeparator: "."
|
|
1678
|
-
},
|
|
1679
|
-
function
|
|
1680
|
-
|
|
1693
|
+
}, W = new Map([["en", U], ["vi", sr]]), G = "en", cr = U;
|
|
1694
|
+
function lr(e) {
|
|
1695
|
+
G = e, cr = W.get(e) ?? U;
|
|
1681
1696
|
}
|
|
1682
|
-
function
|
|
1683
|
-
return
|
|
1697
|
+
function ur() {
|
|
1698
|
+
return G;
|
|
1684
1699
|
}
|
|
1685
|
-
function
|
|
1686
|
-
return
|
|
1700
|
+
function dr(e) {
|
|
1701
|
+
return cr[e] ?? U[e] ?? e;
|
|
1687
1702
|
}
|
|
1688
|
-
function
|
|
1689
|
-
|
|
1703
|
+
function fr(e, t) {
|
|
1704
|
+
W.set(e, t);
|
|
1690
1705
|
}
|
|
1691
|
-
function
|
|
1692
|
-
return
|
|
1706
|
+
function pr(e) {
|
|
1707
|
+
return W.get(e ?? G) ?? U;
|
|
1693
1708
|
}
|
|
1694
|
-
function
|
|
1695
|
-
let r =
|
|
1709
|
+
function K(e, t = 2, n) {
|
|
1710
|
+
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 = "";
|
|
1696
1711
|
for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
|
|
1697
1712
|
return c && (u = "-" + u), s ? u + i + s : u;
|
|
1698
1713
|
}
|
|
1699
|
-
function
|
|
1700
|
-
return
|
|
1714
|
+
function mr(e) {
|
|
1715
|
+
return K(e, 0, "vi");
|
|
1701
1716
|
}
|
|
1702
|
-
var
|
|
1717
|
+
var hr = [
|
|
1703
1718
|
[0xe8d4a51000, "조"],
|
|
1704
1719
|
[1e8, "억"],
|
|
1705
1720
|
[1e4, "만"]
|
|
1706
1721
|
];
|
|
1707
|
-
function
|
|
1722
|
+
function gr(e) {
|
|
1708
1723
|
return /^ko([-_]|$)/i.test(e);
|
|
1709
1724
|
}
|
|
1710
|
-
function
|
|
1725
|
+
function _r(e, t, n) {
|
|
1711
1726
|
try {
|
|
1712
|
-
return
|
|
1727
|
+
return k(e, t, n);
|
|
1713
1728
|
} catch {
|
|
1714
|
-
return
|
|
1729
|
+
return K(e, t, "en");
|
|
1715
1730
|
}
|
|
1716
1731
|
}
|
|
1717
|
-
function
|
|
1718
|
-
let n = t ??
|
|
1732
|
+
function vr(e, t) {
|
|
1733
|
+
let n = t ?? G;
|
|
1719
1734
|
if (!Number.isFinite(e)) return String(e);
|
|
1720
|
-
if (
|
|
1721
|
-
for (let [t, r] of
|
|
1722
|
-
return
|
|
1735
|
+
if (gr(n)) {
|
|
1736
|
+
for (let [t, r] of hr) if (Math.round(e / t * 100) >= 100) return K(e / t, 2, n) + r;
|
|
1737
|
+
return K(e, 0, n);
|
|
1723
1738
|
}
|
|
1724
|
-
let r =
|
|
1739
|
+
let r = W.has(n) ? (e, t) => K(e, t, n) : (e, t) => _r(e, t, n);
|
|
1725
1740
|
return e >= 1e9 ? r(e / 1e9, 2) + "B" : e >= 1e6 ? r(e / 1e6, 2) + "M" : e >= 1e3 ? r(e / 1e3, 2) + "K" : r(e, 0);
|
|
1726
1741
|
}
|
|
1727
1742
|
//#endregion
|
|
1728
1743
|
//#region src/market/presets.ts
|
|
1729
|
-
var
|
|
1744
|
+
var q = {
|
|
1730
1745
|
up: "#22C55E",
|
|
1731
1746
|
down: "#EF4444",
|
|
1732
1747
|
unchanged: "#EAB308",
|
|
1733
1748
|
ceiling: "#D946EF",
|
|
1734
1749
|
floor: "#06B6D4",
|
|
1735
1750
|
reference: "#EAB308"
|
|
1736
|
-
},
|
|
1751
|
+
}, J = "Asia/Ho_Chi_Minh", yr = {
|
|
1737
1752
|
up: "#E8313F",
|
|
1738
1753
|
down: "#2F6FEB",
|
|
1739
1754
|
unchanged: "#8B8F99",
|
|
1740
1755
|
ceiling: "#C2121F",
|
|
1741
1756
|
floor: "#1E4FC2",
|
|
1742
1757
|
reference: "#8B8F99"
|
|
1743
|
-
},
|
|
1758
|
+
}, br = "Asia/Seoul", xr = [
|
|
1744
1759
|
{
|
|
1745
1760
|
name: "ATO",
|
|
1746
1761
|
startTime: "09:00",
|
|
@@ -1771,7 +1786,7 @@ var J = {
|
|
|
1771
1786
|
endTime: "14:45",
|
|
1772
1787
|
type: "preClose"
|
|
1773
1788
|
}
|
|
1774
|
-
],
|
|
1789
|
+
], Sr = [
|
|
1775
1790
|
{
|
|
1776
1791
|
name: "Phiên 1",
|
|
1777
1792
|
startTime: "09:15",
|
|
@@ -1802,7 +1817,7 @@ var J = {
|
|
|
1802
1817
|
endTime: "15:00",
|
|
1803
1818
|
type: "postClose"
|
|
1804
1819
|
}
|
|
1805
|
-
],
|
|
1820
|
+
], Cr = [
|
|
1806
1821
|
{
|
|
1807
1822
|
name: "Phiên 1",
|
|
1808
1823
|
startTime: "09:15",
|
|
@@ -1821,7 +1836,7 @@ var J = {
|
|
|
1821
1836
|
endTime: "14:30",
|
|
1822
1837
|
type: "continuous"
|
|
1823
1838
|
}
|
|
1824
|
-
],
|
|
1839
|
+
], wr = [
|
|
1825
1840
|
{
|
|
1826
1841
|
name: "ATO",
|
|
1827
1842
|
startTime: "08:45",
|
|
@@ -1852,7 +1867,7 @@ var J = {
|
|
|
1852
1867
|
endTime: "14:45",
|
|
1853
1868
|
type: "preClose"
|
|
1854
1869
|
}
|
|
1855
|
-
],
|
|
1870
|
+
], Tr = [
|
|
1856
1871
|
{
|
|
1857
1872
|
name: "장전 동시호가",
|
|
1858
1873
|
startTime: "08:30",
|
|
@@ -1883,7 +1898,7 @@ var J = {
|
|
|
1883
1898
|
endTime: "20:00",
|
|
1884
1899
|
type: "postClose"
|
|
1885
1900
|
}
|
|
1886
|
-
],
|
|
1901
|
+
], Er = [
|
|
1887
1902
|
{
|
|
1888
1903
|
name: "프리마켓",
|
|
1889
1904
|
startTime: "08:00",
|
|
@@ -1902,7 +1917,7 @@ var J = {
|
|
|
1902
1917
|
endTime: "20:00",
|
|
1903
1918
|
type: "postClose"
|
|
1904
1919
|
}
|
|
1905
|
-
],
|
|
1920
|
+
], Dr = [
|
|
1906
1921
|
{
|
|
1907
1922
|
from: 0,
|
|
1908
1923
|
step: 1
|
|
@@ -1931,7 +1946,7 @@ var J = {
|
|
|
1931
1946
|
from: 5e5,
|
|
1932
1947
|
step: 1e3
|
|
1933
1948
|
}
|
|
1934
|
-
],
|
|
1949
|
+
], Or = [
|
|
1935
1950
|
{
|
|
1936
1951
|
from: 0,
|
|
1937
1952
|
step: 1e-8
|
|
@@ -1992,7 +2007,7 @@ var J = {
|
|
|
1992
2007
|
from: 1e6,
|
|
1993
2008
|
step: 1e3
|
|
1994
2009
|
}
|
|
1995
|
-
],
|
|
2010
|
+
], kr = {
|
|
1996
2011
|
type: "stock",
|
|
1997
2012
|
exchange: "HOSE",
|
|
1998
2013
|
currency: "VND",
|
|
@@ -2013,48 +2028,48 @@ var J = {
|
|
|
2013
2028
|
step: .1
|
|
2014
2029
|
}
|
|
2015
2030
|
],
|
|
2016
|
-
timeZone:
|
|
2031
|
+
timeZone: J,
|
|
2017
2032
|
priceLimits: {
|
|
2018
2033
|
enabled: !0,
|
|
2019
2034
|
ceilingPercent: 7,
|
|
2020
2035
|
floorPercent: 7
|
|
2021
2036
|
},
|
|
2022
|
-
sessions:
|
|
2023
|
-
colorScheme:
|
|
2024
|
-
},
|
|
2025
|
-
...
|
|
2037
|
+
sessions: xr,
|
|
2038
|
+
colorScheme: q
|
|
2039
|
+
}, Ar = {
|
|
2040
|
+
...kr,
|
|
2026
2041
|
priceSteps: void 0
|
|
2027
|
-
},
|
|
2042
|
+
}, jr = {
|
|
2028
2043
|
type: "stock",
|
|
2029
2044
|
exchange: "HNX",
|
|
2030
2045
|
currency: "VND",
|
|
2031
2046
|
pricePrecision: 1,
|
|
2032
2047
|
volumeUnit: 100,
|
|
2033
2048
|
priceStep: .1,
|
|
2034
|
-
timeZone:
|
|
2049
|
+
timeZone: J,
|
|
2035
2050
|
priceLimits: {
|
|
2036
2051
|
enabled: !0,
|
|
2037
2052
|
ceilingPercent: 10,
|
|
2038
2053
|
floorPercent: 10
|
|
2039
2054
|
},
|
|
2040
|
-
sessions:
|
|
2041
|
-
colorScheme:
|
|
2042
|
-
},
|
|
2055
|
+
sessions: Sr,
|
|
2056
|
+
colorScheme: q
|
|
2057
|
+
}, Mr = {
|
|
2043
2058
|
type: "stock",
|
|
2044
2059
|
exchange: "UPCOM",
|
|
2045
2060
|
currency: "VND",
|
|
2046
2061
|
pricePrecision: 1,
|
|
2047
2062
|
volumeUnit: 100,
|
|
2048
2063
|
priceStep: .1,
|
|
2049
|
-
timeZone:
|
|
2064
|
+
timeZone: J,
|
|
2050
2065
|
priceLimits: {
|
|
2051
2066
|
enabled: !0,
|
|
2052
2067
|
ceilingPercent: 15,
|
|
2053
2068
|
floorPercent: 15
|
|
2054
2069
|
},
|
|
2055
|
-
sessions:
|
|
2056
|
-
colorScheme:
|
|
2057
|
-
},
|
|
2070
|
+
sessions: Cr,
|
|
2071
|
+
colorScheme: q
|
|
2072
|
+
}, Nr = {
|
|
2058
2073
|
type: "futures",
|
|
2059
2074
|
exchange: "HNX",
|
|
2060
2075
|
currency: "VND",
|
|
@@ -2062,50 +2077,50 @@ var J = {
|
|
|
2062
2077
|
volumeUnit: 1,
|
|
2063
2078
|
priceStep: .1,
|
|
2064
2079
|
contractMultiplier: 1e5,
|
|
2065
|
-
timeZone:
|
|
2080
|
+
timeZone: J,
|
|
2066
2081
|
priceLimits: {
|
|
2067
2082
|
enabled: !0,
|
|
2068
2083
|
ceilingPercent: 7,
|
|
2069
2084
|
floorPercent: 7
|
|
2070
2085
|
},
|
|
2071
|
-
sessions:
|
|
2072
|
-
colorScheme:
|
|
2073
|
-
},
|
|
2086
|
+
sessions: wr,
|
|
2087
|
+
colorScheme: q
|
|
2088
|
+
}, Pr = {
|
|
2074
2089
|
type: "stock",
|
|
2075
2090
|
exchange: "KRX",
|
|
2076
2091
|
currency: "KRW",
|
|
2077
2092
|
pricePrecision: 0,
|
|
2078
2093
|
volumeUnit: 1,
|
|
2079
2094
|
priceStep: 1,
|
|
2080
|
-
priceSteps:
|
|
2081
|
-
timeZone:
|
|
2095
|
+
priceSteps: Dr,
|
|
2096
|
+
timeZone: br,
|
|
2082
2097
|
priceLimits: {
|
|
2083
2098
|
enabled: !0,
|
|
2084
2099
|
ceilingPercent: 30,
|
|
2085
2100
|
floorPercent: 30,
|
|
2086
2101
|
roundMove: !0
|
|
2087
2102
|
},
|
|
2088
|
-
sessions:
|
|
2089
|
-
colorScheme:
|
|
2090
|
-
},
|
|
2091
|
-
...
|
|
2103
|
+
sessions: Tr,
|
|
2104
|
+
colorScheme: yr
|
|
2105
|
+
}, Fr = {
|
|
2106
|
+
...Pr,
|
|
2092
2107
|
exchange: "NXT",
|
|
2093
|
-
sessions:
|
|
2094
|
-
},
|
|
2108
|
+
sessions: Er
|
|
2109
|
+
}, Ir = {
|
|
2095
2110
|
type: "crypto",
|
|
2096
2111
|
exchange: "UPBIT",
|
|
2097
2112
|
currency: "KRW",
|
|
2098
2113
|
priceStep: 1e-8,
|
|
2099
|
-
priceSteps:
|
|
2100
|
-
timeZone:
|
|
2114
|
+
priceSteps: Or,
|
|
2115
|
+
timeZone: br,
|
|
2101
2116
|
priceLimits: { enabled: !1 },
|
|
2102
|
-
colorScheme:
|
|
2103
|
-
},
|
|
2117
|
+
colorScheme: yr
|
|
2118
|
+
}, Lr = {
|
|
2104
2119
|
type: "crypto",
|
|
2105
2120
|
currency: "USDT",
|
|
2106
2121
|
pricePrecision: 2,
|
|
2107
2122
|
priceLimits: { enabled: !1 }
|
|
2108
|
-
},
|
|
2123
|
+
}, Rr = {
|
|
2109
2124
|
type: "stock",
|
|
2110
2125
|
exchange: "NYSE",
|
|
2111
2126
|
currency: "USD",
|
|
@@ -2134,10 +2149,10 @@ var J = {
|
|
|
2134
2149
|
}
|
|
2135
2150
|
]
|
|
2136
2151
|
};
|
|
2137
|
-
function
|
|
2138
|
-
return
|
|
2152
|
+
function zr(e) {
|
|
2153
|
+
return Br(e, q);
|
|
2139
2154
|
}
|
|
2140
|
-
function
|
|
2155
|
+
function Br(e, t) {
|
|
2141
2156
|
return {
|
|
2142
2157
|
...e,
|
|
2143
2158
|
candleUp: t.up,
|
|
@@ -2146,33 +2161,33 @@ function Ir(e, t) {
|
|
|
2146
2161
|
candleDownWick: t.down
|
|
2147
2162
|
};
|
|
2148
2163
|
}
|
|
2149
|
-
var
|
|
2150
|
-
function
|
|
2164
|
+
var Y = 1e-9;
|
|
2165
|
+
function X(e, t) {
|
|
2151
2166
|
let n = t.priceStep;
|
|
2152
|
-
for (let r of t.priceSteps ?? []) e +
|
|
2167
|
+
for (let r of t.priceSteps ?? []) e + Y >= r.from && (n = r.step);
|
|
2153
2168
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
2154
2169
|
}
|
|
2155
|
-
function
|
|
2170
|
+
function Vr(e, t) {
|
|
2156
2171
|
let n = t.priceStep;
|
|
2157
|
-
for (let r of t.priceSteps ?? []) e -
|
|
2172
|
+
for (let r of t.priceSteps ?? []) e - Y > r.from && (n = r.step);
|
|
2158
2173
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
2159
2174
|
}
|
|
2160
2175
|
function Z(e, t, n = "nearest") {
|
|
2161
|
-
let r =
|
|
2176
|
+
let r = X(e, t);
|
|
2162
2177
|
if (r === void 0 || !Number.isFinite(e)) return e;
|
|
2163
|
-
let i = e / r, a = n === "down" ? Math.floor(i +
|
|
2164
|
-
return Number((a * r).toFixed(
|
|
2178
|
+
let i = e / r, a = n === "down" ? Math.floor(i + Y) : n === "up" ? Math.ceil(i - Y) : Math.round(i);
|
|
2179
|
+
return Number((a * r).toFixed(zt(r)));
|
|
2165
2180
|
}
|
|
2166
|
-
function
|
|
2181
|
+
function Hr(e, t) {
|
|
2167
2182
|
if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
|
|
2168
|
-
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 =
|
|
2183
|
+
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 = X(i, t);
|
|
2169
2184
|
if (s === void 0) return {
|
|
2170
2185
|
ceiling: a,
|
|
2171
2186
|
floor: o,
|
|
2172
2187
|
reference: i
|
|
2173
2188
|
};
|
|
2174
2189
|
let c = Z(i + s, t);
|
|
2175
|
-
if (Math.abs(i - s) <
|
|
2190
|
+
if (Math.abs(i - s) < Y) return {
|
|
2176
2191
|
ceiling: c,
|
|
2177
2192
|
floor: i,
|
|
2178
2193
|
reference: i
|
|
@@ -2186,14 +2201,14 @@ function zr(e, t) {
|
|
|
2186
2201
|
};
|
|
2187
2202
|
l = Z(i + Z(i * n, e, "down"), t, "down"), u = Z(i - Z(i * r, e, "down"), t, "down");
|
|
2188
2203
|
} else l = Z(a, t, "down"), u = Z(o, t, "up");
|
|
2189
|
-
return l <= i && (l = c), u >= i && (u = Z(i - (
|
|
2204
|
+
return l <= i && (l = c), u >= i && (u = Z(i - (Vr(i, t) ?? s), t)), u <= 0 && (u = i), {
|
|
2190
2205
|
ceiling: l,
|
|
2191
2206
|
floor: u,
|
|
2192
2207
|
reference: i
|
|
2193
2208
|
};
|
|
2194
2209
|
}
|
|
2195
2210
|
var Q = (e, t) => Math.round(e * t * 1e9) / 1e9;
|
|
2196
|
-
function
|
|
2211
|
+
function Ur(e, t) {
|
|
2197
2212
|
let n = Math.round(Math.log10(t));
|
|
2198
2213
|
return {
|
|
2199
2214
|
...e,
|
|
@@ -2209,11 +2224,11 @@ function Br(e, t) {
|
|
|
2209
2224
|
}
|
|
2210
2225
|
};
|
|
2211
2226
|
}
|
|
2212
|
-
var
|
|
2213
|
-
function
|
|
2227
|
+
var Wr = 6e4, Gr = 864e5;
|
|
2228
|
+
function Kr(e, t) {
|
|
2214
2229
|
let n, r;
|
|
2215
2230
|
if (t) {
|
|
2216
|
-
let i = new Date(e +
|
|
2231
|
+
let i = new Date(e + y(t, e) * Wr);
|
|
2217
2232
|
n = i.getUTCHours(), r = i.getUTCMinutes();
|
|
2218
2233
|
} else {
|
|
2219
2234
|
let t = new Date(e);
|
|
@@ -2221,31 +2236,31 @@ function Ur(e, t) {
|
|
|
2221
2236
|
}
|
|
2222
2237
|
return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
2223
2238
|
}
|
|
2224
|
-
function
|
|
2225
|
-
if (n !== void 0 && !
|
|
2226
|
-
let r =
|
|
2239
|
+
function qr(e, t = Date.now(), n) {
|
|
2240
|
+
if (n !== void 0 && !Pe(n)) return null;
|
|
2241
|
+
let r = Kr(t, n);
|
|
2227
2242
|
for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
|
|
2228
2243
|
return null;
|
|
2229
2244
|
}
|
|
2230
|
-
var $ = (e) => String(e).padStart(2, "0"),
|
|
2245
|
+
var $ = (e) => String(e).padStart(2, "0"), Jr = (e) => {
|
|
2231
2246
|
let t = new Date(e);
|
|
2232
2247
|
return `${t.getUTCFullYear()}-${$(t.getUTCMonth() + 1)}-${$(t.getUTCDate())}`;
|
|
2233
|
-
},
|
|
2234
|
-
function
|
|
2235
|
-
let r = Date.UTC(e, t - 1, 1), i = 1 + (
|
|
2248
|
+
}, Yr = 4, Xr = 7 * 36e5;
|
|
2249
|
+
function Zr(e, t, n) {
|
|
2250
|
+
let r = Date.UTC(e, t - 1, 1), i = 1 + (Yr - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
|
|
2236
2251
|
let t = new Date(e).getUTCDay();
|
|
2237
|
-
return t === 0 || t === 6 || (n?.(
|
|
2252
|
+
return t === 0 || t === 6 || (n?.(Jr(e)) ?? !1);
|
|
2238
2253
|
};
|
|
2239
|
-
for (; o(a);) a -=
|
|
2240
|
-
return
|
|
2254
|
+
for (; o(a);) a -= Gr;
|
|
2255
|
+
return Jr(a);
|
|
2241
2256
|
}
|
|
2242
|
-
function
|
|
2243
|
-
let n =
|
|
2257
|
+
function Qr(e, t) {
|
|
2258
|
+
let n = Jr(e + Xr), r = (e, n) => ({
|
|
2244
2259
|
symbol: `VN30F${$(e % 100)}${$(n)}`,
|
|
2245
2260
|
year: e,
|
|
2246
2261
|
month: n,
|
|
2247
|
-
lastTradingDay:
|
|
2248
|
-
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e +
|
|
2262
|
+
lastTradingDay: Zr(e, n, t)
|
|
2263
|
+
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + Xr), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
|
|
2249
2264
|
n > o.lastTradingDay && (o = i(o));
|
|
2250
2265
|
let s = [o, i(o)], c = i(s[1]);
|
|
2251
2266
|
for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
|
|
@@ -2253,7 +2268,7 @@ function Yr(e, t) {
|
|
|
2253
2268
|
}
|
|
2254
2269
|
//#endregion
|
|
2255
2270
|
//#region src/icons/iconSet.ts
|
|
2256
|
-
var
|
|
2271
|
+
var $r = {
|
|
2257
2272
|
cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
|
|
2258
2273
|
trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
|
|
2259
2274
|
trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
|
|
@@ -2387,7 +2402,7 @@ var Xr = {
|
|
|
2387
2402
|
]
|
|
2388
2403
|
] },
|
|
2389
2404
|
layoutGrid: { d: "M5 4.5h4.5a.5.5 0 0 1 .5.5v4.5a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V5a.5.5 0 0 1 .5-.5zM14.5 4.5H19a.5.5 0 0 1 .5.5v4.5a.5.5 0 0 1-.5.5h-4.5a.5.5 0 0 1-.5-.5V5a.5.5 0 0 1 .5-.5zM5 14h4.5a.5.5 0 0 1 .5.5V19a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5v-4.5A.5.5 0 0 1 5 14zM14.5 14H19a.5.5 0 0 1 .5.5V19a.5.5 0 0 1-.5.5h-4.5a.5.5 0 0 1-.5-.5v-4.5a.5.5 0 0 1 .5-.5z" }
|
|
2390
|
-
},
|
|
2405
|
+
}, ei = {
|
|
2391
2406
|
trendLine: {
|
|
2392
2407
|
d: "M5 18L19 6",
|
|
2393
2408
|
dots: [[5, 18], [19, 6]]
|
|
@@ -2740,7 +2755,7 @@ var Xr = {
|
|
|
2740
2755
|
],
|
|
2741
2756
|
dash: "M12 3V21"
|
|
2742
2757
|
}
|
|
2743
|
-
},
|
|
2758
|
+
}, ti = {
|
|
2744
2759
|
candlestick: {
|
|
2745
2760
|
d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
|
|
2746
2761
|
fills: ["M6.5 7h3a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1z", "M14.5 8.5h3a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1z"]
|
|
@@ -2807,21 +2822,21 @@ var Xr = {
|
|
|
2807
2822
|
"M16 4.5h3v6h-3z"
|
|
2808
2823
|
]
|
|
2809
2824
|
}
|
|
2810
|
-
},
|
|
2811
|
-
function
|
|
2812
|
-
let t =
|
|
2825
|
+
}, ni = 1.75, ri = .22, ii = /* @__PURE__ */ new WeakMap();
|
|
2826
|
+
function ai(e) {
|
|
2827
|
+
let t = ii.get(e);
|
|
2813
2828
|
if (t) return t;
|
|
2814
2829
|
let n = "";
|
|
2815
|
-
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${
|
|
2830
|
+
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${ri}" stroke="none"/>`);
|
|
2816
2831
|
for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
|
|
2817
2832
|
e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
|
|
2818
|
-
for (let [t, r, i =
|
|
2819
|
-
return
|
|
2833
|
+
for (let [t, r, i = ni] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
|
|
2834
|
+
return ii.set(e, n), n;
|
|
2820
2835
|
}
|
|
2821
|
-
function
|
|
2822
|
-
return `<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${
|
|
2836
|
+
function oi(e, t) {
|
|
2837
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${ai(e)}</svg>`;
|
|
2823
2838
|
}
|
|
2824
2839
|
//#endregion
|
|
2825
|
-
export { t as CHART_STYLE_KEYS,
|
|
2840
|
+
export { t as CHART_STYLE_KEYS, ti as CHART_TYPE_ICONS, wn as DARK_PRICE_LIMITS, z as DARK_TERMINAL, Dn as DARK_THEME, $n as DEFAULT_BAR_SPACING, Qn as DEFAULT_BAR_WIDTH, qn as DEFAULT_CHART_OPTIONS, n as DEFAULT_DRAWING_STYLE, fn as DEFAULT_FONT_FAMILY, rr as DEFAULT_PANEL_HEIGHT, o as DEFAULT_RECONNECT, i as DEFAULT_SIGNAL_STYLE, s as DEFAULT_STREAM_CONFIG, Zn as DEFAULT_TIMEFRAME_FAVORITES, a as DEFAULT_TRADE_ZONE_STYLE, r as DEFAULT_TRADING_CONFIG, ei as DRAWING_TOOL_ICONS, ar as FIBONACCI, Sr as HNX_SESSIONS, xr as HOSE_SESSIONS, ni as ICON_DOT_RADIUS, ri as ICON_SOFT_OPACITY, Tr as KRX_SESSIONS, yr as KR_COLORS, Tn as LIGHT_PRICE_LIMITS, On as LIGHT_THEME, e as LayerType, Lr as MARKET_CRYPTO, jr as MARKET_HNX, kr as MARKET_HOSE, Ar as MARKET_HOSE_ETF, Pr as MARKET_KRX, Fr as MARKET_NXT, Rr as MARKET_NYSE, Ir as MARKET_UPBIT_KRW, Mr as MARKET_UPCOM, Nr as MARKET_VN30F, nr as MIN_PANEL_HEIGHT, le as MS_TIME_THRESHOLD, Er as NXT_SESSIONS, ir as PHI, er as PRICE_AXIS_WIDTH, Ct as PRICE_SOURCES, pn as SANS_FONT_FAMILY, F as TC_PALETTE, En as TC_SERIES_COLORS, Jn as TIMEFRAMES_CRYPTO, Xn as TIMEFRAMES_FOREX, Yn as TIMEFRAMES_STOCK, tr as TIME_AXIS_HEIGHT, $r as UI_ICONS, Cr as UPCOM_SESSIONS, wr as VN30F_SESSIONS, q as VN_COLORS, hn as VOLUME_ALPHA, Ge as alignToTimeframe, ht as autoPricePrecision, dt as barDateParts, ut as barDateZone, ue as barTimeUnit, Ye as barsAreDaily, Kn as chartStyleValue, re as clamp, Hr as computePriceLimits, _e as computePriceRange, ce as computeTickStep, m as contrastRatio, Br as createMarketTheme, zr as createVNTheme, St as detectPrecision, Zt as drawingOption, U as en, me as findBarIndex, ge as fitPriceRange, vt as formatFraction, K as formatNumber, k as formatPrice, _t as formatPriceScaleLabel, We as formatTimestamp, mr as formatVND, xt as formatVolume, vr as formatVolumeLoc, yt as fractionTick, qr as getCurrentSession, ur as getLocale, pr as getLocaleStrings, ye as hexToRgba, oi as iconSvg, Dt as indicatorSource, Ee as inkOn, ae as inverseLerp, qe as isDateOnly, wt as isPriceSource, Ue as isTimeFrame, x as isUtcTimeZone, Pe as isValidTimeZone, ie as lerp, Se as lerpColor, Vn as lineDash, Ut as marketStatus, ve as mergeBar, se as niceNumber, fe as normalizeBar, de as normalizeBarTime, S as offsetAt, he as padPriceRange, Ot as parseIndicatorSource, w as parseTimeframe, or as phiStep, It as pickBaseTimeframe, bt as priceFormatterFor, X as priceStepAt, mt as priceTagText, Rt as rankSymbols, Ln as readChartStyleOverrides, dn as readChartTypeOptions, Bn as readIndicatorPlotStyles, ne as readNews, Rn as readPaneStyle, l as readQuote, Te as readableOn, fr as registerLocale, jt as resampleBars, Un as resolveChartTheme, Qt as resolveDrawingOptions, B as resolveVolumeColors, Z as roundToPriceStep, oe as roundToStep, Yt as sanitizeDrawingOptions, ln as sanitizeDrawingStyle, Ur as scaleMarketPrices, Vt as sessionMinute, lr as setLocale, pe as sliceVisibleData, Tt as sourcePrice, zt as stepDecimals, Bt as symbolTimeZone, dr as t, He as tickBarCount, Ke as timeParts, ct as timeframeBucketStart, at as timeframeFollowsDays, ot as timeframeSpansDays, T as timeframeToMs, Xe as tzLabel, gr as usesKoreanUnits, sr as vi, Qr as vn30fContracts, Zr as vn30fLastTradingDay, I as volumeColor, Ie as wallToUtc, p as withAlpha, y as zoneOffsetMinutes, Re as zonedDateFormatter };
|
|
2826
2841
|
|
|
2827
2842
|
//# sourceMappingURL=index.js.map
|