@tradecanvas/chart 0.4.0 → 0.5.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/README.md +11 -3
- package/dist/Chart.d.ts +21 -4
- package/dist/Chart.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +121 -107
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AlertManager as
|
|
1
|
+
import { DARK_TERMINAL as e, DARK_THEME as t, DARK_THEME as n, DEFAULT_DRAWING_STYLE as r, DEFAULT_PANEL_HEIGHT as i, DEFAULT_RECONNECT as a, DEFAULT_STREAM_CONFIG as o, DEFAULT_TIMEFRAME_FAVORITES as s, DEFAULT_TRADING_CONFIG as c, LIGHT_THEME as l, LIGHT_THEME as u, LayerType as d, MARKET_CRYPTO as f, MARKET_HNX as ee, MARKET_HOSE as p, MARKET_NYSE as m, MARKET_UPCOM as h, MIN_PANEL_HEIGHT as g, PRICE_AXIS_WIDTH as _, TIMEFRAMES_CRYPTO as te, TIMEFRAMES_FOREX as ne, TIMEFRAMES_STOCK as re, TIME_AXIS_HEIGHT as v, VN_COLORS as ie, computePriceLimits as ae, computePriceLimits as y, createVNTheme as oe, formatNumber as se, formatVND as ce, formatVolumeLoc as le, getCurrentSession as ue, getLocale as de, mergeBar as fe, normalizeBar as pe, normalizeBarTime as me, registerLocale as b, setLocale as x, setLocale as S, t as C } from "@tradecanvas/commons";
|
|
2
|
+
import { AlertManager as w, AlertManager as T, Animator as E, Animator as D, AreaRenderer as O, BarCountdown as k, BarCountdown as A, BarRenderer as j, BaseFinanceChart as M, BaselineRenderer as N, BinanceAdapter as P, CandlestickRenderer as F, ChartLegend as I, ChartLegend as L, ChartStateManager as R, ChartStateManager as z, CompareRenderer as he, CompareRenderer as ge, CrosshairHandler as _e, CrosshairTooltip as ve, CrosshairTooltip as ye, CurrentPriceLine as be, CurrentPriceLine as xe, DEFAULT_LEGEND_CONFIG as Se, DataExporter as Ce, DataExporter as B, DrawingBase as we, DrawingManager as Te, DrawingRenderer as Ee, Easing as De, EventBus as Oe, FinanceCrosshair as V, GridRenderer as ke, HollowCandleRenderer as Ae, IndicatorBase as je, IndicatorEngine as H, InteractionManager as Me, KagiRenderer as Ne, KeyboardHandler as Pe, KeyboardHandler as Fe, LineRenderer as Ie, MockAdapter as Le, PanHandler as Re, PointAndFigureRenderer as ze, PriceAxis as Be, RenderEngine as Ve, RenkoRenderer as He, ReplayManager as Ue, ReplayManager as U, Screenshot as We, Screenshot as W, SessionBreaks as Ge, SessionBreaks as Ke, StreamManager as qe, StreamManager as Je, TickAggregator as Ye, TimeAxis as Xe, TradingManager as Ze, TradingRenderer as Qe, UndoRedoManager as $e, UndoRedoManager as et, Viewport as tt, VolumeRenderer as nt, VolumeRenderer as rt, Watermark as it, Watermark as at, ZoomHandler as ot, layoutSquarifiedTreemap as st, layoutUniformGrid as ct, registerBuiltInDrawingTools as lt, registerBuiltInIndicators as G, renderDepthChart as ut, renderEquityCurve as dt, renderGauge as ft, renderHeatmap as pt, renderSparkline as mt, renderWaterfall as ht, toHeikinAshi as gt, toHeikinAshi as _t, toKagi as vt, toKagi as yt, toLineBreak as bt, toLineBreak as xt, toPointAndFigure as St, toPointAndFigure as Ct, toRenko as wt, toRenko as Tt } from "@tradecanvas/core";
|
|
3
3
|
//#region src/DataManager.ts
|
|
4
|
-
function
|
|
4
|
+
function K(e) {
|
|
5
5
|
if (!e || typeof e.time != "number") return !1;
|
|
6
6
|
let { open: t, high: n, low: r, close: i } = e;
|
|
7
7
|
return !(!isFinite(t) || !isFinite(n) || !isFinite(r) || !isFinite(i) || t < 0 || n < 0 || r < 0 || i < 0 || n < r || e.volume !== void 0 && (!isFinite(e.volume) || e.volume < 0));
|
|
8
8
|
}
|
|
9
|
-
function
|
|
9
|
+
function q(e) {
|
|
10
10
|
return {
|
|
11
11
|
...e,
|
|
12
12
|
high: Math.max(e.open, e.high, e.low, e.close),
|
|
@@ -14,20 +14,20 @@ function K(e) {
|
|
|
14
14
|
volume: e.volume === void 0 ? 0 : Math.max(0, e.volume)
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
-
var
|
|
17
|
+
var J = class {
|
|
18
18
|
data = [];
|
|
19
19
|
getData() {
|
|
20
20
|
return this.data;
|
|
21
21
|
}
|
|
22
22
|
setData(e) {
|
|
23
|
-
this.data = e.filter(
|
|
23
|
+
this.data = e.filter(K).map(q);
|
|
24
24
|
}
|
|
25
25
|
appendBar(e) {
|
|
26
|
-
|
|
26
|
+
K(e) && this.data.push(q(e));
|
|
27
27
|
}
|
|
28
28
|
updateLastBar(e) {
|
|
29
|
-
if (!
|
|
30
|
-
let t =
|
|
29
|
+
if (!K(e)) return;
|
|
30
|
+
let t = q(e);
|
|
31
31
|
if (this.data.length === 0) {
|
|
32
32
|
this.data.push(t);
|
|
33
33
|
return;
|
|
@@ -35,7 +35,7 @@ var q = class {
|
|
|
35
35
|
this.data[this.data.length - 1] = t;
|
|
36
36
|
}
|
|
37
37
|
updateLastBarFromTick(e) {
|
|
38
|
-
this.data.length !== 0 && (!isFinite(e.price) || e.price < 0 || e.volume !== void 0 && (!isFinite(e.volume) || e.volume < 0) || (this.data[this.data.length - 1] =
|
|
38
|
+
this.data.length !== 0 && (!isFinite(e.price) || e.price < 0 || e.volume !== void 0 && (!isFinite(e.volume) || e.volume < 0) || (this.data[this.data.length - 1] = fe(this.data[this.data.length - 1], e)));
|
|
39
39
|
}
|
|
40
40
|
getLength() {
|
|
41
41
|
return this.data.length;
|
|
@@ -43,18 +43,18 @@ var q = class {
|
|
|
43
43
|
clear() {
|
|
44
44
|
this.data = [];
|
|
45
45
|
}
|
|
46
|
-
},
|
|
46
|
+
}, Y = class {
|
|
47
47
|
theme;
|
|
48
48
|
constructor(e) {
|
|
49
|
-
!e || e === "dark" ? this.theme = { ...
|
|
49
|
+
!e || e === "dark" ? this.theme = { ...n } : e === "light" ? this.theme = { ...u } : this.theme = { ...e };
|
|
50
50
|
}
|
|
51
51
|
getTheme() {
|
|
52
52
|
return this.theme;
|
|
53
53
|
}
|
|
54
54
|
setTheme(e) {
|
|
55
|
-
e === "dark" ? this.theme = { ...
|
|
55
|
+
e === "dark" ? this.theme = { ...n } : e === "light" ? this.theme = { ...u } : this.theme = { ...e };
|
|
56
56
|
}
|
|
57
|
-
},
|
|
57
|
+
}, X = 200, Z = 80, Q = class {
|
|
58
58
|
panels = [];
|
|
59
59
|
containerWidth = 0;
|
|
60
60
|
containerHeight = 0;
|
|
@@ -62,12 +62,12 @@ var q = class {
|
|
|
62
62
|
this.containerWidth = e, this.containerHeight = t;
|
|
63
63
|
}
|
|
64
64
|
addPanel(e, t = "bottom", n) {
|
|
65
|
-
let
|
|
65
|
+
let r = t === "left" || t === "right";
|
|
66
66
|
this.panels.push({
|
|
67
67
|
id: e,
|
|
68
68
|
position: t,
|
|
69
|
-
size: n ?? (
|
|
70
|
-
minSize:
|
|
69
|
+
size: n ?? (r ? X : i),
|
|
70
|
+
minSize: r ? Z : g,
|
|
71
71
|
content: {
|
|
72
72
|
type: "indicator",
|
|
73
73
|
indicatorInstanceId: e
|
|
@@ -80,8 +80,8 @@ var q = class {
|
|
|
80
80
|
setPanelPosition(e, t) {
|
|
81
81
|
let n = this.panels.find((t) => t.id === e);
|
|
82
82
|
if (n) {
|
|
83
|
-
let e = n.position === "left" || n.position === "right",
|
|
84
|
-
n.position = t, e !==
|
|
83
|
+
let e = n.position === "left" || n.position === "right", r = t === "left" || t === "right";
|
|
84
|
+
n.position = t, e !== r && (n.size = r ? X : i, n.minSize = r ? Z : g);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
setPanelSize(e, t) {
|
|
@@ -95,7 +95,7 @@ var q = class {
|
|
|
95
95
|
let e = this.panels.filter((e) => e.position === "left"), t = this.panels.filter((e) => e.position === "right"), n = this.panels.filter((e) => e.position === "top"), r = this.panels.filter((e) => e.position === "bottom"), i = e.reduce((e, t) => e + t.size, 0), a = t.reduce((e, t) => e + t.size, 0), o = n.reduce((e, t) => e + t.size, 0), s = r.reduce((e, t) => e + t.size, 0), c = {
|
|
96
96
|
x: i,
|
|
97
97
|
y: o,
|
|
98
|
-
width: Math.max(0, this.containerWidth - i - a -
|
|
98
|
+
width: Math.max(0, this.containerWidth - i - a - _),
|
|
99
99
|
height: Math.max(0, this.containerHeight - o - s - v)
|
|
100
100
|
}, l = [], u = [], d = 0;
|
|
101
101
|
for (let t of e) l.push({
|
|
@@ -154,7 +154,7 @@ var q = class {
|
|
|
154
154
|
},
|
|
155
155
|
orientation: "horizontal"
|
|
156
156
|
}), f += e.size;
|
|
157
|
-
d = i + c.width +
|
|
157
|
+
d = i + c.width + _;
|
|
158
158
|
for (let e of t) l.push({
|
|
159
159
|
config: e,
|
|
160
160
|
rect: {
|
|
@@ -182,14 +182,14 @@ var q = class {
|
|
|
182
182
|
getMainChartRect() {
|
|
183
183
|
return this.resolve().mainChartRect;
|
|
184
184
|
}
|
|
185
|
-
},
|
|
185
|
+
}, $ = class {
|
|
186
186
|
constructor(e) {
|
|
187
187
|
this.indicatorEngine = e;
|
|
188
188
|
}
|
|
189
189
|
registerIndicator(e) {
|
|
190
190
|
this.indicatorEngine.register(e);
|
|
191
191
|
}
|
|
192
|
-
},
|
|
192
|
+
}, Et = class {
|
|
193
193
|
static version = "0.3.0";
|
|
194
194
|
engine;
|
|
195
195
|
viewport;
|
|
@@ -240,6 +240,7 @@ var q = class {
|
|
|
240
240
|
numberLocale;
|
|
241
241
|
keyboardHandler = null;
|
|
242
242
|
onWindowKeyDown = null;
|
|
243
|
+
currentSymbol = "";
|
|
243
244
|
constructor(e, t) {
|
|
244
245
|
this.container = e, this.options = t, this.numberLocale = t.numberLocale ?? "en-US";
|
|
245
246
|
let n = t.features ?? {};
|
|
@@ -273,19 +274,19 @@ var q = class {
|
|
|
273
274
|
logScale: n.logScale ?? !0,
|
|
274
275
|
timeframes: n.timeframes ?? [],
|
|
275
276
|
defaultTimeframeFavorites: n.defaultTimeframeFavorites ?? []
|
|
276
|
-
}, e.style.position = "relative", e.style.overflow = "hidden", e.tabIndex = 0, e.style.outline = "none", this.dataManager = new
|
|
277
|
-
this.syncRenderContext(), this.engine.requestRender(
|
|
277
|
+
}, e.style.position = "relative", e.style.overflow = "hidden", e.tabIndex = 0, e.style.outline = "none", this.dataManager = new J(), this.themeManager = new Y(t.theme), this.layoutManager = new Q(), this.indicatorEngine = new H(), this.pluginManager = new $(this.indicatorEngine), this.eventBus = new Oe(), G(this.indicatorEngine), this.drawingManager = new Te(), lt(this.drawingManager), this.drawingRenderer = new Ee(this.drawingManager), this.drawingManager.setRequestRender(() => {
|
|
278
|
+
this.syncRenderContext(), this.engine.requestRender(d.Overlay), this.scheduleAutoSave();
|
|
278
279
|
}), this.drawingManager.setEventCallback((e, t) => {
|
|
279
280
|
this.eventBus.emit(e, t);
|
|
280
|
-
}), this.undoRedoManager = new
|
|
281
|
+
}), this.undoRedoManager = new et(), this.drawingManager.setUndoRedoManager(this.undoRedoManager), this.drawingManager.setDataGetter(() => this.dataManager.getData()), this.drawingManager.setDisplayDataGetter(() => this.getDisplayData()), t.crosshair?.mode === "magnet" && this.drawingManager.setMagnetMode("magnet"), this.tradingManager = new Ze(), this.tradingRenderer = new Qe(this.tradingManager), this.tradingManager.setContainer(e), this.tradingManager.setRequestRender(() => this.engine.requestRender(d.Overlay)), this.tradingManager.setEventCallback((e, t) => {
|
|
281
282
|
this.eventBus.emit(e, t);
|
|
282
|
-
}), this.engine = new
|
|
283
|
+
}), this.engine = new Ve(e);
|
|
283
284
|
let r = this.engine.dprManager.getContainerSize();
|
|
284
|
-
this.viewport = new
|
|
285
|
+
this.viewport = new tt(r.width, r.height, t.minBarSpacing ?? 2, t.maxBarSpacing ?? 30, t.rightMargin ?? 5), this.layoutManager.resize(r.width, r.height), this.engine.onContainerResize = (e) => {
|
|
285
286
|
if (e.width <= 0 || e.height <= 0) return;
|
|
286
287
|
let t = this.viewport.isAtEnd();
|
|
287
288
|
this.viewport.resize(e.width, e.height), this.layoutManager.resize(e.width, e.height), this.updateViewportAndRender(t);
|
|
288
|
-
}, this.chartRenderer = this.createChartRenderer(t.chartType), this.gridRenderer = new
|
|
289
|
+
}, this.chartRenderer = this.createChartRenderer(t.chartType), this.gridRenderer = new ke(), t.grid?.visible === !1 && this.gridRenderer.setVisible(!1), this.priceAxis = new Be(), this.priceAxis.setLocale(this.numberLocale), this.timeAxis = new Xe(), this.crosshairHandler = new _e(), this.crosshairHandler.setLocale(this.numberLocale), t.crosshair?.mode && this.crosshairHandler.setMode(t.crosshair.mode), this.crosshairHandler.setCallback((e, t) => {
|
|
289
290
|
if (e !== null && t) {
|
|
290
291
|
let n = this.dataManager.getData(), r = e < n.length ? n[e] : void 0;
|
|
291
292
|
this.chartLegend.setHoverBar(r ?? null), r && this.crosshairTooltip.show(t, r, this.themeManager.getTheme(), this.cachedContainerSize()), this.eventBus.emit("crosshairMove", {
|
|
@@ -294,12 +295,12 @@ var q = class {
|
|
|
294
295
|
barIndex: e
|
|
295
296
|
});
|
|
296
297
|
} else this.crosshairTooltip.hide(), this.chartLegend.setHoverBar(null);
|
|
297
|
-
}), this.chartLegend = new
|
|
298
|
+
}), this.chartLegend = new L(), this.chartLegend.setChartType(t.chartType), this.watermark = new at(), t.watermark && this.watermark.setConfig(t.watermark), this.volumeRenderer = new rt(), this.barCountdown = new A(), this.sessionBreaks = new Ke(), this.compareRenderer = new ge(), t.sessionBreaks ? this.sessionBreaks.setConfig({
|
|
298
299
|
visible: t.sessionBreaks.visible ?? !0,
|
|
299
300
|
color: t.sessionBreaks.color,
|
|
300
301
|
lineStyle: t.sessionBreaks.lineStyle,
|
|
301
302
|
lineWidth: t.sessionBreaks.lineWidth
|
|
302
|
-
}) : t.features?.sessionBreaks !== !1 && this.sessionBreaks.setVisible(!0), t.logScale && this.viewport.setLogScale(!0), this.animator = new
|
|
303
|
+
}) : t.features?.sessionBreaks !== !1 && this.sessionBreaks.setVisible(!0), t.logScale && this.viewport.setLogScale(!0), this.animator = new D(), this.crosshairTooltip = new ye(), this.crosshairTooltip.create(e), this.keyboardHandler = new Fe({
|
|
303
304
|
scrollBars: (e) => {
|
|
304
305
|
let t = this.viewport.getState().barWidth + this.viewport.getState().barSpacing;
|
|
305
306
|
this.viewport.scrollBy(e * t), this.updateViewportAndRender();
|
|
@@ -319,19 +320,19 @@ var q = class {
|
|
|
319
320
|
if (!this.keyboardHandler) return;
|
|
320
321
|
let t = document.activeElement;
|
|
321
322
|
t && t !== this.container && !this.container.contains(t) || t && (t.tagName === "INPUT" || t.tagName === "TEXTAREA" || t.isContentEditable) || this.keyboardHandler.handleKey(e) && e.preventDefault();
|
|
322
|
-
}, window.addEventListener("keydown", this.onWindowKeyDown), this.currentPriceLine = new
|
|
323
|
+
}, window.addEventListener("keydown", this.onWindowKeyDown), this.currentPriceLine = new xe(), this.alertManager = new T(), this.alertManager.setRequestRender(() => this.engine.requestRender(d.Overlay)), this.alertManager.on("triggered", (e) => {
|
|
323
324
|
this.eventBus.emit("dataUpdate", {
|
|
324
325
|
alert: "triggered",
|
|
325
326
|
alertId: e.id,
|
|
326
327
|
price: e.price,
|
|
327
328
|
message: e.message
|
|
328
329
|
});
|
|
329
|
-
}), this.replayManager = new
|
|
330
|
+
}), this.replayManager = new U(), this.interactionManager = new Me(e), this.features.panning && this.interactionManager.setPanHandler(new Re((e) => {
|
|
330
331
|
this.viewport.scrollBy(e), this.updateViewportAndRender();
|
|
331
|
-
})), this.features.zooming && this.interactionManager.setZoomHandler(new
|
|
332
|
+
})), this.features.zooming && this.interactionManager.setZoomHandler(new ot((e, t) => {
|
|
332
333
|
this.viewport.zoom(e, t), this.updateViewportAndRender();
|
|
333
334
|
})), this.features.crosshair && this.interactionManager.setCrosshairHandler(this.crosshairHandler), this.features.drawings && this.interactionManager.setDrawingManager(this.drawingManager, () => this.viewport.getState()), this.features.trading && this.interactionManager.setTradingManager(this.tradingManager, () => this.viewport.getState()), this.interactionManager.setOverlayDirtyCallback(() => {
|
|
334
|
-
this.engine.requestRender(
|
|
335
|
+
this.engine.requestRender(d.Overlay), this.layoutManager.getPanels().length > 0 && this.engine.requestRender(d.UI);
|
|
335
336
|
}), this.interactionManager.attach(), this.syncRenderContext(), this.engine.start();
|
|
336
337
|
}
|
|
337
338
|
setData(e) {
|
|
@@ -340,6 +341,12 @@ var q = class {
|
|
|
340
341
|
appendBar(e) {
|
|
341
342
|
this.dataManager.appendBar(e), this.crosshairHandler.setData(this.dataManager.getData()), this.displayDataCache = null, this.autoScrollOnNewBar && this.viewport.scrollToEnd(), this.indicatorEngine.recalculateAll(this.dataManager.getData()), this.updateViewportAndRender();
|
|
342
343
|
}
|
|
344
|
+
appendBars(e) {
|
|
345
|
+
if (e.length !== 0) {
|
|
346
|
+
for (let t of e) this.dataManager.appendBar(t);
|
|
347
|
+
this.displayDataCache = null, this.indicatorEngine.recalculateAll(this.dataManager.getData()), this.crosshairHandler.setData(this.dataManager.getData()), this.updateViewportAndRender(this.viewport.isAtEnd());
|
|
348
|
+
}
|
|
349
|
+
}
|
|
343
350
|
updateLastBar(e) {
|
|
344
351
|
this.dataManager.updateLastBar(e), this.currentPriceLine.setPrice(e.close), this.options.chartType !== "candlestick" && this.options.chartType !== "line" && this.options.chartType !== "area" && this.options.chartType !== "bar" && this.options.chartType !== "hollowCandle" && (this.displayDataCache = null), this.indicatorEngine.recalculateAll(this.dataManager.getData()), this.scheduleRender();
|
|
345
352
|
}
|
|
@@ -372,7 +379,7 @@ var q = class {
|
|
|
372
379
|
}
|
|
373
380
|
static indicators() {
|
|
374
381
|
let e = new H();
|
|
375
|
-
return
|
|
382
|
+
return G(e), e.getAvailableIndicators();
|
|
376
383
|
}
|
|
377
384
|
setPanelPosition(e, t) {
|
|
378
385
|
this.layoutManager.setPanelPosition(e, t), this.engine.requestRender();
|
|
@@ -498,42 +505,46 @@ var q = class {
|
|
|
498
505
|
setDepthData(e) {
|
|
499
506
|
this.features.trading && this.tradingManager.setDepthData(e);
|
|
500
507
|
}
|
|
501
|
-
setCurrentPrice(e) {
|
|
508
|
+
setCurrentPrice(e, t) {
|
|
502
509
|
this.tradingManager.setCurrentPrice(e), this.currentPriceLine.setPrice(e), this.scheduleRender(), this.features.alerts && this.alertManager.checkPrice(e);
|
|
503
510
|
}
|
|
504
511
|
setTradingConfig(e) {
|
|
505
512
|
this.features.trading && this.tradingManager.setConfig(e);
|
|
506
513
|
}
|
|
507
514
|
async connect(e) {
|
|
508
|
-
this.disconnectStream(), this.streamManager = new
|
|
515
|
+
this.disconnectStream(), this.streamManager = new Je(), this.streamManager.on("snapshot", (e) => {
|
|
509
516
|
this.setData(e);
|
|
510
517
|
}), this.streamManager.on("barClose", (e) => {
|
|
511
518
|
this.dataManager.appendBar(e), this.crosshairHandler.setData(this.dataManager.getData()), this.autoScrollOnNewBar && this.viewport.scrollToEnd(), this.indicatorEngine.recalculateAll(this.dataManager.getData()), this.updateViewportAndRender();
|
|
512
519
|
}), this.streamManager.on("barUpdate", (e) => {
|
|
513
520
|
this.dataManager.updateLastBar(e), this.currentPriceLine.setPrice(e.close), this.indicatorEngine.recalculateAll(this.dataManager.getData()), this.scheduleRender();
|
|
514
521
|
}), this.streamManager.on("priceChange", ({ price: e }) => {
|
|
515
|
-
this.tradingManager.setCurrentPrice(e), this.currentPriceLine.setPrice(e), this.engine.requestRender(
|
|
522
|
+
this.tradingManager.setCurrentPrice(e), this.currentPriceLine.setPrice(e), this.engine.requestRender(d.Overlay), this.engine.requestRender(d.UI);
|
|
516
523
|
}), this.streamManager.on("connectionChange", (e) => {
|
|
517
524
|
this.eventBus.emit("dataUpdate", { connection: e });
|
|
518
525
|
}), this.streamManager.on("error", (e) => {
|
|
519
526
|
this.eventBus.emit("dataUpdate", { error: e.message });
|
|
520
|
-
}), this.autoScrollOnNewBar = e.autoScroll !== !1, await this.streamManager.connect(e);
|
|
527
|
+
}), this.autoScrollOnNewBar = e.autoScroll !== !1, this.currentSymbol = e.symbol, await this.streamManager.connect(e);
|
|
521
528
|
let t = this.timeframeToMs(e.timeframe);
|
|
522
529
|
this.barCountdown.setTimeframeMs(t), this.countdownInterval && clearInterval(this.countdownInterval), this.countdownInterval = setInterval(() => {
|
|
523
|
-
this.barCountdown.isVisible() && this.engine.requestRender(
|
|
530
|
+
this.barCountdown.isVisible() && this.engine.requestRender(d.UI);
|
|
524
531
|
}, 1e3);
|
|
525
532
|
}
|
|
526
533
|
async switchStream(e, t) {
|
|
527
|
-
this.streamManager && await this.streamManager.switchTo(e, t);
|
|
534
|
+
this.streamManager && (this.currentSymbol = e, await this.streamManager.switchTo(e, t));
|
|
535
|
+
}
|
|
536
|
+
async setTimeframe(e) {
|
|
537
|
+
if (!this.streamManager) throw Error("No active stream. Call connect() first.");
|
|
538
|
+
await this.switchStream(this.currentSymbol, e);
|
|
528
539
|
}
|
|
529
540
|
disconnectStream() {
|
|
530
541
|
this.streamManager &&= (this.streamManager.dispose(), null);
|
|
531
542
|
}
|
|
532
543
|
setBarCountdownVisible(e) {
|
|
533
|
-
this.barCountdown.setVisible(e), this.engine.requestRender(
|
|
544
|
+
this.barCountdown.setVisible(e), this.engine.requestRender(d.UI);
|
|
534
545
|
}
|
|
535
546
|
setSessionBreaksVisible(e) {
|
|
536
|
-
this.sessionBreaks.setVisible(e), this.engine.requestRender(
|
|
547
|
+
this.sessionBreaks.setVisible(e), this.engine.requestRender(d.Background);
|
|
537
548
|
}
|
|
538
549
|
addCompareSymbol(e, t, n, r) {
|
|
539
550
|
this.compareRenderer.addSymbol({
|
|
@@ -542,19 +553,19 @@ var q = class {
|
|
|
542
553
|
data: n,
|
|
543
554
|
color: r,
|
|
544
555
|
visible: !0
|
|
545
|
-
}), this.engine.requestRender(
|
|
556
|
+
}), this.engine.requestRender(d.Main);
|
|
546
557
|
}
|
|
547
558
|
removeCompareSymbol(e) {
|
|
548
|
-
this.compareRenderer.removeSymbol(e), this.engine.requestRender(
|
|
559
|
+
this.compareRenderer.removeSymbol(e), this.engine.requestRender(d.Main);
|
|
549
560
|
}
|
|
550
561
|
updateCompareData(e, t) {
|
|
551
|
-
this.compareRenderer.setSymbolData(e, t), this.engine.requestRender(
|
|
562
|
+
this.compareRenderer.setSymbolData(e, t), this.engine.requestRender(d.Main);
|
|
552
563
|
}
|
|
553
564
|
setCompareMode(e) {
|
|
554
|
-
this.compareRenderer.setMode(e), this.engine.requestRender(
|
|
565
|
+
this.compareRenderer.setMode(e), this.engine.requestRender(d.Main);
|
|
555
566
|
}
|
|
556
567
|
clearCompareSymbols() {
|
|
557
|
-
this.compareRenderer.clear(), this.engine.requestRender(
|
|
568
|
+
this.compareRenderer.clear(), this.engine.requestRender(d.Main);
|
|
558
569
|
}
|
|
559
570
|
setLogScale(e) {
|
|
560
571
|
this.viewport.setLogScale(e), this.updateViewportAndRender();
|
|
@@ -563,7 +574,7 @@ var q = class {
|
|
|
563
574
|
return this.viewport.isLogScale();
|
|
564
575
|
}
|
|
565
576
|
setSessionBreaksConfig(e) {
|
|
566
|
-
this.sessionBreaks.setConfig(e), this.engine.requestRender(
|
|
577
|
+
this.sessionBreaks.setConfig(e), this.engine.requestRender(d.Background);
|
|
567
578
|
}
|
|
568
579
|
getConnectionState() {
|
|
569
580
|
return this.streamManager?.getConnectionState() ?? "disconnected";
|
|
@@ -639,7 +650,7 @@ var q = class {
|
|
|
639
650
|
this.watermark.setConfig({
|
|
640
651
|
text: e,
|
|
641
652
|
...t
|
|
642
|
-
}), this.engine.requestRender(
|
|
653
|
+
}), this.engine.requestRender(d.Background);
|
|
643
654
|
}
|
|
644
655
|
setAutoScale(e) {
|
|
645
656
|
this.options.autoScale = e, this.updateViewportAndRender();
|
|
@@ -648,37 +659,40 @@ var q = class {
|
|
|
648
659
|
return this.options.autoScale !== !1;
|
|
649
660
|
}
|
|
650
661
|
setCrosshairMode(e) {
|
|
651
|
-
this.crosshairHandler.setMode(e), this.engine.requestRender(
|
|
662
|
+
this.crosshairHandler.setMode(e), this.engine.requestRender(d.Overlay);
|
|
652
663
|
}
|
|
653
664
|
getCrosshairMode() {
|
|
654
665
|
return this.crosshairHandler.getMode();
|
|
655
666
|
}
|
|
656
667
|
setGridVisible(e) {
|
|
657
|
-
this.gridRenderer.setVisible(e), this.engine.requestRender(
|
|
668
|
+
this.gridRenderer.setVisible(e), this.engine.requestRender(d.Background);
|
|
658
669
|
}
|
|
659
670
|
isGridVisible() {
|
|
660
671
|
return this.gridRenderer.isVisible();
|
|
661
672
|
}
|
|
662
673
|
setVolumeVisible(e) {
|
|
663
|
-
this.volumeRenderer.setVisible(e), this.engine.requestRender(
|
|
674
|
+
this.volumeRenderer.setVisible(e), this.engine.requestRender(d.Main);
|
|
664
675
|
}
|
|
665
676
|
setTooltipVisible(e) {
|
|
666
677
|
e || this.crosshairTooltip.hide();
|
|
667
678
|
}
|
|
668
679
|
setLegend(e) {
|
|
669
|
-
this.chartLegend.setConfig(e), this.engine.requestRender(
|
|
680
|
+
this.chartLegend.setConfig(e), this.engine.requestRender(d.UI);
|
|
670
681
|
}
|
|
671
682
|
setSymbolName(e) {
|
|
672
|
-
this.chartLegend.setSymbol(e), this.engine.requestRender(
|
|
683
|
+
this.chartLegend.setSymbol(e), this.engine.requestRender(d.UI);
|
|
684
|
+
}
|
|
685
|
+
setStatusText(e) {
|
|
686
|
+
this.chartLegend.setStatusText(e), this.engine.requestRender(d.UI);
|
|
673
687
|
}
|
|
674
688
|
screenshot(e) {
|
|
675
|
-
this.features.screenshot &&
|
|
689
|
+
this.features.screenshot && W.download(this.container, e, this.themeManager.getTheme().background);
|
|
676
690
|
}
|
|
677
691
|
screenshotDataURL() {
|
|
678
|
-
return this.features.screenshot ?
|
|
692
|
+
return this.features.screenshot ? W.toDataURL(this.container, this.themeManager.getTheme().background) : null;
|
|
679
693
|
}
|
|
680
694
|
async screenshotBlob() {
|
|
681
|
-
return this.features.screenshot ?
|
|
695
|
+
return this.features.screenshot ? W.toBlob(this.container, this.themeManager.getTheme().background) : null;
|
|
682
696
|
}
|
|
683
697
|
addAlert(e, t = "crossing", n) {
|
|
684
698
|
if (!this.features.alerts) return null;
|
|
@@ -698,7 +712,7 @@ var q = class {
|
|
|
698
712
|
this.alertManager.saveToStorage(e);
|
|
699
713
|
}
|
|
700
714
|
loadAlerts(e) {
|
|
701
|
-
this.alertManager.loadFromStorage(e), this.engine.requestRender(
|
|
715
|
+
this.alertManager.loadFromStorage(e), this.engine.requestRender(d.Overlay);
|
|
702
716
|
}
|
|
703
717
|
replay(e) {
|
|
704
718
|
if (!this.features.replay) return;
|
|
@@ -731,16 +745,16 @@ var q = class {
|
|
|
731
745
|
}
|
|
732
746
|
saveState(e) {
|
|
733
747
|
if (!this.features.saveLoad) return null;
|
|
734
|
-
let t =
|
|
748
|
+
let t = z.capture({
|
|
735
749
|
getDrawings: () => this.getDrawings(),
|
|
736
750
|
getTheme: () => this.getTheme(),
|
|
737
751
|
getAlerts: () => this.getAlerts()
|
|
738
|
-
}, { chartType: this.options.chartType }), n =
|
|
739
|
-
return e &&
|
|
752
|
+
}, { chartType: this.options.chartType }), n = z.serialize(t);
|
|
753
|
+
return e && z.saveToStorage(e, t), n;
|
|
740
754
|
}
|
|
741
755
|
loadState(e) {
|
|
742
756
|
if (!this.features.saveLoad) return;
|
|
743
|
-
let t =
|
|
757
|
+
let t = z.deserialize(e);
|
|
744
758
|
if (t.chartType && this.setChartType(t.chartType), t.drawings && this.setDrawings(t.drawings), t.theme && this.setTheme(t.theme), t.alerts) {
|
|
745
759
|
this.clearAlerts();
|
|
746
760
|
for (let e of t.alerts) this.addAlert(e.price, e.condition, e.message);
|
|
@@ -748,25 +762,25 @@ var q = class {
|
|
|
748
762
|
}
|
|
749
763
|
loadStateFromStorage(e) {
|
|
750
764
|
if (!this.features.saveLoad) return !1;
|
|
751
|
-
let t =
|
|
752
|
-
return t ? (this.loadState(
|
|
765
|
+
let t = z.loadFromStorage(e);
|
|
766
|
+
return t ? (this.loadState(z.serialize(t)), !0) : !1;
|
|
753
767
|
}
|
|
754
768
|
downloadState(e) {
|
|
755
769
|
if (!this.features.saveLoad) return;
|
|
756
|
-
let t =
|
|
770
|
+
let t = z.capture({
|
|
757
771
|
getDrawings: () => this.getDrawings(),
|
|
758
772
|
getTheme: () => this.getTheme(),
|
|
759
773
|
getAlerts: () => this.getAlerts()
|
|
760
774
|
}, { chartType: this.options.chartType });
|
|
761
|
-
|
|
775
|
+
z.downloadFile(t, e);
|
|
762
776
|
}
|
|
763
777
|
async loadStateFromFile() {
|
|
764
778
|
if (!this.features.saveLoad) return;
|
|
765
|
-
let e = await
|
|
766
|
-
this.loadState(
|
|
779
|
+
let e = await z.loadFromFile();
|
|
780
|
+
this.loadState(z.serialize(e));
|
|
767
781
|
}
|
|
768
782
|
setLocale(e) {
|
|
769
|
-
|
|
783
|
+
S(e), this.engine.requestRender();
|
|
770
784
|
}
|
|
771
785
|
setNumberLocale(e) {
|
|
772
786
|
this.numberLocale = e, this.priceAxis.setLocale(e), this.crosshairHandler.setLocale(e), this.syncRenderContext(), this.engine.requestRender();
|
|
@@ -802,7 +816,7 @@ var q = class {
|
|
|
802
816
|
return this.features;
|
|
803
817
|
}
|
|
804
818
|
setFeatures(e) {
|
|
805
|
-
Object.assign(this.features, e), e.crosshair === !1 && this.crosshairTooltip.hide(), e.grid !== void 0 && this.engine.requestRender(
|
|
819
|
+
Object.assign(this.features, e), e.crosshair === !1 && this.crosshairTooltip.hide(), e.grid !== void 0 && this.engine.requestRender(d.Background), e.volume !== void 0 && (this.volumeRenderer.setVisible(e.volume), this.engine.requestRender(d.Main)), e.drawings === !1 && this.drawingManager.setActiveTool(null), e.trading === !1 && (this.tradingManager.setOrders([]), this.tradingManager.setPositions([])), e.keyboard !== void 0 && this.keyboardHandler?.setEnabled(e.keyboard), this.engine.requestRender();
|
|
806
820
|
}
|
|
807
821
|
resize() {
|
|
808
822
|
let e = this.engine.dprManager.readContainerSize();
|
|
@@ -818,18 +832,18 @@ var q = class {
|
|
|
818
832
|
}
|
|
819
833
|
createChartRenderer(e) {
|
|
820
834
|
switch (e) {
|
|
821
|
-
case "candlestick": return new
|
|
822
|
-
case "heikinAshi": return new
|
|
823
|
-
case "line": return new
|
|
824
|
-
case "area": return new
|
|
825
|
-
case "bar": return new
|
|
826
|
-
case "hollowCandle": return new
|
|
827
|
-
case "baseline": return new
|
|
828
|
-
case "renko": return new
|
|
829
|
-
case "lineBreak": return new
|
|
830
|
-
case "kagi": return new
|
|
831
|
-
case "pointAndFigure": return new
|
|
832
|
-
default: return new
|
|
835
|
+
case "candlestick": return new F();
|
|
836
|
+
case "heikinAshi": return new F();
|
|
837
|
+
case "line": return new Ie();
|
|
838
|
+
case "area": return new O();
|
|
839
|
+
case "bar": return new j();
|
|
840
|
+
case "hollowCandle": return new Ae();
|
|
841
|
+
case "baseline": return new N();
|
|
842
|
+
case "renko": return new He();
|
|
843
|
+
case "lineBreak": return new F();
|
|
844
|
+
case "kagi": return new Ne();
|
|
845
|
+
case "pointAndFigure": return new ze();
|
|
846
|
+
default: return new F();
|
|
833
847
|
}
|
|
834
848
|
}
|
|
835
849
|
getDisplayData() {
|
|
@@ -839,23 +853,23 @@ var q = class {
|
|
|
839
853
|
let t;
|
|
840
854
|
switch (this.options.chartType) {
|
|
841
855
|
case "heikinAshi":
|
|
842
|
-
t =
|
|
856
|
+
t = _t(e);
|
|
843
857
|
break;
|
|
844
858
|
case "renko":
|
|
845
|
-
t =
|
|
859
|
+
t = Tt(e, {
|
|
846
860
|
brickSize: 0,
|
|
847
861
|
useATR: !0,
|
|
848
862
|
atrPeriod: 14
|
|
849
863
|
});
|
|
850
864
|
break;
|
|
851
865
|
case "lineBreak":
|
|
852
|
-
t =
|
|
866
|
+
t = xt(e, 3);
|
|
853
867
|
break;
|
|
854
868
|
case "kagi":
|
|
855
|
-
t =
|
|
869
|
+
t = yt(e, 4);
|
|
856
870
|
break;
|
|
857
871
|
case "pointAndFigure":
|
|
858
|
-
t =
|
|
872
|
+
t = Ct(e, e.reduce((e, t) => e + t.close, 0) / e.length * .01, 3);
|
|
859
873
|
break;
|
|
860
874
|
default: t = e;
|
|
861
875
|
}
|
|
@@ -984,13 +998,13 @@ var q = class {
|
|
|
984
998
|
} : void 0
|
|
985
999
|
} : null;
|
|
986
1000
|
}
|
|
987
|
-
},
|
|
1001
|
+
}, Dt = class extends M {
|
|
988
1002
|
options;
|
|
989
1003
|
constructor(e, t) {
|
|
990
1004
|
super(e, t.theme), this.options = t, this.requestRender();
|
|
991
1005
|
}
|
|
992
1006
|
renderChart(e, t, n, r) {
|
|
993
|
-
|
|
1007
|
+
mt(e, t, n, this.options, r);
|
|
994
1008
|
}
|
|
995
1009
|
update(e) {
|
|
996
1010
|
this.options = {
|
|
@@ -1004,7 +1018,7 @@ var q = class {
|
|
|
1004
1018
|
...e
|
|
1005
1019
|
}, this.requestRender();
|
|
1006
1020
|
}
|
|
1007
|
-
},
|
|
1021
|
+
}, Ot = class extends M {
|
|
1008
1022
|
options;
|
|
1009
1023
|
crosshair = null;
|
|
1010
1024
|
constructor(e, t) {
|
|
@@ -1012,7 +1026,7 @@ var q = class {
|
|
|
1012
1026
|
}
|
|
1013
1027
|
renderChart(e, t, n, r) {
|
|
1014
1028
|
let i = this.crosshair?.getPosition() ?? null;
|
|
1015
|
-
|
|
1029
|
+
ut(e, t, n, this.options, r, i);
|
|
1016
1030
|
}
|
|
1017
1031
|
update(e) {
|
|
1018
1032
|
this.options = {
|
|
@@ -1029,7 +1043,7 @@ var q = class {
|
|
|
1029
1043
|
destroy() {
|
|
1030
1044
|
this.crosshair?.destroy(), super.destroy();
|
|
1031
1045
|
}
|
|
1032
|
-
},
|
|
1046
|
+
}, kt = class extends M {
|
|
1033
1047
|
options;
|
|
1034
1048
|
crosshair = null;
|
|
1035
1049
|
constructor(e, t) {
|
|
@@ -1037,7 +1051,7 @@ var q = class {
|
|
|
1037
1051
|
}
|
|
1038
1052
|
renderChart(e, t, n, r) {
|
|
1039
1053
|
let i = this.crosshair?.getPosition() ?? null;
|
|
1040
|
-
|
|
1054
|
+
dt(e, t, n, this.options, r, i);
|
|
1041
1055
|
}
|
|
1042
1056
|
update(e, t) {
|
|
1043
1057
|
this.options = {
|
|
@@ -1057,7 +1071,7 @@ var q = class {
|
|
|
1057
1071
|
destroy() {
|
|
1058
1072
|
this.crosshair?.destroy(), super.destroy();
|
|
1059
1073
|
}
|
|
1060
|
-
},
|
|
1074
|
+
}, At = class extends M {
|
|
1061
1075
|
options;
|
|
1062
1076
|
crosshair = null;
|
|
1063
1077
|
cachedRects = [];
|
|
@@ -1078,10 +1092,10 @@ var q = class {
|
|
|
1078
1092
|
width: this.width,
|
|
1079
1093
|
height: this.height
|
|
1080
1094
|
}, t = this.options.cellPadding ?? 2;
|
|
1081
|
-
this.lastLayoutWidth = this.width, this.lastLayoutHeight = this.height, this.options.weighted ? this.cachedRects =
|
|
1095
|
+
this.lastLayoutWidth = this.width, this.lastLayoutHeight = this.height, this.options.weighted ? this.cachedRects = st(this.currentData.map((e) => ({
|
|
1082
1096
|
id: e.id,
|
|
1083
1097
|
weight: e.weight ?? (Math.abs(e.value) || 1)
|
|
1084
|
-
})), e, t) : this.cachedRects =
|
|
1098
|
+
})), e, t) : this.cachedRects = ct(this.currentData.map((e) => ({ id: e.id })), e, t);
|
|
1085
1099
|
}
|
|
1086
1100
|
onCanvasClick(e, t) {
|
|
1087
1101
|
if (this.options.onCellClick) for (let n of this.cachedRects) {
|
|
@@ -1096,7 +1110,7 @@ var q = class {
|
|
|
1096
1110
|
renderChart(e, t, n, r) {
|
|
1097
1111
|
(t !== this.lastLayoutWidth || n !== this.lastLayoutHeight) && this.recomputeLayout();
|
|
1098
1112
|
let i = this.crosshair?.getPosition() ?? null;
|
|
1099
|
-
|
|
1113
|
+
pt(e, t, n, this.currentData, this.cachedRects, this.options, r, i);
|
|
1100
1114
|
}
|
|
1101
1115
|
update(e) {
|
|
1102
1116
|
this.currentData = e, this.options = {
|
|
@@ -1113,7 +1127,7 @@ var q = class {
|
|
|
1113
1127
|
destroy() {
|
|
1114
1128
|
this.crosshair?.destroy(), this.handleClick && this.canvas.removeEventListener("click", this.handleClick), super.destroy();
|
|
1115
1129
|
}
|
|
1116
|
-
},
|
|
1130
|
+
}, jt = class extends M {
|
|
1117
1131
|
options;
|
|
1118
1132
|
crosshair = null;
|
|
1119
1133
|
constructor(e, t) {
|
|
@@ -1121,7 +1135,7 @@ var q = class {
|
|
|
1121
1135
|
}
|
|
1122
1136
|
renderChart(e, t, n, r) {
|
|
1123
1137
|
let i = this.crosshair?.getPosition() ?? null;
|
|
1124
|
-
|
|
1138
|
+
ht(e, t, n, this.options, r, i);
|
|
1125
1139
|
}
|
|
1126
1140
|
update(e) {
|
|
1127
1141
|
this.options = {
|
|
@@ -1138,12 +1152,12 @@ var q = class {
|
|
|
1138
1152
|
destroy() {
|
|
1139
1153
|
this.crosshair?.destroy(), super.destroy();
|
|
1140
1154
|
}
|
|
1141
|
-
},
|
|
1142
|
-
function
|
|
1155
|
+
}, Mt = 500;
|
|
1156
|
+
function Nt(e) {
|
|
1143
1157
|
let t = 1 - e;
|
|
1144
1158
|
return 1 - t * t * t;
|
|
1145
1159
|
}
|
|
1146
|
-
var
|
|
1160
|
+
var Pt = class extends M {
|
|
1147
1161
|
options;
|
|
1148
1162
|
currentValue;
|
|
1149
1163
|
targetValue;
|
|
@@ -1154,7 +1168,7 @@ var jt = class extends k {
|
|
|
1154
1168
|
super(e, t.theme), this.options = t, this.currentValue = t.value, this.targetValue = t.value, this.requestRender();
|
|
1155
1169
|
}
|
|
1156
1170
|
renderChart(e, t, n, r) {
|
|
1157
|
-
|
|
1171
|
+
ft(e, t, n, this.options, r, this.currentValue);
|
|
1158
1172
|
}
|
|
1159
1173
|
setValue(e) {
|
|
1160
1174
|
if (this.options.animate === !1) {
|
|
@@ -1184,7 +1198,7 @@ var jt = class extends k {
|
|
|
1184
1198
|
if (this.animationFrameId !== null) return;
|
|
1185
1199
|
let e = () => {
|
|
1186
1200
|
if (this.animationFrameId = null, this.animationStart === null) return;
|
|
1187
|
-
let t = this.options.animationDuration ??
|
|
1201
|
+
let t = this.options.animationDuration ?? Mt, n = performance.now() - this.animationStart, r = Math.min(1, n / Math.max(1, t)), i = Nt(r);
|
|
1188
1202
|
this.currentValue = this.animationFrom + (this.targetValue - this.animationFrom) * i, this.requestRender(), r < 1 ? this.animationFrameId = requestAnimationFrame(e) : (this.currentValue = this.targetValue, this.animationStart = null);
|
|
1189
1203
|
};
|
|
1190
1204
|
this.animationFrameId = requestAnimationFrame(e);
|
|
@@ -1197,6 +1211,6 @@ var jt = class extends k {
|
|
|
1197
1211
|
}
|
|
1198
1212
|
};
|
|
1199
1213
|
//#endregion
|
|
1200
|
-
export {
|
|
1214
|
+
export { w as AlertManager, E as Animator, k as BarCountdown, P as BinanceAdapter, Et as Chart, I as ChartLegend, R as ChartStateManager, he as CompareRenderer, ve as CrosshairTooltip, be as CurrentPriceLine, e as DARK_TERMINAL, t as DARK_THEME, r as DEFAULT_DRAWING_STYLE, Se as DEFAULT_LEGEND_CONFIG, a as DEFAULT_RECONNECT, o as DEFAULT_STREAM_CONFIG, s as DEFAULT_TIMEFRAME_FAVORITES, c as DEFAULT_TRADING_CONFIG, Ce as DataExporter, J as DataManager, Ot as DepthChart, we as DrawingBase, De as Easing, kt as EquityCurveChart, Pt as GaugeChart, At as HeatmapChart, je as IndicatorBase, Pe as KeyboardHandler, l as LIGHT_THEME, Q as LayoutManager, f as MARKET_CRYPTO, ee as MARKET_HNX, p as MARKET_HOSE, m as MARKET_NYSE, h as MARKET_UPCOM, Le as MockAdapter, $ as PluginManager, Ue as ReplayManager, We as Screenshot, Ge as SessionBreaks, Dt as SparklineChart, qe as StreamManager, te as TIMEFRAMES_CRYPTO, ne as TIMEFRAMES_FOREX, re as TIMEFRAMES_STOCK, Y as ThemeManager, Ye as TickAggregator, $e as UndoRedoManager, ie as VN_COLORS, nt as VolumeRenderer, jt as WaterfallChart, it as Watermark, ae as computePriceLimits, oe as createVNTheme, se as formatNumber, ce as formatVND, le as formatVolumeLoc, ue as getCurrentSession, de as getLocale, pe as normalizeBar, me as normalizeBarTime, b as registerLocale, x as setLocale, C as t, gt as toHeikinAshi, vt as toKagi, bt as toLineBreak, St as toPointAndFigure, wt as toRenko };
|
|
1201
1215
|
|
|
1202
1216
|
//# sourceMappingURL=index.js.map
|