@parallelworks/ui 0.44.0 → 0.45.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 (622) hide show
  1. package/README.md +348 -25
  2. package/dist/ai/agent/diff.d.ts +2 -1
  3. package/dist/ai/agent/diff.js +4 -12
  4. package/dist/ai/agent/diffHighlight.d.ts +1 -1
  5. package/dist/ai/agent/diffHighlight.js +4 -3
  6. package/dist/ai/agent/index.d.ts +2 -1
  7. package/dist/ai/agent/toolStrings.d.ts +37 -0
  8. package/dist/ai/agent/toolStrings.js +35 -0
  9. package/dist/ai/agent/toolfmt.d.ts +8 -3
  10. package/dist/ai/agent/toolfmt.js +50 -65
  11. package/dist/ai/ai.css +18 -31
  12. package/dist/ai/components/AllocationSelector.js +2 -2
  13. package/dist/ai/components/AttachmentManager.js +28 -29
  14. package/dist/ai/components/AttachmentUpload.js +25 -30
  15. package/dist/ai/components/BlockedGroupBanner.js +2 -2
  16. package/dist/ai/components/BranchNavigator.js +3 -4
  17. package/dist/ai/components/ChatEmptyState.js +8 -7
  18. package/dist/ai/components/ChatInput.js +10 -12
  19. package/dist/ai/components/ChatLayout.js +3 -3
  20. package/dist/ai/components/ChatMessage.js +49 -61
  21. package/dist/ai/components/ChatMessageList.js +46 -42
  22. package/dist/ai/components/ChatSidebar.js +26 -34
  23. package/dist/ai/components/ChatStage.js +1 -1
  24. package/dist/ai/components/ComposerChrome.js +3 -4
  25. package/dist/ai/components/DragOverlay.js +6 -4
  26. package/dist/ai/components/ModelSelector.js +14 -15
  27. package/dist/ai/components/PastedText.js +18 -14
  28. package/dist/ai/components/ProviderIssueBanner.js +3 -4
  29. package/dist/ai/components/Reasoning.d.ts +12 -6
  30. package/dist/ai/components/Reasoning.js +31 -18
  31. package/dist/ai/components/ShareDialog.js +25 -28
  32. package/dist/ai/components/SlashMenu.js +3 -3
  33. package/dist/ai/components/agent/ActivityLine.d.ts +0 -5
  34. package/dist/ai/components/agent/ActivityLine.js +17 -54
  35. package/dist/ai/components/agent/AgentMessageParts.js +139 -149
  36. package/dist/ai/components/conversationActions.js +16 -16
  37. package/dist/ai/core/ChatProvider.d.ts +2 -4
  38. package/dist/ai/core/ChatProvider.js +25 -38
  39. package/dist/ai/core/exportConversation.js +4 -4
  40. package/dist/ai/core/sidebarState.d.ts +8 -6
  41. package/dist/ai/core/sidebarState.js +21 -28
  42. package/dist/ai/core/useKeyboardShortcuts.js +14 -5
  43. package/dist/ai/index.d.ts +4 -5
  44. package/dist/ai/index.js +7 -7
  45. package/dist/ai/strings.d.ts +14 -31
  46. package/dist/ai/strings.js +19 -39
  47. package/dist/ai/types.d.ts +0 -5
  48. package/dist/ai/ui/ConversationSidebar.d.ts +12 -9
  49. package/dist/ai/ui/ConversationSidebar.js +43 -87
  50. package/dist/ai/ui/Markdown.d.ts +3 -6
  51. package/dist/ai/ui/Markdown.js +6 -73
  52. package/dist/ai/ui/Notice.js +10 -12
  53. package/dist/ai/ui/chip.d.ts +2 -2
  54. package/dist/ai/ui/chip.js +1 -1
  55. package/dist/ai/ui/sidebar.d.ts +4 -20
  56. package/dist/ai/ui/sidebar.js +30 -67
  57. package/dist/ai/utils.d.ts +0 -1
  58. package/dist/ai/utils.js +1 -14
  59. package/dist/brandIcons.d.ts +51 -0
  60. package/dist/brandIcons.js +75 -0
  61. package/dist/components/Avatar.d.ts +3 -1
  62. package/dist/components/Avatar.js +34 -28
  63. package/dist/components/Button.d.ts +12 -7
  64. package/dist/components/Button.js +39 -44
  65. package/dist/components/Callout.js +18 -12
  66. package/dist/components/Card.d.ts +18 -8
  67. package/dist/components/Card.js +17 -6
  68. package/dist/components/Checkbox.d.ts +9 -0
  69. package/dist/components/Checkbox.js +30 -0
  70. package/dist/components/Combobox.d.ts +9 -1
  71. package/dist/components/Combobox.js +71 -44
  72. package/dist/components/ConfirmModal.js +11 -11
  73. package/dist/components/ContextMenu.d.ts +2 -8
  74. package/dist/components/ContextMenu.js +2 -29
  75. package/dist/components/CopyToClipboard.js +17 -36
  76. package/dist/components/CreateModal.d.ts +3 -24
  77. package/dist/components/CreateModal.js +46 -113
  78. package/dist/components/DatePicker.d.ts +31 -0
  79. package/dist/components/DatePicker.js +191 -0
  80. package/dist/components/DescriptionList.js +4 -4
  81. package/dist/components/Disclosure.d.ts +34 -0
  82. package/dist/components/Disclosure.js +46 -0
  83. package/dist/components/Drawer.d.ts +47 -0
  84. package/dist/components/Drawer.js +120 -0
  85. package/dist/components/EmptyState.d.ts +15 -10
  86. package/dist/components/EmptyState.js +13 -8
  87. package/dist/components/ExternalLink.d.ts +8 -0
  88. package/dist/components/ExternalLink.js +29 -0
  89. package/dist/components/Field.d.ts +70 -0
  90. package/dist/components/Field.js +159 -0
  91. package/dist/components/HoverCard.js +11 -14
  92. package/dist/components/IconButton.d.ts +16 -13
  93. package/dist/components/IconButton.js +27 -18
  94. package/dist/components/InfoTip.js +16 -23
  95. package/dist/components/Input.d.ts +10 -9
  96. package/dist/components/Input.js +54 -96
  97. package/dist/components/LetterBadge.js +2 -2
  98. package/dist/components/Loader.d.ts +15 -8
  99. package/dist/components/Loader.js +29 -19
  100. package/dist/components/Markdown.d.ts +7 -1
  101. package/dist/components/Markdown.js +2 -0
  102. package/dist/components/MarkdownImpl.d.ts +1 -1
  103. package/dist/components/MarkdownImpl.js +55 -14
  104. package/dist/components/Menu.js +13 -15
  105. package/dist/components/MenuEntries.js +11 -16
  106. package/dist/components/Meter.d.ts +48 -0
  107. package/dist/components/Meter.js +94 -0
  108. package/dist/components/Modal.js +11 -14
  109. package/dist/components/NumberInput.d.ts +25 -0
  110. package/dist/components/NumberInput.js +55 -0
  111. package/dist/components/Overview.js +12 -10
  112. package/dist/components/PageHeader.d.ts +2 -3
  113. package/dist/components/PageHeader.js +30 -21
  114. package/dist/components/Pagination.d.ts +27 -14
  115. package/dist/components/Pagination.js +86 -25
  116. package/dist/components/Popover.d.ts +47 -0
  117. package/dist/components/Popover.js +63 -0
  118. package/dist/components/Provider.d.ts +197 -80
  119. package/dist/components/Provider.js +200 -118
  120. package/dist/components/Radio.d.ts +1 -1
  121. package/dist/components/Radio.js +4 -4
  122. package/dist/components/RefreshButton.d.ts +15 -0
  123. package/dist/components/RefreshButton.js +53 -0
  124. package/dist/components/RunStatusIcon.d.ts +12 -0
  125. package/dist/components/RunStatusIcon.js +84 -0
  126. package/dist/components/SearchInput.d.ts +16 -0
  127. package/dist/components/SearchInput.js +52 -0
  128. package/dist/components/Section.d.ts +28 -0
  129. package/dist/components/Section.js +76 -0
  130. package/dist/components/SegmentedControl.d.ts +7 -11
  131. package/dist/components/SegmentedControl.js +25 -56
  132. package/dist/components/Select.d.ts +5 -1
  133. package/dist/components/Select.js +43 -44
  134. package/dist/components/SettingModeOption.d.ts +3 -5
  135. package/dist/components/SettingModeOption.js +5 -6
  136. package/dist/components/SettingsCard.d.ts +32 -19
  137. package/dist/components/SettingsCard.js +40 -13
  138. package/dist/components/Skeleton.d.ts +22 -0
  139. package/dist/components/Skeleton.js +34 -0
  140. package/dist/components/Slider.d.ts +16 -0
  141. package/dist/components/Slider.js +30 -0
  142. package/dist/components/Sort.js +4 -6
  143. package/dist/components/StatusBadge.d.ts +3 -1
  144. package/dist/components/StatusBadge.js +9 -32
  145. package/dist/components/StatusIcons.d.ts +0 -4
  146. package/dist/components/StatusIcons.js +5 -13
  147. package/dist/components/Switch.d.ts +5 -1
  148. package/dist/components/Switch.js +23 -6
  149. package/dist/components/Table.js +13 -20
  150. package/dist/components/Tabs.d.ts +52 -0
  151. package/dist/components/Tabs.js +75 -0
  152. package/dist/components/ThemeEditor.d.ts +29 -0
  153. package/dist/components/ThemeEditor.js +397 -0
  154. package/dist/components/Toast.d.ts +57 -0
  155. package/dist/components/Toast.js +203 -0
  156. package/dist/components/Tooltip.js +12 -15
  157. package/dist/components/buttonClasses.d.ts +18 -0
  158. package/dist/components/buttonClasses.js +31 -0
  159. package/dist/components/codeTheme.d.ts +5 -0
  160. package/dist/components/codeTheme.js +93 -0
  161. package/dist/components/fieldBox.d.ts +14 -0
  162. package/dist/components/fieldBox.js +29 -0
  163. package/dist/components/floating.d.ts +26 -5
  164. package/dist/components/floating.js +31 -9
  165. package/dist/{ai/ui/codeBreaks.js → components/markdownCodeBreaks.js} +1 -1
  166. package/dist/components/persistedState.d.ts +2 -0
  167. package/dist/components/persistedState.js +63 -0
  168. package/dist/components/relativeTime.d.ts +36 -8
  169. package/dist/components/relativeTime.js +106 -23
  170. package/dist/components/segmented.d.ts +17 -0
  171. package/dist/components/segmented.js +27 -0
  172. package/dist/components/shortcutKey.d.ts +4 -0
  173. package/dist/components/shortcutKey.js +27 -0
  174. package/dist/components/splitter.d.ts +26 -0
  175. package/dist/components/splitter.js +69 -0
  176. package/dist/components/tone.d.ts +9 -0
  177. package/dist/components/tone.js +30 -0
  178. package/dist/components/useCopy.d.ts +14 -0
  179. package/dist/components/useCopy.js +31 -0
  180. package/dist/components/useCssIsDark.d.ts +2 -0
  181. package/dist/components/useCssIsDark.js +2 -1
  182. package/dist/components/useTheme.d.ts +10 -0
  183. package/dist/components/useTheme.js +40 -0
  184. package/dist/cx.d.ts +5 -0
  185. package/dist/cx.js +11 -0
  186. package/dist/editor/Editor.js +2 -2
  187. package/dist/editor/EditorField.js +7 -10
  188. package/dist/editor/FormCodePanel.js +10 -23
  189. package/dist/editor/Monaco.js +7 -4
  190. package/dist/editor/index.d.ts +1 -1
  191. package/dist/editor/index.js +2 -2
  192. package/dist/editor/themes.d.ts +4 -0
  193. package/dist/editor/themes.js +75 -76
  194. package/dist/file-explorer/FileExplorer.js +180 -187
  195. package/dist/file-explorer/FileExplorerContext.js +36 -58
  196. package/dist/file-explorer/FilePreview/CodePreviewEditor.js +2 -1
  197. package/dist/file-explorer/FilePreview/Inline.js +9 -7
  198. package/dist/file-explorer/FilePreview/StreamedBadge.js +2 -2
  199. package/dist/file-explorer/FilePreview/Viewer.js +32 -34
  200. package/dist/file-explorer/FilePreview/index.js +60 -92
  201. package/dist/file-explorer/FileRow.js +10 -15
  202. package/dist/file-explorer/FileRowsWindow.js +2 -6
  203. package/dist/file-explorer/FileTable.js +2 -2
  204. package/dist/file-explorer/FileTableHeaders.js +8 -11
  205. package/dist/file-explorer/LoadMoreRow.js +8 -9
  206. package/dist/file-explorer/TreeView.js +16 -16
  207. package/dist/file-explorer/helpers.d.ts +1 -4
  208. package/dist/file-explorer/helpers.js +101 -114
  209. package/dist/file-explorer/lib/utils.d.ts +0 -2
  210. package/dist/file-explorer/lib/utils.js +1 -25
  211. package/dist/file-explorer/toasts.js +104 -185
  212. package/dist/form/Fields/BooleanField.js +12 -14
  213. package/dist/form/Fields/CheckboxGroupField.d.ts +1 -1
  214. package/dist/form/Fields/CheckboxGroupField.js +16 -18
  215. package/dist/form/Fields/ColorField.js +11 -11
  216. package/dist/form/Fields/DropdownField.d.ts +1 -1
  217. package/dist/form/Fields/DropdownField.js +20 -36
  218. package/dist/form/Fields/DurationField.d.ts +1 -1
  219. package/dist/form/Fields/DurationField.js +36 -50
  220. package/dist/form/Fields/LabelField.js +2 -2
  221. package/dist/form/Fields/MultiDropdownField.d.ts +1 -1
  222. package/dist/form/Fields/MultiDropdownField.js +9 -14
  223. package/dist/form/Fields/NumberField.d.ts +1 -1
  224. package/dist/form/Fields/NumberField.js +13 -48
  225. package/dist/form/Fields/ObjectField.js +3 -3
  226. package/dist/form/Fields/RadioField.d.ts +1 -1
  227. package/dist/form/Fields/RadioField.js +15 -18
  228. package/dist/form/Fields/RangeField.js +34 -35
  229. package/dist/form/Fields/StringField.d.ts +1 -1
  230. package/dist/form/Fields/StringField.js +15 -25
  231. package/dist/form/Fields/TextAreaField.js +10 -15
  232. package/dist/form/Form.d.ts +7 -2
  233. package/dist/form/Form.js +144 -49
  234. package/dist/form/FormLayout.js +18 -12
  235. package/dist/form/Wizard/WizardContainer.js +44 -18
  236. package/dist/form/Wizard/WizardNavigation.d.ts +1 -1
  237. package/dist/form/Wizard/WizardNavigation.js +31 -56
  238. package/dist/form/Wizard/WizardStepIndicator.d.ts +3 -0
  239. package/dist/form/Wizard/WizardStepIndicator.js +98 -114
  240. package/dist/form/Wizard/types.d.ts +2 -2
  241. package/dist/form/fieldFrame.d.ts +7 -0
  242. package/dist/form/fieldFrame.js +19 -0
  243. package/dist/form/index.d.ts +5 -5
  244. package/dist/form/index.js +4 -6
  245. package/dist/form/layoutCSS.js +5 -4
  246. package/dist/form/types/fieldComponentTypes.d.ts +5 -3
  247. package/dist/form/useChoiceField.js +2 -3
  248. package/dist/form/useFieldValue.d.ts +3 -0
  249. package/dist/form/useFieldValue.js +24 -7
  250. package/dist/form/utils/duration.d.ts +2 -2
  251. package/dist/form/utils/duration.js +3 -3
  252. package/dist/form/utils/fieldPath.d.ts +5 -3
  253. package/dist/form/utils/fieldPath.js +18 -3
  254. package/dist/form/utils/secondaryField.d.ts +0 -7
  255. package/dist/form/utils/secondaryField.js +1 -12
  256. package/dist/form/validation.d.ts +29 -0
  257. package/dist/form/validation.js +14 -0
  258. package/dist/format.d.ts +28 -0
  259. package/dist/format.js +64 -0
  260. package/dist/graph/AnnotationBanner.js +20 -31
  261. package/dist/graph/Connectors.js +1 -1
  262. package/dist/graph/DependencyGraph.js +51 -65
  263. package/dist/graph/GraphEditor.js +24 -28
  264. package/dist/graph/GraphEditorDialogs.js +239 -245
  265. package/dist/graph/InputDialog.js +93 -112
  266. package/dist/graph/InputsEditor.js +83 -84
  267. package/dist/graph/JobSummary.js +10 -11
  268. package/dist/graph/MatrixGroup.js +3 -3
  269. package/dist/graph/ProblemsButton.js +9 -10
  270. package/dist/graph/ShortcutsButton.js +12 -17
  271. package/dist/graph/SuggestionInput.d.ts +1 -2
  272. package/dist/graph/SuggestionInput.js +1 -3
  273. package/dist/graph/TreeView.js +47 -45
  274. package/dist/graph/WorkflowSettingsDialog.js +97 -102
  275. package/dist/graph/editorChrome.js +10 -12
  276. package/dist/graph/editorFields.d.ts +19 -16
  277. package/dist/graph/editorFields.js +97 -135
  278. package/dist/graph/editorPrimitives.js +2 -2
  279. package/dist/graph/editorRows.js +22 -25
  280. package/dist/graph/editorStrings.d.ts +16 -19
  281. package/dist/graph/editorStrings.js +11 -23
  282. package/dist/graph/fieldProblems.js +2 -2
  283. package/dist/graph/graphEditorState.d.ts +4 -4
  284. package/dist/graph/inputRefs.d.ts +0 -13
  285. package/dist/graph/inputRefs.js +121 -159
  286. package/dist/graph/settingsViews.js +5 -3
  287. package/dist/graph/stepWith.js +100 -100
  288. package/dist/graph/toolbarPanel.d.ts +8 -0
  289. package/dist/graph/toolbarPanel.js +11 -0
  290. package/dist/icons.d.ts +234 -23
  291. package/dist/icons.js +249 -264
  292. package/dist/index.d.ts +38 -21
  293. package/dist/index.js +42 -21
  294. package/dist/list/ActionToolbar.d.ts +1 -5
  295. package/dist/list/ActionToolbar.js +21 -20
  296. package/dist/list/ListPage.js +7 -7
  297. package/dist/list/ListTable.d.ts +3 -2
  298. package/dist/list/ListTable.js +33 -29
  299. package/dist/list/ListViewControls.d.ts +0 -17
  300. package/dist/list/ListViewControls.js +50 -118
  301. package/dist/list/UserHoverCard.js +24 -32
  302. package/dist/list/index.d.ts +2 -4
  303. package/dist/list/index.js +3 -5
  304. package/dist/list/listSearch.d.ts +1 -1
  305. package/dist/list/listSearch.js +19 -14
  306. package/dist/list/rowMenu.js +20 -26
  307. package/dist/logviewer/LogViewer.js +268 -382
  308. package/dist/logviewer/logviewer.css +53 -41
  309. package/dist/styles/base.css +16 -40
  310. package/dist/styles/theme.css +75 -106
  311. package/dist/styles.css +1 -1
  312. package/dist/theme/color.d.ts +40 -0
  313. package/dist/theme/color.js +228 -0
  314. package/dist/theme/contrast.d.ts +42 -0
  315. package/dist/theme/contrast.js +145 -0
  316. package/dist/theme/derive.d.ts +25 -0
  317. package/dist/theme/derive.js +475 -0
  318. package/dist/theme/fit.d.ts +35 -0
  319. package/dist/theme/fit.js +185 -0
  320. package/dist/theme/index.d.ts +14 -29
  321. package/dist/theme/index.js +20 -279
  322. package/dist/theme/model.d.ts +64 -0
  323. package/dist/theme/model.js +219 -0
  324. package/package.json +9 -5
  325. package/dist/ai/ui/Avatar.d.ts +0 -7
  326. package/dist/ai/ui/Avatar.js +0 -24
  327. package/dist/components/Filter.d.ts +0 -15
  328. package/dist/components/Filter.js +0 -32
  329. package/dist/components/FilterPill.d.ts +0 -7
  330. package/dist/components/FilterPill.js +0 -14
  331. package/dist/components/Indicator.d.ts +0 -4
  332. package/dist/components/Indicator.js +0 -44
  333. package/dist/components/SectionHeader.d.ts +0 -8
  334. package/dist/components/SectionHeader.js +0 -11
  335. package/dist/components/SettingRow.d.ts +0 -18
  336. package/dist/components/SettingRow.js +0 -35
  337. package/dist/components/SettingsGroup.d.ts +0 -8
  338. package/dist/components/SettingsGroup.js +0 -17
  339. package/dist/components/ghostButton.d.ts +0 -4
  340. package/dist/components/ghostButton.js +0 -7
  341. package/dist/components/inputClasses.d.ts +0 -1
  342. package/dist/components/inputClasses.js +0 -4
  343. package/dist/duration.d.ts +0 -3
  344. package/dist/duration.js +0 -17
  345. package/dist/form/FieldGroup.d.ts +0 -11
  346. package/dist/form/FieldGroup.js +0 -36
  347. package/dist/form/FieldWrapper.d.ts +0 -16
  348. package/dist/form/FieldWrapper.js +0 -55
  349. package/dist/form/fieldContext.d.ts +0 -19
  350. package/dist/form/fieldContext.js +0 -26
  351. package/dist/graph/Collapse.d.ts +0 -7
  352. package/dist/graph/Collapse.js +0 -15
  353. package/dist/graph/ToolbarPopover.d.ts +0 -13
  354. package/dist/graph/ToolbarPopover.js +0 -39
  355. package/dist/icons/ai/AiOutlineRollback.js +0 -16
  356. package/dist/icons/bi/BiBell.js +0 -16
  357. package/dist/icons/bi/BiBellOff.js +0 -16
  358. package/dist/icons/bi/BiBuildings.js +0 -20
  359. package/dist/icons/bi/BiError.js +0 -20
  360. package/dist/icons/bi/BiExpandVertical.js +0 -16
  361. package/dist/icons/bi/BiPause.js +0 -16
  362. package/dist/icons/bi/BiPlay.js +0 -16
  363. package/dist/icons/bi/BiRedo.js +0 -16
  364. package/dist/icons/bi/BiSolidCheckShield.js +0 -16
  365. package/dist/icons/bi/BiSolidTrashAlt.js +0 -16
  366. package/dist/icons/bi/BiStop.js +0 -16
  367. package/dist/icons/bi/BiUndo.js +0 -16
  368. package/dist/icons/bs/BsArrowsCollapse.js +0 -22
  369. package/dist/icons/bs/BsBank2.js +0 -19
  370. package/dist/icons/bs/BsBriefcase.js +0 -19
  371. package/dist/icons/bs/BsBucket.js +0 -19
  372. package/dist/icons/bs/BsCalendarX.js +0 -23
  373. package/dist/icons/bs/BsChatLeft.js +0 -19
  374. package/dist/icons/bs/BsChevronDoubleDown.js +0 -29
  375. package/dist/icons/bs/BsChevronDoubleUp.js +0 -29
  376. package/dist/icons/bs/BsClipboardCheck.js +0 -34
  377. package/dist/icons/bs/BsCurrencyDollar.js +0 -19
  378. package/dist/icons/bs/BsDash.js +0 -19
  379. package/dist/icons/bs/BsFileEarmarkZip.js +0 -23
  380. package/dist/icons/bs/BsFiles.js +0 -19
  381. package/dist/icons/bs/BsGeoAlt.js +0 -23
  382. package/dist/icons/bs/BsGrid.js +0 -19
  383. package/dist/icons/bs/BsLayers.js +0 -19
  384. package/dist/icons/bs/BsLayoutThreeColumns.js +0 -19
  385. package/dist/icons/bs/BsListUl.js +0 -22
  386. package/dist/icons/bs/BsMortarboard.js +0 -23
  387. package/dist/icons/bs/BsMusicNoteBeamed.js +0 -34
  388. package/dist/icons/bs/BsOpenai.js +0 -19
  389. package/dist/icons/bs/BsPersonPlus.js +0 -26
  390. package/dist/icons/bs/BsSearch.js +0 -19
  391. package/dist/icons/bs/BsSend.js +0 -19
  392. package/dist/icons/bs/BsShieldSlash.js +0 -22
  393. package/dist/icons/bs/BsStar.js +0 -19
  394. package/dist/icons/bs/BsStarFill.js +0 -19
  395. package/dist/icons/bs/BsStopCircle.js +0 -23
  396. package/dist/icons/bs/BsTag.js +0 -23
  397. package/dist/icons/bs/BsTelephone.js +0 -19
  398. package/dist/icons/bs/BsTerminal.js +0 -23
  399. package/dist/icons/bs/BsTerminalFill.js +0 -19
  400. package/dist/icons/bs/BsThreeDots.js +0 -19
  401. package/dist/icons/bs/BsThreeDotsVertical.js +0 -19
  402. package/dist/icons/bs/BsZoomIn.js +0 -37
  403. package/dist/icons/fa/FaAmazon.js +0 -16
  404. package/dist/icons/fa/FaAngleDown.js +0 -16
  405. package/dist/icons/fa/FaAngleLeft.js +0 -16
  406. package/dist/icons/fa/FaAngleRight.js +0 -16
  407. package/dist/icons/fa/FaAngleUp.js +0 -16
  408. package/dist/icons/fa/FaArrowDown.js +0 -16
  409. package/dist/icons/fa/FaArrowLeft.js +0 -16
  410. package/dist/icons/fa/FaArrowRight.js +0 -16
  411. package/dist/icons/fa/FaArrowUp.js +0 -16
  412. package/dist/icons/fa/FaBalanceScale.js +0 -16
  413. package/dist/icons/fa/FaCaretDown.js +0 -16
  414. package/dist/icons/fa/FaCentos.js +0 -16
  415. package/dist/icons/fa/FaChartLine.js +0 -16
  416. package/dist/icons/fa/FaChartPie.js +0 -16
  417. package/dist/icons/fa/FaCheck.js +0 -16
  418. package/dist/icons/fa/FaChevronDown.js +0 -16
  419. package/dist/icons/fa/FaChevronUp.js +0 -16
  420. package/dist/icons/fa/FaChrome.js +0 -16
  421. package/dist/icons/fa/FaCircleNotch.js +0 -16
  422. package/dist/icons/fa/FaCloud.js +0 -16
  423. package/dist/icons/fa/FaCloudDownloadAlt.js +0 -16
  424. package/dist/icons/fa/FaCog.js +0 -16
  425. package/dist/icons/fa/FaCogs.js +0 -16
  426. package/dist/icons/fa/FaComments.js +0 -16
  427. package/dist/icons/fa/FaCompress.js +0 -16
  428. package/dist/icons/fa/FaDesktop.js +0 -16
  429. package/dist/icons/fa/FaDocker.js +0 -16
  430. package/dist/icons/fa/FaDollarSign.js +0 -16
  431. package/dist/icons/fa/FaEdge.js +0 -16
  432. package/dist/icons/fa/FaEdit.js +0 -16
  433. package/dist/icons/fa/FaExclamationTriangle.js +0 -16
  434. package/dist/icons/fa/FaExpand.js +0 -16
  435. package/dist/icons/fa/FaEye.js +0 -16
  436. package/dist/icons/fa/FaEyeSlash.js +0 -16
  437. package/dist/icons/fa/FaFile.js +0 -16
  438. package/dist/icons/fa/FaFilePdf.js +0 -16
  439. package/dist/icons/fa/FaFilter.js +0 -16
  440. package/dist/icons/fa/FaFirefoxBrowser.js +0 -16
  441. package/dist/icons/fa/FaFlask.js +0 -16
  442. package/dist/icons/fa/FaFolder.js +0 -16
  443. package/dist/icons/fa/FaGithub.js +0 -16
  444. package/dist/icons/fa/FaGitlab.js +0 -16
  445. package/dist/icons/fa/FaGlobe.js +0 -16
  446. package/dist/icons/fa/FaGlobeAmericas.js +0 -16
  447. package/dist/icons/fa/FaImage.js +0 -16
  448. package/dist/icons/fa/FaInfoCircle.js +0 -16
  449. package/dist/icons/fa/FaKey.js +0 -16
  450. package/dist/icons/fa/FaLayerGroup.js +0 -16
  451. package/dist/icons/fa/FaLink.js +0 -16
  452. package/dist/icons/fa/FaLinkedin.js +0 -16
  453. package/dist/icons/fa/FaLinux.js +0 -16
  454. package/dist/icons/fa/FaList.js +0 -16
  455. package/dist/icons/fa/FaLock.js +0 -16
  456. package/dist/icons/fa/FaOpenid.js +0 -16
  457. package/dist/icons/fa/FaOpera.js +0 -16
  458. package/dist/icons/fa/FaPaperclip.js +0 -16
  459. package/dist/icons/fa/FaPlus.js +0 -16
  460. package/dist/icons/fa/FaPowerOff.js +0 -16
  461. package/dist/icons/fa/FaPrint.js +0 -16
  462. package/dist/icons/fa/FaQrcode.js +0 -16
  463. package/dist/icons/fa/FaQuestionCircle.js +0 -16
  464. package/dist/icons/fa/FaRedhat.js +0 -16
  465. package/dist/icons/fa/FaRegCircle.js +0 -16
  466. package/dist/icons/fa/FaRegFileImage.js +0 -16
  467. package/dist/icons/fa/FaRegFolder.js +0 -16
  468. package/dist/icons/fa/FaRobot.js +0 -16
  469. package/dist/icons/fa/FaRocket.js +0 -16
  470. package/dist/icons/fa/FaRunning.js +0 -16
  471. package/dist/icons/fa/FaSafari.js +0 -16
  472. package/dist/icons/fa/FaSave.js +0 -16
  473. package/dist/icons/fa/FaSearch.js +0 -16
  474. package/dist/icons/fa/FaShieldAlt.js +0 -16
  475. package/dist/icons/fa/FaSlack.js +0 -16
  476. package/dist/icons/fa/FaStar.js +0 -16
  477. package/dist/icons/fa/FaStop.js +0 -16
  478. package/dist/icons/fa/FaSuse.js +0 -16
  479. package/dist/icons/fa/FaTerminal.js +0 -16
  480. package/dist/icons/fa/FaTimes.js +0 -16
  481. package/dist/icons/fa/FaUbuntu.js +0 -16
  482. package/dist/icons/fa/FaUndoAlt.js +0 -16
  483. package/dist/icons/fa/FaUnlink.js +0 -16
  484. package/dist/icons/fa/FaUser.js +0 -16
  485. package/dist/icons/fa/FaUsers.js +0 -16
  486. package/dist/icons/fa/FaWindows.js +0 -16
  487. package/dist/icons/fa6/FaApple.js +0 -16
  488. package/dist/icons/fa6/FaArrowsRotate.js +0 -16
  489. package/dist/icons/fa6/FaDebian.js +0 -16
  490. package/dist/icons/fa6/FaFilterCircleXmark.js +0 -16
  491. package/dist/icons/fa6/FaInbox.js +0 -16
  492. package/dist/icons/fa6/FaLocationDot.js +0 -16
  493. package/dist/icons/fa6/FaRegFilePdf.js +0 -16
  494. package/dist/icons/fa6/FaRegFolderOpen.js +0 -16
  495. package/dist/icons/fa6/FaUpRightFromSquare.js +0 -16
  496. package/dist/icons/fa6/FaWandMagicSparkles.js +0 -16
  497. package/dist/icons/fa6/FaXTwitter.js +0 -16
  498. package/dist/icons/fi/FiActivity.js +0 -23
  499. package/dist/icons/fi/FiAlertCircle.js +0 -49
  500. package/dist/icons/fi/FiChevronDown.js +0 -23
  501. package/dist/icons/fi/FiClock.js +0 -31
  502. package/dist/icons/fi/FiCopy.js +0 -34
  503. package/dist/icons/fi/FiDownload.js +0 -40
  504. package/dist/icons/fi/FiFile.js +0 -27
  505. package/dist/icons/fi/FiFileText.js +0 -55
  506. package/dist/icons/fi/FiHardDrive.js +0 -55
  507. package/dist/icons/fi/FiRotateCcw.js +0 -27
  508. package/dist/icons/fi/FiUpload.js +0 -40
  509. package/dist/icons/fi/FiX.js +0 -37
  510. package/dist/icons/fi/FiZap.js +0 -23
  511. package/dist/icons/gi/GiSpy.js +0 -16
  512. package/dist/icons/go/GoGitCommit.js +0 -16
  513. package/dist/icons/go/GoGitPullRequest.js +0 -20
  514. package/dist/icons/go/GoIssueOpened.js +0 -16
  515. package/dist/icons/go/GoPlus.js +0 -16
  516. package/dist/icons/go/GoRepoForked.js +0 -28
  517. package/dist/icons/go/GoSignOut.js +0 -16
  518. package/dist/icons/go/GoSkip.js +0 -20
  519. package/dist/icons/go/GoVideo.js +0 -20
  520. package/dist/icons/gr/GrCloudComputer.js +0 -20
  521. package/dist/icons/gr/GrInbox.js +0 -20
  522. package/dist/icons/gr/GrServerCluster.js +0 -20
  523. package/dist/icons/gr/GrStorage.js +0 -20
  524. package/dist/icons/gr/GrTasks.js +0 -20
  525. package/dist/icons/hi/HiCog.js +0 -24
  526. package/dist/icons/hi/HiDuplicate.js +0 -24
  527. package/dist/icons/hi/HiOutlineArchive.js +0 -26
  528. package/dist/icons/hi/HiOutlineClipboardCopy.js +0 -26
  529. package/dist/icons/hi/HiOutlineHome.js +0 -26
  530. package/dist/icons/hi/HiQuestionMarkCircle.js +0 -24
  531. package/dist/icons/hi/HiServer.js +0 -24
  532. package/dist/icons/hi2/HiMiniCheckCircle.js +0 -24
  533. package/dist/icons/hi2/HiMiniLanguage.js +0 -28
  534. package/dist/icons/hi2/HiMiniMinusCircle.js +0 -24
  535. package/dist/icons/hi2/HiMiniXCircle.js +0 -24
  536. package/dist/icons/hi2/HiSparkles.js +0 -24
  537. package/dist/icons/im/ImSpinner5.js +0 -19
  538. package/dist/icons/io/IoIosNotifications.js +0 -16
  539. package/dist/icons/io/IoMdBuild.js +0 -16
  540. package/dist/icons/io/IoMdClose.js +0 -16
  541. package/dist/icons/io5/IoCloudUploadOutline.js +0 -32
  542. package/dist/icons/io5/IoDocumentTextOutline.js +0 -31
  543. package/dist/icons/io5/IoFileTrayFullOutline.js +0 -31
  544. package/dist/icons/io5/IoHeart.js +0 -16
  545. package/dist/icons/io5/IoHeartDislike.js +0 -16
  546. package/dist/icons/io5/IoHeartOutline.js +0 -22
  547. package/dist/icons/io5/IoInformationCircleOutline.js +0 -50
  548. package/dist/icons/io5/IoSettingsOutline.js +0 -22
  549. package/dist/icons/io5/IoWarningOutline.js +0 -40
  550. package/dist/icons/lu/LuArrowRight.js +0 -27
  551. package/dist/icons/lu/LuBadgeCheck.js +0 -27
  552. package/dist/icons/lu/LuBraces.js +0 -27
  553. package/dist/icons/lu/LuBrainCircuit.js +0 -101
  554. package/dist/icons/lu/LuCalendar.js +0 -46
  555. package/dist/icons/lu/LuCheck.js +0 -23
  556. package/dist/icons/lu/LuChevronLeft.js +0 -23
  557. package/dist/icons/lu/LuChevronRight.js +0 -23
  558. package/dist/icons/lu/LuCode.js +0 -27
  559. package/dist/icons/lu/LuExternalLink.js +0 -35
  560. package/dist/icons/lu/LuEye.js +0 -31
  561. package/dist/icons/lu/LuEyeOff.js +0 -40
  562. package/dist/icons/lu/LuFolderTree.js +0 -40
  563. package/dist/icons/lu/LuIdCard.js +0 -55
  564. package/dist/icons/lu/LuKeyboard.js +0 -71
  565. package/dist/icons/lu/LuLogs.js +0 -65
  566. package/dist/icons/lu/LuMail.js +0 -33
  567. package/dist/icons/lu/LuMegaphone.js +0 -27
  568. package/dist/icons/lu/LuMoon.js +0 -23
  569. package/dist/icons/lu/LuNetwork.js +0 -63
  570. package/dist/icons/lu/LuPartyPopper.js +0 -65
  571. package/dist/icons/lu/LuSettings2.js +0 -48
  572. package/dist/icons/lu/LuSheet.js +0 -72
  573. package/dist/icons/lu/LuShield.js +0 -23
  574. package/dist/icons/lu/LuSun.js +0 -69
  575. package/dist/icons/lu/LuTextCursorInput.js +0 -45
  576. package/dist/icons/lu/LuX.js +0 -27
  577. package/dist/icons/lu/LuZoomIn.js +0 -59
  578. package/dist/icons/lu/LuZoomOut.js +0 -49
  579. package/dist/icons/md/MdClear.js +0 -23
  580. package/dist/icons/md/MdDragHandle.js +0 -23
  581. package/dist/icons/md/MdInstallDesktop.js +0 -31
  582. package/dist/icons/md/MdOutlineAttachMoney.js +0 -23
  583. package/dist/icons/md/MdOutlineMoneyOff.js +0 -23
  584. package/dist/icons/md/MdPieChart.js +0 -23
  585. package/dist/icons/md/MdRefresh.js +0 -23
  586. package/dist/icons/md/MdReplay.js +0 -23
  587. package/dist/icons/md/MdSmartphone.js +0 -23
  588. package/dist/icons/pi/PiArrowBendUpRightBold.js +0 -19
  589. package/dist/icons/pi/PiPlugsConnectedFill.js +0 -19
  590. package/dist/icons/pi/PiRectangleDashed.js +0 -19
  591. package/dist/icons/pi/PiShareBold.js +0 -19
  592. package/dist/icons/si/SiAnthropic.js +0 -19
  593. package/dist/icons/si/SiHelm.js +0 -19
  594. package/dist/icons/si/SiKubernetes.js +0 -19
  595. package/dist/icons/tb/TbAlertTriangle.js +0 -35
  596. package/dist/icons/tb/TbAlertTriangleFilled.js +0 -19
  597. package/dist/icons/tb/TbApi.js +0 -40
  598. package/dist/icons/tb/TbBrain.js +0 -50
  599. package/dist/icons/tb/TbBuildingTunnel.js +0 -65
  600. package/dist/icons/tb/TbEdit.js +0 -35
  601. package/dist/icons/tb/TbLayoutSidebar.js +0 -27
  602. package/dist/icons/tb/TbLayoutSidebarLeftCollapse.js +0 -35
  603. package/dist/icons/tb/TbLayoutSidebarRightCollapse.js +0 -35
  604. package/dist/icons/tb/TbUser.js +0 -27
  605. package/dist/icons/tb/TbUserOff.js +0 -35
  606. package/dist/icons/tb/TbWorldShare.js +0 -55
  607. package/dist/icons/tb/TbWorldWww.js +0 -65
  608. package/dist/icons/ti/TiArrowSortedDown.js +0 -20
  609. package/dist/icons/ti/TiArrowSortedUp.js +0 -20
  610. package/dist/icons/ti/TiArrowUnsorted.js +0 -20
  611. package/dist/icons/ti/TiCancel.js +0 -20
  612. package/dist/icons/vsc/VscChromeMinimize.js +0 -19
  613. package/dist/icons/vsc/VscJson.js +0 -19
  614. package/dist/icons/vsc/VscLayoutSidebarLeft.js +0 -19
  615. package/dist/icons/vsc/VscPass.js +0 -27
  616. package/dist/icons/vsc/VscSplitHorizontal.js +0 -19
  617. package/dist/icons/vsc/VscTerminalPowershell.js +0 -19
  618. package/dist/list/ListPager.d.ts +0 -14
  619. package/dist/list/ListPager.js +0 -62
  620. package/dist/list/textEntry.d.ts +0 -2
  621. package/dist/list/textEntry.js +0 -10
  622. /package/dist/{ai/ui/codeBreaks.d.ts → components/markdownCodeBreaks.d.ts} +0 -0
@@ -1,10 +1,5 @@
1
1
  /** The agent status words: one is picked per turn and held until it ends. */
2
2
  export declare const activityWords: readonly ['Thinking', 'Cogitating', 'Pondering', 'Percolating', 'Ruminating', 'Noodling', 'Conjuring', 'Simmering', 'Marinating', 'Tinkering', 'Scheming', 'Brewing', 'Wrangling', 'Finagling', 'Spelunking', 'Puttering', 'Composing', 'Synthesizing', 'Deliberating', 'Mulling', 'Contemplating', 'Vibing', 'Whittling', 'Concocting', 'Formulating', 'Hatching', 'Herding', 'Ideating', 'Manifesting', 'Moseying', 'Musing', 'Percussing', 'Reticulating', 'Schlepping', 'Stewing', 'Transmuting', 'Wibbling', 'Crunching', 'Forging', 'Cooking'];
3
- /** Elapsed run time the way an agent status line prints it: 45s, 2m13s,
4
- * 1h2m3s. */
5
- export declare function formatElapsed(seconds: number): string;
6
- /** Token counts the way an agent status line prints them: 512, 1.2k, 3.4M. */
7
- export declare function compactCount(n: number): string;
8
3
  /** The terminal's "it's working" line for a running turn: spinner, status
9
4
  * word, how long the turn has run, its token counts so far, and a way to
10
5
  * stop it. */
@@ -1,10 +1,11 @@
1
- import { FaStop } from "../../../icons/fa/FaStop.js";
2
- import { LoaderIcon } from "../../../components/StatusIcons.js";
1
+ import { cx } from "../../../cx.js";
2
+ import { StopIcon } from "../../../icons.js";
3
+ import { Loader } from "../../../components/Loader.js";
4
+ import { formatCount, formatDuration } from "../../../format.js";
5
+ import { useElapsed } from "../../../components/relativeTime.js";
3
6
  import { useChatConfig } from "../../core/config.js";
4
- import { clsx } from "clsx";
5
7
  import { jsx, jsxs } from "react/jsx-runtime";
6
8
  import { useEffect, useRef, useState } from "react";
7
- import { DateTime } from "luxon";
8
9
  //#region src/ai/components/agent/ActivityLine.tsx
9
10
  /** The agent status words: one is picked per turn and held until it ends. */
10
11
  var activityWords = [
@@ -52,41 +53,6 @@ var activityWords = [
52
53
  function randomActivityWord() {
53
54
  return activityWords[Math.floor(Math.random() * activityWords.length)] ?? activityWords[0];
54
55
  }
55
- /** Elapsed run time the way an agent status line prints it: 45s, 2m13s,
56
- * 1h2m3s. */
57
- function formatElapsed(seconds) {
58
- const total = Math.max(0, Math.floor(seconds));
59
- const hours = Math.floor(total / 3600);
60
- const minutes = Math.floor(total % 3600 / 60);
61
- const rest = total % 60;
62
- if (hours > 0) return `${hours}h${minutes}m${rest}s`;
63
- if (minutes > 0) return `${minutes}m${rest}s`;
64
- return `${rest}s`;
65
- }
66
- /** Token counts the way an agent status line prints them: 512, 1.2k, 3.4M. */
67
- function compactCount(n) {
68
- if (n >= 1e6) return `${(n / 1e6).toFixed(1)}M`;
69
- if (n >= 1e3) return `${(n / 1e3).toFixed(1)}k`;
70
- return String(Math.floor(n));
71
- }
72
- function secondsSince(iso) {
73
- return Math.max(0, DateTime.now().diff(DateTime.fromISO(iso)).as("seconds"));
74
- }
75
- /** Seconds since `startedAt`, re-read every second; null when there is no
76
- * start to count from. */
77
- function useElapsedSeconds(startedAt) {
78
- const [elapsed, setElapsed] = useState(() => startedAt ? secondsSince(startedAt) : null);
79
- useEffect(() => {
80
- if (!startedAt) {
81
- setElapsed(null);
82
- return;
83
- }
84
- setElapsed(secondsSince(startedAt));
85
- const id = setInterval(() => setElapsed(secondsSince(startedAt)), 1e3);
86
- return () => clearInterval(id);
87
- }, [startedAt]);
88
- return elapsed;
89
- }
90
56
  /** A status word held for the whole turn and re-rolled when a new one starts. */
91
57
  function useTurnWord(startedAt) {
92
58
  const [word, setWord] = useState(randomActivityWord);
@@ -104,27 +70,24 @@ function useTurnWord(startedAt) {
104
70
  * stop it. */
105
71
  function ActivityLine({ startedAt, inputTokens, outputTokens, onStop, stopping = false, word, testId }) {
106
72
  const { strings } = useChatConfig();
107
- const elapsed = useElapsedSeconds(startedAt);
73
+ const elapsed = useElapsed(startedAt);
108
74
  const turnWord = useTurnWord(startedAt);
109
75
  const meta = [];
110
- if (elapsed !== null) meta.push(formatElapsed(elapsed));
111
- if (inputTokens || outputTokens) meta.push(strings.activity.tokens(compactCount(inputTokens ?? 0), compactCount(outputTokens ?? 0)));
76
+ if (elapsed !== null) meta.push(formatDuration(elapsed));
77
+ if (inputTokens || outputTokens) meta.push(strings.activity.tokens(formatCount(inputTokens ?? 0), formatCount(outputTokens ?? 0)));
112
78
  return /* @__PURE__ */ jsxs("div", {
113
79
  "data-testid": testId,
114
80
  className: "flex min-h-8 items-center gap-2 px-1 text-sm",
115
81
  children: [
116
- /* @__PURE__ */ jsx(LoaderIcon, {
117
- className: "h-3.5 w-3.5 shrink-0 animate-spin text-(--theme-element) motion-reduce:hidden",
118
- "aria-hidden": "true"
119
- }),
120
- /* @__PURE__ */ jsx("span", {
121
- className: "hidden shrink-0 leading-none text-(--theme-element) motion-reduce:inline",
122
- "aria-hidden": "true",
123
- children: "●"
82
+ /* @__PURE__ */ jsx(Loader, {
83
+ inline: true,
84
+ decorative: true,
85
+ size: 14,
86
+ color: "var(--theme-accent)"
124
87
  }),
125
88
  /* @__PURE__ */ jsxs("span", {
126
89
  "data-testid": testId ? `${testId}-word` : void 0,
127
- className: "min-w-0 truncate text-(--theme-element)",
90
+ className: "min-w-0 truncate text-(--theme-accent)",
128
91
  children: [word ?? turnWord, "…"]
129
92
  }),
130
93
  meta.length > 0 && /* @__PURE__ */ jsxs("span", {
@@ -142,11 +105,11 @@ function ActivityLine({ startedAt, inputTokens, outputTokens, onStop, stopping =
142
105
  disabled: stopping,
143
106
  "aria-label": strings.input.stopGenerating,
144
107
  title: strings.input.stopGenerating,
145
- className: clsx("ml-auto inline-flex h-7 items-center gap-1.5 rounded-md px-2 text-xs theme-muted-text transition-colors", "hover:theme-hover hover:theme-text disabled:cursor-not-allowed disabled:opacity-50"),
146
- children: [/* @__PURE__ */ jsx(FaStop, { className: "h-3 w-3" }), strings.activity.stop]
108
+ className: cx("ml-auto inline-flex h-7 items-center gap-1.5 rounded-md px-2 text-xs theme-muted-text transition-colors", "hover:theme-hover hover:theme-text disabled:cursor-not-allowed disabled:opacity-50"),
109
+ children: [/* @__PURE__ */ jsx(StopIcon, { className: "h-3 w-3" }), strings.activity.stop]
147
110
  })
148
111
  ]
149
112
  });
150
113
  }
151
114
  //#endregion
152
- export { activityWords, compactCount, ActivityLine as default, formatElapsed };
115
+ export { activityWords, ActivityLine as default };
@@ -1,7 +1,10 @@
1
- import { FaCheck } from "../../../icons/fa/FaCheck.js";
2
- import { LuChevronRight } from "../../../icons/lu/LuChevronRight.js";
3
- import { LoaderIcon } from "../../../components/StatusIcons.js";
4
- import { useCssIsDark } from "../../../components/useCssIsDark.js";
1
+ import { cx } from "../../../cx.js";
2
+ import { CheckIcon } from "../../../icons.js";
3
+ import { Loader } from "../../../components/Loader.js";
4
+ import { useStrings } from "../../../components/Provider.js";
5
+ import { fieldBox } from "../../../components/fieldBox.js";
6
+ import { Disclosure } from "../../../components/Disclosure.js";
7
+ import { formatDuration } from "../../../format.js";
5
8
  import { LogViewer } from "../../../logviewer/LogViewer.js";
6
9
  import { agentColorHex, bashExitCode, fullToolArgs, isGroupableTool, rollupSentence, summarizeToolArgs, toolHeaderFor, toolSummary } from "../../agent/toolfmt.js";
7
10
  import { computeEditDiff, computeWriteRows, editSummary, isEditDiffTool, parseEditArgs } from "../../agent/diff.js";
@@ -10,8 +13,7 @@ import { thinkingHeading } from "../../agent/transcript.js";
10
13
  import { useChatConfig } from "../../core/config.js";
11
14
  import Markdown from "../../ui/Markdown.js";
12
15
  import { chatProseClasses } from "../../ui/prose.js";
13
- import { ReasoningBody, ReasoningToggle } from "../Reasoning.js";
14
- import { clsx } from "clsx";
16
+ import { Reasoning, ReasoningBody } from "../Reasoning.js";
15
17
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
16
18
  import { useEffect, useMemo, useState } from "react";
17
19
  //#region src/ai/components/agent/AgentMessageParts.tsx
@@ -44,7 +46,6 @@ function LineSpans({ text, tokens, emphasis }) {
44
46
  return /* @__PURE__ */ jsx(Fragment, { children: out });
45
47
  }
46
48
  function DiffRows({ rows, lang }) {
47
- const isDark = useCssIsDark();
48
49
  const [tokens, setTokens] = useState(null);
49
50
  const lineKey = useMemo(() => rows.map((r) => r.kind === "gap" ? "" : r.text).join("\n"), [rows]);
50
51
  useEffect(() => {
@@ -53,22 +54,18 @@ function DiffRows({ rows, lang }) {
53
54
  return;
54
55
  }
55
56
  let live = true;
56
- tokenizeDiffLines(lineKey.split("\n"), lang, isDark).then((t) => {
57
+ tokenizeDiffLines(lineKey.split("\n"), lang).then((t) => {
57
58
  if (live) setTokens(t);
58
59
  });
59
60
  return () => {
60
61
  live = false;
61
62
  };
62
- }, [
63
- lang,
64
- lineKey,
65
- isDark
66
- ]);
63
+ }, [lang, lineKey]);
67
64
  const numbered = rows.some((r) => r.oldNo !== void 0 || r.newNo !== void 0);
68
65
  return /* @__PURE__ */ jsx("div", {
69
66
  className: "overflow-x-auto rounded-md border theme-border font-mono text-xs leading-5",
70
67
  children: rows.map((row, i) => /* @__PURE__ */ jsxs("div", {
71
- className: clsx("flex whitespace-pre", row.kind === "add" && "bg-green-500/15", row.kind === "del" && "bg-red-500/15", row.kind === "gap" && "theme-muted-text"),
68
+ className: cx("flex whitespace-pre", row.kind === "add" && "bg-green-500/15", row.kind === "del" && "bg-red-500/15", row.kind === "gap" && "theme-muted-text"),
72
69
  children: [
73
70
  numbered && /* @__PURE__ */ jsx("span", {
74
71
  className: "w-10 shrink-0 select-none text-right pr-2 theme-muted-text",
@@ -95,7 +92,7 @@ function EditDiffBlock({ part }) {
95
92
  const t = strings.agentTranscript;
96
93
  const a = parseEditArgs(part.args);
97
94
  if (!a) return null;
98
- const outcome = editSummary(part.name, part.args);
95
+ const outcome = editSummary(part.name, part.args, strings.tools);
99
96
  const model = part.name === "EditFile" ? computeEditDiff(a.old_string ?? "", a.new_string ?? "", part.startLine) : computeWriteRows(a.content ?? "");
100
97
  return /* @__PURE__ */ jsxs("div", {
101
98
  className: "mt-1.5 space-y-1",
@@ -117,6 +114,7 @@ function EditDiffBlock({ part }) {
117
114
  }
118
115
  function ResultBody({ part }) {
119
116
  const { strings } = useChatConfig();
117
+ const { common } = useStrings();
120
118
  const t = strings.agentTranscript;
121
119
  const [showAll, setShowAll] = useState(false);
122
120
  const result = part.result ?? "";
@@ -158,13 +156,18 @@ function ResultBody({ part }) {
158
156
  type: "button",
159
157
  onClick: () => setShowAll(false),
160
158
  className: "text-xs text-(--theme-link) hover:underline",
161
- children: t.showLess
159
+ children: common.showLess
162
160
  })
163
161
  ]
164
162
  });
165
163
  }
166
164
  function ToolStatusDot({ part }) {
167
- if (part.status === "running") return /* @__PURE__ */ jsx(LoaderIcon, { className: "w-3.5 h-3.5 animate-spin theme-muted-text" });
165
+ if (part.status === "running") return /* @__PURE__ */ jsx(Loader, {
166
+ inline: true,
167
+ decorative: true,
168
+ size: 14,
169
+ color: "var(--theme-muted-text-color)"
170
+ });
168
171
  if (part.status === "error") return /* @__PURE__ */ jsx("span", {
169
172
  className: "text-red-500 leading-none",
170
173
  children: "●"
@@ -174,6 +177,8 @@ function ToolStatusDot({ part }) {
174
177
  children: "●"
175
178
  });
176
179
  }
180
+ /** A part's toggle row: its status mark and name, across the transcript's width. */
181
+ var rowSummaryClasses = "min-h-6 w-full";
177
182
  function ToolCallBlock({ part }) {
178
183
  const { strings } = useChatConfig();
179
184
  const t = strings.agentTranscript;
@@ -181,46 +186,43 @@ function ToolCallBlock({ part }) {
181
186
  const header = toolHeaderFor(part.name);
182
187
  const argSummary = summarizeToolArgs(header.arg, part.args);
183
188
  const isDiff = isEditDiffTool(part.name);
184
- const summary = part.status === "running" ? t.running : toolSummary(part.name, part.args, part.result ?? "", part.status === "error", editSummary);
189
+ const summary = part.status === "running" ? t.running : toolSummary(part.name, part.args, part.result ?? "", part.status === "error", {
190
+ editSummary,
191
+ strings: strings.tools
192
+ });
185
193
  return /* @__PURE__ */ jsxs("div", {
186
194
  className: "py-1.5 text-sm",
187
195
  "data-testid": "tool-call-part",
188
196
  children: [
189
- /* @__PURE__ */ jsxs("button", {
190
- type: "button",
191
- onClick: () => setExpanded((v) => !v),
192
- "aria-expanded": expanded,
193
- className: "flex min-h-6 items-start gap-2 w-full text-left group/tool",
194
- children: [
195
- /* @__PURE__ */ jsx(ToolStatusDot, { part }),
196
- /* @__PURE__ */ jsxs("span", {
197
- className: "font-mono text-[13px] leading-5 min-w-0 truncate",
198
- children: [/* @__PURE__ */ jsx("span", {
199
- className: "font-semibold",
200
- children: header.label
201
- }), argSummary && /* @__PURE__ */ jsxs("span", {
202
- className: "theme-muted-text",
203
- children: [
204
- "(",
205
- argSummary,
206
- ")"
207
- ]
208
- })]
209
- }),
210
- /* @__PURE__ */ jsx(LuChevronRight, { className: clsx("w-3.5 h-3.5 mt-1 shrink-0 theme-muted-text transition-transform", expanded && "rotate-90") })
211
- ]
212
- }),
213
- !isDiff && /* @__PURE__ */ jsx("div", {
214
- className: clsx("ml-5 mt-0.5 text-[13px]", part.status === "error" ? "text-red-600" : "theme-muted-text"),
215
- children: expanded ? null : summary
216
- }),
217
- expanded && !isDiff && /* @__PURE__ */ jsxs("div", {
218
- className: "ml-5 mt-1 space-y-1.5",
197
+ /* @__PURE__ */ jsxs(Disclosure, {
198
+ open: expanded,
199
+ onOpenChange: setExpanded,
200
+ disabled: isDiff,
201
+ summaryClassName: rowSummaryClasses,
202
+ summary: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ToolStatusDot, { part }), /* @__PURE__ */ jsxs("span", {
203
+ className: "font-mono text-[13px] leading-5 min-w-0 truncate",
204
+ children: [/* @__PURE__ */ jsx("span", {
205
+ className: "font-semibold",
206
+ children: header.label
207
+ }), argSummary && /* @__PURE__ */ jsxs("span", {
208
+ className: "theme-muted-text",
209
+ children: [
210
+ "(",
211
+ argSummary,
212
+ ")"
213
+ ]
214
+ })]
215
+ })] }),
216
+ panelClassName: "ml-5 mt-1 space-y-1.5",
219
217
  children: [fullToolArgs(header.arg, part.args) && /* @__PURE__ */ jsx("pre", {
220
218
  className: "overflow-x-auto rounded-md bg-(--theme-muted-panel-bg) p-2 font-mono text-xs whitespace-pre-wrap",
221
219
  children: fullToolArgs(header.arg, part.args)
222
220
  }), /* @__PURE__ */ jsx(ResultBody, { part })]
223
221
  }),
222
+ !isDiff && !expanded && /* @__PURE__ */ jsx("div", {
223
+ className: cx("ml-5 mt-0.5 text-[13px]", part.status === "error" ? "text-(--theme-error)" : "theme-muted-text"),
224
+ children: summary
225
+ }),
224
226
  isDiff && /* @__PURE__ */ jsx("div", {
225
227
  className: "ml-5",
226
228
  children: /* @__PURE__ */ jsx(EditDiffBlock, { part })
@@ -244,50 +246,54 @@ function SubagentCard({ part }) {
244
246
  return /* @__PURE__ */ jsxs("div", {
245
247
  className: "py-1.5 text-sm",
246
248
  "data-testid": "subagent-part",
247
- children: [/* @__PURE__ */ jsxs("button", {
248
- type: "button",
249
- onClick: () => canExpand && setExpanded((v) => !v),
250
- "aria-expanded": expanded,
251
- className: "flex min-h-6 items-start gap-2 w-full text-left",
252
- children: [
253
- part.status === "running" ? /* @__PURE__ */ jsx(LoaderIcon, { className: "w-3.5 h-3.5 mt-[3px] animate-spin theme-muted-text" }) : /* @__PURE__ */ jsx("span", {
254
- className: clsx("leading-none", part.status === "failed" ? "text-red-500" : "text-green-600"),
255
- style: color && part.status !== "failed" ? { color } : void 0,
256
- children: "●"
257
- }),
258
- /* @__PURE__ */ jsxs("span", {
259
- className: "font-mono text-[13px] leading-5 min-w-0 truncate",
260
- children: [/* @__PURE__ */ jsx("span", {
261
- className: "font-semibold",
262
- children: label
263
- }), part.description && /* @__PURE__ */ jsxs("span", {
264
- className: "theme-muted-text",
265
- children: [
266
- "(",
267
- part.description,
268
- ")"
269
- ]
270
- })]
271
- }),
272
- canExpand && /* @__PURE__ */ jsx(LuChevronRight, { className: clsx("w-3.5 h-3.5 mt-1 shrink-0 theme-muted-text transition-transform", expanded && "rotate-90") })
273
- ]
274
- }), /* @__PURE__ */ jsx("div", {
275
- className: clsx("ml-5 mt-0.5 text-[13px]", part.status === "failed" ? "text-red-600" : "theme-muted-text"),
276
- children: expanded ? /* @__PURE__ */ jsxs("div", {
277
- className: "space-y-1",
278
- children: [actions.length > 0 && /* @__PURE__ */ jsxs("ul", {
279
- className: "space-y-0.5",
280
- children: [actions.map((a, i) => /* @__PURE__ */ jsx("li", { children: a }, i)), part.status !== "running" && /* @__PURE__ */ jsx("li", { children: outcome })]
281
- }), part.report && /* @__PURE__ */ jsx("div", {
282
- className: "border-l-2 theme-border pl-3 text-sm theme-muted-text",
283
- children: /* @__PURE__ */ jsx(Markdown, { children: part.report })
249
+ children: [/* @__PURE__ */ jsxs(Disclosure, {
250
+ open: expanded,
251
+ onOpenChange: setExpanded,
252
+ disabled: !canExpand,
253
+ summaryClassName: rowSummaryClasses,
254
+ summary: /* @__PURE__ */ jsxs(Fragment, { children: [part.status === "running" ? /* @__PURE__ */ jsx("span", {
255
+ className: "mt-[3px]",
256
+ children: /* @__PURE__ */ jsx(Loader, {
257
+ inline: true,
258
+ decorative: true,
259
+ size: 14,
260
+ color: "var(--theme-muted-text-color)"
261
+ })
262
+ }) : /* @__PURE__ */ jsx("span", {
263
+ className: cx("leading-none", part.status === "failed" ? "text-(--theme-error)" : "text-(--theme-success)"),
264
+ style: color && part.status !== "failed" ? { color } : void 0,
265
+ children: "●"
266
+ }), /* @__PURE__ */ jsxs("span", {
267
+ className: "font-mono text-[13px] leading-5 min-w-0 truncate",
268
+ children: [/* @__PURE__ */ jsx("span", {
269
+ className: "font-semibold",
270
+ children: label
271
+ }), part.description && /* @__PURE__ */ jsxs("span", {
272
+ className: "theme-muted-text",
273
+ children: [
274
+ "(",
275
+ part.description,
276
+ ")"
277
+ ]
284
278
  })]
285
- }) : outcome
279
+ })] }),
280
+ panelClassName: cx("ml-5 mt-0.5 space-y-1 text-[13px]", part.status === "failed" ? "text-(--theme-error)" : "theme-muted-text"),
281
+ children: [actions.length > 0 && /* @__PURE__ */ jsxs("ul", {
282
+ className: "space-y-0.5",
283
+ children: [actions.map((a, i) => /* @__PURE__ */ jsx("li", { children: a }, i)), part.status !== "running" && /* @__PURE__ */ jsx("li", { children: outcome })]
284
+ }), part.report && /* @__PURE__ */ jsx("div", {
285
+ className: "border-l-2 theme-border pl-3 text-sm theme-muted-text",
286
+ children: /* @__PURE__ */ jsx(Markdown, { children: part.report })
287
+ })]
288
+ }), !expanded && /* @__PURE__ */ jsx("div", {
289
+ className: cx("ml-5 mt-0.5 text-[13px]", part.status === "failed" ? "text-(--theme-error)" : "theme-muted-text"),
290
+ children: outcome
286
291
  })]
287
292
  });
288
293
  }
289
294
  function ConfirmApproval({ part, onAnswer }) {
290
295
  const { strings } = useChatConfig();
296
+ const { common } = useStrings();
291
297
  const t = strings.agentTranscript;
292
298
  const [feedback, setFeedback] = useState(null);
293
299
  const answer = (a) => onAnswer?.(part.id, a);
@@ -318,7 +324,7 @@ function ConfirmApproval({ part, onAnswer }) {
318
324
  kind: "confirm",
319
325
  allowed: true
320
326
  }),
321
- className: "px-3 py-1 text-xs font-medium rounded-full bg-(--theme-element) text-(--theme-element-text)",
327
+ className: "px-3 py-1 text-xs font-medium rounded-full bg-(--theme-accent) text-(--theme-accent-text)",
322
328
  children: allowLabel
323
329
  }),
324
330
  part.canAllowDirectory !== false && /* @__PURE__ */ jsx("button", {
@@ -353,7 +359,7 @@ function ConfirmApproval({ part, onAnswer }) {
353
359
  value: feedback,
354
360
  onChange: (e) => setFeedback(e.target.value),
355
361
  placeholder: t.feedbackPlaceholder,
356
- className: "flex-1 text-xs rounded-md border theme-border bg-(--theme-input-bg) px-2 py-1"
362
+ className: cx(fieldBox({ size: "sm" }), "flex-1")
357
363
  }), /* @__PURE__ */ jsx("button", {
358
364
  type: "button",
359
365
  disabled: !feedback.trim(),
@@ -362,14 +368,15 @@ function ConfirmApproval({ part, onAnswer }) {
362
368
  allowed: false,
363
369
  denyMessage: feedback.trim()
364
370
  }),
365
- className: "px-3 py-1 text-xs font-medium rounded-full bg-(--theme-element) text-(--theme-element-text) disabled:opacity-50",
366
- children: t.send
371
+ className: "px-3 py-1 text-xs font-medium rounded-full bg-(--theme-accent) text-(--theme-accent-text) disabled:opacity-50",
372
+ children: common.send
367
373
  })]
368
374
  })
369
375
  ] });
370
376
  }
371
377
  function AskApproval({ part, onAnswer }) {
372
378
  const { strings } = useChatConfig();
379
+ const { common } = useStrings();
373
380
  const t = strings.agentTranscript;
374
381
  const [own, setOwn] = useState(null);
375
382
  const answer = (text) => onAnswer?.(part.id, {
@@ -415,13 +422,13 @@ function AskApproval({ part, onAnswer }) {
415
422
  children: [/* @__PURE__ */ jsx("input", {
416
423
  value: own,
417
424
  onChange: (e) => setOwn(e.target.value),
418
- className: "flex-1 text-xs rounded-md border theme-border bg-(--theme-input-bg) px-2 py-1"
425
+ className: cx(fieldBox({ size: "sm" }), "flex-1")
419
426
  }), /* @__PURE__ */ jsx("button", {
420
427
  type: "button",
421
428
  disabled: !own.trim(),
422
429
  onClick: () => answer(own.trim()),
423
- className: "px-3 py-1 text-xs font-medium rounded-full bg-(--theme-element) text-(--theme-element-text) disabled:opacity-50",
424
- children: t.send
430
+ className: "px-3 py-1 text-xs font-medium rounded-full bg-(--theme-accent) text-(--theme-accent-text) disabled:opacity-50",
431
+ children: common.send
425
432
  })]
426
433
  })] });
427
434
  }
@@ -436,11 +443,11 @@ function ApprovalBlock({ part, onApprovalAnswer }) {
436
443
  children: part.question
437
444
  }), /* @__PURE__ */ jsxs("div", {
438
445
  className: "flex items-center gap-2",
439
- children: [/* @__PURE__ */ jsx(FaCheck, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ jsxs("span", { children: [t.answered, part.answer ? `: ${part.answer}` : ""] })]
446
+ children: [/* @__PURE__ */ jsx(CheckIcon, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ jsxs("span", { children: [t.answered, part.answer ? `: ${part.answer}` : ""] })]
440
447
  })]
441
448
  });
442
449
  return /* @__PURE__ */ jsxs("div", {
443
- className: "my-1.5 rounded-lg border border-(--theme-element) p-3 space-y-2",
450
+ className: "my-1.5 rounded-lg border border-(--theme-accent) p-3 space-y-2",
444
451
  "data-testid": "approval-part",
445
452
  children: [(part.header || part.toolName) && /* @__PURE__ */ jsx("div", {
446
453
  className: "text-xs font-semibold",
@@ -461,7 +468,7 @@ function PlanApproval({ part }) {
461
468
  className: "text-xs theme-muted-text",
462
469
  children: t.planPending
463
470
  }), part.plan && /* @__PURE__ */ jsx("div", {
464
- className: "prose prose-sm max-w-none rounded-md bg-(--theme-muted-panel-bg) p-2 text-(--theme-panel)",
471
+ className: "prose prose-sm max-w-none rounded-md bg-(--theme-muted-panel-bg) p-2 text-(--theme-app)",
465
472
  children: /* @__PURE__ */ jsx(Markdown, {
466
473
  isStreaming: false,
467
474
  children: part.plan
@@ -480,7 +487,7 @@ function TodoSnapshotBlock({ part }) {
480
487
  }), /* @__PURE__ */ jsx("ul", {
481
488
  className: "space-y-0.5 text-sm",
482
489
  children: part.todos.map((todo) => /* @__PURE__ */ jsxs("li", {
483
- className: clsx("flex items-start gap-2", todo.status === "completed" && "line-through theme-muted-text", todo.status === "in_progress" && "font-semibold"),
490
+ className: cx("flex items-start gap-2", todo.status === "completed" && "line-through theme-muted-text", todo.status === "in_progress" && "font-semibold"),
484
491
  children: [/* @__PURE__ */ jsx("span", {
485
492
  className: "select-none font-mono",
486
493
  children: todo.status === "completed" ? "✔" : todo.status === "in_progress" ? "■" : "□"
@@ -490,43 +497,32 @@ function TodoSnapshotBlock({ part }) {
490
497
  });
491
498
  }
492
499
  function NoticeBlock({ part }) {
493
- const [expanded, setExpanded] = useState(false);
494
500
  if (part.kind === "notice") {
495
501
  if (!part.detail) return /* @__PURE__ */ jsx("div", {
496
502
  className: "my-1.5 whitespace-pre-wrap text-[13px] theme-muted-text",
497
503
  "data-testid": "notice-part",
498
504
  children: part.text
499
505
  });
500
- return /* @__PURE__ */ jsxs("div", {
506
+ return /* @__PURE__ */ jsx("div", {
501
507
  className: "my-1.5",
502
508
  "data-testid": "notice-part",
503
- children: [/* @__PURE__ */ jsxs("button", {
504
- type: "button",
505
- onClick: () => setExpanded((v) => !v),
506
- "aria-expanded": expanded,
507
- className: "flex items-start gap-1.5 text-left text-[13px] theme-muted-text hover:theme-text",
508
- children: [/* @__PURE__ */ jsx("span", {
509
+ children: /* @__PURE__ */ jsx(Disclosure, {
510
+ summary: /* @__PURE__ */ jsx("span", {
509
511
  className: "min-w-0 flex-1 whitespace-pre-wrap",
510
512
  children: part.text
511
- }), /* @__PURE__ */ jsx(LuChevronRight, { className: clsx("mt-0.5 h-3.5 w-3.5 shrink-0 transition-transform", expanded && "rotate-90") })]
512
- }), expanded && /* @__PURE__ */ jsx("div", {
513
- className: "ml-4 mt-1 border-l-2 theme-border pl-3 text-sm theme-muted-text",
513
+ }),
514
+ summaryClassName: "w-full text-[13px] theme-muted-text hover:theme-text",
515
+ panelClassName: "ml-4 mt-1 border-l-2 theme-border pl-3 text-sm theme-muted-text",
514
516
  children: /* @__PURE__ */ jsx(Markdown, { children: part.detail })
515
- })]
517
+ })
516
518
  });
517
519
  }
518
520
  return /* @__PURE__ */ jsx("div", {
519
- className: clsx("my-1 text-xs rounded-md px-2.5 py-1.5", part.kind === "error" ? "bg-red-500/10 text-red-700" : "bg-yellow-500/10 text-yellow-700"),
521
+ className: cx("my-1 text-xs rounded-md px-2.5 py-1.5", part.kind === "error" ? "bg-red-500/10 text-red-700" : "bg-yellow-500/10 text-yellow-700"),
520
522
  "data-testid": `${part.kind}-part`,
521
523
  children: part.text
522
524
  });
523
525
  }
524
- function formatThinkingDuration(ms) {
525
- const s = Math.round(ms / 1e3);
526
- if (s < 1) return "<1s";
527
- if (s < 60) return `${s}s`;
528
- return `${Math.floor(s / 60)}m ${s % 60}s`;
529
- }
530
526
  /** The TUI's thought, drawn like a chat reply's: while it streams its label
531
527
  * shimmers over the latest lines, then it folds to the label and opens in
532
528
  * place on request. */
@@ -534,7 +530,7 @@ function ReasoningBlock({ part, isStreaming }) {
534
530
  const { strings } = useChatConfig();
535
531
  const t = strings.thinking;
536
532
  const [expanded, setExpanded] = useState(false);
537
- const label = thinkingHeading(part.text) || (part.durationMs ? t.thoughtFor(formatThinkingDuration(part.durationMs)) : t.label);
533
+ const label = thinkingHeading(part.text) || (part.durationMs ? t.thoughtFor(formatDuration(part.durationMs)) : t.label);
538
534
  const hasBody = part.text.trim() !== "";
539
535
  const markdown = /* @__PURE__ */ jsx(Markdown, {
540
536
  isStreaming: isStreaming ?? false,
@@ -560,22 +556,23 @@ function ReasoningBlock({ part, isStreaming }) {
560
556
  "data-testid": "reasoning-part",
561
557
  children: label
562
558
  });
563
- return /* @__PURE__ */ jsxs("div", {
559
+ return /* @__PURE__ */ jsx("div", {
564
560
  className: "py-1.5",
565
561
  "data-testid": "reasoning-part",
566
- children: [/* @__PURE__ */ jsx(ReasoningToggle, {
562
+ children: /* @__PURE__ */ jsx(Reasoning, {
563
+ label,
567
564
  open: expanded,
568
- onToggle: () => setExpanded((v) => !v),
569
- children: label
570
- }), expanded && /* @__PURE__ */ jsx(ReasoningBody, { children: /* @__PURE__ */ jsx("div", {
571
- "data-testid": "reasoning-body",
572
- children: markdown
573
- }) })]
565
+ onOpenChange: setExpanded,
566
+ children: /* @__PURE__ */ jsx("div", {
567
+ "data-testid": "reasoning-body",
568
+ children: markdown
569
+ })
570
+ })
574
571
  });
575
572
  }
576
573
  function TextBlock({ part, isStreaming }) {
577
574
  return /* @__PURE__ */ jsx("div", {
578
- className: clsx(chatProseClasses, "[&:not(:first-child)]:mt-4"),
575
+ className: cx(chatProseClasses, "[&:not(:first-child)]:mt-4"),
579
576
  children: /* @__PURE__ */ jsx(Markdown, {
580
577
  isStreaming: isStreaming ?? false,
581
578
  children: part.text
@@ -682,35 +679,28 @@ function buildRenderItems(parts) {
682
679
  return items;
683
680
  }
684
681
  function RollupGroup({ members, message }) {
685
- const [expanded, setExpanded] = useState(false);
686
- const sentence = rollupSentence(members.flatMap((m) => m.part.kind === "tool_call" ? [m.part.name] : []));
687
- return /* @__PURE__ */ jsxs("div", {
682
+ const { strings } = useChatConfig();
683
+ const sentence = rollupSentence(members.flatMap((m) => m.part.kind === "tool_call" ? [m.part.name] : []), strings.tools);
684
+ return /* @__PURE__ */ jsx("div", {
688
685
  className: "py-1.5 text-sm",
689
686
  "data-testid": "tool-rollup",
690
- children: [/* @__PURE__ */ jsxs("button", {
691
- type: "button",
692
- onClick: () => setExpanded((v) => !v),
693
- "aria-expanded": expanded,
694
- className: "flex min-h-6 items-center gap-2 w-full text-left",
695
- children: [
696
- /* @__PURE__ */ jsx("span", {
697
- className: "text-green-600 leading-none",
698
- "aria-hidden": "true",
699
- children: "●"
700
- }),
701
- /* @__PURE__ */ jsx("span", {
702
- className: "font-mono text-[13px] theme-muted-text min-w-0 truncate",
703
- children: sentence
704
- }),
705
- /* @__PURE__ */ jsx(LuChevronRight, { className: clsx("w-3.5 h-3.5 shrink-0 theme-muted-text transition-transform", expanded && "rotate-90") })
706
- ]
707
- }), /* @__PURE__ */ jsx("div", {
708
- className: clsx("ml-1.5 mt-0.5 rounded-md", expanded ? "bg-(--theme-muted-panel-bg)/40 px-2" : "hidden"),
687
+ children: /* @__PURE__ */ jsx(Disclosure, {
688
+ keepMounted: true,
689
+ summaryClassName: rowSummaryClasses,
690
+ summary: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
691
+ className: "text-(--theme-success) leading-none",
692
+ "aria-hidden": "true",
693
+ children: "●"
694
+ }), /* @__PURE__ */ jsx("span", {
695
+ className: "font-mono text-[13px] theme-muted-text min-w-0 truncate",
696
+ children: sentence
697
+ })] }),
698
+ panelClassName: "ml-1.5 mt-0.5 rounded-md bg-(--theme-muted-panel-bg)/40 px-2",
709
699
  children: members.map((m) => /* @__PURE__ */ jsx(PartDispatch, {
710
700
  part: m.part,
711
701
  message
712
702
  }, m.index))
713
- })]
703
+ })
714
704
  });
715
705
  }
716
706
  function AgentMessageParts({ message, isStreaming, onApprovalAnswer }) {