@tangle-network/sandbox-ui 0.134.11 → 0.135.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.
- package/dist/{WorkflowGraph-Dz6aA2Mp.js → WorkflowGraph-WgonmxDh.js} +809 -58
- package/dist/globals.css +46 -0
- package/dist/hooks.js +1 -1
- package/dist/index.js +2 -2
- package/dist/{node-output-CHlf3tni.js → node-output-Bs51H68g.js} +71 -6
- package/dist/styles.css +46 -0
- package/dist/terminal-X6r5pjgv.js +1704 -0
- package/dist/terminal.js +1 -1
- package/dist/{use-pty-session-Bf4hBLXJ.js → use-pty-session-B5Q_i9RI.js} +10 -2
- package/dist/{workbench-QHNLHsoL.js → workbench-BzXAYUId.js} +1 -1
- package/dist/workbench.js +1 -1
- package/dist/workflows.d.ts +17 -3
- package/dist/workflows.js +2 -2
- package/package.json +7 -1
- package/dist/terminal-DmSUfGha.js +0 -203
package/dist/globals.css
CHANGED
|
@@ -283,6 +283,9 @@
|
|
|
283
283
|
white-space: nowrap;
|
|
284
284
|
border-width: 0;
|
|
285
285
|
}
|
|
286
|
+
.\!fixed {
|
|
287
|
+
position: fixed !important;
|
|
288
|
+
}
|
|
286
289
|
.absolute {
|
|
287
290
|
position: absolute;
|
|
288
291
|
}
|
|
@@ -298,6 +301,9 @@
|
|
|
298
301
|
.sticky {
|
|
299
302
|
position: sticky;
|
|
300
303
|
}
|
|
304
|
+
.\!inset-3 {
|
|
305
|
+
inset: calc(var(--spacing) * 3) !important;
|
|
306
|
+
}
|
|
301
307
|
.inset-0 {
|
|
302
308
|
inset: 0px;
|
|
303
309
|
}
|
|
@@ -433,6 +439,9 @@
|
|
|
433
439
|
.\!z-10 {
|
|
434
440
|
z-index: 10 !important;
|
|
435
441
|
}
|
|
442
|
+
.\!z-40 {
|
|
443
|
+
z-index: 40 !important;
|
|
444
|
+
}
|
|
436
445
|
.z-0 {
|
|
437
446
|
z-index: 0;
|
|
438
447
|
}
|
|
@@ -712,6 +721,9 @@
|
|
|
712
721
|
-webkit-box-orient: vertical;
|
|
713
722
|
-webkit-line-clamp: 6;
|
|
714
723
|
}
|
|
724
|
+
.\!hidden {
|
|
725
|
+
display: none !important;
|
|
726
|
+
}
|
|
715
727
|
.block {
|
|
716
728
|
display: block;
|
|
717
729
|
}
|
|
@@ -826,6 +838,9 @@
|
|
|
826
838
|
.\!h-2\.5 {
|
|
827
839
|
height: calc(var(--spacing) * 2.5) !important;
|
|
828
840
|
}
|
|
841
|
+
.\!h-auto {
|
|
842
|
+
height: auto !important;
|
|
843
|
+
}
|
|
829
844
|
.h-0\.5 {
|
|
830
845
|
height: calc(var(--spacing) * 0.5);
|
|
831
846
|
}
|
|
@@ -940,6 +955,9 @@
|
|
|
940
955
|
.h-\[34rem\] {
|
|
941
956
|
height: 34rem;
|
|
942
957
|
}
|
|
958
|
+
.h-\[36rem\] {
|
|
959
|
+
height: 36rem;
|
|
960
|
+
}
|
|
943
961
|
.h-\[72\%\] {
|
|
944
962
|
height: 72%;
|
|
945
963
|
}
|
|
@@ -1186,6 +1204,9 @@
|
|
|
1186
1204
|
.\!w-2\.5 {
|
|
1187
1205
|
width: calc(var(--spacing) * 2.5) !important;
|
|
1188
1206
|
}
|
|
1207
|
+
.\!w-auto {
|
|
1208
|
+
width: auto !important;
|
|
1209
|
+
}
|
|
1189
1210
|
.w-0 {
|
|
1190
1211
|
width: 0px;
|
|
1191
1212
|
}
|
|
@@ -1348,6 +1369,9 @@
|
|
|
1348
1369
|
.w-\[268px\] {
|
|
1349
1370
|
width: 268px;
|
|
1350
1371
|
}
|
|
1372
|
+
.w-\[358px\] {
|
|
1373
|
+
width: 358px;
|
|
1374
|
+
}
|
|
1351
1375
|
.w-\[360px\] {
|
|
1352
1376
|
width: 360px;
|
|
1353
1377
|
}
|
|
@@ -1381,6 +1405,9 @@
|
|
|
1381
1405
|
.w-\[1000px\] {
|
|
1382
1406
|
width: 1000px;
|
|
1383
1407
|
}
|
|
1408
|
+
.w-\[1100px\] {
|
|
1409
|
+
width: 1100px;
|
|
1410
|
+
}
|
|
1384
1411
|
.w-\[calc\(100vw-32px\)\] {
|
|
1385
1412
|
width: calc(100vw - 32px);
|
|
1386
1413
|
}
|
|
@@ -2976,6 +3003,12 @@
|
|
|
2976
3003
|
background-color: color-mix(in oklab, hsl(var(--primary)) 20%, transparent);
|
|
2977
3004
|
}
|
|
2978
3005
|
}
|
|
3006
|
+
.bg-primary\/\[0\.04\] {
|
|
3007
|
+
background-color: hsl(var(--primary));
|
|
3008
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
3009
|
+
background-color: color-mix(in oklab, hsl(var(--primary)) 4%, transparent);
|
|
3010
|
+
}
|
|
3011
|
+
}
|
|
2979
3012
|
.bg-red-500 {
|
|
2980
3013
|
background-color: var(--color-red-500);
|
|
2981
3014
|
}
|
|
@@ -3963,6 +3996,12 @@
|
|
|
3963
3996
|
color: color-mix(in oklab, hsl(var(--primary)) 70%, transparent);
|
|
3964
3997
|
}
|
|
3965
3998
|
}
|
|
3999
|
+
.text-primary\/80 {
|
|
4000
|
+
color: hsl(var(--primary));
|
|
4001
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4002
|
+
color: color-mix(in oklab, hsl(var(--primary)) 80%, transparent);
|
|
4003
|
+
}
|
|
4004
|
+
}
|
|
3966
4005
|
.text-red-400 {
|
|
3967
4006
|
color: var(--color-red-400);
|
|
3968
4007
|
}
|
|
@@ -4065,6 +4104,10 @@
|
|
|
4065
4104
|
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
4066
4105
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
4067
4106
|
}
|
|
4107
|
+
.shadow-2xl {
|
|
4108
|
+
--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
|
|
4109
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
4110
|
+
}
|
|
4068
4111
|
.shadow-\[0_1px_2px_rgba\(0\,0\,0\,0\.2\)\] {
|
|
4069
4112
|
--tw-shadow: 0 1px 2px var(--tw-shadow-color, rgba(0,0,0,0.2));
|
|
4070
4113
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -5572,6 +5615,9 @@
|
|
|
5572
5615
|
-webkit-box-orient: vertical;
|
|
5573
5616
|
-webkit-line-clamp: 3;
|
|
5574
5617
|
}
|
|
5618
|
+
.sm\:\!block {
|
|
5619
|
+
display: block !important;
|
|
5620
|
+
}
|
|
5575
5621
|
.sm\:flex {
|
|
5576
5622
|
display: flex;
|
|
5577
5623
|
}
|
package/dist/hooks.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as usePtySession } from "./use-pty-session-
|
|
1
|
+
import { t as usePtySession } from "./use-pty-session-B5Q_i9RI.js";
|
|
2
2
|
import { i as useSessionStream, n as SESSION_STREAM_RECONNECT_DELAY_MS, r as SessionStreamError, t as useSidecarAuth } from "./use-sidecar-auth-DkdcufOz.js";
|
|
3
3
|
import * as React$1 from "react";
|
|
4
4
|
import { RealtimeSessionRegistry, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useLiveTime, useRealtimeSession, useRunCollapseState, useRunGroups, useSSEStream, useSdkSession, useToolCallStream } from "@tangle-network/ui/hooks";
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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-BzXAYUId.js";
|
|
2
2
|
import { $ as DialogClose, $n as TooltipProvider, $t as SelectScrollUpButton, A as Chip, An as TableCell, At as InlineCode, B as ContextMenuLabel, Bt as PopoverClose, C as Card, Cn as StatCard, Ct as DropdownMenuTrigger, D as CardHeader, Dn as Table, Dt as Heading, E as CardFooter, En as TONE_CLASSES, Et as FilterField, F as ContextMenu, Fn as Tabs, Ft as PageHeader, G as ContextMenuShortcut, Gn as Textarea, Gt as RadioGroupItem, H as ContextMenuRadioGroup, Ht as PopoverTrigger, I as ContextMenuCheckboxItem, In as TabsContent, It as PageShell, J as ContextMenuSubTrigger, Jn as ToastContainer, Jt as SelectContent, K as ContextMenuSub, Kn as ThemeToggle, Kt as SegmentedControl, L as ContextMenuContent, Ln as TabsList, Lt as Pagination, M as Collapsible, Mn as TableHead, Mt as Label, N as CollapsibleContent, Nn as TableHeader, Nt as Metric, O as CardTitle, On as TableBody, Ot as HelpText, P as CollapsibleTrigger, Pn as TableRow, Pt as MetricStrip, Q as Dialog, Qn as TooltipContent, Qt as SelectScrollDownButton, R as ContextMenuGroup, Rn as TabsTrigger, Rt as Popover, S as Calendar, Sn as Slider, St as DropdownMenuSubTrigger, T as CardDescription, Tn as Switch, Tt as Field, U as ContextMenuRadioItem, Ut as Progress, V as ContextMenuPortal, Vn as TerminalDisplay, Vt as PopoverContent, W as ContextMenuSeparator, Wn as TextShimmer, Wt as RadioGroup, X as CopyButton, Xn as Toolbar, Xt as SelectItem, Y as ContextMenuTrigger, Yn as ToastProvider, Yt as SelectGroup, Z as DatePicker, Zn as Tooltip, Zt as SelectLabel, _ as AvatarFallback, _n as SheetTrigger, _t as DropdownMenuRadioItem, a as AlertDialogCancel, an as SettingsListItem, ar as buttonVariants, at as DialogPortal, b as Button, bn as SkeletonCard, bt as DropdownMenuSub, c as AlertDialogFooter, cn as Sheet, cr as initialsOf, ct as DropZone, d as AlertDialogPortal, dn as SheetDescription, dr as toneFor, dt as DropdownMenuContent, en as SelectSeparator, er as TooltipTrigger, et as DialogContent, f as AlertDialogTitle, fn as SheetFooter, fr as useTheme, ft as DropdownMenuGroup, g as Avatar, gn as SheetTitle, gr as TangleKnot, gt as DropdownMenuRadioGroup, hn as SheetPortal, hr as Logo, ht as DropdownMenuPortal, i as AlertDialogAction, in as SettingsList, ir as badgeVariants, it as DialogOverlay, j as CodeBlock, jn as TableFooter, jt as Input, k as Checkbox, kn as TableCaption, kt as IconTile, l as AlertDialogHeader, ln as SheetClose, lr as localToday, lt as DropdownMenu, m as AlertTitle, mn as SheetOverlay, mr as SectionTitle, mt as DropdownMenuLabel, n as AlertDescription, nn as SelectValue, nr as Wizard, nt as DialogFooter, o as AlertDialogContent, on as SettingsRow, or as fieldMessageId, ot as DialogTitle, p as AlertDialogTrigger, pn as SheetHeader, pr as useToast, pt as DropdownMenuItem, q as ContextMenuSubContent, qn as TimeSelect, qt as Select, r as AlertDialog, rn as Separator, rr as WizardStep, rt as DialogHeader, s as AlertDialogDescription, sn as SettingsSection, sr as formatCalendarDate, st as DialogTrigger, t as Alert, tn as SelectTrigger, tr as UploadProgress, tt as DialogDescription, u as AlertDialogOverlay, un as SheetContent, ur as parseCalendarDate, ut as DropdownMenuCheckboxItem, v as AvatarImage, vn as SidebarDropZone, vt as DropdownMenuSeparator, w as CardContent, wn as StatusPill, wt as EmptyState, x as CATEGORY_TONES, xn as SkeletonTable, xt as DropdownMenuSubContent, y as Badge, yn as Skeleton, yt as DropdownMenuShortcut, z as ContextMenuItem, zn as Tag, zt as PopoverAnchor } from "./primitives-CxpjGadw.js";
|
|
3
3
|
import { i as WorkspacePaneHeader, n as SHELL_INSET_GUTTER, r as ShellHeader, t as SHELL_HEADER_HEIGHT } from "./shell-header-CTh3oV_e.js";
|
|
4
4
|
import { C as WorkspaceSurfaceTitle, S as WorkspaceSurfaceFrame, _ 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, x as WorkspaceSurface, y as DirectoryPane } from "./workspace-BJgSt2WW.js";
|
|
@@ -6,7 +6,7 @@ import { i as VaultTree, n as filterFileNodes, r as VAULT_TREE_CHILD_PAGE, t as
|
|
|
6
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-C1ALa6lw.js";
|
|
7
7
|
import { i as modelBrandFor, n as ProviderMark, r as canonicalModelId, t as ModelBrandStack } from "./model-brand-BSr9on8C.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
|
-
import { t as usePtySession } from "./use-pty-session-
|
|
9
|
+
import { t as usePtySession } from "./use-pty-session-B5Q_i9RI.js";
|
|
10
10
|
import { CSV_PREVIEW_ROW_LIMIT, FileArtifactPane, FileCard, FileList, FilePreview, FileTabs, FileTree, PdfViewer, RichFileTree, configurePdfViewer, detectFileFormat, fileExtension, filterFileTree, getCodeLanguage, getFormatLabel, getSyntaxLanguage, parseCsv, resolveFilePreviewKind } from "./files.js";
|
|
11
11
|
import { n as PreviewView, t as EmbeddedAppView } from "./embedded-app-view-CYb9hevq.js";
|
|
12
12
|
import { OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, OpenUIArtifactRenderer, findUnsupportedOpenUINode, validateOpenUIJsonArtifact, validateOpenUIJsonNode } from "./openui.js";
|
|
@@ -767,10 +767,56 @@ function withConfig(base, cfg) {
|
|
|
767
767
|
* neither — dropping the envelope would leave the two indistinguishable in the
|
|
768
768
|
* detail view, which is the one place that promises every field.
|
|
769
769
|
*/
|
|
770
|
+
/**
|
|
771
|
+
* Title a step by the id its author gave it, when that names it better than
|
|
772
|
+
* its kind does. A graph of a real workflow is mostly the same few kinds — a
|
|
773
|
+
* factory is nine "GitHub" steps and a handful of decisions whose own titles
|
|
774
|
+
* are run-time templates — so titling by kind makes every node look like its
|
|
775
|
+
* neighbour. The author's id ("open-pr", "ship-gate", "monitor-note") is the
|
|
776
|
+
* one name that says what each is FOR.
|
|
777
|
+
*
|
|
778
|
+
* An agent keeps its profile's role ("Factory reviewer"), which already says
|
|
779
|
+
* that; it takes the id only when it has no readable role. A decision keeps a
|
|
780
|
+
* title its author wrote as plain text, and takes the id when that title is a
|
|
781
|
+
* template the graph would show with its `${...}` unresolved. Every other
|
|
782
|
+
* kind takes the id, and what the kind does moves to the subtitle, where the
|
|
783
|
+
* provider's logo still marks it.
|
|
784
|
+
*/
|
|
785
|
+
/** An id the editor minted rather than an author chose: the kind's own slug
|
|
786
|
+
* (`agent-run`, `integration-invoke-2`) or a positional `step-N`. Titling by
|
|
787
|
+
* one would only restate the kind, worse. */
|
|
788
|
+
function isMachineStepId(id, kind) {
|
|
789
|
+
if (/^step-\d+$/.test(id)) return true;
|
|
790
|
+
if (!kind) return false;
|
|
791
|
+
const slug = kind.toLowerCase().replace(/[^a-z0-9]+/g, "-");
|
|
792
|
+
return id === slug || new RegExp(`^${slug}-\\d+$`).test(id);
|
|
793
|
+
}
|
|
794
|
+
function titledByStep(base, rec) {
|
|
795
|
+
const id = str(rec.id);
|
|
796
|
+
if (!id || isMachineStepId(id, base.kind)) return base;
|
|
797
|
+
const role = humanizeIdentifier(id);
|
|
798
|
+
if (base.kind === "agent.run") return base.title === "AI Agent" ? {
|
|
799
|
+
...base,
|
|
800
|
+
title: role
|
|
801
|
+
} : base;
|
|
802
|
+
if (base.kind === "decision") {
|
|
803
|
+
const authored = str(asRecord(rec.decision).title);
|
|
804
|
+
return authored && !authored.includes("${") ? base : {
|
|
805
|
+
...base,
|
|
806
|
+
title: role
|
|
807
|
+
};
|
|
808
|
+
}
|
|
809
|
+
const what = [base.title, base.subtitle].filter(Boolean).join(" · ");
|
|
810
|
+
return {
|
|
811
|
+
...base,
|
|
812
|
+
title: role,
|
|
813
|
+
...what ? { subtitle: what } : {}
|
|
814
|
+
};
|
|
815
|
+
}
|
|
770
816
|
function describeAction(action) {
|
|
771
817
|
const rec = asRecord(action);
|
|
772
818
|
const kind = actionKind(rec);
|
|
773
|
-
const base = describeActionBase(action);
|
|
819
|
+
const base = titledByStep(describeActionBase(action), rec);
|
|
774
820
|
const config = toJsonSafe(asRecord(kind ? rec[kind] : {}));
|
|
775
821
|
for (const key of CONTROL_FLOW_KEYS) if (rec[key] !== void 0) config[key] = toJsonSafe(rec[key]);
|
|
776
822
|
return Object.keys(config).length > 0 ? {
|
|
@@ -1228,7 +1274,8 @@ function buildWorkflowGraph(yaml, options) {
|
|
|
1228
1274
|
};
|
|
1229
1275
|
addEdge(spec.from, spec.to, "spine", spec.whenLabel);
|
|
1230
1276
|
}
|
|
1231
|
-
const
|
|
1277
|
+
const loopBack = classifyBackEdges(logical.map((n) => n.id), edges);
|
|
1278
|
+
const rootward = new Set(edges.filter((e) => !loopBack.has(e.id)).map((e) => e.target));
|
|
1232
1279
|
for (const n of logical) {
|
|
1233
1280
|
if (triggerNodeIndex(n.id) !== null) continue;
|
|
1234
1281
|
if (rootward.has(n.id)) continue;
|
|
@@ -1252,7 +1299,11 @@ function buildWorkflowGraph(yaml, options) {
|
|
|
1252
1299
|
return {
|
|
1253
1300
|
nodes: (options?.wrap && direction === "LR" && !labelled ? layoutSerpentine(logical, edges, rankSep, geo.crossSep) : null) ?? layoutLayers(logical, direction, rankSep, geo.crossSep),
|
|
1254
1301
|
edges,
|
|
1255
|
-
error: null
|
|
1302
|
+
error: null,
|
|
1303
|
+
spacing: {
|
|
1304
|
+
rank: rankSep,
|
|
1305
|
+
cross: geo.crossSep
|
|
1306
|
+
}
|
|
1256
1307
|
};
|
|
1257
1308
|
}
|
|
1258
1309
|
//#endregion
|
|
@@ -1328,7 +1379,8 @@ const STATUS_COLOR = {
|
|
|
1328
1379
|
running: STATUS_RUNNING,
|
|
1329
1380
|
waiting: STATUS_WAITING,
|
|
1330
1381
|
succeeded: STATUS_DONE,
|
|
1331
|
-
failed: STATUS_FAILED
|
|
1382
|
+
failed: STATUS_FAILED,
|
|
1383
|
+
skipped: STATUS_QUEUED
|
|
1332
1384
|
};
|
|
1333
1385
|
/** An edge reads by the status of the node it points AT — with the 2026-10-09
|
|
1334
1386
|
* fix: SETTLED edges go quiet. A succeeded run used to paint every edge green
|
|
@@ -1346,7 +1398,8 @@ const STATUS_LABEL = {
|
|
|
1346
1398
|
running: "Running",
|
|
1347
1399
|
waiting: "Waiting on you",
|
|
1348
1400
|
succeeded: "Done",
|
|
1349
|
-
failed: "Failed"
|
|
1401
|
+
failed: "Failed",
|
|
1402
|
+
skipped: "Not taken"
|
|
1350
1403
|
};
|
|
1351
1404
|
/** @deprecated `StatusPill` now renders ui's StatusPill from `STATUS_TONE`;
|
|
1352
1405
|
* kept for consumers that styled their own pill from it.
|
|
@@ -1378,6 +1431,11 @@ const STATUS_PILL = {
|
|
|
1378
1431
|
background: "var(--surface-danger-bg)",
|
|
1379
1432
|
color: "var(--surface-danger-text)",
|
|
1380
1433
|
borderColor: "var(--surface-danger-border)"
|
|
1434
|
+
},
|
|
1435
|
+
skipped: {
|
|
1436
|
+
background: "transparent",
|
|
1437
|
+
color: "hsl(var(--muted-foreground))",
|
|
1438
|
+
borderColor: "color-mix(in srgb, hsl(var(--muted-foreground)) 28%, transparent)"
|
|
1381
1439
|
}
|
|
1382
1440
|
};
|
|
1383
1441
|
/** The card's border + ring once a node has live run state. The emphasis
|
|
@@ -1403,6 +1461,11 @@ function statusBorder(status) {
|
|
|
1403
1461
|
};
|
|
1404
1462
|
}
|
|
1405
1463
|
case "queued": return { borderColor: "hsl(var(--border))" };
|
|
1464
|
+
case "skipped": return {
|
|
1465
|
+
borderColor: "hsl(var(--muted-foreground) / 0.45)",
|
|
1466
|
+
borderStyle: "dashed",
|
|
1467
|
+
opacity: .5
|
|
1468
|
+
};
|
|
1406
1469
|
case "succeeded": return {
|
|
1407
1470
|
borderColor: RESTING_BORDER,
|
|
1408
1471
|
boxShadow: RESTING_SHADOW
|
|
@@ -1560,7 +1623,8 @@ const STATUS_TONE = {
|
|
|
1560
1623
|
running: "running",
|
|
1561
1624
|
waiting: "warning",
|
|
1562
1625
|
succeeded: "neutral",
|
|
1563
|
-
failed: "danger"
|
|
1626
|
+
failed: "danger",
|
|
1627
|
+
skipped: "neutral"
|
|
1564
1628
|
};
|
|
1565
1629
|
/** The status pill in a card's header — the one place the run state is spelled
|
|
1566
1630
|
* out in words. ui's `StatusPill`, so a node's state carries the same glyph,
|
|
@@ -1642,6 +1706,7 @@ function emptySlotLabel(status) {
|
|
|
1642
1706
|
case "queued": return "Not run yet";
|
|
1643
1707
|
case "succeeded": return "No output";
|
|
1644
1708
|
case "failed": return "No error reported";
|
|
1709
|
+
case "skipped": return "Not taken this run";
|
|
1645
1710
|
default: return;
|
|
1646
1711
|
}
|
|
1647
1712
|
}
|
package/dist/styles.css
CHANGED
|
@@ -283,6 +283,9 @@
|
|
|
283
283
|
white-space: nowrap;
|
|
284
284
|
border-width: 0;
|
|
285
285
|
}
|
|
286
|
+
.\!fixed {
|
|
287
|
+
position: fixed !important;
|
|
288
|
+
}
|
|
286
289
|
.absolute {
|
|
287
290
|
position: absolute;
|
|
288
291
|
}
|
|
@@ -298,6 +301,9 @@
|
|
|
298
301
|
.sticky {
|
|
299
302
|
position: sticky;
|
|
300
303
|
}
|
|
304
|
+
.\!inset-3 {
|
|
305
|
+
inset: calc(var(--spacing) * 3) !important;
|
|
306
|
+
}
|
|
301
307
|
.inset-0 {
|
|
302
308
|
inset: 0px;
|
|
303
309
|
}
|
|
@@ -433,6 +439,9 @@
|
|
|
433
439
|
.\!z-10 {
|
|
434
440
|
z-index: 10 !important;
|
|
435
441
|
}
|
|
442
|
+
.\!z-40 {
|
|
443
|
+
z-index: 40 !important;
|
|
444
|
+
}
|
|
436
445
|
.z-0 {
|
|
437
446
|
z-index: 0;
|
|
438
447
|
}
|
|
@@ -712,6 +721,9 @@
|
|
|
712
721
|
-webkit-box-orient: vertical;
|
|
713
722
|
-webkit-line-clamp: 6;
|
|
714
723
|
}
|
|
724
|
+
.\!hidden {
|
|
725
|
+
display: none !important;
|
|
726
|
+
}
|
|
715
727
|
.block {
|
|
716
728
|
display: block;
|
|
717
729
|
}
|
|
@@ -826,6 +838,9 @@
|
|
|
826
838
|
.\!h-2\.5 {
|
|
827
839
|
height: calc(var(--spacing) * 2.5) !important;
|
|
828
840
|
}
|
|
841
|
+
.\!h-auto {
|
|
842
|
+
height: auto !important;
|
|
843
|
+
}
|
|
829
844
|
.h-0\.5 {
|
|
830
845
|
height: calc(var(--spacing) * 0.5);
|
|
831
846
|
}
|
|
@@ -940,6 +955,9 @@
|
|
|
940
955
|
.h-\[34rem\] {
|
|
941
956
|
height: 34rem;
|
|
942
957
|
}
|
|
958
|
+
.h-\[36rem\] {
|
|
959
|
+
height: 36rem;
|
|
960
|
+
}
|
|
943
961
|
.h-\[72\%\] {
|
|
944
962
|
height: 72%;
|
|
945
963
|
}
|
|
@@ -1186,6 +1204,9 @@
|
|
|
1186
1204
|
.\!w-2\.5 {
|
|
1187
1205
|
width: calc(var(--spacing) * 2.5) !important;
|
|
1188
1206
|
}
|
|
1207
|
+
.\!w-auto {
|
|
1208
|
+
width: auto !important;
|
|
1209
|
+
}
|
|
1189
1210
|
.w-0 {
|
|
1190
1211
|
width: 0px;
|
|
1191
1212
|
}
|
|
@@ -1348,6 +1369,9 @@
|
|
|
1348
1369
|
.w-\[268px\] {
|
|
1349
1370
|
width: 268px;
|
|
1350
1371
|
}
|
|
1372
|
+
.w-\[358px\] {
|
|
1373
|
+
width: 358px;
|
|
1374
|
+
}
|
|
1351
1375
|
.w-\[360px\] {
|
|
1352
1376
|
width: 360px;
|
|
1353
1377
|
}
|
|
@@ -1381,6 +1405,9 @@
|
|
|
1381
1405
|
.w-\[1000px\] {
|
|
1382
1406
|
width: 1000px;
|
|
1383
1407
|
}
|
|
1408
|
+
.w-\[1100px\] {
|
|
1409
|
+
width: 1100px;
|
|
1410
|
+
}
|
|
1384
1411
|
.w-\[calc\(100vw-32px\)\] {
|
|
1385
1412
|
width: calc(100vw - 32px);
|
|
1386
1413
|
}
|
|
@@ -2976,6 +3003,12 @@
|
|
|
2976
3003
|
background-color: color-mix(in oklab, hsl(var(--primary)) 20%, transparent);
|
|
2977
3004
|
}
|
|
2978
3005
|
}
|
|
3006
|
+
.bg-primary\/\[0\.04\] {
|
|
3007
|
+
background-color: hsl(var(--primary));
|
|
3008
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
3009
|
+
background-color: color-mix(in oklab, hsl(var(--primary)) 4%, transparent);
|
|
3010
|
+
}
|
|
3011
|
+
}
|
|
2979
3012
|
.bg-red-500 {
|
|
2980
3013
|
background-color: var(--color-red-500);
|
|
2981
3014
|
}
|
|
@@ -3963,6 +3996,12 @@
|
|
|
3963
3996
|
color: color-mix(in oklab, hsl(var(--primary)) 70%, transparent);
|
|
3964
3997
|
}
|
|
3965
3998
|
}
|
|
3999
|
+
.text-primary\/80 {
|
|
4000
|
+
color: hsl(var(--primary));
|
|
4001
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4002
|
+
color: color-mix(in oklab, hsl(var(--primary)) 80%, transparent);
|
|
4003
|
+
}
|
|
4004
|
+
}
|
|
3966
4005
|
.text-red-400 {
|
|
3967
4006
|
color: var(--color-red-400);
|
|
3968
4007
|
}
|
|
@@ -4065,6 +4104,10 @@
|
|
|
4065
4104
|
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
4066
4105
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
4067
4106
|
}
|
|
4107
|
+
.shadow-2xl {
|
|
4108
|
+
--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
|
|
4109
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
4110
|
+
}
|
|
4068
4111
|
.shadow-\[0_1px_2px_rgba\(0\,0\,0\,0\.2\)\] {
|
|
4069
4112
|
--tw-shadow: 0 1px 2px var(--tw-shadow-color, rgba(0,0,0,0.2));
|
|
4070
4113
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -5572,6 +5615,9 @@
|
|
|
5572
5615
|
-webkit-box-orient: vertical;
|
|
5573
5616
|
-webkit-line-clamp: 3;
|
|
5574
5617
|
}
|
|
5618
|
+
.sm\:\!block {
|
|
5619
|
+
display: block !important;
|
|
5620
|
+
}
|
|
5575
5621
|
.sm\:flex {
|
|
5576
5622
|
display: flex;
|
|
5577
5623
|
}
|