@assistant-ui/react 0.12.25 → 0.12.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/augmentations.d.ts.map +1 -1
- package/dist/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/client/InMemoryThreadList.js +1 -0
- package/dist/client/InMemoryThreadList.js.map +1 -1
- package/dist/client/SingleThreadList.d.ts.map +1 -1
- package/dist/client/SingleThreadList.js +1 -0
- package/dist/client/SingleThreadList.js.map +1 -1
- package/dist/context/providers/MessageProvider.d.ts +1 -1
- package/dist/context/providers/MessageProvider.d.ts.map +1 -1
- package/dist/context/react/ThreadViewportContext.d.ts +3 -3
- package/dist/context/react/ThreadViewportContext.d.ts.map +1 -1
- package/dist/context/react/utils/createContextHook.d.ts +1 -1
- package/dist/context/react/utils/createContextHook.d.ts.map +1 -1
- package/dist/context/react/utils/createContextHook.js.map +1 -1
- package/dist/context/react/utils/createContextStoreHook.d.ts +1 -1
- package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
- package/dist/context/react/utils/createStateHookForRuntime.d.ts +1 -1
- package/dist/context/react/utils/createStateHookForRuntime.d.ts.map +1 -1
- package/dist/context/react/utils/createStateHookForRuntime.js +1 -0
- package/dist/context/react/utils/createStateHookForRuntime.js.map +1 -1
- package/dist/devtools/DevToolsHooks.d.ts +1 -1
- package/dist/devtools/DevToolsHooks.d.ts.map +1 -1
- package/dist/devtools/DevToolsHooks.js +4 -0
- package/dist/devtools/DevToolsHooks.js.map +1 -1
- package/dist/index.d.ts +3 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -32
- package/dist/index.js.map +1 -1
- package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +3 -3
- package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
- package/dist/legacy-runtime/cloud/auiV0.d.ts +3 -3
- package/dist/legacy-runtime/cloud/auiV0.d.ts.map +1 -1
- package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
- package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts +1 -1
- package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/AssistantContext.d.ts +1 -1
- package/dist/legacy-runtime/hooks/AssistantContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/AttachmentContext.d.ts +1 -1
- package/dist/legacy-runtime/hooks/AttachmentContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/ComposerContext.d.ts +1 -1
- package/dist/legacy-runtime/hooks/ComposerContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/MessageContext.d.ts +1 -1
- package/dist/legacy-runtime/hooks/MessageContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/MessagePartContext.d.ts +1 -1
- package/dist/legacy-runtime/hooks/MessagePartContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/ThreadContext.d.ts +1 -1
- package/dist/legacy-runtime/hooks/ThreadContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts +1 -1
- package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts +3 -3
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +14 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
- package/dist/model-context/frame/useAssistantFrameHost.d.ts +1 -1
- package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -1
- package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -1
- package/dist/model-context/makeAssistantVisible.d.ts +1 -1
- package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarCopy.d.ts +1 -1
- package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarEdit.d.ts +1 -1
- package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +1 -1
- package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarReload.d.ts +1 -1
- package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarRoot.d.ts +1 -1
- package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarSpeak.d.ts +1 -1
- package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +1 -1
- package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +5 -2
- package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreContent.js +3 -2
- package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +7 -4
- package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreItem.js +2 -2
- package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +7 -4
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +2 -2
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +7 -4
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +2 -2
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +1 -1
- package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalAnchor.js +1 -1
- package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.js +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +1 -1
- package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalTrigger.js +1 -1
- package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
- package/dist/primitives/attachment/AttachmentRemove.d.ts +1 -1
- package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentRoot.d.ts +1 -1
- package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentRoot.js +1 -1
- package/dist/primitives/attachment/AttachmentRoot.js.map +1 -1
- package/dist/primitives/attachment/AttachmentThumb.d.ts +1 -1
- package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentThumb.js +1 -1
- package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerNext.d.ts +1 -1
- package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +1 -1
- package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +1 -1
- package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerRoot.js +1 -1
- package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -1
- package/dist/primitives/composer/ComposerAddAttachment.d.ts +1 -1
- package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +1 -1
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerAttachmentDropzone.js +3 -2
- package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
- package/dist/primitives/composer/ComposerCancel.d.ts +1 -1
- package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerDictationTranscript.d.ts +1 -1
- package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerDictationTranscript.js +1 -1
- package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
- package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerInput.js +28 -0
- package/dist/primitives/composer/ComposerInput.js.map +1 -1
- package/dist/primitives/composer/ComposerInputPluginContext.d.ts +11 -3
- package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerInputPluginContext.js +13 -9
- package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -1
- package/dist/primitives/composer/ComposerRoot.d.ts +1 -1
- package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerSend.d.ts +1 -1
- package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts +60 -0
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopover.js +108 -0
- package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +31 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.js +39 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverBack.js +3 -3
- package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +11 -9
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +28 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +37 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverItems.js +9 -6
- package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +16 -17
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverResource.js +53 -248
- package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +60 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +117 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -0
- package/dist/primitives/composer/trigger/detectTrigger.js +1 -1
- package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -1
- package/dist/primitives/composer/trigger/index.d.ts +16 -3
- package/dist/primitives/composer/trigger/index.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/index.js +9 -2
- package/dist/primitives/composer/trigger/index.js.map +1 -1
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +22 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.js +17 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +45 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.js +94 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +31 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.js +94 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +42 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.js +62 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -0
- package/dist/primitives/composer.d.ts +8 -13
- package/dist/primitives/composer.d.ts.map +1 -1
- package/dist/primitives/composer.js +7 -17
- package/dist/primitives/composer.js.map +1 -1
- package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +14 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.js +7 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -0
- package/dist/primitives/error/ErrorMessage.d.ts +1 -1
- package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
- package/dist/primitives/error/ErrorMessage.js +1 -1
- package/dist/primitives/error/ErrorMessage.js.map +1 -1
- package/dist/primitives/error/ErrorRoot.d.ts +1 -1
- package/dist/primitives/error/ErrorRoot.d.ts.map +1 -1
- package/dist/primitives/error/ErrorRoot.js +1 -1
- package/dist/primitives/error/ErrorRoot.js.map +1 -1
- package/dist/primitives/message/MessageError.d.ts +1 -1
- package/dist/primitives/message/MessageError.d.ts.map +1 -1
- package/dist/primitives/message/MessagePartsGrouped.d.ts +1 -1
- package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
- package/dist/primitives/message/MessageRoot.d.ts +1 -1
- package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
- package/dist/primitives/messagePart/MessagePartImage.d.ts +1 -1
- package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -1
- package/dist/primitives/messagePart/MessagePartImage.js +2 -1
- package/dist/primitives/messagePart/MessagePartImage.js.map +1 -1
- package/dist/primitives/messagePart/MessagePartInProgress.d.ts +1 -1
- package/dist/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
- package/dist/primitives/messagePart/MessagePartText.d.ts +2 -2
- package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
- package/dist/primitives/queueItem/QueueItemRemove.d.ts +1 -1
- package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -1
- package/dist/primitives/queueItem/QueueItemSteer.d.ts +1 -1
- package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -1
- package/dist/primitives/suggestion/SuggestionDescription.d.ts +1 -1
- package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -1
- package/dist/primitives/suggestion/SuggestionDescription.js +1 -1
- package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -1
- package/dist/primitives/suggestion/SuggestionTitle.d.ts +1 -1
- package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -1
- package/dist/primitives/suggestion/SuggestionTitle.js +1 -1
- package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -1
- package/dist/primitives/suggestion/SuggestionTrigger.d.ts +1 -1
- package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadRoot.d.ts +1 -1
- package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadRoot.js +1 -1
- package/dist/primitives/thread/ThreadRoot.js.map +1 -1
- package/dist/primitives/thread/ThreadScrollToBottom.d.ts +1 -1
- package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadSuggestion.d.ts +1 -1
- package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadSuggestion.js +0 -2
- package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
- package/dist/primitives/thread/ThreadViewport.d.ts +1 -1
- package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadViewportFooter.d.ts +1 -1
- package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
- package/dist/primitives/threadList/ThreadListNew.d.ts +1 -1
- package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
- package/dist/primitives/threadList/ThreadListRoot.d.ts +1 -1
- package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -1
- package/dist/primitives/threadList/ThreadListRoot.js +1 -1
- package/dist/primitives/threadList/ThreadListRoot.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +1 -1
- package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +1 -1
- package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.js +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +1 -1
- package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +1 -1
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +5 -2
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +3 -2
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +7 -4
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +2 -2
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +7 -4
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +2 -2
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +7 -4
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +2 -2
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
- package/dist/unstable/useMentionAdapter.d.ts +80 -0
- package/dist/unstable/useMentionAdapter.d.ts.map +1 -0
- package/dist/unstable/useMentionAdapter.js +129 -0
- package/dist/unstable/useMentionAdapter.js.map +1 -0
- package/dist/unstable/useSlashCommandAdapter.d.ts +32 -17
- package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
- package/dist/unstable/useSlashCommandAdapter.js +56 -32
- package/dist/unstable/useSlashCommandAdapter.js.map +1 -1
- package/dist/utils/Primitive.d.ts +6 -4
- package/dist/utils/Primitive.d.ts.map +1 -1
- package/dist/utils/Primitive.js +15 -8
- package/dist/utils/Primitive.js.map +1 -1
- package/dist/utils/createActionButton.d.ts +1 -1
- package/dist/utils/createActionButton.d.ts.map +1 -1
- package/dist/utils/hooks/useManagedRef.d.ts +1 -1
- package/dist/utils/hooks/useManagedRef.d.ts.map +1 -1
- package/dist/utils/hooks/useManagedRef.js.map +1 -1
- package/dist/utils/json/is-json.d.ts +1 -1
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/smooth/SmoothContext.d.ts +2 -2
- package/dist/utils/smooth/SmoothContext.d.ts.map +1 -1
- package/dist/utils/smooth/SmoothContext.js.map +1 -1
- package/package.json +9 -9
- package/src/augmentations.ts +2 -0
- package/src/client/InMemoryThreadList.ts +1 -0
- package/src/client/SingleThreadList.ts +1 -0
- package/src/context/providers/MessageProvider.tsx +1 -1
- package/src/context/providers/ThreadViewportProvider.tsx +1 -1
- package/src/context/react/ThreadViewportContext.ts +3 -3
- package/src/context/react/utils/createContextHook.ts +1 -1
- package/src/context/react/utils/createContextStoreHook.ts +2 -2
- package/src/context/react/utils/createStateHookForRuntime.ts +2 -1
- package/src/devtools/DevToolsHooks.ts +5 -1
- package/src/index.ts +27 -56
- package/src/legacy-runtime/AssistantRuntimeProvider.tsx +3 -3
- package/src/legacy-runtime/cloud/auiV0.ts +6 -3
- package/src/legacy-runtime/cloud/useCloudThreadListRuntime.ts +1 -1
- package/src/legacy-runtime/hooks/AssistantContext.ts +1 -1
- package/src/legacy-runtime/hooks/AttachmentContext.ts +1 -1
- package/src/legacy-runtime/hooks/ComposerContext.ts +1 -1
- package/src/legacy-runtime/hooks/MessageContext.ts +1 -1
- package/src/legacy-runtime/hooks/MessagePartContext.ts +1 -1
- package/src/legacy-runtime/hooks/ThreadContext.ts +1 -1
- package/src/legacy-runtime/hooks/ThreadListItemContext.ts +1 -1
- package/src/legacy-runtime/runtime-cores/assistant-transport/commandQueue.ts +1 -1
- package/src/legacy-runtime/runtime-cores/assistant-transport/types.ts +2 -2
- package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.ts +20 -4
- package/src/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.test.ts +8 -2
- package/src/model-context/frame/useAssistantFrameHost.ts +1 -1
- package/src/model-context/makeAssistantVisible.tsx +3 -3
- package/src/primitives/actionBar/ActionBarCopy.tsx +1 -1
- package/src/primitives/actionBar/ActionBarEdit.ts +2 -2
- package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +1 -1
- package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +1 -1
- package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +1 -1
- package/src/primitives/actionBar/ActionBarReload.ts +2 -2
- package/src/primitives/actionBar/ActionBarRoot.tsx +1 -1
- package/src/primitives/actionBar/ActionBarSpeak.ts +2 -2
- package/src/primitives/actionBar/ActionBarStopSpeaking.tsx +1 -1
- package/src/primitives/actionBarMore/ActionBarMoreContent.tsx +10 -4
- package/src/primitives/actionBarMore/ActionBarMoreItem.tsx +7 -7
- package/src/primitives/actionBarMore/ActionBarMoreRoot.tsx +2 -2
- package/src/primitives/actionBarMore/ActionBarMoreSeparator.tsx +7 -5
- package/src/primitives/actionBarMore/ActionBarMoreTrigger.tsx +7 -7
- package/src/primitives/assistantModal/AssistantModalAnchor.tsx +6 -2
- package/src/primitives/assistantModal/AssistantModalContent.tsx +6 -2
- package/src/primitives/assistantModal/AssistantModalRoot.tsx +2 -2
- package/src/primitives/assistantModal/AssistantModalTrigger.tsx +6 -2
- package/src/primitives/attachment/AttachmentRemove.ts +2 -2
- package/src/primitives/attachment/AttachmentRoot.tsx +5 -1
- package/src/primitives/attachment/AttachmentThumb.tsx +5 -1
- package/src/primitives/branchPicker/BranchPickerNext.ts +2 -2
- package/src/primitives/branchPicker/BranchPickerPrevious.ts +2 -2
- package/src/primitives/branchPicker/BranchPickerRoot.tsx +5 -1
- package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.ts +2 -2
- package/src/primitives/chainOfThought/ChainOfThoughtRoot.tsx +5 -1
- package/src/primitives/composer/ComposerAddAttachment.ts +2 -2
- package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +125 -0
- package/src/primitives/composer/ComposerAttachmentDropzone.tsx +11 -8
- package/src/primitives/composer/ComposerCancel.ts +2 -2
- package/src/primitives/composer/ComposerDictationTranscript.tsx +5 -1
- package/src/primitives/composer/ComposerInput.tsx +33 -1
- package/src/primitives/composer/ComposerInputPluginContext.tsx +37 -24
- package/src/primitives/composer/ComposerRoot.tsx +1 -1
- package/src/primitives/composer/ComposerSend.ts +2 -2
- package/src/primitives/composer/trigger/TriggerPopover.tsx +207 -0
- package/src/primitives/composer/trigger/TriggerPopoverAction.tsx +61 -0
- package/src/primitives/composer/trigger/TriggerPopoverBack.tsx +4 -3
- package/src/primitives/composer/trigger/TriggerPopoverCategories.tsx +14 -17
- package/src/primitives/composer/trigger/TriggerPopoverDirective.tsx +57 -0
- package/src/primitives/composer/trigger/TriggerPopoverItems.tsx +44 -40
- package/src/primitives/composer/trigger/TriggerPopoverResource.ts +76 -315
- package/src/primitives/composer/trigger/TriggerPopoverRootContext.tsx +212 -0
- package/src/primitives/composer/trigger/detectTrigger.test.ts +36 -0
- package/src/primitives/composer/trigger/detectTrigger.ts +1 -1
- package/src/primitives/composer/trigger/index.ts +21 -5
- package/src/primitives/composer/trigger/triggerDetectionResource.ts +43 -0
- package/src/primitives/composer/trigger/triggerKeyboardResource.ts +151 -0
- package/src/primitives/composer/trigger/triggerNavigationResource.ts +145 -0
- package/src/primitives/composer/trigger/triggerSelectionResource.ts +122 -0
- package/src/primitives/composer.ts +8 -18
- package/src/primitives/dropdownMenuRenderPrimitives.test.tsx +64 -0
- package/src/primitives/dropdownMenuRenderPrimitives.ts +15 -0
- package/src/primitives/error/ErrorMessage.tsx +5 -1
- package/src/primitives/error/ErrorRoot.tsx +5 -1
- package/src/primitives/message/MessageError.ts +1 -1
- package/src/primitives/message/MessagePartsGrouped.tsx +1 -1
- package/src/primitives/message/MessageRoot.tsx +1 -1
- package/src/primitives/messagePart/MessagePartImage.tsx +6 -1
- package/src/primitives/messagePart/MessagePartInProgress.ts +1 -1
- package/src/primitives/messagePart/MessagePartText.tsx +3 -3
- package/src/primitives/queueItem/QueueItemRemove.ts +2 -2
- package/src/primitives/queueItem/QueueItemSteer.ts +2 -2
- package/src/primitives/suggestion/SuggestionDescription.tsx +5 -1
- package/src/primitives/suggestion/SuggestionTitle.tsx +5 -1
- package/src/primitives/suggestion/SuggestionTrigger.ts +2 -2
- package/src/primitives/thread/ThreadRoot.tsx +5 -1
- package/src/primitives/thread/ThreadScrollToBottom.ts +2 -2
- package/src/primitives/thread/ThreadSuggestion.ts +2 -4
- package/src/primitives/thread/ThreadViewport.tsx +1 -1
- package/src/primitives/thread/ThreadViewportFooter.tsx +1 -1
- package/src/primitives/threadList/ThreadListNew.tsx +1 -1
- package/src/primitives/threadList/ThreadListRoot.tsx +5 -1
- package/src/primitives/threadListItem/ThreadListItemArchive.ts +2 -2
- package/src/primitives/threadListItem/ThreadListItemDelete.ts +2 -2
- package/src/primitives/threadListItem/ThreadListItemRoot.tsx +5 -1
- package/src/primitives/threadListItem/ThreadListItemTrigger.ts +2 -2
- package/src/primitives/threadListItem/ThreadListItemUnarchive.ts +2 -2
- package/src/primitives/threadListItemMore/ThreadListItemMoreContent.tsx +10 -4
- package/src/primitives/threadListItemMore/ThreadListItemMoreItem.tsx +7 -7
- package/src/primitives/threadListItemMore/ThreadListItemMoreRoot.tsx +2 -2
- package/src/primitives/threadListItemMore/ThreadListItemMoreSeparator.tsx +7 -5
- package/src/primitives/threadListItemMore/ThreadListItemMoreTrigger.tsx +7 -7
- package/src/tests/DataRenderers.test.ts +174 -41
- package/src/unstable/useMentionAdapter.ts +220 -0
- package/src/unstable/useSlashCommandAdapter.ts +79 -50
- package/src/utils/Primitive.test.tsx +7 -1
- package/src/utils/Primitive.tsx +49 -16
- package/src/utils/createActionButton.tsx +3 -3
- package/src/utils/hooks/useManagedRef.ts +2 -2
- package/src/utils/json/is-json.ts +1 -1
- package/src/utils/smooth/SmoothContext.tsx +5 -5
- package/dist/primitives/composer/mention/ComposerMentionContext.d.ts +0 -25
- package/dist/primitives/composer/mention/ComposerMentionContext.d.ts.map +0 -1
- package/dist/primitives/composer/mention/ComposerMentionContext.js +0 -74
- package/dist/primitives/composer/mention/ComposerMentionContext.js.map +0 -1
- package/dist/primitives/composer/mention/index.d.ts +0 -6
- package/dist/primitives/composer/mention/index.d.ts.map +0 -1
- package/dist/primitives/composer/mention/index.js +0 -8
- package/dist/primitives/composer/mention/index.js.map +0 -1
- package/dist/primitives/composer/slash-command/ComposerSlashCommandRoot.d.ts +0 -36
- package/dist/primitives/composer/slash-command/ComposerSlashCommandRoot.d.ts.map +0 -1
- package/dist/primitives/composer/slash-command/ComposerSlashCommandRoot.js +0 -36
- package/dist/primitives/composer/slash-command/ComposerSlashCommandRoot.js.map +0 -1
- package/dist/primitives/composer/slash-command/index.d.ts +0 -2
- package/dist/primitives/composer/slash-command/index.d.ts.map +0 -1
- package/dist/primitives/composer/slash-command/index.js +0 -2
- package/dist/primitives/composer/slash-command/index.js.map +0 -1
- package/dist/primitives/composer/trigger/TriggerPopoverContext.d.ts +0 -37
- package/dist/primitives/composer/trigger/TriggerPopoverContext.d.ts.map +0 -1
- package/dist/primitives/composer/trigger/TriggerPopoverContext.js +0 -70
- package/dist/primitives/composer/trigger/TriggerPopoverContext.js.map +0 -1
- package/dist/primitives/composer/trigger/TriggerPopoverPopover.d.ts +0 -26
- package/dist/primitives/composer/trigger/TriggerPopoverPopover.d.ts.map +0 -1
- package/dist/primitives/composer/trigger/TriggerPopoverPopover.js +0 -28
- package/dist/primitives/composer/trigger/TriggerPopoverPopover.js.map +0 -1
- package/dist/unstable/useToolMentionAdapter.d.ts +0 -42
- package/dist/unstable/useToolMentionAdapter.d.ts.map +0 -1
- package/dist/unstable/useToolMentionAdapter.js +0 -65
- package/dist/unstable/useToolMentionAdapter.js.map +0 -1
- package/src/primitives/composer/mention/ComposerMentionContext.tsx +0 -175
- package/src/primitives/composer/mention/index.ts +0 -19
- package/src/primitives/composer/slash-command/ComposerSlashCommandRoot.tsx +0 -76
- package/src/primitives/composer/slash-command/index.ts +0 -1
- package/src/primitives/composer/trigger/TriggerPopoverContext.tsx +0 -129
- package/src/primitives/composer/trigger/TriggerPopoverPopover.tsx +0 -51
- package/src/unstable/useToolMentionAdapter.ts +0 -114
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vitest-environment jsdom
|
|
3
|
+
*/
|
|
4
|
+
import { act } from "react";
|
|
5
|
+
import { createRoot, type Root } from "react-dom/client";
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
7
|
+
import { ComposerPrimitiveAttachmentDropzone } from "./ComposerAttachmentDropzone";
|
|
8
|
+
|
|
9
|
+
const addAttachment = vi.fn<(file: File) => Promise<void>>();
|
|
10
|
+
|
|
11
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
12
|
+
|
|
13
|
+
vi.mock("@assistant-ui/store", async (importOriginal) => {
|
|
14
|
+
const actual = await importOriginal<typeof import("@assistant-ui/store")>();
|
|
15
|
+
return {
|
|
16
|
+
...actual,
|
|
17
|
+
useAui: () => ({
|
|
18
|
+
composer: () => ({
|
|
19
|
+
addAttachment,
|
|
20
|
+
}),
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const createDropEvent = (files: File[]) => {
|
|
26
|
+
const event = new Event("drop", { bubbles: true, cancelable: true });
|
|
27
|
+
Object.defineProperty(event, "dataTransfer", {
|
|
28
|
+
value: { files },
|
|
29
|
+
configurable: true,
|
|
30
|
+
});
|
|
31
|
+
return event;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
describe("ComposerPrimitiveAttachmentDropzone", () => {
|
|
35
|
+
let container: HTMLDivElement;
|
|
36
|
+
let root: Root;
|
|
37
|
+
|
|
38
|
+
beforeEach(async () => {
|
|
39
|
+
addAttachment.mockReset();
|
|
40
|
+
container = document.createElement("div");
|
|
41
|
+
document.body.appendChild(container);
|
|
42
|
+
root = createRoot(container);
|
|
43
|
+
|
|
44
|
+
await act(async () => {
|
|
45
|
+
root.render(
|
|
46
|
+
<ComposerPrimitiveAttachmentDropzone data-testid="dropzone">
|
|
47
|
+
<div>dropzone</div>
|
|
48
|
+
</ComposerPrimitiveAttachmentDropzone>,
|
|
49
|
+
);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
afterEach(async () => {
|
|
54
|
+
await act(async () => {
|
|
55
|
+
root.unmount();
|
|
56
|
+
});
|
|
57
|
+
container.remove();
|
|
58
|
+
vi.restoreAllMocks();
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it("starts all dropped attachments before awaiting completion", async () => {
|
|
62
|
+
const resolvers: Array<() => void> = [];
|
|
63
|
+
addAttachment.mockImplementation(
|
|
64
|
+
() =>
|
|
65
|
+
new Promise<void>((resolve) => {
|
|
66
|
+
resolvers.push(resolve);
|
|
67
|
+
}),
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
const dropzone = container.querySelector("[data-testid='dropzone']");
|
|
71
|
+
expect(dropzone).not.toBeNull();
|
|
72
|
+
|
|
73
|
+
const files = [
|
|
74
|
+
new File(["a"], "first.txt", { type: "text/plain" }),
|
|
75
|
+
new File(["b"], "second.txt", { type: "text/plain" }),
|
|
76
|
+
new File(["c"], "third.txt", { type: "text/plain" }),
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
await act(async () => {
|
|
80
|
+
dropzone!.dispatchEvent(createDropEvent(files));
|
|
81
|
+
await Promise.resolve();
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
expect(addAttachment).toHaveBeenCalledTimes(3);
|
|
85
|
+
expect(addAttachment.mock.calls.map(([file]) => file.name)).toEqual([
|
|
86
|
+
"first.txt",
|
|
87
|
+
"second.txt",
|
|
88
|
+
"third.txt",
|
|
89
|
+
]);
|
|
90
|
+
|
|
91
|
+
for (const resolve of resolvers) resolve();
|
|
92
|
+
|
|
93
|
+
await act(async () => {
|
|
94
|
+
await Promise.resolve();
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it("continues processing other files when one attachment fails", async () => {
|
|
99
|
+
const error = new Error("upload failed");
|
|
100
|
+
const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
|
101
|
+
|
|
102
|
+
addAttachment
|
|
103
|
+
.mockRejectedValueOnce(error)
|
|
104
|
+
.mockResolvedValueOnce(undefined)
|
|
105
|
+
.mockResolvedValueOnce(undefined);
|
|
106
|
+
|
|
107
|
+
const dropzone = container.querySelector("[data-testid='dropzone']");
|
|
108
|
+
expect(dropzone).not.toBeNull();
|
|
109
|
+
|
|
110
|
+
const files = [
|
|
111
|
+
new File(["a"], "first.txt", { type: "text/plain" }),
|
|
112
|
+
new File(["b"], "second.txt", { type: "text/plain" }),
|
|
113
|
+
new File(["c"], "third.txt", { type: "text/plain" }),
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
await act(async () => {
|
|
117
|
+
dropzone!.dispatchEvent(createDropEvent(files));
|
|
118
|
+
await Promise.resolve();
|
|
119
|
+
await Promise.resolve();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
expect(addAttachment).toHaveBeenCalledTimes(3);
|
|
123
|
+
expect(errorSpy).toHaveBeenCalledWith("Failed to add attachment:", error);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
|
|
12
12
|
import { composeEventHandlers } from "@radix-ui/primitive";
|
|
13
13
|
import { Slot } from "radix-ui";
|
|
14
|
-
import React from "react";
|
|
14
|
+
import type React from "react";
|
|
15
15
|
import { useAui } from "@assistant-ui/store";
|
|
16
16
|
|
|
17
17
|
export namespace ComposerPrimitiveAttachmentDropzone {
|
|
@@ -66,13 +66,16 @@ export const ComposerPrimitiveAttachmentDropzone = forwardRef<
|
|
|
66
66
|
if (disabled) return;
|
|
67
67
|
e.preventDefault();
|
|
68
68
|
setIsDragging(false);
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
69
|
+
const files = Array.from(e.dataTransfer.files);
|
|
70
|
+
await Promise.all(
|
|
71
|
+
files.map(async (file) => {
|
|
72
|
+
try {
|
|
73
|
+
await aui.composer().addAttachment(file);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
console.error("Failed to add attachment:", error);
|
|
76
|
+
}
|
|
77
|
+
}),
|
|
78
|
+
);
|
|
76
79
|
},
|
|
77
80
|
[disabled, aui],
|
|
78
81
|
);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
ActionButtonElement,
|
|
5
|
-
ActionButtonProps,
|
|
4
|
+
type ActionButtonElement,
|
|
5
|
+
type ActionButtonProps,
|
|
6
6
|
createActionButton,
|
|
7
7
|
} from "../../utils/createActionButton";
|
|
8
8
|
import { useComposerCancel as useComposerCancelBehavior } from "@assistant-ui/core/react";
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { Primitive } from "../../utils/Primitive";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
type ComponentRef,
|
|
6
|
+
forwardRef,
|
|
7
|
+
type ComponentPropsWithoutRef,
|
|
8
|
+
} from "react";
|
|
5
9
|
import { useAuiState } from "@assistant-ui/store";
|
|
6
10
|
|
|
7
11
|
export namespace ComposerPrimitiveDictationTranscript {
|
|
@@ -4,7 +4,7 @@ import { composeEventHandlers } from "@radix-ui/primitive";
|
|
|
4
4
|
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
5
5
|
import { Slot } from "radix-ui";
|
|
6
6
|
import {
|
|
7
|
-
ClipboardEvent,
|
|
7
|
+
type ClipboardEvent,
|
|
8
8
|
type KeyboardEvent,
|
|
9
9
|
type ReactElement,
|
|
10
10
|
type ReactNode,
|
|
@@ -157,6 +157,8 @@ export const ComposerPrimitiveInput = forwardRef<
|
|
|
157
157
|
) || disabledProp;
|
|
158
158
|
const textareaRef = useRef<HTMLTextAreaElement>(null);
|
|
159
159
|
const ref = useComposedRefs(forwardedRef, textareaRef);
|
|
160
|
+
// suppress text/cursor broadcasts during IME composition
|
|
161
|
+
const compositionRef = useRef(false);
|
|
160
162
|
|
|
161
163
|
useEscapeKeydown((e) => {
|
|
162
164
|
// Only handle ESC if it originated from within this input
|
|
@@ -295,6 +297,10 @@ export const ComposerPrimitiveInput = forwardRef<
|
|
|
295
297
|
onChange,
|
|
296
298
|
(e: React.ChangeEvent<HTMLTextAreaElement>) => {
|
|
297
299
|
if (!aui.composer().getState().isEditing) return;
|
|
300
|
+
const isComposing =
|
|
301
|
+
(e.nativeEvent as { isComposing?: boolean }).isComposing === true ||
|
|
302
|
+
compositionRef.current;
|
|
303
|
+
if (isComposing) return;
|
|
298
304
|
flushResourcesSync(() => {
|
|
299
305
|
aui.composer().setText(e.target.value);
|
|
300
306
|
});
|
|
@@ -307,9 +313,35 @@ export const ComposerPrimitiveInput = forwardRef<
|
|
|
307
313
|
},
|
|
308
314
|
),
|
|
309
315
|
onKeyDown: composeEventHandlers(onKeyDown, handleKeyPress),
|
|
316
|
+
onCompositionStart: composeEventHandlers(
|
|
317
|
+
(rest as { onCompositionStart?: React.CompositionEventHandler })
|
|
318
|
+
.onCompositionStart,
|
|
319
|
+
() => {
|
|
320
|
+
compositionRef.current = true;
|
|
321
|
+
},
|
|
322
|
+
),
|
|
323
|
+
onCompositionEnd: composeEventHandlers(
|
|
324
|
+
(rest as { onCompositionEnd?: React.CompositionEventHandler })
|
|
325
|
+
.onCompositionEnd,
|
|
326
|
+
(e: React.CompositionEvent<HTMLTextAreaElement>) => {
|
|
327
|
+
compositionRef.current = false;
|
|
328
|
+
if (!aui.composer().getState().isEditing) return;
|
|
329
|
+
const target = e.target as HTMLTextAreaElement;
|
|
330
|
+
flushResourcesSync(() => {
|
|
331
|
+
aui.composer().setText(target.value);
|
|
332
|
+
});
|
|
333
|
+
const pos = target.selectionStart ?? target.value.length;
|
|
334
|
+
if (pluginRegistry) {
|
|
335
|
+
for (const plugin of pluginRegistry.getPlugins()) {
|
|
336
|
+
plugin.setCursorPosition(pos);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
),
|
|
310
341
|
onSelect: composeEventHandlers(
|
|
311
342
|
onSelect,
|
|
312
343
|
(e: React.SyntheticEvent<HTMLTextAreaElement>) => {
|
|
344
|
+
if (compositionRef.current) return;
|
|
313
345
|
const target = e.target as HTMLTextAreaElement;
|
|
314
346
|
const pos = target.selectionStart ?? target.value.length;
|
|
315
347
|
if (pluginRegistry) {
|
|
@@ -10,15 +10,10 @@ import {
|
|
|
10
10
|
type FC,
|
|
11
11
|
} from "react";
|
|
12
12
|
|
|
13
|
-
// =============================================================================
|
|
14
|
-
// Plugin interface — any trigger system (mention, slash command, emoji, etc.)
|
|
15
|
-
// registers one of these with the input.
|
|
16
|
-
// =============================================================================
|
|
17
|
-
|
|
18
13
|
/**
|
|
19
14
|
* A plugin that intercepts keyboard events and cursor changes in the composer
|
|
20
|
-
* input. Used by trigger
|
|
21
|
-
*
|
|
15
|
+
* input. Used by trigger popover declarations to handle popover navigation
|
|
16
|
+
* without ComposerInput knowing about specific triggers.
|
|
22
17
|
*/
|
|
23
18
|
export type ComposerInputPlugin = {
|
|
24
19
|
/** Handle a key event. Return true if consumed (stops propagation to other plugins and default behavior). */
|
|
@@ -35,13 +30,21 @@ export type ComposerInputPlugin = {
|
|
|
35
30
|
setCursorPosition(pos: number): void;
|
|
36
31
|
};
|
|
37
32
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
/** Options for registering a plugin. */
|
|
34
|
+
export type ComposerInputPluginRegisterOptions = {
|
|
35
|
+
/**
|
|
36
|
+
* Relative priority. Plugins with higher priority receive events first.
|
|
37
|
+
* @default 0
|
|
38
|
+
*/
|
|
39
|
+
priority?: number;
|
|
40
|
+
};
|
|
42
41
|
|
|
42
|
+
// Ref-based registry: plugins are read imperatively at event time, so register/unregister does not trigger re-renders.
|
|
43
43
|
export type ComposerInputPluginRegistry = {
|
|
44
|
-
register(
|
|
44
|
+
register(
|
|
45
|
+
plugin: ComposerInputPlugin,
|
|
46
|
+
opts?: ComposerInputPluginRegisterOptions,
|
|
47
|
+
): () => void;
|
|
45
48
|
getPlugins(): readonly ComposerInputPlugin[];
|
|
46
49
|
};
|
|
47
50
|
|
|
@@ -63,25 +66,35 @@ export const useComposerInputPluginRegistryOptional =
|
|
|
63
66
|
return useContext(ComposerInputPluginRegistryContext);
|
|
64
67
|
};
|
|
65
68
|
|
|
66
|
-
// =============================================================================
|
|
67
|
-
// Provider
|
|
68
|
-
// =============================================================================
|
|
69
|
-
|
|
70
69
|
export const ComposerInputPluginProvider: FC<{ children: ReactNode }> = ({
|
|
71
70
|
children,
|
|
72
71
|
}) => {
|
|
73
|
-
const pluginsRef = useRef<
|
|
72
|
+
const pluginsRef = useRef<Map<ComposerInputPlugin, number>>(new Map());
|
|
74
73
|
const snapshotRef = useRef<readonly ComposerInputPlugin[]>([]);
|
|
75
74
|
|
|
76
|
-
const
|
|
77
|
-
pluginsRef.current.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
snapshotRef.current = Array.from(pluginsRef.current);
|
|
82
|
-
};
|
|
75
|
+
const refreshSnapshot = useCallback(() => {
|
|
76
|
+
const entries = Array.from(pluginsRef.current.entries());
|
|
77
|
+
// Sort by priority descending; stable insertion order for equal priorities.
|
|
78
|
+
entries.sort((a, b) => b[1] - a[1]);
|
|
79
|
+
snapshotRef.current = entries.map(([plugin]) => plugin);
|
|
83
80
|
}, []);
|
|
84
81
|
|
|
82
|
+
const register = useCallback(
|
|
83
|
+
(
|
|
84
|
+
plugin: ComposerInputPlugin,
|
|
85
|
+
opts?: ComposerInputPluginRegisterOptions,
|
|
86
|
+
) => {
|
|
87
|
+
const priority = opts?.priority ?? 0;
|
|
88
|
+
pluginsRef.current.set(plugin, priority);
|
|
89
|
+
refreshSnapshot();
|
|
90
|
+
return () => {
|
|
91
|
+
pluginsRef.current.delete(plugin);
|
|
92
|
+
refreshSnapshot();
|
|
93
|
+
};
|
|
94
|
+
},
|
|
95
|
+
[refreshSnapshot],
|
|
96
|
+
);
|
|
97
|
+
|
|
85
98
|
const getPlugins = useCallback(
|
|
86
99
|
(): readonly ComposerInputPlugin[] => snapshotRef.current,
|
|
87
100
|
[],
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback } from "react";
|
|
4
4
|
import {
|
|
5
|
-
ActionButtonElement,
|
|
6
|
-
ActionButtonProps,
|
|
5
|
+
type ActionButtonElement,
|
|
6
|
+
type ActionButtonProps,
|
|
7
7
|
createActionButton,
|
|
8
8
|
} from "../../utils/createActionButton";
|
|
9
9
|
import { useComposerSend as useComposerSendBehavior } from "@assistant-ui/core/react";
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useAui, useAuiState } from "@assistant-ui/store";
|
|
4
|
+
import { useResource } from "@assistant-ui/tap/react";
|
|
5
|
+
import type { Unstable_TriggerAdapter } from "@assistant-ui/core";
|
|
6
|
+
import {
|
|
7
|
+
createContext,
|
|
8
|
+
forwardRef,
|
|
9
|
+
useCallback,
|
|
10
|
+
useContext,
|
|
11
|
+
useEffect,
|
|
12
|
+
useId,
|
|
13
|
+
useMemo,
|
|
14
|
+
useRef,
|
|
15
|
+
useState,
|
|
16
|
+
type ComponentPropsWithoutRef,
|
|
17
|
+
type ComponentRef,
|
|
18
|
+
} from "react";
|
|
19
|
+
import { Primitive } from "../../../utils/Primitive";
|
|
20
|
+
import { useComposerInputPluginRegistryOptional } from "../ComposerInputPluginContext";
|
|
21
|
+
import {
|
|
22
|
+
TriggerPopoverResource,
|
|
23
|
+
type TriggerPopoverResourceOutput,
|
|
24
|
+
} from "./TriggerPopoverResource";
|
|
25
|
+
import type { TriggerBehavior } from "./triggerSelectionResource";
|
|
26
|
+
import { useTriggerPopoverRootContext } from "./TriggerPopoverRootContext";
|
|
27
|
+
|
|
28
|
+
const TriggerPopoverScopeContext =
|
|
29
|
+
createContext<TriggerPopoverResourceOutput | null>(null);
|
|
30
|
+
|
|
31
|
+
export const useTriggerPopoverScopeContext = () => {
|
|
32
|
+
const ctx = useContext(TriggerPopoverScopeContext);
|
|
33
|
+
if (!ctx)
|
|
34
|
+
throw new Error(
|
|
35
|
+
"useTriggerPopoverScopeContext must be used within ComposerPrimitive.TriggerPopover",
|
|
36
|
+
);
|
|
37
|
+
return ctx;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export const useTriggerPopoverScopeContextOptional = () =>
|
|
41
|
+
useContext(TriggerPopoverScopeContext);
|
|
42
|
+
|
|
43
|
+
/** Registration API exposed to behavior sub-primitives. */
|
|
44
|
+
export type TriggerBehaviorRegistration = {
|
|
45
|
+
register(behavior: TriggerBehavior): () => void;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const TriggerBehaviorRegistrationContext =
|
|
49
|
+
createContext<TriggerBehaviorRegistration | null>(null);
|
|
50
|
+
|
|
51
|
+
/** Obtain the registration handle from the parent `<TriggerPopover>`. */
|
|
52
|
+
export const useTriggerBehaviorRegistration = () => {
|
|
53
|
+
const ctx = useContext(TriggerBehaviorRegistrationContext);
|
|
54
|
+
if (!ctx)
|
|
55
|
+
throw new Error(
|
|
56
|
+
"TriggerPopover.Directive / TriggerPopover.Action must be rendered inside ComposerPrimitive.TriggerPopover",
|
|
57
|
+
);
|
|
58
|
+
return ctx;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export namespace ComposerPrimitiveTriggerPopover {
|
|
62
|
+
export type Element = ComponentRef<typeof Primitive.div>;
|
|
63
|
+
export type Props = Omit<
|
|
64
|
+
ComponentPropsWithoutRef<typeof Primitive.div>,
|
|
65
|
+
"onSelect"
|
|
66
|
+
> & {
|
|
67
|
+
/** The character(s) that activate this trigger (e.g. `"@"`, `"/"`). Also serves as the trigger identity within the root. */
|
|
68
|
+
readonly char: string;
|
|
69
|
+
/** Adapter providing categories and items. */
|
|
70
|
+
readonly adapter?: Unstable_TriggerAdapter | undefined;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Declares a trigger and renders its popover container. The popover only
|
|
76
|
+
* renders its DOM (and children) when the trigger character is active in the
|
|
77
|
+
* composer input and a behavior sub-primitive has been registered.
|
|
78
|
+
*
|
|
79
|
+
* A behavior is contributed by rendering exactly one of
|
|
80
|
+
* `<TriggerPopover.Directive>` or `<TriggerPopover.Action>` as a child. Without
|
|
81
|
+
* a behavior the trigger stays closed.
|
|
82
|
+
*
|
|
83
|
+
* Must be placed inside `ComposerPrimitive.Unstable_TriggerPopoverRoot`.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```tsx
|
|
87
|
+
* <ComposerPrimitive.Unstable_TriggerPopover
|
|
88
|
+
* char="@"
|
|
89
|
+
* adapter={mentionAdapter}
|
|
90
|
+
* >
|
|
91
|
+
* <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />
|
|
92
|
+
* <ComposerPrimitive.Unstable_TriggerPopoverCategories>
|
|
93
|
+
* {(cats) => cats.map(...)}
|
|
94
|
+
* </ComposerPrimitive.Unstable_TriggerPopoverCategories>
|
|
95
|
+
* <ComposerPrimitive.Unstable_TriggerPopoverItems>
|
|
96
|
+
* {(items) => items.map(...)}
|
|
97
|
+
* </ComposerPrimitive.Unstable_TriggerPopoverItems>
|
|
98
|
+
* </ComposerPrimitive.Unstable_TriggerPopover>
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export const ComposerPrimitiveTriggerPopover = forwardRef<
|
|
102
|
+
ComposerPrimitiveTriggerPopover.Element,
|
|
103
|
+
ComposerPrimitiveTriggerPopover.Props
|
|
104
|
+
>(
|
|
105
|
+
(
|
|
106
|
+
{ char, adapter, "aria-label": ariaLabel, children, ...props },
|
|
107
|
+
forwardedRef,
|
|
108
|
+
) => {
|
|
109
|
+
const aui = useAui();
|
|
110
|
+
const text = useAuiState((s) => s.composer.text);
|
|
111
|
+
const popoverId = useId();
|
|
112
|
+
|
|
113
|
+
// Track in state (for resource reactivity) + ref (dev warning on duplicate registrations).
|
|
114
|
+
const behaviorRef = useRef<TriggerBehavior | null>(null);
|
|
115
|
+
const [behavior, setBehavior] = useState<TriggerBehavior | null>(null);
|
|
116
|
+
const registrationCountRef = useRef(0);
|
|
117
|
+
|
|
118
|
+
const register = useCallback<TriggerBehaviorRegistration["register"]>(
|
|
119
|
+
(next) => {
|
|
120
|
+
registrationCountRef.current += 1;
|
|
121
|
+
if (
|
|
122
|
+
process.env.NODE_ENV !== "production" &&
|
|
123
|
+
registrationCountRef.current > 1
|
|
124
|
+
) {
|
|
125
|
+
console.warn(
|
|
126
|
+
`[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.`,
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
behaviorRef.current = next;
|
|
130
|
+
setBehavior(next);
|
|
131
|
+
return () => {
|
|
132
|
+
registrationCountRef.current = Math.max(
|
|
133
|
+
0,
|
|
134
|
+
registrationCountRef.current - 1,
|
|
135
|
+
);
|
|
136
|
+
if (behaviorRef.current === next) {
|
|
137
|
+
behaviorRef.current = null;
|
|
138
|
+
setBehavior(null);
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
},
|
|
142
|
+
[char],
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
const registration = useMemo<TriggerBehaviorRegistration>(
|
|
146
|
+
() => ({ register }),
|
|
147
|
+
[register],
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
const resource = useResource(
|
|
151
|
+
TriggerPopoverResource({
|
|
152
|
+
adapter,
|
|
153
|
+
text,
|
|
154
|
+
triggerChar: char,
|
|
155
|
+
behavior: behavior ?? undefined,
|
|
156
|
+
aui,
|
|
157
|
+
popoverId,
|
|
158
|
+
}),
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
// Wrapper changes per render, but tap-stable methods inside don't.
|
|
162
|
+
const resourceRef = useRef(resource);
|
|
163
|
+
resourceRef.current = resource;
|
|
164
|
+
|
|
165
|
+
const root = useTriggerPopoverRootContext();
|
|
166
|
+
useEffect(() => {
|
|
167
|
+
return root.register({
|
|
168
|
+
char,
|
|
169
|
+
...(behavior ? { behavior } : {}),
|
|
170
|
+
resource: resourceRef.current,
|
|
171
|
+
});
|
|
172
|
+
}, [root, char, behavior]);
|
|
173
|
+
|
|
174
|
+
const pluginRegistry = useComposerInputPluginRegistryOptional();
|
|
175
|
+
useEffect(() => {
|
|
176
|
+
if (!pluginRegistry) return undefined;
|
|
177
|
+
return pluginRegistry.register(resourceRef.current);
|
|
178
|
+
}, [pluginRegistry]);
|
|
179
|
+
|
|
180
|
+
const open = behavior !== null && resource.open;
|
|
181
|
+
|
|
182
|
+
return (
|
|
183
|
+
<TriggerBehaviorRegistrationContext.Provider value={registration}>
|
|
184
|
+
<TriggerPopoverScopeContext.Provider value={resource}>
|
|
185
|
+
{open ? (
|
|
186
|
+
<Primitive.div
|
|
187
|
+
role="listbox"
|
|
188
|
+
id={popoverId}
|
|
189
|
+
aria-label={ariaLabel ?? "Suggestions"}
|
|
190
|
+
aria-activedescendant={resource.highlightedItemId}
|
|
191
|
+
data-state="open"
|
|
192
|
+
{...props}
|
|
193
|
+
ref={forwardedRef}
|
|
194
|
+
>
|
|
195
|
+
{children}
|
|
196
|
+
</Primitive.div>
|
|
197
|
+
) : (
|
|
198
|
+
children
|
|
199
|
+
)}
|
|
200
|
+
</TriggerPopoverScopeContext.Provider>
|
|
201
|
+
</TriggerBehaviorRegistrationContext.Provider>
|
|
202
|
+
);
|
|
203
|
+
},
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
ComposerPrimitiveTriggerPopover.displayName =
|
|
207
|
+
"ComposerPrimitive.TriggerPopover";
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
Unstable_DirectiveFormatter,
|
|
5
|
+
Unstable_TriggerItem,
|
|
6
|
+
} from "@assistant-ui/core";
|
|
7
|
+
import { unstable_defaultDirectiveFormatter } from "@assistant-ui/core";
|
|
8
|
+
import { useEffect, useRef, type FC } from "react";
|
|
9
|
+
import { useTriggerBehaviorRegistration } from "./TriggerPopover";
|
|
10
|
+
import type { TriggerBehavior } from "./triggerSelectionResource";
|
|
11
|
+
|
|
12
|
+
export namespace ComposerPrimitiveTriggerPopoverAction {
|
|
13
|
+
export type Props = {
|
|
14
|
+
/** Defaults to `unstable_defaultDirectiveFormatter`. */
|
|
15
|
+
readonly formatter?: Unstable_DirectiveFormatter | undefined;
|
|
16
|
+
/** Fires the moment an item is selected; runs regardless of `removeOnExecute`. */
|
|
17
|
+
readonly onExecute: (item: Unstable_TriggerItem) => void;
|
|
18
|
+
/** When true, strips the trigger text after executing. Defaults to `false` (keeps audit-trail chip). */
|
|
19
|
+
readonly removeOnExecute?: boolean | undefined;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Configures a `<TriggerPopover>` to fire a handler when an item is selected,
|
|
25
|
+
* optionally leaving a directive chip behind as an audit trail. Render exactly
|
|
26
|
+
* one behavior sub-primitive per `<TriggerPopover>`.
|
|
27
|
+
*
|
|
28
|
+
* Exposed as `ComposerPrimitive.Unstable_TriggerPopover.Action`.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* <ComposerPrimitive.Unstable_TriggerPopover char="/" adapter={slashAdapter}>
|
|
33
|
+
* <ComposerPrimitive.Unstable_TriggerPopover.Action
|
|
34
|
+
* onExecute={(item) => commandHandlers[item.id]?.()}
|
|
35
|
+
* removeOnExecute={false}
|
|
36
|
+
* />
|
|
37
|
+
* </ComposerPrimitive.Unstable_TriggerPopover>
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export const ComposerPrimitiveTriggerPopoverAction: FC<
|
|
41
|
+
ComposerPrimitiveTriggerPopoverAction.Props
|
|
42
|
+
> = ({ formatter, onExecute, removeOnExecute }) => {
|
|
43
|
+
const { register } = useTriggerBehaviorRegistration();
|
|
44
|
+
const onExecuteRef = useRef(onExecute);
|
|
45
|
+
onExecuteRef.current = onExecute;
|
|
46
|
+
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
const behavior: TriggerBehavior = {
|
|
49
|
+
kind: "action",
|
|
50
|
+
formatter: formatter ?? unstable_defaultDirectiveFormatter,
|
|
51
|
+
onExecute: (item) => onExecuteRef.current(item),
|
|
52
|
+
...(removeOnExecute !== undefined ? { removeOnExecute } : {}),
|
|
53
|
+
};
|
|
54
|
+
return register(behavior);
|
|
55
|
+
}, [register, formatter, removeOnExecute]);
|
|
56
|
+
|
|
57
|
+
return null;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
ComposerPrimitiveTriggerPopoverAction.displayName =
|
|
61
|
+
"ComposerPrimitive.TriggerPopoverAction";
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
forwardRef,
|
|
8
8
|
} from "react";
|
|
9
9
|
import { composeEventHandlers } from "@radix-ui/primitive";
|
|
10
|
-
import {
|
|
10
|
+
import { useTriggerPopoverScopeContext } from "./TriggerPopover";
|
|
11
11
|
|
|
12
12
|
export namespace ComposerPrimitiveTriggerPopoverBack {
|
|
13
13
|
export type Element = ComponentRef<typeof Primitive.button>;
|
|
@@ -22,9 +22,10 @@ export const ComposerPrimitiveTriggerPopoverBack = forwardRef<
|
|
|
22
22
|
ComposerPrimitiveTriggerPopoverBack.Element,
|
|
23
23
|
ComposerPrimitiveTriggerPopoverBack.Props
|
|
24
24
|
>(({ onClick, ...props }, forwardedRef) => {
|
|
25
|
-
const { activeCategoryId, isSearchMode, goBack } =
|
|
25
|
+
const { activeCategoryId, isSearchMode, goBack, open } =
|
|
26
|
+
useTriggerPopoverScopeContext();
|
|
26
27
|
|
|
27
|
-
if (!activeCategoryId || isSearchMode) return null;
|
|
28
|
+
if (!open || !activeCategoryId || isSearchMode) return null;
|
|
28
29
|
|
|
29
30
|
return (
|
|
30
31
|
<Primitive.button
|