@workerdeck/ui 2.15.0 → 3.1.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.
Files changed (75) hide show
  1. package/README.md +6 -5
  2. package/build/{SessionPanel-BVKqPs_3.d.mts → SessionPanel-BNNc8grK.d.mts} +18 -16
  3. package/build/index.d.mts +194 -49
  4. package/build/index.mjs +562 -260
  5. package/build/index.mjs.map +1 -1
  6. package/build/scoped.css +170 -21
  7. package/build/{use-path-links-BgWXmfAS.mjs → use-path-links-C6Fh5zdx.mjs} +3312 -2758
  8. package/build/use-path-links-C6Fh5zdx.mjs.map +1 -0
  9. package/build/workspace.d.mts +3 -3
  10. package/build/workspace.mjs +3 -3
  11. package/build/workspace.mjs.map +1 -1
  12. package/package.json +4 -4
  13. package/src/components/agent/ApprovalPrompts.tsx +87 -0
  14. package/src/components/agent/Composer.tsx +25 -47
  15. package/src/components/agent/ContextDialog.tsx +75 -67
  16. package/src/components/agent/FrameStrip.tsx +74 -0
  17. package/src/components/agent/HostFilesDialog.tsx +3 -2
  18. package/src/components/agent/McpDialog.tsx +112 -78
  19. package/src/components/agent/PermissionPrompt.tsx +22 -17
  20. package/src/components/agent/QuestionPrompt.tsx +6 -41
  21. package/src/components/agent/Response.tsx +8 -1
  22. package/src/components/agent/Scrubber.tsx +6 -75
  23. package/src/components/agent/SessionBrowser.tsx +131 -214
  24. package/src/components/agent/SessionFilters.tsx +266 -0
  25. package/src/components/agent/SessionInfoDialog.tsx +47 -63
  26. package/src/components/agent/SessionItem.tsx +29 -6
  27. package/src/components/agent/SessionPanel.tsx +249 -498
  28. package/src/components/agent/SessionSteps.tsx +98 -14
  29. package/src/components/agent/SessionWorkspace.tsx +3 -3
  30. package/src/components/agent/ShellStrip.tsx +43 -36
  31. package/src/components/agent/ShellTerminal.tsx +1 -1
  32. package/src/components/agent/SubagentStrip.tsx +13 -30
  33. package/src/components/agent/ToolCallCard.tsx +18 -41
  34. package/src/components/agent/Transcript.tsx +111 -93
  35. package/src/components/agent/TranscriptItemView.tsx +80 -67
  36. package/src/components/agent/TranscriptRows.tsx +4 -2
  37. package/src/components/agent/composer-commands.ts +80 -1
  38. package/src/components/agent/image-viewer.tsx +326 -0
  39. package/src/components/agent/markdown-image.tsx +139 -0
  40. package/src/components/agent/scrubber-marks.ts +33 -11
  41. package/src/components/agent/scrubber-peek.tsx +122 -0
  42. package/src/components/agent/session-panel-providers.tsx +41 -0
  43. package/src/components/agent/shell-actions.tsx +38 -1
  44. package/src/components/agent/tool-result-image.tsx +40 -0
  45. package/src/components/agent/transcript-variant.tsx +3 -21
  46. package/src/components/agent/use-catch-up.ts +20 -0
  47. package/src/components/agent/use-frame.ts +88 -0
  48. package/src/components/agent/use-host-image.ts +81 -0
  49. package/src/components/agent/use-shell-frame.ts +12 -70
  50. package/src/components/agent/use-subagent-frame.ts +19 -75
  51. package/src/components/prompt-area/prompt-area-engine.ts +21 -20
  52. package/src/components/prompt-area/prompt-area-list-ops.ts +12 -15
  53. package/src/components/prompt-area/use-prompt-area-keydown.ts +4 -2
  54. package/src/components/terminal/PermissionPrompt.tsx +31 -28
  55. package/src/components/terminal/QuestionPrompt.tsx +10 -46
  56. package/src/components/terminal/TerminalTranscript.tsx +23 -89
  57. package/src/components/terminal/affordances.tsx +100 -74
  58. package/src/components/terminal/height.ts +48 -32
  59. package/src/components/terminal/image-box.ts +31 -0
  60. package/src/components/terminal/items.tsx +70 -30
  61. package/src/components/terminal/markdown.tsx +4 -1
  62. package/src/components/terminal/scrubber.tsx +25 -272
  63. package/src/components/terminal/shell-row.ts +17 -3
  64. package/src/components/ui/Popover.tsx +29 -0
  65. package/src/components/ui/Select.tsx +25 -0
  66. package/src/index.ts +65 -12
  67. package/src/lib/file-link.ts +3 -16
  68. package/src/lib/permission-prompt.ts +57 -0
  69. package/src/lib/question-answers.ts +65 -0
  70. package/src/lib/shell-request.ts +115 -0
  71. package/src/lib/tool-icon.ts +13 -1
  72. package/src/styles/terminal.css +129 -22
  73. package/src/styles/theme.css +4 -0
  74. package/build/use-path-links-BgWXmfAS.mjs.map +0 -1
  75. package/src/components/prompt-area/use-markdown-mode.ts +0 -103
package/build/scoped.css CHANGED
@@ -304,6 +304,9 @@
304
304
  .wd-root .right-2 {
305
305
  right: calc(var(--spacing) * 2);
306
306
  }
307
+ .wd-root .right-3\.5 {
308
+ right: calc(var(--spacing) * 3.5);
309
+ }
307
310
  .wd-root .right-4 {
308
311
  right: calc(var(--spacing) * 4);
309
312
  }
@@ -328,12 +331,12 @@
328
331
  .wd-root .left-2 {
329
332
  left: calc(var(--spacing) * 2);
330
333
  }
331
- .wd-root .left-2\.5 {
332
- left: calc(var(--spacing) * 2.5);
333
- }
334
334
  .wd-root .left-4 {
335
335
  left: calc(var(--spacing) * 4);
336
336
  }
337
+ .wd-root .left-4\.5 {
338
+ left: calc(var(--spacing) * 4.5);
339
+ }
337
340
  .wd-root .isolate {
338
341
  isolation: isolate;
339
342
  }
@@ -635,6 +638,9 @@
635
638
  .wd-root .min-h-\[200px\] {
636
639
  min-height: 200px;
637
640
  }
641
+ .wd-root .min-h-full {
642
+ min-height: 100%;
643
+ }
638
644
  .wd-root .w-0\.5 {
639
645
  width: calc(var(--spacing) * 0.5);
640
646
  }
@@ -653,8 +659,8 @@
653
659
  .wd-root .w-9 {
654
660
  width: calc(var(--spacing) * 9);
655
661
  }
656
- .wd-root .w-14 {
657
- width: calc(var(--spacing) * 14);
662
+ .wd-root .w-12 {
663
+ width: calc(var(--spacing) * 12);
658
664
  }
659
665
  .wd-root .w-16 {
660
666
  width: calc(var(--spacing) * 16);
@@ -665,6 +671,9 @@
665
671
  .wd-root .w-48 {
666
672
  width: calc(var(--spacing) * 48);
667
673
  }
674
+ .wd-root .w-80 {
675
+ width: calc(var(--spacing) * 80);
676
+ }
668
677
  .wd-root .w-\[11px\] {
669
678
  width: 11px;
670
679
  }
@@ -686,6 +695,9 @@
686
695
  .wd-root .w-full {
687
696
  width: 100%;
688
697
  }
698
+ .wd-root .w-max {
699
+ width: max-content;
700
+ }
689
701
  .wd-root .w-px {
690
702
  width: 1px;
691
703
  }
@@ -716,6 +728,9 @@
716
728
  .wd-root .max-w-md {
717
729
  max-width: var(--container-md);
718
730
  }
731
+ .wd-root .max-w-none {
732
+ max-width: none;
733
+ }
719
734
  .wd-root .max-w-sm {
720
735
  max-width: var(--container-sm);
721
736
  }
@@ -749,6 +764,9 @@
749
764
  .wd-root .min-w-\[var\(--anchor-width\)\] {
750
765
  min-width: var(--anchor-width);
751
766
  }
767
+ .wd-root .min-w-full {
768
+ min-width: 100%;
769
+ }
752
770
  .wd-root .flex-1 {
753
771
  flex: 1;
754
772
  }
@@ -802,6 +820,9 @@
802
820
  .wd-root .cursor-default {
803
821
  cursor: default;
804
822
  }
823
+ .wd-root .cursor-grab {
824
+ cursor: grab;
825
+ }
805
826
  .wd-root .cursor-not-allowed {
806
827
  cursor: not-allowed;
807
828
  }
@@ -811,6 +832,9 @@
811
832
  .wd-root .cursor-row-resize {
812
833
  cursor: row-resize;
813
834
  }
835
+ .wd-root .cursor-zoom-in {
836
+ cursor: zoom-in;
837
+ }
814
838
  .wd-root .touch-none {
815
839
  touch-action: none;
816
840
  }
@@ -1239,6 +1263,12 @@
1239
1263
  .wd-root .bg-surface-hover {
1240
1264
  background-color: var(--bg-surface-hover);
1241
1265
  }
1266
+ .wd-root .bg-surface-hover\/40 {
1267
+ background-color: var(--bg-surface-hover);
1268
+ @supports (color: color-mix(in lab, red, red)) {
1269
+ background-color: color-mix(in oklab, var(--bg-surface-hover) 40%, transparent);
1270
+ }
1271
+ }
1242
1272
  .wd-root .bg-transparent {
1243
1273
  background-color: transparent;
1244
1274
  }
@@ -1251,6 +1281,9 @@
1251
1281
  .wd-root .bg-clip-padding {
1252
1282
  background-clip: padding-box;
1253
1283
  }
1284
+ .wd-root .fill-current {
1285
+ fill: currentcolor;
1286
+ }
1254
1287
  .wd-root .object-contain {
1255
1288
  object-fit: contain;
1256
1289
  }
@@ -1287,6 +1320,9 @@
1287
1320
  .wd-root .p-6 {
1288
1321
  padding: calc(var(--spacing) * 6);
1289
1322
  }
1323
+ .wd-root .p-px {
1324
+ padding: 1px;
1325
+ }
1290
1326
  .wd-root .px-1 {
1291
1327
  padding-inline: var(--spacing);
1292
1328
  }
@@ -1371,6 +1407,9 @@
1371
1407
  .wd-root .pt-4 {
1372
1408
  padding-top: calc(var(--spacing) * 4);
1373
1409
  }
1410
+ .wd-root .pt-5 {
1411
+ padding-top: calc(var(--spacing) * 5);
1412
+ }
1374
1413
  .wd-root .pr-0\.5 {
1375
1414
  padding-right: calc(var(--spacing) * 0.5);
1376
1415
  }
@@ -2046,6 +2085,9 @@
2046
2085
  .wd-root .focus-visible\:ring-inset:focus-visible {
2047
2086
  --tw-ring-inset: inset;
2048
2087
  }
2088
+ .wd-root .active\:cursor-grabbing:active {
2089
+ cursor: grabbing;
2090
+ }
2049
2091
  .wd-root .disabled\:pointer-events-none:disabled {
2050
2092
  pointer-events: none;
2051
2093
  }
@@ -2443,40 +2485,135 @@
2443
2485
  .wd-root .term-hoverable {
2444
2486
  position: relative;
2445
2487
  }
2446
- .wd-root [data-terminal] .term-actions {
2488
+ :is(.wd-root, .wd-root *):is([data-terminal],[data-cards]) .term-actions {
2447
2489
  position: absolute;
2448
- top: 0;
2449
- right: 0;
2450
- height: var(--term-line);
2490
+ z-index: 1;
2451
2491
  display: flex;
2492
+ align-items: center;
2493
+ opacity: 0;
2494
+ transition: opacity var(--motion-fast, 120ms);
2495
+ }
2496
+ .wd-root [data-terminal] .term-actions {
2497
+ height: var(--term-line);
2452
2498
  gap: 1ch;
2499
+ }
2500
+ .wd-root [data-cards] .term-actions {
2501
+ height: 20px;
2502
+ gap: 6px;
2503
+ }
2504
+ :is(.wd-root, .wd-root *):is([data-terminal],[data-cards]) [data-placement='below']>.term-actions {
2505
+ top: 100%;
2506
+ }
2507
+ .wd-root [data-terminal] [data-placement='below']>.term-actions {
2508
+ left: var(--term-cell);
2509
+ }
2510
+ .wd-root [data-cards] [data-placement='below']>.term-actions {
2511
+ left: 0;
2512
+ }
2513
+ :is(.wd-root, .wd-root *):is([data-terminal],[data-cards]) [data-placement='inline']>.term-actions {
2514
+ top: 0;
2515
+ right: 0;
2453
2516
  padding-inline: 1ch;
2454
2517
  background: var(--bg, transparent);
2455
- opacity: 0;
2456
- transition: opacity var(--motion-fast, 120ms);
2457
2518
  }
2458
- .wd-root [data-terminal] .term-hoverable:hover .term-actions, .wd-root [data-terminal] .term-hoverable:focus-within .term-actions {
2519
+ :is(.wd-root, .wd-root *):is([data-terminal],[data-cards]) [data-placement='below']:is(:hover,:focus-within):not(:has([data-placement='below']:is(:hover,:focus-within)))>.term-actions, :is(.wd-root, .wd-root *):is([data-terminal],[data-cards]) [data-placement='inline']:is(:hover,:focus-within)>.term-actions {
2459
2520
  opacity: 1;
2460
2521
  }
2522
+ :is(.wd-root, .wd-root *):is([data-terminal],[data-cards]) [data-slot='transcript-rows'] [data-index]:not(.absolute) {
2523
+ position: relative;
2524
+ }
2525
+ :is(.wd-root, .wd-root *):is([data-terminal],[data-cards]) [data-slot='transcript-rows'] [data-index]:is(:hover,:focus-within) {
2526
+ z-index: 1;
2527
+ }
2461
2528
  @media (hover: none) {
2462
- .wd-root [data-terminal] .term-actions {
2529
+ :is(.wd-root, .wd-root *):is([data-terminal],[data-cards]) .term-actions {
2463
2530
  opacity: 1;
2464
2531
  }
2465
2532
  }
2533
+ .wd-root [data-cards] .term-action {
2534
+ font: inherit;
2535
+ font-size: 12px;
2536
+ font-weight: 500;
2537
+ line-height: 1;
2538
+ height: 18px;
2539
+ min-width: 22px;
2540
+ display: inline-flex;
2541
+ align-items: center;
2542
+ justify-content: center;
2543
+ gap: 4px;
2544
+ padding-inline: 5px;
2545
+ color: var(--fg-3);
2546
+ background: var(--surface);
2547
+ border: 1px solid var(--border);
2548
+ border-radius: 4px;
2549
+ white-space: nowrap;
2550
+ cursor: pointer;
2551
+ }
2552
+ .wd-root [data-cards] .term-action-icon {
2553
+ width: 14px;
2554
+ height: 14px;
2555
+ stroke-width: 2.25;
2556
+ flex: none;
2557
+ }
2558
+ .wd-root [data-cards] .term-action-word {
2559
+ padding-right: 2px;
2560
+ }
2561
+ .wd-root [data-cards] .term-action:hover, .wd-root [data-cards] .term-action:focus-visible {
2562
+ color: var(--fg-1);
2563
+ background: var(--row-hover);
2564
+ }
2565
+ .wd-root [data-cards] .term-action[data-tone='magenta'] {
2566
+ color: var(--wd-shell-accent);
2567
+ }
2568
+ .wd-root [data-cards] .term-action[data-tone='yellow'] {
2569
+ color: var(--warning);
2570
+ }
2571
+ .wd-root [data-cards] .term-action[data-tone='danger']:hover {
2572
+ color: var(--danger);
2573
+ }
2466
2574
  .wd-root [data-terminal] .term-action {
2467
2575
  font: inherit;
2468
- line-height: var(--term-line);
2576
+ font-weight: 500;
2577
+ line-height: 1;
2578
+ height: calc(var(--term-line) - 2px);
2579
+ min-width: 3ch;
2580
+ display: inline-flex;
2581
+ align-items: center;
2582
+ justify-content: center;
2583
+ gap: 0.6ch;
2584
+ padding-inline: 0.6ch;
2469
2585
  color: var(--term-dim);
2470
- background: none;
2471
- border: 0;
2472
- padding: 0;
2586
+ background: var(--term-band-bg);
2587
+ border: 1px solid var(--term-faint);
2588
+ @supports (color: color-mix(in lab, red, red)) {
2589
+ border: 1px solid color-mix(in srgb, var(--term-faint) 55%, transparent);
2590
+ }
2591
+ border-radius: 3px;
2592
+ white-space: pre;
2473
2593
  cursor: pointer;
2474
2594
  }
2595
+ .wd-root [data-terminal] .term-action-icon {
2596
+ width: calc(var(--term-font-size) + 1px);
2597
+ height: calc(var(--term-font-size) + 1px);
2598
+ stroke-width: 2.25;
2599
+ flex: none;
2600
+ }
2601
+ .wd-root [data-terminal] .term-action-word {
2602
+ padding-right: 0.2ch;
2603
+ }
2604
+ .wd-root [data-terminal] .term-action:hover, .wd-root [data-terminal] .term-action:focus-visible {
2605
+ color: var(--term-bright);
2606
+ border-color: var(--term-dim);
2607
+ background: var(--term-row-hover);
2608
+ }
2475
2609
  .wd-root [data-terminal] .term-action[data-tone='magenta'] {
2476
2610
  color: var(--term-magenta);
2477
2611
  }
2478
- .wd-root [data-terminal] .term-action:hover {
2479
- color: var(--term-fg);
2612
+ .wd-root [data-terminal] .term-action[data-tone='yellow'] {
2613
+ color: var(--term-yellow);
2614
+ }
2615
+ .wd-root [data-terminal] .term-action[data-tone='danger']:hover {
2616
+ color: var(--term-red);
2480
2617
  }
2481
2618
  .wd-root [data-terminal] .term-user {
2482
2619
  background: var(--term-user-bg);
@@ -2592,7 +2729,7 @@
2592
2729
  .wd-root [data-terminal] [data-sticky-lane]>[data-sticky-headlane] {
2593
2730
  position: absolute;
2594
2731
  inset: 0;
2595
- z-index: 1;
2732
+ z-index: 2;
2596
2733
  pointer-events: none;
2597
2734
  }
2598
2735
  .wd-root [data-terminal] [data-sticky-headlane]>[data-sticky-head] {
@@ -2929,7 +3066,16 @@
2929
3066
  display: block;
2930
3067
  overflow: hidden;
2931
3068
  }
2932
- .wd-root .term-image>img {
3069
+ .wd-root .term-image>[data-slot='viewable-image'] {
3070
+ display: block;
3071
+ height: 100%;
3072
+ max-width: 100%;
3073
+ padding: 0;
3074
+ border: 0;
3075
+ background: none;
3076
+ }
3077
+ .wd-root .term-image img {
3078
+ display: block;
2933
3079
  max-width: 100%;
2934
3080
  height: 100%;
2935
3081
  object-fit: contain;
@@ -3354,6 +3500,9 @@
3354
3500
  left: 0;
3355
3501
  width: 12px;
3356
3502
  }
3503
+ .wd-root .wd-shell-term .xterm .xterm-viewport {
3504
+ background-color: transparent;
3505
+ }
3357
3506
  .wd-root .wd-scrubber .wd-scrub-mark[data-kind='user'] {
3358
3507
  background: var(--accent);
3359
3508
  }