@assistant-ui/react 0.15.21 → 0.15.22

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 (610) hide show
  1. package/README.md +1 -1
  2. package/dist/assistant-transport.d.ts +24 -24
  3. package/dist/assistant-transport.d.ts.map +1 -1
  4. package/dist/assistant-transport.js.map +1 -1
  5. package/dist/augmentations.d.ts +28 -5
  6. package/dist/augmentations.d.ts.map +1 -1
  7. package/dist/cloud-renderer/CloudRendererHost.d.ts +13 -0
  8. package/dist/cloud-renderer/CloudRendererHost.d.ts.map +1 -0
  9. package/dist/cloud-renderer/CloudRendererHost.js +291 -0
  10. package/dist/cloud-renderer/CloudRendererHost.js.map +1 -0
  11. package/dist/context/ReadonlyStore.d.ts +1 -3
  12. package/dist/context/ReadonlyStore.d.ts.map +1 -1
  13. package/dist/context/index.d.ts +13 -13
  14. package/dist/context/index.d.ts.map +1 -0
  15. package/dist/context/providers/AttachmentByIndexProvider.d.ts +2 -2
  16. package/dist/context/providers/AttachmentByIndexProvider.d.ts.map +1 -0
  17. package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts +2 -2
  18. package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -0
  19. package/dist/context/providers/ChainOfThoughtPartByIndexProvider.d.ts +2 -2
  20. package/dist/context/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -0
  21. package/dist/context/providers/MessageByIndexProvider.d.ts +2 -2
  22. package/dist/context/providers/MessageByIndexProvider.d.ts.map +1 -0
  23. package/dist/context/providers/MessageProvider.d.ts +2 -4
  24. package/dist/context/providers/MessageProvider.d.ts.map +1 -1
  25. package/dist/context/providers/PartByIndexProvider.d.ts +2 -2
  26. package/dist/context/providers/PartByIndexProvider.d.ts.map +1 -0
  27. package/dist/context/providers/SuggestionByIndexProvider.d.ts +2 -2
  28. package/dist/context/providers/SuggestionByIndexProvider.d.ts.map +1 -0
  29. package/dist/context/providers/TextMessagePartProvider.d.ts +2 -2
  30. package/dist/context/providers/TextMessagePartProvider.d.ts.map +1 -0
  31. package/dist/context/providers/ThreadListItemProvider.d.ts +2 -2
  32. package/dist/context/providers/ThreadListItemProvider.d.ts.map +1 -0
  33. package/dist/context/providers/ThreadViewportProvider.d.ts +3 -5
  34. package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -1
  35. package/dist/context/react/ThreadViewportContext.d.ts +17 -19
  36. package/dist/context/react/ThreadViewportContext.d.ts.map +1 -1
  37. package/dist/context/react/utils/createContextHook.d.ts +2 -4
  38. package/dist/context/react/utils/createContextHook.d.ts.map +1 -1
  39. package/dist/context/react/utils/createContextStoreHook.d.ts +15 -17
  40. package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
  41. package/dist/context/stores/ThreadViewport.d.ts +72 -74
  42. package/dist/context/stores/ThreadViewport.d.ts.map +1 -1
  43. package/dist/devtools/DevToolsHooks.d.ts +19 -20
  44. package/dist/devtools/DevToolsHooks.d.ts.map +1 -1
  45. package/dist/hooks/useMessageQuote.d.ts +1 -3
  46. package/dist/hooks/useMessageQuote.d.ts.map +1 -1
  47. package/dist/hooks/useMessageTiming.d.ts +1 -3
  48. package/dist/hooks/useMessageTiming.d.ts.map +1 -1
  49. package/dist/hooks/useToolCallElapsed.d.ts +0 -2
  50. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -1
  51. package/dist/hooks/useToolCallElapsed.js +1 -1
  52. package/dist/index.d.ts +126 -82
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +14 -13
  55. package/dist/internal.d.ts +8 -11
  56. package/dist/internal.d.ts.map +1 -1
  57. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +24 -26
  58. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
  59. package/dist/legacy-runtime/AssistantRuntimeProvider.js +1 -1
  60. package/dist/legacy-runtime/RuntimeAdapter.d.ts +2 -2
  61. package/dist/legacy-runtime/RuntimeAdapter.d.ts.map +1 -0
  62. package/dist/legacy-runtime/cloud/AssistantCloudThreadHistoryAdapter.d.ts +2 -2
  63. package/dist/legacy-runtime/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -0
  64. package/dist/legacy-runtime/runtime/AssistantRuntime.d.ts +3 -3
  65. package/dist/legacy-runtime/runtime/AssistantRuntime.d.ts.map +1 -0
  66. package/dist/legacy-runtime/runtime/AttachmentRuntime.d.ts +3 -3
  67. package/dist/legacy-runtime/runtime/AttachmentRuntime.d.ts.map +1 -0
  68. package/dist/legacy-runtime/runtime/ComposerRuntime.d.ts +4 -3
  69. package/dist/legacy-runtime/runtime/ComposerRuntime.d.ts.map +1 -0
  70. package/dist/legacy-runtime/runtime/RuntimeBindings.d.ts +3 -3
  71. package/dist/legacy-runtime/runtime/RuntimeBindings.d.ts.map +1 -0
  72. package/dist/legacy-runtime/runtime/RuntimePathTypes.d.ts +2 -2
  73. package/dist/legacy-runtime/runtime/RuntimePathTypes.d.ts.map +1 -0
  74. package/dist/legacy-runtime/runtime/ThreadListItemRuntime.d.ts +5 -3
  75. package/dist/legacy-runtime/runtime/ThreadListItemRuntime.d.ts.map +1 -0
  76. package/dist/legacy-runtime/runtime/ThreadRuntime.d.ts +4 -3
  77. package/dist/legacy-runtime/runtime/ThreadRuntime.d.ts.map +1 -0
  78. package/dist/legacy-runtime/runtime-cores/adapters/RuntimeAdapterProvider.d.ts +2 -2
  79. package/dist/legacy-runtime/runtime-cores/adapters/RuntimeAdapterProvider.d.ts.map +1 -0
  80. package/dist/legacy-runtime/runtime-cores/adapters/attachment/CloudFileAttachmentAdapter.d.ts +2 -2
  81. package/dist/legacy-runtime/runtime-cores/adapters/attachment/CloudFileAttachmentAdapter.d.ts.map +1 -0
  82. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.d.ts +2 -2
  83. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.d.ts.map +1 -0
  84. package/dist/legacy-runtime/runtime-cores/composer/DefaultEditComposerRuntimeCore.d.ts +2 -2
  85. package/dist/legacy-runtime/runtime-cores/composer/DefaultEditComposerRuntimeCore.d.ts.map +1 -0
  86. package/dist/legacy-runtime/runtime-cores/composer/DefaultThreadComposerRuntimeCore.d.ts +2 -2
  87. package/dist/legacy-runtime/runtime-cores/composer/DefaultThreadComposerRuntimeCore.d.ts.map +1 -0
  88. package/dist/legacy-runtime/runtime-cores/core/AssistantRuntimeCore.d.ts +2 -2
  89. package/dist/legacy-runtime/runtime-cores/core/AssistantRuntimeCore.d.ts.map +1 -0
  90. package/dist/legacy-runtime/runtime-cores/core/BaseAssistantRuntimeCore.d.ts +2 -2
  91. package/dist/legacy-runtime/runtime-cores/core/BaseAssistantRuntimeCore.d.ts.map +1 -0
  92. package/dist/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.d.ts +2 -2
  93. package/dist/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.d.ts.map +1 -0
  94. package/dist/legacy-runtime/runtime-cores/core/ComposerRuntimeCore.d.ts +2 -2
  95. package/dist/legacy-runtime/runtime-cores/core/ComposerRuntimeCore.d.ts.map +1 -0
  96. package/dist/legacy-runtime/runtime-cores/core/ThreadListRuntimeCore.d.ts +2 -2
  97. package/dist/legacy-runtime/runtime-cores/core/ThreadListRuntimeCore.d.ts.map +1 -0
  98. package/dist/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.d.ts +2 -2
  99. package/dist/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.d.ts.map +1 -0
  100. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.d.ts +2 -2
  101. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.d.ts.map +1 -0
  102. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreRuntimeCore.d.ts +2 -2
  103. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreRuntimeCore.d.ts.map +1 -0
  104. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadListRuntimeCore.d.ts +3 -2
  105. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -0
  106. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.d.ts +2 -2
  107. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -0
  108. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageConverter.d.ts +3 -2
  109. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageConverter.d.ts.map +1 -0
  110. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.d.ts +3 -3
  111. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.d.ts.map +1 -0
  112. package/dist/legacy-runtime/runtime-cores/external-store/auto-status.d.ts +2 -2
  113. package/dist/legacy-runtime/runtime-cores/external-store/auto-status.d.ts.map +1 -0
  114. package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.d.ts +2 -2
  115. package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.d.ts.map +1 -0
  116. package/dist/legacy-runtime/runtime-cores/external-store/external-message-converter.d.ts +2 -2
  117. package/dist/legacy-runtime/runtime-cores/external-store/external-message-converter.d.ts.map +1 -0
  118. package/dist/legacy-runtime/runtime-cores/external-store/useExternalStoreRuntime.d.ts +2 -2
  119. package/dist/legacy-runtime/runtime-cores/external-store/useExternalStoreRuntime.d.ts.map +1 -0
  120. package/dist/legacy-runtime/runtime-cores/local/ChatModelAdapter.d.ts +2 -2
  121. package/dist/legacy-runtime/runtime-cores/local/ChatModelAdapter.d.ts.map +1 -0
  122. package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeCore.d.ts +2 -2
  123. package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeCore.d.ts.map +1 -0
  124. package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeOptions.d.ts +4 -3
  125. package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeOptions.d.ts.map +1 -0
  126. package/dist/legacy-runtime/runtime-cores/local/LocalThreadListRuntimeCore.d.ts +3 -2
  127. package/dist/legacy-runtime/runtime-cores/local/LocalThreadListRuntimeCore.d.ts.map +1 -0
  128. package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.d.ts +2 -2
  129. package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.d.ts.map +1 -0
  130. package/dist/legacy-runtime/runtime-cores/local/shouldContinue.d.ts +2 -2
  131. package/dist/legacy-runtime/runtime-cores/local/shouldContinue.d.ts.map +1 -0
  132. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.d.ts +2 -2
  133. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.d.ts.map +1 -0
  134. package/dist/legacy-runtime/runtime-cores/remote-thread-list/BaseSubscribable.d.ts +2 -2
  135. package/dist/legacy-runtime/runtime-cores/remote-thread-list/BaseSubscribable.d.ts.map +1 -0
  136. package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.d.ts +2 -2
  137. package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -0
  138. package/dist/legacy-runtime/runtime-cores/remote-thread-list/OptimisticState.d.ts +2 -2
  139. package/dist/legacy-runtime/runtime-cores/remote-thread-list/OptimisticState.d.ts.map +1 -0
  140. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +2 -2
  141. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -0
  142. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +2 -2
  143. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -0
  144. package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/cloud.d.ts +2 -2
  145. package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/cloud.d.ts.map +1 -0
  146. package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/in-memory.d.ts +2 -2
  147. package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/in-memory.d.ts.map +1 -0
  148. package/dist/legacy-runtime/runtime-cores/remote-thread-list/types.d.ts +2 -2
  149. package/dist/legacy-runtime/runtime-cores/remote-thread-list/types.d.ts.map +1 -0
  150. package/dist/legacy-runtime/runtime-cores/remote-thread-list/useRemoteThreadListRuntime.d.ts +2 -2
  151. package/dist/legacy-runtime/runtime-cores/remote-thread-list/useRemoteThreadListRuntime.d.ts.map +1 -0
  152. package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.d.ts +4 -3
  153. package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.d.ts.map +1 -0
  154. package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.js +1 -1
  155. package/dist/mcp-apps/McpAppRenderer.d.ts +49 -51
  156. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  157. package/dist/mcp-apps/McpAppRenderer.js +2 -2
  158. package/dist/mcp-apps/McpAppsRemoteHost.d.ts +1 -3
  159. package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
  160. package/dist/mcp-apps/app-frame.d.ts +2 -4
  161. package/dist/mcp-apps/app-frame.d.ts.map +1 -1
  162. package/dist/mcp-apps/bridge.d.ts +11 -13
  163. package/dist/mcp-apps/bridge.d.ts.map +1 -1
  164. package/dist/mcp-apps/index.d.ts +5 -5
  165. package/dist/mcp-apps/index.d.ts.map +1 -0
  166. package/dist/mcp-apps/types.d.ts +95 -97
  167. package/dist/mcp-apps/types.d.ts.map +1 -1
  168. package/dist/mcp-apps/utils.d.ts +2 -3
  169. package/dist/mcp-apps/utils.d.ts.map +1 -1
  170. package/dist/model-context/frame/useAssistantFrameHost.d.ts +8 -8
  171. package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -1
  172. package/dist/model-context/frame/useAssistantFrameHost.js +1 -1
  173. package/dist/model-context/makeAssistantVisible.d.ts +4 -6
  174. package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
  175. package/dist/model-context/makeAssistantVisible.js +2 -2
  176. package/dist/primitives/actionBar/ActionBarCopy.d.ts +13 -14
  177. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  178. package/dist/primitives/actionBar/ActionBarCopy.js +1 -1
  179. package/dist/primitives/actionBar/ActionBarEdit.d.ts +10 -11
  180. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
  181. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +11 -12
  182. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
  183. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +4 -1
  184. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  185. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +6 -7
  186. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -1
  187. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +11 -9
  188. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  189. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +6 -7
  190. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -1
  191. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +11 -9
  192. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  193. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts +1 -3
  194. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts.map +1 -1
  195. package/dist/primitives/actionBar/ActionBarReload.d.ts +10 -11
  196. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
  197. package/dist/primitives/actionBar/ActionBarRoot.d.ts +49 -50
  198. package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
  199. package/dist/primitives/actionBar/ActionBarSpeak.d.ts +6 -7
  200. package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
  201. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +6 -7
  202. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
  203. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +8 -10
  204. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -1
  205. package/dist/primitives/actionBar.d.ts +9 -14
  206. package/dist/primitives/actionBar.d.ts.map +1 -1
  207. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +10 -12
  208. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -1
  209. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +7 -9
  210. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -1
  211. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +3 -5
  212. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -1
  213. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +7 -9
  214. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -1
  215. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +7 -9
  216. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -1
  217. package/dist/primitives/actionBarMore/scope.d.ts +4 -6
  218. package/dist/primitives/actionBarMore/scope.d.ts.map +1 -1
  219. package/dist/primitives/actionBarMore.d.ts +5 -10
  220. package/dist/primitives/actionBarMore.d.ts.map +1 -1
  221. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +7 -9
  222. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -1
  223. package/dist/primitives/assistantModal/AssistantModalContent.d.ts +12 -14
  224. package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
  225. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +5 -7
  226. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
  227. package/dist/primitives/assistantModal/AssistantModalRoot.js +1 -1
  228. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +7 -9
  229. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -1
  230. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts +7 -9
  231. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts.map +1 -1
  232. package/dist/primitives/assistantModal/scope.d.ts +4 -6
  233. package/dist/primitives/assistantModal/scope.d.ts.map +1 -1
  234. package/dist/primitives/assistantModal.d.ts +4 -9
  235. package/dist/primitives/assistantModal.d.ts.map +1 -1
  236. package/dist/primitives/attachment/AttachmentName.d.ts +2 -4
  237. package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -1
  238. package/dist/primitives/attachment/AttachmentRemove.d.ts +6 -7
  239. package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -1
  240. package/dist/primitives/attachment/AttachmentRemove.js +1 -1
  241. package/dist/primitives/attachment/AttachmentRoot.d.ts +10 -11
  242. package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
  243. package/dist/primitives/attachment/AttachmentThumb.d.ts +6 -7
  244. package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -1
  245. package/dist/primitives/attachment/AttachmentThumb.js +1 -1
  246. package/dist/primitives/attachment.d.ts +4 -9
  247. package/dist/primitives/attachment.d.ts.map +1 -1
  248. package/dist/primitives/branchPicker/BranchPickerCount.d.ts +6 -8
  249. package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -1
  250. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +10 -11
  251. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  252. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +2 -4
  253. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -1
  254. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +10 -11
  255. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  256. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +18 -20
  257. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
  258. package/dist/primitives/branchPicker/BranchPickerRoot.js +1 -1
  259. package/dist/primitives/branchPicker.d.ts +5 -10
  260. package/dist/primitives/branchPicker.d.ts.map +1 -1
  261. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +10 -11
  262. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
  263. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +1 -1
  264. package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -2
  265. package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -0
  266. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +6 -7
  267. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -1
  268. package/dist/primitives/chainOfThought.d.ts +3 -8
  269. package/dist/primitives/chainOfThought.d.ts.map +1 -1
  270. package/dist/primitives/composer/ComposerAddAttachment.d.ts +11 -12
  271. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
  272. package/dist/primitives/composer/ComposerAddAttachment.js +1 -1
  273. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +10 -11
  274. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
  275. package/dist/primitives/composer/ComposerAttachmentDropzone.js +9 -7
  276. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
  277. package/dist/primitives/composer/ComposerAttachments.d.ts +2 -2
  278. package/dist/primitives/composer/ComposerAttachments.d.ts.map +1 -0
  279. package/dist/primitives/composer/ComposerCancel.d.ts +10 -11
  280. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
  281. package/dist/primitives/composer/ComposerCompactContext.d.ts +1 -3
  282. package/dist/primitives/composer/ComposerCompactContext.d.ts.map +1 -1
  283. package/dist/primitives/composer/ComposerDictate.d.ts +6 -7
  284. package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -1
  285. package/dist/primitives/composer/ComposerDictationTranscript.d.ts +5 -7
  286. package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -1
  287. package/dist/primitives/composer/ComposerDictationTranscript.js +1 -1
  288. package/dist/primitives/composer/ComposerIf.d.ts +3 -2
  289. package/dist/primitives/composer/ComposerIf.d.ts.map +1 -0
  290. package/dist/primitives/composer/ComposerInput.d.ts +72 -74
  291. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  292. package/dist/primitives/composer/ComposerInput.js +3 -3
  293. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  294. package/dist/primitives/composer/ComposerInputPluginContext.d.ts +22 -24
  295. package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
  296. package/dist/primitives/composer/ComposerQueue.d.ts +2 -2
  297. package/dist/primitives/composer/ComposerQueue.d.ts.map +1 -0
  298. package/dist/primitives/composer/ComposerQuote.d.ts +13 -15
  299. package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -1
  300. package/dist/primitives/composer/ComposerQuote.js +1 -1
  301. package/dist/primitives/composer/ComposerRoot.d.ts +26 -28
  302. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
  303. package/dist/primitives/composer/ComposerRoot.js +1 -1
  304. package/dist/primitives/composer/ComposerSend.d.ts +9 -11
  305. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  306. package/dist/primitives/composer/ComposerStopDictation.d.ts +6 -7
  307. package/dist/primitives/composer/ComposerStopDictation.d.ts.map +1 -1
  308. package/dist/primitives/composer/ComposerStopDictation.js +1 -1
  309. package/dist/primitives/composer/trigger/TriggerPopover.d.ts +27 -29
  310. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
  311. package/dist/primitives/composer/trigger/TriggerPopover.js +2 -2
  312. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +10 -12
  313. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -1
  314. package/dist/primitives/composer/trigger/TriggerPopoverAction.js +1 -1
  315. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts +5 -7
  316. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -1
  317. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts +16 -18
  318. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -1
  319. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +8 -10
  320. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -1
  321. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +1 -1
  322. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts +18 -20
  323. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -1
  324. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +41 -43
  325. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
  326. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +27 -28
  327. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -1
  328. package/dist/primitives/composer/trigger/detectTrigger.d.ts +3 -5
  329. package/dist/primitives/composer/trigger/detectTrigger.d.ts.map +1 -1
  330. package/dist/primitives/composer/trigger/index.d.ts +15 -18
  331. package/dist/primitives/composer/trigger/index.d.ts.map +1 -1
  332. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts +1 -3
  333. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts.map +1 -1
  334. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +10 -12
  335. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -1
  336. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +22 -24
  337. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -1
  338. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +18 -20
  339. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
  340. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +23 -25
  341. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
  342. package/dist/primitives/composer/useComposerInputState.d.ts +4 -6
  343. package/dist/primitives/composer/useComposerInputState.d.ts.map +1 -1
  344. package/dist/primitives/composer.d.ts +31 -25
  345. package/dist/primitives/composer.d.ts.map +1 -1
  346. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +9 -11
  347. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -1
  348. package/dist/primitives/error/ErrorMessage.d.ts +5 -7
  349. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
  350. package/dist/primitives/error/ErrorRoot.d.ts +5 -7
  351. package/dist/primitives/error/ErrorRoot.d.ts.map +1 -1
  352. package/dist/primitives/error.d.ts +2 -7
  353. package/dist/primitives/error.d.ts.map +1 -1
  354. package/dist/primitives/message/MessageAttachments.d.ts +2 -2
  355. package/dist/primitives/message/MessageAttachments.d.ts.map +1 -0
  356. package/dist/primitives/message/MessageError.d.ts +1 -3
  357. package/dist/primitives/message/MessageError.d.ts.map +1 -1
  358. package/dist/primitives/message/MessageIf.d.ts +15 -16
  359. package/dist/primitives/message/MessageIf.d.ts.map +1 -1
  360. package/dist/primitives/message/MessageParts.d.ts +4 -6
  361. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  362. package/dist/primitives/message/MessagePartsGrouped.d.ts +132 -133
  363. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  364. package/dist/primitives/message/MessagePartsGrouped.js +103 -71
  365. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  366. package/dist/primitives/message/MessageRoot.d.ts +5 -7
  367. package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
  368. package/dist/primitives/message/MessageRoot.js +6 -2
  369. package/dist/primitives/message/MessageRoot.js.map +1 -1
  370. package/dist/primitives/message.d.ts +12 -12
  371. package/dist/primitives/message.d.ts.map +1 -1
  372. package/dist/primitives/messagePart/MessagePartImage.d.ts +9 -11
  373. package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -1
  374. package/dist/primitives/messagePart/MessagePartInProgress.d.ts +2 -2
  375. package/dist/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -0
  376. package/dist/primitives/messagePart/MessagePartText.d.ts +35 -37
  377. package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
  378. package/dist/primitives/messagePart/useMessagePartData.d.ts +1 -3
  379. package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -1
  380. package/dist/primitives/messagePart/useMessagePartFile.d.ts +2 -4
  381. package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -1
  382. package/dist/primitives/messagePart/useMessagePartImage.d.ts +2 -4
  383. package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -1
  384. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +2 -4
  385. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -1
  386. package/dist/primitives/messagePart/useMessagePartSource.d.ts +19 -21
  387. package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -1
  388. package/dist/primitives/messagePart/useMessagePartText.d.ts +3 -5
  389. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -1
  390. package/dist/primitives/messagePart.d.ts +4 -9
  391. package/dist/primitives/messagePart.d.ts.map +1 -1
  392. package/dist/primitives/queueItem/QueueItemRemove.d.ts +6 -7
  393. package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -1
  394. package/dist/primitives/queueItem/QueueItemRemove.js +1 -1
  395. package/dist/primitives/queueItem/QueueItemSteer.d.ts +6 -7
  396. package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -1
  397. package/dist/primitives/queueItem/QueueItemSteer.js +1 -1
  398. package/dist/primitives/queueItem/QueueItemText.d.ts +5 -7
  399. package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -1
  400. package/dist/primitives/queueItem/QueueItemText.js +1 -1
  401. package/dist/primitives/queueItem.d.ts +3 -8
  402. package/dist/primitives/queueItem.d.ts.map +1 -1
  403. package/dist/primitives/reasoning/useScrollLock.d.ts +1 -3
  404. package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -1
  405. package/dist/primitives/reasoning/useScrollLock.js +14 -15
  406. package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
  407. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +5 -7
  408. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -1
  409. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +1 -1
  410. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +12 -13
  411. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -1
  412. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +81 -42
  413. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  414. package/dist/primitives/selectionToolbar.d.ts +2 -7
  415. package/dist/primitives/selectionToolbar.d.ts.map +1 -1
  416. package/dist/primitives/suggestion/SuggestionDescription.d.ts +5 -7
  417. package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -1
  418. package/dist/primitives/suggestion/SuggestionDescription.js +1 -1
  419. package/dist/primitives/suggestion/SuggestionTitle.d.ts +5 -7
  420. package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -1
  421. package/dist/primitives/suggestion/SuggestionTitle.js +1 -1
  422. package/dist/primitives/suggestion/SuggestionTrigger.d.ts +35 -36
  423. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
  424. package/dist/primitives/suggestion.d.ts +3 -8
  425. package/dist/primitives/suggestion.d.ts.map +1 -1
  426. package/dist/primitives/thread/ThreadEmpty.d.ts +2 -4
  427. package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -1
  428. package/dist/primitives/thread/ThreadIf.d.ts +7 -8
  429. package/dist/primitives/thread/ThreadIf.d.ts.map +1 -1
  430. package/dist/primitives/thread/ThreadMessages.d.ts +2 -2
  431. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -0
  432. package/dist/primitives/thread/ThreadRoot.d.ts +9 -11
  433. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  434. package/dist/primitives/thread/ThreadRoot.js +15 -8
  435. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  436. package/dist/primitives/thread/ThreadRootElementContext.d.ts +4 -0
  437. package/dist/primitives/thread/ThreadRootElementContext.d.ts.map +1 -0
  438. package/dist/primitives/thread/ThreadRootElementContext.js +11 -0
  439. package/dist/primitives/thread/ThreadRootElementContext.js.map +1 -0
  440. package/dist/primitives/thread/ThreadScrollToBottom.d.ts +11 -13
  441. package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -1
  442. package/dist/primitives/thread/ThreadSuggestion.d.ts +47 -48
  443. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  444. package/dist/primitives/thread/ThreadSuggestions.d.ts +2 -2
  445. package/dist/primitives/thread/ThreadSuggestions.d.ts.map +1 -0
  446. package/dist/primitives/thread/ThreadViewport.d.ts +88 -90
  447. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  448. package/dist/primitives/thread/ThreadViewport.js +1 -1
  449. package/dist/primitives/thread/ThreadViewportFooter.d.ts +5 -7
  450. package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
  451. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +6 -8
  452. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -1
  453. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts +2 -4
  454. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -1
  455. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts +16 -18
  456. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -1
  457. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js +55 -6
  458. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -1
  459. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +10 -11
  460. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -1
  461. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts +0 -2
  462. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -1
  463. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts +0 -2
  464. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -1
  465. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +29 -31
  466. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  467. package/dist/primitives/thread/useThreadViewportAutoScroll.js +16 -1
  468. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  469. package/dist/primitives/thread.d.ts +12 -15
  470. package/dist/primitives/thread.d.ts.map +1 -1
  471. package/dist/primitives/threadList/ThreadListItems.d.ts +2 -2
  472. package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -0
  473. package/dist/primitives/threadList/ThreadListLoadMore.d.ts +6 -7
  474. package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -1
  475. package/dist/primitives/threadList/ThreadListNew.d.ts +5 -7
  476. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
  477. package/dist/primitives/threadList/ThreadListNew.js +1 -1
  478. package/dist/primitives/threadList/ThreadListRoot.d.ts +6 -7
  479. package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -1
  480. package/dist/primitives/threadList.d.ts +5 -9
  481. package/dist/primitives/threadList.d.ts.map +1 -1
  482. package/dist/primitives/threadListFocusGroup.d.ts +14 -16
  483. package/dist/primitives/threadListFocusGroup.d.ts.map +1 -1
  484. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +6 -7
  485. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
  486. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +6 -7
  487. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
  488. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +6 -7
  489. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
  490. package/dist/primitives/threadListItem/ThreadListItemRoot.js +1 -1
  491. package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -2
  492. package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -0
  493. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +6 -7
  494. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
  495. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +6 -7
  496. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
  497. package/dist/primitives/threadListItem.d.ts +6 -11
  498. package/dist/primitives/threadListItem.d.ts.map +1 -1
  499. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +10 -12
  500. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -1
  501. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +7 -9
  502. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -1
  503. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +11 -13
  504. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -1
  505. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +7 -9
  506. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -1
  507. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +7 -9
  508. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -1
  509. package/dist/primitives/threadListItemMore/scope.d.ts +4 -6
  510. package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -1
  511. package/dist/primitives/threadListItemMore.d.ts +5 -10
  512. package/dist/primitives/threadListItemMore.d.ts.map +1 -1
  513. package/dist/sandbox-host/SandboxHost.d.ts +24 -26
  514. package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
  515. package/dist/unstable/useComposerInput.d.ts +32 -34
  516. package/dist/unstable/useComposerInput.d.ts.map +1 -1
  517. package/dist/unstable/useComposerInput.js +1 -1
  518. package/dist/unstable/useComposerInputHistory.d.ts +3 -5
  519. package/dist/unstable/useComposerInputHistory.d.ts.map +1 -1
  520. package/dist/unstable/useComposerInputHistory.js +2 -2
  521. package/dist/unstable/useLiveCompletionAdapter.d.ts +18 -20
  522. package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -1
  523. package/dist/unstable/useMentionAdapter.d.ts +57 -59
  524. package/dist/unstable/useMentionAdapter.d.ts.map +1 -1
  525. package/dist/unstable/useMentionAdapter.js +1 -1
  526. package/dist/unstable/useMessageStallDetection.d.ts +10 -12
  527. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -1
  528. package/dist/unstable/useMessageStallDetection.js +1 -1
  529. package/dist/unstable/useModelContextSnapshot.d.ts +13 -15
  530. package/dist/unstable/useModelContextSnapshot.d.ts.map +1 -1
  531. package/dist/unstable/useSlashCommandAdapter.d.ts +20 -22
  532. package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
  533. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +7 -9
  534. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -1
  535. package/dist/unstable/webmcp/convertTools.d.ts +5 -7
  536. package/dist/unstable/webmcp/convertTools.d.ts.map +1 -1
  537. package/dist/unstable/webmcp/convertTools.js +2 -2
  538. package/dist/unstable/webmcp/convertTools.js.map +1 -1
  539. package/dist/unstable/webmcp/useWebMcpProvider.d.ts +4 -6
  540. package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -1
  541. package/dist/unstable/webmcp/useWebMcpProvider.js +1 -1
  542. package/dist/unstable/webmcp/webmcp-host.d.ts +23 -25
  543. package/dist/unstable/webmcp/webmcp-host.d.ts.map +1 -1
  544. package/dist/utils/Primitive.d.ts +91 -92
  545. package/dist/utils/Primitive.d.ts.map +1 -1
  546. package/dist/utils/RequireAtLeastOne.d.ts +3 -3
  547. package/dist/utils/RequireAtLeastOne.d.ts.map +1 -1
  548. package/dist/utils/createActionButton.d.ts +5 -6
  549. package/dist/utils/createActionButton.d.ts.map +1 -1
  550. package/dist/utils/getSelectionMessageId.d.ts +1 -3
  551. package/dist/utils/getSelectionMessageId.d.ts.map +1 -1
  552. package/dist/utils/getSelectionMessageId.js +2 -1
  553. package/dist/utils/getSelectionMessageId.js.map +1 -1
  554. package/dist/utils/hooks/useManagedRef.d.ts +0 -2
  555. package/dist/utils/hooks/useManagedRef.d.ts.map +1 -1
  556. package/dist/utils/hooks/useMediaQuery.d.ts +0 -2
  557. package/dist/utils/hooks/useMediaQuery.d.ts.map +1 -1
  558. package/dist/utils/hooks/useOnResizeContent.d.ts +0 -2
  559. package/dist/utils/hooks/useOnResizeContent.d.ts.map +1 -1
  560. package/dist/utils/hooks/useOnScrollToBottom.d.ts +1 -3
  561. package/dist/utils/hooks/useOnScrollToBottom.d.ts.map +1 -1
  562. package/dist/utils/hooks/useSizeHandle.d.ts +1 -3
  563. package/dist/utils/hooks/useSizeHandle.d.ts.map +1 -1
  564. package/dist/utils/smooth/SmoothContext.d.ts +105 -107
  565. package/dist/utils/smooth/SmoothContext.d.ts.map +1 -1
  566. package/dist/utils/smooth/SmoothContext.js +1 -1
  567. package/dist/utils/smooth/useSmooth.d.ts +26 -28
  568. package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
  569. package/dist/utils/smooth/useSmooth.js +1 -1
  570. package/package.json +8 -8
  571. package/src/assistant-transport.ts +5 -4
  572. package/src/cloud-renderer/CloudRendererHost.test.tsx +362 -0
  573. package/src/cloud-renderer/CloudRendererHost.tsx +249 -0
  574. package/src/index.ts +29 -1
  575. package/src/primitives/actionBar/ActionBarExportMarkdown.test.tsx +30 -0
  576. package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +4 -0
  577. package/src/primitives/actionBar/ActionBarFeedback.test.tsx +87 -0
  578. package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +1 -0
  579. package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +1 -0
  580. package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +54 -0
  581. package/src/primitives/composer/ComposerAttachmentDropzone.tsx +12 -6
  582. package/src/primitives/composer/ComposerInput.test.tsx +18 -0
  583. package/src/primitives/composer/ComposerInput.tsx +8 -2
  584. package/src/primitives/message/MessagePartsGrouped.test.tsx +151 -4
  585. package/src/primitives/message/MessagePartsGrouped.tool-interaction.test.tsx +97 -0
  586. package/src/primitives/message/MessagePartsGrouped.tsx +14 -5
  587. package/src/primitives/message/MessageRoot.test.tsx +108 -0
  588. package/src/primitives/message/MessageRoot.tsx +5 -1
  589. package/src/primitives/reasoning/useScrollLock.test.tsx +47 -0
  590. package/src/primitives/reasoning/useScrollLock.ts +15 -17
  591. package/src/primitives/selectionToolbar/SelectionToolbarRoot.test.tsx +228 -14
  592. package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +60 -12
  593. package/src/primitives/thread/ThreadRoot.tsx +10 -1
  594. package/src/primitives/thread/ThreadRootElementContext.ts +10 -0
  595. package/src/primitives/thread/topAnchor/mountTopAnchorReserve.test.ts +196 -0
  596. package/src/primitives/thread/topAnchor/mountTopAnchorReserve.ts +78 -5
  597. package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +222 -0
  598. package/src/primitives/thread/useThreadViewportAutoScroll.ts +37 -2
  599. package/src/tests/augmentations.test.ts +7 -0
  600. package/src/unstable/webmcp/convertTools.test.ts +23 -3
  601. package/src/unstable/webmcp/convertTools.ts +7 -11
  602. package/src/utils/getSelectionMessageId.test.ts +28 -0
  603. package/src/utils/getSelectionMessageId.ts +7 -1
  604. package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -5
  605. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +0 -1
  606. package/dist/tests/remote-thread-list-test-helpers.js +0 -29
  607. package/dist/tests/remote-thread-list-test-helpers.js.map +0 -1
  608. package/dist/tests/setup.d.ts +0 -1
  609. package/dist/tests/setup.js +0 -6
  610. package/dist/tests/setup.js.map +0 -1
@@ -24,12 +24,46 @@ const createFrameScheduler = (fn) => {
24
24
  const mountTopAnchorReserve = (store) => {
25
25
  let reserve = null;
26
26
  let lastScrolledAnchorId;
27
+ let listenedViewport = null;
28
+ let lastScrollTop = 0;
29
+ let restoreScrollTop = null;
30
+ let restoredThisTurn = false;
31
+ let lastAppliedTarget = null;
32
+ const clearRestore = () => {
33
+ restoreScrollTop = null;
34
+ lastAppliedTarget = null;
35
+ };
36
+ const wasPinnedAtLastScroll = () => lastAppliedTarget !== null && Math.abs(lastScrollTop - lastAppliedTarget) <= 1;
37
+ const handleScroll = () => {
38
+ const viewport = listenedViewport;
39
+ if (!viewport) return;
40
+ const scrollTop = viewport.scrollTop;
41
+ const maxScrollTop = Math.max(0, viewport.scrollHeight - viewport.clientHeight);
42
+ if (scrollTop < lastScrollTop && lastScrollTop > maxScrollTop + 1 && Math.abs(scrollTop - maxScrollTop) <= 1 && wasPinnedAtLastScroll() && !restoredThisTurn) {
43
+ restoreScrollTop ??= lastScrollTop;
44
+ scheduler.schedule();
45
+ }
46
+ lastScrollTop = scrollTop;
47
+ };
48
+ const listenViewport = (viewport) => {
49
+ if (listenedViewport === viewport) return;
50
+ if (listenedViewport) listenedViewport.removeEventListener("scroll", handleScroll);
51
+ listenedViewport = viewport;
52
+ restoredThisTurn = false;
53
+ clearRestore();
54
+ if (viewport) {
55
+ viewport.addEventListener("scroll", handleScroll, { passive: true });
56
+ lastScrollTop = viewport.scrollTop;
57
+ }
58
+ };
27
59
  function apply() {
28
60
  const state = store.getState();
29
61
  const { viewport, anchor, target } = state.element;
30
62
  const clamp = state.targetConfig;
63
+ listenViewport(state.turnAnchor === "top" ? viewport : null);
31
64
  if (state.turnAnchor !== "top" || !viewport) {
32
65
  observers.disconnect();
66
+ clearRestore();
33
67
  if (reserve) {
34
68
  setReserveHeight(reserve, 0);
35
69
  reserve.remove();
@@ -38,11 +72,13 @@ const mountTopAnchorReserve = (store) => {
38
72
  }
39
73
  if (!anchor && !target && !clamp && state.topAnchorTurn) {
40
74
  observers.disconnect();
75
+ clearRestore();
41
76
  if (reserve?.parentElement && reserve.parentElement.lastElementChild !== reserve) reserve.parentElement.append(reserve);
42
77
  return;
43
78
  }
44
79
  if (!anchor || !target || !clamp) {
45
80
  observers.disconnect();
81
+ clearRestore();
46
82
  if (reserve) {
47
83
  setReserveHeight(reserve, 0);
48
84
  reserve.remove();
@@ -62,17 +98,29 @@ const mountTopAnchorReserve = (store) => {
62
98
  return;
63
99
  }
64
100
  const anchorId = getAnchorId(anchor);
65
- if (anchorId !== void 0 && lastScrolledAnchorId === anchorId) return;
66
101
  const targetScrollTop = snapScrollTop(computeTopAnchorTargetScrollTop({
67
102
  viewport,
68
103
  anchor,
69
104
  ...clamp
70
105
  }));
71
- if (Math.abs(viewport.scrollTop - targetScrollTop) > 1) viewport.scrollTo({
72
- top: targetScrollTop,
73
- behavior: "smooth"
74
- });
75
- if (anchorId !== void 0) lastScrolledAnchorId = anchorId;
106
+ if (anchorId === void 0 || anchorId !== lastScrolledAnchorId) {
107
+ restoreScrollTop = null;
108
+ restoredThisTurn = false;
109
+ if (Math.abs(viewport.scrollTop - targetScrollTop) > 1) viewport.scrollTo({
110
+ top: targetScrollTop,
111
+ behavior: "smooth"
112
+ });
113
+ if (anchorId !== void 0) lastScrolledAnchorId = anchorId;
114
+ } else if (restoreScrollTop !== null && lastAppliedTarget !== null) {
115
+ const desired = snapScrollTop(restoreScrollTop + (targetScrollTop - lastAppliedTarget));
116
+ restoreScrollTop = null;
117
+ restoredThisTurn = true;
118
+ if (Math.abs(viewport.scrollTop - desired) > 1) viewport.scrollTo({
119
+ top: desired,
120
+ behavior: "instant"
121
+ });
122
+ }
123
+ lastAppliedTarget = targetScrollTop;
76
124
  }
77
125
  const scheduler = createFrameScheduler(apply);
78
126
  const observers = createReserveObservers(scheduler.schedule);
@@ -82,6 +130,7 @@ const mountTopAnchorReserve = (store) => {
82
130
  scheduler.cancel();
83
131
  unsubscribe();
84
132
  observers.disconnect();
133
+ listenViewport(null);
85
134
  reserve?.remove();
86
135
  };
87
136
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mountTopAnchorReserve.js","names":["computeTopAnchorReserve","computeTopAnchorTargetScrollTop","createReserveObservers","createReserveElement","getAnchorId","setReserveHeight","snapScrollTop","TopAnchorStore","getState","turnAnchor","element","viewport","HTMLElement","anchor","target","targetConfig","tallerThan","visibleHeight","topAnchorTurn","anchorId","targetId","subscribe","fn","createFrameScheduler","frame","schedule","requestAnimationFrame","cancel","cancelAnimationFrame","mountTopAnchorReserve","store","reserve","lastScrolledAnchorId","apply","state","clamp","observers","disconnect","remove","parentElement","lastElementChild","append","previousElementSibling","after","reserveChanged","scheduler","undefined","targetScrollTop","Math","abs","scrollTop","scrollTo","top","behavior","unsubscribe"],"sources":["../../../../src/primitives/thread/topAnchor/mountTopAnchorReserve.ts"],"sourcesContent":["\"use client\";\n\nimport {\n computeTopAnchorReserve,\n computeTopAnchorTargetScrollTop,\n} from \"./computeTopAnchorSlack\";\nimport { createReserveObservers } from \"./createReserveObservers\";\nimport {\n createReserveElement,\n getAnchorId,\n setReserveHeight,\n snapScrollTop,\n} from \"./topAnchorUtils\";\n\n/**\n * Minimal slice of `ThreadViewportStore` that the top-anchor reserve needs.\n * Decoupling from the full store keeps `mountTopAnchorReserve` testable in\n * isolation and re-usable from any consumer that can adapt to this shape.\n */\nexport type TopAnchorStore = {\n getState(): {\n turnAnchor: \"top\" | \"bottom\";\n element: {\n viewport: HTMLElement | null;\n anchor: HTMLElement | null;\n target: HTMLElement | null;\n };\n targetConfig: {\n tallerThan: number;\n visibleHeight: number;\n } | null;\n topAnchorTurn: {\n readonly anchorId: string;\n readonly targetId: string;\n } | null;\n };\n subscribe(fn: () => void): () => void;\n};\n\nconst createFrameScheduler = (fn: () => void) => {\n let frame: number | null = null;\n\n return {\n schedule: () => {\n if (frame !== null) return;\n frame = requestAnimationFrame(() => {\n frame = null;\n fn();\n });\n },\n cancel: () => {\n if (frame !== null) {\n cancelAnimationFrame(frame);\n frame = null;\n }\n },\n };\n};\n\nexport const mountTopAnchorReserve = (store: TopAnchorStore) => {\n let reserve: HTMLElement | null = null;\n let lastScrolledAnchorId: string | undefined;\n\n function apply() {\n const state = store.getState();\n const { viewport, anchor, target } = state.element;\n const clamp = state.targetConfig;\n\n if (state.turnAnchor !== \"top\" || !viewport) {\n observers.disconnect();\n if (reserve) {\n setReserveHeight(reserve, 0);\n reserve.remove();\n }\n return;\n }\n\n if (!anchor && !target && !clamp && state.topAnchorTurn) {\n // ThreadViewport clears this state once the stored pair stops being the\n // trailing turn (followed at most by pending user messages), so reaching\n // here means the anchor gap is transient and the next run is imminent.\n observers.disconnect();\n if (\n reserve?.parentElement &&\n reserve.parentElement.lastElementChild !== reserve\n ) {\n reserve.parentElement.append(reserve);\n }\n return;\n }\n\n if (!anchor || !target || !clamp) {\n observers.disconnect();\n if (reserve) {\n setReserveHeight(reserve, 0);\n reserve.remove();\n }\n return;\n }\n\n reserve ??= createReserveElement();\n\n if (\n reserve.parentElement !== target.parentElement ||\n reserve.previousElementSibling !== target\n ) {\n target.after(reserve);\n }\n\n observers.target(viewport, anchor, target);\n\n const reserveChanged = setReserveHeight(\n reserve,\n computeTopAnchorReserve({ viewport, anchor, reserve, ...clamp }),\n );\n\n if (reserveChanged) {\n scheduler.schedule();\n return;\n }\n\n const anchorId = getAnchorId(anchor);\n if (anchorId !== undefined && lastScrolledAnchorId === anchorId) return;\n\n const targetScrollTop = snapScrollTop(\n computeTopAnchorTargetScrollTop({ viewport, anchor, ...clamp }),\n );\n\n if (Math.abs(viewport.scrollTop - targetScrollTop) > 1) {\n viewport.scrollTo({ top: targetScrollTop, behavior: \"smooth\" });\n }\n\n if (anchorId !== undefined) lastScrolledAnchorId = anchorId;\n }\n\n const scheduler = createFrameScheduler(apply);\n const observers = createReserveObservers(scheduler.schedule);\n\n scheduler.schedule();\n const unsubscribe = store.subscribe(scheduler.schedule);\n\n return () => {\n scheduler.cancel();\n unsubscribe();\n observers.disconnect();\n reserve?.remove();\n };\n};\n"],"mappings":";;;;;AAuCA,MAAMuB,wBAAwBD,OAAmB;CAC/C,IAAIE,QAAuB;CAE3B,OAAO;EACLC,gBAAgB;GACd,IAAID,UAAU,MAAM;GACpBA,QAAQE,4BAA4B;IAClCF,QAAQ;IACRF,GAAG;GACL,CAAC;EACH;EACAK,cAAc;GACZ,IAAIH,UAAU,MAAM;IAClBI,qBAAqBJ,KAAK;IAC1BA,QAAQ;GACV;EACF;CACF;AACF;AAEA,MAAaK,yBAAyBC,UAA0B;CAC9D,IAAIC,UAA8B;CAClC,IAAIC;CAEJ,SAASC,QAAQ;EACf,MAAMC,QAAQJ,MAAMtB,SAAS;EAC7B,MAAM,EAAEG,UAAUE,QAAQC,WAAWoB,MAAMxB;EAC3C,MAAMyB,QAAQD,MAAMnB;EAEpB,IAAImB,MAAMzB,eAAe,SAAS,CAACE,UAAU;GAC3CyB,UAAUC,WAAW;GACrB,IAAIN,SAAS;IACX1B,iBAAiB0B,SAAS,CAAC;IAC3BA,QAAQO,OAAO;GACjB;GACA;EACF;EAEA,IAAI,CAACzB,UAAU,CAACC,UAAU,CAACqB,SAASD,MAAMhB,eAAe;GAIvDkB,UAAUC,WAAW;GACrB,IACEN,SAASQ,iBACTR,QAAQQ,cAAcC,qBAAqBT,SAE3CA,QAAQQ,cAAcE,OAAOV,OAAO;GAEtC;EACF;EAEA,IAAI,CAAClB,UAAU,CAACC,UAAU,CAACqB,OAAO;GAChCC,UAAUC,WAAW;GACrB,IAAIN,SAAS;IACX1B,iBAAiB0B,SAAS,CAAC;IAC3BA,QAAQO,OAAO;GACjB;GACA;EACF;EAEAP,YAAY5B,qBAAqB;EAEjC,IACE4B,QAAQQ,kBAAkBzB,OAAOyB,iBACjCR,QAAQW,2BAA2B5B,QAEnCA,OAAO6B,MAAMZ,OAAO;EAGtBK,UAAUtB,OAAOH,UAAUE,QAAQC,MAAM;EAOzC,IALuBT,iBACrB0B,SACA/B,wBAAwB;GAAEW;GAAUE;GAAQkB;GAAS,GAAGI;EAAM,CAAC,CAG7DS,GAAgB;GAClBC,UAAUpB,SAAS;GACnB;EACF;EAEA,MAAMN,WAAWf,YAAYS,MAAM;EACnC,IAAIM,aAAa2B,KAAAA,KAAad,yBAAyBb,UAAU;EAEjE,MAAM4B,kBAAkBzC,cACtBL,gCAAgC;GAAEU;GAAUE;GAAQ,GAAGsB;EAAM,CAAC,CAChE;EAEA,IAAIa,KAAKC,IAAItC,SAASuC,YAAYH,eAAe,IAAI,GACnDpC,SAASwC,SAAS;GAAEC,KAAKL;GAAiBM,UAAU;EAAS,CAAC;EAGhE,IAAIlC,aAAa2B,KAAAA,GAAWd,uBAAuBb;CACrD;CAEA,MAAM0B,YAAYtB,qBAAqBU,KAAK;CAC5C,MAAMG,YAAYlC,uBAAuB2C,UAAUpB,QAAQ;CAE3DoB,UAAUpB,SAAS;CACnB,MAAM6B,cAAcxB,MAAMT,UAAUwB,UAAUpB,QAAQ;CAEtD,aAAa;EACXoB,UAAUlB,OAAO;EACjB2B,YAAY;EACZlB,UAAUC,WAAW;EACrBN,SAASO,OAAO;CAClB;AACF"}
1
+ {"version":3,"file":"mountTopAnchorReserve.js","names":["computeTopAnchorReserve","computeTopAnchorTargetScrollTop","createReserveObservers","createReserveElement","getAnchorId","setReserveHeight","snapScrollTop","TopAnchorStore","getState","turnAnchor","element","viewport","HTMLElement","anchor","target","targetConfig","tallerThan","visibleHeight","topAnchorTurn","anchorId","targetId","subscribe","fn","createFrameScheduler","frame","schedule","requestAnimationFrame","cancel","cancelAnimationFrame","mountTopAnchorReserve","store","reserve","lastScrolledAnchorId","listenedViewport","lastScrollTop","restoreScrollTop","restoredThisTurn","lastAppliedTarget","clearRestore","wasPinnedAtLastScroll","Math","abs","handleScroll","scrollTop","maxScrollTop","max","scrollHeight","clientHeight","isRangeClamp","scheduler","listenViewport","removeEventListener","addEventListener","passive","apply","state","clamp","observers","disconnect","remove","parentElement","lastElementChild","append","previousElementSibling","after","reserveChanged","targetScrollTop","undefined","scrollTo","top","behavior","desired","unsubscribe"],"sources":["../../../../src/primitives/thread/topAnchor/mountTopAnchorReserve.ts"],"sourcesContent":["\"use client\";\n\nimport {\n computeTopAnchorReserve,\n computeTopAnchorTargetScrollTop,\n} from \"./computeTopAnchorSlack\";\nimport { createReserveObservers } from \"./createReserveObservers\";\nimport {\n createReserveElement,\n getAnchorId,\n setReserveHeight,\n snapScrollTop,\n} from \"./topAnchorUtils\";\n\n/**\n * Minimal slice of `ThreadViewportStore` that the top-anchor reserve needs.\n * Decoupling from the full store keeps `mountTopAnchorReserve` testable in\n * isolation and re-usable from any consumer that can adapt to this shape.\n */\nexport type TopAnchorStore = {\n getState(): {\n turnAnchor: \"top\" | \"bottom\";\n element: {\n viewport: HTMLElement | null;\n anchor: HTMLElement | null;\n target: HTMLElement | null;\n };\n targetConfig: {\n tallerThan: number;\n visibleHeight: number;\n } | null;\n topAnchorTurn: {\n readonly anchorId: string;\n readonly targetId: string;\n } | null;\n };\n subscribe(fn: () => void): () => void;\n};\n\nconst createFrameScheduler = (fn: () => void) => {\n let frame: number | null = null;\n\n return {\n schedule: () => {\n if (frame !== null) return;\n frame = requestAnimationFrame(() => {\n frame = null;\n fn();\n });\n },\n cancel: () => {\n if (frame !== null) {\n cancelAnimationFrame(frame);\n frame = null;\n }\n },\n };\n};\n\nexport const mountTopAnchorReserve = (store: TopAnchorStore) => {\n let reserve: HTMLElement | null = null;\n let lastScrolledAnchorId: string | undefined;\n\n let listenedViewport: HTMLElement | null = null;\n let lastScrollTop = 0;\n let restoreScrollTop: number | null = null;\n let restoredThisTurn = false;\n let lastAppliedTarget: number | null = null;\n\n const clearRestore = () => {\n restoreScrollTop = null;\n lastAppliedTarget = null;\n };\n\n const wasPinnedAtLastScroll = () =>\n lastAppliedTarget !== null &&\n Math.abs(lastScrollTop - lastAppliedTarget) <= 1;\n\n const handleScroll = () => {\n const viewport = listenedViewport;\n if (!viewport) return;\n const scrollTop = viewport.scrollTop;\n const maxScrollTop = Math.max(\n 0,\n viewport.scrollHeight - viewport.clientHeight,\n );\n // A range clamp starts beyond the new maximum and lands on it.\n const isRangeClamp =\n scrollTop < lastScrollTop &&\n lastScrollTop > maxScrollTop + 1 &&\n Math.abs(scrollTop - maxScrollTop) <= 1;\n\n if (isRangeClamp && wasPinnedAtLastScroll() && !restoredThisTurn) {\n restoreScrollTop ??= lastScrollTop;\n scheduler.schedule();\n }\n\n lastScrollTop = scrollTop;\n };\n\n const listenViewport = (viewport: HTMLElement | null) => {\n if (listenedViewport === viewport) return;\n if (listenedViewport) {\n listenedViewport.removeEventListener(\"scroll\", handleScroll);\n }\n listenedViewport = viewport;\n restoredThisTurn = false;\n clearRestore();\n if (viewport) {\n viewport.addEventListener(\"scroll\", handleScroll, { passive: true });\n lastScrollTop = viewport.scrollTop;\n }\n };\n\n function apply() {\n const state = store.getState();\n const { viewport, anchor, target } = state.element;\n const clamp = state.targetConfig;\n\n listenViewport(state.turnAnchor === \"top\" ? viewport : null);\n\n if (state.turnAnchor !== \"top\" || !viewport) {\n observers.disconnect();\n clearRestore();\n if (reserve) {\n setReserveHeight(reserve, 0);\n reserve.remove();\n }\n return;\n }\n\n if (!anchor && !target && !clamp && state.topAnchorTurn) {\n // ThreadViewport clears this state once the stored pair stops being the\n // trailing turn (followed at most by pending user messages), so reaching\n // here means the anchor gap is transient and the next run is imminent.\n observers.disconnect();\n clearRestore();\n if (\n reserve?.parentElement &&\n reserve.parentElement.lastElementChild !== reserve\n ) {\n reserve.parentElement.append(reserve);\n }\n return;\n }\n\n if (!anchor || !target || !clamp) {\n observers.disconnect();\n clearRestore();\n if (reserve) {\n setReserveHeight(reserve, 0);\n reserve.remove();\n }\n return;\n }\n\n reserve ??= createReserveElement();\n\n if (\n reserve.parentElement !== target.parentElement ||\n reserve.previousElementSibling !== target\n ) {\n target.after(reserve);\n }\n\n observers.target(viewport, anchor, target);\n\n const reserveChanged = setReserveHeight(\n reserve,\n computeTopAnchorReserve({ viewport, anchor, reserve, ...clamp }),\n );\n\n if (reserveChanged) {\n scheduler.schedule();\n return;\n }\n\n const anchorId = getAnchorId(anchor);\n const targetScrollTop = snapScrollTop(\n computeTopAnchorTargetScrollTop({ viewport, anchor, ...clamp }),\n );\n\n if (anchorId === undefined || anchorId !== lastScrolledAnchorId) {\n restoreScrollTop = null;\n restoredThisTurn = false;\n if (Math.abs(viewport.scrollTop - targetScrollTop) > 1) {\n viewport.scrollTo({ top: targetScrollTop, behavior: \"smooth\" });\n }\n if (anchorId !== undefined) lastScrolledAnchorId = anchorId;\n } else if (restoreScrollTop !== null && lastAppliedTarget !== null) {\n // Restore the anchor-relative position: if content above the anchor\n // changed height and the browser already adjusted scrollTop to match\n // (scroll anchoring), the desired offset equals the current one and\n // this is a no-op.\n const desired = snapScrollTop(\n restoreScrollTop + (targetScrollTop - lastAppliedTarget),\n );\n restoreScrollTop = null;\n restoredThisTurn = true;\n if (Math.abs(viewport.scrollTop - desired) > 1) {\n viewport.scrollTo({ top: desired, behavior: \"instant\" });\n }\n }\n\n lastAppliedTarget = targetScrollTop;\n }\n\n const scheduler = createFrameScheduler(apply);\n const observers = createReserveObservers(scheduler.schedule);\n\n scheduler.schedule();\n const unsubscribe = store.subscribe(scheduler.schedule);\n\n return () => {\n scheduler.cancel();\n unsubscribe();\n observers.disconnect();\n listenViewport(null);\n reserve?.remove();\n };\n};\n"],"mappings":"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"}
@@ -1,11 +1,10 @@
1
- //#region src/primitives/thread/topAnchor/topAnchorTurn.d.ts
2
1
  type TopAnchorTurnMessage = {
3
- readonly id: string;
4
- readonly role: string;
2
+ readonly id: string;
3
+ readonly role: string;
5
4
  };
6
5
  export type TopAnchorTurn = {
7
- readonly anchorId: string;
8
- readonly targetId: string;
6
+ readonly anchorId: string;
7
+ readonly targetId: string;
9
8
  };
10
9
  /**
11
10
  * A stored turn stays valid only while it is still the trailing turn: the
@@ -15,14 +14,14 @@ export type TopAnchorTurn = {
15
14
  * turn completed elsewhere), so the reserve must be torn down, not preserved.
16
15
  */
17
16
  export declare const isTopAnchorTurnValid: (turn: TopAnchorTurn | null, messages: readonly TopAnchorTurnMessage[]) => boolean;
18
- export declare const getActiveTopAnchorTurn: ({ isRunning, messages }: {
19
- readonly isRunning: boolean;
20
- readonly messages: readonly TopAnchorTurnMessage[];
17
+ export declare const getActiveTopAnchorTurn: ({ isRunning, messages, }: {
18
+ readonly isRunning: boolean;
19
+ readonly messages: readonly TopAnchorTurnMessage[];
21
20
  }) => {
22
- anchorId: string;
23
- targetId: string;
21
+ anchorId: string;
22
+ targetId: string;
24
23
  } | null;
25
24
  export declare const getActiveTopAnchorAnchorId: (options: Parameters<typeof getActiveTopAnchorTurn>[0]) => string | undefined;
26
25
  export declare const getActiveTopAnchorTargetId: (options: Parameters<typeof getActiveTopAnchorTurn>[0]) => string | undefined;
27
- //#endregion
26
+ export {};
28
27
  //# sourceMappingURL=topAnchorTurn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"topAnchorTurn.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/topAnchorTurn.ts"],"mappings":";KAEK;WACM;WACA;;YAGC;WACD;WACA;;;;;;;;;qBAUE,uBACX,MAAM,sBACN,mBAAmB;qBAeR,2BAA0B,WAAA;WAI5B;WACA,mBAAmB;;;;;qBAWjB,6BACX,SAAS,kBAAkB;qBAGhB,6BACX,SAAS,kBAAkB"}
1
+ {"version":3,"file":"topAnchorTurn.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/topAnchorTurn.ts"],"names":[],"mappings":"AAEA,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,aAAa,GAAG,IAAI,EAC1B,UAAU,SAAS,oBAAoB,EAAE,YAa1C,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,0BAGpC;IACD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACpD;;;QAQA,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,SAAS,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,uBACT,CAAC;AAE/C,eAAO,MAAM,0BAA0B,GACrC,SAAS,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,uBACT,CAAC"}
@@ -1,4 +1,3 @@
1
- //#region src/primitives/thread/topAnchor/topAnchorUtils.d.ts
2
1
  /**
3
2
  * Convert a supported CSS length string (`px`, `em`, `rem`) into pixels,
4
3
  * resolving font-relative units against the supplied element's computed style.
@@ -13,5 +12,4 @@ export declare const getAnchorId: (anchor: HTMLElement) => string | undefined;
13
12
  export declare const createReserveElement: () => HTMLDivElement;
14
13
  export declare const setReserveHeight: (reserve: HTMLElement, height: number) => boolean;
15
14
  export declare const snapScrollTop: (top: number) => number;
16
- //#endregion
17
15
  //# sourceMappingURL=topAnchorUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"topAnchorUtils.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/topAnchorUtils.ts"],"mappings":";;;;;;;;;;qBAWa,iBAAkB,eAAe,SAAS;qBAoB1C,cAAe,QAAQ;qBAEvB,4BAAoB;qBAWpB,mBAAoB,SAAS,aAAa;qBAU1C,gBAAiB"}
1
+ {"version":3,"file":"topAnchorUtils.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/topAnchorUtils.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,SAAS,WAAW,KAAG,MAkBpE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,uBAA6B,CAAC;AAE7E,eAAO,MAAM,oBAAoB,sBAShC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,WAAW,EAAE,QAAQ,MAAM,YAQpE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,WAGxC,CAAC"}
@@ -1,9 +1,7 @@
1
- //#region src/primitives/thread/topAnchor/useTopAnchorReserve.d.ts
2
1
  /**
3
2
  * Mounts the top-turn-anchor reserve element against the active
4
3
  * `ThreadViewport` store. Call this from inside the scrollable viewport so
5
4
  * the reserve `<div>` is appended next to the streaming assistant message.
6
5
  */
7
6
  export declare const useTopAnchorReserve: (enabled: boolean) => void;
8
- //#endregion
9
7
  //# sourceMappingURL=useTopAnchorReserve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTopAnchorReserve.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/useTopAnchorReserve.ts"],"mappings":";;;;;;qBAWa,sBAAuB"}
1
+ {"version":3,"file":"useTopAnchorReserve.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/useTopAnchorReserve.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,OAAO,SAOnD,CAAC"}
@@ -1,34 +1,32 @@
1
- import { RefCallback } from "react";
2
- //#region src/primitives/thread/useThreadViewportAutoScroll.d.ts
1
+ import { type RefCallback } from "react";
3
2
  export declare namespace useThreadViewportAutoScroll {
4
- type Options = {
5
- /**
6
- * Whether to automatically scroll to the bottom when new messages are added.
7
- * When enabled, the viewport will automatically scroll to show the latest content.
8
- *
9
- * Default false if `turnAnchor` is "top", otherwise defaults to true.
10
- */
11
- autoScroll?: boolean | undefined;
12
- /**
13
- * Whether to scroll to bottom when a new run starts.
14
- *
15
- * Defaults to true.
16
- */
17
- scrollToBottomOnRunStart?: boolean | undefined;
18
- /**
19
- * Whether to scroll to bottom when messages first appear in the thread.
20
- *
21
- * Defaults to true.
22
- */
23
- scrollToBottomOnInitialize?: boolean | undefined;
24
- /**
25
- * Whether to scroll to bottom when switching to a different thread.
26
- *
27
- * Defaults to true.
28
- */
29
- scrollToBottomOnThreadSwitch?: boolean | undefined;
30
- };
3
+ type Options = {
4
+ /**
5
+ * Whether to automatically scroll to the bottom when new messages are added.
6
+ * When enabled, the viewport will automatically scroll to show the latest content.
7
+ *
8
+ * Default false if `turnAnchor` is "top", otherwise defaults to true.
9
+ */
10
+ autoScroll?: boolean | undefined;
11
+ /**
12
+ * Whether to scroll to bottom when a new run starts.
13
+ *
14
+ * Defaults to true.
15
+ */
16
+ scrollToBottomOnRunStart?: boolean | undefined;
17
+ /**
18
+ * Whether to scroll to bottom when messages first appear in the thread.
19
+ *
20
+ * Defaults to true.
21
+ */
22
+ scrollToBottomOnInitialize?: boolean | undefined;
23
+ /**
24
+ * Whether to scroll to bottom when switching to a different thread.
25
+ *
26
+ * Defaults to true.
27
+ */
28
+ scrollToBottomOnThreadSwitch?: boolean | undefined;
29
+ };
31
30
  }
32
- export declare const useThreadViewportAutoScroll: <TElement extends HTMLElement>({ autoScroll, scrollToBottomOnRunStart, scrollToBottomOnInitialize, scrollToBottomOnThreadSwitch }: useThreadViewportAutoScroll.Options) => RefCallback<TElement>;
33
- //#endregion
31
+ export declare const useThreadViewportAutoScroll: <TElement extends HTMLElement>({ autoScroll, scrollToBottomOnRunStart, scrollToBottomOnInitialize, scrollToBottomOnThreadSwitch, }: useThreadViewportAutoScroll.Options) => RefCallback<TElement>;
34
32
  //# sourceMappingURL=useThreadViewportAutoScroll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useThreadViewportAutoScroll.d.ts","names":[],"sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"mappings":";;yBAgBiB;OACH;;;;;;;IAOV;;;;;;IAOA;;;;;;IAOA;;;;;;IAOA;;;qBAIS,8BAA+B,iBAAiB,eAAa,YAAA,0BAAA,4BAAA,gCAKvE,4BAA4B,YAAU,YAAY"}
1
+ {"version":3,"file":"useThreadViewportAutoScroll.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,OAAO,CAAC;AAgC/E,yBAAiB,2BAA2B,CAAC;IAC3C,KAAY,OAAO,GAAG;QACpB;;;;;WAKG;QACH,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjC;;;;WAIG;QACH,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAE/C;;;;WAIG;QACH,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjD;;;;WAIG;QACH,4BAA4B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KACpD,CAAC;CACH;AAED,eAAO,MAAM,2BAA2B,GAAI,QAAQ,SAAS,WAAW,EAAE,qGAKvE,2BAA2B,CAAC,OAAO,KAAG,WAAW,CAAC,QAAQ,CAqN5D,CAAC"}
@@ -4,11 +4,18 @@ import { writableStore } from "../../context/ReadonlyStore.js";
4
4
  import { useOnScrollToBottom } from "../../utils/hooks/useOnScrollToBottom.js";
5
5
  import { useManagedRef } from "../../utils/hooks/useManagedRef.js";
6
6
  import { useOnResizeContent } from "../../utils/hooks/useOnResizeContent.js";
7
- import { useAuiEvent, useAuiState } from "@assistant-ui/store";
8
7
  import { useCallback, useLayoutEffect, useRef } from "@assistant-ui/tap/react-shim";
8
+ import { useAuiEvent, useAuiState } from "@assistant-ui/store";
9
9
  import { useComposedRefs } from "radix-ui/internal";
10
10
  import { isUserScrollUp, isViewportAtBottom, viewportOverflows } from "@assistant-ui/store/client";
11
11
  //#region src/primitives/thread/useThreadViewportAutoScroll.ts
12
+ const ACTIVATION_KEYS = /* @__PURE__ */ new Set(["Enter", " "]);
13
+ const TEXT_ENTRY_SELECTOR = [
14
+ "textarea",
15
+ "select",
16
+ "[contenteditable]:not([contenteditable='false'])",
17
+ "input:not([type='checkbox']):not([type='radio']):not([type='button']):not([type='submit']):not([type='reset']):not([type='image']):not([type='range']):not([type='file']):not([type='color'])"
18
+ ].join(", ");
12
19
  const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunStart = true, scrollToBottomOnInitialize = true, scrollToBottomOnThreadSwitch = true }) => {
13
20
  const divRef = useRef(null);
14
21
  const hasMessages = useAuiState((s) => s.thread.messages.length > 0);
@@ -97,13 +104,21 @@ const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunStart = tr
97
104
  });
98
105
  const scrollRef = useManagedRef((el) => {
99
106
  const cancelPendingScrollToBottom = () => {
107
+ cancelScheduledFrame();
100
108
  scrollingToBottomBehaviorRef.current = null;
101
109
  };
110
+ const cancelOnKeyDown = (event) => {
111
+ if (!ACTIVATION_KEYS.has(event.key)) return;
112
+ if (event.target?.closest?.(TEXT_ENTRY_SELECTOR)) return;
113
+ cancelPendingScrollToBottom();
114
+ };
102
115
  el.addEventListener("scroll", handleScroll);
103
116
  el.addEventListener("pointerdown", cancelPendingScrollToBottom);
117
+ el.addEventListener("keydown", cancelOnKeyDown);
104
118
  return () => {
105
119
  el.removeEventListener("scroll", handleScroll);
106
120
  el.removeEventListener("pointerdown", cancelPendingScrollToBottom);
121
+ el.removeEventListener("keydown", cancelOnKeyDown);
107
122
  };
108
123
  });
109
124
  useLayoutEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"useThreadViewportAutoScroll.js","names":["useComposedRefs","useCallback","useLayoutEffect","useRef","RefCallback","useAuiEvent","useAuiState","isUserScrollUp","isViewportAtBottom","viewportOverflows","useOnResizeContent","useOnScrollToBottom","useManagedRef","writableStore","useThreadViewportStore","useThreadViewportAutoScroll","Options","autoScroll","scrollToBottomOnRunStart","scrollToBottomOnInitialize","scrollToBottomOnThreadSwitch","HTMLElement","TElement","divRef","hasMessages","s","thread","messages","length","isRunning","initializeScrollRequestedRef","scheduledFrameRef","threadViewportStore","undefined","getState","turnAnchor","lastScrollTop","lastScrollHeight","lastObservedScrollHeight","lastObservedClientHeight","scrollingToBottomBehaviorRef","ScrollBehavior","followBottomRef","previousAutoScrollRef","previousAutoScroll","current","div","scrollToBottom","behavior","scrollTo","top","scrollHeight","cancelScheduledFrame","cancelAnimationFrame","scheduleScrollToBottom","requestAnimationFrame","hasActiveTopAnchor","state","element","viewport","anchor","handleScroll","isAtBottom","newIsAtBottom","isInFlightDownwardScroll","scrollTop","userScrolledUp","shouldUpdate","setState","resizeRef","clientHeight","scrollBehavior","scrollRef","el","cancelPendingScrollToBottom","addEventListener","removeEventListener","autoScrollRef"],"sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"sourcesContent":["\"use client\";\n\nimport { useComposedRefs } from \"radix-ui/internal\";\nimport { useCallback, useLayoutEffect, useRef, type RefCallback } from \"react\";\nimport { useAuiEvent, useAuiState } from \"@assistant-ui/store\";\nimport {\n isUserScrollUp,\n isViewportAtBottom,\n viewportOverflows,\n} from \"@assistant-ui/store/client\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\nimport { writableStore } from \"../../context/ReadonlyStore\";\nimport { useThreadViewportStore } from \"../../context/react/ThreadViewportContext\";\n\nexport namespace useThreadViewportAutoScroll {\n export type Options = {\n /**\n * Whether to automatically scroll to the bottom when new messages are added.\n * When enabled, the viewport will automatically scroll to show the latest content.\n *\n * Default false if `turnAnchor` is \"top\", otherwise defaults to true.\n */\n autoScroll?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when a new run starts.\n *\n * Defaults to true.\n */\n scrollToBottomOnRunStart?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when messages first appear in the thread.\n *\n * Defaults to true.\n */\n scrollToBottomOnInitialize?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when switching to a different thread.\n *\n * Defaults to true.\n */\n scrollToBottomOnThreadSwitch?: boolean | undefined;\n };\n}\n\nexport const useThreadViewportAutoScroll = <TElement extends HTMLElement>({\n autoScroll,\n scrollToBottomOnRunStart = true,\n scrollToBottomOnInitialize = true,\n scrollToBottomOnThreadSwitch = true,\n}: useThreadViewportAutoScroll.Options): RefCallback<TElement> => {\n const divRef = useRef<TElement>(null);\n const hasMessages = useAuiState((s) => s.thread.messages.length > 0);\n const isRunning = useAuiState((s) => s.thread.isRunning);\n const initializeScrollRequestedRef = useRef(false);\n const scheduledFrameRef = useRef<number | null>(null);\n\n const threadViewportStore = useThreadViewportStore();\n if (autoScroll === undefined) {\n autoScroll = threadViewportStore.getState().turnAnchor !== \"top\";\n }\n\n const lastScrollTop = useRef<number>(0);\n const lastScrollHeight = useRef<number>(0);\n const lastObservedScrollHeight = useRef<number>(0);\n const lastObservedClientHeight = useRef<number>(0);\n\n // Pending bottom-scroll intent. Planted by initialize/run-start/switch/button\n // triggers, cleared when handleScroll confirms we reached bottom, or when the\n // user actively scrolls up while content size is stable.\n const scrollingToBottomBehaviorRef = useRef<ScrollBehavior | null>(null);\n const followBottomRef = useRef(autoScroll);\n const previousAutoScrollRef = useRef(autoScroll);\n\n useLayoutEffect(() => {\n const previousAutoScroll = previousAutoScrollRef.current;\n previousAutoScrollRef.current = autoScroll;\n if (previousAutoScroll || !autoScroll) return;\n\n const div = divRef.current;\n followBottomRef.current = div !== null && isViewportAtBottom(div);\n }, [autoScroll]);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior) => {\n const div = divRef.current;\n if (!div) return;\n\n followBottomRef.current = true;\n scrollingToBottomBehaviorRef.current = behavior;\n div.scrollTo({ top: div.scrollHeight, behavior });\n }, []);\n\n const cancelScheduledFrame = useCallback(() => {\n if (scheduledFrameRef.current === null) return;\n cancelAnimationFrame(scheduledFrameRef.current);\n scheduledFrameRef.current = null;\n }, []);\n\n const scheduleScrollToBottom = useCallback(\n (behavior: ScrollBehavior) => {\n scrollingToBottomBehaviorRef.current = behavior;\n cancelScheduledFrame();\n scheduledFrameRef.current = requestAnimationFrame(() => {\n scheduledFrameRef.current = null;\n scrollToBottom(behavior);\n });\n },\n [cancelScheduledFrame, scrollToBottom],\n );\n\n useLayoutEffect(() => () => cancelScheduledFrame(), [cancelScheduledFrame]);\n\n const hasActiveTopAnchor = useCallback(() => {\n const state = threadViewportStore.getState();\n return (\n state.turnAnchor === \"top\" &&\n state.element.viewport === divRef.current &&\n state.element.anchor !== null\n );\n }, [threadViewportStore]);\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = threadViewportStore.getState().isAtBottom;\n const newIsAtBottom = isViewportAtBottom(div);\n\n const isInFlightDownwardScroll =\n !newIsAtBottom && lastScrollTop.current < div.scrollTop;\n if (isInFlightDownwardScroll) {\n // no-op: a smooth scroll-to-bottom fires many midpoint scroll events\n // before landing, don't flicker isAtBottom or clear intent mid-animation\n } else {\n const userScrolledUp = isUserScrollUp(\n {\n scrollTop: lastScrollTop.current,\n scrollHeight: lastScrollHeight.current,\n },\n div,\n );\n\n if (newIsAtBottom) {\n // newIsAtBottom is ambiguous when the viewport doesn't overflow —\n // keep intent alive until content can actually scroll\n if (viewportOverflows(div)) {\n scrollingToBottomBehaviorRef.current = null;\n }\n if (autoScroll) followBottomRef.current = true;\n } else if (userScrolledUp) {\n cancelScheduledFrame();\n scrollingToBottomBehaviorRef.current = null;\n followBottomRef.current = false;\n }\n\n const shouldUpdate =\n newIsAtBottom || scrollingToBottomBehaviorRef.current === null;\n\n if (shouldUpdate && newIsAtBottom !== isAtBottom) {\n writableStore(threadViewportStore).setState({\n isAtBottom: newIsAtBottom,\n });\n }\n }\n\n lastScrollTop.current = div.scrollTop;\n lastScrollHeight.current = div.scrollHeight;\n };\n\n const resizeRef = useOnResizeContent(() => {\n const div = divRef.current;\n if (!div) return;\n\n const { scrollHeight, clientHeight } = div;\n if (\n scrollHeight === lastObservedScrollHeight.current &&\n clientHeight === lastObservedClientHeight.current\n ) {\n return;\n }\n lastObservedScrollHeight.current = scrollHeight;\n lastObservedClientHeight.current = clientHeight;\n\n const scrollBehavior = scrollingToBottomBehaviorRef.current;\n if (scrollBehavior && hasActiveTopAnchor()) {\n // Let the top-anchor reserve own scrolling while a run starts to avoid a bottom-scroll race.\n scrollingToBottomBehaviorRef.current = null;\n } else if (scrollBehavior) {\n scrollToBottom(scrollBehavior);\n } else if (\n autoScroll &&\n !(isRunning && hasActiveTopAnchor()) &&\n followBottomRef.current\n ) {\n scrollToBottom(\"instant\");\n }\n\n handleScroll();\n });\n\n const scrollRef = useManagedRef<HTMLElement>((el) => {\n // A pointer gesture invalidates pending bottom-scroll intent; otherwise an\n // intent kept alive by a non-overflowing thread (see handleScroll) hijacks\n // the next content growth, e.g. expanding a collapsible tool call.\n const cancelPendingScrollToBottom = () => {\n scrollingToBottomBehaviorRef.current = null;\n };\n el.addEventListener(\"scroll\", handleScroll);\n el.addEventListener(\"pointerdown\", cancelPendingScrollToBottom);\n return () => {\n el.removeEventListener(\"scroll\", handleScroll);\n el.removeEventListener(\"pointerdown\", cancelPendingScrollToBottom);\n };\n });\n\n useLayoutEffect(() => {\n if (!scrollToBottomOnInitialize) return;\n if (!hasMessages) {\n initializeScrollRequestedRef.current = false;\n return;\n }\n if (initializeScrollRequestedRef.current) return;\n\n initializeScrollRequestedRef.current = true;\n // defer to an in-flight run (e.g. first message on a new thread) that\n // already planted intent — otherwise we'd downgrade its \"auto\" to \"instant\"\n if (scrollingToBottomBehaviorRef.current !== null) return;\n scheduleScrollToBottom(\"instant\");\n }, [hasMessages, scheduleScrollToBottom, scrollToBottomOnInitialize]);\n\n useOnScrollToBottom(({ behavior }) => {\n scrollToBottom(behavior);\n });\n\n useAuiEvent(\"thread.runStart\", () => {\n if (!scrollToBottomOnRunStart) return;\n if (threadViewportStore.getState().turnAnchor === \"top\") return;\n scheduleScrollToBottom(\"auto\");\n });\n\n useAuiEvent(\"threads.selectionChanged\", () => {\n if (!scrollToBottomOnThreadSwitch) return;\n scheduleScrollToBottom(\"instant\");\n });\n\n const autoScrollRef = useComposedRefs<TElement>(resizeRef, scrollRef, divRef);\n return autoScrollRef as RefCallback<TElement>;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"useThreadViewportAutoScroll.js","names":["useComposedRefs","useCallback","useLayoutEffect","useRef","RefCallback","useAuiEvent","useAuiState","isUserScrollUp","isViewportAtBottom","viewportOverflows","useOnResizeContent","useOnScrollToBottom","useManagedRef","writableStore","useThreadViewportStore","ACTIVATION_KEYS","Set","TEXT_ENTRY_SELECTOR","join","useThreadViewportAutoScroll","Options","autoScroll","scrollToBottomOnRunStart","scrollToBottomOnInitialize","scrollToBottomOnThreadSwitch","HTMLElement","TElement","divRef","hasMessages","s","thread","messages","length","isRunning","initializeScrollRequestedRef","scheduledFrameRef","threadViewportStore","undefined","getState","turnAnchor","lastScrollTop","lastScrollHeight","lastObservedScrollHeight","lastObservedClientHeight","scrollingToBottomBehaviorRef","ScrollBehavior","followBottomRef","previousAutoScrollRef","previousAutoScroll","current","div","scrollToBottom","behavior","scrollTo","top","scrollHeight","cancelScheduledFrame","cancelAnimationFrame","scheduleScrollToBottom","requestAnimationFrame","hasActiveTopAnchor","state","element","viewport","anchor","handleScroll","isAtBottom","newIsAtBottom","isInFlightDownwardScroll","scrollTop","userScrolledUp","shouldUpdate","setState","resizeRef","clientHeight","scrollBehavior","scrollRef","el","cancelPendingScrollToBottom","cancelOnKeyDown","event","KeyboardEvent","has","key","target","Element","closest","addEventListener","removeEventListener","autoScrollRef"],"sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"sourcesContent":["\"use client\";\n\nimport { useComposedRefs } from \"radix-ui/internal\";\nimport { useCallback, useLayoutEffect, useRef, type RefCallback } from \"react\";\nimport { useAuiEvent, useAuiState } from \"@assistant-ui/store\";\nimport {\n isUserScrollUp,\n isViewportAtBottom,\n viewportOverflows,\n} from \"@assistant-ui/store/client\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\nimport { writableStore } from \"../../context/ReadonlyStore\";\nimport { useThreadViewportStore } from \"../../context/react/ThreadViewportContext\";\n\n// Enter and Space activate a focused control, which is how a collapsible tool\n// call expands without a pointer event ever firing. No other key changes thread\n// content: the keys that scroll the viewport reach handleScroll, which already\n// clears the intent when the user scrolls up.\nconst ACTIVATION_KEYS = new Set([\"Enter\", \" \"]);\n\n// A control that consumes the activation key itself instead of acting on thread\n// content. `contenteditable=\"false\"` marks a non-editable island inside an\n// editable tree, so it is excluded the way ComposerRoot already excludes it;\n// the input types left out are the ones a key activates rather than fills.\nconst TEXT_ENTRY_SELECTOR = [\n \"textarea\",\n \"select\",\n \"[contenteditable]:not([contenteditable='false'])\",\n \"input:not([type='checkbox']):not([type='radio']):not([type='button'])\" +\n \":not([type='submit']):not([type='reset']):not([type='image'])\" +\n \":not([type='range']):not([type='file']):not([type='color'])\",\n].join(\", \");\n\nexport namespace useThreadViewportAutoScroll {\n export type Options = {\n /**\n * Whether to automatically scroll to the bottom when new messages are added.\n * When enabled, the viewport will automatically scroll to show the latest content.\n *\n * Default false if `turnAnchor` is \"top\", otherwise defaults to true.\n */\n autoScroll?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when a new run starts.\n *\n * Defaults to true.\n */\n scrollToBottomOnRunStart?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when messages first appear in the thread.\n *\n * Defaults to true.\n */\n scrollToBottomOnInitialize?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when switching to a different thread.\n *\n * Defaults to true.\n */\n scrollToBottomOnThreadSwitch?: boolean | undefined;\n };\n}\n\nexport const useThreadViewportAutoScroll = <TElement extends HTMLElement>({\n autoScroll,\n scrollToBottomOnRunStart = true,\n scrollToBottomOnInitialize = true,\n scrollToBottomOnThreadSwitch = true,\n}: useThreadViewportAutoScroll.Options): RefCallback<TElement> => {\n const divRef = useRef<TElement>(null);\n const hasMessages = useAuiState((s) => s.thread.messages.length > 0);\n const isRunning = useAuiState((s) => s.thread.isRunning);\n const initializeScrollRequestedRef = useRef(false);\n const scheduledFrameRef = useRef<number | null>(null);\n\n const threadViewportStore = useThreadViewportStore();\n if (autoScroll === undefined) {\n autoScroll = threadViewportStore.getState().turnAnchor !== \"top\";\n }\n\n const lastScrollTop = useRef<number>(0);\n const lastScrollHeight = useRef<number>(0);\n const lastObservedScrollHeight = useRef<number>(0);\n const lastObservedClientHeight = useRef<number>(0);\n\n // Pending bottom-scroll intent. Planted by initialize/run-start/switch/button\n // triggers, cleared when handleScroll confirms we reached bottom, or when the\n // user actively scrolls up while content size is stable.\n const scrollingToBottomBehaviorRef = useRef<ScrollBehavior | null>(null);\n const followBottomRef = useRef(autoScroll);\n const previousAutoScrollRef = useRef(autoScroll);\n\n useLayoutEffect(() => {\n const previousAutoScroll = previousAutoScrollRef.current;\n previousAutoScrollRef.current = autoScroll;\n if (previousAutoScroll || !autoScroll) return;\n\n const div = divRef.current;\n followBottomRef.current = div !== null && isViewportAtBottom(div);\n }, [autoScroll]);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior) => {\n const div = divRef.current;\n if (!div) return;\n\n followBottomRef.current = true;\n scrollingToBottomBehaviorRef.current = behavior;\n div.scrollTo({ top: div.scrollHeight, behavior });\n }, []);\n\n const cancelScheduledFrame = useCallback(() => {\n if (scheduledFrameRef.current === null) return;\n cancelAnimationFrame(scheduledFrameRef.current);\n scheduledFrameRef.current = null;\n }, []);\n\n const scheduleScrollToBottom = useCallback(\n (behavior: ScrollBehavior) => {\n scrollingToBottomBehaviorRef.current = behavior;\n cancelScheduledFrame();\n scheduledFrameRef.current = requestAnimationFrame(() => {\n scheduledFrameRef.current = null;\n scrollToBottom(behavior);\n });\n },\n [cancelScheduledFrame, scrollToBottom],\n );\n\n useLayoutEffect(() => () => cancelScheduledFrame(), [cancelScheduledFrame]);\n\n const hasActiveTopAnchor = useCallback(() => {\n const state = threadViewportStore.getState();\n return (\n state.turnAnchor === \"top\" &&\n state.element.viewport === divRef.current &&\n state.element.anchor !== null\n );\n }, [threadViewportStore]);\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = threadViewportStore.getState().isAtBottom;\n const newIsAtBottom = isViewportAtBottom(div);\n\n const isInFlightDownwardScroll =\n !newIsAtBottom && lastScrollTop.current < div.scrollTop;\n if (isInFlightDownwardScroll) {\n // no-op: a smooth scroll-to-bottom fires many midpoint scroll events\n // before landing, don't flicker isAtBottom or clear intent mid-animation\n } else {\n const userScrolledUp = isUserScrollUp(\n {\n scrollTop: lastScrollTop.current,\n scrollHeight: lastScrollHeight.current,\n },\n div,\n );\n\n if (newIsAtBottom) {\n // newIsAtBottom is ambiguous when the viewport doesn't overflow —\n // keep intent alive until content can actually scroll\n if (viewportOverflows(div)) {\n scrollingToBottomBehaviorRef.current = null;\n }\n if (autoScroll) followBottomRef.current = true;\n } else if (userScrolledUp) {\n cancelScheduledFrame();\n scrollingToBottomBehaviorRef.current = null;\n followBottomRef.current = false;\n }\n\n const shouldUpdate =\n newIsAtBottom || scrollingToBottomBehaviorRef.current === null;\n\n if (shouldUpdate && newIsAtBottom !== isAtBottom) {\n writableStore(threadViewportStore).setState({\n isAtBottom: newIsAtBottom,\n });\n }\n }\n\n lastScrollTop.current = div.scrollTop;\n lastScrollHeight.current = div.scrollHeight;\n };\n\n const resizeRef = useOnResizeContent(() => {\n const div = divRef.current;\n if (!div) return;\n\n const { scrollHeight, clientHeight } = div;\n if (\n scrollHeight === lastObservedScrollHeight.current &&\n clientHeight === lastObservedClientHeight.current\n ) {\n return;\n }\n lastObservedScrollHeight.current = scrollHeight;\n lastObservedClientHeight.current = clientHeight;\n\n const scrollBehavior = scrollingToBottomBehaviorRef.current;\n if (scrollBehavior && hasActiveTopAnchor()) {\n // Let the top-anchor reserve own scrolling while a run starts to avoid a bottom-scroll race.\n scrollingToBottomBehaviorRef.current = null;\n } else if (scrollBehavior) {\n scrollToBottom(scrollBehavior);\n } else if (\n autoScroll &&\n !(isRunning && hasActiveTopAnchor()) &&\n followBottomRef.current\n ) {\n scrollToBottom(\"instant\");\n }\n\n handleScroll();\n });\n\n const scrollRef = useManagedRef<HTMLElement>((el) => {\n // A user gesture invalidates pending bottom-scroll intent; otherwise an\n // intent kept alive by a non-overflowing thread (see handleScroll) hijacks\n // the next content growth, e.g. expanding a collapsible tool call. Keyboard\n // activation reaches that same content without ever emitting a pointer\n // event, so it has to cancel the intent too.\n const cancelPendingScrollToBottom = () => {\n // A scheduled frame re-plants the intent when it runs, so clearing the\n // ref alone leaves the gesture undone.\n cancelScheduledFrame();\n scrollingToBottomBehaviorRef.current = null;\n };\n // The composer renders inside the viewport, so its keystrokes bubble here;\n // only an activation key aimed at something other than a text field is a\n // gesture on thread content.\n const cancelOnKeyDown = (event: KeyboardEvent) => {\n if (!ACTIVATION_KEYS.has(event.key)) return;\n const target = event.target as Element | null;\n if (target?.closest?.(TEXT_ENTRY_SELECTOR)) return;\n cancelPendingScrollToBottom();\n };\n el.addEventListener(\"scroll\", handleScroll);\n el.addEventListener(\"pointerdown\", cancelPendingScrollToBottom);\n el.addEventListener(\"keydown\", cancelOnKeyDown);\n return () => {\n el.removeEventListener(\"scroll\", handleScroll);\n el.removeEventListener(\"pointerdown\", cancelPendingScrollToBottom);\n el.removeEventListener(\"keydown\", cancelOnKeyDown);\n };\n });\n\n useLayoutEffect(() => {\n if (!scrollToBottomOnInitialize) return;\n if (!hasMessages) {\n initializeScrollRequestedRef.current = false;\n return;\n }\n if (initializeScrollRequestedRef.current) return;\n\n initializeScrollRequestedRef.current = true;\n // defer to an in-flight run (e.g. first message on a new thread) that\n // already planted intent — otherwise we'd downgrade its \"auto\" to \"instant\"\n if (scrollingToBottomBehaviorRef.current !== null) return;\n scheduleScrollToBottom(\"instant\");\n }, [hasMessages, scheduleScrollToBottom, scrollToBottomOnInitialize]);\n\n useOnScrollToBottom(({ behavior }) => {\n scrollToBottom(behavior);\n });\n\n useAuiEvent(\"thread.runStart\", () => {\n if (!scrollToBottomOnRunStart) return;\n if (threadViewportStore.getState().turnAnchor === \"top\") return;\n scheduleScrollToBottom(\"auto\");\n });\n\n useAuiEvent(\"threads.selectionChanged\", () => {\n if (!scrollToBottomOnThreadSwitch) return;\n scheduleScrollToBottom(\"instant\");\n });\n\n const autoScrollRef = useComposedRefs<TElement>(resizeRef, scrollRef, divRef);\n return autoScrollRef as RefCallback<TElement>;\n};\n"],"mappings":"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"}
@@ -1,16 +1,13 @@
1
- import { ThreadPrimitiveViewportProvider } from "../context/providers/ThreadViewportProvider.js";
2
- import { ThreadPrimitiveRoot } from "./thread/ThreadRoot.js";
3
- import { ThreadPrimitiveEmpty } from "./thread/ThreadEmpty.js";
4
- import { ThreadPrimitiveIf } from "./thread/ThreadIf.js";
5
- import { ThreadPrimitiveViewport } from "./thread/ThreadViewport.js";
6
- import { ThreadPrimitiveViewportFooter } from "./thread/ThreadViewportFooter.js";
7
- import { ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveUnstable_MessageById } from "./thread/ThreadMessages.js";
8
- import { ThreadPrimitiveScrollToBottom } from "./thread/ThreadScrollToBottom.js";
9
- import { ThreadPrimitiveSuggestion } from "./thread/ThreadSuggestion.js";
10
- import { ThreadPrimitiveSuggestionByIndex, ThreadPrimitiveSuggestions } from "./thread/ThreadSuggestions.js";
11
- declare namespace thread_d_exports {
12
- export { ThreadPrimitiveEmpty as Empty, ThreadPrimitiveIf as If, ThreadPrimitiveMessageByIndex as MessageByIndex, ThreadPrimitiveMessages as Messages, ThreadPrimitiveRoot as Root, ThreadPrimitiveScrollToBottom as ScrollToBottom, ThreadPrimitiveSuggestion as Suggestion, ThreadPrimitiveSuggestionByIndex as SuggestionByIndex, ThreadPrimitiveSuggestions as Suggestions, ThreadPrimitiveUnstable_MessageById as Unstable_MessageById, ThreadPrimitiveViewport as Viewport, ThreadPrimitiveViewportFooter as ViewportFooter, ThreadPrimitiveViewportProvider as ViewportProvider };
13
- }
14
- //#endregion
15
- export { ThreadPrimitiveEmpty as Empty, ThreadPrimitiveIf as If, ThreadPrimitiveMessageByIndex as MessageByIndex, ThreadPrimitiveMessages as Messages, ThreadPrimitiveRoot as Root, ThreadPrimitiveScrollToBottom as ScrollToBottom, ThreadPrimitiveSuggestion as Suggestion, ThreadPrimitiveSuggestionByIndex as SuggestionByIndex, ThreadPrimitiveSuggestions as Suggestions, ThreadPrimitiveUnstable_MessageById as Unstable_MessageById, ThreadPrimitiveViewport as Viewport, ThreadPrimitiveViewportFooter as ViewportFooter, ThreadPrimitiveViewportProvider as ViewportProvider, thread_d_exports };
1
+ export { ThreadPrimitiveRoot as Root } from "./thread/ThreadRoot.js";
2
+ export { ThreadPrimitiveEmpty as Empty } from "./thread/ThreadEmpty.js";
3
+ export { ThreadPrimitiveIf as If } from "./thread/ThreadIf.js";
4
+ export { ThreadPrimitiveViewport as Viewport } from "./thread/ThreadViewport.js";
5
+ export { ThreadPrimitiveViewportProvider as ViewportProvider } from "../context/providers/ThreadViewportProvider.js";
6
+ export { ThreadPrimitiveViewportFooter as ViewportFooter } from "./thread/ThreadViewportFooter.js";
7
+ export { ThreadPrimitiveMessages as Messages } from "./thread/ThreadMessages.js";
8
+ export { ThreadPrimitiveMessageByIndex as MessageByIndex } from "./thread/ThreadMessages.js";
9
+ export { ThreadPrimitiveUnstable_MessageById as Unstable_MessageById } from "./thread/ThreadMessages.js";
10
+ export { ThreadPrimitiveScrollToBottom as ScrollToBottom } from "./thread/ThreadScrollToBottom.js";
11
+ export { ThreadPrimitiveSuggestion as Suggestion } from "./thread/ThreadSuggestion.js";
12
+ export { ThreadPrimitiveSuggestions as Suggestions, ThreadPrimitiveSuggestionByIndex as SuggestionByIndex, } from "./thread/ThreadSuggestions.js";
16
13
  //# sourceMappingURL=thread.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"thread.d.ts","names":[],"sources":["../../src/primitives/thread.ts"],"mappings":""}
1
+ {"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../../src/primitives/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,IAAI,EAAE,+BAA4B;AAClE,OAAO,EAAE,oBAAoB,IAAI,KAAK,EAAE,gCAA6B;AACrE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,6BAA0B;AAC5D,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,mCAAgC;AAC9E,OAAO,EAAE,+BAA+B,IAAI,gBAAgB,EAAE,uDAAoD;AAClH,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,yCAAsC;AAChG,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,mCAAgC;AAC9E,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,mCAAgC;AAC1F,OAAO,EAAE,mCAAmC,IAAI,oBAAoB,EAAE,mCAAgC;AACtG,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,yCAAsC;AAChG,OAAO,EAAE,yBAAyB,IAAI,UAAU,EAAE,qCAAkC;AACpF,OAAO,EACL,0BAA0B,IAAI,WAAW,EACzC,gCAAgC,IAAI,iBAAiB,GACtD,sCAAmC"}
@@ -1,2 +1,2 @@
1
- import { ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems } from "@assistant-ui/core/react";
2
- export { ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems };
1
+ export { ThreadListPrimitiveItems, ThreadListPrimitiveItemByIndex, } from "@assistant-ui/core/react";
2
+ //# sourceMappingURL=ThreadListItems.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThreadListItems.d.ts","sourceRoot":"","sources":["../../../src/primitives/threadList/ThreadListItems.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC"}
@@ -1,14 +1,13 @@
1
- import { ActionButtonElement, ActionButtonProps } from "../../utils/createActionButton.js";
2
- //#region src/primitives/threadList/ThreadListLoadMore.d.ts
1
+ import { type ActionButtonElement, type ActionButtonProps } from "../../utils/createActionButton.js";
3
2
  declare const useThreadListLoadMore: () => (() => void) | null;
4
3
  export declare namespace ThreadListPrimitiveLoadMore {
5
- type Element = ActionButtonElement;
6
- type Props = ActionButtonProps<typeof useThreadListLoadMore>;
4
+ type Element = ActionButtonElement;
5
+ type Props = ActionButtonProps<typeof useThreadListLoadMore>;
7
6
  }
8
7
  export declare const ThreadListPrimitiveLoadMore: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
9
- asChild?: boolean;
8
+ asChild?: boolean;
10
9
  }, "ref"> & {
11
- render?: import("react").ReactElement | undefined;
10
+ render?: import("react").ReactElement | undefined;
12
11
  } & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
13
- //#endregion
12
+ export {};
14
13
  //# sourceMappingURL=ThreadListLoadMore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadListLoadMore.d.ts","names":[],"sources":["../../../src/primitives/threadList/ThreadListLoadMore.tsx"],"mappings":";;cASM;yBAMW;OACH,UAAU;OACV,QAAQ,yBAAyB;;qBAGlC,6CAA2B,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;oBAGvC,cAAA,6CAAA,cAAA"}
1
+ {"version":3,"file":"ThreadListLoadMore.d.ts","sourceRoot":"","sources":["../../../src/primitives/threadList/ThreadListLoadMore.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAEvB,0CAAuC;AAGxC,QAAA,MAAM,qBAAqB,2BAI1B,CAAC;AAEF,yBAAiB,2BAA2B,CAAC;IAC3C,KAAY,OAAO,GAAG,mBAAmB,CAAC;IAC1C,KAAY,KAAK,GAAG,iBAAiB,CAAC,OAAO,qBAAqB,CAAC,CAAC;CACrE;AAED,eAAO,MAAM,2BAA2B;;;;gHAGvC,CAAC"}
@@ -1,13 +1,11 @@
1
- import { ActionButtonElement, ActionButtonProps } from "../../utils/createActionButton.js";
2
- //#region src/primitives/threadList/ThreadListNew.d.ts
1
+ import type { ActionButtonElement, ActionButtonProps } from "../../utils/createActionButton.js";
3
2
  export declare namespace ThreadListPrimitiveNew {
4
- type Element = ActionButtonElement;
5
- type Props = ActionButtonProps<() => void>;
3
+ type Element = ActionButtonElement;
4
+ type Props = ActionButtonProps<() => void>;
6
5
  }
7
6
  export declare const ThreadListPrimitiveNew: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
8
- asChild?: boolean;
7
+ asChild?: boolean;
9
8
  }, "ref"> & {
10
- render?: import("react").ReactElement | undefined;
9
+ render?: import("react").ReactElement | undefined;
11
10
  } & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
12
- //#endregion
13
11
  //# sourceMappingURL=ThreadListNew.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadListNew.d.ts","names":[],"sources":["../../../src/primitives/threadList/ThreadListNew.tsx"],"mappings":";;yBAYiB;OACH,UAAU;OACV,QAAQ;;qBAGT,wCAAsB,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;oBAoBjC,cAAA,6CAAA,cAAA"}
1
+ {"version":3,"file":"ThreadListNew.d.ts","sourceRoot":"","sources":["../../../src/primitives/threadList/ThreadListNew.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EAClB,0CAAuC;AAOxC,yBAAiB,sBAAsB,CAAC;IACtC,KAAY,OAAO,GAAG,mBAAmB,CAAC;IAC1C,KAAY,KAAK,GAAG,iBAAiB,CAAC,MAAM,IAAI,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,sBAAsB;;;;gHAoBjC,CAAC"}
@@ -2,8 +2,8 @@
2
2
  import { Primitive as Primitive$1 } from "../../utils/Primitive.js";
3
3
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
4
4
  import { useThreadListNew } from "@assistant-ui/core/react";
5
- import { useAuiState } from "@assistant-ui/store";
6
5
  import { forwardRef } from "@assistant-ui/tap/react-shim";
6
+ import { useAuiState } from "@assistant-ui/store";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  import { composeEventHandlers } from "radix-ui/internal";
9
9
  //#region src/primitives/threadList/ThreadListNew.tsx
@@ -1,15 +1,14 @@
1
1
  import { Primitive } from "../../utils/Primitive.js";
2
- import { ComponentPropsWithoutRef, ComponentRef } from "react";
3
- //#region src/primitives/threadList/ThreadListRoot.d.ts
2
+ import { type ComponentPropsWithoutRef, type ComponentRef } from "react";
4
3
  type PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;
5
4
  export declare namespace ThreadListPrimitiveRoot {
6
- type Element = ComponentRef<typeof Primitive.div>;
7
- type Props = PrimitiveDivProps;
5
+ type Element = ComponentRef<typeof Primitive.div>;
6
+ type Props = PrimitiveDivProps;
8
7
  }
9
8
  export declare const ThreadListPrimitiveRoot: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & {
10
- asChild?: boolean;
9
+ asChild?: boolean;
11
10
  }, "ref"> & {
12
- render?: import("react").ReactElement | undefined;
11
+ render?: import("react").ReactElement | undefined;
13
12
  } & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
14
- //#endregion
13
+ export {};
15
14
  //# sourceMappingURL=ThreadListRoot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadListRoot.d.ts","names":[],"sources":["../../../src/primitives/threadList/ThreadListRoot.tsx"],"mappings":";;;KAUK,oBAAoB,gCAAgC,UAAU;yBAElD;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ;;qBAGT,yCAAuB,0BAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;oBAWlC,cAAA,0CAAA,cAAA"}
1
+ {"version":3,"file":"ThreadListRoot.d.ts","sourceRoot":"","sources":["../../../src/primitives/threadList/ThreadListRoot.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,iCAA8B;AAClD,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EAElB,MAAM,OAAO,CAAC;AAGf,KAAK,iBAAiB,GAAG,wBAAwB,CAAC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AAExE,yBAAiB,uBAAuB,CAAC;IACvC,KAAY,OAAO,GAAG,YAAY,CAAC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IACzD,KAAY,KAAK,GAAG,iBAAiB,CAAC;CACvC;AAED,eAAO,MAAM,uBAAuB;;;;0GAWlC,CAAC"}
@@ -1,10 +1,6 @@
1
- import { ThreadListPrimitiveNew } from "./threadList/ThreadListNew.js";
2
- import { ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems } from "./threadList/ThreadListItems.js";
3
- import { ThreadListPrimitiveLoadMore } from "./threadList/ThreadListLoadMore.js";
4
- import { ThreadListPrimitiveRoot } from "./threadList/ThreadListRoot.js";
5
- declare namespace threadList_d_exports {
6
- export { ThreadListPrimitiveItemByIndex as ItemByIndex, ThreadListPrimitiveItems as Items, ThreadListPrimitiveLoadMore as LoadMore, ThreadListPrimitiveNew as New, ThreadListPrimitiveRoot as Root };
7
- }
8
- //#endregion
9
- export { ThreadListPrimitiveItemByIndex as ItemByIndex, ThreadListPrimitiveItems as Items, ThreadListPrimitiveLoadMore as LoadMore, ThreadListPrimitiveNew as New, ThreadListPrimitiveRoot as Root, threadList_d_exports };
1
+ export { ThreadListPrimitiveNew as New } from "./threadList/ThreadListNew.js";
2
+ export { ThreadListPrimitiveItems as Items } from "./threadList/ThreadListItems.js";
3
+ export { ThreadListPrimitiveItemByIndex as ItemByIndex } from "./threadList/ThreadListItems.js";
4
+ export { ThreadListPrimitiveLoadMore as LoadMore } from "./threadList/ThreadListLoadMore.js";
5
+ export { ThreadListPrimitiveRoot as Root } from "./threadList/ThreadListRoot.js";
10
6
  //# sourceMappingURL=threadList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"threadList.d.ts","names":[],"sources":["../../src/primitives/threadList.ts"],"mappings":""}
1
+ {"version":3,"file":"threadList.d.ts","sourceRoot":"","sources":["../../src/primitives/threadList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,GAAG,EAAE,sCAAmC;AAC3E,OAAO,EAAE,wBAAwB,IAAI,KAAK,EAAE,wCAAqC;AACjF,OAAO,EAAE,8BAA8B,IAAI,WAAW,EAAE,wCAAqC;AAC7F,OAAO,EAAE,2BAA2B,IAAI,QAAQ,EAAE,2CAAwC;AAC1F,OAAO,EAAE,uBAAuB,IAAI,IAAI,EAAE,uCAAoC"}