@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.
Files changed (152) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/TerminalSurface.d.ts +28 -0
  4. package/dist/TerminalSurface.d.ts.map +1 -0
  5. package/dist/TerminalSurface.js +614 -0
  6. package/dist/TerminalSurface.js.map +1 -0
  7. package/dist/bindings/action-route.d.ts +155 -0
  8. package/dist/bindings/action-route.d.ts.map +1 -0
  9. package/dist/bindings/action-route.js +196 -0
  10. package/dist/bindings/action-route.js.map +1 -0
  11. package/dist/bindings/fixtures/extensions.json +10 -0
  12. package/dist/bindings/fixtures/keybinds-linux-default.json +505 -0
  13. package/dist/bindings/fixtures/keybinds-macos-default.json +660 -0
  14. package/dist/bindings/ghostty-actions.d.ts +247 -0
  15. package/dist/bindings/ghostty-actions.d.ts.map +1 -0
  16. package/dist/bindings/ghostty-actions.js +431 -0
  17. package/dist/bindings/ghostty-actions.js.map +1 -0
  18. package/dist/bindings/ghostty-bindings.d.ts +88 -0
  19. package/dist/bindings/ghostty-bindings.d.ts.map +1 -0
  20. package/dist/bindings/ghostty-bindings.js +122 -0
  21. package/dist/bindings/ghostty-bindings.js.map +1 -0
  22. package/dist/bindings/ghostty-triggers.d.ts +47 -0
  23. package/dist/bindings/ghostty-triggers.d.ts.map +1 -0
  24. package/dist/bindings/ghostty-triggers.js +378 -0
  25. package/dist/bindings/ghostty-triggers.js.map +1 -0
  26. package/dist/bindings/index.d.ts +5 -0
  27. package/dist/bindings/index.d.ts.map +1 -0
  28. package/dist/bindings/index.js +5 -0
  29. package/dist/bindings/index.js.map +1 -0
  30. package/dist/catalog-budget.d.ts +22 -0
  31. package/dist/catalog-budget.d.ts.map +1 -0
  32. package/dist/catalog-budget.js +53 -0
  33. package/dist/catalog-budget.js.map +1 -0
  34. package/dist/cell-width.d.ts +3 -0
  35. package/dist/cell-width.d.ts.map +1 -0
  36. package/dist/cell-width.js +19 -0
  37. package/dist/cell-width.js.map +1 -0
  38. package/dist/context.d.ts +9 -0
  39. package/dist/context.d.ts.map +1 -0
  40. package/dist/context.js +13 -0
  41. package/dist/context.js.map +1 -0
  42. package/dist/cursor-invalidation.d.ts +3 -0
  43. package/dist/cursor-invalidation.d.ts.map +1 -0
  44. package/dist/cursor-invalidation.js +4 -0
  45. package/dist/cursor-invalidation.js.map +1 -0
  46. package/dist/frame-resync.d.ts +16 -0
  47. package/dist/frame-resync.d.ts.map +1 -0
  48. package/dist/frame-resync.js +164 -0
  49. package/dist/frame-resync.js.map +1 -0
  50. package/dist/frame-sequence.d.ts +14 -0
  51. package/dist/frame-sequence.d.ts.map +1 -0
  52. package/dist/frame-sequence.js +16 -0
  53. package/dist/frame-sequence.js.map +1 -0
  54. package/dist/index.d.ts +6 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +5 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/keyboard-input.d.ts +18 -0
  59. package/dist/keyboard-input.d.ts.map +1 -0
  60. package/dist/keyboard-input.js +101 -0
  61. package/dist/keyboard-input.js.map +1 -0
  62. package/dist/performance.d.ts +66 -0
  63. package/dist/performance.d.ts.map +1 -0
  64. package/dist/performance.js +21 -0
  65. package/dist/performance.js.map +1 -0
  66. package/dist/renderers/canvas-renderer.d.ts +12 -0
  67. package/dist/renderers/canvas-renderer.d.ts.map +1 -0
  68. package/dist/renderers/canvas-renderer.js +117 -0
  69. package/dist/renderers/canvas-renderer.js.map +1 -0
  70. package/dist/renderers/render-damage.d.ts +7 -0
  71. package/dist/renderers/render-damage.d.ts.map +1 -0
  72. package/dist/renderers/render-damage.js +16 -0
  73. package/dist/renderers/render-damage.js.map +1 -0
  74. package/dist/renderers/types.d.ts +65 -0
  75. package/dist/renderers/types.d.ts.map +1 -0
  76. package/dist/renderers/types.js +31 -0
  77. package/dist/renderers/types.js.map +1 -0
  78. package/dist/renderers/webgpu-renderer.d.ts +27 -0
  79. package/dist/renderers/webgpu-renderer.d.ts.map +1 -0
  80. package/dist/renderers/webgpu-renderer.js +1746 -0
  81. package/dist/renderers/webgpu-renderer.js.map +1 -0
  82. package/dist/runtime.d.ts +70 -0
  83. package/dist/runtime.d.ts.map +1 -0
  84. package/dist/runtime.js +1021 -0
  85. package/dist/runtime.js.map +1 -0
  86. package/dist/scroll-input.d.ts +6 -0
  87. package/dist/scroll-input.d.ts.map +1 -0
  88. package/dist/scroll-input.js +14 -0
  89. package/dist/scroll-input.js.map +1 -0
  90. package/dist/selection-input.d.ts +16 -0
  91. package/dist/selection-input.d.ts.map +1 -0
  92. package/dist/selection-input.js +67 -0
  93. package/dist/selection-input.js.map +1 -0
  94. package/dist/selection-text.d.ts +4 -0
  95. package/dist/selection-text.d.ts.map +1 -0
  96. package/dist/selection-text.js +28 -0
  97. package/dist/selection-text.js.map +1 -0
  98. package/dist/styles.css +75 -0
  99. package/dist/terminal-bindings.d.ts +22 -0
  100. package/dist/terminal-bindings.d.ts.map +1 -0
  101. package/dist/terminal-bindings.js +22 -0
  102. package/dist/terminal-bindings.js.map +1 -0
  103. package/dist/terminal-render.worker.d.ts +2 -0
  104. package/dist/terminal-render.worker.d.ts.map +1 -0
  105. package/dist/terminal-render.worker.js +3165 -0
  106. package/dist/terminal-render.worker.js.map +7 -0
  107. package/dist/worker-messages.d.ts +111 -0
  108. package/dist/worker-messages.d.ts.map +1 -0
  109. package/dist/worker-messages.js +2 -0
  110. package/dist/worker-messages.js.map +1 -0
  111. package/dist/workspace/RemoteSessionPalette.d.ts +12 -0
  112. package/dist/workspace/RemoteSessionPalette.d.ts.map +1 -0
  113. package/dist/workspace/RemoteSessionPalette.js +135 -0
  114. package/dist/workspace/RemoteSessionPalette.js.map +1 -0
  115. package/dist/workspace/Workspace.d.ts +69 -0
  116. package/dist/workspace/Workspace.d.ts.map +1 -0
  117. package/dist/workspace/Workspace.js +536 -0
  118. package/dist/workspace/Workspace.js.map +1 -0
  119. package/dist/workspace/hotkeys.d.ts +27 -0
  120. package/dist/workspace/hotkeys.d.ts.map +1 -0
  121. package/dist/workspace/hotkeys.js +29 -0
  122. package/dist/workspace/hotkeys.js.map +1 -0
  123. package/dist/workspace/index.d.ts +8 -0
  124. package/dist/workspace/index.d.ts.map +1 -0
  125. package/dist/workspace/index.js +8 -0
  126. package/dist/workspace/index.js.map +1 -0
  127. package/dist/workspace/pane-layout.d.ts +35 -0
  128. package/dist/workspace/pane-layout.d.ts.map +1 -0
  129. package/dist/workspace/pane-layout.js +139 -0
  130. package/dist/workspace/pane-layout.js.map +1 -0
  131. package/dist/workspace/pending-cache.d.ts +5 -0
  132. package/dist/workspace/pending-cache.d.ts.map +1 -0
  133. package/dist/workspace/pending-cache.js +22 -0
  134. package/dist/workspace/pending-cache.js.map +1 -0
  135. package/dist/workspace/session-scope.d.ts +3 -0
  136. package/dist/workspace/session-scope.d.ts.map +1 -0
  137. package/dist/workspace/session-scope.js +6 -0
  138. package/dist/workspace/session-scope.js.map +1 -0
  139. package/dist/workspace/themes.d.ts +18 -0
  140. package/dist/workspace/themes.d.ts.map +1 -0
  141. package/dist/workspace/themes.js +19 -0
  142. package/dist/workspace/themes.js.map +1 -0
  143. package/dist/workspace/workspace-model.d.ts +59 -0
  144. package/dist/workspace/workspace-model.d.ts.map +1 -0
  145. package/dist/workspace/workspace-model.js +257 -0
  146. package/dist/workspace/workspace-model.js.map +1 -0
  147. package/dist/workspace/workspace-tabs.d.ts +41 -0
  148. package/dist/workspace/workspace-tabs.d.ts.map +1 -0
  149. package/dist/workspace/workspace-tabs.js +133 -0
  150. package/dist/workspace/workspace-tabs.js.map +1 -0
  151. package/dist/workspace.css +453 -0
  152. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=worker-messages.js.map
@@ -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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"}