@tdesign-react/chat 1.0.2-alpha.9 → 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.js +1 -1
- package/es/_util/useDynamicStyle.js +1 -1
- package/es/attachments/index.js +1 -1
- package/es/chat-actionbar/index.js +1 -1
- 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/chat-engine/components/activity/index.js +1 -1
- package/es/chat-engine/components/activity/registry.d.ts +1 -1
- package/es/chat-engine/components/activity/registry.js +1 -1
- package/es/chat-engine/components/activity/registry.js.map +1 -1
- package/es/chat-engine/components/activity/render.d.ts +2 -2
- package/es/chat-engine/components/activity/render.js +1 -1
- package/es/chat-engine/components/activity/render.js.map +1 -1
- package/es/chat-engine/components/activity/types.js +1 -1
- package/es/chat-engine/components/index.d.ts +1 -0
- package/es/chat-engine/components/index.js +57 -9
- package/es/chat-engine/components/index.js.map +1 -1
- 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 +32 -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 +33 -4
- 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 +42 -2
- package/es/chat-engine/core/adapters/agui/event-mapper.js +90 -50
- package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/events.d.ts +222 -222
- package/es/chat-engine/core/adapters/agui/events.js +34 -34
- package/es/chat-engine/core/adapters/agui/events.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/index.d.ts +22 -2
- package/es/chat-engine/core/adapters/agui/index.js +34 -14
- package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/state-manager.js +1 -1
- package/es/chat-engine/core/adapters/agui/types.d.ts +57 -56
- package/es/chat-engine/core/adapters/agui/types.js +5 -5
- package/es/chat-engine/core/adapters/agui/types.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/utils.d.ts +9 -3
- package/es/chat-engine/core/adapters/agui/utils.js +23 -4
- package/es/chat-engine/core/adapters/agui/utils.js.map +1 -1
- 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 +16 -1
- package/es/chat-engine/core/index.js +174 -17
- package/es/chat-engine/core/index.js.map +1 -1
- package/es/chat-engine/core/processor/index.js +1 -1
- package/es/chat-engine/core/server/batch-client.js +1 -1
- package/es/chat-engine/core/server/connection-manager.js +1 -1
- package/es/chat-engine/core/server/errors.js +1 -1
- package/es/chat-engine/core/server/index.js +1 -1
- package/es/chat-engine/core/server/llm-service.js +17 -15
- package/es/chat-engine/core/server/llm-service.js.map +1 -1
- package/es/chat-engine/core/server/sse-client.js +1 -1
- package/es/chat-engine/core/server/sse-parser.js +1 -1
- package/es/chat-engine/core/server/types.js +1 -1
- package/es/chat-engine/core/store/message.js +2 -2
- package/es/chat-engine/core/store/message.js.map +1 -1
- package/es/chat-engine/core/store/model.js +1 -1
- package/es/chat-engine/core/store/reactiveState.js +1 -1
- package/es/chat-engine/core/type.d.ts +18 -2
- package/es/chat-engine/core/type.js +1 -1
- package/es/chat-engine/core/utils/eventEmitter.js +1 -1
- package/es/chat-engine/core/utils/index.js +1 -1
- package/es/chat-engine/core/utils/logger.js +1 -1
- 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/index.js.map +1 -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.js +38 -4
- package/es/chat-engine/hooks/index.js.map +1 -1
- package/es/chat-engine/hooks/useAgentActivity.d.ts +1 -2
- package/es/chat-engine/hooks/useAgentActivity.js +1 -1
- package/es/chat-engine/hooks/useAgentActivity.js.map +1 -1
- 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 +40 -2
- 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 +1 -3
- package/es/chat-engine/index.js +30 -8
- package/es/chat-engine/index.js.map +1 -1
- package/es/chat-filecard/index.js +1 -1
- package/es/chat-loading/index.js +1 -1
- package/es/chat-markdown/index.js +1 -1
- package/es/chat-message/index.js +1 -1
- package/es/chat-sender/index.js +1 -1
- package/es/chat-thinking/index.js +1 -1
- package/es/chatbot/docs/react-best-practice.d.ts +13 -0
- package/es/chatbot/index.js +1 -1
- package/es/index.js +27 -5
- package/es/index.js.map +1 -1
- package/es/style/index.js +1 -1
- package/package.json +6 -3
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.2-alpha.14
|
|
3
|
+
* (c) 2026 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
8
|
+
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
9
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
10
|
+
import _typeof from '@babel/runtime/helpers/typeof';
|
|
11
|
+
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
12
|
+
import React__default, { useRef, useSyncExternalStore, useEffect, useMemo } from 'react';
|
|
13
|
+
import '../../core/a2ui/index.js';
|
|
14
|
+
import { A2UISurfaceRenderer } from './A2UISurfaceRenderer.js';
|
|
15
|
+
import { defaultComponentRegistry } from './registry.js';
|
|
16
|
+
import { A2uiMessageProcessor } from '../../core/a2ui/processor/A2uiMessageProcessor.js';
|
|
17
|
+
import '../../core/a2ui/types/index.js';
|
|
18
|
+
import '../../core/a2ui/types/types.js';
|
|
19
|
+
import 'zod';
|
|
20
|
+
import '../../core/a2ui/utils/index.js';
|
|
21
|
+
import '../../core/a2ui/utils/binding.js';
|
|
22
|
+
import '../../core/a2ui/utils/validation.js';
|
|
23
|
+
import '@babel/runtime/helpers/toConsumableArray';
|
|
24
|
+
import '../../core/a2ui/processor/DataStore.js';
|
|
25
|
+
import '@babel/runtime/helpers/toArray';
|
|
26
|
+
import '@babel/runtime/helpers/classCallCheck';
|
|
27
|
+
import '@babel/runtime/helpers/createClass';
|
|
28
|
+
import '../../core/a2ui/processor/ComponentTree.js';
|
|
29
|
+
import '../../core/a2ui/processor/PathResolver.js';
|
|
30
|
+
import '../../hooks/a2ui/A2UIContext.js';
|
|
31
|
+
import '../../hooks/a2ui/useA2UISurface.js';
|
|
32
|
+
import './A2UIComponentRenderer.js';
|
|
33
|
+
import './A2UIErrorBoundary.js';
|
|
34
|
+
import '@babel/runtime/helpers/possibleConstructorReturn';
|
|
35
|
+
import '@babel/runtime/helpers/getPrototypeOf';
|
|
36
|
+
import '@babel/runtime/helpers/inherits';
|
|
37
|
+
import './A2UISkeleton.js';
|
|
38
|
+
import 'tdesign-react';
|
|
39
|
+
import './primitives/A2UIText.js';
|
|
40
|
+
import 'classnames';
|
|
41
|
+
import '../../hooks/a2ui/useDataBinding.js';
|
|
42
|
+
import './primitives/A2UIImage.js';
|
|
43
|
+
import './primitives/A2UIIcon.js';
|
|
44
|
+
import './primitives/A2UIButton.js';
|
|
45
|
+
import '../../hooks/a2ui/useA2UIAction.js';
|
|
46
|
+
import './primitives/A2UIInput.js';
|
|
47
|
+
import './primitives/A2UITextField.js';
|
|
48
|
+
import './primitives/A2UICheckBox.js';
|
|
49
|
+
import './primitives/A2UIChoicePicker.js';
|
|
50
|
+
import './primitives/A2UISlider.js';
|
|
51
|
+
import './primitives/A2UIRadioGroup.js';
|
|
52
|
+
import './primitives/A2UICheckboxGroup.js';
|
|
53
|
+
import './primitives/A2UIDivider.js';
|
|
54
|
+
import './containers/A2UICard.js';
|
|
55
|
+
import './containers/A2UIRow.js';
|
|
56
|
+
import './containers/A2UIColumn.js';
|
|
57
|
+
import './containers/A2UIList.js';
|
|
58
|
+
import './containers/A2UITabs.js';
|
|
59
|
+
|
|
60
|
+
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; }
|
|
61
|
+
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; }
|
|
62
|
+
function resolveActionContext(actionContext, getData) {
|
|
63
|
+
var resolved = {};
|
|
64
|
+
if (!actionContext || _typeof(actionContext) !== "object") {
|
|
65
|
+
return resolved;
|
|
66
|
+
}
|
|
67
|
+
for (var _i = 0, _Object$entries = Object.entries(actionContext); _i < _Object$entries.length; _i++) {
|
|
68
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
69
|
+
key = _Object$entries$_i[0],
|
|
70
|
+
value = _Object$entries$_i[1];
|
|
71
|
+
if (_typeof(value) === "object" && value && "path" in value) {
|
|
72
|
+
var path = value.path;
|
|
73
|
+
resolved[key] = getData === null || getData === void 0 ? void 0 : getData(path);
|
|
74
|
+
} else {
|
|
75
|
+
resolved[key] = value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return resolved;
|
|
79
|
+
}
|
|
80
|
+
function createA2UIActionHandler(onAction) {
|
|
81
|
+
return /*#__PURE__*/function () {
|
|
82
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(action, context) {
|
|
83
|
+
var name, resolvedContext, userActionMessage;
|
|
84
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
85
|
+
while (1) switch (_context.prev = _context.next) {
|
|
86
|
+
case 0:
|
|
87
|
+
name = action.name;
|
|
88
|
+
if (name) {
|
|
89
|
+
_context.next = 1;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
console.warn("[A2UI] Action \u7F3A\u5C11 name \u5B57\u6BB5:", action);
|
|
93
|
+
return _context.abrupt("return");
|
|
94
|
+
case 1:
|
|
95
|
+
resolvedContext = resolveActionContext(action.context, context === null || context === void 0 ? void 0 : context.getData);
|
|
96
|
+
userActionMessage = {
|
|
97
|
+
name: name,
|
|
98
|
+
surfaceId: (context === null || context === void 0 ? void 0 : context.surfaceId) || "unknown",
|
|
99
|
+
sourceComponentId: (context === null || context === void 0 ? void 0 : context.componentId) || "unknown",
|
|
100
|
+
timestamp: new Date().toISOString(),
|
|
101
|
+
context: resolvedContext
|
|
102
|
+
};
|
|
103
|
+
console.log("[A2UI] Action \u89E6\u53D1:", {
|
|
104
|
+
name: name,
|
|
105
|
+
userActionMessage: userActionMessage
|
|
106
|
+
});
|
|
107
|
+
_context.next = 2;
|
|
108
|
+
return onAction({
|
|
109
|
+
userActionMessage: userActionMessage,
|
|
110
|
+
action: action,
|
|
111
|
+
actionContext: context
|
|
112
|
+
});
|
|
113
|
+
case 2:
|
|
114
|
+
case "end":
|
|
115
|
+
return _context.stop();
|
|
116
|
+
}
|
|
117
|
+
}, _callee);
|
|
118
|
+
}));
|
|
119
|
+
return function (_x, _x2) {
|
|
120
|
+
return _ref.apply(this, arguments);
|
|
121
|
+
};
|
|
122
|
+
}();
|
|
123
|
+
}
|
|
124
|
+
function isA2UIServerMessage(msg) {
|
|
125
|
+
if (!msg || _typeof(msg) !== "object") return false;
|
|
126
|
+
return "createSurface" in msg || "updateComponents" in msg || "updateDataModel" in msg || "deleteSurface" in msg;
|
|
127
|
+
}
|
|
128
|
+
function convertToA2UIMessages(content, messageId) {
|
|
129
|
+
var _content$surface;
|
|
130
|
+
var messages = [];
|
|
131
|
+
var surfaceId = content.surfaceId || ((_content$surface = content.surface) === null || _content$surface === void 0 ? void 0 : _content$surface.id) || "surface-".concat(messageId);
|
|
132
|
+
var a2uiMessages = content.messages || content.operations;
|
|
133
|
+
if (a2uiMessages && a2uiMessages.length > 0) {
|
|
134
|
+
return a2uiMessages.filter(isA2UIServerMessage);
|
|
135
|
+
}
|
|
136
|
+
if (content.surface) {
|
|
137
|
+
messages.push({
|
|
138
|
+
createSurface: {
|
|
139
|
+
surfaceId: surfaceId,
|
|
140
|
+
catalogId: "default"
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
if (content.surface.data) {
|
|
144
|
+
messages.push({
|
|
145
|
+
updateDataModel: {
|
|
146
|
+
surfaceId: surfaceId,
|
|
147
|
+
path: "/",
|
|
148
|
+
op: "replace",
|
|
149
|
+
value: content.surface.data
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
if (content.surface.root) {
|
|
154
|
+
var components = flattenComponents(content.surface.root);
|
|
155
|
+
if (components.length > 0) {
|
|
156
|
+
messages.push({
|
|
157
|
+
updateComponents: {
|
|
158
|
+
surfaceId: surfaceId,
|
|
159
|
+
components: components
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return messages;
|
|
166
|
+
}
|
|
167
|
+
function flattenComponents(root) {
|
|
168
|
+
var components = [];
|
|
169
|
+
var idCounter = {
|
|
170
|
+
value: 0
|
|
171
|
+
};
|
|
172
|
+
function flatten(node, parentId) {
|
|
173
|
+
var nodeId = node.id || "comp_".concat(idCounter.value++);
|
|
174
|
+
var component = _objectSpread(_objectSpread({}, node), {}, {
|
|
175
|
+
id: nodeId
|
|
176
|
+
});
|
|
177
|
+
if (Array.isArray(node.children)) {
|
|
178
|
+
var childIds = node.children.map(function (child) {
|
|
179
|
+
if (typeof child === "string") {
|
|
180
|
+
return child;
|
|
181
|
+
}
|
|
182
|
+
return flatten(child);
|
|
183
|
+
});
|
|
184
|
+
component.children = childIds;
|
|
185
|
+
}
|
|
186
|
+
if (node.child && _typeof(node.child) === "object") {
|
|
187
|
+
component.child = flatten(node.child);
|
|
188
|
+
}
|
|
189
|
+
components.push(component);
|
|
190
|
+
return nodeId;
|
|
191
|
+
}
|
|
192
|
+
var rootWithId = _objectSpread(_objectSpread({}, root), {}, {
|
|
193
|
+
id: root.id || "root"
|
|
194
|
+
});
|
|
195
|
+
flatten(rootWithId);
|
|
196
|
+
return components;
|
|
197
|
+
}
|
|
198
|
+
var A2UIActivityRenderer = function A2UIActivityRenderer(_ref2) {
|
|
199
|
+
var content = _ref2.content,
|
|
200
|
+
messageId = _ref2.messageId,
|
|
201
|
+
registry = _ref2.registry,
|
|
202
|
+
onAction = _ref2.onAction,
|
|
203
|
+
loading = _ref2.loading,
|
|
204
|
+
className = _ref2.className,
|
|
205
|
+
style = _ref2.style,
|
|
206
|
+
deltaInfo = _ref2.deltaInfo;
|
|
207
|
+
var processorRef = useRef(null);
|
|
208
|
+
var lastContentRef = useRef(null);
|
|
209
|
+
var processedCountRef = useRef(0);
|
|
210
|
+
if (!processorRef.current) {
|
|
211
|
+
processorRef.current = new A2uiMessageProcessor({
|
|
212
|
+
onAction: onAction
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
var processor = processorRef.current;
|
|
216
|
+
var snapshot = useSyncExternalStore(processor.subscribe, processor.getSnapshot, processor.getServerSnapshot);
|
|
217
|
+
useEffect(function () {
|
|
218
|
+
if (!content) return;
|
|
219
|
+
var allMessages = content.messages || content.operations;
|
|
220
|
+
if (deltaInfo && allMessages && Array.isArray(allMessages)) {
|
|
221
|
+
var fromIndex = deltaInfo.fromIndex,
|
|
222
|
+
toIndex = deltaInfo.toIndex;
|
|
223
|
+
if (fromIndex < toIndex && fromIndex >= processedCountRef.current) {
|
|
224
|
+
var newMessages = allMessages.slice(fromIndex, toIndex).filter(isA2UIServerMessage);
|
|
225
|
+
if (newMessages.length > 0) {
|
|
226
|
+
processor.processMessagesIncremental(newMessages);
|
|
227
|
+
processedCountRef.current = toIndex;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
lastContentRef.current = content;
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
var contentStr = JSON.stringify(content);
|
|
234
|
+
var lastContentStr = lastContentRef.current ? JSON.stringify(lastContentRef.current) : "";
|
|
235
|
+
if (contentStr === lastContentStr && processedCountRef.current > 0) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
var messages = convertToA2UIMessages(content, messageId);
|
|
239
|
+
if (messages.length > 0) {
|
|
240
|
+
var _content$surface2;
|
|
241
|
+
var surfaceId = content.surfaceId || ((_content$surface2 = content.surface) === null || _content$surface2 === void 0 ? void 0 : _content$surface2.id) || "surface-".concat(messageId);
|
|
242
|
+
if (loading && !processor.getSurface(surfaceId)) {
|
|
243
|
+
var _content$surface3;
|
|
244
|
+
var skeletonHint = (_content$surface3 = content.surface) === null || _content$surface3 === void 0 ? void 0 : _content$surface3.skeletonHint;
|
|
245
|
+
processor.createPendingSurface(surfaceId, skeletonHint);
|
|
246
|
+
}
|
|
247
|
+
processor.processMessages(messages);
|
|
248
|
+
processedCountRef.current = messages.length;
|
|
249
|
+
}
|
|
250
|
+
lastContentRef.current = content;
|
|
251
|
+
}, [content, messageId, processor, loading, deltaInfo]);
|
|
252
|
+
var mergedRegistry = useMemo(function () {
|
|
253
|
+
return _objectSpread(_objectSpread({}, defaultComponentRegistry), registry);
|
|
254
|
+
}, [registry]);
|
|
255
|
+
var surfaceIds = Array.from(snapshot.keys());
|
|
256
|
+
if (surfaceIds.length === 0) {
|
|
257
|
+
return loading ? /* @__PURE__ */React__default.createElement("div", {
|
|
258
|
+
className: className,
|
|
259
|
+
style: style
|
|
260
|
+
}, loading) : null;
|
|
261
|
+
}
|
|
262
|
+
return /* @__PURE__ */React__default.createElement("div", {
|
|
263
|
+
className: className,
|
|
264
|
+
style: style
|
|
265
|
+
}, surfaceIds.map(function (surfaceId) {
|
|
266
|
+
return /* @__PURE__ */React__default.createElement(A2UISurfaceRenderer, {
|
|
267
|
+
key: surfaceId,
|
|
268
|
+
processor: processor,
|
|
269
|
+
surfaceId: surfaceId,
|
|
270
|
+
registry: mergedRegistry,
|
|
271
|
+
onAction: onAction,
|
|
272
|
+
loading: loading
|
|
273
|
+
});
|
|
274
|
+
}));
|
|
275
|
+
};
|
|
276
|
+
A2UIActivityRenderer.displayName = "A2UIActivityRenderer";
|
|
277
|
+
function createA2UIActivityConfig(options) {
|
|
278
|
+
var _ref3 = options || {},
|
|
279
|
+
_ref3$activityType = _ref3.activityType,
|
|
280
|
+
activityType = _ref3$activityType === void 0 ? "a2ui-surface" : _ref3$activityType,
|
|
281
|
+
registry = _ref3.registry,
|
|
282
|
+
onAction = _ref3.onAction,
|
|
283
|
+
loading = _ref3.loading;
|
|
284
|
+
var finalOnAction = onAction ? createA2UIActionHandler(onAction) : void 0;
|
|
285
|
+
return {
|
|
286
|
+
activityType: activityType,
|
|
287
|
+
component: function component(props) {
|
|
288
|
+
var _props$ext;
|
|
289
|
+
return /* @__PURE__ */React__default.createElement(A2UIActivityRenderer, _objectSpread(_objectSpread({}, props), {}, {
|
|
290
|
+
registry: registry,
|
|
291
|
+
onAction: finalOnAction,
|
|
292
|
+
loading: loading,
|
|
293
|
+
deltaInfo: (_props$ext = props.ext) === null || _props$ext === void 0 ? void 0 : _props$ext.deltaInfo
|
|
294
|
+
}));
|
|
295
|
+
},
|
|
296
|
+
description: "A2UI Surface \u6E32\u67D3\u5668"
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export { A2UIActivityRenderer, createA2UIActionHandler, createA2UIActivityConfig, A2UIActivityRenderer as default };
|
|
301
|
+
//# sourceMappingURL=A2UIActivityRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A2UIActivityRenderer.js","sources":["../../../../../pro-components/chat/chat-engine/components/a2ui/A2UIActivityRenderer.tsx"],"sourcesContent":["/**\n * A2UI Activity 渲染器\n * 将 A2UI v0.9 协议数据作为 Activity 进行渲染\n * \n * 支持的消息格式:\n * 1. A2UI v0.9 原生格式(createSurface、updateComponents、updateDataModel、deleteSurface)\n * 2. 简化的 surface 格式(向后兼容)\n * \n * 使用方式:\n * 1. 通过 useAgentActivity 注册此组件\n * 2. 后端发送 ACTIVITY_SNAPSHOT/ACTIVITY_DELTA 事件,activityType 为 'a2ui-surface'\n * 3. content 中包含 A2UI 协议消息\n */\n\nimport React, { useEffect, useMemo, useRef, useSyncExternalStore } from 'react';\nimport { A2uiMessageProcessor } from '../../core/a2ui';\nimport type {\n A2UIServerMessage,\n A2UIComponentBase,\n A2UIAction,\n ActionHandler,\n ActionContext,\n SkeletonHint,\n} from '../../core/a2ui';\nimport type { ComponentRegistry } from '../../hooks/a2ui/A2UIContext';\nimport { A2UISurfaceRenderer } from './A2UISurfaceRenderer';\nimport { defaultComponentRegistry } from './registry';\n\n// ============= A2UI 0.9 协议标准 Action 处理 =============\n\n/**\n * UserAction 消息格式(A2UI 0.9 规范)\n * 用于发送给服务端的用户操作消息\n */\nexport interface UserActionMessage {\n /** Action 名称 */\n name: string;\n /** 触发 Action 的 Surface ID */\n surfaceId: string;\n /** 触发 Action 的组件 ID */\n sourceComponentId: string;\n /** 时间戳 */\n timestamp: string;\n /** 解析后的上下文数据(数据绑定路径已解析为实际值) */\n context: Record<string, unknown>;\n}\n\n/**\n * Action 处理结果\n * 返回给业务层,由业务层决定如何处理\n */\nexport interface ActionResult {\n /** 构造好的 userAction 消息 */\n userActionMessage: UserActionMessage;\n /** 原始 Action 定义 */\n action: A2UIAction;\n /** Action 上下文 */\n actionContext?: ActionContext;\n}\n\n/**\n * Action 处理回调\n * 业务层通过此回调接收解析后的 Action 数据,自行决定是否发送请求\n */\nexport type OnActionCallback = (result: ActionResult) => void | Promise<void>;\n\n/**\n * 解析 Action 中的数据绑定路径\n * 将 { path: '/xxx' } 格式的绑定解析为实际数据值\n */\nfunction resolveActionContext(\n actionContext: Record<string, unknown> | undefined,\n getData?: (path?: string) => unknown\n): Record<string, unknown> {\n const resolved: Record<string, unknown> = {};\n \n if (!actionContext || typeof actionContext !== 'object') {\n return resolved;\n }\n\n for (const [key, value] of Object.entries(actionContext)) {\n if (typeof value === 'object' && value && 'path' in value) {\n // 解析数据绑定路径 { path: '/xxx' }\n const path = (value as { path: string }).path;\n resolved[key] = getData?.(path);\n } else {\n resolved[key] = value;\n }\n }\n\n return resolved;\n}\n\n/**\n * 创建 A2UI 0.9 协议标准的 Action 处理器\n * \n * 职责:\n * 1. 解析 Action 中的数据绑定路径\n * 2. 构造标准的 UserActionMessage\n * 3. 将处理结果传递给业务层回调\n * \n * @param onAction 业务层回调,接收解析后的 ActionResult\n * @returns ActionHandler\n */\nexport function createA2UIActionHandler(onAction: OnActionCallback): ActionHandler {\n return async (action: A2UIAction, context?: ActionContext) => {\n const { name } = action;\n \n if (!name) {\n console.warn('[A2UI] Action 缺少 name 字段:', action);\n return;\n }\n\n // 解析 context 中的数据绑定路径\n const resolvedContext = resolveActionContext(action.context, context?.getData);\n\n // 构造符合 A2UI 0.9 协议的 userAction 消息\n const userActionMessage: UserActionMessage = {\n name,\n surfaceId: context?.surfaceId || 'unknown',\n sourceComponentId: context?.componentId || 'unknown',\n timestamp: new Date().toISOString(),\n context: resolvedContext,\n };\n\n console.log('[A2UI] Action 触发:', { name, userActionMessage });\n\n // 将处理结果传递给业务层\n await onAction({\n userActionMessage,\n action,\n actionContext: context,\n });\n };\n}\n\n/**\n * A2UI Activity Content 类型\n * 支持 A2UI v0.9 原生格式和简化格式\n */\nexport interface A2UIActivityContent {\n /** A2UI v0.9 消息列表(标准名称) */\n messages?: A2UIServerMessage[];\n \n /** A2UI v0.9 消息列表(别名,向后兼容) */\n operations?: A2UIServerMessage[];\n \n /** 简化模式:单个 Surface 定义 */\n surface?: {\n id?: string;\n root?: A2UIComponentBase;\n data?: Record<string, unknown>;\n skeletonHint?: SkeletonHint;\n };\n \n /** Surface ID(用于简化模式) */\n surfaceId?: string;\n}\n\n/**\n * 增量信息类型\n */\nexport interface DeltaInfo {\n fromIndex: number;\n toIndex: number;\n}\n\nexport interface A2UIActivityRendererProps {\n /** Activity 类型 */\n activityType?: string;\n /** Activity 内容数据 */\n content: A2UIActivityContent;\n /** 关联的消息 ID */\n messageId: string;\n /** 自定义组件注册表 */\n registry?: ComponentRegistry;\n /** Action 处理回调 */\n onAction?: ActionHandler;\n /** \n * 加载中占位\n * - ReactNode: 自定义骨架屏组件\n * - true: 使用服务端 skeletonHint 自动渲染骨架屏\n */\n loading?: React.ReactNode | boolean;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 增量信息(由 AG-UI adapter 提供) */\n deltaInfo?: DeltaInfo;\n}\n\n/**\n * 检查是否为 A2UI v0.9 原生消息格式\n */\nfunction isA2UIServerMessage(msg: unknown): msg is A2UIServerMessage {\n if (!msg || typeof msg !== 'object') return false;\n return (\n 'createSurface' in msg ||\n 'updateComponents' in msg ||\n 'updateDataModel' in msg ||\n 'deleteSurface' in msg\n );\n}\n\n/**\n * 将简化格式转换为 A2UI v0.9 消息\n */\nfunction convertToA2UIMessages(\n content: A2UIActivityContent,\n messageId: string\n): A2UIServerMessage[] {\n const messages: A2UIServerMessage[] = [];\n const surfaceId = content.surfaceId || content.surface?.id || `surface-${messageId}`;\n\n // 优先使用 messages 字段(A2UI v0.9 标准),其次使用 operations(别名)\n const a2uiMessages = content.messages || content.operations;\n if (a2uiMessages && a2uiMessages.length > 0) {\n // 验证并过滤有效消息\n return a2uiMessages.filter(isA2UIServerMessage);\n }\n\n // 简化格式转换\n if (content.surface) {\n // 1. 创建 Surface\n messages.push({\n createSurface: {\n surfaceId,\n catalogId: 'default',\n },\n });\n\n // 2. 如果有数据,更新数据模型\n if (content.surface.data) {\n messages.push({\n updateDataModel: {\n surfaceId,\n path: '/',\n op: 'replace',\n value: content.surface.data,\n },\n });\n }\n\n // 3. 如果有 root 组件,转换为 components 数组\n if (content.surface.root) {\n const components = flattenComponents(content.surface.root);\n if (components.length > 0) {\n messages.push({\n updateComponents: {\n surfaceId,\n components,\n },\n });\n }\n }\n }\n\n return messages;\n}\n\n/**\n * 将嵌套组件树展平为组件数组\n * A2UI v0.9 要求组件以平铺形式存储,通过 id 引用\n */\nfunction flattenComponents(root: A2UIComponentBase): A2UIComponentBase[] {\n const components: A2UIComponentBase[] = [];\n const idCounter = { value: 0 };\n\n function flatten(node: any, parentId?: string): string {\n // 确保有 id\n const nodeId = node.id || `comp_${idCounter.value++}`;\n \n // 创建新组件(不包含嵌套 children)\n const component: A2UIComponentBase = {\n ...node,\n id: nodeId,\n };\n\n // 处理 children\n if (Array.isArray(node.children)) {\n const childIds = node.children.map((child: any) => {\n if (typeof child === 'string') {\n return child;\n }\n return flatten(child);\n });\n component.children = childIds;\n }\n\n // 处理 child(单子组件)\n if (node.child && typeof node.child === 'object') {\n component.child = flatten(node.child);\n }\n\n components.push(component);\n return nodeId;\n }\n\n // 从 root 开始展平,确保 root id 为 'root'\n const rootWithId = { ...root, id: root.id || 'root' };\n flatten(rootWithId);\n\n return components;\n}\n\n/**\n * A2UI Activity 渲染器组件\n */\nexport const A2UIActivityRenderer: React.FC<A2UIActivityRendererProps> = ({\n content,\n messageId,\n registry,\n onAction,\n loading,\n className,\n style,\n deltaInfo,\n}) => {\n // 创建或获取 Processor\n const processorRef = useRef<A2uiMessageProcessor | null>(null);\n const lastContentRef = useRef<A2UIActivityContent | null>(null);\n const processedCountRef = useRef(0);\n\n // 初始化 processor\n if (!processorRef.current) {\n processorRef.current = new A2uiMessageProcessor({ onAction });\n }\n const processor = processorRef.current;\n\n // 订阅 processor 变化\n const snapshot = useSyncExternalStore(\n processor.subscribe,\n processor.getSnapshot,\n processor.getServerSnapshot\n );\n\n // 处理 content 变化\n useEffect(() => {\n if (!content) return;\n\n // 获取 A2UI 消息\n const allMessages = content.messages || content.operations;\n \n // 如果有增量信息且有消息数组,使用增量处理\n if (deltaInfo && allMessages && Array.isArray(allMessages)) {\n const { fromIndex, toIndex } = deltaInfo;\n \n // 只处理新增的消息\n if (fromIndex < toIndex && fromIndex >= processedCountRef.current) {\n const newMessages = allMessages.slice(fromIndex, toIndex).filter(isA2UIServerMessage);\n \n if (newMessages.length > 0) {\n // 使用增量处理方法\n processor.processMessagesIncremental(newMessages);\n processedCountRef.current = toIndex;\n }\n }\n \n lastContentRef.current = content;\n return;\n }\n\n // 非增量模式:完整处理\n const contentStr = JSON.stringify(content);\n const lastContentStr = lastContentRef.current ? JSON.stringify(lastContentRef.current) : '';\n \n if (contentStr === lastContentStr && processedCountRef.current > 0) {\n return;\n }\n\n // 转换为 A2UI v0.9 消息格式\n const messages = convertToA2UIMessages(content, messageId);\n\n if (messages.length > 0) {\n // 获取 surfaceId 用于骨架屏\n const surfaceId = content.surfaceId || content.surface?.id || `surface-${messageId}`;\n \n // 如果有 loading 且 Surface 不存在,先创建 pending 状态\n if (loading && !processor.getSurface(surfaceId)) {\n const skeletonHint = content.surface?.skeletonHint;\n processor.createPendingSurface(surfaceId, skeletonHint);\n }\n\n // 处理消息\n processor.processMessages(messages);\n processedCountRef.current = messages.length;\n }\n\n lastContentRef.current = content;\n }, [content, messageId, processor, loading, deltaInfo]);\n\n // 合并组件注册表\n const mergedRegistry = useMemo<ComponentRegistry>(\n () => ({\n ...defaultComponentRegistry,\n ...registry,\n }),\n [registry]\n );\n\n // 获取当前所有 surface IDs\n const surfaceIds = Array.from(snapshot.keys());\n\n // 如果没有 surface,显示 loading 占位\n if (surfaceIds.length === 0) {\n return loading ? <div className={className} style={style}>{loading}</div> : null;\n }\n\n return (\n <div className={className} style={style}>\n {surfaceIds.map((surfaceId) => (\n <A2UISurfaceRenderer\n key={surfaceId}\n processor={processor}\n surfaceId={surfaceId}\n registry={mergedRegistry}\n onAction={onAction}\n loading={loading}\n />\n ))}\n </div>\n );\n};\n\nA2UIActivityRenderer.displayName = 'A2UIActivityRenderer';\n\n/**\n * A2UI Activity 配置选项\n */\nexport interface A2UIActivityConfigOptions {\n /** Activity 类型标识 */\n activityType?: string;\n /** 自定义组件注册表 */\n registry?: ComponentRegistry;\n /**\n * Action 处理回调(推荐使用)\n * \n * 接收解析后的 ActionResult,包含:\n * - userActionMessage: 构造好的标准消息,可直接发送给服务端\n * - action: 原始 Action 定义\n * - actionContext: Action 上下文(包含 getData、updateData 等方法)\n * \n * 业务层自行决定:\n * 1. 是否需要发送请求到服务端\n * 2. 是否需要本地处理(如 reset 操作)\n * 3. 是否需要更新本地状态\n * \n * @example\n * ```tsx\n * createA2UIActivityConfig({\n * onAction: async ({ userActionMessage, action, actionContext }) => {\n * // 根据 action.name 决定处理方式\n * if (action.name === 'reset') {\n * // 本地处理,不发送请求\n * actionContext?.updateData('/', initialData);\n * return;\n * }\n * \n * // 发送请求到服务端\n * await chatEngine.sendAIMessage({\n * params: { userActionMessage },\n * sendRequest: true,\n * });\n * }\n * })\n * ```\n */\n onAction?: OnActionCallback;\n /** 加载中占位 */\n loading?: React.ReactNode | boolean;\n}\n\n/**\n * 创建 A2UI Activity 配置\n * \n * @example\n * ```tsx\n * const { chatEngine } = useChat({ ... });\n * \n * const a2uiConfig = useMemo(() => createA2UIActivityConfig({\n * onAction: async ({ userActionMessage, action }) => {\n * // 本地操作不发请求\n * if (action.name === 'reset') return;\n * \n * // 其他操作发送到服务端\n * await chatEngine.sendAIMessage({\n * params: { userActionMessage },\n * sendRequest: true,\n * });\n * }\n * }), [chatEngine]);\n * \n * useAgentActivity(a2uiConfig);\n * ```\n */\nexport function createA2UIActivityConfig(options?: A2UIActivityConfigOptions) {\n const {\n activityType = 'a2ui-surface',\n registry,\n onAction,\n loading,\n } = options || {};\n\n // 使用 onAction 回调创建内置处理器\n const finalOnAction = onAction ? createA2UIActionHandler(onAction) : undefined;\n\n return {\n activityType,\n component: (props: { \n activityType: string; \n content: A2UIActivityContent; \n messageId: string;\n ext?: { deltaInfo?: DeltaInfo };\n }) => (\n <A2UIActivityRenderer\n {...props}\n registry={registry}\n onAction={finalOnAction}\n loading={loading}\n deltaInfo={props.ext?.deltaInfo}\n />\n ),\n description: 'A2UI Surface 渲染器',\n };\n}\n\nexport default A2UIActivityRenderer;\n"],"names":["resolveActionContext","actionContext","getData","resolved","_typeof","_i","_Object$entries","Object","entries","length","_Object$entries$_i","_slicedToArray","key","value","path","createA2UIActionHandler","onAction","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","action","context","name","resolvedContext","userActionMessage","wrap","_context","prev","next","console","warn","abrupt","surfaceId","sourceComponentId","componentId","timestamp","Date","toISOString","log","stop","_x","_x2","apply","arguments","isA2UIServerMessage","msg","convertToA2UIMessages","content","messageId","_content$surface","messages","surface","id","a2uiMessages","operations","filter","push","createSurface","catalogId","data","updateDataModel","op","root","components","flattenComponents","updateComponents","idCounter","flatten","node","parentId","nodeId","concat","component","_objectSpread","Array","isArray","children","childIds","map","child","rootWithId","A2UIActivityRenderer","_ref2","registry","loading","className","style","deltaInfo","processorRef","useRef","lastContentRef","processedCountRef","current","A2uiMessageProcessor","processor","snapshot","useSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","useEffect","allMessages","fromIndex","toIndex","newMessages","slice","processMessagesIncremental","contentStr","JSON","stringify","lastContentStr","_content$surface2","getSurface","_content$surface3","skeletonHint","createPendingSurface","processMessages","mergedRegistry","useMemo","defaultComponentRegistry","surfaceIds","from","keys","React","createElement","A2UISurfaceRenderer","displayName","createA2UIActivityConfig","options","_ref3","_ref3$activityType","activityType","finalOnAction","props","_props$ext","ext","description"],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2UI 组件渲染器
|
|
3
|
+
* 根据组件类型分发到具体渲染实现
|
|
4
|
+
* 支持 A2UI v0.9 的 ResolvedComponent 结构
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import type { ResolvedComponent, A2UIComponentBase } from '../../core/a2ui';
|
|
8
|
+
export interface A2UIComponentRendererProps {
|
|
9
|
+
/** 要渲染的组件(支持 ResolvedComponent 或 A2UIComponentBase) */
|
|
10
|
+
component: ResolvedComponent | A2UIComponentBase;
|
|
11
|
+
className?: string;
|
|
12
|
+
style?: React.CSSProperties;
|
|
13
|
+
/** 是否在渲染错误时显示错误 UI(默认 false) */
|
|
14
|
+
showError?: boolean;
|
|
15
|
+
/** 组件渲染错误回调 */
|
|
16
|
+
onRenderError?: (error: Error, componentType?: string, componentId?: string) => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A2UI 组件渲染器
|
|
20
|
+
*
|
|
21
|
+
* 功能:
|
|
22
|
+
* 1. 从 ComponentRegistry 中查找对应组件类型的渲染器
|
|
23
|
+
* 2. 使用错误边界包裹,防止单个组件错误导致整个 Surface 崩溃
|
|
24
|
+
* 3. 支持自定义错误处理和错误 UI 显示
|
|
25
|
+
* 4. 支持 DataContextProvider 处理 template 渲染
|
|
26
|
+
*/
|
|
27
|
+
export declare const A2UIComponentRenderer: React.FC<A2UIComponentRendererProps>;
|
|
28
|
+
interface A2UIChildrenRendererProps {
|
|
29
|
+
children?: ResolvedComponent[];
|
|
30
|
+
className?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 渲染子组件列表
|
|
34
|
+
* 用于容器组件渲染其 resolvedChildren
|
|
35
|
+
*/
|
|
36
|
+
export declare const A2UIChildrenRenderer: React.FC<A2UIChildrenRendererProps>;
|
|
37
|
+
export default A2UIComponentRenderer;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.2-alpha.14
|
|
3
|
+
* (c) 2026 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
8
|
+
import React__default, { memo, useMemo } from 'react';
|
|
9
|
+
import { useComponentRegistry, DataContextProvider } from '../../hooks/a2ui/A2UIContext.js';
|
|
10
|
+
import { A2UIErrorBoundary } from './A2UIErrorBoundary.js';
|
|
11
|
+
import '@babel/runtime/helpers/classCallCheck';
|
|
12
|
+
import '@babel/runtime/helpers/createClass';
|
|
13
|
+
import '@babel/runtime/helpers/possibleConstructorReturn';
|
|
14
|
+
import '@babel/runtime/helpers/getPrototypeOf';
|
|
15
|
+
import '@babel/runtime/helpers/inherits';
|
|
16
|
+
|
|
17
|
+
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; }
|
|
18
|
+
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; }
|
|
19
|
+
var UnknownComponent = function UnknownComponent(_ref) {
|
|
20
|
+
var componentType = _ref.componentType;
|
|
21
|
+
return /* @__PURE__ */React__default.createElement("div", {
|
|
22
|
+
className: "a2ui-unknown-component",
|
|
23
|
+
style: {
|
|
24
|
+
padding: "8px 12px",
|
|
25
|
+
backgroundColor: "rgba(250, 173, 20, 0.1)",
|
|
26
|
+
border: "1px solid rgba(250, 173, 20, 0.3)",
|
|
27
|
+
borderRadius: "4px",
|
|
28
|
+
color: "#faad14",
|
|
29
|
+
fontSize: "12px"
|
|
30
|
+
}
|
|
31
|
+
}, "\u672A\u77E5\u7EC4\u4EF6\u7C7B\u578B: ", componentType);
|
|
32
|
+
};
|
|
33
|
+
var InnerComponentRenderer = /*#__PURE__*/memo(function (props) {
|
|
34
|
+
var component = props.component,
|
|
35
|
+
className = props.className,
|
|
36
|
+
style = props.style;
|
|
37
|
+
var _useComponentRegistry = useComponentRegistry(),
|
|
38
|
+
getComponent = _useComponentRegistry.getComponent;
|
|
39
|
+
var resolvedComp = component;
|
|
40
|
+
var componentType = resolvedComp.component;
|
|
41
|
+
var id = resolvedComp.id;
|
|
42
|
+
var resolvedChildren = resolvedComp.resolvedChildren;
|
|
43
|
+
var dataContextPath = resolvedComp.dataContextPath;
|
|
44
|
+
var componentProps = _objectSpread({}, resolvedComp);
|
|
45
|
+
delete componentProps.component;
|
|
46
|
+
delete componentProps.resolvedChildren;
|
|
47
|
+
delete componentProps.dataContextPath;
|
|
48
|
+
var Component = getComponent(componentType);
|
|
49
|
+
if (!Component) {
|
|
50
|
+
console.warn("[A2UI] Unknown component type: ".concat(componentType));
|
|
51
|
+
return /* @__PURE__ */React__default.createElement(UnknownComponent, {
|
|
52
|
+
componentType: componentType
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
var content = /* @__PURE__ */React__default.createElement(Component, _objectSpread(_objectSpread({}, componentProps), {}, {
|
|
56
|
+
id: id,
|
|
57
|
+
className: className,
|
|
58
|
+
style: style,
|
|
59
|
+
resolvedChildren: resolvedChildren
|
|
60
|
+
}));
|
|
61
|
+
if (dataContextPath && dataContextPath !== "/") {
|
|
62
|
+
return /* @__PURE__ */React__default.createElement(DataContextProvider, {
|
|
63
|
+
path: dataContextPath
|
|
64
|
+
}, content);
|
|
65
|
+
}
|
|
66
|
+
return content;
|
|
67
|
+
});
|
|
68
|
+
InnerComponentRenderer.displayName = "InnerComponentRenderer";
|
|
69
|
+
var A2UIComponentRenderer = /*#__PURE__*/memo(function (props) {
|
|
70
|
+
var component = props.component,
|
|
71
|
+
className = props.className,
|
|
72
|
+
style = props.style,
|
|
73
|
+
_props$showError = props.showError,
|
|
74
|
+
showError = _props$showError === void 0 ? false : _props$showError,
|
|
75
|
+
onRenderError = props.onRenderError;
|
|
76
|
+
var componentType = component === null || component === void 0 ? void 0 : component.component;
|
|
77
|
+
var componentId = component === null || component === void 0 ? void 0 : component.id;
|
|
78
|
+
var errorBoundaryKey = useMemo(function () {
|
|
79
|
+
return "".concat(componentType, "-").concat(componentId || "unknown");
|
|
80
|
+
}, [componentType, componentId]);
|
|
81
|
+
if (!component) {
|
|
82
|
+
console.warn("[A2UI] Received null/undefined component");
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
return /* @__PURE__ */React__default.createElement(A2UIErrorBoundary, {
|
|
86
|
+
key: errorBoundaryKey,
|
|
87
|
+
componentType: componentType,
|
|
88
|
+
componentId: componentId,
|
|
89
|
+
showError: showError,
|
|
90
|
+
onError: onRenderError
|
|
91
|
+
}, /* @__PURE__ */React__default.createElement(InnerComponentRenderer, {
|
|
92
|
+
component: component,
|
|
93
|
+
className: className,
|
|
94
|
+
style: style
|
|
95
|
+
}));
|
|
96
|
+
});
|
|
97
|
+
A2UIComponentRenderer.displayName = "A2UIComponentRenderer";
|
|
98
|
+
var A2UIChildrenRenderer = /*#__PURE__*/memo(function (props) {
|
|
99
|
+
var children = props.children,
|
|
100
|
+
className = props.className;
|
|
101
|
+
if (!children || children.length === 0) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
return /* @__PURE__ */React__default.createElement("div", {
|
|
105
|
+
className: className
|
|
106
|
+
}, children.map(function (child, index) {
|
|
107
|
+
return /* @__PURE__ */React__default.createElement(A2UIComponentRenderer, {
|
|
108
|
+
key: child.id || "child-".concat(index),
|
|
109
|
+
component: child
|
|
110
|
+
});
|
|
111
|
+
}));
|
|
112
|
+
});
|
|
113
|
+
A2UIChildrenRenderer.displayName = "A2UIChildrenRenderer";
|
|
114
|
+
|
|
115
|
+
export { A2UIChildrenRenderer, A2UIComponentRenderer, A2UIComponentRenderer as default };
|
|
116
|
+
//# sourceMappingURL=A2UIComponentRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A2UIComponentRenderer.js","sources":["../../../../../pro-components/chat/chat-engine/components/a2ui/A2UIComponentRenderer.tsx"],"sourcesContent":["/**\n * A2UI 组件渲染器\n * 根据组件类型分发到具体渲染实现\n * 支持 A2UI v0.9 的 ResolvedComponent 结构\n */\n\nimport React, { memo, useMemo } from 'react';\nimport { useComponentRegistry, DataContextProvider } from '../../hooks/a2ui/A2UIContext';\nimport { A2UIErrorBoundary } from './A2UIErrorBoundary';\nimport type { ResolvedComponent, A2UIComponentBase } from '../../core/a2ui';\n\nexport interface A2UIComponentRendererProps {\n /** 要渲染的组件(支持 ResolvedComponent 或 A2UIComponentBase) */\n component: ResolvedComponent | A2UIComponentBase;\n className?: string;\n style?: React.CSSProperties;\n /** 是否在渲染错误时显示错误 UI(默认 false) */\n showError?: boolean;\n /** 组件渲染错误回调 */\n onRenderError?: (error: Error, componentType?: string, componentId?: string) => void;\n}\n\ninterface InnerComponentRendererProps {\n component: ResolvedComponent | A2UIComponentBase;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * 未知组件占位\n */\nconst UnknownComponent: React.FC<{ componentType: string }> = ({ componentType }) => (\n <div\n className=\"a2ui-unknown-component\"\n style={{\n padding: '8px 12px',\n backgroundColor: 'rgba(250, 173, 20, 0.1)',\n border: '1px solid rgba(250, 173, 20, 0.3)',\n borderRadius: '4px',\n color: '#faad14',\n fontSize: '12px',\n }}\n >\n 未知组件类型: {componentType}\n </div>\n);\n\n/**\n * 内部组件渲染器(无错误边界)\n */\nconst InnerComponentRenderer: React.FC<InnerComponentRendererProps> = memo((props: InnerComponentRendererProps) => {\n const { component, className, style } = props;\n const { getComponent } = useComponentRegistry();\n\n const resolvedComp = component as ResolvedComponent;\n const componentType = resolvedComp.component;\n const id = resolvedComp.id;\n const resolvedChildren = resolvedComp.resolvedChildren;\n const dataContextPath = resolvedComp.dataContextPath;\n \n // 其他属性传递给具体组件\n const componentProps = { ...resolvedComp } as Record<string, unknown>;\n delete componentProps.component;\n delete componentProps.resolvedChildren;\n delete componentProps.dataContextPath;\n\n const Component = getComponent(componentType);\n\n if (!Component) {\n console.warn(`[A2UI] Unknown component type: ${componentType}`);\n return <UnknownComponent componentType={componentType} />;\n }\n\n // 如果有 dataContextPath,使用 DataContextProvider 包裹\n const content = (\n <Component\n {...componentProps}\n id={id}\n className={className}\n style={style}\n // 传递解析后的子组件(如果有)\n resolvedChildren={resolvedChildren}\n />\n );\n\n // 如果组件有自己的 dataContextPath(如 template 渲染的组件),包裹 DataContextProvider\n if (dataContextPath && dataContextPath !== '/') {\n return (\n <DataContextProvider path={dataContextPath}>\n {content}\n </DataContextProvider>\n );\n }\n\n return content;\n});\n\nInnerComponentRenderer.displayName = 'InnerComponentRenderer';\n\n/**\n * A2UI 组件渲染器\n * \n * 功能:\n * 1. 从 ComponentRegistry 中查找对应组件类型的渲染器\n * 2. 使用错误边界包裹,防止单个组件错误导致整个 Surface 崩溃\n * 3. 支持自定义错误处理和错误 UI 显示\n * 4. 支持 DataContextProvider 处理 template 渲染\n */\nexport const A2UIComponentRenderer: React.FC<A2UIComponentRendererProps> = memo((props: A2UIComponentRendererProps) => {\n const { component, className, style, showError = false, onRenderError } = props;\n \n // 提取组件信息用于错误边界\n const componentType = (component as ResolvedComponent)?.component;\n const componentId = (component as ResolvedComponent)?.id;\n\n // 使用 useMemo 避免每次渲染都创建新的错误边界 key\n const errorBoundaryKey = useMemo(\n () => `${componentType}-${componentId || 'unknown'}`,\n [componentType, componentId]\n );\n\n // 空组件检查\n if (!component) {\n console.warn('[A2UI] Received null/undefined component');\n return null;\n }\n\n return (\n <A2UIErrorBoundary\n key={errorBoundaryKey}\n componentType={componentType}\n componentId={componentId}\n showError={showError}\n onError={onRenderError}\n >\n <InnerComponentRenderer\n component={component}\n className={className}\n style={style}\n />\n </A2UIErrorBoundary>\n );\n});\n\nA2UIComponentRenderer.displayName = 'A2UIComponentRenderer';\n\ninterface A2UIChildrenRendererProps {\n children?: ResolvedComponent[];\n className?: string;\n}\n\n/**\n * 渲染子组件列表\n * 用于容器组件渲染其 resolvedChildren\n */\nexport const A2UIChildrenRenderer: React.FC<A2UIChildrenRendererProps> = memo((props: A2UIChildrenRendererProps) => {\n const { children, className } = props;\n if (!children || children.length === 0) {\n return null;\n }\n\n return (\n <div className={className}>\n {children.map((child, index) => (\n <A2UIComponentRenderer\n key={child.id || `child-${index}`}\n component={child}\n />\n ))}\n </div>\n );\n});\n\nA2UIChildrenRenderer.displayName = 'A2UIChildrenRenderer';\n\nexport default A2UIComponentRenderer;\n"],"names":["UnknownComponent","_ref","componentType","React","createElement","className","style","padding","backgroundColor","border","borderRadius","color","fontSize","InnerComponentRenderer","memo","props","component","_useComponentRegistry","useComponentRegistry","getComponent","resolvedComp","id","resolvedChildren","dataContextPath","componentProps","_objectSpread","Component","console","warn","concat","content","DataContextProvider","path","displayName","A2UIComponentRenderer","showError","_props$showError","onRenderError","componentId","errorBoundaryKey","useMemo","A2UIErrorBoundary","key","onError","A2UIChildrenRenderer","children","length","map","child","index"],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2UI 错误边界组件
|
|
3
|
+
* 捕获组件渲染错误,防止整个 Surface 崩溃
|
|
4
|
+
*/
|
|
5
|
+
import React, { Component, ErrorInfo, ReactNode } from 'react';
|
|
6
|
+
export interface A2UIErrorBoundaryProps {
|
|
7
|
+
/** 子组件 */
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
/** 组件类型(用于日志) */
|
|
10
|
+
componentType?: string;
|
|
11
|
+
/** 组件 ID(用于日志) */
|
|
12
|
+
componentId?: string;
|
|
13
|
+
/** 自定义 fallback 渲染 */
|
|
14
|
+
fallback?: ReactNode | ((error: Error, componentType?: string) => ReactNode);
|
|
15
|
+
/** 错误回调 */
|
|
16
|
+
onError?: (error: Error, componentType?: string, componentId?: string) => void;
|
|
17
|
+
/** 是否显示错误 UI(默认 false,静默失败) */
|
|
18
|
+
showError?: boolean;
|
|
19
|
+
}
|
|
20
|
+
interface A2UIErrorBoundaryState {
|
|
21
|
+
hasError: boolean;
|
|
22
|
+
error: Error | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A2UI 错误边界
|
|
26
|
+
*
|
|
27
|
+
* 设计原则:
|
|
28
|
+
* 1. 默认静默失败,不显示错误 UI(避免影响用户体验)
|
|
29
|
+
* 2. 在控制台输出详细错误信息(便于调试)
|
|
30
|
+
* 3. 支持自定义 fallback 和错误回调(便于业务定制)
|
|
31
|
+
*/
|
|
32
|
+
export declare class A2UIErrorBoundary extends Component<A2UIErrorBoundaryProps, A2UIErrorBoundaryState> {
|
|
33
|
+
constructor(props: A2UIErrorBoundaryProps);
|
|
34
|
+
static getDerivedStateFromError(error: Error): A2UIErrorBoundaryState;
|
|
35
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
36
|
+
render(): string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 高阶组件:为组件添加错误边界
|
|
40
|
+
*/
|
|
41
|
+
export declare function withA2UIErrorBoundary<P extends object>(WrappedComponent: React.ComponentType<P>, options?: Omit<A2UIErrorBoundaryProps, 'children'>): React.FC<P>;
|
|
42
|
+
export default A2UIErrorBoundary;
|