@tangle-network/sandbox-ui 0.30.0 → 0.32.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.
@@ -2,11 +2,11 @@ import {
2
2
  HARNESS_OPTIONS,
3
3
  HarnessLogo,
4
4
  chatCapableHarnesses
5
- } from "./chunk-ELGN7DPS.js";
5
+ } from "./chunk-JC7GMQK7.js";
6
6
  import {
7
7
  ModelPicker,
8
8
  canonicalModelId
9
- } from "./chunk-6NQBODYV.js";
9
+ } from "./chunk-NMR2CTGP.js";
10
10
  import {
11
11
  cn
12
12
  } from "./chunk-EI44GEQ5.js";
@@ -91,8 +91,8 @@ function ReasoningLevelPicker({
91
91
  className: cn(
92
92
  "inline-flex h-8 items-center gap-1.5 rounded-lg border border-border bg-card px-2.5",
93
93
  "text-xs font-medium text-foreground shadow-sm transition-colors",
94
- "hover:border-primary/30 hover:bg-accent/30 focus:outline-none focus:border-primary/40",
95
- "data-[state=open]:border-primary/40 data-[state=open]:bg-accent/30",
94
+ "hover:border-border hover:bg-muted/40 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
95
+ "data-[state=open]:border-border data-[state=open]:bg-muted/40",
96
96
  "disabled:cursor-not-allowed disabled:opacity-50",
97
97
  className,
98
98
  triggerClassName
@@ -242,8 +242,8 @@ function HarnessDropdown({
242
242
  className: cn(
243
243
  "inline-flex h-8 items-center gap-1.5 rounded-lg border border-border bg-card px-2.5",
244
244
  "text-xs font-medium text-foreground shadow-sm transition-colors",
245
- "hover:border-primary/30 hover:bg-accent/40 focus:outline-none focus:border-primary/40",
246
- "data-[state=open]:border-primary/40 data-[state=open]:bg-accent/40",
245
+ "hover:border-border hover:bg-muted/40 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
246
+ "data-[state=open]:border-border data-[state=open]:bg-muted/40",
247
247
  "disabled:cursor-not-allowed disabled:opacity-60"
248
248
  ),
249
249
  "aria-label": "Agent harness",
@@ -408,8 +408,8 @@ function GearControls({
408
408
  className: cn(
409
409
  "inline-flex h-8 w-8 items-center justify-center rounded-lg border border-border bg-card",
410
410
  "text-foreground shadow-sm transition-colors",
411
- "hover:border-primary/30 hover:bg-accent/40 focus:outline-none focus:border-primary/40",
412
- "data-[state=open]:border-primary/40 data-[state=open]:bg-accent/40"
411
+ "hover:border-border hover:bg-muted/40 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
412
+ "data-[state=open]:border-border data-[state=open]:bg-muted/40"
413
413
  ),
414
414
  children: /* @__PURE__ */ jsx2(SlidersHorizontal, { className: "h-4 w-4 text-muted-foreground" })
415
415
  }
@@ -631,14 +631,14 @@ function ArtifactAgentDock({
631
631
  "aside",
632
632
  {
633
633
  className: cn(
634
- "flex h-full w-[420px] min-w-[360px] max-w-[480px] flex-col border-l border-border bg-card/95 shadow-xl",
634
+ "flex h-full w-[420px] min-w-[360px] max-w-[480px] flex-col border-l border-border bg-card/95 shadow-[var(--shadow-dropdown)]",
635
635
  className
636
636
  ),
637
637
  "aria-label": `Agent chat about ${heading}`,
638
638
  children: [
639
639
  /* @__PURE__ */ jsxs3("header", { className: "flex items-center justify-between border-b border-border bg-background/60 px-4 py-3", children: [
640
640
  /* @__PURE__ */ jsxs3("div", { className: "flex min-w-0 items-center gap-2", children: [
641
- /* @__PURE__ */ jsx3(Sparkles2, { className: "h-4 w-4 shrink-0 text-primary" }),
641
+ /* @__PURE__ */ jsx3(Sparkles2, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
642
642
  /* @__PURE__ */ jsxs3("div", { className: "min-w-0", children: [
643
643
  /* @__PURE__ */ jsx3("div", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground", children: "Discussing" }),
644
644
  /* @__PURE__ */ jsx3("div", { className: "truncate text-sm font-semibold text-foreground", children: heading })
@@ -690,7 +690,7 @@ function ArtifactAgentDock({
690
690
  placeholder: `Ask about ${heading}\u2026`,
691
691
  rows: 2,
692
692
  disabled: !threadId,
693
- className: "min-h-[44px] flex-1 resize-none rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-primary/40 disabled:opacity-50"
693
+ className: "min-h-[44px] flex-1 resize-none rounded-[20px] border border-border bg-background px-3.5 py-2 text-sm text-foreground placeholder:text-muted-foreground transition-colors focus:outline-none focus:border-[var(--border-accent)] disabled:opacity-50"
694
694
  }
695
695
  ),
696
696
  sending ? /* @__PURE__ */ jsx3(
@@ -708,7 +708,7 @@ function ArtifactAgentDock({
708
708
  type: "submit",
709
709
  disabled: !composer.trim() || !threadId,
710
710
  "aria-label": "Send",
711
- className: "inline-flex h-9 w-9 items-center justify-center rounded-md bg-primary text-primary-foreground transition-colors hover:bg-primary/90 disabled:opacity-50",
711
+ className: "inline-flex h-9 w-9 items-center justify-center rounded-full bg-primary text-primary-foreground transition-colors hover:bg-primary/90 disabled:opacity-50",
712
712
  children: /* @__PURE__ */ jsx3(Send, { className: "h-4 w-4" })
713
713
  }
714
714
  )
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  moonshot_default
3
- } from "./chunk-6NQBODYV.js";
3
+ } from "./chunk-NMR2CTGP.js";
4
4
  import {
5
5
  cn
6
6
  } from "./chunk-EI44GEQ5.js";
@@ -331,9 +331,9 @@ function ModelPicker({
331
331
  "inline-flex h-8 items-center gap-1.5 rounded-lg border border-border bg-card",
332
332
  "px-2.5 text-xs font-medium text-foreground shadow-sm",
333
333
  "transition-colors duration-[var(--transition-fast)]",
334
- "hover:border-primary/30 hover:bg-accent/30",
335
- "focus:outline-none focus:border-primary/40",
336
- "data-[state=open]:border-primary/40 data-[state=open]:bg-accent/30",
334
+ "hover:border-border hover:bg-muted/40",
335
+ "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
336
+ "data-[state=open]:border-border data-[state=open]:bg-muted/40",
337
337
  "disabled:opacity-50 disabled:cursor-not-allowed",
338
338
  className,
339
339
  triggerClassName
@@ -354,9 +354,9 @@ function ModelPicker({
354
354
  "flex w-full items-center justify-between gap-2 rounded-[var(--radius-md)]",
355
355
  "border border-border bg-card px-3 py-2.5 text-sm text-left",
356
356
  "transition-colors duration-[var(--transition-fast)]",
357
- "hover:border-primary/20 hover:bg-accent/30",
358
- "focus:outline-none focus:border-primary/30",
359
- "data-[state=open]:border-primary/30 data-[state=open]:bg-accent/30",
357
+ "hover:border-border hover:bg-muted/40",
358
+ "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
359
+ "data-[state=open]:border-border data-[state=open]:bg-muted/40",
360
360
  "disabled:opacity-50 disabled:cursor-not-allowed",
361
361
  className,
362
362
  triggerClassName
@@ -11,6 +11,18 @@ interface SidebarUser {
11
11
  tier?: string;
12
12
  avatarUrl?: string;
13
13
  }
14
+ declare function RailThemeToggle({ className }: {
15
+ className?: string;
16
+ }): react_jsx_runtime.JSX.Element;
17
+ interface RailCollapseToggleProps {
18
+ /** Whether the rail is currently collapsed (icon-only). */
19
+ collapsed: boolean;
20
+ /** Render with a label beside the chevron (expanded/labeled rail) vs. icon-only. */
21
+ showLabel?: boolean;
22
+ onToggle: () => void;
23
+ className?: string;
24
+ }
25
+ declare function RailCollapseToggle({ collapsed, showLabel, onToggle, className }: RailCollapseToggleProps): react_jsx_runtime.JSX.Element;
14
26
  interface SidebarProps {
15
27
  children: React.ReactNode;
16
28
  className?: string;
@@ -140,6 +152,28 @@ interface ProfileAvatarProps {
140
152
  }
141
153
  declare function ProfileAvatar({ user, isLoading, onLogout, onSettingsClick, settingsHref, children, className, showDetails, LinkComponent, }: ProfileAvatarProps): react_jsx_runtime.JSX.Element;
142
154
 
155
+ interface RailTooltipProps {
156
+ /** Tooltip text shown to the right of the trigger. */
157
+ label: string;
158
+ /** The trigger element (icon button / link). */
159
+ children: React.ReactNode;
160
+ /** Disable the tooltip (e.g. when the rail is expanded and the label is inline). */
161
+ disabled?: boolean;
162
+ className?: string;
163
+ }
164
+ /**
165
+ * Quiet, instant-ish styled tooltip for the icon-only rail. CSS-only (no
166
+ * portal, no extra deps): the trigger wraps in a `group` and the label is an
167
+ * absolutely-positioned sibling to the RIGHT, revealed on `group-hover` /
168
+ * `group-focus-within` after a short delay. Matches the `--popover` / border
169
+ * tokens so it reads as Tangle Quiet chrome rather than a native `title`.
170
+ *
171
+ * Replaces reliance on the native `title` attribute for the collapsed rail
172
+ * (no ~1.5s delay, themeable, keyboard-focus reachable). Hidden via
173
+ * `aria-hidden` since the trigger already carries an accessible name.
174
+ */
175
+ declare function RailTooltip({ label, children, disabled, className }: RailTooltipProps): react_jsx_runtime.JSX.Element;
176
+
143
177
  /** Width constants (px) — Tangle Quiet density (ChatGPT-minimal) */
144
178
  declare const SIDEBAR_RAIL_WIDTH = 56;
145
179
  declare const SIDEBAR_PANEL_WIDTH = 268;
@@ -150,6 +184,12 @@ declare const SIDEBAR_TOTAL_WIDTH: number;
150
184
  * wide enough for icons; labels need a wider container to avoid truncation.
151
185
  */
152
186
  declare const SIDEBAR_MOBILE_WIDTH = 256;
187
+ /**
188
+ * Rail width when labels are shown beside icons on desktop. The default rail is
189
+ * icon-only at {@link SIDEBAR_RAIL_WIDTH}; a labeled rail needs room for the
190
+ * longest nav label plus its badge.
191
+ */
192
+ declare const SIDEBAR_RAIL_LABELED_WIDTH = 248;
153
193
  interface SidebarContextValue {
154
194
  /** Whether the content panel beside the rail is open */
155
195
  panelOpen: boolean;
@@ -167,15 +207,34 @@ interface SidebarContextValue {
167
207
  contentMargin: number;
168
208
  /** Whether there are panels at all */
169
209
  hasPanels: boolean;
170
- /** Rail width in px — 64 for the icon-only rail, wider when labels show */
210
+ /**
211
+ * Whether the labeled nav rail is collapsed to the icon-only width. Independent
212
+ * of {@link panelOpen} (the slide-out content panel) — two separate collapses.
213
+ * Only meaningful when the rail is label-capable; an icon-only rail stays
214
+ * icon-only regardless.
215
+ */
216
+ railCollapsed: boolean;
217
+ setRailCollapsed: (collapsed: boolean) => void;
218
+ toggleRail: () => void;
219
+ /**
220
+ * Rail width in px — derived from {@link railCollapsed}: the icon-only width
221
+ * when collapsed (or when the rail is not label-capable), the labeled width
222
+ * when expanded.
223
+ */
171
224
  railWidth: number;
172
225
  }
173
226
  interface SidebarProviderProps {
174
227
  defaultPanelOpen?: boolean;
175
228
  defaultMode?: string;
176
229
  hasPanels?: boolean;
177
- /** Rail width in px. Defaults to the 64px icon-only rail. */
178
- railWidth?: number;
230
+ /**
231
+ * Whether the rail can show labels beside icons. When `true`, the expanded
232
+ * rail renders at {@link SIDEBAR_RAIL_LABELED_WIDTH} and the user can collapse
233
+ * it to the icon-only {@link SIDEBAR_RAIL_WIDTH} via {@link toggleRail}. When
234
+ * `false` (default) the rail is permanently icon-only and `railCollapsed` has
235
+ * no width effect.
236
+ */
237
+ labeledRail?: boolean;
179
238
  /**
180
239
  * Controlled panel-open state. When provided, the provider treats panel
181
240
  * visibility as controlled: it never reads or writes localStorage and
@@ -186,9 +245,19 @@ interface SidebarProviderProps {
186
245
  */
187
246
  panelOpen?: boolean;
188
247
  onPanelOpenChange?: (open: boolean) => void;
248
+ /**
249
+ * Controlled rail-collapsed state. Parallels {@link panelOpen}: when provided
250
+ * the provider never touches localStorage for the rail and reports changes
251
+ * through {@link onRailCollapsedChange}. Seed it from a cookie in SSR apps so
252
+ * the rail width survives reload without a hydration mismatch.
253
+ */
254
+ railCollapsed?: boolean;
255
+ onRailCollapsedChange?: (collapsed: boolean) => void;
256
+ /** Initial rail-collapsed state for the uncontrolled path. Default: expanded. */
257
+ defaultRailCollapsed?: boolean;
189
258
  children: React.ReactNode;
190
259
  }
191
- declare function SidebarProvider({ defaultPanelOpen, defaultMode, hasPanels, railWidth, panelOpen: controlledPanelOpen, onPanelOpenChange, children, }: SidebarProviderProps): react_jsx_runtime.JSX.Element;
260
+ declare function SidebarProvider({ defaultPanelOpen, defaultMode, hasPanels, labeledRail, panelOpen: controlledPanelOpen, onPanelOpenChange, railCollapsed: controlledRailCollapsed, onRailCollapsedChange, defaultRailCollapsed, children, }: SidebarProviderProps): react_jsx_runtime.JSX.Element;
192
261
  declare function useSidebar(): SidebarContextValue;
193
262
 
194
263
  interface CreditBalanceProps {
@@ -633,8 +702,24 @@ interface SidebarLayoutProps {
633
702
  defaultPanelOpen?: boolean;
634
703
  /** Hide the whole sidebar below this breakpoint (content spans full width). */
635
704
  hideBelow?: "md" | "lg";
636
- /** Show text labels beside the rail icons on a wider rail (vs. icon-only with hover tooltips). */
705
+ /**
706
+ * Make the rail label-capable: it renders labels beside the icons on a wider
707
+ * rail and gains a collapse/expand control that toggles between the labeled
708
+ * width and the icon-only rail (icons + hover tooltips). When omitted the rail
709
+ * is permanently icon-only with no collapse control.
710
+ */
637
711
  railLabels?: boolean;
712
+ /**
713
+ * Controlled rail-collapsed state. Provide it (seeded from a server-readable
714
+ * source such as a cookie) in SSR apps so the collapsed/expanded rail survives
715
+ * reload without a hydration mismatch. Omit to let the rail persist to
716
+ * localStorage. Independent of `panelOpen` — the nav rail and the slide-out
717
+ * panel collapse separately. Only meaningful with `railLabels`.
718
+ */
719
+ railCollapsed?: boolean;
720
+ onRailCollapsedChange?: (collapsed: boolean) => void;
721
+ /** Initial rail-collapsed state when uncontrolled (default: expanded). */
722
+ defaultRailCollapsed?: boolean;
638
723
  /**
639
724
  * Close the panel when a link nav item is clicked. Useful when the panel is
640
725
  * contextual to one section (e.g. a chat thread list) rather than a global
@@ -653,7 +738,7 @@ interface SidebarLayoutProps {
653
738
  * hide all live here. Pair `panelOpen`/`onPanelOpenChange` with a cookie for
654
739
  * SSR-safe persistence.
655
740
  */
656
- declare function SidebarLayout({ panelOpen, onPanelOpenChange, defaultPanelOpen, ...props }: SidebarLayoutProps): react_jsx_runtime.JSX.Element;
741
+ declare function SidebarLayout({ panelOpen, onPanelOpenChange, defaultPanelOpen, railCollapsed, onRailCollapsedChange, defaultRailCollapsed, ...props }: SidebarLayoutProps): react_jsx_runtime.JSX.Element;
657
742
 
658
743
  interface Profile {
659
744
  id: string;
@@ -898,4 +983,4 @@ interface InfoPanelProps {
898
983
  }
899
984
  declare function InfoPanel({ label, title, description, className }: InfoPanelProps): react_jsx_runtime.JSX.Element;
900
985
 
901
- export { ActivityFeed, type ActivityFeedProps, type ActivityItem, BackendConfig, type BackendConfigProps, type BackendStatusData, 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, type HarnessBrand, HarnessLogo, type HarnessLogoProps, HarnessType, INSUFFICIENT_BALANCE_CODE, InfoPanel, type InfoPanelProps, type InsufficientBalance, type Invoice, InvoiceTable, type InvoiceTableProps, type McpServer, MetricAreaChart, type MetricAreaChartProps, type MetricChartPoint, type MetricChartTone, type NavItem, NetworkConfig, type NetworkConfigData, type NetworkConfigProps, NewSandboxCard, type NewSandboxCardProps, OutOfCreditsModal, type OutOfCreditsModalProps, type PlanCardData, PlanCards, type PlanCardsProps, type PlanFeature, PortsList, type PortsListProps, type ProcessInfo, ProcessList, type ProcessListProps, type ProductVariant, ProfileAvatar, type ProfileAvatarProps, ProfileComparison, type ProfileComparisonProps, ProfileSelector, type ProfileSelectorProps, PromoBanner, type PromoBannerProps, RailButton, type RailButtonProps, RailFlyout, type RailFlyoutProps, RailModeButton, type RailModeButtonProps, RailSeparator, type RailSeparatorProps, ResourceMeter, type ResourceMeterProps, ResourceSnapshot, type ResourceSnapshotItem, type ResourceSnapshotProps, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_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, UsageSummary, type UsageSummaryData, type UsageSummaryProps, type Variant, VariantList, type VariantListProps, type VariantOutcome, type VariantStatus, canAdminSandbox, parseInsufficientBalance, useSidebar };
986
+ export { ActivityFeed, type ActivityFeedProps, type ActivityItem, BackendConfig, type BackendConfigProps, type BackendStatusData, 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, type HarnessBrand, HarnessLogo, type HarnessLogoProps, HarnessType, INSUFFICIENT_BALANCE_CODE, InfoPanel, type InfoPanelProps, type InsufficientBalance, type Invoice, InvoiceTable, type InvoiceTableProps, type McpServer, MetricAreaChart, type MetricAreaChartProps, type MetricChartPoint, type MetricChartTone, type NavItem, NetworkConfig, type NetworkConfigData, type NetworkConfigProps, NewSandboxCard, type NewSandboxCardProps, OutOfCreditsModal, type OutOfCreditsModalProps, type PlanCardData, PlanCards, type PlanCardsProps, type PlanFeature, PortsList, type PortsListProps, 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, RailFlyout, type RailFlyoutProps, 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, UsageSummary, type UsageSummaryData, type UsageSummaryProps, type Variant, VariantList, type VariantListProps, type VariantOutcome, type VariantStatus, canAdminSandbox, parseInsufficientBalance, useSidebar };
package/dist/dashboard.js CHANGED
@@ -19,13 +19,17 @@ import {
19
19
  ProfileSelector,
20
20
  PromoBanner,
21
21
  RailButton,
22
+ RailCollapseToggle,
22
23
  RailFlyout,
23
24
  RailModeButton,
24
25
  RailSeparator,
26
+ RailThemeToggle,
27
+ RailTooltip,
25
28
  ResourceMeter,
26
29
  ResourceSnapshot,
27
30
  SIDEBAR_MOBILE_WIDTH,
28
31
  SIDEBAR_PANEL_WIDTH,
32
+ SIDEBAR_RAIL_LABELED_WIDTH,
29
33
  SIDEBAR_RAIL_WIDTH,
30
34
  SIDEBAR_TOTAL_WIDTH,
31
35
  SandboxCard,
@@ -48,7 +52,7 @@ import {
48
52
  canAdminSandbox,
49
53
  parseInsufficientBalance,
50
54
  useSidebar
51
- } from "./chunk-YPBFIETY.js";
55
+ } from "./chunk-CI6RWXWY.js";
52
56
  import {
53
57
  BillingDashboard,
54
58
  InfoPanel,
@@ -56,7 +60,7 @@ import {
56
60
  TemplateCard,
57
61
  UsageChart,
58
62
  formatPrice
59
- } from "./chunk-DNZ4DTNA.js";
63
+ } from "./chunk-2XNT74ZX.js";
60
64
  import "./chunk-7ZA5SEK3.js";
61
65
  import {
62
66
  BackendSelector,
@@ -65,7 +69,7 @@ import {
65
69
  HarnessLogo,
66
70
  HarnessPicker,
67
71
  chatCapableHarnesses
68
- } from "./chunk-ELGN7DPS.js";
72
+ } from "./chunk-JC7GMQK7.js";
69
73
  import {
70
74
  DEFAULT_FEATURED_MODEL_IDS,
71
75
  ModelPicker,
@@ -74,7 +78,7 @@ import {
74
78
  formatContext,
75
79
  formatPricing,
76
80
  modelDedupKey
77
- } from "./chunk-6NQBODYV.js";
81
+ } from "./chunk-NMR2CTGP.js";
78
82
  import "./chunk-EI44GEQ5.js";
79
83
  export {
80
84
  ActivityFeed,
@@ -107,13 +111,17 @@ export {
107
111
  ProfileSelector,
108
112
  PromoBanner,
109
113
  RailButton,
114
+ RailCollapseToggle,
110
115
  RailFlyout,
111
116
  RailModeButton,
112
117
  RailSeparator,
118
+ RailThemeToggle,
119
+ RailTooltip,
113
120
  ResourceMeter,
114
121
  ResourceSnapshot,
115
122
  SIDEBAR_MOBILE_WIDTH,
116
123
  SIDEBAR_PANEL_WIDTH,
124
+ SIDEBAR_RAIL_LABELED_WIDTH,
117
125
  SIDEBAR_RAIL_WIDTH,
118
126
  SIDEBAR_TOTAL_WIDTH,
119
127
  SandboxCard,
package/dist/globals.css CHANGED
@@ -301,9 +301,6 @@
301
301
  .end {
302
302
  inset-inline-end: var(--spacing);
303
303
  }
304
- .-top-1 {
305
- top: calc(var(--spacing) * -1);
306
- }
307
304
  .-top-1\.5 {
308
305
  top: calc(var(--spacing) * -1.5);
309
306
  }
@@ -346,9 +343,6 @@
346
343
  .top-full {
347
344
  top: 100%;
348
345
  }
349
- .-right-1 {
350
- right: calc(var(--spacing) * -1);
351
- }
352
346
  .-right-1\.5 {
353
347
  right: calc(var(--spacing) * -1.5);
354
348
  }
@@ -2268,6 +2262,9 @@
2268
2262
  .py-8 {
2269
2263
  padding-block: calc(var(--spacing) * 8);
2270
2264
  }
2265
+ .py-10 {
2266
+ padding-block: calc(var(--spacing) * 10);
2267
+ }
2271
2268
  .py-12 {
2272
2269
  padding-block: calc(var(--spacing) * 12);
2273
2270
  }
@@ -2904,10 +2901,6 @@
2904
2901
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
2905
2902
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2906
2903
  }
2907
- .shadow-xl {
2908
- --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
2909
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2910
- }
2911
2904
  .ring {
2912
2905
  --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
2913
2906
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -2977,6 +2970,11 @@
2977
2970
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2978
2971
  transition-duration: var(--tw-duration, var(--default-transition-duration));
2979
2972
  }
2973
+ .transition-\[opacity\,transform\] {
2974
+ transition-property: opacity,transform;
2975
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2976
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
2977
+ }
2980
2978
  .transition-\[opacity\] {
2981
2979
  transition-property: opacity;
2982
2980
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -3064,6 +3062,17 @@
3064
3062
  rotate: 180deg;
3065
3063
  }
3066
3064
  }
3065
+ .group-focus-within\/tip\:translate-x-0 {
3066
+ &:is(:where(.group\/tip):focus-within *) {
3067
+ --tw-translate-x: calc(var(--spacing) * 0);
3068
+ translate: var(--tw-translate-x) var(--tw-translate-y);
3069
+ }
3070
+ }
3071
+ .group-focus-within\/tip\:opacity-100 {
3072
+ &:is(:where(.group\/tip):focus-within *) {
3073
+ opacity: 100%;
3074
+ }
3075
+ }
3067
3076
  .group-hover\:translate-x-0\.5 {
3068
3077
  &:is(:where(.group):hover *) {
3069
3078
  @media (hover: hover) {
@@ -3079,6 +3088,28 @@
3079
3088
  }
3080
3089
  }
3081
3090
  }
3091
+ .group-hover\/tip\:translate-x-0 {
3092
+ &:is(:where(.group\/tip):hover *) {
3093
+ @media (hover: hover) {
3094
+ --tw-translate-x: calc(var(--spacing) * 0);
3095
+ translate: var(--tw-translate-x) var(--tw-translate-y);
3096
+ }
3097
+ }
3098
+ }
3099
+ .group-hover\/tip\:opacity-100 {
3100
+ &:is(:where(.group\/tip):hover *) {
3101
+ @media (hover: hover) {
3102
+ opacity: 100%;
3103
+ }
3104
+ }
3105
+ }
3106
+ .group-hover\/tip\:delay-300 {
3107
+ &:is(:where(.group\/tip):hover *) {
3108
+ @media (hover: hover) {
3109
+ transition-delay: 300ms;
3110
+ }
3111
+ }
3112
+ }
3082
3113
  .peer-disabled\:cursor-not-allowed {
3083
3114
  &:is(:where(.peer):disabled ~ *) {
3084
3115
  cursor: not-allowed;
@@ -3402,14 +3433,6 @@
3402
3433
  }
3403
3434
  }
3404
3435
  }
3405
- .hover\:shadow-md {
3406
- &:hover {
3407
- @media (hover: hover) {
3408
- --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3409
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3410
- }
3411
- }
3412
- }
3413
3436
  .hover\:shadow-sm {
3414
3437
  &:hover {
3415
3438
  @media (hover: hover) {
@@ -3433,6 +3456,11 @@
3433
3456
  }
3434
3457
  }
3435
3458
  }
3459
+ .focus\:border-\[var\(--border-accent\)\] {
3460
+ &:focus {
3461
+ border-color: var(--border-accent);
3462
+ }
3463
+ }
3436
3464
  .focus\:border-\[var\(--border-accent-hover\)\] {
3437
3465
  &:focus {
3438
3466
  border-color: var(--border-accent-hover);
@@ -3494,6 +3522,16 @@
3494
3522
  outline-style: none;
3495
3523
  }
3496
3524
  }
3525
+ .focus-visible\:border-\[var\(--border-accent\)\] {
3526
+ &:focus-visible {
3527
+ border-color: var(--border-accent);
3528
+ }
3529
+ }
3530
+ .focus-visible\:bg-transparent {
3531
+ &:focus-visible {
3532
+ background-color: transparent;
3533
+ }
3534
+ }
3497
3535
  .focus-visible\:opacity-100 {
3498
3536
  &:focus-visible {
3499
3537
  opacity: 100%;
@@ -4455,7 +4493,7 @@
4455
4493
  "ss01" 1;
4456
4494
  }
4457
4495
  ::selection {
4458
- background: rgba(56, 178, 172, 0.22);
4496
+ background: var(--bg-selection);
4459
4497
  color: hsl(var(--hsl-foreground));
4460
4498
  }
4461
4499
  ::-webkit-scrollbar {
@@ -4466,12 +4504,16 @@
4466
4504
  background: transparent;
4467
4505
  }
4468
4506
  ::-webkit-scrollbar-thumb {
4469
- background: hsl(var(--border) / 0.7);
4470
- border-radius: 3px;
4507
+ background: hsl(var(--border) / 0.6);
4508
+ border-radius: 9999px;
4471
4509
  }
4472
4510
  ::-webkit-scrollbar-thumb:hover {
4473
4511
  background: hsl(var(--muted-foreground) / 0.4);
4474
4512
  }
4513
+ * {
4514
+ scrollbar-width: thin;
4515
+ scrollbar-color: hsl(var(--border) / 0.6) transparent;
4516
+ }
4475
4517
  }
4476
4518
  @layer utilities {
4477
4519
  .text-gradient-sandbox {
@@ -4481,7 +4523,7 @@
4481
4523
  color: transparent;
4482
4524
  }
4483
4525
  .glow-sandbox {
4484
- box-shadow: 0 0 48px -10px hsl(var(--sandbox) / 0.45);
4526
+ box-shadow: none;
4485
4527
  }
4486
4528
  .glass-card {
4487
4529
  background: hsl(var(--card));
@@ -4496,31 +4538,26 @@
4496
4538
  border: 1px solid hsl(var(--border));
4497
4539
  }
4498
4540
  .glass-panel {
4499
- background: hsl(var(--card) / 0.4);
4500
- backdrop-filter: blur(20px);
4501
- -webkit-backdrop-filter: blur(20px);
4502
- border: 1px solid hsl(var(--primary) / 0.1);
4503
- box-shadow: 0 4px 30px hsl(var(--background) / 0.3);
4541
+ background: hsl(var(--card));
4542
+ border: 1px solid hsl(var(--border));
4543
+ box-shadow: var(--shadow-card);
4504
4544
  }
4505
4545
  .glass-panel-heavy {
4506
- background: hsl(var(--card) / 0.7);
4507
- backdrop-filter: blur(24px);
4508
- -webkit-backdrop-filter: blur(24px);
4509
- border: 1px solid hsl(var(--primary) / 0.12);
4510
- box-shadow: 0 8px 32px hsl(var(--background) / 0.5);
4546
+ background: hsl(var(--card));
4547
+ border: 1px solid hsl(var(--border));
4548
+ box-shadow: var(--shadow-card);
4511
4549
  }
4512
4550
  .glass-panel:hover {
4513
- border-color: hsl(var(--primary) / 0.25);
4551
+ border-color: hsl(var(--border));
4514
4552
  }
4515
4553
  .glow-primary {
4516
- box-shadow: 0 0 40px hsl(var(--primary) / 0.25);
4517
- transition: box-shadow 0.4s ease-in-out;
4554
+ box-shadow: none;
4518
4555
  }
4519
4556
  .glow-primary:hover {
4520
- box-shadow: 0 0 60px hsl(var(--primary) / 0.4);
4557
+ box-shadow: none;
4521
4558
  }
4522
4559
  .text-glow {
4523
- text-shadow: 0 0 16px hsl(var(--primary) / 0.6);
4560
+ text-shadow: none;
4524
4561
  }
4525
4562
  .gradient-text {
4526
4563
  background: linear-gradient(135deg, hsl(var(--primary) / 0.7) 0%, hsl(var(--primary)) 100%);
@@ -4532,12 +4569,7 @@
4532
4569
  background: linear-gradient(135deg, hsl(var(--primary) / 0.1) 0%, hsl(var(--primary) / 0.05) 100%);
4533
4570
  }
4534
4571
  .neural-mesh {
4535
- background-image: radial-gradient(
4536
- circle at 2px 2px,
4537
- hsl(var(--primary) / 0.07) 1px,
4538
- transparent 0
4539
- );
4540
- background-size: 32px 32px;
4572
+ background-image: none;
4541
4573
  }
4542
4574
  .nav-active-indicator {
4543
4575
  position: relative;
@@ -4552,7 +4584,6 @@
4552
4584
  width: 3px;
4553
4585
  background-color: hsl(var(--primary));
4554
4586
  border-radius: 0 4px 4px 0;
4555
- box-shadow: 0 0 10px hsl(var(--primary));
4556
4587
  }
4557
4588
  .glass {
4558
4589
  background-color: var(--depth-2);
@@ -4562,17 +4593,10 @@
4562
4593
  position: relative;
4563
4594
  }
4564
4595
  .bg-mesh::before {
4565
- content: '';
4566
- position: absolute;
4567
- inset: 0;
4568
- background: radial-gradient(ellipse 80% 50% at 20% 40%, var(--mesh-teal), transparent),
4569
- radial-gradient(ellipse 60% 40% at 80% 20%, var(--mesh-violet), transparent),
4570
- radial-gradient(ellipse 50% 60% at 50% 80%, var(--mesh-blue), transparent);
4571
- pointer-events: none;
4572
- z-index: 0;
4596
+ content: none;
4573
4597
  }
4574
4598
  .noise {
4575
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.025'/%3E%3C/svg%3E");
4599
+ background-image: none;
4576
4600
  pointer-events: none;
4577
4601
  }
4578
4602
  .status-dot {
@@ -4584,7 +4608,6 @@
4584
4608
  }
4585
4609
  .status-dot-running {
4586
4610
  background: var(--status-running);
4587
- box-shadow: var(--shadow-status-running);
4588
4611
  }
4589
4612
  .status-dot-creating {
4590
4613
  background: var(--status-creating);
@@ -4601,7 +4624,6 @@
4601
4624
  }
4602
4625
  .status-dot-error {
4603
4626
  background: var(--status-error);
4604
- box-shadow: var(--shadow-status-error);
4605
4627
  }
4606
4628
  .status-dot-deleted {
4607
4629
  background: var(--status-deleted);
@@ -4627,6 +4649,19 @@
4627
4649
  .animate-in {
4628
4650
  animation: fade-in 0.25s ease-out;
4629
4651
  }
4652
+ .animate-row-in {
4653
+ animation: row-in 0.18s ease-out;
4654
+ }
4655
+ @keyframes row-in {
4656
+ from {
4657
+ opacity: 0;
4658
+ transform: translateY(-4px);
4659
+ }
4660
+ to {
4661
+ opacity: 1;
4662
+ transform: translateY(0);
4663
+ }
4664
+ }
4630
4665
  .pulse-ring {
4631
4666
  position: relative;
4632
4667
  }
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@ export { AgentSessionControls, AgentSessionControlsProps, AgentSessionHarnessCon
8
8
  export { ExpandedToolDetail, ExpandedToolDetailProps, InlineThinkingItem, InlineThinkingItemProps, InlineToolItem, InlineToolItemProps, LiveDuration, RunGroup, RunGroupProps } from '@tangle-network/ui/run';
9
9
  export { CommandPreview, DiffPreview, GlobResultsPreview, GrepResultsPreview, QuestionPreview, WebSearchPreview, WriteFilePreview } from '@tangle-network/ui/tool-previews';
10
10
  export { FileArtifactPane, FileArtifactPaneProps, FileNode, FilePreview, FilePreviewProps, FileTabData, FileTabs, FileTabsProps, FileTree, FileTreeProps, FileTreeVisibilityOptions, RichFileTree, RichFileTreeGitEntry, RichFileTreeGitStatus, RichFileTreeProps, RichFileTreeThemeVars, filterFileTree } from '@tangle-network/ui/files';
11
- export { ActivityFeed, ActivityFeedProps, ActivityItem, BackendConfig, BackendConfigProps, BackendStatusData, ClusterStatusBar, ClusterStatusBarProps, ClusterStatusItem, CreditBalance, CreditBalanceProps, DashboardLayout, DashboardLayoutProps, DashboardProfile, DashboardSnapshotInfo, DashboardUser, ExposedPort, GitCommitData, GitPanel, GitPanelProps, GitStatusData, HARNESS_BRAND, HarnessBrand, HarnessLogo, HarnessLogoProps, INSUFFICIENT_BALANCE_CODE, InfoPanel, InfoPanelProps, InsufficientBalance, Invoice, InvoiceTable, InvoiceTableProps, McpServer, MetricAreaChart, MetricAreaChartProps, MetricChartPoint, MetricChartTone, NavItem, NetworkConfig, NetworkConfigData, NetworkConfigProps, NewSandboxCard, NewSandboxCardProps, OutOfCreditsModal, OutOfCreditsModalProps, PlanCardData, PlanCards, PlanCardsProps, PlanFeature, PortsList, PortsListProps, ProcessInfo, ProcessList, ProcessListProps, ProductVariant, ProfileAvatar, ProfileAvatarProps, ProfileComparison, ProfileComparisonProps, ProfileSelector, ProfileSelectorProps, PromoBanner, PromoBannerProps, RailButton, RailButtonProps, RailFlyout, RailFlyoutProps, RailModeButton, RailModeButtonProps, RailSeparator, RailSeparatorProps, ResourceMeter, ResourceMeterProps, ResourceSnapshot, ResourceSnapshotItem, ResourceSnapshotProps, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, SandboxCardData, SandboxCardProps, SandboxStatus, SandboxTable, SandboxTableProps, Sidebar, SidebarContent, SidebarContentProps, SidebarLayout, SidebarLayoutFlyoutItem, SidebarLayoutNavItem, SidebarLayoutProps, SidebarPanel, SidebarPanelContent, SidebarPanelContentProps, SidebarPanelHeader, SidebarPanelHeaderProps, SidebarPanelProps, SidebarProps, SidebarProvider, SidebarProviderProps, SidebarRail, SidebarRailFooter, SidebarRailFooterProps, SidebarRailHeader, SidebarRailHeaderProps, SidebarRailNav, SidebarRailNavProps, SidebarRailProps, SidebarUser, SnapshotList, SnapshotListProps, SystemLogsViewer, SystemLogsViewerProps, TeamRole, UsageSummary, UsageSummaryData, UsageSummaryProps, Variant, VariantList, VariantListProps, VariantOutcome, VariantStatus, canAdminSandbox, parseInsufficientBalance, useSidebar } from './dashboard.js';
11
+ export { ActivityFeed, ActivityFeedProps, ActivityItem, BackendConfig, BackendConfigProps, BackendStatusData, ClusterStatusBar, ClusterStatusBarProps, ClusterStatusItem, CreditBalance, CreditBalanceProps, DashboardLayout, DashboardLayoutProps, DashboardProfile, DashboardSnapshotInfo, DashboardUser, ExposedPort, GitCommitData, GitPanel, GitPanelProps, GitStatusData, HARNESS_BRAND, HarnessBrand, HarnessLogo, HarnessLogoProps, INSUFFICIENT_BALANCE_CODE, InfoPanel, InfoPanelProps, InsufficientBalance, Invoice, InvoiceTable, InvoiceTableProps, McpServer, MetricAreaChart, MetricAreaChartProps, MetricChartPoint, MetricChartTone, NavItem, NetworkConfig, NetworkConfigData, NetworkConfigProps, NewSandboxCard, NewSandboxCardProps, OutOfCreditsModal, OutOfCreditsModalProps, PlanCardData, PlanCards, PlanCardsProps, PlanFeature, PortsList, PortsListProps, ProcessInfo, ProcessList, ProcessListProps, ProductVariant, ProfileAvatar, ProfileAvatarProps, ProfileComparison, ProfileComparisonProps, ProfileSelector, ProfileSelectorProps, PromoBanner, PromoBannerProps, RailButton, RailButtonProps, RailCollapseToggle, RailCollapseToggleProps, RailFlyout, RailFlyoutProps, RailModeButton, RailModeButtonProps, RailSeparator, RailSeparatorProps, RailThemeToggle, RailTooltip, RailTooltipProps, ResourceMeter, ResourceMeterProps, ResourceSnapshot, ResourceSnapshotItem, ResourceSnapshotProps, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, SandboxCardData, SandboxCardProps, SandboxStatus, SandboxTable, SandboxTableProps, Sidebar, SidebarContent, SidebarContentProps, SidebarLayout, SidebarLayoutFlyoutItem, SidebarLayoutNavItem, SidebarLayoutProps, SidebarPanel, SidebarPanelContent, SidebarPanelContentProps, SidebarPanelHeader, SidebarPanelHeaderProps, SidebarPanelProps, SidebarProps, SidebarProvider, SidebarProviderProps, SidebarRail, SidebarRailFooter, SidebarRailFooterProps, SidebarRailHeader, SidebarRailHeaderProps, SidebarRailNav, SidebarRailNavProps, SidebarRailProps, SidebarUser, SnapshotList, SnapshotListProps, SystemLogsViewer, SystemLogsViewerProps, TeamRole, UsageSummary, UsageSummaryData, UsageSummaryProps, Variant, VariantList, VariantListProps, VariantOutcome, VariantStatus, canAdminSandbox, parseInsufficientBalance, useSidebar } from './dashboard.js';
12
12
  export { B as Backend, a as BackendSelector, b as BackendSelectorProps, H as HARNESS_OPTIONS, c as HarnessPicker, d as HarnessPickerProps, e as HarnessType, f as chatCapableHarnesses } from './harness-picker-lyeEncN4.js';
13
13
  export { D as DEFAULT_FEATURED_MODEL_IDS, M as ModelInfo, a as ModelPicker, b as ModelPickerProps, c as ModelPickerVariant, d as canonicalModelId, e as dedupeModels, f as formatContext, g as formatPricing, m as modelDedupKey } from './model-picker-Cmisf9Y8.js';
14
14
  export { B as BillingBalance, a as BillingDashboard, b as BillingDashboardProps, c as BillingSubscription, d as BillingUsage, P as PricingPage, e as PricingPageProps, f as PricingTier, T as TemplateCard, g as TemplateCardData, h as TemplateCardProps, U as UsageChart, i as UsageChartProps, j as UsageDataPoint, k as formatPrice } from './template-card-UhV3pmRC.js';