@assistant-ui/react 0.14.16 → 0.14.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/ExternalThread.d.ts +5 -3
- package/dist/client/ExternalThread.d.ts.map +1 -1
- package/dist/client/ExternalThread.js +745 -255
- package/dist/client/ExternalThread.js.map +1 -1
- package/dist/client/InMemoryThreadList.d.ts +1 -1
- package/dist/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/client/InMemoryThreadList.js +299 -113
- package/dist/client/InMemoryThreadList.js.map +1 -1
- package/dist/client/SingleThreadList.d.ts +1 -6
- package/dist/client/SingleThreadList.d.ts.map +1 -1
- package/dist/client/SingleThreadList.js +143 -55
- package/dist/client/SingleThreadList.js.map +1 -1
- package/dist/context/ReadonlyStore.js.map +1 -1
- package/dist/context/providers/MessageProvider.js +38 -5
- package/dist/context/providers/MessageProvider.js.map +1 -1
- package/dist/context/providers/ThreadViewportProvider.js +76 -20
- package/dist/context/providers/ThreadViewportProvider.js.map +1 -1
- package/dist/context/react/ThreadViewportContext.js.map +1 -1
- package/dist/context/react/utils/createContextHook.js.map +1 -1
- package/dist/context/react/utils/createContextStoreHook.js +17 -2
- package/dist/context/react/utils/createContextStoreHook.js.map +1 -1
- package/dist/context/react/utils/createStateHookForRuntime.js.map +1 -1
- package/dist/context/react/utils/ensureBinding.js.map +1 -1
- package/dist/context/react/utils/useRuntimeState.js +18 -2
- package/dist/context/react/utils/useRuntimeState.js.map +1 -1
- package/dist/context/stores/ThreadViewport.js.map +1 -1
- package/dist/devtools/DevToolsHooks.js.map +1 -1
- package/dist/hooks/useMessageQuote.js.map +1 -1
- package/dist/hooks/useMessageTiming.js +4 -1
- package/dist/hooks/useMessageTiming.js.map +1 -1
- package/dist/hooks/useToolCallElapsed.d.ts +23 -0
- package/dist/hooks/useToolCallElapsed.d.ts.map +1 -0
- package/dist/hooks/useToolCallElapsed.js +72 -0
- package/dist/hooks/useToolCallElapsed.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -1
- package/dist/internal.js.map +1 -1
- package/dist/legacy-runtime/AssistantRuntimeProvider.js +46 -10
- package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
- package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
- package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js +27 -6
- package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js.map +1 -1
- package/dist/legacy-runtime/hooks/AssistantContext.js +13 -2
- package/dist/legacy-runtime/hooks/AssistantContext.js.map +1 -1
- package/dist/legacy-runtime/hooks/AttachmentContext.js +9 -1
- package/dist/legacy-runtime/hooks/AttachmentContext.js.map +1 -1
- package/dist/legacy-runtime/hooks/ComposerContext.js +9 -1
- package/dist/legacy-runtime/hooks/ComposerContext.js.map +1 -1
- package/dist/legacy-runtime/hooks/MessageContext.js +12 -2
- package/dist/legacy-runtime/hooks/MessageContext.js.map +1 -1
- package/dist/legacy-runtime/hooks/MessagePartContext.js +9 -1
- package/dist/legacy-runtime/hooks/MessagePartContext.js.map +1 -1
- package/dist/legacy-runtime/hooks/ThreadContext.js +33 -5
- package/dist/legacy-runtime/hooks/ThreadContext.js.map +1 -1
- package/dist/legacy-runtime/hooks/ThreadListItemContext.js +9 -1
- package/dist/legacy-runtime/hooks/ThreadListItemContext.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js +3 -3
- package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js +71 -31
- package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +24 -16
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js +17 -12
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js +17 -3
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js.map +1 -1
- package/dist/mcp-apps/McpAppRenderer.d.ts +2 -10
- package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
- package/dist/mcp-apps/McpAppRenderer.js +9 -8
- package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
- package/dist/mcp-apps/McpAppsRemoteHost.d.ts +1 -8
- package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
- package/dist/mcp-apps/McpAppsRemoteHost.js +6 -5
- package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -1
- package/dist/mcp-apps/app-frame.js +33 -14
- package/dist/mcp-apps/app-frame.js.map +1 -1
- package/dist/mcp-apps/bridge.js.map +1 -1
- package/dist/mcp-apps/types.js.map +1 -1
- package/dist/mcp-apps/utils.js.map +1 -1
- package/dist/model-context/frame/useAssistantFrameHost.js +32 -14
- package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -1
- package/dist/model-context/makeAssistantVisible.js +64 -26
- package/dist/model-context/makeAssistantVisible.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarCopy.js +94 -20
- package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarExportMarkdown.js +105 -37
- package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +60 -11
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +60 -11
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarInteractionContext.js +3 -1
- package/dist/primitives/actionBar/ActionBarInteractionContext.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarReload.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarRoot.js +84 -25
- package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -1
- package/dist/primitives/actionBar/ActionBarStopSpeaking.js +45 -14
- package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -1
- package/dist/primitives/actionBar/useActionBarFloatStatus.js +22 -10
- package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -1
- package/dist/primitives/actionBar.js.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreContent.js +44 -7
- package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreItem.js +28 -6
- package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.js +103 -36
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +28 -6
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -1
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +28 -6
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -1
- package/dist/primitives/actionBarMore/scope.js.map +1 -1
- package/dist/primitives/actionBarMore.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalAnchor.js +27 -6
- package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.js +71 -10
- package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.js +93 -26
- package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalTrigger.js +27 -6
- package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
- package/dist/primitives/assistantModal/scope.js.map +1 -1
- package/dist/primitives/assistantModal.js.map +1 -1
- package/dist/primitives/attachment/AttachmentName.js +13 -1
- package/dist/primitives/attachment/AttachmentName.js.map +1 -1
- package/dist/primitives/attachment/AttachmentRemove.js +11 -4
- package/dist/primitives/attachment/AttachmentRemove.js.map +1 -1
- package/dist/primitives/attachment/AttachmentRoot.js +13 -4
- package/dist/primitives/attachment/AttachmentRoot.js.map +1 -1
- package/dist/primitives/attachment/AttachmentThumb.js +20 -9
- package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
- package/dist/primitives/attachment.js.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerCount.js +14 -2
- package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerNumber.js +14 -2
- package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
- package/dist/primitives/branchPicker/BranchPickerRoot.js +34 -6
- package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
- package/dist/primitives/branchPicker.js.map +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +16 -5
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -1
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +13 -4
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -1
- package/dist/primitives/chainOfThought.js.map +1 -1
- package/dist/primitives/composer/ComposerAddAttachment.js +37 -24
- package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -1
- package/dist/primitives/composer/ComposerAttachmentDropzone.js +124 -49
- package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
- package/dist/primitives/composer/ComposerCancel.js.map +1 -1
- package/dist/primitives/composer/ComposerDictate.js.map +1 -1
- package/dist/primitives/composer/ComposerDictationTranscript.js +32 -7
- package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
- package/dist/primitives/composer/ComposerInput.js +29 -29
- package/dist/primitives/composer/ComposerInput.js.map +1 -1
- package/dist/primitives/composer/ComposerInputPluginContext.js +71 -25
- package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -1
- package/dist/primitives/composer/ComposerQuote.js +92 -23
- package/dist/primitives/composer/ComposerQuote.js.map +1 -1
- package/dist/primitives/composer/ComposerRoot.js +45 -11
- package/dist/primitives/composer/ComposerRoot.js.map +1 -1
- package/dist/primitives/composer/ComposerSend.js +9 -2
- package/dist/primitives/composer/ComposerSend.js.map +1 -1
- package/dist/primitives/composer/ComposerStopDictation.js +15 -5
- package/dist/primitives/composer/ComposerStopDictation.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopover.js +215 -75
- package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverBack.js +35 -7
- package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +134 -28
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverItems.js +132 -28
- package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +2 -10
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverResource.js +126 -53
- package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -1
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +181 -78
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -1
- package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -1
- package/dist/primitives/composer/trigger/index.js.map +1 -1
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +2 -6
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerDetectionResource.js +30 -15
- package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -1
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +2 -17
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerKeyboardResource.js +117 -59
- package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -1
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +2 -10
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerNavigationResource.js +204 -71
- package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -1
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +2 -10
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
- package/dist/primitives/composer/trigger/triggerSelectionResource.js +51 -14
- package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -1
- package/dist/primitives/composer.js.map +1 -1
- package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -1
- package/dist/primitives/error/ErrorMessage.js +28 -6
- package/dist/primitives/error/ErrorMessage.js.map +1 -1
- package/dist/primitives/error/ErrorRoot.js +14 -5
- package/dist/primitives/error/ErrorRoot.js.map +1 -1
- package/dist/primitives/error.js.map +1 -1
- package/dist/primitives/message/MessageError.js +2 -1
- package/dist/primitives/message/MessageError.js.map +1 -1
- package/dist/primitives/message/MessageIf.js +50 -20
- package/dist/primitives/message/MessageIf.js.map +1 -1
- package/dist/primitives/message/MessageParts.js +41 -7
- package/dist/primitives/message/MessageParts.js.map +1 -1
- package/dist/primitives/message/MessagePartsGrouped.js +399 -94
- package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
- package/dist/primitives/message/MessageRoot.js +197 -65
- package/dist/primitives/message/MessageRoot.js.map +1 -1
- package/dist/primitives/message.js.map +1 -1
- package/dist/primitives/messagePart/MessagePartImage.js +15 -5
- package/dist/primitives/messagePart/MessagePartImage.js.map +1 -1
- package/dist/primitives/messagePart/MessagePartText.d.ts +5 -2
- package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
- package/dist/primitives/messagePart/MessagePartText.js +35 -7
- package/dist/primitives/messagePart/MessagePartText.js.map +1 -1
- package/dist/primitives/messagePart/useMessagePartData.js +5 -4
- package/dist/primitives/messagePart/useMessagePartData.js.map +1 -1
- package/dist/primitives/messagePart/useMessagePartFile.js +5 -4
- package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -1
- package/dist/primitives/messagePart/useMessagePartImage.js +5 -4
- package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -1
- package/dist/primitives/messagePart/useMessagePartReasoning.js +5 -4
- package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -1
- package/dist/primitives/messagePart/useMessagePartSource.js +5 -4
- package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -1
- package/dist/primitives/messagePart/useMessagePartText.js +5 -4
- package/dist/primitives/messagePart/useMessagePartText.js.map +1 -1
- package/dist/primitives/messagePart.js.map +1 -1
- package/dist/primitives/queueItem/QueueItemRemove.js +11 -4
- package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -1
- package/dist/primitives/queueItem/QueueItemSteer.js +11 -4
- package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -1
- package/dist/primitives/queueItem/QueueItemText.js +20 -6
- package/dist/primitives/queueItem/QueueItemText.js.map +1 -1
- package/dist/primitives/queueItem.js.map +1 -1
- package/dist/primitives/reasoning/useScrollLock.js +61 -34
- package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +56 -16
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -1
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +120 -59
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
- package/dist/primitives/selectionToolbar.js.map +1 -1
- package/dist/primitives/suggestion/SuggestionDescription.js +20 -6
- package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -1
- package/dist/primitives/suggestion/SuggestionTitle.js +20 -6
- package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -1
- package/dist/primitives/suggestion/SuggestionTrigger.js +39 -26
- package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -1
- package/dist/primitives/suggestion.js.map +1 -1
- package/dist/primitives/thread/ThreadEmpty.js +6 -2
- package/dist/primitives/thread/ThreadEmpty.js.map +1 -1
- package/dist/primitives/thread/ThreadIf.js +32 -10
- package/dist/primitives/thread/ThreadIf.js.map +1 -1
- package/dist/primitives/thread/ThreadRoot.js +13 -4
- package/dist/primitives/thread/ThreadRoot.js.map +1 -1
- package/dist/primitives/thread/ThreadScrollToBottom.js +24 -6
- package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -1
- package/dist/primitives/thread/ThreadSuggestion.js +18 -6
- package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
- package/dist/primitives/thread/ThreadViewport.js +185 -47
- package/dist/primitives/thread/ThreadViewport.js.map +1 -1
- package/dist/primitives/thread/ThreadViewportFooter.js +22 -9
- package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -1
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js.map +1 -1
- package/dist/primitives/thread/topAnchor/createReserveObservers.js.map +1 -1
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -1
- package/dist/primitives/thread/topAnchor/topAnchorTurn.js.map +1 -1
- package/dist/primitives/thread/topAnchor/topAnchorUtils.js.map +1 -1
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +19 -4
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -1
- package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
- package/dist/primitives/thread/useThreadViewportAutoScroll.js +21 -16
- package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
- package/dist/primitives/thread.js.map +1 -1
- package/dist/primitives/threadList/ThreadListLoadMore.js.map +1 -1
- package/dist/primitives/threadList/ThreadListNew.js +53 -11
- package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
- package/dist/primitives/threadList/ThreadListRoot.js +13 -4
- package/dist/primitives/threadList/ThreadListRoot.js.map +1 -1
- package/dist/primitives/threadList.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.js +26 -7
- package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -1
- package/dist/primitives/threadListItem.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +44 -7
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +28 -6
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +25 -5
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +28 -6
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -1
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +28 -6
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
- package/dist/primitives/threadListItemMore/scope.js.map +1 -1
- package/dist/primitives/threadListItemMore.js.map +1 -1
- package/dist/sandbox-host/SandboxHost.js.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.js.map +1 -1
- package/dist/tests/setup.js.map +1 -1
- package/dist/unstable/useComposerInputHistory.d.ts +30 -0
- package/dist/unstable/useComposerInputHistory.d.ts.map +1 -0
- package/dist/unstable/useComposerInputHistory.js +117 -0
- package/dist/unstable/useComposerInputHistory.js.map +1 -0
- package/dist/unstable/useMentionAdapter.js.map +1 -1
- package/dist/unstable/useMessageStallDetection.d.ts +29 -0
- package/dist/unstable/useMessageStallDetection.d.ts.map +1 -0
- package/dist/unstable/useMessageStallDetection.js +69 -0
- package/dist/unstable/useMessageStallDetection.js.map +1 -0
- package/dist/unstable/useSlashCommandAdapter.js.map +1 -1
- package/dist/utils/Primitive.js +57 -12
- package/dist/utils/Primitive.js.map +1 -1
- package/dist/utils/createActionButton.js +23 -7
- package/dist/utils/createActionButton.js.map +1 -1
- package/dist/utils/getSelectionMessageId.js.map +1 -1
- package/dist/utils/hooks/useManagedRef.js +16 -8
- package/dist/utils/hooks/useManagedRef.js.map +1 -1
- package/dist/utils/hooks/useMediaQuery.js +25 -10
- package/dist/utils/hooks/useMediaQuery.js.map +1 -1
- package/dist/utils/hooks/useOnResizeContent.js +29 -19
- package/dist/utils/hooks/useOnResizeContent.js.map +1 -1
- package/dist/utils/hooks/useOnScrollToBottom.js +20 -4
- package/dist/utils/hooks/useOnScrollToBottom.js.map +1 -1
- package/dist/utils/hooks/useSizeHandle.js +23 -15
- package/dist/utils/hooks/useSizeHandle.js.map +1 -1
- package/dist/utils/json/is-json-equal.js.map +1 -1
- package/dist/utils/json/is-json.js.map +1 -1
- package/dist/utils/smooth/SmoothContext.js +41 -11
- package/dist/utils/smooth/SmoothContext.js.map +1 -1
- package/dist/utils/smooth/useSmooth.d.ts +40 -2
- package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
- package/dist/utils/smooth/useSmooth.js +52 -13
- package/dist/utils/smooth/useSmooth.js.map +1 -1
- package/dist/utils/useToolArgsFieldStatus.d.ts +2 -2
- package/dist/utils/useToolArgsFieldStatus.d.ts.map +1 -1
- package/dist/utils/useToolArgsFieldStatus.js +13 -5
- package/dist/utils/useToolArgsFieldStatus.js.map +1 -1
- package/package.json +6 -6
- package/src/client/ExternalThread.ts +146 -74
- package/src/client/InMemoryThreadList.ts +23 -21
- package/src/client/SingleThreadList.ts +29 -27
- package/src/hooks/useToolCallElapsed.ts +52 -0
- package/src/index.ts +19 -0
- package/src/mcp-apps/McpAppRenderer.tsx +5 -3
- package/src/mcp-apps/McpAppsRemoteHost.ts +5 -3
- package/src/primitives/composer/ComposerInput.test.tsx +1 -1
- package/src/primitives/composer/ComposerInput.tsx +3 -3
- package/src/primitives/composer/trigger/TriggerPopover.tsx +4 -5
- package/src/primitives/composer/trigger/TriggerPopoverResource.ts +5 -3
- package/src/primitives/composer/trigger/triggerDetectionResource.ts +21 -21
- package/src/primitives/composer/trigger/triggerKeyboardResource.test.ts +5 -4
- package/src/primitives/composer/trigger/triggerKeyboardResource.ts +99 -101
- package/src/primitives/composer/trigger/triggerNavigationResource.ts +92 -98
- package/src/primitives/composer/trigger/triggerSelectionResource.ts +76 -76
- package/src/primitives/messagePart/MessagePartText.tsx +3 -2
- package/src/primitives/reasoning/useScrollLock.ts +25 -2
- package/src/primitives/thread/useThreadViewportAutoScroll.ts +8 -0
- package/src/tests/external-thread-branches.test.tsx +160 -0
- package/src/tests/shouldContinue.test.ts +33 -0
- package/src/tests/toolCallTiming.test.tsx +221 -0
- package/src/unstable/useComposerInputHistory.test.tsx +201 -0
- package/src/unstable/useComposerInputHistory.ts +160 -0
- package/src/unstable/useMessageStallDetection.ts +91 -0
- package/src/utils/smooth/useSmooth.test.tsx +95 -0
- package/src/utils/smooth/useSmooth.ts +82 -10
|
@@ -1,21 +1,43 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useAuiState } from "@assistant-ui/store";
|
|
3
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
3
4
|
//#region src/primitives/thread/ThreadIf.ts
|
|
4
5
|
const useThreadIf = (props) => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
const $ = c(4);
|
|
7
|
+
let t0;
|
|
8
|
+
if ($[0] !== props.disabled || $[1] !== props.empty || $[2] !== props.running) {
|
|
9
|
+
t0 = (s) => {
|
|
10
|
+
if (props.empty === true && !s.thread.isEmpty) return false;
|
|
11
|
+
if (props.empty === false && s.thread.isEmpty) return false;
|
|
12
|
+
if (props.running === true && !s.thread.isRunning) return false;
|
|
13
|
+
if (props.running === false && s.thread.isRunning) return false;
|
|
14
|
+
if (props.disabled === true && !s.thread.isDisabled) return false;
|
|
15
|
+
if (props.disabled === false && s.thread.isDisabled) return false;
|
|
16
|
+
return true;
|
|
17
|
+
};
|
|
18
|
+
$[0] = props.disabled;
|
|
19
|
+
$[1] = props.empty;
|
|
20
|
+
$[2] = props.running;
|
|
21
|
+
$[3] = t0;
|
|
22
|
+
} else t0 = $[3];
|
|
23
|
+
return useAuiState(t0);
|
|
14
24
|
};
|
|
15
25
|
/**
|
|
16
26
|
* @deprecated Use `<AuiIf condition={(s) => s.thread...} />` instead.
|
|
17
27
|
*/
|
|
18
|
-
const ThreadPrimitiveIf = (
|
|
28
|
+
const ThreadPrimitiveIf = (t0) => {
|
|
29
|
+
const $ = c(3);
|
|
30
|
+
let children;
|
|
31
|
+
let query;
|
|
32
|
+
if ($[0] !== t0) {
|
|
33
|
+
({children, ...query} = t0);
|
|
34
|
+
$[0] = t0;
|
|
35
|
+
$[1] = children;
|
|
36
|
+
$[2] = query;
|
|
37
|
+
} else {
|
|
38
|
+
children = $[1];
|
|
39
|
+
query = $[2];
|
|
40
|
+
}
|
|
19
41
|
return useThreadIf(query) ? children : null;
|
|
20
42
|
};
|
|
21
43
|
ThreadPrimitiveIf.displayName = "ThreadPrimitive.If";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadIf.js","names":[],"sources":["../../../src/primitives/thread/ThreadIf.ts"],"sourcesContent":["\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useAuiState } from \"@assistant-ui/store\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ThreadIfFilters = {\n empty: boolean | undefined;\n running: boolean | undefined;\n disabled: boolean | undefined;\n};\n\ntype UseThreadIfProps = RequireAtLeastOne<ThreadIfFilters>;\n\nconst useThreadIf = (props: UseThreadIfProps) => {\n return useAuiState((s) => {\n if (props.empty === true && !s.thread.isEmpty) return false;\n if (props.empty === false && s.thread.isEmpty) return false;\n\n if (props.running === true && !s.thread.isRunning) return false;\n if (props.running === false && s.thread.isRunning) return false;\n if (props.disabled === true && !s.thread.isDisabled) return false;\n if (props.disabled === false && s.thread.isDisabled) return false;\n\n return true;\n });\n};\n\nexport namespace ThreadPrimitiveIf {\n export type Props = PropsWithChildren<UseThreadIfProps>;\n}\n\n/**\n * @deprecated Use `<AuiIf condition={(s) => s.thread...} />` instead.\n */\nexport const ThreadPrimitiveIf: FC<ThreadPrimitiveIf.Props> = ({\n children,\n ...query\n}) => {\n const result = useThreadIf(query);\n return result ? children : null;\n};\n\nThreadPrimitiveIf.displayName = \"ThreadPrimitive.If\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ThreadIf.js","names":["c","_c","FC","PropsWithChildren","useAuiState","RequireAtLeastOne","ThreadIfFilters","empty","running","disabled","UseThreadIfProps","useThreadIf","props","$","t0","s","thread","isEmpty","isRunning","isDisabled","ThreadPrimitiveIf","Props","children","query","result","displayName"],"sources":["../../../src/primitives/thread/ThreadIf.ts"],"sourcesContent":["\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useAuiState } from \"@assistant-ui/store\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ThreadIfFilters = {\n empty: boolean | undefined;\n running: boolean | undefined;\n disabled: boolean | undefined;\n};\n\ntype UseThreadIfProps = RequireAtLeastOne<ThreadIfFilters>;\n\nconst useThreadIf = (props: UseThreadIfProps) => {\n return useAuiState((s) => {\n if (props.empty === true && !s.thread.isEmpty) return false;\n if (props.empty === false && s.thread.isEmpty) return false;\n\n if (props.running === true && !s.thread.isRunning) return false;\n if (props.running === false && s.thread.isRunning) return false;\n if (props.disabled === true && !s.thread.isDisabled) return false;\n if (props.disabled === false && s.thread.isDisabled) return false;\n\n return true;\n });\n};\n\nexport namespace ThreadPrimitiveIf {\n export type Props = PropsWithChildren<UseThreadIfProps>;\n}\n\n/**\n * @deprecated Use `<AuiIf condition={(s) => s.thread...} />` instead.\n */\nexport const ThreadPrimitiveIf: FC<ThreadPrimitiveIf.Props> = ({\n children,\n ...query\n}) => {\n const result = useThreadIf(query);\n return result ? children : null;\n};\n\nThreadPrimitiveIf.displayName = \"ThreadPrimitive.If\";\n"],"mappings":";;;;AAcA,MAAMW,eAAcC,UAAA;CAAA,MAAAC,IAAAZ,EAAA,CAAA;CAAA,IAAAa;CAAA,IAAAD,EAAA,OAAAD,MAAAH,YAAAI,EAAA,OAAAD,MAAAL,SAAAM,EAAA,OAAAD,MAAAJ,SAAA;EACCM,MAAAC,MAAA;GACjB,IAAIH,MAAKL,UAAW,QAAhB,CAAyBQ,EAACC,OAAOC,SAAQ,OAAS;GACtD,IAAIL,MAAKL,UAAW,SAASQ,EAACC,OAAOC,SAAQ,OAAS;GAEtD,IAAIL,MAAKJ,YAAa,QAAlB,CAA2BO,EAACC,OAAOE,WAAU,OAAS;GAC1D,IAAIN,MAAKJ,YAAa,SAASO,EAACC,OAAOE,WAAU,OAAS;GAC1D,IAAIN,MAAKH,aAAc,QAAnB,CAA4BM,EAACC,OAAOG,YAAW,OAAS;GAC5D,IAAIP,MAAKH,aAAc,SAASM,EAACC,OAAOG,YAAW,OAAS;GAAM,OAE3D;EAAI;EACZN,EAAA,KAAAD,MAAAH;EAAAI,EAAA,KAAAD,MAAAL;EAAAM,EAAA,KAAAD,MAAAJ;EAAAK,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAAA,OAVMT,YAAYU,EAUlB;AAAC;;;;AAUJ,MAAaM,qBAAiDN,OAAA;CAAA,MAAAD,IAAAZ,EAAA,CAAA;CAAA,IAAAqB;CAAA,IAAAC;CAAA,IAAAV,EAAA,OAAAC,IAAA;EAAC,CAAA,CAAAQ,aAAAC,SAAAT;EAG9DD,EAAA,KAAAC;EAAAD,EAAA,KAAAS;EAAAT,EAAA,KAAAU;CAAA,OAAA;EAAAD,WAAAT,EAAA;EAAAU,QAAAV,EAAA;CAAA;CACmC,OAAnBF,YAAYY,KACpBC,IAAAF,WAAA;AAAwB;AAGjCF,kBAAkBK,cAAc"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Primitive } from "../../utils/Primitive.js";
|
|
3
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
3
4
|
import { forwardRef } from "@assistant-ui/tap/react-shim";
|
|
4
5
|
import { jsx } from "react/jsx-runtime";
|
|
5
6
|
//#region src/primitives/thread/ThreadRoot.tsx
|
|
@@ -21,10 +22,18 @@ import { jsx } from "react/jsx-runtime";
|
|
|
21
22
|
* ```
|
|
22
23
|
*/
|
|
23
24
|
const ThreadPrimitiveRoot = forwardRef((props, ref) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const $ = c(3);
|
|
26
|
+
let t0;
|
|
27
|
+
if ($[0] !== props || $[1] !== ref) {
|
|
28
|
+
t0 = /* @__PURE__ */ jsx(Primitive.div, {
|
|
29
|
+
...props,
|
|
30
|
+
ref
|
|
31
|
+
});
|
|
32
|
+
$[0] = props;
|
|
33
|
+
$[1] = ref;
|
|
34
|
+
$[2] = t0;
|
|
35
|
+
} else t0 = $[2];
|
|
36
|
+
return t0;
|
|
28
37
|
});
|
|
29
38
|
ThreadPrimitiveRoot.displayName = "ThreadPrimitive.Root";
|
|
30
39
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadRoot.js","names":[],"sources":["../../../src/primitives/thread/ThreadRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from \"react\";\n\nexport namespace ThreadPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.div>;\n /**\n * Props for the ThreadPrimitive.Root component.\n * Accepts all standard div element props.\n */\n export type Props = ComponentPropsWithoutRef<typeof Primitive.div>;\n}\n\n/**\n * The root container component for a thread.\n *\n * This component serves as the foundational wrapper for all thread-related components.\n * It provides the basic structure and context needed for thread functionality.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Root>\n * <ThreadPrimitive.Viewport>\n * <ThreadPrimitive.Messages>\n * {() => <MyMessage />}\n * </ThreadPrimitive.Messages>\n * </ThreadPrimitive.Viewport>\n * </ThreadPrimitive.Root>\n * ```\n */\nexport const ThreadPrimitiveRoot = forwardRef<\n ThreadPrimitiveRoot.Element,\n ThreadPrimitiveRoot.Props\n>((props, ref) => {\n return <Primitive.div {...props} ref={ref} />;\n});\n\nThreadPrimitiveRoot.displayName = \"ThreadPrimitive.Root\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ThreadRoot.js","names":["c","_c","Primitive","ComponentRef","forwardRef","ComponentPropsWithoutRef","ThreadPrimitiveRoot","Element","div","Props","props","ref","$","t0","displayName"],"sources":["../../../src/primitives/thread/ThreadRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from \"react\";\n\nexport namespace ThreadPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.div>;\n /**\n * Props for the ThreadPrimitive.Root component.\n * Accepts all standard div element props.\n */\n export type Props = ComponentPropsWithoutRef<typeof Primitive.div>;\n}\n\n/**\n * The root container component for a thread.\n *\n * This component serves as the foundational wrapper for all thread-related components.\n * It provides the basic structure and context needed for thread functionality.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Root>\n * <ThreadPrimitive.Viewport>\n * <ThreadPrimitive.Messages>\n * {() => <MyMessage />}\n * </ThreadPrimitive.Messages>\n * </ThreadPrimitive.Viewport>\n * </ThreadPrimitive.Root>\n * ```\n */\nexport const ThreadPrimitiveRoot = forwardRef<\n ThreadPrimitiveRoot.Element,\n ThreadPrimitiveRoot.Props\n>((props, ref) => {\n return <Primitive.div {...props} ref={ref} />;\n});\n\nThreadPrimitiveRoot.displayName = \"ThreadPrimitive.Root\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAaM,sBAAsBF,YAGjCM,OAAAC,QAAA;CAAA,MAAAC,IAAAX,EAAA,CAAA;CAAA,IAAAY;CAAA,IAAAD,EAAA,OAAAF,SAAAE,EAAA,OAAAD,KAAA;EACOE,KAAA,oBAAA,UAAA,KAAA;GAAA,GAAmBH;GAAYC;EAAG,CAAA;EAAIC,EAAA,KAAAF;EAAAE,EAAA,KAAAD;EAAAC,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAAA,OAAtCC;AAAsC,CAC9C;AAEDP,oBAAoBQ,cAAc"}
|
|
@@ -1,18 +1,36 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useThreadViewport, useThreadViewportStore } from "../../context/react/ThreadViewportContext.js";
|
|
3
3
|
import { createActionButton } from "../../utils/createActionButton.js";
|
|
4
|
-
import {
|
|
4
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
5
5
|
//#region src/primitives/thread/ThreadScrollToBottom.ts
|
|
6
|
-
const useThreadScrollToBottom = (
|
|
7
|
-
const
|
|
6
|
+
const useThreadScrollToBottom = (t0) => {
|
|
7
|
+
const $ = c(5);
|
|
8
|
+
let t1;
|
|
9
|
+
if ($[0] !== t0) {
|
|
10
|
+
t1 = t0 === void 0 ? {} : t0;
|
|
11
|
+
$[0] = t0;
|
|
12
|
+
$[1] = t1;
|
|
13
|
+
} else t1 = $[1];
|
|
14
|
+
const { behavior } = t1;
|
|
15
|
+
const isAtBottom = useThreadViewport(_temp);
|
|
8
16
|
const threadViewportStore = useThreadViewportStore();
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
17
|
+
let t2;
|
|
18
|
+
if ($[2] !== behavior || $[3] !== threadViewportStore) {
|
|
19
|
+
t2 = () => {
|
|
20
|
+
threadViewportStore.getState().scrollToBottom({ behavior });
|
|
21
|
+
};
|
|
22
|
+
$[2] = behavior;
|
|
23
|
+
$[3] = threadViewportStore;
|
|
24
|
+
$[4] = t2;
|
|
25
|
+
} else t2 = $[4];
|
|
26
|
+
const handleScrollToBottom = t2;
|
|
12
27
|
if (isAtBottom) return null;
|
|
13
28
|
return handleScrollToBottom;
|
|
14
29
|
};
|
|
15
30
|
const ThreadPrimitiveScrollToBottom = createActionButton("ThreadPrimitive.ScrollToBottom", useThreadScrollToBottom, ["behavior"]);
|
|
31
|
+
function _temp(s) {
|
|
32
|
+
return s.isAtBottom;
|
|
33
|
+
}
|
|
16
34
|
//#endregion
|
|
17
35
|
export { ThreadPrimitiveScrollToBottom };
|
|
18
36
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadScrollToBottom.js","names":[],"sources":["../../../src/primitives/thread/ThreadScrollToBottom.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useCallback } from \"react\";\nimport {\n useThreadViewport,\n useThreadViewportStore,\n} from \"../../context/react/ThreadViewportContext\";\n\nexport namespace useThreadScrollToBottom {\n export type Options = {\n behavior?: ScrollBehavior | undefined;\n };\n}\n\nconst useThreadScrollToBottom = ({\n behavior,\n}: useThreadScrollToBottom.Options = {}) => {\n const isAtBottom = useThreadViewport((s) => s.isAtBottom);\n\n const threadViewportStore = useThreadViewportStore();\n\n const handleScrollToBottom = useCallback(() => {\n threadViewportStore.getState().scrollToBottom({ behavior });\n }, [threadViewportStore, behavior]);\n\n if (isAtBottom) return null;\n return handleScrollToBottom;\n};\n\nexport namespace ThreadPrimitiveScrollToBottom {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useThreadScrollToBottom>;\n}\n\nexport const ThreadPrimitiveScrollToBottom = createActionButton(\n \"ThreadPrimitive.ScrollToBottom\",\n useThreadScrollToBottom,\n [\"behavior\"],\n);\n"],"mappings":";;;;;AAmBA,
|
|
1
|
+
{"version":3,"file":"ThreadScrollToBottom.js","names":["c","_c","ActionButtonElement","ActionButtonProps","createActionButton","useCallback","useThreadViewport","useThreadViewportStore","useThreadScrollToBottom","Options","behavior","ScrollBehavior","t0","$","t1","undefined","isAtBottom","_temp","threadViewportStore","t2","getState","scrollToBottom","handleScrollToBottom","ThreadPrimitiveScrollToBottom","Element","Props","s"],"sources":["../../../src/primitives/thread/ThreadScrollToBottom.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useCallback } from \"react\";\nimport {\n useThreadViewport,\n useThreadViewportStore,\n} from \"../../context/react/ThreadViewportContext\";\n\nexport namespace useThreadScrollToBottom {\n export type Options = {\n behavior?: ScrollBehavior | undefined;\n };\n}\n\nconst useThreadScrollToBottom = ({\n behavior,\n}: useThreadScrollToBottom.Options = {}) => {\n const isAtBottom = useThreadViewport((s) => s.isAtBottom);\n\n const threadViewportStore = useThreadViewportStore();\n\n const handleScrollToBottom = useCallback(() => {\n threadViewportStore.getState().scrollToBottom({ behavior });\n }, [threadViewportStore, behavior]);\n\n if (isAtBottom) return null;\n return handleScrollToBottom;\n};\n\nexport namespace ThreadPrimitiveScrollToBottom {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useThreadScrollToBottom>;\n}\n\nexport const ThreadPrimitiveScrollToBottom = createActionButton(\n \"ThreadPrimitive.ScrollToBottom\",\n useThreadScrollToBottom,\n [\"behavior\"],\n);\n"],"mappings":";;;;;AAmBA,MAAMQ,2BAA0BI,OAAA;CAAA,MAAAC,IAAAZ,EAAA,CAAA;CAAA,IAAAa;CAAA,IAAAD,EAAA,OAAAD,IAAA;EAACE,KAAAF,OAAAG,KAAAA,IAAA,CAEK,IAFLH;EAEMC,EAAA,KAAAD;EAAAC,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAFN,MAAA,EAAAH,aAAAI;CAG/B,MAAAE,aAAmBV,kBAAkBW,KAAmB;CAExD,MAAAC,sBAA4BX,uBAAuB;CAAE,IAAAY;CAAA,IAAAN,EAAA,OAAAH,YAAAG,EAAA,OAAAK,qBAAA;EAEZC,WAAA;GACvCD,oBAAmBE,SAAU,CAAC,CAAAC,eAAgB,EAAAX,SAAW,CAAC;EAAC;EAC5DG,EAAA,KAAAH;EAAAG,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAFD,MAAAS,uBAA6BH;CAI7B,IAAIH,YAAU,OAAS;CAAK,OACrBM;AAAoB;AAQ7B,MAAaC,gCAAgCnB,mBAC3C,kCACAI,yBACA,CAAC,UAAU,CACb;AAxBgC,SAAAS,MAAAS,GAAA;CAAA,OAGcA,EAACV;AAAW"}
|
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { createActionButton } from "../../utils/createActionButton.js";
|
|
3
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
3
4
|
import { useSuggestionTrigger } from "@assistant-ui/core/react";
|
|
4
5
|
//#region src/primitives/thread/ThreadSuggestion.ts
|
|
5
|
-
const useThreadSuggestion = (
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
const useThreadSuggestion = (t0) => {
|
|
7
|
+
const $ = c(4);
|
|
8
|
+
const { prompt, send, clearComposer, autoSend } = t0;
|
|
9
|
+
const resolvedSend = send ?? autoSend ?? false;
|
|
10
|
+
let t1;
|
|
11
|
+
if ($[0] !== clearComposer || $[1] !== prompt || $[2] !== resolvedSend) {
|
|
12
|
+
t1 = {
|
|
13
|
+
prompt,
|
|
14
|
+
send: resolvedSend,
|
|
15
|
+
clearComposer
|
|
16
|
+
};
|
|
17
|
+
$[0] = clearComposer;
|
|
18
|
+
$[1] = prompt;
|
|
19
|
+
$[2] = resolvedSend;
|
|
20
|
+
$[3] = t1;
|
|
21
|
+
} else t1 = $[3];
|
|
22
|
+
const { disabled, trigger } = useSuggestionTrigger(t1);
|
|
11
23
|
if (disabled) return null;
|
|
12
24
|
return trigger;
|
|
13
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadSuggestion.js","names":["useSuggestionTriggerBehavior"],"sources":["../../../src/primitives/thread/ThreadSuggestion.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useSuggestionTrigger as useSuggestionTriggerBehavior } from \"@assistant-ui/core/react\";\n\nconst useThreadSuggestion = ({\n prompt,\n send,\n clearComposer,\n autoSend,\n method: _method,\n}: {\n /** The suggestion prompt. */\n prompt: string;\n\n /**\n * When true, automatically sends the message.\n * When false, replaces or appends the composer text with the suggestion - depending on the value of `clearComposer`.\n */\n send?: boolean | undefined;\n\n /**\n * Whether to clear the composer after sending.\n * When send is set to false, determines if composer text is replaced with suggestion (true, default),\n * or if it's appended to the composer text (false).\n *\n * @default true\n */\n clearComposer?: boolean | undefined;\n\n /** @deprecated Use `send` instead. */\n autoSend?: boolean | undefined;\n\n /** @deprecated Use `clearComposer` instead. */\n method?: \"replace\";\n}) => {\n const resolvedSend = send ?? autoSend ?? false;\n\n const { disabled, trigger } = useSuggestionTriggerBehavior({\n prompt,\n send: resolvedSend,\n clearComposer,\n });\n if (disabled) return null;\n return trigger;\n};\n\nexport namespace ThreadPrimitiveSuggestion {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useThreadSuggestion>;\n}\n\nexport const ThreadPrimitiveSuggestion = createActionButton(\n \"ThreadPrimitive.Suggestion\",\n useThreadSuggestion,\n [\"prompt\", \"send\", \"clearComposer\", \"autoSend\", \"method\"],\n);\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ThreadSuggestion.js","names":["c","_c","ActionButtonElement","ActionButtonProps","createActionButton","useSuggestionTrigger","useSuggestionTriggerBehavior","useThreadSuggestion","t0","$","prompt","send","clearComposer","autoSend","resolvedSend","t1","disabled","trigger","ThreadPrimitiveSuggestion","Element","Props"],"sources":["../../../src/primitives/thread/ThreadSuggestion.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useSuggestionTrigger as useSuggestionTriggerBehavior } from \"@assistant-ui/core/react\";\n\nconst useThreadSuggestion = ({\n prompt,\n send,\n clearComposer,\n autoSend,\n method: _method,\n}: {\n /** The suggestion prompt. */\n prompt: string;\n\n /**\n * When true, automatically sends the message.\n * When false, replaces or appends the composer text with the suggestion - depending on the value of `clearComposer`.\n */\n send?: boolean | undefined;\n\n /**\n * Whether to clear the composer after sending.\n * When send is set to false, determines if composer text is replaced with suggestion (true, default),\n * or if it's appended to the composer text (false).\n *\n * @default true\n */\n clearComposer?: boolean | undefined;\n\n /** @deprecated Use `send` instead. */\n autoSend?: boolean | undefined;\n\n /** @deprecated Use `clearComposer` instead. */\n method?: \"replace\";\n}) => {\n const resolvedSend = send ?? autoSend ?? false;\n\n const { disabled, trigger } = useSuggestionTriggerBehavior({\n prompt,\n send: resolvedSend,\n clearComposer,\n });\n if (disabled) return null;\n return trigger;\n};\n\nexport namespace ThreadPrimitiveSuggestion {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useThreadSuggestion>;\n}\n\nexport const ThreadPrimitiveSuggestion = createActionButton(\n \"ThreadPrimitive.Suggestion\",\n useThreadSuggestion,\n [\"prompt\", \"send\", \"clearComposer\", \"autoSend\", \"method\"],\n);\n"],"mappings":";;;;;AASA,MAAMO,uBAAsBC,OAAA;CAAA,MAAAC,IAAAR,EAAA,CAAA;CAAC,MAAA,EAAAS,QAAAC,MAAAC,eAAAC,aAAAL;CA+B3B,MAAAM,eAAqBH,QAAAE,YAAA;CAA0B,IAAAE;CAAA,IAAAN,EAAA,OAAAG,iBAAAH,EAAA,OAAAC,UAAAD,EAAA,OAAAK,cAAA;EAEYC,KAAA;GAAAL;GAAAC,MAEnDG;GAAYF;EAEpB;EAACH,EAAA,KAAAG;EAAAH,EAAA,KAAAC;EAAAD,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAJD,MAAA,EAAAO,UAAAC,YAA8BX,qBAA6BS,EAI1D;CACD,IAAIC,UAAQ,OAAS;CAAK,OACnBC;AAAO;AAQhB,MAAaC,4BAA4Bd,mBACvC,8BACAG,qBACA;CAAC;CAAU;CAAQ;CAAiB;CAAY;AAAQ,CAC1D"}
|
|
@@ -8,64 +8,157 @@ import { useSizeHandle } from "../../utils/hooks/useSizeHandle.js";
|
|
|
8
8
|
import { useTopAnchorReserve } from "./topAnchor/useTopAnchorReserve.js";
|
|
9
9
|
import { getActiveTopAnchorAnchorId, getActiveTopAnchorTargetId } from "./topAnchor/topAnchorTurn.js";
|
|
10
10
|
import { useAuiEvent, useAuiState } from "@assistant-ui/store";
|
|
11
|
-
import {
|
|
11
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
12
|
+
import { forwardRef, useLayoutEffect } from "@assistant-ui/tap/react-shim";
|
|
12
13
|
import { jsx } from "react/jsx-runtime";
|
|
13
14
|
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
14
15
|
//#region src/primitives/thread/ThreadViewport.tsx
|
|
15
16
|
const useViewportSizeRef = () => {
|
|
16
|
-
return useSizeHandle(useThreadViewport(
|
|
17
|
+
return useSizeHandle(useThreadViewport(_temp), _temp2);
|
|
17
18
|
};
|
|
18
19
|
const useViewportElementRef = () => {
|
|
19
|
-
return useManagedRef(useThreadViewport(
|
|
20
|
+
return useManagedRef(useThreadViewport(_temp3));
|
|
20
21
|
};
|
|
21
22
|
const useTopAnchorTurn = (enabled) => {
|
|
23
|
+
const $ = c(13);
|
|
22
24
|
const threadViewportStore = useThreadViewportStore();
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (!enabled) return void 0;
|
|
29
|
-
return getActiveTopAnchorTargetId(s.thread);
|
|
30
|
-
});
|
|
31
|
-
const activeTurn = useMemo(() => {
|
|
32
|
-
if (!activeAnchorId || !activeTargetId) return null;
|
|
33
|
-
return {
|
|
34
|
-
anchorId: activeAnchorId,
|
|
35
|
-
targetId: activeTargetId
|
|
25
|
+
let t0;
|
|
26
|
+
if ($[0] !== enabled) {
|
|
27
|
+
t0 = (s) => {
|
|
28
|
+
if (!enabled) return;
|
|
29
|
+
return getActiveTopAnchorAnchorId(s.thread);
|
|
36
30
|
};
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
31
|
+
$[0] = enabled;
|
|
32
|
+
$[1] = t0;
|
|
33
|
+
} else t0 = $[1];
|
|
34
|
+
const activeAnchorId = useAuiState(t0);
|
|
35
|
+
let t1;
|
|
36
|
+
if ($[2] !== enabled) {
|
|
37
|
+
t1 = (s_0) => {
|
|
38
|
+
if (!enabled) return;
|
|
39
|
+
return getActiveTopAnchorTargetId(s_0.thread);
|
|
40
|
+
};
|
|
41
|
+
$[2] = enabled;
|
|
42
|
+
$[3] = t1;
|
|
43
|
+
} else t1 = $[3];
|
|
44
|
+
const activeTargetId = useAuiState(t1);
|
|
45
|
+
let t2;
|
|
46
|
+
bb0: {
|
|
47
|
+
if (!activeAnchorId || !activeTargetId) {
|
|
48
|
+
t2 = null;
|
|
49
|
+
break bb0;
|
|
50
|
+
}
|
|
51
|
+
let t3;
|
|
52
|
+
if ($[4] !== activeAnchorId || $[5] !== activeTargetId) {
|
|
53
|
+
t3 = {
|
|
54
|
+
anchorId: activeAnchorId,
|
|
55
|
+
targetId: activeTargetId
|
|
56
|
+
};
|
|
57
|
+
$[4] = activeAnchorId;
|
|
58
|
+
$[5] = activeTargetId;
|
|
59
|
+
$[6] = t3;
|
|
60
|
+
} else t3 = $[6];
|
|
61
|
+
t2 = t3;
|
|
62
|
+
}
|
|
63
|
+
const activeTurn = t2;
|
|
64
|
+
let t3;
|
|
65
|
+
let t4;
|
|
66
|
+
if ($[7] !== activeTurn || $[8] !== threadViewportStore) {
|
|
67
|
+
t3 = () => {
|
|
68
|
+
if (!activeTurn) return;
|
|
69
|
+
const state = threadViewportStore.getState();
|
|
70
|
+
const current = state.topAnchorTurn;
|
|
71
|
+
if (current?.anchorId === activeTurn.anchorId && current.targetId === activeTurn.targetId) return;
|
|
72
|
+
state.setTopAnchorTurn(activeTurn);
|
|
73
|
+
};
|
|
74
|
+
t4 = [activeTurn, threadViewportStore];
|
|
75
|
+
$[7] = activeTurn;
|
|
76
|
+
$[8] = threadViewportStore;
|
|
77
|
+
$[9] = t3;
|
|
78
|
+
$[10] = t4;
|
|
79
|
+
} else {
|
|
80
|
+
t3 = $[9];
|
|
81
|
+
t4 = $[10];
|
|
82
|
+
}
|
|
83
|
+
useLayoutEffect(t3, t4);
|
|
84
|
+
let t5;
|
|
85
|
+
if ($[11] !== threadViewportStore) {
|
|
86
|
+
t5 = () => {
|
|
87
|
+
threadViewportStore.getState().setTopAnchorTurn(null);
|
|
88
|
+
};
|
|
89
|
+
$[11] = threadViewportStore;
|
|
90
|
+
$[12] = t5;
|
|
91
|
+
} else t5 = $[12];
|
|
92
|
+
const clearTopAnchorTurn = t5;
|
|
48
93
|
useAuiEvent("thread.initialize", clearTopAnchorTurn);
|
|
49
94
|
useAuiEvent("threadListItem.switchedTo", clearTopAnchorTurn);
|
|
50
95
|
};
|
|
51
|
-
const ThreadPrimitiveViewportScrollable = forwardRef((
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
96
|
+
const ThreadPrimitiveViewportScrollable = forwardRef((t0, forwardedRef) => {
|
|
97
|
+
const $ = c(18);
|
|
98
|
+
let autoScroll;
|
|
99
|
+
let children;
|
|
100
|
+
let rest;
|
|
101
|
+
let scrollToBottomOnInitialize;
|
|
102
|
+
let scrollToBottomOnRunStart;
|
|
103
|
+
let scrollToBottomOnThreadSwitch;
|
|
104
|
+
if ($[0] !== t0) {
|
|
105
|
+
({autoScroll, scrollToBottomOnRunStart, scrollToBottomOnInitialize, scrollToBottomOnThreadSwitch, children, ...rest} = t0);
|
|
106
|
+
$[0] = t0;
|
|
107
|
+
$[1] = autoScroll;
|
|
108
|
+
$[2] = children;
|
|
109
|
+
$[3] = rest;
|
|
110
|
+
$[4] = scrollToBottomOnInitialize;
|
|
111
|
+
$[5] = scrollToBottomOnRunStart;
|
|
112
|
+
$[6] = scrollToBottomOnThreadSwitch;
|
|
113
|
+
} else {
|
|
114
|
+
autoScroll = $[1];
|
|
115
|
+
children = $[2];
|
|
116
|
+
rest = $[3];
|
|
117
|
+
scrollToBottomOnInitialize = $[4];
|
|
118
|
+
scrollToBottomOnRunStart = $[5];
|
|
119
|
+
scrollToBottomOnThreadSwitch = $[6];
|
|
120
|
+
}
|
|
121
|
+
let t1;
|
|
122
|
+
if ($[7] !== autoScroll || $[8] !== scrollToBottomOnInitialize || $[9] !== scrollToBottomOnRunStart || $[10] !== scrollToBottomOnThreadSwitch) {
|
|
123
|
+
t1 = {
|
|
124
|
+
autoScroll,
|
|
125
|
+
scrollToBottomOnRunStart,
|
|
126
|
+
scrollToBottomOnInitialize,
|
|
127
|
+
scrollToBottomOnThreadSwitch
|
|
128
|
+
};
|
|
129
|
+
$[7] = autoScroll;
|
|
130
|
+
$[8] = scrollToBottomOnInitialize;
|
|
131
|
+
$[9] = scrollToBottomOnRunStart;
|
|
132
|
+
$[10] = scrollToBottomOnThreadSwitch;
|
|
133
|
+
$[11] = t1;
|
|
134
|
+
} else t1 = $[11];
|
|
135
|
+
const autoScrollRef = useThreadViewportAutoScroll(t1);
|
|
58
136
|
const viewportSizeRef = useViewportSizeRef();
|
|
59
137
|
const viewportElementRef = useViewportElementRef();
|
|
60
|
-
const
|
|
138
|
+
const threadViewportStore = useThreadViewportStore();
|
|
139
|
+
let t2;
|
|
140
|
+
if ($[12] !== threadViewportStore) {
|
|
141
|
+
t2 = threadViewportStore.getState();
|
|
142
|
+
$[12] = threadViewportStore;
|
|
143
|
+
$[13] = t2;
|
|
144
|
+
} else t2 = $[13];
|
|
145
|
+
const topAnchorEnabled = t2.turnAnchor === "top";
|
|
61
146
|
useTopAnchorTurn(topAnchorEnabled);
|
|
62
147
|
useTopAnchorReserve(topAnchorEnabled);
|
|
63
148
|
const ref = useComposedRefs(forwardedRef, autoScrollRef, viewportSizeRef, viewportElementRef);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
149
|
+
let t3;
|
|
150
|
+
if ($[14] !== children || $[15] !== ref || $[16] !== rest) {
|
|
151
|
+
t3 = /* @__PURE__ */ jsx(Primitive.div, {
|
|
152
|
+
...rest,
|
|
153
|
+
ref,
|
|
154
|
+
children
|
|
155
|
+
});
|
|
156
|
+
$[14] = children;
|
|
157
|
+
$[15] = ref;
|
|
158
|
+
$[16] = rest;
|
|
159
|
+
$[17] = t3;
|
|
160
|
+
} else t3 = $[17];
|
|
161
|
+
return t3;
|
|
69
162
|
});
|
|
70
163
|
ThreadPrimitiveViewportScrollable.displayName = "ThreadPrimitive.ViewportScrollable";
|
|
71
164
|
/**
|
|
@@ -84,19 +177,64 @@ ThreadPrimitiveViewportScrollable.displayName = "ThreadPrimitive.ViewportScrolla
|
|
|
84
177
|
* </ThreadPrimitive.Viewport>
|
|
85
178
|
* ```
|
|
86
179
|
*/
|
|
87
|
-
const ThreadPrimitiveViewport = forwardRef((
|
|
88
|
-
|
|
89
|
-
|
|
180
|
+
const ThreadPrimitiveViewport = forwardRef((t0, ref) => {
|
|
181
|
+
const $ = c(13);
|
|
182
|
+
let props;
|
|
183
|
+
let topAnchorMessageClamp;
|
|
184
|
+
let turnAnchor;
|
|
185
|
+
if ($[0] !== t0) {
|
|
186
|
+
({turnAnchor, topAnchorMessageClamp, ...props} = t0);
|
|
187
|
+
$[0] = t0;
|
|
188
|
+
$[1] = props;
|
|
189
|
+
$[2] = topAnchorMessageClamp;
|
|
190
|
+
$[3] = turnAnchor;
|
|
191
|
+
} else {
|
|
192
|
+
props = $[1];
|
|
193
|
+
topAnchorMessageClamp = $[2];
|
|
194
|
+
turnAnchor = $[3];
|
|
195
|
+
}
|
|
196
|
+
let t1;
|
|
197
|
+
if ($[4] !== topAnchorMessageClamp || $[5] !== turnAnchor) {
|
|
198
|
+
t1 = {
|
|
90
199
|
turnAnchor,
|
|
91
200
|
topAnchorMessageClamp
|
|
92
|
-
}
|
|
93
|
-
|
|
201
|
+
};
|
|
202
|
+
$[4] = topAnchorMessageClamp;
|
|
203
|
+
$[5] = turnAnchor;
|
|
204
|
+
$[6] = t1;
|
|
205
|
+
} else t1 = $[6];
|
|
206
|
+
let t2;
|
|
207
|
+
if ($[7] !== props || $[8] !== ref) {
|
|
208
|
+
t2 = /* @__PURE__ */ jsx(ThreadPrimitiveViewportScrollable, {
|
|
94
209
|
...props,
|
|
95
210
|
ref
|
|
96
|
-
})
|
|
97
|
-
|
|
211
|
+
});
|
|
212
|
+
$[7] = props;
|
|
213
|
+
$[8] = ref;
|
|
214
|
+
$[9] = t2;
|
|
215
|
+
} else t2 = $[9];
|
|
216
|
+
let t3;
|
|
217
|
+
if ($[10] !== t1 || $[11] !== t2) {
|
|
218
|
+
t3 = /* @__PURE__ */ jsx(ThreadPrimitiveViewportProvider, {
|
|
219
|
+
options: t1,
|
|
220
|
+
children: t2
|
|
221
|
+
});
|
|
222
|
+
$[10] = t1;
|
|
223
|
+
$[11] = t2;
|
|
224
|
+
$[12] = t3;
|
|
225
|
+
} else t3 = $[12];
|
|
226
|
+
return t3;
|
|
98
227
|
});
|
|
99
228
|
ThreadPrimitiveViewport.displayName = "ThreadPrimitive.Viewport";
|
|
229
|
+
function _temp(s) {
|
|
230
|
+
return s.registerViewport;
|
|
231
|
+
}
|
|
232
|
+
function _temp2(el) {
|
|
233
|
+
return el.clientHeight;
|
|
234
|
+
}
|
|
235
|
+
function _temp3(s) {
|
|
236
|
+
return s.registerViewportElement;
|
|
237
|
+
}
|
|
100
238
|
//#endregion
|
|
101
239
|
export { ThreadPrimitiveViewport };
|
|
102
240
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadViewport.js","names":[],"sources":["../../../src/primitives/thread/ThreadViewport.tsx"],"sourcesContent":["\"use client\";\n\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n} from \"react\";\nimport { useAuiEvent, useAuiState } from \"@assistant-ui/store\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\nimport { useThreadViewportAutoScroll } from \"./useThreadViewportAutoScroll\";\nimport { ThreadPrimitiveViewportProvider } from \"../../context/providers/ThreadViewportProvider\";\nimport { useSizeHandle } from \"../../utils/hooks/useSizeHandle\";\nimport {\n useThreadViewport,\n useThreadViewportStore,\n} from \"../../context/react/ThreadViewportContext\";\nimport { useTopAnchorReserve } from \"./topAnchor/useTopAnchorReserve\";\nimport {\n getActiveTopAnchorAnchorId,\n getActiveTopAnchorTargetId,\n} from \"./topAnchor/topAnchorTurn\";\n\nexport namespace ThreadPrimitiveViewport {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.div> & {\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 * Controls scroll anchoring behavior for new messages.\n * - \"bottom\" (default): Messages anchor at the bottom, classic chat behavior.\n * - \"top\": New user messages anchor at the top of the viewport for a focused reading experience.\n */\n turnAnchor?: \"top\" | \"bottom\" | undefined;\n\n /**\n * Clamps tall user messages so the assistant response stays in view.\n *\n * @default { tallerThan: \"10em\", visibleHeight: \"6em\" }\n */\n topAnchorMessageClamp?: {\n /**\n * Clamp messages taller than this. Supports `px`, `em`, and `rem`.\n *\n * @default \"10em\"\n */\n tallerThan?: string;\n /**\n * Visible portion of clamped messages. Supports `px`, `em`, and `rem`.\n *\n * @default \"6em\"\n */\n visibleHeight?: string;\n };\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 thread history is first loaded.\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\nconst useViewportSizeRef = () => {\n const register = useThreadViewport((s) => s.registerViewport);\n const getHeight = useCallback((el: HTMLElement) => el.clientHeight, []);\n return useSizeHandle(register, getHeight);\n};\n\nconst useViewportElementRef = () => {\n const registerViewportElement = useThreadViewport(\n (s) => s.registerViewportElement,\n );\n\n return useManagedRef(registerViewportElement);\n};\n\nconst useTopAnchorTurn = (enabled: boolean) => {\n const threadViewportStore = useThreadViewportStore();\n const activeAnchorId = useAuiState((s) => {\n if (!enabled) return undefined;\n return getActiveTopAnchorAnchorId(s.thread);\n });\n const activeTargetId = useAuiState((s) => {\n if (!enabled) return undefined;\n return getActiveTopAnchorTargetId(s.thread);\n });\n const activeTurn = useMemo(() => {\n if (!activeAnchorId || !activeTargetId) return null;\n return { anchorId: activeAnchorId, targetId: activeTargetId };\n }, [activeAnchorId, activeTargetId]);\n\n useLayoutEffect(() => {\n if (!activeTurn) return;\n\n const state = threadViewportStore.getState();\n const current = state.topAnchorTurn;\n if (\n current?.anchorId === activeTurn.anchorId &&\n current.targetId === activeTurn.targetId\n ) {\n return;\n }\n\n state.setTopAnchorTurn(activeTurn);\n }, [activeTurn, threadViewportStore]);\n\n const clearTopAnchorTurn = useCallback(() => {\n threadViewportStore.getState().setTopAnchorTurn(null);\n }, [threadViewportStore]);\n\n useAuiEvent(\"thread.initialize\", clearTopAnchorTurn);\n useAuiEvent(\"threadListItem.switchedTo\", clearTopAnchorTurn);\n};\n\nconst ThreadPrimitiveViewportScrollable = forwardRef<\n ThreadPrimitiveViewport.Element,\n ThreadPrimitiveViewport.Props\n>(\n (\n {\n autoScroll,\n scrollToBottomOnRunStart,\n scrollToBottomOnInitialize,\n scrollToBottomOnThreadSwitch,\n children,\n ...rest\n },\n forwardedRef,\n ) => {\n const autoScrollRef = useThreadViewportAutoScroll<HTMLDivElement>({\n autoScroll,\n scrollToBottomOnRunStart,\n scrollToBottomOnInitialize,\n scrollToBottomOnThreadSwitch,\n });\n const viewportSizeRef = useViewportSizeRef();\n const viewportElementRef = useViewportElementRef();\n const threadViewportStore = useThreadViewportStore();\n const turnAnchor = threadViewportStore.getState().turnAnchor;\n const topAnchorEnabled = turnAnchor === \"top\";\n useTopAnchorTurn(topAnchorEnabled);\n useTopAnchorReserve(topAnchorEnabled);\n const ref = useComposedRefs(\n forwardedRef,\n autoScrollRef,\n viewportSizeRef,\n viewportElementRef,\n );\n\n return (\n <Primitive.div {...rest} ref={ref}>\n {children}\n </Primitive.div>\n );\n },\n);\n\nThreadPrimitiveViewportScrollable.displayName =\n \"ThreadPrimitive.ViewportScrollable\";\n\n/**\n * A scrollable viewport container for thread messages.\n *\n * This component provides a scrollable area for displaying thread messages with\n * automatic scrolling capabilities. It manages the viewport state and provides\n * context for child components to access viewport-related functionality.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Viewport turnAnchor=\"top\">\n * <ThreadPrimitive.Messages>\n * {() => <MyMessage />}\n * </ThreadPrimitive.Messages>\n * </ThreadPrimitive.Viewport>\n * ```\n */\nexport const ThreadPrimitiveViewport = forwardRef<\n ThreadPrimitiveViewport.Element,\n ThreadPrimitiveViewport.Props\n>(({ turnAnchor, topAnchorMessageClamp, ...props }, ref) => {\n return (\n <ThreadPrimitiveViewportProvider\n options={{ turnAnchor, topAnchorMessageClamp }}\n >\n <ThreadPrimitiveViewportScrollable {...props} ref={ref} />\n </ThreadPrimitiveViewportProvider>\n );\n});\n\nThreadPrimitiveViewport.displayName = \"ThreadPrimitive.Viewport\";\n"],"mappings":";;;;;;;;;;;;;;AAwFA,MAAM,2BAA2B;CAG/B,OAAO,cAFU,mBAAmB,MAAM,EAAE,gBAEhB,GADV,aAAa,OAAoB,GAAG,cAAc,CAAC,CAC9B,CAAC;AAC1C;AAEA,MAAM,8BAA8B;CAKlC,OAAO,cAJyB,mBAC7B,MAAM,EAAE,uBAGgC,CAAC;AAC9C;AAEA,MAAM,oBAAoB,YAAqB;CAC7C,MAAM,sBAAsB,uBAAuB;CACnD,MAAM,iBAAiB,aAAa,MAAM;EACxC,IAAI,CAAC,SAAS,OAAO,KAAA;EACrB,OAAO,2BAA2B,EAAE,MAAM;CAC5C,CAAC;CACD,MAAM,iBAAiB,aAAa,MAAM;EACxC,IAAI,CAAC,SAAS,OAAO,KAAA;EACrB,OAAO,2BAA2B,EAAE,MAAM;CAC5C,CAAC;CACD,MAAM,aAAa,cAAc;EAC/B,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,OAAO;EAC/C,OAAO;GAAE,UAAU;GAAgB,UAAU;EAAe;CAC9D,GAAG,CAAC,gBAAgB,cAAc,CAAC;CAEnC,sBAAsB;EACpB,IAAI,CAAC,YAAY;EAEjB,MAAM,QAAQ,oBAAoB,SAAS;EAC3C,MAAM,UAAU,MAAM;EACtB,IACE,SAAS,aAAa,WAAW,YACjC,QAAQ,aAAa,WAAW,UAEhC;EAGF,MAAM,iBAAiB,UAAU;CACnC,GAAG,CAAC,YAAY,mBAAmB,CAAC;CAEpC,MAAM,qBAAqB,kBAAkB;EAC3C,oBAAoB,SAAS,CAAC,CAAC,iBAAiB,IAAI;CACtD,GAAG,CAAC,mBAAmB,CAAC;CAExB,YAAY,qBAAqB,kBAAkB;CACnD,YAAY,6BAA6B,kBAAkB;AAC7D;AAEA,MAAM,oCAAoC,YAKtC,EACE,YACA,0BACA,4BACA,8BACA,UACA,GAAG,QAEL,iBACG;CACH,MAAM,gBAAgB,4BAA4C;EAChE;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,kBAAkB,mBAAmB;CAC3C,MAAM,qBAAqB,sBAAsB;CAGjD,MAAM,mBAFsB,uBACS,CAAC,CAAC,SAAS,CAAC,CAAC,eACV;CACxC,iBAAiB,gBAAgB;CACjC,oBAAoB,gBAAgB;CACpC,MAAM,MAAM,gBACV,cACA,eACA,iBACA,kBACF;CAEA,OACE,oBAAC,UAAU,KAAX;EAAe,GAAI;EAAW;EAC3B;CACY,CAAA;AAEnB,CACF;AAEA,kCAAkC,cAChC;;;;;;;;;;;;;;;;;AAkBF,MAAa,0BAA0B,YAGpC,EAAE,YAAY,uBAAuB,GAAG,SAAS,QAAQ;CAC1D,OACE,oBAAC,iCAAD;EACE,SAAS;GAAE;GAAY;EAAsB;YAE7C,oBAAC,mCAAD;GAAmC,GAAI;GAAY;EAAM,CAAA;CAC1B,CAAA;AAErC,CAAC;AAED,wBAAwB,cAAc"}
|
|
1
|
+
{"version":3,"file":"ThreadViewport.js","names":["c","_c","useComposedRefs","Primitive","ComponentRef","forwardRef","ComponentPropsWithoutRef","useCallback","useLayoutEffect","useMemo","useAuiEvent","useAuiState","useManagedRef","useThreadViewportAutoScroll","ThreadPrimitiveViewportProvider","useSizeHandle","useThreadViewport","useThreadViewportStore","useTopAnchorReserve","getActiveTopAnchorAnchorId","getActiveTopAnchorTargetId","ThreadPrimitiveViewport","Element","div","Props","autoScroll","turnAnchor","topAnchorMessageClamp","tallerThan","visibleHeight","scrollToBottomOnRunStart","scrollToBottomOnInitialize","scrollToBottomOnThreadSwitch","useViewportSizeRef","register","_temp","getHeight","_temp2","useViewportElementRef","registerViewportElement","_temp3","useTopAnchorTurn","enabled","$","threadViewportStore","t0","s","thread","activeAnchorId","t1","s_0","activeTargetId","t2","bb0","t3","anchorId","targetId","activeTurn","t4","state","getState","current","topAnchorTurn","setTopAnchorTurn","t5","clearTopAnchorTurn","ThreadPrimitiveViewportScrollable","forwardedRef","children","rest","autoScrollRef","viewportSizeRef","viewportElementRef","topAnchorEnabled","ref","displayName","props","registerViewport","el","clientHeight"],"sources":["../../../src/primitives/thread/ThreadViewport.tsx"],"sourcesContent":["\"use client\";\n\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n} from \"react\";\nimport { useAuiEvent, useAuiState } from \"@assistant-ui/store\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\nimport { useThreadViewportAutoScroll } from \"./useThreadViewportAutoScroll\";\nimport { ThreadPrimitiveViewportProvider } from \"../../context/providers/ThreadViewportProvider\";\nimport { useSizeHandle } from \"../../utils/hooks/useSizeHandle\";\nimport {\n useThreadViewport,\n useThreadViewportStore,\n} from \"../../context/react/ThreadViewportContext\";\nimport { useTopAnchorReserve } from \"./topAnchor/useTopAnchorReserve\";\nimport {\n getActiveTopAnchorAnchorId,\n getActiveTopAnchorTargetId,\n} from \"./topAnchor/topAnchorTurn\";\n\nexport namespace ThreadPrimitiveViewport {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.div> & {\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 * Controls scroll anchoring behavior for new messages.\n * - \"bottom\" (default): Messages anchor at the bottom, classic chat behavior.\n * - \"top\": New user messages anchor at the top of the viewport for a focused reading experience.\n */\n turnAnchor?: \"top\" | \"bottom\" | undefined;\n\n /**\n * Clamps tall user messages so the assistant response stays in view.\n *\n * @default { tallerThan: \"10em\", visibleHeight: \"6em\" }\n */\n topAnchorMessageClamp?: {\n /**\n * Clamp messages taller than this. Supports `px`, `em`, and `rem`.\n *\n * @default \"10em\"\n */\n tallerThan?: string;\n /**\n * Visible portion of clamped messages. Supports `px`, `em`, and `rem`.\n *\n * @default \"6em\"\n */\n visibleHeight?: string;\n };\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 thread history is first loaded.\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\nconst useViewportSizeRef = () => {\n const register = useThreadViewport((s) => s.registerViewport);\n const getHeight = useCallback((el: HTMLElement) => el.clientHeight, []);\n return useSizeHandle(register, getHeight);\n};\n\nconst useViewportElementRef = () => {\n const registerViewportElement = useThreadViewport(\n (s) => s.registerViewportElement,\n );\n\n return useManagedRef(registerViewportElement);\n};\n\nconst useTopAnchorTurn = (enabled: boolean) => {\n const threadViewportStore = useThreadViewportStore();\n const activeAnchorId = useAuiState((s) => {\n if (!enabled) return undefined;\n return getActiveTopAnchorAnchorId(s.thread);\n });\n const activeTargetId = useAuiState((s) => {\n if (!enabled) return undefined;\n return getActiveTopAnchorTargetId(s.thread);\n });\n const activeTurn = useMemo(() => {\n if (!activeAnchorId || !activeTargetId) return null;\n return { anchorId: activeAnchorId, targetId: activeTargetId };\n }, [activeAnchorId, activeTargetId]);\n\n useLayoutEffect(() => {\n if (!activeTurn) return;\n\n const state = threadViewportStore.getState();\n const current = state.topAnchorTurn;\n if (\n current?.anchorId === activeTurn.anchorId &&\n current.targetId === activeTurn.targetId\n ) {\n return;\n }\n\n state.setTopAnchorTurn(activeTurn);\n }, [activeTurn, threadViewportStore]);\n\n const clearTopAnchorTurn = useCallback(() => {\n threadViewportStore.getState().setTopAnchorTurn(null);\n }, [threadViewportStore]);\n\n useAuiEvent(\"thread.initialize\", clearTopAnchorTurn);\n useAuiEvent(\"threadListItem.switchedTo\", clearTopAnchorTurn);\n};\n\nconst ThreadPrimitiveViewportScrollable = forwardRef<\n ThreadPrimitiveViewport.Element,\n ThreadPrimitiveViewport.Props\n>(\n (\n {\n autoScroll,\n scrollToBottomOnRunStart,\n scrollToBottomOnInitialize,\n scrollToBottomOnThreadSwitch,\n children,\n ...rest\n },\n forwardedRef,\n ) => {\n const autoScrollRef = useThreadViewportAutoScroll<HTMLDivElement>({\n autoScroll,\n scrollToBottomOnRunStart,\n scrollToBottomOnInitialize,\n scrollToBottomOnThreadSwitch,\n });\n const viewportSizeRef = useViewportSizeRef();\n const viewportElementRef = useViewportElementRef();\n const threadViewportStore = useThreadViewportStore();\n const turnAnchor = threadViewportStore.getState().turnAnchor;\n const topAnchorEnabled = turnAnchor === \"top\";\n useTopAnchorTurn(topAnchorEnabled);\n useTopAnchorReserve(topAnchorEnabled);\n const ref = useComposedRefs(\n forwardedRef,\n autoScrollRef,\n viewportSizeRef,\n viewportElementRef,\n );\n\n return (\n <Primitive.div {...rest} ref={ref}>\n {children}\n </Primitive.div>\n );\n },\n);\n\nThreadPrimitiveViewportScrollable.displayName =\n \"ThreadPrimitive.ViewportScrollable\";\n\n/**\n * A scrollable viewport container for thread messages.\n *\n * This component provides a scrollable area for displaying thread messages with\n * automatic scrolling capabilities. It manages the viewport state and provides\n * context for child components to access viewport-related functionality.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Viewport turnAnchor=\"top\">\n * <ThreadPrimitive.Messages>\n * {() => <MyMessage />}\n * </ThreadPrimitive.Messages>\n * </ThreadPrimitive.Viewport>\n * ```\n */\nexport const ThreadPrimitiveViewport = forwardRef<\n ThreadPrimitiveViewport.Element,\n ThreadPrimitiveViewport.Props\n>(({ turnAnchor, topAnchorMessageClamp, ...props }, ref) => {\n return (\n <ThreadPrimitiveViewportProvider\n options={{ turnAnchor, topAnchorMessageClamp }}\n >\n <ThreadPrimitiveViewportScrollable {...props} ref={ref} />\n </ThreadPrimitiveViewportProvider>\n );\n});\n\nThreadPrimitiveViewport.displayName = \"ThreadPrimitive.Viewport\";\n"],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import { useThreadViewport } from "../../context/react/ThreadViewportContext.js";
|
|
3
3
|
import { Primitive } from "../../utils/Primitive.js";
|
|
4
4
|
import { useSizeHandle } from "../../utils/hooks/useSizeHandle.js";
|
|
5
|
-
import {
|
|
5
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
6
|
+
import { forwardRef } from "@assistant-ui/tap/react-shim";
|
|
6
7
|
import { jsx } from "react/jsx-runtime";
|
|
7
8
|
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
8
9
|
//#region src/primitives/thread/ThreadViewportFooter.tsx
|
|
@@ -31,16 +32,28 @@ import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
|
31
32
|
* ```
|
|
32
33
|
*/
|
|
33
34
|
const ThreadPrimitiveViewportFooter = forwardRef((props, forwardedRef) => {
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
const $ = c(3);
|
|
36
|
+
const ref = useComposedRefs(forwardedRef, useSizeHandle(useThreadViewport(_temp), _temp2));
|
|
37
|
+
let t0;
|
|
38
|
+
if ($[0] !== props || $[1] !== ref) {
|
|
39
|
+
t0 = /* @__PURE__ */ jsx(Primitive.div, {
|
|
40
|
+
...props,
|
|
41
|
+
ref
|
|
42
|
+
});
|
|
43
|
+
$[0] = props;
|
|
44
|
+
$[1] = ref;
|
|
45
|
+
$[2] = t0;
|
|
46
|
+
} else t0 = $[2];
|
|
47
|
+
return t0;
|
|
42
48
|
});
|
|
43
49
|
ThreadPrimitiveViewportFooter.displayName = "ThreadPrimitive.ViewportFooter";
|
|
50
|
+
function _temp(s) {
|
|
51
|
+
return s.registerContentInset;
|
|
52
|
+
}
|
|
53
|
+
function _temp2(el) {
|
|
54
|
+
const marginTop = parseFloat(getComputedStyle(el).marginTop) || 0;
|
|
55
|
+
return el.offsetHeight + marginTop;
|
|
56
|
+
}
|
|
44
57
|
//#endregion
|
|
45
58
|
export { ThreadPrimitiveViewportFooter };
|
|
46
59
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadViewportFooter.js","names":[],"sources":["../../../src/primitives/thread/ThreadViewportFooter.tsx"],"sourcesContent":["\"use client\";\n\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n useCallback,\n} from \"react\";\nimport { useSizeHandle } from \"../../utils/hooks/useSizeHandle\";\nimport { useThreadViewport } from \"../../context/react/ThreadViewportContext\";\n\nexport namespace ThreadPrimitiveViewportFooter {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.div>;\n}\n\n/**\n * A footer container that measures its height for scroll calculations.\n *\n * This component measures its height and provides it to the viewport context\n * so the auto-scroll system can account for any sticky footer overlapping the\n * message list.\n *\n * Multiple ViewportFooter components can be used - their heights are summed.\n *\n * Typically used with `className=\"sticky bottom-0\"` to keep the footer\n * visible at the bottom of the viewport while scrolling.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Viewport>\n * <ThreadPrimitive.Messages>\n * {() => <MyMessage />}\n * </ThreadPrimitive.Messages>\n * <ThreadPrimitive.ViewportFooter className=\"sticky bottom-0\">\n * <Composer />\n * </ThreadPrimitive.ViewportFooter>\n * </ThreadPrimitive.Viewport>\n * ```\n */\nexport const ThreadPrimitiveViewportFooter = forwardRef<\n ThreadPrimitiveViewportFooter.Element,\n ThreadPrimitiveViewportFooter.Props\n>((props, forwardedRef) => {\n const register = useThreadViewport((s) => s.registerContentInset);\n const getHeight = useCallback((el: HTMLElement) => {\n const marginTop = parseFloat(getComputedStyle(el).marginTop) || 0;\n return el.offsetHeight + marginTop;\n }, []);\n\n const resizeRef = useSizeHandle(register, getHeight);\n\n const ref = useComposedRefs(forwardedRef, resizeRef);\n\n return <Primitive.div {...props} ref={ref} />;\n});\n\nThreadPrimitiveViewportFooter.displayName = \"ThreadPrimitive.ViewportFooter\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ThreadViewportFooter.js","names":["c","_c","useComposedRefs","Primitive","ComponentRef","forwardRef","ComponentPropsWithoutRef","useCallback","useSizeHandle","useThreadViewport","ThreadPrimitiveViewportFooter","Element","div","Props","props","forwardedRef","$","register","_temp","getHeight","_temp2","resizeRef","ref","t0","displayName","s","registerContentInset","el","marginTop","parseFloat","getComputedStyle","offsetHeight"],"sources":["../../../src/primitives/thread/ThreadViewportFooter.tsx"],"sourcesContent":["\"use client\";\n\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n useCallback,\n} from \"react\";\nimport { useSizeHandle } from \"../../utils/hooks/useSizeHandle\";\nimport { useThreadViewport } from \"../../context/react/ThreadViewportContext\";\n\nexport namespace ThreadPrimitiveViewportFooter {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.div>;\n}\n\n/**\n * A footer container that measures its height for scroll calculations.\n *\n * This component measures its height and provides it to the viewport context\n * so the auto-scroll system can account for any sticky footer overlapping the\n * message list.\n *\n * Multiple ViewportFooter components can be used - their heights are summed.\n *\n * Typically used with `className=\"sticky bottom-0\"` to keep the footer\n * visible at the bottom of the viewport while scrolling.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Viewport>\n * <ThreadPrimitive.Messages>\n * {() => <MyMessage />}\n * </ThreadPrimitive.Messages>\n * <ThreadPrimitive.ViewportFooter className=\"sticky bottom-0\">\n * <Composer />\n * </ThreadPrimitive.ViewportFooter>\n * </ThreadPrimitive.Viewport>\n * ```\n */\nexport const ThreadPrimitiveViewportFooter = forwardRef<\n ThreadPrimitiveViewportFooter.Element,\n ThreadPrimitiveViewportFooter.Props\n>((props, forwardedRef) => {\n const register = useThreadViewport((s) => s.registerContentInset);\n const getHeight = useCallback((el: HTMLElement) => {\n const marginTop = parseFloat(getComputedStyle(el).marginTop) || 0;\n return el.offsetHeight + marginTop;\n }, []);\n\n const resizeRef = useSizeHandle(register, getHeight);\n\n const ref = useComposedRefs(forwardedRef, resizeRef);\n\n return <Primitive.div {...props} ref={ref} />;\n});\n\nThreadPrimitiveViewportFooter.displayName = \"ThreadPrimitive.ViewportFooter\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAaU,gCAAgCL,YAG3CS,OAAAC,iBAAA;CAAA,MAAAC,IAAAf,EAAA,CAAA;CASA,MAAAqB,MAAYpB,gBAAgBa,cAFVP,cANDC,kBAAkBS,KAMHD,GAAUE,MAEAE,CAAS;CAAE,IAAAE;CAAA,IAAAP,EAAA,OAAAF,SAAAE,EAAA,OAAAM,KAAA;EAE9CC,KAAA,oBAAA,UAAA,KAAA;GAAA,GAAmBT;GAAYQ;EAAG,CAAA;EAAIN,EAAA,KAAAF;EAAAE,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAAtCO;AAAsC,CAC9C;AAEDb,8BAA8Bc,cAAc;AAd1C,SAAAN,MAAAO,GAAA;CAAA,OAC0CA,EAACC;AAAqB;AADhE,SAAAN,OAAAO,IAAA;CAGE,MAAAC,YAAkBC,WAAWC,iBAAiBH,EAAE,CAAC,CAAAC,SAAe,KAA9C;CAAgD,OAC3DD,GAAEI,eAAgBH;AAAS"}
|