@assistant-ui/react 0.14.18 → 0.14.19

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 (335) hide show
  1. package/dist/client/ExternalThread.d.ts +3 -2
  2. package/dist/client/ExternalThread.d.ts.map +1 -1
  3. package/dist/client/ExternalThread.js +721 -256
  4. package/dist/client/ExternalThread.js.map +1 -1
  5. package/dist/client/InMemoryThreadList.d.ts.map +1 -1
  6. package/dist/client/InMemoryThreadList.js +292 -108
  7. package/dist/client/InMemoryThreadList.js.map +1 -1
  8. package/dist/client/SingleThreadList.js +139 -53
  9. package/dist/client/SingleThreadList.js.map +1 -1
  10. package/dist/context/ReadonlyStore.js.map +1 -1
  11. package/dist/context/providers/MessageProvider.js +38 -5
  12. package/dist/context/providers/MessageProvider.js.map +1 -1
  13. package/dist/context/providers/ThreadViewportProvider.js +76 -20
  14. package/dist/context/providers/ThreadViewportProvider.js.map +1 -1
  15. package/dist/context/react/ThreadViewportContext.js.map +1 -1
  16. package/dist/context/react/utils/createContextHook.js.map +1 -1
  17. package/dist/context/react/utils/createContextStoreHook.js +17 -2
  18. package/dist/context/react/utils/createContextStoreHook.js.map +1 -1
  19. package/dist/context/react/utils/createStateHookForRuntime.js.map +1 -1
  20. package/dist/context/react/utils/ensureBinding.js.map +1 -1
  21. package/dist/context/react/utils/useRuntimeState.js +18 -2
  22. package/dist/context/react/utils/useRuntimeState.js.map +1 -1
  23. package/dist/context/stores/ThreadViewport.js.map +1 -1
  24. package/dist/devtools/DevToolsHooks.js.map +1 -1
  25. package/dist/hooks/useMessageQuote.js.map +1 -1
  26. package/dist/hooks/useMessageTiming.js +4 -1
  27. package/dist/hooks/useMessageTiming.js.map +1 -1
  28. package/dist/hooks/useToolCallElapsed.d.ts +23 -0
  29. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -0
  30. package/dist/hooks/useToolCallElapsed.js +72 -0
  31. package/dist/hooks/useToolCallElapsed.js.map +1 -0
  32. package/dist/index.d.ts +4 -2
  33. package/dist/index.js +3 -1
  34. package/dist/internal.js.map +1 -1
  35. package/dist/legacy-runtime/AssistantRuntimeProvider.js +46 -10
  36. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  37. package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
  38. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js +27 -6
  39. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js.map +1 -1
  40. package/dist/legacy-runtime/hooks/AssistantContext.js +13 -2
  41. package/dist/legacy-runtime/hooks/AssistantContext.js.map +1 -1
  42. package/dist/legacy-runtime/hooks/AttachmentContext.js +9 -1
  43. package/dist/legacy-runtime/hooks/AttachmentContext.js.map +1 -1
  44. package/dist/legacy-runtime/hooks/ComposerContext.js +9 -1
  45. package/dist/legacy-runtime/hooks/ComposerContext.js.map +1 -1
  46. package/dist/legacy-runtime/hooks/MessageContext.js +12 -2
  47. package/dist/legacy-runtime/hooks/MessageContext.js.map +1 -1
  48. package/dist/legacy-runtime/hooks/MessagePartContext.js +9 -1
  49. package/dist/legacy-runtime/hooks/MessagePartContext.js.map +1 -1
  50. package/dist/legacy-runtime/hooks/ThreadContext.js +33 -5
  51. package/dist/legacy-runtime/hooks/ThreadContext.js.map +1 -1
  52. package/dist/legacy-runtime/hooks/ThreadListItemContext.js +9 -1
  53. package/dist/legacy-runtime/hooks/ThreadListItemContext.js.map +1 -1
  54. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js +3 -3
  55. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js.map +1 -1
  56. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js +71 -31
  57. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js.map +1 -1
  58. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js.map +1 -1
  59. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +24 -16
  60. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  61. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js +17 -12
  62. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js.map +1 -1
  63. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js +17 -3
  64. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js.map +1 -1
  65. package/dist/mcp-apps/McpAppRenderer.js +6 -6
  66. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  67. package/dist/mcp-apps/McpAppsRemoteHost.js +3 -3
  68. package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -1
  69. package/dist/mcp-apps/app-frame.js +33 -14
  70. package/dist/mcp-apps/app-frame.js.map +1 -1
  71. package/dist/mcp-apps/bridge.js.map +1 -1
  72. package/dist/mcp-apps/types.js.map +1 -1
  73. package/dist/mcp-apps/utils.js.map +1 -1
  74. package/dist/model-context/frame/useAssistantFrameHost.js +32 -14
  75. package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -1
  76. package/dist/model-context/makeAssistantVisible.js +64 -26
  77. package/dist/model-context/makeAssistantVisible.js.map +1 -1
  78. package/dist/primitives/actionBar/ActionBarCopy.js +94 -20
  79. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  80. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
  81. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +105 -37
  82. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  83. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +60 -11
  84. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  85. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +60 -11
  86. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  87. package/dist/primitives/actionBar/ActionBarInteractionContext.js +3 -1
  88. package/dist/primitives/actionBar/ActionBarInteractionContext.js.map +1 -1
  89. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -1
  90. package/dist/primitives/actionBar/ActionBarRoot.js +84 -25
  91. package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -1
  92. package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -1
  93. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +45 -14
  94. package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -1
  95. package/dist/primitives/actionBar/useActionBarFloatStatus.js +22 -10
  96. package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -1
  97. package/dist/primitives/actionBar.js.map +1 -1
  98. package/dist/primitives/actionBarMore/ActionBarMoreContent.js +44 -7
  99. package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -1
  100. package/dist/primitives/actionBarMore/ActionBarMoreItem.js +28 -6
  101. package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -1
  102. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js +103 -36
  103. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -1
  104. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +28 -6
  105. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -1
  106. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +28 -6
  107. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -1
  108. package/dist/primitives/actionBarMore/scope.js.map +1 -1
  109. package/dist/primitives/actionBarMore.js.map +1 -1
  110. package/dist/primitives/assistantModal/AssistantModalAnchor.js +27 -6
  111. package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
  112. package/dist/primitives/assistantModal/AssistantModalContent.js +71 -10
  113. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  114. package/dist/primitives/assistantModal/AssistantModalRoot.js +93 -26
  115. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  116. package/dist/primitives/assistantModal/AssistantModalTrigger.js +27 -6
  117. package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
  118. package/dist/primitives/assistantModal/scope.js.map +1 -1
  119. package/dist/primitives/assistantModal.js.map +1 -1
  120. package/dist/primitives/attachment/AttachmentName.js +13 -1
  121. package/dist/primitives/attachment/AttachmentName.js.map +1 -1
  122. package/dist/primitives/attachment/AttachmentRemove.js +11 -4
  123. package/dist/primitives/attachment/AttachmentRemove.js.map +1 -1
  124. package/dist/primitives/attachment/AttachmentRoot.js +13 -4
  125. package/dist/primitives/attachment/AttachmentRoot.js.map +1 -1
  126. package/dist/primitives/attachment/AttachmentThumb.js +20 -9
  127. package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
  128. package/dist/primitives/attachment.js.map +1 -1
  129. package/dist/primitives/branchPicker/BranchPickerCount.js +14 -2
  130. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -1
  131. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  132. package/dist/primitives/branchPicker/BranchPickerNumber.js +14 -2
  133. package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -1
  134. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  135. package/dist/primitives/branchPicker/BranchPickerRoot.js +34 -6
  136. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  137. package/dist/primitives/branchPicker.js.map +1 -1
  138. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +16 -5
  139. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -1
  140. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +13 -4
  141. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -1
  142. package/dist/primitives/chainOfThought.js.map +1 -1
  143. package/dist/primitives/composer/ComposerAddAttachment.js +37 -24
  144. package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -1
  145. package/dist/primitives/composer/ComposerAttachmentDropzone.js +124 -49
  146. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
  147. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  148. package/dist/primitives/composer/ComposerDictate.js.map +1 -1
  149. package/dist/primitives/composer/ComposerDictationTranscript.js +32 -7
  150. package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
  151. package/dist/primitives/composer/ComposerInput.js +26 -26
  152. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  153. package/dist/primitives/composer/ComposerInputPluginContext.js +71 -25
  154. package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -1
  155. package/dist/primitives/composer/ComposerQuote.js +92 -23
  156. package/dist/primitives/composer/ComposerQuote.js.map +1 -1
  157. package/dist/primitives/composer/ComposerRoot.js +45 -11
  158. package/dist/primitives/composer/ComposerRoot.js.map +1 -1
  159. package/dist/primitives/composer/ComposerSend.js +9 -2
  160. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  161. package/dist/primitives/composer/ComposerStopDictation.js +15 -5
  162. package/dist/primitives/composer/ComposerStopDictation.js.map +1 -1
  163. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
  164. package/dist/primitives/composer/trigger/TriggerPopover.js +215 -75
  165. package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -1
  166. package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -1
  167. package/dist/primitives/composer/trigger/TriggerPopoverBack.js +35 -7
  168. package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -1
  169. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +134 -28
  170. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -1
  171. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -1
  172. package/dist/primitives/composer/trigger/TriggerPopoverItems.js +132 -28
  173. package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -1
  174. package/dist/primitives/composer/trigger/TriggerPopoverResource.js +124 -52
  175. package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -1
  176. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +181 -78
  177. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -1
  178. package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -1
  179. package/dist/primitives/composer/trigger/index.js.map +1 -1
  180. package/dist/primitives/composer/trigger/triggerDetectionResource.js +28 -14
  181. package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -1
  182. package/dist/primitives/composer/trigger/triggerKeyboardResource.js +115 -58
  183. package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -1
  184. package/dist/primitives/composer/trigger/triggerNavigationResource.js +202 -70
  185. package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -1
  186. package/dist/primitives/composer/trigger/triggerSelectionResource.js +49 -13
  187. package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -1
  188. package/dist/primitives/composer.js.map +1 -1
  189. package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -1
  190. package/dist/primitives/error/ErrorMessage.js +28 -6
  191. package/dist/primitives/error/ErrorMessage.js.map +1 -1
  192. package/dist/primitives/error/ErrorRoot.js +14 -5
  193. package/dist/primitives/error/ErrorRoot.js.map +1 -1
  194. package/dist/primitives/error.js.map +1 -1
  195. package/dist/primitives/message/MessageError.js +2 -1
  196. package/dist/primitives/message/MessageError.js.map +1 -1
  197. package/dist/primitives/message/MessageIf.js +50 -20
  198. package/dist/primitives/message/MessageIf.js.map +1 -1
  199. package/dist/primitives/message/MessageParts.js +41 -7
  200. package/dist/primitives/message/MessageParts.js.map +1 -1
  201. package/dist/primitives/message/MessagePartsGrouped.js +399 -94
  202. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  203. package/dist/primitives/message/MessageRoot.js +197 -65
  204. package/dist/primitives/message/MessageRoot.js.map +1 -1
  205. package/dist/primitives/message.js.map +1 -1
  206. package/dist/primitives/messagePart/MessagePartImage.js +15 -5
  207. package/dist/primitives/messagePart/MessagePartImage.js.map +1 -1
  208. package/dist/primitives/messagePart/MessagePartText.js +35 -7
  209. package/dist/primitives/messagePart/MessagePartText.js.map +1 -1
  210. package/dist/primitives/messagePart/useMessagePartData.js +5 -4
  211. package/dist/primitives/messagePart/useMessagePartData.js.map +1 -1
  212. package/dist/primitives/messagePart/useMessagePartFile.js +5 -4
  213. package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -1
  214. package/dist/primitives/messagePart/useMessagePartImage.js +5 -4
  215. package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -1
  216. package/dist/primitives/messagePart/useMessagePartReasoning.js +5 -4
  217. package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -1
  218. package/dist/primitives/messagePart/useMessagePartSource.js +5 -4
  219. package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -1
  220. package/dist/primitives/messagePart/useMessagePartText.js +5 -4
  221. package/dist/primitives/messagePart/useMessagePartText.js.map +1 -1
  222. package/dist/primitives/messagePart.js.map +1 -1
  223. package/dist/primitives/queueItem/QueueItemRemove.js +11 -4
  224. package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -1
  225. package/dist/primitives/queueItem/QueueItemSteer.js +11 -4
  226. package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -1
  227. package/dist/primitives/queueItem/QueueItemText.js +20 -6
  228. package/dist/primitives/queueItem/QueueItemText.js.map +1 -1
  229. package/dist/primitives/queueItem.js.map +1 -1
  230. package/dist/primitives/reasoning/useScrollLock.js +61 -43
  231. package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
  232. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +56 -16
  233. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -1
  234. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +120 -59
  235. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  236. package/dist/primitives/selectionToolbar.js.map +1 -1
  237. package/dist/primitives/suggestion/SuggestionDescription.js +20 -6
  238. package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -1
  239. package/dist/primitives/suggestion/SuggestionTitle.js +20 -6
  240. package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -1
  241. package/dist/primitives/suggestion/SuggestionTrigger.js +39 -26
  242. package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -1
  243. package/dist/primitives/suggestion.js.map +1 -1
  244. package/dist/primitives/thread/ThreadEmpty.js +6 -2
  245. package/dist/primitives/thread/ThreadEmpty.js.map +1 -1
  246. package/dist/primitives/thread/ThreadIf.js +32 -10
  247. package/dist/primitives/thread/ThreadIf.js.map +1 -1
  248. package/dist/primitives/thread/ThreadRoot.js +13 -4
  249. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  250. package/dist/primitives/thread/ThreadScrollToBottom.js +24 -6
  251. package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -1
  252. package/dist/primitives/thread/ThreadSuggestion.js +18 -6
  253. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
  254. package/dist/primitives/thread/ThreadViewport.js +185 -47
  255. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  256. package/dist/primitives/thread/ThreadViewportFooter.js +22 -9
  257. package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -1
  258. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js.map +1 -1
  259. package/dist/primitives/thread/topAnchor/createReserveObservers.js.map +1 -1
  260. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -1
  261. package/dist/primitives/thread/topAnchor/topAnchorTurn.js.map +1 -1
  262. package/dist/primitives/thread/topAnchor/topAnchorUtils.js.map +1 -1
  263. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +19 -4
  264. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -1
  265. package/dist/primitives/thread/useThreadViewportAutoScroll.js +16 -16
  266. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  267. package/dist/primitives/thread.js.map +1 -1
  268. package/dist/primitives/threadList/ThreadListLoadMore.js.map +1 -1
  269. package/dist/primitives/threadList/ThreadListNew.js +53 -11
  270. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  271. package/dist/primitives/threadList/ThreadListRoot.js +13 -4
  272. package/dist/primitives/threadList/ThreadListRoot.js.map +1 -1
  273. package/dist/primitives/threadList.js.map +1 -1
  274. package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -1
  275. package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -1
  276. package/dist/primitives/threadListItem/ThreadListItemRoot.js +26 -7
  277. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  278. package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
  279. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -1
  280. package/dist/primitives/threadListItem.js.map +1 -1
  281. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +44 -7
  282. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
  283. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +28 -6
  284. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -1
  285. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +25 -5
  286. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -1
  287. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +28 -6
  288. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -1
  289. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +28 -6
  290. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
  291. package/dist/primitives/threadListItemMore/scope.js.map +1 -1
  292. package/dist/primitives/threadListItemMore.js.map +1 -1
  293. package/dist/sandbox-host/SandboxHost.js.map +1 -1
  294. package/dist/tests/remote-thread-list-test-helpers.js.map +1 -1
  295. package/dist/tests/setup.js.map +1 -1
  296. package/dist/unstable/useComposerInputHistory.js.map +1 -1
  297. package/dist/unstable/useMentionAdapter.js.map +1 -1
  298. package/dist/unstable/useMessageStallDetection.d.ts +29 -0
  299. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -0
  300. package/dist/unstable/useMessageStallDetection.js +69 -0
  301. package/dist/unstable/useMessageStallDetection.js.map +1 -0
  302. package/dist/unstable/useSlashCommandAdapter.js.map +1 -1
  303. package/dist/utils/Primitive.js +57 -12
  304. package/dist/utils/Primitive.js.map +1 -1
  305. package/dist/utils/createActionButton.js +23 -7
  306. package/dist/utils/createActionButton.js.map +1 -1
  307. package/dist/utils/getSelectionMessageId.js.map +1 -1
  308. package/dist/utils/hooks/useManagedRef.js +16 -8
  309. package/dist/utils/hooks/useManagedRef.js.map +1 -1
  310. package/dist/utils/hooks/useMediaQuery.js +25 -10
  311. package/dist/utils/hooks/useMediaQuery.js.map +1 -1
  312. package/dist/utils/hooks/useOnResizeContent.js +29 -19
  313. package/dist/utils/hooks/useOnResizeContent.js.map +1 -1
  314. package/dist/utils/hooks/useOnScrollToBottom.js +20 -4
  315. package/dist/utils/hooks/useOnScrollToBottom.js.map +1 -1
  316. package/dist/utils/hooks/useSizeHandle.js +23 -15
  317. package/dist/utils/hooks/useSizeHandle.js.map +1 -1
  318. package/dist/utils/json/is-json-equal.js.map +1 -1
  319. package/dist/utils/json/is-json.js.map +1 -1
  320. package/dist/utils/smooth/SmoothContext.js +41 -11
  321. package/dist/utils/smooth/SmoothContext.js.map +1 -1
  322. package/dist/utils/smooth/useSmooth.js +5 -5
  323. package/dist/utils/smooth/useSmooth.js.map +1 -1
  324. package/dist/utils/useToolArgsFieldStatus.d.ts +2 -2
  325. package/dist/utils/useToolArgsFieldStatus.d.ts.map +1 -1
  326. package/dist/utils/useToolArgsFieldStatus.js +13 -5
  327. package/dist/utils/useToolArgsFieldStatus.js.map +1 -1
  328. package/package.json +6 -6
  329. package/src/client/ExternalThread.ts +81 -52
  330. package/src/client/InMemoryThreadList.ts +12 -14
  331. package/src/hooks/useToolCallElapsed.ts +52 -0
  332. package/src/index.ts +11 -0
  333. package/src/primitives/composer/trigger/TriggerPopover.tsx +4 -5
  334. package/src/tests/toolCallTiming.test.tsx +221 -0
  335. package/src/unstable/useMessageStallDetection.ts +91 -0
@@ -18,14 +18,15 @@ import { useAuiState } from "@assistant-ui/store";
18
18
  * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
19
19
  */
20
20
  const useMessagePartData = (name) => {
21
- const part = useAuiState((s) => {
22
- if (s.part.type !== "data") return null;
23
- return s.part;
24
- });
21
+ const part = useAuiState(_temp);
25
22
  if (!part) return null;
26
23
  if (name && part.name !== name) return null;
27
24
  return part;
28
25
  };
26
+ function _temp(s) {
27
+ if (s.part.type !== "data") return null;
28
+ return s.part;
29
+ }
29
30
  //#endregion
30
31
  export { useMessagePartData };
31
32
 
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartData.js","names":[],"sources":["../../../src/primitives/messagePart/useMessagePartData.ts"],"sourcesContent":["\"use client\";\n\nimport type { DataMessagePart } from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const part = useAuiState((s) =>\n * s.part.type === \"data\" && (!name || s.part.name === name)\n * ? s.part\n * : null,\n * );\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartData = <T = any>(name?: string) => {\n const part = useAuiState((s) => {\n if (s.part.type !== \"data\") {\n return null;\n }\n return s.part as DataMessagePart<T>;\n });\n\n if (!part) {\n return null;\n }\n\n if (name && part.name !== name) {\n return null;\n }\n\n return part;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqBA,MAAa,sBAA+B,SAAkB;CAC5D,MAAM,OAAO,aAAa,MAAM;EAC9B,IAAI,EAAE,KAAK,SAAS,QAClB,OAAO;EAET,OAAO,EAAE;CACX,CAAC;CAED,IAAI,CAAC,MACH,OAAO;CAGT,IAAI,QAAQ,KAAK,SAAS,MACxB,OAAO;CAGT,OAAO;AACT"}
1
+ {"version":3,"file":"useMessagePartData.js","names":["DataMessagePart","useAuiState","useMessagePartData","name","part","_temp","s","type","T"],"sources":["../../../src/primitives/messagePart/useMessagePartData.ts"],"sourcesContent":["\"use client\";\n\nimport type { DataMessagePart } from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const part = useAuiState((s) =>\n * s.part.type === \"data\" && (!name || s.part.name === name)\n * ? s.part\n * : null,\n * );\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartData = <T = any>(name?: string) => {\n const part = useAuiState((s) => {\n if (s.part.type !== \"data\") {\n return null;\n }\n return s.part as DataMessagePart<T>;\n });\n\n if (!part) {\n return null;\n }\n\n if (name && part.name !== name) {\n return null;\n }\n\n return part;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqBA,MAAaE,sBAAqBC,SAAA;CAChC,MAAAC,OAAaH,YAAYI,KAKxB;CAED,IAAI,CAACD,MAAI,OACA;CAGT,IAAID,QAAQC,KAAID,SAAUA,MAAI,OACrB;CACR,OAEMC;AAAI;AAhBqB,SAAAC,MAAAC,GAAA;CAE9B,IAAIA,EAACF,KAAKG,SAAU,QAAM,OACjB;CACR,OACMD,EAACF;AAA2B"}
@@ -17,11 +17,12 @@ import { useAuiState } from "@assistant-ui/store";
17
17
  * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
18
18
  */
19
19
  const useMessagePartFile = () => {
20
- return useAuiState((s) => {
21
- if (s.part.type !== "file") throw new Error("MessagePartFile can only be used inside file message parts.");
22
- return s.part;
23
- });
20
+ return useAuiState(_temp);
24
21
  };
22
+ function _temp(s) {
23
+ if (s.part.type !== "file") throw new Error("MessagePartFile can only be used inside file message parts.");
24
+ return s.part;
25
+ }
25
26
  //#endregion
26
27
  export { useMessagePartFile };
27
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartFile.js","names":[],"sources":["../../../src/primitives/messagePart/useMessagePartFile.ts"],"sourcesContent":["\"use client\";\n\nimport type { FileMessagePart, MessagePartState } from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const file = useAuiState((s) => {\n * if (s.part.type !== \"file\") return null;\n * return s.part;\n * });\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartFile = () => {\n const file = useAuiState((s) => {\n if (s.part.type !== \"file\")\n throw new Error(\n \"MessagePartFile can only be used inside file message parts.\",\n );\n\n return s.part as MessagePartState & FileMessagePart;\n });\n\n return file;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAoBA,MAAa,2BAA2B;CAUtC,OATa,aAAa,MAAM;EAC9B,IAAI,EAAE,KAAK,SAAS,QAClB,MAAM,IAAI,MACR,6DACF;EAEF,OAAO,EAAE;CACX,CAEU;AACZ"}
1
+ {"version":3,"file":"useMessagePartFile.js","names":["FileMessagePart","MessagePartState","useAuiState","useMessagePartFile","file","_temp","s","part","type","Error"],"sources":["../../../src/primitives/messagePart/useMessagePartFile.ts"],"sourcesContent":["\"use client\";\n\nimport type { FileMessagePart, MessagePartState } from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const file = useAuiState((s) => {\n * if (s.part.type !== \"file\") return null;\n * return s.part;\n * });\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartFile = () => {\n const file = useAuiState((s) => {\n if (s.part.type !== \"file\")\n throw new Error(\n \"MessagePartFile can only be used inside file message parts.\",\n );\n\n return s.part as MessagePartState & FileMessagePart;\n });\n\n return file;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAoBA,MAAaG,2BAAqB;CAQ7B,OAPUD,YAAYG,KASlBD;AAAI;AAVqB,SAAAC,MAAAC,GAAA;CAE9B,IAAIA,EAACC,KAAKC,SAAU,QAClB,MAAM,IAAIC,MACR,6DACF;CAAE,OAEGH,EAACC;AAA2C"}
@@ -17,11 +17,12 @@ import { useAuiState } from "@assistant-ui/store";
17
17
  * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
18
18
  */
19
19
  const useMessagePartImage = () => {
20
- return useAuiState((s) => {
21
- if (s.part.type !== "image") throw new Error("MessagePartImage can only be used inside image message parts.");
22
- return s.part;
23
- });
20
+ return useAuiState(_temp);
24
21
  };
22
+ function _temp(s) {
23
+ if (s.part.type !== "image") throw new Error("MessagePartImage can only be used inside image message parts.");
24
+ return s.part;
25
+ }
25
26
  //#endregion
26
27
  export { useMessagePartImage };
27
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartImage.js","names":[],"sources":["../../../src/primitives/messagePart/useMessagePartImage.ts"],"sourcesContent":["\"use client\";\n\nimport type { ImageMessagePart, MessagePartState } from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const image = useAuiState((s) => {\n * if (s.part.type !== \"image\") return null;\n * return s.part;\n * });\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartImage = () => {\n const image = useAuiState((s) => {\n if (s.part.type !== \"image\")\n throw new Error(\n \"MessagePartImage can only be used inside image message parts.\",\n );\n\n return s.part as MessagePartState & ImageMessagePart;\n });\n\n return image;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAoBA,MAAa,4BAA4B;CAUvC,OATc,aAAa,MAAM;EAC/B,IAAI,EAAE,KAAK,SAAS,SAClB,MAAM,IAAI,MACR,+DACF;EAEF,OAAO,EAAE;CACX,CAEW;AACb"}
1
+ {"version":3,"file":"useMessagePartImage.js","names":["ImageMessagePart","MessagePartState","useAuiState","useMessagePartImage","image","_temp","s","part","type","Error"],"sources":["../../../src/primitives/messagePart/useMessagePartImage.ts"],"sourcesContent":["\"use client\";\n\nimport type { ImageMessagePart, MessagePartState } from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const image = useAuiState((s) => {\n * if (s.part.type !== \"image\") return null;\n * return s.part;\n * });\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartImage = () => {\n const image = useAuiState((s) => {\n if (s.part.type !== \"image\")\n throw new Error(\n \"MessagePartImage can only be used inside image message parts.\",\n );\n\n return s.part as MessagePartState & ImageMessagePart;\n });\n\n return image;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAoBA,MAAaG,4BAAsB;CAQ9B,OAPWD,YAAYG,KASnBD;AAAK;AAVqB,SAAAC,MAAAC,GAAA;CAE/B,IAAIA,EAACC,KAAKC,SAAU,SAClB,MAAM,IAAIC,MACR,+DACF;CAAE,OAEGH,EAACC;AAA4C"}
@@ -17,11 +17,12 @@ import { useAuiState } from "@assistant-ui/store";
17
17
  * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
18
18
  */
19
19
  const useMessagePartReasoning = () => {
20
- return useAuiState((s) => {
21
- if (s.part.type !== "reasoning") throw new Error("MessagePartReasoning can only be used inside reasoning message parts.");
22
- return s.part;
23
- });
20
+ return useAuiState(_temp);
24
21
  };
22
+ function _temp(s) {
23
+ if (s.part.type !== "reasoning") throw new Error("MessagePartReasoning can only be used inside reasoning message parts.");
24
+ return s.part;
25
+ }
25
26
  //#endregion
26
27
  export { useMessagePartReasoning };
27
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartReasoning.js","names":[],"sources":["../../../src/primitives/messagePart/useMessagePartReasoning.ts"],"sourcesContent":["\"use client\";\n\nimport type {\n ReasoningMessagePart,\n MessagePartState,\n} from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const reasoning = useAuiState((s) => {\n * if (s.part.type !== \"reasoning\") return null;\n * return s.part;\n * });\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartReasoning = () => {\n const text = useAuiState((s) => {\n if (s.part.type !== \"reasoning\")\n throw new Error(\n \"MessagePartReasoning can only be used inside reasoning message parts.\",\n );\n\n return s.part as MessagePartState & ReasoningMessagePart;\n });\n\n return text;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAuBA,MAAa,gCAAgC;CAU3C,OATa,aAAa,MAAM;EAC9B,IAAI,EAAE,KAAK,SAAS,aAClB,MAAM,IAAI,MACR,uEACF;EAEF,OAAO,EAAE;CACX,CAEU;AACZ"}
1
+ {"version":3,"file":"useMessagePartReasoning.js","names":["ReasoningMessagePart","MessagePartState","useAuiState","useMessagePartReasoning","text","_temp","s","part","type","Error"],"sources":["../../../src/primitives/messagePart/useMessagePartReasoning.ts"],"sourcesContent":["\"use client\";\n\nimport type {\n ReasoningMessagePart,\n MessagePartState,\n} from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const reasoning = useAuiState((s) => {\n * if (s.part.type !== \"reasoning\") return null;\n * return s.part;\n * });\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartReasoning = () => {\n const text = useAuiState((s) => {\n if (s.part.type !== \"reasoning\")\n throw new Error(\n \"MessagePartReasoning can only be used inside reasoning message parts.\",\n );\n\n return s.part as MessagePartState & ReasoningMessagePart;\n });\n\n return text;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAuBA,MAAaG,gCAA0B;CAQlC,OAPUD,YAAYG,KASlBD;AAAI;AAV0B,SAAAC,MAAAC,GAAA;CAEnC,IAAIA,EAACC,KAAKC,SAAU,aAClB,MAAM,IAAIC,MACR,uEACF;CAAE,OAEGH,EAACC;AAAgD"}
@@ -17,11 +17,12 @@ import { useAuiState } from "@assistant-ui/store";
17
17
  * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
18
18
  */
19
19
  const useMessagePartSource = () => {
20
- return useAuiState((s) => {
21
- if (s.part.type !== "source") throw new Error("MessagePartSource can only be used inside source message parts.");
22
- return s.part;
23
- });
20
+ return useAuiState(_temp);
24
21
  };
22
+ function _temp(s) {
23
+ if (s.part.type !== "source") throw new Error("MessagePartSource can only be used inside source message parts.");
24
+ return s.part;
25
+ }
25
26
  //#endregion
26
27
  export { useMessagePartSource };
27
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartSource.js","names":[],"sources":["../../../src/primitives/messagePart/useMessagePartSource.ts"],"sourcesContent":["\"use client\";\n\nimport type { SourceMessagePart, MessagePartState } from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const source = useAuiState((s) => {\n * if (s.part.type !== \"source\") return null;\n * return s.part;\n * });\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartSource = () => {\n const source = useAuiState((s) => {\n if (s.part.type !== \"source\")\n throw new Error(\n \"MessagePartSource can only be used inside source message parts.\",\n );\n\n return s.part as MessagePartState & SourceMessagePart;\n });\n\n return source;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAoBA,MAAa,6BAA6B;CAUxC,OATe,aAAa,MAAM;EAChC,IAAI,EAAE,KAAK,SAAS,UAClB,MAAM,IAAI,MACR,iEACF;EAEF,OAAO,EAAE;CACX,CAEY;AACd"}
1
+ {"version":3,"file":"useMessagePartSource.js","names":["SourceMessagePart","MessagePartState","useAuiState","useMessagePartSource","source","_temp","s","part","type","Error"],"sources":["../../../src/primitives/messagePart/useMessagePartSource.ts"],"sourcesContent":["\"use client\";\n\nimport type { SourceMessagePart, MessagePartState } from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const source = useAuiState((s) => {\n * if (s.part.type !== \"source\") return null;\n * return s.part;\n * });\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartSource = () => {\n const source = useAuiState((s) => {\n if (s.part.type !== \"source\")\n throw new Error(\n \"MessagePartSource can only be used inside source message parts.\",\n );\n\n return s.part as MessagePartState & SourceMessagePart;\n });\n\n return source;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAoBA,MAAaG,6BAAuB;CAQ/B,OAPYD,YAAYG,KASpBD;AAAM;AAVqB,SAAAC,MAAAC,GAAA;CAEhC,IAAIA,EAACC,KAAKC,SAAU,UAClB,MAAM,IAAIC,MACR,iEACF;CAAE,OAEGH,EAACC;AAA6C"}
@@ -17,11 +17,12 @@ import { useAuiState } from "@assistant-ui/store";
17
17
  * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
18
18
  */
19
19
  const useMessagePartText = () => {
20
- return useAuiState((s) => {
21
- if (s.part.type !== "text" && s.part.type !== "reasoning") throw new Error("MessagePartText can only be used inside text or reasoning message parts.");
22
- return s.part;
23
- });
20
+ return useAuiState(_temp);
24
21
  };
22
+ function _temp(s) {
23
+ if (s.part.type !== "text" && s.part.type !== "reasoning") throw new Error("MessagePartText can only be used inside text or reasoning message parts.");
24
+ return s.part;
25
+ }
25
26
  //#endregion
26
27
  export { useMessagePartText };
27
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartText.js","names":[],"sources":["../../../src/primitives/messagePart/useMessagePartText.ts"],"sourcesContent":["\"use client\";\n\nimport type {\n TextMessagePart,\n ReasoningMessagePart,\n MessagePartState,\n} from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const text = useAuiState((s) => {\n * if (s.part.type !== \"text\" && s.part.type !== \"reasoning\") return null;\n * return s.part;\n * });\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartText = () => {\n const text = useAuiState((s) => {\n if (s.part.type !== \"text\" && s.part.type !== \"reasoning\")\n throw new Error(\n \"MessagePartText can only be used inside text or reasoning message parts.\",\n );\n\n return s.part as MessagePartState &\n (TextMessagePart | ReasoningMessagePart);\n });\n\n return text;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAwBA,MAAa,2BAA2B;CAWtC,OAVa,aAAa,MAAM;EAC9B,IAAI,EAAE,KAAK,SAAS,UAAU,EAAE,KAAK,SAAS,aAC5C,MAAM,IAAI,MACR,0EACF;EAEF,OAAO,EAAE;CAEX,CAEU;AACZ"}
1
+ {"version":3,"file":"useMessagePartText.js","names":["TextMessagePart","ReasoningMessagePart","MessagePartState","useAuiState","useMessagePartText","text","_temp","s","part","type","Error"],"sources":["../../../src/primitives/messagePart/useMessagePartText.ts"],"sourcesContent":["\"use client\";\n\nimport type {\n TextMessagePart,\n ReasoningMessagePart,\n MessagePartState,\n} from \"@assistant-ui/core\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\n/**\n * @deprecated Use {@link useAuiState} to select and narrow `s.part`.\n * Return `null` for optional rendering, or throw inside the selector to\n * preserve the old hook's strict behavior.\n *\n * @example\n * ```tsx\n * const text = useAuiState((s) => {\n * if (s.part.type !== \"text\" && s.part.type !== \"reasoning\") return null;\n * return s.part;\n * });\n * ```\n *\n * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.\n */\nexport const useMessagePartText = () => {\n const text = useAuiState((s) => {\n if (s.part.type !== \"text\" && s.part.type !== \"reasoning\")\n throw new Error(\n \"MessagePartText can only be used inside text or reasoning message parts.\",\n );\n\n return s.part as MessagePartState &\n (TextMessagePart | ReasoningMessagePart);\n });\n\n return text;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAwBA,MAAaI,2BAAqB;CAS7B,OARUD,YAAYG,KAUlBD;AAAI;AAXqB,SAAAC,MAAAC,GAAA;CAE9B,IAAIA,EAACC,KAAKC,SAAU,UAAUF,EAACC,KAAKC,SAAU,aAC5C,MAAM,IAAIC,MACR,0EACF;CAAE,OAEGH,EAACC;AACkC"}
@@ -1 +1 @@
1
- {"version":3,"file":"messagePart.js","names":[],"sources":["../../src/primitives/messagePart.ts"],"sourcesContent":["export { MessagePartPrimitiveText as Text } from \"./messagePart/MessagePartText\";\nexport { MessagePartPrimitiveImage as Image } from \"./messagePart/MessagePartImage\";\nexport { MessagePartPrimitiveInProgress as InProgress } from \"./messagePart/MessagePartInProgress\";\nexport { PartPrimitiveMessages as Messages } from \"@assistant-ui/core/react\";\n"],"mappings":""}
1
+ {"version":3,"file":"messagePart.js","names":["MessagePartPrimitiveText","Text","MessagePartPrimitiveImage","Image","MessagePartPrimitiveInProgress","InProgress","PartPrimitiveMessages","Messages"],"sources":["../../src/primitives/messagePart.ts"],"sourcesContent":["export { MessagePartPrimitiveText as Text } from \"./messagePart/MessagePartText\";\nexport { MessagePartPrimitiveImage as Image } from \"./messagePart/MessagePartImage\";\nexport { MessagePartPrimitiveInProgress as InProgress } from \"./messagePart/MessagePartInProgress\";\nexport { PartPrimitiveMessages as Messages } from \"@assistant-ui/core/react\";\n"],"mappings":""}
@@ -1,13 +1,20 @@
1
1
  "use client";
2
2
  import { createActionButton } from "../../utils/createActionButton.js";
3
3
  import { useAui } from "@assistant-ui/store";
4
- import { useCallback } from "@assistant-ui/tap/react-shim";
4
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
5
  //#region src/primitives/queueItem/QueueItemRemove.ts
6
6
  const useQueueItemRemove = () => {
7
+ const $ = c(2);
7
8
  const aui = useAui();
8
- return useCallback(() => {
9
- aui.queueItem().remove();
10
- }, [aui]);
9
+ let t0;
10
+ if ($[0] !== aui) {
11
+ t0 = () => {
12
+ aui.queueItem().remove();
13
+ };
14
+ $[0] = aui;
15
+ $[1] = t0;
16
+ } else t0 = $[1];
17
+ return t0;
11
18
  };
12
19
  /**
13
20
  * A button that removes this item from the queue.
@@ -1 +1 @@
1
- {"version":3,"file":"QueueItemRemove.js","names":[],"sources":["../../../src/primitives/queueItem/QueueItemRemove.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useCallback } from \"react\";\n\nconst useQueueItemRemove = () => {\n const aui = useAui();\n\n const callback = useCallback(() => {\n aui.queueItem().remove();\n }, [aui]);\n\n return callback;\n};\n\nexport namespace QueueItemPrimitiveRemove {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useQueueItemRemove>;\n}\n\n/**\n * A button that removes this item from the queue.\n *\n * @example\n * ```tsx\n * <QueueItemPrimitive.Remove>×</QueueItemPrimitive.Remove>\n * ```\n */\nexport const QueueItemPrimitiveRemove = createActionButton(\n \"QueueItemPrimitive.Remove\",\n useQueueItemRemove,\n);\n"],"mappings":";;;;;AAUA,MAAM,2BAA2B;CAC/B,MAAM,MAAM,OAAO;CAMnB,OAJiB,kBAAkB;EACjC,IAAI,UAAU,CAAC,CAAC,OAAO;CACzB,GAAG,CAAC,GAAG,CAEO;AAChB;;;;;;;;;AAeA,MAAa,2BAA2B,mBACtC,6BACA,kBACF"}
1
+ {"version":3,"file":"QueueItemRemove.js","names":["c","_c","ActionButtonElement","ActionButtonProps","createActionButton","useAui","useCallback","useQueueItemRemove","$","aui","t0","queueItem","remove","callback","QueueItemPrimitiveRemove","Element","Props"],"sources":["../../../src/primitives/queueItem/QueueItemRemove.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useCallback } from \"react\";\n\nconst useQueueItemRemove = () => {\n const aui = useAui();\n\n const callback = useCallback(() => {\n aui.queueItem().remove();\n }, [aui]);\n\n return callback;\n};\n\nexport namespace QueueItemPrimitiveRemove {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useQueueItemRemove>;\n}\n\n/**\n * A button that removes this item from the queue.\n *\n * @example\n * ```tsx\n * <QueueItemPrimitive.Remove>×</QueueItemPrimitive.Remove>\n * ```\n */\nexport const QueueItemPrimitiveRemove = createActionButton(\n \"QueueItemPrimitive.Remove\",\n useQueueItemRemove,\n);\n"],"mappings":";;;;;AAUA,MAAMO,2BAAqB;CAAA,MAAAC,IAAAP,EAAA,CAAA;CACzB,MAAAQ,MAAYJ,OAAO;CAAE,IAAAK;CAAA,IAAAF,EAAA,OAAAC,KAAA;EAEQC,WAAA;GAC3BD,IAAGE,UAAW,CAAC,CAAAC,OAAQ;EAAC;EACzBJ,EAAA,KAAAC;EAAAD,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAS,OAEHK;AAAQ;;;;;;;;;AAgBjB,MAAaC,2BAA2BV,mBACtC,6BACAG,kBACF"}
@@ -1,13 +1,20 @@
1
1
  "use client";
2
2
  import { createActionButton } from "../../utils/createActionButton.js";
3
3
  import { useAui } from "@assistant-ui/store";
4
- import { useCallback } from "@assistant-ui/tap/react-shim";
4
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
5
  //#region src/primitives/queueItem/QueueItemSteer.ts
6
6
  const useQueueItemSteer = () => {
7
+ const $ = c(2);
7
8
  const aui = useAui();
8
- return useCallback(() => {
9
- aui.queueItem().steer();
10
- }, [aui]);
9
+ let t0;
10
+ if ($[0] !== aui) {
11
+ t0 = () => {
12
+ aui.queueItem().steer();
13
+ };
14
+ $[0] = aui;
15
+ $[1] = t0;
16
+ } else t0 = $[1];
17
+ return t0;
11
18
  };
12
19
  /**
13
20
  * A button that steers the current run to process this queue item immediately.
@@ -1 +1 @@
1
- {"version":3,"file":"QueueItemSteer.js","names":[],"sources":["../../../src/primitives/queueItem/QueueItemSteer.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useCallback } from \"react\";\n\nconst useQueueItemSteer = () => {\n const aui = useAui();\n\n const callback = useCallback(() => {\n aui.queueItem().steer();\n }, [aui]);\n\n return callback;\n};\n\nexport namespace QueueItemPrimitiveSteer {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useQueueItemSteer>;\n}\n\n/**\n * A button that steers the current run to process this queue item immediately.\n *\n * @example\n * ```tsx\n * <QueueItemPrimitive.Steer>Run Now</QueueItemPrimitive.Steer>\n * ```\n */\nexport const QueueItemPrimitiveSteer = createActionButton(\n \"QueueItemPrimitive.Steer\",\n useQueueItemSteer,\n);\n"],"mappings":";;;;;AAUA,MAAM,0BAA0B;CAC9B,MAAM,MAAM,OAAO;CAMnB,OAJiB,kBAAkB;EACjC,IAAI,UAAU,CAAC,CAAC,MAAM;CACxB,GAAG,CAAC,GAAG,CAEO;AAChB;;;;;;;;;AAeA,MAAa,0BAA0B,mBACrC,4BACA,iBACF"}
1
+ {"version":3,"file":"QueueItemSteer.js","names":["c","_c","ActionButtonElement","ActionButtonProps","createActionButton","useAui","useCallback","useQueueItemSteer","$","aui","t0","queueItem","steer","callback","QueueItemPrimitiveSteer","Element","Props"],"sources":["../../../src/primitives/queueItem/QueueItemSteer.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useCallback } from \"react\";\n\nconst useQueueItemSteer = () => {\n const aui = useAui();\n\n const callback = useCallback(() => {\n aui.queueItem().steer();\n }, [aui]);\n\n return callback;\n};\n\nexport namespace QueueItemPrimitiveSteer {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useQueueItemSteer>;\n}\n\n/**\n * A button that steers the current run to process this queue item immediately.\n *\n * @example\n * ```tsx\n * <QueueItemPrimitive.Steer>Run Now</QueueItemPrimitive.Steer>\n * ```\n */\nexport const QueueItemPrimitiveSteer = createActionButton(\n \"QueueItemPrimitive.Steer\",\n useQueueItemSteer,\n);\n"],"mappings":";;;;;AAUA,MAAMO,0BAAoB;CAAA,MAAAC,IAAAP,EAAA,CAAA;CACxB,MAAAQ,MAAYJ,OAAO;CAAE,IAAAK;CAAA,IAAAF,EAAA,OAAAC,KAAA;EAEQC,WAAA;GAC3BD,IAAGE,UAAW,CAAC,CAAAC,MAAO;EAAC;EACxBJ,EAAA,KAAAC;EAAAD,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAS,OAEHK;AAAQ;;;;;;;;;AAgBjB,MAAaC,0BAA0BV,mBACrC,4BACAG,iBACF"}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { Primitive } from "../../utils/Primitive.js";
3
3
  import { useAuiState } from "@assistant-ui/store";
4
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
4
5
  import { forwardRef } from "@assistant-ui/tap/react-shim";
5
6
  import { jsx } from "react/jsx-runtime";
6
7
  //#region src/primitives/queueItem/QueueItemText.tsx
@@ -13,14 +14,27 @@ import { jsx } from "react/jsx-runtime";
13
14
  * ```
14
15
  */
15
16
  const QueueItemPrimitiveText = forwardRef((props, ref) => {
16
- const prompt = useAuiState((s) => s.queueItem.prompt);
17
- return /* @__PURE__ */ jsx(Primitive.span, {
18
- ...props,
19
- ref,
20
- children: props.children ?? prompt
21
- });
17
+ const $ = c(4);
18
+ const prompt = useAuiState(_temp);
19
+ const t0 = props.children ?? prompt;
20
+ let t1;
21
+ if ($[0] !== props || $[1] !== ref || $[2] !== t0) {
22
+ t1 = /* @__PURE__ */ jsx(Primitive.span, {
23
+ ...props,
24
+ ref,
25
+ children: t0
26
+ });
27
+ $[0] = props;
28
+ $[1] = ref;
29
+ $[2] = t0;
30
+ $[3] = t1;
31
+ } else t1 = $[3];
32
+ return t1;
22
33
  });
23
34
  QueueItemPrimitiveText.displayName = "QueueItemPrimitive.Text";
35
+ function _temp(s) {
36
+ return s.queueItem.prompt;
37
+ }
24
38
  //#endregion
25
39
  export { QueueItemPrimitiveText };
26
40
 
@@ -1 +1 @@
1
- {"version":3,"file":"QueueItemText.js","names":[],"sources":["../../../src/primitives/queueItem/QueueItemText.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n type ComponentPropsWithoutRef,\n forwardRef,\n} from \"react\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\nexport namespace QueueItemPrimitiveText {\n export type Element = ComponentRef<typeof Primitive.span>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.span>;\n}\n\n/**\n * Renders the prompt text of a queue item.\n *\n * @example\n * ```tsx\n * <QueueItemPrimitive.Text />\n * ```\n */\nexport const QueueItemPrimitiveText = forwardRef<\n QueueItemPrimitiveText.Element,\n QueueItemPrimitiveText.Props\n>((props, ref) => {\n const prompt = useAuiState((s) => s.queueItem.prompt);\n\n return (\n <Primitive.span {...props} ref={ref}>\n {props.children ?? prompt}\n </Primitive.span>\n );\n});\n\nQueueItemPrimitiveText.displayName = \"QueueItemPrimitive.Text\";\n"],"mappings":";;;;;;;;;;;;;;AAuBA,MAAa,yBAAyB,YAGnC,OAAO,QAAQ;CAChB,MAAM,SAAS,aAAa,MAAM,EAAE,UAAU,MAAM;CAEpD,OACE,oBAAC,UAAU,MAAX;EAAgB,GAAI;EAAY;YAC7B,MAAM,YAAY;CACL,CAAA;AAEpB,CAAC;AAED,uBAAuB,cAAc"}
1
+ {"version":3,"file":"QueueItemText.js","names":["c","_c","Primitive","ComponentRef","ComponentPropsWithoutRef","forwardRef","useAuiState","QueueItemPrimitiveText","Element","span","Props","props","ref","$","prompt","_temp","t0","children","t1","displayName","s","queueItem"],"sources":["../../../src/primitives/queueItem/QueueItemText.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n type ComponentPropsWithoutRef,\n forwardRef,\n} from \"react\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\nexport namespace QueueItemPrimitiveText {\n export type Element = ComponentRef<typeof Primitive.span>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.span>;\n}\n\n/**\n * Renders the prompt text of a queue item.\n *\n * @example\n * ```tsx\n * <QueueItemPrimitive.Text />\n * ```\n */\nexport const QueueItemPrimitiveText = forwardRef<\n QueueItemPrimitiveText.Element,\n QueueItemPrimitiveText.Props\n>((props, ref) => {\n const prompt = useAuiState((s) => s.queueItem.prompt);\n\n return (\n <Primitive.span {...props} ref={ref}>\n {props.children ?? prompt}\n </Primitive.span>\n );\n});\n\nQueueItemPrimitiveText.displayName = \"QueueItemPrimitive.Text\";\n"],"mappings":";;;;;;;;;;;;;;;AAuBA,MAAaO,yBAAyBF,YAGpCM,OAAAC,QAAA;CAAA,MAAAC,IAAAZ,EAAA,CAAA;CACA,MAAAa,SAAeR,YAAYS,KAAyB;CAI/C,MAAAC,KAAAL,MAAKM,YAALH;CAAwB,IAAAI;CAAA,IAAAL,EAAA,OAAAF,SAAAE,EAAA,OAAAD,OAAAC,EAAA,OAAAG,IAAA;EAD3BE,KAAA,oBAAA,UAAA,MAAA;GAAA,GAAoBP;GAAYC;aAC7BI;EACH,CAAA;EAAiBH,EAAA,KAAAF;EAAAE,EAAA,KAAAD;EAAAC,EAAA,KAAAG;EAAAH,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAAA,OAFjBK;AAEiB,CAEpB;AAEDX,uBAAuBY,cAAc;AAVnC,SAAAJ,MAAAK,GAAA;CAAA,OACkCA,EAACC,UAAUP;AAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"queueItem.js","names":[],"sources":["../../src/primitives/queueItem.ts"],"sourcesContent":["export { QueueItemPrimitiveText as Text } from \"./queueItem/QueueItemText\";\nexport { QueueItemPrimitiveSteer as Steer } from \"./queueItem/QueueItemSteer\";\nexport { QueueItemPrimitiveRemove as Remove } from \"./queueItem/QueueItemRemove\";\n"],"mappings":""}
1
+ {"version":3,"file":"queueItem.js","names":["QueueItemPrimitiveText","Text","QueueItemPrimitiveSteer","Steer","QueueItemPrimitiveRemove","Remove"],"sources":["../../src/primitives/queueItem.ts"],"sourcesContent":["export { QueueItemPrimitiveText as Text } from \"./queueItem/QueueItemText\";\nexport { QueueItemPrimitiveSteer as Steer } from \"./queueItem/QueueItemSteer\";\nexport { QueueItemPrimitiveRemove as Remove } from \"./queueItem/QueueItemRemove\";\n"],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  "use client";
2
- import { useCallback, useEffect, useRef } from "@assistant-ui/tap/react-shim";
2
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
+ import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
3
4
  //#region src/primitives/reasoning/useScrollLock.ts
4
5
  /**
5
6
  * Locks scroll position during collapsible/height animations and hides scrollbar.
@@ -28,54 +29,71 @@ import { useCallback, useEffect, useRef } from "@assistant-ui/tap/react-shim";
28
29
  * ```
29
30
  */
30
31
  const useScrollLock = (animatedElementRef, animationDuration) => {
32
+ const $ = c(5);
31
33
  const scrollContainerRef = useRef(null);
32
34
  const cleanupRef = useRef(null);
33
- useEffect(() => {
34
- return () => {
35
+ let t0;
36
+ let t1;
37
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
38
+ t0 = () => () => {
35
39
  cleanupRef.current?.();
36
40
  };
37
- }, []);
38
- return useCallback(() => {
39
- cleanupRef.current?.();
40
- (function findScrollableAncestor() {
41
- if (scrollContainerRef.current || !animatedElementRef.current) return;
42
- let el = animatedElementRef.current;
43
- while (el) {
44
- const { overflowY } = getComputedStyle(el);
45
- if (overflowY === "scroll" || overflowY === "auto") {
46
- scrollContainerRef.current = el;
47
- break;
41
+ t1 = [];
42
+ $[0] = t0;
43
+ $[1] = t1;
44
+ } else {
45
+ t0 = $[0];
46
+ t1 = $[1];
47
+ }
48
+ useEffect(t0, t1);
49
+ let t2;
50
+ if ($[2] !== animatedElementRef || $[3] !== animationDuration) {
51
+ t2 = () => {
52
+ cleanupRef.current?.();
53
+ (function findScrollableAncestor() {
54
+ if (scrollContainerRef.current || !animatedElementRef.current) return;
55
+ let el = animatedElementRef.current;
56
+ while (el) {
57
+ const { overflowY } = getComputedStyle(el);
58
+ if (overflowY === "scroll" || overflowY === "auto") {
59
+ scrollContainerRef.current = el;
60
+ break;
61
+ }
62
+ el = el.parentElement;
48
63
  }
49
- el = el.parentElement;
50
- }
51
- })();
52
- const scrollContainer = scrollContainerRef.current;
53
- if (!scrollContainer) return;
54
- const scrollPosition = scrollContainer.scrollTop;
55
- const scrollbarWidth = scrollContainer.style.scrollbarWidth;
56
- const computed = getComputedStyle(scrollContainer);
57
- const paddingSide = computed.direction === "rtl" ? "paddingLeft" : "paddingRight";
58
- const previousPadding = scrollContainer.style[paddingSide];
59
- const scrollbarSize = scrollContainer.offsetWidth - scrollContainer.clientWidth - parseFloat(computed.borderLeftWidth) - parseFloat(computed.borderRightWidth);
60
- scrollContainer.style.scrollbarWidth = "none";
61
- if (scrollbarSize > 0) scrollContainer.style[paddingSide] = `${parseFloat(computed[paddingSide]) + scrollbarSize}px`;
62
- const restoreStyles = () => {
63
- scrollContainer.style.scrollbarWidth = scrollbarWidth;
64
- scrollContainer.style[paddingSide] = previousPadding;
65
- };
66
- const resetPosition = () => scrollContainer.scrollTop = scrollPosition;
67
- scrollContainer.addEventListener("scroll", resetPosition);
68
- const timeoutId = setTimeout(() => {
69
- scrollContainer.removeEventListener("scroll", resetPosition);
70
- restoreStyles();
71
- cleanupRef.current = null;
72
- }, animationDuration);
73
- cleanupRef.current = () => {
74
- clearTimeout(timeoutId);
75
- scrollContainer.removeEventListener("scroll", resetPosition);
76
- restoreStyles();
64
+ })();
65
+ const scrollContainer = scrollContainerRef.current;
66
+ if (!scrollContainer) return;
67
+ const scrollPosition = scrollContainer.scrollTop;
68
+ const scrollbarWidth = scrollContainer.style.scrollbarWidth;
69
+ const computed = getComputedStyle(scrollContainer);
70
+ const paddingSide = computed.direction === "rtl" ? "paddingLeft" : "paddingRight";
71
+ const previousPadding = scrollContainer.style[paddingSide];
72
+ const scrollbarSize = scrollContainer.offsetWidth - scrollContainer.clientWidth - parseFloat(computed.borderLeftWidth) - parseFloat(computed.borderRightWidth);
73
+ scrollContainer.style.scrollbarWidth = "none";
74
+ if (scrollbarSize > 0) scrollContainer.style[paddingSide] = `${parseFloat(computed[paddingSide]) + scrollbarSize}px`;
75
+ const restoreStyles = () => {
76
+ scrollContainer.style.scrollbarWidth = scrollbarWidth;
77
+ scrollContainer.style[paddingSide] = previousPadding;
78
+ };
79
+ const resetPosition = () => scrollContainer.scrollTop = scrollPosition;
80
+ scrollContainer.addEventListener("scroll", resetPosition);
81
+ const timeoutId = setTimeout(() => {
82
+ scrollContainer.removeEventListener("scroll", resetPosition);
83
+ restoreStyles();
84
+ cleanupRef.current = null;
85
+ }, animationDuration);
86
+ cleanupRef.current = () => {
87
+ clearTimeout(timeoutId);
88
+ scrollContainer.removeEventListener("scroll", resetPosition);
89
+ restoreStyles();
90
+ };
77
91
  };
78
- }, [animationDuration, animatedElementRef]);
92
+ $[2] = animatedElementRef;
93
+ $[3] = animationDuration;
94
+ $[4] = t2;
95
+ } else t2 = $[4];
96
+ return t2;
79
97
  };
80
98
  //#endregion
81
99
  export { useScrollLock };
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollLock.js","names":[],"sources":["../../../src/primitives/reasoning/useScrollLock.ts"],"sourcesContent":["\"use client\";\n\nimport { type RefObject, useCallback, useEffect, useRef } from \"react\";\n\n/**\n * Locks scroll position during collapsible/height animations and hides scrollbar.\n *\n * This utility prevents page jumps when content height changes during animations,\n * providing a smooth user experience. It finds the nearest scrollable ancestor and\n * temporarily locks its scroll position while the animation completes.\n *\n * - Prevents forced reflows: no layout reads, mutations scoped to scrollable parent only\n * - Reactive: only intercepts scroll events when browser actually adjusts\n * - Cleans up automatically after animation duration\n *\n * @param animatedElementRef - Ref to the animated element\n * @param animationDuration - Lock duration in milliseconds\n * @returns Function to activate the scroll lock\n *\n * @example\n * ```tsx\n * const collapsibleRef = useRef<HTMLDivElement>(null);\n * const lockScroll = useScrollLock(collapsibleRef, 200);\n *\n * const handleCollapse = () => {\n * lockScroll(); // Lock scroll before collapsing\n * setIsOpen(false);\n * };\n * ```\n */\nexport const useScrollLock = <T extends HTMLElement = HTMLElement>(\n animatedElementRef: RefObject<T | null>,\n animationDuration: number,\n) => {\n const scrollContainerRef = useRef<HTMLElement | null>(null);\n const cleanupRef = useRef<(() => void) | null>(null);\n\n useEffect(() => {\n return () => {\n cleanupRef.current?.();\n };\n }, []);\n\n const lockScroll = useCallback(() => {\n cleanupRef.current?.();\n\n (function findScrollableAncestor() {\n if (scrollContainerRef.current || !animatedElementRef.current) return;\n\n let el: HTMLElement | null = animatedElementRef.current;\n while (el) {\n const { overflowY } = getComputedStyle(el);\n if (overflowY === \"scroll\" || overflowY === \"auto\") {\n scrollContainerRef.current = el;\n break;\n }\n el = el.parentElement;\n }\n })();\n\n const scrollContainer = scrollContainerRef.current;\n if (!scrollContainer) return;\n\n const scrollPosition = scrollContainer.scrollTop;\n const scrollbarWidth = scrollContainer.style.scrollbarWidth;\n\n // Hiding the scrollbar collapses its gutter on classic scrollbars, which\n // shifts centered content horizontally; compensate with padding on the\n // side the scrollbar occupies (the left side in RTL).\n const computed = getComputedStyle(scrollContainer);\n const paddingSide =\n computed.direction === \"rtl\" ? \"paddingLeft\" : \"paddingRight\";\n const previousPadding = scrollContainer.style[paddingSide];\n const scrollbarSize =\n scrollContainer.offsetWidth -\n scrollContainer.clientWidth -\n parseFloat(computed.borderLeftWidth) -\n parseFloat(computed.borderRightWidth);\n\n scrollContainer.style.scrollbarWidth = \"none\";\n if (scrollbarSize > 0) {\n scrollContainer.style[paddingSide] = `${\n parseFloat(computed[paddingSide]) + scrollbarSize\n }px`;\n }\n\n const restoreStyles = () => {\n scrollContainer.style.scrollbarWidth = scrollbarWidth;\n scrollContainer.style[paddingSide] = previousPadding;\n };\n\n const resetPosition = () => (scrollContainer.scrollTop = scrollPosition);\n scrollContainer.addEventListener(\"scroll\", resetPosition);\n\n const timeoutId = setTimeout(() => {\n scrollContainer.removeEventListener(\"scroll\", resetPosition);\n restoreStyles();\n cleanupRef.current = null;\n }, animationDuration);\n\n cleanupRef.current = () => {\n clearTimeout(timeoutId);\n scrollContainer.removeEventListener(\"scroll\", resetPosition);\n restoreStyles();\n };\n }, [animationDuration, animatedElementRef]);\n\n return lockScroll;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAa,iBACX,oBACA,sBACG;CACH,MAAM,qBAAqB,OAA2B,IAAI;CAC1D,MAAM,aAAa,OAA4B,IAAI;CAEnD,gBAAgB;EACd,aAAa;GACX,WAAW,UAAU;EACvB;CACF,GAAG,CAAC,CAAC;CAkEL,OAhEmB,kBAAkB;EACnC,WAAW,UAAU;EAErB,CAAC,SAAS,yBAAyB;GACjC,IAAI,mBAAmB,WAAW,CAAC,mBAAmB,SAAS;GAE/D,IAAI,KAAyB,mBAAmB;GAChD,OAAO,IAAI;IACT,MAAM,EAAE,cAAc,iBAAiB,EAAE;IACzC,IAAI,cAAc,YAAY,cAAc,QAAQ;KAClD,mBAAmB,UAAU;KAC7B;IACF;IACA,KAAK,GAAG;GACV;EACF,EAAA,CAAG;EAEH,MAAM,kBAAkB,mBAAmB;EAC3C,IAAI,CAAC,iBAAiB;EAEtB,MAAM,iBAAiB,gBAAgB;EACvC,MAAM,iBAAiB,gBAAgB,MAAM;EAK7C,MAAM,WAAW,iBAAiB,eAAe;EACjD,MAAM,cACJ,SAAS,cAAc,QAAQ,gBAAgB;EACjD,MAAM,kBAAkB,gBAAgB,MAAM;EAC9C,MAAM,gBACJ,gBAAgB,cAChB,gBAAgB,cAChB,WAAW,SAAS,eAAe,IACnC,WAAW,SAAS,gBAAgB;EAEtC,gBAAgB,MAAM,iBAAiB;EACvC,IAAI,gBAAgB,GAClB,gBAAgB,MAAM,eAAe,GACnC,WAAW,SAAS,YAAY,IAAI,cACrC;EAGH,MAAM,sBAAsB;GAC1B,gBAAgB,MAAM,iBAAiB;GACvC,gBAAgB,MAAM,eAAe;EACvC;EAEA,MAAM,sBAAuB,gBAAgB,YAAY;EACzD,gBAAgB,iBAAiB,UAAU,aAAa;EAExD,MAAM,YAAY,iBAAiB;GACjC,gBAAgB,oBAAoB,UAAU,aAAa;GAC3D,cAAc;GACd,WAAW,UAAU;EACvB,GAAG,iBAAiB;EAEpB,WAAW,gBAAgB;GACzB,aAAa,SAAS;GACtB,gBAAgB,oBAAoB,UAAU,aAAa;GAC3D,cAAc;EAChB;CACF,GAAG,CAAC,mBAAmB,kBAAkB,CAEzB;AAClB"}
1
+ {"version":3,"file":"useScrollLock.js","names":["c","_c","RefObject","useCallback","useEffect","useRef","useScrollLock","animatedElementRef","animationDuration","$","scrollContainerRef","cleanupRef","t0","t1","Symbol","for","current","t2","findScrollableAncestor","el","overflowY","getComputedStyle","parentElement","scrollContainer","scrollPosition","scrollTop","scrollbarWidth","style","computed","paddingSide","direction","previousPadding","scrollbarSize","offsetWidth","clientWidth","parseFloat","borderLeftWidth","borderRightWidth","restoreStyles","resetPosition","addEventListener","timeoutId","setTimeout","removeEventListener","clearTimeout","lockScroll"],"sources":["../../../src/primitives/reasoning/useScrollLock.ts"],"sourcesContent":["\"use client\";\n\nimport { type RefObject, useCallback, useEffect, useRef } from \"react\";\n\n/**\n * Locks scroll position during collapsible/height animations and hides scrollbar.\n *\n * This utility prevents page jumps when content height changes during animations,\n * providing a smooth user experience. It finds the nearest scrollable ancestor and\n * temporarily locks its scroll position while the animation completes.\n *\n * - Prevents forced reflows: no layout reads, mutations scoped to scrollable parent only\n * - Reactive: only intercepts scroll events when browser actually adjusts\n * - Cleans up automatically after animation duration\n *\n * @param animatedElementRef - Ref to the animated element\n * @param animationDuration - Lock duration in milliseconds\n * @returns Function to activate the scroll lock\n *\n * @example\n * ```tsx\n * const collapsibleRef = useRef<HTMLDivElement>(null);\n * const lockScroll = useScrollLock(collapsibleRef, 200);\n *\n * const handleCollapse = () => {\n * lockScroll(); // Lock scroll before collapsing\n * setIsOpen(false);\n * };\n * ```\n */\nexport const useScrollLock = <T extends HTMLElement = HTMLElement>(\n animatedElementRef: RefObject<T | null>,\n animationDuration: number,\n) => {\n const scrollContainerRef = useRef<HTMLElement | null>(null);\n const cleanupRef = useRef<(() => void) | null>(null);\n\n useEffect(() => {\n return () => {\n cleanupRef.current?.();\n };\n }, []);\n\n const lockScroll = useCallback(() => {\n cleanupRef.current?.();\n\n (function findScrollableAncestor() {\n if (scrollContainerRef.current || !animatedElementRef.current) return;\n\n let el: HTMLElement | null = animatedElementRef.current;\n while (el) {\n const { overflowY } = getComputedStyle(el);\n if (overflowY === \"scroll\" || overflowY === \"auto\") {\n scrollContainerRef.current = el;\n break;\n }\n el = el.parentElement;\n }\n })();\n\n const scrollContainer = scrollContainerRef.current;\n if (!scrollContainer) return;\n\n const scrollPosition = scrollContainer.scrollTop;\n const scrollbarWidth = scrollContainer.style.scrollbarWidth;\n\n // Hiding the scrollbar collapses its gutter on classic scrollbars, which\n // shifts centered content horizontally; compensate with padding on the\n // side the scrollbar occupies (the left side in RTL).\n const computed = getComputedStyle(scrollContainer);\n const paddingSide =\n computed.direction === \"rtl\" ? \"paddingLeft\" : \"paddingRight\";\n const previousPadding = scrollContainer.style[paddingSide];\n const scrollbarSize =\n scrollContainer.offsetWidth -\n scrollContainer.clientWidth -\n parseFloat(computed.borderLeftWidth) -\n parseFloat(computed.borderRightWidth);\n\n scrollContainer.style.scrollbarWidth = \"none\";\n if (scrollbarSize > 0) {\n scrollContainer.style[paddingSide] = `${\n parseFloat(computed[paddingSide]) + scrollbarSize\n }px`;\n }\n\n const restoreStyles = () => {\n scrollContainer.style.scrollbarWidth = scrollbarWidth;\n scrollContainer.style[paddingSide] = previousPadding;\n };\n\n const resetPosition = () => (scrollContainer.scrollTop = scrollPosition);\n scrollContainer.addEventListener(\"scroll\", resetPosition);\n\n const timeoutId = setTimeout(() => {\n scrollContainer.removeEventListener(\"scroll\", resetPosition);\n restoreStyles();\n cleanupRef.current = null;\n }, animationDuration);\n\n cleanupRef.current = () => {\n clearTimeout(timeoutId);\n scrollContainer.removeEventListener(\"scroll\", resetPosition);\n restoreStyles();\n };\n }, [animationDuration, animatedElementRef]);\n\n return lockScroll;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAaM,iBAAgBC,oBAAAC,sBAAA;CAAA,MAAAC,IAAAR,EAAA,CAAA;CAI3B,MAAAS,qBAA2BL,OAA2B,IAAI;CAC1D,MAAAM,aAAmBN,OAA4B,IAAI;CAAE,IAAAO;CAAA,IAAAC;CAAA,IAAAJ,EAAA,OAAAK,OAAAC,IAAA,2BAAA,GAAA;EAE3CH,iBACD;GACLD,WAAUK,UAAW;EAAC;EAEvBH,KAAA,CAAA;EAAEJ,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAA;EAAAD,KAAAH,EAAA;EAAAI,KAAAJ,EAAA;CAAA;CAJLL,UAAUQ,IAIPC,EAAE;CAAC,IAAAI;CAAA,IAAAR,EAAA,OAAAF,sBAAAE,EAAA,OAAAD,mBAAA;EAEyBS,WAAA;GAC7BN,WAAUK,UAAW;GAErB,CAAC,SAAAE,yBAAA;IACC,IAAIR,mBAAkBM,WAAlB,CAA+BT,mBAAkBS,SAAQ;IAE7D,IAAAG,KAA6BZ,mBAAkBS;IAC/C,OAAOG,IAAE;KACP,MAAA,EAAAC,cAAsBC,iBAAiBF,EAAE;KACzC,IAAIC,cAAc,YAAYA,cAAc,QAAM;MAChDV,mBAAkBM,UAAWG;MAC7B;KAAM;KAERA,KAAKA,GAAEG;IAAL;GACH,EAAA,CACA;GAEH,MAAAC,kBAAwBb,mBAAkBM;GAC1C,IAAI,CAACO,iBAAe;GAEpB,MAAAC,iBAAuBD,gBAAeE;GACtC,MAAAC,iBAAuBH,gBAAeI,MAAMD;GAK5C,MAAAE,WAAiBP,iBAAiBE,eAAe;GACjD,MAAAM,cACED,SAAQE,cAAe,QAAvB,gBAAA;GACF,MAAAC,kBAAwBR,gBAAeI,MAAOE;GAC9C,MAAAG,gBACET,gBAAeU,cACfV,gBAAeW,cACfC,WAAWP,SAAQQ,eAAgB,IACnCD,WAAWP,SAAQS,gBAAiB;GAEtCd,gBAAeI,MAAMD,iBAAkB;GACvC,IAAIM,gBAAgB,GAClBT,gBAAeI,MAAOE,eAAe,GACnCM,WAAWP,SAASC,YAAY,IAAIG,cAAa;GAIrD,MAAAM,sBAAsB;IACpBf,gBAAeI,MAAMD,iBAAkBA;IACvCH,gBAAeI,MAAOE,eAAeE;GAAH;GAGpC,MAAAQ,sBAA6BhB,gBAAeE,YAAaD;GACzDD,gBAAeiB,iBAAkB,UAAUD,aAAa;GAExD,MAAAE,YAAkBC,iBAAW;IAC3BnB,gBAAeoB,oBAAqB,UAAUJ,aAAa;IAC3DD,cAAc;IACd3B,WAAUK,UAAW;GAAH,GACjBR,iBAAiB;GAEpBG,WAAUK,gBAAW;IACnB4B,aAAaH,SAAS;IACtBlB,gBAAeoB,oBAAqB,UAAUJ,aAAa;IAC3DD,cAAc;GAAC;EAHC;EAKnB7B,EAAA,KAAAF;EAAAE,EAAA,KAAAD;EAAAC,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAA2C,OAErCoC;AAAU"}
@@ -2,7 +2,8 @@
2
2
  import { Primitive } from "../../utils/Primitive.js";
3
3
  import { useSelectionToolbarInfo } from "./SelectionToolbarRoot.js";
4
4
  import { useAui } from "@assistant-ui/store";
5
- import { forwardRef, useCallback } from "@assistant-ui/tap/react-shim";
5
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
6
+ import { forwardRef } from "@assistant-ui/tap/react-shim";
6
7
  import { jsx } from "react/jsx-runtime";
7
8
  import { composeEventHandlers } from "@radix-ui/primitive";
8
9
  //#region src/primitives/selectionToolbar/SelectionToolbarQuote.tsx
@@ -20,24 +21,63 @@ import { composeEventHandlers } from "@radix-ui/primitive";
20
21
  * </SelectionToolbarPrimitive.Quote>
21
22
  * ```
22
23
  */
23
- const SelectionToolbarPrimitiveQuote = forwardRef(({ onClick, disabled, ...props }, forwardedRef) => {
24
+ const SelectionToolbarPrimitiveQuote = forwardRef((t0, forwardedRef) => {
25
+ const $ = c(15);
26
+ let disabled;
27
+ let onClick;
28
+ let props;
29
+ if ($[0] !== t0) {
30
+ ({onClick, disabled, ...props} = t0);
31
+ $[0] = t0;
32
+ $[1] = disabled;
33
+ $[2] = onClick;
34
+ $[3] = props;
35
+ } else {
36
+ disabled = $[1];
37
+ onClick = $[2];
38
+ props = $[3];
39
+ }
24
40
  const aui = useAui();
25
41
  const info = useSelectionToolbarInfo();
26
- const handleClick = useCallback(() => {
27
- if (!info) return;
28
- aui.thread().composer().setQuote({
29
- text: info.text,
30
- messageId: info.messageId
42
+ let t1;
43
+ if ($[4] !== aui || $[5] !== info) {
44
+ t1 = () => {
45
+ if (!info) return;
46
+ aui.thread().composer().setQuote({
47
+ text: info.text,
48
+ messageId: info.messageId
49
+ });
50
+ window.getSelection()?.removeAllRanges();
51
+ };
52
+ $[4] = aui;
53
+ $[5] = info;
54
+ $[6] = t1;
55
+ } else t1 = $[6];
56
+ const handleClick = t1;
57
+ const t2 = disabled || !info;
58
+ let t3;
59
+ if ($[7] !== handleClick || $[8] !== onClick) {
60
+ t3 = composeEventHandlers(onClick, handleClick);
61
+ $[7] = handleClick;
62
+ $[8] = onClick;
63
+ $[9] = t3;
64
+ } else t3 = $[9];
65
+ let t4;
66
+ if ($[10] !== forwardedRef || $[11] !== props || $[12] !== t2 || $[13] !== t3) {
67
+ t4 = /* @__PURE__ */ jsx(Primitive.button, {
68
+ type: "button",
69
+ ...props,
70
+ ref: forwardedRef,
71
+ disabled: t2,
72
+ onClick: t3
31
73
  });
32
- window.getSelection()?.removeAllRanges();
33
- }, [aui, info]);
34
- return /* @__PURE__ */ jsx(Primitive.button, {
35
- type: "button",
36
- ...props,
37
- ref: forwardedRef,
38
- disabled: disabled || !info,
39
- onClick: composeEventHandlers(onClick, handleClick)
40
- });
74
+ $[10] = forwardedRef;
75
+ $[11] = props;
76
+ $[12] = t2;
77
+ $[13] = t3;
78
+ $[14] = t4;
79
+ } else t4 = $[14];
80
+ return t4;
41
81
  });
42
82
  SelectionToolbarPrimitiveQuote.displayName = "SelectionToolbarPrimitive.Quote";
43
83
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionToolbarQuote.js","names":[],"sources":["../../../src/primitives/selectionToolbar/SelectionToolbarQuote.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n type ComponentRef,\n forwardRef,\n useCallback,\n} from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useSelectionToolbarInfo } from \"./SelectionToolbarRoot\";\n\nexport namespace SelectionToolbarPrimitiveQuote {\n export type Element = ComponentRef<typeof Primitive.button>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.button>;\n}\n\n/**\n * A button that quotes the currently selected text.\n *\n * Must be placed inside `SelectionToolbarPrimitive.Root`. Reads the\n * selection info from context (captured by the Root), sets it as a\n * quote in the thread composer, and clears the selection.\n *\n * @example\n * ```tsx\n * <SelectionToolbarPrimitive.Quote>\n * <QuoteIcon /> Quote\n * </SelectionToolbarPrimitive.Quote>\n * ```\n */\nexport const SelectionToolbarPrimitiveQuote = forwardRef<\n SelectionToolbarPrimitiveQuote.Element,\n SelectionToolbarPrimitiveQuote.Props\n>(({ onClick, disabled, ...props }, forwardedRef) => {\n const aui = useAui();\n const info = useSelectionToolbarInfo();\n\n const handleClick = useCallback(() => {\n if (!info) return;\n\n aui.thread().composer().setQuote({\n text: info.text,\n messageId: info.messageId,\n });\n\n window.getSelection()?.removeAllRanges();\n }, [aui, info]);\n\n return (\n <Primitive.button\n type=\"button\"\n {...props}\n ref={forwardedRef}\n disabled={disabled || !info}\n onClick={composeEventHandlers(onClick, handleClick)}\n />\n );\n});\n\nSelectionToolbarPrimitiveQuote.displayName = \"SelectionToolbarPrimitive.Quote\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgCA,MAAa,iCAAiC,YAG3C,EAAE,SAAS,UAAU,GAAG,SAAS,iBAAiB;CACnD,MAAM,MAAM,OAAO;CACnB,MAAM,OAAO,wBAAwB;CAErC,MAAM,cAAc,kBAAkB;EACpC,IAAI,CAAC,MAAM;EAEX,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;GAC/B,MAAM,KAAK;GACX,WAAW,KAAK;EAClB,CAAC;EAED,OAAO,aAAa,CAAC,EAAE,gBAAgB;CACzC,GAAG,CAAC,KAAK,IAAI,CAAC;CAEd,OACE,oBAAC,UAAU,QAAX;EACE,MAAK;EACL,GAAI;EACJ,KAAK;EACL,UAAU,YAAY,CAAC;EACvB,SAAS,qBAAqB,SAAS,WAAW;CACnD,CAAA;AAEL,CAAC;AAED,+BAA+B,cAAc"}
1
+ {"version":3,"file":"SelectionToolbarQuote.js","names":["c","_c","Primitive","composeEventHandlers","ComponentPropsWithoutRef","ComponentRef","forwardRef","useCallback","useAui","useSelectionToolbarInfo","SelectionToolbarPrimitiveQuote","Element","button","Props","t0","forwardedRef","$","disabled","onClick","props","aui","info","t1","thread","composer","setQuote","text","messageId","window","getSelection","removeAllRanges","handleClick","t2","t3","t4","displayName"],"sources":["../../../src/primitives/selectionToolbar/SelectionToolbarQuote.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n type ComponentRef,\n forwardRef,\n useCallback,\n} from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useSelectionToolbarInfo } from \"./SelectionToolbarRoot\";\n\nexport namespace SelectionToolbarPrimitiveQuote {\n export type Element = ComponentRef<typeof Primitive.button>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.button>;\n}\n\n/**\n * A button that quotes the currently selected text.\n *\n * Must be placed inside `SelectionToolbarPrimitive.Root`. Reads the\n * selection info from context (captured by the Root), sets it as a\n * quote in the thread composer, and clears the selection.\n *\n * @example\n * ```tsx\n * <SelectionToolbarPrimitive.Quote>\n * <QuoteIcon /> Quote\n * </SelectionToolbarPrimitive.Quote>\n * ```\n */\nexport const SelectionToolbarPrimitiveQuote = forwardRef<\n SelectionToolbarPrimitiveQuote.Element,\n SelectionToolbarPrimitiveQuote.Props\n>(({ onClick, disabled, ...props }, forwardedRef) => {\n const aui = useAui();\n const info = useSelectionToolbarInfo();\n\n const handleClick = useCallback(() => {\n if (!info) return;\n\n aui.thread().composer().setQuote({\n text: info.text,\n messageId: info.messageId,\n });\n\n window.getSelection()?.removeAllRanges();\n }, [aui, info]);\n\n return (\n <Primitive.button\n type=\"button\"\n {...props}\n ref={forwardedRef}\n disabled={disabled || !info}\n onClick={composeEventHandlers(onClick, handleClick)}\n />\n );\n});\n\nSelectionToolbarPrimitiveQuote.displayName = \"SelectionToolbarPrimitive.Quote\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAgCA,MAAaU,iCAAiCJ,YAG5CQ,IAAAC,iBAAA;CAAA,MAAAC,IAAAf,EAAA,EAAA;CAAA,IAAAgB;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAH,EAAA,OAAAF,IAAA;EAAC,CAAA,CAAAI,SAAAD,aAAAE,SAAAL;EAA+BE,EAAA,KAAAF;EAAAE,EAAA,KAAAC;EAAAD,EAAA,KAAAE;EAAAF,EAAA,KAAAG;CAAA,OAAA;EAAAF,WAAAD,EAAA;EAAAE,UAAAF,EAAA;EAAAG,QAAAH,EAAA;CAAA;CAChC,MAAAI,MAAYZ,OAAO;CACnB,MAAAa,OAAaZ,wBAAwB;CAAE,IAAAa;CAAA,IAAAN,EAAA,OAAAI,OAAAJ,EAAA,OAAAK,MAAA;EAEPC,WAAA;GAC9B,IAAI,CAACD,MAAI;GAETD,IAAGG,OAAQ,CAAC,CAAAC,SAAU,CAAC,CAAAC,SAAU;IAAAC,MACzBL,KAAIK;IAAKC,WACJN,KAAIM;GACjB,CAAC;GAEDC,OAAMC,aAA+B,CAAC,EAAAC,gBAAC;EAAC;EACzCd,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CATD,MAAAe,cAAoBT;CAgBN,MAAAU,KAAAf,YAAA,CAAaI;CAAI,IAAAY;CAAA,IAAAjB,EAAA,OAAAe,eAAAf,EAAA,OAAAE,SAAA;EAClBe,KAAA9B,qBAAqBe,SAASa,WAAW;EAACf,EAAA,KAAAe;EAAAf,EAAA,KAAAE;EAAAF,EAAA,KAAAiB;CAAA,OAAAA,KAAAjB,EAAA;CAAA,IAAAkB;CAAA,IAAAlB,EAAA,QAAAD,gBAAAC,EAAA,QAAAG,SAAAH,EAAA,QAAAgB,MAAAhB,EAAA,QAAAiB,IAAA;EALrDC,KAAA,oBAAA,UAAA,QAAA;GACO,MAAA;GAAQ,GACTf;GACCJ,KAAAA;GACK,UAAAiB;GACD,SAAAC;EAA0C,CAAA;EACnDjB,EAAA,MAAAD;EAAAC,EAAA,MAAAG;EAAAH,EAAA,MAAAgB;EAAAhB,EAAA,MAAAiB;EAAAjB,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,OANFkB;AAME,CAEL;AAEDxB,+BAA+ByB,cAAc"}