@luxalgo/vela 0.9.0 → 0.9.2

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 (126) hide show
  1. package/dist/{DataProvider-zJGp58kb.d.cts → DataProvider-B5i0_yY4.d.cts} +1 -1
  2. package/dist/{DataProvider-BGlB1zSc.d.ts → DataProvider-CPFgSyAm.d.ts} +1 -1
  3. package/dist/{chunk-4WAHYL7Y.js → chunk-4AMWSBOW.js} +33 -2
  4. package/dist/{chunk-YRCL3WMD.js → chunk-Q7POFYNE.js} +7 -1
  5. package/dist/{chunk-XIRSR3D6.js → chunk-W4WTHJFA.js} +50 -31
  6. package/dist/{contributions-BjefWpxQ.d.ts → contributions-BDx47Vk0.d.ts} +11 -3
  7. package/dist/{contributions-CpCJisTC.d.cts → contributions-BiF6lVvJ.d.cts} +11 -3
  8. package/dist/index.cjs +42 -22
  9. package/dist/index.d.cts +13 -11
  10. package/dist/index.d.ts +13 -11
  11. package/dist/index.js +2 -2
  12. package/dist/{keymap-UolhuXH1.d.ts → keymap-C48ughm6.d.ts} +1 -1
  13. package/dist/{keymap-B9_FLhfJ.d.cts → keymap-W0hiajU6.d.cts} +1 -1
  14. package/dist/locales/ar.cjs +2 -0
  15. package/dist/locales/ar.d.cts +1 -1
  16. package/dist/locales/ar.d.ts +1 -1
  17. package/dist/locales/ar.js +2 -0
  18. package/dist/locales/de.cjs +2 -0
  19. package/dist/locales/de.d.cts +1 -1
  20. package/dist/locales/de.d.ts +1 -1
  21. package/dist/locales/de.js +2 -0
  22. package/dist/locales/en.cjs +2 -0
  23. package/dist/locales/en.d.cts +1 -1
  24. package/dist/locales/en.d.ts +1 -1
  25. package/dist/locales/en.js +2 -0
  26. package/dist/locales/es.cjs +2 -0
  27. package/dist/locales/es.d.cts +1 -1
  28. package/dist/locales/es.d.ts +1 -1
  29. package/dist/locales/es.js +2 -0
  30. package/dist/locales/fr.cjs +2 -0
  31. package/dist/locales/fr.d.cts +1 -1
  32. package/dist/locales/fr.d.ts +1 -1
  33. package/dist/locales/fr.js +2 -0
  34. package/dist/locales/he.cjs +2 -0
  35. package/dist/locales/he.d.cts +1 -1
  36. package/dist/locales/he.d.ts +1 -1
  37. package/dist/locales/he.js +2 -0
  38. package/dist/locales/hi.cjs +2 -0
  39. package/dist/locales/hi.d.cts +1 -1
  40. package/dist/locales/hi.d.ts +1 -1
  41. package/dist/locales/hi.js +2 -0
  42. package/dist/locales/id.cjs +2 -0
  43. package/dist/locales/id.d.cts +1 -1
  44. package/dist/locales/id.d.ts +1 -1
  45. package/dist/locales/id.js +2 -0
  46. package/dist/locales/it.cjs +2 -0
  47. package/dist/locales/it.d.cts +1 -1
  48. package/dist/locales/it.d.ts +1 -1
  49. package/dist/locales/it.js +2 -0
  50. package/dist/locales/ja.cjs +2 -0
  51. package/dist/locales/ja.d.cts +1 -1
  52. package/dist/locales/ja.d.ts +1 -1
  53. package/dist/locales/ja.js +2 -0
  54. package/dist/locales/ko.cjs +2 -0
  55. package/dist/locales/ko.d.cts +1 -1
  56. package/dist/locales/ko.d.ts +1 -1
  57. package/dist/locales/ko.js +2 -0
  58. package/dist/locales/ms.cjs +2 -0
  59. package/dist/locales/ms.d.cts +1 -1
  60. package/dist/locales/ms.d.ts +1 -1
  61. package/dist/locales/ms.js +2 -0
  62. package/dist/locales/pl.cjs +2 -0
  63. package/dist/locales/pl.d.cts +1 -1
  64. package/dist/locales/pl.d.ts +1 -1
  65. package/dist/locales/pl.js +2 -0
  66. package/dist/locales/pt-BR.cjs +2 -0
  67. package/dist/locales/pt-BR.d.cts +1 -1
  68. package/dist/locales/pt-BR.d.ts +1 -1
  69. package/dist/locales/pt-BR.js +2 -0
  70. package/dist/locales/ru.cjs +2 -0
  71. package/dist/locales/ru.d.cts +1 -1
  72. package/dist/locales/ru.d.ts +1 -1
  73. package/dist/locales/ru.js +2 -0
  74. package/dist/locales/th.cjs +2 -0
  75. package/dist/locales/th.d.cts +1 -1
  76. package/dist/locales/th.d.ts +1 -1
  77. package/dist/locales/th.js +2 -0
  78. package/dist/locales/tr.cjs +2 -0
  79. package/dist/locales/tr.d.cts +1 -1
  80. package/dist/locales/tr.d.ts +1 -1
  81. package/dist/locales/tr.js +2 -0
  82. package/dist/locales/vi.cjs +2 -0
  83. package/dist/locales/vi.d.cts +1 -1
  84. package/dist/locales/vi.d.ts +1 -1
  85. package/dist/locales/vi.js +2 -0
  86. package/dist/locales/zh-Hans.cjs +2 -0
  87. package/dist/locales/zh-Hans.d.cts +1 -1
  88. package/dist/locales/zh-Hans.d.ts +1 -1
  89. package/dist/locales/zh-Hans.js +2 -0
  90. package/dist/locales/zh-Hant.cjs +2 -0
  91. package/dist/locales/zh-Hant.d.cts +1 -1
  92. package/dist/locales/zh-Hant.d.ts +1 -1
  93. package/dist/locales/zh-Hant.js +2 -0
  94. package/dist/{options-D4L3_hv_.d.ts → options-B7aL1pbf.d.ts} +1 -1
  95. package/dist/{options-CpegHml_.d.cts → options-I1H2HDWw.d.cts} +1 -1
  96. package/dist/{plugin-DTmulpKM.d.ts → plugin-CbSGKQLB.d.ts} +6 -6
  97. package/dist/{plugin-DpNp4aBi.d.cts → plugin-ZknmqQqo.d.cts} +6 -6
  98. package/dist/plugin.cjs +1 -0
  99. package/dist/plugin.d.cts +7 -7
  100. package/dist/plugin.d.ts +7 -7
  101. package/dist/plugin.js +1 -1
  102. package/dist/providers/binance.d.cts +3 -3
  103. package/dist/providers/binance.d.ts +3 -3
  104. package/dist/providers/coinbase.d.cts +3 -3
  105. package/dist/providers/coinbase.d.ts +3 -3
  106. package/dist/providers/hyperliquid.d.cts +3 -3
  107. package/dist/providers/hyperliquid.d.ts +3 -3
  108. package/dist/{side-panel-CYmH1Opm.d.ts → side-panel-BEQJqSjR.d.cts} +2 -1
  109. package/dist/{side-panel-BqUnpfev.d.cts → side-panel-Ud0SBAnE.d.ts} +2 -1
  110. package/dist/{statusline-model-pGs3Xvp-.d.cts → statusline-model-CwYMw_Yl.d.cts} +7 -4
  111. package/dist/{statusline-model-C3yIY9WE.d.ts → statusline-model-ny7GXRuS.d.ts} +7 -4
  112. package/dist/{types-BlrXRLIR.d.cts → types-Bwf63xGI.d.cts} +4 -1
  113. package/dist/{types-BlrXRLIR.d.ts → types-Bwf63xGI.d.ts} +4 -1
  114. package/dist/ui.d.cts +3 -3
  115. package/dist/ui.d.ts +3 -3
  116. package/dist/vela.global.js +42 -22
  117. package/dist/vela.global.min.js +55 -55
  118. package/dist/widget.cjs +82 -26
  119. package/dist/widget.d.cts +10 -10
  120. package/dist/widget.d.ts +10 -10
  121. package/dist/widget.js +4 -4
  122. package/dist/workspace.cjs +82 -26
  123. package/dist/workspace.d.cts +7 -7
  124. package/dist/workspace.d.ts +7 -7
  125. package/dist/workspace.js +3 -3
  126. package/package.json +1 -1
package/dist/widget.cjs CHANGED
@@ -6971,6 +6971,7 @@ function mergeConfig(base, patch) {
6971
6971
  mode: isScaleMode(ps.mode) ? ps.mode : base.priceScale.mode,
6972
6972
  log: isBool(ps.log) ? ps.log : base.priceScale.log,
6973
6973
  invert: isBool(ps.invert) ? ps.invert : base.priceScale.invert,
6974
+ priceOnly: isBool(ps.priceOnly) ? ps.priceOnly : base.priceScale.priceOnly,
6974
6975
  borderColor: isColor(ps.borderColor) ? ps.borderColor : base.priceScale.borderColor,
6975
6976
  labelsVisible: isBool(ps.labelsVisible) ? ps.labelsVisible : base.priceScale.labelsVisible,
6976
6977
  currentPriceLine: isBool(ps.currentPriceLine) ? ps.currentPriceLine : base.priceScale.currentPriceLine,
@@ -18859,6 +18860,7 @@ var TEXT20 = {
18859
18860
  indexed: msg("widget.contextMenu.scale.indexed", "Indexed to 100"),
18860
18861
  log: msg("widget.contextMenu.scale.log", "Logarithmic"),
18861
18862
  auto: msg("widget.contextMenu.auto", "Auto (fits data to screen)"),
18863
+ priceOnly: msg("widget.contextMenu.scalePriceOnly", "Scale price chart only"),
18862
18864
  invert: msg("widget.contextMenu.invert", "Invert scale"),
18863
18865
  labels: msg("widget.contextMenu.labels", "Labels"),
18864
18866
  axisLabels: msg("widget.contextMenu.axisLabels", "Price axis labels"),
@@ -18916,6 +18918,9 @@ function scaleWrites(choice, pane) {
18916
18918
  ["logScale", { pane: pane.id, value: log }]
18917
18919
  ];
18918
18920
  }
18921
+ function priceOnlyState(pane, flag) {
18922
+ return mainScale(pane) ? flag : void 0;
18923
+ }
18919
18924
  function invertWrite(next, pane) {
18920
18925
  return mainScale(pane) ? ["invertScale", next] : ["invertScale", { pane: pane.id, value: next }];
18921
18926
  }
@@ -18923,6 +18928,7 @@ function priceAxisItems(s, i18n) {
18923
18928
  const t = (m) => textOf(i18n, m);
18924
18929
  return [
18925
18930
  { id: "auto", label: t(TEXT20.auto), checked: s.auto },
18931
+ ...s.priceOnly === void 0 ? [] : [{ id: "price-only", label: t(TEXT20.priceOnly), checked: s.priceOnly }],
18926
18932
  { id: "invert", label: t(TEXT20.invert), checked: s.invert },
18927
18933
  ...SCALE_CHOICES.map(([choice, label], i) => ({
18928
18934
  id: `scale:${choice}`,
@@ -18971,6 +18977,7 @@ var CONTEXT_MENU_BUILTIN_ORDER = {
18971
18977
  body: { "reset-view": -30, "remove-drawings": -20, "remove-indicators": -10, settings: 1e3 },
18972
18978
  "price-axis": {
18973
18979
  auto: -80,
18980
+ "price-only": -75,
18974
18981
  invert: -70,
18975
18982
  "scale:regular": -60,
18976
18983
  "scale:percent": -50,
@@ -19057,6 +19064,7 @@ var PriceScaleDrawer = class {
19057
19064
  const pane = this.pane;
19058
19065
  const items = priceAxisItems({
19059
19066
  auto: chart.renderer.get("autoScale") !== false,
19067
+ priceOnly: priceOnlyState(pane, this.flag("scalePriceOnly")),
19060
19068
  invert: pane ? pane.invert : this.flag("invertScale"),
19061
19069
  choice: scaleChoiceOf(pane ?? { mode: String(chart.renderer.get("scaleMode") ?? "price"), log: this.flag("logScale") }),
19062
19070
  axisLabels: this.flag("axisLabels"),
@@ -19133,6 +19141,16 @@ var PriceScaleDrawer = class {
19133
19141
  });
19134
19142
  continue;
19135
19143
  }
19144
+ if (item.id === "price-only") {
19145
+ row2(item.label, {
19146
+ checked: item.checked,
19147
+ onClick: () => {
19148
+ chart.renderer.set("scalePriceOnly", !this.flag("scalePriceOnly"));
19149
+ this.render();
19150
+ }
19151
+ });
19152
+ continue;
19153
+ }
19136
19154
  if (item.id === "invert") {
19137
19155
  row2(item.label, {
19138
19156
  checked: item.checked,
@@ -21452,6 +21470,7 @@ function successorNative(entry) {
21452
21470
  const hasInputs = Object.keys(inputs).length > 0;
21453
21471
  return hasInputs || hidden ? { type: next, ...hasInputs ? { inputs } : {}, ...hidden ? { hidden } : {} } : next;
21454
21472
  }
21473
+ var STATUSLINE_PART_KEYS = ["logo", "name", "market", "ohlc", "change"];
21455
21474
  function sanitizeCell(raw) {
21456
21475
  if (raw == null || typeof raw !== "object") return null;
21457
21476
  const c = raw;
@@ -21466,6 +21485,12 @@ function sanitizeCell(raw) {
21466
21485
  if (typeof c.replayWatermark === "boolean") out.replayWatermark = c.replayWatermark;
21467
21486
  if (typeof c.indicatorTitles === "boolean") out.indicatorTitles = c.indicatorTitles;
21468
21487
  if (typeof c.indicatorValues === "boolean") out.indicatorValues = c.indicatorValues;
21488
+ if (c.statuslineParts != null && typeof c.statuslineParts === "object") {
21489
+ const bag = c.statuslineParts;
21490
+ const parts = {};
21491
+ for (const key of STATUSLINE_PART_KEYS) if (typeof bag[key] === "boolean") parts[key] = bag[key];
21492
+ if (Object.keys(parts).length > 0) out.statuslineParts = parts;
21493
+ }
21469
21494
  if (c.rendererConfig != null && typeof c.rendererConfig === "object") out.rendererConfig = c.rendererConfig;
21470
21495
  if (c.drawings != null && typeof c.drawings === "object") out.drawings = c.drawings;
21471
21496
  const ind = c.indicators;
@@ -22458,7 +22483,8 @@ var EngineOrchestrator = class _EngineOrchestrator {
22458
22483
  symbol: this.config.market.symbol ?? "TEST",
22459
22484
  timeframe: this.config.market.timeframe ?? "60",
22460
22485
  symbolInfo: this.feed.symbolInfo?.(this.config.market),
22461
- chartStyle: this.priceStyle
22486
+ chartStyle: this.priceStyle,
22487
+ session: this.config.market.session
22462
22488
  };
22463
22489
  }
22464
22490
  /**
@@ -30117,6 +30143,9 @@ var SceneGraph = class {
30117
30143
  this.logScale = false;
30118
30144
  /** Inverted price axis on the price pane (high at the bottom). Study panes carry their own. */
30119
30145
  this.invertScale = false;
30146
+ /** The price pane's autoscale fits the bars alone: indicator plots, their price lines
30147
+ * and Pine drawings paint where they fall instead of widening the window. */
30148
+ this.scalePriceOnly = false;
30120
30149
  /** Exchange tick size for the active symbol (e.g. 0.01), when known. Drives the
30121
30150
  * price-axis decimals — the instrument's true precision instead of the zoom-derived
30122
30151
  * formula. Undefined until symbol metadata loads (the formula is the fallback). */
@@ -31815,6 +31844,18 @@ var DrawingSceneRenderer = class {
31815
31844
  }
31816
31845
  };
31817
31846
 
31847
+ // src/renderers/native/chrome/tz.ts
31848
+ var DAY_MS3 = 864e5;
31849
+ function displayZone(timeZone, barIntervalMs) {
31850
+ return barIntervalMs >= DAY_MS3 ? "UTC" : timeZone;
31851
+ }
31852
+ function tzOffsetMs(ms, timeZone) {
31853
+ return zoneOffsetMs(ms, timeZone);
31854
+ }
31855
+ function zonedDate(ms, timeZone) {
31856
+ return new Date(ms + tzOffsetMs(ms, timeZone));
31857
+ }
31858
+
31818
31859
  // src/renderers/native/chrome/ticks.ts
31819
31860
  function priceTicks(min, max, target = 6) {
31820
31861
  if (!(max > min) || !Number.isFinite(min) || !Number.isFinite(max)) return [];
@@ -31955,7 +31996,7 @@ var STEP_LADDER = [
31955
31996
  YEAR
31956
31997
  ];
31957
31998
  function formatTimeStamp2(ms, timeZone, barIntervalMs, fmt = ENGLISH_FORMAT, surface = "crosshair") {
31958
- return fmt.timeStamp(ms, { timeZone, withTime: barIntervalMs < DAY2, surface });
31999
+ return fmt.timeStamp(ms, { timeZone: displayZone(timeZone, barIntervalMs), withTime: barIntervalMs < DAY2, surface });
31959
32000
  }
31960
32001
  function pickStep(targetMs) {
31961
32002
  for (const step of STEP_LADDER) if (step >= targetMs) return step;
@@ -32099,14 +32140,6 @@ var PriceAxisTickSource = class {
32099
32140
  }
32100
32141
  };
32101
32142
 
32102
- // src/renderers/native/chrome/tz.ts
32103
- function tzOffsetMs(ms, timeZone) {
32104
- return zoneOffsetMs(ms, timeZone);
32105
- }
32106
- function zonedDate(ms, timeZone) {
32107
- return new Date(ms + tzOffsetMs(ms, timeZone));
32108
- }
32109
-
32110
32143
  // src/renderers/native/chrome/countdown.ts
32111
32144
  function countdownText2(barOpen, barMs, now2, fmt = ENGLISH_FORMAT) {
32112
32145
  if (!(barMs > 0)) return null;
@@ -32820,7 +32853,7 @@ var ChromeRenderer = class {
32820
32853
  ctx.textAlign = "center";
32821
32854
  const y = dataH + (fullH - dataH) / 2;
32822
32855
  const tr = coords.visibleTimeRange();
32823
- const offset = tzOffsetMs((tr.from + tr.to) / 2, scene.timezone);
32856
+ const offset = tzOffsetMs((tr.from + tr.to) / 2, displayZone(scene.timezone, coords.barInterval));
32824
32857
  const target = Math.max(3, Math.min(8, Math.floor(dataW / 64)));
32825
32858
  const ticks = timeTicks(tr.from, tr.to, target, offset, scene.format).map((tick) => ({ ...tick, x: coords.timeToX(tick.time), half: ctx.measureText(tick.label).width / 2 })).filter((tick) => tick.x >= 20 && tick.x <= dataW - 20);
32826
32859
  const GAP = 12;
@@ -33308,6 +33341,7 @@ var TEXT28 = {
33308
33341
  indexedTo100: msg("chart.settings.indexedTo100", "Indexed to 100"),
33309
33342
  logarithmic: msg("chart.settings.logarithmic", "Logarithmic"),
33310
33343
  invertScale: msg("chart.settings.invertScale", "Invert scale"),
33344
+ scalePriceOnly: msg("chart.settings.scalePriceOnly", "Scale price chart only"),
33311
33345
  lastPriceLine: msg("chart.settings.lastPriceLine", "Last price line"),
33312
33346
  lastPriceLabel: msg("chart.settings.lastPriceLabel", "Last price label"),
33313
33347
  countdownToBarClose: msg("chart.settings.countdownToBarClose", "Countdown to bar close"),
@@ -33816,6 +33850,7 @@ var SettingsDialog = class {
33816
33850
  ), "scales.price-scale.mode")
33817
33851
  );
33818
33852
  body.append(sid(this.boolRow(TEXT28.invertScale, config.priceScale.invert, (v) => this.emit({ priceScale: { invert: v } })), "scales.price-scale.invert"));
33853
+ body.append(sid(this.boolRow(TEXT28.scalePriceOnly, config.priceScale.priceOnly, (v) => this.emit({ priceScale: { priceOnly: v } })), "scales.price-scale.price-only"));
33819
33854
  body.append(sid(this.separator(), "scales.price-scale"));
33820
33855
  body.append(sid(this.boolRow(TEXT28.lastPriceLine, config.priceScale.currentPriceLine, (v) => this.emit({ priceScale: { currentPriceLine: v } })), "scales.price-scale.last-price-line"));
33821
33856
  body.append(sid(this.boolRow(TEXT28.lastPriceLabel, config.priceScale.priceLabel, (v) => this.emit({ priceScale: { priceLabel: v } })), "scales.price-scale.last-price-label"));
@@ -41247,7 +41282,7 @@ var BackdropRenderer = class {
41247
41282
  ctx.globalAlpha = gridAlpha;
41248
41283
  ctx.strokeStyle = vertColor;
41249
41284
  const tr = coords.visibleTimeRange();
41250
- const offset = tzOffsetMs((tr.from + tr.to) / 2, scene.timezone);
41285
+ const offset = tzOffsetMs((tr.from + tr.to) / 2, displayZone(scene.timezone, coords.barInterval));
41251
41286
  ctx.beginPath();
41252
41287
  for (const tick of timeTicks(tr.from, tr.to, 8, offset)) {
41253
41288
  const x = Math.round(coords.timeToX(tick.time)) + 0.5;
@@ -42039,7 +42074,7 @@ var NativeRenderer = class {
42039
42074
  this.priceStyleCbs = /* @__PURE__ */ new Set();
42040
42075
  this.priceStyleWillChangeCbs = /* @__PURE__ */ new Set();
42041
42076
  this.name = "native";
42042
- this.features = ["logScale", "currentPriceLine", "priceLabel", "countdown", "upColor", "downColor", "glow", "animZoom", "animPan", "animScroll", "animAutoscale", "animLiveBar", "intro", "zoomAnchor", "axisDrag", "paneResize", "candleZOrder", "candleVisible", "seriesOrder", "highlights", "sessionZones", "gridlines", "axisLabels", "scaleMode", "invertScale", "paneScales", "autoScale", "timezone", "keyboard", "historyChords", "priceStyle", "priceBaseline", "baselinePrice", "settings", "attribution", "dialogHost", "tradeMarkers", "marks", "indicatorTitles", "indicatorValues", "crosshairOverride", "drawingsInteractive", "priceAxisTicks"];
42077
+ this.features = ["logScale", "currentPriceLine", "priceLabel", "countdown", "upColor", "downColor", "glow", "animZoom", "animPan", "animScroll", "animAutoscale", "animLiveBar", "intro", "zoomAnchor", "axisDrag", "paneResize", "candleZOrder", "candleVisible", "seriesOrder", "highlights", "sessionZones", "gridlines", "axisLabels", "scaleMode", "invertScale", "scalePriceOnly", "paneScales", "autoScale", "timezone", "keyboard", "historyChords", "priceStyle", "priceBaseline", "baselinePrice", "settings", "attribution", "dialogHost", "tradeMarkers", "marks", "indicatorTitles", "indicatorValues", "crosshairOverride", "drawingsInteractive", "priceAxisTicks"];
42043
42078
  /** Track cursor proximity to the scroll button on the plot (bubbles from the button too,
42044
42079
  * so moving onto the button doesn't count as leaving). */
42045
42080
  this.onScrollProximityMove = (e) => {
@@ -42198,6 +42233,9 @@ var NativeRenderer = class {
42198
42233
  }
42199
42234
  this.scene.invertScale = Boolean(value);
42200
42235
  break;
42236
+ case "scalePriceOnly":
42237
+ this.scene.scalePriceOnly = Boolean(value);
42238
+ break;
42201
42239
  case "autoScale":
42202
42240
  for (const pane of this.scene.panes.values()) {
42203
42241
  pane.manualScale = value ? null : { ...pane.scale };
@@ -42324,6 +42362,8 @@ var NativeRenderer = class {
42324
42362
  return this.scene.scaleMode;
42325
42363
  case "invertScale":
42326
42364
  return this.scene.invertScale;
42365
+ case "scalePriceOnly":
42366
+ return this.scene.scalePriceOnly;
42327
42367
  case "paneScales":
42328
42368
  return this.paneScaleInfos();
42329
42369
  case "autoScale": {
@@ -42470,6 +42510,7 @@ var NativeRenderer = class {
42470
42510
  mode: this.scene.scaleMode,
42471
42511
  log: this.scene.logScale,
42472
42512
  invert: this.scene.invertScale,
42513
+ priceOnly: this.scene.scalePriceOnly,
42473
42514
  borderColor: s.borderColor ?? t.borderColor,
42474
42515
  labelsVisible: this.scene.showAxisLabels,
42475
42516
  currentPriceLine: this.scene.showPriceLine,
@@ -42584,6 +42625,7 @@ var NativeRenderer = class {
42584
42625
  this.scene.scaleMode = next.priceScale.mode;
42585
42626
  this.scene.logScale = next.priceScale.log;
42586
42627
  this.scene.invertScale = next.priceScale.invert;
42628
+ this.scene.scalePriceOnly = next.priceScale.priceOnly;
42587
42629
  s.borderColor = keepInherit(s.borderColor, next.priceScale.borderColor, prevTheme.borderColor);
42588
42630
  this.scene.showAxisLabels = next.priceScale.labelsVisible;
42589
42631
  this.scene.showPriceLine = next.priceScale.currentPriceLine;
@@ -44565,7 +44607,7 @@ var NativeRenderer = class {
44565
44607
  const pricePane = this.dataWindowPricePane();
44566
44608
  const ohlc = this.dataWindowOHLC(bar, pricePane);
44567
44609
  const parts = [];
44568
- if (bar) parts.push(formatStamp(bar.time, this.scene.timezone));
44610
+ if (bar) parts.push(formatStamp(bar.time, displayZone(this.scene.timezone, this.coords.barInterval)));
44569
44611
  if (ohlc) parts.push(this.t(TEXT35.barSummary, { open: ohlc.o, high: ohlc.h, low: ohlc.l, close: ohlc.c }));
44570
44612
  for (const group of this.dataWindowGroups(idx, pricePane)) {
44571
44613
  for (const row2 of group.rows) parts.push(this.t(TEXT35.valueSummary, { name: row2.label, value: row2.value }));
@@ -44582,7 +44624,7 @@ var NativeRenderer = class {
44582
44624
  const idx = this.hoverLogical != null ? this.hoverLogical : n - 1;
44583
44625
  const bar = this.bars[idx];
44584
44626
  const pricePane = this.dataWindowPricePane();
44585
- const parts = bar ? formatStampParts(bar.time, this.scene.timezone) : { date: "", time: "" };
44627
+ const parts = bar ? formatStampParts(bar.time, displayZone(this.scene.timezone, this.coords.barInterval)) : { date: "", time: "" };
44586
44628
  return { date: parts.date, time: parts.time, ohlc: this.dataWindowOHLC(bar, pricePane), groups: this.dataWindowGroups(idx, pricePane) };
44587
44629
  }
44588
44630
  dataWindowPricePane() {
@@ -44949,7 +44991,8 @@ var NativeRenderer = class {
44949
44991
  if (or) dr = dr ? { min: Math.min(dr.min, or.min), max: Math.max(dr.max, or.max) } : or;
44950
44992
  }
44951
44993
  const includeCandles = pane.kind === "price" && (!this.scene.candlesHidden || this.priceLayersAnchoredToBars(masterModels) || !this.paneHasMeasurableContent(masterModels, dr));
44952
- pane.scaleTarget = computePaneScale(masterModels, this.bars, includeCandles, i0, s1, dr, paneLogScale(this.scene, pane), (id) => this.scene.offsetOf(id), margins);
44994
+ const priceOnly = pane === pricePane && this.scene.scalePriceOnly && includeCandles;
44995
+ pane.scaleTarget = priceOnly ? computePaneScale([], this.bars, true, i0, s1, null, paneLogScale(this.scene, pane), (id) => this.scene.offsetOf(id), margins) : computePaneScale(masterModels, this.bars, includeCandles, i0, s1, dr, paneLogScale(this.scene, pane), (id) => this.scene.offsetOf(id), margins);
44953
44996
  pane.percentBaseline = pane.kind === "price" ? this.bars[i0]?.close ?? 0 : this.firstVisibleValue(masterModels, i0);
44954
44997
  pane.axisFormat = void 0;
44955
44998
  pane.axisBands = void 0;
@@ -49245,16 +49288,16 @@ var volumeSpecs = [
49245
49288
  ];
49246
49289
 
49247
49290
  // src/core/native-indicators/classics/overlays.ts
49248
- var DAY_MS3 = 864e5;
49291
+ var DAY_MS4 = 864e5;
49249
49292
  function periodKey(anchor, time) {
49250
- if (anchor === "Week") return Math.floor((Math.floor(time / DAY_MS3) + 3) / 7);
49293
+ if (anchor === "Week") return Math.floor((Math.floor(time / DAY_MS4) + 3) / 7);
49251
49294
  if (anchor === "Month" || anchor === "Quarter" || anchor === "Year") {
49252
49295
  const d = new Date(time);
49253
49296
  if (anchor === "Year") return d.getUTCFullYear();
49254
49297
  if (anchor === "Quarter") return d.getUTCFullYear() * 4 + Math.floor(d.getUTCMonth() / 3);
49255
49298
  return d.getUTCFullYear() * 12 + d.getUTCMonth();
49256
49299
  }
49257
- return Math.floor(time / DAY_MS3);
49300
+ return Math.floor(time / DAY_MS4);
49258
49301
  }
49259
49302
  function barInterval(bars) {
49260
49303
  if (bars.length < 2) return 0;
@@ -49356,7 +49399,7 @@ var vwap = {
49356
49399
  const anchor = str3(inputs, "anchor", "Session");
49357
49400
  const src = sourceValues(bars, str3(inputs, "source", "HLC3"));
49358
49401
  const n = bars.length;
49359
- const hidden = bool(inputs, "hideDwm", true) && barInterval(bars) >= DAY_MS3;
49402
+ const hidden = bool(inputs, "hideDwm", true) && barInterval(bars) >= DAY_MS4;
49360
49403
  const values = new Array(n).fill(Number.NaN);
49361
49404
  const bands = VWAP_BANDS.filter((b) => bool(inputs, b.show, b.defOn)).map((b) => ({
49362
49405
  mult: Math.max(0, num3(inputs, b.mult, b.defMult)),
@@ -49430,7 +49473,7 @@ var pivotPoints = {
49430
49473
  compute: (bars, inputs) => {
49431
49474
  const interval = barInterval(bars);
49432
49475
  const requested = str3(inputs, "anchor", PIVOT_AUTO);
49433
- const auto = interval <= 15 * 6e4 ? "Session" : interval < DAY_MS3 ? "Week" : interval <= DAY_MS3 ? "Month" : "Year";
49476
+ const auto = interval <= 15 * 6e4 ? "Session" : interval < DAY_MS4 ? "Week" : interval <= DAY_MS4 ? "Month" : "Year";
49434
49477
  const anchor = requested === "Daily" ? "Session" : requested === "Weekly" ? "Week" : requested === "Monthly" ? "Month" : requested === "Yearly" ? "Year" : auto;
49435
49478
  const kind = str3(inputs, "kind", PIVOT_TRADITIONAL);
49436
49479
  const aggs = /* @__PURE__ */ new Map();
@@ -49516,7 +49559,7 @@ var fiftyTwoWeek = {
49516
49559
  colorInput(NEUTRAL, msg("indicator.n52WeekHighLow.allTimeColor", "All-Time High/Low"), "allTimeColor", msg("indicator.n52WeekHighLow.allTimeColor.tooltip", "Color of the all-time high and all-time low levels."))
49517
49560
  ],
49518
49561
  compute: (bars, inputs) => {
49519
- const span = num3(inputs, "weeks", 52) * 7 * DAY_MS3;
49562
+ const span = num3(inputs, "weeks", 52) * 7 * DAY_MS4;
49520
49563
  const n = bars.length;
49521
49564
  const hi = new Array(n).fill(Number.NaN);
49522
49565
  const lo = new Array(n).fill(Number.NaN);
@@ -50715,7 +50758,7 @@ var Statusline = class {
50715
50758
  };
50716
50759
 
50717
50760
  // src/widget/session-shading.ts
50718
- var DAY_MS4 = 864e5;
50761
+ var DAY_MS5 = 864e5;
50719
50762
  var MINUTE_MS = 6e4;
50720
50763
  function parseWindow(text, allowOvernight = false) {
50721
50764
  if (typeof text !== "string") return null;
@@ -50794,7 +50837,7 @@ function expandSessionZones(spec, from, to) {
50794
50837
  const dtf = civilFormatter(spec.timezone);
50795
50838
  if (!dtf || !Number.isFinite(from) || !Number.isFinite(to)) return { pre, post, extended };
50796
50839
  const seen = /* @__PURE__ */ new Set();
50797
- for (let cursor = from - DAY_MS4; cursor < to + DAY_MS4; cursor += DAY_MS4) {
50840
+ for (let cursor = from - DAY_MS5; cursor < to + DAY_MS5; cursor += DAY_MS5) {
50798
50841
  const civil = civilParts(dtf, cursor);
50799
50842
  const key = civil.year * 1e4 + civil.month * 100 + civil.day;
50800
50843
  if (!Number.isFinite(key) || seen.has(key)) continue;
@@ -50819,7 +50862,7 @@ function expandSessionZones(spec, from, to) {
50819
50862
  }
50820
50863
  return { pre, post, extended: mergeAbutting(extended) };
50821
50864
  }
50822
- var COVER_PAD_MIN_MS = 2 * DAY_MS4;
50865
+ var COVER_PAD_MIN_MS = 2 * DAY_MS5;
50823
50866
  var SessionShadingTracker = class {
50824
50867
  constructor(onZones) {
50825
50868
  this.onZones = onZones;
@@ -50843,7 +50886,7 @@ var SessionShadingTracker = class {
50843
50886
  this.covered = null;
50844
50887
  this.session = opts.session;
50845
50888
  const tfMs = timeframeMs(opts.timeframe);
50846
- this.intraday = Number.isFinite(tfMs) && tfMs < DAY_MS4;
50889
+ this.intraday = Number.isFinite(tfMs) && tfMs < DAY_MS5;
50847
50890
  this.lastRange = opts.range;
50848
50891
  void data.symbolInfo(symbol).catch(() => void 0).then((si) => {
50849
50892
  if (my !== this.epoch) return;
@@ -51405,6 +51448,7 @@ var ChartContextMenu = class {
51405
51448
  const pane = this.lastPane;
51406
51449
  return priceAxisItems({
51407
51450
  auto: this.chart?.renderer.get("autoScale") !== false,
51451
+ priceOnly: priceOnlyState(pane, this.flag("scalePriceOnly")),
51408
51452
  invert: pane ? pane.invert : this.flag("invertScale"),
51409
51453
  choice: scaleChoiceOf(pane ?? { mode: String(this.chart?.renderer.get("scaleMode") ?? "price"), log: this.flag("logScale") }),
51410
51454
  axisLabels: this.flag("axisLabels"),
@@ -51443,6 +51487,8 @@ var ChartContextMenu = class {
51443
51487
  else chart.renderer.set("timezone", resolveTimezone(zone, void 0));
51444
51488
  } else if (id === "auto") {
51445
51489
  chart.renderer.set("autoScale", chart.renderer.get("autoScale") === false);
51490
+ } else if (id === "price-only") {
51491
+ chart.renderer.set("scalePriceOnly", !this.flag("scalePriceOnly"));
51446
51492
  } else if (id === "invert") {
51447
51493
  const pane = this.lastPane;
51448
51494
  const [feature, value] = invertWrite(!(pane ? pane.invert : this.flag("invertScale")), pane);
@@ -51593,6 +51639,9 @@ function instanceDeltas(handle) {
51593
51639
  const props = inputDeltas(handle.props, handle.propValues());
51594
51640
  return inputs || props ? { ...inputs ? { inputs } : {}, ...props ? { props } : {} } : void 0;
51595
51641
  }
51642
+ function statuslinePartEntries(parts) {
51643
+ return Object.entries(parts ?? {}).filter((e) => typeof e[1] === "boolean");
51644
+ }
51596
51645
  function nativeAliases(type, i18n) {
51597
51646
  const entry = nativeIndicatorEntry(type);
51598
51647
  if (!entry) return {};
@@ -51768,6 +51817,7 @@ var ChartCell = class {
51768
51817
  this.inner.on("replay:end", () => this.watermark?.setReplaying(false));
51769
51818
  this.statusline = deps.statusline ? new Statusline(this.host, symbol ?? "", (sym) => this.inner?.data.symbolIcon(sym)) : null;
51770
51819
  this.statusline?.setMeta(seed.timeframe ?? "60", this.state.provider ?? "");
51820
+ for (const [part, visible] of statuslinePartEntries(seed.statuslineParts)) this.statusline?.setPartVisible(part, visible);
51771
51821
  this.statusline?.onChart(this.inner);
51772
51822
  this.statusline?.attachMenu({
51773
51823
  setPart: (part, visible) => this.setStatuslinePart(part, visible),
@@ -52180,6 +52230,7 @@ var ChartCell = class {
52180
52230
  /** Show/hide one status-line segment (the settings dialog's Status line tab). */
52181
52231
  setStatuslinePart(part, visible) {
52182
52232
  this.statusline?.setPartVisible(part, visible);
52233
+ this.deps.onStateDirty();
52183
52234
  this.deps.onStatusPrefsChanged(this.id);
52184
52235
  }
52185
52236
  /** This cell's Status line tab and watermark prefs as one bundle (see {@link CellStatusPrefs}). */
@@ -52662,6 +52713,9 @@ var ChartCell = class {
52662
52713
  if (cs.replayWatermark !== void 0 && cs.replayWatermark !== this.replayWatermarkOn) this.setReplayWatermarkVisible(cs.replayWatermark);
52663
52714
  if (cs.indicatorTitles !== void 0 && cs.indicatorTitles !== this.indicatorTitlesOn) this.setIndicatorTitlesVisible(cs.indicatorTitles);
52664
52715
  if (cs.indicatorValues !== void 0 && cs.indicatorValues !== this.indicatorValuesOn) this.setIndicatorValuesVisible(cs.indicatorValues);
52716
+ for (const [part, visible] of statuslinePartEntries(cs.statuslineParts)) {
52717
+ if (this.statusline && this.statusline.partVisible(part) !== visible) this.setStatuslinePart(part, visible);
52718
+ }
52665
52719
  if (cs.rendererConfig != null) this.inner.renderer.applyConfig(cs.rendererConfig);
52666
52720
  if (cs.drawings != null) this.inner.drawings.fromJSON(cs.drawings);
52667
52721
  if (cs.indicators) this.applyIndicatorLedger(cs.indicators);
@@ -52689,6 +52743,7 @@ var ChartCell = class {
52689
52743
  dehydrate() {
52690
52744
  const live = this.inner?.market;
52691
52745
  const ext = this.inner ? this.dehydrateExt() : Object.keys(this.extState).length > 0 ? { ...this.extState } : void 0;
52746
+ const statuslineParts = this.statusPrefs().parts;
52692
52747
  return {
52693
52748
  ...this.state,
52694
52749
  ...live ? { symbol: live.symbol, provider: live.provider, timeframe: live.timeframe } : {},
@@ -52697,6 +52752,7 @@ var ChartCell = class {
52697
52752
  replayWatermark: this.replayWatermarkOn,
52698
52753
  indicatorTitles: this.indicatorTitlesOn,
52699
52754
  indicatorValues: this.indicatorValuesOn,
52755
+ ...statuslineParts ? { statuslineParts } : {},
52700
52756
  rendererConfig: this.inner?.renderer.getConfig() ?? void 0,
52701
52757
  drawings: this.inner ? this.inner.drawings.toJSON() : void 0,
52702
52758
  // Natives from the chart's SYNC registry read — an async catalog mirror here
package/dist/widget.d.cts CHANGED
@@ -1,13 +1,13 @@
1
- import { V as Vela, W as WidgetContext, a1 as SidePanelButton } from './contributions-CpCJisTC.cjs';
2
- export { C as CellStateContext, i as ContextMenuPointer, aJ as DEFAULT_PANEL_ORDER, E as ExternalIndicatorEntry, O as OVERRIDABLE_TOPBAR_IDS, a2 as SidePanelDescriptor, a3 as SidePanelHandle, a5 as StatePersistenceHandler, a9 as SymbolRankingHook, ad as WidgetActionDescriptor, ae as WidgetActionTarget, af as WidgetAttachment, ap as registerSidePanel, aq as registerStatePersistence, ar as registerSymbolRanking, as as registerWidgetAction, at as registerWidgetAttachment, av as sidePanels, aw as statePersistenceHandlers, ax as symbolRanking, ay as topbarActionOverride, aD as unregisterSidePanel, aE as unregisterStatePersistence, aF as unregisterWidgetAction, aG as unregisterWidgetAttachment, aH as widgetActions, aI as widgetAttachments } from './contributions-CpCJisTC.cjs';
3
- import { b as VelaOptions, d as MarketSession, T as ThemeName, c as VelaTheme, w as DataWindowReadout } from './options-CpegHml_.cjs';
4
- import { c as VelaShellOptions, W as WidgetHistory, b as RangePreset, f as WorkspaceState, j as TopbarComposition, a as StatuslinePart, P as PanelsState } from './statusline-model-pGs3Xvp-.cjs';
5
- export { B as Bottombar, k as BottombarOptions, C as CellState, g as ChartState, D as DrawingToolsState, I as IndicatorLoader, l as IndicatorManifest, m as IndicatorManifestEntry, n as RANGE_PRESETS, R as ResolvedIndicator, o as ResolvedTopbarComposition, p as TOPBAR_BUILTIN_IDS, q as TOPBAR_DEFAULT_LEFT, r as TOPBAR_DEFAULT_RIGHT, V as VelaStorage, t as WidgetStorage, h as decodeState, i as encodeState, u as localStorageAdapter, v as pinnedTopbarActionIds, w as resolveIndicators, x as resolveTopbarComposition, s as sanitizeState, y as topbarHas } from './statusline-model-pGs3Xvp-.cjs';
6
- import { K as KeymapManager } from './keymap-B9_FLhfJ.cjs';
7
- import { T as Translator, b as LocalizationOptions, c as LocaleChangedEvent, M as MessageLike, i as MessageDescriptor } from './types-BlrXRLIR.cjs';
8
- import { a as SymbolDescriptor } from './DataProvider-zJGp58kb.cjs';
9
- import { d as SidePanel } from './side-panel-BqUnpfev.cjs';
10
- export { C as CONTEXT_MENU_BUILTIN_ORDER, D as DEFAULT_PANEL_MAX_WIDTH, a as DEFAULT_PANEL_MIN_WIDTH, b as DEFAULT_PANEL_WIDTH, S as SidePanelOptions, c as clampPanelWidth } from './side-panel-BqUnpfev.cjs';
1
+ import { V as Vela, W as WidgetContext, a1 as SidePanelButton } from './contributions-BiF6lVvJ.cjs';
2
+ export { C as CellStateContext, i as ContextMenuPointer, aJ as DEFAULT_PANEL_ORDER, E as ExternalIndicatorEntry, O as OVERRIDABLE_TOPBAR_IDS, a2 as SidePanelDescriptor, a3 as SidePanelHandle, a5 as StatePersistenceHandler, a9 as SymbolRankingHook, ad as WidgetActionDescriptor, ae as WidgetActionTarget, af as WidgetAttachment, ap as registerSidePanel, aq as registerStatePersistence, ar as registerSymbolRanking, as as registerWidgetAction, at as registerWidgetAttachment, av as sidePanels, aw as statePersistenceHandlers, ax as symbolRanking, ay as topbarActionOverride, aD as unregisterSidePanel, aE as unregisterStatePersistence, aF as unregisterWidgetAction, aG as unregisterWidgetAttachment, aH as widgetActions, aI as widgetAttachments } from './contributions-BiF6lVvJ.cjs';
3
+ import { b as VelaOptions, d as MarketSession, T as ThemeName, c as VelaTheme, w as DataWindowReadout } from './options-I1H2HDWw.cjs';
4
+ import { c as VelaShellOptions, W as WidgetHistory, b as RangePreset, f as WorkspaceState, j as TopbarComposition, a as StatuslinePart, P as PanelsState } from './statusline-model-CwYMw_Yl.cjs';
5
+ export { B as Bottombar, k as BottombarOptions, C as CellState, g as ChartState, D as DrawingToolsState, I as IndicatorLoader, l as IndicatorManifest, m as IndicatorManifestEntry, n as RANGE_PRESETS, R as ResolvedIndicator, o as ResolvedTopbarComposition, p as TOPBAR_BUILTIN_IDS, q as TOPBAR_DEFAULT_LEFT, r as TOPBAR_DEFAULT_RIGHT, V as VelaStorage, t as WidgetStorage, h as decodeState, i as encodeState, u as localStorageAdapter, v as pinnedTopbarActionIds, w as resolveIndicators, x as resolveTopbarComposition, s as sanitizeState, y as topbarHas } from './statusline-model-CwYMw_Yl.cjs';
6
+ import { K as KeymapManager } from './keymap-W0hiajU6.cjs';
7
+ import { T as Translator, b as LocalizationOptions, c as LocaleChangedEvent, M as MessageLike, i as MessageDescriptor } from './types-Bwf63xGI.cjs';
8
+ import { a as SymbolDescriptor } from './DataProvider-B5i0_yY4.cjs';
9
+ import { d as SidePanel } from './side-panel-BEQJqSjR.cjs';
10
+ export { C as CONTEXT_MENU_BUILTIN_ORDER, D as DEFAULT_PANEL_MAX_WIDTH, a as DEFAULT_PANEL_MIN_WIDTH, b as DEFAULT_PANEL_WIDTH, S as SidePanelOptions, c as clampPanelWidth } from './side-panel-BEQJqSjR.cjs';
11
11
 
12
12
  interface VelaWidgetOptions extends VelaOptions, VelaShellOptions {
13
13
  /** @deprecated No longer supported — the option is ignored (a console warning
package/dist/widget.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- import { V as Vela, W as WidgetContext, a1 as SidePanelButton } from './contributions-BjefWpxQ.js';
2
- export { C as CellStateContext, i as ContextMenuPointer, aJ as DEFAULT_PANEL_ORDER, E as ExternalIndicatorEntry, O as OVERRIDABLE_TOPBAR_IDS, a2 as SidePanelDescriptor, a3 as SidePanelHandle, a5 as StatePersistenceHandler, a9 as SymbolRankingHook, ad as WidgetActionDescriptor, ae as WidgetActionTarget, af as WidgetAttachment, ap as registerSidePanel, aq as registerStatePersistence, ar as registerSymbolRanking, as as registerWidgetAction, at as registerWidgetAttachment, av as sidePanels, aw as statePersistenceHandlers, ax as symbolRanking, ay as topbarActionOverride, aD as unregisterSidePanel, aE as unregisterStatePersistence, aF as unregisterWidgetAction, aG as unregisterWidgetAttachment, aH as widgetActions, aI as widgetAttachments } from './contributions-BjefWpxQ.js';
3
- import { b as VelaOptions, d as MarketSession, T as ThemeName, c as VelaTheme, w as DataWindowReadout } from './options-D4L3_hv_.js';
4
- import { c as VelaShellOptions, W as WidgetHistory, b as RangePreset, f as WorkspaceState, j as TopbarComposition, a as StatuslinePart, P as PanelsState } from './statusline-model-C3yIY9WE.js';
5
- export { B as Bottombar, k as BottombarOptions, C as CellState, g as ChartState, D as DrawingToolsState, I as IndicatorLoader, l as IndicatorManifest, m as IndicatorManifestEntry, n as RANGE_PRESETS, R as ResolvedIndicator, o as ResolvedTopbarComposition, p as TOPBAR_BUILTIN_IDS, q as TOPBAR_DEFAULT_LEFT, r as TOPBAR_DEFAULT_RIGHT, V as VelaStorage, t as WidgetStorage, h as decodeState, i as encodeState, u as localStorageAdapter, v as pinnedTopbarActionIds, w as resolveIndicators, x as resolveTopbarComposition, s as sanitizeState, y as topbarHas } from './statusline-model-C3yIY9WE.js';
6
- import { K as KeymapManager } from './keymap-UolhuXH1.js';
7
- import { T as Translator, b as LocalizationOptions, c as LocaleChangedEvent, M as MessageLike, i as MessageDescriptor } from './types-BlrXRLIR.js';
8
- import { a as SymbolDescriptor } from './DataProvider-BGlB1zSc.js';
9
- import { d as SidePanel } from './side-panel-CYmH1Opm.js';
10
- export { C as CONTEXT_MENU_BUILTIN_ORDER, D as DEFAULT_PANEL_MAX_WIDTH, a as DEFAULT_PANEL_MIN_WIDTH, b as DEFAULT_PANEL_WIDTH, S as SidePanelOptions, c as clampPanelWidth } from './side-panel-CYmH1Opm.js';
1
+ import { V as Vela, W as WidgetContext, a1 as SidePanelButton } from './contributions-BDx47Vk0.js';
2
+ export { C as CellStateContext, i as ContextMenuPointer, aJ as DEFAULT_PANEL_ORDER, E as ExternalIndicatorEntry, O as OVERRIDABLE_TOPBAR_IDS, a2 as SidePanelDescriptor, a3 as SidePanelHandle, a5 as StatePersistenceHandler, a9 as SymbolRankingHook, ad as WidgetActionDescriptor, ae as WidgetActionTarget, af as WidgetAttachment, ap as registerSidePanel, aq as registerStatePersistence, ar as registerSymbolRanking, as as registerWidgetAction, at as registerWidgetAttachment, av as sidePanels, aw as statePersistenceHandlers, ax as symbolRanking, ay as topbarActionOverride, aD as unregisterSidePanel, aE as unregisterStatePersistence, aF as unregisterWidgetAction, aG as unregisterWidgetAttachment, aH as widgetActions, aI as widgetAttachments } from './contributions-BDx47Vk0.js';
3
+ import { b as VelaOptions, d as MarketSession, T as ThemeName, c as VelaTheme, w as DataWindowReadout } from './options-B7aL1pbf.js';
4
+ import { c as VelaShellOptions, W as WidgetHistory, b as RangePreset, f as WorkspaceState, j as TopbarComposition, a as StatuslinePart, P as PanelsState } from './statusline-model-ny7GXRuS.js';
5
+ export { B as Bottombar, k as BottombarOptions, C as CellState, g as ChartState, D as DrawingToolsState, I as IndicatorLoader, l as IndicatorManifest, m as IndicatorManifestEntry, n as RANGE_PRESETS, R as ResolvedIndicator, o as ResolvedTopbarComposition, p as TOPBAR_BUILTIN_IDS, q as TOPBAR_DEFAULT_LEFT, r as TOPBAR_DEFAULT_RIGHT, V as VelaStorage, t as WidgetStorage, h as decodeState, i as encodeState, u as localStorageAdapter, v as pinnedTopbarActionIds, w as resolveIndicators, x as resolveTopbarComposition, s as sanitizeState, y as topbarHas } from './statusline-model-ny7GXRuS.js';
6
+ import { K as KeymapManager } from './keymap-C48ughm6.js';
7
+ import { T as Translator, b as LocalizationOptions, c as LocaleChangedEvent, M as MessageLike, i as MessageDescriptor } from './types-Bwf63xGI.js';
8
+ import { a as SymbolDescriptor } from './DataProvider-CPFgSyAm.js';
9
+ import { d as SidePanel } from './side-panel-Ud0SBAnE.js';
10
+ export { C as CONTEXT_MENU_BUILTIN_ORDER, D as DEFAULT_PANEL_MAX_WIDTH, a as DEFAULT_PANEL_MIN_WIDTH, b as DEFAULT_PANEL_WIDTH, S as SidePanelOptions, c as clampPanelWidth } from './side-panel-Ud0SBAnE.js';
11
11
 
12
12
  interface VelaWidgetOptions extends VelaOptions, VelaShellOptions {
13
13
  /** @deprecated No longer supported — the option is ignored (a console warning
package/dist/widget.js CHANGED
@@ -1,7 +1,7 @@
1
- import { VelaWorkspace } from './chunk-4WAHYL7Y.js';
2
- export { Bottombar, ChartContextMenu, DataWindow, IndicatorPicker, ObjectTree, PanelDock, RANGE_PRESETS, ShortcutsHelp, Statusline, SymbolPicker, TimeframeQuick, Topbar, Watermark, dataWindowSections, decimalsFor, decodeState, encodeState, filterSymbols, fmtChange, fmtPrice, localStorageAdapter, parseTimeframe, priceStyleLabel, resolveIndicators, sanitizeState, timeframeLabel, timeframeMs } from './chunk-4WAHYL7Y.js';
3
- import './chunk-XIRSR3D6.js';
4
- export { CONTEXT_MENU_BUILTIN_ORDER, DEFAULT_PANEL_MAX_WIDTH, DEFAULT_PANEL_MIN_WIDTH, DEFAULT_PANEL_ORDER, DEFAULT_PANEL_WIDTH, OVERRIDABLE_TOPBAR_IDS, SidePanel, TIMEZONES, TOPBAR_BUILTIN_IDS, TOPBAR_DEFAULT_LEFT, TOPBAR_DEFAULT_RIGHT, clampPanelWidth, normalizeTimezone, pinnedTopbarActionIds, registerSidePanel, registerStatePersistence, registerSymbolRanking, registerWidgetAction, registerWidgetAttachment, resolveTopbarComposition, sidePanels, statePersistenceHandlers, symbolRanking, topbarActionOverride, topbarHas, tzButtonLabel, tzMenuLabel, tzOffset, unregisterSidePanel, unregisterStatePersistence, unregisterWidgetAction, unregisterWidgetAttachment, widgetActions, widgetAttachments } from './chunk-YRCL3WMD.js';
1
+ import { VelaWorkspace } from './chunk-4AMWSBOW.js';
2
+ export { Bottombar, ChartContextMenu, DataWindow, IndicatorPicker, ObjectTree, PanelDock, RANGE_PRESETS, ShortcutsHelp, Statusline, SymbolPicker, TimeframeQuick, Topbar, Watermark, dataWindowSections, decimalsFor, decodeState, encodeState, filterSymbols, fmtChange, fmtPrice, localStorageAdapter, parseTimeframe, priceStyleLabel, resolveIndicators, sanitizeState, timeframeLabel, timeframeMs } from './chunk-4AMWSBOW.js';
3
+ import './chunk-W4WTHJFA.js';
4
+ export { CONTEXT_MENU_BUILTIN_ORDER, DEFAULT_PANEL_MAX_WIDTH, DEFAULT_PANEL_MIN_WIDTH, DEFAULT_PANEL_ORDER, DEFAULT_PANEL_WIDTH, OVERRIDABLE_TOPBAR_IDS, SidePanel, TIMEZONES, TOPBAR_BUILTIN_IDS, TOPBAR_DEFAULT_LEFT, TOPBAR_DEFAULT_RIGHT, clampPanelWidth, normalizeTimezone, pinnedTopbarActionIds, registerSidePanel, registerStatePersistence, registerSymbolRanking, registerWidgetAction, registerWidgetAttachment, resolveTopbarComposition, sidePanels, statePersistenceHandlers, symbolRanking, topbarActionOverride, topbarHas, tzButtonLabel, tzMenuLabel, tzOffset, unregisterSidePanel, unregisterStatePersistence, unregisterWidgetAction, unregisterWidgetAttachment, widgetActions, widgetAttachments } from './chunk-Q7POFYNE.js';
5
5
  import './chunk-WHPQQYH7.js';
6
6
  import './chunk-PZN4RS4T.js';
7
7
  import './chunk-O6L27KRB.js';