@tangle-network/sandbox-ui 0.122.3 → 0.123.1

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/styles.css CHANGED
@@ -5,7 +5,6 @@
5
5
  :root, :host {
6
6
  --font-sans: "Inter", "Geist", ui-sans-serif, system-ui, -apple-system, sans-serif;
7
7
  --font-mono: "Geist Mono", "JetBrains Mono", ui-monospace, monospace;
8
- --color-red-200: oklch(88.5% 0.062 18.334);
9
8
  --color-red-400: oklch(70.4% 0.191 22.216);
10
9
  --color-red-500: oklch(63.7% 0.237 25.331);
11
10
  --color-red-600: oklch(57.7% 0.245 27.325);
@@ -576,6 +575,9 @@
576
575
  .mt-auto {
577
576
  margin-top: auto;
578
577
  }
578
+ .mt-px {
579
+ margin-top: 1px;
580
+ }
579
581
  .mr-1 {
580
582
  margin-right: var(--spacing);
581
583
  }
@@ -2178,6 +2180,9 @@
2178
2180
  .border-\[var\(--md3-outline-variant\)\] {
2179
2181
  border-color: var(--md3-outline-variant);
2180
2182
  }
2183
+ .border-\[var\(--md3-surface-container-lowest\)\] {
2184
+ border-color: var(--md3-surface-container-lowest);
2185
+ }
2181
2186
  .border-\[var\(--status-running\)\]\/30 {
2182
2187
  border-color: var(--status-running);
2183
2188
  @supports (color: color-mix(in lab, red, red)) {
@@ -2436,6 +2441,9 @@
2436
2441
  .bg-\[var\(--md3-surface-container\)\] {
2437
2442
  background-color: var(--md3-surface-container);
2438
2443
  }
2444
+ .bg-\[var\(--md3-surface-container-lowest\)\] {
2445
+ background-color: var(--md3-surface-container-lowest);
2446
+ }
2439
2447
  .bg-\[var\(--run-mix-cancelled\)\] {
2440
2448
  background-color: var(--run-mix-cancelled);
2441
2449
  }
@@ -3200,6 +3208,9 @@
3200
3208
  .text-\[length\:var\(--font-size-3xl\,1\.875rem\)\] {
3201
3209
  font-size: var(--font-size-3xl,1.875rem);
3202
3210
  }
3211
+ .text-\[length\:var\(--font-size-base\)\] {
3212
+ font-size: var(--font-size-base);
3213
+ }
3203
3214
  .text-\[length\:var\(--font-size-display\,3rem\)\] {
3204
3215
  font-size: var(--font-size-display,3rem);
3205
3216
  }
@@ -3215,6 +3226,9 @@
3215
3226
  .text-\[length\:var\(--font-size-xl\,1\.25rem\)\] {
3216
3227
  font-size: var(--font-size-xl,1.25rem);
3217
3228
  }
3229
+ .text-\[length\:var\(--font-size-xs\)\] {
3230
+ font-size: var(--font-size-xs);
3231
+ }
3218
3232
  .leading-4 {
3219
3233
  --tw-leading: calc(var(--spacing) * 4);
3220
3234
  line-height: calc(var(--spacing) * 4);
@@ -3449,12 +3463,6 @@
3449
3463
  .text-\[var\(--code-success\,\#10B981\)\] {
3450
3464
  color: var(--code-success,#10B981);
3451
3465
  }
3452
- .text-\[var\(--font-size-base\)\] {
3453
- color: var(--font-size-base);
3454
- }
3455
- .text-\[var\(--font-size-xs\)\] {
3456
- color: var(--font-size-xs);
3457
- }
3458
3466
  .text-\[var\(--md3-on-primary\)\] {
3459
3467
  color: var(--md3-on-primary);
3460
3468
  }
@@ -3515,6 +3523,9 @@
3515
3523
  .text-\[var\(--text-secondary\)\] {
3516
3524
  color: var(--text-secondary);
3517
3525
  }
3526
+ .text-\[var\(--x\)\] {
3527
+ color: var(--x);
3528
+ }
3518
3529
  .text-\[var\(--x\)\]\/40 {
3519
3530
  color: var(--x);
3520
3531
  @supports (color: color-mix(in lab, red, red)) {
@@ -3632,9 +3643,6 @@
3632
3643
  color: color-mix(in oklab, hsl(var(--primary)) 70%, transparent);
3633
3644
  }
3634
3645
  }
3635
- .text-red-200 {
3636
- color: var(--color-red-200);
3637
- }
3638
3646
  .text-red-400 {
3639
3647
  color: var(--color-red-400);
3640
3648
  }
@@ -4285,14 +4293,6 @@
4285
4293
  background-color: color-mix(in oklab, hsl(var(--accent)) 40%, transparent);
4286
4294
  }
4287
4295
  }
4288
- .hover\:bg-accent\/45:hover {
4289
- background-color: hsl(var(--accent));
4290
- }
4291
- @supports (color: color-mix(in lab, red, red)) {
4292
- .hover\:bg-accent\/45:hover {
4293
- background-color: color-mix(in oklab, hsl(var(--accent)) 45%, transparent);
4294
- }
4295
- }
4296
4296
  .hover\:bg-accent\/50:hover {
4297
4297
  background-color: hsl(var(--accent));
4298
4298
  }
@@ -4434,6 +4434,14 @@
4434
4434
  .hover\:bg-surface-container-highest:hover {
4435
4435
  background-color: var(--md3-surface-container-highest);
4436
4436
  }
4437
+ .hover\:bg-white\/5:hover {
4438
+ background-color: color-mix(in srgb, #fff 5%, transparent);
4439
+ }
4440
+ @supports (color: color-mix(in lab, red, red)) {
4441
+ .hover\:bg-white\/5:hover {
4442
+ background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
4443
+ }
4444
+ }
4437
4445
  .hover\:bg-yellow-600\/30:hover {
4438
4446
  background-color: color-mix(in srgb, oklch(68.1% 0.162 75.834) 30%, transparent);
4439
4447
  }
@@ -5330,6 +5338,78 @@
5330
5338
  .\[\&\>\*\]\:min-w-0 > * {
5331
5339
  min-width: 0px;
5332
5340
  }
5341
+ .\[\&\>\:is\(ul\,ol\)\:last-child\>li\:last-child\]\:after\:ml-0\.5 > :is(ul, ol):last-child > li:last-child::after {
5342
+ content: var(--tw-content);
5343
+ margin-left: calc(var(--spacing) * 0.5);
5344
+ }
5345
+ .\[\&\>\:is\(ul\,ol\)\:last-child\>li\:last-child\]\:after\:inline-block > :is(ul, ol):last-child > li:last-child::after {
5346
+ content: var(--tw-content);
5347
+ display: inline-block;
5348
+ }
5349
+ .\[\&\>\:is\(ul\,ol\)\:last-child\>li\:last-child\]\:after\:h-\[1em\] > :is(ul, ol):last-child > li:last-child::after {
5350
+ content: var(--tw-content);
5351
+ height: 1em;
5352
+ }
5353
+ .\[\&\>\:is\(ul\,ol\)\:last-child\>li\:last-child\]\:after\:w-0\.5 > :is(ul, ol):last-child > li:last-child::after {
5354
+ content: var(--tw-content);
5355
+ width: calc(var(--spacing) * 0.5);
5356
+ }
5357
+ .\[\&\>\:is\(ul\,ol\)\:last-child\>li\:last-child\]\:after\:animate-pulse > :is(ul, ol):last-child > li:last-child::after {
5358
+ content: var(--tw-content);
5359
+ animation: var(--animate-pulse);
5360
+ }
5361
+ .\[\&\>\:is\(ul\,ol\)\:last-child\>li\:last-child\]\:after\:rounded-full > :is(ul, ol):last-child > li:last-child::after {
5362
+ content: var(--tw-content);
5363
+ border-radius: var(--radius-full);
5364
+ }
5365
+ .\[\&\>\:is\(ul\,ol\)\:last-child\>li\:last-child\]\:after\:bg-muted-foreground > :is(ul, ol):last-child > li:last-child::after {
5366
+ content: var(--tw-content);
5367
+ background-color: hsl(var(--muted-foreground));
5368
+ }
5369
+ .\[\&\>\:is\(ul\,ol\)\:last-child\>li\:last-child\]\:after\:align-text-bottom > :is(ul, ol):last-child > li:last-child::after {
5370
+ content: var(--tw-content);
5371
+ vertical-align: text-bottom;
5372
+ }
5373
+ .\[\&\>\:is\(ul\,ol\)\:last-child\>li\:last-child\]\:after\:content-\[\'\'\] > :is(ul, ol):last-child > li:last-child::after {
5374
+ --tw-content: '';
5375
+ content: var(--tw-content);
5376
+ }
5377
+ .\[\&\>\:last-child\:not\(ul\,ol\)\]\:after\:ml-0\.5 > :last-child:not(ul, ol)::after {
5378
+ content: var(--tw-content);
5379
+ margin-left: calc(var(--spacing) * 0.5);
5380
+ }
5381
+ .\[\&\>\:last-child\:not\(ul\,ol\)\]\:after\:inline-block > :last-child:not(ul, ol)::after {
5382
+ content: var(--tw-content);
5383
+ display: inline-block;
5384
+ }
5385
+ .\[\&\>\:last-child\:not\(ul\,ol\)\]\:after\:h-\[1em\] > :last-child:not(ul, ol)::after {
5386
+ content: var(--tw-content);
5387
+ height: 1em;
5388
+ }
5389
+ .\[\&\>\:last-child\:not\(ul\,ol\)\]\:after\:w-0\.5 > :last-child:not(ul, ol)::after {
5390
+ content: var(--tw-content);
5391
+ width: calc(var(--spacing) * 0.5);
5392
+ }
5393
+ .\[\&\>\:last-child\:not\(ul\,ol\)\]\:after\:animate-pulse > :last-child:not(ul, ol)::after {
5394
+ content: var(--tw-content);
5395
+ animation: var(--animate-pulse);
5396
+ }
5397
+ .\[\&\>\:last-child\:not\(ul\,ol\)\]\:after\:rounded-full > :last-child:not(ul, ol)::after {
5398
+ content: var(--tw-content);
5399
+ border-radius: var(--radius-full);
5400
+ }
5401
+ .\[\&\>\:last-child\:not\(ul\,ol\)\]\:after\:bg-muted-foreground > :last-child:not(ul, ol)::after {
5402
+ content: var(--tw-content);
5403
+ background-color: hsl(var(--muted-foreground));
5404
+ }
5405
+ .\[\&\>\:last-child\:not\(ul\,ol\)\]\:after\:align-text-bottom > :last-child:not(ul, ol)::after {
5406
+ content: var(--tw-content);
5407
+ vertical-align: text-bottom;
5408
+ }
5409
+ .\[\&\>\:last-child\:not\(ul\,ol\)\]\:after\:content-\[\'\'\] > :last-child:not(ul, ol)::after {
5410
+ --tw-content: '';
5411
+ content: var(--tw-content);
5412
+ }
5333
5413
  @media (width < 40rem) {
5334
5414
  .max-sm\:\[\&\>div\:not\(\:nth-child\(2n\+1\)\)\]\:border-l > div:not(:nth-child(2n+1)) {
5335
5415
  border-left-style: var(--tw-border-style);
@@ -5509,11 +5589,11 @@
5509
5589
  --surface-success-bg: #2f5146;
5510
5590
  --surface-success-border: #3c7760;
5511
5591
  --surface-success-text: #5ed7a4;
5512
- --surface-warning-bg: #6a402c;
5513
- --surface-warning-border: #916436;
5592
+ --surface-warning-bg: #4b4232;
5593
+ --surface-warning-border: #7a6236;
5514
5594
  --surface-warning-text: #f4c14f;
5515
- --surface-danger-bg: #733b36;
5516
- --surface-danger-border: #9a5b56;
5595
+ --surface-danger-bg: #533f3e;
5596
+ --surface-danger-border: #86524e;
5517
5597
  --surface-danger-text: #ffada9;
5518
5598
  --surface-info-bg: #2d4e67;
5519
5599
  --surface-info-border: #3d7292;
@@ -5521,9 +5601,9 @@
5521
5601
  --surface-teal-bg: #042f2e;
5522
5602
  --surface-teal-border: #134e4a;
5523
5603
  --surface-teal-text: #2dd4bf;
5524
- --surface-violet-bg: #1e1b4b;
5525
- --surface-violet-border: #3730a3;
5526
- --surface-violet-text: #B8B2F5;
5604
+ --surface-violet-bg: #403d66;
5605
+ --surface-violet-border: #5f58b8;
5606
+ --surface-violet-text: #c9c4ff;
5527
5607
  --surface-orange-bg: #431407;
5528
5608
  --surface-orange-border: #7c2d12;
5529
5609
  --surface-orange-text: #fb923c;
@@ -5641,7 +5721,7 @@
5641
5721
  --tool-card-py: 0.5rem;
5642
5722
  --tool-icon-size: 1.75rem;
5643
5723
  --code-header-bg: hsl(var(--hsl-background));
5644
- --syntax-comment: #8b8fbc;
5724
+ --syntax-comment: #9ea2cc;
5645
5725
  --syntax-keyword: #A78FFF;
5646
5726
  --syntax-string: #10b981;
5647
5727
  --syntax-function: #6D9FFF;
package/dist/tokens.css CHANGED
@@ -197,11 +197,11 @@
197
197
  --surface-success-bg: #2f5146;
198
198
  --surface-success-border: #3c7760;
199
199
  --surface-success-text: #5ed7a4;
200
- --surface-warning-bg: #6a402c;
201
- --surface-warning-border: #916436;
200
+ --surface-warning-bg: #4b4232;
201
+ --surface-warning-border: #7a6236;
202
202
  --surface-warning-text: #f4c14f;
203
- --surface-danger-bg: #733b36;
204
- --surface-danger-border: #9a5b56;
203
+ --surface-danger-bg: #533f3e;
204
+ --surface-danger-border: #86524e;
205
205
  --surface-danger-text: #ffada9;
206
206
  --surface-info-bg: #2d4e67;
207
207
  --surface-info-border: #3d7292;
@@ -209,9 +209,9 @@
209
209
  --surface-teal-bg: #042f2e;
210
210
  --surface-teal-border: #134e4a;
211
211
  --surface-teal-text: #2dd4bf;
212
- --surface-violet-bg: #1e1b4b;
213
- --surface-violet-border: #3730a3;
214
- --surface-violet-text: #B8B2F5;
212
+ --surface-violet-bg: #403d66;
213
+ --surface-violet-border: #5f58b8;
214
+ --surface-violet-text: #c9c4ff;
215
215
  --surface-orange-bg: #431407;
216
216
  --surface-orange-border: #7c2d12;
217
217
  --surface-orange-text: #fb923c;
@@ -409,7 +409,7 @@
409
409
 
410
410
  /* Syntax highlighting — the light palette is authored below. */
411
411
  --code-header-bg: hsl(var(--hsl-background));
412
- --syntax-comment: #8b8fbc;
412
+ --syntax-comment: #9ea2cc;
413
413
  --syntax-keyword: #A78FFF;
414
414
  --syntax-string: #10b981;
415
415
  --syntax-function: #6D9FFF;
@@ -1,4 +1,6 @@
1
1
  import { a as modelBrandFor, n as ModelBrandStack, t as ModelBrandIdentity } from "./model-brand-B9A4H9pJ.js";
2
+ import { ReactElement } from "react";
3
+ import { LucideIcon } from "lucide-react";
2
4
  import "@xyflow/react";
3
5
  import "@xyflow/react/dist/style.css";
4
6
  //#region src/workflows/model.d.ts
@@ -488,4 +490,167 @@ interface WorkflowGraphProps {
488
490
  //#region src/workflows/WorkflowGraphLazy.d.ts
489
491
  declare function WorkflowGraph(props: WorkflowGraphProps): import("react").JSX.Element;
490
492
  //#endregion
491
- export { type BuildWorkflowGraphOptions, type ModelBrandIdentity, ModelBrandStack, type WfEdge, type WfEdgeKind, type WfEdgeSpec, type WfGraph, type WfNode, type WfNodeData, type WfNodeState, type WfNodeStatus, type WfNodeTone, type WfProblem, type WfProblemSeverity, WorkflowGraph as WorkflowGraphLazy, type WorkflowGraphProps, modelBrandFor };
493
+ //#region src/workflows/node-ui.d.ts
494
+ export declare const STATUS_COLOR: Record<WfNodeStatus, string>;
495
+ export declare const STATUS_LABEL: Record<WfNodeStatus, string>;
496
+ /** Status pill styling — a tinted well in the status color. Built from the
497
+ * semantic surface trio (bg/border/text) so the pill keeps its contrast in both
498
+ * themes rather than washing out in one of them. */
499
+ export declare const STATUS_PILL: Record<WfNodeStatus, {
500
+ background: string;
501
+ color: string;
502
+ borderColor: string;
503
+ }>;
504
+ export declare const KIND_ICON: Record<string, LucideIcon>;
505
+ /** The status pill in a card's header — the one place the run state is spelled
506
+ * out in words. */
507
+ declare function StatusPill({ status }: {
508
+ status: WfNodeStatus;
509
+ }): import("react").JSX.Element;
510
+ /**
511
+ * A node's MARK, centered in a tile the caller sizes: the provider's brand logo
512
+ * when the step runs against a connector — the way n8n makes a node recognizable
513
+ * before a word of it is read — else the kind's glyph, tinted by tone. Both
514
+ * densities render the same mark at different sizes, so a node looks like itself
515
+ * whether it's an icon tile or a full card.
516
+ */
517
+ export declare function NodeMark({ kind, provider, model, accent, tile }: {
518
+ kind?: string;
519
+ provider?: string;
520
+ /** The model an agent runs, e.g. "anthropic/claude-sonnet-4-5". Its lab/host
521
+ * brand mark identifies the node far faster than a generic sparkle. */
522
+ model?: string;
523
+ accent: string;
524
+ /** Edge length of the square the mark is centered in. */
525
+ tile: number;
526
+ }): import("react").JSX.Element;
527
+ //#endregion
528
+ //#region src/workflows/naming.d.ts
529
+ /**
530
+ * Human-facing naming for workflow nodes. A definition addresses things by
531
+ * machine identifier — an action kind (`agent.run`), a hub action path
532
+ * (`github.pulls.reviews.create`), a profile slug (`pr-reviewer`) — and showing
533
+ * those verbatim on a node makes the graph read like a config file. These turn
534
+ * an identifier into the label a person would say out loud.
535
+ *
536
+ * Pure and dependency-free so the naming rules are unit-testable without the
537
+ * YAML parser or a render.
538
+ */
539
+ /** How the first word of a humanized identifier is cased. An initialism is
540
+ * ALWAYS upper-cased whichever is chosen — that is the whole point of the table
541
+ * above, and `.toLowerCase()`ing the result afterwards silently undoes it
542
+ * ("List API keys" → "list api keys"). */
543
+ type LeadCase = "sentence" | "lower" | "title";
544
+ /**
545
+ * Humanize a machine identifier: `pr-reviewer` → "PR reviewer", `sandbox.spawn`
546
+ * → "Sandbox spawn", `postMessage` → "Post message". Known initialisms are
547
+ * upper-cased wherever they appear; `lead` picks the case of the rest.
548
+ *
549
+ * - `sentence` (default): "Create issue comment" — a label or a title.
550
+ * - `lower`: "create issue comment" — a fragment that sits INSIDE a phrase
551
+ * ("On pull request"), where a capital would read as a new sentence. An
552
+ * initialism still wins: `ci_run_completed` → "CI run completed", never
553
+ * "cI run completed".
554
+ * - `title`: "Google Sheets" — a brand/proper name.
555
+ *
556
+ * An identifier that carries no word characters is returned verbatim rather than
557
+ * blanked.
558
+ */
559
+ export declare function humanizeIdentifier(id: string, lead?: LeadCase): string;
560
+ /** A model slug without its provider prefix (`anthropic/claude-sonnet-5` →
561
+ * `claude-sonnet-5`) — the vendor is noise on a card whose width is the scarce
562
+ * resource, and the full slug stays in the node's config for the detail view. */
563
+ export declare function shortModel(model: string): string;
564
+ /** The parts of a hub action path (`<provider>.<resource…>.<operation>`). */
565
+ interface ActionPathParts {
566
+ /** The connector the action runs against (`github`). */
567
+ provider: string;
568
+ /** The trailing verb (`create`). */
569
+ operation: string;
570
+ /** Everything between provider and operation (`pulls.reviews`), when present —
571
+ * a two-segment path (`slack.postMessage`) has no resource. */
572
+ resource?: string;
573
+ }
574
+ /** Split a hub action path into provider / resource / operation. Null when the
575
+ * value isn't a dotted path (a `${…}` expression, or a bare word), so callers
576
+ * fall back to showing it verbatim instead of inventing structure. */
577
+ export declare function parseActionPath(path: string): ActionPathParts | null;
578
+ /**
579
+ * The operation label for an action path, in n8n's `operation: resource` shape:
580
+ * `github.pulls.reviews.create` → "create: pulls.reviews", `slack.postMessage`
581
+ * → "post message". The provider names the node itself (its title + logo), so
582
+ * it is deliberately absent here. A path we can't split is shown verbatim.
583
+ */
584
+ export declare function actionPathLabel(path: string): string;
585
+ //#endregion
586
+ //#region src/workflows/node-output.d.ts
587
+ /** The recovered shape of an output preview. */
588
+ type OutputShape = {
589
+ kind: "empty";
590
+ } |
591
+ /** A shallow JSON object, flattened to top-level key/value pairs for a
592
+ * key-value render. `truncated` when more pairs exist than we kept. */
593
+ {
594
+ kind: "json";
595
+ entries: [string, string][];
596
+ truncated: boolean;
597
+ } |
598
+ /** Structured-looking text we won't key/value render — a JSON array, a nested
599
+ * object, or a fragment the host clamped mid-token so it won't parse. Shown in
600
+ * monospace so it still reads as data, not prose. */
601
+ {
602
+ kind: "code";
603
+ text: string;
604
+ } |
605
+ /** Free-form prose (agent output, a status line, an error message). */
606
+ {
607
+ kind: "text";
608
+ text: string;
609
+ };
610
+ /**
611
+ * Flatten an agent's markdown answer into the sentence a person would read out
612
+ * of it. On a two-line card preview the syntax IS the noise: a `## Heading` mid
613
+ * paragraph, a `**bold**` run and a bullet's `-` all survive the clamp while the
614
+ * words that carry the meaning get pushed past it. Stripping the markup (never
615
+ * the words) is what turns the preview back into prose — the full text, markup
616
+ * and all, is still rendered by the node's detail view.
617
+ *
618
+ * Structure-only lines (a fence, a table rule) are dropped; everything else keeps
619
+ * its text and is joined into one flowing line.
620
+ */
621
+ export declare function condenseText(text: string): string;
622
+ /**
623
+ * Recover the shape of an output preview string. Only text that *begins* like
624
+ * JSON (`{`/`[`) is parse-attempted, so ordinary prose starting with a brace-free
625
+ * sentence is never mis-parsed. A begins-like-JSON string that fails to parse
626
+ * (the host clamped it mid-value) still renders as `code`, not prose, so it keeps
627
+ * its monospace/data affordance.
628
+ *
629
+ * `condenseMarkdown` says the prose IS markdown and may be flattened for the
630
+ * preview ({@link condenseText}). It is OFF by default, and the caller must only
631
+ * turn it on for text an agent actually authored as markdown. Applied to anything
632
+ * else it does not merely look wrong — it silently REWRITES the text: a stack
633
+ * trace's `__init__.py` loses its underscores, and a shell glob `src/**` pairs
634
+ * with a later `**` and both vanish. An error message is the one string a person
635
+ * reads to find out what broke; it must reach them exactly as it was thrown.
636
+ */
637
+ export declare function classifyOutput(preview: string | undefined, condenseMarkdown?: boolean): OutputShape;
638
+ /**
639
+ * Render a classified output preview's CONTENT (no surrounding frame — each node
640
+ * design supplies its own container/label). `rows` caps the visible lines so the
641
+ * body stays within a card's reserved output space; `tone="error"` colors it for
642
+ * a failure message.
643
+ *
644
+ * `rows="none"` renders the body UNCLAMPED, for a container that scrolls or is
645
+ * sized by its content — a drawer, a detail panel, a selection overlay. It is a
646
+ * word rather than a large number because there is no number that means "do not
647
+ * clamp": a count outside {@link CLAMP_BY_ROWS} falls back to two lines, so
648
+ * `rows={99}` asks for everything and silently shows the least.
649
+ */
650
+ export declare function NodeOutputBody({ shape, rows, tone }: {
651
+ shape: OutputShape;
652
+ rows?: number | "none";
653
+ tone?: "default" | "error";
654
+ }): ReactElement | null;
655
+ //#endregion
656
+ export { type ActionPathParts, type BuildWorkflowGraphOptions, type LeadCase, type ModelBrandIdentity, ModelBrandStack, StatusPill as NodeStatusPill, type OutputShape, type WfEdge, type WfEdgeKind, type WfEdgeSpec, type WfGraph, type WfNode, type WfNodeData, type WfNodeState, type WfNodeStatus, type WfNodeTone, type WfProblem, type WfProblemSeverity, WorkflowGraph as WorkflowGraphLazy, type WorkflowGraphProps, modelBrandFor };
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 { a as buildWorkflowGraph, c as triggerNodeIndex, i as branchNodeId, n as TRIGGER_NODE_ID, r as actionNodeId, s as triggerNodeId } from "./model-I-NIxeM-.js";
2
+ import { A as actionPathLabel, C as branchNodeId, D as triggerNodeIndex, E as triggerNodeId, M as parseActionPath, N as shortModel, S as actionNodeId, a as NodeMark, c as STATUS_COLOR, f as StatusPill, i as KIND_ICON, j as humanizeIdentifier, l as STATUS_LABEL, n as classifyOutput, r as condenseText, t as NodeOutputBody, u as STATUS_PILL, w as buildWorkflowGraph, x as TRIGGER_NODE_ID } from "./node-output-D-fYilAu.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-E2Gqe8sl.js").then((m) => ({ default: m.WorkflowGraph }))));
33
+ return lazy(() => retryImport(() => import("./WorkflowGraph-B4mkYGe3.js").then((m) => ({ default: m.WorkflowGraph }))));
34
34
  }
35
35
  var GraphErrorBoundary = class extends Component {
36
36
  state = { hasError: false };
@@ -81,4 +81,4 @@ function WorkflowGraph(props) {
81
81
  }, `${props.yaml}::${attempt}`);
82
82
  }
83
83
  //#endregion
84
- export { ModelBrandStack, TRIGGER_NODE_ID, WorkflowGraph as WorkflowGraphLazy, actionNodeId, branchNodeId, buildWorkflowGraph, modelBrandFor, triggerNodeId, triggerNodeIndex };
84
+ export { KIND_ICON, ModelBrandStack, NodeMark, NodeOutputBody, StatusPill as NodeStatusPill, STATUS_COLOR, STATUS_LABEL, STATUS_PILL, TRIGGER_NODE_ID, WorkflowGraph as WorkflowGraphLazy, actionNodeId, actionPathLabel, branchNodeId, buildWorkflowGraph, classifyOutput, condenseText, humanizeIdentifier, modelBrandFor, parseActionPath, shortModel, triggerNodeId, triggerNodeIndex };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.122.3",
3
+ "version": "0.123.1",
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",
@@ -127,8 +127,8 @@
127
127
  "@hocuspocus/provider": ">=2.15.0 <5.0.0",
128
128
  "@nanostores/react": ">=0.8.4 <2.0.0",
129
129
  "@tangle-network/agent-interface": "^1.0.0 || ^2.0.0",
130
- "@tangle-network/brand": "^1.10.0",
131
- "@tangle-network/ui": "^11.15.2",
130
+ "@tangle-network/brand": "^1.10.2",
131
+ "@tangle-network/ui": "^11.16.6",
132
132
  "@tanstack/react-query": "^5.0.0",
133
133
  "@tiptap/core": ">=3.20.4 <4.0.0",
134
134
  "@tiptap/extension-collaboration": ">=3.20.4 <4.0.0",
@@ -213,8 +213,8 @@
213
213
  "@storybook/react-vite": "^10.6.0",
214
214
  "@tailwindcss/postcss": "^4.3.3",
215
215
  "@tangle-network/agent-interface": "2.13.1",
216
- "@tangle-network/brand": "1.10.0",
217
- "@tangle-network/ui": "11.15.2",
216
+ "@tangle-network/brand": "1.10.2",
217
+ "@tangle-network/ui": "11.16.6",
218
218
  "@tanstack/react-query": "^5.104.0",
219
219
  "@testing-library/dom": "^10.4.2",
220
220
  "@testing-library/jest-dom": "^7.0.1",