@assistant-ui/react 0.12.25 → 0.12.27
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/MessageIf.js +1 -1
- package/dist/primitives/message/MessageIf.js.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 +10 -10
- 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/MessageIf.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/BaseComposerRuntimeCore.test.ts +143 -0
- package/src/tests/DataRenderers.test.ts +174 -41
- package/src/tests/MessageParts.loading.test.tsx +104 -0
- package/src/tests/RemoteThreadListRuntime.deferredProvider.test.tsx +79 -0
- 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
|
@@ -1,52 +1,65 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
2
|
+
import type {
|
|
3
|
+
DataMessagePartComponent,
|
|
4
|
+
DataRenderersState,
|
|
5
|
+
} from "@assistant-ui/core/react";
|
|
6
|
+
|
|
7
|
+
// The resource in DataRenderers.ts requires fiber infrastructure, so these
|
|
8
|
+
// tests replicate the reducer directly and exercise it in isolation.
|
|
9
|
+
|
|
10
|
+
type StateHarness = {
|
|
11
|
+
state: DataRenderersState;
|
|
12
|
+
setDataUI: (name: string, render: DataMessagePartComponent) => () => void;
|
|
13
|
+
setFallbackDataUI: (render: DataMessagePartComponent) => () => void;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const createState = (): StateHarness => {
|
|
17
|
+
let state: DataRenderersState = { renderers: {}, fallbacks: [] };
|
|
18
|
+
|
|
19
|
+
const setDataUI = (name: string, render: DataMessagePartComponent) => {
|
|
20
|
+
state = {
|
|
21
|
+
...state,
|
|
22
|
+
renderers: {
|
|
23
|
+
...state.renderers,
|
|
24
|
+
[name]: [...(state.renderers[name] ?? []), render],
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
return () => {
|
|
19
28
|
state = {
|
|
20
29
|
...state,
|
|
21
30
|
renderers: {
|
|
22
31
|
...state.renderers,
|
|
23
|
-
[name]:
|
|
32
|
+
[name]: state.renderers[name]?.filter((r) => r !== render) ?? [],
|
|
24
33
|
},
|
|
25
34
|
};
|
|
35
|
+
};
|
|
36
|
+
};
|
|
26
37
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
},
|
|
34
|
-
};
|
|
38
|
+
const setFallbackDataUI = (render: DataMessagePartComponent) => {
|
|
39
|
+
state = { ...state, fallbacks: [...state.fallbacks, render] };
|
|
40
|
+
return () => {
|
|
41
|
+
state = {
|
|
42
|
+
...state,
|
|
43
|
+
fallbacks: state.fallbacks.filter((r) => r !== render),
|
|
35
44
|
};
|
|
36
45
|
};
|
|
46
|
+
};
|
|
37
47
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
return {
|
|
49
|
+
get state() {
|
|
50
|
+
return state;
|
|
51
|
+
},
|
|
52
|
+
setDataUI,
|
|
53
|
+
setFallbackDataUI,
|
|
44
54
|
};
|
|
55
|
+
};
|
|
45
56
|
|
|
57
|
+
describe("DataRenderers state logic", () => {
|
|
46
58
|
describe("initial state", () => {
|
|
47
|
-
it("should start with empty renderers", () => {
|
|
59
|
+
it("should start with empty renderers and fallbacks", () => {
|
|
48
60
|
const { state } = createState();
|
|
49
61
|
expect(state.renderers).toEqual({});
|
|
62
|
+
expect(state.fallbacks).toEqual([]);
|
|
50
63
|
});
|
|
51
64
|
});
|
|
52
65
|
|
|
@@ -129,8 +142,78 @@ describe("DataRenderers state logic", () => {
|
|
|
129
142
|
});
|
|
130
143
|
});
|
|
131
144
|
|
|
145
|
+
describe("DataRenderers fallback state logic", () => {
|
|
146
|
+
it("should register a fallback renderer", () => {
|
|
147
|
+
const s = createState();
|
|
148
|
+
const Fallback = (() => null) as unknown as DataMessagePartComponent;
|
|
149
|
+
|
|
150
|
+
s.setFallbackDataUI(Fallback);
|
|
151
|
+
|
|
152
|
+
expect(s.state.fallbacks).toHaveLength(1);
|
|
153
|
+
expect(s.state.fallbacks[0]).toBe(Fallback);
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it("should unregister the fallback renderer on cleanup", () => {
|
|
157
|
+
const s = createState();
|
|
158
|
+
const Fallback = (() => null) as unknown as DataMessagePartComponent;
|
|
159
|
+
|
|
160
|
+
const unsub = s.setFallbackDataUI(Fallback);
|
|
161
|
+
expect(s.state.fallbacks).toHaveLength(1);
|
|
162
|
+
|
|
163
|
+
unsub();
|
|
164
|
+
expect(s.state.fallbacks).toHaveLength(0);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it("should stack fallbacks; the first registered takes priority", () => {
|
|
168
|
+
const s = createState();
|
|
169
|
+
const Fallback1 = (() => null) as unknown as DataMessagePartComponent;
|
|
170
|
+
const Fallback2 = (() => null) as unknown as DataMessagePartComponent;
|
|
171
|
+
|
|
172
|
+
s.setFallbackDataUI(Fallback1);
|
|
173
|
+
s.setFallbackDataUI(Fallback2);
|
|
174
|
+
|
|
175
|
+
expect(s.state.fallbacks).toEqual([Fallback1, Fallback2]);
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it("should only unregister the specific fallback on cleanup", () => {
|
|
179
|
+
const s = createState();
|
|
180
|
+
const Fallback1 = (() => null) as unknown as DataMessagePartComponent;
|
|
181
|
+
const Fallback2 = (() => null) as unknown as DataMessagePartComponent;
|
|
182
|
+
|
|
183
|
+
const unsub1 = s.setFallbackDataUI(Fallback1);
|
|
184
|
+
s.setFallbackDataUI(Fallback2);
|
|
185
|
+
|
|
186
|
+
unsub1();
|
|
187
|
+
expect(s.state.fallbacks).toEqual([Fallback2]);
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it("should restore the previous fallback when the active one unmounts", () => {
|
|
191
|
+
const s = createState();
|
|
192
|
+
const Fallback1 = (() => null) as unknown as DataMessagePartComponent;
|
|
193
|
+
const Fallback2 = (() => null) as unknown as DataMessagePartComponent;
|
|
194
|
+
|
|
195
|
+
s.setFallbackDataUI(Fallback1);
|
|
196
|
+
const unsub2 = s.setFallbackDataUI(Fallback2);
|
|
197
|
+
|
|
198
|
+
unsub2();
|
|
199
|
+
expect(s.state.fallbacks).toEqual([Fallback1]);
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
it("should not affect named renderers when setting fallback", () => {
|
|
203
|
+
const s = createState();
|
|
204
|
+
const Named = (() => null) as unknown as DataMessagePartComponent;
|
|
205
|
+
const Fallback = (() => null) as unknown as DataMessagePartComponent;
|
|
206
|
+
|
|
207
|
+
s.setDataUI("chart", Named);
|
|
208
|
+
s.setFallbackDataUI(Fallback);
|
|
209
|
+
|
|
210
|
+
expect(s.state.renderers["chart"]).toHaveLength(1);
|
|
211
|
+
expect(s.state.renderers["chart"]![0]).toBe(Named);
|
|
212
|
+
expect(s.state.fallbacks[0]).toBe(Fallback);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
|
|
132
216
|
describe("Data part component resolution", () => {
|
|
133
|
-
// Replicate the component lookup logic from MessageParts.tsx
|
|
134
217
|
const resolveDataComponent = (
|
|
135
218
|
partName: string,
|
|
136
219
|
inlineConfig?: {
|
|
@@ -138,16 +221,13 @@ describe("Data part component resolution", () => {
|
|
|
138
221
|
Fallback?: DataMessagePartComponent;
|
|
139
222
|
},
|
|
140
223
|
globalRenderers?: Record<string, DataMessagePartComponent[]>,
|
|
224
|
+
globalFallbacks?: DataMessagePartComponent[],
|
|
141
225
|
): DataMessagePartComponent | undefined => {
|
|
226
|
+
const named = globalRenderers?.[partName]?.[0];
|
|
227
|
+
if (named) return named;
|
|
142
228
|
const inlineFallback =
|
|
143
229
|
inlineConfig?.by_name?.[partName] ?? inlineConfig?.Fallback;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
// Global takes priority (first element), then inline fallback
|
|
147
|
-
if (globalRenderer && globalRenderer.length > 0) {
|
|
148
|
-
return globalRenderer[0] ?? inlineFallback;
|
|
149
|
-
}
|
|
150
|
-
return inlineFallback;
|
|
230
|
+
return globalFallbacks?.[0] ?? inlineFallback;
|
|
151
231
|
};
|
|
152
232
|
|
|
153
233
|
it("should return undefined when no config provided", () => {
|
|
@@ -219,4 +299,57 @@ describe("Data part component resolution", () => {
|
|
|
219
299
|
);
|
|
220
300
|
expect(result).toBe(Fallback);
|
|
221
301
|
});
|
|
302
|
+
|
|
303
|
+
// --- Global fallback stack resolution ---
|
|
304
|
+
|
|
305
|
+
it("should use global fallback when no name-specific renderer exists", () => {
|
|
306
|
+
const GlobalFallback = (() => null) as unknown as DataMessagePartComponent;
|
|
307
|
+
|
|
308
|
+
const result = resolveDataComponent("unknown-widget", undefined, {}, [
|
|
309
|
+
GlobalFallback,
|
|
310
|
+
]);
|
|
311
|
+
expect(result).toBe(GlobalFallback);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
it("should prefer global name-match over global fallback", () => {
|
|
315
|
+
const NamedComponent = (() => null) as unknown as DataMessagePartComponent;
|
|
316
|
+
const GlobalFallback = (() => null) as unknown as DataMessagePartComponent;
|
|
317
|
+
|
|
318
|
+
const result = resolveDataComponent(
|
|
319
|
+
"chart",
|
|
320
|
+
undefined,
|
|
321
|
+
{ chart: [NamedComponent] },
|
|
322
|
+
[GlobalFallback],
|
|
323
|
+
);
|
|
324
|
+
expect(result).toBe(NamedComponent);
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
it("should prefer the first global fallback over inline Fallback", () => {
|
|
328
|
+
const InlineFallback = (() => null) as unknown as DataMessagePartComponent;
|
|
329
|
+
const GlobalFallback = (() => null) as unknown as DataMessagePartComponent;
|
|
330
|
+
|
|
331
|
+
const result = resolveDataComponent(
|
|
332
|
+
"unknown",
|
|
333
|
+
{ Fallback: InlineFallback },
|
|
334
|
+
{},
|
|
335
|
+
[GlobalFallback],
|
|
336
|
+
);
|
|
337
|
+
expect(result).toBe(GlobalFallback);
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
it("should pick the first registered when multiple fallbacks are stacked", () => {
|
|
341
|
+
const First = (() => null) as unknown as DataMessagePartComponent;
|
|
342
|
+
const Second = (() => null) as unknown as DataMessagePartComponent;
|
|
343
|
+
|
|
344
|
+
const result = resolveDataComponent("anything", undefined, {}, [
|
|
345
|
+
First,
|
|
346
|
+
Second,
|
|
347
|
+
]);
|
|
348
|
+
expect(result).toBe(First);
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
it("should return undefined when no fallbacks of any kind exist", () => {
|
|
352
|
+
const result = resolveDataComponent("unknown", undefined, {}, []);
|
|
353
|
+
expect(result).toBeUndefined();
|
|
354
|
+
});
|
|
222
355
|
});
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
|
|
3
|
+
import { render, screen, waitFor } from "@testing-library/react";
|
|
4
|
+
import type { FC, PropsWithChildren } from "react";
|
|
5
|
+
import { describe, expect, it } from "vitest";
|
|
6
|
+
import { AssistantRuntimeProvider } from "../context";
|
|
7
|
+
import * as MessagePartPrimitive from "../primitives/messagePart";
|
|
8
|
+
import * as MessagePrimitive from "../primitives/message";
|
|
9
|
+
import * as ThreadPrimitive from "../primitives/thread";
|
|
10
|
+
import { useLocalRuntime } from "../legacy-runtime/runtime-cores/local/useLocalRuntime";
|
|
11
|
+
import type { ChatModelAdapter, ThreadMessageLike } from "../index";
|
|
12
|
+
|
|
13
|
+
const noOpAdapter: ChatModelAdapter = {
|
|
14
|
+
async *run() {},
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const initialMessages: ThreadMessageLike[] = [
|
|
18
|
+
{
|
|
19
|
+
role: "assistant",
|
|
20
|
+
content: [],
|
|
21
|
+
status: { type: "running" },
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const completeInitialMessages: ThreadMessageLike[] = [
|
|
26
|
+
{
|
|
27
|
+
role: "assistant",
|
|
28
|
+
content: [],
|
|
29
|
+
status: { type: "complete", reason: "stop" },
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const RunningText: FC = () => {
|
|
34
|
+
return (
|
|
35
|
+
<p>
|
|
36
|
+
<MessagePartPrimitive.Text />
|
|
37
|
+
<MessagePartPrimitive.InProgress>
|
|
38
|
+
<span data-testid="loading-dot">dot</span>
|
|
39
|
+
</MessagePartPrimitive.InProgress>
|
|
40
|
+
</p>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const ComponentsMessage: FC = () => {
|
|
45
|
+
return <MessagePrimitive.Parts components={{ Text: RunningText }} />;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const ChildrenMessage: FC = () => {
|
|
49
|
+
return (
|
|
50
|
+
<MessagePrimitive.Parts>
|
|
51
|
+
{({ part }) => {
|
|
52
|
+
if (part.type === "text") return <RunningText />;
|
|
53
|
+
return null;
|
|
54
|
+
}}
|
|
55
|
+
</MessagePrimitive.Parts>
|
|
56
|
+
);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const RuntimeProvider: FC<
|
|
60
|
+
PropsWithChildren<{ messages?: ThreadMessageLike[] }>
|
|
61
|
+
> = ({ children, messages = initialMessages }) => {
|
|
62
|
+
const runtime = useLocalRuntime(noOpAdapter, {
|
|
63
|
+
initialMessages: messages,
|
|
64
|
+
});
|
|
65
|
+
return (
|
|
66
|
+
<AssistantRuntimeProvider runtime={runtime}>
|
|
67
|
+
{children}
|
|
68
|
+
</AssistantRuntimeProvider>
|
|
69
|
+
);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const renderThread = (MessageComponent: FC, messages?: ThreadMessageLike[]) => {
|
|
73
|
+
render(
|
|
74
|
+
<RuntimeProvider messages={messages}>
|
|
75
|
+
<ThreadPrimitive.Messages components={{ Message: MessageComponent }} />
|
|
76
|
+
</RuntimeProvider>,
|
|
77
|
+
);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
describe("MessagePrimitive.Parts loading state", () => {
|
|
81
|
+
it("renders the loading indicator for the components API when assistant parts are empty", async () => {
|
|
82
|
+
renderThread(ComponentsMessage);
|
|
83
|
+
|
|
84
|
+
await waitFor(() => {
|
|
85
|
+
expect(screen.getByTestId("loading-dot")).toBeTruthy();
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it("renders the loading indicator for the children API when assistant parts are empty", async () => {
|
|
90
|
+
renderThread(ChildrenMessage);
|
|
91
|
+
|
|
92
|
+
await waitFor(() => {
|
|
93
|
+
expect(screen.getByTestId("loading-dot")).toBeTruthy();
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("does not render the loading indicator when assistant parts are empty but the message is complete", async () => {
|
|
98
|
+
renderThread(ChildrenMessage, completeInitialMessages);
|
|
99
|
+
|
|
100
|
+
await waitFor(() => {
|
|
101
|
+
expect(screen.queryByTestId("loading-dot")).toBeNull();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
|
|
3
|
+
import { render } from "@testing-library/react";
|
|
4
|
+
import { type FC, type PropsWithChildren, useState } from "react";
|
|
5
|
+
import { describe, expect, it } from "vitest";
|
|
6
|
+
import { useRemoteThreadListRuntime } from "@assistant-ui/core/react";
|
|
7
|
+
import { makeAdapter } from "@assistant-ui/core/tests/remote-thread-list-test-helpers";
|
|
8
|
+
import type { AssistantRuntime } from "@assistant-ui/core";
|
|
9
|
+
import { AssistantRuntimeProvider } from "../context";
|
|
10
|
+
import { useLocalRuntime } from "../legacy-runtime/runtime-cores/local/useLocalRuntime";
|
|
11
|
+
import { useAssistantRuntime } from "../legacy-runtime/hooks/AssistantContext";
|
|
12
|
+
import type { ChatModelAdapter, RemoteThreadListAdapter } from "../index";
|
|
13
|
+
|
|
14
|
+
const noOpAdapter: ChatModelAdapter = {
|
|
15
|
+
async *run() {},
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const useTestRuntimeHook = () => useLocalRuntime(noOpAdapter);
|
|
19
|
+
|
|
20
|
+
const RuntimeProvider: FC<
|
|
21
|
+
PropsWithChildren<{ adapter: RemoteThreadListAdapter }>
|
|
22
|
+
> = ({ children, adapter }) => {
|
|
23
|
+
const runtime = useRemoteThreadListRuntime({
|
|
24
|
+
runtimeHook: useTestRuntimeHook,
|
|
25
|
+
adapter,
|
|
26
|
+
});
|
|
27
|
+
return (
|
|
28
|
+
<AssistantRuntimeProvider runtime={runtime}>
|
|
29
|
+
{children}
|
|
30
|
+
</AssistantRuntimeProvider>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const RuntimeCapture: FC<{
|
|
35
|
+
runtimeRef: { current: AssistantRuntime | null };
|
|
36
|
+
}> = ({ runtimeRef }) => {
|
|
37
|
+
const runtime = useAssistantRuntime();
|
|
38
|
+
runtimeRef.current = runtime;
|
|
39
|
+
return null;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// regression for #3678: deferred unstable_Provider must not strand the runtime binder.
|
|
43
|
+
describe("useRemoteThreadListRuntime with a deferred unstable_Provider", () => {
|
|
44
|
+
it("composer.setText does not throw EMPTY_THREAD_ERROR when unstable_Provider defers children", () => {
|
|
45
|
+
const Provider: FC<PropsWithChildren> = ({ children }) => {
|
|
46
|
+
const [ready] = useState(false);
|
|
47
|
+
if (!ready) return null;
|
|
48
|
+
return <>{children}</>;
|
|
49
|
+
};
|
|
50
|
+
const adapter = makeAdapter({ unstable_Provider: Provider });
|
|
51
|
+
|
|
52
|
+
const runtimeRef: { current: AssistantRuntime | null } = { current: null };
|
|
53
|
+
render(
|
|
54
|
+
<RuntimeProvider adapter={adapter}>
|
|
55
|
+
<RuntimeCapture runtimeRef={runtimeRef} />
|
|
56
|
+
</RuntimeProvider>,
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
const runtime = runtimeRef.current;
|
|
60
|
+
expect(runtime).toBeTruthy();
|
|
61
|
+
expect(() => runtime!.thread.composer.setText("hello")).not.toThrow();
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("composer.setText still works when unstable_Provider renders children unconditionally", () => {
|
|
65
|
+
const Provider: FC<PropsWithChildren> = ({ children }) => <>{children}</>;
|
|
66
|
+
const adapter = makeAdapter({ unstable_Provider: Provider });
|
|
67
|
+
|
|
68
|
+
const runtimeRef: { current: AssistantRuntime | null } = { current: null };
|
|
69
|
+
render(
|
|
70
|
+
<RuntimeProvider adapter={adapter}>
|
|
71
|
+
<RuntimeCapture runtimeRef={runtimeRef} />
|
|
72
|
+
</RuntimeProvider>,
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
const runtime = runtimeRef.current;
|
|
76
|
+
expect(runtime).toBeTruthy();
|
|
77
|
+
expect(() => runtime!.thread.composer.setText("hello")).not.toThrow();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
@@ -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
|
+
}
|