@tangle-network/sandbox-ui 0.49.0 → 0.50.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.
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-3J6FG3FJ.js";
4
4
  import {
5
5
  PortsList
6
- } from "./chunk-3WUSPCPC.js";
6
+ } from "./chunk-RT4MLYYM.js";
7
7
  import {
8
8
  TerminalView
9
9
  } from "./chunk-VIREDUBF.js";
@@ -1516,7 +1516,7 @@ function PlanCards({ plans, className }) {
1516
1516
 
1517
1517
  // src/dashboard/dashboard-layout.tsx
1518
1518
  import * as React7 from "react";
1519
- import { Plus as Plus2, Bell } from "lucide-react";
1519
+ import { Plus as Plus2, Bell, ChevronsLeft, ChevronsRight } from "lucide-react";
1520
1520
  import { Fragment as Fragment9, jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
1521
1521
  function SettingsIconSmall({ className }) {
1522
1522
  return /* @__PURE__ */ jsxs13("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
@@ -1571,6 +1571,7 @@ function DashboardLayoutInner({
1571
1571
  contentClassName,
1572
1572
  topNavLinks,
1573
1573
  activeTopNavHref,
1574
+ topBarLeading,
1574
1575
  LinkComponent = DefaultLink2,
1575
1576
  logoHref = "/",
1576
1577
  onLogoClick,
@@ -1621,16 +1622,29 @@ function DashboardLayoutInner({
1621
1622
  className: "p-1 rounded-md transition-colors hover:bg-surface-container-high",
1622
1623
  children: /* @__PURE__ */ jsx14(Logo, { variant, size: "sm", iconOnly: true })
1623
1624
  }
1624
- ) : labeledRail ? /* @__PURE__ */ jsx14(
1625
- "button",
1626
- {
1627
- type: "button",
1628
- onClick: toggleRail,
1629
- "aria-label": railCollapsed ? "Expand navigation" : "Collapse navigation",
1630
- "aria-expanded": !railCollapsed,
1631
- className: "p-1 rounded-md transition-colors hover:bg-surface-container-high",
1632
- children: /* @__PURE__ */ jsx14(Logo, { variant, size: "sm", iconOnly: true })
1633
- }
1625
+ ) : allowCollapse ? (
1626
+ // The logo IS the collapse/expand control on the desktop rail
1627
+ // (allowCollapse). The mobile drawer never collapses, so it falls
1628
+ // through to the plain logo link. Expanded: full logotype with a
1629
+ // collapse chevron that fades in on hover. Collapsed: the mark,
1630
+ // with an expand chevron overlay on hover.
1631
+ /* @__PURE__ */ jsxs13(
1632
+ "button",
1633
+ {
1634
+ type: "button",
1635
+ onClick: toggleRail,
1636
+ "aria-label": railCollapsed ? "Expand navigation" : "Collapse navigation",
1637
+ "aria-expanded": !railCollapsed,
1638
+ className: cn(
1639
+ "group/logo relative flex items-center gap-2 rounded-md p-1 transition-colors hover:bg-surface-container-high",
1640
+ showLabels && "w-full"
1641
+ ),
1642
+ children: [
1643
+ /* @__PURE__ */ jsx14(Logo, { variant, size: "sm", iconOnly: !showLabels }),
1644
+ showLabels ? /* @__PURE__ */ jsx14(ChevronsLeft, { className: "ml-auto h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover/logo:opacity-100" }) : /* @__PURE__ */ jsx14("span", { className: "absolute inset-0 flex items-center justify-center rounded-md bg-surface-container-high opacity-0 transition-opacity group-hover/logo:opacity-100", children: /* @__PURE__ */ jsx14(ChevronsRight, { className: "h-4 w-4 text-foreground" }) })
1645
+ ]
1646
+ }
1647
+ )
1634
1648
  ) : /* @__PURE__ */ jsx14(
1635
1649
  Link,
1636
1650
  {
@@ -1674,18 +1688,39 @@ function DashboardLayoutInner({
1674
1688
  ] }, item.id);
1675
1689
  }) }),
1676
1690
  /* @__PURE__ */ jsxs13(SidebarRailFooter, { className: cn(showLabels && "items-stretch px-2"), children: [
1677
- allowCollapse && /* @__PURE__ */ jsx14(
1678
- RailCollapseToggle,
1679
- {
1680
- collapsed: railCollapsed,
1681
- showLabel: showLabels,
1682
- onToggle: toggleRail
1683
- }
1684
- ),
1685
1691
  onSettingsClick ? /* @__PURE__ */ jsx14(RailButton, { icon: SettingsIconSmall, label: "Settings", onClick: onSettingsClick, showLabel: showLabels }) : /* @__PURE__ */ jsx14(RailButton, { icon: SettingsIconSmall, label: "Settings", showLabel: showLabels, asChild: true, children: /* @__PURE__ */ jsx14(Link, { href: settingsHref, to: settingsHref }) }),
1686
- railFooter,
1687
1692
  /* @__PURE__ */ jsx14(RailSeparator, { className: showLabels ? "w-full" : void 0 }),
1688
- /* @__PURE__ */ jsx14(
1693
+ railFooter !== void 0 ? showLabels ? /* @__PURE__ */ jsxs13("div", { className: "flex w-full items-center gap-1", children: [
1694
+ /* @__PURE__ */ jsx14("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx14(
1695
+ ProfileAvatar,
1696
+ {
1697
+ user: sidebarUser,
1698
+ isLoading,
1699
+ onLogout,
1700
+ onSettingsClick,
1701
+ settingsHref,
1702
+ showDetails: showLabels,
1703
+ LinkComponent,
1704
+ children: profileMenuItems
1705
+ }
1706
+ ) }),
1707
+ /* @__PURE__ */ jsx14("div", { className: "shrink-0", children: railFooter })
1708
+ ] }) : /* @__PURE__ */ jsxs13("div", { className: "flex flex-col items-center gap-1", children: [
1709
+ railFooter,
1710
+ /* @__PURE__ */ jsx14(
1711
+ ProfileAvatar,
1712
+ {
1713
+ user: sidebarUser,
1714
+ isLoading,
1715
+ onLogout,
1716
+ onSettingsClick,
1717
+ settingsHref,
1718
+ showDetails: showLabels,
1719
+ LinkComponent,
1720
+ children: profileMenuItems
1721
+ }
1722
+ )
1723
+ ] }) : /* @__PURE__ */ jsx14(
1689
1724
  ProfileAvatar,
1690
1725
  {
1691
1726
  user: sidebarUser,
@@ -1748,6 +1783,7 @@ function DashboardLayoutInner({
1748
1783
  children: [
1749
1784
  /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-8", children: [
1750
1785
  /* @__PURE__ */ jsx14(Link, { href: logoHref, to: logoHref, className: "lg:hidden flex items-center p-1 rounded-md hover:bg-surface-container-high transition-colors", children: /* @__PURE__ */ jsx14(Logo, { variant, size: "sm", iconOnly: true }) }),
1786
+ topBarLeading,
1751
1787
  topNavLinks && topNavLinks.length > 0 && /* @__PURE__ */ jsx14("div", { className: "hidden md:flex gap-6", children: topNavLinks.map((link) => /* @__PURE__ */ jsx14(
1752
1788
  Link,
1753
1789
  {
@@ -688,6 +688,9 @@ interface DashboardLayoutProps {
688
688
  contentClassName?: string;
689
689
  topNavLinks?: TopNavLink[];
690
690
  activeTopNavHref?: string;
691
+ /** Arbitrary content rendered at the leading (left) edge of the top bar —
692
+ * e.g. a workspace/team switcher — so consumers don't need a second bar. */
693
+ topBarLeading?: React.ReactNode;
691
694
  LinkComponent?: React.ComponentType<any>;
692
695
  /**
693
696
  * Where the in-app logo links. Defaults to "/" (backward compatible);
package/dist/dashboard.js CHANGED
@@ -52,7 +52,7 @@ import {
52
52
  canAdminSandbox,
53
53
  parseInsufficientBalance,
54
54
  useSidebar
55
- } from "./chunk-3WUSPCPC.js";
55
+ } from "./chunk-RT4MLYYM.js";
56
56
  import {
57
57
  BillingDashboard,
58
58
  InfoPanel,
package/dist/globals.css CHANGED
@@ -392,6 +392,9 @@
392
392
  .bottom-1 {
393
393
  bottom: calc(var(--spacing) * 1);
394
394
  }
395
+ .bottom-1\.5 {
396
+ bottom: calc(var(--spacing) * 1.5);
397
+ }
395
398
  .bottom-2 {
396
399
  bottom: calc(var(--spacing) * 2);
397
400
  }
@@ -437,6 +440,9 @@
437
440
  .z-10 {
438
441
  z-index: 10;
439
442
  }
443
+ .z-20 {
444
+ z-index: 20;
445
+ }
440
446
  .z-30 {
441
447
  z-index: 30;
442
448
  }
@@ -3626,6 +3632,11 @@
3626
3632
  rotate: 180deg;
3627
3633
  }
3628
3634
  }
3635
+ .group-focus-within\:opacity-100 {
3636
+ &:is(:where(.group):focus-within *) {
3637
+ opacity: 100%;
3638
+ }
3639
+ }
3629
3640
  .group-focus-within\/tip\:translate-x-0 {
3630
3641
  &:is(:where(.group\/tip):focus-within *) {
3631
3642
  --tw-translate-x: calc(var(--spacing) * 0);
@@ -3676,6 +3687,13 @@
3676
3687
  }
3677
3688
  }
3678
3689
  }
3690
+ .group-hover\/logo\:opacity-100 {
3691
+ &:is(:where(.group\/logo):hover *) {
3692
+ @media (hover: hover) {
3693
+ opacity: 100%;
3694
+ }
3695
+ }
3696
+ }
3679
3697
  .group-hover\/tip\:translate-x-0 {
3680
3698
  &:is(:where(.group\/tip):hover *) {
3681
3699
  @media (hover: hover) {
package/dist/index.js CHANGED
@@ -148,7 +148,7 @@ import {
148
148
  buildUnifiedPatch,
149
149
  computeDiffStats,
150
150
  resolveLanguage
151
- } from "./chunk-4HLWA2VN.js";
151
+ } from "./chunk-MGIOO3RL.js";
152
152
  import {
153
153
  FileArtifactPane,
154
154
  FilePreview,
@@ -211,7 +211,7 @@ import {
211
211
  canAdminSandbox,
212
212
  parseInsufficientBalance,
213
213
  useSidebar
214
- } from "./chunk-3WUSPCPC.js";
214
+ } from "./chunk-RT4MLYYM.js";
215
215
  import {
216
216
  BillingDashboard,
217
217
  InfoPanel,
@@ -60,6 +60,24 @@ interface IntegrationsPanelProps {
60
60
  * thrown error inline.
61
61
  */
62
62
  onDisconnect: (connectionId: string) => void | Promise<void>;
63
+ /**
64
+ * Resolver for a connected app's management page URL. When it returns a URL,
65
+ * the connected tile's body and the overflow menu's "Manage" item become a
66
+ * real link opened in a new tab (so cmd/middle-click and "open in new tab"
67
+ * work). Return undefined to omit Manage for a given connection. Preferred
68
+ * over `onManage` — only fall back to the callback when the URL must be minted
69
+ * imperatively on click (e.g. a one-time token).
70
+ */
71
+ getManageHref?: (connection: IntegrationConnection) => string | undefined;
72
+ /**
73
+ * Imperative fallback for opening a connected app's management page, used only
74
+ * when `getManageHref` is not supplied (or returns undefined). The consumer is
75
+ * responsible for opening the page (e.g. `window.open(...)`).
76
+ */
77
+ onManage?: (input: {
78
+ connectionId: string;
79
+ providerId: string;
80
+ }) => void | Promise<void>;
63
81
  /** Empty-state message when the catalog hasn't loaded any providers. */
64
82
  emptyCatalogLabel?: string;
65
83
  /**
@@ -72,7 +90,7 @@ interface IntegrationsPanelProps {
72
90
  defaultSort?: IntegrationSort;
73
91
  className?: string;
74
92
  }
75
- declare function IntegrationsPanel({ catalog, connections, healthByConnectionId, isLoading, error, onConnect, onDisconnect, emptyCatalogLabel, featuredIds, defaultSort, className, }: IntegrationsPanelProps): react_jsx_runtime.JSX.Element;
93
+ declare function IntegrationsPanel({ catalog, connections, healthByConnectionId, isLoading, error, onConnect, onDisconnect, getManageHref, onManage, emptyCatalogLabel, featuredIds, defaultSort, className, }: IntegrationsPanelProps): react_jsx_runtime.JSX.Element;
76
94
 
77
95
  /**
78
96
  * Endpoint contract expected on the consumer app's server (which
@@ -16,10 +16,15 @@ import {
16
16
  DialogFooter,
17
17
  DialogHeader,
18
18
  DialogTitle,
19
+ DropdownMenu,
20
+ DropdownMenuContent,
21
+ DropdownMenuItem,
22
+ DropdownMenuSeparator,
23
+ DropdownMenuTrigger,
19
24
  EmptyState
20
25
  } from "@tangle-network/ui/primitives";
21
26
  import { cn } from "@tangle-network/ui/utils";
22
- import { Check, Search, Unplug } from "lucide-react";
27
+ import { Check, ExternalLink, MoreVertical, Search, Unplug } from "lucide-react";
23
28
  import { jsx, jsxs } from "react/jsx-runtime";
24
29
  var DEFAULT_FEATURED_IDS = [
25
30
  "gmail",
@@ -99,6 +104,8 @@ function IntegrationsPanel({
99
104
  error,
100
105
  onConnect,
101
106
  onDisconnect,
107
+ getManageHref,
108
+ onManage,
102
109
  emptyCatalogLabel = "No integrations available yet.",
103
110
  featuredIds = DEFAULT_FEATURED_IDS,
104
111
  defaultSort = "featured",
@@ -252,6 +259,8 @@ function IntegrationsPanel({
252
259
  const name = displayNameOf(provider);
253
260
  const connected = Boolean(live);
254
261
  if (connected && live) {
262
+ const manageHref = getManageHref?.(live);
263
+ const canManage = Boolean(manageHref) || Boolean(onManage);
255
264
  return /* @__PURE__ */ jsxs(
256
265
  "div",
257
266
  {
@@ -259,56 +268,118 @@ function IntegrationsPanel({
259
268
  "data-connected": "true",
260
269
  title: live.accountDisplay ? `${name} \u2014 ${live.accountDisplay}` : name,
261
270
  className: cn(
262
- "relative flex aspect-square flex-col items-center justify-center gap-2 rounded-xl border p-3 text-center",
271
+ "group relative flex aspect-square flex-col items-center justify-center gap-2 rounded-xl border p-3 text-center",
263
272
  "border-[var(--surface-success-border)] bg-[var(--surface-success-bg)]"
264
273
  ),
265
274
  children: [
266
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 top-2 flex h-4 w-4 items-center justify-center rounded-full bg-[var(--surface-success-text)] text-white", children: /* @__PURE__ */ jsx(Check, { className: "h-3 w-3", strokeWidth: 3 }) }),
267
- /* @__PURE__ */ jsx(
268
- "button",
275
+ manageHref ? /* @__PURE__ */ jsx(
276
+ "a",
269
277
  {
270
- type: "button",
271
- onClick: () => setDisconnectTarget({
272
- connectionId: live.id,
273
- name,
274
- accountDisplay: live.accountDisplay
275
- }),
276
- "data-testid": `disconnect-${provider.providerId}`,
277
- "aria-label": `Disconnect ${name}`,
278
- title: "Disconnect",
279
- className: "absolute right-1.5 top-1.5 flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/70 transition-colors hover:bg-background hover:text-foreground focus-visible:bg-background focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
280
- children: /* @__PURE__ */ jsx(Unplug, { className: "h-3.5 w-3.5" })
278
+ href: manageHref,
279
+ target: "_blank",
280
+ rel: "noopener noreferrer",
281
+ "aria-label": `Manage ${name} (opens in new window)`,
282
+ "data-testid": `manage-${provider.providerId}`,
283
+ className: "absolute inset-0 z-10 rounded-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/40"
281
284
  }
282
- ),
283
- /* @__PURE__ */ jsx(
284
- ProviderIcon,
285
- {
286
- id: provider.providerId,
287
- iconUrl: provider.iconUrl,
288
- displayName: provider.displayName,
289
- size: LOGO_SIZE,
290
- className: "rounded-2xl"
291
- }
292
- ),
293
- /* @__PURE__ */ jsxs("div", { className: "flex h-8 w-full flex-col justify-center leading-4", children: [
285
+ ) : null,
286
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 top-2 flex h-4 w-4 items-center justify-center rounded-full bg-[var(--surface-success-text)] text-white", children: /* @__PURE__ */ jsx(Check, { className: "h-3 w-3", strokeWidth: 3 }) }),
287
+ /* @__PURE__ */ jsxs("div", { className: "pointer-events-none flex flex-col items-center gap-2", children: [
294
288
  /* @__PURE__ */ jsx(
295
- "span",
289
+ ProviderIcon,
296
290
  {
297
- className: cn(
298
- "w-full text-xs font-medium text-foreground",
299
- live.accountDisplay ? "truncate" : "line-clamp-2"
300
- ),
301
- children: name
291
+ id: provider.providerId,
292
+ iconUrl: provider.iconUrl,
293
+ displayName: provider.displayName,
294
+ size: LOGO_SIZE,
295
+ className: "rounded-2xl"
302
296
  }
303
297
  ),
304
- live.accountDisplay ? /* @__PURE__ */ jsx(
305
- "span",
298
+ /* @__PURE__ */ jsxs("div", { className: "flex h-8 w-full flex-col justify-center leading-4", children: [
299
+ /* @__PURE__ */ jsx(
300
+ "span",
301
+ {
302
+ className: cn(
303
+ "w-full text-xs font-medium text-foreground",
304
+ live.accountDisplay ? "truncate" : "line-clamp-2"
305
+ ),
306
+ children: name
307
+ }
308
+ ),
309
+ live.accountDisplay ? /* @__PURE__ */ jsx(
310
+ "span",
311
+ {
312
+ className: "w-full truncate text-[11px] leading-4 text-muted-foreground",
313
+ "data-testid": `account-${provider.providerId}`,
314
+ children: live.accountDisplay
315
+ }
316
+ ) : null
317
+ ] })
318
+ ] }),
319
+ manageHref ? /* @__PURE__ */ jsx(
320
+ ExternalLink,
321
+ {
322
+ "aria-hidden": true,
323
+ className: "pointer-events-none absolute bottom-1.5 right-1.5 h-3.5 w-3.5 text-muted-foreground/70 opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100"
324
+ }
325
+ ) : null,
326
+ /* @__PURE__ */ jsxs(DropdownMenu, { children: [
327
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
328
+ "button",
306
329
  {
307
- className: "w-full truncate text-[11px] leading-4 text-muted-foreground",
308
- "data-testid": `account-${provider.providerId}`,
309
- children: live.accountDisplay
330
+ type: "button",
331
+ "data-testid": `menu-${provider.providerId}`,
332
+ "aria-label": `More actions for ${name}`,
333
+ title: "More actions",
334
+ className: "absolute right-1.5 top-1.5 z-20 flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/70 transition-colors hover:bg-background hover:text-foreground focus-visible:bg-background focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
335
+ children: /* @__PURE__ */ jsx(MoreVertical, { className: "h-3.5 w-3.5" })
310
336
  }
311
- ) : null
337
+ ) }),
338
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", className: "min-w-[160px]", children: [
339
+ manageHref ? /* @__PURE__ */ jsx(DropdownMenuItem, { asChild: true, children: /* @__PURE__ */ jsxs(
340
+ "a",
341
+ {
342
+ href: manageHref,
343
+ target: "_blank",
344
+ rel: "noopener noreferrer",
345
+ "data-testid": `manage-item-${provider.providerId}`,
346
+ children: [
347
+ /* @__PURE__ */ jsx(ExternalLink, { className: "mr-2 h-4 w-4" }),
348
+ " Manage"
349
+ ]
350
+ }
351
+ ) }) : onManage ? /* @__PURE__ */ jsxs(
352
+ DropdownMenuItem,
353
+ {
354
+ "data-testid": `manage-item-${provider.providerId}`,
355
+ onClick: () => onManage({
356
+ connectionId: live.id,
357
+ providerId: provider.providerId
358
+ }),
359
+ children: [
360
+ /* @__PURE__ */ jsx(ExternalLink, { className: "mr-2 h-4 w-4" }),
361
+ " Manage"
362
+ ]
363
+ }
364
+ ) : null,
365
+ canManage ? /* @__PURE__ */ jsx(DropdownMenuSeparator, {}) : null,
366
+ /* @__PURE__ */ jsxs(
367
+ DropdownMenuItem,
368
+ {
369
+ "data-testid": `disconnect-${provider.providerId}`,
370
+ className: "text-destructive focus:text-destructive",
371
+ onClick: () => setDisconnectTarget({
372
+ connectionId: live.id,
373
+ name,
374
+ accountDisplay: live.accountDisplay
375
+ }),
376
+ children: [
377
+ /* @__PURE__ */ jsx(Unplug, { className: "mr-2 h-4 w-4" }),
378
+ " Disconnect"
379
+ ]
380
+ }
381
+ )
382
+ ] })
312
383
  ] })
313
384
  ]
314
385
  },
package/dist/pages.d.ts CHANGED
@@ -202,7 +202,7 @@ interface ProvisioningConfig {
202
202
  key: string;
203
203
  value: string;
204
204
  }[];
205
- driver: "docker" | "firecracker" | "host-agent-docker" | "host-agent-firecracker" | "tangle";
205
+ driver: "docker" | "firecracker" | "host-agent" | "tangle";
206
206
  bare: boolean;
207
207
  startupScriptIds?: string[];
208
208
  }
package/dist/styles.css CHANGED
@@ -392,6 +392,9 @@
392
392
  .bottom-1 {
393
393
  bottom: calc(var(--spacing) * 1);
394
394
  }
395
+ .bottom-1\.5 {
396
+ bottom: calc(var(--spacing) * 1.5);
397
+ }
395
398
  .bottom-2 {
396
399
  bottom: calc(var(--spacing) * 2);
397
400
  }
@@ -437,6 +440,9 @@
437
440
  .z-10 {
438
441
  z-index: 10;
439
442
  }
443
+ .z-20 {
444
+ z-index: 20;
445
+ }
440
446
  .z-30 {
441
447
  z-index: 30;
442
448
  }
@@ -3626,6 +3632,11 @@
3626
3632
  rotate: 180deg;
3627
3633
  }
3628
3634
  }
3635
+ .group-focus-within\:opacity-100 {
3636
+ &:is(:where(.group):focus-within *) {
3637
+ opacity: 100%;
3638
+ }
3639
+ }
3629
3640
  .group-focus-within\/tip\:translate-x-0 {
3630
3641
  &:is(:where(.group\/tip):focus-within *) {
3631
3642
  --tw-translate-x: calc(var(--spacing) * 0);
@@ -3676,6 +3687,13 @@
3676
3687
  }
3677
3688
  }
3678
3689
  }
3690
+ .group-hover\/logo\:opacity-100 {
3691
+ &:is(:where(.group\/logo):hover *) {
3692
+ @media (hover: hover) {
3693
+ opacity: 100%;
3694
+ }
3695
+ }
3696
+ }
3679
3697
  .group-hover\/tip\:translate-x-0 {
3680
3698
  &:is(:where(.group\/tip):hover *) {
3681
3699
  @media (hover: hover) {
package/dist/workbench.js CHANGED
@@ -12,9 +12,9 @@ import {
12
12
  buildUnifiedPatch,
13
13
  computeDiffStats,
14
14
  resolveLanguage
15
- } from "./chunk-4HLWA2VN.js";
15
+ } from "./chunk-MGIOO3RL.js";
16
16
  import "./chunk-3J6FG3FJ.js";
17
- import "./chunk-3WUSPCPC.js";
17
+ import "./chunk-RT4MLYYM.js";
18
18
  import "./chunk-OMUIPJQZ.js";
19
19
  import "./chunk-VIREDUBF.js";
20
20
  import "./chunk-77WVVJA4.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.49.0",
3
+ "version": "0.50.0",
4
4
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
5
5
  "repository": {
6
6
  "type": "git",