@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 @@
|
|
|
1
|
+
{"version":3,"file":"hotkeys.js","sourceRoot":"","sources":["../../src/workspace/hotkeys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,gCAAgC,GAEjC,MAAM,6BAA6B,CAAC;AAuBrC,MAAM,UAAU,kBAAkB,CAAC,OAAwB;IACzD,OAAO,sBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAA6B;IACrE,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,MAAqB;IACpE,OAAO,gCAAgC,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,QAAQ,GAAW,QAAQ;IAC5E,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE;QACpC,UAAU,EAAE,IAAI;QAChB,QAAQ;QACR,MAAM,EAAE,CAAC,WAAW,CAAC;KACtB,CAAC,CAAC;IACH,OAAO,MAAM,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { GhostteaWorkspace, type GhostteaWorkspaceContext, type GhostteaWorkspacePane, type GhostteaWorkspacePaneDecoration, type GhostteaWorkspacePlatform, type GhostteaWorkspaceProps, } from "./Workspace.js";
|
|
2
|
+
export { ghosttyHotkey, workspaceCommandId, workspaceHotkeyFromAction, workspaceHotkeyFromGhosttyAction, type GhosttyHotkey, type WorkspaceCommandId, type WorkspaceEffect, } from "./hotkeys.js";
|
|
3
|
+
export { formatGhosttyAction, parseGhosttyAction, parseGhostteaBindingAction, GHOSTTEA_BINDING_EXTENSIONS, GHOSTTY_LINUX_DEFAULT_BINDINGS, GHOSTTY_MACOS_DEFAULT_BINDINGS, defaultBindingsForPlatform, keyboardDefaultBindings, matchGhostteaBinding, matchGhosttyBinding, formatGhosttyTrigger, parseGhosttyTrigger, synthesizeKeyEvent, triggerMatchesEvent, resolveKeyEvent, routeBindingAction, routeConsumesInput, type GhostteaBindingAction, type GhostteaExtensionAction, type GhosttyAction, type GhostteaExtensionEntry, type GhosttyBindingEntry, type GhosttyTrigger, type KeyEventLike, type PlatformEffect, type RoutedAction, type TerminalEffect, } from "../bindings/index.js";
|
|
4
|
+
export { appendPane, containsPane, equalize, layoutId, leaves, mountSessionInPane, pane, persistedWorkspace, placeSessionInPane, removePane, replacePane, resizeForPane, restoreNode, updateSession, updateSplit, type PaneLeaf, type PaneNode, type PaneSplit, type SplitAxis, } from "./pane-layout.js";
|
|
5
|
+
export { WORKSPACE_SCHEMA_VERSION, applyWorkspaceAction, decodeWorkspaceDocument, restoreWorkspaceDocument, workspaceSessionIds, type WorkspaceAction, type WorkspaceDocumentV1, type WorkspaceFocusDirection, type WorkspaceNode, type WorkspacePaneNode, type WorkspaceSplitAxis, type WorkspaceSplitNode, type WorkspaceTransition, } from "./workspace-model.js";
|
|
6
|
+
export { WORKSPACE_TABS_SCHEMA_VERSION, applyWorkspaceTabsAction, decodeWorkspaceTabsDocument, restoreWorkspaceTabsDocument, type WorkspaceTabV1, type WorkspaceTabsAction, type WorkspaceTabsDocumentV1, type WorkspaceTabsTransition, } from "./workspace-tabs.js";
|
|
7
|
+
export { TERMINAL_THEMES } from "./themes.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,+BAA+B,EACpC,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,yBAAyB,EACzB,gCAAgC,EAChC,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,EAC9B,8BAA8B,EAC9B,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,kBAAkB,EAClB,IAAI,EACJ,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { GhostteaWorkspace, } from "./Workspace.js";
|
|
2
|
+
export { ghosttyHotkey, workspaceCommandId, workspaceHotkeyFromAction, workspaceHotkeyFromGhosttyAction, } from "./hotkeys.js";
|
|
3
|
+
export { formatGhosttyAction, parseGhosttyAction, parseGhostteaBindingAction, GHOSTTEA_BINDING_EXTENSIONS, GHOSTTY_LINUX_DEFAULT_BINDINGS, GHOSTTY_MACOS_DEFAULT_BINDINGS, defaultBindingsForPlatform, keyboardDefaultBindings, matchGhostteaBinding, matchGhosttyBinding, formatGhosttyTrigger, parseGhosttyTrigger, synthesizeKeyEvent, triggerMatchesEvent, resolveKeyEvent, routeBindingAction, routeConsumesInput, } from "../bindings/index.js";
|
|
4
|
+
export { appendPane, containsPane, equalize, layoutId, leaves, mountSessionInPane, pane, persistedWorkspace, placeSessionInPane, removePane, replacePane, resizeForPane, restoreNode, updateSession, updateSplit, } from "./pane-layout.js";
|
|
5
|
+
export { WORKSPACE_SCHEMA_VERSION, applyWorkspaceAction, decodeWorkspaceDocument, restoreWorkspaceDocument, workspaceSessionIds, } from "./workspace-model.js";
|
|
6
|
+
export { WORKSPACE_TABS_SCHEMA_VERSION, applyWorkspaceTabsAction, decodeWorkspaceTabsDocument, restoreWorkspaceTabsDocument, } from "./workspace-tabs.js";
|
|
7
|
+
export { TERMINAL_THEMES } from "./themes.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAMlB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,yBAAyB,EACzB,gCAAgC,GAIjC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,EAC9B,8BAA8B,EAC9B,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GAWnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,kBAAkB,EAClB,IAAI,EACJ,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,GAKZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,GASpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,2BAA2B,EAC3B,4BAA4B,GAK7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { SessionSummary } from "@vibecook/ghosttea-protocol";
|
|
2
|
+
import { type WorkspaceDocumentV1 } from "./workspace-model.js";
|
|
3
|
+
export type SplitAxis = "horizontal" | "vertical";
|
|
4
|
+
export interface PaneLeaf {
|
|
5
|
+
kind: "pane";
|
|
6
|
+
id: string;
|
|
7
|
+
session: SessionSummary;
|
|
8
|
+
}
|
|
9
|
+
export interface PaneSplit {
|
|
10
|
+
kind: "split";
|
|
11
|
+
id: string;
|
|
12
|
+
axis: SplitAxis;
|
|
13
|
+
ratio: number;
|
|
14
|
+
first: PaneNode;
|
|
15
|
+
second: PaneNode;
|
|
16
|
+
}
|
|
17
|
+
export type PaneNode = PaneLeaf | PaneSplit;
|
|
18
|
+
export declare const layoutId: (prefix: string) => string;
|
|
19
|
+
export declare const pane: (id: string, session: SessionSummary) => PaneLeaf;
|
|
20
|
+
export declare function restoreNode(value: unknown, sessions: Map<string, SessionSummary>): PaneNode | null;
|
|
21
|
+
export declare function appendPane(root: PaneNode, next: PaneLeaf): PaneNode;
|
|
22
|
+
export declare function leaves(node: PaneNode | undefined): PaneLeaf[];
|
|
23
|
+
export declare function replacePane(node: PaneNode, paneId: string, replacement: PaneNode): PaneNode;
|
|
24
|
+
export declare function insertPane(root: PaneNode | undefined, next: PaneLeaf, activePaneId: string | undefined, axis: SplitAxis, splitId: string): PaneNode;
|
|
25
|
+
export declare function mountSessionInPane(root: PaneNode, paneId: string, session: SessionSummary): PaneNode;
|
|
26
|
+
/** @deprecated Use mountSessionInPane; panes no longer own or move sessions. */
|
|
27
|
+
export declare const placeSessionInPane: typeof mountSessionInPane;
|
|
28
|
+
export declare function updateSession(node: PaneNode, session: SessionSummary): PaneNode;
|
|
29
|
+
export declare function removePane(node: PaneNode, paneId: string): PaneNode | null;
|
|
30
|
+
export declare function updateSplit(node: PaneNode, splitId: string, update: (split: PaneSplit) => PaneSplit): PaneNode;
|
|
31
|
+
export declare function equalize(node: PaneNode): PaneNode;
|
|
32
|
+
export declare function containsPane(node: PaneNode, paneId: string): boolean;
|
|
33
|
+
export declare function resizeForPane(node: PaneNode, paneId: string, axis: SplitAxis, delta: number): [PaneNode, boolean];
|
|
34
|
+
export declare function persistedWorkspace(root: PaneNode, activePaneId: string, zoomedPaneId: string | null): WorkspaceDocumentV1;
|
|
35
|
+
//# sourceMappingURL=pane-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pane-layout.d.ts","sourceRoot":"","sources":["../../src/workspace/pane-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAA4B,KAAK,mBAAmB,EAAsB,MAAM,sBAAsB,CAAC;AAE9G,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,UAAU,CAAC;AAElD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5C,eAAO,MAAM,QAAQ,WAAY,MAAM,KAAG,MAA4C,CAAC;AACvF,eAAO,MAAM,IAAI,OAAQ,MAAM,WAAW,cAAc,KAAG,QAA2C,CAAC;AAEvG,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,QAAQ,GAAG,IAAI,CAyBlG;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAEnE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,EAAE,CAG7D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAO3F;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,GACd,QAAQ,CAWV;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,QAAQ,CAIpG;AAED,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,2BAAqB,CAAC;AAErD,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,GAAG,QAAQ,CAG/E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAO1E;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,GAAG,QAAQ,CAQ9G;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAGjD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAIpE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAgBjH;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,mBAAmB,CAarB"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { WORKSPACE_SCHEMA_VERSION } from "./workspace-model.js";
|
|
2
|
+
export const layoutId = (prefix) => `${prefix}-${crypto.randomUUID()}`;
|
|
3
|
+
export const pane = (id, session) => ({ kind: "pane", id, session });
|
|
4
|
+
export function restoreNode(value, sessions) {
|
|
5
|
+
if (!value || typeof value !== "object")
|
|
6
|
+
return null;
|
|
7
|
+
const candidate = value;
|
|
8
|
+
if (candidate.kind === "pane" && typeof candidate.id === "string") {
|
|
9
|
+
const savedSession = candidate.session;
|
|
10
|
+
const sessionId = typeof candidate.sessionId === "string" ? candidate.sessionId : savedSession?.id;
|
|
11
|
+
if (typeof sessionId !== "string")
|
|
12
|
+
return null;
|
|
13
|
+
const session = sessions.get(sessionId);
|
|
14
|
+
return session ? pane(candidate.id, session) : null;
|
|
15
|
+
}
|
|
16
|
+
if (candidate.kind !== "split" ||
|
|
17
|
+
typeof candidate.id !== "string" ||
|
|
18
|
+
(candidate.axis !== "horizontal" && candidate.axis !== "vertical"))
|
|
19
|
+
return null;
|
|
20
|
+
const first = restoreNode(candidate.first, sessions);
|
|
21
|
+
const second = restoreNode(candidate.second, sessions);
|
|
22
|
+
if (!first)
|
|
23
|
+
return second;
|
|
24
|
+
if (!second)
|
|
25
|
+
return first;
|
|
26
|
+
const ratio = typeof candidate.ratio === "number" && Number.isFinite(candidate.ratio)
|
|
27
|
+
? Math.max(0.1, Math.min(0.9, candidate.ratio))
|
|
28
|
+
: 0.5;
|
|
29
|
+
return { kind: "split", id: candidate.id, axis: candidate.axis, ratio, first, second };
|
|
30
|
+
}
|
|
31
|
+
export function appendPane(root, next) {
|
|
32
|
+
return { kind: "split", id: layoutId("split"), axis: "horizontal", ratio: 0.5, first: root, second: next };
|
|
33
|
+
}
|
|
34
|
+
export function leaves(node) {
|
|
35
|
+
if (!node)
|
|
36
|
+
return [];
|
|
37
|
+
return node.kind === "pane" ? [node] : [...leaves(node.first), ...leaves(node.second)];
|
|
38
|
+
}
|
|
39
|
+
export function replacePane(node, paneId, replacement) {
|
|
40
|
+
if (node.kind === "pane")
|
|
41
|
+
return node.id === paneId ? replacement : node;
|
|
42
|
+
return {
|
|
43
|
+
...node,
|
|
44
|
+
first: replacePane(node.first, paneId, replacement),
|
|
45
|
+
second: replacePane(node.second, paneId, replacement),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export function insertPane(root, next, activePaneId, axis, splitId) {
|
|
49
|
+
if (!root)
|
|
50
|
+
return next;
|
|
51
|
+
const active = leaves(root).find((candidate) => candidate.id === activePaneId) ?? leaves(root)[0];
|
|
52
|
+
return replacePane(root, active.id, {
|
|
53
|
+
kind: "split",
|
|
54
|
+
id: splitId,
|
|
55
|
+
axis,
|
|
56
|
+
ratio: 0.5,
|
|
57
|
+
first: active,
|
|
58
|
+
second: next,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export function mountSessionInPane(root, paneId, session) {
|
|
62
|
+
const target = leaves(root).find((candidate) => candidate.id === paneId);
|
|
63
|
+
if (!target)
|
|
64
|
+
return root;
|
|
65
|
+
return replacePane(root, target.id, { ...target, session });
|
|
66
|
+
}
|
|
67
|
+
/** @deprecated Use mountSessionInPane; panes no longer own or move sessions. */
|
|
68
|
+
export const placeSessionInPane = mountSessionInPane;
|
|
69
|
+
export function updateSession(node, session) {
|
|
70
|
+
if (node.kind === "pane")
|
|
71
|
+
return node.session.id === session.id ? { ...node, session } : node;
|
|
72
|
+
return { ...node, first: updateSession(node.first, session), second: updateSession(node.second, session) };
|
|
73
|
+
}
|
|
74
|
+
export function removePane(node, paneId) {
|
|
75
|
+
if (node.kind === "pane")
|
|
76
|
+
return node.id === paneId ? null : node;
|
|
77
|
+
const first = removePane(node.first, paneId);
|
|
78
|
+
const second = removePane(node.second, paneId);
|
|
79
|
+
if (!first)
|
|
80
|
+
return second;
|
|
81
|
+
if (!second)
|
|
82
|
+
return first;
|
|
83
|
+
return { ...node, first, second };
|
|
84
|
+
}
|
|
85
|
+
export function updateSplit(node, splitId, update) {
|
|
86
|
+
if (node.kind === "pane")
|
|
87
|
+
return node;
|
|
88
|
+
if (node.id === splitId)
|
|
89
|
+
return update(node);
|
|
90
|
+
return {
|
|
91
|
+
...node,
|
|
92
|
+
first: updateSplit(node.first, splitId, update),
|
|
93
|
+
second: updateSplit(node.second, splitId, update),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function equalize(node) {
|
|
97
|
+
if (node.kind === "pane")
|
|
98
|
+
return node;
|
|
99
|
+
return { ...node, ratio: 0.5, first: equalize(node.first), second: equalize(node.second) };
|
|
100
|
+
}
|
|
101
|
+
export function containsPane(node, paneId) {
|
|
102
|
+
return node.kind === "pane"
|
|
103
|
+
? node.id === paneId
|
|
104
|
+
: containsPane(node.first, paneId) || containsPane(node.second, paneId);
|
|
105
|
+
}
|
|
106
|
+
export function resizeForPane(node, paneId, axis, delta) {
|
|
107
|
+
if (node.kind === "pane")
|
|
108
|
+
return [node, false];
|
|
109
|
+
const inFirst = containsPane(node.first, paneId);
|
|
110
|
+
const inSecond = containsPane(node.second, paneId);
|
|
111
|
+
if (inFirst) {
|
|
112
|
+
const [first, changed] = resizeForPane(node.first, paneId, axis, delta);
|
|
113
|
+
if (changed)
|
|
114
|
+
return [{ ...node, first }, true];
|
|
115
|
+
}
|
|
116
|
+
if (inSecond) {
|
|
117
|
+
const [second, changed] = resizeForPane(node.second, paneId, axis, delta);
|
|
118
|
+
if (changed)
|
|
119
|
+
return [{ ...node, second }, true];
|
|
120
|
+
}
|
|
121
|
+
if (node.axis === axis && (inFirst || inSecond)) {
|
|
122
|
+
return [{ ...node, ratio: Math.max(0.1, Math.min(0.9, node.ratio + delta)) }, true];
|
|
123
|
+
}
|
|
124
|
+
return [node, false];
|
|
125
|
+
}
|
|
126
|
+
export function persistedWorkspace(root, activePaneId, zoomedPaneId) {
|
|
127
|
+
const persistNode = (node) => node.kind === "pane"
|
|
128
|
+
? { kind: "pane", id: node.id, sessionId: node.session.id }
|
|
129
|
+
: {
|
|
130
|
+
kind: "split",
|
|
131
|
+
id: node.id,
|
|
132
|
+
axis: node.axis,
|
|
133
|
+
ratio: node.ratio,
|
|
134
|
+
first: persistNode(node.first),
|
|
135
|
+
second: persistNode(node.second),
|
|
136
|
+
};
|
|
137
|
+
return { version: WORKSPACE_SCHEMA_VERSION, root: persistNode(root), activePaneId, zoomedPaneId };
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=pane-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pane-layout.js","sourceRoot":"","sources":["../../src/workspace/pane-layout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAgD,MAAM,sBAAsB,CAAC;AAqB9G,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;AACvF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,OAAuB,EAAY,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAEvG,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,QAAqC;IAC/E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,SAAS,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG,SAAS,CAAC,OAAuC,CAAC;QACvE,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC;QACnG,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;IACD,IACE,SAAS,CAAC,IAAI,KAAK,OAAO;QAC1B,OAAO,SAAS,CAAC,EAAE,KAAK,QAAQ;QAChC,CAAC,SAAS,CAAC,IAAI,KAAK,YAAY,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC;QAElE,OAAO,IAAI,CAAC;IACd,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,KAAK,GACT,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC,CAAC,GAAG,CAAC;IACV,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAc,EAAE,IAAc;IACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAA0B;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,MAAc,EAAE,WAAqB;IAC/E,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,OAAO;QACL,GAAG,IAAI;QACP,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC;QACnD,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAA0B,EAC1B,IAAc,EACd,YAAgC,EAChC,IAAe,EACf,OAAe;IAEf,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,YAAY,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC;IACnG,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;QAClC,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,OAAO;QACX,IAAI;QACJ,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAc,EAAE,MAAc,EAAE,OAAuB;IACxF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,OAAuB;IACnE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9F,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAc,EAAE,MAAc;IACvD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,OAAe,EAAE,MAAuC;IAClG,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO;QACL,GAAG,IAAI;QACP,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;QAC/C,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAc;IACrC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAc,EAAE,MAAc;IACzD,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM;QACzB,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM;QACpB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,MAAc,EAAE,IAAe,EAAE,KAAa;IAC1F,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACxE,IAAI,OAAO;YAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1E,IAAI,OAAO;YAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAc,EACd,YAAoB,EACpB,YAA2B;IAE3B,MAAM,WAAW,GAAG,CAAC,IAAc,EAAiB,EAAE,CACpD,IAAI,CAAC,IAAI,KAAK,MAAM;QAClB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;QAC3D,CAAC,CAAC;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YAC9B,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;SACjC,CAAC;IACR,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AACpG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-cache.d.ts","sourceRoot":"","sources":["../../src/workspace/pending-cache.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAmB,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK;;IAG1D,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAiB3E;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export class PendingPromiseCache {
|
|
2
|
+
#entries = new WeakMap();
|
|
3
|
+
get(owner, key, create) {
|
|
4
|
+
let byKey = this.#entries.get(owner);
|
|
5
|
+
if (!byKey) {
|
|
6
|
+
byKey = new Map();
|
|
7
|
+
this.#entries.set(owner, byKey);
|
|
8
|
+
}
|
|
9
|
+
const pending = byKey.get(key);
|
|
10
|
+
if (pending)
|
|
11
|
+
return pending;
|
|
12
|
+
const created = create();
|
|
13
|
+
byKey.set(key, created);
|
|
14
|
+
const clear = () => {
|
|
15
|
+
if (byKey?.get(key) === created)
|
|
16
|
+
byKey.delete(key);
|
|
17
|
+
};
|
|
18
|
+
void created.then(clear, clear);
|
|
19
|
+
return created;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=pending-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-cache.js","sourceRoot":"","sources":["../../src/workspace/pending-cache.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAmB;IACrB,QAAQ,GAAG,IAAI,OAAO,EAAsC,CAAC;IAEtE,GAAG,CAAC,KAAY,EAAE,GAAW,EAAE,MAA4B;QACzD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAE5B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,IAAI,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO;gBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC;QACF,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { SessionSummary } from "@vibecook/ghosttea-protocol";
|
|
2
|
+
export declare function sessionsToClaim(sessions: readonly SessionSummary[], attachedSessionIds: ReadonlySet<string>, claimExistingSessions: boolean): SessionSummary[];
|
|
3
|
+
//# sourceMappingURL=session-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-scope.d.ts","sourceRoot":"","sources":["../../src/workspace/session-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,EACvC,qBAAqB,EAAE,OAAO,GAC7B,cAAc,EAAE,CAGlB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export function sessionsToClaim(sessions, attachedSessionIds, claimExistingSessions) {
|
|
2
|
+
if (!claimExistingSessions)
|
|
3
|
+
return [];
|
|
4
|
+
return sessions.filter((session) => !session.exited && !attachedSessionIds.has(session.id));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=session-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-scope.js","sourceRoot":"","sources":["../../src/workspace/session-scope.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAC7B,QAAmC,EACnC,kBAAuC,EACvC,qBAA8B;IAE9B,IAAI,CAAC,qBAAqB;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9F,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const TERMINAL_THEMES: {
|
|
2
|
+
readonly midnight: {
|
|
3
|
+
readonly background: readonly [number, number, number, 1];
|
|
4
|
+
readonly foreground: readonly [1, 1, 1, 1];
|
|
5
|
+
readonly cursor: readonly [1, 1, 1, 1];
|
|
6
|
+
readonly selection: readonly [1, 1, 1, 1];
|
|
7
|
+
readonly selectionForeground: readonly [number, number, number, 1];
|
|
8
|
+
};
|
|
9
|
+
readonly daylight: {
|
|
10
|
+
readonly background: readonly [0.925, 0.91, 0.862, 1];
|
|
11
|
+
readonly foreground: readonly [0.118, 0.133, 0.153, 1];
|
|
12
|
+
readonly cursor: readonly [0.11, 0.35, 0.62, 0.68];
|
|
13
|
+
readonly selection: readonly [0.18, 0.45, 0.72, 0.3];
|
|
14
|
+
readonly selectionForeground: readonly [0.118, 0.133, 0.153, 1];
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export type TerminalThemeName = keyof typeof TERMINAL_THEMES;
|
|
18
|
+
//# sourceMappingURL=themes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/workspace/themes.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;iBAIxB,UAAU;iBACV,UAAU;iBACV,MAAM;iBACN,SAAS;iBACT,mBAAmB;;;iBAGnB,UAAU;iBACV,UAAU;iBACV,MAAM;iBACN,SAAS;iBACT,mBAAmB;;CAE2B,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,eAAe,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const TERMINAL_THEMES = {
|
|
2
|
+
midnight: {
|
|
3
|
+
// Ghostty's built-in dark defaults (the active config does not override
|
|
4
|
+
// these). Keep the renderer and OSC 10/11/12 responses on one palette.
|
|
5
|
+
background: [40 / 255, 44 / 255, 52 / 255, 1],
|
|
6
|
+
foreground: [1, 1, 1, 1],
|
|
7
|
+
cursor: [1, 1, 1, 1],
|
|
8
|
+
selection: [1, 1, 1, 1],
|
|
9
|
+
selectionForeground: [40 / 255, 44 / 255, 52 / 255, 1],
|
|
10
|
+
},
|
|
11
|
+
daylight: {
|
|
12
|
+
background: [0.925, 0.91, 0.862, 1],
|
|
13
|
+
foreground: [0.118, 0.133, 0.153, 1],
|
|
14
|
+
cursor: [0.11, 0.35, 0.62, 0.68],
|
|
15
|
+
selection: [0.18, 0.45, 0.72, 0.3],
|
|
16
|
+
selectionForeground: [0.118, 0.133, 0.153, 1],
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=themes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/workspace/themes.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE;QACR,wEAAwE;QACxE,uEAAuE;QACvE,UAAU,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;QAC7C,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvB,mBAAmB,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;KACvD;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACnC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACpC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QAClC,mBAAmB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;KAC9C;CAC+C,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export declare const WORKSPACE_SCHEMA_VERSION: 1;
|
|
2
|
+
export type WorkspaceSplitAxis = "horizontal" | "vertical";
|
|
3
|
+
export type WorkspaceFocusDirection = "left" | "right" | "up" | "down";
|
|
4
|
+
export interface WorkspacePaneNode {
|
|
5
|
+
kind: "pane";
|
|
6
|
+
id: string;
|
|
7
|
+
sessionId: string;
|
|
8
|
+
}
|
|
9
|
+
export interface WorkspaceSplitNode {
|
|
10
|
+
kind: "split";
|
|
11
|
+
id: string;
|
|
12
|
+
axis: WorkspaceSplitAxis;
|
|
13
|
+
ratio: number;
|
|
14
|
+
first: WorkspaceNode;
|
|
15
|
+
second: WorkspaceNode;
|
|
16
|
+
}
|
|
17
|
+
export type WorkspaceNode = WorkspacePaneNode | WorkspaceSplitNode;
|
|
18
|
+
export interface WorkspaceDocumentV1 {
|
|
19
|
+
version: typeof WORKSPACE_SCHEMA_VERSION;
|
|
20
|
+
root: WorkspaceNode;
|
|
21
|
+
activePaneId: string;
|
|
22
|
+
zoomedPaneId: string | null;
|
|
23
|
+
}
|
|
24
|
+
export type WorkspaceAction = {
|
|
25
|
+
type: "split";
|
|
26
|
+
axis: WorkspaceSplitAxis;
|
|
27
|
+
paneId: string;
|
|
28
|
+
sessionId: string;
|
|
29
|
+
splitId: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: "activate";
|
|
32
|
+
paneId: string;
|
|
33
|
+
} | {
|
|
34
|
+
type: "focus-relative";
|
|
35
|
+
offset: -1 | 1;
|
|
36
|
+
} | {
|
|
37
|
+
type: "focus-direction";
|
|
38
|
+
direction: WorkspaceFocusDirection;
|
|
39
|
+
} | {
|
|
40
|
+
type: "resize";
|
|
41
|
+
axis: WorkspaceSplitAxis;
|
|
42
|
+
delta: number;
|
|
43
|
+
} | {
|
|
44
|
+
type: "equalize";
|
|
45
|
+
} | {
|
|
46
|
+
type: "toggle-zoom";
|
|
47
|
+
} | {
|
|
48
|
+
type: "close";
|
|
49
|
+
};
|
|
50
|
+
export interface WorkspaceTransition {
|
|
51
|
+
document: WorkspaceDocumentV1;
|
|
52
|
+
closedSessionId: string | null;
|
|
53
|
+
shouldCloseWindow: boolean;
|
|
54
|
+
}
|
|
55
|
+
export declare function workspaceSessionIds(document: WorkspaceDocumentV1): string[];
|
|
56
|
+
export declare function applyWorkspaceAction(document: WorkspaceDocumentV1, action: WorkspaceAction): WorkspaceTransition;
|
|
57
|
+
export declare function decodeWorkspaceDocument(value: unknown): WorkspaceDocumentV1 | null;
|
|
58
|
+
export declare function restoreWorkspaceDocument(document: WorkspaceDocumentV1, liveSessionIds: ReadonlySet<string>): WorkspaceDocumentV1 | null;
|
|
59
|
+
//# sourceMappingURL=workspace-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-model.d.ts","sourceRoot":"","sources":["../../src/workspace/workspace-model.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,CAAC;AAC3D,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,wBAAwB,CAAC;IACzC,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,uBAAuB,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAeD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAE3E;AAwGD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAwFhH;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAiClF;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,mBAAmB,GAAG,IAAI,CAe5B"}
|