@tradecanvas/chart 1.82.0 → 1.83.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.
Files changed (111) hide show
  1. package/dist/LayoutSession-B4qMfaP7.cjs +2 -0
  2. package/dist/LayoutSession-B4qMfaP7.cjs.map +1 -0
  3. package/dist/{LayoutSession-CLlUszTA.js → LayoutSession-BoiToS9y.js} +617 -379
  4. package/dist/LayoutSession-BoiToS9y.js.map +1 -0
  5. package/dist/{WidgetCommandPalette-p4DQCe57.js → WidgetCommandPalette-DHGvEl9n.js} +2 -2
  6. package/dist/{WidgetCommandPalette-p4DQCe57.js.map → WidgetCommandPalette-DHGvEl9n.js.map} +1 -1
  7. package/dist/{WidgetCommandPalette-BNBL1mO2.cjs → WidgetCommandPalette-Ol8Z923q.cjs} +2 -2
  8. package/dist/{WidgetCommandPalette-BNBL1mO2.cjs.map → WidgetCommandPalette-Ol8Z923q.cjs.map} +1 -1
  9. package/dist/{WidgetDrawingSettings-D7l2NkVj.js → WidgetDrawingSettings-CSB88SvC.js} +2 -2
  10. package/dist/{WidgetDrawingSettings-D7l2NkVj.js.map → WidgetDrawingSettings-CSB88SvC.js.map} +1 -1
  11. package/dist/{WidgetDrawingSettings-BqGuAMz3.cjs → WidgetDrawingSettings-XL1Z9-ly.cjs} +2 -2
  12. package/dist/{WidgetDrawingSettings-BqGuAMz3.cjs.map → WidgetDrawingSettings-XL1Z9-ly.cjs.map} +1 -1
  13. package/dist/{WidgetIndicatorPicker-BOxIKUn-.cjs → WidgetIndicatorPicker-K01RJSLs.cjs} +2 -2
  14. package/dist/{WidgetIndicatorPicker-BOxIKUn-.cjs.map → WidgetIndicatorPicker-K01RJSLs.cjs.map} +1 -1
  15. package/dist/{WidgetIndicatorPicker-Bk0y6c35.js → WidgetIndicatorPicker-a4rpptDc.js} +2 -2
  16. package/dist/{WidgetIndicatorPicker-Bk0y6c35.js.map → WidgetIndicatorPicker-a4rpptDc.js.map} +1 -1
  17. package/dist/{WidgetIndicatorSettings-BmOqq2Fv.js → WidgetIndicatorSettings-BmIFp19I.js} +3 -3
  18. package/dist/{WidgetIndicatorSettings-BmOqq2Fv.js.map → WidgetIndicatorSettings-BmIFp19I.js.map} +1 -1
  19. package/dist/{WidgetIndicatorSettings-DrPcNSxS.cjs → WidgetIndicatorSettings-CJWR-x9q.cjs} +2 -2
  20. package/dist/{WidgetIndicatorSettings-DrPcNSxS.cjs.map → WidgetIndicatorSettings-CJWR-x9q.cjs.map} +1 -1
  21. package/dist/{WidgetSettings-C6m55YF0.js → WidgetSettings-9clgY3_1.js} +2 -2
  22. package/dist/{WidgetSettings-C6m55YF0.js.map → WidgetSettings-9clgY3_1.js.map} +1 -1
  23. package/dist/{WidgetSettings-B57_tUke.cjs → WidgetSettings-D6COgRaB.cjs} +2 -2
  24. package/dist/{WidgetSettings-B57_tUke.cjs.map → WidgetSettings-D6COgRaB.cjs.map} +1 -1
  25. package/dist/{WidgetSymbolSearch-8HMKUv2P.cjs → WidgetSymbolSearch-6EB31v-O.cjs} +2 -2
  26. package/dist/{WidgetSymbolSearch-8HMKUv2P.cjs.map → WidgetSymbolSearch-6EB31v-O.cjs.map} +1 -1
  27. package/dist/{WidgetSymbolSearch-BdI1egoq.js → WidgetSymbolSearch-DToOqJoG.js} +2 -2
  28. package/dist/{WidgetSymbolSearch-BdI1egoq.js.map → WidgetSymbolSearch-DToOqJoG.js.map} +1 -1
  29. package/dist/grid/ChartGrid.d.ts +9 -1
  30. package/dist/grid/ChartGrid.d.ts.map +1 -1
  31. package/dist/grid/gridShapes.d.ts +43 -0
  32. package/dist/grid/gridShapes.d.ts.map +1 -0
  33. package/dist/i18n-D0SPfH2s.cjs +2 -0
  34. package/dist/i18n-D0SPfH2s.cjs.map +1 -0
  35. package/dist/{i18n-BMzvClhl.js → i18n-nWmX3G55.js} +11 -1
  36. package/dist/i18n-nWmX3G55.js.map +1 -0
  37. package/dist/index.cjs +1 -1
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +155 -179
  42. package/dist/index.js.map +1 -1
  43. package/dist/{indicatorInputWords-Dn_gEPug.js → indicatorInputWords-D0SGBaUD.js} +2 -2
  44. package/dist/{indicatorInputWords-Dn_gEPug.js.map → indicatorInputWords-D0SGBaUD.js.map} +1 -1
  45. package/dist/{indicatorInputWords-DGObUFDn.cjs → indicatorInputWords-HqTGFokF.cjs} +2 -2
  46. package/dist/{indicatorInputWords-DGObUFDn.cjs.map → indicatorInputWords-HqTGFokF.cjs.map} +1 -1
  47. package/dist/widget/ChartWidget.d.ts +2 -0
  48. package/dist/widget/ChartWidget.d.ts.map +1 -1
  49. package/dist/widget/ChartWidgetGrid.d.ts +7 -10
  50. package/dist/widget/ChartWidgetGrid.d.ts.map +1 -1
  51. package/dist/widget/GridLayoutPicker.d.ts +55 -0
  52. package/dist/widget/GridLayoutPicker.d.ts.map +1 -0
  53. package/dist/widget/WatchlistStore.d.ts +11 -0
  54. package/dist/widget/WatchlistStore.d.ts.map +1 -1
  55. package/dist/widget/WidgetDockArea.d.ts +1 -0
  56. package/dist/widget/WidgetDockArea.d.ts.map +1 -1
  57. package/dist/widget/WidgetToolbar.d.ts.map +1 -1
  58. package/dist/widget/WidgetWatchlist.d.ts +3 -0
  59. package/dist/widget/WidgetWatchlist.d.ts.map +1 -1
  60. package/dist/widget/WidgetWatchlists.d.ts +1 -0
  61. package/dist/widget/WidgetWatchlists.d.ts.map +1 -1
  62. package/dist/widget/index.cjs +50 -4
  63. package/dist/widget/index.cjs.map +1 -1
  64. package/dist/widget/index.d.ts +1 -0
  65. package/dist/widget/index.d.ts.map +1 -1
  66. package/dist/widget/index.js +1662 -1532
  67. package/dist/widget/index.js.map +1 -1
  68. package/dist/widget/locales/ar.d.ts.map +1 -1
  69. package/dist/widget/locales/cs.d.ts.map +1 -1
  70. package/dist/widget/locales/da.d.ts.map +1 -1
  71. package/dist/widget/locales/de.d.ts.map +1 -1
  72. package/dist/widget/locales/el.d.ts.map +1 -1
  73. package/dist/widget/locales/en.d.ts +5 -0
  74. package/dist/widget/locales/en.d.ts.map +1 -1
  75. package/dist/widget/locales/es.d.ts.map +1 -1
  76. package/dist/widget/locales/et.d.ts.map +1 -1
  77. package/dist/widget/locales/fa.d.ts.map +1 -1
  78. package/dist/widget/locales/fr.d.ts.map +1 -1
  79. package/dist/widget/locales/he.d.ts.map +1 -1
  80. package/dist/widget/locales/hu.d.ts.map +1 -1
  81. package/dist/widget/locales/id.d.ts.map +1 -1
  82. package/dist/widget/locales/index.cjs +1 -1
  83. package/dist/widget/locales/index.cjs.map +1 -1
  84. package/dist/widget/locales/index.js +141 -1
  85. package/dist/widget/locales/index.js.map +1 -1
  86. package/dist/widget/locales/it.d.ts.map +1 -1
  87. package/dist/widget/locales/ja.d.ts.map +1 -1
  88. package/dist/widget/locales/ko.d.ts.map +1 -1
  89. package/dist/widget/locales/ms.d.ts.map +1 -1
  90. package/dist/widget/locales/nb.d.ts.map +1 -1
  91. package/dist/widget/locales/nl.d.ts.map +1 -1
  92. package/dist/widget/locales/pl.d.ts.map +1 -1
  93. package/dist/widget/locales/pt.d.ts.map +1 -1
  94. package/dist/widget/locales/ro.d.ts.map +1 -1
  95. package/dist/widget/locales/ru.d.ts.map +1 -1
  96. package/dist/widget/locales/sk.d.ts.map +1 -1
  97. package/dist/widget/locales/sv.d.ts.map +1 -1
  98. package/dist/widget/locales/th.d.ts.map +1 -1
  99. package/dist/widget/locales/tr.d.ts.map +1 -1
  100. package/dist/widget/locales/vi.d.ts.map +1 -1
  101. package/dist/widget/locales/zh.d.ts.map +1 -1
  102. package/dist/widget/locales/zhHant.d.ts.map +1 -1
  103. package/dist/widget/types.d.ts +7 -1
  104. package/dist/widget/types.d.ts.map +1 -1
  105. package/package.json +3 -3
  106. package/dist/LayoutSession-CLlUszTA.js.map +0 -1
  107. package/dist/LayoutSession-Cs8SJ1LU.cjs +0 -2
  108. package/dist/LayoutSession-Cs8SJ1LU.cjs.map +0 -1
  109. package/dist/i18n-BMzvClhl.js.map +0 -1
  110. package/dist/i18n-Dq-eMISy.cjs +0 -2
  111. package/dist/i18n-Dq-eMISy.cjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { C as e, D as t, E as n, S as r, T as i, _ as a, a as o, b as s, c, g as l, h as u, i as ee, l as te, m as ne, n as re, o as ie, p as ae, r as oe, s as se, t as ce, u as le, v as ue, w as de, x as fe, y as pe } from "./LayoutSession-CLlUszTA.js";
2
- import { CHART_STYLE_KEYS as me, DARK_PRICE_LIMITS as he, DARK_TERMINAL as ge, DARK_THEME as _e, DARK_THEME as ve, DEFAULT_DRAWING_STYLE as ye, DEFAULT_FONT_FAMILY as be, DEFAULT_RECONNECT as xe, DEFAULT_SIGNAL_STYLE as Se, DEFAULT_STREAM_CONFIG as Ce, DEFAULT_TIMEFRAME_FAVORITES as we, DEFAULT_TRADE_ZONE_STYLE as Te, DEFAULT_TRADING_CONFIG as Ee, HNX_SESSIONS as De, HOSE_SESSIONS as Oe, KRX_SESSIONS as ke, KR_COLORS as Ae, LIGHT_PRICE_LIMITS as je, LIGHT_THEME as Me, LIGHT_THEME as Ne, MARKET_CRYPTO as Pe, MARKET_HNX as Fe, MARKET_HOSE as Ie, MARKET_HOSE_ETF as Le, MARKET_KRX as Re, MARKET_NXT as d, MARKET_NYSE as f, MARKET_UPBIT_KRW as p, MARKET_UPCOM as m, MARKET_VN30F as h, MS_TIME_THRESHOLD as ze, NXT_SESSIONS as Be, PRICE_SOURCES as Ve, SANS_FONT_FAMILY as He, TC_PALETTE as Ue, TC_SERIES_COLORS as We, TIMEFRAMES_CRYPTO as Ge, TIMEFRAMES_FOREX as Ke, TIMEFRAMES_STOCK as qe, UPCOM_SESSIONS as Je, VN30F_SESSIONS as Ye, VN_COLORS as Xe, VOLUME_ALPHA as Ze, barTimeUnit as Qe, barsAreDaily as $e, computePriceLimits as et, contrastRatio as tt, createMarketTheme as nt, createVNTheme as rt, formatFraction as it, formatNumber as at, formatVND as ot, formatVolumeLoc as st, fractionTick as ct, getCurrentSession as lt, getLocale as ut, indicatorSource as dt, inkOn as ft, isPriceSource as pt, isTimeFrame as mt, isValidTimeZone as ht, marketStatus as gt, normalizeBar as _t, normalizeBarTime as vt, offsetAt as yt, parseIndicatorSource as bt, parseTimeframe as xt, pickBaseTimeframe as St, priceFormatterFor as Ct, priceStepAt as wt, rankSymbols as Tt, readNews as Et, readQuote as Dt, readableOn as Ot, registerLocale as kt, resampleBars as At, roundToPriceStep as jt, scaleMarketPrices as Mt, setLocale as Nt, sourcePrice as Pt, stepDecimals as Ft, symbolTimeZone as It, t as Lt, tickBarCount as Rt, tickerOf as zt, timeframeBucketStart as Bt, timeframeBucketStart as Vt, timeframeToMs as Ht, usesKoreanUnits as Ut, vn30fContracts as Wt, vn30fLastTradingDay as Gt, volumeColor as Kt, wallToUtc as qt, zoneOffsetMinutes as Jt } from "@tradecanvas/commons";
3
- import { AlertManager as Yt, Animator as Xt, BarCountdown as Zt, BaseFinanceChart as g, BinanceAdapter as Qt, BybitAdapter as $t, CANDLE_PATTERNS as en, ChartLegend as tn, ChartStateManager as nn, CoinbaseAdapter as rn, CompareRenderer as an, CrosshairTooltip as on, CurrentPriceLine as sn, DEFAULT_LEGEND_CONFIG as cn, DEFAULT_MAX_WEBGL_CHARTS as ln, DEFAULT_SESSION_HOURS as un, DataExporter as dn, DrawingBase as fn, Easing as pn, FinanceCrosshair as _, GROUP_HEADER as mn, INDICATOR_CATEGORIES as hn, IndicatorBase as gn, IndicatorValueMap as _n, KEPT_BUCKETS as vn, KeyboardHandler as yn, KrakenAdapter as bn, MAX_ALERT_BARS as xn, MIN_ALERT_BARS as Sn, ManualFeed as Cn, MockAdapter as wn, PaperExecutionAdapter as Tn, PollingAdapter as En, RANGE_PRESETS as Dn, ReconnectManager as On, ReplayController as kn, ReplayManager as An, ResamplingAdapter as jn, ReshapeMemo as Mn, Screenshot as Nn, SessionBreaks as Pn, SessionShading as Fn, SignalMarkerManager as In, StreamManager as Ln, TickAggregator as Rn, TickBarAdapter as zn, TickBarBuilder as Bn, TradeZoneManager as Vn, UndoRedoManager as Hn, UpbitAdapter as v, VolumeRenderer as Un, Watermark as Wn, WebSocketAdapter as Gn, adapterFromFeed as Kn, axisTimes as qn, barIndexToTime as Jn, barIndexToX as Yn, barIndexToX as y, canvasMeasure as Xn, computeBarLayout as Zn, computeCalendarLayout as Qn, computeCounterClockLayout as $n, computeDonutLayout as er, computeHistogramLayout as tr, computeMatrixLayout as nr, computeScatterLayout as rr, correlationMatrix as ir, counterClockPhase as ar, counterClockPhase as or, counterClockPoints as sr, counterClockPoints as cr, describeInputs as lr, detectCandlePatterns as ur, feedFromAdapter as dr, formatTooltipTime as fr, histogramBins as pr, hitBar as b, hitDay as x, hitMatrixCell as S, hitSlice as C, indicatorCategory as mr, isDataFeed as hr, isDataFeed as gr, isPriceLevelAlert as _r, layoutGroupedTreemap as vr, layoutSquarifiedTreemap as yr, layoutUniformGrid as br, lttbDownsample as xr, lttbVisibleIndices as Sr, nearestCounterClockPoint as w, nearestPoint as T, niceScale as Cr, priceToY as wr, priceToYMapper as Tr, priceToYMapper as Er, rangePresetStart as Dr, renderBarChart as Or, renderCalendar as kr, renderCounterClock as Ar, renderDepthChart as jr, renderDonut as Mr, renderEquityCurve as Nr, renderGauge as Pr, renderHeatmap as Fr, renderHistogram as Ir, renderMatrix as Lr, renderScatter as Rr, renderSparkline as zr, renderWaterfall as Br, servesTimeframe as Vr, setMaxWebGLCharts as Hr, shownCount as Ur, timeToX as Wr, timestampToBarIndex as Gr, timestampToBarIndex as Kr, toHeikinAshi as qr, toKagi as Jr, toLineBreak as Yr, toPointAndFigure as Xr, toRangeBars as Zr, toRenko as Qr, withResampling as $r, withTickBars as ei, xToBarIndex as ti, xToBarIndex as E, xToTime as ni, yToPrice as ri, yToPrice as ii } from "@tradecanvas/core";
1
+ import { A as e, C as t, D as n, E as r, M as i, N as a, O as o, P as s, S as c, T as l, _ as u, a as ee, b as te, c as ne, d, f as re, g as ie, h as f, i as ae, j as oe, k as se, l as p, m as ce, n as le, p as ue, r as de, s as m, t as fe, w as pe, x as me } from "./LayoutSession-BoiToS9y.js";
2
+ import { CHART_STYLE_KEYS as he, DARK_PRICE_LIMITS as ge, DARK_TERMINAL as _e, DARK_THEME as ve, DARK_THEME as ye, DEFAULT_DRAWING_STYLE as be, DEFAULT_FONT_FAMILY as xe, DEFAULT_RECONNECT as Se, DEFAULT_SIGNAL_STYLE as Ce, DEFAULT_STREAM_CONFIG as we, DEFAULT_TIMEFRAME_FAVORITES as Te, DEFAULT_TRADE_ZONE_STYLE as Ee, DEFAULT_TRADING_CONFIG as De, HNX_SESSIONS as Oe, HOSE_SESSIONS as ke, KRX_SESSIONS as Ae, KR_COLORS as je, LIGHT_PRICE_LIMITS as Me, LIGHT_THEME as Ne, LIGHT_THEME as Pe, MARKET_CRYPTO as Fe, MARKET_HNX as Ie, MARKET_HOSE as Le, MARKET_HOSE_ETF as h, MARKET_KRX as g, MARKET_NXT as Re, MARKET_NYSE as ze, MARKET_UPBIT_KRW as Be, MARKET_UPCOM as Ve, MARKET_VN30F as He, MS_TIME_THRESHOLD as Ue, NXT_SESSIONS as We, PRICE_SOURCES as Ge, SANS_FONT_FAMILY as Ke, TC_PALETTE as qe, TC_SERIES_COLORS as Je, TIMEFRAMES_CRYPTO as Ye, TIMEFRAMES_FOREX as Xe, TIMEFRAMES_STOCK as Ze, UPCOM_SESSIONS as Qe, VN30F_SESSIONS as $e, VN_COLORS as et, VOLUME_ALPHA as tt, barTimeUnit as nt, barsAreDaily as rt, computePriceLimits as it, contrastRatio as at, createMarketTheme as ot, createVNTheme as st, formatFraction as ct, formatNumber as lt, formatVND as ut, formatVolumeLoc as dt, fractionTick as ft, getCurrentSession as pt, getLocale as mt, indicatorSource as ht, inkOn as gt, isPriceSource as _t, isTimeFrame as vt, isValidTimeZone as yt, marketStatus as bt, normalizeBar as xt, normalizeBarTime as St, offsetAt as Ct, parseIndicatorSource as wt, parseTimeframe as Tt, pickBaseTimeframe as Et, priceFormatterFor as Dt, priceStepAt as Ot, rankSymbols as kt, readNews as At, readQuote as jt, readableOn as Mt, registerLocale as Nt, resampleBars as Pt, roundToPriceStep as Ft, scaleMarketPrices as It, setLocale as Lt, sourcePrice as Rt, stepDecimals as zt, symbolTimeZone as Bt, t as Vt, tickBarCount as Ht, tickerOf as Ut, timeframeBucketStart as Wt, timeframeBucketStart as Gt, timeframeToMs as Kt, usesKoreanUnits as qt, vn30fContracts as Jt, vn30fLastTradingDay as Yt, volumeColor as Xt, wallToUtc as Zt, zoneOffsetMinutes as Qt } from "@tradecanvas/commons";
3
+ import { AlertManager as $t, Animator as en, BarCountdown as tn, BaseFinanceChart as _, BinanceAdapter as nn, BybitAdapter as rn, CANDLE_PATTERNS as an, ChartLegend as on, ChartStateManager as sn, CoinbaseAdapter as cn, CompareRenderer as ln, CrosshairTooltip as un, CurrentPriceLine as dn, DEFAULT_LEGEND_CONFIG as fn, DEFAULT_MAX_WEBGL_CHARTS as pn, DEFAULT_SESSION_HOURS as mn, DataExporter as hn, DrawingBase as gn, Easing as _n, FinanceCrosshair as v, GROUP_HEADER as vn, INDICATOR_CATEGORIES as yn, IndicatorBase as bn, IndicatorValueMap as xn, KEPT_BUCKETS as Sn, KeyboardHandler as Cn, KrakenAdapter as wn, MAX_ALERT_BARS as Tn, MIN_ALERT_BARS as En, ManualFeed as Dn, MockAdapter as On, PaperExecutionAdapter as kn, PollingAdapter as An, RANGE_PRESETS as jn, ReconnectManager as Mn, ReplayController as Nn, ReplayManager as Pn, ResamplingAdapter as Fn, ReshapeMemo as In, Screenshot as Ln, SessionBreaks as Rn, SessionShading as zn, SignalMarkerManager as Bn, StreamManager as Vn, TickAggregator as Hn, TickBarAdapter as Un, TickBarBuilder as Wn, TradeZoneManager as Gn, UndoRedoManager as y, UpbitAdapter as Kn, VolumeRenderer as qn, Watermark as Jn, WebSocketAdapter as Yn, adapterFromFeed as Xn, axisTimes as Zn, barIndexToTime as Qn, barIndexToX as $n, barIndexToX as b, canvasMeasure as er, computeBarLayout as tr, computeCalendarLayout as nr, computeCounterClockLayout as rr, computeDonutLayout as ir, computeHistogramLayout as ar, computeMatrixLayout as or, computeScatterLayout as sr, correlationMatrix as cr, counterClockPhase as lr, counterClockPhase as ur, counterClockPoints as dr, counterClockPoints as fr, describeInputs as pr, detectCandlePatterns as mr, feedFromAdapter as hr, formatTooltipTime as gr, histogramBins as _r, hitBar as x, hitDay as S, hitMatrixCell as C, hitSlice as w, indicatorCategory as vr, isDataFeed as yr, isDataFeed as br, isPriceLevelAlert as xr, layoutGroupedTreemap as Sr, layoutSquarifiedTreemap as Cr, layoutUniformGrid as wr, lttbDownsample as Tr, lttbVisibleIndices as Er, nearestCounterClockPoint as T, nearestPoint as E, niceScale as Dr, priceToY as Or, priceToYMapper as kr, priceToYMapper as Ar, rangePresetStart as jr, renderBarChart as Mr, renderCalendar as Nr, renderCounterClock as Pr, renderDepthChart as Fr, renderDonut as Ir, renderEquityCurve as Lr, renderGauge as Rr, renderHeatmap as zr, renderHistogram as Br, renderMatrix as Vr, renderScatter as Hr, renderSparkline as Ur, renderWaterfall as Wr, servesTimeframe as Gr, setMaxWebGLCharts as Kr, shownCount as qr, timeToX as Jr, timestampToBarIndex as Yr, timestampToBarIndex as Xr, toHeikinAshi as Zr, toKagi as Qr, toLineBreak as $r, toPointAndFigure as ei, toRangeBars as ti, toRenko as ni, withResampling as ri, withTickBars as ii, xToBarIndex as ai, xToBarIndex as D, xToTime as oi, yToPrice as si, yToPrice as ci } from "@tradecanvas/core";
4
4
  //#region src/frameworks/syncIndicators.ts
5
- function ai(e) {
5
+ function li(e) {
6
6
  let { id: t, params: n = {}, position: r = null } = typeof e == "string" ? { id: e } : e;
7
7
  return JSON.stringify([
8
8
  t,
@@ -10,9 +10,9 @@ function ai(e) {
10
10
  r
11
11
  ]);
12
12
  }
13
- function oi(e, t, n) {
13
+ function ui(e, t, n) {
14
14
  let r = /* @__PURE__ */ new Map(), i = t.map((e) => {
15
- let t = ai(e), n = r.get(t) ?? 0;
15
+ let t = li(e), n = r.get(t) ?? 0;
16
16
  return r.set(t, n + 1), {
17
17
  spec: e,
18
18
  key: `${t}#${n}`
@@ -27,123 +27,123 @@ function oi(e, t, n) {
27
27
  }
28
28
  //#endregion
29
29
  //#region src/frameworks/feedBars.ts
30
- var si = 3, D = (e) => ({
30
+ var di = 3, O = (e) => ({
31
31
  time: e.time,
32
32
  open: e.open,
33
33
  high: e.high,
34
34
  low: e.low,
35
35
  close: e.close,
36
36
  volume: e.volume
37
- }), O = (e) => e.length > 0 ? e[e.length - 1] : null;
38
- function ci(e, n, r) {
39
- for (let i = 0; i < r; i++) if (!t(e[i], n[i])) return !1;
37
+ }), k = (e) => e.length > 0 ? e[e.length - 1] : null;
38
+ function fi(e, t, n) {
39
+ for (let r = 0; r < n; r++) if (!s(e[r], t[r])) return !1;
40
40
  return !0;
41
41
  }
42
- function li(e, t) {
42
+ function pi(e, t) {
43
43
  if (e.isReplayActive()) return !0;
44
- let n = O(e.getData());
44
+ let n = k(e.getData());
45
45
  return t.inReplay ? n?.time === t.last?.time : n === t.shownBar ? n?.time === t.last?.time || !e.isExtendedHoursVisible() : !1;
46
46
  }
47
- function ui(e, r, i) {
48
- let a = [];
49
- for (let o = 0; o < r.length; o++) {
50
- let s = e[i + o];
51
- if (!t(s, r[o])) {
52
- if (s.time !== r[o].time || !n(s)) return null;
53
- a.push(D(s));
47
+ function mi(e, t, n) {
48
+ let r = [];
49
+ for (let i = 0; i < t.length; i++) {
50
+ let o = e[n + i];
51
+ if (!s(o, t[i])) {
52
+ if (o.time !== t[i].time || !a(o)) return null;
53
+ r.push(O(o));
54
54
  }
55
55
  }
56
- return a;
56
+ return r;
57
57
  }
58
- function di(e, t) {
58
+ function hi(e, t) {
59
59
  if (t.length === 0) return !0;
60
60
  if (!e.updateBar) return !1;
61
61
  for (let n of t) if (!e.updateBar(n)) return !1;
62
62
  return !0;
63
63
  }
64
- function fi(e) {
65
- return e.slice(Math.max(1, e.length - 1 - 3), -1).map(D);
64
+ function gi(e) {
65
+ return e.slice(Math.max(1, e.length - 1 - 3), -1).map(O);
66
66
  }
67
- function pi(e, t) {
68
- let r = [];
69
- for (let i = t; i < e.length; i++) {
70
- if (!n(e[i]) || !(e[i].time > e[i - 1].time)) return null;
71
- r.push(D(e[i]));
67
+ function _i(e, t) {
68
+ let n = [];
69
+ for (let r = t; r < e.length; r++) {
70
+ if (!a(e[r]) || !(e[r].time > e[r - 1].time)) return null;
71
+ n.push(O(e[r]));
72
72
  }
73
- return r;
73
+ return n;
74
74
  }
75
- function mi(e, r, i) {
76
- let a = i.length;
77
- if (a === 0 || !i.last || !n(i.last) || r.length < a || !li(e, i)) return !1;
78
- let o = i.recent ?? [], s = a - 1 - o.length;
79
- if (r !== i.source && (i.source.length !== a || !ci(i.source, r, s))) return !1;
80
- let c = r[a - 1];
81
- if (c.time !== i.last.time || !n(c)) return !1;
82
- let l = ui(r, o, s), u = pi(r, a);
83
- return !l || !u || !di(e, l) ? !1 : (t(c, i.last) || e.updateLastBar(D(c)), u.length === 1 ? e.appendBar(u[0]) : u.length > 1 && e.appendBars(u), !0);
75
+ function vi(e, t, n) {
76
+ let r = n.length;
77
+ if (r === 0 || !n.last || !a(n.last) || t.length < r || !pi(e, n)) return !1;
78
+ let i = n.recent ?? [], o = r - 1 - i.length;
79
+ if (t !== n.source && (n.source.length !== r || !fi(n.source, t, o))) return !1;
80
+ let c = t[r - 1];
81
+ if (c.time !== n.last.time || !a(c)) return !1;
82
+ let l = mi(t, i, o), u = _i(t, r);
83
+ return !l || !u || !hi(e, l) ? !1 : (s(c, n.last) || e.updateLastBar(O(c)), u.length === 1 ? e.appendBar(u[0]) : u.length > 1 && e.appendBars(u), !0);
84
84
  }
85
- function hi(e, t, n) {
86
- (!n || !mi(e, t, n)) && e.setData(t.map(D));
87
- let r = t.length > 0 ? D(t[t.length - 1]) : null, i = e.isReplayActive();
85
+ function yi(e, t, n) {
86
+ (!n || !vi(e, t, n)) && e.setData(t.map(O));
87
+ let r = t.length > 0 ? O(t[t.length - 1]) : null, i = e.isReplayActive();
88
88
  return {
89
89
  source: t,
90
90
  length: t.length,
91
91
  last: r,
92
- recent: fi(t),
93
- shownBar: i ? null : O(e.getData()),
92
+ recent: gi(t),
93
+ shownBar: i ? null : k(e.getData()),
94
94
  inReplay: i
95
95
  };
96
96
  }
97
97
  //#endregion
98
98
  //#region src/brand/poweredBy.ts
99
- var k = "https://tradecanvas.dev", A = "Powered by TradeCanvas", j = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M186 70A82 82 0 1 0 186 186\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"22\" stroke-linecap=\"round\"/><rect x=\"92\" y=\"74\" width=\"72\" height=\"20\" rx=\"10\" fill=\"currentColor\"/><path fill=\"#E8961E\" d=\"M119 94H137V108H144a10 10 0 0 1 10 10V164a10 10 0 0 1-10 10H137V190H119V174H112a10 10 0 0 1-10-10V118a10 10 0 0 1 10-10H119Z\"/></svg>", M = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 16 686 88\" aria-hidden=\"true\" focusable=\"false\"><path fill=\"currentColor\" transform=\"translate(0 101.64)\" d=\"M27.24 0.00L27.24 -69.72L1.32 -69.72L1.32 -83.64L68.76 -83.64L68.76 -69.72L42.96 -69.72L42.96 0.00ZM70.90 0.00L70.90 -59.16L85.90 -59.16L85.90 -50.64Q86.26 -51.36 86.74 -51.96Q89.50 -55.92 93.52 -58.14Q97.54 -60.36 101.74 -60.36Q104.74 -60.36 107.44 -59.58Q110.14 -58.80 113.02 -57.00L105.82 -43.56Q104.50 -44.28 102.46 -44.88Q100.42 -45.48 98.38 -45.48Q95.98 -45.48 93.76 -44.64Q91.54 -43.80 89.80 -42.00Q88.06 -40.20 86.98 -37.20Q86.50 -35.52 86.20 -32.94Q85.90 -30.36 85.90 -25.44L85.90 0.00ZM156.44 0.00L155.36 -7.56Q155.00 -6.96 154.52 -6.36Q151.28 -2.40 147.20 -0.60Q143.12 1.20 138.56 1.20Q132.08 1.20 126.98 -1.20Q121.88 -3.60 118.94 -8.04Q116.00 -12.48 116.00 -18.24Q116.00 -23.40 118.10 -27.06Q120.20 -30.72 123.68 -32.64Q126.68 -34.44 130.34 -35.16Q134.00 -35.88 138.20 -35.88L155.24 -35.88L155.24 -37.32Q155.24 -42.60 151.94 -45.18Q148.64 -47.76 143.00 -47.76Q138.32 -47.76 133.46 -45.90Q128.60 -44.04 124.88 -40.68L117.32 -50.88Q123.56 -55.92 130.10 -58.14Q136.64 -60.36 144.20 -60.36Q156.44 -60.36 163.28 -54.24Q170.12 -48.12 170.12 -37.32L170.12 0.00ZM155.24 -24.84L140.36 -24.84Q138.44 -24.84 136.58 -24.54Q134.72 -24.24 133.40 -23.16Q132.20 -22.32 131.60 -21.06Q131.00 -19.80 131.00 -18.24Q131.00 -14.88 133.64 -12.84Q136.28 -10.80 140.72 -10.80Q144.68 -10.80 147.98 -12.54Q151.28 -14.28 153.26 -17.34Q155.24 -20.40 155.24 -24.36ZM202.98 1.20Q195.18 1.20 189.54 -2.82Q183.90 -6.84 180.84 -13.86Q177.78 -20.88 177.78 -29.64Q177.78 -39.36 181.20 -46.20Q184.62 -53.04 190.38 -56.70Q196.14 -60.36 202.98 -60.36Q207.78 -60.36 211.92 -58.38Q216.06 -56.40 219.06 -52.44Q219.54 -51.72 220.02 -51.00L220.02 -83.64L234.78 -83.64L234.78 0.00L220.02 0.00L220.02 -8.04Q219.54 -7.20 218.94 -6.48Q215.70 -2.28 211.56 -0.54Q207.42 1.20 202.98 1.20ZM207.06 -12.48Q211.50 -12.48 214.68 -14.64Q217.86 -16.80 219.60 -20.64Q221.34 -24.48 221.34 -29.64Q221.34 -34.80 219.60 -38.64Q217.86 -42.48 214.68 -44.58Q211.50 -46.68 207.06 -46.68Q202.74 -46.68 199.50 -44.58Q196.26 -42.48 194.52 -38.70Q192.78 -34.92 192.78 -29.64Q192.78 -24.36 194.52 -20.52Q196.26 -16.68 199.50 -14.58Q202.74 -12.48 207.06 -12.48ZM272.32 1.20Q264.64 1.20 259.12 -1.32Q253.60 -3.84 250.06 -8.10Q246.52 -12.36 244.84 -17.82Q243.16 -23.28 243.16 -29.28Q243.16 -35.04 244.84 -40.56Q246.52 -46.08 249.88 -50.52Q253.24 -54.96 258.58 -57.66Q263.92 -60.36 271.36 -60.36Q278.32 -60.36 283.48 -58.02Q288.64 -55.68 292.00 -51.54Q295.36 -47.40 297.10 -41.88Q298.84 -36.36 298.84 -30.12Q298.84 -29.28 298.78 -27.78Q298.72 -26.28 298.48 -24.60L258.04 -24.60Q258.64 -18.24 262.78 -15.00Q266.92 -11.76 273.16 -11.76Q277.72 -11.76 282.04 -13.38Q286.36 -15.00 289.72 -18.00L297.16 -7.92Q292.96 -4.68 289.24 -2.64Q285.52 -0.60 281.50 0.30Q277.48 1.20 272.32 1.20ZM284.68 -35.64Q284.68 -35.76 284.68 -35.76Q284.68 -38.28 283.72 -40.50Q282.76 -42.72 281.08 -44.40Q279.40 -46.08 277.06 -46.98Q274.72 -47.88 271.72 -47.88Q267.28 -47.88 264.28 -46.08Q261.28 -44.28 259.78 -41.46Q258.28 -38.64 257.92 -35.64ZM346.66 1.56Q335.02 1.56 326.20 -3.84Q317.38 -9.24 312.46 -19.08Q307.54 -28.92 307.54 -41.88Q307.54 -54.84 312.46 -64.62Q317.38 -74.40 326.20 -79.80Q335.02 -85.20 346.66 -85.20Q359.50 -85.20 368.92 -78.84Q378.34 -72.48 382.42 -61.20L371.02 -57.00Q368.02 -64.80 361.78 -69.18Q355.54 -73.56 346.66 -73.56Q338.50 -73.56 332.44 -69.66Q326.38 -65.76 323.08 -58.74Q319.78 -51.72 319.78 -41.88Q319.78 -32.04 323.08 -24.96Q326.38 -17.88 332.44 -13.98Q338.50 -10.08 346.66 -10.08Q355.54 -10.08 361.78 -14.46Q368.02 -18.84 371.02 -26.64L382.42 -22.56Q378.34 -11.40 368.92 -4.92Q359.50 1.56 346.66 1.56ZM429.04 0.00L428.32 -8.64Q428.20 -8.52 428.08 -8.40Q424.96 -3.72 420.34 -1.32Q415.72 1.08 409.96 1.08Q403.36 1.08 398.32 -1.32Q393.28 -3.72 390.52 -7.98Q387.76 -12.24 387.76 -17.88Q387.76 -22.80 389.80 -26.34Q391.84 -29.88 395.08 -31.80Q398.08 -33.72 401.98 -34.50Q405.88 -35.28 410.32 -35.28L428.08 -35.28L428.08 -37.20Q428.08 -43.44 424.48 -46.80Q420.88 -50.16 414.04 -50.16Q409.24 -50.16 404.86 -48.24Q400.48 -46.32 396.52 -42.00L389.20 -49.56Q394.48 -55.08 400.90 -57.66Q407.32 -60.24 414.88 -60.24Q426.76 -60.24 433.30 -54.18Q439.84 -48.12 439.84 -37.20L439.84 0.00ZM428.08 -26.40L412.00 -26.40Q409.60 -26.40 407.02 -25.98Q404.44 -25.56 402.64 -24.24Q401.20 -23.16 400.36 -21.54Q399.52 -19.92 399.52 -17.76Q399.52 -13.56 402.76 -11.04Q406.00 -8.52 411.40 -8.52Q415.96 -8.52 419.74 -10.62Q423.52 -12.72 425.80 -16.38Q428.08 -20.04 428.08 -24.72ZM451.94 0.00L451.94 -59.16L463.82 -59.16L463.82 -50.88Q464.78 -52.44 465.98 -53.76Q468.86 -56.88 472.88 -58.56Q476.90 -60.24 481.58 -60.24Q491.42 -60.24 497.00 -54.54Q502.58 -48.84 502.58 -37.92L502.58 0.00L490.82 0.00L490.82 -33.60Q490.82 -42.12 487.76 -46.08Q484.70 -50.04 478.34 -50.04Q473.54 -50.04 470.36 -47.88Q467.18 -45.72 465.50 -41.04Q463.82 -36.36 463.82 -29.16L463.82 0.00ZM533.28 0.00L509.04 -59.16L522.00 -59.16L538.08 -15.24L554.40 -59.16L567.12 -59.16L543.12 0.00ZM610.56 0.00L609.84 -8.64Q609.72 -8.52 609.60 -8.40Q606.48 -3.72 601.86 -1.32Q597.24 1.08 591.48 1.08Q584.88 1.08 579.84 -1.32Q574.80 -3.72 572.04 -7.98Q569.28 -12.24 569.28 -17.88Q569.28 -22.80 571.32 -26.34Q573.36 -29.88 576.60 -31.80Q579.60 -33.72 583.50 -34.50Q587.40 -35.28 591.84 -35.28L609.60 -35.28L609.60 -37.20Q609.60 -43.44 606.00 -46.80Q602.40 -50.16 595.56 -50.16Q590.76 -50.16 586.38 -48.24Q582.00 -46.32 578.04 -42.00L570.72 -49.56Q576.00 -55.08 582.42 -57.66Q588.84 -60.24 596.40 -60.24Q608.28 -60.24 614.82 -54.18Q621.36 -48.12 621.36 -37.20L621.36 0.00ZM609.60 -26.40L593.52 -26.40Q591.12 -26.40 588.54 -25.98Q585.96 -25.56 584.16 -24.24Q582.72 -23.16 581.88 -21.54Q581.04 -19.92 581.04 -17.76Q581.04 -13.56 584.28 -11.04Q587.52 -8.52 592.92 -8.52Q597.48 -8.52 601.26 -10.62Q605.04 -12.72 607.32 -16.38Q609.60 -20.04 609.60 -24.72ZM653.38 1.08Q647.14 1.08 642.34 -0.78Q637.54 -2.64 634.12 -5.58Q630.70 -8.52 628.66 -11.64L636.70 -18.60Q638.98 -14.52 643.24 -11.58Q647.50 -8.64 653.50 -8.64Q658.78 -8.64 661.84 -10.86Q664.90 -13.08 664.90 -16.68Q664.90 -19.56 662.98 -21.30Q661.06 -23.04 657.94 -24.18Q654.82 -25.32 651.10 -26.16Q647.74 -27.12 644.26 -28.32Q640.78 -29.52 637.96 -31.38Q635.14 -33.24 633.40 -36.18Q631.66 -39.12 631.66 -43.44Q631.66 -51.00 637.48 -55.62Q643.30 -60.24 652.90 -60.24Q659.74 -60.24 665.38 -57.42Q671.02 -54.60 674.14 -49.08L666.82 -43.44Q664.42 -47.40 660.64 -49.20Q656.86 -51.00 652.42 -51.00Q648.22 -51.00 645.40 -49.26Q642.58 -47.52 642.58 -44.52Q642.58 -42.36 643.84 -40.98Q645.10 -39.60 647.80 -38.58Q650.50 -37.56 654.46 -36.60Q658.18 -35.76 662.02 -34.56Q665.86 -33.36 669.10 -31.44Q672.34 -29.52 674.38 -26.28Q676.42 -23.04 676.42 -17.88Q676.42 -12.24 673.54 -7.98Q670.66 -3.72 665.50 -1.32Q660.34 1.08 653.38 1.08Z\"/></svg>", gi = 12, N = 16, _i = .58, vi = 10, yi = .56, bi = 686 / 88, xi = 83.64 / 88, Si = .25;
100
- function P(e = N) {
101
- let t = Number.isFinite(e) ? Math.max(gi, e) : N, n = F(t * yi / xi);
99
+ var A = "https://tradecanvas.dev", j = "Powered by TradeCanvas", M = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M186 70A82 82 0 1 0 186 186\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"22\" stroke-linecap=\"round\"/><rect x=\"92\" y=\"74\" width=\"72\" height=\"20\" rx=\"10\" fill=\"currentColor\"/><path fill=\"#E8961E\" d=\"M119 94H137V108H144a10 10 0 0 1 10 10V164a10 10 0 0 1-10 10H137V190H119V174H112a10 10 0 0 1-10-10V118a10 10 0 0 1 10-10H119Z\"/></svg>", N = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 16 686 88\" aria-hidden=\"true\" focusable=\"false\"><path fill=\"currentColor\" transform=\"translate(0 101.64)\" d=\"M27.24 0.00L27.24 -69.72L1.32 -69.72L1.32 -83.64L68.76 -83.64L68.76 -69.72L42.96 -69.72L42.96 0.00ZM70.90 0.00L70.90 -59.16L85.90 -59.16L85.90 -50.64Q86.26 -51.36 86.74 -51.96Q89.50 -55.92 93.52 -58.14Q97.54 -60.36 101.74 -60.36Q104.74 -60.36 107.44 -59.58Q110.14 -58.80 113.02 -57.00L105.82 -43.56Q104.50 -44.28 102.46 -44.88Q100.42 -45.48 98.38 -45.48Q95.98 -45.48 93.76 -44.64Q91.54 -43.80 89.80 -42.00Q88.06 -40.20 86.98 -37.20Q86.50 -35.52 86.20 -32.94Q85.90 -30.36 85.90 -25.44L85.90 0.00ZM156.44 0.00L155.36 -7.56Q155.00 -6.96 154.52 -6.36Q151.28 -2.40 147.20 -0.60Q143.12 1.20 138.56 1.20Q132.08 1.20 126.98 -1.20Q121.88 -3.60 118.94 -8.04Q116.00 -12.48 116.00 -18.24Q116.00 -23.40 118.10 -27.06Q120.20 -30.72 123.68 -32.64Q126.68 -34.44 130.34 -35.16Q134.00 -35.88 138.20 -35.88L155.24 -35.88L155.24 -37.32Q155.24 -42.60 151.94 -45.18Q148.64 -47.76 143.00 -47.76Q138.32 -47.76 133.46 -45.90Q128.60 -44.04 124.88 -40.68L117.32 -50.88Q123.56 -55.92 130.10 -58.14Q136.64 -60.36 144.20 -60.36Q156.44 -60.36 163.28 -54.24Q170.12 -48.12 170.12 -37.32L170.12 0.00ZM155.24 -24.84L140.36 -24.84Q138.44 -24.84 136.58 -24.54Q134.72 -24.24 133.40 -23.16Q132.20 -22.32 131.60 -21.06Q131.00 -19.80 131.00 -18.24Q131.00 -14.88 133.64 -12.84Q136.28 -10.80 140.72 -10.80Q144.68 -10.80 147.98 -12.54Q151.28 -14.28 153.26 -17.34Q155.24 -20.40 155.24 -24.36ZM202.98 1.20Q195.18 1.20 189.54 -2.82Q183.90 -6.84 180.84 -13.86Q177.78 -20.88 177.78 -29.64Q177.78 -39.36 181.20 -46.20Q184.62 -53.04 190.38 -56.70Q196.14 -60.36 202.98 -60.36Q207.78 -60.36 211.92 -58.38Q216.06 -56.40 219.06 -52.44Q219.54 -51.72 220.02 -51.00L220.02 -83.64L234.78 -83.64L234.78 0.00L220.02 0.00L220.02 -8.04Q219.54 -7.20 218.94 -6.48Q215.70 -2.28 211.56 -0.54Q207.42 1.20 202.98 1.20ZM207.06 -12.48Q211.50 -12.48 214.68 -14.64Q217.86 -16.80 219.60 -20.64Q221.34 -24.48 221.34 -29.64Q221.34 -34.80 219.60 -38.64Q217.86 -42.48 214.68 -44.58Q211.50 -46.68 207.06 -46.68Q202.74 -46.68 199.50 -44.58Q196.26 -42.48 194.52 -38.70Q192.78 -34.92 192.78 -29.64Q192.78 -24.36 194.52 -20.52Q196.26 -16.68 199.50 -14.58Q202.74 -12.48 207.06 -12.48ZM272.32 1.20Q264.64 1.20 259.12 -1.32Q253.60 -3.84 250.06 -8.10Q246.52 -12.36 244.84 -17.82Q243.16 -23.28 243.16 -29.28Q243.16 -35.04 244.84 -40.56Q246.52 -46.08 249.88 -50.52Q253.24 -54.96 258.58 -57.66Q263.92 -60.36 271.36 -60.36Q278.32 -60.36 283.48 -58.02Q288.64 -55.68 292.00 -51.54Q295.36 -47.40 297.10 -41.88Q298.84 -36.36 298.84 -30.12Q298.84 -29.28 298.78 -27.78Q298.72 -26.28 298.48 -24.60L258.04 -24.60Q258.64 -18.24 262.78 -15.00Q266.92 -11.76 273.16 -11.76Q277.72 -11.76 282.04 -13.38Q286.36 -15.00 289.72 -18.00L297.16 -7.92Q292.96 -4.68 289.24 -2.64Q285.52 -0.60 281.50 0.30Q277.48 1.20 272.32 1.20ZM284.68 -35.64Q284.68 -35.76 284.68 -35.76Q284.68 -38.28 283.72 -40.50Q282.76 -42.72 281.08 -44.40Q279.40 -46.08 277.06 -46.98Q274.72 -47.88 271.72 -47.88Q267.28 -47.88 264.28 -46.08Q261.28 -44.28 259.78 -41.46Q258.28 -38.64 257.92 -35.64ZM346.66 1.56Q335.02 1.56 326.20 -3.84Q317.38 -9.24 312.46 -19.08Q307.54 -28.92 307.54 -41.88Q307.54 -54.84 312.46 -64.62Q317.38 -74.40 326.20 -79.80Q335.02 -85.20 346.66 -85.20Q359.50 -85.20 368.92 -78.84Q378.34 -72.48 382.42 -61.20L371.02 -57.00Q368.02 -64.80 361.78 -69.18Q355.54 -73.56 346.66 -73.56Q338.50 -73.56 332.44 -69.66Q326.38 -65.76 323.08 -58.74Q319.78 -51.72 319.78 -41.88Q319.78 -32.04 323.08 -24.96Q326.38 -17.88 332.44 -13.98Q338.50 -10.08 346.66 -10.08Q355.54 -10.08 361.78 -14.46Q368.02 -18.84 371.02 -26.64L382.42 -22.56Q378.34 -11.40 368.92 -4.92Q359.50 1.56 346.66 1.56ZM429.04 0.00L428.32 -8.64Q428.20 -8.52 428.08 -8.40Q424.96 -3.72 420.34 -1.32Q415.72 1.08 409.96 1.08Q403.36 1.08 398.32 -1.32Q393.28 -3.72 390.52 -7.98Q387.76 -12.24 387.76 -17.88Q387.76 -22.80 389.80 -26.34Q391.84 -29.88 395.08 -31.80Q398.08 -33.72 401.98 -34.50Q405.88 -35.28 410.32 -35.28L428.08 -35.28L428.08 -37.20Q428.08 -43.44 424.48 -46.80Q420.88 -50.16 414.04 -50.16Q409.24 -50.16 404.86 -48.24Q400.48 -46.32 396.52 -42.00L389.20 -49.56Q394.48 -55.08 400.90 -57.66Q407.32 -60.24 414.88 -60.24Q426.76 -60.24 433.30 -54.18Q439.84 -48.12 439.84 -37.20L439.84 0.00ZM428.08 -26.40L412.00 -26.40Q409.60 -26.40 407.02 -25.98Q404.44 -25.56 402.64 -24.24Q401.20 -23.16 400.36 -21.54Q399.52 -19.92 399.52 -17.76Q399.52 -13.56 402.76 -11.04Q406.00 -8.52 411.40 -8.52Q415.96 -8.52 419.74 -10.62Q423.52 -12.72 425.80 -16.38Q428.08 -20.04 428.08 -24.72ZM451.94 0.00L451.94 -59.16L463.82 -59.16L463.82 -50.88Q464.78 -52.44 465.98 -53.76Q468.86 -56.88 472.88 -58.56Q476.90 -60.24 481.58 -60.24Q491.42 -60.24 497.00 -54.54Q502.58 -48.84 502.58 -37.92L502.58 0.00L490.82 0.00L490.82 -33.60Q490.82 -42.12 487.76 -46.08Q484.70 -50.04 478.34 -50.04Q473.54 -50.04 470.36 -47.88Q467.18 -45.72 465.50 -41.04Q463.82 -36.36 463.82 -29.16L463.82 0.00ZM533.28 0.00L509.04 -59.16L522.00 -59.16L538.08 -15.24L554.40 -59.16L567.12 -59.16L543.12 0.00ZM610.56 0.00L609.84 -8.64Q609.72 -8.52 609.60 -8.40Q606.48 -3.72 601.86 -1.32Q597.24 1.08 591.48 1.08Q584.88 1.08 579.84 -1.32Q574.80 -3.72 572.04 -7.98Q569.28 -12.24 569.28 -17.88Q569.28 -22.80 571.32 -26.34Q573.36 -29.88 576.60 -31.80Q579.60 -33.72 583.50 -34.50Q587.40 -35.28 591.84 -35.28L609.60 -35.28L609.60 -37.20Q609.60 -43.44 606.00 -46.80Q602.40 -50.16 595.56 -50.16Q590.76 -50.16 586.38 -48.24Q582.00 -46.32 578.04 -42.00L570.72 -49.56Q576.00 -55.08 582.42 -57.66Q588.84 -60.24 596.40 -60.24Q608.28 -60.24 614.82 -54.18Q621.36 -48.12 621.36 -37.20L621.36 0.00ZM609.60 -26.40L593.52 -26.40Q591.12 -26.40 588.54 -25.98Q585.96 -25.56 584.16 -24.24Q582.72 -23.16 581.88 -21.54Q581.04 -19.92 581.04 -17.76Q581.04 -13.56 584.28 -11.04Q587.52 -8.52 592.92 -8.52Q597.48 -8.52 601.26 -10.62Q605.04 -12.72 607.32 -16.38Q609.60 -20.04 609.60 -24.72ZM653.38 1.08Q647.14 1.08 642.34 -0.78Q637.54 -2.64 634.12 -5.58Q630.70 -8.52 628.66 -11.64L636.70 -18.60Q638.98 -14.52 643.24 -11.58Q647.50 -8.64 653.50 -8.64Q658.78 -8.64 661.84 -10.86Q664.90 -13.08 664.90 -16.68Q664.90 -19.56 662.98 -21.30Q661.06 -23.04 657.94 -24.18Q654.82 -25.32 651.10 -26.16Q647.74 -27.12 644.26 -28.32Q640.78 -29.52 637.96 -31.38Q635.14 -33.24 633.40 -36.18Q631.66 -39.12 631.66 -43.44Q631.66 -51.00 637.48 -55.62Q643.30 -60.24 652.90 -60.24Q659.74 -60.24 665.38 -57.42Q671.02 -54.60 674.14 -49.08L666.82 -43.44Q664.42 -47.40 660.64 -49.20Q656.86 -51.00 652.42 -51.00Q648.22 -51.00 645.40 -49.26Q642.58 -47.52 642.58 -44.52Q642.58 -42.36 643.84 -40.98Q645.10 -39.60 647.80 -38.58Q650.50 -37.56 654.46 -36.60Q658.18 -35.76 662.02 -34.56Q665.86 -33.36 669.10 -31.44Q672.34 -29.52 674.38 -26.28Q676.42 -23.04 676.42 -17.88Q676.42 -12.24 673.54 -7.98Q670.66 -3.72 665.50 -1.32Q660.34 1.08 653.38 1.08Z\"/></svg>", bi = 12, P = 16, xi = .58, Si = 10, Ci = .56, wi = 686 / 88, Ti = 83.64 / 88, Ei = .25;
100
+ function F(e = P) {
101
+ let t = Number.isFinite(e) ? Math.max(bi, e) : P, n = I(t * Ci / Ti);
102
102
  return {
103
103
  height: t,
104
- fontSize: F(Math.max(vi, t * _i)),
105
- gap: F(t * Si),
106
- wordmarkWidth: F(n * bi),
104
+ fontSize: I(Math.max(Si, t * xi)),
105
+ gap: I(t * Ei),
106
+ wordmarkWidth: I(n * wi),
107
107
  wordmarkHeight: n
108
108
  };
109
109
  }
110
- function F(e) {
111
- return Math.round(e * 10) / 10;
112
- }
113
110
  function I(e) {
114
- return e.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;");
111
+ return Math.round(e * 10) / 10;
115
112
  }
116
113
  function L(e) {
117
- return e && (/^(https?:)?\/\//i.test(e) || e.startsWith("/")) ? e : k;
114
+ return e.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;");
118
115
  }
119
116
  function R(e) {
117
+ return e && (/^(https?:)?\/\//i.test(e) || e.startsWith("/")) ? e : A;
118
+ }
119
+ function z(e) {
120
120
  return !!e && !/^_(self|parent|top)$/i.test(e);
121
121
  }
122
- function z(e, t, n) {
122
+ function B(e, t, n) {
123
123
  return e.replace("<svg ", `<svg width="${t}" height="${n}" style="display:block;flex:none" `);
124
124
  }
125
- function B(e = {}) {
126
- let t = P(e.height), n = I(L(e.href)), r = e.target ?? "_blank";
127
- return `<a class="tc-powered-by" href="${n}"${r ? ` target="${I(r)}"${R(r) ? " rel=\"noopener noreferrer\"" : ""}` : ""} aria-label="${A}" style="${`display:inline-flex;align-items:center;gap:${t.gap}px;height:${t.height}px;color:inherit;text-decoration:none;font-size:${t.fontSize}px;line-height:1;white-space:nowrap`}"><span aria-hidden="true">Powered by</span>` + z(j, t.height, t.height) + z(M, t.wordmarkWidth, t.wordmarkHeight) + "</a>";
125
+ function V(e = {}) {
126
+ let t = F(e.height), n = L(R(e.href)), r = e.target ?? "_blank";
127
+ return `<a class="tc-powered-by" href="${n}"${r ? ` target="${L(r)}"${z(r) ? " rel=\"noopener noreferrer\"" : ""}` : ""} aria-label="${j}" style="${`display:inline-flex;align-items:center;gap:${t.gap}px;height:${t.height}px;color:inherit;text-decoration:none;font-size:${t.fontSize}px;line-height:1;white-space:nowrap`}"><span aria-hidden="true">Powered by</span>` + B(M, t.height, t.height) + B(N, t.wordmarkWidth, t.wordmarkHeight) + "</a>";
128
128
  }
129
- function Ci(e = {}, t = document) {
129
+ function Di(e = {}, t = document) {
130
130
  let n = t.createElement("div");
131
- return n.innerHTML = B(e), n.firstElementChild;
131
+ return n.innerHTML = V(e), n.firstElementChild;
132
132
  }
133
133
  //#endregion
134
134
  //#region src/plugins/overlayScale.ts
135
- function wi(e) {
136
- let { viewport: t, data: n } = e, r = Er(t), i = n.length - 1, a = Math.max(0, Math.floor(t.visibleRange.from)), o = Math.min(i, Math.ceil(t.visibleRange.to)), s = (e) => n.length > 0 ? Kr(e, n) : e;
135
+ function Oi(e) {
136
+ let { viewport: t, data: n } = e, r = Ar(t), i = n.length - 1, a = Math.max(0, Math.floor(t.visibleRange.from)), o = Math.min(i, Math.ceil(t.visibleRange.to)), s = (e) => n.length > 0 ? Xr(e, n) : e;
137
137
  return {
138
- timeToX: (e) => y(s(e), t),
138
+ timeToX: (e) => b(s(e), t),
139
139
  xToTime: (e) => {
140
- let r = E(e, t);
141
- return n.length > 0 ? Jn(r, n) : r;
140
+ let r = D(e, t);
141
+ return n.length > 0 ? Qn(r, n) : r;
142
142
  },
143
- indexToX: (e) => y(e, t),
144
- xToIndex: (e) => E(e, t),
143
+ indexToX: (e) => b(e, t),
144
+ xToIndex: (e) => D(e, t),
145
145
  priceToY: r,
146
- yToPrice: (e) => ii(e, t),
146
+ yToPrice: (e) => ci(e, t),
147
147
  barWidth: t.barWidth,
148
148
  visible: o < a ? {
149
149
  from: 0,
@@ -156,40 +156,7 @@ function wi(e) {
156
156
  }
157
157
  //#endregion
158
158
  //#region src/grid/ChartGrid.ts
159
- var V = {
160
- "1x1": {
161
- cols: 1,
162
- rows: 1
163
- },
164
- "1x2": {
165
- cols: 2,
166
- rows: 1
167
- },
168
- "2x1": {
169
- cols: 1,
170
- rows: 2
171
- },
172
- "2x2": {
173
- cols: 2,
174
- rows: 2
175
- },
176
- "1x3": {
177
- cols: 3,
178
- rows: 1
179
- },
180
- "3x1": {
181
- cols: 1,
182
- rows: 3
183
- },
184
- "2x3": {
185
- cols: 3,
186
- rows: 2
187
- },
188
- "3x2": {
189
- cols: 2,
190
- rows: 3
191
- }
192
- }, Ti = class {
159
+ var ki = class {
193
160
  root;
194
161
  cells = [];
195
162
  layout;
@@ -197,20 +164,25 @@ var V = {
197
164
  destroyed = !1;
198
165
  syncing = !1;
199
166
  constructor(e, t = {}) {
200
- this.options = t, this.layout = t.layout ?? "2x2", this.root = document.createElement("div"), this.root.style.cssText = "display:grid;width:100%;height:100%;overflow:hidden;", e.appendChild(this.root), this.applyLayout(), this.createCells();
167
+ this.options = t, this.layout = d(t.layout) ? t.layout : "2x2", this.root = document.createElement("div"), this.root.style.cssText = "display:grid;width:100%;height:100%;overflow:hidden;", e.appendChild(this.root), this.applyLayout(), this.createCells();
201
168
  }
202
169
  applyLayout() {
203
- let { cols: e, rows: t } = V[this.layout], n = this.options.gap ?? 1;
204
- this.root.style.gridTemplateColumns = `repeat(${e}, 1fr)`, this.root.style.gridTemplateRows = `repeat(${t}, 1fr)`, this.root.style.gap = `${n}px`;
170
+ let { cols: e, rows: t } = m[this.layout], n = this.options.gap ?? 1;
171
+ this.root.style.gridTemplateColumns = `repeat(${e}, minmax(0, 1fr))`, this.root.style.gridTemplateRows = `repeat(${t}, minmax(0, 1fr))`, this.root.style.gap = `${n}px`, this.placeCells();
172
+ }
173
+ placeCells() {
174
+ let e = ne(m[this.layout]);
175
+ this.cells.forEach((t, n) => re(t.container, e[n]));
205
176
  }
206
177
  createCells() {
207
- let { cols: e, rows: t } = V[this.layout], n = e * t;
208
- for (let e = 0; e < n; e++) this.cells.push(this.createCell(e));
178
+ let e = p(m[this.layout]);
179
+ for (let t = 0; t < e; t++) this.cells.push(this.createCell(t));
180
+ this.placeCells();
209
181
  }
210
182
  createCell(e) {
211
183
  let t = this.options.cells?.[e] ?? {}, n = document.createElement("div");
212
184
  n.style.cssText = "position:relative;overflow:hidden;min-width:0;min-height:0;", this.root.appendChild(n);
213
- let r = new c(n, {
185
+ let r = new f(n, {
214
186
  chartType: "candlestick",
215
187
  autoScale: !0,
216
188
  features: {
@@ -248,14 +220,18 @@ var V = {
248
220
  }), i;
249
221
  }
250
222
  setLayout(e) {
251
- if (e === this.layout) return;
252
- let t = this.cells.length, { cols: n, rows: r } = V[e], i = n * r;
253
- if (i < t) for (let e = t - 1; e >= i; e--) {
223
+ if (e === this.layout || !d(e)) return;
224
+ let t = this.cells.length, n = p(m[e]);
225
+ if (n < t) for (let e = t - 1; e >= n; e--) {
254
226
  let t = this.cells[e];
255
227
  t.chart.destroy(), t.container.remove(), this.cells.pop();
256
228
  }
257
229
  this.layout = e, this.applyLayout();
258
- for (let e = t; e < i; e++) this.cells.push(this.createCell(e));
230
+ for (let e = t; e < n; e++) this.cells.push(this.createCell(e));
231
+ this.placeCells();
232
+ }
233
+ getLayout() {
234
+ return this.layout;
259
235
  }
260
236
  getChart(e) {
261
237
  return this.cells[e]?.chart ?? null;
@@ -279,7 +255,7 @@ var V = {
279
255
  async connectAll(e, t, n, r = 500) {
280
256
  let i = [];
281
257
  for (let a = 0; a < this.cells.length && a < t.length; a++) i.push(this.connectCell(a, {
282
- ...typeof e == "function" ? { adapter: e(t[a], a) } : gr(e) ? { feed: e } : { adapter: e },
258
+ ...typeof e == "function" ? { adapter: e(t[a], a) } : br(e) ? { feed: e } : { adapter: e },
283
259
  symbol: t[a],
284
260
  timeframe: n,
285
261
  historyLimit: r
@@ -296,13 +272,13 @@ var V = {
296
272
  this.cells = [], this.root.remove();
297
273
  }
298
274
  }
299
- }, Ei = class extends g {
275
+ }, Ai = class extends _ {
300
276
  options;
301
277
  constructor(e, t) {
302
278
  super(e, t.theme), this.options = t, this.requestRender();
303
279
  }
304
280
  renderChart(e, t, n, r) {
305
- zr(e, t, n, this.options, r);
281
+ Ur(e, t, n, this.options, r);
306
282
  }
307
283
  update(e) {
308
284
  this.options = {
@@ -316,15 +292,15 @@ var V = {
316
292
  ...e
317
293
  }, this.requestRender();
318
294
  }
319
- }, Di = class extends g {
295
+ }, ji = class extends _ {
320
296
  options;
321
297
  crosshair = null;
322
298
  constructor(e, t) {
323
- super(e, t.theme), this.options = t, t.crosshair !== !1 && (this.crosshair = new _(this.canvas, () => this.requestRender())), this.requestRender();
299
+ super(e, t.theme), this.options = t, t.crosshair !== !1 && (this.crosshair = new v(this.canvas, () => this.requestRender())), this.requestRender();
324
300
  }
325
301
  renderChart(e, t, n, r) {
326
302
  let i = this.crosshair?.getPosition() ?? null;
327
- jr(e, t, n, this.options, r, i);
303
+ Fr(e, t, n, this.options, r, i);
328
304
  }
329
305
  update(e) {
330
306
  this.options = {
@@ -341,15 +317,15 @@ var V = {
341
317
  destroy() {
342
318
  this.crosshair?.destroy(), super.destroy();
343
319
  }
344
- }, H = class extends g {
320
+ }, H = class extends _ {
345
321
  options;
346
322
  crosshair = null;
347
323
  constructor(e, t) {
348
- super(e, t.theme), this.options = t, t.crosshair !== !1 && (this.crosshair = new _(this.canvas, () => this.requestRender())), this.requestRender();
324
+ super(e, t.theme), this.options = t, t.crosshair !== !1 && (this.crosshair = new v(this.canvas, () => this.requestRender())), this.requestRender();
349
325
  }
350
326
  renderChart(e, t, n, r) {
351
327
  let i = this.crosshair?.getPosition() ?? null;
352
- Nr(e, t, n, this.options, r, i);
328
+ Lr(e, t, n, this.options, r, i);
353
329
  }
354
330
  update(e, t) {
355
331
  this.options = {
@@ -369,7 +345,7 @@ var V = {
369
345
  destroy() {
370
346
  this.crosshair?.destroy(), super.destroy();
371
347
  }
372
- }, U = class extends g {
348
+ }, U = class extends _ {
373
349
  options;
374
350
  crosshair = null;
375
351
  cachedRects = [];
@@ -379,7 +355,7 @@ var V = {
379
355
  lastLayoutHeight = 0;
380
356
  handleClick = null;
381
357
  constructor(e, t) {
382
- super(e, t.theme), this.options = t, this.currentData = t.data ?? [], t.crosshair !== !1 && (this.crosshair = new _(this.canvas, () => this.requestRender())), t.onCellClick && (this.handleClick = (e) => {
358
+ super(e, t.theme), this.options = t, this.currentData = t.data ?? [], t.crosshair !== !1 && (this.crosshair = new v(this.canvas, () => this.requestRender())), t.onCellClick && (this.handleClick = (e) => {
383
359
  let t = this.canvas.getBoundingClientRect(), n = e.clientX - t.left, r = e.clientY - t.top;
384
360
  this.onCanvasClick(n, r);
385
361
  }, this.canvas.addEventListener("click", this.handleClick)), this.applyLabel(), this.recomputeLayout(), this.requestRender();
@@ -396,20 +372,20 @@ var V = {
396
372
  height: this.height
397
373
  }, t = this.options.cellPadding ?? 2;
398
374
  if (this.lastLayoutWidth = this.width, this.lastLayoutHeight = this.height, this.cachedGroups = [], this.options.grouped) {
399
- let { groups: n, cells: r } = vr(this.currentData.map((e) => ({
375
+ let { groups: n, cells: r } = Sr(this.currentData.map((e) => ({
400
376
  id: e.id,
401
377
  weight: e.weight ?? (Math.abs(e.value) || 1),
402
378
  group: e.group,
403
379
  value: e.value
404
- })), e, t, mn);
380
+ })), e, t, vn);
405
381
  this.cachedRects = r, this.cachedGroups = n;
406
382
  } else if (this.options.weighted) {
407
383
  let n = this.currentData.map((e) => ({
408
384
  id: e.id,
409
385
  weight: e.weight ?? (Math.abs(e.value) || 1)
410
386
  }));
411
- this.cachedRects = yr(n, e, t);
412
- } else this.cachedRects = br(this.currentData.map((e) => ({ id: e.id })), e, t);
387
+ this.cachedRects = Cr(n, e, t);
388
+ } else this.cachedRects = wr(this.currentData.map((e) => ({ id: e.id })), e, t);
413
389
  }
414
390
  onCanvasClick(e, t) {
415
391
  if (this.options.onCellClick) for (let n of this.cachedRects) {
@@ -424,7 +400,7 @@ var V = {
424
400
  renderChart(e, t, n, r) {
425
401
  (t !== this.lastLayoutWidth || n !== this.lastLayoutHeight) && this.recomputeLayout();
426
402
  let i = this.crosshair?.getPosition() ?? null;
427
- Fr(e, t, n, this.currentData, this.cachedRects, this.options, r, i, this.cachedGroups);
403
+ zr(e, t, n, this.currentData, this.cachedRects, this.options, r, i, this.cachedGroups);
428
404
  }
429
405
  update(e) {
430
406
  this.currentData = e, this.options = {
@@ -441,15 +417,15 @@ var V = {
441
417
  destroy() {
442
418
  this.crosshair?.destroy(), this.handleClick && this.canvas.removeEventListener("click", this.handleClick), super.destroy();
443
419
  }
444
- }, Oi = class extends g {
420
+ }, Mi = class extends _ {
445
421
  options;
446
422
  crosshair = null;
447
423
  constructor(e, t) {
448
- super(e, t.theme), this.options = t, t.crosshair !== !1 && (this.crosshair = new _(this.canvas, () => this.requestRender())), this.requestRender();
424
+ super(e, t.theme), this.options = t, t.crosshair !== !1 && (this.crosshair = new v(this.canvas, () => this.requestRender())), this.requestRender();
449
425
  }
450
426
  renderChart(e, t, n, r) {
451
427
  let i = this.crosshair?.getPosition() ?? null;
452
- Br(e, t, n, this.options, r, i);
428
+ Wr(e, t, n, this.options, r, i);
453
429
  }
454
430
  update(e) {
455
431
  this.options = {
@@ -466,12 +442,12 @@ var V = {
466
442
  destroy() {
467
443
  this.crosshair?.destroy(), super.destroy();
468
444
  }
469
- }, ki = 500;
470
- function Ai(e) {
445
+ }, Ni = 500;
446
+ function Pi(e) {
471
447
  let t = 1 - e;
472
448
  return 1 - t * t * t;
473
449
  }
474
- var ji = class extends g {
450
+ var Fi = class extends _ {
475
451
  options;
476
452
  currentValue;
477
453
  targetValue;
@@ -482,7 +458,7 @@ var ji = class extends g {
482
458
  super(e, t.theme), this.options = t, this.currentValue = t.value, this.targetValue = t.value, this.requestRender();
483
459
  }
484
460
  renderChart(e, t, n, r) {
485
- Pr(e, t, n, this.options, r, this.currentValue);
461
+ Rr(e, t, n, this.options, r, this.currentValue);
486
462
  }
487
463
  setValue(e) {
488
464
  if (this.options.animate === !1) {
@@ -512,7 +488,7 @@ var ji = class extends g {
512
488
  if (this.animationFrameId !== null) return;
513
489
  let e = () => {
514
490
  if (this.animationFrameId = null, this.animationStart === null) return;
515
- let t = this.options.animationDuration ?? ki, n = performance.now() - this.animationStart, r = Math.min(1, n / Math.max(1, t)), i = Ai(r);
491
+ let t = this.options.animationDuration ?? Ni, n = performance.now() - this.animationStart, r = Math.min(1, n / Math.max(1, t)), i = Pi(r);
516
492
  this.currentValue = this.animationFrom + (this.targetValue - this.animationFrom) * i, this.requestRender(), r < 1 ? this.animationFrameId = requestAnimationFrame(e) : (this.currentValue = this.targetValue, this.animationStart = null);
517
493
  };
518
494
  this.animationFrameId = requestAnimationFrame(e);
@@ -523,7 +499,7 @@ var ji = class extends g {
523
499
  destroy() {
524
500
  this.cancelAnimation(), super.destroy();
525
501
  }
526
- }, W = class extends g {
502
+ }, W = class extends _ {
527
503
  options;
528
504
  layout = null;
529
505
  layoutFor = null;
@@ -538,11 +514,11 @@ var ji = class extends g {
538
514
  this.canvas.style.cursor = this.hits(this.layout, e.clientX - t.left, e.clientY - t.top) ? "pointer" : "";
539
515
  };
540
516
  constructor(e, t) {
541
- super(e, t.theme), this.options = t, this.crosshair = new _(this.canvas, () => this.requestRender()), this.canvas.addEventListener("click", this.onClick), this.canvas.addEventListener("pointermove", this.onMove), this.applyLabel(), this.requestRender();
517
+ super(e, t.theme), this.options = t, this.crosshair = new v(this.canvas, () => this.requestRender()), this.canvas.addEventListener("click", this.onClick), this.canvas.addEventListener("pointermove", this.onMove), this.applyLabel(), this.requestRender();
542
518
  }
543
519
  renderChart(e, t, n, r) {
544
520
  let i = this.options.crosshair === !1 ? null : this.crosshair.getPosition(), a = this.layoutFor;
545
- (!this.layout || !a || a.options !== this.options || a.width !== t || a.height !== n || a.theme !== r) && (this.layout = this.compute(t, n, r, Xn(e, r)), this.layoutFor = {
521
+ (!this.layout || !a || a.options !== this.options || a.width !== t || a.height !== n || a.theme !== r) && (this.layout = this.compute(t, n, r, er(e, r)), this.layoutFor = {
546
522
  options: this.options,
547
523
  width: t,
548
524
  height: n,
@@ -561,12 +537,12 @@ var ji = class extends g {
561
537
  destroy() {
562
538
  this.crosshair.destroy(), this.canvas.removeEventListener("click", this.onClick), this.canvas.removeEventListener("pointermove", this.onMove), super.destroy();
563
539
  }
564
- }, Mi = class extends W {
540
+ }, Ii = class extends W {
565
541
  compute(e, t, n, r) {
566
- return Zn(this.options, e, t, n, r);
542
+ return tr(this.options, e, t, n, r);
567
543
  }
568
544
  draw(e, t, n, r, i, a) {
569
- Or(e, t, n, this.options, r, i, a);
545
+ Mr(e, t, n, this.options, r, i, a);
570
546
  }
571
547
  describe() {
572
548
  return `Bar chart of ${this.options.series.map((e) => e.name).join(", ")}, ${this.options.categories.length} categories`;
@@ -575,10 +551,10 @@ var ji = class extends g {
575
551
  return this.options.onBarClick !== void 0;
576
552
  }
577
553
  hits(e, t, n) {
578
- return b(e, t, n) !== null;
554
+ return x(e, t, n) !== null;
579
555
  }
580
556
  clickAt(e, t, n) {
581
- let r = b(e, t, n);
557
+ let r = x(e, t, n);
582
558
  r && this.options.onBarClick?.({
583
559
  category: r.category,
584
560
  series: r.series,
@@ -592,12 +568,12 @@ var ji = class extends g {
592
568
  series: t
593
569
  });
594
570
  }
595
- }, Ni = class extends W {
571
+ }, Li = class extends W {
596
572
  compute(e, t, n, r) {
597
- return er(this.options, e, t, n, r);
573
+ return ir(this.options, e, t, n, r);
598
574
  }
599
575
  draw(e, t, n, r, i, a) {
600
- Mr(e, t, n, this.options, r, i, a);
576
+ Ir(e, t, n, this.options, r, i, a);
601
577
  }
602
578
  describe() {
603
579
  let e = this.options.data.filter((e) => Number.isFinite(e.value) && e.value > 0).map((e) => e.label).join(", ");
@@ -607,21 +583,21 @@ var ji = class extends g {
607
583
  return this.options.onSliceClick !== void 0;
608
584
  }
609
585
  hits(e, t, n) {
610
- return C(e, t, n) !== null;
586
+ return w(e, t, n) !== null;
611
587
  }
612
588
  clickAt(e, t, n) {
613
- let r = C(e, t, n);
589
+ let r = w(e, t, n);
614
590
  r && this.options.onSliceClick?.(r.slice);
615
591
  }
616
592
  update(e) {
617
593
  this.setOptions({ data: e });
618
594
  }
619
- }, Pi = class extends W {
595
+ }, Ri = class extends W {
620
596
  compute(e, t, n, r) {
621
- return rr(this.options, e, t, n, r);
597
+ return sr(this.options, e, t, n, r);
622
598
  }
623
599
  draw(e, t, n, r, i, a) {
624
- Rr(e, t, n, this.options, r, i, a);
600
+ Hr(e, t, n, this.options, r, i, a);
625
601
  }
626
602
  describe() {
627
603
  let e = this.options.series.reduce((e, t) => e + t.points.length, 0);
@@ -631,21 +607,21 @@ var ji = class extends g {
631
607
  return this.options.onPointClick !== void 0;
632
608
  }
633
609
  hits(e, t, n) {
634
- return T(e, t, n) !== null;
610
+ return E(e, t, n) !== null;
635
611
  }
636
612
  clickAt(e, t, n) {
637
- let r = T(e, t, n);
613
+ let r = E(e, t, n);
638
614
  r && this.options.onPointClick?.(r.point, r.series);
639
615
  }
640
616
  update(e) {
641
617
  this.setOptions({ series: e });
642
618
  }
643
- }, Fi = class extends W {
619
+ }, zi = class extends W {
644
620
  compute(e, t, n, r) {
645
- return tr(this.options, e, t, n, r);
621
+ return ar(this.options, e, t, n, r);
646
622
  }
647
623
  draw(e, t, n, r, i, a) {
648
- Ir(e, t, n, this.options, r, i, a);
624
+ Br(e, t, n, this.options, r, i, a);
649
625
  }
650
626
  describe() {
651
627
  return `Histogram of ${this.options.values.length} values`;
@@ -660,12 +636,12 @@ var ji = class extends g {
660
636
  update(e) {
661
637
  this.setOptions({ values: e });
662
638
  }
663
- }, Ii = class extends W {
639
+ }, Bi = class extends W {
664
640
  compute(e, t, n, r) {
665
- return Qn(this.options, e, t, n, r);
641
+ return nr(this.options, e, t, n, r);
666
642
  }
667
643
  draw(e, t, n, r, i, a) {
668
- kr(e, t, n, this.options, r, i, a);
644
+ Nr(e, t, n, this.options, r, i, a);
669
645
  }
670
646
  describe() {
671
647
  let e = this.options.data.map((e) => e.date).filter((e) => /^\d{4}-\d{2}-\d{2}$/.test(e)).sort(), t = this.options.from ?? e[0], n = this.options.to ?? e[e.length - 1];
@@ -675,21 +651,21 @@ var ji = class extends g {
675
651
  return this.options.onDayClick !== void 0;
676
652
  }
677
653
  hits(e, t, n) {
678
- return x(e, t, n)?.day !== void 0;
654
+ return S(e, t, n)?.day !== void 0;
679
655
  }
680
656
  clickAt(e, t, n) {
681
- let r = x(e, t, n)?.day;
657
+ let r = S(e, t, n)?.day;
682
658
  r && this.options.onDayClick?.(r);
683
659
  }
684
660
  update(e) {
685
661
  this.setOptions({ data: e });
686
662
  }
687
- }, G = 12, Li = class extends W {
663
+ }, G = 12, Vi = class extends W {
688
664
  compute(e, t, n, r) {
689
- return nr(this.options, e, t, n, r);
665
+ return or(this.options, e, t, n, r);
690
666
  }
691
667
  draw(e, t, n, r, i, a) {
692
- Lr(e, t, n, this.options, r, i, a);
668
+ Vr(e, t, n, this.options, r, i, a);
693
669
  }
694
670
  describe() {
695
671
  let { rows: e, columns: t } = this.options;
@@ -699,21 +675,21 @@ var ji = class extends g {
699
675
  return this.options.onCellClick !== void 0;
700
676
  }
701
677
  hits(e, t, n) {
702
- return S(e, t, n) !== null;
678
+ return C(e, t, n) !== null;
703
679
  }
704
680
  clickAt(e, t, n) {
705
- let r = S(e, t, n);
681
+ let r = C(e, t, n);
706
682
  r && this.options.onCellClick?.(r.cell);
707
683
  }
708
684
  update(e) {
709
685
  this.setOptions({ values: e });
710
686
  }
711
- }, Ri = class extends W {
687
+ }, Hi = class extends W {
712
688
  compute(e, t, n, r) {
713
- return $n(this.options, e, t, n, r);
689
+ return rr(this.options, e, t, n, r);
714
690
  }
715
691
  draw(e, t, n, r, i, a) {
716
- Ar(e, t, n, this.options, r, i, a);
692
+ Pr(e, t, n, this.options, r, i, a);
717
693
  }
718
694
  describe() {
719
695
  return `Counter-clock chart of price against volume, ${this.options.period ?? 25}-bar averages`;
@@ -722,19 +698,19 @@ var ji = class extends g {
722
698
  return this.options.onPointClick !== void 0;
723
699
  }
724
700
  hits(e, t, n) {
725
- return w(e, t, n) !== null;
701
+ return T(e, t, n) !== null;
726
702
  }
727
703
  clickAt(e, t, n) {
728
- let r = w(e, t, n);
704
+ let r = T(e, t, n);
729
705
  r && this.options.onPointClick?.(r.point);
730
706
  }
731
707
  getPhase() {
732
- return or(cr(this.options.data, this.options.period ?? 25, Ur(this.options)));
708
+ return ur(fr(this.options.data, this.options.period ?? 25, qr(this.options)));
733
709
  }
734
710
  update(e) {
735
711
  this.setOptions({ data: e });
736
712
  }
737
- }, zi = [
713
+ }, Ui = [
738
714
  "Jan",
739
715
  "Feb",
740
716
  "Mar",
@@ -769,7 +745,7 @@ function J(e) {
769
745
  if (e.length === 0) return [];
770
746
  let t = [];
771
747
  for (let n of e) {
772
- let e = Vt(n.time, "1M"), r = t[t.length - 1];
748
+ let e = Gt(n.time, "1M"), r = t[t.length - 1];
773
749
  r && r.key === e ? r.close = n.equity : t.push({
774
750
  key: e,
775
751
  close: n.equity
@@ -782,7 +758,7 @@ function J(e) {
782
758
  let a = new Date(e.key), o = a.getUTCFullYear(), s = a.getUTCMonth();
783
759
  r.push({
784
760
  id: `${o}-${String(s + 1).padStart(2, "0")}`,
785
- label: zi[s],
761
+ label: Ui[s],
786
762
  group: String(o),
787
763
  value: i
788
764
  });
@@ -843,9 +819,9 @@ function Q(e) {
843
819
  //#endregion
844
820
  //#region src/finance/PerformanceDashboard.ts
845
821
  function $(e) {
846
- return !e || e === "dark" ? ve : e === "light" ? Ne : e;
822
+ return !e || e === "dark" ? ye : e === "light" ? Pe : e;
847
823
  }
848
- var Bi = class {
824
+ var Wi = class {
849
825
  options;
850
826
  theme;
851
827
  root;
@@ -994,6 +970,6 @@ var Bi = class {
994
970
  }
995
971
  };
996
972
  //#endregion
997
- export { Yt as AlertManager, Xt as Animator, Mi as BarChart, Zt as BarCountdown, Qt as BinanceAdapter, $t as BybitAdapter, en as CANDLE_PATTERNS, me as CHART_STYLE_KEYS, si as CORRECTABLE_BARS, Ii as CalendarChart, c as Chart, Ti as ChartGrid, tn as ChartLegend, nn as ChartStateManager, rn as CoinbaseAdapter, an as CompareRenderer, Ri as CounterClockChart, on as CrosshairTooltip, sn as CurrentPriceLine, he as DARK_PRICE_LIMITS, ge as DARK_TERMINAL, _e as DARK_THEME, ye as DEFAULT_DRAWING_STYLE, be as DEFAULT_FONT_FAMILY, e as DEFAULT_HISTORY_PAGE_SIZE, cn as DEFAULT_LEGEND_CONFIG, ln as DEFAULT_MAX_WEBGL_CHARTS, xe as DEFAULT_RECONNECT, un as DEFAULT_SESSION_HOURS, Se as DEFAULT_SIGNAL_STYLE, Ce as DEFAULT_STREAM_CONFIG, we as DEFAULT_TIMEFRAME_FAVORITES, Te as DEFAULT_TRADE_ZONE_STYLE, Ee as DEFAULT_TRADING_CONFIG, dn as DataExporter, i as DataManager, Di as DepthChart, Ni as DonutChart, ie as DragDropImporter, fn as DrawingBase, te as EXCHANGE_TIMEZONE, le as EXCHANGE_TIME_ZONE, pn as Easing, H as EquityCurveChart, ji as GaugeChart, de as HISTORY_RETRY_MS, De as HNX_SESSIONS, Oe as HOSE_SESSIONS, U as HeatmapChart, Fi as HistogramChart, hn as INDICATOR_CATEGORIES, gn as IndicatorBase, _n as IndicatorValueMap, vn as KEPT_BUCKETS, ke as KRX_SESSIONS, Ae as KR_COLORS, yn as KeyboardHandler, bn as KrakenAdapter, je as LIGHT_PRICE_LIMITS, Me as LIGHT_THEME, fe as LayoutManager, ce as LayoutSession, Pe as MARKET_CRYPTO, Fe as MARKET_HNX, Ie as MARKET_HOSE, Le as MARKET_HOSE_ETF, Re as MARKET_KRX, d as MARKET_NXT, f as MARKET_NYSE, p as MARKET_UPBIT_KRW, m as MARKET_UPCOM, h as MARKET_VN30F, xn as MAX_ALERT_BARS, re as MAX_LAYOUT_NAME, Sn as MIN_ALERT_BARS, ze as MS_TIME_THRESHOLD, Cn as ManualFeed, Li as MatrixChart, wn as MockAdapter, Be as NXT_SESSIONS, ue as PLUGIN_API_VERSION, A as POWERED_BY_LABEL, Ve as PRICE_SOURCES, Tn as PaperExecutionAdapter, Bi as PerformanceDashboard, ae as PluginManager, En as PollingAdapter, Dn as RANGE_PRESETS, On as ReconnectManager, kn as ReplayController, An as ReplayManager, jn as ResamplingAdapter, Mn as ReshapeMemo, He as SANS_FONT_FAMILY, Pi as ScatterChart, Nn as Screenshot, Pn as SessionBreaks, Fn as SessionShading, In as SignalMarkerManager, Ei as SparklineChart, Ln as StreamManager, Ue as TC_PALETTE, We as TC_SERIES_COLORS, Ge as TIMEFRAMES_CRYPTO, Ke as TIMEFRAMES_FOREX, qe as TIMEFRAMES_STOCK, j as TRADECANVAS_MARK_SVG, k as TRADECANVAS_URL, M as TRADECANVAS_WORDMARK_SVG, r as ThemeManager, Rn as TickAggregator, zn as TickBarAdapter, Bn as TickBarBuilder, Vn as TradeZoneManager, Je as UPCOM_SESSIONS, Hn as UndoRedoManager, v as UpbitAdapter, Ye as VN30F_SESSIONS, Xe as VN_COLORS, Ze as VOLUME_ALPHA, Un as VolumeRenderer, Oi as WaterfallChart, Wn as Watermark, Gn as WebSocketAdapter, Kn as adapterFromFeed, qn as axisTimes, Yn as barIndexToX, Qe as barTimeUnit, $e as barsAreDaily, oe as cleanLayoutName, ne as clearGlobalPlugins, q as computeDrawdownCurve, J as computeMonthlyReturns, et as computePriceLimits, tt as contrastRatio, ir as correlationMatrix, ar as counterClockPhase, sr as counterClockPoints, nt as createMarketTheme, Ci as createPoweredBy, rt as createVNTheme, lr as describeInputs, ur as detectCandlePatterns, hi as feedBars, dr as feedFromAdapter, it as formatFraction, at as formatNumber, fr as formatTooltipTime, ot as formatVND, st as formatVolumeLoc, ct as fractionTick, lt as getCurrentSession, u as getGlobalPlugins, ut as getLocale, pr as histogramBins, mr as indicatorCategory, dt as indicatorSource, ft as inkOn, hr as isDataFeed, _r as isPriceLevelAlert, pt as isPriceSource, mt as isTimeFrame, ht as isValidTimeZone, ee as localStorageLayouts, xr as lttbDownsample, Sr as lttbVisibleIndices, gt as marketStatus, o as memoryLayouts, Cr as niceScale, _t as normalizeBar, vt as normalizeBarTime, yt as offsetAt, R as opensElsewhere, wi as overlayScale, pe as overlaysForLayer, bt as parseIndicatorSource, se as parseOHLCV, xt as parseTimeframe, St as pickBaseTimeframe, s as pluginKey, B as poweredByHtml, P as poweredByLayout, Ct as priceFormatterFor, wt as priceStepAt, wr as priceToY, Tr as priceToYMapper, Dr as rangePresetStart, Tt as rankSymbols, Et as readNews, Dt as readQuote, Ot as readableOn, kt as registerLocale, l as registerPlugin, At as resampleBars, jt as roundToPriceStep, L as safeBadgeHref, Mt as scaleMarketPrices, Q as selectKeyStats, Vr as servesTimeframe, Nt as setLocale, Hr as setMaxWebGLCharts, Pt as sourcePrice, Ft as stepDecimals, It as symbolTimeZone, oi as syncIndicators, Lt as t, Rt as tickBarCount, zt as tickerOf, Wr as timeToX, Bt as timeframeBucketStart, Ht as timeframeToMs, Gr as timestampToBarIndex, K as toEquityPoints, qr as toHeikinAshi, Jr as toKagi, Yr as toLineBreak, Xr as toPointAndFigure, Zr as toRangeBars, Qr as toRenko, a as unregisterPlugin, Ut as usesKoreanUnits, Wt as vn30fContracts, Gt as vn30fLastTradingDay, Kt as volumeColor, qt as wallToUtc, $r as withResampling, ei as withTickBars, ti as xToBarIndex, ni as xToTime, ri as yToPrice, Jt as zoneOffsetMinutes };
973
+ export { $t as AlertManager, en as Animator, Ii as BarChart, tn as BarCountdown, nn as BinanceAdapter, rn as BybitAdapter, an as CANDLE_PATTERNS, he as CHART_STYLE_KEYS, di as CORRECTABLE_BARS, Bi as CalendarChart, f as Chart, ki as ChartGrid, on as ChartLegend, sn as ChartStateManager, cn as CoinbaseAdapter, ln as CompareRenderer, Hi as CounterClockChart, un as CrosshairTooltip, dn as CurrentPriceLine, ge as DARK_PRICE_LIMITS, _e as DARK_TERMINAL, ve as DARK_THEME, be as DEFAULT_DRAWING_STYLE, xe as DEFAULT_FONT_FAMILY, e as DEFAULT_HISTORY_PAGE_SIZE, fn as DEFAULT_LEGEND_CONFIG, pn as DEFAULT_MAX_WEBGL_CHARTS, Se as DEFAULT_RECONNECT, mn as DEFAULT_SESSION_HOURS, Ce as DEFAULT_SIGNAL_STYLE, we as DEFAULT_STREAM_CONFIG, Te as DEFAULT_TIMEFRAME_FAVORITES, Ee as DEFAULT_TRADE_ZONE_STYLE, De as DEFAULT_TRADING_CONFIG, hn as DataExporter, i as DataManager, ji as DepthChart, Li as DonutChart, ue as DragDropImporter, gn as DrawingBase, ie as EXCHANGE_TIMEZONE, u as EXCHANGE_TIME_ZONE, _n as Easing, H as EquityCurveChart, Fi as GaugeChart, oe as HISTORY_RETRY_MS, Oe as HNX_SESSIONS, ke as HOSE_SESSIONS, U as HeatmapChart, zi as HistogramChart, yn as INDICATOR_CATEGORIES, bn as IndicatorBase, xn as IndicatorValueMap, Sn as KEPT_BUCKETS, Ae as KRX_SESSIONS, je as KR_COLORS, Cn as KeyboardHandler, wn as KrakenAdapter, Me as LIGHT_PRICE_LIMITS, Ne as LIGHT_THEME, o as LayoutManager, fe as LayoutSession, Fe as MARKET_CRYPTO, Ie as MARKET_HNX, Le as MARKET_HOSE, h as MARKET_HOSE_ETF, g as MARKET_KRX, Re as MARKET_NXT, ze as MARKET_NYSE, Be as MARKET_UPBIT_KRW, Ve as MARKET_UPCOM, He as MARKET_VN30F, Tn as MAX_ALERT_BARS, le as MAX_LAYOUT_NAME, En as MIN_ALERT_BARS, Ue as MS_TIME_THRESHOLD, Dn as ManualFeed, Vi as MatrixChart, On as MockAdapter, We as NXT_SESSIONS, l as PLUGIN_API_VERSION, j as POWERED_BY_LABEL, Ge as PRICE_SOURCES, kn as PaperExecutionAdapter, Wi as PerformanceDashboard, te as PluginManager, An as PollingAdapter, jn as RANGE_PRESETS, Mn as ReconnectManager, Nn as ReplayController, Pn as ReplayManager, Fn as ResamplingAdapter, In as ReshapeMemo, Ke as SANS_FONT_FAMILY, Ri as ScatterChart, Ln as Screenshot, Rn as SessionBreaks, zn as SessionShading, Bn as SignalMarkerManager, Ai as SparklineChart, Vn as StreamManager, qe as TC_PALETTE, Je as TC_SERIES_COLORS, Ye as TIMEFRAMES_CRYPTO, Xe as TIMEFRAMES_FOREX, Ze as TIMEFRAMES_STOCK, M as TRADECANVAS_MARK_SVG, A as TRADECANVAS_URL, N as TRADECANVAS_WORDMARK_SVG, se as ThemeManager, Hn as TickAggregator, Un as TickBarAdapter, Wn as TickBarBuilder, Gn as TradeZoneManager, Qe as UPCOM_SESSIONS, y as UndoRedoManager, Kn as UpbitAdapter, $e as VN30F_SESSIONS, et as VN_COLORS, tt as VOLUME_ALPHA, qn as VolumeRenderer, Mi as WaterfallChart, Jn as Watermark, Yn as WebSocketAdapter, Xn as adapterFromFeed, Zn as axisTimes, $n as barIndexToX, nt as barTimeUnit, rt as barsAreDaily, de as cleanLayoutName, me as clearGlobalPlugins, q as computeDrawdownCurve, J as computeMonthlyReturns, it as computePriceLimits, at as contrastRatio, cr as correlationMatrix, lr as counterClockPhase, dr as counterClockPoints, ot as createMarketTheme, Di as createPoweredBy, st as createVNTheme, pr as describeInputs, mr as detectCandlePatterns, yi as feedBars, hr as feedFromAdapter, ct as formatFraction, lt as formatNumber, gr as formatTooltipTime, ut as formatVND, dt as formatVolumeLoc, ft as fractionTick, pt as getCurrentSession, c as getGlobalPlugins, mt as getLocale, _r as histogramBins, vr as indicatorCategory, ht as indicatorSource, gt as inkOn, yr as isDataFeed, xr as isPriceLevelAlert, _t as isPriceSource, vt as isTimeFrame, yt as isValidTimeZone, ae as localStorageLayouts, Tr as lttbDownsample, Er as lttbVisibleIndices, bt as marketStatus, ee as memoryLayouts, Dr as niceScale, xt as normalizeBar, St as normalizeBarTime, Ct as offsetAt, z as opensElsewhere, Oi as overlayScale, r as overlaysForLayer, wt as parseIndicatorSource, ce as parseOHLCV, Tt as parseTimeframe, Et as pickBaseTimeframe, n as pluginKey, V as poweredByHtml, F as poweredByLayout, Dt as priceFormatterFor, Ot as priceStepAt, Or as priceToY, kr as priceToYMapper, jr as rangePresetStart, kt as rankSymbols, At as readNews, jt as readQuote, Mt as readableOn, Nt as registerLocale, t as registerPlugin, Pt as resampleBars, Ft as roundToPriceStep, R as safeBadgeHref, It as scaleMarketPrices, Q as selectKeyStats, Gr as servesTimeframe, Lt as setLocale, Kr as setMaxWebGLCharts, Rt as sourcePrice, zt as stepDecimals, Bt as symbolTimeZone, ui as syncIndicators, Vt as t, Ht as tickBarCount, Ut as tickerOf, Jr as timeToX, Wt as timeframeBucketStart, Kt as timeframeToMs, Yr as timestampToBarIndex, K as toEquityPoints, Zr as toHeikinAshi, Qr as toKagi, $r as toLineBreak, ei as toPointAndFigure, ti as toRangeBars, ni as toRenko, pe as unregisterPlugin, qt as usesKoreanUnits, Jt as vn30fContracts, Yt as vn30fLastTradingDay, Xt as volumeColor, Zt as wallToUtc, ri as withResampling, ii as withTickBars, ai as xToBarIndex, oi as xToTime, si as yToPrice, Qt as zoneOffsetMinutes };
998
974
 
999
975
  //# sourceMappingURL=index.js.map