@tdesign-react/chat 1.0.2-alpha.10 → 1.0.2-alpha.12

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.
Files changed (214) hide show
  1. package/es/_util/reactify.js +4 -4
  2. package/es/_util/reactify.js.map +1 -1
  3. package/es/_util/useDynamicStyle.js +1 -1
  4. package/es/attachments/index.js +1 -1
  5. package/es/chat-actionbar/index.js +1 -1
  6. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.d.ts +91 -0
  7. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js +236 -0
  8. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js.map +1 -0
  9. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.d.ts +37 -0
  10. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js +116 -0
  11. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js.map +1 -0
  12. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.d.ts +42 -0
  13. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js +113 -0
  14. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js.map +1 -0
  15. package/es/chat-engine/components/a2ui/A2UISkeleton.d.ts +60 -0
  16. package/es/chat-engine/components/a2ui/A2UISkeleton.js +197 -0
  17. package/es/chat-engine/components/a2ui/A2UISkeleton.js.map +1 -0
  18. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.d.ts +44 -0
  19. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js +139 -0
  20. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js.map +1 -0
  21. package/es/chat-engine/components/a2ui/containers/A2UICard.d.ts +22 -0
  22. package/es/chat-engine/components/a2ui/containers/A2UICard.js +82 -0
  23. package/es/chat-engine/components/a2ui/containers/A2UICard.js.map +1 -0
  24. package/es/chat-engine/components/a2ui/containers/A2UIColumn.d.ts +18 -0
  25. package/es/chat-engine/components/a2ui/containers/A2UIColumn.js +81 -0
  26. package/es/chat-engine/components/a2ui/containers/A2UIColumn.js.map +1 -0
  27. package/es/chat-engine/components/a2ui/containers/A2UIList.d.ts +14 -0
  28. package/es/chat-engine/components/a2ui/containers/A2UIList.js +62 -0
  29. package/es/chat-engine/components/a2ui/containers/A2UIList.js.map +1 -0
  30. package/es/chat-engine/components/a2ui/containers/A2UIRow.d.ts +20 -0
  31. package/es/chat-engine/components/a2ui/containers/A2UIRow.js +84 -0
  32. package/es/chat-engine/components/a2ui/containers/A2UIRow.js.map +1 -0
  33. package/es/chat-engine/components/a2ui/containers/A2UITabs.d.ts +14 -0
  34. package/es/chat-engine/components/a2ui/containers/A2UITabs.js +69 -0
  35. package/es/chat-engine/components/a2ui/containers/A2UITabs.js.map +1 -0
  36. package/es/chat-engine/components/a2ui/containers/index.d.ts +8 -0
  37. package/es/chat-engine/components/a2ui/containers/index.js +30 -0
  38. package/es/chat-engine/components/a2ui/containers/index.js.map +1 -0
  39. package/es/chat-engine/components/a2ui/index.d.ts +11 -0
  40. package/es/chat-engine/components/a2ui/index.js +60 -0
  41. package/es/chat-engine/components/a2ui/index.js.map +1 -0
  42. package/es/chat-engine/components/a2ui/primitives/A2UIButton.d.ts +31 -0
  43. package/es/chat-engine/components/a2ui/primitives/A2UIButton.js +76 -0
  44. package/es/chat-engine/components/a2ui/primitives/A2UIButton.js.map +1 -0
  45. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.d.ts +12 -0
  46. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js +43 -0
  47. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js.map +1 -0
  48. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.d.ts +50 -0
  49. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js +54 -0
  50. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js.map +1 -0
  51. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.d.ts +13 -0
  52. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js +89 -0
  53. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js.map +1 -0
  54. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.d.ts +12 -0
  55. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js +25 -0
  56. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js.map +1 -0
  57. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.d.ts +13 -0
  58. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js +138942 -0
  59. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js.map +1 -0
  60. package/es/chat-engine/components/a2ui/primitives/A2UIImage.d.ts +12 -0
  61. package/es/chat-engine/components/a2ui/primitives/A2UIImage.js +75 -0
  62. package/es/chat-engine/components/a2ui/primitives/A2UIImage.js.map +1 -0
  63. package/es/chat-engine/components/a2ui/primitives/A2UIInput.d.ts +20 -0
  64. package/es/chat-engine/components/a2ui/primitives/A2UIInput.js +63 -0
  65. package/es/chat-engine/components/a2ui/primitives/A2UIInput.js.map +1 -0
  66. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.d.ts +56 -0
  67. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js +64 -0
  68. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js.map +1 -0
  69. package/es/chat-engine/components/a2ui/primitives/A2UISlider.d.ts +12 -0
  70. package/es/chat-engine/components/a2ui/primitives/A2UISlider.js +55 -0
  71. package/es/chat-engine/components/a2ui/primitives/A2UISlider.js.map +1 -0
  72. package/es/chat-engine/components/a2ui/primitives/A2UIText.d.ts +12 -0
  73. package/es/chat-engine/components/a2ui/primitives/A2UIText.js +104 -0
  74. package/es/chat-engine/components/a2ui/primitives/A2UIText.js.map +1 -0
  75. package/es/chat-engine/components/a2ui/primitives/A2UITextField.d.ts +12 -0
  76. package/es/chat-engine/components/a2ui/primitives/A2UITextField.js +80 -0
  77. package/es/chat-engine/components/a2ui/primitives/A2UITextField.js.map +1 -0
  78. package/es/chat-engine/components/a2ui/primitives/index.d.ts +15 -0
  79. package/es/chat-engine/components/a2ui/primitives/index.js +39 -0
  80. package/es/chat-engine/components/a2ui/primitives/index.js.map +1 -0
  81. package/es/chat-engine/components/a2ui/registry.d.ts +35 -0
  82. package/es/chat-engine/components/a2ui/registry.js +74 -0
  83. package/es/chat-engine/components/a2ui/registry.js.map +1 -0
  84. package/es/chat-engine/components/activity/index.js +1 -1
  85. package/es/chat-engine/components/activity/registry.js +4 -4
  86. package/es/chat-engine/components/activity/registry.js.map +1 -1
  87. package/es/chat-engine/components/activity/render.js +6 -6
  88. package/es/chat-engine/components/activity/render.js.map +1 -1
  89. package/es/chat-engine/components/activity/types.js +1 -1
  90. package/es/chat-engine/components/index.d.ts +1 -0
  91. package/es/chat-engine/components/index.js +53 -8
  92. package/es/chat-engine/components/index.js.map +1 -1
  93. package/es/chat-engine/components/provider/agent-state.js +40 -4
  94. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  95. package/es/chat-engine/components/toolcall/index.js +4 -2
  96. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  97. package/es/chat-engine/components/toolcall/registry.js +4 -4
  98. package/es/chat-engine/components/toolcall/registry.js.map +1 -1
  99. package/es/chat-engine/components/toolcall/render.js +20 -18
  100. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  101. package/es/chat-engine/components/toolcall/types.js +1 -1
  102. package/es/chat-engine/core/a2ui/index.d.ts +10 -0
  103. package/es/chat-engine/core/a2ui/index.js +24 -0
  104. package/es/chat-engine/core/a2ui/index.js.map +1 -0
  105. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
  106. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js +438 -0
  107. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
  108. package/es/chat-engine/core/a2ui/processor/ComponentTree.d.ts +53 -0
  109. package/es/chat-engine/core/a2ui/processor/ComponentTree.js +158 -0
  110. package/es/chat-engine/core/a2ui/processor/ComponentTree.js.map +1 -0
  111. package/es/chat-engine/core/a2ui/processor/DataStore.d.ts +63 -0
  112. package/es/chat-engine/core/a2ui/processor/DataStore.js +172 -0
  113. package/es/chat-engine/core/a2ui/processor/DataStore.js.map +1 -0
  114. package/es/chat-engine/core/a2ui/processor/PathResolver.d.ts +47 -0
  115. package/es/chat-engine/core/a2ui/processor/PathResolver.js +99 -0
  116. package/es/chat-engine/core/a2ui/processor/PathResolver.js.map +1 -0
  117. package/es/chat-engine/core/a2ui/types/index.d.ts +4 -0
  118. package/es/chat-engine/core/a2ui/types/index.js +9 -0
  119. package/es/chat-engine/core/a2ui/types/index.js.map +1 -0
  120. package/es/chat-engine/core/a2ui/types/types.d.ts +769 -0
  121. package/es/chat-engine/core/a2ui/types/types.js +104 -0
  122. package/es/chat-engine/core/a2ui/types/types.js.map +1 -0
  123. package/es/chat-engine/core/a2ui/utils/binding.d.ts +34 -0
  124. package/es/chat-engine/core/a2ui/utils/binding.js +1784 -0
  125. package/es/chat-engine/core/a2ui/utils/binding.js.map +1 -0
  126. package/es/chat-engine/core/a2ui/utils/index.d.ts +5 -0
  127. package/es/chat-engine/core/a2ui/utils/index.js +13 -0
  128. package/es/chat-engine/core/a2ui/utils/index.js.map +1 -0
  129. package/es/chat-engine/core/a2ui/utils/validation.d.ts +70 -0
  130. package/es/chat-engine/core/a2ui/utils/validation.js +333 -0
  131. package/es/chat-engine/core/a2ui/utils/validation.js.map +1 -0
  132. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +16 -0
  133. package/es/chat-engine/core/adapters/agui/event-mapper.js +60 -6
  134. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -1
  135. package/es/chat-engine/core/adapters/agui/events.d.ts +58 -58
  136. package/es/chat-engine/core/adapters/agui/events.js +1 -1
  137. package/es/chat-engine/core/adapters/agui/index.d.ts +1 -1
  138. package/es/chat-engine/core/adapters/agui/index.js +1 -1
  139. package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
  140. package/es/chat-engine/core/adapters/agui/state-manager.js +1 -1
  141. package/es/chat-engine/core/adapters/agui/types.d.ts +16 -16
  142. package/es/chat-engine/core/adapters/agui/types.js +1 -1
  143. package/es/chat-engine/core/adapters/agui/utils.d.ts +5 -1
  144. package/es/chat-engine/core/adapters/agui/utils.js +6 -2
  145. package/es/chat-engine/core/adapters/agui/utils.js.map +1 -1
  146. package/es/chat-engine/core/event-bus/ChatEventBus.d.ts +88 -0
  147. package/es/chat-engine/core/event-bus/ChatEventBus.js +295 -0
  148. package/es/chat-engine/core/event-bus/ChatEventBus.js.map +1 -0
  149. package/es/chat-engine/core/event-bus/index.d.ts +5 -0
  150. package/es/chat-engine/core/event-bus/index.js +13 -0
  151. package/es/chat-engine/core/event-bus/index.js.map +1 -0
  152. package/es/chat-engine/core/event-bus/types.d.ts +230 -0
  153. package/es/chat-engine/core/event-bus/types.js +32 -0
  154. package/es/chat-engine/core/event-bus/types.js.map +1 -0
  155. package/es/chat-engine/core/index.d.ts +8 -1
  156. package/es/chat-engine/core/index.js +128 -10
  157. package/es/chat-engine/core/index.js.map +1 -1
  158. package/es/chat-engine/core/processor/index.js +1 -1
  159. package/es/chat-engine/core/server/batch-client.js +1 -1
  160. package/es/chat-engine/core/server/connection-manager.js +1 -1
  161. package/es/chat-engine/core/server/errors.js +1 -1
  162. package/es/chat-engine/core/server/index.js +1 -1
  163. package/es/chat-engine/core/server/llm-service.js +17 -15
  164. package/es/chat-engine/core/server/llm-service.js.map +1 -1
  165. package/es/chat-engine/core/server/sse-client.js +1 -1
  166. package/es/chat-engine/core/server/sse-parser.js +1 -1
  167. package/es/chat-engine/core/server/types.js +1 -1
  168. package/es/chat-engine/core/store/message.js +1 -1
  169. package/es/chat-engine/core/store/model.js +1 -1
  170. package/es/chat-engine/core/store/reactiveState.js +1 -1
  171. package/es/chat-engine/core/type.d.ts +18 -2
  172. package/es/chat-engine/core/type.js +1 -1
  173. package/es/chat-engine/core/utils/eventEmitter.js +1 -1
  174. package/es/chat-engine/core/utils/index.js +1 -1
  175. package/es/chat-engine/core/utils/logger.js +1 -1
  176. package/es/chat-engine/hooks/a2ui/A2UIContext.d.ts +90 -0
  177. package/es/chat-engine/hooks/a2ui/A2UIContext.js +97 -0
  178. package/es/chat-engine/hooks/a2ui/A2UIContext.js.map +1 -0
  179. package/es/chat-engine/hooks/a2ui/index.d.ts +7 -0
  180. package/es/chat-engine/hooks/a2ui/index.js +19 -0
  181. package/es/chat-engine/hooks/a2ui/index.js.map +1 -0
  182. package/es/chat-engine/hooks/a2ui/useA2UIAction.d.ts +40 -0
  183. package/es/chat-engine/hooks/a2ui/useA2UIAction.js +74 -0
  184. package/es/chat-engine/hooks/a2ui/useA2UIAction.js.map +1 -0
  185. package/es/chat-engine/hooks/a2ui/useA2UISurface.d.ts +36 -0
  186. package/es/chat-engine/hooks/a2ui/useA2UISurface.js +39 -0
  187. package/es/chat-engine/hooks/a2ui/useA2UISurface.js.map +1 -0
  188. package/es/chat-engine/hooks/a2ui/useDataBinding.d.ts +53 -0
  189. package/es/chat-engine/hooks/a2ui/useDataBinding.js +111 -0
  190. package/es/chat-engine/hooks/a2ui/useDataBinding.js.map +1 -0
  191. package/es/chat-engine/hooks/index.d.ts +1 -0
  192. package/es/chat-engine/hooks/index.js +45 -4
  193. package/es/chat-engine/hooks/index.js.map +1 -1
  194. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  195. package/es/chat-engine/hooks/useAgentState.js +38 -2
  196. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  197. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  198. package/es/chat-engine/hooks/useChat.d.ts +2 -2
  199. package/es/chat-engine/hooks/useChat.js +39 -2
  200. package/es/chat-engine/hooks/useChat.js.map +1 -1
  201. package/es/chat-engine/index.js +47 -2
  202. package/es/chat-engine/index.js.map +1 -1
  203. package/es/chat-filecard/index.js +1 -1
  204. package/es/chat-loading/index.js +1 -1
  205. package/es/chat-markdown/index.js +1 -1
  206. package/es/chat-message/index.js +1 -1
  207. package/es/chat-sender/index.js +1 -1
  208. package/es/chat-thinking/index.js +1 -1
  209. package/es/chatbot/docs/react-best-practice.d.ts +13 -0
  210. package/es/chatbot/index.js +1 -1
  211. package/es/index.js +47 -2
  212. package/es/index.js.map +1 -1
  213. package/es/style/index.js +1 -1
  214. package/package.json +2 -2
@@ -0,0 +1,116 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.11
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":";;;;;;;;;;;;;;;;;;AA+BA,IAAMA,gBAAwD,GAAA,SAAxDA,gBAAwDA,CAAAC,IAAA,EAAA;AAAA,EAAA,IAAGC,aAAA,GAAAD,IAAA,CAAAC,aAAA,CAAA;AAAA,EAAA,sBAC9DC,cAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACCC,IAAAA,SAAU,EAAA,wBAAA;AACVC,IAAAA,KAAO,EAAA;AACLC,MAAAA,OAAS,EAAA,UAAA;AACTC,MAAAA,eAAiB,EAAA,yBAAA;AACjBC,MAAAA,MAAQ,EAAA,mCAAA;AACRC,MAAAA,YAAc,EAAA,KAAA;AACdC,MAAAA,KAAO,EAAA,SAAA;AACPC,MAAAA,QAAU,EAAA,MAAA;AACZ,KAAA;AAAA,GAAA,EACD,0CACUV,aACX,CAAA,CAAA;AAAA,CAAA,CAAA;AAMF,IAAMW,sBAAA,gBAAgEC,IAAK,CAAA,UAACC,KAAuC,EAAA;AACjH,EAAA,IAAQC,SAAA,GAAgCD,KAAA,CAAhCC,SAAA;IAAWX,SAAW,GAAUU,KAAA,CAArBV,SAAW;IAAAC,KAAA,GAAUS,KAAA,CAAVT,KAAA,CAAA;AACxB,EAAA,IAAAW,qBAAA,GAAmBC,oBAAqB,EAAA;IAAtCC,YAAa,GAAAF,qBAAA,CAAbE,YAAa,CAAA;EAErB,IAAMC,YAAe,GAAAJ,SAAA,CAAA;AACrB,EAAA,IAAMd,gBAAgBkB,YAAa,CAAAJ,SAAA,CAAA;AACnC,EAAA,IAAMK,KAAKD,YAAa,CAAAC,EAAA,CAAA;AACxB,EAAA,IAAMC,mBAAmBF,YAAa,CAAAE,gBAAA,CAAA;AACtC,EAAA,IAAMC,kBAAkBH,YAAa,CAAAG,eAAA,CAAA;AAG/B,EAAA,IAAAC,cAAA,GAAAC,aAAA,CAAA,EAAA,EAAsBL,YAAa,CAAA,CAAA;EACzC,OAAOI,cAAe,CAAAR,SAAA,CAAA;EACtB,OAAOQ,cAAe,CAAAF,gBAAA,CAAA;EACtB,OAAOE,cAAe,CAAAD,eAAA,CAAA;AAEhB,EAAA,IAAAG,SAAA,GAAYP,aAAajB,aAAa,CAAA,CAAA;EAE5C,IAAI,CAACwB,SAAW,EAAA;AACNC,IAAAA,OAAA,CAAAC,IAAA,CAAA,iCAAA,CAAAC,MAAA,CAAuC3B,aAAe,CAAA,CAAA,CAAA;AAC9D,IAAA,sBAAQC,cAAA,CAAAC,aAAA,CAAAJ,gBAAA,EAAA;AAAiBE,MAAAA,aAAA,EAAAA,aAAAA;AAA8B,KAAA,CAAA,CAAA;AACzD,GAAA;AAGA,EAAA,IAAM4B,yBACH3B,cAAA,CAAAC,aAAA,CAAAsB,SAAA,EAAAD,aAAA,CAAAA,aAAA,KACKD,cAAA,CAAA,EAAA,EAAA,EAAA;AACJH,IAAAA,EAAA,EAAAA,EAAA;AACAhB,IAAAA,SAAA,EAAAA,SAAA;AACAC,IAAAA,KAAA,EAAAA,KAAA;AAEAgB,IAAAA,gBAAA,EAAAA,gBAAAA;AAAA,GAAA,CACF,CAAA,CAAA;AAIE,EAAA,IAAAC,eAAA,IAAmBA,oBAAoB,GAAK,EAAA;AAC9C,IAAA,sBACGpB,cAAA,CAAAC,aAAA,CAAA2B,mBAAA,EAAA;AAAoBC,MAAAA,IAAM,EAAAT,eAAAA;KAAA,EACxBO,OACH,CAAA,CAAA;AAEJ,GAAA;AAEO,EAAA,OAAAA,OAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAEDjB,sBAAA,CAAuBoB,WAAc,GAAA,wBAAA,CAAA;IAWxBC,qBAAA,gBAA8DpB,IAAK,CAAA,UAACC,KAAsC,EAAA;AACrH,EAAA,IAAQC,SAAW,GAAuDD,KAAA,CAAlEC,SAAW;IAAAX,SAAA,GAAuDU,KAAA,CAAvDV,SAAA;IAAWC,QAA4CS,KAAA,CAA5CT;uBAA4CS,KAAA,CAArCoB,SAAY;AAAZA,IAAAA,SAAY,GAAAC,gBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,GAAAA,gBAAA;IAAOC,gBAAkBtB,KAAA,CAAlBsB;EAGxD,IAAMnC,gBAAiBc,SAAiC,KAAA,IAAA,IAAjCA,SAAiC,KAAjCA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAiC,CAAAA,SAAA,CAAA;EACxD,IAAMsB,cAAetB,SAAiC,KAAA,IAAA,IAAjCA,SAAiC,KAAjCA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAiC,CAAAK,EAAA,CAAA;EAGtD,IAAMkB,gBAAmB,GAAAC,OAAA,CACvB,YAAA;IAAA,OAAAX,EAAAA,CAAAA,MAAA,CAAS3B,aAAA,EAAA,GAAA,CAAA,CAAA2B,MAAA,CAAiBS,WAAe,IAAA,SAAA,CAAA,CAAA;AAAA,GAAA,EACzC,CAACpC,eAAeoC,WAAW,CAC7B,CAAA,CAAA;EAGA,IAAI,CAACtB,SAAW,EAAA;AACdW,IAAAA,OAAA,CAAQC,KAAK,0CAA0C,CAAA,CAAA;AAChD,IAAA,OAAA,IAAA,CAAA;AACT,GAAA;AAEA,EAAA,sBACGzB,cAAA,CAAAC,aAAA,CAAAqC,iBAAA,EAAA;AACCC,IAAAA,GAAK,EAAAH,gBAAA;AACLrC,IAAAA,aAAA,EAAAA,aAAA;AACAoC,IAAAA,WAAA,EAAAA,WAAA;AACAH,IAAAA,SAAA,EAAAA,SAAA;AACAQ,IAAAA,OAAS,EAAAN,aAAAA;AAAA,GAAA,iBAERlC,cAAA,CAAAC,aAAA,CAAAS,sBAAA,EAAA;AACCG,IAAAA,SAAA,EAAAA,SAAA;AACAX,IAAAA,SAAA,EAAAA,SAAA;AACAC,IAAAA,KAAA,EAAAA,KAAAA;AAAA,GACF,CACF,CAAA,CAAA;AAEJ,CAAC,EAAA;AAED4B,qBAAA,CAAsBD,WAAc,GAAA,uBAAA,CAAA;IAWvBW,oBAAA,gBAA4D9B,IAAK,CAAA,UAACC,KAAqC,EAAA;AAC5G,EAAA,IAAE8B,QAAU,GAAc9B,KAAA,CAAxB8B,QAAU;IAAAxC,SAAA,GAAcU,KAAA,CAAdV,SAAA,CAAA;EAClB,IAAI,CAACwC,QAAA,IAAYA,QAAS,CAAAC,MAAA,KAAW,CAAG,EAAA;AAC/B,IAAA,OAAA,IAAA,CAAA;AACT,GAAA;AAEA,EAAA,sBACG3C,cAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAIC,IAAAA,SAAA,EAAAA,SAAAA;GAAA,EACFwC,QAAS,CAAAE,GAAA,CAAI,UAACC,KAAA,EAAOC;0BACnB9C,cAAA,CAAAC,aAAA,CAAA8B,qBAAA,EAAA;MACCQ,GAAA,EAAKM,KAAM,CAAA3B,EAAA,aAAAQ,MAAA,CAAeoB,KAAA,CAAA;AAC1BjC,MAAAA,SAAW,EAAAgC,KAAAA;AAAA,KACb,CACD,CAAA;AAAA,GAAA,CACH,CAAA,CAAA;AAEJ,CAAC,EAAA;AAEDJ,oBAAA,CAAqBX,WAAc,GAAA,sBAAA;;;;"}
@@ -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;
@@ -0,0 +1,113 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.11
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
8
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
9
+ import _createClass from '@babel/runtime/helpers/createClass';
10
+ import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
11
+ import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
12
+ import _inherits from '@babel/runtime/helpers/inherits';
13
+ import React__default, { Component } from 'react';
14
+
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
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
18
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
19
+ var A2UIErrorBoundary = /*#__PURE__*/function (_Component) {
20
+ function A2UIErrorBoundary(props) {
21
+ var _this;
22
+ _classCallCheck(this, A2UIErrorBoundary);
23
+ _this = _callSuper(this, A2UIErrorBoundary, [props]);
24
+ _this.state = {
25
+ hasError: false,
26
+ error: null
27
+ };
28
+ return _this;
29
+ }
30
+ _inherits(A2UIErrorBoundary, _Component);
31
+ return _createClass(A2UIErrorBoundary, [{
32
+ key: "componentDidCatch",
33
+ value: function componentDidCatch(error, errorInfo) {
34
+ var _this$props = this.props,
35
+ componentType = _this$props.componentType,
36
+ componentId = _this$props.componentId,
37
+ onError = _this$props.onError;
38
+ console.error("[A2UI] Component render error", {
39
+ componentType: componentType,
40
+ componentId: componentId,
41
+ error: error.message,
42
+ stack: error.stack,
43
+ componentStack: errorInfo.componentStack
44
+ });
45
+ onError === null || onError === void 0 || onError(error, componentType, componentId);
46
+ }
47
+ }, {
48
+ key: "render",
49
+ value: function render() {
50
+ var _this$state = this.state,
51
+ hasError = _this$state.hasError,
52
+ error = _this$state.error;
53
+ var _this$props2 = this.props,
54
+ children = _this$props2.children,
55
+ fallback = _this$props2.fallback,
56
+ _this$props2$showErro = _this$props2.showError,
57
+ showError = _this$props2$showErro === void 0 ? false : _this$props2$showErro,
58
+ componentType = _this$props2.componentType;
59
+ if (hasError) {
60
+ if (fallback) {
61
+ if (typeof fallback === "function") {
62
+ return /* @__PURE__ */React__default.createElement(React__default.Fragment, null, fallback(error, componentType));
63
+ }
64
+ return /* @__PURE__ */React__default.createElement(React__default.Fragment, null, fallback);
65
+ }
66
+ if (showError) {
67
+ return /* @__PURE__ */React__default.createElement("div", {
68
+ className: "a2ui-error-boundary",
69
+ style: {
70
+ padding: "8px 12px",
71
+ backgroundColor: "rgba(255, 77, 79, 0.1)",
72
+ border: "1px solid rgba(255, 77, 79, 0.3)",
73
+ borderRadius: "4px",
74
+ color: "#ff4d4f",
75
+ fontSize: "12px"
76
+ }
77
+ }, /* @__PURE__ */React__default.createElement("div", {
78
+ style: {
79
+ fontWeight: 500,
80
+ marginBottom: "4px"
81
+ }
82
+ }, "\u7EC4\u4EF6\u6E32\u67D3\u9519\u8BEF ", componentType ? "(".concat(componentType, ")") : ""), /* @__PURE__ */React__default.createElement("div", {
83
+ style: {
84
+ color: "#666",
85
+ wordBreak: "break-all"
86
+ }
87
+ }, (error === null || error === void 0 ? void 0 : error.message) || "\u672A\u77E5\u9519\u8BEF"));
88
+ }
89
+ return null;
90
+ }
91
+ return children;
92
+ }
93
+ }], [{
94
+ key: "getDerivedStateFromError",
95
+ value: function getDerivedStateFromError(error) {
96
+ return {
97
+ hasError: true,
98
+ error: error
99
+ };
100
+ }
101
+ }]);
102
+ }(Component);
103
+ function withA2UIErrorBoundary(WrappedComponent) {
104
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
105
+ var WithErrorBoundary = function WithErrorBoundary(props) {
106
+ return /* @__PURE__ */React__default.createElement(A2UIErrorBoundary, _objectSpread({}, options), /* @__PURE__ */React__default.createElement(WrappedComponent, _objectSpread({}, props)));
107
+ };
108
+ WithErrorBoundary.displayName = "WithA2UIErrorBoundary(".concat(WrappedComponent.displayName || WrappedComponent.name || "Component", ")");
109
+ return WithErrorBoundary;
110
+ }
111
+
112
+ export { A2UIErrorBoundary, A2UIErrorBoundary as default, withA2UIErrorBoundary };
113
+ //# sourceMappingURL=A2UIErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"A2UIErrorBoundary.js","sources":["../../../../../pro-components/chat/chat-engine/components/a2ui/A2UIErrorBoundary.tsx"],"sourcesContent":["/**\n * A2UI 错误边界组件\n * 捕获组件渲染错误,防止整个 Surface 崩溃\n */\n\nimport React, { Component, ErrorInfo, ReactNode } from 'react';\n\nexport interface A2UIErrorBoundaryProps {\n /** 子组件 */\n children: ReactNode;\n /** 组件类型(用于日志) */\n componentType?: string;\n /** 组件 ID(用于日志) */\n componentId?: string;\n /** 自定义 fallback 渲染 */\n fallback?: ReactNode | ((error: Error, componentType?: string) => ReactNode);\n /** 错误回调 */\n onError?: (error: Error, componentType?: string, componentId?: string) => void;\n /** 是否显示错误 UI(默认 false,静默失败) */\n showError?: boolean;\n}\n\ninterface A2UIErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * A2UI 错误边界\n * \n * 设计原则:\n * 1. 默认静默失败,不显示错误 UI(避免影响用户体验)\n * 2. 在控制台输出详细错误信息(便于调试)\n * 3. 支持自定义 fallback 和错误回调(便于业务定制)\n */\nexport class A2UIErrorBoundary extends Component<A2UIErrorBoundaryProps, A2UIErrorBoundaryState> {\n constructor(props: A2UIErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): A2UIErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n const { componentType, componentId, onError } = this.props;\n\n // 输出详细错误日志\n console.error(\n `[A2UI] Component render error`,\n {\n componentType,\n componentId,\n error: error.message,\n stack: error.stack,\n componentStack: errorInfo.componentStack,\n }\n );\n\n // 调用错误回调\n onError?.(error, componentType, componentId);\n }\n\n render() {\n const { hasError, error } = this.state;\n const { children, fallback, showError = false, componentType } = this.props;\n\n if (hasError) {\n // 自定义 fallback\n if (fallback) {\n if (typeof fallback === 'function') {\n return <>{fallback(error!, componentType)}</>;\n }\n return <>{fallback}</>;\n }\n\n // 显示错误 UI\n if (showError) {\n return (\n <div\n className=\"a2ui-error-boundary\"\n style={{\n padding: '8px 12px',\n backgroundColor: 'rgba(255, 77, 79, 0.1)',\n border: '1px solid rgba(255, 77, 79, 0.3)',\n borderRadius: '4px',\n color: '#ff4d4f',\n fontSize: '12px',\n }}\n >\n <div style={{ fontWeight: 500, marginBottom: '4px' }}>\n 组件渲染错误 {componentType ? `(${componentType})` : ''}\n </div>\n <div style={{ color: '#666', wordBreak: 'break-all' }}>\n {error?.message || '未知错误'}\n </div>\n </div>\n );\n }\n\n // 默认静默失败,返回 null\n return null;\n }\n\n return children;\n }\n}\n\n/**\n * 高阶组件:为组件添加错误边界\n */\nexport function withA2UIErrorBoundary<P extends object>(\n WrappedComponent: React.ComponentType<P>,\n options: Omit<A2UIErrorBoundaryProps, 'children'> = {}\n): React.FC<P> {\n const WithErrorBoundary: React.FC<P> = (props) => (\n <A2UIErrorBoundary {...options}>\n <WrappedComponent {...props} />\n </A2UIErrorBoundary>\n );\n\n WithErrorBoundary.displayName = `WithA2UIErrorBoundary(${\n WrappedComponent.displayName || WrappedComponent.name || 'Component'\n })`;\n\n return WithErrorBoundary;\n}\n\nexport default A2UIErrorBoundary;\n"],"names":["A2UIErrorBoundary","props","_this","_classCallCheck","_callSuper","state","hasError","error","_inherits","_Component","_createClass","key","value","componentDidCatch","errorInfo","_this$props","componentType","componentId","onError","console","message","stack","componentStack","render","_this$state","_this$props2","children","fallback","_this$props2$showErro","showError","React","createElement","Fragment","className","style","padding","backgroundColor","border","borderRadius","color","fontSize","fontWeight","marginBottom","concat","wordBreak","getDerivedStateFromError","Component","withA2UIErrorBoundary","WrappedComponent","options","arguments","length","undefined","WithErrorBoundary","_objectSpread","displayName","name"],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * A2UI Skeleton 组件
3
+ * 在组件树渲染前显示骨架屏占位
4
+ */
5
+ import React from 'react';
6
+ import type { A2UIComponent } from '../../core/a2ui';
7
+ export interface A2UISkeletonProps {
8
+ /** 组件定义(可选,用于推断骨架形状) */
9
+ component?: A2UIComponent | null;
10
+ /** 是否显示动画 */
11
+ animation?: 'gradient' | 'flashed' | 'none';
12
+ /** 自定义类名 */
13
+ className?: string;
14
+ /** 自定义样式 */
15
+ style?: React.CSSProperties;
16
+ }
17
+ /**
18
+ * A2UI Skeleton 占位组件
19
+ *
20
+ * 用法1: 简单骨架
21
+ * ```tsx
22
+ * <A2UISkeleton />
23
+ * ```
24
+ *
25
+ * 用法2: 根据组件类型显示对应骨架
26
+ * ```tsx
27
+ * <A2UISkeleton component={surface.root} />
28
+ * ```
29
+ */
30
+ export declare const A2UISkeleton: React.FC<A2UISkeletonProps>;
31
+ /**
32
+ * A2UI Surface 骨架屏
33
+ * 适用于整个 Surface 加载时的占位
34
+ */
35
+ export interface A2UISurfaceSkeletonProps {
36
+ /** 骨架布局类型 */
37
+ layout?: 'form' | 'card' | 'list' | 'simple' | 'wizard';
38
+ /** 是否显示动画 */
39
+ animation?: 'gradient' | 'flashed' | 'none';
40
+ /** 行数(list 布局时生效) */
41
+ rowCount?: number;
42
+ /** 自定义类名 */
43
+ className?: string;
44
+ /** 自定义样式 */
45
+ style?: React.CSSProperties;
46
+ }
47
+ /**
48
+ * A2UI Surface 骨架屏
49
+ *
50
+ * 用法:
51
+ * ```tsx
52
+ * <A2UISurfaceRenderer
53
+ * processor={processor}
54
+ * surfaceId="my-surface"
55
+ * loading={<A2UISurfaceSkeleton layout="form" />}
56
+ * />
57
+ * ```
58
+ */
59
+ export declare const A2UISurfaceSkeleton: React.FC<A2UISurfaceSkeletonProps>;
60
+ export default A2UISkeleton;
@@ -0,0 +1,197 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.11
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import React__default from 'react';
8
+ import { Skeleton } from 'tdesign-react';
9
+
10
+ var getRowColByType = function getRowColByType(componentType) {
11
+ switch (componentType) {
12
+ case "Text":
13
+ return [1];
14
+ case "Button":
15
+ return [{
16
+ width: "80px",
17
+ height: "32px"
18
+ }];
19
+ case "Input":
20
+ return [{
21
+ width: "100%",
22
+ height: "32px"
23
+ }];
24
+ case "RadioGroup":
25
+ case "CheckboxGroup":
26
+ return [[{
27
+ type: "rect",
28
+ width: "80px",
29
+ height: "22px"
30
+ }, {
31
+ type: "rect",
32
+ width: "80px",
33
+ height: "22px"
34
+ }, {
35
+ type: "rect",
36
+ width: "80px",
37
+ height: "22px"
38
+ }]];
39
+ case "Row":
40
+ return [[{
41
+ type: "rect",
42
+ width: "100px",
43
+ height: "32px"
44
+ }, {
45
+ type: "rect",
46
+ width: "100px",
47
+ height: "32px"
48
+ }]];
49
+ case "Column":
50
+ return [{
51
+ width: "100%",
52
+ height: "20px"
53
+ }, {
54
+ width: "80%",
55
+ height: "20px"
56
+ }];
57
+ case "Card":
58
+ return [{
59
+ type: "rect",
60
+ height: "30px",
61
+ width: "100%"
62
+ }, {
63
+ type: "rect",
64
+ height: "100px",
65
+ width: "100%"
66
+ }];
67
+ default:
68
+ return [1];
69
+ }
70
+ };
71
+ var A2UISkeleton = function A2UISkeleton(_ref) {
72
+ var component = _ref.component,
73
+ _ref$animation = _ref.animation,
74
+ animation = _ref$animation === void 0 ? "gradient" : _ref$animation,
75
+ className = _ref.className,
76
+ style = _ref.style;
77
+ var animationProp = animation === "none" ? "none" : animation;
78
+ var rowCol = getRowColByType(component === null || component === void 0 ? void 0 : component.component);
79
+ return /* @__PURE__ */React__default.createElement("div", {
80
+ className: className,
81
+ style: style
82
+ }, /* @__PURE__ */React__default.createElement(Skeleton, {
83
+ animation: animationProp,
84
+ rowCol: rowCol
85
+ }));
86
+ };
87
+ A2UISkeleton.displayName = "A2UISkeleton";
88
+ var getRowColByLayout = function getRowColByLayout(layout, rowCount) {
89
+ switch (layout) {
90
+ case "form":
91
+ return [{
92
+ width: "200px",
93
+ height: "28px"
94
+ }, {
95
+ width: "80px",
96
+ height: "16px"
97
+ }, {
98
+ width: "100%",
99
+ height: "32px"
100
+ }, {
101
+ width: "80px",
102
+ height: "16px"
103
+ }, {
104
+ width: "100%",
105
+ height: "32px"
106
+ }, [{
107
+ type: "rect",
108
+ width: "80px",
109
+ height: "32px"
110
+ }, {
111
+ type: "rect",
112
+ width: "80px",
113
+ height: "32px"
114
+ }]];
115
+ case "card":
116
+ return [{
117
+ type: "rect",
118
+ height: "30px",
119
+ width: "100%"
120
+ }, {
121
+ type: "rect",
122
+ height: "200px",
123
+ width: "100%"
124
+ }];
125
+ case "list":
126
+ return Array.from({
127
+ length: rowCount
128
+ }, function (_, i) {
129
+ return {
130
+ width: "".concat(100 - i * 10, "%"),
131
+ height: "20px"
132
+ };
133
+ });
134
+ case "wizard":
135
+ return [[{
136
+ type: "circle",
137
+ size: "32px"
138
+ }, {
139
+ type: "rect",
140
+ width: "60px",
141
+ height: "4px"
142
+ }, {
143
+ type: "circle",
144
+ size: "32px"
145
+ }, {
146
+ type: "rect",
147
+ width: "60px",
148
+ height: "4px"
149
+ }, {
150
+ type: "circle",
151
+ size: "32px"
152
+ }], {
153
+ width: "180px",
154
+ height: "24px"
155
+ }, {
156
+ width: "100%",
157
+ height: "40px"
158
+ }, {
159
+ width: "100%",
160
+ height: "40px"
161
+ }, [{
162
+ type: "rect",
163
+ width: "80px",
164
+ height: "32px"
165
+ }, {
166
+ type: "rect",
167
+ width: "80px",
168
+ height: "32px"
169
+ }]];
170
+ case "simple":
171
+ default:
172
+ return [1];
173
+ }
174
+ };
175
+ var A2UISurfaceSkeleton = function A2UISurfaceSkeleton(_ref2) {
176
+ var _ref2$layout = _ref2.layout,
177
+ layout = _ref2$layout === void 0 ? "simple" : _ref2$layout,
178
+ _ref2$animation = _ref2.animation,
179
+ animation = _ref2$animation === void 0 ? "gradient" : _ref2$animation,
180
+ _ref2$rowCount = _ref2.rowCount,
181
+ rowCount = _ref2$rowCount === void 0 ? 3 : _ref2$rowCount,
182
+ className = _ref2.className,
183
+ style = _ref2.style;
184
+ var animationProp = animation === "none" ? "none" : animation;
185
+ var rowCol = getRowColByLayout(layout, rowCount);
186
+ return /* @__PURE__ */React__default.createElement("div", {
187
+ className: className,
188
+ style: style
189
+ }, /* @__PURE__ */React__default.createElement(Skeleton, {
190
+ animation: animationProp,
191
+ rowCol: rowCol
192
+ }));
193
+ };
194
+ A2UISurfaceSkeleton.displayName = "A2UISurfaceSkeleton";
195
+
196
+ export { A2UISkeleton, A2UISurfaceSkeleton, A2UISkeleton as default };
197
+ //# sourceMappingURL=A2UISkeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"A2UISkeleton.js","sources":["../../../../../pro-components/chat/chat-engine/components/a2ui/A2UISkeleton.tsx"],"sourcesContent":["/**\n * A2UI Skeleton 组件\n * 在组件树渲染前显示骨架屏占位\n */\n\nimport React from 'react';\nimport { Skeleton } from 'tdesign-react';\nimport type { A2UIComponent } from '../../core/a2ui';\n\nexport interface A2UISkeletonProps {\n /** 组件定义(可选,用于推断骨架形状) */\n component?: A2UIComponent | null;\n /** 是否显示动画 */\n animation?: 'gradient' | 'flashed' | 'none';\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n}\n\n/**\n * 根据组件类型生成对应的 Skeleton rowCol\n */\nconst getRowColByType = (componentType?: string): Array<number | object | object[]> => {\n switch (componentType) {\n case 'Text':\n return [1];\n\n case 'Button':\n return [{ width: '80px', height: '32px' }];\n\n case 'Input':\n return [{ width: '100%', height: '32px' }];\n\n case 'RadioGroup':\n case 'CheckboxGroup':\n return [[\n { type: 'rect' as const, width: '80px', height: '22px' },\n { type: 'rect' as const, width: '80px', height: '22px' },\n { type: 'rect' as const, width: '80px', height: '22px' },\n ]];\n\n case 'Row':\n return [[\n { type: 'rect' as const, width: '100px', height: '32px' },\n { type: 'rect' as const, width: '100px', height: '32px' },\n ]];\n\n case 'Column':\n return [\n { width: '100%', height: '20px' },\n { width: '80%', height: '20px' },\n ];\n\n case 'Card':\n return [\n { type: 'rect' as const, height: '30px', width: '100%' },\n { type: 'rect' as const, height: '100px', width: '100%' },\n ];\n\n default:\n return [1];\n }\n};\n\n/**\n * A2UI Skeleton 占位组件\n * \n * 用法1: 简单骨架\n * ```tsx\n * <A2UISkeleton />\n * ```\n * \n * 用法2: 根据组件类型显示对应骨架\n * ```tsx\n * <A2UISkeleton component={surface.root} />\n * ```\n */\nexport const A2UISkeleton: React.FC<A2UISkeletonProps> = ({\n component,\n animation = 'gradient',\n className,\n style,\n}) => {\n const animationProp = animation === 'none' ? 'none' : animation;\n const rowCol = getRowColByType(component?.component);\n\n return (\n <div className={className} style={style}>\n <Skeleton animation={animationProp} rowCol={rowCol} />\n </div>\n );\n};\n\nA2UISkeleton.displayName = 'A2UISkeleton';\n\n/**\n * A2UI Surface 骨架屏\n * 适用于整个 Surface 加载时的占位\n */\nexport interface A2UISurfaceSkeletonProps {\n /** 骨架布局类型 */\n layout?: 'form' | 'card' | 'list' | 'simple' | 'wizard';\n /** 是否显示动画 */\n animation?: 'gradient' | 'flashed' | 'none';\n /** 行数(list 布局时生效) */\n rowCount?: number;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n}\n\n/**\n * 根据布局类型获取 rowCol 配置\n */\nconst getRowColByLayout = (\n layout: string,\n rowCount: number\n): Array<number | object | object[]> => {\n switch (layout) {\n case 'form':\n return [\n // 标题\n { width: '200px', height: '28px' },\n // 表单项 1\n { width: '80px', height: '16px' },\n { width: '100%', height: '32px' },\n // 表单项 2\n { width: '80px', height: '16px' },\n { width: '100%', height: '32px' },\n // 按钮\n [\n { type: 'rect' as const, width: '80px', height: '32px' },\n { type: 'rect' as const, width: '80px', height: '32px' },\n ],\n ];\n\n case 'card':\n return [\n { type: 'rect' as const, height: '30px', width: '100%' },\n { type: 'rect' as const, height: '200px', width: '100%' },\n ];\n\n case 'list':\n return Array.from({ length: rowCount }, (_, i) => ({\n width: `${100 - i * 10}%`,\n height: '20px',\n }));\n\n case 'wizard':\n return [\n // 步骤指示器\n [\n { type: 'circle' as const, size: '32px' },\n { type: 'rect' as const, width: '60px', height: '4px' },\n { type: 'circle' as const, size: '32px' },\n { type: 'rect' as const, width: '60px', height: '4px' },\n { type: 'circle' as const, size: '32px' },\n ],\n // 标题\n { width: '180px', height: '24px' },\n // 内容\n { width: '100%', height: '40px' },\n { width: '100%', height: '40px' },\n // 按钮\n [\n { type: 'rect' as const, width: '80px', height: '32px' },\n { type: 'rect' as const, width: '80px', height: '32px' },\n ],\n ];\n\n case 'simple':\n default:\n return [1];\n }\n};\n\n/**\n * A2UI Surface 骨架屏\n * \n * 用法:\n * ```tsx\n * <A2UISurfaceRenderer\n * processor={processor}\n * surfaceId=\"my-surface\"\n * loading={<A2UISurfaceSkeleton layout=\"form\" />}\n * />\n * ```\n */\nexport const A2UISurfaceSkeleton: React.FC<A2UISurfaceSkeletonProps> = ({\n layout = 'simple',\n animation = 'gradient',\n rowCount = 3,\n className,\n style,\n}) => {\n const animationProp = animation === 'none' ? 'none' : animation;\n const rowCol = getRowColByLayout(layout, rowCount);\n\n return (\n <div className={className} style={style}>\n <Skeleton animation={animationProp} rowCol={rowCol} />\n </div>\n );\n};\n\nA2UISurfaceSkeleton.displayName = 'A2UISurfaceSkeleton';\n\nexport default A2UISkeleton;\n"],"names":["getRowColByType","componentType","width","height","type","A2UISkeleton","component","_ref","_ref$animation","animation","className","style","animationProp","rowCol","React","createElement","Skeleton","displayName","getRowColByLayout","layout","rowCount","Array","from","length","_","i","concat","size","A2UISurfaceSkeleton","_ref2$layout","_ref2","_ref2$animation","_ref2$rowCount"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * A2UI Surface 渲染器
3
+ * 渲染单个 Surface 的入口组件
4
+ */
5
+ import React from 'react';
6
+ import { type ComponentRegistry } from '../../hooks/a2ui/A2UIContext';
7
+ import type { A2uiMessageProcessor } from '../../core/a2ui';
8
+ import type { ActionHandler } from '../../core/a2ui';
9
+ export interface A2UISurfaceRendererProps {
10
+ /** A2UI 消息处理器 */
11
+ processor: A2uiMessageProcessor;
12
+ /** Surface ID */
13
+ surfaceId: string;
14
+ /** 自定义组件注册表(可选,不传使用默认注册表) */
15
+ registry?: ComponentRegistry;
16
+ /** Action 处理回调 */
17
+ onAction?: ActionHandler;
18
+ /** 自定义类名 */
19
+ className?: string;
20
+ /** 自定义样式 */
21
+ style?: React.CSSProperties;
22
+ /**
23
+ * 加载中占位
24
+ * - 传入 ReactNode:使用自定义骨架屏
25
+ * - 传入 true:使用服务端 skeletonHint 或默认骨架屏
26
+ */
27
+ loading?: React.ReactNode | boolean;
28
+ /** Surface 不存在时的占位 */
29
+ fallback?: React.ReactNode;
30
+ }
31
+ /**
32
+ * A2UI Surface 渲染器
33
+ *
34
+ * 使用方式:
35
+ * ```tsx
36
+ * <A2UISurfaceRenderer
37
+ * processor={processor}
38
+ * surfaceId="confirm-form"
39
+ * onAction={handleAction}
40
+ * />
41
+ * ```
42
+ */
43
+ export declare const A2UISurfaceRenderer: React.FC<A2UISurfaceRendererProps>;
44
+ export default A2UISurfaceRenderer;