@tangle-network/sandbox-ui 0.132.1 → 0.132.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.
- package/dist/{WorkflowGraph-Cx6SkrNJ.js → WorkflowGraph-m2uy9TDl.js} +12 -4
- package/dist/{dashboard-BQDUxrn5.js → dashboard-CGtJ8Q_h.js} +32 -10
- package/dist/dashboard.js +1 -1
- package/dist/globals.css +7 -0
- package/dist/index.js +2 -2
- package/dist/{node-output-BdfG5lt4.js → node-output-BC5ZQ8R6.js} +87 -45
- package/dist/styles.css +7 -0
- package/dist/{workbench-Bk52r7Th.js → workbench-C6h_DkVv.js} +1 -1
- package/dist/workbench.js +1 -1
- package/dist/workflows.js +2 -2
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as
|
|
1
|
+
import { A as triggerNodeIndex, B as fmtTokens, C as COMPACT_NODE_SIZE, D as buildWorkflowGraph, I as shortModel, L as clampPreview, M as worstSeverity, O as isStructuralKind, R as fmtCost, S as statusBorder, _ as emptySlotLabel, a as NodeMark, b as problemSurface, c as RESTING_BORDER, d as STATUS_LABEL, g as edgeColor, h as StatusPill, j as wfEdgeId, l as RESTING_SHADOW, m as StatusFooter, n as classifyOutput, o as ProblemMarker, s as ProblemMessages, t as NodeOutputBody, u as STATUS_COLOR, v as kindAccent, x as problemTitle, y as problemBorder, z as fmtDuration } from "./node-output-BC5ZQ8R6.js";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { Maximize2, Minimize2, Plus, X } from "lucide-react";
|
|
@@ -668,7 +668,7 @@ function WorkflowNode({ id, data, sourcePosition, targetPosition }) {
|
|
|
668
668
|
width: 76,
|
|
669
669
|
height: 76,
|
|
670
670
|
...state ? statusBorder(state.status) : problemSeverity ? problemBorder(problemSeverity) : {
|
|
671
|
-
borderColor:
|
|
671
|
+
borderColor: RESTING_BORDER,
|
|
672
672
|
boxShadow: RESTING_SHADOW
|
|
673
673
|
},
|
|
674
674
|
...selected ? SELECTION_OUTLINE : {}
|
|
@@ -733,12 +733,20 @@ function WorkflowNode({ id, data, sourcePosition, targetPosition }) {
|
|
|
733
733
|
className: "relative flex h-full w-full flex-col overflow-hidden rounded-xl border bg-card shadow-sm transition-colors",
|
|
734
734
|
style: {
|
|
735
735
|
...runStatus ? statusBorder(runStatus) : problemSeverity ? problemBorder(problemSeverity) : {
|
|
736
|
-
borderColor:
|
|
736
|
+
borderColor: RESTING_BORDER,
|
|
737
737
|
boxShadow: RESTING_SHADOW
|
|
738
738
|
},
|
|
739
739
|
...selected ? SELECTION_OUTLINE : {}
|
|
740
740
|
},
|
|
741
|
-
children: [
|
|
741
|
+
children: [
|
|
742
|
+
handles,
|
|
743
|
+
/* @__PURE__ */ jsx("span", {
|
|
744
|
+
"aria-hidden": true,
|
|
745
|
+
className: "pointer-events-none absolute inset-x-0 top-0 h-0.5",
|
|
746
|
+
style: { background: `color-mix(in srgb, ${accent} 70%, transparent)` }
|
|
747
|
+
}),
|
|
748
|
+
children
|
|
749
|
+
]
|
|
742
750
|
});
|
|
743
751
|
const identityRow = /* @__PURE__ */ jsxs("div", {
|
|
744
752
|
className: "flex shrink-0 items-center gap-2.5",
|
|
@@ -539,7 +539,7 @@ function RailFlyout({ icon: Icon, label, isActive, showLabel, title, children, c
|
|
|
539
539
|
},
|
|
540
540
|
className: cn$1("absolute left-full top-0 z-50 ml-2 min-w-[12rem] p-1.5", "agent-pop-in", "rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"),
|
|
541
541
|
children: [/* @__PURE__ */ jsx("p", {
|
|
542
|
-
className: "px-2 pb-1 pt-1 text-
|
|
542
|
+
className: "px-2 pb-1 pt-1 text-sm font-semibold uppercase tracking-wider text-muted-foreground/70 select-none",
|
|
543
543
|
children: title ?? label
|
|
544
544
|
}), children]
|
|
545
545
|
})]
|
|
@@ -677,7 +677,7 @@ function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems
|
|
|
677
677
|
}, item.id);
|
|
678
678
|
};
|
|
679
679
|
const list = loading ? /* @__PURE__ */ jsx(SubItemsSkeleton, {}) : items && items.length > 0 ? items.map(subLink) : /* @__PURE__ */ jsx("p", {
|
|
680
|
-
className: "px-2.5 py-1.5 text-
|
|
680
|
+
className: "px-2.5 py-1.5 text-sm text-muted-foreground",
|
|
681
681
|
children: emptyLabel
|
|
682
682
|
});
|
|
683
683
|
if (!showLabel) {
|
|
@@ -757,7 +757,7 @@ function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems
|
|
|
757
757
|
},
|
|
758
758
|
className: cn$1("agent-pop-in z-[70] flex w-60 flex-col overflow-hidden p-1.5", "rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"),
|
|
759
759
|
children: [/* @__PURE__ */ jsx("p", {
|
|
760
|
-
className: "shrink-0 px-2 pb-1 pt-1 text-
|
|
760
|
+
className: "shrink-0 px-2 pb-1 pt-1 text-sm font-semibold uppercase tracking-wider text-muted-foreground/70 select-none",
|
|
761
761
|
children: label
|
|
762
762
|
}), /* @__PURE__ */ jsx("div", {
|
|
763
763
|
className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto",
|
|
@@ -911,7 +911,7 @@ function AppearanceMenuSection({ appearance, divider = true }) {
|
|
|
911
911
|
}), /* @__PURE__ */ jsxs("div", {
|
|
912
912
|
className: "flex min-w-0 flex-col leading-tight",
|
|
913
913
|
children: [/* @__PURE__ */ jsx("span", { children: "Appearance" }), /* @__PURE__ */ jsx("span", {
|
|
914
|
-
className: "text-
|
|
914
|
+
className: "text-sm text-muted-foreground",
|
|
915
915
|
children: caption
|
|
916
916
|
})]
|
|
917
917
|
})] }), /* @__PURE__ */ jsx(DropdownMenuSubContent, {
|
|
@@ -960,7 +960,7 @@ function ProfileAvatar({ user, isLoading = false, onLogout, onSettingsClick, set
|
|
|
960
960
|
src: user.avatarUrl,
|
|
961
961
|
alt: ""
|
|
962
962
|
}), /* @__PURE__ */ jsx(AvatarFallback, {
|
|
963
|
-
className: "text-
|
|
963
|
+
className: "text-sm font-medium bg-[var(--accent-surface-strong)] text-[var(--accent-text)]",
|
|
964
964
|
children: getInitials(user?.name, user?.email)
|
|
965
965
|
})]
|
|
966
966
|
}), showDetails && /* @__PURE__ */ jsx("div", {
|
|
@@ -998,11 +998,11 @@ function ProfileAvatar({ user, isLoading = false, onLogout, onSettingsClick, set
|
|
|
998
998
|
children: user?.name ?? user?.email ?? "Not logged in"
|
|
999
999
|
}),
|
|
1000
1000
|
user?.email && user?.name && /* @__PURE__ */ jsx("p", {
|
|
1001
|
-
className: "text-
|
|
1001
|
+
className: "text-sm text-muted-foreground truncate",
|
|
1002
1002
|
children: user.email
|
|
1003
1003
|
}),
|
|
1004
1004
|
user?.tier && /* @__PURE__ */ jsxs("p", {
|
|
1005
|
-
className: "text-
|
|
1005
|
+
className: "text-sm text-muted-foreground capitalize",
|
|
1006
1006
|
children: [user.tier, " Plan"]
|
|
1007
1007
|
})
|
|
1008
1008
|
] })
|
|
@@ -2761,6 +2761,26 @@ const HIDE_BELOW_CLASS = {
|
|
|
2761
2761
|
md: "max-md:hidden",
|
|
2762
2762
|
lg: "max-lg:hidden"
|
|
2763
2763
|
};
|
|
2764
|
+
/** The width at which each `hideBelow` breakpoint shows the rail again. */
|
|
2765
|
+
const DESKTOP_QUERY = {
|
|
2766
|
+
md: "(min-width: 48rem)",
|
|
2767
|
+
lg: "(min-width: 64rem)"
|
|
2768
|
+
};
|
|
2769
|
+
/**
|
|
2770
|
+
* Whether the rail is showing. A host without matchMedia (jsdom, an old
|
|
2771
|
+
* embedded webview) and the server both count as desktop.
|
|
2772
|
+
*/
|
|
2773
|
+
function useRailVisible(hideBelow) {
|
|
2774
|
+
const query = hideBelow ? DESKTOP_QUERY[hideBelow] : void 0;
|
|
2775
|
+
const subscribe = React$1.useCallback((onChange) => {
|
|
2776
|
+
if (!query || typeof window.matchMedia !== "function") return () => {};
|
|
2777
|
+
const media = window.matchMedia(query);
|
|
2778
|
+
media.addEventListener("change", onChange);
|
|
2779
|
+
return () => media.removeEventListener("change", onChange);
|
|
2780
|
+
}, [query]);
|
|
2781
|
+
const read = () => !query || typeof window.matchMedia !== "function" || window.matchMedia(query).matches;
|
|
2782
|
+
return React$1.useSyncExternalStore(subscribe, read, () => true);
|
|
2783
|
+
}
|
|
2764
2784
|
/** Inverse of {@link HIDE_BELOW_CLASS} — the mobile surfaces that stand in for
|
|
2765
2785
|
* the hidden rail show exactly where the rail does not. */
|
|
2766
2786
|
const SHOW_BELOW_CLASS = {
|
|
@@ -2818,7 +2838,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
|
|
|
2818
2838
|
return;
|
|
2819
2839
|
}
|
|
2820
2840
|
if (typeof window.matchMedia !== "function") return;
|
|
2821
|
-
const desktop = window.matchMedia(hideBelow
|
|
2841
|
+
const desktop = window.matchMedia(DESKTOP_QUERY[hideBelow]);
|
|
2822
2842
|
const closeOnDesktop = () => {
|
|
2823
2843
|
if (desktop.matches) setMobileNavOpen(false);
|
|
2824
2844
|
};
|
|
@@ -2826,6 +2846,8 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
|
|
|
2826
2846
|
desktop.addEventListener("change", closeOnDesktop);
|
|
2827
2847
|
return () => desktop.removeEventListener("change", closeOnDesktop);
|
|
2828
2848
|
}, [hideBelow, mobileNavOpen]);
|
|
2849
|
+
const railVisible = useRailVisible(hideBelow);
|
|
2850
|
+
const headerSlot = mobileNavOpen ? "drawer" : railVisible ? "rail" : "bar";
|
|
2829
2851
|
/**
|
|
2830
2852
|
* One nav list, rendered twice — once in the desktop rail, once in the mobile
|
|
2831
2853
|
* drawer. Sharing the renderer is the point: a product adds a destination to
|
|
@@ -2933,7 +2955,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
|
|
|
2933
2955
|
onToggle: toggleRail,
|
|
2934
2956
|
collapsible: railLabels,
|
|
2935
2957
|
LinkComponent,
|
|
2936
|
-
children: railHeaderContent
|
|
2958
|
+
children: headerSlot === "rail" ? railHeaderContent : void 0
|
|
2937
2959
|
}),
|
|
2938
2960
|
/* @__PURE__ */ jsx(SidebarRailNav, {
|
|
2939
2961
|
className: cn$1(showLabels ? "px-2" : void 0, expandOnEmptyClick && "cursor-pointer"),
|
|
@@ -2979,7 +3001,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
|
|
|
2979
3001
|
}),
|
|
2980
3002
|
/* @__PURE__ */ jsx("div", {
|
|
2981
3003
|
className: "flex min-w-0 flex-1 items-center",
|
|
2982
|
-
children: railHeaderContent ?? (logo !== void 0 ? /* @__PURE__ */ jsx(Link, {
|
|
3004
|
+
children: (headerSlot === "bar" ? railHeaderContent : void 0) ?? (logo !== void 0 ? /* @__PURE__ */ jsx(Link, {
|
|
2983
3005
|
href: logoHref,
|
|
2984
3006
|
to: logoHref,
|
|
2985
3007
|
className: "flex min-w-0 items-center",
|
package/dist/dashboard.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-
|
|
1
|
+
import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-CGtJ8Q_h.js";
|
|
2
2
|
import { n as canonicalModelId, r as modelBrandFor, t as ModelBrandStack } from "./model-brand-hMyDTUqB.js";
|
|
3
3
|
import { a as formatPrice, i as PricingPage, n as SandboxPageShell, o as BillingDashboard, r as UsageChart, t as DashboardPageHeader } from "./page-layout-2IRtfx51.js";
|
|
4
4
|
export { ActivityFeed, BackendSelector, BillingDashboard, DashboardLayout, DashboardPageHeader, GitPanel, HARNESS_BRAND, HARNESS_OPTIONS, HarnessLogo, HarnessPicker, INSUFFICIENT_BALANCE_CODE, MetricAreaChart, ModelBrandStack, NewSandboxCard, OutOfCreditsModal, PortsList, PricingPage, ProcessList, ProfileAvatar, PromoBanner, RailButton, RailExpandable, RailFlyout, RailHeader, RailModeButton, RailSeparator, RailTooltip, ResourceMeter, ResourceSnapshot, SANDBOX_STATUS, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, SandboxPageShell, SandboxStatusPill, SandboxTable, Sidebar, SidebarContent, SidebarLayout, SidebarPanel, SidebarPanelContent, SidebarPanelHeader, SidebarProvider, SidebarRail, SidebarRailFooter, SidebarRailNav, SnapshotList, SystemLogsViewer, TemplateCard, UsageChart, UsageSummary, canAdminSandbox, canonicalModelId, chatCapableHarnesses, formatPrice, modelBrandFor, parseInsufficientBalance, sandboxStatus, useSidebar };
|
package/dist/globals.css
CHANGED
|
@@ -731,6 +731,10 @@
|
|
|
731
731
|
width: calc(var(--spacing) * 2);
|
|
732
732
|
height: calc(var(--spacing) * 2);
|
|
733
733
|
}
|
|
734
|
+
.size-2\.5 {
|
|
735
|
+
width: calc(var(--spacing) * 2.5);
|
|
736
|
+
height: calc(var(--spacing) * 2.5);
|
|
737
|
+
}
|
|
734
738
|
.size-3 {
|
|
735
739
|
width: calc(var(--spacing) * 3);
|
|
736
740
|
height: calc(var(--spacing) * 3);
|
|
@@ -797,6 +801,9 @@
|
|
|
797
801
|
.\!h-2\.5 {
|
|
798
802
|
height: calc(var(--spacing) * 2.5) !important;
|
|
799
803
|
}
|
|
804
|
+
.h-0\.5 {
|
|
805
|
+
height: calc(var(--spacing) * 0.5);
|
|
806
|
+
}
|
|
800
807
|
.h-1 {
|
|
801
808
|
height: var(--spacing);
|
|
802
809
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-
|
|
1
|
+
import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-C6h_DkVv.js";
|
|
2
2
|
import { $ as DialogClose, $n as formatCalendarDate, $t as SelectSeparator, A as Chip, An as Tabs, At as Input, B as ContextMenuLabel, Bn as Textarea, Bt as PopoverContent, C as Card, Cn as TableBody, Ct as DropdownMenuTrigger, D as CardHeader, Dn as TableHead, Dt as HelpText, E as CardFooter, En as TableFooter, Et as Heading, F as ContextMenu, Ft as PageShell, G as ContextMenuShortcut, Gn as Toolbar, Gt as SegmentedControl, H as ContextMenuRadioGroup, Hn as TimeSelect, Ht as Progress, I as ContextMenuCheckboxItem, In as TerminalDisplay, It as Pagination, J as ContextMenuSubTrigger, Jn as TooltipProvider, Jt as SelectGroup, K as ContextMenuSub, Kn as Tooltip, Kt as Select, L as ContextMenuContent, Lt as Popover, M as Collapsible, Mn as TabsList, Mt as Metric, N as CollapsibleContent, Nn as TabsTrigger, Nt as MetricStrip, O as CardTitle, On as TableHeader, Ot as IconTile, P as CollapsibleTrigger, Pn as Tag, Pt as PageHeader, Q as Dialog, Qn as buttonVariants, Qt as SelectScrollUpButton, R as ContextMenuGroup, Rt as PopoverAnchor, S as Calendar, Sn as Table, St as DropdownMenuSubTrigger, T as CardDescription, Tn as TableCell, Tt as FilterField, U as ContextMenuRadioItem, Un as ToastContainer, Ut as RadioGroup, V as ContextMenuPortal, Vn as ThemeToggle, Vt as PopoverTrigger, W as ContextMenuSeparator, Wn as ToastProvider, Wt as RadioGroupItem, X as CopyButton, Xn as UploadProgress, Xt as SelectLabel, Y as ContextMenuTrigger, Yn as TooltipTrigger, Yt as SelectItem, Z as DatePicker, Zn as badgeVariants, Zt as SelectScrollDownButton, _ as AvatarFallback, _n as Slider, _t as DropdownMenuRadioItem, a as AlertDialogCancel, an as SheetContent, ar as useToast, at as DialogPortal, b as Button, bn as Switch, bt as DropdownMenuSub, c as AlertDialogFooter, cn as SheetHeader, cr as TangleKnot, ct as DropZone, d as AlertDialogPortal, dn as SheetTitle, dt as DropdownMenuContent, en as SelectTrigger, er as initialsOf, et as DialogContent, f as AlertDialogTitle, fn as SheetTrigger, ft as DropdownMenuGroup, g as Avatar, gn as SkeletonTable, gt as DropdownMenuRadioGroup, hn as SkeletonCard, ht as DropdownMenuPortal, i as AlertDialogAction, in as SheetClose, ir as useTheme, it as DialogOverlay, j as CodeBlock, jn as TabsContent, jt as Label, k as Checkbox, kn as TableRow, kt as InlineCode, l as AlertDialogHeader, ln as SheetOverlay, lt as DropdownMenu, m as AlertTitle, mn as Skeleton, mt as DropdownMenuLabel, n as AlertDescription, nn as Separator, nr as parseCalendarDate, nt as DialogFooter, o as AlertDialogContent, on as SheetDescription, or as SectionTitle, ot as DialogTitle, p as AlertDialogTrigger, pn as SidebarDropZone, pt as DropdownMenuItem, q as ContextMenuSubContent, qn as TooltipContent, qt as SelectContent, r as AlertDialog, rn as Sheet, rr as toneFor, rt as DialogHeader, s as AlertDialogDescription, sn as SheetFooter, sr as Logo, st as DialogTrigger, t as Alert, tn as SelectValue, tr as localToday, tt as DialogDescription, u as AlertDialogOverlay, un as SheetPortal, ut as DropdownMenuCheckboxItem, v as AvatarImage, vn as StatCard, vt as DropdownMenuSeparator, w as CardContent, wn as TableCaption, wt as EmptyState, x as CATEGORY_TONES, xn as TONE_CLASSES, xt as DropdownMenuSubContent, y as Badge, yn as StatusPill, yt as DropdownMenuShortcut, z as ContextMenuItem, zn as TextShimmer, zt as PopoverClose } from "./primitives-KFAPbGBD.js";
|
|
3
3
|
import { t as WorkspacePaneHeader } from "./workspace-pane-header-Bg1cCcHX.js";
|
|
4
4
|
import { _ as StatusBar, a as TaskBoard, b as WorkspaceLayout, c as createShellShouldRevalidate, d as SESSION_CREATED_EVENT, f as dispatchSessionCreated, g as TerminalPanel, h as RuntimePane, i as CalendarView, l as shellShouldRevalidate, m as formatRelativeAge, n as WorkspaceFilesPane, o as SandboxWorkbench, p as useOptimisticSessionItems, r as ApprovalQueue, s as WorkspaceArtifactView, t as ArtifactPane, u as SessionSidebar, v as StatusBanner, y as DirectoryPane } from "./workspace-DLlilck6.js";
|
|
5
5
|
import { i as VaultTree, n as filterFileNodes, r as VAULT_TREE_CHILD_PAGE, t as fileTreeFromPaths } from "./tree-data-DtoCNNBJ.js";
|
|
6
|
-
import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-
|
|
6
|
+
import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-CGtJ8Q_h.js";
|
|
7
7
|
import { n as canonicalModelId, r as modelBrandFor, t as ModelBrandStack } from "./model-brand-hMyDTUqB.js";
|
|
8
8
|
import { a as formatPrice, i as PricingPage, n as SandboxPageShell, o as BillingDashboard, r as UsageChart, t as DashboardPageHeader } from "./page-layout-2IRtfx51.js";
|
|
9
9
|
import { t as usePtySession } from "./use-pty-session-Bf4hBLXJ.js";
|
|
@@ -2,7 +2,7 @@ import { r as modelBrandFor, t as ModelBrandStack } from "./model-brand-hMyDTUqB
|
|
|
2
2
|
import { t as ProviderIcon } from "./provider-logo-X9PkbMIX.js";
|
|
3
3
|
import { StatusPill } from "@tangle-network/ui/primitives";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
-
import { AlertTriangle, Bell, Box, Cable, Camera, Circle, Clock, Code, GitBranch, Repeat, ScanSearch, Sparkles, UserCheck, Webhook, Zap } from "lucide-react";
|
|
5
|
+
import { AlertTriangle, Bell, Box, Cable, Camera, Check, Circle, Clock, Code, GitBranch, Repeat, ScanSearch, Sparkles, UserCheck, Webhook, Zap } from "lucide-react";
|
|
6
6
|
import { parse } from "yaml";
|
|
7
7
|
//#region src/workflows/cron.ts
|
|
8
8
|
/**
|
|
@@ -1275,53 +1275,71 @@ function buildWorkflowGraph(yaml, options) {
|
|
|
1275
1275
|
*/
|
|
1276
1276
|
/** Track color behind a progress bar — a faint wash of the muted token. */
|
|
1277
1277
|
const MUTED_TRACK = "color-mix(in srgb, hsl(var(--muted-foreground)) 22%, transparent)";
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
*
|
|
1285
|
-
*
|
|
1286
|
-
*
|
|
1287
|
-
*
|
|
1288
|
-
* agent.run primary indigo — the workhorse carries the brand
|
|
1289
|
-
* script.run info — code/compute
|
|
1290
|
-
* sandbox.* success — provisioned infrastructure
|
|
1291
|
-
* integration/notify info — the outside world
|
|
1292
|
-
* Run state still wins when a run is live: statusBorder recolors the border
|
|
1293
|
-
* and the glow, so the resting identity never competes with the run's front. */
|
|
1278
|
+
/** Per-KIND accents — the QUIET identity channel. The 2026-10-09 canvas
|
|
1279
|
+
* critique's first blocker: kind and state shared the same channel and hue
|
|
1280
|
+
* family (sandbox-kind was green like DONE; structural-kind amber like
|
|
1281
|
+
* WAITING; agent-kind indigo like RUNNING). The split:
|
|
1282
|
+
* KIND = the glyph-tile tint + a 2px top rule. Hues chosen to NEVER
|
|
1283
|
+
* collide with the state family (green/amber/red are reserved
|
|
1284
|
+
* for state alone).
|
|
1285
|
+
* STATE = the border, ring, glow and fill (see statusBorder).
|
|
1286
|
+
* Kind hue duplicates are deliberate: shape + glyph carry identity; the
|
|
1287
|
+
* tint is a hint, not the signal. */
|
|
1294
1288
|
const KIND_ACCENT = {
|
|
1295
1289
|
"agent.run": "hsl(var(--primary))",
|
|
1296
1290
|
"script.run": "var(--surface-info-text)",
|
|
1297
|
-
"sandbox.spawn": "var(--
|
|
1298
|
-
"sandbox.snapshot": "var(--
|
|
1291
|
+
"sandbox.spawn": "hsl(var(--muted-foreground))",
|
|
1292
|
+
"sandbox.snapshot": "hsl(var(--muted-foreground))",
|
|
1299
1293
|
"integration.invoke": "var(--surface-info-text)",
|
|
1300
1294
|
"line.send": "var(--surface-info-text)",
|
|
1301
1295
|
notify: "var(--surface-info-text)"
|
|
1302
1296
|
};
|
|
1297
|
+
/** Structural kinds (parallel/foreach/decision) rest SLATE — amber is
|
|
1298
|
+
* reserved for `waiting`, full stop. */
|
|
1299
|
+
const TONE_ACCENT = {
|
|
1300
|
+
trigger: "hsl(var(--primary))",
|
|
1301
|
+
structural: "hsl(var(--muted-foreground))",
|
|
1302
|
+
action: "hsl(var(--muted-foreground))"
|
|
1303
|
+
};
|
|
1303
1304
|
/** The accent a node presents at rest: its kind's identity when it has one,
|
|
1304
1305
|
* its tone otherwise (trigger/structural keep their tone-driven accents). */
|
|
1305
1306
|
function kindAccent(tone, kind) {
|
|
1306
1307
|
return (kind !== void 0 ? KIND_ACCENT[kind] : void 0) ?? TONE_ACCENT[tone];
|
|
1307
1308
|
}
|
|
1308
|
-
/** Resting elevation
|
|
1309
|
-
*
|
|
1310
|
-
*
|
|
1311
|
-
|
|
1309
|
+
/** Resting elevation — the 2026-10-09 critique's depth finding: the card
|
|
1310
|
+
* sat FLAT on the canvas (three near-identical greys, borders invisible).
|
|
1311
|
+
* The card must sit ON the canvas, not in it: a real two-layer shadow plus a
|
|
1312
|
+
* 1px inner top highlight, foreground-token based so both themes get depth
|
|
1313
|
+
* without a dark-mode black box. */
|
|
1314
|
+
const RESTING_SHADOW = "inset 0 1px 0 hsl(var(--foreground) / 0.07), 0 1px 2px hsl(var(--foreground) / 0.10), 0 12px 32px -14px hsl(var(--foreground) / 0.40)";
|
|
1315
|
+
/** The resting card border: visible against the canvas in BOTH themes —
|
|
1316
|
+
* `--border` vanished on dark. */
|
|
1317
|
+
const RESTING_BORDER = "hsl(var(--foreground) / 0.14)";
|
|
1312
1318
|
const STATUS_QUEUED = "hsl(var(--muted-foreground))";
|
|
1319
|
+
const STATUS_DONE = "var(--surface-success-text)";
|
|
1320
|
+
const STATUS_FAILED = "var(--surface-danger-text)";
|
|
1321
|
+
const STATUS_RUNNING = "hsl(var(--primary))";
|
|
1322
|
+
/** A run blocked on a human borrows the warning surface — the same amber the
|
|
1323
|
+
* design system uses for "needs attention". It must never read as the primary
|
|
1324
|
+
* "running" accent: the workflow is not working, it is waiting on the viewer. */
|
|
1325
|
+
const STATUS_WAITING = "var(--surface-warning-text)";
|
|
1313
1326
|
const STATUS_COLOR = {
|
|
1314
1327
|
queued: STATUS_QUEUED,
|
|
1315
|
-
running:
|
|
1316
|
-
waiting:
|
|
1317
|
-
succeeded:
|
|
1318
|
-
failed:
|
|
1328
|
+
running: STATUS_RUNNING,
|
|
1329
|
+
waiting: STATUS_WAITING,
|
|
1330
|
+
succeeded: STATUS_DONE,
|
|
1331
|
+
failed: STATUS_FAILED
|
|
1319
1332
|
};
|
|
1320
|
-
/** An edge
|
|
1321
|
-
*
|
|
1322
|
-
*
|
|
1333
|
+
/** An edge reads by the status of the node it points AT — with the 2026-10-09
|
|
1334
|
+
* fix: SETTLED edges go quiet. A succeeded run used to paint every edge green
|
|
1335
|
+
* ("the green wall"); now only the live front carries color: running keeps
|
|
1336
|
+
* primary, waiting amber, failed danger, and succeeded/queued sit at a quiet
|
|
1337
|
+
* neutral so the eye finds the front, not the history. */
|
|
1323
1338
|
function edgeColor(status) {
|
|
1324
|
-
|
|
1339
|
+
if (status === "running") return STATUS_RUNNING;
|
|
1340
|
+
if (status === "waiting") return STATUS_WAITING;
|
|
1341
|
+
if (status === "failed") return STATUS_FAILED;
|
|
1342
|
+
return "color-mix(in srgb, hsl(var(--muted-foreground)) 38%, transparent)";
|
|
1325
1343
|
}
|
|
1326
1344
|
const STATUS_LABEL = {
|
|
1327
1345
|
queued: "Queued",
|
|
@@ -1362,21 +1380,32 @@ const STATUS_PILL = {
|
|
|
1362
1380
|
borderColor: "var(--surface-danger-border)"
|
|
1363
1381
|
}
|
|
1364
1382
|
};
|
|
1365
|
-
/** The card's border + ring once a node has live run state
|
|
1366
|
-
*
|
|
1367
|
-
*
|
|
1383
|
+
/** The card's border + ring once a node has live run state. The emphasis
|
|
1384
|
+
* law (the critique's second blocker, inverted): the EXCEPTION is the
|
|
1385
|
+
* loudest thing on the canvas —
|
|
1386
|
+
* failed saturated danger + a halo wider than running's
|
|
1387
|
+
* waiting amber + glow (the node the viewer must act on)
|
|
1388
|
+
* running primary + glow (the live front)
|
|
1389
|
+
* succeeded QUIET: a neutral border, no ring, no glow — done is the
|
|
1390
|
+
* resting state of a healthy run and must not shout */
|
|
1368
1391
|
function statusBorder(status) {
|
|
1369
|
-
const color = STATUS_COLOR[status];
|
|
1370
1392
|
switch (status) {
|
|
1371
|
-
case "
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
boxShadow: `0 0 0 1px color-mix(in srgb, ${color} 45%, transparent), 0 0 24px -6px ${color}`
|
|
1393
|
+
case "failed": return {
|
|
1394
|
+
borderColor: STATUS_FAILED,
|
|
1395
|
+
boxShadow: `0 0 0 2px color-mix(in srgb, ${STATUS_FAILED} 55%, transparent), 0 0 32px -4px color-mix(in srgb, ${STATUS_FAILED} 70%, transparent), inset 0 1px 0 hsl(var(--foreground) / 0.07), 0 1px 2px hsl(var(--foreground) / 0.10), 0 12px 32px -14px hsl(var(--foreground) / 0.40)`
|
|
1375
1396
|
};
|
|
1397
|
+
case "running":
|
|
1398
|
+
case "waiting": {
|
|
1399
|
+
const color = STATUS_COLOR[status];
|
|
1400
|
+
return {
|
|
1401
|
+
borderColor: color,
|
|
1402
|
+
boxShadow: `0 0 0 1px color-mix(in srgb, ${color} 45%, transparent), 0 0 24px -6px ${color}`
|
|
1403
|
+
};
|
|
1404
|
+
}
|
|
1376
1405
|
case "queued": return { borderColor: "hsl(var(--border))" };
|
|
1377
|
-
|
|
1378
|
-
borderColor:
|
|
1379
|
-
boxShadow:
|
|
1406
|
+
case "succeeded": return {
|
|
1407
|
+
borderColor: RESTING_BORDER,
|
|
1408
|
+
boxShadow: RESTING_SHADOW
|
|
1380
1409
|
};
|
|
1381
1410
|
}
|
|
1382
1411
|
}
|
|
@@ -1530,7 +1559,7 @@ const STATUS_TONE = {
|
|
|
1530
1559
|
queued: "neutral",
|
|
1531
1560
|
running: "running",
|
|
1532
1561
|
waiting: "warning",
|
|
1533
|
-
succeeded: "
|
|
1562
|
+
succeeded: "neutral",
|
|
1534
1563
|
failed: "danger"
|
|
1535
1564
|
};
|
|
1536
1565
|
/** The status pill in a card's header — the one place the run state is spelled
|
|
@@ -1539,6 +1568,19 @@ const STATUS_TONE = {
|
|
|
1539
1568
|
* longest label is two words ("Waiting on you") and the pill is often nested a
|
|
1540
1569
|
* level below the flex row it sits in. */
|
|
1541
1570
|
function StatusPill$1({ status }) {
|
|
1571
|
+
if (status === "succeeded") return /* @__PURE__ */ jsxs("span", {
|
|
1572
|
+
className: "inline-flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-medium leading-4",
|
|
1573
|
+
style: {
|
|
1574
|
+
background: "color-mix(in srgb, hsl(var(--muted-foreground)) 10%, transparent)",
|
|
1575
|
+
color: "hsl(var(--muted-foreground))",
|
|
1576
|
+
borderColor: "color-mix(in srgb, hsl(var(--muted-foreground)) 26%, transparent)"
|
|
1577
|
+
},
|
|
1578
|
+
children: [/* @__PURE__ */ jsx(Check, {
|
|
1579
|
+
className: "size-2.5",
|
|
1580
|
+
strokeWidth: 3,
|
|
1581
|
+
"aria-hidden": true
|
|
1582
|
+
}), STATUS_LABEL[status]]
|
|
1583
|
+
});
|
|
1542
1584
|
return /* @__PURE__ */ jsx(StatusPill, {
|
|
1543
1585
|
tone: STATUS_TONE[status],
|
|
1544
1586
|
className: "shrink-0",
|
|
@@ -1572,7 +1614,7 @@ function StatusFooter({ status, rounds, cost, tokens, elapsed }) {
|
|
|
1572
1614
|
...status === "running" ? { "data-motion": "essential" } : {},
|
|
1573
1615
|
style: {
|
|
1574
1616
|
width: progressFill(status),
|
|
1575
|
-
background: STATUS_COLOR[status]
|
|
1617
|
+
background: status === "succeeded" ? "color-mix(in srgb, hsl(var(--muted-foreground)) 26%, transparent)" : STATUS_COLOR[status]
|
|
1576
1618
|
}
|
|
1577
1619
|
})
|
|
1578
1620
|
}), /* @__PURE__ */ jsxs("div", {
|
|
@@ -1815,4 +1857,4 @@ function NodeOutputBody({ shape, rows = 2, tone = "default" }) {
|
|
|
1815
1857
|
});
|
|
1816
1858
|
}
|
|
1817
1859
|
//#endregion
|
|
1818
|
-
export {
|
|
1860
|
+
export { triggerNodeIndex as A, fmtTokens as B, COMPACT_NODE_SIZE as C, buildWorkflowGraph as D, branchNodeId as E, parseActionPath as F, shortModel as I, clampPreview as L, worstSeverity as M, actionPathLabel as N, isStructuralKind as O, humanizeIdentifier as P, fmtCost as R, statusBorder as S, actionNodeId as T, emptySlotLabel as _, NodeMark as a, problemSurface as b, RESTING_BORDER as c, STATUS_LABEL as d, STATUS_PILL as f, edgeColor as g, StatusPill$1 as h, KIND_ICON as i, wfEdgeId as j, triggerNodeId as k, RESTING_SHADOW as l, StatusFooter as m, classifyOutput as n, ProblemMarker as o, STATUS_TONE as p, condenseText as r, ProblemMessages as s, NodeOutputBody as t, STATUS_COLOR as u, kindAccent as v, TRIGGER_NODE_ID as w, problemTitle as x, problemBorder as y, fmtDuration as z };
|
package/dist/styles.css
CHANGED
|
@@ -731,6 +731,10 @@
|
|
|
731
731
|
width: calc(var(--spacing) * 2);
|
|
732
732
|
height: calc(var(--spacing) * 2);
|
|
733
733
|
}
|
|
734
|
+
.size-2\.5 {
|
|
735
|
+
width: calc(var(--spacing) * 2.5);
|
|
736
|
+
height: calc(var(--spacing) * 2.5);
|
|
737
|
+
}
|
|
734
738
|
.size-3 {
|
|
735
739
|
width: calc(var(--spacing) * 3);
|
|
736
740
|
height: calc(var(--spacing) * 3);
|
|
@@ -797,6 +801,9 @@
|
|
|
797
801
|
.\!h-2\.5 {
|
|
798
802
|
height: calc(var(--spacing) * 2.5) !important;
|
|
799
803
|
}
|
|
804
|
+
.h-0\.5 {
|
|
805
|
+
height: calc(var(--spacing) * 0.5);
|
|
806
|
+
}
|
|
800
807
|
.h-1 {
|
|
801
808
|
height: var(--spacing);
|
|
802
809
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as cn$1 } from "./utils-DzWbktWG.js";
|
|
2
|
-
import { a as PortsList } from "./dashboard-
|
|
2
|
+
import { a as PortsList } from "./dashboard-CGtJ8Q_h.js";
|
|
3
3
|
import { n as TerminalView } from "./terminal-DmSUfGha.js";
|
|
4
4
|
import { RichFileTree } from "./files.js";
|
|
5
5
|
import { n as PreviewView } from "./embedded-app-view-CMRPEvon.js";
|
package/dist/workbench.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-
|
|
1
|
+
import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-C6h_DkVv.js";
|
|
2
2
|
import { n as PreviewView, t as EmbeddedAppView } from "./embedded-app-view-CMRPEvon.js";
|
|
3
3
|
export { BRAND_PRISM_THEME, ChangesPane, CodeSurface, CodeView, DiffStatsBadge, DiffView, EmbeddedAppView, FileBreadcrumb, GitStatusBadge, PanelHeader, PillTabs, PreviewView, SandboxArtifactPane, buildUnifiedPatch, computeDiffStats, resolveLanguage };
|
package/dist/workflows.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as modelBrandFor, t as ModelBrandStack } from "./model-brand-hMyDTUqB.js";
|
|
2
|
-
import {
|
|
2
|
+
import { A as triggerNodeIndex, D as buildWorkflowGraph, E as branchNodeId, F as parseActionPath, I as shortModel, N as actionPathLabel, P as humanizeIdentifier, T as actionNodeId, a as NodeMark, d as STATUS_LABEL, f as STATUS_PILL, h as StatusPill, i as KIND_ICON, k as triggerNodeId, n as classifyOutput, p as STATUS_TONE, r as condenseText, t as NodeOutputBody, u as STATUS_COLOR, w as TRIGGER_NODE_ID } from "./node-output-BC5ZQ8R6.js";
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { Component, Suspense, lazy, useMemo, useState } from "react";
|
|
5
5
|
//#region src/workflows/WorkflowGraphLazy.tsx
|
|
@@ -30,7 +30,7 @@ function retryImport(factory, retries = 2, delayMs = 350) {
|
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
32
|
function lazyWorkflowGraph() {
|
|
33
|
-
return lazy(() => retryImport(() => import("./WorkflowGraph-
|
|
33
|
+
return lazy(() => retryImport(() => import("./WorkflowGraph-m2uy9TDl.js").then((m) => ({ default: m.WorkflowGraph }))));
|
|
34
34
|
}
|
|
35
35
|
var GraphErrorBoundary = class extends Component {
|
|
36
36
|
state = { hasError: false };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tangle-network/sandbox-ui",
|
|
3
|
-
"version": "0.132.
|
|
3
|
+
"version": "0.132.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
|
|
6
6
|
"repository": {
|