@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.
Files changed (92) hide show
  1. package/dist/{WorkflowGraph-BcuJ0kgt.js → WorkflowGraph-DXmu60At.js} +4 -7
  2. package/dist/assets.d.ts +0 -18
  3. package/dist/assets.js +9 -17
  4. package/dist/{auth-CWe17Hly.js → auth-BDpoZ_2f.js} +1 -2
  5. package/dist/auth.d.ts +1 -1
  6. package/dist/auth.js +1 -2
  7. package/dist/{chat-_aHUfqtH.js → chat-BYTVLZQW.js} +9 -15
  8. package/dist/chat.d.ts +1 -1
  9. package/dist/chat.js +1 -2
  10. package/dist/{connections-C5DxYxvz.js → connections-DymjzHe_.js} +1 -2
  11. package/dist/connections.d.ts +1 -1
  12. package/dist/connections.js +1 -2
  13. package/dist/connectors.d.ts +0 -10
  14. package/dist/connectors.js +5 -9
  15. package/dist/{dashboard-SFakZEtu.js → dashboard-ClKA3opr.js} +31 -55
  16. package/dist/dashboard.d.ts +3 -3
  17. package/dist/dashboard.js +3 -3
  18. package/dist/diff-view-A0O0Z_SR.js +287 -0
  19. package/dist/diff-view-DDHWtR6X.d.ts +21 -0
  20. package/dist/editor.js +1 -2
  21. package/dist/{embedded-app-view-CYb9hevq.js → embedded-app-view-DXsoPale.js} +5 -8
  22. package/dist/{embedded-app-view-B_vMTtJn.d.ts → embedded-app-view-Ta5GI4hx.d.ts} +0 -4
  23. package/dist/files.js +1 -2
  24. package/dist/globals.css +43 -0
  25. package/dist/hooks.d.ts +3 -7
  26. package/dist/hooks.js +4 -6
  27. package/dist/{index-DsU8ts9f.d.ts → index-BAEvGqrn.d.ts} +0 -4
  28. package/dist/{index-DvmZLMT1.d.ts → index-BbfWVtZq.d.ts} +0 -2
  29. package/dist/index-C5h5T0nb.d.ts +91 -0
  30. package/dist/{index-ByzdHyte.d.ts → index-CvtEhIpk.d.ts} +25 -52
  31. package/dist/{index-ClRHbsoX.d.ts → index-DLX35YAa.d.ts} +0 -2
  32. package/dist/{index-AVDzT8Jw.d.ts → index-DRDtTgb0.d.ts} +2 -54
  33. package/dist/{index-C61CTrhx.d.ts → index-F42BOxUM.d.ts} +15 -37
  34. package/dist/{index-QBCEflyf.d.ts → index-ucJHuuVZ.d.ts} +2 -8
  35. package/dist/{index-DGil6iqm.d.ts → index-y2OPUSoY.d.ts} +0 -4
  36. package/dist/index.d.ts +17 -16
  37. package/dist/index.js +24 -20
  38. package/dist/integrations.d.ts +0 -14
  39. package/dist/integrations.js +6 -11
  40. package/dist/markdown.js +1 -2
  41. package/dist/{model-brand-B57CV8Lg.d.ts → model-brand-ZwVS49Fq.d.ts} +0 -2
  42. package/dist/{model-brand-BSr9on8C.js → model-brand-bTcMjQtB.js} +34 -67
  43. package/dist/{motion-D4njYpys.js → motion-Bn7ESHrj.js} +1 -2
  44. package/dist/{node-output-fuk0NV0V.js → node-output-udnwhShN.js} +9 -16
  45. package/dist/openui.js +1 -2
  46. package/dist/{page-layout-2IRtfx51.js → page-layout-CuOpvZys.js} +5 -9
  47. package/dist/pages.d.ts +2 -14
  48. package/dist/pages.js +9 -15
  49. package/dist/{primitives-CLOVnjWz.js → primitives-CiwDp4-0.js} +4 -7
  50. package/dist/primitives.d.ts +1 -1
  51. package/dist/primitives.js +1 -2
  52. package/dist/{provider-logo-BGCziCbM.js → provider-logo-CPKRPHcS.js} +1 -2
  53. package/dist/{rolldown-runtime-BBjsoOtd.js → rolldown-runtime-782esTHO.js} +1 -2
  54. package/dist/run-CliTxkfw.js +397 -0
  55. package/dist/run.d.ts +2 -2
  56. package/dist/run.js +1 -2
  57. package/dist/sdk-hooks.d.ts +1 -1
  58. package/dist/sdk-hooks.js +1 -1
  59. package/dist/{shell-header-CTh3oV_e.js → shell-header-CwqDzC4I.js} +2 -3
  60. package/dist/{sidecar-DgH_vQ6m.d.ts → sidecar-CNP4zXop.d.ts} +0 -2
  61. package/dist/stores.d.ts +0 -2
  62. package/dist/stores.js +1 -2
  63. package/dist/styles.css +43 -0
  64. package/dist/{terminal-X6r5pjgv.js → terminal-nUCznZRj.js} +3 -5
  65. package/dist/terminal.d.ts +1 -3
  66. package/dist/terminal.js +1 -2
  67. package/dist/{tree-data-DtoCNNBJ.js → tree-data-YXtcK6Ld.js} +2 -4
  68. package/dist/types.d.ts +1 -1
  69. package/dist/{usage-chart-BjM8ShvX.d.ts → usage-chart-BFpdkqNq.d.ts} +0 -6
  70. package/dist/{use-pty-session-B5Q_i9RI.js → use-pty-session-BHVQlSs-.js} +1 -2
  71. package/dist/{use-pty-session-DbAYO5uH.d.ts → use-pty-session-DSgtQyYX.d.ts} +0 -2
  72. package/dist/{use-sidecar-auth-CCTJcrq7.d.ts → use-sidecar-auth-CPevSSEj.d.ts} +0 -4
  73. package/dist/{use-sidecar-auth-DkdcufOz.js → use-sidecar-auth-DpG0aWQ3.js} +3 -6
  74. package/dist/utils-BER_bdgE.js +1 -0
  75. package/dist/utils.js +1 -2
  76. package/dist/vault-tree.d.ts +1 -1
  77. package/dist/vault-tree.js +1 -2
  78. package/dist/workbench/diff.d.ts +2 -0
  79. package/dist/workbench/diff.js +1 -0
  80. package/dist/workbench/embedded-app.d.ts +1 -1
  81. package/dist/workbench/embedded-app.js +1 -2
  82. package/dist/workbench-B3JL1qbt.js +892 -0
  83. package/dist/workbench.d.ts +4 -3
  84. package/dist/workbench.js +4 -3
  85. package/dist/workflows.d.ts +1 -13
  86. package/dist/workflows.js +4 -5
  87. package/dist/{workspace-cjk0axyT.js → workspace-DRhi6S3o.js} +325 -141
  88. package/dist/workspace.d.ts +1 -1
  89. package/dist/workspace.js +2 -2
  90. package/package.json +36 -28
  91. package/dist/utils-DzWbktWG.js +0 -2
  92. package/dist/workbench-DPZ6LXqf.js +0 -8136
@@ -1,20 +1,20 @@
1
- import { t as cn$1 } from "./utils-DzWbktWG.js";
2
- import { r as ShellHeader } from "./shell-header-CTh3oV_e.js";
3
- import { t as MOTION_CONTROL } from "./motion-D4njYpys.js";
4
- import { i as VaultTree, n as filterFileNodes, t as fileTreeFromPaths } from "./tree-data-DtoCNNBJ.js";
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
- //#region src/workspace/workspace-surface.tsx
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
2518
- //#region src/workspace/workspace-files-pane.tsx
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
- className: cn$1("flex h-full min-h-0 min-w-0 flex-col", className),
2578
- style,
2579
- children: [/* @__PURE__ */ jsx("div", {
2580
- ref: treeRef,
2581
- hidden: hasPreview,
2582
- tabIndex: -1,
2583
- role: "region",
2584
- "aria-label": "Workspace files",
2585
- className: cn$1("flex min-h-0 flex-1 flex-col", !plain && "p-2", hasPreview && "hidden"),
2586
- children: /* @__PURE__ */ jsxs("section", {
2587
- "aria-labelledby": headingId,
2588
- "data-workspace-files-surface": surface,
2589
- 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"),
2590
- children: [
2591
- plain ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("h2", {
2592
- id: headingId,
2593
- className: "sr-only",
2594
- children: label
2595
- }), headerActions && /* @__PURE__ */ jsx("div", {
2596
- className: "flex shrink-0 items-center justify-end gap-1 px-3 pt-3",
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: "min-w-0 flex-1 truncate text-sm font-semibold text-foreground",
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
- search && !isEmpty && /* @__PURE__ */ jsx("div", {
2610
- className: cn$1("shrink-0 px-3 pb-2", plain && "pt-3"),
2611
- children: /* @__PURE__ */ jsx(Input, {
2612
- type: "search",
2613
- size: "sm",
2614
- value: query,
2615
- onChange: (event) => setQuery(event.target.value),
2616
- placeholder: `Search ${label.toLowerCase()}…`,
2617
- "aria-label": `Search ${label.toLowerCase()}`
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
- /* @__PURE__ */ jsx("div", {
2621
- className: cn$1("min-h-0 flex-1 overflow-y-auto px-1.5 py-1.5", (!plain || search && !isEmpty) && "border-t border-border"),
2622
- children: isEmpty ? emptyState !== void 0 ? emptyState : /* @__PURE__ */ jsx(EmptyState, {
2623
- icon: /* @__PURE__ */ jsx(FolderOpen, { className: "h-6 w-6" }),
2624
- title: "No files yet"
2625
- }) : visible.length === 0 ? /* @__PURE__ */ jsxs("div", {
2626
- className: "flex flex-col items-center gap-3 p-6 text-center",
2627
- children: [/* @__PURE__ */ jsxs("p", {
2628
- className: "max-w-xs break-words text-xs text-muted-foreground",
2629
- children: [
2630
- "No files match “",
2631
- query.trim(),
2632
- "”."
2633
- ]
2634
- }), /* @__PURE__ */ jsx(Button, {
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
- variant: "outline",
2637
- size: "sm",
2638
- onClick: () => setQuery(""),
2639
- children: "Clear search"
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
- }) : /* @__PURE__ */ jsx(VaultTree, {
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
- }), preview && /* @__PURE__ */ jsxs("div", {
2658
- className: "flex min-h-0 flex-1 flex-col",
2659
- children: [/* @__PURE__ */ jsxs("div", {
2660
- className: "flex min-h-10 shrink-0 flex-wrap items-center gap-2 border-b border-border px-3 py-2",
2661
- children: [
2662
- onBack && /* @__PURE__ */ jsxs(Button, {
2663
- ref: backRef,
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
- variant: "bare",
2666
- onClick: onBack,
2667
- className: "inline-flex shrink-0 items-center gap-1 rounded-md px-1 py-1 text-sm text-muted-foreground hover:text-foreground",
2668
- children: [/* @__PURE__ */ jsx(ArrowLeft, {
2669
- "aria-hidden": "true",
2670
- className: "h-3.5 w-3.5"
2671
- }), "Back to files"]
2672
- }),
2673
- /* @__PURE__ */ jsx("span", {
2674
- className: "min-w-0 flex-1 truncate text-sm text-muted-foreground",
2675
- title: preview.path,
2676
- children: preview.path
2677
- }),
2678
- preview.actions && /* @__PURE__ */ jsx("div", {
2679
- className: "flex shrink-0 items-center gap-2",
2680
- children: preview.actions
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
- }), /* @__PURE__ */ jsx("div", {
2684
- className: "min-h-0 flex-1 overflow-auto",
2685
- children: preview.content
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 };
@@ -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-C61CTrhx.js";
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-CTh3oV_e.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-cjk0axyT.js";
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 };