@assistant-ui/react 0.15.21 → 0.15.23

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 (634) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/dist/assistant-transport.d.ts +24 -24
  4. package/dist/assistant-transport.d.ts.map +1 -1
  5. package/dist/assistant-transport.js.map +1 -1
  6. package/dist/augmentations.d.ts +28 -5
  7. package/dist/augmentations.d.ts.map +1 -1
  8. package/dist/cloud-renderer/CloudRendererHost.d.ts +13 -0
  9. package/dist/cloud-renderer/CloudRendererHost.d.ts.map +1 -0
  10. package/dist/cloud-renderer/CloudRendererHost.js +291 -0
  11. package/dist/cloud-renderer/CloudRendererHost.js.map +1 -0
  12. package/dist/context/ReadonlyStore.d.ts +1 -3
  13. package/dist/context/ReadonlyStore.d.ts.map +1 -1
  14. package/dist/context/index.d.ts +13 -13
  15. package/dist/context/index.d.ts.map +1 -0
  16. package/dist/context/providers/AttachmentByIndexProvider.d.ts +2 -2
  17. package/dist/context/providers/AttachmentByIndexProvider.d.ts.map +1 -0
  18. package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts +2 -2
  19. package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -0
  20. package/dist/context/providers/ChainOfThoughtPartByIndexProvider.d.ts +2 -2
  21. package/dist/context/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -0
  22. package/dist/context/providers/MessageByIndexProvider.d.ts +2 -2
  23. package/dist/context/providers/MessageByIndexProvider.d.ts.map +1 -0
  24. package/dist/context/providers/MessageProvider.d.ts +2 -4
  25. package/dist/context/providers/MessageProvider.d.ts.map +1 -1
  26. package/dist/context/providers/PartByIndexProvider.d.ts +2 -2
  27. package/dist/context/providers/PartByIndexProvider.d.ts.map +1 -0
  28. package/dist/context/providers/SuggestionByIndexProvider.d.ts +2 -2
  29. package/dist/context/providers/SuggestionByIndexProvider.d.ts.map +1 -0
  30. package/dist/context/providers/TextMessagePartProvider.d.ts +2 -2
  31. package/dist/context/providers/TextMessagePartProvider.d.ts.map +1 -0
  32. package/dist/context/providers/ThreadListItemProvider.d.ts +2 -2
  33. package/dist/context/providers/ThreadListItemProvider.d.ts.map +1 -0
  34. package/dist/context/providers/ThreadViewportProvider.d.ts +3 -5
  35. package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -1
  36. package/dist/context/react/ThreadViewportContext.d.ts +17 -19
  37. package/dist/context/react/ThreadViewportContext.d.ts.map +1 -1
  38. package/dist/context/react/utils/createContextHook.d.ts +2 -4
  39. package/dist/context/react/utils/createContextHook.d.ts.map +1 -1
  40. package/dist/context/react/utils/createContextStoreHook.d.ts +15 -17
  41. package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
  42. package/dist/context/stores/ThreadViewport.d.ts +72 -74
  43. package/dist/context/stores/ThreadViewport.d.ts.map +1 -1
  44. package/dist/devtools/DevToolsHooks.d.ts +19 -20
  45. package/dist/devtools/DevToolsHooks.d.ts.map +1 -1
  46. package/dist/hooks/useMessageQuote.d.ts +1 -3
  47. package/dist/hooks/useMessageQuote.d.ts.map +1 -1
  48. package/dist/hooks/useMessageTiming.d.ts +1 -3
  49. package/dist/hooks/useMessageTiming.d.ts.map +1 -1
  50. package/dist/hooks/useToolCallElapsed.d.ts +0 -2
  51. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -1
  52. package/dist/hooks/useToolCallElapsed.js +1 -1
  53. package/dist/index.d.ts +126 -82
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +14 -13
  56. package/dist/internal.d.ts +8 -11
  57. package/dist/internal.d.ts.map +1 -1
  58. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +24 -26
  59. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
  60. package/dist/legacy-runtime/AssistantRuntimeProvider.js +1 -1
  61. package/dist/legacy-runtime/RuntimeAdapter.d.ts +2 -2
  62. package/dist/legacy-runtime/RuntimeAdapter.d.ts.map +1 -0
  63. package/dist/legacy-runtime/cloud/AssistantCloudThreadHistoryAdapter.d.ts +2 -2
  64. package/dist/legacy-runtime/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -0
  65. package/dist/legacy-runtime/runtime/AssistantRuntime.d.ts +3 -3
  66. package/dist/legacy-runtime/runtime/AssistantRuntime.d.ts.map +1 -0
  67. package/dist/legacy-runtime/runtime/AttachmentRuntime.d.ts +3 -3
  68. package/dist/legacy-runtime/runtime/AttachmentRuntime.d.ts.map +1 -0
  69. package/dist/legacy-runtime/runtime/ComposerRuntime.d.ts +4 -3
  70. package/dist/legacy-runtime/runtime/ComposerRuntime.d.ts.map +1 -0
  71. package/dist/legacy-runtime/runtime/RuntimeBindings.d.ts +3 -3
  72. package/dist/legacy-runtime/runtime/RuntimeBindings.d.ts.map +1 -0
  73. package/dist/legacy-runtime/runtime/RuntimePathTypes.d.ts +2 -2
  74. package/dist/legacy-runtime/runtime/RuntimePathTypes.d.ts.map +1 -0
  75. package/dist/legacy-runtime/runtime/ThreadListItemRuntime.d.ts +5 -3
  76. package/dist/legacy-runtime/runtime/ThreadListItemRuntime.d.ts.map +1 -0
  77. package/dist/legacy-runtime/runtime/ThreadRuntime.d.ts +4 -3
  78. package/dist/legacy-runtime/runtime/ThreadRuntime.d.ts.map +1 -0
  79. package/dist/legacy-runtime/runtime-cores/adapters/RuntimeAdapterProvider.d.ts +2 -2
  80. package/dist/legacy-runtime/runtime-cores/adapters/RuntimeAdapterProvider.d.ts.map +1 -0
  81. package/dist/legacy-runtime/runtime-cores/adapters/attachment/CloudFileAttachmentAdapter.d.ts +2 -2
  82. package/dist/legacy-runtime/runtime-cores/adapters/attachment/CloudFileAttachmentAdapter.d.ts.map +1 -0
  83. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.d.ts +2 -2
  84. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.d.ts.map +1 -0
  85. package/dist/legacy-runtime/runtime-cores/composer/DefaultEditComposerRuntimeCore.d.ts +2 -2
  86. package/dist/legacy-runtime/runtime-cores/composer/DefaultEditComposerRuntimeCore.d.ts.map +1 -0
  87. package/dist/legacy-runtime/runtime-cores/composer/DefaultThreadComposerRuntimeCore.d.ts +2 -2
  88. package/dist/legacy-runtime/runtime-cores/composer/DefaultThreadComposerRuntimeCore.d.ts.map +1 -0
  89. package/dist/legacy-runtime/runtime-cores/core/AssistantRuntimeCore.d.ts +2 -2
  90. package/dist/legacy-runtime/runtime-cores/core/AssistantRuntimeCore.d.ts.map +1 -0
  91. package/dist/legacy-runtime/runtime-cores/core/BaseAssistantRuntimeCore.d.ts +2 -2
  92. package/dist/legacy-runtime/runtime-cores/core/BaseAssistantRuntimeCore.d.ts.map +1 -0
  93. package/dist/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.d.ts +2 -2
  94. package/dist/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.d.ts.map +1 -0
  95. package/dist/legacy-runtime/runtime-cores/core/ComposerRuntimeCore.d.ts +2 -2
  96. package/dist/legacy-runtime/runtime-cores/core/ComposerRuntimeCore.d.ts.map +1 -0
  97. package/dist/legacy-runtime/runtime-cores/core/ThreadListRuntimeCore.d.ts +2 -2
  98. package/dist/legacy-runtime/runtime-cores/core/ThreadListRuntimeCore.d.ts.map +1 -0
  99. package/dist/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.d.ts +2 -2
  100. package/dist/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.d.ts.map +1 -0
  101. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.d.ts +2 -2
  102. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.d.ts.map +1 -0
  103. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreRuntimeCore.d.ts +2 -2
  104. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreRuntimeCore.d.ts.map +1 -0
  105. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadListRuntimeCore.d.ts +3 -2
  106. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -0
  107. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.d.ts +2 -2
  108. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -0
  109. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageConverter.d.ts +3 -2
  110. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageConverter.d.ts.map +1 -0
  111. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.d.ts +3 -3
  112. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.d.ts.map +1 -0
  113. package/dist/legacy-runtime/runtime-cores/external-store/auto-status.d.ts +2 -2
  114. package/dist/legacy-runtime/runtime-cores/external-store/auto-status.d.ts.map +1 -0
  115. package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.d.ts +2 -2
  116. package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.d.ts.map +1 -0
  117. package/dist/legacy-runtime/runtime-cores/external-store/external-message-converter.d.ts +2 -2
  118. package/dist/legacy-runtime/runtime-cores/external-store/external-message-converter.d.ts.map +1 -0
  119. package/dist/legacy-runtime/runtime-cores/external-store/useExternalStoreRuntime.d.ts +2 -2
  120. package/dist/legacy-runtime/runtime-cores/external-store/useExternalStoreRuntime.d.ts.map +1 -0
  121. package/dist/legacy-runtime/runtime-cores/local/ChatModelAdapter.d.ts +2 -2
  122. package/dist/legacy-runtime/runtime-cores/local/ChatModelAdapter.d.ts.map +1 -0
  123. package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeCore.d.ts +2 -2
  124. package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeCore.d.ts.map +1 -0
  125. package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeOptions.d.ts +4 -3
  126. package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeOptions.d.ts.map +1 -0
  127. package/dist/legacy-runtime/runtime-cores/local/LocalThreadListRuntimeCore.d.ts +3 -2
  128. package/dist/legacy-runtime/runtime-cores/local/LocalThreadListRuntimeCore.d.ts.map +1 -0
  129. package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.d.ts +2 -2
  130. package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.d.ts.map +1 -0
  131. package/dist/legacy-runtime/runtime-cores/local/shouldContinue.d.ts +2 -2
  132. package/dist/legacy-runtime/runtime-cores/local/shouldContinue.d.ts.map +1 -0
  133. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.d.ts +2 -2
  134. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.d.ts.map +1 -0
  135. package/dist/legacy-runtime/runtime-cores/remote-thread-list/BaseSubscribable.d.ts +2 -2
  136. package/dist/legacy-runtime/runtime-cores/remote-thread-list/BaseSubscribable.d.ts.map +1 -0
  137. package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.d.ts +2 -2
  138. package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -0
  139. package/dist/legacy-runtime/runtime-cores/remote-thread-list/OptimisticState.d.ts +2 -2
  140. package/dist/legacy-runtime/runtime-cores/remote-thread-list/OptimisticState.d.ts.map +1 -0
  141. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +2 -2
  142. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -0
  143. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +2 -2
  144. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -0
  145. package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/cloud.d.ts +2 -2
  146. package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/cloud.d.ts.map +1 -0
  147. package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/in-memory.d.ts +2 -2
  148. package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/in-memory.d.ts.map +1 -0
  149. package/dist/legacy-runtime/runtime-cores/remote-thread-list/types.d.ts +2 -2
  150. package/dist/legacy-runtime/runtime-cores/remote-thread-list/types.d.ts.map +1 -0
  151. package/dist/legacy-runtime/runtime-cores/remote-thread-list/useRemoteThreadListRuntime.d.ts +2 -2
  152. package/dist/legacy-runtime/runtime-cores/remote-thread-list/useRemoteThreadListRuntime.d.ts.map +1 -0
  153. package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.d.ts +4 -3
  154. package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.d.ts.map +1 -0
  155. package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.js +1 -1
  156. package/dist/mcp-apps/McpAppRenderer.d.ts +49 -51
  157. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  158. package/dist/mcp-apps/McpAppRenderer.js +2 -2
  159. package/dist/mcp-apps/McpAppsRemoteHost.d.ts +1 -3
  160. package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
  161. package/dist/mcp-apps/app-frame.d.ts +2 -4
  162. package/dist/mcp-apps/app-frame.d.ts.map +1 -1
  163. package/dist/mcp-apps/bridge.d.ts +11 -13
  164. package/dist/mcp-apps/bridge.d.ts.map +1 -1
  165. package/dist/mcp-apps/index.d.ts +5 -5
  166. package/dist/mcp-apps/index.d.ts.map +1 -0
  167. package/dist/mcp-apps/types.d.ts +95 -97
  168. package/dist/mcp-apps/types.d.ts.map +1 -1
  169. package/dist/mcp-apps/utils.d.ts +2 -3
  170. package/dist/mcp-apps/utils.d.ts.map +1 -1
  171. package/dist/model-context/frame/useAssistantFrameHost.d.ts +8 -8
  172. package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -1
  173. package/dist/model-context/frame/useAssistantFrameHost.js +1 -1
  174. package/dist/model-context/makeAssistantVisible.d.ts +4 -6
  175. package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
  176. package/dist/model-context/makeAssistantVisible.js +2 -2
  177. package/dist/primitives/actionBar/ActionBarCopy.d.ts +13 -14
  178. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  179. package/dist/primitives/actionBar/ActionBarCopy.js +1 -1
  180. package/dist/primitives/actionBar/ActionBarEdit.d.ts +10 -11
  181. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
  182. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +11 -12
  183. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
  184. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +4 -1
  185. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  186. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +6 -7
  187. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -1
  188. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +11 -9
  189. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  190. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +6 -7
  191. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -1
  192. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +11 -9
  193. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  194. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts +1 -3
  195. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts.map +1 -1
  196. package/dist/primitives/actionBar/ActionBarReload.d.ts +10 -11
  197. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
  198. package/dist/primitives/actionBar/ActionBarRoot.d.ts +49 -50
  199. package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
  200. package/dist/primitives/actionBar/ActionBarSpeak.d.ts +6 -7
  201. package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
  202. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +6 -7
  203. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
  204. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +8 -10
  205. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -1
  206. package/dist/primitives/actionBar.d.ts +9 -14
  207. package/dist/primitives/actionBar.d.ts.map +1 -1
  208. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +10 -12
  209. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -1
  210. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +7 -9
  211. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -1
  212. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +3 -5
  213. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -1
  214. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +7 -9
  215. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -1
  216. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +7 -9
  217. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -1
  218. package/dist/primitives/actionBarMore/scope.d.ts +4 -6
  219. package/dist/primitives/actionBarMore/scope.d.ts.map +1 -1
  220. package/dist/primitives/actionBarMore.d.ts +5 -10
  221. package/dist/primitives/actionBarMore.d.ts.map +1 -1
  222. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +7 -9
  223. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -1
  224. package/dist/primitives/assistantModal/AssistantModalContent.d.ts +12 -14
  225. package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
  226. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +5 -7
  227. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
  228. package/dist/primitives/assistantModal/AssistantModalRoot.js +1 -1
  229. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +7 -9
  230. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -1
  231. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts +7 -9
  232. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts.map +1 -1
  233. package/dist/primitives/assistantModal/scope.d.ts +4 -6
  234. package/dist/primitives/assistantModal/scope.d.ts.map +1 -1
  235. package/dist/primitives/assistantModal.d.ts +4 -9
  236. package/dist/primitives/assistantModal.d.ts.map +1 -1
  237. package/dist/primitives/attachment/AttachmentName.d.ts +2 -4
  238. package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -1
  239. package/dist/primitives/attachment/AttachmentRemove.d.ts +6 -7
  240. package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -1
  241. package/dist/primitives/attachment/AttachmentRemove.js +1 -1
  242. package/dist/primitives/attachment/AttachmentRoot.d.ts +10 -11
  243. package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
  244. package/dist/primitives/attachment/AttachmentThumb.d.ts +6 -7
  245. package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -1
  246. package/dist/primitives/attachment/AttachmentThumb.js +1 -1
  247. package/dist/primitives/attachment.d.ts +4 -9
  248. package/dist/primitives/attachment.d.ts.map +1 -1
  249. package/dist/primitives/branchPicker/BranchPickerCount.d.ts +6 -8
  250. package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -1
  251. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +10 -11
  252. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  253. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +2 -4
  254. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -1
  255. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +10 -11
  256. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  257. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +18 -20
  258. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
  259. package/dist/primitives/branchPicker/BranchPickerRoot.js +1 -1
  260. package/dist/primitives/branchPicker.d.ts +5 -10
  261. package/dist/primitives/branchPicker.d.ts.map +1 -1
  262. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +10 -11
  263. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
  264. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +1 -1
  265. package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -2
  266. package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -0
  267. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +6 -7
  268. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -1
  269. package/dist/primitives/chainOfThought.d.ts +3 -8
  270. package/dist/primitives/chainOfThought.d.ts.map +1 -1
  271. package/dist/primitives/composer/ComposerAddAttachment.d.ts +11 -12
  272. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
  273. package/dist/primitives/composer/ComposerAddAttachment.js +1 -1
  274. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +10 -11
  275. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
  276. package/dist/primitives/composer/ComposerAttachmentDropzone.js +9 -7
  277. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
  278. package/dist/primitives/composer/ComposerAttachments.d.ts +2 -2
  279. package/dist/primitives/composer/ComposerAttachments.d.ts.map +1 -0
  280. package/dist/primitives/composer/ComposerCancel.d.ts +10 -11
  281. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
  282. package/dist/primitives/composer/ComposerCompactContext.d.ts +1 -3
  283. package/dist/primitives/composer/ComposerCompactContext.d.ts.map +1 -1
  284. package/dist/primitives/composer/ComposerDictate.d.ts +6 -7
  285. package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -1
  286. package/dist/primitives/composer/ComposerDictationTranscript.d.ts +5 -7
  287. package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -1
  288. package/dist/primitives/composer/ComposerDictationTranscript.js +1 -1
  289. package/dist/primitives/composer/ComposerIf.d.ts +3 -2
  290. package/dist/primitives/composer/ComposerIf.d.ts.map +1 -0
  291. package/dist/primitives/composer/ComposerInput.d.ts +72 -74
  292. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  293. package/dist/primitives/composer/ComposerInput.js +3 -3
  294. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  295. package/dist/primitives/composer/ComposerInputPluginContext.d.ts +22 -24
  296. package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
  297. package/dist/primitives/composer/ComposerQueue.d.ts +2 -2
  298. package/dist/primitives/composer/ComposerQueue.d.ts.map +1 -0
  299. package/dist/primitives/composer/ComposerQuote.d.ts +13 -15
  300. package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -1
  301. package/dist/primitives/composer/ComposerQuote.js +1 -1
  302. package/dist/primitives/composer/ComposerRoot.d.ts +26 -28
  303. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
  304. package/dist/primitives/composer/ComposerRoot.js +1 -1
  305. package/dist/primitives/composer/ComposerSend.d.ts +9 -11
  306. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  307. package/dist/primitives/composer/ComposerStopDictation.d.ts +6 -7
  308. package/dist/primitives/composer/ComposerStopDictation.d.ts.map +1 -1
  309. package/dist/primitives/composer/ComposerStopDictation.js +1 -1
  310. package/dist/primitives/composer/trigger/TriggerPopover.d.ts +27 -29
  311. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
  312. package/dist/primitives/composer/trigger/TriggerPopover.js +2 -2
  313. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +10 -12
  314. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -1
  315. package/dist/primitives/composer/trigger/TriggerPopoverAction.js +1 -1
  316. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts +5 -7
  317. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -1
  318. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts +16 -18
  319. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -1
  320. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +8 -10
  321. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -1
  322. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +1 -1
  323. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts +18 -20
  324. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -1
  325. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +41 -43
  326. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
  327. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +27 -28
  328. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -1
  329. package/dist/primitives/composer/trigger/detectTrigger.d.ts +3 -5
  330. package/dist/primitives/composer/trigger/detectTrigger.d.ts.map +1 -1
  331. package/dist/primitives/composer/trigger/index.d.ts +15 -18
  332. package/dist/primitives/composer/trigger/index.d.ts.map +1 -1
  333. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts +1 -3
  334. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts.map +1 -1
  335. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +10 -12
  336. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -1
  337. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +22 -24
  338. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -1
  339. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +18 -20
  340. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
  341. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +23 -25
  342. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
  343. package/dist/primitives/composer/useComposerInputState.d.ts +4 -6
  344. package/dist/primitives/composer/useComposerInputState.d.ts.map +1 -1
  345. package/dist/primitives/composer.d.ts +31 -25
  346. package/dist/primitives/composer.d.ts.map +1 -1
  347. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +9 -11
  348. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -1
  349. package/dist/primitives/error/ErrorMessage.d.ts +5 -7
  350. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
  351. package/dist/primitives/error/ErrorRoot.d.ts +5 -7
  352. package/dist/primitives/error/ErrorRoot.d.ts.map +1 -1
  353. package/dist/primitives/error.d.ts +2 -7
  354. package/dist/primitives/error.d.ts.map +1 -1
  355. package/dist/primitives/message/MessageAttachments.d.ts +2 -2
  356. package/dist/primitives/message/MessageAttachments.d.ts.map +1 -0
  357. package/dist/primitives/message/MessageError.d.ts +1 -3
  358. package/dist/primitives/message/MessageError.d.ts.map +1 -1
  359. package/dist/primitives/message/MessageIf.d.ts +15 -16
  360. package/dist/primitives/message/MessageIf.d.ts.map +1 -1
  361. package/dist/primitives/message/MessageIf.js +6 -3
  362. package/dist/primitives/message/MessageIf.js.map +1 -1
  363. package/dist/primitives/message/MessageParts.d.ts +4 -6
  364. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  365. package/dist/primitives/message/MessagePartsGrouped.d.ts +132 -133
  366. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  367. package/dist/primitives/message/MessagePartsGrouped.js +103 -71
  368. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  369. package/dist/primitives/message/MessageRoot.d.ts +5 -7
  370. package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
  371. package/dist/primitives/message/MessageRoot.js +6 -2
  372. package/dist/primitives/message/MessageRoot.js.map +1 -1
  373. package/dist/primitives/message.d.ts +12 -12
  374. package/dist/primitives/message.d.ts.map +1 -1
  375. package/dist/primitives/messagePart/MessagePartImage.d.ts +9 -11
  376. package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -1
  377. package/dist/primitives/messagePart/MessagePartInProgress.d.ts +2 -2
  378. package/dist/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -0
  379. package/dist/primitives/messagePart/MessagePartText.d.ts +35 -37
  380. package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
  381. package/dist/primitives/messagePart/useMessagePartData.d.ts +1 -3
  382. package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -1
  383. package/dist/primitives/messagePart/useMessagePartFile.d.ts +2 -4
  384. package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -1
  385. package/dist/primitives/messagePart/useMessagePartImage.d.ts +2 -4
  386. package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -1
  387. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +2 -4
  388. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -1
  389. package/dist/primitives/messagePart/useMessagePartSource.d.ts +19 -21
  390. package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -1
  391. package/dist/primitives/messagePart/useMessagePartText.d.ts +3 -5
  392. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -1
  393. package/dist/primitives/messagePart.d.ts +4 -9
  394. package/dist/primitives/messagePart.d.ts.map +1 -1
  395. package/dist/primitives/queueItem/QueueItemRemove.d.ts +6 -7
  396. package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -1
  397. package/dist/primitives/queueItem/QueueItemRemove.js +1 -1
  398. package/dist/primitives/queueItem/QueueItemSteer.d.ts +6 -7
  399. package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -1
  400. package/dist/primitives/queueItem/QueueItemSteer.js +1 -1
  401. package/dist/primitives/queueItem/QueueItemText.d.ts +5 -7
  402. package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -1
  403. package/dist/primitives/queueItem/QueueItemText.js +1 -1
  404. package/dist/primitives/queueItem.d.ts +3 -8
  405. package/dist/primitives/queueItem.d.ts.map +1 -1
  406. package/dist/primitives/reasoning/useScrollLock.d.ts +1 -3
  407. package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -1
  408. package/dist/primitives/reasoning/useScrollLock.js +14 -15
  409. package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
  410. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +5 -7
  411. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -1
  412. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +1 -1
  413. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +12 -13
  414. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -1
  415. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +81 -42
  416. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  417. package/dist/primitives/selectionToolbar.d.ts +2 -7
  418. package/dist/primitives/selectionToolbar.d.ts.map +1 -1
  419. package/dist/primitives/suggestion/SuggestionDescription.d.ts +5 -7
  420. package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -1
  421. package/dist/primitives/suggestion/SuggestionDescription.js +1 -1
  422. package/dist/primitives/suggestion/SuggestionTitle.d.ts +5 -7
  423. package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -1
  424. package/dist/primitives/suggestion/SuggestionTitle.js +1 -1
  425. package/dist/primitives/suggestion/SuggestionTrigger.d.ts +35 -36
  426. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
  427. package/dist/primitives/suggestion.d.ts +3 -8
  428. package/dist/primitives/suggestion.d.ts.map +1 -1
  429. package/dist/primitives/thread/ThreadEmpty.d.ts +2 -4
  430. package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -1
  431. package/dist/primitives/thread/ThreadIf.d.ts +7 -8
  432. package/dist/primitives/thread/ThreadIf.d.ts.map +1 -1
  433. package/dist/primitives/thread/ThreadMessages.d.ts +2 -2
  434. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -0
  435. package/dist/primitives/thread/ThreadRoot.d.ts +12 -13
  436. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  437. package/dist/primitives/thread/ThreadRoot.js +57 -30
  438. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  439. package/dist/primitives/thread/ThreadRootElementContext.d.ts +4 -0
  440. package/dist/primitives/thread/ThreadRootElementContext.d.ts.map +1 -0
  441. package/dist/primitives/thread/ThreadRootElementContext.js +11 -0
  442. package/dist/primitives/thread/ThreadRootElementContext.js.map +1 -0
  443. package/dist/primitives/thread/ThreadScrollToBottom.d.ts +11 -13
  444. package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -1
  445. package/dist/primitives/thread/ThreadSuggestion.d.ts +47 -48
  446. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  447. package/dist/primitives/thread/ThreadSuggestions.d.ts +2 -2
  448. package/dist/primitives/thread/ThreadSuggestions.d.ts.map +1 -0
  449. package/dist/primitives/thread/ThreadViewport.d.ts +88 -90
  450. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  451. package/dist/primitives/thread/ThreadViewport.js +1 -1
  452. package/dist/primitives/thread/ThreadViewportFooter.d.ts +5 -7
  453. package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
  454. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +6 -8
  455. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -1
  456. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts +2 -4
  457. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -1
  458. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts +16 -18
  459. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -1
  460. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js +55 -6
  461. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -1
  462. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +10 -11
  463. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -1
  464. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts +0 -2
  465. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -1
  466. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts +0 -2
  467. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -1
  468. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +29 -31
  469. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  470. package/dist/primitives/thread/useThreadViewportAutoScroll.js +16 -1
  471. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  472. package/dist/primitives/thread.d.ts +12 -15
  473. package/dist/primitives/thread.d.ts.map +1 -1
  474. package/dist/primitives/threadList/ThreadListItems.d.ts +2 -2
  475. package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -0
  476. package/dist/primitives/threadList/ThreadListLoadMore.d.ts +6 -7
  477. package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -1
  478. package/dist/primitives/threadList/ThreadListNew.d.ts +5 -7
  479. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
  480. package/dist/primitives/threadList/ThreadListNew.js +1 -1
  481. package/dist/primitives/threadList/ThreadListRoot.d.ts +6 -7
  482. package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -1
  483. package/dist/primitives/threadList.d.ts +5 -9
  484. package/dist/primitives/threadList.d.ts.map +1 -1
  485. package/dist/primitives/threadListFocusGroup.d.ts +14 -16
  486. package/dist/primitives/threadListFocusGroup.d.ts.map +1 -1
  487. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +6 -7
  488. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
  489. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +6 -7
  490. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
  491. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +6 -7
  492. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
  493. package/dist/primitives/threadListItem/ThreadListItemRoot.js +2 -1
  494. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  495. package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -2
  496. package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -0
  497. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +6 -7
  498. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
  499. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +6 -7
  500. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
  501. package/dist/primitives/threadListItem.d.ts +6 -11
  502. package/dist/primitives/threadListItem.d.ts.map +1 -1
  503. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +10 -12
  504. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -1
  505. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +1 -0
  506. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
  507. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +7 -9
  508. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -1
  509. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +11 -13
  510. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -1
  511. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +7 -9
  512. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -1
  513. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +7 -9
  514. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -1
  515. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +1 -0
  516. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
  517. package/dist/primitives/threadListItemMore/scope.d.ts +4 -6
  518. package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -1
  519. package/dist/primitives/threadListItemMore.d.ts +5 -10
  520. package/dist/primitives/threadListItemMore.d.ts.map +1 -1
  521. package/dist/sandbox-host/SandboxHost.d.ts +24 -26
  522. package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
  523. package/dist/unstable/useComposerInput.d.ts +32 -34
  524. package/dist/unstable/useComposerInput.d.ts.map +1 -1
  525. package/dist/unstable/useComposerInput.js +1 -1
  526. package/dist/unstable/useComposerInputHistory.d.ts +3 -5
  527. package/dist/unstable/useComposerInputHistory.d.ts.map +1 -1
  528. package/dist/unstable/useComposerInputHistory.js +2 -2
  529. package/dist/unstable/useLiveCompletionAdapter.d.ts +18 -20
  530. package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -1
  531. package/dist/unstable/useMentionAdapter.d.ts +57 -59
  532. package/dist/unstable/useMentionAdapter.d.ts.map +1 -1
  533. package/dist/unstable/useMentionAdapter.js +1 -1
  534. package/dist/unstable/useMessageStallDetection.d.ts +10 -12
  535. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -1
  536. package/dist/unstable/useMessageStallDetection.js +1 -1
  537. package/dist/unstable/useModelContextSnapshot.d.ts +13 -15
  538. package/dist/unstable/useModelContextSnapshot.d.ts.map +1 -1
  539. package/dist/unstable/useSlashCommandAdapter.d.ts +20 -22
  540. package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
  541. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +8 -9
  542. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -1
  543. package/dist/unstable/webmcp/WebMcpRegistrationResource.js +27 -39
  544. package/dist/unstable/webmcp/WebMcpRegistrationResource.js.map +1 -1
  545. package/dist/unstable/webmcp/convertTools.d.ts +5 -7
  546. package/dist/unstable/webmcp/convertTools.d.ts.map +1 -1
  547. package/dist/unstable/webmcp/convertTools.js +2 -2
  548. package/dist/unstable/webmcp/convertTools.js.map +1 -1
  549. package/dist/unstable/webmcp/useWebMcpProvider.d.ts +4 -6
  550. package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -1
  551. package/dist/unstable/webmcp/useWebMcpProvider.js +22 -13
  552. package/dist/unstable/webmcp/useWebMcpProvider.js.map +1 -1
  553. package/dist/unstable/webmcp/webmcp-host.d.ts +23 -25
  554. package/dist/unstable/webmcp/webmcp-host.d.ts.map +1 -1
  555. package/dist/utils/Primitive.d.ts +91 -92
  556. package/dist/utils/Primitive.d.ts.map +1 -1
  557. package/dist/utils/RequireAtLeastOne.d.ts +3 -3
  558. package/dist/utils/RequireAtLeastOne.d.ts.map +1 -1
  559. package/dist/utils/createActionButton.d.ts +5 -6
  560. package/dist/utils/createActionButton.d.ts.map +1 -1
  561. package/dist/utils/getSelectionMessageId.d.ts +1 -3
  562. package/dist/utils/getSelectionMessageId.d.ts.map +1 -1
  563. package/dist/utils/getSelectionMessageId.js +2 -1
  564. package/dist/utils/getSelectionMessageId.js.map +1 -1
  565. package/dist/utils/hooks/useManagedRef.d.ts +0 -2
  566. package/dist/utils/hooks/useManagedRef.d.ts.map +1 -1
  567. package/dist/utils/hooks/useMediaQuery.d.ts +0 -2
  568. package/dist/utils/hooks/useMediaQuery.d.ts.map +1 -1
  569. package/dist/utils/hooks/useOnResizeContent.d.ts +0 -2
  570. package/dist/utils/hooks/useOnResizeContent.d.ts.map +1 -1
  571. package/dist/utils/hooks/useOnScrollToBottom.d.ts +1 -3
  572. package/dist/utils/hooks/useOnScrollToBottom.d.ts.map +1 -1
  573. package/dist/utils/hooks/useSizeHandle.d.ts +1 -3
  574. package/dist/utils/hooks/useSizeHandle.d.ts.map +1 -1
  575. package/dist/utils/smooth/SmoothContext.d.ts +105 -107
  576. package/dist/utils/smooth/SmoothContext.d.ts.map +1 -1
  577. package/dist/utils/smooth/SmoothContext.js +1 -1
  578. package/dist/utils/smooth/useSmooth.d.ts +26 -28
  579. package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
  580. package/dist/utils/smooth/useSmooth.js +1 -1
  581. package/package.json +12 -9
  582. package/src/assistant-transport.ts +5 -4
  583. package/src/cloud-renderer/CloudRendererHost.test.tsx +362 -0
  584. package/src/cloud-renderer/CloudRendererHost.tsx +249 -0
  585. package/src/index.ts +29 -1
  586. package/src/primitives/actionBar/ActionBarExportMarkdown.test.tsx +30 -0
  587. package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +4 -0
  588. package/src/primitives/actionBar/ActionBarFeedback.test.tsx +87 -0
  589. package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +1 -0
  590. package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +1 -0
  591. package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +54 -0
  592. package/src/primitives/composer/ComposerAttachmentDropzone.tsx +12 -6
  593. package/src/primitives/composer/ComposerInput.test.tsx +18 -0
  594. package/src/primitives/composer/ComposerInput.tsx +8 -2
  595. package/src/primitives/message/MessageIf.test.tsx +72 -0
  596. package/src/primitives/message/MessageIf.ts +8 -3
  597. package/src/primitives/message/MessagePartsGrouped.test.tsx +151 -4
  598. package/src/primitives/message/MessagePartsGrouped.tool-interaction.test.tsx +97 -0
  599. package/src/primitives/message/MessagePartsGrouped.tsx +14 -5
  600. package/src/primitives/message/MessageRoot.test.tsx +108 -0
  601. package/src/primitives/message/MessageRoot.tsx +5 -1
  602. package/src/primitives/reasoning/useScrollLock.test.tsx +47 -0
  603. package/src/primitives/reasoning/useScrollLock.ts +15 -17
  604. package/src/primitives/selectionToolbar/SelectionToolbarRoot.test.tsx +228 -14
  605. package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +60 -12
  606. package/src/primitives/thread/ThreadRoot.test.tsx +130 -0
  607. package/src/primitives/thread/ThreadRoot.tsx +39 -3
  608. package/src/primitives/thread/ThreadRootElementContext.ts +10 -0
  609. package/src/primitives/thread/topAnchor/mountTopAnchorReserve.test.ts +196 -0
  610. package/src/primitives/thread/topAnchor/mountTopAnchorReserve.ts +78 -5
  611. package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +222 -0
  612. package/src/primitives/thread/useThreadViewportAutoScroll.ts +37 -2
  613. package/src/primitives/threadListItem/ThreadListItemRoot.tsx +2 -0
  614. package/src/primitives/threadListItem/ThreadListKeyboardNav.test.tsx +65 -0
  615. package/src/primitives/threadListItemMore/ThreadListItemMoreContent.tsx +7 -0
  616. package/src/primitives/threadListItemMore/ThreadListItemMoreTrigger.tsx +2 -0
  617. package/src/tests/RemoteThreadListRuntime.reloadMainThread.test.tsx +8 -13
  618. package/src/tests/augmentations.test.ts +7 -0
  619. package/src/tests/remote-thread-list-test-helpers.ts +15 -0
  620. package/src/tests/threadListItemIsRunning.test.tsx +10 -7
  621. package/src/unstable/webmcp/WebMcpRegistrationResource.ts +9 -8
  622. package/src/unstable/webmcp/convertTools.test.ts +23 -3
  623. package/src/unstable/webmcp/convertTools.ts +7 -11
  624. package/src/unstable/webmcp/useWebMcpProvider.test.tsx +36 -2
  625. package/src/unstable/webmcp/useWebMcpProvider.ts +40 -13
  626. package/src/utils/getSelectionMessageId.test.ts +28 -0
  627. package/src/utils/getSelectionMessageId.ts +7 -1
  628. package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -5
  629. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +0 -1
  630. package/dist/tests/remote-thread-list-test-helpers.js +0 -29
  631. package/dist/tests/remote-thread-list-test-helpers.js.map +0 -1
  632. package/dist/tests/setup.d.ts +0 -1
  633. package/dist/tests/setup.js +0 -6
  634. package/dist/tests/setup.js.map +0 -1
@@ -61,13 +61,67 @@ export const mountTopAnchorReserve = (store: TopAnchorStore) => {
61
61
  let reserve: HTMLElement | null = null;
62
62
  let lastScrolledAnchorId: string | undefined;
63
63
 
64
+ let listenedViewport: HTMLElement | null = null;
65
+ let lastScrollTop = 0;
66
+ let restoreScrollTop: number | null = null;
67
+ let restoredThisTurn = false;
68
+ let lastAppliedTarget: number | null = null;
69
+
70
+ const clearRestore = () => {
71
+ restoreScrollTop = null;
72
+ lastAppliedTarget = null;
73
+ };
74
+
75
+ const wasPinnedAtLastScroll = () =>
76
+ lastAppliedTarget !== null &&
77
+ Math.abs(lastScrollTop - lastAppliedTarget) <= 1;
78
+
79
+ const handleScroll = () => {
80
+ const viewport = listenedViewport;
81
+ if (!viewport) return;
82
+ const scrollTop = viewport.scrollTop;
83
+ const maxScrollTop = Math.max(
84
+ 0,
85
+ viewport.scrollHeight - viewport.clientHeight,
86
+ );
87
+ // A range clamp starts beyond the new maximum and lands on it.
88
+ const isRangeClamp =
89
+ scrollTop < lastScrollTop &&
90
+ lastScrollTop > maxScrollTop + 1 &&
91
+ Math.abs(scrollTop - maxScrollTop) <= 1;
92
+
93
+ if (isRangeClamp && wasPinnedAtLastScroll() && !restoredThisTurn) {
94
+ restoreScrollTop ??= lastScrollTop;
95
+ scheduler.schedule();
96
+ }
97
+
98
+ lastScrollTop = scrollTop;
99
+ };
100
+
101
+ const listenViewport = (viewport: HTMLElement | null) => {
102
+ if (listenedViewport === viewport) return;
103
+ if (listenedViewport) {
104
+ listenedViewport.removeEventListener("scroll", handleScroll);
105
+ }
106
+ listenedViewport = viewport;
107
+ restoredThisTurn = false;
108
+ clearRestore();
109
+ if (viewport) {
110
+ viewport.addEventListener("scroll", handleScroll, { passive: true });
111
+ lastScrollTop = viewport.scrollTop;
112
+ }
113
+ };
114
+
64
115
  function apply() {
65
116
  const state = store.getState();
66
117
  const { viewport, anchor, target } = state.element;
67
118
  const clamp = state.targetConfig;
68
119
 
120
+ listenViewport(state.turnAnchor === "top" ? viewport : null);
121
+
69
122
  if (state.turnAnchor !== "top" || !viewport) {
70
123
  observers.disconnect();
124
+ clearRestore();
71
125
  if (reserve) {
72
126
  setReserveHeight(reserve, 0);
73
127
  reserve.remove();
@@ -80,6 +134,7 @@ export const mountTopAnchorReserve = (store: TopAnchorStore) => {
80
134
  // trailing turn (followed at most by pending user messages), so reaching
81
135
  // here means the anchor gap is transient and the next run is imminent.
82
136
  observers.disconnect();
137
+ clearRestore();
83
138
  if (
84
139
  reserve?.parentElement &&
85
140
  reserve.parentElement.lastElementChild !== reserve
@@ -91,6 +146,7 @@ export const mountTopAnchorReserve = (store: TopAnchorStore) => {
91
146
 
92
147
  if (!anchor || !target || !clamp) {
93
148
  observers.disconnect();
149
+ clearRestore();
94
150
  if (reserve) {
95
151
  setReserveHeight(reserve, 0);
96
152
  reserve.remove();
@@ -120,17 +176,33 @@ export const mountTopAnchorReserve = (store: TopAnchorStore) => {
120
176
  }
121
177
 
122
178
  const anchorId = getAnchorId(anchor);
123
- if (anchorId !== undefined && lastScrolledAnchorId === anchorId) return;
124
-
125
179
  const targetScrollTop = snapScrollTop(
126
180
  computeTopAnchorTargetScrollTop({ viewport, anchor, ...clamp }),
127
181
  );
128
182
 
129
- if (Math.abs(viewport.scrollTop - targetScrollTop) > 1) {
130
- viewport.scrollTo({ top: targetScrollTop, behavior: "smooth" });
183
+ if (anchorId === undefined || anchorId !== lastScrolledAnchorId) {
184
+ restoreScrollTop = null;
185
+ restoredThisTurn = false;
186
+ if (Math.abs(viewport.scrollTop - targetScrollTop) > 1) {
187
+ viewport.scrollTo({ top: targetScrollTop, behavior: "smooth" });
188
+ }
189
+ if (anchorId !== undefined) lastScrolledAnchorId = anchorId;
190
+ } else if (restoreScrollTop !== null && lastAppliedTarget !== null) {
191
+ // Restore the anchor-relative position: if content above the anchor
192
+ // changed height and the browser already adjusted scrollTop to match
193
+ // (scroll anchoring), the desired offset equals the current one and
194
+ // this is a no-op.
195
+ const desired = snapScrollTop(
196
+ restoreScrollTop + (targetScrollTop - lastAppliedTarget),
197
+ );
198
+ restoreScrollTop = null;
199
+ restoredThisTurn = true;
200
+ if (Math.abs(viewport.scrollTop - desired) > 1) {
201
+ viewport.scrollTo({ top: desired, behavior: "instant" });
202
+ }
131
203
  }
132
204
 
133
- if (anchorId !== undefined) lastScrolledAnchorId = anchorId;
205
+ lastAppliedTarget = targetScrollTop;
134
206
  }
135
207
 
136
208
  const scheduler = createFrameScheduler(apply);
@@ -143,6 +215,7 @@ export const mountTopAnchorReserve = (store: TopAnchorStore) => {
143
215
  scheduler.cancel();
144
216
  unsubscribe();
145
217
  observers.disconnect();
218
+ listenViewport(null);
146
219
  reserve?.remove();
147
220
  };
148
221
  };
@@ -182,6 +182,16 @@ const Thread = ({
182
182
  >
183
183
  <ThreadPrimitiveMessages components={{ Message }} />
184
184
  <AtBottom />
185
+ {/* The canonical Thread renders its composer inside the viewport, so
186
+ composer keystrokes bubble to the viewport's keydown listener. */}
187
+ <textarea data-testid="composer" />
188
+ {/* An input that activates on a key, and a `contenteditable="false"`
189
+ element in message content, both act on content rather than accept
190
+ text. Neither is a text-entry surface. */}
191
+ <input type="checkbox" data-testid="checkbox" />
192
+ <span contentEditable={false} data-testid="readonly-island" tabIndex={0}>
193
+ tool call
194
+ </span>
185
195
  </ThreadPrimitiveViewport>
186
196
  </ThreadPrimitiveRoot>
187
197
  );
@@ -410,6 +420,218 @@ describe("useThreadViewportAutoScroll", () => {
410
420
  expect(screen.getByTestId("is-at-bottom").textContent).toBe("true");
411
421
  });
412
422
 
423
+ it.each([
424
+ { label: "pointerdown", make: () => new Event("pointerdown") },
425
+ {
426
+ label: "Enter keydown",
427
+ make: () => new KeyboardEvent("keydown", { key: "Enter" }),
428
+ },
429
+ {
430
+ label: "Space keydown",
431
+ make: () => new KeyboardEvent("keydown", { key: " " }),
432
+ },
433
+ ])(
434
+ "drops pending bottom-scroll intent after a $label in a thread that cannot scroll",
435
+ async ({ make }) => {
436
+ // the viewport never overflows, so handleScroll keeps the intent alive
437
+ forceShortViewportMeasurement = true;
438
+
439
+ render(
440
+ <AsyncRuntimeProvider>
441
+ <Thread />
442
+ </AsyncRuntimeProvider>,
443
+ );
444
+
445
+ await waitFor(() => {
446
+ expect(screen.getAllByTestId("thread-message")).toHaveLength(
447
+ messages.length,
448
+ );
449
+ });
450
+ await new Promise((resolve) => setTimeout(resolve, 0));
451
+ expect(getViewport().scrollTop).toBe(0);
452
+
453
+ // the user activates something in the thread, e.g. a collapsible tool call
454
+ act(() => {
455
+ getViewport().dispatchEvent(make());
456
+ });
457
+
458
+ // that activation grows the content
459
+ forceShortViewportMeasurement = false;
460
+ act(notifyResizeObservers);
461
+
462
+ expect(getViewport().scrollTop).toBe(0);
463
+ },
464
+ );
465
+
466
+ it.each([
467
+ { label: "pointerdown", make: () => new Event("pointerdown") },
468
+ {
469
+ label: "Enter keydown",
470
+ make: () => new KeyboardEvent("keydown", { key: "Enter" }),
471
+ },
472
+ {
473
+ label: "Space keydown",
474
+ make: () => new KeyboardEvent("keydown", { key: " " }),
475
+ },
476
+ ])(
477
+ "cancels the frame a pending bottom scroll queued when a $label arrives first",
478
+ async ({ make }) => {
479
+ let nextFrameId = 0;
480
+ let pendingFrame: {
481
+ id: number;
482
+ callback: FrameRequestCallback;
483
+ } | null = null;
484
+ const originalRequestAnimationFrame = globalThis.requestAnimationFrame;
485
+ const originalCancelAnimationFrame = globalThis.cancelAnimationFrame;
486
+
487
+ vi.stubGlobal(
488
+ "requestAnimationFrame",
489
+ (callback: FrameRequestCallback) => {
490
+ const id = ++nextFrameId;
491
+ pendingFrame = { id, callback };
492
+ return id;
493
+ },
494
+ );
495
+ vi.stubGlobal(
496
+ "cancelAnimationFrame",
497
+ vi.fn((id: number) => {
498
+ if (pendingFrame?.id === id) pendingFrame = null;
499
+ }),
500
+ );
501
+
502
+ try {
503
+ render(
504
+ <SyncRuntimeProvider>
505
+ <BottomAnchorThread />
506
+ </SyncRuntimeProvider>,
507
+ );
508
+
509
+ const viewport = getViewport();
510
+ await waitFor(() => {
511
+ expect(screen.getAllByTestId("thread-message")).toHaveLength(
512
+ messages.length,
513
+ );
514
+ expect(pendingFrame).not.toBeNull();
515
+ });
516
+
517
+ // the gesture lands before the queued frame runs
518
+ act(() => {
519
+ viewport.dispatchEvent(make());
520
+ });
521
+
522
+ // clearing the ref alone would leave this frame to re-plant the intent
523
+ expect(pendingFrame).toBeNull();
524
+ } finally {
525
+ vi.stubGlobal("requestAnimationFrame", originalRequestAnimationFrame);
526
+ vi.stubGlobal("cancelAnimationFrame", originalCancelAnimationFrame);
527
+ }
528
+ },
529
+ );
530
+
531
+ it.each([
532
+ "Shift",
533
+ "Control",
534
+ "Meta",
535
+ "Tab",
536
+ "ArrowDown",
537
+ "PageDown",
538
+ "Escape",
539
+ "a",
540
+ ])("keeps pending bottom-scroll intent through a %s press", async (key) => {
541
+ forceShortViewportMeasurement = true;
542
+
543
+ render(
544
+ <AsyncRuntimeProvider>
545
+ <Thread />
546
+ </AsyncRuntimeProvider>,
547
+ );
548
+
549
+ await waitFor(() => {
550
+ expect(screen.getAllByTestId("thread-message")).toHaveLength(
551
+ messages.length,
552
+ );
553
+ });
554
+ await new Promise((resolve) => setTimeout(resolve, 0));
555
+
556
+ // neither an activation key nor consumed by a text field
557
+ act(() => {
558
+ getViewport().dispatchEvent(new KeyboardEvent("keydown", { key }));
559
+ });
560
+
561
+ forceShortViewportMeasurement = false;
562
+ act(notifyResizeObservers);
563
+
564
+ expect(getViewport().scrollTop).toBe(getMaxScrollTop(getViewport()));
565
+ });
566
+
567
+ it("keeps pending bottom-scroll intent while the user types in the composer", async () => {
568
+ forceShortViewportMeasurement = true;
569
+
570
+ render(
571
+ <AsyncRuntimeProvider>
572
+ <Thread />
573
+ </AsyncRuntimeProvider>,
574
+ );
575
+
576
+ await waitFor(() => {
577
+ expect(screen.getAllByTestId("thread-message")).toHaveLength(
578
+ messages.length,
579
+ );
580
+ });
581
+ await new Promise((resolve) => setTimeout(resolve, 0));
582
+
583
+ act(() => {
584
+ screen
585
+ .getByTestId("composer")
586
+ // Space is an activation key, so this reaches the text-entry check
587
+ // instead of short-circuiting on the allowlist
588
+ .dispatchEvent(
589
+ new KeyboardEvent("keydown", { key: " ", bubbles: true }),
590
+ );
591
+ });
592
+
593
+ forceShortViewportMeasurement = false;
594
+ act(notifyResizeObservers);
595
+
596
+ expect(getViewport().scrollTop).toBe(getMaxScrollTop(getViewport()));
597
+ });
598
+
599
+ it.each([
600
+ { label: "a checkbox", testid: "checkbox" },
601
+ { label: "a non-editable element", testid: "readonly-island" },
602
+ ])(
603
+ "drops pending bottom-scroll intent when a key activates $label",
604
+ async ({ testid }) => {
605
+ forceShortViewportMeasurement = true;
606
+
607
+ render(
608
+ <AsyncRuntimeProvider>
609
+ <Thread />
610
+ </AsyncRuntimeProvider>,
611
+ );
612
+
613
+ await waitFor(() => {
614
+ expect(screen.getAllByTestId("thread-message")).toHaveLength(
615
+ messages.length,
616
+ );
617
+ });
618
+ await new Promise((resolve) => setTimeout(resolve, 0));
619
+
620
+ act(() => {
621
+ screen
622
+ .getByTestId(testid)
623
+ .dispatchEvent(
624
+ new KeyboardEvent("keydown", { key: " ", bubbles: true }),
625
+ );
626
+ });
627
+
628
+ forceShortViewportMeasurement = false;
629
+ act(notifyResizeObservers);
630
+
631
+ expect(getViewport().scrollTop).toBe(0);
632
+ },
633
+ );
634
+
413
635
  it("cancels a queued bottom scroll when the user scrolls up", async () => {
414
636
  let nextFrameId = 0;
415
637
  let pendingFrame: {
@@ -14,6 +14,25 @@ import { useManagedRef } from "../../utils/hooks/useManagedRef";
14
14
  import { writableStore } from "../../context/ReadonlyStore";
15
15
  import { useThreadViewportStore } from "../../context/react/ThreadViewportContext";
16
16
 
17
+ // Enter and Space activate a focused control, which is how a collapsible tool
18
+ // call expands without a pointer event ever firing. No other key changes thread
19
+ // content: the keys that scroll the viewport reach handleScroll, which already
20
+ // clears the intent when the user scrolls up.
21
+ const ACTIVATION_KEYS = new Set(["Enter", " "]);
22
+
23
+ // A control that consumes the activation key itself instead of acting on thread
24
+ // content. `contenteditable="false"` marks a non-editable island inside an
25
+ // editable tree, so it is excluded the way ComposerRoot already excludes it;
26
+ // the input types left out are the ones a key activates rather than fills.
27
+ const TEXT_ENTRY_SELECTOR = [
28
+ "textarea",
29
+ "select",
30
+ "[contenteditable]:not([contenteditable='false'])",
31
+ "input:not([type='checkbox']):not([type='radio']):not([type='button'])" +
32
+ ":not([type='submit']):not([type='reset']):not([type='image'])" +
33
+ ":not([type='range']):not([type='file']):not([type='color'])",
34
+ ].join(", ");
35
+
17
36
  export namespace useThreadViewportAutoScroll {
18
37
  export type Options = {
19
38
  /**
@@ -203,17 +222,33 @@ export const useThreadViewportAutoScroll = <TElement extends HTMLElement>({
203
222
  });
204
223
 
205
224
  const scrollRef = useManagedRef<HTMLElement>((el) => {
206
- // A pointer gesture invalidates pending bottom-scroll intent; otherwise an
225
+ // A user gesture invalidates pending bottom-scroll intent; otherwise an
207
226
  // intent kept alive by a non-overflowing thread (see handleScroll) hijacks
208
- // the next content growth, e.g. expanding a collapsible tool call.
227
+ // the next content growth, e.g. expanding a collapsible tool call. Keyboard
228
+ // activation reaches that same content without ever emitting a pointer
229
+ // event, so it has to cancel the intent too.
209
230
  const cancelPendingScrollToBottom = () => {
231
+ // A scheduled frame re-plants the intent when it runs, so clearing the
232
+ // ref alone leaves the gesture undone.
233
+ cancelScheduledFrame();
210
234
  scrollingToBottomBehaviorRef.current = null;
211
235
  };
236
+ // The composer renders inside the viewport, so its keystrokes bubble here;
237
+ // only an activation key aimed at something other than a text field is a
238
+ // gesture on thread content.
239
+ const cancelOnKeyDown = (event: KeyboardEvent) => {
240
+ if (!ACTIVATION_KEYS.has(event.key)) return;
241
+ const target = event.target as Element | null;
242
+ if (target?.closest?.(TEXT_ENTRY_SELECTOR)) return;
243
+ cancelPendingScrollToBottom();
244
+ };
212
245
  el.addEventListener("scroll", handleScroll);
213
246
  el.addEventListener("pointerdown", cancelPendingScrollToBottom);
247
+ el.addEventListener("keydown", cancelOnKeyDown);
214
248
  return () => {
215
249
  el.removeEventListener("scroll", handleScroll);
216
250
  el.removeEventListener("pointerdown", cancelPendingScrollToBottom);
251
+ el.removeEventListener("keydown", cancelOnKeyDown);
217
252
  };
218
253
  });
219
254
 
@@ -40,6 +40,8 @@ export const ThreadListItemPrimitiveRoot = forwardRef<
40
40
  const direction = Direction.useDirection();
41
41
 
42
42
  const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {
43
+ if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
44
+ return;
43
45
  const forwardKey = direction === "rtl" ? "ArrowLeft" : "ArrowRight";
44
46
  const backKey = direction === "rtl" ? "ArrowRight" : "ArrowLeft";
45
47
  const trigger = triggerRef.current;
@@ -60,6 +60,36 @@ const menu = (): HTMLElement | null =>
60
60
  document.querySelector<HTMLElement>('[role="menu"]');
61
61
 
62
62
  describe("thread list keyboard navigation", () => {
63
+ it.each(["altKey", "ctrlKey", "metaKey", "shiftKey"])(
64
+ "leaves arrows modified with %s available to ancestor shortcuts",
65
+ (modifier) => {
66
+ const prevented: boolean[] = [];
67
+ const { container } = render(
68
+ <div onKeyDown={(event) => prevented.push(event.defaultPrevented)}>
69
+ <ThreadListPrimitiveRoot>
70
+ {[0, 1].map((i) => (
71
+ <ThreadListItemPrimitiveRoot key={i}>
72
+ <ThreadListItemPrimitiveTrigger>
73
+ item {i}
74
+ </ThreadListItemPrimitiveTrigger>
75
+ </ThreadListItemPrimitiveRoot>
76
+ ))}
77
+ </ThreadListPrimitiveRoot>
78
+ </div>,
79
+ );
80
+ const [first, second] = triggers(container);
81
+
82
+ first!.focus();
83
+ fireEvent.keyDown(first!, { key: "ArrowDown", [modifier]: true });
84
+ expect(document.activeElement).toBe(first);
85
+
86
+ second!.focus();
87
+ fireEvent.keyDown(second!, { key: "ArrowUp", [modifier]: true });
88
+ expect(document.activeElement).toBe(second);
89
+ expect(prevented).toEqual([false, false]);
90
+ },
91
+ );
92
+
63
93
  it("moves focus between items with the up/down arrows", () => {
64
94
  const { container } = render(
65
95
  <ThreadListPrimitiveRoot>
@@ -102,6 +132,41 @@ describe("thread list keyboard navigation", () => {
102
132
  expect(menu()).not.toBeNull();
103
133
  });
104
134
 
135
+ it.each(["altKey", "ctrlKey", "metaKey", "shiftKey"])(
136
+ "leaves the More menu closed on ArrowRight modified with %s",
137
+ (modifier) => {
138
+ const { more } = renderItem();
139
+
140
+ more.focus();
141
+ const unhandled = fireEvent.keyDown(more, {
142
+ key: "ArrowRight",
143
+ [modifier]: true,
144
+ });
145
+
146
+ expect(menu()).toBeNull();
147
+ expect(document.activeElement).toBe(more);
148
+ expect(unhandled).toBe(true);
149
+ },
150
+ );
151
+
152
+ it.each(["altKey", "ctrlKey", "metaKey", "shiftKey"])(
153
+ "leaves the More menu open on ArrowLeft modified with %s",
154
+ (modifier) => {
155
+ renderItem({ defaultOpen: true });
156
+ const content = menu()!;
157
+
158
+ content.focus();
159
+ const unhandled = fireEvent.keyDown(content, {
160
+ key: "ArrowLeft",
161
+ [modifier]: true,
162
+ });
163
+
164
+ expect(menu()).toBe(content);
165
+ expect(document.activeElement).toBe(content);
166
+ expect(unhandled).toBe(true);
167
+ },
168
+ );
169
+
105
170
  it.each(["ArrowLeft", "Escape"])(
106
171
  "closes the menu on %s and returns focus to the More button",
107
172
  (key) => {
@@ -54,6 +54,13 @@ export const ThreadListItemMorePrimitiveContent = forwardRef<
54
54
  {...props}
55
55
  onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {
56
56
  if (!sharedFocusGroup || event.key !== closeKey) return;
57
+ if (
58
+ event.altKey ||
59
+ event.ctrlKey ||
60
+ event.metaKey ||
61
+ event.shiftKey
62
+ )
63
+ return;
57
64
  event.preventDefault();
58
65
  setOpen(false);
59
66
  focus?.moreRef.current?.focus();
@@ -46,6 +46,8 @@ export const ThreadListItemMorePrimitiveTrigger = forwardRef<
46
46
  {...rest}
47
47
  onKeyDown={composeEventHandlers(rest.onKeyDown, (event) => {
48
48
  if (!sharedFocusGroup || event.key !== openKey) return;
49
+ if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
50
+ return;
49
51
  event.preventDefault();
50
52
  setOpen(true);
51
53
  })}
@@ -5,7 +5,10 @@ import { type FC, useEffect } from "react";
5
5
  import { describe, expect, it } from "vitest";
6
6
  import type { AssistantRuntime } from "@assistant-ui/core";
7
7
  import { useRemoteThreadListRuntime } from "@assistant-ui/core/react";
8
- import { makeAdapter } from "./remote-thread-list-test-helpers";
8
+ import {
9
+ makeAdapter,
10
+ settleOutsideAct,
11
+ } from "./remote-thread-list-test-helpers";
9
12
  import { useLocalRuntime } from "../legacy-runtime/runtime-cores/local/useLocalRuntime";
10
13
  import { AssistantRuntimeProvider } from "../context";
11
14
  import type { ChatModelAdapter } from "../index";
@@ -74,15 +77,11 @@ describe("threads.reloadMainThread", () => {
74
77
  const capture = await renderThreadList(mounts);
75
78
  const runtime = capture.runtime!;
76
79
 
77
- await act(async () => {
78
- await runtime.threads.switchToThread("t-1");
79
- });
80
+ await settleOutsideAct(() => runtime.threads.switchToThread("t-1"));
80
81
  const beforeReload = await settle(mounts);
81
82
  expect(beforeReload).toBeGreaterThan(0);
82
83
 
83
- await act(async () => {
84
- await runtime.threads.reloadMainThread();
85
- });
84
+ await settleOutsideAct(() => runtime.threads.reloadMainThread());
86
85
 
87
86
  await waitFor(() => expect(mounts.count).toBeGreaterThan(beforeReload));
88
87
  });
@@ -92,18 +91,14 @@ describe("threads.reloadMainThread", () => {
92
91
  const capture = await renderThreadList(mounts);
93
92
  const runtime = capture.runtime!;
94
93
 
95
- await act(async () => {
96
- await runtime.threads.switchToThread("t-1");
97
- });
94
+ await settleOutsideAct(() => runtime.threads.switchToThread("t-1"));
98
95
 
99
96
  const seen: boolean[] = [];
100
97
  const unsubscribe = runtime.threads.subscribe(() => {
101
98
  seen.push(runtime.threads.getState().mainThreadId === "t-1");
102
99
  });
103
100
 
104
- await act(async () => {
105
- await runtime.threads.reloadMainThread();
106
- });
101
+ await settleOutsideAct(() => runtime.threads.reloadMainThread());
107
102
  unsubscribe();
108
103
 
109
104
  expect(seen.length).toBeGreaterThan(0);
@@ -2,6 +2,7 @@ import { describe, expectTypeOf, it } from "vitest";
2
2
  import type { UserCommands, UserExternalState } from "../augmentations";
3
3
  import type {
4
4
  AssistantTransportCommand,
5
+ SendCommandsRequestBody,
5
6
  useAssistantTransportRuntime,
6
7
  useAssistantTransportSendCommand,
7
8
  useAssistantTransportState,
@@ -85,4 +86,10 @@ describe("Assistant augmentations", () => {
85
86
  >[0]["commands"][number]
86
87
  >();
87
88
  });
89
+
90
+ it("the react request body keeps the core request fields", () => {
91
+ expectTypeOf<Pick<SendCommandsRequestBody, "threadId">>().toEqualTypeOf<{
92
+ threadId?: string;
93
+ }>();
94
+ });
88
95
  });
@@ -1,3 +1,4 @@
1
+ import { act, waitFor } from "@testing-library/react";
1
2
  import { vi } from "vitest";
2
3
  import type { RemoteThreadListAdapter } from "../index";
3
4
 
@@ -31,3 +32,17 @@ export function makeAdapter(
31
32
  ...overrides,
32
33
  };
33
34
  }
35
+
36
+ // React 18's act holds renders until its callback settles, so a task that waits on a render starts inside act and settles outside it, where React can commit what the task waits on.
37
+ export async function settleOutsideAct<T>(task: () => Promise<T>): Promise<T> {
38
+ let pending!: Promise<T>;
39
+ await act(async () => {
40
+ pending = task();
41
+ pending.catch(() => {});
42
+ });
43
+ await waitFor(() => pending.then(settled, settled));
44
+ await act(async () => {});
45
+ return pending;
46
+ }
47
+
48
+ const settled = () => {};
@@ -5,7 +5,10 @@ import { type FC, useEffect, useReducer } from "react";
5
5
  import { describe, expect, it } from "vitest";
6
6
  import type { ThreadMessage } from "@assistant-ui/core";
7
7
  import { useRemoteThreadListRuntime } from "@assistant-ui/core/react";
8
- import { makeAdapter } from "./remote-thread-list-test-helpers";
8
+ import {
9
+ makeAdapter,
10
+ settleOutsideAct,
11
+ } from "./remote-thread-list-test-helpers";
9
12
  import { AssistantRuntimeProvider } from "../context";
10
13
  import * as ThreadListPrimitive from "../primitives/threadList";
11
14
  import {
@@ -172,9 +175,9 @@ describe("threadListItem.isRunning", () => {
172
175
  });
173
176
  await waitFor(() => expect(screen.getByTestId("item-t-1")).toBeTruthy());
174
177
 
175
- await act(async () => {
176
- await capture.runtime!.threads.switchToThread("t-1");
177
- });
178
+ await settleOutsideAct(() =>
179
+ capture.runtime!.threads.switchToThread("t-1"),
180
+ );
178
181
  await act(async () => {
179
182
  setRunning("t-1", true);
180
183
  });
@@ -182,9 +185,9 @@ describe("threadListItem.isRunning", () => {
182
185
  expect(screen.getByTestId("item-t-1").textContent).toBe("running"),
183
186
  );
184
187
 
185
- await act(async () => {
186
- await capture.runtime!.threads.switchToThread("t-2");
187
- });
188
+ await settleOutsideAct(() =>
189
+ capture.runtime!.threads.switchToThread("t-2"),
190
+ );
188
191
 
189
192
  expect(screen.getByTestId("item-t-1").textContent).toBe("running");
190
193
  expect(screen.getByTestId("item-t-2").textContent).toBe("idle");