@luxalgo/vela 0.7.7 → 0.7.8

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/NOTICE CHANGED
@@ -1,28 +1,28 @@
1
- Vela
2
- Copyright (c) 2026 LuxAlgo
3
- https://luxalgo.com/vela
4
-
5
- This product includes the Vela charting library, developed by LuxAlgo.
6
-
7
- ATTRIBUTION REQUIREMENT
8
-
9
- Any product, website, or application that displays charts rendered by this
10
- software must show a visible attribution to the Vela project on every page or
11
- screen where such a chart is displayed.
12
-
13
- The library satisfies this requirement automatically: it renders an attribution
14
- mark (the project logomark linking to the Vela project page) on the chart
15
- itself, enabled by default. You may restyle or reposition this mark to fit your
16
- design.
17
-
18
- You may disable the built-in mark (renderer feature `attribution`) ONLY if you
19
- display an equivalent visible attribution — the name "Vela" together with a
20
- link to the project page above — elsewhere on the same page or screen, in a
21
- place available to your users.
22
-
23
- Removing, hiding, or obscuring the attribution without providing the
24
- equivalent notice described above is not permitted.
25
-
26
- This file constitutes the NOTICE file described in Section 4(d) of the Apache
27
- License, Version 2.0: redistributions of this software, in source or binary
28
- form, must include a readable copy of these attribution notices.
1
+ Vela
2
+ Copyright (c) 2026 LuxAlgo
3
+ https://luxalgo.com/vela
4
+
5
+ This product includes the Vela charting library, developed by LuxAlgo.
6
+
7
+ ATTRIBUTION REQUIREMENT
8
+
9
+ Any product, website, or application that displays charts rendered by this
10
+ software must show a visible attribution to the Vela project on every page or
11
+ screen where such a chart is displayed.
12
+
13
+ The library satisfies this requirement automatically: it renders an attribution
14
+ mark (the project logomark linking to the Vela project page) on the chart
15
+ itself, enabled by default. You may restyle or reposition this mark to fit your
16
+ design.
17
+
18
+ You may disable the built-in mark (renderer feature `attribution`) ONLY if you
19
+ display an equivalent visible attribution — the name "Vela" together with a
20
+ link to the project page above — elsewhere on the same page or screen, in a
21
+ place available to your users.
22
+
23
+ Removing, hiding, or obscuring the attribution without providing the
24
+ equivalent notice described above is not permitted.
25
+
26
+ This file constitutes the NOTICE file described in Section 4(d) of the Apache
27
+ License, Version 2.0: redistributions of this software, in source or binary
28
+ form, must include a readable copy of these attribution notices.
@@ -1,4 +1,4 @@
1
- import { parseSymbol, priceStyleIds, BUILTIN_PRICE_STYLES, tzButtonLabel, SecondClock, resolveTimezone, timezoneMenuRows, isGroupRow, defaultMemberOf, groupKeyOf, groupMembers, LEGEND_AT_TOP_ATTR, normalizeSession, Vela, normalizeTimezone, TypedEventBus, MultiProviderFeed, registerBuiltinChartTypes, resolveTheme, buildToolbar, createCustomMark, createAttributionMark, DrawingToolbar, applyAttributionMarkTheme, sharedBarStore, timeframeToMs } from './chunk-RVQWJOEE.js';
1
+ import { parseSymbol, priceStyleIds, BUILTIN_PRICE_STYLES, tzButtonLabel, SecondClock, resolveTimezone, timezoneMenuRows, isGroupRow, defaultMemberOf, groupKeyOf, groupMembers, LEGEND_AT_TOP_ATTR, normalizeSession, Vela, normalizeTimezone, isExchangeTimezone, TypedEventBus, MultiProviderFeed, registerBuiltinChartTypes, resolveTheme, buildToolbar, createCustomMark, createAttributionMark, DrawingToolbar, applyAttributionMarkTheme, sharedBarStore, timeframeToMs } from './chunk-N4ZZYLMP.js';
2
2
  import { chartType, resolveTopbarComposition, topbarActionOverride, TOPBAR_BUILTIN_IDS, widgetActions, SidePanel, sidePanels, DEFAULT_PANEL_ORDER, symbolRanking, resolveEngines, legendActionsProviderFor, legendCalloutsProviderFor, statePersistenceHandlers, topbarHas, rendererDefaults, widgetAttachments, getDrawingType, inputDeltas } from './chunk-BFA32GOU.js';
3
3
  import { Tooltip, KeymapManager, isEditableTarget, Drawer } from './chunk-PVGWNF7V.js';
4
4
  import { Menu, Dialog, CalloutBubble, applyPlotOverlayTokens, ensureUIHost } from './chunk-WTWGEB7K.js';
@@ -5569,6 +5569,8 @@ var ChartCell = class {
5569
5569
  this.activeRangeId = null;
5570
5570
  /** Latched verdict of {@link sessionAvailable} (async metadata, sticky per symbol). */
5571
5571
  this.sessionAvailableFlag = false;
5572
+ /** The symbol of the most recent metadata probe — an older one landing late is dropped. */
5573
+ this.metadataProbeSymbol = null;
5572
5574
  /** Latched: the symbol's extended tape wraps midnight (an overnight roll market) —
5573
5575
  * one extended-hours shading phase instead of the pre/post split. */
5574
5576
  this.sessionOvernightFlag = false;
@@ -5637,7 +5639,11 @@ var ChartCell = class {
5637
5639
  nativeBackend: deps.nativeBackend,
5638
5640
  // The user's drawings option minus its toolbar: one SHARED bar serves
5639
5641
  // the whole workspace (per-cell bars would cost a 44px gutter each).
5640
- drawings: cellDrawings(deps.chartDefaults.drawings)
5642
+ drawings: cellDrawings(deps.chartDefaults.drawings),
5643
+ // The renderer's own Time zone row edits a resolved IANA zone; the cell
5644
+ // contributes the workspace picker instead (`time-zone`, with the
5645
+ // exchange rule — see pushSettingsSections).
5646
+ settings: { ...deps.chartDefaults.settings, hidden: [...deps.chartDefaults.settings?.hidden ?? [], "symbol.timezone"] }
5641
5647
  },
5642
5648
  { dataFeed: deps.feed }
5643
5649
  );
@@ -5686,7 +5692,10 @@ var ChartCell = class {
5686
5692
  const list = providers.length > 0 ? providers.join(", ") : "none";
5687
5693
  this.deps.toast(`No registered provider serves "${symbol2}" (registered: ${list})`, "error", 6e3);
5688
5694
  });
5689
- this.inner.on("load:start", () => this.watermark?.setLoading(true));
5695
+ this.inner.on("load:start", ({ symbol: symbol2 }) => {
5696
+ this.watermark?.setLoading(true);
5697
+ this.refreshSymbolMetadata(symbol2);
5698
+ });
5690
5699
  this.inner.on("load:end", () => {
5691
5700
  this.watermark?.setLoading(false);
5692
5701
  this.refreshSessionShading();
@@ -5857,12 +5866,19 @@ var ChartCell = class {
5857
5866
  }
5858
5867
  /** Re-read the symbol's metadata: session posture (RTH/ETH toggle, shading) and its
5859
5868
  * trading zone (the exchange rule). Async — the workspace re-projects when a verdict lands. */
5860
- refreshSymbolMetadata() {
5869
+ refreshSymbolMetadata(symbol = this.state.symbol, retry = true) {
5861
5870
  const chart = this.inner;
5862
- const symbol = this.state.symbol;
5863
5871
  if (!chart || !symbol) return;
5872
+ this.metadataProbeSymbol = symbol;
5864
5873
  void chart.data.symbolInfo(symbol).then((si) => {
5865
- if (this.inner !== chart) return;
5874
+ if (this.inner !== chart || this.metadataProbeSymbol !== symbol) return;
5875
+ if (si === void 0 && retry) {
5876
+ void chart.data.ready().then(() => {
5877
+ if (this.inner === chart && this.metadataProbeSymbol === symbol) this.refreshSymbolMetadata(symbol, false);
5878
+ });
5879
+ return;
5880
+ }
5881
+ if (this.state.symbol !== symbol) return;
5866
5882
  const available = typeof si?.session === "string" && si.session !== "" && si.session !== "24x7";
5867
5883
  const overnight = parseSessionSpec(si)?.overnight === true;
5868
5884
  const zone = typeof si?.timezone === "string" && si.timezone !== "" ? si.timezone : void 0;
@@ -5977,6 +5993,24 @@ var ChartCell = class {
5977
5993
  }
5978
5994
  ]
5979
5995
  };
5996
+ const timezoneSection = {
5997
+ title: "Time zone",
5998
+ id: "time-zone",
5999
+ placement: "symbol",
6000
+ rows: [
6001
+ {
6002
+ kind: "select",
6003
+ label: "Time zone",
6004
+ id: "zone",
6005
+ options: timezoneMenuRows(this.deps.timezone()).map((r) => [r.value, r.label]),
6006
+ get: () => {
6007
+ const choice = this.deps.timezone();
6008
+ return isExchangeTimezone(choice) ? choice : normalizeTimezone(choice);
6009
+ },
6010
+ set: (v) => this.deps.setTimezone(v)
6011
+ }
6012
+ ]
6013
+ };
5980
6014
  const watermarkSection = {
5981
6015
  title: "Watermark",
5982
6016
  id: "watermark",
@@ -6045,7 +6079,7 @@ var ChartCell = class {
6045
6079
  ]
6046
6080
  });
6047
6081
  }
6048
- sections.push(advanced);
6082
+ sections.push(advanced, timezoneSection);
6049
6083
  if (this.sessionAvailableFlag) sections.push(sessionSection);
6050
6084
  sections.push(watermarkSection);
6051
6085
  chart.renderer.setSettingsSections(sections);