@parallelworks/ui 0.18.0 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/README.md +86 -6
  2. package/dist/ai/adapter/memoryStore.d.ts +8 -0
  3. package/dist/ai/adapter/memoryStore.js +152 -0
  4. package/dist/ai/adapter/mock/index.d.ts +2 -0
  5. package/dist/ai/adapter/mock/index.js +3 -0
  6. package/dist/ai/adapter/mock/mockAdapter.d.ts +4 -0
  7. package/dist/ai/adapter/mock/mockAdapter.js +81 -0
  8. package/dist/ai/adapter/openai/createOpenAIStream.d.ts +9 -0
  9. package/dist/ai/adapter/openai/createOpenAIStream.js +33 -0
  10. package/dist/ai/adapter/openai/errors.d.ts +3 -0
  11. package/dist/ai/adapter/openai/errors.js +37 -0
  12. package/dist/ai/adapter/openai/index.d.ts +6 -0
  13. package/dist/ai/adapter/openai/index.js +6 -0
  14. package/dist/ai/adapter/openai/openaiAdapter.d.ts +9 -0
  15. package/dist/ai/adapter/openai/openaiAdapter.js +54 -0
  16. package/dist/ai/adapter/openai/responses.d.ts +4 -0
  17. package/dist/ai/adapter/openai/responses.js +108 -0
  18. package/dist/ai/adapter/openai/sse.d.ts +24 -0
  19. package/dist/ai/adapter/openai/sse.js +112 -0
  20. package/dist/ai/adapter/openai/wire.d.ts +40 -0
  21. package/dist/ai/adapter/types.d.ts +131 -0
  22. package/dist/ai/adapter/types.js +11 -0
  23. package/dist/ai/agent/classifier.d.ts +2 -0
  24. package/dist/ai/agent/classifier.js +12 -0
  25. package/dist/ai/agent/diff.d.ts +35 -0
  26. package/dist/ai/agent/diff.js +223 -0
  27. package/dist/ai/agent/diffHighlight.d.ts +6 -0
  28. package/dist/ai/agent/diffHighlight.js +101 -0
  29. package/dist/ai/agent/index.d.ts +6 -0
  30. package/dist/ai/agent/permissions.d.ts +11 -0
  31. package/dist/ai/agent/permissions.js +29 -0
  32. package/dist/ai/agent/toolfmt.d.ts +18 -0
  33. package/dist/ai/agent/toolfmt.js +383 -0
  34. package/dist/ai/agent/transcript.d.ts +38 -0
  35. package/dist/ai/agent/transcript.js +127 -0
  36. package/dist/ai/ai.css +325 -0
  37. package/dist/ai/components/AllocationSelector.d.ts +4 -0
  38. package/dist/ai/components/AllocationSelector.js +56 -0
  39. package/dist/ai/components/AttachmentManager.d.ts +1 -0
  40. package/dist/ai/components/AttachmentManager.js +144 -0
  41. package/dist/ai/components/AttachmentUpload.d.ts +24 -0
  42. package/dist/ai/components/AttachmentUpload.js +179 -0
  43. package/dist/ai/components/BlockedGroupBanner.d.ts +1 -0
  44. package/dist/ai/components/BlockedGroupBanner.js +29 -0
  45. package/dist/ai/components/BranchNavigator.d.ts +8 -0
  46. package/dist/ai/components/BranchNavigator.js +57 -0
  47. package/dist/ai/components/ChatEmptyState.d.ts +3 -0
  48. package/dist/ai/components/ChatEmptyState.js +171 -0
  49. package/dist/ai/components/ChatInput.d.ts +45 -0
  50. package/dist/ai/components/ChatInput.js +265 -0
  51. package/dist/ai/components/ChatLayout.d.ts +5 -0
  52. package/dist/ai/components/ChatLayout.js +15 -0
  53. package/dist/ai/components/ChatMessage.d.ts +24 -0
  54. package/dist/ai/components/ChatMessage.js +338 -0
  55. package/dist/ai/components/ChatMessageList.d.ts +35 -0
  56. package/dist/ai/components/ChatMessageList.js +301 -0
  57. package/dist/ai/components/ChatSidebar.d.ts +5 -0
  58. package/dist/ai/components/ChatSidebar.js +345 -0
  59. package/dist/ai/components/ChatThread.d.ts +3 -0
  60. package/dist/ai/components/ChatThread.js +198 -0
  61. package/dist/ai/components/ComposerChrome.d.ts +18 -0
  62. package/dist/ai/components/ComposerChrome.js +50 -0
  63. package/dist/ai/components/ComposerFrame.d.ts +16 -0
  64. package/dist/ai/components/ComposerFrame.js +33 -0
  65. package/dist/ai/components/DragOverlay.d.ts +5 -0
  66. package/dist/ai/components/DragOverlay.js +20 -0
  67. package/dist/ai/components/ModelSelector.d.ts +6 -0
  68. package/dist/ai/components/ModelSelector.js +343 -0
  69. package/dist/ai/components/ShareDialog.d.ts +11 -0
  70. package/dist/ai/components/ShareDialog.js +260 -0
  71. package/dist/ai/components/SlashMenu.d.ts +28 -0
  72. package/dist/ai/components/SlashMenu.js +91 -0
  73. package/dist/ai/components/agent/ActivityLine.d.ts +21 -0
  74. package/dist/ai/components/agent/ActivityLine.js +151 -0
  75. package/dist/ai/components/agent/AgentMessageParts.d.ts +54 -0
  76. package/dist/ai/components/agent/AgentMessageParts.js +721 -0
  77. package/dist/ai/components/agent/PermissionPicker.d.ts +11 -0
  78. package/dist/ai/components/agent/PermissionPicker.js +38 -0
  79. package/dist/ai/components/attachmentKeys.d.ts +4 -0
  80. package/dist/ai/components/attachmentKeys.js +10 -0
  81. package/dist/ai/core/ChatProvider.d.ts +66 -0
  82. package/dist/ai/core/ChatProvider.js +848 -0
  83. package/dist/ai/core/KeyboardShortcutsProvider.d.ts +5 -0
  84. package/dist/ai/core/KeyboardShortcutsProvider.js +9 -0
  85. package/dist/ai/core/chatReducer.d.ts +114 -0
  86. package/dist/ai/core/chatReducer.js +223 -0
  87. package/dist/ai/core/config.d.ts +47 -0
  88. package/dist/ai/core/config.js +45 -0
  89. package/dist/ai/core/events.d.ts +1 -0
  90. package/dist/ai/core/events.js +4 -0
  91. package/dist/ai/core/exportConversation.d.ts +4 -0
  92. package/dist/ai/core/exportConversation.js +42 -0
  93. package/dist/ai/core/greeting.d.ts +3 -0
  94. package/dist/ai/core/greeting.js +38 -0
  95. package/dist/ai/core/parts.d.ts +11 -0
  96. package/dist/ai/core/parts.js +84 -0
  97. package/dist/ai/core/useDragDrop.d.ts +14 -0
  98. package/dist/ai/core/useDragDrop.js +36 -0
  99. package/dist/ai/core/useKeyboardShortcuts.d.ts +12 -0
  100. package/dist/ai/core/useKeyboardShortcuts.js +77 -0
  101. package/dist/ai/core/useSSEStream.d.ts +34 -0
  102. package/dist/ai/core/useSSEStream.js +98 -0
  103. package/dist/ai/index.d.ts +40 -0
  104. package/dist/ai/index.js +44 -0
  105. package/dist/ai/strings.d.ts +167 -0
  106. package/dist/ai/strings.js +175 -0
  107. package/dist/ai/types.d.ts +236 -0
  108. package/dist/ai/ui/Avatar.d.ts +8 -0
  109. package/dist/ai/ui/Avatar.js +35 -0
  110. package/dist/ai/ui/Dropdown.d.ts +31 -0
  111. package/dist/ai/ui/Dropdown.js +110 -0
  112. package/dist/ai/ui/Markdown.d.ts +8 -0
  113. package/dist/ai/ui/Markdown.js +79 -0
  114. package/dist/ai/ui/Notice.d.ts +21 -0
  115. package/dist/ai/ui/Notice.js +77 -0
  116. package/dist/ai/ui/buttons.d.ts +1 -0
  117. package/dist/ai/ui/codeBreaks.d.ts +16 -0
  118. package/dist/ai/ui/codeBreaks.js +36 -0
  119. package/dist/ai/ui/prose.d.ts +1 -0
  120. package/dist/ai/ui/prose.js +13 -0
  121. package/dist/ai/ui/sidebar.d.ts +81 -0
  122. package/dist/ai/ui/sidebar.js +148 -0
  123. package/dist/ai/utils.d.ts +4 -0
  124. package/dist/ai/utils.js +23 -0
  125. package/dist/assets/{editor.worker-CuBRIwi-.js → editor.worker-BmHUIVG4.js} +194 -163
  126. package/dist/assets/{json.worker-8ytS02vz.js → json.worker-D8bJ92nw.js} +384 -338
  127. package/dist/assets/{yaml.worker-DJC-VUcv.js → yaml.worker-C4gyGAko.js} +15657 -13823
  128. package/dist/components/AddMenu.js +46 -0
  129. package/dist/components/Avatar.d.ts +1 -1
  130. package/dist/components/Avatar.js +46 -0
  131. package/dist/{chunks/BareModal-BtRiQezg.js → components/BareModal.js} +1 -1
  132. package/dist/components/Breadcrumbs.d.ts +1 -1
  133. package/dist/components/Breadcrumbs.js +83 -0
  134. package/dist/components/Button.js +83 -0
  135. package/dist/components/Callout.js +23 -0
  136. package/dist/components/Card.js +31 -0
  137. package/dist/components/CollapsiblePanel.js +77 -0
  138. package/dist/components/ConfirmModal.js +74 -0
  139. package/dist/components/CopyToClipboard.js +81 -0
  140. package/dist/{chunks/CreateModal-BY6DLmur.js → components/CreateModal.js} +10 -189
  141. package/dist/components/DescriptionList.js +42 -0
  142. package/dist/components/Dropdown.d.ts +1 -1
  143. package/dist/components/Dropdown.js +349 -0
  144. package/dist/components/EmptyState.d.ts +1 -1
  145. package/dist/components/EmptyState.js +27 -0
  146. package/dist/components/Filter.js +32 -0
  147. package/dist/components/FilterPill.js +13 -0
  148. package/dist/components/IconButton.js +34 -0
  149. package/dist/components/Indicator.d.ts +2 -2
  150. package/dist/{chunks/Indicator-hBSIxOPK.js → components/Indicator.js} +1 -1
  151. package/dist/components/Input.d.ts +1 -1
  152. package/dist/components/Input.js +88 -0
  153. package/dist/components/LetterBadge.d.ts +1 -1
  154. package/dist/components/LetterBadge.js +13 -0
  155. package/dist/components/Listbox.js +123 -0
  156. package/dist/{chunks/Loader-BXoXTZGc.js → components/Loader.js} +1 -1
  157. package/dist/components/Markdown.js +15 -0
  158. package/dist/components/MarkdownImpl.d.ts +1 -1
  159. package/dist/components/MultiSelect.js +171 -0
  160. package/dist/components/Overview.js +39 -0
  161. package/dist/components/PageHeader.js +194 -0
  162. package/dist/components/Pagination.js +35 -0
  163. package/dist/components/Provider.d.ts +16 -65
  164. package/dist/{chunks/Provider-Ghua9PkN.js → components/Provider.js} +54 -20
  165. package/dist/{chunks/RequiredMark-DfLdYbYZ.js → components/RequiredMark.js} +1 -1
  166. package/dist/components/SectionHeader.js +11 -0
  167. package/dist/components/SettingModeOption.js +30 -0
  168. package/dist/components/SettingRow.d.ts +1 -1
  169. package/dist/components/SettingRow.js +35 -0
  170. package/dist/components/SettingsCard.js +31 -0
  171. package/dist/components/SettingsGroup.d.ts +1 -1
  172. package/dist/components/SettingsGroup.js +17 -0
  173. package/dist/components/Sort.js +42 -0
  174. package/dist/components/StatusBadge.js +63 -0
  175. package/dist/components/SwitchToggle.js +59 -0
  176. package/dist/{chunks/SwitchToggleSmall-FcsaYSTs.js → components/SwitchToggleSmall.js} +1 -1
  177. package/dist/{chunks/Table-4OHjdKdO.js → components/Table.js} +7 -5
  178. package/dist/components/Toggle.js +20 -0
  179. package/dist/{chunks/Tooltip-Crxo_eU_.js → components/Tooltip.js} +6 -4
  180. package/dist/{chunks/StatusBadge-C1Blx_cW.js → components/dropdownUtils.js} +2 -63
  181. package/dist/components/focus.d.ts +2 -0
  182. package/dist/components/focus.js +7 -0
  183. package/dist/components/ghostButton.js +7 -0
  184. package/dist/components/inputClasses.js +4 -0
  185. package/dist/components/keys.d.ts +12 -0
  186. package/dist/components/keys.js +27 -0
  187. package/dist/components/relativeTime.js +32 -0
  188. package/dist/{chunks/useCssIsDark-DHr05dG2.js → components/useCssIsDark.js} +1 -1
  189. package/dist/duration.d.ts +3 -0
  190. package/dist/duration.js +17 -0
  191. package/dist/editor/Editor.js +13 -0
  192. package/dist/editor/EditorField.js +53 -0
  193. package/dist/editor/FormCodePanel.js +173 -0
  194. package/dist/editor/Monaco.d.ts +1 -20
  195. package/dist/editor/Monaco.js +112 -0
  196. package/dist/editor/index.d.ts +2 -1
  197. package/dist/editor/index.js +7 -2
  198. package/dist/editor/themes.js +91 -0
  199. package/dist/editor/workers.js +29 -0
  200. package/dist/editor/yaml.d.ts +5 -0
  201. package/dist/editor/yaml.js +15 -0
  202. package/dist/engine.d.ts +98 -0
  203. package/dist/file-explorer/FileExplorer.d.ts +11 -2
  204. package/dist/file-explorer/FileExplorer.js +1402 -0
  205. package/dist/file-explorer/FileExplorerContext.d.ts +1 -1
  206. package/dist/file-explorer/FileExplorerContext.js +370 -0
  207. package/dist/file-explorer/FilePreview/CodePreviewEditor.d.ts +1 -1
  208. package/dist/{chunks/CodePreviewEditor-4lx3kE-w.js → file-explorer/FilePreview/CodePreviewEditor.js} +3 -2
  209. package/dist/file-explorer/FilePreview/Inline.js +45 -0
  210. package/dist/file-explorer/FilePreview/StreamedBadge.js +16 -0
  211. package/dist/file-explorer/FilePreview/Viewer.js +526 -0
  212. package/dist/file-explorer/FilePreview/index.js +266 -0
  213. package/dist/file-explorer/FilePreview/parse.js +63 -0
  214. package/dist/file-explorer/FilePreview/previewCache.js +98 -0
  215. package/dist/file-explorer/FilePreview/previewType.d.ts +1 -1
  216. package/dist/file-explorer/FilePreview/previewType.js +151 -0
  217. package/dist/file-explorer/FilePreview/readCappedBytes.js +196 -0
  218. package/dist/file-explorer/FilePreview/useObjectBlobUrl.js +95 -0
  219. package/dist/file-explorer/FilePreview/useObjectText.js +109 -0
  220. package/dist/file-explorer/FilePreview/usePresignedUrl.js +73 -0
  221. package/dist/file-explorer/FileRow.d.ts +1 -1
  222. package/dist/file-explorer/FileRow.js +165 -0
  223. package/dist/file-explorer/FileRowsWindow.js +92 -0
  224. package/dist/file-explorer/FileTable.js +172 -0
  225. package/dist/file-explorer/FileTableHeaders.js +49 -0
  226. package/dist/file-explorer/LoadMoreRow.js +46 -0
  227. package/dist/file-explorer/TreeView.js +376 -0
  228. package/dist/file-explorer/helpers.d.ts +4 -4
  229. package/dist/file-explorer/helpers.js +537 -0
  230. package/dist/file-explorer/index.d.ts +3 -3
  231. package/dist/file-explorer/index.js +7 -5705
  232. package/dist/file-explorer/lib/batch.js +39 -0
  233. package/dist/file-explorer/lib/errors.js +9 -0
  234. package/dist/file-explorer/lib/paging.js +124 -0
  235. package/dist/file-explorer/lib/types.d.ts +6 -1
  236. package/dist/file-explorer/lib/utils.d.ts +1 -3
  237. package/dist/file-explorer/lib/utils.js +322 -0
  238. package/dist/file-explorer/toasts.js +400 -0
  239. package/dist/file-explorer/treeRows.js +73 -0
  240. package/dist/file-explorer/useNearEnd.d.ts +1 -1
  241. package/dist/file-explorer/useNearEnd.js +27 -0
  242. package/dist/form/FieldWrapper.d.ts +2 -2
  243. package/dist/form/FieldWrapper.js +54 -0
  244. package/dist/form/Fields/BooleanField.js +51 -0
  245. package/dist/form/Fields/CheckboxGroupField.js +72 -0
  246. package/dist/form/Fields/ColorField.js +33 -0
  247. package/dist/form/Fields/DropdownField.js +49 -0
  248. package/dist/form/Fields/DurationField.js +130 -0
  249. package/dist/form/Fields/LabelField.js +19 -0
  250. package/dist/form/Fields/MultiDropdownField.js +40 -0
  251. package/dist/form/Fields/NumberField.js +51 -0
  252. package/dist/form/Fields/ObjectField.js +54 -0
  253. package/dist/form/Fields/RadioField.js +49 -0
  254. package/dist/form/Fields/RangeField.js +58 -0
  255. package/dist/form/Fields/ResourceOptionIcon.d.ts +1 -1
  256. package/dist/form/Fields/ResourceOptionIcon.js +21 -0
  257. package/dist/form/Fields/StepField.js +6 -0
  258. package/dist/form/Fields/StringField.js +37 -0
  259. package/dist/form/Fields/TextAreaField.js +31 -0
  260. package/dist/form/Fields/durationValidity.js +11 -0
  261. package/dist/form/Form.d.ts +4 -21
  262. package/dist/form/Form.js +643 -0
  263. package/dist/form/SpecialTypes/DropdownWrapper.js +30 -0
  264. package/dist/form/SpecialTypes/FormikCustomDropdown.js +122 -0
  265. package/dist/form/SpecialTypes/FormikCustomInput.js +111 -0
  266. package/dist/form/SpecialTypes/FormikMultiSelectDropdown.js +31 -0
  267. package/dist/form/SpecialTypes/FormikNumericInput.js +60 -0
  268. package/dist/form/Wizard/WizardContainer.js +138 -0
  269. package/dist/form/Wizard/WizardNavigation.js +92 -0
  270. package/dist/form/Wizard/WizardStepContent.js +35 -0
  271. package/dist/form/Wizard/WizardStepIndicator.js +108 -0
  272. package/dist/form/Wizard/useWizardState.js +118 -0
  273. package/dist/form/Wizard/utils.js +34 -0
  274. package/dist/form/fieldContext.js +26 -0
  275. package/dist/form/fieldRegistry.js +50 -0
  276. package/dist/form/index.d.ts +11 -12
  277. package/dist/form/index.js +18 -2445
  278. package/dist/form/lib.d.ts +6 -1
  279. package/dist/{chunks/FieldWrapper-Bef01EWO.js → form/lib.js} +5 -104
  280. package/dist/form/types/fieldComponentTypes.d.ts +3 -2
  281. package/dist/form/types/fieldTypes.d.ts +6 -20
  282. package/dist/form/useParsedOpts.d.ts +1 -1
  283. package/dist/form/useParsedOpts.js +62 -0
  284. package/dist/form/usePrevious.js +11 -0
  285. package/dist/form/utils/checkShowIfObject.js +14 -0
  286. package/dist/form/utils/{slurmDuration.d.ts → duration.d.ts} +2 -2
  287. package/dist/form/utils/duration.js +69 -0
  288. package/dist/form/utils/getParentValue.js +23 -0
  289. package/dist/form/utils/getPlaceholder.js +9 -0
  290. package/dist/form/utils/getValueUsingPath.js +23 -0
  291. package/dist/form/utils/secondaryField.js +22 -0
  292. package/dist/graph/AnnotationBanner.js +141 -0
  293. package/dist/graph/Collapse.js +41 -0
  294. package/dist/{workflow/index.js → graph/DependencyGraph.js} +76 -1163
  295. package/dist/graph/JobSummary.js +104 -0
  296. package/dist/{workflow → graph}/MatrixGroup.d.ts +2 -2
  297. package/dist/graph/MatrixGroup.js +107 -0
  298. package/dist/graph/Reveal.js +57 -0
  299. package/dist/graph/TreeView.js +711 -0
  300. package/dist/{workflow → graph}/index.d.ts +1 -1
  301. package/dist/graph/index.js +2 -0
  302. package/dist/{workflow → graph}/types.d.ts +3 -3
  303. package/dist/graph/types.js +6 -0
  304. package/dist/icons.d.ts +20 -21
  305. package/dist/index.d.ts +38 -40
  306. package/dist/index.js +47 -599
  307. package/dist/list/ActionToolbar.js +184 -0
  308. package/dist/list/HoverCard.js +73 -0
  309. package/dist/list/ListPage.js +145 -0
  310. package/dist/list/ListPager.js +59 -0
  311. package/dist/list/ListTable.d.ts +1 -1
  312. package/dist/list/ListTable.js +163 -0
  313. package/dist/list/ListViewControls.d.ts +2 -2
  314. package/dist/list/ListViewControls.js +372 -0
  315. package/dist/list/RowContextMenu.js +350 -0
  316. package/dist/list/UserHoverCard.js +117 -0
  317. package/dist/list/index.d.ts +9 -9
  318. package/dist/list/index.js +11 -2
  319. package/dist/list/listSearch.js +137 -0
  320. package/dist/list/listView.js +210 -0
  321. package/dist/list/textEntry.js +10 -0
  322. package/dist/logviewer/LogViewer.d.ts +1 -1
  323. package/dist/logviewer/LogViewer.js +750 -0
  324. package/dist/logviewer/index.d.ts +1 -0
  325. package/dist/logviewer/index.js +3 -742
  326. package/dist/logviewer/segments.d.ts +9 -0
  327. package/dist/logviewer/segments.js +80 -0
  328. package/dist/styles/fonts.css +4 -4
  329. package/dist/styles/theme.css +6 -4
  330. package/dist/styles.css +1 -1
  331. package/dist/theme/index.js +2 -2
  332. package/package.json +38 -14
  333. package/LICENSE +0 -202
  334. package/dist/chunks/Monaco-C1POOdVv.js +0 -1046
  335. package/dist/chunks/PageHeader-l49p1nM9.js +0 -690
  336. package/dist/chunks/SwitchToggle-CHPP8uZQ.js +0 -755
  337. package/dist/chunks/editor-9_uVtUyy.js +0 -347
  338. package/dist/chunks/list-qrojZZNv.js +0 -1411
  339. package/dist/editor/usesGitlab.d.ts +0 -97
  340. package/dist/form/Fields/BucketReadOnlyField.d.ts +0 -7
  341. package/dist/form/types/workflow-schema.d.ts +0 -1145
  342. package/dist/form/utils/pwResolver.d.ts +0 -18
  343. package/dist/{chunks/MarkdownImpl-Bq4QhrtA.js → components/MarkdownImpl.js} +1 -1
  344. /package/dist/{workflow → graph}/AnnotationBanner.d.ts +0 -0
  345. /package/dist/{workflow → graph}/Collapse.d.ts +0 -0
  346. /package/dist/{workflow → graph}/DependencyGraph.d.ts +0 -0
  347. /package/dist/{workflow → graph}/JobSummary.d.ts +0 -0
  348. /package/dist/{workflow → graph}/Reveal.d.ts +0 -0
  349. /package/dist/{workflow → graph}/TreeView.d.ts +0 -0
@@ -0,0 +1,3 @@
1
+ export default function ChatThread({ conversationId }: {
2
+ conversationId: string;
3
+ }): import("react").JSX.Element;
@@ -0,0 +1,198 @@
1
+ import { CloseIcon, ThinkingIcon } from "../../icons.js";
2
+ import { useChatConfig } from "../core/config.js";
3
+ import { useChat } from "../core/ChatProvider.js";
4
+ import Markdown from "../ui/Markdown.js";
5
+ import BlockedGroupBanner from "./BlockedGroupBanner.js";
6
+ import useDragDrop from "../core/useDragDrop.js";
7
+ import { ComposerControls, ConnectToolsLink } from "./ComposerChrome.js";
8
+ import DragOverlay from "./DragOverlay.js";
9
+ import ChatInput from "./ChatInput.js";
10
+ import { ShareButton } from "./ShareDialog.js";
11
+ import ChatMessageList from "./ChatMessageList.js";
12
+ import cx from "classnames";
13
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
14
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
15
+ //#region src/ai/components/ChatThread.tsx
16
+ function ChatThread({ conversationId }) {
17
+ const chatInputRef = useRef(null);
18
+ const [editingState, setEditingState] = useState(null);
19
+ const [reasoningDrawerOpen, setReasoningDrawerOpen] = useState(false);
20
+ const [selectedReasoning, setSelectedReasoning] = useState(null);
21
+ const handleOpenReasoning = useCallback((reasoning, duration) => {
22
+ if (reasoningDrawerOpen && selectedReasoning?.content === reasoning) setReasoningDrawerOpen(false);
23
+ else {
24
+ setSelectedReasoning({
25
+ content: reasoning,
26
+ duration
27
+ });
28
+ setReasoningDrawerOpen(true);
29
+ }
30
+ }, [reasoningDrawerOpen, selectedReasoning?.content]);
31
+ const { adapter, currentUser, currentConversation, loadConversation, loadProviders, sendMessage, retryMessage, isLoadingConversation, isStreaming, streamingContent, navigateToBranch, queuedMessages, removeQueuedMessage } = useChat();
32
+ const { slots, strings } = useChatConfig();
33
+ const requestedConversationIdRef = useRef(null);
34
+ useEffect(() => {
35
+ loadProviders();
36
+ if (requestedConversationIdRef.current !== conversationId) {
37
+ requestedConversationIdRef.current = conversationId;
38
+ loadConversation(conversationId);
39
+ }
40
+ }, [
41
+ conversationId,
42
+ loadConversation,
43
+ loadProviders
44
+ ]);
45
+ const handleSendMessage = useCallback((content, attachmentIds, attachmentMeta) => {
46
+ sendMessage(content, attachmentIds, void 0, attachmentMeta);
47
+ }, [sendMessage]);
48
+ const handleEditMessage = useCallback((messageId) => {
49
+ const message = (currentConversation?.messages || []).find((m) => m.id === messageId);
50
+ if (message && message.role === "user") setEditingState({
51
+ messageId: message.id,
52
+ parentId: message.parentId || null
53
+ });
54
+ }, [currentConversation?.messages]);
55
+ const handleSaveEdit = useCallback((_messageId, content) => {
56
+ if (!editingState) return;
57
+ sendMessage(content, void 0, editingState.parentId || void 0);
58
+ setEditingState(null);
59
+ }, [sendMessage, editingState]);
60
+ const handleCancelEdit = useCallback(() => {
61
+ setEditingState(null);
62
+ }, []);
63
+ const handleEditLastMessage = useCallback(() => {
64
+ const conversationMessages = currentConversation?.messages || [];
65
+ for (let i = conversationMessages.length - 1; i >= 0; i--) if (conversationMessages[i].role === "user") {
66
+ handleEditMessage(conversationMessages[i].id);
67
+ break;
68
+ }
69
+ }, [currentConversation?.messages, handleEditMessage]);
70
+ const handleNavigateBranch = useCallback((messageId) => {
71
+ navigateToBranch?.(messageId);
72
+ }, [navigateToBranch]);
73
+ const handleRegenerateMessage = useCallback((messageId) => {
74
+ const conversationMessages = currentConversation?.messages || [];
75
+ const assistantMessage = conversationMessages.find((m) => m.id === messageId);
76
+ if (!assistantMessage || assistantMessage.role !== "assistant") return;
77
+ const userMessage = conversationMessages.find((m) => m.id === assistantMessage.parentId);
78
+ if (!userMessage || userMessage.role !== "user") return;
79
+ sendMessage(userMessage.content || "", userMessage.attachments?.map((a) => a.id), userMessage.parentId || void 0);
80
+ }, [currentConversation?.messages, sendMessage]);
81
+ const handleRetryMessage = useCallback((messageId) => {
82
+ retryMessage(messageId);
83
+ }, [retryMessage]);
84
+ const handleFilesDropped = useCallback((files) => {
85
+ chatInputRef.current?.addFiles(files);
86
+ }, []);
87
+ const { isDragging, dragHandlers } = useDragDrop({ onFilesDropped: handleFilesDropped });
88
+ const attachmentsAvailable = !!adapter.attachments;
89
+ const streamingMessage = useMemo(() => isStreaming && streamingContent ? {
90
+ id: "streaming",
91
+ conversationId,
92
+ role: "assistant",
93
+ content: streamingContent,
94
+ timestamp: ""
95
+ } : null, [
96
+ isStreaming,
97
+ streamingContent,
98
+ conversationId
99
+ ]);
100
+ const messages = currentConversation?.messages || [];
101
+ const showAuthor = useMemo(() => {
102
+ return new Set(messages.filter((m) => m.author).map((m) => m.author.username)).size > 1 || currentConversation?.isOwner === false;
103
+ }, [messages, currentConversation?.isOwner]);
104
+ if (isLoadingConversation && !currentConversation) return /* @__PURE__ */ jsxs("div", {
105
+ className: "flex flex-col h-full bg-(--theme-panel-bg)",
106
+ children: [/* @__PURE__ */ jsx("div", { className: "flex-1" }), /* @__PURE__ */ jsx(ChatInput, {
107
+ ref: chatInputRef,
108
+ onSend: handleSendMessage,
109
+ disabled: true,
110
+ conversationId,
111
+ settingsLeft: /* @__PURE__ */ jsx(ConnectToolsLink, {}),
112
+ settingsRight: /* @__PURE__ */ jsxs(Fragment$1, { children: [slots.composerUsage, /* @__PURE__ */ jsx(ComposerControls, {})] })
113
+ })]
114
+ });
115
+ return /* @__PURE__ */ jsxs("div", {
116
+ className: "flex h-full relative bg-(--theme-panel-bg)",
117
+ children: [/* @__PURE__ */ jsxs("div", {
118
+ className: "flex-1 flex flex-col min-w-0",
119
+ ...attachmentsAvailable ? dragHandlers : {},
120
+ children: [
121
+ isDragging && attachmentsAvailable && /* @__PURE__ */ jsx(DragOverlay, { className: "rounded-lg" }),
122
+ /* @__PURE__ */ jsx(BlockedGroupBanner, {}),
123
+ /* @__PURE__ */ jsx(ChatMessageList, {
124
+ messages,
125
+ allMessages: messages,
126
+ streamingMessage,
127
+ queuedMessages,
128
+ onRemoveQueued: removeQueuedMessage,
129
+ editingMessageId: editingState?.messageId,
130
+ showAuthor,
131
+ currentUsername: currentUser.username,
132
+ onNavigateBranch: handleNavigateBranch,
133
+ onEditMessage: currentConversation?.canCollaborate !== false ? handleEditMessage : void 0,
134
+ onRegenerateMessage: currentConversation?.canCollaborate !== false ? handleRegenerateMessage : void 0,
135
+ onRetryMessage: currentConversation?.canCollaborate !== false ? handleRetryMessage : void 0,
136
+ onSaveEdit: handleSaveEdit,
137
+ onCancelEdit: handleCancelEdit,
138
+ onOpenReasoning: handleOpenReasoning,
139
+ inputElement: /* @__PURE__ */ jsx(ChatInput, {
140
+ ref: chatInputRef,
141
+ onSend: handleSendMessage,
142
+ disabled: isLoadingConversation || currentConversation?.canCollaborate === false,
143
+ placeholder: currentConversation?.canCollaborate === false ? strings.thread.viewOnly : void 0,
144
+ conversationId,
145
+ onEditLastMessage: handleEditLastMessage,
146
+ settingsLeft: /* @__PURE__ */ jsxs(Fragment$1, { children: [currentConversation?.isOwner !== false && /* @__PURE__ */ jsx(ShareButton, { conversationId }), /* @__PURE__ */ jsx(ConnectToolsLink, {})] }),
147
+ settingsRight: /* @__PURE__ */ jsxs(Fragment$1, { children: [slots.composerUsage, /* @__PURE__ */ jsx(ComposerControls, {})] })
148
+ })
149
+ })
150
+ ]
151
+ }), /* @__PURE__ */ jsx("div", {
152
+ className: cx("flex-shrink-0 border-l theme-border flex flex-col h-full transition-[width] duration-300 ease-in-out overflow-hidden bg-(--theme-panel-bg)", reasoningDrawerOpen ? "w-[400px]" : "w-0 border-l-0"),
153
+ children: /* @__PURE__ */ jsxs("div", {
154
+ className: "w-[400px] h-full flex flex-col",
155
+ children: [/* @__PURE__ */ jsxs("div", {
156
+ className: "flex items-center justify-between p-3 border-b theme-border",
157
+ children: [/* @__PURE__ */ jsxs("div", {
158
+ className: "flex items-center gap-2",
159
+ children: [
160
+ /* @__PURE__ */ jsx(ThinkingIcon, { className: "w-5 h-5 theme-muted-text" }),
161
+ /* @__PURE__ */ jsx("span", {
162
+ className: "font-medium",
163
+ children: strings.thinking.activity
164
+ }),
165
+ selectedReasoning?.duration && /* @__PURE__ */ jsxs("span", {
166
+ className: "text-sm theme-muted-text",
167
+ children: [
168
+ "· ",
169
+ Math.round(selectedReasoning.duration / 1e3),
170
+ "s"
171
+ ]
172
+ })
173
+ ]
174
+ }), /* @__PURE__ */ jsx("button", {
175
+ type: "button",
176
+ onClick: () => setReasoningDrawerOpen(false),
177
+ className: "p-1 rounded hover:theme-hover transition-colors",
178
+ children: /* @__PURE__ */ jsx(CloseIcon, { className: "w-5 h-5 theme-muted-text" })
179
+ })]
180
+ }), /* @__PURE__ */ jsx("div", {
181
+ className: "flex-1 overflow-y-auto p-4",
182
+ children: selectedReasoning?.content && /* @__PURE__ */ jsxs("div", {
183
+ className: "space-y-4",
184
+ children: [/* @__PURE__ */ jsxs("div", {
185
+ className: "flex items-center gap-2 text-sm font-medium theme-text",
186
+ children: [/* @__PURE__ */ jsx("div", { className: "w-2 h-2 rounded-full bg-blue-500" }), /* @__PURE__ */ jsx("span", { children: strings.thinking.label })]
187
+ }), /* @__PURE__ */ jsx("div", {
188
+ className: "text-sm theme-muted-text leading-relaxed pl-4 border-l-2 theme-border",
189
+ children: /* @__PURE__ */ jsx(Markdown, { children: selectedReasoning.content })
190
+ })]
191
+ })
192
+ })]
193
+ })
194
+ })]
195
+ });
196
+ }
197
+ //#endregion
198
+ export { ChatThread as default };
@@ -0,0 +1,18 @@
1
+ import type { ReactNode } from 'react';
2
+ /** Where the turn runs, sitting above the composer the way the terminal shows
3
+ * it: the machine, the workspace, and whatever else names the place. */
4
+ export declare function ComposerContext({ children }: {
5
+ children: ReactNode;
6
+ }): import("react").JSX.Element;
7
+ /** What the turn runs as, sitting under the composer: the surface's own
8
+ * controls on the left, the model on the right, both reading as plain text. */
9
+ export declare function ComposerSettings({ left, children }: {
10
+ left?: ReactNode;
11
+ children?: ReactNode;
12
+ }): import("react").JSX.Element;
13
+ /** The two selectors every surface carries, bare so they read as text beside
14
+ * whatever the surface puts next to them. */
15
+ export declare function ComposerControls({ targetSession }: {
16
+ targetSession?: string | null | undefined;
17
+ }): import("react").JSX.Element;
18
+ export declare function ConnectToolsLink(): import("react").JSX.Element | null;
@@ -0,0 +1,50 @@
1
+ import { ConnectIcon } from "../../icons.js";
2
+ import { useChatConfig } from "../core/config.js";
3
+ import AllocationSelector from "./AllocationSelector.js";
4
+ import ModelSelector from "./ModelSelector.js";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/ai/components/ComposerChrome.tsx
7
+ /** Where the turn runs, sitting above the composer the way the terminal shows
8
+ * it: the machine, the workspace, and whatever else names the place. */
9
+ function ComposerContext({ children }) {
10
+ return /* @__PURE__ */ jsx("div", {
11
+ className: "mb-1.5 flex flex-wrap items-center gap-1.5",
12
+ children
13
+ });
14
+ }
15
+ /** What the turn runs as, sitting under the composer: the surface's own
16
+ * controls on the left, the model on the right, both reading as plain text. */
17
+ function ComposerSettings({ left, children }) {
18
+ return /* @__PURE__ */ jsxs("div", {
19
+ className: "mt-1.5 flex flex-wrap items-center justify-between gap-x-3 gap-y-1",
20
+ children: [/* @__PURE__ */ jsx("div", {
21
+ className: "flex items-center gap-2",
22
+ children: left
23
+ }), /* @__PURE__ */ jsx("div", {
24
+ className: "flex items-center gap-2",
25
+ children
26
+ })]
27
+ });
28
+ }
29
+ /** The two selectors every surface carries, bare so they read as text beside
30
+ * whatever the surface puts next to them. */
31
+ function ComposerControls({ targetSession }) {
32
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ModelSelector, {
33
+ variant: "bare",
34
+ targetSession
35
+ }), /* @__PURE__ */ jsx(AllocationSelector, { variant: "bare" })] });
36
+ }
37
+ function ConnectToolsLink() {
38
+ const { extraLinks, LinkComponent, strings } = useChatConfig();
39
+ if (!extraLinks.connectTools) return null;
40
+ return /* @__PURE__ */ jsxs(LinkComponent, {
41
+ target: {
42
+ kind: "external",
43
+ href: extraLinks.connectTools
44
+ },
45
+ className: "flex items-center gap-1 rounded-md px-1.5 py-0.5 text-[11px] theme-muted-text transition-colors hover:theme-muted-panel hover:theme-text",
46
+ children: [/* @__PURE__ */ jsx(ConnectIcon, { className: "h-3 w-3" }), strings.sidebar.connectTools]
47
+ });
48
+ }
49
+ //#endregion
50
+ export { ComposerContext, ComposerControls, ComposerSettings, ConnectToolsLink };
@@ -0,0 +1,16 @@
1
+ import type { ReactNode } from 'react';
2
+ /** The column a composer sits in: notices above it, what the agent is doing
3
+ * right now, a row of chips saying where the message goes, the box itself,
4
+ * and a row of settings under it with the model and allocation on the right. */
5
+ export default function ComposerFrame({ notices, activity, above, belowLeft, belowRight, hint, className, children, }: {
6
+ notices?: ReactNode;
7
+ /** Sits where a terminal's spinner line would, just above the box. */
8
+ activity?: ReactNode;
9
+ above?: ReactNode;
10
+ belowLeft?: ReactNode;
11
+ /** Defaults to the model and allocation pickers. */
12
+ belowRight?: ReactNode;
13
+ hint?: string | undefined;
14
+ className?: string;
15
+ children: ReactNode;
16
+ }): import("react").JSX.Element;
@@ -0,0 +1,33 @@
1
+ import { ComposerContext, ComposerControls, ComposerSettings } from "./ComposerChrome.js";
2
+ import cx from "classnames";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/ai/components/ComposerFrame.tsx
5
+ /** The column a composer sits in: notices above it, what the agent is doing
6
+ * right now, a row of chips saying where the message goes, the box itself,
7
+ * and a row of settings under it with the model and allocation on the right. */
8
+ function ComposerFrame({ notices, activity, above, belowLeft, belowRight, hint, className, children }) {
9
+ return /* @__PURE__ */ jsx("div", {
10
+ className: cx("shrink-0 px-6 pb-6 pt-2", className),
11
+ children: /* @__PURE__ */ jsxs("div", {
12
+ className: "mx-auto w-full max-w-[50rem] space-y-2",
13
+ children: [notices, /* @__PURE__ */ jsxs("div", { children: [
14
+ activity && /* @__PURE__ */ jsx("div", {
15
+ className: "mb-2",
16
+ children: activity
17
+ }),
18
+ above && /* @__PURE__ */ jsx(ComposerContext, { children: above }),
19
+ children,
20
+ /* @__PURE__ */ jsx(ComposerSettings, {
21
+ left: belowLeft,
22
+ children: belowRight ?? /* @__PURE__ */ jsx(ComposerControls, {})
23
+ }),
24
+ hint && /* @__PURE__ */ jsx("p", {
25
+ className: "mt-1 text-center text-[11px] theme-muted-text",
26
+ children: hint
27
+ })
28
+ ] })]
29
+ })
30
+ });
31
+ }
32
+ //#endregion
33
+ export { ComposerFrame as default };
@@ -0,0 +1,5 @@
1
+ interface DragOverlayProps {
2
+ className?: string;
3
+ }
4
+ export default function DragOverlay({ className }: DragOverlayProps): import("react").JSX.Element;
5
+ export {};
@@ -0,0 +1,20 @@
1
+ import cx from "classnames";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/ai/components/DragOverlay.tsx
4
+ function DragOverlay({ className }) {
5
+ return /* @__PURE__ */ jsx("div", {
6
+ className: cx("absolute inset-0 z-50 flex items-center justify-center bg-blue-500/10 border-2 border-dashed border-blue-500 backdrop-blur-sm pointer-events-none", className),
7
+ children: /* @__PURE__ */ jsxs("div", {
8
+ className: "text-center",
9
+ children: [/* @__PURE__ */ jsx("p", {
10
+ className: "text-lg font-medium text-blue-600",
11
+ children: "Drop files here"
12
+ }), /* @__PURE__ */ jsx("p", {
13
+ className: "text-sm text-blue-500/80",
14
+ children: "Release to upload"
15
+ })]
16
+ })
17
+ });
18
+ }
19
+ //#endregion
20
+ export { DragOverlay as default };
@@ -0,0 +1,6 @@
1
+ export declare function getProviderKeyFromModelId(modelId: string): string;
2
+ export default function ModelSelector({ targetSession, variant, }: {
3
+ targetSession?: string | null | undefined;
4
+ /** 'bare' drops the border and the icon, for a toolbar that reads as text. */
5
+ variant?: 'default' | 'bare';
6
+ }): import("react").JSX.Element;