@tradecanvas/commons 1.79.2 → 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 +467 -462
- package/dist/index.js.map +1 -1
- package/dist/types/quote.d.ts.map +1 -1
- package/dist/utils/symbols.d.ts +12 -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 he(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 _e(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 ve(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 ye(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 be(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 xe(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
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 we(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;
|
|
@@ -392,26 +437,26 @@ function Ee(e) {
|
|
|
392
437
|
};
|
|
393
438
|
return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b);
|
|
394
439
|
}
|
|
395
|
-
function
|
|
396
|
-
let n =
|
|
440
|
+
function h(e, t) {
|
|
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
|
|
401
|
-
let i =
|
|
444
|
+
var Ne = 20;
|
|
445
|
+
function Pe(e, t, n, r) {
|
|
446
|
+
let i = h(e, t);
|
|
402
447
|
if (i === null || i >= r) return e;
|
|
403
|
-
for (let i = 1; i <=
|
|
404
|
-
let a =
|
|
405
|
-
if ((
|
|
448
|
+
for (let i = 1; i <= Ne; i++) {
|
|
449
|
+
let a = je(e, n, i / Ne);
|
|
450
|
+
if ((h(a, t) ?? 0) >= r) return a;
|
|
406
451
|
}
|
|
407
452
|
return n;
|
|
408
453
|
}
|
|
409
|
-
function
|
|
410
|
-
return (
|
|
454
|
+
function Fe(e, t, n) {
|
|
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
|
|
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 h = 6e4, Ae = 1440 * h, g = 15 * h, je = 8192, _ = 7 * Ae, Me = 4096, Ne = n
|
|
|
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,34 +479,34 @@ 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,
|
|
459
504
|
after: i
|
|
460
505
|
};
|
|
461
506
|
let a = t;
|
|
462
|
-
for (; r - a >
|
|
463
|
-
let t = a + Math.floor((r - a) /
|
|
464
|
-
|
|
507
|
+
for (; r - a > _;) {
|
|
508
|
+
let t = a + Math.floor((r - a) / _ / 2) * _;
|
|
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
|
|
473
|
-
let n = Math.floor(t /
|
|
517
|
+
function Ke(e, t) {
|
|
518
|
+
let n = Math.floor(t / _), r = `${e}|${n}`, i = v.get(r);
|
|
474
519
|
if (i !== void 0) return i;
|
|
475
|
-
let a = n *
|
|
476
|
-
for (let t of
|
|
520
|
+
let a = n * _, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
|
|
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":
|
|
@@ -496,24 +541,24 @@ function Re(e, t) {
|
|
|
496
541
|
break;
|
|
497
542
|
}
|
|
498
543
|
}
|
|
499
|
-
let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) /
|
|
500
|
-
return v.size >=
|
|
544
|
+
let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / g);
|
|
545
|
+
return v.size >= Le && v.clear(), v.set(r, ee), ee;
|
|
501
546
|
}
|
|
502
|
-
function
|
|
503
|
-
return e === 0 || typeof e == "string" &&
|
|
547
|
+
function b(e) {
|
|
548
|
+
return e === 0 || typeof e == "string" && Be.has(e);
|
|
504
549
|
}
|
|
505
|
-
function
|
|
506
|
-
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e :
|
|
550
|
+
function x(e, t) {
|
|
551
|
+
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : y(e, t);
|
|
507
552
|
}
|
|
508
|
-
function
|
|
509
|
-
let n = e -
|
|
510
|
-
if (n +
|
|
511
|
-
let r = e -
|
|
512
|
-
return r +
|
|
513
|
-
}
|
|
514
|
-
var
|
|
515
|
-
function
|
|
516
|
-
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i =
|
|
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 {
|
|
@@ -527,12 +572,12 @@ function Ve(e, t, n) {
|
|
|
527
572
|
timeZone: a
|
|
528
573
|
});
|
|
529
574
|
}
|
|
530
|
-
let s = typeof n == "number" ? n *
|
|
531
|
-
return i = (e) => o.format(new Date(e + s)),
|
|
575
|
+
let s = typeof n == "number" ? n * g : 0;
|
|
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 He = {
|
|
|
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 w(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 qe(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 Ye(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 Ye(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
|
|
703
|
-
let n = `${e}|${t}`, r =
|
|
704
|
-
return r || (
|
|
746
|
+
var bt = 64, A = /* @__PURE__ */ new Map();
|
|
747
|
+
function xt(e, t) {
|
|
748
|
+
let n = `${e}|${t}`, r = A.get(n);
|
|
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) :
|
|
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
|
-
function
|
|
713
|
-
return
|
|
757
|
+
function j(e, t = 2, n = "en-US") {
|
|
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 =
|
|
725
|
-
return `${r ===
|
|
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
|
-
return
|
|
772
|
+
return j(e / n * 100, 2, i);
|
|
728
773
|
}
|
|
729
|
-
return
|
|
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 wt(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 Tt = [
|
|
|
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 Dt(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 At(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,56 @@ function Nt(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 zt(e, t) {
|
|
844
|
-
if (!e) return 0;
|
|
845
|
-
if (e === t) return 1e3;
|
|
846
|
-
if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
|
|
847
|
-
let n = e.indexOf(t);
|
|
848
|
-
return n >= 0 ? 300 - Math.min(100, n) : 0;
|
|
849
|
-
}
|
|
850
|
-
function Bt(e, t, n = 50, r) {
|
|
851
|
-
let i = t.trim().toUpperCase();
|
|
852
|
-
if (!i) return e.slice(0, n);
|
|
853
|
-
let a = [];
|
|
854
|
-
for (let t of e) {
|
|
855
|
-
let e = Math.max(zt(t.symbol.toUpperCase(), i), zt((t.description ?? "").toUpperCase(), i) * .8);
|
|
856
|
-
e > 0 && a.push({
|
|
857
|
-
info: t,
|
|
858
|
-
score: e + (r?.(t) ?? 0)
|
|
859
|
-
});
|
|
860
|
-
}
|
|
861
|
-
return a.sort((e, t) => t.score - e.score || e.info.symbol.localeCompare(t.info.symbol)), a.slice(0, n).map((e) => e.info);
|
|
862
|
-
}
|
|
863
|
-
function Vt(e) {
|
|
864
|
-
let t = typeof e == "number" ? e : Number(e);
|
|
865
|
-
if (!Number.isFinite(t) || t <= 0) return 0;
|
|
866
|
-
for (let e = 0; e <= 12; e++) {
|
|
867
|
-
let n = t * 10 ** e;
|
|
868
|
-
if (Math.abs(n - Math.round(n)) < 1e-9 * Math.max(1, n)) return e;
|
|
869
|
-
}
|
|
870
|
-
return 12;
|
|
871
|
-
}
|
|
872
|
-
function Ht(e) {
|
|
873
|
-
return e?.timeZone ?? e?.timezone;
|
|
874
|
-
}
|
|
875
|
-
function Ut(e) {
|
|
876
|
-
let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
|
|
877
|
-
if (!t) return null;
|
|
878
|
-
let n = Number(t[1]), r = Number(t[2]);
|
|
879
|
-
return n === 24 && r === 0 ? 1440 : n < 24 && r < 60 ? n * 60 + r : null;
|
|
880
|
-
}
|
|
881
|
-
//#endregion
|
|
882
887
|
//#region src/utils/marketStatus.ts
|
|
883
|
-
var
|
|
884
|
-
function
|
|
885
|
-
let n =
|
|
886
|
-
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);
|
|
887
892
|
return t === null || n === null || t === n ? [] : [{
|
|
888
893
|
start: t,
|
|
889
894
|
end: n,
|
|
890
895
|
days: Array.isArray(e.days) ? e.days : null
|
|
891
896
|
}];
|
|
892
897
|
});
|
|
893
|
-
if (!n || !
|
|
898
|
+
if (!n || !We(n) || r.length === 0 || !Number.isFinite(t)) return {
|
|
894
899
|
state: "always",
|
|
895
900
|
next: null
|
|
896
901
|
};
|
|
897
|
-
let i =
|
|
898
|
-
for (let e = -1; e <=
|
|
899
|
-
let t = a + 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++) {
|
|
904
|
+
let t = a + e * M, n = (Math.floor(t / M) + 4) % 7;
|
|
900
905
|
for (let e of r) {
|
|
901
906
|
if (e.days && !e.days.includes(n)) continue;
|
|
902
|
-
let r = t + e.start *
|
|
907
|
+
let r = t + e.start * N, i = (e.end > e.start ? t : t + M) + e.end * N;
|
|
903
908
|
s.push([o(r), o(i)]);
|
|
904
909
|
}
|
|
905
910
|
}
|
|
@@ -922,15 +927,15 @@ function Gt(e, t) {
|
|
|
922
927
|
}
|
|
923
928
|
//#endregion
|
|
924
929
|
//#region src/utils/drawingOptions.ts
|
|
925
|
-
var
|
|
926
|
-
function
|
|
930
|
+
var qt = 48, Jt = 2e3, Yt = 1e4;
|
|
931
|
+
function Xt(e) {
|
|
927
932
|
if (!Array.isArray(e)) return;
|
|
928
933
|
let t = [];
|
|
929
934
|
for (let n of e) {
|
|
930
|
-
if (t.length >=
|
|
935
|
+
if (t.length >= qt) break;
|
|
931
936
|
if (typeof n != "object" || !n) continue;
|
|
932
937
|
let { value: e, visible: r, color: i } = n;
|
|
933
|
-
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;
|
|
934
939
|
let a = {
|
|
935
940
|
value: e,
|
|
936
941
|
visible: r ?? !0
|
|
@@ -939,117 +944,117 @@ function Yt(e) {
|
|
|
939
944
|
}
|
|
940
945
|
return t;
|
|
941
946
|
}
|
|
942
|
-
function
|
|
947
|
+
function Zt(e, t) {
|
|
943
948
|
switch (e.kind) {
|
|
944
949
|
case "boolean": return typeof t == "boolean" ? t : void 0;
|
|
945
950
|
case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
|
|
946
951
|
case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
|
|
947
|
-
case "levels": return
|
|
948
|
-
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;
|
|
949
954
|
}
|
|
950
955
|
}
|
|
951
|
-
function
|
|
956
|
+
function Qt(e, t) {
|
|
952
957
|
if (!e || typeof t != "object" || !t) return {};
|
|
953
958
|
let n = {};
|
|
954
959
|
for (let [r, i] of Object.entries(t)) {
|
|
955
960
|
let t = e[r];
|
|
956
961
|
if (!t) continue;
|
|
957
|
-
let a =
|
|
962
|
+
let a = Zt(t, i);
|
|
958
963
|
a !== void 0 && (n[r] = a);
|
|
959
964
|
}
|
|
960
965
|
return n;
|
|
961
966
|
}
|
|
962
|
-
function
|
|
967
|
+
function $t(e) {
|
|
963
968
|
return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
|
|
964
969
|
}
|
|
965
|
-
function
|
|
970
|
+
function en(e, t, n) {
|
|
966
971
|
let r = e?.[n];
|
|
967
|
-
return r ?
|
|
972
|
+
return r ? $t((t && n in t ? Zt(r, t[n]) : void 0) ?? r.default) : t?.[n];
|
|
968
973
|
}
|
|
969
|
-
function
|
|
974
|
+
function tn(e, t) {
|
|
970
975
|
let n = {};
|
|
971
|
-
for (let r of Object.keys(e ?? {})) n[r] =
|
|
976
|
+
for (let r of Object.keys(e ?? {})) n[r] = en(e, t, r);
|
|
972
977
|
return n;
|
|
973
978
|
}
|
|
974
979
|
//#endregion
|
|
975
980
|
//#region src/utils/drawingStyle.ts
|
|
976
|
-
var
|
|
981
|
+
var nn = [
|
|
977
982
|
"solid",
|
|
978
983
|
"dashed",
|
|
979
984
|
"dotted"
|
|
980
|
-
],
|
|
985
|
+
], rn = 64, an = 2e3, on = 20, sn = 200, cn = 4e3, ln = 20, un = [
|
|
981
986
|
"left",
|
|
982
987
|
"center",
|
|
983
988
|
"right"
|
|
984
|
-
],
|
|
989
|
+
], dn = [
|
|
985
990
|
"top",
|
|
986
991
|
"middle",
|
|
987
992
|
"bottom"
|
|
988
993
|
];
|
|
989
|
-
function
|
|
994
|
+
function fn(e, t, n) {
|
|
990
995
|
return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
|
|
991
996
|
}
|
|
992
|
-
function
|
|
993
|
-
return typeof e == "string" && e.length > 0 && e.length <=
|
|
997
|
+
function P(e) {
|
|
998
|
+
return typeof e == "string" && e.length > 0 && e.length <= rn ? e : void 0;
|
|
994
999
|
}
|
|
995
|
-
function
|
|
1000
|
+
function pn(e) {
|
|
996
1001
|
if (typeof e != "object" || !e) return {};
|
|
997
|
-
let t = e, n = {}, r =
|
|
1002
|
+
let t = e, n = {}, r = P(t.color);
|
|
998
1003
|
r !== void 0 && (n.color = r);
|
|
999
|
-
let i =
|
|
1000
|
-
i !== void 0 && (n.lineWidth = i),
|
|
1001
|
-
let a =
|
|
1004
|
+
let i = fn(t.lineWidth, .5, on);
|
|
1005
|
+
i !== void 0 && (n.lineWidth = i), nn.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
|
|
1006
|
+
let a = P(t.fillColor);
|
|
1002
1007
|
a !== void 0 && (n.fillColor = a);
|
|
1003
|
-
let o =
|
|
1008
|
+
let o = fn(t.fillOpacity, 0, 1);
|
|
1004
1009
|
o !== void 0 && (n.fillOpacity = o);
|
|
1005
|
-
let s =
|
|
1006
|
-
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));
|
|
1007
1012
|
for (let e of [
|
|
1008
1013
|
"bold",
|
|
1009
1014
|
"italic",
|
|
1010
1015
|
"textBackground",
|
|
1011
1016
|
"textBorder"
|
|
1012
1017
|
]) typeof t[e] == "boolean" && (n[e] = t[e]);
|
|
1013
|
-
|
|
1014
|
-
let c =
|
|
1018
|
+
un.includes(t.textAlign) && (n.textAlign = t.textAlign), dn.includes(t.textVAlign) && (n.textVAlign = t.textVAlign);
|
|
1019
|
+
let c = P(t.textColor);
|
|
1015
1020
|
c !== void 0 && (n.textColor = c);
|
|
1016
|
-
let l =
|
|
1017
|
-
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(
|
|
1021
|
+
let l = P(t.borderColor);
|
|
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;
|
|
1018
1023
|
}
|
|
1019
1024
|
//#endregion
|
|
1020
1025
|
//#region src/utils/chartTypeOptions.ts
|
|
1021
|
-
var
|
|
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);
|
|
1022
1027
|
function mn(e) {
|
|
1023
|
-
if (!
|
|
1028
|
+
if (!L(e)) return {};
|
|
1024
1029
|
let t = {};
|
|
1025
|
-
if (
|
|
1030
|
+
if (L(e.renko)) {
|
|
1026
1031
|
let { boxSize: n, atrPeriod: r } = e.renko;
|
|
1027
1032
|
t.renko = {
|
|
1028
|
-
...
|
|
1029
|
-
...
|
|
1033
|
+
...F(n) || n === "atr" ? { boxSize: n } : {},
|
|
1034
|
+
...I(r, 1, 500) ? { atrPeriod: r } : {}
|
|
1030
1035
|
};
|
|
1031
1036
|
}
|
|
1032
|
-
if (
|
|
1037
|
+
if (L(e.lineBreak)) {
|
|
1033
1038
|
let { lines: n } = e.lineBreak;
|
|
1034
|
-
t.lineBreak =
|
|
1039
|
+
t.lineBreak = I(n, 1, 10) ? { lines: n } : {};
|
|
1035
1040
|
}
|
|
1036
|
-
if (
|
|
1041
|
+
if (L(e.kagi)) {
|
|
1037
1042
|
let { reversal: n, reversalType: r } = e.kagi;
|
|
1038
1043
|
t.kagi = {
|
|
1039
|
-
...
|
|
1044
|
+
...F(n) ? { reversal: n } : {},
|
|
1040
1045
|
...r === "percent" || r === "price" ? { reversalType: r } : {}
|
|
1041
1046
|
};
|
|
1042
1047
|
}
|
|
1043
|
-
if (
|
|
1048
|
+
if (L(e.pointAndFigure)) {
|
|
1044
1049
|
let { boxSize: n, reversal: r } = e.pointAndFigure;
|
|
1045
1050
|
t.pointAndFigure = {
|
|
1046
|
-
...
|
|
1047
|
-
...
|
|
1051
|
+
...F(n) || n === "auto" ? { boxSize: n } : {},
|
|
1052
|
+
...I(r, 1, 10) ? { reversal: r } : {}
|
|
1048
1053
|
};
|
|
1049
1054
|
}
|
|
1050
|
-
if (
|
|
1055
|
+
if (L(e.rangeBars)) {
|
|
1051
1056
|
let { range: n } = e.rangeBars;
|
|
1052
|
-
t.rangeBars =
|
|
1057
|
+
t.rangeBars = F(n) || n === "auto" ? { range: n } : {};
|
|
1053
1058
|
}
|
|
1054
1059
|
return t;
|
|
1055
1060
|
}
|
|
@@ -1060,7 +1065,7 @@ var hn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
|
|
|
1060
1065
|
sizeSmall: 11,
|
|
1061
1066
|
sizeMedium: 13,
|
|
1062
1067
|
sizeLarge: 15
|
|
1063
|
-
},
|
|
1068
|
+
}, R = {
|
|
1064
1069
|
amber: "#f2a93b",
|
|
1065
1070
|
up: "#1c9e6d",
|
|
1066
1071
|
down: "#e8505b",
|
|
@@ -1072,10 +1077,10 @@ var hn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
|
|
|
1072
1077
|
neutral: "#7d8696",
|
|
1073
1078
|
ink: "#131416"
|
|
1074
1079
|
}, vn = .22;
|
|
1075
|
-
function
|
|
1080
|
+
function z(e) {
|
|
1076
1081
|
return p(e, vn);
|
|
1077
1082
|
}
|
|
1078
|
-
var yn = "#fbfaf6",
|
|
1083
|
+
var yn = "#fbfaf6", B = "#1b1d21", bn = "#131416", V = "#e6e3dc", xn = "#1f7a5c", Sn = "#b8423f", Cn = "#4fae8a", wn = "#e2706b", Tn = "#6a6966", En = "#8d8a84", Dn = {
|
|
1079
1084
|
ceiling: "#FF00FF",
|
|
1080
1085
|
floor: "#00FFFF",
|
|
1081
1086
|
reference: "#FFD700"
|
|
@@ -1084,15 +1089,15 @@ var yn = "#fbfaf6", R = "#1b1d21", bn = "#131416", z = "#e6e3dc", xn = "#1f7a5c"
|
|
|
1084
1089
|
floor: "#0e7490",
|
|
1085
1090
|
reference: "#8a6a00"
|
|
1086
1091
|
}, kn = [
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
+
R.blue,
|
|
1093
|
+
R.ochre,
|
|
1094
|
+
R.violet,
|
|
1095
|
+
R.cyan,
|
|
1096
|
+
R.rose
|
|
1092
1097
|
], An = {
|
|
1093
1098
|
name: "dark",
|
|
1094
1099
|
background: bn,
|
|
1095
|
-
text:
|
|
1100
|
+
text: V,
|
|
1096
1101
|
textSecondary: "#8d8b86",
|
|
1097
1102
|
grid: "#1d1e21",
|
|
1098
1103
|
crosshair: Tn,
|
|
@@ -1100,11 +1105,11 @@ var yn = "#fbfaf6", R = "#1b1d21", bn = "#131416", z = "#e6e3dc", xn = "#1f7a5c"
|
|
|
1100
1105
|
candleDown: wn,
|
|
1101
1106
|
candleUpWick: Cn,
|
|
1102
1107
|
candleDownWick: wn,
|
|
1103
|
-
lineColor:
|
|
1104
|
-
areaTopColor: p(
|
|
1105
|
-
areaBottomColor: p(
|
|
1106
|
-
volumeUp: p(
|
|
1107
|
-
volumeDown: p(
|
|
1108
|
+
lineColor: V,
|
|
1109
|
+
areaTopColor: p(V, .14),
|
|
1110
|
+
areaBottomColor: p(V, 0),
|
|
1111
|
+
volumeUp: p(V, .14),
|
|
1112
|
+
volumeDown: p(V, .08),
|
|
1108
1113
|
axisLine: "#2a2b2f",
|
|
1109
1114
|
axisLabel: "#a9a6a0",
|
|
1110
1115
|
axisLabelBackground: "#232427",
|
|
@@ -1113,7 +1118,7 @@ var yn = "#fbfaf6", R = "#1b1d21", bn = "#131416", z = "#e6e3dc", xn = "#1f7a5c"
|
|
|
1113
1118
|
}, jn = {
|
|
1114
1119
|
name: "light",
|
|
1115
1120
|
background: yn,
|
|
1116
|
-
text:
|
|
1121
|
+
text: B,
|
|
1117
1122
|
textSecondary: "#6b6f76",
|
|
1118
1123
|
grid: "#ece8df",
|
|
1119
1124
|
crosshair: En,
|
|
@@ -1121,17 +1126,17 @@ var yn = "#fbfaf6", R = "#1b1d21", bn = "#131416", z = "#e6e3dc", xn = "#1f7a5c"
|
|
|
1121
1126
|
candleDown: Sn,
|
|
1122
1127
|
candleUpWick: xn,
|
|
1123
1128
|
candleDownWick: Sn,
|
|
1124
|
-
lineColor:
|
|
1125
|
-
areaTopColor: p(
|
|
1126
|
-
areaBottomColor: p(
|
|
1127
|
-
volumeUp: p(
|
|
1128
|
-
volumeDown: p(
|
|
1129
|
+
lineColor: B,
|
|
1130
|
+
areaTopColor: p(B, .12),
|
|
1131
|
+
areaBottomColor: p(B, 0),
|
|
1132
|
+
volumeUp: p(B, .13),
|
|
1133
|
+
volumeDown: p(B, .08),
|
|
1129
1134
|
axisLine: "#cfcac0",
|
|
1130
1135
|
axisLabel: "#4a4e57",
|
|
1131
1136
|
axisLabelBackground: "#eeebe3",
|
|
1132
1137
|
font: _n,
|
|
1133
1138
|
priceLimits: On
|
|
1134
|
-
},
|
|
1139
|
+
}, Mn = {
|
|
1135
1140
|
name: "terminal",
|
|
1136
1141
|
background: "#0E0E0E",
|
|
1137
1142
|
text: "#C0C0C0",
|
|
@@ -1145,8 +1150,8 @@ var yn = "#fbfaf6", R = "#1b1d21", bn = "#131416", z = "#e6e3dc", xn = "#1f7a5c"
|
|
|
1145
1150
|
lineColor: "#3D8BFD",
|
|
1146
1151
|
areaTopColor: "rgba(61, 139, 253, 0.3)",
|
|
1147
1152
|
areaBottomColor: "rgba(61, 139, 253, 0.0)",
|
|
1148
|
-
volumeUp:
|
|
1149
|
-
volumeDown:
|
|
1153
|
+
volumeUp: z("#00FF87"),
|
|
1154
|
+
volumeDown: z("#FF3B4D"),
|
|
1150
1155
|
axisLine: "#1A1A1A",
|
|
1151
1156
|
axisLabel: "#8A8A8A",
|
|
1152
1157
|
axisLabelBackground: "#1A1A1A",
|
|
@@ -1156,11 +1161,11 @@ var yn = "#fbfaf6", R = "#1b1d21", bn = "#131416", z = "#e6e3dc", xn = "#1f7a5c"
|
|
|
1156
1161
|
sizeMedium: 12,
|
|
1157
1162
|
sizeLarge: 14
|
|
1158
1163
|
}
|
|
1159
|
-
},
|
|
1160
|
-
function
|
|
1164
|
+
}, Nn = new Set([Mn.volumeUp, Mn.volumeDown]);
|
|
1165
|
+
function Pn(e) {
|
|
1161
1166
|
let t = (e, t) => {
|
|
1162
|
-
if (!
|
|
1163
|
-
let n =
|
|
1167
|
+
if (!Nn.has(e)) return e;
|
|
1168
|
+
let n = z(t);
|
|
1164
1169
|
return n === t ? e : n;
|
|
1165
1170
|
};
|
|
1166
1171
|
return {
|
|
@@ -1170,67 +1175,67 @@ function V(e) {
|
|
|
1170
1175
|
}
|
|
1171
1176
|
//#endregion
|
|
1172
1177
|
//#region src/utils/chartStyle.ts
|
|
1173
|
-
var
|
|
1178
|
+
var Fn = [
|
|
1174
1179
|
"solid",
|
|
1175
1180
|
"dashed",
|
|
1176
1181
|
"dotted"
|
|
1177
|
-
],
|
|
1182
|
+
], In = 20, Ln = 64, Rn = 2, zn = [
|
|
1178
1183
|
/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
|
|
1179
1184
|
/^[a-z]{3,30}$/i,
|
|
1180
1185
|
/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
|
|
1181
1186
|
];
|
|
1182
|
-
function
|
|
1183
|
-
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()));
|
|
1184
1189
|
}
|
|
1185
|
-
function
|
|
1190
|
+
function Vn(e, t) {
|
|
1186
1191
|
switch (e) {
|
|
1187
|
-
case "color": return
|
|
1188
|
-
case "lineStyle": return
|
|
1189
|
-
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;
|
|
1190
1195
|
case "boolean": return typeof t == "boolean";
|
|
1191
1196
|
}
|
|
1192
1197
|
}
|
|
1193
|
-
function
|
|
1198
|
+
function Hn(e) {
|
|
1194
1199
|
return Object.prototype.hasOwnProperty.call(t, e);
|
|
1195
1200
|
}
|
|
1196
|
-
function
|
|
1201
|
+
function Un(e) {
|
|
1197
1202
|
let n = {}, r = [];
|
|
1198
1203
|
if (typeof e != "object" || !e || Array.isArray(e)) return {
|
|
1199
1204
|
overrides: {},
|
|
1200
1205
|
rejected: r
|
|
1201
1206
|
};
|
|
1202
|
-
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);
|
|
1203
1208
|
return {
|
|
1204
1209
|
overrides: n,
|
|
1205
1210
|
rejected: r
|
|
1206
1211
|
};
|
|
1207
1212
|
}
|
|
1208
|
-
function
|
|
1213
|
+
function Wn(e) {
|
|
1209
1214
|
if (typeof e != "object" || !e || Array.isArray(e)) return null;
|
|
1210
1215
|
let { background: t, separator: n } = e, r = {
|
|
1211
|
-
...
|
|
1212
|
-
...
|
|
1216
|
+
...Bn(t) ? { background: t } : {},
|
|
1217
|
+
...Bn(n) ? { separator: n } : {}
|
|
1213
1218
|
};
|
|
1214
1219
|
return Object.keys(r).length > 0 ? r : null;
|
|
1215
1220
|
}
|
|
1216
|
-
var
|
|
1217
|
-
function
|
|
1221
|
+
var Gn = /^[A-Za-z0-9_]{1,32}$/;
|
|
1222
|
+
function Kn(e) {
|
|
1218
1223
|
if (typeof e != "object" || !e || Array.isArray(e)) return;
|
|
1219
1224
|
let t = {};
|
|
1220
1225
|
for (let [n, r] of Object.entries(e)) {
|
|
1221
|
-
if (!
|
|
1226
|
+
if (!Gn.test(n) || typeof r != "object" || !r) continue;
|
|
1222
1227
|
let { lineStyle: e, visible: i } = r, a = {
|
|
1223
|
-
...
|
|
1228
|
+
...Fn.includes(e) ? { lineStyle: e } : {},
|
|
1224
1229
|
...typeof i == "boolean" ? { visible: i } : {}
|
|
1225
1230
|
};
|
|
1226
1231
|
Object.keys(a).length > 0 && (t[n] = a);
|
|
1227
1232
|
}
|
|
1228
1233
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
1229
1234
|
}
|
|
1230
|
-
function
|
|
1235
|
+
function qn(e, t, n = 1) {
|
|
1231
1236
|
return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
|
|
1232
1237
|
}
|
|
1233
|
-
function
|
|
1238
|
+
function Jn(e, t, n) {
|
|
1234
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;
|
|
1235
1240
|
return {
|
|
1236
1241
|
up: o,
|
|
@@ -1238,7 +1243,7 @@ function Kn(e, t, n) {
|
|
|
1238
1243
|
wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
|
|
1239
1244
|
wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
|
|
1240
1245
|
line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
|
|
1241
|
-
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ??
|
|
1246
|
+
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? Rn,
|
|
1242
1247
|
top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
|
|
1243
1248
|
bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
|
|
1244
1249
|
};
|
|
@@ -1251,8 +1256,8 @@ function H(e, t, n) {
|
|
|
1251
1256
|
width: e(`${t}.width`) ?? n.width
|
|
1252
1257
|
};
|
|
1253
1258
|
}
|
|
1254
|
-
function
|
|
1255
|
-
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 = {
|
|
1256
1261
|
panes: {
|
|
1257
1262
|
background: l("panes.background", c),
|
|
1258
1263
|
separator: l("panes.separatorColor", i.axisLine),
|
|
@@ -1351,7 +1356,7 @@ function qn(e, t, n) {
|
|
|
1351
1356
|
style: d
|
|
1352
1357
|
};
|
|
1353
1358
|
}
|
|
1354
|
-
var
|
|
1359
|
+
var Xn = {
|
|
1355
1360
|
"background.color": (e) => e.background,
|
|
1356
1361
|
"panes.background": (e, t) => t.panes.background,
|
|
1357
1362
|
"panes.separatorColor": (e, t) => t.panes.separator,
|
|
@@ -1370,8 +1375,8 @@ var Jn = {
|
|
|
1370
1375
|
"lastPrice.downColor": (e, t) => t.lastPrice.down,
|
|
1371
1376
|
"lastPrice.style": (e, t) => t.lastPrice.style,
|
|
1372
1377
|
"lastPrice.width": (e, t) => t.lastPrice.width,
|
|
1373
|
-
"volume.upColor": (e) =>
|
|
1374
|
-
"volume.downColor": (e) =>
|
|
1378
|
+
"volume.upColor": (e) => Pn(e).up,
|
|
1379
|
+
"volume.downColor": (e) => Pn(e).down,
|
|
1375
1380
|
"sessionBreaks.color": (e, t) => t.sessionBreaks.color,
|
|
1376
1381
|
"sessionBreaks.style": (e, t) => t.sessionBreaks.style,
|
|
1377
1382
|
"sessionBreaks.width": (e, t) => t.sessionBreaks.width,
|
|
@@ -1388,16 +1393,16 @@ var Jn = {
|
|
|
1388
1393
|
"tradeZones.lossColor": (e, t) => t.tradeZones.loss,
|
|
1389
1394
|
"tradeZones.activeColor": (e, t) => t.tradeZones.active,
|
|
1390
1395
|
"drawings.handleColor": (e, t) => t.drawings.handle
|
|
1391
|
-
},
|
|
1396
|
+
}, Zn = {
|
|
1392
1397
|
visible: "visible",
|
|
1393
1398
|
color: "color",
|
|
1394
1399
|
style: "style",
|
|
1395
1400
|
width: "width"
|
|
1396
1401
|
};
|
|
1397
|
-
function
|
|
1402
|
+
function Qn(e, t, n, r = "candlestick") {
|
|
1398
1403
|
let i = n.split(".");
|
|
1399
1404
|
if (i[0] === "series") {
|
|
1400
|
-
let n =
|
|
1405
|
+
let n = Jn(e, (e) => t[e], i[1]);
|
|
1401
1406
|
switch (i[2]) {
|
|
1402
1407
|
case "upColor": return n.up;
|
|
1403
1408
|
case "downColor": return n.down;
|
|
@@ -1410,12 +1415,12 @@ function Xn(e, t, n, r = "candlestick") {
|
|
|
1410
1415
|
case "bottomColor": return n.bottom;
|
|
1411
1416
|
}
|
|
1412
1417
|
}
|
|
1413
|
-
let a =
|
|
1414
|
-
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;
|
|
1415
1420
|
}
|
|
1416
1421
|
//#endregion
|
|
1417
1422
|
//#region src/constants/defaults.ts
|
|
1418
|
-
var
|
|
1423
|
+
var $n = {
|
|
1419
1424
|
autoScale: !0,
|
|
1420
1425
|
rightMargin: 5,
|
|
1421
1426
|
minBarSpacing: 2,
|
|
@@ -1426,7 +1431,7 @@ var Zn = {
|
|
|
1426
1431
|
vLineStyle: "solid"
|
|
1427
1432
|
},
|
|
1428
1433
|
crosshair: { mode: "magnet" }
|
|
1429
|
-
},
|
|
1434
|
+
}, er = [
|
|
1430
1435
|
"1s",
|
|
1431
1436
|
"1m",
|
|
1432
1437
|
"3m",
|
|
@@ -1443,7 +1448,7 @@ var Zn = {
|
|
|
1443
1448
|
"3d",
|
|
1444
1449
|
"1w",
|
|
1445
1450
|
"1M"
|
|
1446
|
-
],
|
|
1451
|
+
], tr = [
|
|
1447
1452
|
"1m",
|
|
1448
1453
|
"5m",
|
|
1449
1454
|
"15m",
|
|
@@ -1457,7 +1462,7 @@ var Zn = {
|
|
|
1457
1462
|
"3M",
|
|
1458
1463
|
"6M",
|
|
1459
1464
|
"12M"
|
|
1460
|
-
],
|
|
1465
|
+
], nr = [
|
|
1461
1466
|
"1m",
|
|
1462
1467
|
"5m",
|
|
1463
1468
|
"15m",
|
|
@@ -1467,7 +1472,7 @@ var Zn = {
|
|
|
1467
1472
|
"1d",
|
|
1468
1473
|
"1w",
|
|
1469
1474
|
"1M"
|
|
1470
|
-
],
|
|
1475
|
+
], rr = [
|
|
1471
1476
|
"1m",
|
|
1472
1477
|
"5m",
|
|
1473
1478
|
"15m",
|
|
@@ -1475,7 +1480,7 @@ var Zn = {
|
|
|
1475
1480
|
"4h",
|
|
1476
1481
|
"1d",
|
|
1477
1482
|
"1w"
|
|
1478
|
-
],
|
|
1483
|
+
], ir = 8, ar = 2, or = 70, sr = 30, cr = 60, lr = 120, ur = (1 + Math.sqrt(5)) / 2, dr = [
|
|
1479
1484
|
1,
|
|
1480
1485
|
2,
|
|
1481
1486
|
3,
|
|
@@ -1487,8 +1492,8 @@ var Zn = {
|
|
|
1487
1492
|
55,
|
|
1488
1493
|
89
|
|
1489
1494
|
];
|
|
1490
|
-
function
|
|
1491
|
-
return Math.round(e *
|
|
1495
|
+
function fr(e, t, n = 1) {
|
|
1496
|
+
return Math.round(e * ur ** (t / n));
|
|
1492
1497
|
}
|
|
1493
1498
|
//#endregion
|
|
1494
1499
|
//#region src/i18n/en.ts
|
|
@@ -1595,7 +1600,7 @@ var U = {
|
|
|
1595
1600
|
error: "Error",
|
|
1596
1601
|
numberDecimalSeparator: ".",
|
|
1597
1602
|
numberGroupSeparator: ","
|
|
1598
|
-
},
|
|
1603
|
+
}, pr = {
|
|
1599
1604
|
candlestick: "Nến",
|
|
1600
1605
|
line: "Đường",
|
|
1601
1606
|
area: "Vùng",
|
|
@@ -1698,20 +1703,20 @@ var U = {
|
|
|
1698
1703
|
error: "Lỗi",
|
|
1699
1704
|
numberDecimalSeparator: ",",
|
|
1700
1705
|
numberGroupSeparator: "."
|
|
1701
|
-
}, W = new Map([["en", U], ["vi",
|
|
1702
|
-
function
|
|
1703
|
-
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;
|
|
1704
1709
|
}
|
|
1705
|
-
function
|
|
1710
|
+
function gr() {
|
|
1706
1711
|
return G;
|
|
1707
1712
|
}
|
|
1708
|
-
function
|
|
1709
|
-
return
|
|
1713
|
+
function _r(e) {
|
|
1714
|
+
return mr[e] ?? U[e] ?? e;
|
|
1710
1715
|
}
|
|
1711
|
-
function
|
|
1716
|
+
function vr(e, t) {
|
|
1712
1717
|
W.set(e, t);
|
|
1713
1718
|
}
|
|
1714
|
-
function
|
|
1719
|
+
function yr(e) {
|
|
1715
1720
|
return W.get(e ?? G) ?? U;
|
|
1716
1721
|
}
|
|
1717
1722
|
function K(e, t = 2, n) {
|
|
@@ -1719,32 +1724,32 @@ function K(e, t = 2, n) {
|
|
|
1719
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;
|
|
1720
1725
|
return c && (u = "-" + u), s ? u + i + s : u;
|
|
1721
1726
|
}
|
|
1722
|
-
function
|
|
1727
|
+
function br(e) {
|
|
1723
1728
|
return K(e, 0, "vi");
|
|
1724
1729
|
}
|
|
1725
|
-
var
|
|
1730
|
+
var xr = [
|
|
1726
1731
|
[0xe8d4a51000, "조"],
|
|
1727
1732
|
[1e8, "억"],
|
|
1728
1733
|
[1e4, "만"]
|
|
1729
1734
|
];
|
|
1730
|
-
function
|
|
1735
|
+
function Sr(e) {
|
|
1731
1736
|
return /^ko([-_]|$)/i.test(e);
|
|
1732
1737
|
}
|
|
1733
|
-
function
|
|
1738
|
+
function Cr(e, t, n) {
|
|
1734
1739
|
try {
|
|
1735
|
-
return
|
|
1740
|
+
return j(e, t, n);
|
|
1736
1741
|
} catch {
|
|
1737
1742
|
return K(e, t, "en");
|
|
1738
1743
|
}
|
|
1739
1744
|
}
|
|
1740
|
-
function
|
|
1745
|
+
function wr(e, t) {
|
|
1741
1746
|
let n = t ?? G;
|
|
1742
1747
|
if (!Number.isFinite(e)) return String(e);
|
|
1743
|
-
if (
|
|
1744
|
-
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;
|
|
1745
1750
|
return K(e, 0, n);
|
|
1746
1751
|
}
|
|
1747
|
-
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);
|
|
1748
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);
|
|
1749
1754
|
}
|
|
1750
1755
|
//#endregion
|
|
@@ -1756,14 +1761,14 @@ var q = {
|
|
|
1756
1761
|
ceiling: "#D946EF",
|
|
1757
1762
|
floor: "#06B6D4",
|
|
1758
1763
|
reference: "#EAB308"
|
|
1759
|
-
}, J = "Asia/Ho_Chi_Minh",
|
|
1764
|
+
}, J = "Asia/Ho_Chi_Minh", Tr = {
|
|
1760
1765
|
up: "#E8313F",
|
|
1761
1766
|
down: "#2F6FEB",
|
|
1762
1767
|
unchanged: "#8B8F99",
|
|
1763
1768
|
ceiling: "#C2121F",
|
|
1764
1769
|
floor: "#1E4FC2",
|
|
1765
1770
|
reference: "#8B8F99"
|
|
1766
|
-
},
|
|
1771
|
+
}, Er = "Asia/Seoul", Dr = [
|
|
1767
1772
|
{
|
|
1768
1773
|
name: "ATO",
|
|
1769
1774
|
startTime: "09:00",
|
|
@@ -1794,7 +1799,7 @@ var q = {
|
|
|
1794
1799
|
endTime: "14:45",
|
|
1795
1800
|
type: "preClose"
|
|
1796
1801
|
}
|
|
1797
|
-
],
|
|
1802
|
+
], Or = [
|
|
1798
1803
|
{
|
|
1799
1804
|
name: "Phiên 1",
|
|
1800
1805
|
startTime: "09:15",
|
|
@@ -1825,7 +1830,7 @@ var q = {
|
|
|
1825
1830
|
endTime: "15:00",
|
|
1826
1831
|
type: "postClose"
|
|
1827
1832
|
}
|
|
1828
|
-
],
|
|
1833
|
+
], kr = [
|
|
1829
1834
|
{
|
|
1830
1835
|
name: "Phiên 1",
|
|
1831
1836
|
startTime: "09:15",
|
|
@@ -1844,7 +1849,7 @@ var q = {
|
|
|
1844
1849
|
endTime: "14:30",
|
|
1845
1850
|
type: "continuous"
|
|
1846
1851
|
}
|
|
1847
|
-
],
|
|
1852
|
+
], Ar = [
|
|
1848
1853
|
{
|
|
1849
1854
|
name: "ATO",
|
|
1850
1855
|
startTime: "08:45",
|
|
@@ -1875,7 +1880,7 @@ var q = {
|
|
|
1875
1880
|
endTime: "14:45",
|
|
1876
1881
|
type: "preClose"
|
|
1877
1882
|
}
|
|
1878
|
-
],
|
|
1883
|
+
], jr = [
|
|
1879
1884
|
{
|
|
1880
1885
|
name: "장전 동시호가",
|
|
1881
1886
|
startTime: "08:30",
|
|
@@ -1906,7 +1911,7 @@ var q = {
|
|
|
1906
1911
|
endTime: "20:00",
|
|
1907
1912
|
type: "postClose"
|
|
1908
1913
|
}
|
|
1909
|
-
],
|
|
1914
|
+
], Mr = [
|
|
1910
1915
|
{
|
|
1911
1916
|
name: "프리마켓",
|
|
1912
1917
|
startTime: "08:00",
|
|
@@ -1925,7 +1930,7 @@ var q = {
|
|
|
1925
1930
|
endTime: "20:00",
|
|
1926
1931
|
type: "postClose"
|
|
1927
1932
|
}
|
|
1928
|
-
],
|
|
1933
|
+
], Nr = [
|
|
1929
1934
|
{
|
|
1930
1935
|
from: 0,
|
|
1931
1936
|
step: 1
|
|
@@ -1954,7 +1959,7 @@ var q = {
|
|
|
1954
1959
|
from: 5e5,
|
|
1955
1960
|
step: 1e3
|
|
1956
1961
|
}
|
|
1957
|
-
],
|
|
1962
|
+
], Pr = [
|
|
1958
1963
|
{
|
|
1959
1964
|
from: 0,
|
|
1960
1965
|
step: 1e-8
|
|
@@ -2015,7 +2020,7 @@ var q = {
|
|
|
2015
2020
|
from: 1e6,
|
|
2016
2021
|
step: 1e3
|
|
2017
2022
|
}
|
|
2018
|
-
],
|
|
2023
|
+
], Fr = {
|
|
2019
2024
|
type: "stock",
|
|
2020
2025
|
exchange: "HOSE",
|
|
2021
2026
|
currency: "VND",
|
|
@@ -2042,12 +2047,12 @@ var q = {
|
|
|
2042
2047
|
ceilingPercent: 7,
|
|
2043
2048
|
floorPercent: 7
|
|
2044
2049
|
},
|
|
2045
|
-
sessions:
|
|
2050
|
+
sessions: Dr,
|
|
2046
2051
|
colorScheme: q
|
|
2047
|
-
},
|
|
2048
|
-
...
|
|
2052
|
+
}, Ir = {
|
|
2053
|
+
...Fr,
|
|
2049
2054
|
priceSteps: void 0
|
|
2050
|
-
},
|
|
2055
|
+
}, Lr = {
|
|
2051
2056
|
type: "stock",
|
|
2052
2057
|
exchange: "HNX",
|
|
2053
2058
|
currency: "VND",
|
|
@@ -2060,9 +2065,9 @@ var q = {
|
|
|
2060
2065
|
ceilingPercent: 10,
|
|
2061
2066
|
floorPercent: 10
|
|
2062
2067
|
},
|
|
2063
|
-
sessions:
|
|
2068
|
+
sessions: Or,
|
|
2064
2069
|
colorScheme: q
|
|
2065
|
-
},
|
|
2070
|
+
}, Rr = {
|
|
2066
2071
|
type: "stock",
|
|
2067
2072
|
exchange: "UPCOM",
|
|
2068
2073
|
currency: "VND",
|
|
@@ -2075,9 +2080,9 @@ var q = {
|
|
|
2075
2080
|
ceilingPercent: 15,
|
|
2076
2081
|
floorPercent: 15
|
|
2077
2082
|
},
|
|
2078
|
-
sessions:
|
|
2083
|
+
sessions: kr,
|
|
2079
2084
|
colorScheme: q
|
|
2080
|
-
},
|
|
2085
|
+
}, zr = {
|
|
2081
2086
|
type: "futures",
|
|
2082
2087
|
exchange: "HNX",
|
|
2083
2088
|
currency: "VND",
|
|
@@ -2091,44 +2096,44 @@ var q = {
|
|
|
2091
2096
|
ceilingPercent: 7,
|
|
2092
2097
|
floorPercent: 7
|
|
2093
2098
|
},
|
|
2094
|
-
sessions:
|
|
2099
|
+
sessions: Ar,
|
|
2095
2100
|
colorScheme: q
|
|
2096
|
-
},
|
|
2101
|
+
}, Br = {
|
|
2097
2102
|
type: "stock",
|
|
2098
2103
|
exchange: "KRX",
|
|
2099
2104
|
currency: "KRW",
|
|
2100
2105
|
pricePrecision: 0,
|
|
2101
2106
|
volumeUnit: 1,
|
|
2102
2107
|
priceStep: 1,
|
|
2103
|
-
priceSteps:
|
|
2104
|
-
timeZone:
|
|
2108
|
+
priceSteps: Nr,
|
|
2109
|
+
timeZone: Er,
|
|
2105
2110
|
priceLimits: {
|
|
2106
2111
|
enabled: !0,
|
|
2107
2112
|
ceilingPercent: 30,
|
|
2108
2113
|
floorPercent: 30,
|
|
2109
2114
|
roundMove: !0
|
|
2110
2115
|
},
|
|
2111
|
-
sessions:
|
|
2112
|
-
colorScheme:
|
|
2113
|
-
},
|
|
2114
|
-
...
|
|
2116
|
+
sessions: jr,
|
|
2117
|
+
colorScheme: Tr
|
|
2118
|
+
}, Vr = {
|
|
2119
|
+
...Br,
|
|
2115
2120
|
exchange: "NXT",
|
|
2116
|
-
sessions:
|
|
2117
|
-
},
|
|
2121
|
+
sessions: Mr
|
|
2122
|
+
}, Hr = {
|
|
2118
2123
|
type: "crypto",
|
|
2119
2124
|
exchange: "UPBIT",
|
|
2120
2125
|
currency: "KRW",
|
|
2121
2126
|
priceStep: 1e-8,
|
|
2122
|
-
priceSteps:
|
|
2123
|
-
timeZone:
|
|
2127
|
+
priceSteps: Pr,
|
|
2128
|
+
timeZone: Er,
|
|
2124
2129
|
priceLimits: { enabled: !1 },
|
|
2125
|
-
colorScheme:
|
|
2126
|
-
},
|
|
2130
|
+
colorScheme: Tr
|
|
2131
|
+
}, Ur = {
|
|
2127
2132
|
type: "crypto",
|
|
2128
2133
|
currency: "USDT",
|
|
2129
2134
|
pricePrecision: 2,
|
|
2130
2135
|
priceLimits: { enabled: !1 }
|
|
2131
|
-
},
|
|
2136
|
+
}, Wr = {
|
|
2132
2137
|
type: "stock",
|
|
2133
2138
|
exchange: "NYSE",
|
|
2134
2139
|
currency: "USD",
|
|
@@ -2157,10 +2162,10 @@ var q = {
|
|
|
2157
2162
|
}
|
|
2158
2163
|
]
|
|
2159
2164
|
};
|
|
2160
|
-
function
|
|
2161
|
-
return
|
|
2165
|
+
function Gr(e) {
|
|
2166
|
+
return Kr(e, q);
|
|
2162
2167
|
}
|
|
2163
|
-
function
|
|
2168
|
+
function Kr(e, t) {
|
|
2164
2169
|
return {
|
|
2165
2170
|
...e,
|
|
2166
2171
|
candleUp: t.up,
|
|
@@ -2169,33 +2174,33 @@ function Ur(e, t) {
|
|
|
2169
2174
|
candleDownWick: t.down
|
|
2170
2175
|
};
|
|
2171
2176
|
}
|
|
2172
|
-
var
|
|
2173
|
-
function
|
|
2177
|
+
var Y = 1e-9;
|
|
2178
|
+
function qr(e, t) {
|
|
2174
2179
|
let n = t.priceStep;
|
|
2175
|
-
for (let r of t.priceSteps ?? []) e +
|
|
2180
|
+
for (let r of t.priceSteps ?? []) e + Y >= r.from && (n = r.step);
|
|
2176
2181
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
2177
2182
|
}
|
|
2178
|
-
function
|
|
2183
|
+
function Jr(e, t) {
|
|
2179
2184
|
let n = t.priceStep;
|
|
2180
|
-
for (let r of t.priceSteps ?? []) e -
|
|
2185
|
+
for (let r of t.priceSteps ?? []) e - Y > r.from && (n = r.step);
|
|
2181
2186
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
2182
2187
|
}
|
|
2183
|
-
function
|
|
2184
|
-
let r =
|
|
2188
|
+
function X(e, t, n = "nearest") {
|
|
2189
|
+
let r = qr(e, t);
|
|
2185
2190
|
if (r === void 0 || !Number.isFinite(e)) return e;
|
|
2186
|
-
let i = e / r, a = n === "down" ? Math.floor(i +
|
|
2187
|
-
return Number((a * r).toFixed(
|
|
2191
|
+
let i = e / r, a = n === "down" ? Math.floor(i + Y) : n === "up" ? Math.ceil(i - Y) : Math.round(i);
|
|
2192
|
+
return Number((a * r).toFixed(re(r)));
|
|
2188
2193
|
}
|
|
2189
|
-
function
|
|
2194
|
+
function Yr(e, t) {
|
|
2190
2195
|
if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
|
|
2191
|
-
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);
|
|
2192
2197
|
if (s === void 0) return {
|
|
2193
2198
|
ceiling: a,
|
|
2194
2199
|
floor: o,
|
|
2195
2200
|
reference: i
|
|
2196
2201
|
};
|
|
2197
|
-
let c =
|
|
2198
|
-
if (Math.abs(i - s) <
|
|
2202
|
+
let c = X(i + s, t);
|
|
2203
|
+
if (Math.abs(i - s) < Y) return {
|
|
2199
2204
|
ceiling: c,
|
|
2200
2205
|
floor: i,
|
|
2201
2206
|
reference: i
|
|
@@ -2207,36 +2212,36 @@ function Kr(e, t) {
|
|
|
2207
2212
|
priceStep: s,
|
|
2208
2213
|
priceSteps: void 0
|
|
2209
2214
|
};
|
|
2210
|
-
l =
|
|
2211
|
-
} else l =
|
|
2212
|
-
return l <= i && (l = c), u >= i && (u =
|
|
2215
|
+
l = X(i + X(i * n, e, "down"), t, "down"), u = X(i - X(i * r, e, "down"), t, "down");
|
|
2216
|
+
} else l = X(a, t, "down"), u = X(o, t, "up");
|
|
2217
|
+
return l <= i && (l = c), u >= i && (u = X(i - (Jr(i, t) ?? s), t)), u <= 0 && (u = i), {
|
|
2213
2218
|
ceiling: l,
|
|
2214
2219
|
floor: u,
|
|
2215
2220
|
reference: i
|
|
2216
2221
|
};
|
|
2217
2222
|
}
|
|
2218
|
-
var
|
|
2219
|
-
function
|
|
2223
|
+
var Z = (e, t) => Math.round(e * t * 1e9) / 1e9;
|
|
2224
|
+
function Xr(e, t) {
|
|
2220
2225
|
let n = Math.round(Math.log10(t));
|
|
2221
2226
|
return {
|
|
2222
2227
|
...e,
|
|
2223
2228
|
pricePrecision: e.pricePrecision === void 0 ? void 0 : Math.max(0, e.pricePrecision - n),
|
|
2224
|
-
priceStep: e.priceStep === void 0 ? void 0 :
|
|
2229
|
+
priceStep: e.priceStep === void 0 ? void 0 : Z(e.priceStep, t),
|
|
2225
2230
|
priceSteps: e.priceSteps?.map((e) => ({
|
|
2226
|
-
from:
|
|
2227
|
-
step:
|
|
2231
|
+
from: Z(e.from, t),
|
|
2232
|
+
step: Z(e.step, t)
|
|
2228
2233
|
})),
|
|
2229
2234
|
priceLimits: e.priceLimits && {
|
|
2230
2235
|
...e.priceLimits,
|
|
2231
|
-
referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 :
|
|
2236
|
+
referencePrice: e.priceLimits.referencePrice === void 0 ? void 0 : Z(e.priceLimits.referencePrice, t)
|
|
2232
2237
|
}
|
|
2233
2238
|
};
|
|
2234
2239
|
}
|
|
2235
|
-
var
|
|
2236
|
-
function
|
|
2240
|
+
var Zr = 6e4, Qr = 864e5;
|
|
2241
|
+
function $r(e, t) {
|
|
2237
2242
|
let n, r;
|
|
2238
2243
|
if (t) {
|
|
2239
|
-
let i = new Date(e +
|
|
2244
|
+
let i = new Date(e + y(t, e) * Zr);
|
|
2240
2245
|
n = i.getUTCHours(), r = i.getUTCMinutes();
|
|
2241
2246
|
} else {
|
|
2242
2247
|
let t = new Date(e);
|
|
@@ -2244,31 +2249,31 @@ function Xr(e, t) {
|
|
|
2244
2249
|
}
|
|
2245
2250
|
return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
2246
2251
|
}
|
|
2247
|
-
function
|
|
2248
|
-
if (n !== void 0 && !
|
|
2249
|
-
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);
|
|
2250
2255
|
for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
|
|
2251
2256
|
return null;
|
|
2252
2257
|
}
|
|
2253
|
-
var
|
|
2258
|
+
var Q = (e) => String(e).padStart(2, "0"), $ = (e) => {
|
|
2254
2259
|
let t = new Date(e);
|
|
2255
|
-
return `${t.getUTCFullYear()}-${
|
|
2256
|
-
},
|
|
2257
|
-
function
|
|
2258
|
-
let r = Date.UTC(e, t - 1, 1), i = 1 + (
|
|
2260
|
+
return `${t.getUTCFullYear()}-${Q(t.getUTCMonth() + 1)}-${Q(t.getUTCDate())}`;
|
|
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) => {
|
|
2259
2264
|
let t = new Date(e).getUTCDay();
|
|
2260
|
-
return t === 0 || t === 6 || (n?.(
|
|
2265
|
+
return t === 0 || t === 6 || (n?.($(e)) ?? !1);
|
|
2261
2266
|
};
|
|
2262
|
-
for (; o(a);) a -=
|
|
2263
|
-
return
|
|
2267
|
+
for (; o(a);) a -= Qr;
|
|
2268
|
+
return $(a);
|
|
2264
2269
|
}
|
|
2265
|
-
function
|
|
2266
|
-
let n =
|
|
2267
|
-
symbol: `VN30F${
|
|
2270
|
+
function ii(e, t) {
|
|
2271
|
+
let n = $(e + ni), r = (e, n) => ({
|
|
2272
|
+
symbol: `VN30F${Q(e % 100)}${Q(n)}`,
|
|
2268
2273
|
year: e,
|
|
2269
2274
|
month: n,
|
|
2270
|
-
lastTradingDay:
|
|
2271
|
-
}), 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);
|
|
2272
2277
|
n > o.lastTradingDay && (o = i(o));
|
|
2273
2278
|
let s = [o, i(o)], c = i(s[1]);
|
|
2274
2279
|
for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
|
|
@@ -2276,7 +2281,7 @@ function ni(e, t) {
|
|
|
2276
2281
|
}
|
|
2277
2282
|
//#endregion
|
|
2278
2283
|
//#region src/icons/iconSet.ts
|
|
2279
|
-
var
|
|
2284
|
+
var ai = {
|
|
2280
2285
|
cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
|
|
2281
2286
|
trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
|
|
2282
2287
|
trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
|
|
@@ -2443,7 +2448,7 @@ var ri = {
|
|
|
2443
2448
|
]
|
|
2444
2449
|
] },
|
|
2445
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" }
|
|
2446
|
-
},
|
|
2451
|
+
}, oi = {
|
|
2447
2452
|
trendLine: {
|
|
2448
2453
|
d: "M5 18L19 6",
|
|
2449
2454
|
dots: [[5, 18], [19, 6]]
|
|
@@ -2803,7 +2808,7 @@ var ri = {
|
|
|
2803
2808
|
],
|
|
2804
2809
|
dash: "M12 3V21"
|
|
2805
2810
|
}
|
|
2806
|
-
},
|
|
2811
|
+
}, si = {
|
|
2807
2812
|
candlestick: {
|
|
2808
2813
|
d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
|
|
2809
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"]
|
|
@@ -2870,21 +2875,21 @@ var ri = {
|
|
|
2870
2875
|
"M16 4.5h3v6h-3z"
|
|
2871
2876
|
]
|
|
2872
2877
|
}
|
|
2873
|
-
},
|
|
2874
|
-
function
|
|
2875
|
-
let t =
|
|
2878
|
+
}, ci = 1.75, li = .22, ui = /* @__PURE__ */ new WeakMap();
|
|
2879
|
+
function di(e) {
|
|
2880
|
+
let t = ui.get(e);
|
|
2876
2881
|
if (t) return t;
|
|
2877
2882
|
let n = "";
|
|
2878
|
-
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"/>`);
|
|
2879
2884
|
for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
|
|
2880
2885
|
e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
|
|
2881
|
-
for (let [t, r, i =
|
|
2882
|
-
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;
|
|
2883
2888
|
}
|
|
2884
|
-
function
|
|
2885
|
-
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>`;
|
|
2886
2891
|
}
|
|
2887
2892
|
//#endregion
|
|
2888
|
-
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 };
|
|
2889
2894
|
|
|
2890
2895
|
//# sourceMappingURL=index.js.map
|