@tangle-network/sandbox-ui 0.137.1 → 0.138.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/dist/{WorkflowGraph-BcuJ0kgt.js → WorkflowGraph-DXmu60At.js} +4 -7
- package/dist/assets.d.ts +0 -18
- package/dist/assets.js +9 -17
- package/dist/{auth-CWe17Hly.js → auth-BDpoZ_2f.js} +1 -2
- package/dist/auth.d.ts +1 -1
- package/dist/auth.js +1 -2
- package/dist/{chat-_aHUfqtH.js → chat-BYTVLZQW.js} +9 -15
- package/dist/chat.d.ts +1 -1
- package/dist/chat.js +1 -2
- package/dist/{connections-C5DxYxvz.js → connections-DymjzHe_.js} +1 -2
- package/dist/connections.d.ts +1 -1
- package/dist/connections.js +1 -2
- package/dist/connectors.d.ts +0 -10
- package/dist/connectors.js +5 -9
- package/dist/{dashboard-SFakZEtu.js → dashboard-ClKA3opr.js} +31 -55
- package/dist/dashboard.d.ts +3 -3
- package/dist/dashboard.js +3 -3
- package/dist/diff-view-A0O0Z_SR.js +287 -0
- package/dist/diff-view-DDHWtR6X.d.ts +21 -0
- package/dist/editor.js +1 -2
- package/dist/{embedded-app-view-CYb9hevq.js → embedded-app-view-DXsoPale.js} +5 -8
- package/dist/{embedded-app-view-B_vMTtJn.d.ts → embedded-app-view-Ta5GI4hx.d.ts} +0 -4
- package/dist/files.js +1 -2
- package/dist/globals.css +43 -0
- package/dist/hooks.d.ts +3 -7
- package/dist/hooks.js +4 -6
- package/dist/{index-DsU8ts9f.d.ts → index-BAEvGqrn.d.ts} +0 -4
- package/dist/{index-DvmZLMT1.d.ts → index-BbfWVtZq.d.ts} +0 -2
- package/dist/index-C5h5T0nb.d.ts +91 -0
- package/dist/{index-ByzdHyte.d.ts → index-CvtEhIpk.d.ts} +25 -52
- package/dist/{index-ClRHbsoX.d.ts → index-DLX35YAa.d.ts} +0 -2
- package/dist/{index-AVDzT8Jw.d.ts → index-DRDtTgb0.d.ts} +2 -54
- package/dist/{index-C61CTrhx.d.ts → index-F42BOxUM.d.ts} +15 -37
- package/dist/{index-QBCEflyf.d.ts → index-ucJHuuVZ.d.ts} +2 -8
- package/dist/{index-DGil6iqm.d.ts → index-y2OPUSoY.d.ts} +0 -4
- package/dist/index.d.ts +17 -16
- package/dist/index.js +24 -20
- package/dist/integrations.d.ts +0 -14
- package/dist/integrations.js +6 -11
- package/dist/markdown.js +1 -2
- package/dist/{model-brand-B57CV8Lg.d.ts → model-brand-ZwVS49Fq.d.ts} +0 -2
- package/dist/{model-brand-BSr9on8C.js → model-brand-bTcMjQtB.js} +34 -67
- package/dist/{motion-D4njYpys.js → motion-Bn7ESHrj.js} +1 -2
- package/dist/{node-output-fuk0NV0V.js → node-output-udnwhShN.js} +9 -16
- package/dist/openui.js +1 -2
- package/dist/{page-layout-2IRtfx51.js → page-layout-CuOpvZys.js} +5 -9
- package/dist/pages.d.ts +2 -14
- package/dist/pages.js +9 -15
- package/dist/{primitives-CLOVnjWz.js → primitives-CiwDp4-0.js} +4 -7
- package/dist/primitives.d.ts +1 -1
- package/dist/primitives.js +1 -2
- package/dist/{provider-logo-BGCziCbM.js → provider-logo-CPKRPHcS.js} +1 -2
- package/dist/{rolldown-runtime-BBjsoOtd.js → rolldown-runtime-782esTHO.js} +1 -2
- package/dist/run-CliTxkfw.js +397 -0
- package/dist/run.d.ts +2 -2
- package/dist/run.js +1 -2
- package/dist/sdk-hooks.d.ts +1 -1
- package/dist/sdk-hooks.js +1 -1
- package/dist/{shell-header-CTh3oV_e.js → shell-header-CwqDzC4I.js} +2 -3
- package/dist/{sidecar-DgH_vQ6m.d.ts → sidecar-CNP4zXop.d.ts} +0 -2
- package/dist/stores.d.ts +0 -2
- package/dist/stores.js +1 -2
- package/dist/styles.css +43 -0
- package/dist/{terminal-X6r5pjgv.js → terminal-nUCznZRj.js} +3 -5
- package/dist/terminal.d.ts +1 -3
- package/dist/terminal.js +1 -2
- package/dist/{tree-data-DtoCNNBJ.js → tree-data-YXtcK6Ld.js} +2 -4
- package/dist/types.d.ts +1 -1
- package/dist/{usage-chart-BjM8ShvX.d.ts → usage-chart-BFpdkqNq.d.ts} +0 -6
- package/dist/{use-pty-session-B5Q_i9RI.js → use-pty-session-BHVQlSs-.js} +1 -2
- package/dist/{use-pty-session-DbAYO5uH.d.ts → use-pty-session-DSgtQyYX.d.ts} +0 -2
- package/dist/{use-sidecar-auth-CCTJcrq7.d.ts → use-sidecar-auth-CPevSSEj.d.ts} +0 -4
- package/dist/{use-sidecar-auth-DkdcufOz.js → use-sidecar-auth-DpG0aWQ3.js} +3 -6
- package/dist/utils-BER_bdgE.js +1 -0
- package/dist/utils.js +1 -2
- package/dist/vault-tree.d.ts +1 -1
- package/dist/vault-tree.js +1 -2
- package/dist/workbench/diff.d.ts +2 -0
- package/dist/workbench/diff.js +1 -0
- package/dist/workbench/embedded-app.d.ts +1 -1
- package/dist/workbench/embedded-app.js +1 -2
- package/dist/workbench-B3JL1qbt.js +892 -0
- package/dist/workbench.d.ts +4 -3
- package/dist/workbench.js +4 -3
- package/dist/workflows.d.ts +1 -13
- package/dist/workflows.js +4 -5
- package/dist/{workspace-cjk0axyT.js → workspace-DRhi6S3o.js} +325 -141
- package/dist/workspace.d.ts +1 -1
- package/dist/workspace.js +2 -2
- package/package.json +36 -28
- package/dist/utils-DzWbktWG.js +0 -2
- package/dist/workbench-DPZ6LXqf.js +0 -8136
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { t as cn$1 } from "./utils-
|
|
2
|
-
import { r as ShellHeader } from "./shell-header-
|
|
3
|
-
import { t as MOTION_CONTROL } from "./motion-
|
|
4
|
-
import { i as VaultTree, n as filterFileNodes, t as fileTreeFromPaths } from "./tree-data-
|
|
1
|
+
import { t as cn$1 } from "./utils-BER_bdgE.js";
|
|
2
|
+
import { r as ShellHeader } from "./shell-header-CwqDzC4I.js";
|
|
3
|
+
import { t as MOTION_CONTROL } from "./motion-Bn7ESHrj.js";
|
|
4
|
+
import { i as VaultTree, n as filterFileNodes, t as fileTreeFromPaths } from "./tree-data-YXtcK6Ld.js";
|
|
5
5
|
import { ArtifactPane, ArtifactPane as ArtifactPane$1, Button, EmptyState, Input, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@tangle-network/ui/primitives";
|
|
6
6
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import { Markdown } from "@tangle-network/ui/markdown";
|
|
8
8
|
import { useCallback, useEffect, useId, useImperativeHandle, useMemo, useRef, useState } from "react";
|
|
9
9
|
import { createPortal } from "react-dom";
|
|
10
10
|
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
11
|
-
import { AlertCircle, AlertTriangle, ArrowLeft, Binary, Bot, Boxes, CheckCircle, ChevronDown, ChevronUp, FileCode2, FileText, FolderOpen, FolderTree, LayoutPanelTop, Loader2, MessageSquareText, PanelBottomClose, PanelBottomOpen, PanelLeftClose, PanelLeftOpen, PanelRightClose, PanelRightOpen, Plus, RefreshCw, Search, Settings, ShieldCheck, Sparkles, Terminal, TerminalSquare, Upload, Wifi, X, Zap } from "lucide-react";
|
|
11
|
+
import { AlertCircle, AlertTriangle, ArrowLeft, Binary, Bot, Boxes, CheckCircle, ChevronDown, ChevronUp, FileCode2, FileText, FolderOpen, FolderTree, LayoutPanelTop, Loader2, Maximize2, MessageSquareText, Minimize2, PanelBottomClose, PanelBottomOpen, PanelLeftClose, PanelLeftOpen, PanelRightClose, PanelRightOpen, Plus, RefreshCw, Search, Settings, ShieldCheck, Sparkles, Terminal, TerminalSquare, Upload, Wifi, X, Zap } from "lucide-react";
|
|
12
12
|
import { focusField, focusRing, focusRingInset } from "@tangle-network/ui/utils";
|
|
13
13
|
import { FileArtifactPane, FileTree, filterFileTree } from "@tangle-network/ui/files";
|
|
14
14
|
import { useNavbarSessions } from "@tangle-network/ui/stores";
|
|
15
15
|
import { ChatContainer } from "@tangle-network/ui/chat";
|
|
16
16
|
import { OpenUIArtifactRenderer } from "@tangle-network/ui/openui";
|
|
17
|
-
|
|
17
|
+
// src/workspace/workspace-surface.tsx
|
|
18
18
|
/**
|
|
19
19
|
* The raised panel every workspace page sits in: an even gutter of recessed
|
|
20
20
|
* backdrop on every side, then one rounded, bordered surface. `WorkspaceLayout`
|
|
@@ -75,8 +75,7 @@ function WorkspaceSurface({ title, headingLevel, actions, header, contentClassNa
|
|
|
75
75
|
})
|
|
76
76
|
});
|
|
77
77
|
}
|
|
78
|
-
|
|
79
|
-
//#region src/workspace/workspace-layout.tsx
|
|
78
|
+
// src/workspace/workspace-layout.tsx
|
|
80
79
|
/**
|
|
81
80
|
* WorkspaceLayout — reusable sandbox shell with desktop resizable panels and
|
|
82
81
|
* mobile overlay drawers.
|
|
@@ -693,8 +692,7 @@ function WorkspaceLayout({ left, leftHeader, center, centerHeader, centerFooter,
|
|
|
693
692
|
]
|
|
694
693
|
}) });
|
|
695
694
|
}
|
|
696
|
-
|
|
697
|
-
//#region src/workspace/directory-pane.tsx
|
|
695
|
+
// src/workspace/directory-pane.tsx
|
|
698
696
|
function countNodes(node) {
|
|
699
697
|
if (node.type === "file") return {
|
|
700
698
|
files: 1,
|
|
@@ -789,8 +787,7 @@ function DirectoryPane({ root, selectedPath, onSelect, onRefresh, onUpload, titl
|
|
|
789
787
|
}) : null
|
|
790
788
|
});
|
|
791
789
|
}
|
|
792
|
-
|
|
793
|
-
//#region src/workspace/status-banner.tsx
|
|
790
|
+
// src/workspace/status-banner.tsx
|
|
794
791
|
/**
|
|
795
792
|
* StatusBanner — inline notice for connection and provisioning states.
|
|
796
793
|
*/
|
|
@@ -863,8 +860,7 @@ function StatusBanner({ type, message, detail, onDismiss, className }) {
|
|
|
863
860
|
})]
|
|
864
861
|
});
|
|
865
862
|
}
|
|
866
|
-
|
|
867
|
-
//#region src/workspace/status-bar.tsx
|
|
863
|
+
// src/workspace/status-bar.tsx
|
|
868
864
|
/**
|
|
869
865
|
* StatusBar — compact bottom bar: connection state, file/artifact context
|
|
870
866
|
* badges, credits. The active model lives in the input box, not here.
|
|
@@ -929,8 +925,7 @@ function StatusBar({ credits, contextBadges = [], onRemoveBadge, status = "conne
|
|
|
929
925
|
]
|
|
930
926
|
});
|
|
931
927
|
}
|
|
932
|
-
|
|
933
|
-
//#region src/workspace/terminal-panel.tsx
|
|
928
|
+
// src/workspace/terminal-panel.tsx
|
|
934
929
|
/**
|
|
935
930
|
* Terminal — read-only terminal output panel.
|
|
936
931
|
*
|
|
@@ -1017,8 +1012,7 @@ function TerminalPanel({ lines, title = "Terminal", isCollapsed = false, onToggl
|
|
|
1017
1012
|
})]
|
|
1018
1013
|
});
|
|
1019
1014
|
}
|
|
1020
|
-
|
|
1021
|
-
//#region src/workspace/runtime-pane.tsx
|
|
1015
|
+
// src/workspace/runtime-pane.tsx
|
|
1022
1016
|
/**
|
|
1023
1017
|
* RuntimePane — shared operating surface for sandbox session state, terminal
|
|
1024
1018
|
* output, audit results, and runtime metadata.
|
|
@@ -1093,8 +1087,7 @@ function RuntimePane({ title = "Runtime", subtitle = "Session state, execution o
|
|
|
1093
1087
|
]
|
|
1094
1088
|
});
|
|
1095
1089
|
}
|
|
1096
|
-
|
|
1097
|
-
//#region src/lib/format-relative-age.ts
|
|
1090
|
+
// src/lib/format-relative-age.ts
|
|
1098
1091
|
const MINUTE = 6e4;
|
|
1099
1092
|
const HOUR = 60 * MINUTE;
|
|
1100
1093
|
const DAY = 24 * HOUR;
|
|
@@ -1120,8 +1113,7 @@ function formatRelativeAge(date, now = Date.now()) {
|
|
|
1120
1113
|
if (elapsed < YEAR) return `${Math.floor(elapsed / MONTH)}mo`;
|
|
1121
1114
|
return `${Math.floor(elapsed / YEAR)}y`;
|
|
1122
1115
|
}
|
|
1123
|
-
|
|
1124
|
-
//#region src/workspace/session-optimistic.ts
|
|
1116
|
+
// src/workspace/session-optimistic.ts
|
|
1125
1117
|
/**
|
|
1126
1118
|
* Optimistic session/thread list: reflect a just-created / renamed / deleted
|
|
1127
1119
|
* item in the sidebar INSTANTLY, before the server loader round-trips.
|
|
@@ -1199,8 +1191,7 @@ function useOptimisticSessionItems(items, options = {}) {
|
|
|
1199
1191
|
}
|
|
1200
1192
|
};
|
|
1201
1193
|
}
|
|
1202
|
-
|
|
1203
|
-
//#region src/workspace/session-sidebar.tsx
|
|
1194
|
+
// src/workspace/session-sidebar.tsx
|
|
1204
1195
|
const NO_CONTROLLER = {
|
|
1205
1196
|
add: () => {},
|
|
1206
1197
|
update: () => {},
|
|
@@ -1602,8 +1593,7 @@ function SessionSidebar({ title, subtitle, projectId = null, items, currentItemI
|
|
|
1602
1593
|
]
|
|
1603
1594
|
});
|
|
1604
1595
|
}
|
|
1605
|
-
|
|
1606
|
-
//#region src/workspace/shell-revalidation.ts
|
|
1596
|
+
// src/workspace/shell-revalidation.ts
|
|
1607
1597
|
/**
|
|
1608
1598
|
* Build a `shouldRevalidate` function for the shell route under `appPathPrefix`.
|
|
1609
1599
|
* Use this when the app mounts under a non-default prefix; otherwise prefer the
|
|
@@ -1629,8 +1619,7 @@ function createShellShouldRevalidate(options = {}) {
|
|
|
1629
1619
|
* For a non-`/app` prefix, use {@link createShellShouldRevalidate}.
|
|
1630
1620
|
*/
|
|
1631
1621
|
const shellShouldRevalidate = createShellShouldRevalidate();
|
|
1632
|
-
|
|
1633
|
-
//#region src/workspace/workspace-artifact-view.tsx
|
|
1622
|
+
// src/workspace/workspace-artifact-view.tsx
|
|
1634
1623
|
/** The shared technical renderer for workspace files and generated artifacts. */
|
|
1635
1624
|
function WorkspaceArtifactView({ artifact, hideTitleBlock }) {
|
|
1636
1625
|
switch (artifact.kind) {
|
|
@@ -1695,8 +1684,7 @@ function WorkspaceArtifactView({ artifact, hideTitleBlock }) {
|
|
|
1695
1684
|
});
|
|
1696
1685
|
}
|
|
1697
1686
|
}
|
|
1698
|
-
|
|
1699
|
-
//#region src/workspace/sandbox-workbench.tsx
|
|
1687
|
+
// src/workspace/sandbox-workbench.tsx
|
|
1700
1688
|
function getArtifactTabIcon(kind) {
|
|
1701
1689
|
switch (kind) {
|
|
1702
1690
|
case "file": return FileCode2;
|
|
@@ -1985,8 +1973,7 @@ function SandboxWorkbench({ title, subtitle, status, centerHeader: centerHeaderP
|
|
|
1985
1973
|
className: cn$1("p-2", className)
|
|
1986
1974
|
});
|
|
1987
1975
|
}
|
|
1988
|
-
|
|
1989
|
-
//#region src/workspace/task-board.tsx
|
|
1976
|
+
// src/workspace/task-board.tsx
|
|
1990
1977
|
const INTERACTIVE_SELECTOR = "button, a, input, textarea, select, [role=\"button\"], [role=\"link\"]";
|
|
1991
1978
|
function TaskBoard({ items, columns, className, onMoveItem, onClickItem, renderItemMeta, renderColumnAction, renderBadge, columnEmptyState, header, renderColumnBody, renderItemWrapper }) {
|
|
1992
1979
|
const grouped = useMemo(() => {
|
|
@@ -2071,8 +2058,7 @@ function TaskBoard({ items, columns, className, onMoveItem, onClickItem, renderI
|
|
|
2071
2058
|
})]
|
|
2072
2059
|
});
|
|
2073
2060
|
}
|
|
2074
|
-
|
|
2075
|
-
//#region src/workspace/calendar-view.tsx
|
|
2061
|
+
// src/workspace/calendar-view.tsx
|
|
2076
2062
|
function toDateKey(d) {
|
|
2077
2063
|
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
|
|
2078
2064
|
}
|
|
@@ -2305,8 +2291,7 @@ function CalendarView({ events, className, month: controlledMonth, year: control
|
|
|
2305
2291
|
})]
|
|
2306
2292
|
});
|
|
2307
2293
|
}
|
|
2308
|
-
|
|
2309
|
-
//#region src/workspace/approval-queue.tsx
|
|
2294
|
+
// src/workspace/approval-queue.tsx
|
|
2310
2295
|
/**
|
|
2311
2296
|
* ApprovalQueue — review queue for agent-proposed actions.
|
|
2312
2297
|
*
|
|
@@ -2514,8 +2499,79 @@ function ApprovalQueue({ items, className, onApprove, onReject, renderItemDetail
|
|
|
2514
2499
|
})
|
|
2515
2500
|
});
|
|
2516
2501
|
}
|
|
2517
|
-
|
|
2518
|
-
|
|
2502
|
+
// src/workspace/workspace-files-pane.tsx
|
|
2503
|
+
const SPLIT_MIN_PX = 640;
|
|
2504
|
+
const SIDEBAR_DEFAULT_PX = 280;
|
|
2505
|
+
const SIDEBAR_MIN_PX = 200;
|
|
2506
|
+
/** The sidebar's width, clamped to 200 px .. half the pane, remembered per viewer under `expansionKey` when given. */
|
|
2507
|
+
function useSidebarWidth(key, containerWidth) {
|
|
2508
|
+
const storageKey = key ? `${key}:sidebar-width` : void 0;
|
|
2509
|
+
const [stored, setStored] = useState(() => {
|
|
2510
|
+
if (!storageKey) return SIDEBAR_DEFAULT_PX;
|
|
2511
|
+
try {
|
|
2512
|
+
const value = Number(globalThis.localStorage?.getItem(storageKey));
|
|
2513
|
+
return Number.isFinite(value) && value > 0 ? value : SIDEBAR_DEFAULT_PX;
|
|
2514
|
+
} catch {
|
|
2515
|
+
return SIDEBAR_DEFAULT_PX;
|
|
2516
|
+
}
|
|
2517
|
+
});
|
|
2518
|
+
const max = Math.max(SIDEBAR_MIN_PX, containerWidth > 0 ? Math.floor(containerWidth / 2) : 560);
|
|
2519
|
+
const width = Math.min(max, Math.max(SIDEBAR_MIN_PX, stored));
|
|
2520
|
+
const save = (px) => {
|
|
2521
|
+
const next = Math.min(max, Math.max(SIDEBAR_MIN_PX, Math.round(px)));
|
|
2522
|
+
setStored(next);
|
|
2523
|
+
if (storageKey) try {
|
|
2524
|
+
globalThis.localStorage?.setItem(storageKey, String(next));
|
|
2525
|
+
} catch {}
|
|
2526
|
+
};
|
|
2527
|
+
return {
|
|
2528
|
+
width,
|
|
2529
|
+
min: SIDEBAR_MIN_PX,
|
|
2530
|
+
max,
|
|
2531
|
+
set: save,
|
|
2532
|
+
reset: () => save(SIDEBAR_DEFAULT_PX)
|
|
2533
|
+
};
|
|
2534
|
+
}
|
|
2535
|
+
/** Drag, arrow keys (Shift for larger steps), Home/End, or double-click to reset the sidebar width. */
|
|
2536
|
+
function SidebarResizer({ sidebar, label }) {
|
|
2537
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2538
|
+
role: "separator",
|
|
2539
|
+
"aria-orientation": "vertical",
|
|
2540
|
+
"aria-label": `Resize ${label.toLowerCase()} sidebar`,
|
|
2541
|
+
"aria-valuenow": sidebar.width,
|
|
2542
|
+
"aria-valuemin": sidebar.min,
|
|
2543
|
+
"aria-valuemax": sidebar.max,
|
|
2544
|
+
tabIndex: 0,
|
|
2545
|
+
onDoubleClick: sidebar.reset,
|
|
2546
|
+
onKeyDown: (event) => {
|
|
2547
|
+
const step = event.shiftKey ? 64 : 16;
|
|
2548
|
+
if (event.key === "ArrowLeft") sidebar.set(sidebar.width - step);
|
|
2549
|
+
else if (event.key === "ArrowRight") sidebar.set(sidebar.width + step);
|
|
2550
|
+
else if (event.key === "Home") sidebar.set(sidebar.min);
|
|
2551
|
+
else if (event.key === "End") sidebar.set(sidebar.max);
|
|
2552
|
+
else return;
|
|
2553
|
+
event.preventDefault();
|
|
2554
|
+
},
|
|
2555
|
+
onPointerDown: (event) => {
|
|
2556
|
+
const handle = event.currentTarget;
|
|
2557
|
+
const startX = event.clientX;
|
|
2558
|
+
const startWidth = sidebar.width;
|
|
2559
|
+
handle.setPointerCapture(event.pointerId);
|
|
2560
|
+
const move = (next) => sidebar.set(startWidth + next.clientX - startX);
|
|
2561
|
+
const up = () => {
|
|
2562
|
+
handle.removeEventListener("pointermove", move);
|
|
2563
|
+
handle.removeEventListener("pointerup", up);
|
|
2564
|
+
};
|
|
2565
|
+
handle.addEventListener("pointermove", move);
|
|
2566
|
+
handle.addEventListener("pointerup", up);
|
|
2567
|
+
},
|
|
2568
|
+
className: "group relative w-1.5 shrink-0 cursor-col-resize touch-none outline-none",
|
|
2569
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
2570
|
+
"aria-hidden": true,
|
|
2571
|
+
className: "absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-border transition-colors group-hover:bg-primary group-focus-visible:bg-primary"
|
|
2572
|
+
})
|
|
2573
|
+
});
|
|
2574
|
+
}
|
|
2519
2575
|
function indexNodes(nodes) {
|
|
2520
2576
|
const index = /* @__PURE__ */ new Map();
|
|
2521
2577
|
const visit = (node) => {
|
|
@@ -2536,8 +2592,30 @@ function activeElementWithin(element) {
|
|
|
2536
2592
|
* The tree sits in its own surface: folders start collapsed, expansion is
|
|
2537
2593
|
* remembered under `expansionKey`, and a preview replaces the tree until Back.
|
|
2538
2594
|
*/
|
|
2539
|
-
function WorkspaceFilesPane({ root, paths, selectedPath, onSelect, preview, onBack, emptyState, expansionKey, search = true, label = "Files", headerActions, surface = "card", className, style }) {
|
|
2595
|
+
function WorkspaceFilesPane({ root, paths, selectedPath, onSelect, preview, onBack, emptyState, expansionKey, search = true, label = "Files", headerActions, surface = "card", layout = "split", tabs = true, expandable = true, className, style }) {
|
|
2540
2596
|
const plain = surface === "plain";
|
|
2597
|
+
const rootRef = useRef(null);
|
|
2598
|
+
const [containerWidth, setContainerWidth] = useState(0);
|
|
2599
|
+
useEffect(() => {
|
|
2600
|
+
const element = rootRef.current;
|
|
2601
|
+
if (!element || typeof ResizeObserver === "undefined") return;
|
|
2602
|
+
const observer = new ResizeObserver(([entry]) => setContainerWidth(entry.contentRect.width));
|
|
2603
|
+
observer.observe(element);
|
|
2604
|
+
return () => observer.disconnect();
|
|
2605
|
+
}, []);
|
|
2606
|
+
const split = layout === "split" && (containerWidth === 0 || containerWidth >= SPLIT_MIN_PX);
|
|
2607
|
+
const sidebar = useSidebarWidth(expansionKey, containerWidth);
|
|
2608
|
+
const [expanded, setExpanded] = useState(false);
|
|
2609
|
+
useEffect(() => {
|
|
2610
|
+
if (!expanded) return;
|
|
2611
|
+
const keydown = (event) => {
|
|
2612
|
+
if (event.key !== "Escape" || event.defaultPrevented) return;
|
|
2613
|
+
event.preventDefault();
|
|
2614
|
+
setExpanded(false);
|
|
2615
|
+
};
|
|
2616
|
+
document.addEventListener("keydown", keydown);
|
|
2617
|
+
return () => document.removeEventListener("keydown", keydown);
|
|
2618
|
+
}, [expanded]);
|
|
2541
2619
|
const nodes = useMemo(() => root ? root.path ? [root] : root.children ?? [] : fileTreeFromPaths(paths ?? []), [root, paths]);
|
|
2542
2620
|
const index = useMemo(() => indexNodes(nodes), [nodes]);
|
|
2543
2621
|
const [query, setQuery] = useState("");
|
|
@@ -2564,6 +2642,10 @@ function WorkspaceFilesPane({ root, paths, selectedPath, onSelect, preview, onBa
|
|
|
2564
2642
|
wasPreviewRef.current = hasPreview;
|
|
2565
2643
|
return;
|
|
2566
2644
|
}
|
|
2645
|
+
if (split) {
|
|
2646
|
+
wasPreviewRef.current = hasPreview;
|
|
2647
|
+
return;
|
|
2648
|
+
}
|
|
2567
2649
|
if (hasPreview && !wasPreviewRef.current && openedByReaderRef.current) backRef.current?.focus({ preventScroll: true });
|
|
2568
2650
|
openedByReaderRef.current = false;
|
|
2569
2651
|
if (!hasPreview && wasPreviewRef.current) {
|
|
@@ -2572,120 +2654,222 @@ function WorkspaceFilesPane({ root, paths, selectedPath, onSelect, preview, onBa
|
|
|
2572
2654
|
else treeRef.current?.focus({ preventScroll: true });
|
|
2573
2655
|
}
|
|
2574
2656
|
wasPreviewRef.current = hasPreview;
|
|
2575
|
-
}, [hasPreview]);
|
|
2657
|
+
}, [hasPreview, split]);
|
|
2576
2658
|
return /* @__PURE__ */ jsxs("div", {
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
"
|
|
2588
|
-
"
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
children: headerActions
|
|
2598
|
-
})] }) : /* @__PURE__ */ jsxs("div", {
|
|
2599
|
-
className: "flex shrink-0 items-center gap-2 px-3 pb-2 pt-3",
|
|
2600
|
-
children: [/* @__PURE__ */ jsx("h2", {
|
|
2659
|
+
ref: rootRef,
|
|
2660
|
+
"data-workspace-files-layout": split ? "split" : "stack",
|
|
2661
|
+
"data-expanded": expanded ? "" : void 0,
|
|
2662
|
+
className: cn$1("flex h-full min-h-0 min-w-0", split ? "flex-row" : "flex-col", expanded && "fixed inset-0 z-50 h-auto bg-background p-2", className),
|
|
2663
|
+
style: expanded ? void 0 : style,
|
|
2664
|
+
children: [
|
|
2665
|
+
/* @__PURE__ */ jsx("div", {
|
|
2666
|
+
ref: treeRef,
|
|
2667
|
+
hidden: !split && hasPreview,
|
|
2668
|
+
tabIndex: -1,
|
|
2669
|
+
role: "region",
|
|
2670
|
+
"aria-label": "Workspace files",
|
|
2671
|
+
style: split ? { width: sidebar.width } : void 0,
|
|
2672
|
+
className: cn$1("flex min-h-0 flex-col", split ? "shrink-0" : "flex-1", !plain && "p-2", !split && hasPreview && "hidden"),
|
|
2673
|
+
children: /* @__PURE__ */ jsxs("section", {
|
|
2674
|
+
"aria-labelledby": headingId,
|
|
2675
|
+
"data-workspace-files-surface": surface,
|
|
2676
|
+
className: cn$1("flex min-h-0 flex-1 flex-col overflow-hidden", !plain && "rounded-xl border border-border bg-card text-card-foreground shadow-sm"),
|
|
2677
|
+
children: [
|
|
2678
|
+
plain ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("h2", {
|
|
2601
2679
|
id: headingId,
|
|
2602
|
-
className: "
|
|
2680
|
+
className: "sr-only",
|
|
2603
2681
|
children: label
|
|
2604
2682
|
}), headerActions && /* @__PURE__ */ jsx("div", {
|
|
2605
|
-
className: "flex shrink-0 items-center gap-1",
|
|
2683
|
+
className: "flex shrink-0 items-center justify-end gap-1 px-3 pt-3",
|
|
2606
2684
|
children: headerActions
|
|
2607
|
-
})]
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2685
|
+
})] }) : /* @__PURE__ */ jsxs("div", {
|
|
2686
|
+
className: "flex shrink-0 items-center gap-2 px-3 pb-2 pt-3",
|
|
2687
|
+
children: [/* @__PURE__ */ jsx("h2", {
|
|
2688
|
+
id: headingId,
|
|
2689
|
+
className: "min-w-0 flex-1 truncate text-sm font-semibold text-foreground",
|
|
2690
|
+
children: label
|
|
2691
|
+
}), headerActions && /* @__PURE__ */ jsx("div", {
|
|
2692
|
+
className: "flex shrink-0 items-center gap-1",
|
|
2693
|
+
children: headerActions
|
|
2694
|
+
})]
|
|
2695
|
+
}),
|
|
2696
|
+
search && !isEmpty && /* @__PURE__ */ jsx("div", {
|
|
2697
|
+
className: cn$1("shrink-0 px-3 pb-2", plain && "pt-3"),
|
|
2698
|
+
children: /* @__PURE__ */ jsx(Input, {
|
|
2699
|
+
type: "search",
|
|
2700
|
+
size: "sm",
|
|
2701
|
+
value: query,
|
|
2702
|
+
onChange: (event) => setQuery(event.target.value),
|
|
2703
|
+
placeholder: `Search ${label.toLowerCase()}…`,
|
|
2704
|
+
"aria-label": `Search ${label.toLowerCase()}`
|
|
2705
|
+
})
|
|
2706
|
+
}),
|
|
2707
|
+
/* @__PURE__ */ jsx("div", {
|
|
2708
|
+
className: cn$1("min-h-0 flex-1 overflow-y-auto px-1.5 py-1.5", (!plain || search && !isEmpty) && "border-t border-border"),
|
|
2709
|
+
children: isEmpty ? emptyState !== void 0 ? emptyState : /* @__PURE__ */ jsx(EmptyState, {
|
|
2710
|
+
icon: /* @__PURE__ */ jsx(FolderOpen, { className: "h-6 w-6" }),
|
|
2711
|
+
title: "No files yet"
|
|
2712
|
+
}) : visible.length === 0 ? /* @__PURE__ */ jsxs("div", {
|
|
2713
|
+
className: "flex flex-col items-center gap-3 p-6 text-center",
|
|
2714
|
+
children: [/* @__PURE__ */ jsxs("p", {
|
|
2715
|
+
className: "max-w-xs break-words text-xs text-muted-foreground",
|
|
2716
|
+
children: [
|
|
2717
|
+
"No files match “",
|
|
2718
|
+
query.trim(),
|
|
2719
|
+
"”."
|
|
2720
|
+
]
|
|
2721
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
2722
|
+
type: "button",
|
|
2723
|
+
variant: "outline",
|
|
2724
|
+
size: "sm",
|
|
2725
|
+
onClick: () => setQuery(""),
|
|
2726
|
+
children: "Clear search"
|
|
2727
|
+
})]
|
|
2728
|
+
}) : /* @__PURE__ */ jsx(VaultTree, {
|
|
2729
|
+
root: treeRoot,
|
|
2730
|
+
selectedPath: normalizedSelection,
|
|
2731
|
+
onSelect: (path) => {
|
|
2732
|
+
if (treeRef.current) returnFocusRef.current = activeElementWithin(treeRef.current);
|
|
2733
|
+
openedByReaderRef.current = true;
|
|
2734
|
+
onSelect?.(path, index.get(path));
|
|
2735
|
+
},
|
|
2736
|
+
onFolderSelect: (path) => onSelect?.(`${path}/`, index.get(path)),
|
|
2737
|
+
storageKey: expansionKey,
|
|
2738
|
+
expandAll: query.trim().length > 0,
|
|
2739
|
+
label
|
|
2740
|
+
})
|
|
2618
2741
|
})
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2742
|
+
]
|
|
2743
|
+
})
|
|
2744
|
+
}),
|
|
2745
|
+
split && /* @__PURE__ */ jsx(SidebarResizer, {
|
|
2746
|
+
sidebar,
|
|
2747
|
+
label
|
|
2748
|
+
}),
|
|
2749
|
+
(split || preview) && /* @__PURE__ */ jsx(FilesViewer, {
|
|
2750
|
+
preview,
|
|
2751
|
+
split,
|
|
2752
|
+
tabs: split && tabs,
|
|
2753
|
+
empty: isEmpty,
|
|
2754
|
+
backRef,
|
|
2755
|
+
onBack,
|
|
2756
|
+
onOpen: (path) => onSelect?.(path, index.get(path)),
|
|
2757
|
+
expand: expandable ? {
|
|
2758
|
+
expanded,
|
|
2759
|
+
toggle: () => setExpanded((value) => !value)
|
|
2760
|
+
} : void 0
|
|
2761
|
+
})
|
|
2762
|
+
]
|
|
2763
|
+
});
|
|
2764
|
+
}
|
|
2765
|
+
const baseName = (path) => path.replace(/\/+$/, "").split("/").pop() || path;
|
|
2766
|
+
/** The editor side of the pane: open-file tabs, a File | Diff toggle, the full-screen control, and the open file. */
|
|
2767
|
+
function FilesViewer({ preview, split, tabs, empty, backRef, onBack, onOpen, expand }) {
|
|
2768
|
+
const path = preview?.path;
|
|
2769
|
+
const [open, setOpen] = useState(() => path ? [path] : []);
|
|
2770
|
+
useEffect(() => {
|
|
2771
|
+
if (path) setOpen((paths) => paths.includes(path) ? paths : [...paths, path]);
|
|
2772
|
+
}, [path]);
|
|
2773
|
+
const [mode, setMode] = useState("file");
|
|
2774
|
+
useEffect(() => setMode("file"), [path]);
|
|
2775
|
+
const close = (target) => {
|
|
2776
|
+
const at = open.indexOf(target);
|
|
2777
|
+
const rest = open.filter((entry) => entry !== target);
|
|
2778
|
+
setOpen(rest);
|
|
2779
|
+
if (target !== path) return;
|
|
2780
|
+
const neighbour = rest[Math.min(at, rest.length - 1)];
|
|
2781
|
+
if (neighbour) onOpen(neighbour);
|
|
2782
|
+
else onBack?.();
|
|
2783
|
+
};
|
|
2784
|
+
const compare = preview?.compare;
|
|
2785
|
+
const ExpandIcon = expand?.expanded ? Minimize2 : Maximize2;
|
|
2786
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
2787
|
+
className: "flex min-h-0 min-w-0 flex-1 flex-col",
|
|
2788
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
2789
|
+
className: "sticky top-0 z-10 flex min-h-10 shrink-0 items-center gap-2 border-b border-border bg-background px-2",
|
|
2790
|
+
children: [
|
|
2791
|
+
onBack && !split && preview && /* @__PURE__ */ jsxs(Button, {
|
|
2792
|
+
ref: backRef,
|
|
2793
|
+
type: "button",
|
|
2794
|
+
variant: "bare",
|
|
2795
|
+
onClick: onBack,
|
|
2796
|
+
className: "inline-flex shrink-0 items-center gap-1 rounded-md px-1 py-1 text-sm text-muted-foreground hover:text-foreground",
|
|
2797
|
+
children: [/* @__PURE__ */ jsx(ArrowLeft, {
|
|
2798
|
+
"aria-hidden": "true",
|
|
2799
|
+
className: "h-3.5 w-3.5"
|
|
2800
|
+
}), "Back to files"]
|
|
2801
|
+
}),
|
|
2802
|
+
tabs && open.length > 0 ? /* @__PURE__ */ jsx("div", {
|
|
2803
|
+
role: "tablist",
|
|
2804
|
+
"aria-label": "Open files",
|
|
2805
|
+
className: "flex min-w-0 flex-1 items-end self-stretch overflow-x-auto",
|
|
2806
|
+
children: open.map((entry) => {
|
|
2807
|
+
const selected = entry === path;
|
|
2808
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
2809
|
+
title: entry,
|
|
2810
|
+
className: cn$1("group flex h-full shrink-0 items-center border-b-2 text-sm", selected ? "border-primary text-foreground" : "border-transparent text-muted-foreground hover:text-foreground"),
|
|
2811
|
+
children: [/* @__PURE__ */ jsx("button", {
|
|
2635
2812
|
type: "button",
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
onClick: () =>
|
|
2639
|
-
|
|
2813
|
+
role: "tab",
|
|
2814
|
+
"aria-selected": selected,
|
|
2815
|
+
onClick: () => onOpen(entry),
|
|
2816
|
+
className: "max-w-48 truncate py-2 pl-3 pr-1 outline-none focus-visible:underline",
|
|
2817
|
+
children: baseName(entry)
|
|
2818
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
2819
|
+
type: "button",
|
|
2820
|
+
"aria-label": `Close ${baseName(entry)}`,
|
|
2821
|
+
onClick: () => close(entry),
|
|
2822
|
+
className: cn$1("mr-1 rounded p-1 hover:bg-muted", !selected && "opacity-0 group-hover:opacity-100 focus-visible:opacity-100"),
|
|
2823
|
+
children: /* @__PURE__ */ jsx(X, {
|
|
2824
|
+
"aria-hidden": true,
|
|
2825
|
+
className: "h-3 w-3"
|
|
2826
|
+
})
|
|
2640
2827
|
})]
|
|
2641
|
-
}
|
|
2642
|
-
root: treeRoot,
|
|
2643
|
-
selectedPath: normalizedSelection,
|
|
2644
|
-
onSelect: (path) => {
|
|
2645
|
-
if (treeRef.current) returnFocusRef.current = activeElementWithin(treeRef.current);
|
|
2646
|
-
openedByReaderRef.current = true;
|
|
2647
|
-
onSelect?.(path, index.get(path));
|
|
2648
|
-
},
|
|
2649
|
-
onFolderSelect: (path) => onSelect?.(`${path}/`, index.get(path)),
|
|
2650
|
-
storageKey: expansionKey,
|
|
2651
|
-
expandAll: query.trim().length > 0,
|
|
2652
|
-
label
|
|
2653
|
-
})
|
|
2828
|
+
}, entry);
|
|
2654
2829
|
})
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2830
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
2831
|
+
className: "min-w-0 flex-1 truncate px-1 text-sm text-muted-foreground",
|
|
2832
|
+
title: path,
|
|
2833
|
+
children: path
|
|
2834
|
+
}),
|
|
2835
|
+
compare && /* @__PURE__ */ jsx("div", {
|
|
2836
|
+
role: "group",
|
|
2837
|
+
"aria-label": "View",
|
|
2838
|
+
className: "flex shrink-0 rounded-md border border-border p-0.5 text-xs",
|
|
2839
|
+
children: ["file", "diff"].map((value) => /* @__PURE__ */ jsx("button", {
|
|
2664
2840
|
type: "button",
|
|
2665
|
-
|
|
2666
|
-
onClick:
|
|
2667
|
-
className: "
|
|
2668
|
-
children:
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2841
|
+
"aria-pressed": mode === value,
|
|
2842
|
+
onClick: () => setMode(value),
|
|
2843
|
+
className: cn$1("rounded px-2 py-1", mode === value ? "bg-muted text-foreground" : "text-muted-foreground hover:text-foreground"),
|
|
2844
|
+
children: value === "file" ? "File" : `Diff vs ${compare.label}`
|
|
2845
|
+
}, value))
|
|
2846
|
+
}),
|
|
2847
|
+
preview?.actions && /* @__PURE__ */ jsx("div", {
|
|
2848
|
+
className: "flex shrink-0 items-center gap-2",
|
|
2849
|
+
children: preview.actions
|
|
2850
|
+
}),
|
|
2851
|
+
expand && /* @__PURE__ */ jsx(Button, {
|
|
2852
|
+
type: "button",
|
|
2853
|
+
variant: "bare",
|
|
2854
|
+
onClick: expand.toggle,
|
|
2855
|
+
"aria-pressed": expand.expanded,
|
|
2856
|
+
"aria-label": expand.expanded ? "Exit full screen" : "Full screen",
|
|
2857
|
+
title: expand.expanded ? "Exit full screen (Esc)" : "Full screen",
|
|
2858
|
+
className: "shrink-0 rounded-md p-1.5 text-muted-foreground hover:bg-muted hover:text-foreground",
|
|
2859
|
+
children: /* @__PURE__ */ jsx(ExpandIcon, {
|
|
2860
|
+
"aria-hidden": true,
|
|
2861
|
+
className: "h-4 w-4"
|
|
2681
2862
|
})
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2863
|
+
})
|
|
2864
|
+
]
|
|
2865
|
+
}), preview ? /* @__PURE__ */ jsx("div", {
|
|
2866
|
+
"data-primary-content": "",
|
|
2867
|
+
className: "flex min-h-0 flex-1 flex-col overflow-auto [&>*]:min-h-full",
|
|
2868
|
+
children: mode === "diff" && compare ? compare.content : preview.content
|
|
2869
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
2870
|
+
className: "flex min-h-0 min-w-0 flex-1 items-center justify-center p-6 text-sm text-muted-foreground",
|
|
2871
|
+
children: empty ? null : "Select a file to open it here."
|
|
2687
2872
|
})]
|
|
2688
2873
|
});
|
|
2689
2874
|
}
|
|
2690
|
-
//#endregion
|
|
2691
2875
|
export { WorkspaceSurfaceTitle as C, WorkspaceSurfaceFrame as S, StatusBar as _, TaskBoard as a, WorkspaceLayout as b, createShellShouldRevalidate as c, SESSION_CREATED_EVENT as d, dispatchSessionCreated as f, TerminalPanel as g, RuntimePane as h, CalendarView as i, shellShouldRevalidate as l, formatRelativeAge as m, WorkspaceFilesPane as n, SandboxWorkbench as o, useOptimisticSessionItems as p, ApprovalQueue as r, WorkspaceArtifactView as s, ArtifactPane$1 as t, SessionSidebar as u, StatusBanner as v, WorkspaceSurface as x, DirectoryPane as y };
|
package/dist/workspace.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as StatusBar, A as createShellShouldRevalidate, B as SessionSidebarVariant, C as SandboxWorkbenchLayoutOptions, D as SandboxWorkbenchSessionProps, E as SandboxWorkbenchProps, F as SessionSidebarFilter, G as dispatchSessionCreated, H as SessionCreatedDetail, I as SessionSidebarGroupBy, J as RuntimePaneProps, K as useOptimisticSessionItems, L as SessionSidebarItem, M as formatRelativeAge, N as SessionSidebar, O as ShellShouldRevalidateArgs, P as SessionSidebarBadge, Q as ContextBadge, R as SessionSidebarLink, S as SandboxWorkbenchFileArtifact, T as SandboxWorkbenchOpenUIArtifact, U as SessionOptimisticController, V as SESSION_CREATED_EVENT, W as UseOptimisticSessionItemsOptions, X as TerminalPanel, Y as TerminalLine, Z as TerminalProps, _ as TaskBoardItem, _t as WorkspaceSurfaceTitle, a as WorkspaceFilesPane, at as DirectoryPaneProps, b as SandboxWorkbenchArtifact, bt as WorkspaceLayoutProps, c as ApprovalConfidenceStat, ct as ShellHeader, d as ApprovalQueueProps, dt as WorkspacePaneHeaderProps, et as StatusBarProps, f as CalendarEvent, ft as WorkspaceSurface, g as TaskBoardColumn, gt as WorkspaceSurfaceProps, h as TaskBoard, ht as WorkspaceSurfaceHeadingLevel, i as WorkspaceArtifactViewProps, it as DirectoryPane, j as shellShouldRevalidate, k as ShellShouldRevalidateOptions, l as ApprovalItem, lt as ShellHeaderProps, m as CalendarViewProps, mt as WorkspaceSurfaceFrameProps, n as ArtifactPaneProps, nt as StatusBanner, o as WorkspaceFilesPaneProps, ot as SHELL_HEADER_HEIGHT, p as CalendarView, pt as WorkspaceSurfaceFrame, q as RuntimePane, r as WorkspaceArtifactView, rt as StatusBannerProps, s as WorkspaceFilesPreview, st as SHELL_INSET_GUTTER, t as ArtifactPane, tt as BannerType, u as ApprovalQueue, ut as WorkspacePaneHeader, v as TaskBoardProps, vt as WorkspaceSurfaceTitleProps, w as SandboxWorkbenchMarkdownArtifact, x as SandboxWorkbenchCustomArtifact, y as SandboxWorkbench, yt as WorkspaceLayout, z as SessionSidebarProps } from "./index-
|
|
1
|
+
import { $ as StatusBar, A as createShellShouldRevalidate, B as SessionSidebarVariant, C as SandboxWorkbenchLayoutOptions, D as SandboxWorkbenchSessionProps, E as SandboxWorkbenchProps, F as SessionSidebarFilter, G as dispatchSessionCreated, H as SessionCreatedDetail, I as SessionSidebarGroupBy, J as RuntimePaneProps, K as useOptimisticSessionItems, L as SessionSidebarItem, M as formatRelativeAge, N as SessionSidebar, O as ShellShouldRevalidateArgs, P as SessionSidebarBadge, Q as ContextBadge, R as SessionSidebarLink, S as SandboxWorkbenchFileArtifact, T as SandboxWorkbenchOpenUIArtifact, U as SessionOptimisticController, V as SESSION_CREATED_EVENT, W as UseOptimisticSessionItemsOptions, X as TerminalPanel, Y as TerminalLine, Z as TerminalProps, _ as TaskBoardItem, _t as WorkspaceSurfaceTitle, a as WorkspaceFilesPane, at as DirectoryPaneProps, b as SandboxWorkbenchArtifact, bt as WorkspaceLayoutProps, c as ApprovalConfidenceStat, ct as ShellHeader, d as ApprovalQueueProps, dt as WorkspacePaneHeaderProps, et as StatusBarProps, f as CalendarEvent, ft as WorkspaceSurface, g as TaskBoardColumn, gt as WorkspaceSurfaceProps, h as TaskBoard, ht as WorkspaceSurfaceHeadingLevel, i as WorkspaceArtifactViewProps, it as DirectoryPane, j as shellShouldRevalidate, k as ShellShouldRevalidateOptions, l as ApprovalItem, lt as ShellHeaderProps, m as CalendarViewProps, mt as WorkspaceSurfaceFrameProps, n as ArtifactPaneProps, nt as StatusBanner, o as WorkspaceFilesPaneProps, ot as SHELL_HEADER_HEIGHT, p as CalendarView, pt as WorkspaceSurfaceFrame, q as RuntimePane, r as WorkspaceArtifactView, rt as StatusBannerProps, s as WorkspaceFilesPreview, st as SHELL_INSET_GUTTER, t as ArtifactPane, tt as BannerType, u as ApprovalQueue, ut as WorkspacePaneHeader, v as TaskBoardProps, vt as WorkspaceSurfaceTitleProps, w as SandboxWorkbenchMarkdownArtifact, x as SandboxWorkbenchCustomArtifact, y as SandboxWorkbench, yt as WorkspaceLayout, z as SessionSidebarProps } from "./index-F42BOxUM.js";
|
|
2
2
|
export { type ApprovalConfidenceStat, type ApprovalItem, ApprovalQueue, type ApprovalQueueProps, ArtifactPane, type ArtifactPaneProps, type BannerType, type CalendarEvent, CalendarView, type CalendarViewProps, type ContextBadge, DirectoryPane, type DirectoryPaneProps, RuntimePane, type RuntimePaneProps, SESSION_CREATED_EVENT, SHELL_HEADER_HEIGHT, SHELL_INSET_GUTTER, SandboxWorkbench, type SandboxWorkbenchArtifact, type SandboxWorkbenchCustomArtifact, type SandboxWorkbenchFileArtifact, type SandboxWorkbenchLayoutOptions, type SandboxWorkbenchMarkdownArtifact, type SandboxWorkbenchOpenUIArtifact, type SandboxWorkbenchProps, type SandboxWorkbenchSessionProps, type SessionCreatedDetail, type SessionOptimisticController, SessionSidebar, type SessionSidebarBadge, type SessionSidebarFilter, type SessionSidebarGroupBy, type SessionSidebarItem, type SessionSidebarLink, type SessionSidebarProps, type SessionSidebarVariant, ShellHeader, type ShellHeaderProps, type ShellShouldRevalidateArgs, type ShellShouldRevalidateOptions, StatusBanner, type StatusBannerProps, StatusBar, type StatusBarProps, TaskBoard, type TaskBoardColumn, type TaskBoardItem, type TaskBoardProps, type TerminalLine, TerminalPanel, type TerminalProps, type UseOptimisticSessionItemsOptions, WorkspaceArtifactView, type WorkspaceArtifactViewProps, WorkspaceFilesPane, type WorkspaceFilesPaneProps, type WorkspaceFilesPreview, WorkspaceLayout, type WorkspaceLayoutProps, WorkspacePaneHeader, type WorkspacePaneHeaderProps, WorkspaceSurface, WorkspaceSurfaceFrame, type WorkspaceSurfaceFrameProps, type WorkspaceSurfaceHeadingLevel, type WorkspaceSurfaceProps, WorkspaceSurfaceTitle, type WorkspaceSurfaceTitleProps, createShellShouldRevalidate, dispatchSessionCreated, formatRelativeAge, shellShouldRevalidate, useOptimisticSessionItems };
|
package/dist/workspace.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { i as WorkspacePaneHeader, n as SHELL_INSET_GUTTER, r as ShellHeader, t as SHELL_HEADER_HEIGHT } from "./shell-header-
|
|
2
|
-
import { C as WorkspaceSurfaceTitle, S as WorkspaceSurfaceFrame, _ as StatusBar, a as TaskBoard, b as WorkspaceLayout, c as createShellShouldRevalidate, d as SESSION_CREATED_EVENT, f as dispatchSessionCreated, g as TerminalPanel, h as RuntimePane, i as CalendarView, l as shellShouldRevalidate, m as formatRelativeAge, n as WorkspaceFilesPane, o as SandboxWorkbench, p as useOptimisticSessionItems, r as ApprovalQueue, s as WorkspaceArtifactView, t as ArtifactPane, u as SessionSidebar, v as StatusBanner, x as WorkspaceSurface, y as DirectoryPane } from "./workspace-
|
|
1
|
+
import { i as WorkspacePaneHeader, n as SHELL_INSET_GUTTER, r as ShellHeader, t as SHELL_HEADER_HEIGHT } from "./shell-header-CwqDzC4I.js";
|
|
2
|
+
import { C as WorkspaceSurfaceTitle, S as WorkspaceSurfaceFrame, _ as StatusBar, a as TaskBoard, b as WorkspaceLayout, c as createShellShouldRevalidate, d as SESSION_CREATED_EVENT, f as dispatchSessionCreated, g as TerminalPanel, h as RuntimePane, i as CalendarView, l as shellShouldRevalidate, m as formatRelativeAge, n as WorkspaceFilesPane, o as SandboxWorkbench, p as useOptimisticSessionItems, r as ApprovalQueue, s as WorkspaceArtifactView, t as ArtifactPane, u as SessionSidebar, v as StatusBanner, x as WorkspaceSurface, y as DirectoryPane } from "./workspace-DRhi6S3o.js";
|
|
3
3
|
export { ApprovalQueue, ArtifactPane, CalendarView, DirectoryPane, RuntimePane, SESSION_CREATED_EVENT, SHELL_HEADER_HEIGHT, SHELL_INSET_GUTTER, SandboxWorkbench, SessionSidebar, ShellHeader, StatusBanner, StatusBar, TaskBoard, TerminalPanel, WorkspaceArtifactView, WorkspaceFilesPane, WorkspaceLayout, WorkspacePaneHeader, WorkspaceSurface, WorkspaceSurfaceFrame, WorkspaceSurfaceTitle, createShellShouldRevalidate, dispatchSessionCreated, formatRelativeAge, shellShouldRevalidate, useOptimisticSessionItems };
|