@tdesign-react/chat 1.1.0-alpha.5 → 1.1.0-alpha.6

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 (233) hide show
  1. package/es/_chunks/dep-1007ac80.js +205 -0
  2. package/es/_chunks/dep-1007ac80.js.map +1 -0
  3. package/es/_chunks/dep-16520c2b.js +1247 -0
  4. package/es/_chunks/dep-16520c2b.js.map +1 -0
  5. package/es/_chunks/dep-1743bd61.js +438 -0
  6. package/es/_chunks/dep-1743bd61.js.map +1 -0
  7. package/es/_chunks/dep-56f5e08e.js +448 -0
  8. package/es/_chunks/dep-56f5e08e.js.map +1 -0
  9. package/es/_chunks/dep-96eca06f.js +169 -0
  10. package/es/_chunks/dep-96eca06f.js.map +1 -0
  11. package/es/_util/reactify.js +1 -1
  12. package/es/_util/useDynamicStyle.js +1 -1
  13. package/es/attachments/index.js +1 -1
  14. package/es/chat-actionbar/index.js +1 -1
  15. package/es/chat-engine/components/activity/index.js +3 -1
  16. package/es/chat-engine/components/activity/index.js.map +1 -1
  17. package/es/chat-engine/components/activity/registry.js +1 -1
  18. package/es/chat-engine/components/activity/render.d.ts +4 -0
  19. package/es/chat-engine/components/activity/render.js +14 -2
  20. package/es/chat-engine/components/activity/render.js.map +1 -1
  21. package/es/chat-engine/components/activity/types.js +1 -1
  22. package/es/chat-engine/components/index.js +28 -20
  23. package/es/chat-engine/components/index.js.map +1 -1
  24. package/es/chat-engine/components/json-render/catalog/atomic/button.d.ts +14 -0
  25. package/es/chat-engine/components/json-render/catalog/atomic/button.js +71 -0
  26. package/es/chat-engine/components/json-render/catalog/atomic/button.js.map +1 -0
  27. package/es/chat-engine/components/json-render/catalog/atomic/card.d.ts +11 -0
  28. package/es/chat-engine/components/json-render/catalog/atomic/card.js +57 -0
  29. package/es/chat-engine/components/json-render/catalog/atomic/card.js.map +1 -0
  30. package/es/chat-engine/components/json-render/catalog/atomic/input.d.ts +20 -0
  31. package/es/chat-engine/components/json-render/catalog/atomic/input.js +76 -0
  32. package/es/chat-engine/components/json-render/catalog/atomic/input.js.map +1 -0
  33. package/es/chat-engine/components/json-render/catalog/atomic/layout.d.ts +44 -0
  34. package/es/chat-engine/components/json-render/catalog/atomic/layout.js +129 -0
  35. package/es/chat-engine/components/json-render/catalog/atomic/layout.js.map +1 -0
  36. package/es/chat-engine/components/json-render/catalog/atomic/text.d.ts +11 -0
  37. package/es/chat-engine/components/json-render/catalog/atomic/text.js +31 -0
  38. package/es/chat-engine/components/json-render/catalog/atomic/text.js.map +1 -0
  39. package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.d.ts +614 -0
  40. package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js +779 -0
  41. package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js.map +1 -0
  42. package/es/chat-engine/components/json-render/contexts/actions.d.ts +5 -0
  43. package/es/chat-engine/components/json-render/contexts/actions.js +39 -16
  44. package/es/chat-engine/components/json-render/contexts/actions.js.map +1 -1
  45. package/es/chat-engine/components/json-render/contexts/data.d.ts +99 -7
  46. package/es/chat-engine/components/json-render/contexts/data.js +155 -76
  47. package/es/chat-engine/components/json-render/contexts/data.js.map +1 -1
  48. package/es/chat-engine/components/json-render/contexts/index.d.ts +4 -0
  49. package/es/chat-engine/components/json-render/contexts/index.js +27 -0
  50. package/es/chat-engine/components/json-render/contexts/index.js.map +1 -0
  51. package/es/chat-engine/components/json-render/contexts/store.d.ts +67 -0
  52. package/es/chat-engine/components/json-render/contexts/store.js +104 -0
  53. package/es/chat-engine/components/json-render/contexts/store.js.map +1 -0
  54. package/es/chat-engine/components/json-render/contexts/tree.d.ts +44 -0
  55. package/es/chat-engine/components/json-render/contexts/tree.js +78 -0
  56. package/es/chat-engine/components/json-render/contexts/tree.js.map +1 -0
  57. package/es/chat-engine/components/json-render/contexts/validation.js +13 -5
  58. package/es/chat-engine/components/json-render/contexts/validation.js.map +1 -1
  59. package/es/chat-engine/components/json-render/contexts/visibility.d.ts +12 -2
  60. package/es/chat-engine/components/json-render/contexts/visibility.js +32 -22
  61. package/es/chat-engine/components/json-render/contexts/visibility.js.map +1 -1
  62. package/es/chat-engine/components/json-render/index.d.ts +9 -32
  63. package/es/chat-engine/components/json-render/index.js +59 -19
  64. package/es/chat-engine/components/json-render/index.js.map +1 -1
  65. package/es/chat-engine/components/json-render/registry/a2ui-binding.d.ts +64 -0
  66. package/es/chat-engine/components/json-render/registry/a2ui-binding.js +76 -0
  67. package/es/chat-engine/components/json-render/registry/a2ui-binding.js.map +1 -0
  68. package/es/chat-engine/components/json-render/registry/a2ui-registry.d.ts +78 -0
  69. package/es/chat-engine/components/json-render/registry/a2ui-registry.js +76 -0
  70. package/es/chat-engine/components/json-render/registry/a2ui-registry.js.map +1 -0
  71. package/es/chat-engine/components/json-render/registry/config.d.ts +142 -0
  72. package/es/chat-engine/components/json-render/registry/config.js +76 -0
  73. package/es/chat-engine/components/json-render/registry/config.js.map +1 -0
  74. package/es/chat-engine/components/json-render/registry/index.d.ts +137 -0
  75. package/es/chat-engine/components/json-render/registry/index.js +76 -0
  76. package/es/chat-engine/components/json-render/registry/index.js.map +1 -0
  77. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.d.ts +35 -0
  78. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js +271 -0
  79. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js.map +1 -0
  80. package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.d.ts +44 -0
  81. package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js +63 -0
  82. package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js.map +1 -0
  83. package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.d.ts +44 -0
  84. package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js +131 -0
  85. package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js.map +1 -0
  86. package/es/chat-engine/components/json-render/renderer/_index.d.ts +71 -0
  87. package/es/chat-engine/components/json-render/renderer/_index.js +133 -0
  88. package/es/chat-engine/components/json-render/renderer/_index.js.map +1 -0
  89. package/es/chat-engine/components/json-render/renderer/index.d.ts +71 -0
  90. package/es/chat-engine/components/json-render/renderer/index.js +125 -0
  91. package/es/chat-engine/components/json-render/renderer/index.js.map +1 -0
  92. package/es/chat-engine/components/json-render/types.d.ts +37 -19
  93. package/es/chat-engine/components/json-render/types.js +1 -1
  94. package/es/chat-engine/components/provider/agent-state.js +14 -7
  95. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  96. package/es/chat-engine/components/toolcall/index.js +14 -7
  97. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  98. package/es/chat-engine/components/toolcall/registry.js +1 -1
  99. package/es/chat-engine/components/toolcall/render.js +16 -9
  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/adapters/a2ui/index.d.ts +10 -0
  103. package/es/chat-engine/core/adapters/a2ui/index.js +24 -0
  104. package/es/chat-engine/core/adapters/a2ui/index.js.map +1 -0
  105. package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
  106. package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js +438 -0
  107. package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
  108. package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.d.ts +53 -0
  109. package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js +158 -0
  110. package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js.map +1 -0
  111. package/es/chat-engine/core/adapters/a2ui/processor/DataStore.d.ts +63 -0
  112. package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js +172 -0
  113. package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js.map +1 -0
  114. package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.d.ts +47 -0
  115. package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js +99 -0
  116. package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js.map +1 -0
  117. package/es/chat-engine/core/adapters/a2ui/types/index.d.ts +4 -0
  118. package/es/chat-engine/core/adapters/a2ui/types/index.js +9 -0
  119. package/es/chat-engine/core/adapters/a2ui/types/index.js.map +1 -0
  120. package/es/chat-engine/core/adapters/a2ui/types/types.d.ts +770 -0
  121. package/es/chat-engine/core/adapters/a2ui/types/types.js +104 -0
  122. package/es/chat-engine/core/adapters/a2ui/types/types.js.map +1 -0
  123. package/es/chat-engine/core/adapters/a2ui/utils/binding.d.ts +34 -0
  124. package/es/chat-engine/core/adapters/a2ui/utils/binding.js +1784 -0
  125. package/es/chat-engine/core/adapters/a2ui/utils/binding.js.map +1 -0
  126. package/es/chat-engine/core/adapters/a2ui/utils/index.d.ts +5 -0
  127. package/es/chat-engine/core/adapters/a2ui/utils/index.js +13 -0
  128. package/es/chat-engine/core/adapters/a2ui/utils/index.js.map +1 -0
  129. package/es/chat-engine/core/adapters/a2ui/utils/validation.d.ts +70 -0
  130. package/es/chat-engine/core/adapters/a2ui/utils/validation.js +333 -0
  131. package/es/chat-engine/core/adapters/a2ui/utils/validation.js.map +1 -0
  132. package/es/chat-engine/core/adapters/agui/ActivityManager.d.ts +93 -0
  133. package/es/chat-engine/core/adapters/agui/ActivityManager.js +148 -0
  134. package/es/chat-engine/core/adapters/agui/ActivityManager.js.map +1 -0
  135. package/es/chat-engine/core/adapters/agui/StateManager.d.ts +99 -0
  136. package/es/chat-engine/core/adapters/agui/StateManager.js +172 -0
  137. package/es/chat-engine/core/adapters/agui/StateManager.js.map +1 -0
  138. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +1 -1
  139. package/es/chat-engine/core/adapters/agui/event-mapper.js +7 -7
  140. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -1
  141. package/es/chat-engine/core/adapters/agui/index.d.ts +4 -7
  142. package/es/chat-engine/core/adapters/agui/index.js +11 -16
  143. package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
  144. package/es/chat-engine/core/adapters/agui/types/events.d.ts +1550 -0
  145. package/es/chat-engine/core/adapters/agui/types/events.js +15 -0
  146. package/es/chat-engine/core/adapters/agui/types/events.js.map +1 -0
  147. package/es/chat-engine/core/adapters/agui/types/index.d.ts +818 -0
  148. package/es/chat-engine/core/adapters/agui/types/index.js +277 -0
  149. package/es/chat-engine/core/adapters/agui/types/index.js.map +1 -0
  150. package/es/chat-engine/core/adapters/agui/utils.js +1 -1
  151. package/es/chat-engine/core/adapters/index.d.ts +5 -0
  152. package/es/chat-engine/core/adapters/index.js +34 -0
  153. package/es/chat-engine/core/adapters/index.js.map +1 -0
  154. package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.d.ts +114 -0
  155. package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js +194 -0
  156. package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js.map +1 -0
  157. package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.d.ts +49 -0
  158. package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js +307 -0
  159. package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js.map +1 -0
  160. package/es/chat-engine/core/adapters/json-render/engine.d.ts +58 -0
  161. package/es/chat-engine/core/adapters/json-render/engine.js +88 -0
  162. package/es/chat-engine/core/adapters/json-render/engine.js.map +1 -0
  163. package/es/chat-engine/core/adapters/json-render/index.d.ts +8 -0
  164. package/es/chat-engine/core/adapters/json-render/index.js +18 -0
  165. package/es/chat-engine/core/adapters/json-render/index.js.map +1 -0
  166. package/es/chat-engine/core/adapters/json-render/types/a2ui.d.ts +96 -0
  167. package/es/chat-engine/core/adapters/json-render/types/a2ui.js +7 -0
  168. package/es/chat-engine/core/adapters/json-render/types/a2ui.js.map +1 -0
  169. package/es/chat-engine/core/adapters/json-render/types/core.d.ts +49 -0
  170. package/es/chat-engine/core/adapters/json-render/types/core.js +7 -0
  171. package/es/chat-engine/core/adapters/json-render/types/core.js.map +1 -0
  172. package/es/chat-engine/core/adapters/json-render/types/index.d.ts +5 -0
  173. package/es/chat-engine/core/adapters/json-render/types/index.js +9 -0
  174. package/es/chat-engine/core/adapters/json-render/types/index.js.map +1 -0
  175. package/es/chat-engine/core/event-bus/ChatEventBus.js +1 -1
  176. package/es/chat-engine/core/event-bus/index.js +1 -1
  177. package/es/chat-engine/core/event-bus/types.js +1 -1
  178. package/es/chat-engine/core/index.d.ts +2 -3
  179. package/es/chat-engine/core/index.js +16 -8
  180. package/es/chat-engine/core/index.js.map +1 -1
  181. package/es/chat-engine/core/processor/index.js +1 -1
  182. package/es/chat-engine/core/server/batch-client.js +1 -1
  183. package/es/chat-engine/core/server/connection-manager.js +1 -1
  184. package/es/chat-engine/core/server/errors.js +1 -1
  185. package/es/chat-engine/core/server/index.js +1 -1
  186. package/es/chat-engine/core/server/llm-service.js +15 -17
  187. package/es/chat-engine/core/server/llm-service.js.map +1 -1
  188. package/es/chat-engine/core/server/sse-client.js +1 -1
  189. package/es/chat-engine/core/server/sse-parser.js +1 -1
  190. package/es/chat-engine/core/server/types.js +1 -1
  191. package/es/chat-engine/core/store/message.js +6 -4
  192. package/es/chat-engine/core/store/message.js.map +1 -1
  193. package/es/chat-engine/core/store/model.js +2 -1
  194. package/es/chat-engine/core/store/model.js.map +1 -1
  195. package/es/chat-engine/core/store/reactiveState.d.ts +4 -0
  196. package/es/chat-engine/core/store/reactiveState.js +15 -1235
  197. package/es/chat-engine/core/store/reactiveState.js.map +1 -1
  198. package/es/chat-engine/core/type.d.ts +8 -19
  199. package/es/chat-engine/core/type.js +1 -1
  200. package/es/chat-engine/core/utils/eventEmitter.js +1 -1
  201. package/es/chat-engine/core/utils/immutable-patch.d.ts +61 -0
  202. package/es/chat-engine/core/utils/immutable-patch.js +147 -0
  203. package/es/chat-engine/core/utils/immutable-patch.js.map +1 -0
  204. package/es/chat-engine/core/utils/index.d.ts +7 -2
  205. package/es/chat-engine/core/utils/index.js +8 -12
  206. package/es/chat-engine/core/utils/index.js.map +1 -1
  207. package/es/chat-engine/core/utils/json-patch/helpers.js +1 -1
  208. package/es/chat-engine/core/utils/json-patch/index.js +1 -1
  209. package/es/chat-engine/core/utils/logger.js +1 -1
  210. package/es/chat-engine/core/utils/performance.d.ts +94 -0
  211. package/es/chat-engine/core/utils/performance.js +205 -0
  212. package/es/chat-engine/core/utils/performance.js.map +1 -0
  213. package/es/chat-engine/hooks/index.js +14 -7
  214. package/es/chat-engine/hooks/index.js.map +1 -1
  215. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  216. package/es/chat-engine/hooks/useAgentState.js +14 -7
  217. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  218. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  219. package/es/chat-engine/hooks/useChat.js +14 -7
  220. package/es/chat-engine/hooks/useChat.js.map +1 -1
  221. package/es/chat-engine/index.js +28 -20
  222. package/es/chat-engine/index.js.map +1 -1
  223. package/es/chat-filecard/index.js +1 -1
  224. package/es/chat-loading/index.js +1 -1
  225. package/es/chat-markdown/index.js +1 -1
  226. package/es/chat-message/index.js +1 -1
  227. package/es/chat-sender/index.js +1 -1
  228. package/es/chat-thinking/index.js +1 -1
  229. package/es/chatbot/index.js +1 -1
  230. package/es/index.js +28 -20
  231. package/es/index.js.map +1 -1
  232. package/es/style/index.js +1 -1
  233. package/package.json +1 -1
@@ -1,104 +1,183 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.4
2
+ * tdesign v1.1.0-alpha.5
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
7
- import _typeof from '@babel/runtime/helpers/typeof';
8
7
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
8
+ import _typeof from '@babel/runtime/helpers/typeof';
9
9
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
10
- import React, { createContext, useState, useEffect, useCallback, useMemo, useContext } from 'react';
10
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
11
+ import _createClass from '@babel/runtime/helpers/createClass';
12
+ import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
13
+ import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
14
+ import _inherits from '@babel/runtime/helpers/inherits';
15
+ import React, { useRef, useEffect, useCallback, useSyncExternalStore } from 'react';
16
+ import { p as produce } from '../../../../_chunks/dep-16520c2b.js';
11
17
  import { getByPath, setByPath } from '@json-render/core';
18
+ import { Store, createStoreContext, useStableCallback } from './store.js';
19
+ import '@babel/runtime/helpers/wrapNativeSuper';
12
20
 
13
21
  "use client";
14
22
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
23
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16
- var DataContext = /*#__PURE__*/createContext(null);
24
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
25
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
26
+ var DataStore = /*#__PURE__*/function (_Store) {
27
+ function DataStore() {
28
+ var _this;
29
+ var initialData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
30
+ var authState = arguments.length > 1 ? arguments[1] : undefined;
31
+ var onDataChange = arguments.length > 2 ? arguments[2] : undefined;
32
+ _classCallCheck(this, DataStore);
33
+ _this = _callSuper(this, DataStore, [{
34
+ data: initialData,
35
+ authState: authState
36
+ }]);
37
+ _this.onDataChange = onDataChange;
38
+ return _this;
39
+ }
40
+ _inherits(DataStore, _Store);
41
+ return _createClass(DataStore, [{
42
+ key: "getData",
43
+ value: function getData() {
44
+ return this.getState().data;
45
+ }
46
+ }, {
47
+ key: "getAuthState",
48
+ value: function getAuthState() {
49
+ return this.getState().authState;
50
+ }
51
+ }, {
52
+ key: "getByPath",
53
+ value: function getByPath$1(path) {
54
+ return getByPath(this.getState().data, path);
55
+ }
56
+ }, {
57
+ key: "setByPath",
58
+ value: function setByPath$1(path, value) {
59
+ var _this$onDataChange;
60
+ this.updateState(function (prev) {
61
+ return produce(prev, function (draft) {
62
+ setByPath(draft.data, path, value);
63
+ });
64
+ });
65
+ (_this$onDataChange = this.onDataChange) === null || _this$onDataChange === void 0 || _this$onDataChange.call(this, path, value);
66
+ }
67
+ }, {
68
+ key: "updatePaths",
69
+ value: function updatePaths(updates) {
70
+ var _this2 = this;
71
+ this.updateState(function (prev) {
72
+ return produce(prev, function (draft) {
73
+ for (var _i = 0, _Object$entries = Object.entries(updates); _i < _Object$entries.length; _i++) {
74
+ var _this2$onDataChange;
75
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
76
+ path = _Object$entries$_i[0],
77
+ value = _Object$entries$_i[1];
78
+ setByPath(draft.data, path, value);
79
+ (_this2$onDataChange = _this2.onDataChange) === null || _this2$onDataChange === void 0 || _this2$onDataChange.call(_this2, path, value);
80
+ }
81
+ });
82
+ });
83
+ }
84
+ }, {
85
+ key: "mergeData",
86
+ value: function mergeData(newData) {
87
+ this.updateState(function (prev) {
88
+ return produce(prev, function (draft) {
89
+ for (var _i2 = 0, _Object$entries2 = Object.entries(newData); _i2 < _Object$entries2.length; _i2++) {
90
+ var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),
91
+ key = _Object$entries2$_i[0],
92
+ value = _Object$entries2$_i[1];
93
+ if (_typeof(value) === "object" && value !== null && !Array.isArray(value) && _typeof(draft.data[key]) === "object" && draft.data[key] !== null) {
94
+ Object.assign(draft.data[key], value);
95
+ } else {
96
+ draft.data[key] = value;
97
+ }
98
+ }
99
+ });
100
+ });
101
+ }
102
+ }, {
103
+ key: "setAuthState",
104
+ value: function setAuthState(authState) {
105
+ this.updateState(function (prev) {
106
+ return _objectSpread(_objectSpread({}, prev), {}, {
107
+ authState: authState
108
+ });
109
+ });
110
+ }
111
+ }, {
112
+ key: "setOnDataChange",
113
+ value: function setOnDataChange(callback) {
114
+ this.onDataChange = callback;
115
+ }
116
+ }]);
117
+ }(Store);
118
+ var _createStoreContext = createStoreContext("DataStore"),
119
+ DataStoreProvider = _createStoreContext.Provider,
120
+ useDataStore = _createStoreContext.useStore,
121
+ useDataSelector = _createStoreContext.useSelector,
122
+ useDataStoreState = _createStoreContext.useStoreState;
17
123
  function DataProvider(_ref) {
18
124
  var _ref$initialData = _ref.initialData,
19
125
  initialData = _ref$initialData === void 0 ? {} : _ref$initialData,
20
126
  authState = _ref.authState,
21
127
  onDataChange = _ref.onDataChange,
22
128
  children = _ref.children;
23
- var _useState = useState(initialData),
24
- _useState2 = _slicedToArray(_useState, 2),
25
- data = _useState2[0],
26
- setData = _useState2[1];
129
+ var storeRef = useRef(null);
130
+ if (!storeRef.current) {
131
+ storeRef.current = new DataStore(initialData, authState, onDataChange);
132
+ }
133
+ var store = storeRef.current;
134
+ useEffect(function () {
135
+ store.mergeData(initialData);
136
+ }, [initialData, store]);
27
137
  useEffect(function () {
28
- setData(function (prev) {
29
- var next = _objectSpread({}, prev);
30
- for (var _i = 0, _Object$entries = Object.entries(initialData); _i < _Object$entries.length; _i++) {
31
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
32
- key = _Object$entries$_i[0],
33
- value2 = _Object$entries$_i[1];
34
- if (_typeof(value2) === "object" && value2 !== null && !Array.isArray(value2) && _typeof(next[key]) === "object" && next[key] !== null) {
35
- next[key] = _objectSpread(_objectSpread({}, next[key]), value2);
36
- } else {
37
- next[key] = value2;
38
- }
39
- }
40
- return next;
41
- });
42
- }, [initialData]);
43
- var get = useCallback(function (path) {
44
- return getByPath(data, path);
45
- }, [data]);
46
- var set = useCallback(function (path, value2) {
47
- setData(function (prev) {
48
- var next = _objectSpread({}, prev);
49
- setByPath(next, path, value2);
50
- return next;
51
- });
52
- onDataChange === null || onDataChange === void 0 || onDataChange(path, value2);
53
- }, [onDataChange]);
54
- var update = useCallback(function (updates) {
55
- setData(function (prev) {
56
- var next = _objectSpread({}, prev);
57
- for (var _i2 = 0, _Object$entries2 = Object.entries(updates); _i2 < _Object$entries2.length; _i2++) {
58
- var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),
59
- path = _Object$entries2$_i[0],
60
- value2 = _Object$entries2$_i[1];
61
- setByPath(next, path, value2);
62
- onDataChange === null || onDataChange === void 0 || onDataChange(path, value2);
63
- }
64
- return next;
65
- });
66
- }, [onDataChange]);
67
- var value = useMemo(function () {
68
- return {
69
- data: data,
70
- authState: authState,
71
- get: get,
72
- set: set,
73
- update: update
74
- };
75
- }, [data, authState, get, set, update]);
76
- return /* @__PURE__ */React.createElement(DataContext.Provider, {
77
- value: value
138
+ store.setAuthState(authState);
139
+ }, [authState, store]);
140
+ useEffect(function () {
141
+ store.setOnDataChange(onDataChange);
142
+ }, [onDataChange, store]);
143
+ return /* @__PURE__ */React.createElement(DataStoreProvider, {
144
+ store: store
78
145
  }, children);
79
146
  }
80
- function useData() {
81
- var ctx = useContext(DataContext);
82
- if (!ctx) {
83
- throw new Error("useData must be used within a DataProvider");
84
- }
85
- return ctx;
86
- }
87
147
  function useDataValue(path) {
88
- var _useData = useData(),
89
- get = _useData.get;
90
- return get(path);
148
+ var store = useDataStore();
149
+ var subscribe = useCallback(function (onStoreChange) {
150
+ return store.subscribe(onStoreChange);
151
+ }, [store]);
152
+ var getSnapshot = useCallback(function () {
153
+ if (!path) return void 0;
154
+ return store.getByPath(path);
155
+ }, [store, path]);
156
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
91
157
  }
92
158
  function useDataBinding(path) {
93
- var _useData2 = useData(),
94
- get = _useData2.get,
95
- set = _useData2.set;
96
- var value = get(path);
97
- var setValue = useCallback(function (newValue) {
98
- return set(path, newValue);
99
- }, [path, set]);
159
+ var store = useDataStore();
160
+ var value = useDataValue(path);
161
+ var setValue = useStableCallback(function (newValue) {
162
+ if (path) {
163
+ store.setByPath(path, newValue);
164
+ }
165
+ });
100
166
  return [value, setValue];
101
167
  }
168
+ function useDataUpdate() {
169
+ var store = useDataStore();
170
+ return useStableCallback(function (updates) {
171
+ store.updatePaths(updates);
172
+ });
173
+ }
174
+ function useDataState() {
175
+ var state = useDataStoreState();
176
+ return {
177
+ data: state.data,
178
+ authState: state.authState
179
+ };
180
+ }
102
181
 
103
- export { DataProvider, useData, useDataBinding, useDataValue };
182
+ export { DataProvider, DataStore, useDataBinding, useDataSelector, useDataState, useDataStore, useDataStoreState, useDataUpdate, useDataValue };
104
183
  //# sourceMappingURL=data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sources":["../../../../../../pro-components/chat/chat-engine/components/json-render/contexts/data.tsx"],"sourcesContent":["\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n useEffect,\n type ReactNode,\n} from \"react\";\nimport {\n getByPath,\n setByPath,\n type DataModel,\n type AuthState,\n} from \"@json-render/core\";\n\n/**\n * Data context value\n */\nexport interface DataContextValue {\n /** The current data model */\n data: DataModel;\n /** Auth state for visibility evaluation */\n authState?: AuthState;\n /** Get a value by path */\n get: (path: string) => unknown;\n /** Set a value by path */\n set: (path: string, value: unknown) => void;\n /** Update multiple values at once */\n update: (updates: Record<string, unknown>) => void;\n}\n\nconst DataContext = createContext<DataContextValue | null>(null);\n\n/**\n * Props for DataProvider\n */\nexport interface DataProviderProps {\n /** Initial data model */\n initialData?: DataModel;\n /** Auth state */\n authState?: AuthState;\n /** Callback when data changes */\n onDataChange?: (path: string, value: unknown) => void;\n children: ReactNode;\n}\n\n/**\n * Provider for data model context\n */\nexport function DataProvider({\n initialData = {},\n authState,\n onDataChange,\n children,\n}: DataProviderProps) {\n const [data, setData] = useState<DataModel>(initialData);\n\n // Sync initialData changes into internal state\n // This allows server-driven updates (e.g., A2UI updateDataModel) to reflect in the UI\n useEffect(() => {\n setData((prev) => {\n // Deep merge initialData into current state (preserves user input)\n const next = { ...prev };\n for (const [key, value] of Object.entries(initialData)) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof next[key] === 'object' && next[key] !== null) {\n next[key] = { ...next[key] as object, ...value as object };\n } else {\n next[key] = value;\n }\n }\n return next;\n });\n }, [initialData]);\n\n const get = useCallback((path: string) => getByPath(data, path), [data]);\n\n const set = useCallback(\n (path: string, value: unknown) => {\n setData((prev) => {\n const next = { ...prev };\n setByPath(next, path, value);\n return next;\n });\n onDataChange?.(path, value);\n },\n [onDataChange],\n );\n\n const update = useCallback(\n (updates: Record<string, unknown>) => {\n setData((prev) => {\n const next = { ...prev };\n for (const [path, value] of Object.entries(updates)) {\n setByPath(next, path, value);\n onDataChange?.(path, value);\n }\n return next;\n });\n },\n [onDataChange],\n );\n\n const value = useMemo<DataContextValue>(\n () => ({\n data,\n authState,\n get,\n set,\n update,\n }),\n [data, authState, get, set, update],\n );\n\n return <DataContext.Provider value={value}>{children}</DataContext.Provider>;\n}\n\n/**\n * Hook to access the data context\n */\nexport function useData(): DataContextValue {\n const ctx = useContext(DataContext);\n if (!ctx) {\n throw new Error(\"useData must be used within a DataProvider\");\n }\n return ctx;\n}\n\n/**\n * Hook to get a value from the data model\n */\nexport function useDataValue<T>(path: string): T | undefined {\n const { get } = useData();\n return get(path) as T | undefined;\n}\n\n/**\n * Hook to get and set a value from the data model (like useState)\n */\nexport function useDataBinding<T>(\n path: string,\n): [T | undefined, (value: T) => void] {\n const { get, set } = useData();\n const value = get(path) as T | undefined;\n const setValue = useCallback(\n (newValue: T) => set(path, newValue),\n [path, set],\n );\n return [value, setValue];\n}\n"],"names":["ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","DataContext","createContext","DataProvider","_ref","_ref$initialData","initialData","authState","onDataChange","children","_useState","useState","_useState2","_slicedToArray","data","setData","useEffect","prev","next","_i","_Object$entries","entries","_Object$entries$_i","key","value","_typeof","Array","isArray","get","useCallback","path","getByPath","set","setByPath","update","updates","_i2","_Object$entries2","_Object$entries2$_i","useMemo","React","createElement","Provider","useData","ctx","useContext","Error","useDataValue","_useData","useDataBinding","_useData2","setValue","newValue"],"mappings":"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"}
1
+ {"version":3,"file":"data.js","sources":["../../../../../../pro-components/chat/chat-engine/components/json-render/contexts/data.tsx"],"sourcesContent":["\"use client\";\n\nimport React, {\n useCallback,\n useEffect,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport { produce } from \"immer\";\nimport {\n getByPath,\n setByPath as setByPathMutable,\n type DataModel,\n type AuthState,\n} from \"@json-render/core\";\nimport { Store, createStoreContext, useStableCallback } from \"./store\";\n\n/**\n * DataStore 状态类型\n */\nexport interface DataStoreState {\n /** 数据模型 */\n data: DataModel;\n /** 认证状态 */\n authState?: AuthState;\n}\n\n/**\n * DataStore - 管理表单/组件的数据状态\n * \n * 性能优化:\n * - 使用外部 Store 模式,避免 Context 传递整个 data 导致级联重渲染\n * - 支持细粒度订阅:组件只订阅自己需要的路径\n * - 配合 Structural Sharing,通过引用比较判断变化\n */\nexport class DataStore extends Store<DataStoreState> {\n private onDataChange?: (path: string, value: unknown) => void;\n\n constructor(\n initialData: DataModel = {},\n authState?: AuthState,\n onDataChange?: (path: string, value: unknown) => void,\n ) {\n super({ data: initialData, authState });\n this.onDataChange = onDataChange;\n }\n\n /**\n * 获取数据模型\n */\n getData(): DataModel {\n return this.getState().data;\n }\n\n /**\n * 获取认证状态\n */\n getAuthState(): AuthState | undefined {\n return this.getState().authState;\n }\n\n /**\n * 通过路径获取值\n */\n getByPath(path: string): unknown {\n return getByPath(this.getState().data, path);\n }\n\n /**\n * 通过路径设置值(使用 immer 实现 Structural Sharing)\n */\n setByPath(path: string, value: unknown): void {\n this.updateState((prev) => \n produce(prev, (draft) => {\n setByPathMutable(draft.data, path, value);\n })\n );\n this.onDataChange?.(path, value);\n }\n\n /**\n * 批量更新多个路径\n */\n updatePaths(updates: Record<string, unknown>): void {\n this.updateState((prev) =>\n produce(prev, (draft) => {\n for (const [path, value] of Object.entries(updates)) {\n setByPathMutable(draft.data, path, value);\n this.onDataChange?.(path, value);\n }\n })\n );\n }\n\n /**\n * 合并新数据到现有数据\n */\n mergeData(newData: DataModel): void {\n this.updateState((prev) =>\n produce(prev, (draft) => {\n for (const [key, value] of Object.entries(newData)) {\n if (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n typeof draft.data[key] === \"object\" &&\n draft.data[key] !== null\n ) {\n Object.assign(draft.data[key] as object, value);\n } else {\n draft.data[key] = value;\n }\n }\n })\n );\n }\n\n /**\n * 更新认证状态\n */\n setAuthState(authState: AuthState | undefined): void {\n this.updateState((prev) => ({ ...prev, authState }));\n }\n\n /**\n * 设置 onDataChange 回调\n */\n setOnDataChange(callback: ((path: string, value: unknown) => void) | undefined): void {\n this.onDataChange = callback;\n }\n}\n\n// 创建 Store Context\nconst {\n Provider: DataStoreProvider,\n useStore: useDataStore,\n useSelector: useDataSelector,\n useStoreState: useDataStoreState,\n} = createStoreContext<DataStoreState, DataStore>(\"DataStore\");\n\nexport { useDataStore, useDataSelector, useDataStoreState };\n\n/**\n * Data context value(兼容旧 API)\n */\nexport interface DataContextValue {\n /** The current data model */\n data: DataModel;\n /** Auth state for visibility evaluation */\n authState?: AuthState;\n /** Get a value by path */\n get: (path: string) => unknown;\n /** Set a value by path */\n set: (path: string, value: unknown) => void;\n /** Update multiple values at once */\n update: (updates: Record<string, unknown>) => void;\n}\n\n/**\n * Props for DataProvider\n */\nexport interface DataProviderProps {\n /** Initial data model */\n initialData?: DataModel;\n /** Auth state */\n authState?: AuthState;\n /** Callback when data changes */\n onDataChange?: (path: string, value: unknown) => void;\n children: ReactNode;\n}\n\n/**\n * Provider for data model context\n * \n * 性能优化:\n * - 内部使用 DataStore,支持细粒度订阅\n * - 提供兼容旧 API 的 useData() hook\n * - 推荐使用 useDataValue() 进行细粒度订阅\n */\nexport function DataProvider({\n initialData = {},\n authState,\n onDataChange,\n children,\n}: DataProviderProps) {\n // 创建稳定的 store 实例\n const storeRef = useRef<DataStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = new DataStore(initialData, authState, onDataChange);\n }\n const store = storeRef.current;\n\n // 同步 initialData 变化(服务端推送更新)\n useEffect(() => {\n store.mergeData(initialData);\n }, [initialData, store]);\n\n // 同步 authState 变化\n useEffect(() => {\n store.setAuthState(authState);\n }, [authState, store]);\n\n // 同步 onDataChange 回调\n useEffect(() => {\n store.setOnDataChange(onDataChange);\n }, [onDataChange, store]);\n\n return <DataStoreProvider store={store}>{children}</DataStoreProvider>;\n}\n\n/**\n * 获取指定路径的值(细粒度订阅)\n * \n * 性能优化:只有指定路径的值变化时才重渲染\n * \n * @example\n * const name = useDataValue<string>('/userInfo/name');\n */\nexport function useDataValue<T>(path?: string): T | undefined {\n const store = useDataStore();\n\n const subscribe = useCallback(\n (onStoreChange: () => void) => store.subscribe(onStoreChange),\n [store],\n );\n\n const getSnapshot = useCallback(() => {\n if (!path) return undefined;\n return store.getByPath(path) as T | undefined;\n }, [store, path]);\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n\n/**\n * 数据绑定 hook(类似 useState 的 API)\n * \n * 返回 [value, setValue] 元组,value 支持细粒度订阅,setValue 引用稳定\n * \n * @example\n * const [name, setName] = useDataBinding<string>('/userInfo/name');\n */\nexport function useDataBinding<T>(\n path?: string,\n): [T | undefined, (value: T) => void] {\n const store = useDataStore();\n const value = useDataValue<T>(path);\n \n const setValue = useStableCallback((newValue: T) => {\n if (path) {\n store.setByPath(path, newValue);\n }\n });\n\n return [value, setValue];\n}\n\n/**\n * 批量更新多个路径\n * \n * @example\n * const updatePaths = useDataUpdate();\n * updatePaths({ '/name': 'Alice', '/age': 30 });\n */\nexport function useDataUpdate(): (updates: Record<string, unknown>) => void {\n const store = useDataStore();\n \n return useStableCallback((updates: Record<string, unknown>) => {\n store.updatePaths(updates);\n });\n}\n\n/**\n * 获取整个 data 和 authState(订阅所有变化)\n * \n * ⚠️ 警告:此 hook 会订阅整个 data 对象,任何数据变化都会触发重渲染\n * 仅在以下场景使用:\n * - 需要遍历整个 data 对象\n * - 需要同时访问 data 和 authState\n * - ValidationProvider 等基础设施层\n * \n * 普通组件请使用:\n * - useDataValue() - 细粒度订阅\n * - useDataBinding() - 双向绑定\n */\nexport function useDataState(): { data: DataModel; authState?: AuthState } {\n const state = useDataStoreState();\n return { data: state.data, authState: state.authState };\n}\n"],"names":["ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","constructor","Boolean","prototype","valueOf","call","DataStore","_this","initialData","undefined","authState","onDataChange","_classCallCheck","data","_inherits","_Store","_createClass","key","value","getData","getState","getAuthState","getByPath","path","setByPath","_this$onDataChange","updateState","prev","produce","draft","setByPathMutable","updatePaths","updates","_this2","_i","_Object$entries","entries","_this2$onDataChange","_Object$entries$_i","_slicedToArray","mergeData","newData","_i2","_Object$entries2","_Object$entries2$_i","_typeof","Array","isArray","assign","setAuthState","setOnDataChange","callback","Store","_createStoreContext","createStoreContext","DataStoreProvider","Provider","useDataStore","useStore","useDataSelector","useSelector","useDataStoreState","useStoreState","DataProvider","_ref","_ref$initialData","children","storeRef","useRef","current","store","useEffect","React","createElement","useDataValue","subscribe","useCallback","onStoreChange","getSnapshot","useSyncExternalStore","useDataBinding","setValue","useStableCallback","newValue","useDataUpdate","useDataState","state"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { DataProvider, useDataValue, useDataBinding, useDataUpdate, useDataState, useDataStore, type DataProviderProps, } from "./data";
2
+ export { VisibilityProvider, useVisibility, useIsVisible, type VisibilityContextValue, type VisibilityProviderProps, } from "./visibility";
3
+ export { ActionProvider, useActions, useAction, ConfirmDialog, type ActionContextValue, type ActionProviderProps, type PendingConfirmation, type ConfirmDialogProps, } from "./actions";
4
+ export { ValidationProvider, useValidation, useFieldValidation, type ValidationContextValue, type ValidationProviderProps, type FieldValidationState, } from "./validation";
@@ -0,0 +1,27 @@
1
+ /**
2
+ * tdesign v1.1.0-alpha.5
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ export { DataProvider, useDataBinding, useDataState, useDataStore, useDataUpdate, useDataValue } from './data.js';
8
+ export { VisibilityProvider, useIsVisible, useVisibility } from './visibility.js';
9
+ export { ActionProvider, ConfirmDialog, useAction, useActions } from './actions.js';
10
+ export { ValidationProvider, useFieldValidation, useValidation } from './validation.js';
11
+ import '@babel/runtime/helpers/defineProperty';
12
+ import '@babel/runtime/helpers/typeof';
13
+ import '@babel/runtime/helpers/slicedToArray';
14
+ import '@babel/runtime/helpers/classCallCheck';
15
+ import '@babel/runtime/helpers/createClass';
16
+ import '@babel/runtime/helpers/possibleConstructorReturn';
17
+ import '@babel/runtime/helpers/getPrototypeOf';
18
+ import '@babel/runtime/helpers/inherits';
19
+ import 'react';
20
+ import '../../../../_chunks/dep-16520c2b.js';
21
+ import '@babel/runtime/helpers/wrapNativeSuper';
22
+ import '@json-render/core';
23
+ import './store.js';
24
+ import '@babel/runtime/helpers/asyncToGenerator';
25
+ import '@babel/runtime/regenerator';
26
+ import '@babel/runtime/helpers/objectWithoutProperties';
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,67 @@
1
+ import React, { type ReactNode } from "react";
2
+ /**
3
+ * 泛型 Store 基类
4
+ *
5
+ * 提供统一的外部状态管理模式,支持细粒度订阅。
6
+ * 设计原则:
7
+ * 1. 状态存储在 React 外部,避免 Context 传递整个状态导致的级联重渲染
8
+ * 2. 使用 useSyncExternalStore 实现细粒度订阅
9
+ * 3. 配合 Structural Sharing 使用,通过引用比较判断变化
10
+ */
11
+ export declare class Store<T> {
12
+ private state;
13
+ private listeners;
14
+ constructor(initialState: T);
15
+ /**
16
+ * 获取当前状态
17
+ */
18
+ getState(): T;
19
+ /**
20
+ * 设置新状态并通知订阅者
21
+ */
22
+ setState(newState: T): void;
23
+ /**
24
+ * 通过 updater 函数更新状态
25
+ */
26
+ updateState(updater: (prev: T) => T): void;
27
+ /**
28
+ * 订阅状态变化
29
+ */
30
+ subscribe: (listener: () => void) => (() => void);
31
+ /**
32
+ * 通知所有订阅者
33
+ */
34
+ protected emitChange(): void;
35
+ }
36
+ /**
37
+ * 创建 Store Context 的工厂函数
38
+ *
39
+ * 返回:
40
+ * - Provider: 提供 store 实例的组件
41
+ * - useStore: 获取 store 实例的 hook
42
+ * - useSelector: 细粒度订阅 store 状态的 hook
43
+ */
44
+ export declare function createStoreContext<T, S extends Store<T>>(displayName: string): {
45
+ Provider: {
46
+ ({ store, children, }: {
47
+ store: S;
48
+ children: ReactNode;
49
+ }): import("react/jsx-runtime").JSX.Element;
50
+ displayName: string;
51
+ };
52
+ useStore: () => S;
53
+ useSelector: <R>(selector: (state: T) => R) => R;
54
+ useStoreState: () => T;
55
+ };
56
+ /**
57
+ * 使用 ref 保持稳定引用的 hook
58
+ *
59
+ * 用于需要在回调中访问最新值,但不希望回调函数重建的场景
60
+ */
61
+ export declare function useStableRef<T>(value: T): React.MutableRefObject<T>;
62
+ /**
63
+ * 创建稳定的回调函数
64
+ *
65
+ * 类似 useCallback,但依赖通过 ref 访问,回调函数引用永远稳定
66
+ */
67
+ export declare function useStableCallback<T extends (...args: any[]) => any>(callback: T): T;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * tdesign v1.1.0-alpha.5
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
8
+ import _createClass from '@babel/runtime/helpers/createClass';
9
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
10
+ import React, { createContext, useContext, useCallback, useSyncExternalStore, useRef } from 'react';
11
+
12
+ var Store = /*#__PURE__*/function () {
13
+ function Store(initialState) {
14
+ var _this = this;
15
+ _classCallCheck(this, Store);
16
+ _defineProperty(this, "listeners", /* @__PURE__ */new Set());
17
+ _defineProperty(this, "subscribe", function (listener) {
18
+ _this.listeners.add(listener);
19
+ return function () {
20
+ return _this.listeners["delete"](listener);
21
+ };
22
+ });
23
+ this.state = initialState;
24
+ }
25
+ return _createClass(Store, [{
26
+ key: "getState",
27
+ value: function getState() {
28
+ return this.state;
29
+ }
30
+ }, {
31
+ key: "setState",
32
+ value: function setState(newState) {
33
+ if (this.state === newState) return;
34
+ this.state = newState;
35
+ this.emitChange();
36
+ }
37
+ }, {
38
+ key: "updateState",
39
+ value: function updateState(updater) {
40
+ var newState = updater(this.state);
41
+ this.setState(newState);
42
+ }
43
+ }, {
44
+ key: "emitChange",
45
+ value: function emitChange() {
46
+ this.listeners.forEach(function (listener) {
47
+ return listener();
48
+ });
49
+ }
50
+ }]);
51
+ }();
52
+ function createStoreContext(displayName) {
53
+ var StoreContext = /*#__PURE__*/createContext(null);
54
+ function StoreProvider(_ref) {
55
+ var store = _ref.store,
56
+ children = _ref.children;
57
+ return /* @__PURE__ */React.createElement(StoreContext.Provider, {
58
+ value: store
59
+ }, children);
60
+ }
61
+ StoreProvider.displayName = "".concat(displayName, "Provider");
62
+ function useStore() {
63
+ var store = useContext(StoreContext);
64
+ if (!store) {
65
+ throw new Error("use".concat(displayName, " must be used within ").concat(displayName, "Provider"));
66
+ }
67
+ return store;
68
+ }
69
+ function useSelector(selector) {
70
+ var store = useStore();
71
+ var getSnapshot = useCallback(function () {
72
+ return selector(store.getState());
73
+ }, [store, selector]);
74
+ return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
75
+ }
76
+ function useStoreState() {
77
+ var store = useStore();
78
+ var getSnapshot = useCallback(function () {
79
+ return store.getState();
80
+ }, [store]);
81
+ return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
82
+ }
83
+ return {
84
+ Provider: StoreProvider,
85
+ useStore: useStore,
86
+ useSelector: useSelector,
87
+ useStoreState: useStoreState
88
+ };
89
+ }
90
+ function useStableRef(value) {
91
+ var ref = useRef(value);
92
+ ref.current = value;
93
+ return ref;
94
+ }
95
+ function useStableCallback(callback) {
96
+ var callbackRef = useRef(callback);
97
+ callbackRef.current = callback;
98
+ return useCallback(function () {
99
+ return callbackRef.current.apply(callbackRef, arguments);
100
+ }, []);
101
+ }
102
+
103
+ export { Store, createStoreContext, useStableCallback, useStableRef };
104
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sources":["../../../../../../pro-components/chat/chat-engine/components/json-render/contexts/store.tsx"],"sourcesContent":["import React, {\n createContext,\n useContext,\n useRef,\n useSyncExternalStore,\n useCallback,\n type ReactNode,\n} from \"react\";\n\n/**\n * 泛型 Store 基类\n * \n * 提供统一的外部状态管理模式,支持细粒度订阅。\n * 设计原则:\n * 1. 状态存储在 React 外部,避免 Context 传递整个状态导致的级联重渲染\n * 2. 使用 useSyncExternalStore 实现细粒度订阅\n * 3. 配合 Structural Sharing 使用,通过引用比较判断变化\n */\nexport class Store<T> {\n private state: T;\n private listeners = new Set<() => void>();\n\n constructor(initialState: T) {\n this.state = initialState;\n }\n\n /**\n * 获取当前状态\n */\n getState(): T {\n return this.state;\n }\n\n /**\n * 设置新状态并通知订阅者\n */\n setState(newState: T): void {\n // 引用相同则不触发更新\n if (this.state === newState) return;\n this.state = newState;\n this.emitChange();\n }\n\n /**\n * 通过 updater 函数更新状态\n */\n updateState(updater: (prev: T) => T): void {\n const newState = updater(this.state);\n this.setState(newState);\n }\n\n /**\n * 订阅状态变化\n */\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n /**\n * 通知所有订阅者\n */\n protected emitChange(): void {\n this.listeners.forEach((listener) => listener());\n }\n}\n\n/**\n * 创建 Store Context 的工厂函数\n * \n * 返回:\n * - Provider: 提供 store 实例的组件\n * - useStore: 获取 store 实例的 hook\n * - useSelector: 细粒度订阅 store 状态的 hook\n */\nexport function createStoreContext<T, S extends Store<T>>(\n displayName: string,\n) {\n const StoreContext = createContext<S | null>(null);\n\n /**\n * Store Provider\n */\n function StoreProvider({\n store,\n children,\n }: {\n store: S;\n children: ReactNode;\n }) {\n // store 实例应该是稳定的,不需要 useMemo\n return (\n <StoreContext.Provider value={store}>{children}</StoreContext.Provider>\n );\n }\n StoreProvider.displayName = `${displayName}Provider`;\n\n /**\n * 获取 store 实例\n */\n function useStore(): S {\n const store = useContext(StoreContext);\n if (!store) {\n throw new Error(`use${displayName} must be used within ${displayName}Provider`);\n }\n return store;\n }\n\n /**\n * 细粒度订阅 store 状态\n * \n * @param selector - 从 state 中选取需要的部分\n * @returns 选取的状态片段\n * \n * 性能优化:\n * - selector 返回的引用不变时,组件不会重渲染\n * - 配合 Structural Sharing 使用效果最佳\n */\n function useSelector<R>(selector: (state: T) => R): R {\n const store = useStore();\n\n const getSnapshot = useCallback(() => {\n return selector(store.getState());\n }, [store, selector]);\n\n return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n }\n\n /**\n * 订阅整个 state(谨慎使用,会导致任何变化都重渲染)\n */\n function useStoreState(): T {\n const store = useStore();\n\n const getSnapshot = useCallback(() => {\n return store.getState();\n }, [store]);\n\n return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n }\n\n return {\n Provider: StoreProvider,\n useStore,\n useSelector,\n useStoreState,\n };\n}\n\n/**\n * 使用 ref 保持稳定引用的 hook\n * \n * 用于需要在回调中访问最新值,但不希望回调函数重建的场景\n */\nexport function useStableRef<T>(value: T): React.MutableRefObject<T> {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n}\n\n/**\n * 创建稳定的回调函数\n * \n * 类似 useCallback,但依赖通过 ref 访问,回调函数引用永远稳定\n */\nexport function useStableCallback<T extends (...args: any[]) => any>(\n callback: T,\n): T {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useCallback(((...args) => callbackRef.current(...args)) as T, []);\n}\n"],"names":["Store","initialState","_this","_classCallCheck","_defineProperty","Set","listener","listeners","add","state","_createClass","key","value","getState","setState","newState","emitChange","updateState","updater","forEach","createStoreContext","displayName","StoreContext","createContext","StoreProvider","_ref","store","children","React","createElement","Provider","useStore","useContext","Error","concat","useSelector","selector","getSnapshot","useCallback","useSyncExternalStore","subscribe","useStoreState","useStableRef","ref","useRef","current","useStableCallback","callback","callbackRef","arguments"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import React from "react";
2
+ import type { UIElement, UITree } from "@json-render/core";
3
+ import { Store } from "./store";
4
+ import type { ComponentRenderer, ComponentRegistry } from '../types';
5
+ /**
6
+ * TreeStore - 外部 store,支持细粒度订阅
7
+ *
8
+ * 继承自通用 Store 基类,提供 UITree 的管理能力:
9
+ * - 配合上游 Structural Sharing(结构共享)使用
10
+ * - 上游 applyPatchImmutable 只重建被修改的节点
11
+ * - 未修改的节点保持原引用
12
+ * - getSnapshot 直接比较引用即可判断是否变化
13
+ */
14
+ export declare class TreeStore extends Store<UITree | null> {
15
+ constructor();
16
+ setTree(tree: UITree | null): void;
17
+ getTree(): UITree;
18
+ getElement(key: string): UIElement | undefined;
19
+ getRoot(): string | undefined;
20
+ }
21
+ /**
22
+ * Context 只传递稳定引用
23
+ */
24
+ interface RenderContextValue {
25
+ store: TreeStore;
26
+ registry: ComponentRegistry;
27
+ loading?: boolean;
28
+ fallback?: ComponentRenderer;
29
+ }
30
+ export declare const RenderContext: React.Context<RenderContextValue>;
31
+ export declare function useRenderContext(): RenderContextValue;
32
+ /**
33
+ * 使用 useSyncExternalStore 订阅特定 element
34
+ *
35
+ * 依赖上游的 Structural Sharing:
36
+ * - 如果 element 引用没变,说明内容没变,直接返回
37
+ * - 如果 element 引用变了,说明内容变了,返回新引用触发重渲染
38
+ */
39
+ export declare function useElement(elementKey: string): UIElement | undefined;
40
+ /**
41
+ * Hook: 订阅 root key
42
+ */
43
+ export declare function useRoot(): string | undefined;
44
+ export {};