@tangle-network/sandbox-ui 0.118.0 → 0.120.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/README.md CHANGED
@@ -232,6 +232,36 @@ function App() {
232
232
  }
233
233
  ```
234
234
 
235
+ ### Compact workspace files
236
+
237
+ New agent products compose their application shell with `AgentWorkspaceCompanion` from `@tangle-network/agent-app/workspace-react`.
238
+ Use `WorkspaceFilesPane` for its Files content and `WorkspaceArtifactView` for technical artifact rendering.
239
+ Both are exported from `@tangle-network/sandbox-ui/workspace`.
240
+
241
+ ```tsx
242
+ <WorkspaceFilesPane
243
+ paths={workspacePaths}
244
+ selectedPath={selectedPath}
245
+ onSelect={openFile}
246
+ onBack={closePreview}
247
+ preview={selectedArtifact ? {
248
+ path: selectedArtifact.path,
249
+ content: <WorkspaceArtifactView artifact={selectedArtifact} />,
250
+ actions: <DownloadFile artifact={selectedArtifact} />,
251
+ } : undefined}
252
+ />
253
+ ```
254
+
255
+ Pass either a recursive `root: FileNode` or canonical `paths`, including trailing slashes for empty folders.
256
+ A root input returns its original node as the second `onSelect` argument; flat paths have no node metadata.
257
+ The pane uses the shared searchable file tree and retains it while a preview is open.
258
+ Returning to files preserves expansion, selection, and scroll.
259
+ Native search ends when a result is selected.
260
+ Adapters own loading, permissions, errors, file reads, and actions; `emptyState` customizes an empty workspace.
261
+ The preview header exposes Back to files, the selected path, and supplied actions without a second title frame.
262
+
263
+ ### Existing sandbox workbench
264
+
235
265
  Compose sandbox applications around `SandboxWorkbench` when you want the library’s default operating model:
236
266
 
237
267
  ```tsx
@@ -437,7 +467,7 @@ Retheming is absolutely supported, but the documentation was thinner than it sho
437
467
  | `/primitives` | Button, Card, Dialog, Badge, Input, Select, Table, Tabs, Toast, etc. |
438
468
  | `/chat` | ChatContainer, ChatInput, ChatMessage, AgentTimeline, ThinkingIndicator |
439
469
  | `/run` | ToolCallFeed, RunGroup, InlineToolItem, ExpandedToolDetail |
440
- | `/workspace` | SandboxWorkbench, WorkspaceLayout, DirectoryPane, RuntimePane, StatusBar |
470
+ | `/workspace` | WorkspaceFilesPane, WorkspaceArtifactView, SandboxWorkbench, WorkspaceLayout, DirectoryPane, RuntimePane, StatusBar |
441
471
  | `/workbench` | DiffView, ChangesPane, CodeView, artifact and preview components |
442
472
  | `/openui` | OpenUIArtifactRenderer and schema types for structured artifact rendering |
443
473
  | `/files` | FileTree, FilePreview, FileTabs, FileArtifactPane |
@@ -1,4 +1,4 @@
1
- import { Wt as Logo, o as Button$1 } from "./primitives-N-59i3-7.js";
1
+ import { Wt as Logo, o as Button$1 } from "./primitives-BQGtwZX3.js";
2
2
  import { t as cn$1 } from "./utils-DzWbktWG.js";
3
3
  import { n as MOTION_SURFACE, r as MOTION_TRAVEL, t as MOTION_CONTROL } from "./motion-DkyBRJb9.js";
4
4
  import { i as moonshot_default } from "./model-brand-hMyDTUqB.js";
@@ -10,7 +10,7 @@ import { useEffect, useRef, useState } from "react";
10
10
  import { createPortal } from "react-dom";
11
11
  import { Activity, BarChart2, Bell, Bot, Box, Camera, Check, CheckCircle2, ChevronDown, ChevronLeft, ChevronRight, Clock, Code2, Copy, Cpu, DollarSign, Download, ExternalLink, File, FileEdit, FilePlus, FileText, GitBranch, GitCommit, Globe, HardDrive, Key, Layers, Loader2, MemoryStick, MessageSquare, Monitor, MoreHorizontal, MoreVertical, Network, PanelLeft, Play, Plug, Plus, Power, PowerOff, RefreshCw, RotateCcw, Server, Settings, ShieldAlert, Skull, Terminal, Timer, Trash2, User, Users, Wrench, X, XCircle } from "lucide-react";
12
12
  import { focusField, focusFieldWithin, focusRing, focusRingInset, timeAgo } from "@tangle-network/ui/utils";
13
- import * as Select from "@radix-ui/react-select";
13
+ import * as Select$1 from "@radix-ui/react-select";
14
14
  //#region src/dashboard/sidebar-context.tsx
15
15
  const PANEL_OPEN_KEY = "sandbox-sidebar-panel-open";
16
16
  const RAIL_COLLAPSED_KEY = "sandbox-sidebar-rail-collapsed";
@@ -2415,7 +2415,7 @@ function BackendSelector({ backends, selected, onChange, variant = "pill", label
2415
2415
  const current = backends.find((b) => b.type === selected);
2416
2416
  const triggerText = current?.label ?? placeholder;
2417
2417
  const ariaLabel = label ? `${label}: ${triggerText}` : triggerText;
2418
- const trigger = variant === "pill" ? /* @__PURE__ */ jsxs(Select.Trigger, {
2418
+ const trigger = variant === "pill" ? /* @__PURE__ */ jsxs(Select$1.Trigger, {
2419
2419
  "aria-label": ariaLabel,
2420
2420
  className: cn$1("inline-flex h-8 items-center gap-1.5 rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container", "px-2.5 text-xs font-medium text-foreground shadow-sm", "transition-colors duration-[var(--transition-fast)]", "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high", focusRing, "data-[state=open]:border-[var(--md3-outline)] data-[state=open]:bg-surface-container-high", "disabled:opacity-50 disabled:cursor-not-allowed", triggerClassName),
2421
2421
  children: [
@@ -2428,12 +2428,12 @@ function BackendSelector({ backends, selected, onChange, variant = "pill", label
2428
2428
  className: "sr-only",
2429
2429
  children: current.description
2430
2430
  }),
2431
- /* @__PURE__ */ jsx(Select.Icon, {
2431
+ /* @__PURE__ */ jsx(Select$1.Icon, {
2432
2432
  asChild: true,
2433
2433
  children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-3 w-3 shrink-0 text-muted-foreground transition-transform duration-[var(--transition-fast)] data-[state=open]:rotate-180" })
2434
2434
  })
2435
2435
  ]
2436
- }) : /* @__PURE__ */ jsxs(Select.Trigger, {
2436
+ }) : /* @__PURE__ */ jsxs(Select$1.Trigger, {
2437
2437
  "aria-label": ariaLabel,
2438
2438
  className: cn$1("flex w-full items-center justify-between gap-2 rounded-[var(--radius-md)]", "border border-[var(--md3-outline-variant)] bg-surface-container px-3 py-2.5 text-sm text-left", "transition-colors duration-[var(--transition-fast)]", "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high", focusRing, "data-[state=open]:border-[var(--md3-outline)] data-[state=open]:bg-surface-container-high", "disabled:opacity-50 disabled:cursor-not-allowed", triggerClassName),
2439
2439
  children: [/* @__PURE__ */ jsxs("span", {
@@ -2449,7 +2449,7 @@ function BackendSelector({ backends, selected, onChange, variant = "pill", label
2449
2449
  children: current.description
2450
2450
  })
2451
2451
  ]
2452
- }), /* @__PURE__ */ jsx(Select.Icon, {
2452
+ }), /* @__PURE__ */ jsx(Select$1.Icon, {
2453
2453
  asChild: true,
2454
2454
  children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-[var(--transition-fast)] data-[state=open]:rotate-180" })
2455
2455
  })]
@@ -2459,16 +2459,16 @@ function BackendSelector({ backends, selected, onChange, variant = "pill", label
2459
2459
  children: [variant === "field" && label && /* @__PURE__ */ jsx("label", {
2460
2460
  className: "block text-xs font-medium text-muted-foreground uppercase tracking-[0.06em]",
2461
2461
  children: label
2462
- }), /* @__PURE__ */ jsxs(Select.Root, {
2462
+ }), /* @__PURE__ */ jsxs(Select$1.Root, {
2463
2463
  value: selected,
2464
2464
  onValueChange: onChange,
2465
- children: [trigger, /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsx(Select.Content, {
2465
+ children: [trigger, /* @__PURE__ */ jsx(Select$1.Portal, { children: /* @__PURE__ */ jsx(Select$1.Content, {
2466
2466
  position: "popper",
2467
2467
  sideOffset: 4,
2468
2468
  className: cn$1("z-50 max-h-[var(--radix-select-content-available-height)] overflow-hidden", variant === "pill" ? "min-w-[240px] max-w-[320px]" : "w-[var(--radix-select-trigger-width)]", "rounded-[var(--radius-md)] border border-[var(--md3-outline-variant)]", "bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]", "data-[state=open]:animate-in data-[state=closed]:animate-out", "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95", "data-[side=bottom]:slide-in-from-top-1"),
2469
- children: /* @__PURE__ */ jsx(Select.Viewport, {
2469
+ children: /* @__PURE__ */ jsx(Select$1.Viewport, {
2470
2470
  className: "max-h-[min(24rem,calc(var(--radix-select-content-available-height)-2px))] overflow-y-auto overscroll-contain p-1",
2471
- children: backends.map((backend) => /* @__PURE__ */ jsxs(Select.Item, {
2471
+ children: backends.map((backend) => /* @__PURE__ */ jsxs(Select$1.Item, {
2472
2472
  value: backend.type,
2473
2473
  className: cn$1("relative flex cursor-pointer select-none items-start gap-2.5 rounded-[var(--radius-sm)]", "px-3 py-2 text-sm outline-none", "transition-colors duration-[var(--transition-fast)]", "hover:bg-accent/50 focus:bg-accent/50", "data-[state=checked]:bg-[var(--accent-surface-soft)] data-[state=checked]:text-[var(--brand-primary)]"),
2474
2474
  children: [backend.icon && /* @__PURE__ */ jsx("span", {
@@ -2476,7 +2476,7 @@ function BackendSelector({ backends, selected, onChange, variant = "pill", label
2476
2476
  children: backend.icon
2477
2477
  }), /* @__PURE__ */ jsxs("span", {
2478
2478
  className: "flex min-w-0 flex-col",
2479
- children: [/* @__PURE__ */ jsx(Select.ItemText, { children: /* @__PURE__ */ jsx("span", {
2479
+ children: [/* @__PURE__ */ jsx(Select$1.ItemText, { children: /* @__PURE__ */ jsx("span", {
2480
2480
  className: "font-medium",
2481
2481
  children: backend.label
2482
2482
  }) }), backend.description && /* @__PURE__ */ jsx("span", {
package/dist/dashboard.js CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as SidebarRailNav, A as ResourceMeter, B as RailFlyout, C as InvoiceTable, D as canAdminSandbox, E as SandboxCard, F as CreditBalance, G as Sidebar, H as RailModeButton, I as ProfileAvatar, J as SidebarPanelContent, K as SidebarContent, L as RailButton, M as INSUFFICIENT_BALANCE_CODE, N as OutOfCreditsModal, O as ActivityFeed, P as parseInsufficientBalance, Q as SidebarRailHeader, R as RailCollapseToggle, S as PlanCards, T as NewSandboxCard, U as RailSeparator, V as RailHeader, W as RailThemeToggle, X as SidebarRail, Y as SidebarPanelHeader, Z as SidebarRailFooter, _ as HarnessPicker, a as ProcessList, at as SIDEBAR_TOTAL_WIDTH, b as HarnessLogo, c as UsageSummary, d as MetricAreaChart, et as RailTooltip, f as ProfileComparison, g as HARNESS_OPTIONS, h as DashboardLayout, i as NetworkConfig, it as SIDEBAR_RAIL_WIDTH, j as ClusterStatusBar, k as ResourceSnapshot, l as SystemLogsViewer, m as SidebarLayout, n as SnapshotList, nt as SIDEBAR_PANEL_WIDTH, o as PortsList, ot as SidebarProvider, p as ProfileSelector, q as SidebarPanel, r as BackendConfig, rt as SIDEBAR_RAIL_LABELED_WIDTH, s as GitPanel, st as useSidebar, t as PromoBanner, tt as SIDEBAR_MOBILE_WIDTH, u as VariantList, v as chatCapableHarnesses, w as SandboxTable, x as BackendSelector, y as HARNESS_BRAND, z as RailExpandable } from "./dashboard-D4un5GtD.js";
1
+ import { $ as SidebarRailNav, A as ResourceMeter, B as RailFlyout, C as InvoiceTable, D as canAdminSandbox, E as SandboxCard, F as CreditBalance, G as Sidebar, H as RailModeButton, I as ProfileAvatar, J as SidebarPanelContent, K as SidebarContent, L as RailButton, M as INSUFFICIENT_BALANCE_CODE, N as OutOfCreditsModal, O as ActivityFeed, P as parseInsufficientBalance, Q as SidebarRailHeader, R as RailCollapseToggle, S as PlanCards, T as NewSandboxCard, U as RailSeparator, V as RailHeader, W as RailThemeToggle, X as SidebarRail, Y as SidebarPanelHeader, Z as SidebarRailFooter, _ as HarnessPicker, a as ProcessList, at as SIDEBAR_TOTAL_WIDTH, b as HarnessLogo, c as UsageSummary, d as MetricAreaChart, et as RailTooltip, f as ProfileComparison, g as HARNESS_OPTIONS, h as DashboardLayout, i as NetworkConfig, it as SIDEBAR_RAIL_WIDTH, j as ClusterStatusBar, k as ResourceSnapshot, l as SystemLogsViewer, m as SidebarLayout, n as SnapshotList, nt as SIDEBAR_PANEL_WIDTH, o as PortsList, ot as SidebarProvider, p as ProfileSelector, q as SidebarPanel, r as BackendConfig, rt as SIDEBAR_RAIL_LABELED_WIDTH, s as GitPanel, st as useSidebar, t as PromoBanner, tt as SIDEBAR_MOBILE_WIDTH, u as VariantList, v as chatCapableHarnesses, w as SandboxTable, x as BackendSelector, y as HARNESS_BRAND, z as RailExpandable } from "./dashboard-CnGK2S3A.js";
2
2
  import { n as canonicalModelId, r as modelBrandFor, t as ModelBrandStack } from "./model-brand-hMyDTUqB.js";
3
3
  import { a as formatPrice, i as PricingPage, n as TemplateCard, o as BillingDashboard, r as UsageChart, t as InfoPanel } from "./info-panel-C9cqDzOL.js";
4
4
  export { ActivityFeed, BackendConfig, BackendSelector, BillingDashboard, ClusterStatusBar, CreditBalance, DashboardLayout, GitPanel, HARNESS_BRAND, HARNESS_OPTIONS, HarnessLogo, HarnessPicker, INSUFFICIENT_BALANCE_CODE, InfoPanel, InvoiceTable, MetricAreaChart, ModelBrandStack, NetworkConfig, NewSandboxCard, OutOfCreditsModal, PlanCards, PortsList, PricingPage, ProcessList, ProfileAvatar, ProfileComparison, ProfileSelector, PromoBanner, RailButton, RailCollapseToggle, RailExpandable, RailFlyout, RailHeader, RailModeButton, RailSeparator, RailThemeToggle, RailTooltip, ResourceMeter, ResourceSnapshot, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, SandboxTable, Sidebar, SidebarContent, SidebarLayout, SidebarPanel, SidebarPanelContent, SidebarPanelHeader, SidebarProvider, SidebarRail, SidebarRailFooter, SidebarRailHeader, SidebarRailNav, SnapshotList, SystemLogsViewer, TemplateCard, UsageChart, UsageSummary, VariantList, canAdminSandbox, canonicalModelId, chatCapableHarnesses, formatPrice, modelBrandFor, parseInsufficientBalance, useSidebar };
package/dist/files.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { C as getCodeLanguage, D as resolveFilePreviewKind, E as parseCsv, S as filterFileTree, T as getSyntaxLanguage, _ as RichFileTreeGitStatus, a as FileNode, b as detectFileFormat, c as FilePreviewProps, d as FileTabsProps, f as FileTree, g as RichFileTreeGitEntry, h as RichFileTree, i as FileFormat, l as FileTabData, m as FileTreeVisibilityOptions, n as FileArtifactPane, o as FilePreview, p as FileTreeProps, r as FileArtifactPaneProps, s as FilePreviewKind, t as CSV_PREVIEW_ROW_LIMIT, u as FileTabs, v as RichFileTreeProps, w as getFormatLabel, x as fileExtension, y as RichFileTreeThemeVars } from "./index-CXX5IpH2.js";
1
+ import { C as getCodeLanguage, D as resolveFilePreviewKind, E as parseCsv, S as filterFileTree, T as getSyntaxLanguage, _ as RichFileTreeGitStatus, a as FileNode, b as detectFileFormat, c as FilePreviewProps, d as FileTabsProps, f as FileTree, g as RichFileTreeGitEntry, h as RichFileTree, i as FileFormat, l as FileTabData, m as FileTreeVisibilityOptions, n as FileArtifactPane, o as FilePreview, p as FileTreeProps, r as FileArtifactPaneProps, s as FilePreviewKind, t as CSV_PREVIEW_ROW_LIMIT, u as FileTabs, v as RichFileTreeProps, w as getFormatLabel, x as fileExtension, y as RichFileTreeThemeVars } from "./index-B6wKsKV6.js";
2
2
  export { CSV_PREVIEW_ROW_LIMIT, FileArtifactPane, type FileArtifactPaneProps, type FileFormat, type FileNode, FilePreview, type FilePreviewKind, type FilePreviewProps, type FileTabData, FileTabs, type FileTabsProps, FileTree, type FileTreeProps, type FileTreeVisibilityOptions, RichFileTree, type RichFileTreeGitEntry, type RichFileTreeGitStatus, type RichFileTreeProps, type RichFileTreeThemeVars, detectFileFormat, fileExtension, filterFileTree, getCodeLanguage, getFormatLabel, getSyntaxLanguage, parseCsv, resolveFilePreviewKind };
package/dist/globals.css CHANGED
@@ -525,6 +525,9 @@
525
525
  .mx-2 {
526
526
  margin-inline: calc(var(--spacing) * 2);
527
527
  }
528
+ .mx-3 {
529
+ margin-inline: calc(var(--spacing) * 3);
530
+ }
528
531
  .mx-4 {
529
532
  margin-inline: calc(var(--spacing) * 4);
530
533
  }
@@ -858,6 +861,9 @@
858
861
  .h-\[220px\] {
859
862
  height: 220px;
860
863
  }
864
+ .h-\[360px\] {
865
+ height: 360px;
866
+ }
861
867
  .h-\[380px\] {
862
868
  height: 380px;
863
869
  }
@@ -1293,6 +1299,9 @@
1293
1299
  .w-\[var\(--tool-icon-size\)\] {
1294
1300
  width: var(--tool-icon-size);
1295
1301
  }
1302
+ .w-auto {
1303
+ width: auto;
1304
+ }
1296
1305
  .w-fit {
1297
1306
  width: fit-content;
1298
1307
  }
@@ -1494,6 +1503,9 @@
1494
1503
  .min-w-14 {
1495
1504
  min-width: calc(var(--spacing) * 14);
1496
1505
  }
1506
+ .min-w-32 {
1507
+ min-width: calc(var(--spacing) * 32);
1508
+ }
1497
1509
  .min-w-40 {
1498
1510
  min-width: calc(var(--spacing) * 40);
1499
1511
  }
@@ -1566,6 +1578,9 @@
1566
1578
  .basis-1\/3 {
1567
1579
  flex-basis: calc(1 / 3 * 100%);
1568
1580
  }
1581
+ .basis-64 {
1582
+ flex-basis: calc(var(--spacing) * 64);
1583
+ }
1569
1584
  .table-fixed {
1570
1585
  table-layout: fixed;
1571
1586
  }
@@ -1898,12 +1913,6 @@
1898
1913
  .gap-y-3 {
1899
1914
  row-gap: calc(var(--spacing) * 3);
1900
1915
  }
1901
- :where(.divide-x > :not(:last-child)) {
1902
- --tw-divide-x-reverse: 0;
1903
- border-inline-style: var(--tw-border-style);
1904
- border-inline-start-width: calc(1px * var(--tw-divide-x-reverse));
1905
- border-inline-end-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
1906
- }
1907
1916
  :where(.divide-y > :not(:last-child)) {
1908
1917
  --tw-divide-y-reverse: 0;
1909
1918
  border-bottom-style: var(--tw-border-style);
@@ -2233,9 +2242,6 @@
2233
2242
  border-color: color-mix(in oklab, var(--color-emerald-500) 40%, transparent);
2234
2243
  }
2235
2244
  }
2236
- .border-foreground {
2237
- border-color: hsl(var(--foreground));
2238
- }
2239
2245
  .border-green-500\/30 {
2240
2246
  border-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 30%, transparent);
2241
2247
  @supports (color: color-mix(in lab, red, red)) {
@@ -2245,9 +2251,6 @@
2245
2251
  .border-input {
2246
2252
  border-color: hsl(var(--input));
2247
2253
  }
2248
- .border-muted-foreground {
2249
- border-color: hsl(var(--muted-foreground));
2250
- }
2251
2254
  .border-primary {
2252
2255
  border-color: hsl(var(--primary));
2253
2256
  }
@@ -2359,6 +2362,9 @@
2359
2362
  .bg-\[var\(--accent-surface-strong\)\] {
2360
2363
  background-color: var(--accent-surface-strong);
2361
2364
  }
2365
+ .bg-\[var\(--bg-input\)\] {
2366
+ background-color: var(--bg-input);
2367
+ }
2362
2368
  .bg-\[var\(--bg-root\)\] {
2363
2369
  background-color: var(--bg-root);
2364
2370
  }
@@ -2602,6 +2608,9 @@
2602
2608
  background-color: color-mix(in oklab, var(--color-green-600) 20%, transparent);
2603
2609
  }
2604
2610
  }
2611
+ .bg-input {
2612
+ background-color: hsl(var(--input));
2613
+ }
2605
2614
  .bg-muted {
2606
2615
  background-color: hsl(var(--muted));
2607
2616
  }
@@ -3057,12 +3066,18 @@
3057
3066
  .pb-8 {
3058
3067
  padding-bottom: calc(var(--spacing) * 8);
3059
3068
  }
3069
+ .pl-1 {
3070
+ padding-left: var(--spacing);
3071
+ }
3060
3072
  .pl-2 {
3061
3073
  padding-left: calc(var(--spacing) * 2);
3062
3074
  }
3063
3075
  .pl-3 {
3064
3076
  padding-left: calc(var(--spacing) * 3);
3065
3077
  }
3078
+ .pl-4 {
3079
+ padding-left: calc(var(--spacing) * 4);
3080
+ }
3066
3081
  .pl-6 {
3067
3082
  padding-left: calc(var(--spacing) * 6);
3068
3083
  }
@@ -3879,6 +3894,11 @@
3879
3894
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
3880
3895
  transition-duration: var(--tw-duration, var(--default-transition-duration));
3881
3896
  }
3897
+ .transition-\[color\,background-color\,border-color\,box-shadow\,transform\,scale\] {
3898
+ transition-property: color,background-color,border-color,box-shadow,transform,scale;
3899
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
3900
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
3901
+ }
3882
3902
  .transition-\[color\,background-color\,border-color\,box-shadow\] {
3883
3903
  transition-property: color,background-color,border-color,box-shadow;
3884
3904
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -4110,6 +4130,16 @@
4110
4130
  border-bottom-style: var(--tw-border-style);
4111
4131
  border-bottom-width: 0px;
4112
4132
  }
4133
+ .autofill\:caret-\[var\(--text-primary\)\]:autofill {
4134
+ caret-color: var(--text-primary);
4135
+ }
4136
+ .autofill\:shadow-\[inset_0_0_0_1000px_var\(--bg-input\)\]:autofill {
4137
+ --tw-shadow: inset 0 0 0 1000px var(--tw-shadow-color, var(--bg-input));
4138
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
4139
+ }
4140
+ .autofill\:\[-webkit-text-fill-color\:var\(--text-primary\)\]:autofill {
4141
+ -webkit-text-fill-color: var(--text-primary);
4142
+ }
4113
4143
  @media (hover: hover) {
4114
4144
  .hover\:-translate-y-0\.5:hover {
4115
4145
  --tw-translate-y: calc(var(--spacing) * -0.5);
@@ -4506,6 +4536,9 @@
4506
4536
  .focus\:border-\[var\(--focus-border-danger\)\]:focus {
4507
4537
  border-color: var(--focus-border-danger);
4508
4538
  }
4539
+ .focus\:bg-\[var\(--accent-surface-strong\)\]:focus {
4540
+ background-color: var(--accent-surface-strong);
4541
+ }
4509
4542
  .focus\:bg-accent:focus {
4510
4543
  background-color: hsl(var(--accent));
4511
4544
  }
@@ -4688,12 +4721,29 @@
4688
4721
  .aria-disabled\:opacity-50[aria-disabled="true"] {
4689
4722
  opacity: 50%;
4690
4723
  }
4724
+ .aria-invalid\:border-\[var\(--surface-danger-border\)\][aria-invalid="true"] {
4725
+ border-color: var(--surface-danger-border);
4726
+ }
4727
+ @media (hover: hover) {
4728
+ .aria-invalid\:hover\:border-\[var\(--surface-danger-border\)\][aria-invalid="true"]:hover {
4729
+ border-color: var(--surface-danger-border);
4730
+ }
4731
+ }
4732
+ .aria-invalid\:focus\:border-\[var\(--focus-border-danger\)\][aria-invalid="true"]:focus {
4733
+ border-color: var(--focus-border-danger);
4734
+ }
4735
+ .aria-invalid\:focus\:ring-\[var\(--focus-halo-danger\)\][aria-invalid="true"]:focus {
4736
+ --tw-ring-color: var(--focus-halo-danger);
4737
+ }
4691
4738
  .data-\[disabled\]\:pointer-events-none[data-disabled] {
4692
4739
  pointer-events: none;
4693
4740
  }
4694
4741
  .data-\[disabled\]\:opacity-50[data-disabled] {
4695
4742
  opacity: 50%;
4696
4743
  }
4744
+ .data-\[placeholder\]\:text-muted-foreground[data-placeholder] {
4745
+ color: hsl(var(--muted-foreground));
4746
+ }
4697
4747
  .data-\[side\=bottom\]\:translate-y-1[data-side="bottom"] {
4698
4748
  --tw-translate-y: var(--spacing);
4699
4749
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -4736,15 +4786,25 @@
4736
4786
  .data-\[state\=checked\]\:bg-\[var\(--accent-surface-soft\)\][data-state="checked"] {
4737
4787
  background-color: var(--accent-surface-soft);
4738
4788
  }
4789
+ .data-\[state\=checked\]\:bg-\[var\(--accent-surface-strong\)\][data-state="checked"] {
4790
+ background-color: var(--accent-surface-strong);
4791
+ }
4739
4792
  .data-\[state\=checked\]\:bg-primary[data-state="checked"] {
4740
4793
  background-color: hsl(var(--primary));
4741
4794
  }
4795
+ .data-\[state\=checked\]\:font-medium[data-state="checked"] {
4796
+ --tw-font-weight: var(--font-weight-medium);
4797
+ font-weight: var(--font-weight-medium);
4798
+ }
4742
4799
  .data-\[state\=checked\]\:text-\[var\(--accent-text\)\][data-state="checked"] {
4743
4800
  color: var(--accent-text);
4744
4801
  }
4745
4802
  .data-\[state\=checked\]\:text-\[var\(--brand-primary\)\][data-state="checked"] {
4746
4803
  color: var(--brand-primary);
4747
4804
  }
4805
+ .data-\[state\=checked\]\:text-foreground[data-state="checked"] {
4806
+ color: hsl(var(--foreground));
4807
+ }
4748
4808
  .data-\[state\=inactive\]\:text-muted-foreground[data-state="inactive"] {
4749
4809
  color: hsl(var(--muted-foreground));
4750
4810
  }
@@ -4762,6 +4822,9 @@
4762
4822
  .data-\[state\=open\]\:border-\[var\(--md3-outline-variant\)\][data-state="open"] {
4763
4823
  border-color: var(--md3-outline-variant);
4764
4824
  }
4825
+ .data-\[state\=open\]\:border-primary[data-state="open"] {
4826
+ border-color: hsl(var(--primary));
4827
+ }
4765
4828
  .data-\[state\=open\]\:bg-\[var\(--accent-surface-strong\)\][data-state="open"] {
4766
4829
  background-color: var(--accent-surface-strong);
4767
4830
  }
@@ -4813,6 +4876,10 @@
4813
4876
  .motion-reduce\:transition-none {
4814
4877
  transition-property: none;
4815
4878
  }
4879
+ .motion-reduce\:duration-0 {
4880
+ --tw-duration: 0ms;
4881
+ transition-duration: 0ms;
4882
+ }
4816
4883
  .motion-reduce\:active\:scale-100:active {
4817
4884
  --tw-scale-x: 100%;
4818
4885
  --tw-scale-y: 100%;
@@ -4838,6 +4905,23 @@
4838
4905
  display: none;
4839
4906
  }
4840
4907
  }
4908
+ @media (width < 40rem) {
4909
+ .max-sm\:col-span-2 {
4910
+ grid-column: span 2 / span 2;
4911
+ }
4912
+ .max-sm\:border-b {
4913
+ border-bottom-style: var(--tw-border-style);
4914
+ border-bottom-width: 1px;
4915
+ }
4916
+ .max-sm\:border-l\! {
4917
+ border-left-style: var(--tw-border-style) !important;
4918
+ border-left-width: 1px !important;
4919
+ }
4920
+ .max-sm\:border-l-0\! {
4921
+ border-left-style: var(--tw-border-style) !important;
4922
+ border-left-width: 0px !important;
4923
+ }
4924
+ }
4841
4925
  @media (width >= 40rem) {
4842
4926
  .sm\:col-span-1 {
4843
4927
  grid-column: span 1 / span 1;
@@ -4869,6 +4953,9 @@
4869
4953
  .sm\:w-auto {
4870
4954
  width: auto;
4871
4955
  }
4956
+ .sm\:min-w-40 {
4957
+ min-width: calc(var(--spacing) * 40);
4958
+ }
4872
4959
  .sm\:shrink-0 {
4873
4960
  flex-shrink: 0;
4874
4961
  }
@@ -4902,6 +4989,9 @@
4902
4989
  .sm\:gap-2 {
4903
4990
  gap: calc(var(--spacing) * 2);
4904
4991
  }
4992
+ .sm\:gap-3 {
4993
+ gap: calc(var(--spacing) * 3);
4994
+ }
4905
4995
  .sm\:gap-x-2 {
4906
4996
  column-gap: calc(var(--spacing) * 2);
4907
4997
  }
@@ -4927,17 +5017,14 @@
4927
5017
  .sm\:px-4 {
4928
5018
  padding-inline: calc(var(--spacing) * 4);
4929
5019
  }
4930
- .sm\:px-5 {
4931
- padding-inline: calc(var(--spacing) * 5);
4932
- }
4933
5020
  .sm\:px-6 {
4934
5021
  padding-inline: calc(var(--spacing) * 6);
4935
5022
  }
4936
5023
  .sm\:py-1 {
4937
5024
  padding-block: var(--spacing);
4938
5025
  }
4939
- .sm\:py-4 {
4940
- padding-block: calc(var(--spacing) * 4);
5026
+ .sm\:pr-6 {
5027
+ padding-right: calc(var(--spacing) * 6);
4941
5028
  }
4942
5029
  .sm\:text-left {
4943
5030
  text-align: left;
@@ -4946,9 +5033,9 @@
4946
5033
  font-size: var(--text-5xl);
4947
5034
  line-height: var(--tw-leading, var(--text-5xl--line-height));
4948
5035
  }
4949
- .sm\:break-normal {
4950
- overflow-wrap: normal;
4951
- word-break: normal;
5036
+ .sm\:text-sm {
5037
+ font-size: var(--text-sm);
5038
+ line-height: var(--tw-leading, var(--text-sm--line-height));
4952
5039
  }
4953
5040
  .sm\:opacity-0 {
4954
5041
  opacity: 0%;
@@ -4978,6 +5065,9 @@
4978
5065
  .md\:hidden {
4979
5066
  display: none;
4980
5067
  }
5068
+ .md\:table-cell {
5069
+ display: table-cell;
5070
+ }
4981
5071
  .md\:grid-cols-2 {
4982
5072
  grid-template-columns: repeat(2, minmax(0, 1fr));
4983
5073
  }
@@ -5033,6 +5123,9 @@
5033
5123
  .lg\:grid-cols-4 {
5034
5124
  grid-template-columns: repeat(4, minmax(0, 1fr));
5035
5125
  }
5126
+ .lg\:grid-cols-5 {
5127
+ grid-template-columns: repeat(5, minmax(0, 1fr));
5128
+ }
5036
5129
  .lg\:grid-cols-6 {
5037
5130
  grid-template-columns: repeat(6, minmax(0, 1fr));
5038
5131
  }
@@ -5216,29 +5309,43 @@
5216
5309
  .\[\&\:not\(\:first-child\)\]\:pt-0:not(:first-child) {
5217
5310
  padding-top: 0px;
5218
5311
  }
5312
+ .\[\&\>\*\]\:max-w-full > * {
5313
+ max-width: 100%;
5314
+ }
5315
+ .\[\&\>\*\]\:min-w-0 > * {
5316
+ min-width: 0px;
5317
+ }
5219
5318
  @media (width < 40rem) {
5220
- .max-sm\:\[\&\:not\(\:nth-child\(2n\+1\)\)\]\:border-l:not(:nth-child(2n+1)) {
5319
+ .max-sm\:\[\&\>div\:not\(\:nth-child\(2n\+1\)\)\]\:border-l > div:not(:nth-child(2n+1)) {
5221
5320
  border-left-style: var(--tw-border-style);
5222
5321
  border-left-width: 1px;
5223
5322
  }
5224
5323
  }
5225
- @media (width >= 48rem) {
5226
- .md\:\[\&\:not\(\:nth-child\(3n\+1\)\)\]\:border-l:not(:nth-child(3n+1)) {
5324
+ @media (width >= 40rem) {
5325
+ .sm\:\[\&\>div\:not\(\:nth-child\(3n\+1\)\)\]\:border-l > div:not(:nth-child(3n+1)) {
5227
5326
  border-left-style: var(--tw-border-style);
5228
5327
  border-left-width: 1px;
5229
5328
  }
5230
- }
5231
- @media (width >= 40rem) {
5232
- .sm\:\[\&\:not\(\:nth-child\(4n\+1\)\)\]\:border-l:not(:nth-child(4n+1)) {
5329
+ @media (width < 64rem) {
5330
+ .sm\:max-lg\:\[\&\>div\:not\(\:nth-child\(3n\+1\)\)\]\:border-l > div:not(:nth-child(3n+1)) {
5331
+ border-left-style: var(--tw-border-style);
5332
+ border-left-width: 1px;
5333
+ }
5334
+ }
5335
+ .sm\:\[\&\>div\:not\(\:nth-child\(4n\+1\)\)\]\:border-l > div:not(:nth-child(4n+1)) {
5233
5336
  border-left-style: var(--tw-border-style);
5234
5337
  border-left-width: 1px;
5235
5338
  }
5236
5339
  }
5237
- .\[\&\>\*\]\:max-w-full > * {
5238
- max-width: 100%;
5239
- }
5240
- .\[\&\>\*\]\:min-w-0 > * {
5241
- min-width: 0px;
5340
+ @media (width >= 64rem) {
5341
+ .lg\:\[\&\>div\:not\(\:nth-child\(5n\+1\)\)\]\:border-l > div:not(:nth-child(5n+1)) {
5342
+ border-left-style: var(--tw-border-style);
5343
+ border-left-width: 1px;
5344
+ }
5345
+ .lg\:\[\&\>div\:not\(\:nth-child\(6n\+1\)\)\]\:border-l > div:not(:nth-child(6n+1)) {
5346
+ border-left-style: var(--tw-border-style);
5347
+ border-left-width: 1px;
5348
+ }
5242
5349
  }
5243
5350
  .\[\&\>span\]\:line-clamp-1 > span {
5244
5351
  overflow: hidden;
@@ -5246,10 +5353,24 @@
5246
5353
  -webkit-box-orient: vertical;
5247
5354
  -webkit-line-clamp: 1;
5248
5355
  }
5356
+ .\[\&\>span\]\:min-w-0 > span {
5357
+ min-width: 0px;
5358
+ }
5359
+ .\[\&\>span\]\:text-left > span {
5360
+ text-align: left;
5361
+ }
5362
+ .\[\&\>svg\]\:transition-transform > svg {
5363
+ transition-property: transform, translate, scale, rotate;
5364
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
5365
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
5366
+ }
5249
5367
  .\[\&\>tr\]\:last\:border-b-0 > tr:last-child {
5250
5368
  border-bottom-style: var(--tw-border-style);
5251
5369
  border-bottom-width: 0px;
5252
5370
  }
5371
+ .\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open] > svg {
5372
+ rotate: 180deg;
5373
+ }
5253
5374
  [data-sandbox-theme=''] .\[\[data-sandbox-theme\=\'\'\]_\&\]\:invert {
5254
5375
  --tw-invert: invert(100%);
5255
5376
  filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
@@ -6788,7 +6909,7 @@
6788
6909
  inherits: false;
6789
6910
  initial-value: 0;
6790
6911
  }
6791
- @property --tw-divide-x-reverse {
6912
+ @property --tw-divide-y-reverse {
6792
6913
  syntax: "*";
6793
6914
  inherits: false;
6794
6915
  initial-value: 0;
@@ -6798,11 +6919,6 @@
6798
6919
  inherits: false;
6799
6920
  initial-value: solid;
6800
6921
  }
6801
- @property --tw-divide-y-reverse {
6802
- syntax: "*";
6803
- inherits: false;
6804
- initial-value: 0;
6805
- }
6806
6922
  @property --tw-gradient-position {
6807
6923
  syntax: "*";
6808
6924
  inherits: false;
@@ -7103,9 +7219,8 @@
7103
7219
  --tw-skew-y: initial;
7104
7220
  --tw-space-y-reverse: 0;
7105
7221
  --tw-space-x-reverse: 0;
7106
- --tw-divide-x-reverse: 0;
7107
- --tw-border-style: solid;
7108
7222
  --tw-divide-y-reverse: 0;
7223
+ --tw-border-style: solid;
7109
7224
  --tw-gradient-position: initial;
7110
7225
  --tw-gradient-from: #0000;
7111
7226
  --tw-gradient-via: #0000;
@@ -0,0 +1,2 @@
1
+ import { CSV_PREVIEW_ROW_LIMIT, FileArtifactPane as FileArtifactPane$1, FileArtifactPaneProps, FileFormat, FileNode as FileNode$1, FilePreview, FilePreviewKind, FilePreviewProps, FileTabData as FileTabData$1, FileTabs, FileTabsProps, FileTree as FileTree$1, FileTreeProps, FileTreeVisibilityOptions as FileTreeVisibilityOptions$1, RichFileTree as RichFileTree$1, RichFileTreeGitEntry, RichFileTreeGitStatus, RichFileTreeProps as RichFileTreeProps$1, RichFileTreeThemeVars, detectFileFormat, fileExtension, filterFileTree as filterFileTree$1, getCodeLanguage, getFormatLabel, getSyntaxLanguage, parseCsv, resolveFilePreviewKind } from "@tangle-network/ui/files";
2
+ export { getCodeLanguage as C, resolveFilePreviewKind as D, parseCsv as E, filterFileTree$1 as S, getSyntaxLanguage as T, RichFileTreeGitStatus as _, FileNode$1 as a, detectFileFormat as b, FilePreviewProps as c, FileTabsProps as d, FileTree$1 as f, RichFileTreeGitEntry as g, RichFileTree$1 as h, FileFormat as i, FileTabData$1 as l, FileTreeVisibilityOptions$1 as m, FileArtifactPane$1 as n, FilePreview as o, FileTreeProps as p, FileArtifactPaneProps as r, FilePreviewKind as s, CSV_PREVIEW_ROW_LIMIT as t, FileTabs as u, RichFileTreeProps$1 as v, getFormatLabel as w, fileExtension as x, RichFileTreeThemeVars as y };
@@ -1,7 +1,7 @@
1
1
  import { ArtifactPane as ArtifactPane$1, ArtifactPaneProps } from "@tangle-network/ui/primitives";
2
2
  import { HTMLAttributes, ReactNode, Ref } from "react";
3
3
  import { LucideIcon } from "lucide-react";
4
- import { FileNode, FileTabData, FileTreeVisibilityOptions } from "@tangle-network/ui/files";
4
+ import { FileNode, FileTabData, FileTreeVisibilityOptions, RichFileTreeProps } from "@tangle-network/ui/files";
5
5
  import { ActiveSessionRecord, ActiveSessionStatus, SessionProjectKey } from "@tangle-network/ui/stores";
6
6
  import { ChatContainerProps } from "@tangle-network/ui/chat";
7
7
  import { OpenUIAction, OpenUIComponentNode } from "@tangle-network/ui/openui";
@@ -774,4 +774,36 @@ interface ApprovalQueueProps {
774
774
  */
775
775
  declare function ApprovalQueue({ items, className, onApprove, onReject, renderItemDetail, renderTypeBadge, renderStats, canResolve, header, emptyState, showResolved: controlledShowResolved }: ApprovalQueueProps): import("react").JSX.Element;
776
776
  //#endregion
777
- export { TerminalProps as $, ShellShouldRevalidateArgs as A, SessionSidebarLink as B, SandboxWorkbenchLayoutOptions as C, SandboxWorkbenchSessionProps as D, SandboxWorkbenchProps as E, SessionSidebar as F, SessionOptimisticController as G, SessionSidebarVariant as H, SessionSidebarBadge as I, useOptimisticSessionItems as J, UseOptimisticSessionItemsOptions as K, SessionSidebarFilter as L, createShellShouldRevalidate as M, shellShouldRevalidate as N, SessionActivityMonitor as O, formatRelativeAge as P, TerminalPanel as Q, SessionSidebarGroupBy as R, SandboxWorkbenchFileArtifact as S, SandboxWorkbenchOpenUIArtifact as T, SESSION_CREATED_EVENT as U, SessionSidebarProps as V, SessionCreatedDetail as W, RuntimePaneProps as X, RuntimePane as Y, TerminalLine as Z, FormAudit as _, ApprovalQueue as a, StatusBannerProps as at, SandboxWorkbenchArtifact as b, CalendarView as c, WorkspacePaneHeader as ct, TaskBoardColumn as d, WorkspaceLayoutProps as dt, ContextBadge as et, TaskBoardItem as f, AuditResultsProps as g, AuditResults as h, ApprovalItem as i, StatusBanner as it, ShellShouldRevalidateOptions as j, SessionActivityMonitorProps as k, CalendarViewProps as l, WorkspacePaneHeaderProps as lt, AuditCheck as m, ArtifactPaneProps as n, StatusBarProps as nt, ApprovalQueueProps as o, DirectoryPane as ot, TaskBoardProps as p, dispatchSessionCreated as q, ApprovalConfidenceStat as r, BannerType as rt, CalendarEvent as s, DirectoryPaneProps as st, ArtifactPane$1 as t, StatusBar as tt, TaskBoard as u, WorkspaceLayout as ut, AgentWorkbench as v, SandboxWorkbenchMarkdownArtifact as w, SandboxWorkbenchCustomArtifact as x, SandboxWorkbench as y, SessionSidebarItem as z };
777
+ //#region src/workspace/workspace-files-pane.d.ts
778
+ interface WorkspaceFilesPreview {
779
+ path: string;
780
+ content: ReactNode;
781
+ actions?: ReactNode;
782
+ }
783
+ type WorkspaceFilesSource = {
784
+ root: FileNode;
785
+ paths?: never;
786
+ } | {
787
+ paths: ReadonlyArray<string>;
788
+ root?: never;
789
+ };
790
+ type WorkspaceFilesPaneProps = Omit<RichFileTreeProps, "root" | "paths" | "onSelect" | "className"> & WorkspaceFilesSource & {
791
+ /** Root inputs preserve the original node. Flat path inputs have no node metadata. */
792
+ onSelect?: (path: string, node?: FileNode) => void;
793
+ preview?: WorkspaceFilesPreview;
794
+ onBack?: () => void;
795
+ /** Supply loading, unavailable, or empty content from the authoritative adapter. */
796
+ emptyState?: ReactNode;
797
+ className?: string;
798
+ };
799
+ /** Compact file navigation shared by workspace companions and standalone panes. */
800
+ declare function WorkspaceFilesPane({ root, paths, onSelect, preview, onBack, emptyState, className, ...treeProps }: WorkspaceFilesPaneProps): import("react").JSX.Element;
801
+ //#endregion
802
+ //#region src/workspace/workspace-artifact-view.d.ts
803
+ interface WorkspaceArtifactViewProps {
804
+ artifact: SandboxWorkbenchArtifact;
805
+ }
806
+ /** The shared technical renderer for workspace files and generated artifacts. */
807
+ declare function WorkspaceArtifactView({ artifact }: WorkspaceArtifactViewProps): import("react").JSX.Element;
808
+ //#endregion
809
+ export { useOptimisticSessionItems as $, SandboxWorkbenchOpenUIArtifact as A, SessionSidebar as B, AgentWorkbench as C, SandboxWorkbenchFileArtifact as D, SandboxWorkbenchCustomArtifact as E, ShellShouldRevalidateArgs as F, SessionSidebarLink as G, SessionSidebarFilter as H, ShellShouldRevalidateOptions as I, SESSION_CREATED_EVENT as J, SessionSidebarProps as K, createShellShouldRevalidate as L, SandboxWorkbenchSessionProps as M, SessionActivityMonitor as N, SandboxWorkbenchLayoutOptions as O, SessionActivityMonitorProps as P, dispatchSessionCreated as Q, shellShouldRevalidate as R, FormAudit as S, SandboxWorkbenchArtifact as T, SessionSidebarGroupBy as U, SessionSidebarBadge as V, SessionSidebarItem as W, SessionOptimisticController as X, SessionCreatedDetail as Y, UseOptimisticSessionItemsOptions as Z, TaskBoardItem as _, WorkspaceFilesPane as a, ContextBadge as at, AuditResults as b, ApprovalConfidenceStat as c, BannerType as ct, ApprovalQueueProps as d, DirectoryPane as dt, RuntimePane as et, CalendarEvent as f, DirectoryPaneProps as ft, TaskBoardColumn as g, WorkspaceLayoutProps as gt, TaskBoard as h, WorkspaceLayout as ht, WorkspaceArtifactViewProps as i, TerminalProps as it, SandboxWorkbenchProps as j, SandboxWorkbenchMarkdownArtifact as k, ApprovalItem as l, StatusBanner as lt, CalendarViewProps as m, WorkspacePaneHeaderProps as mt, ArtifactPaneProps as n, TerminalLine as nt, WorkspaceFilesPaneProps as o, StatusBar as ot, CalendarView as p, WorkspacePaneHeader as pt, SessionSidebarVariant as q, WorkspaceArtifactView as r, TerminalPanel as rt, WorkspaceFilesPreview as s, StatusBarProps as st, ArtifactPane$1 as t, RuntimePaneProps as tt, ApprovalQueue as u, StatusBannerProps as ut, TaskBoardProps as v, SandboxWorkbench as w, AuditResultsProps as x, AuditCheck as y, formatRelativeAge as z };
@@ -1,5 +1,5 @@
1
1
  import { v as ExposedPort } from "./index-CGMpKgB8.js";
2
- import { _ as RichFileTreeGitStatus, g as RichFileTreeGitEntry } from "./index-CXX5IpH2.js";
2
+ import { _ as RichFileTreeGitStatus, g as RichFileTreeGitEntry } from "./index-B6wKsKV6.js";
3
3
  import { a as PreviewReadiness, i as PreviewAccess } from "./embedded-app-view-B_vMTtJn.js";
4
4
  import * as React$1 from "react";
5
5
  import { CSSProperties } from "react";