@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.
package/dist/globals.css CHANGED
@@ -1945,6 +1945,12 @@
1945
1945
  border-color: color-mix(in oklab, var(--color-destructive) 30%, transparent);
1946
1946
  }
1947
1947
  }
1948
+ .border-destructive\/40 {
1949
+ border-color: color-mix(in srgb, hsl(var(--destructive)) 40%, transparent);
1950
+ @supports (color: color-mix(in lab, red, red)) {
1951
+ border-color: color-mix(in oklab, var(--color-destructive) 40%, transparent);
1952
+ }
1953
+ }
1948
1954
  .border-destructive\/50 {
1949
1955
  border-color: color-mix(in srgb, hsl(var(--destructive)) 50%, transparent);
1950
1956
  @supports (color: color-mix(in lab, red, red)) {
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { ArtifactPane, ArtifactPaneProps, Avatar, AvatarFallback, AvatarImage, Badge, BadgeProps, Button, ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CodeBlock, CodeBlockProps, CopyButton, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropZone, DropZoneProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EmptyStateProps, InlineCode, InlineCodeProps, Input, InputProps, Label, Progress, SegmentedControl, SegmentedControlOption, SegmentedControlProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SidebarDropZone, SidebarDropZoneProps, Skeleton, SkeletonCard, SkeletonTable, StatCard, StatCardProps, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TerminalDisplay, TerminalCursor as TerminalDisplayCursor, TerminalInput as TerminalDisplayInput, TerminalLine as TerminalDisplayLine, Textarea, TextareaProps, ThemeToggle, Toast, ToastContainer, ToastProvider, UploadFile, UploadProgress, UploadProgressProps, badgeVariants, buttonVariants, useTheme, useToast } from '@tangle-network/ui/primitives';
2
2
  export { L as Logo, a as LogoProps, T as TangleKnot } from './logo-CaIvk3J1.js';
3
3
  export { CodeBlock as CodeBlockDisplay, Markdown, MarkdownProps } from '@tangle-network/ui/markdown';
4
- export { AgentWorkbench, ApprovalConfidenceStat, ApprovalItem, ApprovalQueue, ApprovalQueueProps, AuditCheck, AuditResults, AuditResultsProps, BannerType, CalendarEvent, CalendarView, CalendarViewProps, ContextBadge, DirectoryPane, DirectoryPaneProps, FormAudit, RuntimePane, RuntimePaneProps, SESSION_CREATED_EVENT, SandboxWorkbench, SandboxWorkbenchArtifact, SandboxWorkbenchCustomArtifact, SandboxWorkbenchFileArtifact, SandboxWorkbenchLayoutOptions, SandboxWorkbenchMarkdownArtifact, SandboxWorkbenchOpenUIArtifact, SandboxWorkbenchProps, SandboxWorkbenchSessionProps, SessionActivityMonitor, SessionActivityMonitorProps, SessionCreatedDetail, SessionOptimisticController, SessionSidebar, SessionSidebarBadge, SessionSidebarFilter, SessionSidebarItem, SessionSidebarLink, SessionSidebarProps, ShellShouldRevalidateArgs, ShellShouldRevalidateOptions, StatusBanner, StatusBannerProps, StatusBar, StatusBarProps, TaskBoard, TaskBoardColumn, TaskBoardItem, TaskBoardProps, TerminalLine, TerminalPanel, TerminalProps, UseOptimisticSessionItemsOptions, WorkspaceLayout, WorkspaceLayoutProps, createShellShouldRevalidate, dispatchSessionCreated, shellShouldRevalidate, useOptimisticSessionItems } from './workspace.js';
4
+ export { AgentWorkbench, ApprovalConfidenceStat, ApprovalItem, ApprovalQueue, ApprovalQueueProps, AuditCheck, AuditResults, AuditResultsProps, BannerType, CalendarEvent, CalendarView, CalendarViewProps, ContextBadge, DirectoryPane, DirectoryPaneProps, FormAudit, RuntimePane, RuntimePaneProps, SESSION_CREATED_EVENT, SandboxWorkbench, SandboxWorkbenchArtifact, SandboxWorkbenchCustomArtifact, SandboxWorkbenchFileArtifact, SandboxWorkbenchLayoutOptions, SandboxWorkbenchMarkdownArtifact, SandboxWorkbenchOpenUIArtifact, SandboxWorkbenchProps, SandboxWorkbenchSessionProps, SessionActivityMonitor, SessionActivityMonitorProps, SessionCreatedDetail, SessionOptimisticController, SessionSidebar, SessionSidebarBadge, SessionSidebarFilter, SessionSidebarItem, SessionSidebarLink, SessionSidebarProps, ShellShouldRevalidateArgs, ShellShouldRevalidateOptions, StatusBanner, StatusBannerProps, StatusBar, StatusBarProps, TaskBoard, TaskBoardColumn, TaskBoardItem, TaskBoardProps, TerminalLine, TerminalPanel, TerminalProps, UseOptimisticSessionItemsOptions, WorkspaceLayout, WorkspaceLayoutProps, WorkspacePaneHeader, WorkspacePaneHeaderProps, createShellShouldRevalidate, dispatchSessionCreated, shellShouldRevalidate, useOptimisticSessionItems } from './workspace.js';
5
5
  export { ArtifactView, BRAND_PRISM_THEME, CodeSurface, CodeSurfaceProps, CodeView, CodeViewProps, DiffStats, DiffView, DiffViewProps, FileBreadcrumb, FileBreadcrumbProps, GitStatusBadge, PanelHeader, PanelHeaderProps, PillTabItem, PillTabs, PillTabsProps, PreviewView, PreviewViewProps, SandboxArtifact, SandboxArtifactPane, SandboxArtifactPaneProps, SandboxArtifactTerminal, buildUnifiedPatch, computeDiffStats, resolveLanguage } from './workbench.js';
6
6
  export { OpenUIAction, OpenUIActionsNode, OpenUIArtifactRenderer, OpenUIArtifactRendererProps, OpenUIBadgeNode, OpenUICardNode, OpenUICodeNode, OpenUIComponentNode, OpenUIGridNode, OpenUIHeadingNode, OpenUIKeyValueNode, OpenUIMarkdownNode, OpenUIPrimitive, OpenUISeparatorNode, OpenUIStackNode, OpenUIStatNode, OpenUITableNode, OpenUITextNode } from '@tangle-network/ui/openui';
7
7
  export { AgentTimeline, AgentTimelineArtifactItem, AgentTimelineCustomItem, AgentTimelineItem, AgentTimelineMessageItem, AgentTimelineProps, AgentTimelineStatusItem, AgentTimelineTone, AgentTimelineToolGroupItem, AgentTimelineToolItem, ChatContainer, ChatContainerProps, ChatMessage, ChatMessageProps, MessageList, MessageListProps, MessageRole, ThinkingIndicator, ThinkingIndicatorProps, UserMessage, UserMessageProps } from '@tangle-network/ui/chat';
package/dist/index.js CHANGED
@@ -132,11 +132,12 @@ import {
132
132
  TaskBoard,
133
133
  TerminalPanel,
134
134
  WorkspaceLayout,
135
+ WorkspacePaneHeader,
135
136
  createShellShouldRevalidate,
136
137
  dispatchSessionCreated,
137
138
  shellShouldRevalidate,
138
139
  useOptimisticSessionItems
139
- } from "./chunk-RPOPLGW7.js";
140
+ } from "./chunk-XKKV3B24.js";
140
141
  import {
141
142
  BRAND_PRISM_THEME,
142
143
  CodeSurface,
@@ -576,6 +577,7 @@ export {
576
577
  VariantList,
577
578
  WebSearchPreview,
578
579
  WorkspaceLayout,
580
+ WorkspacePaneHeader,
579
581
  WriteFilePreview,
580
582
  activeSessionsAtom,
581
583
  addMessage,
@@ -147,6 +147,39 @@ function IntegrationsPanel({
147
147
  setDisconnectTarget(null);
148
148
  setDisconnectError(null);
149
149
  }, []);
150
+ const [connectingId, setConnectingId] = React.useState(null);
151
+ const [connectError, setConnectError] = React.useState(null);
152
+ const activeConnect = React.useRef(0);
153
+ const startConnect = React.useCallback(
154
+ async (input) => {
155
+ const reqId = activeConnect.current += 1;
156
+ setConnectError(null);
157
+ let pending;
158
+ try {
159
+ pending = onConnect(input);
160
+ } catch (e) {
161
+ setConnectError(
162
+ e instanceof Error ? e.message : "Failed to start the connection."
163
+ );
164
+ return;
165
+ }
166
+ if (typeof pending?.then !== "function") {
167
+ return;
168
+ }
169
+ setConnectingId(input.providerId);
170
+ try {
171
+ await pending;
172
+ } catch (e) {
173
+ if (activeConnect.current !== reqId) return;
174
+ setConnectError(
175
+ e instanceof Error ? e.message : "Failed to start the connection."
176
+ );
177
+ } finally {
178
+ if (activeConnect.current === reqId) setConnectingId(null);
179
+ }
180
+ },
181
+ [onConnect]
182
+ );
150
183
  const confirmDisconnect = React.useCallback(async () => {
151
184
  if (!disconnectTarget) return;
152
185
  const reqId = activeDisconnect.current += 1;
@@ -245,6 +278,15 @@ function IntegrationsPanel({
245
278
  }
246
279
  )
247
280
  ] }),
281
+ connectError ? /* @__PURE__ */ jsx(
282
+ "div",
283
+ {
284
+ role: "alert",
285
+ "data-testid": "integration-connect-error",
286
+ className: "mb-3 rounded-lg border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive",
287
+ children: connectError
288
+ }
289
+ ) : null,
248
290
  visible.length === 0 ? /* @__PURE__ */ jsx(
249
291
  EmptyState,
250
292
  {
@@ -393,7 +435,15 @@ function IntegrationsPanel({
393
435
  type: "button",
394
436
  "data-testid": `integration-${provider.providerId}`,
395
437
  "data-connected": "false",
396
- onClick: () => onConnect({ providerId: provider.providerId, connectorId }),
438
+ "data-connecting": connectingId === provider.providerId ? "true" : void 0,
439
+ disabled: connectingId === provider.providerId,
440
+ "aria-busy": connectingId === provider.providerId,
441
+ onClick: () => {
442
+ void startConnect({
443
+ providerId: provider.providerId,
444
+ connectorId
445
+ });
446
+ },
397
447
  title: provider.description ? provider.description : `Connect ${name}`,
398
448
  className: cn(
399
449
  "group flex min-w-0 aspect-square flex-col items-center justify-center gap-2 rounded-xl border border-border bg-card p-3 text-center transition-all",
package/dist/styles.css CHANGED
@@ -1945,6 +1945,12 @@
1945
1945
  border-color: color-mix(in oklab, var(--color-destructive) 30%, transparent);
1946
1946
  }
1947
1947
  }
1948
+ .border-destructive\/40 {
1949
+ border-color: color-mix(in srgb, hsl(var(--destructive)) 40%, transparent);
1950
+ @supports (color: color-mix(in lab, red, red)) {
1951
+ border-color: color-mix(in oklab, var(--color-destructive) 40%, transparent);
1952
+ }
1953
+ }
1948
1954
  .border-destructive\/50 {
1949
1955
  border-color: color-mix(in srgb, hsl(var(--destructive)) 50%, transparent);
1950
1956
  @supports (color: color-mix(in lab, red, red)) {
@@ -1,5 +1,5 @@
1
1
  import * as React$1 from 'react';
2
- import { ReactNode, Ref } from 'react';
2
+ import { ReactNode, HTMLAttributes, Ref } from 'react';
3
3
  export { ArtifactPane, ArtifactPaneProps } from '@tangle-network/ui/primitives';
4
4
  import { FileNode, FileTreeVisibilityOptions, FileTabData } from '@tangle-network/ui/files';
5
5
  import { SessionProjectKey, ActiveSessionStatus, ActiveSessionRecord } from '@tangle-network/ui/stores';
@@ -67,6 +67,13 @@ interface WorkspaceLayoutProps {
67
67
  }
68
68
  declare function WorkspaceLayout({ left, leftHeader, center, centerHeader, centerFooter, right, rightHeader, bottom, bottomHeader, defaultLeftOpen, defaultRightOpen, defaultBottomOpen, defaultLeftWidth, defaultRightWidth, defaultBottomHeight, minLeftWidth, maxLeftWidth, minRightWidth, maxRightWidth, minBottomHeight, maxBottomHeight, persistenceKey, resizable, theme, density, leftLabel, rightLabel, bottomLabel, className, }: WorkspaceLayoutProps): React$1.JSX.Element;
69
69
 
70
+ type WorkspacePaneHeaderProps = HTMLAttributes<HTMLDivElement>;
71
+ /**
72
+ * The shared 56px header row for top-level workspace panes and drawers.
73
+ * Bottom runtime panels intentionally use their own compact header.
74
+ */
75
+ declare function WorkspacePaneHeader({ className, ...props }: WorkspacePaneHeaderProps): React$1.JSX.Element;
76
+
70
77
  interface DirectoryPaneProps {
71
78
  root: FileNode;
72
79
  selectedPath?: string;
@@ -632,4 +639,4 @@ interface ApprovalQueueProps {
632
639
  */
633
640
  declare function ApprovalQueue({ items, className, onApprove, onReject, renderItemDetail, renderTypeBadge, renderStats, canResolve, header, emptyState, showResolved: controlledShowResolved, }: ApprovalQueueProps): React$1.JSX.Element;
634
641
 
635
- export { AgentWorkbench, type ApprovalConfidenceStat, type ApprovalItem, ApprovalQueue, type ApprovalQueueProps, 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 SessionSidebarItem, type SessionSidebarLink, type SessionSidebarProps, 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, createShellShouldRevalidate, dispatchSessionCreated, shellShouldRevalidate, useOptimisticSessionItems };
642
+ export { AgentWorkbench, type ApprovalConfidenceStat, type ApprovalItem, ApprovalQueue, type ApprovalQueueProps, 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 SessionSidebarItem, type SessionSidebarLink, type SessionSidebarProps, 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, shellShouldRevalidate, useOptimisticSessionItems };
package/dist/workspace.js CHANGED
@@ -15,11 +15,12 @@ import {
15
15
  TaskBoard,
16
16
  TerminalPanel,
17
17
  WorkspaceLayout,
18
+ WorkspacePaneHeader,
18
19
  createShellShouldRevalidate,
19
20
  dispatchSessionCreated,
20
21
  shellShouldRevalidate,
21
22
  useOptimisticSessionItems
22
- } from "./chunk-RPOPLGW7.js";
23
+ } from "./chunk-XKKV3B24.js";
23
24
  import "./chunk-EI44GEQ5.js";
24
25
  import "./chunk-CZ7CSFO4.js";
25
26
  export {
@@ -39,6 +40,7 @@ export {
39
40
  TaskBoard,
40
41
  TerminalPanel,
41
42
  WorkspaceLayout,
43
+ WorkspacePaneHeader,
42
44
  createShellShouldRevalidate,
43
45
  dispatchSessionCreated,
44
46
  shellShouldRevalidate,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.91.2",
3
+ "version": "0.91.4",
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",