@luxalgo/vela 0.6.10 → 0.6.11
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/{DataProvider-CWmp31dA.d.ts → DataProvider-BBf-jc6W.d.ts} +1 -1
- package/dist/{DataProvider-l_eLMly_.d.cts → DataProvider-p0TEyhlX.d.cts} +1 -1
- package/dist/{chunk-FFOP37FQ.js → chunk-73PEA4MU.js} +131 -33
- package/dist/{chunk-NMTQXNT4.js → chunk-IO3NYSQV.js} +65 -22
- package/dist/{chunk-4KZVZ7QQ.js → chunk-MTLJKZDZ.js} +9 -1
- package/dist/{contributions-BCz6Dr6a.d.ts → contributions-Bbe2R-mQ.d.ts} +16 -2
- package/dist/{contributions-D9vTzm5p.d.cts → contributions-CO01zWve.d.cts} +16 -2
- package/dist/index.cjs +139 -32
- package/dist/index.d.cts +12 -6
- package/dist/index.d.ts +12 -6
- package/dist/index.js +3 -3
- package/dist/{options-DSqHsQyN.d.cts → options-yp7sA96q.d.cts} +8 -1
- package/dist/{options-DSqHsQyN.d.ts → options-yp7sA96q.d.ts} +8 -1
- package/dist/{plugin-Bt8hLR8Z.d.cts → plugin-CkkH8QnX.d.cts} +3 -3
- package/dist/{plugin-CH7pfMrE.d.ts → plugin-DwxjM3Ni.d.ts} +3 -3
- package/dist/plugin.cjs +9 -0
- package/dist/plugin.d.cts +4 -4
- package/dist/plugin.d.ts +4 -4
- package/dist/plugin.js +2 -2
- package/dist/providers/binance.d.cts +2 -2
- package/dist/providers/binance.d.ts +2 -2
- package/dist/providers/coinbase.d.cts +2 -2
- package/dist/providers/coinbase.d.ts +2 -2
- package/dist/providers/hyperliquid.d.cts +2 -2
- package/dist/providers/hyperliquid.d.ts +2 -2
- package/dist/{statusline-5K7y4Ya2.d.ts → statusline-CHPDuKNp.d.ts} +13 -5
- package/dist/{statusline-TYLQmoeh.d.cts → statusline-DTHZUFqK.d.cts} +13 -5
- package/dist/ui.d.cts +1 -1
- package/dist/ui.d.ts +1 -1
- package/dist/vela.global.js +139 -32
- package/dist/vela.global.min.js +43 -43
- package/dist/widget.cjs +201 -52
- package/dist/widget.d.cts +6 -6
- package/dist/widget.d.ts +6 -6
- package/dist/widget.js +4 -4
- package/dist/workspace.cjs +201 -52
- package/dist/workspace.d.cts +20 -11
- package/dist/workspace.d.ts +20 -11
- package/dist/workspace.js +3 -3
- package/package.json +1 -1
- /package/dist/{chunk-AOGZBKUE.js → chunk-H26BEHF4.js} +0 -0
package/dist/widget.cjs
CHANGED
|
@@ -16880,11 +16880,12 @@ async function resolveIndicators(config, fetchImpl = fetch) {
|
|
|
16880
16880
|
}
|
|
16881
16881
|
return out;
|
|
16882
16882
|
}
|
|
16883
|
+
var ledgerEntryName = (e) => typeof e === "string" ? e : e.name;
|
|
16883
16884
|
function indicatorLedger(i) {
|
|
16884
16885
|
const natives = [...i.present];
|
|
16885
16886
|
if (i.volumePending && !natives.includes("volume")) natives.push("volume");
|
|
16886
16887
|
return {
|
|
16887
|
-
manifest: i.manifestSettled ? [...i.
|
|
16888
|
+
manifest: i.manifestSettled ? [...i.instanceEntries] : [...i.pendingManifest ?? i.instanceEntries],
|
|
16888
16889
|
natives
|
|
16889
16890
|
};
|
|
16890
16891
|
}
|
|
@@ -17818,7 +17819,17 @@ function sanitizeCell(raw) {
|
|
|
17818
17819
|
if (c.drawings != null && typeof c.drawings === "object") out.drawings = c.drawings;
|
|
17819
17820
|
const ind = c.indicators;
|
|
17820
17821
|
if (ind != null && typeof ind === "object") {
|
|
17821
|
-
const manifest = Array.isArray(ind.manifest) ? ind.manifest.
|
|
17822
|
+
const manifest = Array.isArray(ind.manifest) ? ind.manifest.flatMap((n) => {
|
|
17823
|
+
if (typeof n === "string") return [n];
|
|
17824
|
+
if (n != null && typeof n === "object" && typeof n.name === "string") {
|
|
17825
|
+
const e = n;
|
|
17826
|
+
const bag = (v) => v != null && typeof v === "object" && !Array.isArray(v) ? v : void 0;
|
|
17827
|
+
const inputs = bag(e.inputs);
|
|
17828
|
+
const props = bag(e.props);
|
|
17829
|
+
return [inputs || props ? { name: e.name, ...inputs ? { inputs } : {}, ...props ? { props } : {} } : e.name];
|
|
17830
|
+
}
|
|
17831
|
+
return [];
|
|
17832
|
+
}) : [];
|
|
17822
17833
|
const natives = Array.isArray(ind.natives) ? ind.natives.filter((n) => typeof n === "string") : [];
|
|
17823
17834
|
out.indicators = { manifest, natives };
|
|
17824
17835
|
}
|
|
@@ -18003,6 +18014,12 @@ var IndicatorHandleImpl = class {
|
|
|
18003
18014
|
get visible() {
|
|
18004
18015
|
return this.visibleState;
|
|
18005
18016
|
}
|
|
18017
|
+
inputValues() {
|
|
18018
|
+
return this.controller.inputValuesOf(this.id);
|
|
18019
|
+
}
|
|
18020
|
+
propValues() {
|
|
18021
|
+
return this.controller.propValuesOf(this.id);
|
|
18022
|
+
}
|
|
18006
18023
|
setInput(key, value) {
|
|
18007
18024
|
this.controller.applyInputs(this.id, { [key]: value });
|
|
18008
18025
|
}
|
|
@@ -18142,6 +18159,7 @@ var RUN_EMIT_THROTTLE_MS = 1e3;
|
|
|
18142
18159
|
var PREVIEW_BARS = 300;
|
|
18143
18160
|
var SINGLE_LOAD_BARS = 5e3;
|
|
18144
18161
|
var CHUNK_BARS = 1e4;
|
|
18162
|
+
var FIRST_PAINT_BARS = 100;
|
|
18145
18163
|
var GAP_FACTOR = 1.5;
|
|
18146
18164
|
var HEAL_COOLDOWN_MS = 5e3;
|
|
18147
18165
|
var EngineOrchestrator = class _EngineOrchestrator {
|
|
@@ -18411,6 +18429,7 @@ var EngineOrchestrator = class _EngineOrchestrator {
|
|
|
18411
18429
|
let painted = false;
|
|
18412
18430
|
const paint = (bars, final) => {
|
|
18413
18431
|
if (this.generation !== gen || !final && bars.length === 0) return;
|
|
18432
|
+
if (!painted && !final && bars.length < Math.min(requested, FIRST_PAINT_BARS)) return;
|
|
18414
18433
|
this.setBarSeries(bars, painted ? { preserveView: true } : void 0);
|
|
18415
18434
|
if (!painted && bars.length > 0) {
|
|
18416
18435
|
painted = true;
|
|
@@ -19041,6 +19060,15 @@ var EngineOrchestrator = class _EngineOrchestrator {
|
|
|
19041
19060
|
record.pendingCause = "inputs";
|
|
19042
19061
|
if (record.session) record.session.update(record.inputValues);
|
|
19043
19062
|
else if (record.native && !record.hidden) record.native.instance.setInputs(record.inputValues);
|
|
19063
|
+
this.events.emit("indicator:inputs", { id });
|
|
19064
|
+
}
|
|
19065
|
+
/** IndicatorController: the CURRENT stored input values (defaults merged with edits). */
|
|
19066
|
+
inputValuesOf(id) {
|
|
19067
|
+
return { ...this.registry.get(id)?.inputValues };
|
|
19068
|
+
}
|
|
19069
|
+
/** IndicatorController: the CURRENT declaration-prop overrides. */
|
|
19070
|
+
propValuesOf(id) {
|
|
19071
|
+
return { ...this.registry.get(id)?.propValues };
|
|
19044
19072
|
}
|
|
19045
19073
|
/** IndicatorController: re-run an indicator with merged declaration-prop overrides.
|
|
19046
19074
|
* Same lifecycle as {@link applyInputs} — a prop change replays the whole script.
|
|
@@ -19054,6 +19082,7 @@ var EngineOrchestrator = class _EngineOrchestrator {
|
|
|
19054
19082
|
if (!record.hidden) this.setLoading(record, true);
|
|
19055
19083
|
record.pendingCause = "inputs";
|
|
19056
19084
|
record.session.update(record.inputValues, record.propValues);
|
|
19085
|
+
this.events.emit("indicator:inputs", { id });
|
|
19057
19086
|
}
|
|
19058
19087
|
/** IndicatorController: tear down an indicator and (if now empty) its pane. */
|
|
19059
19088
|
/** Live handles of every indicator on the chart (script + native), insertion order. */
|
|
@@ -20275,6 +20304,14 @@ function inputVisible(when, values) {
|
|
|
20275
20304
|
const conds = Array.isArray(when) ? when : [when];
|
|
20276
20305
|
return conds.every((c) => c.anyOf ? c.anyOf.some((x) => x === values[c.key]) : values[c.key] === c.equals);
|
|
20277
20306
|
}
|
|
20307
|
+
function inputDeltas(schema, values) {
|
|
20308
|
+
const out = {};
|
|
20309
|
+
for (const s of schema) {
|
|
20310
|
+
const v = values[s.key];
|
|
20311
|
+
if (v !== void 0 && JSON.stringify(v) !== JSON.stringify(s.defval)) out[s.key] = v;
|
|
20312
|
+
}
|
|
20313
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
20314
|
+
}
|
|
20278
20315
|
|
|
20279
20316
|
// src/renderers/shared/IndicatorInputsDialog.ts
|
|
20280
20317
|
var PROPS_TAB = "Properties";
|
|
@@ -23862,6 +23899,7 @@ var DOUBLE_TAP_MS = 350;
|
|
|
23862
23899
|
var DOUBLE_TAP_SLOP = 30;
|
|
23863
23900
|
var TIME_SCALE_K = 4e-3;
|
|
23864
23901
|
var WHEEL_ZOOM_K = 4e-3;
|
|
23902
|
+
var WHEEL_PRICE_DRAG_PX = 0.25;
|
|
23865
23903
|
function wheelZoomAnchor(coords, cursorX, rightEdge) {
|
|
23866
23904
|
if (rightEdge) return { logical: coords.rightEdgeLogical, x: coords.width };
|
|
23867
23905
|
return { logical: coords.xToLogical(cursorX), x: cursorX };
|
|
@@ -23992,7 +24030,7 @@ var InputController = class {
|
|
|
23992
24030
|
this.capture(e.pointerId);
|
|
23993
24031
|
return;
|
|
23994
24032
|
}
|
|
23995
|
-
if (e.shiftKey && this.regionAt(x, y) === "data" && this.deps.drawingsMeasureStart?.(x, y)) {
|
|
24033
|
+
if (e.shiftKey && this.regionAt(x, y) === "data" && this.deps.drawingsMeasureStart?.(x, y, this.snapMode(e))) {
|
|
23996
24034
|
this.region = "drawing";
|
|
23997
24035
|
this.capture(e.pointerId);
|
|
23998
24036
|
return;
|
|
@@ -24106,7 +24144,7 @@ var InputController = class {
|
|
|
24106
24144
|
const wasTouch = e.pointerType === "touch";
|
|
24107
24145
|
const tapRelease = this.dragging && !this.moved && (!wasTouch || Math.hypot(x - this.startX, y - this.startY) <= TOUCH_TAP_SLOP);
|
|
24108
24146
|
if (this.dragging && this.region === "drawing") {
|
|
24109
|
-
this.deps.drawingsPointerUp?.(x, y);
|
|
24147
|
+
this.deps.drawingsPointerUp?.(x, y, this.snapMode(e));
|
|
24110
24148
|
} else if (tapRelease && this.region === "data") {
|
|
24111
24149
|
this.deps.onClick(x, y);
|
|
24112
24150
|
} else if (this.dragging && this.region === "data") {
|
|
@@ -24127,7 +24165,7 @@ var InputController = class {
|
|
|
24127
24165
|
if (e.pointerType === "touch") this.touches.delete(e.pointerId);
|
|
24128
24166
|
this.cancelLongPress();
|
|
24129
24167
|
if (!this.dragging) return;
|
|
24130
|
-
if (this.region === "drawing" && !Number.isNaN(this.cursorX)) this.deps.drawingsPointerUp?.(this.cursorX, this.cursorY);
|
|
24168
|
+
if (this.region === "drawing" && !Number.isNaN(this.cursorX)) this.deps.drawingsPointerUp?.(this.cursorX, this.cursorY, this.snapMode(e));
|
|
24131
24169
|
if (this.region === "crosshair" || e.pointerType === "touch") this.deps.onPointerMove(null, null);
|
|
24132
24170
|
this.endGesture(e);
|
|
24133
24171
|
};
|
|
@@ -24143,6 +24181,12 @@ var InputController = class {
|
|
|
24143
24181
|
this.onWheel = (e) => {
|
|
24144
24182
|
e.preventDefault();
|
|
24145
24183
|
this.deps.drawingsClearTransient?.();
|
|
24184
|
+
const { x, y } = this.local(e);
|
|
24185
|
+
if (this.regionAt(x, y) === "price" && e.deltaY !== 0) {
|
|
24186
|
+
this.deps.beginPriceScale(x, y);
|
|
24187
|
+
this.deps.priceScaleBy(e.deltaY * WHEEL_PRICE_DRAG_PX);
|
|
24188
|
+
return;
|
|
24189
|
+
}
|
|
24146
24190
|
const coords = this.deps.getCoords();
|
|
24147
24191
|
const vp = coords.getViewport();
|
|
24148
24192
|
const pan = wheelPanDelta(e.deltaX, e.deltaY, e.shiftKey);
|
|
@@ -24150,9 +24194,8 @@ var InputController = class {
|
|
|
24150
24194
|
this.deps.apply({ barSpacing: vp.barSpacing, rightOffset: wheelPanRightOffset(vp.rightOffset, pan, coords.pxPerBar()) });
|
|
24151
24195
|
return;
|
|
24152
24196
|
}
|
|
24153
|
-
const cursorX = this.local(e).x;
|
|
24154
24197
|
const rightEdge = this.rightEdgeZoom && !(e.ctrlKey || e.metaKey);
|
|
24155
|
-
const anchor = wheelZoomAnchor(coords,
|
|
24198
|
+
const anchor = wheelZoomAnchor(coords, x, rightEdge);
|
|
24156
24199
|
const target = clampBarSpacing(vp.barSpacing * Math.exp(-e.deltaY * WHEEL_ZOOM_K));
|
|
24157
24200
|
this.deps.zoomTo(target, anchor.logical, anchor.x);
|
|
24158
24201
|
};
|
|
@@ -25634,6 +25677,15 @@ function drawingSetEmpty(s) {
|
|
|
25634
25677
|
function fontSizePx(size) {
|
|
25635
25678
|
return size === "auto" ? 12 : namedFontSize(size);
|
|
25636
25679
|
}
|
|
25680
|
+
function lineCoversWindow(a, b, extend, lo, hi) {
|
|
25681
|
+
const minX = Math.min(a, b);
|
|
25682
|
+
const maxX = Math.max(a, b);
|
|
25683
|
+
if (a === b) return a >= lo && a <= hi;
|
|
25684
|
+
if (extend === "both") return true;
|
|
25685
|
+
if (extend === "left") return maxX >= lo;
|
|
25686
|
+
if (extend === "right") return minX <= hi;
|
|
25687
|
+
return maxX >= lo && minX <= hi;
|
|
25688
|
+
}
|
|
25637
25689
|
var DrawingSceneRenderer = class {
|
|
25638
25690
|
constructor(deps, set = EMPTY_DRAWING_SET) {
|
|
25639
25691
|
this.deps = deps;
|
|
@@ -25698,7 +25750,7 @@ var DrawingSceneRenderer = class {
|
|
|
25698
25750
|
};
|
|
25699
25751
|
for (const ln of this.set.lines) {
|
|
25700
25752
|
if (ln.invisible) continue;
|
|
25701
|
-
if (!
|
|
25753
|
+
if (!lineCoversWindow(this.logicalOf(ln.xloc, ln.x1), this.logicalOf(ln.xloc, ln.x2), ln.extend, lo, hi)) continue;
|
|
25702
25754
|
fold(ln.y1);
|
|
25703
25755
|
fold(ln.y2);
|
|
25704
25756
|
}
|
|
@@ -29548,6 +29600,22 @@ var DrawingInteraction = class {
|
|
|
29548
29600
|
this.snapAt = changed ? { point: snapped, paneId } : null;
|
|
29549
29601
|
return snapped;
|
|
29550
29602
|
}
|
|
29603
|
+
/**
|
|
29604
|
+
* Resolve a cursor pixel through the magnet and return the snapped pixel — the same
|
|
29605
|
+
* conversion drawing placement uses. Updates the snap-ring marker. The measure
|
|
29606
|
+
* ruler goes through this so its endpoints follow weak/strong/Ctrl magnet too.
|
|
29607
|
+
*/
|
|
29608
|
+
snapCursor(x, y, mode) {
|
|
29609
|
+
const proj = this.deps.projector();
|
|
29610
|
+
const paneId = proj.paneIdAtY(y) ?? "price";
|
|
29611
|
+
const point = this.resolve(x, y, paneId, mode);
|
|
29612
|
+
const sy = proj.yOf(point.price, paneId);
|
|
29613
|
+
return { x: proj.xOf(point.time), y: sy ?? y };
|
|
29614
|
+
}
|
|
29615
|
+
/** Drop the snap-ring marker (a transient mode ended without going through `up`). */
|
|
29616
|
+
clearSnapMarker() {
|
|
29617
|
+
this.snapAt = null;
|
|
29618
|
+
}
|
|
29551
29619
|
/** Resolve a pixel to a data point with the segment angle locked to 45° steps around
|
|
29552
29620
|
* `pivot` (Shift held on a line tool). Works in PIXEL space — the user reasons about
|
|
29553
29621
|
* the angle they see, not about time/price units. The magnet is bypassed: snapping
|
|
@@ -30953,30 +31021,39 @@ var MeasureOverlay = class {
|
|
|
30953
31021
|
isFinished() {
|
|
30954
31022
|
return this.state === "finished";
|
|
30955
31023
|
}
|
|
30956
|
-
/** A press: begin the measurement, or finish it on the second click.
|
|
30957
|
-
|
|
31024
|
+
/** A press: begin the measurement, or finish it on the second click.
|
|
31025
|
+
* `x,y` are the raw cursor (drag-slop vs click-move-click). `gx,gy` are the
|
|
31026
|
+
* graphic endpoints — magnet-snapped when the magnet is on, else the same as `x,y`. */
|
|
31027
|
+
down(x, y, gx = x, gy = y) {
|
|
30958
31028
|
if (this.state === "measuring") {
|
|
30959
|
-
this.end = { x, y };
|
|
31029
|
+
this.end = { x: gx, y: gy };
|
|
30960
31030
|
this.state = "finished";
|
|
30961
31031
|
return;
|
|
30962
31032
|
}
|
|
30963
|
-
this.start = { x, y };
|
|
30964
|
-
this.end = { x, y };
|
|
31033
|
+
this.start = { x: gx, y: gy };
|
|
31034
|
+
this.end = { x: gx, y: gy };
|
|
30965
31035
|
this.pressX = x;
|
|
30966
31036
|
this.pressY = y;
|
|
30967
31037
|
this.state = "measuring";
|
|
30968
31038
|
}
|
|
31039
|
+
/** Size the in-progress ruler. `x,y` are the graphic (magnet-snapped) cursor. */
|
|
30969
31040
|
move(x, y) {
|
|
30970
31041
|
if (this.state === "measuring") this.end = { x, y };
|
|
30971
31042
|
}
|
|
30972
31043
|
/** A release: finish if the press was actually dragged (press-drag-release), else wait
|
|
30973
|
-
* for the second click (click-move-click).
|
|
30974
|
-
|
|
31044
|
+
* for the second click (click-move-click). `x,y` are the raw cursor (slop); `gx,gy`
|
|
31045
|
+
* are the graphic end (magnet-snapped when the magnet is on). */
|
|
31046
|
+
up(x, y, gx = x, gy = y) {
|
|
30975
31047
|
if (this.state === "measuring" && Math.hypot(x - this.pressX, y - this.pressY) > DRAG_SLOP4) {
|
|
30976
|
-
this.end = { x, y };
|
|
31048
|
+
this.end = { x: gx, y: gy };
|
|
30977
31049
|
this.state = "finished";
|
|
30978
31050
|
}
|
|
30979
31051
|
}
|
|
31052
|
+
/** Current graphic endpoints in media pixels, or null when idle. */
|
|
31053
|
+
points() {
|
|
31054
|
+
if (!this.start || !this.end) return null;
|
|
31055
|
+
return { start: this.start, end: this.end };
|
|
31056
|
+
}
|
|
30980
31057
|
clear() {
|
|
30981
31058
|
this.state = "idle";
|
|
30982
31059
|
this.start = null;
|
|
@@ -31353,11 +31430,13 @@ var UserDrawingController = class {
|
|
|
31353
31430
|
}
|
|
31354
31431
|
/** Shift+press on the empty plot: arm the measure ruler AND start it at (x, y) in one
|
|
31355
31432
|
* gesture — the equivalent of clicking the toolbar's Measure button, then pressing.
|
|
31356
|
-
*
|
|
31357
|
-
|
|
31433
|
+
* `snap` is the effective magnet (sticky mode, or Ctrl/Cmd-forced strong). Returns
|
|
31434
|
+
* false when a mode/tool is already active (the normal press path owns it). */
|
|
31435
|
+
beginMeasureAt(x, y, snap = "off") {
|
|
31358
31436
|
if (this.measureMode || this.eraserMode || this.activeTool != null) return false;
|
|
31359
31437
|
this.withModeIntent(() => this.toggleMeasure());
|
|
31360
|
-
this.
|
|
31438
|
+
const g = this.interaction.snapCursor(x, y, snap);
|
|
31439
|
+
this.measure.down(x, y, g.x, g.y);
|
|
31361
31440
|
this.render();
|
|
31362
31441
|
return true;
|
|
31363
31442
|
}
|
|
@@ -31379,7 +31458,8 @@ var UserDrawingController = class {
|
|
|
31379
31458
|
return;
|
|
31380
31459
|
}
|
|
31381
31460
|
if (this.measureMode) {
|
|
31382
|
-
this.
|
|
31461
|
+
const g = this.interaction.snapCursor(x, y, snap);
|
|
31462
|
+
this.measure.down(x, y, g.x, g.y);
|
|
31383
31463
|
if (this.measure.isFinished()) this.withModeIntent(() => this.exitMeasure(false));
|
|
31384
31464
|
this.render();
|
|
31385
31465
|
return;
|
|
@@ -31392,7 +31472,8 @@ var UserDrawingController = class {
|
|
|
31392
31472
|
return;
|
|
31393
31473
|
}
|
|
31394
31474
|
if (this.measureMode) {
|
|
31395
|
-
this.
|
|
31475
|
+
const g = this.interaction.snapCursor(x, y, snap);
|
|
31476
|
+
this.measure.move(g.x, g.y);
|
|
31396
31477
|
this.render();
|
|
31397
31478
|
return;
|
|
31398
31479
|
}
|
|
@@ -31410,13 +31491,14 @@ var UserDrawingController = class {
|
|
|
31410
31491
|
this.render();
|
|
31411
31492
|
}
|
|
31412
31493
|
}
|
|
31413
|
-
pointerUp(x, y) {
|
|
31494
|
+
pointerUp(x, y, snap = "off") {
|
|
31414
31495
|
if (this.eraserMode) {
|
|
31415
31496
|
this.erasing = false;
|
|
31416
31497
|
return;
|
|
31417
31498
|
}
|
|
31418
31499
|
if (this.measureMode) {
|
|
31419
|
-
this.
|
|
31500
|
+
const g = this.interaction.snapCursor(x, y, snap);
|
|
31501
|
+
this.measure.up(x, y, g.x, g.y);
|
|
31420
31502
|
if (this.measure.isFinished()) this.withModeIntent(() => this.exitMeasure(false));
|
|
31421
31503
|
this.render();
|
|
31422
31504
|
return;
|
|
@@ -31461,6 +31543,7 @@ var UserDrawingController = class {
|
|
|
31461
31543
|
/** Leave ruler mode. `clearGraphic` keeps a just-finished measurement on screen (false). */
|
|
31462
31544
|
exitMeasure(clearGraphic = true) {
|
|
31463
31545
|
this.measureMode = false;
|
|
31546
|
+
this.interaction.clearSnapMarker();
|
|
31464
31547
|
if (clearGraphic) this.measure.clear();
|
|
31465
31548
|
this.toolbar.setMeasureActive(false);
|
|
31466
31549
|
this.render();
|
|
@@ -31601,15 +31684,28 @@ var UserDrawingController = class {
|
|
|
31601
31684
|
if (this.eraserMode) return "pointer";
|
|
31602
31685
|
return this.interaction.cursorAt(x, y);
|
|
31603
31686
|
}
|
|
31604
|
-
/** Right-click
|
|
31605
|
-
*
|
|
31606
|
-
*
|
|
31607
|
-
*
|
|
31687
|
+
/** Right-click: an explicit escape back to the pointer. Cancels an in-progress
|
|
31688
|
+
* placement or measurement, and also plain-disarms an armed-but-idle drawing
|
|
31689
|
+
* tool or the eraser — so a right-click ALWAYS reverts to the pointer, even in
|
|
31690
|
+
* stay-in-drawing-mode (where Escape would leave a drawing tool armed).
|
|
31691
|
+
* Persistent toggles (magnet, stay-mode, favorites) are untouched. Returns
|
|
31692
|
+
* whether the press was consumed; false lets the host's context menu open
|
|
31693
|
+
* normally. */
|
|
31608
31694
|
cancelPlacement() {
|
|
31609
|
-
if (
|
|
31610
|
-
|
|
31611
|
-
|
|
31612
|
-
|
|
31695
|
+
if (this.measureMode || this.eraserMode) {
|
|
31696
|
+
this.withModeIntent(() => this.measureMode ? this.exitMeasure() : this.exitEraser());
|
|
31697
|
+
return true;
|
|
31698
|
+
}
|
|
31699
|
+
if (this.interaction.isPlacing()) {
|
|
31700
|
+
this.interaction.cancel();
|
|
31701
|
+
if (this.activeTool != null) this.emit({ kind: "arm", type: null });
|
|
31702
|
+
return true;
|
|
31703
|
+
}
|
|
31704
|
+
if (this.activeTool != null) {
|
|
31705
|
+
this.emit({ kind: "arm", type: null });
|
|
31706
|
+
return true;
|
|
31707
|
+
}
|
|
31708
|
+
return false;
|
|
31613
31709
|
}
|
|
31614
31710
|
/** Double-click over a drawing → suppress the chart's view reset (single-click already
|
|
31615
31711
|
* opens settings). Returns true only when a drawing is under the cursor. */
|
|
@@ -31635,6 +31731,10 @@ var UserDrawingController = class {
|
|
|
31635
31731
|
return true;
|
|
31636
31732
|
}
|
|
31637
31733
|
if (this.interaction.cancel()) return true;
|
|
31734
|
+
if (this.measureMode) {
|
|
31735
|
+
this.withModeIntent(() => this.exitMeasure());
|
|
31736
|
+
return true;
|
|
31737
|
+
}
|
|
31638
31738
|
if (this.selectedIds.size) {
|
|
31639
31739
|
this.clearSelection();
|
|
31640
31740
|
return true;
|
|
@@ -34059,13 +34159,13 @@ var NativeRenderer = class {
|
|
|
34059
34159
|
resetView: () => this.resetView(),
|
|
34060
34160
|
// User drawings claim a gesture before pan when armed / over a drawing.
|
|
34061
34161
|
drawingsClaim: (x, y) => this.userDrawings?.claim(x, y) ?? false,
|
|
34062
|
-
drawingsMeasureStart: (x, y) => this.userDrawings?.beginMeasureAt(x, y) ?? false,
|
|
34162
|
+
drawingsMeasureStart: (x, y, snap) => this.userDrawings?.beginMeasureAt(x, y, snap) ?? false,
|
|
34063
34163
|
drawingsDeleteAt: (x, y) => this.userDrawings?.deleteAt(x, y) ?? false,
|
|
34064
34164
|
drawingsCancelPlacement: () => this.userDrawings?.cancelPlacement() ?? false,
|
|
34065
34165
|
drawingsSnapMode: () => this.snapMode,
|
|
34066
34166
|
drawingsPointerDown: (x, y, snap, shift) => this.userDrawings?.pointerDown(x, y, snap, shift),
|
|
34067
34167
|
drawingsPointerMove: (x, y, snap, shift) => this.userDrawings?.pointerMove(x, y, snap, shift),
|
|
34068
|
-
drawingsPointerUp: (x, y) => this.userDrawings?.pointerUp(x, y),
|
|
34168
|
+
drawingsPointerUp: (x, y, snap) => this.userDrawings?.pointerUp(x, y, snap),
|
|
34069
34169
|
drawingsCursor: (x, y) => this.userDrawings?.cursorAt(x, y) ?? null,
|
|
34070
34170
|
drawingsDblClick: (x, y) => this.userDrawings?.dblClick(x, y) ?? false,
|
|
34071
34171
|
drawingsClearTransient: () => this.userDrawings?.clearTransient()
|
|
@@ -34380,7 +34480,8 @@ var NativeRenderer = class {
|
|
|
34380
34480
|
}
|
|
34381
34481
|
const skipFit = opts?.preserveView === true && this.didInitialFit;
|
|
34382
34482
|
if (this.coords.width > 0 && !skipFit) {
|
|
34383
|
-
this.
|
|
34483
|
+
if (this.didInitialFit) this.reframeKeepZoom();
|
|
34484
|
+
else this.fitContent();
|
|
34384
34485
|
this.didInitialFit = true;
|
|
34385
34486
|
}
|
|
34386
34487
|
if (!this.introPlayed && this.bars.length > 0) {
|
|
@@ -35028,6 +35129,7 @@ var NativeRenderer = class {
|
|
|
35028
35129
|
this.scaleDragHeight = res.height;
|
|
35029
35130
|
this.scaleDragStart = { ...res.holder.scale };
|
|
35030
35131
|
res.holder.manualScale = { ...res.holder.scale };
|
|
35132
|
+
this.axisScaleButtons?.reposition();
|
|
35031
35133
|
this.scheduler.invalidate(4 /* Full */);
|
|
35032
35134
|
}
|
|
35033
35135
|
/** Rescale the grabbed scale around its center by the total drag (down ⇒ zoom out). */
|
|
@@ -35059,6 +35161,7 @@ var NativeRenderer = class {
|
|
|
35059
35161
|
const res = this.resolveScaleHolder(x, y);
|
|
35060
35162
|
if (!res) return;
|
|
35061
35163
|
res.holder.manualScale = null;
|
|
35164
|
+
this.axisScaleButtons?.reposition();
|
|
35062
35165
|
this.scheduler.invalidate(4 /* Full */);
|
|
35063
35166
|
}
|
|
35064
35167
|
/**
|
|
@@ -35696,6 +35799,20 @@ var NativeRenderer = class {
|
|
|
35696
35799
|
this.coords.setViewport(v);
|
|
35697
35800
|
this.targetBarSpacing = v.barSpacing;
|
|
35698
35801
|
}
|
|
35802
|
+
/** Re-frame after a series replacement (a symbol/timeframe switch): keep the user's
|
|
35803
|
+
* zoom (bar spacing), re-anchor the newest bars at the default right offset.
|
|
35804
|
+
* `clampViewport`'s fit-all-bars floor deliberately does NOT apply — a progressive
|
|
35805
|
+
* head may still be backfilling toward the previous depth, and raising the spacing
|
|
35806
|
+
* to its temporary bar count would lose the zoom this exists to keep. */
|
|
35807
|
+
reframeKeepZoom() {
|
|
35808
|
+
this.animator?.stop();
|
|
35809
|
+
this.panVelocity = 0;
|
|
35810
|
+
for (const pane of this.scene.panes.values()) pane.manualScale = null;
|
|
35811
|
+
for (const sl of this.scene.indicatorScales.values()) sl.manualScale = null;
|
|
35812
|
+
const v = { barSpacing: clampBarSpacing(this.coords.getViewport().barSpacing), rightOffset: defaultViewport().rightOffset };
|
|
35813
|
+
this.coords.setViewport(v);
|
|
35814
|
+
this.targetBarSpacing = v.barSpacing;
|
|
35815
|
+
}
|
|
35699
35816
|
paneBoundsFor(paneId) {
|
|
35700
35817
|
const p = this.scene.panes.get(paneId);
|
|
35701
35818
|
return { top: p?.bounds.top ?? 0, height: p?.bounds.height ?? 0, rightAxis: this.rightAxisW };
|
|
@@ -37397,6 +37514,7 @@ var TIME_AXIS_H2 = 22;
|
|
|
37397
37514
|
var CONTROLS_BOTTOM_PX = TIME_AXIS_H2 + 12;
|
|
37398
37515
|
var CLUSTER_H2 = 24;
|
|
37399
37516
|
var CLUSTER_PILL2 = "rgba(0,0,0,0.65)";
|
|
37517
|
+
var CLUSTER_LEFT_CSS = "calc((100% + var(--vela-toolbar-gutter, 0px) - var(--vela-scale-gutter, 0px)) / 2)";
|
|
37400
37518
|
var STYLE_ID26 = "vela-cell-controls";
|
|
37401
37519
|
var CSS23 = `
|
|
37402
37520
|
.vela-cc-btn{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:none;border-radius:var(--vela-radius-sm);background:transparent;line-height:0;font-size:12px;color:var(--vela-fg-muted);cursor:pointer;}
|
|
@@ -37406,8 +37524,11 @@ var CSS23 = `
|
|
|
37406
37524
|
.vela-cc-grip{cursor:grab;touch-action:none;}
|
|
37407
37525
|
.vela-cc-grip:active{cursor:grabbing;}
|
|
37408
37526
|
`;
|
|
37409
|
-
function
|
|
37410
|
-
|
|
37527
|
+
function plotCenterX(width, toolbarGutter = 0, scaleGutter = 0) {
|
|
37528
|
+
return (width + toolbarGutter - scaleGutter) / 2;
|
|
37529
|
+
}
|
|
37530
|
+
function nearBottomCenter(x, y, width, height, proximityPx = CELL_CONTROLS_PROXIMITY_PX, gutters = {}) {
|
|
37531
|
+
const cx = plotCenterX(width, gutters.toolbar ?? 0, gutters.scale ?? 0);
|
|
37411
37532
|
const cy = height - CONTROLS_BOTTOM_PX - CLUSTER_H2 / 2;
|
|
37412
37533
|
return Math.hypot(x - cx, y - cy) <= proximityPx;
|
|
37413
37534
|
}
|
|
@@ -37426,7 +37547,7 @@ var CellControls = class {
|
|
|
37426
37547
|
if (this.suspended) return;
|
|
37427
37548
|
if (this.dragging) return;
|
|
37428
37549
|
const rect = this.host.getBoundingClientRect();
|
|
37429
|
-
this.setNear(nearBottomCenter(e.clientX - rect.left, e.clientY - rect.top, rect.width, rect.height));
|
|
37550
|
+
this.setNear(nearBottomCenter(e.clientX - rect.left, e.clientY - rect.top, rect.width, rect.height, CELL_CONTROLS_PROXIMITY_PX, this.hostGutters()));
|
|
37430
37551
|
};
|
|
37431
37552
|
this.onHostLeave = () => {
|
|
37432
37553
|
if (this.dragging) return;
|
|
@@ -37437,7 +37558,7 @@ var CellControls = class {
|
|
|
37437
37558
|
this.root = host.ownerDocument.createElement("div");
|
|
37438
37559
|
Object.assign(this.root.style, {
|
|
37439
37560
|
position: "absolute",
|
|
37440
|
-
left:
|
|
37561
|
+
left: CLUSTER_LEFT_CSS,
|
|
37441
37562
|
bottom: `${CONTROLS_BOTTOM_PX}px`,
|
|
37442
37563
|
transform: "translateX(-50%)",
|
|
37443
37564
|
zIndex: "6",
|
|
@@ -37537,6 +37658,16 @@ var CellControls = class {
|
|
|
37537
37658
|
this.suspended = on;
|
|
37538
37659
|
if (on) this.setNear(false);
|
|
37539
37660
|
}
|
|
37661
|
+
/** Live renderer gutters on the cell host (0 when unpublished — a test stub). */
|
|
37662
|
+
hostGutters() {
|
|
37663
|
+
const view = this.host.ownerDocument.defaultView;
|
|
37664
|
+
if (!view) return { toolbar: 0, scale: 0 };
|
|
37665
|
+
const cs = view.getComputedStyle(this.host);
|
|
37666
|
+
return {
|
|
37667
|
+
toolbar: Number.parseFloat(cs.getPropertyValue("--vela-toolbar-gutter")) || 0,
|
|
37668
|
+
scale: Number.parseFloat(cs.getPropertyValue("--vela-scale-gutter")) || 0
|
|
37669
|
+
};
|
|
37670
|
+
}
|
|
37540
37671
|
setNear(near) {
|
|
37541
37672
|
if (near === this.near) return;
|
|
37542
37673
|
this.near = near;
|
|
@@ -37777,6 +37908,12 @@ function cellDrawings(opt) {
|
|
|
37777
37908
|
if (opt === true || opt == null) return { toolbar: false };
|
|
37778
37909
|
return { ...opt, toolbar: false };
|
|
37779
37910
|
}
|
|
37911
|
+
function instanceDeltas(handle) {
|
|
37912
|
+
if (!handle) return void 0;
|
|
37913
|
+
const inputs = inputDeltas(handle.inputs, handle.inputValues());
|
|
37914
|
+
const props = inputDeltas(handle.props, handle.propValues());
|
|
37915
|
+
return inputs || props ? { ...inputs ? { inputs } : {}, ...props ? { props } : {} } : void 0;
|
|
37916
|
+
}
|
|
37780
37917
|
var ChartCell = class {
|
|
37781
37918
|
constructor(id, gridHost, seed, deps) {
|
|
37782
37919
|
this.id = id;
|
|
@@ -37952,6 +38089,7 @@ var ChartCell = class {
|
|
|
37952
38089
|
this.syncPresentNatives();
|
|
37953
38090
|
this.refreshNativeCatalog();
|
|
37954
38091
|
});
|
|
38092
|
+
this.inner.on("indicator:inputs", () => this.deps.onStateDirty());
|
|
37955
38093
|
this.inner.on("indicator:removed", ({ id: id2 }) => {
|
|
37956
38094
|
if (this.destroyed) return;
|
|
37957
38095
|
const idx = this.instances.findIndex((it) => it.handle?.id === id2);
|
|
@@ -37960,7 +38098,7 @@ var ChartCell = class {
|
|
|
37960
38098
|
this.instances.splice(idx, 1);
|
|
37961
38099
|
this.history.push({
|
|
37962
38100
|
undo: () => {
|
|
37963
|
-
snapshot.handle = this.addToChart(snapshot.entry);
|
|
38101
|
+
snapshot.handle = this.addToChart(snapshot.entry, snapshot.values);
|
|
37964
38102
|
this.instances.push(snapshot);
|
|
37965
38103
|
this.deps.onIndicatorsChanged(this.id);
|
|
37966
38104
|
},
|
|
@@ -38349,9 +38487,9 @@ var ChartCell = class {
|
|
|
38349
38487
|
this.manifest = list;
|
|
38350
38488
|
if (this.pendingManifestNames) {
|
|
38351
38489
|
if (list.length === 0) return;
|
|
38352
|
-
for (const
|
|
38353
|
-
const entry = list.find((e) => e.name ===
|
|
38354
|
-
if (entry) this.addManifestInstance(entry, { record: false });
|
|
38490
|
+
for (const led of this.pendingManifestNames) {
|
|
38491
|
+
const entry = list.find((e) => e.name === ledgerEntryName(led));
|
|
38492
|
+
if (entry) this.addManifestInstance(entry, { record: false, ...typeof led === "object" ? { inputs: led.inputs, props: led.props } : {} });
|
|
38355
38493
|
}
|
|
38356
38494
|
this.pendingManifestNames = null;
|
|
38357
38495
|
return;
|
|
@@ -38381,9 +38519,9 @@ var ChartCell = class {
|
|
|
38381
38519
|
}
|
|
38382
38520
|
for (const it of [...this.instances]) this.dropInstance(it);
|
|
38383
38521
|
if (this.manifest.length > 0) {
|
|
38384
|
-
for (const
|
|
38385
|
-
const entry = this.manifest.find((e) => e.name ===
|
|
38386
|
-
if (entry) this.addManifestInstance(entry, { record: false });
|
|
38522
|
+
for (const item of led.manifest) {
|
|
38523
|
+
const entry = this.manifest.find((e) => e.name === ledgerEntryName(item));
|
|
38524
|
+
if (entry) this.addManifestInstance(entry, { record: false, ...typeof item === "object" ? { inputs: item.inputs, props: item.props } : {} });
|
|
38387
38525
|
}
|
|
38388
38526
|
this.pendingManifestNames = null;
|
|
38389
38527
|
} else if (!this.deps.manifestSettled()) {
|
|
@@ -38432,12 +38570,13 @@ var ChartCell = class {
|
|
|
38432
38570
|
* a persistence handler's `restore` runs silently, a user-driven call records.
|
|
38433
38571
|
*/
|
|
38434
38572
|
addExternalIndicator(entry) {
|
|
38435
|
-
this.addManifestInstance({ ...entry, enabled: true }, { external: true });
|
|
38573
|
+
this.addManifestInstance({ ...entry, enabled: true }, { external: true, ...entry.inputs ? { inputs: entry.inputs } : {}, ...entry.props ? { props: entry.props } : {} });
|
|
38436
38574
|
}
|
|
38437
38575
|
/** Add ONE instance of a manifest entry (repeatable — duplicates are legitimate). */
|
|
38438
38576
|
addManifestInstance(entry, opts = {}) {
|
|
38439
38577
|
if (this.destroyed) return;
|
|
38440
|
-
const
|
|
38578
|
+
const values = opts.inputs || opts.props ? { inputs: opts.inputs, props: opts.props } : void 0;
|
|
38579
|
+
const it = { entry, handle: this.addToChart(entry, values), ...opts.external ? { external: true } : {}, ...values ? { values } : {} };
|
|
38441
38580
|
this.instances.push(it);
|
|
38442
38581
|
this.deps.onIndicatorsChanged(this.id);
|
|
38443
38582
|
if (opts.record === false) return;
|
|
@@ -38445,7 +38584,7 @@ var ChartCell = class {
|
|
|
38445
38584
|
this.history.push({
|
|
38446
38585
|
undo: () => this.dropInstance(snapshot),
|
|
38447
38586
|
redo: () => {
|
|
38448
|
-
snapshot.handle = this.addToChart(snapshot.entry);
|
|
38587
|
+
snapshot.handle = this.addToChart(snapshot.entry, snapshot.values);
|
|
38449
38588
|
this.instances.push(snapshot);
|
|
38450
38589
|
this.deps.onIndicatorsChanged(this.id);
|
|
38451
38590
|
}
|
|
@@ -38458,7 +38597,7 @@ var ChartCell = class {
|
|
|
38458
38597
|
const snapshot = it;
|
|
38459
38598
|
this.history.push({
|
|
38460
38599
|
undo: () => {
|
|
38461
|
-
snapshot.handle = this.addToChart(snapshot.entry);
|
|
38600
|
+
snapshot.handle = this.addToChart(snapshot.entry, snapshot.values);
|
|
38462
38601
|
this.instances.push(snapshot);
|
|
38463
38602
|
this.deps.onIndicatorsChanged(this.id);
|
|
38464
38603
|
},
|
|
@@ -38468,6 +38607,9 @@ var ChartCell = class {
|
|
|
38468
38607
|
dropInstance(it) {
|
|
38469
38608
|
const idx = this.instances.indexOf(it);
|
|
38470
38609
|
if (idx >= 0) this.instances.splice(idx, 1);
|
|
38610
|
+
const captured = instanceDeltas(it.handle);
|
|
38611
|
+
if (captured) it.values = captured;
|
|
38612
|
+
else delete it.values;
|
|
38471
38613
|
try {
|
|
38472
38614
|
it.handle?.remove();
|
|
38473
38615
|
} catch {
|
|
@@ -38510,9 +38652,13 @@ var ChartCell = class {
|
|
|
38510
38652
|
this.deps.onIndicatorsChanged(this.id);
|
|
38511
38653
|
});
|
|
38512
38654
|
}
|
|
38513
|
-
addToChart(entry) {
|
|
38655
|
+
addToChart(entry, values) {
|
|
38514
38656
|
try {
|
|
38515
|
-
return this.inner?.addIndicator(entry.script,
|
|
38657
|
+
return this.inner?.addIndicator(entry.script, {
|
|
38658
|
+
...entry.language !== void 0 ? { language: entry.language } : {},
|
|
38659
|
+
...values?.inputs ? { inputs: values.inputs } : {},
|
|
38660
|
+
...values?.props ? { props: values.props } : {}
|
|
38661
|
+
}) ?? null;
|
|
38516
38662
|
} catch (err) {
|
|
38517
38663
|
console.warn(`[vela] indicator "${entry.name}" failed to add:`, err);
|
|
38518
38664
|
return null;
|
|
@@ -38626,7 +38772,10 @@ var ChartCell = class {
|
|
|
38626
38772
|
// manifest — their plugin persists them via the `ext` seam instead.
|
|
38627
38773
|
indicators: indicatorLedger({
|
|
38628
38774
|
present: this.inner ? this.inner.presentNativeIndicators() : [],
|
|
38629
|
-
|
|
38775
|
+
instanceEntries: this.instances.filter((it) => !it.external).map((it) => {
|
|
38776
|
+
const d = it.handle ? instanceDeltas(it.handle) : it.values;
|
|
38777
|
+
return d ? { name: it.entry.name, ...d } : it.entry.name;
|
|
38778
|
+
}),
|
|
38630
38779
|
pendingManifest: this.pendingManifestNames,
|
|
38631
38780
|
manifestSettled: this.deps.manifestSettled(),
|
|
38632
38781
|
volumePending: this.volumeMayBePending && this.volumeIntent
|
package/dist/widget.d.cts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { V as Vela, W as WidgetContext, K as SidePanelButton } from './contributions-
|
|
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-
|
|
3
|
-
import { b as VelaOptions, d as MarketSession, T as ThemeName, c as VelaTheme, s as DataWindowReadout } from './options-
|
|
4
|
-
import { c as VelaShellOptions, W as WidgetHistory, b as RangePreset, f as WorkspaceState, j as TopbarComposition, P as PanelsState } from './statusline-
|
|
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 Statusline, q as TOPBAR_BUILTIN_IDS, r as TOPBAR_DEFAULT_LEFT, t as TOPBAR_DEFAULT_RIGHT, V as VelaStorage, u as WidgetStorage, h as decodeState, i as encodeState, v as localStorageAdapter, w as pinnedTopbarActionIds, x as resolveIndicators, y as resolveTopbarComposition, s as sanitizeState, z as topbarHas } from './statusline-
|
|
1
|
+
import { V as Vela, W as WidgetContext, K as SidePanelButton } from './contributions-CO01zWve.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-CO01zWve.cjs';
|
|
3
|
+
import { b as VelaOptions, d as MarketSession, T as ThemeName, c as VelaTheme, s as DataWindowReadout } from './options-yp7sA96q.cjs';
|
|
4
|
+
import { c as VelaShellOptions, W as WidgetHistory, b as RangePreset, f as WorkspaceState, j as TopbarComposition, P as PanelsState } from './statusline-DTHZUFqK.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 Statusline, q as TOPBAR_BUILTIN_IDS, r as TOPBAR_DEFAULT_LEFT, t as TOPBAR_DEFAULT_RIGHT, V as VelaStorage, u as WidgetStorage, h as decodeState, i as encodeState, v as localStorageAdapter, w as pinnedTopbarActionIds, x as resolveIndicators, y as resolveTopbarComposition, s as sanitizeState, z as topbarHas } from './statusline-DTHZUFqK.cjs';
|
|
6
6
|
import { K as KeymapManager } from './keymap-CGOz5F5f.cjs';
|
|
7
|
-
import { a as SymbolDescriptor } from './DataProvider-
|
|
7
|
+
import { a as SymbolDescriptor } from './DataProvider-p0TEyhlX.cjs';
|
|
8
8
|
import { d as SidePanel } from './side-panel-CT9ZwIGz.cjs';
|
|
9
9
|
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-CT9ZwIGz.cjs';
|
|
10
10
|
|
package/dist/widget.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { V as Vela, W as WidgetContext, K as SidePanelButton } from './contributions-
|
|
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-
|
|
3
|
-
import { b as VelaOptions, d as MarketSession, T as ThemeName, c as VelaTheme, s as DataWindowReadout } from './options-
|
|
4
|
-
import { c as VelaShellOptions, W as WidgetHistory, b as RangePreset, f as WorkspaceState, j as TopbarComposition, P as PanelsState } from './statusline-
|
|
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 Statusline, q as TOPBAR_BUILTIN_IDS, r as TOPBAR_DEFAULT_LEFT, t as TOPBAR_DEFAULT_RIGHT, V as VelaStorage, u as WidgetStorage, h as decodeState, i as encodeState, v as localStorageAdapter, w as pinnedTopbarActionIds, x as resolveIndicators, y as resolveTopbarComposition, s as sanitizeState, z as topbarHas } from './statusline-
|
|
1
|
+
import { V as Vela, W as WidgetContext, K as SidePanelButton } from './contributions-Bbe2R-mQ.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-Bbe2R-mQ.js';
|
|
3
|
+
import { b as VelaOptions, d as MarketSession, T as ThemeName, c as VelaTheme, s as DataWindowReadout } from './options-yp7sA96q.js';
|
|
4
|
+
import { c as VelaShellOptions, W as WidgetHistory, b as RangePreset, f as WorkspaceState, j as TopbarComposition, P as PanelsState } from './statusline-CHPDuKNp.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 Statusline, q as TOPBAR_BUILTIN_IDS, r as TOPBAR_DEFAULT_LEFT, t as TOPBAR_DEFAULT_RIGHT, V as VelaStorage, u as WidgetStorage, h as decodeState, i as encodeState, v as localStorageAdapter, w as pinnedTopbarActionIds, x as resolveIndicators, y as resolveTopbarComposition, s as sanitizeState, z as topbarHas } from './statusline-CHPDuKNp.js';
|
|
6
6
|
import { K as KeymapManager } from './keymap-CGOz5F5f.js';
|
|
7
|
-
import { a as SymbolDescriptor } from './DataProvider-
|
|
7
|
+
import { a as SymbolDescriptor } from './DataProvider-BBf-jc6W.js';
|
|
8
8
|
import { d as SidePanel } from './side-panel-CT9ZwIGz.js';
|
|
9
9
|
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-CT9ZwIGz.js';
|
|
10
10
|
|