@assistant-ui/react 0.14.26 → 0.14.27

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 (425) hide show
  1. package/README.md +1 -1
  2. package/dist/augmentations.d.ts.map +1 -1
  3. package/dist/client/ExternalThread.d.ts +6 -4
  4. package/dist/client/ExternalThread.d.ts.map +1 -1
  5. package/dist/client/ExternalThread.js +2 -1
  6. package/dist/client/ExternalThread.js.map +1 -1
  7. package/dist/client/InMemoryThreadList.d.ts +0 -1
  8. package/dist/client/InMemoryThreadList.d.ts.map +1 -1
  9. package/dist/client/InMemoryThreadList.js +4 -1
  10. package/dist/client/InMemoryThreadList.js.map +1 -1
  11. package/dist/client/SingleThreadList.d.ts +0 -1
  12. package/dist/client/SingleThreadList.d.ts.map +1 -1
  13. package/dist/context/ReadonlyStore.d.ts +0 -1
  14. package/dist/context/ReadonlyStore.d.ts.map +1 -1
  15. package/dist/context/providers/MessageProvider.d.ts +0 -1
  16. package/dist/context/providers/MessageProvider.d.ts.map +1 -1
  17. package/dist/context/providers/ThreadViewportProvider.d.ts +0 -1
  18. package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -1
  19. package/dist/context/react/ThreadViewportContext.d.ts +15 -16
  20. package/dist/context/react/ThreadViewportContext.d.ts.map +1 -1
  21. package/dist/context/react/utils/createContextHook.d.ts +0 -1
  22. package/dist/context/react/utils/createContextHook.d.ts.map +1 -1
  23. package/dist/context/react/utils/createContextStoreHook.d.ts +2 -3
  24. package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
  25. package/dist/context/react/utils/createStateHookForRuntime.d.ts +0 -1
  26. package/dist/context/react/utils/createStateHookForRuntime.d.ts.map +1 -1
  27. package/dist/context/react/utils/ensureBinding.d.ts.map +1 -1
  28. package/dist/context/react/utils/useRuntimeState.d.ts +0 -1
  29. package/dist/context/react/utils/useRuntimeState.d.ts.map +1 -1
  30. package/dist/context/stores/ThreadViewport.d.ts +25 -15
  31. package/dist/context/stores/ThreadViewport.d.ts.map +1 -1
  32. package/dist/devtools/DevToolsHooks.d.ts +0 -1
  33. package/dist/devtools/DevToolsHooks.d.ts.map +1 -1
  34. package/dist/hooks/useMessageQuote.d.ts +0 -1
  35. package/dist/hooks/useMessageQuote.d.ts.map +1 -1
  36. package/dist/hooks/useMessageTiming.d.ts +0 -1
  37. package/dist/hooks/useMessageTiming.d.ts.map +1 -1
  38. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -1
  39. package/dist/index.d.ts +5 -3
  40. package/dist/internal.d.ts +0 -2
  41. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +0 -1
  42. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
  43. package/dist/legacy-runtime/cloud/auiV0.d.ts +11 -2
  44. package/dist/legacy-runtime/cloud/auiV0.d.ts.map +1 -1
  45. package/dist/legacy-runtime/cloud/auiV0.js +31 -2
  46. package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
  47. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts +1 -5
  48. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  49. package/dist/legacy-runtime/hooks/AssistantContext.d.ts +0 -1
  50. package/dist/legacy-runtime/hooks/AssistantContext.d.ts.map +1 -1
  51. package/dist/legacy-runtime/hooks/AttachmentContext.d.ts +12 -13
  52. package/dist/legacy-runtime/hooks/AttachmentContext.d.ts.map +1 -1
  53. package/dist/legacy-runtime/hooks/ComposerContext.d.ts +0 -1
  54. package/dist/legacy-runtime/hooks/ComposerContext.d.ts.map +1 -1
  55. package/dist/legacy-runtime/hooks/MessageContext.d.ts +0 -1
  56. package/dist/legacy-runtime/hooks/MessageContext.d.ts.map +1 -1
  57. package/dist/legacy-runtime/hooks/MessagePartContext.d.ts +0 -1
  58. package/dist/legacy-runtime/hooks/MessagePartContext.d.ts.map +1 -1
  59. package/dist/legacy-runtime/hooks/ThreadContext.d.ts +0 -1
  60. package/dist/legacy-runtime/hooks/ThreadContext.d.ts.map +1 -1
  61. package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts +0 -1
  62. package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts.map +1 -1
  63. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts +0 -1
  64. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts.map +1 -1
  65. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.d.ts +1 -4
  66. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
  67. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.d.ts.map +1 -1
  68. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts +0 -1
  69. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts.map +1 -1
  70. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts +0 -1
  71. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  72. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.d.ts +0 -1
  73. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.d.ts.map +1 -1
  74. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.d.ts.map +1 -1
  75. package/dist/mcp-apps/McpAppRenderer.d.ts +12 -7
  76. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  77. package/dist/mcp-apps/McpAppRenderer.js +29 -7
  78. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  79. package/dist/mcp-apps/McpAppsRemoteHost.d.ts +0 -1
  80. package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
  81. package/dist/mcp-apps/McpAppsRemoteHost.js +32 -1
  82. package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -1
  83. package/dist/mcp-apps/app-frame.d.ts +1 -12
  84. package/dist/mcp-apps/app-frame.d.ts.map +1 -1
  85. package/dist/mcp-apps/app-frame.js +1 -1
  86. package/dist/mcp-apps/app-frame.js.map +1 -1
  87. package/dist/mcp-apps/bridge.d.ts +0 -1
  88. package/dist/mcp-apps/bridge.d.ts.map +1 -1
  89. package/dist/mcp-apps/bridge.js +4 -3
  90. package/dist/mcp-apps/bridge.js.map +1 -1
  91. package/dist/mcp-apps/types.d.ts +10 -7
  92. package/dist/mcp-apps/types.d.ts.map +1 -1
  93. package/dist/mcp-apps/types.js.map +1 -1
  94. package/dist/mcp-apps/utils.d.ts +0 -1
  95. package/dist/mcp-apps/utils.d.ts.map +1 -1
  96. package/dist/model-context/frame/useAssistantFrameHost.d.ts +1 -6
  97. package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -1
  98. package/dist/model-context/makeAssistantVisible.d.ts +0 -1
  99. package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
  100. package/dist/primitives/actionBar/ActionBarCopy.d.ts +1 -4
  101. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  102. package/dist/primitives/actionBar/ActionBarEdit.d.ts +0 -1
  103. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
  104. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +1 -5
  105. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
  106. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +0 -1
  107. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -1
  108. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +0 -1
  109. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -1
  110. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts.map +1 -1
  111. package/dist/primitives/actionBar/ActionBarReload.d.ts +0 -1
  112. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
  113. package/dist/primitives/actionBar/ActionBarRoot.d.ts +0 -1
  114. package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
  115. package/dist/primitives/actionBar/ActionBarSpeak.d.ts +0 -1
  116. package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
  117. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +0 -1
  118. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
  119. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +1 -6
  120. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -1
  121. package/dist/primitives/actionBar.d.ts +0 -2
  122. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +0 -1
  123. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -1
  124. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +0 -1
  125. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -1
  126. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +0 -1
  127. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -1
  128. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +0 -1
  129. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -1
  130. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +0 -1
  131. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -1
  132. package/dist/primitives/actionBarMore/scope.d.ts +0 -1
  133. package/dist/primitives/actionBarMore/scope.d.ts.map +1 -1
  134. package/dist/primitives/actionBarMore.d.ts +0 -2
  135. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +6 -4
  136. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -1
  137. package/dist/primitives/assistantModal/AssistantModalAnchor.js +2 -2
  138. package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
  139. package/dist/primitives/assistantModal/AssistantModalContent.d.ts +4 -2
  140. package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
  141. package/dist/primitives/assistantModal/AssistantModalContent.js +2 -1
  142. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  143. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +0 -1
  144. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
  145. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +6 -4
  146. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -1
  147. package/dist/primitives/assistantModal/AssistantModalTrigger.js +2 -2
  148. package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
  149. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts +14 -0
  150. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts.map +1 -0
  151. package/dist/primitives/assistantModal/popoverRenderPrimitives.js +10 -0
  152. package/dist/primitives/assistantModal/popoverRenderPrimitives.js.map +1 -0
  153. package/dist/primitives/assistantModal/scope.d.ts +0 -1
  154. package/dist/primitives/assistantModal/scope.d.ts.map +1 -1
  155. package/dist/primitives/assistantModal.d.ts +0 -2
  156. package/dist/primitives/attachment/AttachmentName.d.ts +0 -1
  157. package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -1
  158. package/dist/primitives/attachment/AttachmentRemove.d.ts +0 -1
  159. package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -1
  160. package/dist/primitives/attachment/AttachmentRoot.d.ts +0 -1
  161. package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
  162. package/dist/primitives/attachment/AttachmentThumb.d.ts +0 -1
  163. package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -1
  164. package/dist/primitives/attachment.d.ts +0 -2
  165. package/dist/primitives/branchPicker/BranchPickerCount.d.ts +0 -1
  166. package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -1
  167. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +0 -1
  168. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  169. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +0 -1
  170. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -1
  171. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +0 -1
  172. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  173. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +0 -1
  174. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
  175. package/dist/primitives/branchPicker.d.ts +0 -2
  176. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +0 -1
  177. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
  178. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +0 -1
  179. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -1
  180. package/dist/primitives/chainOfThought.d.ts +0 -2
  181. package/dist/primitives/composer/ComposerAddAttachment.d.ts +5 -6
  182. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
  183. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +0 -1
  184. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
  185. package/dist/primitives/composer/ComposerCancel.d.ts +0 -1
  186. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
  187. package/dist/primitives/composer/ComposerCompactContext.d.ts +9 -0
  188. package/dist/primitives/composer/ComposerCompactContext.d.ts.map +1 -0
  189. package/dist/primitives/composer/ComposerCompactContext.js +11 -0
  190. package/dist/primitives/composer/ComposerCompactContext.js.map +1 -0
  191. package/dist/primitives/composer/ComposerDictate.d.ts +0 -1
  192. package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -1
  193. package/dist/primitives/composer/ComposerDictationTranscript.d.ts +0 -1
  194. package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -1
  195. package/dist/primitives/composer/ComposerInput.d.ts +0 -1
  196. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  197. package/dist/primitives/composer/ComposerInput.js +17 -2
  198. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  199. package/dist/primitives/composer/ComposerInputPluginContext.d.ts +4 -3
  200. package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
  201. package/dist/primitives/composer/ComposerQuote.d.ts +0 -1
  202. package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -1
  203. package/dist/primitives/composer/ComposerRoot.d.ts +22 -3
  204. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
  205. package/dist/primitives/composer/ComposerRoot.js +63 -30
  206. package/dist/primitives/composer/ComposerRoot.js.map +1 -1
  207. package/dist/primitives/composer/ComposerSend.d.ts +0 -1
  208. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  209. package/dist/primitives/composer/ComposerStopDictation.d.ts +0 -1
  210. package/dist/primitives/composer/ComposerStopDictation.d.ts.map +1 -1
  211. package/dist/primitives/composer/trigger/TriggerPopover.d.ts +10 -5
  212. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
  213. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +5 -3
  214. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -1
  215. package/dist/primitives/composer/trigger/TriggerPopoverAction.js +3 -2
  216. package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -1
  217. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts +0 -1
  218. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -1
  219. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts +0 -1
  220. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -1
  221. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +3 -2
  222. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -1
  223. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts +0 -1
  224. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -1
  225. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +10 -6
  226. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
  227. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +8 -5
  228. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -1
  229. package/dist/primitives/composer/trigger/index.d.ts +0 -1
  230. package/dist/primitives/composer/trigger/index.d.ts.map +1 -1
  231. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +5 -2
  232. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -1
  233. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +7 -4
  234. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -1
  235. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +13 -7
  236. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
  237. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +7 -4
  238. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
  239. package/dist/primitives/composer/useComposerInputState.d.ts.map +1 -1
  240. package/dist/primitives/composer.d.ts +0 -2
  241. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +0 -1
  242. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -1
  243. package/dist/primitives/error/ErrorMessage.d.ts +0 -1
  244. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
  245. package/dist/primitives/error/ErrorRoot.d.ts +0 -1
  246. package/dist/primitives/error/ErrorRoot.d.ts.map +1 -1
  247. package/dist/primitives/error.d.ts +0 -2
  248. package/dist/primitives/message/MessageError.d.ts +0 -1
  249. package/dist/primitives/message/MessageError.d.ts.map +1 -1
  250. package/dist/primitives/message/MessageIf.d.ts +0 -1
  251. package/dist/primitives/message/MessageIf.d.ts.map +1 -1
  252. package/dist/primitives/message/MessageParts.d.ts +0 -1
  253. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  254. package/dist/primitives/message/MessagePartsGrouped.d.ts +25 -12
  255. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  256. package/dist/primitives/message/MessageRoot.d.ts +0 -1
  257. package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
  258. package/dist/primitives/message.d.ts +0 -2
  259. package/dist/primitives/messagePart/MessagePartImage.d.ts +0 -1
  260. package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -1
  261. package/dist/primitives/messagePart/MessagePartText.d.ts +0 -1
  262. package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
  263. package/dist/primitives/messagePart/useMessagePartData.d.ts +0 -1
  264. package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -1
  265. package/dist/primitives/messagePart/useMessagePartFile.d.ts +0 -1
  266. package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -1
  267. package/dist/primitives/messagePart/useMessagePartImage.d.ts +0 -1
  268. package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -1
  269. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +0 -1
  270. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -1
  271. package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -1
  272. package/dist/primitives/messagePart/useMessagePartText.d.ts +0 -1
  273. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -1
  274. package/dist/primitives/messagePart.d.ts +0 -2
  275. package/dist/primitives/queueItem/QueueItemRemove.d.ts +0 -1
  276. package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -1
  277. package/dist/primitives/queueItem/QueueItemSteer.d.ts +0 -1
  278. package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -1
  279. package/dist/primitives/queueItem/QueueItemText.d.ts +0 -1
  280. package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -1
  281. package/dist/primitives/queueItem.d.ts +0 -2
  282. package/dist/primitives/reasoning/useScrollLock.d.ts +0 -1
  283. package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -1
  284. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +0 -1
  285. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -1
  286. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +0 -1
  287. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -1
  288. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +2 -1
  289. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  290. package/dist/primitives/selectionToolbar.d.ts +0 -2
  291. package/dist/primitives/suggestion/SuggestionDescription.d.ts +0 -1
  292. package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -1
  293. package/dist/primitives/suggestion/SuggestionTitle.d.ts +0 -1
  294. package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -1
  295. package/dist/primitives/suggestion/SuggestionTrigger.d.ts +1 -5
  296. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
  297. package/dist/primitives/suggestion.d.ts +0 -2
  298. package/dist/primitives/thread/ThreadEmpty.d.ts +0 -1
  299. package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -1
  300. package/dist/primitives/thread/ThreadIf.d.ts +0 -1
  301. package/dist/primitives/thread/ThreadIf.d.ts.map +1 -1
  302. package/dist/primitives/thread/ThreadRoot.d.ts +0 -1
  303. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  304. package/dist/primitives/thread/ThreadScrollToBottom.d.ts +1 -4
  305. package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -1
  306. package/dist/primitives/thread/ThreadSuggestion.d.ts +13 -14
  307. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  308. package/dist/primitives/thread/ThreadViewport.d.ts +0 -1
  309. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  310. package/dist/primitives/thread/ThreadViewportFooter.d.ts +0 -1
  311. package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
  312. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +2 -11
  313. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -1
  314. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -1
  315. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -1
  316. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +1 -4
  317. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -1
  318. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -1
  319. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -1
  320. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +1 -7
  321. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  322. package/dist/primitives/thread.d.ts +0 -2
  323. package/dist/primitives/threadList/ThreadListLoadMore.d.ts +0 -1
  324. package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -1
  325. package/dist/primitives/threadList/ThreadListNew.d.ts +0 -1
  326. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
  327. package/dist/primitives/threadList/ThreadListRoot.d.ts +0 -1
  328. package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -1
  329. package/dist/primitives/threadList.d.ts +0 -2
  330. package/dist/primitives/threadListFocusGroup.d.ts +0 -1
  331. package/dist/primitives/threadListFocusGroup.d.ts.map +1 -1
  332. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +0 -1
  333. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
  334. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +0 -1
  335. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
  336. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +0 -1
  337. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
  338. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +0 -1
  339. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
  340. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +0 -1
  341. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
  342. package/dist/primitives/threadListItem.d.ts +0 -2
  343. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +0 -1
  344. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -1
  345. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +0 -1
  346. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -1
  347. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +0 -1
  348. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -1
  349. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +0 -1
  350. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -1
  351. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +0 -1
  352. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -1
  353. package/dist/primitives/threadListItemMore/scope.d.ts +0 -1
  354. package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -1
  355. package/dist/primitives/threadListItemMore.d.ts +0 -2
  356. package/dist/sandbox-host/SandboxHost.d.ts +1 -10
  357. package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
  358. package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -1
  359. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
  360. package/dist/unstable/useComposerInput.d.ts +2 -2
  361. package/dist/unstable/useComposerInput.d.ts.map +1 -1
  362. package/dist/unstable/useComposerInputHistory.d.ts +2 -2
  363. package/dist/unstable/useComposerInputHistory.d.ts.map +1 -1
  364. package/dist/unstable/useLiveCompletionAdapter.d.ts +4 -3
  365. package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -1
  366. package/dist/unstable/useMentionAdapter.d.ts +19 -10
  367. package/dist/unstable/useMentionAdapter.d.ts.map +1 -1
  368. package/dist/unstable/useMessageStallDetection.d.ts +3 -1
  369. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -1
  370. package/dist/unstable/useSlashCommandAdapter.d.ts +6 -4
  371. package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
  372. package/dist/utils/Primitive.d.ts +0 -1
  373. package/dist/utils/Primitive.d.ts.map +1 -1
  374. package/dist/utils/RequireAtLeastOne.d.ts +1 -1
  375. package/dist/utils/RequireAtLeastOne.d.ts.map +1 -1
  376. package/dist/utils/createActionButton.d.ts +0 -1
  377. package/dist/utils/createActionButton.d.ts.map +1 -1
  378. package/dist/utils/getSelectionMessageId.d.ts.map +1 -1
  379. package/dist/utils/getSelectionMessageId.js +32 -7
  380. package/dist/utils/getSelectionMessageId.js.map +1 -1
  381. package/dist/utils/hooks/useManagedRef.d.ts.map +1 -1
  382. package/dist/utils/hooks/useMediaQuery.d.ts.map +1 -1
  383. package/dist/utils/hooks/useOnResizeContent.d.ts.map +1 -1
  384. package/dist/utils/hooks/useOnScrollToBottom.d.ts.map +1 -1
  385. package/dist/utils/hooks/useSizeHandle.d.ts +0 -1
  386. package/dist/utils/hooks/useSizeHandle.d.ts.map +1 -1
  387. package/dist/utils/smooth/SmoothContext.d.ts +71 -72
  388. package/dist/utils/smooth/SmoothContext.d.ts.map +1 -1
  389. package/dist/utils/smooth/useSmooth.d.ts +0 -1
  390. package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
  391. package/dist/utils/useToolArgsFieldStatus.d.ts +2 -2
  392. package/dist/utils/useToolArgsFieldStatus.d.ts.map +1 -1
  393. package/package.json +18 -18
  394. package/src/index.ts +3 -0
  395. package/src/legacy-runtime/cloud/auiV0.ts +72 -3
  396. package/src/mcp-apps/McpAppRenderer.test.tsx +141 -0
  397. package/src/mcp-apps/McpAppRenderer.tsx +48 -10
  398. package/src/mcp-apps/McpAppsRemoteHost.test.ts +126 -0
  399. package/src/mcp-apps/McpAppsRemoteHost.ts +40 -1
  400. package/src/mcp-apps/app-frame.tsx +3 -1
  401. package/src/mcp-apps/bridge.ts +1 -1
  402. package/src/mcp-apps/types.ts +16 -8
  403. package/src/primitives/assistantModal/AssistantModalAnchor.tsx +6 -8
  404. package/src/primitives/assistantModal/AssistantModalContent.tsx +5 -5
  405. package/src/primitives/assistantModal/AssistantModalTrigger.test.tsx +80 -0
  406. package/src/primitives/assistantModal/AssistantModalTrigger.tsx +6 -8
  407. package/src/primitives/assistantModal/popoverRenderPrimitives.ts +6 -0
  408. package/src/primitives/composer/ComposerCompactContext.tsx +13 -0
  409. package/src/primitives/composer/ComposerInput.tsx +35 -0
  410. package/src/primitives/composer/ComposerRoot.test.tsx +161 -0
  411. package/src/primitives/composer/ComposerRoot.tsx +37 -7
  412. package/src/tests/LocalThreadRuntimeCore.test.ts +4 -1
  413. package/src/tests/auiV0Encode.test.ts +134 -1
  414. package/src/utils/getSelectionMessageId.test.ts +175 -0
  415. package/src/utils/getSelectionMessageId.ts +57 -6
  416. package/dist/utils/json/is-json-equal.d.ts +0 -5
  417. package/dist/utils/json/is-json-equal.d.ts.map +0 -1
  418. package/dist/utils/json/is-json-equal.js +0 -26
  419. package/dist/utils/json/is-json-equal.js.map +0 -1
  420. package/dist/utils/json/is-json.d.ts +0 -10
  421. package/dist/utils/json/is-json.d.ts.map +0 -1
  422. package/dist/utils/json/is-json.js +0 -22
  423. package/dist/utils/json/is-json.js.map +0 -1
  424. package/src/utils/json/is-json-equal.ts +0 -48
  425. package/src/utils/json/is-json.ts +0 -58
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerInput.js","names":["composeEventHandlers","useComposedRefs","Slot","ClipboardEvent","KeyboardEvent","ReactElement","ReactNode","forwardRef","useCallback","useEffect","useRef","cloneElement","isValidElement","TextareaAutosize","TextareaAutosizeProps","useEscapeKeydown","useOnScrollToBottom","useMediaQuery","useAui","flushTapSync","useComposerInputPluginRegistryOptional","useComposerInputDisabled","useComposerInputValue","useTriggerPopoverAriaProps","TOUCH_PRIMARY_QUERY","ComposerPrimitiveInput","Element","HTMLTextAreaElement","BaseProps","asChild","render","cancelOnEscape","unstable_focusOnRunStart","unstable_focusOnScrollToBottom","unstable_focusOnThreadSwitched","unstable_insertNewlineOnTouchEnter","addAttachmentOnPaste","SubmitModeProps","submitMode","submitOnEnter","Props","autoFocus","disabled","disabledProp","onChange","onKeyDown","onPaste","onSelect","rest","forwardedRef","aui","pluginRegistry","declaredSubmitMode","isTouchPrimary","effectiveSubmitMode","value","isDisabled","textareaRef","ref","compositionRef","e","current","contains","target","Node","plugin","getPlugins","handleKeyDown","composer","getState","canCancel","cancel","preventDefault","handleKeyPress","nativeEvent","isComposing","key","threadState","thread","hasQueue","capabilities","queue","shiftKey","ctrlKey","metaKey","canSend","send","steer","isRunning","shouldSubmit","closest","requestSubmit","handlePaste","threadCapabilities","files","Array","from","clipboardData","attachments","length","Promise","all","map","file","addAttachment","error","console","autoFocusEnabled","focus","textarea","preventScroll","setSelectionRange","type","undefined","on","ariaComboboxProps","inputProps","name","const","React","ForwardedRef","ChangeEvent","isEditing","nativeIsComposing","setText","pos","selectionStart","setCursorPosition","onCompositionStart","CompositionEventHandler","onCompositionEnd","CompositionEvent","SyntheticEvent","renderChildren","children","props","Record","Component","Root","displayName"],"sources":["../../../src/primitives/composer/ComposerInput.tsx"],"sourcesContent":["\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"radix-ui\";\nimport {\n type ClipboardEvent,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n cloneElement,\n isValidElement,\n} from \"react\";\nimport TextareaAutosize, {\n type TextareaAutosizeProps,\n} from \"react-textarea-autosize\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\nimport { useMediaQuery } from \"../../utils/hooks/useMediaQuery\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { flushTapSync } from \"@assistant-ui/tap\";\nimport { useComposerInputPluginRegistryOptional } from \"./ComposerInputPluginContext\";\nimport {\n useComposerInputDisabled,\n useComposerInputValue,\n useTriggerPopoverAriaProps,\n} from \"./useComposerInputState\";\n\nconst TOUCH_PRIMARY_QUERY = \"(pointer: coarse) and (not (any-pointer: fine))\";\n\nexport namespace ComposerPrimitiveInput {\n export type Element = HTMLTextAreaElement;\n\n type BaseProps = {\n /**\n * Whether to render as a child component using Slot.\n * When true, the component will merge its props with its child.\n */\n asChild?: boolean | undefined;\n /**\n * A React element to use as the input container, with props merged in.\n */\n render?: ReactElement | undefined;\n /**\n * Whether to cancel message composition when Escape is pressed.\n * @default true\n */\n cancelOnEscape?: boolean | undefined;\n /**\n * Whether to automatically focus the input when a new run starts.\n * @default true\n */\n unstable_focusOnRunStart?: boolean | undefined;\n /**\n * Whether to automatically focus the input when scrolling to bottom.\n * @default true\n */\n unstable_focusOnScrollToBottom?: boolean | undefined;\n /**\n * Whether to automatically focus the input when switching threads.\n * @default true\n */\n unstable_focusOnThreadSwitched?: boolean | undefined;\n /**\n * Whether plain Enter on a touch-primary device should insert a newline\n * instead of submitting, detected via\n * `(pointer: coarse) and (not (any-pointer: fine))`. Only takes effect\n * when `submitMode` resolves to `\"enter\"`.\n * @default false\n */\n unstable_insertNewlineOnTouchEnter?: boolean | undefined;\n /**\n * Whether to automatically add pasted files as attachments.\n * @default true\n */\n addAttachmentOnPaste?: boolean | undefined;\n };\n\n type SubmitModeProps =\n | {\n /**\n * Controls how the Enter key submits messages.\n * - \"enter\": Plain Enter submits (Shift+Enter for newline)\n * - \"ctrlEnter\": Ctrl/Cmd+Enter submits (plain Enter for newline)\n * - \"none\": Keyboard submission disabled\n * @default \"enter\"\n */\n submitMode?: \"enter\" | \"ctrlEnter\" | \"none\" | undefined;\n /**\n * @deprecated Use `submitMode` instead\n * @ignore\n */\n submitOnEnter?: never;\n }\n | {\n submitMode?: never;\n /**\n * Whether to submit the message when Enter is pressed (without Shift).\n * @default true\n * @deprecated Use `submitMode` instead. Will be removed in a future version.\n */\n submitOnEnter?: boolean | undefined;\n };\n\n export type Props = TextareaAutosizeProps & BaseProps & SubmitModeProps;\n}\n\n/**\n * A text input component for composing messages.\n *\n * This component provides a rich text input experience with automatic resizing,\n * keyboard shortcuts, file paste support, and intelligent focus management.\n * It integrates with the composer context to manage message state and submission.\n *\n * When rendered inside `Unstable_TriggerPopoverRoot` and a popover is open, the\n * underlying `<textarea>` automatically receives `aria-controls`,\n * `aria-expanded`, `aria-haspopup`, and `aria-activedescendant` for the\n * combobox relationship. These computed attributes override user-provided\n * values for those four ARIA props while the popover is open.\n *\n * @example\n * ```tsx\n * // Ctrl/Cmd+Enter to submit (plain Enter inserts newline)\n * <ComposerPrimitive.Input\n * placeholder=\"Type your message...\"\n * submitMode=\"ctrlEnter\"\n * />\n *\n * // Insert a newline on Enter on touch-primary devices.\n * <ComposerPrimitive.Input\n * placeholder=\"Type your message...\"\n * unstable_insertNewlineOnTouchEnter\n * />\n *\n * // Old API (deprecated, still supported)\n * <ComposerPrimitive.Input\n * placeholder=\"Type your message...\"\n * submitOnEnter={true}\n * />\n * ```\n */\nexport const ComposerPrimitiveInput = forwardRef<\n ComposerPrimitiveInput.Element,\n ComposerPrimitiveInput.Props\n>(\n (\n {\n autoFocus = false,\n asChild,\n render,\n disabled: disabledProp,\n onChange,\n onKeyDown,\n onPaste,\n onSelect,\n submitOnEnter,\n submitMode,\n cancelOnEscape = true,\n unstable_focusOnRunStart = true,\n unstable_focusOnScrollToBottom = true,\n unstable_focusOnThreadSwitched = true,\n unstable_insertNewlineOnTouchEnter = false,\n addAttachmentOnPaste = true,\n ...rest\n },\n forwardedRef,\n ) => {\n const aui = useAui();\n const pluginRegistry = useComposerInputPluginRegistryOptional();\n\n const declaredSubmitMode =\n submitMode ?? (submitOnEnter === false ? \"none\" : \"enter\");\n const isTouchPrimary = useMediaQuery(\n unstable_insertNewlineOnTouchEnter ? TOUCH_PRIMARY_QUERY : null,\n );\n const effectiveSubmitMode =\n unstable_insertNewlineOnTouchEnter &&\n isTouchPrimary &&\n declaredSubmitMode === \"enter\"\n ? \"none\"\n : declaredSubmitMode;\n\n const value = useComposerInputValue();\n const isDisabled = useComposerInputDisabled(disabledProp);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const ref = useComposedRefs(forwardedRef, textareaRef);\n // suppress text/cursor broadcasts during IME composition\n const compositionRef = useRef(false);\n\n useEscapeKeydown((e) => {\n // Only handle ESC if it originated from within this input\n if (!textareaRef.current?.contains(e.target as Node)) return;\n\n // Let registered plugins (mention, slash command, etc.) handle Escape first\n if (pluginRegistry) {\n for (const plugin of pluginRegistry.getPlugins()) {\n if (plugin.handleKeyDown(e)) return;\n }\n }\n\n if (!cancelOnEscape) return;\n\n const composer = aui.composer();\n if (composer.getState().canCancel) {\n composer.cancel();\n e.preventDefault();\n }\n });\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (isDisabled) return;\n\n // ignore IME composition events\n if (e.nativeEvent.isComposing) return;\n\n // Let registered plugins (mention, slash command, etc.) handle keyboard events first\n if (pluginRegistry) {\n for (const plugin of pluginRegistry.getPlugins()) {\n if (plugin.handleKeyDown(e)) return;\n }\n }\n\n if (e.key === \"Enter\") {\n const threadState = aui.thread().getState();\n const hasQueue = threadState.capabilities.queue;\n\n // Steer hotkey: Cmd/Ctrl+Shift+Enter (respects submitMode=\"none\" and canSend)\n if (\n e.shiftKey &&\n (e.ctrlKey || e.metaKey) &&\n hasQueue &&\n declaredSubmitMode !== \"none\" &&\n aui.composer().getState().canSend\n ) {\n e.preventDefault();\n aui.composer().send({ steer: true });\n return;\n }\n\n // Regular newline: Shift+Enter\n if (e.shiftKey) return;\n\n // Block submission when running unless queue is supported\n if (threadState.isRunning && !hasQueue) return;\n\n let shouldSubmit = false;\n if (effectiveSubmitMode === \"ctrlEnter\") {\n shouldSubmit = e.ctrlKey || e.metaKey;\n } else if (effectiveSubmitMode === \"enter\") {\n shouldSubmit = true;\n }\n\n if (shouldSubmit) {\n e.preventDefault();\n textareaRef.current?.closest(\"form\")?.requestSubmit();\n }\n }\n };\n\n const handlePaste = async (e: ClipboardEvent<HTMLTextAreaElement>) => {\n if (!addAttachmentOnPaste) return;\n const threadCapabilities = aui.thread().getState().capabilities;\n const files = Array.from(e.clipboardData?.files || []);\n\n if (threadCapabilities.attachments && files.length > 0) {\n try {\n e.preventDefault();\n await Promise.all(\n files.map((file) => aui.composer().addAttachment(file)),\n );\n } catch (error) {\n console.error(\"Error adding attachment:\", error);\n }\n }\n };\n\n const autoFocusEnabled = autoFocus && !isDisabled;\n const focus = useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoFocusEnabled) return;\n\n textarea.focus({ preventScroll: true });\n textarea.setSelectionRange(textarea.value.length, textarea.value.length);\n }, [autoFocusEnabled]);\n\n useEffect(() => focus(), [focus]);\n\n useOnScrollToBottom(() => {\n if (\n aui.composer().getState().type === \"thread\" &&\n unstable_focusOnScrollToBottom\n ) {\n focus();\n }\n });\n\n useEffect(() => {\n if (\n aui.composer().getState().type !== \"thread\" ||\n !unstable_focusOnRunStart\n )\n return undefined;\n\n return aui.on(\"thread.runStart\", focus);\n }, [unstable_focusOnRunStart, focus, aui]);\n\n useEffect(() => {\n if (\n aui.composer().getState().type !== \"thread\" ||\n !unstable_focusOnThreadSwitched\n )\n return undefined;\n\n return aui.on(\"threadListItem.switchedTo\", focus);\n }, [unstable_focusOnThreadSwitched, focus, aui]);\n\n const ariaComboboxProps = useTriggerPopoverAriaProps();\n\n const inputProps = {\n name: \"input\" as const,\n value,\n ...rest,\n ...ariaComboboxProps,\n ref: ref as React.ForwardedRef<HTMLTextAreaElement>,\n disabled: isDisabled,\n onChange: composeEventHandlers(\n onChange,\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!aui.composer().getState().isEditing) return;\n const nativeIsComposing =\n (e.nativeEvent as { isComposing?: boolean }).isComposing === true;\n // recover stuck compositionRef when the browser drops compositionend\n if (compositionRef.current && !nativeIsComposing) {\n compositionRef.current = false;\n }\n const isComposing = nativeIsComposing || compositionRef.current;\n // keep controlled value in sync mid-IME so react does not reset the textarea to a stale value\n flushTapSync(() => {\n aui.composer().setText(e.target.value);\n });\n if (isComposing) return;\n const pos = e.target.selectionStart ?? e.target.value.length;\n if (pluginRegistry) {\n for (const plugin of pluginRegistry.getPlugins()) {\n plugin.setCursorPosition(pos);\n }\n }\n },\n ),\n onKeyDown: composeEventHandlers(onKeyDown, handleKeyPress),\n onCompositionStart: composeEventHandlers(\n (rest as { onCompositionStart?: React.CompositionEventHandler })\n .onCompositionStart,\n () => {\n compositionRef.current = true;\n },\n ),\n onCompositionEnd: composeEventHandlers(\n (rest as { onCompositionEnd?: React.CompositionEventHandler })\n .onCompositionEnd,\n (e: React.CompositionEvent<HTMLTextAreaElement>) => {\n compositionRef.current = false;\n if (!aui.composer().getState().isEditing) return;\n const target = e.target as HTMLTextAreaElement;\n flushTapSync(() => {\n aui.composer().setText(target.value);\n });\n const pos = target.selectionStart ?? target.value.length;\n if (pluginRegistry) {\n for (const plugin of pluginRegistry.getPlugins()) {\n plugin.setCursorPosition(pos);\n }\n }\n },\n ),\n onSelect: composeEventHandlers(\n onSelect,\n (e: React.SyntheticEvent<HTMLTextAreaElement>) => {\n if (compositionRef.current) return;\n const target = e.target as HTMLTextAreaElement;\n const pos = target.selectionStart ?? target.value.length;\n if (pluginRegistry) {\n for (const plugin of pluginRegistry.getPlugins()) {\n plugin.setCursorPosition(pos);\n }\n }\n },\n ),\n onPaste: composeEventHandlers(onPaste, handlePaste),\n };\n\n if (render && isValidElement(render)) {\n const renderChildren =\n (rest as any).children !== undefined\n ? ((rest as any).children as ReactNode)\n : ((render.props as Record<string, unknown>).children as ReactNode);\n return (\n <Slot.Root {...inputProps}>\n {cloneElement(render, undefined, renderChildren)}\n </Slot.Root>\n );\n }\n\n const Component = asChild ? Slot.Root : TextareaAutosize;\n return <Component {...inputProps} />;\n },\n);\n\nComposerPrimitiveInput.displayName = \"ComposerPrimitive.Input\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"ComposerInput.js","names":["composeEventHandlers","useComposedRefs","Slot","ClipboardEvent","KeyboardEvent","ReactElement","ReactNode","forwardRef","useCallback","useEffect","useRef","cloneElement","isValidElement","TextareaAutosize","TextareaAutosizeProps","TextareaHeightChangeMeta","useEscapeKeydown","useOnScrollToBottom","useMediaQuery","useAui","flushTapSync","useComposerInputPluginRegistryOptional","useComposerCompactContextOptional","useComposerInputDisabled","useComposerInputValue","useTriggerPopoverAriaProps","TOUCH_PRIMARY_QUERY","ComposerPrimitiveInput","Element","HTMLTextAreaElement","BaseProps","asChild","render","cancelOnEscape","unstable_focusOnRunStart","unstable_focusOnScrollToBottom","unstable_focusOnThreadSwitched","unstable_insertNewlineOnTouchEnter","addAttachmentOnPaste","SubmitModeProps","submitMode","submitOnEnter","Props","autoFocus","disabled","disabledProp","onChange","onKeyDown","onPaste","onSelect","onHeightChange","rest","forwardedRef","aui","pluginRegistry","compactContext","declaredSubmitMode","isTouchPrimary","effectiveSubmitMode","value","isDisabled","textareaRef","ref","compositionRef","e","current","contains","target","Node","plugin","getPlugins","handleKeyDown","composer","getState","canCancel","cancel","preventDefault","handleKeyPress","nativeEvent","isComposing","key","threadState","thread","hasQueue","capabilities","queue","shiftKey","ctrlKey","metaKey","canSend","send","steer","isRunning","shouldSubmit","closest","requestSubmit","handlePaste","threadCapabilities","files","Array","from","clipboardData","attachments","length","Promise","all","map","file","addAttachment","error","console","handleHeightChange","height","meta","el","cs","getComputedStyle","contentHeight","boxSizing","parseFloat","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","Math","round","rowHeight","setMultiline","autoFocusEnabled","focus","textarea","preventScroll","setSelectionRange","type","undefined","on","ariaComboboxProps","inputProps","name","const","React","ForwardedRef","ChangeEvent","isEditing","nativeIsComposing","setText","pos","selectionStart","setCursorPosition","onCompositionStart","CompositionEventHandler","onCompositionEnd","CompositionEvent","SyntheticEvent","renderChildren","children","props","Record","Component","Root","displayName"],"sources":["../../../src/primitives/composer/ComposerInput.tsx"],"sourcesContent":["\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"radix-ui\";\nimport {\n type ClipboardEvent,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n cloneElement,\n isValidElement,\n} from \"react\";\nimport TextareaAutosize, {\n type TextareaAutosizeProps,\n type TextareaHeightChangeMeta,\n} from \"react-textarea-autosize\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\nimport { useMediaQuery } from \"../../utils/hooks/useMediaQuery\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { flushTapSync } from \"@assistant-ui/tap\";\nimport { useComposerInputPluginRegistryOptional } from \"./ComposerInputPluginContext\";\nimport { useComposerCompactContextOptional } from \"./ComposerCompactContext\";\nimport {\n useComposerInputDisabled,\n useComposerInputValue,\n useTriggerPopoverAriaProps,\n} from \"./useComposerInputState\";\n\nconst TOUCH_PRIMARY_QUERY = \"(pointer: coarse) and (not (any-pointer: fine))\";\n\nexport namespace ComposerPrimitiveInput {\n export type Element = HTMLTextAreaElement;\n\n type BaseProps = {\n /**\n * Whether to render as a child component using Slot.\n * When true, the component will merge its props with its child.\n */\n asChild?: boolean | undefined;\n /**\n * A React element to use as the input container, with props merged in.\n */\n render?: ReactElement | undefined;\n /**\n * Whether to cancel message composition when Escape is pressed.\n * @default true\n */\n cancelOnEscape?: boolean | undefined;\n /**\n * Whether to automatically focus the input when a new run starts.\n * @default true\n */\n unstable_focusOnRunStart?: boolean | undefined;\n /**\n * Whether to automatically focus the input when scrolling to bottom.\n * @default true\n */\n unstable_focusOnScrollToBottom?: boolean | undefined;\n /**\n * Whether to automatically focus the input when switching threads.\n * @default true\n */\n unstable_focusOnThreadSwitched?: boolean | undefined;\n /**\n * Whether plain Enter on a touch-primary device should insert a newline\n * instead of submitting, detected via\n * `(pointer: coarse) and (not (any-pointer: fine))`. Only takes effect\n * when `submitMode` resolves to `\"enter\"`.\n * @default false\n */\n unstable_insertNewlineOnTouchEnter?: boolean | undefined;\n /**\n * Whether to automatically add pasted files as attachments.\n * @default true\n */\n addAttachmentOnPaste?: boolean | undefined;\n };\n\n type SubmitModeProps =\n | {\n /**\n * Controls how the Enter key submits messages.\n * - \"enter\": Plain Enter submits (Shift+Enter for newline)\n * - \"ctrlEnter\": Ctrl/Cmd+Enter submits (plain Enter for newline)\n * - \"none\": Keyboard submission disabled\n * @default \"enter\"\n */\n submitMode?: \"enter\" | \"ctrlEnter\" | \"none\" | undefined;\n /**\n * @deprecated Use `submitMode` instead\n * @ignore\n */\n submitOnEnter?: never;\n }\n | {\n submitMode?: never;\n /**\n * Whether to submit the message when Enter is pressed (without Shift).\n * @default true\n * @deprecated Use `submitMode` instead. Will be removed in a future version.\n */\n submitOnEnter?: boolean | undefined;\n };\n\n export type Props = TextareaAutosizeProps & BaseProps & SubmitModeProps;\n}\n\n/**\n * A text input component for composing messages.\n *\n * This component provides a rich text input experience with automatic resizing,\n * keyboard shortcuts, file paste support, and intelligent focus management.\n * It integrates with the composer context to manage message state and submission.\n *\n * When rendered inside `Unstable_TriggerPopoverRoot` and a popover is open, the\n * underlying `<textarea>` automatically receives `aria-controls`,\n * `aria-expanded`, `aria-haspopup`, and `aria-activedescendant` for the\n * combobox relationship. These computed attributes override user-provided\n * values for those four ARIA props while the popover is open.\n *\n * @example\n * ```tsx\n * // Ctrl/Cmd+Enter to submit (plain Enter inserts newline)\n * <ComposerPrimitive.Input\n * placeholder=\"Type your message...\"\n * submitMode=\"ctrlEnter\"\n * />\n *\n * // Insert a newline on Enter on touch-primary devices.\n * <ComposerPrimitive.Input\n * placeholder=\"Type your message...\"\n * unstable_insertNewlineOnTouchEnter\n * />\n *\n * // Old API (deprecated, still supported)\n * <ComposerPrimitive.Input\n * placeholder=\"Type your message...\"\n * submitOnEnter={true}\n * />\n * ```\n */\nexport const ComposerPrimitiveInput = forwardRef<\n ComposerPrimitiveInput.Element,\n ComposerPrimitiveInput.Props\n>(\n (\n {\n autoFocus = false,\n asChild,\n render,\n disabled: disabledProp,\n onChange,\n onKeyDown,\n onPaste,\n onSelect,\n submitOnEnter,\n submitMode,\n cancelOnEscape = true,\n unstable_focusOnRunStart = true,\n unstable_focusOnScrollToBottom = true,\n unstable_focusOnThreadSwitched = true,\n unstable_insertNewlineOnTouchEnter = false,\n addAttachmentOnPaste = true,\n onHeightChange,\n ...rest\n },\n forwardedRef,\n ) => {\n const aui = useAui();\n const pluginRegistry = useComposerInputPluginRegistryOptional();\n const compactContext = useComposerCompactContextOptional();\n\n const declaredSubmitMode =\n submitMode ?? (submitOnEnter === false ? \"none\" : \"enter\");\n const isTouchPrimary = useMediaQuery(\n unstable_insertNewlineOnTouchEnter ? TOUCH_PRIMARY_QUERY : null,\n );\n const effectiveSubmitMode =\n unstable_insertNewlineOnTouchEnter &&\n isTouchPrimary &&\n declaredSubmitMode === \"enter\"\n ? \"none\"\n : declaredSubmitMode;\n\n const value = useComposerInputValue();\n const isDisabled = useComposerInputDisabled(disabledProp);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const ref = useComposedRefs(forwardedRef, textareaRef);\n // suppress text/cursor broadcasts during IME composition\n const compositionRef = useRef(false);\n\n useEscapeKeydown((e) => {\n // Only handle ESC if it originated from within this input\n if (!textareaRef.current?.contains(e.target as Node)) return;\n\n // Let registered plugins (mention, slash command, etc.) handle Escape first\n if (pluginRegistry) {\n for (const plugin of pluginRegistry.getPlugins()) {\n if (plugin.handleKeyDown(e)) return;\n }\n }\n\n if (!cancelOnEscape) return;\n\n const composer = aui.composer();\n if (composer.getState().canCancel) {\n composer.cancel();\n e.preventDefault();\n }\n });\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (isDisabled) return;\n\n // ignore IME composition events\n if (e.nativeEvent.isComposing) return;\n\n // Let registered plugins (mention, slash command, etc.) handle keyboard events first\n if (pluginRegistry) {\n for (const plugin of pluginRegistry.getPlugins()) {\n if (plugin.handleKeyDown(e)) return;\n }\n }\n\n if (e.key === \"Enter\") {\n const threadState = aui.thread().getState();\n const hasQueue = threadState.capabilities.queue;\n\n // Steer hotkey: Cmd/Ctrl+Shift+Enter (respects submitMode=\"none\" and canSend)\n if (\n e.shiftKey &&\n (e.ctrlKey || e.metaKey) &&\n hasQueue &&\n declaredSubmitMode !== \"none\" &&\n aui.composer().getState().canSend\n ) {\n e.preventDefault();\n aui.composer().send({ steer: true });\n return;\n }\n\n // Regular newline: Shift+Enter\n if (e.shiftKey) return;\n\n // Block submission when running unless queue is supported\n if (threadState.isRunning && !hasQueue) return;\n\n let shouldSubmit = false;\n if (effectiveSubmitMode === \"ctrlEnter\") {\n shouldSubmit = e.ctrlKey || e.metaKey;\n } else if (effectiveSubmitMode === \"enter\") {\n shouldSubmit = true;\n }\n\n if (shouldSubmit) {\n e.preventDefault();\n textareaRef.current?.closest(\"form\")?.requestSubmit();\n }\n }\n };\n\n const handlePaste = async (e: ClipboardEvent<HTMLTextAreaElement>) => {\n if (!addAttachmentOnPaste) return;\n const threadCapabilities = aui.thread().getState().capabilities;\n const files = Array.from(e.clipboardData?.files || []);\n\n if (threadCapabilities.attachments && files.length > 0) {\n try {\n e.preventDefault();\n await Promise.all(\n files.map((file) => aui.composer().addAttachment(file)),\n );\n } catch (error) {\n console.error(\"Error adding attachment:\", error);\n }\n }\n };\n\n const handleHeightChange = (\n height: number,\n meta: TextareaHeightChangeMeta,\n ) => {\n onHeightChange?.(height, meta);\n if (!compactContext) return;\n const el = textareaRef.current;\n if (!el || el.value === \"\") return;\n const cs = getComputedStyle(el);\n const contentHeight =\n cs.boxSizing === \"border-box\"\n ? height -\n parseFloat(cs.paddingTop) -\n parseFloat(cs.paddingBottom) -\n parseFloat(cs.borderTopWidth) -\n parseFloat(cs.borderBottomWidth)\n : height;\n if (Math.round(contentHeight / meta.rowHeight) > 1) {\n compactContext.setMultiline(true);\n }\n };\n\n const autoFocusEnabled = autoFocus && !isDisabled;\n const focus = useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoFocusEnabled) return;\n\n textarea.focus({ preventScroll: true });\n textarea.setSelectionRange(textarea.value.length, textarea.value.length);\n }, [autoFocusEnabled]);\n\n useEffect(() => focus(), [focus]);\n\n useOnScrollToBottom(() => {\n if (\n aui.composer().getState().type === \"thread\" &&\n unstable_focusOnScrollToBottom\n ) {\n focus();\n }\n });\n\n useEffect(() => {\n if (\n aui.composer().getState().type !== \"thread\" ||\n !unstable_focusOnRunStart\n )\n return undefined;\n\n return aui.on(\"thread.runStart\", focus);\n }, [unstable_focusOnRunStart, focus, aui]);\n\n useEffect(() => {\n if (\n aui.composer().getState().type !== \"thread\" ||\n !unstable_focusOnThreadSwitched\n )\n return undefined;\n\n return aui.on(\"threadListItem.switchedTo\", focus);\n }, [unstable_focusOnThreadSwitched, focus, aui]);\n\n useEffect(() => {\n if (value === \"\") compactContext?.setMultiline(false);\n }, [value, compactContext]);\n\n const ariaComboboxProps = useTriggerPopoverAriaProps();\n\n const inputProps = {\n name: \"input\" as const,\n value,\n ...rest,\n ...ariaComboboxProps,\n ref: ref as React.ForwardedRef<HTMLTextAreaElement>,\n disabled: isDisabled,\n onChange: composeEventHandlers(\n onChange,\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!aui.composer().getState().isEditing) return;\n const nativeIsComposing =\n (e.nativeEvent as { isComposing?: boolean }).isComposing === true;\n // recover stuck compositionRef when the browser drops compositionend\n if (compositionRef.current && !nativeIsComposing) {\n compositionRef.current = false;\n }\n const isComposing = nativeIsComposing || compositionRef.current;\n // keep controlled value in sync mid-IME so react does not reset the textarea to a stale value\n flushTapSync(() => {\n aui.composer().setText(e.target.value);\n });\n if (isComposing) return;\n const pos = e.target.selectionStart ?? e.target.value.length;\n if (pluginRegistry) {\n for (const plugin of pluginRegistry.getPlugins()) {\n plugin.setCursorPosition(pos);\n }\n }\n },\n ),\n onKeyDown: composeEventHandlers(onKeyDown, handleKeyPress),\n onCompositionStart: composeEventHandlers(\n (rest as { onCompositionStart?: React.CompositionEventHandler })\n .onCompositionStart,\n () => {\n compositionRef.current = true;\n },\n ),\n onCompositionEnd: composeEventHandlers(\n (rest as { onCompositionEnd?: React.CompositionEventHandler })\n .onCompositionEnd,\n (e: React.CompositionEvent<HTMLTextAreaElement>) => {\n compositionRef.current = false;\n if (!aui.composer().getState().isEditing) return;\n const target = e.target as HTMLTextAreaElement;\n flushTapSync(() => {\n aui.composer().setText(target.value);\n });\n const pos = target.selectionStart ?? target.value.length;\n if (pluginRegistry) {\n for (const plugin of pluginRegistry.getPlugins()) {\n plugin.setCursorPosition(pos);\n }\n }\n },\n ),\n onSelect: composeEventHandlers(\n onSelect,\n (e: React.SyntheticEvent<HTMLTextAreaElement>) => {\n if (compositionRef.current) return;\n const target = e.target as HTMLTextAreaElement;\n const pos = target.selectionStart ?? target.value.length;\n if (pluginRegistry) {\n for (const plugin of pluginRegistry.getPlugins()) {\n plugin.setCursorPosition(pos);\n }\n }\n },\n ),\n onPaste: composeEventHandlers(onPaste, handlePaste),\n ...(compactContext\n ? { onHeightChange: handleHeightChange }\n : onHeightChange !== undefined\n ? { onHeightChange }\n : {}),\n };\n\n if (render && isValidElement(render)) {\n const renderChildren =\n (rest as any).children !== undefined\n ? ((rest as any).children as ReactNode)\n : ((render.props as Record<string, unknown>).children as ReactNode);\n return (\n <Slot.Root {...inputProps}>\n {cloneElement(render, undefined, renderChildren)}\n </Slot.Root>\n );\n }\n\n const Component = asChild ? Slot.Root : TextareaAutosize;\n return <Component {...inputProps} />;\n },\n);\n\nComposerPrimitiveInput.displayName = \"ComposerPrimitive.Input\";\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { FC, ReactNode } from "react";
2
-
3
2
  //#region src/primitives/composer/ComposerInputPluginContext.d.ts
4
3
  /**
5
4
  * A plugin that intercepts keyboard events and cursor changes in the composer
@@ -7,7 +6,8 @@ import { FC, ReactNode } from "react";
7
6
  * without ComposerInput knowing about specific triggers.
8
7
  */
9
8
  type ComposerInputPlugin = {
10
- /** Handle a key event. Return true if consumed (stops propagation to other plugins and default behavior). */handleKeyDown(e: {
9
+ /** Handle a key event. Return true if consumed (stops propagation to other plugins and default behavior). */
10
+ handleKeyDown(e: {
11
11
  readonly key: string;
12
12
  readonly shiftKey: boolean;
13
13
  readonly ctrlKey?: boolean;
@@ -16,7 +16,8 @@ type ComposerInputPlugin = {
16
16
  isComposing?: boolean;
17
17
  };
18
18
  preventDefault(): void;
19
- }): boolean; /** Called on every cursor position change (selection change / text change). */
19
+ }): boolean;
20
+ /** Called on every cursor position change (selection change / text change). */
20
21
  setCursorPosition(pos: number): void;
21
22
  };
22
23
  /** Options for registering a plugin. */
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerInputPluginContext.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerInputPluginContext.tsx"],"mappings":";;;;;AAiBA;;;KAAY,mBAAA;EAEV,6GAAA,aAAA,CAAc,CAAA;IAAA,SACH,GAAA;IAAA,SACA,QAAA;IAAA,SACA,OAAA;IAAA,SACA,OAAA;IAAA,SACA,WAAA;MAAgB,WAAA;IAAA;IACzB,cAAA;EAAA,aAI2B;EAA7B,iBAAA,CAAkB,GAAA;AAAA;;KAIR,kCAAA;EAKF;AAAA;AAIV;;EAJE,QAAQ;AAAA;AAAA,KAIE,2BAAA;EACV,QAAA,CACE,MAAA,EAAQ,mBAAA,EACR,IAAA,GAAO,kCAAA;EAET,UAAA,aAAuB,mBAAA;AAAA;AAAA,cAMZ,8BAAA,QACP,2BAOH;AAAA,cAEU,sCAAA,QACP,2BAA2B;AAAA,cAIpB,2BAAA,EAA6B,EAAE;EAAG,QAAA,EAAU,SAAA;AAAA"}
1
+ {"version":3,"file":"ComposerInputPluginContext.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerInputPluginContext.tsx"],"mappings":";;;;;;;KAiBY;;EAEV,cAAc;aACH;aACA;aACA;aACA;aACA;MAAgB;;IACzB;;;EAIF,kBAAkB;;;KAIR;;;;;EAKV;;KAIU;EACV,SACE,QAAQ,qBACR,OAAO;EAET,uBAAuB;;cAMZ,sCACP;cASO,8CACP;cAIO,6BAA6B;EAAK,UAAU"}
@@ -1,6 +1,5 @@
1
1
  import { Primitive } from "../../utils/Primitive.js";
2
2
  import { ComponentPropsWithoutRef, ComponentRef } from "react";
3
-
4
3
  //#region src/primitives/composer/ComposerQuote.d.ts
5
4
  declare namespace ComposerPrimitiveQuote {
6
5
  type Element = ComponentRef<typeof Primitive.div>;
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerQuote.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerQuote.tsx"],"mappings":";;;;kBAciB,sBAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,GAAA;EAAA,KACxC,KAAA,GAAQ,wBAAA,QAAgC,SAAA,CAAU,GAAA;AAAA;;;;;;;;;;;;;cAenD,sBAAA,kBAAsB,yBAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,cAAA,oBAAA,cAAA,CAAA,cAAA;;;;;kBAclB,0BAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,IAAA;EAAA,KACxC,KAAA,GAAQ,wBAAA,QAAgC,SAAA,CAAU,IAAA;AAAA;;;;;;;;;cAWnD,0BAAA,kBAA0B,yBAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,eAAA,oBAAA,cAAA,CAAA,eAAA;;;;;kBAkBtB,6BAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,MAAA;EAAA,KACxC,KAAA,GAAQ,wBAAA,QAAgC,SAAA,CAAU,MAAA;AAAA;;;;;;;AAjChE;;cA4Ca,6BAAA,kBAA6B,yBAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,iBAAA,oBAAA,oBAAA,CAAA,iBAAA"}
1
+ {"version":3,"file":"ComposerQuote.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerQuote.tsx"],"mappings":";;;kBAciB;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,gCAAgC,UAAU;;;;;;;;;;;;;;cAenD,wCAAsB,0BAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;;kBAclB;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,gCAAgC,UAAU;;;;;;;;;;cAWnD,4CAA0B,0BAAA,KAAA,qBAAA,gBAAA,mCAAA,eAAA;;;;;kBAkBtB;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,gCAAgC,UAAU;;;;;;;;;;cAWnD,+CAA6B,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA"}
@@ -1,6 +1,5 @@
1
1
  import { Primitive } from "../../utils/Primitive.js";
2
2
  import { ComponentPropsWithoutRef, ComponentRef } from "react";
3
-
4
3
  //#region src/primitives/composer/ComposerRoot.d.ts
5
4
  declare namespace ComposerPrimitiveRoot {
6
5
  type Element = ComponentRef<typeof Primitive.form>;
@@ -8,7 +7,17 @@ declare namespace ComposerPrimitiveRoot {
8
7
  * Props for the ComposerPrimitive.Root component.
9
8
  * Accepts all standard form element props.
10
9
  */
11
- type Props = ComponentPropsWithoutRef<typeof Primitive.form>;
10
+ type Props = ComponentPropsWithoutRef<typeof Primitive.form> & {
11
+ /**
12
+ * Opt the composer into compact mode. While the input holds at most a single
13
+ * line of text and there are no attachments, quote, queued messages, or
14
+ * active dictation, the root renders a `data-compact` attribute so styles
15
+ * can collapse the composer into a single row. It expands automatically
16
+ * when any of those conditions stop holding.
17
+ * @default false
18
+ */
19
+ compact?: boolean | undefined;
20
+ };
12
21
  }
13
22
  /**
14
23
  * The root form container for message composition.
@@ -29,7 +38,17 @@ declare const ComposerPrimitiveRoot: import("react").ForwardRefExoticComponent<O
29
38
  asChild?: boolean;
30
39
  }, "ref"> & {
31
40
  render?: import("react").ReactElement | undefined;
32
- } & import("react").RefAttributes<HTMLFormElement>, "ref"> & import("react").RefAttributes<HTMLFormElement>>;
41
+ } & import("react").RefAttributes<HTMLFormElement>, "ref"> & {
42
+ /**
43
+ * Opt the composer into compact mode. While the input holds at most a single
44
+ * line of text and there are no attachments, quote, queued messages, or
45
+ * active dictation, the root renders a `data-compact` attribute so styles
46
+ * can collapse the composer into a single row. It expands automatically
47
+ * when any of those conditions stop holding.
48
+ * @default false
49
+ */
50
+ compact?: boolean | undefined;
51
+ } & import("react").RefAttributes<HTMLFormElement>>;
33
52
  //#endregion
34
53
  export { ComposerPrimitiveRoot };
35
54
  //# sourceMappingURL=ComposerRoot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerRoot.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerRoot.tsx"],"mappings":";;;;kBAYiB,qBAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,IAAA;EADrC;;;;EAAA,KAMH,KAAA,GAAQ,wBAAA,QAAgC,SAAA,CAAU,IAAA;AAAA;;;;;;;;;;;;;AAAI;AAkBpE;;cAAa,qBAAA,kBAAqB,yBAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,eAAA,oBAAA,kBAAA,CAAA,eAAA"}
1
+ {"version":3,"file":"ComposerRoot.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerRoot.tsx"],"mappings":";;;kBAgBiB;OACH,UAAU,oBAAoB,UAAU;;;;;OAKxC,QAAQ,gCAAgC,UAAU;;;;;;;;;IAS5D;;;;;;;;;;;;;;;;;;cAmBS,uCAAqB,0BAAA,KAAA,qBAAA,gBAAA,mCAAA,mBAAA"}
@@ -1,8 +1,10 @@
1
1
  "use client";
2
2
  import { Primitive } from "../../utils/Primitive.js";
3
3
  import { useComposerSend } from "./ComposerSend.js";
4
+ import { ComposerCompactContext } from "./ComposerCompactContext.js";
5
+ import { useAuiState } from "@assistant-ui/store";
4
6
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
- import { forwardRef } from "@assistant-ui/tap/react-shim";
7
+ import { forwardRef, useState } from "@assistant-ui/tap/react-shim";
6
8
  import { jsx } from "react/jsx-runtime";
7
9
  import { composeEventHandlers } from "@radix-ui/primitive";
8
10
  //#region src/primitives/composer/ComposerRoot.tsx
@@ -22,50 +24,81 @@ import { composeEventHandlers } from "@radix-ui/primitive";
22
24
  * ```
23
25
  */
24
26
  const ComposerPrimitiveRoot = forwardRef((t0, forwardedRef) => {
25
- const $ = c(12);
27
+ const $ = c(20);
28
+ let compact;
26
29
  let onSubmit;
27
30
  let rest;
28
31
  if ($[0] !== t0) {
29
- ({onSubmit, ...rest} = t0);
32
+ ({onSubmit, compact, ...rest} = t0);
30
33
  $[0] = t0;
31
- $[1] = onSubmit;
32
- $[2] = rest;
34
+ $[1] = compact;
35
+ $[2] = onSubmit;
36
+ $[3] = rest;
33
37
  } else {
34
- onSubmit = $[1];
35
- rest = $[2];
38
+ compact = $[1];
39
+ onSubmit = $[2];
40
+ rest = $[3];
36
41
  }
37
42
  const send = useComposerSend();
43
+ const [multiline, setMultiline] = useState(false);
38
44
  let t1;
39
- if ($[3] !== send) {
40
- t1 = (e) => {
41
- e.preventDefault();
42
- if (!send) return;
43
- send();
44
- };
45
- $[3] = send;
45
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
46
+ t1 = { setMultiline };
46
47
  $[4] = t1;
47
48
  } else t1 = $[4];
48
- const handleSubmit = t1;
49
+ const compactContext = t1;
49
50
  let t2;
50
- if ($[5] !== handleSubmit || $[6] !== onSubmit) {
51
- t2 = composeEventHandlers(onSubmit, handleSubmit);
52
- $[5] = handleSubmit;
53
- $[6] = onSubmit;
54
- $[7] = t2;
55
- } else t2 = $[7];
51
+ if ($[5] !== compact) {
52
+ t2 = (s) => compact ? s.composer.attachments.length === 0 && s.composer.quote == null && s.composer.queue.length === 0 && s.composer.dictation == null && !s.composer.text.includes("\n") : false;
53
+ $[5] = compact;
54
+ $[6] = t2;
55
+ } else t2 = $[6];
56
+ const isCompact = useAuiState(t2) && !multiline;
56
57
  let t3;
57
- if ($[8] !== forwardedRef || $[9] !== rest || $[10] !== t2) {
58
- t3 = /* @__PURE__ */ jsx(Primitive.form, {
58
+ if ($[7] !== send) {
59
+ t3 = (e) => {
60
+ e.preventDefault();
61
+ if (!send) return;
62
+ send();
63
+ };
64
+ $[7] = send;
65
+ $[8] = t3;
66
+ } else t3 = $[8];
67
+ const handleSubmit = t3;
68
+ const t4 = compact ? compactContext : null;
69
+ const t5 = isCompact ? "" : void 0;
70
+ let t6;
71
+ if ($[9] !== handleSubmit || $[10] !== onSubmit) {
72
+ t6 = composeEventHandlers(onSubmit, handleSubmit);
73
+ $[9] = handleSubmit;
74
+ $[10] = onSubmit;
75
+ $[11] = t6;
76
+ } else t6 = $[11];
77
+ let t7;
78
+ if ($[12] !== forwardedRef || $[13] !== rest || $[14] !== t5 || $[15] !== t6) {
79
+ t7 = /* @__PURE__ */ jsx(Primitive.form, {
59
80
  ...rest,
81
+ "data-compact": t5,
60
82
  ref: forwardedRef,
61
- onSubmit: t2
83
+ onSubmit: t6
84
+ });
85
+ $[12] = forwardedRef;
86
+ $[13] = rest;
87
+ $[14] = t5;
88
+ $[15] = t6;
89
+ $[16] = t7;
90
+ } else t7 = $[16];
91
+ let t8;
92
+ if ($[17] !== t4 || $[18] !== t7) {
93
+ t8 = /* @__PURE__ */ jsx(ComposerCompactContext.Provider, {
94
+ value: t4,
95
+ children: t7
62
96
  });
63
- $[8] = forwardedRef;
64
- $[9] = rest;
65
- $[10] = t2;
66
- $[11] = t3;
67
- } else t3 = $[11];
68
- return t3;
97
+ $[17] = t4;
98
+ $[18] = t7;
99
+ $[19] = t8;
100
+ } else t8 = $[19];
101
+ return t8;
69
102
  });
70
103
  ComposerPrimitiveRoot.displayName = "ComposerPrimitive.Root";
71
104
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerRoot.js","names":["c","_c","composeEventHandlers","Primitive","ComponentRef","FormEvent","forwardRef","ComponentPropsWithoutRef","useComposerSend","ComposerPrimitiveRoot","Element","form","Props","t0","forwardedRef","$","onSubmit","rest","send","t1","e","preventDefault","handleSubmit","t2","t3","displayName"],"sources":["../../../src/primitives/composer/ComposerRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n type FormEvent,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from \"react\";\nimport { useComposerSend } from \"./ComposerSend\";\n\nexport namespace ComposerPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.form>;\n /**\n * Props for the ComposerPrimitive.Root component.\n * Accepts all standard form element props.\n */\n export type Props = ComponentPropsWithoutRef<typeof Primitive.form>;\n}\n\n/**\n * The root form container for message composition.\n *\n * This component provides a form wrapper that handles message submission when the form\n * is submitted (e.g., via Enter key or submit button). It automatically prevents the\n * default form submission and triggers the composer's send functionality.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Root>\n * <ComposerPrimitive.Input placeholder=\"Type your message...\" />\n * <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>\n * </ComposerPrimitive.Root>\n * ```\n */\nexport const ComposerPrimitiveRoot = forwardRef<\n ComposerPrimitiveRoot.Element,\n ComposerPrimitiveRoot.Props\n>(({ onSubmit, ...rest }, forwardedRef) => {\n const send = useComposerSend();\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n\n if (!send) return;\n send();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={forwardedRef}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n});\n\nComposerPrimitiveRoot.displayName = \"ComposerPrimitive.Root\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoCA,MAAaS,wBAAwBH,YAGnCO,IAAAC,iBAAA;CAAA,MAAAC,IAAAd,EAAA,EAAA;CAAA,IAAAe;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAF,IAAA;EAAC,CAAA,CAAAG,aAAAC,QAAAJ;EAAqBE,EAAA,KAAAF;EAAAE,EAAA,KAAAC;EAAAD,EAAA,KAAAE;CAAA,OAAA;EAAAD,WAAAD,EAAA;EAAAE,OAAAF,EAAA;CAAA;CACtB,MAAAG,OAAaV,gBAAgB;CAAE,IAAAW;CAAA,IAAAJ,EAAA,OAAAG,MAAA;EAEVC,MAAAC,MAAA;GACnBA,EAACC,eAAgB;GAEjB,IAAI,CAACH,MAAI;GACTA,KAAK;EAAC;EACPH,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CALD,MAAAO,eAAqBH;CAKnB,IAAAI;CAAA,IAAAR,EAAA,OAAAO,gBAAAP,EAAA,OAAAC,UAAA;EAMYO,KAAArB,qBAAqBc,UAAUM,YAAY;EAACP,EAAA,KAAAO;EAAAP,EAAA,KAAAC;EAAAD,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAD,gBAAAC,EAAA,OAAAE,QAAAF,EAAA,QAAAQ,IAAA;EAHxDC,KAAA,oBAAA,UAAA,MAAA;GAAA,GACMP;GACCH,KAAAA;GACK,UAAAS;EAA4C,CAAA;EACtDR,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,MAAAQ;EAAAR,EAAA,MAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OAJFS;AAIE,CAEL;AAEDf,sBAAsBgB,cAAc"}
1
+ {"version":3,"file":"ComposerRoot.js","names":["c","_c","composeEventHandlers","useAuiState","Primitive","ComponentRef","FormEvent","forwardRef","ComponentPropsWithoutRef","useMemo","useState","useComposerSend","ComposerCompactContext","ComposerPrimitiveRoot","Element","form","Props","compact","t0","forwardedRef","$","onSubmit","rest","send","multiline","setMultiline","t1","Symbol","for","compactContext","t2","s","composer","attachments","length","quote","queue","dictation","text","includes","stateAllowsCompact","isCompact","t3","e","preventDefault","handleSubmit","t4","t5","undefined","t6","t7","t8","displayName"],"sources":["../../../src/primitives/composer/ComposerRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useAuiState } from \"@assistant-ui/store\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n type FormEvent,\n forwardRef,\n type ComponentPropsWithoutRef,\n useMemo,\n useState,\n} from \"react\";\nimport { useComposerSend } from \"./ComposerSend\";\nimport { ComposerCompactContext } from \"./ComposerCompactContext\";\n\nexport namespace ComposerPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.form>;\n /**\n * Props for the ComposerPrimitive.Root component.\n * Accepts all standard form element props.\n */\n export type Props = ComponentPropsWithoutRef<typeof Primitive.form> & {\n /**\n * Opt the composer into compact mode. While the input holds at most a single\n * line of text and there are no attachments, quote, queued messages, or\n * active dictation, the root renders a `data-compact` attribute so styles\n * can collapse the composer into a single row. It expands automatically\n * when any of those conditions stop holding.\n * @default false\n */\n compact?: boolean | undefined;\n };\n}\n\n/**\n * The root form container for message composition.\n *\n * This component provides a form wrapper that handles message submission when the form\n * is submitted (e.g., via Enter key or submit button). It automatically prevents the\n * default form submission and triggers the composer's send functionality.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Root>\n * <ComposerPrimitive.Input placeholder=\"Type your message...\" />\n * <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>\n * </ComposerPrimitive.Root>\n * ```\n */\nexport const ComposerPrimitiveRoot = forwardRef<\n ComposerPrimitiveRoot.Element,\n ComposerPrimitiveRoot.Props\n>(({ onSubmit, compact, ...rest }, forwardedRef) => {\n const send = useComposerSend();\n\n const [multiline, setMultiline] = useState(false);\n const compactContext = useMemo(() => ({ setMultiline }), []);\n const stateAllowsCompact = useAuiState((s) =>\n compact\n ? s.composer.attachments.length === 0 &&\n s.composer.quote == null &&\n s.composer.queue.length === 0 &&\n s.composer.dictation == null &&\n !s.composer.text.includes(\"\\n\")\n : false,\n );\n const isCompact = stateAllowsCompact && !multiline;\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n\n if (!send) return;\n send();\n };\n\n return (\n <ComposerCompactContext.Provider value={compact ? compactContext : null}>\n <Primitive.form\n {...rest}\n data-compact={isCompact ? \"\" : undefined}\n ref={forwardedRef}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n </ComposerCompactContext.Provider>\n );\n});\n\nComposerPrimitiveRoot.displayName = \"ComposerPrimitive.Root\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,MAAaa,wBAAwBN,YAGnCW,IAAAC,iBAAA;CAAA,MAAAC,IAAAnB,EAAA,EAAA;CAAA,IAAAgB;CAAA,IAAAI;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAF,IAAA;EAAC,CAAA,CAAAG,UAAAJ,YAAAK,QAAAJ;EAA8BE,EAAA,KAAAF;EAAAE,EAAA,KAAAH;EAAAG,EAAA,KAAAC;EAAAD,EAAA,KAAAE;CAAA,OAAA;EAAAL,UAAAG,EAAA;EAAAC,WAAAD,EAAA;EAAAE,OAAAF,EAAA;CAAA;CAC/B,MAAAG,OAAaZ,gBAAgB;CAE7B,MAAA,CAAAa,WAAAC,gBAAkCf,SAAS,KAAK;CAAE,IAAAgB;CAAA,IAAAN,EAAA,OAAAO,OAAAC,IAAA,2BAAA,GAAA;EACZF,KAAA,EAAAD,aAAe;EAACL,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAtD,MAAAS,iBAAsCH;CAAuB,IAAAI;CAAA,IAAAV,EAAA,OAAAH,SAAA;EACtBa,MAAAC,MACrCd,UACIc,EAACC,SAASC,YAAYC,WAAY,KAClCH,EAACC,SAASG,SAAU,QACpBJ,EAACC,SAASI,MAAMF,WAAY,KAC5BH,EAACC,SAASK,aAAc,QAHxB,CAICN,EAACC,SAASM,KAAKC,SAAU,IAAI,IALlC;EAMSnB,EAAA,KAAAH;EAAAG,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAEX,MAAAqB,YAT2BtC,YAAY2B,EASrBU,KAAA,CAAuBhB;CAAU,IAAAkB;CAAA,IAAAtB,EAAA,OAAAG,MAAA;EAE9BmB,MAAAC,MAAA;GACnBA,EAACC,eAAgB;GAEjB,IAAI,CAACrB,MAAI;GACTA,KAAK;EAAC;EACPH,EAAA,KAAAG;EAAAH,EAAA,KAAAsB;CAAA,OAAAA,KAAAtB,EAAA;CALD,MAAAyB,eAAqBH;CAQqB,MAAAI,KAAA7B,UAAAY,iBAAA;CAGtB,MAAAkB,KAAAN,YAAA,KAAAO,KAAAA;CAA0B,IAAAC;CAAA,IAAA7B,EAAA,OAAAyB,gBAAAzB,EAAA,QAAAC,UAAA;EAE9B4B,KAAA/C,qBAAqBmB,UAAUwB,YAAY;EAACzB,EAAA,KAAAyB;EAAAzB,EAAA,MAAAC;EAAAD,EAAA,MAAA6B;CAAA,OAAAA,KAAA7B,EAAA;CAAA,IAAA8B;CAAA,IAAA9B,EAAA,QAAAD,gBAAAC,EAAA,QAAAE,QAAAF,EAAA,QAAA2B,MAAA3B,EAAA,QAAA6B,IAAA;EAJxDC,KAAA,oBAAA,UAAA,MAAA;GAAA,GACM5B;GACU,gBAAAyB;GACT5B,KAAAA;GACK,UAAA8B;EAA4C,CAAA;EACtD7B,EAAA,MAAAD;EAAAC,EAAA,MAAAE;EAAAF,EAAA,MAAA2B;EAAA3B,EAAA,MAAA6B;EAAA7B,EAAA,MAAA8B;CAAA,OAAAA,KAAA9B,EAAA;CAAA,IAAA+B;CAAA,IAAA/B,EAAA,QAAA0B,MAAA1B,EAAA,QAAA8B,IAAA;EANJC,KAAA,oBAAA,uBAAA,UAAA;GAAwC,OAAAL;aACtCI;EAMF,CAAA;EAAkC9B,EAAA,MAAA0B;EAAA1B,EAAA,MAAA8B;EAAA9B,EAAA,MAAA+B;CAAA,OAAAA,KAAA/B,EAAA;CAAA,OAPlC+B;AAOkC,CAErC;AAEDtC,sBAAsBuC,cAAc"}
@@ -1,5 +1,4 @@
1
1
  import { ActionButtonElement, ActionButtonProps } from "../../utils/createActionButton.js";
2
-
3
2
  //#region src/primitives/composer/ComposerSend.d.ts
4
3
  declare const useComposerSend: () => (() => void) | null;
5
4
  declare namespace ComposerPrimitiveSend {
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerSend.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerSend.ts"],"mappings":";;;cAUa,eAAA;AAAA,kBAOI,qBAAA;EAAA,KACH,OAAA,GAAU,mBAAA;EAHvB;;;AAAA;EAAA,KAQa,KAAA,GAAQ,iBAAA,QAAyB,eAAA;AAAA;;;;;;;;;;;;;AAAe;AAiB9D;cAAa,qBAAA,kBAAqB,yBAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,iBAAA,oBAAA,oBAAA,CAAA,iBAAA"}
1
+ {"version":3,"file":"ComposerSend.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerSend.ts"],"mappings":";;cAUa;kBAOI;OACH,UAAU;;;;;OAKV,QAAQ,yBAAyB;;;;;;;;;;;;;;;;cAiBlC,uCAAqB,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA"}
@@ -1,5 +1,4 @@
1
1
  import { ActionButtonElement, ActionButtonProps } from "../../utils/createActionButton.js";
2
-
3
2
  //#region src/primitives/composer/ComposerStopDictation.d.ts
4
3
  declare const useComposerStopDictation: () => (() => void) | null;
5
4
  declare namespace ComposerPrimitiveStopDictation {
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerStopDictation.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerStopDictation.ts"],"mappings":";;;cAWM,wBAAA;AAAA,kBAYW,8BAAA;EAAA,KACH,OAAA,GAAU,mBAAA;EAAA,KACV,KAAA,GAAQ,iBAAA,QAAyB,wBAAA;AAAA;;AAJ9C;AAED;;;;;;;;;;cAiBa,8BAAA,kBAA8B,yBAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,iBAAA,oBAAA,oBAAA,CAAA,iBAAA"}
1
+ {"version":3,"file":"ComposerStopDictation.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerStopDictation.ts"],"mappings":";;cAWM;kBAYW;OACH,UAAU;OACV,QAAQ,yBAAyB;;;;;;;;;;;;;;cAelC,gDAA8B,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA"}
@@ -3,7 +3,6 @@ import { TriggerBehavior } from "./triggerSelectionResource.js";
3
3
  import { TriggerPopoverResourceOutput } from "./TriggerPopoverResource.js";
4
4
  import { Unstable_TriggerAdapter } from "@assistant-ui/core";
5
5
  import { ComponentPropsWithoutRef, ComponentRef } from "react";
6
-
7
6
  //#region src/primitives/composer/trigger/TriggerPopover.d.ts
8
7
  declare const useTriggerPopoverScopeContext: () => TriggerPopoverResourceOutput;
9
8
  declare const useTriggerPopoverScopeContextOptional: () => TriggerPopoverResourceOutput | null;
@@ -16,8 +15,11 @@ declare const useTriggerBehaviorRegistration: () => TriggerBehaviorRegistration;
16
15
  declare namespace ComposerPrimitiveTriggerPopover {
17
16
  type Element = ComponentRef<typeof Primitive.div>;
18
17
  type Props = Omit<ComponentPropsWithoutRef<typeof Primitive.div>, "onSelect"> & {
19
- /** The character(s) that activate this trigger (e.g. `"@"`, `"/"`). Also serves as the trigger identity within the root. */readonly char: string; /** Adapter providing categories and items. */
20
- readonly adapter?: Unstable_TriggerAdapter | undefined; /** Whether the adapter is resolving items, surfaced to the popover scope for async sources. @default false */
18
+ /** The character(s) that activate this trigger (e.g. `"@"`, `"/"`). Also serves as the trigger identity within the root. */
19
+ readonly char: string;
20
+ /** Adapter providing categories and items. */
21
+ readonly adapter?: Unstable_TriggerAdapter | undefined;
22
+ /** Whether the adapter is resolving items, surfaced to the popover scope for async sources. @default false */
21
23
  readonly isLoading?: boolean | undefined;
22
24
  };
23
25
  }
@@ -53,8 +55,11 @@ declare const ComposerPrimitiveTriggerPopover: import("react").ForwardRefExoticC
53
55
  }, "ref"> & {
54
56
  render?: import("react").ReactElement | undefined;
55
57
  } & import("react").RefAttributes<HTMLDivElement>, "ref">, "onSelect"> & {
56
- /** The character(s) that activate this trigger (e.g. `"@"`, `"/"`). Also serves as the trigger identity within the root. */readonly char: string; /** Adapter providing categories and items. */
57
- readonly adapter?: Unstable_TriggerAdapter | undefined; /** Whether the adapter is resolving items, surfaced to the popover scope for async sources. @default false */
58
+ /** The character(s) that activate this trigger (e.g. `"@"`, `"/"`). Also serves as the trigger identity within the root. */
59
+ readonly char: string;
60
+ /** Adapter providing categories and items. */
61
+ readonly adapter?: Unstable_TriggerAdapter | undefined;
62
+ /** Whether the adapter is resolving items, surfaced to the popover scope for async sources. @default false */
58
63
  readonly isLoading?: boolean | undefined;
59
64
  } & import("react").RefAttributes<HTMLDivElement>>;
60
65
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopover.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopover.tsx"],"mappings":";;;;;;;cAkCa,6BAAA,QAA6B,4BAOzC;AAAA,cAEY,qCAAA,QAAqC,4BAAA;AATlD;AAAA,KAaY,2BAAA;EACV,QAAA,CAAS,QAAA,EAAU,eAAe;AAAA;AAPnC;AAAA,cAcY,8BAAA,QAA8B,2BAO1C;AAAA,kBAEgB,+BAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,GAAA;EAAA,KACxC,KAAA,GAAQ,IAAA,CAClB,wBAAA,QAAgC,SAAA,CAAU,GAAA;IAxBI,qIA4BrC,IAAA,UAxB0B;IAAA,SA0B1B,OAAA,GAAU,uBAAA,cAzBa;IAAA,SA2BvB,SAAA;EAAA;AAAA;;AA3BuB;AAOpC;;;;AAOC;AAED;;;;;;;;;;;;;;;;;;;;cA0Ca,+BAAA,kBAA+B,yBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,cAAA,oBAAA,cAAA,CAAA,cAAA;;;;;EA/BtB,mJA6JrB;EAAA,mBA/JsB,uBAAA,cAiCqB;EAAA"}
1
+ {"version":3,"file":"TriggerPopover.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopover.tsx"],"mappings":";;;;;;cAkCa,qCAA6B;cAS7B,6CAAqC;;KAItC;EACV,SAAS,UAAU;;;cAOR,sCAA8B;kBAS1B;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,KAClB,gCAAgC,UAAU;;aAIjC;;aAEA,UAAU;;aAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+BA,iDAA+B,0BAAA,KAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;;;;;qBAjCrB"}
@@ -1,11 +1,13 @@
1
1
  import { Unstable_DirectiveFormatter, Unstable_TriggerItem } from "@assistant-ui/core";
2
2
  import { FC } from "react";
3
-
4
3
  //#region src/primitives/composer/trigger/TriggerPopoverAction.d.ts
5
4
  declare namespace ComposerPrimitiveTriggerPopoverAction {
6
5
  type Props = {
7
- /** Defaults to `unstable_defaultDirectiveFormatter`. */readonly formatter?: Unstable_DirectiveFormatter | undefined; /** Fires the moment an item is selected; runs regardless of `removeOnExecute`. */
8
- readonly onExecute: (item: Unstable_TriggerItem) => void; /** When true, strips the trigger text after executing. Defaults to `false` (keeps audit-trail chip). */
6
+ /** Defaults to `unstable_defaultDirectiveFormatter`. */
7
+ readonly formatter?: Unstable_DirectiveFormatter | undefined;
8
+ /** Fires the moment an item is selected; runs regardless of `removeOnExecute`. */
9
+ readonly onExecute: (item: Unstable_TriggerItem) => void;
10
+ /** When true, strips the trigger text after executing. Defaults to `false` (keeps audit-trail chip). */
9
11
  readonly removeOnExecute?: boolean | undefined;
10
12
  };
11
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverAction.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverAction.tsx"],"mappings":";;;;kBAWiB,qCAAA;EAAA,KACH,KAAA;IADG,iEAGJ,SAAA,GAAY,2BAAA,cAAA;IAAA,SAEZ,SAAA,GAAY,IAAA,EAAM,oBAAoB,WAJrC;IAAA,SAMD,eAAA;EAAA;AAAA;;;;;AAAe;AAqB5B;;;;;;;;AAC6C;;;;cADhC,qCAAA,EAAuC,EAAE,CACpD,qCAAA,CAAsC,KAAA"}
1
+ {"version":3,"file":"TriggerPopoverAction.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverAction.tsx"],"mappings":";;;kBAWiB;OACH;;aAED,YAAY;;aAEZ,YAAY,MAAM;;aAElB;;;;;;;;;;;;;;;;;;;;cAqBA,uCAAuC,GAClD,sCAAsC"}
@@ -25,12 +25,13 @@ const ComposerPrimitiveTriggerPopoverAction = ({ formatter, onExecute, removeOnE
25
25
  const onExecuteRef = useRef(onExecute);
26
26
  onExecuteRef.current = onExecute;
27
27
  useEffect(() => {
28
- return register({
28
+ const behavior = {
29
29
  kind: "action",
30
30
  formatter: formatter ?? unstable_defaultDirectiveFormatter,
31
31
  onExecute: (item) => onExecuteRef.current(item),
32
32
  ...removeOnExecute !== void 0 ? { removeOnExecute } : {}
33
- });
33
+ };
34
+ return register(behavior);
34
35
  }, [
35
36
  register,
36
37
  formatter,
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverAction.js","names":["Unstable_DirectiveFormatter","Unstable_TriggerItem","unstable_defaultDirectiveFormatter","useEffect","useRef","FC","useTriggerBehaviorRegistration","TriggerBehavior","ComposerPrimitiveTriggerPopoverAction","Props","formatter","onExecute","item","removeOnExecute","register","onExecuteRef","current","behavior","kind","undefined","displayName"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverAction.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n Unstable_DirectiveFormatter,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport { unstable_defaultDirectiveFormatter } from \"@assistant-ui/core\";\nimport { useEffect, useRef, type FC } from \"react\";\nimport { useTriggerBehaviorRegistration } from \"./TriggerPopover\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\n\nexport namespace ComposerPrimitiveTriggerPopoverAction {\n export type Props = {\n /** Defaults to `unstable_defaultDirectiveFormatter`. */\n readonly formatter?: Unstable_DirectiveFormatter | undefined;\n /** Fires the moment an item is selected; runs regardless of `removeOnExecute`. */\n readonly onExecute: (item: Unstable_TriggerItem) => void;\n /** When true, strips the trigger text after executing. Defaults to `false` (keeps audit-trail chip). */\n readonly removeOnExecute?: boolean | undefined;\n };\n}\n\n/**\n * Configures a `<TriggerPopover>` to fire a handler when an item is selected,\n * optionally leaving a directive chip behind as an audit trail. Render exactly\n * one behavior sub-primitive per `<TriggerPopover>`.\n *\n * Exposed as `ComposerPrimitive.Unstable_TriggerPopover.Action`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"/\" adapter={slashAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Action\n * onExecute={(item) => commandHandlers[item.id]?.()}\n * removeOnExecute={false}\n * />\n * </ComposerPrimitive.Unstable_TriggerPopover>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopoverAction: FC<\n ComposerPrimitiveTriggerPopoverAction.Props\n> = ({ formatter, onExecute, removeOnExecute }) => {\n const { register } = useTriggerBehaviorRegistration();\n const onExecuteRef = useRef(onExecute);\n onExecuteRef.current = onExecute;\n\n useEffect(() => {\n const behavior: TriggerBehavior = {\n kind: \"action\",\n formatter: formatter ?? unstable_defaultDirectiveFormatter,\n onExecute: (item) => onExecuteRef.current(item),\n ...(removeOnExecute !== undefined ? { removeOnExecute } : {}),\n };\n return register(behavior);\n }, [register, formatter, removeOnExecute]);\n\n return null;\n};\n\nComposerPrimitiveTriggerPopoverAction.displayName =\n \"ComposerPrimitive.TriggerPopoverAction\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuCA,MAAaQ,yCAER,EAAEE,WAAWC,WAAWE,sBAAsB;CACjD,MAAM,EAAEC,aAAaR,+BAA+B;CACpD,MAAMS,eAAeX,OAAOO,SAAS;CACrCI,aAAaC,UAAUL;CAEvBR,gBAAgB;EAOd,OAAOW,SAASG;GALdC,MAAM;GACNR,WAAWA,aAAaR;GACxBS,YAAYC,SAASG,aAAaC,QAAQJ,IAAI;GAC9C,GAAIC,oBAAoBM,KAAAA,IAAY,EAAEN,gBAAgB,IAAI,CAAC;EAE7CI,CAAQ;CAC1B,GAAG;EAACH;EAAUJ;EAAWG;CAAe,CAAC;CAEzC,OAAO;AACT;AAEAL,sCAAsCY,cACpC"}
1
+ {"version":3,"file":"TriggerPopoverAction.js","names":["Unstable_DirectiveFormatter","Unstable_TriggerItem","unstable_defaultDirectiveFormatter","useEffect","useRef","FC","useTriggerBehaviorRegistration","TriggerBehavior","ComposerPrimitiveTriggerPopoverAction","Props","formatter","onExecute","item","removeOnExecute","register","onExecuteRef","current","behavior","kind","undefined","displayName"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverAction.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n Unstable_DirectiveFormatter,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport { unstable_defaultDirectiveFormatter } from \"@assistant-ui/core\";\nimport { useEffect, useRef, type FC } from \"react\";\nimport { useTriggerBehaviorRegistration } from \"./TriggerPopover\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\n\nexport namespace ComposerPrimitiveTriggerPopoverAction {\n export type Props = {\n /** Defaults to `unstable_defaultDirectiveFormatter`. */\n readonly formatter?: Unstable_DirectiveFormatter | undefined;\n /** Fires the moment an item is selected; runs regardless of `removeOnExecute`. */\n readonly onExecute: (item: Unstable_TriggerItem) => void;\n /** When true, strips the trigger text after executing. Defaults to `false` (keeps audit-trail chip). */\n readonly removeOnExecute?: boolean | undefined;\n };\n}\n\n/**\n * Configures a `<TriggerPopover>` to fire a handler when an item is selected,\n * optionally leaving a directive chip behind as an audit trail. Render exactly\n * one behavior sub-primitive per `<TriggerPopover>`.\n *\n * Exposed as `ComposerPrimitive.Unstable_TriggerPopover.Action`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"/\" adapter={slashAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Action\n * onExecute={(item) => commandHandlers[item.id]?.()}\n * removeOnExecute={false}\n * />\n * </ComposerPrimitive.Unstable_TriggerPopover>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopoverAction: FC<\n ComposerPrimitiveTriggerPopoverAction.Props\n> = ({ formatter, onExecute, removeOnExecute }) => {\n const { register } = useTriggerBehaviorRegistration();\n const onExecuteRef = useRef(onExecute);\n onExecuteRef.current = onExecute;\n\n useEffect(() => {\n const behavior: TriggerBehavior = {\n kind: \"action\",\n formatter: formatter ?? unstable_defaultDirectiveFormatter,\n onExecute: (item) => onExecuteRef.current(item),\n ...(removeOnExecute !== undefined ? { removeOnExecute } : {}),\n };\n return register(behavior);\n }, [register, formatter, removeOnExecute]);\n\n return null;\n};\n\nComposerPrimitiveTriggerPopoverAction.displayName =\n \"ComposerPrimitive.TriggerPopoverAction\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuCA,MAAaQ,yCAER,EAAEE,WAAWC,WAAWE,sBAAsB;CACjD,MAAM,EAAEC,aAAaR,+BAA+B;CACpD,MAAMS,eAAeX,OAAOO,SAAS;CACrCI,aAAaC,UAAUL;CAEvBR,gBAAgB;EACd,MAAMc,WAA4B;GAChCC,MAAM;GACNR,WAAWA,aAAaR;GACxBS,YAAYC,SAASG,aAAaC,QAAQJ,IAAI;GAC9C,GAAIC,oBAAoBM,KAAAA,IAAY,EAAEN,gBAAgB,IAAI,CAAC;EAC7D;EACA,OAAOC,SAASG,QAAQ;CAC1B,GAAG;EAACH;EAAUJ;EAAWG;CAAe,CAAC;CAEzC,OAAO;AACT;AAEAL,sCAAsCY,cACpC"}
@@ -1,6 +1,5 @@
1
1
  import { Primitive } from "../../../utils/Primitive.js";
2
2
  import { ComponentPropsWithoutRef, ComponentRef } from "react";
3
-
4
3
  //#region src/primitives/composer/trigger/TriggerPopoverBack.d.ts
5
4
  declare namespace ComposerPrimitiveTriggerPopoverBack {
6
5
  type Element = ComponentRef<typeof Primitive.button>;
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverBack.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverBack.tsx"],"mappings":";;;;kBAWiB,mCAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,MAAA;EAAA,KACxC,KAAA,GAAQ,wBAAA,QAAgC,SAAA,CAAU,MAAA;AAAA;;;;;cAOnD,mCAAA,kBAAmC,yBAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,iBAAA,oBAAA,oBAAA,CAAA,iBAAA"}
1
+ {"version":3,"file":"TriggerPopoverBack.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverBack.tsx"],"mappings":";;;kBAWiB;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,gCAAgC,UAAU;;;;;;cAOnD,qDAAmC,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA"}
@@ -1,7 +1,6 @@
1
1
  import { Primitive } from "../../../utils/Primitive.js";
2
2
  import { Unstable_TriggerCategory } from "@assistant-ui/core";
3
3
  import { ComponentPropsWithoutRef, ComponentRef, ReactNode } from "react";
4
-
5
4
  //#region src/primitives/composer/trigger/TriggerPopoverCategories.d.ts
6
5
  declare namespace ComposerPrimitiveTriggerPopoverCategories {
7
6
  type Element = ComponentRef<typeof Primitive.div>;
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverCategories.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverCategories.tsx"],"mappings":";;;;;kBAciB,yCAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,GAAA;EAAA,KACxC,KAAA,GAAQ,IAAA,CAClB,wBAAA,QAAgC,SAAA,CAAU,GAAA;IAG1C,QAAA,GAAW,UAAA,WAAqB,wBAAA,OAA+B,SAAA;EAAA;AAAA;;;;;cAQtD,yCAAA,kBAAyC,yBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,cAAA,oBAAA,cAAA,CAAA,cAAA;;;;;aARvC,UAAA,WAAqB,wBAAA,OAA+B,SAAA;AAAA;kBAgClD,2CAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,MAAA;EAAA,KACxC,KAAA,GAAQ,wBAAA,QAAgC,SAAA,CAAU,MAAA;IAC5D,UAAA;EAAA;AAAA;;;;;cAQS,2CAAA,kBAA2C,yBAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,iBAAA,oBAAA,oBAAA,CAAA,iBAAA"}
1
+ {"version":3,"file":"TriggerPopoverCategories.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverCategories.tsx"],"mappings":";;;;kBAciB;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,KAClB,gCAAgC,UAAU;IAG1C,WAAW,qBAAqB,+BAA+B;;;;;;;cAQtD,2DAAyC,0BAAA,KAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;;aARvC,qBAAqB,+BAA+B;;kBAgClD;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,gCAAgC,UAAU;IAC5D;;;;;;;cAQS,6DAA2C,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA"}
@@ -1,10 +1,11 @@
1
1
  import { Unstable_DirectiveFormatter, Unstable_TriggerItem } from "@assistant-ui/core";
2
2
  import { FC } from "react";
3
-
4
3
  //#region src/primitives/composer/trigger/TriggerPopoverDirective.d.ts
5
4
  declare namespace ComposerPrimitiveTriggerPopoverDirective {
6
5
  type Props = {
7
- /** Defaults to `unstable_defaultDirectiveFormatter`. */readonly formatter?: Unstable_DirectiveFormatter | undefined; /** Fires after an item has been inserted into the composer. */
6
+ /** Defaults to `unstable_defaultDirectiveFormatter`. */
7
+ readonly formatter?: Unstable_DirectiveFormatter | undefined;
8
+ /** Fires after an item has been inserted into the composer. */
8
9
  readonly onInserted?: ((item: Unstable_TriggerItem) => void) | undefined;
9
10
  };
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverDirective.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverDirective.tsx"],"mappings":";;;;kBAWiB,wCAAA;EAAA,KACH,KAAA;IADG,iEAGJ,SAAA,GAAY,2BAAA,cAAA;IAAA,SAEZ,UAAA,KAAe,IAAA,EAAM,oBAAoB;EAAA;AAAA;;;;;;AAAA;AAoBtD;;;;;;;;AACgD;;cADnC,wCAAA,EAA0C,EAAE,CACvD,wCAAA,CAAyC,KAAA"}
1
+ {"version":3,"file":"TriggerPopoverDirective.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverDirective.tsx"],"mappings":";;;kBAWiB;OACH;;aAED,YAAY;;aAEZ,eAAe,MAAM;;;;;;;;;;;;;;;;;;;cAoBrB,0CAA0C,GACrD,yCAAyC"}
@@ -1,7 +1,6 @@
1
1
  import { Primitive } from "../../../utils/Primitive.js";
2
2
  import { Unstable_TriggerItem } from "@assistant-ui/core";
3
3
  import { ComponentPropsWithoutRef, ComponentRef, ReactNode } from "react";
4
-
5
4
  //#region src/primitives/composer/trigger/TriggerPopoverItems.d.ts
6
5
  declare namespace ComposerPrimitiveTriggerPopoverItems {
7
6
  type Element = ComponentRef<typeof Primitive.div>;
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverItems.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverItems.tsx"],"mappings":";;;;;kBAciB,oCAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,GAAA;EAAA,KACxC,KAAA,GAAQ,IAAA,CAClB,wBAAA,QAAgC,SAAA,CAAU,GAAA;IAG1C,QAAA,GAAW,KAAA,WAAgB,oBAAA,OAA2B,SAAA;EAAA;AAAA;;;;;cAQ7C,oCAAA,kBAAoC,yBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,cAAA,oBAAA,cAAA,CAAA,cAAA;;;;;aARlC,KAAA,WAAgB,oBAAA,OAA2B,SAAA;AAAA;kBAgCzC,mCAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,MAAA;EAAA,KACxC,KAAA,GAAQ,wBAAA,QAAgC,SAAA,CAAU,MAAA;IAC5D,IAAA,EAAM,oBAAA;IACN,KAAA;EAAA;AAAA;;;;;cAQS,mCAAA,kBAAmC,yBAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,iBAAA,oBAAA,oBAAA,CAAA,iBAAA;;;;;QATtC,oBAAA"}
1
+ {"version":3,"file":"TriggerPopoverItems.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverItems.tsx"],"mappings":";;;;kBAciB;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,KAClB,gCAAgC,UAAU;IAG1C,WAAW,gBAAgB,2BAA2B;;;;;;;cAQ7C,sDAAoC,0BAAA,KAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;;aARlC,gBAAgB,2BAA2B;;kBAgCzC;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,gCAAgC,UAAU;IAC5D,MAAM;IACN;;;;;;;cAQS,qDAAmC,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;;QATtC"}
@@ -2,7 +2,6 @@ import { SelectItemOverride, TriggerBehavior } from "./triggerSelectionResource.
2
2
  import { TriggerPopoverKeyEvent } from "./triggerKeyboardResource.js";
3
3
  import { AssistantClient } from "@assistant-ui/store";
4
4
  import { Unstable_TriggerAdapter, Unstable_TriggerCategory, Unstable_TriggerItem } from "@assistant-ui/core";
5
-
6
5
  //#region src/primitives/composer/trigger/TriggerPopoverResource.d.ts
7
6
  /** @deprecated Use `TriggerBehavior`. */
8
7
  type OnSelectBehavior = TriggerBehavior;
@@ -13,14 +12,18 @@ type TriggerPopoverResourceOutput = {
13
12
  readonly categories: readonly Unstable_TriggerCategory[];
14
13
  readonly items: readonly Unstable_TriggerItem[];
15
14
  readonly highlightedIndex: number;
16
- readonly isSearchMode: boolean; /** Whether the adapter is currently resolving items (async sources). */
17
- readonly isLoading: boolean; /** Stable ID prefix for generating accessible element IDs. */
18
- readonly popoverId: string; /** ID of the currently highlighted item (for aria-activedescendant). */
15
+ readonly isSearchMode: boolean;
16
+ /** Whether the adapter is currently resolving items (async sources). */
17
+ readonly isLoading: boolean;
18
+ /** Stable ID prefix for generating accessible element IDs. */
19
+ readonly popoverId: string;
20
+ /** ID of the currently highlighted item (for aria-activedescendant). */
19
21
  readonly highlightedItemId: string | undefined;
20
22
  selectCategory(categoryId: string): void;
21
23
  goBack(): void;
22
24
  selectItem(item: Unstable_TriggerItem): void;
23
- close(): void; /** Move the highlight to an entry index (e.g. from pointer hover). Out-of-range values are ignored. */
25
+ close(): void;
26
+ /** Move the highlight to an entry index (e.g. from pointer hover). Out-of-range values are ignored. */
24
27
  highlightIndex(index: number): void;
25
28
  handleKeyDown(e: {
26
29
  readonly key: string;
@@ -35,7 +38,8 @@ declare const TriggerPopoverResource: import("@assistant-ui/tap").Resource<Trigg
35
38
  text: string;
36
39
  triggerChar: string;
37
40
  behavior: TriggerBehavior | undefined;
38
- aui: AssistantClient; /** Stable ID for accessible element IDs (pass React's useId() from component layer). */
41
+ aui: AssistantClient;
42
+ /** Stable ID for accessible element IDs (pass React's useId() from component layer). */
39
43
  popoverId: string;
40
44
  isLoading: boolean;
41
45
  }]>;