cdp-material-sdk 0.0.5 → 0.0.9

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.
@@ -37,15 +37,52 @@ Traits 之间不互斥,一个组件可以同时声明多个 trait。例如 For
37
37
 
38
38
  - 声明 `COMPONENT_TRAIT.DATA_FIELD`。
39
39
  - 声明 `meta.valueSchema`。
40
- - 组件接收 `value`。
41
- - 值变化时调用 `onChange(nextValue)`。
40
+ - 组件接收并渲染 `value`,值变化时调用 `onChange(nextValue)`。
41
+ - 如组件支持只读/必填/标签语义,分别接收 `readOnly` / `required` / `label`;置于数据容器内时支持 `name`。
42
+
43
+ 下列 props / actions / state / events 由引擎在声明 `DATA_FIELD` 后**自动注入并合并到 manifest**,作者一般**不需要**在自己的 manifest 中重复声明——重复声明会**覆盖**引擎注入的版本(包括 `valueSchema` 自动特化),破坏对外行为一致性。仅当组件**确有特化需求**(例如定制 `setValue.params` 取值规则)时,才建议显式声明覆盖:
44
+
45
+ #### 自动注入的 props
46
+
47
+ | Prop | 类型 | 说明 |
48
+ |------|------|------|
49
+ | `value` | 由 `meta.valueSchema` 决定 | 字段当前值 |
50
+ | `readOnly` | `boolean` | 是否只读 |
51
+ | `required` | `boolean` | 是否必填 |
52
+ | `name` | `string` | 字段名(容器内组织值用) |
53
+ | `label` | `string` | 显示标签 |
54
+ | `labelStrategy` | 标签策略对象 | 字段级标签策略局部覆盖;未设置时向上继承(FieldLayout / Form / Page / 默认) |
55
+
56
+ #### 自动注入的 actions
57
+
58
+ | Action | 说明 |
59
+ |--------|------|
60
+ | `getValue` | 获取当前值;返回类型由 `valueSchema` 特化 |
61
+ | `setValue({ value, triggerEvent? })` | 设置值;返回 `{ newValue, oldValue }`;`triggerEvent` 默认 `true` |
62
+ | `getReadOnly` / `setReadOnly({ readOnly })` / `toggleReadOnly` | 只读状态读写与切换 |
63
+ | `getRequired` / `setRequired({ required })` / `toggleRequired` | 必填状态读写与切换 |
64
+ | `triggerValueChange({ newValue?, oldValue? })` | 手动触发 `valueChange` 事件,用于 `updateFields` / 直写 Store 等绕过 `setValue` 的场景 |
65
+
66
+ #### 自动注入的 state
67
+
68
+ | State | Schema | 说明 |
69
+ |-------|--------|------|
70
+ | `value` | `meta.valueSchema` | 当前值;schema 由 `valueSchema` 自动透传 |
71
+ | `readOnly` | `boolean` | 当前只读状态 |
72
+ | `required` | `boolean` | 当前必填状态 |
73
+
74
+ #### 自动注入的 events
75
+
76
+ | Event | 说明 |
77
+ |-------|------|
78
+ | `valueChange` | 值变更事件;`onChange(nextValue)` 或 `setValue` 默认触发;可被事件编排消费 |
42
79
 
43
80
  ### 宿主可据此做什么
44
81
 
45
- - 注入和回写字段值。
46
- - 在数据容器内按字段名组织值。
47
- - 让表达式、设计器和 AI 工具识别 value 类型。
48
- - 基于 `valueSchema` 推断标准 value 状态。
82
+ - 注入和回写字段值,在数据容器内按 `name` 组织值。
83
+ - 让表达式、设计器和 AI 工具识别 value 类型与字段语义。
84
+ - 基于 `valueSchema` 自动特化 `getValue` / `setValue` / `state.value` 的类型描述。
85
+ - 统一管理只读/必填状态,支持事件编排基于 `readOnly` / `required` / `value` 状态联动。
49
86
 
50
87
  ---
51
88
 
@@ -9,7 +9,7 @@ related:
9
9
  ---
10
10
  # 引擎基础能力模型
11
11
 
12
- 引擎基础能力是宿主自动赋予所有组件的通用运行时能力。组件作者通常不需要在 manifest 中重复声明这些能力,只需要避免冲突,并确保组件根节点能承接宿主注入。
12
+ 引擎基础能力是宿主自动赋予所有组件的通用运行时能力。组件作者一般不需要在 manifest 中重复声明这些能力——它们由宿主统一注入,重复声明会**覆盖**宿主版本,破坏对外行为的一致性。仅当组件**确有特化需求**时,才建议显式声明覆盖。
13
13
 
14
14
  ---
15
15
 
@@ -17,24 +17,26 @@ related:
17
17
 
18
18
  | 能力 | 外部含义 | 组件作者需要做什么 |
19
19
  |------|----------|-------------------|
20
- | `hidden` prop | 宿主告诉组件当前是否隐藏 | 可按需读取,但不要改成其他业务语义 |
21
- | `getHidden` action | 外部流程读取组件显隐状态 | 不要重复声明同名 action |
22
- | `setHidden` action | 外部流程设置组件显隐状态 | 不要重复声明同名 action |
23
- | `toggleHidden` action | 外部流程切换组件显隐状态 | 不要重复声明同名 action |
24
- | `hidden` state | 外部表达式、编排或 AI 读取当前显隐状态 | 不要重复声明同名 state |
25
- | `mount` / `unmount` events | 基础生命周期通知 | 普通组件不需要重复声明 |
20
+ | `hidden` prop | 宿主告诉组件当前是否隐藏 | 可按需读取;不建议改写为其他业务语义 |
21
+ | `getHidden` action | 外部流程读取组件显隐状态 | 默认不声明;如需特化(例如不同的 returns 描述)再显式覆盖 |
22
+ | `setHidden` action | 外部流程设置组件显隐状态 | 默认不声明;如需特化再显式覆盖 |
23
+ | `toggleHidden` action | 外部流程切换组件显隐状态 | 默认不声明;如需特化再显式覆盖 |
24
+ | `hidden` state | 外部表达式、编排或 AI 读取当前显隐状态 | 默认不声明;如需特化 schema 再显式覆盖 |
25
+ | `mount` / `unmount` events | 基础生命周期通知 | 默认不声明;普通组件无需重复 |
26
+
27
+ > 显式声明同名字段会覆盖宿主默认版本,请确认特化是必要的,并在 review 时让上游能识别这是有意覆盖。
26
28
 
27
29
  ---
28
30
 
29
31
  ## 与组件 manifest 的关系
30
32
 
31
- 基础能力由宿主在运行时补充。第三方组件 manifest 应只声明组件自己的业务能力,例如:
33
+ 基础能力由宿主在运行时补充。第三方组件 manifest 通常只需声明组件自己的业务能力,例如:
32
34
 
33
35
  - 业务 actions,例如 `refresh`、`clear`、`focus`。
34
36
  - 业务 state,例如 `selectedRows`、`keyword`。
35
37
  - 业务 events,例如 `valueChange`、`itemClick` 或自定义事件。
36
38
 
37
- 不要为了获得显隐控制而在 manifest 中手写 `getHidden`、`setHidden`、`toggleHidden` 或 `hidden` state
39
+ 一般不需要为了获得显隐控制而在 manifest 中手写 `getHidden`、`setHidden`、`toggleHidden` 或 `hidden` state;只在确有特化需求时再覆盖。
38
40
 
39
41
  ---
40
42
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cdp-material-sdk",
3
- "version": "0.0.5",
3
+ "version": "0.0.9",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -1,106 +0,0 @@
1
- import { createContext as D, useContext as f, useCallback as l, useRef as j, useMemo as E } from "react";
2
- import { useStore as O } from "zustand";
3
- import { cloneDeep as i, has as g, set as M } from "lodash-es";
4
- import { jsx as k } from "react/jsx-runtime";
5
- const b = D(null), d = D(null), x = "value", m = (t) => t !== null && typeof t == "object" && !Array.isArray(t), p = (t) => Array.isArray(t) && t.every((n) => n === void 0 || m(n)), C = (t, n, e = [x]) => {
6
- if (!g(t, e)) {
7
- M(t, e, i(n));
8
- return;
9
- }
10
- if (p(n)) {
11
- n.forEach((r, o) => {
12
- C(t, r, [...e, o]);
13
- });
14
- return;
15
- }
16
- if (m(n))
17
- for (const [r, o] of Object.entries(n))
18
- C(
19
- t,
20
- o,
21
- [...e, r]
22
- );
23
- }, $ = (t, n) => {
24
- if (n === void 0)
25
- return t;
26
- if (t === void 0)
27
- return i(n);
28
- const e = p(n), r = p(t), o = Array.isArray(n), s = Array.isArray(t), u = m(n), a = m(t);
29
- if (o !== s || u !== a)
30
- return i(n);
31
- if ((o || s) && (!e || !r))
32
- return i(n);
33
- if (e !== r || u !== a)
34
- return i(n);
35
- if (!e && !u)
36
- return i(n);
37
- const c = { value: i(n) };
38
- return C(c, t), c.value;
39
- }, P = (t) => t === void 0 || t !== null && typeof t == "object", K = (t, n, e) => !t || !n || t !== n.componentId || n.hasInitializedRef.current || n.initialDefaultValueRef.current === void 0 ? !1 : P(e), I = (t, n, e) => K(t, n, e) ? $(e, n?.initialDefaultValueRef.current) : e;
40
- function U(t) {
41
- const n = f(b), e = f(d), r = n?.store ?? null, o = t ?? e?.componentId, s = l(() => {
42
- const c = r && o ? r.getState().components[o]?.value : void 0;
43
- return I(o, e, c);
44
- }, [o, e, r]), u = l((c) => {
45
- !r || !o || r.getState().setComponentData(o, c);
46
- }, [o, r]), a = l(() => {
47
- !r || !o || r.getState().resetComponentData(o);
48
- }, [o, r]);
49
- return { getContainerData: s, setContainerData: u, resetContainerData: a };
50
- }
51
- function T(t) {
52
- const n = U(t), e = f(b), r = f(d), o = e?.store ?? null, s = t ?? r?.componentId;
53
- return {
54
- containerData: o ? I(
55
- s,
56
- r,
57
- O(o, (a) => s ? a.components[s]?.value : void 0)
58
- ) : void 0,
59
- ...n
60
- };
61
- }
62
- const Y = D(null), _ = "components", h = "value", w = (t, n) => `${_}.${t}.${h}.${n}`, q = ({
63
- relativePath: t,
64
- record: n,
65
- getRecord: e,
66
- index: r,
67
- registerField: o,
68
- unregisterField: s,
69
- children: u
70
- }) => {
71
- const a = f(d);
72
- if (!a?.componentId)
73
- throw new Error(
74
- "[cdp-material-sdk] DataScope 必须在数据容器组件内部使用,请确保上层提供 DataContainerRuntimeContext。"
75
- );
76
- const c = a.componentId, y = l(
77
- (v) => {
78
- const S = t ? t(v) : v;
79
- return w(c, S);
80
- },
81
- [c, t]
82
- ), A = j(n);
83
- A.current = n;
84
- const R = E(
85
- () => ({
86
- resolvePath: y,
87
- inScope: !0,
88
- getRecord: e ?? (() => A.current),
89
- index: r,
90
- registerField: o,
91
- unregisterField: s
92
- }),
93
- [y, e, r, o, s]
94
- );
95
- return /* @__PURE__ */ k(Y.Provider, { value: R, children: u });
96
- };
97
- export {
98
- d as D,
99
- b as P,
100
- q as a,
101
- Y as b,
102
- U as c,
103
- I as r,
104
- K as s,
105
- T as u
106
- };