@tangle-network/sandbox-ui 0.10.1 → 0.10.3

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.
@@ -33,6 +33,7 @@ var SIDEBAR_MODE_KEY = "sandbox-sidebar-mode";
33
33
  var SIDEBAR_RAIL_WIDTH = 64;
34
34
  var SIDEBAR_PANEL_WIDTH = 260;
35
35
  var SIDEBAR_TOTAL_WIDTH = SIDEBAR_RAIL_WIDTH + SIDEBAR_PANEL_WIDTH;
36
+ var SIDEBAR_MOBILE_WIDTH = 256;
36
37
  var SidebarContext = React.createContext(null);
37
38
  function readStorage(key, fallback) {
38
39
  if (typeof window === "undefined") return fallback;
@@ -166,8 +167,18 @@ function Sidebar({ children, className, style }) {
166
167
  }
167
168
  );
168
169
  }
169
- function SidebarRail({ children, className }) {
170
- return /* @__PURE__ */ jsx2("div", { className: cn("flex flex-col h-full w-16 shrink-0 bg-transparent", className), children });
170
+ function SidebarRail({ children, className, wide = false }) {
171
+ return /* @__PURE__ */ jsx2(
172
+ "div",
173
+ {
174
+ className: cn(
175
+ "flex flex-col h-full shrink-0 bg-transparent",
176
+ wide ? "w-full" : "w-16",
177
+ className
178
+ ),
179
+ children
180
+ }
181
+ );
171
182
  }
172
183
  function SidebarRailHeader({ children, className }) {
173
184
  return /* @__PURE__ */ jsx2("div", { className: cn("flex h-14 items-center justify-center border-b border-border", className), children });
@@ -181,7 +192,7 @@ function SidebarRailFooter({ children, className }) {
181
192
  function RailSeparator({ className }) {
182
193
  return /* @__PURE__ */ jsx2("div", { className: cn("my-2 h-px w-10 bg-[var(--md3-outline-variant)]", className) });
183
194
  }
184
- function RailButton({ icon: Icon2, label, isActive, badge, onClick, className }) {
195
+ function RailButton({ icon: Icon2, label, isActive, badge, onClick, className, showLabel }) {
185
196
  return /* @__PURE__ */ jsxs(
186
197
  "button",
187
198
  {
@@ -189,7 +200,8 @@ function RailButton({ icon: Icon2, label, isActive, badge, onClick, className })
189
200
  onClick,
190
201
  title: label,
191
202
  className: cn(
192
- "group relative flex items-center justify-center w-11 h-11 rounded-xl transition-all duration-200",
203
+ "group relative flex items-center justify-center rounded-xl transition-all duration-200",
204
+ showLabel ? "w-full justify-start px-3 h-11 gap-3" : "w-11 h-11 justify-center",
193
205
  "hover:bg-[var(--accent-surface-soft)] hover:text-[var(--accent-text)]",
194
206
  "active:scale-95",
195
207
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary",
@@ -198,23 +210,25 @@ function RailButton({ icon: Icon2, label, isActive, badge, onClick, className })
198
210
  className
199
211
  ),
200
212
  children: [
201
- /* @__PURE__ */ jsx2(Icon2, { className: "h-5 w-5" }),
213
+ /* @__PURE__ */ jsx2(Icon2, { className: "h-5 w-5 shrink-0" }),
214
+ showLabel && /* @__PURE__ */ jsx2("span", { className: "text-sm font-medium", children: label }),
202
215
  badge !== void 0 && badge > 0 && /* @__PURE__ */ jsx2("span", { className: "absolute -top-1 -right-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-primary text-[9px] font-bold text-[var(--md3-on-primary)] px-1 shadow-sm", children: badge > 99 ? "99+" : badge })
203
216
  ]
204
217
  }
205
218
  );
206
219
  }
207
- function RailModeButton({ mode, icon, label, badge, className }) {
220
+ function RailModeButton({ mode, icon, label, badge, className, showLabel }) {
208
221
  const { panelOpen, mode: currentMode, switchMode } = useSidebar();
209
222
  return /* @__PURE__ */ jsx2(
210
223
  RailButton,
211
224
  {
212
225
  icon,
213
226
  label,
227
+ isActive: mode === currentMode && panelOpen,
214
228
  badge,
215
- isActive: panelOpen && currentMode === mode,
216
229
  onClick: () => switchMode(mode),
217
- className
230
+ className,
231
+ showLabel
218
232
  }
219
233
  );
220
234
  }
@@ -243,8 +257,11 @@ function SidebarContent({ children, className }) {
243
257
  return /* @__PURE__ */ jsx2(
244
258
  "main",
245
259
  {
246
- className: cn("min-h-screen transition-[margin-left] duration-200 ease-in-out", className),
247
- style: { marginLeft: contentMargin },
260
+ className: cn(
261
+ "min-h-screen transition-[margin-left] duration-200 ease-in-out lg:ml-[var(--sb-content-margin,0px)]",
262
+ className
263
+ ),
264
+ style: { "--sb-content-margin": `${contentMargin}px` },
248
265
  children
249
266
  }
250
267
  );
@@ -576,58 +593,86 @@ function DashboardLayoutInner({
576
593
  }, [notificationsOpen]);
577
594
  const { contentMargin, hidden, mode, hasPanels, panelOpen } = useSidebar();
578
595
  const modeSet = React3.useMemo(() => new Set(modeItems), [modeItems]);
579
- const sidebarUser = user ? { email: user.email, name: user.name, tier: user.tier, avatarUrl: user.avatarUrl } : void 0;
596
+ const sidebarUser = React3.useMemo(
597
+ () => user ? { email: user.email, name: user.name, tier: user.tier, avatarUrl: user.avatarUrl } : void 0,
598
+ [user?.email, user?.name, user?.tier, user?.avatarUrl]
599
+ );
580
600
  const activePanel = panels.find((p) => p.mode === mode);
581
- const sidebarContent = /* @__PURE__ */ jsxs6(Fragment4, { children: [
582
- /* @__PURE__ */ jsxs6(SidebarRail, { children: [
583
- /* @__PURE__ */ jsx7(SidebarRailHeader, { children: /* @__PURE__ */ jsx7(Link, { href: "/", to: "/", className: "p-1 rounded-md transition-colors hover:bg-muted/50", children: /* @__PURE__ */ jsx7(Logo, { variant, size: "sm", iconOnly: true }) }) }),
584
- /* @__PURE__ */ jsx7(SidebarRailNav, { children: navItems.map((item, i) => {
585
- const isMode = modeSet.has(item.id);
586
- const prevIsMode = i > 0 && modeSet.has(navItems[i - 1].id);
587
- const showSep = i > 0 && isMode && !prevIsMode;
588
- return /* @__PURE__ */ jsxs6(React3.Fragment, { children: [
589
- showSep && /* @__PURE__ */ jsx7(RailSeparator, {}),
590
- isMode ? /* @__PURE__ */ jsx7(
591
- RailModeButton,
592
- {
593
- mode: item.id,
594
- icon: item.icon,
595
- label: item.label,
596
- badge: item.badge
597
- }
598
- ) : /* @__PURE__ */ jsx7(Link, { href: item.href, to: item.href, children: /* @__PURE__ */ jsx7(
599
- RailButton,
601
+ const buildSidebarContent = React3.useCallback(
602
+ (showLabels) => /* @__PURE__ */ jsxs6(Fragment4, { children: [
603
+ /* @__PURE__ */ jsxs6(SidebarRail, { wide: showLabels, children: [
604
+ /* @__PURE__ */ jsx7(SidebarRailHeader, { children: /* @__PURE__ */ jsx7(Link, { href: "/", to: "/", className: "p-1 rounded-md transition-colors hover:bg-muted/50", children: /* @__PURE__ */ jsx7(Logo, { variant, size: "sm", iconOnly: true }) }) }),
605
+ /* @__PURE__ */ jsx7(SidebarRailNav, { children: navItems.map((item, i) => {
606
+ const isMode = modeSet.has(item.id);
607
+ const prevIsMode = i > 0 && modeSet.has(navItems[i - 1].id);
608
+ const showSep = i > 0 && isMode && !prevIsMode;
609
+ return /* @__PURE__ */ jsxs6(React3.Fragment, { children: [
610
+ showSep && /* @__PURE__ */ jsx7(RailSeparator, {}),
611
+ isMode ? /* @__PURE__ */ jsx7(
612
+ RailModeButton,
613
+ {
614
+ mode: item.id,
615
+ icon: item.icon,
616
+ label: item.label,
617
+ badge: item.badge,
618
+ showLabel: showLabels
619
+ }
620
+ ) : /* @__PURE__ */ jsx7(Link, { href: item.href, to: item.href, children: /* @__PURE__ */ jsx7(
621
+ RailButton,
622
+ {
623
+ icon: item.icon,
624
+ label: item.label,
625
+ isActive: activeNavId === item.id,
626
+ showLabel: showLabels
627
+ }
628
+ ) })
629
+ ] }, item.id);
630
+ }) }),
631
+ /* @__PURE__ */ jsxs6(SidebarRailFooter, { children: [
632
+ onSettingsClick ? /* @__PURE__ */ jsx7(RailButton, { icon: SettingsIconSmall, label: "Settings", onClick: onSettingsClick, showLabel: showLabels }) : /* @__PURE__ */ jsx7(Link, { href: settingsHref, to: settingsHref, children: /* @__PURE__ */ jsx7(RailButton, { icon: SettingsIconSmall, label: "Settings", showLabel: showLabels }) }),
633
+ railFooter,
634
+ /* @__PURE__ */ jsx7(RailSeparator, {}),
635
+ /* @__PURE__ */ jsx7(
636
+ ProfileAvatar,
600
637
  {
601
- icon: item.icon,
602
- label: item.label,
603
- isActive: activeNavId === item.id
638
+ user: sidebarUser,
639
+ isLoading,
640
+ onLogout,
641
+ onSettingsClick,
642
+ settingsHref,
643
+ LinkComponent,
644
+ children: profileMenuItems
604
645
  }
605
- ) })
606
- ] }, item.id);
607
- }) }),
608
- /* @__PURE__ */ jsxs6(SidebarRailFooter, { children: [
609
- onSettingsClick ? /* @__PURE__ */ jsx7(RailButton, { icon: SettingsIconSmall, label: "Settings", onClick: onSettingsClick }) : /* @__PURE__ */ jsx7(Link, { href: settingsHref, to: settingsHref, children: /* @__PURE__ */ jsx7(RailButton, { icon: SettingsIconSmall, label: "Settings" }) }),
610
- railFooter,
611
- /* @__PURE__ */ jsx7(RailSeparator, {}),
612
- /* @__PURE__ */ jsx7(
613
- ProfileAvatar,
614
- {
615
- user: sidebarUser,
616
- isLoading,
617
- onLogout,
618
- onSettingsClick,
619
- settingsHref,
620
- LinkComponent,
621
- children: profileMenuItems
622
- }
623
- )
646
+ )
647
+ ] })
648
+ ] }),
649
+ panels.length > 0 && /* @__PURE__ */ jsxs6(SidebarPanel, { children: [
650
+ /* @__PURE__ */ jsx7(SidebarPanelHeader, { title: activePanel?.title ?? mode }),
651
+ /* @__PURE__ */ jsx7(SidebarPanelContent, { children: activePanel?.content })
624
652
  ] })
625
653
  ] }),
626
- panels.length > 0 && /* @__PURE__ */ jsxs6(SidebarPanel, { children: [
627
- /* @__PURE__ */ jsx7(SidebarPanelHeader, { title: activePanel?.title ?? mode }),
628
- /* @__PURE__ */ jsx7(SidebarPanelContent, { children: activePanel?.content })
629
- ] })
630
- ] });
654
+ // biome-ignore lint/correctness/useExhaustiveDependencies: intentional only the inputs that actually affect the sidebar tree
655
+ [
656
+ Link,
657
+ variant,
658
+ navItems,
659
+ modeSet,
660
+ activeNavId,
661
+ onSettingsClick,
662
+ settingsHref,
663
+ railFooter,
664
+ sidebarUser,
665
+ isLoading,
666
+ onLogout,
667
+ LinkComponent,
668
+ profileMenuItems,
669
+ panels,
670
+ activePanel,
671
+ mode
672
+ ]
673
+ );
674
+ const sidebarContent = React3.useMemo(() => buildSidebarContent(false), [buildSidebarContent]);
675
+ const mobileSidebarContent = React3.useMemo(() => buildSidebarContent(true), [buildSidebarContent]);
631
676
  return /* @__PURE__ */ jsxs6("div", { className: cn("min-h-screen bg-background text-foreground", className), children: [
632
677
  /* @__PURE__ */ jsxs6(
633
678
  "nav",
@@ -638,19 +683,22 @@ function DashboardLayoutInner({
638
683
  width: hidden ? "100%" : `calc(100% - ${contentMargin}px)`
639
684
  },
640
685
  children: [
641
- /* @__PURE__ */ jsx7("div", { className: "flex items-center gap-8", children: topNavLinks && topNavLinks.length > 0 && /* @__PURE__ */ jsx7("div", { className: "hidden md:flex gap-6", children: topNavLinks.map((link) => /* @__PURE__ */ jsx7(
642
- Link,
643
- {
644
- href: link.href,
645
- to: link.href,
646
- className: cn(
647
- "transition-all duration-300 px-2 py-1 rounded",
648
- activeTopNavHref === link.href ? "text-foreground border-b-2 border-primary pb-1" : "text-muted-foreground hover:text-foreground hover:bg-muted/50"
649
- ),
650
- children: link.label
651
- },
652
- link.href
653
- )) }) }),
686
+ /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-8", children: [
687
+ /* @__PURE__ */ jsx7(Link, { href: "/", to: "/", className: "lg:hidden flex items-center p-1 rounded-md hover:bg-muted/50 transition-colors", children: /* @__PURE__ */ jsx7(Logo, { variant, size: "sm", iconOnly: true }) }),
688
+ topNavLinks && topNavLinks.length > 0 && /* @__PURE__ */ jsx7("div", { className: "hidden md:flex gap-6", children: topNavLinks.map((link) => /* @__PURE__ */ jsx7(
689
+ Link,
690
+ {
691
+ href: link.href,
692
+ to: link.href,
693
+ className: cn(
694
+ "transition-all duration-300 px-2 py-1 rounded",
695
+ activeTopNavHref === link.href ? "text-foreground border-b-2 border-primary pb-1" : "text-muted-foreground hover:text-foreground hover:bg-muted/50"
696
+ ),
697
+ children: link.label
698
+ },
699
+ link.href
700
+ )) })
701
+ ] }),
654
702
  /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-4", children: [
655
703
  onNewSandbox && /* @__PURE__ */ jsxs6(
656
704
  "button",
@@ -742,13 +790,14 @@ function DashboardLayoutInner({
742
790
  "fixed top-14 bottom-0 left-0 z-30 flex bg-background transition-transform duration-200 lg:hidden",
743
791
  mobileMenuOpen ? "translate-x-0" : "-translate-x-full"
744
792
  ),
745
- style: { width: panelOpen && hasPanels ? SIDEBAR_TOTAL_WIDTH : SIDEBAR_RAIL_WIDTH },
746
- children: sidebarContent
793
+ style: {
794
+ width: panelOpen && hasPanels ? SIDEBAR_MOBILE_WIDTH + SIDEBAR_PANEL_WIDTH : SIDEBAR_MOBILE_WIDTH
795
+ },
796
+ children: mobileSidebarContent
747
797
  }
748
798
  ),
749
799
  /* @__PURE__ */ jsx7(Sidebar, { className: cn("hidden lg:flex", sidebarClassName), children: sidebarContent }),
750
- /* @__PURE__ */ jsx7(SidebarContent, { className: cn("pt-16 px-8 pb-8 hidden lg:block bg-background", contentClassName), children }),
751
- /* @__PURE__ */ jsx7("main", { className: cn("pt-16 px-6 pb-8 min-h-screen lg:hidden bg-background", contentClassName), children }),
800
+ /* @__PURE__ */ jsx7(SidebarContent, { className: cn("pt-16 px-6 pb-8 lg:px-8 bg-background", contentClassName), children }),
752
801
  footer
753
802
  ] });
754
803
  }
@@ -1547,6 +1596,7 @@ export {
1547
1596
  SIDEBAR_RAIL_WIDTH,
1548
1597
  SIDEBAR_PANEL_WIDTH,
1549
1598
  SIDEBAR_TOTAL_WIDTH,
1599
+ SIDEBAR_MOBILE_WIDTH,
1550
1600
  SidebarProvider,
1551
1601
  useSidebar,
1552
1602
  Sidebar,
@@ -1658,7 +1658,7 @@ function CheckRow({ check }) {
1658
1658
 
1659
1659
  // src/workspace/task-board.tsx
1660
1660
  import { useMemo as useMemo5 } from "react";
1661
- import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
1661
+ import { Fragment as Fragment2, jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
1662
1662
  function TaskBoard({
1663
1663
  items,
1664
1664
  columns,
@@ -1669,7 +1669,9 @@ function TaskBoard({
1669
1669
  renderColumnAction,
1670
1670
  renderBadge,
1671
1671
  columnEmptyState,
1672
- header
1672
+ header,
1673
+ renderColumnBody,
1674
+ renderItemWrapper
1673
1675
  }) {
1674
1676
  const grouped = useMemo5(() => {
1675
1677
  const map = /* @__PURE__ */ new Map();
@@ -1685,6 +1687,40 @@ function TaskBoard({
1685
1687
  header,
1686
1688
  /* @__PURE__ */ jsx11("div", { className: "flex flex-1 gap-3 overflow-x-auto p-4", children: columns.map((col) => {
1687
1689
  const colItems = grouped.get(col.id) ?? [];
1690
+ const itemCards = /* @__PURE__ */ jsxs11(Fragment2, { children: [
1691
+ colItems.length === 0 && columnEmptyState,
1692
+ colItems.map((item, index) => {
1693
+ const card = /* @__PURE__ */ jsxs11(
1694
+ "button",
1695
+ {
1696
+ type: "button",
1697
+ onClick: () => onClickItem?.(item),
1698
+ className: "group w-full rounded-lg border border-border bg-card p-3 text-left transition-colors hover:border-accent/50",
1699
+ children: [
1700
+ /* @__PURE__ */ jsx11("p", { className: "text-sm font-medium text-foreground", children: item.title }),
1701
+ item.description && /* @__PURE__ */ jsx11("p", { className: "mt-1 text-xs text-muted-foreground line-clamp-2", children: item.description }),
1702
+ (item.priority || item.tags?.length) && /* @__PURE__ */ jsxs11("div", { className: "mt-2 flex flex-wrap gap-1.5", children: [
1703
+ item.priority && (renderBadge ? renderBadge(item.priority, "priority") : /* @__PURE__ */ jsx11("span", { className: "rounded-full border border-border px-2 py-0.5 text-[10px] font-medium text-muted-foreground", children: item.priority })),
1704
+ item.tags?.map(
1705
+ (tag) => renderBadge ? /* @__PURE__ */ jsx11("span", { children: renderBadge(tag, "tag") }, tag) : /* @__PURE__ */ jsx11(
1706
+ "span",
1707
+ {
1708
+ className: "rounded-full border border-border px-2 py-0.5 text-[10px] text-muted-foreground",
1709
+ children: tag
1710
+ },
1711
+ tag
1712
+ )
1713
+ )
1714
+ ] }),
1715
+ renderItemMeta?.(item)
1716
+ ]
1717
+ },
1718
+ item.id
1719
+ );
1720
+ return renderItemWrapper ? /* @__PURE__ */ jsx11("span", { children: renderItemWrapper(item, index, card) }, item.id) : card;
1721
+ })
1722
+ ] });
1723
+ const columnBody = /* @__PURE__ */ jsx11("div", { className: "flex flex-1 flex-col gap-2 overflow-y-auto px-2 pb-2 min-h-[80px]", children: renderColumnBody ? renderColumnBody(col.id, itemCards, colItems) : itemCards });
1688
1724
  return /* @__PURE__ */ jsxs11(
1689
1725
  "div",
1690
1726
  {
@@ -1700,36 +1736,7 @@ function TaskBoard({
1700
1736
  ] }),
1701
1737
  renderColumnAction?.(col)
1702
1738
  ] }),
1703
- /* @__PURE__ */ jsxs11("div", { className: "flex flex-1 flex-col gap-2 overflow-y-auto px-2 pb-2 min-h-[80px]", children: [
1704
- colItems.length === 0 && columnEmptyState,
1705
- colItems.map((item) => /* @__PURE__ */ jsxs11(
1706
- "button",
1707
- {
1708
- type: "button",
1709
- onClick: () => onClickItem?.(item),
1710
- className: "group w-full rounded-lg border border-border bg-card p-3 text-left transition-colors hover:border-accent/50",
1711
- children: [
1712
- /* @__PURE__ */ jsx11("p", { className: "text-sm font-medium text-foreground", children: item.title }),
1713
- item.description && /* @__PURE__ */ jsx11("p", { className: "mt-1 text-xs text-muted-foreground line-clamp-2", children: item.description }),
1714
- (item.priority || item.tags?.length) && /* @__PURE__ */ jsxs11("div", { className: "mt-2 flex flex-wrap gap-1.5", children: [
1715
- item.priority && (renderBadge ? renderBadge(item.priority, "priority") : /* @__PURE__ */ jsx11("span", { className: "rounded-full border border-border px-2 py-0.5 text-[10px] font-medium text-muted-foreground", children: item.priority })),
1716
- item.tags?.map(
1717
- (tag) => renderBadge ? /* @__PURE__ */ jsx11("span", { children: renderBadge(tag, "tag") }, tag) : /* @__PURE__ */ jsx11(
1718
- "span",
1719
- {
1720
- className: "rounded-full border border-border px-2 py-0.5 text-[10px] text-muted-foreground",
1721
- children: tag
1722
- },
1723
- tag
1724
- )
1725
- )
1726
- ] }),
1727
- renderItemMeta?.(item)
1728
- ]
1729
- },
1730
- item.id
1731
- ))
1732
- ] })
1739
+ columnBody
1733
1740
  ]
1734
1741
  },
1735
1742
  col.id
@@ -1740,7 +1747,7 @@ function TaskBoard({
1740
1747
 
1741
1748
  // src/workspace/calendar-view.tsx
1742
1749
  import { useState as useState6, useMemo as useMemo6 } from "react";
1743
- import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
1750
+ import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
1744
1751
  function toDateKey(d) {
1745
1752
  return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
1746
1753
  }
@@ -1929,7 +1936,7 @@ function CalendarView({
1929
1936
  );
1930
1937
  }) })
1931
1938
  ] }),
1932
- showDayPanel && /* @__PURE__ */ jsx12("div", { className: "w-80 shrink-0 flex flex-col overflow-hidden", children: renderDayDetail ? renderDayDetail(selectedDay ?? todayKey, selectedDayEvents) : /* @__PURE__ */ jsxs12(Fragment2, { children: [
1939
+ showDayPanel && /* @__PURE__ */ jsx12("div", { className: "w-80 shrink-0 flex flex-col overflow-hidden", children: renderDayDetail ? renderDayDetail(selectedDay ?? todayKey, selectedDayEvents) : /* @__PURE__ */ jsxs12(Fragment3, { children: [
1933
1940
  /* @__PURE__ */ jsxs12("div", { className: "px-4 py-3 border-b border-border shrink-0", children: [
1934
1941
  /* @__PURE__ */ jsx12("h3", { className: "text-sm font-semibold text-foreground", children: selectedDay === todayKey ? "Today" : selectedDay ? (/* @__PURE__ */ new Date(selectedDay + "T00:00:00")).toLocaleDateString(
1935
1942
  "en-US",
@@ -1,4 +1,4 @@
1
- export { B as Backend, a as BackendSelector, b as BackendSelectorProps, C as ClusterStatusBar, c as ClusterStatusBarProps, d as ClusterStatusItem, e as CreditBalance, f as CreditBalanceProps, D as DashboardLayout, g as DashboardLayoutProps, ag as DashboardProfile, h as DashboardUser, I as Invoice, i as InvoiceTable, j as InvoiceTableProps, N as NavItem, k as NewSandboxCard, l as NewSandboxCardProps, m as PlanCardData, n as PlanCards, o as PlanCardsProps, ah as PlanFeature, p as ProductVariant, q as ProfileAvatar, r as ProfileAvatarProps, s as ProfileComparison, t as ProfileComparisonProps, u as ProfileSelector, v as ProfileSelectorProps, R as RailButton, w as RailButtonProps, x as RailModeButton, y as RailModeButtonProps, z as RailSeparator, A as RailSeparatorProps, E as ResourceMeter, F as ResourceMeterProps, S as SIDEBAR_PANEL_WIDTH, G as SIDEBAR_RAIL_WIDTH, H as SIDEBAR_TOTAL_WIDTH, J as SandboxCard, K as SandboxCardData, L as SandboxCardProps, M as SandboxStatus, O as SandboxTable, Q as SandboxTableProps, T as Sidebar, U as SidebarContent, V as SidebarContentProps, W as SidebarPanel, X as SidebarPanelContent, Y as SidebarPanelContentProps, Z as SidebarPanelHeader, _ as SidebarPanelHeaderProps, $ as SidebarPanelProps, a0 as SidebarProps, a1 as SidebarProvider, a2 as SidebarProviderProps, a3 as SidebarRail, a4 as SidebarRailFooter, a5 as SidebarRailFooterProps, a6 as SidebarRailHeader, a7 as SidebarRailHeaderProps, a8 as SidebarRailNav, a9 as SidebarRailNavProps, aa as SidebarRailProps, ab as SidebarUser, ai as Variant, ad as VariantList, ae as VariantListProps, aj as VariantOutcome, ak as VariantStatus, af as useSidebar } from './variant-list-BNwUOSgz.js';
1
+ export { B as Backend, a as BackendSelector, b as BackendSelectorProps, C as ClusterStatusBar, c as ClusterStatusBarProps, d as ClusterStatusItem, e as CreditBalance, f as CreditBalanceProps, D as DashboardLayout, g as DashboardLayoutProps, ah as DashboardProfile, h as DashboardUser, I as Invoice, i as InvoiceTable, j as InvoiceTableProps, N as NavItem, k as NewSandboxCard, l as NewSandboxCardProps, m as PlanCardData, n as PlanCards, o as PlanCardsProps, ai as PlanFeature, p as ProductVariant, q as ProfileAvatar, r as ProfileAvatarProps, s as ProfileComparison, t as ProfileComparisonProps, u as ProfileSelector, v as ProfileSelectorProps, R as RailButton, w as RailButtonProps, x as RailModeButton, y as RailModeButtonProps, z as RailSeparator, A as RailSeparatorProps, E as ResourceMeter, F as ResourceMeterProps, S as SIDEBAR_MOBILE_WIDTH, G as SIDEBAR_PANEL_WIDTH, H as SIDEBAR_RAIL_WIDTH, J as SIDEBAR_TOTAL_WIDTH, K as SandboxCard, L as SandboxCardData, M as SandboxCardProps, O as SandboxStatus, Q as SandboxTable, T as SandboxTableProps, U as Sidebar, V as SidebarContent, W as SidebarContentProps, X as SidebarPanel, Y as SidebarPanelContent, Z as SidebarPanelContentProps, _ as SidebarPanelHeader, $ as SidebarPanelHeaderProps, a0 as SidebarPanelProps, a1 as SidebarProps, a2 as SidebarProvider, a3 as SidebarProviderProps, a4 as SidebarRail, a5 as SidebarRailFooter, a6 as SidebarRailFooterProps, a7 as SidebarRailHeader, a8 as SidebarRailHeaderProps, a9 as SidebarRailNav, aa as SidebarRailNavProps, ab as SidebarRailProps, ac as SidebarUser, aj as Variant, ae as VariantList, af as VariantListProps, ak as VariantOutcome, al as VariantStatus, ag as useSidebar } from './variant-list-DHP2OXFE.js';
2
2
  export { a as BillingBalance, c as BillingDashboard, d as BillingDashboardProps, B as BillingSubscription, b as BillingUsage, e as PricingPage, f as PricingPageProps, P as PricingTier, g as UsageChart, h as UsageChartProps, U as UsageDataPoint } from './usage-chart-SSiOgeQI.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  export { a as TemplateCard, T as TemplateCardData, b as TemplateCardProps } from './template-card-BAtvcAkU.js';
package/dist/dashboard.js CHANGED
@@ -17,6 +17,7 @@ import {
17
17
  RailModeButton,
18
18
  RailSeparator,
19
19
  ResourceMeter,
20
+ SIDEBAR_MOBILE_WIDTH,
20
21
  SIDEBAR_PANEL_WIDTH,
21
22
  SIDEBAR_RAIL_WIDTH,
22
23
  SIDEBAR_TOTAL_WIDTH,
@@ -34,7 +35,7 @@ import {
34
35
  SidebarRailNav,
35
36
  VariantList,
36
37
  useSidebar
37
- } from "./chunk-2XCOGNZP.js";
38
+ } from "./chunk-7LBHRASD.js";
38
39
  import {
39
40
  BillingDashboard,
40
41
  PricingPage,
@@ -944,6 +945,7 @@ export {
944
945
  RailModeButton,
945
946
  RailSeparator,
946
947
  ResourceMeter,
948
+ SIDEBAR_MOBILE_WIDTH,
947
949
  SIDEBAR_PANEL_WIDTH,
948
950
  SIDEBAR_RAIL_WIDTH,
949
951
  SIDEBAR_TOTAL_WIDTH,
package/dist/globals.css CHANGED
@@ -705,6 +705,9 @@
705
705
  .-top-1 {
706
706
  top: calc(var(--spacing) * -1);
707
707
  }
708
+ .-top-1\.5 {
709
+ top: calc(var(--spacing) * -1.5);
710
+ }
708
711
  .-top-4 {
709
712
  top: calc(var(--spacing) * -4);
710
713
  }
@@ -744,6 +747,9 @@
744
747
  .-right-1 {
745
748
  right: calc(var(--spacing) * -1);
746
749
  }
750
+ .-right-1\.5 {
751
+ right: calc(var(--spacing) * -1.5);
752
+ }
747
753
  .right-0 {
748
754
  right: calc(var(--spacing) * 0);
749
755
  }
@@ -1164,9 +1170,6 @@
1164
1170
  .min-h-\[200px\] {
1165
1171
  min-height: 200px;
1166
1172
  }
1167
- .min-h-\[240px\] {
1168
- min-height: 240px;
1169
- }
1170
1173
  .min-h-full {
1171
1174
  min-height: 100%;
1172
1175
  }
@@ -1631,6 +1634,9 @@
1631
1634
  .justify-end {
1632
1635
  justify-content: flex-end;
1633
1636
  }
1637
+ .justify-start {
1638
+ justify-content: flex-start;
1639
+ }
1634
1640
  .gap-0\.5 {
1635
1641
  gap: calc(var(--spacing) * 0.5);
1636
1642
  }
@@ -2116,30 +2122,18 @@
2116
2122
  border-color: color-mix(in oklab, var(--color-yellow-500) 30%, transparent);
2117
2123
  }
2118
2124
  }
2119
- .border-t-blue-500 {
2120
- border-top-color: var(--color-blue-500);
2121
- }
2122
2125
  .border-t-transparent {
2123
2126
  border-top-color: transparent;
2124
2127
  }
2125
2128
  .bg-\[\#8E59FF\] {
2126
2129
  background-color: #8E59FF;
2127
2130
  }
2128
- .bg-\[\#27c93f\]\/80 {
2129
- background-color: color-mix(in oklab, #27c93f 80%, transparent);
2130
- }
2131
2131
  .bg-\[\#FEBC2E\] {
2132
2132
  background-color: #FEBC2E;
2133
2133
  }
2134
2134
  .bg-\[\#FF5F57\] {
2135
2135
  background-color: #FF5F57;
2136
2136
  }
2137
- .bg-\[\#ff5f56\]\/80 {
2138
- background-color: color-mix(in oklab, #ff5f56 80%, transparent);
2139
- }
2140
- .bg-\[\#ffbd2e\]\/80 {
2141
- background-color: color-mix(in oklab, #ffbd2e 80%, transparent);
2142
- }
2143
2137
  .bg-\[color\:color-mix\(in_srgb\,var\(--bg-card\)_94\%\,transparent\)\] {
2144
2138
  background-color: var(--bg-card);
2145
2139
  @supports (color: color-mix(in lab, red, red)) {
@@ -2409,9 +2403,6 @@
2409
2403
  .bg-\[linear-gradient\(180deg\,rgba\(255\,255\,255\,0\.04\)\,transparent\)\] {
2410
2404
  background-image: linear-gradient(180deg,rgba(255,255,255,0.04),transparent);
2411
2405
  }
2412
- .bg-\[radial-gradient\(circle_at_top\,rgba\(173\,163\,255\,0\.05\)_0\,transparent_100\%\)\] {
2413
- background-image: radial-gradient(circle at top,rgba(173,163,255,0.05) 0,transparent 100%);
2414
- }
2415
2406
  .from-white\/5 {
2416
2407
  --tw-gradient-from: color-mix(in srgb, #fff 5%, transparent);
2417
2408
  @supports (color: color-mix(in lab, red, red)) {
@@ -2651,9 +2642,6 @@
2651
2642
  .pl-2 {
2652
2643
  padding-left: calc(var(--spacing) * 2);
2653
2644
  }
2654
- .pl-3 {
2655
- padding-left: calc(var(--spacing) * 3);
2656
- }
2657
2645
  .pl-4 {
2658
2646
  padding-left: calc(var(--spacing) * 4);
2659
2647
  }
@@ -4186,9 +4174,9 @@
4186
4174
  grid-column: span 1 / span 1;
4187
4175
  }
4188
4176
  }
4189
- .lg\:block {
4177
+ .lg\:ml-\[var\(--sb-content-margin\,0px\)\] {
4190
4178
  @media (width >= 64rem) {
4191
- display: block;
4179
+ margin-left: var(--sb-content-margin,0px);
4192
4180
  }
4193
4181
  }
4194
4182
  .lg\:flex {
@@ -4226,6 +4214,11 @@
4226
4214
  padding: calc(var(--spacing) * 4);
4227
4215
  }
4228
4216
  }
4217
+ .lg\:px-8 {
4218
+ @media (width >= 64rem) {
4219
+ padding-inline: calc(var(--spacing) * 8);
4220
+ }
4221
+ }
4229
4222
  .xl\:col-span-4 {
4230
4223
  @media (width >= 80rem) {
4231
4224
  grid-column: span 4 / span 4;
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ import { b as ToolPart } from './parts-CyGkM6Fp.js';
15
15
  export { R as ReasoningPart, S as SessionMessage, a as SessionPart, T as TextPart, c as ToolState, d as ToolStatus, e as ToolTime } from './parts-CyGkM6Fp.js';
16
16
  export { F as FileNode, a as FileTabData, b as FileTabs, c as FileTabsProps, d as FileTree, e as FileTreeProps, f as FileTreeVisibilityOptions, g as filterFileTree } from './file-tabs-BLfxfmAH.js';
17
17
  export { FileArtifactPane, FileArtifactPaneProps, FilePreview, FilePreviewProps } from './files.js';
18
- export { B as Backend, a as BackendSelector, b as BackendSelectorProps, C as ClusterStatusBar, c as ClusterStatusBarProps, d as ClusterStatusItem, e as CreditBalance, f as CreditBalanceProps, D as DashboardLayout, g as DashboardLayoutProps, h as DashboardUser, I as Invoice, i as InvoiceTable, j as InvoiceTableProps, N as NavItem, k as NewSandboxCard, l as NewSandboxCardProps, P as PanelConfig, m as PlanCardData, n as PlanCards, o as PlanCardsProps, p as ProductVariant, q as ProfileAvatar, r as ProfileAvatarProps, s as ProfileComparison, t as ProfileComparisonProps, u as ProfileSelector, v as ProfileSelectorProps, R as RailButton, w as RailButtonProps, x as RailModeButton, y as RailModeButtonProps, z as RailSeparator, A as RailSeparatorProps, E as ResourceMeter, F as ResourceMeterProps, S as SIDEBAR_PANEL_WIDTH, G as SIDEBAR_RAIL_WIDTH, H as SIDEBAR_TOTAL_WIDTH, J as SandboxCard, K as SandboxCardData, L as SandboxCardProps, M as SandboxStatus, O as SandboxTable, Q as SandboxTableProps, T as Sidebar, U as SidebarContent, V as SidebarContentProps, W as SidebarPanel, X as SidebarPanelContent, Y as SidebarPanelContentProps, Z as SidebarPanelHeader, _ as SidebarPanelHeaderProps, $ as SidebarPanelProps, a0 as SidebarProps, a1 as SidebarProvider, a2 as SidebarProviderProps, a3 as SidebarRail, a4 as SidebarRailFooter, a5 as SidebarRailFooterProps, a6 as SidebarRailHeader, a7 as SidebarRailHeaderProps, a8 as SidebarRailNav, a9 as SidebarRailNavProps, aa as SidebarRailProps, ab as SidebarUser, ac as TopNavLink, ad as VariantList, ae as VariantListProps, af as useSidebar } from './variant-list-BNwUOSgz.js';
18
+ export { B as Backend, a as BackendSelector, b as BackendSelectorProps, C as ClusterStatusBar, c as ClusterStatusBarProps, d as ClusterStatusItem, e as CreditBalance, f as CreditBalanceProps, D as DashboardLayout, g as DashboardLayoutProps, h as DashboardUser, I as Invoice, i as InvoiceTable, j as InvoiceTableProps, N as NavItem, k as NewSandboxCard, l as NewSandboxCardProps, P as PanelConfig, m as PlanCardData, n as PlanCards, o as PlanCardsProps, p as ProductVariant, q as ProfileAvatar, r as ProfileAvatarProps, s as ProfileComparison, t as ProfileComparisonProps, u as ProfileSelector, v as ProfileSelectorProps, R as RailButton, w as RailButtonProps, x as RailModeButton, y as RailModeButtonProps, z as RailSeparator, A as RailSeparatorProps, E as ResourceMeter, F as ResourceMeterProps, S as SIDEBAR_MOBILE_WIDTH, G as SIDEBAR_PANEL_WIDTH, H as SIDEBAR_RAIL_WIDTH, J as SIDEBAR_TOTAL_WIDTH, K as SandboxCard, L as SandboxCardData, M as SandboxCardProps, O as SandboxStatus, Q as SandboxTable, T as SandboxTableProps, U as Sidebar, V as SidebarContent, W as SidebarContentProps, X as SidebarPanel, Y as SidebarPanelContent, Z as SidebarPanelContentProps, _ as SidebarPanelHeader, $ as SidebarPanelHeaderProps, a0 as SidebarPanelProps, a1 as SidebarProps, a2 as SidebarProvider, a3 as SidebarProviderProps, a4 as SidebarRail, a5 as SidebarRailFooter, a6 as SidebarRailFooterProps, a7 as SidebarRailHeader, a8 as SidebarRailHeaderProps, a9 as SidebarRailNav, aa as SidebarRailNavProps, ab as SidebarRailProps, ac as SidebarUser, ad as TopNavLink, ae as VariantList, af as VariantListProps, ag as useSidebar } from './variant-list-DHP2OXFE.js';
19
19
  export { c as BillingDashboard, d as BillingDashboardProps, e as PricingCards, f as PricingPageProps, g as UsageChart, h as UsageChartProps, U as UsageDataPoint } from './usage-chart-SSiOgeQI.js';
20
20
  export { AuthHeader, GitHubLoginButton, LoginLayout, LoginLayoutProps, UserMenu } from './auth.js';
21
21
  export { CodeBlock, CodeBlock as CodeBlockDisplay, CopyButton, Markdown, MarkdownProps } from './markdown.js';
package/dist/index.js CHANGED
@@ -104,7 +104,7 @@ import {
104
104
  TaskBoard,
105
105
  TerminalPanel,
106
106
  WorkspaceLayout
107
- } from "./chunk-A5ALUT2B.js";
107
+ } from "./chunk-HEXQVHXJ.js";
108
108
  import "./chunk-OEX7NZE3.js";
109
109
  import {
110
110
  EmptyState,
@@ -195,6 +195,7 @@ import {
195
195
  RailModeButton,
196
196
  RailSeparator,
197
197
  ResourceMeter,
198
+ SIDEBAR_MOBILE_WIDTH,
198
199
  SIDEBAR_PANEL_WIDTH,
199
200
  SIDEBAR_RAIL_WIDTH,
200
201
  SIDEBAR_TOTAL_WIDTH,
@@ -212,7 +213,7 @@ import {
212
213
  SidebarRailNav,
213
214
  VariantList,
214
215
  useSidebar
215
- } from "./chunk-2XCOGNZP.js";
216
+ } from "./chunk-7LBHRASD.js";
216
217
  import {
217
218
  BillingDashboard,
218
219
  PricingPage,
@@ -449,6 +450,7 @@ export {
449
450
  ResourceMeter,
450
451
  RunGroup,
451
452
  RuntimePane,
453
+ SIDEBAR_MOBILE_WIDTH,
452
454
  SIDEBAR_PANEL_WIDTH,
453
455
  SIDEBAR_RAIL_WIDTH,
454
456
  SIDEBAR_TOTAL_WIDTH,