@tangle-network/sandbox-ui 0.91.2 → 0.91.4

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.
@@ -18,7 +18,27 @@ import {
18
18
  PanelRightOpen,
19
19
  X
20
20
  } from "lucide-react";
21
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
21
+
22
+ // src/workspace/workspace-pane-header.tsx
23
+ import { jsx } from "react/jsx-runtime";
24
+ function WorkspacePaneHeader({
25
+ className,
26
+ ...props
27
+ }) {
28
+ return /* @__PURE__ */ jsx(
29
+ "div",
30
+ {
31
+ className: cn(
32
+ "flex h-14 shrink-0 items-center border-b border-[var(--md3-outline-variant)] bg-surface-container-high px-3",
33
+ className
34
+ ),
35
+ ...props
36
+ }
37
+ );
38
+ }
39
+
40
+ // src/workspace/workspace-layout.tsx
41
+ import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
22
42
  var DESKTOP_BREAKPOINT = "(min-width: 1024px)";
23
43
  function clamp(value, min, max) {
24
44
  return Math.min(Math.max(value, min), max);
@@ -82,8 +102,8 @@ function ResizeHandle({ label, onDragStart, onStep, className }) {
82
102
  className
83
103
  ),
84
104
  children: [
85
- /* @__PURE__ */ jsx("span", { className: "absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-[var(--md3-outline-variant)] transition-colors" }),
86
- /* @__PURE__ */ jsx("span", { className: "absolute inset-y-0 left-1/2 w-[3px] -translate-x-1/2 rounded-full bg-transparent hover:bg-primary/30 focus-visible:bg-primary/40" })
105
+ /* @__PURE__ */ jsx2("span", { className: "absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-[var(--md3-outline-variant)] transition-colors" }),
106
+ /* @__PURE__ */ jsx2("span", { className: "absolute inset-y-0 left-1/2 w-[3px] -translate-x-1/2 rounded-full bg-transparent hover:bg-primary/30 focus-visible:bg-primary/40" })
87
107
  ]
88
108
  }
89
109
  );
@@ -119,15 +139,15 @@ function HorizontalResizeHandle({ label, onDragStart, onStep, className }) {
119
139
  className
120
140
  ),
121
141
  children: [
122
- /* @__PURE__ */ jsx("span", { className: "absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-[var(--md3-outline-variant)] transition-colors" }),
123
- /* @__PURE__ */ jsx("span", { className: "absolute inset-x-0 top-1/2 h-[3px] -translate-y-1/2 rounded-full bg-transparent hover:bg-primary/30 focus-visible:bg-primary/40" })
142
+ /* @__PURE__ */ jsx2("span", { className: "absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-[var(--md3-outline-variant)] transition-colors" }),
143
+ /* @__PURE__ */ jsx2("span", { className: "absolute inset-x-0 top-1/2 h-[3px] -translate-y-1/2 rounded-full bg-transparent hover:bg-primary/30 focus-visible:bg-primary/40" })
124
144
  ]
125
145
  }
126
146
  );
127
147
  }
128
148
  function MobileDrawer({ side, title, header, onClose, children }) {
129
149
  return /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-50 flex lg:hidden", "aria-modal": "true", role: "dialog", "aria-label": title, children: [
130
- /* @__PURE__ */ jsx(
150
+ /* @__PURE__ */ jsx2(
131
151
  "button",
132
152
  {
133
153
  type: "button",
@@ -144,20 +164,20 @@ function MobileDrawer({ side, title, header, onClose, children }) {
144
164
  side === "left" ? "border-r" : "ml-auto border-l"
145
165
  ),
146
166
  children: [
147
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-[var(--md3-outline-variant)] px-3 py-2", children: [
148
- /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: header ?? /* @__PURE__ */ jsx("span", { className: "text-[13px] font-medium text-foreground", children: title }) }),
149
- /* @__PURE__ */ jsx(
167
+ /* @__PURE__ */ jsxs(WorkspacePaneHeader, { className: "justify-between gap-3", children: [
168
+ /* @__PURE__ */ jsx2("div", { className: "min-w-0 flex-1", children: header ?? /* @__PURE__ */ jsx2("span", { className: "text-[13px] font-medium text-foreground", children: title }) }),
169
+ /* @__PURE__ */ jsx2(
150
170
  "button",
151
171
  {
152
172
  type: "button",
153
173
  "aria-label": `Close ${title}`,
154
174
  onClick: onClose,
155
175
  className: "rounded-[2px] p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60",
156
- children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
176
+ children: /* @__PURE__ */ jsx2(X, { className: "h-4 w-4" })
157
177
  }
158
178
  )
159
179
  ] }),
160
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-auto", children })
180
+ /* @__PURE__ */ jsx2("div", { className: "flex-1 overflow-auto", children })
161
181
  ]
162
182
  }
163
183
  )
@@ -300,24 +320,24 @@ function WorkspaceLayout({
300
320
  style: leftStyle,
301
321
  className: "hidden shrink-0 border-r border-[var(--md3-outline-variant)] bg-surface-container-low lg:flex lg:flex-col",
302
322
  children: [
303
- leftHeader && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 border-b border-[var(--md3-outline-variant)] px-3 py-1.5 bg-surface-container-high", children: [
304
- /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: leftHeader }),
305
- /* @__PURE__ */ jsx(
323
+ leftHeader && /* @__PURE__ */ jsxs(WorkspacePaneHeader, { className: "justify-between gap-2", children: [
324
+ /* @__PURE__ */ jsx2("div", { className: "min-w-0 flex-1", children: leftHeader }),
325
+ /* @__PURE__ */ jsx2(
306
326
  "button",
307
327
  {
308
328
  type: "button",
309
329
  "aria-label": "Collapse left panel",
310
330
  onClick: () => setLeftOpen(false),
311
331
  className: "rounded-[2px] p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60",
312
- children: /* @__PURE__ */ jsx(PanelLeftClose, { className: "h-4 w-4" })
332
+ children: /* @__PURE__ */ jsx2(PanelLeftClose, { className: "h-4 w-4" })
313
333
  }
314
334
  )
315
335
  ] }),
316
- /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto py-1", children: left })
336
+ /* @__PURE__ */ jsx2("div", { className: "min-h-0 flex-1 overflow-auto py-1", children: left })
317
337
  ]
318
338
  }
319
339
  ),
320
- resizable && /* @__PURE__ */ jsx(
340
+ resizable && /* @__PURE__ */ jsx2(
321
341
  ResizeHandle,
322
342
  {
323
343
  label: "Resize left panel",
@@ -327,42 +347,42 @@ function WorkspaceLayout({
327
347
  )
328
348
  ] }),
329
349
  /* @__PURE__ */ jsxs("main", { className: "flex min-w-0 flex-1 flex-col", children: [
330
- (centerHeader || left || right || bottom) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-b border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-1.5", children: [
331
- left && !leftOpen && /* @__PURE__ */ jsx(
350
+ (centerHeader || left || right || bottom) && /* @__PURE__ */ jsxs(WorkspacePaneHeader, { className: "gap-2", children: [
351
+ left && !leftOpen && /* @__PURE__ */ jsx2(
332
352
  "button",
333
353
  {
334
354
  type: "button",
335
355
  "aria-label": "Open left panel",
336
356
  onClick: () => setLeftOpen(true),
337
357
  className: "rounded-[2px] p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60",
338
- children: /* @__PURE__ */ jsx(PanelLeftOpen, { className: "h-4 w-4" })
358
+ children: /* @__PURE__ */ jsx2(PanelLeftOpen, { className: "h-4 w-4" })
339
359
  }
340
360
  ),
341
- /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: centerHeader }),
342
- bottom && !bottomOpen && /* @__PURE__ */ jsx(
361
+ /* @__PURE__ */ jsx2("div", { className: "min-w-0 flex-1", children: centerHeader }),
362
+ bottom && !bottomOpen && /* @__PURE__ */ jsx2(
343
363
  "button",
344
364
  {
345
365
  type: "button",
346
366
  "aria-label": "Open bottom panel",
347
367
  onClick: () => setBottomOpen(true),
348
368
  className: "rounded-[2px] p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60",
349
- children: /* @__PURE__ */ jsx(PanelBottomOpen, { className: "h-4 w-4" })
369
+ children: /* @__PURE__ */ jsx2(PanelBottomOpen, { className: "h-4 w-4" })
350
370
  }
351
371
  ),
352
- right && !rightOpen && /* @__PURE__ */ jsx(
372
+ right && !rightOpen && /* @__PURE__ */ jsx2(
353
373
  "button",
354
374
  {
355
375
  type: "button",
356
376
  "aria-label": "Open right panel",
357
377
  onClick: () => setRightOpen(true),
358
378
  className: "rounded-[2px] p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60",
359
- children: /* @__PURE__ */ jsx(PanelRightOpen, { className: "h-4 w-4" })
379
+ children: /* @__PURE__ */ jsx2(PanelRightOpen, { className: "h-4 w-4" })
360
380
  }
361
381
  )
362
382
  ] }),
363
- /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: center }),
383
+ /* @__PURE__ */ jsx2("div", { className: "min-h-0 flex-1 overflow-auto", children: center }),
364
384
  bottom && bottomOpen && /* @__PURE__ */ jsxs(Fragment, { children: [
365
- resizable && /* @__PURE__ */ jsx(
385
+ resizable && /* @__PURE__ */ jsx2(
366
386
  HorizontalResizeHandle,
367
387
  {
368
388
  label: "Resize bottom panel",
@@ -370,7 +390,7 @@ function WorkspaceLayout({
370
390
  onStep: stepBottomHeight
371
391
  }
372
392
  ),
373
- /* @__PURE__ */ jsx(
393
+ /* @__PURE__ */ jsx2(
374
394
  "section",
375
395
  {
376
396
  "aria-label": bottomLabel,
@@ -378,27 +398,27 @@ function WorkspaceLayout({
378
398
  style: { height: `${bottomHeight}px` },
379
399
  children: /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col", children: [
380
400
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 border-b border-[var(--md3-outline-variant)] px-3 py-1.5 bg-surface-container-high shrink-0", children: [
381
- /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: bottomHeader ?? /* @__PURE__ */ jsx("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: "Runtime" }) }),
382
- /* @__PURE__ */ jsx(
401
+ /* @__PURE__ */ jsx2("div", { className: "min-w-0 flex-1", children: bottomHeader ?? /* @__PURE__ */ jsx2("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: "Runtime" }) }),
402
+ /* @__PURE__ */ jsx2(
383
403
  "button",
384
404
  {
385
405
  type: "button",
386
406
  "aria-label": "Collapse bottom panel",
387
407
  onClick: () => setBottomOpen(false),
388
408
  className: "rounded-[2px] p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60",
389
- children: /* @__PURE__ */ jsx(PanelBottomClose, { className: "h-4 w-4" })
409
+ children: /* @__PURE__ */ jsx2(PanelBottomClose, { className: "h-4 w-4" })
390
410
  }
391
411
  )
392
412
  ] }),
393
- /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: bottom })
413
+ /* @__PURE__ */ jsx2("div", { className: "min-h-0 flex-1 overflow-auto", children: bottom })
394
414
  ] })
395
415
  }
396
416
  )
397
417
  ] }),
398
- centerFooter && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-[var(--md3-outline-variant)] bg-surface-container-low", children: centerFooter })
418
+ centerFooter && /* @__PURE__ */ jsx2("div", { className: "shrink-0 border-t border-[var(--md3-outline-variant)] bg-surface-container-low", children: centerFooter })
399
419
  ] }),
400
420
  desktop && right && rightOpen && /* @__PURE__ */ jsxs(Fragment, { children: [
401
- resizable && /* @__PURE__ */ jsx(
421
+ resizable && /* @__PURE__ */ jsx2(
402
422
  ResizeHandle,
403
423
  {
404
424
  label: "Resize right panel",
@@ -413,26 +433,26 @@ function WorkspaceLayout({
413
433
  style: rightStyle,
414
434
  className: "hidden shrink-0 border-l border-[var(--md3-outline-variant)] bg-surface-container-low lg:flex lg:flex-col",
415
435
  children: [
416
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 border-b border-[var(--md3-outline-variant)] px-3 py-1.5 bg-surface-container-high", children: [
417
- /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: rightHeader ?? /* @__PURE__ */ jsx("span", { className: "text-[13px] font-medium text-foreground", children: "Artifacts" }) }),
418
- /* @__PURE__ */ jsx(
436
+ /* @__PURE__ */ jsxs(WorkspacePaneHeader, { className: "justify-between gap-2", children: [
437
+ /* @__PURE__ */ jsx2("div", { className: "min-w-0 flex-1", children: rightHeader ?? /* @__PURE__ */ jsx2("span", { className: "text-[13px] font-medium text-foreground", children: "Artifacts" }) }),
438
+ /* @__PURE__ */ jsx2(
419
439
  "button",
420
440
  {
421
441
  type: "button",
422
442
  "aria-label": "Collapse right panel",
423
443
  onClick: () => setRightOpen(false),
424
444
  className: "rounded-[2px] p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60",
425
- children: /* @__PURE__ */ jsx(PanelRightClose, { className: "h-4 w-4" })
445
+ children: /* @__PURE__ */ jsx2(PanelRightClose, { className: "h-4 w-4" })
426
446
  }
427
447
  )
428
448
  ] }),
429
- /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: right })
449
+ /* @__PURE__ */ jsx2("div", { className: "min-h-0 flex-1 overflow-auto", children: right })
430
450
  ]
431
451
  }
432
452
  )
433
453
  ] })
434
454
  ] }),
435
- !desktop && left && leftOpen && /* @__PURE__ */ jsx(
455
+ !desktop && left && leftOpen && /* @__PURE__ */ jsx2(
436
456
  MobileDrawer,
437
457
  {
438
458
  side: "left",
@@ -442,7 +462,7 @@ function WorkspaceLayout({
442
462
  children: left
443
463
  }
444
464
  ),
445
- !desktop && right && rightOpen && /* @__PURE__ */ jsx(
465
+ !desktop && right && rightOpen && /* @__PURE__ */ jsx2(
446
466
  MobileDrawer,
447
467
  {
448
468
  side: "right",
@@ -470,7 +490,7 @@ import {
470
490
  } from "@tangle-network/ui/files";
471
491
  import { EmptyState } from "@tangle-network/ui/primitives";
472
492
  import { Input } from "@tangle-network/ui/primitives";
473
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
493
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
474
494
  function countNodes(node) {
475
495
  if (node.type === "file") {
476
496
  return { files: 1, directories: 0 };
@@ -522,7 +542,7 @@ function DirectoryPane({
522
542
  [query, visibleRoot]
523
543
  );
524
544
  const counts = useMemo2(() => visibleRoot ? countNodes(visibleRoot) : { files: 0, directories: 0 }, [visibleRoot]);
525
- return /* @__PURE__ */ jsx2(
545
+ return /* @__PURE__ */ jsx3(
526
546
  ArtifactPane,
527
547
  {
528
548
  eyebrow: "Workspace",
@@ -530,7 +550,7 @@ function DirectoryPane({
530
550
  subtitle: subtitle ?? root.path,
531
551
  className,
532
552
  toolbar: /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2", children: [
533
- /* @__PURE__ */ jsx2("div", { className: "flex-1", children: /* @__PURE__ */ jsx2(
553
+ /* @__PURE__ */ jsx3("div", { className: "flex-1", children: /* @__PURE__ */ jsx3(
534
554
  Input,
535
555
  {
536
556
  value: query,
@@ -539,24 +559,24 @@ function DirectoryPane({
539
559
  className: "h-7 text-xs rounded-[2px]"
540
560
  }
541
561
  ) }),
542
- onRefresh && /* @__PURE__ */ jsx2(
562
+ onRefresh && /* @__PURE__ */ jsx3(
543
563
  "button",
544
564
  {
545
565
  type: "button",
546
566
  "aria-label": "Refresh directory",
547
567
  onClick: onRefresh,
548
568
  className: "rounded-[2px] p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60",
549
- children: /* @__PURE__ */ jsx2(RefreshCw, { className: "h-4 w-4" })
569
+ children: /* @__PURE__ */ jsx3(RefreshCw, { className: "h-4 w-4" })
550
570
  }
551
571
  ),
552
- onUpload && /* @__PURE__ */ jsx2(
572
+ onUpload && /* @__PURE__ */ jsx3(
553
573
  "button",
554
574
  {
555
575
  type: "button",
556
576
  "aria-label": "Upload files",
557
577
  onClick: onUpload,
558
578
  className: "rounded-[2px] p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60",
559
- children: /* @__PURE__ */ jsx2(Upload, { className: "h-4 w-4" })
579
+ children: /* @__PURE__ */ jsx3(Upload, { className: "h-4 w-4" })
560
580
  }
561
581
  )
562
582
  ] }),
@@ -570,15 +590,15 @@ function DirectoryPane({
570
590
  " folders"
571
591
  ] })
572
592
  ] }),
573
- emptyState: /* @__PURE__ */ jsx2(
593
+ emptyState: /* @__PURE__ */ jsx3(
574
594
  EmptyState,
575
595
  {
576
- icon: /* @__PURE__ */ jsx2(Search, { className: "h-8 w-8" }),
596
+ icon: /* @__PURE__ */ jsx3(Search, { className: "h-8 w-8" }),
577
597
  title: "No matching files",
578
598
  description: "Try a different search or clear the current filter."
579
599
  }
580
600
  ),
581
- children: filteredRoot ? /* @__PURE__ */ jsx2("div", { className: "py-2", children: /* @__PURE__ */ jsx2(
601
+ children: filteredRoot ? /* @__PURE__ */ jsx3("div", { className: "py-2", children: /* @__PURE__ */ jsx3(
582
602
  FileTree,
583
603
  {
584
604
  root: filteredRoot,
@@ -597,7 +617,7 @@ import { Binary, ShieldCheck, TerminalSquare } from "lucide-react";
597
617
 
598
618
  // src/workspace/status-banner.tsx
599
619
  import { Loader2, AlertCircle, CheckCircle, Wifi } from "lucide-react";
600
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
620
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
601
621
  var BANNER_STYLES = {
602
622
  provisioning: { bg: "bg-primary/5", border: "border-primary/20", text: "text-primary", icon: Loader2 },
603
623
  connecting: { bg: "bg-[var(--code-number)]/5", border: "border-[var(--code-number)]/20", text: "text-[var(--code-number)]", icon: Wifi },
@@ -619,10 +639,10 @@ function StatusBanner({ type, message, detail, onDismiss, className }) {
619
639
  className
620
640
  ),
621
641
  children: [
622
- /* @__PURE__ */ jsx3(Icon, { className: cn("h-4 w-4 shrink-0", style.text, isAnimated && "animate-spin") }),
623
- /* @__PURE__ */ jsx3("span", { className: "font-medium text-foreground", children: message }),
624
- detail && /* @__PURE__ */ jsx3("span", { className: "font-mono text-xs text-muted-foreground tabular-nums", children: detail }),
625
- onDismiss && /* @__PURE__ */ jsx3(
642
+ /* @__PURE__ */ jsx4(Icon, { className: cn("h-4 w-4 shrink-0", style.text, isAnimated && "animate-spin") }),
643
+ /* @__PURE__ */ jsx4("span", { className: "font-medium text-foreground", children: message }),
644
+ detail && /* @__PURE__ */ jsx4("span", { className: "font-mono text-xs text-muted-foreground tabular-nums", children: detail }),
645
+ onDismiss && /* @__PURE__ */ jsx4(
626
646
  "button",
627
647
  {
628
648
  onClick: onDismiss,
@@ -637,7 +657,7 @@ function StatusBanner({ type, message, detail, onDismiss, className }) {
637
657
 
638
658
  // src/workspace/status-bar.tsx
639
659
  import { Zap, FileText, X as X2 } from "lucide-react";
640
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
660
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
641
661
  var STATUS_LABELS = {
642
662
  connected: { label: "Connected", color: "bg-[var(--code-success)]" },
643
663
  connecting: { label: "Connecting\u2026", color: "bg-[var(--code-number)]" },
@@ -661,7 +681,7 @@ function StatusBar({
661
681
  ),
662
682
  children: [
663
683
  /* @__PURE__ */ jsxs4("span", { className: "inline-flex items-center gap-1.5 text-muted-foreground", children: [
664
- /* @__PURE__ */ jsx4("span", { className: cn("w-1.5 h-1.5 rounded-full", statusInfo.color) }),
684
+ /* @__PURE__ */ jsx5("span", { className: cn("w-1.5 h-1.5 rounded-full", statusInfo.color) }),
665
685
  statusInfo.label
666
686
  ] }),
667
687
  contextBadges.map((badge) => /* @__PURE__ */ jsxs4(
@@ -669,26 +689,26 @@ function StatusBar({
669
689
  {
670
690
  className: "inline-flex items-center gap-1 px-2 py-0.5 rounded-[2px] border border-[var(--md3-outline-variant)] text-foreground bg-[var(--border-accent)]/5",
671
691
  children: [
672
- /* @__PURE__ */ jsx4(FileText, { className: "h-3 w-3" }),
692
+ /* @__PURE__ */ jsx5(FileText, { className: "h-3 w-3" }),
673
693
  badge.label,
674
- badge.count !== void 0 && /* @__PURE__ */ jsx4("span", { className: "text-muted-foreground", children: badge.count }),
675
- onRemoveBadge && /* @__PURE__ */ jsx4(
694
+ badge.count !== void 0 && /* @__PURE__ */ jsx5("span", { className: "text-muted-foreground", children: badge.count }),
695
+ onRemoveBadge && /* @__PURE__ */ jsx5(
676
696
  "button",
677
697
  {
678
698
  onClick: () => onRemoveBadge(badge.id),
679
699
  className: "hover:text-foreground transition-colors",
680
- children: /* @__PURE__ */ jsx4(X2, { className: "h-2.5 w-2.5" })
700
+ children: /* @__PURE__ */ jsx5(X2, { className: "h-2.5 w-2.5" })
681
701
  }
682
702
  )
683
703
  ]
684
704
  },
685
705
  badge.id
686
706
  )),
687
- /* @__PURE__ */ jsx4("div", { className: "flex-1" }),
707
+ /* @__PURE__ */ jsx5("div", { className: "flex-1" }),
688
708
  credits !== void 0 && /* @__PURE__ */ jsxs4("span", { className: "inline-flex items-center gap-1 text-muted-foreground", children: [
689
- /* @__PURE__ */ jsx4(Zap, { className: "h-3 w-3 shrink-0" }),
690
- /* @__PURE__ */ jsx4("span", { className: "font-mono tabular-nums", children: credits.toLocaleString() }),
691
- /* @__PURE__ */ jsx4("span", { children: "credits" })
709
+ /* @__PURE__ */ jsx5(Zap, { className: "h-3 w-3 shrink-0" }),
710
+ /* @__PURE__ */ jsx5("span", { className: "font-mono tabular-nums", children: credits.toLocaleString() }),
711
+ /* @__PURE__ */ jsx5("span", { children: "credits" })
692
712
  ] })
693
713
  ]
694
714
  }
@@ -698,7 +718,7 @@ function StatusBar({
698
718
  // src/workspace/terminal-panel.tsx
699
719
  import { useRef as useRef2, useEffect as useEffect2 } from "react";
700
720
  import { Terminal as TerminalIcon, ChevronDown, ChevronUp, X as X3 } from "lucide-react";
701
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
721
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
702
722
  var LINE_COLORS = {
703
723
  command: "text-[var(--code-function)]",
704
724
  stdout: "text-foreground",
@@ -733,15 +753,15 @@ function TerminalPanel({
733
753
  onClick: onToggle,
734
754
  className: "flex items-center gap-2 w-full px-3 py-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors",
735
755
  children: [
736
- /* @__PURE__ */ jsx5(TerminalIcon, { className: "h-3.5 w-3.5" }),
737
- /* @__PURE__ */ jsx5("span", { className: "font-medium", children: title }),
738
- lines.length > 0 && /* @__PURE__ */ jsx5("span", { className: "px-1.5 py-0.5 rounded-full bg-surface-container-high text-[10px] tabular-nums", children: lines.length }),
739
- /* @__PURE__ */ jsx5("div", { className: "flex-1" }),
740
- onClose && /* @__PURE__ */ jsx5(X3, { className: "h-3 w-3 hover:text-foreground", onClick: (e) => {
756
+ /* @__PURE__ */ jsx6(TerminalIcon, { className: "h-3.5 w-3.5" }),
757
+ /* @__PURE__ */ jsx6("span", { className: "font-medium", children: title }),
758
+ lines.length > 0 && /* @__PURE__ */ jsx6("span", { className: "px-1.5 py-0.5 rounded-full bg-surface-container-high text-[10px] tabular-nums", children: lines.length }),
759
+ /* @__PURE__ */ jsx6("div", { className: "flex-1" }),
760
+ onClose && /* @__PURE__ */ jsx6(X3, { className: "h-3 w-3 hover:text-foreground", onClick: (e) => {
741
761
  e.stopPropagation();
742
762
  onClose();
743
763
  } }),
744
- isCollapsed ? /* @__PURE__ */ jsx5(ChevronUp, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx5(ChevronDown, { className: "h-3 w-3" })
764
+ isCollapsed ? /* @__PURE__ */ jsx6(ChevronUp, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx6(ChevronDown, { className: "h-3 w-3" })
745
765
  ]
746
766
  }
747
767
  ),
@@ -753,10 +773,10 @@ function TerminalPanel({
753
773
  style: { maxHeight },
754
774
  children: [
755
775
  lines.map((line) => /* @__PURE__ */ jsxs5("div", { className: cn("whitespace-pre-wrap", LINE_COLORS[line.type]), children: [
756
- /* @__PURE__ */ jsx5("span", { className: "text-muted-foreground select-none", children: LINE_PREFIXES[line.type] }),
776
+ /* @__PURE__ */ jsx6("span", { className: "text-muted-foreground select-none", children: LINE_PREFIXES[line.type] }),
757
777
  line.text
758
778
  ] }, line.id)),
759
- lines.length === 0 && /* @__PURE__ */ jsx5("div", { className: "text-muted-foreground py-2", children: "No output yet" })
779
+ lines.length === 0 && /* @__PURE__ */ jsx6("div", { className: "text-muted-foreground py-2", children: "No output yet" })
760
780
  ]
761
781
  }
762
782
  )
@@ -764,7 +784,7 @@ function TerminalPanel({
764
784
  }
765
785
 
766
786
  // src/workspace/runtime-pane.tsx
767
- import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
787
+ import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
768
788
  function RuntimePane({
769
789
  title = "Runtime",
770
790
  subtitle = "Session state, execution output, and inspection surfaces",
@@ -786,35 +806,35 @@ function RuntimePane({
786
806
  ),
787
807
  children: [
788
808
  /* @__PURE__ */ jsxs6("header", { className: "border-b border-[var(--md3-outline-variant)] bg-surface-container-high bg-[linear-gradient(180deg,rgba(255,255,255,0.03),transparent)] px-4 py-3", children: [
789
- /* @__PURE__ */ jsx6("div", { className: "mb-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground", children: "Sandbox" }),
790
- /* @__PURE__ */ jsx6("div", { className: "text-sm font-semibold text-foreground", children: title }),
791
- /* @__PURE__ */ jsx6("div", { className: "mt-1 text-xs text-muted-foreground", children: subtitle })
809
+ /* @__PURE__ */ jsx7("div", { className: "mb-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground", children: "Sandbox" }),
810
+ /* @__PURE__ */ jsx7("div", { className: "text-sm font-semibold text-foreground", children: title }),
811
+ /* @__PURE__ */ jsx7("div", { className: "mt-1 text-xs text-muted-foreground", children: subtitle })
792
812
  ] }),
793
- statusBanner && /* @__PURE__ */ jsx6(StatusBanner, { ...statusBanner }),
794
- statusBar && /* @__PURE__ */ jsx6(StatusBar, { ...statusBar }),
795
- content ? /* @__PURE__ */ jsx6("div", { className: "min-h-0 flex-1 overflow-hidden", children: content }) : /* @__PURE__ */ jsxs6("div", { className: "grid min-h-0 flex-1 gap-px bg-[var(--md3-outline-variant)] lg:grid-cols-[minmax(0,1.35fr)_minmax(20rem,0.9fr)]", children: [
796
- /* @__PURE__ */ jsx6("div", { className: "min-h-0 overflow-auto bg-surface-container", children: terminal ? /* @__PURE__ */ jsx6(
813
+ statusBanner && /* @__PURE__ */ jsx7(StatusBanner, { ...statusBanner }),
814
+ statusBar && /* @__PURE__ */ jsx7(StatusBar, { ...statusBar }),
815
+ content ? /* @__PURE__ */ jsx7("div", { className: "min-h-0 flex-1 overflow-hidden", children: content }) : /* @__PURE__ */ jsxs6("div", { className: "grid min-h-0 flex-1 gap-px bg-[var(--md3-outline-variant)] lg:grid-cols-[minmax(0,1.35fr)_minmax(20rem,0.9fr)]", children: [
816
+ /* @__PURE__ */ jsx7("div", { className: "min-h-0 overflow-auto bg-surface-container", children: terminal ? /* @__PURE__ */ jsx7(
797
817
  TerminalPanel,
798
818
  {
799
819
  ...terminal,
800
820
  className: cn("border-t-0 bg-transparent", terminal.className)
801
821
  }
802
- ) : /* @__PURE__ */ jsx6("div", { className: "flex h-full items-center justify-center p-6 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
803
- /* @__PURE__ */ jsx6(TerminalSquare, { className: "h-4 w-4" }),
822
+ ) : /* @__PURE__ */ jsx7("div", { className: "flex h-full items-center justify-center p-6 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
823
+ /* @__PURE__ */ jsx7(TerminalSquare, { className: "h-4 w-4" }),
804
824
  "No terminal activity yet"
805
825
  ] }) }) }),
806
826
  /* @__PURE__ */ jsxs6("div", { className: "grid min-h-0 gap-px bg-[var(--md3-outline-variant)]", children: [
807
- /* @__PURE__ */ jsx6("div", { className: "min-h-0 overflow-auto bg-surface-container", children: audit ? audit : /* @__PURE__ */ jsx6("div", { className: "flex h-full items-center justify-center p-6 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
808
- /* @__PURE__ */ jsx6(ShieldCheck, { className: "h-4 w-4" }),
827
+ /* @__PURE__ */ jsx7("div", { className: "min-h-0 overflow-auto bg-surface-container", children: audit ? audit : /* @__PURE__ */ jsx7("div", { className: "flex h-full items-center justify-center p-6 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
828
+ /* @__PURE__ */ jsx7(ShieldCheck, { className: "h-4 w-4" }),
809
829
  "No audit data available"
810
830
  ] }) }) }),
811
- /* @__PURE__ */ jsx6("div", { className: "min-h-0 overflow-auto bg-surface-container", children: inspector ? inspector : /* @__PURE__ */ jsx6("div", { className: "flex h-full items-center justify-center p-6 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
812
- /* @__PURE__ */ jsx6(Binary, { className: "h-4 w-4" }),
831
+ /* @__PURE__ */ jsx7("div", { className: "min-h-0 overflow-auto bg-surface-container", children: inspector ? inspector : /* @__PURE__ */ jsx7("div", { className: "flex h-full items-center justify-center p-6 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
832
+ /* @__PURE__ */ jsx7(Binary, { className: "h-4 w-4" }),
813
833
  "No runtime inspector attached"
814
834
  ] }) }) })
815
835
  ] })
816
836
  ] }),
817
- footer && /* @__PURE__ */ jsx6("footer", { className: "shrink-0 border-t border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-2", children: footer })
837
+ footer && /* @__PURE__ */ jsx7("footer", { className: "shrink-0 border-t border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-2", children: footer })
818
838
  ]
819
839
  }
820
840
  );
@@ -873,7 +893,7 @@ function useOptimisticSessionItems(items, options = {}) {
873
893
  }
874
894
 
875
895
  // src/workspace/session-sidebar.tsx
876
- import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
896
+ import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
877
897
  var NO_CONTROLLER = {
878
898
  add: () => {
879
899
  },
@@ -1056,32 +1076,32 @@ function SessionSidebar({
1056
1076
  className: cn("relative flex shrink-0 flex-col border-r border-[var(--md3-outline-variant)] bg-surface-container-low", className),
1057
1077
  style: { width: resizable ? resize.width : defaultWidth },
1058
1078
  children: [
1059
- /* @__PURE__ */ jsx7("div", { className: "flex h-14 shrink-0 items-center border-b border-[var(--md3-outline-variant)] bg-surface-container-high px-3", children: /* @__PURE__ */ jsxs7("div", { className: "flex w-full items-center justify-between gap-2", children: [
1079
+ /* @__PURE__ */ jsx8(WorkspacePaneHeader, { children: /* @__PURE__ */ jsxs7("div", { className: "flex w-full items-center justify-between gap-2", children: [
1060
1080
  /* @__PURE__ */ jsxs7("div", { className: "flex min-w-0 items-center gap-2", children: [
1061
- /* @__PURE__ */ jsx7("div", { className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-[var(--radius-sm)] border border-[var(--border-accent)] bg-[var(--accent-surface-soft)] text-primary", children: /* @__PURE__ */ jsx7(MessageSquareText, { className: "h-3.5 w-3.5" }) }),
1081
+ /* @__PURE__ */ jsx8("div", { className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-[var(--radius-sm)] border border-[var(--border-accent)] bg-[var(--accent-surface-soft)] text-primary", children: /* @__PURE__ */ jsx8(MessageSquareText, { className: "h-3.5 w-3.5" }) }),
1062
1082
  /* @__PURE__ */ jsxs7("div", { className: "min-w-0", children: [
1063
- /* @__PURE__ */ jsx7("div", { className: "truncate text-sm font-semibold text-foreground", children: title }),
1064
- subtitle && /* @__PURE__ */ jsx7("div", { className: "truncate text-xs text-muted-foreground", children: subtitle })
1083
+ /* @__PURE__ */ jsx8("div", { className: "truncate text-sm font-semibold text-foreground", children: title }),
1084
+ subtitle && /* @__PURE__ */ jsx8("div", { className: "truncate text-xs text-muted-foreground", children: subtitle })
1065
1085
  ] })
1066
1086
  ] }),
1067
1087
  /* @__PURE__ */ jsxs7("div", { className: "flex shrink-0 items-center gap-1.5", children: [
1068
- runningCount > 0 && /* @__PURE__ */ jsx7("span", { className: "rounded-full border border-[var(--border-accent)] bg-[var(--accent-surface-soft)] px-1.5 py-px text-xs font-medium text-primary", children: runningCount }),
1069
- onCreate && /* @__PURE__ */ jsx7(
1088
+ runningCount > 0 && /* @__PURE__ */ jsx8("span", { className: "rounded-full border border-[var(--border-accent)] bg-[var(--accent-surface-soft)] px-1.5 py-px text-xs font-medium text-primary", children: runningCount }),
1089
+ onCreate && /* @__PURE__ */ jsx8(
1070
1090
  "button",
1071
1091
  {
1072
1092
  type: "button",
1073
1093
  onClick: onCreate,
1074
1094
  title: createLabel,
1075
1095
  className: "flex h-7 w-7 items-center justify-center rounded-[var(--radius-sm)] border border-[var(--md3-outline-variant)] text-muted-foreground transition-colors hover:bg-[var(--accent-surface-soft)] hover:text-foreground",
1076
- children: /* @__PURE__ */ jsx7(Plus, { className: "h-3.5 w-3.5" })
1096
+ children: /* @__PURE__ */ jsx8(Plus, { className: "h-3.5 w-3.5" })
1077
1097
  }
1078
1098
  )
1079
1099
  ] })
1080
1100
  ] }) }),
1081
1101
  (enableSearch && items.length > 0 || filters.length > 0) && /* @__PURE__ */ jsxs7("div", { className: "shrink-0 border-b border-[var(--md3-outline-variant)] px-3 py-2.5", children: [
1082
1102
  enableSearch && effectiveItems.length > 0 && /* @__PURE__ */ jsxs7("div", { className: "relative", children: [
1083
- /* @__PURE__ */ jsx7(Search2, { className: "pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" }),
1084
- /* @__PURE__ */ jsx7(
1103
+ /* @__PURE__ */ jsx8(Search2, { className: "pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" }),
1104
+ /* @__PURE__ */ jsx8(
1085
1105
  "input",
1086
1106
  {
1087
1107
  value: query,
@@ -1092,7 +1112,7 @@ function SessionSidebar({
1092
1112
  }
1093
1113
  )
1094
1114
  ] }),
1095
- filters.length > 0 && /* @__PURE__ */ jsx7("div", { className: cn("flex flex-wrap gap-1", enableSearch && items.length > 0 && "mt-2"), children: filters.map((filter) => {
1115
+ filters.length > 0 && /* @__PURE__ */ jsx8("div", { className: cn("flex flex-wrap gap-1", enableSearch && items.length > 0 && "mt-2"), children: filters.map((filter) => {
1096
1116
  const isSelected = activeFilterId === filter.id;
1097
1117
  return /* @__PURE__ */ jsxs7(
1098
1118
  "button",
@@ -1104,18 +1124,18 @@ function SessionSidebar({
1104
1124
  isSelected ? "border-[var(--border-accent)] bg-[var(--accent-surface-soft)] text-primary" : "border-[var(--md3-outline-variant)] text-muted-foreground hover:text-foreground"
1105
1125
  ),
1106
1126
  children: [
1107
- /* @__PURE__ */ jsx7("span", { children: filter.label }),
1108
- /* @__PURE__ */ jsx7("span", { className: "text-[11px] opacity-60", children: filterCounts[filter.id] ?? 0 })
1127
+ /* @__PURE__ */ jsx8("span", { children: filter.label }),
1128
+ /* @__PURE__ */ jsx8("span", { className: "text-[11px] opacity-60", children: filterCounts[filter.id] ?? 0 })
1109
1129
  ]
1110
1130
  },
1111
1131
  filter.id
1112
1132
  );
1113
1133
  }) })
1114
1134
  ] }),
1115
- /* @__PURE__ */ jsx7("nav", { "aria-label": "Sessions", className: "flex-1 overflow-y-auto px-1.5 py-1.5", children: visibleItems.length === 0 ? /* @__PURE__ */ jsxs7("div", { className: "flex flex-col items-center justify-center gap-2 px-4 py-10 text-center text-sm text-muted-foreground", children: [
1116
- /* @__PURE__ */ jsx7(MessageSquareText, { className: "h-5 w-5 opacity-50", "aria-hidden": "true" }),
1117
- /* @__PURE__ */ jsx7("p", { children: query.trim() ? `No sessions match "${query.trim()}".` : emptyMessage })
1118
- ] }) : /* @__PURE__ */ jsx7("ul", { className: "space-y-px", children: visibleItems.map((item) => {
1135
+ /* @__PURE__ */ jsx8("nav", { "aria-label": "Sessions", className: "flex-1 overflow-y-auto px-1.5 py-1.5", children: visibleItems.length === 0 ? /* @__PURE__ */ jsxs7("div", { className: "flex flex-col items-center justify-center gap-2 px-4 py-10 text-center text-sm text-muted-foreground", children: [
1136
+ /* @__PURE__ */ jsx8(MessageSquareText, { className: "h-5 w-5 opacity-50", "aria-hidden": "true" }),
1137
+ /* @__PURE__ */ jsx8("p", { children: query.trim() ? `No sessions match "${query.trim()}".` : emptyMessage })
1138
+ ] }) : /* @__PURE__ */ jsx8("ul", { className: "space-y-px", children: visibleItems.map((item) => {
1119
1139
  const session = sessionsById.get(item.id) ?? null;
1120
1140
  const isActive = currentItemId === item.id;
1121
1141
  const status = session?.status ?? item.status;
@@ -1123,7 +1143,7 @@ function SessionSidebar({
1123
1143
  ...item.isPinned ? [{ id: `${item.id}-pinned`, label: "Pinned", tone: "neutral" }] : [],
1124
1144
  ...item.badges ?? []
1125
1145
  ];
1126
- return /* @__PURE__ */ jsx7("li", { className: "animate-row-in", children: /* @__PURE__ */ jsxs7(
1146
+ return /* @__PURE__ */ jsx8("li", { className: "animate-row-in", children: /* @__PURE__ */ jsxs7(
1127
1147
  "div",
1128
1148
  {
1129
1149
  className: cn(
@@ -1145,19 +1165,19 @@ function SessionSidebar({
1145
1165
  "aria-current": isActive ? "page" : void 0,
1146
1166
  className: "min-w-0 flex flex-1 items-center gap-2 text-left",
1147
1167
  children: [
1148
- /* @__PURE__ */ jsx7("span", { className: cn("h-1.5 w-1.5 shrink-0 rounded-full", statusDot(status)) }),
1168
+ /* @__PURE__ */ jsx8("span", { className: cn("h-1.5 w-1.5 shrink-0 rounded-full", statusDot(status)) }),
1149
1169
  /* @__PURE__ */ jsxs7("div", { className: "min-w-0 flex-1", children: [
1150
- /* @__PURE__ */ jsx7("div", { className: cn(
1170
+ /* @__PURE__ */ jsx8("div", { className: cn(
1151
1171
  "truncate text-sm font-medium",
1152
1172
  isActive && "text-foreground"
1153
1173
  ), children: item.title }),
1154
- item.subtitle && /* @__PURE__ */ jsx7("div", { className: "truncate text-xs leading-tight text-muted-foreground", children: item.subtitle })
1174
+ item.subtitle && /* @__PURE__ */ jsx8("div", { className: "truncate text-xs leading-tight text-muted-foreground", children: item.subtitle })
1155
1175
  ] })
1156
1176
  ]
1157
1177
  }
1158
1178
  ),
1159
1179
  /* @__PURE__ */ jsxs7("div", { className: "flex shrink-0 items-center gap-1", children: [
1160
- visibleBadges.length > 0 && visibleBadges.slice(0, 1).map((badge) => /* @__PURE__ */ jsx7(
1180
+ visibleBadges.length > 0 && visibleBadges.slice(0, 1).map((badge) => /* @__PURE__ */ jsx8(
1161
1181
  "span",
1162
1182
  {
1163
1183
  className: cn(
@@ -1168,8 +1188,8 @@ function SessionSidebar({
1168
1188
  },
1169
1189
  badge.id
1170
1190
  )),
1171
- session?.isForeground && /* @__PURE__ */ jsx7("span", { className: "h-1.5 w-1.5 rounded-full bg-[var(--status-running)]", title: "Live" }),
1172
- renderItemActions ? /* @__PURE__ */ jsx7(
1191
+ session?.isForeground && /* @__PURE__ */ jsx8("span", { className: "h-1.5 w-1.5 rounded-full bg-[var(--status-running)]", title: "Live" }),
1192
+ renderItemActions ? /* @__PURE__ */ jsx8(
1173
1193
  "div",
1174
1194
  {
1175
1195
  className: "opacity-0 transition-opacity group-hover:opacity-100",
@@ -1182,8 +1202,8 @@ function SessionSidebar({
1182
1202
  }
1183
1203
  ) }, item.id);
1184
1204
  }) }) }),
1185
- activityMonitor && /* @__PURE__ */ jsx7("div", { className: "border-t border-[var(--md3-outline-variant)] px-2 py-1.5", children: activityMonitor }),
1186
- links.length > 0 && /* @__PURE__ */ jsx7("nav", { "aria-label": "Workspace sections", className: "border-t border-[var(--md3-outline-variant)] px-1.5 py-1.5", children: /* @__PURE__ */ jsx7("div", { className: "space-y-px", children: links.map((link) => {
1205
+ activityMonitor && /* @__PURE__ */ jsx8("div", { className: "border-t border-[var(--md3-outline-variant)] px-2 py-1.5", children: activityMonitor }),
1206
+ links.length > 0 && /* @__PURE__ */ jsx8("nav", { "aria-label": "Workspace sections", className: "border-t border-[var(--md3-outline-variant)] px-1.5 py-1.5", children: /* @__PURE__ */ jsx8("div", { className: "space-y-px", children: links.map((link) => {
1187
1207
  const Icon = iconForLink(link.icon);
1188
1208
  return /* @__PURE__ */ jsxs7(
1189
1209
  "button",
@@ -1198,14 +1218,14 @@ function SessionSidebar({
1198
1218
  },
1199
1219
  className: "flex w-full items-center gap-2 rounded-[var(--radius-sm)] px-3 py-2 text-left text-sm text-muted-foreground transition-colors hover:bg-accent/30 hover:text-foreground",
1200
1220
  children: [
1201
- /* @__PURE__ */ jsx7(Icon, { className: "h-4 w-4 shrink-0" }),
1202
- /* @__PURE__ */ jsx7("span", { className: "truncate", children: link.label })
1221
+ /* @__PURE__ */ jsx8(Icon, { className: "h-4 w-4 shrink-0" }),
1222
+ /* @__PURE__ */ jsx8("span", { className: "truncate", children: link.label })
1203
1223
  ]
1204
1224
  },
1205
1225
  link.id
1206
1226
  );
1207
1227
  }) }) }),
1208
- resizable && /* @__PURE__ */ jsx7(
1228
+ resizable && /* @__PURE__ */ jsx8(
1209
1229
  "div",
1210
1230
  {
1211
1231
  className: "absolute top-0 right-0 bottom-0 w-1 cursor-col-resize hover:bg-[var(--accent-surface-soft)] active:bg-[var(--border-accent)] transition-colors",
@@ -1241,18 +1261,18 @@ import {
1241
1261
  useProjectActivity,
1242
1262
  useTotalRunningSessions
1243
1263
  } from "@tangle-network/ui/stores";
1244
- import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
1264
+ import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
1245
1265
  function SessionStatusDot({ session }) {
1246
1266
  if (session.status === "error") {
1247
- return /* @__PURE__ */ jsx8(AlertCircle2, { className: "h-3 w-3 text-[var(--surface-danger-text)]" });
1267
+ return /* @__PURE__ */ jsx9(AlertCircle2, { className: "h-3 w-3 text-[var(--surface-danger-text)]" });
1248
1268
  }
1249
1269
  if (session.status === "running") {
1250
- return /* @__PURE__ */ jsx8(LoaderCircle, { className: "h-3 w-3 animate-spin text-primary" });
1270
+ return /* @__PURE__ */ jsx9(LoaderCircle, { className: "h-3 w-3 animate-spin text-primary" });
1251
1271
  }
1252
1272
  if (session.status === "attention-needed") {
1253
- return /* @__PURE__ */ jsx8(Activity, { className: "h-3 w-3 text-[var(--surface-warning-text)]" });
1273
+ return /* @__PURE__ */ jsx9(Activity, { className: "h-3 w-3 text-[var(--surface-warning-text)]" });
1254
1274
  }
1255
- return /* @__PURE__ */ jsx8("span", { className: "h-1.5 w-1.5 rounded-full bg-muted-foreground/40" });
1275
+ return /* @__PURE__ */ jsx9("span", { className: "h-1.5 w-1.5 rounded-full bg-muted-foreground/40" });
1256
1276
  }
1257
1277
  function navigateToSession(session) {
1258
1278
  if (!session.href || typeof window === "undefined") return;
@@ -1272,17 +1292,17 @@ function SessionActivityMonitor({
1272
1292
  const sessionLookup = Object.keys(sessionsById).length > 0 ? sessionsById : Object.fromEntries(trackedSessions.map((session) => [session.sessionId, session]));
1273
1293
  if (projectActivity.length === 0) {
1274
1294
  if (compact) return null;
1275
- return /* @__PURE__ */ jsx8("div", { className: cn("rounded-[var(--radius-lg)] border border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-2.5 text-xs text-muted-foreground", className), children: emptyMessage });
1295
+ return /* @__PURE__ */ jsx9("div", { className: cn("rounded-[var(--radius-lg)] border border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-2.5 text-xs text-muted-foreground", className), children: emptyMessage });
1276
1296
  }
1277
1297
  return /* @__PURE__ */ jsxs8("div", { className: cn("space-y-1.5", className), children: [
1278
1298
  /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between", children: [
1279
1299
  /* @__PURE__ */ jsxs8("span", { className: "flex items-center gap-1.5 text-[10px] font-medium uppercase tracking-wider text-muted-foreground", children: [
1280
- /* @__PURE__ */ jsx8(Activity, { className: "h-3 w-3" }),
1300
+ /* @__PURE__ */ jsx9(Activity, { className: "h-3 w-3" }),
1281
1301
  "Active"
1282
1302
  ] }),
1283
- totalRunning > 0 && /* @__PURE__ */ jsx8("span", { className: "rounded-full border border-primary/30 bg-[var(--accent-surface-soft)] px-1.5 py-px text-[10px] font-medium text-primary", children: totalRunning })
1303
+ totalRunning > 0 && /* @__PURE__ */ jsx9("span", { className: "rounded-full border border-primary/30 bg-[var(--accent-surface-soft)] px-1.5 py-px text-[10px] font-medium text-primary", children: totalRunning })
1284
1304
  ] }),
1285
- /* @__PURE__ */ jsx8("div", { className: "space-y-1", children: projectActivity.map((project) => {
1305
+ /* @__PURE__ */ jsx9("div", { className: "space-y-1", children: projectActivity.map((project) => {
1286
1306
  const label = resolveProjectLabel?.(project.projectId, project.projectLabel) ?? project.projectLabel ?? String(project.projectId);
1287
1307
  return /* @__PURE__ */ jsxs8(
1288
1308
  "div",
@@ -1291,7 +1311,7 @@ function SessionActivityMonitor({
1291
1311
  children: [
1292
1312
  /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between gap-2 px-2.5 py-1.5", children: [
1293
1313
  /* @__PURE__ */ jsxs8("div", { className: "min-w-0", children: [
1294
- /* @__PURE__ */ jsx8("div", { className: "truncate text-xs font-medium text-foreground", children: label }),
1314
+ /* @__PURE__ */ jsx9("div", { className: "truncate text-xs font-medium text-foreground", children: label }),
1295
1315
  /* @__PURE__ */ jsxs8("div", { className: "text-[10px] text-muted-foreground", children: [
1296
1316
  project.activeSessionCount,
1297
1317
  " session",
@@ -1303,7 +1323,7 @@ function SessionActivityMonitor({
1303
1323
  " live"
1304
1324
  ] })
1305
1325
  ] }),
1306
- !compact && project.runningSessionIds.length > 0 && /* @__PURE__ */ jsx8("div", { className: "border-t border-[var(--md3-outline-variant)] bg-surface-container-high px-1 py-0.5", children: project.runningSessionIds.map((sessionId) => {
1326
+ !compact && project.runningSessionIds.length > 0 && /* @__PURE__ */ jsx9("div", { className: "border-t border-[var(--md3-outline-variant)] bg-surface-container-high px-1 py-0.5", children: project.runningSessionIds.map((sessionId) => {
1307
1327
  const session = sessionLookup[sessionId];
1308
1328
  if (!session) return null;
1309
1329
  return /* @__PURE__ */ jsxs8(
@@ -1319,9 +1339,9 @@ function SessionActivityMonitor({
1319
1339
  },
1320
1340
  className: "flex w-full items-center gap-2 rounded-[var(--radius-sm)] px-2 py-1 text-left transition-colors hover:bg-[var(--accent-surface-soft)]",
1321
1341
  children: [
1322
- /* @__PURE__ */ jsx8(SessionStatusDot, { session }),
1323
- /* @__PURE__ */ jsx8("span", { className: "min-w-0 truncate text-xs text-muted-foreground", children: session.title ?? "Untitled" }),
1324
- /* @__PURE__ */ jsx8(MessageSquareText2, { className: "ml-auto h-3 w-3 shrink-0 text-muted-foreground" })
1342
+ /* @__PURE__ */ jsx9(SessionStatusDot, { session }),
1343
+ /* @__PURE__ */ jsx9("span", { className: "min-w-0 truncate text-xs text-muted-foreground", children: session.title ?? "Untitled" }),
1344
+ /* @__PURE__ */ jsx9(MessageSquareText2, { className: "ml-auto h-3 w-3 shrink-0 text-muted-foreground" })
1325
1345
  ]
1326
1346
  },
1327
1347
  sessionId
@@ -1353,7 +1373,7 @@ import { ChatContainer } from "@tangle-network/ui/chat";
1353
1373
  import { FileArtifactPane } from "@tangle-network/ui/files";
1354
1374
  import { OpenUIArtifactRenderer } from "@tangle-network/ui/openui";
1355
1375
  import { ArtifactPane as ArtifactPane2 } from "@tangle-network/ui/primitives";
1356
- import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
1376
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
1357
1377
  function getArtifactTabIcon(kind) {
1358
1378
  switch (kind) {
1359
1379
  case "file":
@@ -1378,7 +1398,7 @@ function ArtifactTabs({
1378
1398
  onClose
1379
1399
  }) {
1380
1400
  if (artifacts.length === 0) return null;
1381
- return /* @__PURE__ */ jsx9("div", { className: "flex items-center overflow-x-auto border-b border-[var(--md3-outline-variant)] bg-surface-container-high", children: artifacts.map((artifact) => {
1401
+ return /* @__PURE__ */ jsx10("div", { className: "flex items-center overflow-x-auto border-b border-[var(--md3-outline-variant)] bg-surface-container-high", children: artifacts.map((artifact) => {
1382
1402
  const Icon = getArtifactTabIcon(artifact.kind);
1383
1403
  const isActive = artifact.id === activeArtifactId;
1384
1404
  return /* @__PURE__ */ jsxs9(
@@ -1396,19 +1416,19 @@ function ArtifactTabs({
1396
1416
  onClick: () => onSelect(artifact.id),
1397
1417
  className: "flex min-w-0 items-center gap-2 px-3 py-2 text-[12px] uppercase tracking-wider font-medium transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-primary/60",
1398
1418
  children: [
1399
- /* @__PURE__ */ jsx9(Icon, { className: "h-3.5 w-3.5 shrink-0" }),
1400
- /* @__PURE__ */ jsx9("span", { className: "max-w-[14rem] truncate", children: artifactTabLabel(artifact) })
1419
+ /* @__PURE__ */ jsx10(Icon, { className: "h-3.5 w-3.5 shrink-0" }),
1420
+ /* @__PURE__ */ jsx10("span", { className: "max-w-[14rem] truncate", children: artifactTabLabel(artifact) })
1401
1421
  ]
1402
1422
  }
1403
1423
  ),
1404
- onClose && /* @__PURE__ */ jsx9(
1424
+ onClose && /* @__PURE__ */ jsx10(
1405
1425
  "button",
1406
1426
  {
1407
1427
  type: "button",
1408
1428
  "aria-label": `Close ${artifactTabLabel(artifact)}`,
1409
1429
  onClick: () => onClose(artifact.id),
1410
1430
  className: "mr-1 rounded-[2px] p-1 opacity-0 transition-opacity hover:bg-accent hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60 group-hover:opacity-100",
1411
- children: /* @__PURE__ */ jsx9(X4, { className: "h-3 w-3" })
1431
+ children: /* @__PURE__ */ jsx10(X4, { className: "h-3 w-3" })
1412
1432
  }
1413
1433
  )
1414
1434
  ]
@@ -1420,7 +1440,7 @@ function ArtifactTabs({
1420
1440
  function renderArtifact(artifact) {
1421
1441
  switch (artifact.kind) {
1422
1442
  case "file":
1423
- return /* @__PURE__ */ jsx9(
1443
+ return /* @__PURE__ */ jsx10(
1424
1444
  FileArtifactPane,
1425
1445
  {
1426
1446
  path: artifact.path,
@@ -1440,7 +1460,7 @@ function renderArtifact(artifact) {
1440
1460
  }
1441
1461
  );
1442
1462
  case "markdown":
1443
- return /* @__PURE__ */ jsx9(
1463
+ return /* @__PURE__ */ jsx10(
1444
1464
  ArtifactPane2,
1445
1465
  {
1446
1466
  eyebrow: artifact.eyebrow ?? "Document",
@@ -1450,11 +1470,11 @@ function renderArtifact(artifact) {
1450
1470
  headerActions: artifact.headerActions,
1451
1471
  toolbar: artifact.toolbar,
1452
1472
  footer: artifact.footer,
1453
- children: /* @__PURE__ */ jsx9("div", { className: "p-5", children: /* @__PURE__ */ jsx9(Markdown, { className: "prose-sm max-w-none", children: artifact.content }) })
1473
+ children: /* @__PURE__ */ jsx10("div", { className: "p-5", children: /* @__PURE__ */ jsx10(Markdown, { className: "prose-sm max-w-none", children: artifact.content }) })
1454
1474
  }
1455
1475
  );
1456
1476
  case "openui":
1457
- return /* @__PURE__ */ jsx9(
1477
+ return /* @__PURE__ */ jsx10(
1458
1478
  ArtifactPane2,
1459
1479
  {
1460
1480
  eyebrow: artifact.eyebrow ?? "Structured Artifact",
@@ -1464,11 +1484,11 @@ function renderArtifact(artifact) {
1464
1484
  headerActions: artifact.headerActions,
1465
1485
  toolbar: artifact.toolbar,
1466
1486
  footer: artifact.footer,
1467
- children: /* @__PURE__ */ jsx9(OpenUIArtifactRenderer, { schema: artifact.schema, onAction: artifact.onAction })
1487
+ children: /* @__PURE__ */ jsx10(OpenUIArtifactRenderer, { schema: artifact.schema, onAction: artifact.onAction })
1468
1488
  }
1469
1489
  );
1470
1490
  case "custom":
1471
- return /* @__PURE__ */ jsx9(
1491
+ return /* @__PURE__ */ jsx10(
1472
1492
  ArtifactPane2,
1473
1493
  {
1474
1494
  eyebrow: artifact.eyebrow ?? "Artifact",
@@ -1490,17 +1510,17 @@ function regionHeader(sections, fallback) {
1490
1510
  switch (sections[0]?.key) {
1491
1511
  case "directory":
1492
1512
  return /* @__PURE__ */ jsxs9("div", { className: "flex items-center gap-2 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground", children: [
1493
- /* @__PURE__ */ jsx9(FolderTree2, { className: "h-3.5 w-3.5" }),
1513
+ /* @__PURE__ */ jsx10(FolderTree2, { className: "h-3.5 w-3.5" }),
1494
1514
  "Directory"
1495
1515
  ] });
1496
1516
  case "artifacts":
1497
1517
  return /* @__PURE__ */ jsxs9("div", { className: "flex items-center gap-2 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground", children: [
1498
- /* @__PURE__ */ jsx9(LayoutPanelTop, { className: "h-3.5 w-3.5" }),
1518
+ /* @__PURE__ */ jsx10(LayoutPanelTop, { className: "h-3.5 w-3.5" }),
1499
1519
  "Artifacts"
1500
1520
  ] });
1501
1521
  case "runtime":
1502
1522
  return /* @__PURE__ */ jsxs9("div", { className: "flex items-center gap-2 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground", children: [
1503
- /* @__PURE__ */ jsx9(Bot, { className: "h-3.5 w-3.5" }),
1523
+ /* @__PURE__ */ jsx10(Bot, { className: "h-3.5 w-3.5" }),
1504
1524
  "Runtime"
1505
1525
  ] });
1506
1526
  default:
@@ -1510,14 +1530,14 @@ function regionHeader(sections, fallback) {
1510
1530
  function renderRegion(sections, region) {
1511
1531
  if (sections.length === 0) return void 0;
1512
1532
  if (sections.length === 1) return sections[0]?.content;
1513
- return /* @__PURE__ */ jsx9(
1533
+ return /* @__PURE__ */ jsx10(
1514
1534
  "div",
1515
1535
  {
1516
1536
  className: cn(
1517
1537
  "flex min-h-0 h-full gap-3 p-3",
1518
1538
  region === "bottom" ? "flex-col" : "flex-col"
1519
1539
  ),
1520
- children: sections.map((section) => /* @__PURE__ */ jsx9("div", { className: "min-h-0 flex-1 overflow-hidden", children: section.content }, section.key))
1540
+ children: sections.map((section) => /* @__PURE__ */ jsx10("div", { className: "min-h-0 flex-1 overflow-hidden", children: section.content }, section.key))
1521
1541
  }
1522
1542
  );
1523
1543
  }
@@ -1560,9 +1580,9 @@ function SandboxWorkbench({
1560
1580
  };
1561
1581
  const centerHeader = /* @__PURE__ */ jsxs9("div", { className: "flex min-w-0 items-start justify-between gap-4 rounded-[var(--radius-xl)] border border-[var(--md3-outline-variant)] bg-surface-container px-4 py-3.5", children: [
1562
1582
  /* @__PURE__ */ jsxs9("div", { className: "min-w-0", children: [
1563
- /* @__PURE__ */ jsx9("div", { className: "text-[10px] font-semibold uppercase tracking-[0.18em] text-primary", children: "Tangle Sandbox" }),
1564
- /* @__PURE__ */ jsx9("div", { className: "truncate text-[17px] font-semibold tracking-[0.01em] text-foreground", children: title }),
1565
- subtitle && /* @__PURE__ */ jsx9("div", { className: "truncate text-sm text-muted-foreground", children: subtitle })
1583
+ /* @__PURE__ */ jsx10("div", { className: "text-[10px] font-semibold uppercase tracking-[0.18em] text-primary", children: "Tangle Sandbox" }),
1584
+ /* @__PURE__ */ jsx10("div", { className: "truncate text-[17px] font-semibold tracking-[0.01em] text-foreground", children: title }),
1585
+ subtitle && /* @__PURE__ */ jsx10("div", { className: "truncate text-sm text-muted-foreground", children: subtitle })
1566
1586
  ] }),
1567
1587
  /* @__PURE__ */ jsxs9("div", { className: "flex shrink-0 flex-wrap items-center justify-end gap-2", children: [
1568
1588
  status,
@@ -1573,7 +1593,7 @@ function SandboxWorkbench({
1573
1593
  ] })
1574
1594
  ] });
1575
1595
  const { composerControls, ...chatSession } = session;
1576
- const center = /* @__PURE__ */ jsx9(
1596
+ const center = /* @__PURE__ */ jsx10(
1577
1597
  ArtifactPane2,
1578
1598
  {
1579
1599
  eyebrow: session.eyebrow ?? "Agent Session",
@@ -1584,7 +1604,7 @@ function SandboxWorkbench({
1584
1604
  className: "h-full",
1585
1605
  contentClassName: "bg-surface-container",
1586
1606
  children: /* @__PURE__ */ jsxs9("div", { className: "flex h-full min-h-0 flex-col", children: [
1587
- /* @__PURE__ */ jsx9(
1607
+ /* @__PURE__ */ jsx10(
1588
1608
  ChatContainer,
1589
1609
  {
1590
1610
  ...chatSession,
@@ -1592,12 +1612,12 @@ function SandboxWorkbench({
1592
1612
  presentation: session.presentation ?? "timeline"
1593
1613
  }
1594
1614
  ),
1595
- composerControls && /* @__PURE__ */ jsx9("div", { className: "shrink-0 border-t border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-2", children: composerControls })
1615
+ composerControls && /* @__PURE__ */ jsx10("div", { className: "shrink-0 border-t border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-2", children: composerControls })
1596
1616
  ] })
1597
1617
  }
1598
1618
  );
1599
1619
  const artifactPanel = artifacts.length > 0 ? /* @__PURE__ */ jsxs9("section", { className: "flex h-full min-h-0 flex-col bg-surface-container", children: [
1600
- /* @__PURE__ */ jsx9(
1620
+ /* @__PURE__ */ jsx10(
1601
1621
  ArtifactTabs,
1602
1622
  {
1603
1623
  artifacts,
@@ -1606,10 +1626,10 @@ function SandboxWorkbench({
1606
1626
  onClose: onArtifactClose
1607
1627
  }
1608
1628
  ),
1609
- /* @__PURE__ */ jsx9("div", { className: "min-h-0 flex-1 overflow-auto bg-surface-container", children: activeArtifact ? renderArtifact(activeArtifact) : /* @__PURE__ */ jsx9("div", { className: "flex h-full items-center justify-center p-6", children: emptyArtifactState ?? /* @__PURE__ */ jsx9(
1629
+ /* @__PURE__ */ jsx10("div", { className: "min-h-0 flex-1 overflow-auto bg-surface-container", children: activeArtifact ? renderArtifact(activeArtifact) : /* @__PURE__ */ jsx10("div", { className: "flex h-full items-center justify-center p-6", children: emptyArtifactState ?? /* @__PURE__ */ jsx10(
1610
1630
  EmptyState2,
1611
1631
  {
1612
- icon: /* @__PURE__ */ jsx9(Boxes, { className: "h-8 w-8" }),
1632
+ icon: /* @__PURE__ */ jsx10(Boxes, { className: "h-8 w-8" }),
1613
1633
  title: "No artifact selected",
1614
1634
  description: "Select a generated artifact, file preview, or OpenUI panel to inspect it here."
1615
1635
  }
@@ -1626,7 +1646,7 @@ function SandboxWorkbench({
1626
1646
  if (directory && directoryPlacement !== "hidden") {
1627
1647
  regionSections[directoryPlacement].push({
1628
1648
  key: "directory",
1629
- content: /* @__PURE__ */ jsx9(DirectoryPane, { ...directory, className: "h-full" })
1649
+ content: /* @__PURE__ */ jsx10(DirectoryPane, { ...directory, className: "h-full" })
1630
1650
  });
1631
1651
  }
1632
1652
  if (artifactPanel && artifactPlacement !== "hidden") {
@@ -1638,14 +1658,14 @@ function SandboxWorkbench({
1638
1658
  if (runtime && runtimePlacement !== "hidden") {
1639
1659
  regionSections[runtimePlacement].push({
1640
1660
  key: "runtime",
1641
- content: /* @__PURE__ */ jsx9(RuntimePane, { ...runtime, className: "h-full" })
1661
+ content: /* @__PURE__ */ jsx10(RuntimePane, { ...runtime, className: "h-full" })
1642
1662
  });
1643
1663
  }
1644
1664
  const left = renderRegion(regionSections.left, "left");
1645
1665
  const right = renderRegion(regionSections.right, "right");
1646
1666
  const bottom = renderRegion(regionSections.bottom, "bottom");
1647
- const genericPanelsHeader = /* @__PURE__ */ jsx9("span", { className: "text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground", children: "Workspace Panels" });
1648
- return /* @__PURE__ */ jsx9(
1667
+ const genericPanelsHeader = /* @__PURE__ */ jsx10("span", { className: "text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground", children: "Workspace Panels" });
1668
+ return /* @__PURE__ */ jsx10(
1649
1669
  WorkspaceLayout,
1650
1670
  {
1651
1671
  left,
@@ -1674,7 +1694,7 @@ function SandboxWorkbench({
1674
1694
  );
1675
1695
  }
1676
1696
  function AgentWorkbench(props) {
1677
- return /* @__PURE__ */ jsx9(
1697
+ return /* @__PURE__ */ jsx10(
1678
1698
  SandboxWorkbench,
1679
1699
  {
1680
1700
  ...props,
@@ -1682,7 +1702,7 @@ function AgentWorkbench(props) {
1682
1702
  ...props.session,
1683
1703
  eyebrow: props.session.eyebrow ?? "Agent Session",
1684
1704
  title: props.session.title ?? /* @__PURE__ */ jsxs9("span", { className: "inline-flex items-center gap-2", children: [
1685
- /* @__PURE__ */ jsx9(Bot, { className: "h-4 w-4 text-primary" }),
1705
+ /* @__PURE__ */ jsx10(Bot, { className: "h-4 w-4 text-primary" }),
1686
1706
  "Execution timeline"
1687
1707
  ] })
1688
1708
  }
@@ -1693,13 +1713,13 @@ function AgentWorkbench(props) {
1693
1713
  // src/workspace/audit-results.tsx
1694
1714
  import { useState as useState6 } from "react";
1695
1715
  import { CheckCircle as CheckCircle2, XCircle, ChevronRight, Shield } from "lucide-react";
1696
- import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
1716
+ import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
1697
1717
  function AuditResults({ forms, crossFormChecks = [], overallScore, className }) {
1698
1718
  const totalPassed = forms.reduce((s, f) => s + f.passed, 0);
1699
1719
  const totalChecks = forms.reduce((s, f) => s + f.passed + f.failed, 0);
1700
1720
  return /* @__PURE__ */ jsxs10("div", { className: cn("space-y-3 p-3", className), children: [
1701
1721
  /* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-3 px-3 py-2 rounded-[var(--radius-md)] bg-surface-container-high border border-[var(--md3-outline-variant)]", children: [
1702
- /* @__PURE__ */ jsx10(Shield, { className: cn("h-5 w-5", totalChecks === totalPassed ? "text-[var(--code-success)]" : "text-[var(--code-number)]") }),
1722
+ /* @__PURE__ */ jsx11(Shield, { className: cn("h-5 w-5", totalChecks === totalPassed ? "text-[var(--code-success)]" : "text-[var(--code-number)]") }),
1703
1723
  /* @__PURE__ */ jsxs10("div", { children: [
1704
1724
  /* @__PURE__ */ jsxs10("div", { className: "text-sm font-semibold text-foreground", children: [
1705
1725
  totalPassed,
@@ -1714,10 +1734,10 @@ function AuditResults({ forms, crossFormChecks = [], overallScore, className })
1714
1734
  ] })
1715
1735
  ] })
1716
1736
  ] }),
1717
- forms.map((form) => /* @__PURE__ */ jsx10(FormAuditCard, { form }, form.formId)),
1737
+ forms.map((form) => /* @__PURE__ */ jsx11(FormAuditCard, { form }, form.formId)),
1718
1738
  crossFormChecks.length > 0 && /* @__PURE__ */ jsxs10("div", { children: [
1719
- /* @__PURE__ */ jsx10("div", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-1", children: "Cross-Form Checks" }),
1720
- crossFormChecks.map((check, i) => /* @__PURE__ */ jsx10(CheckRow, { check }, i))
1739
+ /* @__PURE__ */ jsx11("div", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-1", children: "Cross-Form Checks" }),
1740
+ crossFormChecks.map((check, i) => /* @__PURE__ */ jsx11(CheckRow, { check }, i))
1721
1741
  ] })
1722
1742
  ] });
1723
1743
  }
@@ -1731,25 +1751,25 @@ function FormAuditCard({ form }) {
1731
1751
  onClick: () => setExpanded(!expanded),
1732
1752
  className: "flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-accent transition-colors",
1733
1753
  children: [
1734
- allPassed ? /* @__PURE__ */ jsx10(CheckCircle2, { className: "h-4 w-4 text-[var(--code-success)] shrink-0" }) : !form.found ? /* @__PURE__ */ jsx10(XCircle, { className: "h-4 w-4 text-[var(--code-error)] shrink-0" }) : /* @__PURE__ */ jsx10(XCircle, { className: "h-4 w-4 text-[var(--code-number)] shrink-0" }),
1735
- /* @__PURE__ */ jsx10("span", { className: "text-sm font-medium text-foreground flex-1", children: form.formName || form.formId }),
1754
+ allPassed ? /* @__PURE__ */ jsx11(CheckCircle2, { className: "h-4 w-4 text-[var(--code-success)] shrink-0" }) : !form.found ? /* @__PURE__ */ jsx11(XCircle, { className: "h-4 w-4 text-[var(--code-error)] shrink-0" }) : /* @__PURE__ */ jsx11(XCircle, { className: "h-4 w-4 text-[var(--code-number)] shrink-0" }),
1755
+ /* @__PURE__ */ jsx11("span", { className: "text-sm font-medium text-foreground flex-1", children: form.formName || form.formId }),
1736
1756
  /* @__PURE__ */ jsxs10("span", { className: cn("text-xs tabular-nums", allPassed ? "text-[var(--code-success)]" : "text-muted-foreground"), children: [
1737
1757
  form.passed,
1738
1758
  "/",
1739
1759
  form.passed + form.failed
1740
1760
  ] }),
1741
- /* @__PURE__ */ jsx10(ChevronRight, { className: cn("h-3 w-3 text-muted-foreground transition-transform", expanded && "rotate-90") })
1761
+ /* @__PURE__ */ jsx11(ChevronRight, { className: cn("h-3 w-3 text-muted-foreground transition-transform", expanded && "rotate-90") })
1742
1762
  ]
1743
1763
  }
1744
1764
  ),
1745
- expanded && /* @__PURE__ */ jsx10("div", { className: "border-t border-[var(--md3-outline-variant)] px-3 py-1.5 space-y-0.5", children: form.checks.map((check, i) => /* @__PURE__ */ jsx10(CheckRow, { check }, i)) })
1765
+ expanded && /* @__PURE__ */ jsx11("div", { className: "border-t border-[var(--md3-outline-variant)] px-3 py-1.5 space-y-0.5", children: form.checks.map((check, i) => /* @__PURE__ */ jsx11(CheckRow, { check }, i)) })
1746
1766
  ] });
1747
1767
  }
1748
1768
  function CheckRow({ check }) {
1749
1769
  return /* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-2 py-1 text-xs", children: [
1750
- check.passed ? /* @__PURE__ */ jsx10(CheckCircle2, { className: "h-3 w-3 text-[var(--code-success)] shrink-0" }) : /* @__PURE__ */ jsx10(XCircle, { className: "h-3 w-3 text-[var(--code-error)] shrink-0" }),
1751
- /* @__PURE__ */ jsx10("span", { className: "text-foreground flex-1 truncate", children: check.label }),
1752
- /* @__PURE__ */ jsx10("span", { className: "text-muted-foreground tabular-nums shrink-0", children: check.passed ? String(check.actual ?? check.expected) : `${check.actual ?? "missing"} \u2260 ${check.expected}` })
1770
+ check.passed ? /* @__PURE__ */ jsx11(CheckCircle2, { className: "h-3 w-3 text-[var(--code-success)] shrink-0" }) : /* @__PURE__ */ jsx11(XCircle, { className: "h-3 w-3 text-[var(--code-error)] shrink-0" }),
1771
+ /* @__PURE__ */ jsx11("span", { className: "text-foreground flex-1 truncate", children: check.label }),
1772
+ /* @__PURE__ */ jsx11("span", { className: "text-muted-foreground tabular-nums shrink-0", children: check.passed ? String(check.actual ?? check.expected) : `${check.actual ?? "missing"} \u2260 ${check.expected}` })
1753
1773
  ] });
1754
1774
  }
1755
1775
 
@@ -1757,7 +1777,7 @@ function CheckRow({ check }) {
1757
1777
  import {
1758
1778
  useMemo as useMemo5
1759
1779
  } from "react";
1760
- import { Fragment as Fragment2, jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
1780
+ import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
1761
1781
  var INTERACTIVE_SELECTOR = 'button, a, input, textarea, select, [role="button"], [role="link"]';
1762
1782
  function TaskBoard({
1763
1783
  items,
@@ -1785,7 +1805,7 @@ function TaskBoard({
1785
1805
  }, [items, columns]);
1786
1806
  return /* @__PURE__ */ jsxs11("div", { className: cn("flex flex-1 flex-col overflow-hidden", className), children: [
1787
1807
  header,
1788
- /* @__PURE__ */ jsx11("div", { className: "flex flex-1 gap-3 overflow-x-auto p-4", children: columns.map((col) => {
1808
+ /* @__PURE__ */ jsx12("div", { className: "flex flex-1 gap-3 overflow-x-auto p-4", children: columns.map((col) => {
1789
1809
  const colItems = grouped.get(col.id) ?? [];
1790
1810
  const itemCards = /* @__PURE__ */ jsxs11(Fragment2, { children: [
1791
1811
  colItems.length === 0 && columnEmptyState,
@@ -1811,12 +1831,12 @@ function TaskBoard({
1811
1831
  },
1812
1832
  className: "group w-full rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container-high p-3 text-left transition-colors hover:border-accent/50",
1813
1833
  children: [
1814
- /* @__PURE__ */ jsx11("p", { className: "text-sm font-medium text-foreground", children: item.title }),
1815
- item.description && /* @__PURE__ */ jsx11("p", { className: "mt-1 text-xs text-muted-foreground line-clamp-2", children: item.description }),
1834
+ /* @__PURE__ */ jsx12("p", { className: "text-sm font-medium text-foreground", children: item.title }),
1835
+ item.description && /* @__PURE__ */ jsx12("p", { className: "mt-1 text-xs text-muted-foreground line-clamp-2", children: item.description }),
1816
1836
  (item.priority || item.tags?.length) && /* @__PURE__ */ jsxs11("div", { className: "mt-2 flex flex-wrap gap-1.5", children: [
1817
- item.priority && (renderBadge ? renderBadge(item.priority, "priority") : /* @__PURE__ */ jsx11("span", { className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] font-medium text-muted-foreground", children: item.priority })),
1837
+ item.priority && (renderBadge ? renderBadge(item.priority, "priority") : /* @__PURE__ */ jsx12("span", { className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] font-medium text-muted-foreground", children: item.priority })),
1818
1838
  item.tags?.map(
1819
- (tag) => renderBadge ? /* @__PURE__ */ jsx11("span", { children: renderBadge(tag, "tag") }, tag) : /* @__PURE__ */ jsx11(
1839
+ (tag) => renderBadge ? /* @__PURE__ */ jsx12("span", { children: renderBadge(tag, "tag") }, tag) : /* @__PURE__ */ jsx12(
1820
1840
  "span",
1821
1841
  {
1822
1842
  className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] text-muted-foreground",
@@ -1831,10 +1851,10 @@ function TaskBoard({
1831
1851
  },
1832
1852
  item.id
1833
1853
  );
1834
- return renderItemWrapper ? /* @__PURE__ */ jsx11("span", { children: renderItemWrapper(item, index, card) }, item.id) : card;
1854
+ return renderItemWrapper ? /* @__PURE__ */ jsx12("span", { children: renderItemWrapper(item, index, card) }, item.id) : card;
1835
1855
  })
1836
1856
  ] });
1837
- const columnBody = /* @__PURE__ */ jsx11("div", { className: "flex flex-1 flex-col gap-2 overflow-y-auto px-2 pb-2 min-h-[80px]", children: renderColumnBody ? renderColumnBody(col.id, itemCards, colItems) : itemCards });
1857
+ const columnBody = /* @__PURE__ */ jsx12("div", { className: "flex flex-1 flex-col gap-2 overflow-y-auto px-2 pb-2 min-h-[80px]", children: renderColumnBody ? renderColumnBody(col.id, itemCards, colItems) : itemCards });
1838
1858
  return /* @__PURE__ */ jsxs11(
1839
1859
  "div",
1840
1860
  {
@@ -1845,8 +1865,8 @@ function TaskBoard({
1845
1865
  children: [
1846
1866
  /* @__PURE__ */ jsxs11("div", { className: "flex items-center justify-between px-4 py-3", children: [
1847
1867
  /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-2", children: [
1848
- /* @__PURE__ */ jsx11("h3", { className: "text-xs font-semibold uppercase tracking-wider text-muted-foreground", children: col.label }),
1849
- /* @__PURE__ */ jsx11("span", { className: "inline-flex h-5 min-w-[20px] items-center justify-center rounded-full border border-[var(--md3-outline-variant)] px-1.5 text-[10px] font-medium text-muted-foreground", children: colItems.length })
1868
+ /* @__PURE__ */ jsx12("h3", { className: "text-xs font-semibold uppercase tracking-wider text-muted-foreground", children: col.label }),
1869
+ /* @__PURE__ */ jsx12("span", { className: "inline-flex h-5 min-w-[20px] items-center justify-center rounded-full border border-[var(--md3-outline-variant)] px-1.5 text-[10px] font-medium text-muted-foreground", children: colItems.length })
1850
1870
  ] }),
1851
1871
  renderColumnAction?.(col)
1852
1872
  ] }),
@@ -1861,7 +1881,7 @@ function TaskBoard({
1861
1881
 
1862
1882
  // src/workspace/calendar-view.tsx
1863
1883
  import { useState as useState7, useMemo as useMemo6 } from "react";
1864
- import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
1884
+ import { Fragment as Fragment3, jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
1865
1885
  function toDateKey(d) {
1866
1886
  return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
1867
1887
  }
@@ -1955,26 +1975,26 @@ function CalendarView({
1955
1975
  /* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-between border-b border-[var(--md3-outline-variant)] px-4 py-2.5 shrink-0", children: [
1956
1976
  /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-2", children: [
1957
1977
  headerLeft,
1958
- /* @__PURE__ */ jsx12(
1978
+ /* @__PURE__ */ jsx13(
1959
1979
  "button",
1960
1980
  {
1961
1981
  type: "button",
1962
1982
  onClick: prevMonth,
1963
1983
  className: "h-7 w-7 rounded-md hover:bg-surface-container-high flex items-center justify-center text-muted-foreground",
1964
- children: /* @__PURE__ */ jsx12("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx12("path", { d: "m15 18-6-6 6-6" }) })
1984
+ children: /* @__PURE__ */ jsx13("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx13("path", { d: "m15 18-6-6 6-6" }) })
1965
1985
  }
1966
1986
  ),
1967
- /* @__PURE__ */ jsx12("span", { className: "text-sm font-semibold text-foreground min-w-[160px] text-center", children: monthLabel }),
1968
- /* @__PURE__ */ jsx12(
1987
+ /* @__PURE__ */ jsx13("span", { className: "text-sm font-semibold text-foreground min-w-[160px] text-center", children: monthLabel }),
1988
+ /* @__PURE__ */ jsx13(
1969
1989
  "button",
1970
1990
  {
1971
1991
  type: "button",
1972
1992
  onClick: nextMonth,
1973
1993
  className: "h-7 w-7 rounded-md hover:bg-surface-container-high flex items-center justify-center text-muted-foreground",
1974
- children: /* @__PURE__ */ jsx12("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx12("path", { d: "m9 18 6-6-6-6" }) })
1994
+ children: /* @__PURE__ */ jsx13("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx13("path", { d: "m9 18 6-6-6-6" }) })
1975
1995
  }
1976
1996
  ),
1977
- /* @__PURE__ */ jsx12(
1997
+ /* @__PURE__ */ jsx13(
1978
1998
  "button",
1979
1999
  {
1980
2000
  type: "button",
@@ -1989,7 +2009,7 @@ function CalendarView({
1989
2009
  ] }),
1990
2010
  headerRight
1991
2011
  ] }),
1992
- /* @__PURE__ */ jsx12("div", { className: "grid grid-cols-7 border-b border-[var(--md3-outline-variant)] shrink-0", children: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].map((d) => /* @__PURE__ */ jsx12(
2012
+ /* @__PURE__ */ jsx13("div", { className: "grid grid-cols-7 border-b border-[var(--md3-outline-variant)] shrink-0", children: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].map((d) => /* @__PURE__ */ jsx13(
1993
2013
  "div",
1994
2014
  {
1995
2015
  className: "px-2 py-1.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground text-center",
@@ -1997,7 +2017,7 @@ function CalendarView({
1997
2017
  },
1998
2018
  d
1999
2019
  )) }),
2000
- /* @__PURE__ */ jsx12("div", { className: "flex-1 grid grid-cols-7 auto-rows-fr overflow-y-auto", children: monthDays.map(({ date, key, inMonth }) => {
2020
+ /* @__PURE__ */ jsx13("div", { className: "flex-1 grid grid-cols-7 auto-rows-fr overflow-y-auto", children: monthDays.map(({ date, key, inMonth }) => {
2001
2021
  const dayEvents = eventsByDate[key] ?? [];
2002
2022
  const isToday = key === todayKey;
2003
2023
  const isSelected = key === selectedDay;
@@ -2014,7 +2034,7 @@ function CalendarView({
2014
2034
  !isSelected && "hover:bg-surface-container-high"
2015
2035
  ),
2016
2036
  children: [
2017
- /* @__PURE__ */ jsx12(
2037
+ /* @__PURE__ */ jsx13(
2018
2038
  "span",
2019
2039
  {
2020
2040
  className: cn(
@@ -2028,7 +2048,7 @@ function CalendarView({
2028
2048
  ),
2029
2049
  /* @__PURE__ */ jsxs12("div", { className: "flex flex-col gap-0.5 w-full min-w-0", children: [
2030
2050
  dayEvents.slice(0, 3).map(
2031
- (evt) => renderEventChip ? /* @__PURE__ */ jsx12("div", { className: "w-full min-w-0", children: renderEventChip(evt) }, evt.id) : /* @__PURE__ */ jsx12(
2051
+ (evt) => renderEventChip ? /* @__PURE__ */ jsx13("div", { className: "w-full min-w-0", children: renderEventChip(evt) }, evt.id) : /* @__PURE__ */ jsx13(
2032
2052
  "div",
2033
2053
  {
2034
2054
  className: "w-full truncate text-[9px] px-1 py-0.5 rounded bg-primary/10 text-primary",
@@ -2050,9 +2070,9 @@ function CalendarView({
2050
2070
  );
2051
2071
  }) })
2052
2072
  ] }),
2053
- showDayPanel && /* @__PURE__ */ jsx12("div", { className: "w-80 shrink-0 flex flex-col overflow-hidden", children: renderDayDetail ? renderDayDetail(selectedDay ?? todayKey, selectedDayEvents) : /* @__PURE__ */ jsxs12(Fragment3, { children: [
2073
+ showDayPanel && /* @__PURE__ */ jsx13("div", { className: "w-80 shrink-0 flex flex-col overflow-hidden", children: renderDayDetail ? renderDayDetail(selectedDay ?? todayKey, selectedDayEvents) : /* @__PURE__ */ jsxs12(Fragment3, { children: [
2054
2074
  /* @__PURE__ */ jsxs12("div", { className: "px-4 py-3 border-b border-[var(--md3-outline-variant)] shrink-0", children: [
2055
- /* @__PURE__ */ jsx12("h3", { className: "text-sm font-semibold text-foreground", children: selectedDay === todayKey ? "Today" : selectedDay ? (/* @__PURE__ */ new Date(selectedDay + "T00:00:00")).toLocaleDateString(
2075
+ /* @__PURE__ */ jsx13("h3", { className: "text-sm font-semibold text-foreground", children: selectedDay === todayKey ? "Today" : selectedDay ? (/* @__PURE__ */ new Date(selectedDay + "T00:00:00")).toLocaleDateString(
2056
2076
  "en-US",
2057
2077
  { weekday: "long", month: "long", day: "numeric" }
2058
2078
  ) : "Select a day" }),
@@ -2063,14 +2083,14 @@ function CalendarView({
2063
2083
  ] })
2064
2084
  ] }),
2065
2085
  /* @__PURE__ */ jsxs12("div", { className: "flex-1 overflow-y-auto p-2 space-y-2", children: [
2066
- selectedDayEvents.length === 0 && /* @__PURE__ */ jsx12("div", { className: "px-2 py-8 text-center", children: /* @__PURE__ */ jsx12("p", { className: "text-xs text-muted-foreground", children: "No events this day" }) }),
2086
+ selectedDayEvents.length === 0 && /* @__PURE__ */ jsx13("div", { className: "px-2 py-8 text-center", children: /* @__PURE__ */ jsx13("p", { className: "text-xs text-muted-foreground", children: "No events this day" }) }),
2067
2087
  selectedDayEvents.map((evt) => /* @__PURE__ */ jsxs12(
2068
2088
  "div",
2069
2089
  {
2070
2090
  className: "rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container p-3",
2071
2091
  children: [
2072
- /* @__PURE__ */ jsx12("p", { className: "text-sm font-medium text-foreground", children: evt.title }),
2073
- evt.type && /* @__PURE__ */ jsx12("span", { className: "mt-1 inline-block rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] text-muted-foreground", children: evt.type })
2092
+ /* @__PURE__ */ jsx13("p", { className: "text-sm font-medium text-foreground", children: evt.title }),
2093
+ evt.type && /* @__PURE__ */ jsx13("span", { className: "mt-1 inline-block rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] text-muted-foreground", children: evt.type })
2074
2094
  ]
2075
2095
  },
2076
2096
  evt.id
@@ -2082,7 +2102,7 @@ function CalendarView({
2082
2102
 
2083
2103
  // src/workspace/approval-queue.tsx
2084
2104
  import { useState as useState8, useMemo as useMemo7 } from "react";
2085
- import { jsx as jsx13, jsxs as jsxs13 } from "react/jsx-runtime";
2105
+ import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
2086
2106
  function ApprovalQueue({
2087
2107
  items,
2088
2108
  className,
@@ -2123,17 +2143,17 @@ function ApprovalQueue({
2123
2143
  return Object.values(map);
2124
2144
  }, [items]);
2125
2145
  if (items.length === 0) {
2126
- return /* @__PURE__ */ jsx13("div", { className: cn("flex-1 flex items-center justify-center", className), children: emptyState ?? /* @__PURE__ */ jsx13("div", { className: "text-center py-20", children: /* @__PURE__ */ jsx13("p", { className: "text-sm text-muted-foreground", children: "No proposals yet" }) }) });
2146
+ return /* @__PURE__ */ jsx14("div", { className: cn("flex-1 flex items-center justify-center", className), children: emptyState ?? /* @__PURE__ */ jsx14("div", { className: "text-center py-20", children: /* @__PURE__ */ jsx14("p", { className: "text-sm text-muted-foreground", children: "No proposals yet" }) }) });
2127
2147
  }
2128
- return /* @__PURE__ */ jsx13("div", { className: cn("flex-1 overflow-y-auto", className), children: /* @__PURE__ */ jsxs13("div", { className: "max-w-3xl mx-auto p-6", children: [
2148
+ return /* @__PURE__ */ jsx14("div", { className: cn("flex-1 overflow-y-auto", className), children: /* @__PURE__ */ jsxs13("div", { className: "max-w-3xl mx-auto p-6", children: [
2129
2149
  header,
2130
- stats.length > 0 && /* @__PURE__ */ jsx13("div", { className: "flex gap-3 mb-6 flex-wrap", children: renderStats ? renderStats(stats) : stats.map((s) => /* @__PURE__ */ jsxs13(
2150
+ stats.length > 0 && /* @__PURE__ */ jsx14("div", { className: "flex gap-3 mb-6 flex-wrap", children: renderStats ? renderStats(stats) : stats.map((s) => /* @__PURE__ */ jsxs13(
2131
2151
  "div",
2132
2152
  {
2133
2153
  className: "flex-1 min-w-[120px] rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container p-3",
2134
2154
  children: [
2135
- /* @__PURE__ */ jsx13("div", { className: "flex items-center gap-2 mb-1", children: renderTypeBadge ? renderTypeBadge(s.type) : /* @__PURE__ */ jsx13("span", { className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] font-medium text-muted-foreground", children: s.type }) }),
2136
- /* @__PURE__ */ jsx13("div", { className: "flex items-baseline gap-1", children: /* @__PURE__ */ jsxs13("span", { className: "text-xl font-semibold text-foreground", children: [
2155
+ /* @__PURE__ */ jsx14("div", { className: "flex items-center gap-2 mb-1", children: renderTypeBadge ? renderTypeBadge(s.type) : /* @__PURE__ */ jsx14("span", { className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] font-medium text-muted-foreground", children: s.type }) }),
2156
+ /* @__PURE__ */ jsx14("div", { className: "flex items-baseline gap-1", children: /* @__PURE__ */ jsxs13("span", { className: "text-xl font-semibold text-foreground", children: [
2137
2157
  s.rate,
2138
2158
  "%"
2139
2159
  ] }) }),
@@ -2153,7 +2173,7 @@ function ApprovalQueue({
2153
2173
  pending.length,
2154
2174
  ")"
2155
2175
  ] }),
2156
- /* @__PURE__ */ jsx13("div", { className: "space-y-3", children: pending.map((item) => /* @__PURE__ */ jsxs13(
2176
+ /* @__PURE__ */ jsx14("div", { className: "space-y-3", children: pending.map((item) => /* @__PURE__ */ jsxs13(
2157
2177
  "div",
2158
2178
  {
2159
2179
  className: "rounded-lg border border-primary/20 bg-surface-container p-4",
@@ -2161,14 +2181,14 @@ function ApprovalQueue({
2161
2181
  /* @__PURE__ */ jsxs13("div", { className: "flex items-start gap-3", children: [
2162
2182
  /* @__PURE__ */ jsxs13("div", { className: "flex-1 min-w-0", children: [
2163
2183
  /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2 mb-1", children: [
2164
- /* @__PURE__ */ jsx13("h4", { className: "text-sm font-medium text-foreground", children: item.title }),
2165
- renderTypeBadge ? renderTypeBadge(item.type) : /* @__PURE__ */ jsx13("span", { className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] text-muted-foreground", children: item.type })
2184
+ /* @__PURE__ */ jsx14("h4", { className: "text-sm font-medium text-foreground", children: item.title }),
2185
+ renderTypeBadge ? renderTypeBadge(item.type) : /* @__PURE__ */ jsx14("span", { className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] text-muted-foreground", children: item.type })
2166
2186
  ] }),
2167
- item.description && /* @__PURE__ */ jsx13("p", { className: "text-xs text-muted-foreground line-clamp-2", children: item.description }),
2187
+ item.description && /* @__PURE__ */ jsx14("p", { className: "text-xs text-muted-foreground line-clamp-2", children: item.description }),
2168
2188
  renderItemDetail?.(item)
2169
2189
  ] }),
2170
2190
  canResolve && /* @__PURE__ */ jsxs13("div", { className: "flex gap-1.5 shrink-0", children: [
2171
- /* @__PURE__ */ jsx13(
2191
+ /* @__PURE__ */ jsx14(
2172
2192
  "button",
2173
2193
  {
2174
2194
  type: "button",
@@ -2177,7 +2197,7 @@ function ApprovalQueue({
2177
2197
  children: "Approve"
2178
2198
  }
2179
2199
  ),
2180
- /* @__PURE__ */ jsx13(
2200
+ /* @__PURE__ */ jsx14(
2181
2201
  "button",
2182
2202
  {
2183
2203
  type: "button",
@@ -2194,7 +2214,7 @@ function ApprovalQueue({
2194
2214
  ] })
2195
2215
  ] }),
2196
2216
  rejectingId === item.id && /* @__PURE__ */ jsxs13("div", { className: "mt-3 border-t border-[var(--md3-outline-variant)] pt-3", children: [
2197
- /* @__PURE__ */ jsx13(
2217
+ /* @__PURE__ */ jsx14(
2198
2218
  "textarea",
2199
2219
  {
2200
2220
  placeholder: "Why are you rejecting this?",
@@ -2205,7 +2225,7 @@ function ApprovalQueue({
2205
2225
  }
2206
2226
  ),
2207
2227
  /* @__PURE__ */ jsxs13("div", { className: "flex gap-2 justify-end", children: [
2208
- /* @__PURE__ */ jsx13(
2228
+ /* @__PURE__ */ jsx14(
2209
2229
  "button",
2210
2230
  {
2211
2231
  type: "button",
@@ -2217,7 +2237,7 @@ function ApprovalQueue({
2217
2237
  children: "Cancel"
2218
2238
  }
2219
2239
  ),
2220
- /* @__PURE__ */ jsx13(
2240
+ /* @__PURE__ */ jsx14(
2221
2241
  "button",
2222
2242
  {
2223
2243
  type: "button",
@@ -2245,7 +2265,7 @@ function ApprovalQueue({
2245
2265
  onClick: () => setShowResolved(!showResolved),
2246
2266
  className: "flex items-center gap-2 text-xs font-medium text-muted-foreground uppercase tracking-wider mb-3 hover:text-foreground transition-colors",
2247
2267
  children: [
2248
- /* @__PURE__ */ jsx13(
2268
+ /* @__PURE__ */ jsx14(
2249
2269
  "svg",
2250
2270
  {
2251
2271
  width: "12",
@@ -2258,7 +2278,7 @@ function ApprovalQueue({
2258
2278
  "transition-transform",
2259
2279
  showResolved && "rotate-180"
2260
2280
  ),
2261
- children: /* @__PURE__ */ jsx13("path", { d: "m6 9 6 6 6-6" })
2281
+ children: /* @__PURE__ */ jsx14("path", { d: "m6 9 6 6 6-6" })
2262
2282
  }
2263
2283
  ),
2264
2284
  "Resolved (",
@@ -2267,15 +2287,15 @@ function ApprovalQueue({
2267
2287
  ]
2268
2288
  }
2269
2289
  ),
2270
- showResolved && /* @__PURE__ */ jsx13("div", { className: "space-y-2", children: resolved.map((item) => /* @__PURE__ */ jsxs13(
2290
+ showResolved && /* @__PURE__ */ jsx14("div", { className: "space-y-2", children: resolved.map((item) => /* @__PURE__ */ jsxs13(
2271
2291
  "div",
2272
2292
  {
2273
2293
  className: "rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container p-4 opacity-60",
2274
2294
  children: [
2275
2295
  /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2 mb-1", children: [
2276
- /* @__PURE__ */ jsx13("h4", { className: "text-sm font-medium text-foreground", children: item.title }),
2296
+ /* @__PURE__ */ jsx14("h4", { className: "text-sm font-medium text-foreground", children: item.title }),
2277
2297
  renderTypeBadge?.(item.type),
2278
- /* @__PURE__ */ jsx13(
2298
+ /* @__PURE__ */ jsx14(
2279
2299
  "span",
2280
2300
  {
2281
2301
  className: cn(
@@ -2301,6 +2321,7 @@ function ApprovalQueue({
2301
2321
  }
2302
2322
 
2303
2323
  export {
2324
+ WorkspacePaneHeader,
2304
2325
  WorkspaceLayout,
2305
2326
  DirectoryPane,
2306
2327
  StatusBanner,