@tangle-network/sandbox-ui 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,3 @@
1
- import {
2
- TangleKnot
3
- } from "./chunk-UHFJXO24.js";
4
-
5
1
  // src/auth/index.ts
6
2
  import {
7
3
  AuthHeader,
@@ -14,6 +10,18 @@ import {
14
10
  import { Button } from "@tangle-network/ui/primitives";
15
11
  import { cn } from "@tangle-network/ui/utils";
16
12
  import { jsx, jsxs } from "react/jsx-runtime";
13
+ function TangleMark({ className }) {
14
+ return /* @__PURE__ */ jsx(
15
+ "svg",
16
+ {
17
+ className,
18
+ viewBox: "0 0 24 24",
19
+ fill: "currentColor",
20
+ "aria-hidden": "true",
21
+ children: /* @__PURE__ */ jsx("path", { d: "M4 5h16v3.2h-6.4V19h-3.2V8.2H4V5z" })
22
+ }
23
+ );
24
+ }
17
25
  function TangleLoginButton({
18
26
  authUrl = "/auth/tangle",
19
27
  variant = "default",
@@ -31,7 +39,7 @@ function TangleLoginButton({
31
39
  },
32
40
  ...props,
33
41
  children: [
34
- /* @__PURE__ */ jsx(TangleKnot, { size: 20 }),
42
+ /* @__PURE__ */ jsx(TangleMark, { className: "h-5 w-5" }),
35
43
  children ?? "Sign in with Tangle"
36
44
  ]
37
45
  }
@@ -57,8 +57,17 @@ interface RailButtonProps {
57
57
  className?: string;
58
58
  /** Show label text next to icon (for mobile drawer) */
59
59
  showLabel?: boolean;
60
+ /**
61
+ * Render the rail-button styling onto a single child element (e.g. a router
62
+ * `<Link>`) instead of an inner `<button>`. The child receives the button
63
+ * classes, `title`, and the icon/label/badge as its content — so navigation
64
+ * items stay real anchors (keyboard, cmd-click, prefetch) without copying the
65
+ * class recipe or nesting `<a><button>`.
66
+ */
67
+ asChild?: boolean;
68
+ children?: React.ReactNode;
60
69
  }
61
- declare function RailButton({ icon: Icon, label, isActive, badge, onClick, className, showLabel }: RailButtonProps): react_jsx_runtime.JSX.Element;
70
+ declare function RailButton({ icon: Icon, label, isActive, badge, onClick, className, showLabel, asChild, children }: RailButtonProps): react_jsx_runtime.JSX.Element;
62
71
  interface RailModeButtonProps {
63
72
  mode: string;
64
73
  icon: React.ComponentType<{
@@ -101,9 +110,11 @@ interface ProfileAvatarProps {
101
110
  /** Extra dropdown items rendered before settings/logout */
102
111
  children?: React.ReactNode;
103
112
  className?: string;
113
+ /** Show name/email beside the avatar (for a labeled rail) instead of an icon-only avatar button. */
114
+ showDetails?: boolean;
104
115
  LinkComponent?: React.ComponentType<any>;
105
116
  }
106
- declare function ProfileAvatar({ user, isLoading, onLogout, onSettingsClick, settingsHref, children, className, LinkComponent, }: ProfileAvatarProps): react_jsx_runtime.JSX.Element;
117
+ declare function ProfileAvatar({ user, isLoading, onLogout, onSettingsClick, settingsHref, children, className, showDetails, LinkComponent, }: ProfileAvatarProps): react_jsx_runtime.JSX.Element;
107
118
 
108
119
  /** Width constants (px) matching blueprint-agent layout */
109
120
  declare const SIDEBAR_RAIL_WIDTH = 64;
@@ -132,14 +143,28 @@ interface SidebarContextValue {
132
143
  contentMargin: number;
133
144
  /** Whether there are panels at all */
134
145
  hasPanels: boolean;
146
+ /** Rail width in px — 64 for the icon-only rail, wider when labels show */
147
+ railWidth: number;
135
148
  }
136
149
  interface SidebarProviderProps {
137
150
  defaultPanelOpen?: boolean;
138
151
  defaultMode?: string;
139
152
  hasPanels?: boolean;
153
+ /** Rail width in px. Defaults to the 64px icon-only rail. */
154
+ railWidth?: number;
155
+ /**
156
+ * Controlled panel-open state. When provided, the provider treats panel
157
+ * visibility as controlled: it never reads or writes localStorage and
158
+ * reports changes through {@link onPanelOpenChange} instead. Use this in
159
+ * server-rendered apps — seed it from a value the server also has (e.g. a
160
+ * cookie) so the SSR markup matches the first client render. The localStorage
161
+ * read in the uncontrolled path is what diverges from SSR and breaks hydration.
162
+ */
163
+ panelOpen?: boolean;
164
+ onPanelOpenChange?: (open: boolean) => void;
140
165
  children: React.ReactNode;
141
166
  }
142
- declare function SidebarProvider({ defaultPanelOpen, defaultMode, hasPanels, children, }: SidebarProviderProps): react_jsx_runtime.JSX.Element;
167
+ declare function SidebarProvider({ defaultPanelOpen, defaultMode, hasPanels, railWidth, panelOpen: controlledPanelOpen, onPanelOpenChange, children, }: SidebarProviderProps): react_jsx_runtime.JSX.Element;
143
168
  declare function useSidebar(): SidebarContextValue;
144
169
 
145
170
  interface CreditBalanceProps {
@@ -218,9 +243,72 @@ interface ResourceMeterProps {
218
243
  max?: number;
219
244
  unit?: string;
220
245
  icon?: React.ReactNode;
246
+ /**
247
+ * Overrides the right-hand readout. Use for values the raw
248
+ * `value{unit}/max{unit}` template can't express, e.g. byte sizes
249
+ * ("1.2 GB / 4 GB"). The bar fill still derives from value/max.
250
+ */
251
+ valueLabel?: string;
252
+ className?: string;
253
+ }
254
+ declare function ResourceMeter({ label, value, max, unit, valueLabel, icon, className }: ResourceMeterProps): react_jsx_runtime.JSX.Element;
255
+
256
+ interface ResourceSnapshotItem {
257
+ /** Stable React key; falls back to `label` plus row index when omitted. */
258
+ id?: string;
259
+ label: string;
260
+ /** Current value, in the same unit as `max`. */
261
+ value: number;
262
+ /** Full-scale value. Omit to treat `value` as a 0-100 percent. */
263
+ max?: number;
264
+ /** Unit suffix for the default `value{unit}/max{unit}` readout. */
265
+ unit?: string;
266
+ /** Right-hand readout override (e.g. "1.2 GB / 4 GB"). */
267
+ valueLabel?: string;
268
+ icon?: React.ReactNode;
269
+ }
270
+ interface ResourceSnapshotProps {
271
+ title?: string;
272
+ /** Right-aligned header slot, e.g. a "View metrics" link. */
273
+ action?: React.ReactNode;
274
+ items: ResourceSnapshotItem[];
275
+ loading?: boolean;
276
+ /** When set, replaces the meters with an error line. */
277
+ error?: string | null;
221
278
  className?: string;
222
279
  }
223
- declare function ResourceMeter({ label, value, max, unit, icon, className }: ResourceMeterProps): react_jsx_runtime.JSX.Element;
280
+ /**
281
+ * Compact at-a-glance resource panel: a stack of {@link ResourceMeter}
282
+ * rows for an instantaneous CPU / memory / disk read. Time-series detail
283
+ * belongs in a dedicated metrics view; this is the snapshot.
284
+ */
285
+ declare function ResourceSnapshot({ title, action, items, loading, error, className, }: ResourceSnapshotProps): react_jsx_runtime.JSX.Element;
286
+
287
+ interface ActivityItem {
288
+ /** Stable key. */
289
+ id: string;
290
+ icon?: React.ReactNode;
291
+ title: string;
292
+ detail?: string;
293
+ /** Wall-clock ms. Drives ordering and the relative timestamp. */
294
+ timestamp?: number;
295
+ }
296
+ interface ActivityFeedProps {
297
+ title?: string;
298
+ action?: React.ReactNode;
299
+ items: ActivityItem[];
300
+ loading?: boolean;
301
+ /** Caps the rendered rows after sorting newest-first. Default 6. */
302
+ maxItems?: number;
303
+ emptyLabel?: string;
304
+ className?: string;
305
+ }
306
+ /**
307
+ * Newest-first list of recent sandbox activity (commits, snapshots,
308
+ * lifecycle events). Items are sorted by `timestamp` descending here so
309
+ * callers can merge heterogeneous sources without pre-sorting.
310
+ */
311
+ declare function ActivityFeed({ title, action, items, loading, maxItems, emptyLabel, className, }: ActivityFeedProps): react_jsx_runtime.JSX.Element;
224
312
 
225
313
  type SandboxStatus = "running" | "hibernating" | "provisioning" | "stopped" | "failed" | "archived" | "creating";
226
314
  type TeamRole = "owner" | "admin" | "member" | "viewer";
@@ -416,6 +504,72 @@ interface DashboardLayoutProps {
416
504
  }
417
505
  declare function DashboardLayout({ defaultPanelOpen, defaultMode, ...props }: DashboardLayoutProps): react_jsx_runtime.JSX.Element;
418
506
 
507
+ interface SidebarLayoutNavItem {
508
+ id: string;
509
+ label: string;
510
+ icon: React.ComponentType<{
511
+ className?: string;
512
+ }>;
513
+ /** Destination for link items. Omit when `togglesPanel` is set. */
514
+ href?: string;
515
+ /** Render this item as the panel toggle instead of a link. */
516
+ togglesPanel?: boolean;
517
+ badge?: number;
518
+ }
519
+ interface SidebarLayoutProps {
520
+ children: React.ReactNode;
521
+ /** Rail navigation, in display order. Each item is a link or the panel toggle. */
522
+ navItems: SidebarLayoutNavItem[];
523
+ /** Id of the active link item (drives the highlighted state). */
524
+ activeId?: string;
525
+ /** Content rendered inside the slide-out panel (e.g. a SessionSidebar). */
526
+ panel?: React.ReactNode;
527
+ /** Logo element rendered in the rail header. */
528
+ logo?: React.ReactNode;
529
+ /** Destination for the logo link. */
530
+ logoHref?: string;
531
+ user?: SidebarUser | null;
532
+ isLoading?: boolean;
533
+ onLogout?: () => void;
534
+ onSettingsClick?: () => void;
535
+ settingsHref?: string;
536
+ /** Extra items rendered before settings/logout in the profile menu. */
537
+ profileMenuItems?: React.ReactNode;
538
+ /** Extra content in the rail footer, above the profile avatar. */
539
+ railFooter?: React.ReactNode;
540
+ LinkComponent?: React.ComponentType<any>;
541
+ /**
542
+ * Controlled panel-open state. Provide it (seeded from a server-readable
543
+ * source such as a cookie) in SSR apps so the panel survives reload without a
544
+ * hydration mismatch. Omit to let the panel persist to localStorage.
545
+ */
546
+ panelOpen?: boolean;
547
+ onPanelOpenChange?: (open: boolean) => void;
548
+ defaultPanelOpen?: boolean;
549
+ /** Hide the whole sidebar below this breakpoint (content spans full width). */
550
+ hideBelow?: "md" | "lg";
551
+ /** Show text labels beside the rail icons on a wider rail (vs. icon-only with hover tooltips). */
552
+ railLabels?: boolean;
553
+ /**
554
+ * Close the panel when a link nav item is clicked. Useful when the panel is
555
+ * contextual to one section (e.g. a chat thread list) rather than a global
556
+ * dock. Selecting items inside the panel itself does not trigger this.
557
+ */
558
+ closePanelOnNavigate?: boolean;
559
+ className?: string;
560
+ sidebarClassName?: string;
561
+ /** Class for the `<main>` content region (e.g. `flex h-screen ... overflow-hidden`). */
562
+ contentClassName?: string;
563
+ }
564
+ /**
565
+ * App shell built on the sidebar rail + slide-out panel, without a top nav bar.
566
+ * Apps supply nav items, an optional panel, and profile/branding props; the
567
+ * standard look, panel docking, content-margin coordination, and responsive
568
+ * hide all live here. Pair `panelOpen`/`onPanelOpenChange` with a cookie for
569
+ * SSR-safe persistence.
570
+ */
571
+ declare function SidebarLayout({ panelOpen, onPanelOpenChange, defaultPanelOpen, ...props }: SidebarLayoutProps): react_jsx_runtime.JSX.Element;
572
+
419
573
  interface Profile {
420
574
  id: string;
421
575
  name: string;
@@ -659,4 +813,4 @@ interface InfoPanelProps {
659
813
  }
660
814
  declare function InfoPanel({ label, title, description, className }: InfoPanelProps): react_jsx_runtime.JSX.Element;
661
815
 
662
- export { 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, 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, RailModeButton, type RailModeButtonProps, RailSeparator, type RailSeparatorProps, ResourceMeter, type ResourceMeterProps, 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, 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 };
816
+ 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, 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, 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 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
@@ -1,4 +1,5 @@
1
1
  import {
2
+ ActivityFeed,
2
3
  BackendConfig,
3
4
  ClusterStatusBar,
4
5
  CreditBalance,
@@ -21,6 +22,7 @@ import {
21
22
  RailModeButton,
22
23
  RailSeparator,
23
24
  ResourceMeter,
25
+ ResourceSnapshot,
24
26
  SIDEBAR_MOBILE_WIDTH,
25
27
  SIDEBAR_PANEL_WIDTH,
26
28
  SIDEBAR_RAIL_WIDTH,
@@ -29,6 +31,7 @@ import {
29
31
  SandboxTable,
30
32
  Sidebar,
31
33
  SidebarContent,
34
+ SidebarLayout,
32
35
  SidebarPanel,
33
36
  SidebarPanelContent,
34
37
  SidebarPanelHeader,
@@ -44,7 +47,7 @@ import {
44
47
  canAdminSandbox,
45
48
  parseInsufficientBalance,
46
49
  useSidebar
47
- } from "./chunk-ZNYEJERQ.js";
50
+ } from "./chunk-CB3KBKYN.js";
48
51
  import {
49
52
  BillingDashboard,
50
53
  InfoPanel,
@@ -53,8 +56,7 @@ import {
53
56
  UsageChart,
54
57
  formatPrice
55
58
  } from "./chunk-DNZ4DTNA.js";
56
- import "./chunk-SM7IJY4I.js";
57
- import "./chunk-UHFJXO24.js";
59
+ import "./chunk-7ZA5SEK3.js";
58
60
  import {
59
61
  BackendSelector,
60
62
  HARNESS_OPTIONS,
@@ -68,6 +70,7 @@ import {
68
70
  } from "./chunk-4KAPMTPU.js";
69
71
  import "./chunk-EI44GEQ5.js";
70
72
  export {
73
+ ActivityFeed,
71
74
  BackendConfig,
72
75
  BackendSelector,
73
76
  BillingDashboard,
@@ -97,6 +100,7 @@ export {
97
100
  RailModeButton,
98
101
  RailSeparator,
99
102
  ResourceMeter,
103
+ ResourceSnapshot,
100
104
  SIDEBAR_MOBILE_WIDTH,
101
105
  SIDEBAR_PANEL_WIDTH,
102
106
  SIDEBAR_RAIL_WIDTH,
@@ -105,6 +109,7 @@ export {
105
109
  SandboxTable,
106
110
  Sidebar,
107
111
  SidebarContent,
112
+ SidebarLayout,
108
113
  SidebarPanel,
109
114
  SidebarPanelContent,
110
115
  SidebarPanelHeader,
package/dist/globals.css CHANGED
@@ -365,9 +365,6 @@
365
365
  .bottom-0 {
366
366
  bottom: calc(var(--spacing) * 0);
367
367
  }
368
- .bottom-2 {
369
- bottom: calc(var(--spacing) * 2);
370
- }
371
368
  .bottom-4 {
372
369
  bottom: calc(var(--spacing) * 4);
373
370
  }
@@ -383,18 +380,12 @@
383
380
  .left-0\.5 {
384
381
  left: calc(var(--spacing) * 0.5);
385
382
  }
386
- .left-1 {
387
- left: calc(var(--spacing) * 1);
388
- }
389
383
  .left-1\/2 {
390
384
  left: calc(1 / 2 * 100%);
391
385
  }
392
386
  .left-2 {
393
387
  left: calc(var(--spacing) * 2);
394
388
  }
395
- .left-2\.5 {
396
- left: calc(var(--spacing) * 2.5);
397
- }
398
389
  .left-3 {
399
390
  left: calc(var(--spacing) * 3);
400
391
  }
@@ -611,9 +602,6 @@
611
602
  .table {
612
603
  display: table;
613
604
  }
614
- .aspect-\[9\/16\] {
615
- aspect-ratio: 9/16;
616
- }
617
605
  .aspect-square {
618
606
  aspect-ratio: 1 / 1;
619
607
  }
@@ -735,9 +723,6 @@
735
723
  .h-screen {
736
724
  height: 100vh;
737
725
  }
738
- .max-h-40 {
739
- max-height: calc(var(--spacing) * 40);
740
- }
741
726
  .max-h-48 {
742
727
  max-height: calc(var(--spacing) * 48);
743
728
  }
@@ -792,9 +777,6 @@
792
777
  .min-h-\[44px\] {
793
778
  min-height: 44px;
794
779
  }
795
- .min-h-\[60px\] {
796
- min-height: 60px;
797
- }
798
780
  .min-h-\[72px\] {
799
781
  min-height: 72px;
800
782
  }
@@ -810,9 +792,6 @@
810
792
  .min-h-\[200px\] {
811
793
  min-height: 200px;
812
794
  }
813
- .min-h-\[300px\] {
814
- min-height: 300px;
815
- }
816
795
  .min-h-full {
817
796
  min-height: 100%;
818
797
  }
@@ -1086,9 +1065,6 @@
1086
1065
  .min-w-4 {
1087
1066
  min-width: calc(var(--spacing) * 4);
1088
1067
  }
1089
- .min-w-40 {
1090
- min-width: calc(var(--spacing) * 40);
1091
- }
1092
1068
  .min-w-\[8rem\] {
1093
1069
  min-width: 8rem;
1094
1070
  }
@@ -1638,10 +1614,6 @@
1638
1614
  border-left-style: var(--tw-border-style);
1639
1615
  border-left-width: 1px;
1640
1616
  }
1641
- .border-l-2 {
1642
- border-left-style: var(--tw-border-style);
1643
- border-left-width: 2px;
1644
- }
1645
1617
  .border-dashed {
1646
1618
  --tw-border-style: dashed;
1647
1619
  border-style: dashed;
@@ -1959,9 +1931,6 @@
1959
1931
  background-color: color-mix(in oklab, var(--color-amber-500) 10%, transparent);
1960
1932
  }
1961
1933
  }
1962
- .bg-black {
1963
- background-color: var(--color-black);
1964
- }
1965
1934
  .bg-black\/40 {
1966
1935
  background-color: color-mix(in srgb, #000 40%, transparent);
1967
1936
  @supports (color: color-mix(in lab, red, red)) {
@@ -2070,12 +2039,6 @@
2070
2039
  background-color: color-mix(in oklab, var(--color-white) 10%, transparent);
2071
2040
  }
2072
2041
  }
2073
- .bg-white\/40 {
2074
- background-color: color-mix(in srgb, #fff 40%, transparent);
2075
- @supports (color: color-mix(in lab, red, red)) {
2076
- background-color: color-mix(in oklab, var(--color-white) 40%, transparent);
2077
- }
2078
- }
2079
2042
  .bg-yellow-500 {
2080
2043
  background-color: var(--color-yellow-500);
2081
2044
  }
@@ -2115,9 +2078,6 @@
2115
2078
  .object-contain {
2116
2079
  object-fit: contain;
2117
2080
  }
2118
- .object-cover {
2119
- object-fit: cover;
2120
- }
2121
2081
  .p-0 {
2122
2082
  padding: calc(var(--spacing) * 0);
2123
2083
  }
@@ -2310,9 +2270,6 @@
2310
2270
  .pt-16 {
2311
2271
  padding-top: calc(var(--spacing) * 16);
2312
2272
  }
2313
- .pr-1 {
2314
- padding-right: calc(var(--spacing) * 1);
2315
- }
2316
2273
  .pr-2 {
2317
2274
  padding-right: calc(var(--spacing) * 2);
2318
2275
  }
@@ -2352,9 +2309,6 @@
2352
2309
  .pl-2 {
2353
2310
  padding-left: calc(var(--spacing) * 2);
2354
2311
  }
2355
- .pl-3 {
2356
- padding-left: calc(var(--spacing) * 3);
2357
- }
2358
2312
  .pl-4 {
2359
2313
  padding-left: calc(var(--spacing) * 4);
2360
2314
  }
@@ -2724,9 +2678,6 @@
2724
2678
  .text-blue-400 {
2725
2679
  color: var(--color-blue-400);
2726
2680
  }
2727
- .text-blue-500 {
2728
- color: var(--color-blue-500);
2729
- }
2730
2681
  .text-emerald-400 {
2731
2682
  color: var(--color-emerald-400);
2732
2683
  }
@@ -2784,9 +2735,6 @@
2784
2735
  .italic {
2785
2736
  font-style: italic;
2786
2737
  }
2787
- .not-italic {
2788
- font-style: normal;
2789
- }
2790
2738
  .tabular-nums {
2791
2739
  --tw-numeric-spacing: tabular-nums;
2792
2740
  font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
@@ -2810,9 +2758,6 @@
2810
2758
  .opacity-30 {
2811
2759
  opacity: 30%;
2812
2760
  }
2813
- .opacity-40 {
2814
- opacity: 40%;
2815
- }
2816
2761
  .opacity-50 {
2817
2762
  opacity: 50%;
2818
2763
  }
@@ -3259,16 +3204,6 @@
3259
3204
  }
3260
3205
  }
3261
3206
  }
3262
- .hover\:bg-black\/60 {
3263
- &:hover {
3264
- @media (hover: hover) {
3265
- background-color: color-mix(in srgb, #000 60%, transparent);
3266
- @supports (color: color-mix(in lab, red, red)) {
3267
- background-color: color-mix(in oklab, var(--color-black) 60%, transparent);
3268
- }
3269
- }
3270
- }
3271
- }
3272
3207
  .hover\:bg-blue-600\/30 {
3273
3208
  &:hover {
3274
3209
  @media (hover: hover) {
@@ -3289,16 +3224,6 @@
3289
3224
  }
3290
3225
  }
3291
3226
  }
3292
- .hover\:bg-green-600\/5 {
3293
- &:hover {
3294
- @media (hover: hover) {
3295
- background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 5%, transparent);
3296
- @supports (color: color-mix(in lab, red, red)) {
3297
- background-color: color-mix(in oklab, var(--color-green-600) 5%, transparent);
3298
- }
3299
- }
3300
- }
3301
- }
3302
3227
  .hover\:bg-green-600\/30 {
3303
3228
  &:hover {
3304
3229
  @media (hover: hover) {
@@ -3357,13 +3282,6 @@
3357
3282
  }
3358
3283
  }
3359
3284
  }
3360
- .hover\:text-green-600 {
3361
- &:hover {
3362
- @media (hover: hover) {
3363
- color: var(--color-green-600);
3364
- }
3365
- }
3366
- }
3367
3285
  .hover\:underline {
3368
3286
  &:hover {
3369
3287
  @media (hover: hover) {
@@ -3659,6 +3577,16 @@
3659
3577
  translate: var(--tw-translate-x) var(--tw-translate-y);
3660
3578
  }
3661
3579
  }
3580
+ .max-lg\:hidden {
3581
+ @media (width < 64rem) {
3582
+ display: none;
3583
+ }
3584
+ }
3585
+ .max-md\:hidden {
3586
+ @media (width < 48rem) {
3587
+ display: none;
3588
+ }
3589
+ }
3662
3590
  .sm\:mx-3 {
3663
3591
  @media (width >= 40rem) {
3664
3592
  margin-inline: calc(var(--spacing) * 3);
@@ -3679,11 +3607,6 @@
3679
3607
  grid-template-columns: repeat(2, minmax(0, 1fr));
3680
3608
  }
3681
3609
  }
3682
- .sm\:grid-cols-3 {
3683
- @media (width >= 40rem) {
3684
- grid-template-columns: repeat(3, minmax(0, 1fr));
3685
- }
3686
- }
3687
3610
  .sm\:grid-cols-4 {
3688
3611
  @media (width >= 40rem) {
3689
3612
  grid-template-columns: repeat(4, minmax(0, 1fr));
@@ -3870,11 +3793,6 @@
3870
3793
  grid-template-columns: repeat(4, minmax(0, 1fr));
3871
3794
  }
3872
3795
  }
3873
- .xl\:grid-cols-5 {
3874
- @media (width >= 80rem) {
3875
- grid-template-columns: repeat(5, minmax(0, 1fr));
3876
- }
3877
- }
3878
3796
  .dark\:text-neutral-500 {
3879
3797
  @media (prefers-color-scheme: dark) {
3880
3798
  color: var(--color-neutral-500);
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 { BackendConfig, BackendConfigProps, BackendStatusData, ClusterStatusBar, ClusterStatusBarProps, ClusterStatusItem, CreditBalance, CreditBalanceProps, DashboardLayout, DashboardLayoutProps, DashboardProfile, DashboardSnapshotInfo, DashboardUser, ExposedPort, GitCommitData, GitPanel, GitPanelProps, GitStatusData, 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, RailModeButton, RailModeButtonProps, RailSeparator, RailSeparatorProps, ResourceMeter, ResourceMeterProps, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, SandboxCardData, SandboxCardProps, SandboxStatus, SandboxTable, SandboxTableProps, Sidebar, SidebarContent, SidebarContentProps, 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, 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, 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, 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 } from './harness-picker-C1W3rTeb.js';
13
13
  export { M as ModelInfo, a as ModelPicker, b as ModelPickerProps, c as ModelPickerVariant, d as canonicalModelId, f as formatContext, e as formatPricing } from './model-picker-DUfMTQo5.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';
package/dist/index.js CHANGED
@@ -58,7 +58,7 @@ import {
58
58
  LoginLayout,
59
59
  TangleLoginButton,
60
60
  UserMenu
61
- } from "./chunk-R3ZMMCT3.js";
61
+ } from "./chunk-IOB2PW5Z.js";
62
62
  import {
63
63
  RealtimeSessionRegistry,
64
64
  createAuthFetcher,
@@ -141,6 +141,7 @@ import {
141
141
  filterFileTree
142
142
  } from "./chunk-3J6FG3FJ.js";
143
143
  import {
144
+ ActivityFeed,
144
145
  BackendConfig,
145
146
  ClusterStatusBar,
146
147
  CreditBalance,
@@ -163,6 +164,7 @@ import {
163
164
  RailModeButton,
164
165
  RailSeparator,
165
166
  ResourceMeter,
167
+ ResourceSnapshot,
166
168
  SIDEBAR_MOBILE_WIDTH,
167
169
  SIDEBAR_PANEL_WIDTH,
168
170
  SIDEBAR_RAIL_WIDTH,
@@ -171,6 +173,7 @@ import {
171
173
  SandboxTable,
172
174
  Sidebar,
173
175
  SidebarContent,
176
+ SidebarLayout,
174
177
  SidebarPanel,
175
178
  SidebarPanelContent,
176
179
  SidebarPanelHeader,
@@ -186,7 +189,7 @@ import {
186
189
  canAdminSandbox,
187
190
  parseInsufficientBalance,
188
191
  useSidebar
189
- } from "./chunk-ZNYEJERQ.js";
192
+ } from "./chunk-CB3KBKYN.js";
190
193
  import {
191
194
  BillingDashboard,
192
195
  InfoPanel,
@@ -239,6 +242,7 @@ import {
239
242
  InlineCode,
240
243
  Input,
241
244
  Label,
245
+ Logo,
242
246
  Progress,
243
247
  SegmentedControl,
244
248
  Select,
@@ -269,6 +273,7 @@ import {
269
273
  TabsContent,
270
274
  TabsList,
271
275
  TabsTrigger,
276
+ TangleKnot,
272
277
  TerminalDisplay,
273
278
  Textarea,
274
279
  ThemeToggle,
@@ -279,11 +284,7 @@ import {
279
284
  buttonVariants,
280
285
  useTheme,
281
286
  useToast
282
- } from "./chunk-SM7IJY4I.js";
283
- import {
284
- Logo,
285
- TangleKnot
286
- } from "./chunk-UHFJXO24.js";
287
+ } from "./chunk-7ZA5SEK3.js";
287
288
  import {
288
289
  BackendSelector,
289
290
  HARNESS_OPTIONS,
@@ -315,6 +316,7 @@ import {
315
316
  } from "@tangle-network/ui/tool-previews";
316
317
  import { Markdown } from "@tangle-network/ui/markdown";
317
318
  export {
319
+ ActivityFeed,
318
320
  AgentSessionControls,
319
321
  AgentTimeline,
320
322
  AgentWorkbench,
@@ -425,6 +427,7 @@ export {
425
427
  RealtimeSessionRegistry,
426
428
  ReasoningLevelPicker,
427
429
  ResourceMeter,
430
+ ResourceSnapshot,
428
431
  RichFileTree,
429
432
  RunGroup,
430
433
  RuntimePane,
@@ -451,6 +454,7 @@ export {
451
454
  Sidebar,
452
455
  SidebarContent,
453
456
  SidebarDropZone,
457
+ SidebarLayout,
454
458
  SidebarPanel,
455
459
  SidebarPanelContent,
456
460
  SidebarPanelHeader,
package/dist/pages.js CHANGED
@@ -11,8 +11,7 @@ import {
11
11
  Input,
12
12
  Switch,
13
13
  Textarea
14
- } from "./chunk-SM7IJY4I.js";
15
- import "./chunk-UHFJXO24.js";
14
+ } from "./chunk-7ZA5SEK3.js";
16
15
  import "./chunk-4KAPMTPU.js";
17
16
  import {
18
17
  cn