@tdesign-react/chat 1.1.0-alpha.1 → 1.1.0-alpha.10
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/CHANGELOG.md +14 -1
- package/README.md +76 -22
- package/es/_chunks/dep-1007ac80.js +205 -0
- package/es/_chunks/dep-1007ac80.js.map +1 -0
- package/es/_chunks/dep-16520c2b.js +1247 -0
- package/es/_chunks/dep-16520c2b.js.map +1 -0
- package/es/_chunks/dep-1743bd61.js +438 -0
- package/es/_chunks/dep-1743bd61.js.map +1 -0
- package/es/_chunks/dep-24472232.js +839 -0
- package/es/_chunks/dep-24472232.js.map +1 -0
- package/es/_chunks/dep-3864b369.js +839 -0
- package/es/_chunks/dep-3864b369.js.map +1 -0
- package/es/_chunks/dep-3e40d789.js +169 -0
- package/es/_chunks/dep-3e40d789.js.map +1 -0
- package/es/_chunks/dep-4dedfbef.js +438 -0
- package/es/_chunks/dep-4dedfbef.js.map +1 -0
- package/es/_chunks/dep-56f5e08e.js +448 -0
- package/es/_chunks/dep-56f5e08e.js.map +1 -0
- package/es/_chunks/dep-688e4aaa.js +438 -0
- package/es/_chunks/dep-688e4aaa.js.map +1 -0
- package/es/_chunks/dep-870f0d35.js +839 -0
- package/es/_chunks/dep-870f0d35.js.map +1 -0
- package/es/_chunks/dep-96eca06f.js +169 -0
- package/es/_chunks/dep-96eca06f.js.map +1 -0
- package/es/_chunks/dep-ba3bd553.js +169 -0
- package/es/_chunks/dep-ba3bd553.js.map +1 -0
- package/es/_chunks/dep-bcb234a1.js +839 -0
- package/es/_chunks/dep-bcb234a1.js.map +1 -0
- package/es/_chunks/dep-de8ac730.js +1247 -0
- package/es/_chunks/dep-de8ac730.js.map +1 -0
- package/es/_chunks/dep-e9dbff09.js +1247 -0
- package/es/_chunks/dep-e9dbff09.js.map +1 -0
- package/es/_chunks/dep-ebc4cf30.js +1247 -0
- package/es/_chunks/dep-ebc4cf30.js.map +1 -0
- package/es/_chunks/dep-f691a67e.js +438 -0
- package/es/_chunks/dep-f691a67e.js.map +1 -0
- package/es/_chunks/dep-f8016301.js +169 -0
- package/es/_chunks/dep-f8016301.js.map +1 -0
- package/es/_util/reactify.js +33 -13
- package/es/_util/reactify.js.map +1 -1
- package/es/_util/useDynamicStyle.js +1 -1
- package/es/attachments/index.js +1 -1
- package/es/chat-actionbar/index.d.ts +13 -4
- package/es/chat-actionbar/index.js +35 -5
- package/es/chat-actionbar/index.js.map +1 -1
- package/es/chat-engine/components/activity/index.js +3 -1
- package/es/chat-engine/components/activity/index.js.map +1 -1
- package/es/chat-engine/components/activity/registry.js +1 -1
- package/es/chat-engine/components/activity/render.d.ts +4 -0
- package/es/chat-engine/components/activity/render.js +13 -2
- package/es/chat-engine/components/activity/render.js.map +1 -1
- package/es/chat-engine/components/activity/types.d.ts +0 -3
- package/es/chat-engine/components/activity/types.js +1 -1
- package/es/chat-engine/components/index.js +31 -21
- package/es/chat-engine/components/index.js.map +1 -1
- package/es/chat-engine/components/json-render/A2UIJsonRenderActivityRenderer.js +2 -2
- package/es/chat-engine/components/json-render/JsonRenderActivityRenderer.js +2 -2
- package/es/chat-engine/components/json-render/SurfaceStateManager.js +1 -1
- package/es/chat-engine/components/json-render/adapters/a2ui-to-jsonrender.js +1 -1
- package/es/chat-engine/components/json-render/adapters/a2ui-types.js +1 -1
- package/es/chat-engine/components/json-render/adapters/index.js +1 -1
- package/es/chat-engine/components/json-render/catalog/a2ui-binding.js +2 -2
- package/es/chat-engine/components/json-render/catalog/a2ui-registry.js +2 -2
- package/es/chat-engine/components/json-render/catalog/atomic/button.d.ts +14 -0
- package/es/chat-engine/components/json-render/catalog/atomic/button.js +71 -0
- package/es/chat-engine/components/json-render/catalog/atomic/button.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/atomic/card.d.ts +11 -0
- package/es/chat-engine/components/json-render/catalog/atomic/card.js +57 -0
- package/es/chat-engine/components/json-render/catalog/atomic/card.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/atomic/input.d.ts +20 -0
- package/es/chat-engine/components/json-render/catalog/atomic/input.js +76 -0
- package/es/chat-engine/components/json-render/catalog/atomic/input.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/atomic/layout.d.ts +44 -0
- package/es/chat-engine/components/json-render/catalog/atomic/layout.js +129 -0
- package/es/chat-engine/components/json-render/catalog/atomic/layout.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/atomic/text.d.ts +11 -0
- package/es/chat-engine/components/json-render/catalog/atomic/text.js +31 -0
- package/es/chat-engine/components/json-render/catalog/atomic/text.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/button.js +1 -1
- package/es/chat-engine/components/json-render/catalog/card.js +1 -1
- package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.d.ts +614 -0
- package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js +779 -0
- package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/index.d.ts +2 -1
- package/es/chat-engine/components/json-render/catalog/index.js +3 -3
- package/es/chat-engine/components/json-render/catalog/input.js +2 -2
- package/es/chat-engine/components/json-render/catalog/layout.js +1 -1
- package/es/chat-engine/components/json-render/catalog/text.js +1 -1
- package/es/chat-engine/components/json-render/catalog.d.ts +65 -0
- package/es/chat-engine/components/json-render/catalog.js +634 -2
- package/es/chat-engine/components/json-render/catalog.js.map +1 -1
- package/es/chat-engine/components/json-render/config.js +2 -2
- package/es/chat-engine/components/json-render/contexts/actions.d.ts +5 -0
- package/es/chat-engine/components/json-render/contexts/actions.js +39 -16
- package/es/chat-engine/components/json-render/contexts/actions.js.map +1 -1
- package/es/chat-engine/components/json-render/contexts/data.d.ts +99 -7
- package/es/chat-engine/components/json-render/contexts/data.js +155 -76
- package/es/chat-engine/components/json-render/contexts/data.js.map +1 -1
- package/es/chat-engine/components/json-render/contexts/index.d.ts +4 -0
- package/es/chat-engine/components/json-render/contexts/index.js +27 -0
- package/es/chat-engine/components/json-render/contexts/index.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/store.d.ts +67 -0
- package/es/chat-engine/components/json-render/contexts/store.js +104 -0
- package/es/chat-engine/components/json-render/contexts/store.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/tree.d.ts +44 -0
- package/es/chat-engine/components/json-render/contexts/tree.js +78 -0
- package/es/chat-engine/components/json-render/contexts/tree.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/validation.js +13 -5
- package/es/chat-engine/components/json-render/contexts/validation.js.map +1 -1
- package/es/chat-engine/components/json-render/contexts/visibility.d.ts +12 -2
- package/es/chat-engine/components/json-render/contexts/visibility.js +32 -22
- package/es/chat-engine/components/json-render/contexts/visibility.js.map +1 -1
- package/es/chat-engine/components/json-render/engine.js +1 -1
- package/es/chat-engine/components/json-render/index.d.ts +9 -30
- package/es/chat-engine/components/json-render/index.js +59 -19
- package/es/chat-engine/components/json-render/index.js.map +1 -1
- package/es/chat-engine/components/json-render/performance.js +1 -1
- package/es/chat-engine/components/json-render/registry/a2ui-binding.d.ts +64 -0
- package/es/chat-engine/components/json-render/registry/a2ui-binding.js +76 -0
- package/es/chat-engine/components/json-render/registry/a2ui-binding.js.map +1 -0
- package/es/chat-engine/components/json-render/registry/a2ui-registry.d.ts +78 -0
- package/es/chat-engine/components/json-render/registry/a2ui-registry.js +76 -0
- package/es/chat-engine/components/json-render/registry/a2ui-registry.js.map +1 -0
- package/es/chat-engine/components/json-render/registry/config.d.ts +142 -0
- package/es/chat-engine/components/json-render/registry/config.js +76 -0
- package/es/chat-engine/components/json-render/registry/config.js.map +1 -0
- package/es/chat-engine/components/json-render/registry/index.d.ts +137 -0
- package/es/chat-engine/components/json-render/registry/index.js +76 -0
- package/es/chat-engine/components/json-render/registry/index.js.map +1 -0
- package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.d.ts +35 -0
- package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js +271 -0
- package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js.map +1 -0
- package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.d.ts +44 -0
- package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js +63 -0
- package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js.map +1 -0
- package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.d.ts +44 -0
- package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js +131 -0
- package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js.map +1 -0
- package/es/chat-engine/components/json-render/renderer/_index.d.ts +71 -0
- package/es/chat-engine/components/json-render/renderer/_index.js +133 -0
- package/es/chat-engine/components/json-render/renderer/_index.js.map +1 -0
- package/es/chat-engine/components/json-render/renderer/index.d.ts +71 -0
- package/es/chat-engine/components/json-render/renderer/index.js +125 -0
- package/es/chat-engine/components/json-render/renderer/index.js.map +1 -0
- package/es/chat-engine/components/json-render/renderer.js +1 -1
- package/es/chat-engine/components/json-render/types.d.ts +37 -19
- package/es/chat-engine/components/json-render/types.js +1 -1
- package/es/chat-engine/components/provider/agent-state.js +17 -8
- package/es/chat-engine/components/provider/agent-state.js.map +1 -1
- package/es/chat-engine/components/toolcall/index.js +17 -8
- 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.js +18 -9
- 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/adapters/a2ui/index.d.ts +10 -0
- package/es/chat-engine/core/adapters/a2ui/index.js +24 -0
- package/es/chat-engine/core/adapters/a2ui/index.js.map +1 -0
- package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
- package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js +438 -0
- package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
- package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.d.ts +53 -0
- package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js +158 -0
- package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js.map +1 -0
- package/es/chat-engine/core/adapters/a2ui/processor/DataStore.d.ts +63 -0
- package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js +172 -0
- package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js.map +1 -0
- package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.d.ts +47 -0
- package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js +99 -0
- package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js.map +1 -0
- package/es/chat-engine/core/adapters/a2ui/types/index.d.ts +4 -0
- package/es/chat-engine/core/adapters/a2ui/types/index.js +9 -0
- package/es/chat-engine/core/adapters/a2ui/types/index.js.map +1 -0
- package/es/chat-engine/core/adapters/a2ui/types/types.d.ts +770 -0
- package/es/chat-engine/core/adapters/a2ui/types/types.js +104 -0
- package/es/chat-engine/core/adapters/a2ui/types/types.js.map +1 -0
- package/es/chat-engine/core/adapters/a2ui/utils/binding.d.ts +34 -0
- package/es/chat-engine/core/adapters/a2ui/utils/binding.js +1784 -0
- package/es/chat-engine/core/adapters/a2ui/utils/binding.js.map +1 -0
- package/es/chat-engine/core/adapters/a2ui/utils/index.d.ts +5 -0
- package/es/chat-engine/core/adapters/a2ui/utils/index.js +13 -0
- package/es/chat-engine/core/adapters/a2ui/utils/index.js.map +1 -0
- package/es/chat-engine/core/adapters/a2ui/utils/validation.d.ts +70 -0
- package/es/chat-engine/core/adapters/a2ui/utils/validation.js +333 -0
- package/es/chat-engine/core/adapters/a2ui/utils/validation.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/ActivityManager.d.ts +93 -0
- package/es/chat-engine/core/adapters/agui/ActivityManager.js +148 -0
- package/es/chat-engine/core/adapters/agui/ActivityManager.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/StateManager.d.ts +99 -0
- package/es/chat-engine/core/adapters/agui/StateManager.js +172 -0
- package/es/chat-engine/core/adapters/agui/StateManager.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/activity-manager.js +7 -1
- package/es/chat-engine/core/adapters/agui/activity-manager.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +1 -1
- package/es/chat-engine/core/adapters/agui/event-mapper.js +7 -5
- package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/events.js +1 -1
- package/es/chat-engine/core/adapters/agui/index.d.ts +4 -7
- package/es/chat-engine/core/adapters/agui/index.js +23 -18
- package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/state-manager.js +7 -1
- package/es/chat-engine/core/adapters/agui/state-manager.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/types/events.d.ts +1570 -0
- package/es/chat-engine/core/adapters/agui/types/events.js +15 -0
- package/es/chat-engine/core/adapters/agui/types/events.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/types/index.d.ts +854 -0
- package/es/chat-engine/core/adapters/agui/types/index.js +279 -0
- package/es/chat-engine/core/adapters/agui/types/index.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/types.js +1 -1
- package/es/chat-engine/core/adapters/agui/utils.js +1 -1
- package/es/chat-engine/core/adapters/index.d.ts +5 -0
- package/es/chat-engine/core/adapters/index.js +34 -0
- package/es/chat-engine/core/adapters/index.js.map +1 -0
- package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.d.ts +114 -0
- package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js +194 -0
- package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js.map +1 -0
- package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.d.ts +49 -0
- package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js +307 -0
- package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js.map +1 -0
- package/es/chat-engine/core/adapters/json-render/engine.d.ts +58 -0
- package/es/chat-engine/core/adapters/json-render/engine.js +88 -0
- package/es/chat-engine/core/adapters/json-render/engine.js.map +1 -0
- package/es/chat-engine/core/adapters/json-render/index.d.ts +8 -0
- package/es/chat-engine/core/adapters/json-render/index.js +18 -0
- package/es/chat-engine/core/adapters/json-render/index.js.map +1 -0
- package/es/chat-engine/core/adapters/json-render/types/a2ui.d.ts +96 -0
- package/es/chat-engine/core/adapters/json-render/types/a2ui.js +7 -0
- package/es/chat-engine/core/adapters/json-render/types/a2ui.js.map +1 -0
- package/es/chat-engine/core/adapters/json-render/types/core.d.ts +49 -0
- package/es/chat-engine/core/adapters/json-render/types/core.js +7 -0
- package/es/chat-engine/core/adapters/json-render/types/core.js.map +1 -0
- package/es/chat-engine/core/adapters/json-render/types/index.d.ts +5 -0
- package/es/chat-engine/core/adapters/json-render/types/index.js +9 -0
- package/es/chat-engine/core/adapters/json-render/types/index.js.map +1 -0
- package/es/chat-engine/core/event-bus/ChatEventBus.js +1 -1
- package/es/chat-engine/core/event-bus/index.js +1 -1
- package/es/chat-engine/core/event-bus/types.js +1 -1
- package/es/chat-engine/core/index.d.ts +4 -4
- package/es/chat-engine/core/index.js +17 -11
- 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 +18 -18
- 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 +5 -1
- package/es/chat-engine/core/store/message.js.map +1 -1
- package/es/chat-engine/core/store/model.js +2 -1
- package/es/chat-engine/core/store/model.js.map +1 -1
- package/es/chat-engine/core/store/reactiveState.d.ts +4 -0
- package/es/chat-engine/core/store/reactiveState.js +15 -1235
- package/es/chat-engine/core/store/reactiveState.js.map +1 -1
- package/es/chat-engine/core/type.d.ts +27 -19
- 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/immutable-patch.d.ts +61 -0
- package/es/chat-engine/core/utils/immutable-patch.js +147 -0
- package/es/chat-engine/core/utils/immutable-patch.js.map +1 -0
- package/es/chat-engine/core/utils/index.d.ts +7 -2
- package/es/chat-engine/core/utils/index.js +9 -883
- package/es/chat-engine/core/utils/index.js.map +1 -1
- package/es/chat-engine/core/utils/json-patch/helpers.d.ts +41 -0
- package/es/chat-engine/core/utils/json-patch/helpers.js +164 -0
- package/es/chat-engine/core/utils/json-patch/helpers.js.map +1 -0
- package/es/chat-engine/core/utils/json-patch/index.d.ts +115 -0
- package/es/chat-engine/core/utils/json-patch/index.js +387 -0
- package/es/chat-engine/core/utils/json-patch/index.js.map +1 -0
- package/es/chat-engine/core/utils/logger.js +1 -1
- package/es/chat-engine/core/utils/performance.d.ts +94 -0
- package/es/chat-engine/core/utils/performance.js +205 -0
- package/es/chat-engine/core/utils/performance.js.map +1 -0
- package/es/chat-engine/hooks/index.js +17 -8
- package/es/chat-engine/hooks/index.js.map +1 -1
- 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 +17 -8
- 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.js +17 -8
- package/es/chat-engine/hooks/useChat.js.map +1 -1
- package/es/chat-engine/hooks/useJsonRenderActivity.js +2 -2
- package/es/chat-engine/index.js +29 -19
- 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/index.js +1 -1
- package/es/index.js +29 -19
- package/es/index.js.map +1 -1
- package/es/style/index.js +1 -1
- package/package.json +7 -6
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,19 @@ toc: false
|
|
|
5
5
|
spline: explain
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
## 🌈
|
|
8
|
+
## 🌈 1.0.2 `2026-02-05`
|
|
9
|
+
|
|
10
|
+
### 🚀 Features
|
|
11
|
+
|
|
12
|
+
- `ChatEngine`:
|
|
13
|
+
- 支持AG-UI Activity-Snapshot/Delta事件的适配,新增useAgentActivity注册hook,并增加示例 @carolin913 ([#4119](https://github.com/Tencent/tdesign-react/pull/4119))
|
|
14
|
+
- 增加在无 UI 场景下使用 ChatEngine 事件总线机制,并增加示例 @carolin913 ([#4119](https://github.com/Tencent/tdesign-react/pull/4119))
|
|
15
|
+
- ToolCallRender 增加错误边界处理 @carolin913 ([#4119](https://github.com/Tencent/tdesign-react/pull/4119))
|
|
16
|
+
- AG-UI协议下几个Delta事件,支持自动初始化接收无Snapshot情况下SSE Chunk流 @carolin913 ([#4119](https://github.com/Tencent/tdesign-react/pull/4119))
|
|
17
|
+
- Immutable JSON Patch 性能优化,并支持append操作用来追加字符串 @carolin913 ([#4119](https://github.com/Tencent/tdesign-react/pull/4119))
|
|
18
|
+
- `ChatMarkdown`: 大幅优化依赖CherryMarkdown造成的打包体积膨胀问题,**不再内置highlight代码块样式高亮**,需要业务自行引入配置 @LzhengH @carolin913 ([#4119](https://github.com/Tencent/tdesign-react/pull/4119))
|
|
19
|
+
- `ChatSender`: 支持readyToSend可以接管发送前校验 @LzhengH ([#4119](https://github.com/Tencent/tdesign-react/pull/4119))
|
|
20
|
+
|
|
21
|
+
## 🌈 1.0.0 `2026-11-20`
|
|
9
22
|
|
|
10
23
|
- Release 1st version
|
package/README.md
CHANGED
|
@@ -23,54 +23,108 @@ TDesign AIGC Components for React Framework
|
|
|
23
23
|
|
|
24
24
|
# 📦 Installation
|
|
25
25
|
|
|
26
|
-
```
|
|
27
|
-
npm
|
|
28
|
-
|
|
26
|
+
```bash
|
|
27
|
+
# npm
|
|
28
|
+
npm install @tdesign-react/chat
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
# yarn
|
|
31
31
|
yarn add @tdesign-react/chat
|
|
32
|
-
```
|
|
33
32
|
|
|
34
|
-
|
|
33
|
+
# pnpm
|
|
35
34
|
pnpm add @tdesign-react/chat
|
|
36
35
|
```
|
|
37
36
|
|
|
38
|
-
|
|
37
|
+
**依赖要求**: React >= 18.0.0
|
|
38
|
+
|
|
39
|
+
# 🔨 Quick Start
|
|
40
|
+
|
|
41
|
+
## 一体化组件集成
|
|
42
|
+
|
|
43
|
+
直接使用 `ChatBot` 组件,内置完整的 UI 结构和交互逻辑,适合快速集成标准聊天界面。
|
|
39
44
|
|
|
40
45
|
```tsx
|
|
41
46
|
import React from 'react';
|
|
42
47
|
import { ChatBot } from '@tdesign-react/chat';
|
|
43
48
|
import '@tdesign-react/chat/es/style/index.js';
|
|
44
49
|
|
|
45
|
-
function App() {
|
|
50
|
+
export default function App() {
|
|
46
51
|
return (
|
|
47
|
-
<
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
</div>
|
|
52
|
+
<ChatBot
|
|
53
|
+
chatServiceConfig={{
|
|
54
|
+
endpoint: 'https://your-api-endpoint.com/chat',
|
|
55
|
+
stream: true,
|
|
56
|
+
}}
|
|
57
|
+
/>
|
|
54
58
|
);
|
|
55
59
|
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 组合式开发
|
|
63
|
+
|
|
64
|
+
通过 `useChat` Hook 自由组合 UI 组件,适合需要深度定制 UI 结构和交互逻辑的场景。
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import React from 'react';
|
|
68
|
+
import { useChat, ChatList, ChatMessage, ChatSender } from '@tdesign-react/chat';
|
|
69
|
+
import '@tdesign-react/chat/es/style/index.js';
|
|
56
70
|
|
|
57
|
-
|
|
71
|
+
export default function CompositeChat() {
|
|
72
|
+
const { chatEngine, messages, status } = useChat({
|
|
73
|
+
chatServiceConfig: {
|
|
74
|
+
endpoint: 'https://your-api-endpoint.com/chat',
|
|
75
|
+
stream: true,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<>
|
|
81
|
+
<ChatList>
|
|
82
|
+
{messages.map((message) => (
|
|
83
|
+
<ChatMessage key={message.id} message={message} />
|
|
84
|
+
))}
|
|
85
|
+
</ChatList>
|
|
86
|
+
<ChatSender
|
|
87
|
+
loading={status === 'streaming'}
|
|
88
|
+
onSend={(e) => chatEngine.sendUserMessage({ prompt: e.detail.value })}
|
|
89
|
+
onStop={() => chatEngine.abortChat()}
|
|
90
|
+
/>
|
|
91
|
+
</>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
58
94
|
```
|
|
59
95
|
|
|
60
|
-
|
|
96
|
+
## 协议配置
|
|
61
97
|
|
|
62
|
-
|
|
63
|
-
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
64
|
-
| Edge >=84 | Firefox >=83 | Chrome >=84 | Safari >=14.1 |
|
|
98
|
+
支持**自定义协议**和**AG-UI 标准协议**两种模式:
|
|
65
99
|
|
|
66
|
-
|
|
100
|
+
| 场景 | 推荐协议 |
|
|
101
|
+
| ------------------ | ---------- |
|
|
102
|
+
| 快速集成到现有服务 | 自定义协议 |
|
|
103
|
+
| 构建复杂 AI 应用 | AG-UI 协议 |
|
|
104
|
+
| 多工具调用场景 | AG-UI 协议 |
|
|
67
105
|
|
|
106
|
+
```javascript
|
|
107
|
+
// 通过 onMessage 解析数据
|
|
108
|
+
const customConfig = {
|
|
109
|
+
endpoint: '/api/chat',
|
|
110
|
+
protocol: 'agui', // 开启 AG-UI 协议,自动解析标准事件
|
|
111
|
+
onMessage: (chunk) => chunk.data,
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
📖 [体验示例和完整文档](https://tdesign.tencent.com/react-chat/overview)
|
|
117
|
+
|
|
118
|
+
# Browser Support
|
|
119
|
+
|
|
120
|
+
| IE / Edge | Firefox | Chrome | Safari |
|
|
121
|
+
| --------- | ------------ | ----------- | ------------- |
|
|
122
|
+
| Edge >=84 | Firefox >=83 | Chrome >=84 | Safari >=14.1 |
|
|
68
123
|
|
|
69
124
|
# Contributing
|
|
70
125
|
|
|
71
126
|
Contributing is welcome. Read [guidelines for contributing](https://github.com/Tencent/tdesign-react/blob/develop/CONTRIBUTING.md) before submitting your [Pull Request](https://github.com/Tencent/tdesign-react/pulls).
|
|
72
127
|
|
|
73
|
-
|
|
74
128
|
# Feedback
|
|
75
129
|
|
|
76
130
|
Create your [Github issues](https://github.com/Tencent/tdesign-react/issues) or scan the QR code below to join our user groups
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.1.0-alpha.5
|
|
3
|
+
* (c) 2026 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import React, { useMemo } from 'react';
|
|
8
|
+
import _typeof from '@babel/runtime/helpers/typeof';
|
|
9
|
+
import { JsonRenderElement } from '../chat-engine/components/json-render/renderer/index.js';
|
|
10
|
+
import '../chat-engine/components/json-render/contexts/index.js';
|
|
11
|
+
import { DataProvider } from '../chat-engine/components/json-render/contexts/data.js';
|
|
12
|
+
import { VisibilityProvider } from '../chat-engine/components/json-render/contexts/visibility.js';
|
|
13
|
+
import { ActionProvider } from '../chat-engine/components/json-render/contexts/actions.js';
|
|
14
|
+
|
|
15
|
+
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
16
|
+
|
|
17
|
+
function getDefaultExportFromCjs (x) {
|
|
18
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function getDefaultExportFromNamespaceIfPresent (n) {
|
|
22
|
+
return n && Object.prototype.hasOwnProperty.call(n, 'default') ? n['default'] : n;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function getDefaultExportFromNamespaceIfNotNamed (n) {
|
|
26
|
+
return n && Object.prototype.hasOwnProperty.call(n, 'default') && Object.keys(n).length === 1 ? n['default'] : n;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getAugmentedNamespace(n) {
|
|
30
|
+
if (n.__esModule) return n;
|
|
31
|
+
var a = Object.defineProperty({}, '__esModule', {value: true});
|
|
32
|
+
Object.keys(n).forEach(function (k) {
|
|
33
|
+
var d = Object.getOwnPropertyDescriptor(n, k);
|
|
34
|
+
Object.defineProperty(a, k, d.get ? d : {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
get: function () {
|
|
37
|
+
return n[k];
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
return a;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function commonjsRequire (path) {
|
|
45
|
+
throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
var hasElementType = typeof Element !== 'undefined';
|
|
49
|
+
var hasMap = typeof Map === 'function';
|
|
50
|
+
var hasSet = typeof Set === 'function';
|
|
51
|
+
var hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;
|
|
52
|
+
|
|
53
|
+
// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js
|
|
54
|
+
|
|
55
|
+
function equal(a, b) {
|
|
56
|
+
// START: fast-deep-equal es6/index.js 3.1.3
|
|
57
|
+
if (a === b) return true;
|
|
58
|
+
if (a && b && _typeof(a) == 'object' && _typeof(b) == 'object') {
|
|
59
|
+
if (a.constructor !== b.constructor) return false;
|
|
60
|
+
var length, i, keys;
|
|
61
|
+
if (Array.isArray(a)) {
|
|
62
|
+
length = a.length;
|
|
63
|
+
if (length != b.length) return false;
|
|
64
|
+
for (i = length; i-- !== 0;) if (!equal(a[i], b[i])) return false;
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// START: Modifications:
|
|
69
|
+
// 1. Extra `has<Type> &&` helpers in initial condition allow es6 code
|
|
70
|
+
// to co-exist with es5.
|
|
71
|
+
// 2. Replace `for of` with es5 compliant iteration using `for`.
|
|
72
|
+
// Basically, take:
|
|
73
|
+
//
|
|
74
|
+
// ```js
|
|
75
|
+
// for (i of a.entries())
|
|
76
|
+
// if (!b.has(i[0])) return false;
|
|
77
|
+
// ```
|
|
78
|
+
//
|
|
79
|
+
// ... and convert to:
|
|
80
|
+
//
|
|
81
|
+
// ```js
|
|
82
|
+
// it = a.entries();
|
|
83
|
+
// while (!(i = it.next()).done)
|
|
84
|
+
// if (!b.has(i.value[0])) return false;
|
|
85
|
+
// ```
|
|
86
|
+
//
|
|
87
|
+
// **Note**: `i` access switches to `i.value`.
|
|
88
|
+
var it;
|
|
89
|
+
if (hasMap && a instanceof Map && b instanceof Map) {
|
|
90
|
+
if (a.size !== b.size) return false;
|
|
91
|
+
it = a.entries();
|
|
92
|
+
while (!(i = it.next()).done) if (!b.has(i.value[0])) return false;
|
|
93
|
+
it = a.entries();
|
|
94
|
+
while (!(i = it.next()).done) if (!equal(i.value[1], b.get(i.value[0]))) return false;
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
if (hasSet && a instanceof Set && b instanceof Set) {
|
|
98
|
+
if (a.size !== b.size) return false;
|
|
99
|
+
it = a.entries();
|
|
100
|
+
while (!(i = it.next()).done) if (!b.has(i.value[0])) return false;
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
// END: Modifications
|
|
104
|
+
|
|
105
|
+
if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {
|
|
106
|
+
length = a.length;
|
|
107
|
+
if (length != b.length) return false;
|
|
108
|
+
for (i = length; i-- !== 0;) if (a[i] !== b[i]) return false;
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
|
|
112
|
+
// START: Modifications:
|
|
113
|
+
// Apply guards for `Object.create(null)` handling. See:
|
|
114
|
+
// - https://github.com/FormidableLabs/react-fast-compare/issues/64
|
|
115
|
+
// - https://github.com/epoberezkin/fast-deep-equal/issues/49
|
|
116
|
+
if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();
|
|
117
|
+
if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();
|
|
118
|
+
// END: Modifications
|
|
119
|
+
|
|
120
|
+
keys = Object.keys(a);
|
|
121
|
+
length = keys.length;
|
|
122
|
+
if (length !== Object.keys(b).length) return false;
|
|
123
|
+
for (i = length; i-- !== 0;) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
|
|
124
|
+
// END: fast-deep-equal
|
|
125
|
+
|
|
126
|
+
// START: react-fast-compare
|
|
127
|
+
// custom handling for DOM elements
|
|
128
|
+
if (hasElementType && a instanceof Element) return false;
|
|
129
|
+
|
|
130
|
+
// custom handling for React/Preact
|
|
131
|
+
for (i = length; i-- !== 0;) {
|
|
132
|
+
if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {
|
|
133
|
+
// React-specific: avoid traversing React elements' _owner
|
|
134
|
+
// Preact-specific: avoid traversing Preact elements' __v and __o
|
|
135
|
+
// __v = $_original / $_vnode
|
|
136
|
+
// __o = $_owner
|
|
137
|
+
// These properties contain circular references and are not needed when
|
|
138
|
+
// comparing the actual elements (and not their owners)
|
|
139
|
+
// .$$typeof and ._store on just reasonable markers of elements
|
|
140
|
+
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// all other properties should be traversed as usual
|
|
145
|
+
if (!equal(a[keys[i]], b[keys[i]])) return false;
|
|
146
|
+
}
|
|
147
|
+
// END: react-fast-compare
|
|
148
|
+
|
|
149
|
+
// START: fast-deep-equal
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
return a !== a && b !== b;
|
|
153
|
+
}
|
|
154
|
+
// end fast-deep-equal
|
|
155
|
+
|
|
156
|
+
var reactFastCompare = function isEqual(a, b) {
|
|
157
|
+
try {
|
|
158
|
+
return equal(a, b);
|
|
159
|
+
} catch (error) {
|
|
160
|
+
if ((error.message || '').match(/stack|recursion/i)) {
|
|
161
|
+
// warn on circular references, don't crash
|
|
162
|
+
// browsers give this different errors name and messages:
|
|
163
|
+
// chrome/safari: "RangeError", "Maximum call stack size exceeded"
|
|
164
|
+
// firefox: "InternalError", too much recursion"
|
|
165
|
+
// edge: "Error", "Out of stack space"
|
|
166
|
+
console.warn('react-fast-compare cannot handle circular refs');
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
// some other error. we should definitely know about these
|
|
170
|
+
throw error;
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
var JsonRenderActivityRendererInner = function JsonRenderActivityRendererInner(_ref) {
|
|
175
|
+
var activityType = _ref.activityType,
|
|
176
|
+
content = _ref.content,
|
|
177
|
+
messageId = _ref.messageId,
|
|
178
|
+
registry = _ref.registry,
|
|
179
|
+
_ref$actionHandlers = _ref.actionHandlers,
|
|
180
|
+
actionHandlers = _ref$actionHandlers === void 0 ? {} : _ref$actionHandlers;
|
|
181
|
+
var isValidSchema = content && content.root && content.elements && content.elements[content.root];
|
|
182
|
+
var renderData = useMemo(function () {
|
|
183
|
+
return (content === null || content === void 0 ? void 0 : content.data) || {};
|
|
184
|
+
}, [content === null || content === void 0 ? void 0 : content.data]);
|
|
185
|
+
return /* @__PURE__ */React.createElement("div", {
|
|
186
|
+
"data-activity-type": activityType,
|
|
187
|
+
"data-message-id": messageId
|
|
188
|
+
}, /* @__PURE__ */React.createElement(DataProvider, {
|
|
189
|
+
initialData: renderData
|
|
190
|
+
}, /* @__PURE__ */React.createElement(VisibilityProvider, null, /* @__PURE__ */React.createElement(ActionProvider, {
|
|
191
|
+
handlers: actionHandlers
|
|
192
|
+
}, /* @__PURE__ */React.createElement(JsonRenderElement, {
|
|
193
|
+
tree: content,
|
|
194
|
+
registry: registry
|
|
195
|
+
})))));
|
|
196
|
+
};
|
|
197
|
+
var JsonRenderActivityRenderer = /*#__PURE__*/React.memo(JsonRenderActivityRendererInner, function (prevProps, nextProps) {
|
|
198
|
+
if (prevProps.registry !== nextProps.registry) return false;
|
|
199
|
+
if (prevProps.actionHandlers !== nextProps.actionHandlers) return false;
|
|
200
|
+
if (prevProps.content === nextProps.content) return true;
|
|
201
|
+
return reactFastCompare(prevProps.content, nextProps.content);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
export { JsonRenderActivityRenderer as J, reactFastCompare as r };
|
|
205
|
+
//# sourceMappingURL=dep-1007ac80.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dep-1007ac80.js","sources":["../../../../node_modules/.pnpm/react-fast-compare@3.2.2/node_modules/react-fast-compare/index.js","../../../pro-components/chat/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.tsx"],"sourcesContent":["/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.3\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","/**\n * json-render Activity 渲染器\n * 基于 TDesign ChatEngine 的 Activity 机制集成 json-render\n * \n * 核心特性:\n * 1. 支持 ACTIVITY_SNAPSHOT 全量渲染\n * 2. 支持 ACTIVITY_DELTA 增量更新(Delta Merge 由数据层完成,此处接收完整 Schema)\n * 3. 使用 React.memo + react-fast-compare 优化渲染性能\n * \n */\n\nimport React, { useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport { type ComponentRegistry, JsonRenderElement } from './';\nimport { DataProvider, ActionProvider, VisibilityProvider } from '../contexts';\nimport type { JsonRenderActivityProps } from '../types';\n\nexport interface JsonRenderActivityRendererProps extends JsonRenderActivityProps {\n /** 组件注册表(必须) */\n registry: ComponentRegistry;\n /** \n * Action 处理器映射表\n * \n * 示例:\n * ```tsx\n * const actionHandlers = {\n * submit: async (params) => { ... },\n * reset: async (params) => { ... },\n * cancel: async (params) => { ... },\n * };\n * ```\n */\n actionHandlers?: Record<string, (params: Record<string, unknown>) => void | Promise<void>>;\n /** 显示调试信息 */\n debug?: boolean;\n}\n\n/**\n * json-render Activity 渲染器组件\n */\nconst JsonRenderActivityRendererInner: React.FC<JsonRenderActivityRendererProps> = ({\n activityType,\n content,\n messageId,\n registry,\n actionHandlers = {},\n}) => {\n // 直接在渲染阶段做校验\n const isValidSchema = content && content.root && content.elements && content.elements[content.root];\n\n // 数据处理:使用 useMemo 缓存,只在 content.data 变化时重新计算\n const renderData = useMemo(() => content?.data || {}, [content?.data]);\n\n // todo: Schema 无效时显示加载状态\n // if (!isValidSchema) {\n // return (\n // <div style={{ padding: '16px', color: 'var(--td-text-color-secondary)' }}>\n // 数据初始化中...\n // </div>\n // );\n // }\n return (\n <div data-activity-type={activityType} data-message-id={messageId}>\n <DataProvider initialData={renderData}>\n <VisibilityProvider>\n <ActionProvider handlers={actionHandlers}>\n <JsonRenderElement tree={content} registry={registry} />\n </ActionProvider>\n </VisibilityProvider>\n </DataProvider>\n </div>\n );\n};\n\n/**\n * 使用 React.memo 包装,配合 react-fast-compare 进行高效的深比较\n * \n * 对比策略:\n * 1. registry 引用比较(通常是稳定的)\n * 2. actionHandlers 引用比较(建议使用 useMemo 稳定化)\n * 3. content 使用 react-fast-compare 深比较(比 JSON.stringify 快 3-5 倍)\n */\nexport const JsonRenderActivityRenderer = React.memo(\n JsonRenderActivityRendererInner,\n (prevProps, nextProps) => {\n // registry 变化必须重渲染\n if (prevProps.registry !== nextProps.registry) return false;\n \n // actionHandlers 变化必须重渲染\n if (prevProps.actionHandlers !== nextProps.actionHandlers) return false;\n\n // content 引用相同,跳过渲染\n if (prevProps.content === nextProps.content) return true;\n\n // 使用 react-fast-compare 进行高效深比较\n // 比 JSON.stringify 快 3-5 倍,且能正确处理循环引用\n return isEqual(prevProps.content, nextProps.content);\n },\n);\n\n/**\n * 默认导出\n */\nexport default JsonRenderActivityRenderer;\n"],"names":["hasElementType","Element","hasMap","Map","hasSet","Set","hasArrayBuffer","ArrayBuffer","isView","equal","a","b","_typeof","constructor","length","i","keys","Array","isArray","it","size","entries","next","done","has","value","get","RegExp","source","flags","valueOf","Object","prototype","toString","hasOwnProperty","call","$$typeof","reactFastCompare","isEqual","error","message","match","console","warn","JsonRenderActivityRendererInner","activityType","_ref","content","messageId","registry","_ref$actionHandlers","actionHandlers","isValidSchema","root","elements","renderData","useMemo","data","React","createElement","DataProvider","initialData","VisibilityProvider","ActionProvider","handlers","JsonRenderElement","tree","JsonRenderActivityRenderer","memo","prevProps","nextProps"],"mappings":"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"}
|