@luxalgo/vela 0.6.16 → 0.6.17

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 (46) hide show
  1. package/README.md +4 -0
  2. package/dist/{DataProvider-XLdJB86x.d.ts → DataProvider-B-Jz59Rf.d.ts} +1 -1
  3. package/dist/{DataProvider-xH2VBcFT.d.cts → DataProvider-OfR3fXg9.d.cts} +1 -1
  4. package/dist/{chunk-6DPAYEGO.js → chunk-CAFCLMPF.js} +1 -0
  5. package/dist/{chunk-I77F2SVE.js → chunk-IFJJPXSV.js} +1 -1
  6. package/dist/{chunk-SEOO6YG7.js → chunk-OSZDSH7F.js} +5 -8
  7. package/dist/{chunk-MGU3USTP.js → chunk-T5Z5YUCF.js} +1 -1
  8. package/dist/{chunk-Q3TFJNJW.js → chunk-XCBJU674.js} +2 -2
  9. package/dist/{chunk-GIJYO4LO.js → chunk-YCD72KGK.js} +103 -40
  10. package/dist/{contributions-BEkxwA5F.d.cts → contributions-C3b0Sx5P.d.cts} +2 -2
  11. package/dist/{contributions-CoAX7_SF.d.ts → contributions-Swzz10fG.d.ts} +2 -2
  12. package/dist/index.cjs +99 -36
  13. package/dist/index.d.cts +15 -6
  14. package/dist/index.d.ts +15 -6
  15. package/dist/index.js +4 -4
  16. package/dist/{options-bdSAtp7y.d.ts → options-CX1lSYWA.d.cts} +12 -2
  17. package/dist/{options-bdSAtp7y.d.cts → options-CX1lSYWA.d.ts} +12 -2
  18. package/dist/{plugin-Dxyq35Zf.d.cts → plugin-BjnEE1zA.d.cts} +3 -3
  19. package/dist/{plugin-CNUgbRNq.d.ts → plugin-mvddudqd.d.ts} +3 -3
  20. package/dist/plugin.cjs +1 -0
  21. package/dist/plugin.d.cts +4 -4
  22. package/dist/plugin.d.ts +4 -4
  23. package/dist/plugin.js +2 -2
  24. package/dist/providers/binance.d.cts +2 -2
  25. package/dist/providers/binance.d.ts +2 -2
  26. package/dist/providers/coinbase.d.cts +2 -2
  27. package/dist/providers/coinbase.d.ts +2 -2
  28. package/dist/providers/hyperliquid.d.cts +2 -2
  29. package/dist/providers/hyperliquid.d.ts +2 -2
  30. package/dist/{statusline-model-CbPza-Wc.d.cts → statusline-model-D91cU2fF.d.cts} +3 -3
  31. package/dist/{statusline-model-D7cWkw8A.d.ts → statusline-model-IURCya0H.d.ts} +3 -3
  32. package/dist/ui.cjs +1 -0
  33. package/dist/ui.d.cts +1 -1
  34. package/dist/ui.d.ts +1 -1
  35. package/dist/ui.js +3 -3
  36. package/dist/vela.global.js +99 -36
  37. package/dist/vela.global.min.js +46 -49
  38. package/dist/widget.cjs +100 -39
  39. package/dist/widget.d.cts +6 -6
  40. package/dist/widget.d.ts +6 -6
  41. package/dist/widget.js +7 -7
  42. package/dist/workspace.cjs +100 -39
  43. package/dist/workspace.d.cts +5 -5
  44. package/dist/workspace.d.ts +5 -5
  45. package/dist/workspace.js +6 -6
  46. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -25,6 +25,23 @@ function _interopNamespace(e) {
25
25
  var menu__namespace = /*#__PURE__*/_interopNamespace(menu);
26
26
  var dialog__namespace = /*#__PURE__*/_interopNamespace(dialog);
27
27
 
28
+ // src/core/options.ts
29
+ var LIVE_BAR_EASE_DEFAULT_MS = 90;
30
+ var LIVE_BAR_EASE_MAX_MS = 1e3;
31
+ function resolveLiveBarEaseMs(value) {
32
+ if (value === true) return LIVE_BAR_EASE_DEFAULT_MS;
33
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) return 0;
34
+ return Math.min(value, LIVE_BAR_EASE_MAX_MS);
35
+ }
36
+ function resolveAnimations(animations) {
37
+ if (typeof animations === "boolean") return { animZoom: animations, animPan: animations, animLiveBar: 0 };
38
+ return {
39
+ animZoom: animations?.zoom ?? true,
40
+ animPan: animations?.pan ?? true,
41
+ animLiveBar: resolveLiveBarEaseMs(animations?.liveBar)
42
+ };
43
+ }
44
+
28
45
  // src/core/model/series.ts
29
46
  function isLineLikeSeries(spec) {
30
47
  return spec.kind !== "candle" && spec.kind !== "bar" && spec.kind !== "markers";
@@ -575,6 +592,7 @@ registerIcon("star-filled", S('<path d="M8 2.2l1.75 3.55 3.9.55-2.8 2.75.65 3.9L
575
592
  registerIcon("grip", S('<circle cx="6" cy="3.5" r="1"/><circle cx="10" cy="3.5" r="1"/><circle cx="6" cy="8" r="1"/><circle cx="10" cy="8" r="1"/><circle cx="6" cy="12.5" r="1"/><circle cx="10" cy="12.5" r="1"/>', 'fill="currentColor" stroke="none"'));
576
593
  registerIcon("kebab", S('<circle cx="8" cy="3.2" r="1.2"/><circle cx="8" cy="8" r="1.2"/><circle cx="8" cy="12.8" r="1.2"/>', 'fill="currentColor" stroke="none"'));
577
594
  registerIcon("burger", S('<path d="M2.5 4.5h11M2.5 8h11M2.5 11.5h11"/>'));
595
+ registerIcon("info", S('<path d="M8 7.4v4.4"/><circle cx="8" cy="4.6" r="0.9" fill="currentColor" stroke="none"/>'));
578
596
  registerIcon("reset", S('<path d="M2 8a6 6 0 1 0 6-6 6.5 6.5 0 0 0-4.5 1.83L2 5.33"/><path d="M2 2v3.33h3.33"/>'));
579
597
  registerIcon("pane-collapse", S('<path d="M2.6 9.4h4v4M13.4 6.6h-4v-4"/><path d="m9.4 6.6 4.2-4.2M2.4 13.6l4.2-4.2"/>'));
580
598
  registerIcon("pane-expand", S('<path d="M9.8 2.4h3.8v3.8M6.2 13.6H2.4V9.8"/><path d="m13.6 2.4-4.4 4.4M2.4 13.6l4.4-4.4"/>'));
@@ -10525,6 +10543,23 @@ function attachChromeTooltip(anchor, opts) {
10525
10543
  clear();
10526
10544
  };
10527
10545
  }
10546
+ function chromeHint(text, opts) {
10547
+ const px = opts.size ?? 16;
10548
+ const el = document.createElement("span");
10549
+ el.className = "vela-hint";
10550
+ el.setAttribute("role", "img");
10551
+ el.setAttribute("aria-label", text);
10552
+ el.innerHTML = iconAt("info", px);
10553
+ el.style.cssText = `flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:${px}px;height:${px}px;border-radius:50%;cursor:help;user-select:none;background:var(--vela-hover);color:var(--vela-fg-muted);transition:background var(--vela-dur-fast) ease,color var(--vela-dur-fast) ease;`;
10554
+ const hover = (on) => {
10555
+ el.style.background = on ? "var(--vela-active)" : "var(--vela-hover)";
10556
+ el.style.color = on ? "var(--vela-fg-bright)" : "var(--vela-fg-muted)";
10557
+ };
10558
+ el.addEventListener("pointerenter", () => hover(true));
10559
+ el.addEventListener("pointerleave", () => hover(false));
10560
+ const dispose = attachChromeTooltip(el, { host: opts.host, theme: opts.theme, text: () => text, wrap: true, delayMs: 250 });
10561
+ return { el, dispose };
10562
+ }
10528
10563
  function runMachine(machine3, props, render) {
10529
10564
  const m = new vanilla.VanillaMachine(machine3, props);
10530
10565
  const unsub = m.subscribe(render);
@@ -13666,14 +13701,11 @@ var IndicatorInputsDialog = class {
13666
13701
  buildTextField(id, current, emit) {
13667
13702
  return buildFieldControl({ kind: "text", id, value: current, onChange: emit }).el;
13668
13703
  }
13669
- /** A hoverable ⓘ affordance carrying an input's `tooltip` (themed chrome tip; wraps). */
13704
+ /** The shared ⓘ hint carrying an input's `tooltip` (see {@link chromeHint}). */
13670
13705
  infoButton(tooltip) {
13671
- const b = document.createElement("span");
13672
- b.textContent = "i";
13673
- this.dialogTips.push(attachChromeTooltip(b, { host: this.host.container, theme: () => this.host.theme(), text: () => tooltip, wrap: true, delayMs: 250 }));
13674
- b.className = "vela-ind-hint";
13675
- b.style.cssText = "flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;font-weight:600;font-size:11px;font-family:inherit;line-height:1;cursor:help;user-select:none;";
13676
- return b;
13706
+ const { el, dispose } = chromeHint(tooltip, { host: this.host.container, theme: () => this.host.theme(), size: 18 });
13707
+ this.dialogTips.push(dispose);
13708
+ return el;
13677
13709
  }
13678
13710
  /** A dropdown over plain string options (value === label) — a thin case of {@link selectPairs}. */
13679
13711
  select(id, options, current, emit) {
@@ -14110,8 +14142,6 @@ function ensureDialogStyles() {
14110
14142
  ${overlayScrollbarCss(".vela-dialog.vela-ind-dialog *", 9)}
14111
14143
  .vela-ind-tab{font-weight:600;font-size:13px;line-height:20px;transition:color var(--vela-dur-fast) ease,border-color var(--vela-dur-fast) ease;}
14112
14144
  .vela-ind-tab:not(.vela-ind-tab-active):hover{color:var(--vela-fg-bright);}
14113
- .vela-ind-hint{background:var(--vela-hover);color:var(--vela-fg-muted);transition:background var(--vela-dur-fast) ease,color var(--vela-dur-fast) ease;}
14114
- .vela-ind-hint:hover{background:var(--vela-active);color:var(--vela-fg-bright);}
14115
14145
  .vela-ind-ctl,.vela-ind-close{background-color:transparent;color:inherit;transition:color var(--vela-dur-fast) ease,background-color var(--vela-dur-fast) ease;}
14116
14146
  .vela-ind-ctl svg,.vela-ind-close svg{width:${LEGEND_ICON_PX}px;height:${LEGEND_ICON_PX}px;display:block;flex:none;stroke-width:1;}
14117
14147
  .vela-ind-ctl:hover{background-color:var(--vela-hover-strong);}
@@ -15655,7 +15685,8 @@ function mergeConfig(base, patch) {
15655
15685
  labelsVisible: isBool(ps.labelsVisible) ? ps.labelsVisible : base.priceScale.labelsVisible,
15656
15686
  currentPriceLine: isBool(ps.currentPriceLine) ? ps.currentPriceLine : base.priceScale.currentPriceLine,
15657
15687
  priceLabel: isBool(ps.priceLabel) ? ps.priceLabel : base.priceScale.priceLabel,
15658
- countdown: isBool(ps.countdown) ? ps.countdown : base.priceScale.countdown
15688
+ countdown: isBool(ps.countdown) ? ps.countdown : base.priceScale.countdown,
15689
+ animateLastPrice: isBool(ps.animateLastPrice) ? ps.animateLastPrice : base.priceScale.animateLastPrice
15659
15690
  },
15660
15691
  panes: {
15661
15692
  separatorColor: isColor(panes.separatorColor) ? panes.separatorColor : base.panes.separatorColor
@@ -20519,6 +20550,8 @@ var BUILTIN_SETTINGS_IDS = [
20519
20550
  "symbol.style.baseline.fill-bottom",
20520
20551
  "symbol.style.baseline.base-level",
20521
20552
  "symbol.style.baseline.width",
20553
+ "symbol.animation",
20554
+ "symbol.animation.price-changes",
20522
20555
  "symbol.timezone",
20523
20556
  "scales",
20524
20557
  "scales.price-scale",
@@ -20661,8 +20694,7 @@ ${overlayScrollbarCss(".vela-sd-pane")}
20661
20694
  .vela-sd-mobile .vela-select-trigger,.vela-sd-mobile .vela-num input,.vela-sd-mobile .vela-width-field{height:34px;}
20662
20695
  .vela-sd-mobile .vela-sd-close{width:40px;height:40px;}
20663
20696
  .vela-sd-mobile .vela-sd-btn{height:38px;}
20664
- .vela-sd-mobile .vela-sd-row span,.vela-sd-mobile .vela-sd-bool span,.vela-sd-mobile .vela-field-label{white-space:normal !important;}
20665
- `;
20697
+ .vela-sd-mobile .vela-sd-row span,.vela-sd-mobile .vela-sd-bool span,.vela-sd-mobile .vela-field-label{white-space:normal !important;}`;
20666
20698
  if (!existing) document.head.appendChild(st);
20667
20699
  }
20668
20700
  var SettingsDialog = class {
@@ -20683,6 +20715,8 @@ var SettingsDialog = class {
20683
20715
  this.themeControl = null;
20684
20716
  /** The built tabs, by title — how `showSection` reaches a pane while the dialog is open. */
20685
20717
  this.tabs = [];
20718
+ this.hintTips = [];
20719
+ // ⓘ tooltip disposers of the open build (see hint)
20686
20720
  /** Active instance-strip tab per chart type — remembered across dialog rebuilds. */
20687
20721
  this.typeActiveInstance = /* @__PURE__ */ new Map();
20688
20722
  /** Active TOC group per structured pane (`<typeId>/<pane>` → group label). */
@@ -20871,6 +20905,13 @@ var SettingsDialog = class {
20871
20905
  body.append(g);
20872
20906
  }
20873
20907
  showActive(config.series.style);
20908
+ body.append(sid(this.sectionTitle("Animation"), "symbol.animation"));
20909
+ body.append(sid(this.boolRow(
20910
+ "Animate price changes",
20911
+ config.priceScale.animateLastPrice,
20912
+ (v) => this.emit({ priceScale: { animateLastPrice: v } }),
20913
+ this.hint("Glide the live bar to each new price instead of snapping.")
20914
+ ), "symbol.animation.price-changes"));
20874
20915
  body.append(sid(this.sectionTitle("Time zone"), "symbol.timezone"));
20875
20916
  body.append(sid(this.selectRowLabeled("Time zone", normalizeTimezone(config.timeScale.timezone), timezoneOptions(config.timeScale.timezone), (v) => this.emit({ timeScale: { timezone: v } })), "symbol.timezone"));
20876
20917
  const renderHostSections = (placement) => {
@@ -21078,6 +21119,8 @@ var SettingsDialog = class {
21078
21119
  this.ui = null;
21079
21120
  this.root = null;
21080
21121
  this.tabs = [];
21122
+ for (const dispose of this.hintTips) dispose();
21123
+ this.hintTips = [];
21081
21124
  ui?.destroy();
21082
21125
  }
21083
21126
  destroy() {
@@ -21491,23 +21534,31 @@ var SettingsDialog = class {
21491
21534
  }).el
21492
21535
  });
21493
21536
  }
21494
- /** A toggle row: the checkbox sits to the LEFT of its label (never in the control area). */
21495
- boolRow(label, value, onChange) {
21496
- return this.toggleRow(label, value, onChange, []);
21537
+ /** A toggle row: the checkbox sits to the LEFT of its label (never in the control area).
21538
+ * `info` (see {@link hint}) rides after the label. */
21539
+ boolRow(label, value, onChange, info) {
21540
+ return this.toggleRow(label, value, onChange, [], void 0, info);
21497
21541
  }
21498
21542
  /** An enable row: checkbox + label in the label column, dependent controls in the
21499
21543
  * shared control column; the control group dims and ignores input while the toggle
21500
21544
  * is off. With `get`, the row re-reads its state on a 'vela-sync' event. */
21501
- toggleRow(label, value, onToggle, controls, get) {
21545
+ toggleRow(label, value, onToggle, controls, get, info) {
21502
21546
  return fieldRow({
21503
21547
  label,
21504
21548
  labelSize: "sm",
21505
21549
  bool: controls.length === 0,
21506
21550
  toggle: { checked: value, onChange: onToggle, get },
21507
21551
  control: controls,
21552
+ info,
21508
21553
  className: controls.length === 0 ? "vela-sd-bool" : "vela-sd-row"
21509
21554
  });
21510
21555
  }
21556
+ /** The shared ⓘ hint after a row label (see {@link chromeHint}). Disposed with the dialog. */
21557
+ hint(text) {
21558
+ const { el, dispose } = chromeHint(text, { host: this.container, theme: () => this.theme });
21559
+ this.hintTips.push(dispose);
21560
+ return el;
21561
+ }
21511
21562
  numberRow(label, value, min, max, step, onChange) {
21512
21563
  return fieldRow({
21513
21564
  label,
@@ -27520,7 +27571,6 @@ var ZOOM_OUT_MARGIN_BARS = 6;
27520
27571
  var ZOOM_TAU_MS = 70;
27521
27572
  var SCALE_TAU_MS = 80;
27522
27573
  var FLING_TAU_MS = 110;
27523
- var LIVE_BAR_TAU_MS = 90;
27524
27574
  var SCROLL_TO_TAU_MS = 130;
27525
27575
  var FLING_STOP_PX = 0.02;
27526
27576
  var PRICE_SCALE_K = 4e-3;
@@ -27591,9 +27641,13 @@ var NativeRenderer = class {
27591
27641
  /** Drawings layer self-serves Ctrl+Z/Y (see the `historyChords` feature). */
27592
27642
  this.historyChordsEnabled = true;
27593
27643
  this.liveRegion = null;
27594
- // ── animation state (eased zoom + inertial pan) ──
27644
+ // ── animation state (eased zoom + inertial pan + live-bar glide) ──
27595
27645
  this.animZoom = true;
27596
27646
  this.animPan = true;
27647
+ this.animLiveBarMs = 0;
27648
+ // forming-bar OHLC glide time-constant; 0 = each tick snaps
27649
+ this.animLiveBarOnMs = LIVE_BAR_EASE_DEFAULT_MS;
27650
+ // the duration the settings-dialog on/off toggle restores (last non-zero value configured)
27597
27651
  // Brand default candles.
27598
27652
  this.candleUp = BULLISH;
27599
27653
  this.candleDown = BEARISH;
@@ -27718,7 +27772,7 @@ var NativeRenderer = class {
27718
27772
  this.moveIndicatorCbs = /* @__PURE__ */ new Set();
27719
27773
  this.priceStyleCbs = /* @__PURE__ */ new Set();
27720
27774
  this.name = "native";
27721
- this.features = ["logScale", "currentPriceLine", "priceLabel", "countdown", "upColor", "downColor", "glow", "animZoom", "animPan", "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", "indicatorTitles", "indicatorValues"];
27775
+ this.features = ["logScale", "currentPriceLine", "priceLabel", "countdown", "upColor", "downColor", "glow", "animZoom", "animPan", "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", "indicatorTitles", "indicatorValues"];
27722
27776
  /** Track cursor proximity to the scroll button on the plot (bubbles from the button too,
27723
27777
  * so moving onto the button doesn't count as leaving). */
27724
27778
  this.onScrollProximityMove = (e) => {
@@ -27752,6 +27806,7 @@ var NativeRenderer = class {
27752
27806
  this.backendMode = opts.nativeBackend;
27753
27807
  this.animZoom = opts.animZoom;
27754
27808
  this.animPan = opts.animPan;
27809
+ this.setLiveBarEase(resolveLiveBarEaseMs(opts.animLiveBar));
27755
27810
  this.glowAmount = opts.glow;
27756
27811
  this.candleUp = opts.upColor;
27757
27812
  this.candleDown = opts.downColor;
@@ -27801,6 +27856,10 @@ var NativeRenderer = class {
27801
27856
  case "animPan":
27802
27857
  this.animPan = Boolean(value);
27803
27858
  return;
27859
+ case "animLiveBar":
27860
+ this.setLiveBarEase(resolveLiveBarEaseMs(value));
27861
+ return;
27862
+ // affects the next tick only; a glide in flight finishes at the new rate (or snaps at 0)
27804
27863
  case "intro": {
27805
27864
  const s = value === false || value === "none" || value === "off" || value == null ? "" : String(value);
27806
27865
  this.introStyle = s;
@@ -27937,6 +27996,8 @@ var NativeRenderer = class {
27937
27996
  return this.animZoom;
27938
27997
  case "animPan":
27939
27998
  return this.animPan;
27999
+ case "animLiveBar":
28000
+ return this.animLiveBarMs;
27940
28001
  case "intro":
27941
28002
  return this.introStyle;
27942
28003
  case "zoomAnchor":
@@ -28105,7 +28166,8 @@ var NativeRenderer = class {
28105
28166
  labelsVisible: this.scene.showAxisLabels,
28106
28167
  currentPriceLine: this.scene.showPriceLine,
28107
28168
  priceLabel: this.scene.showPriceLabel,
28108
- countdown: this.scene.showCountdown
28169
+ countdown: this.scene.showCountdown,
28170
+ animateLastPrice: this.animLiveBarMs > 0
28109
28171
  },
28110
28172
  panes: { separatorColor: s.separatorColor ?? t.borderColor },
28111
28173
  trades: {
@@ -28212,6 +28274,7 @@ var NativeRenderer = class {
28212
28274
  this.scene.showPriceLabel = next.priceScale.priceLabel;
28213
28275
  this.scene.showCountdown = next.priceScale.countdown;
28214
28276
  this.syncCountdownTimer();
28277
+ this.animLiveBarMs = next.priceScale.animateLastPrice ? this.animLiveBarOnMs : 0;
28215
28278
  s.separatorColor = keepInherit(s.separatorColor, next.panes.separatorColor, prevTheme.borderColor);
28216
28279
  this.scene.tradeMarkers = {
28217
28280
  visible: next.trades.visible,
@@ -29028,8 +29091,11 @@ var NativeRenderer = class {
29028
29091
  const last = this.bars[n - 1];
29029
29092
  if (last && bar.time === last.time) {
29030
29093
  this.bars[n - 1] = bar;
29031
- if (this.liveEaseTime !== bar.time) this.syncLiveEase(bar);
29032
- this.animator.start();
29094
+ if (this.animLiveBarMs <= 0 || this.liveEaseTime !== bar.time) {
29095
+ this.syncLiveEase(bar);
29096
+ } else {
29097
+ this.animator.start();
29098
+ }
29033
29099
  } else if (!last || bar.time > last.time) {
29034
29100
  this.bars.push(bar);
29035
29101
  this.syncLiveEase(bar);
@@ -29041,6 +29107,12 @@ var NativeRenderer = class {
29041
29107
  this.scene.bars = this.bars;
29042
29108
  this.scheduler.invalidate(4 /* Full */);
29043
29109
  }
29110
+ /** Set the live-bar glide duration (0 = off). A non-zero value is also remembered as
29111
+ * what the config's on/off toggle (`priceScale.animateLastPrice`) switches back on to. */
29112
+ setLiveBarEase(ms) {
29113
+ this.animLiveBarMs = ms;
29114
+ if (ms > 0) this.animLiveBarOnMs = ms;
29115
+ }
29044
29116
  /** Snap the eased forming-bar state to `bar` — no glide (a fresh bar or the first tick of one). */
29045
29117
  syncLiveEase(bar) {
29046
29118
  this.liveEaseTime = bar.time;
@@ -29053,9 +29125,10 @@ var NativeRenderer = class {
29053
29125
  const target = this.bars[this.bars.length - 1];
29054
29126
  if (!target || this.liveEaseTime !== target.time) return false;
29055
29127
  const eps = Math.max(1e-9, Math.abs(target.close) * 1e-6);
29056
- const nh = easeToward(this.liveEaseHigh, target.high, dtMs, LIVE_BAR_TAU_MS);
29057
- const nl = easeToward(this.liveEaseLow, target.low, dtMs, LIVE_BAR_TAU_MS);
29058
- const nc = easeToward(this.liveEaseClose, target.close, dtMs, LIVE_BAR_TAU_MS);
29128
+ const tau = this.animLiveBarMs;
29129
+ const nh = easeToward(this.liveEaseHigh, target.high, dtMs, tau);
29130
+ const nl = easeToward(this.liveEaseLow, target.low, dtMs, tau);
29131
+ const nc = easeToward(this.liveEaseClose, target.close, dtMs, tau);
29059
29132
  const active = Math.abs(nh - target.high) > eps || Math.abs(nl - target.low) > eps || Math.abs(nc - target.close) > eps;
29060
29133
  this.liveEaseHigh = active ? nh : target.high;
29061
29134
  this.liveEaseLow = active ? nl : target.low;
@@ -33339,21 +33412,11 @@ var Vela = class {
33339
33412
  registerClassicIndicators();
33340
33413
  const element = resolveElement(container);
33341
33414
  const theme = resolveTheme(options.theme);
33342
- let animZoom = true;
33343
- let animPan = true;
33344
- if (typeof options.animations === "boolean") {
33345
- animZoom = options.animations;
33346
- animPan = options.animations;
33347
- } else if (options.animations) {
33348
- animZoom = options.animations.zoom ?? true;
33349
- animPan = options.animations.pan ?? true;
33350
- }
33351
33415
  const display = {
33352
33416
  currentPriceLine: options.currentPriceLine ?? true,
33353
33417
  logScale: options.logScale ?? false,
33354
33418
  nativeBackend: options.nativeBackend ?? "auto",
33355
- animZoom,
33356
- animPan,
33419
+ ...resolveAnimations(options.animations),
33357
33420
  glow: options.glow ?? 0,
33358
33421
  upColor: options.upColor ?? BULLISH,
33359
33422
  downColor: options.downColor ?? BEARISH,
package/dist/index.d.cts CHANGED
@@ -1,9 +1,9 @@
1
- import { D as DrawingsDocument, R as Resolved } from './contributions-BEkxwA5F.cjs';
2
- export { B as BarsChangeReason, C as CellStateContext, b as ContextSelect, c as DataControl, d as DrawingsControl, e as EngineAlert, f as EngineCapabilities, g as EngineContextSnapshot, h as EngineFactory, i as EngineWarning, j as ExecutionHandlers, k as ExecutionMarket, l as ExecutionRequest, m as ExecutionSession, E as ExternalIndicatorEntry, F as FetchSeries, n as IndicatorEventMap, I as IndicatorHandle, o as IndicatorSummary, L as LegendActionDescriptor, p as LegendCalloutContent, q as LegendCalloutDescriptor, r as LegendCalloutItem, s as LegendCalloutSpec, t as LegendIndicatorInfo, N as NativeIndicator, u as NativeIndicatorContext, v as NativeIndicatorDescriptor, w as NativeIndicatorInfo, x as NativeIndicatorOutput, O as OVERRIDABLE_TOPBAR_IDS, P as ParsedSymbol, y as PreparedScript, z as RendererControl, A as RunIndicatorResult, G as SceneInspection, a as ScriptRun, H as ScriptRunCause, J as ScriptRunResult, S as ScriptingEngine, K as SidePanelButton, M as SidePanelDescriptor, Q as SidePanelHandle, T as SidePanelHeader, U as StatePersistenceHandler, X as StrategyFill, Y as StrategyState, Z as StrategyTrade, _ as SymbolRankingHook, $ as TypedEventBus, V as Vela, a0 as VelaDeps, a1 as VelaEventMap, a2 as VisibleBarRange, a3 as WidgetActionDescriptor, a4 as WidgetActionTarget, a5 as WidgetAttachment, W as WidgetContext, a6 as getNativeIndicator, a7 as legendActions, a8 as legendCallouts, a9 as nativeIndicatorDescriptors, aa as nativeIndicatorTypes, ab as registerDefaultEngine, ac as registerLegendAction, ad as registerLegendCallout, ae as registerNativeIndicator, af as registerSidePanel, ag as registerStatePersistence, ah as registerSymbolRanking, ai as registerWidgetAction, aj as registerWidgetAttachment, ak as resolveEngines, al as sidePanels, am as statePersistenceHandlers, an as symbolRanking, ao as topbarActionOverride, ap as unregisterDefaultEngine, aq as unregisterLegendAction, ar as unregisterLegendCallout, as as unregisterNativeIndicator, at as unregisterSidePanel, au as unregisterStatePersistence, av as unregisterWidgetAction, aw as unregisterWidgetAttachment, ax as widgetActions, ay as widgetAttachments } from './contributions-BEkxwA5F.cjs';
3
- import { D as Drawing, S as SerializedDrawing, U as Unsubscribe, L as LineStyle, P as PriceStyle, e as IChartRenderer, R as RendererCapabilities, f as RendererDisplayOptions, g as IndicatorRenderHandle, h as IndicatorStatus, c as VelaTheme, O as OHLCV, i as Pane, j as PaneAction, k as MoveTarget, l as IndicatorModel, m as ScenePatch, I as InputValue, n as SymbolPickerFn, o as LegendActionView, p as LegendCalloutView, q as InputChangeEvent, T as ThemeName, C as CrosshairEvent, r as ClickEvent, A as AxisLongPressEvent, a as VisibleRange, s as DataWindowReadout, t as IDrawingsRendererPort, u as Millis, v as SnapMode, w as DrawingTypeKey, x as ToolbarDefinition, M as MarketConfig } from './options-bdSAtp7y.cjs';
4
- export { y as AddIndicatorOptions, B as Background, z as BoxFontFamily, E as BoxHAlign, F as BoxTextSize, G as BoxVAlign, H as CandleBarColor, J as CandleSeries, K as CandleStyle, Q as DataWindowGroup, W as DataWindowOHLC, X as DataWindowRow, Y as DirtyRange, Z as DrawingBox, _ as DrawingExtend, $ as DrawingIntent, a0 as DrawingLabel, a1 as DrawingLine, a2 as DrawingLinefill, a3 as DrawingMode, a4 as DrawingPoint, a5 as DrawingPolyline, a6 as DrawingSeriesBar, a7 as DrawingSeriesGateway, a8 as DrawingSeriesState, a9 as DrawingStyle, aa as DrawingTable, ab as DrawingText, ac as DrawingXLoc, ad as DrawingsOption, ae as Fill, af as FillGradientStop, ag as IndicatorMeta, ah as InputCondition, ai as InputSchema, aj as InputType, ak as InputWhen, al as LabelStyle, am as LabelYLoc, an as LineLikeKind, ao as LineLikeSeries, ap as LineLikeStyle, aq as MarkerPoint, ar as MarkerSeries, as as MarketSnapshot, at as MarketSwitch, au as PaneAxis, av as PaneAxisBand, aw as PaneHint, ax as PaneKind, ay as PolylinePoint, az as PriceLine, aA as Projector, aB as ProviderName, aC as RendererConstructor, aD as Scene, aE as SchemaPatch, aF as SeriesKind, aG as SeriesPoint, aH as SeriesSpec, aI as SeriesValueDelta, aJ as SettingsField, aK as SettingsSchema, aL as SettingsVisibilityPolicy, aM as TableCell, aN as TableMerge, aO as TablePosition, aP as ToolbarGroupConfig, aQ as TradeExecution, aR as ValuePatch, b as VelaOptions, V as VisibleRangePreset, aS as buildToolbar, aT as defaultToolbar, aU as inputDeltas, aV as inputVisible } from './options-bdSAtp7y.cjs';
5
- import { M as MarketDataFeed, D as DataProvider, P as ProviderInfo, a as SymbolDescriptor, S as SymbolInfo, b as ProviderCapabilities, B as BarRange } from './DataProvider-xH2VBcFT.cjs';
6
- export { A as ACCENT, a as ACCENT_BRIGHT, B as BEARISH, b as BULLISH, c as BarTransform, d as BasePaintingModulation, C as CATEGORICAL, e as CHIP_PLATE, f as CROSSHAIR, g as ChartTypeDefinition, h as ChartTypeSettingsInstance, i as ChartTypeSettingsSection, j as ChartTypeSettingsSubsection, D as DrawingTypeMeta, H as HIGHLIGHT, I as INFO, k as INVALID, l as IdentifiableKind, M as MARKER, N as NEUTRAL, m as NormalizedSettingsRow, R as RendererLayerArgs, n as RendererLayerDefinition, o as RendererLayerInstance, S as SERIES_LINE, p as SESSION_OFF, q as SESSION_POST, r as SESSION_PRE, s as SLATE, t as SLATE_DEEP, u as SeriesDataEngine, v as SeriesDataEngineHost, w as SettingsInlineControl, x as SettingsRowCondition, y as SettingsRowDescriptor, z as SettingsRowInlineNumber, E as SettingsRowSwatch, F as SettingsRowValueKey, G as SettingsRowWhen, J as SettingsRowWidth, K as SettingsSelectOption, L as SettingsValueRow, T as TRADE_EXIT, O as TRADE_LONG, P as TRADE_SHORT, V as VALID, W as WARNING, Q as categoricalColor, U as chartType, X as chartTypes, Y as createDrawing, Z as deserializeDrawing, _ as drawingTypes, $ as getDrawingType, a0 as normalizeSettingsRow, a1 as registerChartType, a2 as registerDrawingType, a3 as registerRendererDefaults, a4 as registerRendererLayer, a5 as rendererDefaults, a6 as rendererLayers, a7 as settingsRowValueKeys, a8 as stableSeriesId, a9 as tickerModifierIds, aa as unregisterChartType, ab as unregisterRendererDefaults, ac as unregisterRendererLayer } from './plugin-Dxyq35Zf.cjs';
1
+ import { D as DrawingsDocument, R as Resolved } from './contributions-C3b0Sx5P.cjs';
2
+ export { B as BarsChangeReason, C as CellStateContext, b as ContextSelect, c as DataControl, d as DrawingsControl, e as EngineAlert, f as EngineCapabilities, g as EngineContextSnapshot, h as EngineFactory, i as EngineWarning, j as ExecutionHandlers, k as ExecutionMarket, l as ExecutionRequest, m as ExecutionSession, E as ExternalIndicatorEntry, F as FetchSeries, n as IndicatorEventMap, I as IndicatorHandle, o as IndicatorSummary, L as LegendActionDescriptor, p as LegendCalloutContent, q as LegendCalloutDescriptor, r as LegendCalloutItem, s as LegendCalloutSpec, t as LegendIndicatorInfo, N as NativeIndicator, u as NativeIndicatorContext, v as NativeIndicatorDescriptor, w as NativeIndicatorInfo, x as NativeIndicatorOutput, O as OVERRIDABLE_TOPBAR_IDS, P as ParsedSymbol, y as PreparedScript, z as RendererControl, A as RunIndicatorResult, G as SceneInspection, a as ScriptRun, H as ScriptRunCause, J as ScriptRunResult, S as ScriptingEngine, K as SidePanelButton, M as SidePanelDescriptor, Q as SidePanelHandle, T as SidePanelHeader, U as StatePersistenceHandler, X as StrategyFill, Y as StrategyState, Z as StrategyTrade, _ as SymbolRankingHook, $ as TypedEventBus, V as Vela, a0 as VelaDeps, a1 as VelaEventMap, a2 as VisibleBarRange, a3 as WidgetActionDescriptor, a4 as WidgetActionTarget, a5 as WidgetAttachment, W as WidgetContext, a6 as getNativeIndicator, a7 as legendActions, a8 as legendCallouts, a9 as nativeIndicatorDescriptors, aa as nativeIndicatorTypes, ab as registerDefaultEngine, ac as registerLegendAction, ad as registerLegendCallout, ae as registerNativeIndicator, af as registerSidePanel, ag as registerStatePersistence, ah as registerSymbolRanking, ai as registerWidgetAction, aj as registerWidgetAttachment, ak as resolveEngines, al as sidePanels, am as statePersistenceHandlers, an as symbolRanking, ao as topbarActionOverride, ap as unregisterDefaultEngine, aq as unregisterLegendAction, ar as unregisterLegendCallout, as as unregisterNativeIndicator, at as unregisterSidePanel, au as unregisterStatePersistence, av as unregisterWidgetAction, aw as unregisterWidgetAttachment, ax as widgetActions, ay as widgetAttachments } from './contributions-C3b0Sx5P.cjs';
3
+ import { D as Drawing, S as SerializedDrawing, U as Unsubscribe, L as LineStyle, P as PriceStyle, e as IChartRenderer, R as RendererCapabilities, f as RendererDisplayOptions, g as IndicatorRenderHandle, h as IndicatorStatus, c as VelaTheme, O as OHLCV, i as Pane, j as PaneAction, k as MoveTarget, l as IndicatorModel, m as ScenePatch, I as InputValue, n as SymbolPickerFn, o as LegendActionView, p as LegendCalloutView, q as InputChangeEvent, T as ThemeName, C as CrosshairEvent, r as ClickEvent, A as AxisLongPressEvent, a as VisibleRange, s as DataWindowReadout, t as IDrawingsRendererPort, u as Millis, v as SnapMode, w as DrawingTypeKey, x as ToolbarDefinition, M as MarketConfig } from './options-CX1lSYWA.cjs';
4
+ export { y as AddIndicatorOptions, z as AnimationConfig, B as Background, E as BoxFontFamily, F as BoxHAlign, G as BoxTextSize, H as BoxVAlign, J as CandleBarColor, K as CandleSeries, Q as CandleStyle, W as DataWindowGroup, X as DataWindowOHLC, Y as DataWindowRow, Z as DirtyRange, _ as DrawingBox, $ as DrawingExtend, a0 as DrawingIntent, a1 as DrawingLabel, a2 as DrawingLine, a3 as DrawingLinefill, a4 as DrawingMode, a5 as DrawingPoint, a6 as DrawingPolyline, a7 as DrawingSeriesBar, a8 as DrawingSeriesGateway, a9 as DrawingSeriesState, aa as DrawingStyle, ab as DrawingTable, ac as DrawingText, ad as DrawingXLoc, ae as DrawingsOption, af as Fill, ag as FillGradientStop, ah as IndicatorMeta, ai as InputCondition, aj as InputSchema, ak as InputType, al as InputWhen, am as LabelStyle, an as LabelYLoc, ao as LineLikeKind, ap as LineLikeSeries, aq as LineLikeStyle, ar as MarkerPoint, as as MarkerSeries, at as MarketSnapshot, au as MarketSwitch, av as PaneAxis, aw as PaneAxisBand, ax as PaneHint, ay as PaneKind, az as PolylinePoint, aA as PriceLine, aB as Projector, aC as ProviderName, aD as RendererConstructor, aE as Scene, aF as SchemaPatch, aG as SeriesKind, aH as SeriesPoint, aI as SeriesSpec, aJ as SeriesValueDelta, aK as SettingsField, aL as SettingsSchema, aM as SettingsVisibilityPolicy, aN as TableCell, aO as TableMerge, aP as TablePosition, aQ as ToolbarGroupConfig, aR as TradeExecution, aS as ValuePatch, b as VelaOptions, V as VisibleRangePreset, aT as buildToolbar, aU as defaultToolbar, aV as inputDeltas, aW as inputVisible } from './options-CX1lSYWA.cjs';
5
+ import { M as MarketDataFeed, D as DataProvider, P as ProviderInfo, a as SymbolDescriptor, S as SymbolInfo, b as ProviderCapabilities, B as BarRange } from './DataProvider-OfR3fXg9.cjs';
6
+ export { A as ACCENT, a as ACCENT_BRIGHT, B as BEARISH, b as BULLISH, c as BarTransform, d as BasePaintingModulation, C as CATEGORICAL, e as CHIP_PLATE, f as CROSSHAIR, g as ChartTypeDefinition, h as ChartTypeSettingsInstance, i as ChartTypeSettingsSection, j as ChartTypeSettingsSubsection, D as DrawingTypeMeta, H as HIGHLIGHT, I as INFO, k as INVALID, l as IdentifiableKind, M as MARKER, N as NEUTRAL, m as NormalizedSettingsRow, R as RendererLayerArgs, n as RendererLayerDefinition, o as RendererLayerInstance, S as SERIES_LINE, p as SESSION_OFF, q as SESSION_POST, r as SESSION_PRE, s as SLATE, t as SLATE_DEEP, u as SeriesDataEngine, v as SeriesDataEngineHost, w as SettingsInlineControl, x as SettingsRowCondition, y as SettingsRowDescriptor, z as SettingsRowInlineNumber, E as SettingsRowSwatch, F as SettingsRowValueKey, G as SettingsRowWhen, J as SettingsRowWidth, K as SettingsSelectOption, L as SettingsValueRow, T as TRADE_EXIT, O as TRADE_LONG, P as TRADE_SHORT, V as VALID, W as WARNING, Q as categoricalColor, U as chartType, X as chartTypes, Y as createDrawing, Z as deserializeDrawing, _ as drawingTypes, $ as getDrawingType, a0 as normalizeSettingsRow, a1 as registerChartType, a2 as registerDrawingType, a3 as registerRendererDefaults, a4 as registerRendererLayer, a5 as rendererDefaults, a6 as rendererLayers, a7 as settingsRowValueKeys, a8 as stableSeriesId, a9 as tickerModifierIds, aa as unregisterChartType, ab as unregisterRendererDefaults, ac as unregisterRendererLayer } from './plugin-BjnEE1zA.cjs';
7
7
  export { 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-HF0IAzwf.cjs';
8
8
  export { i as iconMarkup, r as registerIcon } from './icons-BZYbJXSV.cjs';
9
9
  export { a as KeyBindingDescriptor, R as ResolvedBinding } from './keymap-CGOz5F5f.cjs';
@@ -192,6 +192,10 @@ interface ChartConfig {
192
192
  currentPriceLine: boolean;
193
193
  priceLabel: boolean;
194
194
  countdown: boolean;
195
+ /** Glide the forming bar (and the last-price line/label) toward each live tick
196
+ * instead of snapping. The duration comes from `animations.liveBar` / the
197
+ * `animLiveBar` feature; this is only the on/off switch the settings dialog shows. */
198
+ animateLastPrice: boolean;
195
199
  };
196
200
  /** Stacked-pane chrome — the draggable line between an indicator's pane and the one above it. */
197
201
  panes: {
@@ -407,6 +411,8 @@ declare class NativeRenderer implements IChartRenderer {
407
411
  private liveRegion;
408
412
  private animZoom;
409
413
  private animPan;
414
+ private animLiveBarMs;
415
+ private animLiveBarOnMs;
410
416
  private candleUp;
411
417
  private candleDown;
412
418
  private introStyle;
@@ -648,6 +654,9 @@ declare class NativeRenderer implements IChartRenderer {
648
654
  preserveView?: boolean;
649
655
  }): void;
650
656
  updateBar(bar: OHLCV): void;
657
+ /** Set the live-bar glide duration (0 = off). A non-zero value is also remembered as
658
+ * what the config's on/off toggle (`priceScale.animateLastPrice`) switches back on to. */
659
+ private setLiveBarEase;
651
660
  /** Snap the eased forming-bar state to `bar` — no glide (a fresh bar or the first tick of one). */
652
661
  private syncLiveEase;
653
662
  /** Glide the forming bar's displayed high/low/close toward the actual latest. Returns true while easing. */
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { D as DrawingsDocument, R as Resolved } from './contributions-CoAX7_SF.js';
2
- export { B as BarsChangeReason, C as CellStateContext, b as ContextSelect, c as DataControl, d as DrawingsControl, e as EngineAlert, f as EngineCapabilities, g as EngineContextSnapshot, h as EngineFactory, i as EngineWarning, j as ExecutionHandlers, k as ExecutionMarket, l as ExecutionRequest, m as ExecutionSession, E as ExternalIndicatorEntry, F as FetchSeries, n as IndicatorEventMap, I as IndicatorHandle, o as IndicatorSummary, L as LegendActionDescriptor, p as LegendCalloutContent, q as LegendCalloutDescriptor, r as LegendCalloutItem, s as LegendCalloutSpec, t as LegendIndicatorInfo, N as NativeIndicator, u as NativeIndicatorContext, v as NativeIndicatorDescriptor, w as NativeIndicatorInfo, x as NativeIndicatorOutput, O as OVERRIDABLE_TOPBAR_IDS, P as ParsedSymbol, y as PreparedScript, z as RendererControl, A as RunIndicatorResult, G as SceneInspection, a as ScriptRun, H as ScriptRunCause, J as ScriptRunResult, S as ScriptingEngine, K as SidePanelButton, M as SidePanelDescriptor, Q as SidePanelHandle, T as SidePanelHeader, U as StatePersistenceHandler, X as StrategyFill, Y as StrategyState, Z as StrategyTrade, _ as SymbolRankingHook, $ as TypedEventBus, V as Vela, a0 as VelaDeps, a1 as VelaEventMap, a2 as VisibleBarRange, a3 as WidgetActionDescriptor, a4 as WidgetActionTarget, a5 as WidgetAttachment, W as WidgetContext, a6 as getNativeIndicator, a7 as legendActions, a8 as legendCallouts, a9 as nativeIndicatorDescriptors, aa as nativeIndicatorTypes, ab as registerDefaultEngine, ac as registerLegendAction, ad as registerLegendCallout, ae as registerNativeIndicator, af as registerSidePanel, ag as registerStatePersistence, ah as registerSymbolRanking, ai as registerWidgetAction, aj as registerWidgetAttachment, ak as resolveEngines, al as sidePanels, am as statePersistenceHandlers, an as symbolRanking, ao as topbarActionOverride, ap as unregisterDefaultEngine, aq as unregisterLegendAction, ar as unregisterLegendCallout, as as unregisterNativeIndicator, at as unregisterSidePanel, au as unregisterStatePersistence, av as unregisterWidgetAction, aw as unregisterWidgetAttachment, ax as widgetActions, ay as widgetAttachments } from './contributions-CoAX7_SF.js';
3
- import { D as Drawing, S as SerializedDrawing, U as Unsubscribe, L as LineStyle, P as PriceStyle, e as IChartRenderer, R as RendererCapabilities, f as RendererDisplayOptions, g as IndicatorRenderHandle, h as IndicatorStatus, c as VelaTheme, O as OHLCV, i as Pane, j as PaneAction, k as MoveTarget, l as IndicatorModel, m as ScenePatch, I as InputValue, n as SymbolPickerFn, o as LegendActionView, p as LegendCalloutView, q as InputChangeEvent, T as ThemeName, C as CrosshairEvent, r as ClickEvent, A as AxisLongPressEvent, a as VisibleRange, s as DataWindowReadout, t as IDrawingsRendererPort, u as Millis, v as SnapMode, w as DrawingTypeKey, x as ToolbarDefinition, M as MarketConfig } from './options-bdSAtp7y.js';
4
- export { y as AddIndicatorOptions, B as Background, z as BoxFontFamily, E as BoxHAlign, F as BoxTextSize, G as BoxVAlign, H as CandleBarColor, J as CandleSeries, K as CandleStyle, Q as DataWindowGroup, W as DataWindowOHLC, X as DataWindowRow, Y as DirtyRange, Z as DrawingBox, _ as DrawingExtend, $ as DrawingIntent, a0 as DrawingLabel, a1 as DrawingLine, a2 as DrawingLinefill, a3 as DrawingMode, a4 as DrawingPoint, a5 as DrawingPolyline, a6 as DrawingSeriesBar, a7 as DrawingSeriesGateway, a8 as DrawingSeriesState, a9 as DrawingStyle, aa as DrawingTable, ab as DrawingText, ac as DrawingXLoc, ad as DrawingsOption, ae as Fill, af as FillGradientStop, ag as IndicatorMeta, ah as InputCondition, ai as InputSchema, aj as InputType, ak as InputWhen, al as LabelStyle, am as LabelYLoc, an as LineLikeKind, ao as LineLikeSeries, ap as LineLikeStyle, aq as MarkerPoint, ar as MarkerSeries, as as MarketSnapshot, at as MarketSwitch, au as PaneAxis, av as PaneAxisBand, aw as PaneHint, ax as PaneKind, ay as PolylinePoint, az as PriceLine, aA as Projector, aB as ProviderName, aC as RendererConstructor, aD as Scene, aE as SchemaPatch, aF as SeriesKind, aG as SeriesPoint, aH as SeriesSpec, aI as SeriesValueDelta, aJ as SettingsField, aK as SettingsSchema, aL as SettingsVisibilityPolicy, aM as TableCell, aN as TableMerge, aO as TablePosition, aP as ToolbarGroupConfig, aQ as TradeExecution, aR as ValuePatch, b as VelaOptions, V as VisibleRangePreset, aS as buildToolbar, aT as defaultToolbar, aU as inputDeltas, aV as inputVisible } from './options-bdSAtp7y.js';
5
- import { M as MarketDataFeed, D as DataProvider, P as ProviderInfo, a as SymbolDescriptor, S as SymbolInfo, b as ProviderCapabilities, B as BarRange } from './DataProvider-XLdJB86x.js';
6
- export { A as ACCENT, a as ACCENT_BRIGHT, B as BEARISH, b as BULLISH, c as BarTransform, d as BasePaintingModulation, C as CATEGORICAL, e as CHIP_PLATE, f as CROSSHAIR, g as ChartTypeDefinition, h as ChartTypeSettingsInstance, i as ChartTypeSettingsSection, j as ChartTypeSettingsSubsection, D as DrawingTypeMeta, H as HIGHLIGHT, I as INFO, k as INVALID, l as IdentifiableKind, M as MARKER, N as NEUTRAL, m as NormalizedSettingsRow, R as RendererLayerArgs, n as RendererLayerDefinition, o as RendererLayerInstance, S as SERIES_LINE, p as SESSION_OFF, q as SESSION_POST, r as SESSION_PRE, s as SLATE, t as SLATE_DEEP, u as SeriesDataEngine, v as SeriesDataEngineHost, w as SettingsInlineControl, x as SettingsRowCondition, y as SettingsRowDescriptor, z as SettingsRowInlineNumber, E as SettingsRowSwatch, F as SettingsRowValueKey, G as SettingsRowWhen, J as SettingsRowWidth, K as SettingsSelectOption, L as SettingsValueRow, T as TRADE_EXIT, O as TRADE_LONG, P as TRADE_SHORT, V as VALID, W as WARNING, Q as categoricalColor, U as chartType, X as chartTypes, Y as createDrawing, Z as deserializeDrawing, _ as drawingTypes, $ as getDrawingType, a0 as normalizeSettingsRow, a1 as registerChartType, a2 as registerDrawingType, a3 as registerRendererDefaults, a4 as registerRendererLayer, a5 as rendererDefaults, a6 as rendererLayers, a7 as settingsRowValueKeys, a8 as stableSeriesId, a9 as tickerModifierIds, aa as unregisterChartType, ab as unregisterRendererDefaults, ac as unregisterRendererLayer } from './plugin-CNUgbRNq.js';
1
+ import { D as DrawingsDocument, R as Resolved } from './contributions-Swzz10fG.js';
2
+ export { B as BarsChangeReason, C as CellStateContext, b as ContextSelect, c as DataControl, d as DrawingsControl, e as EngineAlert, f as EngineCapabilities, g as EngineContextSnapshot, h as EngineFactory, i as EngineWarning, j as ExecutionHandlers, k as ExecutionMarket, l as ExecutionRequest, m as ExecutionSession, E as ExternalIndicatorEntry, F as FetchSeries, n as IndicatorEventMap, I as IndicatorHandle, o as IndicatorSummary, L as LegendActionDescriptor, p as LegendCalloutContent, q as LegendCalloutDescriptor, r as LegendCalloutItem, s as LegendCalloutSpec, t as LegendIndicatorInfo, N as NativeIndicator, u as NativeIndicatorContext, v as NativeIndicatorDescriptor, w as NativeIndicatorInfo, x as NativeIndicatorOutput, O as OVERRIDABLE_TOPBAR_IDS, P as ParsedSymbol, y as PreparedScript, z as RendererControl, A as RunIndicatorResult, G as SceneInspection, a as ScriptRun, H as ScriptRunCause, J as ScriptRunResult, S as ScriptingEngine, K as SidePanelButton, M as SidePanelDescriptor, Q as SidePanelHandle, T as SidePanelHeader, U as StatePersistenceHandler, X as StrategyFill, Y as StrategyState, Z as StrategyTrade, _ as SymbolRankingHook, $ as TypedEventBus, V as Vela, a0 as VelaDeps, a1 as VelaEventMap, a2 as VisibleBarRange, a3 as WidgetActionDescriptor, a4 as WidgetActionTarget, a5 as WidgetAttachment, W as WidgetContext, a6 as getNativeIndicator, a7 as legendActions, a8 as legendCallouts, a9 as nativeIndicatorDescriptors, aa as nativeIndicatorTypes, ab as registerDefaultEngine, ac as registerLegendAction, ad as registerLegendCallout, ae as registerNativeIndicator, af as registerSidePanel, ag as registerStatePersistence, ah as registerSymbolRanking, ai as registerWidgetAction, aj as registerWidgetAttachment, ak as resolveEngines, al as sidePanels, am as statePersistenceHandlers, an as symbolRanking, ao as topbarActionOverride, ap as unregisterDefaultEngine, aq as unregisterLegendAction, ar as unregisterLegendCallout, as as unregisterNativeIndicator, at as unregisterSidePanel, au as unregisterStatePersistence, av as unregisterWidgetAction, aw as unregisterWidgetAttachment, ax as widgetActions, ay as widgetAttachments } from './contributions-Swzz10fG.js';
3
+ import { D as Drawing, S as SerializedDrawing, U as Unsubscribe, L as LineStyle, P as PriceStyle, e as IChartRenderer, R as RendererCapabilities, f as RendererDisplayOptions, g as IndicatorRenderHandle, h as IndicatorStatus, c as VelaTheme, O as OHLCV, i as Pane, j as PaneAction, k as MoveTarget, l as IndicatorModel, m as ScenePatch, I as InputValue, n as SymbolPickerFn, o as LegendActionView, p as LegendCalloutView, q as InputChangeEvent, T as ThemeName, C as CrosshairEvent, r as ClickEvent, A as AxisLongPressEvent, a as VisibleRange, s as DataWindowReadout, t as IDrawingsRendererPort, u as Millis, v as SnapMode, w as DrawingTypeKey, x as ToolbarDefinition, M as MarketConfig } from './options-CX1lSYWA.js';
4
+ export { y as AddIndicatorOptions, z as AnimationConfig, B as Background, E as BoxFontFamily, F as BoxHAlign, G as BoxTextSize, H as BoxVAlign, J as CandleBarColor, K as CandleSeries, Q as CandleStyle, W as DataWindowGroup, X as DataWindowOHLC, Y as DataWindowRow, Z as DirtyRange, _ as DrawingBox, $ as DrawingExtend, a0 as DrawingIntent, a1 as DrawingLabel, a2 as DrawingLine, a3 as DrawingLinefill, a4 as DrawingMode, a5 as DrawingPoint, a6 as DrawingPolyline, a7 as DrawingSeriesBar, a8 as DrawingSeriesGateway, a9 as DrawingSeriesState, aa as DrawingStyle, ab as DrawingTable, ac as DrawingText, ad as DrawingXLoc, ae as DrawingsOption, af as Fill, ag as FillGradientStop, ah as IndicatorMeta, ai as InputCondition, aj as InputSchema, ak as InputType, al as InputWhen, am as LabelStyle, an as LabelYLoc, ao as LineLikeKind, ap as LineLikeSeries, aq as LineLikeStyle, ar as MarkerPoint, as as MarkerSeries, at as MarketSnapshot, au as MarketSwitch, av as PaneAxis, aw as PaneAxisBand, ax as PaneHint, ay as PaneKind, az as PolylinePoint, aA as PriceLine, aB as Projector, aC as ProviderName, aD as RendererConstructor, aE as Scene, aF as SchemaPatch, aG as SeriesKind, aH as SeriesPoint, aI as SeriesSpec, aJ as SeriesValueDelta, aK as SettingsField, aL as SettingsSchema, aM as SettingsVisibilityPolicy, aN as TableCell, aO as TableMerge, aP as TablePosition, aQ as ToolbarGroupConfig, aR as TradeExecution, aS as ValuePatch, b as VelaOptions, V as VisibleRangePreset, aT as buildToolbar, aU as defaultToolbar, aV as inputDeltas, aW as inputVisible } from './options-CX1lSYWA.js';
5
+ import { M as MarketDataFeed, D as DataProvider, P as ProviderInfo, a as SymbolDescriptor, S as SymbolInfo, b as ProviderCapabilities, B as BarRange } from './DataProvider-B-Jz59Rf.js';
6
+ export { A as ACCENT, a as ACCENT_BRIGHT, B as BEARISH, b as BULLISH, c as BarTransform, d as BasePaintingModulation, C as CATEGORICAL, e as CHIP_PLATE, f as CROSSHAIR, g as ChartTypeDefinition, h as ChartTypeSettingsInstance, i as ChartTypeSettingsSection, j as ChartTypeSettingsSubsection, D as DrawingTypeMeta, H as HIGHLIGHT, I as INFO, k as INVALID, l as IdentifiableKind, M as MARKER, N as NEUTRAL, m as NormalizedSettingsRow, R as RendererLayerArgs, n as RendererLayerDefinition, o as RendererLayerInstance, S as SERIES_LINE, p as SESSION_OFF, q as SESSION_POST, r as SESSION_PRE, s as SLATE, t as SLATE_DEEP, u as SeriesDataEngine, v as SeriesDataEngineHost, w as SettingsInlineControl, x as SettingsRowCondition, y as SettingsRowDescriptor, z as SettingsRowInlineNumber, E as SettingsRowSwatch, F as SettingsRowValueKey, G as SettingsRowWhen, J as SettingsRowWidth, K as SettingsSelectOption, L as SettingsValueRow, T as TRADE_EXIT, O as TRADE_LONG, P as TRADE_SHORT, V as VALID, W as WARNING, Q as categoricalColor, U as chartType, X as chartTypes, Y as createDrawing, Z as deserializeDrawing, _ as drawingTypes, $ as getDrawingType, a0 as normalizeSettingsRow, a1 as registerChartType, a2 as registerDrawingType, a3 as registerRendererDefaults, a4 as registerRendererLayer, a5 as rendererDefaults, a6 as rendererLayers, a7 as settingsRowValueKeys, a8 as stableSeriesId, a9 as tickerModifierIds, aa as unregisterChartType, ab as unregisterRendererDefaults, ac as unregisterRendererLayer } from './plugin-mvddudqd.js';
7
7
  export { 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-HF0IAzwf.js';
8
8
  export { i as iconMarkup, r as registerIcon } from './icons-BZYbJXSV.js';
9
9
  export { a as KeyBindingDescriptor, R as ResolvedBinding } from './keymap-CGOz5F5f.js';
@@ -192,6 +192,10 @@ interface ChartConfig {
192
192
  currentPriceLine: boolean;
193
193
  priceLabel: boolean;
194
194
  countdown: boolean;
195
+ /** Glide the forming bar (and the last-price line/label) toward each live tick
196
+ * instead of snapping. The duration comes from `animations.liveBar` / the
197
+ * `animLiveBar` feature; this is only the on/off switch the settings dialog shows. */
198
+ animateLastPrice: boolean;
195
199
  };
196
200
  /** Stacked-pane chrome — the draggable line between an indicator's pane and the one above it. */
197
201
  panes: {
@@ -407,6 +411,8 @@ declare class NativeRenderer implements IChartRenderer {
407
411
  private liveRegion;
408
412
  private animZoom;
409
413
  private animPan;
414
+ private animLiveBarMs;
415
+ private animLiveBarOnMs;
410
416
  private candleUp;
411
417
  private candleDown;
412
418
  private introStyle;
@@ -648,6 +654,9 @@ declare class NativeRenderer implements IChartRenderer {
648
654
  preserveView?: boolean;
649
655
  }): void;
650
656
  updateBar(bar: OHLCV): void;
657
+ /** Set the live-bar glide duration (0 = off). A non-zero value is also remembered as
658
+ * what the config's on/off toggle (`priceScale.animateLastPrice`) switches back on to. */
659
+ private setLiveBarEase;
651
660
  /** Snap the eased forming-bar state to `bar` — no glide (a fresh bar or the first tick of one). */
652
661
  private syncLiveEase;
653
662
  /** Glide the forming bar's displayed high/low/close toward the actual latest. Returns true while easing. */
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import './chunk-FE6V2YAQ.js';
2
- export { BarStore, CachingDataFeed, DARK_THEME, DataControl, DrawingStore, DrawingToolbar, DrawingsControl, LIGHT_THEME, MultiProviderFeed, NativeRenderer, RendererControl, TypedEventBus, Vela, buildToolbar, defaultToolbar, resolveTheme, sharedBarStore, timeframeToMs } from './chunk-GIJYO4LO.js';
3
- export { DEFAULT_PANEL_MAX_WIDTH, DEFAULT_PANEL_MIN_WIDTH, DEFAULT_PANEL_WIDTH, Drawing, OVERRIDABLE_TOPBAR_IDS, chartType, chartTypes, clampPanelWidth, createDrawing, deserializeDrawing, drawingTypes, getDrawingType, getNativeIndicator, inputDeltas, inputVisible, legendActions, legendCallouts, nativeIndicatorDescriptors, nativeIndicatorTypes, normalizeSettingsRow, registerChartType, registerDefaultEngine, registerDrawingType, registerLegendAction, registerLegendCallout, registerNativeIndicator, registerRendererDefaults, registerRendererLayer, registerSidePanel, registerStatePersistence, registerSymbolRanking, registerWidgetAction, registerWidgetAttachment, rendererDefaults, rendererLayers, resolveEngines, settingsRowValueKeys, sidePanels, stableSeriesId, statePersistenceHandlers, symbolRanking, tickerModifierIds, topbarActionOverride, unregisterChartType, unregisterDefaultEngine, unregisterLegendAction, unregisterLegendCallout, unregisterNativeIndicator, unregisterRendererDefaults, unregisterRendererLayer, unregisterSidePanel, unregisterStatePersistence, unregisterWidgetAction, unregisterWidgetAttachment, widgetActions, widgetAttachments } from './chunk-I77F2SVE.js';
4
- import './chunk-MGU3USTP.js';
5
- export { ACCENT, ACCENT_BRIGHT, BEARISH, BULLISH, CATEGORICAL, CHIP_PLATE, CROSSHAIR, HIGHLIGHT, INFO, INVALID, MARKER, NEUTRAL, SERIES_LINE, SESSION_OFF, SESSION_POST, SESSION_PRE, SLATE, SLATE_DEEP, TRADE_EXIT, TRADE_LONG, TRADE_SHORT, VALID, WARNING, categoricalColor, iconMarkup, registerIcon } from './chunk-6DPAYEGO.js';
2
+ export { BarStore, CachingDataFeed, DARK_THEME, DataControl, DrawingStore, DrawingToolbar, DrawingsControl, LIGHT_THEME, MultiProviderFeed, NativeRenderer, RendererControl, TypedEventBus, Vela, buildToolbar, defaultToolbar, resolveTheme, sharedBarStore, timeframeToMs } from './chunk-YCD72KGK.js';
3
+ export { DEFAULT_PANEL_MAX_WIDTH, DEFAULT_PANEL_MIN_WIDTH, DEFAULT_PANEL_WIDTH, Drawing, OVERRIDABLE_TOPBAR_IDS, chartType, chartTypes, clampPanelWidth, createDrawing, deserializeDrawing, drawingTypes, getDrawingType, getNativeIndicator, inputDeltas, inputVisible, legendActions, legendCallouts, nativeIndicatorDescriptors, nativeIndicatorTypes, normalizeSettingsRow, registerChartType, registerDefaultEngine, registerDrawingType, registerLegendAction, registerLegendCallout, registerNativeIndicator, registerRendererDefaults, registerRendererLayer, registerSidePanel, registerStatePersistence, registerSymbolRanking, registerWidgetAction, registerWidgetAttachment, rendererDefaults, rendererLayers, resolveEngines, settingsRowValueKeys, sidePanels, stableSeriesId, statePersistenceHandlers, symbolRanking, tickerModifierIds, topbarActionOverride, unregisterChartType, unregisterDefaultEngine, unregisterLegendAction, unregisterLegendCallout, unregisterNativeIndicator, unregisterRendererDefaults, unregisterRendererLayer, unregisterSidePanel, unregisterStatePersistence, unregisterWidgetAction, unregisterWidgetAttachment, widgetActions, widgetAttachments } from './chunk-IFJJPXSV.js';
4
+ import './chunk-T5Z5YUCF.js';
5
+ export { ACCENT, ACCENT_BRIGHT, BEARISH, BULLISH, CATEGORICAL, CHIP_PLATE, CROSSHAIR, HIGHLIGHT, INFO, INVALID, MARKER, NEUTRAL, SERIES_LINE, SESSION_OFF, SESSION_POST, SESSION_PRE, SLATE, SLATE_DEEP, TRADE_EXIT, TRADE_LONG, TRADE_SHORT, VALID, WARNING, categoricalColor, iconMarkup, registerIcon } from './chunk-CAFCLMPF.js';
@@ -1728,7 +1728,9 @@ interface VelaOptions extends MarketConfig {
1728
1728
  nativeBackend?: NativeBackend;
1729
1729
  /** Native-renderer animations. `true`/`false` toggles all; an object configures
1730
1730
  * each independently. Default: eased **zoom on**, inertial **pan on but snappy**
1731
- * (short glide). Set `{ pan: false }` for an instant pan with no momentum. */
1731
+ * (short glide), live-bar glide **off**. Set `{ pan: false }` for an instant pan
1732
+ * with no momentum, `{ liveBar: true }` (or a duration in ms) to make the forming
1733
+ * candle slide toward each live tick instead of snapping. */
1732
1734
  animations?: boolean | AnimationConfig;
1733
1735
  /** Neon glow/bloom intensity for line series (0 = off, ~0.6 = strong). WebGL2 only
1734
1736
  * — the canvas2d backend ignores it. Default 0. */
@@ -1769,6 +1771,13 @@ interface AnimationConfig {
1769
1771
  zoom?: boolean;
1770
1772
  /** Inertial/kinetic pan — a short snappy glide after a drag-release. Default true. */
1771
1773
  pan?: boolean;
1774
+ /** Glide of the forming bar: on a live tick the displayed high/low/close ease toward
1775
+ * the new values instead of snapping (the price line and axis label follow). `true`
1776
+ * uses the default duration ({@link LIVE_BAR_EASE_DEFAULT_MS}); a number is the ease
1777
+ * time-constant in ms (visually settled after ~3×; clamped to
1778
+ * {@link LIVE_BAR_EASE_MAX_MS}); `false`/`0` snaps. A new bar always snaps. Default
1779
+ * `false` — the painted candle is then never behind the real data. */
1780
+ liveBar?: boolean | number;
1772
1781
  }
1773
1782
  /** Native geometry-layer backend selection. */
1774
1783
  type NativeBackend = 'auto' | 'canvas2d' | 'webgl2';
@@ -1788,6 +1797,7 @@ interface RendererDisplayOptions {
1788
1797
  nativeBackend: NativeBackend;
1789
1798
  animZoom: boolean;
1790
1799
  animPan: boolean;
1800
+ animLiveBar: number;
1791
1801
  glow: number;
1792
1802
  upColor: string;
1793
1803
  downColor: string;
@@ -1841,4 +1851,4 @@ interface AddIndicatorOptions {
1841
1851
  title?: string;
1842
1852
  }
1843
1853
 
1844
- export { type DrawingIntent as $, type AxisLongPressEvent as A, type Background as B, type CrosshairEvent as C, Drawing as D, type BoxHAlign as E, type BoxTextSize as F, type BoxVAlign as G, type CandleBarColor as H, type InputValue as I, type CandleSeries as J, type CandleStyle as K, type LineStyle as L, type MarketConfig as M, type NativeBackend as N, type OHLCV as O, type PriceStyle as P, type DataWindowGroup as Q, type RendererCapabilities as R, type SerializedDrawing as S, type ThemeName as T, type Unsubscribe as U, type VisibleRangePreset as V, type DataWindowOHLC as W, type DataWindowRow as X, type DirtyRange as Y, type DrawingBox as Z, type DrawingExtend as _, type VisibleRange as a, type DrawingLabel as a0, type DrawingLine as a1, type DrawingLinefill as a2, type DrawingMode as a3, type DrawingPoint as a4, type DrawingPolyline as a5, type DrawingSeriesBar as a6, type DrawingSeriesGateway as a7, type DrawingSeriesState as a8, type DrawingStyle as a9, type Projector as aA, type ProviderName as aB, type RendererConstructor as aC, type Scene as aD, type SchemaPatch as aE, type SeriesKind as aF, type SeriesPoint as aG, type SeriesSpec as aH, type SeriesValueDelta as aI, type SettingsField as aJ, type SettingsSchema as aK, type SettingsVisibilityPolicy as aL, type TableCell as aM, type TableMerge as aN, type TablePosition as aO, type ToolbarGroupConfig as aP, type TradeExecution as aQ, type ValuePatch as aR, buildToolbar as aS, defaultToolbar as aT, inputDeltas as aU, inputVisible as aV, type PaneInfo as aW, type DrawingTable as aa, type DrawingText as ab, type DrawingXLoc as ac, type DrawingsOption as ad, type Fill as ae, type FillGradientStop as af, type IndicatorMeta as ag, type InputCondition as ah, type InputSchema as ai, type InputType as aj, type InputWhen as ak, type LabelStyle as al, type LabelYLoc as am, type LineLikeKind as an, type LineLikeSeries as ao, type LineLikeStyle as ap, type MarkerPoint as aq, type MarkerSeries as ar, type MarketSnapshot as as, type MarketSwitch as at, type PaneAxis as au, type PaneAxisBand as av, type PaneHint as aw, type PaneKind as ax, type PolylinePoint as ay, type PriceLine as az, type VelaOptions as b, type VelaTheme as c, type MarketSession as d, type IChartRenderer as e, type RendererDisplayOptions as f, type IndicatorRenderHandle as g, type IndicatorStatus as h, type Pane as i, type PaneAction as j, type MoveTarget as k, type IndicatorModel as l, type ScenePatch as m, type SymbolPickerFn as n, type LegendActionView as o, type LegendCalloutView as p, type InputChangeEvent as q, type ClickEvent as r, type DataWindowReadout as s, type IDrawingsRendererPort as t, type Millis as u, type SnapMode as v, type DrawingTypeKey as w, type ToolbarDefinition as x, type AddIndicatorOptions as y, type BoxFontFamily as z };
1854
+ export { type DrawingExtend as $, type AxisLongPressEvent as A, type Background as B, type CrosshairEvent as C, Drawing as D, type BoxFontFamily as E, type BoxHAlign as F, type BoxTextSize as G, type BoxVAlign as H, type InputValue as I, type CandleBarColor as J, type CandleSeries as K, type LineStyle as L, type MarketConfig as M, type NativeBackend as N, type OHLCV as O, type PriceStyle as P, type CandleStyle as Q, type RendererCapabilities as R, type SerializedDrawing as S, type ThemeName as T, type Unsubscribe as U, type VisibleRangePreset as V, type DataWindowGroup as W, type DataWindowOHLC as X, type DataWindowRow as Y, type DirtyRange as Z, type DrawingBox as _, type VisibleRange as a, type DrawingIntent as a0, type DrawingLabel as a1, type DrawingLine as a2, type DrawingLinefill as a3, type DrawingMode as a4, type DrawingPoint as a5, type DrawingPolyline as a6, type DrawingSeriesBar as a7, type DrawingSeriesGateway as a8, type DrawingSeriesState as a9, type PriceLine as aA, type Projector as aB, type ProviderName as aC, type RendererConstructor as aD, type Scene as aE, type SchemaPatch as aF, type SeriesKind as aG, type SeriesPoint as aH, type SeriesSpec as aI, type SeriesValueDelta as aJ, type SettingsField as aK, type SettingsSchema as aL, type SettingsVisibilityPolicy as aM, type TableCell as aN, type TableMerge as aO, type TablePosition as aP, type ToolbarGroupConfig as aQ, type TradeExecution as aR, type ValuePatch as aS, buildToolbar as aT, defaultToolbar as aU, inputDeltas as aV, inputVisible as aW, type PaneInfo as aX, type DrawingStyle as aa, type DrawingTable as ab, type DrawingText as ac, type DrawingXLoc as ad, type DrawingsOption as ae, type Fill as af, type FillGradientStop as ag, type IndicatorMeta as ah, type InputCondition as ai, type InputSchema as aj, type InputType as ak, type InputWhen as al, type LabelStyle as am, type LabelYLoc as an, type LineLikeKind as ao, type LineLikeSeries as ap, type LineLikeStyle as aq, type MarkerPoint as ar, type MarkerSeries as as, type MarketSnapshot as at, type MarketSwitch as au, type PaneAxis as av, type PaneAxisBand as aw, type PaneHint as ax, type PaneKind as ay, type PolylinePoint as az, type VelaOptions as b, type VelaTheme as c, type MarketSession as d, type IChartRenderer as e, type RendererDisplayOptions as f, type IndicatorRenderHandle as g, type IndicatorStatus as h, type Pane as i, type PaneAction as j, type MoveTarget as k, type IndicatorModel as l, type ScenePatch as m, type SymbolPickerFn as n, type LegendActionView as o, type LegendCalloutView as p, type InputChangeEvent as q, type ClickEvent as r, type DataWindowReadout as s, type IDrawingsRendererPort as t, type Millis as u, type SnapMode as v, type DrawingTypeKey as w, type ToolbarDefinition as x, type AddIndicatorOptions as y, type AnimationConfig as z };
@@ -1728,7 +1728,9 @@ interface VelaOptions extends MarketConfig {
1728
1728
  nativeBackend?: NativeBackend;
1729
1729
  /** Native-renderer animations. `true`/`false` toggles all; an object configures
1730
1730
  * each independently. Default: eased **zoom on**, inertial **pan on but snappy**
1731
- * (short glide). Set `{ pan: false }` for an instant pan with no momentum. */
1731
+ * (short glide), live-bar glide **off**. Set `{ pan: false }` for an instant pan
1732
+ * with no momentum, `{ liveBar: true }` (or a duration in ms) to make the forming
1733
+ * candle slide toward each live tick instead of snapping. */
1732
1734
  animations?: boolean | AnimationConfig;
1733
1735
  /** Neon glow/bloom intensity for line series (0 = off, ~0.6 = strong). WebGL2 only
1734
1736
  * — the canvas2d backend ignores it. Default 0. */
@@ -1769,6 +1771,13 @@ interface AnimationConfig {
1769
1771
  zoom?: boolean;
1770
1772
  /** Inertial/kinetic pan — a short snappy glide after a drag-release. Default true. */
1771
1773
  pan?: boolean;
1774
+ /** Glide of the forming bar: on a live tick the displayed high/low/close ease toward
1775
+ * the new values instead of snapping (the price line and axis label follow). `true`
1776
+ * uses the default duration ({@link LIVE_BAR_EASE_DEFAULT_MS}); a number is the ease
1777
+ * time-constant in ms (visually settled after ~3×; clamped to
1778
+ * {@link LIVE_BAR_EASE_MAX_MS}); `false`/`0` snaps. A new bar always snaps. Default
1779
+ * `false` — the painted candle is then never behind the real data. */
1780
+ liveBar?: boolean | number;
1772
1781
  }
1773
1782
  /** Native geometry-layer backend selection. */
1774
1783
  type NativeBackend = 'auto' | 'canvas2d' | 'webgl2';
@@ -1788,6 +1797,7 @@ interface RendererDisplayOptions {
1788
1797
  nativeBackend: NativeBackend;
1789
1798
  animZoom: boolean;
1790
1799
  animPan: boolean;
1800
+ animLiveBar: number;
1791
1801
  glow: number;
1792
1802
  upColor: string;
1793
1803
  downColor: string;
@@ -1841,4 +1851,4 @@ interface AddIndicatorOptions {
1841
1851
  title?: string;
1842
1852
  }
1843
1853
 
1844
- export { type DrawingIntent as $, type AxisLongPressEvent as A, type Background as B, type CrosshairEvent as C, Drawing as D, type BoxHAlign as E, type BoxTextSize as F, type BoxVAlign as G, type CandleBarColor as H, type InputValue as I, type CandleSeries as J, type CandleStyle as K, type LineStyle as L, type MarketConfig as M, type NativeBackend as N, type OHLCV as O, type PriceStyle as P, type DataWindowGroup as Q, type RendererCapabilities as R, type SerializedDrawing as S, type ThemeName as T, type Unsubscribe as U, type VisibleRangePreset as V, type DataWindowOHLC as W, type DataWindowRow as X, type DirtyRange as Y, type DrawingBox as Z, type DrawingExtend as _, type VisibleRange as a, type DrawingLabel as a0, type DrawingLine as a1, type DrawingLinefill as a2, type DrawingMode as a3, type DrawingPoint as a4, type DrawingPolyline as a5, type DrawingSeriesBar as a6, type DrawingSeriesGateway as a7, type DrawingSeriesState as a8, type DrawingStyle as a9, type Projector as aA, type ProviderName as aB, type RendererConstructor as aC, type Scene as aD, type SchemaPatch as aE, type SeriesKind as aF, type SeriesPoint as aG, type SeriesSpec as aH, type SeriesValueDelta as aI, type SettingsField as aJ, type SettingsSchema as aK, type SettingsVisibilityPolicy as aL, type TableCell as aM, type TableMerge as aN, type TablePosition as aO, type ToolbarGroupConfig as aP, type TradeExecution as aQ, type ValuePatch as aR, buildToolbar as aS, defaultToolbar as aT, inputDeltas as aU, inputVisible as aV, type PaneInfo as aW, type DrawingTable as aa, type DrawingText as ab, type DrawingXLoc as ac, type DrawingsOption as ad, type Fill as ae, type FillGradientStop as af, type IndicatorMeta as ag, type InputCondition as ah, type InputSchema as ai, type InputType as aj, type InputWhen as ak, type LabelStyle as al, type LabelYLoc as am, type LineLikeKind as an, type LineLikeSeries as ao, type LineLikeStyle as ap, type MarkerPoint as aq, type MarkerSeries as ar, type MarketSnapshot as as, type MarketSwitch as at, type PaneAxis as au, type PaneAxisBand as av, type PaneHint as aw, type PaneKind as ax, type PolylinePoint as ay, type PriceLine as az, type VelaOptions as b, type VelaTheme as c, type MarketSession as d, type IChartRenderer as e, type RendererDisplayOptions as f, type IndicatorRenderHandle as g, type IndicatorStatus as h, type Pane as i, type PaneAction as j, type MoveTarget as k, type IndicatorModel as l, type ScenePatch as m, type SymbolPickerFn as n, type LegendActionView as o, type LegendCalloutView as p, type InputChangeEvent as q, type ClickEvent as r, type DataWindowReadout as s, type IDrawingsRendererPort as t, type Millis as u, type SnapMode as v, type DrawingTypeKey as w, type ToolbarDefinition as x, type AddIndicatorOptions as y, type BoxFontFamily as z };
1854
+ export { type DrawingExtend as $, type AxisLongPressEvent as A, type Background as B, type CrosshairEvent as C, Drawing as D, type BoxFontFamily as E, type BoxHAlign as F, type BoxTextSize as G, type BoxVAlign as H, type InputValue as I, type CandleBarColor as J, type CandleSeries as K, type LineStyle as L, type MarketConfig as M, type NativeBackend as N, type OHLCV as O, type PriceStyle as P, type CandleStyle as Q, type RendererCapabilities as R, type SerializedDrawing as S, type ThemeName as T, type Unsubscribe as U, type VisibleRangePreset as V, type DataWindowGroup as W, type DataWindowOHLC as X, type DataWindowRow as Y, type DirtyRange as Z, type DrawingBox as _, type VisibleRange as a, type DrawingIntent as a0, type DrawingLabel as a1, type DrawingLine as a2, type DrawingLinefill as a3, type DrawingMode as a4, type DrawingPoint as a5, type DrawingPolyline as a6, type DrawingSeriesBar as a7, type DrawingSeriesGateway as a8, type DrawingSeriesState as a9, type PriceLine as aA, type Projector as aB, type ProviderName as aC, type RendererConstructor as aD, type Scene as aE, type SchemaPatch as aF, type SeriesKind as aG, type SeriesPoint as aH, type SeriesSpec as aI, type SeriesValueDelta as aJ, type SettingsField as aK, type SettingsSchema as aL, type SettingsVisibilityPolicy as aM, type TableCell as aN, type TableMerge as aO, type TablePosition as aP, type ToolbarGroupConfig as aQ, type TradeExecution as aR, type ValuePatch as aS, buildToolbar as aT, defaultToolbar as aU, inputDeltas as aV, inputVisible as aW, type PaneInfo as aX, type DrawingStyle as aa, type DrawingTable as ab, type DrawingText as ac, type DrawingXLoc as ad, type DrawingsOption as ae, type Fill as af, type FillGradientStop as ag, type IndicatorMeta as ah, type InputCondition as ai, type InputSchema as aj, type InputType as ak, type InputWhen as al, type LabelStyle as am, type LabelYLoc as an, type LineLikeKind as ao, type LineLikeSeries as ap, type LineLikeStyle as aq, type MarkerPoint as ar, type MarkerSeries as as, type MarketSnapshot as at, type MarketSwitch as au, type PaneAxis as av, type PaneAxisBand as aw, type PaneHint as ax, type PaneKind as ay, type PolylinePoint as az, type VelaOptions as b, type VelaTheme as c, type MarketSession as d, type IChartRenderer as e, type RendererDisplayOptions as f, type IndicatorRenderHandle as g, type IndicatorStatus as h, type Pane as i, type PaneAction as j, type MoveTarget as k, type IndicatorModel as l, type ScenePatch as m, type SymbolPickerFn as n, type LegendActionView as o, type LegendCalloutView as p, type InputChangeEvent as q, type ClickEvent as r, type DataWindowReadout as s, type IDrawingsRendererPort as t, type Millis as u, type SnapMode as v, type DrawingTypeKey as w, type ToolbarDefinition as x, type AddIndicatorOptions as y, type AnimationConfig as z };
@@ -1,9 +1,9 @@
1
- import { w as DrawingTypeKey, a9 as DrawingStyle, S as SerializedDrawing, D as Drawing, aF as SeriesKind, O as OHLCV, c as VelaTheme } from './options-bdSAtp7y.cjs';
2
- import { c as DataControl } from './contributions-BEkxwA5F.cjs';
1
+ import { w as DrawingTypeKey, aa as DrawingStyle, S as SerializedDrawing, D as Drawing, aG as SeriesKind, O as OHLCV, c as VelaTheme } from './options-CX1lSYWA.cjs';
2
+ import { c as DataControl } from './contributions-C3b0Sx5P.cjs';
3
3
  import './side-panel-HF0IAzwf.cjs';
4
4
  import './icons-BZYbJXSV.cjs';
5
5
  import './keymap-CGOz5F5f.cjs';
6
- import './DataProvider-xH2VBcFT.cjs';
6
+ import './DataProvider-OfR3fXg9.cjs';
7
7
 
8
8
  /** What a drawing type contributes to the toolbar + factory (renderer-neutral). */
9
9
  interface DrawingTypeMeta {
@@ -1,9 +1,9 @@
1
- import { w as DrawingTypeKey, a9 as DrawingStyle, S as SerializedDrawing, D as Drawing, aF as SeriesKind, O as OHLCV, c as VelaTheme } from './options-bdSAtp7y.js';
2
- import { c as DataControl } from './contributions-CoAX7_SF.js';
1
+ import { w as DrawingTypeKey, aa as DrawingStyle, S as SerializedDrawing, D as Drawing, aG as SeriesKind, O as OHLCV, c as VelaTheme } from './options-CX1lSYWA.js';
2
+ import { c as DataControl } from './contributions-Swzz10fG.js';
3
3
  import './side-panel-HF0IAzwf.js';
4
4
  import './icons-BZYbJXSV.js';
5
5
  import './keymap-CGOz5F5f.js';
6
- import './DataProvider-XLdJB86x.js';
6
+ import './DataProvider-B-Jz59Rf.js';
7
7
 
8
8
  /** What a drawing type contributes to the toolbar + factory (renderer-neutral). */
9
9
  interface DrawingTypeMeta {