@luxalgo/vela 0.9.0 → 0.9.1

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-XIRSR3D6.js → chunk-3H6JO4VL.js} +48 -30
  4. package/dist/{chunk-4WAHYL7Y.js → chunk-BLVL7WXF.js} +33 -2
  5. package/dist/{chunk-YRCL3WMD.js → chunk-Q7POFYNE.js} +7 -1
  6. package/dist/{contributions-BjefWpxQ.d.ts → contributions-BfBaF6eE.d.ts} +3 -3
  7. package/dist/{contributions-CpCJisTC.d.cts → contributions-DupwEkzc.d.cts} +3 -3
  8. package/dist/index.cjs +40 -21
  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-DpNp4aBi.d.cts → plugin-BGz-Vsdv.d.cts} +6 -6
  97. package/dist/{plugin-DTmulpKM.d.ts → plugin-BZHypj8h.d.ts} +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-C3yIY9WE.d.ts → statusline-model-Dfb_GD9u.d.ts} +7 -4
  111. package/dist/{statusline-model-pGs3Xvp-.d.cts → statusline-model-PHt0YhmI.d.cts} +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 +40 -21
  117. package/dist/vela.global.min.js +55 -55
  118. package/dist/widget.cjs +80 -25
  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 +80 -25
  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;
@@ -30117,6 +30142,9 @@ var SceneGraph = class {
30117
30142
  this.logScale = false;
30118
30143
  /** Inverted price axis on the price pane (high at the bottom). Study panes carry their own. */
30119
30144
  this.invertScale = false;
30145
+ /** The price pane's autoscale fits the bars alone: indicator plots, their price lines
30146
+ * and Pine drawings paint where they fall instead of widening the window. */
30147
+ this.scalePriceOnly = false;
30120
30148
  /** Exchange tick size for the active symbol (e.g. 0.01), when known. Drives the
30121
30149
  * price-axis decimals — the instrument's true precision instead of the zoom-derived
30122
30150
  * formula. Undefined until symbol metadata loads (the formula is the fallback). */
@@ -31815,6 +31843,18 @@ var DrawingSceneRenderer = class {
31815
31843
  }
31816
31844
  };
31817
31845
 
31846
+ // src/renderers/native/chrome/tz.ts
31847
+ var DAY_MS3 = 864e5;
31848
+ function displayZone(timeZone, barIntervalMs) {
31849
+ return barIntervalMs >= DAY_MS3 ? "UTC" : timeZone;
31850
+ }
31851
+ function tzOffsetMs(ms, timeZone) {
31852
+ return zoneOffsetMs(ms, timeZone);
31853
+ }
31854
+ function zonedDate(ms, timeZone) {
31855
+ return new Date(ms + tzOffsetMs(ms, timeZone));
31856
+ }
31857
+
31818
31858
  // src/renderers/native/chrome/ticks.ts
31819
31859
  function priceTicks(min, max, target = 6) {
31820
31860
  if (!(max > min) || !Number.isFinite(min) || !Number.isFinite(max)) return [];
@@ -31955,7 +31995,7 @@ var STEP_LADDER = [
31955
31995
  YEAR
31956
31996
  ];
31957
31997
  function formatTimeStamp2(ms, timeZone, barIntervalMs, fmt = ENGLISH_FORMAT, surface = "crosshair") {
31958
- return fmt.timeStamp(ms, { timeZone, withTime: barIntervalMs < DAY2, surface });
31998
+ return fmt.timeStamp(ms, { timeZone: displayZone(timeZone, barIntervalMs), withTime: barIntervalMs < DAY2, surface });
31959
31999
  }
31960
32000
  function pickStep(targetMs) {
31961
32001
  for (const step of STEP_LADDER) if (step >= targetMs) return step;
@@ -32099,14 +32139,6 @@ var PriceAxisTickSource = class {
32099
32139
  }
32100
32140
  };
32101
32141
 
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
32142
  // src/renderers/native/chrome/countdown.ts
32111
32143
  function countdownText2(barOpen, barMs, now2, fmt = ENGLISH_FORMAT) {
32112
32144
  if (!(barMs > 0)) return null;
@@ -32820,7 +32852,7 @@ var ChromeRenderer = class {
32820
32852
  ctx.textAlign = "center";
32821
32853
  const y = dataH + (fullH - dataH) / 2;
32822
32854
  const tr = coords.visibleTimeRange();
32823
- const offset = tzOffsetMs((tr.from + tr.to) / 2, scene.timezone);
32855
+ const offset = tzOffsetMs((tr.from + tr.to) / 2, displayZone(scene.timezone, coords.barInterval));
32824
32856
  const target = Math.max(3, Math.min(8, Math.floor(dataW / 64)));
32825
32857
  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
32858
  const GAP = 12;
@@ -33308,6 +33340,7 @@ var TEXT28 = {
33308
33340
  indexedTo100: msg("chart.settings.indexedTo100", "Indexed to 100"),
33309
33341
  logarithmic: msg("chart.settings.logarithmic", "Logarithmic"),
33310
33342
  invertScale: msg("chart.settings.invertScale", "Invert scale"),
33343
+ scalePriceOnly: msg("chart.settings.scalePriceOnly", "Scale price chart only"),
33311
33344
  lastPriceLine: msg("chart.settings.lastPriceLine", "Last price line"),
33312
33345
  lastPriceLabel: msg("chart.settings.lastPriceLabel", "Last price label"),
33313
33346
  countdownToBarClose: msg("chart.settings.countdownToBarClose", "Countdown to bar close"),
@@ -33816,6 +33849,7 @@ var SettingsDialog = class {
33816
33849
  ), "scales.price-scale.mode")
33817
33850
  );
33818
33851
  body.append(sid(this.boolRow(TEXT28.invertScale, config.priceScale.invert, (v) => this.emit({ priceScale: { invert: v } })), "scales.price-scale.invert"));
33852
+ body.append(sid(this.boolRow(TEXT28.scalePriceOnly, config.priceScale.priceOnly, (v) => this.emit({ priceScale: { priceOnly: v } })), "scales.price-scale.price-only"));
33819
33853
  body.append(sid(this.separator(), "scales.price-scale"));
33820
33854
  body.append(sid(this.boolRow(TEXT28.lastPriceLine, config.priceScale.currentPriceLine, (v) => this.emit({ priceScale: { currentPriceLine: v } })), "scales.price-scale.last-price-line"));
33821
33855
  body.append(sid(this.boolRow(TEXT28.lastPriceLabel, config.priceScale.priceLabel, (v) => this.emit({ priceScale: { priceLabel: v } })), "scales.price-scale.last-price-label"));
@@ -41247,7 +41281,7 @@ var BackdropRenderer = class {
41247
41281
  ctx.globalAlpha = gridAlpha;
41248
41282
  ctx.strokeStyle = vertColor;
41249
41283
  const tr = coords.visibleTimeRange();
41250
- const offset = tzOffsetMs((tr.from + tr.to) / 2, scene.timezone);
41284
+ const offset = tzOffsetMs((tr.from + tr.to) / 2, displayZone(scene.timezone, coords.barInterval));
41251
41285
  ctx.beginPath();
41252
41286
  for (const tick of timeTicks(tr.from, tr.to, 8, offset)) {
41253
41287
  const x = Math.round(coords.timeToX(tick.time)) + 0.5;
@@ -42039,7 +42073,7 @@ var NativeRenderer = class {
42039
42073
  this.priceStyleCbs = /* @__PURE__ */ new Set();
42040
42074
  this.priceStyleWillChangeCbs = /* @__PURE__ */ new Set();
42041
42075
  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"];
42076
+ 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
42077
  /** Track cursor proximity to the scroll button on the plot (bubbles from the button too,
42044
42078
  * so moving onto the button doesn't count as leaving). */
42045
42079
  this.onScrollProximityMove = (e) => {
@@ -42198,6 +42232,9 @@ var NativeRenderer = class {
42198
42232
  }
42199
42233
  this.scene.invertScale = Boolean(value);
42200
42234
  break;
42235
+ case "scalePriceOnly":
42236
+ this.scene.scalePriceOnly = Boolean(value);
42237
+ break;
42201
42238
  case "autoScale":
42202
42239
  for (const pane of this.scene.panes.values()) {
42203
42240
  pane.manualScale = value ? null : { ...pane.scale };
@@ -42324,6 +42361,8 @@ var NativeRenderer = class {
42324
42361
  return this.scene.scaleMode;
42325
42362
  case "invertScale":
42326
42363
  return this.scene.invertScale;
42364
+ case "scalePriceOnly":
42365
+ return this.scene.scalePriceOnly;
42327
42366
  case "paneScales":
42328
42367
  return this.paneScaleInfos();
42329
42368
  case "autoScale": {
@@ -42470,6 +42509,7 @@ var NativeRenderer = class {
42470
42509
  mode: this.scene.scaleMode,
42471
42510
  log: this.scene.logScale,
42472
42511
  invert: this.scene.invertScale,
42512
+ priceOnly: this.scene.scalePriceOnly,
42473
42513
  borderColor: s.borderColor ?? t.borderColor,
42474
42514
  labelsVisible: this.scene.showAxisLabels,
42475
42515
  currentPriceLine: this.scene.showPriceLine,
@@ -42584,6 +42624,7 @@ var NativeRenderer = class {
42584
42624
  this.scene.scaleMode = next.priceScale.mode;
42585
42625
  this.scene.logScale = next.priceScale.log;
42586
42626
  this.scene.invertScale = next.priceScale.invert;
42627
+ this.scene.scalePriceOnly = next.priceScale.priceOnly;
42587
42628
  s.borderColor = keepInherit(s.borderColor, next.priceScale.borderColor, prevTheme.borderColor);
42588
42629
  this.scene.showAxisLabels = next.priceScale.labelsVisible;
42589
42630
  this.scene.showPriceLine = next.priceScale.currentPriceLine;
@@ -44565,7 +44606,7 @@ var NativeRenderer = class {
44565
44606
  const pricePane = this.dataWindowPricePane();
44566
44607
  const ohlc = this.dataWindowOHLC(bar, pricePane);
44567
44608
  const parts = [];
44568
- if (bar) parts.push(formatStamp(bar.time, this.scene.timezone));
44609
+ if (bar) parts.push(formatStamp(bar.time, displayZone(this.scene.timezone, this.coords.barInterval)));
44569
44610
  if (ohlc) parts.push(this.t(TEXT35.barSummary, { open: ohlc.o, high: ohlc.h, low: ohlc.l, close: ohlc.c }));
44570
44611
  for (const group of this.dataWindowGroups(idx, pricePane)) {
44571
44612
  for (const row2 of group.rows) parts.push(this.t(TEXT35.valueSummary, { name: row2.label, value: row2.value }));
@@ -44582,7 +44623,7 @@ var NativeRenderer = class {
44582
44623
  const idx = this.hoverLogical != null ? this.hoverLogical : n - 1;
44583
44624
  const bar = this.bars[idx];
44584
44625
  const pricePane = this.dataWindowPricePane();
44585
- const parts = bar ? formatStampParts(bar.time, this.scene.timezone) : { date: "", time: "" };
44626
+ const parts = bar ? formatStampParts(bar.time, displayZone(this.scene.timezone, this.coords.barInterval)) : { date: "", time: "" };
44586
44627
  return { date: parts.date, time: parts.time, ohlc: this.dataWindowOHLC(bar, pricePane), groups: this.dataWindowGroups(idx, pricePane) };
44587
44628
  }
44588
44629
  dataWindowPricePane() {
@@ -44949,7 +44990,8 @@ var NativeRenderer = class {
44949
44990
  if (or) dr = dr ? { min: Math.min(dr.min, or.min), max: Math.max(dr.max, or.max) } : or;
44950
44991
  }
44951
44992
  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);
44993
+ const priceOnly = pane === pricePane && this.scene.scalePriceOnly && includeCandles;
44994
+ 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
44995
  pane.percentBaseline = pane.kind === "price" ? this.bars[i0]?.close ?? 0 : this.firstVisibleValue(masterModels, i0);
44954
44996
  pane.axisFormat = void 0;
44955
44997
  pane.axisBands = void 0;
@@ -49245,16 +49287,16 @@ var volumeSpecs = [
49245
49287
  ];
49246
49288
 
49247
49289
  // src/core/native-indicators/classics/overlays.ts
49248
- var DAY_MS3 = 864e5;
49290
+ var DAY_MS4 = 864e5;
49249
49291
  function periodKey(anchor, time) {
49250
- if (anchor === "Week") return Math.floor((Math.floor(time / DAY_MS3) + 3) / 7);
49292
+ if (anchor === "Week") return Math.floor((Math.floor(time / DAY_MS4) + 3) / 7);
49251
49293
  if (anchor === "Month" || anchor === "Quarter" || anchor === "Year") {
49252
49294
  const d = new Date(time);
49253
49295
  if (anchor === "Year") return d.getUTCFullYear();
49254
49296
  if (anchor === "Quarter") return d.getUTCFullYear() * 4 + Math.floor(d.getUTCMonth() / 3);
49255
49297
  return d.getUTCFullYear() * 12 + d.getUTCMonth();
49256
49298
  }
49257
- return Math.floor(time / DAY_MS3);
49299
+ return Math.floor(time / DAY_MS4);
49258
49300
  }
49259
49301
  function barInterval(bars) {
49260
49302
  if (bars.length < 2) return 0;
@@ -49356,7 +49398,7 @@ var vwap = {
49356
49398
  const anchor = str3(inputs, "anchor", "Session");
49357
49399
  const src = sourceValues(bars, str3(inputs, "source", "HLC3"));
49358
49400
  const n = bars.length;
49359
- const hidden = bool(inputs, "hideDwm", true) && barInterval(bars) >= DAY_MS3;
49401
+ const hidden = bool(inputs, "hideDwm", true) && barInterval(bars) >= DAY_MS4;
49360
49402
  const values = new Array(n).fill(Number.NaN);
49361
49403
  const bands = VWAP_BANDS.filter((b) => bool(inputs, b.show, b.defOn)).map((b) => ({
49362
49404
  mult: Math.max(0, num3(inputs, b.mult, b.defMult)),
@@ -49430,7 +49472,7 @@ var pivotPoints = {
49430
49472
  compute: (bars, inputs) => {
49431
49473
  const interval = barInterval(bars);
49432
49474
  const requested = str3(inputs, "anchor", PIVOT_AUTO);
49433
- const auto = interval <= 15 * 6e4 ? "Session" : interval < DAY_MS3 ? "Week" : interval <= DAY_MS3 ? "Month" : "Year";
49475
+ const auto = interval <= 15 * 6e4 ? "Session" : interval < DAY_MS4 ? "Week" : interval <= DAY_MS4 ? "Month" : "Year";
49434
49476
  const anchor = requested === "Daily" ? "Session" : requested === "Weekly" ? "Week" : requested === "Monthly" ? "Month" : requested === "Yearly" ? "Year" : auto;
49435
49477
  const kind = str3(inputs, "kind", PIVOT_TRADITIONAL);
49436
49478
  const aggs = /* @__PURE__ */ new Map();
@@ -49516,7 +49558,7 @@ var fiftyTwoWeek = {
49516
49558
  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
49559
  ],
49518
49560
  compute: (bars, inputs) => {
49519
- const span = num3(inputs, "weeks", 52) * 7 * DAY_MS3;
49561
+ const span = num3(inputs, "weeks", 52) * 7 * DAY_MS4;
49520
49562
  const n = bars.length;
49521
49563
  const hi = new Array(n).fill(Number.NaN);
49522
49564
  const lo = new Array(n).fill(Number.NaN);
@@ -50715,7 +50757,7 @@ var Statusline = class {
50715
50757
  };
50716
50758
 
50717
50759
  // src/widget/session-shading.ts
50718
- var DAY_MS4 = 864e5;
50760
+ var DAY_MS5 = 864e5;
50719
50761
  var MINUTE_MS = 6e4;
50720
50762
  function parseWindow(text, allowOvernight = false) {
50721
50763
  if (typeof text !== "string") return null;
@@ -50794,7 +50836,7 @@ function expandSessionZones(spec, from, to) {
50794
50836
  const dtf = civilFormatter(spec.timezone);
50795
50837
  if (!dtf || !Number.isFinite(from) || !Number.isFinite(to)) return { pre, post, extended };
50796
50838
  const seen = /* @__PURE__ */ new Set();
50797
- for (let cursor = from - DAY_MS4; cursor < to + DAY_MS4; cursor += DAY_MS4) {
50839
+ for (let cursor = from - DAY_MS5; cursor < to + DAY_MS5; cursor += DAY_MS5) {
50798
50840
  const civil = civilParts(dtf, cursor);
50799
50841
  const key = civil.year * 1e4 + civil.month * 100 + civil.day;
50800
50842
  if (!Number.isFinite(key) || seen.has(key)) continue;
@@ -50819,7 +50861,7 @@ function expandSessionZones(spec, from, to) {
50819
50861
  }
50820
50862
  return { pre, post, extended: mergeAbutting(extended) };
50821
50863
  }
50822
- var COVER_PAD_MIN_MS = 2 * DAY_MS4;
50864
+ var COVER_PAD_MIN_MS = 2 * DAY_MS5;
50823
50865
  var SessionShadingTracker = class {
50824
50866
  constructor(onZones) {
50825
50867
  this.onZones = onZones;
@@ -50843,7 +50885,7 @@ var SessionShadingTracker = class {
50843
50885
  this.covered = null;
50844
50886
  this.session = opts.session;
50845
50887
  const tfMs = timeframeMs(opts.timeframe);
50846
- this.intraday = Number.isFinite(tfMs) && tfMs < DAY_MS4;
50888
+ this.intraday = Number.isFinite(tfMs) && tfMs < DAY_MS5;
50847
50889
  this.lastRange = opts.range;
50848
50890
  void data.symbolInfo(symbol).catch(() => void 0).then((si) => {
50849
50891
  if (my !== this.epoch) return;
@@ -51405,6 +51447,7 @@ var ChartContextMenu = class {
51405
51447
  const pane = this.lastPane;
51406
51448
  return priceAxisItems({
51407
51449
  auto: this.chart?.renderer.get("autoScale") !== false,
51450
+ priceOnly: priceOnlyState(pane, this.flag("scalePriceOnly")),
51408
51451
  invert: pane ? pane.invert : this.flag("invertScale"),
51409
51452
  choice: scaleChoiceOf(pane ?? { mode: String(this.chart?.renderer.get("scaleMode") ?? "price"), log: this.flag("logScale") }),
51410
51453
  axisLabels: this.flag("axisLabels"),
@@ -51443,6 +51486,8 @@ var ChartContextMenu = class {
51443
51486
  else chart.renderer.set("timezone", resolveTimezone(zone, void 0));
51444
51487
  } else if (id === "auto") {
51445
51488
  chart.renderer.set("autoScale", chart.renderer.get("autoScale") === false);
51489
+ } else if (id === "price-only") {
51490
+ chart.renderer.set("scalePriceOnly", !this.flag("scalePriceOnly"));
51446
51491
  } else if (id === "invert") {
51447
51492
  const pane = this.lastPane;
51448
51493
  const [feature, value] = invertWrite(!(pane ? pane.invert : this.flag("invertScale")), pane);
@@ -51593,6 +51638,9 @@ function instanceDeltas(handle) {
51593
51638
  const props = inputDeltas(handle.props, handle.propValues());
51594
51639
  return inputs || props ? { ...inputs ? { inputs } : {}, ...props ? { props } : {} } : void 0;
51595
51640
  }
51641
+ function statuslinePartEntries(parts) {
51642
+ return Object.entries(parts ?? {}).filter((e) => typeof e[1] === "boolean");
51643
+ }
51596
51644
  function nativeAliases(type, i18n) {
51597
51645
  const entry = nativeIndicatorEntry(type);
51598
51646
  if (!entry) return {};
@@ -51768,6 +51816,7 @@ var ChartCell = class {
51768
51816
  this.inner.on("replay:end", () => this.watermark?.setReplaying(false));
51769
51817
  this.statusline = deps.statusline ? new Statusline(this.host, symbol ?? "", (sym) => this.inner?.data.symbolIcon(sym)) : null;
51770
51818
  this.statusline?.setMeta(seed.timeframe ?? "60", this.state.provider ?? "");
51819
+ for (const [part, visible] of statuslinePartEntries(seed.statuslineParts)) this.statusline?.setPartVisible(part, visible);
51771
51820
  this.statusline?.onChart(this.inner);
51772
51821
  this.statusline?.attachMenu({
51773
51822
  setPart: (part, visible) => this.setStatuslinePart(part, visible),
@@ -52180,6 +52229,7 @@ var ChartCell = class {
52180
52229
  /** Show/hide one status-line segment (the settings dialog's Status line tab). */
52181
52230
  setStatuslinePart(part, visible) {
52182
52231
  this.statusline?.setPartVisible(part, visible);
52232
+ this.deps.onStateDirty();
52183
52233
  this.deps.onStatusPrefsChanged(this.id);
52184
52234
  }
52185
52235
  /** This cell's Status line tab and watermark prefs as one bundle (see {@link CellStatusPrefs}). */
@@ -52662,6 +52712,9 @@ var ChartCell = class {
52662
52712
  if (cs.replayWatermark !== void 0 && cs.replayWatermark !== this.replayWatermarkOn) this.setReplayWatermarkVisible(cs.replayWatermark);
52663
52713
  if (cs.indicatorTitles !== void 0 && cs.indicatorTitles !== this.indicatorTitlesOn) this.setIndicatorTitlesVisible(cs.indicatorTitles);
52664
52714
  if (cs.indicatorValues !== void 0 && cs.indicatorValues !== this.indicatorValuesOn) this.setIndicatorValuesVisible(cs.indicatorValues);
52715
+ for (const [part, visible] of statuslinePartEntries(cs.statuslineParts)) {
52716
+ if (this.statusline && this.statusline.partVisible(part) !== visible) this.setStatuslinePart(part, visible);
52717
+ }
52665
52718
  if (cs.rendererConfig != null) this.inner.renderer.applyConfig(cs.rendererConfig);
52666
52719
  if (cs.drawings != null) this.inner.drawings.fromJSON(cs.drawings);
52667
52720
  if (cs.indicators) this.applyIndicatorLedger(cs.indicators);
@@ -52689,6 +52742,7 @@ var ChartCell = class {
52689
52742
  dehydrate() {
52690
52743
  const live = this.inner?.market;
52691
52744
  const ext = this.inner ? this.dehydrateExt() : Object.keys(this.extState).length > 0 ? { ...this.extState } : void 0;
52745
+ const statuslineParts = this.statusPrefs().parts;
52692
52746
  return {
52693
52747
  ...this.state,
52694
52748
  ...live ? { symbol: live.symbol, provider: live.provider, timeframe: live.timeframe } : {},
@@ -52697,6 +52751,7 @@ var ChartCell = class {
52697
52751
  replayWatermark: this.replayWatermarkOn,
52698
52752
  indicatorTitles: this.indicatorTitlesOn,
52699
52753
  indicatorValues: this.indicatorValuesOn,
52754
+ ...statuslineParts ? { statuslineParts } : {},
52700
52755
  rendererConfig: this.inner?.renderer.getConfig() ?? void 0,
52701
52756
  drawings: this.inner ? this.inner.drawings.toJSON() : void 0,
52702
52757
  // 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-DupwEkzc.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-DupwEkzc.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-PHt0YhmI.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-PHt0YhmI.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-BfBaF6eE.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-BfBaF6eE.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-Dfb_GD9u.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-Dfb_GD9u.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-BLVL7WXF.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-BLVL7WXF.js';
3
+ import './chunk-3H6JO4VL.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';