@assistant-ui/react 0.12.24 → 0.12.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +13 -13
- 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,220 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useMemo, type FC } from "react";
|
|
4
|
+
import { useAui } from "@assistant-ui/store";
|
|
5
|
+
import type {
|
|
6
|
+
Unstable_DirectiveFormatter,
|
|
7
|
+
Unstable_TriggerAdapter,
|
|
8
|
+
Unstable_TriggerCategory,
|
|
9
|
+
Unstable_TriggerItem,
|
|
10
|
+
} from "@assistant-ui/core";
|
|
11
|
+
import { unstable_defaultDirectiveFormatter } from "@assistant-ui/core";
|
|
12
|
+
import type { ReadonlyJSONObject } from "assistant-stream/utils";
|
|
13
|
+
|
|
14
|
+
/** Icon component shape consumed by `ComposerTriggerPopover`'s `iconMap`. */
|
|
15
|
+
export type Unstable_IconComponent = FC<{ className?: string }>;
|
|
16
|
+
|
|
17
|
+
export type Unstable_Mention = {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly type: string;
|
|
20
|
+
readonly label: string;
|
|
21
|
+
readonly description?: string | undefined;
|
|
22
|
+
/** Shortcut for `metadata.icon`; merged with `metadata` if both are given. */
|
|
23
|
+
readonly icon?: string | undefined;
|
|
24
|
+
readonly metadata?: ReadonlyJSONObject | undefined;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type Unstable_MentionCategory = {
|
|
28
|
+
readonly id: string;
|
|
29
|
+
readonly label: string;
|
|
30
|
+
readonly items: readonly Unstable_Mention[];
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export type Unstable_ModelContextToolsOptions = {
|
|
34
|
+
/** Wrap tools in a dedicated category (drill-down mode). */
|
|
35
|
+
readonly category?: { readonly id: string; readonly label: string };
|
|
36
|
+
/** Format tool name for display. */
|
|
37
|
+
readonly formatLabel?: (toolName: string) => string;
|
|
38
|
+
/** Default icon key for each tool. */
|
|
39
|
+
readonly icon?: string;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export type Unstable_UseMentionAdapterOptions = {
|
|
43
|
+
/** Flat mention list. Ignored when `categories` is set. */
|
|
44
|
+
readonly items?: readonly Unstable_Mention[];
|
|
45
|
+
/** Categorized mentions for drill-down navigation. */
|
|
46
|
+
readonly categories?: readonly Unstable_MentionCategory[];
|
|
47
|
+
/**
|
|
48
|
+
* How tools registered via `useAssistantTool` integrate.
|
|
49
|
+
* - `false`: exclude.
|
|
50
|
+
* - `true`: include (default when no `items`/`categories`; as a category
|
|
51
|
+
* if `categories` is set, flat otherwise).
|
|
52
|
+
* - object: explicit config.
|
|
53
|
+
*
|
|
54
|
+
* Omitted → defaults to `true` iff neither `items` nor `categories`.
|
|
55
|
+
*/
|
|
56
|
+
readonly includeModelContextTools?:
|
|
57
|
+
| boolean
|
|
58
|
+
| Unstable_ModelContextToolsOptions;
|
|
59
|
+
/** Directive formatter. @default unstable_defaultDirectiveFormatter */
|
|
60
|
+
readonly formatter?: Unstable_DirectiveFormatter;
|
|
61
|
+
/** Fires after an item is inserted into the composer. */
|
|
62
|
+
readonly onInserted?: (item: Unstable_TriggerItem) => void;
|
|
63
|
+
/** Maps `metadata.icon` / `category.id` string keys to React components. */
|
|
64
|
+
readonly iconMap?: Record<string, Unstable_IconComponent>;
|
|
65
|
+
/** Fallback icon when no entry in `iconMap` matches. */
|
|
66
|
+
readonly fallbackIcon?: Unstable_IconComponent;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export type Unstable_MentionDirective = {
|
|
70
|
+
readonly formatter: Unstable_DirectiveFormatter;
|
|
71
|
+
readonly onInserted?: ((item: Unstable_TriggerItem) => void) | undefined;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @deprecated Under active development and might change without notice.
|
|
76
|
+
*
|
|
77
|
+
* Creates a spreadable `{ adapter, directive }` bundle for `@` mentions.
|
|
78
|
+
* Supports tools registered via `useAssistantTool`, explicit items, or both —
|
|
79
|
+
* flat or categorized.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```tsx
|
|
83
|
+
* const mention = unstable_useMentionAdapter();
|
|
84
|
+
* <ComposerTriggerPopover char="@" {...mention} />
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export function unstable_useMentionAdapter(
|
|
88
|
+
options?: Unstable_UseMentionAdapterOptions,
|
|
89
|
+
): {
|
|
90
|
+
adapter: Unstable_TriggerAdapter;
|
|
91
|
+
directive: Unstable_MentionDirective;
|
|
92
|
+
iconMap?: Record<string, Unstable_IconComponent>;
|
|
93
|
+
fallbackIcon?: Unstable_IconComponent;
|
|
94
|
+
} {
|
|
95
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
96
|
+
const aui = useAui();
|
|
97
|
+
|
|
98
|
+
const items = options?.items;
|
|
99
|
+
const categories = options?.categories;
|
|
100
|
+
const includeTools =
|
|
101
|
+
options?.includeModelContextTools ?? (!items && !categories);
|
|
102
|
+
const toolsConfig =
|
|
103
|
+
typeof includeTools === "object" ? includeTools : undefined;
|
|
104
|
+
const wantsTools = includeTools !== false;
|
|
105
|
+
const formatter = options?.formatter;
|
|
106
|
+
const onInserted = options?.onInserted;
|
|
107
|
+
|
|
108
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
109
|
+
const adapter = useMemo<Unstable_TriggerAdapter>(() => {
|
|
110
|
+
const getModelContextTools = (): Unstable_TriggerItem[] => {
|
|
111
|
+
if (!wantsTools) return [];
|
|
112
|
+
const ctx = aui.thread().getModelContext();
|
|
113
|
+
const tools = ctx.tools;
|
|
114
|
+
if (!tools) return [];
|
|
115
|
+
const formatLabel = toolsConfig?.formatLabel;
|
|
116
|
+
const defaultIcon = toolsConfig?.icon;
|
|
117
|
+
return Object.entries(tools).map(([name, tool]) =>
|
|
118
|
+
toTriggerItem({
|
|
119
|
+
id: name,
|
|
120
|
+
type: "tool",
|
|
121
|
+
label: formatLabel ? formatLabel(name) : name,
|
|
122
|
+
description: tool.description ?? undefined,
|
|
123
|
+
icon: defaultIcon,
|
|
124
|
+
}),
|
|
125
|
+
);
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// Categorized: drill-down mode
|
|
129
|
+
if (categories && categories.length > 0) {
|
|
130
|
+
const groups = categories.map((cat) => ({
|
|
131
|
+
id: cat.id,
|
|
132
|
+
label: cat.label,
|
|
133
|
+
items: cat.items.map(toTriggerItem),
|
|
134
|
+
}));
|
|
135
|
+
|
|
136
|
+
let toolCategory: {
|
|
137
|
+
id: string;
|
|
138
|
+
label: string;
|
|
139
|
+
items: Unstable_TriggerItem[];
|
|
140
|
+
} | null = null;
|
|
141
|
+
if (wantsTools) {
|
|
142
|
+
const toolItems = getModelContextTools();
|
|
143
|
+
if (toolItems.length > 0) {
|
|
144
|
+
toolCategory = {
|
|
145
|
+
id: toolsConfig?.category?.id ?? "tools",
|
|
146
|
+
label: toolsConfig?.category?.label ?? "Tools",
|
|
147
|
+
items: toolItems,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const allGroups = toolCategory ? [...groups, toolCategory] : groups;
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
categories: () => allGroups.map(({ id, label }) => ({ id, label })),
|
|
155
|
+
categoryItems: (id) => allGroups.find((g) => g.id === id)?.items ?? [],
|
|
156
|
+
search: (query) => {
|
|
157
|
+
const lower = query.toLowerCase();
|
|
158
|
+
return allGroups
|
|
159
|
+
.flatMap((g) => g.items)
|
|
160
|
+
.filter((item) => matchesQuery(item, lower));
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Flat: items + (optionally) tools, all in one search pool
|
|
166
|
+
const flatItems = (items ?? []).map(toTriggerItem);
|
|
167
|
+
const getFlatPool = (): Unstable_TriggerItem[] => {
|
|
168
|
+
if (!wantsTools) return flatItems;
|
|
169
|
+
const toolItems = getModelContextTools();
|
|
170
|
+
// Dedupe by id — explicit items win.
|
|
171
|
+
const seen = new Set(flatItems.map((i) => i.id));
|
|
172
|
+
return [...flatItems, ...toolItems.filter((t) => !seen.has(t.id))];
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
categories: (): readonly Unstable_TriggerCategory[] => [],
|
|
177
|
+
categoryItems: () => [],
|
|
178
|
+
search: (query) => {
|
|
179
|
+
const lower = query.toLowerCase();
|
|
180
|
+
return getFlatPool().filter((item) => matchesQuery(item, lower));
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}, [aui, items, categories, wantsTools, toolsConfig]);
|
|
184
|
+
|
|
185
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: `unstable_` prefix not recognized as hook
|
|
186
|
+
const directive = useMemo<Unstable_MentionDirective>(
|
|
187
|
+
() => ({
|
|
188
|
+
formatter: formatter ?? unstable_defaultDirectiveFormatter,
|
|
189
|
+
...(onInserted ? { onInserted } : {}),
|
|
190
|
+
}),
|
|
191
|
+
[formatter, onInserted],
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
return {
|
|
195
|
+
adapter,
|
|
196
|
+
directive,
|
|
197
|
+
...(options?.iconMap ? { iconMap: options.iconMap } : {}),
|
|
198
|
+
...(options?.fallbackIcon ? { fallbackIcon: options.fallbackIcon } : {}),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function toTriggerItem(m: Unstable_Mention): Unstable_TriggerItem {
|
|
203
|
+
const metadata =
|
|
204
|
+
m.icon !== undefined ? { ...(m.metadata ?? {}), icon: m.icon } : m.metadata;
|
|
205
|
+
return {
|
|
206
|
+
id: m.id,
|
|
207
|
+
type: m.type,
|
|
208
|
+
label: m.label,
|
|
209
|
+
...(m.description !== undefined ? { description: m.description } : {}),
|
|
210
|
+
...(metadata !== undefined ? { metadata } : {}),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function matchesQuery(item: Unstable_TriggerItem, lower: string): boolean {
|
|
215
|
+
if (!lower) return true;
|
|
216
|
+
if (item.id.toLowerCase().includes(lower)) return true;
|
|
217
|
+
if (item.label.toLowerCase().includes(lower)) return true;
|
|
218
|
+
if (item.description?.toLowerCase().includes(lower)) return true;
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
@@ -1,83 +1,112 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useMemo } from "react";
|
|
3
|
+
import { useMemo, useRef } from "react";
|
|
4
4
|
import type {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Unstable_TriggerCategory,
|
|
5
|
+
Unstable_TriggerAdapter,
|
|
6
|
+
Unstable_TriggerItem,
|
|
8
7
|
} from "@assistant-ui/core";
|
|
8
|
+
import type { Unstable_IconComponent } from "./useMentionAdapter";
|
|
9
9
|
|
|
10
|
-
export type
|
|
11
|
-
|
|
12
|
-
readonly name: string;
|
|
13
|
-
/** Display label (e.g. "/summarize"). */
|
|
10
|
+
export type Unstable_SlashCommand = {
|
|
11
|
+
readonly id: string;
|
|
14
12
|
readonly label?: string | undefined;
|
|
15
|
-
/** Short description shown in the popover. */
|
|
16
13
|
readonly description?: string | undefined;
|
|
17
|
-
/** Icon identifier. */
|
|
18
14
|
readonly icon?: string | undefined;
|
|
19
|
-
|
|
20
|
-
readonly execute?: (() => void) | undefined;
|
|
15
|
+
readonly execute: () => void;
|
|
21
16
|
};
|
|
22
17
|
|
|
23
18
|
export type Unstable_UseSlashCommandAdapterOptions = {
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
readonly commands: readonly Unstable_SlashCommand[];
|
|
20
|
+
/** Strip the trigger text from the composer after executing. @default false */
|
|
21
|
+
readonly removeOnExecute?: boolean | undefined;
|
|
22
|
+
/** Maps `metadata.icon` / `category.id` string keys to React components. */
|
|
23
|
+
readonly iconMap?: Record<string, Unstable_IconComponent>;
|
|
24
|
+
/** Fallback icon when no entry in `iconMap` matches. */
|
|
25
|
+
readonly fallbackIcon?: Unstable_IconComponent;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type Unstable_SlashCommandAction = {
|
|
29
|
+
readonly onExecute: (item: Unstable_TriggerItem) => void;
|
|
30
|
+
readonly removeOnExecute?: boolean | undefined;
|
|
26
31
|
};
|
|
27
32
|
|
|
28
33
|
/**
|
|
29
|
-
* @deprecated
|
|
34
|
+
* @deprecated Under active development and may change without notice.
|
|
30
35
|
*
|
|
31
|
-
*
|
|
36
|
+
* Bundles slash command definitions (with inline `execute` callbacks) into
|
|
37
|
+
* `{adapter, action}` that plug directly into `ComposerTriggerPopover`.
|
|
38
|
+
* `execute` stays in the hook closure and is never attached to the returned
|
|
39
|
+
* `TriggerItem`, keeping items serializable.
|
|
32
40
|
*
|
|
33
41
|
* @example
|
|
34
42
|
* ```tsx
|
|
35
|
-
* const
|
|
43
|
+
* const slash = unstable_useSlashCommandAdapter({
|
|
36
44
|
* commands: [
|
|
37
|
-
* {
|
|
38
|
-
* {
|
|
45
|
+
* { id: "summarize", execute: () => runSummarize(), icon: "FileText" },
|
|
46
|
+
* { id: "translate", execute: () => runTranslate(), icon: "Languages" },
|
|
39
47
|
* ],
|
|
40
48
|
* });
|
|
49
|
+
*
|
|
50
|
+
* <ComposerTriggerPopover char="/" {...slash} />
|
|
41
51
|
* ```
|
|
42
52
|
*/
|
|
43
53
|
export function unstable_useSlashCommandAdapter(
|
|
44
54
|
options: Unstable_UseSlashCommandAdapterOptions,
|
|
45
|
-
):
|
|
46
|
-
|
|
55
|
+
): {
|
|
56
|
+
adapter: Unstable_TriggerAdapter;
|
|
57
|
+
action: Unstable_SlashCommandAction;
|
|
58
|
+
iconMap?: Record<string, Unstable_IconComponent>;
|
|
59
|
+
fallbackIcon?: Unstable_IconComponent;
|
|
60
|
+
} {
|
|
61
|
+
const { commands, removeOnExecute } = options;
|
|
47
62
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
commands.map((cmd) => ({
|
|
52
|
-
id: cmd.name,
|
|
53
|
-
type: "command",
|
|
54
|
-
label: cmd.label ?? `/${cmd.name}`,
|
|
55
|
-
description: cmd.description,
|
|
56
|
-
icon: cmd.icon,
|
|
57
|
-
execute: cmd.execute,
|
|
58
|
-
}));
|
|
63
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: `unstable_` prefix not recognized as hook
|
|
64
|
+
const commandsRef = useRef(commands);
|
|
65
|
+
commandsRef.current = commands;
|
|
59
66
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: `unstable_` prefix not recognized as hook
|
|
68
|
+
return useMemo(() => {
|
|
69
|
+
const adapter: Unstable_TriggerAdapter = {
|
|
70
|
+
categories: () => [],
|
|
71
|
+
categoryItems: () => [],
|
|
72
|
+
search: (query: string) => {
|
|
73
|
+
const lower = query.toLowerCase();
|
|
74
|
+
return commandsRef.current
|
|
75
|
+
.filter((c) => matchesQuery(c, lower))
|
|
76
|
+
.map(toItem);
|
|
64
77
|
},
|
|
78
|
+
};
|
|
65
79
|
|
|
66
|
-
|
|
67
|
-
|
|
80
|
+
const action: Unstable_SlashCommandAction = {
|
|
81
|
+
onExecute: (item) => {
|
|
82
|
+
commandsRef.current.find((c) => c.id === item.id)?.execute();
|
|
68
83
|
},
|
|
84
|
+
...(removeOnExecute !== undefined ? { removeOnExecute } : {}),
|
|
85
|
+
};
|
|
69
86
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
(item) =>
|
|
76
|
-
item.id.toLowerCase().includes(lower) ||
|
|
77
|
-
item.label.toLowerCase().includes(lower) ||
|
|
78
|
-
item.description?.toLowerCase().includes(lower),
|
|
79
|
-
);
|
|
80
|
-
},
|
|
87
|
+
return {
|
|
88
|
+
adapter,
|
|
89
|
+
action,
|
|
90
|
+
...(options.iconMap ? { iconMap: options.iconMap } : {}),
|
|
91
|
+
...(options.fallbackIcon ? { fallbackIcon: options.fallbackIcon } : {}),
|
|
81
92
|
};
|
|
82
|
-
}, [
|
|
93
|
+
}, [removeOnExecute, options.iconMap, options.fallbackIcon]);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function toItem(cmd: Unstable_SlashCommand): Unstable_TriggerItem {
|
|
97
|
+
return {
|
|
98
|
+
id: cmd.id,
|
|
99
|
+
type: "command",
|
|
100
|
+
label: cmd.label ?? `/${cmd.id}`,
|
|
101
|
+
...(cmd.description !== undefined ? { description: cmd.description } : {}),
|
|
102
|
+
...(cmd.icon !== undefined ? { metadata: { icon: cmd.icon } } : {}),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function matchesQuery(cmd: Unstable_SlashCommand, lower: string): boolean {
|
|
107
|
+
if (!lower) return true;
|
|
108
|
+
if (cmd.id.toLowerCase().includes(lower)) return true;
|
|
109
|
+
if (cmd.label?.toLowerCase().includes(lower)) return true;
|
|
110
|
+
if (cmd.description?.toLowerCase().includes(lower)) return true;
|
|
111
|
+
return false;
|
|
83
112
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { renderToStaticMarkup } from "react-dom/server";
|
|
3
|
-
import { Primitive } from "./Primitive";
|
|
3
|
+
import { Primitive, withRenderProp } from "./Primitive";
|
|
4
4
|
|
|
5
5
|
const ALL_NODES = [
|
|
6
6
|
"a",
|
|
@@ -70,6 +70,12 @@ describe("Primitive", () => {
|
|
|
70
70
|
});
|
|
71
71
|
|
|
72
72
|
describe("render prop edge cases", () => {
|
|
73
|
+
it("preserves a useful displayName on wrapped components", () => {
|
|
74
|
+
const Wrapped = withRenderProp(Primitive.div);
|
|
75
|
+
|
|
76
|
+
expect(Wrapped.displayName).toBe("Primitive.div");
|
|
77
|
+
});
|
|
78
|
+
|
|
73
79
|
it("uses render element's own children as fallback", () => {
|
|
74
80
|
const html = renderToStaticMarkup(
|
|
75
81
|
<Primitive.span render={<em>Fallback</em>} />,
|
package/src/utils/Primitive.tsx
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type ComponentPropsWithoutRef,
|
|
3
3
|
type ComponentRef,
|
|
4
|
+
type ElementType,
|
|
4
5
|
type ForwardRefExoticComponent,
|
|
6
|
+
type PropsWithoutRef,
|
|
5
7
|
type ReactElement,
|
|
6
8
|
type ReactNode,
|
|
7
9
|
type RefAttributes,
|
|
@@ -43,43 +45,74 @@ const NODES = [
|
|
|
43
45
|
] as const;
|
|
44
46
|
type PrimitiveNode = (typeof NODES)[number];
|
|
45
47
|
|
|
46
|
-
type
|
|
48
|
+
type WithRenderPropProps<T extends ElementType> =
|
|
49
|
+
ComponentPropsWithoutRef<T> & {
|
|
50
|
+
render?: ReactElement | undefined;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
type PrimitiveProps<E extends PrimitiveNode> = WithRenderPropProps<
|
|
47
54
|
(typeof RadixPrimitive)[E]
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
>;
|
|
56
|
+
|
|
57
|
+
type WithRenderPropRuntimeProps<T extends ElementType> =
|
|
58
|
+
WithRenderPropProps<T> & {
|
|
59
|
+
asChild?: boolean | undefined;
|
|
60
|
+
children?: ReactNode | undefined;
|
|
61
|
+
};
|
|
51
62
|
|
|
52
63
|
type PrimitiveRef<E extends PrimitiveNode> = ComponentRef<
|
|
53
64
|
(typeof RadixPrimitive)[E]
|
|
54
65
|
>;
|
|
55
66
|
|
|
56
|
-
function
|
|
57
|
-
const
|
|
67
|
+
function withRenderProp<T extends ElementType>(Component: T) {
|
|
68
|
+
const Wrapped = forwardRef<ComponentRef<T>, WithRenderPropRuntimeProps<T>>(
|
|
69
|
+
(
|
|
70
|
+
{
|
|
71
|
+
render,
|
|
72
|
+
asChild,
|
|
73
|
+
children,
|
|
74
|
+
...rest
|
|
75
|
+
}: PropsWithoutRef<WithRenderPropRuntimeProps<T>>,
|
|
76
|
+
ref,
|
|
77
|
+
) => {
|
|
78
|
+
const Comp = Component as any;
|
|
58
79
|
|
|
59
|
-
const Component = forwardRef<PrimitiveRef<E>, PrimitiveProps<E>>(
|
|
60
|
-
({ render, asChild, children, ...props }, ref) => {
|
|
61
80
|
if (render && isValidElement(render)) {
|
|
62
|
-
// render={<Comp p />} + children
|
|
63
|
-
// → asChild + <Comp p>{children}</Comp>
|
|
64
81
|
const renderChildren =
|
|
65
82
|
children !== undefined
|
|
66
83
|
? children
|
|
67
84
|
: ((render.props as Record<string, unknown>).children as ReactNode);
|
|
85
|
+
|
|
68
86
|
return (
|
|
69
|
-
<
|
|
87
|
+
<Comp {...(rest as any)} asChild ref={ref}>
|
|
70
88
|
{cloneElement(render, undefined, renderChildren)}
|
|
71
|
-
</
|
|
89
|
+
</Comp>
|
|
72
90
|
);
|
|
73
91
|
}
|
|
74
92
|
|
|
75
93
|
return (
|
|
76
|
-
<
|
|
94
|
+
<Comp {...(rest as any)} asChild={asChild} ref={ref}>
|
|
77
95
|
{children}
|
|
78
|
-
</
|
|
96
|
+
</Comp>
|
|
79
97
|
);
|
|
80
98
|
},
|
|
81
99
|
);
|
|
82
100
|
|
|
101
|
+
const componentName =
|
|
102
|
+
typeof Component === "string"
|
|
103
|
+
? Component
|
|
104
|
+
: (Component.displayName ?? Component.name ?? "Component");
|
|
105
|
+
Wrapped.displayName = componentName;
|
|
106
|
+
|
|
107
|
+
return Wrapped as ForwardRefExoticComponent<
|
|
108
|
+
WithRenderPropProps<T> & RefAttributes<ComponentRef<T>>
|
|
109
|
+
>;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function createPrimitive<E extends PrimitiveNode>(node: E) {
|
|
113
|
+
const RadixComp = RadixPrimitive[node];
|
|
114
|
+
const Component = withRenderProp(RadixComp);
|
|
115
|
+
|
|
83
116
|
Component.displayName = `Primitive.${node}`;
|
|
84
117
|
return Component as ForwardRefExoticComponent<
|
|
85
118
|
PrimitiveProps<E> & RefAttributes<PrimitiveRef<E>>
|
|
@@ -96,5 +129,5 @@ const Primitive = NODES.reduce(
|
|
|
96
129
|
},
|
|
97
130
|
);
|
|
98
131
|
|
|
99
|
-
export { Primitive };
|
|
100
|
-
export type { PrimitiveProps };
|
|
132
|
+
export { Primitive, withRenderProp };
|
|
133
|
+
export type { PrimitiveProps, WithRenderPropProps };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
-
ComponentRef,
|
|
2
|
+
type ComponentRef,
|
|
3
3
|
forwardRef,
|
|
4
|
-
ComponentPropsWithoutRef,
|
|
5
|
-
MouseEventHandler,
|
|
4
|
+
type ComponentPropsWithoutRef,
|
|
5
|
+
type MouseEventHandler,
|
|
6
6
|
} from "react";
|
|
7
7
|
import { Primitive } from "./Primitive";
|
|
8
8
|
import { composeEventHandlers } from "@radix-ui/primitive";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useCallback, useRef } from "react";
|
|
2
2
|
|
|
3
3
|
export const useManagedRef = <TNode>(
|
|
4
|
-
callback: (node: TNode) => (() => void) |
|
|
4
|
+
callback: (node: TNode) => (() => void) | undefined,
|
|
5
5
|
) => {
|
|
6
|
-
const cleanupRef = useRef<(() => void) |
|
|
6
|
+
const cleanupRef = useRef<(() => void) | undefined>(undefined);
|
|
7
7
|
|
|
8
8
|
const ref = useCallback(
|
|
9
9
|
(el: TNode | null) => {
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
ComponentType,
|
|
4
|
+
type ComponentType,
|
|
5
5
|
createContext,
|
|
6
|
-
FC,
|
|
6
|
+
type FC,
|
|
7
7
|
forwardRef,
|
|
8
|
-
PropsWithChildren,
|
|
8
|
+
type PropsWithChildren,
|
|
9
9
|
useContext,
|
|
10
10
|
useState,
|
|
11
11
|
} from "react";
|
|
12
|
-
import { ReadonlyStore } from "../../context/ReadonlyStore";
|
|
13
|
-
import { create, UseBoundStore } from "zustand";
|
|
12
|
+
import type { ReadonlyStore } from "../../context/ReadonlyStore";
|
|
13
|
+
import { create, type UseBoundStore } from "zustand";
|
|
14
14
|
import type {
|
|
15
15
|
MessagePartStatus,
|
|
16
16
|
ToolCallMessagePartStatus,
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { type ReactNode, type FC } from "react";
|
|
2
|
-
import type { Unstable_MentionAdapter, Unstable_DirectiveFormatter } from "@assistant-ui/core";
|
|
3
|
-
import type { TriggerPopoverResourceOutput, SelectItemOverride } from "../trigger/TriggerPopoverResource.js";
|
|
4
|
-
type MentionResourceOutput = TriggerPopoverResourceOutput & {
|
|
5
|
-
readonly formatter: Unstable_DirectiveFormatter;
|
|
6
|
-
};
|
|
7
|
-
export declare const useMentionContext: () => MentionResourceOutput;
|
|
8
|
-
export declare const useMentionContextOptional: () => MentionResourceOutput | null;
|
|
9
|
-
type MentionInternalContextValue = {
|
|
10
|
-
registerSelectItemOverride(fn: SelectItemOverride): () => void;
|
|
11
|
-
};
|
|
12
|
-
export declare const useMentionInternalContext: () => MentionInternalContextValue | null;
|
|
13
|
-
export declare namespace ComposerPrimitiveMentionRoot {
|
|
14
|
-
type Props = {
|
|
15
|
-
children: ReactNode;
|
|
16
|
-
adapter?: Unstable_MentionAdapter | undefined;
|
|
17
|
-
/** Character(s) that trigger the mention popover. @default "@" */
|
|
18
|
-
trigger?: string | undefined;
|
|
19
|
-
/** Custom formatter for serializing/parsing mention directives. */
|
|
20
|
-
formatter?: Unstable_DirectiveFormatter | undefined;
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
export declare const ComposerPrimitiveMentionRoot: FC<ComposerPrimitiveMentionRoot.Props>;
|
|
24
|
-
export {};
|
|
25
|
-
//# sourceMappingURL=ComposerMentionContext.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerMentionContext.d.ts","sourceRoot":"","sources":["../../../../src/primitives/composer/mention/ComposerMentionContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EACV,4BAA4B,EAC5B,kBAAkB,EAEnB,6CAA0C;AAE3C,KAAK,qBAAqB,GAAG,4BAA4B,GAAG;IAC1D,QAAQ,CAAC,SAAS,EAAE,2BAA2B,CAAC;CACjD,CAAC;AAQF,eAAO,MAAM,iBAAiB,6BAO7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,oCAErC,CAAC;AAMF,KAAK,2BAA2B,GAAG;IACjC,0BAA0B,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAC;CAChE,CAAC;AAKF,eAAO,MAAM,yBAAyB,0CAErC,CAAC;AAMF,yBAAiB,4BAA4B,CAAC;IAC5C,KAAY,KAAK,GAAG;QAClB,QAAQ,EAAE,SAAS,CAAC;QACpB,OAAO,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;QAC9C,kEAAkE;QAClE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,mEAAmE;QACnE,SAAS,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;KACrD,CAAC;CACH;AAED,eAAO,MAAM,4BAA4B,EAAE,EAAE,CAC3C,4BAA4B,CAAC,KAAK,CA4DnC,CAAC"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { createContext, useContext, useState, useCallback, useMemo, useEffect, } from "react";
|
|
4
|
-
import { useAui } from "@assistant-ui/store";
|
|
5
|
-
import { unstable_defaultDirectiveFormatter } from "@assistant-ui/core";
|
|
6
|
-
import { ComposerPrimitiveTriggerPopoverRoot } from "../trigger/TriggerPopoverContext.js";
|
|
7
|
-
// =============================================================================
|
|
8
|
-
// Context — public (provides formatter on top of TriggerPopoverContext)
|
|
9
|
-
// =============================================================================
|
|
10
|
-
const MentionContext = createContext(null);
|
|
11
|
-
export const useMentionContext = () => {
|
|
12
|
-
const ctx = useContext(MentionContext);
|
|
13
|
-
if (!ctx)
|
|
14
|
-
throw new Error("useMentionContext must be used within ComposerPrimitive.MentionRoot");
|
|
15
|
-
return ctx;
|
|
16
|
-
};
|
|
17
|
-
export const useMentionContextOptional = () => {
|
|
18
|
-
return useContext(MentionContext);
|
|
19
|
-
};
|
|
20
|
-
const MentionInternalContext = createContext(null);
|
|
21
|
-
export const useMentionInternalContext = () => {
|
|
22
|
-
return useContext(MentionInternalContext);
|
|
23
|
-
};
|
|
24
|
-
export const ComposerPrimitiveMentionRoot = ({ children, adapter: adapterProp, trigger: triggerChar = "@", formatter: formatterProp, }) => {
|
|
25
|
-
const aui = useAui();
|
|
26
|
-
const formatter = formatterProp ?? unstable_defaultDirectiveFormatter;
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
// Runtime adapter (subscribe to state changes instead of useAuiState to avoid
|
|
29
|
-
// infinite loop — getModelContext() returns a new object on every call)
|
|
30
|
-
// ---------------------------------------------------------------------------
|
|
31
|
-
const getRuntimeAdapter = useCallback(() => {
|
|
32
|
-
try {
|
|
33
|
-
const runtime = aui.composer().__internal_getRuntime?.();
|
|
34
|
-
return runtime?._core?.getState()?.getMentionAdapter?.();
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
return undefined;
|
|
38
|
-
}
|
|
39
|
-
}, [aui]);
|
|
40
|
-
const [runtimeAdapter, setRuntimeAdapter] = useState(getRuntimeAdapter);
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
return aui.subscribe(() => {
|
|
43
|
-
setRuntimeAdapter((prev) => {
|
|
44
|
-
const next = getRuntimeAdapter();
|
|
45
|
-
return prev === next ? prev : next;
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
}, [aui, getRuntimeAdapter]);
|
|
49
|
-
const adapter = adapterProp ?? runtimeAdapter;
|
|
50
|
-
// ---------------------------------------------------------------------------
|
|
51
|
-
// onSelect behavior for mentions: insert directive text
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
|
-
const onSelect = useMemo(() => ({ type: "insertDirective", formatter }), [formatter]);
|
|
54
|
-
// ---------------------------------------------------------------------------
|
|
55
|
-
// MentionContext — provides formatter + delegates state to TriggerPopoverContext
|
|
56
|
-
// We use useAuiState to read trigger popover state via the inner context.
|
|
57
|
-
// For backward compat, MentionContext wraps TriggerPopoverContext output.
|
|
58
|
-
// ---------------------------------------------------------------------------
|
|
59
|
-
return (_jsx(ComposerPrimitiveTriggerPopoverRoot, { adapter: adapter, trigger: triggerChar, onSelect: onSelect, children: _jsx(MentionContextBridge, { formatter: formatter, children: children }) }));
|
|
60
|
-
};
|
|
61
|
-
ComposerPrimitiveMentionRoot.displayName = "ComposerPrimitive.MentionRoot";
|
|
62
|
-
// =============================================================================
|
|
63
|
-
// Bridge — reads TriggerPopoverContext, wraps it as MentionContext
|
|
64
|
-
// =============================================================================
|
|
65
|
-
import { useTriggerPopoverContext } from "../trigger/TriggerPopoverContext.js";
|
|
66
|
-
const MentionContextBridge = ({ formatter, children }) => {
|
|
67
|
-
const triggerCtx = useTriggerPopoverContext();
|
|
68
|
-
const mentionValue = useMemo(() => ({ ...triggerCtx, formatter }), [triggerCtx, formatter]);
|
|
69
|
-
const internalContextValue = useMemo(() => ({
|
|
70
|
-
registerSelectItemOverride: triggerCtx.registerSelectItemOverride,
|
|
71
|
-
}), [triggerCtx.registerSelectItemOverride]);
|
|
72
|
-
return (_jsx(MentionContext.Provider, { value: mentionValue, children: _jsx(MentionInternalContext.Provider, { value: internalContextValue, children: children }) }));
|
|
73
|
-
};
|
|
74
|
-
//# sourceMappingURL=ComposerMentionContext.js.map
|