@tdesign-react/chat 1.0.2-alpha.8 → 1.1.0-alpha.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/es/_chunks/dep-f2051ebd.js +839 -0
- package/es/_chunks/dep-f2051ebd.js.map +1 -0
- package/es/_util/reactify.d.ts +1 -2
- package/es/_util/reactify.js +81 -231
- package/es/_util/reactify.js.map +1 -1
- package/es/_util/useDynamicStyle.js +1 -1
- package/es/attachments/index.js +4 -6
- package/es/attachments/index.js.map +1 -1
- package/es/chat-actionbar/_example-js/base.d.ts +2 -0
- package/es/chat-actionbar/_example-js/custom.d.ts +2 -0
- package/es/chat-actionbar/_example-js/style.d.ts +2 -0
- package/es/chat-actionbar/index.js +4 -6
- package/es/chat-actionbar/index.js.map +1 -1
- package/es/chat-attachments/_example-js/base.d.ts +2 -0
- package/es/chat-attachments/_example-js/scroll-x.d.ts +2 -0
- package/es/chat-attachments/_example-js/scroll-y.d.ts +2 -0
- package/es/chat-attachments/index.js +3 -1
- package/es/chat-attachments/index.js.map +1 -1
- package/es/chat-engine/_example-js/agui-basic.d.ts +10 -0
- package/es/chat-engine/_example-js/agui-comprehensive.d.ts +2 -0
- package/es/chat-engine/_example-js/agui-test.d.ts +11 -0
- package/es/chat-engine/_example-js/agui-toolcall.d.ts +5 -0
- package/es/chat-engine/_example-js/agui-videoclip.d.ts +8 -0
- package/es/chat-engine/_example-js/agui.d.ts +1 -0
- package/es/chat-engine/_example-js/basic.d.ts +9 -0
- package/es/chat-engine/_example-js/components/HotelCard.d.ts +3 -0
- package/es/chat-engine/_example-js/components/HumanInputForm.d.ts +6 -0
- package/es/chat-engine/_example-js/components/HumanInputResult.d.ts +3 -0
- package/es/chat-engine/_example-js/components/ItineraryCard.d.ts +3 -0
- package/es/chat-engine/_example-js/components/PlanningStatePanel.d.ts +4 -0
- package/es/chat-engine/_example-js/components/Toolcall.d.ts +4 -0
- package/es/chat-engine/_example-js/components/WeatherCard.d.ts +3 -0
- package/es/chat-engine/_example-js/components/login.d.ts +1 -0
- package/es/chat-engine/_example-js/comprehensive.d.ts +12 -0
- package/es/chat-engine/_example-js/custom-content.d.ts +1 -0
- package/es/chat-engine/_example-js/hookComponent.d.ts +1 -0
- package/es/chat-engine/_example-js/initial-messages.d.ts +9 -0
- package/es/chat-engine/_example-js/instance-methods.d.ts +13 -0
- package/es/chat-engine/_example-js/travel-actions.d.ts +91 -0
- package/es/chat-engine/_example-js/travelToolcall.d.ts +1 -0
- package/es/chat-engine/components/a2ui/A2UIActivityRenderer.d.ts +196 -0
- package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js +301 -0
- package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UIComponentRenderer.d.ts +37 -0
- package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js +116 -0
- package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UIErrorBoundary.d.ts +42 -0
- package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js +113 -0
- package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UISkeleton.d.ts +60 -0
- package/es/chat-engine/components/a2ui/A2UISkeleton.js +197 -0
- package/es/chat-engine/components/a2ui/A2UISkeleton.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.d.ts +44 -0
- package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js +139 -0
- package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UICard.d.ts +22 -0
- package/es/chat-engine/components/a2ui/containers/A2UICard.js +82 -0
- package/es/chat-engine/components/a2ui/containers/A2UICard.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UIColumn.d.ts +18 -0
- package/es/chat-engine/components/a2ui/containers/A2UIColumn.js +81 -0
- package/es/chat-engine/components/a2ui/containers/A2UIColumn.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UIList.d.ts +14 -0
- package/es/chat-engine/components/a2ui/containers/A2UIList.js +62 -0
- package/es/chat-engine/components/a2ui/containers/A2UIList.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UIRow.d.ts +20 -0
- package/es/chat-engine/components/a2ui/containers/A2UIRow.js +84 -0
- package/es/chat-engine/components/a2ui/containers/A2UIRow.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UITabs.d.ts +14 -0
- package/es/chat-engine/components/a2ui/containers/A2UITabs.js +69 -0
- package/es/chat-engine/components/a2ui/containers/A2UITabs.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/index.d.ts +8 -0
- package/es/chat-engine/components/a2ui/containers/index.js +30 -0
- package/es/chat-engine/components/a2ui/containers/index.js.map +1 -0
- package/es/chat-engine/components/a2ui/index.d.ts +11 -0
- package/es/chat-engine/components/a2ui/index.js +62 -0
- package/es/chat-engine/components/a2ui/index.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIButton.d.ts +33 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIButton.js +80 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIButton.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js +43 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.d.ts +50 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js +54 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.d.ts +13 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js +89 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIDivider.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js +25 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIIcon.d.ts +13 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js +138942 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIImage.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIImage.js +75 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIImage.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIInput.d.ts +20 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIInput.js +63 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIInput.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.d.ts +56 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js +64 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UISlider.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UISlider.js +55 -0
- package/es/chat-engine/components/a2ui/primitives/A2UISlider.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIText.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIText.js +104 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIText.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UITextField.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UITextField.js +80 -0
- package/es/chat-engine/components/a2ui/primitives/A2UITextField.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/index.d.ts +15 -0
- package/es/chat-engine/components/a2ui/primitives/index.js +39 -0
- package/es/chat-engine/components/a2ui/primitives/index.js.map +1 -0
- package/es/chat-engine/components/a2ui/registry.d.ts +35 -0
- package/es/chat-engine/components/a2ui/registry.js +74 -0
- package/es/chat-engine/components/a2ui/registry.js.map +1 -0
- package/es/{chatbot/components/toolcall → chat-engine/components/activity}/index.d.ts +1 -0
- package/es/chat-engine/components/activity/index.js +18 -0
- package/es/chat-engine/components/activity/index.js.map +1 -0
- package/es/chat-engine/components/activity/registry.d.ts +44 -0
- package/es/{chatbot/components/toolcall → chat-engine/components/activity}/registry.js +32 -22
- package/es/chat-engine/components/activity/registry.js.map +1 -0
- package/es/chat-engine/components/activity/render.d.ts +11 -0
- package/es/chat-engine/components/activity/render.js +107 -0
- package/es/chat-engine/components/activity/render.js.map +1 -0
- package/es/chat-engine/components/activity/types.d.ts +32 -0
- package/es/chat-engine/components/activity/types.js +7 -0
- package/es/chat-engine/components/activity/types.js.map +1 -0
- package/es/chat-engine/components/index.d.ts +4 -0
- package/es/chat-engine/components/index.js +76 -0
- package/es/chat-engine/components/index.js.map +1 -0
- package/es/chat-engine/components/json-render/A2UIJsonRenderActivityRenderer.d.ts +36 -0
- package/es/chat-engine/components/json-render/A2UIJsonRenderActivityRenderer.js +36 -0
- package/es/chat-engine/components/json-render/A2UIJsonRenderActivityRenderer.js.map +1 -0
- package/es/chat-engine/components/json-render/JsonRenderActivityRenderer.d.ts +46 -0
- package/es/chat-engine/components/json-render/JsonRenderActivityRenderer.js +36 -0
- package/es/chat-engine/components/json-render/JsonRenderActivityRenderer.js.map +1 -0
- package/es/chat-engine/components/json-render/SurfaceStateManager.d.ts +113 -0
- package/es/chat-engine/components/json-render/SurfaceStateManager.js +195 -0
- package/es/chat-engine/components/json-render/SurfaceStateManager.js.map +1 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-to-jsonrender.d.ts +49 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-to-jsonrender.js +307 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-to-jsonrender.js.map +1 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-types.d.ts +96 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-types.js +7 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-types.js.map +1 -0
- package/es/chat-engine/components/json-render/adapters/index.d.ts +7 -0
- package/es/chat-engine/components/json-render/adapters/index.js +11 -0
- package/es/chat-engine/components/json-render/adapters/index.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-binding.d.ts +64 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-binding.js +36 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-binding.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-registry.d.ts +78 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-registry.js +36 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-registry.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/button.d.ts +14 -0
- package/es/chat-engine/components/json-render/catalog/button.js +71 -0
- package/es/chat-engine/components/json-render/catalog/button.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/card.d.ts +11 -0
- package/es/chat-engine/components/json-render/catalog/card.js +57 -0
- package/es/chat-engine/components/json-render/catalog/card.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/index.d.ts +127 -0
- package/es/chat-engine/components/json-render/catalog/index.js +36 -0
- package/es/chat-engine/components/json-render/catalog/index.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/input.d.ts +20 -0
- package/es/chat-engine/components/json-render/catalog/input.js +36 -0
- package/es/chat-engine/components/json-render/catalog/input.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/layout.d.ts +44 -0
- package/es/chat-engine/components/json-render/catalog/layout.js +129 -0
- package/es/chat-engine/components/json-render/catalog/layout.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/text.d.ts +11 -0
- package/es/chat-engine/components/json-render/catalog/text.js +31 -0
- package/es/chat-engine/components/json-render/catalog/text.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog.d.ts +549 -0
- package/es/chat-engine/components/json-render/catalog.js +147 -0
- package/es/chat-engine/components/json-render/catalog.js.map +1 -0
- package/es/chat-engine/components/json-render/config.d.ts +154 -0
- package/es/chat-engine/components/json-render/config.js +36 -0
- package/es/chat-engine/components/json-render/config.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/actions.d.ts +74 -0
- package/es/chat-engine/components/json-render/contexts/actions.js +290 -0
- package/es/chat-engine/components/json-render/contexts/actions.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/data.d.ts +45 -0
- package/es/chat-engine/components/json-render/contexts/data.js +104 -0
- package/es/chat-engine/components/json-render/contexts/data.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/validation.d.ts +59 -0
- package/es/chat-engine/components/json-render/contexts/validation.js +151 -0
- package/es/chat-engine/components/json-render/contexts/validation.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/visibility.d.ts +29 -0
- package/es/chat-engine/components/json-render/contexts/visibility.js +56 -0
- package/es/chat-engine/components/json-render/contexts/visibility.js.map +1 -0
- package/es/chat-engine/components/json-render/engine.d.ts +58 -0
- package/es/chat-engine/components/json-render/engine.js +88 -0
- package/es/chat-engine/components/json-render/engine.js.map +1 -0
- package/es/chat-engine/components/json-render/index.d.ts +34 -0
- package/es/chat-engine/components/json-render/index.js +36 -0
- package/es/chat-engine/components/json-render/index.js.map +1 -0
- package/es/chat-engine/components/json-render/performance.d.ts +91 -0
- package/es/chat-engine/components/json-render/performance.js +135 -0
- package/es/chat-engine/components/json-render/performance.js.map +1 -0
- package/es/chat-engine/components/json-render/renderer.d.ts +71 -0
- package/es/chat-engine/components/json-render/renderer.js +124 -0
- package/es/chat-engine/components/json-render/renderer.js.map +1 -0
- package/es/chat-engine/components/json-render/types.d.ts +69 -0
- package/es/chat-engine/components/json-render/types.js +7 -0
- package/es/chat-engine/components/json-render/types.js.map +1 -0
- package/es/chat-engine/components/provider/agent-state.js +39 -2
- package/es/chat-engine/components/provider/agent-state.js.map +1 -1
- package/es/chat-engine/components/toolcall/index.js +35 -2
- package/es/chat-engine/components/toolcall/index.js.map +1 -1
- package/es/chat-engine/components/toolcall/registry.js +1 -1
- package/es/chat-engine/components/toolcall/render.d.ts +1 -1
- package/es/chat-engine/components/toolcall/render.js +102 -26
- package/es/chat-engine/components/toolcall/render.js.map +1 -1
- package/es/chat-engine/components/toolcall/types.js +1 -1
- package/es/chat-engine/core/a2ui/index.d.ts +10 -0
- package/es/chat-engine/core/a2ui/index.js +24 -0
- package/es/chat-engine/core/a2ui/index.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
- package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js +438 -0
- package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/ComponentTree.d.ts +53 -0
- package/es/chat-engine/core/a2ui/processor/ComponentTree.js +158 -0
- package/es/chat-engine/core/a2ui/processor/ComponentTree.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/DataStore.d.ts +63 -0
- package/es/chat-engine/core/a2ui/processor/DataStore.js +172 -0
- package/es/chat-engine/core/a2ui/processor/DataStore.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/PathResolver.d.ts +47 -0
- package/es/chat-engine/core/a2ui/processor/PathResolver.js +99 -0
- package/es/chat-engine/core/a2ui/processor/PathResolver.js.map +1 -0
- package/es/chat-engine/core/a2ui/types/index.d.ts +4 -0
- package/es/chat-engine/core/a2ui/types/index.js +9 -0
- package/es/chat-engine/core/a2ui/types/index.js.map +1 -0
- package/es/chat-engine/core/a2ui/types/types.d.ts +770 -0
- package/es/chat-engine/core/a2ui/types/types.js +104 -0
- package/es/chat-engine/core/a2ui/types/types.js.map +1 -0
- package/es/chat-engine/core/a2ui/utils/binding.d.ts +34 -0
- package/es/chat-engine/core/a2ui/utils/binding.js +1784 -0
- package/es/chat-engine/core/a2ui/utils/binding.js.map +1 -0
- package/es/chat-engine/core/a2ui/utils/index.d.ts +5 -0
- package/es/chat-engine/core/a2ui/utils/index.js +13 -0
- package/es/chat-engine/core/a2ui/utils/index.js.map +1 -0
- package/es/chat-engine/core/a2ui/utils/validation.d.ts +70 -0
- package/es/chat-engine/core/a2ui/utils/validation.js +333 -0
- package/es/chat-engine/core/a2ui/utils/validation.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/activity-manager.d.ts +102 -0
- package/es/chat-engine/core/adapters/agui/activity-manager.js +144 -0
- package/es/chat-engine/core/adapters/agui/activity-manager.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +149 -0
- package/es/chat-engine/core/adapters/agui/event-mapper.js +415 -0
- package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/events.d.ts +1550 -0
- package/es/chat-engine/core/adapters/agui/events.js +199 -0
- package/es/chat-engine/core/adapters/agui/events.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/index.d.ts +95 -0
- package/es/chat-engine/core/adapters/agui/index.js +195 -0
- package/es/chat-engine/core/adapters/agui/index.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/state-manager.d.ts +99 -0
- package/es/chat-engine/core/adapters/agui/state-manager.js +168 -0
- package/es/chat-engine/core/adapters/agui/state-manager.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/types.d.ts +818 -0
- package/es/chat-engine/core/adapters/agui/types.js +95 -0
- package/es/chat-engine/core/adapters/agui/types.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/utils.d.ts +203 -0
- package/es/chat-engine/core/adapters/agui/utils.js +330 -0
- package/es/chat-engine/core/adapters/agui/utils.js.map +1 -0
- package/es/chat-engine/core/event-bus/ChatEventBus.d.ts +88 -0
- package/es/chat-engine/core/event-bus/ChatEventBus.js +295 -0
- package/es/chat-engine/core/event-bus/ChatEventBus.js.map +1 -0
- package/es/chat-engine/core/event-bus/index.d.ts +5 -0
- package/es/chat-engine/core/event-bus/index.js +13 -0
- package/es/chat-engine/core/event-bus/index.js.map +1 -0
- package/es/chat-engine/core/event-bus/types.d.ts +230 -0
- package/es/chat-engine/core/event-bus/types.js +32 -0
- package/es/chat-engine/core/event-bus/types.js.map +1 -0
- package/es/chat-engine/core/index.d.ts +147 -0
- package/es/chat-engine/core/index.js +754 -0
- package/es/chat-engine/core/index.js.map +1 -0
- package/es/chat-engine/core/processor/index.d.ts +20 -0
- package/es/chat-engine/core/processor/index.js +146 -0
- package/es/chat-engine/core/processor/index.js.map +1 -0
- package/es/chat-engine/core/server/batch-client.d.ts +20 -0
- package/es/chat-engine/core/server/batch-client.js +114 -0
- package/es/chat-engine/core/server/batch-client.js.map +1 -0
- package/es/chat-engine/core/server/connection-manager.d.ts +39 -0
- package/es/chat-engine/core/server/connection-manager.js +84 -0
- package/es/chat-engine/core/server/connection-manager.js.map +1 -0
- package/es/chat-engine/core/server/errors.d.ts +22 -0
- package/es/chat-engine/core/server/errors.js +80 -0
- package/es/chat-engine/core/server/errors.js.map +1 -0
- package/es/chat-engine/core/server/index.d.ts +11 -0
- package/es/chat-engine/core/server/index.js +26 -0
- package/es/chat-engine/core/server/index.js.map +1 -0
- package/es/chat-engine/core/server/llm-service.d.ts +44 -0
- package/es/chat-engine/core/server/llm-service.js +200 -0
- package/es/chat-engine/core/server/llm-service.js.map +1 -0
- package/es/chat-engine/core/server/sse-client.d.ts +77 -0
- package/es/chat-engine/core/server/sse-client.js +362 -0
- package/es/chat-engine/core/server/sse-client.js.map +1 -0
- package/es/chat-engine/core/server/sse-parser.d.ts +49 -0
- package/es/chat-engine/core/server/sse-parser.js +116 -0
- package/es/chat-engine/core/server/sse-parser.js.map +1 -0
- package/es/chat-engine/core/server/types.d.ts +54 -0
- package/es/chat-engine/core/server/types.js +28 -0
- package/es/chat-engine/core/server/types.js.map +1 -0
- package/es/chat-engine/core/store/message.d.ts +27 -0
- package/es/chat-engine/core/store/message.js +263 -0
- package/es/chat-engine/core/store/message.js.map +1 -0
- package/es/chat-engine/core/store/model.d.ts +8 -0
- package/es/chat-engine/core/store/model.js +65 -0
- package/es/chat-engine/core/store/model.js.map +1 -0
- package/es/chat-engine/core/store/reactiveState.d.ts +52 -0
- package/es/chat-engine/core/store/reactiveState.js +1359 -0
- package/es/chat-engine/core/store/reactiveState.js.map +1 -0
- package/es/chat-engine/core/type.d.ts +271 -0
- package/es/chat-engine/core/type.js +7 -0
- package/es/chat-engine/core/type.js.map +1 -0
- package/es/chat-engine/core/utils/eventEmitter.d.ts +10 -0
- package/es/chat-engine/core/utils/eventEmitter.js +67 -0
- package/es/chat-engine/core/utils/eventEmitter.js.map +1 -0
- package/es/chat-engine/core/utils/index.d.ts +33 -0
- package/es/chat-engine/core/utils/index.js +999 -0
- package/es/chat-engine/core/utils/index.js.map +1 -0
- package/es/chat-engine/core/utils/logger.d.ts +30 -0
- package/es/chat-engine/core/utils/logger.js +87 -0
- package/es/chat-engine/core/utils/logger.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/A2UIContext.d.ts +90 -0
- package/es/chat-engine/hooks/a2ui/A2UIContext.js +97 -0
- package/es/chat-engine/hooks/a2ui/A2UIContext.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/index.d.ts +12 -0
- package/es/chat-engine/hooks/a2ui/index.js +19 -0
- package/es/chat-engine/hooks/a2ui/useA2UIAction.d.ts +40 -0
- package/es/chat-engine/hooks/a2ui/useA2UIAction.js +74 -0
- package/es/chat-engine/hooks/a2ui/useA2UIAction.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/useA2UISurface.d.ts +36 -0
- package/es/chat-engine/hooks/a2ui/useA2UISurface.js +39 -0
- package/es/chat-engine/hooks/a2ui/useA2UISurface.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/useDataBinding.d.ts +53 -0
- package/es/chat-engine/hooks/a2ui/useDataBinding.js +111 -0
- package/es/chat-engine/hooks/a2ui/useDataBinding.js.map +1 -0
- package/es/chat-engine/hooks/index.d.ts +4 -0
- package/es/chat-engine/hooks/index.js +54 -0
- package/es/chat-engine/hooks/index.js.map +1 -0
- package/es/chat-engine/hooks/useAgentActivity.d.ts +15 -0
- package/es/chat-engine/hooks/useAgentActivity.js +73 -0
- package/es/chat-engine/hooks/useAgentActivity.js.map +1 -0
- package/es/chat-engine/hooks/useAgentState.js +39 -2
- package/es/chat-engine/hooks/useAgentState.js.map +1 -1
- package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
- package/es/chat-engine/hooks/useChat.d.ts +3 -3
- package/es/chat-engine/hooks/useChat.js +41 -3
- package/es/chat-engine/hooks/useChat.js.map +1 -1
- package/es/chat-engine/hooks/useJsonRenderActivity.d.ts +56 -0
- package/es/chat-engine/hooks/useJsonRenderActivity.js +63 -0
- package/es/chat-engine/hooks/useJsonRenderActivity.js.map +1 -0
- package/es/chat-engine/index.d.ts +3 -3
- package/es/chat-engine/index.js +61 -5
- package/es/chat-engine/index.js.map +1 -1
- package/es/chat-filecard/_example-js/base.d.ts +1 -0
- package/es/chat-filecard/index.js +4 -6
- package/es/chat-filecard/index.js.map +1 -1
- package/es/chat-loading/_example-js/base.d.ts +2 -0
- package/es/chat-loading/_example-js/text.d.ts +2 -0
- package/es/chat-loading/index.js +4 -6
- package/es/chat-loading/index.js.map +1 -1
- package/es/chat-markdown/_example-js/base.d.ts +1 -0
- package/es/chat-markdown/_example-js/custom.d.ts +2 -0
- package/es/chat-markdown/_example-js/event.d.ts +1 -0
- package/es/chat-markdown/_example-js/footnote.d.ts +2 -0
- package/es/chat-markdown/_example-js/plugin.d.ts +2 -0
- package/es/chat-markdown/_example-js/theme.d.ts +2 -0
- package/es/chat-markdown/index.js +4 -6
- package/es/chat-markdown/index.js.map +1 -1
- package/es/chat-message/_example-js/action.d.ts +1 -0
- package/es/chat-message/_example-js/base.d.ts +1 -0
- package/es/chat-message/_example-js/configure.d.ts +1 -0
- package/es/chat-message/_example-js/content.d.ts +1 -0
- package/es/chat-message/_example-js/custom.d.ts +1 -0
- package/es/chat-message/_example-js/handle-actions.d.ts +7 -0
- package/es/chat-message/_example-js/status.d.ts +1 -0
- package/es/chat-message/_example-js/think.d.ts +1 -0
- package/es/chat-message/index.js +4 -6
- package/es/chat-message/index.js.map +1 -1
- package/es/chat-sender/_example-js/attachment.d.ts +2 -0
- package/es/chat-sender/_example-js/base.d.ts +2 -0
- package/es/chat-sender/_example-js/custom.d.ts +2 -0
- package/es/chat-sender/index.js +4 -6
- package/es/chat-sender/index.js.map +1 -1
- package/es/chat-thinking/_example-js/base.d.ts +1 -0
- package/es/chat-thinking/_example-js/style.d.ts +1 -0
- package/es/chat-thinking/index.js +4 -6
- package/es/chat-thinking/index.js.map +1 -1
- package/es/chatbot/_example-js/agent.d.ts +1 -0
- package/es/chatbot/_example-js/agui.d.ts +13 -0
- package/es/chatbot/_example-js/backup/travel.d.ts +1 -0
- package/es/chatbot/_example-js/basic.d.ts +1 -0
- package/es/chatbot/_example-js/code.d.ts +1 -0
- package/es/chatbot/_example-js/components/ItineraryCard.d.ts +3 -0
- package/es/chatbot/_example-js/components/login.d.ts +1 -0
- package/es/chatbot/_example-js/comprehensive.d.ts +1 -0
- package/es/chatbot/_example-js/custom-content.d.ts +1 -0
- package/es/chatbot/_example-js/custom-merge.d.ts +1 -0
- package/es/chatbot/_example-js/custom.d.ts +1 -0
- package/es/chatbot/_example-js/docs.d.ts +1 -0
- package/es/chatbot/_example-js/image.d.ts +1 -0
- package/es/chatbot/_example-js/initial-messages.d.ts +9 -0
- package/es/chatbot/_example-js/instance-methods.d.ts +14 -0
- package/es/chatbot/_example-js/nostream.d.ts +1 -0
- package/es/chatbot/_example-js/quick-start.d.ts +9 -0
- package/es/chatbot/_example-js/research.d.ts +1 -0
- package/es/chatbot/_example-js/role-message-config.d.ts +22 -0
- package/es/chatbot/_example-js/sender-config.d.ts +20 -0
- package/es/chatbot/_example-js/service-config.d.ts +17 -0
- package/es/chatbot/_example-js/simple.d.ts +1 -0
- package/es/chatbot/_example-js/utils/messageRenderer.d.ts +5 -0
- package/es/chatbot/docs/react-best-practice.d.ts +13 -0
- package/es/chatbot/index.js +4 -6
- package/es/chatbot/index.js.map +1 -1
- package/es/index.js +59 -9
- package/es/index.js.map +1 -1
- package/es/style/index.js +1 -1
- package/package.json +6 -3
- package/es/chatbot/components/provider/agent-state.d.ts +0 -5
- package/es/chatbot/components/provider/agent-state.js +0 -28
- package/es/chatbot/components/provider/agent-state.js.map +0 -1
- package/es/chatbot/components/toolcall/index.js +0 -19
- package/es/chatbot/components/toolcall/registry.d.ts +0 -35
- package/es/chatbot/components/toolcall/registry.js.map +0 -1
- package/es/chatbot/components/toolcall/render.d.ts +0 -13
- package/es/chatbot/components/toolcall/render.js +0 -207
- package/es/chatbot/components/toolcall/render.js.map +0 -1
- package/es/chatbot/components/toolcall/types.d.ts +0 -57
- package/es/chatbot/components/toolcall/types.js +0 -15
- package/es/chatbot/components/toolcall/types.js.map +0 -1
- package/es/chatbot/hooks/useAgentState.d.ts +0 -40
- package/es/chatbot/hooks/useAgentState.js +0 -76
- package/es/chatbot/hooks/useAgentState.js.map +0 -1
- package/es/chatbot/hooks/useAgentToolcall.d.ts +0 -28
- package/es/chatbot/hooks/useAgentToolcall.js +0 -78
- package/es/chatbot/hooks/useAgentToolcall.js.map +0 -1
- package/es/chatbot/hooks/useChat.d.ts +0 -11
- package/es/chatbot/hooks/useChat.js +0 -66
- package/es/chatbot/hooks/useChat.js.map +0 -1
- /package/es/{chatbot/components/toolcall → chat-engine/hooks/a2ui}/index.js.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A2uiMessageProcessor.js","sources":["../../../../../../pro-components/chat/chat-engine/core/a2ui/processor/A2uiMessageProcessor.ts"],"sourcesContent":["/**\n * A2UI 消息处理器 v2\n * 完全按照 A2UI v0.9 协议实现\n * \n * 支持四种消息类型:\n * - createSurface: 创建 Surface\n * - updateComponents: 更新组件\n * - updateDataModel: 更新数据模型\n * - deleteSurface: 删除 Surface\n * \n * 实现 External Store 模式,支持 useSyncExternalStore\n */\n\nimport type {\n A2UISurface,\n A2UIComponentBase,\n A2UIServerMessage,\n A2UIAction,\n ActionHandler,\n SkeletonHint,\n ResolvedComponent,\n UserActionMessage,\n} from '../types';\nimport { DataStore } from './DataStore';\nimport { ComponentTree } from './ComponentTree';\nimport { PathResolver } from './PathResolver';\n\nexport type SurfaceSnapshot = Map<string, A2UISurface>;\nexport type SurfaceListener = () => void;\n\n/**\n * A2UI 消息处理器配置\n */\nexport interface A2uiMessageProcessorOptions {\n /** Action 处理回调 */\n onAction?: ActionHandler;\n /** 用户行为消息发送回调 */\n onSendMessage?: (message: UserActionMessage) => void;\n /** 数据变更回调 */\n onDataChange?: (surfaceId: string, path: string, value: unknown) => void;\n /** 验证错误回调 */\n onValidationError?: (errors: Array<{ type: string; message: string; path?: string }>) => void;\n}\n\n/**\n * 内部 Surface 数据结构\n */\ninterface InternalSurface {\n id: string;\n catalogId: string;\n state: 'active' | 'closed' | 'pending';\n components: Map<string, A2UIComponentBase>;\n dataStore: DataStore;\n componentTree: ComponentTree | null;\n skeletonHint?: SkeletonHint;\n updatedAt: number;\n}\n\n/**\n * A2UI 消息处理器\n * \n * 核心功能:\n * 1. 处理 A2UI v0.9 协议消息\n * 2. 管理 Surface 生命周期\n * 3. 维护组件注册表和数据模型\n * 4. 构建组件树\n * 5. 支持 useSyncExternalStore 订阅\n */\nexport class A2uiMessageProcessor {\n private surfaces = new Map<string, InternalSurface>();\n private listeners = new Set<SurfaceListener>();\n private pathResolver = new PathResolver();\n private options: A2uiMessageProcessorOptions;\n \n // 缓存的快照,避免 useSyncExternalStore 无限循环\n private cachedSnapshot: SurfaceSnapshot = new Map();\n private snapshotVersion = 0;\n\n constructor(options: A2uiMessageProcessorOptions = {}) {\n this.options = options;\n // 绑定方法以确保 this 指向正确\n this.subscribe = this.subscribe.bind(this);\n this.getSnapshot = this.getSnapshot.bind(this);\n this.getServerSnapshot = this.getServerSnapshot.bind(this);\n }\n\n // ============= External Store 接口 =============\n\n /**\n * 订阅状态变化(供 useSyncExternalStore 使用)\n */\n subscribe(listener: SurfaceListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * 获取当前快照(供 useSyncExternalStore 使用)\n * 返回缓存的快照,确保引用稳定\n */\n getSnapshot(): SurfaceSnapshot {\n return this.cachedSnapshot;\n }\n\n /**\n * 获取服务端快照(SSR 场景)\n */\n getServerSnapshot(): SurfaceSnapshot {\n return this.cachedSnapshot;\n }\n\n /**\n * 更新缓存的快照\n * 只在数据变更时调用\n */\n private updateCachedSnapshot(): void {\n const snapshot = new Map<string, A2UISurface>();\n \n this.surfaces.forEach((internal, id) => {\n snapshot.set(id, {\n id: internal.id,\n catalogId: internal.catalogId,\n state: internal.state,\n components: internal.components,\n root: internal.componentTree?.root || null,\n data: internal.dataStore.getSnapshot(),\n skeletonHint: internal.skeletonHint,\n updatedAt: internal.updatedAt,\n });\n });\n \n this.cachedSnapshot = snapshot;\n this.snapshotVersion++;\n }\n\n // ============= A2UI v0.9 消息处理 =============\n\n /**\n * 处理单条 A2UI v0.9 消息\n */\n processMessage(message: A2UIServerMessage): void {\n this.processMessageInternal(message);\n this.emitChange();\n }\n\n /**\n * 批量处理消息\n */\n processMessages(messages: A2UIServerMessage[]): void {\n for (const message of messages) {\n this.processMessageInternal(message);\n }\n\n // 所有消息处理完后统一通知\n this.emitChange();\n }\n\n /**\n * 增量处理消息(性能优化)\n * 当已知消息是新增的时候使用,避免重复处理\n */\n processMessagesIncremental(messages: A2UIServerMessage[]): void {\n if (messages.length === 0) return;\n\n for (const message of messages) {\n this.processMessageInternal(message);\n }\n\n this.emitChange();\n }\n\n /**\n * 内部消息处理(不触发 emitChange)\n */\n private processMessageInternal(message: A2UIServerMessage): void {\n if ('createSurface' in message) {\n this.handleCreateSurface(message.createSurface);\n } else if ('updateComponents' in message) {\n this.handleUpdateComponents(message.updateComponents);\n } else if ('updateDataModel' in message) {\n this.handleUpdateDataModel(message.updateDataModel);\n } else if ('deleteSurface' in message) {\n this.handleDeleteSurface(message.deleteSurface);\n }\n }\n\n // ============= 消息处理器 =============\n\n /**\n * 处理 createSurface 消息\n */\n private handleCreateSurface(payload: { surfaceId: string; catalogId: string }): void {\n const surface: InternalSurface = {\n id: payload.surfaceId,\n catalogId: payload.catalogId,\n state: 'pending',\n components: new Map(),\n dataStore: new DataStore(),\n componentTree: null,\n updatedAt: Date.now(),\n };\n\n this.surfaces.set(payload.surfaceId, surface);\n }\n\n /**\n * 处理 updateComponents 消息\n */\n private handleUpdateComponents(payload: { surfaceId: string; components: A2UIComponentBase[] }): void {\n let surface = this.surfaces.get(payload.surfaceId);\n \n // 如果 Surface 不存在,自动创建(容错处理)\n if (!surface) {\n console.warn(`[A2UI] Surface ${payload.surfaceId} not found, auto-creating`);\n surface = {\n id: payload.surfaceId,\n catalogId: 'default',\n state: 'pending',\n components: new Map(),\n dataStore: new DataStore(),\n componentTree: null,\n updatedAt: Date.now(),\n };\n this.surfaces.set(payload.surfaceId, surface);\n }\n\n // 添加/更新组件到平铺注册表\n for (const component of payload.components) {\n surface.components.set(component.id, component);\n }\n\n // 重建组件树\n this.rebuildComponentTree(surface);\n\n // 如果有 root 组件,激活 Surface\n if (surface.components.has('root') && surface.state === 'pending') {\n surface.state = 'active';\n }\n\n surface.updatedAt = Date.now();\n }\n\n /**\n * 处理 updateDataModel 消息\n */\n private handleUpdateDataModel(payload: {\n surfaceId: string;\n path?: string;\n op?: 'add' | 'replace' | 'remove';\n value?: unknown;\n }): void {\n const surface = this.surfaces.get(payload.surfaceId);\n if (!surface) {\n console.warn(`[A2UI] Surface ${payload.surfaceId} not found`);\n return;\n }\n\n const path = payload.path || '/';\n const op = payload.op || 'replace';\n\n if (op === 'remove') {\n surface.dataStore.remove(path);\n } else {\n // add 和 replace 都使用 set\n surface.dataStore.set(path, payload.value);\n }\n\n // 只有当数据变化可能影响 template 渲染时才重建组件树\n // 优化:检查是否有组件使用了 template children\n if (this.needsTreeRebuild(surface, path)) {\n this.rebuildComponentTree(surface);\n }\n surface.updatedAt = Date.now();\n }\n\n /**\n * 检查是否需要重建组件树\n * 优化:只有当路径可能影响 template 渲染时才需要重建\n */\n private needsTreeRebuild(surface: InternalSurface, path: string): boolean {\n // 如果是根路径替换,需要重建\n if (path === '/' || path === '') {\n return true;\n }\n\n // 检查是否有组件的 children 使用了这个路径作为 template\n for (const component of surface.components.values()) {\n const children = (component as any).children;\n if (children && typeof children === 'object' && !Array.isArray(children)) {\n // A2UI v0.9 格式: { componentId, path }\n const templatePath = (children as any).path;\n if (templatePath && (path.startsWith(templatePath) || templatePath.startsWith(path))) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * 只更新数据模型,不重建组件树(性能优化)\n * 适用于不影响组件结构的数据更新(如表单输入)\n */\n updateDataOnly(surfaceId: string, path: string, value: unknown): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n surface.dataStore.set(path, value);\n surface.updatedAt = Date.now();\n \n // 只更新快照,不重建组件树\n this.updateCachedSnapshot();\n this.listeners.forEach((listener) => listener());\n \n // 触发回调\n this.options.onDataChange?.(surfaceId, path, value);\n }\n\n /**\n * 处理 deleteSurface 消息\n */\n private handleDeleteSurface(payload: { surfaceId: string }): void {\n this.surfaces.delete(payload.surfaceId);\n }\n\n // ============= 组件树构建 =============\n\n /**\n * 重建组件树\n */\n private rebuildComponentTree(surface: InternalSurface): void {\n // 只有存在 root 组件时才构建树\n if (!surface.components.has('root')) {\n surface.componentTree = null;\n return;\n }\n\n surface.componentTree = new ComponentTree(\n surface.components,\n surface.dataStore,\n this.pathResolver\n );\n }\n\n // ============= 数据访问(供 React 组件使用)=============\n\n /**\n * 获取数据\n * @param surfaceId Surface ID\n * @param path 数据路径\n * @param dataContextPath 当前组件的数据上下文\n */\n getData(surfaceId: string, path: string, dataContextPath: string = ''): unknown {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return undefined;\n\n const resolvedPath = this.pathResolver.resolve(path, dataContextPath);\n return surface.dataStore.get(resolvedPath);\n }\n\n /**\n * 设置数据(双向绑定)\n */\n setData(surfaceId: string, path: string, dataContextPath: string, value: unknown): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n const resolvedPath = this.pathResolver.resolve(path, dataContextPath);\n surface.dataStore.set(resolvedPath, value);\n\n // 重建组件树并通知\n this.rebuildComponentTree(surface);\n surface.updatedAt = Date.now();\n this.emitChange();\n\n // 触发回调\n this.options.onDataChange?.(surfaceId, resolvedPath, value);\n }\n\n /**\n * 更新数据值(简化接口,不需要 dataContextPath)\n */\n updateDataValue(surfaceId: string, path: string, value: unknown): void {\n this.setData(surfaceId, path, '', value);\n }\n\n // ============= Action 处理 =============\n\n /**\n * 分发 Action\n */\n dispatchAction(action: A2UIAction, surfaceId?: string, componentId?: string): void {\n // 调用外部回调\n if (this.options.onAction) {\n const context = surfaceId ? {\n surfaceId,\n componentId,\n updateData: (path: string, value: unknown) => {\n this.updateDataValue(surfaceId, path, value);\n },\n getData: (path?: string) => {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return undefined;\n return path ? surface.dataStore.get(path) : surface.dataStore.getSnapshot();\n },\n } : undefined;\n\n this.options.onAction(action, context);\n }\n\n // 发送用户行为消息\n if (this.options.onSendMessage && surfaceId && componentId) {\n this.options.onSendMessage({\n userAction: {\n name: action.name,\n surfaceId,\n sourceComponentId: componentId,\n timestamp: new Date().toISOString(),\n context: action.context || {},\n },\n });\n }\n }\n\n // ============= Surface 管理(扩展方法)=============\n\n /**\n * 创建 Pending 状态的 Surface(用于显示骨架屏)\n */\n createPendingSurface(surfaceId: string, skeletonHint?: SkeletonHint): void {\n if (this.surfaces.has(surfaceId)) return;\n\n const surface: InternalSurface = {\n id: surfaceId,\n catalogId: 'default',\n state: 'pending',\n components: new Map(),\n dataStore: new DataStore(),\n componentTree: null,\n skeletonHint,\n updatedAt: Date.now(),\n };\n\n this.surfaces.set(surfaceId, surface);\n this.emitChange();\n }\n\n /**\n * 激活 Surface\n */\n activateSurface(surfaceId: string): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n surface.state = 'active';\n surface.updatedAt = Date.now();\n this.emitChange();\n }\n\n /**\n * 关闭 Surface\n */\n closeSurface(surfaceId: string): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n surface.state = 'closed';\n surface.updatedAt = Date.now();\n this.emitChange();\n }\n\n /**\n * 直接设置整个数据模型\n */\n setSurfaceData(surfaceId: string, data: Record<string, unknown>): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n surface.dataStore.set('/', data);\n this.rebuildComponentTree(surface);\n surface.updatedAt = Date.now();\n this.emitChange();\n }\n\n /**\n * 合并数据(保留用户输入)\n */\n mergeSurfaceData(surfaceId: string, data: Record<string, unknown>): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n surface.dataStore.merge('/', data);\n this.rebuildComponentTree(surface);\n surface.updatedAt = Date.now();\n this.emitChange();\n }\n\n // ============= 工具方法 =============\n\n /**\n * 获取单个 Surface\n */\n getSurface(surfaceId: string): A2UISurface | undefined {\n const internal = this.surfaces.get(surfaceId);\n if (!internal) return undefined;\n\n return {\n id: internal.id,\n catalogId: internal.catalogId,\n state: internal.state,\n components: internal.components,\n root: internal.componentTree?.root || null,\n data: internal.dataStore.getSnapshot(),\n skeletonHint: internal.skeletonHint,\n updatedAt: internal.updatedAt,\n };\n }\n\n /**\n * 获取所有 Surface ID\n */\n getSurfaceIds(): string[] {\n return Array.from(this.surfaces.keys());\n }\n\n /**\n * 获取所有 Surface\n */\n getAllSurfaces(): A2UISurface[] {\n return this.getSurfaceIds().map((id) => this.getSurface(id)!);\n }\n\n /**\n * 获取组件树\n */\n getComponentTree(surfaceId: string): ResolvedComponent | null {\n const surface = this.surfaces.get(surfaceId);\n return surface?.componentTree?.root || null;\n }\n\n /**\n * 查找组件\n */\n findComponent(surfaceId: string, componentId: string): A2UIComponentBase | undefined {\n const surface = this.surfaces.get(surfaceId);\n return surface?.components.get(componentId);\n }\n\n /**\n * 清空所有 Surface\n */\n clear(): void {\n this.surfaces.clear();\n this.emitChange();\n }\n\n /**\n * 清空所有 Surface(别名)\n */\n clearAllSurfaces(): void {\n this.clear();\n }\n\n /**\n * 销毁处理器\n */\n destroy(): void {\n this.clear();\n this.listeners.clear();\n }\n\n // ============= 内部方法 =============\n\n /**\n * 通知所有订阅者\n * 先更新缓存快照,再通知订阅者\n */\n private emitChange(): void {\n // 先更新缓存快照\n this.updateCachedSnapshot();\n // 再通知订阅者\n this.listeners.forEach((listener) => {\n listener();\n });\n }\n}\n\n/**\n * 创建 A2UI 消息处理器实例\n */\nexport function createA2uiProcessor(options?: A2uiMessageProcessorOptions): A2uiMessageProcessor {\n return new A2uiMessageProcessor(options);\n}\n\nexport default A2uiMessageProcessor;\n"],"names":["A2uiMessageProcessor","options","arguments","length","undefined","_classCallCheck","_defineProperty","Map","Set","PathResolver","subscribe","bind","getSnapshot","getServerSnapshot","_createClass","key","value","listener","_this","listeners","add","cachedSnapshot","updateCachedSnapshot","snapshot","surfaces","forEach","internal","id","_internal$componentTr","set","catalogId","state","components","root","componentTree","data","dataStore","skeletonHint","updatedAt","snapshotVersion","processMessage","message","processMessageInternal","emitChange","processMessages","messages","_iterator","_createForOfIteratorHelper","_step","s","n","done","err","e","f","processMessagesIncremental","_iterator2","_step2","handleCreateSurface","createSurface","handleUpdateComponents","updateComponents","handleUpdateDataModel","updateDataModel","handleDeleteSurface","deleteSurface","payload","surface","surfaceId","DataStore","Date","now","get","console","warn","concat","_iterator3","_step3","component","rebuildComponentTree","has","path","op","remove","needsTreeRebuild","_iterator4","values","_step4","children","_typeof","Array","isArray","templatePath","startsWith","updateDataOnly","_this$options$onDataC","_this$options","onDataChange","call","ComponentTree","pathResolver","getData","dataContextPath","resolvedPath","resolve","setData","_this$options$onDataC2","_this$options2","updateDataValue","dispatchAction","action","componentId","_this2","onAction","context","updateData","onSendMessage","userAction","name","sourceComponentId","timestamp","toISOString","createPendingSurface","activateSurface","closeSurface","setSurfaceData","mergeSurfaceData","merge","getSurface","_internal$componentTr2","getSurfaceIds","from","keys","getAllSurfaces","_this3","map","getComponentTree","_surface$componentTre","findComponent","clear","clearAllSurfaces","destroy","createA2uiProcessor"],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2UI ComponentTree
|
|
3
|
+
* 将平铺的组件列表转换为嵌套的组件树
|
|
4
|
+
* 参考 @a2ui/core ComponentTree 实现
|
|
5
|
+
*
|
|
6
|
+
* 支持两种 children 模式 (A2UI v0.9 规范):
|
|
7
|
+
* 1. 直接引用: children: ["comp1", "comp2"]
|
|
8
|
+
* 2. Template 模式: children: { componentId: "comp1", path: "/items" }
|
|
9
|
+
*/
|
|
10
|
+
import type { A2UIComponentBase, ResolvedComponent } from '../types';
|
|
11
|
+
import type { DataStore } from './DataStore';
|
|
12
|
+
import type { PathResolver } from './PathResolver';
|
|
13
|
+
/**
|
|
14
|
+
* 组件树构建器
|
|
15
|
+
*/
|
|
16
|
+
export declare class ComponentTree {
|
|
17
|
+
private components;
|
|
18
|
+
private dataStore;
|
|
19
|
+
private pathResolver;
|
|
20
|
+
/** 解析后的根组件 */
|
|
21
|
+
readonly root: ResolvedComponent | null;
|
|
22
|
+
constructor(components: Map<string, A2UIComponentBase>, dataStore: DataStore, pathResolver: PathResolver);
|
|
23
|
+
/**
|
|
24
|
+
* 递归构建组件树
|
|
25
|
+
* @param componentId 组件 ID
|
|
26
|
+
* @param dataContextPath 当前数据上下文路径
|
|
27
|
+
*/
|
|
28
|
+
private buildTree;
|
|
29
|
+
/**
|
|
30
|
+
* 解析 children 属性
|
|
31
|
+
*/
|
|
32
|
+
private resolveChildren;
|
|
33
|
+
/**
|
|
34
|
+
* 解析 Template 模式的 children
|
|
35
|
+
* Template 会根据 dataPath 指向的数组长度,创建多个子组件实例
|
|
36
|
+
*/
|
|
37
|
+
private resolveTemplate;
|
|
38
|
+
/**
|
|
39
|
+
* 查找组件
|
|
40
|
+
*/
|
|
41
|
+
findComponent(componentId: string): ResolvedComponent | null;
|
|
42
|
+
private findInTree;
|
|
43
|
+
/**
|
|
44
|
+
* 遍历组件树
|
|
45
|
+
*/
|
|
46
|
+
traverse(callback: (component: ResolvedComponent) => void): void;
|
|
47
|
+
private traverseNode;
|
|
48
|
+
/**
|
|
49
|
+
* 获取所有组件 ID
|
|
50
|
+
*/
|
|
51
|
+
getAllIds(): string[];
|
|
52
|
+
}
|
|
53
|
+
export default ComponentTree;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.2-alpha.14
|
|
3
|
+
* (c) 2026 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import _typeof from '@babel/runtime/helpers/typeof';
|
|
8
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
9
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
10
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
11
|
+
|
|
12
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
13
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
14
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
15
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
16
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
17
|
+
var ComponentTree = /*#__PURE__*/function () {
|
|
18
|
+
function ComponentTree(components, dataStore, pathResolver) {
|
|
19
|
+
_classCallCheck(this, ComponentTree);
|
|
20
|
+
this.components = components;
|
|
21
|
+
this.dataStore = dataStore;
|
|
22
|
+
this.pathResolver = pathResolver;
|
|
23
|
+
this.root = this.buildTree("root", "/");
|
|
24
|
+
}
|
|
25
|
+
return _createClass(ComponentTree, [{
|
|
26
|
+
key: "buildTree",
|
|
27
|
+
value: function buildTree(componentId, dataContextPath) {
|
|
28
|
+
var _this = this;
|
|
29
|
+
var component = this.components.get(componentId);
|
|
30
|
+
if (!component) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
var resolved = _objectSpread(_objectSpread({}, component), {}, {
|
|
34
|
+
dataContextPath: dataContextPath
|
|
35
|
+
});
|
|
36
|
+
var children = component.children;
|
|
37
|
+
if (children) {
|
|
38
|
+
resolved.resolvedChildren = this.resolveChildren(children, dataContextPath);
|
|
39
|
+
}
|
|
40
|
+
var child = component.child;
|
|
41
|
+
if (child && typeof child === "string") {
|
|
42
|
+
var resolvedChild = this.buildTree(child, dataContextPath);
|
|
43
|
+
if (resolvedChild) {
|
|
44
|
+
resolved.resolvedChildren = [resolvedChild];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
var tabItems = component.tabItems;
|
|
48
|
+
if (tabItems && Array.isArray(tabItems)) {
|
|
49
|
+
resolved.resolvedChildren = tabItems.map(function (item) {
|
|
50
|
+
return _this.buildTree(item.child, dataContextPath);
|
|
51
|
+
}).filter(function (c) {
|
|
52
|
+
return c !== null;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return resolved;
|
|
56
|
+
}
|
|
57
|
+
}, {
|
|
58
|
+
key: "resolveChildren",
|
|
59
|
+
value: function resolveChildren(children, dataContextPath) {
|
|
60
|
+
var _this2 = this;
|
|
61
|
+
if (Array.isArray(children)) {
|
|
62
|
+
return children.map(function (id) {
|
|
63
|
+
return _this2.buildTree(id, dataContextPath);
|
|
64
|
+
}).filter(function (c) {
|
|
65
|
+
return c !== null;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (children && _typeof(children) === "object" && "componentId" in children) {
|
|
69
|
+
return this.resolveTemplate(children.componentId, children.path, dataContextPath);
|
|
70
|
+
}
|
|
71
|
+
if (children && _typeof(children) === "object" && "template" in children) {
|
|
72
|
+
var legacyChildren = children;
|
|
73
|
+
return this.resolveTemplate(legacyChildren.template, legacyChildren.dataPath, dataContextPath);
|
|
74
|
+
}
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
}, {
|
|
78
|
+
key: "resolveTemplate",
|
|
79
|
+
value: function resolveTemplate(templateId, dataPath, parentContextPath) {
|
|
80
|
+
var _this3 = this;
|
|
81
|
+
var resolvedDataPath = this.pathResolver.resolve(dataPath, parentContextPath);
|
|
82
|
+
var data = this.dataStore.get(resolvedDataPath);
|
|
83
|
+
if (!Array.isArray(data)) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
return data.map(function (_, index) {
|
|
87
|
+
var itemContextPath = "".concat(resolvedDataPath, "/").concat(index);
|
|
88
|
+
return _this3.buildTree(templateId, itemContextPath);
|
|
89
|
+
}).filter(function (c) {
|
|
90
|
+
return c !== null;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}, {
|
|
94
|
+
key: "findComponent",
|
|
95
|
+
value: function findComponent(componentId) {
|
|
96
|
+
return this.findInTree(this.root, componentId);
|
|
97
|
+
}
|
|
98
|
+
}, {
|
|
99
|
+
key: "findInTree",
|
|
100
|
+
value: function findInTree(node, targetId) {
|
|
101
|
+
if (!node) return null;
|
|
102
|
+
if (node.id === targetId) return node;
|
|
103
|
+
if (node.resolvedChildren) {
|
|
104
|
+
var _iterator = _createForOfIteratorHelper(node.resolvedChildren),
|
|
105
|
+
_step;
|
|
106
|
+
try {
|
|
107
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
108
|
+
var child = _step.value;
|
|
109
|
+
var found = this.findInTree(child, targetId);
|
|
110
|
+
if (found) return found;
|
|
111
|
+
}
|
|
112
|
+
} catch (err) {
|
|
113
|
+
_iterator.e(err);
|
|
114
|
+
} finally {
|
|
115
|
+
_iterator.f();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}, {
|
|
121
|
+
key: "traverse",
|
|
122
|
+
value: function traverse(callback) {
|
|
123
|
+
this.traverseNode(this.root, callback);
|
|
124
|
+
}
|
|
125
|
+
}, {
|
|
126
|
+
key: "traverseNode",
|
|
127
|
+
value: function traverseNode(node, callback) {
|
|
128
|
+
if (!node) return;
|
|
129
|
+
callback(node);
|
|
130
|
+
if (node.resolvedChildren) {
|
|
131
|
+
var _iterator2 = _createForOfIteratorHelper(node.resolvedChildren),
|
|
132
|
+
_step2;
|
|
133
|
+
try {
|
|
134
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
135
|
+
var child = _step2.value;
|
|
136
|
+
this.traverseNode(child, callback);
|
|
137
|
+
}
|
|
138
|
+
} catch (err) {
|
|
139
|
+
_iterator2.e(err);
|
|
140
|
+
} finally {
|
|
141
|
+
_iterator2.f();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}, {
|
|
146
|
+
key: "getAllIds",
|
|
147
|
+
value: function getAllIds() {
|
|
148
|
+
var ids = [];
|
|
149
|
+
this.traverse(function (component) {
|
|
150
|
+
ids.push(component.id);
|
|
151
|
+
});
|
|
152
|
+
return ids;
|
|
153
|
+
}
|
|
154
|
+
}]);
|
|
155
|
+
}();
|
|
156
|
+
|
|
157
|
+
export { ComponentTree, ComponentTree as default };
|
|
158
|
+
//# sourceMappingURL=ComponentTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentTree.js","sources":["../../../../../../pro-components/chat/chat-engine/core/a2ui/processor/ComponentTree.ts"],"sourcesContent":["/**\n * A2UI ComponentTree\n * 将平铺的组件列表转换为嵌套的组件树\n * 参考 @a2ui/core ComponentTree 实现\n * \n * 支持两种 children 模式 (A2UI v0.9 规范):\n * 1. 直接引用: children: [\"comp1\", \"comp2\"]\n * 2. Template 模式: children: { componentId: \"comp1\", path: \"/items\" }\n */\n\nimport type { A2UIComponentBase, ChildrenProperty, ResolvedComponent } from '../types';\nimport type { DataStore } from './DataStore';\nimport type { PathResolver } from './PathResolver';\n\n/**\n * 组件树构建器\n */\nexport class ComponentTree {\n /** 解析后的根组件 */\n readonly root: ResolvedComponent | null;\n\n constructor(\n private components: Map<string, A2UIComponentBase>,\n private dataStore: DataStore,\n private pathResolver: PathResolver\n ) {\n this.root = this.buildTree('root', '/');\n }\n\n /**\n * 递归构建组件树\n * @param componentId 组件 ID\n * @param dataContextPath 当前数据上下文路径\n */\n private buildTree(componentId: string, dataContextPath: string): ResolvedComponent | null {\n const component = this.components.get(componentId);\n if (!component) {\n return null;\n }\n\n // 创建解析后的组件(浅拷贝)\n const resolved: ResolvedComponent = {\n ...component,\n dataContextPath,\n };\n\n // 处理 children\n const children = (component as any).children as ChildrenProperty | undefined;\n if (children) {\n resolved.resolvedChildren = this.resolveChildren(children, dataContextPath);\n }\n\n // 处理 child (Card, Button 等单子组件)\n const child = (component as any).child as string | undefined;\n if (child && typeof child === 'string') {\n const resolvedChild = this.buildTree(child, dataContextPath);\n if (resolvedChild) {\n resolved.resolvedChildren = [resolvedChild];\n }\n }\n\n // 处理 tabItems\n const tabItems = (component as any).tabItems as Array<{ title: any; child: string }> | undefined;\n if (tabItems && Array.isArray(tabItems)) {\n resolved.resolvedChildren = tabItems\n .map((item) => this.buildTree(item.child, dataContextPath))\n .filter((c): c is ResolvedComponent => c !== null);\n }\n\n return resolved;\n }\n\n /**\n * 解析 children 属性\n */\n private resolveChildren(\n children: ChildrenProperty,\n dataContextPath: string\n ): ResolvedComponent[] {\n // 模式1: 直接引用数组\n if (Array.isArray(children)) {\n return children\n .map((id) => this.buildTree(id, dataContextPath))\n .filter((c): c is ResolvedComponent => c !== null);\n }\n\n // 模式2: Template 模式 (A2UI v0.9: componentId + path)\n if (children && typeof children === 'object' && 'componentId' in children) {\n return this.resolveTemplate(children.componentId, children.path, dataContextPath);\n }\n\n // 兼容旧格式 (template + dataPath)\n if (children && typeof children === 'object' && 'template' in children) {\n const legacyChildren = children as { template: string; dataPath: string };\n return this.resolveTemplate(legacyChildren.template, legacyChildren.dataPath, dataContextPath);\n }\n\n return [];\n }\n\n /**\n * 解析 Template 模式的 children\n * Template 会根据 dataPath 指向的数组长度,创建多个子组件实例\n */\n private resolveTemplate(\n templateId: string,\n dataPath: string,\n parentContextPath: string\n ): ResolvedComponent[] {\n // 解析数据路径\n const resolvedDataPath = this.pathResolver.resolve(dataPath, parentContextPath);\n const data = this.dataStore.get(resolvedDataPath);\n\n // 如果数据不是数组,返回空\n if (!Array.isArray(data)) {\n return [];\n }\n\n // 为数组中的每个元素创建一个组件实例\n return data.map((_, index) => {\n const itemContextPath = `${resolvedDataPath}/${index}`;\n return this.buildTree(templateId, itemContextPath);\n }).filter((c): c is ResolvedComponent => c !== null);\n }\n\n /**\n * 查找组件\n */\n findComponent(componentId: string): ResolvedComponent | null {\n return this.findInTree(this.root, componentId);\n }\n\n private findInTree(node: ResolvedComponent | null, targetId: string): ResolvedComponent | null {\n if (!node) return null;\n if (node.id === targetId) return node;\n\n if (node.resolvedChildren) {\n for (const child of node.resolvedChildren) {\n const found = this.findInTree(child, targetId);\n if (found) return found;\n }\n }\n\n return null;\n }\n\n /**\n * 遍历组件树\n */\n traverse(callback: (component: ResolvedComponent) => void): void {\n this.traverseNode(this.root, callback);\n }\n\n private traverseNode(\n node: ResolvedComponent | null,\n callback: (component: ResolvedComponent) => void\n ): void {\n if (!node) return;\n callback(node);\n \n if (node.resolvedChildren) {\n for (const child of node.resolvedChildren) {\n this.traverseNode(child, callback);\n }\n }\n }\n\n /**\n * 获取所有组件 ID\n */\n getAllIds(): string[] {\n const ids: string[] = [];\n this.traverse((component) => {\n ids.push(component.id);\n });\n return ids;\n }\n}\n\nexport default ComponentTree;\n"],"names":["ComponentTree","components","dataStore","pathResolver","_classCallCheck","root","buildTree","_createClass","key","value","componentId","dataContextPath","_this","component","get","resolved","_objectSpread","children","resolvedChildren","resolveChildren","child","resolvedChild","tabItems","Array","isArray","map","item","filter","c","_this2","id","_typeof","resolveTemplate","path","legacyChildren","template","dataPath","templateId","parentContextPath","_this3","resolvedDataPath","resolve","data","_","index","itemContextPath","concat","findComponent","findInTree","node","targetId","_iterator","_createForOfIteratorHelper","_step","s","n","done","found","err","e","f","traverse","callback","traverseNode","_iterator2","_step2","getAllIds","ids","push"],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2UI DataStore
|
|
3
|
+
* 管理 Surface 的数据模型,支持 JSON Pointer 路径访问
|
|
4
|
+
* 参考 @a2ui/core DataStore 实现
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* A2UI 数据存储
|
|
8
|
+
* 支持 JSON Pointer 风格的路径访问
|
|
9
|
+
*/
|
|
10
|
+
export declare class DataStore {
|
|
11
|
+
private data;
|
|
12
|
+
/**
|
|
13
|
+
* 获取指定路径的值
|
|
14
|
+
* @param path JSON Pointer 路径 (如 "/user/name")
|
|
15
|
+
*/
|
|
16
|
+
get(path: string): unknown;
|
|
17
|
+
/**
|
|
18
|
+
* 设置指定路径的值
|
|
19
|
+
* @param path JSON Pointer 路径
|
|
20
|
+
* @param value 要设置的值
|
|
21
|
+
*/
|
|
22
|
+
set(path: string, value: unknown): void;
|
|
23
|
+
/**
|
|
24
|
+
* 深度设置值(不可变方式)
|
|
25
|
+
*/
|
|
26
|
+
private setDeep;
|
|
27
|
+
/**
|
|
28
|
+
* 删除指定路径的值
|
|
29
|
+
* @param path JSON Pointer 路径
|
|
30
|
+
*/
|
|
31
|
+
remove(path: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* 深度删除值(不可变方式)
|
|
34
|
+
*/
|
|
35
|
+
private removeDeep;
|
|
36
|
+
/**
|
|
37
|
+
* 合并数据(增量更新,保留用户已修改的字段)
|
|
38
|
+
* @param path 路径
|
|
39
|
+
* @param value 要合并的值
|
|
40
|
+
*/
|
|
41
|
+
merge(path: string, value: unknown): void;
|
|
42
|
+
/**
|
|
43
|
+
* 深度合并对象
|
|
44
|
+
*/
|
|
45
|
+
private deepMerge;
|
|
46
|
+
/**
|
|
47
|
+
* 获取完整数据快照
|
|
48
|
+
*/
|
|
49
|
+
getSnapshot(): Record<string, unknown>;
|
|
50
|
+
/**
|
|
51
|
+
* 清空数据
|
|
52
|
+
*/
|
|
53
|
+
clear(): void;
|
|
54
|
+
/**
|
|
55
|
+
* 检查路径是否存在
|
|
56
|
+
*/
|
|
57
|
+
has(path: string): boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 创建 DataStore 实例
|
|
61
|
+
*/
|
|
62
|
+
export declare function createDataStore(initialData?: Record<string, unknown>): DataStore;
|
|
63
|
+
export default DataStore;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.2-alpha.14
|
|
3
|
+
* (c) 2026 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
8
|
+
import _toArray from '@babel/runtime/helpers/toArray';
|
|
9
|
+
import _typeof from '@babel/runtime/helpers/typeof';
|
|
10
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
11
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
12
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
13
|
+
|
|
14
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
15
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
16
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
17
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
18
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
19
|
+
function parsePath(path) {
|
|
20
|
+
if (!path || path === "/") return [];
|
|
21
|
+
var normalized = path.startsWith("/") ? path.slice(1) : path;
|
|
22
|
+
return normalized.split("/").filter(Boolean);
|
|
23
|
+
}
|
|
24
|
+
var DataStore = /*#__PURE__*/function () {
|
|
25
|
+
function DataStore() {
|
|
26
|
+
_classCallCheck(this, DataStore);
|
|
27
|
+
_defineProperty(this, "data", {});
|
|
28
|
+
}
|
|
29
|
+
return _createClass(DataStore, [{
|
|
30
|
+
key: "get",
|
|
31
|
+
value: function get(path) {
|
|
32
|
+
var segments = parsePath(path);
|
|
33
|
+
if (segments.length === 0) {
|
|
34
|
+
return this.data;
|
|
35
|
+
}
|
|
36
|
+
var current = this.data;
|
|
37
|
+
var _iterator = _createForOfIteratorHelper(segments),
|
|
38
|
+
_step;
|
|
39
|
+
try {
|
|
40
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
41
|
+
var segment = _step.value;
|
|
42
|
+
if (current === null || current === void 0) {
|
|
43
|
+
return void 0;
|
|
44
|
+
}
|
|
45
|
+
if (_typeof(current) !== "object") {
|
|
46
|
+
return void 0;
|
|
47
|
+
}
|
|
48
|
+
current = current[segment];
|
|
49
|
+
}
|
|
50
|
+
} catch (err) {
|
|
51
|
+
_iterator.e(err);
|
|
52
|
+
} finally {
|
|
53
|
+
_iterator.f();
|
|
54
|
+
}
|
|
55
|
+
return current;
|
|
56
|
+
}
|
|
57
|
+
}, {
|
|
58
|
+
key: "set",
|
|
59
|
+
value: function set(path, value) {
|
|
60
|
+
var segments = parsePath(path);
|
|
61
|
+
if (segments.length === 0) {
|
|
62
|
+
if (_typeof(value) === "object" && value !== null) {
|
|
63
|
+
this.data = _objectSpread({}, value);
|
|
64
|
+
}
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.data = this.setDeep(this.data, segments, value);
|
|
68
|
+
}
|
|
69
|
+
}, {
|
|
70
|
+
key: "setDeep",
|
|
71
|
+
value: function setDeep(obj, segments, value) {
|
|
72
|
+
if (segments.length === 0) {
|
|
73
|
+
return obj;
|
|
74
|
+
}
|
|
75
|
+
var _segments = _toArray(segments),
|
|
76
|
+
head = _segments[0],
|
|
77
|
+
tail = _segments.slice(1);
|
|
78
|
+
var newObj = _objectSpread({}, obj);
|
|
79
|
+
if (tail.length === 0) {
|
|
80
|
+
newObj[head] = value;
|
|
81
|
+
} else {
|
|
82
|
+
var existing = obj[head];
|
|
83
|
+
var nested = _typeof(existing) === "object" && existing !== null ? _objectSpread({}, existing) : {};
|
|
84
|
+
newObj[head] = this.setDeep(nested, tail, value);
|
|
85
|
+
}
|
|
86
|
+
return newObj;
|
|
87
|
+
}
|
|
88
|
+
}, {
|
|
89
|
+
key: "remove",
|
|
90
|
+
value: function remove(path) {
|
|
91
|
+
var segments = parsePath(path);
|
|
92
|
+
if (segments.length === 0) {
|
|
93
|
+
this.data = {};
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
this.data = this.removeDeep(this.data, segments);
|
|
97
|
+
}
|
|
98
|
+
}, {
|
|
99
|
+
key: "removeDeep",
|
|
100
|
+
value: function removeDeep(obj, segments) {
|
|
101
|
+
if (segments.length === 0) {
|
|
102
|
+
return obj;
|
|
103
|
+
}
|
|
104
|
+
var _segments2 = _toArray(segments),
|
|
105
|
+
head = _segments2[0],
|
|
106
|
+
tail = _segments2.slice(1);
|
|
107
|
+
var newObj = _objectSpread({}, obj);
|
|
108
|
+
if (tail.length === 0) {
|
|
109
|
+
delete newObj[head];
|
|
110
|
+
} else {
|
|
111
|
+
var existing = obj[head];
|
|
112
|
+
if (_typeof(existing) === "object" && existing !== null) {
|
|
113
|
+
newObj[head] = this.removeDeep(existing, tail);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return newObj;
|
|
117
|
+
}
|
|
118
|
+
}, {
|
|
119
|
+
key: "merge",
|
|
120
|
+
value: function merge(path, value) {
|
|
121
|
+
var existing = this.get(path);
|
|
122
|
+
if (_typeof(existing) === "object" && existing !== null && _typeof(value) === "object" && value !== null && !Array.isArray(existing) && !Array.isArray(value)) {
|
|
123
|
+
var merged = this.deepMerge(existing, value);
|
|
124
|
+
this.set(path, merged);
|
|
125
|
+
} else if (existing === void 0) {
|
|
126
|
+
this.set(path, value);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}, {
|
|
130
|
+
key: "deepMerge",
|
|
131
|
+
value: function deepMerge(target, source) {
|
|
132
|
+
var result = _objectSpread({}, target);
|
|
133
|
+
for (var _i = 0, _Object$entries = Object.entries(source); _i < _Object$entries.length; _i++) {
|
|
134
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
135
|
+
key = _Object$entries$_i[0],
|
|
136
|
+
value = _Object$entries$_i[1];
|
|
137
|
+
var existing = target[key];
|
|
138
|
+
if (existing === void 0) {
|
|
139
|
+
result[key] = value;
|
|
140
|
+
} else if (_typeof(existing) === "object" && existing !== null && _typeof(value) === "object" && value !== null && !Array.isArray(existing) && !Array.isArray(value)) {
|
|
141
|
+
result[key] = this.deepMerge(existing, value);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
}, {
|
|
147
|
+
key: "getSnapshot",
|
|
148
|
+
value: function getSnapshot() {
|
|
149
|
+
return this.data;
|
|
150
|
+
}
|
|
151
|
+
}, {
|
|
152
|
+
key: "clear",
|
|
153
|
+
value: function clear() {
|
|
154
|
+
this.data = {};
|
|
155
|
+
}
|
|
156
|
+
}, {
|
|
157
|
+
key: "has",
|
|
158
|
+
value: function has(path) {
|
|
159
|
+
return this.get(path) !== void 0;
|
|
160
|
+
}
|
|
161
|
+
}]);
|
|
162
|
+
}();
|
|
163
|
+
function createDataStore(initialData) {
|
|
164
|
+
var store = new DataStore();
|
|
165
|
+
if (initialData) {
|
|
166
|
+
store.set("/", initialData);
|
|
167
|
+
}
|
|
168
|
+
return store;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export { DataStore, createDataStore, DataStore as default };
|
|
172
|
+
//# sourceMappingURL=DataStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataStore.js","sources":["../../../../../../pro-components/chat/chat-engine/core/a2ui/processor/DataStore.ts"],"sourcesContent":["/**\n * A2UI DataStore\n * 管理 Surface 的数据模型,支持 JSON Pointer 路径访问\n * 参考 @a2ui/core DataStore 实现\n */\n\n/**\n * 解析 JSON Pointer 路径为段数组\n * @example \"/user/name\" -> [\"user\", \"name\"]\n */\nfunction parsePath(path: string): string[] {\n if (!path || path === '/') return [];\n // 移除开头的 /,然后按 / 分割\n const normalized = path.startsWith('/') ? path.slice(1) : path;\n return normalized.split('/').filter(Boolean);\n}\n\n/**\n * A2UI 数据存储\n * 支持 JSON Pointer 风格的路径访问\n */\nexport class DataStore {\n private data: Record<string, unknown> = {};\n\n /**\n * 获取指定路径的值\n * @param path JSON Pointer 路径 (如 \"/user/name\")\n */\n get(path: string): unknown {\n const segments = parsePath(path);\n \n if (segments.length === 0) {\n return this.data;\n }\n\n let current: unknown = this.data;\n for (const segment of segments) {\n if (current === null || current === undefined) {\n return undefined;\n }\n if (typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n\n return current;\n }\n\n /**\n * 设置指定路径的值\n * @param path JSON Pointer 路径\n * @param value 要设置的值\n */\n set(path: string, value: unknown): void {\n const segments = parsePath(path);\n\n if (segments.length === 0) {\n // 设置整个数据对象\n if (typeof value === 'object' && value !== null) {\n this.data = { ...value as Record<string, unknown> };\n }\n return;\n }\n\n // 创建新的数据对象(不可变更新)\n this.data = this.setDeep(this.data, segments, value);\n }\n\n /**\n * 深度设置值(不可变方式)\n */\n private setDeep(\n obj: Record<string, unknown>,\n segments: string[],\n value: unknown\n ): Record<string, unknown> {\n if (segments.length === 0) {\n return obj;\n }\n\n const [head, ...tail] = segments;\n const newObj = { ...obj };\n\n if (tail.length === 0) {\n // 最后一段,直接设置\n newObj[head] = value;\n } else {\n // 递归设置\n const existing = obj[head];\n const nested = typeof existing === 'object' && existing !== null\n ? { ...existing as Record<string, unknown> }\n : {};\n newObj[head] = this.setDeep(nested, tail, value);\n }\n\n return newObj;\n }\n\n /**\n * 删除指定路径的值\n * @param path JSON Pointer 路径\n */\n remove(path: string): void {\n const segments = parsePath(path);\n\n if (segments.length === 0) {\n this.data = {};\n return;\n }\n\n this.data = this.removeDeep(this.data, segments);\n }\n\n /**\n * 深度删除值(不可变方式)\n */\n private removeDeep(\n obj: Record<string, unknown>,\n segments: string[]\n ): Record<string, unknown> {\n if (segments.length === 0) {\n return obj;\n }\n\n const [head, ...tail] = segments;\n const newObj = { ...obj };\n\n if (tail.length === 0) {\n // 最后一段,删除该键\n delete newObj[head];\n } else {\n // 递归删除\n const existing = obj[head];\n if (typeof existing === 'object' && existing !== null) {\n newObj[head] = this.removeDeep(existing as Record<string, unknown>, tail);\n }\n }\n\n return newObj;\n }\n\n /**\n * 合并数据(增量更新,保留用户已修改的字段)\n * @param path 路径\n * @param value 要合并的值\n */\n merge(path: string, value: unknown): void {\n const existing = this.get(path);\n \n if (\n typeof existing === 'object' && existing !== null &&\n typeof value === 'object' && value !== null &&\n !Array.isArray(existing) && !Array.isArray(value)\n ) {\n // 两者都是对象,进行深度合并\n const merged = this.deepMerge(\n existing as Record<string, unknown>,\n value as Record<string, unknown>\n );\n this.set(path, merged);\n } else if (existing === undefined) {\n // 不存在则直接设置\n this.set(path, value);\n }\n // 如果已存在且不是对象,保留原值\n }\n\n /**\n * 深度合并对象\n */\n private deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n ): Record<string, unknown> {\n const result = { ...target };\n\n for (const [key, value] of Object.entries(source)) {\n const existing = target[key];\n\n if (existing === undefined) {\n // 新字段,直接设置\n result[key] = value;\n } else if (\n typeof existing === 'object' && existing !== null &&\n typeof value === 'object' && value !== null &&\n !Array.isArray(existing) && !Array.isArray(value)\n ) {\n // 递归合并对象\n result[key] = this.deepMerge(\n existing as Record<string, unknown>,\n value as Record<string, unknown>\n );\n }\n // 已存在且不是对象,保留原值\n }\n\n return result;\n }\n\n /**\n * 获取完整数据快照\n */\n getSnapshot(): Record<string, unknown> {\n return this.data;\n }\n\n /**\n * 清空数据\n */\n clear(): void {\n this.data = {};\n }\n\n /**\n * 检查路径是否存在\n */\n has(path: string): boolean {\n return this.get(path) !== undefined;\n }\n}\n\n/**\n * 创建 DataStore 实例\n */\nexport function createDataStore(initialData?: Record<string, unknown>): DataStore {\n const store = new DataStore();\n if (initialData) {\n store.set('/', initialData);\n }\n return store;\n}\n\nexport default DataStore;\n"],"names":["parsePath","path","normalized","startsWith","slice","split","filter","Boolean","DataStore","_classCallCheck","_defineProperty","_createClass","key","value","get","segments","length","data","current","_iterator","_createForOfIteratorHelper","_step","s","n","done","segment","_typeof","err","e","f","set","_objectSpread","setDeep","obj","_segments","_toArray","head","tail","newObj","existing","nested","remove","removeDeep","_segments2","merge","Array","isArray","merged","deepMerge","target","source","result","_i","_Object$entries","Object","entries","_Object$entries$_i","_slicedToArray","getSnapshot","clear","has","createDataStore","initialData","store"],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2UI PathResolver
|
|
3
|
+
* 处理相对路径和绝对路径的解析
|
|
4
|
+
* 参考 @a2ui/core PathResolver 实现
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 路径解析器
|
|
8
|
+
* 处理 A2UI 中的相对路径和绝对路径
|
|
9
|
+
*/
|
|
10
|
+
export declare class PathResolver {
|
|
11
|
+
/**
|
|
12
|
+
* 解析路径
|
|
13
|
+
* @param path 要解析的路径(可以是相对或绝对)
|
|
14
|
+
* @param contextPath 当前数据上下文路径
|
|
15
|
+
* @returns 解析后的绝对路径
|
|
16
|
+
*/
|
|
17
|
+
resolve(path: string, contextPath?: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* 规范化路径
|
|
20
|
+
* - 处理多余的斜杠
|
|
21
|
+
* - 处理 . 和 ..
|
|
22
|
+
*/
|
|
23
|
+
normalize(path: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* 获取父路径
|
|
26
|
+
* @example "/user/profile/name" -> "/user/profile"
|
|
27
|
+
*/
|
|
28
|
+
getParent(path: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* 获取路径的最后一段
|
|
31
|
+
* @example "/user/profile/name" -> "name"
|
|
32
|
+
*/
|
|
33
|
+
getBasename(path: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* 连接路径
|
|
36
|
+
*/
|
|
37
|
+
join(...paths: string[]): string;
|
|
38
|
+
/**
|
|
39
|
+
* 检查路径是否为另一个路径的子路径
|
|
40
|
+
*/
|
|
41
|
+
isChildOf(childPath: string, parentPath: string): boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 默认路径解析器实例
|
|
45
|
+
*/
|
|
46
|
+
export declare const pathResolver: PathResolver;
|
|
47
|
+
export default PathResolver;
|