@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.
@@ -7,9 +7,9 @@ import { Markdown } from "@tangle-network/ui/markdown";
7
7
  import { useCallback, useEffect, useId, useImperativeHandle, useMemo, useRef, useState } from "react";
8
8
  import { createPortal } from "react-dom";
9
9
  import * as DialogPrimitive from "@radix-ui/react-dialog";
10
- import { Activity, AlertCircle, AlertTriangle, ArrowLeft, Binary, Bot, Boxes, CheckCircle, ChevronDown, ChevronRight, ChevronUp, FileCode2, FileText, FolderTree, LayoutPanelTop, Loader2, LoaderCircle, MessageSquareText, PanelBottomClose, PanelBottomOpen, PanelLeftClose, PanelLeftOpen, PanelRightClose, PanelRightOpen, Plus, RefreshCw, Search, Settings, Shield, ShieldCheck, Sparkles, Terminal, TerminalSquare, Upload, Wifi, X, XCircle, Zap } from "lucide-react";
10
+ import { Activity, AlertCircle, AlertTriangle, ArrowLeft, Binary, Bot, Boxes, CheckCircle, ChevronDown, ChevronRight, ChevronUp, FileCode2, FileText, FolderOpen, FolderTree, LayoutPanelTop, Loader2, LoaderCircle, MessageSquareText, PanelBottomClose, PanelBottomOpen, PanelLeftClose, PanelLeftOpen, PanelRightClose, PanelRightOpen, Plus, RefreshCw, Search, Settings, Shield, ShieldCheck, Sparkles, Terminal, TerminalSquare, Upload, Wifi, X, XCircle, Zap } from "lucide-react";
11
11
  import { focusField, focusRing, focusRingInset } from "@tangle-network/ui/utils";
12
- import { FileArtifactPane, FileTree, filterFileTree } from "@tangle-network/ui/files";
12
+ import { FileArtifactPane, FileTree, RichFileTree, filterFileTree } from "@tangle-network/ui/files";
13
13
  import { useActiveSessions, useNavbarSessions, useProjectActivity, useTotalRunningSessions } from "@tangle-network/ui/stores";
14
14
  import { ChatContainer } from "@tangle-network/ui/chat";
15
15
  import { OpenUIArtifactRenderer } from "@tangle-network/ui/openui";
@@ -1627,6 +1627,69 @@ function SessionActivityMonitor({ className, compact = false, sessionsById = {},
1627
1627
  });
1628
1628
  }
1629
1629
  //#endregion
1630
+ //#region src/workspace/workspace-artifact-view.tsx
1631
+ /** The shared technical renderer for workspace files and generated artifacts. */
1632
+ function WorkspaceArtifactView({ artifact }) {
1633
+ switch (artifact.kind) {
1634
+ case "file": return /* @__PURE__ */ jsx(FileArtifactPane, {
1635
+ path: artifact.path === artifact.filename ? void 0 : artifact.path,
1636
+ filename: artifact.filename,
1637
+ content: artifact.content,
1638
+ blobUrl: artifact.blobUrl,
1639
+ mimeType: artifact.mimeType,
1640
+ onDownload: artifact.onDownload,
1641
+ tabs: artifact.tabs,
1642
+ activeTabId: artifact.activeTabId,
1643
+ onTabSelect: artifact.onTabSelect,
1644
+ onTabClose: artifact.onTabClose,
1645
+ eyebrow: artifact.eyebrow ?? null,
1646
+ meta: artifact.meta,
1647
+ toolbar: artifact.toolbar,
1648
+ footer: artifact.footer,
1649
+ hideTitleBlock: typeof artifact.title === "string" && artifact.title === artifact.filename && artifact.path === artifact.filename && !artifact.eyebrow && !artifact.meta
1650
+ });
1651
+ case "markdown": return /* @__PURE__ */ jsx(ArtifactPane, {
1652
+ eyebrow: artifact.eyebrow ?? "Document",
1653
+ title: artifact.title,
1654
+ subtitle: artifact.subtitle,
1655
+ meta: artifact.meta,
1656
+ headerActions: artifact.headerActions,
1657
+ toolbar: artifact.toolbar,
1658
+ footer: artifact.footer,
1659
+ children: /* @__PURE__ */ jsx("div", {
1660
+ className: "p-5",
1661
+ children: /* @__PURE__ */ jsx(Markdown, {
1662
+ className: "prose-sm max-w-none",
1663
+ children: artifact.content
1664
+ })
1665
+ })
1666
+ });
1667
+ case "openui": return /* @__PURE__ */ jsx(ArtifactPane, {
1668
+ eyebrow: artifact.eyebrow ?? "Structured Artifact",
1669
+ title: artifact.title,
1670
+ subtitle: artifact.subtitle,
1671
+ meta: artifact.meta,
1672
+ headerActions: artifact.headerActions,
1673
+ toolbar: artifact.toolbar,
1674
+ footer: artifact.footer,
1675
+ children: /* @__PURE__ */ jsx(OpenUIArtifactRenderer, {
1676
+ schema: artifact.schema,
1677
+ onAction: artifact.onAction
1678
+ })
1679
+ });
1680
+ case "custom": return /* @__PURE__ */ jsx(ArtifactPane, {
1681
+ eyebrow: artifact.eyebrow ?? "Artifact",
1682
+ title: artifact.title,
1683
+ subtitle: artifact.subtitle,
1684
+ meta: artifact.meta,
1685
+ headerActions: artifact.headerActions,
1686
+ toolbar: artifact.toolbar,
1687
+ footer: artifact.footer,
1688
+ children: artifact.content
1689
+ });
1690
+ }
1691
+ }
1692
+ //#endregion
1630
1693
  //#region src/workspace/sandbox-workbench.tsx
1631
1694
  function getArtifactTabIcon(kind) {
1632
1695
  switch (kind) {
@@ -1709,66 +1772,6 @@ function ArtifactTabs({ artifacts, activeArtifactId, onSelect, onClose, tabIdPre
1709
1772
  })
1710
1773
  });
1711
1774
  }
1712
- function renderArtifact(artifact) {
1713
- switch (artifact.kind) {
1714
- case "file": return /* @__PURE__ */ jsx(FileArtifactPane, {
1715
- path: artifact.path === artifact.filename ? void 0 : artifact.path,
1716
- filename: artifact.filename,
1717
- content: artifact.content,
1718
- blobUrl: artifact.blobUrl,
1719
- mimeType: artifact.mimeType,
1720
- onDownload: artifact.onDownload,
1721
- tabs: artifact.tabs,
1722
- activeTabId: artifact.activeTabId,
1723
- onTabSelect: artifact.onTabSelect,
1724
- onTabClose: artifact.onTabClose,
1725
- eyebrow: artifact.eyebrow ?? null,
1726
- meta: artifact.meta,
1727
- toolbar: artifact.toolbar,
1728
- footer: artifact.footer,
1729
- hideTitleBlock: typeof artifact.title === "string" && artifact.title === artifact.filename && artifact.path === artifact.filename && !artifact.eyebrow && !artifact.meta
1730
- });
1731
- case "markdown": return /* @__PURE__ */ jsx(ArtifactPane, {
1732
- eyebrow: artifact.eyebrow ?? "Document",
1733
- title: artifact.title,
1734
- subtitle: artifact.subtitle,
1735
- meta: artifact.meta,
1736
- headerActions: artifact.headerActions,
1737
- toolbar: artifact.toolbar,
1738
- footer: artifact.footer,
1739
- children: /* @__PURE__ */ jsx("div", {
1740
- className: "p-5",
1741
- children: /* @__PURE__ */ jsx(Markdown, {
1742
- className: "prose-sm max-w-none",
1743
- children: artifact.content
1744
- })
1745
- })
1746
- });
1747
- case "openui": return /* @__PURE__ */ jsx(ArtifactPane, {
1748
- eyebrow: artifact.eyebrow ?? "Structured Artifact",
1749
- title: artifact.title,
1750
- subtitle: artifact.subtitle,
1751
- meta: artifact.meta,
1752
- headerActions: artifact.headerActions,
1753
- toolbar: artifact.toolbar,
1754
- footer: artifact.footer,
1755
- children: /* @__PURE__ */ jsx(OpenUIArtifactRenderer, {
1756
- schema: artifact.schema,
1757
- onAction: artifact.onAction
1758
- })
1759
- });
1760
- case "custom": return /* @__PURE__ */ jsx(ArtifactPane, {
1761
- eyebrow: artifact.eyebrow ?? "Artifact",
1762
- title: artifact.title,
1763
- subtitle: artifact.subtitle,
1764
- meta: artifact.meta,
1765
- headerActions: artifact.headerActions,
1766
- toolbar: artifact.toolbar,
1767
- footer: artifact.footer,
1768
- children: artifact.content
1769
- });
1770
- }
1771
- }
1772
1775
  function regionHeader(sections, fallback) {
1773
1776
  if (sections.length !== 1) return fallback;
1774
1777
  switch (sections[0]?.key) {
@@ -1895,7 +1898,7 @@ function SandboxWorkbench({ title, subtitle, status, centerHeader: centerHeaderP
1895
1898
  "aria-label": activeArtifact ? void 0 : "Artifact content",
1896
1899
  tabIndex: 0,
1897
1900
  className: `min-h-0 flex-1 overflow-auto bg-background ${focusRingInset}`,
1898
- children: activeArtifact ? renderArtifact(activeArtifact) : /* @__PURE__ */ jsx("div", {
1901
+ children: activeArtifact ? /* @__PURE__ */ jsx(WorkspaceArtifactView, { artifact: activeArtifact }) : /* @__PURE__ */ jsx("div", {
1899
1902
  className: "flex h-full items-center justify-center p-6",
1900
1903
  children: emptyArtifactState ?? /* @__PURE__ */ jsx(EmptyState, {
1901
1904
  icon: /* @__PURE__ */ jsx(Boxes, { className: "h-8 w-8" }),
@@ -2603,4 +2606,93 @@ function ApprovalQueue({ items, className, onApprove, onReject, renderItemDetail
2603
2606
  });
2604
2607
  }
2605
2608
  //#endregion
2606
- export { TerminalPanel as _, AuditResults as a, DirectoryPane as b, SessionActivityMonitor as c, SessionSidebar as d, SESSION_CREATED_EVENT as f, RuntimePane as g, formatRelativeAge as h, TaskBoard as i, createShellShouldRevalidate as l, useOptimisticSessionItems as m, ApprovalQueue as n, AgentWorkbench as o, dispatchSessionCreated as p, CalendarView as r, SandboxWorkbench as s, ArtifactPane$1 as t, shellShouldRevalidate as u, StatusBar as v, WorkspaceLayout as x, StatusBanner as y };
2609
+ //#region src/workspace/workspace-files-pane.tsx
2610
+ function indexNodes(root) {
2611
+ const nodes = /* @__PURE__ */ new Map();
2612
+ function visit(node) {
2613
+ nodes.set(node.path.replace(/\/$/, ""), node);
2614
+ node.children?.forEach(visit);
2615
+ }
2616
+ if (root) visit(root);
2617
+ return nodes;
2618
+ }
2619
+ function activeElementWithin(element) {
2620
+ let active = element.ownerDocument.activeElement;
2621
+ if (!element.contains(active)) return null;
2622
+ while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
2623
+ return active instanceof HTMLElement ? active : null;
2624
+ }
2625
+ /** Compact file navigation shared by workspace companions and standalone panes. */
2626
+ function WorkspaceFilesPane({ root, paths, onSelect, preview, onBack, emptyState, className, ...treeProps }) {
2627
+ const nodes = useMemo(() => indexNodes(root), [root]);
2628
+ const treeRef = useRef(null);
2629
+ const backRef = useRef(null);
2630
+ const returnFocusRef = useRef(null);
2631
+ const wasPreviewRef = useRef(false);
2632
+ const hasPreview = preview !== void 0;
2633
+ const isEmpty = root ? !root.path && root.type === "directory" && !root.children?.length : paths?.length === 0;
2634
+ useEffect(() => {
2635
+ if (hasPreview && !wasPreviewRef.current) backRef.current?.focus();
2636
+ if (!hasPreview && wasPreviewRef.current) {
2637
+ const target = returnFocusRef.current;
2638
+ if (target?.isConnected) target.focus();
2639
+ else treeRef.current?.focus();
2640
+ }
2641
+ wasPreviewRef.current = hasPreview;
2642
+ }, [hasPreview]);
2643
+ return /* @__PURE__ */ jsxs("div", {
2644
+ className: cn$1("flex h-full min-h-0 min-w-0 flex-col bg-background", className),
2645
+ children: [/* @__PURE__ */ jsx("div", {
2646
+ ref: treeRef,
2647
+ hidden: hasPreview,
2648
+ tabIndex: -1,
2649
+ role: "region",
2650
+ "aria-label": "Workspace files",
2651
+ className: cn$1("min-h-0 flex-1", hasPreview && "hidden"),
2652
+ children: isEmpty ? emptyState !== void 0 ? emptyState : /* @__PURE__ */ jsx(EmptyState, {
2653
+ icon: /* @__PURE__ */ jsx(FolderOpen, { className: "h-6 w-6" }),
2654
+ title: "No files yet"
2655
+ }) : /* @__PURE__ */ jsx(RichFileTree, {
2656
+ ...treeProps,
2657
+ root,
2658
+ paths,
2659
+ onSelect: (path) => {
2660
+ if (treeRef.current) returnFocusRef.current = activeElementWithin(treeRef.current);
2661
+ onSelect?.(path, nodes.get(path.replace(/\/$/, "")));
2662
+ },
2663
+ className: "h-full"
2664
+ })
2665
+ }), preview && /* @__PURE__ */ jsxs("div", {
2666
+ className: "flex min-h-0 flex-1 flex-col",
2667
+ children: [/* @__PURE__ */ jsxs("div", {
2668
+ className: "flex min-h-10 shrink-0 flex-wrap items-center gap-2 border-b border-border px-3 py-2",
2669
+ children: [
2670
+ onBack && /* @__PURE__ */ jsxs("button", {
2671
+ ref: backRef,
2672
+ type: "button",
2673
+ onClick: onBack,
2674
+ className: cn$1("inline-flex shrink-0 items-center gap-1 rounded-md px-1 py-1 text-sm text-muted-foreground hover:text-foreground", focusRing),
2675
+ children: [/* @__PURE__ */ jsx(ArrowLeft, {
2676
+ "aria-hidden": "true",
2677
+ className: "h-3.5 w-3.5"
2678
+ }), "Back to files"]
2679
+ }),
2680
+ /* @__PURE__ */ jsx("span", {
2681
+ className: "min-w-0 flex-1 truncate text-sm text-muted-foreground",
2682
+ title: preview.path,
2683
+ children: preview.path
2684
+ }),
2685
+ preview.actions && /* @__PURE__ */ jsx("div", {
2686
+ className: "flex shrink-0 items-center gap-2",
2687
+ children: preview.actions
2688
+ })
2689
+ ]
2690
+ }), /* @__PURE__ */ jsx("div", {
2691
+ className: "min-h-0 flex-1 overflow-auto",
2692
+ children: preview.content
2693
+ })]
2694
+ })]
2695
+ });
2696
+ }
2697
+ //#endregion
2698
+ export { WorkspaceLayout as C, DirectoryPane as S, formatRelativeAge as _, TaskBoard as a, StatusBar as b, SandboxWorkbench as c, createShellShouldRevalidate as d, shellShouldRevalidate as f, useOptimisticSessionItems as g, dispatchSessionCreated as h, CalendarView as i, WorkspaceArtifactView as l, SESSION_CREATED_EVENT as m, WorkspaceFilesPane as n, AuditResults as o, SessionSidebar as p, ApprovalQueue as r, AgentWorkbench as s, ArtifactPane$1 as t, SessionActivityMonitor as u, RuntimePane as v, StatusBanner as x, TerminalPanel as y };
@@ -1,2 +1,2 @@
1
- import { $ as TerminalProps, A as ShellShouldRevalidateArgs, B as SessionSidebarLink, C as SandboxWorkbenchLayoutOptions, D as SandboxWorkbenchSessionProps, E as SandboxWorkbenchProps, F as SessionSidebar, G as SessionOptimisticController, H as SessionSidebarVariant, I as SessionSidebarBadge, J as useOptimisticSessionItems, K as UseOptimisticSessionItemsOptions, L as SessionSidebarFilter, M as createShellShouldRevalidate, N as shellShouldRevalidate, O as SessionActivityMonitor, P as formatRelativeAge, Q as TerminalPanel, R as SessionSidebarGroupBy, S as SandboxWorkbenchFileArtifact, T as SandboxWorkbenchOpenUIArtifact, U as SESSION_CREATED_EVENT, V as SessionSidebarProps, W as SessionCreatedDetail, X as RuntimePaneProps, Y as RuntimePane, Z as TerminalLine, _ as FormAudit, a as ApprovalQueue, at as StatusBannerProps, b as SandboxWorkbenchArtifact, c as CalendarView, ct as WorkspacePaneHeader, d as TaskBoardColumn, dt as WorkspaceLayoutProps, et as ContextBadge, f as TaskBoardItem, g as AuditResultsProps, h as AuditResults, i as ApprovalItem, it as StatusBanner, j as ShellShouldRevalidateOptions, k as SessionActivityMonitorProps, l as CalendarViewProps, lt as WorkspacePaneHeaderProps, m as AuditCheck, n as ArtifactPaneProps, nt as StatusBarProps, o as ApprovalQueueProps, ot as DirectoryPane, p as TaskBoardProps, q as dispatchSessionCreated, r as ApprovalConfidenceStat, rt as BannerType, s as CalendarEvent, st as DirectoryPaneProps, t as ArtifactPane, tt as StatusBar, u as TaskBoard, ut as WorkspaceLayout, v as AgentWorkbench, w as SandboxWorkbenchMarkdownArtifact, x as SandboxWorkbenchCustomArtifact, y as SandboxWorkbench, z as SessionSidebarItem } from "./index-CcbhfDa-.js";
2
- export { AgentWorkbench, type ApprovalConfidenceStat, type ApprovalItem, ApprovalQueue, type ApprovalQueueProps, ArtifactPane, type ArtifactPaneProps, type AuditCheck, AuditResults, type AuditResultsProps, type BannerType, type CalendarEvent, CalendarView, type CalendarViewProps, type ContextBadge, DirectoryPane, type DirectoryPaneProps, type FormAudit, RuntimePane, type RuntimePaneProps, SESSION_CREATED_EVENT, SandboxWorkbench, type SandboxWorkbenchArtifact, type SandboxWorkbenchCustomArtifact, type SandboxWorkbenchFileArtifact, type SandboxWorkbenchLayoutOptions, type SandboxWorkbenchMarkdownArtifact, type SandboxWorkbenchOpenUIArtifact, type SandboxWorkbenchProps, type SandboxWorkbenchSessionProps, SessionActivityMonitor, type SessionActivityMonitorProps, type SessionCreatedDetail, type SessionOptimisticController, SessionSidebar, type SessionSidebarBadge, type SessionSidebarFilter, type SessionSidebarGroupBy, type SessionSidebarItem, type SessionSidebarLink, type SessionSidebarProps, type SessionSidebarVariant, type ShellShouldRevalidateArgs, type ShellShouldRevalidateOptions, StatusBanner, type StatusBannerProps, StatusBar, type StatusBarProps, TaskBoard, type TaskBoardColumn, type TaskBoardItem, type TaskBoardProps, type TerminalLine, TerminalPanel, type TerminalProps, type UseOptimisticSessionItemsOptions, WorkspaceLayout, type WorkspaceLayoutProps, WorkspacePaneHeader, type WorkspacePaneHeaderProps, createShellShouldRevalidate, dispatchSessionCreated, formatRelativeAge, shellShouldRevalidate, useOptimisticSessionItems };
1
+ import { $ as useOptimisticSessionItems, A as SandboxWorkbenchOpenUIArtifact, B as SessionSidebar, C as AgentWorkbench, D as SandboxWorkbenchFileArtifact, E as SandboxWorkbenchCustomArtifact, F as ShellShouldRevalidateArgs, G as SessionSidebarLink, H as SessionSidebarFilter, I as ShellShouldRevalidateOptions, J as SESSION_CREATED_EVENT, K as SessionSidebarProps, L as createShellShouldRevalidate, M as SandboxWorkbenchSessionProps, N as SessionActivityMonitor, O as SandboxWorkbenchLayoutOptions, P as SessionActivityMonitorProps, Q as dispatchSessionCreated, R as shellShouldRevalidate, S as FormAudit, T as SandboxWorkbenchArtifact, U as SessionSidebarGroupBy, V as SessionSidebarBadge, W as SessionSidebarItem, X as SessionOptimisticController, Y as SessionCreatedDetail, Z as UseOptimisticSessionItemsOptions, _ as TaskBoardItem, a as WorkspaceFilesPane, at as ContextBadge, b as AuditResults, c as ApprovalConfidenceStat, ct as BannerType, d as ApprovalQueueProps, dt as DirectoryPane, et as RuntimePane, f as CalendarEvent, ft as DirectoryPaneProps, g as TaskBoardColumn, gt as WorkspaceLayoutProps, h as TaskBoard, ht as WorkspaceLayout, i as WorkspaceArtifactViewProps, it as TerminalProps, j as SandboxWorkbenchProps, k as SandboxWorkbenchMarkdownArtifact, l as ApprovalItem, lt as StatusBanner, m as CalendarViewProps, mt as WorkspacePaneHeaderProps, n as ArtifactPaneProps, nt as TerminalLine, o as WorkspaceFilesPaneProps, ot as StatusBar, p as CalendarView, pt as WorkspacePaneHeader, q as SessionSidebarVariant, r as WorkspaceArtifactView, rt as TerminalPanel, s as WorkspaceFilesPreview, st as StatusBarProps, t as ArtifactPane, tt as RuntimePaneProps, u as ApprovalQueue, ut as StatusBannerProps, v as TaskBoardProps, w as SandboxWorkbench, x as AuditResultsProps, y as AuditCheck, z as formatRelativeAge } from "./index-BxFd7DOv.js";
2
+ export { AgentWorkbench, type ApprovalConfidenceStat, type ApprovalItem, ApprovalQueue, type ApprovalQueueProps, ArtifactPane, type ArtifactPaneProps, type AuditCheck, AuditResults, type AuditResultsProps, type BannerType, type CalendarEvent, CalendarView, type CalendarViewProps, type ContextBadge, DirectoryPane, type DirectoryPaneProps, type FormAudit, RuntimePane, type RuntimePaneProps, SESSION_CREATED_EVENT, SandboxWorkbench, type SandboxWorkbenchArtifact, type SandboxWorkbenchCustomArtifact, type SandboxWorkbenchFileArtifact, type SandboxWorkbenchLayoutOptions, type SandboxWorkbenchMarkdownArtifact, type SandboxWorkbenchOpenUIArtifact, type SandboxWorkbenchProps, type SandboxWorkbenchSessionProps, SessionActivityMonitor, type SessionActivityMonitorProps, type SessionCreatedDetail, type SessionOptimisticController, SessionSidebar, type SessionSidebarBadge, type SessionSidebarFilter, type SessionSidebarGroupBy, type SessionSidebarItem, type SessionSidebarLink, type SessionSidebarProps, type SessionSidebarVariant, type ShellShouldRevalidateArgs, type ShellShouldRevalidateOptions, StatusBanner, type StatusBannerProps, StatusBar, type StatusBarProps, TaskBoard, type TaskBoardColumn, type TaskBoardItem, type TaskBoardProps, type TerminalLine, TerminalPanel, type TerminalProps, type UseOptimisticSessionItemsOptions, WorkspaceArtifactView, type WorkspaceArtifactViewProps, WorkspaceFilesPane, type WorkspaceFilesPaneProps, type WorkspaceFilesPreview, WorkspaceLayout, type WorkspaceLayoutProps, WorkspacePaneHeader, type WorkspacePaneHeaderProps, createShellShouldRevalidate, dispatchSessionCreated, formatRelativeAge, shellShouldRevalidate, useOptimisticSessionItems };
package/dist/workspace.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { t as WorkspacePaneHeader } from "./workspace-pane-header-Bg1cCcHX.js";
2
- import { _ as TerminalPanel, a as AuditResults, b as DirectoryPane, c as SessionActivityMonitor, d as SessionSidebar, f as SESSION_CREATED_EVENT, g as RuntimePane, h as formatRelativeAge, i as TaskBoard, l as createShellShouldRevalidate, m as useOptimisticSessionItems, n as ApprovalQueue, o as AgentWorkbench, p as dispatchSessionCreated, r as CalendarView, s as SandboxWorkbench, t as ArtifactPane, u as shellShouldRevalidate, v as StatusBar, x as WorkspaceLayout, y as StatusBanner } from "./workspace--bNv-rQy.js";
3
- export { AgentWorkbench, ApprovalQueue, ArtifactPane, AuditResults, CalendarView, DirectoryPane, RuntimePane, SESSION_CREATED_EVENT, SandboxWorkbench, SessionActivityMonitor, SessionSidebar, StatusBanner, StatusBar, TaskBoard, TerminalPanel, WorkspaceLayout, WorkspacePaneHeader, createShellShouldRevalidate, dispatchSessionCreated, formatRelativeAge, shellShouldRevalidate, useOptimisticSessionItems };
2
+ import { C as WorkspaceLayout, S as DirectoryPane, _ as formatRelativeAge, a as TaskBoard, b as StatusBar, c as SandboxWorkbench, d as createShellShouldRevalidate, f as shellShouldRevalidate, g as useOptimisticSessionItems, h as dispatchSessionCreated, i as CalendarView, l as WorkspaceArtifactView, m as SESSION_CREATED_EVENT, n as WorkspaceFilesPane, o as AuditResults, p as SessionSidebar, r as ApprovalQueue, s as AgentWorkbench, t as ArtifactPane, u as SessionActivityMonitor, v as RuntimePane, x as StatusBanner, y as TerminalPanel } from "./workspace-iRO3GeHT.js";
3
+ export { AgentWorkbench, ApprovalQueue, ArtifactPane, AuditResults, CalendarView, DirectoryPane, RuntimePane, SESSION_CREATED_EVENT, SandboxWorkbench, SessionActivityMonitor, SessionSidebar, StatusBanner, StatusBar, TaskBoard, TerminalPanel, WorkspaceArtifactView, WorkspaceFilesPane, WorkspaceLayout, WorkspacePaneHeader, createShellShouldRevalidate, dispatchSessionCreated, formatRelativeAge, shellShouldRevalidate, useOptimisticSessionItems };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.118.0",
3
+ "version": "0.120.0",
4
4
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -128,7 +128,7 @@
128
128
  "@nanostores/react": ">=0.8.4 <2.0.0",
129
129
  "@tangle-network/agent-interface": "^1.0.0 || ^2.0.0",
130
130
  "@tangle-network/brand": "^1.10.0",
131
- "@tangle-network/ui": "^11.13.0",
131
+ "@tangle-network/ui": "^11.15.2",
132
132
  "@tanstack/react-query": "^5.0.0",
133
133
  "@tiptap/core": ">=3.20.4 <4.0.0",
134
134
  "@tiptap/extension-collaboration": ">=3.20.4 <4.0.0",
@@ -214,7 +214,7 @@
214
214
  "@tailwindcss/postcss": "^4.3.3",
215
215
  "@tangle-network/agent-interface": "2.13.1",
216
216
  "@tangle-network/brand": "1.10.0",
217
- "@tangle-network/ui": "11.13.0",
217
+ "@tangle-network/ui": "11.15.2",
218
218
  "@tanstack/react-query": "^5.104.0",
219
219
  "@testing-library/dom": "^10.4.2",
220
220
  "@testing-library/jest-dom": "^7.0.1",
@@ -1,2 +0,0 @@
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, RichFileTreeGitEntry, RichFileTreeGitStatus, RichFileTreeProps, 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 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 as v, getFormatLabel as w, fileExtension as x, RichFileTreeThemeVars as y };
@@ -1,25 +0,0 @@
1
- import { ArtifactPane as ArtifactPane$1, Avatar as Avatar$1, AvatarFallback as AvatarFallback$1, AvatarImage as AvatarImage$1, Badge as Badge$1, Button as Button$1, Card as Card$1, CardContent as CardContent$1, CardDescription as CardDescription$1, CardFooter, CardHeader as CardHeader$1, CardTitle as CardTitle$1, CodeBlock, CopyButton, Dialog as Dialog$1, DialogClose, DialogContent as DialogContent$1, DialogDescription as DialogDescription$1, DialogFooter as DialogFooter$1, DialogHeader as DialogHeader$1, DialogOverlay, DialogPortal, DialogTitle as DialogTitle$1, DialogTrigger, DropZone, DropdownMenu as DropdownMenu$1, DropdownMenuCheckboxItem, DropdownMenuContent as DropdownMenuContent$1, DropdownMenuGroup, DropdownMenuItem as DropdownMenuItem$1, DropdownMenuLabel as DropdownMenuLabel$1, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator as DropdownMenuSeparator$1, DropdownMenuShortcut, DropdownMenuSub as DropdownMenuSub$1, DropdownMenuSubContent as DropdownMenuSubContent$1, DropdownMenuSubTrigger as DropdownMenuSubTrigger$1, DropdownMenuTrigger as DropdownMenuTrigger$1, EmptyState as EmptyState$1, FilterField, Heading, InlineCode, Input as Input$1, Label as Label$1, Metric, MetricStrip, PageHeader, PageHeader as PageHeader$1, PageShell, Progress as Progress$1, SegmentedControl, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SidebarDropZone, Skeleton as Skeleton$1, SkeletonCard as SkeletonCard$1, SkeletonTable, StatCard as StatCard$1, StatusPill, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs as Tabs$1, TabsContent as TabsContent$1, TabsList as TabsList$1, TabsTrigger as TabsTrigger$1, TerminalCursor, TerminalDisplay, TerminalInput, TerminalLine, TextShimmer, Textarea as Textarea$1, ThemeToggle, ToastContainer, ToastProvider, Toolbar, UploadProgress, badgeVariants, buttonVariants, useTheme as useTheme$1, useToast } from "@tangle-network/ui/primitives";
2
- import { Logo, TangleKnot as TangleKnot$1 } from "@tangle-network/brand";
3
- import { jsx } from "react/jsx-runtime";
4
- //#region src/primitives/logo.tsx
5
- /** Keep the Sandbox wordmark API while Brand owns the mark and layout. */
6
- function Logo$1({ variant = "sandbox", size = "md", className, iconOnly = false }) {
7
- return /* @__PURE__ */ jsx(Logo, {
8
- size,
9
- variant: iconOnly ? "icon" : "full",
10
- suffix: variant === "sandbox" ? "Sandbox" : null,
11
- className
12
- });
13
- }
14
- Logo$1.displayName = "Logo";
15
- //#endregion
16
- //#region src/primitives/heading.tsx
17
- /** Compatibility name for the canonical nested (h2) page header. */
18
- function SectionTitle(props) {
19
- return /* @__PURE__ */ jsx(PageHeader, {
20
- ...props,
21
- level: 2
22
- });
23
- }
24
- //#endregion
25
- export { Select as $, DropdownMenuItem$1 as A, TerminalInput as At, DropdownMenuTrigger$1 as B, buttonVariants as Bt, DialogTitle$1 as C, TableRow as Ct, DropdownMenuCheckboxItem as D, TabsTrigger$1 as Dt, DropdownMenu$1 as E, TabsList$1 as Et, DropdownMenuSeparator$1 as F, ToastContainer as Ft, Input$1 as G, TangleKnot$1 as Gt, FilterField as H, useToast as Ht, DropdownMenuShortcut as I, ToastProvider as It, MetricStrip as J, Label$1 as K, DropdownMenuSub$1 as L, Toolbar as Lt, DropdownMenuPortal as M, TextShimmer as Mt, DropdownMenuRadioGroup as N, Textarea$1 as Nt, DropdownMenuContent$1 as O, TerminalCursor as Ot, DropdownMenuRadioItem as P, ThemeToggle as Pt, SegmentedControl as Q, DropdownMenuSubContent$1 as R, UploadProgress as Rt, DialogPortal as S, TableHeader as St, DropZone as T, TabsContent$1 as Tt, Heading as U, SectionTitle as Ut, EmptyState$1 as V, useTheme$1 as Vt, InlineCode as W, Logo$1 as Wt, PageShell as X, PageHeader$1 as Y, Progress$1 as Z, DialogContent$1 as _, TableBody as _t, Badge$1 as a, SelectScrollUpButton as at, DialogHeader$1 as b, TableFooter as bt, CardContent$1 as c, SelectValue as ct, CardHeader$1 as d, SkeletonCard$1 as dt, SelectContent as et, CardTitle$1 as f, SkeletonTable as ft, DialogClose as g, Table as gt, Dialog$1 as h, Switch as ht, AvatarImage$1 as i, SelectScrollDownButton as it, DropdownMenuLabel$1 as j, TerminalLine as jt, DropdownMenuGroup as k, TerminalDisplay as kt, CardDescription$1 as l, SidebarDropZone as lt, CopyButton as m, StatusPill as mt, Avatar$1 as n, SelectItem as nt, Button$1 as o, SelectSeparator as ot, CodeBlock as p, StatCard$1 as pt, Metric as q, AvatarFallback$1 as r, SelectLabel as rt, Card$1 as s, SelectTrigger as st, ArtifactPane$1 as t, SelectGroup as tt, CardFooter as u, Skeleton$1 as ut, DialogDescription$1 as v, TableCaption as vt, DialogTrigger as w, Tabs$1 as wt, DialogOverlay as x, TableHead as xt, DialogFooter$1 as y, TableCell as yt, DropdownMenuSubTrigger$1 as z, badgeVariants as zt };