@tangle-network/sandbox-ui 0.116.6 → 0.116.8

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.
@@ -1085,7 +1085,7 @@ function ProfileAvatar({ user, isLoading = false, onLogout, onSettingsClick, set
1085
1085
  className: "mr-2 h-4 w-4",
1086
1086
  "aria-hidden": "true"
1087
1087
  }), "Settings"]
1088
- }) : /* @__PURE__ */ jsx(DropdownMenuItem, {
1088
+ }) : settingsHref !== null ? /* @__PURE__ */ jsx(DropdownMenuItem, {
1089
1089
  asChild: true,
1090
1090
  children: /* @__PURE__ */ jsxs(Link, {
1091
1091
  href: settingsHref,
@@ -1096,8 +1096,8 @@ function ProfileAvatar({ user, isLoading = false, onLogout, onSettingsClick, set
1096
1096
  "aria-hidden": "true"
1097
1097
  }), "Settings"]
1098
1098
  })
1099
- }),
1100
- onLogout && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(DropdownMenuSeparator, {}), /* @__PURE__ */ jsxs(DropdownMenuItem, {
1099
+ }) : null,
1100
+ onLogout && /* @__PURE__ */ jsxs(Fragment, { children: [(children || appearance || onSettingsClick || settingsHref !== null) && /* @__PURE__ */ jsx(DropdownMenuSeparator, {}), /* @__PURE__ */ jsxs(DropdownMenuItem, {
1101
1101
  className: "text-[var(--surface-danger-text)]",
1102
1102
  onClick: onLogout,
1103
1103
  children: [/* @__PURE__ */ jsx(LogOutIcon, {
@@ -2389,9 +2389,9 @@ function BackendSelector({ backends, selected, onChange, variant = "pill", label
2389
2389
  children: [trigger, /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsx(Select.Content, {
2390
2390
  position: "popper",
2391
2391
  sideOffset: 4,
2392
- className: cn$1("z-50 overflow-hidden", variant === "pill" ? "min-w-[240px] max-w-[320px]" : "w-[var(--radix-select-trigger-width)]", "rounded-[var(--radius-md)] border border-[var(--md3-outline-variant)]", "bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]", "data-[state=open]:animate-in data-[state=closed]:animate-out", "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95", "data-[side=bottom]:slide-in-from-top-1"),
2392
+ className: cn$1("z-50 max-h-[var(--radix-select-content-available-height)] overflow-hidden", variant === "pill" ? "min-w-[240px] max-w-[320px]" : "w-[var(--radix-select-trigger-width)]", "rounded-[var(--radius-md)] border border-[var(--md3-outline-variant)]", "bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]", "data-[state=open]:animate-in data-[state=closed]:animate-out", "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95", "data-[side=bottom]:slide-in-from-top-1"),
2393
2393
  children: /* @__PURE__ */ jsx(Select.Viewport, {
2394
- className: "p-1",
2394
+ className: "max-h-[min(24rem,calc(var(--radix-select-content-available-height)-2px))] overflow-y-auto overscroll-contain p-1",
2395
2395
  children: backends.map((backend) => /* @__PURE__ */ jsxs(Select.Item, {
2396
2396
  value: backend.type,
2397
2397
  className: cn$1("relative flex cursor-pointer select-none items-start gap-2.5 rounded-[var(--radius-sm)]", "px-3 py-2 text-sm outline-none", "transition-colors duration-[var(--transition-fast)]", "hover:bg-accent/50 focus:bg-accent/50", "data-[state=checked]:bg-[var(--accent-surface-soft)] data-[state=checked]:text-[var(--brand-primary)]"),
@@ -1,4 +1,4 @@
1
- import { $ as HARNESS_BRAND, $t as useSidebar, A as Variant, An as SidebarProps, At as ActivityItem, B as ProfileComparison, Bn as ThemeMode, Bt as InsufficientBalance, C as GitPanelProps, Cn as SidebarContentProps, Ct as SandboxCardData, D as UsageSummaryProps, Dn as SidebarPanelHeader, Dt as canAdminSandbox, E as UsageSummaryData, En as SidebarPanelContentProps, Et as TeamRole, F as MetricAreaChart, Fn as SidebarRailHeaderProps, Ft as ResourceMeterProps, G as SidebarLayoutFlyoutItem, Gt as CreditBalanceProps, H as ProfileSelector, Ht as OutOfCreditsModalProps, I as MetricAreaChartProps, In as SidebarRailNav, It as ClusterStatusBar, J as DashboardLayout, Jt as SIDEBAR_RAIL_LABELED_WIDTH, K as SidebarLayoutNavItem, Kt as SIDEBAR_MOBILE_WIDTH, L as MetricChartPoint, Ln as SidebarRailNavProps, Lt as ClusterStatusBarProps, M as VariantListProps, Mn as SidebarRailFooter, Mt as ResourceSnapshotItem, N as VariantOutcome, Nn as SidebarRailFooterProps, Nt as ResourceSnapshotProps, O as SystemLogsViewer, On as SidebarPanelHeaderProps, Ot as ActivityFeed, P as VariantStatus, Pn as SidebarRailHeader, Pt as ResourceMeter, Q as ProductVariant, Qt as SidebarProviderProps, R as MetricChartTone, Rn as SidebarRailProps, Rt as ClusterStatusItem, S as GitPanel, Sn as SidebarContent, St as SandboxCard, T as UsageSummary, Tn as SidebarPanelContent, Tt as SandboxStatus, U as ProfileSelectorProps, Ut as parseInsufficientBalance, V as ProfileComparisonProps, Vt as OutOfCreditsModal, W as SidebarLayout, Wt as CreditBalance, X as DashboardUser, Xt as SIDEBAR_TOTAL_WIDTH, Y as DashboardLayoutProps, Yt as SIDEBAR_RAIL_WIDTH, Z as NavItem, Zt as SidebarProvider, _ as ProcessListProps, _n as RailModeButtonProps, _t as InvoiceTableProps, a as SnapshotInfo, an as RailButton, at as HarnessPickerProps, b as PortsListProps, bn as RailThemeToggle, bt as NewSandboxCard, c as BackendConfig, cn as RailCollapseToggleProps, ct as Backend, d as McpServer, dn as RailExpandableSubItem, dt as PlanCardData, en as RailTooltip, et as HarnessBrand, f as NetworkConfig, fn as RailFlyout, ft as PlanCards, g as ProcessList, gn as RailModeButton, gt as InvoiceTable, h as ProcessInfo, hn as RailHeaderProps, ht as Invoice, i as PromoBannerProps, in as ProfileAvatarProps, it as HarnessPicker, j as VariantList, jn as SidebarRail, jt as ResourceSnapshot, k as SystemLogsViewerProps, kn as SidebarPanelProps, kt as ActivityFeedProps, l as BackendConfigProps, ln as RailExpandable, lt as BackendSelector, m as NetworkConfigProps, mn as RailHeader, mt as PlanFeature, n as InfoPanelProps, nn as AppearanceController, nt as HarnessLogoProps, o as SnapshotList, on as RailButtonProps, ot as HarnessType, p as NetworkConfigData, pn as RailFlyoutProps, pt as PlanCardsProps, q as SidebarLayoutProps, qt as SIDEBAR_PANEL_WIDTH, r as PromoBanner, rn as ProfileAvatar, rt as HARNESS_OPTIONS, s as SnapshotListProps, sn as RailCollapseToggle, st as chatCapableHarnesses, t as InfoPanel, tn as RailTooltipProps, tt as HarnessLogo, u as BackendStatusData, un as RailExpandableProps, ut as BackendSelectorProps, v as ExposedPort, vn as RailSeparator, vt as SandboxTable, w as GitStatusData, wn as SidebarPanel, wt as SandboxCardProps, x as GitCommitData, xn as Sidebar, xt as NewSandboxCardProps, y as PortsList, yn as RailSeparatorProps, yt as SandboxTableProps, z as Profile, zn as SidebarUser, zt as INSUFFICIENT_BALANCE_CODE } from "./index-D82GWl1N.js";
1
+ import { $ as HARNESS_BRAND, $t as useSidebar, A as Variant, An as SidebarProps, At as ActivityItem, B as ProfileComparison, Bn as ThemeMode, Bt as InsufficientBalance, C as GitPanelProps, Cn as SidebarContentProps, Ct as SandboxCardData, D as UsageSummaryProps, Dn as SidebarPanelHeader, Dt as canAdminSandbox, E as UsageSummaryData, En as SidebarPanelContentProps, Et as TeamRole, F as MetricAreaChart, Fn as SidebarRailHeaderProps, Ft as ResourceMeterProps, G as SidebarLayoutFlyoutItem, Gt as CreditBalanceProps, H as ProfileSelector, Ht as OutOfCreditsModalProps, I as MetricAreaChartProps, In as SidebarRailNav, It as ClusterStatusBar, J as DashboardLayout, Jt as SIDEBAR_RAIL_LABELED_WIDTH, K as SidebarLayoutNavItem, Kt as SIDEBAR_MOBILE_WIDTH, L as MetricChartPoint, Ln as SidebarRailNavProps, Lt as ClusterStatusBarProps, M as VariantListProps, Mn as SidebarRailFooter, Mt as ResourceSnapshotItem, N as VariantOutcome, Nn as SidebarRailFooterProps, Nt as ResourceSnapshotProps, O as SystemLogsViewer, On as SidebarPanelHeaderProps, Ot as ActivityFeed, P as VariantStatus, Pn as SidebarRailHeader, Pt as ResourceMeter, Q as ProductVariant, Qt as SidebarProviderProps, R as MetricChartTone, Rn as SidebarRailProps, Rt as ClusterStatusItem, S as GitPanel, Sn as SidebarContent, St as SandboxCard, T as UsageSummary, Tn as SidebarPanelContent, Tt as SandboxStatus, U as ProfileSelectorProps, Ut as parseInsufficientBalance, V as ProfileComparisonProps, Vt as OutOfCreditsModal, W as SidebarLayout, Wt as CreditBalance, X as DashboardUser, Xt as SIDEBAR_TOTAL_WIDTH, Y as DashboardLayoutProps, Yt as SIDEBAR_RAIL_WIDTH, Z as NavItem, Zt as SidebarProvider, _ as ProcessListProps, _n as RailModeButtonProps, _t as InvoiceTableProps, a as SnapshotInfo, an as RailButton, at as HarnessPickerProps, b as PortsListProps, bn as RailThemeToggle, bt as NewSandboxCard, c as BackendConfig, cn as RailCollapseToggleProps, ct as Backend, d as McpServer, dn as RailExpandableSubItem, dt as PlanCardData, en as RailTooltip, et as HarnessBrand, f as NetworkConfig, fn as RailFlyout, ft as PlanCards, g as ProcessList, gn as RailModeButton, gt as InvoiceTable, h as ProcessInfo, hn as RailHeaderProps, ht as Invoice, i as PromoBannerProps, in as ProfileAvatarProps, it as HarnessPicker, j as VariantList, jn as SidebarRail, jt as ResourceSnapshot, k as SystemLogsViewerProps, kn as SidebarPanelProps, kt as ActivityFeedProps, l as BackendConfigProps, ln as RailExpandable, lt as BackendSelector, m as NetworkConfigProps, mn as RailHeader, mt as PlanFeature, n as InfoPanelProps, nn as AppearanceController, nt as HarnessLogoProps, o as SnapshotList, on as RailButtonProps, ot as HarnessType, p as NetworkConfigData, pn as RailFlyoutProps, pt as PlanCardsProps, q as SidebarLayoutProps, qt as SIDEBAR_PANEL_WIDTH, r as PromoBanner, rn as ProfileAvatar, rt as HARNESS_OPTIONS, s as SnapshotListProps, sn as RailCollapseToggle, st as chatCapableHarnesses, t as InfoPanel, tn as RailTooltipProps, tt as HarnessLogo, u as BackendStatusData, un as RailExpandableProps, ut as BackendSelectorProps, v as ExposedPort, vn as RailSeparator, vt as SandboxTable, w as GitStatusData, wn as SidebarPanel, wt as SandboxCardProps, x as GitCommitData, xn as Sidebar, xt as NewSandboxCardProps, y as PortsList, yn as RailSeparatorProps, yt as SandboxTableProps, z as Profile, zn as SidebarUser, zt as INSUFFICIENT_BALANCE_CODE } from "./index-CGMpKgB8.js";
2
2
  import { a as modelBrandFor, i as canonicalModelId, n as ModelBrandStack, r as ModelInfo, t as ModelBrandIdentity } from "./model-brand-B9A4H9pJ.js";
3
3
  import { a as UsageChartProps, c as PricingPageProps, d as BillingBalance, f as BillingDashboard, h as BillingUsage, i as UsageChart, l as PricingTier, m as BillingSubscription, n as TemplateCardData, o as UsageDataPoint, p as BillingDashboardProps, r as TemplateCardProps, s as PricingPage, t as TemplateCard, u as formatPrice } from "./template-card-L-4gmjx2.js";
4
4
  export { ActivityFeed, type ActivityFeedProps, type ActivityItem, type AppearanceController, type Backend, BackendConfig, type BackendConfigProps, BackendSelector, type BackendSelectorProps, type BackendStatusData, type BillingBalance, BillingDashboard, type BillingDashboardProps, type BillingSubscription, type BillingUsage, ClusterStatusBar, type ClusterStatusBarProps, type ClusterStatusItem, CreditBalance, type CreditBalanceProps, DashboardLayout, type DashboardLayoutProps, type Profile as DashboardProfile, type SnapshotInfo as DashboardSnapshotInfo, type DashboardUser, type ExposedPort, type GitCommitData, GitPanel, type GitPanelProps, type GitStatusData, HARNESS_BRAND, HARNESS_OPTIONS, type HarnessBrand, HarnessLogo, type HarnessLogoProps, HarnessPicker, type HarnessPickerProps, type HarnessType, INSUFFICIENT_BALANCE_CODE, InfoPanel, type InfoPanelProps, type InsufficientBalance, type Invoice, InvoiceTable, type InvoiceTableProps, type McpServer, MetricAreaChart, type MetricAreaChartProps, type MetricChartPoint, type MetricChartTone, type ModelBrandIdentity, ModelBrandStack, type ModelInfo, type NavItem, NetworkConfig, type NetworkConfigData, type NetworkConfigProps, NewSandboxCard, type NewSandboxCardProps, OutOfCreditsModal, type OutOfCreditsModalProps, type PlanCardData, PlanCards, type PlanCardsProps, type PlanFeature, PortsList, type PortsListProps, PricingPage, type PricingPageProps, type PricingTier, type ProcessInfo, ProcessList, type ProcessListProps, type ProductVariant, ProfileAvatar, type ProfileAvatarProps, ProfileComparison, type ProfileComparisonProps, ProfileSelector, type ProfileSelectorProps, PromoBanner, type PromoBannerProps, RailButton, type RailButtonProps, RailCollapseToggle, type RailCollapseToggleProps, RailExpandable, type RailExpandableProps, type RailExpandableSubItem, RailFlyout, type RailFlyoutProps, RailHeader, type RailHeaderProps, RailModeButton, type RailModeButtonProps, RailSeparator, type RailSeparatorProps, RailThemeToggle, RailTooltip, type RailTooltipProps, ResourceMeter, type ResourceMeterProps, ResourceSnapshot, type ResourceSnapshotItem, type ResourceSnapshotProps, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, type SandboxCardData, type SandboxCardProps, type SandboxStatus, SandboxTable, type SandboxTableProps, Sidebar, SidebarContent, type SidebarContentProps, SidebarLayout, type SidebarLayoutFlyoutItem, type SidebarLayoutNavItem, type SidebarLayoutProps, SidebarPanel, SidebarPanelContent, type SidebarPanelContentProps, SidebarPanelHeader, type SidebarPanelHeaderProps, type SidebarPanelProps, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarRail, SidebarRailFooter, type SidebarRailFooterProps, SidebarRailHeader, type SidebarRailHeaderProps, SidebarRailNav, type SidebarRailNavProps, type SidebarRailProps, type SidebarUser, SnapshotList, type SnapshotListProps, SystemLogsViewer, type SystemLogsViewerProps, type TeamRole, TemplateCard, type TemplateCardData, type TemplateCardProps, type ThemeMode, UsageChart, type UsageChartProps, type UsageDataPoint, UsageSummary, type UsageSummaryData, type UsageSummaryProps, type Variant, VariantList, type VariantListProps, type VariantOutcome, type VariantStatus, canAdminSandbox, canonicalModelId, chatCapableHarnesses, formatPrice, modelBrandFor, parseInsufficientBalance, useSidebar };
package/dist/dashboard.js CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as SidebarRailNav, A as ResourceMeter, B as RailFlyout, C as InvoiceTable, D as canAdminSandbox, E as SandboxCard, F as CreditBalance, G as Sidebar, H as RailModeButton, I as ProfileAvatar, J as SidebarPanelContent, K as SidebarContent, L as RailButton, M as INSUFFICIENT_BALANCE_CODE, N as OutOfCreditsModal, O as ActivityFeed, P as parseInsufficientBalance, Q as SidebarRailHeader, R as RailCollapseToggle, S as PlanCards, T as NewSandboxCard, U as RailSeparator, V as RailHeader, W as RailThemeToggle, X as SidebarRail, Y as SidebarPanelHeader, Z as SidebarRailFooter, _ as HarnessPicker, a as ProcessList, at as SIDEBAR_TOTAL_WIDTH, b as HarnessLogo, c as UsageSummary, d as MetricAreaChart, et as RailTooltip, f as ProfileComparison, g as HARNESS_OPTIONS, h as DashboardLayout, i as NetworkConfig, it as SIDEBAR_RAIL_WIDTH, j as ClusterStatusBar, k as ResourceSnapshot, l as SystemLogsViewer, m as SidebarLayout, n as SnapshotList, nt as SIDEBAR_PANEL_WIDTH, o as PortsList, ot as SidebarProvider, p as ProfileSelector, q as SidebarPanel, r as BackendConfig, rt as SIDEBAR_RAIL_LABELED_WIDTH, s as GitPanel, st as useSidebar, t as PromoBanner, tt as SIDEBAR_MOBILE_WIDTH, u as VariantList, v as chatCapableHarnesses, w as SandboxTable, x as BackendSelector, y as HARNESS_BRAND, z as RailExpandable } from "./dashboard-Bx27mUVe.js";
1
+ import { $ as SidebarRailNav, A as ResourceMeter, B as RailFlyout, C as InvoiceTable, D as canAdminSandbox, E as SandboxCard, F as CreditBalance, G as Sidebar, H as RailModeButton, I as ProfileAvatar, J as SidebarPanelContent, K as SidebarContent, L as RailButton, M as INSUFFICIENT_BALANCE_CODE, N as OutOfCreditsModal, O as ActivityFeed, P as parseInsufficientBalance, Q as SidebarRailHeader, R as RailCollapseToggle, S as PlanCards, T as NewSandboxCard, U as RailSeparator, V as RailHeader, W as RailThemeToggle, X as SidebarRail, Y as SidebarPanelHeader, Z as SidebarRailFooter, _ as HarnessPicker, a as ProcessList, at as SIDEBAR_TOTAL_WIDTH, b as HarnessLogo, c as UsageSummary, d as MetricAreaChart, et as RailTooltip, f as ProfileComparison, g as HARNESS_OPTIONS, h as DashboardLayout, i as NetworkConfig, it as SIDEBAR_RAIL_WIDTH, j as ClusterStatusBar, k as ResourceSnapshot, l as SystemLogsViewer, m as SidebarLayout, n as SnapshotList, nt as SIDEBAR_PANEL_WIDTH, o as PortsList, ot as SidebarProvider, p as ProfileSelector, q as SidebarPanel, r as BackendConfig, rt as SIDEBAR_RAIL_LABELED_WIDTH, s as GitPanel, st as useSidebar, t as PromoBanner, tt as SIDEBAR_MOBILE_WIDTH, u as VariantList, v as chatCapableHarnesses, w as SandboxTable, x as BackendSelector, y as HARNESS_BRAND, z as RailExpandable } from "./dashboard-DJQFB7iZ.js";
2
2
  import { n as canonicalModelId, r as modelBrandFor, t as ModelBrandStack } from "./model-brand-hMyDTUqB.js";
3
3
  import { a as formatPrice, i as PricingPage, n as TemplateCard, o as BillingDashboard, r as UsageChart, t as InfoPanel } from "./info-panel-C9cqDzOL.js";
4
4
  export { ActivityFeed, BackendConfig, BackendSelector, BillingDashboard, ClusterStatusBar, CreditBalance, DashboardLayout, GitPanel, HARNESS_BRAND, HARNESS_OPTIONS, HarnessLogo, HarnessPicker, INSUFFICIENT_BALANCE_CODE, InfoPanel, InvoiceTable, MetricAreaChart, ModelBrandStack, NetworkConfig, NewSandboxCard, OutOfCreditsModal, PlanCards, PortsList, PricingPage, ProcessList, ProfileAvatar, ProfileComparison, ProfileSelector, PromoBanner, RailButton, RailCollapseToggle, RailExpandable, RailFlyout, RailHeader, RailModeButton, RailSeparator, RailThemeToggle, RailTooltip, ResourceMeter, ResourceSnapshot, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, SandboxTable, Sidebar, SidebarContent, SidebarLayout, SidebarPanel, SidebarPanelContent, SidebarPanelHeader, SidebarProvider, SidebarRail, SidebarRailFooter, SidebarRailHeader, SidebarRailNav, SnapshotList, SystemLogsViewer, TemplateCard, UsageChart, UsageSummary, VariantList, canAdminSandbox, canonicalModelId, chatCapableHarnesses, formatPrice, modelBrandFor, parseInsufficientBalance, useSidebar };
package/dist/globals.css CHANGED
@@ -971,6 +971,9 @@
971
971
  .max-h-\[90vh\] {
972
972
  max-height: 90vh;
973
973
  }
974
+ .max-h-\[min\(24rem\,calc\(var\(--radix-select-content-available-height\)-2px\)\)\] {
975
+ max-height: min(24rem, calc(var(--radix-select-content-available-height) - 2px));
976
+ }
974
977
  .max-h-\[min\(60vh\,35rem\)\] {
975
978
  max-height: min(60vh, 35rem);
976
979
  }
@@ -980,6 +983,9 @@
980
983
  .max-h-\[var\(--radix-dropdown-menu-content-available-height\)\] {
981
984
  max-height: var(--radix-dropdown-menu-content-available-height);
982
985
  }
986
+ .max-h-\[var\(--radix-select-content-available-height\)\] {
987
+ max-height: var(--radix-select-content-available-height);
988
+ }
983
989
  .max-h-full {
984
990
  max-height: 100%;
985
991
  }
@@ -1945,6 +1951,9 @@
1945
1951
  .overflow-y-auto {
1946
1952
  overflow-y: auto;
1947
1953
  }
1954
+ .overscroll-contain {
1955
+ overscroll-behavior: contain;
1956
+ }
1948
1957
  .\!rounded-full {
1949
1958
  border-radius: calc(infinity * 1px) !important;
1950
1959
  }
@@ -288,7 +288,8 @@ interface ProfileAvatarProps {
288
288
  isLoading?: boolean;
289
289
  onLogout?: () => void;
290
290
  onSettingsClick?: () => void;
291
- settingsHref?: string;
291
+ /** Pass null when the host has no settings destination. */
292
+ settingsHref?: string | null;
292
293
  /** Extra dropdown items rendered before settings/logout */
293
294
  children?: React$1.ReactNode;
294
295
  className?: string;
@@ -859,7 +860,8 @@ interface DashboardLayoutProps {
859
860
  isLoading?: boolean;
860
861
  onLogout?: () => void;
861
862
  onSettingsClick?: () => void;
862
- settingsHref?: string;
863
+ /** Pass null when the host has no settings destination. */
864
+ settingsHref?: string | null;
863
865
  onNewSandbox?: () => void;
864
866
  className?: string;
865
867
  sidebarClassName?: string;
@@ -1008,7 +1010,8 @@ interface SidebarLayoutProps {
1008
1010
  isLoading?: boolean;
1009
1011
  onLogout?: () => void;
1010
1012
  onSettingsClick?: () => void;
1011
- settingsHref?: string;
1013
+ /** Pass null when the host has no settings destination. */
1014
+ settingsHref?: string | null;
1012
1015
  /** Extra items rendered before settings/logout in the profile menu. */
1013
1016
  profileMenuItems?: React$1.ReactNode;
1014
1017
  /**
@@ -1,4 +1,4 @@
1
- import { v as ExposedPort } from "./index-D82GWl1N.js";
1
+ import { v as ExposedPort } from "./index-CGMpKgB8.js";
2
2
  import { _ as RichFileTreeGitStatus, g as RichFileTreeGitEntry } from "./index-CXX5IpH2.js";
3
3
  import { a as PreviewReadiness, i as PreviewAccess } from "./embedded-app-view-B_vMTtJn.js";
4
4
  import * as React$1 from "react";
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { a as LoginLayout, c as UserMenu, d as TangleLoginButtonProps, i as GitHubLoginButtonProps, l as UserMenuProps, n as AuthHeaderProps, o as LoginLayoutProps, r as GitHubLoginButton, s as SessionUser, t as AuthHeader, u as TangleLoginButton } from "./index-DvmZLMT1.js";
2
2
  import { A as modelProvider, B as ReasoningLevelOption, C as ArtifactAgentDockProps, D as ArtifactKind, E as ArtifactDockStreamEvent, F as AgentProfilePicker, H as ReasoningLevelPickerProps, I as AgentProfilePickerProps, L as DEFAULT_REASONING_LEVEL_OPTIONS, M as AgentProfileCapability, N as AgentProfileDraft, O as ArtifactScope, P as AgentProfileOption, R as HARNESS_REASONING_OPTIONS, S as ArtifactAgentDock, T as ArtifactDockMessage, V as ReasoningLevelPicker, _ as MessageRole, a as AgentTimelineMessageItem, b as UserMessage, c as AgentTimelineTone, d as ChatContainer, f as ChatContainerProps, g as MessageListProps, h as MessageList, i as AgentTimelineItem, j as snapHarnessToModel, k as createFetchTransport, l as AgentTimelineToolGroupItem, m as ChatMessageProps, n as AgentTimelineArtifactItem, o as AgentTimelineProps, p as ChatMessage, r as AgentTimelineCustomItem, s as AgentTimelineStatusItem, t as AgentTimeline, u as AgentTimelineToolItem, v as ThinkingIndicator, w as ArtifactAgentDockTransport, x as UserMessageProps, y as ThinkingIndicatorProps, z as ReasoningLevel } from "./index-DiyLLZuJ.js";
3
- import { $ as HARNESS_BRAND, $t as useSidebar, A as Variant, An as SidebarProps, At as ActivityItem, B as ProfileComparison, Bn as ThemeMode, Bt as InsufficientBalance, C as GitPanelProps, Cn as SidebarContentProps, Ct as SandboxCardData, D as UsageSummaryProps, Dn as SidebarPanelHeader, Dt as canAdminSandbox, E as UsageSummaryData, En as SidebarPanelContentProps, Et as TeamRole, F as MetricAreaChart, Fn as SidebarRailHeaderProps, Ft as ResourceMeterProps, G as SidebarLayoutFlyoutItem, Gt as CreditBalanceProps, H as ProfileSelector, Ht as OutOfCreditsModalProps, I as MetricAreaChartProps, In as SidebarRailNav, It as ClusterStatusBar, J as DashboardLayout, Jt as SIDEBAR_RAIL_LABELED_WIDTH, K as SidebarLayoutNavItem, Kt as SIDEBAR_MOBILE_WIDTH, L as MetricChartPoint, Ln as SidebarRailNavProps, Lt as ClusterStatusBarProps, M as VariantListProps, Mn as SidebarRailFooter, Mt as ResourceSnapshotItem, N as VariantOutcome, Nn as SidebarRailFooterProps, Nt as ResourceSnapshotProps, O as SystemLogsViewer, On as SidebarPanelHeaderProps, Ot as ActivityFeed, P as VariantStatus, Pn as SidebarRailHeader, Pt as ResourceMeter, Q as ProductVariant, Qt as SidebarProviderProps, R as MetricChartTone, Rn as SidebarRailProps, Rt as ClusterStatusItem, S as GitPanel, Sn as SidebarContent, St as SandboxCard, T as UsageSummary, Tn as SidebarPanelContent, Tt as SandboxStatus, U as ProfileSelectorProps, Ut as parseInsufficientBalance, V as ProfileComparisonProps, Vt as OutOfCreditsModal, W as SidebarLayout, Wt as CreditBalance, X as DashboardUser, Xt as SIDEBAR_TOTAL_WIDTH, Y as DashboardLayoutProps, Yt as SIDEBAR_RAIL_WIDTH, Z as NavItem, Zt as SidebarProvider, _ as ProcessListProps, _n as RailModeButtonProps, _t as InvoiceTableProps, a as SnapshotInfo, an as RailButton, at as HarnessPickerProps, b as PortsListProps, bn as RailThemeToggle, bt as NewSandboxCard, c as BackendConfig, cn as RailCollapseToggleProps, ct as Backend, d as McpServer, dn as RailExpandableSubItem, dt as PlanCardData, en as RailTooltip, et as HarnessBrand, f as NetworkConfig, fn as RailFlyout, ft as PlanCards, g as ProcessList, gn as RailModeButton, gt as InvoiceTable, h as ProcessInfo, hn as RailHeaderProps, ht as Invoice, i as PromoBannerProps, in as ProfileAvatarProps, it as HarnessPicker, j as VariantList, jn as SidebarRail, jt as ResourceSnapshot, k as SystemLogsViewerProps, kn as SidebarPanelProps, kt as ActivityFeedProps, l as BackendConfigProps, ln as RailExpandable, lt as BackendSelector, m as NetworkConfigProps, mn as RailHeader, mt as PlanFeature, n as InfoPanelProps, nn as AppearanceController, nt as HarnessLogoProps, o as SnapshotList, on as RailButtonProps, ot as HarnessType, p as NetworkConfigData, pn as RailFlyoutProps, pt as PlanCardsProps, q as SidebarLayoutProps, qt as SIDEBAR_PANEL_WIDTH, r as PromoBanner, rn as ProfileAvatar, rt as HARNESS_OPTIONS, s as SnapshotListProps, sn as RailCollapseToggle, st as chatCapableHarnesses, t as InfoPanel, tn as RailTooltipProps, tt as HarnessLogo, u as BackendStatusData, un as RailExpandableProps, ut as BackendSelectorProps, v as ExposedPort, vn as RailSeparator, vt as SandboxTable, w as GitStatusData, wn as SidebarPanel, wt as SandboxCardProps, x as GitCommitData, xn as Sidebar, xt as NewSandboxCardProps, y as PortsList, yn as RailSeparatorProps, yt as SandboxTableProps, z as Profile, zn as SidebarUser, zt as INSUFFICIENT_BALANCE_CODE } from "./index-D82GWl1N.js";
3
+ import { $ as HARNESS_BRAND, $t as useSidebar, A as Variant, An as SidebarProps, At as ActivityItem, B as ProfileComparison, Bn as ThemeMode, Bt as InsufficientBalance, C as GitPanelProps, Cn as SidebarContentProps, Ct as SandboxCardData, D as UsageSummaryProps, Dn as SidebarPanelHeader, Dt as canAdminSandbox, E as UsageSummaryData, En as SidebarPanelContentProps, Et as TeamRole, F as MetricAreaChart, Fn as SidebarRailHeaderProps, Ft as ResourceMeterProps, G as SidebarLayoutFlyoutItem, Gt as CreditBalanceProps, H as ProfileSelector, Ht as OutOfCreditsModalProps, I as MetricAreaChartProps, In as SidebarRailNav, It as ClusterStatusBar, J as DashboardLayout, Jt as SIDEBAR_RAIL_LABELED_WIDTH, K as SidebarLayoutNavItem, Kt as SIDEBAR_MOBILE_WIDTH, L as MetricChartPoint, Ln as SidebarRailNavProps, Lt as ClusterStatusBarProps, M as VariantListProps, Mn as SidebarRailFooter, Mt as ResourceSnapshotItem, N as VariantOutcome, Nn as SidebarRailFooterProps, Nt as ResourceSnapshotProps, O as SystemLogsViewer, On as SidebarPanelHeaderProps, Ot as ActivityFeed, P as VariantStatus, Pn as SidebarRailHeader, Pt as ResourceMeter, Q as ProductVariant, Qt as SidebarProviderProps, R as MetricChartTone, Rn as SidebarRailProps, Rt as ClusterStatusItem, S as GitPanel, Sn as SidebarContent, St as SandboxCard, T as UsageSummary, Tn as SidebarPanelContent, Tt as SandboxStatus, U as ProfileSelectorProps, Ut as parseInsufficientBalance, V as ProfileComparisonProps, Vt as OutOfCreditsModal, W as SidebarLayout, Wt as CreditBalance, X as DashboardUser, Xt as SIDEBAR_TOTAL_WIDTH, Y as DashboardLayoutProps, Yt as SIDEBAR_RAIL_WIDTH, Z as NavItem, Zt as SidebarProvider, _ as ProcessListProps, _n as RailModeButtonProps, _t as InvoiceTableProps, a as SnapshotInfo, an as RailButton, at as HarnessPickerProps, b as PortsListProps, bn as RailThemeToggle, bt as NewSandboxCard, c as BackendConfig, cn as RailCollapseToggleProps, ct as Backend, d as McpServer, dn as RailExpandableSubItem, dt as PlanCardData, en as RailTooltip, et as HarnessBrand, f as NetworkConfig, fn as RailFlyout, ft as PlanCards, g as ProcessList, gn as RailModeButton, gt as InvoiceTable, h as ProcessInfo, hn as RailHeaderProps, ht as Invoice, i as PromoBannerProps, in as ProfileAvatarProps, it as HarnessPicker, j as VariantList, jn as SidebarRail, jt as ResourceSnapshot, k as SystemLogsViewerProps, kn as SidebarPanelProps, kt as ActivityFeedProps, l as BackendConfigProps, ln as RailExpandable, lt as BackendSelector, m as NetworkConfigProps, mn as RailHeader, mt as PlanFeature, n as InfoPanelProps, nn as AppearanceController, nt as HarnessLogoProps, o as SnapshotList, on as RailButtonProps, ot as HarnessType, p as NetworkConfigData, pn as RailFlyoutProps, pt as PlanCardsProps, q as SidebarLayoutProps, qt as SIDEBAR_PANEL_WIDTH, r as PromoBanner, rn as ProfileAvatar, rt as HARNESS_OPTIONS, s as SnapshotListProps, sn as RailCollapseToggle, st as chatCapableHarnesses, t as InfoPanel, tn as RailTooltipProps, tt as HarnessLogo, u as BackendStatusData, un as RailExpandableProps, ut as BackendSelectorProps, v as ExposedPort, vn as RailSeparator, vt as SandboxTable, w as GitStatusData, wn as SidebarPanel, wt as SandboxCardProps, x as GitCommitData, xn as Sidebar, xt as NewSandboxCardProps, y as PortsList, yn as RailSeparatorProps, yt as SandboxTableProps, z as Profile, zn as SidebarUser, zt as INSUFFICIENT_BALANCE_CODE } from "./index-CGMpKgB8.js";
4
4
  import { a as modelBrandFor, i as canonicalModelId, n as ModelBrandStack, r as ModelInfo, t as ModelBrandIdentity } from "./model-brand-B9A4H9pJ.js";
5
5
  import { a as UsageChartProps, c as PricingPageProps, d as BillingBalance, f as BillingDashboard, h as BillingUsage, i as UsageChart, l as PricingTier, m as BillingSubscription, n as TemplateCardData, o as UsageDataPoint, p as BillingDashboardProps, r as TemplateCardProps, s as PricingPage, t as TemplateCard, u as formatPrice } from "./template-card-L-4gmjx2.js";
6
6
  import { C as getCodeLanguage, D as resolveFilePreviewKind, E as parseCsv, S as filterFileTree, T as getSyntaxLanguage, _ as RichFileTreeGitStatus, a as FileNode, b as detectFileFormat, c as FilePreviewProps, d as FileTabsProps, f as FileTree, g as RichFileTreeGitEntry, h as RichFileTree, i as FileFormat, l as FileTabData, m as FileTreeVisibilityOptions, n as FileArtifactPane, o as FilePreview, p as FileTreeProps, r as FileArtifactPaneProps, s as FilePreviewKind, t as CSV_PREVIEW_ROW_LIMIT, u as FileTabs, v as RichFileTreeProps, w as getFormatLabel, x as fileExtension, y as RichFileTreeThemeVars } from "./index-CXX5IpH2.js";
@@ -10,7 +10,7 @@ import { d as useSessionStream, l as UseSessionStreamOptions, n as UseSidecarAut
10
10
  import { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SandboxMetrics, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, SidecarMetricsPayload, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSandboxMetricsOptions, UseSandboxMetricsResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useCreateSession, useDeleteSession, useDropdownMenu, useLiveTime, useRealtimeSession, useRenameSession, useRunCollapseState, useRunGroups, useSSEStream, useSandboxMetrics, useSdkSession, useSessions, useToolCallStream } from "./hooks.js";
11
11
  import { $ as InputProps, $t as ToastProvider, A as DropZoneProps, At as Table, B as DropdownMenuSeparator, Bt as TabsList, C as DialogFooter, Ct as SkeletonTable, D as DialogTitle, Dt as StatusPillProps, E as DialogPortal, Et as StatusPill, F as DropdownMenuItem, Ft as TableHead, G as DropdownMenuTrigger, H as DropdownMenuSub, I as DropdownMenuLabel, It as TableHeader, J as FilterField, Jt as Textarea, K as EmptyState, Kt as TextShimmer, L as DropdownMenuPortal, Lt as TableRow, M as DropdownMenuCheckboxItem, Mt as TableCaption, N as DropdownMenuContent, Nt as TableCell, O as DialogTrigger, Ot as StatusTone, P as DropdownMenuGroup, Pt as TableFooter, Q as Input, Qt as ToastContainer, R as DropdownMenuRadioGroup, Rt as Tabs, S as DialogDescription, St as SkeletonCard, T as DialogOverlay, Tt as StatCardProps, U as DropdownMenuSubContent, Ut as TerminalDisplay, V as DropdownMenuShortcut, Vt as TabsTrigger, W as DropdownMenuSubTrigger, X as InlineCode, Xt as ThemeToggle, Y as FilterFieldProps, Yt as TextareaProps, Z as InlineCodeProps, Zt as Toast, _ as CodeBlockProps, _t as SelectTrigger, a as AvatarImage, an as badgeVariants, at as Progress, b as DialogClose, bn as TangleKnot, bt as SidebarDropZoneProps, c as Button, cn as useToast, ct as SegmentedControlProps, d as CardContent, dt as SelectGroup, en as Toolbar, et as Label, f as CardDescription, ft as SelectItem, g as CodeBlock, gt as SelectSeparator, h as CardTitle, ht as SelectScrollUpButton, i as AvatarFallback, in as UploadProgressProps, it as MetricStripProps, j as DropdownMenu, jt as TableBody, k as DropZone, kt as Switch, l as ButtonProps, lt as Select, m as CardHeader, mt as SelectScrollDownButton, nn as UploadFile, nt as MetricProps, o as Badge, on as buttonVariants, ot as SegmentedControl, p as CardFooter, pt as SelectLabel, q as EmptyStateProps, qt as TextShimmerProps, r as Avatar, rn as UploadProgress, rt as MetricStrip, s as BadgeProps, sn as useTheme, st as SegmentedControlOption, tn as ToolbarProps, tt as Metric, u as Card, ut as SelectContent, v as CopyButton, vn as Logo, vt as SelectValue, w as DialogHeader, wt as StatCard, x as DialogContent, xt as Skeleton, y as Dialog, yn as LogoProps, yt as SidebarDropZone, z as DropdownMenuRadioItem, zt as TabsContent } from "./index-PRM636Ex.js";
12
12
  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-iDiLnSoo.js";
13
- import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-D_G-wF6u.js";
13
+ import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-l96iy93N.js";
14
14
  import { a as PreviewReadiness, i as PreviewAccess, n as EmbeddedAppView, r as EmbeddedAppViewProps, t as EmbeddedApp } from "./embedded-app-view-B_vMTtJn.js";
15
15
  import { OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, OpenUIAction, OpenUIActionsNode, OpenUIArtifactRenderer, OpenUIArtifactRendererProps, OpenUIBadgeNode, OpenUICardNode, OpenUICodeNode, OpenUIComponentNode, OpenUIGridNode, OpenUIHeadingNode, OpenUIKeyValueNode, OpenUIMarkdownNode, OpenUIPrimitive, OpenUISchemaIssue, OpenUISchemaValidation, OpenUISeparatorNode, OpenUIStackNode, OpenUIStatNode, OpenUITableNode, OpenUITextNode, findUnsupportedOpenUINode, validateOpenUIJsonArtifact, validateOpenUIJsonNode } from "./openui.js";
16
16
  import { ExpandedToolDetail, ExpandedToolDetailProps, FeedSegment, InlineThinkingItem, InlineThinkingItemProps, InlineToolItem, InlineToolItemProps, LiveDuration, RunGroup, RunGroupProps, RunRowShell, RunRowShellProps, RunRowStatus, RunRowStatusDot, ToolCallData, ToolCallFeed, ToolCallFeedProps, ToolCallStatus, ToolCallType, parseToolEvent } from "./run.js";
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-BbeBgtUT.js";
1
+ import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-DVOVERx0.js";
2
2
  import { $ as SelectItem, A as DropdownMenuItem, At as Textarea, B as DropdownMenuTrigger, C as DialogTitle, Ct as TabsList, D as DropdownMenuCheckboxItem, E as DropdownMenu, Et as TerminalDisplay, F as DropdownMenuSeparator, Ft as UploadProgress, G as Label, Gt as TangleKnot, H as FilterField, I as DropdownMenuShortcut, It as badgeVariants, J as Progress, K as Metric, L as DropdownMenuSub, Lt as buttonVariants, M as DropdownMenuPortal, Mt as ToastContainer, N as DropdownMenuRadioGroup, Nt as ToastProvider, O as DropdownMenuContent, P as DropdownMenuRadioItem, Pt as Toolbar, Q as SelectGroup, R as DropdownMenuSubContent, Rt as useTheme, S as DialogPortal, St as TabsContent, T as DropZone, U as InlineCode, V as EmptyState, W as Input, Wt as Logo, X as Select, Y as SegmentedControl, Z as SelectContent, _ as DialogContent, _t as TableFooter, a as Badge, at as SelectValue, b as DialogHeader, bt as TableRow, c as CardContent, ct as SkeletonCard, d as CardHeader, dt as StatusPill, et as SelectLabel, f as CardTitle, ft as Switch, g as DialogClose, gt as TableCell, h as Dialog, ht as TableCaption, i as AvatarImage, it as SelectTrigger, j as DropdownMenuLabel, jt as ThemeToggle, k as DropdownMenuGroup, kt as TextShimmer, l as CardDescription, lt as SkeletonTable, m as CopyButton, mt as TableBody, n as Avatar, nt as SelectScrollUpButton, o as Button, ot as SidebarDropZone, p as CodeBlock, pt as Table, q as MetricStrip, r as AvatarFallback, rt as SelectSeparator, s as Card, st as Skeleton, tt as SelectScrollDownButton, u as CardFooter, ut as StatCard, v as DialogDescription, vt as TableHead, w as DialogTrigger, wt as TabsTrigger, x as DialogOverlay, xt as Tabs, y as DialogFooter, yt as TableHeader, z as DropdownMenuSubTrigger, zt as useToast } from "./primitives-Dh1vG6J3.js";
3
3
  import { t as WorkspacePaneHeader } from "./workspace-pane-header-Bg1cCcHX.js";
4
4
  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-Pq-koOTW.js";
5
- import { $ as SidebarRailNav, A as ResourceMeter, B as RailFlyout, C as InvoiceTable, D as canAdminSandbox, E as SandboxCard, F as CreditBalance, G as Sidebar, H as RailModeButton, I as ProfileAvatar, J as SidebarPanelContent, K as SidebarContent, L as RailButton, M as INSUFFICIENT_BALANCE_CODE, N as OutOfCreditsModal, O as ActivityFeed, P as parseInsufficientBalance, Q as SidebarRailHeader, R as RailCollapseToggle, S as PlanCards, T as NewSandboxCard, U as RailSeparator, V as RailHeader, W as RailThemeToggle, X as SidebarRail, Y as SidebarPanelHeader, Z as SidebarRailFooter, _ as HarnessPicker, a as ProcessList, at as SIDEBAR_TOTAL_WIDTH, b as HarnessLogo, c as UsageSummary, d as MetricAreaChart, et as RailTooltip, f as ProfileComparison, g as HARNESS_OPTIONS, h as DashboardLayout, i as NetworkConfig, it as SIDEBAR_RAIL_WIDTH, j as ClusterStatusBar, k as ResourceSnapshot, l as SystemLogsViewer, m as SidebarLayout, n as SnapshotList, nt as SIDEBAR_PANEL_WIDTH, o as PortsList, ot as SidebarProvider, p as ProfileSelector, q as SidebarPanel, r as BackendConfig, rt as SIDEBAR_RAIL_LABELED_WIDTH, s as GitPanel, st as useSidebar, t as PromoBanner, tt as SIDEBAR_MOBILE_WIDTH, u as VariantList, v as chatCapableHarnesses, w as SandboxTable, x as BackendSelector, y as HARNESS_BRAND, z as RailExpandable } from "./dashboard-Bx27mUVe.js";
5
+ import { $ as SidebarRailNav, A as ResourceMeter, B as RailFlyout, C as InvoiceTable, D as canAdminSandbox, E as SandboxCard, F as CreditBalance, G as Sidebar, H as RailModeButton, I as ProfileAvatar, J as SidebarPanelContent, K as SidebarContent, L as RailButton, M as INSUFFICIENT_BALANCE_CODE, N as OutOfCreditsModal, O as ActivityFeed, P as parseInsufficientBalance, Q as SidebarRailHeader, R as RailCollapseToggle, S as PlanCards, T as NewSandboxCard, U as RailSeparator, V as RailHeader, W as RailThemeToggle, X as SidebarRail, Y as SidebarPanelHeader, Z as SidebarRailFooter, _ as HarnessPicker, a as ProcessList, at as SIDEBAR_TOTAL_WIDTH, b as HarnessLogo, c as UsageSummary, d as MetricAreaChart, et as RailTooltip, f as ProfileComparison, g as HARNESS_OPTIONS, h as DashboardLayout, i as NetworkConfig, it as SIDEBAR_RAIL_WIDTH, j as ClusterStatusBar, k as ResourceSnapshot, l as SystemLogsViewer, m as SidebarLayout, n as SnapshotList, nt as SIDEBAR_PANEL_WIDTH, o as PortsList, ot as SidebarProvider, p as ProfileSelector, q as SidebarPanel, r as BackendConfig, rt as SIDEBAR_RAIL_LABELED_WIDTH, s as GitPanel, st as useSidebar, t as PromoBanner, tt as SIDEBAR_MOBILE_WIDTH, u as VariantList, v as chatCapableHarnesses, w as SandboxTable, x as BackendSelector, y as HARNESS_BRAND, z as RailExpandable } from "./dashboard-DJQFB7iZ.js";
6
6
  import { n as canonicalModelId, r as modelBrandFor, t as ModelBrandStack } from "./model-brand-hMyDTUqB.js";
7
7
  import { a as formatPrice, i as PricingPage, n as TemplateCard, o as BillingDashboard, r as UsageChart, t as InfoPanel } from "./info-panel-C9cqDzOL.js";
8
8
  import { t as usePtySession } from "./use-pty-session-Bf4hBLXJ.js";
@@ -140,6 +140,8 @@ interface UseIntegrationsOptions {
140
140
  fetchImpl?: typeof fetch;
141
141
  /** Whether the initial load happens automatically on mount. */
142
142
  autoLoad?: boolean;
143
+ /** Refresh on visible focus/visibility return and persisted pageshow. Default: false. */
144
+ refreshOnReturn?: boolean;
143
145
  }
144
146
  interface UseIntegrationsResult {
145
147
  catalog: IntegrationProvider[];
@@ -147,10 +149,11 @@ interface UseIntegrationsResult {
147
149
  healthByConnectionId: Record<string, IntegrationHealth>;
148
150
  isLoading: boolean;
149
151
  error: Error | null;
152
+ /** Coalesces requests with at most one trailing refresh; resolves after the queue drains. */
150
153
  refresh: () => Promise<void>;
151
- /** Kick off OAuth — navigates the window on success. */
154
+ /** Kick off OAuth — navigates on success; rejects with AbortError when its lifetime ends. */
152
155
  connect: (input: ConnectInput) => Promise<void>;
153
- /** Revoke a connection by id; refreshes the connections list. */
156
+ /** Revoke by id and refresh; rejects with AbortError when its lifetime ends. */
154
157
  disconnect: (connectionId: string) => Promise<void>;
155
158
  }
156
159
  interface ConnectInput {
@@ -163,7 +166,7 @@ interface ConnectInput {
163
166
  returnUrl: string;
164
167
  requestedScopes?: string[];
165
168
  }
166
- export declare function useIntegrations({ apiBaseUrl, fetchImpl, autoLoad }: UseIntegrationsOptions): UseIntegrationsResult;
169
+ export declare function useIntegrations({ apiBaseUrl, fetchImpl, autoLoad, refreshOnReturn }: UseIntegrationsOptions): UseIntegrationsResult;
167
170
  //#endregion
168
171
  //#region src/integrations/provider-logo.d.ts
169
172
  /**
@@ -461,45 +461,141 @@ function unwrap(json) {
461
461
  if (json && typeof json === "object" && "data" in json && json.data !== void 0) return json.data;
462
462
  return json;
463
463
  }
464
- function useIntegrations({ apiBaseUrl, fetchImpl, autoLoad = true }) {
465
- const fetcher = fetchImpl ?? (typeof fetch === "function" ? fetch : null);
466
- if (!fetcher) throw new Error("useIntegrations: fetch is not available in this environment");
464
+ function cancellationError() {
465
+ return Object.assign(/* @__PURE__ */ new Error("Integration lifetime ended"), { name: "AbortError" });
466
+ }
467
+ function assertActive(signal) {
468
+ if (signal.aborted) throw cancellationError();
469
+ }
470
+ /** Also settle when a custom fetch or response body ignores AbortSignal. */
471
+ function whileActive(signal, start) {
472
+ if (signal.aborted) return Promise.reject(cancellationError());
473
+ return new Promise((resolve, reject) => {
474
+ const onAbort = () => reject(cancellationError());
475
+ signal.addEventListener("abort", onAbort, { once: true });
476
+ Promise.resolve().then(() => {
477
+ assertActive(signal);
478
+ return start();
479
+ }).then((value) => {
480
+ signal.removeEventListener("abort", onAbort);
481
+ if (signal.aborted) reject(cancellationError());
482
+ else resolve(value);
483
+ }, (err) => {
484
+ signal.removeEventListener("abort", onAbort);
485
+ reject(signal.aborted ? cancellationError() : err);
486
+ });
487
+ });
488
+ }
489
+ function useIntegrations({ apiBaseUrl, fetchImpl, autoLoad = true, refreshOnReturn = false }) {
490
+ const availableFetch = fetchImpl ?? (typeof fetch === "function" ? fetch : null);
491
+ if (!availableFetch) throw new Error("useIntegrations: fetch is not available in this environment");
492
+ const fetcher = availableFetch;
467
493
  const base = apiBaseUrl.replace(/\/+$/, "");
468
494
  const [catalog, setCatalog] = React$1.useState([]);
469
495
  const [connections, setConnections] = React$1.useState([]);
470
496
  const [healthByConnectionId, setHealthByConnectionId] = React$1.useState({});
471
497
  const [isLoading, setIsLoading] = React$1.useState(autoLoad);
472
498
  const [error, setError] = React$1.useState(null);
473
- const refresh = React$1.useCallback(async () => {
474
- setIsLoading(true);
475
- setError(null);
476
- try {
477
- const [catalogRes, connectionsRes] = await Promise.all([fetcher(`${base}/catalog`, { credentials: "include" }), fetcher(`${base}/connections`, { credentials: "include" })]);
478
- if (!catalogRes.ok) throw new Error(`Failed to load integration catalog (${catalogRes.status})`);
479
- if (!connectionsRes.ok) throw new Error(`Failed to load integration connections (${connectionsRes.status})`);
480
- const catalogJson = unwrap(await catalogRes.json());
481
- const providers = catalogJson?.catalog?.providers ?? catalogJson?.providers ?? [];
482
- setCatalog(providers);
483
- const connectionsJson = unwrap(await connectionsRes.json());
484
- setConnections(connectionsJson?.connections ?? []);
499
+ const scope = React$1.useMemo(() => ({ current: null }), [base, fetcher]);
500
+ React$1.useEffect(() => {
501
+ const controller = new AbortController();
502
+ const { signal } = controller;
503
+ let running = null;
504
+ let pending = false;
505
+ async function load() {
485
506
  try {
486
- const healthRes = await fetcher(`${base}/healthchecks`, { credentials: "include" });
487
- if (healthRes.ok) {
488
- const healthJson = unwrap(await healthRes.json());
489
- const map = {};
490
- for (const h of healthJson?.healthchecks ?? []) map[h.connectionId] = h;
491
- setHealthByConnectionId(map);
492
- }
493
- } catch {}
494
- } catch (err) {
495
- setError(err instanceof Error ? err : new Error(String(err)));
496
- } finally {
497
- setIsLoading(false);
507
+ const [catalogRes, connectionsRes] = await whileActive(signal, () => Promise.all([fetcher(`${base}/catalog`, {
508
+ credentials: "include",
509
+ signal
510
+ }), fetcher(`${base}/connections`, {
511
+ credentials: "include",
512
+ signal
513
+ })]));
514
+ if (!catalogRes.ok) throw new Error(`Failed to load integration catalog (${catalogRes.status})`);
515
+ if (!connectionsRes.ok) throw new Error(`Failed to load integration connections (${connectionsRes.status})`);
516
+ const [catalogBody, connectionsBody] = await whileActive(signal, () => Promise.all([catalogRes.json(), connectionsRes.json()]));
517
+ const catalogJson = unwrap(catalogBody);
518
+ const connectionsJson = unwrap(connectionsBody);
519
+ assertActive(signal);
520
+ setCatalog(catalogJson?.catalog?.providers ?? catalogJson?.providers ?? []);
521
+ setConnections(connectionsJson?.connections ?? []);
522
+ try {
523
+ const healthRes = await whileActive(signal, () => fetcher(`${base}/healthchecks`, {
524
+ credentials: "include",
525
+ signal
526
+ }));
527
+ if (healthRes.ok) {
528
+ const healthJson = unwrap(await whileActive(signal, () => healthRes.json()));
529
+ const map = {};
530
+ for (const h of healthJson?.healthchecks ?? []) map[h.connectionId] = h;
531
+ assertActive(signal);
532
+ setHealthByConnectionId(map);
533
+ }
534
+ } catch {}
535
+ } catch (err) {
536
+ if (!signal.aborted) setError(err instanceof Error ? err : new Error(String(err)));
537
+ }
498
538
  }
499
- }, [base, fetcher]);
539
+ function scheduleRefresh() {
540
+ if (signal.aborted) return Promise.resolve();
541
+ pending = true;
542
+ if (!running) {
543
+ setIsLoading(true);
544
+ running = Promise.resolve().then(async () => {
545
+ try {
546
+ while (pending && !signal.aborted) {
547
+ pending = false;
548
+ setError(null);
549
+ await load();
550
+ }
551
+ } finally {
552
+ running = null;
553
+ if (!signal.aborted) setIsLoading(false);
554
+ }
555
+ });
556
+ }
557
+ return running;
558
+ }
559
+ scope.current = {
560
+ signal,
561
+ refresh: scheduleRefresh
562
+ };
563
+ setCatalog([]);
564
+ setConnections([]);
565
+ setHealthByConnectionId({});
566
+ setError(null);
567
+ setIsLoading(false);
568
+ return () => {
569
+ scope.current = null;
570
+ pending = false;
571
+ controller.abort();
572
+ };
573
+ }, [
574
+ base,
575
+ fetcher,
576
+ scope
577
+ ]);
578
+ const refresh = React$1.useCallback(() => scope.current?.refresh() ?? Promise.resolve(), [scope]);
500
579
  React$1.useEffect(() => {
501
580
  if (autoLoad) refresh();
502
581
  }, [autoLoad, refresh]);
582
+ React$1.useEffect(() => {
583
+ if (!refreshOnReturn || typeof window === "undefined" || typeof document === "undefined") return;
584
+ const onReturn = () => {
585
+ if (document.visibilityState === "visible") refresh();
586
+ };
587
+ const onPageShow = (event) => {
588
+ if (event.persisted) onReturn();
589
+ };
590
+ window.addEventListener("focus", onReturn);
591
+ document.addEventListener("visibilitychange", onReturn);
592
+ window.addEventListener("pageshow", onPageShow);
593
+ return () => {
594
+ window.removeEventListener("focus", onReturn);
595
+ document.removeEventListener("visibilitychange", onReturn);
596
+ window.removeEventListener("pageshow", onPageShow);
597
+ };
598
+ }, [refreshOnReturn, refresh]);
503
599
  return {
504
600
  catalog,
505
601
  connections,
@@ -508,34 +604,50 @@ function useIntegrations({ apiBaseUrl, fetchImpl, autoLoad = true }) {
508
604
  error,
509
605
  refresh,
510
606
  connect: React$1.useCallback(async (input) => {
511
- const res = await fetcher(`${base}/auth/start`, {
607
+ const active = scope.current;
608
+ if (!active) throw cancellationError();
609
+ const { signal } = active;
610
+ const res = await whileActive(signal, () => fetcher(`${base}/auth/start`, {
512
611
  method: "POST",
513
612
  credentials: "include",
514
613
  headers: { "content-type": "application/json" },
515
- body: JSON.stringify(input)
516
- });
614
+ body: JSON.stringify(input),
615
+ signal
616
+ }));
517
617
  if (!res.ok) {
518
- const text = await res.text().catch(() => "");
618
+ const text = await whileActive(signal, () => res.text().catch(() => ""));
619
+ assertActive(signal);
519
620
  throw new Error(`Failed to start OAuth (${res.status}): ${text}`);
520
621
  }
521
- const json = unwrap(await res.json());
622
+ const json = unwrap(await whileActive(signal, () => res.json()));
623
+ assertActive(signal);
522
624
  if (!json?.authorizationUrl) throw new Error("Platform did not return an authorizationUrl");
523
625
  window.location.href = json.authorizationUrl;
524
- }, [base, fetcher]),
626
+ }, [
627
+ base,
628
+ fetcher,
629
+ scope
630
+ ]),
525
631
  disconnect: React$1.useCallback(async (connectionId) => {
526
- const res = await fetcher(`${base}/connections/${encodeURIComponent(connectionId)}`, {
632
+ const active = scope.current;
633
+ if (!active) throw cancellationError();
634
+ const { signal } = active;
635
+ const res = await whileActive(signal, () => fetcher(`${base}/connections/${encodeURIComponent(connectionId)}`, {
527
636
  method: "DELETE",
528
- credentials: "include"
529
- });
637
+ credentials: "include",
638
+ signal
639
+ }));
530
640
  if (!res.ok) {
531
- const text = await res.text().catch(() => "");
641
+ const text = await whileActive(signal, () => res.text().catch(() => ""));
642
+ assertActive(signal);
532
643
  throw new Error(`Failed to revoke connection (${res.status}): ${text}`);
533
644
  }
534
- await refresh();
645
+ await whileActive(signal, active.refresh);
646
+ assertActive(signal);
535
647
  }, [
536
648
  base,
537
649
  fetcher,
538
- refresh
650
+ scope
539
651
  ])
540
652
  };
541
653
  }
package/dist/styles.css CHANGED
@@ -971,6 +971,9 @@
971
971
  .max-h-\[90vh\] {
972
972
  max-height: 90vh;
973
973
  }
974
+ .max-h-\[min\(24rem\,calc\(var\(--radix-select-content-available-height\)-2px\)\)\] {
975
+ max-height: min(24rem, calc(var(--radix-select-content-available-height) - 2px));
976
+ }
974
977
  .max-h-\[min\(60vh\,35rem\)\] {
975
978
  max-height: min(60vh, 35rem);
976
979
  }
@@ -980,6 +983,9 @@
980
983
  .max-h-\[var\(--radix-dropdown-menu-content-available-height\)\] {
981
984
  max-height: var(--radix-dropdown-menu-content-available-height);
982
985
  }
986
+ .max-h-\[var\(--radix-select-content-available-height\)\] {
987
+ max-height: var(--radix-select-content-available-height);
988
+ }
983
989
  .max-h-full {
984
990
  max-height: 100%;
985
991
  }
@@ -1945,6 +1951,9 @@
1945
1951
  .overflow-y-auto {
1946
1952
  overflow-y: auto;
1947
1953
  }
1954
+ .overscroll-contain {
1955
+ overscroll-behavior: contain;
1956
+ }
1948
1957
  .\!rounded-full {
1949
1958
  border-radius: calc(infinity * 1px) !important;
1950
1959
  }
@@ -1,5 +1,5 @@
1
1
  import { t as cn$1 } from "./utils-DzWbktWG.js";
2
- import { o as PortsList } from "./dashboard-Bx27mUVe.js";
2
+ import { o as PortsList } from "./dashboard-DJQFB7iZ.js";
3
3
  import { n as TerminalView } from "./terminal-DmSUfGha.js";
4
4
  import { RichFileTree } from "./files.js";
5
5
  import { n as PreviewView } from "./embedded-app-view-CoiS_kfY.js";
@@ -1,3 +1,3 @@
1
- import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-D_G-wF6u.js";
1
+ import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-l96iy93N.js";
2
2
  import { a as PreviewReadiness, i as PreviewAccess, n as EmbeddedAppView, r as EmbeddedAppViewProps, t as EmbeddedApp } from "./embedded-app-view-B_vMTtJn.js";
3
3
  export { type ArtifactView, BRAND_PRISM_THEME, type ChangedFile, ChangesPane, type ChangesPaneProps, CodeSurface, type CodeSurfaceProps, CodeView, type CodeViewProps, type DiffStats, DiffStatsBadge, DiffView, type DiffViewProps, type EmbeddedApp, EmbeddedAppView, type EmbeddedAppViewProps, FileBreadcrumb, type FileBreadcrumbProps, GitStatusBadge, PanelHeader, type PanelHeaderProps, type PillTabItem, PillTabs, type PillTabsProps, type PreviewAccess, type PreviewReadiness, PreviewView, type PreviewViewProps, type SandboxArtifact, SandboxArtifactPane, type SandboxArtifactPaneProps, type SandboxArtifactTerminal, buildUnifiedPatch, computeDiffStats, resolveLanguage };
package/dist/workbench.js CHANGED
@@ -1,3 +1,3 @@
1
- import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-BbeBgtUT.js";
1
+ import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-DVOVERx0.js";
2
2
  import { n as PreviewView, t as EmbeddedAppView } from "./embedded-app-view-CoiS_kfY.js";
3
3
  export { BRAND_PRISM_THEME, ChangesPane, CodeSurface, CodeView, DiffStatsBadge, DiffView, EmbeddedAppView, FileBreadcrumb, GitStatusBadge, PanelHeader, PillTabs, PreviewView, SandboxArtifactPane, buildUnifiedPatch, computeDiffStats, resolveLanguage };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.116.6",
3
+ "version": "0.116.8",
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",