@tangle-network/sandbox-ui 0.10.9 → 0.12.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.
@@ -1,4 +1,4 @@
1
- export { B as Backend, a as BackendSelector, b as BackendSelectorProps, C as ClusterStatusBar, c as ClusterStatusBarProps, d as ClusterStatusItem, e as CreditBalance, f as CreditBalanceProps, D as DashboardLayout, g as DashboardLayoutProps, ah as DashboardProfile, h as DashboardUser, I as Invoice, i as InvoiceTable, j as InvoiceTableProps, N as NavItem, k as NewSandboxCard, l as NewSandboxCardProps, m as PlanCardData, n as PlanCards, o as PlanCardsProps, ai as PlanFeature, p as ProductVariant, q as ProfileAvatar, r as ProfileAvatarProps, s as ProfileComparison, t as ProfileComparisonProps, u as ProfileSelector, v as ProfileSelectorProps, R as RailButton, w as RailButtonProps, x as RailModeButton, y as RailModeButtonProps, z as RailSeparator, A as RailSeparatorProps, E as ResourceMeter, F as ResourceMeterProps, S as SIDEBAR_MOBILE_WIDTH, G as SIDEBAR_PANEL_WIDTH, H as SIDEBAR_RAIL_WIDTH, J as SIDEBAR_TOTAL_WIDTH, K as SandboxCard, L as SandboxCardData, M as SandboxCardProps, O as SandboxStatus, Q as SandboxTable, T as SandboxTableProps, U as Sidebar, V as SidebarContent, W as SidebarContentProps, X as SidebarPanel, Y as SidebarPanelContent, Z as SidebarPanelContentProps, _ as SidebarPanelHeader, $ as SidebarPanelHeaderProps, a0 as SidebarPanelProps, a1 as SidebarProps, a2 as SidebarProvider, a3 as SidebarProviderProps, a4 as SidebarRail, a5 as SidebarRailFooter, a6 as SidebarRailFooterProps, a7 as SidebarRailHeader, a8 as SidebarRailHeaderProps, a9 as SidebarRailNav, aa as SidebarRailNavProps, ab as SidebarRailProps, ac as SidebarUser, aj as TeamRole, ak as Variant, ae as VariantList, af as VariantListProps, al as VariantOutcome, am as VariantStatus, an as canAdminSandbox, ag as useSidebar } from './variant-list-DAhiR-7S.js';
1
+ export { B as Backend, a as BackendSelector, b as BackendSelectorProps, C as ClusterStatusBar, c as ClusterStatusBarProps, d as ClusterStatusItem, e as CreditBalance, f as CreditBalanceProps, D as DashboardLayout, g as DashboardLayoutProps, at as DashboardProfile, h as DashboardUser, H as HARNESS_OPTIONS, i as HarnessPicker, j as HarnessPickerProps, k as HarnessType, I as Invoice, l as InvoiceTable, m as InvoiceTableProps, M as ModelInfo, n as ModelPicker, o as ModelPickerProps, p as ModelPickerVariant, q as ModelPreset, N as NavItem, r as NewSandboxCard, s as NewSandboxCardProps, t as PlanCardData, u as PlanCards, v as PlanCardsProps, au as PlanFeature, w as ProductVariant, x as ProfileAvatar, y as ProfileAvatarProps, z as ProfileComparison, A as ProfileComparisonProps, E as ProfileSelector, F as ProfileSelectorProps, R as RailButton, G as RailButtonProps, J as RailModeButton, K as RailModeButtonProps, L as RailSeparator, O as RailSeparatorProps, Q as ResourceMeter, S as ResourceMeterProps, T as SIDEBAR_MOBILE_WIDTH, U as SIDEBAR_PANEL_WIDTH, V as SIDEBAR_RAIL_WIDTH, W as SIDEBAR_TOTAL_WIDTH, X as SandboxCard, Y as SandboxCardData, Z as SandboxCardProps, _ as SandboxStatus, $ as SandboxTable, a0 as SandboxTableProps, a1 as Sidebar, a2 as SidebarContent, a3 as SidebarContentProps, a4 as SidebarPanel, a5 as SidebarPanelContent, a6 as SidebarPanelContentProps, a7 as SidebarPanelHeader, a8 as SidebarPanelHeaderProps, a9 as SidebarPanelProps, aa as SidebarProps, ab as SidebarProvider, ac as SidebarProviderProps, ad as SidebarRail, ae as SidebarRailFooter, af as SidebarRailFooterProps, ag as SidebarRailHeader, ah as SidebarRailHeaderProps, ai as SidebarRailNav, aj as SidebarRailNavProps, ak as SidebarRailProps, al as SidebarUser, av as TeamRole, aw as Variant, an as VariantList, ao as VariantListProps, ax as VariantOutcome, ay as VariantStatus, az as canAdminSandbox, ap as canonicalModelId, aq as formatContext, ar as formatPricing, as as useSidebar } from './variant-list-BrHYcBCk.js';
2
2
  export { a as BillingBalance, c as BillingDashboard, d as BillingDashboardProps, B as BillingSubscription, b as BillingUsage, e as PricingPage, f as PricingPageProps, P as PricingTier, g as UsageChart, h as UsageChartProps, U as UsageDataPoint, i as formatPrice } from './usage-chart-CPTcNlGs.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  export { a as TemplateCard, T as TemplateCardData, b as TemplateCardProps } from './template-card-BAtvcAkU.js';
package/dist/dashboard.js CHANGED
@@ -7,7 +7,10 @@ import {
7
7
  ClusterStatusBar,
8
8
  CreditBalance,
9
9
  DashboardLayout,
10
+ HARNESS_OPTIONS,
11
+ HarnessPicker,
10
12
  InvoiceTable,
13
+ ModelPicker,
11
14
  NewSandboxCard,
12
15
  PlanCards,
13
16
  ProfileAvatar,
@@ -35,8 +38,11 @@ import {
35
38
  SidebarRailNav,
36
39
  VariantList,
37
40
  canAdminSandbox,
41
+ canonicalModelId,
42
+ formatContext,
43
+ formatPricing,
38
44
  useSidebar
39
- } from "./chunk-Z5PSS3VD.js";
45
+ } from "./chunk-NKUPJC34.js";
40
46
  import {
41
47
  BillingDashboard,
42
48
  PricingPage,
@@ -931,8 +937,11 @@ export {
931
937
  CreditBalance,
932
938
  DashboardLayout,
933
939
  GitPanel,
940
+ HARNESS_OPTIONS,
941
+ HarnessPicker,
934
942
  InfoPanel,
935
943
  InvoiceTable,
944
+ ModelPicker,
936
945
  NetworkConfig,
937
946
  NewSandboxCard,
938
947
  PlanCards,
@@ -970,6 +979,9 @@ export {
970
979
  UsageSummary,
971
980
  VariantList,
972
981
  canAdminSandbox,
982
+ canonicalModelId,
983
+ formatContext,
973
984
  formatPrice,
985
+ formatPricing,
974
986
  useSidebar
975
987
  };
package/dist/files.d.ts CHANGED
@@ -1,12 +1,72 @@
1
- import { a as FileTabData } from './file-tabs-BLfxfmAH.js';
2
- export { F as FileNode, b as FileTabs, c as FileTabsProps, d as FileTree, e as FileTreeProps, f as FileTreeVisibilityOptions, g as filterFileTree } from './file-tabs-BLfxfmAH.js';
1
+ import { F as FileNode, a as FileTabData } from './file-tabs-BLfxfmAH.js';
2
+ export { b as FileTabs, c as FileTabsProps, d as FileTree, e as FileTreeProps, f as FileTreeVisibilityOptions, g as filterFileTree } from './file-tabs-BLfxfmAH.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
+ import { GitStatusEntry, ContextMenuItem, ContextMenuOpenContext, GitStatus } from '@pierre/trees';
5
+ import { ReactNode, CSSProperties } from 'react';
4
6
  import { b as DocumentEditorMode, D as DocumentEditorBackend, d as DocumentEditorPaneCollaborationConfig } from './document-editor-pane-A70-EhdQ.js';
5
7
  import { A as ArtifactPaneProps } from './artifact-pane-Bh45Ssco.js';
6
- import 'react';
7
8
  import '@hocuspocus/provider';
8
9
  import 'yjs';
9
10
 
11
+ /**
12
+ * Re-export Pierre's git-status union under a stable name so consumers
13
+ * don't import directly from the dep. If we ever swap the underlying
14
+ * implementation, only this file changes.
15
+ */
16
+ type RichFileTreeGitStatus = GitStatus;
17
+ type RichFileTreeGitEntry = GitStatusEntry;
18
+ interface RichFileTreeProps {
19
+ /**
20
+ * Either a recursive `FileNode` tree (matches the existing FileTree
21
+ * input) or a flat list of canonical paths. Pass exactly one.
22
+ */
23
+ root?: FileNode;
24
+ paths?: ReadonlyArray<string>;
25
+ /** Currently-selected path. Pierre supports multi-select internally; the
26
+ * wrapper exposes a single string for parity with FileTree. */
27
+ selectedPath?: string;
28
+ /** Called whenever the selection changes (single-select fan-out). */
29
+ onSelect?: (path: string) => void;
30
+ /** Show the inline search input. Defaults to true. */
31
+ search?: boolean;
32
+ /** Open / closed initial expansion. Defaults to "open" — match FileTree. */
33
+ initialExpansion?: "open" | "closed";
34
+ /** Optional git-status decorations per path. */
35
+ gitStatus?: ReadonlyArray<RichFileTreeGitEntry>;
36
+ /**
37
+ * Right-click / button-lane menu content. Receives the row and the
38
+ * trigger context (which interaction opened the menu).
39
+ */
40
+ renderContextMenu?: (item: ContextMenuItem, context: ContextMenuOpenContext) => ReactNode;
41
+ /** Optional header rendered above the tree rows. */
42
+ header?: ReactNode;
43
+ /**
44
+ * Theme override map for shadow-DOM CSS variables. Most consumers can
45
+ * leave this — defaults derive from the host element's computed
46
+ * tokens via `cssVarFromToken()`.
47
+ */
48
+ themeOverrides?: Partial<RichFileTreeThemeVars>;
49
+ className?: string;
50
+ style?: CSSProperties;
51
+ /** Inline height (or set via `style.height`). Defaults to 100% of parent. */
52
+ height?: number | string;
53
+ }
54
+ interface RichFileTreeThemeVars {
55
+ /** Selected-row background. */
56
+ selectedBg: string;
57
+ /** Selected-row foreground. */
58
+ selectedFg: string;
59
+ /** Default row foreground. */
60
+ fg: string;
61
+ /** Hover background. */
62
+ hoverBg: string;
63
+ /** Border / divider color. */
64
+ border: string;
65
+ /** Muted (parent path, breadcrumb) foreground. */
66
+ mutedFg: string;
67
+ }
68
+ declare function RichFileTree({ root, paths, selectedPath, onSelect, search, initialExpansion, gitStatus, renderContextMenu, header, themeOverrides, className, style, height, }: RichFileTreeProps): react_jsx_runtime.JSX.Element;
69
+
10
70
  /**
11
71
  * FilePreview — universal file renderer.
12
72
  *
@@ -66,4 +126,4 @@ interface FileArtifactPaneProps extends Omit<FilePreviewProps, "className"> {
66
126
  */
67
127
  declare function FileArtifactPane({ filename, content, blobUrl, mimeType, onClose, onDownload, path, tabs, activeTabId, onTabSelect, onTabClose, eyebrow, meta, toolbar, footer, className, editor, }: FileArtifactPaneProps): react_jsx_runtime.JSX.Element;
68
128
 
69
- export { FileArtifactPane, type FileArtifactPaneProps, FilePreview, type FilePreviewProps, FileTabData };
129
+ export { FileArtifactPane, type FileArtifactPaneProps, FileNode, FilePreview, type FilePreviewProps, FileTabData, RichFileTree, type RichFileTreeGitEntry, type RichFileTreeGitStatus, type RichFileTreeProps, type RichFileTreeThemeVars };
package/dist/files.js CHANGED
@@ -1,3 +1,6 @@
1
+ import {
2
+ RichFileTree
3
+ } from "./chunk-LQNEZDRM.js";
1
4
  import {
2
5
  FileArtifactPane,
3
6
  FilePreview,
@@ -13,5 +16,6 @@ export {
13
16
  FilePreview,
14
17
  FileTabs,
15
18
  FileTree,
19
+ RichFileTree,
16
20
  filterFileTree
17
21
  };
package/dist/globals.css CHANGED
@@ -1082,6 +1082,9 @@
1082
1082
  .h-\[380px\] {
1083
1083
  height: 380px;
1084
1084
  }
1085
+ .h-\[480px\] {
1086
+ height: 480px;
1087
+ }
1085
1088
  .h-\[500px\] {
1086
1089
  height: 500px;
1087
1090
  }
@@ -1139,6 +1142,9 @@
1139
1142
  .max-h-\[160px\] {
1140
1143
  max-height: 160px;
1141
1144
  }
1145
+ .max-h-\[440px\] {
1146
+ max-height: 440px;
1147
+ }
1142
1148
  .min-h-0 {
1143
1149
  min-height: calc(var(--spacing) * 0);
1144
1150
  }
@@ -1343,6 +1349,9 @@
1343
1349
  .w-\[var\(--indicator-dot-size\)\] {
1344
1350
  width: var(--indicator-dot-size);
1345
1351
  }
1352
+ .w-\[var\(--radix-dropdown-menu-trigger-width\)\] {
1353
+ width: var(--radix-dropdown-menu-trigger-width);
1354
+ }
1346
1355
  .w-\[var\(--radix-select-trigger-width\)\] {
1347
1356
  width: var(--radix-select-trigger-width);
1348
1357
  }
@@ -1403,12 +1412,18 @@
1403
1412
  .max-w-\[150px\] {
1404
1413
  max-width: 150px;
1405
1414
  }
1415
+ .max-w-\[160px\] {
1416
+ max-width: 160px;
1417
+ }
1406
1418
  .max-w-\[250px\] {
1407
1419
  max-width: 250px;
1408
1420
  }
1409
1421
  .max-w-\[300px\] {
1410
1422
  max-width: 300px;
1411
1423
  }
1424
+ .max-w-\[460px\] {
1425
+ max-width: 460px;
1426
+ }
1412
1427
  .max-w-full {
1413
1428
  max-width: 100%;
1414
1429
  }
@@ -1448,6 +1463,9 @@
1448
1463
  .min-w-\[180px\] {
1449
1464
  min-width: 180px;
1450
1465
  }
1466
+ .min-w-\[320px\] {
1467
+ min-width: 320px;
1468
+ }
1451
1469
  .min-w-\[var\(--radix-select-trigger-width\)\] {
1452
1470
  min-width: var(--radix-select-trigger-width);
1453
1471
  }
@@ -2602,6 +2620,9 @@
2602
2620
  .pt-1 {
2603
2621
  padding-top: calc(var(--spacing) * 1);
2604
2622
  }
2623
+ .pt-1\.5 {
2624
+ padding-top: calc(var(--spacing) * 1.5);
2625
+ }
2605
2626
  .pt-2 {
2606
2627
  padding-top: calc(var(--spacing) * 2);
2607
2628
  }
@@ -2641,6 +2662,9 @@
2641
2662
  .pb-0 {
2642
2663
  padding-bottom: calc(var(--spacing) * 0);
2643
2664
  }
2665
+ .pb-0\.5 {
2666
+ padding-bottom: calc(var(--spacing) * 0.5);
2667
+ }
2644
2668
  .pb-1 {
2645
2669
  padding-bottom: calc(var(--spacing) * 1);
2646
2670
  }
package/dist/index.d.ts CHANGED
@@ -14,8 +14,8 @@ import * as React$1 from 'react';
14
14
  import { b as ToolPart } from './parts-CyGkM6Fp.js';
15
15
  export { R as ReasoningPart, S as SessionMessage, a as SessionPart, T as TextPart, c as ToolState, d as ToolStatus, e as ToolTime } from './parts-CyGkM6Fp.js';
16
16
  export { F as FileNode, a as FileTabData, b as FileTabs, c as FileTabsProps, d as FileTree, e as FileTreeProps, f as FileTreeVisibilityOptions, g as filterFileTree } from './file-tabs-BLfxfmAH.js';
17
- export { FileArtifactPane, FileArtifactPaneProps, FilePreview, FilePreviewProps } from './files.js';
18
- export { B as Backend, a as BackendSelector, b as BackendSelectorProps, C as ClusterStatusBar, c as ClusterStatusBarProps, d as ClusterStatusItem, e as CreditBalance, f as CreditBalanceProps, D as DashboardLayout, g as DashboardLayoutProps, h as DashboardUser, I as Invoice, i as InvoiceTable, j as InvoiceTableProps, N as NavItem, k as NewSandboxCard, l as NewSandboxCardProps, P as PanelConfig, m as PlanCardData, n as PlanCards, o as PlanCardsProps, p as ProductVariant, q as ProfileAvatar, r as ProfileAvatarProps, s as ProfileComparison, t as ProfileComparisonProps, u as ProfileSelector, v as ProfileSelectorProps, R as RailButton, w as RailButtonProps, x as RailModeButton, y as RailModeButtonProps, z as RailSeparator, A as RailSeparatorProps, E as ResourceMeter, F as ResourceMeterProps, S as SIDEBAR_MOBILE_WIDTH, G as SIDEBAR_PANEL_WIDTH, H as SIDEBAR_RAIL_WIDTH, J as SIDEBAR_TOTAL_WIDTH, K as SandboxCard, L as SandboxCardData, M as SandboxCardProps, O as SandboxStatus, Q as SandboxTable, T as SandboxTableProps, U as Sidebar, V as SidebarContent, W as SidebarContentProps, X as SidebarPanel, Y as SidebarPanelContent, Z as SidebarPanelContentProps, _ as SidebarPanelHeader, $ as SidebarPanelHeaderProps, a0 as SidebarPanelProps, a1 as SidebarProps, a2 as SidebarProvider, a3 as SidebarProviderProps, a4 as SidebarRail, a5 as SidebarRailFooter, a6 as SidebarRailFooterProps, a7 as SidebarRailHeader, a8 as SidebarRailHeaderProps, a9 as SidebarRailNav, aa as SidebarRailNavProps, ab as SidebarRailProps, ac as SidebarUser, ad as TopNavLink, ae as VariantList, af as VariantListProps, ag as useSidebar } from './variant-list-DAhiR-7S.js';
17
+ export { FileArtifactPane, FileArtifactPaneProps, FilePreview, FilePreviewProps, RichFileTree, RichFileTreeGitEntry, RichFileTreeGitStatus, RichFileTreeProps, RichFileTreeThemeVars } from './files.js';
18
+ export { B as Backend, a as BackendSelector, b as BackendSelectorProps, C as ClusterStatusBar, c as ClusterStatusBarProps, d as ClusterStatusItem, e as CreditBalance, f as CreditBalanceProps, D as DashboardLayout, g as DashboardLayoutProps, h as DashboardUser, H as HARNESS_OPTIONS, i as HarnessPicker, j as HarnessPickerProps, k as HarnessType, I as Invoice, l as InvoiceTable, m as InvoiceTableProps, M as ModelInfo, n as ModelPicker, o as ModelPickerProps, p as ModelPickerVariant, q as ModelPreset, N as NavItem, r as NewSandboxCard, s as NewSandboxCardProps, P as PanelConfig, t as PlanCardData, u as PlanCards, v as PlanCardsProps, w as ProductVariant, x as ProfileAvatar, y as ProfileAvatarProps, z as ProfileComparison, A as ProfileComparisonProps, E as ProfileSelector, F as ProfileSelectorProps, R as RailButton, G as RailButtonProps, J as RailModeButton, K as RailModeButtonProps, L as RailSeparator, O as RailSeparatorProps, Q as ResourceMeter, S as ResourceMeterProps, T as SIDEBAR_MOBILE_WIDTH, U as SIDEBAR_PANEL_WIDTH, V as SIDEBAR_RAIL_WIDTH, W as SIDEBAR_TOTAL_WIDTH, X as SandboxCard, Y as SandboxCardData, Z as SandboxCardProps, _ as SandboxStatus, $ as SandboxTable, a0 as SandboxTableProps, a1 as Sidebar, a2 as SidebarContent, a3 as SidebarContentProps, a4 as SidebarPanel, a5 as SidebarPanelContent, a6 as SidebarPanelContentProps, a7 as SidebarPanelHeader, a8 as SidebarPanelHeaderProps, a9 as SidebarPanelProps, aa as SidebarProps, ab as SidebarProvider, ac as SidebarProviderProps, ad as SidebarRail, ae as SidebarRailFooter, af as SidebarRailFooterProps, ag as SidebarRailHeader, ah as SidebarRailHeaderProps, ai as SidebarRailNav, aj as SidebarRailNavProps, ak as SidebarRailProps, al as SidebarUser, am as TopNavLink, an as VariantList, ao as VariantListProps, ap as canonicalModelId, aq as formatContext, ar as formatPricing, as as useSidebar } from './variant-list-BrHYcBCk.js';
19
19
  export { c as BillingDashboard, d as BillingDashboardProps, e as PricingCards, f as PricingPageProps, g as UsageChart, h as UsageChartProps, U as UsageDataPoint } from './usage-chart-CPTcNlGs.js';
20
20
  export { AuthHeader, GitHubLoginButton, LoginLayout, LoginLayoutProps, UserMenu } from './auth.js';
21
21
  export { CodeBlock, CodeBlock as CodeBlockDisplay, CopyButton, Markdown, MarkdownProps } from './markdown.js';
@@ -40,6 +40,7 @@ import '@radix-ui/react-label';
40
40
  import '@hocuspocus/provider';
41
41
  import 'yjs';
42
42
  import '@tiptap/react';
43
+ import '@pierre/trees';
43
44
  import 'nanostores';
44
45
  import 'clsx';
45
46
 
package/dist/index.js CHANGED
@@ -169,6 +169,9 @@ import {
169
169
  TableHeader,
170
170
  TableRow
171
171
  } from "./chunk-34I7UFSX.js";
172
+ import {
173
+ RichFileTree
174
+ } from "./chunk-LQNEZDRM.js";
172
175
  import {
173
176
  FileArtifactPane,
174
177
  FilePreview,
@@ -189,7 +192,10 @@ import {
189
192
  ClusterStatusBar,
190
193
  CreditBalance,
191
194
  DashboardLayout,
195
+ HARNESS_OPTIONS,
196
+ HarnessPicker,
192
197
  InvoiceTable,
198
+ ModelPicker,
193
199
  NewSandboxCard,
194
200
  PlanCards,
195
201
  ProfileAvatar,
@@ -216,8 +222,11 @@ import {
216
222
  SidebarRailHeader,
217
223
  SidebarRailNav,
218
224
  VariantList,
225
+ canonicalModelId,
226
+ formatContext,
227
+ formatPricing,
219
228
  useSidebar
220
- } from "./chunk-Z5PSS3VD.js";
229
+ } from "./chunk-NKUPJC34.js";
221
230
  import {
222
231
  BillingDashboard,
223
232
  PricingPage,
@@ -428,6 +437,8 @@ export {
428
437
  GitHubLoginButton,
429
438
  GlobResultsPreview,
430
439
  GrepResultsPreview,
440
+ HARNESS_OPTIONS,
441
+ HarnessPicker,
431
442
  InlineCode,
432
443
  InlineThinkingItem,
433
444
  InlineToolItem,
@@ -438,6 +449,7 @@ export {
438
449
  Logo,
439
450
  Markdown,
440
451
  MessageList,
452
+ ModelPicker,
441
453
  NewSandboxCard,
442
454
  OpenUIArtifactRenderer,
443
455
  PlanCards,
@@ -452,6 +464,7 @@ export {
452
464
  RailSeparator,
453
465
  RealtimeSessionRegistry,
454
466
  ResourceMeter,
467
+ RichFileTree,
455
468
  RunGroup,
456
469
  RuntimePane,
457
470
  SIDEBAR_MOBILE_WIDTH,
@@ -530,12 +543,15 @@ export {
530
543
  WriteFilePreview,
531
544
  badgeVariants,
532
545
  buttonVariants,
546
+ canonicalModelId,
533
547
  cn,
534
548
  copyText,
535
549
  createAuthFetcher,
536
550
  filterFileTree,
537
551
  formatBytes,
552
+ formatContext,
538
553
  formatDuration,
554
+ formatPricing,
539
555
  formatUptime,
540
556
  getToolCategory,
541
557
  getToolDisplayMetadata,
package/dist/styles.css CHANGED
@@ -1082,6 +1082,9 @@
1082
1082
  .h-\[380px\] {
1083
1083
  height: 380px;
1084
1084
  }
1085
+ .h-\[480px\] {
1086
+ height: 480px;
1087
+ }
1085
1088
  .h-\[500px\] {
1086
1089
  height: 500px;
1087
1090
  }
@@ -1139,6 +1142,9 @@
1139
1142
  .max-h-\[160px\] {
1140
1143
  max-height: 160px;
1141
1144
  }
1145
+ .max-h-\[440px\] {
1146
+ max-height: 440px;
1147
+ }
1142
1148
  .min-h-0 {
1143
1149
  min-height: calc(var(--spacing) * 0);
1144
1150
  }
@@ -1343,6 +1349,9 @@
1343
1349
  .w-\[var\(--indicator-dot-size\)\] {
1344
1350
  width: var(--indicator-dot-size);
1345
1351
  }
1352
+ .w-\[var\(--radix-dropdown-menu-trigger-width\)\] {
1353
+ width: var(--radix-dropdown-menu-trigger-width);
1354
+ }
1346
1355
  .w-\[var\(--radix-select-trigger-width\)\] {
1347
1356
  width: var(--radix-select-trigger-width);
1348
1357
  }
@@ -1403,12 +1412,18 @@
1403
1412
  .max-w-\[150px\] {
1404
1413
  max-width: 150px;
1405
1414
  }
1415
+ .max-w-\[160px\] {
1416
+ max-width: 160px;
1417
+ }
1406
1418
  .max-w-\[250px\] {
1407
1419
  max-width: 250px;
1408
1420
  }
1409
1421
  .max-w-\[300px\] {
1410
1422
  max-width: 300px;
1411
1423
  }
1424
+ .max-w-\[460px\] {
1425
+ max-width: 460px;
1426
+ }
1412
1427
  .max-w-full {
1413
1428
  max-width: 100%;
1414
1429
  }
@@ -1448,6 +1463,9 @@
1448
1463
  .min-w-\[180px\] {
1449
1464
  min-width: 180px;
1450
1465
  }
1466
+ .min-w-\[320px\] {
1467
+ min-width: 320px;
1468
+ }
1451
1469
  .min-w-\[var\(--radix-select-trigger-width\)\] {
1452
1470
  min-width: var(--radix-select-trigger-width);
1453
1471
  }
@@ -2602,6 +2620,9 @@
2602
2620
  .pt-1 {
2603
2621
  padding-top: calc(var(--spacing) * 1);
2604
2622
  }
2623
+ .pt-1\.5 {
2624
+ padding-top: calc(var(--spacing) * 1.5);
2625
+ }
2605
2626
  .pt-2 {
2606
2627
  padding-top: calc(var(--spacing) * 2);
2607
2628
  }
@@ -2641,6 +2662,9 @@
2641
2662
  .pb-0 {
2642
2663
  padding-bottom: calc(var(--spacing) * 0);
2643
2664
  }
2665
+ .pb-0\.5 {
2666
+ padding-bottom: calc(var(--spacing) * 0.5);
2667
+ }
2644
2668
  .pb-1 {
2645
2669
  padding-bottom: calc(var(--spacing) * 1);
2646
2670
  }
@@ -358,6 +358,125 @@ interface BackendSelectorProps {
358
358
  }
359
359
  declare function BackendSelector({ backends, selected, onChange, label, placeholder, className, }: BackendSelectorProps): react_jsx_runtime.JSX.Element;
360
360
 
361
+ /**
362
+ * Sandbox agent harness types — mirrors `BackendType` from
363
+ * `@tangle-network/sandbox` SDK. Kept in lockstep with that enum:
364
+ * if the SDK adds a backend, add it here too.
365
+ */
366
+ type HarnessType = "opencode" | "claude-code" | "codex" | "amp" | "factory-droids" | "cli-base";
367
+ interface HarnessOption extends Backend {
368
+ type: HarnessType;
369
+ }
370
+ /**
371
+ * Default option list with human-readable copy. Order is curated so the
372
+ * recommended choice (`opencode`) appears first; `cli-base` (no agent) last.
373
+ */
374
+ declare const HARNESS_OPTIONS: readonly HarnessOption[];
375
+ interface HarnessPickerProps extends Omit<BackendSelectorProps, "backends" | "selected" | "onChange"> {
376
+ value: HarnessType;
377
+ onChange: (next: HarnessType) => void;
378
+ /** Filter the available harnesses (e.g. by plan tier). Defaults to all. */
379
+ available?: ReadonlyArray<HarnessType>;
380
+ /** Override or extend the option metadata. Keys are HarnessType. */
381
+ optionsOverride?: Partial<Record<HarnessType, Partial<Omit<HarnessOption, "type">>>>;
382
+ }
383
+ /**
384
+ * Type-safe harness/backend selector for sandbox-backed agent products.
385
+ *
386
+ * Wraps the generic {@link BackendSelector} with the canonical harness list
387
+ * baked in, so consumers don't have to re-declare it (or risk drifting from
388
+ * the SDK enum).
389
+ */
390
+ declare function HarnessPicker({ value, onChange, available, optionsOverride, label, ...rest }: HarnessPickerProps): react_jsx_runtime.JSX.Element;
391
+
392
+ /**
393
+ * Wire-format model entry as returned by `/v1/models` on the Tangle Router
394
+ * (and most OpenAI-compatible gateways). Field names match the upstream
395
+ * response so consumers can pass `data.data` straight through.
396
+ */
397
+ interface ModelInfo {
398
+ /** Provider-local id, e.g. "gpt-5.4" or "anthropic/claude-sonnet-4-6". */
399
+ id: string;
400
+ /** Human label (defaults to id if absent). */
401
+ name?: string;
402
+ /** Provider key, e.g. "openai", "anthropic". Underscored for compat with router. */
403
+ _provider?: string;
404
+ /** Alternative provider field on some gateways. */
405
+ provider?: string;
406
+ /**
407
+ * Per-token prices in USD as decimal strings. Multiply by 1_000_000 for
408
+ * the conventional $/M tokens display.
409
+ */
410
+ pricing?: {
411
+ prompt?: string | null;
412
+ completion?: string | null;
413
+ };
414
+ context_length?: number;
415
+ description?: string | null;
416
+ architecture?: {
417
+ modality?: string;
418
+ input_modalities?: string[];
419
+ output_modalities?: string[];
420
+ };
421
+ }
422
+ /**
423
+ * Curated preset bucket. Three are surfaced by default — they map to typical
424
+ * cost/quality tradeoffs without forcing the consumer to pick a specific
425
+ * model. `match` resolves the preset against the loaded model list.
426
+ */
427
+ interface ModelPreset {
428
+ id: "fast" | "balanced" | "best" | string;
429
+ label: string;
430
+ hint: string;
431
+ icon?: React.ComponentType<{
432
+ className?: string;
433
+ }>;
434
+ /**
435
+ * Pick the canonical model id for this preset given the loaded list.
436
+ * Should return undefined if no acceptable model is loaded yet.
437
+ */
438
+ match: (models: ModelInfo[]) => string | undefined;
439
+ }
440
+ type ModelPickerVariant = "field" | "pill";
441
+ interface ModelPickerProps {
442
+ /** Canonical model id (provider-prefixed, e.g. "openai/gpt-5.4"). */
443
+ value: string;
444
+ onChange: (modelId: string) => void;
445
+ /** Models to choose from. Pass `[]` while loading. */
446
+ models: ModelInfo[];
447
+ /** Show the loading state (overrides empty-list copy). */
448
+ loading?: boolean;
449
+ /** Recently-used canonical ids to surface at the top. */
450
+ recents?: ReadonlyArray<string>;
451
+ /**
452
+ * Curated presets shown above the full list. Defaults to Fast/Balanced/Best
453
+ * resolved against common gpt-5/Claude families.
454
+ */
455
+ presets?: ReadonlyArray<ModelPreset>;
456
+ /** Drop providers from the picker entirely (e.g. "audio", "embedding"). */
457
+ excludeProviders?: ReadonlyArray<string>;
458
+ /** Restrict to these architectures (e.g. ["text"]). Default: all. */
459
+ modalities?: ReadonlyArray<string>;
460
+ /** Trigger appearance. "field" = full-width form field; "pill" = inline chat input pill. */
461
+ variant?: ModelPickerVariant;
462
+ label?: string;
463
+ placeholder?: string;
464
+ className?: string;
465
+ disabled?: boolean;
466
+ }
467
+ /**
468
+ * Resolve the canonical id for a model. Some upstreams already prefix the
469
+ * provider in the id (e.g. "anthropic/claude-haiku-4.5"); others put it in
470
+ * `_provider` and leave the id bare. Always returns "<provider>/<model>"
471
+ * unless the id is already prefixed.
472
+ */
473
+ declare function canonicalModelId(model: ModelInfo): string;
474
+ /** Format $/M tokens. Returns null if pricing is missing or zero. */
475
+ declare function formatPricing(pricing: ModelInfo["pricing"]): string | null;
476
+ /** Format context length compactly (e.g. 200_000 → "200k"). */
477
+ declare function formatContext(ctx: number | undefined): string | null;
478
+ declare function ModelPicker({ value, onChange, models, loading, recents, presets, excludeProviders, modalities, variant, label, placeholder, className, disabled, }: ModelPickerProps): react_jsx_runtime.JSX.Element;
479
+
361
480
  interface Profile {
362
481
  id: string;
363
482
  name: string;
@@ -418,4 +537,4 @@ interface VariantListProps {
418
537
  }
419
538
  declare function VariantList({ variants, selectedId, onSelect, onAccept, onReject, isActioning, className, }: VariantListProps): react_jsx_runtime.JSX.Element;
420
539
 
421
- export { type SidebarPanelHeaderProps as $, type RailSeparatorProps as A, type Backend as B, ClusterStatusBar as C, DashboardLayout as D, ResourceMeter as E, type ResourceMeterProps as F, SIDEBAR_PANEL_WIDTH as G, SIDEBAR_RAIL_WIDTH as H, type Invoice as I, SIDEBAR_TOTAL_WIDTH as J, SandboxCard as K, type SandboxCardData as L, type SandboxCardProps as M, type NavItem as N, type SandboxStatus as O, type PanelConfig as P, SandboxTable as Q, RailButton as R, SIDEBAR_MOBILE_WIDTH as S, type SandboxTableProps as T, Sidebar as U, SidebarContent as V, type SidebarContentProps as W, SidebarPanel as X, SidebarPanelContent as Y, type SidebarPanelContentProps as Z, SidebarPanelHeader as _, BackendSelector as a, type SidebarPanelProps as a0, type SidebarProps as a1, SidebarProvider as a2, type SidebarProviderProps as a3, SidebarRail as a4, SidebarRailFooter as a5, type SidebarRailFooterProps as a6, SidebarRailHeader as a7, type SidebarRailHeaderProps as a8, SidebarRailNav as a9, type SidebarRailNavProps as aa, type SidebarRailProps as ab, type SidebarUser as ac, type TopNavLink as ad, VariantList as ae, type VariantListProps as af, useSidebar as ag, type Profile as ah, type PlanFeature as ai, type TeamRole as aj, type Variant as ak, type VariantOutcome as al, type VariantStatus as am, canAdminSandbox as an, type BackendSelectorProps as b, type ClusterStatusBarProps as c, type ClusterStatusItem as d, CreditBalance as e, type CreditBalanceProps as f, type DashboardLayoutProps as g, type DashboardUser as h, InvoiceTable as i, type InvoiceTableProps as j, NewSandboxCard as k, type NewSandboxCardProps as l, type PlanCardData as m, PlanCards as n, type PlanCardsProps as o, type ProductVariant as p, ProfileAvatar as q, type ProfileAvatarProps as r, ProfileComparison as s, type ProfileComparisonProps as t, ProfileSelector as u, type ProfileSelectorProps as v, type RailButtonProps as w, RailModeButton as x, type RailModeButtonProps as y, RailSeparator as z };
540
+ export { SandboxTable as $, type ProfileComparisonProps as A, type Backend as B, ClusterStatusBar as C, DashboardLayout as D, ProfileSelector as E, type ProfileSelectorProps as F, type RailButtonProps as G, HARNESS_OPTIONS as H, type Invoice as I, RailModeButton as J, type RailModeButtonProps as K, RailSeparator as L, type ModelInfo as M, type NavItem as N, type RailSeparatorProps as O, type PanelConfig as P, ResourceMeter as Q, RailButton as R, type ResourceMeterProps as S, SIDEBAR_MOBILE_WIDTH as T, SIDEBAR_PANEL_WIDTH as U, SIDEBAR_RAIL_WIDTH as V, SIDEBAR_TOTAL_WIDTH as W, SandboxCard as X, type SandboxCardData as Y, type SandboxCardProps as Z, type SandboxStatus as _, BackendSelector as a, type SandboxTableProps as a0, Sidebar as a1, SidebarContent as a2, type SidebarContentProps as a3, SidebarPanel as a4, SidebarPanelContent as a5, type SidebarPanelContentProps as a6, SidebarPanelHeader as a7, type SidebarPanelHeaderProps as a8, type SidebarPanelProps as a9, type SidebarProps as aa, SidebarProvider as ab, type SidebarProviderProps as ac, SidebarRail as ad, SidebarRailFooter as ae, type SidebarRailFooterProps as af, SidebarRailHeader as ag, type SidebarRailHeaderProps as ah, SidebarRailNav as ai, type SidebarRailNavProps as aj, type SidebarRailProps as ak, type SidebarUser as al, type TopNavLink as am, VariantList as an, type VariantListProps as ao, canonicalModelId as ap, formatContext as aq, formatPricing as ar, useSidebar as as, type Profile as at, type PlanFeature as au, type TeamRole as av, type Variant as aw, type VariantOutcome as ax, type VariantStatus as ay, canAdminSandbox as az, type BackendSelectorProps as b, type ClusterStatusBarProps as c, type ClusterStatusItem as d, CreditBalance as e, type CreditBalanceProps as f, type DashboardLayoutProps as g, type DashboardUser as h, HarnessPicker as i, type HarnessPickerProps as j, type HarnessType as k, InvoiceTable as l, type InvoiceTableProps as m, ModelPicker as n, type ModelPickerProps as o, type ModelPickerVariant as p, type ModelPreset as q, NewSandboxCard as r, type NewSandboxCardProps as s, type PlanCardData as t, PlanCards as u, type PlanCardsProps as v, type ProductVariant as w, ProfileAvatar as x, type ProfileAvatarProps as y, ProfileComparison as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.10.9",
3
+ "version": "0.12.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",
@@ -151,6 +151,7 @@
151
151
  },
152
152
  "dependencies": {
153
153
  "@nanostores/react": "^1.1.0",
154
+ "@pierre/trees": "1.0.0-beta.3",
154
155
  "@radix-ui/react-avatar": "^1.1.0",
155
156
  "@radix-ui/react-collapsible": "^1.1.0",
156
157
  "@radix-ui/react-dialog": "^1.1.0",