@tradecanvas/commons 1.80.0 → 1.81.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 +423 -422
- package/dist/index.js.map +1 -1
- package/dist/types/quote.d.ts.map +1 -1
- package/dist/utils/symbols.d.ts +6 -0
- package/dist/utils/symbols.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -166,7 +166,52 @@ var i = n.replace(/\s+/g, ""), a = {
|
|
|
166
166
|
autoScroll: !0,
|
|
167
167
|
showCurrentPriceLine: !0,
|
|
168
168
|
aggregateTicks: !1
|
|
169
|
-
}, d =
|
|
169
|
+
}, d = 160;
|
|
170
|
+
function ee(e) {
|
|
171
|
+
let t = e.lastIndexOf(":");
|
|
172
|
+
return t <= 0 || t === e.length - 1 ? e : e.slice(t + 1);
|
|
173
|
+
}
|
|
174
|
+
function te(e, t) {
|
|
175
|
+
if (!e) return 0;
|
|
176
|
+
if (e === t) return 1e3;
|
|
177
|
+
if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
|
|
178
|
+
let n = e.indexOf(t);
|
|
179
|
+
return n >= 0 ? 300 - Math.min(100, n) : 0;
|
|
180
|
+
}
|
|
181
|
+
function ne(e, t, n = 50, r) {
|
|
182
|
+
let i = t.trim().toUpperCase();
|
|
183
|
+
if (!i) return e.slice(0, n);
|
|
184
|
+
let a = [];
|
|
185
|
+
for (let t of e) {
|
|
186
|
+
let e = Math.max(te(t.symbol.toUpperCase(), i), te((t.description ?? "").toUpperCase(), i) * .8);
|
|
187
|
+
e > 0 && a.push({
|
|
188
|
+
info: t,
|
|
189
|
+
score: e + (r?.(t) ?? 0)
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
|
|
193
|
+
}
|
|
194
|
+
function re(e) {
|
|
195
|
+
let t = typeof e == "number" ? e : Number(e);
|
|
196
|
+
if (!Number.isFinite(t) || t <= 0) return 0;
|
|
197
|
+
for (let e = 0; e <= 12; e++) {
|
|
198
|
+
let n = t * 10 ** e;
|
|
199
|
+
if (Math.abs(n - Math.round(n)) < 1e-9 * Math.max(1, n)) return e;
|
|
200
|
+
}
|
|
201
|
+
return 12;
|
|
202
|
+
}
|
|
203
|
+
function ie(e) {
|
|
204
|
+
return e?.timeZone ?? e?.timezone;
|
|
205
|
+
}
|
|
206
|
+
function ae(e) {
|
|
207
|
+
let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
|
|
208
|
+
if (!t) return null;
|
|
209
|
+
let n = Number(t[1]), r = Number(t[2]);
|
|
210
|
+
return n === 24 && r === 0 ? 1440 : n < 24 && r < 60 ? n * 60 + r : null;
|
|
211
|
+
}
|
|
212
|
+
//#endregion
|
|
213
|
+
//#region src/types/quote.ts
|
|
214
|
+
var oe = [
|
|
170
215
|
"change",
|
|
171
216
|
"changePercent",
|
|
172
217
|
"open",
|
|
@@ -178,17 +223,17 @@ var i = n.replace(/\s+/g, ""), a = {
|
|
|
178
223
|
"ask",
|
|
179
224
|
"time"
|
|
180
225
|
];
|
|
181
|
-
function
|
|
226
|
+
function se(e) {
|
|
182
227
|
if (!e || typeof e != "object") return null;
|
|
183
228
|
let t = e, n = typeof t.symbol == "string" ? t.symbol.trim() : "";
|
|
184
|
-
if (!n || n.length >
|
|
229
|
+
if (!n || n.length > 160 || !ce(t.last)) return null;
|
|
185
230
|
let r = {
|
|
186
231
|
symbol: n,
|
|
187
232
|
last: t.last
|
|
188
233
|
};
|
|
189
|
-
for (let e of
|
|
234
|
+
for (let e of oe) {
|
|
190
235
|
let n = t[e];
|
|
191
|
-
|
|
236
|
+
ce(n) && (r[e] = n);
|
|
192
237
|
}
|
|
193
238
|
let i = r.prevClose ?? r.open;
|
|
194
239
|
if (r.change === void 0 && i !== void 0 && (r.change = r.last - i), r.changePercent === void 0 && r.change !== void 0) {
|
|
@@ -197,16 +242,16 @@ function ee(e) {
|
|
|
197
242
|
}
|
|
198
243
|
return r;
|
|
199
244
|
}
|
|
200
|
-
function
|
|
245
|
+
function ce(e) {
|
|
201
246
|
return typeof e == "number" && Number.isFinite(e);
|
|
202
247
|
}
|
|
203
248
|
//#endregion
|
|
204
249
|
//#region src/types/news.ts
|
|
205
|
-
var
|
|
250
|
+
var le = 300, ue = 1e3, f = (e, t) => {
|
|
206
251
|
if (typeof e != "string") return;
|
|
207
252
|
let n = e.trim();
|
|
208
253
|
return n ? n.slice(0, t) : void 0;
|
|
209
|
-
},
|
|
254
|
+
}, de = (e) => {
|
|
210
255
|
if (typeof e == "string") try {
|
|
211
256
|
let t = new URL(e);
|
|
212
257
|
return t.protocol === "https:" || t.protocol === "http:" ? t.href : void 0;
|
|
@@ -214,61 +259,61 @@ var ne = 300, re = 1e3, f = (e, t) => {
|
|
|
214
259
|
return;
|
|
215
260
|
}
|
|
216
261
|
};
|
|
217
|
-
function
|
|
262
|
+
function fe(e, t = 20) {
|
|
218
263
|
if (!Array.isArray(e)) return [];
|
|
219
264
|
let n = [];
|
|
220
265
|
for (let t of e) {
|
|
221
266
|
if (!t || typeof t != "object") continue;
|
|
222
|
-
let e = t, r = f(e.title,
|
|
267
|
+
let e = t, r = f(e.title, le);
|
|
223
268
|
if (!r || typeof e.time != "number" || !Number.isFinite(e.time)) continue;
|
|
224
269
|
let i = {
|
|
225
270
|
title: r,
|
|
226
271
|
time: e.time
|
|
227
|
-
}, a =
|
|
272
|
+
}, a = de(e.url);
|
|
228
273
|
a && (i.url = a);
|
|
229
|
-
let o = f(e.source,
|
|
274
|
+
let o = f(e.source, le);
|
|
230
275
|
o && (i.source = o);
|
|
231
|
-
let s = f(e.summary,
|
|
276
|
+
let s = f(e.summary, ue);
|
|
232
277
|
s && (i.summary = s);
|
|
233
|
-
let c = f(e.id,
|
|
278
|
+
let c = f(e.id, le);
|
|
234
279
|
c && (i.id = c), n.push(i);
|
|
235
280
|
}
|
|
236
281
|
return n.sort((e, t) => t.time - e.time).slice(0, Math.max(0, t));
|
|
237
282
|
}
|
|
238
283
|
//#endregion
|
|
239
284
|
//#region src/utils/math.ts
|
|
240
|
-
function
|
|
285
|
+
function pe(e, t, n) {
|
|
241
286
|
return Math.max(t, Math.min(n, e));
|
|
242
287
|
}
|
|
243
|
-
function
|
|
288
|
+
function me(e, t, n) {
|
|
244
289
|
return e + (t - e) * n;
|
|
245
290
|
}
|
|
246
|
-
function
|
|
291
|
+
function he(e, t, n) {
|
|
247
292
|
return e === t ? 0 : (n - e) / (t - e);
|
|
248
293
|
}
|
|
249
|
-
function
|
|
294
|
+
function ge(e, t) {
|
|
250
295
|
return Math.round(e / t) * t;
|
|
251
296
|
}
|
|
252
|
-
function
|
|
297
|
+
function _e(e, t) {
|
|
253
298
|
let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
|
|
254
299
|
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;
|
|
255
300
|
}
|
|
256
|
-
function
|
|
257
|
-
return
|
|
301
|
+
function ve(e, t, n) {
|
|
302
|
+
return _e(_e(t - e, !1) / (n - 1), !0);
|
|
258
303
|
}
|
|
259
304
|
//#endregion
|
|
260
305
|
//#region src/utils/data.ts
|
|
261
|
-
var
|
|
262
|
-
function
|
|
306
|
+
var ye = 1e11;
|
|
307
|
+
function be(e) {
|
|
263
308
|
let t = e.length > 0 ? e[e.length - 1].time : NaN;
|
|
264
309
|
return Number.isFinite(t) ? Math.abs(t) >= 1e11 ? 1 : 1e3 : 1;
|
|
265
310
|
}
|
|
266
|
-
function
|
|
311
|
+
function xe(e, t) {
|
|
267
312
|
return t === void 0 ? Math.abs(e) >= 1e11 ? e : e * 1e3 : e * t;
|
|
268
313
|
}
|
|
269
|
-
function
|
|
314
|
+
function Se(e) {
|
|
270
315
|
return {
|
|
271
|
-
time:
|
|
316
|
+
time: xe(e.time ?? e.t ?? 0),
|
|
272
317
|
open: e.open ?? e.o ?? 0,
|
|
273
318
|
high: e.high ?? e.h ?? 0,
|
|
274
319
|
low: e.low ?? e.l ?? 0,
|
|
@@ -276,11 +321,11 @@ function me(e) {
|
|
|
276
321
|
volume: e.volume ?? e.v ?? 0
|
|
277
322
|
};
|
|
278
323
|
}
|
|
279
|
-
function
|
|
324
|
+
function Ce(e, t, n) {
|
|
280
325
|
let r = Math.max(0, t), i = Math.min(e.length, n + 1);
|
|
281
326
|
return e.slice(r, i);
|
|
282
327
|
}
|
|
283
|
-
function
|
|
328
|
+
function we(e, t) {
|
|
284
329
|
let n = 0, r = e.length - 1;
|
|
285
330
|
for (; n <= r;) {
|
|
286
331
|
let i = n + r >>> 1;
|
|
@@ -290,7 +335,7 @@ function ge(e, t) {
|
|
|
290
335
|
}
|
|
291
336
|
return n;
|
|
292
337
|
}
|
|
293
|
-
function
|
|
338
|
+
function Te(e, t, n, r = !1) {
|
|
294
339
|
let i = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
|
|
295
340
|
if (Number.isFinite(i)) {
|
|
296
341
|
let r = i || Math.log(1 + 2 * n), a = Math.exp(r * n);
|
|
@@ -305,7 +350,7 @@ function _e(e, t, n, r = !1) {
|
|
|
305
350
|
max: t + a * n
|
|
306
351
|
};
|
|
307
352
|
}
|
|
308
|
-
function
|
|
353
|
+
function Ee(e, t, n, r = !1) {
|
|
309
354
|
let i = Math.max(1 - n.top - n.bottom, 2 ** -52), a = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
|
|
310
355
|
if (Number.isFinite(a)) {
|
|
311
356
|
let r = (a || Math.log(1.01)) / i;
|
|
@@ -320,7 +365,7 @@ function ve(e, t, n, r = !1) {
|
|
|
320
365
|
max: t + o * n.top
|
|
321
366
|
};
|
|
322
367
|
}
|
|
323
|
-
function
|
|
368
|
+
function De(e, t, n, r = .05, i = !1) {
|
|
324
369
|
if (e.length === 0) return {
|
|
325
370
|
min: 0,
|
|
326
371
|
max: 1
|
|
@@ -330,9 +375,9 @@ function ye(e, t, n, r = .05, i = !1) {
|
|
|
330
375
|
return s === Infinity ? {
|
|
331
376
|
min: 0,
|
|
332
377
|
max: 1
|
|
333
|
-
} :
|
|
378
|
+
} : Te(s, c, r, i);
|
|
334
379
|
}
|
|
335
|
-
function
|
|
380
|
+
function Oe(e, t) {
|
|
336
381
|
return {
|
|
337
382
|
...e,
|
|
338
383
|
high: Math.max(e.high, t.price),
|
|
@@ -343,18 +388,18 @@ function be(e, t) {
|
|
|
343
388
|
}
|
|
344
389
|
//#endregion
|
|
345
390
|
//#region src/utils/color.ts
|
|
346
|
-
function
|
|
391
|
+
function ke(e, t = 1) {
|
|
347
392
|
let n = e.slice(1);
|
|
348
393
|
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})`;
|
|
349
394
|
}
|
|
350
|
-
function
|
|
395
|
+
function p(e, t) {
|
|
351
396
|
let n = e.trim();
|
|
352
|
-
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return
|
|
397
|
+
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return ke(n, t);
|
|
353
398
|
let r = n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);
|
|
354
399
|
return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
|
|
355
400
|
}
|
|
356
|
-
var
|
|
357
|
-
function
|
|
401
|
+
var Ae = 3;
|
|
402
|
+
function m(e) {
|
|
358
403
|
let t = e.trim(), n = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(t);
|
|
359
404
|
if (n) {
|
|
360
405
|
let e = n[1];
|
|
@@ -377,14 +422,14 @@ function Ce(e) {
|
|
|
377
422
|
a: Math.min(1, Math.max(0, i))
|
|
378
423
|
};
|
|
379
424
|
}
|
|
380
|
-
function
|
|
381
|
-
let r =
|
|
425
|
+
function je(e, t, n) {
|
|
426
|
+
let r = m(e), i = m(t);
|
|
382
427
|
if (!r || !i) return n < .5 ? e : t;
|
|
383
428
|
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)}`;
|
|
384
|
-
return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(
|
|
429
|
+
return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(Ae))})`;
|
|
385
430
|
}
|
|
386
|
-
function
|
|
387
|
-
let t =
|
|
431
|
+
function Me(e) {
|
|
432
|
+
let t = m(e);
|
|
388
433
|
if (!t) return null;
|
|
389
434
|
let n = (e) => {
|
|
390
435
|
let t = e / 255;
|
|
@@ -393,25 +438,25 @@ function Te(e) {
|
|
|
393
438
|
return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b);
|
|
394
439
|
}
|
|
395
440
|
function h(e, t) {
|
|
396
|
-
let n =
|
|
441
|
+
let n = Me(e), r = Me(t);
|
|
397
442
|
return n === null || r === null ? null : (Math.max(n, r) + .05) / (Math.min(n, r) + .05);
|
|
398
443
|
}
|
|
399
|
-
var
|
|
400
|
-
function
|
|
444
|
+
var Ne = 20;
|
|
445
|
+
function Pe(e, t, n, r) {
|
|
401
446
|
let i = h(e, t);
|
|
402
447
|
if (i === null || i >= r) return e;
|
|
403
|
-
for (let i = 1; i <=
|
|
404
|
-
let a =
|
|
448
|
+
for (let i = 1; i <= Ne; i++) {
|
|
449
|
+
let a = je(e, n, i / Ne);
|
|
405
450
|
if ((h(a, t) ?? 0) >= r) return a;
|
|
406
451
|
}
|
|
407
452
|
return n;
|
|
408
453
|
}
|
|
409
|
-
function
|
|
454
|
+
function Fe(e, t, n) {
|
|
410
455
|
return (h(e, t) ?? 0) >= (h(e, n) ?? 0) ? t : n;
|
|
411
456
|
}
|
|
412
457
|
//#endregion
|
|
413
458
|
//#region src/utils/timezone.ts
|
|
414
|
-
var g = 6e4,
|
|
459
|
+
var g = 6e4, Ie = 1440 * g, _ = 15 * g, Le = 8192, Re = 7 * Ie, ze = 4096, Be = new Set([
|
|
415
460
|
"UTC",
|
|
416
461
|
"Etc/UTC",
|
|
417
462
|
"GMT",
|
|
@@ -422,9 +467,9 @@ var g = 6e4, ke = 1440 * g, _ = 15 * g, Ae = 8192, je = 7 * ke, Me = 4096, Ne =
|
|
|
422
467
|
"Etc/Universal",
|
|
423
468
|
"Zulu",
|
|
424
469
|
"Etc/Zulu"
|
|
425
|
-
]),
|
|
426
|
-
function
|
|
427
|
-
let t =
|
|
470
|
+
]), Ve = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map(), He = /* @__PURE__ */ new Map();
|
|
471
|
+
function Ue(e) {
|
|
472
|
+
let t = Ve.get(e);
|
|
428
473
|
return t || (t = new Intl.DateTimeFormat("en-US", {
|
|
429
474
|
timeZone: e,
|
|
430
475
|
hourCycle: "h23",
|
|
@@ -434,25 +479,25 @@ function Ie(e) {
|
|
|
434
479
|
hour: "numeric",
|
|
435
480
|
minute: "numeric",
|
|
436
481
|
second: "numeric"
|
|
437
|
-
}),
|
|
482
|
+
}), Ve.set(e, t)), t;
|
|
438
483
|
}
|
|
439
|
-
function
|
|
484
|
+
function We(e) {
|
|
440
485
|
if (!e) return !1;
|
|
441
486
|
try {
|
|
442
|
-
return
|
|
487
|
+
return Ue(e), !0;
|
|
443
488
|
} catch {
|
|
444
489
|
return !1;
|
|
445
490
|
}
|
|
446
491
|
}
|
|
447
|
-
function
|
|
448
|
-
if (!Number.isFinite(t) ||
|
|
449
|
-
let n =
|
|
450
|
-
n || (n = /* @__PURE__ */ new Map(),
|
|
451
|
-
let r = Math.floor(t /
|
|
452
|
-
return i || (i =
|
|
492
|
+
function y(e, t) {
|
|
493
|
+
if (!Number.isFinite(t) || Be.has(e)) return 0;
|
|
494
|
+
let n = He.get(e);
|
|
495
|
+
n || (n = /* @__PURE__ */ new Map(), He.set(e, n));
|
|
496
|
+
let r = Math.floor(t / Re), i = n.get(r);
|
|
497
|
+
return i || (i = Ge(e, r * Re), n.size >= ze && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
|
|
453
498
|
}
|
|
454
|
-
function
|
|
455
|
-
let n =
|
|
499
|
+
function Ge(e, t) {
|
|
500
|
+
let n = Ke(e, t), r = t + Re - _, i = Ke(e, r);
|
|
456
501
|
if (i === n) return {
|
|
457
502
|
before: n,
|
|
458
503
|
change: Infinity,
|
|
@@ -461,7 +506,7 @@ function Le(e, t) {
|
|
|
461
506
|
let a = t;
|
|
462
507
|
for (; r - a > _;) {
|
|
463
508
|
let t = a + Math.floor((r - a) / _ / 2) * _;
|
|
464
|
-
|
|
509
|
+
Ke(e, t) === n ? a = t : r = t;
|
|
465
510
|
}
|
|
466
511
|
return {
|
|
467
512
|
before: n,
|
|
@@ -469,11 +514,11 @@ function Le(e, t) {
|
|
|
469
514
|
after: i
|
|
470
515
|
};
|
|
471
516
|
}
|
|
472
|
-
function
|
|
517
|
+
function Ke(e, t) {
|
|
473
518
|
let n = Math.floor(t / _), r = `${e}|${n}`, i = v.get(r);
|
|
474
519
|
if (i !== void 0) return i;
|
|
475
520
|
let a = n * _, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
|
|
476
|
-
for (let t of
|
|
521
|
+
for (let t of Ue(e).formatToParts(new Date(a))) {
|
|
477
522
|
let e = Number(t.value);
|
|
478
523
|
switch (t.type) {
|
|
479
524
|
case "year":
|
|
@@ -497,23 +542,23 @@ function x(e, t) {
|
|
|
497
542
|
}
|
|
498
543
|
}
|
|
499
544
|
let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / g);
|
|
500
|
-
return v.size >=
|
|
501
|
-
}
|
|
502
|
-
function S(e) {
|
|
503
|
-
return e === 0 || typeof e == "string" && Ne.has(e);
|
|
545
|
+
return v.size >= Le && v.clear(), v.set(r, ee), ee;
|
|
504
546
|
}
|
|
505
|
-
function
|
|
506
|
-
return e ===
|
|
547
|
+
function b(e) {
|
|
548
|
+
return e === 0 || typeof e == "string" && Be.has(e);
|
|
507
549
|
}
|
|
508
|
-
function
|
|
509
|
-
|
|
510
|
-
if (n + C(t, n) * g === e) return n;
|
|
511
|
-
let r = e - C(t, e + ke) * g;
|
|
512
|
-
return r + C(t, r) * g === e ? r : n;
|
|
550
|
+
function x(e, t) {
|
|
551
|
+
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : y(e, t);
|
|
513
552
|
}
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
553
|
+
function qe(e, t) {
|
|
554
|
+
let n = e - x(t, e - Ie) * g;
|
|
555
|
+
if (n + x(t, n) * g === e) return n;
|
|
556
|
+
let r = e - x(t, e + Ie) * g;
|
|
557
|
+
return r + x(t, r) * g === e ? r : n;
|
|
558
|
+
}
|
|
559
|
+
var Je = /* @__PURE__ */ new Map();
|
|
560
|
+
function Ye(e, t, n) {
|
|
561
|
+
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = Je.get(r);
|
|
517
562
|
if (i) return i;
|
|
518
563
|
let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
|
|
519
564
|
try {
|
|
@@ -528,11 +573,11 @@ function Be(e, t, n) {
|
|
|
528
573
|
});
|
|
529
574
|
}
|
|
530
575
|
let s = typeof n == "number" ? n * g : 0;
|
|
531
|
-
return i = (e) => o.format(new Date(e + s)),
|
|
576
|
+
return i = (e) => o.format(new Date(e + s)), Je.set(r, i), i;
|
|
532
577
|
}
|
|
533
578
|
//#endregion
|
|
534
579
|
//#region src/utils/time.ts
|
|
535
|
-
var
|
|
580
|
+
var Xe = {
|
|
536
581
|
"1s": 1e3,
|
|
537
582
|
"5s": 5e3,
|
|
538
583
|
"15s": 15e3,
|
|
@@ -559,16 +604,16 @@ var Ve = {
|
|
|
559
604
|
"3M": 7776e6,
|
|
560
605
|
"6M": 15552e6,
|
|
561
606
|
"12M": 31536e6
|
|
562
|
-
},
|
|
607
|
+
}, S = {
|
|
563
608
|
s: 1e3,
|
|
564
609
|
m: 6e4,
|
|
565
610
|
h: 36e5,
|
|
566
611
|
d: 864e5,
|
|
567
612
|
w: 6048e5,
|
|
568
613
|
M: 2592e6
|
|
569
|
-
},
|
|
570
|
-
function
|
|
571
|
-
let t =
|
|
614
|
+
}, Ze = /^([1-9]\d*)([smhdwM])$/;
|
|
615
|
+
function C(e) {
|
|
616
|
+
let t = Ze.exec(e);
|
|
572
617
|
if (!t) return null;
|
|
573
618
|
let n = Number(t[1]);
|
|
574
619
|
return Number.isSafeInteger(n) ? {
|
|
@@ -576,24 +621,24 @@ function T(e) {
|
|
|
576
621
|
unit: t[2]
|
|
577
622
|
} : null;
|
|
578
623
|
}
|
|
579
|
-
var
|
|
580
|
-
function
|
|
624
|
+
var Qe = 1e6;
|
|
625
|
+
function $e(e) {
|
|
581
626
|
let t = /^([1-9]\d*)T$/.exec(e);
|
|
582
627
|
if (!t) return null;
|
|
583
628
|
let n = Number(t[1]);
|
|
584
|
-
return Number.isSafeInteger(n) && n <=
|
|
629
|
+
return Number.isSafeInteger(n) && n <= Qe ? n : null;
|
|
585
630
|
}
|
|
586
|
-
function
|
|
587
|
-
return
|
|
631
|
+
function et(e) {
|
|
632
|
+
return C(e) !== null;
|
|
588
633
|
}
|
|
589
|
-
function
|
|
590
|
-
let t =
|
|
634
|
+
function w(e) {
|
|
635
|
+
let t = Xe[e];
|
|
591
636
|
if (t !== void 0) return t;
|
|
592
|
-
let n =
|
|
593
|
-
return n ? n.count *
|
|
637
|
+
let n = C(e);
|
|
638
|
+
return n ? n.count * S[n.unit] : NaN;
|
|
594
639
|
}
|
|
595
|
-
function
|
|
596
|
-
let n = new Date(e), r =
|
|
640
|
+
function tt(e, t) {
|
|
641
|
+
let n = new Date(e), r = w(t);
|
|
597
642
|
return r >= 864e5 ? n.toLocaleDateString(void 0, {
|
|
598
643
|
month: "short",
|
|
599
644
|
day: "numeric"
|
|
@@ -606,11 +651,11 @@ function Ke(e, t) {
|
|
|
606
651
|
second: "2-digit"
|
|
607
652
|
});
|
|
608
653
|
}
|
|
609
|
-
function
|
|
610
|
-
let n =
|
|
654
|
+
function nt(e, t) {
|
|
655
|
+
let n = w(t);
|
|
611
656
|
return Math.floor(e / n) * n;
|
|
612
657
|
}
|
|
613
|
-
function
|
|
658
|
+
function rt(e, t) {
|
|
614
659
|
if (t === null) {
|
|
615
660
|
let t = new Date(e);
|
|
616
661
|
return {
|
|
@@ -621,7 +666,7 @@ function Je(e, t) {
|
|
|
621
666
|
minutes: t.getMinutes()
|
|
622
667
|
};
|
|
623
668
|
}
|
|
624
|
-
let n = new Date(e +
|
|
669
|
+
let n = new Date(e + x(t, e) * 6e4);
|
|
625
670
|
return {
|
|
626
671
|
year: n.getUTCFullYear(),
|
|
627
672
|
month: n.getUTCMonth() + 1,
|
|
@@ -630,122 +675,122 @@ function Je(e, t) {
|
|
|
630
675
|
minutes: n.getUTCMinutes()
|
|
631
676
|
};
|
|
632
677
|
}
|
|
633
|
-
function
|
|
678
|
+
function it(e) {
|
|
634
679
|
return e.hours === 0 && e.minutes === 0;
|
|
635
680
|
}
|
|
636
|
-
var
|
|
637
|
-
function
|
|
681
|
+
var at = 20 * 36e5;
|
|
682
|
+
function ot(e) {
|
|
638
683
|
let t = Math.min(e.length, 64);
|
|
639
684
|
if (t < 2) return;
|
|
640
|
-
let n =
|
|
685
|
+
let n = be(e), r = Infinity;
|
|
641
686
|
for (let i = 1; i < t; i++) {
|
|
642
687
|
let t = Math.abs(e[i].time - e[i - 1].time) * n;
|
|
643
688
|
t > 0 && t < r && (r = t);
|
|
644
689
|
}
|
|
645
|
-
return r === Infinity ? void 0 : r >=
|
|
690
|
+
return r === Infinity ? void 0 : r >= at;
|
|
646
691
|
}
|
|
647
|
-
function
|
|
648
|
-
let n =
|
|
692
|
+
function st(e, t = Date.now()) {
|
|
693
|
+
let n = x(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
|
|
649
694
|
return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
|
|
650
695
|
}
|
|
651
|
-
var
|
|
696
|
+
var ct = Date.UTC(1970, 0, 5), lt = S.m, T = S.d, ut = 24, dt = {
|
|
652
697
|
count: 1,
|
|
653
698
|
unit: "m"
|
|
654
|
-
},
|
|
655
|
-
function
|
|
656
|
-
let t =
|
|
657
|
-
return t || (t =
|
|
699
|
+
}, ft = 256, E = /* @__PURE__ */ new Map();
|
|
700
|
+
function D(e) {
|
|
701
|
+
let t = E.get(e);
|
|
702
|
+
return t || (t = C(e) ?? dt, E.size >= ft && E.clear(), E.set(e, t)), t;
|
|
658
703
|
}
|
|
659
|
-
function
|
|
704
|
+
function pt({ unit: e }) {
|
|
660
705
|
return e === "d" || e === "w" || e === "M";
|
|
661
706
|
}
|
|
662
|
-
function
|
|
663
|
-
return e.unit === "h" ? e.count > 1 &&
|
|
707
|
+
function mt(e) {
|
|
708
|
+
return e.unit === "h" ? e.count > 1 && ut % e.count === 0 : pt(e);
|
|
664
709
|
}
|
|
665
|
-
function
|
|
666
|
-
return
|
|
710
|
+
function O(e) {
|
|
711
|
+
return mt(D(e));
|
|
667
712
|
}
|
|
668
|
-
function
|
|
669
|
-
return
|
|
713
|
+
function ht(e) {
|
|
714
|
+
return pt(D(e));
|
|
670
715
|
}
|
|
671
|
-
function
|
|
672
|
-
return e !== void 0 && !
|
|
716
|
+
function gt(e) {
|
|
717
|
+
return e !== void 0 && !b(e);
|
|
673
718
|
}
|
|
674
|
-
function
|
|
675
|
-
let r =
|
|
676
|
-
return !
|
|
719
|
+
function k(e, t, n = 1) {
|
|
720
|
+
let r = D(t), i = typeof n == "number" ? n : n.weekStartsOn ?? 1, a = typeof n == "number" ? void 0 : n.timeZone;
|
|
721
|
+
return !gt(a) || !mt(r) || typeof n == "object" && n.dates && e % T === 0 ? _t(e, r, i) : qe(_t(e + x(a, e) * lt, r, i), a);
|
|
677
722
|
}
|
|
678
|
-
function
|
|
723
|
+
function _t(e, { count: t, unit: n }, r) {
|
|
679
724
|
if (n === "s" || n === "m" || n === "h" || n === "d") {
|
|
680
|
-
let r = t *
|
|
725
|
+
let r = t * S[n];
|
|
681
726
|
return Math.floor(e / r) * r;
|
|
682
727
|
}
|
|
683
728
|
let i = new Date(e);
|
|
684
729
|
if (n === "w") {
|
|
685
730
|
let e = (i.getUTCDay() - r + 7) % 7, n = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate() - e);
|
|
686
731
|
if (t <= 1) return n;
|
|
687
|
-
let a = Math.floor((n -
|
|
688
|
-
return
|
|
732
|
+
let a = Math.floor((n - ct) / (7 * T));
|
|
733
|
+
return ct + Math.floor(a / t) * t * 7 * T;
|
|
689
734
|
}
|
|
690
735
|
let a = i.getUTCFullYear() * 12 + i.getUTCMonth(), o = Math.floor(a / t) * t;
|
|
691
736
|
return Date.UTC(Math.floor(o / 12), o % 12, 1);
|
|
692
737
|
}
|
|
693
|
-
function
|
|
694
|
-
return e %
|
|
738
|
+
function vt(e, t, n) {
|
|
739
|
+
return e % T === 0 ? 0 : n && k(e, "1d", { timeZone: n }) === e ? n : t;
|
|
695
740
|
}
|
|
696
|
-
function
|
|
697
|
-
return
|
|
741
|
+
function yt(e, t, n) {
|
|
742
|
+
return rt(e, vt(e, t, n));
|
|
698
743
|
}
|
|
699
744
|
//#endregion
|
|
700
745
|
//#region src/utils/precision.ts
|
|
701
|
-
var
|
|
702
|
-
function
|
|
746
|
+
var bt = 64, A = /* @__PURE__ */ new Map();
|
|
747
|
+
function xt(e, t) {
|
|
703
748
|
let n = `${e}|${t}`, r = A.get(n);
|
|
704
|
-
return r || (A.size >=
|
|
749
|
+
return r || (A.size >= bt && A.clear(), r = new Intl.NumberFormat(e, {
|
|
705
750
|
minimumFractionDigits: t,
|
|
706
751
|
maximumFractionDigits: t
|
|
707
752
|
}), A.set(n, r)), r;
|
|
708
753
|
}
|
|
709
|
-
function
|
|
710
|
-
return t.formatPrice ? t.formatPrice(e) : j(e, n ?? t.pricePrecision ??
|
|
754
|
+
function St(e, t, n) {
|
|
755
|
+
return t.formatPrice ? t.formatPrice(e) : j(e, n ?? t.pricePrecision ?? Ct(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
|
|
711
756
|
}
|
|
712
757
|
function j(e, t = 2, n = "en-US") {
|
|
713
|
-
return
|
|
758
|
+
return xt(n, t).format(e);
|
|
714
759
|
}
|
|
715
|
-
function
|
|
760
|
+
function Ct(e, t) {
|
|
716
761
|
if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
|
|
717
|
-
let n =
|
|
762
|
+
let n = ve(e, t, 8);
|
|
718
763
|
return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
|
|
719
764
|
}
|
|
720
|
-
var
|
|
721
|
-
function
|
|
765
|
+
var wt = 2;
|
|
766
|
+
function Tt(e, t, n, r = 2, i = "en-US") {
|
|
722
767
|
if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
|
|
723
768
|
if (t === "percentage") {
|
|
724
|
-
let t = (e / n - 1) * 100, r = j(Math.abs(t),
|
|
725
|
-
return `${r === j(0,
|
|
769
|
+
let t = (e / n - 1) * 100, r = j(Math.abs(t), wt, i);
|
|
770
|
+
return `${r === j(0, wt, i) ? "" : t > 0 ? "+" : "-"}${r}%`;
|
|
726
771
|
}
|
|
727
772
|
return j(e / n * 100, 2, i);
|
|
728
773
|
}
|
|
729
774
|
return j(e, r, i);
|
|
730
775
|
}
|
|
731
|
-
function
|
|
776
|
+
function Et(e, t, n = 1) {
|
|
732
777
|
let r = Number.isInteger(n) && n > 1 ? n : 1;
|
|
733
778
|
if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
|
|
734
779
|
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)) : "";
|
|
735
780
|
return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
|
|
736
781
|
}
|
|
737
|
-
function
|
|
782
|
+
function Dt(e) {
|
|
738
783
|
if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
|
|
739
784
|
let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
|
|
740
785
|
return 1 / (e.denominator * t);
|
|
741
786
|
}
|
|
742
|
-
function
|
|
743
|
-
return e ? typeof e == "function" ? e :
|
|
787
|
+
function Ot(e) {
|
|
788
|
+
return e ? typeof e == "function" ? e : Dt(e) === null ? null : (t) => Et(t, e.denominator, e.subDenominator) : null;
|
|
744
789
|
}
|
|
745
|
-
function
|
|
790
|
+
function kt(e) {
|
|
746
791
|
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);
|
|
747
792
|
}
|
|
748
|
-
function
|
|
793
|
+
function At(e) {
|
|
749
794
|
let t = 0;
|
|
750
795
|
for (let n of e) {
|
|
751
796
|
let e = n.toString(), r = e.indexOf(".");
|
|
@@ -755,7 +800,7 @@ function Ct(e) {
|
|
|
755
800
|
}
|
|
756
801
|
//#endregion
|
|
757
802
|
//#region src/utils/priceSource.ts
|
|
758
|
-
var
|
|
803
|
+
var jt = [
|
|
759
804
|
"close",
|
|
760
805
|
"open",
|
|
761
806
|
"high",
|
|
@@ -765,10 +810,10 @@ var wt = [
|
|
|
765
810
|
"ohlc4",
|
|
766
811
|
"hlcc4"
|
|
767
812
|
];
|
|
768
|
-
function
|
|
769
|
-
return typeof e == "string" &&
|
|
813
|
+
function Mt(e) {
|
|
814
|
+
return typeof e == "string" && jt.includes(e);
|
|
770
815
|
}
|
|
771
|
-
function
|
|
816
|
+
function Nt(e, t) {
|
|
772
817
|
switch (t) {
|
|
773
818
|
case "open": return e.open;
|
|
774
819
|
case "high": return e.high;
|
|
@@ -780,13 +825,13 @@ function Et(e, t) {
|
|
|
780
825
|
default: return e.close;
|
|
781
826
|
}
|
|
782
827
|
}
|
|
783
|
-
var
|
|
784
|
-
function
|
|
828
|
+
var Pt = /^ind:([^:]+):(.+)$/;
|
|
829
|
+
function Ft(e, t) {
|
|
785
830
|
return `ind:${e}:${t}`;
|
|
786
831
|
}
|
|
787
|
-
function
|
|
832
|
+
function It(e) {
|
|
788
833
|
if (typeof e != "string") return null;
|
|
789
|
-
let t =
|
|
834
|
+
let t = Pt.exec(e);
|
|
790
835
|
return t ? {
|
|
791
836
|
instanceId: t[1],
|
|
792
837
|
key: t[2]
|
|
@@ -794,11 +839,11 @@ function kt(e) {
|
|
|
794
839
|
}
|
|
795
840
|
//#endregion
|
|
796
841
|
//#region src/utils/resample.ts
|
|
797
|
-
var
|
|
798
|
-
function
|
|
799
|
-
let r =
|
|
842
|
+
var Lt = 864e5, Rt = 6e4;
|
|
843
|
+
function zt(e, t, n = 1) {
|
|
844
|
+
let r = Bt(e, t, n), i = [], a = null;
|
|
800
845
|
for (let n of e) {
|
|
801
|
-
let e =
|
|
846
|
+
let e = k(n.time, t, r);
|
|
802
847
|
a === null || e !== a.time ? (a = {
|
|
803
848
|
time: e,
|
|
804
849
|
open: n.open,
|
|
@@ -810,96 +855,52 @@ function Mt(e, t, n = 1) {
|
|
|
810
855
|
}
|
|
811
856
|
return i;
|
|
812
857
|
}
|
|
813
|
-
function
|
|
814
|
-
return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 ||
|
|
858
|
+
function Bt(e, t, n) {
|
|
859
|
+
return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || b(n.timeZone) || !O(t) ? n : {
|
|
815
860
|
...n,
|
|
816
|
-
dates:
|
|
861
|
+
dates: ot(e) === !0
|
|
817
862
|
};
|
|
818
863
|
}
|
|
819
|
-
var
|
|
820
|
-
function
|
|
821
|
-
let n =
|
|
864
|
+
var Vt = (e) => e === "s" || e === "m" || e === "h" || e === "d";
|
|
865
|
+
function Ht(e, t) {
|
|
866
|
+
let n = C(e), r = C(t);
|
|
822
867
|
if (!n || !r) return !1;
|
|
823
|
-
let i =
|
|
824
|
-
return n.unit === "d" && n.count > 1 ? !1 :
|
|
868
|
+
let i = w(e);
|
|
869
|
+
return n.unit === "d" && n.count > 1 ? !1 : Vt(r.unit) ? Vt(n.unit) && w(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : Vt(n.unit) && Lt % i === 0;
|
|
825
870
|
}
|
|
826
|
-
function
|
|
827
|
-
let n =
|
|
828
|
-
if (!(n <
|
|
871
|
+
function Ut(e, t) {
|
|
872
|
+
let n = w(e);
|
|
873
|
+
if (!(n < Lt)) return !0;
|
|
829
874
|
let r = (/* @__PURE__ */ new Date()).getUTCFullYear();
|
|
830
|
-
return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) =>
|
|
875
|
+
return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => x(t, e) * Rt % n === 0);
|
|
831
876
|
}
|
|
832
|
-
function
|
|
833
|
-
let { timeZone: r } = n, i = r !== void 0 && !
|
|
877
|
+
function Wt(e, t, n = {}) {
|
|
878
|
+
let { timeZone: r } = n, i = r !== void 0 && !b(r) && O(e) ? r : void 0, a = null, o = 0;
|
|
834
879
|
for (let n of t) {
|
|
835
|
-
if (!
|
|
836
|
-
let t =
|
|
880
|
+
if (!Ht(n, e) || i !== void 0 && !Ut(n, i)) continue;
|
|
881
|
+
let t = w(n);
|
|
837
882
|
t > o && (a = n, o = t);
|
|
838
883
|
}
|
|
839
884
|
return a;
|
|
840
885
|
}
|
|
841
886
|
//#endregion
|
|
842
|
-
//#region src/utils/symbols.ts
|
|
843
|
-
function Rt(e) {
|
|
844
|
-
let t = e.lastIndexOf(":");
|
|
845
|
-
return t <= 0 || t === e.length - 1 ? e : e.slice(t + 1);
|
|
846
|
-
}
|
|
847
|
-
function zt(e, t) {
|
|
848
|
-
if (!e) return 0;
|
|
849
|
-
if (e === t) return 1e3;
|
|
850
|
-
if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
|
|
851
|
-
let n = e.indexOf(t);
|
|
852
|
-
return n >= 0 ? 300 - Math.min(100, n) : 0;
|
|
853
|
-
}
|
|
854
|
-
function Bt(e, t, n = 50, r) {
|
|
855
|
-
let i = t.trim().toUpperCase();
|
|
856
|
-
if (!i) return e.slice(0, n);
|
|
857
|
-
let a = [];
|
|
858
|
-
for (let t of e) {
|
|
859
|
-
let e = Math.max(zt(t.symbol.toUpperCase(), i), zt((t.description ?? "").toUpperCase(), i) * .8);
|
|
860
|
-
e > 0 && a.push({
|
|
861
|
-
info: t,
|
|
862
|
-
score: e + (r?.(t) ?? 0)
|
|
863
|
-
});
|
|
864
|
-
}
|
|
865
|
-
return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
|
|
866
|
-
}
|
|
867
|
-
function Vt(e) {
|
|
868
|
-
let t = typeof e == "number" ? e : Number(e);
|
|
869
|
-
if (!Number.isFinite(t) || t <= 0) return 0;
|
|
870
|
-
for (let e = 0; e <= 12; e++) {
|
|
871
|
-
let n = t * 10 ** e;
|
|
872
|
-
if (Math.abs(n - Math.round(n)) < 1e-9 * Math.max(1, n)) return e;
|
|
873
|
-
}
|
|
874
|
-
return 12;
|
|
875
|
-
}
|
|
876
|
-
function Ht(e) {
|
|
877
|
-
return e?.timeZone ?? e?.timezone;
|
|
878
|
-
}
|
|
879
|
-
function Ut(e) {
|
|
880
|
-
let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
|
|
881
|
-
if (!t) return null;
|
|
882
|
-
let n = Number(t[1]), r = Number(t[2]);
|
|
883
|
-
return n === 24 && r === 0 ? 1440 : n < 24 && r < 60 ? n * 60 + r : null;
|
|
884
|
-
}
|
|
885
|
-
//#endregion
|
|
886
887
|
//#region src/utils/marketStatus.ts
|
|
887
|
-
var M = 864e5, N = 6e4,
|
|
888
|
-
function
|
|
889
|
-
let n =
|
|
890
|
-
let t =
|
|
888
|
+
var M = 864e5, N = 6e4, Gt = 8;
|
|
889
|
+
function Kt(e, t) {
|
|
890
|
+
let n = ie(e), r = (e?.sessions ?? []).flatMap((e) => {
|
|
891
|
+
let t = ae(e.start), n = ae(e.end);
|
|
891
892
|
return t === null || n === null || t === n ? [] : [{
|
|
892
893
|
start: t,
|
|
893
894
|
end: n,
|
|
894
895
|
days: Array.isArray(e.days) ? e.days : null
|
|
895
896
|
}];
|
|
896
897
|
});
|
|
897
|
-
if (!n || !
|
|
898
|
+
if (!n || !We(n) || r.length === 0 || !Number.isFinite(t)) return {
|
|
898
899
|
state: "always",
|
|
899
900
|
next: null
|
|
900
901
|
};
|
|
901
|
-
let i =
|
|
902
|
-
for (let e = -1; e <=
|
|
902
|
+
let i = y(n, t) * N, a = Math.floor((t + i) / M) * M, o = (e) => e - y(n, e - y(n, e - i) * N) * N, s = [];
|
|
903
|
+
for (let e = -1; e <= Gt; e++) {
|
|
903
904
|
let t = a + e * M, n = (Math.floor(t / M) + 4) % 7;
|
|
904
905
|
for (let e of r) {
|
|
905
906
|
if (e.days && !e.days.includes(n)) continue;
|
|
@@ -926,15 +927,15 @@ function Gt(e, t) {
|
|
|
926
927
|
}
|
|
927
928
|
//#endregion
|
|
928
929
|
//#region src/utils/drawingOptions.ts
|
|
929
|
-
var
|
|
930
|
-
function
|
|
930
|
+
var qt = 48, Jt = 2e3, Yt = 1e4;
|
|
931
|
+
function Xt(e) {
|
|
931
932
|
if (!Array.isArray(e)) return;
|
|
932
933
|
let t = [];
|
|
933
934
|
for (let n of e) {
|
|
934
|
-
if (t.length >=
|
|
935
|
+
if (t.length >= qt) break;
|
|
935
936
|
if (typeof n != "object" || !n) continue;
|
|
936
937
|
let { value: e, visible: r, color: i } = n;
|
|
937
|
-
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) >
|
|
938
|
+
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > Yt || r !== void 0 && typeof r != "boolean") continue;
|
|
938
939
|
let a = {
|
|
939
940
|
value: e,
|
|
940
941
|
visible: r ?? !0
|
|
@@ -943,87 +944,87 @@ function Yt(e) {
|
|
|
943
944
|
}
|
|
944
945
|
return t;
|
|
945
946
|
}
|
|
946
|
-
function
|
|
947
|
+
function Zt(e, t) {
|
|
947
948
|
switch (e.kind) {
|
|
948
949
|
case "boolean": return typeof t == "boolean" ? t : void 0;
|
|
949
950
|
case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
|
|
950
951
|
case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
|
|
951
|
-
case "levels": return
|
|
952
|
-
case "text": return typeof t == "string" ? t.slice(0,
|
|
952
|
+
case "levels": return Xt(t);
|
|
953
|
+
case "text": return typeof t == "string" ? t.slice(0, Jt) : void 0;
|
|
953
954
|
}
|
|
954
955
|
}
|
|
955
|
-
function
|
|
956
|
+
function Qt(e, t) {
|
|
956
957
|
if (!e || typeof t != "object" || !t) return {};
|
|
957
958
|
let n = {};
|
|
958
959
|
for (let [r, i] of Object.entries(t)) {
|
|
959
960
|
let t = e[r];
|
|
960
961
|
if (!t) continue;
|
|
961
|
-
let a =
|
|
962
|
+
let a = Zt(t, i);
|
|
962
963
|
a !== void 0 && (n[r] = a);
|
|
963
964
|
}
|
|
964
965
|
return n;
|
|
965
966
|
}
|
|
966
|
-
function
|
|
967
|
+
function $t(e) {
|
|
967
968
|
return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
|
|
968
969
|
}
|
|
969
|
-
function
|
|
970
|
+
function en(e, t, n) {
|
|
970
971
|
let r = e?.[n];
|
|
971
|
-
return r ?
|
|
972
|
+
return r ? $t((t && n in t ? Zt(r, t[n]) : void 0) ?? r.default) : t?.[n];
|
|
972
973
|
}
|
|
973
|
-
function
|
|
974
|
+
function tn(e, t) {
|
|
974
975
|
let n = {};
|
|
975
|
-
for (let r of Object.keys(e ?? {})) n[r] =
|
|
976
|
+
for (let r of Object.keys(e ?? {})) n[r] = en(e, t, r);
|
|
976
977
|
return n;
|
|
977
978
|
}
|
|
978
979
|
//#endregion
|
|
979
980
|
//#region src/utils/drawingStyle.ts
|
|
980
|
-
var
|
|
981
|
+
var nn = [
|
|
981
982
|
"solid",
|
|
982
983
|
"dashed",
|
|
983
984
|
"dotted"
|
|
984
|
-
],
|
|
985
|
+
], rn = 64, an = 2e3, on = 20, sn = 200, cn = 4e3, ln = 20, un = [
|
|
985
986
|
"left",
|
|
986
987
|
"center",
|
|
987
988
|
"right"
|
|
988
|
-
],
|
|
989
|
+
], dn = [
|
|
989
990
|
"top",
|
|
990
991
|
"middle",
|
|
991
992
|
"bottom"
|
|
992
993
|
];
|
|
993
|
-
function
|
|
994
|
+
function fn(e, t, n) {
|
|
994
995
|
return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
|
|
995
996
|
}
|
|
996
997
|
function P(e) {
|
|
997
|
-
return typeof e == "string" && e.length > 0 && e.length <=
|
|
998
|
+
return typeof e == "string" && e.length > 0 && e.length <= rn ? e : void 0;
|
|
998
999
|
}
|
|
999
|
-
function
|
|
1000
|
+
function pn(e) {
|
|
1000
1001
|
if (typeof e != "object" || !e) return {};
|
|
1001
1002
|
let t = e, n = {}, r = P(t.color);
|
|
1002
1003
|
r !== void 0 && (n.color = r);
|
|
1003
|
-
let i =
|
|
1004
|
-
i !== void 0 && (n.lineWidth = i),
|
|
1004
|
+
let i = fn(t.lineWidth, .5, on);
|
|
1005
|
+
i !== void 0 && (n.lineWidth = i), nn.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
|
|
1005
1006
|
let a = P(t.fillColor);
|
|
1006
1007
|
a !== void 0 && (n.fillColor = a);
|
|
1007
|
-
let o =
|
|
1008
|
+
let o = fn(t.fillOpacity, 0, 1);
|
|
1008
1009
|
o !== void 0 && (n.fillOpacity = o);
|
|
1009
|
-
let s =
|
|
1010
|
-
s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0,
|
|
1010
|
+
let s = fn(t.fontSize, 6, sn);
|
|
1011
|
+
s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, an));
|
|
1011
1012
|
for (let e of [
|
|
1012
1013
|
"bold",
|
|
1013
1014
|
"italic",
|
|
1014
1015
|
"textBackground",
|
|
1015
1016
|
"textBorder"
|
|
1016
1017
|
]) typeof t[e] == "boolean" && (n[e] = t[e]);
|
|
1017
|
-
|
|
1018
|
+
un.includes(t.textAlign) && (n.textAlign = t.textAlign), dn.includes(t.textVAlign) && (n.textVAlign = t.textVAlign);
|
|
1018
1019
|
let c = P(t.textColor);
|
|
1019
1020
|
c !== void 0 && (n.textColor = c);
|
|
1020
1021
|
let l = P(t.borderColor);
|
|
1021
|
-
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(
|
|
1022
|
+
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(cn, Math.max(ln, t.textWrap))), n;
|
|
1022
1023
|
}
|
|
1023
1024
|
//#endregion
|
|
1024
1025
|
//#region src/utils/chartTypeOptions.ts
|
|
1025
1026
|
var F = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, I = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, L = (e) => typeof e == "object" && !!e && !Array.isArray(e);
|
|
1026
|
-
function
|
|
1027
|
+
function mn(e) {
|
|
1027
1028
|
if (!L(e)) return {};
|
|
1028
1029
|
let t = {};
|
|
1029
1030
|
if (L(e.renko)) {
|
|
@@ -1059,8 +1060,8 @@ function pn(e) {
|
|
|
1059
1060
|
}
|
|
1060
1061
|
//#endregion
|
|
1061
1062
|
//#region src/constants/themes.ts
|
|
1062
|
-
var
|
|
1063
|
-
family:
|
|
1063
|
+
var hn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", gn = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif", _n = {
|
|
1064
|
+
family: hn,
|
|
1064
1065
|
sizeSmall: 11,
|
|
1065
1066
|
sizeMedium: 13,
|
|
1066
1067
|
sizeLarge: 15
|
|
@@ -1075,67 +1076,67 @@ var mn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
|
|
|
1075
1076
|
rose: "#e25592",
|
|
1076
1077
|
neutral: "#7d8696",
|
|
1077
1078
|
ink: "#131416"
|
|
1078
|
-
},
|
|
1079
|
+
}, vn = .22;
|
|
1079
1080
|
function z(e) {
|
|
1080
|
-
return
|
|
1081
|
+
return p(e, vn);
|
|
1081
1082
|
}
|
|
1082
|
-
var
|
|
1083
|
+
var yn = "#fbfaf6", B = "#1b1d21", bn = "#131416", V = "#e6e3dc", xn = "#1f7a5c", Sn = "#b8423f", Cn = "#4fae8a", wn = "#e2706b", Tn = "#6a6966", En = "#8d8a84", Dn = {
|
|
1083
1084
|
ceiling: "#FF00FF",
|
|
1084
1085
|
floor: "#00FFFF",
|
|
1085
1086
|
reference: "#FFD700"
|
|
1086
|
-
},
|
|
1087
|
+
}, On = {
|
|
1087
1088
|
ceiling: "#a21caf",
|
|
1088
1089
|
floor: "#0e7490",
|
|
1089
1090
|
reference: "#8a6a00"
|
|
1090
|
-
},
|
|
1091
|
+
}, kn = [
|
|
1091
1092
|
R.blue,
|
|
1092
1093
|
R.ochre,
|
|
1093
1094
|
R.violet,
|
|
1094
1095
|
R.cyan,
|
|
1095
1096
|
R.rose
|
|
1096
|
-
],
|
|
1097
|
+
], An = {
|
|
1097
1098
|
name: "dark",
|
|
1098
|
-
background:
|
|
1099
|
+
background: bn,
|
|
1099
1100
|
text: V,
|
|
1100
1101
|
textSecondary: "#8d8b86",
|
|
1101
1102
|
grid: "#1d1e21",
|
|
1102
|
-
crosshair:
|
|
1103
|
-
candleUp:
|
|
1104
|
-
candleDown:
|
|
1105
|
-
candleUpWick:
|
|
1106
|
-
candleDownWick:
|
|
1103
|
+
crosshair: Tn,
|
|
1104
|
+
candleUp: Cn,
|
|
1105
|
+
candleDown: wn,
|
|
1106
|
+
candleUpWick: Cn,
|
|
1107
|
+
candleDownWick: wn,
|
|
1107
1108
|
lineColor: V,
|
|
1108
|
-
areaTopColor:
|
|
1109
|
-
areaBottomColor:
|
|
1110
|
-
volumeUp:
|
|
1111
|
-
volumeDown:
|
|
1109
|
+
areaTopColor: p(V, .14),
|
|
1110
|
+
areaBottomColor: p(V, 0),
|
|
1111
|
+
volumeUp: p(V, .14),
|
|
1112
|
+
volumeDown: p(V, .08),
|
|
1112
1113
|
axisLine: "#2a2b2f",
|
|
1113
1114
|
axisLabel: "#a9a6a0",
|
|
1114
1115
|
axisLabelBackground: "#232427",
|
|
1115
|
-
font:
|
|
1116
|
-
priceLimits:
|
|
1117
|
-
},
|
|
1116
|
+
font: _n,
|
|
1117
|
+
priceLimits: Dn
|
|
1118
|
+
}, jn = {
|
|
1118
1119
|
name: "light",
|
|
1119
|
-
background:
|
|
1120
|
+
background: yn,
|
|
1120
1121
|
text: B,
|
|
1121
1122
|
textSecondary: "#6b6f76",
|
|
1122
1123
|
grid: "#ece8df",
|
|
1123
|
-
crosshair:
|
|
1124
|
-
candleUp:
|
|
1125
|
-
candleDown:
|
|
1126
|
-
candleUpWick:
|
|
1127
|
-
candleDownWick:
|
|
1124
|
+
crosshair: En,
|
|
1125
|
+
candleUp: xn,
|
|
1126
|
+
candleDown: Sn,
|
|
1127
|
+
candleUpWick: xn,
|
|
1128
|
+
candleDownWick: Sn,
|
|
1128
1129
|
lineColor: B,
|
|
1129
|
-
areaTopColor:
|
|
1130
|
-
areaBottomColor:
|
|
1131
|
-
volumeUp:
|
|
1132
|
-
volumeDown:
|
|
1130
|
+
areaTopColor: p(B, .12),
|
|
1131
|
+
areaBottomColor: p(B, 0),
|
|
1132
|
+
volumeUp: p(B, .13),
|
|
1133
|
+
volumeDown: p(B, .08),
|
|
1133
1134
|
axisLine: "#cfcac0",
|
|
1134
1135
|
axisLabel: "#4a4e57",
|
|
1135
1136
|
axisLabelBackground: "#eeebe3",
|
|
1136
|
-
font:
|
|
1137
|
-
priceLimits:
|
|
1138
|
-
},
|
|
1137
|
+
font: _n,
|
|
1138
|
+
priceLimits: On
|
|
1139
|
+
}, Mn = {
|
|
1139
1140
|
name: "terminal",
|
|
1140
1141
|
background: "#0E0E0E",
|
|
1141
1142
|
text: "#C0C0C0",
|
|
@@ -1160,10 +1161,10 @@ var vn = "#fbfaf6", B = "#1b1d21", yn = "#131416", V = "#e6e3dc", bn = "#1f7a5c"
|
|
|
1160
1161
|
sizeMedium: 12,
|
|
1161
1162
|
sizeLarge: 14
|
|
1162
1163
|
}
|
|
1163
|
-
},
|
|
1164
|
-
function
|
|
1164
|
+
}, Nn = new Set([Mn.volumeUp, Mn.volumeDown]);
|
|
1165
|
+
function Pn(e) {
|
|
1165
1166
|
let t = (e, t) => {
|
|
1166
|
-
if (!
|
|
1167
|
+
if (!Nn.has(e)) return e;
|
|
1167
1168
|
let n = z(t);
|
|
1168
1169
|
return n === t ? e : n;
|
|
1169
1170
|
};
|
|
@@ -1174,67 +1175,67 @@ function Nn(e) {
|
|
|
1174
1175
|
}
|
|
1175
1176
|
//#endregion
|
|
1176
1177
|
//#region src/utils/chartStyle.ts
|
|
1177
|
-
var
|
|
1178
|
+
var Fn = [
|
|
1178
1179
|
"solid",
|
|
1179
1180
|
"dashed",
|
|
1180
1181
|
"dotted"
|
|
1181
|
-
],
|
|
1182
|
+
], In = 20, Ln = 64, Rn = 2, zn = [
|
|
1182
1183
|
/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
|
|
1183
1184
|
/^[a-z]{3,30}$/i,
|
|
1184
1185
|
/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
|
|
1185
1186
|
];
|
|
1186
|
-
function
|
|
1187
|
-
return typeof e == "string" && e.length <=
|
|
1187
|
+
function Bn(e) {
|
|
1188
|
+
return typeof e == "string" && e.length <= Ln && zn.some((t) => t.test(e.trim()));
|
|
1188
1189
|
}
|
|
1189
|
-
function
|
|
1190
|
+
function Vn(e, t) {
|
|
1190
1191
|
switch (e) {
|
|
1191
|
-
case "color": return
|
|
1192
|
-
case "lineStyle": return
|
|
1193
|
-
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <=
|
|
1192
|
+
case "color": return Bn(t);
|
|
1193
|
+
case "lineStyle": return Fn.includes(t);
|
|
1194
|
+
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= In;
|
|
1194
1195
|
case "boolean": return typeof t == "boolean";
|
|
1195
1196
|
}
|
|
1196
1197
|
}
|
|
1197
|
-
function
|
|
1198
|
+
function Hn(e) {
|
|
1198
1199
|
return Object.prototype.hasOwnProperty.call(t, e);
|
|
1199
1200
|
}
|
|
1200
|
-
function
|
|
1201
|
+
function Un(e) {
|
|
1201
1202
|
let n = {}, r = [];
|
|
1202
1203
|
if (typeof e != "object" || !e || Array.isArray(e)) return {
|
|
1203
1204
|
overrides: {},
|
|
1204
1205
|
rejected: r
|
|
1205
1206
|
};
|
|
1206
|
-
for (let [i, a] of Object.entries(e))
|
|
1207
|
+
for (let [i, a] of Object.entries(e)) Hn(i) ? a === null ? n[i] = null : Vn(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
|
|
1207
1208
|
return {
|
|
1208
1209
|
overrides: n,
|
|
1209
1210
|
rejected: r
|
|
1210
1211
|
};
|
|
1211
1212
|
}
|
|
1212
|
-
function
|
|
1213
|
+
function Wn(e) {
|
|
1213
1214
|
if (typeof e != "object" || !e || Array.isArray(e)) return null;
|
|
1214
1215
|
let { background: t, separator: n } = e, r = {
|
|
1215
|
-
...
|
|
1216
|
-
...
|
|
1216
|
+
...Bn(t) ? { background: t } : {},
|
|
1217
|
+
...Bn(n) ? { separator: n } : {}
|
|
1217
1218
|
};
|
|
1218
1219
|
return Object.keys(r).length > 0 ? r : null;
|
|
1219
1220
|
}
|
|
1220
|
-
var
|
|
1221
|
-
function
|
|
1221
|
+
var Gn = /^[A-Za-z0-9_]{1,32}$/;
|
|
1222
|
+
function Kn(e) {
|
|
1222
1223
|
if (typeof e != "object" || !e || Array.isArray(e)) return;
|
|
1223
1224
|
let t = {};
|
|
1224
1225
|
for (let [n, r] of Object.entries(e)) {
|
|
1225
|
-
if (!
|
|
1226
|
+
if (!Gn.test(n) || typeof r != "object" || !r) continue;
|
|
1226
1227
|
let { lineStyle: e, visible: i } = r, a = {
|
|
1227
|
-
...
|
|
1228
|
+
...Fn.includes(e) ? { lineStyle: e } : {},
|
|
1228
1229
|
...typeof i == "boolean" ? { visible: i } : {}
|
|
1229
1230
|
};
|
|
1230
1231
|
Object.keys(a).length > 0 && (t[n] = a);
|
|
1231
1232
|
}
|
|
1232
1233
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
1233
1234
|
}
|
|
1234
|
-
function
|
|
1235
|
+
function qn(e, t, n = 1) {
|
|
1235
1236
|
return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
|
|
1236
1237
|
}
|
|
1237
|
-
function
|
|
1238
|
+
function Jn(e, t, n) {
|
|
1238
1239
|
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;
|
|
1239
1240
|
return {
|
|
1240
1241
|
up: o,
|
|
@@ -1242,7 +1243,7 @@ function qn(e, t, n) {
|
|
|
1242
1243
|
wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
|
|
1243
1244
|
wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
|
|
1244
1245
|
line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
|
|
1245
|
-
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ??
|
|
1246
|
+
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? Rn,
|
|
1246
1247
|
top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
|
|
1247
1248
|
bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
|
|
1248
1249
|
};
|
|
@@ -1255,8 +1256,8 @@ function H(e, t, n) {
|
|
|
1255
1256
|
width: e(`${t}.width`) ?? n.width
|
|
1256
1257
|
};
|
|
1257
1258
|
}
|
|
1258
|
-
function
|
|
1259
|
-
let { style: r, ...i } = e, a = n, o = (e) => a[e], s =
|
|
1259
|
+
function Yn(e, t, n) {
|
|
1260
|
+
let { style: r, ...i } = e, a = n, o = (e) => a[e], s = Jn(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
|
|
1260
1261
|
panes: {
|
|
1261
1262
|
background: l("panes.background", c),
|
|
1262
1263
|
separator: l("panes.separatorColor", i.axisLine),
|
|
@@ -1355,7 +1356,7 @@ function Jn(e, t, n) {
|
|
|
1355
1356
|
style: d
|
|
1356
1357
|
};
|
|
1357
1358
|
}
|
|
1358
|
-
var
|
|
1359
|
+
var Xn = {
|
|
1359
1360
|
"background.color": (e) => e.background,
|
|
1360
1361
|
"panes.background": (e, t) => t.panes.background,
|
|
1361
1362
|
"panes.separatorColor": (e, t) => t.panes.separator,
|
|
@@ -1374,8 +1375,8 @@ var Yn = {
|
|
|
1374
1375
|
"lastPrice.downColor": (e, t) => t.lastPrice.down,
|
|
1375
1376
|
"lastPrice.style": (e, t) => t.lastPrice.style,
|
|
1376
1377
|
"lastPrice.width": (e, t) => t.lastPrice.width,
|
|
1377
|
-
"volume.upColor": (e) =>
|
|
1378
|
-
"volume.downColor": (e) =>
|
|
1378
|
+
"volume.upColor": (e) => Pn(e).up,
|
|
1379
|
+
"volume.downColor": (e) => Pn(e).down,
|
|
1379
1380
|
"sessionBreaks.color": (e, t) => t.sessionBreaks.color,
|
|
1380
1381
|
"sessionBreaks.style": (e, t) => t.sessionBreaks.style,
|
|
1381
1382
|
"sessionBreaks.width": (e, t) => t.sessionBreaks.width,
|
|
@@ -1392,16 +1393,16 @@ var Yn = {
|
|
|
1392
1393
|
"tradeZones.lossColor": (e, t) => t.tradeZones.loss,
|
|
1393
1394
|
"tradeZones.activeColor": (e, t) => t.tradeZones.active,
|
|
1394
1395
|
"drawings.handleColor": (e, t) => t.drawings.handle
|
|
1395
|
-
},
|
|
1396
|
+
}, Zn = {
|
|
1396
1397
|
visible: "visible",
|
|
1397
1398
|
color: "color",
|
|
1398
1399
|
style: "style",
|
|
1399
1400
|
width: "width"
|
|
1400
1401
|
};
|
|
1401
|
-
function
|
|
1402
|
+
function Qn(e, t, n, r = "candlestick") {
|
|
1402
1403
|
let i = n.split(".");
|
|
1403
1404
|
if (i[0] === "series") {
|
|
1404
|
-
let n =
|
|
1405
|
+
let n = Jn(e, (e) => t[e], i[1]);
|
|
1405
1406
|
switch (i[2]) {
|
|
1406
1407
|
case "upColor": return n.up;
|
|
1407
1408
|
case "downColor": return n.down;
|
|
@@ -1414,12 +1415,12 @@ function Zn(e, t, n, r = "candlestick") {
|
|
|
1414
1415
|
case "bottomColor": return n.bottom;
|
|
1415
1416
|
}
|
|
1416
1417
|
}
|
|
1417
|
-
let a =
|
|
1418
|
-
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][
|
|
1418
|
+
let a = Yn(e, r, t), o = a.style;
|
|
1419
|
+
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][Zn[i[2]]] : Xn[n]?.(a, o) ?? null;
|
|
1419
1420
|
}
|
|
1420
1421
|
//#endregion
|
|
1421
1422
|
//#region src/constants/defaults.ts
|
|
1422
|
-
var
|
|
1423
|
+
var $n = {
|
|
1423
1424
|
autoScale: !0,
|
|
1424
1425
|
rightMargin: 5,
|
|
1425
1426
|
minBarSpacing: 2,
|
|
@@ -1430,7 +1431,7 @@ var Qn = {
|
|
|
1430
1431
|
vLineStyle: "solid"
|
|
1431
1432
|
},
|
|
1432
1433
|
crosshair: { mode: "magnet" }
|
|
1433
|
-
},
|
|
1434
|
+
}, er = [
|
|
1434
1435
|
"1s",
|
|
1435
1436
|
"1m",
|
|
1436
1437
|
"3m",
|
|
@@ -1447,7 +1448,7 @@ var Qn = {
|
|
|
1447
1448
|
"3d",
|
|
1448
1449
|
"1w",
|
|
1449
1450
|
"1M"
|
|
1450
|
-
],
|
|
1451
|
+
], tr = [
|
|
1451
1452
|
"1m",
|
|
1452
1453
|
"5m",
|
|
1453
1454
|
"15m",
|
|
@@ -1461,7 +1462,7 @@ var Qn = {
|
|
|
1461
1462
|
"3M",
|
|
1462
1463
|
"6M",
|
|
1463
1464
|
"12M"
|
|
1464
|
-
],
|
|
1465
|
+
], nr = [
|
|
1465
1466
|
"1m",
|
|
1466
1467
|
"5m",
|
|
1467
1468
|
"15m",
|
|
@@ -1471,7 +1472,7 @@ var Qn = {
|
|
|
1471
1472
|
"1d",
|
|
1472
1473
|
"1w",
|
|
1473
1474
|
"1M"
|
|
1474
|
-
],
|
|
1475
|
+
], rr = [
|
|
1475
1476
|
"1m",
|
|
1476
1477
|
"5m",
|
|
1477
1478
|
"15m",
|
|
@@ -1479,7 +1480,7 @@ var Qn = {
|
|
|
1479
1480
|
"4h",
|
|
1480
1481
|
"1d",
|
|
1481
1482
|
"1w"
|
|
1482
|
-
],
|
|
1483
|
+
], ir = 8, ar = 2, or = 70, sr = 30, cr = 60, lr = 120, ur = (1 + Math.sqrt(5)) / 2, dr = [
|
|
1483
1484
|
1,
|
|
1484
1485
|
2,
|
|
1485
1486
|
3,
|
|
@@ -1491,8 +1492,8 @@ var Qn = {
|
|
|
1491
1492
|
55,
|
|
1492
1493
|
89
|
|
1493
1494
|
];
|
|
1494
|
-
function
|
|
1495
|
-
return Math.round(e *
|
|
1495
|
+
function fr(e, t, n = 1) {
|
|
1496
|
+
return Math.round(e * ur ** (t / n));
|
|
1496
1497
|
}
|
|
1497
1498
|
//#endregion
|
|
1498
1499
|
//#region src/i18n/en.ts
|
|
@@ -1599,7 +1600,7 @@ var U = {
|
|
|
1599
1600
|
error: "Error",
|
|
1600
1601
|
numberDecimalSeparator: ".",
|
|
1601
1602
|
numberGroupSeparator: ","
|
|
1602
|
-
},
|
|
1603
|
+
}, pr = {
|
|
1603
1604
|
candlestick: "Nến",
|
|
1604
1605
|
line: "Đường",
|
|
1605
1606
|
area: "Vùng",
|
|
@@ -1702,20 +1703,20 @@ var U = {
|
|
|
1702
1703
|
error: "Lỗi",
|
|
1703
1704
|
numberDecimalSeparator: ",",
|
|
1704
1705
|
numberGroupSeparator: "."
|
|
1705
|
-
}, W = new Map([["en", U], ["vi",
|
|
1706
|
-
function
|
|
1707
|
-
G = e,
|
|
1706
|
+
}, W = new Map([["en", U], ["vi", pr]]), G = "en", mr = U;
|
|
1707
|
+
function hr(e) {
|
|
1708
|
+
G = e, mr = W.get(e) ?? U;
|
|
1708
1709
|
}
|
|
1709
|
-
function
|
|
1710
|
+
function gr() {
|
|
1710
1711
|
return G;
|
|
1711
1712
|
}
|
|
1712
|
-
function
|
|
1713
|
-
return
|
|
1713
|
+
function _r(e) {
|
|
1714
|
+
return mr[e] ?? U[e] ?? e;
|
|
1714
1715
|
}
|
|
1715
|
-
function
|
|
1716
|
+
function vr(e, t) {
|
|
1716
1717
|
W.set(e, t);
|
|
1717
1718
|
}
|
|
1718
|
-
function
|
|
1719
|
+
function yr(e) {
|
|
1719
1720
|
return W.get(e ?? G) ?? U;
|
|
1720
1721
|
}
|
|
1721
1722
|
function K(e, t = 2, n) {
|
|
@@ -1723,32 +1724,32 @@ function K(e, t = 2, n) {
|
|
|
1723
1724
|
for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
|
|
1724
1725
|
return c && (u = "-" + u), s ? u + i + s : u;
|
|
1725
1726
|
}
|
|
1726
|
-
function
|
|
1727
|
+
function br(e) {
|
|
1727
1728
|
return K(e, 0, "vi");
|
|
1728
1729
|
}
|
|
1729
|
-
var
|
|
1730
|
+
var xr = [
|
|
1730
1731
|
[0xe8d4a51000, "조"],
|
|
1731
1732
|
[1e8, "억"],
|
|
1732
1733
|
[1e4, "만"]
|
|
1733
1734
|
];
|
|
1734
|
-
function
|
|
1735
|
+
function Sr(e) {
|
|
1735
1736
|
return /^ko([-_]|$)/i.test(e);
|
|
1736
1737
|
}
|
|
1737
|
-
function
|
|
1738
|
+
function Cr(e, t, n) {
|
|
1738
1739
|
try {
|
|
1739
1740
|
return j(e, t, n);
|
|
1740
1741
|
} catch {
|
|
1741
1742
|
return K(e, t, "en");
|
|
1742
1743
|
}
|
|
1743
1744
|
}
|
|
1744
|
-
function
|
|
1745
|
+
function wr(e, t) {
|
|
1745
1746
|
let n = t ?? G;
|
|
1746
1747
|
if (!Number.isFinite(e)) return String(e);
|
|
1747
|
-
if (
|
|
1748
|
-
for (let [t, r] of
|
|
1748
|
+
if (Sr(n)) {
|
|
1749
|
+
for (let [t, r] of xr) if (Math.round(e / t * 100) >= 100) return K(e / t, 2, n) + r;
|
|
1749
1750
|
return K(e, 0, n);
|
|
1750
1751
|
}
|
|
1751
|
-
let r = W.has(n) ? (e, t) => K(e, t, n) : (e, t) =>
|
|
1752
|
+
let r = W.has(n) ? (e, t) => K(e, t, n) : (e, t) => Cr(e, t, n);
|
|
1752
1753
|
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);
|
|
1753
1754
|
}
|
|
1754
1755
|
//#endregion
|
|
@@ -1760,14 +1761,14 @@ var q = {
|
|
|
1760
1761
|
ceiling: "#D946EF",
|
|
1761
1762
|
floor: "#06B6D4",
|
|
1762
1763
|
reference: "#EAB308"
|
|
1763
|
-
}, J = "Asia/Ho_Chi_Minh",
|
|
1764
|
+
}, J = "Asia/Ho_Chi_Minh", Tr = {
|
|
1764
1765
|
up: "#E8313F",
|
|
1765
1766
|
down: "#2F6FEB",
|
|
1766
1767
|
unchanged: "#8B8F99",
|
|
1767
1768
|
ceiling: "#C2121F",
|
|
1768
1769
|
floor: "#1E4FC2",
|
|
1769
1770
|
reference: "#8B8F99"
|
|
1770
|
-
},
|
|
1771
|
+
}, Er = "Asia/Seoul", Dr = [
|
|
1771
1772
|
{
|
|
1772
1773
|
name: "ATO",
|
|
1773
1774
|
startTime: "09:00",
|
|
@@ -1798,7 +1799,7 @@ var q = {
|
|
|
1798
1799
|
endTime: "14:45",
|
|
1799
1800
|
type: "preClose"
|
|
1800
1801
|
}
|
|
1801
|
-
],
|
|
1802
|
+
], Or = [
|
|
1802
1803
|
{
|
|
1803
1804
|
name: "Phiên 1",
|
|
1804
1805
|
startTime: "09:15",
|
|
@@ -1829,7 +1830,7 @@ var q = {
|
|
|
1829
1830
|
endTime: "15:00",
|
|
1830
1831
|
type: "postClose"
|
|
1831
1832
|
}
|
|
1832
|
-
],
|
|
1833
|
+
], kr = [
|
|
1833
1834
|
{
|
|
1834
1835
|
name: "Phiên 1",
|
|
1835
1836
|
startTime: "09:15",
|
|
@@ -1848,7 +1849,7 @@ var q = {
|
|
|
1848
1849
|
endTime: "14:30",
|
|
1849
1850
|
type: "continuous"
|
|
1850
1851
|
}
|
|
1851
|
-
],
|
|
1852
|
+
], Ar = [
|
|
1852
1853
|
{
|
|
1853
1854
|
name: "ATO",
|
|
1854
1855
|
startTime: "08:45",
|
|
@@ -1879,7 +1880,7 @@ var q = {
|
|
|
1879
1880
|
endTime: "14:45",
|
|
1880
1881
|
type: "preClose"
|
|
1881
1882
|
}
|
|
1882
|
-
],
|
|
1883
|
+
], jr = [
|
|
1883
1884
|
{
|
|
1884
1885
|
name: "장전 동시호가",
|
|
1885
1886
|
startTime: "08:30",
|
|
@@ -1910,7 +1911,7 @@ var q = {
|
|
|
1910
1911
|
endTime: "20:00",
|
|
1911
1912
|
type: "postClose"
|
|
1912
1913
|
}
|
|
1913
|
-
],
|
|
1914
|
+
], Mr = [
|
|
1914
1915
|
{
|
|
1915
1916
|
name: "프리마켓",
|
|
1916
1917
|
startTime: "08:00",
|
|
@@ -1929,7 +1930,7 @@ var q = {
|
|
|
1929
1930
|
endTime: "20:00",
|
|
1930
1931
|
type: "postClose"
|
|
1931
1932
|
}
|
|
1932
|
-
],
|
|
1933
|
+
], Nr = [
|
|
1933
1934
|
{
|
|
1934
1935
|
from: 0,
|
|
1935
1936
|
step: 1
|
|
@@ -1958,7 +1959,7 @@ var q = {
|
|
|
1958
1959
|
from: 5e5,
|
|
1959
1960
|
step: 1e3
|
|
1960
1961
|
}
|
|
1961
|
-
],
|
|
1962
|
+
], Pr = [
|
|
1962
1963
|
{
|
|
1963
1964
|
from: 0,
|
|
1964
1965
|
step: 1e-8
|
|
@@ -2019,7 +2020,7 @@ var q = {
|
|
|
2019
2020
|
from: 1e6,
|
|
2020
2021
|
step: 1e3
|
|
2021
2022
|
}
|
|
2022
|
-
],
|
|
2023
|
+
], Fr = {
|
|
2023
2024
|
type: "stock",
|
|
2024
2025
|
exchange: "HOSE",
|
|
2025
2026
|
currency: "VND",
|
|
@@ -2046,12 +2047,12 @@ var q = {
|
|
|
2046
2047
|
ceilingPercent: 7,
|
|
2047
2048
|
floorPercent: 7
|
|
2048
2049
|
},
|
|
2049
|
-
sessions:
|
|
2050
|
+
sessions: Dr,
|
|
2050
2051
|
colorScheme: q
|
|
2051
|
-
}, Fr = {
|
|
2052
|
-
...Pr,
|
|
2053
|
-
priceSteps: void 0
|
|
2054
2052
|
}, Ir = {
|
|
2053
|
+
...Fr,
|
|
2054
|
+
priceSteps: void 0
|
|
2055
|
+
}, Lr = {
|
|
2055
2056
|
type: "stock",
|
|
2056
2057
|
exchange: "HNX",
|
|
2057
2058
|
currency: "VND",
|
|
@@ -2064,9 +2065,9 @@ var q = {
|
|
|
2064
2065
|
ceilingPercent: 10,
|
|
2065
2066
|
floorPercent: 10
|
|
2066
2067
|
},
|
|
2067
|
-
sessions:
|
|
2068
|
+
sessions: Or,
|
|
2068
2069
|
colorScheme: q
|
|
2069
|
-
},
|
|
2070
|
+
}, Rr = {
|
|
2070
2071
|
type: "stock",
|
|
2071
2072
|
exchange: "UPCOM",
|
|
2072
2073
|
currency: "VND",
|
|
@@ -2079,9 +2080,9 @@ var q = {
|
|
|
2079
2080
|
ceilingPercent: 15,
|
|
2080
2081
|
floorPercent: 15
|
|
2081
2082
|
},
|
|
2082
|
-
sessions:
|
|
2083
|
+
sessions: kr,
|
|
2083
2084
|
colorScheme: q
|
|
2084
|
-
},
|
|
2085
|
+
}, zr = {
|
|
2085
2086
|
type: "futures",
|
|
2086
2087
|
exchange: "HNX",
|
|
2087
2088
|
currency: "VND",
|
|
@@ -2095,44 +2096,44 @@ var q = {
|
|
|
2095
2096
|
ceilingPercent: 7,
|
|
2096
2097
|
floorPercent: 7
|
|
2097
2098
|
},
|
|
2098
|
-
sessions:
|
|
2099
|
+
sessions: Ar,
|
|
2099
2100
|
colorScheme: q
|
|
2100
|
-
},
|
|
2101
|
+
}, Br = {
|
|
2101
2102
|
type: "stock",
|
|
2102
2103
|
exchange: "KRX",
|
|
2103
2104
|
currency: "KRW",
|
|
2104
2105
|
pricePrecision: 0,
|
|
2105
2106
|
volumeUnit: 1,
|
|
2106
2107
|
priceStep: 1,
|
|
2107
|
-
priceSteps:
|
|
2108
|
-
timeZone:
|
|
2108
|
+
priceSteps: Nr,
|
|
2109
|
+
timeZone: Er,
|
|
2109
2110
|
priceLimits: {
|
|
2110
2111
|
enabled: !0,
|
|
2111
2112
|
ceilingPercent: 30,
|
|
2112
2113
|
floorPercent: 30,
|
|
2113
2114
|
roundMove: !0
|
|
2114
2115
|
},
|
|
2115
|
-
sessions:
|
|
2116
|
-
colorScheme:
|
|
2117
|
-
}, Br = {
|
|
2118
|
-
...zr,
|
|
2119
|
-
exchange: "NXT",
|
|
2120
|
-
sessions: jr
|
|
2116
|
+
sessions: jr,
|
|
2117
|
+
colorScheme: Tr
|
|
2121
2118
|
}, Vr = {
|
|
2119
|
+
...Br,
|
|
2120
|
+
exchange: "NXT",
|
|
2121
|
+
sessions: Mr
|
|
2122
|
+
}, Hr = {
|
|
2122
2123
|
type: "crypto",
|
|
2123
2124
|
exchange: "UPBIT",
|
|
2124
2125
|
currency: "KRW",
|
|
2125
2126
|
priceStep: 1e-8,
|
|
2126
|
-
priceSteps:
|
|
2127
|
-
timeZone:
|
|
2127
|
+
priceSteps: Pr,
|
|
2128
|
+
timeZone: Er,
|
|
2128
2129
|
priceLimits: { enabled: !1 },
|
|
2129
|
-
colorScheme:
|
|
2130
|
-
},
|
|
2130
|
+
colorScheme: Tr
|
|
2131
|
+
}, Ur = {
|
|
2131
2132
|
type: "crypto",
|
|
2132
2133
|
currency: "USDT",
|
|
2133
2134
|
pricePrecision: 2,
|
|
2134
2135
|
priceLimits: { enabled: !1 }
|
|
2135
|
-
},
|
|
2136
|
+
}, Wr = {
|
|
2136
2137
|
type: "stock",
|
|
2137
2138
|
exchange: "NYSE",
|
|
2138
2139
|
currency: "USD",
|
|
@@ -2161,10 +2162,10 @@ var q = {
|
|
|
2161
2162
|
}
|
|
2162
2163
|
]
|
|
2163
2164
|
};
|
|
2164
|
-
function
|
|
2165
|
-
return
|
|
2165
|
+
function Gr(e) {
|
|
2166
|
+
return Kr(e, q);
|
|
2166
2167
|
}
|
|
2167
|
-
function
|
|
2168
|
+
function Kr(e, t) {
|
|
2168
2169
|
return {
|
|
2169
2170
|
...e,
|
|
2170
2171
|
candleUp: t.up,
|
|
@@ -2174,25 +2175,25 @@ function Gr(e, t) {
|
|
|
2174
2175
|
};
|
|
2175
2176
|
}
|
|
2176
2177
|
var Y = 1e-9;
|
|
2177
|
-
function
|
|
2178
|
+
function qr(e, t) {
|
|
2178
2179
|
let n = t.priceStep;
|
|
2179
2180
|
for (let r of t.priceSteps ?? []) e + Y >= r.from && (n = r.step);
|
|
2180
2181
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
2181
2182
|
}
|
|
2182
|
-
function
|
|
2183
|
+
function Jr(e, t) {
|
|
2183
2184
|
let n = t.priceStep;
|
|
2184
2185
|
for (let r of t.priceSteps ?? []) e - Y > r.from && (n = r.step);
|
|
2185
2186
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
2186
2187
|
}
|
|
2187
2188
|
function X(e, t, n = "nearest") {
|
|
2188
|
-
let r =
|
|
2189
|
+
let r = qr(e, t);
|
|
2189
2190
|
if (r === void 0 || !Number.isFinite(e)) return e;
|
|
2190
2191
|
let i = e / r, a = n === "down" ? Math.floor(i + Y) : n === "up" ? Math.ceil(i - Y) : Math.round(i);
|
|
2191
|
-
return Number((a * r).toFixed(
|
|
2192
|
+
return Number((a * r).toFixed(re(r)));
|
|
2192
2193
|
}
|
|
2193
|
-
function
|
|
2194
|
+
function Yr(e, t) {
|
|
2194
2195
|
if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
|
|
2195
|
-
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 =
|
|
2196
|
+
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 = qr(i, t);
|
|
2196
2197
|
if (s === void 0) return {
|
|
2197
2198
|
ceiling: a,
|
|
2198
2199
|
floor: o,
|
|
@@ -2213,14 +2214,14 @@ function Jr(e, t) {
|
|
|
2213
2214
|
};
|
|
2214
2215
|
l = X(i + X(i * n, e, "down"), t, "down"), u = X(i - X(i * r, e, "down"), t, "down");
|
|
2215
2216
|
} else l = X(a, t, "down"), u = X(o, t, "up");
|
|
2216
|
-
return l <= i && (l = c), u >= i && (u = X(i - (
|
|
2217
|
+
return l <= i && (l = c), u >= i && (u = X(i - (Jr(i, t) ?? s), t)), u <= 0 && (u = i), {
|
|
2217
2218
|
ceiling: l,
|
|
2218
2219
|
floor: u,
|
|
2219
2220
|
reference: i
|
|
2220
2221
|
};
|
|
2221
2222
|
}
|
|
2222
2223
|
var Z = (e, t) => Math.round(e * t * 1e9) / 1e9;
|
|
2223
|
-
function
|
|
2224
|
+
function Xr(e, t) {
|
|
2224
2225
|
let n = Math.round(Math.log10(t));
|
|
2225
2226
|
return {
|
|
2226
2227
|
...e,
|
|
@@ -2236,11 +2237,11 @@ function Yr(e, t) {
|
|
|
2236
2237
|
}
|
|
2237
2238
|
};
|
|
2238
2239
|
}
|
|
2239
|
-
var
|
|
2240
|
-
function
|
|
2240
|
+
var Zr = 6e4, Qr = 864e5;
|
|
2241
|
+
function $r(e, t) {
|
|
2241
2242
|
let n, r;
|
|
2242
2243
|
if (t) {
|
|
2243
|
-
let i = new Date(e +
|
|
2244
|
+
let i = new Date(e + y(t, e) * Zr);
|
|
2244
2245
|
n = i.getUTCHours(), r = i.getUTCMinutes();
|
|
2245
2246
|
} else {
|
|
2246
2247
|
let t = new Date(e);
|
|
@@ -2248,31 +2249,31 @@ function Qr(e, t) {
|
|
|
2248
2249
|
}
|
|
2249
2250
|
return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
2250
2251
|
}
|
|
2251
|
-
function
|
|
2252
|
-
if (n !== void 0 && !
|
|
2253
|
-
let r =
|
|
2252
|
+
function ei(e, t = Date.now(), n) {
|
|
2253
|
+
if (n !== void 0 && !We(n)) return null;
|
|
2254
|
+
let r = $r(t, n);
|
|
2254
2255
|
for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
|
|
2255
2256
|
return null;
|
|
2256
2257
|
}
|
|
2257
2258
|
var Q = (e) => String(e).padStart(2, "0"), $ = (e) => {
|
|
2258
2259
|
let t = new Date(e);
|
|
2259
2260
|
return `${t.getUTCFullYear()}-${Q(t.getUTCMonth() + 1)}-${Q(t.getUTCDate())}`;
|
|
2260
|
-
},
|
|
2261
|
-
function
|
|
2262
|
-
let r = Date.UTC(e, t - 1, 1), i = 1 + (
|
|
2261
|
+
}, ti = 4, ni = 7 * 36e5;
|
|
2262
|
+
function ri(e, t, n) {
|
|
2263
|
+
let r = Date.UTC(e, t - 1, 1), i = 1 + (ti - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
|
|
2263
2264
|
let t = new Date(e).getUTCDay();
|
|
2264
2265
|
return t === 0 || t === 6 || (n?.($(e)) ?? !1);
|
|
2265
2266
|
};
|
|
2266
|
-
for (; o(a);) a -=
|
|
2267
|
+
for (; o(a);) a -= Qr;
|
|
2267
2268
|
return $(a);
|
|
2268
2269
|
}
|
|
2269
|
-
function
|
|
2270
|
-
let n = $(e +
|
|
2270
|
+
function ii(e, t) {
|
|
2271
|
+
let n = $(e + ni), r = (e, n) => ({
|
|
2271
2272
|
symbol: `VN30F${Q(e % 100)}${Q(n)}`,
|
|
2272
2273
|
year: e,
|
|
2273
2274
|
month: n,
|
|
2274
|
-
lastTradingDay:
|
|
2275
|
-
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e +
|
|
2275
|
+
lastTradingDay: ri(e, n, t)
|
|
2276
|
+
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + ni), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
|
|
2276
2277
|
n > o.lastTradingDay && (o = i(o));
|
|
2277
2278
|
let s = [o, i(o)], c = i(s[1]);
|
|
2278
2279
|
for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
|
|
@@ -2280,7 +2281,7 @@ function ri(e, t) {
|
|
|
2280
2281
|
}
|
|
2281
2282
|
//#endregion
|
|
2282
2283
|
//#region src/icons/iconSet.ts
|
|
2283
|
-
var
|
|
2284
|
+
var ai = {
|
|
2284
2285
|
cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
|
|
2285
2286
|
trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
|
|
2286
2287
|
trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
|
|
@@ -2447,7 +2448,7 @@ var ii = {
|
|
|
2447
2448
|
]
|
|
2448
2449
|
] },
|
|
2449
2450
|
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" }
|
|
2450
|
-
},
|
|
2451
|
+
}, oi = {
|
|
2451
2452
|
trendLine: {
|
|
2452
2453
|
d: "M5 18L19 6",
|
|
2453
2454
|
dots: [[5, 18], [19, 6]]
|
|
@@ -2807,7 +2808,7 @@ var ii = {
|
|
|
2807
2808
|
],
|
|
2808
2809
|
dash: "M12 3V21"
|
|
2809
2810
|
}
|
|
2810
|
-
},
|
|
2811
|
+
}, si = {
|
|
2811
2812
|
candlestick: {
|
|
2812
2813
|
d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
|
|
2813
2814
|
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"]
|
|
@@ -2874,21 +2875,21 @@ var ii = {
|
|
|
2874
2875
|
"M16 4.5h3v6h-3z"
|
|
2875
2876
|
]
|
|
2876
2877
|
}
|
|
2877
|
-
},
|
|
2878
|
-
function
|
|
2879
|
-
let t =
|
|
2878
|
+
}, ci = 1.75, li = .22, ui = /* @__PURE__ */ new WeakMap();
|
|
2879
|
+
function di(e) {
|
|
2880
|
+
let t = ui.get(e);
|
|
2880
2881
|
if (t) return t;
|
|
2881
2882
|
let n = "";
|
|
2882
|
-
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${
|
|
2883
|
+
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${li}" stroke="none"/>`);
|
|
2883
2884
|
for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
|
|
2884
2885
|
e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
|
|
2885
|
-
for (let [t, r, i =
|
|
2886
|
-
return
|
|
2886
|
+
for (let [t, r, i = ci] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
|
|
2887
|
+
return ui.set(e, n), n;
|
|
2887
2888
|
}
|
|
2888
|
-
function
|
|
2889
|
-
return `<svg xmlns="http://www.w3.org/2000/svg" class="tc-icon" 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">${
|
|
2889
|
+
function fi(e, t) {
|
|
2890
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" class="tc-icon" 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">${di(e)}</svg>`;
|
|
2890
2891
|
}
|
|
2891
2892
|
//#endregion
|
|
2892
|
-
export { t as CHART_STYLE_KEYS,
|
|
2893
|
+
export { t as CHART_STYLE_KEYS, si as CHART_TYPE_ICONS, Dn as DARK_PRICE_LIMITS, Mn as DARK_TERMINAL, An as DARK_THEME, ar as DEFAULT_BAR_SPACING, ir as DEFAULT_BAR_WIDTH, $n as DEFAULT_CHART_OPTIONS, a as DEFAULT_DRAWING_STYLE, hn as DEFAULT_FONT_FAMILY, lr as DEFAULT_PANEL_HEIGHT, l as DEFAULT_RECONNECT, s as DEFAULT_SIGNAL_STYLE, u as DEFAULT_STREAM_CONFIG, rr as DEFAULT_TIMEFRAME_FAVORITES, c as DEFAULT_TRADE_ZONE_STYLE, o as DEFAULT_TRADING_CONFIG, oi as DRAWING_TOOL_ICONS, dr as FIBONACCI, Or as HNX_SESSIONS, Dr as HOSE_SESSIONS, ci as ICON_DOT_RADIUS, li as ICON_SOFT_OPACITY, jr as KRX_SESSIONS, Tr as KR_COLORS, On as LIGHT_PRICE_LIMITS, jn as LIGHT_THEME, n as LINE_TINT_FILL, e as LayerType, Ur as MARKET_CRYPTO, Lr as MARKET_HNX, Fr as MARKET_HOSE, Ir as MARKET_HOSE_ETF, Br as MARKET_KRX, Vr as MARKET_NXT, Wr as MARKET_NYSE, Hr as MARKET_UPBIT_KRW, Rr as MARKET_UPCOM, zr as MARKET_VN30F, d as MAX_SYMBOL_LENGTH, cr as MIN_PANEL_HEIGHT, ye as MS_TIME_THRESHOLD, Mr as NXT_SESSIONS, ur as PHI, or as PRICE_AXIS_WIDTH, jt as PRICE_SOURCES, gn as SANS_FONT_FAMILY, R as TC_PALETTE, kn as TC_SERIES_COLORS, er as TIMEFRAMES_CRYPTO, nr as TIMEFRAMES_FOREX, tr as TIMEFRAMES_STOCK, sr as TIME_AXIS_HEIGHT, ai as UI_ICONS, kr as UPCOM_SESSIONS, Ar as VN30F_SESSIONS, q as VN_COLORS, vn as VOLUME_ALPHA, nt as alignToTimeframe, Ct as autoPricePrecision, yt as barDateParts, vt as barDateZone, be as barTimeUnit, ot as barsAreDaily, Qn as chartStyleValue, pe as clamp, Yr as computePriceLimits, De as computePriceRange, ve as computeTickStep, h as contrastRatio, Kr as createMarketTheme, Gr as createVNTheme, At as detectPrecision, en as drawingOption, U as en, we as findBarIndex, Ee as fitPriceRange, Et as formatFraction, K as formatNumber, j as formatPrice, Tt as formatPriceScaleLabel, tt as formatTimestamp, br as formatVND, kt as formatVolume, wr as formatVolumeLoc, Dt as fractionTick, ei as getCurrentSession, gr as getLocale, yr as getLocaleStrings, ke as hexToRgba, fi as iconSvg, Ft as indicatorSource, Fe as inkOn, he as inverseLerp, it as isDateOnly, Mt as isPriceSource, et as isTimeFrame, b as isUtcTimeZone, We as isValidTimeZone, me as lerp, je as lerpColor, qn as lineDash, Kt as marketStatus, Oe as mergeBar, _e as niceNumber, Se as normalizeBar, xe as normalizeBarTime, x as offsetAt, r as ownFillColor, Te as padPriceRange, It as parseIndicatorSource, C as parseTimeframe, fr as phiStep, Wt as pickBaseTimeframe, Ot as priceFormatterFor, qr as priceStepAt, St as priceTagText, ne as rankSymbols, Un as readChartStyleOverrides, mn as readChartTypeOptions, Kn as readIndicatorPlotStyles, fe as readNews, Wn as readPaneStyle, se as readQuote, Pe as readableOn, vr as registerLocale, zt as resampleBars, Yn as resolveChartTheme, tn as resolveDrawingOptions, Pn as resolveVolumeColors, X as roundToPriceStep, ge as roundToStep, Qt as sanitizeDrawingOptions, pn as sanitizeDrawingStyle, Xr as scaleMarketPrices, ae as sessionMinute, hr as setLocale, Ce as sliceVisibleData, Nt as sourcePrice, re as stepDecimals, ie as symbolTimeZone, _r as t, $e as tickBarCount, ee as tickerOf, rt as timeParts, k as timeframeBucketStart, O as timeframeFollowsDays, ht as timeframeSpansDays, w as timeframeToMs, st as tzLabel, Sr as usesKoreanUnits, pr as vi, ii as vn30fContracts, ri as vn30fLastTradingDay, z as volumeColor, qe as wallToUtc, p as withAlpha, y as zoneOffsetMinutes, Ye as zonedDateFormatter };
|
|
2893
2894
|
|
|
2894
2895
|
//# sourceMappingURL=index.js.map
|