@assistant-ui/react 0.14.24 → 0.14.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/augmentations.d.ts.map +1 -1
- package/dist/client/ExternalThread.d.ts +6 -4
- package/dist/client/ExternalThread.d.ts.map +1 -1
- package/dist/client/ExternalThread.js +2 -1
- package/dist/client/ExternalThread.js.map +1 -1
- package/dist/client/InMemoryThreadList.d.ts +0 -1
- package/dist/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/client/InMemoryThreadList.js +4 -1
- package/dist/client/InMemoryThreadList.js.map +1 -1
- package/dist/client/SingleThreadList.d.ts +0 -1
- package/dist/client/SingleThreadList.d.ts.map +1 -1
- package/dist/context/ReadonlyStore.d.ts +0 -1
- package/dist/context/ReadonlyStore.d.ts.map +1 -1
- package/dist/context/providers/MessageProvider.d.ts +0 -1
- package/dist/context/providers/MessageProvider.d.ts.map +1 -1
- package/dist/context/providers/ThreadViewportProvider.d.ts +0 -1
- package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -1
- package/dist/context/react/ThreadViewportContext.d.ts +15 -16
- package/dist/context/react/ThreadViewportContext.d.ts.map +1 -1
- package/dist/context/react/utils/createContextHook.d.ts +0 -1
- package/dist/context/react/utils/createContextHook.d.ts.map +1 -1
- package/dist/context/react/utils/createContextStoreHook.d.ts +2 -3
- package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
- package/dist/context/react/utils/createStateHookForRuntime.d.ts +0 -1
- package/dist/context/react/utils/createStateHookForRuntime.d.ts.map +1 -1
- package/dist/context/react/utils/ensureBinding.d.ts.map +1 -1
- package/dist/context/react/utils/useRuntimeState.d.ts +0 -1
- package/dist/context/react/utils/useRuntimeState.d.ts.map +1 -1
- package/dist/context/stores/ThreadViewport.d.ts +25 -15
- package/dist/context/stores/ThreadViewport.d.ts.map +1 -1
- package/dist/devtools/DevToolsHooks.d.ts +0 -1
- package/dist/devtools/DevToolsHooks.d.ts.map +1 -1
- package/dist/hooks/useMessageQuote.d.ts +0 -1
- package/dist/hooks/useMessageQuote.d.ts.map +1 -1
- package/dist/hooks/useMessageTiming.d.ts +0 -1
- package/dist/hooks/useMessageTiming.d.ts.map +1 -1
- package/dist/hooks/useToolCallElapsed.d.ts.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/internal.d.ts +0 -2
- package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +0 -1
- package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/legacy-runtime/cloud/auiV0.d.ts +11 -2
- package/dist/legacy-runtime/cloud/auiV0.d.ts.map +1 -1
- package/dist/legacy-runtime/cloud/auiV0.js +31 -2
- package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
- package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts +1 -5
- package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/AssistantContext.d.ts +0 -1
- package/dist/legacy-runtime/hooks/AssistantContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/AttachmentContext.d.ts +0 -1
- package/dist/legacy-runtime/hooks/AttachmentContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/ComposerContext.d.ts +0 -1
- package/dist/legacy-runtime/hooks/ComposerContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/MessageContext.d.ts +0 -1
- package/dist/legacy-runtime/hooks/MessageContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/MessagePartContext.d.ts +0 -1
- package/dist/legacy-runtime/hooks/MessagePartContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/ThreadContext.d.ts +0 -1
- package/dist/legacy-runtime/hooks/ThreadContext.d.ts.map +1 -1
- package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts +0 -1
- package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts +0 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.d.ts +1 -4
- package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts +0 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts +0 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.d.ts +0 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.d.ts.map +1 -1
- package/dist/mcp-apps/McpAppRenderer.d.ts +12 -7
- package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
- package/dist/mcp-apps/McpAppRenderer.js +29 -7
- package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
- package/dist/mcp-apps/McpAppsRemoteHost.d.ts +0 -1
- package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
- package/dist/mcp-apps/McpAppsRemoteHost.js +32 -1
- package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -1
- package/dist/mcp-apps/app-frame.d.ts +1 -12
- package/dist/mcp-apps/app-frame.d.ts.map +1 -1
- package/dist/mcp-apps/app-frame.js +1 -1
- package/dist/mcp-apps/app-frame.js.map +1 -1
- package/dist/mcp-apps/bridge.d.ts +0 -1
- package/dist/mcp-apps/bridge.d.ts.map +1 -1
- package/dist/mcp-apps/bridge.js +4 -3
- package/dist/mcp-apps/bridge.js.map +1 -1
- package/dist/mcp-apps/types.d.ts +10 -7
- package/dist/mcp-apps/types.d.ts.map +1 -1
- package/dist/mcp-apps/types.js.map +1 -1
- package/dist/mcp-apps/utils.d.ts +0 -1
- package/dist/mcp-apps/utils.d.ts.map +1 -1
- package/dist/model-context/frame/useAssistantFrameHost.d.ts +1 -6
- package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -1
- package/dist/model-context/makeAssistantVisible.d.ts +0 -1
- package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarCopy.d.ts +1 -4
- package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarEdit.d.ts +0 -1
- package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +1 -5
- package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +0 -1
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +0 -1
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarReload.d.ts +0 -1
- package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarRoot.d.ts +0 -1
- package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarSpeak.d.ts +0 -1
- package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +0 -1
- package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +1 -6
- package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -1
- package/dist/primitives/actionBar.d.ts +0 -2
- package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +0 -1
- package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +0 -1
- package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +0 -1
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +0 -1
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +0 -1
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/scope.d.ts +0 -1
- package/dist/primitives/actionBarMore/scope.d.ts.map +1 -1
- package/dist/primitives/actionBarMore.d.ts +0 -2
- package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +6 -4
- package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalAnchor.js +2 -2
- package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts +4 -2
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.js +2 -1
- package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +0 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +6 -4
- package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalTrigger.js +2 -2
- package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
- package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts +14 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts.map +1 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.js +10 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.js.map +1 -0
- package/dist/primitives/assistantModal/scope.d.ts +0 -1
- package/dist/primitives/assistantModal/scope.d.ts.map +1 -1
- package/dist/primitives/assistantModal.d.ts +0 -2
- package/dist/primitives/attachment/AttachmentName.d.ts +0 -1
- package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentRemove.d.ts +0 -1
- package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentRoot.d.ts +0 -1
- package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentThumb.d.ts +0 -1
- package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -1
- package/dist/primitives/attachment.d.ts +0 -2
- package/dist/primitives/branchPicker/BranchPickerCount.d.ts +0 -1
- package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerNext.d.ts +0 -1
- package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +0 -1
- package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +0 -1
- package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +0 -1
- package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
- package/dist/primitives/branchPicker.d.ts +0 -2
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +0 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +0 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -1
- package/dist/primitives/chainOfThought.d.ts +0 -2
- package/dist/primitives/composer/ComposerAddAttachment.d.ts +5 -6
- package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +0 -1
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerCancel.d.ts +0 -1
- package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerCompactContext.d.ts +9 -0
- package/dist/primitives/composer/ComposerCompactContext.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerCompactContext.js +11 -0
- package/dist/primitives/composer/ComposerCompactContext.js.map +1 -0
- package/dist/primitives/composer/ComposerDictate.d.ts +0 -1
- package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerDictationTranscript.d.ts +0 -1
- package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerInput.d.ts +0 -1
- package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerInput.js +17 -2
- package/dist/primitives/composer/ComposerInput.js.map +1 -1
- package/dist/primitives/composer/ComposerInputPluginContext.d.ts +4 -3
- package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerQuote.d.ts +0 -1
- package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerRoot.d.ts +22 -3
- package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerRoot.js +63 -30
- package/dist/primitives/composer/ComposerRoot.js.map +1 -1
- package/dist/primitives/composer/ComposerSend.d.ts +0 -1
- package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerStopDictation.d.ts +0 -1
- package/dist/primitives/composer/ComposerStopDictation.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts +10 -5
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +5 -3
- package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverAction.js +3 -2
- package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts +0 -1
- package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts +0 -1
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +3 -2
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts +0 -1
- package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +10 -6
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +8 -5
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/index.d.ts +0 -1
- package/dist/primitives/composer/trigger/index.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +5 -2
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +7 -4
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +13 -7
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +7 -4
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
- package/dist/primitives/composer/useComposerInputState.d.ts.map +1 -1
- package/dist/primitives/composer.d.ts +0 -2
- package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +0 -1
- package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -1
- package/dist/primitives/error/ErrorMessage.d.ts +0 -1
- package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
- package/dist/primitives/error/ErrorRoot.d.ts +0 -1
- package/dist/primitives/error/ErrorRoot.d.ts.map +1 -1
- package/dist/primitives/error.d.ts +0 -2
- package/dist/primitives/message/MessageError.d.ts +0 -1
- package/dist/primitives/message/MessageError.d.ts.map +1 -1
- package/dist/primitives/message/MessageIf.d.ts +0 -1
- package/dist/primitives/message/MessageIf.d.ts.map +1 -1
- package/dist/primitives/message/MessageParts.d.ts +0 -1
- package/dist/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/primitives/message/MessagePartsGrouped.d.ts +25 -12
- package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
- package/dist/primitives/message/MessageRoot.d.ts +0 -1
- package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
- package/dist/primitives/message.d.ts +0 -2
- package/dist/primitives/messagePart/MessagePartImage.d.ts +0 -1
- package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -1
- package/dist/primitives/messagePart/MessagePartText.d.ts +2 -1
- package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
- package/dist/primitives/messagePart/MessagePartText.js.map +1 -1
- package/dist/primitives/messagePart/useMessagePartData.d.ts +0 -1
- package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartFile.d.ts +0 -1
- package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartImage.d.ts +0 -1
- package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +0 -1
- package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartText.d.ts +0 -1
- package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -1
- package/dist/primitives/messagePart.d.ts +0 -2
- package/dist/primitives/queueItem/QueueItemRemove.d.ts +0 -1
- package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -1
- package/dist/primitives/queueItem/QueueItemSteer.d.ts +0 -1
- package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -1
- package/dist/primitives/queueItem/QueueItemText.d.ts +0 -1
- package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -1
- package/dist/primitives/queueItem.d.ts +0 -2
- package/dist/primitives/reasoning/useScrollLock.d.ts +0 -1
- package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +0 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +0 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +2 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
- package/dist/primitives/selectionToolbar.d.ts +0 -2
- package/dist/primitives/suggestion/SuggestionDescription.d.ts +0 -1
- package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -1
- package/dist/primitives/suggestion/SuggestionTitle.d.ts +0 -1
- package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -1
- package/dist/primitives/suggestion/SuggestionTrigger.d.ts +1 -5
- package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
- package/dist/primitives/suggestion.d.ts +0 -2
- package/dist/primitives/thread/ThreadEmpty.d.ts +0 -1
- package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadIf.d.ts +0 -1
- package/dist/primitives/thread/ThreadIf.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadRoot.d.ts +0 -1
- package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadScrollToBottom.d.ts +1 -4
- package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadSuggestion.d.ts +13 -14
- package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadViewport.d.ts +0 -1
- package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadViewportFooter.d.ts +0 -1
- package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +2 -11
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +1 -4
- package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -1
- package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +1 -7
- package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
- package/dist/primitives/thread.d.ts +0 -2
- package/dist/primitives/threadList/ThreadListLoadMore.d.ts +0 -1
- package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -1
- package/dist/primitives/threadList/ThreadListNew.d.ts +0 -1
- package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
- package/dist/primitives/threadList/ThreadListRoot.d.ts +0 -1
- package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -1
- package/dist/primitives/threadList/ThreadListRoot.js +10 -3
- package/dist/primitives/threadList/ThreadListRoot.js.map +1 -1
- package/dist/primitives/threadList.d.ts +0 -2
- package/dist/primitives/threadListFocusGroup.d.ts +25 -0
- package/dist/primitives/threadListFocusGroup.d.ts.map +1 -0
- package/dist/primitives/threadListFocusGroup.js +15 -0
- package/dist/primitives/threadListFocusGroup.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +0 -1
- package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +0 -1
- package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +0 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.js +45 -27
- package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +0 -1
- package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemTrigger.js +26 -2
- package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +0 -1
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/primitives/threadListItem.d.ts +0 -2
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +0 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +63 -38
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +0 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +20 -4
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +95 -14
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +0 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +0 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +38 -21
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
- package/dist/primitives/threadListItemMore/scope.d.ts +0 -1
- package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore.d.ts +0 -2
- package/dist/sandbox-host/SandboxHost.d.ts +1 -10
- package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
- package/dist/unstable/useComposerInput.d.ts +2 -2
- package/dist/unstable/useComposerInput.d.ts.map +1 -1
- package/dist/unstable/useComposerInputHistory.d.ts +2 -2
- package/dist/unstable/useComposerInputHistory.d.ts.map +1 -1
- package/dist/unstable/useLiveCompletionAdapter.d.ts +4 -3
- package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -1
- package/dist/unstable/useMentionAdapter.d.ts +19 -10
- package/dist/unstable/useMentionAdapter.d.ts.map +1 -1
- package/dist/unstable/useMessageStallDetection.d.ts +3 -1
- package/dist/unstable/useMessageStallDetection.d.ts.map +1 -1
- package/dist/unstable/useSlashCommandAdapter.d.ts +6 -4
- package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
- package/dist/utils/Primitive.d.ts +0 -1
- package/dist/utils/Primitive.d.ts.map +1 -1
- package/dist/utils/RequireAtLeastOne.d.ts +1 -1
- package/dist/utils/RequireAtLeastOne.d.ts.map +1 -1
- package/dist/utils/createActionButton.d.ts +0 -1
- package/dist/utils/createActionButton.d.ts.map +1 -1
- package/dist/utils/getSelectionMessageId.d.ts.map +1 -1
- package/dist/utils/getSelectionMessageId.js +32 -7
- package/dist/utils/getSelectionMessageId.js.map +1 -1
- package/dist/utils/hooks/useManagedRef.d.ts.map +1 -1
- package/dist/utils/hooks/useMediaQuery.d.ts.map +1 -1
- package/dist/utils/hooks/useMediaQuery.js +2 -2
- package/dist/utils/hooks/useMediaQuery.js.map +1 -1
- package/dist/utils/hooks/useOnResizeContent.d.ts.map +1 -1
- package/dist/utils/hooks/useOnScrollToBottom.d.ts.map +1 -1
- package/dist/utils/hooks/useSizeHandle.d.ts +0 -1
- package/dist/utils/hooks/useSizeHandle.d.ts.map +1 -1
- package/dist/utils/smooth/SmoothContext.d.ts +71 -72
- package/dist/utils/smooth/SmoothContext.d.ts.map +1 -1
- package/dist/utils/smooth/useSmooth.d.ts +4 -1
- package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
- package/dist/utils/smooth/useSmooth.js +7 -1
- package/dist/utils/smooth/useSmooth.js.map +1 -1
- package/dist/utils/useToolArgsFieldStatus.d.ts.map +1 -1
- package/package.json +19 -17
- package/src/index.ts +3 -0
- package/src/legacy-runtime/cloud/auiV0.ts +72 -3
- package/src/mcp-apps/McpAppRenderer.test.tsx +141 -0
- package/src/mcp-apps/McpAppRenderer.tsx +48 -10
- package/src/mcp-apps/McpAppsRemoteHost.test.ts +126 -0
- package/src/mcp-apps/McpAppsRemoteHost.ts +40 -1
- package/src/mcp-apps/app-frame.tsx +3 -1
- package/src/mcp-apps/bridge.ts +1 -1
- package/src/mcp-apps/types.ts +16 -8
- package/src/primitives/assistantModal/AssistantModalAnchor.tsx +6 -8
- package/src/primitives/assistantModal/AssistantModalContent.tsx +5 -5
- package/src/primitives/assistantModal/AssistantModalTrigger.test.tsx +80 -0
- package/src/primitives/assistantModal/AssistantModalTrigger.tsx +6 -8
- package/src/primitives/assistantModal/popoverRenderPrimitives.ts +6 -0
- package/src/primitives/composer/ComposerCompactContext.tsx +13 -0
- package/src/primitives/composer/ComposerInput.tsx +35 -0
- package/src/primitives/composer/ComposerRoot.test.tsx +161 -0
- package/src/primitives/composer/ComposerRoot.tsx +37 -7
- package/src/primitives/messagePart/MessagePartText.tsx +1 -0
- package/src/primitives/threadList/ThreadListRoot.tsx +8 -1
- package/src/primitives/threadListFocusGroup.ts +24 -0
- package/src/primitives/threadListItem/ThreadListItemRoot.tsx +53 -5
- package/src/primitives/threadListItem/ThreadListItemTrigger.tsx +45 -0
- package/src/primitives/threadListItem/ThreadListKeyboardNav.test.tsx +141 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreContent.tsx +22 -1
- package/src/primitives/threadListItemMore/ThreadListItemMoreRoot.tsx +64 -3
- package/src/primitives/threadListItemMore/ThreadListItemMoreTrigger.tsx +29 -2
- package/src/tests/LocalThreadRuntimeCore.test.ts +4 -1
- package/src/tests/auiV0Encode.test.ts +134 -1
- package/src/tests/generative-ui.test.tsx +21 -1
- package/src/utils/getSelectionMessageId.test.ts +175 -0
- package/src/utils/getSelectionMessageId.ts +57 -6
- package/src/utils/hooks/useMediaQuery.ts +3 -2
- package/src/utils/smooth/useSmooth.test.tsx +26 -0
- package/src/utils/smooth/useSmooth.ts +7 -1
- package/dist/utils/json/is-json-equal.d.ts +0 -5
- package/dist/utils/json/is-json-equal.d.ts.map +0 -1
- package/dist/utils/json/is-json-equal.js +0 -26
- package/dist/utils/json/is-json-equal.js.map +0 -1
- package/dist/utils/json/is-json.d.ts +0 -10
- package/dist/utils/json/is-json.d.ts.map +0 -1
- package/dist/utils/json/is-json.js +0 -22
- package/dist/utils/json/is-json.js.map +0 -1
- package/src/primitives/threadListItem/ThreadListItemTrigger.ts +0 -23
- package/src/utils/json/is-json-equal.ts +0 -48
- package/src/utils/json/is-json.ts +0 -58
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { composeEventHandlers } from "@radix-ui/primitive";
|
|
4
|
+
import { useAuiState } from "@assistant-ui/store";
|
|
4
5
|
import { Primitive } from "../../utils/Primitive";
|
|
5
6
|
import {
|
|
6
7
|
type ComponentRef,
|
|
7
8
|
type FormEvent,
|
|
8
9
|
forwardRef,
|
|
9
10
|
type ComponentPropsWithoutRef,
|
|
11
|
+
useMemo,
|
|
12
|
+
useState,
|
|
10
13
|
} from "react";
|
|
11
14
|
import { useComposerSend } from "./ComposerSend";
|
|
15
|
+
import { ComposerCompactContext } from "./ComposerCompactContext";
|
|
12
16
|
|
|
13
17
|
export namespace ComposerPrimitiveRoot {
|
|
14
18
|
export type Element = ComponentRef<typeof Primitive.form>;
|
|
@@ -16,7 +20,17 @@ export namespace ComposerPrimitiveRoot {
|
|
|
16
20
|
* Props for the ComposerPrimitive.Root component.
|
|
17
21
|
* Accepts all standard form element props.
|
|
18
22
|
*/
|
|
19
|
-
export type Props = ComponentPropsWithoutRef<typeof Primitive.form
|
|
23
|
+
export type Props = ComponentPropsWithoutRef<typeof Primitive.form> & {
|
|
24
|
+
/**
|
|
25
|
+
* Opt the composer into compact mode. While the input holds at most a single
|
|
26
|
+
* line of text and there are no attachments, quote, queued messages, or
|
|
27
|
+
* active dictation, the root renders a `data-compact` attribute so styles
|
|
28
|
+
* can collapse the composer into a single row. It expands automatically
|
|
29
|
+
* when any of those conditions stop holding.
|
|
30
|
+
* @default false
|
|
31
|
+
*/
|
|
32
|
+
compact?: boolean | undefined;
|
|
33
|
+
};
|
|
20
34
|
}
|
|
21
35
|
|
|
22
36
|
/**
|
|
@@ -37,9 +51,22 @@ export namespace ComposerPrimitiveRoot {
|
|
|
37
51
|
export const ComposerPrimitiveRoot = forwardRef<
|
|
38
52
|
ComposerPrimitiveRoot.Element,
|
|
39
53
|
ComposerPrimitiveRoot.Props
|
|
40
|
-
>(({ onSubmit, ...rest }, forwardedRef) => {
|
|
54
|
+
>(({ onSubmit, compact, ...rest }, forwardedRef) => {
|
|
41
55
|
const send = useComposerSend();
|
|
42
56
|
|
|
57
|
+
const [multiline, setMultiline] = useState(false);
|
|
58
|
+
const compactContext = useMemo(() => ({ setMultiline }), []);
|
|
59
|
+
const stateAllowsCompact = useAuiState((s) =>
|
|
60
|
+
compact
|
|
61
|
+
? s.composer.attachments.length === 0 &&
|
|
62
|
+
s.composer.quote == null &&
|
|
63
|
+
s.composer.queue.length === 0 &&
|
|
64
|
+
s.composer.dictation == null &&
|
|
65
|
+
!s.composer.text.includes("\n")
|
|
66
|
+
: false,
|
|
67
|
+
);
|
|
68
|
+
const isCompact = stateAllowsCompact && !multiline;
|
|
69
|
+
|
|
43
70
|
const handleSubmit = (e: FormEvent) => {
|
|
44
71
|
e.preventDefault();
|
|
45
72
|
|
|
@@ -48,11 +75,14 @@ export const ComposerPrimitiveRoot = forwardRef<
|
|
|
48
75
|
};
|
|
49
76
|
|
|
50
77
|
return (
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
78
|
+
<ComposerCompactContext.Provider value={compact ? compactContext : null}>
|
|
79
|
+
<Primitive.form
|
|
80
|
+
{...rest}
|
|
81
|
+
data-compact={isCompact ? "" : undefined}
|
|
82
|
+
ref={forwardedRef}
|
|
83
|
+
onSubmit={composeEventHandlers(onSubmit, handleSubmit)}
|
|
84
|
+
/>
|
|
85
|
+
</ComposerCompactContext.Provider>
|
|
56
86
|
);
|
|
57
87
|
});
|
|
58
88
|
|
|
@@ -20,6 +20,7 @@ export namespace MessagePartPrimitiveText {
|
|
|
20
20
|
* Whether to enable smooth text streaming animation.
|
|
21
21
|
* When enabled, text appears with a typing effect as it streams in.
|
|
22
22
|
* Pass a `SmoothOptions` object to tune the reveal rate.
|
|
23
|
+
* Auto-disables under `prefers-reduced-motion: reduce`.
|
|
23
24
|
* @default true
|
|
24
25
|
*/
|
|
25
26
|
smooth?: boolean | SmoothOptions;
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
type ComponentRef,
|
|
7
7
|
forwardRef,
|
|
8
8
|
} from "react";
|
|
9
|
+
import { ThreadListCollection } from "../threadListFocusGroup";
|
|
9
10
|
|
|
10
11
|
type PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;
|
|
11
12
|
|
|
@@ -18,7 +19,13 @@ export const ThreadListPrimitiveRoot = forwardRef<
|
|
|
18
19
|
ThreadListPrimitiveRoot.Element,
|
|
19
20
|
ThreadListPrimitiveRoot.Props
|
|
20
21
|
>((props, ref) => {
|
|
21
|
-
return
|
|
22
|
+
return (
|
|
23
|
+
<ThreadListCollection.Provider scope={undefined}>
|
|
24
|
+
<ThreadListCollection.Slot scope={undefined}>
|
|
25
|
+
<Primitive.div {...props} ref={ref} />
|
|
26
|
+
</ThreadListCollection.Slot>
|
|
27
|
+
</ThreadListCollection.Provider>
|
|
28
|
+
);
|
|
22
29
|
});
|
|
23
30
|
|
|
24
31
|
ThreadListPrimitiveRoot.displayName = "ThreadListPrimitive.Root";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { createCollection } from "@radix-ui/react-collection";
|
|
4
|
+
import { createContext, useContext, type RefObject } from "react";
|
|
5
|
+
|
|
6
|
+
const [collection, useThreadListCollection] =
|
|
7
|
+
createCollection<HTMLButtonElement>("ThreadList");
|
|
8
|
+
|
|
9
|
+
export const ThreadListCollection = collection;
|
|
10
|
+
export { useThreadListCollection };
|
|
11
|
+
|
|
12
|
+
type ThreadListItemFocus = {
|
|
13
|
+
triggerRef: RefObject<HTMLButtonElement | null>;
|
|
14
|
+
moreRef: RefObject<HTMLButtonElement | null>;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const ThreadListItemFocusContext = createContext<ThreadListItemFocus | null>(
|
|
18
|
+
null,
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
export const ThreadListItemFocusProvider = ThreadListItemFocusContext.Provider;
|
|
22
|
+
|
|
23
|
+
export const useThreadListItemFocus = (): ThreadListItemFocus | null =>
|
|
24
|
+
useContext(ThreadListItemFocusContext);
|
|
@@ -5,8 +5,17 @@ import {
|
|
|
5
5
|
type ComponentRef,
|
|
6
6
|
forwardRef,
|
|
7
7
|
type ComponentPropsWithoutRef,
|
|
8
|
+
type KeyboardEvent,
|
|
9
|
+
useMemo,
|
|
10
|
+
useRef,
|
|
8
11
|
} from "react";
|
|
9
12
|
import { useAuiState } from "@assistant-ui/store";
|
|
13
|
+
import { composeEventHandlers } from "@radix-ui/primitive";
|
|
14
|
+
import { Direction } from "radix-ui";
|
|
15
|
+
import {
|
|
16
|
+
ThreadListItemFocusProvider,
|
|
17
|
+
useThreadListCollection,
|
|
18
|
+
} from "../threadListFocusGroup";
|
|
10
19
|
|
|
11
20
|
type PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;
|
|
12
21
|
|
|
@@ -23,12 +32,51 @@ export const ThreadListItemPrimitiveRoot = forwardRef<
|
|
|
23
32
|
(s) => s.threads.mainThreadId === s.threadListItem.id,
|
|
24
33
|
);
|
|
25
34
|
|
|
35
|
+
const triggerRef = useRef<HTMLButtonElement | null>(null);
|
|
36
|
+
const moreRef = useRef<HTMLButtonElement | null>(null);
|
|
37
|
+
const focus = useMemo(() => ({ triggerRef, moreRef }), []);
|
|
38
|
+
|
|
39
|
+
const getItems = useThreadListCollection(undefined);
|
|
40
|
+
const direction = Direction.useDirection();
|
|
41
|
+
|
|
42
|
+
const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {
|
|
43
|
+
const forwardKey = direction === "rtl" ? "ArrowLeft" : "ArrowRight";
|
|
44
|
+
const backKey = direction === "rtl" ? "ArrowRight" : "ArrowLeft";
|
|
45
|
+
const trigger = triggerRef.current;
|
|
46
|
+
const more = moreRef.current;
|
|
47
|
+
|
|
48
|
+
if (trigger && event.target === trigger) {
|
|
49
|
+
if (event.key === "ArrowDown" || event.key === "ArrowUp") {
|
|
50
|
+
const triggers = getItems()
|
|
51
|
+
.map((item) => item.ref.current)
|
|
52
|
+
.filter((node): node is HTMLButtonElement => node !== null);
|
|
53
|
+
const next =
|
|
54
|
+
triggers[
|
|
55
|
+
triggers.indexOf(trigger) + (event.key === "ArrowDown" ? 1 : -1)
|
|
56
|
+
];
|
|
57
|
+
if (next) {
|
|
58
|
+
next.focus();
|
|
59
|
+
event.preventDefault();
|
|
60
|
+
}
|
|
61
|
+
} else if (event.key === forwardKey && more) {
|
|
62
|
+
more.focus();
|
|
63
|
+
event.preventDefault();
|
|
64
|
+
}
|
|
65
|
+
} else if (more && event.target === more && event.key === backKey) {
|
|
66
|
+
trigger?.focus();
|
|
67
|
+
event.preventDefault();
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
26
71
|
return (
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
72
|
+
<ThreadListItemFocusProvider value={focus}>
|
|
73
|
+
<Primitive.div
|
|
74
|
+
{...(isMain ? { "data-active": "true", "aria-current": "true" } : null)}
|
|
75
|
+
{...props}
|
|
76
|
+
onKeyDown={composeEventHandlers(props.onKeyDown, onKeyDown)}
|
|
77
|
+
ref={ref}
|
|
78
|
+
/>
|
|
79
|
+
</ThreadListItemFocusProvider>
|
|
32
80
|
);
|
|
33
81
|
});
|
|
34
82
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
5
|
+
import {
|
|
6
|
+
type ActionButtonElement,
|
|
7
|
+
type ActionButtonProps,
|
|
8
|
+
createActionButton,
|
|
9
|
+
} from "../../utils/createActionButton";
|
|
10
|
+
import { useThreadListItemTrigger as useThreadListItemTriggerBehavior } from "@assistant-ui/core/react";
|
|
11
|
+
import {
|
|
12
|
+
ThreadListCollection,
|
|
13
|
+
useThreadListItemFocus,
|
|
14
|
+
} from "../threadListFocusGroup";
|
|
15
|
+
|
|
16
|
+
const useThreadListItemTrigger = () => {
|
|
17
|
+
const { switchTo } = useThreadListItemTriggerBehavior();
|
|
18
|
+
return switchTo;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export namespace ThreadListItemPrimitiveTrigger {
|
|
22
|
+
export type Element = ActionButtonElement;
|
|
23
|
+
export type Props = ActionButtonProps<typeof useThreadListItemTrigger>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const ThreadListItemTriggerButton = createActionButton(
|
|
27
|
+
"ThreadListItemPrimitive.Trigger",
|
|
28
|
+
useThreadListItemTrigger,
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
export const ThreadListItemPrimitiveTrigger = forwardRef<
|
|
32
|
+
ThreadListItemPrimitiveTrigger.Element,
|
|
33
|
+
ThreadListItemPrimitiveTrigger.Props
|
|
34
|
+
>((props, forwardedRef) => {
|
|
35
|
+
const focus = useThreadListItemFocus();
|
|
36
|
+
const ref = useComposedRefs(forwardedRef, focus?.triggerRef);
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<ThreadListCollection.ItemSlot scope={undefined}>
|
|
40
|
+
<ThreadListItemTriggerButton {...props} ref={ref} />
|
|
41
|
+
</ThreadListCollection.ItemSlot>
|
|
42
|
+
);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
ThreadListItemPrimitiveTrigger.displayName = "ThreadListItemPrimitive.Trigger";
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/** @vitest-environment jsdom */
|
|
2
|
+
import { fireEvent, render } from "@testing-library/react";
|
|
3
|
+
import { describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { ThreadListPrimitiveRoot } from "../threadList/ThreadListRoot";
|
|
5
|
+
import { ThreadListItemPrimitiveRoot } from "./ThreadListItemRoot";
|
|
6
|
+
import { ThreadListItemPrimitiveTrigger } from "./ThreadListItemTrigger";
|
|
7
|
+
import { ThreadListItemMorePrimitiveRoot } from "../threadListItemMore/ThreadListItemMoreRoot";
|
|
8
|
+
import { ThreadListItemMorePrimitiveTrigger } from "../threadListItemMore/ThreadListItemMoreTrigger";
|
|
9
|
+
import { ThreadListItemMorePrimitiveContent } from "../threadListItemMore/ThreadListItemMoreContent";
|
|
10
|
+
import { ThreadListItemMorePrimitiveItem } from "../threadListItemMore/ThreadListItemMoreItem";
|
|
11
|
+
|
|
12
|
+
vi.mock("@assistant-ui/store", async (importOriginal) => {
|
|
13
|
+
const actual = await importOriginal<typeof import("@assistant-ui/store")>();
|
|
14
|
+
return { ...actual, useAuiState: () => false };
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
vi.mock("@assistant-ui/core/react", async (importOriginal) => {
|
|
18
|
+
const actual =
|
|
19
|
+
await importOriginal<typeof import("@assistant-ui/core/react")>();
|
|
20
|
+
return {
|
|
21
|
+
...actual,
|
|
22
|
+
useThreadListItemTrigger: () => ({ switchTo: () => {} }),
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const triggers = (root: HTMLElement) =>
|
|
27
|
+
Array.from(
|
|
28
|
+
root.querySelectorAll<HTMLButtonElement>("[data-radix-collection-item]"),
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
const moreOf = (root: HTMLElement) =>
|
|
32
|
+
root.querySelector<HTMLButtonElement>('[aria-haspopup="menu"]')!;
|
|
33
|
+
|
|
34
|
+
const renderItem = (rootProps?: { defaultOpen?: boolean }) => {
|
|
35
|
+
const result = render(
|
|
36
|
+
<ThreadListPrimitiveRoot>
|
|
37
|
+
<ThreadListItemPrimitiveRoot>
|
|
38
|
+
<ThreadListItemPrimitiveTrigger>item</ThreadListItemPrimitiveTrigger>
|
|
39
|
+
<ThreadListItemMorePrimitiveRoot sharedFocusGroup {...rootProps}>
|
|
40
|
+
<ThreadListItemMorePrimitiveTrigger>
|
|
41
|
+
more
|
|
42
|
+
</ThreadListItemMorePrimitiveTrigger>
|
|
43
|
+
<ThreadListItemMorePrimitiveContent>
|
|
44
|
+
<ThreadListItemMorePrimitiveItem>
|
|
45
|
+
Archive
|
|
46
|
+
</ThreadListItemMorePrimitiveItem>
|
|
47
|
+
</ThreadListItemMorePrimitiveContent>
|
|
48
|
+
</ThreadListItemMorePrimitiveRoot>
|
|
49
|
+
</ThreadListItemPrimitiveRoot>
|
|
50
|
+
</ThreadListPrimitiveRoot>,
|
|
51
|
+
);
|
|
52
|
+
return {
|
|
53
|
+
...result,
|
|
54
|
+
trigger: triggers(result.container)[0]!,
|
|
55
|
+
more: moreOf(result.container),
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const menu = (): HTMLElement | null =>
|
|
60
|
+
document.querySelector<HTMLElement>('[role="menu"]');
|
|
61
|
+
|
|
62
|
+
describe("thread list keyboard navigation", () => {
|
|
63
|
+
it("moves focus between items with the up/down arrows", () => {
|
|
64
|
+
const { container } = render(
|
|
65
|
+
<ThreadListPrimitiveRoot>
|
|
66
|
+
{[0, 1, 2].map((i) => (
|
|
67
|
+
<ThreadListItemPrimitiveRoot key={i}>
|
|
68
|
+
<ThreadListItemPrimitiveTrigger>
|
|
69
|
+
item {i}
|
|
70
|
+
</ThreadListItemPrimitiveTrigger>
|
|
71
|
+
</ThreadListItemPrimitiveRoot>
|
|
72
|
+
))}
|
|
73
|
+
</ThreadListPrimitiveRoot>,
|
|
74
|
+
);
|
|
75
|
+
const [first, second] = triggers(container);
|
|
76
|
+
|
|
77
|
+
first!.focus();
|
|
78
|
+
fireEvent.keyDown(first!, { key: "ArrowDown" });
|
|
79
|
+
expect(document.activeElement).toBe(second);
|
|
80
|
+
|
|
81
|
+
fireEvent.keyDown(second!, { key: "ArrowUp" });
|
|
82
|
+
expect(document.activeElement).toBe(first);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it("moves between an item and its More button with right/left arrows", () => {
|
|
86
|
+
const { trigger, more } = renderItem();
|
|
87
|
+
|
|
88
|
+
trigger.focus();
|
|
89
|
+
fireEvent.keyDown(trigger, { key: "ArrowRight" });
|
|
90
|
+
expect(document.activeElement).toBe(more);
|
|
91
|
+
|
|
92
|
+
fireEvent.keyDown(more, { key: "ArrowLeft" });
|
|
93
|
+
expect(document.activeElement).toBe(trigger);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("opens the More menu on ArrowRight", () => {
|
|
97
|
+
const { more } = renderItem();
|
|
98
|
+
|
|
99
|
+
more.focus();
|
|
100
|
+
fireEvent.keyDown(more, { key: "ArrowRight" });
|
|
101
|
+
|
|
102
|
+
expect(menu()).not.toBeNull();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it.each(["ArrowLeft", "Escape"])(
|
|
106
|
+
"closes the menu on %s and returns focus to the More button",
|
|
107
|
+
(key) => {
|
|
108
|
+
const { more } = renderItem({ defaultOpen: true });
|
|
109
|
+
|
|
110
|
+
fireEvent.keyDown(menu() as HTMLElement, { key });
|
|
111
|
+
|
|
112
|
+
expect(menu()).toBeNull();
|
|
113
|
+
expect(document.activeElement).toBe(more);
|
|
114
|
+
},
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
it("leaves the More menu's arrow keys inert without sharedFocusGroup (the default)", () => {
|
|
118
|
+
const result = render(
|
|
119
|
+
<ThreadListPrimitiveRoot>
|
|
120
|
+
<ThreadListItemPrimitiveRoot>
|
|
121
|
+
<ThreadListItemPrimitiveTrigger>item</ThreadListItemPrimitiveTrigger>
|
|
122
|
+
<ThreadListItemMorePrimitiveRoot>
|
|
123
|
+
<ThreadListItemMorePrimitiveTrigger>
|
|
124
|
+
more
|
|
125
|
+
</ThreadListItemMorePrimitiveTrigger>
|
|
126
|
+
<ThreadListItemMorePrimitiveContent>
|
|
127
|
+
<ThreadListItemMorePrimitiveItem>
|
|
128
|
+
Archive
|
|
129
|
+
</ThreadListItemMorePrimitiveItem>
|
|
130
|
+
</ThreadListItemMorePrimitiveContent>
|
|
131
|
+
</ThreadListItemMorePrimitiveRoot>
|
|
132
|
+
</ThreadListItemPrimitiveRoot>
|
|
133
|
+
</ThreadListPrimitiveRoot>,
|
|
134
|
+
);
|
|
135
|
+
const more = moreOf(result.container);
|
|
136
|
+
|
|
137
|
+
more.focus();
|
|
138
|
+
fireEvent.keyDown(more, { key: "ArrowRight" });
|
|
139
|
+
expect(menu()).toBeNull();
|
|
140
|
+
});
|
|
141
|
+
});
|
|
@@ -5,9 +5,15 @@ import {
|
|
|
5
5
|
type ComponentRef,
|
|
6
6
|
forwardRef,
|
|
7
7
|
} from "react";
|
|
8
|
-
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
|
|
8
|
+
import { Direction, DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
|
|
9
|
+
import { composeEventHandlers } from "@radix-ui/primitive";
|
|
9
10
|
import type { WithRenderPropProps } from "../../utils/Primitive";
|
|
10
11
|
import { DropdownMenuRenderContent } from "../dropdownMenuRenderPrimitives";
|
|
12
|
+
import { useThreadListItemFocus } from "../threadListFocusGroup";
|
|
13
|
+
import {
|
|
14
|
+
useThreadListItemMoreSharedFocusGroup,
|
|
15
|
+
useThreadListItemMoreSetOpen,
|
|
16
|
+
} from "./ThreadListItemMoreRoot";
|
|
11
17
|
import { type ScopedProps, useDropdownMenuScope } from "./scope";
|
|
12
18
|
|
|
13
19
|
export namespace ThreadListItemMorePrimitiveContent {
|
|
@@ -35,12 +41,27 @@ export const ThreadListItemMorePrimitiveContent = forwardRef<
|
|
|
35
41
|
forwardedRef,
|
|
36
42
|
) => {
|
|
37
43
|
const scope = useDropdownMenuScope(__scopeThreadListItemMore);
|
|
44
|
+
const setOpen = useThreadListItemMoreSetOpen();
|
|
45
|
+
const focus = useThreadListItemFocus();
|
|
46
|
+
const sharedFocusGroup = useThreadListItemMoreSharedFocusGroup();
|
|
47
|
+
const direction = Direction.useDirection();
|
|
48
|
+
const closeKey = direction === "rtl" ? "ArrowRight" : "ArrowLeft";
|
|
38
49
|
|
|
39
50
|
return (
|
|
40
51
|
<DropdownMenuPrimitive.Portal {...scope} {...portalProps}>
|
|
41
52
|
<DropdownMenuRenderContent
|
|
42
53
|
{...scope}
|
|
43
54
|
{...props}
|
|
55
|
+
onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {
|
|
56
|
+
if (!sharedFocusGroup || event.key !== closeKey) return;
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
setOpen(false);
|
|
59
|
+
focus?.moreRef.current?.focus();
|
|
60
|
+
})}
|
|
61
|
+
onEscapeKeyDown={composeEventHandlers(props.onEscapeKeyDown, () => {
|
|
62
|
+
if (!sharedFocusGroup) return;
|
|
63
|
+
focus?.moreRef.current?.focus();
|
|
64
|
+
})}
|
|
44
65
|
ref={forwardedRef}
|
|
45
66
|
sideOffset={sideOffset}
|
|
46
67
|
/>
|
|
@@ -1,22 +1,83 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import {
|
|
4
|
+
createContext,
|
|
5
|
+
type Dispatch,
|
|
6
|
+
type FC,
|
|
7
|
+
type SetStateAction,
|
|
8
|
+
useContext,
|
|
9
|
+
} from "react";
|
|
4
10
|
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
|
|
11
|
+
import { useControllableState } from "@radix-ui/react-use-controllable-state";
|
|
5
12
|
import { type ScopedProps, useDropdownMenuScope } from "./scope";
|
|
6
13
|
|
|
14
|
+
const ThreadListItemMoreSetOpenContext = createContext<
|
|
15
|
+
Dispatch<SetStateAction<boolean>>
|
|
16
|
+
>(() => {});
|
|
17
|
+
|
|
18
|
+
export const useThreadListItemMoreSetOpen = (): Dispatch<
|
|
19
|
+
SetStateAction<boolean>
|
|
20
|
+
> => useContext(ThreadListItemMoreSetOpenContext);
|
|
21
|
+
|
|
22
|
+
const ThreadListItemMoreSharedFocusGroupContext = createContext(false);
|
|
23
|
+
|
|
24
|
+
export const useThreadListItemMoreSharedFocusGroup = (): boolean =>
|
|
25
|
+
useContext(ThreadListItemMoreSharedFocusGroupContext);
|
|
26
|
+
|
|
7
27
|
export namespace ThreadListItemMorePrimitiveRoot {
|
|
8
|
-
export type Props = DropdownMenuPrimitive.DropdownMenuProps
|
|
28
|
+
export type Props = DropdownMenuPrimitive.DropdownMenuProps & {
|
|
29
|
+
/**
|
|
30
|
+
* Join the menu to the thread list's focus group: Right opens it, Left/Escape
|
|
31
|
+
* close it and return focus to the trigger (mirrored in RTL). Forces the menu
|
|
32
|
+
* non-modal, since a focus trap can't let focus cross the trigger/menu
|
|
33
|
+
* boundary. Defaults to a standalone modal dropdown.
|
|
34
|
+
*/
|
|
35
|
+
sharedFocusGroup?: boolean | undefined;
|
|
36
|
+
};
|
|
9
37
|
}
|
|
10
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Root container for the overflow menu, built on Radix DropdownMenu.
|
|
41
|
+
*
|
|
42
|
+
* Defaults to a standard, self-contained modal dropdown. Pass
|
|
43
|
+
* {@link ThreadListItemMorePrimitiveRoot.Props.sharedFocusGroup} to fold it into
|
|
44
|
+
* the thread list's keyboard navigation instead.
|
|
45
|
+
*/
|
|
11
46
|
export const ThreadListItemMorePrimitiveRoot: FC<
|
|
12
47
|
ThreadListItemMorePrimitiveRoot.Props
|
|
13
48
|
> = ({
|
|
14
49
|
__scopeThreadListItemMore,
|
|
50
|
+
open: openProp,
|
|
51
|
+
defaultOpen,
|
|
52
|
+
onOpenChange,
|
|
53
|
+
sharedFocusGroup = false,
|
|
54
|
+
modal: modalProp,
|
|
15
55
|
...rest
|
|
16
56
|
}: ScopedProps<ThreadListItemMorePrimitiveRoot.Props>) => {
|
|
57
|
+
const modal = sharedFocusGroup ? false : (modalProp ?? true);
|
|
17
58
|
const scope = useDropdownMenuScope(__scopeThreadListItemMore);
|
|
59
|
+
const [open, setOpen] = useControllableState({
|
|
60
|
+
prop: openProp,
|
|
61
|
+
defaultProp: defaultOpen ?? false,
|
|
62
|
+
caller: "ThreadListItemMorePrimitive.Root",
|
|
63
|
+
...(onOpenChange ? { onChange: onOpenChange } : {}),
|
|
64
|
+
});
|
|
18
65
|
|
|
19
|
-
return
|
|
66
|
+
return (
|
|
67
|
+
<ThreadListItemMoreSharedFocusGroupContext.Provider
|
|
68
|
+
value={sharedFocusGroup}
|
|
69
|
+
>
|
|
70
|
+
<ThreadListItemMoreSetOpenContext.Provider value={setOpen}>
|
|
71
|
+
<DropdownMenuPrimitive.Root
|
|
72
|
+
{...scope}
|
|
73
|
+
{...rest}
|
|
74
|
+
modal={modal}
|
|
75
|
+
open={open}
|
|
76
|
+
onOpenChange={setOpen}
|
|
77
|
+
/>
|
|
78
|
+
</ThreadListItemMoreSetOpenContext.Provider>
|
|
79
|
+
</ThreadListItemMoreSharedFocusGroupContext.Provider>
|
|
80
|
+
);
|
|
20
81
|
};
|
|
21
82
|
|
|
22
83
|
ThreadListItemMorePrimitiveRoot.displayName =
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { type ComponentRef, forwardRef } from "react";
|
|
4
|
-
import
|
|
4
|
+
import {
|
|
5
|
+
Direction,
|
|
6
|
+
type DropdownMenu as DropdownMenuPrimitive,
|
|
7
|
+
} from "radix-ui";
|
|
8
|
+
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
9
|
+
import { composeEventHandlers } from "@radix-ui/primitive";
|
|
5
10
|
import type { WithRenderPropProps } from "../../utils/Primitive";
|
|
6
11
|
import { DropdownMenuRenderTrigger } from "../dropdownMenuRenderPrimitives";
|
|
12
|
+
import { useThreadListItemFocus } from "../threadListFocusGroup";
|
|
13
|
+
import {
|
|
14
|
+
useThreadListItemMoreSharedFocusGroup,
|
|
15
|
+
useThreadListItemMoreSetOpen,
|
|
16
|
+
} from "./ThreadListItemMoreRoot";
|
|
7
17
|
import { type ScopedProps, useDropdownMenuScope } from "./scope";
|
|
8
18
|
|
|
9
19
|
export namespace ThreadListItemMorePrimitiveTrigger {
|
|
@@ -23,8 +33,25 @@ export const ThreadListItemMorePrimitiveTrigger = forwardRef<
|
|
|
23
33
|
ref,
|
|
24
34
|
) => {
|
|
25
35
|
const scope = useDropdownMenuScope(__scopeThreadListItemMore);
|
|
36
|
+
const focus = useThreadListItemFocus();
|
|
37
|
+
const setOpen = useThreadListItemMoreSetOpen();
|
|
38
|
+
const sharedFocusGroup = useThreadListItemMoreSharedFocusGroup();
|
|
39
|
+
const composedRef = useComposedRefs(ref, focus?.moreRef);
|
|
40
|
+
const direction = Direction.useDirection();
|
|
41
|
+
const openKey = direction === "rtl" ? "ArrowLeft" : "ArrowRight";
|
|
26
42
|
|
|
27
|
-
return
|
|
43
|
+
return (
|
|
44
|
+
<DropdownMenuRenderTrigger
|
|
45
|
+
{...scope}
|
|
46
|
+
{...rest}
|
|
47
|
+
onKeyDown={composeEventHandlers(rest.onKeyDown, (event) => {
|
|
48
|
+
if (!sharedFocusGroup || event.key !== openKey) return;
|
|
49
|
+
event.preventDefault();
|
|
50
|
+
setOpen(true);
|
|
51
|
+
})}
|
|
52
|
+
ref={composedRef}
|
|
53
|
+
/>
|
|
54
|
+
);
|
|
28
55
|
},
|
|
29
56
|
);
|
|
30
57
|
|
|
@@ -161,7 +161,10 @@ describe("LocalThreadRuntimeCore", () => {
|
|
|
161
161
|
expect(assistant.status!.type).toBe("incomplete");
|
|
162
162
|
if (assistant.status!.type === "incomplete") {
|
|
163
163
|
expect(assistant.status!.reason).toBe("error");
|
|
164
|
-
expect(assistant.status!.error).
|
|
164
|
+
expect(assistant.status!.error).toEqual({
|
|
165
|
+
code: "unknown",
|
|
166
|
+
message: "Model unavailable",
|
|
167
|
+
});
|
|
165
168
|
}
|
|
166
169
|
});
|
|
167
170
|
|