@h-rig/cli 0.0.6-alpha.85 → 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 -1027
- package/dist/src/app-opentui/bootstrap.js +79 -1027
- 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 -1024
- 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 +62 -970
- package/dist/src/app-opentui/react/Backdrop.js +3 -9
- package/dist/src/app-opentui/react/ChromeHost.js +6 -1038
- package/dist/src/app-opentui/react/SceneFrameView.js +55 -5
- package/dist/src/app-opentui/react/launch.js +62 -970
- 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/constants.d.ts +0 -1
- package/dist/src/app-opentui/render/constants.js +0 -2
- package/dist/src/app-opentui/render/graphics.js +3 -9
- 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 +62 -1025
- 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/src/app-opentui/render/image-visual-layer-worker.d.ts +0 -1
- package/dist/src/app-opentui/render/image-visual-layer-worker.js +0 -1084
- package/dist/src/app-opentui/render/image-visual-layer.d.ts +0 -109
- package/dist/src/app-opentui/render/image-visual-layer.js +0 -1068
- package/dist/src/app-opentui/terminal-capabilities.d.ts +0 -7
- package/dist/src/app-opentui/terminal-capabilities.js +0 -15
|
@@ -17045,6 +17045,7 @@ var RIG_UI = {
|
|
|
17045
17045
|
bg2: "#0b0c0e",
|
|
17046
17046
|
panel: "#101115",
|
|
17047
17047
|
panel2: "#14161b",
|
|
17048
|
+
hover: "#181b24",
|
|
17048
17049
|
glass: "#1e2230",
|
|
17049
17050
|
border: "#2a2e3a",
|
|
17050
17051
|
ink: "#f4f5f8",
|
|
@@ -19347,11 +19348,8 @@ function renderFamilyScene(state, layout) {
|
|
|
19347
19348
|
}
|
|
19348
19349
|
|
|
19349
19350
|
// packages/cli/src/app-opentui/list-search.ts
|
|
19350
|
-
function
|
|
19351
|
-
return
|
|
19352
|
-
}
|
|
19353
|
-
function listSearchQuery(state) {
|
|
19354
|
-
return isListSearchScene(state.scene) ? state.typeBar.value.trim() : "";
|
|
19351
|
+
function listSearchQuery(_state) {
|
|
19352
|
+
return "";
|
|
19355
19353
|
}
|
|
19356
19354
|
function valueText(value) {
|
|
19357
19355
|
if (value === undefined || value === null)
|
|
@@ -28,4 +28,3 @@ export declare const RAIL_YS_LOOP: readonly [0.18, 0.5, 0.82];
|
|
|
28
28
|
export declare const RAIL_YS_CARRIER: readonly [0.24, 0.54, 0.82];
|
|
29
29
|
export declare const RAIL_YS_DISPATCH: readonly [0.18, 0.58, 0.82];
|
|
30
30
|
export declare const GLOW_FALLOFF_EXP_ASCII = 2.2;
|
|
31
|
-
export declare const GLOW_FALLOFF_EXP_IMAGE = 2.4;
|
|
@@ -30,7 +30,6 @@ var RAIL_YS_LOOP = [0.18, 0.5, 0.82];
|
|
|
30
30
|
var RAIL_YS_CARRIER = [0.24, 0.54, 0.82];
|
|
31
31
|
var RAIL_YS_DISPATCH = [0.18, 0.58, 0.82];
|
|
32
32
|
var GLOW_FALLOFF_EXP_ASCII = 2.2;
|
|
33
|
-
var GLOW_FALLOFF_EXP_IMAGE = 2.4;
|
|
34
33
|
export {
|
|
35
34
|
RAIL_YS_LOOP,
|
|
36
35
|
RAIL_YS_DISPATCH,
|
|
@@ -47,7 +46,6 @@ export {
|
|
|
47
46
|
LANE_LEN_BASE,
|
|
48
47
|
LANE_INTERP_STEPS,
|
|
49
48
|
LANE_CURVE_RANGE,
|
|
50
|
-
GLOW_FALLOFF_EXP_IMAGE,
|
|
51
49
|
GLOW_FALLOFF_EXP_ASCII,
|
|
52
50
|
DISPATCH_PACKETS_WIDE,
|
|
53
51
|
DISPATCH_PACKETS_COMPACT,
|
|
@@ -15,6 +15,7 @@ var RIG_UI = {
|
|
|
15
15
|
bg2: "#0b0c0e",
|
|
16
16
|
panel: "#101115",
|
|
17
17
|
panel2: "#14161b",
|
|
18
|
+
hover: "#181b24",
|
|
18
19
|
glass: "#1e2230",
|
|
19
20
|
border: "#2a2e3a",
|
|
20
21
|
ink: "#f4f5f8",
|
|
@@ -597,27 +598,20 @@ function writeCell(layer, x, y, char, fg, bg) {
|
|
|
597
598
|
function drawFullCell(layer, x, y, bg) {
|
|
598
599
|
writeCell(layer, x, y, " ", TRANSPARENT, bg);
|
|
599
600
|
}
|
|
600
|
-
function
|
|
601
|
-
writeCell(layer, x, y, char, fg, BACKDROP);
|
|
602
|
-
}
|
|
603
|
-
function drawRoundedFill(layer, left, top, right, bottom, dividerY) {
|
|
601
|
+
function drawPanelFill(layer, left, top, right, bottom, dividerY) {
|
|
604
602
|
const bgForY = (y) => y < dividerY ? PANEL_HEADER_BG : PANEL_BG;
|
|
605
603
|
for (let y = top;y <= bottom; y += 1) {
|
|
606
604
|
const bg = bgForY(y);
|
|
607
605
|
for (let x = left;x <= right; x += 1)
|
|
608
606
|
drawFullCell(layer, x, y, bg);
|
|
609
607
|
}
|
|
610
|
-
drawCornerCut(layer, left, top, "\u2597", PANEL_HEADER_BG);
|
|
611
|
-
drawCornerCut(layer, right, top, "\u2596", PANEL_HEADER_BG);
|
|
612
|
-
drawCornerCut(layer, left, bottom, "\u259D", PANEL_BG);
|
|
613
|
-
drawCornerCut(layer, right, bottom, "\u2598", PANEL_BG);
|
|
614
608
|
}
|
|
615
609
|
function drawAdTerminalPanel(layer, layout, panel) {
|
|
616
610
|
const rect = panelCellRect(layout, panel);
|
|
617
611
|
if (!rect)
|
|
618
612
|
return;
|
|
619
613
|
const { left, top, width, right, bottom, headerHeight, dividerY } = rect;
|
|
620
|
-
|
|
614
|
+
drawPanelFill(layer, left, top, right, bottom, dividerY);
|
|
621
615
|
if (dividerY > top && dividerY < bottom) {
|
|
622
616
|
for (let x = left + 2;x < right - 1; x += 1) {
|
|
623
617
|
writeCell(layer, x, dividerY, "\u2500", PANEL_LINE_DIM, PANEL_BG);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function getHoveredSelectableId(): string | undefined;
|
|
2
|
+
export declare function isHovered(id: string | undefined): boolean;
|
|
3
|
+
/** Set the hovered row (or clear with `undefined`). No-ops when unchanged so we
|
|
4
|
+
* don't churn renders on every mouse-move event within the same row. */
|
|
5
|
+
export declare function setHoveredSelectableId(id: string | undefined): void;
|
|
6
|
+
/** Clear the hover only if `id` is the currently-hovered row — guards against a
|
|
7
|
+
* stale mouseout (from a row we already left) wiping a newer hover. */
|
|
8
|
+
export declare function clearHoveredSelectableId(id: string | undefined): void;
|
|
9
|
+
/** Subscribe to hover changes. Legacy shell passes its render scheduler; the
|
|
10
|
+
* react shell bridges this into a re-render. Returns an unsubscribe fn. */
|
|
11
|
+
export declare function subscribeHover(listener: () => void): () => void;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// packages/cli/src/app-opentui/render/hover.ts
|
|
3
|
+
var hoveredId;
|
|
4
|
+
var listeners = new Set;
|
|
5
|
+
function getHoveredSelectableId() {
|
|
6
|
+
return hoveredId;
|
|
7
|
+
}
|
|
8
|
+
function isHovered(id) {
|
|
9
|
+
return id !== undefined && id === hoveredId;
|
|
10
|
+
}
|
|
11
|
+
function setHoveredSelectableId(id) {
|
|
12
|
+
if (hoveredId === id)
|
|
13
|
+
return;
|
|
14
|
+
hoveredId = id;
|
|
15
|
+
for (const listener of listeners)
|
|
16
|
+
listener();
|
|
17
|
+
}
|
|
18
|
+
function clearHoveredSelectableId(id) {
|
|
19
|
+
if (id !== undefined && hoveredId === id)
|
|
20
|
+
setHoveredSelectableId(undefined);
|
|
21
|
+
}
|
|
22
|
+
function subscribeHover(listener) {
|
|
23
|
+
listeners.add(listener);
|
|
24
|
+
return () => {
|
|
25
|
+
listeners.delete(listener);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
subscribeHover,
|
|
30
|
+
setHoveredSelectableId,
|
|
31
|
+
isHovered,
|
|
32
|
+
getHoveredSelectableId,
|
|
33
|
+
clearHoveredSelectableId
|
|
34
|
+
};
|
|
@@ -15,6 +15,7 @@ var RIG_UI = {
|
|
|
15
15
|
bg2: "#0b0c0e",
|
|
16
16
|
panel: "#101115",
|
|
17
17
|
panel2: "#14161b",
|
|
18
|
+
hover: "#181b24",
|
|
18
19
|
glass: "#1e2230",
|
|
19
20
|
border: "#2a2e3a",
|
|
20
21
|
ink: "#f4f5f8",
|
|
@@ -74,15 +75,60 @@ function panelContentRect(layout, panel) {
|
|
|
74
75
|
|
|
75
76
|
// packages/cli/src/app-opentui/render/text.ts
|
|
76
77
|
import { RGBA, TextAttributes as TextAttributes2, TextRenderable } from "@opentui/core";
|
|
78
|
+
|
|
79
|
+
// packages/cli/src/app-opentui/render/hover.ts
|
|
80
|
+
var hoveredId;
|
|
81
|
+
var listeners = new Set;
|
|
82
|
+
function isHovered(id) {
|
|
83
|
+
return id !== undefined && id === hoveredId;
|
|
84
|
+
}
|
|
85
|
+
function setHoveredSelectableId(id) {
|
|
86
|
+
if (hoveredId === id)
|
|
87
|
+
return;
|
|
88
|
+
hoveredId = id;
|
|
89
|
+
for (const listener of listeners)
|
|
90
|
+
listener();
|
|
91
|
+
}
|
|
92
|
+
function clearHoveredSelectableId(id) {
|
|
93
|
+
if (id !== undefined && hoveredId === id)
|
|
94
|
+
setHoveredSelectableId(undefined);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// packages/cli/src/app-opentui/render/text.ts
|
|
77
98
|
var TRANSPARENT = RGBA.fromInts(0, 0, 0, 0);
|
|
99
|
+
var HOVER_BG = RGBA.fromHex(RIG_UI.hover);
|
|
100
|
+
function lineIsClickable(line) {
|
|
101
|
+
return line?.selectable !== undefined || line?.selectableIndex !== undefined;
|
|
102
|
+
}
|
|
103
|
+
function lineSelectableId(line) {
|
|
104
|
+
return line?.selectable?.id ?? line?.selectableId;
|
|
105
|
+
}
|
|
106
|
+
function lineBackground(line) {
|
|
107
|
+
if (line?.bg)
|
|
108
|
+
return RGBA.fromHex(line.bg);
|
|
109
|
+
const id = lineSelectableId(line);
|
|
110
|
+
if (id !== undefined && isHovered(id))
|
|
111
|
+
return HOVER_BG;
|
|
112
|
+
return TRANSPARENT;
|
|
113
|
+
}
|
|
78
114
|
function selectableMouseHandler(currentLineRef, onLineMouseDown) {
|
|
79
115
|
return (event) => {
|
|
80
116
|
const currentLine = currentLineRef();
|
|
81
|
-
if (currentLine
|
|
117
|
+
if (!lineIsClickable(currentLine))
|
|
82
118
|
return;
|
|
83
119
|
onLineMouseDown?.(currentLine, event);
|
|
84
120
|
};
|
|
85
121
|
}
|
|
122
|
+
function hoverHandlers(currentLineRef) {
|
|
123
|
+
return {
|
|
124
|
+
onMouseOver: () => {
|
|
125
|
+
const id = lineSelectableId(currentLineRef());
|
|
126
|
+
if (id !== undefined)
|
|
127
|
+
setHoveredSelectableId(id);
|
|
128
|
+
},
|
|
129
|
+
onMouseOut: () => clearHoveredSelectableId(lineSelectableId(currentLineRef()))
|
|
130
|
+
};
|
|
131
|
+
}
|
|
86
132
|
function createFlowTextLine(renderer, id, onLineMouseDown) {
|
|
87
133
|
let currentLine;
|
|
88
134
|
const renderable = new TextRenderable(renderer, {
|
|
@@ -93,7 +139,8 @@ function createFlowTextLine(renderer, id, onLineMouseDown) {
|
|
|
93
139
|
flexShrink: 0,
|
|
94
140
|
fg: RIG_UI.ink2,
|
|
95
141
|
selectable: true,
|
|
96
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown)
|
|
142
|
+
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
143
|
+
...hoverHandlers(() => currentLine)
|
|
97
144
|
});
|
|
98
145
|
renderable.setRigSceneLine = (line) => {
|
|
99
146
|
currentLine = line;
|
|
@@ -107,7 +154,7 @@ function applyFlowTextLine(renderable, line, width) {
|
|
|
107
154
|
renderable.width = Math.max(1, width);
|
|
108
155
|
renderable.content = line?.styledText ?? line?.text ?? "";
|
|
109
156
|
renderable.fg = line?.fg ?? RIG_UI.ink2;
|
|
110
|
-
renderable.bg = line
|
|
157
|
+
renderable.bg = lineBackground(line);
|
|
111
158
|
renderable.attributes = line?.bold ? TextAttributes2.BOLD : line?.dim ? TextAttributes2.DIM : 0;
|
|
112
159
|
}
|
|
113
160
|
|
|
@@ -6,6 +6,19 @@ import type { AppSceneLine } from "../types";
|
|
|
6
6
|
* this is the one selection-highlight mechanism, plumbed end-to-end here so
|
|
7
7
|
* scenes only set `bg` on the AppSceneLine and never touch RGBA. */
|
|
8
8
|
export declare const TRANSPARENT: RGBA;
|
|
9
|
+
/** A line is clickable when it carries a selectable. The imperative shell stamps
|
|
10
|
+
* `selectableId`/`selectableIndex` via remapSelectableLine; the @opentui/react
|
|
11
|
+
* shell does not, so it only carries `selectable`. Check all three so clicks +
|
|
12
|
+
* hover work identically in both shells. */
|
|
13
|
+
export declare function lineIsClickable(line: AppSceneLine | undefined): boolean;
|
|
14
|
+
/** The stable id used to key hover (and click resolution): the selectable's id,
|
|
15
|
+
* falling back to the imperative-stamped selectableId. Identical in both shells
|
|
16
|
+
* (remapSelectableLine sets selectableId = selectable.id). */
|
|
17
|
+
export declare function lineSelectableId(line: AppSceneLine | undefined): string | undefined;
|
|
18
|
+
/** The bg a line paints: an explicit `bg` (a selected row) always wins;
|
|
19
|
+
* otherwise a clickable row that is currently mouse-hovered gets the hover bar;
|
|
20
|
+
* otherwise transparent so the panel ground shows through. */
|
|
21
|
+
export declare function lineBackground(line: AppSceneLine | undefined): RGBA;
|
|
9
22
|
export type TextLineRenderable = TextRenderable & {
|
|
10
23
|
setRigSceneLine?(line: AppSceneLine | undefined): void;
|
|
11
24
|
};
|
|
@@ -15,6 +15,7 @@ var RIG_UI = {
|
|
|
15
15
|
bg2: "#0b0c0e",
|
|
16
16
|
panel: "#101115",
|
|
17
17
|
panel2: "#14161b",
|
|
18
|
+
hover: "#181b24",
|
|
18
19
|
glass: "#1e2230",
|
|
19
20
|
border: "#2a2e3a",
|
|
20
21
|
ink: "#f4f5f8",
|
|
@@ -42,16 +43,59 @@ var styles = {
|
|
|
42
43
|
magenta: otuiFg(RIG_UI.magenta)
|
|
43
44
|
};
|
|
44
45
|
|
|
46
|
+
// packages/cli/src/app-opentui/render/hover.ts
|
|
47
|
+
var hoveredId;
|
|
48
|
+
var listeners = new Set;
|
|
49
|
+
function isHovered(id) {
|
|
50
|
+
return id !== undefined && id === hoveredId;
|
|
51
|
+
}
|
|
52
|
+
function setHoveredSelectableId(id) {
|
|
53
|
+
if (hoveredId === id)
|
|
54
|
+
return;
|
|
55
|
+
hoveredId = id;
|
|
56
|
+
for (const listener of listeners)
|
|
57
|
+
listener();
|
|
58
|
+
}
|
|
59
|
+
function clearHoveredSelectableId(id) {
|
|
60
|
+
if (id !== undefined && hoveredId === id)
|
|
61
|
+
setHoveredSelectableId(undefined);
|
|
62
|
+
}
|
|
63
|
+
|
|
45
64
|
// packages/cli/src/app-opentui/render/text.ts
|
|
46
65
|
var TRANSPARENT = RGBA.fromInts(0, 0, 0, 0);
|
|
66
|
+
var HOVER_BG = RGBA.fromHex(RIG_UI.hover);
|
|
67
|
+
function lineIsClickable(line) {
|
|
68
|
+
return line?.selectable !== undefined || line?.selectableIndex !== undefined;
|
|
69
|
+
}
|
|
70
|
+
function lineSelectableId(line) {
|
|
71
|
+
return line?.selectable?.id ?? line?.selectableId;
|
|
72
|
+
}
|
|
73
|
+
function lineBackground(line) {
|
|
74
|
+
if (line?.bg)
|
|
75
|
+
return RGBA.fromHex(line.bg);
|
|
76
|
+
const id = lineSelectableId(line);
|
|
77
|
+
if (id !== undefined && isHovered(id))
|
|
78
|
+
return HOVER_BG;
|
|
79
|
+
return TRANSPARENT;
|
|
80
|
+
}
|
|
47
81
|
function selectableMouseHandler(currentLineRef, onLineMouseDown) {
|
|
48
82
|
return (event) => {
|
|
49
83
|
const currentLine = currentLineRef();
|
|
50
|
-
if (currentLine
|
|
84
|
+
if (!lineIsClickable(currentLine))
|
|
51
85
|
return;
|
|
52
86
|
onLineMouseDown?.(currentLine, event);
|
|
53
87
|
};
|
|
54
88
|
}
|
|
89
|
+
function hoverHandlers(currentLineRef) {
|
|
90
|
+
return {
|
|
91
|
+
onMouseOver: () => {
|
|
92
|
+
const id = lineSelectableId(currentLineRef());
|
|
93
|
+
if (id !== undefined)
|
|
94
|
+
setHoveredSelectableId(id);
|
|
95
|
+
},
|
|
96
|
+
onMouseOut: () => clearHoveredSelectableId(lineSelectableId(currentLineRef()))
|
|
97
|
+
};
|
|
98
|
+
}
|
|
55
99
|
function createTextLine(renderer, id, top, onLineMouseDown) {
|
|
56
100
|
let currentLine;
|
|
57
101
|
const renderable = new TextRenderable(renderer, {
|
|
@@ -63,7 +107,8 @@ function createTextLine(renderer, id, top, onLineMouseDown) {
|
|
|
63
107
|
width: 1,
|
|
64
108
|
fg: RIG_UI.ink2,
|
|
65
109
|
selectable: true,
|
|
66
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown)
|
|
110
|
+
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
111
|
+
...hoverHandlers(() => currentLine)
|
|
67
112
|
});
|
|
68
113
|
renderable.setRigSceneLine = (line) => {
|
|
69
114
|
currentLine = line;
|
|
@@ -80,7 +125,8 @@ function createFlowTextLine(renderer, id, onLineMouseDown) {
|
|
|
80
125
|
flexShrink: 0,
|
|
81
126
|
fg: RIG_UI.ink2,
|
|
82
127
|
selectable: true,
|
|
83
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown)
|
|
128
|
+
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
129
|
+
...hoverHandlers(() => currentLine)
|
|
84
130
|
});
|
|
85
131
|
renderable.setRigSceneLine = (line) => {
|
|
86
132
|
currentLine = line;
|
|
@@ -94,7 +140,7 @@ function applyTextLine(renderable, line, top, left, width) {
|
|
|
94
140
|
renderable.width = width;
|
|
95
141
|
renderable.content = line?.styledText ?? line?.text ?? "";
|
|
96
142
|
renderable.fg = line?.fg ?? RIG_UI.ink2;
|
|
97
|
-
renderable.bg = line
|
|
143
|
+
renderable.bg = lineBackground(line);
|
|
98
144
|
renderable.attributes = line?.bold ? TextAttributes2.BOLD : line?.dim ? TextAttributes2.DIM : 0;
|
|
99
145
|
}
|
|
100
146
|
function applyFlowTextLine(renderable, line, width) {
|
|
@@ -104,7 +150,7 @@ function applyFlowTextLine(renderable, line, width) {
|
|
|
104
150
|
renderable.width = Math.max(1, width);
|
|
105
151
|
renderable.content = line?.styledText ?? line?.text ?? "";
|
|
106
152
|
renderable.fg = line?.fg ?? RIG_UI.ink2;
|
|
107
|
-
renderable.bg = line
|
|
153
|
+
renderable.bg = lineBackground(line);
|
|
108
154
|
renderable.attributes = line?.bold ? TextAttributes2.BOLD : line?.dim ? TextAttributes2.DIM : 0;
|
|
109
155
|
}
|
|
110
156
|
function clearTextLines(renderables, from = 0) {
|
|
@@ -119,6 +165,9 @@ function clearTextLines(renderables, from = 0) {
|
|
|
119
165
|
}
|
|
120
166
|
}
|
|
121
167
|
export {
|
|
168
|
+
lineSelectableId,
|
|
169
|
+
lineIsClickable,
|
|
170
|
+
lineBackground,
|
|
122
171
|
createTextLine,
|
|
123
172
|
createFlowTextLine,
|
|
124
173
|
clearTextLines,
|