@assistant-ui/react 0.12.24 → 0.12.26

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 (485) hide show
  1. package/dist/augmentations.d.ts.map +1 -1
  2. package/dist/client/InMemoryThreadList.d.ts.map +1 -1
  3. package/dist/client/InMemoryThreadList.js +1 -0
  4. package/dist/client/InMemoryThreadList.js.map +1 -1
  5. package/dist/client/SingleThreadList.d.ts.map +1 -1
  6. package/dist/client/SingleThreadList.js +1 -0
  7. package/dist/client/SingleThreadList.js.map +1 -1
  8. package/dist/context/providers/MessageProvider.d.ts +1 -1
  9. package/dist/context/providers/MessageProvider.d.ts.map +1 -1
  10. package/dist/context/react/ThreadViewportContext.d.ts +3 -3
  11. package/dist/context/react/ThreadViewportContext.d.ts.map +1 -1
  12. package/dist/context/react/utils/createContextHook.d.ts +1 -1
  13. package/dist/context/react/utils/createContextHook.d.ts.map +1 -1
  14. package/dist/context/react/utils/createContextHook.js.map +1 -1
  15. package/dist/context/react/utils/createContextStoreHook.d.ts +1 -1
  16. package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
  17. package/dist/context/react/utils/createStateHookForRuntime.d.ts +1 -1
  18. package/dist/context/react/utils/createStateHookForRuntime.d.ts.map +1 -1
  19. package/dist/context/react/utils/createStateHookForRuntime.js +1 -0
  20. package/dist/context/react/utils/createStateHookForRuntime.js.map +1 -1
  21. package/dist/devtools/DevToolsHooks.d.ts +1 -1
  22. package/dist/devtools/DevToolsHooks.d.ts.map +1 -1
  23. package/dist/devtools/DevToolsHooks.js +4 -0
  24. package/dist/devtools/DevToolsHooks.js.map +1 -1
  25. package/dist/index.d.ts +3 -5
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +6 -32
  28. package/dist/index.js.map +1 -1
  29. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +3 -3
  30. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
  31. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  32. package/dist/legacy-runtime/cloud/auiV0.d.ts +3 -3
  33. package/dist/legacy-runtime/cloud/auiV0.d.ts.map +1 -1
  34. package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
  35. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts +1 -1
  36. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  37. package/dist/legacy-runtime/hooks/AssistantContext.d.ts +1 -1
  38. package/dist/legacy-runtime/hooks/AssistantContext.d.ts.map +1 -1
  39. package/dist/legacy-runtime/hooks/AttachmentContext.d.ts +1 -1
  40. package/dist/legacy-runtime/hooks/AttachmentContext.d.ts.map +1 -1
  41. package/dist/legacy-runtime/hooks/ComposerContext.d.ts +1 -1
  42. package/dist/legacy-runtime/hooks/ComposerContext.d.ts.map +1 -1
  43. package/dist/legacy-runtime/hooks/MessageContext.d.ts +1 -1
  44. package/dist/legacy-runtime/hooks/MessageContext.d.ts.map +1 -1
  45. package/dist/legacy-runtime/hooks/MessagePartContext.d.ts +1 -1
  46. package/dist/legacy-runtime/hooks/MessagePartContext.d.ts.map +1 -1
  47. package/dist/legacy-runtime/hooks/ThreadContext.d.ts +1 -1
  48. package/dist/legacy-runtime/hooks/ThreadContext.d.ts.map +1 -1
  49. package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts +1 -1
  50. package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts.map +1 -1
  51. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts +1 -1
  52. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts.map +1 -1
  53. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts +2 -2
  54. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts.map +1 -1
  55. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts +3 -3
  56. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  57. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +14 -1
  58. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  59. package/dist/model-context/frame/useAssistantFrameHost.d.ts +1 -1
  60. package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -1
  61. package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -1
  62. package/dist/model-context/makeAssistantVisible.d.ts +1 -1
  63. package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
  64. package/dist/primitives/actionBar/ActionBarCopy.d.ts +1 -1
  65. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  66. package/dist/primitives/actionBar/ActionBarEdit.d.ts +1 -1
  67. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
  68. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +1 -1
  69. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
  70. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +1 -1
  71. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -1
  72. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +1 -1
  73. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -1
  74. package/dist/primitives/actionBar/ActionBarReload.d.ts +1 -1
  75. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
  76. package/dist/primitives/actionBar/ActionBarRoot.d.ts +1 -1
  77. package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
  78. package/dist/primitives/actionBar/ActionBarSpeak.d.ts +1 -1
  79. package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
  80. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +1 -1
  81. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
  82. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +5 -2
  83. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -1
  84. package/dist/primitives/actionBarMore/ActionBarMoreContent.js +3 -2
  85. package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -1
  86. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +7 -4
  87. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -1
  88. package/dist/primitives/actionBarMore/ActionBarMoreItem.js +2 -2
  89. package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -1
  90. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +1 -1
  91. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -1
  92. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -1
  93. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +7 -4
  94. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -1
  95. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +2 -2
  96. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -1
  97. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +7 -4
  98. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -1
  99. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +2 -2
  100. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -1
  101. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +1 -1
  102. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -1
  103. package/dist/primitives/assistantModal/AssistantModalAnchor.js +1 -1
  104. package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
  105. package/dist/primitives/assistantModal/AssistantModalContent.d.ts +1 -1
  106. package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
  107. package/dist/primitives/assistantModal/AssistantModalContent.js +1 -1
  108. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  109. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +1 -1
  110. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
  111. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  112. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +1 -1
  113. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -1
  114. package/dist/primitives/assistantModal/AssistantModalTrigger.js +1 -1
  115. package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
  116. package/dist/primitives/attachment/AttachmentRemove.d.ts +1 -1
  117. package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -1
  118. package/dist/primitives/attachment/AttachmentRoot.d.ts +1 -1
  119. package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
  120. package/dist/primitives/attachment/AttachmentRoot.js +1 -1
  121. package/dist/primitives/attachment/AttachmentRoot.js.map +1 -1
  122. package/dist/primitives/attachment/AttachmentThumb.d.ts +1 -1
  123. package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -1
  124. package/dist/primitives/attachment/AttachmentThumb.js +1 -1
  125. package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
  126. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +1 -1
  127. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  128. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +1 -1
  129. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  130. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +1 -1
  131. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
  132. package/dist/primitives/branchPicker/BranchPickerRoot.js +1 -1
  133. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  134. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +1 -1
  135. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
  136. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +1 -1
  137. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -1
  138. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +1 -1
  139. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -1
  140. package/dist/primitives/composer/ComposerAddAttachment.d.ts +1 -1
  141. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
  142. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +1 -1
  143. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
  144. package/dist/primitives/composer/ComposerAttachmentDropzone.js +3 -2
  145. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
  146. package/dist/primitives/composer/ComposerCancel.d.ts +1 -1
  147. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
  148. package/dist/primitives/composer/ComposerDictationTranscript.d.ts +1 -1
  149. package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -1
  150. package/dist/primitives/composer/ComposerDictationTranscript.js +1 -1
  151. package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
  152. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  153. package/dist/primitives/composer/ComposerInput.js +28 -0
  154. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  155. package/dist/primitives/composer/ComposerInputPluginContext.d.ts +11 -3
  156. package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
  157. package/dist/primitives/composer/ComposerInputPluginContext.js +13 -9
  158. package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -1
  159. package/dist/primitives/composer/ComposerRoot.d.ts +1 -1
  160. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
  161. package/dist/primitives/composer/ComposerSend.d.ts +1 -1
  162. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  163. package/dist/primitives/composer/trigger/TriggerPopover.d.ts +60 -0
  164. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -0
  165. package/dist/primitives/composer/trigger/TriggerPopover.js +108 -0
  166. package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -0
  167. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +31 -0
  168. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -0
  169. package/dist/primitives/composer/trigger/TriggerPopoverAction.js +39 -0
  170. package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -0
  171. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -1
  172. package/dist/primitives/composer/trigger/TriggerPopoverBack.js +3 -3
  173. package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -1
  174. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -1
  175. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +11 -9
  176. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -1
  177. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +28 -0
  178. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -0
  179. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +37 -0
  180. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -0
  181. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -1
  182. package/dist/primitives/composer/trigger/TriggerPopoverItems.js +9 -6
  183. package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -1
  184. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +16 -17
  185. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
  186. package/dist/primitives/composer/trigger/TriggerPopoverResource.js +53 -248
  187. package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -1
  188. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +60 -0
  189. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -0
  190. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +117 -0
  191. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -0
  192. package/dist/primitives/composer/trigger/detectTrigger.js +1 -1
  193. package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -1
  194. package/dist/primitives/composer/trigger/index.d.ts +16 -3
  195. package/dist/primitives/composer/trigger/index.d.ts.map +1 -1
  196. package/dist/primitives/composer/trigger/index.js +9 -2
  197. package/dist/primitives/composer/trigger/index.js.map +1 -1
  198. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +22 -0
  199. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -0
  200. package/dist/primitives/composer/trigger/triggerDetectionResource.js +17 -0
  201. package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -0
  202. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +45 -0
  203. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -0
  204. package/dist/primitives/composer/trigger/triggerKeyboardResource.js +94 -0
  205. package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -0
  206. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +31 -0
  207. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -0
  208. package/dist/primitives/composer/trigger/triggerNavigationResource.js +94 -0
  209. package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -0
  210. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +42 -0
  211. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -0
  212. package/dist/primitives/composer/trigger/triggerSelectionResource.js +62 -0
  213. package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -0
  214. package/dist/primitives/composer.d.ts +8 -13
  215. package/dist/primitives/composer.d.ts.map +1 -1
  216. package/dist/primitives/composer.js +7 -17
  217. package/dist/primitives/composer.js.map +1 -1
  218. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +14 -0
  219. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -0
  220. package/dist/primitives/dropdownMenuRenderPrimitives.js +7 -0
  221. package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -0
  222. package/dist/primitives/error/ErrorMessage.d.ts +1 -1
  223. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
  224. package/dist/primitives/error/ErrorMessage.js +1 -1
  225. package/dist/primitives/error/ErrorMessage.js.map +1 -1
  226. package/dist/primitives/error/ErrorRoot.d.ts +1 -1
  227. package/dist/primitives/error/ErrorRoot.d.ts.map +1 -1
  228. package/dist/primitives/error/ErrorRoot.js +1 -1
  229. package/dist/primitives/error/ErrorRoot.js.map +1 -1
  230. package/dist/primitives/message/MessageError.d.ts +1 -1
  231. package/dist/primitives/message/MessageError.d.ts.map +1 -1
  232. package/dist/primitives/message/MessagePartsGrouped.d.ts +1 -1
  233. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  234. package/dist/primitives/message/MessageRoot.d.ts +1 -1
  235. package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
  236. package/dist/primitives/messagePart/MessagePartImage.d.ts +1 -1
  237. package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -1
  238. package/dist/primitives/messagePart/MessagePartImage.js +2 -1
  239. package/dist/primitives/messagePart/MessagePartImage.js.map +1 -1
  240. package/dist/primitives/messagePart/MessagePartInProgress.d.ts +1 -1
  241. package/dist/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  242. package/dist/primitives/messagePart/MessagePartText.d.ts +2 -2
  243. package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
  244. package/dist/primitives/queueItem/QueueItemRemove.d.ts +1 -1
  245. package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -1
  246. package/dist/primitives/queueItem/QueueItemSteer.d.ts +1 -1
  247. package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -1
  248. package/dist/primitives/suggestion/SuggestionDescription.d.ts +1 -1
  249. package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -1
  250. package/dist/primitives/suggestion/SuggestionDescription.js +1 -1
  251. package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -1
  252. package/dist/primitives/suggestion/SuggestionTitle.d.ts +1 -1
  253. package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -1
  254. package/dist/primitives/suggestion/SuggestionTitle.js +1 -1
  255. package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -1
  256. package/dist/primitives/suggestion/SuggestionTrigger.d.ts +1 -1
  257. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
  258. package/dist/primitives/thread/ThreadRoot.d.ts +1 -1
  259. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  260. package/dist/primitives/thread/ThreadRoot.js +1 -1
  261. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  262. package/dist/primitives/thread/ThreadScrollToBottom.d.ts +1 -1
  263. package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -1
  264. package/dist/primitives/thread/ThreadSuggestion.d.ts +1 -1
  265. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  266. package/dist/primitives/thread/ThreadSuggestion.js +0 -2
  267. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
  268. package/dist/primitives/thread/ThreadViewport.d.ts +1 -1
  269. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  270. package/dist/primitives/thread/ThreadViewportFooter.d.ts +1 -1
  271. package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
  272. package/dist/primitives/threadList/ThreadListNew.d.ts +1 -1
  273. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
  274. package/dist/primitives/threadList/ThreadListRoot.d.ts +1 -1
  275. package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -1
  276. package/dist/primitives/threadList/ThreadListRoot.js +1 -1
  277. package/dist/primitives/threadList/ThreadListRoot.js.map +1 -1
  278. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +1 -1
  279. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
  280. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +1 -1
  281. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
  282. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +1 -1
  283. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
  284. package/dist/primitives/threadListItem/ThreadListItemRoot.js +1 -1
  285. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  286. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +1 -1
  287. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
  288. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +1 -1
  289. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
  290. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +5 -2
  291. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -1
  292. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +3 -2
  293. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
  294. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +7 -4
  295. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -1
  296. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +2 -2
  297. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -1
  298. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +1 -1
  299. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -1
  300. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -1
  301. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +7 -4
  302. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -1
  303. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +2 -2
  304. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -1
  305. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +7 -4
  306. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -1
  307. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +2 -2
  308. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
  309. package/dist/unstable/useMentionAdapter.d.ts +80 -0
  310. package/dist/unstable/useMentionAdapter.d.ts.map +1 -0
  311. package/dist/unstable/useMentionAdapter.js +129 -0
  312. package/dist/unstable/useMentionAdapter.js.map +1 -0
  313. package/dist/unstable/useSlashCommandAdapter.d.ts +32 -17
  314. package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
  315. package/dist/unstable/useSlashCommandAdapter.js +56 -32
  316. package/dist/unstable/useSlashCommandAdapter.js.map +1 -1
  317. package/dist/utils/Primitive.d.ts +6 -4
  318. package/dist/utils/Primitive.d.ts.map +1 -1
  319. package/dist/utils/Primitive.js +15 -8
  320. package/dist/utils/Primitive.js.map +1 -1
  321. package/dist/utils/createActionButton.d.ts +1 -1
  322. package/dist/utils/createActionButton.d.ts.map +1 -1
  323. package/dist/utils/hooks/useManagedRef.d.ts +1 -1
  324. package/dist/utils/hooks/useManagedRef.d.ts.map +1 -1
  325. package/dist/utils/hooks/useManagedRef.js.map +1 -1
  326. package/dist/utils/json/is-json.d.ts +1 -1
  327. package/dist/utils/json/is-json.d.ts.map +1 -1
  328. package/dist/utils/smooth/SmoothContext.d.ts +2 -2
  329. package/dist/utils/smooth/SmoothContext.d.ts.map +1 -1
  330. package/dist/utils/smooth/SmoothContext.js.map +1 -1
  331. package/package.json +13 -13
  332. package/src/augmentations.ts +2 -0
  333. package/src/client/InMemoryThreadList.ts +1 -0
  334. package/src/client/SingleThreadList.ts +1 -0
  335. package/src/context/providers/MessageProvider.tsx +1 -1
  336. package/src/context/providers/ThreadViewportProvider.tsx +1 -1
  337. package/src/context/react/ThreadViewportContext.ts +3 -3
  338. package/src/context/react/utils/createContextHook.ts +1 -1
  339. package/src/context/react/utils/createContextStoreHook.ts +2 -2
  340. package/src/context/react/utils/createStateHookForRuntime.ts +2 -1
  341. package/src/devtools/DevToolsHooks.ts +5 -1
  342. package/src/index.ts +27 -56
  343. package/src/legacy-runtime/AssistantRuntimeProvider.tsx +3 -3
  344. package/src/legacy-runtime/cloud/auiV0.ts +6 -3
  345. package/src/legacy-runtime/cloud/useCloudThreadListRuntime.ts +1 -1
  346. package/src/legacy-runtime/hooks/AssistantContext.ts +1 -1
  347. package/src/legacy-runtime/hooks/AttachmentContext.ts +1 -1
  348. package/src/legacy-runtime/hooks/ComposerContext.ts +1 -1
  349. package/src/legacy-runtime/hooks/MessageContext.ts +1 -1
  350. package/src/legacy-runtime/hooks/MessagePartContext.ts +1 -1
  351. package/src/legacy-runtime/hooks/ThreadContext.ts +1 -1
  352. package/src/legacy-runtime/hooks/ThreadListItemContext.ts +1 -1
  353. package/src/legacy-runtime/runtime-cores/assistant-transport/commandQueue.ts +1 -1
  354. package/src/legacy-runtime/runtime-cores/assistant-transport/types.ts +2 -2
  355. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.ts +20 -4
  356. package/src/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.test.ts +8 -2
  357. package/src/model-context/frame/useAssistantFrameHost.ts +1 -1
  358. package/src/model-context/makeAssistantVisible.tsx +3 -3
  359. package/src/primitives/actionBar/ActionBarCopy.tsx +1 -1
  360. package/src/primitives/actionBar/ActionBarEdit.ts +2 -2
  361. package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +1 -1
  362. package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +1 -1
  363. package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +1 -1
  364. package/src/primitives/actionBar/ActionBarReload.ts +2 -2
  365. package/src/primitives/actionBar/ActionBarRoot.tsx +1 -1
  366. package/src/primitives/actionBar/ActionBarSpeak.ts +2 -2
  367. package/src/primitives/actionBar/ActionBarStopSpeaking.tsx +1 -1
  368. package/src/primitives/actionBarMore/ActionBarMoreContent.tsx +10 -4
  369. package/src/primitives/actionBarMore/ActionBarMoreItem.tsx +7 -7
  370. package/src/primitives/actionBarMore/ActionBarMoreRoot.tsx +2 -2
  371. package/src/primitives/actionBarMore/ActionBarMoreSeparator.tsx +7 -5
  372. package/src/primitives/actionBarMore/ActionBarMoreTrigger.tsx +7 -7
  373. package/src/primitives/assistantModal/AssistantModalAnchor.tsx +6 -2
  374. package/src/primitives/assistantModal/AssistantModalContent.tsx +6 -2
  375. package/src/primitives/assistantModal/AssistantModalRoot.tsx +2 -2
  376. package/src/primitives/assistantModal/AssistantModalTrigger.tsx +6 -2
  377. package/src/primitives/attachment/AttachmentRemove.ts +2 -2
  378. package/src/primitives/attachment/AttachmentRoot.tsx +5 -1
  379. package/src/primitives/attachment/AttachmentThumb.tsx +5 -1
  380. package/src/primitives/branchPicker/BranchPickerNext.ts +2 -2
  381. package/src/primitives/branchPicker/BranchPickerPrevious.ts +2 -2
  382. package/src/primitives/branchPicker/BranchPickerRoot.tsx +5 -1
  383. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.ts +2 -2
  384. package/src/primitives/chainOfThought/ChainOfThoughtRoot.tsx +5 -1
  385. package/src/primitives/composer/ComposerAddAttachment.ts +2 -2
  386. package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +125 -0
  387. package/src/primitives/composer/ComposerAttachmentDropzone.tsx +11 -8
  388. package/src/primitives/composer/ComposerCancel.ts +2 -2
  389. package/src/primitives/composer/ComposerDictationTranscript.tsx +5 -1
  390. package/src/primitives/composer/ComposerInput.tsx +33 -1
  391. package/src/primitives/composer/ComposerInputPluginContext.tsx +37 -24
  392. package/src/primitives/composer/ComposerRoot.tsx +1 -1
  393. package/src/primitives/composer/ComposerSend.ts +2 -2
  394. package/src/primitives/composer/trigger/TriggerPopover.tsx +207 -0
  395. package/src/primitives/composer/trigger/TriggerPopoverAction.tsx +61 -0
  396. package/src/primitives/composer/trigger/TriggerPopoverBack.tsx +4 -3
  397. package/src/primitives/composer/trigger/TriggerPopoverCategories.tsx +14 -17
  398. package/src/primitives/composer/trigger/TriggerPopoverDirective.tsx +57 -0
  399. package/src/primitives/composer/trigger/TriggerPopoverItems.tsx +44 -40
  400. package/src/primitives/composer/trigger/TriggerPopoverResource.ts +76 -315
  401. package/src/primitives/composer/trigger/TriggerPopoverRootContext.tsx +212 -0
  402. package/src/primitives/composer/trigger/detectTrigger.test.ts +36 -0
  403. package/src/primitives/composer/trigger/detectTrigger.ts +1 -1
  404. package/src/primitives/composer/trigger/index.ts +21 -5
  405. package/src/primitives/composer/trigger/triggerDetectionResource.ts +43 -0
  406. package/src/primitives/composer/trigger/triggerKeyboardResource.ts +151 -0
  407. package/src/primitives/composer/trigger/triggerNavigationResource.ts +145 -0
  408. package/src/primitives/composer/trigger/triggerSelectionResource.ts +122 -0
  409. package/src/primitives/composer.ts +8 -18
  410. package/src/primitives/dropdownMenuRenderPrimitives.test.tsx +64 -0
  411. package/src/primitives/dropdownMenuRenderPrimitives.ts +15 -0
  412. package/src/primitives/error/ErrorMessage.tsx +5 -1
  413. package/src/primitives/error/ErrorRoot.tsx +5 -1
  414. package/src/primitives/message/MessageError.ts +1 -1
  415. package/src/primitives/message/MessagePartsGrouped.tsx +1 -1
  416. package/src/primitives/message/MessageRoot.tsx +1 -1
  417. package/src/primitives/messagePart/MessagePartImage.tsx +6 -1
  418. package/src/primitives/messagePart/MessagePartInProgress.ts +1 -1
  419. package/src/primitives/messagePart/MessagePartText.tsx +3 -3
  420. package/src/primitives/queueItem/QueueItemRemove.ts +2 -2
  421. package/src/primitives/queueItem/QueueItemSteer.ts +2 -2
  422. package/src/primitives/suggestion/SuggestionDescription.tsx +5 -1
  423. package/src/primitives/suggestion/SuggestionTitle.tsx +5 -1
  424. package/src/primitives/suggestion/SuggestionTrigger.ts +2 -2
  425. package/src/primitives/thread/ThreadRoot.tsx +5 -1
  426. package/src/primitives/thread/ThreadScrollToBottom.ts +2 -2
  427. package/src/primitives/thread/ThreadSuggestion.ts +2 -4
  428. package/src/primitives/thread/ThreadViewport.tsx +1 -1
  429. package/src/primitives/thread/ThreadViewportFooter.tsx +1 -1
  430. package/src/primitives/threadList/ThreadListNew.tsx +1 -1
  431. package/src/primitives/threadList/ThreadListRoot.tsx +5 -1
  432. package/src/primitives/threadListItem/ThreadListItemArchive.ts +2 -2
  433. package/src/primitives/threadListItem/ThreadListItemDelete.ts +2 -2
  434. package/src/primitives/threadListItem/ThreadListItemRoot.tsx +5 -1
  435. package/src/primitives/threadListItem/ThreadListItemTrigger.ts +2 -2
  436. package/src/primitives/threadListItem/ThreadListItemUnarchive.ts +2 -2
  437. package/src/primitives/threadListItemMore/ThreadListItemMoreContent.tsx +10 -4
  438. package/src/primitives/threadListItemMore/ThreadListItemMoreItem.tsx +7 -7
  439. package/src/primitives/threadListItemMore/ThreadListItemMoreRoot.tsx +2 -2
  440. package/src/primitives/threadListItemMore/ThreadListItemMoreSeparator.tsx +7 -5
  441. package/src/primitives/threadListItemMore/ThreadListItemMoreTrigger.tsx +7 -7
  442. package/src/tests/DataRenderers.test.ts +174 -41
  443. package/src/unstable/useMentionAdapter.ts +220 -0
  444. package/src/unstable/useSlashCommandAdapter.ts +79 -50
  445. package/src/utils/Primitive.test.tsx +7 -1
  446. package/src/utils/Primitive.tsx +49 -16
  447. package/src/utils/createActionButton.tsx +3 -3
  448. package/src/utils/hooks/useManagedRef.ts +2 -2
  449. package/src/utils/json/is-json.ts +1 -1
  450. package/src/utils/smooth/SmoothContext.tsx +5 -5
  451. package/dist/primitives/composer/mention/ComposerMentionContext.d.ts +0 -25
  452. package/dist/primitives/composer/mention/ComposerMentionContext.d.ts.map +0 -1
  453. package/dist/primitives/composer/mention/ComposerMentionContext.js +0 -74
  454. package/dist/primitives/composer/mention/ComposerMentionContext.js.map +0 -1
  455. package/dist/primitives/composer/mention/index.d.ts +0 -6
  456. package/dist/primitives/composer/mention/index.d.ts.map +0 -1
  457. package/dist/primitives/composer/mention/index.js +0 -8
  458. package/dist/primitives/composer/mention/index.js.map +0 -1
  459. package/dist/primitives/composer/slash-command/ComposerSlashCommandRoot.d.ts +0 -36
  460. package/dist/primitives/composer/slash-command/ComposerSlashCommandRoot.d.ts.map +0 -1
  461. package/dist/primitives/composer/slash-command/ComposerSlashCommandRoot.js +0 -36
  462. package/dist/primitives/composer/slash-command/ComposerSlashCommandRoot.js.map +0 -1
  463. package/dist/primitives/composer/slash-command/index.d.ts +0 -2
  464. package/dist/primitives/composer/slash-command/index.d.ts.map +0 -1
  465. package/dist/primitives/composer/slash-command/index.js +0 -2
  466. package/dist/primitives/composer/slash-command/index.js.map +0 -1
  467. package/dist/primitives/composer/trigger/TriggerPopoverContext.d.ts +0 -37
  468. package/dist/primitives/composer/trigger/TriggerPopoverContext.d.ts.map +0 -1
  469. package/dist/primitives/composer/trigger/TriggerPopoverContext.js +0 -70
  470. package/dist/primitives/composer/trigger/TriggerPopoverContext.js.map +0 -1
  471. package/dist/primitives/composer/trigger/TriggerPopoverPopover.d.ts +0 -26
  472. package/dist/primitives/composer/trigger/TriggerPopoverPopover.d.ts.map +0 -1
  473. package/dist/primitives/composer/trigger/TriggerPopoverPopover.js +0 -28
  474. package/dist/primitives/composer/trigger/TriggerPopoverPopover.js.map +0 -1
  475. package/dist/unstable/useToolMentionAdapter.d.ts +0 -42
  476. package/dist/unstable/useToolMentionAdapter.d.ts.map +0 -1
  477. package/dist/unstable/useToolMentionAdapter.js +0 -65
  478. package/dist/unstable/useToolMentionAdapter.js.map +0 -1
  479. package/src/primitives/composer/mention/ComposerMentionContext.tsx +0 -175
  480. package/src/primitives/composer/mention/index.ts +0 -19
  481. package/src/primitives/composer/slash-command/ComposerSlashCommandRoot.tsx +0 -76
  482. package/src/primitives/composer/slash-command/index.ts +0 -1
  483. package/src/primitives/composer/trigger/TriggerPopoverContext.tsx +0 -129
  484. package/src/primitives/composer/trigger/TriggerPopoverPopover.tsx +0 -51
  485. package/src/unstable/useToolMentionAdapter.ts +0 -114
@@ -0,0 +1,220 @@
1
+ "use client";
2
+
3
+ import { useMemo, type FC } from "react";
4
+ import { useAui } from "@assistant-ui/store";
5
+ import type {
6
+ Unstable_DirectiveFormatter,
7
+ Unstable_TriggerAdapter,
8
+ Unstable_TriggerCategory,
9
+ Unstable_TriggerItem,
10
+ } from "@assistant-ui/core";
11
+ import { unstable_defaultDirectiveFormatter } from "@assistant-ui/core";
12
+ import type { ReadonlyJSONObject } from "assistant-stream/utils";
13
+
14
+ /** Icon component shape consumed by `ComposerTriggerPopover`'s `iconMap`. */
15
+ export type Unstable_IconComponent = FC<{ className?: string }>;
16
+
17
+ export type Unstable_Mention = {
18
+ readonly id: string;
19
+ readonly type: string;
20
+ readonly label: string;
21
+ readonly description?: string | undefined;
22
+ /** Shortcut for `metadata.icon`; merged with `metadata` if both are given. */
23
+ readonly icon?: string | undefined;
24
+ readonly metadata?: ReadonlyJSONObject | undefined;
25
+ };
26
+
27
+ export type Unstable_MentionCategory = {
28
+ readonly id: string;
29
+ readonly label: string;
30
+ readonly items: readonly Unstable_Mention[];
31
+ };
32
+
33
+ export type Unstable_ModelContextToolsOptions = {
34
+ /** Wrap tools in a dedicated category (drill-down mode). */
35
+ readonly category?: { readonly id: string; readonly label: string };
36
+ /** Format tool name for display. */
37
+ readonly formatLabel?: (toolName: string) => string;
38
+ /** Default icon key for each tool. */
39
+ readonly icon?: string;
40
+ };
41
+
42
+ export type Unstable_UseMentionAdapterOptions = {
43
+ /** Flat mention list. Ignored when `categories` is set. */
44
+ readonly items?: readonly Unstable_Mention[];
45
+ /** Categorized mentions for drill-down navigation. */
46
+ readonly categories?: readonly Unstable_MentionCategory[];
47
+ /**
48
+ * How tools registered via `useAssistantTool` integrate.
49
+ * - `false`: exclude.
50
+ * - `true`: include (default when no `items`/`categories`; as a category
51
+ * if `categories` is set, flat otherwise).
52
+ * - object: explicit config.
53
+ *
54
+ * Omitted → defaults to `true` iff neither `items` nor `categories`.
55
+ */
56
+ readonly includeModelContextTools?:
57
+ | boolean
58
+ | Unstable_ModelContextToolsOptions;
59
+ /** Directive formatter. @default unstable_defaultDirectiveFormatter */
60
+ readonly formatter?: Unstable_DirectiveFormatter;
61
+ /** Fires after an item is inserted into the composer. */
62
+ readonly onInserted?: (item: Unstable_TriggerItem) => void;
63
+ /** Maps `metadata.icon` / `category.id` string keys to React components. */
64
+ readonly iconMap?: Record<string, Unstable_IconComponent>;
65
+ /** Fallback icon when no entry in `iconMap` matches. */
66
+ readonly fallbackIcon?: Unstable_IconComponent;
67
+ };
68
+
69
+ export type Unstable_MentionDirective = {
70
+ readonly formatter: Unstable_DirectiveFormatter;
71
+ readonly onInserted?: ((item: Unstable_TriggerItem) => void) | undefined;
72
+ };
73
+
74
+ /**
75
+ * @deprecated Under active development and might change without notice.
76
+ *
77
+ * Creates a spreadable `{ adapter, directive }` bundle for `@` mentions.
78
+ * Supports tools registered via `useAssistantTool`, explicit items, or both —
79
+ * flat or categorized.
80
+ *
81
+ * @example
82
+ * ```tsx
83
+ * const mention = unstable_useMentionAdapter();
84
+ * <ComposerTriggerPopover char="@" {...mention} />
85
+ * ```
86
+ */
87
+ export function unstable_useMentionAdapter(
88
+ options?: Unstable_UseMentionAdapterOptions,
89
+ ): {
90
+ adapter: Unstable_TriggerAdapter;
91
+ directive: Unstable_MentionDirective;
92
+ iconMap?: Record<string, Unstable_IconComponent>;
93
+ fallbackIcon?: Unstable_IconComponent;
94
+ } {
95
+ // biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
96
+ const aui = useAui();
97
+
98
+ const items = options?.items;
99
+ const categories = options?.categories;
100
+ const includeTools =
101
+ options?.includeModelContextTools ?? (!items && !categories);
102
+ const toolsConfig =
103
+ typeof includeTools === "object" ? includeTools : undefined;
104
+ const wantsTools = includeTools !== false;
105
+ const formatter = options?.formatter;
106
+ const onInserted = options?.onInserted;
107
+
108
+ // biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
109
+ const adapter = useMemo<Unstable_TriggerAdapter>(() => {
110
+ const getModelContextTools = (): Unstable_TriggerItem[] => {
111
+ if (!wantsTools) return [];
112
+ const ctx = aui.thread().getModelContext();
113
+ const tools = ctx.tools;
114
+ if (!tools) return [];
115
+ const formatLabel = toolsConfig?.formatLabel;
116
+ const defaultIcon = toolsConfig?.icon;
117
+ return Object.entries(tools).map(([name, tool]) =>
118
+ toTriggerItem({
119
+ id: name,
120
+ type: "tool",
121
+ label: formatLabel ? formatLabel(name) : name,
122
+ description: tool.description ?? undefined,
123
+ icon: defaultIcon,
124
+ }),
125
+ );
126
+ };
127
+
128
+ // Categorized: drill-down mode
129
+ if (categories && categories.length > 0) {
130
+ const groups = categories.map((cat) => ({
131
+ id: cat.id,
132
+ label: cat.label,
133
+ items: cat.items.map(toTriggerItem),
134
+ }));
135
+
136
+ let toolCategory: {
137
+ id: string;
138
+ label: string;
139
+ items: Unstable_TriggerItem[];
140
+ } | null = null;
141
+ if (wantsTools) {
142
+ const toolItems = getModelContextTools();
143
+ if (toolItems.length > 0) {
144
+ toolCategory = {
145
+ id: toolsConfig?.category?.id ?? "tools",
146
+ label: toolsConfig?.category?.label ?? "Tools",
147
+ items: toolItems,
148
+ };
149
+ }
150
+ }
151
+ const allGroups = toolCategory ? [...groups, toolCategory] : groups;
152
+
153
+ return {
154
+ categories: () => allGroups.map(({ id, label }) => ({ id, label })),
155
+ categoryItems: (id) => allGroups.find((g) => g.id === id)?.items ?? [],
156
+ search: (query) => {
157
+ const lower = query.toLowerCase();
158
+ return allGroups
159
+ .flatMap((g) => g.items)
160
+ .filter((item) => matchesQuery(item, lower));
161
+ },
162
+ };
163
+ }
164
+
165
+ // Flat: items + (optionally) tools, all in one search pool
166
+ const flatItems = (items ?? []).map(toTriggerItem);
167
+ const getFlatPool = (): Unstable_TriggerItem[] => {
168
+ if (!wantsTools) return flatItems;
169
+ const toolItems = getModelContextTools();
170
+ // Dedupe by id — explicit items win.
171
+ const seen = new Set(flatItems.map((i) => i.id));
172
+ return [...flatItems, ...toolItems.filter((t) => !seen.has(t.id))];
173
+ };
174
+
175
+ return {
176
+ categories: (): readonly Unstable_TriggerCategory[] => [],
177
+ categoryItems: () => [],
178
+ search: (query) => {
179
+ const lower = query.toLowerCase();
180
+ return getFlatPool().filter((item) => matchesQuery(item, lower));
181
+ },
182
+ };
183
+ }, [aui, items, categories, wantsTools, toolsConfig]);
184
+
185
+ // biome-ignore lint/correctness/useHookAtTopLevel: `unstable_` prefix not recognized as hook
186
+ const directive = useMemo<Unstable_MentionDirective>(
187
+ () => ({
188
+ formatter: formatter ?? unstable_defaultDirectiveFormatter,
189
+ ...(onInserted ? { onInserted } : {}),
190
+ }),
191
+ [formatter, onInserted],
192
+ );
193
+
194
+ return {
195
+ adapter,
196
+ directive,
197
+ ...(options?.iconMap ? { iconMap: options.iconMap } : {}),
198
+ ...(options?.fallbackIcon ? { fallbackIcon: options.fallbackIcon } : {}),
199
+ };
200
+ }
201
+
202
+ function toTriggerItem(m: Unstable_Mention): Unstable_TriggerItem {
203
+ const metadata =
204
+ m.icon !== undefined ? { ...(m.metadata ?? {}), icon: m.icon } : m.metadata;
205
+ return {
206
+ id: m.id,
207
+ type: m.type,
208
+ label: m.label,
209
+ ...(m.description !== undefined ? { description: m.description } : {}),
210
+ ...(metadata !== undefined ? { metadata } : {}),
211
+ };
212
+ }
213
+
214
+ function matchesQuery(item: Unstable_TriggerItem, lower: string): boolean {
215
+ if (!lower) return true;
216
+ if (item.id.toLowerCase().includes(lower)) return true;
217
+ if (item.label.toLowerCase().includes(lower)) return true;
218
+ if (item.description?.toLowerCase().includes(lower)) return true;
219
+ return false;
220
+ }
@@ -1,83 +1,112 @@
1
1
  "use client";
2
2
 
3
- import { useMemo } from "react";
3
+ import { useMemo, useRef } from "react";
4
4
  import type {
5
- Unstable_SlashCommandAdapter,
6
- Unstable_SlashCommandItem,
7
- Unstable_TriggerCategory,
5
+ Unstable_TriggerAdapter,
6
+ Unstable_TriggerItem,
8
7
  } from "@assistant-ui/core";
8
+ import type { Unstable_IconComponent } from "./useMentionAdapter";
9
9
 
10
- export type Unstable_SlashCommandDefinition = {
11
- /** Unique command name (e.g. "summarize"). */
12
- readonly name: string;
13
- /** Display label (e.g. "/summarize"). */
10
+ export type Unstable_SlashCommand = {
11
+ readonly id: string;
14
12
  readonly label?: string | undefined;
15
- /** Short description shown in the popover. */
16
13
  readonly description?: string | undefined;
17
- /** Icon identifier. */
18
14
  readonly icon?: string | undefined;
19
- /** Action to execute when the command is selected. */
20
- readonly execute?: (() => void) | undefined;
15
+ readonly execute: () => void;
21
16
  };
22
17
 
23
18
  export type Unstable_UseSlashCommandAdapterOptions = {
24
- /** List of available slash commands. */
25
- commands: readonly Unstable_SlashCommandDefinition[];
19
+ readonly commands: readonly Unstable_SlashCommand[];
20
+ /** Strip the trigger text from the composer after executing. @default false */
21
+ readonly removeOnExecute?: boolean | undefined;
22
+ /** Maps `metadata.icon` / `category.id` string keys to React components. */
23
+ readonly iconMap?: Record<string, Unstable_IconComponent>;
24
+ /** Fallback icon when no entry in `iconMap` matches. */
25
+ readonly fallbackIcon?: Unstable_IconComponent;
26
+ };
27
+
28
+ export type Unstable_SlashCommandAction = {
29
+ readonly onExecute: (item: Unstable_TriggerItem) => void;
30
+ readonly removeOnExecute?: boolean | undefined;
26
31
  };
27
32
 
28
33
  /**
29
- * @deprecated This API is still under active development and might change without notice.
34
+ * @deprecated Under active development and may change without notice.
30
35
  *
31
- * Creates a SlashCommandAdapter from a list of command definitions.
36
+ * Bundles slash command definitions (with inline `execute` callbacks) into
37
+ * `{adapter, action}` that plug directly into `ComposerTriggerPopover`.
38
+ * `execute` stays in the hook closure and is never attached to the returned
39
+ * `TriggerItem`, keeping items serializable.
32
40
  *
33
41
  * @example
34
42
  * ```tsx
35
- * const slashAdapter = unstable_useSlashCommandAdapter({
43
+ * const slash = unstable_useSlashCommandAdapter({
36
44
  * commands: [
37
- * { name: "summarize", description: "Summarize the conversation", execute: () => {} },
38
- * { name: "translate", description: "Translate text", execute: () => {} },
45
+ * { id: "summarize", execute: () => runSummarize(), icon: "FileText" },
46
+ * { id: "translate", execute: () => runTranslate(), icon: "Languages" },
39
47
  * ],
40
48
  * });
49
+ *
50
+ * <ComposerTriggerPopover char="/" {...slash} />
41
51
  * ```
42
52
  */
43
53
  export function unstable_useSlashCommandAdapter(
44
54
  options: Unstable_UseSlashCommandAdapterOptions,
45
- ): Unstable_SlashCommandAdapter {
46
- const { commands } = options;
55
+ ): {
56
+ adapter: Unstable_TriggerAdapter;
57
+ action: Unstable_SlashCommandAction;
58
+ iconMap?: Record<string, Unstable_IconComponent>;
59
+ fallbackIcon?: Unstable_IconComponent;
60
+ } {
61
+ const { commands, removeOnExecute } = options;
47
62
 
48
- return useMemo<Unstable_SlashCommandAdapter>(() => {
49
- // Build items lazily at call time so execute callbacks are always fresh
50
- const getItems = (): Unstable_SlashCommandItem[] =>
51
- commands.map((cmd) => ({
52
- id: cmd.name,
53
- type: "command",
54
- label: cmd.label ?? `/${cmd.name}`,
55
- description: cmd.description,
56
- icon: cmd.icon,
57
- execute: cmd.execute,
58
- }));
63
+ // biome-ignore lint/correctness/useHookAtTopLevel: `unstable_` prefix not recognized as hook
64
+ const commandsRef = useRef(commands);
65
+ commandsRef.current = commands;
59
66
 
60
- return {
61
- // No categories — slash commands show items directly via search mode
62
- categories(): Unstable_TriggerCategory[] {
63
- return [];
67
+ // biome-ignore lint/correctness/useHookAtTopLevel: `unstable_` prefix not recognized as hook
68
+ return useMemo(() => {
69
+ const adapter: Unstable_TriggerAdapter = {
70
+ categories: () => [],
71
+ categoryItems: () => [],
72
+ search: (query: string) => {
73
+ const lower = query.toLowerCase();
74
+ return commandsRef.current
75
+ .filter((c) => matchesQuery(c, lower))
76
+ .map(toItem);
64
77
  },
78
+ };
65
79
 
66
- categoryItems(): Unstable_SlashCommandItem[] {
67
- return [];
80
+ const action: Unstable_SlashCommandAction = {
81
+ onExecute: (item) => {
82
+ commandsRef.current.find((c) => c.id === item.id)?.execute();
68
83
  },
84
+ ...(removeOnExecute !== undefined ? { removeOnExecute } : {}),
85
+ };
69
86
 
70
- search(query: string): Unstable_SlashCommandItem[] {
71
- const items = getItems();
72
- if (!query) return items;
73
- const lower = query.toLowerCase();
74
- return items.filter(
75
- (item) =>
76
- item.id.toLowerCase().includes(lower) ||
77
- item.label.toLowerCase().includes(lower) ||
78
- item.description?.toLowerCase().includes(lower),
79
- );
80
- },
87
+ return {
88
+ adapter,
89
+ action,
90
+ ...(options.iconMap ? { iconMap: options.iconMap } : {}),
91
+ ...(options.fallbackIcon ? { fallbackIcon: options.fallbackIcon } : {}),
81
92
  };
82
- }, [commands]);
93
+ }, [removeOnExecute, options.iconMap, options.fallbackIcon]);
94
+ }
95
+
96
+ function toItem(cmd: Unstable_SlashCommand): Unstable_TriggerItem {
97
+ return {
98
+ id: cmd.id,
99
+ type: "command",
100
+ label: cmd.label ?? `/${cmd.id}`,
101
+ ...(cmd.description !== undefined ? { description: cmd.description } : {}),
102
+ ...(cmd.icon !== undefined ? { metadata: { icon: cmd.icon } } : {}),
103
+ };
104
+ }
105
+
106
+ function matchesQuery(cmd: Unstable_SlashCommand, lower: string): boolean {
107
+ if (!lower) return true;
108
+ if (cmd.id.toLowerCase().includes(lower)) return true;
109
+ if (cmd.label?.toLowerCase().includes(lower)) return true;
110
+ if (cmd.description?.toLowerCase().includes(lower)) return true;
111
+ return false;
83
112
  }
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { renderToStaticMarkup } from "react-dom/server";
3
- import { Primitive } from "./Primitive";
3
+ import { Primitive, withRenderProp } from "./Primitive";
4
4
 
5
5
  const ALL_NODES = [
6
6
  "a",
@@ -70,6 +70,12 @@ describe("Primitive", () => {
70
70
  });
71
71
 
72
72
  describe("render prop edge cases", () => {
73
+ it("preserves a useful displayName on wrapped components", () => {
74
+ const Wrapped = withRenderProp(Primitive.div);
75
+
76
+ expect(Wrapped.displayName).toBe("Primitive.div");
77
+ });
78
+
73
79
  it("uses render element's own children as fallback", () => {
74
80
  const html = renderToStaticMarkup(
75
81
  <Primitive.span render={<em>Fallback</em>} />,
@@ -1,7 +1,9 @@
1
1
  import {
2
2
  type ComponentPropsWithoutRef,
3
3
  type ComponentRef,
4
+ type ElementType,
4
5
  type ForwardRefExoticComponent,
6
+ type PropsWithoutRef,
5
7
  type ReactElement,
6
8
  type ReactNode,
7
9
  type RefAttributes,
@@ -43,43 +45,74 @@ const NODES = [
43
45
  ] as const;
44
46
  type PrimitiveNode = (typeof NODES)[number];
45
47
 
46
- type PrimitiveProps<E extends PrimitiveNode> = ComponentPropsWithoutRef<
48
+ type WithRenderPropProps<T extends ElementType> =
49
+ ComponentPropsWithoutRef<T> & {
50
+ render?: ReactElement | undefined;
51
+ };
52
+
53
+ type PrimitiveProps<E extends PrimitiveNode> = WithRenderPropProps<
47
54
  (typeof RadixPrimitive)[E]
48
- > & {
49
- render?: ReactElement | undefined;
50
- };
55
+ >;
56
+
57
+ type WithRenderPropRuntimeProps<T extends ElementType> =
58
+ WithRenderPropProps<T> & {
59
+ asChild?: boolean | undefined;
60
+ children?: ReactNode | undefined;
61
+ };
51
62
 
52
63
  type PrimitiveRef<E extends PrimitiveNode> = ComponentRef<
53
64
  (typeof RadixPrimitive)[E]
54
65
  >;
55
66
 
56
- function createPrimitive<E extends PrimitiveNode>(node: E) {
57
- const RadixComp = RadixPrimitive[node];
67
+ function withRenderProp<T extends ElementType>(Component: T) {
68
+ const Wrapped = forwardRef<ComponentRef<T>, WithRenderPropRuntimeProps<T>>(
69
+ (
70
+ {
71
+ render,
72
+ asChild,
73
+ children,
74
+ ...rest
75
+ }: PropsWithoutRef<WithRenderPropRuntimeProps<T>>,
76
+ ref,
77
+ ) => {
78
+ const Comp = Component as any;
58
79
 
59
- const Component = forwardRef<PrimitiveRef<E>, PrimitiveProps<E>>(
60
- ({ render, asChild, children, ...props }, ref) => {
61
80
  if (render && isValidElement(render)) {
62
- // render={<Comp p />} + children
63
- // → asChild + <Comp p>{children}</Comp>
64
81
  const renderChildren =
65
82
  children !== undefined
66
83
  ? children
67
84
  : ((render.props as Record<string, unknown>).children as ReactNode);
85
+
68
86
  return (
69
- <RadixComp asChild {...(props as any)} ref={ref}>
87
+ <Comp {...(rest as any)} asChild ref={ref}>
70
88
  {cloneElement(render, undefined, renderChildren)}
71
- </RadixComp>
89
+ </Comp>
72
90
  );
73
91
  }
74
92
 
75
93
  return (
76
- <RadixComp asChild={asChild} {...(props as any)} ref={ref}>
94
+ <Comp {...(rest as any)} asChild={asChild} ref={ref}>
77
95
  {children}
78
- </RadixComp>
96
+ </Comp>
79
97
  );
80
98
  },
81
99
  );
82
100
 
101
+ const componentName =
102
+ typeof Component === "string"
103
+ ? Component
104
+ : (Component.displayName ?? Component.name ?? "Component");
105
+ Wrapped.displayName = componentName;
106
+
107
+ return Wrapped as ForwardRefExoticComponent<
108
+ WithRenderPropProps<T> & RefAttributes<ComponentRef<T>>
109
+ >;
110
+ }
111
+
112
+ function createPrimitive<E extends PrimitiveNode>(node: E) {
113
+ const RadixComp = RadixPrimitive[node];
114
+ const Component = withRenderProp(RadixComp);
115
+
83
116
  Component.displayName = `Primitive.${node}`;
84
117
  return Component as ForwardRefExoticComponent<
85
118
  PrimitiveProps<E> & RefAttributes<PrimitiveRef<E>>
@@ -96,5 +129,5 @@ const Primitive = NODES.reduce(
96
129
  },
97
130
  );
98
131
 
99
- export { Primitive };
100
- export type { PrimitiveProps };
132
+ export { Primitive, withRenderProp };
133
+ export type { PrimitiveProps, WithRenderPropProps };
@@ -1,8 +1,8 @@
1
1
  import {
2
- ComponentRef,
2
+ type ComponentRef,
3
3
  forwardRef,
4
- ComponentPropsWithoutRef,
5
- MouseEventHandler,
4
+ type ComponentPropsWithoutRef,
5
+ type MouseEventHandler,
6
6
  } from "react";
7
7
  import { Primitive } from "./Primitive";
8
8
  import { composeEventHandlers } from "@radix-ui/primitive";
@@ -1,9 +1,9 @@
1
1
  import { useCallback, useRef } from "react";
2
2
 
3
3
  export const useManagedRef = <TNode>(
4
- callback: (node: TNode) => (() => void) | void,
4
+ callback: (node: TNode) => (() => void) | undefined,
5
5
  ) => {
6
- const cleanupRef = useRef<(() => void) | void>(undefined);
6
+ const cleanupRef = useRef<(() => void) | undefined>(undefined);
7
7
 
8
8
  const ref = useCallback(
9
9
  (el: TNode | null) => {
@@ -1,4 +1,4 @@
1
- import {
1
+ import type {
2
2
  ReadonlyJSONArray,
3
3
  ReadonlyJSONObject,
4
4
  ReadonlyJSONValue,
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
 
3
3
  import {
4
- ComponentType,
4
+ type ComponentType,
5
5
  createContext,
6
- FC,
6
+ type FC,
7
7
  forwardRef,
8
- PropsWithChildren,
8
+ type PropsWithChildren,
9
9
  useContext,
10
10
  useState,
11
11
  } from "react";
12
- import { ReadonlyStore } from "../../context/ReadonlyStore";
13
- import { create, UseBoundStore } from "zustand";
12
+ import type { ReadonlyStore } from "../../context/ReadonlyStore";
13
+ import { create, type UseBoundStore } from "zustand";
14
14
  import type {
15
15
  MessagePartStatus,
16
16
  ToolCallMessagePartStatus,
@@ -1,25 +0,0 @@
1
- import { type ReactNode, type FC } from "react";
2
- import type { Unstable_MentionAdapter, Unstable_DirectiveFormatter } from "@assistant-ui/core";
3
- import type { TriggerPopoverResourceOutput, SelectItemOverride } from "../trigger/TriggerPopoverResource.js";
4
- type MentionResourceOutput = TriggerPopoverResourceOutput & {
5
- readonly formatter: Unstable_DirectiveFormatter;
6
- };
7
- export declare const useMentionContext: () => MentionResourceOutput;
8
- export declare const useMentionContextOptional: () => MentionResourceOutput | null;
9
- type MentionInternalContextValue = {
10
- registerSelectItemOverride(fn: SelectItemOverride): () => void;
11
- };
12
- export declare const useMentionInternalContext: () => MentionInternalContextValue | null;
13
- export declare namespace ComposerPrimitiveMentionRoot {
14
- type Props = {
15
- children: ReactNode;
16
- adapter?: Unstable_MentionAdapter | undefined;
17
- /** Character(s) that trigger the mention popover. @default "@" */
18
- trigger?: string | undefined;
19
- /** Custom formatter for serializing/parsing mention directives. */
20
- formatter?: Unstable_DirectiveFormatter | undefined;
21
- };
22
- }
23
- export declare const ComposerPrimitiveMentionRoot: FC<ComposerPrimitiveMentionRoot.Props>;
24
- export {};
25
- //# sourceMappingURL=ComposerMentionContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComposerMentionContext.d.ts","sourceRoot":"","sources":["../../../../src/primitives/composer/mention/ComposerMentionContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EACV,4BAA4B,EAC5B,kBAAkB,EAEnB,6CAA0C;AAE3C,KAAK,qBAAqB,GAAG,4BAA4B,GAAG;IAC1D,QAAQ,CAAC,SAAS,EAAE,2BAA2B,CAAC;CACjD,CAAC;AAQF,eAAO,MAAM,iBAAiB,6BAO7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,oCAErC,CAAC;AAMF,KAAK,2BAA2B,GAAG;IACjC,0BAA0B,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAC;CAChE,CAAC;AAKF,eAAO,MAAM,yBAAyB,0CAErC,CAAC;AAMF,yBAAiB,4BAA4B,CAAC;IAC5C,KAAY,KAAK,GAAG;QAClB,QAAQ,EAAE,SAAS,CAAC;QACpB,OAAO,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;QAC9C,kEAAkE;QAClE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,mEAAmE;QACnE,SAAS,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;KACrD,CAAC;CACH;AAED,eAAO,MAAM,4BAA4B,EAAE,EAAE,CAC3C,4BAA4B,CAAC,KAAK,CA4DnC,CAAC"}
@@ -1,74 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { createContext, useContext, useState, useCallback, useMemo, useEffect, } from "react";
4
- import { useAui } from "@assistant-ui/store";
5
- import { unstable_defaultDirectiveFormatter } from "@assistant-ui/core";
6
- import { ComposerPrimitiveTriggerPopoverRoot } from "../trigger/TriggerPopoverContext.js";
7
- // =============================================================================
8
- // Context — public (provides formatter on top of TriggerPopoverContext)
9
- // =============================================================================
10
- const MentionContext = createContext(null);
11
- export const useMentionContext = () => {
12
- const ctx = useContext(MentionContext);
13
- if (!ctx)
14
- throw new Error("useMentionContext must be used within ComposerPrimitive.MentionRoot");
15
- return ctx;
16
- };
17
- export const useMentionContextOptional = () => {
18
- return useContext(MentionContext);
19
- };
20
- const MentionInternalContext = createContext(null);
21
- export const useMentionInternalContext = () => {
22
- return useContext(MentionInternalContext);
23
- };
24
- export const ComposerPrimitiveMentionRoot = ({ children, adapter: adapterProp, trigger: triggerChar = "@", formatter: formatterProp, }) => {
25
- const aui = useAui();
26
- const formatter = formatterProp ?? unstable_defaultDirectiveFormatter;
27
- // ---------------------------------------------------------------------------
28
- // Runtime adapter (subscribe to state changes instead of useAuiState to avoid
29
- // infinite loop — getModelContext() returns a new object on every call)
30
- // ---------------------------------------------------------------------------
31
- const getRuntimeAdapter = useCallback(() => {
32
- try {
33
- const runtime = aui.composer().__internal_getRuntime?.();
34
- return runtime?._core?.getState()?.getMentionAdapter?.();
35
- }
36
- catch {
37
- return undefined;
38
- }
39
- }, [aui]);
40
- const [runtimeAdapter, setRuntimeAdapter] = useState(getRuntimeAdapter);
41
- useEffect(() => {
42
- return aui.subscribe(() => {
43
- setRuntimeAdapter((prev) => {
44
- const next = getRuntimeAdapter();
45
- return prev === next ? prev : next;
46
- });
47
- });
48
- }, [aui, getRuntimeAdapter]);
49
- const adapter = adapterProp ?? runtimeAdapter;
50
- // ---------------------------------------------------------------------------
51
- // onSelect behavior for mentions: insert directive text
52
- // ---------------------------------------------------------------------------
53
- const onSelect = useMemo(() => ({ type: "insertDirective", formatter }), [formatter]);
54
- // ---------------------------------------------------------------------------
55
- // MentionContext — provides formatter + delegates state to TriggerPopoverContext
56
- // We use useAuiState to read trigger popover state via the inner context.
57
- // For backward compat, MentionContext wraps TriggerPopoverContext output.
58
- // ---------------------------------------------------------------------------
59
- return (_jsx(ComposerPrimitiveTriggerPopoverRoot, { adapter: adapter, trigger: triggerChar, onSelect: onSelect, children: _jsx(MentionContextBridge, { formatter: formatter, children: children }) }));
60
- };
61
- ComposerPrimitiveMentionRoot.displayName = "ComposerPrimitive.MentionRoot";
62
- // =============================================================================
63
- // Bridge — reads TriggerPopoverContext, wraps it as MentionContext
64
- // =============================================================================
65
- import { useTriggerPopoverContext } from "../trigger/TriggerPopoverContext.js";
66
- const MentionContextBridge = ({ formatter, children }) => {
67
- const triggerCtx = useTriggerPopoverContext();
68
- const mentionValue = useMemo(() => ({ ...triggerCtx, formatter }), [triggerCtx, formatter]);
69
- const internalContextValue = useMemo(() => ({
70
- registerSelectItemOverride: triggerCtx.registerSelectItemOverride,
71
- }), [triggerCtx.registerSelectItemOverride]);
72
- return (_jsx(MentionContext.Provider, { value: mentionValue, children: _jsx(MentionInternalContext.Provider, { value: internalContextValue, children: children }) }));
73
- };
74
- //# sourceMappingURL=ComposerMentionContext.js.map