@vibecook/ghosttea-react 0.2.0
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/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/TerminalSurface.d.ts +28 -0
- package/dist/TerminalSurface.d.ts.map +1 -0
- package/dist/TerminalSurface.js +614 -0
- package/dist/TerminalSurface.js.map +1 -0
- package/dist/bindings/action-route.d.ts +155 -0
- package/dist/bindings/action-route.d.ts.map +1 -0
- package/dist/bindings/action-route.js +196 -0
- package/dist/bindings/action-route.js.map +1 -0
- package/dist/bindings/fixtures/extensions.json +10 -0
- package/dist/bindings/fixtures/keybinds-linux-default.json +505 -0
- package/dist/bindings/fixtures/keybinds-macos-default.json +660 -0
- package/dist/bindings/ghostty-actions.d.ts +247 -0
- package/dist/bindings/ghostty-actions.d.ts.map +1 -0
- package/dist/bindings/ghostty-actions.js +431 -0
- package/dist/bindings/ghostty-actions.js.map +1 -0
- package/dist/bindings/ghostty-bindings.d.ts +88 -0
- package/dist/bindings/ghostty-bindings.d.ts.map +1 -0
- package/dist/bindings/ghostty-bindings.js +122 -0
- package/dist/bindings/ghostty-bindings.js.map +1 -0
- package/dist/bindings/ghostty-triggers.d.ts +47 -0
- package/dist/bindings/ghostty-triggers.d.ts.map +1 -0
- package/dist/bindings/ghostty-triggers.js +378 -0
- package/dist/bindings/ghostty-triggers.js.map +1 -0
- package/dist/bindings/index.d.ts +5 -0
- package/dist/bindings/index.d.ts.map +1 -0
- package/dist/bindings/index.js +5 -0
- package/dist/bindings/index.js.map +1 -0
- package/dist/catalog-budget.d.ts +22 -0
- package/dist/catalog-budget.d.ts.map +1 -0
- package/dist/catalog-budget.js +53 -0
- package/dist/catalog-budget.js.map +1 -0
- package/dist/cell-width.d.ts +3 -0
- package/dist/cell-width.d.ts.map +1 -0
- package/dist/cell-width.js +19 -0
- package/dist/cell-width.js.map +1 -0
- package/dist/context.d.ts +9 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +13 -0
- package/dist/context.js.map +1 -0
- package/dist/cursor-invalidation.d.ts +3 -0
- package/dist/cursor-invalidation.d.ts.map +1 -0
- package/dist/cursor-invalidation.js +4 -0
- package/dist/cursor-invalidation.js.map +1 -0
- package/dist/frame-resync.d.ts +16 -0
- package/dist/frame-resync.d.ts.map +1 -0
- package/dist/frame-resync.js +164 -0
- package/dist/frame-resync.js.map +1 -0
- package/dist/frame-sequence.d.ts +14 -0
- package/dist/frame-sequence.d.ts.map +1 -0
- package/dist/frame-sequence.js +16 -0
- package/dist/frame-sequence.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/keyboard-input.d.ts +18 -0
- package/dist/keyboard-input.d.ts.map +1 -0
- package/dist/keyboard-input.js +101 -0
- package/dist/keyboard-input.js.map +1 -0
- package/dist/performance.d.ts +66 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +21 -0
- package/dist/performance.js.map +1 -0
- package/dist/renderers/canvas-renderer.d.ts +12 -0
- package/dist/renderers/canvas-renderer.d.ts.map +1 -0
- package/dist/renderers/canvas-renderer.js +117 -0
- package/dist/renderers/canvas-renderer.js.map +1 -0
- package/dist/renderers/render-damage.d.ts +7 -0
- package/dist/renderers/render-damage.d.ts.map +1 -0
- package/dist/renderers/render-damage.js +16 -0
- package/dist/renderers/render-damage.js.map +1 -0
- package/dist/renderers/types.d.ts +65 -0
- package/dist/renderers/types.d.ts.map +1 -0
- package/dist/renderers/types.js +31 -0
- package/dist/renderers/types.js.map +1 -0
- package/dist/renderers/webgpu-renderer.d.ts +27 -0
- package/dist/renderers/webgpu-renderer.d.ts.map +1 -0
- package/dist/renderers/webgpu-renderer.js +1746 -0
- package/dist/renderers/webgpu-renderer.js.map +1 -0
- package/dist/runtime.d.ts +70 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1021 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scroll-input.d.ts +6 -0
- package/dist/scroll-input.d.ts.map +1 -0
- package/dist/scroll-input.js +14 -0
- package/dist/scroll-input.js.map +1 -0
- package/dist/selection-input.d.ts +16 -0
- package/dist/selection-input.d.ts.map +1 -0
- package/dist/selection-input.js +67 -0
- package/dist/selection-input.js.map +1 -0
- package/dist/selection-text.d.ts +4 -0
- package/dist/selection-text.d.ts.map +1 -0
- package/dist/selection-text.js +28 -0
- package/dist/selection-text.js.map +1 -0
- package/dist/styles.css +75 -0
- package/dist/terminal-bindings.d.ts +22 -0
- package/dist/terminal-bindings.d.ts.map +1 -0
- package/dist/terminal-bindings.js +22 -0
- package/dist/terminal-bindings.js.map +1 -0
- package/dist/terminal-render.worker.d.ts +2 -0
- package/dist/terminal-render.worker.d.ts.map +1 -0
- package/dist/terminal-render.worker.js +3165 -0
- package/dist/terminal-render.worker.js.map +7 -0
- package/dist/worker-messages.d.ts +111 -0
- package/dist/worker-messages.d.ts.map +1 -0
- package/dist/worker-messages.js +2 -0
- package/dist/worker-messages.js.map +1 -0
- package/dist/workspace/RemoteSessionPalette.d.ts +12 -0
- package/dist/workspace/RemoteSessionPalette.d.ts.map +1 -0
- package/dist/workspace/RemoteSessionPalette.js +135 -0
- package/dist/workspace/RemoteSessionPalette.js.map +1 -0
- package/dist/workspace/Workspace.d.ts +69 -0
- package/dist/workspace/Workspace.d.ts.map +1 -0
- package/dist/workspace/Workspace.js +536 -0
- package/dist/workspace/Workspace.js.map +1 -0
- package/dist/workspace/hotkeys.d.ts +27 -0
- package/dist/workspace/hotkeys.d.ts.map +1 -0
- package/dist/workspace/hotkeys.js +29 -0
- package/dist/workspace/hotkeys.js.map +1 -0
- package/dist/workspace/index.d.ts +8 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +8 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/pane-layout.d.ts +35 -0
- package/dist/workspace/pane-layout.d.ts.map +1 -0
- package/dist/workspace/pane-layout.js +139 -0
- package/dist/workspace/pane-layout.js.map +1 -0
- package/dist/workspace/pending-cache.d.ts +5 -0
- package/dist/workspace/pending-cache.d.ts.map +1 -0
- package/dist/workspace/pending-cache.js +22 -0
- package/dist/workspace/pending-cache.js.map +1 -0
- package/dist/workspace/session-scope.d.ts +3 -0
- package/dist/workspace/session-scope.d.ts.map +1 -0
- package/dist/workspace/session-scope.js +6 -0
- package/dist/workspace/session-scope.js.map +1 -0
- package/dist/workspace/themes.d.ts +18 -0
- package/dist/workspace/themes.d.ts.map +1 -0
- package/dist/workspace/themes.js +19 -0
- package/dist/workspace/themes.js.map +1 -0
- package/dist/workspace/workspace-model.d.ts +59 -0
- package/dist/workspace/workspace-model.d.ts.map +1 -0
- package/dist/workspace/workspace-model.js +257 -0
- package/dist/workspace/workspace-model.js.map +1 -0
- package/dist/workspace/workspace-tabs.d.ts +41 -0
- package/dist/workspace/workspace-tabs.d.ts.map +1 -0
- package/dist/workspace/workspace-tabs.js +133 -0
- package/dist/workspace/workspace-tabs.js.map +1 -0
- package/dist/workspace.css +453 -0
- package/package.json +75 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { CellSelection, TerminalTheme } from "./renderers/types.js";
|
|
2
|
+
import type { TerminalScrollbarState } from "@vibecook/ghosttea-protocol";
|
|
3
|
+
import type { TerminalRenderPerformanceSnapshot } from "./performance.js";
|
|
4
|
+
export type RendererToWorkerMessage = {
|
|
5
|
+
type: "renderer-config";
|
|
6
|
+
forceCanvasFallback: boolean;
|
|
7
|
+
} | {
|
|
8
|
+
type: "partial-rendering";
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
} | {
|
|
11
|
+
type: "mount";
|
|
12
|
+
surfaceId: string;
|
|
13
|
+
sessionHandle: string;
|
|
14
|
+
canvas: OffscreenCanvas;
|
|
15
|
+
} | {
|
|
16
|
+
type: "unmount";
|
|
17
|
+
surfaceId: string;
|
|
18
|
+
} | {
|
|
19
|
+
type: "drop-session";
|
|
20
|
+
sessionHandle: string;
|
|
21
|
+
} | {
|
|
22
|
+
type: "resize";
|
|
23
|
+
surfaceId: string;
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
dpr: number;
|
|
27
|
+
} | {
|
|
28
|
+
type: "frame";
|
|
29
|
+
packet: ArrayBuffer;
|
|
30
|
+
} | {
|
|
31
|
+
type: "frame-gap";
|
|
32
|
+
sessionHandles: string[];
|
|
33
|
+
} | {
|
|
34
|
+
type: "expect-full";
|
|
35
|
+
sessionHandle: string;
|
|
36
|
+
} | {
|
|
37
|
+
type: "theme";
|
|
38
|
+
sessionHandle: string;
|
|
39
|
+
surfaceId?: string;
|
|
40
|
+
theme: TerminalTheme;
|
|
41
|
+
} | {
|
|
42
|
+
type: "selection";
|
|
43
|
+
sessionHandle: string;
|
|
44
|
+
surfaceId?: string;
|
|
45
|
+
selection: CellSelection | null;
|
|
46
|
+
} | {
|
|
47
|
+
type: "visibility";
|
|
48
|
+
sessionHandle: string;
|
|
49
|
+
surfaceId?: string;
|
|
50
|
+
visible: boolean;
|
|
51
|
+
} | {
|
|
52
|
+
type: "focus";
|
|
53
|
+
surfaceId: string;
|
|
54
|
+
sessionHandle: string;
|
|
55
|
+
focused: boolean;
|
|
56
|
+
} | {
|
|
57
|
+
type: "cursor-activity";
|
|
58
|
+
sessionHandle: string;
|
|
59
|
+
} | {
|
|
60
|
+
type: "force-full-redraw";
|
|
61
|
+
sessionHandle: string;
|
|
62
|
+
} | {
|
|
63
|
+
type: "force-row-redraw";
|
|
64
|
+
sessionHandle: string;
|
|
65
|
+
row: number;
|
|
66
|
+
} | {
|
|
67
|
+
type: "performance-start";
|
|
68
|
+
requestId: number;
|
|
69
|
+
} | {
|
|
70
|
+
type: "performance-finish";
|
|
71
|
+
requestId: number;
|
|
72
|
+
quietMs: number;
|
|
73
|
+
timeoutMs: number;
|
|
74
|
+
};
|
|
75
|
+
export type WorkerToRendererMessage = {
|
|
76
|
+
type: "renderer-status";
|
|
77
|
+
backend: string;
|
|
78
|
+
textEngine?: string;
|
|
79
|
+
recovered?: boolean;
|
|
80
|
+
} | {
|
|
81
|
+
type: "clipboard-write";
|
|
82
|
+
text: string;
|
|
83
|
+
} | {
|
|
84
|
+
type: "scrollbar-state";
|
|
85
|
+
sessionHandle: string;
|
|
86
|
+
scrollbar: TerminalScrollbarState;
|
|
87
|
+
} | {
|
|
88
|
+
type: "frame-resync-needed";
|
|
89
|
+
sessionHandle: string;
|
|
90
|
+
} | {
|
|
91
|
+
type: "frame-resync-complete";
|
|
92
|
+
sessionHandle: string;
|
|
93
|
+
} | {
|
|
94
|
+
type: "catalog-pressure";
|
|
95
|
+
sessionHandle: string;
|
|
96
|
+
reason: "working-set-exceeds-budget";
|
|
97
|
+
} | {
|
|
98
|
+
type: "frame-credit";
|
|
99
|
+
bytes: number;
|
|
100
|
+
} | {
|
|
101
|
+
type: "performance-started";
|
|
102
|
+
requestId: number;
|
|
103
|
+
} | {
|
|
104
|
+
type: "performance-result";
|
|
105
|
+
requestId: number;
|
|
106
|
+
snapshot: TerminalRenderPerformanceSnapshot;
|
|
107
|
+
} | {
|
|
108
|
+
type: "renderer-reload-required";
|
|
109
|
+
reason: string;
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=worker-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-messages.d.ts","sourceRoot":"","sources":["../src/worker-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-messages.js","sourceRoot":"","sources":["../src/worker-messages.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RemoteHostSummary, SharedSessionSummary } from "@vibecook/ghosttea-protocol";
|
|
2
|
+
export interface RemoteChoice {
|
|
3
|
+
host: RemoteHostSummary;
|
|
4
|
+
session: SharedSessionSummary;
|
|
5
|
+
}
|
|
6
|
+
interface RemoteSessionPaletteProps {
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
onOpen: (choice: RemoteChoice) => Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export declare function RemoteSessionPalette({ onClose, onOpen }: RemoteSessionPaletteProps): import("react").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=RemoteSessionPalette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteSessionPalette.d.ts","sourceRoot":"","sources":["../../src/workspace/RemoteSessionPalette.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,yBAAyB,+BA2MlF"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { useGhostteaRuntime } from "../context.js";
|
|
4
|
+
export function RemoteSessionPalette({ onClose, onOpen }) {
|
|
5
|
+
const terminalRuntime = useGhostteaRuntime();
|
|
6
|
+
const inputRef = useRef(null);
|
|
7
|
+
const aliveRef = useRef(true);
|
|
8
|
+
const loadingRef = useRef(false);
|
|
9
|
+
const [hosts, setHosts] = useState([]);
|
|
10
|
+
const [query, setQuery] = useState("");
|
|
11
|
+
const [selected, setSelected] = useState(0);
|
|
12
|
+
const [loading, setLoading] = useState(true);
|
|
13
|
+
const [opening, setOpening] = useState();
|
|
14
|
+
const [error, setError] = useState();
|
|
15
|
+
const load = useCallback(async (background = false) => {
|
|
16
|
+
if (loadingRef.current)
|
|
17
|
+
return;
|
|
18
|
+
loadingRef.current = true;
|
|
19
|
+
if (!background) {
|
|
20
|
+
setLoading(true);
|
|
21
|
+
setError(undefined);
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const discovered = await terminalRuntime.listRemoteHosts();
|
|
25
|
+
if (!aliveRef.current)
|
|
26
|
+
return;
|
|
27
|
+
setHosts(discovered);
|
|
28
|
+
setError(undefined);
|
|
29
|
+
if (!background)
|
|
30
|
+
setLoading(false);
|
|
31
|
+
const next = await Promise.all(discovered.map(async (host) => {
|
|
32
|
+
if (!host.online)
|
|
33
|
+
return host;
|
|
34
|
+
try {
|
|
35
|
+
const sessions = await terminalRuntime.listRemoteSessions(host.deviceId);
|
|
36
|
+
return { ...host, sessions };
|
|
37
|
+
}
|
|
38
|
+
catch (cause) {
|
|
39
|
+
console.warn(`[terminal-runtime] could not refresh sessions from ${host.deviceName}`, cause);
|
|
40
|
+
return host;
|
|
41
|
+
}
|
|
42
|
+
}));
|
|
43
|
+
if (aliveRef.current)
|
|
44
|
+
setHosts(next);
|
|
45
|
+
}
|
|
46
|
+
catch (cause) {
|
|
47
|
+
if (!aliveRef.current || background)
|
|
48
|
+
return;
|
|
49
|
+
setError(cause instanceof Error ? cause.message : String(cause));
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
loadingRef.current = false;
|
|
53
|
+
if (aliveRef.current && !background)
|
|
54
|
+
setLoading(false);
|
|
55
|
+
}
|
|
56
|
+
}, [terminalRuntime]);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
aliveRef.current = true;
|
|
59
|
+
const initialLoad = window.setTimeout(() => void load(), 0);
|
|
60
|
+
const refresh = window.setInterval(() => void load(true), 2_000);
|
|
61
|
+
inputRef.current?.focus({ preventScroll: true });
|
|
62
|
+
return () => {
|
|
63
|
+
aliveRef.current = false;
|
|
64
|
+
window.clearTimeout(initialLoad);
|
|
65
|
+
window.clearInterval(refresh);
|
|
66
|
+
};
|
|
67
|
+
}, [load]);
|
|
68
|
+
const choices = useMemo(() => {
|
|
69
|
+
const normalized = query.trim().toLocaleLowerCase();
|
|
70
|
+
return hosts.flatMap((host) => host.sessions
|
|
71
|
+
.filter((session) => session.attachable && session.running)
|
|
72
|
+
.filter((session) => {
|
|
73
|
+
if (!normalized)
|
|
74
|
+
return true;
|
|
75
|
+
return [host.deviceName, session.title, session.cwdLabel ?? ""]
|
|
76
|
+
.join(" ")
|
|
77
|
+
.toLocaleLowerCase()
|
|
78
|
+
.includes(normalized);
|
|
79
|
+
})
|
|
80
|
+
.map((session) => ({ host, session })));
|
|
81
|
+
}, [hosts, query]);
|
|
82
|
+
const selectedIndex = Math.min(selected, Math.max(0, choices.length - 1));
|
|
83
|
+
const openChoice = async (choice) => {
|
|
84
|
+
if (opening)
|
|
85
|
+
return;
|
|
86
|
+
setOpening(`${choice.host.deviceId}:${choice.session.sessionId}`);
|
|
87
|
+
setError(undefined);
|
|
88
|
+
try {
|
|
89
|
+
await onOpen(choice);
|
|
90
|
+
onClose();
|
|
91
|
+
}
|
|
92
|
+
catch (cause) {
|
|
93
|
+
setError(cause instanceof Error ? cause.message : String(cause));
|
|
94
|
+
setOpening(undefined);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const onKeyDown = (event) => {
|
|
98
|
+
if (event.key === "Escape") {
|
|
99
|
+
onClose();
|
|
100
|
+
}
|
|
101
|
+
else if (event.key === "ArrowDown" && choices.length) {
|
|
102
|
+
setSelected((current) => (current + 1) % choices.length);
|
|
103
|
+
}
|
|
104
|
+
else if (event.key === "ArrowUp" && choices.length) {
|
|
105
|
+
setSelected((current) => (current - 1 + choices.length) % choices.length);
|
|
106
|
+
}
|
|
107
|
+
else if (event.key === "Enter" && choices[selectedIndex]) {
|
|
108
|
+
void openChoice(choices[selectedIndex]);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
event.preventDefault();
|
|
114
|
+
event.stopPropagation();
|
|
115
|
+
};
|
|
116
|
+
const dismiss = (event) => {
|
|
117
|
+
if (event.target === event.currentTarget)
|
|
118
|
+
onClose();
|
|
119
|
+
};
|
|
120
|
+
return (_jsx("div", { className: "remote-palette-backdrop", role: "presentation", onMouseDown: dismiss, children: _jsxs("section", { className: "remote-palette", role: "dialog", "aria-modal": "true", "aria-label": "Remote sessions", children: [_jsxs("div", { className: "remote-palette-search", children: [_jsx("span", { className: "remote-palette-glyph", "aria-hidden": "true", children: "\u2197" }), _jsx("input", { ref: inputRef, value: query, onChange: (event) => {
|
|
121
|
+
setQuery(event.currentTarget.value);
|
|
122
|
+
setSelected(0);
|
|
123
|
+
}, onKeyDown: onKeyDown, placeholder: "Remote sessions", "aria-label": "Filter remote sessions", spellCheck: false }), loading ? _jsx("span", { className: "remote-palette-spinner", "aria-label": "Scanning" }) : null] }), _jsxs("div", { className: "remote-palette-results", role: "listbox", children: [choices.map((choice, index) => {
|
|
124
|
+
const firstForHost = index === 0 || choices[index - 1]?.host.deviceId !== choice.host.deviceId;
|
|
125
|
+
const key = `${choice.host.deviceId}:${choice.session.sessionId}`;
|
|
126
|
+
return (_jsxs("div", { children: [firstForHost ? (_jsxs("div", { className: "remote-host-label", children: [_jsx("span", { className: `remote-host-dot${choice.host.online ? " is-online" : ""}` }), _jsx("span", { children: choice.host.deviceName })] })) : null, _jsxs("button", { type: "button", role: "option", "aria-selected": index === selectedIndex, className: `remote-session-choice${index === selectedIndex ? " is-selected" : ""}`, onMouseEnter: () => setSelected(index), onClick: () => void openChoice(choice), disabled: opening !== undefined, children: [_jsxs("span", { className: "remote-session-copy", children: [_jsx("span", { className: "remote-session-title", children: choice.session.title || "Terminal" }), _jsx("span", { className: "remote-session-cwd", children: choice.session.cwdLabel ?? "Remote shell" })] }), _jsx("span", { className: `remote-session-access${choice.session.readWrite ? " is-write" : ""}`, children: opening === key ? "Connecting…" : choice.session.readWrite ? "Interactive available" : "View only" })] })] }, key));
|
|
127
|
+
}), !loading && !error && choices.length === 0 ? (_jsxs("div", { className: "remote-palette-empty", children: [_jsx("span", { children: query
|
|
128
|
+
? "No matching sessions"
|
|
129
|
+
: hosts.some((host) => host.online)
|
|
130
|
+
? "Peers online — waiting for shared sessions…"
|
|
131
|
+
: hosts.length
|
|
132
|
+
? "Remote peers are offline"
|
|
133
|
+
: "No remote peers found" }), _jsx("button", { type: "button", onClick: () => void load(false), children: "Scan again" })] })) : null, error ? (_jsxs("div", { className: "remote-palette-error", role: "alert", children: [_jsx("span", { children: error }), _jsx("button", { type: "button", onClick: () => void load(false), children: "Retry" })] })) : null] }), _jsxs("footer", { className: "remote-palette-footer", children: [_jsx("span", { children: "\u2191\u2193 Navigate" }), _jsx("span", { children: "\u21B5 Open" }), _jsx("span", { children: "esc Close" })] })] }) }));
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=RemoteSessionPalette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteSessionPalette.js","sourceRoot":"","sources":["../../src/workspace/RemoteSessionPalette.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { type ComponentType } from "react";
|
|
2
|
+
import type { SessionSummary } from "@vibecook/ghosttea-protocol";
|
|
3
|
+
import { type TerminalMenuAction } from "../TerminalSurface.js";
|
|
4
|
+
import type { TerminalTheme } from "../renderers/types.js";
|
|
5
|
+
import { type SplitAxis } from "./pane-layout.js";
|
|
6
|
+
export declare function workspaceOwnsHotkey(active: boolean, root: Pick<HTMLElement, "contains"> | null, target: EventTarget | null, activeElement: Element | null): boolean;
|
|
7
|
+
export interface GhostteaWorkspacePlatform {
|
|
8
|
+
platform?: string;
|
|
9
|
+
defaultShell: string;
|
|
10
|
+
readClipboard: () => string | Promise<string>;
|
|
11
|
+
/** Report whether the active terminal pane currently has a copyable selection. */
|
|
12
|
+
setCanCopy?: (canCopy: boolean) => void;
|
|
13
|
+
showContextMenu: (canCopy: boolean) => void;
|
|
14
|
+
toggleFullscreen: () => void;
|
|
15
|
+
closeWindow: () => void;
|
|
16
|
+
/** Ghostty `new_window`. Defaults to `newTab` when omitted. */
|
|
17
|
+
newWindow?: (cwd?: string) => void;
|
|
18
|
+
/** Ghostty `quit`. Host should quit the app process. */
|
|
19
|
+
quit?: () => void;
|
|
20
|
+
/** Ghostty `close_all_windows`. */
|
|
21
|
+
closeAllWindows?: () => void;
|
|
22
|
+
/** Ghostty `open_config` — open config in the OS editor/folder. */
|
|
23
|
+
openConfig?: () => void;
|
|
24
|
+
/** Ghostty `reload_config` — re-read runtime configuration. */
|
|
25
|
+
reloadConfig?: () => void;
|
|
26
|
+
newTab?: (cwd?: string) => void;
|
|
27
|
+
selectTab?: (target: "previous" | "next" | "last" | number) => void;
|
|
28
|
+
closeTab?: () => void;
|
|
29
|
+
onMenuAction: (listener: (action: TerminalMenuAction) => void) => () => void;
|
|
30
|
+
}
|
|
31
|
+
export interface GhostteaWorkspacePane {
|
|
32
|
+
id: string;
|
|
33
|
+
session: SessionSummary;
|
|
34
|
+
}
|
|
35
|
+
export interface GhostteaWorkspaceContext {
|
|
36
|
+
activePaneId: string | undefined;
|
|
37
|
+
activeSession: SessionSummary | undefined;
|
|
38
|
+
panes: readonly GhostteaWorkspacePane[];
|
|
39
|
+
sessions: readonly SessionSummary[];
|
|
40
|
+
addSession: (session: SessionSummary, axis?: SplitAxis) => void;
|
|
41
|
+
activateSession: (sessionId: string) => void;
|
|
42
|
+
mountSession: (session: SessionSummary) => void;
|
|
43
|
+
placeSession: (session: SessionSummary) => void;
|
|
44
|
+
createSessionInActivePane: () => Promise<SessionSummary | undefined>;
|
|
45
|
+
splitActive: (axis?: SplitAxis) => Promise<SessionSummary | undefined>;
|
|
46
|
+
}
|
|
47
|
+
export interface GhostteaWorkspacePaneDecoration {
|
|
48
|
+
color?: string;
|
|
49
|
+
label?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface GhostteaWorkspaceProps {
|
|
52
|
+
platform: GhostteaWorkspacePlatform;
|
|
53
|
+
storageKey?: string;
|
|
54
|
+
sidebar?: ComponentType<{
|
|
55
|
+
workspace: GhostteaWorkspaceContext;
|
|
56
|
+
}>;
|
|
57
|
+
theme?: TerminalTheme;
|
|
58
|
+
decoratePane?: ((session: SessionSummary, paneId: string) => GhostteaWorkspacePaneDecoration | undefined) | undefined;
|
|
59
|
+
onActiveSessionChange?: (session: SessionSummary | undefined) => void;
|
|
60
|
+
createSplitSession?: (activeSession: SessionSummary, axis: SplitAxis) => Promise<SessionSummary>;
|
|
61
|
+
enableRemoteSessions?: boolean;
|
|
62
|
+
active?: boolean;
|
|
63
|
+
showTitlebar?: boolean;
|
|
64
|
+
claimExistingSessions?: boolean;
|
|
65
|
+
initialCwd?: string;
|
|
66
|
+
onSessionsChange?: (sessionIds: readonly string[]) => void;
|
|
67
|
+
}
|
|
68
|
+
export declare function GhostteaWorkspace({ platform, storageKey, sidebar, theme, decoratePane, onActiveSessionChange, createSplitSession, enableRemoteSessions, active, showTitlebar, claimExistingSessions, initialCwd, onSessionsChange, }: GhostteaWorkspaceProps): import("react").JSX.Element;
|
|
69
|
+
//# sourceMappingURL=Workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../src/workspace/Workspace.tsx"],"names":[],"mappings":"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"}
|