@assistant-ui/react 0.15.20 → 0.15.21

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 (340) hide show
  1. package/dist/assistant-transport.d.ts +10 -10
  2. package/dist/assistant-transport.d.ts.map +1 -1
  3. package/dist/augmentations.d.ts +3 -4
  4. package/dist/augmentations.d.ts.map +1 -1
  5. package/dist/context/ReadonlyStore.d.ts +2 -3
  6. package/dist/context/ReadonlyStore.d.ts.map +1 -1
  7. package/dist/context/providers/MessageProvider.d.ts +1 -2
  8. package/dist/context/providers/MessageProvider.d.ts.map +1 -1
  9. package/dist/context/providers/ThreadViewportProvider.d.ts +2 -3
  10. package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -1
  11. package/dist/context/react/ThreadViewportContext.d.ts +3 -4
  12. package/dist/context/react/ThreadViewportContext.d.ts.map +1 -1
  13. package/dist/context/react/utils/createContextHook.d.ts +1 -2
  14. package/dist/context/react/utils/createContextHook.d.ts.map +1 -1
  15. package/dist/context/react/utils/createContextStoreHook.d.ts +1 -2
  16. package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
  17. package/dist/context/stores/ThreadViewport.d.ts +4 -5
  18. package/dist/context/stores/ThreadViewport.d.ts.map +1 -1
  19. package/dist/devtools/DevToolsHooks.d.ts +3 -4
  20. package/dist/devtools/DevToolsHooks.d.ts.map +1 -1
  21. package/dist/hooks/useMessageQuote.d.ts +1 -2
  22. package/dist/hooks/useMessageQuote.d.ts.map +1 -1
  23. package/dist/hooks/useMessageTiming.d.ts +1 -2
  24. package/dist/hooks/useMessageTiming.d.ts.map +1 -1
  25. package/dist/hooks/useToolCallElapsed.d.ts +1 -2
  26. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -1
  27. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +3 -4
  28. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
  29. package/dist/mcp-apps/McpAppRenderer.d.ts +3 -4
  30. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  31. package/dist/mcp-apps/McpAppsRemoteHost.d.ts +1 -2
  32. package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
  33. package/dist/mcp-apps/app-frame.d.ts +1 -2
  34. package/dist/mcp-apps/app-frame.d.ts.map +1 -1
  35. package/dist/mcp-apps/bridge.d.ts +4 -5
  36. package/dist/mcp-apps/bridge.d.ts.map +1 -1
  37. package/dist/mcp-apps/types.d.ts +20 -20
  38. package/dist/mcp-apps/types.d.ts.map +1 -1
  39. package/dist/mcp-apps/utils.d.ts +1 -2
  40. package/dist/mcp-apps/utils.d.ts.map +1 -1
  41. package/dist/model-context/frame/useAssistantFrameHost.d.ts +1 -2
  42. package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -1
  43. package/dist/model-context/makeAssistantVisible.d.ts +2 -2
  44. package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
  45. package/dist/primitives/actionBar/ActionBarCopy.d.ts +2 -3
  46. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  47. package/dist/primitives/actionBar/ActionBarEdit.d.ts +2 -3
  48. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
  49. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +2 -3
  50. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
  51. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +2 -3
  52. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -1
  53. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +2 -3
  54. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -1
  55. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts +3 -4
  56. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts.map +1 -1
  57. package/dist/primitives/actionBar/ActionBarReload.d.ts +2 -3
  58. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
  59. package/dist/primitives/actionBar/ActionBarRoot.d.ts +2 -3
  60. package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
  61. package/dist/primitives/actionBar/ActionBarSpeak.d.ts +2 -3
  62. package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
  63. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +2 -3
  64. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
  65. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +4 -5
  66. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -1
  67. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +2 -3
  68. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -1
  69. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +2 -3
  70. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -1
  71. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +2 -3
  72. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -1
  73. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +2 -3
  74. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -1
  75. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +2 -3
  76. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -1
  77. package/dist/primitives/actionBarMore/scope.d.ts +2 -3
  78. package/dist/primitives/actionBarMore/scope.d.ts.map +1 -1
  79. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +2 -3
  80. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -1
  81. package/dist/primitives/assistantModal/AssistantModalContent.d.ts +2 -3
  82. package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
  83. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +2 -3
  84. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
  85. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +2 -3
  86. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -1
  87. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts +3 -4
  88. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts.map +1 -1
  89. package/dist/primitives/assistantModal/scope.d.ts +2 -3
  90. package/dist/primitives/assistantModal/scope.d.ts.map +1 -1
  91. package/dist/primitives/attachment/AttachmentName.d.ts +2 -3
  92. package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -1
  93. package/dist/primitives/attachment/AttachmentRemove.d.ts +2 -3
  94. package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -1
  95. package/dist/primitives/attachment/AttachmentRoot.d.ts +2 -3
  96. package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
  97. package/dist/primitives/attachment/AttachmentThumb.d.ts +2 -3
  98. package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -1
  99. package/dist/primitives/branchPicker/BranchPickerCount.d.ts +2 -3
  100. package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -1
  101. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +2 -3
  102. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  103. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +2 -3
  104. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -1
  105. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +2 -3
  106. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  107. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +2 -3
  108. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
  109. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +2 -3
  110. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
  111. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +2 -3
  112. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -1
  113. package/dist/primitives/composer/ComposerAddAttachment.d.ts +2 -3
  114. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
  115. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +2 -3
  116. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
  117. package/dist/primitives/composer/ComposerCancel.d.ts +2 -3
  118. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
  119. package/dist/primitives/composer/ComposerCompactContext.d.ts +3 -4
  120. package/dist/primitives/composer/ComposerCompactContext.d.ts.map +1 -1
  121. package/dist/primitives/composer/ComposerDictate.d.ts +2 -3
  122. package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -1
  123. package/dist/primitives/composer/ComposerDictationTranscript.d.ts +2 -3
  124. package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -1
  125. package/dist/primitives/composer/ComposerInput.d.ts +2 -3
  126. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  127. package/dist/primitives/composer/ComposerInputPluginContext.d.ts +5 -6
  128. package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
  129. package/dist/primitives/composer/ComposerQuote.d.ts +6 -7
  130. package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -1
  131. package/dist/primitives/composer/ComposerRoot.d.ts +2 -3
  132. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
  133. package/dist/primitives/composer/ComposerSend.d.ts +3 -4
  134. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  135. package/dist/primitives/composer/ComposerStopDictation.d.ts +2 -3
  136. package/dist/primitives/composer/ComposerStopDictation.d.ts.map +1 -1
  137. package/dist/primitives/composer/trigger/TriggerPopover.d.ts +6 -7
  138. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
  139. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +2 -3
  140. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -1
  141. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts +2 -3
  142. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -1
  143. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts +4 -5
  144. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -1
  145. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +2 -3
  146. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -1
  147. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts +4 -5
  148. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -1
  149. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +4 -4
  150. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
  151. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +12 -13
  152. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -1
  153. package/dist/primitives/composer/trigger/detectTrigger.d.ts +3 -4
  154. package/dist/primitives/composer/trigger/detectTrigger.d.ts.map +1 -1
  155. package/dist/primitives/composer/trigger/index.d.ts +2 -2
  156. package/dist/primitives/composer/trigger/index.d.ts.map +1 -1
  157. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts +1 -2
  158. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts.map +1 -1
  159. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +3 -4
  160. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -1
  161. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +3 -4
  162. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -1
  163. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +2 -3
  164. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
  165. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +4 -5
  166. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
  167. package/dist/primitives/composer/useComposerInputState.d.ts +4 -5
  168. package/dist/primitives/composer/useComposerInputState.d.ts.map +1 -1
  169. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +4 -5
  170. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -1
  171. package/dist/primitives/error/ErrorMessage.d.ts +2 -3
  172. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
  173. package/dist/primitives/error/ErrorRoot.d.ts +2 -3
  174. package/dist/primitives/error/ErrorRoot.d.ts.map +1 -1
  175. package/dist/primitives/message/MessageError.d.ts +1 -2
  176. package/dist/primitives/message/MessageError.d.ts.map +1 -1
  177. package/dist/primitives/message/MessageIf.d.ts +2 -3
  178. package/dist/primitives/message/MessageIf.d.ts.map +1 -1
  179. package/dist/primitives/message/MessageParts.d.ts +3 -3
  180. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  181. package/dist/primitives/message/MessagePartsGrouped.d.ts +4 -5
  182. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  183. package/dist/primitives/message/MessageRoot.d.ts +2 -3
  184. package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
  185. package/dist/primitives/messagePart/MessagePartImage.d.ts +2 -3
  186. package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -1
  187. package/dist/primitives/messagePart/MessagePartText.d.ts +2 -3
  188. package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
  189. package/dist/primitives/messagePart/useMessagePartData.d.ts +1 -2
  190. package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -1
  191. package/dist/primitives/messagePart/useMessagePartFile.d.ts +1 -2
  192. package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -1
  193. package/dist/primitives/messagePart/useMessagePartImage.d.ts +1 -2
  194. package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -1
  195. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +1 -2
  196. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -1
  197. package/dist/primitives/messagePart/useMessagePartSource.d.ts +1 -2
  198. package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -1
  199. package/dist/primitives/messagePart/useMessagePartText.d.ts +1 -2
  200. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -1
  201. package/dist/primitives/queueItem/QueueItemRemove.d.ts +2 -3
  202. package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -1
  203. package/dist/primitives/queueItem/QueueItemSteer.d.ts +2 -3
  204. package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -1
  205. package/dist/primitives/queueItem/QueueItemText.d.ts +2 -3
  206. package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -1
  207. package/dist/primitives/reasoning/useScrollLock.d.ts +1 -2
  208. package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -1
  209. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +2 -3
  210. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -1
  211. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +3 -4
  212. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -1
  213. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +5 -1
  214. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  215. package/dist/primitives/suggestion/SuggestionDescription.d.ts +2 -3
  216. package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -1
  217. package/dist/primitives/suggestion/SuggestionTitle.d.ts +2 -3
  218. package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -1
  219. package/dist/primitives/suggestion/SuggestionTrigger.d.ts +2 -3
  220. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
  221. package/dist/primitives/thread/ThreadEmpty.d.ts +2 -3
  222. package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -1
  223. package/dist/primitives/thread/ThreadIf.d.ts +2 -3
  224. package/dist/primitives/thread/ThreadIf.d.ts.map +1 -1
  225. package/dist/primitives/thread/ThreadRoot.d.ts +2 -3
  226. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  227. package/dist/primitives/thread/ThreadScrollToBottom.d.ts +3 -3
  228. package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -1
  229. package/dist/primitives/thread/ThreadSuggestion.d.ts +2 -3
  230. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  231. package/dist/primitives/thread/ThreadViewport.d.ts +2 -3
  232. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  233. package/dist/primitives/thread/ThreadViewportFooter.d.ts +2 -3
  234. package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
  235. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +4 -5
  236. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -1
  237. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts +1 -2
  238. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -1
  239. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts +2 -3
  240. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -1
  241. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +5 -6
  242. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -1
  243. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts +5 -6
  244. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -1
  245. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts +1 -2
  246. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -1
  247. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +2 -3
  248. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  249. package/dist/primitives/thread/useThreadViewportAutoScroll.js +23 -15
  250. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  251. package/dist/primitives/threadList/ThreadListLoadMore.d.ts +2 -3
  252. package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -1
  253. package/dist/primitives/threadList/ThreadListNew.d.ts +2 -3
  254. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
  255. package/dist/primitives/threadList/ThreadListRoot.d.ts +2 -3
  256. package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -1
  257. package/dist/primitives/threadListFocusGroup.d.ts +4 -4
  258. package/dist/primitives/threadListFocusGroup.d.ts.map +1 -1
  259. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +2 -3
  260. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
  261. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +2 -3
  262. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
  263. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +2 -3
  264. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
  265. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +2 -3
  266. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
  267. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +2 -3
  268. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
  269. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +2 -3
  270. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -1
  271. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +2 -3
  272. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -1
  273. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +4 -5
  274. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -1
  275. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +2 -3
  276. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -1
  277. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +2 -3
  278. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -1
  279. package/dist/primitives/threadListItemMore/scope.d.ts +2 -3
  280. package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -1
  281. package/dist/sandbox-host/SandboxHost.d.ts +8 -9
  282. package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
  283. package/dist/tests/remote-thread-list-test-helpers.d.ts +1 -2
  284. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
  285. package/dist/unstable/useComposerInput.d.ts +5 -6
  286. package/dist/unstable/useComposerInput.d.ts.map +1 -1
  287. package/dist/unstable/useComposerInputHistory.d.ts +2 -3
  288. package/dist/unstable/useComposerInputHistory.d.ts.map +1 -1
  289. package/dist/unstable/useLiveCompletionAdapter.d.ts +2 -3
  290. package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -1
  291. package/dist/unstable/useMentionAdapter.d.ts +7 -8
  292. package/dist/unstable/useMentionAdapter.d.ts.map +1 -1
  293. package/dist/unstable/useMessageStallDetection.d.ts +3 -4
  294. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -1
  295. package/dist/unstable/useModelContextSnapshot.d.ts +3 -4
  296. package/dist/unstable/useModelContextSnapshot.d.ts.map +1 -1
  297. package/dist/unstable/useSlashCommandAdapter.d.ts +4 -5
  298. package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
  299. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +2 -3
  300. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -1
  301. package/dist/unstable/webmcp/convertTools.d.ts +4 -5
  302. package/dist/unstable/webmcp/convertTools.d.ts.map +1 -1
  303. package/dist/unstable/webmcp/useWebMcpProvider.d.ts +3 -4
  304. package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -1
  305. package/dist/unstable/webmcp/webmcp-host.d.ts +6 -7
  306. package/dist/unstable/webmcp/webmcp-host.d.ts.map +1 -1
  307. package/dist/utils/RequireAtLeastOne.d.ts +1 -2
  308. package/dist/utils/RequireAtLeastOne.d.ts.map +1 -1
  309. package/dist/utils/createActionButton.d.ts +3 -4
  310. package/dist/utils/createActionButton.d.ts.map +1 -1
  311. package/dist/utils/getSelectionMessageId.d.ts +1 -2
  312. package/dist/utils/getSelectionMessageId.d.ts.map +1 -1
  313. package/dist/utils/hooks/useManagedRef.d.ts +1 -2
  314. package/dist/utils/hooks/useManagedRef.d.ts.map +1 -1
  315. package/dist/utils/hooks/useMediaQuery.d.ts +1 -2
  316. package/dist/utils/hooks/useMediaQuery.d.ts.map +1 -1
  317. package/dist/utils/hooks/useOnResizeContent.d.ts +1 -2
  318. package/dist/utils/hooks/useOnResizeContent.d.ts.map +1 -1
  319. package/dist/utils/hooks/useOnScrollToBottom.d.ts +1 -2
  320. package/dist/utils/hooks/useOnScrollToBottom.d.ts.map +1 -1
  321. package/dist/utils/hooks/useSizeHandle.d.ts +1 -2
  322. package/dist/utils/hooks/useSizeHandle.d.ts.map +1 -1
  323. package/dist/utils/smooth/SmoothContext.d.ts +3 -4
  324. package/dist/utils/smooth/SmoothContext.d.ts.map +1 -1
  325. package/dist/utils/smooth/useSmooth.d.ts +2 -3
  326. package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
  327. package/package.json +17 -16
  328. package/src/mcp-apps/McpAppRenderer.test.tsx +1 -2
  329. package/src/primitives/composer/ComposerAddAttachment.test.tsx +7 -5
  330. package/src/primitives/composer/ComposerRoot.test.tsx +5 -3
  331. package/src/primitives/selectionToolbar/SelectionToolbarRoot.test.tsx +44 -0
  332. package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +7 -1
  333. package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +95 -0
  334. package/src/primitives/thread/useThreadViewportAutoScroll.ts +10 -0
  335. package/src/tests/RemoteThreadListRuntime.reloadMainThread.test.tsx +2 -4
  336. package/src/tests/threadListItemIsRunning.test.tsx +3 -2
  337. package/src/unstable/useMentionAdapter.test.tsx +15 -21
  338. package/src/unstable/useModelContextSnapshot.test.tsx +3 -2
  339. package/src/unstable/webmcp/convertTools.test.ts +59 -37
  340. package/src/unstable/webmcp/useWebMcpProvider.test.tsx +12 -3
@@ -1 +1 @@
1
- {"version":3,"file":"SuggestionDescription.d.ts","names":[],"sources":["../../../src/primitives/suggestion/SuggestionDescription.tsx"],"mappings":";;;kBAUiB;OACH,UAAU,kBAAkB,UAAU;OACtC,QAAQ,gCAAgC,UAAU;;;;;;;;;;cAWnD,gDAA8B,0BAAA,KAAA,qBAAA,gBAAA,mCAAA,eAAA;;;;oBAWzC,cAAA,2CAAA,cAAA"}
1
+ {"version":3,"file":"SuggestionDescription.d.ts","names":[],"sources":["../../../src/primitives/suggestion/SuggestionDescription.tsx"],"mappings":";;;yBAUiB;OACH,UAAU,kBAAkB,UAAU;OACtC,QAAQ,gCAAgC,UAAU;;;;;;;;;;qBAWnD,gDAA8B,0BAAA,KAAA,qBAAA,gBAAA,mCAAA,eAAA;;;;oBAWzC,cAAA,2CAAA,cAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Primitive } from "../../utils/Primitive.js";
2
2
  import { ComponentPropsWithoutRef, ElementRef } from "react";
3
3
  //#region src/primitives/suggestion/SuggestionTitle.d.ts
4
- declare namespace SuggestionPrimitiveTitle {
4
+ export declare namespace SuggestionPrimitiveTitle {
5
5
  type Element = ElementRef<typeof Primitive.span>;
6
6
  type Props = ComponentPropsWithoutRef<typeof Primitive.span>;
7
7
  }
@@ -13,11 +13,10 @@ declare namespace SuggestionPrimitiveTitle {
13
13
  * <SuggestionPrimitive.Title />
14
14
  * ```
15
15
  */
16
- declare const SuggestionPrimitiveTitle: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLSpanElement> & import("react").HTMLAttributes<HTMLSpanElement> & {
16
+ export declare const SuggestionPrimitiveTitle: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLSpanElement> & import("react").HTMLAttributes<HTMLSpanElement> & {
17
17
  asChild?: boolean;
18
18
  }, "ref"> & {
19
19
  render?: import("react").ReactElement | undefined;
20
20
  } & import("react").RefAttributes<HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
21
21
  //#endregion
22
- export { SuggestionPrimitiveTitle };
23
22
  //# sourceMappingURL=SuggestionTitle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SuggestionTitle.d.ts","names":[],"sources":["../../../src/primitives/suggestion/SuggestionTitle.tsx"],"mappings":";;;kBAUiB;OACH,UAAU,kBAAkB,UAAU;OACtC,QAAQ,gCAAgC,UAAU;;;;;;;;;;cAWnD,0CAAwB,0BAAA,KAAA,qBAAA,gBAAA,mCAAA,eAAA;;;;oBAWnC,cAAA,2CAAA,cAAA"}
1
+ {"version":3,"file":"SuggestionTitle.d.ts","names":[],"sources":["../../../src/primitives/suggestion/SuggestionTitle.tsx"],"mappings":";;;yBAUiB;OACH,UAAU,kBAAkB,UAAU;OACtC,QAAQ,gCAAgC,UAAU;;;;;;;;;;qBAWnD,0CAAwB,0BAAA,KAAA,qBAAA,gBAAA,mCAAA,eAAA;;;;oBAWnC,cAAA,2CAAA,cAAA"}
@@ -16,7 +16,7 @@ declare const useSuggestionTrigger: ({ send, clearComposer }: {
16
16
  */
17
17
  clearComposer?: boolean | undefined;
18
18
  }) => (() => void) | null;
19
- declare namespace SuggestionPrimitiveTrigger {
19
+ export declare namespace SuggestionPrimitiveTrigger {
20
20
  type Element = ActionButtonElement;
21
21
  type Props = ActionButtonProps<typeof useSuggestionTrigger>;
22
22
  }
@@ -30,7 +30,7 @@ declare namespace SuggestionPrimitiveTrigger {
30
30
  * </SuggestionPrimitive.Trigger>
31
31
  * ```
32
32
  */
33
- declare const SuggestionPrimitiveTrigger: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
33
+ export declare const SuggestionPrimitiveTrigger: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
34
34
  asChild?: boolean;
35
35
  }, "ref"> & {
36
36
  render?: import("react").ReactElement | undefined;
@@ -51,5 +51,4 @@ declare const SuggestionPrimitiveTrigger: import("react").ForwardRefExoticCompon
51
51
  clearComposer?: boolean | undefined;
52
52
  } & import("react").RefAttributes<HTMLButtonElement>>;
53
53
  //#endregion
54
- export { SuggestionPrimitiveTrigger };
55
54
  //# sourceMappingURL=SuggestionTrigger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SuggestionTrigger.d.ts","names":[],"sources":["../../../src/primitives/suggestion/SuggestionTrigger.ts"],"mappings":";;cAUM,yBAAwB,MAAA;;;;;EAQ5B;;;;;;;;;EAUA;;kBAae;OACH,UAAU;OACV,QAAQ,yBAAyB;;;;;;;;;;;;cAalC,4CAA0B,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;;;;;;EAtC9B;;;;;;;;;EAUS;oBAgCjB,cAAA"}
1
+ {"version":3,"file":"SuggestionTrigger.d.ts","names":[],"sources":["../../../src/primitives/suggestion/SuggestionTrigger.ts"],"mappings":";;cAUM,yBAAwB,MAAA;;;;;EAQ5B;;;;;;;;;EAUA;;yBAae;OACH,UAAU;OACV,QAAQ,yBAAyB;;;;;;;;;;;;qBAalC,4CAA0B,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;;;;;;EAtC9B;;;;;;;;;EAUS;oBAgCjB,cAAA"}
@@ -1,12 +1,11 @@
1
1
  import { FC, PropsWithChildren } from "react";
2
2
  //#region src/primitives/thread/ThreadEmpty.d.ts
3
- declare namespace ThreadPrimitiveEmpty {
3
+ export declare namespace ThreadPrimitiveEmpty {
4
4
  type Props = PropsWithChildren;
5
5
  }
6
6
  /**
7
7
  * @deprecated Use `<AuiIf condition={(s) => s.thread.isEmpty} />` instead.
8
8
  */
9
- declare const ThreadPrimitiveEmpty: FC<ThreadPrimitiveEmpty.Props>;
9
+ export declare const ThreadPrimitiveEmpty: FC<ThreadPrimitiveEmpty.Props>;
10
10
  //#endregion
11
- export { ThreadPrimitiveEmpty };
12
11
  //# sourceMappingURL=ThreadEmpty.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadEmpty.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadEmpty.ts"],"mappings":";;kBAKiB;OACH,QAAQ;;;;;cAMT,sBAAsB,GAAG,qBAAqB"}
1
+ {"version":3,"file":"ThreadEmpty.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadEmpty.ts"],"mappings":";;yBAKiB;OACH,QAAQ;;;;;qBAMT,sBAAsB,GAAG,qBAAqB"}
@@ -7,13 +7,12 @@ type ThreadIfFilters = {
7
7
  disabled: boolean | undefined;
8
8
  };
9
9
  type UseThreadIfProps = RequireAtLeastOne<ThreadIfFilters>;
10
- declare namespace ThreadPrimitiveIf {
10
+ export declare namespace ThreadPrimitiveIf {
11
11
  type Props = PropsWithChildren<UseThreadIfProps>;
12
12
  }
13
13
  /**
14
14
  * @deprecated Use `<AuiIf condition={(s) => s.thread...} />` instead.
15
15
  */
16
- declare const ThreadPrimitiveIf: FC<ThreadPrimitiveIf.Props>;
16
+ export declare const ThreadPrimitiveIf: FC<ThreadPrimitiveIf.Props>;
17
17
  //#endregion
18
- export { ThreadPrimitiveIf };
19
18
  //# sourceMappingURL=ThreadIf.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadIf.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadIf.ts"],"mappings":";;;KAMK;EACH;EACA;EACA;;KAGG,mBAAmB,kBAAkB;kBAgBzB;OACH,QAAQ,kBAAkB;;;;;cAM3B,mBAAmB,GAAG,kBAAkB"}
1
+ {"version":3,"file":"ThreadIf.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadIf.ts"],"mappings":";;;KAMK;EACH;EACA;EACA;;KAGG,mBAAmB,kBAAkB;yBAgBzB;OACH,QAAQ,kBAAkB;;;;;qBAM3B,mBAAmB,GAAG,kBAAkB"}
@@ -1,7 +1,7 @@
1
1
  import { Primitive } from "../../utils/Primitive.js";
2
2
  import { ComponentPropsWithoutRef, ComponentRef } from "react";
3
3
  //#region src/primitives/thread/ThreadRoot.d.ts
4
- declare namespace ThreadPrimitiveRoot {
4
+ export declare namespace ThreadPrimitiveRoot {
5
5
  type Element = ComponentRef<typeof Primitive.div>;
6
6
  /**
7
7
  * Props for the ThreadPrimitive.Root component.
@@ -29,11 +29,10 @@ declare namespace ThreadPrimitiveRoot {
29
29
  * </ThreadPrimitive.Root>
30
30
  * ```
31
31
  */
32
- declare const ThreadPrimitiveRoot: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & {
32
+ export declare const ThreadPrimitiveRoot: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & {
33
33
  asChild?: boolean;
34
34
  }, "ref"> & {
35
35
  render?: import("react").ReactElement | undefined;
36
36
  } & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
37
37
  //#endregion
38
- export { ThreadPrimitiveRoot };
39
38
  //# sourceMappingURL=ThreadRoot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadRoot.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadRoot.tsx"],"mappings":";;;kBAWiB;OACH,UAAU,oBAAoB,UAAU;;;;;OAKxC,QAAQ,gCAAgC,UAAU;;;;;;;;;;;;;;;;;;;;;;cAuBnD,qCAAmB,0BAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;oBAiC9B,cAAA,0CAAA,cAAA"}
1
+ {"version":3,"file":"ThreadRoot.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadRoot.tsx"],"mappings":";;;yBAWiB;OACH,UAAU,oBAAoB,UAAU;;;;;OAKxC,QAAQ,gCAAgC,UAAU;;;;;;;;;;;;;;;;;;;;;;qBAuBnD,qCAAmB,0BAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;oBAiC9B,cAAA,0CAAA,cAAA"}
@@ -6,15 +6,15 @@ declare namespace useThreadScrollToBottom {
6
6
  };
7
7
  }
8
8
  declare const useThreadScrollToBottom: ({ behavior }?: useThreadScrollToBottom.Options) => (() => void) | null;
9
- declare namespace ThreadPrimitiveScrollToBottom {
9
+ export declare namespace ThreadPrimitiveScrollToBottom {
10
10
  type Element = ActionButtonElement;
11
11
  type Props = ActionButtonProps<typeof useThreadScrollToBottom>;
12
12
  }
13
- declare const ThreadPrimitiveScrollToBottom: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
13
+ export declare const ThreadPrimitiveScrollToBottom: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
14
14
  asChild?: boolean;
15
15
  }, "ref"> & {
16
16
  render?: import("react").ReactElement | undefined;
17
17
  } & import("react").RefAttributes<HTMLButtonElement>, "ref"> & useThreadScrollToBottom.Options & import("react").RefAttributes<HTMLButtonElement>>;
18
18
  //#endregion
19
- export { ThreadPrimitiveScrollToBottom, useThreadScrollToBottom };
19
+ export { useThreadScrollToBottom };
20
20
  //# sourceMappingURL=ThreadScrollToBottom.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadScrollToBottom.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadScrollToBottom.ts"],"mappings":";;kBAaiB;OACH;IACV,WAAW;;;cAIT,4BAA2B,aAE9B,wBAAwB;kBAaV;OACH,UAAU;OACV,QAAQ,yBAAyB;;cAGlC,+CAA6B,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;oBAIzC,cAAA,6BAAA,wBAAA,0BAAA,cAAA"}
1
+ {"version":3,"file":"ThreadScrollToBottom.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadScrollToBottom.ts"],"mappings":";;kBAaiB;OACH;IACV,WAAW;;;cAIT,4BAA2B,aAE9B,wBAAwB;yBAaV;OACH,UAAU;OACV,QAAQ,yBAAyB;;qBAGlC,+CAA6B,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;oBAIzC,cAAA,6BAAA,wBAAA,0BAAA,cAAA"}
@@ -22,11 +22,11 @@ declare const useThreadSuggestion: ({ prompt, send, clearComposer, autoSend, met
22
22
  /** @deprecated Use `clearComposer` instead. */
23
23
  method?: "replace";
24
24
  }) => (() => void) | null;
25
- declare namespace ThreadPrimitiveSuggestion {
25
+ export declare namespace ThreadPrimitiveSuggestion {
26
26
  type Element = ActionButtonElement;
27
27
  type Props = ActionButtonProps<typeof useThreadSuggestion>;
28
28
  }
29
- declare const ThreadPrimitiveSuggestion: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
29
+ export declare const ThreadPrimitiveSuggestion: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
30
30
  asChild?: boolean;
31
31
  }, "ref"> & {
32
32
  render?: import("react").ReactElement | undefined;
@@ -53,5 +53,4 @@ declare const ThreadPrimitiveSuggestion: import("react").ForwardRefExoticCompone
53
53
  method?: "replace";
54
54
  } & import("react").RefAttributes<HTMLButtonElement>>;
55
55
  //#endregion
56
- export { ThreadPrimitiveSuggestion };
57
56
  //# sourceMappingURL=ThreadSuggestion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadSuggestion.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadSuggestion.ts"],"mappings":";;cASM,wBAAuB,QAAA,MAAA,eAAA,UAAA,QAAA;;EAQ3B;;;;;EAMA;;;;;;;;;EAUA;;EAGA;;EAGA;;kBAae;OACH,UAAU;OACV,QAAQ,yBAAyB;;cAGlC,2CAAyB,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;;;EAxC5B;;;;;EAMD;;;;;;;;;EAUS;;EAGL;;EAGF;oBAsBV,cAAA"}
1
+ {"version":3,"file":"ThreadSuggestion.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadSuggestion.ts"],"mappings":";;cASM,wBAAuB,QAAA,MAAA,eAAA,UAAA,QAAA;;EAQ3B;;;;;EAMA;;;;;;;;;EAUA;;EAGA;;EAGA;;yBAae;OACH,UAAU;OACV,QAAQ,yBAAyB;;qBAGlC,2CAAyB,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;;;EAxC5B;;;;;EAMD;;;;;;;;;EAUS;;EAGL;;EAGF;oBAsBV,cAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Primitive } from "../../utils/Primitive.js";
2
2
  import { ComponentPropsWithoutRef, ComponentRef } from "react";
3
3
  //#region src/primitives/thread/ThreadViewport.d.ts
4
- declare namespace ThreadPrimitiveViewport {
4
+ export declare namespace ThreadPrimitiveViewport {
5
5
  type Element = ComponentRef<typeof Primitive.div>;
6
6
  type Props = ComponentPropsWithoutRef<typeof Primitive.div> & {
7
7
  /**
@@ -72,7 +72,7 @@ declare namespace ThreadPrimitiveViewport {
72
72
  * </ThreadPrimitive.Viewport>
73
73
  * ```
74
74
  */
75
- declare const ThreadPrimitiveViewport: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & {
75
+ export declare const ThreadPrimitiveViewport: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & {
76
76
  asChild?: boolean;
77
77
  }, "ref"> & {
78
78
  render?: import("react").ReactElement | undefined;
@@ -129,5 +129,4 @@ declare const ThreadPrimitiveViewport: import("react").ForwardRefExoticComponent
129
129
  scrollToBottomOnThreadSwitch?: boolean | undefined;
130
130
  } & import("react").RefAttributes<HTMLDivElement>>;
131
131
  //#endregion
132
- export { ThreadPrimitiveViewport };
133
132
  //# sourceMappingURL=ThreadViewport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadViewport.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadViewport.tsx"],"mappings":";;;kBA4BiB;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,gCAAgC,UAAU;;;;;;;IAO5D;;;;;;IAOA;;;;;;IAOA;;;;;;MAME;;;;;;MAMA;;;;;;;IAQF;;;;;;IAOA;;;;;;IAOA;;;;;;;;;;;;;;;;;;;cA6HS,yCAAuB,0BAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;;;;;;;;EA7KnB;;;;;;EAOA;;;;;;EAOW;;;;;;IAMtB;;;;;;IAMA;;;;;;;EAQyB;;;;;;EAOE;;;;;;EAOE;oBAwIjC,cAAA"}
1
+ {"version":3,"file":"ThreadViewport.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadViewport.tsx"],"mappings":";;;yBA4BiB;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,gCAAgC,UAAU;;;;;;;IAO5D;;;;;;IAOA;;;;;;IAOA;;;;;;MAME;;;;;;MAMA;;;;;;;IAQF;;;;;;IAOA;;;;;;IAOA;;;;;;;;;;;;;;;;;;;qBA6HS,yCAAuB,0BAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;;;;;;;;EA7KnB;;;;;;EAOA;;;;;;EAOW;;;;;;IAMtB;;;;;;IAMA;;;;;;;EAQyB;;;;;;EAOE;;;;;;EAOE;oBAwIjC,cAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Primitive } from "../../utils/Primitive.js";
2
2
  import { ComponentPropsWithoutRef, ComponentRef } from "react";
3
3
  //#region src/primitives/thread/ThreadViewportFooter.d.ts
4
- declare namespace ThreadPrimitiveViewportFooter {
4
+ export declare namespace ThreadPrimitiveViewportFooter {
5
5
  type Element = ComponentRef<typeof Primitive.div>;
6
6
  type Props = ComponentPropsWithoutRef<typeof Primitive.div>;
7
7
  }
@@ -29,11 +29,10 @@ declare namespace ThreadPrimitiveViewportFooter {
29
29
  * </ThreadPrimitive.Viewport>
30
30
  * ```
31
31
  */
32
- declare const ThreadPrimitiveViewportFooter: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & {
32
+ export declare const ThreadPrimitiveViewportFooter: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & {
33
33
  asChild?: boolean;
34
34
  }, "ref"> & {
35
35
  render?: import("react").ReactElement | undefined;
36
36
  } & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
37
37
  //#endregion
38
- export { ThreadPrimitiveViewportFooter };
39
38
  //# sourceMappingURL=ThreadViewportFooter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadViewportFooter.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadViewportFooter.tsx"],"mappings":";;;kBAaiB;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,gCAAgC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;cA2BnD,+CAA6B,0BAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;oBAexC,cAAA,0CAAA,cAAA"}
1
+ {"version":3,"file":"ThreadViewportFooter.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadViewportFooter.tsx"],"mappings":";;;yBAaiB;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,gCAAgC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;qBA2BnD,+CAA6B,0BAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;oBAexC,cAAA,0CAAA,cAAA"}
@@ -1,11 +1,11 @@
1
1
  //#region src/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts
2
- type ComputeTopAnchorTargetOptions = {
2
+ export type ComputeTopAnchorTargetOptions = {
3
3
  viewport: HTMLElement;
4
4
  anchor: HTMLElement;
5
5
  tallerThan: number;
6
6
  visibleHeight: number;
7
7
  };
8
- type ComputeTopAnchorReserveOptions = ComputeTopAnchorTargetOptions & {
8
+ export type ComputeTopAnchorReserveOptions = ComputeTopAnchorTargetOptions & {
9
9
  reserve: HTMLElement;
10
10
  };
11
11
  /**
@@ -18,8 +18,7 @@ type ComputeTopAnchorReserveOptions = ComputeTopAnchorTargetOptions & {
18
18
  * `viewport.scrollHeight` (which is volatile while the assistant message
19
19
  * streams in).
20
20
  */
21
- declare const computeTopAnchorTargetScrollTop: ({ viewport, anchor, tallerThan, visibleHeight }: ComputeTopAnchorTargetOptions) => number;
22
- declare const computeTopAnchorReserve: ({ viewport, reserve, ...targetOptions }: ComputeTopAnchorReserveOptions) => number;
21
+ export declare const computeTopAnchorTargetScrollTop: ({ viewport, anchor, tallerThan, visibleHeight }: ComputeTopAnchorTargetOptions) => number;
22
+ export declare const computeTopAnchorReserve: ({ viewport, reserve, ...targetOptions }: ComputeTopAnchorReserveOptions) => number;
23
23
  //#endregion
24
- export { ComputeTopAnchorReserveOptions, ComputeTopAnchorTargetOptions, computeTopAnchorReserve, computeTopAnchorTargetScrollTop };
25
24
  //# sourceMappingURL=computeTopAnchorSlack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"computeTopAnchorSlack.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/computeTopAnchorSlack.ts"],"mappings":";KAEY;EACV,UAAU;EACV,QAAQ;EACR;EACA;;KAGU,iCAAiC;EAC3C,SAAS;;;;;;;;;;;;cAgDE,oCAAmC,UAAA,QAAA,YAAA,iBAK7C;cAoBU,4BAA2B,UAAA,YAAA,iBAIrC"}
1
+ {"version":3,"file":"computeTopAnchorSlack.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/computeTopAnchorSlack.ts"],"mappings":";YAEY;EACV,UAAU;EACV,QAAQ;EACR;EACA;;YAGU,iCAAiC;EAC3C,SAAS;;;;;;;;;;;;qBAgDE,oCAAmC,UAAA,QAAA,YAAA,iBAK7C;qBAoBU,4BAA2B,UAAA,YAAA,iBAIrC"}
@@ -1,8 +1,7 @@
1
1
  //#region src/primitives/thread/topAnchor/createReserveObservers.d.ts
2
- declare const createReserveObservers: (onChange: () => void) => {
2
+ export declare const createReserveObservers: (onChange: () => void) => {
3
3
  target: (viewport: HTMLElement, anchor: HTMLElement, target: HTMLElement) => void;
4
4
  disconnect: () => void;
5
5
  };
6
6
  //#endregion
7
- export { createReserveObservers };
8
7
  //# sourceMappingURL=createReserveObservers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createReserveObservers.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/createReserveObservers.ts"],"mappings":";cAEa,yBAA0B;EAkBvB,SAAA,UAAA,aAAW,QACb,aAAW,QACX"}
1
+ {"version":3,"file":"createReserveObservers.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/createReserveObservers.ts"],"mappings":";qBAEa,yBAA0B;EAkBvB,SAAA,UAAA,aAAW,QACb,aAAW,QACX"}
@@ -4,7 +4,7 @@
4
4
  * Decoupling from the full store keeps `mountTopAnchorReserve` testable in
5
5
  * isolation and re-usable from any consumer that can adapt to this shape.
6
6
  */
7
- type TopAnchorStore = {
7
+ export type TopAnchorStore = {
8
8
  getState(): {
9
9
  turnAnchor: "top" | "bottom";
10
10
  element: {
@@ -23,7 +23,6 @@ type TopAnchorStore = {
23
23
  };
24
24
  subscribe(fn: () => void): () => void;
25
25
  };
26
- declare const mountTopAnchorReserve: (store: TopAnchorStore) => () => void;
26
+ export declare const mountTopAnchorReserve: (store: TopAnchorStore) => () => void;
27
27
  //#endregion
28
- export { TopAnchorStore, mountTopAnchorReserve };
29
28
  //# sourceMappingURL=mountTopAnchorReserve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mountTopAnchorReserve.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/mountTopAnchorReserve.ts"],"mappings":";;;;;;KAmBY;EACV;IACE;IACA;MACE,UAAU;MACV,QAAQ;MACR,QAAQ;;IAEV;MACE;MACA;;IAEF;eACW;eACA;;;EAGb,UAAU;;cAuBC,wBAAyB,OAAO"}
1
+ {"version":3,"file":"mountTopAnchorReserve.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/mountTopAnchorReserve.ts"],"mappings":";;;;;;YAmBY;EACV;IACE;IACA;MACE,UAAU;MACV,QAAQ;MACR,QAAQ;;IAEV;MACE;MACA;;IAEF;eACW;eACA;;;EAGb,UAAU;;qBAuBC,wBAAyB,OAAO"}
@@ -3,7 +3,7 @@ type TopAnchorTurnMessage = {
3
3
  readonly id: string;
4
4
  readonly role: string;
5
5
  };
6
- type TopAnchorTurn = {
6
+ export type TopAnchorTurn = {
7
7
  readonly anchorId: string;
8
8
  readonly targetId: string;
9
9
  };
@@ -14,16 +14,15 @@ type TopAnchorTurn = {
14
14
  * target means the turn was superseded (e.g. an external store synced in a
15
15
  * turn completed elsewhere), so the reserve must be torn down, not preserved.
16
16
  */
17
- declare const isTopAnchorTurnValid: (turn: TopAnchorTurn | null, messages: readonly TopAnchorTurnMessage[]) => boolean;
18
- declare const getActiveTopAnchorTurn: ({ isRunning, messages }: {
17
+ export declare const isTopAnchorTurnValid: (turn: TopAnchorTurn | null, messages: readonly TopAnchorTurnMessage[]) => boolean;
18
+ export declare const getActiveTopAnchorTurn: ({ isRunning, messages }: {
19
19
  readonly isRunning: boolean;
20
20
  readonly messages: readonly TopAnchorTurnMessage[];
21
21
  }) => {
22
22
  anchorId: string;
23
23
  targetId: string;
24
24
  } | null;
25
- declare const getActiveTopAnchorAnchorId: (options: Parameters<typeof getActiveTopAnchorTurn>[0]) => string | undefined;
26
- declare const getActiveTopAnchorTargetId: (options: Parameters<typeof getActiveTopAnchorTurn>[0]) => string | undefined;
25
+ export declare const getActiveTopAnchorAnchorId: (options: Parameters<typeof getActiveTopAnchorTurn>[0]) => string | undefined;
26
+ export declare const getActiveTopAnchorTargetId: (options: Parameters<typeof getActiveTopAnchorTurn>[0]) => string | undefined;
27
27
  //#endregion
28
- export { TopAnchorTurn, getActiveTopAnchorAnchorId, getActiveTopAnchorTargetId, getActiveTopAnchorTurn, isTopAnchorTurnValid };
29
28
  //# 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;;KAGC;WACD;WACA;;;;;;;;;cAUE,uBACX,MAAM,sBACN,mBAAmB;cAeR,2BAA0B,WAAA;WAI5B;WACA,mBAAmB;;;;;cAWjB,6BACX,SAAS,kBAAkB;cAGhB,6BACX,SAAS,kBAAkB"}
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"}
@@ -8,11 +8,10 @@
8
8
  * clamp configuration as supported CSS-length strings, and this function is the
9
9
  * single place that converts them into the pixel values the package operates on.
10
10
  */
11
- declare const parseCssLength: (value: string, element: HTMLElement) => number;
12
- declare const getAnchorId: (anchor: HTMLElement) => string | undefined;
13
- declare const createReserveElement: () => HTMLDivElement;
14
- declare const setReserveHeight: (reserve: HTMLElement, height: number) => boolean;
15
- declare const snapScrollTop: (top: number) => number;
11
+ export declare const parseCssLength: (value: string, element: HTMLElement) => number;
12
+ export declare const getAnchorId: (anchor: HTMLElement) => string | undefined;
13
+ export declare const createReserveElement: () => HTMLDivElement;
14
+ export declare const setReserveHeight: (reserve: HTMLElement, height: number) => boolean;
15
+ export declare const snapScrollTop: (top: number) => number;
16
16
  //#endregion
17
- export { createReserveElement, getAnchorId, parseCssLength, setReserveHeight, snapScrollTop };
18
17
  //# sourceMappingURL=topAnchorUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"topAnchorUtils.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/topAnchorUtils.ts"],"mappings":";;;;;;;;;;cAWa,iBAAkB,eAAe,SAAS;cAoB1C,cAAe,QAAQ;cAEvB,4BAAoB;cAWpB,mBAAoB,SAAS,aAAa;cAU1C,gBAAiB"}
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"}
@@ -4,7 +4,6 @@
4
4
  * `ThreadViewport` store. Call this from inside the scrollable viewport so
5
5
  * the reserve `<div>` is appended next to the streaming assistant message.
6
6
  */
7
- declare const useTopAnchorReserve: (enabled: boolean) => void;
7
+ export declare const useTopAnchorReserve: (enabled: boolean) => void;
8
8
  //#endregion
9
- export { useTopAnchorReserve };
10
9
  //# sourceMappingURL=useTopAnchorReserve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTopAnchorReserve.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/useTopAnchorReserve.ts"],"mappings":";;;;;;cAWa,sBAAuB"}
1
+ {"version":3,"file":"useTopAnchorReserve.d.ts","names":[],"sources":["../../../../src/primitives/thread/topAnchor/useTopAnchorReserve.ts"],"mappings":";;;;;;qBAWa,sBAAuB"}
@@ -1,6 +1,6 @@
1
1
  import { RefCallback } from "react";
2
2
  //#region src/primitives/thread/useThreadViewportAutoScroll.d.ts
3
- declare namespace useThreadViewportAutoScroll {
3
+ export declare namespace useThreadViewportAutoScroll {
4
4
  type Options = {
5
5
  /**
6
6
  * Whether to automatically scroll to the bottom when new messages are added.
@@ -29,7 +29,6 @@ declare namespace useThreadViewportAutoScroll {
29
29
  scrollToBottomOnThreadSwitch?: boolean | undefined;
30
30
  };
31
31
  }
32
- declare const useThreadViewportAutoScroll: <TElement extends HTMLElement>({ autoScroll, scrollToBottomOnRunStart, scrollToBottomOnInitialize, scrollToBottomOnThreadSwitch }: useThreadViewportAutoScroll.Options) => RefCallback<TElement>;
32
+ export declare const useThreadViewportAutoScroll: <TElement extends HTMLElement>({ autoScroll, scrollToBottomOnRunStart, scrollToBottomOnInitialize, scrollToBottomOnThreadSwitch }: useThreadViewportAutoScroll.Options) => RefCallback<TElement>;
33
33
  //#endregion
34
- export { useThreadViewportAutoScroll };
35
34
  //# sourceMappingURL=useThreadViewportAutoScroll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useThreadViewportAutoScroll.d.ts","names":[],"sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"mappings":";;kBAgBiB;OACH;;;;;;;IAOV;;;;;;IAOA;;;;;;IAOA;;;;;;IAOA;;;cAIS,8BAA+B,iBAAiB,eAAa,YAAA,0BAAA,4BAAA,gCAKvE,4BAA4B,YAAU,YAAY"}
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"}
@@ -23,13 +23,21 @@ const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunStart = tr
23
23
  const lastObservedClientHeight = useRef(0);
24
24
  const scrollingToBottomBehaviorRef = useRef(null);
25
25
  const followBottomRef = useRef(autoScroll);
26
- const scrollToBottom = useCallback((behavior) => {
26
+ const previousAutoScrollRef = useRef(autoScroll);
27
+ useLayoutEffect(() => {
28
+ const previousAutoScroll = previousAutoScrollRef.current;
29
+ previousAutoScrollRef.current = autoScroll;
30
+ if (previousAutoScroll || !autoScroll) return;
27
31
  const div = divRef.current;
28
- if (!div) return;
32
+ followBottomRef.current = div !== null && isViewportAtBottom(div);
33
+ }, [autoScroll]);
34
+ const scrollToBottom = useCallback((behavior) => {
35
+ const div_0 = divRef.current;
36
+ if (!div_0) return;
29
37
  followBottomRef.current = true;
30
38
  scrollingToBottomBehaviorRef.current = behavior;
31
- div.scrollTo({
32
- top: div.scrollHeight,
39
+ div_0.scrollTo({
40
+ top: div_0.scrollHeight,
33
41
  behavior
34
42
  });
35
43
  }, []);
@@ -52,17 +60,17 @@ const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunStart = tr
52
60
  return state.turnAnchor === "top" && state.element.viewport === divRef.current && state.element.anchor !== null;
53
61
  }, [threadViewportStore]);
54
62
  const handleScroll = () => {
55
- const div_0 = divRef.current;
56
- if (!div_0) return;
63
+ const div_1 = divRef.current;
64
+ if (!div_1) return;
57
65
  const isAtBottom = threadViewportStore.getState().isAtBottom;
58
- const newIsAtBottom = isViewportAtBottom(div_0);
59
- if (!newIsAtBottom && lastScrollTop.current < div_0.scrollTop) {} else {
66
+ const newIsAtBottom = isViewportAtBottom(div_1);
67
+ if (!newIsAtBottom && lastScrollTop.current < div_1.scrollTop) {} else {
60
68
  const userScrolledUp = isUserScrollUp({
61
69
  scrollTop: lastScrollTop.current,
62
70
  scrollHeight: lastScrollHeight.current
63
- }, div_0);
71
+ }, div_1);
64
72
  if (newIsAtBottom) {
65
- if (viewportOverflows(div_0)) scrollingToBottomBehaviorRef.current = null;
73
+ if (viewportOverflows(div_1)) scrollingToBottomBehaviorRef.current = null;
66
74
  if (autoScroll) followBottomRef.current = true;
67
75
  } else if (userScrolledUp) {
68
76
  cancelScheduledFrame();
@@ -71,13 +79,13 @@ const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunStart = tr
71
79
  }
72
80
  if ((newIsAtBottom || scrollingToBottomBehaviorRef.current === null) && newIsAtBottom !== isAtBottom) writableStore(threadViewportStore).setState({ isAtBottom: newIsAtBottom });
73
81
  }
74
- lastScrollTop.current = div_0.scrollTop;
75
- lastScrollHeight.current = div_0.scrollHeight;
82
+ lastScrollTop.current = div_1.scrollTop;
83
+ lastScrollHeight.current = div_1.scrollHeight;
76
84
  };
77
85
  const resizeRef = useOnResizeContent(() => {
78
- const div_1 = divRef.current;
79
- if (!div_1) return;
80
- const { scrollHeight, clientHeight } = div_1;
86
+ const div_2 = divRef.current;
87
+ if (!div_2) return;
88
+ const { scrollHeight, clientHeight } = div_2;
81
89
  if (scrollHeight === lastObservedScrollHeight.current && clientHeight === lastObservedClientHeight.current) return;
82
90
  lastObservedScrollHeight.current = scrollHeight;
83
91
  lastObservedClientHeight.current = clientHeight;
@@ -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","scrollToBottom","behavior","div","current","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\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","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,15 +1,14 @@
1
1
  import { ActionButtonElement, ActionButtonProps } from "../../utils/createActionButton.js";
2
2
  //#region src/primitives/threadList/ThreadListLoadMore.d.ts
3
3
  declare const useThreadListLoadMore: () => (() => void) | null;
4
- declare namespace ThreadListPrimitiveLoadMore {
4
+ export declare namespace ThreadListPrimitiveLoadMore {
5
5
  type Element = ActionButtonElement;
6
6
  type Props = ActionButtonProps<typeof useThreadListLoadMore>;
7
7
  }
8
- declare const ThreadListPrimitiveLoadMore: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
8
+ export declare const ThreadListPrimitiveLoadMore: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
9
9
  asChild?: boolean;
10
10
  }, "ref"> & {
11
11
  render?: import("react").ReactElement | undefined;
12
12
  } & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
13
13
  //#endregion
14
- export { ThreadListPrimitiveLoadMore };
15
14
  //# sourceMappingURL=ThreadListLoadMore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadListLoadMore.d.ts","names":[],"sources":["../../../src/primitives/threadList/ThreadListLoadMore.tsx"],"mappings":";;cASM;kBAMW;OACH,UAAU;OACV,QAAQ,yBAAyB;;cAGlC,6CAA2B,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;oBAGvC,cAAA,6CAAA,cAAA"}
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,14 +1,13 @@
1
1
  import { ActionButtonElement, ActionButtonProps } from "../../utils/createActionButton.js";
2
2
  //#region src/primitives/threadList/ThreadListNew.d.ts
3
- declare namespace ThreadListPrimitiveNew {
3
+ export declare namespace ThreadListPrimitiveNew {
4
4
  type Element = ActionButtonElement;
5
5
  type Props = ActionButtonProps<() => void>;
6
6
  }
7
- declare const ThreadListPrimitiveNew: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
7
+ export declare const ThreadListPrimitiveNew: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
8
8
  asChild?: boolean;
9
9
  }, "ref"> & {
10
10
  render?: import("react").ReactElement | undefined;
11
11
  } & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
12
12
  //#endregion
13
- export { ThreadListPrimitiveNew };
14
13
  //# sourceMappingURL=ThreadListNew.d.ts.map