@assistant-ui/react 0.14.18 → 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 +3 -2
- package/dist/client/ExternalThread.d.ts.map +1 -1
- package/dist/client/ExternalThread.js +721 -256
- package/dist/client/ExternalThread.js.map +1 -1
- package/dist/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/client/InMemoryThreadList.js +292 -108
- package/dist/client/InMemoryThreadList.js.map +1 -1
- package/dist/client/SingleThreadList.js +139 -53
- 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 +4 -2
- package/dist/index.js +3 -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.js +6 -6
- package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
- package/dist/mcp-apps/McpAppsRemoteHost.js +3 -3
- 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 +26 -26
- 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.js +124 -52
- 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.js +28 -14
- package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -1
- package/dist/primitives/composer/trigger/triggerKeyboardResource.js +115 -58
- package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -1
- package/dist/primitives/composer/trigger/triggerNavigationResource.js +202 -70
- package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -1
- package/dist/primitives/composer/trigger/triggerSelectionResource.js +49 -13
- 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.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 -43
- 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.js +16 -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.js.map +1 -1
- 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.js +5 -5
- 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 +81 -52
- package/src/client/InMemoryThreadList.ts +12 -14
- package/src/hooks/useToolCallElapsed.ts +52 -0
- package/src/index.ts +11 -0
- package/src/primitives/composer/trigger/TriggerPopover.tsx +4 -5
- package/src/tests/toolCallTiming.test.tsx +221 -0
- package/src/unstable/useMessageStallDetection.ts +91 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Primitive } from "../../utils/Primitive.js";
|
|
3
3
|
import { useComposerSend } from "./ComposerSend.js";
|
|
4
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
4
5
|
import { forwardRef } from "@assistant-ui/tap/react-shim";
|
|
5
6
|
import { jsx } from "react/jsx-runtime";
|
|
6
7
|
import { composeEventHandlers } from "@radix-ui/primitive";
|
|
@@ -20,18 +21,51 @@ import { composeEventHandlers } from "@radix-ui/primitive";
|
|
|
20
21
|
* </ComposerPrimitive.Root>
|
|
21
22
|
* ```
|
|
22
23
|
*/
|
|
23
|
-
const ComposerPrimitiveRoot = forwardRef((
|
|
24
|
+
const ComposerPrimitiveRoot = forwardRef((t0, forwardedRef) => {
|
|
25
|
+
const $ = c(12);
|
|
26
|
+
let onSubmit;
|
|
27
|
+
let rest;
|
|
28
|
+
if ($[0] !== t0) {
|
|
29
|
+
({onSubmit, ...rest} = t0);
|
|
30
|
+
$[0] = t0;
|
|
31
|
+
$[1] = onSubmit;
|
|
32
|
+
$[2] = rest;
|
|
33
|
+
} else {
|
|
34
|
+
onSubmit = $[1];
|
|
35
|
+
rest = $[2];
|
|
36
|
+
}
|
|
24
37
|
const send = useComposerSend();
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
38
|
+
let t1;
|
|
39
|
+
if ($[3] !== send) {
|
|
40
|
+
t1 = (e) => {
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
if (!send) return;
|
|
43
|
+
send();
|
|
44
|
+
};
|
|
45
|
+
$[3] = send;
|
|
46
|
+
$[4] = t1;
|
|
47
|
+
} else t1 = $[4];
|
|
48
|
+
const handleSubmit = t1;
|
|
49
|
+
let t2;
|
|
50
|
+
if ($[5] !== handleSubmit || $[6] !== onSubmit) {
|
|
51
|
+
t2 = composeEventHandlers(onSubmit, handleSubmit);
|
|
52
|
+
$[5] = handleSubmit;
|
|
53
|
+
$[6] = onSubmit;
|
|
54
|
+
$[7] = t2;
|
|
55
|
+
} else t2 = $[7];
|
|
56
|
+
let t3;
|
|
57
|
+
if ($[8] !== forwardedRef || $[9] !== rest || $[10] !== t2) {
|
|
58
|
+
t3 = /* @__PURE__ */ jsx(Primitive.form, {
|
|
59
|
+
...rest,
|
|
60
|
+
ref: forwardedRef,
|
|
61
|
+
onSubmit: t2
|
|
62
|
+
});
|
|
63
|
+
$[8] = forwardedRef;
|
|
64
|
+
$[9] = rest;
|
|
65
|
+
$[10] = t2;
|
|
66
|
+
$[11] = t3;
|
|
67
|
+
} else t3 = $[11];
|
|
68
|
+
return t3;
|
|
35
69
|
});
|
|
36
70
|
ComposerPrimitiveRoot.displayName = "ComposerPrimitive.Root";
|
|
37
71
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerRoot.js","names":[],"sources":["../../../src/primitives/composer/ComposerRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n type FormEvent,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from \"react\";\nimport { useComposerSend } from \"./ComposerSend\";\n\nexport namespace ComposerPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.form>;\n /**\n * Props for the ComposerPrimitive.Root component.\n * Accepts all standard form element props.\n */\n export type Props = ComponentPropsWithoutRef<typeof Primitive.form>;\n}\n\n/**\n * The root form container for message composition.\n *\n * This component provides a form wrapper that handles message submission when the form\n * is submitted (e.g., via Enter key or submit button). It automatically prevents the\n * default form submission and triggers the composer's send functionality.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Root>\n * <ComposerPrimitive.Input placeholder=\"Type your message...\" />\n * <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>\n * </ComposerPrimitive.Root>\n * ```\n */\nexport const ComposerPrimitiveRoot = forwardRef<\n ComposerPrimitiveRoot.Element,\n ComposerPrimitiveRoot.Props\n>(({ onSubmit, ...rest }, forwardedRef) => {\n const send = useComposerSend();\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n\n if (!send) return;\n send();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={forwardedRef}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n});\n\nComposerPrimitiveRoot.displayName = \"ComposerPrimitive.Root\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ComposerRoot.js","names":["c","_c","composeEventHandlers","Primitive","ComponentRef","FormEvent","forwardRef","ComponentPropsWithoutRef","useComposerSend","ComposerPrimitiveRoot","Element","form","Props","t0","forwardedRef","$","onSubmit","rest","send","t1","e","preventDefault","handleSubmit","t2","t3","displayName"],"sources":["../../../src/primitives/composer/ComposerRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n type FormEvent,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from \"react\";\nimport { useComposerSend } from \"./ComposerSend\";\n\nexport namespace ComposerPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.form>;\n /**\n * Props for the ComposerPrimitive.Root component.\n * Accepts all standard form element props.\n */\n export type Props = ComponentPropsWithoutRef<typeof Primitive.form>;\n}\n\n/**\n * The root form container for message composition.\n *\n * This component provides a form wrapper that handles message submission when the form\n * is submitted (e.g., via Enter key or submit button). It automatically prevents the\n * default form submission and triggers the composer's send functionality.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Root>\n * <ComposerPrimitive.Input placeholder=\"Type your message...\" />\n * <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>\n * </ComposerPrimitive.Root>\n * ```\n */\nexport const ComposerPrimitiveRoot = forwardRef<\n ComposerPrimitiveRoot.Element,\n ComposerPrimitiveRoot.Props\n>(({ onSubmit, ...rest }, forwardedRef) => {\n const send = useComposerSend();\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n\n if (!send) return;\n send();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={forwardedRef}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n});\n\nComposerPrimitiveRoot.displayName = \"ComposerPrimitive.Root\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoCA,MAAaS,wBAAwBH,YAGnCO,IAAAC,iBAAA;CAAA,MAAAC,IAAAd,EAAA,EAAA;CAAA,IAAAe;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAF,IAAA;EAAC,CAAA,CAAAG,aAAAC,QAAAJ;EAAqBE,EAAA,KAAAF;EAAAE,EAAA,KAAAC;EAAAD,EAAA,KAAAE;CAAA,OAAA;EAAAD,WAAAD,EAAA;EAAAE,OAAAF,EAAA;CAAA;CACtB,MAAAG,OAAaV,gBAAgB;CAAE,IAAAW;CAAA,IAAAJ,EAAA,OAAAG,MAAA;EAEVC,MAAAC,MAAA;GACnBA,EAACC,eAAgB;GAEjB,IAAI,CAACH,MAAI;GACTA,KAAK;EAAC;EACPH,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CALD,MAAAO,eAAqBH;CAKnB,IAAAI;CAAA,IAAAR,EAAA,OAAAO,gBAAAP,EAAA,OAAAC,UAAA;EAMYO,KAAArB,qBAAqBc,UAAUM,YAAY;EAACP,EAAA,KAAAO;EAAAP,EAAA,KAAAC;EAAAD,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAD,gBAAAC,EAAA,OAAAE,QAAAF,EAAA,QAAAQ,IAAA;EAHxDC,KAAA,oBAAA,UAAA,MAAA;GAAA,GACMP;GACCH,KAAAA;GACK,UAAAS;EAA4C,CAAA;EACtDR,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,MAAAQ;EAAAR,EAAA,MAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OAJFS;AAIE,CAEL;AAEDf,sBAAsBgB,cAAc"}
|
|
@@ -1,11 +1,18 @@
|
|
|
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 { useComposerSend as useComposerSend$1 } from "@assistant-ui/core/react";
|
|
4
|
-
import { useCallback } from "@assistant-ui/tap/react-shim";
|
|
5
5
|
//#region src/primitives/composer/ComposerSend.ts
|
|
6
6
|
const useComposerSend = () => {
|
|
7
|
+
const $ = c(2);
|
|
7
8
|
const { disabled, send } = useComposerSend$1();
|
|
8
|
-
|
|
9
|
+
let t0;
|
|
10
|
+
if ($[0] !== send) {
|
|
11
|
+
t0 = () => send();
|
|
12
|
+
$[0] = send;
|
|
13
|
+
$[1] = t0;
|
|
14
|
+
} else t0 = $[1];
|
|
15
|
+
const callback = t0;
|
|
9
16
|
if (disabled) return null;
|
|
10
17
|
return callback;
|
|
11
18
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerSend.js","names":["useComposerSendBehavior"],"sources":["../../../src/primitives/composer/ComposerSend.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback } from \"react\";\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useComposerSend as useComposerSendBehavior } from \"@assistant-ui/core/react\";\n\nexport const useComposerSend = () => {\n const { disabled, send } = useComposerSendBehavior();\n const callback = useCallback(() => send(), [send]);\n if (disabled) return null;\n return callback;\n};\n\nexport namespace ComposerPrimitiveSend {\n export type Element = ActionButtonElement;\n /**\n * Props for the ComposerPrimitive.Send component.\n * Inherits all button element props and action button functionality.\n */\n export type Props = ActionButtonProps<typeof useComposerSend>;\n}\n\n/**\n * A button component that sends the current message in the composer.\n *\n * This component automatically handles the send functionality and is disabled\n * when sending is not available (e.g., when the thread is running, the composer\n * is empty, or not in editing mode).\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Send>\n * Send Message\n * </ComposerPrimitive.Send>\n * ```\n */\nexport const ComposerPrimitiveSend = createActionButton(\n \"ComposerPrimitive.Send\",\n useComposerSend,\n);\n"],"mappings":";;;;;AAUA,
|
|
1
|
+
{"version":3,"file":"ComposerSend.js","names":["c","_c","useCallback","ActionButtonElement","ActionButtonProps","createActionButton","useComposerSend","useComposerSendBehavior","$","disabled","send","t0","callback","ComposerPrimitiveSend","Element","Props"],"sources":["../../../src/primitives/composer/ComposerSend.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback } from \"react\";\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useComposerSend as useComposerSendBehavior } from \"@assistant-ui/core/react\";\n\nexport const useComposerSend = () => {\n const { disabled, send } = useComposerSendBehavior();\n const callback = useCallback(() => send(), [send]);\n if (disabled) return null;\n return callback;\n};\n\nexport namespace ComposerPrimitiveSend {\n export type Element = ActionButtonElement;\n /**\n * Props for the ComposerPrimitive.Send component.\n * Inherits all button element props and action button functionality.\n */\n export type Props = ActionButtonProps<typeof useComposerSend>;\n}\n\n/**\n * A button component that sends the current message in the composer.\n *\n * This component automatically handles the send functionality and is disabled\n * when sending is not available (e.g., when the thread is running, the composer\n * is empty, or not in editing mode).\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Send>\n * Send Message\n * </ComposerPrimitive.Send>\n * ```\n */\nexport const ComposerPrimitiveSend = createActionButton(\n \"ComposerPrimitive.Send\",\n useComposerSend,\n);\n"],"mappings":";;;;;AAUA,MAAaM,wBAAkB;CAAA,MAAAE,IAAAP,EAAA,CAAA;CAC7B,MAAA,EAAAQ,UAAAC,SAA2BH,kBAAwB;CAAE,IAAAI;CAAA,IAAAH,EAAA,OAAAE,MAAA;EACxBC,WAAMD,KAAK;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAAzC,MAAAI,WAAiBD;CACjB,IAAIF,UAAQ,OAAS;CAAK,OACnBG;AAAQ;;;;;;;;;;;;;;;AA0BjB,MAAaC,wBAAwBR,mBACnC,0BACAC,eACF"}
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { createActionButton } from "../../utils/createActionButton.js";
|
|
3
3
|
import { useAui, useAuiState } from "@assistant-ui/store";
|
|
4
|
-
import {
|
|
4
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
5
5
|
//#region src/primitives/composer/ComposerStopDictation.ts
|
|
6
6
|
const useComposerStopDictation = () => {
|
|
7
|
+
const $ = c(2);
|
|
7
8
|
const aui = useAui();
|
|
8
|
-
const isDictating = useAuiState(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const isDictating = useAuiState(_temp);
|
|
10
|
+
let t0;
|
|
11
|
+
if ($[0] !== aui) {
|
|
12
|
+
t0 = () => {
|
|
13
|
+
aui.composer().stopDictation();
|
|
14
|
+
};
|
|
15
|
+
$[0] = aui;
|
|
16
|
+
$[1] = t0;
|
|
17
|
+
} else t0 = $[1];
|
|
18
|
+
const callback = t0;
|
|
12
19
|
if (!isDictating) return null;
|
|
13
20
|
return callback;
|
|
14
21
|
};
|
|
@@ -25,6 +32,9 @@ const useComposerStopDictation = () => {
|
|
|
25
32
|
* ```
|
|
26
33
|
*/
|
|
27
34
|
const ComposerPrimitiveStopDictation = createActionButton("ComposerPrimitive.StopDictation", useComposerStopDictation);
|
|
35
|
+
function _temp(s) {
|
|
36
|
+
return s.composer.dictation != null;
|
|
37
|
+
}
|
|
28
38
|
//#endregion
|
|
29
39
|
export { ComposerPrimitiveStopDictation };
|
|
30
40
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerStopDictation.js","names":[],"sources":["../../../src/primitives/composer/ComposerStopDictation.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type {\n ActionButtonElement,\n ActionButtonProps,\n} from \"../../utils/createActionButton\";\nimport { createActionButton } from \"../../utils/createActionButton\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\nconst useComposerStopDictation = () => {\n const aui = useAui();\n const isDictating = useAuiState((s) => s.composer.dictation != null);\n\n const callback = useCallback(() => {\n aui.composer().stopDictation();\n }, [aui]);\n\n if (!isDictating) return null;\n return callback;\n};\n\nexport namespace ComposerPrimitiveStopDictation {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useComposerStopDictation>;\n}\n\n/**\n * A button that stops the current dictation session.\n *\n * Only rendered when dictation is active.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.StopDictation>\n * <StopIcon />\n * </ComposerPrimitive.StopDictation>\n * ```\n */\nexport const ComposerPrimitiveStopDictation = createActionButton(\n \"ComposerPrimitive.StopDictation\",\n useComposerStopDictation,\n);\n"],"mappings":";;;;;AAWA,
|
|
1
|
+
{"version":3,"file":"ComposerStopDictation.js","names":["c","_c","useCallback","useAui","ActionButtonElement","ActionButtonProps","createActionButton","useAuiState","useComposerStopDictation","$","aui","isDictating","_temp","t0","composer","stopDictation","callback","ComposerPrimitiveStopDictation","Element","Props","s","dictation"],"sources":["../../../src/primitives/composer/ComposerStopDictation.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type {\n ActionButtonElement,\n ActionButtonProps,\n} from \"../../utils/createActionButton\";\nimport { createActionButton } from \"../../utils/createActionButton\";\nimport { useAuiState } from \"@assistant-ui/store\";\n\nconst useComposerStopDictation = () => {\n const aui = useAui();\n const isDictating = useAuiState((s) => s.composer.dictation != null);\n\n const callback = useCallback(() => {\n aui.composer().stopDictation();\n }, [aui]);\n\n if (!isDictating) return null;\n return callback;\n};\n\nexport namespace ComposerPrimitiveStopDictation {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useComposerStopDictation>;\n}\n\n/**\n * A button that stops the current dictation session.\n *\n * Only rendered when dictation is active.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.StopDictation>\n * <StopIcon />\n * </ComposerPrimitive.StopDictation>\n * ```\n */\nexport const ComposerPrimitiveStopDictation = createActionButton(\n \"ComposerPrimitive.StopDictation\",\n useComposerStopDictation,\n);\n"],"mappings":";;;;;AAWA,MAAMQ,iCAA2B;CAAA,MAAAC,IAAAR,EAAA,CAAA;CAC/B,MAAAS,MAAYP,OAAO;CACnB,MAAAQ,cAAoBJ,YAAYK,KAAmC;CAAE,IAAAC;CAAA,IAAAJ,EAAA,OAAAC,KAAA;EAExCG,WAAA;GAC3BH,IAAGI,SAAU,CAAC,CAAAC,cAAe;EAAC;EAC/BN,EAAA,KAAAC;EAAAD,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAFD,MAAAO,WAAiBH;CAIjB,IAAI,CAACF,aAAW,OAAS;CAAK,OACvBK;AAAQ;;;;;;;;;;;;;AAoBjB,MAAaC,iCAAiCX,mBAC5C,mCACAE,wBACF;AAhCiC,SAAAI,MAAAQ,GAAA;CAAA,OAEQA,EAACN,SAASO,aAAc;AAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerPopover.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopover.tsx"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"TriggerPopover.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopover.tsx"],"mappings":";;;;;;;cAkCa,6BAAA,QAA6B,4BAOzC;AAAA,cAEY,qCAAA,QAAqC,4BAAA;AATlD;AAAA,KAaY,2BAAA;EACV,QAAA,CAAS,QAAA,EAAU,eAAe;AAAA;AAPnC;AAAA,cAcY,8BAAA,QAA8B,2BAO1C;AAAA,kBAEgB,+BAAA;EAAA,KACH,OAAA,GAAU,YAAA,QAAoB,SAAA,CAAU,GAAA;EAAA,KACxC,KAAA,GAAQ,IAAA,CAClB,wBAAA,QAAgC,SAAA,CAAU,GAAA;IAxBI,qIA4BrC,IAAA,UAxB0B;IAAA,SA0B1B,OAAA,GAAU,uBAAA;EAAA;AAAA;;;;AAzBa;AAOpC;;;;AAOC;AAED;;;;;;;;;;;;;;;;;;cAwCa,+BAAA,kBAA+B,yBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,iBAAA,eAAA,CAAA,cAAA,oBAAA,cAAA,CAAA,cAAA;;;;;EA/BE,mJA+BjC;EAAA,mBA/BU,uBAAA;AAAA"}
|
|
@@ -4,7 +4,8 @@ import { useComposerInputPluginRegistryOptional } from "../ComposerInputPluginCo
|
|
|
4
4
|
import { useTriggerPopoverAriaPublish, useTriggerPopoverRootContext } from "./TriggerPopoverRootContext.js";
|
|
5
5
|
import { TriggerPopoverResource } from "./TriggerPopoverResource.js";
|
|
6
6
|
import { useAui, useAuiState } from "@assistant-ui/store";
|
|
7
|
-
import {
|
|
7
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
8
|
+
import { createContext, forwardRef, useContext, useEffect, useEffectEvent, useId, useRef, useState } from "@assistant-ui/tap/react-shim";
|
|
8
9
|
import { jsx } from "react/jsx-runtime";
|
|
9
10
|
import { useResource } from "@assistant-ui/tap";
|
|
10
11
|
//#region src/primitives/composer/trigger/TriggerPopover.tsx
|
|
@@ -14,7 +15,9 @@ const useTriggerPopoverScopeContext = () => {
|
|
|
14
15
|
if (!ctx) throw new Error("useTriggerPopoverScopeContext must be used within ComposerPrimitive.TriggerPopover");
|
|
15
16
|
return ctx;
|
|
16
17
|
};
|
|
17
|
-
const useTriggerPopoverScopeContextOptional = () =>
|
|
18
|
+
const useTriggerPopoverScopeContextOptional = () => {
|
|
19
|
+
return useContext(TriggerPopoverScopeContext);
|
|
20
|
+
};
|
|
18
21
|
const TriggerBehaviorRegistrationContext = createContext(null);
|
|
19
22
|
/** Obtain the registration handle from the parent `<TriggerPopover>`. */
|
|
20
23
|
const useTriggerBehaviorRegistration = () => {
|
|
@@ -49,97 +52,234 @@ const useTriggerBehaviorRegistration = () => {
|
|
|
49
52
|
* </ComposerPrimitive.Unstable_TriggerPopover>
|
|
50
53
|
* ```
|
|
51
54
|
*/
|
|
52
|
-
const ComposerPrimitiveTriggerPopover = forwardRef((
|
|
55
|
+
const ComposerPrimitiveTriggerPopover = forwardRef((t0, forwardedRef) => {
|
|
56
|
+
const $ = c(59);
|
|
57
|
+
let adapter;
|
|
58
|
+
let ariaLabel;
|
|
59
|
+
let char;
|
|
60
|
+
let children;
|
|
61
|
+
let props;
|
|
62
|
+
if ($[0] !== t0) {
|
|
63
|
+
({char, adapter, "aria-label": ariaLabel, children, ...props} = t0);
|
|
64
|
+
$[0] = t0;
|
|
65
|
+
$[1] = adapter;
|
|
66
|
+
$[2] = ariaLabel;
|
|
67
|
+
$[3] = char;
|
|
68
|
+
$[4] = children;
|
|
69
|
+
$[5] = props;
|
|
70
|
+
} else {
|
|
71
|
+
adapter = $[1];
|
|
72
|
+
ariaLabel = $[2];
|
|
73
|
+
char = $[3];
|
|
74
|
+
children = $[4];
|
|
75
|
+
props = $[5];
|
|
76
|
+
}
|
|
53
77
|
const aui = useAui();
|
|
54
|
-
const text = useAuiState(
|
|
78
|
+
const text = useAuiState(_temp);
|
|
55
79
|
const popoverId = useId();
|
|
56
80
|
const behaviorRef = useRef(null);
|
|
57
81
|
const [behavior, setBehavior] = useState(null);
|
|
58
82
|
const registrationCountRef = useRef(0);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
83
|
+
let t1;
|
|
84
|
+
if ($[6] !== char) {
|
|
85
|
+
t1 = (next) => {
|
|
86
|
+
registrationCountRef.current = registrationCountRef.current + 1;
|
|
87
|
+
if (process.env.NODE_ENV !== "production" && registrationCountRef.current > 1) console.warn(`[assistant-ui] TriggerPopover "${char}" received more than one behavior child. Exactly one <TriggerPopover.Directive> or <TriggerPopover.Action> is allowed per TriggerPopover; the last registration wins.`);
|
|
88
|
+
behaviorRef.current = next;
|
|
89
|
+
setBehavior(next);
|
|
90
|
+
return () => {
|
|
91
|
+
registrationCountRef.current = Math.max(0, registrationCountRef.current - 1);
|
|
92
|
+
if (behaviorRef.current === next) {
|
|
93
|
+
behaviorRef.current = null;
|
|
94
|
+
setBehavior(null);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
70
97
|
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
const
|
|
82
|
-
|
|
98
|
+
$[6] = char;
|
|
99
|
+
$[7] = t1;
|
|
100
|
+
} else t1 = $[7];
|
|
101
|
+
const register = t1;
|
|
102
|
+
let t2;
|
|
103
|
+
if ($[8] !== register) {
|
|
104
|
+
t2 = { register };
|
|
105
|
+
$[8] = register;
|
|
106
|
+
$[9] = t2;
|
|
107
|
+
} else t2 = $[9];
|
|
108
|
+
const registration = t2;
|
|
109
|
+
const t3 = behavior ?? void 0;
|
|
110
|
+
let t4;
|
|
111
|
+
if ($[10] !== adapter || $[11] !== aui || $[12] !== char || $[13] !== popoverId || $[14] !== t3 || $[15] !== text) {
|
|
112
|
+
t4 = TriggerPopoverResource({
|
|
113
|
+
adapter,
|
|
114
|
+
text,
|
|
115
|
+
triggerChar: char,
|
|
116
|
+
behavior: t3,
|
|
117
|
+
aui,
|
|
118
|
+
popoverId
|
|
119
|
+
});
|
|
120
|
+
$[10] = adapter;
|
|
121
|
+
$[11] = aui;
|
|
122
|
+
$[12] = char;
|
|
123
|
+
$[13] = popoverId;
|
|
124
|
+
$[14] = t3;
|
|
125
|
+
$[15] = text;
|
|
126
|
+
$[16] = t4;
|
|
127
|
+
} else t4 = $[16];
|
|
128
|
+
const resource = useResource(t4);
|
|
129
|
+
let t5;
|
|
130
|
+
if ($[17] !== resource) {
|
|
131
|
+
t5 = () => resource;
|
|
132
|
+
$[17] = resource;
|
|
133
|
+
$[18] = t5;
|
|
134
|
+
} else t5 = $[18];
|
|
135
|
+
const getResource = useEffectEvent(t5);
|
|
83
136
|
const root = useTriggerPopoverRootContext();
|
|
84
|
-
|
|
85
|
-
|
|
137
|
+
let t6;
|
|
138
|
+
if ($[19] !== behavior || $[20] !== char || $[21] !== getResource || $[22] !== root) {
|
|
139
|
+
t6 = () => root.register({
|
|
86
140
|
char,
|
|
87
141
|
...behavior ? { behavior } : {},
|
|
88
|
-
resource:
|
|
142
|
+
resource: getResource()
|
|
89
143
|
});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
144
|
+
$[19] = behavior;
|
|
145
|
+
$[20] = char;
|
|
146
|
+
$[21] = getResource;
|
|
147
|
+
$[22] = root;
|
|
148
|
+
$[23] = t6;
|
|
149
|
+
} else t6 = $[23];
|
|
150
|
+
let t7;
|
|
151
|
+
if ($[24] !== behavior || $[25] !== char || $[26] !== root) {
|
|
152
|
+
t7 = [
|
|
153
|
+
root,
|
|
154
|
+
char,
|
|
155
|
+
behavior
|
|
156
|
+
];
|
|
157
|
+
$[24] = behavior;
|
|
158
|
+
$[25] = char;
|
|
159
|
+
$[26] = root;
|
|
160
|
+
$[27] = t7;
|
|
161
|
+
} else t7 = $[27];
|
|
162
|
+
useEffect(t6, t7);
|
|
95
163
|
const pluginRegistry = useComposerInputPluginRegistryOptional();
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
164
|
+
let t8;
|
|
165
|
+
if ($[28] !== getResource || $[29] !== pluginRegistry) {
|
|
166
|
+
t8 = () => {
|
|
167
|
+
if (!pluginRegistry) return;
|
|
168
|
+
return pluginRegistry.register(getResource());
|
|
169
|
+
};
|
|
170
|
+
$[28] = getResource;
|
|
171
|
+
$[29] = pluginRegistry;
|
|
172
|
+
$[30] = t8;
|
|
173
|
+
} else t8 = $[30];
|
|
174
|
+
let t9;
|
|
175
|
+
if ($[31] !== pluginRegistry) {
|
|
176
|
+
t9 = [pluginRegistry];
|
|
177
|
+
$[31] = pluginRegistry;
|
|
178
|
+
$[32] = t9;
|
|
179
|
+
} else t9 = $[32];
|
|
180
|
+
useEffect(t8, t9);
|
|
100
181
|
const open = behavior !== null && resource.open;
|
|
101
182
|
const aria = useTriggerPopoverAriaPublish();
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
183
|
+
let t10;
|
|
184
|
+
let t11;
|
|
185
|
+
if ($[33] !== aria || $[34] !== char || $[35] !== open) {
|
|
186
|
+
t10 = () => {
|
|
187
|
+
if (!open) return;
|
|
188
|
+
return () => {
|
|
189
|
+
aria.setActiveAria(char, null);
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
t11 = [
|
|
193
|
+
aria,
|
|
194
|
+
char,
|
|
195
|
+
open
|
|
196
|
+
];
|
|
197
|
+
$[33] = aria;
|
|
198
|
+
$[34] = char;
|
|
199
|
+
$[35] = open;
|
|
200
|
+
$[36] = t10;
|
|
201
|
+
$[37] = t11;
|
|
202
|
+
} else {
|
|
203
|
+
t10 = $[36];
|
|
204
|
+
t11 = $[37];
|
|
205
|
+
}
|
|
206
|
+
useEffect(t10, t11);
|
|
207
|
+
let t12;
|
|
208
|
+
let t13;
|
|
209
|
+
if ($[38] !== aria || $[39] !== char || $[40] !== open || $[41] !== popoverId || $[42] !== resource.highlightedItemId) {
|
|
210
|
+
t12 = () => {
|
|
211
|
+
if (!open) return;
|
|
212
|
+
aria.setActiveAria(char, {
|
|
213
|
+
popoverId,
|
|
214
|
+
highlightedItemId: resource.highlightedItemId
|
|
215
|
+
});
|
|
106
216
|
};
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
open
|
|
111
|
-
]);
|
|
112
|
-
useEffect(() => {
|
|
113
|
-
if (!open) return;
|
|
114
|
-
aria.setActiveAria(char, {
|
|
217
|
+
t13 = [
|
|
218
|
+
aria,
|
|
219
|
+
char,
|
|
115
220
|
popoverId,
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
aria
|
|
120
|
-
char
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
resource.highlightedItemId
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
221
|
+
open,
|
|
222
|
+
resource.highlightedItemId
|
|
223
|
+
];
|
|
224
|
+
$[38] = aria;
|
|
225
|
+
$[39] = char;
|
|
226
|
+
$[40] = open;
|
|
227
|
+
$[41] = popoverId;
|
|
228
|
+
$[42] = resource.highlightedItemId;
|
|
229
|
+
$[43] = t12;
|
|
230
|
+
$[44] = t13;
|
|
231
|
+
} else {
|
|
232
|
+
t12 = $[43];
|
|
233
|
+
t13 = $[44];
|
|
234
|
+
}
|
|
235
|
+
useEffect(t12, t13);
|
|
236
|
+
let t14;
|
|
237
|
+
if ($[45] !== ariaLabel || $[46] !== children || $[47] !== forwardedRef || $[48] !== open || $[49] !== popoverId || $[50] !== props || $[51] !== resource.highlightedItemId) {
|
|
238
|
+
t14 = open ? /* @__PURE__ */ jsx(Primitive.div, {
|
|
239
|
+
role: "listbox",
|
|
240
|
+
id: popoverId,
|
|
241
|
+
"aria-label": ariaLabel ?? "Suggestions",
|
|
242
|
+
"aria-activedescendant": resource.highlightedItemId,
|
|
243
|
+
"data-state": "open",
|
|
244
|
+
...props,
|
|
245
|
+
ref: forwardedRef,
|
|
246
|
+
children
|
|
247
|
+
}) : children;
|
|
248
|
+
$[45] = ariaLabel;
|
|
249
|
+
$[46] = children;
|
|
250
|
+
$[47] = forwardedRef;
|
|
251
|
+
$[48] = open;
|
|
252
|
+
$[49] = popoverId;
|
|
253
|
+
$[50] = props;
|
|
254
|
+
$[51] = resource.highlightedItemId;
|
|
255
|
+
$[52] = t14;
|
|
256
|
+
} else t14 = $[52];
|
|
257
|
+
let t15;
|
|
258
|
+
if ($[53] !== resource || $[54] !== t14) {
|
|
259
|
+
t15 = /* @__PURE__ */ jsx(TriggerPopoverScopeContext.Provider, {
|
|
128
260
|
value: resource,
|
|
129
|
-
children:
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
261
|
+
children: t14
|
|
262
|
+
});
|
|
263
|
+
$[53] = resource;
|
|
264
|
+
$[54] = t14;
|
|
265
|
+
$[55] = t15;
|
|
266
|
+
} else t15 = $[55];
|
|
267
|
+
let t16;
|
|
268
|
+
if ($[56] !== registration || $[57] !== t15) {
|
|
269
|
+
t16 = /* @__PURE__ */ jsx(TriggerBehaviorRegistrationContext.Provider, {
|
|
270
|
+
value: registration,
|
|
271
|
+
children: t15
|
|
272
|
+
});
|
|
273
|
+
$[56] = registration;
|
|
274
|
+
$[57] = t15;
|
|
275
|
+
$[58] = t16;
|
|
276
|
+
} else t16 = $[58];
|
|
277
|
+
return t16;
|
|
141
278
|
});
|
|
142
279
|
ComposerPrimitiveTriggerPopover.displayName = "ComposerPrimitive.TriggerPopover";
|
|
280
|
+
function _temp(s) {
|
|
281
|
+
return s.composer.text;
|
|
282
|
+
}
|
|
143
283
|
//#endregion
|
|
144
284
|
export { ComposerPrimitiveTriggerPopover, useTriggerBehaviorRegistration, useTriggerPopoverScopeContext, useTriggerPopoverScopeContextOptional };
|
|
145
285
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerPopover.js","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopover.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAui, useAuiState } from \"@assistant-ui/store\";\nimport { useResource } from \"@assistant-ui/tap\";\nimport type { Unstable_TriggerAdapter } from \"@assistant-ui/core\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ComponentRef,\n} from \"react\";\nimport { Primitive } from \"../../../utils/Primitive\";\nimport { useComposerInputPluginRegistryOptional } from \"../ComposerInputPluginContext\";\nimport {\n TriggerPopoverResource,\n type TriggerPopoverResourceOutput,\n} from \"./TriggerPopoverResource\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\nimport {\n useTriggerPopoverAriaPublish,\n useTriggerPopoverRootContext,\n} from \"./TriggerPopoverRootContext\";\n\nconst TriggerPopoverScopeContext =\n createContext<TriggerPopoverResourceOutput | null>(null);\n\nexport const useTriggerPopoverScopeContext = () => {\n const ctx = useContext(TriggerPopoverScopeContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverScopeContext must be used within ComposerPrimitive.TriggerPopover\",\n );\n return ctx;\n};\n\nexport const useTriggerPopoverScopeContextOptional = () =>\n useContext(TriggerPopoverScopeContext);\n\n/** Registration API exposed to behavior sub-primitives. */\nexport type TriggerBehaviorRegistration = {\n register(behavior: TriggerBehavior): () => void;\n};\n\nconst TriggerBehaviorRegistrationContext =\n createContext<TriggerBehaviorRegistration | null>(null);\n\n/** Obtain the registration handle from the parent `<TriggerPopover>`. */\nexport const useTriggerBehaviorRegistration = () => {\n const ctx = useContext(TriggerBehaviorRegistrationContext);\n if (!ctx)\n throw new Error(\n \"TriggerPopover.Directive / TriggerPopover.Action must be rendered inside ComposerPrimitive.TriggerPopover\",\n );\n return ctx;\n};\n\nexport namespace ComposerPrimitiveTriggerPopover {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = Omit<\n ComponentPropsWithoutRef<typeof Primitive.div>,\n \"onSelect\"\n > & {\n /** The character(s) that activate this trigger (e.g. `\"@\"`, `\"/\"`). Also serves as the trigger identity within the root. */\n readonly char: string;\n /** Adapter providing categories and items. */\n readonly adapter?: Unstable_TriggerAdapter | undefined;\n };\n}\n\n/**\n * Declares a trigger and renders its popover container. The popover only\n * renders its DOM (and children) when the trigger character is active in the\n * composer input and a behavior sub-primitive has been registered.\n *\n * A behavior is contributed by rendering exactly one of\n * `<TriggerPopover.Directive>` or `<TriggerPopover.Action>` as a child. Without\n * a behavior the trigger stays closed.\n *\n * Must be placed inside `ComposerPrimitive.Unstable_TriggerPopoverRoot`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopover\n * char=\"@\"\n * adapter={mentionAdapter}\n * >\n * <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />\n * <ComposerPrimitive.Unstable_TriggerPopoverCategories>\n * {(cats) => cats.map(...)}\n * </ComposerPrimitive.Unstable_TriggerPopoverCategories>\n * <ComposerPrimitive.Unstable_TriggerPopoverItems>\n * {(items) => items.map(...)}\n * </ComposerPrimitive.Unstable_TriggerPopoverItems>\n * </ComposerPrimitive.Unstable_TriggerPopover>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopover = forwardRef<\n ComposerPrimitiveTriggerPopover.Element,\n ComposerPrimitiveTriggerPopover.Props\n>(\n (\n { char, adapter, \"aria-label\": ariaLabel, children, ...props },\n forwardedRef,\n ) => {\n const aui = useAui();\n const text = useAuiState((s) => s.composer.text);\n const popoverId = useId();\n\n // Track in state (for resource reactivity) + ref (dev warning on duplicate registrations).\n const behaviorRef = useRef<TriggerBehavior | null>(null);\n const [behavior, setBehavior] = useState<TriggerBehavior | null>(null);\n const registrationCountRef = useRef(0);\n\n const register = useCallback<TriggerBehaviorRegistration[\"register\"]>(\n (next) => {\n registrationCountRef.current += 1;\n if (\n process.env.NODE_ENV !== \"production\" &&\n registrationCountRef.current > 1\n ) {\n console.warn(\n `[assistant-ui] TriggerPopover \"${char}\" received more than one behavior child. Exactly one <TriggerPopover.Directive> or <TriggerPopover.Action> is allowed per TriggerPopover; the last registration wins.`,\n );\n }\n behaviorRef.current = next;\n setBehavior(next);\n return () => {\n registrationCountRef.current = Math.max(\n 0,\n registrationCountRef.current - 1,\n );\n if (behaviorRef.current === next) {\n behaviorRef.current = null;\n setBehavior(null);\n }\n };\n },\n [char],\n );\n\n const registration = useMemo<TriggerBehaviorRegistration>(\n () => ({ register }),\n [register],\n );\n\n const resource = useResource(\n TriggerPopoverResource({\n adapter,\n text,\n triggerChar: char,\n behavior: behavior ?? undefined,\n aui,\n popoverId,\n }),\n );\n\n // Wrapper changes per render, but tap-stable methods inside don't.\n const resourceRef = useRef(resource);\n resourceRef.current = resource;\n\n const root = useTriggerPopoverRootContext();\n useEffect(() => {\n return root.register({\n char,\n ...(behavior ? { behavior } : {}),\n resource: resourceRef.current,\n });\n }, [root, char, behavior]);\n\n const pluginRegistry = useComposerInputPluginRegistryOptional();\n useEffect(() => {\n if (!pluginRegistry) return undefined;\n return pluginRegistry.register(resourceRef.current);\n }, [pluginRegistry]);\n\n const open = behavior !== null && resource.open;\n\n const aria = useTriggerPopoverAriaPublish();\n\n useEffect(() => {\n if (!open) return undefined;\n return () => {\n aria.setActiveAria(char, null);\n };\n }, [aria, char, open]);\n\n useEffect(() => {\n if (!open) return;\n aria.setActiveAria(char, {\n popoverId,\n highlightedItemId: resource.highlightedItemId,\n });\n }, [aria, char, popoverId, open, resource.highlightedItemId]);\n\n return (\n <TriggerBehaviorRegistrationContext.Provider value={registration}>\n <TriggerPopoverScopeContext.Provider value={resource}>\n {open ? (\n <Primitive.div\n role=\"listbox\"\n id={popoverId}\n aria-label={ariaLabel ?? \"Suggestions\"}\n aria-activedescendant={resource.highlightedItemId}\n data-state=\"open\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Primitive.div>\n ) : (\n children\n )}\n </TriggerPopoverScopeContext.Provider>\n </TriggerBehaviorRegistrationContext.Provider>\n );\n },\n);\n\nComposerPrimitiveTriggerPopover.displayName =\n \"ComposerPrimitive.TriggerPopover\";\n"],"mappings":";;;;;;;;;;AA8BA,MAAM,6BACJ,cAAmD,IAAI;AAEzD,MAAa,sCAAsC;CACjD,MAAM,MAAM,WAAW,0BAA0B;CACjD,IAAI,CAAC,KACH,MAAM,IAAI,MACR,oFACF;CACF,OAAO;AACT;AAEA,MAAa,8CACX,WAAW,0BAA0B;AAOvC,MAAM,qCACJ,cAAkD,IAAI;;AAGxD,MAAa,uCAAuC;CAClD,MAAM,MAAM,WAAW,kCAAkC;CACzD,IAAI,CAAC,KACH,MAAM,IAAI,MACR,2GACF;CACF,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAa,kCAAkC,YAK3C,EAAE,MAAM,SAAS,cAAc,WAAW,UAAU,GAAG,SACvD,iBACG;CACH,MAAM,MAAM,OAAO;CACnB,MAAM,OAAO,aAAa,MAAM,EAAE,SAAS,IAAI;CAC/C,MAAM,YAAY,MAAM;CAGxB,MAAM,cAAc,OAA+B,IAAI;CACvD,MAAM,CAAC,UAAU,eAAe,SAAiC,IAAI;CACrE,MAAM,uBAAuB,OAAO,CAAC;CAErC,MAAM,WAAW,aACd,SAAS;EACR,qBAAqB,WAAW;EAChC,IACE,QAAQ,IAAI,aAAa,gBACzB,qBAAqB,UAAU,GAE/B,QAAQ,KACN,kCAAkC,KAAK,sKACzC;EAEF,YAAY,UAAU;EACtB,YAAY,IAAI;EAChB,aAAa;GACX,qBAAqB,UAAU,KAAK,IAClC,GACA,qBAAqB,UAAU,CACjC;GACA,IAAI,YAAY,YAAY,MAAM;IAChC,YAAY,UAAU;IACtB,YAAY,IAAI;GAClB;EACF;CACF,GACA,CAAC,IAAI,CACP;CAEA,MAAM,eAAe,eACZ,EAAE,SAAS,IAClB,CAAC,QAAQ,CACX;CAEA,MAAM,WAAW,YACf,uBAAuB;EACrB;EACA;EACA,aAAa;EACb,UAAU,YAAY,KAAA;EACtB;EACA;CACF,CAAC,CACH;CAGA,MAAM,cAAc,OAAO,QAAQ;CACnC,YAAY,UAAU;CAEtB,MAAM,OAAO,6BAA6B;CAC1C,gBAAgB;EACd,OAAO,KAAK,SAAS;GACnB;GACA,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;GAC/B,UAAU,YAAY;EACxB,CAAC;CACH,GAAG;EAAC;EAAM;EAAM;CAAQ,CAAC;CAEzB,MAAM,iBAAiB,uCAAuC;CAC9D,gBAAgB;EACd,IAAI,CAAC,gBAAgB,OAAO,KAAA;EAC5B,OAAO,eAAe,SAAS,YAAY,OAAO;CACpD,GAAG,CAAC,cAAc,CAAC;CAEnB,MAAM,OAAO,aAAa,QAAQ,SAAS;CAE3C,MAAM,OAAO,6BAA6B;CAE1C,gBAAgB;EACd,IAAI,CAAC,MAAM,OAAO,KAAA;EAClB,aAAa;GACX,KAAK,cAAc,MAAM,IAAI;EAC/B;CACF,GAAG;EAAC;EAAM;EAAM;CAAI,CAAC;CAErB,gBAAgB;EACd,IAAI,CAAC,MAAM;EACX,KAAK,cAAc,MAAM;GACvB;GACA,mBAAmB,SAAS;EAC9B,CAAC;CACH,GAAG;EAAC;EAAM;EAAM;EAAW;EAAM,SAAS;CAAiB,CAAC;CAE5D,OACE,oBAAC,mCAAmC,UAApC;EAA6C,OAAO;YAClD,oBAAC,2BAA2B,UAA5B;GAAqC,OAAO;aACzC,OACC,oBAAC,UAAU,KAAX;IACE,MAAK;IACL,IAAI;IACJ,cAAY,aAAa;IACzB,yBAAuB,SAAS;IAChC,cAAW;IACX,GAAI;IACJ,KAAK;IAEJ;GACY,CAAA,IAEf;EAEiC,CAAA;CACM,CAAA;AAEjD,CACF;AAEA,gCAAgC,cAC9B"}
|
|
1
|
+
{"version":3,"file":"TriggerPopover.js","names":["c","_c","useAui","useAuiState","useResource","Unstable_TriggerAdapter","createContext","forwardRef","useCallback","useContext","useEffect","useEffectEvent","useId","useMemo","useRef","useState","ComponentPropsWithoutRef","ComponentRef","Primitive","useComposerInputPluginRegistryOptional","TriggerPopoverResource","TriggerPopoverResourceOutput","TriggerBehavior","useTriggerPopoverAriaPublish","useTriggerPopoverRootContext","TriggerPopoverScopeContext","useTriggerPopoverScopeContext","ctx","Error","useTriggerPopoverScopeContextOptional","TriggerBehaviorRegistration","register","behavior","TriggerBehaviorRegistrationContext","useTriggerBehaviorRegistration","ComposerPrimitiveTriggerPopover","Element","div","Props","Omit","char","adapter","t0","forwardedRef","$","ariaLabel","children","props","aui","text","_temp","popoverId","behaviorRef","setBehavior","registrationCountRef","t1","next","current","process","env","NODE_ENV","console","warn","Math","max","t2","registration","t3","undefined","t4","triggerChar","resource","t5","getResource","root","t6","t7","pluginRegistry","t8","t9","open","aria","t10","t11","setActiveAria","t12","t13","highlightedItemId","t14","t15","t16","displayName","s","composer"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopover.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAui, useAuiState } from \"@assistant-ui/store\";\nimport { useResource } from \"@assistant-ui/tap\";\nimport type { Unstable_TriggerAdapter } from \"@assistant-ui/core\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useEffectEvent,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ComponentRef,\n} from \"react\";\nimport { Primitive } from \"../../../utils/Primitive\";\nimport { useComposerInputPluginRegistryOptional } from \"../ComposerInputPluginContext\";\nimport {\n TriggerPopoverResource,\n type TriggerPopoverResourceOutput,\n} from \"./TriggerPopoverResource\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\nimport {\n useTriggerPopoverAriaPublish,\n useTriggerPopoverRootContext,\n} from \"./TriggerPopoverRootContext\";\n\nconst TriggerPopoverScopeContext =\n createContext<TriggerPopoverResourceOutput | null>(null);\n\nexport const useTriggerPopoverScopeContext = () => {\n const ctx = useContext(TriggerPopoverScopeContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverScopeContext must be used within ComposerPrimitive.TriggerPopover\",\n );\n return ctx;\n};\n\nexport const useTriggerPopoverScopeContextOptional = () =>\n useContext(TriggerPopoverScopeContext);\n\n/** Registration API exposed to behavior sub-primitives. */\nexport type TriggerBehaviorRegistration = {\n register(behavior: TriggerBehavior): () => void;\n};\n\nconst TriggerBehaviorRegistrationContext =\n createContext<TriggerBehaviorRegistration | null>(null);\n\n/** Obtain the registration handle from the parent `<TriggerPopover>`. */\nexport const useTriggerBehaviorRegistration = () => {\n const ctx = useContext(TriggerBehaviorRegistrationContext);\n if (!ctx)\n throw new Error(\n \"TriggerPopover.Directive / TriggerPopover.Action must be rendered inside ComposerPrimitive.TriggerPopover\",\n );\n return ctx;\n};\n\nexport namespace ComposerPrimitiveTriggerPopover {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = Omit<\n ComponentPropsWithoutRef<typeof Primitive.div>,\n \"onSelect\"\n > & {\n /** The character(s) that activate this trigger (e.g. `\"@\"`, `\"/\"`). Also serves as the trigger identity within the root. */\n readonly char: string;\n /** Adapter providing categories and items. */\n readonly adapter?: Unstable_TriggerAdapter | undefined;\n };\n}\n\n/**\n * Declares a trigger and renders its popover container. The popover only\n * renders its DOM (and children) when the trigger character is active in the\n * composer input and a behavior sub-primitive has been registered.\n *\n * A behavior is contributed by rendering exactly one of\n * `<TriggerPopover.Directive>` or `<TriggerPopover.Action>` as a child. Without\n * a behavior the trigger stays closed.\n *\n * Must be placed inside `ComposerPrimitive.Unstable_TriggerPopoverRoot`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopover\n * char=\"@\"\n * adapter={mentionAdapter}\n * >\n * <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />\n * <ComposerPrimitive.Unstable_TriggerPopoverCategories>\n * {(cats) => cats.map(...)}\n * </ComposerPrimitive.Unstable_TriggerPopoverCategories>\n * <ComposerPrimitive.Unstable_TriggerPopoverItems>\n * {(items) => items.map(...)}\n * </ComposerPrimitive.Unstable_TriggerPopoverItems>\n * </ComposerPrimitive.Unstable_TriggerPopover>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopover = forwardRef<\n ComposerPrimitiveTriggerPopover.Element,\n ComposerPrimitiveTriggerPopover.Props\n>(\n (\n { char, adapter, \"aria-label\": ariaLabel, children, ...props },\n forwardedRef,\n ) => {\n const aui = useAui();\n const text = useAuiState((s) => s.composer.text);\n const popoverId = useId();\n\n // Track in state (for resource reactivity) + ref (dev warning on duplicate registrations).\n const behaviorRef = useRef<TriggerBehavior | null>(null);\n const [behavior, setBehavior] = useState<TriggerBehavior | null>(null);\n const registrationCountRef = useRef(0);\n\n const register = useCallback<TriggerBehaviorRegistration[\"register\"]>(\n (next) => {\n registrationCountRef.current += 1;\n if (\n process.env.NODE_ENV !== \"production\" &&\n registrationCountRef.current > 1\n ) {\n console.warn(\n `[assistant-ui] TriggerPopover \"${char}\" received more than one behavior child. Exactly one <TriggerPopover.Directive> or <TriggerPopover.Action> is allowed per TriggerPopover; the last registration wins.`,\n );\n }\n behaviorRef.current = next;\n setBehavior(next);\n return () => {\n registrationCountRef.current = Math.max(\n 0,\n registrationCountRef.current - 1,\n );\n if (behaviorRef.current === next) {\n behaviorRef.current = null;\n setBehavior(null);\n }\n };\n },\n [char],\n );\n\n const registration = useMemo<TriggerBehaviorRegistration>(\n () => ({ register }),\n [register],\n );\n\n const resource = useResource(\n TriggerPopoverResource({\n adapter,\n text,\n triggerChar: char,\n behavior: behavior ?? undefined,\n aui,\n popoverId,\n }),\n );\n\n const getResource = useEffectEvent(() => resource);\n\n const root = useTriggerPopoverRootContext();\n useEffect(() => {\n return root.register({\n char,\n ...(behavior ? { behavior } : {}),\n resource: getResource(),\n });\n }, [root, char, behavior]);\n\n const pluginRegistry = useComposerInputPluginRegistryOptional();\n useEffect(() => {\n if (!pluginRegistry) return undefined;\n return pluginRegistry.register(getResource());\n }, [pluginRegistry]);\n\n const open = behavior !== null && resource.open;\n\n const aria = useTriggerPopoverAriaPublish();\n\n useEffect(() => {\n if (!open) return undefined;\n return () => {\n aria.setActiveAria(char, null);\n };\n }, [aria, char, open]);\n\n useEffect(() => {\n if (!open) return;\n aria.setActiveAria(char, {\n popoverId,\n highlightedItemId: resource.highlightedItemId,\n });\n }, [aria, char, popoverId, open, resource.highlightedItemId]);\n\n return (\n <TriggerBehaviorRegistrationContext.Provider value={registration}>\n <TriggerPopoverScopeContext.Provider value={resource}>\n {open ? (\n <Primitive.div\n role=\"listbox\"\n id={popoverId}\n aria-label={ariaLabel ?? \"Suggestions\"}\n aria-activedescendant={resource.highlightedItemId}\n data-state=\"open\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Primitive.div>\n ) : (\n children\n )}\n </TriggerPopoverScopeContext.Provider>\n </TriggerBehaviorRegistrationContext.Provider>\n );\n },\n);\n\nComposerPrimitiveTriggerPopover.displayName =\n \"ComposerPrimitive.TriggerPopover\";\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerPopoverAction.js","names":[],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverAction.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n Unstable_DirectiveFormatter,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport { unstable_defaultDirectiveFormatter } from \"@assistant-ui/core\";\nimport { useEffect, useRef, type FC } from \"react\";\nimport { useTriggerBehaviorRegistration } from \"./TriggerPopover\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\n\nexport namespace ComposerPrimitiveTriggerPopoverAction {\n export type Props = {\n /** Defaults to `unstable_defaultDirectiveFormatter`. */\n readonly formatter?: Unstable_DirectiveFormatter | undefined;\n /** Fires the moment an item is selected; runs regardless of `removeOnExecute`. */\n readonly onExecute: (item: Unstable_TriggerItem) => void;\n /** When true, strips the trigger text after executing. Defaults to `false` (keeps audit-trail chip). */\n readonly removeOnExecute?: boolean | undefined;\n };\n}\n\n/**\n * Configures a `<TriggerPopover>` to fire a handler when an item is selected,\n * optionally leaving a directive chip behind as an audit trail. Render exactly\n * one behavior sub-primitive per `<TriggerPopover>`.\n *\n * Exposed as `ComposerPrimitive.Unstable_TriggerPopover.Action`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"/\" adapter={slashAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Action\n * onExecute={(item) => commandHandlers[item.id]?.()}\n * removeOnExecute={false}\n * />\n * </ComposerPrimitive.Unstable_TriggerPopover>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopoverAction: FC<\n ComposerPrimitiveTriggerPopoverAction.Props\n> = ({ formatter, onExecute, removeOnExecute }) => {\n const { register } = useTriggerBehaviorRegistration();\n const onExecuteRef = useRef(onExecute);\n onExecuteRef.current = onExecute;\n\n useEffect(() => {\n const behavior: TriggerBehavior = {\n kind: \"action\",\n formatter: formatter ?? unstable_defaultDirectiveFormatter,\n onExecute: (item) => onExecuteRef.current(item),\n ...(removeOnExecute !== undefined ? { removeOnExecute } : {}),\n };\n return register(behavior);\n }, [register, formatter, removeOnExecute]);\n\n return null;\n};\n\nComposerPrimitiveTriggerPopoverAction.displayName =\n \"ComposerPrimitive.TriggerPopoverAction\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuCA,
|
|
1
|
+
{"version":3,"file":"TriggerPopoverAction.js","names":["Unstable_DirectiveFormatter","Unstable_TriggerItem","unstable_defaultDirectiveFormatter","useEffect","useRef","FC","useTriggerBehaviorRegistration","TriggerBehavior","ComposerPrimitiveTriggerPopoverAction","Props","formatter","onExecute","item","removeOnExecute","register","onExecuteRef","current","behavior","kind","undefined","displayName"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverAction.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n Unstable_DirectiveFormatter,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport { unstable_defaultDirectiveFormatter } from \"@assistant-ui/core\";\nimport { useEffect, useRef, type FC } from \"react\";\nimport { useTriggerBehaviorRegistration } from \"./TriggerPopover\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\n\nexport namespace ComposerPrimitiveTriggerPopoverAction {\n export type Props = {\n /** Defaults to `unstable_defaultDirectiveFormatter`. */\n readonly formatter?: Unstable_DirectiveFormatter | undefined;\n /** Fires the moment an item is selected; runs regardless of `removeOnExecute`. */\n readonly onExecute: (item: Unstable_TriggerItem) => void;\n /** When true, strips the trigger text after executing. Defaults to `false` (keeps audit-trail chip). */\n readonly removeOnExecute?: boolean | undefined;\n };\n}\n\n/**\n * Configures a `<TriggerPopover>` to fire a handler when an item is selected,\n * optionally leaving a directive chip behind as an audit trail. Render exactly\n * one behavior sub-primitive per `<TriggerPopover>`.\n *\n * Exposed as `ComposerPrimitive.Unstable_TriggerPopover.Action`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"/\" adapter={slashAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Action\n * onExecute={(item) => commandHandlers[item.id]?.()}\n * removeOnExecute={false}\n * />\n * </ComposerPrimitive.Unstable_TriggerPopover>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopoverAction: FC<\n ComposerPrimitiveTriggerPopoverAction.Props\n> = ({ formatter, onExecute, removeOnExecute }) => {\n const { register } = useTriggerBehaviorRegistration();\n const onExecuteRef = useRef(onExecute);\n onExecuteRef.current = onExecute;\n\n useEffect(() => {\n const behavior: TriggerBehavior = {\n kind: \"action\",\n formatter: formatter ?? unstable_defaultDirectiveFormatter,\n onExecute: (item) => onExecuteRef.current(item),\n ...(removeOnExecute !== undefined ? { removeOnExecute } : {}),\n };\n return register(behavior);\n }, [register, formatter, removeOnExecute]);\n\n return null;\n};\n\nComposerPrimitiveTriggerPopoverAction.displayName =\n \"ComposerPrimitive.TriggerPopoverAction\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuCA,MAAaQ,yCAER,EAAEE,WAAWC,WAAWE,sBAAsB;CACjD,MAAM,EAAEC,aAAaR,+BAA+B;CACpD,MAAMS,eAAeX,OAAOO,SAAS;CACrCI,aAAaC,UAAUL;CAEvBR,gBAAgB;EAOd,OAAOW,SAASG;GALdC,MAAM;GACNR,WAAWA,aAAaR;GACxBS,YAAYC,SAASG,aAAaC,QAAQJ,IAAI;GAC9C,GAAIC,oBAAoBM,KAAAA,IAAY,EAAEN,gBAAgB,IAAI,CAAC;EAE7CI,CAAQ;CAC1B,GAAG;EAACH;EAAUJ;EAAWG;CAAe,CAAC;CAEzC,OAAO;AACT;AAEAL,sCAAsCY,cACpC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Primitive } from "../../../utils/Primitive.js";
|
|
3
3
|
import { useTriggerPopoverScopeContext } from "./TriggerPopover.js";
|
|
4
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
4
5
|
import { forwardRef } from "@assistant-ui/tap/react-shim";
|
|
5
6
|
import { jsx } from "react/jsx-runtime";
|
|
6
7
|
import { composeEventHandlers } from "@radix-ui/primitive";
|
|
@@ -9,15 +10,42 @@ import { composeEventHandlers } from "@radix-ui/primitive";
|
|
|
9
10
|
* A button that navigates back from category items to the category list.
|
|
10
11
|
* Only renders when a category is active (drill-down view).
|
|
11
12
|
*/
|
|
12
|
-
const ComposerPrimitiveTriggerPopoverBack = forwardRef((
|
|
13
|
+
const ComposerPrimitiveTriggerPopoverBack = forwardRef((t0, forwardedRef) => {
|
|
14
|
+
const $ = c(10);
|
|
15
|
+
let onClick;
|
|
16
|
+
let props;
|
|
17
|
+
if ($[0] !== t0) {
|
|
18
|
+
({onClick, ...props} = t0);
|
|
19
|
+
$[0] = t0;
|
|
20
|
+
$[1] = onClick;
|
|
21
|
+
$[2] = props;
|
|
22
|
+
} else {
|
|
23
|
+
onClick = $[1];
|
|
24
|
+
props = $[2];
|
|
25
|
+
}
|
|
13
26
|
const { activeCategoryId, isSearchMode, goBack, open } = useTriggerPopoverScopeContext();
|
|
14
27
|
if (!open || !activeCategoryId || isSearchMode) return null;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
28
|
+
let t1;
|
|
29
|
+
if ($[3] !== goBack || $[4] !== onClick) {
|
|
30
|
+
t1 = composeEventHandlers(onClick, goBack);
|
|
31
|
+
$[3] = goBack;
|
|
32
|
+
$[4] = onClick;
|
|
33
|
+
$[5] = t1;
|
|
34
|
+
} else t1 = $[5];
|
|
35
|
+
let t2;
|
|
36
|
+
if ($[6] !== forwardedRef || $[7] !== props || $[8] !== t1) {
|
|
37
|
+
t2 = /* @__PURE__ */ jsx(Primitive.button, {
|
|
38
|
+
type: "button",
|
|
39
|
+
...props,
|
|
40
|
+
ref: forwardedRef,
|
|
41
|
+
onClick: t1
|
|
42
|
+
});
|
|
43
|
+
$[6] = forwardedRef;
|
|
44
|
+
$[7] = props;
|
|
45
|
+
$[8] = t1;
|
|
46
|
+
$[9] = t2;
|
|
47
|
+
} else t2 = $[9];
|
|
48
|
+
return t2;
|
|
21
49
|
});
|
|
22
50
|
ComposerPrimitiveTriggerPopoverBack.displayName = "ComposerPrimitive.TriggerPopoverBack";
|
|
23
51
|
//#endregion
|