@seekbuddy/dsh-ui 0.2.0-beta.0 → 0.2.0-beta.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.
Files changed (97) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +1 -1
  3. package/README.zh.md +1 -1
  4. package/THIRD_PARTY_NOTICES.md +1 -1
  5. package/UPSTREAM.md +7 -4
  6. package/dist/blocks.js +170 -135
  7. package/dist/chunks/{chunk-VIH56PDF.js → chunk-6SGSJ5KW.js} +2 -2
  8. package/dist/chunks/{chunk-QJKAQ6PO.js → chunk-7NH2UOZO.js} +2 -2
  9. package/dist/chunks/{chunk-KETGFAOH.js → chunk-7SKW4S35.js} +2 -2
  10. package/dist/chunks/chunk-ENKPNYOB.js +26 -0
  11. package/dist/chunks/{chunk-WUL523OW.js → chunk-EWAZFWLW.js} +1 -1
  12. package/dist/chunks/{chunk-5JXG4BHW.js → chunk-FFJ6TCCF.js} +1 -1
  13. package/dist/chunks/{chunk-R6AUJQ3G.js → chunk-FZXK4LTI.js} +1 -1
  14. package/dist/chunks/chunk-JA3XDLIA.js +1115 -0
  15. package/dist/chunks/{chunk-TUK6UGXM.js → chunk-L7XALG4J.js} +1 -1
  16. package/dist/chunks/{chunk-AY44MQMD.js → chunk-OCAQFVT3.js} +180 -60
  17. package/dist/chunks/{chunk-CI73NXA5.js → chunk-RAXDA2PT.js} +4 -4
  18. package/dist/chunks/{chunk-5XDVPALS.js → chunk-SN6RSUWC.js} +1 -1
  19. package/dist/chunks/{chunk-CTQPGUZP.js → chunk-SNVSQWCU.js} +1 -1
  20. package/dist/chunks/{chunk-ZZNL5PWF.js → chunk-SO3DCAWG.js} +2 -2
  21. package/dist/chunks/{chunk-IOBKTEKP.js → chunk-UAEFKTV3.js} +1 -1
  22. package/dist/chunks/{chunk-NE62SYOZ.js → chunk-UGEORMLD.js} +2 -2
  23. package/dist/chunks/{chunk-TQU54HSM.js → chunk-W6FLI3AK.js} +1 -1
  24. package/dist/chunks/{chunk-TZ7HRE6D.js → chunk-WX46TSKP.js} +1 -1
  25. package/dist/chunks/{chunk-XX6MSZLS.js → chunk-XL33IPCV.js} +1 -1
  26. package/dist/chunks/chunk-XW4L4ZGL.js +967 -0
  27. package/dist/chunks/chunk-YOBY6PSL.js +850 -0
  28. package/dist/icons.js +58 -2
  29. package/dist/index.js +810 -317
  30. package/dist/markdown.js +84 -7
  31. package/dist/meta.json +1038 -339
  32. package/dist/root-inputs.json +20 -1
  33. package/dist/seekbuddy-card.js +1 -1
  34. package/dist/seekbuddy-empty.js +2 -2
  35. package/dist/seekbuddy-internal/Message.js +2 -2
  36. package/dist/seekbuddy-internal/Pagination.js +1 -1
  37. package/dist/seekbuddy-internal/StatusBadge.js +1 -1
  38. package/dist/seekbuddy-internal/Switch.js +1 -1
  39. package/dist/seekbuddy-internal/Upload.js +1 -1
  40. package/dist/seekbuddy-internal/date/Calendar.js +1 -1
  41. package/dist/seekbuddy-internal/date/DatePicker.js +2 -2
  42. package/dist/seekbuddy-internal/date/DateRangePicker.js +2 -2
  43. package/dist/seekbuddy-internal/date/TimePicker.js +1 -1
  44. package/dist/seekbuddy-internal/date/fields.js +5 -5
  45. package/dist/seekbuddy-spinner.js +1 -1
  46. package/dist/seekbuddy-tabs.js +1 -1
  47. package/dist/seekbuddy-timeline.js +2 -2
  48. package/dist/seekbuddy.js +15 -15
  49. package/dist/tokens.css +60 -20
  50. package/dist/types/AnimatedRows.d.ts +45 -0
  51. package/dist/types/Button.d.ts +1 -1
  52. package/dist/types/CommandText.d.ts +15 -0
  53. package/dist/types/DetailDocument.d.ts +77 -0
  54. package/dist/types/DisclosureRow.d.ts +4 -2
  55. package/dist/types/DraggableImage.d.ts +18 -0
  56. package/dist/types/HoverCard.d.ts +11 -3
  57. package/dist/types/HoverCardGroup.d.ts +24 -0
  58. package/dist/types/ImageLightbox.d.ts +4 -1
  59. package/dist/types/InlineEditor.d.ts +22 -0
  60. package/dist/types/Menu.d.ts +30 -9
  61. package/dist/types/MenuSurface.d.ts +9 -0
  62. package/dist/types/PermissionIcon.d.ts +12 -0
  63. package/dist/types/QuotePreview.d.ts +23 -0
  64. package/dist/types/SegmentedTabs.d.ts +3 -1
  65. package/dist/types/TerminalBlock.d.ts +10 -2
  66. package/dist/types/Tooltip.d.ts +21 -15
  67. package/dist/types/UserMessageBubble.d.ts +10 -0
  68. package/dist/types/ZoomControls.d.ts +26 -0
  69. package/dist/types/blocks.d.ts +2 -0
  70. package/dist/types/document-zoom.d.ts +16 -0
  71. package/dist/types/file-drag-actions.d.ts +36 -0
  72. package/dist/types/focus.d.ts +7 -0
  73. package/dist/types/icons/artwork.d.ts +421 -0
  74. package/dist/types/icons/index.d.ts +205 -192
  75. package/dist/types/icons/shared-artwork.d.ts +6 -12
  76. package/dist/types/icons.d.ts +1 -1
  77. package/dist/types/image-drag.d.ts +16 -0
  78. package/dist/types/index.d.ts +21 -3
  79. package/dist/types/markdown/MarkdownDelegate.d.ts +26 -3
  80. package/dist/types/markdown/MarkdownText.d.ts +12 -5
  81. package/dist/types/markdown/file-link.d.ts +13 -3
  82. package/dist/types/markdown/highlight.d.ts +22 -0
  83. package/dist/types/markdown/quote-text.d.ts +7 -0
  84. package/dist/types/markdown/render.d.ts +9 -4
  85. package/dist/types/markdown/windows-path-destinations.d.ts +10 -0
  86. package/dist/types/markdown.d.ts +5 -2
  87. package/dist/types/overlay-top-margin.d.ts +9 -2
  88. package/dist/types/tooltip-placement.d.ts +34 -0
  89. package/dist/types/use-clipboard-copy.d.ts +13 -0
  90. package/dist/types/useAnchoredPosition.d.ts +22 -22
  91. package/dist/types/useRowDragPreview.d.ts +19 -0
  92. package/dist/types/user-text.d.ts +26 -31
  93. package/package.json +2 -2
  94. package/dist/chunks/chunk-3HCOU44R.js +0 -697
  95. package/dist/chunks/chunk-LA3QDZYN.js +0 -2777
  96. package/dist/chunks/chunk-OQPH36OI.js +0 -754
  97. package/dist/types/use-copy-feedback.d.ts +0 -13
package/dist/blocks.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  Menu,
3
3
  Pill,
4
- StateDot
5
- } from "./chunks/chunk-3HCOU44R.js";
4
+ useClipboardCopy
5
+ } from "./chunks/chunk-YOBY6PSL.js";
6
6
  import {
7
7
  CodeCard_module_default,
8
8
  CodeToolbar,
@@ -17,15 +17,16 @@ import {
17
17
  highlightLines,
18
18
  subscribeGrammarLoaded,
19
19
  useViewportHighlighting
20
- } from "./chunks/chunk-AY44MQMD.js";
20
+ } from "./chunks/chunk-OCAQFVT3.js";
21
21
  import {
22
+ StateDot,
22
23
  writeClipboard
23
- } from "./chunks/chunk-OQPH36OI.js";
24
+ } from "./chunks/chunk-JA3XDLIA.js";
24
25
  import {
25
26
  IconCheckOutlineRegular,
26
27
  IconCopyOutlineRegular,
27
28
  IconWrapLinesOutlineRegular
28
- } from "./chunks/chunk-LA3QDZYN.js";
29
+ } from "./chunks/chunk-XW4L4ZGL.js";
29
30
  import "./chunks/chunk-ZA47FP7C.js";
30
31
 
31
32
  // src/JsonTree.tsx
@@ -37,10 +38,10 @@ var id = "@seekbuddy/dsh-ui/JsonTree.module.css";
37
38
  if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id + '"]')) {
38
39
  const element = document.createElement("style");
39
40
  element.setAttribute("data-dsh-ui-primitives", id);
40
- element.textContent = '.vOc5Ca_root{--json-tree-property:#881391;--json-tree-string:#c41a16;--json-tree-number:#1c00cf;--json-tree-keyword:#1c00cf;--json-tree-punctuation:#202124;--json-tree-icon:#5f6368;--json-tree-hover:#3c40430a;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);font:12px/16px var(--ds-font-family-code);overscroll-behavior-x:contain;overscroll-behavior-y:auto;position:relative;overflow:auto}body[data-ds-dark-theme] .vOc5Ca_root{--json-tree-property:#5db0d7;--json-tree-string:#f28b82;--json-tree-number:#99c8ff;--json-tree-keyword:#99c8ff;--json-tree-punctuation:#e8eaed;--json-tree-icon:#9aa0a6;--json-tree-hover:#e8eaed0d}.vOc5Ca_container{box-sizing:border-box;white-space:pre;width:100%;min-width:0;margin:0;padding:6px 8px 8px}.vOc5Ca_expandedTopLevel{box-sizing:border-box;width:100%;min-width:0;padding:6px 8px 8px 14px}.vOc5Ca_expandedTopLevel:has(>.vOc5Ca_topLevelBracket[data-json-root-row]:hover),.vOc5Ca_expandedTopLevel:has(>.vOc5Ca_topLevelBracket[data-json-root-row][data-json-copy-active]){background:var(--json-tree-hover)}.vOc5Ca_expandedTopLevelContainer{padding:0}.vOc5Ca_row.vOc5Ca_topLevelBracket{margin-left:0;padding-left:0}.vOc5Ca_children{margin:0;padding:0;list-style:none}.vOc5Ca_row{box-sizing:border-box;overflow-wrap:anywhere;white-space:pre-wrap;min-width:0;min-height:16px;margin:0;padding:0 0 0 10px;list-style:none;position:relative}.vOc5Ca_row:not(.vOc5Ca_topLevelBracket):hover:not(:has(.vOc5Ca_row:hover)):after,.vOc5Ca_row:not(.vOc5Ca_topLevelBracket)[data-json-copy-active]:after,.vOc5Ca_row:has(>.vOc5Ca_expander:focus-visible):after{z-index:0;height:var(--json-tree-row-height,16px);background:var(--json-tree-hover);content:"";pointer-events:none;position:absolute;top:0;left:0;right:0}.vOc5Ca_row>span:not(.vOc5Ca_expander,.vOc5Ca_copySlot){z-index:1;position:relative}.vOc5Ca_label{color:var(--json-tree-property);margin-right:3px;font-weight:400}.vOc5Ca_clickableLabel{cursor:pointer}.vOc5Ca_stringValue{color:var(--json-tree-string)}.vOc5Ca_stringField{z-index:1;display:flow-root;position:relative}.vOc5Ca_stringText{max-height:calc(var(--json-tree-collapsed-lines) * 16px);text-indent:-12px;word-break:break-all;padding-left:12px;display:block;overflow:hidden}.vOc5Ca_stringRaw{color:var(--dsw-alias-label-primary);font:inherit;overflow-wrap:normal;white-space:pre;word-break:normal;margin:4px 0 0 12px;overflow:auto}.vOc5Ca_stringActions{justify-content:flex-end;align-items:center;gap:4px;width:fit-content;height:16px;display:flex;position:absolute;top:1px;right:4px}.vOc5Ca_stringRaw[data-wrap=true]{overflow-wrap:anywhere;white-space:pre-wrap;word-break:break-all}.vOc5Ca_stringActions>.vOc5Ca_copySlot{opacity:1;pointer-events:auto}.vOc5Ca_stringToggleSlot{float:right;height:calc(var(--json-tree-collapsed-lines) * 16px);shape-outside:inset(calc((var(--json-tree-collapsed-lines) - 1) * 16px) 0 0);pointer-events:none;align-items:flex-end;margin-left:2px;display:flex}.vOc5Ca_stringToggle{color:var(--dsw-alias-label-secondary);font:inherit;text-indent:0;white-space:nowrap;cursor:pointer;pointer-events:auto;background:0 0;border:0;align-items:baseline;gap:2px;margin:0;padding:0;display:inline-flex}.vOc5Ca_stringToggle:hover{color:var(--dsw-alias-label-primary)}.vOc5Ca_stringToggle:focus-visible{outline:1px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:1px}.vOc5Ca_row:has(>.vOc5Ca_stringField){--json-tree-row-height:100%}.vOc5Ca_summary{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.vOc5Ca_numberValue{color:var(--json-tree-number)}.vOc5Ca_keywordValue{color:var(--json-tree-keyword)}.vOc5Ca_otherValue{color:var(--dsw-alias-label-secondary)}.vOc5Ca_punctuation,.vOc5Ca_preview,.vOc5Ca_previewProperty{color:var(--json-tree-punctuation)}.vOc5Ca_previewEllipsis{color:var(--dsw-alias-label-tertiary)}.vOc5Ca_copySlot{opacity:0;pointer-events:none;width:20px;height:16px;display:inline-flex}.vOc5Ca_row>.vOc5Ca_copySlot{z-index:2;position:absolute;top:0;right:0}.vOc5Ca_row:has(>.vOc5Ca_stringField)>.vOc5Ca_copySlot{top:auto;bottom:0}.vOc5Ca_row:has(>.vOc5Ca_copySlot)>.vOc5Ca_stringField .vOc5Ca_stringToggleSlot{padding-right:24px}.vOc5Ca_row:hover:not(:has(.vOc5Ca_row:hover))>.vOc5Ca_copySlot,.vOc5Ca_row[data-json-copy-active]>.vOc5Ca_copySlot,.vOc5Ca_copySlot:focus-within{opacity:1;pointer-events:auto}.vOc5Ca_actionButton{box-sizing:border-box;border-radius:var(--dsw-radius-xs);width:20px;height:16px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;margin:0;padding:0;display:inline-flex}.vOc5Ca_actionButton:hover{color:var(--dsw-alias-label-primary)}.vOc5Ca_actionButton[aria-pressed=true]{color:var(--dsw-alias-state-business-primary)}.vOc5Ca_actionButton:focus-visible{outline:1px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-1px}.vOc5Ca_actionButton[data-state=failed]{color:var(--dsw-alias-state-error-primary)}.vOc5Ca_expander{z-index:2;box-sizing:border-box;width:8px;height:16px;color:var(--json-tree-icon);cursor:pointer;user-select:none;justify-content:flex-start;align-items:center;margin:0;display:inline-flex;position:absolute;top:0;left:0}.vOc5Ca_expander:before{content:"";transform-origin:33.333%;border-top:4px solid #0000;border-bottom:4px solid #0000;border-left:6px solid;width:0;height:0;transform:scale(.75)}.vOc5Ca_collapseIcon:before{transform:rotate(90deg)scale(.75)}.vOc5Ca_expander:hover{color:var(--dsw-alias-label-primary)}.vOc5Ca_expander:focus-visible{outline:none}.vOc5Ca_collapsedContent{color:var(--json-tree-punctuation);cursor:pointer;margin:0 1px}.vOc5Ca_collapsedContent:after{content:"\u2026"}';
41
+ element.textContent = '.vOc5Ca_root{--json-tree-property:#881391;--json-tree-string:#c41a16;--json-tree-number:#1c00cf;--json-tree-keyword:#1c00cf;--json-tree-punctuation:#202124;--json-tree-icon:#5f6368;--json-tree-hover:#3c40430a;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);font:12px/16px var(--ds-font-family-code);overscroll-behavior-x:contain;overscroll-behavior-y:auto;position:relative;overflow:auto}body[data-ds-dark-theme] .vOc5Ca_root{--json-tree-property:#5db0d7;--json-tree-string:#f28b82;--json-tree-number:#99c8ff;--json-tree-keyword:#99c8ff;--json-tree-punctuation:#e8eaed;--json-tree-icon:#9aa0a6;--json-tree-hover:#e8eaed0d}.vOc5Ca_container{box-sizing:border-box;white-space:pre;width:100%;min-width:0;margin:0;padding:6px 8px 8px}.vOc5Ca_expandedTopLevel{box-sizing:border-box;width:100%;min-width:0;padding:6px 8px 8px 14px}.vOc5Ca_expandedTopLevel:has(>.vOc5Ca_topLevelBracket[data-json-root-row][data-json-copy-active]){background:var(--json-tree-hover)}@media (hover:hover){.vOc5Ca_expandedTopLevel:has(>.vOc5Ca_topLevelBracket[data-json-root-row]:hover){background:var(--json-tree-hover)}}.vOc5Ca_expandedTopLevelContainer{padding:0}.vOc5Ca_row.vOc5Ca_topLevelBracket{margin-left:0;padding-left:0}.vOc5Ca_children{margin:0;padding:0;list-style:none}.vOc5Ca_row{box-sizing:border-box;overflow-wrap:anywhere;white-space:pre-wrap;min-width:0;min-height:16px;margin:0;padding:0 0 0 10px;list-style:none;position:relative}.vOc5Ca_row:not(.vOc5Ca_topLevelBracket)[data-json-copy-active]:after,.vOc5Ca_row:has(>.vOc5Ca_expander:focus-visible):after{z-index:0;height:var(--json-tree-row-height,16px);background:var(--json-tree-hover);content:"";pointer-events:none;position:absolute;top:0;left:0;right:0}@media (hover:hover){.vOc5Ca_row:not(.vOc5Ca_topLevelBracket):hover:not(:has(.vOc5Ca_row:hover)):after{z-index:0;height:var(--json-tree-row-height,16px);background:var(--json-tree-hover);content:"";pointer-events:none;position:absolute;top:0;left:0;right:0}}.vOc5Ca_row>span:not(.vOc5Ca_expander,.vOc5Ca_copySlot){z-index:1;position:relative}.vOc5Ca_label{color:var(--json-tree-property);margin-right:3px;font-weight:400}.vOc5Ca_clickableLabel{cursor:pointer}.vOc5Ca_stringValue{color:var(--json-tree-string)}.vOc5Ca_stringField{z-index:1;display:flow-root;position:relative}.vOc5Ca_stringText{max-height:calc(var(--json-tree-collapsed-lines) * 16px);text-indent:-12px;word-break:break-all;padding-left:12px;display:block;overflow:hidden}.vOc5Ca_stringRaw{color:var(--dsw-alias-label-primary);font:inherit;overflow-wrap:normal;white-space:pre;word-break:normal;margin:4px 0 0 12px;overflow:auto}.vOc5Ca_stringActions{justify-content:flex-end;align-items:center;gap:4px;width:fit-content;height:16px;display:flex;position:absolute;top:1px;right:4px}.vOc5Ca_stringRaw[data-wrap=true]{overflow-wrap:anywhere;white-space:pre-wrap;word-break:break-all}.vOc5Ca_stringActions>.vOc5Ca_copySlot{opacity:1;pointer-events:auto}.vOc5Ca_stringToggleSlot{float:right;height:calc(var(--json-tree-collapsed-lines) * 16px);shape-outside:inset(calc((var(--json-tree-collapsed-lines) - 1) * 16px) 0 0);pointer-events:none;align-items:flex-end;margin-left:2px;display:flex}.vOc5Ca_stringToggle{color:var(--dsw-alias-label-secondary);font:inherit;text-indent:0;white-space:nowrap;cursor:pointer;pointer-events:auto;background:0 0;border:0;align-items:baseline;gap:2px;margin:0;padding:0;display:inline-flex}@media (hover:hover){.vOc5Ca_stringToggle:hover{color:var(--dsw-alias-label-primary)}}.vOc5Ca_stringToggle:focus-visible{outline:1px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:1px}.vOc5Ca_row:has(>.vOc5Ca_stringField){--json-tree-row-height:100%}.vOc5Ca_summary{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.vOc5Ca_numberValue{color:var(--json-tree-number)}.vOc5Ca_keywordValue{color:var(--json-tree-keyword)}.vOc5Ca_otherValue{color:var(--dsw-alias-label-secondary)}.vOc5Ca_punctuation,.vOc5Ca_preview,.vOc5Ca_previewProperty{color:var(--json-tree-punctuation)}.vOc5Ca_previewEllipsis{color:var(--dsw-alias-label-tertiary)}.vOc5Ca_copySlot{opacity:0;pointer-events:none;width:20px;height:16px;display:inline-flex}.vOc5Ca_row>.vOc5Ca_copySlot{z-index:2;position:absolute;top:0;right:0}.vOc5Ca_row:has(>.vOc5Ca_stringField)>.vOc5Ca_copySlot{top:auto;bottom:0}.vOc5Ca_row:has(>.vOc5Ca_copySlot)>.vOc5Ca_stringField .vOc5Ca_stringToggleSlot{padding-right:24px}.vOc5Ca_row[data-json-copy-active]>.vOc5Ca_copySlot,.vOc5Ca_copySlot:focus-within{opacity:1;pointer-events:auto}@media (hover:hover){.vOc5Ca_row:hover:not(:has(.vOc5Ca_row:hover))>.vOc5Ca_copySlot{opacity:1;pointer-events:auto}}.vOc5Ca_actionButton{box-sizing:border-box;border-radius:var(--dsw-radius-xs);width:20px;height:16px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;margin:0;padding:0;display:inline-flex}@media (hover:hover){.vOc5Ca_actionButton:hover{color:var(--dsw-alias-label-primary)}}.vOc5Ca_actionButton[aria-pressed=true]{color:var(--dsw-alias-state-business-primary)}.vOc5Ca_actionButton:focus-visible{outline:1px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-1px}.vOc5Ca_actionButton[data-state=failed]{color:var(--dsw-alias-state-error-primary)}.vOc5Ca_expander{z-index:2;box-sizing:border-box;width:8px;height:16px;color:var(--json-tree-icon);cursor:pointer;user-select:none;justify-content:flex-start;align-items:center;margin:0;display:inline-flex;position:absolute;top:0;left:0}.vOc5Ca_expander:before{content:"";transform-origin:33.333%;border-top:4px solid #0000;border-bottom:4px solid #0000;border-left:6px solid;width:0;height:0;transform:scale(.75)}.vOc5Ca_collapseIcon:before{transform:rotate(90deg)scale(.75)}@media (hover:hover){.vOc5Ca_expander:hover{color:var(--dsw-alias-label-primary)}}.vOc5Ca_expander:focus-visible{outline:none}.vOc5Ca_collapsedContent{color:var(--json-tree-punctuation);cursor:pointer;margin:0 1px}.vOc5Ca_collapsedContent:after{content:"\u2026"}@media (hover:none){.vOc5Ca_copySlot{opacity:1;pointer-events:auto}.vOc5Ca_row:has(>.vOc5Ca_copySlot){padding-right:24px}}';
41
42
  document.head.appendChild(element);
42
43
  }
43
- var JsonTree_module_default = { "punctuation": "vOc5Ca_punctuation", "stringField": "vOc5Ca_stringField", "expander": "vOc5Ca_expander", "collapsedContent": "vOc5Ca_collapsedContent", "stringToggleSlot": "vOc5Ca_stringToggleSlot", "topLevelBracket": "vOc5Ca_topLevelBracket", "stringValue": "vOc5Ca_stringValue", "expandedTopLevelContainer": "vOc5Ca_expandedTopLevelContainer", "previewProperty": "vOc5Ca_previewProperty", "actionButton": "vOc5Ca_actionButton", "container": "vOc5Ca_container", "children": "vOc5Ca_children", "expandedTopLevel": "vOc5Ca_expandedTopLevel", "keywordValue": "vOc5Ca_keywordValue", "previewEllipsis": "vOc5Ca_previewEllipsis", "stringToggle": "vOc5Ca_stringToggle", "root": "vOc5Ca_root", "collapseIcon": "vOc5Ca_collapseIcon", "stringText": "vOc5Ca_stringText", "summary": "vOc5Ca_summary", "label": "vOc5Ca_label", "preview": "vOc5Ca_preview", "stringActions": "vOc5Ca_stringActions", "otherValue": "vOc5Ca_otherValue", "copySlot": "vOc5Ca_copySlot", "clickableLabel": "vOc5Ca_clickableLabel", "stringRaw": "vOc5Ca_stringRaw", "row": "vOc5Ca_row", "numberValue": "vOc5Ca_numberValue" };
44
+ var JsonTree_module_default = { "container": "vOc5Ca_container", "collapseIcon": "vOc5Ca_collapseIcon", "row": "vOc5Ca_row", "stringToggle": "vOc5Ca_stringToggle", "previewProperty": "vOc5Ca_previewProperty", "expander": "vOc5Ca_expander", "label": "vOc5Ca_label", "clickableLabel": "vOc5Ca_clickableLabel", "summary": "vOc5Ca_summary", "numberValue": "vOc5Ca_numberValue", "actionButton": "vOc5Ca_actionButton", "copySlot": "vOc5Ca_copySlot", "expandedTopLevelContainer": "vOc5Ca_expandedTopLevelContainer", "expandedTopLevel": "vOc5Ca_expandedTopLevel", "keywordValue": "vOc5Ca_keywordValue", "preview": "vOc5Ca_preview", "stringRaw": "vOc5Ca_stringRaw", "topLevelBracket": "vOc5Ca_topLevelBracket", "collapsedContent": "vOc5Ca_collapsedContent", "root": "vOc5Ca_root", "stringText": "vOc5Ca_stringText", "children": "vOc5Ca_children", "stringValue": "vOc5Ca_stringValue", "stringActions": "vOc5Ca_stringActions", "punctuation": "vOc5Ca_punctuation", "stringToggleSlot": "vOc5Ca_stringToggleSlot", "stringField": "vOc5Ca_stringField", "previewEllipsis": "vOc5Ca_previewEllipsis", "otherValue": "vOc5Ca_otherValue" };
44
45
 
45
46
  // src/JsonTree.tsx
46
47
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -69,18 +70,18 @@ function createCopyStore() {
69
70
  set(next) {
70
71
  const previous = current?.id;
71
72
  current = next;
72
- for (const id7 of /* @__PURE__ */ new Set([previous, next?.id])) {
73
- if (id7 === void 0) continue;
74
- for (const listener of listeners.get(id7) ?? []) listener();
73
+ for (const id8 of /* @__PURE__ */ new Set([previous, next?.id])) {
74
+ if (id8 === void 0) continue;
75
+ for (const listener of listeners.get(id8) ?? []) listener();
75
76
  }
76
77
  },
77
- subscribe(id7, listener) {
78
- let row = listeners.get(id7);
79
- if (row === void 0) listeners.set(id7, row = /* @__PURE__ */ new Set());
78
+ subscribe(id8, listener) {
79
+ let row = listeners.get(id8);
80
+ if (row === void 0) listeners.set(id8, row = /* @__PURE__ */ new Set());
80
81
  row.add(listener);
81
82
  return () => {
82
83
  row.delete(listener);
83
- if (row.size === 0) listeners.delete(id7);
84
+ if (row.size === 0) listeners.delete(id8);
84
85
  };
85
86
  }
86
87
  };
@@ -93,11 +94,11 @@ function JsonCopyAction({
93
94
  onCopy,
94
95
  onClose
95
96
  }) {
96
- const id7 = pathId(target.path);
97
- const subscribe = useCallback((listener) => store.subscribe(id7, listener), [id7, store]);
97
+ const id8 = pathId(target.path);
98
+ const subscribe = useCallback((listener) => store.subscribe(id8, listener), [id8, store]);
98
99
  const getSnapshot = () => {
99
100
  const current = store.get();
100
- return current?.id === id7 ? current : void 0;
101
+ return current?.id === id8 ? current : void 0;
101
102
  };
102
103
  const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
103
104
  const buttonRef = useRef(null);
@@ -125,7 +126,7 @@ function JsonCopyAction({
125
126
  onContextMenu: (event) => {
126
127
  event.preventDefault();
127
128
  event.stopPropagation();
128
- store.set({ id: id7, target, state, menuOpen: true });
129
+ store.set({ id: id8, target, state, menuOpen: true });
129
130
  },
130
131
  children: state === "copied" ? /* @__PURE__ */ jsx(IconCheckOutlineRegular, { size: 12 }) : /* @__PURE__ */ jsx(IconCopyOutlineRegular, { size: 12 })
131
132
  }
@@ -716,8 +717,8 @@ function JsonTree({
716
717
  }
717
718
 
718
719
  // src/TerminalBlock.tsx
719
- import { useCallback as useCallback3, useMemo, useState as useState3 } from "react";
720
- import clsx2 from "clsx";
720
+ import { useCallback as useCallback2, useMemo, useState as useState3 } from "react";
721
+ import clsx3 from "clsx";
721
722
 
722
723
  // src/ansi.ts
723
724
  import Anser from "anser";
@@ -952,36 +953,67 @@ function headTailCap(total, maxLines, expanded) {
952
953
  return { hidden, capped: hidden > 0 && !expanded, headLines, tailLines: maxLines - headLines };
953
954
  }
954
955
 
955
- // src/use-copy-feedback.ts
956
- import { useCallback as useCallback2, useState as useState2 } from "react";
957
- var COPIED_FEEDBACK_MS = 1e3;
958
- function useCopyFeedback(text) {
959
- const [copied, setCopied] = useState2(false);
960
- const onCopy = useCallback2(() => {
961
- if (copied) return;
962
- void writeClipboard(text).then((ok) => {
963
- if (!ok) return;
964
- setCopied(true);
965
- window.setTimeout(() => {
966
- setCopied(false);
967
- }, COPIED_FEEDBACK_MS);
968
- });
969
- }, [copied, text]);
970
- return { copied, onCopy };
971
- }
972
-
973
956
  // .build/css/TerminalBlock.module.mjs
974
957
  var id2 = "@seekbuddy/dsh-ui/TerminalBlock.module.css";
975
958
  if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id2 + '"]')) {
976
959
  const element = document.createElement("style");
977
960
  element.setAttribute("data-dsh-ui-primitives", id2);
978
- element.textContent = ".OBf4Nq_block{--dsl-terminal-radius:var(--dsw-radius-lg);--dsl-terminal-line-height:22px;--dsl-terminal-font:var(--dsw-font-markdown-code-block);--dsl-terminal-gutter:30px;padding-left:var(--dsl-terminal-gutter);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border-radius:var(--dsl-terminal-radius);margin:16px 0;position:relative;overflow:hidden}.OBf4Nq_header{margin-left:calc(-1 * var(--dsl-terminal-gutter));padding:9px 14px 9px var(--dsl-terminal-gutter);border-top-left-radius:var(--dsl-terminal-radius);border-top-right-radius:var(--dsl-terminal-radius);align-items:flex-start;gap:12px;max-height:150px;display:flex;overflow-y:auto}.OBf4Nq_header::-webkit-scrollbar-thumb{border-radius:var(--dsw-radius-sm);background-clip:padding-box;border:2px solid #0000}.OBf4Nq_header::-webkit-scrollbar-track{margin:6px}.OBf4Nq_block[data-body] .OBf4Nq_header{border-bottom:.5px solid var(--dsw-alias-border-l2)}.OBf4Nq_prompt{min-width:0;font:var(--dsl-terminal-font);flex-direction:column;flex:1;display:flex}.OBf4Nq_promptLine{min-width:0;line-height:var(--dsl-terminal-line-height);align-items:baseline;gap:8px;display:flex;position:relative}.OBf4Nq_runState{left:calc(-1 * var(--dsl-terminal-gutter) + 8px);position:absolute;top:50%;transform:translateY(-50%)}.OBf4Nq_runStateLabel{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.OBf4Nq_cwd{color:var(--dsw-alias-label-tertiary);flex:none}.OBf4Nq_command{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:var(--dsl-terminal-command-whitespace,pre);overflow-wrap:anywhere;overflow:hidden}.OBf4Nq_status{height:var(--dsl-terminal-line-height);color:var(--dsw-alias-state-error-primary);flex:none;position:sticky;top:0}.OBf4Nq_copyButton{background-color:var(--dsw-alias-markdown-code-block);color:var(--dsw-alias-label-secondary);cursor:pointer;font:var(--dsw-font-xs-13);line-height:var(--dsl-terminal-line-height);border:none;flex:none;margin:0;padding:0;position:sticky;top:0}.OBf4Nq_output{max-height:var(--dsl-terminal-output-max-height,none);font:var(--dsl-terminal-font);padding:12px 14px 12px 0;overflow:auto}.OBf4Nq_output::-webkit-scrollbar-thumb{border-radius:var(--dsw-radius-sm);background-clip:padding-box;border:2px solid #0000}.OBf4Nq_output::-webkit-scrollbar-track{margin:6px}.OBf4Nq_line{min-height:var(--dsl-terminal-line-height);white-space:var(--dsl-terminal-line-whitespace,pre);overflow-wrap:anywhere}.OBf4Nq_expand{width:100%;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;text-align:left;background-color:#0000;border:none;padding:0;display:block}.OBf4Nq_expand:hover{color:var(--dsw-alias-label-secondary)}.OBf4Nq_empty{font:var(--dsl-terminal-font);color:var(--dsw-alias-label-tertiary);padding:12px 14px 12px 0}";
961
+ element.textContent = ".OBf4Nq_block{--dsl-terminal-radius:var(--dsw-radius-lg);--dsl-terminal-line-height:22px;--dsl-terminal-font:var(--dsw-font-markdown-code-block);--dsl-terminal-gutter:30px;padding-left:var(--dsl-terminal-gutter);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border-radius:var(--dsl-terminal-radius);margin:16px 0;position:relative;overflow:hidden}.OBf4Nq_header{margin-left:calc(-1 * var(--dsl-terminal-gutter));padding:9px 14px 9px var(--dsl-terminal-gutter);border-top-left-radius:var(--dsl-terminal-radius);border-top-right-radius:var(--dsl-terminal-radius);align-items:flex-start;gap:12px;max-height:150px;display:flex;overflow-y:auto}.OBf4Nq_header::-webkit-scrollbar-thumb{border-radius:var(--dsw-radius-sm);background-clip:padding-box;border:2px solid #0000}.OBf4Nq_header::-webkit-scrollbar-track{margin:6px}.OBf4Nq_block[data-body] .OBf4Nq_header{border-bottom:.5px solid var(--dsw-alias-border-l2)}.OBf4Nq_prompt{min-width:0;font:var(--dsl-terminal-font);flex-direction:column;flex:1;display:flex}.OBf4Nq_promptLine{min-width:0;line-height:var(--dsl-terminal-line-height);align-items:baseline;gap:8px;display:flex;position:relative}.OBf4Nq_runState{left:calc(-1 * var(--dsl-terminal-gutter) + 8px);top:calc(var(--dsl-terminal-line-height) / 2);position:absolute;transform:translateY(-50%)}.OBf4Nq_runStateLabel{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.OBf4Nq_cwd{color:var(--dsw-alias-label-tertiary);flex:none}.OBf4Nq_command{--dsl-command-whitespace:var(--dsl-terminal-command-whitespace,pre);color:var(--dsw-alias-label-primary)}.OBf4Nq_status{height:var(--dsl-terminal-line-height);color:var(--dsw-alias-state-error-primary);flex:none;position:sticky;top:0}.OBf4Nq_copyButton{background-color:var(--dsw-alias-markdown-code-block);color:var(--dsw-alias-label-secondary);cursor:pointer;font:var(--dsw-font-xs-13);line-height:var(--dsl-terminal-line-height);border:none;flex:none;margin:0;padding:0;position:sticky;top:0}.OBf4Nq_output{max-height:var(--dsl-terminal-output-max-height,none);font:var(--dsl-terminal-font);padding:12px 14px 12px 0;overflow:auto}.OBf4Nq_output::-webkit-scrollbar-thumb{border-radius:var(--dsw-radius-sm);background-clip:padding-box;border:2px solid #0000}.OBf4Nq_output::-webkit-scrollbar-track{margin:6px}.OBf4Nq_line{min-height:var(--dsl-terminal-line-height);white-space:var(--dsl-terminal-line-whitespace,pre);overflow-wrap:anywhere}.OBf4Nq_expand{width:100%;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;text-align:left;background-color:#0000;border:none;padding:0;display:block}@media (hover:hover){.OBf4Nq_expand:hover{color:var(--dsw-alias-label-secondary)}}.OBf4Nq_empty{font:var(--dsl-terminal-font);color:var(--dsw-alias-label-tertiary);padding:12px 14px 12px 0}";
962
+ document.head.appendChild(element);
963
+ }
964
+ var TerminalBlock_module_default = { "prompt": "OBf4Nq_prompt", "promptLine": "OBf4Nq_promptLine", "runState": "OBf4Nq_runState", "command": "OBf4Nq_command", "status": "OBf4Nq_status", "cwd": "OBf4Nq_cwd", "runStateLabel": "OBf4Nq_runStateLabel", "output": "OBf4Nq_output", "expand": "OBf4Nq_expand", "copyButton": "OBf4Nq_copyButton", "empty": "OBf4Nq_empty", "line": "OBf4Nq_line", "block": "OBf4Nq_block", "header": "OBf4Nq_header" };
965
+
966
+ // src/CommandText.tsx
967
+ import { useLayoutEffect as useLayoutEffect2, useRef as useRef2, useState as useState2 } from "react";
968
+ import clsx2 from "clsx";
969
+
970
+ // .build/css/CommandText.module.mjs
971
+ var id3 = "@seekbuddy/dsh-ui/CommandText.module.css";
972
+ if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id3 + '"]')) {
973
+ const element = document.createElement("style");
974
+ element.setAttribute("data-dsh-ui-primitives", id3);
975
+ element.textContent = "._7k6xxG_text{min-width:0;white-space:var(--dsl-command-whitespace,pre);overflow-wrap:anywhere;display:block;overflow-x:auto}._7k6xxG_text:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}";
979
976
  document.head.appendChild(element);
980
977
  }
981
- var TerminalBlock_module_default = { "cwd": "OBf4Nq_cwd", "header": "OBf4Nq_header", "command": "OBf4Nq_command", "runStateLabel": "OBf4Nq_runStateLabel", "expand": "OBf4Nq_expand", "prompt": "OBf4Nq_prompt", "promptLine": "OBf4Nq_promptLine", "block": "OBf4Nq_block", "status": "OBf4Nq_status", "copyButton": "OBf4Nq_copyButton", "empty": "OBf4Nq_empty", "runState": "OBf4Nq_runState", "output": "OBf4Nq_output", "line": "OBf4Nq_line" };
978
+ var CommandText_module_default = { "text": "_7k6xxG_text" };
979
+
980
+ // src/CommandText.tsx
981
+ import { jsx as jsx2 } from "react/jsx-runtime";
982
+ function CommandText({ text, label, className }) {
983
+ const ref = useRef2(null);
984
+ const [overflow, setOverflow] = useState2(false);
985
+ useLayoutEffect2(() => {
986
+ const element = ref.current;
987
+ if (element === null) return void 0;
988
+ const measure = () => {
989
+ setOverflow(element.scrollWidth > element.clientWidth);
990
+ };
991
+ measure();
992
+ const observer = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(measure);
993
+ observer?.observe(element);
994
+ const fonts = "fonts" in element.ownerDocument ? element.ownerDocument.fonts : void 0;
995
+ fonts?.addEventListener("loadingdone", measure);
996
+ return () => {
997
+ observer?.disconnect();
998
+ fonts?.removeEventListener("loadingdone", measure);
999
+ };
1000
+ }, [text]);
1001
+ return /* @__PURE__ */ jsx2(
1002
+ "span",
1003
+ {
1004
+ ref,
1005
+ className: clsx2(CommandText_module_default.text, className),
1006
+ "data-command-text": true,
1007
+ tabIndex: overflow ? 0 : void 0,
1008
+ role: overflow ? "group" : void 0,
1009
+ "aria-label": overflow ? label : void 0,
1010
+ children: text
1011
+ }
1012
+ );
1013
+ }
982
1014
 
983
1015
  // src/TerminalBlock.tsx
984
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
1016
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
985
1017
  var DEFAULT_TERMINAL_MAX_LINES = 16;
986
1018
  function promptLabel(cwd, home) {
987
1019
  const trimmed = cwd.replace(/[/\\]+$/, "");
@@ -1002,7 +1034,7 @@ function runState(running, exitCode, signal, labels) {
1002
1034
  }
1003
1035
  function renderLine(line) {
1004
1036
  return line.map(
1005
- (span, index) => span.style === void 0 ? span.text : /* @__PURE__ */ jsx2("span", { style: span.style, children: span.text }, index)
1037
+ (span, index) => span.style === void 0 ? span.text : /* @__PURE__ */ jsx3("span", { style: span.style, children: span.text }, index)
1006
1038
  );
1007
1039
  }
1008
1040
  function TerminalBlock({
@@ -1013,6 +1045,7 @@ function TerminalBlock({
1013
1045
  exitCode,
1014
1046
  signal,
1015
1047
  running = false,
1048
+ background = false,
1016
1049
  maxLines = DEFAULT_TERMINAL_MAX_LINES,
1017
1050
  copyText: copyText4,
1018
1051
  runStateDot = true,
@@ -1028,42 +1061,43 @@ function TerminalBlock({
1028
1061
  return terminated ? parsed.slice(0, -1) : parsed;
1029
1062
  }, [text]);
1030
1063
  const [expanded, setExpanded] = useState3(false);
1031
- const { copied, onCopy } = useCopyFeedback(copyText4 ?? text);
1032
- const onToggle = useCallback3(() => {
1064
+ const { copied, onCopy } = useClipboardCopy(copyText4 ?? text);
1065
+ const onToggle = useCallback2(() => {
1033
1066
  setExpanded((value) => !value);
1034
1067
  }, []);
1035
- const status = statusText(exitCode, signal, copy);
1068
+ const status = background ? void 0 : statusText(exitCode, signal, copy);
1036
1069
  const state = runState(running, exitCode, signal, copy);
1070
+ const showState = runStateDot && (!background || running);
1037
1071
  const commandLines = useMemo(() => {
1038
1072
  const body2 = command.endsWith("\n") ? command.slice(0, -1) : command;
1039
1073
  return body2.split("\n");
1040
1074
  }, [command]);
1041
1075
  const empty = lines.every((line) => line.every((span) => span.text.trim() === ""));
1042
1076
  const { hidden, capped, headLines, tailLines } = headTailCap(lines.length, maxLines, expanded);
1043
- const body = !running || !empty;
1077
+ const body = !background && (!running || !empty);
1044
1078
  return /* @__PURE__ */ jsxs2(
1045
1079
  "div",
1046
1080
  {
1047
- className: clsx2(TerminalBlock_module_default.block, className),
1081
+ className: clsx3(TerminalBlock_module_default.block, className),
1048
1082
  "data-terminal": "",
1049
1083
  "data-running": running ? "" : void 0,
1050
1084
  "data-body": body ? "" : void 0,
1051
1085
  children: [
1052
1086
  /* @__PURE__ */ jsxs2("div", { className: TerminalBlock_module_default.header, children: [
1053
1087
  /* @__PURE__ */ jsxs2("div", { className: TerminalBlock_module_default.prompt, children: [
1054
- runStateDot && /* @__PURE__ */ jsx2("span", { className: TerminalBlock_module_default.runStateLabel, children: state.label }),
1088
+ showState && /* @__PURE__ */ jsx3("span", { className: TerminalBlock_module_default.runStateLabel, children: state.label }),
1055
1089
  commandLines.map((line, index) => /* @__PURE__ */ jsxs2("div", { className: TerminalBlock_module_default.promptLine, children: [
1056
- index === 0 && runStateDot && /* @__PURE__ */ jsx2(StateDot, { state: state.state, className: TerminalBlock_module_default.runState }),
1057
- /* @__PURE__ */ jsx2("span", { className: TerminalBlock_module_default.cwd, children: index > 0 || cwd === void 0 ? "$" : promptLabel(cwd, home) }),
1058
- /* @__PURE__ */ jsx2("span", { className: TerminalBlock_module_default.command, children: line })
1090
+ index === 0 && showState && /* @__PURE__ */ jsx3(StateDot, { state: state.state, className: TerminalBlock_module_default.runState }),
1091
+ /* @__PURE__ */ jsx3("span", { className: TerminalBlock_module_default.cwd, children: index > 0 || cwd === void 0 ? "$" : promptLabel(cwd, home) }),
1092
+ /* @__PURE__ */ jsx3(CommandText, { className: TerminalBlock_module_default.command, text: line, label: copy.commandLine(index + 1) })
1059
1093
  ] }, index))
1060
1094
  ] }),
1061
- status !== void 0 && /* @__PURE__ */ jsx2(Pill, { className: TerminalBlock_module_default.status, children: status }),
1062
- (copyText4 !== void 0 || !running && !empty) && /* @__PURE__ */ jsx2("button", { type: "button", className: TerminalBlock_module_default.copyButton, onClick: onCopy, children: copied ? copy.copied : copy.copy })
1095
+ status !== void 0 && /* @__PURE__ */ jsx3(Pill, { className: TerminalBlock_module_default.status, children: status }),
1096
+ (copyText4 !== void 0 || !background && !running && !empty) && /* @__PURE__ */ jsx3("button", { type: "button", className: TerminalBlock_module_default.copyButton, onClick: onCopy, children: copied ? copy.copied : copy.copy })
1063
1097
  ] }),
1064
- body && (empty ? /* @__PURE__ */ jsx2("div", { className: TerminalBlock_module_default.empty, children: copy.noOutput }) : /* @__PURE__ */ jsxs2("div", { className: TerminalBlock_module_default.output, children: [
1065
- (capped ? lines.slice(0, headLines) : lines).map((line, index) => /* @__PURE__ */ jsx2("div", { className: TerminalBlock_module_default.line, children: renderLine(line) }, index)),
1066
- hidden > 0 && /* @__PURE__ */ jsx2(
1098
+ body && (empty ? /* @__PURE__ */ jsx3("div", { className: TerminalBlock_module_default.empty, children: copy.noOutput }) : /* @__PURE__ */ jsxs2("div", { className: TerminalBlock_module_default.output, children: [
1099
+ (capped ? lines.slice(0, headLines) : lines).map((line, index) => /* @__PURE__ */ jsx3("div", { className: TerminalBlock_module_default.line, children: renderLine(line) }, index)),
1100
+ hidden > 0 && /* @__PURE__ */ jsx3(
1067
1101
  "button",
1068
1102
  {
1069
1103
  type: "button",
@@ -1074,7 +1108,7 @@ function TerminalBlock({
1074
1108
  children: expanded ? copy.collapse : copy.expand(hidden)
1075
1109
  }
1076
1110
  ),
1077
- capped && lines.slice(lines.length - tailLines).map((line, index) => /* @__PURE__ */ jsx2("div", { className: TerminalBlock_module_default.line, children: renderLine(line) }, index))
1111
+ capped && lines.slice(lines.length - tailLines).map((line, index) => /* @__PURE__ */ jsx3("div", { className: TerminalBlock_module_default.line, children: renderLine(line) }, index))
1078
1112
  ] }))
1079
1113
  ]
1080
1114
  }
@@ -1082,13 +1116,13 @@ function TerminalBlock({
1082
1116
  }
1083
1117
 
1084
1118
  // src/ReadBlock.tsx
1085
- import { useCallback as useCallback4, useMemo as useMemo2, useRef as useRef2, useState as useState4, useSyncExternalStore as useSyncExternalStore2 } from "react";
1086
- import clsx3 from "clsx";
1119
+ import { useCallback as useCallback3, useMemo as useMemo2, useRef as useRef3, useState as useState4, useSyncExternalStore as useSyncExternalStore2 } from "react";
1120
+ import clsx4 from "clsx";
1087
1121
 
1088
1122
  // src/FoldToggle.tsx
1089
- import { jsx as jsx3 } from "react/jsx-runtime";
1123
+ import { jsx as jsx4 } from "react/jsx-runtime";
1090
1124
  function FoldToggle({ className, expanded, hidden, labels, onToggle }) {
1091
- return /* @__PURE__ */ jsx3(
1125
+ return /* @__PURE__ */ jsx4(
1092
1126
  "button",
1093
1127
  {
1094
1128
  type: "button",
@@ -1102,20 +1136,20 @@ function FoldToggle({ className, expanded, hidden, labels, onToggle }) {
1102
1136
  }
1103
1137
 
1104
1138
  // .build/css/ReadBlock.module.mjs
1105
- var id3 = "@seekbuddy/dsh-ui/ReadBlock.module.css";
1106
- if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id3 + '"]')) {
1139
+ var id4 = "@seekbuddy/dsh-ui/ReadBlock.module.css";
1140
+ if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id4 + '"]')) {
1107
1141
  const element = document.createElement("style");
1108
- element.setAttribute("data-dsh-ui-primitives", id3);
1109
- element.textContent = ".Lq5Aja_line{white-space:pre;min-height:1lh;display:flex}.Lq5Aja_gutter{width:var(--dsl-read-gutter);text-align:right;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;margin-right:12px}.Lq5Aja_content{min-width:0;color:var(--dsw-alias-label-primary)}.Lq5Aja_block[data-code-wrap=true] .Lq5Aja_line{white-space:pre-wrap}.Lq5Aja_block[data-code-wrap=true] .Lq5Aja_content{overflow-wrap:anywhere}.Lq5Aja_expand{width:100%;padding:0 0 0 calc(var(--dsl-read-gutter) + 12px);color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:none;display:block}.Lq5Aja_expand:hover{color:var(--dsw-alias-label-secondary)}";
1142
+ element.setAttribute("data-dsh-ui-primitives", id4);
1143
+ element.textContent = ".Lq5Aja_line{white-space:pre;min-height:1lh;display:flex}.Lq5Aja_gutter{width:var(--dsl-read-gutter);text-align:right;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;margin-right:12px}.Lq5Aja_content{min-width:0;color:var(--dsw-alias-label-primary)}.Lq5Aja_block[data-code-wrap=true] .Lq5Aja_line{white-space:pre-wrap}.Lq5Aja_block[data-code-wrap=true] .Lq5Aja_content{overflow-wrap:anywhere}.Lq5Aja_expand{width:100%;padding:0 0 0 calc(var(--dsl-read-gutter) + 12px);color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:none;display:block}@media (hover:hover){.Lq5Aja_expand:hover{color:var(--dsw-alias-label-secondary)}}";
1110
1144
  document.head.appendChild(element);
1111
1145
  }
1112
- var ReadBlock_module_default = { "expand": "Lq5Aja_expand", "line": "Lq5Aja_line", "gutter": "Lq5Aja_gutter", "block": "Lq5Aja_block", "content": "Lq5Aja_content" };
1146
+ var ReadBlock_module_default = { "block": "Lq5Aja_block", "line": "Lq5Aja_line", "expand": "Lq5Aja_expand", "content": "Lq5Aja_content", "gutter": "Lq5Aja_gutter" };
1113
1147
 
1114
1148
  // src/ReadBlock.tsx
1115
- import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
1149
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
1116
1150
  var DEFAULT_READ_MAX_LINES = 16;
1117
1151
  function renderSpans(spans) {
1118
- return spans.map((span, index) => /* @__PURE__ */ jsx4("span", { style: span.style, children: span.text }, index));
1152
+ return spans.map((span, index) => /* @__PURE__ */ jsx5("span", { style: span.style, children: span.text }, index));
1119
1153
  }
1120
1154
  function ReadBlock({
1121
1155
  label,
@@ -1126,7 +1160,7 @@ function ReadBlock({
1126
1160
  maxLines = DEFAULT_READ_MAX_LINES,
1127
1161
  className
1128
1162
  }) {
1129
- const rootRef = useRef2(null);
1163
+ const rootRef = useRef3(null);
1130
1164
  const highlighting = useViewportHighlighting(rootRef, lang);
1131
1165
  const raw = useMemo2(() => lines.map((line) => line.text).join("\n"), [lines]);
1132
1166
  const loaded = useSyncExternalStore2(subscribeGrammarLoaded, grammarLoadCount, grammarLoadCount);
@@ -1137,7 +1171,7 @@ function ReadBlock({
1137
1171
  const [expanded, setExpanded] = useState4(false);
1138
1172
  const [copied, setCopied] = useState4(false);
1139
1173
  const [wrapped, setWrapped] = useState4(false);
1140
- const onCopy = useCallback4(() => {
1174
+ const onCopy = useCallback3(() => {
1141
1175
  if (copied) return;
1142
1176
  void writeClipboard(raw).then((ok) => {
1143
1177
  if (!ok) return;
@@ -1147,7 +1181,7 @@ function ReadBlock({
1147
1181
  }, 1e3);
1148
1182
  });
1149
1183
  }, [copied, raw]);
1150
- const onToggle = useCallback4(() => {
1184
+ const onToggle = useCallback3(() => {
1151
1185
  setExpanded((value) => !value);
1152
1186
  }, []);
1153
1187
  const hidden = lines.length - maxLines;
@@ -1156,8 +1190,8 @@ function ReadBlock({
1156
1190
  const tailLines = maxLines - headLines;
1157
1191
  const windowed = lines.length < totalLines;
1158
1192
  const rows = (slice) => slice.map(([line, spans]) => /* @__PURE__ */ jsxs3("div", { className: ReadBlock_module_default.line, children: [
1159
- /* @__PURE__ */ jsx4("span", { className: ReadBlock_module_default.gutter, "aria-hidden": true, children: line.number }),
1160
- /* @__PURE__ */ jsx4("span", { className: ReadBlock_module_default.content, children: spans === void 0 ? line.text : renderSpans(spans) })
1193
+ /* @__PURE__ */ jsx5("span", { className: ReadBlock_module_default.gutter, "aria-hidden": true, children: line.number }),
1194
+ /* @__PURE__ */ jsx5("span", { className: ReadBlock_module_default.content, children: spans === void 0 ? line.text : renderSpans(spans) })
1161
1195
  ] }, line.number));
1162
1196
  const gutterDigits = lines.reduce((digits, line) => Math.max(digits, String(line.number).length), 3);
1163
1197
  const gutterStyle = { "--dsl-read-gutter": `${gutterDigits}ch` };
@@ -1169,12 +1203,12 @@ function ReadBlock({
1169
1203
  "div",
1170
1204
  {
1171
1205
  ref: rootRef,
1172
- className: clsx3(CodeCard_module_default.card, ReadBlock_module_default.block, className),
1206
+ className: clsx4(CodeCard_module_default.card, ReadBlock_module_default.block, className),
1173
1207
  "data-read": "",
1174
1208
  "data-code-wrap": wrapped,
1175
1209
  style: gutterStyle,
1176
1210
  children: [
1177
- /* @__PURE__ */ jsx4(
1211
+ /* @__PURE__ */ jsx5(
1178
1212
  CodeToolbar,
1179
1213
  {
1180
1214
  lang,
@@ -1193,7 +1227,7 @@ function ReadBlock({
1193
1227
  ),
1194
1228
  /* @__PURE__ */ jsxs3("div", { className: CodeCard_module_default.body, children: [
1195
1229
  rows(capped ? paired.slice(0, headLines) : paired),
1196
- hidden > 0 && /* @__PURE__ */ jsx4(FoldToggle, { className: ReadBlock_module_default.expand, expanded, hidden, labels, onToggle }),
1230
+ hidden > 0 && /* @__PURE__ */ jsx5(FoldToggle, { className: ReadBlock_module_default.expand, expanded, hidden, labels, onToggle }),
1197
1231
  capped && rows(paired.slice(paired.length - tailLines))
1198
1232
  ] })
1199
1233
  ]
@@ -1202,30 +1236,30 @@ function ReadBlock({
1202
1236
  }
1203
1237
 
1204
1238
  // src/DiffBlock.tsx
1205
- import { useCallback as useCallback6, useMemo as useMemo3, useState as useState5 } from "react";
1206
- import clsx4 from "clsx";
1239
+ import { useCallback as useCallback5, useMemo as useMemo3, useState as useState5 } from "react";
1240
+ import clsx5 from "clsx";
1207
1241
  import { structuredPatch } from "diff";
1208
1242
 
1209
1243
  // src/code-highlighting.ts
1210
- import { useCallback as useCallback5, useSyncExternalStore as useSyncExternalStore3 } from "react";
1244
+ import { useCallback as useCallback4, useSyncExternalStore as useSyncExternalStore3 } from "react";
1211
1245
  import { CODE_HIGHLIGHT_EXTENSIONS, languageForPath } from "@deepseek-ai/dsh-util-code-language";
1212
1246
  function useCodeHighlighter(language) {
1213
1247
  const loaded = useSyncExternalStore3(subscribeGrammarLoaded, grammarLoadCount, grammarLoadCount);
1214
- return useCallback5((code) => highlightLines(code, language), [language, loaded]);
1248
+ return useCallback4((code) => highlightLines(code, language), [language, loaded]);
1215
1249
  }
1216
1250
 
1217
1251
  // .build/css/DiffBlock.module.mjs
1218
- var id4 = "@seekbuddy/dsh-ui/DiffBlock.module.css";
1219
- if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id4 + '"]')) {
1252
+ var id5 = "@seekbuddy/dsh-ui/DiffBlock.module.css";
1253
+ if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id5 + '"]')) {
1220
1254
  const element = document.createElement("style");
1221
- element.setAttribute("data-dsh-ui-primitives", id4);
1222
- element.textContent = '.tEQPFa_block{overflow:hidden}.tEQPFa_body{font:var(--dsw-font-markdown-code-block);grid-template-columns:minmax(max-content,1fr);padding:6px 0 20px;display:grid;overflow-x:auto}.tEQPFa_line{box-sizing:border-box;white-space:pre;min-height:1lh;padding:0 22px}.tEQPFa_block[data-code-wrap=true] .tEQPFa_body{grid-template-columns:minmax(0,1fr)}.tEQPFa_block[data-code-wrap=true] .tEQPFa_line{white-space:pre-wrap;overflow-wrap:anywhere}.tEQPFa_path{color:var(--dsw-alias-label-secondary);font-weight:500}.tEQPFa_gap{color:var(--dsw-alias-label-tertiary)}.tEQPFa_del:before{content:"- "}.tEQPFa_del{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-code-diff-deleted);box-shadow:inset 3px 0 0 var(--dsw-alias-state-error-primary)}.tEQPFa_add:before{content:"+ "}.tEQPFa_add{color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-code-diff-added);box-shadow:inset 3px 0 0 var(--dsw-alias-state-success-primary)}.tEQPFa_context{color:var(--dsw-alias-label-secondary)}.tEQPFa_context:before{content:" "}.tEQPFa_expand{width:100%;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:none;padding:0 22px;display:block}.tEQPFa_expand:hover{color:var(--dsw-alias-label-secondary)}';
1255
+ element.setAttribute("data-dsh-ui-primitives", id5);
1256
+ element.textContent = '.tEQPFa_block{overflow:hidden}.tEQPFa_body{font:var(--dsw-font-markdown-code-block);grid-template-columns:minmax(max-content,1fr);padding:6px 0 20px;display:grid;overflow-x:auto}.tEQPFa_line{box-sizing:border-box;white-space:pre;min-height:1lh;padding:0 22px}.tEQPFa_block[data-code-wrap=true] .tEQPFa_body{grid-template-columns:minmax(0,1fr)}.tEQPFa_block[data-code-wrap=true] .tEQPFa_line{white-space:pre-wrap;overflow-wrap:anywhere}.tEQPFa_path{color:var(--dsw-alias-label-secondary);font-weight:500}.tEQPFa_gap{color:var(--dsw-alias-label-tertiary)}.tEQPFa_del:before{content:"- "}.tEQPFa_del{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-code-diff-deleted);box-shadow:inset 3px 0 0 var(--dsw-alias-state-error-primary)}.tEQPFa_add:before{content:"+ "}.tEQPFa_add{color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-code-diff-added);box-shadow:inset 3px 0 0 var(--dsw-alias-state-success-primary)}.tEQPFa_context{color:var(--dsw-alias-label-secondary)}.tEQPFa_context:before{content:" "}.tEQPFa_expand{width:100%;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:none;padding:0 22px;display:block}@media (hover:hover){.tEQPFa_expand:hover{color:var(--dsw-alias-label-secondary)}}';
1223
1257
  document.head.appendChild(element);
1224
1258
  }
1225
- var DiffBlock_module_default = { "body": "tEQPFa_body", "line": "tEQPFa_line", "context": "tEQPFa_context", "path": "tEQPFa_path", "expand": "tEQPFa_expand", "add": "tEQPFa_add", "block": "tEQPFa_block", "del": "tEQPFa_del", "gap": "tEQPFa_gap" };
1259
+ var DiffBlock_module_default = { "add": "tEQPFa_add", "expand": "tEQPFa_expand", "block": "tEQPFa_block", "gap": "tEQPFa_gap", "line": "tEQPFa_line", "del": "tEQPFa_del", "context": "tEQPFa_context", "path": "tEQPFa_path", "body": "tEQPFa_body" };
1226
1260
 
1227
1261
  // src/DiffBlock.tsx
1228
- import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
1262
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
1229
1263
  var DEFAULT_DIFF_MAX_LINES = 16;
1230
1264
  function assertNever(value) {
1231
1265
  throw new Error(`unreachable diff row kind: ${String(value)}`);
@@ -1309,7 +1343,7 @@ function DiffBlock({ diffs, labels, maxLines = DEFAULT_DIFF_MAX_LINES, className
1309
1343
  const [wrapped, setWrapped] = useState5(false);
1310
1344
  const firstLanguage = diffs[0] === void 0 ? void 0 : languageForPath(diffs[0].path);
1311
1345
  const language = diffs.every((diff) => languageForPath(diff.path) === firstLanguage) ? firstLanguage : void 0;
1312
- const onCopy = useCallback6(() => {
1346
+ const onCopy = useCallback5(() => {
1313
1347
  if (copied) return;
1314
1348
  void writeClipboard(copyText2(rows)).then((ok) => {
1315
1349
  if (!ok) return;
@@ -1319,7 +1353,7 @@ function DiffBlock({ diffs, labels, maxLines = DEFAULT_DIFF_MAX_LINES, className
1319
1353
  }, 1e3);
1320
1354
  });
1321
1355
  }, [copied, rows]);
1322
- const onToggle = useCallback6(() => {
1356
+ const onToggle = useCallback5(() => {
1323
1357
  setExpanded((value) => !value);
1324
1358
  }, []);
1325
1359
  if (rows.length === 0) return null;
@@ -1329,8 +1363,8 @@ function DiffBlock({ diffs, labels, maxLines = DEFAULT_DIFF_MAX_LINES, className
1329
1363
  const tailLines = maxLines - headLines;
1330
1364
  const head = capped ? rows.slice(0, headLines) : rows;
1331
1365
  const tail = capped ? rows.slice(rows.length - tailLines) : [];
1332
- return /* @__PURE__ */ jsxs4("div", { className: clsx4(CodeCard_module_default.card, DiffBlock_module_default.block, className), "data-diff": "", "data-code-wrap": wrapped, children: [
1333
- /* @__PURE__ */ jsx5(
1366
+ return /* @__PURE__ */ jsxs4("div", { className: clsx5(CodeCard_module_default.card, DiffBlock_module_default.block, className), "data-diff": "", "data-code-wrap": wrapped, children: [
1367
+ /* @__PURE__ */ jsx6(
1334
1368
  CodeToolbar,
1335
1369
  {
1336
1370
  lang: language,
@@ -1346,29 +1380,29 @@ function DiffBlock({ diffs, labels, maxLines = DEFAULT_DIFF_MAX_LINES, className
1346
1380
  }
1347
1381
  ),
1348
1382
  /* @__PURE__ */ jsxs4("div", { className: DiffBlock_module_default.body, children: [
1349
- head.map((row, index) => /* @__PURE__ */ jsx5("div", { className: clsx4(DiffBlock_module_default.line, ROW_CLASS[row.kind]), children: row.text }, index)),
1350
- hidden > 0 && /* @__PURE__ */ jsx5(FoldToggle, { className: DiffBlock_module_default.expand, expanded, hidden, labels, onToggle }),
1351
- tail.map((row, index) => /* @__PURE__ */ jsx5("div", { className: clsx4(DiffBlock_module_default.line, ROW_CLASS[row.kind]), children: row.text }, index))
1383
+ head.map((row, index) => /* @__PURE__ */ jsx6("div", { className: clsx5(DiffBlock_module_default.line, ROW_CLASS[row.kind]), children: row.text }, index)),
1384
+ hidden > 0 && /* @__PURE__ */ jsx6(FoldToggle, { className: DiffBlock_module_default.expand, expanded, hidden, labels, onToggle }),
1385
+ tail.map((row, index) => /* @__PURE__ */ jsx6("div", { className: clsx5(DiffBlock_module_default.line, ROW_CLASS[row.kind]), children: row.text }, index))
1352
1386
  ] })
1353
1387
  ] });
1354
1388
  }
1355
1389
 
1356
1390
  // src/SearchBlock.tsx
1357
- import { useCallback as useCallback7, useState as useState6 } from "react";
1358
- import clsx5 from "clsx";
1391
+ import { useCallback as useCallback6, useState as useState6 } from "react";
1392
+ import clsx6 from "clsx";
1359
1393
 
1360
1394
  // .build/css/SearchBlock.module.mjs
1361
- var id5 = "@seekbuddy/dsh-ui/SearchBlock.module.css";
1362
- if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id5 + '"]')) {
1395
+ var id6 = "@seekbuddy/dsh-ui/SearchBlock.module.css";
1396
+ if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id6 + '"]')) {
1363
1397
  const element = document.createElement("style");
1364
- element.setAttribute("data-dsh-ui-primitives", id5);
1365
- element.textContent = "._-soDW_block{--dsl-search-radius:var(--dsw-radius-lg);--dsl-search-line-height:22px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border-radius:var(--dsl-search-radius);margin:16px 0;position:relative}._-soDW_header{background:var(--dsw-alias-markdown-code-block-banner);border-top-left-radius:var(--dsl-search-radius);border-top-right-radius:var(--dsl-search-radius);align-items:center;gap:12px;padding:9px 14px;display:flex}._-soDW_summary{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-secondary);flex:1;overflow:hidden}._-soDW_copyButton{color:var(--dsw-alias-label-secondary);cursor:pointer;font:var(--dsw-font-xs-13);background-color:#0000;border:none;flex:none;margin:0;padding:0}._-soDW_body{font:var(--dsw-font-markdown-code-block);padding:8px 14px 12px 0;overflow:auto hidden}._-soDW_line{min-height:var(--dsl-search-line-height);white-space:pre;padding-left:14px}._-soDW_lineNumber{color:var(--dsw-alias-label-tertiary)}._-soDW_fileHeader{width:100%;min-height:var(--dsl-search-line-height);cursor:pointer;font:inherit;text-align:left;background-color:#0000;border:none;align-items:baseline;gap:8px;padding:0 14px;display:flex}._-soDW_filePath{min-width:0;color:var(--dsw-alias-label-primary);white-space:pre;font-weight:600}._-soDW_fileCount{color:var(--dsw-alias-label-tertiary);flex:none}._-soDW_expand{width:100%;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;text-align:left;background-color:#0000;border:none;padding:0 14px;display:block}._-soDW_expand:hover{color:var(--dsw-alias-label-secondary)}._-soDW_empty{font:var(--dsw-font-markdown-code-block);color:var(--dsw-alias-label-tertiary);padding:12px 14px}";
1398
+ element.setAttribute("data-dsh-ui-primitives", id6);
1399
+ element.textContent = "._-soDW_block{--dsl-search-radius:var(--dsw-radius-lg);--dsl-search-line-height:22px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border-radius:var(--dsl-search-radius);margin:16px 0;position:relative}._-soDW_header{background:var(--dsw-alias-markdown-code-block-banner);border-top-left-radius:var(--dsl-search-radius);border-top-right-radius:var(--dsl-search-radius);align-items:center;gap:12px;padding:9px 14px;display:flex}._-soDW_summary{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-secondary);flex:1;overflow:hidden}._-soDW_copyButton{color:var(--dsw-alias-label-secondary);cursor:pointer;font:var(--dsw-font-xs-13);background-color:#0000;border:none;flex:none;margin:0;padding:0}._-soDW_body{font:var(--dsw-font-markdown-code-block);padding:8px 14px 12px 0;overflow:auto hidden}._-soDW_line{min-height:var(--dsl-search-line-height);white-space:pre;padding-left:14px}._-soDW_lineNumber{color:var(--dsw-alias-label-tertiary)}._-soDW_fileHeader{width:100%;min-height:var(--dsl-search-line-height);cursor:pointer;font:inherit;text-align:left;background-color:#0000;border:none;align-items:baseline;gap:8px;padding:0 14px;display:flex}._-soDW_filePath{min-width:0;color:var(--dsw-alias-label-primary);white-space:pre;font-weight:600}._-soDW_fileCount{color:var(--dsw-alias-label-tertiary);flex:none}._-soDW_expand{width:100%;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;text-align:left;background-color:#0000;border:none;padding:0 14px;display:block}@media (hover:hover){._-soDW_expand:hover{color:var(--dsw-alias-label-secondary)}}._-soDW_empty{font:var(--dsw-font-markdown-code-block);color:var(--dsw-alias-label-tertiary);padding:12px 14px}";
1366
1400
  document.head.appendChild(element);
1367
1401
  }
1368
- var SearchBlock_module_default = { "lineNumber": "_-soDW_lineNumber", "header": "_-soDW_header", "expand": "_-soDW_expand", "block": "_-soDW_block", "filePath": "_-soDW_filePath", "fileCount": "_-soDW_fileCount", "copyButton": "_-soDW_copyButton", "summary": "_-soDW_summary", "body": "_-soDW_body", "fileHeader": "_-soDW_fileHeader", "empty": "_-soDW_empty", "line": "_-soDW_line" };
1402
+ var SearchBlock_module_default = { "copyButton": "_-soDW_copyButton", "fileCount": "_-soDW_fileCount", "line": "_-soDW_line", "body": "_-soDW_body", "empty": "_-soDW_empty", "header": "_-soDW_header", "filePath": "_-soDW_filePath", "expand": "_-soDW_expand", "block": "_-soDW_block", "summary": "_-soDW_summary", "fileHeader": "_-soDW_fileHeader", "lineNumber": "_-soDW_lineNumber" };
1369
1403
 
1370
1404
  // src/SearchBlock.tsx
1371
- import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
1405
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
1372
1406
  var DEFAULT_SEARCH_MAX_LINES = 16;
1373
1407
  function copyText3(props) {
1374
1408
  if (props.kind === "paths") return props.paths.join("\n");
@@ -1416,11 +1450,11 @@ function SearchBlock(props) {
1416
1450
  const rows = toRows(props, collapsed);
1417
1451
  const shown = shownCount(props);
1418
1452
  const empty = rows.length === 0;
1419
- const { copied, onCopy } = useCopyFeedback(copyText3(props));
1420
- const onToggle = useCallback7(() => {
1453
+ const { copied, onCopy } = useClipboardCopy(copyText3(props));
1454
+ const onToggle = useCallback6(() => {
1421
1455
  setExpanded((value) => !value);
1422
1456
  }, []);
1423
- const toggleFile = useCallback7((index) => {
1457
+ const toggleFile = useCallback6((index) => {
1424
1458
  setCollapsed((prev) => {
1425
1459
  const next = new Set(prev);
1426
1460
  if (next.has(index)) next.delete(index);
@@ -1437,7 +1471,7 @@ function SearchBlock(props) {
1437
1471
  ) : void 0;
1438
1472
  const tail = tailHeader === void 0 ? naturalTail : naturalTail.slice(1);
1439
1473
  const renderRow = (row) => {
1440
- if (row.type === "path") return /* @__PURE__ */ jsx6("div", { className: SearchBlock_module_default.line, children: row.path });
1474
+ if (row.type === "path") return /* @__PURE__ */ jsx7("div", { className: SearchBlock_module_default.line, children: row.path });
1441
1475
  if (row.type === "match") {
1442
1476
  return /* @__PURE__ */ jsxs5("div", { className: SearchBlock_module_default.line, children: [
1443
1477
  /* @__PURE__ */ jsxs5("span", { className: SearchBlock_module_default.lineNumber, children: [
@@ -1457,20 +1491,20 @@ function SearchBlock(props) {
1457
1491
  toggleFile(row.index);
1458
1492
  },
1459
1493
  children: [
1460
- /* @__PURE__ */ jsx6("span", { className: SearchBlock_module_default.filePath, children: row.path }),
1461
- /* @__PURE__ */ jsx6("span", { className: SearchBlock_module_default.fileCount, children: row.count })
1494
+ /* @__PURE__ */ jsx7("span", { className: SearchBlock_module_default.filePath, children: row.path }),
1495
+ /* @__PURE__ */ jsx7("span", { className: SearchBlock_module_default.fileCount, children: row.count })
1462
1496
  ]
1463
1497
  }
1464
1498
  );
1465
1499
  };
1466
- return /* @__PURE__ */ jsxs5("div", { className: clsx5(SearchBlock_module_default.block, className), "data-search": props.kind, children: [
1500
+ return /* @__PURE__ */ jsxs5("div", { className: clsx6(SearchBlock_module_default.block, className), "data-search": props.kind, children: [
1467
1501
  /* @__PURE__ */ jsxs5("div", { className: SearchBlock_module_default.header, children: [
1468
- /* @__PURE__ */ jsx6("span", { className: SearchBlock_module_default.summary, children: summaryText(props, shown, truncated, total) }),
1469
- !empty && /* @__PURE__ */ jsx6("button", { type: "button", className: SearchBlock_module_default.copyButton, onClick: onCopy, children: copied ? props.labels.copied : props.labels.copy })
1502
+ /* @__PURE__ */ jsx7("span", { className: SearchBlock_module_default.summary, children: summaryText(props, shown, truncated, total) }),
1503
+ !empty && /* @__PURE__ */ jsx7("button", { type: "button", className: SearchBlock_module_default.copyButton, onClick: onCopy, children: copied ? props.labels.copied : props.labels.copy })
1470
1504
  ] }),
1471
- empty ? /* @__PURE__ */ jsx6("div", { className: SearchBlock_module_default.empty, children: props.labels.noResults }) : /* @__PURE__ */ jsxs5("div", { className: SearchBlock_module_default.body, children: [
1472
- head.map((row) => /* @__PURE__ */ jsx6("div", { children: renderRow(row) }, rowKey(row))),
1473
- hidden > 0 && /* @__PURE__ */ jsx6(
1505
+ empty ? /* @__PURE__ */ jsx7("div", { className: SearchBlock_module_default.empty, children: props.labels.noResults }) : /* @__PURE__ */ jsxs5("div", { className: SearchBlock_module_default.body, children: [
1506
+ head.map((row) => /* @__PURE__ */ jsx7("div", { children: renderRow(row) }, rowKey(row))),
1507
+ hidden > 0 && /* @__PURE__ */ jsx7(
1474
1508
  "button",
1475
1509
  {
1476
1510
  type: "button",
@@ -1481,27 +1515,27 @@ function SearchBlock(props) {
1481
1515
  children: expanded ? props.labels.collapse : props.labels.expand(hidden)
1482
1516
  }
1483
1517
  ),
1484
- tailHeader !== void 0 && /* @__PURE__ */ jsx6("div", { children: renderRow(tailHeader) }, `tailHeader:${rowKey(tailHeader)}`),
1485
- tail.map((row) => /* @__PURE__ */ jsx6("div", { children: renderRow(row) }, rowKey(row)))
1518
+ tailHeader !== void 0 && /* @__PURE__ */ jsx7("div", { children: renderRow(tailHeader) }, `tailHeader:${rowKey(tailHeader)}`),
1519
+ tail.map((row) => /* @__PURE__ */ jsx7("div", { children: renderRow(row) }, rowKey(row)))
1486
1520
  ] })
1487
1521
  ] });
1488
1522
  }
1489
1523
 
1490
1524
  // src/WebBlock.tsx
1491
- import clsx6 from "clsx";
1525
+ import clsx7 from "clsx";
1492
1526
 
1493
1527
  // .build/css/WebBlock.module.mjs
1494
- var id6 = "@seekbuddy/dsh-ui/WebBlock.module.css";
1495
- if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id6 + '"]')) {
1528
+ var id7 = "@seekbuddy/dsh-ui/WebBlock.module.css";
1529
+ if (typeof document !== "undefined" && !document.querySelector('style[data-dsh-ui-primitives="' + id7 + '"]')) {
1496
1530
  const element = document.createElement("style");
1497
- element.setAttribute("data-dsh-ui-primitives", id6);
1498
- element.textContent = ".MTeYQa_block{--dsl-web-radius:var(--dsw-radius-lg);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border-radius:var(--dsl-web-radius);margin:16px 0;padding:12px 14px}.MTeYQa_answer{margin-bottom:8px}.MTeYQa_answer>div>:first-child{margin-top:0}.MTeYQa_answer>div>:last-child{margin-bottom:0}.MTeYQa_sources{flex-direction:column;gap:10px;max-height:320px;margin:0;padding-left:2.5em;display:flex;overflow-y:auto}.MTeYQa_source{min-width:0}.MTeYQa_sourceLink{color:var(--dsw-alias-link);word-break:break-word;font-size:14px;font-weight:500;line-height:20px;text-decoration:none}.MTeYQa_linkIcon{vertical-align:-.25em;width:1.1em;height:1.1em;margin-right:5px}.MTeYQa_sourceLink:hover,.MTeYQa_sourceLink:focus-visible{text-underline-offset:3px;text-decoration:underline dotted}.MTeYQa_snippet{color:var(--dsw-alias-label-secondary);word-break:break-word;margin-top:2px;font-size:13px;line-height:19px}.MTeYQa_published{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xs-13);margin-top:2px}.MTeYQa_truncated{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xs-13);margin-top:8px}.MTeYQa_empty{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xs-13)}.MTeYQa_fetch{flex-direction:column;gap:6px;display:flex}.MTeYQa_fetchUrl{color:var(--dsw-alias-link);font-family:var(--ds-font-family-code);word-break:break-all;font-size:13px;font-weight:500;line-height:19px;text-decoration:none}.MTeYQa_fetchUrl:hover,.MTeYQa_fetchUrl:focus-visible{text-underline-offset:3px;text-decoration:underline dotted}.MTeYQa_fetchMeta{align-items:baseline;gap:12px;display:flex}.MTeYQa_status{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xs-13)}.MTeYQa_fetch .MTeYQa_truncated{margin-top:0}";
1531
+ element.setAttribute("data-dsh-ui-primitives", id7);
1532
+ element.textContent = ".MTeYQa_block{--dsl-web-radius:var(--dsw-radius-lg);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border-radius:var(--dsl-web-radius);margin:16px 0;padding:12px 14px}.MTeYQa_answer{margin-bottom:8px}.MTeYQa_answer>div>:first-child{margin-top:0}.MTeYQa_answer>div>:last-child{margin-bottom:0}.MTeYQa_sources{flex-direction:column;gap:10px;max-height:320px;margin:0;padding-left:2.5em;display:flex;overflow-y:auto}.MTeYQa_source{min-width:0}.MTeYQa_sourceLink{color:var(--dsw-alias-link);word-break:break-word;font-size:14px;font-weight:500;line-height:20px;text-decoration:none}.MTeYQa_linkIcon{vertical-align:-.25em;width:1.1em;height:1.1em;margin-right:5px}.MTeYQa_sourceLink:focus-visible{text-underline-offset:3px;text-decoration:underline dotted}@media (hover:hover){.MTeYQa_sourceLink:hover{text-underline-offset:3px;text-decoration:underline dotted}}.MTeYQa_snippet{color:var(--dsw-alias-label-secondary);word-break:break-word;margin-top:2px;font-size:13px;line-height:19px}.MTeYQa_published{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xs-13);margin-top:2px}.MTeYQa_truncated{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xs-13);margin-top:8px}.MTeYQa_empty{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xs-13)}.MTeYQa_fetch{flex-direction:column;gap:6px;display:flex}.MTeYQa_fetchUrl{color:var(--dsw-alias-link);font-family:var(--ds-font-family-code);word-break:break-all;font-size:13px;font-weight:500;line-height:19px;text-decoration:none}.MTeYQa_fetchUrl:focus-visible{text-underline-offset:3px;text-decoration:underline dotted}@media (hover:hover){.MTeYQa_fetchUrl:hover{text-underline-offset:3px;text-decoration:underline dotted}}.MTeYQa_fetchMeta{align-items:baseline;gap:12px;display:flex}.MTeYQa_status{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xs-13)}.MTeYQa_fetch .MTeYQa_truncated{margin-top:0}";
1499
1533
  document.head.appendChild(element);
1500
1534
  }
1501
- var WebBlock_module_default = { "empty": "MTeYQa_empty", "fetchUrl": "MTeYQa_fetchUrl", "status": "MTeYQa_status", "sourceLink": "MTeYQa_sourceLink", "fetch": "MTeYQa_fetch", "published": "MTeYQa_published", "block": "MTeYQa_block", "snippet": "MTeYQa_snippet", "source": "MTeYQa_source", "truncated": "MTeYQa_truncated", "fetchMeta": "MTeYQa_fetchMeta", "sources": "MTeYQa_sources", "linkIcon": "MTeYQa_linkIcon", "answer": "MTeYQa_answer" };
1535
+ var WebBlock_module_default = { "answer": "MTeYQa_answer", "sources": "MTeYQa_sources", "source": "MTeYQa_source", "empty": "MTeYQa_empty", "fetch": "MTeYQa_fetch", "fetchUrl": "MTeYQa_fetchUrl", "fetchMeta": "MTeYQa_fetchMeta", "status": "MTeYQa_status", "linkIcon": "MTeYQa_linkIcon", "truncated": "MTeYQa_truncated", "block": "MTeYQa_block", "published": "MTeYQa_published", "snippet": "MTeYQa_snippet", "sourceLink": "MTeYQa_sourceLink" };
1502
1536
 
1503
1537
  // src/WebBlock.tsx
1504
- import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
1538
+ import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
1505
1539
  function safeHref(url) {
1506
1540
  try {
1507
1541
  const { protocol } = new URL(url);
@@ -1521,45 +1555,46 @@ function linkLabel(url, title) {
1521
1555
  }
1522
1556
  function SafeLink({ url, label, className }) {
1523
1557
  const href = safeHref(url);
1524
- if (href === void 0) return /* @__PURE__ */ jsx7("span", { className, children: label });
1558
+ if (href === void 0) return /* @__PURE__ */ jsx8("span", { className, children: label });
1525
1559
  return /* @__PURE__ */ jsxs6("a", { className, href, target: "_blank", rel: "noopener noreferrer", children: [
1526
- /* @__PURE__ */ jsx7(LinkIconMedium, { kind: "url", href, className: WebBlock_module_default.linkIcon }),
1560
+ /* @__PURE__ */ jsx8(LinkIconMedium, { kind: "url", href, className: WebBlock_module_default.linkIcon }),
1527
1561
  label
1528
1562
  ] });
1529
1563
  }
1530
1564
  function SourceItem({ source, ordinal }) {
1531
1565
  return /* @__PURE__ */ jsxs6("li", { className: WebBlock_module_default.source, value: ordinal, children: [
1532
- /* @__PURE__ */ jsx7(SafeLink, { url: source.url, label: linkLabel(source.url, source.title), className: WebBlock_module_default.sourceLink }),
1533
- source.snippet !== void 0 && source.snippet !== "" && /* @__PURE__ */ jsx7("div", { className: WebBlock_module_default.snippet, children: source.snippet }),
1534
- source.publishedAt !== void 0 && source.publishedAt !== "" && /* @__PURE__ */ jsx7("div", { className: WebBlock_module_default.published, children: source.publishedAt })
1566
+ /* @__PURE__ */ jsx8(SafeLink, { url: source.url, label: linkLabel(source.url, source.title), className: WebBlock_module_default.sourceLink }),
1567
+ source.snippet !== void 0 && source.snippet !== "" && /* @__PURE__ */ jsx8("div", { className: WebBlock_module_default.snippet, children: source.snippet }),
1568
+ source.publishedAt !== void 0 && source.publishedAt !== "" && /* @__PURE__ */ jsx8("div", { className: WebBlock_module_default.published, children: source.publishedAt })
1535
1569
  ] });
1536
1570
  }
1537
1571
  function WebSearchBlock({ answer, sources, truncated, labels, className }) {
1538
1572
  const empty = (answer === void 0 || answer === "") && sources.length === 0;
1539
- return /* @__PURE__ */ jsxs6("div", { className: clsx6(WebBlock_module_default.block, className), "data-web": "search", children: [
1540
- answer !== void 0 && answer !== "" && /* @__PURE__ */ jsx7("div", { className: WebBlock_module_default.answer, children: /* @__PURE__ */ jsx7(MarkdownText, { text: answer, labels: labels.markdown }) }),
1541
- empty ? /* @__PURE__ */ jsx7("div", { className: WebBlock_module_default.empty, children: labels.noResults }) : /* @__PURE__ */ jsx7("ol", { className: WebBlock_module_default.sources, children: sources.map((source, index) => /* @__PURE__ */ jsx7(SourceItem, { source, ordinal: index + 1 }, index)) }),
1542
- truncated && /* @__PURE__ */ jsx7("div", { className: WebBlock_module_default.truncated, children: labels.sourcesTruncated })
1573
+ return /* @__PURE__ */ jsxs6("div", { className: clsx7(WebBlock_module_default.block, className), "data-web": "search", children: [
1574
+ answer !== void 0 && answer !== "" && /* @__PURE__ */ jsx8("div", { className: WebBlock_module_default.answer, children: /* @__PURE__ */ jsx8(MarkdownText, { text: answer, labels: labels.markdown }) }),
1575
+ empty ? /* @__PURE__ */ jsx8("div", { className: WebBlock_module_default.empty, children: labels.noResults }) : /* @__PURE__ */ jsx8("ol", { className: WebBlock_module_default.sources, children: sources.map((source, index) => /* @__PURE__ */ jsx8(SourceItem, { source, ordinal: index + 1 }, index)) }),
1576
+ truncated && /* @__PURE__ */ jsx8("div", { className: WebBlock_module_default.truncated, children: labels.sourcesTruncated })
1543
1577
  ] });
1544
1578
  }
1545
1579
  function WebFetchBlock({ url, statusCode, truncated, labels, className }) {
1546
- return /* @__PURE__ */ jsxs6("div", { className: clsx6(WebBlock_module_default.block, WebBlock_module_default.fetch, className), "data-web": "fetch", children: [
1547
- /* @__PURE__ */ jsx7(SafeLink, { url, label: url, className: WebBlock_module_default.fetchUrl }),
1580
+ return /* @__PURE__ */ jsxs6("div", { className: clsx7(WebBlock_module_default.block, WebBlock_module_default.fetch, className), "data-web": "fetch", children: [
1581
+ /* @__PURE__ */ jsx8(SafeLink, { url, label: url, className: WebBlock_module_default.fetchUrl }),
1548
1582
  /* @__PURE__ */ jsxs6("div", { className: WebBlock_module_default.fetchMeta, children: [
1549
1583
  /* @__PURE__ */ jsxs6("span", { className: WebBlock_module_default.status, children: [
1550
1584
  labels.http,
1551
1585
  " ",
1552
1586
  statusCode
1553
1587
  ] }),
1554
- truncated && /* @__PURE__ */ jsx7("span", { className: WebBlock_module_default.truncated, children: labels.contentTruncated })
1588
+ truncated && /* @__PURE__ */ jsx8("span", { className: WebBlock_module_default.truncated, children: labels.contentTruncated })
1555
1589
  ] })
1556
1590
  ] });
1557
1591
  }
1558
1592
  function WebBlock(props) {
1559
- return props.kind === "search" ? /* @__PURE__ */ jsx7(WebSearchBlock, { ...props }) : /* @__PURE__ */ jsx7(WebFetchBlock, { ...props });
1593
+ return props.kind === "search" ? /* @__PURE__ */ jsx8(WebSearchBlock, { ...props }) : /* @__PURE__ */ jsx8(WebFetchBlock, { ...props });
1560
1594
  }
1561
1595
  export {
1562
1596
  CODE_HIGHLIGHT_EXTENSIONS,
1597
+ CommandText,
1563
1598
  DEFAULT_DIFF_MAX_LINES,
1564
1599
  DEFAULT_READ_MAX_LINES,
1565
1600
  DEFAULT_SEARCH_MAX_LINES,