@luxalgo/vela 0.6.19 → 0.6.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/widget.cjs CHANGED
@@ -19188,6 +19188,7 @@ var EngineOrchestrator = class _EngineOrchestrator {
19188
19188
  if (!record.native) continue;
19189
19189
  record.native.instance.stop();
19190
19190
  record.native.instance = record.native.descriptor.create();
19191
+ record.native.started = false;
19191
19192
  record.pendingStructural = true;
19192
19193
  if (record.hidden) {
19193
19194
  record.native.stale = true;
@@ -19683,7 +19684,7 @@ var EngineOrchestrator = class _EngineOrchestrator {
19683
19684
  if (record.renderHandle) this.renderer.setIndicatorVisible?.(record.renderHandle, true);
19684
19685
  record.pendingStructural = true;
19685
19686
  if (record.native) {
19686
- if (record.native.stale) {
19687
+ if (record.native.stale || !record.native.started) {
19687
19688
  record.native.stale = false;
19688
19689
  const handle = this.handles.get(id);
19689
19690
  if (handle) void this.startNativeIndicator(id, handle);
@@ -19864,6 +19865,7 @@ var EngineOrchestrator = class _EngineOrchestrator {
19864
19865
  }
19865
19866
  };
19866
19867
  record.native.instance.start(ctx, record.inputValues);
19868
+ record.native.started = true;
19867
19869
  } catch (err) {
19868
19870
  this.fail(id, handle, err);
19869
19871
  }
@@ -37704,6 +37706,8 @@ function volumeLayerData(inputs) {
37704
37706
  }
37705
37707
  var VolumeIndicator = class {
37706
37708
  constructor() {
37709
+ /** Null until start() — pre-start setInputs/resume must record without pushing. */
37710
+ this.ctx = null;
37707
37711
  this.inputs = {};
37708
37712
  }
37709
37713
  start(ctx, inputs) {
@@ -37720,13 +37724,13 @@ var VolumeIndicator = class {
37720
37724
  }
37721
37725
  setInputs(inputs) {
37722
37726
  this.inputs = inputs;
37723
- this.ctx.pushData(volumeLayerData(inputs));
37727
+ this.ctx?.pushData(volumeLayerData(inputs));
37724
37728
  }
37725
37729
  /** Hiding is a renderer-layer flag (set via `setIndicatorVisible`); no resources to free. */
37726
37730
  suspend() {
37727
37731
  }
37728
37732
  resume() {
37729
- this.ctx.pushData(volumeLayerData(this.inputs));
37733
+ this.ctx?.pushData(volumeLayerData(this.inputs));
37730
37734
  }
37731
37735
  stop() {
37732
37736
  }
@@ -37772,6 +37776,8 @@ function vpvrLayerData(inputs) {
37772
37776
  }
37773
37777
  var VpvrIndicator = class {
37774
37778
  constructor() {
37779
+ /** Null until start() — pre-start setInputs/resume must record without pushing. */
37780
+ this.ctx = null;
37775
37781
  this.inputs = {};
37776
37782
  }
37777
37783
  start(ctx, inputs) {
@@ -37788,13 +37794,13 @@ var VpvrIndicator = class {
37788
37794
  }
37789
37795
  setInputs(inputs) {
37790
37796
  this.inputs = inputs;
37791
- this.ctx.pushData(vpvrLayerData(inputs));
37797
+ this.ctx?.pushData(vpvrLayerData(inputs));
37792
37798
  }
37793
37799
  /** Hiding is a renderer-layer flag (set via `setIndicatorVisible`); no resources to free. */
37794
37800
  suspend() {
37795
37801
  }
37796
37802
  resume() {
37797
- this.ctx.pushData(vpvrLayerData(this.inputs));
37803
+ this.ctx?.pushData(vpvrLayerData(this.inputs));
37798
37804
  }
37799
37805
  stop() {
37800
37806
  }
@@ -37860,6 +37866,8 @@ function toPoints(bars, values, colors) {
37860
37866
  var ClassicIndicator = class {
37861
37867
  constructor(spec) {
37862
37868
  this.spec = spec;
37869
+ /** Null until start() — a pre-start setInputs must record without computing. */
37870
+ this.ctx = null;
37863
37871
  this.inputs = {};
37864
37872
  }
37865
37873
  start(ctx, inputs) {
@@ -37874,6 +37882,7 @@ var ClassicIndicator = class {
37874
37882
  }
37875
37883
  setInputs(inputs) {
37876
37884
  this.inputs = inputs;
37885
+ if (!this.ctx) return;
37877
37886
  this.recompute();
37878
37887
  }
37879
37888
  /** Nothing to free — the compute reads the live bar accessor on demand. */
@@ -37885,6 +37894,7 @@ var ClassicIndicator = class {
37885
37894
  stop() {
37886
37895
  }
37887
37896
  recompute() {
37897
+ if (!this.ctx) return;
37888
37898
  const bars = this.ctx.bars();
37889
37899
  const out = this.spec.compute(bars, this.inputs);
37890
37900
  const instanceId = this.spec.type;
@@ -41911,7 +41921,7 @@ var ChartCell = class {
41911
41921
  // A RESTORED ledger is authoritative for the auto-added volume too: a
41912
41922
  // slot persisted without it must come back without it (fresh slots
41913
41923
  // keep the workspace default).
41914
- volume: seed.indicators ? seed.indicators.natives.includes("volume") : deps.volume,
41924
+ volume: seed.indicators ? seed.indicators.natives.some((e) => ledgerNativeType(e) === "volume") : deps.volume,
41915
41925
  nativeBackend: deps.nativeBackend,
41916
41926
  // The user's drawings option minus its toolbar: one SHARED bar serves
41917
41927
  // the whole workspace (per-cell bars would cost a 44px gutter each).
@@ -42571,7 +42581,7 @@ var ChartCell = class {
42571
42581
  addExternalIndicator(entry) {
42572
42582
  this.addManifestInstance(
42573
42583
  { ...entry, enabled: true },
42574
- { external: true, ...entry.inputs ? { inputs: entry.inputs } : {}, ...entry.props ? { props: entry.props } : {} }
42584
+ { external: true, ...entry.inputs ? { inputs: entry.inputs } : {}, ...entry.props ? { props: entry.props } : {}, ...entry.hidden ? { hidden: true } : {} }
42575
42585
  );
42576
42586
  }
42577
42587
  /** Add ONE instance of a manifest entry (repeatable — duplicates are legitimate). */
package/dist/widget.d.cts CHANGED
@@ -1,8 +1,8 @@
1
- import { V as Vela, W as WidgetContext, K as SidePanelButton } from './contributions-DEPRtkmG.cjs';
2
- export { C as CellStateContext, az as DEFAULT_PANEL_ORDER, E as ExternalIndicatorEntry, O as OVERRIDABLE_TOPBAR_IDS, M as SidePanelDescriptor, Q as SidePanelHandle, U as StatePersistenceHandler, _ as SymbolRankingHook, a3 as WidgetActionDescriptor, a4 as WidgetActionTarget, a5 as WidgetAttachment, af as registerSidePanel, ag as registerStatePersistence, ah as registerSymbolRanking, ai as registerWidgetAction, aj as registerWidgetAttachment, al as sidePanels, am as statePersistenceHandlers, an as symbolRanking, ao as topbarActionOverride, at as unregisterSidePanel, au as unregisterStatePersistence, av as unregisterWidgetAction, aw as unregisterWidgetAttachment, ax as widgetActions, ay as widgetAttachments } from './contributions-DEPRtkmG.cjs';
1
+ import { V as Vela, W as WidgetContext, K as SidePanelButton } from './contributions-D8HdlKmp.cjs';
2
+ export { C as CellStateContext, az as DEFAULT_PANEL_ORDER, E as ExternalIndicatorEntry, O as OVERRIDABLE_TOPBAR_IDS, M as SidePanelDescriptor, Q as SidePanelHandle, U as StatePersistenceHandler, _ as SymbolRankingHook, a3 as WidgetActionDescriptor, a4 as WidgetActionTarget, a5 as WidgetAttachment, af as registerSidePanel, ag as registerStatePersistence, ah as registerSymbolRanking, ai as registerWidgetAction, aj as registerWidgetAttachment, al as sidePanels, am as statePersistenceHandlers, an as symbolRanking, ao as topbarActionOverride, at as unregisterSidePanel, au as unregisterStatePersistence, av as unregisterWidgetAction, aw as unregisterWidgetAttachment, ax as widgetActions, ay as widgetAttachments } from './contributions-D8HdlKmp.cjs';
3
3
  import { b as VelaOptions, d as MarketSession, T as ThemeName, c as VelaTheme, s as DataWindowReadout } from './options-BCRmYALw.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-hY9cK4BS.cjs';
5
- export { B as Bottombar, k as BottombarOptions, C as CellState, g as ChartState, 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-hY9cK4BS.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-E7CMw5pQ.cjs';
5
+ export { B as Bottombar, k as BottombarOptions, C as CellState, g as ChartState, 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-E7CMw5pQ.cjs';
6
6
  import { K as KeymapManager } from './keymap-CGOz5F5f.cjs';
7
7
  import { a as SymbolDescriptor } from './DataProvider-UtWw2CgJ.cjs';
8
8
  import { d as SidePanel } from './side-panel-HF0IAzwf.cjs';
package/dist/widget.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { V as Vela, W as WidgetContext, K as SidePanelButton } from './contributions-5nz3PLRe.js';
2
- export { C as CellStateContext, az as DEFAULT_PANEL_ORDER, E as ExternalIndicatorEntry, O as OVERRIDABLE_TOPBAR_IDS, M as SidePanelDescriptor, Q as SidePanelHandle, U as StatePersistenceHandler, _ as SymbolRankingHook, a3 as WidgetActionDescriptor, a4 as WidgetActionTarget, a5 as WidgetAttachment, af as registerSidePanel, ag as registerStatePersistence, ah as registerSymbolRanking, ai as registerWidgetAction, aj as registerWidgetAttachment, al as sidePanels, am as statePersistenceHandlers, an as symbolRanking, ao as topbarActionOverride, at as unregisterSidePanel, au as unregisterStatePersistence, av as unregisterWidgetAction, aw as unregisterWidgetAttachment, ax as widgetActions, ay as widgetAttachments } from './contributions-5nz3PLRe.js';
1
+ import { V as Vela, W as WidgetContext, K as SidePanelButton } from './contributions-FqIWhN4p.js';
2
+ export { C as CellStateContext, az as DEFAULT_PANEL_ORDER, E as ExternalIndicatorEntry, O as OVERRIDABLE_TOPBAR_IDS, M as SidePanelDescriptor, Q as SidePanelHandle, U as StatePersistenceHandler, _ as SymbolRankingHook, a3 as WidgetActionDescriptor, a4 as WidgetActionTarget, a5 as WidgetAttachment, af as registerSidePanel, ag as registerStatePersistence, ah as registerSymbolRanking, ai as registerWidgetAction, aj as registerWidgetAttachment, al as sidePanels, am as statePersistenceHandlers, an as symbolRanking, ao as topbarActionOverride, at as unregisterSidePanel, au as unregisterStatePersistence, av as unregisterWidgetAction, aw as unregisterWidgetAttachment, ax as widgetActions, ay as widgetAttachments } from './contributions-FqIWhN4p.js';
3
3
  import { b as VelaOptions, d as MarketSession, T as ThemeName, c as VelaTheme, s as DataWindowReadout } from './options-BCRmYALw.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-wW3m4in1.js';
5
- export { B as Bottombar, k as BottombarOptions, C as CellState, g as ChartState, 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-wW3m4in1.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-CCP1zm_Z.js';
5
+ export { B as Bottombar, k as BottombarOptions, C as CellState, g as ChartState, 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-CCP1zm_Z.js';
6
6
  import { K as KeymapManager } from './keymap-CGOz5F5f.js';
7
7
  import { a as SymbolDescriptor } from './DataProvider-Cb-2lC5O.js';
8
8
  import { d as SidePanel } from './side-panel-HF0IAzwf.js';
package/dist/widget.js CHANGED
@@ -1,6 +1,6 @@
1
- import { VelaWorkspace } from './chunk-627A5HEV.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-627A5HEV.js';
3
- export { TIMEZONES, normalizeTimezone, tzButtonLabel, tzMenuLabel, tzOffset } from './chunk-22QJKGXX.js';
1
+ import { VelaWorkspace } from './chunk-BRPFYKTT.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-BRPFYKTT.js';
3
+ export { TIMEZONES, normalizeTimezone, tzButtonLabel, tzMenuLabel, tzOffset } from './chunk-TRZQQUTR.js';
4
4
  export { DEFAULT_PANEL_MAX_WIDTH, DEFAULT_PANEL_MIN_WIDTH, DEFAULT_PANEL_ORDER, DEFAULT_PANEL_WIDTH, OVERRIDABLE_TOPBAR_IDS, SidePanel, TOPBAR_BUILTIN_IDS, TOPBAR_DEFAULT_LEFT, TOPBAR_DEFAULT_RIGHT, clampPanelWidth, pinnedTopbarActionIds, registerSidePanel, registerStatePersistence, registerSymbolRanking, registerWidgetAction, registerWidgetAttachment, resolveTopbarComposition, sidePanels, statePersistenceHandlers, symbolRanking, topbarActionOverride, topbarHas, unregisterSidePanel, unregisterStatePersistence, unregisterWidgetAction, unregisterWidgetAttachment, widgetActions, widgetAttachments } from './chunk-IFJJPXSV.js';
5
5
  import './chunk-XCBJU674.js';
6
6
  import './chunk-T5Z5YUCF.js';
@@ -19120,6 +19120,7 @@ var EngineOrchestrator = class _EngineOrchestrator {
19120
19120
  if (!record.native) continue;
19121
19121
  record.native.instance.stop();
19122
19122
  record.native.instance = record.native.descriptor.create();
19123
+ record.native.started = false;
19123
19124
  record.pendingStructural = true;
19124
19125
  if (record.hidden) {
19125
19126
  record.native.stale = true;
@@ -19615,7 +19616,7 @@ var EngineOrchestrator = class _EngineOrchestrator {
19615
19616
  if (record.renderHandle) this.renderer.setIndicatorVisible?.(record.renderHandle, true);
19616
19617
  record.pendingStructural = true;
19617
19618
  if (record.native) {
19618
- if (record.native.stale) {
19619
+ if (record.native.stale || !record.native.started) {
19619
19620
  record.native.stale = false;
19620
19621
  const handle = this.handles.get(id);
19621
19622
  if (handle) void this.startNativeIndicator(id, handle);
@@ -19796,6 +19797,7 @@ var EngineOrchestrator = class _EngineOrchestrator {
19796
19797
  }
19797
19798
  };
19798
19799
  record.native.instance.start(ctx, record.inputValues);
19800
+ record.native.started = true;
19799
19801
  } catch (err) {
19800
19802
  this.fail(id, handle, err);
19801
19803
  }
@@ -37636,6 +37638,8 @@ function volumeLayerData(inputs) {
37636
37638
  }
37637
37639
  var VolumeIndicator = class {
37638
37640
  constructor() {
37641
+ /** Null until start() — pre-start setInputs/resume must record without pushing. */
37642
+ this.ctx = null;
37639
37643
  this.inputs = {};
37640
37644
  }
37641
37645
  start(ctx, inputs) {
@@ -37652,13 +37656,13 @@ var VolumeIndicator = class {
37652
37656
  }
37653
37657
  setInputs(inputs) {
37654
37658
  this.inputs = inputs;
37655
- this.ctx.pushData(volumeLayerData(inputs));
37659
+ this.ctx?.pushData(volumeLayerData(inputs));
37656
37660
  }
37657
37661
  /** Hiding is a renderer-layer flag (set via `setIndicatorVisible`); no resources to free. */
37658
37662
  suspend() {
37659
37663
  }
37660
37664
  resume() {
37661
- this.ctx.pushData(volumeLayerData(this.inputs));
37665
+ this.ctx?.pushData(volumeLayerData(this.inputs));
37662
37666
  }
37663
37667
  stop() {
37664
37668
  }
@@ -37704,6 +37708,8 @@ function vpvrLayerData(inputs) {
37704
37708
  }
37705
37709
  var VpvrIndicator = class {
37706
37710
  constructor() {
37711
+ /** Null until start() — pre-start setInputs/resume must record without pushing. */
37712
+ this.ctx = null;
37707
37713
  this.inputs = {};
37708
37714
  }
37709
37715
  start(ctx, inputs) {
@@ -37720,13 +37726,13 @@ var VpvrIndicator = class {
37720
37726
  }
37721
37727
  setInputs(inputs) {
37722
37728
  this.inputs = inputs;
37723
- this.ctx.pushData(vpvrLayerData(inputs));
37729
+ this.ctx?.pushData(vpvrLayerData(inputs));
37724
37730
  }
37725
37731
  /** Hiding is a renderer-layer flag (set via `setIndicatorVisible`); no resources to free. */
37726
37732
  suspend() {
37727
37733
  }
37728
37734
  resume() {
37729
- this.ctx.pushData(vpvrLayerData(this.inputs));
37735
+ this.ctx?.pushData(vpvrLayerData(this.inputs));
37730
37736
  }
37731
37737
  stop() {
37732
37738
  }
@@ -37792,6 +37798,8 @@ function toPoints(bars, values, colors) {
37792
37798
  var ClassicIndicator = class {
37793
37799
  constructor(spec) {
37794
37800
  this.spec = spec;
37801
+ /** Null until start() — a pre-start setInputs must record without computing. */
37802
+ this.ctx = null;
37795
37803
  this.inputs = {};
37796
37804
  }
37797
37805
  start(ctx, inputs) {
@@ -37806,6 +37814,7 @@ var ClassicIndicator = class {
37806
37814
  }
37807
37815
  setInputs(inputs) {
37808
37816
  this.inputs = inputs;
37817
+ if (!this.ctx) return;
37809
37818
  this.recompute();
37810
37819
  }
37811
37820
  /** Nothing to free — the compute reads the live bar accessor on demand. */
@@ -37817,6 +37826,7 @@ var ClassicIndicator = class {
37817
37826
  stop() {
37818
37827
  }
37819
37828
  recompute() {
37829
+ if (!this.ctx) return;
37820
37830
  const bars = this.ctx.bars();
37821
37831
  const out = this.spec.compute(bars, this.inputs);
37822
37832
  const instanceId = this.spec.type;
@@ -41843,7 +41853,7 @@ var ChartCell = class {
41843
41853
  // A RESTORED ledger is authoritative for the auto-added volume too: a
41844
41854
  // slot persisted without it must come back without it (fresh slots
41845
41855
  // keep the workspace default).
41846
- volume: seed.indicators ? seed.indicators.natives.includes("volume") : deps.volume,
41856
+ volume: seed.indicators ? seed.indicators.natives.some((e) => ledgerNativeType(e) === "volume") : deps.volume,
41847
41857
  nativeBackend: deps.nativeBackend,
41848
41858
  // The user's drawings option minus its toolbar: one SHARED bar serves
41849
41859
  // the whole workspace (per-cell bars would cost a 44px gutter each).
@@ -42503,7 +42513,7 @@ var ChartCell = class {
42503
42513
  addExternalIndicator(entry) {
42504
42514
  this.addManifestInstance(
42505
42515
  { ...entry, enabled: true },
42506
- { external: true, ...entry.inputs ? { inputs: entry.inputs } : {}, ...entry.props ? { props: entry.props } : {} }
42516
+ { external: true, ...entry.inputs ? { inputs: entry.inputs } : {}, ...entry.props ? { props: entry.props } : {}, ...entry.hidden ? { hidden: true } : {} }
42507
42517
  );
42508
42518
  }
42509
42519
  /** Add ONE instance of a manifest entry (repeatable — duplicates are legitimate). */
@@ -1,8 +1,8 @@
1
1
  import { O as OHLCV, V as VisibleRangePreset, a as VisibleRange, b as VelaOptions, I as InputValue, c as VelaTheme, N as NativeBackend, d as MarketSession } from './options-BCRmYALw.cjs';
2
- import { S as SyncSetting, V as VelaStorage, C as CellState, W as WidgetHistory, R as ResolvedIndicator, a as StatuslinePart, b as RangePreset, T as TrackSizes, c as VelaShellOptions, d as SyncOptions, e as SyncKind, f as WorkspaceState } from './statusline-model-hY9cK4BS.cjs';
3
- export { g as ChartState, P as PanelsState, h as decodeState, i as encodeState, s as sanitizeState } from './statusline-model-hY9cK4BS.cjs';
2
+ import { S as SyncSetting, V as VelaStorage, C as CellState, W as WidgetHistory, R as ResolvedIndicator, a as StatuslinePart, b as RangePreset, T as TrackSizes, c as VelaShellOptions, d as SyncOptions, e as SyncKind, f as WorkspaceState } from './statusline-model-E7CMw5pQ.cjs';
3
+ export { g as ChartState, P as PanelsState, h as decodeState, i as encodeState, s as sanitizeState } from './statusline-model-E7CMw5pQ.cjs';
4
4
  import { K as KeymapManager } from './keymap-CGOz5F5f.cjs';
5
- import { I as IndicatorHandle, S as ScriptingEngine, W as WidgetContext, V as Vela, E as ExternalIndicatorEntry, a as ScriptRun } from './contributions-DEPRtkmG.cjs';
5
+ import { I as IndicatorHandle, S as ScriptingEngine, W as WidgetContext, V as Vela, E as ExternalIndicatorEntry, a as ScriptRun } from './contributions-D8HdlKmp.cjs';
6
6
  import { M as MarketDataFeed } from './DataProvider-UtWw2CgJ.cjs';
7
7
 
8
8
  /** The cells that follow `originId` under `setting` — PURE (never includes the origin). */
@@ -1,8 +1,8 @@
1
1
  import { O as OHLCV, V as VisibleRangePreset, a as VisibleRange, b as VelaOptions, I as InputValue, c as VelaTheme, N as NativeBackend, d as MarketSession } from './options-BCRmYALw.js';
2
- import { S as SyncSetting, V as VelaStorage, C as CellState, W as WidgetHistory, R as ResolvedIndicator, a as StatuslinePart, b as RangePreset, T as TrackSizes, c as VelaShellOptions, d as SyncOptions, e as SyncKind, f as WorkspaceState } from './statusline-model-wW3m4in1.js';
3
- export { g as ChartState, P as PanelsState, h as decodeState, i as encodeState, s as sanitizeState } from './statusline-model-wW3m4in1.js';
2
+ import { S as SyncSetting, V as VelaStorage, C as CellState, W as WidgetHistory, R as ResolvedIndicator, a as StatuslinePart, b as RangePreset, T as TrackSizes, c as VelaShellOptions, d as SyncOptions, e as SyncKind, f as WorkspaceState } from './statusline-model-CCP1zm_Z.js';
3
+ export { g as ChartState, P as PanelsState, h as decodeState, i as encodeState, s as sanitizeState } from './statusline-model-CCP1zm_Z.js';
4
4
  import { K as KeymapManager } from './keymap-CGOz5F5f.js';
5
- import { I as IndicatorHandle, S as ScriptingEngine, W as WidgetContext, V as Vela, E as ExternalIndicatorEntry, a as ScriptRun } from './contributions-5nz3PLRe.js';
5
+ import { I as IndicatorHandle, S as ScriptingEngine, W as WidgetContext, V as Vela, E as ExternalIndicatorEntry, a as ScriptRun } from './contributions-FqIWhN4p.js';
6
6
  import { M as MarketDataFeed } from './DataProvider-Cb-2lC5O.js';
7
7
 
8
8
  /** The cells that follow `originId` under `setting` — PURE (never includes the origin). */
package/dist/workspace.js CHANGED
@@ -1,5 +1,5 @@
1
- export { ChartCell, GRID_PICKER_MAX, VelaWorkspace, activeAfterLayout, decodeState, encodeState, ensureLayout, evenTracks, gridStyles, layoutDefinition, layoutForGrid, layoutShape, layouts, memoryStorageAdapter, rangesWithin, registerBuiltinLayouts, registerLayout, resizeTracks, sanitizeState, syncTargets, trackOffsets, unregisterLayout } from './chunk-627A5HEV.js';
2
- import './chunk-22QJKGXX.js';
1
+ export { ChartCell, GRID_PICKER_MAX, VelaWorkspace, activeAfterLayout, decodeState, encodeState, ensureLayout, evenTracks, gridStyles, layoutDefinition, layoutForGrid, layoutShape, layouts, memoryStorageAdapter, rangesWithin, registerBuiltinLayouts, registerLayout, resizeTracks, sanitizeState, syncTargets, trackOffsets, unregisterLayout } from './chunk-BRPFYKTT.js';
2
+ import './chunk-TRZQQUTR.js';
3
3
  import './chunk-IFJJPXSV.js';
4
4
  import './chunk-XCBJU674.js';
5
5
  import './chunk-T5Z5YUCF.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luxalgo/vela",
3
- "version": "0.6.19",
3
+ "version": "0.6.21",
4
4
  "description": "Open-source charting library with a native high-performance renderer, drawing tools, pluggable chart types and pluggable scripting engines.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://luxalgo.com/vela",
@@ -77,6 +77,7 @@
77
77
  },
78
78
  "devDependencies": {
79
79
  "eslint": "^9.0.0",
80
+ "jsdom": "^29.1.1",
80
81
  "tsup": "^8.0.0",
81
82
  "typescript": "~5.9.3",
82
83
  "typescript-eslint": "^8.0.0",