@assistant-ui/react 0.15.21 → 0.15.23
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 +1 -1
- package/README.md +1 -1
- package/dist/assistant-transport.d.ts +24 -24
- package/dist/assistant-transport.d.ts.map +1 -1
- package/dist/assistant-transport.js.map +1 -1
- package/dist/augmentations.d.ts +28 -5
- package/dist/augmentations.d.ts.map +1 -1
- package/dist/cloud-renderer/CloudRendererHost.d.ts +13 -0
- package/dist/cloud-renderer/CloudRendererHost.d.ts.map +1 -0
- package/dist/cloud-renderer/CloudRendererHost.js +291 -0
- package/dist/cloud-renderer/CloudRendererHost.js.map +1 -0
- package/dist/context/ReadonlyStore.d.ts +1 -3
- package/dist/context/ReadonlyStore.d.ts.map +1 -1
- package/dist/context/index.d.ts +13 -13
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/providers/AttachmentByIndexProvider.d.ts +2 -2
- package/dist/context/providers/AttachmentByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts +2 -2
- package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -0
- package/dist/context/providers/ChainOfThoughtPartByIndexProvider.d.ts +2 -2
- package/dist/context/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/MessageByIndexProvider.d.ts +2 -2
- package/dist/context/providers/MessageByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/MessageProvider.d.ts +2 -4
- package/dist/context/providers/MessageProvider.d.ts.map +1 -1
- package/dist/context/providers/PartByIndexProvider.d.ts +2 -2
- package/dist/context/providers/PartByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/SuggestionByIndexProvider.d.ts +2 -2
- package/dist/context/providers/SuggestionByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/TextMessagePartProvider.d.ts +2 -2
- package/dist/context/providers/TextMessagePartProvider.d.ts.map +1 -0
- package/dist/context/providers/ThreadListItemProvider.d.ts +2 -2
- package/dist/context/providers/ThreadListItemProvider.d.ts.map +1 -0
- package/dist/context/providers/ThreadViewportProvider.d.ts +3 -5
- package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -1
- package/dist/context/react/ThreadViewportContext.d.ts +17 -19
- package/dist/context/react/ThreadViewportContext.d.ts.map +1 -1
- package/dist/context/react/utils/createContextHook.d.ts +2 -4
- package/dist/context/react/utils/createContextHook.d.ts.map +1 -1
- package/dist/context/react/utils/createContextStoreHook.d.ts +15 -17
- package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
- package/dist/context/stores/ThreadViewport.d.ts +72 -74
- package/dist/context/stores/ThreadViewport.d.ts.map +1 -1
- package/dist/devtools/DevToolsHooks.d.ts +19 -20
- package/dist/devtools/DevToolsHooks.d.ts.map +1 -1
- package/dist/hooks/useMessageQuote.d.ts +1 -3
- package/dist/hooks/useMessageQuote.d.ts.map +1 -1
- package/dist/hooks/useMessageTiming.d.ts +1 -3
- package/dist/hooks/useMessageTiming.d.ts.map +1 -1
- package/dist/hooks/useToolCallElapsed.d.ts +0 -2
- package/dist/hooks/useToolCallElapsed.d.ts.map +1 -1
- package/dist/hooks/useToolCallElapsed.js +1 -1
- package/dist/index.d.ts +126 -82
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -13
- package/dist/internal.d.ts +8 -11
- package/dist/internal.d.ts.map +1 -1
- package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +24 -26
- package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/legacy-runtime/AssistantRuntimeProvider.js +1 -1
- package/dist/legacy-runtime/RuntimeAdapter.d.ts +2 -2
- package/dist/legacy-runtime/RuntimeAdapter.d.ts.map +1 -0
- package/dist/legacy-runtime/cloud/AssistantCloudThreadHistoryAdapter.d.ts +2 -2
- package/dist/legacy-runtime/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime/AssistantRuntime.d.ts +3 -3
- package/dist/legacy-runtime/runtime/AssistantRuntime.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime/AttachmentRuntime.d.ts +3 -3
- package/dist/legacy-runtime/runtime/AttachmentRuntime.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime/ComposerRuntime.d.ts +4 -3
- package/dist/legacy-runtime/runtime/ComposerRuntime.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime/RuntimeBindings.d.ts +3 -3
- package/dist/legacy-runtime/runtime/RuntimeBindings.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime/RuntimePathTypes.d.ts +2 -2
- package/dist/legacy-runtime/runtime/RuntimePathTypes.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime/ThreadListItemRuntime.d.ts +5 -3
- package/dist/legacy-runtime/runtime/ThreadListItemRuntime.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime/ThreadRuntime.d.ts +4 -3
- package/dist/legacy-runtime/runtime/ThreadRuntime.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/adapters/RuntimeAdapterProvider.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/adapters/RuntimeAdapterProvider.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/adapters/attachment/CloudFileAttachmentAdapter.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/adapters/attachment/CloudFileAttachmentAdapter.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/composer/DefaultEditComposerRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/composer/DefaultEditComposerRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/composer/DefaultThreadComposerRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/composer/DefaultThreadComposerRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/core/AssistantRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/core/AssistantRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/core/BaseAssistantRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/core/BaseAssistantRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/core/ComposerRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/core/ComposerRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/core/ThreadListRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/core/ThreadListRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadListRuntimeCore.d.ts +3 -2
- package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageConverter.d.ts +3 -2
- package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageConverter.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.d.ts +3 -3
- package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/external-store/auto-status.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/external-store/auto-status.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/external-store/external-message-converter.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/external-store/external-message-converter.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/external-store/useExternalStoreRuntime.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/external-store/useExternalStoreRuntime.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/local/ChatModelAdapter.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/local/ChatModelAdapter.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeOptions.d.ts +4 -3
- package/dist/legacy-runtime/runtime-cores/local/LocalRuntimeOptions.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/local/LocalThreadListRuntimeCore.d.ts +3 -2
- package/dist/legacy-runtime/runtime-cores/local/LocalThreadListRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/local/shouldContinue.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/local/shouldContinue.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/BaseSubscribable.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/BaseSubscribable.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/OptimisticState.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/OptimisticState.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/cloud.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/cloud.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/in-memory.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/adapter/in-memory.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/types.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/types.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/useRemoteThreadListRuntime.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/remote-thread-list/useRemoteThreadListRuntime.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.d.ts +4 -3
- package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.d.ts.map +1 -0
- package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.js +1 -1
- package/dist/mcp-apps/McpAppRenderer.d.ts +49 -51
- package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
- package/dist/mcp-apps/McpAppRenderer.js +2 -2
- package/dist/mcp-apps/McpAppsRemoteHost.d.ts +1 -3
- package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
- package/dist/mcp-apps/app-frame.d.ts +2 -4
- package/dist/mcp-apps/app-frame.d.ts.map +1 -1
- package/dist/mcp-apps/bridge.d.ts +11 -13
- package/dist/mcp-apps/bridge.d.ts.map +1 -1
- package/dist/mcp-apps/index.d.ts +5 -5
- package/dist/mcp-apps/index.d.ts.map +1 -0
- package/dist/mcp-apps/types.d.ts +95 -97
- package/dist/mcp-apps/types.d.ts.map +1 -1
- package/dist/mcp-apps/utils.d.ts +2 -3
- package/dist/mcp-apps/utils.d.ts.map +1 -1
- package/dist/model-context/frame/useAssistantFrameHost.d.ts +8 -8
- package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -1
- package/dist/model-context/frame/useAssistantFrameHost.js +1 -1
- package/dist/model-context/makeAssistantVisible.d.ts +4 -6
- package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
- package/dist/model-context/makeAssistantVisible.js +2 -2
- package/dist/primitives/actionBar/ActionBarCopy.d.ts +13 -14
- package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarCopy.js +1 -1
- package/dist/primitives/actionBar/ActionBarEdit.d.ts +10 -11
- package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +11 -12
- package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarExportMarkdown.js +4 -1
- package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +6 -7
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +11 -9
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +6 -7
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +11 -9
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts +1 -3
- package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarReload.d.ts +10 -11
- package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarRoot.d.ts +49 -50
- package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarSpeak.d.ts +6 -7
- package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
- package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +6 -7
- package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +8 -10
- package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -1
- package/dist/primitives/actionBar.d.ts +9 -14
- package/dist/primitives/actionBar.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +10 -12
- package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +7 -9
- package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +3 -5
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +7 -9
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +7 -9
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -1
- package/dist/primitives/actionBarMore/scope.d.ts +4 -6
- package/dist/primitives/actionBarMore/scope.d.ts.map +1 -1
- package/dist/primitives/actionBarMore.d.ts +5 -10
- package/dist/primitives/actionBarMore.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +7 -9
- package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts +12 -14
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +5 -7
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.js +1 -1
- package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +7 -9
- package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -1
- package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts +7 -9
- package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts.map +1 -1
- package/dist/primitives/assistantModal/scope.d.ts +4 -6
- package/dist/primitives/assistantModal/scope.d.ts.map +1 -1
- package/dist/primitives/assistantModal.d.ts +4 -9
- package/dist/primitives/assistantModal.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentName.d.ts +2 -4
- package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentRemove.d.ts +6 -7
- package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentRemove.js +1 -1
- package/dist/primitives/attachment/AttachmentRoot.d.ts +10 -11
- package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentThumb.d.ts +6 -7
- package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -1
- package/dist/primitives/attachment/AttachmentThumb.js +1 -1
- package/dist/primitives/attachment.d.ts +4 -9
- package/dist/primitives/attachment.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerCount.d.ts +6 -8
- package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerNext.d.ts +10 -11
- package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +2 -4
- package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +10 -11
- package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +18 -20
- package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerRoot.js +1 -1
- package/dist/primitives/branchPicker.d.ts +5 -10
- package/dist/primitives/branchPicker.d.ts.map +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +10 -11
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -2
- package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +6 -7
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -1
- package/dist/primitives/chainOfThought.d.ts +3 -8
- package/dist/primitives/chainOfThought.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerAddAttachment.d.ts +11 -12
- package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerAddAttachment.js +1 -1
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +10 -11
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerAttachmentDropzone.js +9 -7
- package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
- package/dist/primitives/composer/ComposerAttachments.d.ts +2 -2
- package/dist/primitives/composer/ComposerAttachments.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerCancel.d.ts +10 -11
- package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerCompactContext.d.ts +1 -3
- package/dist/primitives/composer/ComposerCompactContext.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerDictate.d.ts +6 -7
- package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerDictationTranscript.d.ts +5 -7
- package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerDictationTranscript.js +1 -1
- package/dist/primitives/composer/ComposerIf.d.ts +3 -2
- package/dist/primitives/composer/ComposerIf.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerInput.d.ts +72 -74
- package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerInput.js +3 -3
- package/dist/primitives/composer/ComposerInput.js.map +1 -1
- package/dist/primitives/composer/ComposerInputPluginContext.d.ts +22 -24
- package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerQueue.d.ts +2 -2
- package/dist/primitives/composer/ComposerQueue.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerQuote.d.ts +13 -15
- package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerQuote.js +1 -1
- package/dist/primitives/composer/ComposerRoot.d.ts +26 -28
- package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerRoot.js +1 -1
- package/dist/primitives/composer/ComposerSend.d.ts +9 -11
- package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerStopDictation.d.ts +6 -7
- package/dist/primitives/composer/ComposerStopDictation.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerStopDictation.js +1 -1
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts +27 -29
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopover.js +2 -2
- package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +10 -12
- package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverAction.js +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts +5 -7
- package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts +16 -18
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +8 -10
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts +18 -20
- package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +41 -43
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +27 -28
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/detectTrigger.d.ts +3 -5
- package/dist/primitives/composer/trigger/detectTrigger.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/index.d.ts +15 -18
- package/dist/primitives/composer/trigger/index.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts +1 -3
- package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +10 -12
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +22 -24
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +18 -20
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +23 -25
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
- package/dist/primitives/composer/useComposerInputState.d.ts +4 -6
- package/dist/primitives/composer/useComposerInputState.d.ts.map +1 -1
- package/dist/primitives/composer.d.ts +31 -25
- package/dist/primitives/composer.d.ts.map +1 -1
- package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +9 -11
- package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -1
- package/dist/primitives/error/ErrorMessage.d.ts +5 -7
- package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
- package/dist/primitives/error/ErrorRoot.d.ts +5 -7
- package/dist/primitives/error/ErrorRoot.d.ts.map +1 -1
- package/dist/primitives/error.d.ts +2 -7
- package/dist/primitives/error.d.ts.map +1 -1
- package/dist/primitives/message/MessageAttachments.d.ts +2 -2
- package/dist/primitives/message/MessageAttachments.d.ts.map +1 -0
- package/dist/primitives/message/MessageError.d.ts +1 -3
- package/dist/primitives/message/MessageError.d.ts.map +1 -1
- package/dist/primitives/message/MessageIf.d.ts +15 -16
- package/dist/primitives/message/MessageIf.d.ts.map +1 -1
- package/dist/primitives/message/MessageIf.js +6 -3
- package/dist/primitives/message/MessageIf.js.map +1 -1
- package/dist/primitives/message/MessageParts.d.ts +4 -6
- package/dist/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/primitives/message/MessagePartsGrouped.d.ts +132 -133
- package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
- package/dist/primitives/message/MessagePartsGrouped.js +103 -71
- package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
- package/dist/primitives/message/MessageRoot.d.ts +5 -7
- package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
- package/dist/primitives/message/MessageRoot.js +6 -2
- package/dist/primitives/message/MessageRoot.js.map +1 -1
- package/dist/primitives/message.d.ts +12 -12
- package/dist/primitives/message.d.ts.map +1 -1
- package/dist/primitives/messagePart/MessagePartImage.d.ts +9 -11
- package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -1
- package/dist/primitives/messagePart/MessagePartInProgress.d.ts +2 -2
- package/dist/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -0
- package/dist/primitives/messagePart/MessagePartText.d.ts +35 -37
- package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartData.d.ts +1 -3
- package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartFile.d.ts +2 -4
- package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartImage.d.ts +2 -4
- package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +2 -4
- package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartSource.d.ts +19 -21
- package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -1
- package/dist/primitives/messagePart/useMessagePartText.d.ts +3 -5
- package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -1
- package/dist/primitives/messagePart.d.ts +4 -9
- package/dist/primitives/messagePart.d.ts.map +1 -1
- package/dist/primitives/queueItem/QueueItemRemove.d.ts +6 -7
- package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -1
- package/dist/primitives/queueItem/QueueItemRemove.js +1 -1
- package/dist/primitives/queueItem/QueueItemSteer.d.ts +6 -7
- package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -1
- package/dist/primitives/queueItem/QueueItemSteer.js +1 -1
- package/dist/primitives/queueItem/QueueItemText.d.ts +5 -7
- package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -1
- package/dist/primitives/queueItem/QueueItemText.js +1 -1
- package/dist/primitives/queueItem.d.ts +3 -8
- package/dist/primitives/queueItem.d.ts.map +1 -1
- package/dist/primitives/reasoning/useScrollLock.d.ts +1 -3
- package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -1
- package/dist/primitives/reasoning/useScrollLock.js +14 -15
- package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +5 -7
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +1 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +12 -13
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +81 -42
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
- package/dist/primitives/selectionToolbar.d.ts +2 -7
- package/dist/primitives/selectionToolbar.d.ts.map +1 -1
- package/dist/primitives/suggestion/SuggestionDescription.d.ts +5 -7
- package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -1
- package/dist/primitives/suggestion/SuggestionDescription.js +1 -1
- package/dist/primitives/suggestion/SuggestionTitle.d.ts +5 -7
- package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -1
- package/dist/primitives/suggestion/SuggestionTitle.js +1 -1
- package/dist/primitives/suggestion/SuggestionTrigger.d.ts +35 -36
- package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
- package/dist/primitives/suggestion.d.ts +3 -8
- package/dist/primitives/suggestion.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadEmpty.d.ts +2 -4
- package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadIf.d.ts +7 -8
- package/dist/primitives/thread/ThreadIf.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadMessages.d.ts +2 -2
- package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadRoot.d.ts +12 -13
- package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadRoot.js +57 -30
- package/dist/primitives/thread/ThreadRoot.js.map +1 -1
- 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 +11 -0
- package/dist/primitives/thread/ThreadRootElementContext.js.map +1 -0
- package/dist/primitives/thread/ThreadScrollToBottom.d.ts +11 -13
- package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadSuggestion.d.ts +47 -48
- package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadSuggestions.d.ts +2 -2
- package/dist/primitives/thread/ThreadSuggestions.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadViewport.d.ts +88 -90
- package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadViewport.js +1 -1
- package/dist/primitives/thread/ThreadViewportFooter.d.ts +5 -7
- package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +6 -8
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts +2 -4
- package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts +16 -18
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js +55 -6
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -1
- package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +10 -11
- package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts +0 -2
- package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -1
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts +0 -2
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -1
- package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +29 -31
- package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
- package/dist/primitives/thread/useThreadViewportAutoScroll.js +16 -1
- package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
- package/dist/primitives/thread.d.ts +12 -15
- package/dist/primitives/thread.d.ts.map +1 -1
- package/dist/primitives/threadList/ThreadListItems.d.ts +2 -2
- package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -0
- package/dist/primitives/threadList/ThreadListLoadMore.d.ts +6 -7
- package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -1
- package/dist/primitives/threadList/ThreadListNew.d.ts +5 -7
- package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
- package/dist/primitives/threadList/ThreadListNew.js +1 -1
- package/dist/primitives/threadList/ThreadListRoot.d.ts +6 -7
- package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -1
- package/dist/primitives/threadList.d.ts +5 -9
- package/dist/primitives/threadList.d.ts.map +1 -1
- package/dist/primitives/threadListFocusGroup.d.ts +14 -16
- package/dist/primitives/threadListFocusGroup.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +6 -7
- package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +6 -7
- package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +6 -7
- package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.js +2 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -2
- package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +6 -7
- package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +6 -7
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/primitives/threadListItem.d.ts +6 -11
- package/dist/primitives/threadListItem.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +10 -12
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +7 -9
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +11 -13
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +7 -9
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +7 -9
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
- package/dist/primitives/threadListItemMore/scope.d.ts +4 -6
- package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -1
- package/dist/primitives/threadListItemMore.d.ts +5 -10
- package/dist/primitives/threadListItemMore.d.ts.map +1 -1
- package/dist/sandbox-host/SandboxHost.d.ts +24 -26
- package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
- package/dist/unstable/useComposerInput.d.ts +32 -34
- package/dist/unstable/useComposerInput.d.ts.map +1 -1
- package/dist/unstable/useComposerInput.js +1 -1
- package/dist/unstable/useComposerInputHistory.d.ts +3 -5
- package/dist/unstable/useComposerInputHistory.d.ts.map +1 -1
- package/dist/unstable/useComposerInputHistory.js +2 -2
- package/dist/unstable/useLiveCompletionAdapter.d.ts +18 -20
- package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -1
- package/dist/unstable/useMentionAdapter.d.ts +57 -59
- package/dist/unstable/useMentionAdapter.d.ts.map +1 -1
- package/dist/unstable/useMentionAdapter.js +1 -1
- package/dist/unstable/useMessageStallDetection.d.ts +10 -12
- package/dist/unstable/useMessageStallDetection.d.ts.map +1 -1
- package/dist/unstable/useMessageStallDetection.js +1 -1
- package/dist/unstable/useModelContextSnapshot.d.ts +13 -15
- package/dist/unstable/useModelContextSnapshot.d.ts.map +1 -1
- package/dist/unstable/useSlashCommandAdapter.d.ts +20 -22
- package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
- package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +8 -9
- package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -1
- package/dist/unstable/webmcp/WebMcpRegistrationResource.js +27 -39
- package/dist/unstable/webmcp/WebMcpRegistrationResource.js.map +1 -1
- package/dist/unstable/webmcp/convertTools.d.ts +5 -7
- package/dist/unstable/webmcp/convertTools.d.ts.map +1 -1
- package/dist/unstable/webmcp/convertTools.js +2 -2
- package/dist/unstable/webmcp/convertTools.js.map +1 -1
- package/dist/unstable/webmcp/useWebMcpProvider.d.ts +4 -6
- package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -1
- package/dist/unstable/webmcp/useWebMcpProvider.js +22 -13
- package/dist/unstable/webmcp/useWebMcpProvider.js.map +1 -1
- package/dist/unstable/webmcp/webmcp-host.d.ts +23 -25
- package/dist/unstable/webmcp/webmcp-host.d.ts.map +1 -1
- package/dist/utils/Primitive.d.ts +91 -92
- package/dist/utils/Primitive.d.ts.map +1 -1
- package/dist/utils/RequireAtLeastOne.d.ts +3 -3
- package/dist/utils/RequireAtLeastOne.d.ts.map +1 -1
- package/dist/utils/createActionButton.d.ts +5 -6
- package/dist/utils/createActionButton.d.ts.map +1 -1
- package/dist/utils/getSelectionMessageId.d.ts +1 -3
- package/dist/utils/getSelectionMessageId.d.ts.map +1 -1
- package/dist/utils/getSelectionMessageId.js +2 -1
- package/dist/utils/getSelectionMessageId.js.map +1 -1
- package/dist/utils/hooks/useManagedRef.d.ts +0 -2
- package/dist/utils/hooks/useManagedRef.d.ts.map +1 -1
- package/dist/utils/hooks/useMediaQuery.d.ts +0 -2
- package/dist/utils/hooks/useMediaQuery.d.ts.map +1 -1
- package/dist/utils/hooks/useOnResizeContent.d.ts +0 -2
- package/dist/utils/hooks/useOnResizeContent.d.ts.map +1 -1
- package/dist/utils/hooks/useOnScrollToBottom.d.ts +1 -3
- package/dist/utils/hooks/useOnScrollToBottom.d.ts.map +1 -1
- package/dist/utils/hooks/useSizeHandle.d.ts +1 -3
- package/dist/utils/hooks/useSizeHandle.d.ts.map +1 -1
- package/dist/utils/smooth/SmoothContext.d.ts +105 -107
- package/dist/utils/smooth/SmoothContext.d.ts.map +1 -1
- package/dist/utils/smooth/SmoothContext.js +1 -1
- package/dist/utils/smooth/useSmooth.d.ts +26 -28
- package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
- package/dist/utils/smooth/useSmooth.js +1 -1
- package/package.json +12 -9
- package/src/assistant-transport.ts +5 -4
- package/src/cloud-renderer/CloudRendererHost.test.tsx +362 -0
- package/src/cloud-renderer/CloudRendererHost.tsx +249 -0
- package/src/index.ts +29 -1
- package/src/primitives/actionBar/ActionBarExportMarkdown.test.tsx +30 -0
- package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +4 -0
- package/src/primitives/actionBar/ActionBarFeedback.test.tsx +87 -0
- package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +1 -0
- package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +1 -0
- package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +54 -0
- package/src/primitives/composer/ComposerAttachmentDropzone.tsx +12 -6
- package/src/primitives/composer/ComposerInput.test.tsx +18 -0
- package/src/primitives/composer/ComposerInput.tsx +8 -2
- package/src/primitives/message/MessageIf.test.tsx +72 -0
- package/src/primitives/message/MessageIf.ts +8 -3
- package/src/primitives/message/MessagePartsGrouped.test.tsx +151 -4
- package/src/primitives/message/MessagePartsGrouped.tool-interaction.test.tsx +97 -0
- package/src/primitives/message/MessagePartsGrouped.tsx +14 -5
- package/src/primitives/message/MessageRoot.test.tsx +108 -0
- package/src/primitives/message/MessageRoot.tsx +5 -1
- package/src/primitives/reasoning/useScrollLock.test.tsx +47 -0
- package/src/primitives/reasoning/useScrollLock.ts +15 -17
- package/src/primitives/selectionToolbar/SelectionToolbarRoot.test.tsx +228 -14
- package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +60 -12
- package/src/primitives/thread/ThreadRoot.test.tsx +130 -0
- package/src/primitives/thread/ThreadRoot.tsx +39 -3
- package/src/primitives/thread/ThreadRootElementContext.ts +10 -0
- package/src/primitives/thread/topAnchor/mountTopAnchorReserve.test.ts +196 -0
- package/src/primitives/thread/topAnchor/mountTopAnchorReserve.ts +78 -5
- package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +222 -0
- package/src/primitives/thread/useThreadViewportAutoScroll.ts +37 -2
- package/src/primitives/threadListItem/ThreadListItemRoot.tsx +2 -0
- package/src/primitives/threadListItem/ThreadListKeyboardNav.test.tsx +65 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreContent.tsx +7 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreTrigger.tsx +2 -0
- package/src/tests/RemoteThreadListRuntime.reloadMainThread.test.tsx +8 -13
- package/src/tests/augmentations.test.ts +7 -0
- package/src/tests/remote-thread-list-test-helpers.ts +15 -0
- package/src/tests/threadListItemIsRunning.test.tsx +10 -7
- package/src/unstable/webmcp/WebMcpRegistrationResource.ts +9 -8
- package/src/unstable/webmcp/convertTools.test.ts +23 -3
- package/src/unstable/webmcp/convertTools.ts +7 -11
- package/src/unstable/webmcp/useWebMcpProvider.test.tsx +36 -2
- package/src/unstable/webmcp/useWebMcpProvider.ts +40 -13
- package/src/utils/getSelectionMessageId.test.ts +28 -0
- package/src/utils/getSelectionMessageId.ts +7 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -5
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +0 -1
- package/dist/tests/remote-thread-list-test-helpers.js +0 -29
- package/dist/tests/remote-thread-list-test-helpers.js.map +0 -1
- package/dist/tests/setup.d.ts +0 -1
- package/dist/tests/setup.js +0 -6
- package/dist/tests/setup.js.map +0 -1
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Primitive } from "../../utils/Primitive.js";
|
|
2
|
-
import {
|
|
3
|
-
//#region src/primitives/thread/ThreadViewportFooter.d.ts
|
|
2
|
+
import { type ComponentRef, type ComponentPropsWithoutRef } from "react";
|
|
4
3
|
export declare namespace ThreadPrimitiveViewportFooter {
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
type Element = ComponentRef<typeof Primitive.div>;
|
|
5
|
+
type Props = ComponentPropsWithoutRef<typeof Primitive.div>;
|
|
7
6
|
}
|
|
8
7
|
/**
|
|
9
8
|
* A footer container that measures its height for scroll calculations.
|
|
@@ -30,9 +29,8 @@ export declare namespace ThreadPrimitiveViewportFooter {
|
|
|
30
29
|
* ```
|
|
31
30
|
*/
|
|
32
31
|
export declare const ThreadPrimitiveViewportFooter: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & {
|
|
33
|
-
|
|
32
|
+
asChild?: boolean;
|
|
34
33
|
}, "ref"> & {
|
|
35
|
-
|
|
34
|
+
render?: import("react").ReactElement | undefined;
|
|
36
35
|
} & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
37
|
-
//#endregion
|
|
38
36
|
//# sourceMappingURL=ThreadViewportFooter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadViewportFooter.d.ts","
|
|
1
|
+
{"version":3,"file":"ThreadViewportFooter.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/ThreadViewportFooter.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,iCAA8B;AAClD,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,wBAAwB,EAE9B,MAAM,OAAO,CAAC;AAIf,yBAAiB,6BAA6B,CAAC;IAC7C,KAAY,OAAO,GAAG,YAAY,CAAC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IACzD,KAAY,KAAK,GAAG,wBAAwB,CAAC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;CACpE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,6BAA6B;;;;0GAexC,CAAC"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
//#region src/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts
|
|
2
1
|
export type ComputeTopAnchorTargetOptions = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
viewport: HTMLElement;
|
|
3
|
+
anchor: HTMLElement;
|
|
4
|
+
tallerThan: number;
|
|
5
|
+
visibleHeight: number;
|
|
7
6
|
};
|
|
8
7
|
export type ComputeTopAnchorReserveOptions = ComputeTopAnchorTargetOptions & {
|
|
9
|
-
|
|
8
|
+
reserve: HTMLElement;
|
|
10
9
|
};
|
|
11
10
|
/**
|
|
12
11
|
* Compute the scroll position that pins the anchor (last user message) to the
|
|
@@ -18,7 +17,6 @@ export type ComputeTopAnchorReserveOptions = ComputeTopAnchorTargetOptions & {
|
|
|
18
17
|
* `viewport.scrollHeight` (which is volatile while the assistant message
|
|
19
18
|
* streams in).
|
|
20
19
|
*/
|
|
21
|
-
export declare const computeTopAnchorTargetScrollTop: ({ viewport, anchor, tallerThan, visibleHeight }: ComputeTopAnchorTargetOptions) => number;
|
|
20
|
+
export declare const computeTopAnchorTargetScrollTop: ({ viewport, anchor, tallerThan, visibleHeight, }: ComputeTopAnchorTargetOptions) => number;
|
|
22
21
|
export declare const computeTopAnchorReserve: ({ viewport, reserve, ...targetOptions }: ComputeTopAnchorReserveOptions) => number;
|
|
23
|
-
//#endregion
|
|
24
22
|
//# sourceMappingURL=computeTopAnchorSlack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computeTopAnchorSlack.d.ts","
|
|
1
|
+
{"version":3,"file":"computeTopAnchorSlack.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/computeTopAnchorSlack.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,6BAA6B,GAAG;IAC3E,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC;AAqCF;;;;;;;;;GASG;AACH,eAAO,MAAM,+BAA+B,GAAI,kDAK7C,6BAA6B,KAAG,MAOlC,CAAC;AAaF,eAAO,MAAM,uBAAuB,GAAI,yCAIrC,8BAA8B,KAAG,MAMnC,CAAC"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
//#region src/primitives/thread/topAnchor/createReserveObservers.d.ts
|
|
2
1
|
export declare const createReserveObservers: (onChange: () => void) => {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
target: (viewport: HTMLElement, anchor: HTMLElement, target: HTMLElement) => void;
|
|
3
|
+
disconnect: () => void;
|
|
5
4
|
};
|
|
6
|
-
//#endregion
|
|
7
5
|
//# sourceMappingURL=createReserveObservers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createReserveObservers.d.ts","
|
|
1
|
+
{"version":3,"file":"createReserveObservers.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/createReserveObservers.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,GAAI,UAAU,MAAM,IAAI;uBAkB3C,WAAW,UACb,WAAW,UACX,WAAW;;CA2BxB,CAAC"}
|
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
//#region src/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts
|
|
2
1
|
/**
|
|
3
2
|
* Minimal slice of `ThreadViewportStore` that the top-anchor reserve needs.
|
|
4
3
|
* Decoupling from the full store keeps `mountTopAnchorReserve` testable in
|
|
5
4
|
* isolation and re-usable from any consumer that can adapt to this shape.
|
|
6
5
|
*/
|
|
7
6
|
export type TopAnchorStore = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
getState(): {
|
|
8
|
+
turnAnchor: "top" | "bottom";
|
|
9
|
+
element: {
|
|
10
|
+
viewport: HTMLElement | null;
|
|
11
|
+
anchor: HTMLElement | null;
|
|
12
|
+
target: HTMLElement | null;
|
|
13
|
+
};
|
|
14
|
+
targetConfig: {
|
|
15
|
+
tallerThan: number;
|
|
16
|
+
visibleHeight: number;
|
|
17
|
+
} | null;
|
|
18
|
+
topAnchorTurn: {
|
|
19
|
+
readonly anchorId: string;
|
|
20
|
+
readonly targetId: string;
|
|
21
|
+
} | null;
|
|
14
22
|
};
|
|
15
|
-
|
|
16
|
-
tallerThan: number;
|
|
17
|
-
visibleHeight: number;
|
|
18
|
-
} | null;
|
|
19
|
-
topAnchorTurn: {
|
|
20
|
-
readonly anchorId: string;
|
|
21
|
-
readonly targetId: string;
|
|
22
|
-
} | null;
|
|
23
|
-
};
|
|
24
|
-
subscribe(fn: () => void): () => void;
|
|
23
|
+
subscribe(fn: () => void): () => void;
|
|
25
24
|
};
|
|
26
25
|
export declare const mountTopAnchorReserve: (store: TopAnchorStore) => () => void;
|
|
27
|
-
//#endregion
|
|
28
26
|
//# sourceMappingURL=mountTopAnchorReserve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mountTopAnchorReserve.d.ts","
|
|
1
|
+
{"version":3,"file":"mountTopAnchorReserve.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/mountTopAnchorReserve.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,IAAI;QACV,UAAU,EAAE,KAAK,GAAG,QAAQ,CAAC;QAC7B,OAAO,EAAE;YACP,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;YAC7B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;YAC3B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;SAC5B,CAAC;QACF,YAAY,EAAE;YACZ,UAAU,EAAE,MAAM,CAAC;YACnB,aAAa,EAAE,MAAM,CAAC;SACvB,GAAG,IAAI,CAAC;QACT,aAAa,EAAE;YACb,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;SAC3B,GAAG,IAAI,CAAC;KACV,CAAC;IACF,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CACvC,CAAC;AAsBF,eAAO,MAAM,qBAAqB,GAAI,OAAO,cAAc,eAiK1D,CAAC"}
|
|
@@ -24,12 +24,46 @@ const createFrameScheduler = (fn) => {
|
|
|
24
24
|
const mountTopAnchorReserve = (store) => {
|
|
25
25
|
let reserve = null;
|
|
26
26
|
let lastScrolledAnchorId;
|
|
27
|
+
let listenedViewport = null;
|
|
28
|
+
let lastScrollTop = 0;
|
|
29
|
+
let restoreScrollTop = null;
|
|
30
|
+
let restoredThisTurn = false;
|
|
31
|
+
let lastAppliedTarget = null;
|
|
32
|
+
const clearRestore = () => {
|
|
33
|
+
restoreScrollTop = null;
|
|
34
|
+
lastAppliedTarget = null;
|
|
35
|
+
};
|
|
36
|
+
const wasPinnedAtLastScroll = () => lastAppliedTarget !== null && Math.abs(lastScrollTop - lastAppliedTarget) <= 1;
|
|
37
|
+
const handleScroll = () => {
|
|
38
|
+
const viewport = listenedViewport;
|
|
39
|
+
if (!viewport) return;
|
|
40
|
+
const scrollTop = viewport.scrollTop;
|
|
41
|
+
const maxScrollTop = Math.max(0, viewport.scrollHeight - viewport.clientHeight);
|
|
42
|
+
if (scrollTop < lastScrollTop && lastScrollTop > maxScrollTop + 1 && Math.abs(scrollTop - maxScrollTop) <= 1 && wasPinnedAtLastScroll() && !restoredThisTurn) {
|
|
43
|
+
restoreScrollTop ??= lastScrollTop;
|
|
44
|
+
scheduler.schedule();
|
|
45
|
+
}
|
|
46
|
+
lastScrollTop = scrollTop;
|
|
47
|
+
};
|
|
48
|
+
const listenViewport = (viewport) => {
|
|
49
|
+
if (listenedViewport === viewport) return;
|
|
50
|
+
if (listenedViewport) listenedViewport.removeEventListener("scroll", handleScroll);
|
|
51
|
+
listenedViewport = viewport;
|
|
52
|
+
restoredThisTurn = false;
|
|
53
|
+
clearRestore();
|
|
54
|
+
if (viewport) {
|
|
55
|
+
viewport.addEventListener("scroll", handleScroll, { passive: true });
|
|
56
|
+
lastScrollTop = viewport.scrollTop;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
27
59
|
function apply() {
|
|
28
60
|
const state = store.getState();
|
|
29
61
|
const { viewport, anchor, target } = state.element;
|
|
30
62
|
const clamp = state.targetConfig;
|
|
63
|
+
listenViewport(state.turnAnchor === "top" ? viewport : null);
|
|
31
64
|
if (state.turnAnchor !== "top" || !viewport) {
|
|
32
65
|
observers.disconnect();
|
|
66
|
+
clearRestore();
|
|
33
67
|
if (reserve) {
|
|
34
68
|
setReserveHeight(reserve, 0);
|
|
35
69
|
reserve.remove();
|
|
@@ -38,11 +72,13 @@ const mountTopAnchorReserve = (store) => {
|
|
|
38
72
|
}
|
|
39
73
|
if (!anchor && !target && !clamp && state.topAnchorTurn) {
|
|
40
74
|
observers.disconnect();
|
|
75
|
+
clearRestore();
|
|
41
76
|
if (reserve?.parentElement && reserve.parentElement.lastElementChild !== reserve) reserve.parentElement.append(reserve);
|
|
42
77
|
return;
|
|
43
78
|
}
|
|
44
79
|
if (!anchor || !target || !clamp) {
|
|
45
80
|
observers.disconnect();
|
|
81
|
+
clearRestore();
|
|
46
82
|
if (reserve) {
|
|
47
83
|
setReserveHeight(reserve, 0);
|
|
48
84
|
reserve.remove();
|
|
@@ -62,17 +98,29 @@ const mountTopAnchorReserve = (store) => {
|
|
|
62
98
|
return;
|
|
63
99
|
}
|
|
64
100
|
const anchorId = getAnchorId(anchor);
|
|
65
|
-
if (anchorId !== void 0 && lastScrolledAnchorId === anchorId) return;
|
|
66
101
|
const targetScrollTop = snapScrollTop(computeTopAnchorTargetScrollTop({
|
|
67
102
|
viewport,
|
|
68
103
|
anchor,
|
|
69
104
|
...clamp
|
|
70
105
|
}));
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
106
|
+
if (anchorId === void 0 || anchorId !== lastScrolledAnchorId) {
|
|
107
|
+
restoreScrollTop = null;
|
|
108
|
+
restoredThisTurn = false;
|
|
109
|
+
if (Math.abs(viewport.scrollTop - targetScrollTop) > 1) viewport.scrollTo({
|
|
110
|
+
top: targetScrollTop,
|
|
111
|
+
behavior: "smooth"
|
|
112
|
+
});
|
|
113
|
+
if (anchorId !== void 0) lastScrolledAnchorId = anchorId;
|
|
114
|
+
} else if (restoreScrollTop !== null && lastAppliedTarget !== null) {
|
|
115
|
+
const desired = snapScrollTop(restoreScrollTop + (targetScrollTop - lastAppliedTarget));
|
|
116
|
+
restoreScrollTop = null;
|
|
117
|
+
restoredThisTurn = true;
|
|
118
|
+
if (Math.abs(viewport.scrollTop - desired) > 1) viewport.scrollTo({
|
|
119
|
+
top: desired,
|
|
120
|
+
behavior: "instant"
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
lastAppliedTarget = targetScrollTop;
|
|
76
124
|
}
|
|
77
125
|
const scheduler = createFrameScheduler(apply);
|
|
78
126
|
const observers = createReserveObservers(scheduler.schedule);
|
|
@@ -82,6 +130,7 @@ const mountTopAnchorReserve = (store) => {
|
|
|
82
130
|
scheduler.cancel();
|
|
83
131
|
unsubscribe();
|
|
84
132
|
observers.disconnect();
|
|
133
|
+
listenViewport(null);
|
|
85
134
|
reserve?.remove();
|
|
86
135
|
};
|
|
87
136
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mountTopAnchorReserve.js","names":["computeTopAnchorReserve","computeTopAnchorTargetScrollTop","createReserveObservers","createReserveElement","getAnchorId","setReserveHeight","snapScrollTop","TopAnchorStore","getState","turnAnchor","element","viewport","HTMLElement","anchor","target","targetConfig","tallerThan","visibleHeight","topAnchorTurn","anchorId","targetId","subscribe","fn","createFrameScheduler","frame","schedule","requestAnimationFrame","cancel","cancelAnimationFrame","mountTopAnchorReserve","store","reserve","lastScrolledAnchorId","apply","state","clamp","observers","disconnect","remove","parentElement","lastElementChild","append","previousElementSibling","after","reserveChanged","scheduler","undefined","targetScrollTop","Math","abs","scrollTop","scrollTo","top","behavior","unsubscribe"],"sources":["../../../../src/primitives/thread/topAnchor/mountTopAnchorReserve.ts"],"sourcesContent":["\"use client\";\n\nimport {\n computeTopAnchorReserve,\n computeTopAnchorTargetScrollTop,\n} from \"./computeTopAnchorSlack\";\nimport { createReserveObservers } from \"./createReserveObservers\";\nimport {\n createReserveElement,\n getAnchorId,\n setReserveHeight,\n snapScrollTop,\n} from \"./topAnchorUtils\";\n\n/**\n * Minimal slice of `ThreadViewportStore` that the top-anchor reserve needs.\n * Decoupling from the full store keeps `mountTopAnchorReserve` testable in\n * isolation and re-usable from any consumer that can adapt to this shape.\n */\nexport type TopAnchorStore = {\n getState(): {\n turnAnchor: \"top\" | \"bottom\";\n element: {\n viewport: HTMLElement | null;\n anchor: HTMLElement | null;\n target: HTMLElement | null;\n };\n targetConfig: {\n tallerThan: number;\n visibleHeight: number;\n } | null;\n topAnchorTurn: {\n readonly anchorId: string;\n readonly targetId: string;\n } | null;\n };\n subscribe(fn: () => void): () => void;\n};\n\nconst createFrameScheduler = (fn: () => void) => {\n let frame: number | null = null;\n\n return {\n schedule: () => {\n if (frame !== null) return;\n frame = requestAnimationFrame(() => {\n frame = null;\n fn();\n });\n },\n cancel: () => {\n if (frame !== null) {\n cancelAnimationFrame(frame);\n frame = null;\n }\n },\n };\n};\n\nexport const mountTopAnchorReserve = (store: TopAnchorStore) => {\n let reserve: HTMLElement | null = null;\n let lastScrolledAnchorId: string | undefined;\n\n function apply() {\n const state = store.getState();\n const { viewport, anchor, target } = state.element;\n const clamp = state.targetConfig;\n\n if (state.turnAnchor !== \"top\" || !viewport) {\n observers.disconnect();\n if (reserve) {\n setReserveHeight(reserve, 0);\n reserve.remove();\n }\n return;\n }\n\n if (!anchor && !target && !clamp && state.topAnchorTurn) {\n // ThreadViewport clears this state once the stored pair stops being the\n // trailing turn (followed at most by pending user messages), so reaching\n // here means the anchor gap is transient and the next run is imminent.\n observers.disconnect();\n if (\n reserve?.parentElement &&\n reserve.parentElement.lastElementChild !== reserve\n ) {\n reserve.parentElement.append(reserve);\n }\n return;\n }\n\n if (!anchor || !target || !clamp) {\n observers.disconnect();\n if (reserve) {\n setReserveHeight(reserve, 0);\n reserve.remove();\n }\n return;\n }\n\n reserve ??= createReserveElement();\n\n if (\n reserve.parentElement !== target.parentElement ||\n reserve.previousElementSibling !== target\n ) {\n target.after(reserve);\n }\n\n observers.target(viewport, anchor, target);\n\n const reserveChanged = setReserveHeight(\n reserve,\n computeTopAnchorReserve({ viewport, anchor, reserve, ...clamp }),\n );\n\n if (reserveChanged) {\n scheduler.schedule();\n return;\n }\n\n const anchorId = getAnchorId(anchor);\n if (anchorId !== undefined && lastScrolledAnchorId === anchorId) return;\n\n const targetScrollTop = snapScrollTop(\n computeTopAnchorTargetScrollTop({ viewport, anchor, ...clamp }),\n );\n\n if (Math.abs(viewport.scrollTop - targetScrollTop) > 1) {\n viewport.scrollTo({ top: targetScrollTop, behavior: \"smooth\" });\n }\n\n if (anchorId !== undefined) lastScrolledAnchorId = anchorId;\n }\n\n const scheduler = createFrameScheduler(apply);\n const observers = createReserveObservers(scheduler.schedule);\n\n scheduler.schedule();\n const unsubscribe = store.subscribe(scheduler.schedule);\n\n return () => {\n scheduler.cancel();\n unsubscribe();\n observers.disconnect();\n reserve?.remove();\n };\n};\n"],"mappings":";;;;;AAuCA,MAAMuB,wBAAwBD,OAAmB;CAC/C,IAAIE,QAAuB;CAE3B,OAAO;EACLC,gBAAgB;GACd,IAAID,UAAU,MAAM;GACpBA,QAAQE,4BAA4B;IAClCF,QAAQ;IACRF,GAAG;GACL,CAAC;EACH;EACAK,cAAc;GACZ,IAAIH,UAAU,MAAM;IAClBI,qBAAqBJ,KAAK;IAC1BA,QAAQ;GACV;EACF;CACF;AACF;AAEA,MAAaK,yBAAyBC,UAA0B;CAC9D,IAAIC,UAA8B;CAClC,IAAIC;CAEJ,SAASC,QAAQ;EACf,MAAMC,QAAQJ,MAAMtB,SAAS;EAC7B,MAAM,EAAEG,UAAUE,QAAQC,WAAWoB,MAAMxB;EAC3C,MAAMyB,QAAQD,MAAMnB;EAEpB,IAAImB,MAAMzB,eAAe,SAAS,CAACE,UAAU;GAC3CyB,UAAUC,WAAW;GACrB,IAAIN,SAAS;IACX1B,iBAAiB0B,SAAS,CAAC;IAC3BA,QAAQO,OAAO;GACjB;GACA;EACF;EAEA,IAAI,CAACzB,UAAU,CAACC,UAAU,CAACqB,SAASD,MAAMhB,eAAe;GAIvDkB,UAAUC,WAAW;GACrB,IACEN,SAASQ,iBACTR,QAAQQ,cAAcC,qBAAqBT,SAE3CA,QAAQQ,cAAcE,OAAOV,OAAO;GAEtC;EACF;EAEA,IAAI,CAAClB,UAAU,CAACC,UAAU,CAACqB,OAAO;GAChCC,UAAUC,WAAW;GACrB,IAAIN,SAAS;IACX1B,iBAAiB0B,SAAS,CAAC;IAC3BA,QAAQO,OAAO;GACjB;GACA;EACF;EAEAP,YAAY5B,qBAAqB;EAEjC,IACE4B,QAAQQ,kBAAkBzB,OAAOyB,iBACjCR,QAAQW,2BAA2B5B,QAEnCA,OAAO6B,MAAMZ,OAAO;EAGtBK,UAAUtB,OAAOH,UAAUE,QAAQC,MAAM;EAOzC,IALuBT,iBACrB0B,SACA/B,wBAAwB;GAAEW;GAAUE;GAAQkB;GAAS,GAAGI;EAAM,CAAC,CAG7DS,GAAgB;GAClBC,UAAUpB,SAAS;GACnB;EACF;EAEA,MAAMN,WAAWf,YAAYS,MAAM;EACnC,IAAIM,aAAa2B,KAAAA,KAAad,yBAAyBb,UAAU;EAEjE,MAAM4B,kBAAkBzC,cACtBL,gCAAgC;GAAEU;GAAUE;GAAQ,GAAGsB;EAAM,CAAC,CAChE;EAEA,IAAIa,KAAKC,IAAItC,SAASuC,YAAYH,eAAe,IAAI,GACnDpC,SAASwC,SAAS;GAAEC,KAAKL;GAAiBM,UAAU;EAAS,CAAC;EAGhE,IAAIlC,aAAa2B,KAAAA,GAAWd,uBAAuBb;CACrD;CAEA,MAAM0B,YAAYtB,qBAAqBU,KAAK;CAC5C,MAAMG,YAAYlC,uBAAuB2C,UAAUpB,QAAQ;CAE3DoB,UAAUpB,SAAS;CACnB,MAAM6B,cAAcxB,MAAMT,UAAUwB,UAAUpB,QAAQ;CAEtD,aAAa;EACXoB,UAAUlB,OAAO;EACjB2B,YAAY;EACZlB,UAAUC,WAAW;EACrBN,SAASO,OAAO;CAClB;AACF"}
|
|
1
|
+
{"version":3,"file":"mountTopAnchorReserve.js","names":["computeTopAnchorReserve","computeTopAnchorTargetScrollTop","createReserveObservers","createReserveElement","getAnchorId","setReserveHeight","snapScrollTop","TopAnchorStore","getState","turnAnchor","element","viewport","HTMLElement","anchor","target","targetConfig","tallerThan","visibleHeight","topAnchorTurn","anchorId","targetId","subscribe","fn","createFrameScheduler","frame","schedule","requestAnimationFrame","cancel","cancelAnimationFrame","mountTopAnchorReserve","store","reserve","lastScrolledAnchorId","listenedViewport","lastScrollTop","restoreScrollTop","restoredThisTurn","lastAppliedTarget","clearRestore","wasPinnedAtLastScroll","Math","abs","handleScroll","scrollTop","maxScrollTop","max","scrollHeight","clientHeight","isRangeClamp","scheduler","listenViewport","removeEventListener","addEventListener","passive","apply","state","clamp","observers","disconnect","remove","parentElement","lastElementChild","append","previousElementSibling","after","reserveChanged","targetScrollTop","undefined","scrollTo","top","behavior","desired","unsubscribe"],"sources":["../../../../src/primitives/thread/topAnchor/mountTopAnchorReserve.ts"],"sourcesContent":["\"use client\";\n\nimport {\n computeTopAnchorReserve,\n computeTopAnchorTargetScrollTop,\n} from \"./computeTopAnchorSlack\";\nimport { createReserveObservers } from \"./createReserveObservers\";\nimport {\n createReserveElement,\n getAnchorId,\n setReserveHeight,\n snapScrollTop,\n} from \"./topAnchorUtils\";\n\n/**\n * Minimal slice of `ThreadViewportStore` that the top-anchor reserve needs.\n * Decoupling from the full store keeps `mountTopAnchorReserve` testable in\n * isolation and re-usable from any consumer that can adapt to this shape.\n */\nexport type TopAnchorStore = {\n getState(): {\n turnAnchor: \"top\" | \"bottom\";\n element: {\n viewport: HTMLElement | null;\n anchor: HTMLElement | null;\n target: HTMLElement | null;\n };\n targetConfig: {\n tallerThan: number;\n visibleHeight: number;\n } | null;\n topAnchorTurn: {\n readonly anchorId: string;\n readonly targetId: string;\n } | null;\n };\n subscribe(fn: () => void): () => void;\n};\n\nconst createFrameScheduler = (fn: () => void) => {\n let frame: number | null = null;\n\n return {\n schedule: () => {\n if (frame !== null) return;\n frame = requestAnimationFrame(() => {\n frame = null;\n fn();\n });\n },\n cancel: () => {\n if (frame !== null) {\n cancelAnimationFrame(frame);\n frame = null;\n }\n },\n };\n};\n\nexport const mountTopAnchorReserve = (store: TopAnchorStore) => {\n let reserve: HTMLElement | null = null;\n let lastScrolledAnchorId: string | undefined;\n\n let listenedViewport: HTMLElement | null = null;\n let lastScrollTop = 0;\n let restoreScrollTop: number | null = null;\n let restoredThisTurn = false;\n let lastAppliedTarget: number | null = null;\n\n const clearRestore = () => {\n restoreScrollTop = null;\n lastAppliedTarget = null;\n };\n\n const wasPinnedAtLastScroll = () =>\n lastAppliedTarget !== null &&\n Math.abs(lastScrollTop - lastAppliedTarget) <= 1;\n\n const handleScroll = () => {\n const viewport = listenedViewport;\n if (!viewport) return;\n const scrollTop = viewport.scrollTop;\n const maxScrollTop = Math.max(\n 0,\n viewport.scrollHeight - viewport.clientHeight,\n );\n // A range clamp starts beyond the new maximum and lands on it.\n const isRangeClamp =\n scrollTop < lastScrollTop &&\n lastScrollTop > maxScrollTop + 1 &&\n Math.abs(scrollTop - maxScrollTop) <= 1;\n\n if (isRangeClamp && wasPinnedAtLastScroll() && !restoredThisTurn) {\n restoreScrollTop ??= lastScrollTop;\n scheduler.schedule();\n }\n\n lastScrollTop = scrollTop;\n };\n\n const listenViewport = (viewport: HTMLElement | null) => {\n if (listenedViewport === viewport) return;\n if (listenedViewport) {\n listenedViewport.removeEventListener(\"scroll\", handleScroll);\n }\n listenedViewport = viewport;\n restoredThisTurn = false;\n clearRestore();\n if (viewport) {\n viewport.addEventListener(\"scroll\", handleScroll, { passive: true });\n lastScrollTop = viewport.scrollTop;\n }\n };\n\n function apply() {\n const state = store.getState();\n const { viewport, anchor, target } = state.element;\n const clamp = state.targetConfig;\n\n listenViewport(state.turnAnchor === \"top\" ? viewport : null);\n\n if (state.turnAnchor !== \"top\" || !viewport) {\n observers.disconnect();\n clearRestore();\n if (reserve) {\n setReserveHeight(reserve, 0);\n reserve.remove();\n }\n return;\n }\n\n if (!anchor && !target && !clamp && state.topAnchorTurn) {\n // ThreadViewport clears this state once the stored pair stops being the\n // trailing turn (followed at most by pending user messages), so reaching\n // here means the anchor gap is transient and the next run is imminent.\n observers.disconnect();\n clearRestore();\n if (\n reserve?.parentElement &&\n reserve.parentElement.lastElementChild !== reserve\n ) {\n reserve.parentElement.append(reserve);\n }\n return;\n }\n\n if (!anchor || !target || !clamp) {\n observers.disconnect();\n clearRestore();\n if (reserve) {\n setReserveHeight(reserve, 0);\n reserve.remove();\n }\n return;\n }\n\n reserve ??= createReserveElement();\n\n if (\n reserve.parentElement !== target.parentElement ||\n reserve.previousElementSibling !== target\n ) {\n target.after(reserve);\n }\n\n observers.target(viewport, anchor, target);\n\n const reserveChanged = setReserveHeight(\n reserve,\n computeTopAnchorReserve({ viewport, anchor, reserve, ...clamp }),\n );\n\n if (reserveChanged) {\n scheduler.schedule();\n return;\n }\n\n const anchorId = getAnchorId(anchor);\n const targetScrollTop = snapScrollTop(\n computeTopAnchorTargetScrollTop({ viewport, anchor, ...clamp }),\n );\n\n if (anchorId === undefined || anchorId !== lastScrolledAnchorId) {\n restoreScrollTop = null;\n restoredThisTurn = false;\n if (Math.abs(viewport.scrollTop - targetScrollTop) > 1) {\n viewport.scrollTo({ top: targetScrollTop, behavior: \"smooth\" });\n }\n if (anchorId !== undefined) lastScrolledAnchorId = anchorId;\n } else if (restoreScrollTop !== null && lastAppliedTarget !== null) {\n // Restore the anchor-relative position: if content above the anchor\n // changed height and the browser already adjusted scrollTop to match\n // (scroll anchoring), the desired offset equals the current one and\n // this is a no-op.\n const desired = snapScrollTop(\n restoreScrollTop + (targetScrollTop - lastAppliedTarget),\n );\n restoreScrollTop = null;\n restoredThisTurn = true;\n if (Math.abs(viewport.scrollTop - desired) > 1) {\n viewport.scrollTo({ top: desired, behavior: \"instant\" });\n }\n }\n\n lastAppliedTarget = targetScrollTop;\n }\n\n const scheduler = createFrameScheduler(apply);\n const observers = createReserveObservers(scheduler.schedule);\n\n scheduler.schedule();\n const unsubscribe = store.subscribe(scheduler.schedule);\n\n return () => {\n scheduler.cancel();\n unsubscribe();\n observers.disconnect();\n listenViewport(null);\n reserve?.remove();\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
//#region src/primitives/thread/topAnchor/topAnchorTurn.d.ts
|
|
2
1
|
type TopAnchorTurnMessage = {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly role: string;
|
|
5
4
|
};
|
|
6
5
|
export type TopAnchorTurn = {
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
readonly anchorId: string;
|
|
7
|
+
readonly targetId: string;
|
|
9
8
|
};
|
|
10
9
|
/**
|
|
11
10
|
* A stored turn stays valid only while it is still the trailing turn: the
|
|
@@ -15,14 +14,14 @@ export type TopAnchorTurn = {
|
|
|
15
14
|
* turn completed elsewhere), so the reserve must be torn down, not preserved.
|
|
16
15
|
*/
|
|
17
16
|
export declare const isTopAnchorTurnValid: (turn: TopAnchorTurn | null, messages: readonly TopAnchorTurnMessage[]) => boolean;
|
|
18
|
-
export declare const getActiveTopAnchorTurn: ({ isRunning, messages }: {
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
export declare const getActiveTopAnchorTurn: ({ isRunning, messages, }: {
|
|
18
|
+
readonly isRunning: boolean;
|
|
19
|
+
readonly messages: readonly TopAnchorTurnMessage[];
|
|
21
20
|
}) => {
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
anchorId: string;
|
|
22
|
+
targetId: string;
|
|
24
23
|
} | null;
|
|
25
24
|
export declare const getActiveTopAnchorAnchorId: (options: Parameters<typeof getActiveTopAnchorTurn>[0]) => string | undefined;
|
|
26
25
|
export declare const getActiveTopAnchorTargetId: (options: Parameters<typeof getActiveTopAnchorTurn>[0]) => string | undefined;
|
|
27
|
-
|
|
26
|
+
export {};
|
|
28
27
|
//# sourceMappingURL=topAnchorTurn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topAnchorTurn.d.ts","
|
|
1
|
+
{"version":3,"file":"topAnchorTurn.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/topAnchorTurn.ts"],"names":[],"mappings":"AAEA,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,aAAa,GAAG,IAAI,EAC1B,UAAU,SAAS,oBAAoB,EAAE,YAa1C,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,0BAGpC;IACD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACpD;;;QAQA,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,SAAS,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,uBACT,CAAC;AAE/C,eAAO,MAAM,0BAA0B,GACrC,SAAS,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,uBACT,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
//#region src/primitives/thread/topAnchor/topAnchorUtils.d.ts
|
|
2
1
|
/**
|
|
3
2
|
* Convert a supported CSS length string (`px`, `em`, `rem`) into pixels,
|
|
4
3
|
* resolving font-relative units against the supplied element's computed style.
|
|
@@ -13,5 +12,4 @@ export declare const getAnchorId: (anchor: HTMLElement) => string | undefined;
|
|
|
13
12
|
export declare const createReserveElement: () => HTMLDivElement;
|
|
14
13
|
export declare const setReserveHeight: (reserve: HTMLElement, height: number) => boolean;
|
|
15
14
|
export declare const snapScrollTop: (top: number) => number;
|
|
16
|
-
//#endregion
|
|
17
15
|
//# sourceMappingURL=topAnchorUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topAnchorUtils.d.ts","
|
|
1
|
+
{"version":3,"file":"topAnchorUtils.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/topAnchorUtils.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,SAAS,WAAW,KAAG,MAkBpE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,uBAA6B,CAAC;AAE7E,eAAO,MAAM,oBAAoB,sBAShC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,WAAW,EAAE,QAAQ,MAAM,YAQpE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,WAGxC,CAAC"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
//#region src/primitives/thread/topAnchor/useTopAnchorReserve.d.ts
|
|
2
1
|
/**
|
|
3
2
|
* Mounts the top-turn-anchor reserve element against the active
|
|
4
3
|
* `ThreadViewport` store. Call this from inside the scrollable viewport so
|
|
5
4
|
* the reserve `<div>` is appended next to the streaming assistant message.
|
|
6
5
|
*/
|
|
7
6
|
export declare const useTopAnchorReserve: (enabled: boolean) => void;
|
|
8
|
-
//#endregion
|
|
9
7
|
//# sourceMappingURL=useTopAnchorReserve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTopAnchorReserve.d.ts","
|
|
1
|
+
{"version":3,"file":"useTopAnchorReserve.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/useTopAnchorReserve.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,OAAO,SAOnD,CAAC"}
|
|
@@ -1,34 +1,32 @@
|
|
|
1
|
-
import { RefCallback } from "react";
|
|
2
|
-
//#region src/primitives/thread/useThreadViewportAutoScroll.d.ts
|
|
1
|
+
import { type RefCallback } from "react";
|
|
3
2
|
export declare namespace useThreadViewportAutoScroll {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
3
|
+
type Options = {
|
|
4
|
+
/**
|
|
5
|
+
* Whether to automatically scroll to the bottom when new messages are added.
|
|
6
|
+
* When enabled, the viewport will automatically scroll to show the latest content.
|
|
7
|
+
*
|
|
8
|
+
* Default false if `turnAnchor` is "top", otherwise defaults to true.
|
|
9
|
+
*/
|
|
10
|
+
autoScroll?: boolean | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Whether to scroll to bottom when a new run starts.
|
|
13
|
+
*
|
|
14
|
+
* Defaults to true.
|
|
15
|
+
*/
|
|
16
|
+
scrollToBottomOnRunStart?: boolean | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Whether to scroll to bottom when messages first appear in the thread.
|
|
19
|
+
*
|
|
20
|
+
* Defaults to true.
|
|
21
|
+
*/
|
|
22
|
+
scrollToBottomOnInitialize?: boolean | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Whether to scroll to bottom when switching to a different thread.
|
|
25
|
+
*
|
|
26
|
+
* Defaults to true.
|
|
27
|
+
*/
|
|
28
|
+
scrollToBottomOnThreadSwitch?: boolean | undefined;
|
|
29
|
+
};
|
|
31
30
|
}
|
|
32
|
-
export declare const useThreadViewportAutoScroll: <TElement extends HTMLElement>({ autoScroll, scrollToBottomOnRunStart, scrollToBottomOnInitialize, scrollToBottomOnThreadSwitch }: useThreadViewportAutoScroll.Options) => RefCallback<TElement>;
|
|
33
|
-
//#endregion
|
|
31
|
+
export declare const useThreadViewportAutoScroll: <TElement extends HTMLElement>({ autoScroll, scrollToBottomOnRunStart, scrollToBottomOnInitialize, scrollToBottomOnThreadSwitch, }: useThreadViewportAutoScroll.Options) => RefCallback<TElement>;
|
|
34
32
|
//# sourceMappingURL=useThreadViewportAutoScroll.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useThreadViewportAutoScroll.d.ts","
|
|
1
|
+
{"version":3,"file":"useThreadViewportAutoScroll.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,OAAO,CAAC;AAgC/E,yBAAiB,2BAA2B,CAAC;IAC3C,KAAY,OAAO,GAAG;QACpB;;;;;WAKG;QACH,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjC;;;;WAIG;QACH,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAE/C;;;;WAIG;QACH,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjD;;;;WAIG;QACH,4BAA4B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KACpD,CAAC;CACH;AAED,eAAO,MAAM,2BAA2B,GAAI,QAAQ,SAAS,WAAW,EAAE,qGAKvE,2BAA2B,CAAC,OAAO,KAAG,WAAW,CAAC,QAAQ,CAqN5D,CAAC"}
|
|
@@ -4,11 +4,18 @@ import { writableStore } from "../../context/ReadonlyStore.js";
|
|
|
4
4
|
import { useOnScrollToBottom } from "../../utils/hooks/useOnScrollToBottom.js";
|
|
5
5
|
import { useManagedRef } from "../../utils/hooks/useManagedRef.js";
|
|
6
6
|
import { useOnResizeContent } from "../../utils/hooks/useOnResizeContent.js";
|
|
7
|
-
import { useAuiEvent, useAuiState } from "@assistant-ui/store";
|
|
8
7
|
import { useCallback, useLayoutEffect, useRef } from "@assistant-ui/tap/react-shim";
|
|
8
|
+
import { useAuiEvent, useAuiState } from "@assistant-ui/store";
|
|
9
9
|
import { useComposedRefs } from "radix-ui/internal";
|
|
10
10
|
import { isUserScrollUp, isViewportAtBottom, viewportOverflows } from "@assistant-ui/store/client";
|
|
11
11
|
//#region src/primitives/thread/useThreadViewportAutoScroll.ts
|
|
12
|
+
const ACTIVATION_KEYS = /* @__PURE__ */ new Set(["Enter", " "]);
|
|
13
|
+
const TEXT_ENTRY_SELECTOR = [
|
|
14
|
+
"textarea",
|
|
15
|
+
"select",
|
|
16
|
+
"[contenteditable]:not([contenteditable='false'])",
|
|
17
|
+
"input:not([type='checkbox']):not([type='radio']):not([type='button']):not([type='submit']):not([type='reset']):not([type='image']):not([type='range']):not([type='file']):not([type='color'])"
|
|
18
|
+
].join(", ");
|
|
12
19
|
const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunStart = true, scrollToBottomOnInitialize = true, scrollToBottomOnThreadSwitch = true }) => {
|
|
13
20
|
const divRef = useRef(null);
|
|
14
21
|
const hasMessages = useAuiState((s) => s.thread.messages.length > 0);
|
|
@@ -97,13 +104,21 @@ const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunStart = tr
|
|
|
97
104
|
});
|
|
98
105
|
const scrollRef = useManagedRef((el) => {
|
|
99
106
|
const cancelPendingScrollToBottom = () => {
|
|
107
|
+
cancelScheduledFrame();
|
|
100
108
|
scrollingToBottomBehaviorRef.current = null;
|
|
101
109
|
};
|
|
110
|
+
const cancelOnKeyDown = (event) => {
|
|
111
|
+
if (!ACTIVATION_KEYS.has(event.key)) return;
|
|
112
|
+
if (event.target?.closest?.(TEXT_ENTRY_SELECTOR)) return;
|
|
113
|
+
cancelPendingScrollToBottom();
|
|
114
|
+
};
|
|
102
115
|
el.addEventListener("scroll", handleScroll);
|
|
103
116
|
el.addEventListener("pointerdown", cancelPendingScrollToBottom);
|
|
117
|
+
el.addEventListener("keydown", cancelOnKeyDown);
|
|
104
118
|
return () => {
|
|
105
119
|
el.removeEventListener("scroll", handleScroll);
|
|
106
120
|
el.removeEventListener("pointerdown", cancelPendingScrollToBottom);
|
|
121
|
+
el.removeEventListener("keydown", cancelOnKeyDown);
|
|
107
122
|
};
|
|
108
123
|
});
|
|
109
124
|
useLayoutEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useThreadViewportAutoScroll.js","names":["useComposedRefs","useCallback","useLayoutEffect","useRef","RefCallback","useAuiEvent","useAuiState","isUserScrollUp","isViewportAtBottom","viewportOverflows","useOnResizeContent","useOnScrollToBottom","useManagedRef","writableStore","useThreadViewportStore","useThreadViewportAutoScroll","Options","autoScroll","scrollToBottomOnRunStart","scrollToBottomOnInitialize","scrollToBottomOnThreadSwitch","HTMLElement","TElement","divRef","hasMessages","s","thread","messages","length","isRunning","initializeScrollRequestedRef","scheduledFrameRef","threadViewportStore","undefined","getState","turnAnchor","lastScrollTop","lastScrollHeight","lastObservedScrollHeight","lastObservedClientHeight","scrollingToBottomBehaviorRef","ScrollBehavior","followBottomRef","previousAutoScrollRef","previousAutoScroll","current","div","scrollToBottom","behavior","scrollTo","top","scrollHeight","cancelScheduledFrame","cancelAnimationFrame","scheduleScrollToBottom","requestAnimationFrame","hasActiveTopAnchor","state","element","viewport","anchor","handleScroll","isAtBottom","newIsAtBottom","isInFlightDownwardScroll","scrollTop","userScrolledUp","shouldUpdate","setState","resizeRef","clientHeight","scrollBehavior","scrollRef","el","cancelPendingScrollToBottom","addEventListener","removeEventListener","autoScrollRef"],"sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"sourcesContent":["\"use client\";\n\nimport { useComposedRefs } from \"radix-ui/internal\";\nimport { useCallback, useLayoutEffect, useRef, type RefCallback } from \"react\";\nimport { useAuiEvent, useAuiState } from \"@assistant-ui/store\";\nimport {\n isUserScrollUp,\n isViewportAtBottom,\n viewportOverflows,\n} from \"@assistant-ui/store/client\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\nimport { writableStore } from \"../../context/ReadonlyStore\";\nimport { useThreadViewportStore } from \"../../context/react/ThreadViewportContext\";\n\nexport namespace useThreadViewportAutoScroll {\n export type Options = {\n /**\n * Whether to automatically scroll to the bottom when new messages are added.\n * When enabled, the viewport will automatically scroll to show the latest content.\n *\n * Default false if `turnAnchor` is \"top\", otherwise defaults to true.\n */\n autoScroll?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when a new run starts.\n *\n * Defaults to true.\n */\n scrollToBottomOnRunStart?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when messages first appear in the thread.\n *\n * Defaults to true.\n */\n scrollToBottomOnInitialize?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when switching to a different thread.\n *\n * Defaults to true.\n */\n scrollToBottomOnThreadSwitch?: boolean | undefined;\n };\n}\n\nexport const useThreadViewportAutoScroll = <TElement extends HTMLElement>({\n autoScroll,\n scrollToBottomOnRunStart = true,\n scrollToBottomOnInitialize = true,\n scrollToBottomOnThreadSwitch = true,\n}: useThreadViewportAutoScroll.Options): RefCallback<TElement> => {\n const divRef = useRef<TElement>(null);\n const hasMessages = useAuiState((s) => s.thread.messages.length > 0);\n const isRunning = useAuiState((s) => s.thread.isRunning);\n const initializeScrollRequestedRef = useRef(false);\n const scheduledFrameRef = useRef<number | null>(null);\n\n const threadViewportStore = useThreadViewportStore();\n if (autoScroll === undefined) {\n autoScroll = threadViewportStore.getState().turnAnchor !== \"top\";\n }\n\n const lastScrollTop = useRef<number>(0);\n const lastScrollHeight = useRef<number>(0);\n const lastObservedScrollHeight = useRef<number>(0);\n const lastObservedClientHeight = useRef<number>(0);\n\n // Pending bottom-scroll intent. Planted by initialize/run-start/switch/button\n // triggers, cleared when handleScroll confirms we reached bottom, or when the\n // user actively scrolls up while content size is stable.\n const scrollingToBottomBehaviorRef = useRef<ScrollBehavior | null>(null);\n const followBottomRef = useRef(autoScroll);\n const previousAutoScrollRef = useRef(autoScroll);\n\n useLayoutEffect(() => {\n const previousAutoScroll = previousAutoScrollRef.current;\n previousAutoScrollRef.current = autoScroll;\n if (previousAutoScroll || !autoScroll) return;\n\n const div = divRef.current;\n followBottomRef.current = div !== null && isViewportAtBottom(div);\n }, [autoScroll]);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior) => {\n const div = divRef.current;\n if (!div) return;\n\n followBottomRef.current = true;\n scrollingToBottomBehaviorRef.current = behavior;\n div.scrollTo({ top: div.scrollHeight, behavior });\n }, []);\n\n const cancelScheduledFrame = useCallback(() => {\n if (scheduledFrameRef.current === null) return;\n cancelAnimationFrame(scheduledFrameRef.current);\n scheduledFrameRef.current = null;\n }, []);\n\n const scheduleScrollToBottom = useCallback(\n (behavior: ScrollBehavior) => {\n scrollingToBottomBehaviorRef.current = behavior;\n cancelScheduledFrame();\n scheduledFrameRef.current = requestAnimationFrame(() => {\n scheduledFrameRef.current = null;\n scrollToBottom(behavior);\n });\n },\n [cancelScheduledFrame, scrollToBottom],\n );\n\n useLayoutEffect(() => () => cancelScheduledFrame(), [cancelScheduledFrame]);\n\n const hasActiveTopAnchor = useCallback(() => {\n const state = threadViewportStore.getState();\n return (\n state.turnAnchor === \"top\" &&\n state.element.viewport === divRef.current &&\n state.element.anchor !== null\n );\n }, [threadViewportStore]);\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = threadViewportStore.getState().isAtBottom;\n const newIsAtBottom = isViewportAtBottom(div);\n\n const isInFlightDownwardScroll =\n !newIsAtBottom && lastScrollTop.current < div.scrollTop;\n if (isInFlightDownwardScroll) {\n // no-op: a smooth scroll-to-bottom fires many midpoint scroll events\n // before landing, don't flicker isAtBottom or clear intent mid-animation\n } else {\n const userScrolledUp = isUserScrollUp(\n {\n scrollTop: lastScrollTop.current,\n scrollHeight: lastScrollHeight.current,\n },\n div,\n );\n\n if (newIsAtBottom) {\n // newIsAtBottom is ambiguous when the viewport doesn't overflow —\n // keep intent alive until content can actually scroll\n if (viewportOverflows(div)) {\n scrollingToBottomBehaviorRef.current = null;\n }\n if (autoScroll) followBottomRef.current = true;\n } else if (userScrolledUp) {\n cancelScheduledFrame();\n scrollingToBottomBehaviorRef.current = null;\n followBottomRef.current = false;\n }\n\n const shouldUpdate =\n newIsAtBottom || scrollingToBottomBehaviorRef.current === null;\n\n if (shouldUpdate && newIsAtBottom !== isAtBottom) {\n writableStore(threadViewportStore).setState({\n isAtBottom: newIsAtBottom,\n });\n }\n }\n\n lastScrollTop.current = div.scrollTop;\n lastScrollHeight.current = div.scrollHeight;\n };\n\n const resizeRef = useOnResizeContent(() => {\n const div = divRef.current;\n if (!div) return;\n\n const { scrollHeight, clientHeight } = div;\n if (\n scrollHeight === lastObservedScrollHeight.current &&\n clientHeight === lastObservedClientHeight.current\n ) {\n return;\n }\n lastObservedScrollHeight.current = scrollHeight;\n lastObservedClientHeight.current = clientHeight;\n\n const scrollBehavior = scrollingToBottomBehaviorRef.current;\n if (scrollBehavior && hasActiveTopAnchor()) {\n // Let the top-anchor reserve own scrolling while a run starts to avoid a bottom-scroll race.\n scrollingToBottomBehaviorRef.current = null;\n } else if (scrollBehavior) {\n scrollToBottom(scrollBehavior);\n } else if (\n autoScroll &&\n !(isRunning && hasActiveTopAnchor()) &&\n followBottomRef.current\n ) {\n scrollToBottom(\"instant\");\n }\n\n handleScroll();\n });\n\n const scrollRef = useManagedRef<HTMLElement>((el) => {\n // A pointer gesture invalidates pending bottom-scroll intent; otherwise an\n // intent kept alive by a non-overflowing thread (see handleScroll) hijacks\n // the next content growth, e.g. expanding a collapsible tool call.\n const cancelPendingScrollToBottom = () => {\n scrollingToBottomBehaviorRef.current = null;\n };\n el.addEventListener(\"scroll\", handleScroll);\n el.addEventListener(\"pointerdown\", cancelPendingScrollToBottom);\n return () => {\n el.removeEventListener(\"scroll\", handleScroll);\n el.removeEventListener(\"pointerdown\", cancelPendingScrollToBottom);\n };\n });\n\n useLayoutEffect(() => {\n if (!scrollToBottomOnInitialize) return;\n if (!hasMessages) {\n initializeScrollRequestedRef.current = false;\n return;\n }\n if (initializeScrollRequestedRef.current) return;\n\n initializeScrollRequestedRef.current = true;\n // defer to an in-flight run (e.g. first message on a new thread) that\n // already planted intent — otherwise we'd downgrade its \"auto\" to \"instant\"\n if (scrollingToBottomBehaviorRef.current !== null) return;\n scheduleScrollToBottom(\"instant\");\n }, [hasMessages, scheduleScrollToBottom, scrollToBottomOnInitialize]);\n\n useOnScrollToBottom(({ behavior }) => {\n scrollToBottom(behavior);\n });\n\n useAuiEvent(\"thread.runStart\", () => {\n if (!scrollToBottomOnRunStart) return;\n if (threadViewportStore.getState().turnAnchor === \"top\") return;\n scheduleScrollToBottom(\"auto\");\n });\n\n useAuiEvent(\"threads.selectionChanged\", () => {\n if (!scrollToBottomOnThreadSwitch) return;\n scheduleScrollToBottom(\"instant\");\n });\n\n const autoScrollRef = useComposedRefs<TElement>(resizeRef, scrollRef, divRef);\n return autoScrollRef as RefCallback<TElement>;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useThreadViewportAutoScroll.js","names":["useComposedRefs","useCallback","useLayoutEffect","useRef","RefCallback","useAuiEvent","useAuiState","isUserScrollUp","isViewportAtBottom","viewportOverflows","useOnResizeContent","useOnScrollToBottom","useManagedRef","writableStore","useThreadViewportStore","ACTIVATION_KEYS","Set","TEXT_ENTRY_SELECTOR","join","useThreadViewportAutoScroll","Options","autoScroll","scrollToBottomOnRunStart","scrollToBottomOnInitialize","scrollToBottomOnThreadSwitch","HTMLElement","TElement","divRef","hasMessages","s","thread","messages","length","isRunning","initializeScrollRequestedRef","scheduledFrameRef","threadViewportStore","undefined","getState","turnAnchor","lastScrollTop","lastScrollHeight","lastObservedScrollHeight","lastObservedClientHeight","scrollingToBottomBehaviorRef","ScrollBehavior","followBottomRef","previousAutoScrollRef","previousAutoScroll","current","div","scrollToBottom","behavior","scrollTo","top","scrollHeight","cancelScheduledFrame","cancelAnimationFrame","scheduleScrollToBottom","requestAnimationFrame","hasActiveTopAnchor","state","element","viewport","anchor","handleScroll","isAtBottom","newIsAtBottom","isInFlightDownwardScroll","scrollTop","userScrolledUp","shouldUpdate","setState","resizeRef","clientHeight","scrollBehavior","scrollRef","el","cancelPendingScrollToBottom","cancelOnKeyDown","event","KeyboardEvent","has","key","target","Element","closest","addEventListener","removeEventListener","autoScrollRef"],"sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"sourcesContent":["\"use client\";\n\nimport { useComposedRefs } from \"radix-ui/internal\";\nimport { useCallback, useLayoutEffect, useRef, type RefCallback } from \"react\";\nimport { useAuiEvent, useAuiState } from \"@assistant-ui/store\";\nimport {\n isUserScrollUp,\n isViewportAtBottom,\n viewportOverflows,\n} from \"@assistant-ui/store/client\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\nimport { writableStore } from \"../../context/ReadonlyStore\";\nimport { useThreadViewportStore } from \"../../context/react/ThreadViewportContext\";\n\n// Enter and Space activate a focused control, which is how a collapsible tool\n// call expands without a pointer event ever firing. No other key changes thread\n// content: the keys that scroll the viewport reach handleScroll, which already\n// clears the intent when the user scrolls up.\nconst ACTIVATION_KEYS = new Set([\"Enter\", \" \"]);\n\n// A control that consumes the activation key itself instead of acting on thread\n// content. `contenteditable=\"false\"` marks a non-editable island inside an\n// editable tree, so it is excluded the way ComposerRoot already excludes it;\n// the input types left out are the ones a key activates rather than fills.\nconst TEXT_ENTRY_SELECTOR = [\n \"textarea\",\n \"select\",\n \"[contenteditable]:not([contenteditable='false'])\",\n \"input:not([type='checkbox']):not([type='radio']):not([type='button'])\" +\n \":not([type='submit']):not([type='reset']):not([type='image'])\" +\n \":not([type='range']):not([type='file']):not([type='color'])\",\n].join(\", \");\n\nexport namespace useThreadViewportAutoScroll {\n export type Options = {\n /**\n * Whether to automatically scroll to the bottom when new messages are added.\n * When enabled, the viewport will automatically scroll to show the latest content.\n *\n * Default false if `turnAnchor` is \"top\", otherwise defaults to true.\n */\n autoScroll?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when a new run starts.\n *\n * Defaults to true.\n */\n scrollToBottomOnRunStart?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when messages first appear in the thread.\n *\n * Defaults to true.\n */\n scrollToBottomOnInitialize?: boolean | undefined;\n\n /**\n * Whether to scroll to bottom when switching to a different thread.\n *\n * Defaults to true.\n */\n scrollToBottomOnThreadSwitch?: boolean | undefined;\n };\n}\n\nexport const useThreadViewportAutoScroll = <TElement extends HTMLElement>({\n autoScroll,\n scrollToBottomOnRunStart = true,\n scrollToBottomOnInitialize = true,\n scrollToBottomOnThreadSwitch = true,\n}: useThreadViewportAutoScroll.Options): RefCallback<TElement> => {\n const divRef = useRef<TElement>(null);\n const hasMessages = useAuiState((s) => s.thread.messages.length > 0);\n const isRunning = useAuiState((s) => s.thread.isRunning);\n const initializeScrollRequestedRef = useRef(false);\n const scheduledFrameRef = useRef<number | null>(null);\n\n const threadViewportStore = useThreadViewportStore();\n if (autoScroll === undefined) {\n autoScroll = threadViewportStore.getState().turnAnchor !== \"top\";\n }\n\n const lastScrollTop = useRef<number>(0);\n const lastScrollHeight = useRef<number>(0);\n const lastObservedScrollHeight = useRef<number>(0);\n const lastObservedClientHeight = useRef<number>(0);\n\n // Pending bottom-scroll intent. Planted by initialize/run-start/switch/button\n // triggers, cleared when handleScroll confirms we reached bottom, or when the\n // user actively scrolls up while content size is stable.\n const scrollingToBottomBehaviorRef = useRef<ScrollBehavior | null>(null);\n const followBottomRef = useRef(autoScroll);\n const previousAutoScrollRef = useRef(autoScroll);\n\n useLayoutEffect(() => {\n const previousAutoScroll = previousAutoScrollRef.current;\n previousAutoScrollRef.current = autoScroll;\n if (previousAutoScroll || !autoScroll) return;\n\n const div = divRef.current;\n followBottomRef.current = div !== null && isViewportAtBottom(div);\n }, [autoScroll]);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior) => {\n const div = divRef.current;\n if (!div) return;\n\n followBottomRef.current = true;\n scrollingToBottomBehaviorRef.current = behavior;\n div.scrollTo({ top: div.scrollHeight, behavior });\n }, []);\n\n const cancelScheduledFrame = useCallback(() => {\n if (scheduledFrameRef.current === null) return;\n cancelAnimationFrame(scheduledFrameRef.current);\n scheduledFrameRef.current = null;\n }, []);\n\n const scheduleScrollToBottom = useCallback(\n (behavior: ScrollBehavior) => {\n scrollingToBottomBehaviorRef.current = behavior;\n cancelScheduledFrame();\n scheduledFrameRef.current = requestAnimationFrame(() => {\n scheduledFrameRef.current = null;\n scrollToBottom(behavior);\n });\n },\n [cancelScheduledFrame, scrollToBottom],\n );\n\n useLayoutEffect(() => () => cancelScheduledFrame(), [cancelScheduledFrame]);\n\n const hasActiveTopAnchor = useCallback(() => {\n const state = threadViewportStore.getState();\n return (\n state.turnAnchor === \"top\" &&\n state.element.viewport === divRef.current &&\n state.element.anchor !== null\n );\n }, [threadViewportStore]);\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = threadViewportStore.getState().isAtBottom;\n const newIsAtBottom = isViewportAtBottom(div);\n\n const isInFlightDownwardScroll =\n !newIsAtBottom && lastScrollTop.current < div.scrollTop;\n if (isInFlightDownwardScroll) {\n // no-op: a smooth scroll-to-bottom fires many midpoint scroll events\n // before landing, don't flicker isAtBottom or clear intent mid-animation\n } else {\n const userScrolledUp = isUserScrollUp(\n {\n scrollTop: lastScrollTop.current,\n scrollHeight: lastScrollHeight.current,\n },\n div,\n );\n\n if (newIsAtBottom) {\n // newIsAtBottom is ambiguous when the viewport doesn't overflow —\n // keep intent alive until content can actually scroll\n if (viewportOverflows(div)) {\n scrollingToBottomBehaviorRef.current = null;\n }\n if (autoScroll) followBottomRef.current = true;\n } else if (userScrolledUp) {\n cancelScheduledFrame();\n scrollingToBottomBehaviorRef.current = null;\n followBottomRef.current = false;\n }\n\n const shouldUpdate =\n newIsAtBottom || scrollingToBottomBehaviorRef.current === null;\n\n if (shouldUpdate && newIsAtBottom !== isAtBottom) {\n writableStore(threadViewportStore).setState({\n isAtBottom: newIsAtBottom,\n });\n }\n }\n\n lastScrollTop.current = div.scrollTop;\n lastScrollHeight.current = div.scrollHeight;\n };\n\n const resizeRef = useOnResizeContent(() => {\n const div = divRef.current;\n if (!div) return;\n\n const { scrollHeight, clientHeight } = div;\n if (\n scrollHeight === lastObservedScrollHeight.current &&\n clientHeight === lastObservedClientHeight.current\n ) {\n return;\n }\n lastObservedScrollHeight.current = scrollHeight;\n lastObservedClientHeight.current = clientHeight;\n\n const scrollBehavior = scrollingToBottomBehaviorRef.current;\n if (scrollBehavior && hasActiveTopAnchor()) {\n // Let the top-anchor reserve own scrolling while a run starts to avoid a bottom-scroll race.\n scrollingToBottomBehaviorRef.current = null;\n } else if (scrollBehavior) {\n scrollToBottom(scrollBehavior);\n } else if (\n autoScroll &&\n !(isRunning && hasActiveTopAnchor()) &&\n followBottomRef.current\n ) {\n scrollToBottom(\"instant\");\n }\n\n handleScroll();\n });\n\n const scrollRef = useManagedRef<HTMLElement>((el) => {\n // A user gesture invalidates pending bottom-scroll intent; otherwise an\n // intent kept alive by a non-overflowing thread (see handleScroll) hijacks\n // the next content growth, e.g. expanding a collapsible tool call. Keyboard\n // activation reaches that same content without ever emitting a pointer\n // event, so it has to cancel the intent too.\n const cancelPendingScrollToBottom = () => {\n // A scheduled frame re-plants the intent when it runs, so clearing the\n // ref alone leaves the gesture undone.\n cancelScheduledFrame();\n scrollingToBottomBehaviorRef.current = null;\n };\n // The composer renders inside the viewport, so its keystrokes bubble here;\n // only an activation key aimed at something other than a text field is a\n // gesture on thread content.\n const cancelOnKeyDown = (event: KeyboardEvent) => {\n if (!ACTIVATION_KEYS.has(event.key)) return;\n const target = event.target as Element | null;\n if (target?.closest?.(TEXT_ENTRY_SELECTOR)) return;\n cancelPendingScrollToBottom();\n };\n el.addEventListener(\"scroll\", handleScroll);\n el.addEventListener(\"pointerdown\", cancelPendingScrollToBottom);\n el.addEventListener(\"keydown\", cancelOnKeyDown);\n return () => {\n el.removeEventListener(\"scroll\", handleScroll);\n el.removeEventListener(\"pointerdown\", cancelPendingScrollToBottom);\n el.removeEventListener(\"keydown\", cancelOnKeyDown);\n };\n });\n\n useLayoutEffect(() => {\n if (!scrollToBottomOnInitialize) return;\n if (!hasMessages) {\n initializeScrollRequestedRef.current = false;\n return;\n }\n if (initializeScrollRequestedRef.current) return;\n\n initializeScrollRequestedRef.current = true;\n // defer to an in-flight run (e.g. first message on a new thread) that\n // already planted intent — otherwise we'd downgrade its \"auto\" to \"instant\"\n if (scrollingToBottomBehaviorRef.current !== null) return;\n scheduleScrollToBottom(\"instant\");\n }, [hasMessages, scheduleScrollToBottom, scrollToBottomOnInitialize]);\n\n useOnScrollToBottom(({ behavior }) => {\n scrollToBottom(behavior);\n });\n\n useAuiEvent(\"thread.runStart\", () => {\n if (!scrollToBottomOnRunStart) return;\n if (threadViewportStore.getState().turnAnchor === \"top\") return;\n scheduleScrollToBottom(\"auto\");\n });\n\n useAuiEvent(\"threads.selectionChanged\", () => {\n if (!scrollToBottomOnThreadSwitch) return;\n scheduleScrollToBottom(\"instant\");\n });\n\n const autoScrollRef = useComposedRefs<TElement>(resizeRef, scrollRef, divRef);\n return autoScrollRef as RefCallback<TElement>;\n};\n"],"mappings":"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"}
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
//#endregion
|
|
15
|
-
export { ThreadPrimitiveEmpty as Empty, ThreadPrimitiveIf as If, ThreadPrimitiveMessageByIndex as MessageByIndex, ThreadPrimitiveMessages as Messages, ThreadPrimitiveRoot as Root, ThreadPrimitiveScrollToBottom as ScrollToBottom, ThreadPrimitiveSuggestion as Suggestion, ThreadPrimitiveSuggestionByIndex as SuggestionByIndex, ThreadPrimitiveSuggestions as Suggestions, ThreadPrimitiveUnstable_MessageById as Unstable_MessageById, ThreadPrimitiveViewport as Viewport, ThreadPrimitiveViewportFooter as ViewportFooter, ThreadPrimitiveViewportProvider as ViewportProvider, thread_d_exports };
|
|
1
|
+
export { ThreadPrimitiveRoot as Root } from "./thread/ThreadRoot.js";
|
|
2
|
+
export { ThreadPrimitiveEmpty as Empty } from "./thread/ThreadEmpty.js";
|
|
3
|
+
export { ThreadPrimitiveIf as If } from "./thread/ThreadIf.js";
|
|
4
|
+
export { ThreadPrimitiveViewport as Viewport } from "./thread/ThreadViewport.js";
|
|
5
|
+
export { ThreadPrimitiveViewportProvider as ViewportProvider } from "../context/providers/ThreadViewportProvider.js";
|
|
6
|
+
export { ThreadPrimitiveViewportFooter as ViewportFooter } from "./thread/ThreadViewportFooter.js";
|
|
7
|
+
export { ThreadPrimitiveMessages as Messages } from "./thread/ThreadMessages.js";
|
|
8
|
+
export { ThreadPrimitiveMessageByIndex as MessageByIndex } from "./thread/ThreadMessages.js";
|
|
9
|
+
export { ThreadPrimitiveUnstable_MessageById as Unstable_MessageById } from "./thread/ThreadMessages.js";
|
|
10
|
+
export { ThreadPrimitiveScrollToBottom as ScrollToBottom } from "./thread/ThreadScrollToBottom.js";
|
|
11
|
+
export { ThreadPrimitiveSuggestion as Suggestion } from "./thread/ThreadSuggestion.js";
|
|
12
|
+
export { ThreadPrimitiveSuggestions as Suggestions, ThreadPrimitiveSuggestionByIndex as SuggestionByIndex, } from "./thread/ThreadSuggestions.js";
|
|
16
13
|
//# sourceMappingURL=thread.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread.d.ts","
|
|
1
|
+
{"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../../src/primitives/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,IAAI,EAAE,+BAA4B;AAClE,OAAO,EAAE,oBAAoB,IAAI,KAAK,EAAE,gCAA6B;AACrE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,6BAA0B;AAC5D,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,mCAAgC;AAC9E,OAAO,EAAE,+BAA+B,IAAI,gBAAgB,EAAE,uDAAoD;AAClH,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,yCAAsC;AAChG,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,mCAAgC;AAC9E,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,mCAAgC;AAC1F,OAAO,EAAE,mCAAmC,IAAI,oBAAoB,EAAE,mCAAgC;AACtG,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,yCAAsC;AAChG,OAAO,EAAE,yBAAyB,IAAI,UAAU,EAAE,qCAAkC;AACpF,OAAO,EACL,0BAA0B,IAAI,WAAW,EACzC,gCAAgC,IAAI,iBAAiB,GACtD,sCAAmC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export { ThreadListPrimitiveItems, ThreadListPrimitiveItemByIndex, } from "@assistant-ui/core/react";
|
|
2
|
+
//# sourceMappingURL=ThreadListItems.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadListItems.d.ts","sourceRoot":"","sources":["../../../src/primitives/threadList/ThreadListItems.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC"}
|