@tangle-network/sandbox-ui 0.74.0 → 0.76.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/globals.css CHANGED
@@ -75,6 +75,7 @@
75
75
  --tracking-wider: 0.05em;
76
76
  --tracking-widest: 0.1em;
77
77
  --leading-tight: 1.25;
78
+ --leading-snug: 1.375;
78
79
  --leading-relaxed: 1.625;
79
80
  --radius-sm: 0.25rem;
80
81
  --radius-md: 0.375rem;
@@ -326,6 +327,9 @@
326
327
  .end {
327
328
  inset-inline-end: var(--spacing);
328
329
  }
330
+ .-top-1 {
331
+ top: calc(var(--spacing) * -1);
332
+ }
329
333
  .-top-1\.5 {
330
334
  top: calc(var(--spacing) * -1.5);
331
335
  }
@@ -371,6 +375,9 @@
371
375
  .top-full {
372
376
  top: 100%;
373
377
  }
378
+ .-right-1 {
379
+ right: calc(var(--spacing) * -1);
380
+ }
374
381
  .-right-1\.5 {
375
382
  right: calc(var(--spacing) * -1.5);
376
383
  }
@@ -542,6 +549,9 @@
542
549
  .mt-6 {
543
550
  margin-top: calc(var(--spacing) * 6);
544
551
  }
552
+ .mt-auto {
553
+ margin-top: auto;
554
+ }
545
555
  .mr-1 {
546
556
  margin-right: calc(var(--spacing) * 1);
547
557
  }
@@ -626,6 +636,12 @@
626
636
  -webkit-box-orient: vertical;
627
637
  -webkit-line-clamp: 2;
628
638
  }
639
+ .line-clamp-3 {
640
+ overflow: hidden;
641
+ display: -webkit-box;
642
+ -webkit-box-orient: vertical;
643
+ -webkit-line-clamp: 3;
644
+ }
629
645
  .block {
630
646
  display: block;
631
647
  }
@@ -697,9 +713,6 @@
697
713
  .\!h-2 {
698
714
  height: calc(var(--spacing) * 2) !important;
699
715
  }
700
- .h-0\.5 {
701
- height: calc(var(--spacing) * 0.5);
702
- }
703
716
  .h-1 {
704
717
  height: calc(var(--spacing) * 1);
705
718
  }
@@ -784,6 +797,9 @@
784
797
  .h-\[32rem\] {
785
798
  height: 32rem;
786
799
  }
800
+ .h-\[34rem\] {
801
+ height: 34rem;
802
+ }
787
803
  .h-\[70vh\] {
788
804
  height: 70vh;
789
805
  }
@@ -895,6 +911,9 @@
895
911
  .min-h-\[14rem\] {
896
912
  min-height: 14rem;
897
913
  }
914
+ .min-h-\[15px\] {
915
+ min-height: 15px;
916
+ }
898
917
  .min-h-\[16rem\] {
899
918
  min-height: 16rem;
900
919
  }
@@ -1186,6 +1205,9 @@
1186
1205
  .max-w-\[14rem\] {
1187
1206
  max-width: 14rem;
1188
1207
  }
1208
+ .max-w-\[45\%\] {
1209
+ max-width: 45%;
1210
+ }
1189
1211
  .max-w-\[75\%\] {
1190
1212
  max-width: 75%;
1191
1213
  }
@@ -1695,6 +1717,9 @@
1695
1717
  .rounded-\[2px\] {
1696
1718
  border-radius: 2px;
1697
1719
  }
1720
+ .rounded-\[3px\] {
1721
+ border-radius: 3px;
1722
+ }
1698
1723
  .rounded-\[4px\] {
1699
1724
  border-radius: 4px;
1700
1725
  }
@@ -1961,9 +1986,6 @@
1961
1986
  .border-foreground {
1962
1987
  border-color: var(--color-foreground);
1963
1988
  }
1964
- .border-green-500 {
1965
- border-color: var(--color-green-500);
1966
- }
1967
1989
  .border-green-500\/30 {
1968
1990
  border-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 30%, transparent);
1969
1991
  @supports (color: color-mix(in lab, red, red)) {
@@ -2009,9 +2031,6 @@
2009
2031
  border-color: color-mix(in oklab, var(--color-primary) 50%, transparent);
2010
2032
  }
2011
2033
  }
2012
- .border-red-500 {
2013
- border-color: var(--color-red-500);
2014
- }
2015
2034
  .border-red-500\/20 {
2016
2035
  border-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 20%, transparent);
2017
2036
  @supports (color: color-mix(in lab, red, red)) {
@@ -2321,12 +2340,6 @@
2321
2340
  .bg-green-500 {
2322
2341
  background-color: var(--color-green-500);
2323
2342
  }
2324
- .bg-green-600\/10 {
2325
- background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 10%, transparent);
2326
- @supports (color: color-mix(in lab, red, red)) {
2327
- background-color: color-mix(in oklab, var(--color-green-600) 10%, transparent);
2328
- }
2329
- }
2330
2343
  .bg-green-600\/20 {
2331
2344
  background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 20%, transparent);
2332
2345
  @supports (color: color-mix(in lab, red, red)) {
@@ -2456,6 +2469,12 @@
2456
2469
  .bg-surface-container-high {
2457
2470
  background-color: var(--color-surface-container-high);
2458
2471
  }
2472
+ .bg-surface-container-high\/60 {
2473
+ background-color: var(--color-surface-container-high);
2474
+ @supports (color: color-mix(in lab, red, red)) {
2475
+ background-color: color-mix(in oklab, var(--color-surface-container-high) 60%, transparent);
2476
+ }
2477
+ }
2459
2478
  .bg-surface-container-high\/95 {
2460
2479
  background-color: var(--color-surface-container-high);
2461
2480
  @supports (color: color-mix(in lab, red, red)) {
@@ -2687,6 +2706,9 @@
2687
2706
  .py-20 {
2688
2707
  padding-block: calc(var(--spacing) * 20);
2689
2708
  }
2709
+ .py-\[1px\] {
2710
+ padding-block: 1px;
2711
+ }
2690
2712
  .py-\[2px\] {
2691
2713
  padding-block: 2px;
2692
2714
  }
@@ -2714,6 +2736,9 @@
2714
2736
  .pt-2 {
2715
2737
  padding-top: calc(var(--spacing) * 2);
2716
2738
  }
2739
+ .pt-2\.5 {
2740
+ padding-top: calc(var(--spacing) * 2.5);
2741
+ }
2717
2742
  .pt-3 {
2718
2743
  padding-top: calc(var(--spacing) * 3);
2719
2744
  }
@@ -2861,6 +2886,9 @@
2861
2886
  .text-\[9px\] {
2862
2887
  font-size: 9px;
2863
2888
  }
2889
+ .text-\[10\.5px\] {
2890
+ font-size: 10.5px;
2891
+ }
2864
2892
  .text-\[10px\] {
2865
2893
  font-size: 10px;
2866
2894
  }
@@ -2941,6 +2969,10 @@
2941
2969
  --tw-leading: 1.55;
2942
2970
  line-height: 1.55;
2943
2971
  }
2972
+ .leading-\[15px\] {
2973
+ --tw-leading: 15px;
2974
+ line-height: 15px;
2975
+ }
2944
2976
  .leading-\[var\(--line-height-base\)\] {
2945
2977
  --tw-leading: var(--line-height-base);
2946
2978
  line-height: var(--line-height-base);
@@ -2961,6 +2993,10 @@
2961
2993
  --tw-leading: var(--leading-relaxed);
2962
2994
  line-height: var(--leading-relaxed);
2963
2995
  }
2996
+ .leading-snug {
2997
+ --tw-leading: var(--leading-snug);
2998
+ line-height: var(--leading-snug);
2999
+ }
2964
3000
  .leading-tight {
2965
3001
  --tw-leading: var(--leading-tight);
2966
3002
  line-height: var(--leading-tight);
@@ -3009,6 +3045,10 @@
3009
3045
  --tw-tracking: 0.08em;
3010
3046
  letter-spacing: 0.08em;
3011
3047
  }
3048
+ .tracking-\[0\.09em\] {
3049
+ --tw-tracking: 0.09em;
3050
+ letter-spacing: 0.09em;
3051
+ }
3012
3052
  .tracking-\[0\.12em\] {
3013
3053
  --tw-tracking: 0.12em;
3014
3054
  letter-spacing: 0.12em;
@@ -3229,9 +3269,6 @@
3229
3269
  .text-green-400 {
3230
3270
  color: var(--color-green-400);
3231
3271
  }
3232
- .text-green-600 {
3233
- color: var(--color-green-600);
3234
- }
3235
3272
  .text-muted-foreground {
3236
3273
  color: var(--color-muted-foreground);
3237
3274
  }
@@ -3259,6 +3296,12 @@
3259
3296
  color: color-mix(in oklab, var(--color-muted-foreground) 70%, transparent);
3260
3297
  }
3261
3298
  }
3299
+ .text-muted-foreground\/90 {
3300
+ color: color-mix(in srgb, hsl(var(--muted-foreground)) 90%, transparent);
3301
+ @supports (color: color-mix(in lab, red, red)) {
3302
+ color: color-mix(in oklab, var(--color-muted-foreground) 90%, transparent);
3303
+ }
3304
+ }
3262
3305
  .text-neutral-400 {
3263
3306
  color: var(--color-neutral-400);
3264
3307
  }
@@ -3469,12 +3512,6 @@
3469
3512
  --tw-ring-color: color-mix(in oklab, var(--color-primary) 25%, transparent);
3470
3513
  }
3471
3514
  }
3472
- .ring-primary\/40 {
3473
- --tw-ring-color: color-mix(in srgb, hsl(var(--primary)) 40%, transparent);
3474
- @supports (color: color-mix(in lab, red, red)) {
3475
- --tw-ring-color: color-mix(in oklab, var(--color-primary) 40%, transparent);
3476
- }
3477
- }
3478
3515
  .ring-offset-background {
3479
3516
  --tw-ring-offset-color: var(--color-background);
3480
3517
  }
package/dist/styles.css CHANGED
@@ -75,6 +75,7 @@
75
75
  --tracking-wider: 0.05em;
76
76
  --tracking-widest: 0.1em;
77
77
  --leading-tight: 1.25;
78
+ --leading-snug: 1.375;
78
79
  --leading-relaxed: 1.625;
79
80
  --radius-sm: 0.25rem;
80
81
  --radius-md: 0.375rem;
@@ -326,6 +327,9 @@
326
327
  .end {
327
328
  inset-inline-end: var(--spacing);
328
329
  }
330
+ .-top-1 {
331
+ top: calc(var(--spacing) * -1);
332
+ }
329
333
  .-top-1\.5 {
330
334
  top: calc(var(--spacing) * -1.5);
331
335
  }
@@ -371,6 +375,9 @@
371
375
  .top-full {
372
376
  top: 100%;
373
377
  }
378
+ .-right-1 {
379
+ right: calc(var(--spacing) * -1);
380
+ }
374
381
  .-right-1\.5 {
375
382
  right: calc(var(--spacing) * -1.5);
376
383
  }
@@ -542,6 +549,9 @@
542
549
  .mt-6 {
543
550
  margin-top: calc(var(--spacing) * 6);
544
551
  }
552
+ .mt-auto {
553
+ margin-top: auto;
554
+ }
545
555
  .mr-1 {
546
556
  margin-right: calc(var(--spacing) * 1);
547
557
  }
@@ -626,6 +636,12 @@
626
636
  -webkit-box-orient: vertical;
627
637
  -webkit-line-clamp: 2;
628
638
  }
639
+ .line-clamp-3 {
640
+ overflow: hidden;
641
+ display: -webkit-box;
642
+ -webkit-box-orient: vertical;
643
+ -webkit-line-clamp: 3;
644
+ }
629
645
  .block {
630
646
  display: block;
631
647
  }
@@ -697,9 +713,6 @@
697
713
  .\!h-2 {
698
714
  height: calc(var(--spacing) * 2) !important;
699
715
  }
700
- .h-0\.5 {
701
- height: calc(var(--spacing) * 0.5);
702
- }
703
716
  .h-1 {
704
717
  height: calc(var(--spacing) * 1);
705
718
  }
@@ -784,6 +797,9 @@
784
797
  .h-\[32rem\] {
785
798
  height: 32rem;
786
799
  }
800
+ .h-\[34rem\] {
801
+ height: 34rem;
802
+ }
787
803
  .h-\[70vh\] {
788
804
  height: 70vh;
789
805
  }
@@ -895,6 +911,9 @@
895
911
  .min-h-\[14rem\] {
896
912
  min-height: 14rem;
897
913
  }
914
+ .min-h-\[15px\] {
915
+ min-height: 15px;
916
+ }
898
917
  .min-h-\[16rem\] {
899
918
  min-height: 16rem;
900
919
  }
@@ -1186,6 +1205,9 @@
1186
1205
  .max-w-\[14rem\] {
1187
1206
  max-width: 14rem;
1188
1207
  }
1208
+ .max-w-\[45\%\] {
1209
+ max-width: 45%;
1210
+ }
1189
1211
  .max-w-\[75\%\] {
1190
1212
  max-width: 75%;
1191
1213
  }
@@ -1695,6 +1717,9 @@
1695
1717
  .rounded-\[2px\] {
1696
1718
  border-radius: 2px;
1697
1719
  }
1720
+ .rounded-\[3px\] {
1721
+ border-radius: 3px;
1722
+ }
1698
1723
  .rounded-\[4px\] {
1699
1724
  border-radius: 4px;
1700
1725
  }
@@ -1961,9 +1986,6 @@
1961
1986
  .border-foreground {
1962
1987
  border-color: var(--color-foreground);
1963
1988
  }
1964
- .border-green-500 {
1965
- border-color: var(--color-green-500);
1966
- }
1967
1989
  .border-green-500\/30 {
1968
1990
  border-color: color-mix(in srgb, oklch(72.3% 0.219 149.579) 30%, transparent);
1969
1991
  @supports (color: color-mix(in lab, red, red)) {
@@ -2009,9 +2031,6 @@
2009
2031
  border-color: color-mix(in oklab, var(--color-primary) 50%, transparent);
2010
2032
  }
2011
2033
  }
2012
- .border-red-500 {
2013
- border-color: var(--color-red-500);
2014
- }
2015
2034
  .border-red-500\/20 {
2016
2035
  border-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 20%, transparent);
2017
2036
  @supports (color: color-mix(in lab, red, red)) {
@@ -2321,12 +2340,6 @@
2321
2340
  .bg-green-500 {
2322
2341
  background-color: var(--color-green-500);
2323
2342
  }
2324
- .bg-green-600\/10 {
2325
- background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 10%, transparent);
2326
- @supports (color: color-mix(in lab, red, red)) {
2327
- background-color: color-mix(in oklab, var(--color-green-600) 10%, transparent);
2328
- }
2329
- }
2330
2343
  .bg-green-600\/20 {
2331
2344
  background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 20%, transparent);
2332
2345
  @supports (color: color-mix(in lab, red, red)) {
@@ -2456,6 +2469,12 @@
2456
2469
  .bg-surface-container-high {
2457
2470
  background-color: var(--color-surface-container-high);
2458
2471
  }
2472
+ .bg-surface-container-high\/60 {
2473
+ background-color: var(--color-surface-container-high);
2474
+ @supports (color: color-mix(in lab, red, red)) {
2475
+ background-color: color-mix(in oklab, var(--color-surface-container-high) 60%, transparent);
2476
+ }
2477
+ }
2459
2478
  .bg-surface-container-high\/95 {
2460
2479
  background-color: var(--color-surface-container-high);
2461
2480
  @supports (color: color-mix(in lab, red, red)) {
@@ -2687,6 +2706,9 @@
2687
2706
  .py-20 {
2688
2707
  padding-block: calc(var(--spacing) * 20);
2689
2708
  }
2709
+ .py-\[1px\] {
2710
+ padding-block: 1px;
2711
+ }
2690
2712
  .py-\[2px\] {
2691
2713
  padding-block: 2px;
2692
2714
  }
@@ -2714,6 +2736,9 @@
2714
2736
  .pt-2 {
2715
2737
  padding-top: calc(var(--spacing) * 2);
2716
2738
  }
2739
+ .pt-2\.5 {
2740
+ padding-top: calc(var(--spacing) * 2.5);
2741
+ }
2717
2742
  .pt-3 {
2718
2743
  padding-top: calc(var(--spacing) * 3);
2719
2744
  }
@@ -2861,6 +2886,9 @@
2861
2886
  .text-\[9px\] {
2862
2887
  font-size: 9px;
2863
2888
  }
2889
+ .text-\[10\.5px\] {
2890
+ font-size: 10.5px;
2891
+ }
2864
2892
  .text-\[10px\] {
2865
2893
  font-size: 10px;
2866
2894
  }
@@ -2941,6 +2969,10 @@
2941
2969
  --tw-leading: 1.55;
2942
2970
  line-height: 1.55;
2943
2971
  }
2972
+ .leading-\[15px\] {
2973
+ --tw-leading: 15px;
2974
+ line-height: 15px;
2975
+ }
2944
2976
  .leading-\[var\(--line-height-base\)\] {
2945
2977
  --tw-leading: var(--line-height-base);
2946
2978
  line-height: var(--line-height-base);
@@ -2961,6 +2993,10 @@
2961
2993
  --tw-leading: var(--leading-relaxed);
2962
2994
  line-height: var(--leading-relaxed);
2963
2995
  }
2996
+ .leading-snug {
2997
+ --tw-leading: var(--leading-snug);
2998
+ line-height: var(--leading-snug);
2999
+ }
2964
3000
  .leading-tight {
2965
3001
  --tw-leading: var(--leading-tight);
2966
3002
  line-height: var(--leading-tight);
@@ -3009,6 +3045,10 @@
3009
3045
  --tw-tracking: 0.08em;
3010
3046
  letter-spacing: 0.08em;
3011
3047
  }
3048
+ .tracking-\[0\.09em\] {
3049
+ --tw-tracking: 0.09em;
3050
+ letter-spacing: 0.09em;
3051
+ }
3012
3052
  .tracking-\[0\.12em\] {
3013
3053
  --tw-tracking: 0.12em;
3014
3054
  letter-spacing: 0.12em;
@@ -3229,9 +3269,6 @@
3229
3269
  .text-green-400 {
3230
3270
  color: var(--color-green-400);
3231
3271
  }
3232
- .text-green-600 {
3233
- color: var(--color-green-600);
3234
- }
3235
3272
  .text-muted-foreground {
3236
3273
  color: var(--color-muted-foreground);
3237
3274
  }
@@ -3259,6 +3296,12 @@
3259
3296
  color: color-mix(in oklab, var(--color-muted-foreground) 70%, transparent);
3260
3297
  }
3261
3298
  }
3299
+ .text-muted-foreground\/90 {
3300
+ color: color-mix(in srgb, hsl(var(--muted-foreground)) 90%, transparent);
3301
+ @supports (color: color-mix(in lab, red, red)) {
3302
+ color: color-mix(in oklab, var(--color-muted-foreground) 90%, transparent);
3303
+ }
3304
+ }
3262
3305
  .text-neutral-400 {
3263
3306
  color: var(--color-neutral-400);
3264
3307
  }
@@ -3469,12 +3512,6 @@
3469
3512
  --tw-ring-color: color-mix(in oklab, var(--color-primary) 25%, transparent);
3470
3513
  }
3471
3514
  }
3472
- .ring-primary\/40 {
3473
- --tw-ring-color: color-mix(in srgb, hsl(var(--primary)) 40%, transparent);
3474
- @supports (color: color-mix(in lab, red, red)) {
3475
- --tw-ring-color: color-mix(in oklab, var(--color-primary) 40%, transparent);
3476
- }
3477
- }
3478
3515
  .ring-offset-background {
3479
3516
  --tw-ring-offset-color: var(--color-background);
3480
3517
  }
@@ -44,32 +44,50 @@ interface WfNodeState {
44
44
  * rounds the agent has taken, surfaced on the node's progress strip. */
45
45
  rounds?: number;
46
46
  }
47
+ /**
48
+ * A node's card-facing content. Three tiers, so both densities can show the
49
+ * right amount without either re-deriving it:
50
+ *
51
+ * - {@link title} — WHO the step is ("GitHub", "AI Agent", a decision's own
52
+ * title). Never a machine identifier.
53
+ * - {@link subtitle} — WHAT it does, in one short phrase ("create: pulls.reviews",
54
+ * the model, "Weekdays at 09:00", "3 branches").
55
+ * - {@link description} — the free-text detail worth reading when there's room
56
+ * (an agent's prompt, a notify URL, the events a trigger listens for).
57
+ *
58
+ * The compact node shows title + subtitle; the expanded node adds the
59
+ * description, the run metrics, and the output. Any longer/raw values live in
60
+ * {@link config} for the full-detail view.
61
+ */
47
62
  interface WfNodeData extends Record<string, unknown> {
48
- /** Headline for the node, e.g. "Run agent". */
63
+ /** Human headline for the node, e.g. "GitHub", "AI Agent". */
49
64
  title: string;
50
65
  /** The action/trigger kind verbatim, e.g. "agent.run", "schedule". Set on every
51
- * node `buildWorkflowGraph` produces so a card can label what it is regardless
52
- * of which subtitle it shows; optional on the type so external consumers
53
- * constructing `WfNodeData` directly aren't forced to supply it (the render
54
- * guards its usage). */
66
+ * node `buildWorkflowGraph` produces so a consumer can dispatch on the node's
67
+ * type (icon, detail rendering) regardless of what its title says; optional on
68
+ * the type so external consumers constructing `WfNodeData` directly aren't
69
+ * forced to supply it (the render guards its usage). */
55
70
  kind?: string;
56
- /** Secondary detail, e.g. an integration path or a cron expression. */
71
+ /** The one-phrase qualifier under the title, e.g. "create: pulls.reviews". */
57
72
  subtitle?: string;
58
- /** Requested model (agent.run), shown as a chip even before a run. */
73
+ /** Free-text detail (agent prompt, notify URL, trigger events) — shown only by
74
+ * the expanded node, which has the room to clamp it to two lines. */
75
+ description?: string;
76
+ /** Requested model (agent.run). A live run's ACTUAL model (`state.model`)
77
+ * supersedes it on the card. */
59
78
  model?: string;
60
79
  /** `integration.invoke` provider.method path. */
61
80
  path?: string;
62
- /** Notable config fields for the expand drawer (kept small + stringified). */
63
- detail?: Record<string, string>;
64
81
  /** The raw, UNTRUNCATED config for this node — the action/trigger config from
65
- * the definition. The compact card reads {@link detail}; a full-detail view
66
- * (e.g. a node drawer) reads this to render every field — the complete prompt,
67
- * all profile/source/input keys — without the card-sized clamp. It is a
68
- * JSON-safe deep copy of the config (cycles and non-JSON values normalized),
69
- * so a consumer can serialize or render it freely. Omitted when the node has
70
- * no config. */
82
+ * the definition. The card shows the summary above; a full-detail view (e.g. a
83
+ * node drawer) reads this to render every field — the complete prompt, all
84
+ * profile/source/input keys — without the card-sized clamp. It is a JSON-safe
85
+ * deep copy of the config (cycles and non-JSON values normalized), so a
86
+ * consumer can serialize or render it freely. Omitted when the node has no
87
+ * config. */
71
88
  config?: Record<string, unknown>;
72
- /** Connector slug (e.g. `github`) for the provider chip, when one applies. */
89
+ /** Connector slug (e.g. `github`) — drives the node's brand logo, so a provider
90
+ * step is recognizable before any text is read. */
73
91
  provider?: string;
74
92
  /** Small corner tag, e.g. "×3" for a parallel fan-out. */
75
93
  badge?: string;
@@ -113,27 +131,23 @@ type WfDirection = "LR" | "TB";
113
131
  /** Options for {@link buildWorkflowGraph}. */
114
132
  interface BuildWorkflowGraphOptions {
115
133
  /**
116
- * Reserve space for the rows live run state adds to a node (the meta-chip row +
117
- * the output/error preview), so the RUN view never overlaps once a node starts
118
- * or terminates. The static/preview layout (no run overlay) leaves this off to
119
- * stay compact. Defaults to `false`.
134
+ * Reserve space for the rows live run state adds to a node (the metrics line,
135
+ * the output/error preview, the status footer), so the RUN view never overlaps
136
+ * once a node starts or terminates. The static/preview layout (no run overlay)
137
+ * leaves this off to stay compact. Defaults to `false`.
120
138
  */
121
139
  reserveRunState?: boolean;
122
140
  /** Flow direction. Defaults to "LR". */
123
141
  direction?: WfDirection;
124
- /** Override the node dimensions the layout spaces by (and the card renders at).
125
- * Defaults to a fixed width + {@link nodeHeight}. A caller with a different node
126
- * design supplies its own sizing so the layout stays collision-free. */
127
- measure?: (data: WfNodeData, withRunState: boolean) => {
128
- width: number;
129
- height: number;
130
- };
142
+ /** Collapse every node to the fixed icon-tile size, and pitch the layers for
143
+ * it. Defaults to `false` (the full, expanded card). */
144
+ compact?: boolean;
131
145
  }
132
146
  /** Build a positioned graph from a workflow YAML string. Never throws —
133
147
  * malformed YAML or an empty definition returns an `error` the UI can fall
134
148
  * back on (e.g. show the raw YAML while authoring). `reserveRunState` leaves
135
149
  * room for the rows live run state adds (see {@link nodeHeight}); `direction`
136
- * picks the flow axis (default "LR"). */
150
+ * picks the flow axis (default "LR"); `compact` collapses nodes to icon tiles. */
137
151
  declare function buildWorkflowGraph(yaml: string, options?: BuildWorkflowGraphOptions): WfGraph;
138
152
 
139
153
  interface WorkflowGraphProps {
@@ -144,9 +158,11 @@ interface WorkflowGraphProps {
144
158
  /** Flow direction: "LR" (default) reads left-to-right — best for the wide/short
145
159
  * run-detail panel; "TB" is a vertical column. */
146
160
  direction?: WfDirection;
147
- /** Start collapsed (compact icon tiles) rather than expanded. The full variant
148
- * exposes a toggle to switch densities; the preview variant is always compact.
149
- * Defaults to `false` (expanded). */
161
+ /** Start collapsed (compact icon tiles) rather than expanded. Defaults to
162
+ * `true`: a graph is read structure-first, and the tiles are what make the
163
+ * shape of the run legible at a glance — the per-node detail is one density
164
+ * toggle (or one node click) away. The full variant exposes the toggle; the
165
+ * preview variant is always compact. */
150
166
  defaultCompact?: boolean;
151
167
  /** Sizing for the wrapper; the caller controls height. */
152
168
  className?: string;
package/dist/workflows.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildWorkflowGraph
3
- } from "./chunk-VXGI2XUK.js";
3
+ } from "./chunk-UEMWLVVY.js";
4
4
  import "./chunk-U67V476Y.js";
5
5
 
6
6
  // src/workflows/WorkflowGraphLazy.tsx
@@ -26,7 +26,7 @@ function retryImport(factory, retries = 2, delayMs = 350) {
26
26
  function lazyWorkflowGraph() {
27
27
  return lazy(
28
28
  () => retryImport(
29
- () => import("./WorkflowGraph-64XJBIW2.js").then((m) => ({ default: m.WorkflowGraph }))
29
+ () => import("./WorkflowGraph-V2AVCNDC.js").then((m) => ({ default: m.WorkflowGraph }))
30
30
  )
31
31
  );
32
32
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.74.0",
3
+ "version": "0.76.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",