@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,7 +1,6 @@
1
- import { BiSolidTrashAlt } from "../../icons/bi/BiSolidTrashAlt.js";
2
- import { FaCloudDownloadAlt } from "../../icons/fa/FaCloudDownloadAlt.js";
3
- import { FaEdit } from "../../icons/fa/FaEdit.js";
4
- import { PiShareBold } from "../../icons/pi/PiShareBold.js";
1
+ import { DownloadIcon, RenameIcon, ShareIcon, TrashIcon } from "../../icons.js";
2
+ import { toast } from "../../components/Toast.js";
3
+ import { useStrings } from "../../components/Provider.js";
5
4
  import { useContextMenu } from "../../components/ContextMenu.js";
6
5
  import { useChatConfig } from "../core/config.js";
7
6
  import { useChat } from "../core/ChatProvider.js";
@@ -37,19 +36,20 @@ function groupConversationsByDate(conversations) {
37
36
  * conversations. Render `overlays` once beside the list. */
38
37
  function useConversationActions() {
39
38
  const { strings } = useChatConfig();
39
+ const { common } = useStrings();
40
40
  const t = strings.sidebar;
41
- const { adapter, notify, deleteConversation, updateConversationTitle } = useChat();
41
+ const { adapter, deleteConversation, updateConversationTitle } = useChat();
42
42
  const { openMenu, contextMenu } = useContextMenu();
43
43
  const [sharing, setSharing] = useState(null);
44
44
  const { requestDelete, requestRename, dialogs } = useRowDialogs({
45
45
  strings: {
46
46
  deleteTitle: t.deleteTitle,
47
47
  deleteBody: () => t.deleteBody,
48
- deleteAction: t.deleteAction,
48
+ deleteAction: common.delete,
49
49
  renameTitle: t.renameTitle,
50
50
  renameLabel: t.renameLabel,
51
51
  renamePlaceholder: t.renamePlaceholder,
52
- renameAction: t.renameAction
52
+ renameAction: common.rename
53
53
  },
54
54
  nameOf: (conv) => conv.title || t.untitled,
55
55
  onDelete: (conv) => deleteConversation(conv.id),
@@ -60,28 +60,28 @@ function useConversationActions() {
60
60
  const conversation = await adapter.conversations.get(id);
61
61
  downloadText(exportFilename(conversation.title), conversationToMarkdown(conversation));
62
62
  } catch {
63
- notify.error(strings.chrome.exportError);
63
+ toast.error(strings.chrome.exportError);
64
64
  }
65
65
  };
66
66
  const menuItems = (conv) => [
67
67
  {
68
- label: t.rename,
69
- icon: /* @__PURE__ */ jsx(FaEdit, {}),
68
+ label: common.rename,
69
+ icon: /* @__PURE__ */ jsx(RenameIcon, {}),
70
70
  onClick: () => requestRename(conv)
71
71
  },
72
72
  ...adapter.sharing && conv.isOwner !== false ? [{
73
- label: t.share,
74
- icon: /* @__PURE__ */ jsx(PiShareBold, {}),
73
+ label: common.share,
74
+ icon: /* @__PURE__ */ jsx(ShareIcon, {}),
75
75
  onClick: () => setSharing(conv.id)
76
76
  }] : [],
77
77
  {
78
- label: strings.chrome.download,
79
- icon: /* @__PURE__ */ jsx(FaCloudDownloadAlt, {}),
78
+ label: common.download,
79
+ icon: /* @__PURE__ */ jsx(DownloadIcon, {}),
80
80
  onClick: () => void download(conv.id)
81
81
  },
82
82
  {
83
- label: t.delete,
84
- icon: /* @__PURE__ */ jsx(BiSolidTrashAlt, {}),
83
+ label: common.delete,
84
+ icon: /* @__PURE__ */ jsx(TrashIcon, {}),
85
85
  destructive: true,
86
86
  onClick: () => requestDelete(conv)
87
87
  }
@@ -1,13 +1,12 @@
1
1
  import { type ReactNode } from 'react';
2
2
  import type { ChatAdapter } from '../adapter/types.js';
3
- import type { AttachmentMeta, ChatModel, ChatNavigation, ChatNotify, ChatUser, Conversation, ConversationSummary, ChatMessage as Message, MessagePart, ProviderInfo, ProviderIssue, UnreachableSession } from '../types.js';
3
+ import type { AttachmentMeta, ChatModel, ChatNavigation, ChatUser, Conversation, ConversationSummary, ChatMessage as Message, MessagePart, ProviderInfo, ProviderIssue, UnreachableSession } from '../types.js';
4
4
  import { type ChatUIConfig } from './config.js';
5
5
  import { type SidebarPresentation, type SidebarState } from './sidebarState.js';
6
6
  interface ChatContextValue {
7
7
  adapter: ChatAdapter;
8
8
  currentUser: ChatUser;
9
9
  navigation: ChatNavigation;
10
- notify: ChatNotify;
11
10
  activeConversationId: string | null;
12
11
  conversations: ConversationSummary[];
13
12
  currentConversation: Conversation | null;
@@ -63,7 +62,6 @@ export interface ChatProviderProps {
63
62
  adapter: ChatAdapter;
64
63
  currentUser: ChatUser;
65
64
  navigation: ChatNavigation;
66
- notify: ChatNotify;
67
65
  activeConversationId?: string | null;
68
66
  config?: ChatUIConfig;
69
67
  /** Owns the sidebar's state. Omit to leave it to the reader, remembered
@@ -76,5 +74,5 @@ export interface ChatProviderProps {
76
74
  onDrawerOpenChange?: (open: boolean) => void;
77
75
  children: ReactNode;
78
76
  }
79
- export declare function ChatProvider({ adapter, currentUser, navigation, notify, activeConversationId, config, sidebar: sidebarProp, onSidebarChange, drawerOpen: drawerOpenProp, onDrawerOpenChange, children, }: ChatProviderProps): import("react").JSX.Element;
77
+ export declare function ChatProvider({ adapter, currentUser, navigation, activeConversationId, config, sidebar: sidebarProp, onSidebarChange, drawerOpen: drawerOpenProp, onDrawerOpenChange, children, }: ChatProviderProps): import("react").JSX.Element;
80
78
  export {};
@@ -1,26 +1,15 @@
1
+ import { toast } from "../../components/Toast.js";
2
+ import { usePersistedState } from "../../components/Provider.js";
1
3
  import { applyPartDelta, finalizeParts, toolTurnMessages } from "./parts.js";
2
4
  import { chatReducer, initialState } from "./chatReducer.js";
3
5
  import { ChatConfigProvider, resolveChatConfig } from "./config.js";
4
6
  import { providerIssueFor } from "./providerIssues.js";
5
- import { ReportSidebarPresentationContext, readStoredSidebar, storeSidebar, useControllable } from "./sidebarState.js";
7
+ import { ReportSidebarPresentationContext, useControllable, useOwnSidebar } from "./sidebarState.js";
6
8
  import { useSSEStream } from "./useSSEStream.js";
7
9
  import { jsx } from "react/jsx-runtime";
8
10
  import { createContext, useCallback, useContext, useEffect, useMemo, useReducer, useRef, useState } from "react";
9
11
  import { DateTime } from "luxon";
10
12
  //#region src/ai/core/ChatProvider.tsx
11
- var SELECTED_MODEL_STORAGE_KEY = "aiChatSelectedModel";
12
- function readStoredModel() {
13
- try {
14
- return globalThis.localStorage?.getItem(SELECTED_MODEL_STORAGE_KEY) ?? null;
15
- } catch {
16
- return null;
17
- }
18
- }
19
- function storeSelectedModel(modelId) {
20
- try {
21
- globalThis.localStorage?.setItem(SELECTED_MODEL_STORAGE_KEY, modelId);
22
- } catch {}
23
- }
24
13
  function generateTitleFromMessage(content) {
25
14
  const cleaned = content.replace(/```[\s\S]*?```/g, "").replace(/`[^`]+`/g, "").replace(/[#*_~[\]()]/g, "").replace(/\s+/g, " ").trim();
26
15
  if (cleaned.length <= 50) return cleaned;
@@ -61,11 +50,14 @@ function useChat() {
61
50
  if (!context) throw new Error("useChat must be used within a ChatProvider");
62
51
  return context;
63
52
  }
64
- function ChatProvider({ adapter, currentUser, navigation, notify, activeConversationId = null, config, sidebar: sidebarProp, onSidebarChange, drawerOpen: drawerOpenProp, onDrawerOpenChange, children }) {
53
+ function ChatProvider({ adapter, currentUser, navigation, activeConversationId = null, config, sidebar: sidebarProp, onSidebarChange, drawerOpen: drawerOpenProp, onDrawerOpenChange, children }) {
65
54
  const [state, dispatch] = useReducer(chatReducer, initialState);
66
55
  const hasLoadedConversationsRef = useRef(false);
67
56
  const { onStreamingChunk, startStreaming, stopAnimationLoop, resetAnimationRefs, targetStreamContentRef, streamActiveRef, streamingConversationIdRef, backgroundStreamsRef, abortControllerRef } = useSSEStream(dispatch);
68
57
  const currentConversationIdRef = useRef(null);
58
+ const [storedModel, storeModel] = usePersistedState("aiChat.model", null);
59
+ const storedModelRef = useRef(storedModel);
60
+ storedModelRef.current = storedModel;
69
61
  const selectedProviderRef = useRef(state.selectedProvider);
70
62
  useEffect(() => {
71
63
  selectedProviderRef.current = state.selectedProvider;
@@ -87,14 +79,14 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
87
79
  });
88
80
  hasLoadedConversationsRef.current = true;
89
81
  } catch (error) {
90
- notify.error(errorText(error));
82
+ toast.error(errorText(error));
91
83
  } finally {
92
84
  dispatch({
93
85
  type: "SET_LOADING",
94
86
  isLoading: false
95
87
  });
96
88
  }
97
- }, [adapter, notify]);
89
+ }, [adapter]);
98
90
  const streamingToConversationRef = useRef(null);
99
91
  const loadSequenceRef = useRef(0);
100
92
  const loadConversation = useCallback(async (id) => {
@@ -115,7 +107,7 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
115
107
  type: "SET_LOADING_CONVERSATION",
116
108
  isLoadingConversation: false
117
109
  });
118
- notify.error(errorText(error));
110
+ toast.error(errorText(error));
119
111
  currentConversationIdRef.current = null;
120
112
  dispatch({
121
113
  type: "SET_CURRENT_CONVERSATION",
@@ -147,7 +139,6 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
147
139
  }
148
140
  }, [
149
141
  adapter,
150
- notify,
151
142
  resetAnimationRefs,
152
143
  streamingConversationIdRef,
153
144
  backgroundStreamsRef,
@@ -166,9 +157,9 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
166
157
  });
167
158
  hasLoadedProvidersRef.current = true;
168
159
  } catch (error) {
169
- notify.error(errorText(error));
160
+ toast.error(errorText(error));
170
161
  }
171
- }, [adapter, notify]);
162
+ }, [adapter]);
172
163
  const refreshProviders = useCallback(async () => {
173
164
  hasLoadedProvidersRef.current = false;
174
165
  await loadProviders();
@@ -190,7 +181,7 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
190
181
  });
191
182
  hasLoadedModelsRef.current = true;
192
183
  const current = selectedProviderRef.current;
193
- const stored = readStoredModel();
184
+ const stored = storedModelRef.current;
194
185
  const offers = (id) => !!id && models.some((m) => m.id === id);
195
186
  const firstUsable = models.find((model) => !providerIssueFor(providerIssues, model)) ?? models[0];
196
187
  const resolved = offers(current) ? current : offers(stored) ? stored : firstUsable?.id ?? null;
@@ -224,6 +215,7 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
224
215
  loadProviders();
225
216
  loadModels();
226
217
  }, [loadProviders, loadModels]);
218
+ const resolvedConfig = useMemo(() => resolveChatConfig(config), [config]);
227
219
  const createConversation = useCallback(async (title) => {
228
220
  try {
229
221
  const conversation = await adapter.conversations.create(title);
@@ -233,15 +225,15 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
233
225
  });
234
226
  return conversation.id;
235
227
  } catch (error) {
236
- notify.error(errorText(error));
228
+ toast.error(errorText(error));
237
229
  return null;
238
230
  }
239
- }, [adapter, notify]);
231
+ }, [adapter]);
240
232
  const deleteConversation = useCallback(async (id) => {
241
233
  try {
242
234
  await adapter.conversations.remove(id);
243
235
  } catch (error) {
244
- notify.error(errorText(error));
236
+ toast.error(errorText(error));
245
237
  return false;
246
238
  }
247
239
  dispatch({
@@ -258,7 +250,6 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
258
250
  return true;
259
251
  }, [
260
252
  adapter,
261
- notify,
262
253
  state.currentConversation,
263
254
  navigation
264
255
  ]);
@@ -268,7 +259,7 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
268
259
  if (!convId) return false;
269
260
  const MAX_QUEUED_MESSAGES = 10;
270
261
  if (pendingQueueRef.current.length >= MAX_QUEUED_MESSAGES) {
271
- notify.error(`You can queue up to ${MAX_QUEUED_MESSAGES} messages while waiting for a response`);
262
+ toast.error(`You can queue up to ${MAX_QUEUED_MESSAGES} messages while waiting for a response`);
272
263
  return false;
273
264
  }
274
265
  const queuedId = crypto.randomUUID();
@@ -294,7 +285,7 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
294
285
  }
295
286
  const modelString = state.selectedProvider;
296
287
  if (!isSelectedModelAvailable || !modelString) {
297
- notify.error("Please select a provider first");
288
+ toast.error(resolvedConfig.strings.modelPicker.selectFirst);
298
289
  return false;
299
290
  }
300
291
  isSendingRef.current = true;
@@ -539,7 +530,7 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
539
530
  }
540
531
  }, [
541
532
  adapter,
542
- notify,
533
+ resolvedConfig,
543
534
  isSelectedModelAvailable,
544
535
  state.selectedProvider,
545
536
  state.selectedAllocation,
@@ -563,7 +554,7 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
563
554
  try {
564
555
  await adapter.conversations.rename(id, title);
565
556
  } catch (error) {
566
- notify.error(errorText(error));
557
+ toast.error(errorText(error));
567
558
  return false;
568
559
  }
569
560
  dispatch({
@@ -583,17 +574,16 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
583
574
  return true;
584
575
  }, [
585
576
  adapter,
586
- notify,
587
577
  state.conversations,
588
578
  state.currentConversation
589
579
  ]);
590
580
  const setSelectedProvider = useCallback((providerId) => {
591
- if (providerId && state.models.some((m) => m.id === providerId)) storeSelectedModel(providerId);
581
+ if (providerId && state.models.some((m) => m.id === providerId)) storeModel(providerId);
592
582
  dispatch({
593
583
  type: "SET_SELECTED_PROVIDER",
594
584
  providerId
595
585
  });
596
- }, [state.models]);
586
+ }, [state.models, storeModel]);
597
587
  const setSelectedAllocation = useCallback((allocation) => {
598
588
  dispatch({
599
589
  type: "SET_SELECTED_ALLOCATION",
@@ -685,8 +675,8 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
685
675
  state.currentConversation?.messages,
686
676
  state.thinkingStartTime
687
677
  ]);
688
- const [sidebar, setSidebar, sidebarRef] = useControllable(sidebarProp, readStoredSidebar, onSidebarChange, storeSidebar);
689
- const [drawerOpen, setDrawerOpen, drawerOpenRef] = useControllable(drawerOpenProp, () => false, onDrawerOpenChange);
678
+ const [sidebar, setSidebar, sidebarRef] = useControllable(sidebarProp, useOwnSidebar(), onSidebarChange);
679
+ const [drawerOpen, setDrawerOpen, drawerOpenRef] = useControllable(drawerOpenProp, useState(false), onDrawerOpenChange);
690
680
  const [sidebarPresentation, setSidebarPresentation] = useState("inline");
691
681
  const presentationRef = useRef(sidebarPresentation);
692
682
  presentationRef.current = sidebarPresentation;
@@ -740,12 +730,10 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
740
730
  conversation: null
741
731
  });
742
732
  }, [resetAnimationRefs, streamingConversationIdRef]);
743
- const resolvedConfig = useMemo(() => resolveChatConfig(config), [config]);
744
733
  const value = useMemo(() => ({
745
734
  adapter,
746
735
  currentUser,
747
736
  navigation,
748
- notify,
749
737
  activeConversationId,
750
738
  conversations: state.conversations,
751
739
  currentConversation: state.currentConversation,
@@ -796,7 +784,6 @@ function ChatProvider({ adapter, currentUser, navigation, notify, activeConversa
796
784
  adapter,
797
785
  currentUser,
798
786
  navigation,
799
- notify,
800
787
  activeConversationId,
801
788
  state,
802
789
  sidebar,
@@ -1,13 +1,13 @@
1
- import { DateTime } from "luxon";
1
+ import { formatDateTime } from "../../format.js";
2
2
  //#region src/ai/core/exportConversation.ts
3
3
  function conversationToMarkdown(conversation) {
4
4
  const lines = [];
5
5
  lines.push(`# ${conversation.title?.trim() || "Conversation"}`);
6
6
  if (conversation.createdAt) {
7
- const dt = DateTime.fromISO(conversation.createdAt);
8
- if (dt.isValid) {
7
+ const started = formatDateTime(conversation.createdAt);
8
+ if (started) {
9
9
  lines.push("");
10
- lines.push(`> Started ${dt.toLocaleString(DateTime.DATETIME_MED)}`);
10
+ lines.push(`> Started ${started}`);
11
11
  }
12
12
  }
13
13
  for (const message of conversation.messages) {
@@ -4,16 +4,18 @@ export type SidebarState = 'expanded' | 'collapsed' | 'hidden';
4
4
  /** How the layout shows the list right now: as a column beside the thread,
5
5
  * or as a drawer over it. */
6
6
  export type SidebarPresentation = 'inline' | 'drawer';
7
- export declare function readStoredSidebar(): SidebarState;
8
- export declare function storeSidebar(state: SidebarState): void;
7
+ /** The reader's own choice between the column and the rail, remembered through
8
+ * the host's persisted state. Hiding the list is the host's call, so it lasts
9
+ * only for the page that made it. */
10
+ export declare function useOwnSidebar(): readonly [SidebarState, (state: SidebarState) => void];
9
11
  /** A value the host may own through a prop. Without the prop the provider
10
- * keeps it; either way the change callback hears every change. The ref
11
- * reads the latest value from callbacks that should not re-create. */
12
- export declare function useControllable<T>(controlled: T | undefined, initial: () => T, onChange: ((value: T) => void) | undefined, remember?: (value: T) => void): readonly [T, (next: T) => void, import("react").RefObject<{
12
+ * keeps it in `own`; either way the change callback hears every change. The
13
+ * ref reads the latest value from callbacks that should not re-create. */
14
+ export declare function useControllable<T>(controlled: T | undefined, own: readonly [T, (value: T) => void], onChange: ((value: T) => void) | undefined): readonly [T, (next: T) => void, import("react").RefObject<{
13
15
  value: T;
14
16
  controlled: boolean;
15
17
  onChange: ((value: T) => void) | undefined;
16
- remember: ((value: T) => void) | undefined;
18
+ setOwn: (value: T) => void;
17
19
  }>];
18
20
  export declare const ReportSidebarPresentationContext: import("react").Context<(presentation: SidebarPresentation) => void>;
19
21
  export declare function useReportSidebarPresentation(): (presentation: SidebarPresentation) => void;
@@ -1,49 +1,42 @@
1
+ import { usePersistedState } from "../../components/Provider.js";
1
2
  import { createContext, useCallback, useContext, useRef, useState } from "react";
2
3
  //#region src/ai/core/sidebarState.ts
3
- var SIDEBAR_STORAGE_KEY = "aiChatSidebar";
4
- var LEGACY_COLLAPSED_STORAGE_KEY = "aiChatSidebarCollapsed";
5
- function readStoredSidebar() {
6
- try {
7
- const stored = globalThis.localStorage?.getItem(SIDEBAR_STORAGE_KEY);
8
- if (stored === "expanded" || stored === "collapsed") return stored;
9
- return globalThis.localStorage?.getItem(LEGACY_COLLAPSED_STORAGE_KEY) === "1" ? "collapsed" : "expanded";
10
- } catch {
11
- return "expanded";
12
- }
13
- }
14
- function storeSidebar(state) {
15
- if (state === "hidden") return;
16
- try {
17
- globalThis.localStorage?.setItem(SIDEBAR_STORAGE_KEY, state);
18
- } catch {}
4
+ /** The reader's own choice between the column and the rail, remembered through
5
+ * the host's persisted state. Hiding the list is the host's call, so it lasts
6
+ * only for the page that made it. */
7
+ function useOwnSidebar() {
8
+ const [remembered, remember] = usePersistedState("aiChat.sidebar", "expanded");
9
+ const [hidden, setHidden] = useState(false);
10
+ const set = useCallback((state) => {
11
+ setHidden(state === "hidden");
12
+ if (state !== "hidden") remember(state);
13
+ }, [remember]);
14
+ return [hidden ? "hidden" : remembered === "collapsed" ? "collapsed" : "expanded", set];
19
15
  }
20
16
  /** A value the host may own through a prop. Without the prop the provider
21
- * keeps it; either way the change callback hears every change. The ref
22
- * reads the latest value from callbacks that should not re-create. */
23
- function useControllable(controlled, initial, onChange, remember) {
24
- const [own, setOwn] = useState(initial);
25
- const value = controlled === void 0 ? own : controlled;
17
+ * keeps it in `own`; either way the change callback hears every change. The
18
+ * ref reads the latest value from callbacks that should not re-create. */
19
+ function useControllable(controlled, own, onChange) {
20
+ const [ownValue, setOwn] = own;
21
+ const value = controlled === void 0 ? ownValue : controlled;
26
22
  const latest = useRef({
27
23
  value,
28
24
  controlled: controlled !== void 0,
29
25
  onChange,
30
- remember
26
+ setOwn
31
27
  });
32
28
  latest.current = {
33
29
  value,
34
30
  controlled: controlled !== void 0,
35
31
  onChange,
36
- remember
32
+ setOwn
37
33
  };
38
34
  return [
39
35
  value,
40
36
  useCallback((next) => {
41
37
  const l = latest.current;
42
38
  if (Object.is(next, l.value)) return;
43
- if (!l.controlled) {
44
- setOwn(next);
45
- l.remember?.(next);
46
- }
39
+ if (!l.controlled) l.setOwn(next);
47
40
  l.onChange?.(next);
48
41
  }, []),
49
42
  latest
@@ -54,4 +47,4 @@ function useReportSidebarPresentation() {
54
47
  return useContext(ReportSidebarPresentationContext);
55
48
  }
56
49
  //#endregion
57
- export { ReportSidebarPresentationContext, readStoredSidebar, storeSidebar, useControllable, useReportSidebarPresentation };
50
+ export { ReportSidebarPresentationContext, useControllable, useOwnSidebar, useReportSidebarPresentation };
@@ -1,3 +1,6 @@
1
+ import { toast } from "../../components/Toast.js";
2
+ import { useStrings } from "../../components/Provider.js";
3
+ import { useChatConfig } from "./config.js";
1
4
  import { useChat } from "./ChatProvider.js";
2
5
  import { isMac } from "../utils.js";
3
6
  import { FOCUS_SIDEBAR_SEARCH_EVENT } from "./events.js";
@@ -11,7 +14,9 @@ function lastUserMessage(messages) {
11
14
  }
12
15
  function useKeyboardShortcuts(options = {}) {
13
16
  const { enabled = true } = options;
14
- const { currentConversation, isStreaming, stopStreaming, clearCurrentConversation, navigation, notify } = useChat();
17
+ const { currentConversation, isStreaming, stopStreaming, clearCurrentConversation, navigation } = useChat();
18
+ const { common } = useStrings();
19
+ const { chrome: t } = useChatConfig().strings;
15
20
  const getLastAssistantMessage = useCallback(() => lastAssistantContent(currentConversation?.messages ?? []), [currentConversation?.messages]);
16
21
  const getLastUserMessage = useCallback(() => lastUserMessage(currentConversation?.messages ?? []), [currentConversation?.messages]);
17
22
  const handleNewConversation = useCallback(() => {
@@ -22,12 +27,16 @@ function useKeyboardShortcuts(options = {}) {
22
27
  const content = getLastAssistantMessage();
23
28
  if (content) try {
24
29
  await navigator.clipboard.writeText(content);
25
- notify.success("Copied to clipboard");
30
+ toast.success(common.copiedToClipboard);
26
31
  } catch {
27
- notify.error("Failed to copy");
32
+ toast.error(common.copyFailed);
28
33
  }
29
- else notify.info("No response to copy");
30
- }, [getLastAssistantMessage, notify]);
34
+ else toast.info(t.noResponseToCopy);
35
+ }, [
36
+ getLastAssistantMessage,
37
+ common,
38
+ t
39
+ ]);
31
40
  const handleStopGeneration = useCallback(() => {
32
41
  if (isStreaming) stopStreaming();
33
42
  }, [isStreaming, stopStreaming]);
@@ -1,10 +1,9 @@
1
- export { durationToAbsHumanDuration } from '../duration.js';
2
1
  export * from './adapter/types.js';
3
2
  export * from './agent/index.js';
4
3
  export { default as AllocationSelector } from './components/AllocationSelector.js';
5
4
  export { default as AttachmentManager } from './components/AttachmentManager.js';
6
5
  export { type Attachment, type AttachmentUploadHandle, default as AttachmentUpload, } from './components/AttachmentUpload.js';
7
- export { compactCount, default as ActivityLine, formatElapsed, } from './components/agent/ActivityLine.js';
6
+ export { default as ActivityLine } from './components/agent/ActivityLine.js';
8
7
  export { ApprovalBlock, default as AgentMessageParts, } from './components/agent/AgentMessageParts.js';
9
8
  export { default as PermissionPicker } from './components/agent/PermissionPicker.js';
10
9
  export { default as BlockedGroupBanner } from './components/BlockedGroupBanner.js';
@@ -40,7 +39,7 @@ export { default as useDragDrop } from './core/useDragDrop.js';
40
39
  export { useKeyboardShortcuts } from './core/useKeyboardShortcuts.js';
41
40
  export { type ChatStrings, defaultChatStrings } from './strings.js';
42
41
  export * from './types.js';
43
- export { ConversationSidebar, type ConversationSidebarGroup, useResizableSidebarWidth, } from './ui/ConversationSidebar.js';
42
+ export { ConversationSidebar, type ConversationSidebarGroup, sidebarDrawerProps, } from './ui/ConversationSidebar.js';
44
43
  export { NoticeBar, NoticeCard, type NoticeTone, OutputCard } from './ui/Notice.js';
45
- export { RenameDialog, type RowDialogStrings, SidebarDrawer, SidebarGroupHeading, SidebarPanel, SidebarPlaceholder, SidebarRailItem, SidebarRow, SidebarRowTitle, SidebarToggle, useRowDialogs, } from './ui/sidebar.js';
46
- export { formatFileSize, isMac, isOrgModel } from './utils.js';
44
+ export { RenameDialog, type RowDialogStrings, SidebarGroupHeading, SidebarPanel, SidebarRailItem, SidebarRow, SidebarRowTitle, SidebarToggle, useRowDialogs, } from './ui/sidebar.js';
45
+ export { isMac, isOrgModel } from './utils.js';
package/dist/ai/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { durationToAbsHumanDuration } from "../duration.js";
2
1
  import { ChatAdapterError } from "./adapter/types.js";
3
2
  import { classifyPseudoUserMessage } from "./agent/classifier.js";
4
- import { AGENT_COLOR_NAMES, agentColorHex, bashExitCode, clip, fullToolArgs, isGroupableTool, plural, resultFailed, rollupSentence, sanitizeLabel, sanitizePanelText, summarizeToolArgs, toolHeaderFor, toolSummary } from "./agent/toolfmt.js";
3
+ import { defaultToolStrings } from "./agent/toolStrings.js";
4
+ import { AGENT_COLOR_NAMES, agentColorHex, bashExitCode, clip, fullToolArgs, isGroupableTool, resultFailed, rollupSentence, sanitizeLabel, sanitizePanelText, summarizeToolArgs, toolHeaderFor, toolSummary } from "./agent/toolfmt.js";
5
5
  import { MAX_EDIT_DIFF_LINES, MAX_WRITE_DIFF_LINES, computeEditDiff, computeWriteRows, editSummary, isEditDiffTool, lineDelta, parseEditArgs, wordEmphasisRanges } from "./agent/diff.js";
6
6
  import { languageForPath, tokenizeDiffLines } from "./agent/diffHighlight.js";
7
7
  import { DEFAULT_PERMISSION_MODE, NAMED_PERMISSION_MODES, clampPermissionMode, isNamedPermissionMode, permissionModesUpTo } from "./agent/permissions.js";
@@ -12,11 +12,11 @@ import { defaultChatStrings } from "./strings.js";
12
12
  import { resolveChatConfig, useChatConfig } from "./core/config.js";
13
13
  import { providerIssueFor } from "./core/providerIssues.js";
14
14
  import { ChatProvider, useChat } from "./core/ChatProvider.js";
15
- import { formatFileSize, isMac, isOrgModel } from "./utils.js";
15
+ import { isMac, isOrgModel } from "./utils.js";
16
16
  import AllocationSelector from "./components/AllocationSelector.js";
17
17
  import AttachmentManager from "./components/AttachmentManager.js";
18
18
  import AttachmentUpload from "./components/AttachmentUpload.js";
19
- import ActivityLine, { compactCount, formatElapsed } from "./components/agent/ActivityLine.js";
19
+ import ActivityLine from "./components/agent/ActivityLine.js";
20
20
  import AgentMessageParts, { ApprovalBlock } from "./components/agent/AgentMessageParts.js";
21
21
  import PermissionPicker from "./components/agent/PermissionPicker.js";
22
22
  import ModelSelector, { getProviderKeyFromModelId } from "./components/ModelSelector.js";
@@ -36,8 +36,8 @@ import ChatEmptyState from "./components/ChatEmptyState.js";
36
36
  import { FOCUS_SIDEBAR_SEARCH_EVENT } from "./core/events.js";
37
37
  import { useKeyboardShortcuts } from "./core/useKeyboardShortcuts.js";
38
38
  import { KeyboardShortcutsProvider } from "./core/KeyboardShortcutsProvider.js";
39
- import { RenameDialog, SidebarDrawer, SidebarGroupHeading, SidebarPanel, SidebarPlaceholder, SidebarRailItem, SidebarRow, SidebarRowTitle, SidebarToggle, useRowDialogs } from "./ui/sidebar.js";
40
- import { ConversationSidebar, useResizableSidebarWidth } from "./ui/ConversationSidebar.js";
39
+ import { RenameDialog, SidebarGroupHeading, SidebarPanel, SidebarRailItem, SidebarRow, SidebarRowTitle, SidebarToggle, useRowDialogs } from "./ui/sidebar.js";
40
+ import { ConversationSidebar, sidebarDrawerProps } from "./ui/ConversationSidebar.js";
41
41
  import ShareDialog, { ShareButton } from "./components/ShareDialog.js";
42
42
  import { groupConversationsByDate, useConversationActions } from "./components/conversationActions.js";
43
43
  import ChatSidebar from "./components/ChatSidebar.js";
@@ -45,4 +45,4 @@ import ChatLayout, { CHAT_COLUMN_SCOPE, ConversationLayout, DRAWER_BELOW_PX } fr
45
45
  import ChatMessage_default from "./components/ChatMessage.js";
46
46
  import ChatMessageList from "./components/ChatMessageList.js";
47
47
  import ChatThread from "./components/ChatThread.js";
48
- export { AGENT_COLOR_NAMES, ActivityLine, AgentMessageParts, AllocationSelector, ApprovalBlock, AttachmentManager, AttachmentUpload, BlockedGroupBanner, BranchNavigator, CHAT_COLUMN_SCOPE, ChatAdapterError, ChatEmptyState, ChatInput, ChatLayout, ChatMessageList, ChatMessage_default as ChatMessageView, ChatProvider, ChatSidebar, ChatStage, ChatThread, ComposerContext, ComposerControls, ComposerSettings, ComposerUsage, ConnectToolsLink, ConversationLayout, ConversationSidebar, DEFAULT_PERMISSION_MODE, DRAWER_BELOW_PX, DragOverlay, FOCUS_SIDEBAR_SEARCH_EVENT, INTERRUPTED_NOTICE, KeyboardShortcutsProvider, MAX_EDIT_DIFF_LINES, MAX_WRITE_DIFF_LINES, ManageProvidersLink, ModelSelector, NAMED_PERMISSION_MODES, NoticeBar, NoticeCard, OutputCard, PermissionPicker, ProviderIssueBanner, RenameDialog, ShareButton, ShareDialog, SidebarDrawer, SidebarGroupHeading, SidebarPanel, SidebarPlaceholder, SidebarRailItem, SidebarRow, SidebarRowTitle, SidebarToggle, agentColorHex, agentTypeLabel, applyPartDelta, askQuestionFromArgs, bashExitCode, chatReducer, clampPermissionMode, classifyPseudoUserMessage, clip, compactCount, computeEditDiff, computeWriteRows, defaultChatStrings, durationToAbsHumanDuration, editSummary, finalizeParts, firstNonEmptyLine, formatElapsed, formatFileSize, fullToolArgs, getGreeting, getProviderKeyFromModelId, groupConversationsByDate, hiddenTranscriptTool, initialState, interruptionNotice, isEditDiffTool, isGroupableTool, isMac, isNamedPermissionMode, isOrgModel, languageForPath, lineDelta, parseEditArgs, parseSubagentNotice, pasteInlineMaxBytes, permissionModesUpTo, planFromArgs, plural, providerIssueFor, resolveChatConfig, resultFailed, rollupSentence, sanitizeLabel, sanitizePanelText, slashMatches, subagentDeliveryLine, summarizeToolArgs, taskCallFromArgs, thinkingHeading, tokenizeDiffLines, toolHeaderFor, toolSummary, useChat, useChatConfig, useConversationActions, useDragDrop, useKeyboardShortcuts, useResizableSidebarWidth, useRowDialogs, wordEmphasisRanges };
48
+ export { AGENT_COLOR_NAMES, ActivityLine, AgentMessageParts, AllocationSelector, ApprovalBlock, AttachmentManager, AttachmentUpload, BlockedGroupBanner, BranchNavigator, CHAT_COLUMN_SCOPE, ChatAdapterError, ChatEmptyState, ChatInput, ChatLayout, ChatMessageList, ChatMessage_default as ChatMessageView, ChatProvider, ChatSidebar, ChatStage, ChatThread, ComposerContext, ComposerControls, ComposerSettings, ComposerUsage, ConnectToolsLink, ConversationLayout, ConversationSidebar, DEFAULT_PERMISSION_MODE, DRAWER_BELOW_PX, DragOverlay, FOCUS_SIDEBAR_SEARCH_EVENT, INTERRUPTED_NOTICE, KeyboardShortcutsProvider, MAX_EDIT_DIFF_LINES, MAX_WRITE_DIFF_LINES, ManageProvidersLink, ModelSelector, NAMED_PERMISSION_MODES, NoticeBar, NoticeCard, OutputCard, PermissionPicker, ProviderIssueBanner, RenameDialog, ShareButton, ShareDialog, SidebarGroupHeading, SidebarPanel, SidebarRailItem, SidebarRow, SidebarRowTitle, SidebarToggle, agentColorHex, agentTypeLabel, applyPartDelta, askQuestionFromArgs, bashExitCode, chatReducer, clampPermissionMode, classifyPseudoUserMessage, clip, computeEditDiff, computeWriteRows, defaultChatStrings, defaultToolStrings, editSummary, finalizeParts, firstNonEmptyLine, fullToolArgs, getGreeting, getProviderKeyFromModelId, groupConversationsByDate, hiddenTranscriptTool, initialState, interruptionNotice, isEditDiffTool, isGroupableTool, isMac, isNamedPermissionMode, isOrgModel, languageForPath, lineDelta, parseEditArgs, parseSubagentNotice, pasteInlineMaxBytes, permissionModesUpTo, planFromArgs, providerIssueFor, resolveChatConfig, resultFailed, rollupSentence, sanitizeLabel, sanitizePanelText, sidebarDrawerProps, slashMatches, subagentDeliveryLine, summarizeToolArgs, taskCallFromArgs, thinkingHeading, tokenizeDiffLines, toolHeaderFor, toolSummary, useChat, useChatConfig, useConversationActions, useDragDrop, useKeyboardShortcuts, useRowDialogs, wordEmphasisRanges };