@tdesign-react/chat 1.1.0-alpha.4 → 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.
- 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-56f5e08e.js +448 -0
- package/es/_chunks/dep-56f5e08e.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-bcb234a1.js +839 -0
- package/es/_chunks/dep-bcb234a1.js.map +1 -0
- package/es/_util/reactify.js +1 -1
- package/es/_util/useDynamicStyle.js +1 -1
- package/es/attachments/index.js +1 -1
- package/es/chat-actionbar/index.js +1 -1
- package/es/chat-engine/components/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 +14 -2
- package/es/chat-engine/components/activity/render.js.map +1 -1
- package/es/chat-engine/components/activity/types.js +1 -1
- package/es/chat-engine/components/index.js +28 -18
- 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.js +2 -2
- 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.js +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 -32
- 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 +14 -5
- package/es/chat-engine/components/provider/agent-state.js.map +1 -1
- package/es/chat-engine/components/toolcall/index.js +14 -5
- 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 +15 -6
- 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 +10 -13
- 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 +1550 -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 +818 -0
- package/es/chat-engine/core/adapters/agui/types/index.js +277 -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 +2 -3
- package/es/chat-engine/core/index.js +15 -5
- 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 +15 -17
- 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 +8 -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 +14 -5
- package/es/chat-engine/hooks/index.js.map +1 -1
- package/es/chat-engine/hooks/useAgentActivity.js +1 -1
- package/es/chat-engine/hooks/useAgentState.js +14 -5
- 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 +14 -5
- 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 +28 -18
- 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 +28 -18
- package/es/index.js.map +1 -1
- package/es/style/index.js +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,63 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
import { type DataModel, type AuthState } from "@json-render/core";
|
|
3
|
+
import { Store } from "./store";
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
+
* DataStore 状态类型
|
|
6
|
+
*/
|
|
7
|
+
export interface DataStoreState {
|
|
8
|
+
/** 数据模型 */
|
|
9
|
+
data: DataModel;
|
|
10
|
+
/** 认证状态 */
|
|
11
|
+
authState?: AuthState;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* DataStore - 管理表单/组件的数据状态
|
|
15
|
+
*
|
|
16
|
+
* 性能优化:
|
|
17
|
+
* - 使用外部 Store 模式,避免 Context 传递整个 data 导致级联重渲染
|
|
18
|
+
* - 支持细粒度订阅:组件只订阅自己需要的路径
|
|
19
|
+
* - 配合 Structural Sharing,通过引用比较判断变化
|
|
20
|
+
*/
|
|
21
|
+
export declare class DataStore extends Store<DataStoreState> {
|
|
22
|
+
private onDataChange?;
|
|
23
|
+
constructor(initialData?: DataModel, authState?: AuthState, onDataChange?: (path: string, value: unknown) => void);
|
|
24
|
+
/**
|
|
25
|
+
* 获取数据模型
|
|
26
|
+
*/
|
|
27
|
+
getData(): DataModel;
|
|
28
|
+
/**
|
|
29
|
+
* 获取认证状态
|
|
30
|
+
*/
|
|
31
|
+
getAuthState(): AuthState | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* 通过路径获取值
|
|
34
|
+
*/
|
|
35
|
+
getByPath(path: string): unknown;
|
|
36
|
+
/**
|
|
37
|
+
* 通过路径设置值(使用 immer 实现 Structural Sharing)
|
|
38
|
+
*/
|
|
39
|
+
setByPath(path: string, value: unknown): void;
|
|
40
|
+
/**
|
|
41
|
+
* 批量更新多个路径
|
|
42
|
+
*/
|
|
43
|
+
updatePaths(updates: Record<string, unknown>): void;
|
|
44
|
+
/**
|
|
45
|
+
* 合并新数据到现有数据
|
|
46
|
+
*/
|
|
47
|
+
mergeData(newData: DataModel): void;
|
|
48
|
+
/**
|
|
49
|
+
* 更新认证状态
|
|
50
|
+
*/
|
|
51
|
+
setAuthState(authState: AuthState | undefined): void;
|
|
52
|
+
/**
|
|
53
|
+
* 设置 onDataChange 回调
|
|
54
|
+
*/
|
|
55
|
+
setOnDataChange(callback: ((path: string, value: unknown) => void) | undefined): void;
|
|
56
|
+
}
|
|
57
|
+
declare const useDataStore: () => DataStore, useDataSelector: <R>(selector: (state: DataStoreState) => R) => R, useDataStoreState: () => DataStoreState;
|
|
58
|
+
export { useDataStore, useDataSelector, useDataStoreState };
|
|
59
|
+
/**
|
|
60
|
+
* Data context value(兼容旧 API)
|
|
5
61
|
*/
|
|
6
62
|
export interface DataContextValue {
|
|
7
63
|
/** The current data model */
|
|
@@ -29,17 +85,53 @@ export interface DataProviderProps {
|
|
|
29
85
|
}
|
|
30
86
|
/**
|
|
31
87
|
* Provider for data model context
|
|
88
|
+
*
|
|
89
|
+
* 性能优化:
|
|
90
|
+
* - 内部使用 DataStore,支持细粒度订阅
|
|
91
|
+
* - 提供兼容旧 API 的 useData() hook
|
|
92
|
+
* - 推荐使用 useDataValue() 进行细粒度订阅
|
|
32
93
|
*/
|
|
33
94
|
export declare function DataProvider({ initialData, authState, onDataChange, children, }: DataProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
34
95
|
/**
|
|
35
|
-
*
|
|
96
|
+
* 获取指定路径的值(细粒度订阅)
|
|
97
|
+
*
|
|
98
|
+
* 性能优化:只有指定路径的值变化时才重渲染
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* const name = useDataValue<string>('/userInfo/name');
|
|
102
|
+
*/
|
|
103
|
+
export declare function useDataValue<T>(path?: string): T | undefined;
|
|
104
|
+
/**
|
|
105
|
+
* 数据绑定 hook(类似 useState 的 API)
|
|
106
|
+
*
|
|
107
|
+
* 返回 [value, setValue] 元组,value 支持细粒度订阅,setValue 引用稳定
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* const [name, setName] = useDataBinding<string>('/userInfo/name');
|
|
36
111
|
*/
|
|
37
|
-
export declare function
|
|
112
|
+
export declare function useDataBinding<T>(path?: string): [T | undefined, (value: T) => void];
|
|
38
113
|
/**
|
|
39
|
-
*
|
|
114
|
+
* 批量更新多个路径
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* const updatePaths = useDataUpdate();
|
|
118
|
+
* updatePaths({ '/name': 'Alice', '/age': 30 });
|
|
40
119
|
*/
|
|
41
|
-
export declare function
|
|
120
|
+
export declare function useDataUpdate(): (updates: Record<string, unknown>) => void;
|
|
42
121
|
/**
|
|
43
|
-
*
|
|
122
|
+
* 获取整个 data 和 authState(订阅所有变化)
|
|
123
|
+
*
|
|
124
|
+
* ⚠️ 警告:此 hook 会订阅整个 data 对象,任何数据变化都会触发重渲染
|
|
125
|
+
* 仅在以下场景使用:
|
|
126
|
+
* - 需要遍历整个 data 对象
|
|
127
|
+
* - 需要同时访问 data 和 authState
|
|
128
|
+
* - ValidationProvider 等基础设施层
|
|
129
|
+
*
|
|
130
|
+
* 普通组件请使用:
|
|
131
|
+
* - useDataValue() - 细粒度订阅
|
|
132
|
+
* - useDataBinding() - 双向绑定
|
|
44
133
|
*/
|
|
45
|
-
export declare function
|
|
134
|
+
export declare function useDataState(): {
|
|
135
|
+
data: DataModel;
|
|
136
|
+
authState?: AuthState;
|
|
137
|
+
};
|
|
@@ -1,104 +1,183 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
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
|
|
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
|
-
|
|
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
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
|
89
|
-
|
|
90
|
-
|
|
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
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
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,
|
|
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":";;;;;;;;;;;;;;;;;;;;AAAA,YAAA,CAAA;AAAA,SAAAA,OAAAA,CAAAC,CAAA,EAAAC,CAAA,EAAA,EAAA,IAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,EAAA,EAAA,IAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,CAAA,CAAA,CAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,CAAAN,UAAAA,CAAA,EAAAE,EAAAA,OAAAA,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,CAAA,EAAA,CAAA,CAAA,EAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,CAAA,CAAA,EAAA,CAAA,OAAAJ,CAAA,CAAA,EAAA;AAAA,SAAAU,cAAAZ,CAAA,EAAA,EAAA,KAAA,IAAAC,CAAA,GAAAA,CAAAA,EAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,EAAAC,EAAAA,EAAAA,IAAAA,CAAA,WAAAW,SAAA,CAAAZ,CAAA,CAAAY,GAAAA,SAAA,CAAAZ,CAAA,QAAAA,CAAA,GAAA,CAAA,GAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAAa,OAAA,CAAAd,UAAAA,CAAA,IAAAe,eAAA,CAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,CAAAa,CAAAA,CAAAA,OAAA,WAAAd,CAAA,EAAA,EAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA,CAAA,EAAA;AAAA,SAAAoB,WAAAlB,CAAA,EAAAI,CAAA,EAAAN,CAAA,EAAAM,EAAAA,OAAAA,CAAA,GAAAe,eAAA,CAAAf,CAAA,CAAA,EAAAgB,0BAAA,CAAApB,CAAA,EAAAqB,yBAAA,EAAA,GAAAC,OAAA,CAAAC,SAAA,CAAAnB,CAAA,EAAAN,CAAA,IAAA,EAAA,EAAAqB,eAAA,CAAAnB,CAAA,CAAAwB,CAAAA,WAAA,IAAApB,CAAA,CAAAK,KAAA,CAAAT,CAAA,EAAAF,CAAA,CAAA,CAAA,CAAA,EAAA;AAAA,SAAAuB,yBAAAA,GAAArB,EAAAA,IAAAA,EAAAA,IAAAA,CAAA,GAAAyB,CAAAA,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAN,OAAA,CAAAC,SAAA,CAAAE,OAAA,EAAAzB,EAAAA,EAAAA,YAAAA,EAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,OAAAA,CAAA,aAAAqB,yBAAA,GAAA,SAAAA,yBAAA,GAAA,EAAA,OAAA,CAAA,CAAArB,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA;AAoCa6B,IAAAA;AAGX,EAAA,SAAAA,YAIE;AAAA,IAAA,IAAAC,KAAA,CAAA;AAAA,IAAA,IAHAC,WAAA,GAAApB,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAqB,SAAA,GAAArB,SAAA,CAAA,CAAA,CAAA,GAAyB,EAAC,CAAA;IAAA,IAC1BsB;QACAC,YACA,GAAAvB,SAAA,CAAAC,MAAA,GAAAD,CAAAA,GAAAA,SAAA,MAAAqB,SAAA,CAAA;AAAAG,IAAAA,eAAA,OAAAN,SAAA,CAAA,CAAA;AACAC,IAAAA,KAAA,GAAAZ,UAAA,CAAAW,IAAAA,EAAAA,SAAA,EAAM,CAAA;AAAEO,MAAAA,IAAA,EAAML,WAAa;AAAAE,MAAAA,SAAA,EAAAA,SAAAA;KAAW,CAAA,CAAA,CAAA;IACtCH,KAAA,CAAKI,YAAe,GAAAA,YAAA,CAAA;AAAA,IAAA,OAAAJ,KAAA,CAAA;AACtB,GAAA;EAAAO,SAAA,CAAAR,SAAA,EAAAS,MAAA,CAAA,CAAA;EAAA,OAAAC,YAAA,CAAAV,SAAA,EAAA,CAAA;IAAAW,GAAA,EAAA,SAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAC,OAAqBA,GAAA;AACZ,MAAA,OAAA,IAAA,CAAKC,UAAW,CAAAP,IAAA,CAAA;AACzB,KAAA;AAAA,GAAA,EAAA;IAAAI,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAG,YAAsCA,GAAA;AAC7B,MAAA,OAAA,IAAA,CAAKD,UAAW,CAAAV,SAAA,CAAA;AACzB,KAAA;AAAA,GAAA,EAAA;IAAAO,GAAA,EAAA,WAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAI,YAAUC,IAAuB,EAAA;MAC/B,OAAOD,SAAU,CAAA,IAAA,CAAKF,QAAS,EAAA,CAAEP,MAAMU,IAAI,CAAA,CAAA;AAC7C,KAAA;AAAA,GAAA,EAAA;IAAAN,GAAA,EAAA,WAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAM,WAAAA,CAAUD,MAAcL,KAAsB,EAAA;AAAA,MAAA,IAAAO,kBAAA,CAAA;AACvC,MAAA,IAAA,CAAAC,WAAA,CAAY,UAACC,IAAA,EAAA;AAAA,QAAA,OAChBC,OAAQ,CAAAD,IAAA,EAAM,UAACE,KAAU,EAAA;UACNC,SAAA,CAAAD,KAAA,CAAMhB,IAAM,EAAAU,IAAA,EAAML,KAAK,CAAA,CAAA;AAC1C,SAAC,CAAA,CAAA;AAAA,OACH,CAAA,CAAA;AACK,MAAA,CAAAO,kBAAA,GAAA,IAAA,CAAAd,YAAA,cAAAc,kBAAA,KAAA,KAAA,CAAA,IAAAA,kBAAA,CAAApB,IAAA,CAAA,IAAA,EAAekB,MAAML,KAAK,CAAA,CAAA;AACjC,KAAA;AAAA,GAAA,EAAA;IAAAD,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAa,YAAYC,OAAwC,EAAA;AAAA,MAAA,IAAAC,MAAA,GAAA,IAAA,CAAA;AAC7C,MAAA,IAAA,CAAAP,WAAA,CAAY,UAACC,IAAA,EAAA;AAAA,QAAA,OAChBC,OAAQ,CAAAD,IAAA,EAAM,UAACE,KAAU,EAAA;AACvB,UAAA,KAAA,IAAAK,EAAA,GAAAC,CAAAA,EAAAA,eAAA,GAA4BzD,MAAO,CAAA0D,OAAA,CAAQJ,OAAO,CAAG,EAAAE,EAAA,GAAAC,eAAA,CAAA9C,MAAA,EAAA6C,EAAA,EAAA,EAAA;AAAA,YAAA,IAAAG,mBAAA,CAAA;AAArD,YAAA,IAAAC,kBAAA,GAAAC,cAAA,CAAAJ,eAAA,CAAAD,EAAA,CAAA,EAAA,CAAA,CAAA;AAAYX,cAAAA,IAAM,GAAAe,kBAAA,CAAA,CAAA,CAAA;AAAApB,cAAAA,KAAK,GAAAoB,kBAAA,CAAA,CAAA,CAAA,CAAA;YACJR,SAAA,CAAAD,KAAA,CAAMhB,IAAM,EAAAU,IAAA,EAAML,KAAK,CAAA,CAAA;AACnC,YAAA,CAAAmB,mBAAA,GAAAJ,MAAA,CAAAtB,YAAA,cAAA0B,mBAAA,KAAA,KAAA,CAAA,IAAAA,mBAAA,CAAAhC,IAAA,CAAA4B,MAAA,EAAeV,MAAML,KAAK,CAAA,CAAA;AACjC,WAAA;AACF,SAAC,CAAA,CAAA;AAAA,OACH,CAAA,CAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAAD,GAAA,EAAA,WAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAsB,UAAUC,OAA0B,EAAA;AAC7B,MAAA,IAAA,CAAAf,WAAA,CAAY,UAACC,IAAA,EAAA;AAAA,QAAA,OAChBC,OAAQ,CAAAD,IAAA,EAAM,UAACE,KAAU,EAAA;AACvB,UAAA,KAAA,IAAAa,GAAA,GAAAC,CAAAA,EAAAA,gBAAA,GAA2BjE,MAAO,CAAA0D,OAAA,CAAQK,OAAO,CAAG,EAAAC,GAAA,GAAAC,gBAAA,CAAAtD,MAAA,EAAAqD,GAAA,EAAA,EAAA;AAApD,YAAA,IAAAE,mBAAA,GAAAL,cAAA,CAAAI,gBAAA,CAAAD,GAAA,CAAA,EAAA,CAAA,CAAA;AAAYzB,cAAAA,GAAK,GAAA2B,mBAAA,CAAA,CAAA,CAAA;AAAA1B,cAAAA,KAAK,GAAA0B,mBAAA,CAAA,CAAA,CAAA,CAAA;AACpB,YAAA,IACEC,OAAA,CAAO3B,KAAU,CAAA,KAAA,QAAA,IACjBA,UAAU,IACV,IAAA,CAAC4B,MAAMC,OAAQ,CAAA7B,KAAK,CACpB,IAAA2B,OAAA,CAAOhB,MAAMhB,IAAK,CAAAI,GAAA,CAAA,CAAS,KAAA,YAC3BY,KAAM,CAAAhB,IAAA,CAAKI,SAAS,IACpB,EAAA;cACAvC,MAAA,CAAOsE,MAAO,CAAAnB,KAAA,CAAMhB,IAAK,CAAAI,GAAA,CAAA,EAAgBC,KAAK,CAAA,CAAA;AAChD,aAAO,MAAA;AACLW,cAAAA,KAAA,CAAMhB,KAAKI,GAAO,CAAA,GAAAC,KAAA,CAAA;AACpB,aAAA;AACF,WAAA;AACF,SAAC,CAAA,CAAA;AAAA,OACH,CAAA,CAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAAD,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAKA,SAAA+B,aAAavC,SAAwC,EAAA;AACnD,MAAA,IAAA,CAAKgB,YAAY,UAACC,IAAA,EAAA;AAAA,QAAA,OAAAxC,aAAA,CAAAA,aAAA,CAAA,EAAA,EAAewC,IAAA,CAAA,EAAA,EAAA,EAAA;AAAMjB,UAAAA,WAAAA,SAAAA;;OAAY,CAAA,CAAA;AACrD,KAAA;AAAA,GAAA,EAAA;IAAAO,GAAA,EAAA,iBAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAgC,gBAAgBC,QAAsE,EAAA;MACpF,IAAA,CAAKxC,YAAe,GAAAwC,QAAA,CAAA;AACtB,KAAA;AAAA,GAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CA9F6BC,KAAsB,EAAA;AAkGrD,IAAAC,mBAAA,GAKIC,mBAA8C,WAAW,CAAA,CAAA;EAJjDC,iBAAA,GAAAF,mBAAA,CAAVG,QAAU,CAAA;EACAC,YAAA,GAAAJ,mBAAA,CAAVK,QAAU,CAAA;EACGC,eAAA,GAAAN,mBAAA,CAAbO,WAAa,CAAA;EACEC,iBAAA,GAAAR,mBAAA,CAAfS,cAAe;AA0CV,SAASC,YAAaA,CAAAC,IAAA,EAKP;AAAA,EAAA,IAAAC,gBAAA,GAAAD,IAAA,CAJpBxD;AAAAA,IAAAA,4CAAc,EAAC,GAAAyD,gBAAA;IACfvD,SAAA,GAAAsD,IAAA,CAAAtD,SAAA;IACAC,YAAA,GAAAqD,IAAA,CAAArD,YAAA;IACAuD,QAAA,GAAAF,IAAA,CAAAE,QAAA,CAAA;AAGM,EAAA,IAAAC,QAAA,GAAWC,OAAyB,IAAI,CAAA,CAAA;AAC1C,EAAA,IAAA,CAACD,SAASE,OAAS,EAAA;IACrBF,QAAA,CAASE,OAAU,GAAA,IAAI/D,SAAU,CAAAE,WAAA,EAAaE,WAAWC,YAAY,CAAA,CAAA;AACvE,GAAA;AACA,EAAA,IAAM2D,QAAQH,QAAS,CAAAE,OAAA,CAAA;AAGvBE,EAAAA,SAAA,CAAU,YAAM;AACdD,IAAAA,KAAA,CAAM9B,UAAUhC,WAAW,CAAA,CAAA;AAC7B,GAAG,EAAA,CAACA,WAAa,EAAA8D,KAAK,CAAC,CAAA,CAAA;AAGvBC,EAAAA,SAAA,CAAU,YAAM;AACdD,IAAAA,KAAA,CAAMrB,aAAavC,SAAS,CAAA,CAAA;AAC9B,GAAG,EAAA,CAACA,SAAW,EAAA4D,KAAK,CAAC,CAAA,CAAA;AAGrBC,EAAAA,SAAA,CAAU,YAAM;AACdD,IAAAA,KAAA,CAAMpB,gBAAgBvC,YAAY,CAAA,CAAA;AACpC,GAAG,EAAA,CAACA,YAAc,EAAA2D,KAAK,CAAC,CAAA,CAAA;AAExB,EAAA,sBAAQE,KAAA,CAAAC,aAAA,CAAAlB,iBAAA,EAAA;AAAkBe,IAAAA,KAAA,EAAAA,KAAAA;GAAA,EAAeJ,QAAS,CAAA,CAAA;AACpD,CAAA;AAUO,SAASQ,aAAgBnD,IAA8B,EAAA;AAC5D,EAAA,IAAM+C,QAAQb,YAAa,EAAA,CAAA;AAE3B,EAAA,IAAMkB,SAAY,GAAAC,WAAA,CAChB,UAACC,aAAA,EAAA;AAAA,IAAA,OAA8BP,KAAM,CAAAK,SAAA,CAAUE,aAAa,CAAA,CAAA;GAC5D,EAAA,CAACP,KAAK,CACR,CAAA,CAAA;AAEM,EAAA,IAAAQ,WAAA,GAAcF,YAAY,YAAM;AACpC,IAAA,IAAI,CAACrD,IAAA,EAAa,OAAA,KAAA,CAAA,CAAA;AACX,IAAA,OAAA+C,KAAA,CAAMhD,UAAUC,IAAI,CAAA,CAAA;AAC7B,GAAG,EAAA,CAAC+C,KAAO,EAAA/C,IAAI,CAAC,CAAA,CAAA;AAET,EAAA,OAAAwD,oBAAA,CAAqBJ,SAAW,EAAAG,WAAA,EAAaA,WAAW,CAAA,CAAA;AACjE,CAAA;AAUO,SAASE,eACdzD,IACqC,EAAA;AACrC,EAAA,IAAM+C,QAAQb,YAAa,EAAA,CAAA;AACrB,EAAA,IAAAvC,KAAA,GAAQwD,aAAgBnD,IAAI,CAAA,CAAA;AAE5B,EAAA,IAAA0D,QAAA,GAAWC,iBAAkB,CAAA,UAACC,QAAgB,EAAA;AAClD,IAAA,IAAI5D,IAAM,EAAA;AACF+C,MAAAA,KAAA,CAAA9C,SAAA,CAAUD,MAAM4D,QAAQ,CAAA,CAAA;AAChC,KAAA;AACF,GAAC,CAAA,CAAA;AAEM,EAAA,OAAA,CAACjE,OAAO+D,QAAQ,CAAA,CAAA;AACzB,CAAA;AASO,SAASG,aAA4DA,GAAA;AAC1E,EAAA,IAAMd,QAAQb,YAAa,EAAA,CAAA;AAEpB,EAAA,OAAAyB,iBAAA,CAAkB,UAAClD,OAAqC,EAAA;AAC7DsC,IAAAA,KAAA,CAAMvC,YAAYC,OAAO,CAAA,CAAA;AAC3B,GAAC,CAAA,CAAA;AACH,CAAA;AAeO,SAASqD,YAA2DA,GAAA;AACzE,EAAA,IAAMC,QAAQzB,iBAAkB,EAAA,CAAA;EAChC,OAAO;IAAEhD,IAAM,EAAAyE,KAAA,CAAMzE,IAAM;IAAAH,SAAA,EAAW4E,MAAM5E,SAAAA;GAAU,CAAA;AACxD;;;;"}
|
|
@@ -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
|