@assistant-ui/core 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/adapters/attachment.js +1 -1
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/react/AssistantProvider.d.ts +10 -0
- package/dist/react/AssistantProvider.d.ts.map +1 -0
- package/dist/react/AssistantProvider.js +13 -0
- package/dist/react/AssistantProvider.js.map +1 -0
- package/dist/react/RuntimeAdapter.d.ts +3 -0
- package/dist/react/RuntimeAdapter.d.ts.map +1 -0
- package/dist/react/RuntimeAdapter.js +13 -0
- package/dist/react/RuntimeAdapter.js.map +1 -0
- package/dist/react/client/DataRenderers.d.ts +3 -0
- package/dist/react/client/DataRenderers.d.ts.map +1 -0
- package/dist/react/client/DataRenderers.js +33 -0
- package/dist/react/client/DataRenderers.js.map +1 -0
- package/dist/react/client/Tools.d.ts +8 -0
- package/dist/react/client/Tools.d.ts.map +1 -0
- package/dist/react/client/Tools.js +68 -0
- package/dist/react/client/Tools.js.map +1 -0
- package/dist/react/client/index.d.ts +3 -0
- package/dist/react/client/index.d.ts.map +1 -0
- package/dist/react/client/index.js +3 -0
- package/dist/react/client/index.js.map +1 -0
- package/dist/react/index.d.ts +17 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +19 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/model-context/index.d.ts +12 -0
- package/dist/react/model-context/index.d.ts.map +1 -0
- package/dist/react/model-context/index.js +11 -0
- package/dist/react/model-context/index.js.map +1 -0
- package/dist/react/model-context/makeAssistantDataUI.d.ts +7 -0
- package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -0
- package/dist/react/model-context/makeAssistantDataUI.js +10 -0
- package/dist/react/model-context/makeAssistantDataUI.js.map +1 -0
- package/dist/react/model-context/makeAssistantTool.d.ts +7 -0
- package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -0
- package/dist/react/model-context/makeAssistantTool.js +10 -0
- package/dist/react/model-context/makeAssistantTool.js.map +1 -0
- package/dist/react/model-context/makeAssistantToolUI.d.ts +7 -0
- package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -0
- package/dist/react/model-context/makeAssistantToolUI.js +10 -0
- package/dist/react/model-context/makeAssistantToolUI.js.map +1 -0
- package/dist/react/model-context/toolbox.d.ts +10 -0
- package/dist/react/model-context/toolbox.d.ts.map +1 -0
- package/dist/react/model-context/toolbox.js +2 -0
- package/dist/react/model-context/toolbox.js.map +1 -0
- package/dist/react/model-context/useAssistantDataUI.d.ts +7 -0
- package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -0
- package/dist/react/model-context/useAssistantDataUI.js +11 -0
- package/dist/react/model-context/useAssistantDataUI.js.map +1 -0
- package/dist/react/model-context/useAssistantInstructions.d.ts +4 -0
- package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -0
- package/dist/react/model-context/useAssistantInstructions.js +22 -0
- package/dist/react/model-context/useAssistantInstructions.js.map +1 -0
- package/dist/react/model-context/useAssistantTool.d.ts +7 -0
- package/dist/react/model-context/useAssistantTool.d.ts.map +1 -0
- package/dist/react/model-context/useAssistantTool.js +22 -0
- package/dist/react/model-context/useAssistantTool.js.map +1 -0
- package/dist/react/model-context/useAssistantToolUI.d.ts +7 -0
- package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -0
- package/dist/react/model-context/useAssistantToolUI.js +11 -0
- package/dist/react/model-context/useAssistantToolUI.js.map +1 -0
- package/dist/react/model-context/useInlineRender.d.ts +4 -0
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -0
- package/dist/react/model-context/useInlineRender.js +15 -0
- package/dist/react/model-context/useInlineRender.js.map +1 -0
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +27 -0
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -0
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +27 -0
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -0
- package/dist/react/primitives/composer/ComposerAttachments.d.ts +23 -0
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -0
- package/dist/react/primitives/composer/ComposerAttachments.js +47 -0
- package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -0
- package/dist/react/primitives/composer/ComposerIf.d.ts +20 -0
- package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -0
- package/dist/react/primitives/composer/ComposerIf.js +24 -0
- package/dist/react/primitives/composer/ComposerIf.js.map +1 -0
- package/dist/react/primitives/message/MessageAttachments.d.ts +23 -0
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -0
- package/dist/react/primitives/message/MessageAttachments.js +51 -0
- package/dist/react/primitives/message/MessageAttachments.js.map +1 -0
- package/dist/react/primitives/message/MessageParts.d.ts +139 -0
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -0
- package/dist/react/primitives/message/MessageParts.js +251 -0
- package/dist/react/primitives/message/MessageParts.js.map +1 -0
- package/dist/react/primitives/thread/ThreadMessages.d.ts +95 -0
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -0
- package/dist/react/primitives/thread/ThreadMessages.js +112 -0
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -0
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts +28 -0
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -0
- package/dist/react/primitives/thread/ThreadSuggestions.js +32 -0
- package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -0
- package/dist/react/primitives/threadList/ThreadListItems.d.ts +22 -0
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -0
- package/dist/react/primitives/threadList/ThreadListItems.js +23 -0
- package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -0
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +8 -0
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -0
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.js +8 -0
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.js.map +1 -0
- package/dist/react/providers/AttachmentByIndexProvider.d.ts +8 -0
- package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -0
- package/dist/react/providers/AttachmentByIndexProvider.js +23 -0
- package/dist/react/providers/AttachmentByIndexProvider.js.map +1 -0
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +6 -0
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -0
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.js +20 -0
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.js.map +1 -0
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +5 -0
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -0
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js +13 -0
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js.map +1 -0
- package/dist/react/providers/MessageByIndexProvider.d.ts +5 -0
- package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -0
- package/dist/react/providers/MessageByIndexProvider.js +18 -0
- package/dist/react/providers/MessageByIndexProvider.js.map +1 -0
- package/dist/react/providers/PartByIndexProvider.d.ts +5 -0
- package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -0
- package/dist/react/providers/PartByIndexProvider.js +13 -0
- package/dist/react/providers/PartByIndexProvider.js.map +1 -0
- package/dist/react/providers/SuggestionByIndexProvider.d.ts +6 -0
- package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -0
- package/dist/react/providers/SuggestionByIndexProvider.js +13 -0
- package/dist/react/providers/SuggestionByIndexProvider.js.map +1 -0
- package/dist/react/providers/TextMessagePartProvider.d.ts +6 -0
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -0
- package/dist/react/providers/TextMessagePartProvider.js +26 -0
- package/dist/react/providers/TextMessagePartProvider.js.map +1 -0
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +6 -0
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -0
- package/dist/react/providers/ThreadListItemByIndexProvider.js +13 -0
- package/dist/react/providers/ThreadListItemByIndexProvider.js.map +1 -0
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +6 -0
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -0
- package/dist/react/providers/ThreadListItemRuntimeProvider.js +10 -0
- package/dist/react/providers/ThreadListItemRuntimeProvider.js.map +1 -0
- package/dist/react/providers/index.d.ts +10 -0
- package/dist/react/providers/index.d.ts.map +1 -0
- package/dist/react/providers/index.js +10 -0
- package/dist/react/providers/index.js.map +1 -0
- package/dist/react/types/MessagePartComponentTypes.d.ts +33 -0
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -0
- package/dist/react/types/MessagePartComponentTypes.js +2 -0
- package/dist/react/types/MessagePartComponentTypes.js.map +1 -0
- package/dist/react/types/index.d.ts +3 -0
- package/dist/react/types/index.d.ts.map +1 -0
- package/dist/react/types/index.js +2 -0
- package/dist/react/types/index.js.map +1 -0
- package/dist/react/types/scopes/dataRenderers.d.ts +13 -0
- package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -0
- package/dist/react/types/scopes/dataRenderers.js +2 -0
- package/dist/react/types/scopes/dataRenderers.js.map +1 -0
- package/dist/react/types/scopes/index.d.ts +3 -0
- package/dist/react/types/scopes/index.d.ts.map +1 -0
- package/dist/react/types/scopes/index.js +2 -0
- package/dist/react/types/scopes/index.js.map +1 -0
- package/dist/react/types/scopes/tools.d.ts +13 -0
- package/dist/react/types/scopes/tools.d.ts.map +1 -0
- package/dist/react/types/scopes/tools.js +2 -0
- package/dist/react/types/scopes/tools.js.map +1 -0
- package/dist/react/types/store-augmentation.d.ts +10 -0
- package/dist/react/types/store-augmentation.d.ts.map +1 -0
- package/dist/react/types/store-augmentation.js +2 -0
- package/dist/react/types/store-augmentation.js.map +1 -0
- package/dist/runtime/api/attachment-runtime.d.ts +2 -2
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.js.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +8 -6
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.js +2 -2
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +27 -2
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +2 -2
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +28 -8
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +0 -3
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +3 -5
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/utils/external-store-message.d.ts +8 -0
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/external-store-message.js +12 -0
- package/dist/runtime/utils/external-store-message.js.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +10 -3
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +20 -5
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +26 -8
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.js +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +1 -1
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts +5 -0
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -0
- package/dist/store/clients/runtime-adapter.js +46 -0
- package/dist/store/clients/runtime-adapter.js.map +1 -0
- package/dist/store/clients/suggestions.d.ts +1 -1
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/suggestions.js +1 -1
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +1 -1
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.js +1 -1
- package/dist/store/clients/thread-message-client.js.map +1 -1
- package/dist/store/index.d.ts +1 -11
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +2 -9
- package/dist/store/index.js.map +1 -1
- package/dist/store/internal.d.ts +1 -9
- package/dist/store/internal.d.ts.map +1 -1
- package/dist/store/internal.js +1 -10
- package/dist/store/internal.js.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/scope-registration.d.ts +27 -0
- package/dist/store/scope-registration.d.ts.map +1 -0
- package/dist/store/scope-registration.js +2 -0
- package/dist/store/scope-registration.js.map +1 -0
- package/dist/store/scopes/composer.d.ts +2 -2
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/types/attachment.d.ts +9 -2
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +35 -12
- package/src/adapters/attachment.ts +1 -1
- package/src/react/AssistantProvider.tsx +34 -0
- package/src/react/RuntimeAdapter.ts +22 -0
- package/src/react/client/DataRenderers.ts +42 -0
- package/src/react/client/Tools.ts +97 -0
- package/src/react/client/index.ts +2 -0
- package/src/react/index.ts +50 -0
- package/src/react/model-context/index.ts +25 -0
- package/src/react/model-context/makeAssistantDataUI.ts +20 -0
- package/src/react/model-context/makeAssistantTool.ts +20 -0
- package/src/react/model-context/makeAssistantToolUI.ts +20 -0
- package/src/react/model-context/toolbox.ts +15 -0
- package/src/react/model-context/useAssistantDataUI.ts +16 -0
- package/src/react/model-context/useAssistantInstructions.ts +30 -0
- package/src/react/model-context/useAssistantTool.ts +37 -0
- package/src/react/model-context/useAssistantToolUI.ts +18 -0
- package/src/react/model-context/useInlineRender.ts +25 -0
- package/src/react/primitives/chainOfThought/ChainOfThoughtParts.tsx +73 -0
- package/src/react/primitives/composer/ComposerAttachments.tsx +95 -0
- package/src/react/primitives/composer/ComposerIf.tsx +49 -0
- package/src/react/primitives/message/MessageAttachments.tsx +98 -0
- package/src/react/primitives/message/MessageParts.tsx +561 -0
- package/src/react/primitives/thread/ThreadMessages.tsx +222 -0
- package/src/react/primitives/thread/ThreadSuggestions.tsx +82 -0
- package/src/react/primitives/threadList/ThreadListItems.tsx +66 -0
- package/src/react/primitives/threadListItem/ThreadListItemTitle.tsx +17 -0
- package/src/react/providers/AttachmentByIndexProvider.tsx +34 -0
- package/src/react/providers/ChainOfThoughtByIndicesProvider.tsx +34 -0
- package/src/react/providers/ChainOfThoughtPartByIndexProvider.tsx +18 -0
- package/src/react/providers/MessageByIndexProvider.tsx +23 -0
- package/src/react/providers/PartByIndexProvider.tsx +18 -0
- package/src/react/providers/SuggestionByIndexProvider.tsx +21 -0
- package/src/react/providers/TextMessagePartProvider.tsx +46 -0
- package/src/react/providers/ThreadListItemByIndexProvider.tsx +19 -0
- package/src/react/providers/ThreadListItemRuntimeProvider.tsx +16 -0
- package/src/react/providers/index.ts +15 -0
- package/src/react/types/MessagePartComponentTypes.ts +66 -0
- package/src/react/types/index.ts +31 -0
- package/src/react/types/scopes/dataRenderers.ts +15 -0
- package/src/react/types/scopes/index.ts +6 -0
- package/src/react/types/scopes/tools.ts +18 -0
- package/src/react/types/store-augmentation.ts +11 -0
- package/src/runtime/api/attachment-runtime.ts +2 -7
- package/src/runtime/api/composer-runtime.ts +9 -8
- package/src/runtime/base/base-composer-runtime-core.ts +28 -8
- package/src/runtime/base/default-thread-composer-runtime-core.ts +1 -5
- package/src/runtime/index.ts +1 -0
- package/src/runtime/interfaces/composer-runtime-core.ts +3 -6
- package/src/runtime/utils/external-store-message.ts +15 -0
- package/src/runtime/utils/thread-message-like.ts +40 -7
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +29 -12
- package/src/runtimes/remote-thread-list/empty-thread-core.ts +1 -1
- package/src/store/clients/chain-of-thought-client.ts +1 -1
- package/src/store/clients/model-context-client.ts +1 -1
- package/src/store/clients/no-op-composer-client.ts +1 -1
- package/src/store/clients/runtime-adapter.ts +67 -0
- package/src/store/clients/suggestions.ts +2 -2
- package/src/store/clients/thread-message-client.ts +2 -2
- package/src/store/index.ts +2 -38
- package/src/store/internal.ts +4 -31
- package/src/store/runtime-clients/attachment-runtime-client.ts +1 -1
- package/src/store/runtime-clients/composer-runtime-client.ts +5 -1
- package/src/store/runtime-clients/message-part-runtime-client.ts +1 -1
- package/src/store/runtime-clients/message-runtime-client.ts +5 -1
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +1 -1
- package/src/store/runtime-clients/thread-list-runtime-client.ts +5 -1
- package/src/store/runtime-clients/thread-runtime-client.ts +1 -1
- package/src/store/scope-registration.ts +27 -0
- package/src/store/scopes/composer.ts +2 -1
- package/src/tests/external-store-thread-runtime-core.test.ts +152 -0
- package/src/tests/thread-message-like.test.ts +110 -0
- package/src/types/attachment.ts +10 -2
- package/src/types/index.ts +1 -0
- package/dist/store/types/client.d.ts +0 -137
- package/dist/store/types/client.d.ts.map +0 -1
- package/dist/store/types/client.js +0 -2
- package/dist/store/types/client.js.map +0 -1
- package/dist/store/types/events.d.ts +0 -33
- package/dist/store/types/events.d.ts.map +0 -1
- package/dist/store/types/events.js +0 -8
- package/dist/store/types/events.js.map +0 -1
- package/dist/store/types/index.d.ts +0 -3
- package/dist/store/types/index.d.ts.map +0 -1
- package/dist/store/types/index.js +0 -2
- package/dist/store/types/index.js.map +0 -1
- package/dist/store/utils/attach-transform-scopes.d.ts +0 -11
- package/dist/store/utils/attach-transform-scopes.d.ts.map +0 -1
- package/dist/store/utils/attach-transform-scopes.js +0 -12
- package/dist/store/utils/attach-transform-scopes.js.map +0 -1
- package/dist/store/utils/base-proxy-handler.d.ts +0 -23
- package/dist/store/utils/base-proxy-handler.d.ts.map +0 -1
- package/dist/store/utils/base-proxy-handler.js +0 -46
- package/dist/store/utils/base-proxy-handler.js.map +0 -1
- package/dist/store/utils/derived.d.ts +0 -34
- package/dist/store/utils/derived.d.ts.map +0 -1
- package/dist/store/utils/derived.js +0 -24
- package/dist/store/utils/derived.js.map +0 -1
- package/dist/store/utils/index.d.ts +0 -7
- package/dist/store/utils/index.d.ts.map +0 -1
- package/dist/store/utils/index.js +0 -7
- package/dist/store/utils/index.js.map +0 -1
- package/dist/store/utils/notification-manager.d.ts +0 -11
- package/dist/store/utils/notification-manager.d.ts.map +0 -1
- package/dist/store/utils/notification-manager.js +0 -84
- package/dist/store/utils/notification-manager.js.map +0 -1
- package/dist/store/utils/proxied-assistant-state.d.ts +0 -8
- package/dist/store/utils/proxied-assistant-state.d.ts.map +0 -1
- package/dist/store/utils/proxied-assistant-state.js +0 -33
- package/dist/store/utils/proxied-assistant-state.js.map +0 -1
- package/dist/store/utils/split-clients.d.ts +0 -10
- package/dist/store/utils/split-clients.d.ts.map +0 -1
- package/dist/store/utils/split-clients.js +0 -53
- package/dist/store/utils/split-clients.js.map +0 -1
- package/dist/store/utils/tap-assistant-context.d.ts +0 -19
- package/dist/store/utils/tap-assistant-context.d.ts.map +0 -1
- package/dist/store/utils/tap-assistant-context.js +0 -23
- package/dist/store/utils/tap-assistant-context.js.map +0 -1
- package/dist/store/utils/tap-client-list.d.ts +0 -28
- package/dist/store/utils/tap-client-list.d.ts.map +0 -1
- package/dist/store/utils/tap-client-list.js +0 -68
- package/dist/store/utils/tap-client-list.js.map +0 -1
- package/dist/store/utils/tap-client-lookup.d.ts +0 -15
- package/dist/store/utils/tap-client-lookup.d.ts.map +0 -1
- package/dist/store/utils/tap-client-lookup.js +0 -42
- package/dist/store/utils/tap-client-lookup.js.map +0 -1
- package/dist/store/utils/tap-client-resource.d.ts +0 -13
- package/dist/store/utils/tap-client-resource.d.ts.map +0 -1
- package/dist/store/utils/tap-client-resource.js +0 -114
- package/dist/store/utils/tap-client-resource.js.map +0 -1
- package/dist/store/utils/tap-client-stack-context.d.ts +0 -23
- package/dist/store/utils/tap-client-stack-context.d.ts.map +0 -1
- package/dist/store/utils/tap-client-stack-context.js +0 -28
- package/dist/store/utils/tap-client-stack-context.js.map +0 -1
- package/dist/store/utils/wrapper-resource.d.ts +0 -3
- package/dist/store/utils/wrapper-resource.d.ts.map +0 -1
- package/dist/store/utils/wrapper-resource.js +0 -11
- package/dist/store/utils/wrapper-resource.js.map +0 -1
- package/src/store/types/client.ts +0 -203
- package/src/store/types/events.ts +0 -77
- package/src/store/types/index.ts +0 -23
- package/src/store/utils/attach-transform-scopes.ts +0 -38
- package/src/store/utils/base-proxy-handler.ts +0 -50
- package/src/store/utils/derived.ts +0 -46
- package/src/store/utils/index.ts +0 -28
- package/src/store/utils/notification-manager.ts +0 -114
- package/src/store/utils/proxied-assistant-state.ts +0 -55
- package/src/store/utils/split-clients.ts +0 -82
- package/src/store/utils/tap-assistant-context.ts +0 -58
- package/src/store/utils/tap-client-list.ts +0 -121
- package/src/store/utils/tap-client-lookup.ts +0 -79
- package/src/store/utils/tap-client-resource.ts +0 -187
- package/src/store/utils/tap-client-stack-context.ts +0 -51
- package/src/store/utils/wrapper-resource.ts +0 -17
package/src/store/types/index.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export type {
|
|
2
|
-
ClientMethods,
|
|
3
|
-
ClientSchema,
|
|
4
|
-
ScopeRegistry,
|
|
5
|
-
ClientOutput,
|
|
6
|
-
ClientNames,
|
|
7
|
-
ClientEvents,
|
|
8
|
-
ClientMeta,
|
|
9
|
-
ClientElement,
|
|
10
|
-
Unsubscribe,
|
|
11
|
-
AssistantState,
|
|
12
|
-
AssistantClientAccessor,
|
|
13
|
-
AssistantClient,
|
|
14
|
-
} from "./client";
|
|
15
|
-
|
|
16
|
-
export {
|
|
17
|
-
normalizeEventSelector,
|
|
18
|
-
type AssistantEventPayload,
|
|
19
|
-
type AssistantEventName,
|
|
20
|
-
type AssistantEventScope,
|
|
21
|
-
type AssistantEventSelector,
|
|
22
|
-
type AssistantEventCallback,
|
|
23
|
-
} from "./events";
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { ResourceElement } from "@assistant-ui/tap";
|
|
2
|
-
import type {
|
|
3
|
-
AssistantClient,
|
|
4
|
-
ClientElement,
|
|
5
|
-
ClientNames,
|
|
6
|
-
} from "../types/client";
|
|
7
|
-
import type { DerivedElement } from "./derived";
|
|
8
|
-
|
|
9
|
-
const TRANSFORM_SCOPES = Symbol("assistant-ui.transform-scopes");
|
|
10
|
-
|
|
11
|
-
export type ScopesConfig = {
|
|
12
|
-
[K in ClientNames]?: ClientElement<K> | DerivedElement<K>;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
type TransformScopesFn = (
|
|
16
|
-
scopes: ScopesConfig,
|
|
17
|
-
parent: AssistantClient,
|
|
18
|
-
) => ScopesConfig;
|
|
19
|
-
|
|
20
|
-
type ResourceWithTransformScopes = {
|
|
21
|
-
[TRANSFORM_SCOPES]?: TransformScopesFn;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export function attachTransformScopes<
|
|
25
|
-
T extends (...args: any[]) => ResourceElement<any>,
|
|
26
|
-
>(resource: T, transform: TransformScopesFn): void {
|
|
27
|
-
const r = resource as T & ResourceWithTransformScopes;
|
|
28
|
-
if (r[TRANSFORM_SCOPES]) {
|
|
29
|
-
throw new Error("transformScopes is already attached to this resource");
|
|
30
|
-
}
|
|
31
|
-
r[TRANSFORM_SCOPES] = transform;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function getTransformScopes<
|
|
35
|
-
T extends (...args: any[]) => ResourceElement<any>,
|
|
36
|
-
>(resource: T): TransformScopesFn | undefined {
|
|
37
|
-
return (resource as T & ResourceWithTransformScopes)[TRANSFORM_SCOPES];
|
|
38
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
const INTROSPECTION_PROPS = new Set(["$$typeof", "nodeType", "then"]);
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Handles common proxy introspection properties.
|
|
5
|
-
* Returns the appropriate value for toStringTag, toJSON, and props that should return undefined.
|
|
6
|
-
* Returns `false` if the prop should be handled by the subclass.
|
|
7
|
-
*/
|
|
8
|
-
export const handleIntrospectionProp = (
|
|
9
|
-
prop: string | symbol,
|
|
10
|
-
name: string,
|
|
11
|
-
): unknown | false => {
|
|
12
|
-
if (prop === Symbol.toStringTag) return name;
|
|
13
|
-
if (typeof prop === "symbol") return undefined;
|
|
14
|
-
if (prop === "toJSON") return () => name;
|
|
15
|
-
if (INTROSPECTION_PROPS.has(prop)) return undefined;
|
|
16
|
-
return false;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export abstract class BaseProxyHandler implements ProxyHandler<object> {
|
|
20
|
-
abstract get(_: unknown, prop: string | symbol, receiver?: unknown): unknown;
|
|
21
|
-
abstract ownKeys(): ArrayLike<string | symbol>;
|
|
22
|
-
abstract has(_: unknown, prop: string | symbol): boolean;
|
|
23
|
-
|
|
24
|
-
getOwnPropertyDescriptor(_: unknown, prop: string | symbol) {
|
|
25
|
-
const value = this.get(_, prop);
|
|
26
|
-
if (value === undefined) return undefined;
|
|
27
|
-
return {
|
|
28
|
-
value,
|
|
29
|
-
writable: false,
|
|
30
|
-
enumerable: true,
|
|
31
|
-
configurable: false,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
set() {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
setPrototypeOf() {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
defineProperty() {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
deleteProperty() {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
preventExtensions(): boolean {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { resource, ResourceElement } from "@assistant-ui/tap";
|
|
2
|
-
import type {
|
|
3
|
-
AssistantClient,
|
|
4
|
-
ClientNames,
|
|
5
|
-
AssistantClientAccessor,
|
|
6
|
-
ClientMeta,
|
|
7
|
-
} from "../types/client";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Creates a derived client field that references a client from a parent scope.
|
|
11
|
-
* The get callback always calls the most recent version (useEffectEvent pattern).
|
|
12
|
-
*
|
|
13
|
-
* IMPORTANT: The `get` callback must return a client that was created via
|
|
14
|
-
* `tapClientResource` (or `tapClientLookup`/`tapClientList` which use it internally).
|
|
15
|
-
* This is required for event scoping to work correctly.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```typescript
|
|
19
|
-
* const aui = useAui({
|
|
20
|
-
* message: Derived({
|
|
21
|
-
* source: "thread",
|
|
22
|
-
* query: { index: 0 },
|
|
23
|
-
* get: (aui) => aui.thread().message({ index: 0 }),
|
|
24
|
-
* }),
|
|
25
|
-
* });
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
export const Derived = resource(
|
|
29
|
-
<K extends ClientNames>(_config: Derived.Props<K>): null => {
|
|
30
|
-
return null;
|
|
31
|
-
},
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
export type DerivedElement<K extends ClientNames> = ResourceElement<
|
|
35
|
-
null,
|
|
36
|
-
Derived.Props<K>
|
|
37
|
-
>;
|
|
38
|
-
|
|
39
|
-
export namespace Derived {
|
|
40
|
-
/**
|
|
41
|
-
* Props passed to a derived client resource element.
|
|
42
|
-
*/
|
|
43
|
-
export type Props<K extends ClientNames> = {
|
|
44
|
-
get: (client: AssistantClient) => ReturnType<AssistantClientAccessor<K>>;
|
|
45
|
-
} & (ClientMeta<K> | { getMeta: (client: AssistantClient) => ClientMeta<K> });
|
|
46
|
-
}
|
package/src/store/utils/index.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
export {
|
|
2
|
-
BaseProxyHandler,
|
|
3
|
-
handleIntrospectionProp,
|
|
4
|
-
} from "./base-proxy-handler";
|
|
5
|
-
export {
|
|
6
|
-
SYMBOL_CLIENT_INDEX,
|
|
7
|
-
getClientIndex,
|
|
8
|
-
type ClientStack,
|
|
9
|
-
tapClientStack,
|
|
10
|
-
tapWithClientStack,
|
|
11
|
-
} from "./tap-client-stack-context";
|
|
12
|
-
export {
|
|
13
|
-
type AssistantTapContextValue,
|
|
14
|
-
withAssistantTapContextProvider,
|
|
15
|
-
tapAssistantClientRef,
|
|
16
|
-
tapAssistantEmit,
|
|
17
|
-
} from "./tap-assistant-context";
|
|
18
|
-
export { NotificationManager } from "./notification-manager";
|
|
19
|
-
export {
|
|
20
|
-
PROXIED_ASSISTANT_STATE_SYMBOL,
|
|
21
|
-
createProxiedAssistantState,
|
|
22
|
-
getProxiedAssistantState,
|
|
23
|
-
} from "./proxied-assistant-state";
|
|
24
|
-
export {
|
|
25
|
-
type RootClients,
|
|
26
|
-
type DerivedClients,
|
|
27
|
-
tapSplitClients,
|
|
28
|
-
} from "./split-clients";
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { resource } from "@assistant-ui/tap";
|
|
2
|
-
import type { ClientStack } from "./tap-client-stack-context";
|
|
3
|
-
import type {
|
|
4
|
-
AssistantEventName,
|
|
5
|
-
AssistantEventPayload,
|
|
6
|
-
} from "../types/events";
|
|
7
|
-
import { Unsubscribe } from "../types/client";
|
|
8
|
-
import { tapConst } from "@assistant-ui/tap";
|
|
9
|
-
|
|
10
|
-
type InternalCallback = (payload: unknown, clientStack: ClientStack) => void;
|
|
11
|
-
|
|
12
|
-
export type NotificationManager = {
|
|
13
|
-
on<TEvent extends AssistantEventName>(
|
|
14
|
-
event: TEvent,
|
|
15
|
-
callback: (
|
|
16
|
-
payload: AssistantEventPayload[TEvent],
|
|
17
|
-
clientStack: ClientStack,
|
|
18
|
-
) => void,
|
|
19
|
-
): Unsubscribe;
|
|
20
|
-
emit<TEvent extends Exclude<AssistantEventName, "*">>(
|
|
21
|
-
event: TEvent,
|
|
22
|
-
payload: AssistantEventPayload[TEvent],
|
|
23
|
-
clientStack: ClientStack,
|
|
24
|
-
): void;
|
|
25
|
-
subscribe(callback: () => void): Unsubscribe;
|
|
26
|
-
notifySubscribers(): void;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const NotificationManager = resource((): NotificationManager => {
|
|
30
|
-
return tapConst(() => {
|
|
31
|
-
const listeners = new Map<string, Set<InternalCallback>>();
|
|
32
|
-
const wildcardListeners = new Set<InternalCallback>();
|
|
33
|
-
const subscribers = new Set<() => void>();
|
|
34
|
-
|
|
35
|
-
return {
|
|
36
|
-
on(event, callback) {
|
|
37
|
-
const cb = callback as InternalCallback;
|
|
38
|
-
if (event === "*") {
|
|
39
|
-
wildcardListeners.add(cb);
|
|
40
|
-
return () => wildcardListeners.delete(cb);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
let set = listeners.get(event);
|
|
44
|
-
if (!set) {
|
|
45
|
-
set = new Set();
|
|
46
|
-
listeners.set(event, set);
|
|
47
|
-
}
|
|
48
|
-
set.add(cb);
|
|
49
|
-
|
|
50
|
-
return () => {
|
|
51
|
-
set!.delete(cb);
|
|
52
|
-
if (set!.size === 0) listeners.delete(event);
|
|
53
|
-
};
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
emit(event, payload, clientStack) {
|
|
57
|
-
const eventListeners = listeners.get(event);
|
|
58
|
-
if (!eventListeners && wildcardListeners.size === 0) return;
|
|
59
|
-
|
|
60
|
-
queueMicrotask(() => {
|
|
61
|
-
const errors = [];
|
|
62
|
-
if (eventListeners) {
|
|
63
|
-
for (const cb of eventListeners) {
|
|
64
|
-
try {
|
|
65
|
-
cb(payload, clientStack);
|
|
66
|
-
} catch (e) {
|
|
67
|
-
errors.push(e);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (wildcardListeners.size > 0) {
|
|
72
|
-
const wrapped = { event, payload };
|
|
73
|
-
for (const cb of wildcardListeners) {
|
|
74
|
-
try {
|
|
75
|
-
cb(wrapped, clientStack);
|
|
76
|
-
} catch (e) {
|
|
77
|
-
errors.push(e);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (errors.length > 0) {
|
|
83
|
-
if (errors.length === 1) {
|
|
84
|
-
throw errors[0];
|
|
85
|
-
} else {
|
|
86
|
-
for (const error of errors) {
|
|
87
|
-
console.error(error);
|
|
88
|
-
}
|
|
89
|
-
throw new AggregateError(
|
|
90
|
-
errors,
|
|
91
|
-
"Errors occurred during event emission",
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
},
|
|
97
|
-
|
|
98
|
-
subscribe(callback) {
|
|
99
|
-
subscribers.add(callback);
|
|
100
|
-
return () => subscribers.delete(callback);
|
|
101
|
-
},
|
|
102
|
-
|
|
103
|
-
notifySubscribers() {
|
|
104
|
-
for (const cb of subscribers) {
|
|
105
|
-
try {
|
|
106
|
-
cb();
|
|
107
|
-
} catch (e) {
|
|
108
|
-
console.error("NotificationManager: subscriber callback error", e);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
}, []);
|
|
114
|
-
});
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { getClientState } from "./tap-client-resource";
|
|
2
|
-
import type { AssistantClient, AssistantState } from "../types/client";
|
|
3
|
-
import {
|
|
4
|
-
BaseProxyHandler,
|
|
5
|
-
handleIntrospectionProp,
|
|
6
|
-
} from "./base-proxy-handler";
|
|
7
|
-
|
|
8
|
-
export const PROXIED_ASSISTANT_STATE_SYMBOL = Symbol(
|
|
9
|
-
"assistant-ui.store.proxiedAssistantState",
|
|
10
|
-
);
|
|
11
|
-
|
|
12
|
-
const isIgnoredKey = (key: string | symbol): key is "on" | "subscribe" => {
|
|
13
|
-
return key === "on" || key === "subscribe" || typeof key === "symbol";
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Proxied state that lazily accesses scope states
|
|
18
|
-
*/
|
|
19
|
-
export const createProxiedAssistantState = (
|
|
20
|
-
client: AssistantClient,
|
|
21
|
-
): AssistantState => {
|
|
22
|
-
class ProxiedAssistantStateProxyHandler
|
|
23
|
-
extends BaseProxyHandler
|
|
24
|
-
implements ProxyHandler<AssistantState>
|
|
25
|
-
{
|
|
26
|
-
get(_: unknown, prop: string | symbol) {
|
|
27
|
-
const introspection = handleIntrospectionProp(prop, "AssistantState");
|
|
28
|
-
if (introspection !== false) return introspection;
|
|
29
|
-
const scope = prop as keyof AssistantClient;
|
|
30
|
-
if (isIgnoredKey(scope)) return undefined;
|
|
31
|
-
return getClientState(client[scope]());
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
ownKeys(): ArrayLike<string | symbol> {
|
|
35
|
-
return Object.keys(client).filter((key) => !isIgnoredKey(key));
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
has(_: unknown, prop: string | symbol): boolean {
|
|
39
|
-
return !isIgnoredKey(prop) && prop in client;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return new Proxy<AssistantState>(
|
|
44
|
-
{} as AssistantState,
|
|
45
|
-
new ProxiedAssistantStateProxyHandler(),
|
|
46
|
-
);
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export const getProxiedAssistantState = (
|
|
50
|
-
client: AssistantClient,
|
|
51
|
-
): AssistantState => {
|
|
52
|
-
return (
|
|
53
|
-
client as unknown as { [PROXIED_ASSISTANT_STATE_SYMBOL]: AssistantState }
|
|
54
|
-
)[PROXIED_ASSISTANT_STATE_SYMBOL];
|
|
55
|
-
};
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { Derived, DerivedElement } from "./derived";
|
|
2
|
-
import type {
|
|
3
|
-
AssistantClient,
|
|
4
|
-
ClientElement,
|
|
5
|
-
ClientNames,
|
|
6
|
-
} from "../types/client";
|
|
7
|
-
import {
|
|
8
|
-
getTransformScopes,
|
|
9
|
-
type ScopesConfig,
|
|
10
|
-
} from "./attach-transform-scopes";
|
|
11
|
-
import { tapMemo } from "@assistant-ui/tap";
|
|
12
|
-
|
|
13
|
-
export type RootClients = Partial<
|
|
14
|
-
Record<ClientNames, ClientElement<ClientNames>>
|
|
15
|
-
>;
|
|
16
|
-
export type DerivedClients = Partial<
|
|
17
|
-
Record<ClientNames, DerivedElement<ClientNames>>
|
|
18
|
-
>;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Splits a clients object into root clients and derived clients,
|
|
22
|
-
* applying transformScopes from root client elements.
|
|
23
|
-
*/
|
|
24
|
-
function splitClients(clients: ScopesConfig, baseClient: AssistantClient) {
|
|
25
|
-
// 1. Collect transforms from root elements and run them iteratively
|
|
26
|
-
let scopes = { ...clients } as Record<
|
|
27
|
-
string,
|
|
28
|
-
ClientElement<ClientNames> | DerivedElement<ClientNames>
|
|
29
|
-
>;
|
|
30
|
-
const visited = new Set<(...args: any[]) => any>();
|
|
31
|
-
|
|
32
|
-
let changed = true;
|
|
33
|
-
while (changed) {
|
|
34
|
-
changed = false;
|
|
35
|
-
for (const clientElement of Object.values(scopes)) {
|
|
36
|
-
if (clientElement.type === (Derived as unknown)) continue;
|
|
37
|
-
if (visited.has(clientElement.type)) continue;
|
|
38
|
-
visited.add(clientElement.type);
|
|
39
|
-
|
|
40
|
-
const transform = getTransformScopes(clientElement.type);
|
|
41
|
-
if (transform) {
|
|
42
|
-
scopes = transform(scopes, baseClient) as typeof scopes;
|
|
43
|
-
changed = true;
|
|
44
|
-
break; // restart iteration since scopes may have new root elements
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// 2. Split result into root/derived
|
|
50
|
-
const rootClients: RootClients = {};
|
|
51
|
-
const derivedClients: DerivedClients = {};
|
|
52
|
-
|
|
53
|
-
for (const [key, clientElement] of Object.entries(scopes) as [
|
|
54
|
-
ClientNames,
|
|
55
|
-
ClientElement<ClientNames> | DerivedElement<ClientNames>,
|
|
56
|
-
][]) {
|
|
57
|
-
if (clientElement.type === (Derived as unknown)) {
|
|
58
|
-
derivedClients[key] = clientElement as DerivedElement<ClientNames>;
|
|
59
|
-
} else {
|
|
60
|
-
rootClients[key] = clientElement as ClientElement<ClientNames>;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return { rootClients, derivedClients };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const tapShallowMemoObject = <T extends object>(object: T) => {
|
|
68
|
-
// biome-ignore lint/correctness/useExhaustiveDependencies: shallow memo
|
|
69
|
-
return tapMemo(() => object, [...Object.entries(object).flat()]);
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export const tapSplitClients = (
|
|
73
|
-
clients: ScopesConfig,
|
|
74
|
-
baseClient: AssistantClient,
|
|
75
|
-
) => {
|
|
76
|
-
const { rootClients, derivedClients } = splitClients(clients, baseClient);
|
|
77
|
-
|
|
78
|
-
return {
|
|
79
|
-
rootClients: tapShallowMemoObject(rootClients),
|
|
80
|
-
derivedClients: tapShallowMemoObject(derivedClients),
|
|
81
|
-
};
|
|
82
|
-
};
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createResourceContext,
|
|
3
|
-
tap,
|
|
4
|
-
withContextProvider,
|
|
5
|
-
tapEffectEvent,
|
|
6
|
-
} from "@assistant-ui/tap";
|
|
7
|
-
import type {
|
|
8
|
-
AssistantEventName,
|
|
9
|
-
AssistantEventPayload,
|
|
10
|
-
} from "../types/events";
|
|
11
|
-
import type { AssistantClient } from "../types/client";
|
|
12
|
-
import { tapClientStack, type ClientStack } from "./tap-client-stack-context";
|
|
13
|
-
|
|
14
|
-
type EmitFn = <TEvent extends Exclude<AssistantEventName, "*">>(
|
|
15
|
-
event: TEvent,
|
|
16
|
-
payload: AssistantEventPayload[TEvent],
|
|
17
|
-
clientStack: ClientStack,
|
|
18
|
-
) => void;
|
|
19
|
-
|
|
20
|
-
export type AssistantTapContextValue = {
|
|
21
|
-
clientRef: { parent: AssistantClient; current: AssistantClient | null };
|
|
22
|
-
emit: EmitFn;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const AssistantTapContext =
|
|
26
|
-
createResourceContext<AssistantTapContextValue | null>(null);
|
|
27
|
-
|
|
28
|
-
export const withAssistantTapContextProvider = <TResult>(
|
|
29
|
-
value: AssistantTapContextValue,
|
|
30
|
-
fn: () => TResult,
|
|
31
|
-
) => {
|
|
32
|
-
return withContextProvider(AssistantTapContext, value, fn);
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const tapAssistantTapContext = () => {
|
|
36
|
-
const ctx = tap(AssistantTapContext);
|
|
37
|
-
if (!ctx) throw new Error("AssistantTapContext is not available");
|
|
38
|
-
|
|
39
|
-
return ctx;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export const tapAssistantClientRef = () => {
|
|
43
|
-
return tapAssistantTapContext().clientRef;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export const tapAssistantEmit = () => {
|
|
47
|
-
const { emit } = tapAssistantTapContext();
|
|
48
|
-
const clientStack = tapClientStack();
|
|
49
|
-
|
|
50
|
-
return tapEffectEvent(
|
|
51
|
-
<TEvent extends Exclude<AssistantEventName, "*">>(
|
|
52
|
-
event: TEvent,
|
|
53
|
-
payload: AssistantEventPayload[TEvent],
|
|
54
|
-
) => {
|
|
55
|
-
emit(event, payload, clientStack);
|
|
56
|
-
},
|
|
57
|
-
);
|
|
58
|
-
};
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { tapConst, tapState, withKey } from "@assistant-ui/tap";
|
|
2
|
-
import type { ContravariantResource } from "@assistant-ui/tap";
|
|
3
|
-
import { tapClientLookup } from "./tap-client-lookup";
|
|
4
|
-
import type { ClientMethods } from "../types/client";
|
|
5
|
-
|
|
6
|
-
type InferClientState<TMethods> = TMethods extends {
|
|
7
|
-
getState: () => infer S;
|
|
8
|
-
}
|
|
9
|
-
? S
|
|
10
|
-
: unknown;
|
|
11
|
-
|
|
12
|
-
type DataHandle<TData> = { data: TData | undefined; hasData: boolean };
|
|
13
|
-
|
|
14
|
-
const createProps = <TData>(
|
|
15
|
-
key: string,
|
|
16
|
-
data: DataHandle<TData>,
|
|
17
|
-
remove: () => void,
|
|
18
|
-
): tapClientList.ResourceProps<TData> => {
|
|
19
|
-
return {
|
|
20
|
-
key,
|
|
21
|
-
getInitialData: () => {
|
|
22
|
-
if (!data.hasData) {
|
|
23
|
-
throw new Error(
|
|
24
|
-
"getInitialData may only be called during initial render",
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
return data.data!;
|
|
28
|
-
},
|
|
29
|
-
remove,
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
export const tapClientList = <TData, TMethods extends ClientMethods>(
|
|
34
|
-
props: tapClientList.Props<TData, TMethods>,
|
|
35
|
-
): {
|
|
36
|
-
state: InferClientState<TMethods>[];
|
|
37
|
-
get: (lookup: { index: number } | { key: string }) => TMethods;
|
|
38
|
-
add: (initialData: TData) => void;
|
|
39
|
-
} => {
|
|
40
|
-
const { initialValues, getKey, resource: Resource } = props;
|
|
41
|
-
|
|
42
|
-
type Props = tapClientList.ResourceProps<TData>;
|
|
43
|
-
|
|
44
|
-
const initialDataHandles: DataHandle<TData>[] = tapConst(() => [], []);
|
|
45
|
-
|
|
46
|
-
const [items, setItems] = tapState<Record<string, Props>>(() => {
|
|
47
|
-
const entries: [string, Props][] = [];
|
|
48
|
-
for (const data of initialValues) {
|
|
49
|
-
const key = getKey(data);
|
|
50
|
-
const handle = { data, hasData: true };
|
|
51
|
-
entries.push([
|
|
52
|
-
key,
|
|
53
|
-
createProps(key, handle, () => {
|
|
54
|
-
setItems((items) => {
|
|
55
|
-
const newItems = { ...items };
|
|
56
|
-
delete newItems[key];
|
|
57
|
-
return newItems;
|
|
58
|
-
});
|
|
59
|
-
}),
|
|
60
|
-
]);
|
|
61
|
-
initialDataHandles.push(handle);
|
|
62
|
-
}
|
|
63
|
-
return Object.fromEntries(entries);
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
const lookup = tapClientLookup<TMethods>(
|
|
67
|
-
() =>
|
|
68
|
-
Object.values(items).map((props) => withKey(props.key, Resource(props))),
|
|
69
|
-
[items, Resource],
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
initialDataHandles.forEach((handle) => {
|
|
73
|
-
handle.data = undefined;
|
|
74
|
-
handle.hasData = false;
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
const add = (data: TData) => {
|
|
78
|
-
const key = getKey(data);
|
|
79
|
-
setItems((items) => {
|
|
80
|
-
if (key in items) {
|
|
81
|
-
throw new Error(
|
|
82
|
-
`Tried to add item with a key ${key} that already exists`,
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const handle = { data, hasData: true };
|
|
87
|
-
initialDataHandles.push(handle);
|
|
88
|
-
|
|
89
|
-
return {
|
|
90
|
-
...items,
|
|
91
|
-
[key]: createProps(key, handle, () => {
|
|
92
|
-
setItems((items) => {
|
|
93
|
-
const newItems = { ...items };
|
|
94
|
-
delete newItems[key];
|
|
95
|
-
return newItems;
|
|
96
|
-
});
|
|
97
|
-
}),
|
|
98
|
-
};
|
|
99
|
-
});
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
return {
|
|
103
|
-
state: lookup.state,
|
|
104
|
-
get: lookup.get,
|
|
105
|
-
add,
|
|
106
|
-
};
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
export namespace tapClientList {
|
|
110
|
-
export type ResourceProps<TData> = {
|
|
111
|
-
key: string;
|
|
112
|
-
getInitialData: () => TData;
|
|
113
|
-
remove: () => void;
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
export type Props<TData, TMethods extends ClientMethods> = {
|
|
117
|
-
initialValues: TData[];
|
|
118
|
-
getKey: (data: TData) => string;
|
|
119
|
-
resource: ContravariantResource<TMethods, ResourceProps<TData>>;
|
|
120
|
-
};
|
|
121
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
tapMemo,
|
|
3
|
-
tapResource,
|
|
4
|
-
tapResources,
|
|
5
|
-
type ResourceElement,
|
|
6
|
-
} from "@assistant-ui/tap";
|
|
7
|
-
import type { ClientMethods } from "../types/client";
|
|
8
|
-
import { ClientResource } from "./tap-client-resource";
|
|
9
|
-
import { wrapperResource } from "./wrapper-resource";
|
|
10
|
-
|
|
11
|
-
type InferClientState<TMethods> = TMethods extends {
|
|
12
|
-
getState: () => infer S;
|
|
13
|
-
}
|
|
14
|
-
? S
|
|
15
|
-
: unknown;
|
|
16
|
-
|
|
17
|
-
const ClientResourceWithKey = wrapperResource(
|
|
18
|
-
<TMethods extends ClientMethods>(el: ResourceElement<TMethods>) => {
|
|
19
|
-
if (el.key === undefined) {
|
|
20
|
-
throw new Error("tapClientResource: Element has no key");
|
|
21
|
-
}
|
|
22
|
-
return tapResource(ClientResource(el)) as {
|
|
23
|
-
methods: TMethods;
|
|
24
|
-
state: InferClientState<TMethods>;
|
|
25
|
-
key: string | number;
|
|
26
|
-
};
|
|
27
|
-
},
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
export function tapClientLookup<TMethods extends ClientMethods>(
|
|
31
|
-
getElements: () => readonly ResourceElement<TMethods>[],
|
|
32
|
-
getElementsDeps: readonly unknown[],
|
|
33
|
-
): {
|
|
34
|
-
state: InferClientState<TMethods>[];
|
|
35
|
-
get: (lookup: { index: number } | { key: string }) => TMethods;
|
|
36
|
-
} {
|
|
37
|
-
const resources = tapResources(
|
|
38
|
-
() => getElements().map((el) => ClientResourceWithKey(el)),
|
|
39
|
-
// biome-ignore lint/correctness/useExhaustiveDependencies: getElementsDeps is passed through from caller
|
|
40
|
-
getElementsDeps,
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
const keys = tapMemo(() => Object.keys(resources), [resources]);
|
|
44
|
-
|
|
45
|
-
// For arrays, track element key -> index mapping
|
|
46
|
-
const keyToIndex = tapMemo(() => {
|
|
47
|
-
return resources.reduce(
|
|
48
|
-
(acc, resource, index) => {
|
|
49
|
-
acc[resource.key] = index;
|
|
50
|
-
return acc;
|
|
51
|
-
},
|
|
52
|
-
{} as Record<string, number>,
|
|
53
|
-
);
|
|
54
|
-
}, [resources]);
|
|
55
|
-
|
|
56
|
-
const state = tapMemo(() => {
|
|
57
|
-
return resources.map((r) => r.state);
|
|
58
|
-
}, [resources]);
|
|
59
|
-
|
|
60
|
-
return {
|
|
61
|
-
state,
|
|
62
|
-
get: (lookup: { index: number } | { key: string }) => {
|
|
63
|
-
if ("index" in lookup) {
|
|
64
|
-
if (lookup.index < 0 || lookup.index >= keys.length) {
|
|
65
|
-
throw new Error(
|
|
66
|
-
`tapClientLookup: Index ${lookup.index} out of bounds (length: ${keys.length})`,
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
return resources[lookup.index]!.methods;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const index = keyToIndex[lookup.key];
|
|
73
|
-
if (index === undefined) {
|
|
74
|
-
throw new Error(`tapClientLookup: Key "${lookup.key}" not found`);
|
|
75
|
-
}
|
|
76
|
-
return resources[index]!.methods;
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
}
|