@assistant-ui/react 0.14.18 → 0.14.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/dist/client/ExternalThread.d.ts +3 -2
  2. package/dist/client/ExternalThread.d.ts.map +1 -1
  3. package/dist/client/ExternalThread.js +721 -256
  4. package/dist/client/ExternalThread.js.map +1 -1
  5. package/dist/client/InMemoryThreadList.d.ts.map +1 -1
  6. package/dist/client/InMemoryThreadList.js +292 -108
  7. package/dist/client/InMemoryThreadList.js.map +1 -1
  8. package/dist/client/SingleThreadList.js +139 -53
  9. package/dist/client/SingleThreadList.js.map +1 -1
  10. package/dist/context/ReadonlyStore.js.map +1 -1
  11. package/dist/context/providers/MessageProvider.js +38 -5
  12. package/dist/context/providers/MessageProvider.js.map +1 -1
  13. package/dist/context/providers/ThreadViewportProvider.js +76 -20
  14. package/dist/context/providers/ThreadViewportProvider.js.map +1 -1
  15. package/dist/context/react/ThreadViewportContext.js.map +1 -1
  16. package/dist/context/react/utils/createContextHook.js.map +1 -1
  17. package/dist/context/react/utils/createContextStoreHook.js +17 -2
  18. package/dist/context/react/utils/createContextStoreHook.js.map +1 -1
  19. package/dist/context/react/utils/createStateHookForRuntime.js.map +1 -1
  20. package/dist/context/react/utils/ensureBinding.js.map +1 -1
  21. package/dist/context/react/utils/useRuntimeState.js +18 -2
  22. package/dist/context/react/utils/useRuntimeState.js.map +1 -1
  23. package/dist/context/stores/ThreadViewport.js.map +1 -1
  24. package/dist/devtools/DevToolsHooks.js.map +1 -1
  25. package/dist/hooks/useMessageQuote.js.map +1 -1
  26. package/dist/hooks/useMessageTiming.js +4 -1
  27. package/dist/hooks/useMessageTiming.js.map +1 -1
  28. package/dist/hooks/useToolCallElapsed.d.ts +23 -0
  29. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -0
  30. package/dist/hooks/useToolCallElapsed.js +72 -0
  31. package/dist/hooks/useToolCallElapsed.js.map +1 -0
  32. package/dist/index.d.ts +4 -2
  33. package/dist/index.js +3 -1
  34. package/dist/internal.js.map +1 -1
  35. package/dist/legacy-runtime/AssistantRuntimeProvider.js +46 -10
  36. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  37. package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
  38. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js +27 -6
  39. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js.map +1 -1
  40. package/dist/legacy-runtime/hooks/AssistantContext.js +13 -2
  41. package/dist/legacy-runtime/hooks/AssistantContext.js.map +1 -1
  42. package/dist/legacy-runtime/hooks/AttachmentContext.js +9 -1
  43. package/dist/legacy-runtime/hooks/AttachmentContext.js.map +1 -1
  44. package/dist/legacy-runtime/hooks/ComposerContext.js +9 -1
  45. package/dist/legacy-runtime/hooks/ComposerContext.js.map +1 -1
  46. package/dist/legacy-runtime/hooks/MessageContext.js +12 -2
  47. package/dist/legacy-runtime/hooks/MessageContext.js.map +1 -1
  48. package/dist/legacy-runtime/hooks/MessagePartContext.js +9 -1
  49. package/dist/legacy-runtime/hooks/MessagePartContext.js.map +1 -1
  50. package/dist/legacy-runtime/hooks/ThreadContext.js +33 -5
  51. package/dist/legacy-runtime/hooks/ThreadContext.js.map +1 -1
  52. package/dist/legacy-runtime/hooks/ThreadListItemContext.js +9 -1
  53. package/dist/legacy-runtime/hooks/ThreadListItemContext.js.map +1 -1
  54. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js +3 -3
  55. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js.map +1 -1
  56. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js +71 -31
  57. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js.map +1 -1
  58. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js.map +1 -1
  59. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +24 -16
  60. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  61. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js +17 -12
  62. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js.map +1 -1
  63. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js +17 -3
  64. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js.map +1 -1
  65. package/dist/mcp-apps/McpAppRenderer.js +6 -6
  66. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  67. package/dist/mcp-apps/McpAppsRemoteHost.js +3 -3
  68. package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -1
  69. package/dist/mcp-apps/app-frame.js +33 -14
  70. package/dist/mcp-apps/app-frame.js.map +1 -1
  71. package/dist/mcp-apps/bridge.js.map +1 -1
  72. package/dist/mcp-apps/types.js.map +1 -1
  73. package/dist/mcp-apps/utils.js.map +1 -1
  74. package/dist/model-context/frame/useAssistantFrameHost.js +32 -14
  75. package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -1
  76. package/dist/model-context/makeAssistantVisible.js +64 -26
  77. package/dist/model-context/makeAssistantVisible.js.map +1 -1
  78. package/dist/primitives/actionBar/ActionBarCopy.js +94 -20
  79. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  80. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
  81. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +105 -37
  82. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  83. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +60 -11
  84. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  85. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +60 -11
  86. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  87. package/dist/primitives/actionBar/ActionBarInteractionContext.js +3 -1
  88. package/dist/primitives/actionBar/ActionBarInteractionContext.js.map +1 -1
  89. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -1
  90. package/dist/primitives/actionBar/ActionBarRoot.js +84 -25
  91. package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -1
  92. package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -1
  93. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +45 -14
  94. package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -1
  95. package/dist/primitives/actionBar/useActionBarFloatStatus.js +22 -10
  96. package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -1
  97. package/dist/primitives/actionBar.js.map +1 -1
  98. package/dist/primitives/actionBarMore/ActionBarMoreContent.js +44 -7
  99. package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -1
  100. package/dist/primitives/actionBarMore/ActionBarMoreItem.js +28 -6
  101. package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -1
  102. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js +103 -36
  103. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -1
  104. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +28 -6
  105. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -1
  106. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +28 -6
  107. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -1
  108. package/dist/primitives/actionBarMore/scope.js.map +1 -1
  109. package/dist/primitives/actionBarMore.js.map +1 -1
  110. package/dist/primitives/assistantModal/AssistantModalAnchor.js +27 -6
  111. package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
  112. package/dist/primitives/assistantModal/AssistantModalContent.js +71 -10
  113. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  114. package/dist/primitives/assistantModal/AssistantModalRoot.js +93 -26
  115. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  116. package/dist/primitives/assistantModal/AssistantModalTrigger.js +27 -6
  117. package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
  118. package/dist/primitives/assistantModal/scope.js.map +1 -1
  119. package/dist/primitives/assistantModal.js.map +1 -1
  120. package/dist/primitives/attachment/AttachmentName.js +13 -1
  121. package/dist/primitives/attachment/AttachmentName.js.map +1 -1
  122. package/dist/primitives/attachment/AttachmentRemove.js +11 -4
  123. package/dist/primitives/attachment/AttachmentRemove.js.map +1 -1
  124. package/dist/primitives/attachment/AttachmentRoot.js +13 -4
  125. package/dist/primitives/attachment/AttachmentRoot.js.map +1 -1
  126. package/dist/primitives/attachment/AttachmentThumb.js +20 -9
  127. package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
  128. package/dist/primitives/attachment.js.map +1 -1
  129. package/dist/primitives/branchPicker/BranchPickerCount.js +14 -2
  130. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -1
  131. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  132. package/dist/primitives/branchPicker/BranchPickerNumber.js +14 -2
  133. package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -1
  134. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  135. package/dist/primitives/branchPicker/BranchPickerRoot.js +34 -6
  136. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  137. package/dist/primitives/branchPicker.js.map +1 -1
  138. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +16 -5
  139. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -1
  140. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +13 -4
  141. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -1
  142. package/dist/primitives/chainOfThought.js.map +1 -1
  143. package/dist/primitives/composer/ComposerAddAttachment.js +37 -24
  144. package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -1
  145. package/dist/primitives/composer/ComposerAttachmentDropzone.js +124 -49
  146. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
  147. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  148. package/dist/primitives/composer/ComposerDictate.js.map +1 -1
  149. package/dist/primitives/composer/ComposerDictationTranscript.js +32 -7
  150. package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
  151. package/dist/primitives/composer/ComposerInput.js +26 -26
  152. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  153. package/dist/primitives/composer/ComposerInputPluginContext.js +71 -25
  154. package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -1
  155. package/dist/primitives/composer/ComposerQuote.js +92 -23
  156. package/dist/primitives/composer/ComposerQuote.js.map +1 -1
  157. package/dist/primitives/composer/ComposerRoot.js +45 -11
  158. package/dist/primitives/composer/ComposerRoot.js.map +1 -1
  159. package/dist/primitives/composer/ComposerSend.js +9 -2
  160. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  161. package/dist/primitives/composer/ComposerStopDictation.js +15 -5
  162. package/dist/primitives/composer/ComposerStopDictation.js.map +1 -1
  163. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
  164. package/dist/primitives/composer/trigger/TriggerPopover.js +215 -75
  165. package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -1
  166. package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -1
  167. package/dist/primitives/composer/trigger/TriggerPopoverBack.js +35 -7
  168. package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -1
  169. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +134 -28
  170. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -1
  171. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -1
  172. package/dist/primitives/composer/trigger/TriggerPopoverItems.js +132 -28
  173. package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -1
  174. package/dist/primitives/composer/trigger/TriggerPopoverResource.js +124 -52
  175. package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -1
  176. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +181 -78
  177. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -1
  178. package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -1
  179. package/dist/primitives/composer/trigger/index.js.map +1 -1
  180. package/dist/primitives/composer/trigger/triggerDetectionResource.js +28 -14
  181. package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -1
  182. package/dist/primitives/composer/trigger/triggerKeyboardResource.js +115 -58
  183. package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -1
  184. package/dist/primitives/composer/trigger/triggerNavigationResource.js +202 -70
  185. package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -1
  186. package/dist/primitives/composer/trigger/triggerSelectionResource.js +49 -13
  187. package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -1
  188. package/dist/primitives/composer.js.map +1 -1
  189. package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -1
  190. package/dist/primitives/error/ErrorMessage.js +28 -6
  191. package/dist/primitives/error/ErrorMessage.js.map +1 -1
  192. package/dist/primitives/error/ErrorRoot.js +14 -5
  193. package/dist/primitives/error/ErrorRoot.js.map +1 -1
  194. package/dist/primitives/error.js.map +1 -1
  195. package/dist/primitives/message/MessageError.js +2 -1
  196. package/dist/primitives/message/MessageError.js.map +1 -1
  197. package/dist/primitives/message/MessageIf.js +50 -20
  198. package/dist/primitives/message/MessageIf.js.map +1 -1
  199. package/dist/primitives/message/MessageParts.js +41 -7
  200. package/dist/primitives/message/MessageParts.js.map +1 -1
  201. package/dist/primitives/message/MessagePartsGrouped.js +399 -94
  202. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  203. package/dist/primitives/message/MessageRoot.js +197 -65
  204. package/dist/primitives/message/MessageRoot.js.map +1 -1
  205. package/dist/primitives/message.js.map +1 -1
  206. package/dist/primitives/messagePart/MessagePartImage.js +15 -5
  207. package/dist/primitives/messagePart/MessagePartImage.js.map +1 -1
  208. package/dist/primitives/messagePart/MessagePartText.js +35 -7
  209. package/dist/primitives/messagePart/MessagePartText.js.map +1 -1
  210. package/dist/primitives/messagePart/useMessagePartData.js +5 -4
  211. package/dist/primitives/messagePart/useMessagePartData.js.map +1 -1
  212. package/dist/primitives/messagePart/useMessagePartFile.js +5 -4
  213. package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -1
  214. package/dist/primitives/messagePart/useMessagePartImage.js +5 -4
  215. package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -1
  216. package/dist/primitives/messagePart/useMessagePartReasoning.js +5 -4
  217. package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -1
  218. package/dist/primitives/messagePart/useMessagePartSource.js +5 -4
  219. package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -1
  220. package/dist/primitives/messagePart/useMessagePartText.js +5 -4
  221. package/dist/primitives/messagePart/useMessagePartText.js.map +1 -1
  222. package/dist/primitives/messagePart.js.map +1 -1
  223. package/dist/primitives/queueItem/QueueItemRemove.js +11 -4
  224. package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -1
  225. package/dist/primitives/queueItem/QueueItemSteer.js +11 -4
  226. package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -1
  227. package/dist/primitives/queueItem/QueueItemText.js +20 -6
  228. package/dist/primitives/queueItem/QueueItemText.js.map +1 -1
  229. package/dist/primitives/queueItem.js.map +1 -1
  230. package/dist/primitives/reasoning/useScrollLock.js +61 -43
  231. package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
  232. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +56 -16
  233. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -1
  234. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +120 -59
  235. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  236. package/dist/primitives/selectionToolbar.js.map +1 -1
  237. package/dist/primitives/suggestion/SuggestionDescription.js +20 -6
  238. package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -1
  239. package/dist/primitives/suggestion/SuggestionTitle.js +20 -6
  240. package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -1
  241. package/dist/primitives/suggestion/SuggestionTrigger.js +39 -26
  242. package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -1
  243. package/dist/primitives/suggestion.js.map +1 -1
  244. package/dist/primitives/thread/ThreadEmpty.js +6 -2
  245. package/dist/primitives/thread/ThreadEmpty.js.map +1 -1
  246. package/dist/primitives/thread/ThreadIf.js +32 -10
  247. package/dist/primitives/thread/ThreadIf.js.map +1 -1
  248. package/dist/primitives/thread/ThreadRoot.js +13 -4
  249. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  250. package/dist/primitives/thread/ThreadScrollToBottom.js +24 -6
  251. package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -1
  252. package/dist/primitives/thread/ThreadSuggestion.js +18 -6
  253. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
  254. package/dist/primitives/thread/ThreadViewport.js +185 -47
  255. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  256. package/dist/primitives/thread/ThreadViewportFooter.js +22 -9
  257. package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -1
  258. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js.map +1 -1
  259. package/dist/primitives/thread/topAnchor/createReserveObservers.js.map +1 -1
  260. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -1
  261. package/dist/primitives/thread/topAnchor/topAnchorTurn.js.map +1 -1
  262. package/dist/primitives/thread/topAnchor/topAnchorUtils.js.map +1 -1
  263. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +19 -4
  264. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -1
  265. package/dist/primitives/thread/useThreadViewportAutoScroll.js +16 -16
  266. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  267. package/dist/primitives/thread.js.map +1 -1
  268. package/dist/primitives/threadList/ThreadListLoadMore.js.map +1 -1
  269. package/dist/primitives/threadList/ThreadListNew.js +53 -11
  270. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  271. package/dist/primitives/threadList/ThreadListRoot.js +13 -4
  272. package/dist/primitives/threadList/ThreadListRoot.js.map +1 -1
  273. package/dist/primitives/threadList.js.map +1 -1
  274. package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -1
  275. package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -1
  276. package/dist/primitives/threadListItem/ThreadListItemRoot.js +26 -7
  277. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  278. package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
  279. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -1
  280. package/dist/primitives/threadListItem.js.map +1 -1
  281. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +44 -7
  282. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
  283. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +28 -6
  284. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -1
  285. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +25 -5
  286. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -1
  287. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +28 -6
  288. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -1
  289. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +28 -6
  290. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
  291. package/dist/primitives/threadListItemMore/scope.js.map +1 -1
  292. package/dist/primitives/threadListItemMore.js.map +1 -1
  293. package/dist/sandbox-host/SandboxHost.js.map +1 -1
  294. package/dist/tests/remote-thread-list-test-helpers.js.map +1 -1
  295. package/dist/tests/setup.js.map +1 -1
  296. package/dist/unstable/useComposerInputHistory.js.map +1 -1
  297. package/dist/unstable/useMentionAdapter.js.map +1 -1
  298. package/dist/unstable/useMessageStallDetection.d.ts +29 -0
  299. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -0
  300. package/dist/unstable/useMessageStallDetection.js +69 -0
  301. package/dist/unstable/useMessageStallDetection.js.map +1 -0
  302. package/dist/unstable/useSlashCommandAdapter.js.map +1 -1
  303. package/dist/utils/Primitive.js +57 -12
  304. package/dist/utils/Primitive.js.map +1 -1
  305. package/dist/utils/createActionButton.js +23 -7
  306. package/dist/utils/createActionButton.js.map +1 -1
  307. package/dist/utils/getSelectionMessageId.js.map +1 -1
  308. package/dist/utils/hooks/useManagedRef.js +16 -8
  309. package/dist/utils/hooks/useManagedRef.js.map +1 -1
  310. package/dist/utils/hooks/useMediaQuery.js +25 -10
  311. package/dist/utils/hooks/useMediaQuery.js.map +1 -1
  312. package/dist/utils/hooks/useOnResizeContent.js +29 -19
  313. package/dist/utils/hooks/useOnResizeContent.js.map +1 -1
  314. package/dist/utils/hooks/useOnScrollToBottom.js +20 -4
  315. package/dist/utils/hooks/useOnScrollToBottom.js.map +1 -1
  316. package/dist/utils/hooks/useSizeHandle.js +23 -15
  317. package/dist/utils/hooks/useSizeHandle.js.map +1 -1
  318. package/dist/utils/json/is-json-equal.js.map +1 -1
  319. package/dist/utils/json/is-json.js.map +1 -1
  320. package/dist/utils/smooth/SmoothContext.js +41 -11
  321. package/dist/utils/smooth/SmoothContext.js.map +1 -1
  322. package/dist/utils/smooth/useSmooth.js +5 -5
  323. package/dist/utils/smooth/useSmooth.js.map +1 -1
  324. package/dist/utils/useToolArgsFieldStatus.d.ts +2 -2
  325. package/dist/utils/useToolArgsFieldStatus.d.ts.map +1 -1
  326. package/dist/utils/useToolArgsFieldStatus.js +13 -5
  327. package/dist/utils/useToolArgsFieldStatus.js.map +1 -1
  328. package/package.json +6 -6
  329. package/src/client/ExternalThread.ts +81 -52
  330. package/src/client/InMemoryThreadList.ts +12 -14
  331. package/src/hooks/useToolCallElapsed.ts +52 -0
  332. package/src/index.ts +11 -0
  333. package/src/primitives/composer/trigger/TriggerPopover.tsx +4 -5
  334. package/src/tests/toolCallTiming.test.tsx +221 -0
  335. package/src/unstable/useMessageStallDetection.ts +91 -0
@@ -2,63 +2,135 @@ import { TriggerDetectionResource } from "./triggerDetectionResource.js";
2
2
  import { TriggerKeyboardResource } from "./triggerKeyboardResource.js";
3
3
  import { TriggerNavigationResource } from "./triggerNavigationResource.js";
4
4
  import { TriggerSelectionResource } from "./triggerSelectionResource.js";
5
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
6
  import { useEffectEvent } from "@assistant-ui/tap/react-shim";
6
7
  import { resource, useResource } from "@assistant-ui/tap";
7
8
  //#region src/primitives/composer/trigger/TriggerPopoverResource.ts
8
9
  /** Composes detection, navigation, keyboard, and selection sub-resources. */
9
- const useTriggerPopoverResource = ({ adapter, text, triggerChar, behavior, aui, popoverId }) => {
10
- const detection = useResource(TriggerDetectionResource({
11
- text,
12
- triggerChar
13
- }));
10
+ const useTriggerPopoverResource = (t0) => {
11
+ const $ = c(45);
12
+ const { adapter, text, triggerChar, behavior, aui, popoverId } = t0;
13
+ let t1;
14
+ if ($[0] !== text || $[1] !== triggerChar) {
15
+ t1 = TriggerDetectionResource({
16
+ text,
17
+ triggerChar
18
+ });
19
+ $[0] = text;
20
+ $[1] = triggerChar;
21
+ $[2] = t1;
22
+ } else t1 = $[2];
23
+ const detection = useResource(t1);
14
24
  const open = detection.trigger !== null && adapter !== void 0 && behavior !== void 0;
15
- const navigation = useResource(TriggerNavigationResource({
16
- adapter,
17
- query: detection.query,
18
- open
19
- }));
20
- const onSelected = useEffectEvent(() => {
21
- navigation.goBack();
22
- });
23
- const selection = useResource(TriggerSelectionResource({
24
- behavior,
25
- trigger: detection.trigger,
26
- aui,
27
- triggerChar,
28
- setCursorPosition: detection.setCursorPosition,
29
- onSelected
30
- }));
31
- const keyboard = useResource(TriggerKeyboardResource({
32
- navigableList: navigation.navigableList,
33
- isSearchMode: navigation.isSearchMode,
34
- activeCategoryId: navigation.activeCategoryId,
35
- query: detection.query,
36
- popoverId,
37
- open,
38
- selectItem: selection.selectItem,
39
- selectCategory: navigation.selectCategory,
40
- goBack: navigation.goBack,
41
- close: selection.close
42
- }));
43
- return {
44
- open,
45
- query: detection.query,
46
- activeCategoryId: navigation.activeCategoryId,
47
- categories: navigation.categories,
48
- items: navigation.items,
49
- highlightedIndex: keyboard.highlightedIndex,
50
- isSearchMode: navigation.isSearchMode,
51
- popoverId,
52
- highlightedItemId: keyboard.highlightedItemId,
53
- selectCategory: navigation.selectCategory,
54
- goBack: navigation.goBack,
55
- selectItem: selection.selectItem,
56
- close: selection.close,
57
- highlightIndex: keyboard.highlightIndex,
58
- handleKeyDown: keyboard.handleKeyDown,
59
- setCursorPosition: detection.setCursorPosition,
60
- registerSelectItemOverride: selection.registerSelectItemOverride
61
- };
25
+ let t2;
26
+ if ($[3] !== adapter || $[4] !== detection.query || $[5] !== open) {
27
+ t2 = TriggerNavigationResource({
28
+ adapter,
29
+ query: detection.query,
30
+ open
31
+ });
32
+ $[3] = adapter;
33
+ $[4] = detection.query;
34
+ $[5] = open;
35
+ $[6] = t2;
36
+ } else t2 = $[6];
37
+ const navigation = useResource(t2);
38
+ let t3;
39
+ if ($[7] !== navigation) {
40
+ t3 = () => {
41
+ navigation.goBack();
42
+ };
43
+ $[7] = navigation;
44
+ $[8] = t3;
45
+ } else t3 = $[8];
46
+ const onSelected = useEffectEvent(t3);
47
+ let t4;
48
+ if ($[9] !== aui || $[10] !== behavior || $[11] !== detection.setCursorPosition || $[12] !== detection.trigger || $[13] !== onSelected || $[14] !== triggerChar) {
49
+ t4 = TriggerSelectionResource({
50
+ behavior,
51
+ trigger: detection.trigger,
52
+ aui,
53
+ triggerChar,
54
+ setCursorPosition: detection.setCursorPosition,
55
+ onSelected
56
+ });
57
+ $[9] = aui;
58
+ $[10] = behavior;
59
+ $[11] = detection.setCursorPosition;
60
+ $[12] = detection.trigger;
61
+ $[13] = onSelected;
62
+ $[14] = triggerChar;
63
+ $[15] = t4;
64
+ } else t4 = $[15];
65
+ const selection = useResource(t4);
66
+ let t5;
67
+ if ($[16] !== detection.query || $[17] !== navigation.activeCategoryId || $[18] !== navigation.goBack || $[19] !== navigation.isSearchMode || $[20] !== navigation.navigableList || $[21] !== navigation.selectCategory || $[22] !== open || $[23] !== popoverId || $[24] !== selection.close || $[25] !== selection.selectItem) {
68
+ t5 = TriggerKeyboardResource({
69
+ navigableList: navigation.navigableList,
70
+ isSearchMode: navigation.isSearchMode,
71
+ activeCategoryId: navigation.activeCategoryId,
72
+ query: detection.query,
73
+ popoverId,
74
+ open,
75
+ selectItem: selection.selectItem,
76
+ selectCategory: navigation.selectCategory,
77
+ goBack: navigation.goBack,
78
+ close: selection.close
79
+ });
80
+ $[16] = detection.query;
81
+ $[17] = navigation.activeCategoryId;
82
+ $[18] = navigation.goBack;
83
+ $[19] = navigation.isSearchMode;
84
+ $[20] = navigation.navigableList;
85
+ $[21] = navigation.selectCategory;
86
+ $[22] = open;
87
+ $[23] = popoverId;
88
+ $[24] = selection.close;
89
+ $[25] = selection.selectItem;
90
+ $[26] = t5;
91
+ } else t5 = $[26];
92
+ const keyboard = useResource(t5);
93
+ let t6;
94
+ if ($[27] !== detection.query || $[28] !== detection.setCursorPosition || $[29] !== keyboard.handleKeyDown || $[30] !== keyboard.highlightIndex || $[31] !== keyboard.highlightedIndex || $[32] !== keyboard.highlightedItemId || $[33] !== navigation.activeCategoryId || $[34] !== navigation.categories || $[35] !== navigation.goBack || $[36] !== navigation.isSearchMode || $[37] !== navigation.items || $[38] !== navigation.selectCategory || $[39] !== open || $[40] !== popoverId || $[41] !== selection.close || $[42] !== selection.registerSelectItemOverride || $[43] !== selection.selectItem) {
95
+ t6 = {
96
+ open,
97
+ query: detection.query,
98
+ activeCategoryId: navigation.activeCategoryId,
99
+ categories: navigation.categories,
100
+ items: navigation.items,
101
+ highlightedIndex: keyboard.highlightedIndex,
102
+ isSearchMode: navigation.isSearchMode,
103
+ popoverId,
104
+ highlightedItemId: keyboard.highlightedItemId,
105
+ selectCategory: navigation.selectCategory,
106
+ goBack: navigation.goBack,
107
+ selectItem: selection.selectItem,
108
+ close: selection.close,
109
+ highlightIndex: keyboard.highlightIndex,
110
+ handleKeyDown: keyboard.handleKeyDown,
111
+ setCursorPosition: detection.setCursorPosition,
112
+ registerSelectItemOverride: selection.registerSelectItemOverride
113
+ };
114
+ $[27] = detection.query;
115
+ $[28] = detection.setCursorPosition;
116
+ $[29] = keyboard.handleKeyDown;
117
+ $[30] = keyboard.highlightIndex;
118
+ $[31] = keyboard.highlightedIndex;
119
+ $[32] = keyboard.highlightedItemId;
120
+ $[33] = navigation.activeCategoryId;
121
+ $[34] = navigation.categories;
122
+ $[35] = navigation.goBack;
123
+ $[36] = navigation.isSearchMode;
124
+ $[37] = navigation.items;
125
+ $[38] = navigation.selectCategory;
126
+ $[39] = open;
127
+ $[40] = popoverId;
128
+ $[41] = selection.close;
129
+ $[42] = selection.registerSelectItemOverride;
130
+ $[43] = selection.selectItem;
131
+ $[44] = t6;
132
+ } else t6 = $[44];
133
+ return t6;
62
134
  };
63
135
  const TriggerPopoverResource = resource(useTriggerPopoverResource);
64
136
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverResource.js","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverResource.ts"],"sourcesContent":["import { useEffectEvent } from \"react\";\nimport { useResource, resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerAdapter,\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport type { AssistantClient } from \"@assistant-ui/store\";\nimport { TriggerDetectionResource } from \"./triggerDetectionResource\";\nimport { TriggerKeyboardResource } from \"./triggerKeyboardResource\";\nimport { TriggerNavigationResource } from \"./triggerNavigationResource\";\nimport {\n TriggerSelectionResource,\n type SelectItemOverride,\n type TriggerBehavior,\n} from \"./triggerSelectionResource\";\n\nexport type { SelectItemOverride, TriggerBehavior };\nexport type { TriggerPopoverKeyEvent } from \"./triggerKeyboardResource\";\n\n/** @deprecated Use `TriggerBehavior`. */\nexport type OnSelectBehavior = TriggerBehavior;\n\nexport type TriggerPopoverResourceOutput = {\n readonly open: boolean;\n readonly query: string;\n readonly activeCategoryId: string | null;\n readonly categories: readonly Unstable_TriggerCategory[];\n readonly items: readonly Unstable_TriggerItem[];\n readonly highlightedIndex: number;\n readonly isSearchMode: boolean;\n /** Stable ID prefix for generating accessible element IDs. */\n readonly popoverId: string;\n /** ID of the currently highlighted item (for aria-activedescendant). */\n readonly highlightedItemId: string | undefined;\n\n selectCategory(categoryId: string): void;\n goBack(): void;\n selectItem(item: Unstable_TriggerItem): void;\n close(): void;\n /** Move the highlight to an entry index (e.g. from pointer hover). Out-of-range values are ignored. */\n highlightIndex(index: number): void;\n handleKeyDown(e: {\n readonly key: string;\n readonly shiftKey: boolean;\n preventDefault(): void;\n }): boolean;\n\n setCursorPosition(pos: number): void;\n registerSelectItemOverride(fn: SelectItemOverride): () => void;\n};\n\n/** Composes detection, navigation, keyboard, and selection sub-resources. */\nconst useTriggerPopoverResource = ({\n adapter,\n text,\n triggerChar,\n behavior,\n aui,\n popoverId,\n}: {\n adapter: Unstable_TriggerAdapter | undefined;\n text: string;\n triggerChar: string;\n behavior: TriggerBehavior | undefined;\n aui: AssistantClient;\n /** Stable ID for accessible element IDs (pass React's useId() from component layer). */\n popoverId: string;\n}): TriggerPopoverResourceOutput => {\n const detection = useResource(\n TriggerDetectionResource({ text, triggerChar }),\n );\n\n const open =\n detection.trigger !== null &&\n adapter !== undefined &&\n behavior !== undefined;\n\n const navigation = useResource(\n TriggerNavigationResource({\n adapter,\n query: detection.query,\n open,\n }),\n );\n\n const onSelected = useEffectEvent(() => {\n navigation.goBack();\n });\n\n const selection = useResource(\n TriggerSelectionResource({\n behavior,\n trigger: detection.trigger,\n aui,\n triggerChar,\n setCursorPosition: detection.setCursorPosition,\n onSelected,\n }),\n );\n\n const keyboard = useResource(\n TriggerKeyboardResource({\n navigableList: navigation.navigableList,\n isSearchMode: navigation.isSearchMode,\n activeCategoryId: navigation.activeCategoryId,\n query: detection.query,\n popoverId,\n open,\n selectItem: selection.selectItem,\n selectCategory: navigation.selectCategory,\n goBack: navigation.goBack,\n close: selection.close,\n }),\n );\n\n return {\n open,\n query: detection.query,\n activeCategoryId: navigation.activeCategoryId,\n categories: navigation.categories,\n items: navigation.items,\n highlightedIndex: keyboard.highlightedIndex,\n isSearchMode: navigation.isSearchMode,\n popoverId,\n highlightedItemId: keyboard.highlightedItemId,\n selectCategory: navigation.selectCategory,\n goBack: navigation.goBack,\n selectItem: selection.selectItem,\n close: selection.close,\n highlightIndex: keyboard.highlightIndex,\n handleKeyDown: keyboard.handleKeyDown,\n setCursorPosition: detection.setCursorPosition,\n registerSelectItemOverride: selection.registerSelectItemOverride,\n };\n};\n\nexport const TriggerPopoverResource = resource(useTriggerPopoverResource);\n"],"mappings":";;;;;;;;AAqDA,MAAM,6BAA6B,EACjC,SACA,MACA,aACA,UACA,KACA,gBASkC;CAClC,MAAM,YAAY,YAChB,yBAAyB;EAAE;EAAM;CAAY,CAAC,CAChD;CAEA,MAAM,OACJ,UAAU,YAAY,QACtB,YAAY,KAAA,KACZ,aAAa,KAAA;CAEf,MAAM,aAAa,YACjB,0BAA0B;EACxB;EACA,OAAO,UAAU;EACjB;CACF,CAAC,CACH;CAEA,MAAM,aAAa,qBAAqB;EACtC,WAAW,OAAO;CACpB,CAAC;CAED,MAAM,YAAY,YAChB,yBAAyB;EACvB;EACA,SAAS,UAAU;EACnB;EACA;EACA,mBAAmB,UAAU;EAC7B;CACF,CAAC,CACH;CAEA,MAAM,WAAW,YACf,wBAAwB;EACtB,eAAe,WAAW;EAC1B,cAAc,WAAW;EACzB,kBAAkB,WAAW;EAC7B,OAAO,UAAU;EACjB;EACA;EACA,YAAY,UAAU;EACtB,gBAAgB,WAAW;EAC3B,QAAQ,WAAW;EACnB,OAAO,UAAU;CACnB,CAAC,CACH;CAEA,OAAO;EACL;EACA,OAAO,UAAU;EACjB,kBAAkB,WAAW;EAC7B,YAAY,WAAW;EACvB,OAAO,WAAW;EAClB,kBAAkB,SAAS;EAC3B,cAAc,WAAW;EACzB;EACA,mBAAmB,SAAS;EAC5B,gBAAgB,WAAW;EAC3B,QAAQ,WAAW;EACnB,YAAY,UAAU;EACtB,OAAO,UAAU;EACjB,gBAAgB,SAAS;EACzB,eAAe,SAAS;EACxB,mBAAmB,UAAU;EAC7B,4BAA4B,UAAU;CACxC;AACF;AAEA,MAAa,yBAAyB,SAAS,yBAAyB"}
1
+ {"version":3,"file":"TriggerPopoverResource.js","names":["useEffectEvent","useResource","resource","Unstable_TriggerAdapter","Unstable_TriggerCategory","Unstable_TriggerItem","AssistantClient","TriggerDetectionResource","TriggerKeyboardResource","TriggerNavigationResource","TriggerSelectionResource","SelectItemOverride","TriggerBehavior","TriggerPopoverKeyEvent","OnSelectBehavior","TriggerPopoverResourceOutput","open","query","activeCategoryId","categories","items","highlightedIndex","isSearchMode","popoverId","highlightedItemId","selectCategory","categoryId","goBack","selectItem","item","close","highlightIndex","index","handleKeyDown","e","key","shiftKey","preventDefault","setCursorPosition","pos","registerSelectItemOverride","fn","useTriggerPopoverResource","t0","$","_c","adapter","text","triggerChar","behavior","aui","t1","detection","trigger","undefined","t2","navigation","t3","onSelected","t4","selection","t5","navigableList","keyboard","t6","TriggerPopoverResource"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverResource.ts"],"sourcesContent":["import { useEffectEvent } from \"react\";\nimport { useResource, resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerAdapter,\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport type { AssistantClient } from \"@assistant-ui/store\";\nimport { TriggerDetectionResource } from \"./triggerDetectionResource\";\nimport { TriggerKeyboardResource } from \"./triggerKeyboardResource\";\nimport { TriggerNavigationResource } from \"./triggerNavigationResource\";\nimport {\n TriggerSelectionResource,\n type SelectItemOverride,\n type TriggerBehavior,\n} from \"./triggerSelectionResource\";\n\nexport type { SelectItemOverride, TriggerBehavior };\nexport type { TriggerPopoverKeyEvent } from \"./triggerKeyboardResource\";\n\n/** @deprecated Use `TriggerBehavior`. */\nexport type OnSelectBehavior = TriggerBehavior;\n\nexport type TriggerPopoverResourceOutput = {\n readonly open: boolean;\n readonly query: string;\n readonly activeCategoryId: string | null;\n readonly categories: readonly Unstable_TriggerCategory[];\n readonly items: readonly Unstable_TriggerItem[];\n readonly highlightedIndex: number;\n readonly isSearchMode: boolean;\n /** Stable ID prefix for generating accessible element IDs. */\n readonly popoverId: string;\n /** ID of the currently highlighted item (for aria-activedescendant). */\n readonly highlightedItemId: string | undefined;\n\n selectCategory(categoryId: string): void;\n goBack(): void;\n selectItem(item: Unstable_TriggerItem): void;\n close(): void;\n /** Move the highlight to an entry index (e.g. from pointer hover). Out-of-range values are ignored. */\n highlightIndex(index: number): void;\n handleKeyDown(e: {\n readonly key: string;\n readonly shiftKey: boolean;\n preventDefault(): void;\n }): boolean;\n\n setCursorPosition(pos: number): void;\n registerSelectItemOverride(fn: SelectItemOverride): () => void;\n};\n\n/** Composes detection, navigation, keyboard, and selection sub-resources. */\nconst useTriggerPopoverResource = ({\n adapter,\n text,\n triggerChar,\n behavior,\n aui,\n popoverId,\n}: {\n adapter: Unstable_TriggerAdapter | undefined;\n text: string;\n triggerChar: string;\n behavior: TriggerBehavior | undefined;\n aui: AssistantClient;\n /** Stable ID for accessible element IDs (pass React's useId() from component layer). */\n popoverId: string;\n}): TriggerPopoverResourceOutput => {\n const detection = useResource(\n TriggerDetectionResource({ text, triggerChar }),\n );\n\n const open =\n detection.trigger !== null &&\n adapter !== undefined &&\n behavior !== undefined;\n\n const navigation = useResource(\n TriggerNavigationResource({\n adapter,\n query: detection.query,\n open,\n }),\n );\n\n const onSelected = useEffectEvent(() => {\n navigation.goBack();\n });\n\n const selection = useResource(\n TriggerSelectionResource({\n behavior,\n trigger: detection.trigger,\n aui,\n triggerChar,\n setCursorPosition: detection.setCursorPosition,\n onSelected,\n }),\n );\n\n const keyboard = useResource(\n TriggerKeyboardResource({\n navigableList: navigation.navigableList,\n isSearchMode: navigation.isSearchMode,\n activeCategoryId: navigation.activeCategoryId,\n query: detection.query,\n popoverId,\n open,\n selectItem: selection.selectItem,\n selectCategory: navigation.selectCategory,\n goBack: navigation.goBack,\n close: selection.close,\n }),\n );\n\n return {\n open,\n query: detection.query,\n activeCategoryId: navigation.activeCategoryId,\n categories: navigation.categories,\n items: navigation.items,\n highlightedIndex: keyboard.highlightedIndex,\n isSearchMode: navigation.isSearchMode,\n popoverId,\n highlightedItemId: keyboard.highlightedItemId,\n selectCategory: navigation.selectCategory,\n goBack: navigation.goBack,\n selectItem: selection.selectItem,\n close: selection.close,\n highlightIndex: keyboard.highlightIndex,\n handleKeyDown: keyboard.handleKeyDown,\n setCursorPosition: detection.setCursorPosition,\n registerSelectItemOverride: selection.registerSelectItemOverride,\n };\n};\n\nexport const TriggerPopoverResource = resource(useTriggerPopoverResource);\n"],"mappings":";;;;;;;;;AAqDA,MAAM0C,6BAA4BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,SAAAC,MAAAC,aAAAC,UAAAC,KAAA3B,cAAAoB;CAelC,IAAAQ;CAAA,IAAAP,EAAA,OAAAG,QAAAH,EAAA,OAAAI,aAAA;EAEGG,KAAA5C,yBAAyB;GAAAwC;GAAAC;EAAoB,CAAC;EAACJ,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CADjD,MAAAQ,YAAkBnD,YAChBkD,EACF;CAEA,MAAAnC,OACEoC,UAASC,YAAa,QACtBP,YAAYQ,KAAAA,KACZL,aAAaK,KAAAA;CAAU,IAAAC;CAAA,IAAAX,EAAA,OAAAE,WAAAF,EAAA,OAAAQ,UAAAnC,SAAA2B,EAAA,OAAA5B,MAAA;EAGvBuC,KAAA9C,0BAA0B;GAAAqC;GAAA7B,OAEjBmC,UAASnC;GAAMD;EAExB,CAAC;EAAC4B,EAAA,KAAAE;EAAAF,EAAA,KAAAQ,UAAAnC;EAAA2B,EAAA,KAAA5B;EAAA4B,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CALJ,MAAAY,aAAmBvD,YACjBsD,EAKF;CAAE,IAAAE;CAAA,IAAAb,EAAA,OAAAY,YAAA;EAEgCC,WAAA;GAChCD,WAAU7B,OAAQ;EAAC;EACpBiB,EAAA,KAAAY;EAAAZ,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAFD,MAAAc,aAAmB1D,eAAeyD,EAEjC;CAAE,IAAAE;CAAA,IAAAf,EAAA,OAAAM,OAAAN,EAAA,QAAAK,YAAAL,EAAA,QAAAQ,UAAAd,qBAAAM,EAAA,QAAAQ,UAAAC,WAAAT,EAAA,QAAAc,cAAAd,EAAA,QAAAI,aAAA;EAGDW,KAAAjD,yBAAyB;GAAAuC;GAAAI,SAEdD,UAASC;GAAQH;GAAAF;GAAAV,mBAGPc,UAASd;GAAkBoB;EAEhD,CAAC;EAACd,EAAA,KAAAM;EAAAN,EAAA,MAAAK;EAAAL,EAAA,MAAAQ,UAAAd;EAAAM,EAAA,MAAAQ,UAAAC;EAAAT,EAAA,MAAAc;EAAAd,EAAA,MAAAI;EAAAJ,EAAA,MAAAe;CAAA,OAAAA,KAAAf,EAAA;CARJ,MAAAgB,YAAkB3D,YAChB0D,EAQF;CAAE,IAAAE;CAAA,IAAAjB,EAAA,QAAAQ,UAAAnC,SAAA2B,EAAA,QAAAY,WAAAtC,oBAAA0B,EAAA,QAAAY,WAAA7B,UAAAiB,EAAA,QAAAY,WAAAlC,gBAAAsB,EAAA,QAAAY,WAAAM,iBAAAlB,EAAA,QAAAY,WAAA/B,kBAAAmB,EAAA,QAAA5B,QAAA4B,EAAA,QAAArB,aAAAqB,EAAA,QAAAgB,UAAA9B,SAAAc,EAAA,QAAAgB,UAAAhC,YAAA;EAGAiC,KAAArD,wBAAwB;GAAAsD,eACPN,WAAUM;GAAcxC,cACzBkC,WAAUlC;GAAaJ,kBACnBsC,WAAUtC;GAAiBD,OACtCmC,UAASnC;GAAMM;GAAAP;GAAAY,YAGVgC,UAAShC;GAAWH,gBAChB+B,WAAU/B;GAAeE,QACjC6B,WAAU7B;GAAOG,OAClB8B,UAAS9B;EAClB,CAAC;EAACc,EAAA,MAAAQ,UAAAnC;EAAA2B,EAAA,MAAAY,WAAAtC;EAAA0B,EAAA,MAAAY,WAAA7B;EAAAiB,EAAA,MAAAY,WAAAlC;EAAAsB,EAAA,MAAAY,WAAAM;EAAAlB,EAAA,MAAAY,WAAA/B;EAAAmB,EAAA,MAAA5B;EAAA4B,EAAA,MAAArB;EAAAqB,EAAA,MAAAgB,UAAA9B;EAAAc,EAAA,MAAAgB,UAAAhC;EAAAgB,EAAA,MAAAiB;CAAA,OAAAA,KAAAjB,EAAA;CAZJ,MAAAmB,WAAiB9D,YACf4D,EAYF;CAAE,IAAAG;CAAA,IAAApB,EAAA,QAAAQ,UAAAnC,SAAA2B,EAAA,QAAAQ,UAAAd,qBAAAM,EAAA,QAAAmB,SAAA9B,iBAAAW,EAAA,QAAAmB,SAAAhC,kBAAAa,EAAA,QAAAmB,SAAA1C,oBAAAuB,EAAA,QAAAmB,SAAAvC,qBAAAoB,EAAA,QAAAY,WAAAtC,oBAAA0B,EAAA,QAAAY,WAAArC,cAAAyB,EAAA,QAAAY,WAAA7B,UAAAiB,EAAA,QAAAY,WAAAlC,gBAAAsB,EAAA,QAAAY,WAAApC,SAAAwB,EAAA,QAAAY,WAAA/B,kBAAAmB,EAAA,QAAA5B,QAAA4B,EAAA,QAAArB,aAAAqB,EAAA,QAAAgB,UAAA9B,SAAAc,EAAA,QAAAgB,UAAApB,8BAAAI,EAAA,QAAAgB,UAAAhC,YAAA;EAEKoC,KAAA;GAAAhD;GAAAC,OAEEmC,UAASnC;GAAMC,kBACJsC,WAAUtC;GAAiBC,YACjCqC,WAAUrC;GAAWC,OAC1BoC,WAAUpC;GAAMC,kBACL0C,SAAQ1C;GAAiBC,cAC7BkC,WAAUlC;GAAaC;GAAAC,mBAElBuC,SAAQvC;GAAkBC,gBAC7B+B,WAAU/B;GAAeE,QACjC6B,WAAU7B;GAAOC,YACbgC,UAAShC;GAAWE,OACzB8B,UAAS9B;GAAMC,gBACNgC,SAAQhC;GAAeE,eACxB8B,SAAQ9B;GAAcK,mBAClBc,UAASd;GAAkBE,4BAClBoB,UAASpB;EACvC;EAACI,EAAA,MAAAQ,UAAAnC;EAAA2B,EAAA,MAAAQ,UAAAd;EAAAM,EAAA,MAAAmB,SAAA9B;EAAAW,EAAA,MAAAmB,SAAAhC;EAAAa,EAAA,MAAAmB,SAAA1C;EAAAuB,EAAA,MAAAmB,SAAAvC;EAAAoB,EAAA,MAAAY,WAAAtC;EAAA0B,EAAA,MAAAY,WAAArC;EAAAyB,EAAA,MAAAY,WAAA7B;EAAAiB,EAAA,MAAAY,WAAAlC;EAAAsB,EAAA,MAAAY,WAAApC;EAAAwB,EAAA,MAAAY,WAAA/B;EAAAmB,EAAA,MAAA5B;EAAA4B,EAAA,MAAArB;EAAAqB,EAAA,MAAAgB,UAAA9B;EAAAc,EAAA,MAAAgB,UAAApB;EAAAI,EAAA,MAAAgB,UAAAhC;EAAAgB,EAAA,MAAAoB;CAAA,OAAAA,KAAApB,EAAA;CAAA,OAlBMoB;AAkBN;AAGH,MAAaC,yBAAyB/D,SAASwC,yBAAyB"}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { ComposerInputPluginProvider, useComposerInputPluginRegistryOptional } from "../ComposerInputPluginContext.js";
3
- import { createContext, useCallback, useContext, useMemo, useRef, useSyncExternalStore } from "@assistant-ui/tap/react-shim";
3
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
4
+ import { createContext, useContext, useRef, useSyncExternalStore } from "@assistant-ui/tap/react-shim";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  //#region src/primitives/composer/trigger/TriggerPopoverRootContext.tsx
6
7
  const TriggerPopoverRootContext = createContext(null);
@@ -10,7 +11,9 @@ const useTriggerPopoverRootContext = () => {
10
11
  if (!ctx) throw new Error("useTriggerPopoverRootContext must be used within ComposerPrimitive.TriggerPopoverRoot");
11
12
  return ctx;
12
13
  };
13
- const useTriggerPopoverRootContextOptional = () => useContext(TriggerPopoverRootContext);
14
+ const useTriggerPopoverRootContextOptional = () => {
15
+ return useContext(TriggerPopoverRootContext);
16
+ };
14
17
  /**
15
18
  * Internal hook used by `TriggerPopover` children to publish their open and
16
19
  * highlight state. Not exported from the trigger module.
@@ -52,93 +55,176 @@ const useTriggerPopoverActiveAriaOptional = () => {
52
55
  * avoid pulling a single-use abstraction into the wider tree.
53
56
  */
54
57
  function useSimpleSubscribable() {
55
- const listenersRef = useRef(/* @__PURE__ */ new Set());
56
- return {
57
- notify: useCallback(() => {
58
+ const $ = c(4);
59
+ let t0;
60
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
61
+ t0 = /* @__PURE__ */ new Set();
62
+ $[0] = t0;
63
+ } else t0 = $[0];
64
+ const listenersRef = useRef(t0);
65
+ let t1;
66
+ if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
67
+ t1 = () => {
58
68
  for (const listener of listenersRef.current) listener();
59
- }, []),
60
- subscribe: useCallback((listener) => {
61
- listenersRef.current.add(listener);
69
+ };
70
+ $[1] = t1;
71
+ } else t1 = $[1];
72
+ const notify = t1;
73
+ let t2;
74
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
75
+ t2 = (listener_0) => {
76
+ listenersRef.current.add(listener_0);
62
77
  return () => {
63
- listenersRef.current.delete(listener);
78
+ listenersRef.current.delete(listener_0);
64
79
  };
65
- }, [])
66
- };
80
+ };
81
+ $[2] = t2;
82
+ } else t2 = $[2];
83
+ const subscribe = t2;
84
+ let t3;
85
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
86
+ t3 = {
87
+ notify,
88
+ subscribe
89
+ };
90
+ $[3] = t3;
91
+ } else t3 = $[3];
92
+ return t3;
67
93
  }
68
- const TriggerPopoverRootInner = ({ children }) => {
69
- const triggersRef = useRef(/* @__PURE__ */ new Map());
70
- const lifecycleListenersRef = useRef(/* @__PURE__ */ new Set());
94
+ const TriggerPopoverRootInner = (t0) => {
95
+ const $ = c(21);
96
+ const { children } = t0;
97
+ let t1;
98
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
99
+ t1 = /* @__PURE__ */ new Map();
100
+ $[0] = t1;
101
+ } else t1 = $[0];
102
+ const triggersRef = useRef(t1);
103
+ let t2;
104
+ if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
105
+ t2 = /* @__PURE__ */ new Set();
106
+ $[1] = t2;
107
+ } else t2 = $[1];
108
+ const lifecycleListenersRef = useRef(t2);
71
109
  const { notify, subscribe } = useSimpleSubscribable();
72
- const register = useCallback((trigger) => {
73
- const { char } = trigger;
74
- if (triggersRef.current.has(char)) {
75
- if (process.env.NODE_ENV !== "production") console.warn(`[assistant-ui] Duplicate TriggerPopover for char "${char}". Ignoring the second registration.`);
76
- return () => {};
77
- }
78
- if (process.env.NODE_ENV !== "production") {
79
- for (const existing of triggersRef.current.values()) if (char.startsWith(existing.char) || existing.char.startsWith(char)) console.warn(`[assistant-ui] Trigger prefix collision between "${existing.char}" and "${char}". One char is a prefix of the other; only one will match reliably.`);
80
- }
81
- const next = new Map(triggersRef.current);
82
- next.set(char, trigger);
83
- triggersRef.current = next;
84
- notify();
85
- for (const l of lifecycleListenersRef.current) l.added(trigger);
86
- return () => {
87
- const after = new Map(triggersRef.current);
88
- after.delete(char);
89
- triggersRef.current = after;
110
+ let t3;
111
+ if ($[2] !== notify) {
112
+ t3 = (trigger) => {
113
+ const { char } = trigger;
114
+ if (triggersRef.current.has(char)) {
115
+ if (process.env.NODE_ENV !== "production") console.warn(`[assistant-ui] Duplicate TriggerPopover for char "${char}". Ignoring the second registration.`);
116
+ return _temp;
117
+ }
118
+ if (process.env.NODE_ENV !== "production") {
119
+ for (const existing of triggersRef.current.values()) if (char.startsWith(existing.char) || existing.char.startsWith(char)) console.warn(`[assistant-ui] Trigger prefix collision between "${existing.char}" and "${char}". One char is a prefix of the other; only one will match reliably.`);
120
+ }
121
+ const next = new Map(triggersRef.current);
122
+ next.set(char, trigger);
123
+ triggersRef.current = next;
90
124
  notify();
91
- for (const l of lifecycleListenersRef.current) l.removed(char);
125
+ for (const l of lifecycleListenersRef.current) l.added(trigger);
126
+ return () => {
127
+ const after = new Map(triggersRef.current);
128
+ after.delete(char);
129
+ triggersRef.current = after;
130
+ notify();
131
+ for (const l_0 of lifecycleListenersRef.current) l_0.removed(char);
132
+ };
92
133
  };
93
- }, [notify]);
94
- const getTriggers = useCallback(() => triggersRef.current, []);
95
- const subscribeLifecycle = useCallback((listener) => {
96
- lifecycleListenersRef.current.add(listener);
97
- return () => {
98
- lifecycleListenersRef.current.delete(listener);
134
+ $[2] = notify;
135
+ $[3] = t3;
136
+ } else t3 = $[3];
137
+ const register = t3;
138
+ let t4;
139
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
140
+ t4 = () => triggersRef.current;
141
+ $[4] = t4;
142
+ } else t4 = $[4];
143
+ const getTriggers = t4;
144
+ let t5;
145
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
146
+ t5 = (listener) => {
147
+ lifecycleListenersRef.current.add(listener);
148
+ return () => {
149
+ lifecycleListenersRef.current.delete(listener);
150
+ };
99
151
  };
100
- }, []);
152
+ $[5] = t5;
153
+ } else t5 = $[5];
154
+ const subscribeLifecycle = t5;
101
155
  const activeAriaRef = useRef(null);
102
156
  const activeAriaCharRef = useRef(null);
103
157
  const { notify: notifyAria, subscribe: subscribeAria } = useSimpleSubscribable();
104
- const setActiveAria = useCallback((char, aria) => {
105
- if (aria === null) {
106
- if (activeAriaCharRef.current !== char) return;
107
- activeAriaRef.current = null;
108
- activeAriaCharRef.current = null;
158
+ let t6;
159
+ if ($[6] !== notifyAria) {
160
+ t6 = (char_0, aria) => {
161
+ if (aria === null) {
162
+ if (activeAriaCharRef.current !== char_0) return;
163
+ activeAriaRef.current = null;
164
+ activeAriaCharRef.current = null;
165
+ notifyAria();
166
+ return;
167
+ }
168
+ const prev = activeAriaRef.current;
169
+ if (activeAriaCharRef.current === char_0 && prev !== null && prev.popoverId === aria.popoverId && prev.highlightedItemId === aria.highlightedItemId) return;
170
+ activeAriaRef.current = aria;
171
+ activeAriaCharRef.current = char_0;
109
172
  notifyAria();
110
- return;
111
- }
112
- const prev = activeAriaRef.current;
113
- if (activeAriaCharRef.current === char && prev !== null && prev.popoverId === aria.popoverId && prev.highlightedItemId === aria.highlightedItemId) return;
114
- activeAriaRef.current = aria;
115
- activeAriaCharRef.current = char;
116
- notifyAria();
117
- }, [notifyAria]);
118
- const getActiveAria = useCallback(() => activeAriaRef.current, []);
119
- const value = useMemo(() => ({
120
- register,
121
- getTriggers,
122
- subscribe,
123
- subscribeLifecycle,
124
- getActiveAria,
125
- subscribeAria
126
- }), [
127
- register,
128
- getTriggers,
129
- subscribe,
130
- subscribeLifecycle,
131
- getActiveAria,
132
- subscribeAria
133
- ]);
134
- const ariaPublishValue = useMemo(() => ({ setActiveAria }), [setActiveAria]);
135
- return /* @__PURE__ */ jsx(TriggerPopoverRootContext.Provider, {
136
- value,
137
- children: /* @__PURE__ */ jsx(TriggerPopoverAriaPublishContext.Provider, {
173
+ };
174
+ $[6] = notifyAria;
175
+ $[7] = t6;
176
+ } else t6 = $[7];
177
+ const setActiveAria = t6;
178
+ let t7;
179
+ if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
180
+ t7 = () => activeAriaRef.current;
181
+ $[8] = t7;
182
+ } else t7 = $[8];
183
+ const getActiveAria = t7;
184
+ let t8;
185
+ if ($[9] !== register || $[10] !== subscribe || $[11] !== subscribeAria) {
186
+ t8 = {
187
+ register,
188
+ getTriggers,
189
+ subscribe,
190
+ subscribeLifecycle,
191
+ getActiveAria,
192
+ subscribeAria
193
+ };
194
+ $[9] = register;
195
+ $[10] = subscribe;
196
+ $[11] = subscribeAria;
197
+ $[12] = t8;
198
+ } else t8 = $[12];
199
+ const value = t8;
200
+ let t9;
201
+ if ($[13] !== setActiveAria) {
202
+ t9 = { setActiveAria };
203
+ $[13] = setActiveAria;
204
+ $[14] = t9;
205
+ } else t9 = $[14];
206
+ const ariaPublishValue = t9;
207
+ let t10;
208
+ if ($[15] !== ariaPublishValue || $[16] !== children) {
209
+ t10 = /* @__PURE__ */ jsx(TriggerPopoverAriaPublishContext.Provider, {
138
210
  value: ariaPublishValue,
139
211
  children
140
- })
141
- });
212
+ });
213
+ $[15] = ariaPublishValue;
214
+ $[16] = children;
215
+ $[17] = t10;
216
+ } else t10 = $[17];
217
+ let t11;
218
+ if ($[18] !== t10 || $[19] !== value) {
219
+ t11 = /* @__PURE__ */ jsx(TriggerPopoverRootContext.Provider, {
220
+ value,
221
+ children: t10
222
+ });
223
+ $[18] = t10;
224
+ $[19] = value;
225
+ $[20] = t11;
226
+ } else t11 = $[20];
227
+ return t11;
142
228
  };
143
229
  /**
144
230
  * Provider that groups one or more `TriggerPopover` declarations. Each trigger
@@ -164,11 +250,28 @@ const TriggerPopoverRootInner = ({ children }) => {
164
250
  * </ComposerPrimitive.Unstable_TriggerPopoverRoot>
165
251
  * ```
166
252
  */
167
- const ComposerPrimitiveTriggerPopoverRoot = ({ children }) => {
168
- if (useComposerInputPluginRegistryOptional()) return /* @__PURE__ */ jsx(TriggerPopoverRootInner, { children });
169
- return /* @__PURE__ */ jsx(ComposerInputPluginProvider, { children: /* @__PURE__ */ jsx(TriggerPopoverRootInner, { children }) });
253
+ const ComposerPrimitiveTriggerPopoverRoot = (t0) => {
254
+ const $ = c(4);
255
+ const { children } = t0;
256
+ if (useComposerInputPluginRegistryOptional()) {
257
+ let t1;
258
+ if ($[0] !== children) {
259
+ t1 = /* @__PURE__ */ jsx(TriggerPopoverRootInner, { children });
260
+ $[0] = children;
261
+ $[1] = t1;
262
+ } else t1 = $[1];
263
+ return t1;
264
+ }
265
+ let t1;
266
+ if ($[2] !== children) {
267
+ t1 = /* @__PURE__ */ jsx(ComposerInputPluginProvider, { children: /* @__PURE__ */ jsx(TriggerPopoverRootInner, { children }) });
268
+ $[2] = children;
269
+ $[3] = t1;
270
+ } else t1 = $[3];
271
+ return t1;
170
272
  };
171
273
  ComposerPrimitiveTriggerPopoverRoot.displayName = "ComposerPrimitive.TriggerPopoverRoot";
274
+ function _temp() {}
172
275
  //#endregion
173
276
  export { ComposerPrimitiveTriggerPopoverRoot, useTriggerPopoverActiveAriaOptional, useTriggerPopoverAriaPublish, useTriggerPopoverRootContext, useTriggerPopoverRootContextOptional, useTriggerPopoverTriggers, useTriggerPopoverTriggersOptional };
174
277
 
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverRootContext.js","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverRootContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useSyncExternalStore,\n type FC,\n type ReactNode,\n} from \"react\";\nimport {\n ComposerInputPluginProvider,\n useComposerInputPluginRegistryOptional,\n} from \"../ComposerInputPluginContext\";\nimport type { TriggerPopoverResourceOutput } from \"./TriggerPopoverResource\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\n\nexport type RegisteredTrigger = {\n readonly char: string;\n /** Behavior contributed by a child `TriggerPopover.Directive` / `.Action`. */\n readonly behavior?: TriggerBehavior;\n readonly resource: TriggerPopoverResourceOutput;\n};\n\nexport type TriggerPopoverLifecycleListener = {\n added(trigger: RegisteredTrigger): void;\n removed(char: string): void;\n};\n\n/**\n * ARIA descriptor of the popover that is currently open. Consumed by the\n * focused element (typically the composer textarea) so it can advertise the\n * combobox relationship per the WAI-ARIA editable combobox pattern.\n */\nexport type TriggerPopoverActiveAria = {\n popoverId: string;\n highlightedItemId: string | undefined;\n};\n\nexport type TriggerPopoverRootContextValue = {\n register(trigger: RegisteredTrigger): () => void;\n getTriggers(): ReadonlyMap<string, RegisteredTrigger>;\n subscribe(listener: () => void): () => void;\n /** Subscribe to per-trigger add/remove events. */\n subscribeLifecycle(listener: TriggerPopoverLifecycleListener): () => void;\n /** ARIA descriptor of the open popover, or null if none is open. */\n getActiveAria(): TriggerPopoverActiveAria | null;\n /** Subscribe to changes in the active ARIA descriptor. */\n subscribeAria(listener: () => void): () => void;\n};\n\n/**\n * Write-side of the ARIA descriptor, scoped to `TriggerPopover` children of a\n * `TriggerPopoverRoot`. Intentionally not exposed on the public root context\n * value: external consumers can read ARIA state but cannot publish or clear it.\n */\ntype TriggerPopoverAriaPublish = {\n setActiveAria(char: string, aria: TriggerPopoverActiveAria | null): void;\n};\n\nconst TriggerPopoverRootContext =\n createContext<TriggerPopoverRootContextValue | null>(null);\n\nconst TriggerPopoverAriaPublishContext =\n createContext<TriggerPopoverAriaPublish | null>(null);\n\nexport const useTriggerPopoverRootContext = () => {\n const ctx = useContext(TriggerPopoverRootContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverRootContext must be used within ComposerPrimitive.TriggerPopoverRoot\",\n );\n return ctx;\n};\n\nexport const useTriggerPopoverRootContextOptional = () =>\n useContext(TriggerPopoverRootContext);\n\n/**\n * Internal hook used by `TriggerPopover` children to publish their open and\n * highlight state. Not exported from the trigger module.\n */\nexport const useTriggerPopoverAriaPublish = (): TriggerPopoverAriaPublish => {\n const ctx = useContext(TriggerPopoverAriaPublishContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverAriaPublish must be used within ComposerPrimitive.TriggerPopoverRoot\",\n );\n return ctx;\n};\n\n/**\n * Live map of registered triggers, re-rendering on change. Prefer\n * `subscribeLifecycle` for incremental add/remove handling.\n */\nexport const useTriggerPopoverTriggers = () => {\n const ctx = useTriggerPopoverRootContext();\n return useSyncExternalStore(ctx.subscribe, ctx.getTriggers, ctx.getTriggers);\n};\n\nconst EMPTY_TRIGGERS: ReadonlyMap<string, RegisteredTrigger> = new Map();\nconst noopSubscribe = () => () => {};\nconst getEmptyTriggers = () => EMPTY_TRIGGERS;\n\n/** Like `useTriggerPopoverTriggers` but returns an empty map outside a root. */\nexport const useTriggerPopoverTriggersOptional = () => {\n const ctx = useTriggerPopoverRootContextOptional();\n return useSyncExternalStore(\n ctx ? ctx.subscribe : noopSubscribe,\n ctx ? ctx.getTriggers : getEmptyTriggers,\n ctx ? ctx.getTriggers : getEmptyTriggers,\n );\n};\n\nconst getNullAria = () => null;\n\n/**\n * Returns the ARIA descriptor of the currently open trigger popover, or\n * `null` if none is open or the consumer is rendered outside a\n * `TriggerPopoverRoot`.\n */\nexport const useTriggerPopoverActiveAriaOptional =\n (): TriggerPopoverActiveAria | null => {\n const ctx = useTriggerPopoverRootContextOptional();\n return useSyncExternalStore(\n ctx ? ctx.subscribeAria : noopSubscribe,\n ctx ? ctx.getActiveAria : getNullAria,\n ctx ? ctx.getActiveAria : getNullAria,\n );\n };\n\nexport namespace ComposerPrimitiveTriggerPopoverRoot {\n export type Props = {\n children: ReactNode;\n };\n}\n\n/**\n * Local helper for the simple \"notify-all listeners\" subscribable pattern.\n * Used twice in this file (trigger registry, active ARIA); kept inline to\n * avoid pulling a single-use abstraction into the wider tree.\n */\nfunction useSimpleSubscribable() {\n const listenersRef = useRef<Set<() => void>>(new Set());\n const notify = useCallback(() => {\n for (const listener of listenersRef.current) listener();\n }, []);\n const subscribe = useCallback((listener: () => void) => {\n listenersRef.current.add(listener);\n return () => {\n listenersRef.current.delete(listener);\n };\n }, []);\n return { notify, subscribe };\n}\n\nconst TriggerPopoverRootInner: FC<\n ComposerPrimitiveTriggerPopoverRoot.Props\n> = ({ children }) => {\n const triggersRef = useRef<ReadonlyMap<string, RegisteredTrigger>>(new Map());\n const lifecycleListenersRef = useRef<Set<TriggerPopoverLifecycleListener>>(\n new Set(),\n );\n\n const { notify, subscribe } = useSimpleSubscribable();\n\n const register = useCallback<TriggerPopoverRootContextValue[\"register\"]>(\n (trigger) => {\n const { char } = trigger;\n if (triggersRef.current.has(char)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[assistant-ui] Duplicate TriggerPopover for char \"${char}\". Ignoring the second registration.`,\n );\n }\n return () => {};\n }\n if (process.env.NODE_ENV !== \"production\") {\n for (const existing of triggersRef.current.values()) {\n if (\n char.startsWith(existing.char) ||\n existing.char.startsWith(char)\n ) {\n console.warn(\n `[assistant-ui] Trigger prefix collision between \"${existing.char}\" and \"${char}\". One char is a prefix of the other; only one will match reliably.`,\n );\n }\n }\n }\n const next = new Map(triggersRef.current);\n next.set(char, trigger);\n triggersRef.current = next;\n notify();\n for (const l of lifecycleListenersRef.current) l.added(trigger);\n return () => {\n const after = new Map(triggersRef.current);\n after.delete(char);\n triggersRef.current = after;\n notify();\n for (const l of lifecycleListenersRef.current) l.removed(char);\n };\n },\n [notify],\n );\n\n const getTriggers = useCallback<\n TriggerPopoverRootContextValue[\"getTriggers\"]\n >(() => triggersRef.current, []);\n\n const subscribeLifecycle = useCallback<\n TriggerPopoverRootContextValue[\"subscribeLifecycle\"]\n >((listener) => {\n lifecycleListenersRef.current.add(listener);\n return () => {\n lifecycleListenersRef.current.delete(listener);\n };\n }, []);\n\n const activeAriaRef = useRef<TriggerPopoverActiveAria | null>(null);\n const activeAriaCharRef = useRef<string | null>(null);\n const { notify: notifyAria, subscribe: subscribeAria } =\n useSimpleSubscribable();\n\n const setActiveAria = useCallback<TriggerPopoverAriaPublish[\"setActiveAria\"]>(\n (char, aria) => {\n if (aria === null) {\n if (activeAriaCharRef.current !== char) return;\n activeAriaRef.current = null;\n activeAriaCharRef.current = null;\n notifyAria();\n return;\n }\n const prev = activeAriaRef.current;\n if (\n activeAriaCharRef.current === char &&\n prev !== null &&\n prev.popoverId === aria.popoverId &&\n prev.highlightedItemId === aria.highlightedItemId\n ) {\n return;\n }\n activeAriaRef.current = aria;\n activeAriaCharRef.current = char;\n notifyAria();\n },\n [notifyAria],\n );\n\n const getActiveAria = useCallback<\n TriggerPopoverRootContextValue[\"getActiveAria\"]\n >(() => activeAriaRef.current, []);\n\n const value = useMemo<TriggerPopoverRootContextValue>(\n () => ({\n register,\n getTriggers,\n subscribe,\n subscribeLifecycle,\n getActiveAria,\n subscribeAria,\n }),\n [\n register,\n getTriggers,\n subscribe,\n subscribeLifecycle,\n getActiveAria,\n subscribeAria,\n ],\n );\n\n const ariaPublishValue = useMemo<TriggerPopoverAriaPublish>(\n () => ({ setActiveAria }),\n [setActiveAria],\n );\n\n return (\n <TriggerPopoverRootContext.Provider value={value}>\n <TriggerPopoverAriaPublishContext.Provider value={ariaPublishValue}>\n {children}\n </TriggerPopoverAriaPublishContext.Provider>\n </TriggerPopoverRootContext.Provider>\n );\n};\n\n/**\n * Provider that groups one or more `TriggerPopover` declarations. Each trigger\n * is identified by its `char` (unique within the root). Behavior is contributed\n * by a child `TriggerPopover.Directive` or `TriggerPopover.Action`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopoverRoot>\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"@\" adapter={mentionAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />\n * ...\n * </ComposerPrimitive.Unstable_TriggerPopover>\n *\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"/\" adapter={slashAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Action onExecute={handler} />\n * ...\n * </ComposerPrimitive.Unstable_TriggerPopover>\n *\n * <ComposerPrimitive.Root>\n * <ComposerPrimitive.Input />\n * </ComposerPrimitive.Root>\n * </ComposerPrimitive.Unstable_TriggerPopoverRoot>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopoverRoot: FC<\n ComposerPrimitiveTriggerPopoverRoot.Props\n> = ({ children }) => {\n const existingRegistry = useComposerInputPluginRegistryOptional();\n\n if (existingRegistry) {\n return <TriggerPopoverRootInner>{children}</TriggerPopoverRootInner>;\n }\n\n return (\n <ComposerInputPluginProvider>\n <TriggerPopoverRootInner>{children}</TriggerPopoverRootInner>\n </ComposerInputPluginProvider>\n );\n};\n\nComposerPrimitiveTriggerPopoverRoot.displayName =\n \"ComposerPrimitive.TriggerPopoverRoot\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"TriggerPopoverRootContext.js","names":["c","_c","createContext","useCallback","useContext","useMemo","useRef","useSyncExternalStore","FC","ReactNode","ComposerInputPluginProvider","useComposerInputPluginRegistryOptional","TriggerPopoverResourceOutput","TriggerBehavior","RegisteredTrigger","char","behavior","resource","TriggerPopoverLifecycleListener","added","trigger","removed","TriggerPopoverActiveAria","popoverId","highlightedItemId","TriggerPopoverRootContextValue","register","getTriggers","ReadonlyMap","subscribe","listener","subscribeLifecycle","getActiveAria","subscribeAria","TriggerPopoverAriaPublish","setActiveAria","aria","TriggerPopoverRootContext","TriggerPopoverAriaPublishContext","useTriggerPopoverRootContext","ctx","Error","useTriggerPopoverRootContextOptional","useTriggerPopoverAriaPublish","useTriggerPopoverTriggers","EMPTY_TRIGGERS","Map","noopSubscribe","getEmptyTriggers","useTriggerPopoverTriggersOptional","getNullAria","useTriggerPopoverActiveAriaOptional","ComposerPrimitiveTriggerPopoverRoot","Props","children","useSimpleSubscribable","$","t0","Symbol","for","Set","listenersRef","t1","current","notify","t2","listener_0","add","delete","t3","TriggerPopoverRootInner","triggersRef","lifecycleListenersRef","has","process","env","NODE_ENV","console","warn","_temp","existing","values","startsWith","next","set","l","after","l_0","t4","t5","activeAriaRef","activeAriaCharRef","notifyAria","t6","char_0","prev","t7","t8","value","t9","ariaPublishValue","t10","t11","existingRegistry","displayName"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverRootContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useSyncExternalStore,\n type FC,\n type ReactNode,\n} from \"react\";\nimport {\n ComposerInputPluginProvider,\n useComposerInputPluginRegistryOptional,\n} from \"../ComposerInputPluginContext\";\nimport type { TriggerPopoverResourceOutput } from \"./TriggerPopoverResource\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\n\nexport type RegisteredTrigger = {\n readonly char: string;\n /** Behavior contributed by a child `TriggerPopover.Directive` / `.Action`. */\n readonly behavior?: TriggerBehavior;\n readonly resource: TriggerPopoverResourceOutput;\n};\n\nexport type TriggerPopoverLifecycleListener = {\n added(trigger: RegisteredTrigger): void;\n removed(char: string): void;\n};\n\n/**\n * ARIA descriptor of the popover that is currently open. Consumed by the\n * focused element (typically the composer textarea) so it can advertise the\n * combobox relationship per the WAI-ARIA editable combobox pattern.\n */\nexport type TriggerPopoverActiveAria = {\n popoverId: string;\n highlightedItemId: string | undefined;\n};\n\nexport type TriggerPopoverRootContextValue = {\n register(trigger: RegisteredTrigger): () => void;\n getTriggers(): ReadonlyMap<string, RegisteredTrigger>;\n subscribe(listener: () => void): () => void;\n /** Subscribe to per-trigger add/remove events. */\n subscribeLifecycle(listener: TriggerPopoverLifecycleListener): () => void;\n /** ARIA descriptor of the open popover, or null if none is open. */\n getActiveAria(): TriggerPopoverActiveAria | null;\n /** Subscribe to changes in the active ARIA descriptor. */\n subscribeAria(listener: () => void): () => void;\n};\n\n/**\n * Write-side of the ARIA descriptor, scoped to `TriggerPopover` children of a\n * `TriggerPopoverRoot`. Intentionally not exposed on the public root context\n * value: external consumers can read ARIA state but cannot publish or clear it.\n */\ntype TriggerPopoverAriaPublish = {\n setActiveAria(char: string, aria: TriggerPopoverActiveAria | null): void;\n};\n\nconst TriggerPopoverRootContext =\n createContext<TriggerPopoverRootContextValue | null>(null);\n\nconst TriggerPopoverAriaPublishContext =\n createContext<TriggerPopoverAriaPublish | null>(null);\n\nexport const useTriggerPopoverRootContext = () => {\n const ctx = useContext(TriggerPopoverRootContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverRootContext must be used within ComposerPrimitive.TriggerPopoverRoot\",\n );\n return ctx;\n};\n\nexport const useTriggerPopoverRootContextOptional = () =>\n useContext(TriggerPopoverRootContext);\n\n/**\n * Internal hook used by `TriggerPopover` children to publish their open and\n * highlight state. Not exported from the trigger module.\n */\nexport const useTriggerPopoverAriaPublish = (): TriggerPopoverAriaPublish => {\n const ctx = useContext(TriggerPopoverAriaPublishContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverAriaPublish must be used within ComposerPrimitive.TriggerPopoverRoot\",\n );\n return ctx;\n};\n\n/**\n * Live map of registered triggers, re-rendering on change. Prefer\n * `subscribeLifecycle` for incremental add/remove handling.\n */\nexport const useTriggerPopoverTriggers = () => {\n const ctx = useTriggerPopoverRootContext();\n return useSyncExternalStore(ctx.subscribe, ctx.getTriggers, ctx.getTriggers);\n};\n\nconst EMPTY_TRIGGERS: ReadonlyMap<string, RegisteredTrigger> = new Map();\nconst noopSubscribe = () => () => {};\nconst getEmptyTriggers = () => EMPTY_TRIGGERS;\n\n/** Like `useTriggerPopoverTriggers` but returns an empty map outside a root. */\nexport const useTriggerPopoverTriggersOptional = () => {\n const ctx = useTriggerPopoverRootContextOptional();\n return useSyncExternalStore(\n ctx ? ctx.subscribe : noopSubscribe,\n ctx ? ctx.getTriggers : getEmptyTriggers,\n ctx ? ctx.getTriggers : getEmptyTriggers,\n );\n};\n\nconst getNullAria = () => null;\n\n/**\n * Returns the ARIA descriptor of the currently open trigger popover, or\n * `null` if none is open or the consumer is rendered outside a\n * `TriggerPopoverRoot`.\n */\nexport const useTriggerPopoverActiveAriaOptional =\n (): TriggerPopoverActiveAria | null => {\n const ctx = useTriggerPopoverRootContextOptional();\n return useSyncExternalStore(\n ctx ? ctx.subscribeAria : noopSubscribe,\n ctx ? ctx.getActiveAria : getNullAria,\n ctx ? ctx.getActiveAria : getNullAria,\n );\n };\n\nexport namespace ComposerPrimitiveTriggerPopoverRoot {\n export type Props = {\n children: ReactNode;\n };\n}\n\n/**\n * Local helper for the simple \"notify-all listeners\" subscribable pattern.\n * Used twice in this file (trigger registry, active ARIA); kept inline to\n * avoid pulling a single-use abstraction into the wider tree.\n */\nfunction useSimpleSubscribable() {\n const listenersRef = useRef<Set<() => void>>(new Set());\n const notify = useCallback(() => {\n for (const listener of listenersRef.current) listener();\n }, []);\n const subscribe = useCallback((listener: () => void) => {\n listenersRef.current.add(listener);\n return () => {\n listenersRef.current.delete(listener);\n };\n }, []);\n return { notify, subscribe };\n}\n\nconst TriggerPopoverRootInner: FC<\n ComposerPrimitiveTriggerPopoverRoot.Props\n> = ({ children }) => {\n const triggersRef = useRef<ReadonlyMap<string, RegisteredTrigger>>(new Map());\n const lifecycleListenersRef = useRef<Set<TriggerPopoverLifecycleListener>>(\n new Set(),\n );\n\n const { notify, subscribe } = useSimpleSubscribable();\n\n const register = useCallback<TriggerPopoverRootContextValue[\"register\"]>(\n (trigger) => {\n const { char } = trigger;\n if (triggersRef.current.has(char)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[assistant-ui] Duplicate TriggerPopover for char \"${char}\". Ignoring the second registration.`,\n );\n }\n return () => {};\n }\n if (process.env.NODE_ENV !== \"production\") {\n for (const existing of triggersRef.current.values()) {\n if (\n char.startsWith(existing.char) ||\n existing.char.startsWith(char)\n ) {\n console.warn(\n `[assistant-ui] Trigger prefix collision between \"${existing.char}\" and \"${char}\". One char is a prefix of the other; only one will match reliably.`,\n );\n }\n }\n }\n const next = new Map(triggersRef.current);\n next.set(char, trigger);\n triggersRef.current = next;\n notify();\n for (const l of lifecycleListenersRef.current) l.added(trigger);\n return () => {\n const after = new Map(triggersRef.current);\n after.delete(char);\n triggersRef.current = after;\n notify();\n for (const l of lifecycleListenersRef.current) l.removed(char);\n };\n },\n [notify],\n );\n\n const getTriggers = useCallback<\n TriggerPopoverRootContextValue[\"getTriggers\"]\n >(() => triggersRef.current, []);\n\n const subscribeLifecycle = useCallback<\n TriggerPopoverRootContextValue[\"subscribeLifecycle\"]\n >((listener) => {\n lifecycleListenersRef.current.add(listener);\n return () => {\n lifecycleListenersRef.current.delete(listener);\n };\n }, []);\n\n const activeAriaRef = useRef<TriggerPopoverActiveAria | null>(null);\n const activeAriaCharRef = useRef<string | null>(null);\n const { notify: notifyAria, subscribe: subscribeAria } =\n useSimpleSubscribable();\n\n const setActiveAria = useCallback<TriggerPopoverAriaPublish[\"setActiveAria\"]>(\n (char, aria) => {\n if (aria === null) {\n if (activeAriaCharRef.current !== char) return;\n activeAriaRef.current = null;\n activeAriaCharRef.current = null;\n notifyAria();\n return;\n }\n const prev = activeAriaRef.current;\n if (\n activeAriaCharRef.current === char &&\n prev !== null &&\n prev.popoverId === aria.popoverId &&\n prev.highlightedItemId === aria.highlightedItemId\n ) {\n return;\n }\n activeAriaRef.current = aria;\n activeAriaCharRef.current = char;\n notifyAria();\n },\n [notifyAria],\n );\n\n const getActiveAria = useCallback<\n TriggerPopoverRootContextValue[\"getActiveAria\"]\n >(() => activeAriaRef.current, []);\n\n const value = useMemo<TriggerPopoverRootContextValue>(\n () => ({\n register,\n getTriggers,\n subscribe,\n subscribeLifecycle,\n getActiveAria,\n subscribeAria,\n }),\n [\n register,\n getTriggers,\n subscribe,\n subscribeLifecycle,\n getActiveAria,\n subscribeAria,\n ],\n );\n\n const ariaPublishValue = useMemo<TriggerPopoverAriaPublish>(\n () => ({ setActiveAria }),\n [setActiveAria],\n );\n\n return (\n <TriggerPopoverRootContext.Provider value={value}>\n <TriggerPopoverAriaPublishContext.Provider value={ariaPublishValue}>\n {children}\n </TriggerPopoverAriaPublishContext.Provider>\n </TriggerPopoverRootContext.Provider>\n );\n};\n\n/**\n * Provider that groups one or more `TriggerPopover` declarations. Each trigger\n * is identified by its `char` (unique within the root). Behavior is contributed\n * by a child `TriggerPopover.Directive` or `TriggerPopover.Action`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopoverRoot>\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"@\" adapter={mentionAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />\n * ...\n * </ComposerPrimitive.Unstable_TriggerPopover>\n *\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"/\" adapter={slashAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Action onExecute={handler} />\n * ...\n * </ComposerPrimitive.Unstable_TriggerPopover>\n *\n * <ComposerPrimitive.Root>\n * <ComposerPrimitive.Input />\n * </ComposerPrimitive.Root>\n * </ComposerPrimitive.Unstable_TriggerPopoverRoot>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopoverRoot: FC<\n ComposerPrimitiveTriggerPopoverRoot.Props\n> = ({ children }) => {\n const existingRegistry = useComposerInputPluginRegistryOptional();\n\n if (existingRegistry) {\n return <TriggerPopoverRootInner>{children}</TriggerPopoverRootInner>;\n }\n\n return (\n <ComposerInputPluginProvider>\n <TriggerPopoverRootInner>{children}</TriggerPopoverRootInner>\n </ComposerInputPluginProvider>\n );\n};\n\nComposerPrimitiveTriggerPopoverRoot.displayName =\n \"ComposerPrimitive.TriggerPopoverRoot\";\n"],"mappings":";;;;;;AA8DA,MAAMqC,4BACJnC,cAAqD,IAAI;AAE3D,MAAMoC,mCACJpC,cAAgD,IAAI;AAEtD,MAAaqC,qCAA+B;CAC1C,MAAAC,MAAYpC,WAAWiC,yBAAyB;CAChD,IAAI,CAACG,KACH,MAAM,IAAIC,MACR,uFACF;CAAE,OACGD;AAAG;AAGZ,MAAaE,6CAAuC;CAAA,OAClDtC,WAAWiC,yBAAyB;AAAC;;;;;AAMvC,MAAaM,qCAA+B;CAC1C,MAAAH,MAAYpC,WAAWkC,gCAAgC;CACvD,IAAI,CAACE,KACH,MAAM,IAAIC,MACR,uFACF;CAAE,OACGD;AAAG;;;;;AAOZ,MAAaI,kCAA4B;CACvC,MAAAJ,MAAYD,6BAA6B;CAAE,OACpChC,qBAAqBiC,IAAGX,WAAYW,IAAGb,aAAca,IAAGb,WAAY;AAAC;AAG9E,MAAMkB,iCAAyD,IAAIC,IAAI;AACvE,MAAMC,4BAA4B,CAAC;AACnC,MAAMC,yBAAyBH;;AAG/B,MAAaI,0CAAoC;CAC/C,MAAAT,MAAYE,qCAAqC;CAAE,OAC5CnC,qBACLiC,MAAMA,IAAGX,YAATkB,eACAP,MAAMA,IAAGb,cAATqB,kBACAR,MAAMA,IAAGb,cAATqB,gBACF;AAAC;AAGH,MAAME,oBAAoB;;;;;;AAO1B,MAAaC,4CACX;CACE,MAAAX,MAAYE,qCAAqC;CAAE,OAC5CnC,qBACLiC,MAAMA,IAAGP,gBAATc,eACAP,MAAMA,IAAGR,gBAATkB,aACAV,MAAMA,IAAGR,gBAATkB,WACF;AAAC;;;;;;AAcL,SAAAK,wBAAA;CAAA,MAAAC,IAAAvD,EAAA,CAAA;CAAA,IAAAwD;CAAA,IAAAD,EAAA,OAAAE,OAAAC,IAAA,2BAAA,GAAA;EAC+CF,qBAAA,IAAIG,IAAI;EAACJ,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAAtD,MAAAK,eAAqBvD,OAAwBmD,EAAS;CAAE,IAAAK;CAAA,IAAAN,EAAA,OAAAE,OAAAC,IAAA,2BAAA,GAAA;EAC7BG,WAAA;GACzB,KAAK,MAAAhC,YAAkB+B,aAAYE,SAAUjC,SAAS;EAAE;EACzD0B,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAFD,MAAAQ,SAAeF;CAER,IAAAG;CAAA,IAAAT,EAAA,OAAAE,OAAAC,IAAA,2BAAA,GAAA;EACuBM,MAAAC,eAAA;GAC5BL,aAAYE,QAAQI,IAAKrC,UAAQ;GAAC,aAC3B;IACL+B,aAAYE,QAAQK,OAAQtC,UAAQ;GAAC;EACtC;EACF0B,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CALD,MAAA3B,YAAkBoC;CAKX,IAAAI;CAAA,IAAAb,EAAA,OAAAE,OAAAC,IAAA,2BAAA,GAAA;EACAU,KAAA;GAAAL;GAAAnC;EAAoB;EAAC2B,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,OAArBa;AAAqB;AAG9B,MAAMC,2BAEFb,OAAA;CAAA,MAAAD,IAAAvD,EAAA,EAAA;CAAC,MAAA,EAAAqD,aAAAG;CAAY,IAAAK;CAAA,IAAAN,EAAA,OAAAE,OAAAC,IAAA,2BAAA,GAAA;EACoDG,qBAAA,IAAIhB,IAAI;EAACU,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAA5E,MAAAe,cAAoBjE,OAA+CwD,EAAS;CAAE,IAAAG;CAAA,IAAAT,EAAA,OAAAE,OAAAC,IAAA,2BAAA,GAAA;EAE5EM,qBAAA,IAAIL,IAAI;EAACJ,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CADX,MAAAgB,wBAA8BlE,OAC5B2D,EACF;CAEA,MAAA,EAAAD,QAAAnC,cAA8B0B,sBAAsB;CAAE,IAAAc;CAAA,IAAAb,EAAA,OAAAQ,QAAA;EAGpDK,MAAAjD,YAAA;GACE,MAAA,EAAAL,SAAiBK;GACjB,IAAImD,YAAWR,QAAQU,IAAK1D,IAAI,GAAC;IAC/B,IAAI2D,QAAOC,IAAIC,aAAc,cAC3BC,QAAOC,KACL,qDAAqD/D,KAAI,qCAC3D;IACD,OACMgE;GAAQ;GAEjB,IAAIL,QAAOC,IAAIC,aAAc;SACtB,MAAAI,YAAkBT,YAAWR,QAAQkB,OAAQ,GAChD,IACElE,KAAImE,WAAYF,SAAQjE,IACK,KAA7BiE,SAAQjE,KAAKmE,WAAYnE,IAAI,GAE7B8D,QAAOC,KACL,oDAAoDE,SAAQjE,KAAK,SAAUA,KAAI,oEACjF;GAAA;GAIN,MAAAoE,OAAa,IAAIrC,IAAIyB,YAAWR,OAAQ;GACxCoB,KAAIC,IAAKrE,MAAMK,OAAO;GACtBmD,YAAWR,UAAWoB;GACtBnB,OAAO;GACP,KAAK,MAAAqB,KAAWb,sBAAqBT,SAAUsB,EAAClE,MAAOC,OAAO;GAAE,aACzD;IACL,MAAAkE,QAAc,IAAIxC,IAAIyB,YAAWR,OAAQ;IACzCuB,MAAKlB,OAAQrD,IAAI;IACjBwD,YAAWR,UAAWuB;IACtBtB,OAAO;IACP,KAAK,MAAAuB,OAAWf,sBAAqBT,SAAUsB,IAAChE,QAASN,IAAI;GAAE;EAChE;EACFyC,EAAA,KAAAQ;EAAAR,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAnCH,MAAA9B,WAAiB2C;CAqCf,IAAAmB;CAAA,IAAAhC,EAAA,OAAAE,OAAAC,IAAA,2BAAA,GAAA;EAIA6B,WAAMjB,YAAWR;EAAQP,EAAA,KAAAgC;CAAA,OAAAA,KAAAhC,EAAA;CAF3B,MAAA7B,cAAoB6D;CAEa,IAAAC;CAAA,IAAAjC,EAAA,OAAAE,OAAAC,IAAA,2BAAA,GAAA;EAI/B8B,MAAA3D,aAAA;GACA0C,sBAAqBT,QAAQI,IAAKrC,QAAQ;GAAC,aACpC;IACL0C,sBAAqBT,QAAQK,OAAQtC,QAAQ;GAAC;EAC/C;EACF0B,EAAA,KAAAiC;CAAA,OAAAA,KAAAjC,EAAA;CAPD,MAAAzB,qBAA2B0D;CAS3B,MAAAC,gBAAsBpF,OAAwC,IAAI;CAClE,MAAAqF,oBAA0BrF,OAAsB,IAAI;CACpD,MAAA,EAAA0D,QAAA4B,YAAA/D,WAAAI,kBACEsB,sBAAsB;CAAE,IAAAsC;CAAA,IAAArC,EAAA,OAAAoC,YAAA;EAGxBC,MAAAC,QAAA1D,SAAA;GACE,IAAIA,SAAS,MAAI;IACf,IAAIuD,kBAAiB5B,YAAahD,QAAI;IACtC2E,cAAa3B,UAAW;IACxB4B,kBAAiB5B,UAAW;IAC5B6B,WAAW;IAAC;GAAA;GAGd,MAAAG,OAAaL,cAAa3B;GAC1B,IACE4B,kBAAiB5B,YAAahD,UAC9BgF,SAAS,QACTA,KAAIxE,cAAea,KAAIb,aACvBwE,KAAIvE,sBAAuBY,KAAIZ,mBAAkB;GAInDkE,cAAa3B,UAAW3B;GACxBuD,kBAAiB5B,UAAWhD;GAC5B6E,WAAW;EAAC;EACbpC,EAAA,KAAAoC;EAAApC,EAAA,KAAAqC;CAAA,OAAAA,KAAArC,EAAA;CArBH,MAAArB,gBAAsB0D;CAuBpB,IAAAG;CAAA,IAAAxC,EAAA,OAAAE,OAAAC,IAAA,2BAAA,GAAA;EAIAqC,WAAMN,cAAa3B;EAAQP,EAAA,KAAAwC;CAAA,OAAAA,KAAAxC,EAAA;CAF7B,MAAAxB,gBAAsBgE;CAEa,IAAAC;CAAA,IAAAzC,EAAA,OAAA9B,YAAA8B,EAAA,QAAA3B,aAAA2B,EAAA,QAAAvB,eAAA;EAG1BgE,KAAA;GAAAvE;GAAAC;GAAAE;GAAAE;GAAAC;GAAAC;EAOP;EAACuB,EAAA,KAAA9B;EAAA8B,EAAA,MAAA3B;EAAA2B,EAAA,MAAAvB;EAAAuB,EAAA,MAAAyC;CAAA,OAAAA,KAAAzC,EAAA;CARH,MAAA0C,QACSD;CAgBP,IAAAE;CAAA,IAAA3C,EAAA,QAAArB,eAAA;EAGOgE,KAAA,EAAAhE,cAAgB;EAACqB,EAAA,MAAArB;EAAAqB,EAAA,MAAA2C;CAAA,OAAAA,KAAA3C,EAAA;CAD1B,MAAA4C,mBACSD;CAEP,IAAAE;CAAA,IAAA7C,EAAA,QAAA4C,oBAAA5C,EAAA,QAAAF,UAAA;EAIE+C,MAAA,oBAAA,iCAAA,UAAA;GAAkDD,OAAAA;GAC/C9C;EACH,CAAA;EAA4CE,EAAA,MAAA4C;EAAA5C,EAAA,MAAAF;EAAAE,EAAA,MAAA6C;CAAA,OAAAA,MAAA7C,EAAA;CAAA,IAAA8C;CAAA,IAAA9C,EAAA,QAAA6C,OAAA7C,EAAA,QAAA0C,OAAA;EAH9CI,MAAA,oBAAA,0BAAA,UAAA;GAA2CJ;aACzCG;EAGF,CAAA;EAAqC7C,EAAA,MAAA6C;EAAA7C,EAAA,MAAA0C;EAAA1C,EAAA,MAAA8C;CAAA,OAAAA,MAAA9C,EAAA;CAAA,OAJrC8C;AAIqC;;;;;;;;;;;;;;;;;;;;;;;;;AA4BzC,MAAalD,uCAETK,OAAA;CAAA,MAAAD,IAAAvD,EAAA,CAAA;CAAC,MAAA,EAAAqD,aAAAG;CAGH,IAFyB9C,uCAErB4F,GAAgB;EAAA,IAAAzC;EAAA,IAAAN,EAAA,OAAAF,UAAA;GACXQ,KAAA,oBAAC,yBAAD,EAA0BR,SAAF,CAAA;GAAqCE,EAAA,KAAAF;GAAAE,EAAA,KAAAM;EAAA,OAAAA,KAAAN,EAAA;EAAA,OAA7DM;CAA6D;CACrE,IAAAA;CAAA,IAAAN,EAAA,OAAAF,UAAA;EAGCQ,KAAA,oBAAC,6BAAD,EAAA,UACE,oBAAC,yBAAD,EAA0BR,SAAF,CAAA,EADE,CAAA;EAEEE,EAAA,KAAAF;EAAAE,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,OAF9BM;AAE8B;AAIlCV,oCAAoCoD,cAClC;AAxKE,SAAAzB,QAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"detectTrigger.js","names":[],"sources":["../../../../src/primitives/composer/trigger/detectTrigger.ts"],"sourcesContent":["const WHITESPACE_RE = /\\s/u;\n\n/**\n * Detect a trigger character in text relative to the cursor position.\n *\n * @internal Exported for testing and for trigger resources.\n */\nexport function detectTrigger(\n text: string,\n triggerChar: string,\n cursorPosition: number,\n): {\n query: string;\n offset: number;\n} | null {\n // Only consider text up to the cursor\n const textUpToCursor = text.slice(0, cursorPosition);\n\n // Search backwards from cursor for the trigger character.\n // Stop at any whitespace during scan — trigger must be contiguous with cursor.\n for (let i = textUpToCursor.length - 1; i >= 0; i--) {\n const char = textUpToCursor[i]!;\n\n if (WHITESPACE_RE.test(char)) return null;\n\n if (textUpToCursor.startsWith(triggerChar, i)) {\n // Trigger must be preceded by whitespace or be at start of text\n if (i > 0 && !WHITESPACE_RE.test(textUpToCursor[i - 1]!)) continue;\n\n const query = textUpToCursor.slice(i + triggerChar.length);\n\n return { query, offset: i };\n }\n }\n\n return null;\n}\n"],"mappings":";AAAA,MAAM,gBAAgB;;;;;;AAOtB,SAAgB,cACd,MACA,aACA,gBAIO;CAEP,MAAM,iBAAiB,KAAK,MAAM,GAAG,cAAc;CAInD,KAAK,IAAI,IAAI,eAAe,SAAS,GAAG,KAAK,GAAG,KAAK;EACnD,MAAM,OAAO,eAAe;EAE5B,IAAI,cAAc,KAAK,IAAI,GAAG,OAAO;EAErC,IAAI,eAAe,WAAW,aAAa,CAAC,GAAG;GAE7C,IAAI,IAAI,KAAK,CAAC,cAAc,KAAK,eAAe,IAAI,EAAG,GAAG;GAI1D,OAAO;IAAE,OAFK,eAAe,MAAM,IAAI,YAAY,MAEtC;IAAG,QAAQ;GAAE;EAC5B;CACF;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"detectTrigger.js","names":["WHITESPACE_RE","detectTrigger","text","triggerChar","cursorPosition","query","offset","textUpToCursor","slice","i","length","char","test","startsWith"],"sources":["../../../../src/primitives/composer/trigger/detectTrigger.ts"],"sourcesContent":["const WHITESPACE_RE = /\\s/u;\n\n/**\n * Detect a trigger character in text relative to the cursor position.\n *\n * @internal Exported for testing and for trigger resources.\n */\nexport function detectTrigger(\n text: string,\n triggerChar: string,\n cursorPosition: number,\n): {\n query: string;\n offset: number;\n} | null {\n // Only consider text up to the cursor\n const textUpToCursor = text.slice(0, cursorPosition);\n\n // Search backwards from cursor for the trigger character.\n // Stop at any whitespace during scan — trigger must be contiguous with cursor.\n for (let i = textUpToCursor.length - 1; i >= 0; i--) {\n const char = textUpToCursor[i]!;\n\n if (WHITESPACE_RE.test(char)) return null;\n\n if (textUpToCursor.startsWith(triggerChar, i)) {\n // Trigger must be preceded by whitespace or be at start of text\n if (i > 0 && !WHITESPACE_RE.test(textUpToCursor[i - 1]!)) continue;\n\n const query = textUpToCursor.slice(i + triggerChar.length);\n\n return { query, offset: i };\n }\n }\n\n return null;\n}\n"],"mappings":";AAAA,MAAMA,gBAAgB;;;;;;AAOtB,SAAgBC,cACdC,MACAC,aACAC,gBAIO;CAEP,MAAMG,iBAAiBL,KAAKM,MAAM,GAAGJ,cAAc;CAInD,KAAK,IAAIK,IAAIF,eAAeG,SAAS,GAAGD,KAAK,GAAGA,KAAK;EACnD,MAAME,OAAOJ,eAAeE;EAE5B,IAAIT,cAAcY,KAAKD,IAAI,GAAG,OAAO;EAErC,IAAIJ,eAAeM,WAAWV,aAAaM,CAAC,GAAG;GAE7C,IAAIA,IAAI,KAAK,CAACT,cAAcY,KAAKL,eAAeE,IAAI,EAAG,GAAG;GAI1D,OAAO;IAAEJ,OAFKE,eAAeC,MAAMC,IAAIN,YAAYO,MAE1CL;IAAOC,QAAQG;GAAE;EAC5B;CACF;CAEA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Base"],"sources":["../../../../src/primitives/composer/trigger/index.ts"],"sourcesContent":["export {\n ComposerPrimitiveTriggerPopoverRoot,\n useTriggerPopoverRootContext,\n useTriggerPopoverRootContextOptional,\n useTriggerPopoverTriggers,\n useTriggerPopoverTriggersOptional,\n type RegisteredTrigger,\n type TriggerPopoverRootContextValue,\n} from \"./TriggerPopoverRootContext\";\nexport {\n useTriggerPopoverScopeContext,\n useTriggerPopoverScopeContextOptional,\n} from \"./TriggerPopover\";\nexport {\n ComposerPrimitiveTriggerPopoverCategories,\n ComposerPrimitiveTriggerPopoverCategoryItem,\n} from \"./TriggerPopoverCategories\";\nexport {\n ComposerPrimitiveTriggerPopoverItems,\n ComposerPrimitiveTriggerPopoverItem,\n} from \"./TriggerPopoverItems\";\nexport { ComposerPrimitiveTriggerPopoverBack } from \"./TriggerPopoverBack\";\nexport type { TriggerBehavior } from \"./triggerSelectionResource\";\n\nimport { ComposerPrimitiveTriggerPopover as Base } from \"./TriggerPopover\";\nimport { ComposerPrimitiveTriggerPopoverAction } from \"./TriggerPopoverAction\";\nimport { ComposerPrimitiveTriggerPopoverDirective } from \"./TriggerPopoverDirective\";\n\nexport const ComposerPrimitiveTriggerPopover = Object.assign(Base, {\n Directive: ComposerPrimitiveTriggerPopoverDirective,\n Action: ComposerPrimitiveTriggerPopoverAction,\n});\n"],"mappings":";;;;;;;;AA4BA,MAAa,kCAAkC,OAAO,OAAOA,mCAAM;CACjE,WAAW;CACX,QAAQ;AACV,CAAC"}
1
+ {"version":3,"file":"index.js","names":["ComposerPrimitiveTriggerPopoverRoot","useTriggerPopoverRootContext","useTriggerPopoverRootContextOptional","useTriggerPopoverTriggers","useTriggerPopoverTriggersOptional","RegisteredTrigger","TriggerPopoverRootContextValue","useTriggerPopoverScopeContext","useTriggerPopoverScopeContextOptional","ComposerPrimitiveTriggerPopoverCategories","ComposerPrimitiveTriggerPopoverCategoryItem","ComposerPrimitiveTriggerPopoverItems","ComposerPrimitiveTriggerPopoverItem","ComposerPrimitiveTriggerPopoverBack","TriggerBehavior","ComposerPrimitiveTriggerPopover","Base","ComposerPrimitiveTriggerPopoverAction","ComposerPrimitiveTriggerPopoverDirective","Object","assign","Directive","Action"],"sources":["../../../../src/primitives/composer/trigger/index.ts"],"sourcesContent":["export {\n ComposerPrimitiveTriggerPopoverRoot,\n useTriggerPopoverRootContext,\n useTriggerPopoverRootContextOptional,\n useTriggerPopoverTriggers,\n useTriggerPopoverTriggersOptional,\n type RegisteredTrigger,\n type TriggerPopoverRootContextValue,\n} from \"./TriggerPopoverRootContext\";\nexport {\n useTriggerPopoverScopeContext,\n useTriggerPopoverScopeContextOptional,\n} from \"./TriggerPopover\";\nexport {\n ComposerPrimitiveTriggerPopoverCategories,\n ComposerPrimitiveTriggerPopoverCategoryItem,\n} from \"./TriggerPopoverCategories\";\nexport {\n ComposerPrimitiveTriggerPopoverItems,\n ComposerPrimitiveTriggerPopoverItem,\n} from \"./TriggerPopoverItems\";\nexport { ComposerPrimitiveTriggerPopoverBack } from \"./TriggerPopoverBack\";\nexport type { TriggerBehavior } from \"./triggerSelectionResource\";\n\nimport { ComposerPrimitiveTriggerPopover as Base } from \"./TriggerPopover\";\nimport { ComposerPrimitiveTriggerPopoverAction } from \"./TriggerPopoverAction\";\nimport { ComposerPrimitiveTriggerPopoverDirective } from \"./TriggerPopoverDirective\";\n\nexport const ComposerPrimitiveTriggerPopover = Object.assign(Base, {\n Directive: ComposerPrimitiveTriggerPopoverDirective,\n Action: ComposerPrimitiveTriggerPopoverAction,\n});\n"],"mappings":";;;;;;;;AA4BA,MAAae,kCAAkCI,OAAOC,OAAOJ,mCAAM;CACjEK,WAAWH;CACXI,QAAQL;AACV,CAAC"}