@assistant-ui/react 0.15.16 → 0.15.18

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 (297) hide show
  1. package/README.md +4 -4
  2. package/dist/index.d.ts +8 -4
  3. package/dist/index.js +4 -2
  4. package/dist/mcp-apps/McpAppRenderer.d.ts +36 -9
  5. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  6. package/dist/mcp-apps/McpAppRenderer.js +108 -57
  7. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  8. package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
  9. package/dist/mcp-apps/McpAppsRemoteHost.js +20 -17
  10. package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -1
  11. package/dist/mcp-apps/app-frame.d.ts.map +1 -1
  12. package/dist/mcp-apps/app-frame.js +229 -115
  13. package/dist/mcp-apps/app-frame.js.map +1 -1
  14. package/dist/mcp-apps/bridge.js +2 -3
  15. package/dist/mcp-apps/bridge.js.map +1 -1
  16. package/dist/mcp-apps/index.d.ts +3 -3
  17. package/dist/model-context/frame/useAssistantFrameHost.d.ts +1 -1
  18. package/dist/model-context/frame/useAssistantFrameHost.js +10 -11
  19. package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -1
  20. package/dist/model-context/makeAssistantVisible.js +1 -1
  21. package/dist/model-context/makeAssistantVisible.js.map +1 -1
  22. package/dist/primitives/actionBar/ActionBarCopy.js +3 -3
  23. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  24. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +3 -3
  25. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  26. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +3 -3
  27. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  28. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +3 -3
  29. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  30. package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -1
  31. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +3 -3
  32. package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -1
  33. package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -1
  34. package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -1
  35. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -1
  36. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -1
  37. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -1
  38. package/dist/primitives/actionBarMore/scope.d.ts +2 -2
  39. package/dist/primitives/actionBarMore/scope.d.ts.map +1 -1
  40. package/dist/primitives/actionBarMore/scope.js.map +1 -1
  41. package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
  42. package/dist/primitives/assistantModal/AssistantModalContent.js +1 -1
  43. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  44. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  45. package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
  46. package/dist/primitives/assistantModal/scope.d.ts +2 -2
  47. package/dist/primitives/assistantModal/scope.d.ts.map +1 -1
  48. package/dist/primitives/assistantModal/scope.js.map +1 -1
  49. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  50. package/dist/primitives/composer/ComposerAttachmentDropzone.js +1 -1
  51. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
  52. package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
  53. package/dist/primitives/composer/ComposerInput.js +1 -3
  54. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  55. package/dist/primitives/composer/ComposerInputPluginContext.d.ts +1 -2
  56. package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
  57. package/dist/primitives/composer/ComposerInputPluginContext.js +1 -6
  58. package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -1
  59. package/dist/primitives/composer/ComposerQuote.js +5 -5
  60. package/dist/primitives/composer/ComposerQuote.js.map +1 -1
  61. package/dist/primitives/composer/ComposerRoot.js +3 -3
  62. package/dist/primitives/composer/ComposerRoot.js.map +1 -1
  63. package/dist/primitives/composer/trigger/TriggerPopover.d.ts +5 -0
  64. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
  65. package/dist/primitives/composer/trigger/TriggerPopover.js +157 -130
  66. package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -1
  67. package/dist/primitives/composer/trigger/TriggerPopoverAction.js +46 -15
  68. package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -1
  69. package/dist/primitives/composer/trigger/TriggerPopoverBack.js +3 -3
  70. package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -1
  71. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +4 -4
  72. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -1
  73. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +40 -10
  74. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -1
  75. package/dist/primitives/composer/trigger/TriggerPopoverItems.js +4 -4
  76. package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -1
  77. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +2 -0
  78. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
  79. package/dist/primitives/composer/trigger/TriggerPopoverResource.js +63 -61
  80. package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -1
  81. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +2 -0
  82. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -1
  83. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -1
  84. package/dist/primitives/composer/trigger/detectTrigger.d.ts +21 -1
  85. package/dist/primitives/composer/trigger/detectTrigger.d.ts.map +1 -0
  86. package/dist/primitives/composer/trigger/detectTrigger.js +17 -3
  87. package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -1
  88. package/dist/primitives/composer/trigger/index.d.ts +3 -1
  89. package/dist/primitives/composer/trigger/index.d.ts.map +1 -1
  90. package/dist/primitives/composer/trigger/index.js.map +1 -1
  91. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts +6 -0
  92. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts.map +1 -0
  93. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js +9 -0
  94. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js.map +1 -0
  95. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +3 -4
  96. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -1
  97. package/dist/primitives/composer/trigger/triggerDetectionResource.js +15 -14
  98. package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -1
  99. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
  100. package/dist/primitives/composer/trigger/triggerNavigationResource.js +3 -5
  101. package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -1
  102. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
  103. package/dist/primitives/composer/trigger/triggerSelectionResource.js +18 -19
  104. package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -1
  105. package/dist/primitives/composer.d.ts +3 -2
  106. package/dist/primitives/composer.js.map +1 -1
  107. package/dist/primitives/error/ErrorMessage.js.map +1 -1
  108. package/dist/primitives/message/MessageIf.js.map +1 -1
  109. package/dist/primitives/message/MessageParts.js.map +1 -1
  110. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  111. package/dist/primitives/message/MessageRoot.js +4 -4
  112. package/dist/primitives/message/MessageRoot.js.map +1 -1
  113. package/dist/primitives/messagePart/MessagePartText.d.ts +1 -1
  114. package/dist/primitives/messagePart/MessagePartText.js.map +1 -1
  115. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +3 -3
  116. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -1
  117. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +3 -3
  118. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  119. package/dist/primitives/thread/ThreadIf.js.map +1 -1
  120. package/dist/primitives/thread/ThreadViewport.js +3 -3
  121. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  122. package/dist/primitives/thread/ThreadViewportFooter.js +3 -3
  123. package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -1
  124. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  125. package/dist/primitives/thread/useThreadViewportAutoScroll.js +4 -4
  126. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  127. package/dist/primitives/threadList/ThreadListNew.js +3 -3
  128. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  129. package/dist/primitives/threadListFocusGroup.d.ts +2 -1
  130. package/dist/primitives/threadListFocusGroup.d.ts.map +1 -1
  131. package/dist/primitives/threadListFocusGroup.js +2 -2
  132. package/dist/primitives/threadListFocusGroup.js.map +1 -1
  133. package/dist/primitives/threadListItem/ThreadListItemRoot.js +3 -3
  134. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  135. package/dist/primitives/threadListItem/ThreadListItemTrigger.js +1 -1
  136. package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
  137. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +1 -1
  138. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
  139. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -1
  140. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +1 -1
  141. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -1
  142. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -1
  143. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +1 -2
  144. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
  145. package/dist/primitives/threadListItemMore/scope.d.ts +2 -2
  146. package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -1
  147. package/dist/primitives/threadListItemMore/scope.js.map +1 -1
  148. package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
  149. package/dist/sandbox-host/SandboxHost.js +148 -72
  150. package/dist/sandbox-host/SandboxHost.js.map +1 -1
  151. package/dist/unstable/useLiveCompletionAdapter.js +3 -1
  152. package/dist/unstable/useLiveCompletionAdapter.js.map +1 -1
  153. package/dist/unstable/useMentionAdapter.d.ts +9 -3
  154. package/dist/unstable/useMentionAdapter.d.ts.map +1 -1
  155. package/dist/unstable/useMentionAdapter.js +50 -43
  156. package/dist/unstable/useMentionAdapter.js.map +1 -1
  157. package/dist/unstable/useModelContextSnapshot.d.ts +34 -0
  158. package/dist/unstable/useModelContextSnapshot.d.ts.map +1 -0
  159. package/dist/unstable/useModelContextSnapshot.js +61 -0
  160. package/dist/unstable/useModelContextSnapshot.js.map +1 -0
  161. package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
  162. package/dist/unstable/useSlashCommandAdapter.js +37 -29
  163. package/dist/unstable/useSlashCommandAdapter.js.map +1 -1
  164. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +14 -0
  165. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -0
  166. package/dist/unstable/webmcp/WebMcpRegistrationResource.js +85 -0
  167. package/dist/unstable/webmcp/WebMcpRegistrationResource.js.map +1 -0
  168. package/dist/unstable/webmcp/convertTools.d.ts +21 -0
  169. package/dist/unstable/webmcp/convertTools.d.ts.map +1 -0
  170. package/dist/unstable/webmcp/convertTools.js +110 -0
  171. package/dist/unstable/webmcp/convertTools.js.map +1 -0
  172. package/dist/unstable/webmcp/useWebMcpProvider.d.ts +21 -0
  173. package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -0
  174. package/dist/unstable/webmcp/useWebMcpProvider.js +105 -0
  175. package/dist/unstable/webmcp/useWebMcpProvider.js.map +1 -0
  176. package/dist/unstable/webmcp/webmcp-host.d.ts +39 -0
  177. package/dist/unstable/webmcp/webmcp-host.d.ts.map +1 -0
  178. package/dist/unstable/webmcp/webmcp-host.js +29 -0
  179. package/dist/unstable/webmcp/webmcp-host.js.map +1 -0
  180. package/dist/utils/Primitive.d.ts +6 -6
  181. package/dist/utils/Primitive.js +2 -2
  182. package/dist/utils/Primitive.js.map +1 -1
  183. package/dist/utils/createActionButton.js +3 -3
  184. package/dist/utils/createActionButton.js.map +1 -1
  185. package/dist/utils/hooks/useOnResizeContent.js +1 -1
  186. package/dist/utils/hooks/useOnResizeContent.js.map +1 -1
  187. package/dist/utils/hooks/useOnScrollToBottom.js +1 -1
  188. package/dist/utils/hooks/useOnScrollToBottom.js.map +1 -1
  189. package/dist/utils/smooth/SmoothContext.d.ts +24 -0
  190. package/dist/utils/smooth/SmoothContext.d.ts.map +1 -1
  191. package/dist/utils/smooth/useSmooth.js +1 -1
  192. package/dist/utils/smooth/useSmooth.js.map +1 -1
  193. package/package.json +14 -22
  194. package/src/index.ts +22 -1
  195. package/src/mcp-apps/McpAppRenderer.test.tsx +386 -9
  196. package/src/mcp-apps/McpAppRenderer.tsx +171 -69
  197. package/src/mcp-apps/McpAppsRemoteHost.concurrent.test.tsx +215 -0
  198. package/src/mcp-apps/McpAppsRemoteHost.ts +28 -12
  199. package/src/mcp-apps/app-frame.test.tsx +349 -0
  200. package/src/mcp-apps/app-frame.tsx +68 -9
  201. package/src/mcp-apps/bridge.ts +7 -2
  202. package/src/mcp-apps/index.ts +6 -1
  203. package/src/model-context/frame/AssistantFrame.test.ts +3 -3
  204. package/src/model-context/frame/SPEC_AssistantFrame.md +1 -1
  205. package/src/model-context/frame/useAssistantFrameHost.ts +2 -2
  206. package/src/model-context/makeAssistantVisible.tsx +1 -1
  207. package/src/primitives/actionBar/ActionBarCopy.tsx +1 -1
  208. package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +1 -1
  209. package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +1 -1
  210. package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +1 -1
  211. package/src/primitives/actionBar/ActionBarStopSpeaking.tsx +1 -1
  212. package/src/primitives/actionBarMore/scope.ts +2 -2
  213. package/src/primitives/assistantModal/AssistantModalContent.tsx +1 -1
  214. package/src/primitives/assistantModal/scope.ts +2 -2
  215. package/src/primitives/composer/ComposerAttachmentDropzone.tsx +1 -1
  216. package/src/primitives/composer/ComposerInput.test.tsx +2 -1
  217. package/src/primitives/composer/ComposerInput.tsx +3 -3
  218. package/src/primitives/composer/ComposerInputPluginContext.tsx +0 -10
  219. package/src/primitives/composer/ComposerQuote.tsx +1 -1
  220. package/src/primitives/composer/ComposerRoot.tsx +1 -1
  221. package/src/primitives/composer/trigger/TriggerPopover.tsx +16 -1
  222. package/src/primitives/composer/trigger/TriggerPopoverAction.tsx +4 -2
  223. package/src/primitives/composer/trigger/TriggerPopoverBack.tsx +1 -1
  224. package/src/primitives/composer/trigger/TriggerPopoverBehavior.test.tsx +109 -0
  225. package/src/primitives/composer/trigger/TriggerPopoverCategories.tsx +1 -1
  226. package/src/primitives/composer/trigger/TriggerPopoverDirective.tsx +4 -2
  227. package/src/primitives/composer/trigger/TriggerPopoverItems.tsx +1 -1
  228. package/src/primitives/composer/trigger/TriggerPopoverResource.ts +4 -1
  229. package/src/primitives/composer/trigger/TriggerPopoverRootContext.tsx +2 -0
  230. package/src/primitives/composer/trigger/detectTrigger.test.ts +88 -5
  231. package/src/primitives/composer/trigger/detectTrigger.ts +50 -9
  232. package/src/primitives/composer/trigger/index.ts +1 -0
  233. package/src/primitives/composer/trigger/matchesTriggerItemQuery.test.ts +52 -0
  234. package/src/primitives/composer/trigger/matchesTriggerItemQuery.ts +13 -0
  235. package/src/primitives/composer/trigger/triggerDetectionResource.ts +10 -7
  236. package/src/primitives/composer/trigger/triggerNavigationResource.ts +3 -10
  237. package/src/primitives/composer/trigger/triggerSelectionResource.test.ts +15 -3
  238. package/src/primitives/composer/trigger/triggerSelectionResource.ts +1 -4
  239. package/src/primitives/composer.ts +1 -0
  240. package/src/primitives/message/MessageRoot.tsx +1 -1
  241. package/src/primitives/selectionToolbar/SelectionToolbarQuote.tsx +1 -1
  242. package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +1 -1
  243. package/src/primitives/thread/ThreadViewport.tsx +1 -1
  244. package/src/primitives/thread/ThreadViewportFooter.tsx +1 -1
  245. package/src/primitives/thread/useThreadViewportAutoScroll.ts +8 -7
  246. package/src/primitives/threadList/ThreadListNew.tsx +1 -1
  247. package/src/primitives/threadListFocusGroup.ts +2 -2
  248. package/src/primitives/threadListItem/ThreadListItemRoot.tsx +1 -1
  249. package/src/primitives/threadListItem/ThreadListItemTrigger.tsx +1 -1
  250. package/src/primitives/threadListItemMore/ThreadListItemMoreContent.tsx +1 -1
  251. package/src/primitives/threadListItemMore/ThreadListItemMoreRoot.tsx +1 -1
  252. package/src/primitives/threadListItemMore/ThreadListItemMoreTrigger.tsx +2 -2
  253. package/src/primitives/threadListItemMore/scope.ts +2 -2
  254. package/src/sandbox-host/SandboxHost.test.tsx +165 -3
  255. package/src/sandbox-host/SandboxHost.tsx +42 -9
  256. package/src/tests/RemoteThreadListRuntime.adapterProvider.test.tsx +31 -1
  257. package/src/unstable/useComposerInputHistory.test.tsx +2 -1
  258. package/src/unstable/useLiveCompletionAdapter.test.tsx +60 -1
  259. package/src/unstable/useLiveCompletionAdapter.ts +4 -1
  260. package/src/unstable/useMentionAdapter.test.tsx +337 -0
  261. package/src/unstable/useMentionAdapter.ts +94 -57
  262. package/src/unstable/useModelContextSnapshot.test.tsx +132 -0
  263. package/src/unstable/useModelContextSnapshot.ts +67 -0
  264. package/src/unstable/useSlashCommandAdapter.test.tsx +141 -0
  265. package/src/unstable/useSlashCommandAdapter.ts +47 -19
  266. package/src/unstable/webmcp/WebMcpRegistrationResource.ts +92 -0
  267. package/src/unstable/webmcp/__tests__/webmcp.fake.tsx +168 -0
  268. package/src/unstable/webmcp/convertTools.test.ts +393 -0
  269. package/src/unstable/webmcp/convertTools.ts +180 -0
  270. package/src/unstable/webmcp/useWebMcpProvider.test.tsx +466 -0
  271. package/src/unstable/webmcp/useWebMcpProvider.ts +150 -0
  272. package/src/unstable/webmcp/webmcp-host.test.ts +142 -0
  273. package/src/unstable/webmcp/webmcp-host.ts +83 -0
  274. package/src/utils/Primitive.tsx +2 -2
  275. package/src/utils/createActionButton.tsx +1 -1
  276. package/src/utils/hooks/useOnResizeContent.ts +1 -1
  277. package/src/utils/hooks/useOnScrollToBottom.ts +1 -1
  278. package/src/utils/smooth/useSmooth.ts +1 -1
  279. package/dist/legacy-runtime/runtime/MessagePartRuntime.d.ts +0 -3
  280. package/dist/legacy-runtime/runtime/MessagePartRuntime.js +0 -2
  281. package/dist/legacy-runtime/runtime/MessageRuntime.d.ts +0 -3
  282. package/dist/legacy-runtime/runtime/MessageRuntime.js +0 -2
  283. package/dist/legacy-runtime/runtime/ThreadListRuntime.d.ts +0 -3
  284. package/dist/legacy-runtime/runtime/ThreadListRuntime.js +0 -2
  285. package/dist/utils/invokeCallbackSafely.d.ts +0 -5
  286. package/dist/utils/invokeCallbackSafely.d.ts.map +0 -1
  287. package/dist/utils/invokeCallbackSafely.js +0 -15
  288. package/dist/utils/invokeCallbackSafely.js.map +0 -1
  289. package/dist/utils/useToolArgsFieldStatus.d.ts +0 -15
  290. package/dist/utils/useToolArgsFieldStatus.d.ts.map +0 -1
  291. package/dist/utils/useToolArgsFieldStatus.js +0 -23
  292. package/dist/utils/useToolArgsFieldStatus.js.map +0 -1
  293. package/src/legacy-runtime/runtime/MessagePartRuntime.ts +0 -2
  294. package/src/legacy-runtime/runtime/MessageRuntime.ts +0 -3
  295. package/src/legacy-runtime/runtime/ThreadListRuntime.ts +0 -4
  296. package/src/utils/invokeCallbackSafely.ts +0 -11
  297. package/src/utils/useToolArgsFieldStatus.ts +0 -18
@@ -1,12 +1,12 @@
1
1
  "use client";
2
- import { Primitive } from "../../utils/Primitive.js";
2
+ import { Primitive as Primitive$1 } from "../../utils/Primitive.js";
3
3
  import { useComposerSend } from "./ComposerSend.js";
4
4
  import { ComposerCompactContext } from "./ComposerCompactContext.js";
5
5
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
6
6
  import { useAuiState } from "@assistant-ui/store";
7
7
  import { forwardRef, useState } from "@assistant-ui/tap/react-shim";
8
8
  import { jsx } from "react/jsx-runtime";
9
- import { composeEventHandlers } from "@radix-ui/primitive";
9
+ import { composeEventHandlers } from "radix-ui/internal";
10
10
  //#region src/primitives/composer/ComposerRoot.tsx
11
11
  const CONTENT_EDITABLE_SELECTOR = "[contenteditable]:not([contenteditable='false'])";
12
12
  const COMPOSER_INPUT_SELECTOR = `textarea:not(:disabled), ${CONTENT_EDITABLE_SELECTOR}`;
@@ -109,7 +109,7 @@ const ComposerPrimitiveRoot = forwardRef((t0, forwardedRef) => {
109
109
  } else t7 = $[14];
110
110
  let t8;
111
111
  if ($[15] !== forwardedRef || $[16] !== rest || $[17] !== t5 || $[18] !== t6 || $[19] !== t7) {
112
- t8 = /* @__PURE__ */ jsx(Primitive.form, {
112
+ t8 = /* @__PURE__ */ jsx(Primitive$1.form, {
113
113
  ...rest,
114
114
  "data-compact": t5,
115
115
  ref: forwardedRef,
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerRoot.js","names":["c","_c","composeEventHandlers","useAuiState","Primitive","ComponentRef","FormEvent","forwardRef","ComponentPropsWithoutRef","MouseEvent","useMemo","useState","useComposerSend","ComposerCompactContext","CONTENT_EDITABLE_SELECTOR","COMPOSER_INPUT_SELECTOR","INTERACTIVE_ELEMENT_SELECTOR","join","ComposerPrimitiveRoot","Element","form","Props","compact","t0","forwardedRef","$","onMouseDown","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","handleMouseDown","_temp","t4","t5","undefined","t6","t7","t8","t9","displayName","e_0","button","target","currentTarget","contains","interactive","closest","input","querySelector","focus"],"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 type MouseEvent,\n useMemo,\n useState,\n} from \"react\";\nimport { useComposerSend } from \"./ComposerSend\";\nimport { ComposerCompactContext } from \"./ComposerCompactContext\";\n\nconst CONTENT_EDITABLE_SELECTOR =\n \"[contenteditable]:not([contenteditable='false'])\";\n\nconst COMPOSER_INPUT_SELECTOR = `textarea:not(:disabled), ${CONTENT_EDITABLE_SELECTOR}`;\n\n// Keeps tabindex=\"-1\": roving-tabindex widgets click-focus items at -1.\nconst INTERACTIVE_ELEMENT_SELECTOR = [\n \"a\",\n \"audio[controls]\",\n \"button\",\n \"details\",\n \"embed\",\n \"iframe\",\n \"input\",\n \"label\",\n \"select\",\n \"summary\",\n \"textarea\",\n \"video[controls]\",\n CONTENT_EDITABLE_SELECTOR,\n \"[tabindex]\",\n].join(\", \");\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 * Clicking blank form space focuses the composer input (the first textarea or\n * contenteditable inside the form). Text selection cannot start from blank\n * areas; descendants that need native mousedown defaults can call\n * `stopPropagation()` in their own `onMouseDown`.\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, onMouseDown, 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 const handleMouseDown = (e: MouseEvent<HTMLFormElement>) => {\n if (e.button !== 0) return;\n const target = e.target;\n // Portaled descendants (e.g. a dialog overlay) propagate mousedown through\n // the React tree while their DOM nodes live outside the form.\n if (!(target instanceof Element) || !e.currentTarget.contains(target))\n return;\n // Bound the ancestor walk to the form: hosts like AssistantModal render\n // the composer inside a wrapper carrying tabindex=\"-1\" (Radix FocusScope).\n const interactive = target.closest(INTERACTIVE_ELEMENT_SELECTOR);\n if (interactive && e.currentTarget.contains(interactive)) return;\n const input = e.currentTarget.querySelector<HTMLElement>(\n COMPOSER_INPUT_SELECTOR,\n );\n if (!input) return;\n e.preventDefault();\n input.focus();\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 onMouseDown={composeEventHandlers(onMouseDown, handleMouseDown)}\n />\n </ComposerCompactContext.Provider>\n );\n});\n\nComposerPrimitiveRoot.displayName = \"ComposerPrimitive.Root\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"ComposerRoot.js","names":["c","_c","composeEventHandlers","useAuiState","Primitive","ComponentRef","FormEvent","forwardRef","ComponentPropsWithoutRef","MouseEvent","useMemo","useState","useComposerSend","ComposerCompactContext","CONTENT_EDITABLE_SELECTOR","COMPOSER_INPUT_SELECTOR","INTERACTIVE_ELEMENT_SELECTOR","join","ComposerPrimitiveRoot","Element","form","Props","compact","t0","forwardedRef","$","onMouseDown","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","handleMouseDown","_temp","t4","t5","undefined","t6","t7","t8","t9","displayName","e_0","button","target","currentTarget","contains","interactive","closest","input","querySelector","focus"],"sources":["../../../src/primitives/composer/ComposerRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { composeEventHandlers } from \"radix-ui/internal\";\nimport { useAuiState } from \"@assistant-ui/store\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n type FormEvent,\n forwardRef,\n type ComponentPropsWithoutRef,\n type MouseEvent,\n useMemo,\n useState,\n} from \"react\";\nimport { useComposerSend } from \"./ComposerSend\";\nimport { ComposerCompactContext } from \"./ComposerCompactContext\";\n\nconst CONTENT_EDITABLE_SELECTOR =\n \"[contenteditable]:not([contenteditable='false'])\";\n\nconst COMPOSER_INPUT_SELECTOR = `textarea:not(:disabled), ${CONTENT_EDITABLE_SELECTOR}`;\n\n// Keeps tabindex=\"-1\": roving-tabindex widgets click-focus items at -1.\nconst INTERACTIVE_ELEMENT_SELECTOR = [\n \"a\",\n \"audio[controls]\",\n \"button\",\n \"details\",\n \"embed\",\n \"iframe\",\n \"input\",\n \"label\",\n \"select\",\n \"summary\",\n \"textarea\",\n \"video[controls]\",\n CONTENT_EDITABLE_SELECTOR,\n \"[tabindex]\",\n].join(\", \");\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 * Clicking blank form space focuses the composer input (the first textarea or\n * contenteditable inside the form). Text selection cannot start from blank\n * areas; descendants that need native mousedown defaults can call\n * `stopPropagation()` in their own `onMouseDown`.\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, onMouseDown, 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 const handleMouseDown = (e: MouseEvent<HTMLFormElement>) => {\n if (e.button !== 0) return;\n const target = e.target;\n // Portaled descendants (e.g. a dialog overlay) propagate mousedown through\n // the React tree while their DOM nodes live outside the form.\n if (!(target instanceof Element) || !e.currentTarget.contains(target))\n return;\n // Bound the ancestor walk to the form: hosts like AssistantModal render\n // the composer inside a wrapper carrying tabindex=\"-1\" (Radix FocusScope).\n const interactive = target.closest(INTERACTIVE_ELEMENT_SELECTOR);\n if (interactive && e.currentTarget.contains(interactive)) return;\n const input = e.currentTarget.querySelector<HTMLElement>(\n COMPOSER_INPUT_SELECTOR,\n );\n if (!input) return;\n e.preventDefault();\n input.focus();\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 onMouseDown={composeEventHandlers(onMouseDown, handleMouseDown)}\n />\n </ComposerCompactContext.Provider>\n );\n});\n\nComposerPrimitiveRoot.displayName = \"ComposerPrimitive.Root\";\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Primitive } from "../../../utils/Primitive.js";
2
+ import { TriggerMatcher } from "./detectTrigger.js";
2
3
  import { TriggerBehavior } from "./triggerSelectionResource.js";
3
4
  import { TriggerPopoverResourceOutput } from "./TriggerPopoverResource.js";
4
5
  import { Unstable_TriggerAdapter } from "@assistant-ui/core";
@@ -17,6 +18,8 @@ declare namespace ComposerPrimitiveTriggerPopover {
17
18
  type Props = Omit<ComponentPropsWithoutRef<typeof Primitive.div>, "onSelect"> & {
18
19
  /** The character(s) that activate this trigger (e.g. `"@"`, `"/"`). Also serves as the trigger identity within the root. */
19
20
  readonly char: string;
21
+ /** Overrides trigger detection for both textarea and Lexical inputs. `endOffset` is the exclusive replace bound. */
22
+ readonly matcher?: TriggerMatcher | undefined;
20
23
  /** Adapter providing categories and items. */
21
24
  readonly adapter?: Unstable_TriggerAdapter | undefined;
22
25
  /** Whether the adapter is resolving items, surfaced to the popover scope for async sources. @default false */
@@ -57,6 +60,8 @@ declare const ComposerPrimitiveTriggerPopover: import("react").ForwardRefExoticC
57
60
  } & import("react").RefAttributes<HTMLDivElement>, "ref">, "onSelect"> & {
58
61
  /** The character(s) that activate this trigger (e.g. `"@"`, `"/"`). Also serves as the trigger identity within the root. */
59
62
  readonly char: string;
63
+ /** Overrides trigger detection for both textarea and Lexical inputs. `endOffset` is the exclusive replace bound. */
64
+ readonly matcher?: TriggerMatcher | undefined;
60
65
  /** Adapter providing categories and items. */
61
66
  readonly adapter?: Unstable_TriggerAdapter | undefined;
62
67
  /** Whether the adapter is resolving items, surfaced to the popover scope for async sources. @default false */
@@ -1 +1 @@
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;;;;;;WAnCzB;;WAEI,UAAA;;WAEE;oBA6JxB,cAAA"}
1
+ {"version":3,"file":"TriggerPopover.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopover.tsx"],"mappings":";;;;;;;cAmCa,qCAA6B;cAS7B,6CAAqC;;KAItC;EACV,SAAS,UAAU;;;cAOR,sCAA8B;kBAS1B;OACH,UAAU,oBAAoB,UAAU;OACxC,QAAQ,KAClB,gCAAgC,UAAU;;aAIjC;;aAEA,UAAU;;aAEV,UAAU;;aAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+BA,iDAA+B,0BAAA,KAAA,KAAA,qBAAA,gBAAA,kCAAA,eAAA;;;;;;WArCzB;;WAEI,UAAA;;WAEA,UAAA;;WAEE;oBAyKxB,cAAA"}
@@ -53,40 +53,60 @@ const useTriggerBehaviorRegistration = () => {
53
53
  * ```
54
54
  */
55
55
  const ComposerPrimitiveTriggerPopover = forwardRef((t0, forwardedRef) => {
56
- const $ = c(61);
56
+ const $ = c(69);
57
57
  let adapter;
58
58
  let ariaLabel;
59
59
  let char;
60
60
  let children;
61
+ let matcher;
61
62
  let props;
62
63
  let t1;
63
64
  if ($[0] !== t0) {
64
- ({char, adapter, isLoading: t1, "aria-label": ariaLabel, children, ...props} = t0);
65
+ ({char, matcher, adapter, isLoading: t1, "aria-label": ariaLabel, children, ...props} = t0);
65
66
  $[0] = t0;
66
67
  $[1] = adapter;
67
68
  $[2] = ariaLabel;
68
69
  $[3] = char;
69
70
  $[4] = children;
70
- $[5] = props;
71
- $[6] = t1;
71
+ $[5] = matcher;
72
+ $[6] = props;
73
+ $[7] = t1;
72
74
  } else {
73
75
  adapter = $[1];
74
76
  ariaLabel = $[2];
75
77
  char = $[3];
76
78
  children = $[4];
77
- props = $[5];
78
- t1 = $[6];
79
+ matcher = $[5];
80
+ props = $[6];
81
+ t1 = $[7];
79
82
  }
80
83
  const isLoading = t1 === void 0 ? false : t1;
81
84
  const aui = useAui();
82
85
  const text = useAuiState(_temp);
83
86
  const popoverId = useId();
87
+ const matcherRef = useRef(matcher);
88
+ let t2;
89
+ if ($[8] !== matcher) {
90
+ t2 = () => {
91
+ matcherRef.current = matcher;
92
+ };
93
+ $[8] = matcher;
94
+ $[9] = t2;
95
+ } else t2 = $[9];
96
+ useEffect(t2);
97
+ let t3;
98
+ if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
99
+ t3 = () => (nextText, triggerChar, cursorPosition) => matcherRef.current(nextText, triggerChar, cursorPosition);
100
+ $[10] = t3;
101
+ } else t3 = $[10];
102
+ const [registeredMatcher] = useState(t3);
103
+ const hasMatcher = matcher !== void 0;
84
104
  const behaviorRef = useRef(null);
85
105
  const [behavior, setBehavior] = useState(null);
86
106
  const registrationCountRef = useRef(0);
87
- let t2;
88
- if ($[7] !== char) {
89
- t2 = (next) => {
107
+ let t4;
108
+ if ($[11] !== char) {
109
+ t4 = (next) => {
90
110
  registrationCountRef.current = registrationCountRef.current + 1;
91
111
  if (process.env.NODE_ENV !== "production" && registrationCountRef.current > 1) console.warn(`[assistant-ui] TriggerPopover "${char}" received more than one behavior child. Exactly one <TriggerPopover.Directive> or <TriggerPopover.Action> is allowed per TriggerPopover; the last registration wins.`);
92
112
  behaviorRef.current = next;
@@ -99,149 +119,156 @@ const ComposerPrimitiveTriggerPopover = forwardRef((t0, forwardedRef) => {
99
119
  }
100
120
  };
101
121
  };
102
- $[7] = char;
103
- $[8] = t2;
104
- } else t2 = $[8];
105
- const register = t2;
106
- let t3;
107
- if ($[9] !== register) {
108
- t3 = { register };
109
- $[9] = register;
110
- $[10] = t3;
111
- } else t3 = $[10];
112
- const registration = t3;
113
- const t4 = behavior ?? void 0;
122
+ $[11] = char;
123
+ $[12] = t4;
124
+ } else t4 = $[12];
125
+ const register = t4;
114
126
  let t5;
115
- if ($[11] !== adapter || $[12] !== aui || $[13] !== char || $[14] !== isLoading || $[15] !== popoverId || $[16] !== t4 || $[17] !== text) {
116
- t5 = TriggerPopoverResource({
127
+ if ($[13] !== register) {
128
+ t5 = { register };
129
+ $[13] = register;
130
+ $[14] = t5;
131
+ } else t5 = $[14];
132
+ const registration = t5;
133
+ const t6 = behavior ?? void 0;
134
+ let t7;
135
+ if ($[15] !== adapter || $[16] !== aui || $[17] !== char || $[18] !== isLoading || $[19] !== matcher || $[20] !== popoverId || $[21] !== t6 || $[22] !== text) {
136
+ t7 = TriggerPopoverResource({
117
137
  adapter,
118
138
  text,
119
139
  triggerChar: char,
120
- behavior: t4,
140
+ matcher,
141
+ behavior: t6,
121
142
  aui,
122
143
  popoverId,
123
144
  isLoading
124
145
  });
125
- $[11] = adapter;
126
- $[12] = aui;
127
- $[13] = char;
128
- $[14] = isLoading;
129
- $[15] = popoverId;
130
- $[16] = t4;
131
- $[17] = text;
132
- $[18] = t5;
133
- } else t5 = $[18];
134
- const resource = useResource(t5);
135
- let t6;
136
- if ($[19] !== resource) {
137
- t6 = () => resource;
138
- $[19] = resource;
139
- $[20] = t6;
140
- } else t6 = $[20];
141
- const getResource = useEffectEvent(t6);
146
+ $[15] = adapter;
147
+ $[16] = aui;
148
+ $[17] = char;
149
+ $[18] = isLoading;
150
+ $[19] = matcher;
151
+ $[20] = popoverId;
152
+ $[21] = t6;
153
+ $[22] = text;
154
+ $[23] = t7;
155
+ } else t7 = $[23];
156
+ const resource = useResource(t7);
157
+ let t8;
158
+ if ($[24] !== resource) {
159
+ t8 = () => resource;
160
+ $[24] = resource;
161
+ $[25] = t8;
162
+ } else t8 = $[25];
163
+ const getResource = useEffectEvent(t8);
142
164
  const root = useTriggerPopoverRootContext();
143
- let t7;
144
- if ($[21] !== behavior || $[22] !== char || $[23] !== getResource || $[24] !== root) {
145
- t7 = () => root.register({
165
+ let t9;
166
+ if ($[26] !== behavior || $[27] !== char || $[28] !== getResource || $[29] !== hasMatcher || $[30] !== registeredMatcher || $[31] !== root) {
167
+ t9 = () => root.register({
146
168
  char,
169
+ ...hasMatcher ? { matcher: registeredMatcher } : {},
147
170
  ...behavior ? { behavior } : {},
148
171
  resource: getResource()
149
172
  });
150
- $[21] = behavior;
151
- $[22] = char;
152
- $[23] = getResource;
153
- $[24] = root;
154
- $[25] = t7;
155
- } else t7 = $[25];
156
- let t8;
157
- if ($[26] !== behavior || $[27] !== char || $[28] !== root) {
158
- t8 = [
173
+ $[26] = behavior;
174
+ $[27] = char;
175
+ $[28] = getResource;
176
+ $[29] = hasMatcher;
177
+ $[30] = registeredMatcher;
178
+ $[31] = root;
179
+ $[32] = t9;
180
+ } else t9 = $[32];
181
+ let t10;
182
+ if ($[33] !== behavior || $[34] !== char || $[35] !== hasMatcher || $[36] !== root) {
183
+ t10 = [
159
184
  root,
160
185
  char,
186
+ hasMatcher,
161
187
  behavior
162
188
  ];
163
- $[26] = behavior;
164
- $[27] = char;
165
- $[28] = root;
166
- $[29] = t8;
167
- } else t8 = $[29];
168
- useEffect(t7, t8);
189
+ $[33] = behavior;
190
+ $[34] = char;
191
+ $[35] = hasMatcher;
192
+ $[36] = root;
193
+ $[37] = t10;
194
+ } else t10 = $[37];
195
+ useEffect(t9, t10);
169
196
  const pluginRegistry = useComposerInputPluginRegistryOptional();
170
- let t9;
171
- if ($[30] !== getResource || $[31] !== pluginRegistry) {
172
- t9 = () => {
197
+ let t11;
198
+ if ($[38] !== getResource || $[39] !== pluginRegistry) {
199
+ t11 = () => {
173
200
  if (!pluginRegistry) return;
174
201
  return pluginRegistry.register(getResource());
175
202
  };
176
- $[30] = getResource;
177
- $[31] = pluginRegistry;
178
- $[32] = t9;
179
- } else t9 = $[32];
180
- let t10;
181
- if ($[33] !== pluginRegistry) {
182
- t10 = [pluginRegistry];
183
- $[33] = pluginRegistry;
184
- $[34] = t10;
185
- } else t10 = $[34];
186
- useEffect(t9, t10);
203
+ $[38] = getResource;
204
+ $[39] = pluginRegistry;
205
+ $[40] = t11;
206
+ } else t11 = $[40];
207
+ let t12;
208
+ if ($[41] !== pluginRegistry) {
209
+ t12 = [pluginRegistry];
210
+ $[41] = pluginRegistry;
211
+ $[42] = t12;
212
+ } else t12 = $[42];
213
+ useEffect(t11, t12);
187
214
  const open = behavior !== null && resource.open;
188
215
  const aria = useTriggerPopoverAriaPublish();
189
- let t11;
190
- let t12;
191
- if ($[35] !== aria || $[36] !== char || $[37] !== open) {
192
- t11 = () => {
216
+ let t13;
217
+ let t14;
218
+ if ($[43] !== aria || $[44] !== char || $[45] !== open) {
219
+ t13 = () => {
193
220
  if (!open) return;
194
221
  return () => {
195
222
  aria.setActiveAria(char, null);
196
223
  };
197
224
  };
198
- t12 = [
225
+ t14 = [
199
226
  aria,
200
227
  char,
201
228
  open
202
229
  ];
203
- $[35] = aria;
204
- $[36] = char;
205
- $[37] = open;
206
- $[38] = t11;
207
- $[39] = t12;
230
+ $[43] = aria;
231
+ $[44] = char;
232
+ $[45] = open;
233
+ $[46] = t13;
234
+ $[47] = t14;
208
235
  } else {
209
- t11 = $[38];
210
- t12 = $[39];
236
+ t13 = $[46];
237
+ t14 = $[47];
211
238
  }
212
- useEffect(t11, t12);
213
- let t13;
214
- let t14;
215
- if ($[40] !== aria || $[41] !== char || $[42] !== open || $[43] !== popoverId || $[44] !== resource.highlightedItemId) {
216
- t13 = () => {
239
+ useEffect(t13, t14);
240
+ let t15;
241
+ let t16;
242
+ if ($[48] !== aria || $[49] !== char || $[50] !== open || $[51] !== popoverId || $[52] !== resource.highlightedItemId) {
243
+ t15 = () => {
217
244
  if (!open) return;
218
245
  aria.setActiveAria(char, {
219
246
  popoverId,
220
247
  highlightedItemId: resource.highlightedItemId
221
248
  });
222
249
  };
223
- t14 = [
250
+ t16 = [
224
251
  aria,
225
252
  char,
226
253
  popoverId,
227
254
  open,
228
255
  resource.highlightedItemId
229
256
  ];
230
- $[40] = aria;
231
- $[41] = char;
232
- $[42] = open;
233
- $[43] = popoverId;
234
- $[44] = resource.highlightedItemId;
235
- $[45] = t13;
236
- $[46] = t14;
257
+ $[48] = aria;
258
+ $[49] = char;
259
+ $[50] = open;
260
+ $[51] = popoverId;
261
+ $[52] = resource.highlightedItemId;
262
+ $[53] = t15;
263
+ $[54] = t16;
237
264
  } else {
238
- t13 = $[45];
239
- t14 = $[46];
265
+ t15 = $[53];
266
+ t16 = $[54];
240
267
  }
241
- useEffect(t13, t14);
242
- let t15;
243
- if ($[47] !== ariaLabel || $[48] !== children || $[49] !== forwardedRef || $[50] !== open || $[51] !== popoverId || $[52] !== props || $[53] !== resource.highlightedItemId) {
244
- t15 = open ? /* @__PURE__ */ jsx(Primitive.div, {
268
+ useEffect(t15, t16);
269
+ let t17;
270
+ if ($[55] !== ariaLabel || $[56] !== children || $[57] !== forwardedRef || $[58] !== open || $[59] !== popoverId || $[60] !== props || $[61] !== resource.highlightedItemId) {
271
+ t17 = open ? /* @__PURE__ */ jsx(Primitive.div, {
245
272
  role: "listbox",
246
273
  id: popoverId,
247
274
  "aria-label": ariaLabel ?? "Suggestions",
@@ -251,36 +278,36 @@ const ComposerPrimitiveTriggerPopover = forwardRef((t0, forwardedRef) => {
251
278
  ref: forwardedRef,
252
279
  children
253
280
  }) : children;
254
- $[47] = ariaLabel;
255
- $[48] = children;
256
- $[49] = forwardedRef;
257
- $[50] = open;
258
- $[51] = popoverId;
259
- $[52] = props;
260
- $[53] = resource.highlightedItemId;
261
- $[54] = t15;
262
- } else t15 = $[54];
263
- let t16;
264
- if ($[55] !== resource || $[56] !== t15) {
265
- t16 = /* @__PURE__ */ jsx(TriggerPopoverScopeContext.Provider, {
281
+ $[55] = ariaLabel;
282
+ $[56] = children;
283
+ $[57] = forwardedRef;
284
+ $[58] = open;
285
+ $[59] = popoverId;
286
+ $[60] = props;
287
+ $[61] = resource.highlightedItemId;
288
+ $[62] = t17;
289
+ } else t17 = $[62];
290
+ let t18;
291
+ if ($[63] !== resource || $[64] !== t17) {
292
+ t18 = /* @__PURE__ */ jsx(TriggerPopoverScopeContext.Provider, {
266
293
  value: resource,
267
- children: t15
294
+ children: t17
268
295
  });
269
- $[55] = resource;
270
- $[56] = t15;
271
- $[57] = t16;
272
- } else t16 = $[57];
273
- let t17;
274
- if ($[58] !== registration || $[59] !== t16) {
275
- t17 = /* @__PURE__ */ jsx(TriggerBehaviorRegistrationContext.Provider, {
296
+ $[63] = resource;
297
+ $[64] = t17;
298
+ $[65] = t18;
299
+ } else t18 = $[65];
300
+ let t19;
301
+ if ($[66] !== registration || $[67] !== t18) {
302
+ t19 = /* @__PURE__ */ jsx(TriggerBehaviorRegistrationContext.Provider, {
276
303
  value: registration,
277
- children: t16
304
+ children: t18
278
305
  });
279
- $[58] = registration;
280
- $[59] = t16;
281
- $[60] = t17;
282
- } else t17 = $[60];
283
- return t17;
306
+ $[66] = registration;
307
+ $[67] = t18;
308
+ $[68] = t19;
309
+ } else t19 = $[68];
310
+ return t19;
284
311
  });
285
312
  ComposerPrimitiveTriggerPopover.displayName = "ComposerPrimitive.TriggerPopover";
286
313
  function _temp(s) {
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopover.js","names":["c","_c","useAui","useAuiState","useResource","Unstable_TriggerAdapter","createContext","forwardRef","useCallback","useContext","useEffect","useEffectEvent","useId","useMemo","useRef","useState","ComponentPropsWithoutRef","ComponentRef","Primitive","useComposerInputPluginRegistryOptional","TriggerPopoverResource","TriggerPopoverResourceOutput","TriggerBehavior","useTriggerPopoverAriaPublish","useTriggerPopoverRootContext","TriggerPopoverScopeContext","useTriggerPopoverScopeContext","ctx","Error","useTriggerPopoverScopeContextOptional","TriggerBehaviorRegistration","register","behavior","TriggerBehaviorRegistrationContext","useTriggerBehaviorRegistration","ComposerPrimitiveTriggerPopover","Element","div","Props","Omit","char","adapter","isLoading","t0","forwardedRef","$","ariaLabel","children","props","t1","undefined","aui","text","_temp","popoverId","behaviorRef","setBehavior","registrationCountRef","t2","next","current","process","env","NODE_ENV","console","warn","Math","max","t3","registration","t4","t5","triggerChar","resource","t6","getResource","root","t7","t8","pluginRegistry","t9","t10","open","aria","t11","t12","setActiveAria","t13","t14","highlightedItemId","t15","t16","t17","displayName","s","composer"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopover.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAui, useAuiState } from \"@assistant-ui/store\";\nimport { useResource } from \"@assistant-ui/tap\";\nimport type { Unstable_TriggerAdapter } from \"@assistant-ui/core\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useEffectEvent,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ComponentRef,\n} from \"react\";\nimport { Primitive } from \"../../../utils/Primitive\";\nimport { useComposerInputPluginRegistryOptional } from \"../ComposerInputPluginContext\";\nimport {\n TriggerPopoverResource,\n type TriggerPopoverResourceOutput,\n} from \"./TriggerPopoverResource\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\nimport {\n useTriggerPopoverAriaPublish,\n useTriggerPopoverRootContext,\n} from \"./TriggerPopoverRootContext\";\n\nconst TriggerPopoverScopeContext =\n createContext<TriggerPopoverResourceOutput | null>(null);\n\nexport const useTriggerPopoverScopeContext = () => {\n const ctx = useContext(TriggerPopoverScopeContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverScopeContext must be used within ComposerPrimitive.TriggerPopover\",\n );\n return ctx;\n};\n\nexport const useTriggerPopoverScopeContextOptional = () =>\n useContext(TriggerPopoverScopeContext);\n\n/** Registration API exposed to behavior sub-primitives. */\nexport type TriggerBehaviorRegistration = {\n register(behavior: TriggerBehavior): () => void;\n};\n\nconst TriggerBehaviorRegistrationContext =\n createContext<TriggerBehaviorRegistration | null>(null);\n\n/** Obtain the registration handle from the parent `<TriggerPopover>`. */\nexport const useTriggerBehaviorRegistration = () => {\n const ctx = useContext(TriggerBehaviorRegistrationContext);\n if (!ctx)\n throw new Error(\n \"TriggerPopover.Directive / TriggerPopover.Action must be rendered inside ComposerPrimitive.TriggerPopover\",\n );\n return ctx;\n};\n\nexport namespace ComposerPrimitiveTriggerPopover {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = Omit<\n ComponentPropsWithoutRef<typeof Primitive.div>,\n \"onSelect\"\n > & {\n /** The character(s) that activate this trigger (e.g. `\"@\"`, `\"/\"`). Also serves as the trigger identity within the root. */\n readonly char: string;\n /** Adapter providing categories and items. */\n readonly adapter?: Unstable_TriggerAdapter | undefined;\n /** Whether the adapter is resolving items, surfaced to the popover scope for async sources. @default false */\n readonly isLoading?: boolean | undefined;\n };\n}\n\n/**\n * Declares a trigger and renders its popover container. The popover only\n * renders its DOM (and children) when the trigger character is active in the\n * composer input and a behavior sub-primitive has been registered.\n *\n * A behavior is contributed by rendering exactly one of\n * `<TriggerPopover.Directive>` or `<TriggerPopover.Action>` as a child. Without\n * a behavior the trigger stays closed.\n *\n * Must be placed inside `ComposerPrimitive.Unstable_TriggerPopoverRoot`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopover\n * char=\"@\"\n * adapter={mentionAdapter}\n * >\n * <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />\n * <ComposerPrimitive.Unstable_TriggerPopoverCategories>\n * {(cats) => cats.map(...)}\n * </ComposerPrimitive.Unstable_TriggerPopoverCategories>\n * <ComposerPrimitive.Unstable_TriggerPopoverItems>\n * {(items) => items.map(...)}\n * </ComposerPrimitive.Unstable_TriggerPopoverItems>\n * </ComposerPrimitive.Unstable_TriggerPopover>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopover = forwardRef<\n ComposerPrimitiveTriggerPopover.Element,\n ComposerPrimitiveTriggerPopover.Props\n>(\n (\n {\n char,\n adapter,\n isLoading = false,\n \"aria-label\": ariaLabel,\n children,\n ...props\n },\n forwardedRef,\n ) => {\n const aui = useAui();\n const text = useAuiState((s) => s.composer.text);\n const popoverId = useId();\n\n // Track in state (for resource reactivity) + ref (dev warning on duplicate registrations).\n const behaviorRef = useRef<TriggerBehavior | null>(null);\n const [behavior, setBehavior] = useState<TriggerBehavior | null>(null);\n const registrationCountRef = useRef(0);\n\n const register = useCallback<TriggerBehaviorRegistration[\"register\"]>(\n (next) => {\n registrationCountRef.current += 1;\n if (\n process.env.NODE_ENV !== \"production\" &&\n registrationCountRef.current > 1\n ) {\n console.warn(\n `[assistant-ui] TriggerPopover \"${char}\" received more than one behavior child. Exactly one <TriggerPopover.Directive> or <TriggerPopover.Action> is allowed per TriggerPopover; the last registration wins.`,\n );\n }\n behaviorRef.current = next;\n setBehavior(next);\n return () => {\n registrationCountRef.current = Math.max(\n 0,\n registrationCountRef.current - 1,\n );\n if (behaviorRef.current === next) {\n behaviorRef.current = null;\n setBehavior(null);\n }\n };\n },\n [char],\n );\n\n const registration = useMemo<TriggerBehaviorRegistration>(\n () => ({ register }),\n [register],\n );\n\n const resource = useResource(\n TriggerPopoverResource({\n adapter,\n text,\n triggerChar: char,\n behavior: behavior ?? undefined,\n aui,\n popoverId,\n isLoading,\n }),\n );\n\n const getResource = useEffectEvent(() => resource);\n\n const root = useTriggerPopoverRootContext();\n useEffect(() => {\n return root.register({\n char,\n ...(behavior ? { behavior } : {}),\n resource: getResource(),\n });\n }, [root, char, behavior]);\n\n const pluginRegistry = useComposerInputPluginRegistryOptional();\n useEffect(() => {\n if (!pluginRegistry) return undefined;\n return pluginRegistry.register(getResource());\n }, [pluginRegistry]);\n\n const open = behavior !== null && resource.open;\n\n const aria = useTriggerPopoverAriaPublish();\n\n useEffect(() => {\n if (!open) return undefined;\n return () => {\n aria.setActiveAria(char, null);\n };\n }, [aria, char, open]);\n\n useEffect(() => {\n if (!open) return;\n aria.setActiveAria(char, {\n popoverId,\n highlightedItemId: resource.highlightedItemId,\n });\n }, [aria, char, popoverId, open, resource.highlightedItemId]);\n\n return (\n <TriggerBehaviorRegistrationContext.Provider value={registration}>\n <TriggerPopoverScopeContext.Provider value={resource}>\n {open ? (\n <Primitive.div\n role=\"listbox\"\n id={popoverId}\n aria-label={ariaLabel ?? \"Suggestions\"}\n aria-activedescendant={resource.highlightedItemId}\n data-state=\"open\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Primitive.div>\n ) : (\n children\n )}\n </TriggerPopoverScopeContext.Provider>\n </TriggerBehaviorRegistrationContext.Provider>\n );\n },\n);\n\nComposerPrimitiveTriggerPopover.displayName =\n \"ComposerPrimitive.TriggerPopover\";\n"],"mappings":";;;;;;;;;;;AA+BA,MAAMyB,6BACJnB,cAAmD,IAAI;AAEzD,MAAaoB,sCAAgC;CAC3C,MAAAC,MAAYlB,WAAWgB,0BAA0B;CACjD,IAAI,CAACE,KACH,MAAM,IAAIC,MACR,oFACF;CAAE,OACGD;AAAG;AAGZ,MAAaE,8CAAwC;CAAA,OACnDpB,WAAWgB,0BAA0B;AAAC;AAOxC,MAAMQ,qCACJ3B,cAAkD,IAAI;;AAGxD,MAAa4B,uCAAiC;CAC5C,MAAAP,MAAYlB,WAAWwB,kCAAkC;CACzD,IAAI,CAACN,KACH,MAAM,IAAIC,MACR,2GACF;CAAE,OACGD;AAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CZ,MAAaQ,kCAAkC5B,YAI7CoC,IAAAC,iBAAA;CAAA,MAAAC,IAAA5C,EAAA,EAAA;CAAA,IAAAwC;CAAA,IAAAK;CAAA,IAAAN;CAAA,IAAAO;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAJ,EAAA,OAAAF,IAAA;EACE,CAAA,CAAAH,MAAAC,SAAAC,WAAAO,IAAA,cAAAH,WAAAC,aAAAC,SAAAL;EAOCE,EAAA,KAAAF;EAAAE,EAAA,KAAAJ;EAAAI,EAAA,KAAAC;EAAAD,EAAA,KAAAL;EAAAK,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAA;EAAAR,UAAAI,EAAA;EAAAC,YAAAD,EAAA;EAAAL,OAAAK,EAAA;EAAAE,WAAAF,EAAA;EAAAG,QAAAH,EAAA;EAAAI,KAAAJ,EAAA;CAAA;CAJC,MAAAH,YAAAO,OAAAC,KAAAA,IAAA,QAAAD;CAOF,MAAAE,MAAYjD,OAAO;CACnB,MAAAkD,OAAajD,YAAYkD,KAAsB;CAC/C,MAAAC,YAAkB1C,MAAM;CAGxB,MAAA2C,cAAoBzC,OAA+B,IAAI;CACvD,MAAA,CAAAkB,UAAAwB,eAAgCzC,SAAiC,IAAI;CACrE,MAAA0C,uBAA6B3C,OAAO,CAAC;CAAE,IAAA4C;CAAA,IAAAb,EAAA,OAAAL,MAAA;EAGrCkB,MAAAC,SAAA;GACEF,qBAAoBG,UAApBH,qBAAoBG,UAAY;GAChC,IACEC,QAAOC,IAAIC,aAAc,gBACzBN,qBAAoBG,UAAW,GAE/BI,QAAOC,KACL,kCAAkCzB,KAAI,sKACxC;GAEFe,YAAWK,UAAWD;GACtBH,YAAYG,IAAI;GAAC,aACV;IACLF,qBAAoBG,UAAWM,KAAIC,IACjC,GACAV,qBAAoBG,UAAW,CACjC;IACA,IAAIL,YAAWK,YAAaD,MAAI;KAC9BJ,YAAWK,UAAW;KACtBJ,YAAY,IAAI;IAAC;GAClB;EACF;EACFX,EAAA,KAAAL;EAAAK,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAvBH,MAAAd,WAAiB2B;CAyBf,IAAAU;CAAA,IAAAvB,EAAA,OAAAd,UAAA;EAGOqC,KAAA,EAAArC,SAAW;EAACc,EAAA,KAAAd;EAAAc,EAAA,MAAAuB;CAAA,OAAAA,KAAAvB,EAAA;CADrB,MAAAwB,eACSD;CASK,MAAAE,KAAAtC,YAAAkB,KAAAA;CAAqB,IAAAqB;CAAA,IAAA1B,EAAA,QAAAJ,WAAAI,EAAA,QAAAM,OAAAN,EAAA,QAAAL,QAAAK,EAAA,QAAAH,aAAAG,EAAA,QAAAS,aAAAT,EAAA,QAAAyB,MAAAzB,EAAA,QAAAO,MAAA;EAJjCmB,KAAAnD,uBAAuB;GAAAqB;GAAAW;GAAAoB,aAGRhC;GAAIR,UACPsC;GAAqBnB;GAAAG;GAAAZ;EAIjC,CAAC;EAACG,EAAA,MAAAJ;EAAAI,EAAA,MAAAM;EAAAN,EAAA,MAAAL;EAAAK,EAAA,MAAAH;EAAAG,EAAA,MAAAS;EAAAT,EAAA,MAAAyB;EAAAzB,EAAA,MAAAO;EAAAP,EAAA,MAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CATJ,MAAA4B,WAAiBrE,YACfmE,EASF;CAAE,IAAAG;CAAA,IAAA7B,EAAA,QAAA4B,UAAA;EAEiCC,WAAMD;EAAQ5B,EAAA,MAAA4B;EAAA5B,EAAA,MAAA6B;CAAA,OAAAA,KAAA7B,EAAA;CAAjD,MAAA8B,cAAoBhE,eAAe+D,EAAc;CAEjD,MAAAE,OAAapD,6BAA6B;CAAE,IAAAqD;CAAA,IAAAhC,EAAA,QAAAb,YAAAa,EAAA,QAAAL,QAAAK,EAAA,QAAA8B,eAAA9B,EAAA,QAAA+B,MAAA;EAClCC,WACDD,KAAI7C,SAAU;GAAAS;GAAA,GAEfR,WAAA,EAAAA,SAA2B,IAA3B,CAA2B;GAACyC,UACtBE,YAAY;EACxB,CAAC;EACF9B,EAAA,MAAAb;EAAAa,EAAA,MAAAL;EAAAK,EAAA,MAAA8B;EAAA9B,EAAA,MAAA+B;EAAA/B,EAAA,MAAAgC;CAAA,OAAAA,KAAAhC,EAAA;CAAA,IAAAiC;CAAA,IAAAjC,EAAA,QAAAb,YAAAa,EAAA,QAAAL,QAAAK,EAAA,QAAA+B,MAAA;EAAEE,KAAA;GAACF;GAAMpC;GAAMR;EAAQ;EAACa,EAAA,MAAAb;EAAAa,EAAA,MAAAL;EAAAK,EAAA,MAAA+B;EAAA/B,EAAA,MAAAiC;CAAA,OAAAA,KAAAjC,EAAA;CANzBnC,UAAUmE,IAMPC,EAAsB;CAEzB,MAAAC,iBAAuB5D,uCAAuC;CAAE,IAAA6D;CAAA,IAAAnC,EAAA,QAAA8B,eAAA9B,EAAA,QAAAkC,gBAAA;EACtDC,WAAA;GACR,IAAI,CAACD,gBAAc;GAAmB,OAC/BA,eAAchD,SAAU4C,YAAY,CAAC;EAAC;EAC9C9B,EAAA,MAAA8B;EAAA9B,EAAA,MAAAkC;EAAAlC,EAAA,MAAAmC;CAAA,OAAAA,KAAAnC,EAAA;CAAA,IAAAoC;CAAA,IAAApC,EAAA,QAAAkC,gBAAA;EAAEE,MAAA,CAACF,cAAc;EAAClC,EAAA,MAAAkC;EAAAlC,EAAA,MAAAoC;CAAA,OAAAA,MAAApC,EAAA;CAHnBnC,UAAUsE,IAGPC,GAAgB;CAEnB,MAAAC,OAAalD,aAAa,QAAQyC,SAAQS;CAE1C,MAAAC,OAAa5D,6BAA6B;CAAE,IAAA6D;CAAA,IAAAC;CAAA,IAAAxC,EAAA,QAAAsC,QAAAtC,EAAA,QAAAL,QAAAK,EAAA,QAAAqC,MAAA;EAElCE,YAAA;GACR,IAAI,CAACF,MAAI;GAAmB,aACrB;IACLC,KAAIG,cAAe9C,MAAM,IAAI;GAAC;EAC/B;EACA6C,MAAA;GAACF;GAAM3C;GAAM0C;EAAI;EAACrC,EAAA,MAAAsC;EAAAtC,EAAA,MAAAL;EAAAK,EAAA,MAAAqC;EAAArC,EAAA,MAAAuC;EAAAvC,EAAA,MAAAwC;CAAA,OAAA;EAAAD,MAAAvC,EAAA;EAAAwC,MAAAxC,EAAA;CAAA;CALrBnC,UAAU0E,KAKPC,GAAkB;CAAC,IAAAE;CAAA,IAAAC;CAAA,IAAA3C,EAAA,QAAAsC,QAAAtC,EAAA,QAAAL,QAAAK,EAAA,QAAAqC,QAAArC,EAAA,QAAAS,aAAAT,EAAA,QAAA4B,SAAAgB,mBAAA;EAEZF,YAAA;GACR,IAAI,CAACL,MAAI;GACTC,KAAIG,cAAe9C,MAAM;IAAAc;IAAAmC,mBAEJhB,SAAQgB;GAC7B,CAAC;EAAC;EACDD,MAAA;GAACL;GAAM3C;GAAMc;GAAW4B;GAAMT,SAAQgB;EAAkB;EAAC5C,EAAA,MAAAsC;EAAAtC,EAAA,MAAAL;EAAAK,EAAA,MAAAqC;EAAArC,EAAA,MAAAS;EAAAT,EAAA,MAAA4B,SAAAgB;EAAA5C,EAAA,MAAA0C;EAAA1C,EAAA,MAAA2C;CAAA,OAAA;EAAAD,MAAA1C,EAAA;EAAA2C,MAAA3C,EAAA;CAAA;CAN5DnC,UAAU6E,KAMPC,GAAyD;CAAC,IAAAE;CAAA,IAAA7C,EAAA,QAAAC,aAAAD,EAAA,QAAAE,YAAAF,EAAA,QAAAD,gBAAAC,EAAA,QAAAqC,QAAArC,EAAA,QAAAS,aAAAT,EAAA,QAAAG,SAAAH,EAAA,QAAA4B,SAAAgB,mBAAA;EAKtDC,MAAAR,OACC,oBAAA,UAAA,KAAA;GACO,MAAA;GACD5B,IAAAA;GACQ,cAAAR,aAAA;GACW,yBAAA2B,SAAQgB;GACpB,cAAA;GAAM,GACbzC;GACCJ,KAAAA;GAEJG;EACH,CAAA,IAXDA;EAcAF,EAAA,MAAAC;EAAAD,EAAA,MAAAE;EAAAF,EAAA,MAAAD;EAAAC,EAAA,MAAAqC;EAAArC,EAAA,MAAAS;EAAAT,EAAA,MAAAG;EAAAH,EAAA,MAAA4B,SAAAgB;EAAA5C,EAAA,MAAA6C;CAAA,OAAAA,MAAA7C,EAAA;CAAA,IAAA8C;CAAA,IAAA9C,EAAA,QAAA4B,YAAA5B,EAAA,QAAA6C,KAAA;EAfHC,MAAA,oBAAA,2BAAA,UAAA;GAA4ClB,OAAAA;GACzCiB,UAAAA;EAeH,CAAA;EAAsC7C,EAAA,MAAA4B;EAAA5B,EAAA,MAAA6C;EAAA7C,EAAA,MAAA8C;CAAA,OAAAA,MAAA9C,EAAA;CAAA,IAAA+C;CAAA,IAAA/C,EAAA,QAAAwB,gBAAAxB,EAAA,QAAA8C,KAAA;EAjBxCC,MAAA,oBAAA,mCAAA,UAAA;GAAoDvB,OAAAA;GAClDsB,UAAAA;EAiBF,CAAA;EAA8C9C,EAAA,MAAAwB;EAAAxB,EAAA,MAAA8C;EAAA9C,EAAA,MAAA+C;CAAA,OAAAA,MAAA/C,EAAA;CAAA,OAlB9C+C;AAkB8C,CAGpD;AAEAzD,gCAAgC0D,cAC9B;AA7HA,SAAAxC,MAAAyC,GAAA;CAAA,OAYkCA,EAACC,SAAS3C;AAAK"}
1
+ {"version":3,"file":"TriggerPopover.js","names":["c","_c","useAui","useAuiState","useResource","Unstable_TriggerAdapter","createContext","forwardRef","useCallback","useContext","useEffect","useEffectEvent","useId","useMemo","useRef","useState","ComponentPropsWithoutRef","ComponentRef","Primitive","useComposerInputPluginRegistryOptional","TriggerPopoverResource","TriggerPopoverResourceOutput","TriggerBehavior","useTriggerPopoverAriaPublish","useTriggerPopoverRootContext","TriggerMatcher","TriggerPopoverScopeContext","useTriggerPopoverScopeContext","ctx","Error","useTriggerPopoverScopeContextOptional","TriggerBehaviorRegistration","register","behavior","TriggerBehaviorRegistrationContext","useTriggerBehaviorRegistration","ComposerPrimitiveTriggerPopover","Element","div","Props","Omit","char","matcher","adapter","isLoading","t0","forwardedRef","$","ariaLabel","children","props","t1","undefined","aui","text","_temp","popoverId","matcherRef","t2","current","t3","Symbol","for","nextText","triggerChar","cursorPosition","registeredMatcher","hasMatcher","behaviorRef","setBehavior","registrationCountRef","t4","next","process","env","NODE_ENV","console","warn","Math","max","t5","registration","t6","t7","resource","t8","getResource","root","t9","t10","pluginRegistry","t11","t12","open","aria","t13","t14","setActiveAria","t15","t16","highlightedItemId","t17","t18","t19","displayName","s","composer"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopover.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAui, useAuiState } from \"@assistant-ui/store\";\nimport { useResource } from \"@assistant-ui/tap\";\nimport type { Unstable_TriggerAdapter } from \"@assistant-ui/core\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useEffectEvent,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ComponentRef,\n} from \"react\";\nimport { Primitive } from \"../../../utils/Primitive\";\nimport { useComposerInputPluginRegistryOptional } from \"../ComposerInputPluginContext\";\nimport {\n TriggerPopoverResource,\n type TriggerPopoverResourceOutput,\n} from \"./TriggerPopoverResource\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\nimport {\n useTriggerPopoverAriaPublish,\n useTriggerPopoverRootContext,\n} from \"./TriggerPopoverRootContext\";\nimport type { TriggerMatcher } from \"./detectTrigger\";\n\nconst TriggerPopoverScopeContext =\n createContext<TriggerPopoverResourceOutput | null>(null);\n\nexport const useTriggerPopoverScopeContext = () => {\n const ctx = useContext(TriggerPopoverScopeContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverScopeContext must be used within ComposerPrimitive.TriggerPopover\",\n );\n return ctx;\n};\n\nexport const useTriggerPopoverScopeContextOptional = () =>\n useContext(TriggerPopoverScopeContext);\n\n/** Registration API exposed to behavior sub-primitives. */\nexport type TriggerBehaviorRegistration = {\n register(behavior: TriggerBehavior): () => void;\n};\n\nconst TriggerBehaviorRegistrationContext =\n createContext<TriggerBehaviorRegistration | null>(null);\n\n/** Obtain the registration handle from the parent `<TriggerPopover>`. */\nexport const useTriggerBehaviorRegistration = () => {\n const ctx = useContext(TriggerBehaviorRegistrationContext);\n if (!ctx)\n throw new Error(\n \"TriggerPopover.Directive / TriggerPopover.Action must be rendered inside ComposerPrimitive.TriggerPopover\",\n );\n return ctx;\n};\n\nexport namespace ComposerPrimitiveTriggerPopover {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = Omit<\n ComponentPropsWithoutRef<typeof Primitive.div>,\n \"onSelect\"\n > & {\n /** The character(s) that activate this trigger (e.g. `\"@\"`, `\"/\"`). Also serves as the trigger identity within the root. */\n readonly char: string;\n /** Overrides trigger detection for both textarea and Lexical inputs. `endOffset` is the exclusive replace bound. */\n readonly matcher?: TriggerMatcher | undefined;\n /** Adapter providing categories and items. */\n readonly adapter?: Unstable_TriggerAdapter | undefined;\n /** Whether the adapter is resolving items, surfaced to the popover scope for async sources. @default false */\n readonly isLoading?: boolean | undefined;\n };\n}\n\n/**\n * Declares a trigger and renders its popover container. The popover only\n * renders its DOM (and children) when the trigger character is active in the\n * composer input and a behavior sub-primitive has been registered.\n *\n * A behavior is contributed by rendering exactly one of\n * `<TriggerPopover.Directive>` or `<TriggerPopover.Action>` as a child. Without\n * a behavior the trigger stays closed.\n *\n * Must be placed inside `ComposerPrimitive.Unstable_TriggerPopoverRoot`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopover\n * char=\"@\"\n * adapter={mentionAdapter}\n * >\n * <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />\n * <ComposerPrimitive.Unstable_TriggerPopoverCategories>\n * {(cats) => cats.map(...)}\n * </ComposerPrimitive.Unstable_TriggerPopoverCategories>\n * <ComposerPrimitive.Unstable_TriggerPopoverItems>\n * {(items) => items.map(...)}\n * </ComposerPrimitive.Unstable_TriggerPopoverItems>\n * </ComposerPrimitive.Unstable_TriggerPopover>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopover = forwardRef<\n ComposerPrimitiveTriggerPopover.Element,\n ComposerPrimitiveTriggerPopover.Props\n>(\n (\n {\n char,\n matcher,\n adapter,\n isLoading = false,\n \"aria-label\": ariaLabel,\n children,\n ...props\n },\n forwardedRef,\n ) => {\n const aui = useAui();\n const text = useAuiState((s) => s.composer.text);\n const popoverId = useId();\n const matcherRef = useRef(matcher);\n useEffect(() => {\n matcherRef.current = matcher;\n });\n const [registeredMatcher] = useState(\n () => (nextText: string, triggerChar: string, cursorPosition: number) =>\n matcherRef.current!(nextText, triggerChar, cursorPosition),\n );\n const hasMatcher = matcher !== undefined;\n\n // Track in state (for resource reactivity) + ref (dev warning on duplicate registrations).\n const behaviorRef = useRef<TriggerBehavior | null>(null);\n const [behavior, setBehavior] = useState<TriggerBehavior | null>(null);\n const registrationCountRef = useRef(0);\n\n const register = useCallback<TriggerBehaviorRegistration[\"register\"]>(\n (next) => {\n registrationCountRef.current += 1;\n if (\n process.env.NODE_ENV !== \"production\" &&\n registrationCountRef.current > 1\n ) {\n console.warn(\n `[assistant-ui] TriggerPopover \"${char}\" received more than one behavior child. Exactly one <TriggerPopover.Directive> or <TriggerPopover.Action> is allowed per TriggerPopover; the last registration wins.`,\n );\n }\n behaviorRef.current = next;\n setBehavior(next);\n return () => {\n registrationCountRef.current = Math.max(\n 0,\n registrationCountRef.current - 1,\n );\n if (behaviorRef.current === next) {\n behaviorRef.current = null;\n setBehavior(null);\n }\n };\n },\n [char],\n );\n\n const registration = useMemo<TriggerBehaviorRegistration>(\n () => ({ register }),\n [register],\n );\n\n const resource = useResource(\n TriggerPopoverResource({\n adapter,\n text,\n triggerChar: char,\n matcher,\n behavior: behavior ?? undefined,\n aui,\n popoverId,\n isLoading,\n }),\n );\n\n const getResource = useEffectEvent(() => resource);\n\n const root = useTriggerPopoverRootContext();\n useEffect(() => {\n return root.register({\n char,\n ...(hasMatcher ? { matcher: registeredMatcher } : {}),\n ...(behavior ? { behavior } : {}),\n resource: getResource(),\n });\n }, [root, char, hasMatcher, behavior]);\n\n const pluginRegistry = useComposerInputPluginRegistryOptional();\n useEffect(() => {\n if (!pluginRegistry) return undefined;\n return pluginRegistry.register(getResource());\n }, [pluginRegistry]);\n\n const open = behavior !== null && resource.open;\n\n const aria = useTriggerPopoverAriaPublish();\n\n useEffect(() => {\n if (!open) return undefined;\n return () => {\n aria.setActiveAria(char, null);\n };\n }, [aria, char, open]);\n\n useEffect(() => {\n if (!open) return;\n aria.setActiveAria(char, {\n popoverId,\n highlightedItemId: resource.highlightedItemId,\n });\n }, [aria, char, popoverId, open, resource.highlightedItemId]);\n\n return (\n <TriggerBehaviorRegistrationContext.Provider value={registration}>\n <TriggerPopoverScopeContext.Provider value={resource}>\n {open ? (\n <Primitive.div\n role=\"listbox\"\n id={popoverId}\n aria-label={ariaLabel ?? \"Suggestions\"}\n aria-activedescendant={resource.highlightedItemId}\n data-state=\"open\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Primitive.div>\n ) : (\n children\n )}\n </TriggerPopoverScopeContext.Provider>\n </TriggerBehaviorRegistrationContext.Provider>\n );\n },\n);\n\nComposerPrimitiveTriggerPopover.displayName =\n \"ComposerPrimitive.TriggerPopover\";\n"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
  import { useTriggerBehaviorRegistration } from "./TriggerPopover.js";
3
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
4
  import { unstable_defaultDirectiveFormatter } from "@assistant-ui/core";
4
- import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
5
+ import { useEffect, useInsertionEffect, useRef } from "@assistant-ui/tap/react-shim";
5
6
  //#region src/primitives/composer/trigger/TriggerPopoverAction.tsx
6
7
  /**
7
8
  * Configures a `<TriggerPopover>` to fire a handler when an item is selected,
@@ -20,23 +21,53 @@ import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
20
21
  * </ComposerPrimitive.Unstable_TriggerPopover>
21
22
  * ```
22
23
  */
23
- const ComposerPrimitiveTriggerPopoverAction = ({ formatter, onExecute, removeOnExecute }) => {
24
+ const ComposerPrimitiveTriggerPopoverAction = (t0) => {
25
+ const $ = c(8);
26
+ const { formatter, onExecute, removeOnExecute } = t0;
24
27
  const { register } = useTriggerBehaviorRegistration();
25
28
  const onExecuteRef = useRef(onExecute);
26
- onExecuteRef.current = onExecute;
27
- useEffect(() => {
28
- const behavior = {
29
- kind: "action",
30
- formatter: formatter ?? unstable_defaultDirectiveFormatter,
31
- onExecute: (item) => onExecuteRef.current(item),
32
- ...removeOnExecute !== void 0 ? { removeOnExecute } : {}
29
+ let t1;
30
+ let t2;
31
+ if ($[0] !== onExecute) {
32
+ t1 = () => {
33
+ onExecuteRef.current = onExecute;
33
34
  };
34
- return register(behavior);
35
- }, [
36
- register,
37
- formatter,
38
- removeOnExecute
39
- ]);
35
+ t2 = [onExecute];
36
+ $[0] = onExecute;
37
+ $[1] = t1;
38
+ $[2] = t2;
39
+ } else {
40
+ t1 = $[1];
41
+ t2 = $[2];
42
+ }
43
+ useInsertionEffect(t1, t2);
44
+ let t3;
45
+ let t4;
46
+ if ($[3] !== formatter || $[4] !== register || $[5] !== removeOnExecute) {
47
+ t3 = () => {
48
+ const behavior = {
49
+ kind: "action",
50
+ formatter: formatter ?? unstable_defaultDirectiveFormatter,
51
+ onExecute: (item) => onExecuteRef.current(item),
52
+ ...removeOnExecute !== void 0 ? { removeOnExecute } : {}
53
+ };
54
+ return register(behavior);
55
+ };
56
+ t4 = [
57
+ register,
58
+ formatter,
59
+ removeOnExecute
60
+ ];
61
+ $[3] = formatter;
62
+ $[4] = register;
63
+ $[5] = removeOnExecute;
64
+ $[6] = t3;
65
+ $[7] = t4;
66
+ } else {
67
+ t3 = $[6];
68
+ t4 = $[7];
69
+ }
70
+ useEffect(t3, t4);
40
71
  return null;
41
72
  };
42
73
  ComposerPrimitiveTriggerPopoverAction.displayName = "ComposerPrimitive.TriggerPopoverAction";