@h-rig/cli 0.0.6-alpha.86 → 0.0.6-alpha.87
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/bin/rig.js +79 -18
- package/dist/src/app-opentui/bootstrap.js +79 -18
- package/dist/src/app-opentui/command-palette.js +1 -0
- package/dist/src/app-opentui/drone.js +1 -0
- package/dist/src/app-opentui/index.js +61 -7
- package/dist/src/app-opentui/list-search.d.ts +5 -1
- package/dist/src/app-opentui/list-search.js +2 -2
- package/dist/src/app-opentui/react/App.js +67 -8
- package/dist/src/app-opentui/react/Backdrop.js +1 -0
- package/dist/src/app-opentui/react/ChromeHost.js +7 -0
- package/dist/src/app-opentui/react/SceneFrameView.js +55 -5
- package/dist/src/app-opentui/react/launch.js +67 -8
- package/dist/src/app-opentui/react/syntax.js +1 -0
- package/dist/src/app-opentui/registry.js +3 -5
- package/dist/src/app-opentui/render/graphics.js +1 -0
- package/dist/src/app-opentui/render/hover.d.ts +11 -0
- package/dist/src/app-opentui/render/hover.js +34 -0
- package/dist/src/app-opentui/render/native-host.js +1 -0
- package/dist/src/app-opentui/render/panels.js +50 -3
- package/dist/src/app-opentui/render/preloader.js +1 -0
- package/dist/src/app-opentui/render/scene.js +1 -0
- package/dist/src/app-opentui/render/text.d.ts +13 -0
- package/dist/src/app-opentui/render/text.js +54 -5
- package/dist/src/app-opentui/render/type-bar.js +1 -0
- package/dist/src/app-opentui/runtime.js +61 -7
- package/dist/src/app-opentui/scenes/command.js +1 -0
- package/dist/src/app-opentui/scenes/doctor.js +1 -0
- package/dist/src/app-opentui/scenes/error.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/agent.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/browser.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/dist.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/git.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/github.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/harness.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/index.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/kit.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/profile.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/queue.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/remote.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/review.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/setup.js +1 -0
- package/dist/src/app-opentui/scenes/family-domains/stats.js +1 -0
- package/dist/src/app-opentui/scenes/family.js +1 -0
- package/dist/src/app-opentui/scenes/fleet.js +3 -5
- package/dist/src/app-opentui/scenes/handoff.js +1 -0
- package/dist/src/app-opentui/scenes/help.js +1 -0
- package/dist/src/app-opentui/scenes/inbox.js +1 -0
- package/dist/src/app-opentui/scenes/init.js +1 -0
- package/dist/src/app-opentui/scenes/inspect.js +1 -0
- package/dist/src/app-opentui/scenes/main.js +1 -0
- package/dist/src/app-opentui/scenes/pi.js +1 -0
- package/dist/src/app-opentui/scenes/plugin.js +1 -0
- package/dist/src/app-opentui/scenes/repo.js +1 -0
- package/dist/src/app-opentui/scenes/run-detail.js +1 -0
- package/dist/src/app-opentui/scenes/server.js +1 -0
- package/dist/src/app-opentui/scenes/tasks.js +3 -5
- package/dist/src/app-opentui/scenes/workspace.js +1 -0
- package/dist/src/app-opentui/selectable.js +1 -0
- package/dist/src/app-opentui/theme.d.ts +1 -0
- package/dist/src/app-opentui/theme.js +1 -0
- package/package.json +8 -8
package/dist/bin/rig.js
CHANGED
|
@@ -17453,6 +17453,7 @@ var init_theme2 = __esm(() => {
|
|
|
17453
17453
|
bg2: "#0b0c0e",
|
|
17454
17454
|
panel: "#101115",
|
|
17455
17455
|
panel2: "#14161b",
|
|
17456
|
+
hover: "#181b24",
|
|
17456
17457
|
glass: "#1e2230",
|
|
17457
17458
|
border: "#2a2e3a",
|
|
17458
17459
|
ink: "#f4f5f8",
|
|
@@ -19802,11 +19803,8 @@ var init_family2 = __esm(() => {
|
|
|
19802
19803
|
});
|
|
19803
19804
|
|
|
19804
19805
|
// packages/cli/src/app-opentui/list-search.ts
|
|
19805
|
-
function
|
|
19806
|
-
return
|
|
19807
|
-
}
|
|
19808
|
-
function listSearchQuery(state) {
|
|
19809
|
-
return isListSearchScene(state.scene) ? state.typeBar.value.trim() : "";
|
|
19806
|
+
function listSearchQuery(_state) {
|
|
19807
|
+
return "";
|
|
19810
19808
|
}
|
|
19811
19809
|
function valueText(value) {
|
|
19812
19810
|
if (value === undefined || value === null)
|
|
@@ -24863,16 +24861,69 @@ var init_graphics = __esm(() => {
|
|
|
24863
24861
|
];
|
|
24864
24862
|
});
|
|
24865
24863
|
|
|
24864
|
+
// packages/cli/src/app-opentui/render/hover.ts
|
|
24865
|
+
function getHoveredSelectableId() {
|
|
24866
|
+
return hoveredId;
|
|
24867
|
+
}
|
|
24868
|
+
function isHovered(id) {
|
|
24869
|
+
return id !== undefined && id === hoveredId;
|
|
24870
|
+
}
|
|
24871
|
+
function setHoveredSelectableId(id) {
|
|
24872
|
+
if (hoveredId === id)
|
|
24873
|
+
return;
|
|
24874
|
+
hoveredId = id;
|
|
24875
|
+
for (const listener of listeners)
|
|
24876
|
+
listener();
|
|
24877
|
+
}
|
|
24878
|
+
function clearHoveredSelectableId(id) {
|
|
24879
|
+
if (id !== undefined && hoveredId === id)
|
|
24880
|
+
setHoveredSelectableId(undefined);
|
|
24881
|
+
}
|
|
24882
|
+
function subscribeHover(listener) {
|
|
24883
|
+
listeners.add(listener);
|
|
24884
|
+
return () => {
|
|
24885
|
+
listeners.delete(listener);
|
|
24886
|
+
};
|
|
24887
|
+
}
|
|
24888
|
+
var hoveredId, listeners;
|
|
24889
|
+
var init_hover = __esm(() => {
|
|
24890
|
+
listeners = new Set;
|
|
24891
|
+
});
|
|
24892
|
+
|
|
24866
24893
|
// packages/cli/src/app-opentui/render/text.ts
|
|
24867
24894
|
import { RGBA as RGBA4, TextAttributes as TextAttributes4, TextRenderable } from "@opentui/core";
|
|
24895
|
+
function lineIsClickable(line2) {
|
|
24896
|
+
return line2?.selectable !== undefined || line2?.selectableIndex !== undefined;
|
|
24897
|
+
}
|
|
24898
|
+
function lineSelectableId(line2) {
|
|
24899
|
+
return line2?.selectable?.id ?? line2?.selectableId;
|
|
24900
|
+
}
|
|
24901
|
+
function lineBackground(line2) {
|
|
24902
|
+
if (line2?.bg)
|
|
24903
|
+
return RGBA4.fromHex(line2.bg);
|
|
24904
|
+
const id = lineSelectableId(line2);
|
|
24905
|
+
if (id !== undefined && isHovered(id))
|
|
24906
|
+
return HOVER_BG;
|
|
24907
|
+
return TRANSPARENT2;
|
|
24908
|
+
}
|
|
24868
24909
|
function selectableMouseHandler(currentLineRef, onLineMouseDown) {
|
|
24869
24910
|
return (event) => {
|
|
24870
24911
|
const currentLine = currentLineRef();
|
|
24871
|
-
if (currentLine
|
|
24912
|
+
if (!lineIsClickable(currentLine))
|
|
24872
24913
|
return;
|
|
24873
24914
|
onLineMouseDown?.(currentLine, event);
|
|
24874
24915
|
};
|
|
24875
24916
|
}
|
|
24917
|
+
function hoverHandlers(currentLineRef) {
|
|
24918
|
+
return {
|
|
24919
|
+
onMouseOver: () => {
|
|
24920
|
+
const id = lineSelectableId(currentLineRef());
|
|
24921
|
+
if (id !== undefined)
|
|
24922
|
+
setHoveredSelectableId(id);
|
|
24923
|
+
},
|
|
24924
|
+
onMouseOut: () => clearHoveredSelectableId(lineSelectableId(currentLineRef()))
|
|
24925
|
+
};
|
|
24926
|
+
}
|
|
24876
24927
|
function createTextLine(renderer, id, top, onLineMouseDown) {
|
|
24877
24928
|
let currentLine;
|
|
24878
24929
|
const renderable = new TextRenderable(renderer, {
|
|
@@ -24884,7 +24935,8 @@ function createTextLine(renderer, id, top, onLineMouseDown) {
|
|
|
24884
24935
|
width: 1,
|
|
24885
24936
|
fg: RIG_UI.ink2,
|
|
24886
24937
|
selectable: true,
|
|
24887
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown)
|
|
24938
|
+
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
24939
|
+
...hoverHandlers(() => currentLine)
|
|
24888
24940
|
});
|
|
24889
24941
|
renderable.setRigSceneLine = (line2) => {
|
|
24890
24942
|
currentLine = line2;
|
|
@@ -24901,7 +24953,8 @@ function createFlowTextLine(renderer, id, onLineMouseDown) {
|
|
|
24901
24953
|
flexShrink: 0,
|
|
24902
24954
|
fg: RIG_UI.ink2,
|
|
24903
24955
|
selectable: true,
|
|
24904
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown)
|
|
24956
|
+
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
24957
|
+
...hoverHandlers(() => currentLine)
|
|
24905
24958
|
});
|
|
24906
24959
|
renderable.setRigSceneLine = (line2) => {
|
|
24907
24960
|
currentLine = line2;
|
|
@@ -24915,7 +24968,7 @@ function applyTextLine(renderable, line2, top, left, width) {
|
|
|
24915
24968
|
renderable.width = width;
|
|
24916
24969
|
renderable.content = line2?.styledText ?? line2?.text ?? "";
|
|
24917
24970
|
renderable.fg = line2?.fg ?? RIG_UI.ink2;
|
|
24918
|
-
renderable.bg = line2
|
|
24971
|
+
renderable.bg = lineBackground(line2);
|
|
24919
24972
|
renderable.attributes = line2?.bold ? TextAttributes4.BOLD : line2?.dim ? TextAttributes4.DIM : 0;
|
|
24920
24973
|
}
|
|
24921
24974
|
function applyFlowTextLine(renderable, line2, width) {
|
|
@@ -24925,7 +24978,7 @@ function applyFlowTextLine(renderable, line2, width) {
|
|
|
24925
24978
|
renderable.width = Math.max(1, width);
|
|
24926
24979
|
renderable.content = line2?.styledText ?? line2?.text ?? "";
|
|
24927
24980
|
renderable.fg = line2?.fg ?? RIG_UI.ink2;
|
|
24928
|
-
renderable.bg = line2
|
|
24981
|
+
renderable.bg = lineBackground(line2);
|
|
24929
24982
|
renderable.attributes = line2?.bold ? TextAttributes4.BOLD : line2?.dim ? TextAttributes4.DIM : 0;
|
|
24930
24983
|
}
|
|
24931
24984
|
function clearTextLines(renderables, from = 0) {
|
|
@@ -24939,10 +24992,12 @@ function clearTextLines(renderables, from = 0) {
|
|
|
24939
24992
|
renderable.bg = TRANSPARENT2;
|
|
24940
24993
|
}
|
|
24941
24994
|
}
|
|
24942
|
-
var TRANSPARENT2;
|
|
24995
|
+
var TRANSPARENT2, HOVER_BG;
|
|
24943
24996
|
var init_text = __esm(() => {
|
|
24944
24997
|
init_theme2();
|
|
24998
|
+
init_hover();
|
|
24945
24999
|
TRANSPARENT2 = RGBA4.fromInts(0, 0, 0, 0);
|
|
25000
|
+
HOVER_BG = RGBA4.fromHex(RIG_UI.hover);
|
|
24946
25001
|
});
|
|
24947
25002
|
|
|
24948
25003
|
// packages/cli/src/app-opentui/render/panels.ts
|
|
@@ -26290,8 +26345,7 @@ async function launchRigOpenTuiApp(options) {
|
|
|
26290
26345
|
} else if (!selectById(store, id, renderedSelectableItems)) {
|
|
26291
26346
|
return;
|
|
26292
26347
|
}
|
|
26293
|
-
|
|
26294
|
-
runAppAction("Activate selection", () => activateSelection(runtime, renderedSelectableItems));
|
|
26348
|
+
runAppAction("Activate selection", () => activateSelection(runtime, renderedSelectableItems));
|
|
26295
26349
|
};
|
|
26296
26350
|
for (let index = 0;index < MAX_SCENE_PANELS; index += 1) {
|
|
26297
26351
|
const panel = createScrollPanelLayer(renderer, `rig-scroll-panel-${index}`, onLineClick);
|
|
@@ -26358,6 +26412,7 @@ async function launchRigOpenTuiApp(options) {
|
|
|
26358
26412
|
};
|
|
26359
26413
|
renderer.keyInput.on("keypress", onKeyPress);
|
|
26360
26414
|
resources.add(() => renderer?.keyInput.off("keypress", onKeyPress));
|
|
26415
|
+
resources.add(subscribeHover(() => scheduleAppRender(0)));
|
|
26361
26416
|
const onPaste = (event) => {
|
|
26362
26417
|
const state = store.getState();
|
|
26363
26418
|
if (state.scene === "handoff") {
|
|
@@ -26599,6 +26654,7 @@ var init_runtime = __esm(() => {
|
|
|
26599
26654
|
init_graphics();
|
|
26600
26655
|
init_fleet_stats();
|
|
26601
26656
|
init_text();
|
|
26657
|
+
init_hover();
|
|
26602
26658
|
init_panels();
|
|
26603
26659
|
init_type_bar();
|
|
26604
26660
|
init_scene();
|
|
@@ -26736,13 +26792,16 @@ function lineContent(line2) {
|
|
|
26736
26792
|
}
|
|
26737
26793
|
function LineView(props) {
|
|
26738
26794
|
const { line: line2, onLineClick } = props;
|
|
26795
|
+
const id = lineSelectableId(line2);
|
|
26739
26796
|
return /* @__PURE__ */ jsxDEV("text", {
|
|
26740
26797
|
style: { position: "absolute", left: props.left, top: props.top, width: props.width, zIndex: 5 },
|
|
26741
26798
|
fg: line2.fg ?? RIG_UI.ink2,
|
|
26742
|
-
bg: line2
|
|
26799
|
+
bg: lineBackground(line2),
|
|
26743
26800
|
attributes: lineAttributes(line2),
|
|
26744
26801
|
content: lineContent(line2),
|
|
26745
|
-
onMouseDown: onLineClick ? () => onLineClick(line2) : undefined
|
|
26802
|
+
onMouseDown: onLineClick ? () => onLineClick(line2) : undefined,
|
|
26803
|
+
onMouseOver: id !== undefined ? () => setHoveredSelectableId(id) : undefined,
|
|
26804
|
+
onMouseOut: id !== undefined ? () => clearHoveredSelectableId(id) : undefined
|
|
26746
26805
|
}, undefined, false, undefined, this);
|
|
26747
26806
|
}
|
|
26748
26807
|
function PanelHost(props) {
|
|
@@ -26829,6 +26888,7 @@ var init_SceneFrameView = __esm(() => {
|
|
|
26829
26888
|
init_theme2();
|
|
26830
26889
|
init_scene();
|
|
26831
26890
|
init_text();
|
|
26891
|
+
init_hover();
|
|
26832
26892
|
init_panels();
|
|
26833
26893
|
init_native_host();
|
|
26834
26894
|
init_scroll();
|
|
@@ -26982,7 +27042,7 @@ var init_nav = __esm(() => {
|
|
|
26982
27042
|
});
|
|
26983
27043
|
|
|
26984
27044
|
// packages/cli/src/app-opentui/react/App.tsx
|
|
26985
|
-
import { useMemo, useRef as useRef4 } from "react";
|
|
27045
|
+
import { useMemo, useRef as useRef4, useSyncExternalStore as useSyncExternalStore2 } from "react";
|
|
26986
27046
|
import { useKeyboard, useRenderer as useRenderer4, useTerminalDimensions as useTerminalDimensions2 } from "@opentui/react";
|
|
26987
27047
|
import { jsxDEV as jsxDEV3 } from "@opentui/react/jsx-dev-runtime";
|
|
26988
27048
|
function defaultFrame(state) {
|
|
@@ -27000,6 +27060,7 @@ function App(props) {
|
|
|
27000
27060
|
const runAppAction = useRunAppAction();
|
|
27001
27061
|
const store = useStore();
|
|
27002
27062
|
const renderer = useRenderer4();
|
|
27063
|
+
useSyncExternalStore2(subscribeHover, getHoveredSelectableId, getHoveredSelectableId);
|
|
27003
27064
|
const dims = useTerminalDimensions2();
|
|
27004
27065
|
const layout = computeStageLayout(dims.width, dims.height);
|
|
27005
27066
|
const registry = useMemo(() => ({ ...BUILTIN, ...props.sceneRenderers ?? {} }), [props.sceneRenderers]);
|
|
@@ -27034,8 +27095,7 @@ function App(props) {
|
|
|
27034
27095
|
} else {
|
|
27035
27096
|
return;
|
|
27036
27097
|
}
|
|
27037
|
-
|
|
27038
|
-
runAppAction("Activate selection", () => activateSelection(runtime, items));
|
|
27098
|
+
runAppAction("Activate selection", () => activateSelection(runtime, items));
|
|
27039
27099
|
};
|
|
27040
27100
|
return /* @__PURE__ */ jsxDEV3("box", {
|
|
27041
27101
|
style: { position: "absolute", left: 0, top: 0, width: "100%", height: "100%" },
|
|
@@ -27085,6 +27145,7 @@ var init_App = __esm(() => {
|
|
|
27085
27145
|
init_SceneFrameView();
|
|
27086
27146
|
init_ChromeHost();
|
|
27087
27147
|
init_scroll();
|
|
27148
|
+
init_hover();
|
|
27088
27149
|
init_context();
|
|
27089
27150
|
init_nav();
|
|
27090
27151
|
BUILTIN = {
|
|
@@ -15585,6 +15585,7 @@ var init_theme2 = __esm(() => {
|
|
|
15585
15585
|
bg2: "#0b0c0e",
|
|
15586
15586
|
panel: "#101115",
|
|
15587
15587
|
panel2: "#14161b",
|
|
15588
|
+
hover: "#181b24",
|
|
15588
15589
|
glass: "#1e2230",
|
|
15589
15590
|
border: "#2a2e3a",
|
|
15590
15591
|
ink: "#f4f5f8",
|
|
@@ -17872,16 +17873,69 @@ var init_graphics = __esm(() => {
|
|
|
17872
17873
|
];
|
|
17873
17874
|
});
|
|
17874
17875
|
|
|
17876
|
+
// packages/cli/src/app-opentui/render/hover.ts
|
|
17877
|
+
function getHoveredSelectableId() {
|
|
17878
|
+
return hoveredId;
|
|
17879
|
+
}
|
|
17880
|
+
function isHovered(id) {
|
|
17881
|
+
return id !== undefined && id === hoveredId;
|
|
17882
|
+
}
|
|
17883
|
+
function setHoveredSelectableId(id) {
|
|
17884
|
+
if (hoveredId === id)
|
|
17885
|
+
return;
|
|
17886
|
+
hoveredId = id;
|
|
17887
|
+
for (const listener of listeners)
|
|
17888
|
+
listener();
|
|
17889
|
+
}
|
|
17890
|
+
function clearHoveredSelectableId(id) {
|
|
17891
|
+
if (id !== undefined && hoveredId === id)
|
|
17892
|
+
setHoveredSelectableId(undefined);
|
|
17893
|
+
}
|
|
17894
|
+
function subscribeHover(listener) {
|
|
17895
|
+
listeners.add(listener);
|
|
17896
|
+
return () => {
|
|
17897
|
+
listeners.delete(listener);
|
|
17898
|
+
};
|
|
17899
|
+
}
|
|
17900
|
+
var hoveredId, listeners;
|
|
17901
|
+
var init_hover = __esm(() => {
|
|
17902
|
+
listeners = new Set;
|
|
17903
|
+
});
|
|
17904
|
+
|
|
17875
17905
|
// packages/cli/src/app-opentui/render/text.ts
|
|
17876
17906
|
import { RGBA as RGBA4, TextAttributes as TextAttributes4, TextRenderable } from "@opentui/core";
|
|
17907
|
+
function lineIsClickable(line2) {
|
|
17908
|
+
return line2?.selectable !== undefined || line2?.selectableIndex !== undefined;
|
|
17909
|
+
}
|
|
17910
|
+
function lineSelectableId(line2) {
|
|
17911
|
+
return line2?.selectable?.id ?? line2?.selectableId;
|
|
17912
|
+
}
|
|
17913
|
+
function lineBackground(line2) {
|
|
17914
|
+
if (line2?.bg)
|
|
17915
|
+
return RGBA4.fromHex(line2.bg);
|
|
17916
|
+
const id = lineSelectableId(line2);
|
|
17917
|
+
if (id !== undefined && isHovered(id))
|
|
17918
|
+
return HOVER_BG;
|
|
17919
|
+
return TRANSPARENT2;
|
|
17920
|
+
}
|
|
17877
17921
|
function selectableMouseHandler(currentLineRef, onLineMouseDown) {
|
|
17878
17922
|
return (event) => {
|
|
17879
17923
|
const currentLine = currentLineRef();
|
|
17880
|
-
if (currentLine
|
|
17924
|
+
if (!lineIsClickable(currentLine))
|
|
17881
17925
|
return;
|
|
17882
17926
|
onLineMouseDown?.(currentLine, event);
|
|
17883
17927
|
};
|
|
17884
17928
|
}
|
|
17929
|
+
function hoverHandlers(currentLineRef) {
|
|
17930
|
+
return {
|
|
17931
|
+
onMouseOver: () => {
|
|
17932
|
+
const id = lineSelectableId(currentLineRef());
|
|
17933
|
+
if (id !== undefined)
|
|
17934
|
+
setHoveredSelectableId(id);
|
|
17935
|
+
},
|
|
17936
|
+
onMouseOut: () => clearHoveredSelectableId(lineSelectableId(currentLineRef()))
|
|
17937
|
+
};
|
|
17938
|
+
}
|
|
17885
17939
|
function createTextLine(renderer, id, top, onLineMouseDown) {
|
|
17886
17940
|
let currentLine;
|
|
17887
17941
|
const renderable = new TextRenderable(renderer, {
|
|
@@ -17893,7 +17947,8 @@ function createTextLine(renderer, id, top, onLineMouseDown) {
|
|
|
17893
17947
|
width: 1,
|
|
17894
17948
|
fg: RIG_UI.ink2,
|
|
17895
17949
|
selectable: true,
|
|
17896
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown)
|
|
17950
|
+
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
17951
|
+
...hoverHandlers(() => currentLine)
|
|
17897
17952
|
});
|
|
17898
17953
|
renderable.setRigSceneLine = (line2) => {
|
|
17899
17954
|
currentLine = line2;
|
|
@@ -17910,7 +17965,8 @@ function createFlowTextLine(renderer, id, onLineMouseDown) {
|
|
|
17910
17965
|
flexShrink: 0,
|
|
17911
17966
|
fg: RIG_UI.ink2,
|
|
17912
17967
|
selectable: true,
|
|
17913
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown)
|
|
17968
|
+
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
17969
|
+
...hoverHandlers(() => currentLine)
|
|
17914
17970
|
});
|
|
17915
17971
|
renderable.setRigSceneLine = (line2) => {
|
|
17916
17972
|
currentLine = line2;
|
|
@@ -17924,7 +17980,7 @@ function applyTextLine(renderable, line2, top, left, width) {
|
|
|
17924
17980
|
renderable.width = width;
|
|
17925
17981
|
renderable.content = line2?.styledText ?? line2?.text ?? "";
|
|
17926
17982
|
renderable.fg = line2?.fg ?? RIG_UI.ink2;
|
|
17927
|
-
renderable.bg = line2
|
|
17983
|
+
renderable.bg = lineBackground(line2);
|
|
17928
17984
|
renderable.attributes = line2?.bold ? TextAttributes4.BOLD : line2?.dim ? TextAttributes4.DIM : 0;
|
|
17929
17985
|
}
|
|
17930
17986
|
function applyFlowTextLine(renderable, line2, width) {
|
|
@@ -17934,7 +17990,7 @@ function applyFlowTextLine(renderable, line2, width) {
|
|
|
17934
17990
|
renderable.width = Math.max(1, width);
|
|
17935
17991
|
renderable.content = line2?.styledText ?? line2?.text ?? "";
|
|
17936
17992
|
renderable.fg = line2?.fg ?? RIG_UI.ink2;
|
|
17937
|
-
renderable.bg = line2
|
|
17993
|
+
renderable.bg = lineBackground(line2);
|
|
17938
17994
|
renderable.attributes = line2?.bold ? TextAttributes4.BOLD : line2?.dim ? TextAttributes4.DIM : 0;
|
|
17939
17995
|
}
|
|
17940
17996
|
function clearTextLines(renderables, from = 0) {
|
|
@@ -17948,10 +18004,12 @@ function clearTextLines(renderables, from = 0) {
|
|
|
17948
18004
|
renderable.bg = TRANSPARENT2;
|
|
17949
18005
|
}
|
|
17950
18006
|
}
|
|
17951
|
-
var TRANSPARENT2;
|
|
18007
|
+
var TRANSPARENT2, HOVER_BG;
|
|
17952
18008
|
var init_text = __esm(() => {
|
|
17953
18009
|
init_theme2();
|
|
18010
|
+
init_hover();
|
|
17954
18011
|
TRANSPARENT2 = RGBA4.fromInts(0, 0, 0, 0);
|
|
18012
|
+
HOVER_BG = RGBA4.fromHex(RIG_UI.hover);
|
|
17955
18013
|
});
|
|
17956
18014
|
|
|
17957
18015
|
// packages/cli/src/app-opentui/render/panels.ts
|
|
@@ -19299,8 +19357,7 @@ async function launchRigOpenTuiApp(options) {
|
|
|
19299
19357
|
} else if (!selectById(store, id, renderedSelectableItems)) {
|
|
19300
19358
|
return;
|
|
19301
19359
|
}
|
|
19302
|
-
|
|
19303
|
-
runAppAction("Activate selection", () => activateSelection(runtime, renderedSelectableItems));
|
|
19360
|
+
runAppAction("Activate selection", () => activateSelection(runtime, renderedSelectableItems));
|
|
19304
19361
|
};
|
|
19305
19362
|
for (let index = 0;index < MAX_SCENE_PANELS; index += 1) {
|
|
19306
19363
|
const panel = createScrollPanelLayer(renderer, `rig-scroll-panel-${index}`, onLineClick);
|
|
@@ -19367,6 +19424,7 @@ async function launchRigOpenTuiApp(options) {
|
|
|
19367
19424
|
};
|
|
19368
19425
|
renderer.keyInput.on("keypress", onKeyPress);
|
|
19369
19426
|
resources.add(() => renderer?.keyInput.off("keypress", onKeyPress));
|
|
19427
|
+
resources.add(subscribeHover(() => scheduleAppRender(0)));
|
|
19370
19428
|
const onPaste = (event) => {
|
|
19371
19429
|
const state = store.getState();
|
|
19372
19430
|
if (state.scene === "handoff") {
|
|
@@ -19608,6 +19666,7 @@ var init_runtime = __esm(() => {
|
|
|
19608
19666
|
init_graphics();
|
|
19609
19667
|
init_fleet_stats();
|
|
19610
19668
|
init_text();
|
|
19669
|
+
init_hover();
|
|
19611
19670
|
init_panels();
|
|
19612
19671
|
init_type_bar();
|
|
19613
19672
|
init_scene();
|
|
@@ -19745,13 +19804,16 @@ function lineContent(line2) {
|
|
|
19745
19804
|
}
|
|
19746
19805
|
function LineView(props) {
|
|
19747
19806
|
const { line: line2, onLineClick } = props;
|
|
19807
|
+
const id = lineSelectableId(line2);
|
|
19748
19808
|
return /* @__PURE__ */ jsxDEV("text", {
|
|
19749
19809
|
style: { position: "absolute", left: props.left, top: props.top, width: props.width, zIndex: 5 },
|
|
19750
19810
|
fg: line2.fg ?? RIG_UI.ink2,
|
|
19751
|
-
bg: line2
|
|
19811
|
+
bg: lineBackground(line2),
|
|
19752
19812
|
attributes: lineAttributes(line2),
|
|
19753
19813
|
content: lineContent(line2),
|
|
19754
|
-
onMouseDown: onLineClick ? () => onLineClick(line2) : undefined
|
|
19814
|
+
onMouseDown: onLineClick ? () => onLineClick(line2) : undefined,
|
|
19815
|
+
onMouseOver: id !== undefined ? () => setHoveredSelectableId(id) : undefined,
|
|
19816
|
+
onMouseOut: id !== undefined ? () => clearHoveredSelectableId(id) : undefined
|
|
19755
19817
|
}, undefined, false, undefined, this);
|
|
19756
19818
|
}
|
|
19757
19819
|
function PanelHost(props) {
|
|
@@ -19838,6 +19900,7 @@ var init_SceneFrameView = __esm(() => {
|
|
|
19838
19900
|
init_theme2();
|
|
19839
19901
|
init_scene();
|
|
19840
19902
|
init_text();
|
|
19903
|
+
init_hover();
|
|
19841
19904
|
init_panels();
|
|
19842
19905
|
init_native_host();
|
|
19843
19906
|
init_scroll();
|
|
@@ -19991,7 +20054,7 @@ var init_nav = __esm(() => {
|
|
|
19991
20054
|
});
|
|
19992
20055
|
|
|
19993
20056
|
// packages/cli/src/app-opentui/react/App.tsx
|
|
19994
|
-
import { useMemo, useRef as useRef4 } from "react";
|
|
20057
|
+
import { useMemo, useRef as useRef4, useSyncExternalStore as useSyncExternalStore2 } from "react";
|
|
19995
20058
|
import { useKeyboard, useRenderer as useRenderer4, useTerminalDimensions as useTerminalDimensions2 } from "@opentui/react";
|
|
19996
20059
|
import { jsxDEV as jsxDEV3 } from "@opentui/react/jsx-dev-runtime";
|
|
19997
20060
|
function defaultFrame(state) {
|
|
@@ -20009,6 +20072,7 @@ function App(props) {
|
|
|
20009
20072
|
const runAppAction = useRunAppAction();
|
|
20010
20073
|
const store = useStore();
|
|
20011
20074
|
const renderer = useRenderer4();
|
|
20075
|
+
useSyncExternalStore2(subscribeHover, getHoveredSelectableId, getHoveredSelectableId);
|
|
20012
20076
|
const dims = useTerminalDimensions2();
|
|
20013
20077
|
const layout = computeStageLayout(dims.width, dims.height);
|
|
20014
20078
|
const registry = useMemo(() => ({ ...BUILTIN, ...props.sceneRenderers ?? {} }), [props.sceneRenderers]);
|
|
@@ -20043,8 +20107,7 @@ function App(props) {
|
|
|
20043
20107
|
} else {
|
|
20044
20108
|
return;
|
|
20045
20109
|
}
|
|
20046
|
-
|
|
20047
|
-
runAppAction("Activate selection", () => activateSelection(runtime, items));
|
|
20110
|
+
runAppAction("Activate selection", () => activateSelection(runtime, items));
|
|
20048
20111
|
};
|
|
20049
20112
|
return /* @__PURE__ */ jsxDEV3("box", {
|
|
20050
20113
|
style: { position: "absolute", left: 0, top: 0, width: "100%", height: "100%" },
|
|
@@ -20094,6 +20157,7 @@ var init_App = __esm(() => {
|
|
|
20094
20157
|
init_SceneFrameView();
|
|
20095
20158
|
init_ChromeHost();
|
|
20096
20159
|
init_scroll();
|
|
20160
|
+
init_hover();
|
|
20097
20161
|
init_context();
|
|
20098
20162
|
init_nav();
|
|
20099
20163
|
BUILTIN = {
|
|
@@ -23990,11 +24054,8 @@ init_scene();
|
|
|
23990
24054
|
init_selectable();
|
|
23991
24055
|
|
|
23992
24056
|
// packages/cli/src/app-opentui/list-search.ts
|
|
23993
|
-
function
|
|
23994
|
-
return
|
|
23995
|
-
}
|
|
23996
|
-
function listSearchQuery(state) {
|
|
23997
|
-
return isListSearchScene(state.scene) ? state.typeBar.value.trim() : "";
|
|
24057
|
+
function listSearchQuery(_state) {
|
|
24058
|
+
return "";
|
|
23998
24059
|
}
|
|
23999
24060
|
function valueText(value) {
|
|
24000
24061
|
if (value === undefined || value === null)
|
|
@@ -2242,6 +2242,7 @@ var RIG_UI = {
|
|
|
2242
2242
|
bg2: "#0b0c0e",
|
|
2243
2243
|
panel: "#101115",
|
|
2244
2244
|
panel2: "#14161b",
|
|
2245
|
+
hover: "#181b24",
|
|
2245
2246
|
glass: "#1e2230",
|
|
2246
2247
|
border: "#2a2e3a",
|
|
2247
2248
|
ink: "#f4f5f8",
|
|
@@ -3398,15 +3399,66 @@ function sparklineString(values, width) {
|
|
|
3398
3399
|
|
|
3399
3400
|
// packages/cli/src/app-opentui/render/text.ts
|
|
3400
3401
|
import { RGBA as RGBA4, TextAttributes as TextAttributes4, TextRenderable } from "@opentui/core";
|
|
3402
|
+
|
|
3403
|
+
// packages/cli/src/app-opentui/render/hover.ts
|
|
3404
|
+
var hoveredId;
|
|
3405
|
+
var listeners = new Set;
|
|
3406
|
+
function isHovered(id) {
|
|
3407
|
+
return id !== undefined && id === hoveredId;
|
|
3408
|
+
}
|
|
3409
|
+
function setHoveredSelectableId(id) {
|
|
3410
|
+
if (hoveredId === id)
|
|
3411
|
+
return;
|
|
3412
|
+
hoveredId = id;
|
|
3413
|
+
for (const listener of listeners)
|
|
3414
|
+
listener();
|
|
3415
|
+
}
|
|
3416
|
+
function clearHoveredSelectableId(id) {
|
|
3417
|
+
if (id !== undefined && hoveredId === id)
|
|
3418
|
+
setHoveredSelectableId(undefined);
|
|
3419
|
+
}
|
|
3420
|
+
function subscribeHover(listener) {
|
|
3421
|
+
listeners.add(listener);
|
|
3422
|
+
return () => {
|
|
3423
|
+
listeners.delete(listener);
|
|
3424
|
+
};
|
|
3425
|
+
}
|
|
3426
|
+
|
|
3427
|
+
// packages/cli/src/app-opentui/render/text.ts
|
|
3401
3428
|
var TRANSPARENT2 = RGBA4.fromInts(0, 0, 0, 0);
|
|
3429
|
+
var HOVER_BG = RGBA4.fromHex(RIG_UI.hover);
|
|
3430
|
+
function lineIsClickable(line2) {
|
|
3431
|
+
return line2?.selectable !== undefined || line2?.selectableIndex !== undefined;
|
|
3432
|
+
}
|
|
3433
|
+
function lineSelectableId(line2) {
|
|
3434
|
+
return line2?.selectable?.id ?? line2?.selectableId;
|
|
3435
|
+
}
|
|
3436
|
+
function lineBackground(line2) {
|
|
3437
|
+
if (line2?.bg)
|
|
3438
|
+
return RGBA4.fromHex(line2.bg);
|
|
3439
|
+
const id = lineSelectableId(line2);
|
|
3440
|
+
if (id !== undefined && isHovered(id))
|
|
3441
|
+
return HOVER_BG;
|
|
3442
|
+
return TRANSPARENT2;
|
|
3443
|
+
}
|
|
3402
3444
|
function selectableMouseHandler(currentLineRef, onLineMouseDown) {
|
|
3403
3445
|
return (event) => {
|
|
3404
3446
|
const currentLine = currentLineRef();
|
|
3405
|
-
if (currentLine
|
|
3447
|
+
if (!lineIsClickable(currentLine))
|
|
3406
3448
|
return;
|
|
3407
3449
|
onLineMouseDown?.(currentLine, event);
|
|
3408
3450
|
};
|
|
3409
3451
|
}
|
|
3452
|
+
function hoverHandlers(currentLineRef) {
|
|
3453
|
+
return {
|
|
3454
|
+
onMouseOver: () => {
|
|
3455
|
+
const id = lineSelectableId(currentLineRef());
|
|
3456
|
+
if (id !== undefined)
|
|
3457
|
+
setHoveredSelectableId(id);
|
|
3458
|
+
},
|
|
3459
|
+
onMouseOut: () => clearHoveredSelectableId(lineSelectableId(currentLineRef()))
|
|
3460
|
+
};
|
|
3461
|
+
}
|
|
3410
3462
|
function createTextLine(renderer, id, top, onLineMouseDown) {
|
|
3411
3463
|
let currentLine;
|
|
3412
3464
|
const renderable = new TextRenderable(renderer, {
|
|
@@ -3418,7 +3470,8 @@ function createTextLine(renderer, id, top, onLineMouseDown) {
|
|
|
3418
3470
|
width: 1,
|
|
3419
3471
|
fg: RIG_UI.ink2,
|
|
3420
3472
|
selectable: true,
|
|
3421
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown)
|
|
3473
|
+
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
3474
|
+
...hoverHandlers(() => currentLine)
|
|
3422
3475
|
});
|
|
3423
3476
|
renderable.setRigSceneLine = (line2) => {
|
|
3424
3477
|
currentLine = line2;
|
|
@@ -3435,7 +3488,8 @@ function createFlowTextLine(renderer, id, onLineMouseDown) {
|
|
|
3435
3488
|
flexShrink: 0,
|
|
3436
3489
|
fg: RIG_UI.ink2,
|
|
3437
3490
|
selectable: true,
|
|
3438
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown)
|
|
3491
|
+
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
3492
|
+
...hoverHandlers(() => currentLine)
|
|
3439
3493
|
});
|
|
3440
3494
|
renderable.setRigSceneLine = (line2) => {
|
|
3441
3495
|
currentLine = line2;
|
|
@@ -3449,7 +3503,7 @@ function applyTextLine(renderable, line2, top, left, width) {
|
|
|
3449
3503
|
renderable.width = width;
|
|
3450
3504
|
renderable.content = line2?.styledText ?? line2?.text ?? "";
|
|
3451
3505
|
renderable.fg = line2?.fg ?? RIG_UI.ink2;
|
|
3452
|
-
renderable.bg = line2
|
|
3506
|
+
renderable.bg = lineBackground(line2);
|
|
3453
3507
|
renderable.attributes = line2?.bold ? TextAttributes4.BOLD : line2?.dim ? TextAttributes4.DIM : 0;
|
|
3454
3508
|
}
|
|
3455
3509
|
function applyFlowTextLine(renderable, line2, width) {
|
|
@@ -3459,7 +3513,7 @@ function applyFlowTextLine(renderable, line2, width) {
|
|
|
3459
3513
|
renderable.width = Math.max(1, width);
|
|
3460
3514
|
renderable.content = line2?.styledText ?? line2?.text ?? "";
|
|
3461
3515
|
renderable.fg = line2?.fg ?? RIG_UI.ink2;
|
|
3462
|
-
renderable.bg = line2
|
|
3516
|
+
renderable.bg = lineBackground(line2);
|
|
3463
3517
|
renderable.attributes = line2?.bold ? TextAttributes4.BOLD : line2?.dim ? TextAttributes4.DIM : 0;
|
|
3464
3518
|
}
|
|
3465
3519
|
function clearTextLines(renderables, from = 0) {
|
|
@@ -4782,8 +4836,7 @@ async function launchRigOpenTuiApp(options) {
|
|
|
4782
4836
|
} else if (!selectById(store, id, renderedSelectableItems)) {
|
|
4783
4837
|
return;
|
|
4784
4838
|
}
|
|
4785
|
-
|
|
4786
|
-
runAppAction("Activate selection", () => activateSelection(runtime, renderedSelectableItems));
|
|
4839
|
+
runAppAction("Activate selection", () => activateSelection(runtime, renderedSelectableItems));
|
|
4787
4840
|
};
|
|
4788
4841
|
for (let index = 0;index < MAX_SCENE_PANELS; index += 1) {
|
|
4789
4842
|
const panel = createScrollPanelLayer(renderer, `rig-scroll-panel-${index}`, onLineClick);
|
|
@@ -4850,6 +4903,7 @@ async function launchRigOpenTuiApp(options) {
|
|
|
4850
4903
|
};
|
|
4851
4904
|
renderer.keyInput.on("keypress", onKeyPress);
|
|
4852
4905
|
resources.add(() => renderer?.keyInput.off("keypress", onKeyPress));
|
|
4906
|
+
resources.add(subscribeHover(() => scheduleAppRender(0)));
|
|
4853
4907
|
const onPaste = (event) => {
|
|
4854
4908
|
const state = store.getState();
|
|
4855
4909
|
if (state.scene === "handoff") {
|
|
@@ -2,7 +2,11 @@ import type { AppRunRecord } from "./adapters/fleet";
|
|
|
2
2
|
import type { AppTaskRecord } from "./adapters/tasks";
|
|
3
3
|
import type { AppSceneId, AppState } from "./types";
|
|
4
4
|
export declare function isListSearchScene(scene: AppSceneId): boolean;
|
|
5
|
-
|
|
5
|
+
/** Table filtering from keyboard navigation has been removed: typing in the
|
|
6
|
+
* command bar no longer live-filters the runs/tasks tables. This always returns
|
|
7
|
+
* "" so the fleet/tasks scenes render the full (sorted) row set. The `_state`
|
|
8
|
+
* arg is retained so callers stay source-compatible. */
|
|
9
|
+
export declare function listSearchQuery(_state: AppState): string;
|
|
6
10
|
export declare function filterRunsForSearch(runs: readonly AppRunRecord[], query: string): AppRunRecord[];
|
|
7
11
|
export declare function filterTasksForSearch(tasks: readonly AppTaskRecord[], query: string): AppTaskRecord[];
|
|
8
12
|
export declare function searchSummary(kind: "runs" | "tasks", query: string, visible: number, total: number): string;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
function isListSearchScene(scene) {
|
|
4
4
|
return scene === "fleet" || scene === "tasks";
|
|
5
5
|
}
|
|
6
|
-
function listSearchQuery(
|
|
7
|
-
return
|
|
6
|
+
function listSearchQuery(_state) {
|
|
7
|
+
return "";
|
|
8
8
|
}
|
|
9
9
|
function valueText(value) {
|
|
10
10
|
if (value === undefined || value === null)
|