@tradecanvas/commons 1.74.0 → 1.75.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 +424 -420
- package/dist/index.js.map +1 -1
- package/dist/types/drawing.d.ts +7 -0
- package/dist/types/drawing.d.ts.map +1 -1
- package/dist/types/theme.d.ts +6 -0
- package/dist/types/theme.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -103,14 +103,18 @@ var e = /* @__PURE__ */ function(e) {
|
|
|
103
103
|
"series.hlcArea.lineWidth": "width",
|
|
104
104
|
"series.hlcArea.topColor": "color",
|
|
105
105
|
"series.hlcArea.bottomColor": "color"
|
|
106
|
-
}, n =
|
|
106
|
+
}, n = "rgba(76, 141, 255, 0.1)";
|
|
107
|
+
function r(e) {
|
|
108
|
+
let t = e.fillColor;
|
|
109
|
+
return t && t.replace(/\s+/g, "") !== i ? t : void 0;
|
|
110
|
+
}
|
|
111
|
+
var i = n.replace(/\s+/g, ""), a = {
|
|
107
112
|
color: "#4c8dff",
|
|
108
113
|
lineWidth: 1,
|
|
109
114
|
lineStyle: "solid",
|
|
110
|
-
fillColor:
|
|
111
|
-
fillOpacity: .
|
|
112
|
-
|
|
113
|
-
}, r = {
|
|
115
|
+
fillColor: n,
|
|
116
|
+
fillOpacity: .12
|
|
117
|
+
}, o = {
|
|
114
118
|
enabled: !0,
|
|
115
119
|
orderColors: {
|
|
116
120
|
buy: "#1fa874",
|
|
@@ -136,14 +140,14 @@ var e = /* @__PURE__ */ function(e) {
|
|
|
136
140
|
},
|
|
137
141
|
fillMarks: !0,
|
|
138
142
|
dragThreshold: 3
|
|
139
|
-
},
|
|
143
|
+
}, s = {
|
|
140
144
|
longColor: "#1fa874",
|
|
141
145
|
shortColor: "#e8505b",
|
|
142
146
|
neutralColor: "#9E9E9E",
|
|
143
147
|
arrowSize: 12,
|
|
144
148
|
showLabel: !0,
|
|
145
149
|
showConfidence: !0
|
|
146
|
-
},
|
|
150
|
+
}, c = {
|
|
147
151
|
profitColor: "#1fa874",
|
|
148
152
|
lossColor: "#e8505b",
|
|
149
153
|
activeColor: "#4c8dff",
|
|
@@ -151,18 +155,18 @@ var e = /* @__PURE__ */ function(e) {
|
|
|
151
155
|
borderWidth: 1,
|
|
152
156
|
showLabel: !0,
|
|
153
157
|
showPnl: !0
|
|
154
|
-
},
|
|
158
|
+
}, l = {
|
|
155
159
|
enabled: !0,
|
|
156
160
|
maxRetries: Infinity,
|
|
157
161
|
baseDelay: 1e3,
|
|
158
162
|
maxDelay: 3e4,
|
|
159
163
|
backoffMultiplier: 2
|
|
160
|
-
},
|
|
164
|
+
}, u = {
|
|
161
165
|
historyLimit: 500,
|
|
162
166
|
autoScroll: !0,
|
|
163
167
|
showCurrentPriceLine: !0,
|
|
164
168
|
aggregateTicks: !1
|
|
165
|
-
},
|
|
169
|
+
}, d = [
|
|
166
170
|
"change",
|
|
167
171
|
"changePercent",
|
|
168
172
|
"open",
|
|
@@ -174,17 +178,17 @@ var e = /* @__PURE__ */ function(e) {
|
|
|
174
178
|
"ask",
|
|
175
179
|
"time"
|
|
176
180
|
];
|
|
177
|
-
function
|
|
181
|
+
function ee(e) {
|
|
178
182
|
if (!e || typeof e != "object") return null;
|
|
179
183
|
let t = e, n = typeof t.symbol == "string" ? t.symbol.trim() : "";
|
|
180
|
-
if (!n || n.length > 64 || !
|
|
184
|
+
if (!n || n.length > 64 || !te(t.last)) return null;
|
|
181
185
|
let r = {
|
|
182
186
|
symbol: n,
|
|
183
187
|
last: t.last
|
|
184
188
|
};
|
|
185
|
-
for (let e of
|
|
189
|
+
for (let e of d) {
|
|
186
190
|
let n = t[e];
|
|
187
|
-
|
|
191
|
+
te(n) && (r[e] = n);
|
|
188
192
|
}
|
|
189
193
|
let i = r.prevClose ?? r.open;
|
|
190
194
|
if (r.change === void 0 && i !== void 0 && (r.change = r.last - i), r.changePercent === void 0 && r.change !== void 0) {
|
|
@@ -193,16 +197,16 @@ function l(e) {
|
|
|
193
197
|
}
|
|
194
198
|
return r;
|
|
195
199
|
}
|
|
196
|
-
function
|
|
200
|
+
function te(e) {
|
|
197
201
|
return typeof e == "number" && Number.isFinite(e);
|
|
198
202
|
}
|
|
199
203
|
//#endregion
|
|
200
204
|
//#region src/types/news.ts
|
|
201
|
-
var
|
|
205
|
+
var ne = 300, re = 1e3, f = (e, t) => {
|
|
202
206
|
if (typeof e != "string") return;
|
|
203
207
|
let n = e.trim();
|
|
204
208
|
return n ? n.slice(0, t) : void 0;
|
|
205
|
-
},
|
|
209
|
+
}, ie = (e) => {
|
|
206
210
|
if (typeof e == "string") try {
|
|
207
211
|
let t = new URL(e);
|
|
208
212
|
return t.protocol === "https:" || t.protocol === "http:" ? t.href : void 0;
|
|
@@ -210,61 +214,61 @@ var d = 300, ee = 1e3, f = (e, t) => {
|
|
|
210
214
|
return;
|
|
211
215
|
}
|
|
212
216
|
};
|
|
213
|
-
function
|
|
217
|
+
function ae(e, t = 20) {
|
|
214
218
|
if (!Array.isArray(e)) return [];
|
|
215
219
|
let n = [];
|
|
216
220
|
for (let t of e) {
|
|
217
221
|
if (!t || typeof t != "object") continue;
|
|
218
|
-
let e = t, r = f(e.title,
|
|
222
|
+
let e = t, r = f(e.title, ne);
|
|
219
223
|
if (!r || typeof e.time != "number" || !Number.isFinite(e.time)) continue;
|
|
220
224
|
let i = {
|
|
221
225
|
title: r,
|
|
222
226
|
time: e.time
|
|
223
|
-
}, a =
|
|
227
|
+
}, a = ie(e.url);
|
|
224
228
|
a && (i.url = a);
|
|
225
|
-
let o = f(e.source,
|
|
229
|
+
let o = f(e.source, ne);
|
|
226
230
|
o && (i.source = o);
|
|
227
|
-
let s = f(e.summary,
|
|
231
|
+
let s = f(e.summary, re);
|
|
228
232
|
s && (i.summary = s);
|
|
229
|
-
let c = f(e.id,
|
|
233
|
+
let c = f(e.id, ne);
|
|
230
234
|
c && (i.id = c), n.push(i);
|
|
231
235
|
}
|
|
232
236
|
return n.sort((e, t) => t.time - e.time).slice(0, Math.max(0, t));
|
|
233
237
|
}
|
|
234
238
|
//#endregion
|
|
235
239
|
//#region src/utils/math.ts
|
|
236
|
-
function
|
|
240
|
+
function oe(e, t, n) {
|
|
237
241
|
return Math.max(t, Math.min(n, e));
|
|
238
242
|
}
|
|
239
|
-
function
|
|
243
|
+
function se(e, t, n) {
|
|
240
244
|
return e + (t - e) * n;
|
|
241
245
|
}
|
|
242
|
-
function
|
|
246
|
+
function ce(e, t, n) {
|
|
243
247
|
return e === t ? 0 : (n - e) / (t - e);
|
|
244
248
|
}
|
|
245
|
-
function
|
|
249
|
+
function le(e, t) {
|
|
246
250
|
return Math.round(e / t) * t;
|
|
247
251
|
}
|
|
248
|
-
function
|
|
252
|
+
function ue(e, t) {
|
|
249
253
|
let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
|
|
250
254
|
return i = t ? r < 1.5 ? 1 : r < 3 ? 2 : r < 7 ? 5 : 10 : r <= 1 ? 1 : r <= 2 ? 2 : r <= 5 ? 5 : 10, i * 10 ** n;
|
|
251
255
|
}
|
|
252
|
-
function
|
|
253
|
-
return
|
|
256
|
+
function de(e, t, n) {
|
|
257
|
+
return ue(ue(t - e, !1) / (n - 1), !0);
|
|
254
258
|
}
|
|
255
259
|
//#endregion
|
|
256
260
|
//#region src/utils/data.ts
|
|
257
|
-
var
|
|
258
|
-
function
|
|
261
|
+
var fe = 1e11;
|
|
262
|
+
function pe(e) {
|
|
259
263
|
let t = e.length > 0 ? e[e.length - 1].time : NaN;
|
|
260
264
|
return Number.isFinite(t) ? Math.abs(t) >= 1e11 ? 1 : 1e3 : 1;
|
|
261
265
|
}
|
|
262
|
-
function
|
|
266
|
+
function me(e, t) {
|
|
263
267
|
return t === void 0 ? Math.abs(e) >= 1e11 ? e : e * 1e3 : e * t;
|
|
264
268
|
}
|
|
265
|
-
function
|
|
269
|
+
function he(e) {
|
|
266
270
|
return {
|
|
267
|
-
time:
|
|
271
|
+
time: me(e.time ?? e.t ?? 0),
|
|
268
272
|
open: e.open ?? e.o ?? 0,
|
|
269
273
|
high: e.high ?? e.h ?? 0,
|
|
270
274
|
low: e.low ?? e.l ?? 0,
|
|
@@ -272,11 +276,11 @@ function fe(e) {
|
|
|
272
276
|
volume: e.volume ?? e.v ?? 0
|
|
273
277
|
};
|
|
274
278
|
}
|
|
275
|
-
function
|
|
279
|
+
function ge(e, t, n) {
|
|
276
280
|
let r = Math.max(0, t), i = Math.min(e.length, n + 1);
|
|
277
281
|
return e.slice(r, i);
|
|
278
282
|
}
|
|
279
|
-
function
|
|
283
|
+
function _e(e, t) {
|
|
280
284
|
let n = 0, r = e.length - 1;
|
|
281
285
|
for (; n <= r;) {
|
|
282
286
|
let i = n + r >>> 1;
|
|
@@ -286,7 +290,7 @@ function me(e, t) {
|
|
|
286
290
|
}
|
|
287
291
|
return n;
|
|
288
292
|
}
|
|
289
|
-
function
|
|
293
|
+
function ve(e, t, n, r = !1) {
|
|
290
294
|
let i = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
|
|
291
295
|
if (Number.isFinite(i)) {
|
|
292
296
|
let r = i || Math.log(1 + 2 * n), a = Math.exp(r * n);
|
|
@@ -301,7 +305,7 @@ function he(e, t, n, r = !1) {
|
|
|
301
305
|
max: t + a * n
|
|
302
306
|
};
|
|
303
307
|
}
|
|
304
|
-
function
|
|
308
|
+
function ye(e, t, n, r = !1) {
|
|
305
309
|
let i = Math.max(1 - n.top - n.bottom, 2 ** -52), a = r && e > 0 && t > 0 ? Math.log(t / e) : NaN;
|
|
306
310
|
if (Number.isFinite(a)) {
|
|
307
311
|
let r = (a || Math.log(1.01)) / i;
|
|
@@ -316,7 +320,7 @@ function ge(e, t, n, r = !1) {
|
|
|
316
320
|
max: t + o * n.top
|
|
317
321
|
};
|
|
318
322
|
}
|
|
319
|
-
function
|
|
323
|
+
function be(e, t, n, r = .05, i = !1) {
|
|
320
324
|
if (e.length === 0) return {
|
|
321
325
|
min: 0,
|
|
322
326
|
max: 1
|
|
@@ -326,9 +330,9 @@ function _e(e, t, n, r = .05, i = !1) {
|
|
|
326
330
|
return s === Infinity ? {
|
|
327
331
|
min: 0,
|
|
328
332
|
max: 1
|
|
329
|
-
} :
|
|
333
|
+
} : ve(s, c, r, i);
|
|
330
334
|
}
|
|
331
|
-
function
|
|
335
|
+
function xe(e, t) {
|
|
332
336
|
return {
|
|
333
337
|
...e,
|
|
334
338
|
high: Math.max(e.high, t.price),
|
|
@@ -339,18 +343,18 @@ function ve(e, t) {
|
|
|
339
343
|
}
|
|
340
344
|
//#endregion
|
|
341
345
|
//#region src/utils/color.ts
|
|
342
|
-
function
|
|
346
|
+
function Se(e, t = 1) {
|
|
343
347
|
let n = e.slice(1);
|
|
344
348
|
return (n.length === 3 || n.length === 4) && (n = [...n.slice(0, 3)].map((e) => e + e).join("")), `rgba(${parseInt(n.slice(0, 2), 16)}, ${parseInt(n.slice(2, 4), 16)}, ${parseInt(n.slice(4, 6), 16)}, ${t})`;
|
|
345
349
|
}
|
|
346
350
|
function p(e, t) {
|
|
347
351
|
let n = e.trim();
|
|
348
|
-
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return
|
|
352
|
+
if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n)) return Se(n, t);
|
|
349
353
|
let r = n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);
|
|
350
354
|
return r ? `rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})` : e;
|
|
351
355
|
}
|
|
352
|
-
var
|
|
353
|
-
function
|
|
356
|
+
var Ce = 3;
|
|
357
|
+
function we(e) {
|
|
354
358
|
let t = e.trim(), n = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(t);
|
|
355
359
|
if (n) {
|
|
356
360
|
let e = n[1];
|
|
@@ -373,14 +377,14 @@ function xe(e) {
|
|
|
373
377
|
a: Math.min(1, Math.max(0, i))
|
|
374
378
|
};
|
|
375
379
|
}
|
|
376
|
-
function
|
|
377
|
-
let r =
|
|
380
|
+
function Te(e, t, n) {
|
|
381
|
+
let r = we(e), i = we(t);
|
|
378
382
|
if (!r || !i) return n < .5 ? e : t;
|
|
379
383
|
let a = r.a + (i.a - r.a) * n, o = (e, t) => a === 0 ? 0 : Math.round((e * r.a + (t * i.a - e * r.a) * n) / a), s = `${o(r.r, i.r)},${o(r.g, i.g)},${o(r.b, i.b)}`;
|
|
380
|
-
return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(
|
|
384
|
+
return a >= 1 ? `rgb(${s})` : `rgba(${s},${Number(a.toFixed(Ce))})`;
|
|
381
385
|
}
|
|
382
|
-
function
|
|
383
|
-
let t =
|
|
386
|
+
function Ee(e) {
|
|
387
|
+
let t = we(e);
|
|
384
388
|
if (!t) return null;
|
|
385
389
|
let n = (e) => {
|
|
386
390
|
let t = e / 255;
|
|
@@ -389,25 +393,25 @@ function Ce(e) {
|
|
|
389
393
|
return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b);
|
|
390
394
|
}
|
|
391
395
|
function m(e, t) {
|
|
392
|
-
let n =
|
|
396
|
+
let n = Ee(e), r = Ee(t);
|
|
393
397
|
return n === null || r === null ? null : (Math.max(n, r) + .05) / (Math.min(n, r) + .05);
|
|
394
398
|
}
|
|
395
|
-
var
|
|
396
|
-
function
|
|
399
|
+
var De = 20;
|
|
400
|
+
function Oe(e, t, n, r) {
|
|
397
401
|
let i = m(e, t);
|
|
398
402
|
if (i === null || i >= r) return e;
|
|
399
|
-
for (let i = 1; i <=
|
|
400
|
-
let a =
|
|
403
|
+
for (let i = 1; i <= De; i++) {
|
|
404
|
+
let a = Te(e, n, i / De);
|
|
401
405
|
if ((m(a, t) ?? 0) >= r) return a;
|
|
402
406
|
}
|
|
403
407
|
return n;
|
|
404
408
|
}
|
|
405
|
-
function
|
|
409
|
+
function ke(e, t, n) {
|
|
406
410
|
return (m(e, t) ?? 0) >= (m(e, n) ?? 0) ? t : n;
|
|
407
411
|
}
|
|
408
412
|
//#endregion
|
|
409
413
|
//#region src/utils/timezone.ts
|
|
410
|
-
var h = 6e4,
|
|
414
|
+
var h = 6e4, Ae = 1440 * h, g = 15 * h, je = 8192, _ = 7 * Ae, Me = 4096, Ne = new Set([
|
|
411
415
|
"UTC",
|
|
412
416
|
"Etc/UTC",
|
|
413
417
|
"GMT",
|
|
@@ -418,9 +422,9 @@ var h = 6e4, De = 1440 * h, g = 15 * h, Oe = 8192, ke = 7 * De, Ae = 4096, je =
|
|
|
418
422
|
"Etc/Universal",
|
|
419
423
|
"Zulu",
|
|
420
424
|
"Etc/Zulu"
|
|
421
|
-
]),
|
|
422
|
-
function
|
|
423
|
-
let t =
|
|
425
|
+
]), Pe = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map(), Fe = /* @__PURE__ */ new Map();
|
|
426
|
+
function Ie(e) {
|
|
427
|
+
let t = Pe.get(e);
|
|
424
428
|
return t || (t = new Intl.DateTimeFormat("en-US", {
|
|
425
429
|
timeZone: e,
|
|
426
430
|
hourCycle: "h23",
|
|
@@ -430,25 +434,25 @@ function Pe(e) {
|
|
|
430
434
|
hour: "numeric",
|
|
431
435
|
minute: "numeric",
|
|
432
436
|
second: "numeric"
|
|
433
|
-
}),
|
|
437
|
+
}), Pe.set(e, t)), t;
|
|
434
438
|
}
|
|
435
|
-
function
|
|
439
|
+
function y(e) {
|
|
436
440
|
if (!e) return !1;
|
|
437
441
|
try {
|
|
438
|
-
return
|
|
442
|
+
return Ie(e), !0;
|
|
439
443
|
} catch {
|
|
440
444
|
return !1;
|
|
441
445
|
}
|
|
442
446
|
}
|
|
443
|
-
function
|
|
444
|
-
if (!Number.isFinite(t) ||
|
|
445
|
-
let n =
|
|
446
|
-
n || (n = /* @__PURE__ */ new Map(),
|
|
447
|
-
let r = Math.floor(t /
|
|
448
|
-
return i || (i =
|
|
447
|
+
function b(e, t) {
|
|
448
|
+
if (!Number.isFinite(t) || Ne.has(e)) return 0;
|
|
449
|
+
let n = Fe.get(e);
|
|
450
|
+
n || (n = /* @__PURE__ */ new Map(), Fe.set(e, n));
|
|
451
|
+
let r = Math.floor(t / _), i = n.get(r);
|
|
452
|
+
return i || (i = Le(e, r * _), n.size >= Me && n.clear(), n.set(r, i)), t < i.change ? i.before : i.after;
|
|
449
453
|
}
|
|
450
|
-
function
|
|
451
|
-
let n =
|
|
454
|
+
function Le(e, t) {
|
|
455
|
+
let n = Re(e, t), r = t + _ - g, i = Re(e, r);
|
|
452
456
|
if (i === n) return {
|
|
453
457
|
before: n,
|
|
454
458
|
change: Infinity,
|
|
@@ -457,7 +461,7 @@ function Ie(e, t) {
|
|
|
457
461
|
let a = t;
|
|
458
462
|
for (; r - a > g;) {
|
|
459
463
|
let t = a + Math.floor((r - a) / g / 2) * g;
|
|
460
|
-
|
|
464
|
+
Re(e, t) === n ? a = t : r = t;
|
|
461
465
|
}
|
|
462
466
|
return {
|
|
463
467
|
before: n,
|
|
@@ -465,11 +469,11 @@ function Ie(e, t) {
|
|
|
465
469
|
after: i
|
|
466
470
|
};
|
|
467
471
|
}
|
|
468
|
-
function
|
|
469
|
-
let n = Math.floor(t / g), r = `${e}|${n}`, i =
|
|
472
|
+
function Re(e, t) {
|
|
473
|
+
let n = Math.floor(t / g), r = `${e}|${n}`, i = v.get(r);
|
|
470
474
|
if (i !== void 0) return i;
|
|
471
475
|
let a = n * g, o = 1970, s = 1, c = 1, l = 0, u = 0, d = 0;
|
|
472
|
-
for (let t of
|
|
476
|
+
for (let t of Ie(e).formatToParts(new Date(a))) {
|
|
473
477
|
let e = Number(t.value);
|
|
474
478
|
switch (t.type) {
|
|
475
479
|
case "year":
|
|
@@ -493,23 +497,23 @@ function y(e, t) {
|
|
|
493
497
|
}
|
|
494
498
|
}
|
|
495
499
|
let ee = Math.round((Date.UTC(o, s - 1, c, l, u, d) - a) / h);
|
|
496
|
-
return
|
|
500
|
+
return v.size >= je && v.clear(), v.set(r, ee), ee;
|
|
497
501
|
}
|
|
498
|
-
function
|
|
499
|
-
return e === 0 || typeof e == "string" &&
|
|
502
|
+
function x(e) {
|
|
503
|
+
return e === 0 || typeof e == "string" && Ne.has(e);
|
|
500
504
|
}
|
|
501
|
-
function
|
|
502
|
-
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e :
|
|
505
|
+
function S(e, t) {
|
|
506
|
+
return e === null ? -new Date(t).getTimezoneOffset() : typeof e == "number" ? e : b(e, t);
|
|
503
507
|
}
|
|
504
|
-
function
|
|
505
|
-
let n = e -
|
|
506
|
-
if (n +
|
|
507
|
-
let r = e -
|
|
508
|
-
return r +
|
|
509
|
-
}
|
|
510
|
-
var
|
|
511
|
-
function
|
|
512
|
-
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i =
|
|
508
|
+
function ze(e, t) {
|
|
509
|
+
let n = e - S(t, e - Ae) * h;
|
|
510
|
+
if (n + S(t, n) * h === e) return n;
|
|
511
|
+
let r = e - S(t, e + Ae) * h;
|
|
512
|
+
return r + S(t, r) * h === e ? r : n;
|
|
513
|
+
}
|
|
514
|
+
var Be = /* @__PURE__ */ new Map();
|
|
515
|
+
function Ve(e, t, n) {
|
|
516
|
+
let r = `${e}|${JSON.stringify(t)}|${n === null ? "local" : typeof n == "number" ? `fixed:${n}` : n}`, i = Be.get(r);
|
|
513
517
|
if (i) return i;
|
|
514
518
|
let a = n === null ? void 0 : typeof n == "number" ? "UTC" : n, o;
|
|
515
519
|
try {
|
|
@@ -524,11 +528,11 @@ function ze(e, t, n) {
|
|
|
524
528
|
});
|
|
525
529
|
}
|
|
526
530
|
let s = typeof n == "number" ? n * h : 0;
|
|
527
|
-
return i = (e) => o.format(new Date(e + s)),
|
|
531
|
+
return i = (e) => o.format(new Date(e + s)), Be.set(r, i), i;
|
|
528
532
|
}
|
|
529
533
|
//#endregion
|
|
530
534
|
//#region src/utils/time.ts
|
|
531
|
-
var
|
|
535
|
+
var He = {
|
|
532
536
|
"1s": 1e3,
|
|
533
537
|
"5s": 5e3,
|
|
534
538
|
"15s": 15e3,
|
|
@@ -555,16 +559,16 @@ var Be = {
|
|
|
555
559
|
"3M": 7776e6,
|
|
556
560
|
"6M": 15552e6,
|
|
557
561
|
"12M": 31536e6
|
|
558
|
-
},
|
|
562
|
+
}, C = {
|
|
559
563
|
s: 1e3,
|
|
560
564
|
m: 6e4,
|
|
561
565
|
h: 36e5,
|
|
562
566
|
d: 864e5,
|
|
563
567
|
w: 6048e5,
|
|
564
568
|
M: 2592e6
|
|
565
|
-
},
|
|
566
|
-
function
|
|
567
|
-
let t =
|
|
569
|
+
}, Ue = /^([1-9]\d*)([smhdwM])$/;
|
|
570
|
+
function w(e) {
|
|
571
|
+
let t = Ue.exec(e);
|
|
568
572
|
if (!t) return null;
|
|
569
573
|
let n = Number(t[1]);
|
|
570
574
|
return Number.isSafeInteger(n) ? {
|
|
@@ -572,24 +576,24 @@ function C(e) {
|
|
|
572
576
|
unit: t[2]
|
|
573
577
|
} : null;
|
|
574
578
|
}
|
|
575
|
-
var
|
|
576
|
-
function
|
|
579
|
+
var We = 1e6;
|
|
580
|
+
function Ge(e) {
|
|
577
581
|
let t = /^([1-9]\d*)T$/.exec(e);
|
|
578
582
|
if (!t) return null;
|
|
579
583
|
let n = Number(t[1]);
|
|
580
|
-
return Number.isSafeInteger(n) && n <=
|
|
584
|
+
return Number.isSafeInteger(n) && n <= We ? n : null;
|
|
581
585
|
}
|
|
582
|
-
function
|
|
583
|
-
return
|
|
586
|
+
function Ke(e) {
|
|
587
|
+
return w(e) !== null;
|
|
584
588
|
}
|
|
585
|
-
function
|
|
586
|
-
let t =
|
|
589
|
+
function T(e) {
|
|
590
|
+
let t = He[e];
|
|
587
591
|
if (t !== void 0) return t;
|
|
588
|
-
let n =
|
|
589
|
-
return n ? n.count *
|
|
592
|
+
let n = w(e);
|
|
593
|
+
return n ? n.count * C[n.unit] : NaN;
|
|
590
594
|
}
|
|
591
|
-
function
|
|
592
|
-
let n = new Date(e), r =
|
|
595
|
+
function qe(e, t) {
|
|
596
|
+
let n = new Date(e), r = T(t);
|
|
593
597
|
return r >= 864e5 ? n.toLocaleDateString(void 0, {
|
|
594
598
|
month: "short",
|
|
595
599
|
day: "numeric"
|
|
@@ -602,11 +606,11 @@ function Ge(e, t) {
|
|
|
602
606
|
second: "2-digit"
|
|
603
607
|
});
|
|
604
608
|
}
|
|
605
|
-
function
|
|
606
|
-
let n =
|
|
609
|
+
function Je(e, t) {
|
|
610
|
+
let n = T(t);
|
|
607
611
|
return Math.floor(e / n) * n;
|
|
608
612
|
}
|
|
609
|
-
function
|
|
613
|
+
function Ye(e, t) {
|
|
610
614
|
if (t === null) {
|
|
611
615
|
let t = new Date(e);
|
|
612
616
|
return {
|
|
@@ -617,7 +621,7 @@ function qe(e, t) {
|
|
|
617
621
|
minutes: t.getMinutes()
|
|
618
622
|
};
|
|
619
623
|
}
|
|
620
|
-
let n = new Date(e +
|
|
624
|
+
let n = new Date(e + S(t, e) * 6e4);
|
|
621
625
|
return {
|
|
622
626
|
year: n.getUTCFullYear(),
|
|
623
627
|
month: n.getUTCMonth() + 1,
|
|
@@ -626,122 +630,122 @@ function qe(e, t) {
|
|
|
626
630
|
minutes: n.getUTCMinutes()
|
|
627
631
|
};
|
|
628
632
|
}
|
|
629
|
-
function
|
|
633
|
+
function Xe(e) {
|
|
630
634
|
return e.hours === 0 && e.minutes === 0;
|
|
631
635
|
}
|
|
632
|
-
var
|
|
633
|
-
function
|
|
636
|
+
var Ze = 20 * 36e5;
|
|
637
|
+
function Qe(e) {
|
|
634
638
|
let t = Math.min(e.length, 64);
|
|
635
639
|
if (t < 2) return;
|
|
636
|
-
let n =
|
|
640
|
+
let n = pe(e), r = Infinity;
|
|
637
641
|
for (let i = 1; i < t; i++) {
|
|
638
642
|
let t = Math.abs(e[i].time - e[i - 1].time) * n;
|
|
639
643
|
t > 0 && t < r && (r = t);
|
|
640
644
|
}
|
|
641
|
-
return r === Infinity ? void 0 : r >=
|
|
645
|
+
return r === Infinity ? void 0 : r >= Ze;
|
|
642
646
|
}
|
|
643
|
-
function
|
|
644
|
-
let n =
|
|
647
|
+
function $e(e, t = Date.now()) {
|
|
648
|
+
let n = S(e, t), r = n >= 0 ? "+" : "-", i = Math.abs(n), a = Math.floor(i / 60), o = i % 60;
|
|
645
649
|
return o === 0 ? `UTC${r}${a}` : `UTC${r}${a}:${String(o).padStart(2, "0")}`;
|
|
646
650
|
}
|
|
647
|
-
var
|
|
651
|
+
var et = Date.UTC(1970, 0, 5), tt = C.m, E = C.d, nt = 24, rt = {
|
|
648
652
|
count: 1,
|
|
649
653
|
unit: "m"
|
|
650
|
-
},
|
|
651
|
-
function rt(e) {
|
|
652
|
-
let t = E.get(e);
|
|
653
|
-
return t || (t = C(e) ?? tt, E.size >= nt && E.clear(), E.set(e, t)), t;
|
|
654
|
-
}
|
|
655
|
-
function it({ unit: e }) {
|
|
656
|
-
return e === "d" || e === "w" || e === "M";
|
|
657
|
-
}
|
|
654
|
+
}, it = 256, D = /* @__PURE__ */ new Map();
|
|
658
655
|
function at(e) {
|
|
659
|
-
|
|
656
|
+
let t = D.get(e);
|
|
657
|
+
return t || (t = w(e) ?? rt, D.size >= it && D.clear(), D.set(e, t)), t;
|
|
660
658
|
}
|
|
661
|
-
function ot(e) {
|
|
662
|
-
return
|
|
659
|
+
function ot({ unit: e }) {
|
|
660
|
+
return e === "d" || e === "w" || e === "M";
|
|
663
661
|
}
|
|
664
662
|
function st(e) {
|
|
665
|
-
return
|
|
663
|
+
return e.unit === "h" ? e.count > 1 && nt % e.count === 0 : ot(e);
|
|
666
664
|
}
|
|
667
665
|
function ct(e) {
|
|
668
|
-
return
|
|
666
|
+
return st(at(e));
|
|
667
|
+
}
|
|
668
|
+
function lt(e) {
|
|
669
|
+
return ot(at(e));
|
|
670
|
+
}
|
|
671
|
+
function ut(e) {
|
|
672
|
+
return e !== void 0 && !x(e);
|
|
669
673
|
}
|
|
670
|
-
function
|
|
671
|
-
let r =
|
|
672
|
-
return !
|
|
674
|
+
function O(e, t, n = 1) {
|
|
675
|
+
let r = at(t), i = typeof n == "number" ? n : n.weekStartsOn ?? 1, a = typeof n == "number" ? void 0 : n.timeZone;
|
|
676
|
+
return !ut(a) || !st(r) || typeof n == "object" && n.dates && e % E === 0 ? dt(e, r, i) : ze(dt(e + S(a, e) * tt, r, i), a);
|
|
673
677
|
}
|
|
674
|
-
function
|
|
678
|
+
function dt(e, { count: t, unit: n }, r) {
|
|
675
679
|
if (n === "s" || n === "m" || n === "h" || n === "d") {
|
|
676
|
-
let r = t *
|
|
680
|
+
let r = t * C[n];
|
|
677
681
|
return Math.floor(e / r) * r;
|
|
678
682
|
}
|
|
679
683
|
let i = new Date(e);
|
|
680
684
|
if (n === "w") {
|
|
681
685
|
let e = (i.getUTCDay() - r + 7) % 7, n = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate() - e);
|
|
682
686
|
if (t <= 1) return n;
|
|
683
|
-
let a = Math.floor((n -
|
|
684
|
-
return
|
|
687
|
+
let a = Math.floor((n - et) / (7 * E));
|
|
688
|
+
return et + Math.floor(a / t) * t * 7 * E;
|
|
685
689
|
}
|
|
686
690
|
let a = i.getUTCFullYear() * 12 + i.getUTCMonth(), o = Math.floor(a / t) * t;
|
|
687
691
|
return Date.UTC(Math.floor(o / 12), o % 12, 1);
|
|
688
692
|
}
|
|
689
|
-
function
|
|
690
|
-
return e %
|
|
693
|
+
function ft(e, t, n) {
|
|
694
|
+
return e % E === 0 ? 0 : n && O(e, "1d", { timeZone: n }) === e ? n : t;
|
|
691
695
|
}
|
|
692
|
-
function
|
|
693
|
-
return
|
|
696
|
+
function pt(e, t, n) {
|
|
697
|
+
return Ye(e, ft(e, t, n));
|
|
694
698
|
}
|
|
695
699
|
//#endregion
|
|
696
700
|
//#region src/utils/precision.ts
|
|
697
|
-
var
|
|
698
|
-
function
|
|
699
|
-
let n = `${e}|${t}`, r =
|
|
700
|
-
return r || (
|
|
701
|
+
var mt = 64, k = /* @__PURE__ */ new Map();
|
|
702
|
+
function ht(e, t) {
|
|
703
|
+
let n = `${e}|${t}`, r = k.get(n);
|
|
704
|
+
return r || (k.size >= mt && k.clear(), r = new Intl.NumberFormat(e, {
|
|
701
705
|
minimumFractionDigits: t,
|
|
702
706
|
maximumFractionDigits: t
|
|
703
|
-
}),
|
|
707
|
+
}), k.set(n, r)), r;
|
|
704
708
|
}
|
|
705
|
-
function
|
|
706
|
-
return t.formatPrice ? t.formatPrice(e) :
|
|
709
|
+
function gt(e, t, n) {
|
|
710
|
+
return t.formatPrice ? t.formatPrice(e) : A(e, n ?? t.pricePrecision ?? _t(t.priceRange.min, t.priceRange.max), t.numberLocale ?? "en-US");
|
|
707
711
|
}
|
|
708
|
-
function
|
|
709
|
-
return
|
|
712
|
+
function A(e, t = 2, n = "en-US") {
|
|
713
|
+
return ht(n, t).format(e);
|
|
710
714
|
}
|
|
711
|
-
function
|
|
715
|
+
function _t(e, t) {
|
|
712
716
|
if (!(t > e) || !Number.isFinite(e) || !Number.isFinite(t)) return 2;
|
|
713
|
-
let n =
|
|
717
|
+
let n = de(e, t, 8);
|
|
714
718
|
return n > 0 && n < 1 ? Math.ceil(-Math.log10(n)) + 1 : 2;
|
|
715
719
|
}
|
|
716
|
-
var
|
|
717
|
-
function
|
|
720
|
+
var vt = 2;
|
|
721
|
+
function yt(e, t, n, r = 2, i = "en-US") {
|
|
718
722
|
if ((t === "percentage" || t === "indexedTo100") && n && n !== 0) {
|
|
719
723
|
if (t === "percentage") {
|
|
720
|
-
let t = (e / n - 1) * 100, r =
|
|
721
|
-
return `${r ===
|
|
724
|
+
let t = (e / n - 1) * 100, r = A(Math.abs(t), vt, i);
|
|
725
|
+
return `${r === A(0, vt, i) ? "" : t > 0 ? "+" : "-"}${r}%`;
|
|
722
726
|
}
|
|
723
|
-
return
|
|
727
|
+
return A(e / n * 100, 2, i);
|
|
724
728
|
}
|
|
725
|
-
return
|
|
729
|
+
return A(e, r, i);
|
|
726
730
|
}
|
|
727
|
-
function
|
|
731
|
+
function bt(e, t, n = 1) {
|
|
728
732
|
let r = Number.isInteger(n) && n > 1 ? n : 1;
|
|
729
733
|
if (!Number.isFinite(e) || !Number.isInteger(t) || t < 2) return String(e);
|
|
730
734
|
let i = t * r, a = Math.round(Math.abs(e) * i), o = Math.floor(a / i), s = a - o * i, c = Math.floor(s / r), l = String(t - 1).length, u = r > 1 ? String(Math.floor((s - c * r) / r * 10)) : "";
|
|
731
735
|
return `${e < 0 && a > 0 ? "-" : ""}${o}'${String(c).padStart(l, "0")}${u}`;
|
|
732
736
|
}
|
|
733
|
-
function
|
|
737
|
+
function xt(e) {
|
|
734
738
|
if (!Number.isInteger(e.denominator) || e.denominator < 2) return null;
|
|
735
739
|
let t = Number.isInteger(e.subDenominator) && (e.subDenominator ?? 0) > 1 ? e.subDenominator : 1;
|
|
736
740
|
return 1 / (e.denominator * t);
|
|
737
741
|
}
|
|
738
|
-
function
|
|
739
|
-
return e ? typeof e == "function" ? e :
|
|
742
|
+
function St(e) {
|
|
743
|
+
return e ? typeof e == "function" ? e : xt(e) === null ? null : (t) => bt(t, e.denominator, e.subDenominator) : null;
|
|
740
744
|
}
|
|
741
|
-
function
|
|
745
|
+
function Ct(e) {
|
|
742
746
|
return e >= 1e9 ? (e / 1e9).toFixed(2) + "B" : e >= 1e6 ? (e / 1e6).toFixed(2) + "M" : e >= 1e3 ? (e / 1e3).toFixed(2) + "K" : e.toFixed(0);
|
|
743
747
|
}
|
|
744
|
-
function
|
|
748
|
+
function wt(e) {
|
|
745
749
|
let t = 0;
|
|
746
750
|
for (let n of e) {
|
|
747
751
|
let e = n.toString(), r = e.indexOf(".");
|
|
@@ -751,7 +755,7 @@ function St(e) {
|
|
|
751
755
|
}
|
|
752
756
|
//#endregion
|
|
753
757
|
//#region src/utils/priceSource.ts
|
|
754
|
-
var
|
|
758
|
+
var Tt = [
|
|
755
759
|
"close",
|
|
756
760
|
"open",
|
|
757
761
|
"high",
|
|
@@ -761,10 +765,10 @@ var Ct = [
|
|
|
761
765
|
"ohlc4",
|
|
762
766
|
"hlcc4"
|
|
763
767
|
];
|
|
764
|
-
function
|
|
765
|
-
return typeof e == "string" &&
|
|
768
|
+
function Et(e) {
|
|
769
|
+
return typeof e == "string" && Tt.includes(e);
|
|
766
770
|
}
|
|
767
|
-
function
|
|
771
|
+
function Dt(e, t) {
|
|
768
772
|
switch (t) {
|
|
769
773
|
case "open": return e.open;
|
|
770
774
|
case "high": return e.high;
|
|
@@ -776,13 +780,13 @@ function Tt(e, t) {
|
|
|
776
780
|
default: return e.close;
|
|
777
781
|
}
|
|
778
782
|
}
|
|
779
|
-
var
|
|
780
|
-
function
|
|
783
|
+
var Ot = /^ind:([^:]+):(.+)$/;
|
|
784
|
+
function kt(e, t) {
|
|
781
785
|
return `ind:${e}:${t}`;
|
|
782
786
|
}
|
|
783
|
-
function
|
|
787
|
+
function At(e) {
|
|
784
788
|
if (typeof e != "string") return null;
|
|
785
|
-
let t =
|
|
789
|
+
let t = Ot.exec(e);
|
|
786
790
|
return t ? {
|
|
787
791
|
instanceId: t[1],
|
|
788
792
|
key: t[2]
|
|
@@ -790,11 +794,11 @@ function Ot(e) {
|
|
|
790
794
|
}
|
|
791
795
|
//#endregion
|
|
792
796
|
//#region src/utils/resample.ts
|
|
793
|
-
var
|
|
794
|
-
function
|
|
795
|
-
let r =
|
|
797
|
+
var jt = 864e5, Mt = 6e4;
|
|
798
|
+
function Nt(e, t, n = 1) {
|
|
799
|
+
let r = Pt(e, t, n), i = [], a = null;
|
|
796
800
|
for (let n of e) {
|
|
797
|
-
let e =
|
|
801
|
+
let e = O(n.time, t, r);
|
|
798
802
|
a === null || e !== a.time ? (a = {
|
|
799
803
|
time: e,
|
|
800
804
|
open: n.open,
|
|
@@ -806,49 +810,49 @@ function jt(e, t, n = 1) {
|
|
|
806
810
|
}
|
|
807
811
|
return i;
|
|
808
812
|
}
|
|
809
|
-
function
|
|
810
|
-
return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 ||
|
|
813
|
+
function Pt(e, t, n) {
|
|
814
|
+
return typeof n == "number" || n.timeZone === void 0 || n.dates !== void 0 || x(n.timeZone) || !ct(t) ? n : {
|
|
811
815
|
...n,
|
|
812
|
-
dates:
|
|
816
|
+
dates: Qe(e) === !0
|
|
813
817
|
};
|
|
814
818
|
}
|
|
815
|
-
var
|
|
816
|
-
function
|
|
817
|
-
let n =
|
|
819
|
+
var Ft = (e) => e === "s" || e === "m" || e === "h" || e === "d";
|
|
820
|
+
function It(e, t) {
|
|
821
|
+
let n = w(e), r = w(t);
|
|
818
822
|
if (!n || !r) return !1;
|
|
819
|
-
let i =
|
|
820
|
-
return n.unit === "d" && n.count > 1 ? !1 :
|
|
823
|
+
let i = T(e);
|
|
824
|
+
return n.unit === "d" && n.count > 1 ? !1 : Ft(r.unit) ? Ft(n.unit) && T(t) % i === 0 : n.unit === r.unit ? r.count % n.count === 0 : Ft(n.unit) && jt % i === 0;
|
|
821
825
|
}
|
|
822
|
-
function
|
|
823
|
-
let n =
|
|
824
|
-
if (!(n <
|
|
826
|
+
function Lt(e, t) {
|
|
827
|
+
let n = T(e);
|
|
828
|
+
if (!(n < jt)) return !0;
|
|
825
829
|
let r = (/* @__PURE__ */ new Date()).getUTCFullYear();
|
|
826
|
-
return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) =>
|
|
830
|
+
return [Date.UTC(r, 0, 1), Date.UTC(r, 6, 1)].every((e) => S(t, e) * Mt % n === 0);
|
|
827
831
|
}
|
|
828
|
-
function
|
|
829
|
-
let { timeZone: r } = n, i = r !== void 0 && !
|
|
832
|
+
function Rt(e, t, n = {}) {
|
|
833
|
+
let { timeZone: r } = n, i = r !== void 0 && !x(r) && ct(e) ? r : void 0, a = null, o = 0;
|
|
830
834
|
for (let n of t) {
|
|
831
|
-
if (!
|
|
832
|
-
let t =
|
|
835
|
+
if (!It(n, e) || i !== void 0 && !Lt(n, i)) continue;
|
|
836
|
+
let t = T(n);
|
|
833
837
|
t > o && (a = n, o = t);
|
|
834
838
|
}
|
|
835
839
|
return a;
|
|
836
840
|
}
|
|
837
841
|
//#endregion
|
|
838
842
|
//#region src/utils/symbols.ts
|
|
839
|
-
function
|
|
843
|
+
function zt(e, t) {
|
|
840
844
|
if (!e) return 0;
|
|
841
845
|
if (e === t) return 1e3;
|
|
842
846
|
if (e.startsWith(t)) return 600 - Math.min(100, e.length - t.length);
|
|
843
847
|
let n = e.indexOf(t);
|
|
844
848
|
return n >= 0 ? 300 - Math.min(100, n) : 0;
|
|
845
849
|
}
|
|
846
|
-
function
|
|
850
|
+
function Bt(e, t, n = 50, r) {
|
|
847
851
|
let i = t.trim().toUpperCase();
|
|
848
852
|
if (!i) return e.slice(0, n);
|
|
849
853
|
let a = [];
|
|
850
854
|
for (let t of e) {
|
|
851
|
-
let e = Math.max(
|
|
855
|
+
let e = Math.max(zt(t.symbol.toUpperCase(), i), zt((t.description ?? "").toUpperCase(), i) * .8);
|
|
852
856
|
e > 0 && a.push({
|
|
853
857
|
info: t,
|
|
854
858
|
score: e + (r?.(t) ?? 0)
|
|
@@ -856,7 +860,7 @@ function Rt(e, t, n = 50, r) {
|
|
|
856
860
|
}
|
|
857
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);
|
|
858
862
|
}
|
|
859
|
-
function
|
|
863
|
+
function Vt(e) {
|
|
860
864
|
let t = typeof e == "number" ? e : Number(e);
|
|
861
865
|
if (!Number.isFinite(t) || t <= 0) return 0;
|
|
862
866
|
for (let e = 0; e <= 12; e++) {
|
|
@@ -865,10 +869,10 @@ function zt(e) {
|
|
|
865
869
|
}
|
|
866
870
|
return 12;
|
|
867
871
|
}
|
|
868
|
-
function
|
|
872
|
+
function Ht(e) {
|
|
869
873
|
return e?.timeZone ?? e?.timezone;
|
|
870
874
|
}
|
|
871
|
-
function
|
|
875
|
+
function Ut(e) {
|
|
872
876
|
let t = /^(\d{1,2}):(\d{2})$/.exec(e.trim());
|
|
873
877
|
if (!t) return null;
|
|
874
878
|
let n = Number(t[1]), r = Number(t[2]);
|
|
@@ -876,26 +880,26 @@ function Vt(e) {
|
|
|
876
880
|
}
|
|
877
881
|
//#endregion
|
|
878
882
|
//#region src/utils/marketStatus.ts
|
|
879
|
-
var
|
|
880
|
-
function
|
|
881
|
-
let n =
|
|
882
|
-
let t =
|
|
883
|
+
var j = 864e5, M = 6e4, Wt = 8;
|
|
884
|
+
function Gt(e, t) {
|
|
885
|
+
let n = Ht(e), r = (e?.sessions ?? []).flatMap((e) => {
|
|
886
|
+
let t = Ut(e.start), n = Ut(e.end);
|
|
883
887
|
return t === null || n === null || t === n ? [] : [{
|
|
884
888
|
start: t,
|
|
885
889
|
end: n,
|
|
886
890
|
days: Array.isArray(e.days) ? e.days : null
|
|
887
891
|
}];
|
|
888
892
|
});
|
|
889
|
-
if (!n || !
|
|
893
|
+
if (!n || !y(n) || r.length === 0 || !Number.isFinite(t)) return {
|
|
890
894
|
state: "always",
|
|
891
895
|
next: null
|
|
892
896
|
};
|
|
893
|
-
let i =
|
|
894
|
-
for (let e = -1; e <=
|
|
895
|
-
let t = a + e *
|
|
897
|
+
let i = b(n, t) * M, a = Math.floor((t + i) / j) * j, o = (e) => e - b(n, e - b(n, e - i) * M) * M, s = [];
|
|
898
|
+
for (let e = -1; e <= Wt; e++) {
|
|
899
|
+
let t = a + e * j, n = (Math.floor(t / j) + 4) % 7;
|
|
896
900
|
for (let e of r) {
|
|
897
901
|
if (e.days && !e.days.includes(n)) continue;
|
|
898
|
-
let r = t + e.start *
|
|
902
|
+
let r = t + e.start * M, i = (e.end > e.start ? t : t + j) + e.end * M;
|
|
899
903
|
s.push([o(r), o(i)]);
|
|
900
904
|
}
|
|
901
905
|
}
|
|
@@ -918,15 +922,15 @@ function Ut(e, t) {
|
|
|
918
922
|
}
|
|
919
923
|
//#endregion
|
|
920
924
|
//#region src/utils/drawingOptions.ts
|
|
921
|
-
var
|
|
922
|
-
function
|
|
925
|
+
var Kt = 48, qt = 2e3, Jt = 1e4;
|
|
926
|
+
function Yt(e) {
|
|
923
927
|
if (!Array.isArray(e)) return;
|
|
924
928
|
let t = [];
|
|
925
929
|
for (let n of e) {
|
|
926
|
-
if (t.length >=
|
|
930
|
+
if (t.length >= Kt) break;
|
|
927
931
|
if (typeof n != "object" || !n) continue;
|
|
928
932
|
let { value: e, visible: r, color: i } = n;
|
|
929
|
-
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) >
|
|
933
|
+
if (typeof e != "number" || !Number.isFinite(e) || Math.abs(e) > Jt || r !== void 0 && typeof r != "boolean") continue;
|
|
930
934
|
let a = {
|
|
931
935
|
value: e,
|
|
932
936
|
visible: r ?? !0
|
|
@@ -935,99 +939,99 @@ function qt(e) {
|
|
|
935
939
|
}
|
|
936
940
|
return t;
|
|
937
941
|
}
|
|
938
|
-
function
|
|
942
|
+
function Xt(e, t) {
|
|
939
943
|
switch (e.kind) {
|
|
940
944
|
case "boolean": return typeof t == "boolean" ? t : void 0;
|
|
941
945
|
case "number": return typeof t != "number" || !Number.isFinite(t) ? void 0 : Math.min(e.max ?? Infinity, Math.max(e.min ?? -Infinity, t));
|
|
942
946
|
case "choice": return typeof t == "string" && e.choices.some((e) => e.value === t) ? t : void 0;
|
|
943
|
-
case "levels": return
|
|
944
|
-
case "text": return typeof t == "string" ? t.slice(0,
|
|
947
|
+
case "levels": return Yt(t);
|
|
948
|
+
case "text": return typeof t == "string" ? t.slice(0, qt) : void 0;
|
|
945
949
|
}
|
|
946
950
|
}
|
|
947
|
-
function
|
|
951
|
+
function Zt(e, t) {
|
|
948
952
|
if (!e || typeof t != "object" || !t) return {};
|
|
949
953
|
let n = {};
|
|
950
954
|
for (let [r, i] of Object.entries(t)) {
|
|
951
955
|
let t = e[r];
|
|
952
956
|
if (!t) continue;
|
|
953
|
-
let a =
|
|
957
|
+
let a = Xt(t, i);
|
|
954
958
|
a !== void 0 && (n[r] = a);
|
|
955
959
|
}
|
|
956
960
|
return n;
|
|
957
961
|
}
|
|
958
|
-
function
|
|
962
|
+
function Qt(e) {
|
|
959
963
|
return Array.isArray(e) ? e.map((e) => ({ ...e })) : e;
|
|
960
964
|
}
|
|
961
|
-
function
|
|
965
|
+
function $t(e, t, n) {
|
|
962
966
|
let r = e?.[n];
|
|
963
|
-
return r ?
|
|
967
|
+
return r ? Qt((t && n in t ? Xt(r, t[n]) : void 0) ?? r.default) : t?.[n];
|
|
964
968
|
}
|
|
965
|
-
function
|
|
969
|
+
function en(e, t) {
|
|
966
970
|
let n = {};
|
|
967
|
-
for (let r of Object.keys(e ?? {})) n[r] =
|
|
971
|
+
for (let r of Object.keys(e ?? {})) n[r] = $t(e, t, r);
|
|
968
972
|
return n;
|
|
969
973
|
}
|
|
970
974
|
//#endregion
|
|
971
975
|
//#region src/utils/drawingStyle.ts
|
|
972
|
-
var
|
|
976
|
+
var tn = [
|
|
973
977
|
"solid",
|
|
974
978
|
"dashed",
|
|
975
979
|
"dotted"
|
|
976
|
-
],
|
|
980
|
+
], nn = 64, rn = 2e3, an = 20, on = 200, sn = 4e3, cn = 20, ln = [
|
|
977
981
|
"left",
|
|
978
982
|
"center",
|
|
979
983
|
"right"
|
|
980
|
-
],
|
|
984
|
+
], un = [
|
|
981
985
|
"top",
|
|
982
986
|
"middle",
|
|
983
987
|
"bottom"
|
|
984
988
|
];
|
|
985
|
-
function
|
|
989
|
+
function dn(e, t, n) {
|
|
986
990
|
return typeof e == "number" && Number.isFinite(e) ? Math.min(n, Math.max(t, e)) : void 0;
|
|
987
991
|
}
|
|
988
992
|
function N(e) {
|
|
989
|
-
return typeof e == "string" && e.length > 0 && e.length <=
|
|
993
|
+
return typeof e == "string" && e.length > 0 && e.length <= nn ? e : void 0;
|
|
990
994
|
}
|
|
991
|
-
function
|
|
995
|
+
function fn(e) {
|
|
992
996
|
if (typeof e != "object" || !e) return {};
|
|
993
997
|
let t = e, n = {}, r = N(t.color);
|
|
994
998
|
r !== void 0 && (n.color = r);
|
|
995
|
-
let i =
|
|
996
|
-
i !== void 0 && (n.lineWidth = i),
|
|
999
|
+
let i = dn(t.lineWidth, .5, an);
|
|
1000
|
+
i !== void 0 && (n.lineWidth = i), tn.includes(t.lineStyle) && (n.lineStyle = t.lineStyle);
|
|
997
1001
|
let a = N(t.fillColor);
|
|
998
1002
|
a !== void 0 && (n.fillColor = a);
|
|
999
|
-
let o =
|
|
1003
|
+
let o = dn(t.fillOpacity, 0, 1);
|
|
1000
1004
|
o !== void 0 && (n.fillOpacity = o);
|
|
1001
|
-
let s =
|
|
1002
|
-
s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0,
|
|
1005
|
+
let s = dn(t.fontSize, 6, on);
|
|
1006
|
+
s !== void 0 && (n.fontSize = s), typeof t.text == "string" && (n.text = t.text.slice(0, rn));
|
|
1003
1007
|
for (let e of [
|
|
1004
1008
|
"bold",
|
|
1005
1009
|
"italic",
|
|
1006
1010
|
"textBackground",
|
|
1007
1011
|
"textBorder"
|
|
1008
1012
|
]) typeof t[e] == "boolean" && (n[e] = t[e]);
|
|
1009
|
-
|
|
1013
|
+
ln.includes(t.textAlign) && (n.textAlign = t.textAlign), un.includes(t.textVAlign) && (n.textVAlign = t.textVAlign);
|
|
1010
1014
|
let c = N(t.textColor);
|
|
1011
1015
|
c !== void 0 && (n.textColor = c);
|
|
1012
1016
|
let l = N(t.borderColor);
|
|
1013
|
-
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(
|
|
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(sn, Math.max(cn, t.textWrap))), n;
|
|
1014
1018
|
}
|
|
1015
1019
|
//#endregion
|
|
1016
1020
|
//#region src/utils/chartTypeOptions.ts
|
|
1017
|
-
var P = (e) => typeof e == "number" && Number.isFinite(e) && e > 0,
|
|
1018
|
-
function
|
|
1021
|
+
var P = (e) => typeof e == "number" && Number.isFinite(e) && e > 0, pn = (e, t, n) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= n, F = (e) => typeof e == "object" && !!e && !Array.isArray(e);
|
|
1022
|
+
function mn(e) {
|
|
1019
1023
|
if (!F(e)) return {};
|
|
1020
1024
|
let t = {};
|
|
1021
1025
|
if (F(e.renko)) {
|
|
1022
1026
|
let { boxSize: n, atrPeriod: r } = e.renko;
|
|
1023
1027
|
t.renko = {
|
|
1024
1028
|
...P(n) || n === "atr" ? { boxSize: n } : {},
|
|
1025
|
-
...
|
|
1029
|
+
...pn(r, 1, 500) ? { atrPeriod: r } : {}
|
|
1026
1030
|
};
|
|
1027
1031
|
}
|
|
1028
1032
|
if (F(e.lineBreak)) {
|
|
1029
1033
|
let { lines: n } = e.lineBreak;
|
|
1030
|
-
t.lineBreak =
|
|
1034
|
+
t.lineBreak = pn(n, 1, 10) ? { lines: n } : {};
|
|
1031
1035
|
}
|
|
1032
1036
|
if (F(e.kagi)) {
|
|
1033
1037
|
let { reversal: n, reversalType: r } = e.kagi;
|
|
@@ -1040,7 +1044,7 @@ function dn(e) {
|
|
|
1040
1044
|
let { boxSize: n, reversal: r } = e.pointAndFigure;
|
|
1041
1045
|
t.pointAndFigure = {
|
|
1042
1046
|
...P(n) || n === "auto" ? { boxSize: n } : {},
|
|
1043
|
-
...
|
|
1047
|
+
...pn(r, 1, 10) ? { reversal: r } : {}
|
|
1044
1048
|
};
|
|
1045
1049
|
}
|
|
1046
1050
|
if (F(e.rangeBars)) {
|
|
@@ -1051,8 +1055,8 @@ function dn(e) {
|
|
|
1051
1055
|
}
|
|
1052
1056
|
//#endregion
|
|
1053
1057
|
//#region src/constants/themes.ts
|
|
1054
|
-
var
|
|
1055
|
-
family:
|
|
1058
|
+
var hn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace", gn = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif", _n = {
|
|
1059
|
+
family: hn,
|
|
1056
1060
|
sizeSmall: 11,
|
|
1057
1061
|
sizeMedium: 13,
|
|
1058
1062
|
sizeLarge: 15
|
|
@@ -1067,35 +1071,35 @@ var fn = "'Cascadia Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace",
|
|
|
1067
1071
|
rose: "#e25592",
|
|
1068
1072
|
neutral: "#7d8696",
|
|
1069
1073
|
ink: "#131416"
|
|
1070
|
-
},
|
|
1074
|
+
}, vn = .22;
|
|
1071
1075
|
function L(e) {
|
|
1072
|
-
return p(e,
|
|
1076
|
+
return p(e, vn);
|
|
1073
1077
|
}
|
|
1074
|
-
var
|
|
1078
|
+
var yn = "#fbfaf6", R = "#1b1d21", bn = "#131416", z = "#e6e3dc", xn = "#1f7a5c", Sn = "#b8423f", Cn = "#4fae8a", wn = "#e2706b", Tn = "#6a6966", En = "#8d8a84", Dn = {
|
|
1075
1079
|
ceiling: "#FF00FF",
|
|
1076
1080
|
floor: "#00FFFF",
|
|
1077
1081
|
reference: "#FFD700"
|
|
1078
|
-
},
|
|
1082
|
+
}, On = {
|
|
1079
1083
|
ceiling: "#a21caf",
|
|
1080
1084
|
floor: "#0e7490",
|
|
1081
1085
|
reference: "#8a6a00"
|
|
1082
|
-
},
|
|
1086
|
+
}, kn = [
|
|
1083
1087
|
I.blue,
|
|
1084
1088
|
I.ochre,
|
|
1085
1089
|
I.violet,
|
|
1086
1090
|
I.cyan,
|
|
1087
1091
|
I.rose
|
|
1088
|
-
],
|
|
1092
|
+
], An = {
|
|
1089
1093
|
name: "dark",
|
|
1090
|
-
background:
|
|
1094
|
+
background: bn,
|
|
1091
1095
|
text: z,
|
|
1092
1096
|
textSecondary: "#8d8b86",
|
|
1093
1097
|
grid: "#1d1e21",
|
|
1094
|
-
crosshair:
|
|
1095
|
-
candleUp:
|
|
1096
|
-
candleDown:
|
|
1097
|
-
candleUpWick:
|
|
1098
|
-
candleDownWick:
|
|
1098
|
+
crosshair: Tn,
|
|
1099
|
+
candleUp: Cn,
|
|
1100
|
+
candleDown: wn,
|
|
1101
|
+
candleUpWick: Cn,
|
|
1102
|
+
candleDownWick: wn,
|
|
1099
1103
|
lineColor: z,
|
|
1100
1104
|
areaTopColor: p(z, .14),
|
|
1101
1105
|
areaBottomColor: p(z, 0),
|
|
@@ -1104,19 +1108,19 @@ var gn = "#fbfaf6", R = "#1b1d21", _n = "#131416", z = "#e6e3dc", vn = "#1f7a5c"
|
|
|
1104
1108
|
axisLine: "#2a2b2f",
|
|
1105
1109
|
axisLabel: "#a9a6a0",
|
|
1106
1110
|
axisLabelBackground: "#232427",
|
|
1107
|
-
font:
|
|
1108
|
-
priceLimits:
|
|
1109
|
-
},
|
|
1111
|
+
font: _n,
|
|
1112
|
+
priceLimits: Dn
|
|
1113
|
+
}, jn = {
|
|
1110
1114
|
name: "light",
|
|
1111
|
-
background:
|
|
1115
|
+
background: yn,
|
|
1112
1116
|
text: R,
|
|
1113
1117
|
textSecondary: "#6b6f76",
|
|
1114
1118
|
grid: "#ece8df",
|
|
1115
|
-
crosshair:
|
|
1116
|
-
candleUp:
|
|
1117
|
-
candleDown:
|
|
1118
|
-
candleUpWick:
|
|
1119
|
-
candleDownWick:
|
|
1119
|
+
crosshair: En,
|
|
1120
|
+
candleUp: xn,
|
|
1121
|
+
candleDown: Sn,
|
|
1122
|
+
candleUpWick: xn,
|
|
1123
|
+
candleDownWick: Sn,
|
|
1120
1124
|
lineColor: R,
|
|
1121
1125
|
areaTopColor: p(R, .12),
|
|
1122
1126
|
areaBottomColor: p(R, 0),
|
|
@@ -1125,8 +1129,8 @@ var gn = "#fbfaf6", R = "#1b1d21", _n = "#131416", z = "#e6e3dc", vn = "#1f7a5c"
|
|
|
1125
1129
|
axisLine: "#cfcac0",
|
|
1126
1130
|
axisLabel: "#4a4e57",
|
|
1127
1131
|
axisLabelBackground: "#eeebe3",
|
|
1128
|
-
font:
|
|
1129
|
-
priceLimits:
|
|
1132
|
+
font: _n,
|
|
1133
|
+
priceLimits: On
|
|
1130
1134
|
}, B = {
|
|
1131
1135
|
name: "terminal",
|
|
1132
1136
|
background: "#0E0E0E",
|
|
@@ -1152,10 +1156,10 @@ var gn = "#fbfaf6", R = "#1b1d21", _n = "#131416", z = "#e6e3dc", vn = "#1f7a5c"
|
|
|
1152
1156
|
sizeMedium: 12,
|
|
1153
1157
|
sizeLarge: 14
|
|
1154
1158
|
}
|
|
1155
|
-
},
|
|
1159
|
+
}, Mn = new Set([B.volumeUp, B.volumeDown]);
|
|
1156
1160
|
function V(e) {
|
|
1157
1161
|
let t = (e, t) => {
|
|
1158
|
-
if (!
|
|
1162
|
+
if (!Mn.has(e)) return e;
|
|
1159
1163
|
let n = L(t);
|
|
1160
1164
|
return n === t ? e : n;
|
|
1161
1165
|
};
|
|
@@ -1166,67 +1170,67 @@ function V(e) {
|
|
|
1166
1170
|
}
|
|
1167
1171
|
//#endregion
|
|
1168
1172
|
//#region src/utils/chartStyle.ts
|
|
1169
|
-
var
|
|
1173
|
+
var Nn = [
|
|
1170
1174
|
"solid",
|
|
1171
1175
|
"dashed",
|
|
1172
1176
|
"dotted"
|
|
1173
|
-
],
|
|
1177
|
+
], Pn = 20, Fn = 64, In = 2, Ln = [
|
|
1174
1178
|
/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,
|
|
1175
1179
|
/^[a-z]{3,30}$/i,
|
|
1176
1180
|
/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i
|
|
1177
1181
|
];
|
|
1178
|
-
function
|
|
1179
|
-
return typeof e == "string" && e.length <=
|
|
1182
|
+
function Rn(e) {
|
|
1183
|
+
return typeof e == "string" && e.length <= Fn && Ln.some((t) => t.test(e.trim()));
|
|
1180
1184
|
}
|
|
1181
|
-
function
|
|
1185
|
+
function zn(e, t) {
|
|
1182
1186
|
switch (e) {
|
|
1183
|
-
case "color": return
|
|
1184
|
-
case "lineStyle": return
|
|
1185
|
-
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <=
|
|
1187
|
+
case "color": return Rn(t);
|
|
1188
|
+
case "lineStyle": return Nn.includes(t);
|
|
1189
|
+
case "width": return typeof t == "number" && Number.isFinite(t) && t > 0 && t <= Pn;
|
|
1186
1190
|
case "boolean": return typeof t == "boolean";
|
|
1187
1191
|
}
|
|
1188
1192
|
}
|
|
1189
|
-
function
|
|
1193
|
+
function Bn(e) {
|
|
1190
1194
|
return Object.prototype.hasOwnProperty.call(t, e);
|
|
1191
1195
|
}
|
|
1192
|
-
function
|
|
1196
|
+
function Vn(e) {
|
|
1193
1197
|
let n = {}, r = [];
|
|
1194
1198
|
if (typeof e != "object" || !e || Array.isArray(e)) return {
|
|
1195
1199
|
overrides: {},
|
|
1196
1200
|
rejected: r
|
|
1197
1201
|
};
|
|
1198
|
-
for (let [i, a] of Object.entries(e))
|
|
1202
|
+
for (let [i, a] of Object.entries(e)) Bn(i) ? a === null ? n[i] = null : zn(t[i], a) ? n[i] = a : r.push(i) : r.push(i);
|
|
1199
1203
|
return {
|
|
1200
1204
|
overrides: n,
|
|
1201
1205
|
rejected: r
|
|
1202
1206
|
};
|
|
1203
1207
|
}
|
|
1204
|
-
function
|
|
1208
|
+
function Hn(e) {
|
|
1205
1209
|
if (typeof e != "object" || !e || Array.isArray(e)) return null;
|
|
1206
1210
|
let { background: t, separator: n } = e, r = {
|
|
1207
|
-
...
|
|
1208
|
-
...
|
|
1211
|
+
...Rn(t) ? { background: t } : {},
|
|
1212
|
+
...Rn(n) ? { separator: n } : {}
|
|
1209
1213
|
};
|
|
1210
1214
|
return Object.keys(r).length > 0 ? r : null;
|
|
1211
1215
|
}
|
|
1212
|
-
var
|
|
1213
|
-
function
|
|
1216
|
+
var Un = /^[A-Za-z0-9_]{1,32}$/;
|
|
1217
|
+
function Wn(e) {
|
|
1214
1218
|
if (typeof e != "object" || !e || Array.isArray(e)) return;
|
|
1215
1219
|
let t = {};
|
|
1216
1220
|
for (let [n, r] of Object.entries(e)) {
|
|
1217
|
-
if (!
|
|
1221
|
+
if (!Un.test(n) || typeof r != "object" || !r) continue;
|
|
1218
1222
|
let { lineStyle: e, visible: i } = r, a = {
|
|
1219
|
-
...
|
|
1223
|
+
...Nn.includes(e) ? { lineStyle: e } : {},
|
|
1220
1224
|
...typeof i == "boolean" ? { visible: i } : {}
|
|
1221
1225
|
};
|
|
1222
1226
|
Object.keys(a).length > 0 && (t[n] = a);
|
|
1223
1227
|
}
|
|
1224
1228
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
1225
1229
|
}
|
|
1226
|
-
function
|
|
1230
|
+
function Gn(e, t, n = 1) {
|
|
1227
1231
|
return e === "solid" ? [] : e === "dotted" ? [n, n * 2] : [...t];
|
|
1228
1232
|
}
|
|
1229
|
-
function
|
|
1233
|
+
function Kn(e, t, n) {
|
|
1230
1234
|
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;
|
|
1231
1235
|
return {
|
|
1232
1236
|
up: o,
|
|
@@ -1234,12 +1238,12 @@ function Hn(e, t, n) {
|
|
|
1234
1238
|
wickUp: r("wickUpColor") ?? t("series.candlestick.wickUpColor") ?? (i === void 0 ? e.candleUpWick : o),
|
|
1235
1239
|
wickDown: r("wickDownColor") ?? t("series.candlestick.wickDownColor") ?? (a === void 0 ? e.candleDownWick : s),
|
|
1236
1240
|
line: r("color") ?? r("lineColor") ?? t("series.line.color") ?? e.lineColor,
|
|
1237
|
-
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ??
|
|
1241
|
+
lineWidth: r("lineWidth") ?? t("series.line.lineWidth") ?? In,
|
|
1238
1242
|
top: r("topColor") ?? t("series.area.topColor") ?? e.areaTopColor,
|
|
1239
1243
|
bottom: r("bottomColor") ?? t("series.area.bottomColor") ?? e.areaBottomColor
|
|
1240
1244
|
};
|
|
1241
1245
|
}
|
|
1242
|
-
function
|
|
1246
|
+
function H(e, t, n) {
|
|
1243
1247
|
return {
|
|
1244
1248
|
visible: e(`${t}.visible`) ?? n.visible,
|
|
1245
1249
|
color: e(`${t}.color`) ?? n.color,
|
|
@@ -1247,21 +1251,21 @@ function U(e, t, n) {
|
|
|
1247
1251
|
width: e(`${t}.width`) ?? n.width
|
|
1248
1252
|
};
|
|
1249
1253
|
}
|
|
1250
|
-
function
|
|
1251
|
-
let { style: r, ...i } = e, a = n, o = (e) => a[e], s =
|
|
1254
|
+
function qn(e, t, n) {
|
|
1255
|
+
let { style: r, ...i } = e, a = n, o = (e) => a[e], s = Kn(i, o, t), c = o("background.color") ?? i.background, l = (e, t) => o(e) ?? t, u = (e) => o(e) ?? null, d = {
|
|
1252
1256
|
panes: {
|
|
1253
1257
|
background: l("panes.background", c),
|
|
1254
1258
|
separator: l("panes.separatorColor", i.axisLine),
|
|
1255
1259
|
title: l("panes.titleColor", i.textSecondary)
|
|
1256
1260
|
},
|
|
1257
1261
|
grid: {
|
|
1258
|
-
horizontal:
|
|
1262
|
+
horizontal: H(o, "grid.horizontal", {
|
|
1259
1263
|
visible: !0,
|
|
1260
1264
|
color: i.grid,
|
|
1261
1265
|
style: "solid",
|
|
1262
1266
|
width: 1
|
|
1263
1267
|
}),
|
|
1264
|
-
vertical:
|
|
1268
|
+
vertical: H(o, "grid.vertical", {
|
|
1265
1269
|
visible: !0,
|
|
1266
1270
|
color: i.grid,
|
|
1267
1271
|
style: "solid",
|
|
@@ -1269,13 +1273,13 @@ function Un(e, t, n) {
|
|
|
1269
1273
|
})
|
|
1270
1274
|
},
|
|
1271
1275
|
crosshair: {
|
|
1272
|
-
horizontal:
|
|
1276
|
+
horizontal: H(o, "crosshair.horizontal", {
|
|
1273
1277
|
visible: !0,
|
|
1274
1278
|
color: i.crosshair,
|
|
1275
1279
|
style: "solid",
|
|
1276
1280
|
width: 1
|
|
1277
1281
|
}),
|
|
1278
|
-
vertical:
|
|
1282
|
+
vertical: H(o, "crosshair.vertical", {
|
|
1279
1283
|
visible: !0,
|
|
1280
1284
|
color: i.crosshair,
|
|
1281
1285
|
style: "solid",
|
|
@@ -1347,7 +1351,7 @@ function Un(e, t, n) {
|
|
|
1347
1351
|
style: d
|
|
1348
1352
|
};
|
|
1349
1353
|
}
|
|
1350
|
-
var
|
|
1354
|
+
var Jn = {
|
|
1351
1355
|
"background.color": (e) => e.background,
|
|
1352
1356
|
"panes.background": (e, t) => t.panes.background,
|
|
1353
1357
|
"panes.separatorColor": (e, t) => t.panes.separator,
|
|
@@ -1384,16 +1388,16 @@ var Wn = {
|
|
|
1384
1388
|
"tradeZones.lossColor": (e, t) => t.tradeZones.loss,
|
|
1385
1389
|
"tradeZones.activeColor": (e, t) => t.tradeZones.active,
|
|
1386
1390
|
"drawings.handleColor": (e, t) => t.drawings.handle
|
|
1387
|
-
},
|
|
1391
|
+
}, Yn = {
|
|
1388
1392
|
visible: "visible",
|
|
1389
1393
|
color: "color",
|
|
1390
1394
|
style: "style",
|
|
1391
1395
|
width: "width"
|
|
1392
1396
|
};
|
|
1393
|
-
function
|
|
1397
|
+
function Xn(e, t, n, r = "candlestick") {
|
|
1394
1398
|
let i = n.split(".");
|
|
1395
1399
|
if (i[0] === "series") {
|
|
1396
|
-
let n =
|
|
1400
|
+
let n = Kn(e, (e) => t[e], i[1]);
|
|
1397
1401
|
switch (i[2]) {
|
|
1398
1402
|
case "upColor": return n.up;
|
|
1399
1403
|
case "downColor": return n.down;
|
|
@@ -1406,12 +1410,12 @@ function Kn(e, t, n, r = "candlestick") {
|
|
|
1406
1410
|
case "bottomColor": return n.bottom;
|
|
1407
1411
|
}
|
|
1408
1412
|
}
|
|
1409
|
-
let a =
|
|
1410
|
-
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][
|
|
1413
|
+
let a = qn(e, r, t), o = a.style;
|
|
1414
|
+
return i[0] === "grid" || i[0] === "crosshair" && (i[1] === "horizontal" || i[1] === "vertical") ? (i[0] === "grid" ? o.grid : o.crosshair)[i[1]][Yn[i[2]]] : Jn[n]?.(a, o) ?? null;
|
|
1411
1415
|
}
|
|
1412
1416
|
//#endregion
|
|
1413
1417
|
//#region src/constants/defaults.ts
|
|
1414
|
-
var
|
|
1418
|
+
var Zn = {
|
|
1415
1419
|
autoScale: !0,
|
|
1416
1420
|
rightMargin: 5,
|
|
1417
1421
|
minBarSpacing: 2,
|
|
@@ -1422,7 +1426,7 @@ var qn = {
|
|
|
1422
1426
|
vLineStyle: "solid"
|
|
1423
1427
|
},
|
|
1424
1428
|
crosshair: { mode: "magnet" }
|
|
1425
|
-
},
|
|
1429
|
+
}, Qn = [
|
|
1426
1430
|
"1s",
|
|
1427
1431
|
"1m",
|
|
1428
1432
|
"3m",
|
|
@@ -1439,7 +1443,7 @@ var qn = {
|
|
|
1439
1443
|
"3d",
|
|
1440
1444
|
"1w",
|
|
1441
1445
|
"1M"
|
|
1442
|
-
],
|
|
1446
|
+
], $n = [
|
|
1443
1447
|
"1m",
|
|
1444
1448
|
"5m",
|
|
1445
1449
|
"15m",
|
|
@@ -1453,7 +1457,7 @@ var qn = {
|
|
|
1453
1457
|
"3M",
|
|
1454
1458
|
"6M",
|
|
1455
1459
|
"12M"
|
|
1456
|
-
],
|
|
1460
|
+
], er = [
|
|
1457
1461
|
"1m",
|
|
1458
1462
|
"5m",
|
|
1459
1463
|
"15m",
|
|
@@ -1463,7 +1467,7 @@ var qn = {
|
|
|
1463
1467
|
"1d",
|
|
1464
1468
|
"1w",
|
|
1465
1469
|
"1M"
|
|
1466
|
-
],
|
|
1470
|
+
], tr = [
|
|
1467
1471
|
"1m",
|
|
1468
1472
|
"5m",
|
|
1469
1473
|
"15m",
|
|
@@ -1471,7 +1475,7 @@ var qn = {
|
|
|
1471
1475
|
"4h",
|
|
1472
1476
|
"1d",
|
|
1473
1477
|
"1w"
|
|
1474
|
-
],
|
|
1478
|
+
], nr = 8, rr = 2, ir = 70, ar = 30, or = 60, sr = 120, cr = (1 + Math.sqrt(5)) / 2, lr = [
|
|
1475
1479
|
1,
|
|
1476
1480
|
2,
|
|
1477
1481
|
3,
|
|
@@ -1483,12 +1487,12 @@ var qn = {
|
|
|
1483
1487
|
55,
|
|
1484
1488
|
89
|
|
1485
1489
|
];
|
|
1486
|
-
function
|
|
1487
|
-
return Math.round(e *
|
|
1490
|
+
function ur(e, t, n = 1) {
|
|
1491
|
+
return Math.round(e * cr ** (t / n));
|
|
1488
1492
|
}
|
|
1489
1493
|
//#endregion
|
|
1490
1494
|
//#region src/i18n/en.ts
|
|
1491
|
-
var
|
|
1495
|
+
var U = {
|
|
1492
1496
|
candlestick: "Candlestick",
|
|
1493
1497
|
line: "Line",
|
|
1494
1498
|
area: "Area",
|
|
@@ -1591,7 +1595,7 @@ var W = {
|
|
|
1591
1595
|
error: "Error",
|
|
1592
1596
|
numberDecimalSeparator: ".",
|
|
1593
1597
|
numberGroupSeparator: ","
|
|
1594
|
-
},
|
|
1598
|
+
}, dr = {
|
|
1595
1599
|
candlestick: "Nến",
|
|
1596
1600
|
line: "Đường",
|
|
1597
1601
|
area: "Vùng",
|
|
@@ -1694,72 +1698,72 @@ var W = {
|
|
|
1694
1698
|
error: "Lỗi",
|
|
1695
1699
|
numberDecimalSeparator: ",",
|
|
1696
1700
|
numberGroupSeparator: "."
|
|
1697
|
-
},
|
|
1698
|
-
function
|
|
1699
|
-
|
|
1701
|
+
}, W = new Map([["en", U], ["vi", dr]]), G = "en", fr = U;
|
|
1702
|
+
function pr(e) {
|
|
1703
|
+
G = e, fr = W.get(e) ?? U;
|
|
1700
1704
|
}
|
|
1701
|
-
function
|
|
1702
|
-
return
|
|
1705
|
+
function mr() {
|
|
1706
|
+
return G;
|
|
1703
1707
|
}
|
|
1704
|
-
function
|
|
1705
|
-
return
|
|
1708
|
+
function hr(e) {
|
|
1709
|
+
return fr[e] ?? U[e] ?? e;
|
|
1706
1710
|
}
|
|
1707
|
-
function
|
|
1708
|
-
|
|
1711
|
+
function gr(e, t) {
|
|
1712
|
+
W.set(e, t);
|
|
1709
1713
|
}
|
|
1710
|
-
function
|
|
1711
|
-
return
|
|
1714
|
+
function _r(e) {
|
|
1715
|
+
return W.get(e ?? G) ?? U;
|
|
1712
1716
|
}
|
|
1713
|
-
function
|
|
1714
|
-
let r =
|
|
1717
|
+
function K(e, t = 2, n) {
|
|
1718
|
+
let r = W.get(n ?? G) ?? U, i = r.numberDecimalSeparator, a = r.numberGroupSeparator, [o, s] = e.toFixed(t).split("."), c = o.startsWith("-"), l = c ? o.slice(1) : o, u = "";
|
|
1715
1719
|
for (let e = l.length - 1, t = 0; e >= 0; e--, t++) t > 0 && t % 3 == 0 && (u = a + u), u = l[e] + u;
|
|
1716
1720
|
return c && (u = "-" + u), s ? u + i + s : u;
|
|
1717
1721
|
}
|
|
1718
|
-
function
|
|
1719
|
-
return
|
|
1722
|
+
function vr(e) {
|
|
1723
|
+
return K(e, 0, "vi");
|
|
1720
1724
|
}
|
|
1721
|
-
var
|
|
1725
|
+
var yr = [
|
|
1722
1726
|
[0xe8d4a51000, "조"],
|
|
1723
1727
|
[1e8, "억"],
|
|
1724
1728
|
[1e4, "만"]
|
|
1725
1729
|
];
|
|
1726
|
-
function
|
|
1730
|
+
function br(e) {
|
|
1727
1731
|
return /^ko([-_]|$)/i.test(e);
|
|
1728
1732
|
}
|
|
1729
|
-
function
|
|
1733
|
+
function xr(e, t, n) {
|
|
1730
1734
|
try {
|
|
1731
|
-
return
|
|
1735
|
+
return A(e, t, n);
|
|
1732
1736
|
} catch {
|
|
1733
|
-
return
|
|
1737
|
+
return K(e, t, "en");
|
|
1734
1738
|
}
|
|
1735
1739
|
}
|
|
1736
|
-
function
|
|
1737
|
-
let n = t ??
|
|
1740
|
+
function Sr(e, t) {
|
|
1741
|
+
let n = t ?? G;
|
|
1738
1742
|
if (!Number.isFinite(e)) return String(e);
|
|
1739
|
-
if (
|
|
1740
|
-
for (let [t, r] of
|
|
1741
|
-
return
|
|
1743
|
+
if (br(n)) {
|
|
1744
|
+
for (let [t, r] of yr) if (Math.round(e / t * 100) >= 100) return K(e / t, 2, n) + r;
|
|
1745
|
+
return K(e, 0, n);
|
|
1742
1746
|
}
|
|
1743
|
-
let r =
|
|
1747
|
+
let r = W.has(n) ? (e, t) => K(e, t, n) : (e, t) => xr(e, t, n);
|
|
1744
1748
|
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);
|
|
1745
1749
|
}
|
|
1746
1750
|
//#endregion
|
|
1747
1751
|
//#region src/market/presets.ts
|
|
1748
|
-
var
|
|
1752
|
+
var q = {
|
|
1749
1753
|
up: "#22C55E",
|
|
1750
1754
|
down: "#EF4444",
|
|
1751
1755
|
unchanged: "#EAB308",
|
|
1752
1756
|
ceiling: "#D946EF",
|
|
1753
1757
|
floor: "#06B6D4",
|
|
1754
1758
|
reference: "#EAB308"
|
|
1755
|
-
},
|
|
1759
|
+
}, J = "Asia/Ho_Chi_Minh", Y = {
|
|
1756
1760
|
up: "#E8313F",
|
|
1757
1761
|
down: "#2F6FEB",
|
|
1758
1762
|
unchanged: "#8B8F99",
|
|
1759
1763
|
ceiling: "#C2121F",
|
|
1760
1764
|
floor: "#1E4FC2",
|
|
1761
1765
|
reference: "#8B8F99"
|
|
1762
|
-
},
|
|
1766
|
+
}, Cr = "Asia/Seoul", wr = [
|
|
1763
1767
|
{
|
|
1764
1768
|
name: "ATO",
|
|
1765
1769
|
startTime: "09:00",
|
|
@@ -1790,7 +1794,7 @@ var J = {
|
|
|
1790
1794
|
endTime: "14:45",
|
|
1791
1795
|
type: "preClose"
|
|
1792
1796
|
}
|
|
1793
|
-
],
|
|
1797
|
+
], Tr = [
|
|
1794
1798
|
{
|
|
1795
1799
|
name: "Phiên 1",
|
|
1796
1800
|
startTime: "09:15",
|
|
@@ -1821,7 +1825,7 @@ var J = {
|
|
|
1821
1825
|
endTime: "15:00",
|
|
1822
1826
|
type: "postClose"
|
|
1823
1827
|
}
|
|
1824
|
-
],
|
|
1828
|
+
], Er = [
|
|
1825
1829
|
{
|
|
1826
1830
|
name: "Phiên 1",
|
|
1827
1831
|
startTime: "09:15",
|
|
@@ -1840,7 +1844,7 @@ var J = {
|
|
|
1840
1844
|
endTime: "14:30",
|
|
1841
1845
|
type: "continuous"
|
|
1842
1846
|
}
|
|
1843
|
-
],
|
|
1847
|
+
], Dr = [
|
|
1844
1848
|
{
|
|
1845
1849
|
name: "ATO",
|
|
1846
1850
|
startTime: "08:45",
|
|
@@ -1871,7 +1875,7 @@ var J = {
|
|
|
1871
1875
|
endTime: "14:45",
|
|
1872
1876
|
type: "preClose"
|
|
1873
1877
|
}
|
|
1874
|
-
],
|
|
1878
|
+
], Or = [
|
|
1875
1879
|
{
|
|
1876
1880
|
name: "장전 동시호가",
|
|
1877
1881
|
startTime: "08:30",
|
|
@@ -1902,7 +1906,7 @@ var J = {
|
|
|
1902
1906
|
endTime: "20:00",
|
|
1903
1907
|
type: "postClose"
|
|
1904
1908
|
}
|
|
1905
|
-
],
|
|
1909
|
+
], kr = [
|
|
1906
1910
|
{
|
|
1907
1911
|
name: "프리마켓",
|
|
1908
1912
|
startTime: "08:00",
|
|
@@ -1921,7 +1925,7 @@ var J = {
|
|
|
1921
1925
|
endTime: "20:00",
|
|
1922
1926
|
type: "postClose"
|
|
1923
1927
|
}
|
|
1924
|
-
],
|
|
1928
|
+
], Ar = [
|
|
1925
1929
|
{
|
|
1926
1930
|
from: 0,
|
|
1927
1931
|
step: 1
|
|
@@ -1950,7 +1954,7 @@ var J = {
|
|
|
1950
1954
|
from: 5e5,
|
|
1951
1955
|
step: 1e3
|
|
1952
1956
|
}
|
|
1953
|
-
],
|
|
1957
|
+
], jr = [
|
|
1954
1958
|
{
|
|
1955
1959
|
from: 0,
|
|
1956
1960
|
step: 1e-8
|
|
@@ -2011,7 +2015,7 @@ var J = {
|
|
|
2011
2015
|
from: 1e6,
|
|
2012
2016
|
step: 1e3
|
|
2013
2017
|
}
|
|
2014
|
-
],
|
|
2018
|
+
], Mr = {
|
|
2015
2019
|
type: "stock",
|
|
2016
2020
|
exchange: "HOSE",
|
|
2017
2021
|
currency: "VND",
|
|
@@ -2032,48 +2036,48 @@ var J = {
|
|
|
2032
2036
|
step: .1
|
|
2033
2037
|
}
|
|
2034
2038
|
],
|
|
2035
|
-
timeZone:
|
|
2039
|
+
timeZone: J,
|
|
2036
2040
|
priceLimits: {
|
|
2037
2041
|
enabled: !0,
|
|
2038
2042
|
ceilingPercent: 7,
|
|
2039
2043
|
floorPercent: 7
|
|
2040
2044
|
},
|
|
2041
|
-
sessions:
|
|
2042
|
-
colorScheme:
|
|
2043
|
-
},
|
|
2044
|
-
...
|
|
2045
|
+
sessions: wr,
|
|
2046
|
+
colorScheme: q
|
|
2047
|
+
}, Nr = {
|
|
2048
|
+
...Mr,
|
|
2045
2049
|
priceSteps: void 0
|
|
2046
|
-
},
|
|
2050
|
+
}, Pr = {
|
|
2047
2051
|
type: "stock",
|
|
2048
2052
|
exchange: "HNX",
|
|
2049
2053
|
currency: "VND",
|
|
2050
2054
|
pricePrecision: 1,
|
|
2051
2055
|
volumeUnit: 100,
|
|
2052
2056
|
priceStep: .1,
|
|
2053
|
-
timeZone:
|
|
2057
|
+
timeZone: J,
|
|
2054
2058
|
priceLimits: {
|
|
2055
2059
|
enabled: !0,
|
|
2056
2060
|
ceilingPercent: 10,
|
|
2057
2061
|
floorPercent: 10
|
|
2058
2062
|
},
|
|
2059
|
-
sessions:
|
|
2060
|
-
colorScheme:
|
|
2061
|
-
},
|
|
2063
|
+
sessions: Tr,
|
|
2064
|
+
colorScheme: q
|
|
2065
|
+
}, Fr = {
|
|
2062
2066
|
type: "stock",
|
|
2063
2067
|
exchange: "UPCOM",
|
|
2064
2068
|
currency: "VND",
|
|
2065
2069
|
pricePrecision: 1,
|
|
2066
2070
|
volumeUnit: 100,
|
|
2067
2071
|
priceStep: .1,
|
|
2068
|
-
timeZone:
|
|
2072
|
+
timeZone: J,
|
|
2069
2073
|
priceLimits: {
|
|
2070
2074
|
enabled: !0,
|
|
2071
2075
|
ceilingPercent: 15,
|
|
2072
2076
|
floorPercent: 15
|
|
2073
2077
|
},
|
|
2074
|
-
sessions:
|
|
2075
|
-
colorScheme:
|
|
2076
|
-
},
|
|
2078
|
+
sessions: Er,
|
|
2079
|
+
colorScheme: q
|
|
2080
|
+
}, Ir = {
|
|
2077
2081
|
type: "futures",
|
|
2078
2082
|
exchange: "HNX",
|
|
2079
2083
|
currency: "VND",
|
|
@@ -2081,50 +2085,50 @@ var J = {
|
|
|
2081
2085
|
volumeUnit: 1,
|
|
2082
2086
|
priceStep: .1,
|
|
2083
2087
|
contractMultiplier: 1e5,
|
|
2084
|
-
timeZone:
|
|
2088
|
+
timeZone: J,
|
|
2085
2089
|
priceLimits: {
|
|
2086
2090
|
enabled: !0,
|
|
2087
2091
|
ceilingPercent: 7,
|
|
2088
2092
|
floorPercent: 7
|
|
2089
2093
|
},
|
|
2090
|
-
sessions:
|
|
2091
|
-
colorScheme:
|
|
2092
|
-
},
|
|
2094
|
+
sessions: Dr,
|
|
2095
|
+
colorScheme: q
|
|
2096
|
+
}, Lr = {
|
|
2093
2097
|
type: "stock",
|
|
2094
2098
|
exchange: "KRX",
|
|
2095
2099
|
currency: "KRW",
|
|
2096
2100
|
pricePrecision: 0,
|
|
2097
2101
|
volumeUnit: 1,
|
|
2098
2102
|
priceStep: 1,
|
|
2099
|
-
priceSteps:
|
|
2100
|
-
timeZone:
|
|
2103
|
+
priceSteps: Ar,
|
|
2104
|
+
timeZone: Cr,
|
|
2101
2105
|
priceLimits: {
|
|
2102
2106
|
enabled: !0,
|
|
2103
2107
|
ceilingPercent: 30,
|
|
2104
2108
|
floorPercent: 30,
|
|
2105
2109
|
roundMove: !0
|
|
2106
2110
|
},
|
|
2107
|
-
sessions:
|
|
2108
|
-
colorScheme:
|
|
2109
|
-
},
|
|
2110
|
-
...
|
|
2111
|
+
sessions: Or,
|
|
2112
|
+
colorScheme: Y
|
|
2113
|
+
}, Rr = {
|
|
2114
|
+
...Lr,
|
|
2111
2115
|
exchange: "NXT",
|
|
2112
|
-
sessions:
|
|
2113
|
-
},
|
|
2116
|
+
sessions: kr
|
|
2117
|
+
}, zr = {
|
|
2114
2118
|
type: "crypto",
|
|
2115
2119
|
exchange: "UPBIT",
|
|
2116
2120
|
currency: "KRW",
|
|
2117
2121
|
priceStep: 1e-8,
|
|
2118
|
-
priceSteps:
|
|
2119
|
-
timeZone:
|
|
2122
|
+
priceSteps: jr,
|
|
2123
|
+
timeZone: Cr,
|
|
2120
2124
|
priceLimits: { enabled: !1 },
|
|
2121
|
-
colorScheme:
|
|
2122
|
-
},
|
|
2125
|
+
colorScheme: Y
|
|
2126
|
+
}, Br = {
|
|
2123
2127
|
type: "crypto",
|
|
2124
2128
|
currency: "USDT",
|
|
2125
2129
|
pricePrecision: 2,
|
|
2126
2130
|
priceLimits: { enabled: !1 }
|
|
2127
|
-
},
|
|
2131
|
+
}, Vr = {
|
|
2128
2132
|
type: "stock",
|
|
2129
2133
|
exchange: "NYSE",
|
|
2130
2134
|
currency: "USD",
|
|
@@ -2153,10 +2157,10 @@ var J = {
|
|
|
2153
2157
|
}
|
|
2154
2158
|
]
|
|
2155
2159
|
};
|
|
2156
|
-
function
|
|
2157
|
-
return
|
|
2160
|
+
function Hr(e) {
|
|
2161
|
+
return Ur(e, q);
|
|
2158
2162
|
}
|
|
2159
|
-
function
|
|
2163
|
+
function Ur(e, t) {
|
|
2160
2164
|
return {
|
|
2161
2165
|
...e,
|
|
2162
2166
|
candleUp: t.up,
|
|
@@ -2166,25 +2170,25 @@ function Br(e, t) {
|
|
|
2166
2170
|
};
|
|
2167
2171
|
}
|
|
2168
2172
|
var X = 1e-9;
|
|
2169
|
-
function
|
|
2173
|
+
function Wr(e, t) {
|
|
2170
2174
|
let n = t.priceStep;
|
|
2171
2175
|
for (let r of t.priceSteps ?? []) e + X >= r.from && (n = r.step);
|
|
2172
2176
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
2173
2177
|
}
|
|
2174
|
-
function
|
|
2178
|
+
function Gr(e, t) {
|
|
2175
2179
|
let n = t.priceStep;
|
|
2176
2180
|
for (let r of t.priceSteps ?? []) e - X > r.from && (n = r.step);
|
|
2177
2181
|
return n !== void 0 && n > 0 ? n : void 0;
|
|
2178
2182
|
}
|
|
2179
2183
|
function Z(e, t, n = "nearest") {
|
|
2180
|
-
let r =
|
|
2184
|
+
let r = Wr(e, t);
|
|
2181
2185
|
if (r === void 0 || !Number.isFinite(e)) return e;
|
|
2182
2186
|
let i = e / r, a = n === "down" ? Math.floor(i + X) : n === "up" ? Math.ceil(i - X) : Math.round(i);
|
|
2183
|
-
return Number((a * r).toFixed(
|
|
2187
|
+
return Number((a * r).toFixed(Vt(r)));
|
|
2184
2188
|
}
|
|
2185
|
-
function
|
|
2189
|
+
function Kr(e, t) {
|
|
2186
2190
|
if (!t.priceLimits?.enabled || !t.priceLimits.ceilingPercent) return null;
|
|
2187
|
-
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 =
|
|
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 = Wr(i, t);
|
|
2188
2192
|
if (s === void 0) return {
|
|
2189
2193
|
ceiling: a,
|
|
2190
2194
|
floor: o,
|
|
@@ -2205,14 +2209,14 @@ function Ur(e, t) {
|
|
|
2205
2209
|
};
|
|
2206
2210
|
l = Z(i + Z(i * n, e, "down"), t, "down"), u = Z(i - Z(i * r, e, "down"), t, "down");
|
|
2207
2211
|
} else l = Z(a, t, "down"), u = Z(o, t, "up");
|
|
2208
|
-
return l <= i && (l = c), u >= i && (u = Z(i - (
|
|
2212
|
+
return l <= i && (l = c), u >= i && (u = Z(i - (Gr(i, t) ?? s), t)), u <= 0 && (u = i), {
|
|
2209
2213
|
ceiling: l,
|
|
2210
2214
|
floor: u,
|
|
2211
2215
|
reference: i
|
|
2212
2216
|
};
|
|
2213
2217
|
}
|
|
2214
2218
|
var Q = (e, t) => Math.round(e * t * 1e9) / 1e9;
|
|
2215
|
-
function
|
|
2219
|
+
function qr(e, t) {
|
|
2216
2220
|
let n = Math.round(Math.log10(t));
|
|
2217
2221
|
return {
|
|
2218
2222
|
...e,
|
|
@@ -2228,11 +2232,11 @@ function Wr(e, t) {
|
|
|
2228
2232
|
}
|
|
2229
2233
|
};
|
|
2230
2234
|
}
|
|
2231
|
-
var
|
|
2232
|
-
function
|
|
2235
|
+
var Jr = 6e4, Yr = 864e5;
|
|
2236
|
+
function Xr(e, t) {
|
|
2233
2237
|
let n, r;
|
|
2234
2238
|
if (t) {
|
|
2235
|
-
let i = new Date(e +
|
|
2239
|
+
let i = new Date(e + b(t, e) * Jr);
|
|
2236
2240
|
n = i.getUTCHours(), r = i.getUTCMinutes();
|
|
2237
2241
|
} else {
|
|
2238
2242
|
let t = new Date(e);
|
|
@@ -2240,31 +2244,31 @@ function qr(e, t) {
|
|
|
2240
2244
|
}
|
|
2241
2245
|
return `${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
2242
2246
|
}
|
|
2243
|
-
function
|
|
2244
|
-
if (n !== void 0 && !
|
|
2245
|
-
let r =
|
|
2247
|
+
function Zr(e, t = Date.now(), n) {
|
|
2248
|
+
if (n !== void 0 && !y(n)) return null;
|
|
2249
|
+
let r = Xr(t, n);
|
|
2246
2250
|
for (let t of e) if (r >= t.startTime && r < t.endTime) return t;
|
|
2247
2251
|
return null;
|
|
2248
2252
|
}
|
|
2249
|
-
var $ = (e) => String(e).padStart(2, "0"),
|
|
2253
|
+
var $ = (e) => String(e).padStart(2, "0"), Qr = (e) => {
|
|
2250
2254
|
let t = new Date(e);
|
|
2251
2255
|
return `${t.getUTCFullYear()}-${$(t.getUTCMonth() + 1)}-${$(t.getUTCDate())}`;
|
|
2252
|
-
},
|
|
2253
|
-
function
|
|
2254
|
-
let r = Date.UTC(e, t - 1, 1), i = 1 + (
|
|
2256
|
+
}, $r = 4, ei = 7 * 36e5;
|
|
2257
|
+
function ti(e, t, n) {
|
|
2258
|
+
let r = Date.UTC(e, t - 1, 1), i = 1 + ($r - new Date(r).getUTCDay() + 7) % 7, a = Date.UTC(e, t - 1, i + 14), o = (e) => {
|
|
2255
2259
|
let t = new Date(e).getUTCDay();
|
|
2256
|
-
return t === 0 || t === 6 || (n?.(
|
|
2260
|
+
return t === 0 || t === 6 || (n?.(Qr(e)) ?? !1);
|
|
2257
2261
|
};
|
|
2258
|
-
for (; o(a);) a -=
|
|
2259
|
-
return
|
|
2262
|
+
for (; o(a);) a -= Yr;
|
|
2263
|
+
return Qr(a);
|
|
2260
2264
|
}
|
|
2261
|
-
function
|
|
2262
|
-
let n =
|
|
2265
|
+
function ni(e, t) {
|
|
2266
|
+
let n = Qr(e + ei), r = (e, n) => ({
|
|
2263
2267
|
symbol: `VN30F${$(e % 100)}${$(n)}`,
|
|
2264
2268
|
year: e,
|
|
2265
2269
|
month: n,
|
|
2266
|
-
lastTradingDay:
|
|
2267
|
-
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e +
|
|
2270
|
+
lastTradingDay: ti(e, n, t)
|
|
2271
|
+
}), i = (e) => e.month === 12 ? r(e.year + 1, 1) : r(e.year, e.month + 1), a = new Date(e + ei), o = r(a.getUTCFullYear(), a.getUTCMonth() + 1);
|
|
2268
2272
|
n > o.lastTradingDay && (o = i(o));
|
|
2269
2273
|
let s = [o, i(o)], c = i(s[1]);
|
|
2270
2274
|
for (; s.length < 4;) c.month % 3 == 0 && s.push(c), c = i(c);
|
|
@@ -2272,7 +2276,7 @@ function $r(e, t) {
|
|
|
2272
2276
|
}
|
|
2273
2277
|
//#endregion
|
|
2274
2278
|
//#region src/icons/iconSet.ts
|
|
2275
|
-
var
|
|
2279
|
+
var ri = {
|
|
2276
2280
|
cursor: { d: "M6 3.5L18.5 12.5L12.6 13.6L9.7 19.4z" },
|
|
2277
2281
|
trendingUp: { d: "M3 17L9 11L13 14.5L21 6.5M15 6.5H21V12.5" },
|
|
2278
2282
|
trendingDown: { d: "M3 7L9 13L13 9.5L21 17.5M15 17.5H21V11.5" },
|
|
@@ -2439,7 +2443,7 @@ var ei = {
|
|
|
2439
2443
|
]
|
|
2440
2444
|
] },
|
|
2441
2445
|
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" }
|
|
2442
|
-
},
|
|
2446
|
+
}, ii = {
|
|
2443
2447
|
trendLine: {
|
|
2444
2448
|
d: "M5 18L19 6",
|
|
2445
2449
|
dots: [[5, 18], [19, 6]]
|
|
@@ -2799,7 +2803,7 @@ var ei = {
|
|
|
2799
2803
|
],
|
|
2800
2804
|
dash: "M12 3V21"
|
|
2801
2805
|
}
|
|
2802
|
-
},
|
|
2806
|
+
}, ai = {
|
|
2803
2807
|
candlestick: {
|
|
2804
2808
|
d: "M8 3.5V7M8 16V20.5M16 5V8.5M16 15.5V19",
|
|
2805
2809
|
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"]
|
|
@@ -2866,21 +2870,21 @@ var ei = {
|
|
|
2866
2870
|
"M16 4.5h3v6h-3z"
|
|
2867
2871
|
]
|
|
2868
2872
|
}
|
|
2869
|
-
},
|
|
2870
|
-
function
|
|
2871
|
-
let t =
|
|
2873
|
+
}, oi = 1.75, si = .22, ci = /* @__PURE__ */ new WeakMap();
|
|
2874
|
+
function li(e) {
|
|
2875
|
+
let t = ci.get(e);
|
|
2872
2876
|
if (t) return t;
|
|
2873
2877
|
let n = "";
|
|
2874
|
-
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${
|
|
2878
|
+
e.soft && (n += `<path d="${e.soft}" fill="currentColor" fill-opacity="${si}" stroke="none"/>`);
|
|
2875
2879
|
for (let t of e.fills ?? []) n += `<path d="${t}" fill="currentColor" stroke="none"/>`;
|
|
2876
2880
|
e.d && (n += `<path d="${e.d}"/>`), e.dash && (n += `<path d="${e.dash}" stroke-dasharray="2 2.5"/>`);
|
|
2877
|
-
for (let [t, r, i =
|
|
2878
|
-
return
|
|
2881
|
+
for (let [t, r, i = oi] of e.dots ?? []) n += `<circle cx="${t}" cy="${r}" r="${i}" fill="currentColor" stroke="none"/>`;
|
|
2882
|
+
return ci.set(e, n), n;
|
|
2879
2883
|
}
|
|
2880
|
-
function
|
|
2881
|
-
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">${
|
|
2884
|
+
function ui(e, t) {
|
|
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">${li(e)}</svg>`;
|
|
2882
2886
|
}
|
|
2883
2887
|
//#endregion
|
|
2884
|
-
export { t as CHART_STYLE_KEYS,
|
|
2888
|
+
export { t as CHART_STYLE_KEYS, ai as CHART_TYPE_ICONS, Dn as DARK_PRICE_LIMITS, B as DARK_TERMINAL, An as DARK_THEME, rr as DEFAULT_BAR_SPACING, nr as DEFAULT_BAR_WIDTH, Zn as DEFAULT_CHART_OPTIONS, a as DEFAULT_DRAWING_STYLE, hn as DEFAULT_FONT_FAMILY, sr as DEFAULT_PANEL_HEIGHT, l as DEFAULT_RECONNECT, s as DEFAULT_SIGNAL_STYLE, u as DEFAULT_STREAM_CONFIG, tr as DEFAULT_TIMEFRAME_FAVORITES, c as DEFAULT_TRADE_ZONE_STYLE, o as DEFAULT_TRADING_CONFIG, ii as DRAWING_TOOL_ICONS, lr as FIBONACCI, Tr as HNX_SESSIONS, wr as HOSE_SESSIONS, oi as ICON_DOT_RADIUS, si as ICON_SOFT_OPACITY, Or as KRX_SESSIONS, Y as KR_COLORS, On as LIGHT_PRICE_LIMITS, jn as LIGHT_THEME, n as LINE_TINT_FILL, e as LayerType, Br as MARKET_CRYPTO, Pr as MARKET_HNX, Mr as MARKET_HOSE, Nr as MARKET_HOSE_ETF, Lr as MARKET_KRX, Rr as MARKET_NXT, Vr as MARKET_NYSE, zr as MARKET_UPBIT_KRW, Fr as MARKET_UPCOM, Ir as MARKET_VN30F, or as MIN_PANEL_HEIGHT, fe as MS_TIME_THRESHOLD, kr as NXT_SESSIONS, cr as PHI, ir as PRICE_AXIS_WIDTH, Tt as PRICE_SOURCES, gn as SANS_FONT_FAMILY, I as TC_PALETTE, kn as TC_SERIES_COLORS, Qn as TIMEFRAMES_CRYPTO, er as TIMEFRAMES_FOREX, $n as TIMEFRAMES_STOCK, ar as TIME_AXIS_HEIGHT, ri as UI_ICONS, Er as UPCOM_SESSIONS, Dr as VN30F_SESSIONS, q as VN_COLORS, vn as VOLUME_ALPHA, Je as alignToTimeframe, _t as autoPricePrecision, pt as barDateParts, ft as barDateZone, pe as barTimeUnit, Qe as barsAreDaily, Xn as chartStyleValue, oe as clamp, Kr as computePriceLimits, be as computePriceRange, de as computeTickStep, m as contrastRatio, Ur as createMarketTheme, Hr as createVNTheme, wt as detectPrecision, $t as drawingOption, U as en, _e as findBarIndex, ye as fitPriceRange, bt as formatFraction, K as formatNumber, A as formatPrice, yt as formatPriceScaleLabel, qe as formatTimestamp, vr as formatVND, Ct as formatVolume, Sr as formatVolumeLoc, xt as fractionTick, Zr as getCurrentSession, mr as getLocale, _r as getLocaleStrings, Se as hexToRgba, ui as iconSvg, kt as indicatorSource, ke as inkOn, ce as inverseLerp, Xe as isDateOnly, Et as isPriceSource, Ke as isTimeFrame, x as isUtcTimeZone, y as isValidTimeZone, se as lerp, Te as lerpColor, Gn as lineDash, Gt as marketStatus, xe as mergeBar, ue as niceNumber, he as normalizeBar, me as normalizeBarTime, S as offsetAt, r as ownFillColor, ve as padPriceRange, At as parseIndicatorSource, w as parseTimeframe, ur as phiStep, Rt as pickBaseTimeframe, St as priceFormatterFor, Wr as priceStepAt, gt as priceTagText, Bt as rankSymbols, Vn as readChartStyleOverrides, mn as readChartTypeOptions, Wn as readIndicatorPlotStyles, ae as readNews, Hn as readPaneStyle, ee as readQuote, Oe as readableOn, gr as registerLocale, Nt as resampleBars, qn as resolveChartTheme, en as resolveDrawingOptions, V as resolveVolumeColors, Z as roundToPriceStep, le as roundToStep, Zt as sanitizeDrawingOptions, fn as sanitizeDrawingStyle, qr as scaleMarketPrices, Ut as sessionMinute, pr as setLocale, ge as sliceVisibleData, Dt as sourcePrice, Vt as stepDecimals, Ht as symbolTimeZone, hr as t, Ge as tickBarCount, Ye as timeParts, O as timeframeBucketStart, ct as timeframeFollowsDays, lt as timeframeSpansDays, T as timeframeToMs, $e as tzLabel, br as usesKoreanUnits, dr as vi, ni as vn30fContracts, ti as vn30fLastTradingDay, L as volumeColor, ze as wallToUtc, p as withAlpha, b as zoneOffsetMinutes, Ve as zonedDateFormatter };
|
|
2885
2889
|
|
|
2886
2890
|
//# sourceMappingURL=index.js.map
|