@ulearning/ai-sdk 0.0.0-stage → 1.0.0-next.0
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/LICENSE +21 -0
- package/README.md +12 -2
- package/dist/_virtual/_rolldown/runtime.js +12 -0
- package/dist/adapters/OpenAIRealtimeVoiceAdapter.d.ts +22 -0
- package/dist/adapters/OpenAIRealtimeVoiceAdapter.d.ts.map +1 -0
- package/dist/adapters/OpenAIRealtimeVoiceAdapter.js +296 -0
- package/dist/adapters/OpenAIRealtimeVoiceAdapter.js.map +1 -0
- package/dist/assistant-transport.d.ts +33 -0
- package/dist/assistant-transport.d.ts.map +1 -0
- package/dist/assistant-transport.js +18 -0
- package/dist/assistant-transport.js.map +1 -0
- package/dist/augmentations.d.ts +33 -0
- package/dist/augmentations.d.ts.map +1 -0
- package/dist/augmentations.js +0 -0
- package/dist/context/ReadonlyStore.d.ts +4 -0
- package/dist/context/ReadonlyStore.d.ts.map +1 -0
- package/dist/context/ReadonlyStore.js +7 -0
- package/dist/context/ReadonlyStore.js.map +1 -0
- package/dist/context/index.d.ts +13 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +12 -0
- package/dist/context/providers/AttachmentByIndexProvider.d.ts +2 -0
- package/dist/context/providers/AttachmentByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/AttachmentByIndexProvider.js +2 -0
- package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts +2 -0
- package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -0
- package/dist/context/providers/ChainOfThoughtByIndicesProvider.js +2 -0
- package/dist/context/providers/MessageByIndexProvider.d.ts +2 -0
- package/dist/context/providers/MessageByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/MessageByIndexProvider.js +2 -0
- package/dist/context/providers/MessageProvider.d.ts +3 -0
- package/dist/context/providers/MessageProvider.d.ts.map +1 -0
- package/dist/context/providers/MessageProvider.js +25 -0
- package/dist/context/providers/MessageProvider.js.map +1 -0
- package/dist/context/providers/PartByIndexProvider.d.ts +2 -0
- package/dist/context/providers/PartByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/PartByIndexProvider.js +2 -0
- package/dist/context/providers/SuggestionByIndexProvider.d.ts +2 -0
- package/dist/context/providers/SuggestionByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/SuggestionByIndexProvider.js +2 -0
- package/dist/context/providers/TextMessagePartProvider.d.ts +2 -0
- package/dist/context/providers/TextMessagePartProvider.d.ts.map +1 -0
- package/dist/context/providers/TextMessagePartProvider.js +2 -0
- package/dist/context/providers/ThreadListItemProvider.d.ts +2 -0
- package/dist/context/providers/ThreadListItemProvider.d.ts.map +1 -0
- package/dist/context/providers/ThreadListItemProvider.js +2 -0
- package/dist/context/providers/ThreadViewportProvider.d.ts +6 -0
- package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -0
- package/dist/context/providers/ThreadViewportProvider.js +32 -0
- package/dist/context/providers/ThreadViewportProvider.js.map +1 -0
- package/dist/context/stores/ThreadViewport.d.ts +88 -0
- package/dist/context/stores/ThreadViewport.d.ts.map +1 -0
- package/dist/context/stores/ThreadViewport.js +130 -0
- package/dist/context/stores/ThreadViewport.js.map +1 -0
- package/dist/context/vue/ThreadViewportContext.d.ts +24 -0
- package/dist/context/vue/ThreadViewportContext.d.ts.map +1 -0
- package/dist/context/vue/ThreadViewportContext.js +10 -0
- package/dist/context/vue/ThreadViewportContext.js.map +1 -0
- package/dist/context/vue/utils/createContextHook.d.ts +11 -0
- package/dist/context/vue/utils/createContextHook.d.ts.map +1 -0
- package/dist/context/vue/utils/createContextHook.js +20 -0
- package/dist/context/vue/utils/createContextHook.js.map +1 -0
- package/dist/context/vue/utils/createContextStoreHook.d.ts +22 -0
- package/dist/context/vue/utils/createContextStoreHook.d.ts.map +1 -0
- package/dist/context/vue/utils/createContextStoreHook.js +48 -0
- package/dist/context/vue/utils/createContextStoreHook.js.map +1 -0
- package/dist/devtools/DevToolsHooks.d.ts +32 -0
- package/dist/devtools/DevToolsHooks.d.ts.map +1 -0
- package/dist/devtools/DevToolsHooks.js +84 -0
- package/dist/devtools/DevToolsHooks.js.map +1 -0
- package/dist/hooks/useMessageQuote.d.ts +17 -0
- package/dist/hooks/useMessageQuote.d.ts.map +1 -0
- package/dist/hooks/useMessageQuote.js +23 -0
- package/dist/hooks/useMessageQuote.js.map +1 -0
- package/dist/hooks/useMessageTiming.d.ts +17 -0
- package/dist/hooks/useMessageTiming.d.ts.map +1 -0
- package/dist/hooks/useMessageTiming.js +22 -0
- package/dist/hooks/useMessageTiming.js.map +1 -0
- package/dist/hooks/useToolCallElapsed.d.ts +22 -0
- package/dist/hooks/useToolCallElapsed.d.ts.map +1 -0
- package/dist/hooks/useToolCallElapsed.js +54 -0
- package/dist/hooks/useToolCallElapsed.js.map +1 -0
- package/dist/index.d.ts +155 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/internal.d.ts +9 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +24 -0
- package/dist/internal.js.map +1 -0
- package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +13 -0
- package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -0
- package/dist/legacy-runtime/AssistantRuntimeProvider.js +37 -0
- package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -0
- package/dist/mcp-apps/McpAppRenderer.d.ts +60 -0
- package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -0
- package/dist/mcp-apps/McpAppRenderer.js +223 -0
- package/dist/mcp-apps/McpAppRenderer.js.map +1 -0
- package/dist/mcp-apps/McpAppsRemoteHost.d.ts +3 -0
- package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -0
- package/dist/mcp-apps/McpAppsRemoteHost.js +101 -0
- package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -0
- package/dist/mcp-apps/app-frame.d.ts +3 -0
- package/dist/mcp-apps/app-frame.d.ts.map +1 -0
- package/dist/mcp-apps/app-frame.js +213 -0
- package/dist/mcp-apps/app-frame.js.map +1 -0
- package/dist/mcp-apps/bridge.d.ts +18 -0
- package/dist/mcp-apps/bridge.d.ts.map +1 -0
- package/dist/mcp-apps/bridge.js +319 -0
- package/dist/mcp-apps/bridge.js.map +1 -0
- package/dist/mcp-apps/csp.d.ts +4 -0
- package/dist/mcp-apps/csp.d.ts.map +1 -0
- package/dist/mcp-apps/csp.js +92 -0
- package/dist/mcp-apps/csp.js.map +1 -0
- package/dist/mcp-apps/index.d.ts +5 -0
- package/dist/mcp-apps/index.d.ts.map +1 -0
- package/dist/mcp-apps/index.js +4 -0
- package/dist/mcp-apps/types.d.ts +161 -0
- package/dist/mcp-apps/types.d.ts.map +1 -0
- package/dist/mcp-apps/types.js +6 -0
- package/dist/mcp-apps/types.js.map +1 -0
- package/dist/mcp-apps/utils.d.ts +12 -0
- package/dist/mcp-apps/utils.d.ts.map +1 -0
- package/dist/mcp-apps/utils.js +18 -0
- package/dist/mcp-apps/utils.js.map +1 -0
- package/dist/model-context/frame/useAssistantFrameHost.d.ts +35 -0
- package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -0
- package/dist/model-context/frame/useAssistantFrameHost.js +109 -0
- package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -0
- package/dist/model-context/makeAssistantVisible.d.ts +11 -0
- package/dist/model-context/makeAssistantVisible.d.ts.map +1 -0
- package/dist/model-context/makeAssistantVisible.js +102 -0
- package/dist/model-context/makeAssistantVisible.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarCopy.d.ts +45 -0
- package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarCopy.js +71 -0
- package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarEdit.d.ts +55 -0
- package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarEdit.js +47 -0
- package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +26 -0
- package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarExportMarkdown.js +39 -0
- package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +13 -0
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +28 -0
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +13 -0
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +28 -0
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts +7 -0
- package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarInteractionContext.js +8 -0
- package/dist/primitives/actionBar/ActionBarInteractionContext.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarReload.d.ts +56 -0
- package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarReload.js +48 -0
- package/dist/primitives/actionBar/ActionBarReload.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarRoot.d.ts +78 -0
- package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarRoot.js +69 -0
- package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarSpeak.d.ts +17 -0
- package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarSpeak.js +13 -0
- package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +17 -0
- package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarStopSpeaking.js +13 -0
- package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -0
- package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +15 -0
- package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -0
- package/dist/primitives/actionBar/useActionBarFloatStatus.js +24 -0
- package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -0
- package/dist/primitives/actionBar.d.ts +10 -0
- package/dist/primitives/actionBar.d.ts.map +1 -0
- package/dist/primitives/actionBar.js +25 -0
- package/dist/primitives/actionBar.js.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +47 -0
- package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreContent.js +29 -0
- package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +19 -0
- package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreItem.js +24 -0
- package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +10 -0
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.js +39 -0
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +16 -0
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +24 -0
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +17 -0
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +24 -0
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -0
- package/dist/primitives/actionBarMore/scope.d.ts +5 -0
- package/dist/primitives/actionBarMore/scope.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/scope.js +7 -0
- package/dist/primitives/actionBarMore/scope.js.map +1 -0
- package/dist/primitives/actionBarMore.d.ts +6 -0
- package/dist/primitives/actionBarMore.d.ts.map +1 -0
- package/dist/primitives/actionBarMore.js +17 -0
- package/dist/primitives/actionBarMore.js.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +17 -0
- package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalAnchor.js +24 -0
- package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts +50 -0
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalContent.js +42 -0
- package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +14 -0
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalRoot.js +35 -0
- package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +16 -0
- package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalTrigger.js +24 -0
- package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts +139 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts.map +1 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.js +9 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.js.map +1 -0
- package/dist/primitives/assistantModal/scope.d.ts +5 -0
- package/dist/primitives/assistantModal/scope.d.ts.map +1 -0
- package/dist/primitives/assistantModal/scope.js +7 -0
- package/dist/primitives/assistantModal/scope.js.map +1 -0
- package/dist/primitives/assistantModal.d.ts +5 -0
- package/dist/primitives/assistantModal.d.ts.map +1 -0
- package/dist/primitives/assistantModal.js +15 -0
- package/dist/primitives/assistantModal.js.map +1 -0
- package/dist/primitives/attachment/AttachmentName.d.ts +5 -0
- package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -0
- package/dist/primitives/attachment/AttachmentName.js +14 -0
- package/dist/primitives/attachment/AttachmentName.js.map +1 -0
- package/dist/primitives/attachment/AttachmentRemove.d.ts +17 -0
- package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -0
- package/dist/primitives/attachment/AttachmentRemove.js +15 -0
- package/dist/primitives/attachment/AttachmentRemove.js.map +1 -0
- package/dist/primitives/attachment/AttachmentRoot.d.ts +30 -0
- package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -0
- package/dist/primitives/attachment/AttachmentRoot.js +40 -0
- package/dist/primitives/attachment/AttachmentRoot.js.map +1 -0
- package/dist/primitives/attachment/AttachmentThumb.d.ts +12 -0
- package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -0
- package/dist/primitives/attachment/AttachmentThumb.js +32 -0
- package/dist/primitives/attachment/AttachmentThumb.js.map +1 -0
- package/dist/primitives/attachment.d.ts +7 -0
- package/dist/primitives/attachment.d.ts.map +1 -0
- package/dist/primitives/attachment.js +15 -0
- package/dist/primitives/attachment.js.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerCount.d.ts +22 -0
- package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerCount.js +27 -0
- package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerNext.d.ts +34 -0
- package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerNext.js +26 -0
- package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +5 -0
- package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerNumber.js +14 -0
- package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +34 -0
- package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerPrevious.js +26 -0
- package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +43 -0
- package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerRoot.js +46 -0
- package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -0
- package/dist/primitives/branchPicker.d.ts +6 -0
- package/dist/primitives/branchPicker.d.ts.map +1 -0
- package/dist/primitives/branchPicker.js +17 -0
- package/dist/primitives/branchPicker.js.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +30 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +49 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtParts.js +2 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +12 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +26 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -0
- package/dist/primitives/chainOfThought.d.ts +4 -0
- package/dist/primitives/chainOfThought.d.ts.map +1 -0
- package/dist/primitives/chainOfThought.js +13 -0
- package/dist/primitives/chainOfThought.js.map +1 -0
- package/dist/primitives/composer/ComposerAddAttachment.d.ts +26 -0
- package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerAddAttachment.js +56 -0
- package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -0
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +16 -0
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerAttachmentDropzone.js +66 -0
- package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -0
- package/dist/primitives/composer/ComposerAttachments.d.ts +2 -0
- package/dist/primitives/composer/ComposerAttachments.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerAttachments.js +2 -0
- package/dist/primitives/composer/ComposerCancel.d.ts +37 -0
- package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerCancel.js +32 -0
- package/dist/primitives/composer/ComposerCancel.js.map +1 -0
- package/dist/primitives/composer/ComposerCompactContext.d.ts +7 -0
- package/dist/primitives/composer/ComposerCompactContext.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerCompactContext.js +8 -0
- package/dist/primitives/composer/ComposerCompactContext.js.map +1 -0
- package/dist/primitives/composer/ComposerDictate.d.ts +29 -0
- package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerDictate.js +25 -0
- package/dist/primitives/composer/ComposerDictate.js.map +1 -0
- package/dist/primitives/composer/ComposerDictationTranscript.d.ts +27 -0
- package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerDictationTranscript.js +42 -0
- package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -0
- package/dist/primitives/composer/ComposerIf.d.ts +3 -0
- package/dist/primitives/composer/ComposerIf.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerIf.js +2 -0
- package/dist/primitives/composer/ComposerInput.d.ts +132 -0
- package/dist/primitives/composer/ComposerInput.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerInput.js +239 -0
- package/dist/primitives/composer/ComposerInput.js.map +1 -0
- package/dist/primitives/composer/ComposerInputPluginContext.d.ts +40 -0
- package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerInputPluginContext.js +30 -0
- package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -0
- package/dist/primitives/composer/ComposerQueue.d.ts +2 -0
- package/dist/primitives/composer/ComposerQueue.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerQueue.js +2 -0
- package/dist/primitives/composer/ComposerQuote.d.ts +58 -0
- package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerQuote.js +95 -0
- package/dist/primitives/composer/ComposerQuote.js.map +1 -0
- package/dist/primitives/composer/ComposerResume.d.ts +27 -0
- package/dist/primitives/composer/ComposerResume.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerResume.js +24 -0
- package/dist/primitives/composer/ComposerResume.js.map +1 -0
- package/dist/primitives/composer/ComposerRoot.d.ts +56 -0
- package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerRoot.js +96 -0
- package/dist/primitives/composer/ComposerRoot.js.map +1 -0
- package/dist/primitives/composer/ComposerSend.d.ts +34 -0
- package/dist/primitives/composer/ComposerSend.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerSend.js +28 -0
- package/dist/primitives/composer/ComposerSend.js.map +1 -0
- package/dist/primitives/composer/ComposerStopDictation.d.ts +29 -0
- package/dist/primitives/composer/ComposerStopDictation.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerStopDictation.js +29 -0
- package/dist/primitives/composer/ComposerStopDictation.js.map +1 -0
- package/dist/primitives/composer/composerInputSelector.d.ts +3 -0
- package/dist/primitives/composer/composerInputSelector.d.ts.map +1 -0
- package/dist/primitives/composer/composerInputSelector.js +6 -0
- package/dist/primitives/composer/composerInputSelector.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts +63 -0
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopover.js +161 -0
- package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +30 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.js +49 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts +16 -0
- package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverBack.js +34 -0
- package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts +34 -0
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +70 -0
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +27 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +41 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts +36 -0
- package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverItems.js +71 -0
- package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +48 -0
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverResource.js +67 -0
- package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +58 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +128 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -0
- package/dist/primitives/composer/trigger/detectTrigger.d.ts +18 -0
- package/dist/primitives/composer/trigger/detectTrigger.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/detectTrigger.js +39 -0
- package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -0
- package/dist/primitives/composer/trigger/index.d.ts +20 -0
- package/dist/primitives/composer/trigger/index.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/index.js +15 -0
- package/dist/primitives/composer/trigger/index.js.map +1 -0
- package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts +3 -0
- package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js +8 -0
- package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +17 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.js +25 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +30 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.js +85 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +23 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.js +88 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +37 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.js +52 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -0
- package/dist/primitives/composer/useComposerCancelWithFocus.d.ts +2 -0
- package/dist/primitives/composer/useComposerCancelWithFocus.d.ts.map +1 -0
- package/dist/primitives/composer/useComposerCancelWithFocus.js +31 -0
- package/dist/primitives/composer/useComposerCancelWithFocus.js.map +1 -0
- package/dist/primitives/composer/useComposerInputState.d.ts +11 -0
- package/dist/primitives/composer/useComposerInputState.d.ts.map +1 -0
- package/dist/primitives/composer/useComposerInputState.js +33 -0
- package/dist/primitives/composer/useComposerInputState.js.map +1 -0
- package/dist/primitives/composer/useTextareaAutosize.d.ts +13 -0
- package/dist/primitives/composer/useTextareaAutosize.d.ts.map +1 -0
- package/dist/primitives/composer/useTextareaAutosize.js +113 -0
- package/dist/primitives/composer/useTextareaAutosize.js.map +1 -0
- package/dist/primitives/composer.d.ts +73 -0
- package/dist/primitives/composer.d.ts.map +1 -0
- package/dist/primitives/composer.js +64 -0
- package/dist/primitives/composer.js.map +1 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +173 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.js +10 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -0
- package/dist/primitives/error/ErrorMessage.d.ts +12 -0
- package/dist/primitives/error/ErrorMessage.d.ts.map +1 -0
- package/dist/primitives/error/ErrorMessage.js +27 -0
- package/dist/primitives/error/ErrorMessage.js.map +1 -0
- package/dist/primitives/error/ErrorRoot.d.ts +12 -0
- package/dist/primitives/error/ErrorRoot.d.ts.map +1 -0
- package/dist/primitives/error/ErrorRoot.js +27 -0
- package/dist/primitives/error/ErrorRoot.js.map +1 -0
- package/dist/primitives/error.d.ts +3 -0
- package/dist/primitives/error.d.ts.map +1 -0
- package/dist/primitives/error.js +11 -0
- package/dist/primitives/error.js.map +1 -0
- package/dist/primitives/message/MessageAttachments.d.ts +2 -0
- package/dist/primitives/message/MessageAttachments.d.ts.map +1 -0
- package/dist/primitives/message/MessageAttachments.js +2 -0
- package/dist/primitives/message/MessageError.d.ts +7 -0
- package/dist/primitives/message/MessageError.d.ts.map +1 -0
- package/dist/primitives/message/MessageError.js +14 -0
- package/dist/primitives/message/MessageError.js.map +1 -0
- package/dist/primitives/message/MessageIf.d.ts +27 -0
- package/dist/primitives/message/MessageIf.d.ts.map +1 -0
- package/dist/primitives/message/MessageIf.js +54 -0
- package/dist/primitives/message/MessageIf.js.map +1 -0
- package/dist/primitives/message/MessageParts.d.ts +7 -0
- package/dist/primitives/message/MessageParts.d.ts.map +1 -0
- package/dist/primitives/message/MessageParts.js +40 -0
- package/dist/primitives/message/MessageParts.js.map +1 -0
- package/dist/primitives/message/MessagePartsGrouped.d.ts +153 -0
- package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -0
- package/dist/primitives/message/MessagePartsGrouped.js +114 -0
- package/dist/primitives/message/MessagePartsGrouped.js.map +1 -0
- package/dist/primitives/message/MessageRoot.d.ts +35 -0
- package/dist/primitives/message/MessageRoot.d.ts.map +1 -0
- package/dist/primitives/message/MessageRoot.js +104 -0
- package/dist/primitives/message/MessageRoot.js.map +1 -0
- package/dist/primitives/message.d.ts +13 -0
- package/dist/primitives/message.d.ts.map +1 -0
- package/dist/primitives/message.js +27 -0
- package/dist/primitives/message.js.map +1 -0
- package/dist/primitives/messagePart/MessagePartImage.d.ts +12 -0
- package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -0
- package/dist/primitives/messagePart/MessagePartImage.js +27 -0
- package/dist/primitives/messagePart/MessagePartImage.js.map +1 -0
- package/dist/primitives/messagePart/MessagePartInProgress.d.ts +2 -0
- package/dist/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -0
- package/dist/primitives/messagePart/MessagePartInProgress.js +2 -0
- package/dist/primitives/messagePart/MessagePartText.d.ts +19 -0
- package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -0
- package/dist/primitives/messagePart/MessagePartText.js +33 -0
- package/dist/primitives/messagePart/MessagePartText.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartData.d.ts +18 -0
- package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartData.js +32 -0
- package/dist/primitives/messagePart/useMessagePartData.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartFile.d.ts +19 -0
- package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartFile.js +33 -0
- package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartImage.d.ts +19 -0
- package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartImage.js +32 -0
- package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +19 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.js +32 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartSource.d.ts +39 -0
- package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartSource.js +34 -0
- package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartText.d.ts +21 -0
- package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartText.js +32 -0
- package/dist/primitives/messagePart/useMessagePartText.js.map +1 -0
- package/dist/primitives/messagePart.d.ts +5 -0
- package/dist/primitives/messagePart.d.ts.map +1 -0
- package/dist/primitives/messagePart.js +15 -0
- package/dist/primitives/messagePart.js.map +1 -0
- package/dist/primitives/queueItem/QueueItemRemove.d.ts +25 -0
- package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -0
- package/dist/primitives/queueItem/QueueItemRemove.js +23 -0
- package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -0
- package/dist/primitives/queueItem/QueueItemSteer.d.ts +25 -0
- package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -0
- package/dist/primitives/queueItem/QueueItemSteer.js +23 -0
- package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -0
- package/dist/primitives/queueItem/QueueItemText.d.ts +20 -0
- package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -0
- package/dist/primitives/queueItem/QueueItemText.js +35 -0
- package/dist/primitives/queueItem/QueueItemText.js.map +1 -0
- package/dist/primitives/queueItem.d.ts +4 -0
- package/dist/primitives/queueItem.d.ts.map +1 -0
- package/dist/primitives/queueItem.js +13 -0
- package/dist/primitives/queueItem.js.map +1 -0
- package/dist/primitives/reasoning/useScrollLock.d.ts +29 -0
- package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -0
- package/dist/primitives/reasoning/useScrollLock.js +108 -0
- package/dist/primitives/reasoning/useScrollLock.js.map +1 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +13 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +43 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +20 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +147 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -0
- package/dist/primitives/selectionToolbar.d.ts +3 -0
- package/dist/primitives/selectionToolbar.d.ts.map +1 -0
- package/dist/primitives/selectionToolbar.js +11 -0
- package/dist/primitives/selectionToolbar.js.map +1 -0
- package/dist/primitives/suggestion/SuggestionDescription.d.ts +13 -0
- package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -0
- package/dist/primitives/suggestion/SuggestionDescription.js +28 -0
- package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -0
- package/dist/primitives/suggestion/SuggestionTitle.d.ts +20 -0
- package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -0
- package/dist/primitives/suggestion/SuggestionTitle.js +35 -0
- package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -0
- package/dist/primitives/suggestion/SuggestionTrigger.d.ts +72 -0
- package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -0
- package/dist/primitives/suggestion/SuggestionTrigger.js +29 -0
- package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -0
- package/dist/primitives/suggestion.d.ts +4 -0
- package/dist/primitives/suggestion.d.ts.map +1 -0
- package/dist/primitives/suggestion.js +13 -0
- package/dist/primitives/suggestion.js.map +1 -0
- package/dist/primitives/thread/ThreadEmpty.d.ts +11 -0
- package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadEmpty.js +17 -0
- package/dist/primitives/thread/ThreadEmpty.js.map +1 -0
- package/dist/primitives/thread/ThreadIf.d.ts +19 -0
- package/dist/primitives/thread/ThreadIf.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadIf.js +33 -0
- package/dist/primitives/thread/ThreadIf.js.map +1 -0
- package/dist/primitives/thread/ThreadLoadEarlier.d.ts +23 -0
- package/dist/primitives/thread/ThreadLoadEarlier.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadLoadEarlier.js +23 -0
- package/dist/primitives/thread/ThreadLoadEarlier.js.map +1 -0
- package/dist/primitives/thread/ThreadMessages.d.ts +2 -0
- package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadMessages.js +2 -0
- package/dist/primitives/thread/ThreadRoot.d.ts +37 -0
- package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadRoot.js +84 -0
- package/dist/primitives/thread/ThreadRoot.js.map +1 -0
- package/dist/primitives/thread/ThreadRootElementContext.d.ts +4 -0
- package/dist/primitives/thread/ThreadRootElementContext.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadRootElementContext.js +8 -0
- package/dist/primitives/thread/ThreadRootElementContext.js.map +1 -0
- package/dist/primitives/thread/ThreadScrollToBottom.d.ts +22 -0
- package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadScrollToBottom.js +17 -0
- package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -0
- package/dist/primitives/thread/ThreadSuggestion.d.ts +80 -0
- package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadSuggestion.js +23 -0
- package/dist/primitives/thread/ThreadSuggestion.js.map +1 -0
- package/dist/primitives/thread/ThreadSuggestions.d.ts +2 -0
- package/dist/primitives/thread/ThreadSuggestions.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadSuggestions.js +2 -0
- package/dist/primitives/thread/ThreadViewport.d.ts +115 -0
- package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadViewport.js +96 -0
- package/dist/primitives/thread/ThreadViewport.js.map +1 -0
- package/dist/primitives/thread/ThreadViewportFooter.d.ts +13 -0
- package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadViewportFooter.js +39 -0
- package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +22 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js +51 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js.map +1 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts +5 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.js +37 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.js.map +1 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts +26 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js +139 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +27 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.js +30 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.js.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts +15 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.js +46 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.js.map +1 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts +8 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +21 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -0
- package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +32 -0
- package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -0
- package/dist/primitives/thread/useThreadViewportAutoScroll.js +74 -0
- package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -0
- package/dist/primitives/thread.d.ts +15 -0
- package/dist/primitives/thread.d.ts.map +1 -0
- package/dist/primitives/thread.js +33 -0
- package/dist/primitives/thread.js.map +1 -0
- package/dist/primitives/threadList/ThreadListItems.d.ts +2 -0
- package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -0
- package/dist/primitives/threadList/ThreadListItems.js +2 -0
- package/dist/primitives/threadList/ThreadListLoadMore.d.ts +17 -0
- package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -0
- package/dist/primitives/threadList/ThreadListLoadMore.js +13 -0
- package/dist/primitives/threadList/ThreadListLoadMore.js.map +1 -0
- package/dist/primitives/threadList/ThreadListNew.d.ts +11 -0
- package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -0
- package/dist/primitives/threadList/ThreadListNew.js +29 -0
- package/dist/primitives/threadList/ThreadListNew.js.map +1 -0
- package/dist/primitives/threadList/ThreadListRoot.d.ts +12 -0
- package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -0
- package/dist/primitives/threadList/ThreadListRoot.js +25 -0
- package/dist/primitives/threadList/ThreadListRoot.js.map +1 -0
- package/dist/primitives/threadList.d.ts +6 -0
- package/dist/primitives/threadList.d.ts.map +1 -0
- package/dist/primitives/threadList.js +16 -0
- package/dist/primitives/threadList.js.map +1 -0
- package/dist/primitives/threadListFocusGroup.d.ts +28 -0
- package/dist/primitives/threadListFocusGroup.d.ts.map +1 -0
- package/dist/primitives/threadListFocusGroup.js +64 -0
- package/dist/primitives/threadListFocusGroup.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +17 -0
- package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemArchive.js +12 -0
- package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +17 -0
- package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemDelete.js +12 -0
- package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +12 -0
- package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemRoot.js +61 -0
- package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -0
- package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemTitle.js +2 -0
- package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +13 -0
- package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemTrigger.js +35 -0
- package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +17 -0
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.js +13 -0
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -0
- package/dist/primitives/threadListItem.d.ts +7 -0
- package/dist/primitives/threadListItem.d.ts.map +1 -0
- package/dist/primitives/threadListItem.js +19 -0
- package/dist/primitives/threadListItem.js.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +47 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +48 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +19 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +24 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +19 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +45 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +16 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +24 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +17 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +42 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -0
- package/dist/primitives/threadListItemMore/scope.d.ts +5 -0
- package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/scope.js +7 -0
- package/dist/primitives/threadListItemMore/scope.js.map +1 -0
- package/dist/primitives/threadListItemMore.d.ts +6 -0
- package/dist/primitives/threadListItemMore.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore.js +17 -0
- package/dist/primitives/threadListItemMore.js.map +1 -0
- package/dist/sandbox-host/SandboxHost.d.ts +38 -0
- package/dist/sandbox-host/SandboxHost.d.ts.map +1 -0
- package/dist/sandbox-host/SandboxHost.js +146 -0
- package/dist/sandbox-host/SandboxHost.js.map +1 -0
- package/dist/unstable/useComposerInput.d.ts +87 -0
- package/dist/unstable/useComposerInput.d.ts.map +1 -0
- package/dist/unstable/useComposerInput.js +77 -0
- package/dist/unstable/useComposerInput.js.map +1 -0
- package/dist/unstable/useComposerInputHistory.d.ts +27 -0
- package/dist/unstable/useComposerInputHistory.d.ts.map +1 -0
- package/dist/unstable/useComposerInputHistory.js +125 -0
- package/dist/unstable/useComposerInputHistory.js.map +1 -0
- package/dist/unstable/useLiveCompletionAdapter.d.ts +52 -0
- package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -0
- package/dist/unstable/useLiveCompletionAdapter.js +184 -0
- package/dist/unstable/useLiveCompletionAdapter.js.map +1 -0
- package/dist/unstable/useMentionAdapter.d.ts +95 -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/useMessageStallDetection.d.ts +30 -0
- package/dist/unstable/useMessageStallDetection.d.ts.map +1 -0
- package/dist/unstable/useMessageStallDetection.js +92 -0
- package/dist/unstable/useMessageStallDetection.js.map +1 -0
- package/dist/unstable/useModelContextSnapshot.d.ts +32 -0
- package/dist/unstable/useModelContextSnapshot.d.ts.map +1 -0
- package/dist/unstable/useModelContextSnapshot.js +46 -0
- package/dist/unstable/useModelContextSnapshot.js.map +1 -0
- package/dist/unstable/useSlashCommandAdapter.d.ts +53 -0
- package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -0
- package/dist/unstable/useSlashCommandAdapter.js +84 -0
- package/dist/unstable/useSlashCommandAdapter.js.map +1 -0
- package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +12 -0
- package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -0
- package/dist/unstable/webmcp/WebMcpRegistrationResource.js +47 -0
- package/dist/unstable/webmcp/WebMcpRegistrationResource.js.map +1 -0
- package/dist/unstable/webmcp/convertTools.d.ts +18 -0
- package/dist/unstable/webmcp/convertTools.d.ts.map +1 -0
- package/dist/unstable/webmcp/convertTools.js +160 -0
- package/dist/unstable/webmcp/convertTools.js.map +1 -0
- package/dist/unstable/webmcp/useWebMcpProvider.d.ts +23 -0
- package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -0
- package/dist/unstable/webmcp/useWebMcpProvider.js +111 -0
- package/dist/unstable/webmcp/useWebMcpProvider.js.map +1 -0
- package/dist/unstable/webmcp/webmcp-host.d.ts +36 -0
- package/dist/unstable/webmcp/webmcp-host.d.ts.map +1 -0
- package/dist/unstable/webmcp/webmcp-host.js +28 -0
- package/dist/unstable/webmcp/webmcp-host.js.map +1 -0
- package/dist/utils/Primitive.d.ts +28 -0
- package/dist/utils/Primitive.d.ts.map +1 -0
- package/dist/utils/Primitive.js +229 -0
- package/dist/utils/Primitive.js.map +1 -0
- package/dist/utils/RequireAtLeastOne.d.ts +4 -0
- package/dist/utils/RequireAtLeastOne.d.ts.map +1 -0
- package/dist/utils/RequireAtLeastOne.js +0 -0
- package/dist/utils/createActionButton.d.ts +18 -0
- package/dist/utils/createActionButton.d.ts.map +1 -0
- package/dist/utils/createActionButton.js +39 -0
- package/dist/utils/createActionButton.js.map +1 -0
- package/dist/utils/getSelectionMessageId.d.ts +2 -0
- package/dist/utils/getSelectionMessageId.d.ts.map +1 -0
- package/dist/utils/getSelectionMessageId.js +84 -0
- package/dist/utils/getSelectionMessageId.js.map +1 -0
- package/dist/utils/hooks/useManagedRef.d.ts +2 -0
- package/dist/utils/hooks/useManagedRef.d.ts.map +1 -0
- package/dist/utils/hooks/useManagedRef.js +15 -0
- package/dist/utils/hooks/useManagedRef.js.map +1 -0
- package/dist/utils/hooks/useMediaQuery.d.ts +3 -0
- package/dist/utils/hooks/useMediaQuery.d.ts.map +1 -0
- package/dist/utils/hooks/useMediaQuery.js +33 -0
- package/dist/utils/hooks/useMediaQuery.js.map +1 -0
- package/dist/utils/hooks/useOnScrollToBottom.d.ts +7 -0
- package/dist/utils/hooks/useOnScrollToBottom.d.ts.map +1 -0
- package/dist/utils/hooks/useOnScrollToBottom.js +15 -0
- package/dist/utils/hooks/useOnScrollToBottom.js.map +1 -0
- package/dist/utils/hooks/useSizeHandle.d.ts +12 -0
- package/dist/utils/hooks/useSizeHandle.d.ts.map +1 -0
- package/dist/utils/hooks/useSizeHandle.js +33 -0
- package/dist/utils/hooks/useSizeHandle.js.map +1 -0
- package/dist/utils/isCompositionKey.d.ts +2 -0
- package/dist/utils/isCompositionKey.d.ts.map +1 -0
- package/dist/utils/isCompositionKey.js +5 -0
- package/dist/utils/isCompositionKey.js.map +1 -0
- package/dist/utils/smooth/SmoothContext.d.ts +117 -0
- package/dist/utils/smooth/SmoothContext.d.ts.map +1 -0
- package/dist/utils/smooth/SmoothContext.js +40 -0
- package/dist/utils/smooth/SmoothContext.js.map +1 -0
- package/dist/utils/smooth/useSmooth.d.ts +63 -0
- package/dist/utils/smooth/useSmooth.d.ts.map +1 -0
- package/dist/utils/smooth/useSmooth.js +144 -0
- package/dist/utils/smooth/useSmooth.js.map +1 -0
- package/dist/utils/useIsomorphicLayoutEffect.d.ts +2 -0
- package/dist/utils/useIsomorphicLayoutEffect.d.ts.map +1 -0
- package/dist/utils/useIsomorphicLayoutEffect.js +1 -0
- package/package.json +115 -3
- package/src/adapters/OpenAIRealtimeVoiceAdapter.test.ts +761 -0
- package/src/adapters/OpenAIRealtimeVoiceAdapter.ts +388 -0
- package/src/assistant-transport.ts +98 -0
- package/src/augmentations.ts +35 -0
- package/src/context/ReadonlyStore.ts +7 -0
- package/src/context/index.ts +23 -0
- package/src/context/providers/AttachmentByIndexProvider.tsx +6 -0
- package/src/context/providers/ChainOfThoughtByIndicesProvider.tsx +3 -0
- package/src/context/providers/MessageByIndexProvider.tsx +3 -0
- package/src/context/providers/MessageProvider.tsx +34 -0
- package/src/context/providers/PartByIndexProvider.tsx +3 -0
- package/src/context/providers/SuggestionByIndexProvider.tsx +6 -0
- package/src/context/providers/TextMessagePartProvider.tsx +3 -0
- package/src/context/providers/ThreadListItemProvider.tsx +6 -0
- package/src/context/providers/ThreadViewportProvider.tsx +49 -0
- package/src/context/providers/vue-providers.test.tsx +326 -0
- package/src/context/stores/ThreadViewport.test.ts +29 -0
- package/src/context/stores/ThreadViewport.ts +278 -0
- package/src/context/vue/ThreadViewportContext.ts +22 -0
- package/src/context/vue/utils/createContextHook.ts +26 -0
- package/src/context/vue/utils/createContextStoreHook.ts +93 -0
- package/src/devtools/DevToolsHooks.test.ts +40 -0
- package/src/devtools/DevToolsHooks.ts +142 -0
- package/src/hooks/message-readers.test.ts +128 -0
- package/src/hooks/useMessageQuote.ts +25 -0
- package/src/hooks/useMessageTiming.ts +26 -0
- package/src/hooks/useToolCallElapsed.test.tsx +172 -0
- package/src/hooks/useToolCallElapsed.ts +65 -0
- package/src/index.ts +623 -0
- package/src/internal.ts +33 -0
- package/src/legacy-runtime/AssistantRuntimeProvider.tsx +61 -0
- package/src/mcp-apps/McpAppRenderer.composer.test.tsx +129 -0
- package/src/mcp-apps/McpAppRenderer.test.tsx +906 -0
- package/src/mcp-apps/McpAppRenderer.tsx +411 -0
- package/src/mcp-apps/McpAppsRemoteHost.concurrent.test.tsx +226 -0
- package/src/mcp-apps/McpAppsRemoteHost.test.ts +152 -0
- package/src/mcp-apps/McpAppsRemoteHost.ts +160 -0
- package/src/mcp-apps/app-frame.test.tsx +648 -0
- package/src/mcp-apps/app-frame.tsx +351 -0
- package/src/mcp-apps/bridge.test.ts +836 -0
- package/src/mcp-apps/bridge.ts +538 -0
- package/src/mcp-apps/csp.test.ts +112 -0
- package/src/mcp-apps/csp.ts +124 -0
- package/src/mcp-apps/index.ts +23 -0
- package/src/mcp-apps/types.ts +176 -0
- package/src/mcp-apps/utils.ts +23 -0
- package/src/model-context/frame/SPEC_AssistantFrame.md +105 -0
- package/src/model-context/frame/useAssistantFrameHost.detach.test.tsx +155 -0
- package/src/model-context/frame/useAssistantFrameHost.reload.test.tsx +116 -0
- package/src/model-context/frame/useAssistantFrameHost.test.tsx +43 -0
- package/src/model-context/frame/useAssistantFrameHost.ts +137 -0
- package/src/model-context/makeAssistantVisible.test.tsx +460 -0
- package/src/model-context/makeAssistantVisible.tsx +184 -0
- package/src/model-context/registry/SPEC_ModelContextRegistry.md +40 -0
- package/src/primitives/actionBar/ActionBarCopy.test.tsx +28 -0
- package/src/primitives/actionBar/ActionBarCopy.tsx +100 -0
- package/src/primitives/actionBar/ActionBarEdit.ts +63 -0
- package/src/primitives/actionBar/ActionBarExportMarkdown.test.tsx +83 -0
- package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +65 -0
- package/src/primitives/actionBar/ActionBarFeedback.test.tsx +59 -0
- package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +48 -0
- package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +48 -0
- package/src/primitives/actionBar/ActionBarInteractionContext.ts +13 -0
- package/src/primitives/actionBar/ActionBarReload.ts +64 -0
- package/src/primitives/actionBar/ActionBarRoot.tsx +119 -0
- package/src/primitives/actionBar/ActionBarSpeak.ts +25 -0
- package/src/primitives/actionBar/ActionBarStopSpeaking.tsx +24 -0
- package/src/primitives/actionBar/useActionBarFloatStatus.ts +48 -0
- package/src/primitives/actionBar.ts +9 -0
- package/src/primitives/actionBarMore/ActionBarMoreContent.tsx +45 -0
- package/src/primitives/actionBarMore/ActionBarMoreItem.tsx +22 -0
- package/src/primitives/actionBarMore/ActionBarMoreRoot.test.ts +70 -0
- package/src/primitives/actionBarMore/ActionBarMoreRoot.tsx +46 -0
- package/src/primitives/actionBarMore/ActionBarMoreSeparator.tsx +26 -0
- package/src/primitives/actionBarMore/ActionBarMoreTrigger.tsx +26 -0
- package/src/primitives/actionBarMore/scope.ts +6 -0
- package/src/primitives/actionBarMore.ts +5 -0
- package/src/primitives/assistantModal/AssistantModalAnchor.tsx +22 -0
- package/src/primitives/assistantModal/AssistantModalContent.tsx +85 -0
- package/src/primitives/assistantModal/AssistantModalRoot.test.tsx +153 -0
- package/src/primitives/assistantModal/AssistantModalRoot.tsx +48 -0
- package/src/primitives/assistantModal/AssistantModalTrigger.test.tsx +65 -0
- package/src/primitives/assistantModal/AssistantModalTrigger.tsx +22 -0
- package/src/primitives/assistantModal/popoverRenderPrimitives.ts +6 -0
- package/src/primitives/assistantModal/scope.ts +6 -0
- package/src/primitives/assistantModal.ts +4 -0
- package/src/primitives/attachment/AttachmentName.tsx +16 -0
- package/src/primitives/attachment/AttachmentRemove.ts +28 -0
- package/src/primitives/attachment/AttachmentRoot.tsx +52 -0
- package/src/primitives/attachment/AttachmentThumb.test.tsx +179 -0
- package/src/primitives/attachment/AttachmentThumb.tsx +41 -0
- package/src/primitives/attachment.ts +7 -0
- package/src/primitives/branchPicker/BranchPickerCount.tsx +33 -0
- package/src/primitives/branchPicker/BranchPickerNext.ts +42 -0
- package/src/primitives/branchPicker/BranchPickerNumber.tsx +16 -0
- package/src/primitives/branchPicker/BranchPickerPrevious.ts +42 -0
- package/src/primitives/branchPicker/BranchPickerRoot.tsx +64 -0
- package/src/primitives/branchPicker.ts +5 -0
- package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.test.tsx +116 -0
- package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.tsx +63 -0
- package/src/primitives/chainOfThought/ChainOfThoughtParts.tsx +3 -0
- package/src/primitives/chainOfThought/ChainOfThoughtRoot.tsx +33 -0
- package/src/primitives/chainOfThought.ts +14 -0
- package/src/primitives/composer/ComposerAddAttachment.test.tsx +101 -0
- package/src/primitives/composer/ComposerAddAttachment.thread-scope.test.tsx +225 -0
- package/src/primitives/composer/ComposerAddAttachment.ts +88 -0
- package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +351 -0
- package/src/primitives/composer/ComposerAttachmentDropzone.tsx +109 -0
- package/src/primitives/composer/ComposerAttachments.tsx +6 -0
- package/src/primitives/composer/ComposerCancel.focus.test.tsx +324 -0
- package/src/primitives/composer/ComposerCancel.ts +52 -0
- package/src/primitives/composer/ComposerCompactContext.tsx +10 -0
- package/src/primitives/composer/ComposerDictate.ts +37 -0
- package/src/primitives/composer/ComposerDictationTranscript.tsx +55 -0
- package/src/primitives/composer/ComposerDisabledThread.test.tsx +118 -0
- package/src/primitives/composer/ComposerIf.ts +4 -0
- package/src/primitives/composer/ComposerInput.focus-on-run-start.test.tsx +145 -0
- package/src/primitives/composer/ComposerInput.test.tsx +712 -0
- package/src/primitives/composer/ComposerInput.text-change.test.tsx +77 -0
- package/src/primitives/composer/ComposerInput.thread-scope.test.tsx +83 -0
- package/src/primitives/composer/ComposerInput.tsx +462 -0
- package/src/primitives/composer/ComposerInputPluginContext.tsx +80 -0
- package/src/primitives/composer/ComposerPreview.native.test.ts +157 -0
- package/src/primitives/composer/ComposerQueue.tsx +3 -0
- package/src/primitives/composer/ComposerQuote.tsx +143 -0
- package/src/primitives/composer/ComposerResume.ts +35 -0
- package/src/primitives/composer/ComposerRoot.test.tsx +429 -0
- package/src/primitives/composer/ComposerRoot.tsx +155 -0
- package/src/primitives/composer/ComposerSend.ts +43 -0
- package/src/primitives/composer/ComposerStopDictation.ts +43 -0
- package/src/primitives/composer/composerInputSelector.ts +4 -0
- package/src/primitives/composer/trigger/TriggerPopover.native.test.ts +309 -0
- package/src/primitives/composer/trigger/TriggerPopover.tsx +248 -0
- package/src/primitives/composer/trigger/TriggerPopoverAction.tsx +61 -0
- package/src/primitives/composer/trigger/TriggerPopoverBack.tsx +51 -0
- package/src/primitives/composer/trigger/TriggerPopoverBehavior.test.tsx +113 -0
- package/src/primitives/composer/trigger/TriggerPopoverCategories.tsx +123 -0
- package/src/primitives/composer/trigger/TriggerPopoverDirective.tsx +55 -0
- package/src/primitives/composer/trigger/TriggerPopoverExports.test.ts +61 -0
- package/src/primitives/composer/trigger/TriggerPopoverItems.tsx +121 -0
- package/src/primitives/composer/trigger/TriggerPopoverResource.ts +146 -0
- package/src/primitives/composer/trigger/TriggerPopoverRootContext.test.tsx +159 -0
- package/src/primitives/composer/trigger/TriggerPopoverRootContext.tsx +236 -0
- package/src/primitives/composer/trigger/detectTrigger.test.ts +197 -0
- package/src/primitives/composer/trigger/detectTrigger.ts +78 -0
- package/src/primitives/composer/trigger/index.ts +33 -0
- package/src/primitives/composer/trigger/matchesTriggerItemQuery.test.ts +52 -0
- package/src/primitives/composer/trigger/matchesTriggerItemQuery.ts +13 -0
- package/src/primitives/composer/trigger/triggerDetectionResource.ts +47 -0
- package/src/primitives/composer/trigger/triggerKeyboardResource.test.ts +233 -0
- package/src/primitives/composer/trigger/triggerKeyboardResource.ts +150 -0
- package/src/primitives/composer/trigger/triggerNavigationResource.ts +129 -0
- package/src/primitives/composer/trigger/triggerSelectionResource.test.ts +173 -0
- package/src/primitives/composer/trigger/triggerSelectionResource.ts +133 -0
- package/src/primitives/composer/useAuiState.composer.test.tsx +93 -0
- package/src/primitives/composer/useComposerCancelWithFocus.ts +51 -0
- package/src/primitives/composer/useComposerInputState.ts +58 -0
- package/src/primitives/composer/useTextareaAutosize.ts +140 -0
- package/src/primitives/composer.ts +88 -0
- package/src/primitives/dropdownMenuRenderPrimitives.test.tsx +64 -0
- package/src/primitives/dropdownMenuRenderPrimitives.ts +14 -0
- package/src/primitives/error/ErrorMessage.tsx +39 -0
- package/src/primitives/error/ErrorRoot.tsx +34 -0
- package/src/primitives/error.ts +2 -0
- package/src/primitives/message/MessageAttachments.tsx +6 -0
- package/src/primitives/message/MessageError.ts +13 -0
- package/src/primitives/message/MessageIf.test.tsx +83 -0
- package/src/primitives/message/MessageIf.ts +110 -0
- package/src/primitives/message/MessageParts.test.tsx +119 -0
- package/src/primitives/message/MessageParts.tsx +64 -0
- package/src/primitives/message/MessagePartsGrouped.test.tsx +682 -0
- package/src/primitives/message/MessagePartsGrouped.tool-interaction.test.tsx +97 -0
- package/src/primitives/message/MessagePartsGrouped.tsx +374 -0
- package/src/primitives/message/MessageRoot.anchors.test.ts +167 -0
- package/src/primitives/message/MessageRoot.test.tsx +272 -0
- package/src/primitives/message/MessageRoot.tsx +145 -0
- package/src/primitives/message.ts +15 -0
- package/src/primitives/messagePart/MessagePartImage.tsx +29 -0
- package/src/primitives/messagePart/MessagePartInProgress.ts +3 -0
- package/src/primitives/messagePart/MessagePartText.test.tsx +114 -0
- package/src/primitives/messagePart/MessagePartText.tsx +54 -0
- package/src/primitives/messagePart/useMessagePartData.test.ts +118 -0
- package/src/primitives/messagePart/useMessagePartData.ts +34 -0
- package/src/primitives/messagePart/useMessagePartFile.ts +42 -0
- package/src/primitives/messagePart/useMessagePartImage.ts +41 -0
- package/src/primitives/messagePart/useMessagePartReasoning.ts +42 -0
- package/src/primitives/messagePart/useMessagePartSource.ts +43 -0
- package/src/primitives/messagePart/useMessagePartText.ts +45 -0
- package/src/primitives/messagePart.ts +4 -0
- package/src/primitives/native-action-bindings.test.ts +181 -0
- package/src/primitives/native-display-bindings.test.ts +159 -0
- package/src/primitives/queueItem/QueueItemRemove.ts +36 -0
- package/src/primitives/queueItem/QueueItemSteer.ts +36 -0
- package/src/primitives/queueItem/QueueItemText.tsx +48 -0
- package/src/primitives/queueItem.ts +3 -0
- package/src/primitives/reasoning/useScrollLock.test.tsx +296 -0
- package/src/primitives/reasoning/useScrollLock.ts +160 -0
- package/src/primitives/selectionToolbar/SelectionToolbarQuote.tsx +56 -0
- package/src/primitives/selectionToolbar/SelectionToolbarRoot.test.tsx +439 -0
- package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +206 -0
- package/src/primitives/selectionToolbar.ts +8 -0
- package/src/primitives/suggestion/SuggestionDescription.tsx +35 -0
- package/src/primitives/suggestion/SuggestionTitle.tsx +43 -0
- package/src/primitives/suggestion/SuggestionTrigger.ts +59 -0
- package/src/primitives/suggestion.ts +3 -0
- package/src/primitives/thread/ThreadEmpty.ts +19 -0
- package/src/primitives/thread/ThreadIf.ts +42 -0
- package/src/primitives/thread/ThreadLoadEarlier.tsx +34 -0
- package/src/primitives/thread/ThreadMessages.tsx +9 -0
- package/src/primitives/thread/ThreadRoot.test.tsx +419 -0
- package/src/primitives/thread/ThreadRoot.tsx +119 -0
- package/src/primitives/thread/ThreadRootElementContext.ts +9 -0
- package/src/primitives/thread/ThreadScrollToBottom.ts +45 -0
- package/src/primitives/thread/ThreadSuggestion.ts +55 -0
- package/src/primitives/thread/ThreadSuggestions.tsx +7 -0
- package/src/primitives/thread/ThreadViewport.thread-scope.test.tsx +58 -0
- package/src/primitives/thread/ThreadViewport.tsx +219 -0
- package/src/primitives/thread/ThreadViewportFooter.tsx +46 -0
- package/src/primitives/thread/topAnchor/computeTopAnchorSlack.test.ts +131 -0
- package/src/primitives/thread/topAnchor/computeTopAnchorSlack.ts +94 -0
- package/src/primitives/thread/topAnchor/createReserveObservers.ts +50 -0
- package/src/primitives/thread/topAnchor/mountTopAnchorReserve.test.ts +570 -0
- package/src/primitives/thread/topAnchor/mountTopAnchorReserve.ts +221 -0
- package/src/primitives/thread/topAnchor/topAnchorTurn.test.ts +115 -0
- package/src/primitives/thread/topAnchor/topAnchorTurn.ts +59 -0
- package/src/primitives/thread/topAnchor/topAnchorUtils.ts +58 -0
- package/src/primitives/thread/topAnchor/useTopAnchorReserve.ts +23 -0
- package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +1887 -0
- package/src/primitives/thread/useThreadViewportAutoScroll.ts +140 -0
- package/src/primitives/thread.ts +17 -0
- package/src/primitives/threadList/ThreadListItems.tsx +6 -0
- package/src/primitives/threadList/ThreadListLoadMore.tsx +25 -0
- package/src/primitives/threadList/ThreadListNew.tsx +47 -0
- package/src/primitives/threadList/ThreadListRoot.tsx +29 -0
- package/src/primitives/threadList.ts +5 -0
- package/src/primitives/threadListFocusGroup.ts +91 -0
- package/src/primitives/threadListItem/ThreadListItemArchive.ts +23 -0
- package/src/primitives/threadListItem/ThreadListItemDelete.ts +23 -0
- package/src/primitives/threadListItem/ThreadListItemRoot.tsx +100 -0
- package/src/primitives/threadListItem/ThreadListItemTitle.test.tsx +63 -0
- package/src/primitives/threadListItem/ThreadListItemTitle.tsx +3 -0
- package/src/primitives/threadListItem/ThreadListItemTrigger.tsx +51 -0
- package/src/primitives/threadListItem/ThreadListItemUnarchive.test.tsx +55 -0
- package/src/primitives/threadListItem/ThreadListItemUnarchive.ts +25 -0
- package/src/primitives/threadListItem/ThreadListKeyboardNav.test.tsx +348 -0
- package/src/primitives/threadListItem.ts +6 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreContent.tsx +81 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreItem.tsx +22 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreRoot.tsx +79 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreSeparator.tsx +26 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreTrigger.tsx +62 -0
- package/src/primitives/threadListItemMore/scope.ts +6 -0
- package/src/primitives/threadListItemMore.ts +5 -0
- package/src/sandbox-host/SandboxHost.test.tsx +579 -0
- package/src/sandbox-host/SandboxHost.tsx +271 -0
- package/src/tests/DataRenderers.test.tsx +218 -0
- package/src/tests/MessageParts.loading.test.tsx +105 -0
- package/src/tests/MessageParts.rendererOptions.test.tsx +125 -0
- package/src/tests/RemoteThreadListRuntime.adapterProvider.test.tsx +187 -0
- package/src/tests/RemoteThreadListRuntime.deferredProvider.test.tsx +99 -0
- package/src/tests/RemoteThreadListRuntime.reloadMainThread.test.tsx +113 -0
- package/src/tests/augmentations.test.ts +95 -0
- package/src/tests/generative-ui.primitive.test.tsx +176 -0
- package/src/tests/generative-ui.test.tsx +130 -0
- package/src/tests/in-memory-thread-list.test.tsx +142 -0
- package/src/tests/local-runtime-queue.test.tsx +506 -0
- package/src/tests/messageAction.ts +67 -0
- package/src/tests/messagePartSwitchRace.test.tsx +222 -0
- package/src/tests/messagePartTypeMismatch.test.tsx +153 -0
- package/src/tests/remote-thread-list-test-helpers.ts +40 -0
- package/src/tests/setup.ts +5 -0
- package/src/tests/threadListItemIsRunning.test.tsx +215 -0
- package/src/tests/threadMessageById.test.tsx +293 -0
- package/src/tests/toolCallTiming.test.tsx +324 -0
- package/src/tests/vue.ts +124 -0
- package/src/unstable/useComposerInput.test.tsx +201 -0
- package/src/unstable/useComposerInput.ts +125 -0
- package/src/unstable/useComposerInputHistory.test.tsx +207 -0
- package/src/unstable/useComposerInputHistory.thread-scope.test.tsx +128 -0
- package/src/unstable/useComposerInputHistory.ts +163 -0
- package/src/unstable/useLiveCompletionAdapter.test.tsx +760 -0
- package/src/unstable/useLiveCompletionAdapter.ts +217 -0
- package/src/unstable/useMentionAdapter.test.tsx +380 -0
- package/src/unstable/useMentionAdapter.ts +276 -0
- package/src/unstable/useMessageStallDetection.lifecycle.test.ts +120 -0
- package/src/unstable/useMessageStallDetection.test.tsx +59 -0
- package/src/unstable/useMessageStallDetection.ts +147 -0
- package/src/unstable/useModelContextSnapshot.test.tsx +181 -0
- package/src/unstable/useModelContextSnapshot.ts +85 -0
- package/src/unstable/useSlashCommandAdapter.test.tsx +172 -0
- package/src/unstable/useSlashCommandAdapter.ts +145 -0
- package/src/unstable/webmcp/WebMcpRegistrationResource.test.ts +150 -0
- package/src/unstable/webmcp/WebMcpRegistrationResource.ts +92 -0
- package/src/unstable/webmcp/__tests__/webmcp.fake.tsx +177 -0
- package/src/unstable/webmcp/convertTools.test.ts +605 -0
- package/src/unstable/webmcp/convertTools.ts +256 -0
- package/src/unstable/webmcp/useWebMcpProvider.test.tsx +543 -0
- package/src/unstable/webmcp/useWebMcpProvider.ts +185 -0
- package/src/unstable/webmcp/webmcp-host.test.ts +142 -0
- package/src/unstable/webmcp/webmcp-host.ts +83 -0
- package/src/utils/Primitive.test.tsx +551 -0
- package/src/utils/Primitive.tsx +363 -0
- package/src/utils/RequireAtLeastOne.ts +7 -0
- package/src/utils/createActionButton.child-cancel.test.tsx +82 -0
- package/src/utils/createActionButton.test.tsx +114 -0
- package/src/utils/createActionButton.tsx +75 -0
- package/src/utils/getSelectionMessageId.test.ts +609 -0
- package/src/utils/getSelectionMessageId.ts +133 -0
- package/src/utils/hooks/useManagedRef.ts +19 -0
- package/src/utils/hooks/useMediaQuery.test.tsx +60 -0
- package/src/utils/hooks/useMediaQuery.ts +44 -0
- package/src/utils/hooks/useOnScrollToBottom.ts +23 -0
- package/src/utils/hooks/useSizeHandle.ts +39 -0
- package/src/utils/isCompositionKey.ts +5 -0
- package/src/utils/smooth/SmoothContext.test.tsx +224 -0
- package/src/utils/smooth/SmoothContext.tsx +82 -0
- package/src/utils/smooth/useSmooth.test.tsx +499 -0
- package/src/utils/smooth/useSmooth.ts +266 -0
- package/src/utils/useIsomorphicLayoutEffect.test.tsx +25 -0
- package/src/utils/useIsomorphicLayoutEffect.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useComposerInputHistory.js","names":[],"sources":["../../src/unstable/useComposerInputHistory.ts"],"sourcesContent":["\"use client\";\n\nimport { nextTick } from \"vue\";\nimport { useIsomorphicLayoutEffect } from \"@ulearning/ai-store/internal\";\nimport { useAui } from \"@ulearning/ai-store\";\nimport { flushTapSync } from \"@ulearning/ai-tap\";\nimport type { ThreadMessage } from \"@ulearning/ai-core\";\nimport { getThreadMessageText } from \"@ulearning/ai-core/internal\";\nimport { useTriggerPopoverRootContextOptional } from \"../primitives/composer/trigger/TriggerPopoverRootContext\";\n\n/** @deprecated Experimental since 2026-06-11. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_ComposerInputHistory = {\n /** Keydown handler to spread onto `ComposerPrimitive.Input`. */\n onKeyDown: (event: KeyboardEvent) => void;\n};\n\ntype BrowseState = {\n cursor: number;\n draftSnapshot: string;\n lastRecalledText: string;\n};\n\nconst deriveHistory = (messages: readonly ThreadMessage[]): string[] => {\n const entries: string[] = [];\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]!;\n if (message.role !== \"user\") continue;\n const text = getThreadMessageText(message).trim();\n if (!text) continue;\n if (entries[entries.length - 1] === text) continue;\n entries.push(text);\n }\n return entries;\n};\n\nconst isOnFirstLine = (value: string, caret: number): boolean =>\n !value.slice(0, caret).includes(\"\\n\");\n\nconst isOnLastLine = (value: string, caret: number): boolean =>\n !value.slice(caret).includes(\"\\n\");\n\n/**\n * Terminal-style input history for the thread composer: ArrowUp on an\n * empty draft recalls previously sent user messages (newest first),\n * ArrowDown steps back toward the newest and finally restores the draft\n * that was being typed when browsing started.\n *\n * Recall only triggers when the caret is on the first/last line with no\n * selection, so multi-line editing keeps native arrow behavior. The\n * handler yields to an open mention/slash popover, to IME composition,\n * to modifier keys, and to consumer handlers that already called\n * `preventDefault`. It is inert on edit composers.\n *\n * @deprecated Experimental since 2026-06-11. Not scheduled for removal; the API may change in any release.\n *\n * @example\n * ```tsx\n * const history = unstable_useComposerInputHistory();\n * <ComposerPrimitive.Input {...history} />\n * ```\n */\nexport function unstable_useComposerInputHistory(): Unstable_ComposerInputHistory {\n const aui = useAui();\n const popoverCtx = useTriggerPopoverRootContextOptional();\n const browseRef: { current: BrowseState | null } = { current: null };\n let generation = 0;\n\n useIsomorphicLayoutEffect(() => {\n if (aui.composer.getState().type !== \"thread\" || !aui.optional.threads)\n return undefined;\n\n return aui.on(\"threads.selectionChanged\", () => {\n generation++;\n browseRef.current = null;\n });\n }, []);\n useIsomorphicLayoutEffect(\n () => () => {\n generation++;\n browseRef.current = null;\n },\n [],\n );\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.defaultPrevented) return;\n if (e.key !== \"ArrowUp\" && e.key !== \"ArrowDown\") return;\n if (e.isComposing || e.keyCode === 229) return;\n if (e.shiftKey || e.ctrlKey || e.metaKey || e.altKey) return;\n if (popoverCtx && popoverCtx.getActiveAria() !== null) return;\n if (aui.composer.getState().type !== \"thread\") return;\n\n const textarea = e.currentTarget;\n if (!(textarea instanceof HTMLTextAreaElement)) return;\n const { selectionStart, selectionEnd, value } = textarea;\n if (selectionStart !== selectionEnd) return;\n\n if (browseRef.current && value !== browseRef.current.lastRecalledText) {\n browseRef.current = null;\n }\n const browse = browseRef.current;\n\n const commitText = (text: string): void => {\n flushTapSync(() => aui.composer.setText(text, { origin: \"recall\" }));\n const owner = generation;\n void nextTick(() => {\n if (owner === generation && textarea.isConnected)\n textarea.setSelectionRange(text.length, text.length);\n });\n e.preventDefault();\n };\n\n const recall = (\n history: readonly string[],\n cursor: number,\n draftSnapshot: string,\n ): void => {\n const entry = history[cursor];\n if (entry === undefined) {\n e.preventDefault();\n return;\n }\n browseRef.current = { cursor, draftSnapshot, lastRecalledText: entry };\n commitText(entry);\n };\n\n if (e.key === \"ArrowUp\") {\n if (!isOnFirstLine(value, selectionStart)) return;\n\n if (!browse) {\n if (value.trim() !== \"\") return;\n const history = deriveHistory(aui.thread.getState().messages);\n if (history.length === 0) return;\n recall(history, 0, value);\n return;\n }\n\n const history = deriveHistory(aui.thread.getState().messages);\n const next = browse.cursor + 1;\n if (next >= history.length) {\n e.preventDefault();\n return;\n }\n recall(history, next, browse.draftSnapshot);\n return;\n }\n\n if (!browse) return;\n if (!isOnLastLine(value, selectionEnd)) return;\n\n const next = browse.cursor - 1;\n if (next < 0) {\n browseRef.current = null;\n commitText(browse.draftSnapshot);\n return;\n }\n\n const history = deriveHistory(aui.thread.getState().messages);\n recall(history, next, browse.draftSnapshot);\n };\n\n return { onKeyDown };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter } from "vue";
|
|
2
|
+
import type { Unstable_TriggerAdapter, Unstable_TriggerItem } from "@ulearning/ai-core";
|
|
3
|
+
/** @deprecated Experimental since 2026-06-15. Not scheduled for removal; the API may change in any release. */
|
|
4
|
+
export type Unstable_UseLiveCompletionAdapterOptions = {
|
|
5
|
+
/**
|
|
6
|
+
* Fetches the items for a query from an async source. Called debounced; the
|
|
7
|
+
* resolved items are cached and returned synchronously to the popover on the
|
|
8
|
+
* next render.
|
|
9
|
+
*/
|
|
10
|
+
readonly fetcher: (query: string) => Promise<readonly Unstable_TriggerItem[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Identifies the fetcher's data source. Change this when switching accounts,
|
|
13
|
+
* workspaces, or another boundary that should invalidate cached results.
|
|
14
|
+
*/
|
|
15
|
+
readonly cacheKey?: string | number | undefined;
|
|
16
|
+
/** Debounce applied before a fetch fires, in milliseconds. @default 60 */
|
|
17
|
+
readonly debounceMs?: number | undefined;
|
|
18
|
+
/** When `false`, no fetch is scheduled and the adapter stays empty. @default true */
|
|
19
|
+
readonly enabled?: boolean | undefined;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Bridges an async completion source (a server search, a gateway RPC) into the
|
|
23
|
+
* synchronous `Unstable_TriggerAdapter` that `ComposerTriggerPopover` consumes.
|
|
24
|
+
* `search(query)` returns the last fetched items synchronously and schedules a
|
|
25
|
+
* debounced fetch when the query changes; when results arrive the returned
|
|
26
|
+
* `adapter` identity changes, which re-runs the popover's lookup so the fresh
|
|
27
|
+
* items render. This is a search-only adapter (`categories` are empty).
|
|
28
|
+
*
|
|
29
|
+
* `isLoading` is `true` while a fetch is in flight. Pass it to the popover's
|
|
30
|
+
* `isLoading` prop to render a loading state.
|
|
31
|
+
*
|
|
32
|
+
* @deprecated Experimental since 2026-06-15. Not scheduled for removal; the API may change in any release.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```tsx
|
|
36
|
+
* const mentions = unstable_useLiveCompletionAdapter({
|
|
37
|
+
* fetcher: (query) => searchUsers(query),
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* <ComposerTriggerPopover
|
|
41
|
+
* char="@"
|
|
42
|
+
* adapter={mentions.adapter}
|
|
43
|
+
* isLoading={mentions.isLoading}
|
|
44
|
+
* directive={{ onInserted }}
|
|
45
|
+
* />
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function unstable_useLiveCompletionAdapter(options: MaybeRefOrGetter<Unstable_UseLiveCompletionAdapterOptions>): ComputedRef<{
|
|
49
|
+
adapter: Unstable_TriggerAdapter;
|
|
50
|
+
isLoading: boolean;
|
|
51
|
+
}>;
|
|
52
|
+
//# sourceMappingURL=useLiveCompletionAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLiveCompletionAdapter.d.ts","mappings":"AAEA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,KAAK;AAEZ,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,oBAAoB;AAE3B;AACA,MAAM,MAAM,wCAAwC,GAAG;IACrD;;;;;IAKA,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC;IAC7E;;;;IAIA,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAC/C;IACA,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS;IACxC;IACA,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS;CACvC;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,gBAAgB,CAAC,wCAAwC,CAAC,GAClE,WAAW,CAAC;IAAE,OAAO,EAAE,uBAAuB;IAAE,SAAS,EAAE,OAAO;CAAE,CAAC","names":[],"ignoreList":[],"sources":["../../src/unstable/useLiveCompletionAdapter.ts"],"sourcesContent":[null]}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useIsomorphicLayoutEffect } from "../utils/useIsomorphicLayoutEffect.js";
|
|
3
|
+
import { computed, shallowRef, toValue } from "vue";
|
|
4
|
+
// src/unstable/useLiveCompletionAdapter.ts
|
|
5
|
+
/** Sentinel that no real query (including the empty string) equals, so the first query always fetches. */
|
|
6
|
+
const NO_QUERY = "\0";
|
|
7
|
+
/**
|
|
8
|
+
* Bridges an async completion source (a server search, a gateway RPC) into the
|
|
9
|
+
* synchronous `Unstable_TriggerAdapter` that `ComposerTriggerPopover` consumes.
|
|
10
|
+
* `search(query)` returns the last fetched items synchronously and schedules a
|
|
11
|
+
* debounced fetch when the query changes; when results arrive the returned
|
|
12
|
+
* `adapter` identity changes, which re-runs the popover's lookup so the fresh
|
|
13
|
+
* items render. This is a search-only adapter (`categories` are empty).
|
|
14
|
+
*
|
|
15
|
+
* `isLoading` is `true` while a fetch is in flight. Pass it to the popover's
|
|
16
|
+
* `isLoading` prop to render a loading state.
|
|
17
|
+
*
|
|
18
|
+
* @deprecated Experimental since 2026-06-15. Not scheduled for removal; the API may change in any release.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* const mentions = unstable_useLiveCompletionAdapter({
|
|
23
|
+
* fetcher: (query) => searchUsers(query),
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* <ComposerTriggerPopover
|
|
27
|
+
* char="@"
|
|
28
|
+
* adapter={mentions.adapter}
|
|
29
|
+
* isLoading={mentions.isLoading}
|
|
30
|
+
* directive={{ onInserted }}
|
|
31
|
+
* />
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
function unstable_useLiveCompletionAdapter(options) {
|
|
35
|
+
const initial = toValue(options);
|
|
36
|
+
const state = shallowRef({
|
|
37
|
+
query: NO_QUERY,
|
|
38
|
+
items: [],
|
|
39
|
+
failed: false
|
|
40
|
+
});
|
|
41
|
+
const isLoading = shallowRef(false);
|
|
42
|
+
const enabled = computed(() => toValue(options).enabled ?? true);
|
|
43
|
+
let fetcher = initial.fetcher;
|
|
44
|
+
let committedEnabled = initial.enabled ?? true;
|
|
45
|
+
let debounceMs = initial.debounceMs ?? 60;
|
|
46
|
+
let cacheKey = initial.cacheKey;
|
|
47
|
+
let timer = null;
|
|
48
|
+
let token = 0;
|
|
49
|
+
let pendingQuery = null;
|
|
50
|
+
let retryableQuery = null;
|
|
51
|
+
let pendingRetryQuery = null;
|
|
52
|
+
let inactive = true;
|
|
53
|
+
let deferredQuery = null;
|
|
54
|
+
const cancelTimer = () => {
|
|
55
|
+
if (timer !== null) {
|
|
56
|
+
clearTimeout(timer);
|
|
57
|
+
timer = null;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const rearmPendingRetry = () => {
|
|
61
|
+
if (pendingRetryQuery === null) return;
|
|
62
|
+
retryableQuery = pendingRetryQuery;
|
|
63
|
+
pendingRetryQuery = null;
|
|
64
|
+
};
|
|
65
|
+
const invalidatePending = () => {
|
|
66
|
+
rearmPendingRetry();
|
|
67
|
+
cancelTimer();
|
|
68
|
+
pendingQuery = null;
|
|
69
|
+
token++;
|
|
70
|
+
isLoading.value = false;
|
|
71
|
+
};
|
|
72
|
+
const scheduleFetch = (query) => {
|
|
73
|
+
if (!committedEnabled) return;
|
|
74
|
+
if (inactive) {
|
|
75
|
+
deferredQuery = query;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (pendingQuery === query) return;
|
|
79
|
+
rearmPendingRetry();
|
|
80
|
+
if (retryableQuery === query) {
|
|
81
|
+
retryableQuery = null;
|
|
82
|
+
pendingRetryQuery = query;
|
|
83
|
+
}
|
|
84
|
+
pendingQuery = query;
|
|
85
|
+
cancelTimer();
|
|
86
|
+
const requestToken = ++token;
|
|
87
|
+
isLoading.value = true;
|
|
88
|
+
timer = setTimeout(() => {
|
|
89
|
+
timer = null;
|
|
90
|
+
Promise.resolve().then(() => fetcher(query)).then((items) => {
|
|
91
|
+
if (requestToken !== token) return;
|
|
92
|
+
pendingRetryQuery = null;
|
|
93
|
+
state.value = {
|
|
94
|
+
query,
|
|
95
|
+
items,
|
|
96
|
+
failed: false
|
|
97
|
+
};
|
|
98
|
+
isLoading.value = false;
|
|
99
|
+
}, () => {
|
|
100
|
+
if (requestToken !== token) return;
|
|
101
|
+
pendingQuery = null;
|
|
102
|
+
pendingRetryQuery = null;
|
|
103
|
+
state.value = {
|
|
104
|
+
query,
|
|
105
|
+
items: [],
|
|
106
|
+
failed: true
|
|
107
|
+
};
|
|
108
|
+
isLoading.value = false;
|
|
109
|
+
});
|
|
110
|
+
}, debounceMs);
|
|
111
|
+
};
|
|
112
|
+
const commitConfiguration = () => {
|
|
113
|
+
const current = toValue(options);
|
|
114
|
+
fetcher = current.fetcher;
|
|
115
|
+
committedEnabled = current.enabled ?? true;
|
|
116
|
+
debounceMs = current.debounceMs ?? 60;
|
|
117
|
+
if (cacheKey !== current.cacheKey) {
|
|
118
|
+
cacheKey = current.cacheKey;
|
|
119
|
+
invalidatePending();
|
|
120
|
+
retryableQuery = null;
|
|
121
|
+
pendingRetryQuery = null;
|
|
122
|
+
state.value = {
|
|
123
|
+
query: NO_QUERY,
|
|
124
|
+
items: [],
|
|
125
|
+
failed: false
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
if (!committedEnabled) {
|
|
129
|
+
invalidatePending();
|
|
130
|
+
if (state.value.query !== NO_QUERY) state.value = {
|
|
131
|
+
query: NO_QUERY,
|
|
132
|
+
items: [],
|
|
133
|
+
failed: false
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
useIsomorphicLayoutEffect(commitConfiguration, () => {
|
|
138
|
+
const current = toValue(options);
|
|
139
|
+
return [
|
|
140
|
+
current.fetcher,
|
|
141
|
+
current.cacheKey,
|
|
142
|
+
current.enabled,
|
|
143
|
+
current.debounceMs
|
|
144
|
+
];
|
|
145
|
+
});
|
|
146
|
+
useIsomorphicLayoutEffect(() => {
|
|
147
|
+
commitConfiguration();
|
|
148
|
+
inactive = false;
|
|
149
|
+
const query = deferredQuery;
|
|
150
|
+
deferredQuery = null;
|
|
151
|
+
if (query !== null) scheduleFetch(query);
|
|
152
|
+
return () => {
|
|
153
|
+
inactive = true;
|
|
154
|
+
invalidatePending();
|
|
155
|
+
};
|
|
156
|
+
}, []);
|
|
157
|
+
useIsomorphicLayoutEffect(() => {
|
|
158
|
+
retryableQuery = state.value.failed ? state.value.query : null;
|
|
159
|
+
}, () => [state.value]);
|
|
160
|
+
const adapter = computed(() => {
|
|
161
|
+
const active = enabled.value;
|
|
162
|
+
const snapshot = state.value;
|
|
163
|
+
return {
|
|
164
|
+
categories: () => [],
|
|
165
|
+
categoryItems: () => [],
|
|
166
|
+
search: (query) => {
|
|
167
|
+
if (!active) return [];
|
|
168
|
+
if (query !== snapshot.query || retryableQuery === query) queueMicrotask(() => scheduleFetch(query));
|
|
169
|
+
else queueMicrotask(() => {
|
|
170
|
+
if (deferredQuery !== null && deferredQuery !== query) deferredQuery = null;
|
|
171
|
+
if (pendingQuery !== null && pendingQuery !== query) invalidatePending();
|
|
172
|
+
});
|
|
173
|
+
return snapshot.items;
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
return computed(() => ({
|
|
178
|
+
adapter: adapter.value,
|
|
179
|
+
isLoading: isLoading.value
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
182
|
+
export { unstable_useLiveCompletionAdapter };
|
|
183
|
+
|
|
184
|
+
//# sourceMappingURL=useLiveCompletionAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLiveCompletionAdapter.js","names":[],"sources":["../../src/unstable/useLiveCompletionAdapter.ts"],"sourcesContent":["\"use client\";\n\nimport {\n computed,\n shallowRef,\n toValue,\n type ComputedRef,\n type MaybeRefOrGetter,\n} from \"vue\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport type {\n Unstable_TriggerAdapter,\n Unstable_TriggerItem,\n} from \"@ulearning/ai-core\";\n\n/** @deprecated Experimental since 2026-06-15. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_UseLiveCompletionAdapterOptions = {\n /**\n * Fetches the items for a query from an async source. Called debounced; the\n * resolved items are cached and returned synchronously to the popover on the\n * next render.\n */\n readonly fetcher: (query: string) => Promise<readonly Unstable_TriggerItem[]>;\n /**\n * Identifies the fetcher's data source. Change this when switching accounts,\n * workspaces, or another boundary that should invalidate cached results.\n */\n readonly cacheKey?: string | number | undefined;\n /** Debounce applied before a fetch fires, in milliseconds. @default 60 */\n readonly debounceMs?: number | undefined;\n /** When `false`, no fetch is scheduled and the adapter stays empty. @default true */\n readonly enabled?: boolean | undefined;\n};\n\n/** Sentinel that no real query (including the empty string) equals, so the first query always fetches. */\nconst NO_QUERY = \"\\u0000\";\n\n/**\n * Bridges an async completion source (a server search, a gateway RPC) into the\n * synchronous `Unstable_TriggerAdapter` that `ComposerTriggerPopover` consumes.\n * `search(query)` returns the last fetched items synchronously and schedules a\n * debounced fetch when the query changes; when results arrive the returned\n * `adapter` identity changes, which re-runs the popover's lookup so the fresh\n * items render. This is a search-only adapter (`categories` are empty).\n *\n * `isLoading` is `true` while a fetch is in flight. Pass it to the popover's\n * `isLoading` prop to render a loading state.\n *\n * @deprecated Experimental since 2026-06-15. Not scheduled for removal; the API may change in any release.\n *\n * @example\n * ```tsx\n * const mentions = unstable_useLiveCompletionAdapter({\n * fetcher: (query) => searchUsers(query),\n * });\n *\n * <ComposerTriggerPopover\n * char=\"@\"\n * adapter={mentions.adapter}\n * isLoading={mentions.isLoading}\n * directive={{ onInserted }}\n * />\n * ```\n */\nexport function unstable_useLiveCompletionAdapter(\n options: MaybeRefOrGetter<Unstable_UseLiveCompletionAdapterOptions>,\n): ComputedRef<{ adapter: Unstable_TriggerAdapter; isLoading: boolean }> {\n const initial = toValue(options);\n const state = shallowRef<{\n query: string;\n items: readonly Unstable_TriggerItem[];\n failed: boolean;\n }>({ query: NO_QUERY, items: [], failed: false });\n const isLoading = shallowRef(false);\n const enabled = computed(() => toValue(options).enabled ?? true);\n let fetcher = initial.fetcher;\n let committedEnabled = initial.enabled ?? true;\n let debounceMs = initial.debounceMs ?? 60;\n let cacheKey = initial.cacheKey;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let token = 0;\n let pendingQuery: string | null = null;\n let retryableQuery: string | null = null;\n let pendingRetryQuery: string | null = null;\n let inactive = true;\n let deferredQuery: string | null = null;\n\n const cancelTimer = () => {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const rearmPendingRetry = () => {\n if (pendingRetryQuery === null) return;\n retryableQuery = pendingRetryQuery;\n pendingRetryQuery = null;\n };\n const invalidatePending = () => {\n rearmPendingRetry();\n cancelTimer();\n pendingQuery = null;\n token++;\n isLoading.value = false;\n };\n const scheduleFetch = (query: string) => {\n if (!committedEnabled) return;\n if (inactive) {\n deferredQuery = query;\n return;\n }\n if (pendingQuery === query) return;\n rearmPendingRetry();\n if (retryableQuery === query) {\n retryableQuery = null;\n pendingRetryQuery = query;\n }\n pendingQuery = query;\n cancelTimer();\n const requestToken = ++token;\n isLoading.value = true;\n timer = setTimeout(() => {\n timer = null;\n Promise.resolve()\n .then(() => fetcher(query))\n .then(\n (items) => {\n if (requestToken !== token) return;\n pendingRetryQuery = null;\n state.value = { query, items, failed: false };\n isLoading.value = false;\n },\n () => {\n if (requestToken !== token) return;\n pendingQuery = null;\n pendingRetryQuery = null;\n state.value = { query, items: [], failed: true };\n isLoading.value = false;\n },\n );\n }, debounceMs);\n };\n const commitConfiguration = () => {\n const current = toValue(options);\n fetcher = current.fetcher;\n committedEnabled = current.enabled ?? true;\n debounceMs = current.debounceMs ?? 60;\n if (cacheKey !== current.cacheKey) {\n cacheKey = current.cacheKey;\n invalidatePending();\n retryableQuery = null;\n pendingRetryQuery = null;\n state.value = { query: NO_QUERY, items: [], failed: false };\n }\n if (!committedEnabled) {\n invalidatePending();\n if (state.value.query !== NO_QUERY)\n state.value = { query: NO_QUERY, items: [], failed: false };\n }\n };\n useIsomorphicLayoutEffect(commitConfiguration, () => {\n const current = toValue(options);\n return [\n current.fetcher,\n current.cacheKey,\n current.enabled,\n current.debounceMs,\n ];\n });\n useIsomorphicLayoutEffect(() => {\n // Reconnection order can differ for descendant KeepAlive hooks. Commit\n // this owner's configuration before replaying work retained while hidden.\n commitConfiguration();\n inactive = false;\n const query = deferredQuery;\n deferredQuery = null;\n if (query !== null) scheduleFetch(query);\n return () => {\n inactive = true;\n invalidatePending();\n };\n }, []);\n // Arm retries only after the failure render commits, preventing render-time\n // search from creating an automatic retry loop.\n useIsomorphicLayoutEffect(\n () => {\n retryableQuery = state.value.failed ? state.value.query : null;\n },\n () => [state.value],\n );\n const adapter = computed<Unstable_TriggerAdapter>(() => {\n const active = enabled.value;\n const snapshot = state.value;\n return {\n categories: () => [],\n categoryItems: () => [],\n search: (query: string) => {\n if (!active) return [];\n if (query !== snapshot.query || retryableQuery === query) {\n queueMicrotask(() => scheduleFetch(query));\n } else {\n queueMicrotask(() => {\n if (deferredQuery !== null && deferredQuery !== query)\n deferredQuery = null;\n if (pendingQuery !== null && pendingQuery !== query)\n invalidatePending();\n });\n }\n return snapshot.items;\n },\n };\n });\n return computed(() => ({\n adapter: adapter.value,\n isLoading: isLoading.value,\n }));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { type Component, type ComputedRef, type MaybeRefOrGetter } from "vue";
|
|
2
|
+
import type { Unstable_DirectiveFormatter, Unstable_TriggerAdapter, Unstable_TriggerItem } from "@ulearning/ai-core";
|
|
3
|
+
import type { ReadonlyJSONObject } from "@ulearning/ai-stream/utils";
|
|
4
|
+
/**
|
|
5
|
+
* Icon component shape consumed by `ComposerTriggerPopover`'s `iconMap`.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release.
|
|
8
|
+
*/
|
|
9
|
+
export type Unstable_IconComponent = Component<{
|
|
10
|
+
className?: string;
|
|
11
|
+
}>;
|
|
12
|
+
/** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
|
|
13
|
+
export type Unstable_Mention = {
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly type: string;
|
|
16
|
+
readonly label: string;
|
|
17
|
+
readonly description?: string | undefined;
|
|
18
|
+
/** Shortcut for `metadata.icon`; merged with `metadata` if both are given. */
|
|
19
|
+
readonly icon?: string | undefined;
|
|
20
|
+
readonly metadata?: ReadonlyJSONObject | undefined;
|
|
21
|
+
};
|
|
22
|
+
/** @deprecated Experimental since 2026-03-16. Not scheduled for removal; the API may change in any release. */
|
|
23
|
+
export type Unstable_MentionCategory = {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly label: string;
|
|
26
|
+
readonly items: readonly Unstable_Mention[];
|
|
27
|
+
};
|
|
28
|
+
/** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
|
|
29
|
+
export type Unstable_ModelContextToolsOptions = {
|
|
30
|
+
/**
|
|
31
|
+
* Wrap tools in a dedicated category. Selects drill-down mode on its own
|
|
32
|
+
* when `categories` is unset and `items` is omitted.
|
|
33
|
+
*/
|
|
34
|
+
readonly category?: {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
readonly label: string;
|
|
37
|
+
};
|
|
38
|
+
/** Format tool name for display. */
|
|
39
|
+
readonly formatLabel?: (toolName: string) => string;
|
|
40
|
+
/** Default icon key for each tool. */
|
|
41
|
+
readonly icon?: string;
|
|
42
|
+
};
|
|
43
|
+
/** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
|
|
44
|
+
export type Unstable_UseMentionAdapterOptions = {
|
|
45
|
+
/**
|
|
46
|
+
* Flat mention list. Ignored when `categories` is set, and keeps the
|
|
47
|
+
* adapter flat when a tool `category` is configured.
|
|
48
|
+
*/
|
|
49
|
+
readonly items?: readonly Unstable_Mention[];
|
|
50
|
+
/** Categorized mentions for drill-down navigation. */
|
|
51
|
+
readonly categories?: readonly Unstable_MentionCategory[];
|
|
52
|
+
/**
|
|
53
|
+
* How tools registered in model context integrate.
|
|
54
|
+
* - `false`: exclude.
|
|
55
|
+
* - `true`: include (default when no `items`/`categories`; as a category
|
|
56
|
+
* if `categories` is set, flat otherwise).
|
|
57
|
+
* - object: explicit config; `category` also selects drill-down mode.
|
|
58
|
+
*
|
|
59
|
+
* Omitted → defaults to `true` iff neither `items` nor `categories`.
|
|
60
|
+
*/
|
|
61
|
+
readonly includeModelContextTools?: boolean | Unstable_ModelContextToolsOptions;
|
|
62
|
+
/** Directive formatter. @default unstable_defaultDirectiveFormatter */
|
|
63
|
+
readonly formatter?: Unstable_DirectiveFormatter;
|
|
64
|
+
/** Fires after an item is inserted into the composer. */
|
|
65
|
+
readonly onInserted?: (item: Unstable_TriggerItem) => void;
|
|
66
|
+
/** Maps `metadata.icon` / `category.id` string keys to Vue components. */
|
|
67
|
+
readonly iconMap?: Record<string, Unstable_IconComponent>;
|
|
68
|
+
/** Fallback icon when no entry in `iconMap` matches. */
|
|
69
|
+
readonly fallbackIcon?: Unstable_IconComponent;
|
|
70
|
+
};
|
|
71
|
+
/** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
|
|
72
|
+
export type Unstable_MentionDirective = {
|
|
73
|
+
readonly formatter: Unstable_DirectiveFormatter;
|
|
74
|
+
readonly onInserted?: ((item: Unstable_TriggerItem) => void) | undefined;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Creates a spreadable `{ adapter, directive }` bundle for `@` mentions.
|
|
78
|
+
* Supports tools registered in model context, explicit items, or both —
|
|
79
|
+
* flat or categorized.
|
|
80
|
+
*
|
|
81
|
+
* @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```tsx
|
|
85
|
+
* const mention = unstable_useMentionAdapter();
|
|
86
|
+
* <ComposerTriggerPopover char="@" {...mention} />
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export declare function unstable_useMentionAdapter(options?: MaybeRefOrGetter<Unstable_UseMentionAdapterOptions | undefined>): ComputedRef<{
|
|
90
|
+
adapter: Unstable_TriggerAdapter;
|
|
91
|
+
directive: Unstable_MentionDirective;
|
|
92
|
+
iconMap?: Record<string, Unstable_IconComponent>;
|
|
93
|
+
fallbackIcon?: Unstable_IconComponent;
|
|
94
|
+
}>;
|
|
95
|
+
//# sourceMappingURL=useMentionAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMentionAdapter.d.ts","mappings":"AAEA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,KAAK;AAEZ,OAAO,KAAK,EACV,2BAA2B,EAC3B,uBAAuB,EAEvB,oBAAoB,EACrB,MAAM,oBAAoB;AAE3B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B;AAQpE;;;;;AAKA,MAAM,MAAM,sBAAsB,GAAG,SAAS,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM;CAAE,CAAC;AAEtE;AACA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS;IACzC;IACA,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,SAAS;CACnD;AAED;AACA,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE;CAC5C;AAED;AACA,MAAM,MAAM,iCAAiC,GAAG;IAC9C;;;;IAIA,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM;KAAE;IACnE;IACA,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM;IACnD;IACA,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;CACvB;AAED;AACA,MAAM,MAAM,iCAAiC,GAAG;IAC9C;;;;IAIA,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,gBAAgB,EAAE;IAC5C;IACA,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,wBAAwB,EAAE;IACzD;;;;;;;;;IASA,QAAQ,CAAC,wBAAwB,CAAC,EAC9B,OAAO,GACP,iCAAiC;IACrC;IACA,QAAQ,CAAC,SAAS,CAAC,EAAE,2BAA2B;IAChD;IACA,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI;IAC1D;IACA,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACzD;IACA,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB;CAC/C;AAED;AACA,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,SAAS,EAAE,2BAA2B;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC,GAAG,SAAS;CACzE;AAsCD;;;;;;;;;;;;;AAaA,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,gBAAgB,CACvB,iCAAiC,GAAG,SAAS,CAClC,GACZ,WAAW,CAAC;IACb,OAAO,EAAE,uBAAuB;IAChC,SAAS,EAAE,yBAAyB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC;IAChD,YAAY,CAAC,EAAE,sBAAsB;CACtC,CAAC","names":[],"ignoreList":[],"sources":["../../src/unstable/useMentionAdapter.ts"],"sourcesContent":[null]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { matchesTriggerItemQuery } from "../primitives/composer/trigger/matchesTriggerItemQuery.js";
|
|
3
|
+
import { shallowEqualRecords, useModelContextSnapshot } from "./useModelContextSnapshot.js";
|
|
4
|
+
import { unstable_defaultDirectiveFormatter } from "@ulearning/ai-core";
|
|
5
|
+
import { computed, toValue } from "vue";
|
|
6
|
+
import { useAui } from "@ulearning/ai-store";
|
|
7
|
+
// src/unstable/useMentionAdapter.ts
|
|
8
|
+
const EMPTY_TOOL_MENTIONS = Object.freeze({});
|
|
9
|
+
const toolMentionSource = {
|
|
10
|
+
empty: EMPTY_TOOL_MENTIONS,
|
|
11
|
+
read: (aui) => {
|
|
12
|
+
const tools = aui.thread.getModelContext().tools;
|
|
13
|
+
if (!tools) return EMPTY_TOOL_MENTIONS;
|
|
14
|
+
const mentions = Object.create(null);
|
|
15
|
+
for (const [name, tool] of Object.entries(tools)) mentions[name] = tool.description;
|
|
16
|
+
return mentions;
|
|
17
|
+
},
|
|
18
|
+
subscribe: (aui, onChange) => {
|
|
19
|
+
const unsubscribeContext = aui.on("thread.modelContextUpdate", onChange);
|
|
20
|
+
const unsubscribeSelection = aui.on({
|
|
21
|
+
scope: "*",
|
|
22
|
+
event: "threads.selectionChanged"
|
|
23
|
+
}, onChange);
|
|
24
|
+
return () => {
|
|
25
|
+
unsubscribeContext();
|
|
26
|
+
unsubscribeSelection();
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
isEqual: shallowEqualRecords
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Creates a spreadable `{ adapter, directive }` bundle for `@` mentions.
|
|
33
|
+
* Supports tools registered in model context, explicit items, or both —
|
|
34
|
+
* flat or categorized.
|
|
35
|
+
*
|
|
36
|
+
* @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```tsx
|
|
40
|
+
* const mention = unstable_useMentionAdapter();
|
|
41
|
+
* <ComposerTriggerPopover char="@" {...mention} />
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
function unstable_useMentionAdapter(options = void 0) {
|
|
45
|
+
const aui = useAui();
|
|
46
|
+
const items = computed(() => toValue(options)?.items);
|
|
47
|
+
const categories = computed(() => toValue(options)?.categories);
|
|
48
|
+
const includeTools = computed(() => toValue(options)?.includeModelContextTools ?? (!items.value && !categories.value));
|
|
49
|
+
const toolsConfig = computed(() => typeof includeTools.value === "object" ? includeTools.value : void 0);
|
|
50
|
+
const wantsTools = computed(() => includeTools.value !== false);
|
|
51
|
+
const formatter = computed(() => toValue(options)?.formatter);
|
|
52
|
+
const onInserted = computed(() => toValue(options)?.onInserted);
|
|
53
|
+
const isCategorized = computed(() => categories.value !== void 0 || toolsConfig.value?.category !== void 0 && items.value === void 0);
|
|
54
|
+
const toolMentions = useModelContextSnapshot(aui, wantsTools, toolMentionSource);
|
|
55
|
+
const adapter = computed(() => {
|
|
56
|
+
const formatLabel = toolsConfig.value?.formatLabel;
|
|
57
|
+
const defaultIcon = toolsConfig.value?.icon;
|
|
58
|
+
const toolItems = wantsTools.value ? Object.entries(toolMentions.value).map(([name, description]) => toTriggerItem({
|
|
59
|
+
id: name,
|
|
60
|
+
type: "tool",
|
|
61
|
+
label: formatLabel ? formatLabel(name) : name,
|
|
62
|
+
description,
|
|
63
|
+
icon: defaultIcon
|
|
64
|
+
})) : [];
|
|
65
|
+
if (isCategorized.value) {
|
|
66
|
+
const groups = (categories.value ?? []).map((cat) => ({
|
|
67
|
+
id: cat.id,
|
|
68
|
+
label: cat.label,
|
|
69
|
+
items: cat.items.map(toTriggerItem)
|
|
70
|
+
}));
|
|
71
|
+
const allGroups = toolItems.length > 0 ? [...groups, {
|
|
72
|
+
id: toolsConfig.value?.category?.id ?? "tools",
|
|
73
|
+
label: toolsConfig.value?.category?.label ?? "Tools",
|
|
74
|
+
items: toolItems
|
|
75
|
+
}] : groups;
|
|
76
|
+
return {
|
|
77
|
+
categories: () => allGroups.map(({ id, label }) => ({
|
|
78
|
+
id,
|
|
79
|
+
label
|
|
80
|
+
})),
|
|
81
|
+
categoryItems: (id) => allGroups.find((g) => g.id === id)?.items ?? [],
|
|
82
|
+
search: (query) => {
|
|
83
|
+
const lower = query.toLowerCase();
|
|
84
|
+
return allGroups.flatMap((g) => g.items).filter((item) => matchesTriggerItemQuery(item, lower));
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const flatItems = (items.value ?? []).map(toTriggerItem);
|
|
89
|
+
const seen = new Set(flatItems.map((i) => i.id));
|
|
90
|
+
const flatPool = [...flatItems, ...toolItems.filter((t) => !seen.has(t.id))];
|
|
91
|
+
return {
|
|
92
|
+
categories: () => [],
|
|
93
|
+
categoryItems: () => [],
|
|
94
|
+
search: (query) => {
|
|
95
|
+
const lower = query.toLowerCase();
|
|
96
|
+
return flatPool.filter((item) => matchesTriggerItemQuery(item, lower));
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
const directive = computed(() => ({
|
|
101
|
+
formatter: formatter.value ?? unstable_defaultDirectiveFormatter,
|
|
102
|
+
...onInserted.value ? { onInserted: onInserted.value } : {}
|
|
103
|
+
}));
|
|
104
|
+
return computed(() => {
|
|
105
|
+
const current = toValue(options);
|
|
106
|
+
return {
|
|
107
|
+
adapter: adapter.value,
|
|
108
|
+
directive: directive.value,
|
|
109
|
+
...current?.iconMap ? { iconMap: current.iconMap } : {},
|
|
110
|
+
...current?.fallbackIcon ? { fallbackIcon: current.fallbackIcon } : {}
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function toTriggerItem(m) {
|
|
115
|
+
const metadata = m.icon !== void 0 ? {
|
|
116
|
+
...m.metadata ?? {},
|
|
117
|
+
icon: m.icon
|
|
118
|
+
} : m.metadata;
|
|
119
|
+
return {
|
|
120
|
+
id: m.id,
|
|
121
|
+
type: m.type,
|
|
122
|
+
label: m.label,
|
|
123
|
+
...m.description !== void 0 ? { description: m.description } : {},
|
|
124
|
+
...metadata !== void 0 ? { metadata } : {}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
export { unstable_useMentionAdapter };
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=useMentionAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMentionAdapter.js","names":[],"sources":["../../src/unstable/useMentionAdapter.ts"],"sourcesContent":["\"use client\";\n\nimport {\n computed,\n toValue,\n type Component,\n type ComputedRef,\n type MaybeRefOrGetter,\n} from \"vue\";\nimport { useAui } from \"@ulearning/ai-store\";\nimport type {\n Unstable_DirectiveFormatter,\n Unstable_TriggerAdapter,\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@ulearning/ai-core\";\nimport { unstable_defaultDirectiveFormatter } from \"@ulearning/ai-core\";\nimport type { ReadonlyJSONObject } from \"@ulearning/ai-stream/utils\";\nimport { matchesTriggerItemQuery } from \"../primitives/composer/trigger/matchesTriggerItemQuery\";\nimport {\n shallowEqualRecords,\n useModelContextSnapshot,\n type ModelContextSnapshotSource,\n} from \"./useModelContextSnapshot\";\n\n/**\n * Icon component shape consumed by `ComposerTriggerPopover`'s `iconMap`.\n *\n * @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release.\n */\nexport type Unstable_IconComponent = Component<{ className?: string }>;\n\n/** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_Mention = {\n readonly id: string;\n readonly type: string;\n readonly label: string;\n readonly description?: string | undefined;\n /** Shortcut for `metadata.icon`; merged with `metadata` if both are given. */\n readonly icon?: string | undefined;\n readonly metadata?: ReadonlyJSONObject | undefined;\n};\n\n/** @deprecated Experimental since 2026-03-16. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_MentionCategory = {\n readonly id: string;\n readonly label: string;\n readonly items: readonly Unstable_Mention[];\n};\n\n/** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_ModelContextToolsOptions = {\n /**\n * Wrap tools in a dedicated category. Selects drill-down mode on its own\n * when `categories` is unset and `items` is omitted.\n */\n readonly category?: { readonly id: string; readonly label: string };\n /** Format tool name for display. */\n readonly formatLabel?: (toolName: string) => string;\n /** Default icon key for each tool. */\n readonly icon?: string;\n};\n\n/** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_UseMentionAdapterOptions = {\n /**\n * Flat mention list. Ignored when `categories` is set, and keeps the\n * adapter flat when a tool `category` is configured.\n */\n readonly items?: readonly Unstable_Mention[];\n /** Categorized mentions for drill-down navigation. */\n readonly categories?: readonly Unstable_MentionCategory[];\n /**\n * How tools registered in model context integrate.\n * - `false`: exclude.\n * - `true`: include (default when no `items`/`categories`; as a category\n * if `categories` is set, flat otherwise).\n * - object: explicit config; `category` also selects drill-down mode.\n *\n * Omitted → defaults to `true` iff neither `items` nor `categories`.\n */\n readonly includeModelContextTools?:\n | boolean\n | Unstable_ModelContextToolsOptions;\n /** Directive formatter. @default unstable_defaultDirectiveFormatter */\n readonly formatter?: Unstable_DirectiveFormatter;\n /** Fires after an item is inserted into the composer. */\n readonly onInserted?: (item: Unstable_TriggerItem) => void;\n /** Maps `metadata.icon` / `category.id` string keys to Vue components. */\n readonly iconMap?: Record<string, Unstable_IconComponent>;\n /** Fallback icon when no entry in `iconMap` matches. */\n readonly fallbackIcon?: Unstable_IconComponent;\n};\n\n/** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_MentionDirective = {\n readonly formatter: Unstable_DirectiveFormatter;\n readonly onInserted?: ((item: Unstable_TriggerItem) => void) | undefined;\n};\n\nconst EMPTY_TOOL_MENTIONS: Readonly<Record<string, string | undefined>> =\n Object.freeze({});\n\n// The description is copied out rather than reached through the tool, so a\n// provider that returns a stable tool object and edits it in place is observed.\nconst toolMentionSource: ModelContextSnapshotSource<\n Readonly<Record<string, string | undefined>>\n> = {\n empty: EMPTY_TOOL_MENTIONS,\n read: (aui) => {\n const tools = aui.thread.getModelContext().tools;\n if (!tools) return EMPTY_TOOL_MENTIONS;\n const mentions = Object.create(null) as Record<string, string | undefined>;\n for (const [name, tool] of Object.entries(tools)) {\n mentions[name] = tool.description;\n }\n return mentions;\n },\n subscribe: (aui, onChange) => {\n const unsubscribeContext = aui.on(\"thread.modelContextUpdate\", onChange);\n // Rebinding the thread event subject to a new thread does not replay it,\n // so a switch between threads carrying different providers is its own\n // refresh trigger. Subscribed globally because a composer can render\n // without a thread list scope.\n const unsubscribeSelection = aui.on(\n { scope: \"*\", event: \"threads.selectionChanged\" },\n onChange,\n );\n return () => {\n unsubscribeContext();\n unsubscribeSelection();\n };\n },\n isEqual: shallowEqualRecords,\n};\n\n/**\n * Creates a spreadable `{ adapter, directive }` bundle for `@` mentions.\n * Supports tools registered in model context, explicit items, or both —\n * flat or categorized.\n *\n * @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release.\n *\n * @example\n * ```tsx\n * const mention = unstable_useMentionAdapter();\n * <ComposerTriggerPopover char=\"@\" {...mention} />\n * ```\n */\nexport function unstable_useMentionAdapter(\n options: MaybeRefOrGetter<\n Unstable_UseMentionAdapterOptions | undefined\n > = undefined,\n): ComputedRef<{\n adapter: Unstable_TriggerAdapter;\n directive: Unstable_MentionDirective;\n iconMap?: Record<string, Unstable_IconComponent>;\n fallbackIcon?: Unstable_IconComponent;\n}> {\n const aui = useAui();\n const items = computed(() => toValue(options)?.items);\n const categories = computed(() => toValue(options)?.categories);\n const includeTools = computed(\n () =>\n toValue(options)?.includeModelContextTools ??\n (!items.value && !categories.value),\n );\n const toolsConfig = computed(() =>\n typeof includeTools.value === \"object\" ? includeTools.value : undefined,\n );\n const wantsTools = computed(() => includeTools.value !== false);\n const formatter = computed(() => toValue(options)?.formatter);\n const onInserted = computed(() => toValue(options)?.onInserted);\n const isCategorized = computed(\n () =>\n categories.value !== undefined ||\n (toolsConfig.value?.category !== undefined && items.value === undefined),\n );\n const toolMentions = useModelContextSnapshot(\n aui,\n wantsTools,\n toolMentionSource,\n );\n\n const adapter = computed<Unstable_TriggerAdapter>(() => {\n const formatLabel = toolsConfig.value?.formatLabel;\n const defaultIcon = toolsConfig.value?.icon;\n const toolItems = wantsTools.value\n ? Object.entries(toolMentions.value).map(([name, description]) =>\n toTriggerItem({\n id: name,\n type: \"tool\",\n label: formatLabel ? formatLabel(name) : name,\n description,\n icon: defaultIcon,\n }),\n )\n : [];\n\n // Categorized: drill-down mode\n if (isCategorized.value) {\n const groups = (categories.value ?? []).map((cat) => ({\n id: cat.id,\n label: cat.label,\n items: cat.items.map(toTriggerItem),\n }));\n const allGroups =\n toolItems.length > 0\n ? [\n ...groups,\n {\n id: toolsConfig.value?.category?.id ?? \"tools\",\n label: toolsConfig.value?.category?.label ?? \"Tools\",\n items: toolItems,\n },\n ]\n : groups;\n\n return {\n categories: () => allGroups.map(({ id, label }) => ({ id, label })),\n categoryItems: (id) => allGroups.find((g) => g.id === id)?.items ?? [],\n search: (query) => {\n const lower = query.toLowerCase();\n return allGroups\n .flatMap((g) => g.items)\n .filter((item) => matchesTriggerItemQuery(item, lower));\n },\n };\n }\n\n // Flat: items + (optionally) tools, all in one search pool\n const flatItems = (items.value ?? []).map(toTriggerItem);\n // Dedupe by id — explicit items win.\n const seen = new Set(flatItems.map((i) => i.id));\n const flatPool = [\n ...flatItems,\n ...toolItems.filter((t) => !seen.has(t.id)),\n ];\n\n return {\n categories: (): readonly Unstable_TriggerCategory[] => [],\n categoryItems: () => [],\n search: (query) => {\n const lower = query.toLowerCase();\n return flatPool.filter((item) => matchesTriggerItemQuery(item, lower));\n },\n };\n });\n\n const directive = computed<Unstable_MentionDirective>(() => ({\n formatter: formatter.value ?? unstable_defaultDirectiveFormatter,\n ...(onInserted.value ? { onInserted: onInserted.value } : {}),\n }));\n\n return computed(() => {\n const current = toValue(options);\n return {\n adapter: adapter.value,\n directive: directive.value,\n ...(current?.iconMap ? { iconMap: current.iconMap } : {}),\n ...(current?.fallbackIcon ? { fallbackIcon: current.fallbackIcon } : {}),\n };\n });\n}\n\nfunction toTriggerItem(m: Unstable_Mention): Unstable_TriggerItem {\n const metadata =\n m.icon !== undefined ? { ...(m.metadata ?? {}), icon: m.icon } : m.metadata;\n return {\n id: m.id,\n type: m.type,\n label: m.label,\n ...(m.description !== undefined ? { description: m.description } : {}),\n ...(metadata !== undefined ? { metadata } : {}),\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter } from "vue";
|
|
2
|
+
/** @deprecated Experimental since 2026-06-13. Not scheduled for removal; the API may change in any release. */
|
|
3
|
+
export type Unstable_MessageStallDetectionOptions = {
|
|
4
|
+
/**
|
|
5
|
+
* Milliseconds of unchanged message content before the message counts as
|
|
6
|
+
* stalled.
|
|
7
|
+
* @default 2000
|
|
8
|
+
*/
|
|
9
|
+
thresholdMs?: number | undefined;
|
|
10
|
+
};
|
|
11
|
+
/** @deprecated Experimental since 2026-06-13. Not scheduled for removal; the API may change in any release. */
|
|
12
|
+
export type Unstable_MessageStallDetection = {
|
|
13
|
+
/** True while the message is running and its content has not changed for at least `thresholdMs`. */
|
|
14
|
+
stalled: boolean;
|
|
15
|
+
/** Milliseconds since the last observed content change. `0` while not stalled. */
|
|
16
|
+
stalledForMs: number;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Detects mid-run output stalls on the current message: while the message is
|
|
20
|
+
* running, watches its text, reasoning, and tool-argument values plus tool-result
|
|
21
|
+
* availability and reports a stall once they stop changing for `thresholdMs`.
|
|
22
|
+
* Useful for re-surfacing a "still working" indicator during tool think-time or
|
|
23
|
+
* provider stalls, after the first tokens have already streamed.
|
|
24
|
+
*
|
|
25
|
+
* Must be used inside a message scope.
|
|
26
|
+
*
|
|
27
|
+
* @deprecated Experimental since 2026-06-13. Not scheduled for removal; the API may change in any release.
|
|
28
|
+
*/
|
|
29
|
+
export declare function unstable_useMessageStallDetection(options?: MaybeRefOrGetter<Unstable_MessageStallDetectionOptions | undefined>): ComputedRef<Unstable_MessageStallDetection>;
|
|
30
|
+
//# sourceMappingURL=useMessageStallDetection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMessageStallDetection.d.ts","mappings":"AAEA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,KAAK;AAOZ;AACA,MAAM,MAAM,qCAAqC,GAAG;IAClD;;;;;IAKA,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS;CACjC;AAED;AACA,MAAM,MAAM,8BAA8B,GAAG;IAC3C;IACA,OAAO,EAAE,OAAO;IAChB;IACA,YAAY,EAAE,MAAM;CACrB;AAED;;;;;;;;;;;AAWA,wBAAgB,iCAAiC,CAC/C,OAAO,GAAE,gBAAgB,CACvB,qCAAqC,GAAG,SAAS,CACtC,GACZ,WAAW,CAAC,8BAA8B,CAAC","names":[],"ignoreList":[],"sources":["../../src/unstable/useMessageStallDetection.ts"],"sourcesContent":[null]}
|