cdp-material-sdk 0.0.5
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/LICENSE +21 -0
- package/README.md +67 -0
- package/dist/DataScope-B7ffH5qN.js +106 -0
- package/dist/components/core/types.d.ts +16 -0
- package/dist/components/data-scope/DataScope.d.ts +45 -0
- package/dist/constants/event.d.ts +22 -0
- package/dist/context/DataContainerRuntimeContext.d.ts +16 -0
- package/dist/context/DataScopeContext.d.ts +51 -0
- package/dist/context/PageContext.d.ts +26 -0
- package/dist/hooks/useConcurrentLoading.d.ts +16 -0
- package/dist/hooks/useDataContainer.d.ts +61 -0
- package/dist/hooks/useDualLoading.d.ts +22 -0
- package/dist/host-react.d.ts +15 -0
- package/dist/host-react.js +11 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +42 -0
- package/dist/plugin.d.ts +45 -0
- package/dist/portable.d.ts +20 -0
- package/dist/portable.js +33 -0
- package/dist/protocol/adapter.d.ts +50 -0
- package/dist/protocol/common-schemas.d.ts +64 -0
- package/dist/protocol/events.d.ts +48 -0
- package/dist/protocol/manifest-types.d.ts +10 -0
- package/dist/protocol/manifest.d.ts +144 -0
- package/dist/protocol/traits.d.ts +7 -0
- package/dist/types/category.d.ts +15 -0
- package/dist/utils/mergeInitialValue.d.ts +10 -0
- package/dist/validateManifest-CYqjvQe_.js +355 -0
- package/dist/validation/validateManifest.d.ts +59 -0
- package/docs/component-development/FAQ.md +203 -0
- package/docs/component-development/README.md +176 -0
- package/docs/component-development/getting-started/01-/345/210/233/345/273/272/346/210/226/346/216/245/345/205/245/347/273/204/344/273/266/345/272/223/345/267/245/347/250/213.md +172 -0
- package/docs/component-development/getting-started/02-/345/210/233/345/273/272/347/273/204/344/273/266/345/214/205/345/271/266/346/263/250/345/206/214.md +185 -0
- package/docs/component-development/getting-started/03-/345/274/200/345/217/221/346/234/200/345/260/217/345/217/257/350/277/220/350/241/214/347/273/204/344/273/266.md +196 -0
- package/docs/component-development/getting-started/04-/346/236/204/345/273/272/345/217/221/345/270/203/344/270/216/345/256/277/344/270/273/346/216/245/345/205/245.md +147 -0
- package/docs/component-development/getting-started/05-/350/207/252/346/243/200/344/270/216/346/216/222/351/224/231.md +186 -0
- package/docs/component-development/recipes//344/275/277/347/224/250Adapter/351/200/202/351/205/215/347/273/204/344/273/266API.md +131 -0
- package/docs/component-development/recipes//345/243/260/346/230/216/344/272/213/344/273/266.md +229 -0
- package/docs/component-development/recipes//345/243/260/346/230/216/345/212/250/344/275/234/344/270/216/347/212/266/346/200/201.md +188 -0
- package/docs/component-development/recipes//345/243/260/346/230/216/345/270/203/345/261/200/345/256/271/345/231/250/347/273/204/344/273/266.md +221 -0
- package/docs/component-development/recipes//345/243/260/346/230/216/346/217/222/346/247/275.md +141 -0
- package/docs/component-development/recipes//345/243/260/346/230/216/346/225/260/346/215/256/345/255/227/346/256/265/347/273/204/344/273/266.md +147 -0
- package/docs/component-development/recipes//345/243/260/346/230/216/346/225/260/346/215/256/345/256/271/345/231/250/347/273/204/344/273/266.md +258 -0
- package/docs/component-development/recipes//346/216/245/345/205/245/347/254/254/344/270/211/346/226/271React/347/273/204/344/273/266/345/272/223.md +209 -0
- package/docs/component-development/recipes//351/205/215/347/275/256DOM/346/240/271/350/212/202/347/202/271/346/263/250/345/205/245.md +222 -0
- package/docs/component-development/recipes//351/205/215/347/275/256Loading/347/255/226/347/225/245.md +198 -0
- package/docs/component-development/recipes//351/205/215/347/275/256/350/256/276/350/256/241/345/231/250/345/205/203/344/277/241/346/201/257.md +153 -0
- package/docs/component-development/reference/ActionsState/346/250/241/345/236/213.md +124 -0
- package/docs/component-development/reference/DOM/346/240/271/350/212/202/347/202/271/346/263/250/345/205/245/346/250/241/345/236/213.md +125 -0
- package/docs/component-development/reference/Events/346/250/241/345/236/213.md +170 -0
- package/docs/component-development/reference/Loading/347/255/226/347/225/245/346/250/241/345/236/213.md +140 -0
- package/docs/component-development/reference/Manifest/345/255/227/346/256/265/345/217/202/350/200/203.md +251 -0
- package/docs/component-development/reference/SDK/345/257/274/345/205/245/350/276/271/347/225/214.md +119 -0
- package/docs/component-development/reference/Slots/346/250/241/345/236/213.md +110 -0
- package/docs/component-development/reference/Traits/350/203/275/345/212/233/346/250/241/345/236/213.md +165 -0
- package/docs/component-development/reference/validateManifest/346/240/241/351/252/214/350/247/204/345/210/231.md +171 -0
- package/docs/component-development/reference//345/274/225/346/223/216/345/237/272/347/241/200/350/203/275/345/212/233/346/250/241/345/236/213.md +70 -0
- package/docs/component-development/reference//347/244/272/344/276/213/344/273/243/347/240/201/347/264/242/345/274/225.md +163 -0
- package/package.json +67 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: reference
|
|
3
|
+
capability: manifest
|
|
4
|
+
related:
|
|
5
|
+
- getting-started/03-开发最小可运行组件.md
|
|
6
|
+
- recipes/声明布局容器组件.md
|
|
7
|
+
- recipes/配置设计器元信息.md
|
|
8
|
+
- reference/validateManifest校验规则.md
|
|
9
|
+
- reference/示例代码索引.md
|
|
10
|
+
---
|
|
11
|
+
# Manifest 字段参考
|
|
12
|
+
|
|
13
|
+
`ComponentManifest` 是 CDP 组件的静态描述。组件作者通过它声明组件的身份、能力、配置项、事件、动作、状态和渲染策略。
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 顶层字段
|
|
18
|
+
|
|
19
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
20
|
+
|------|------|------|------|
|
|
21
|
+
| `type` | `string` | 是 | 组件唯一标识,建议带组织前缀 |
|
|
22
|
+
| `alias` | `string[]` | 否 | 历史别名或兼容名 |
|
|
23
|
+
| `meta` | `object` | 是 | 基本信息 |
|
|
24
|
+
| `traits` | `ComponentTrait[]` | 否 | 能力声明 |
|
|
25
|
+
| `props` | `ObjectSchema` | 否 | 可配置 props 的 JSON Schema |
|
|
26
|
+
| `events` | `EventSpec[]` | 否 | 标准事件声明 |
|
|
27
|
+
| `customEvents` | `Record<string, CustomEventSpec>` | 否 | 自定义事件声明 |
|
|
28
|
+
| `actions` | `Record<string, ActionSpec>` | 否 | 组件动作声明 |
|
|
29
|
+
| `state` | `Record<string, StateSpec>` | 否 | 运行时状态声明 |
|
|
30
|
+
| `slots` | `Record<string, SlotDefinition>` | 否 | 插槽声明 |
|
|
31
|
+
| `adapter` | `ComponentAdapter` | 否 | API 适配器 |
|
|
32
|
+
| `engine` | `EnginePolicies` | 否 | 宿主渲染策略 |
|
|
33
|
+
| `nesting` | `object` | 否 | 嵌套约束 |
|
|
34
|
+
| `usage` | `AIUsageSpec` | 否 | 面向 AI 的使用提示 |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## meta
|
|
39
|
+
|
|
40
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
41
|
+
|------|------|------|------|
|
|
42
|
+
| `title` | `string` | 是 | 组件显示名 |
|
|
43
|
+
| `category` | `ComponentCategory` | 是 | 组件分类 |
|
|
44
|
+
| `valueSchema` | `JSONSchema7` | 否 | 组件 value 类型描述 |
|
|
45
|
+
| `icon` | `string` | 否 | 图标 |
|
|
46
|
+
| `description` | `string` | 否 | 组件说明 |
|
|
47
|
+
| `hiddenInComponentList` | `boolean` | 否 | 是否在物料面板隐藏 |
|
|
48
|
+
| `subGroup` | `string` | 否 | 物料面板子分组 |
|
|
49
|
+
|
|
50
|
+
设计器相关字段(`icon` / `subGroup` / `hiddenInComponentList`)的选型与示例见 [配置设计器元信息](../recipes/配置设计器元信息.md)。
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## engine.render.injection
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
engine: {
|
|
58
|
+
render: {
|
|
59
|
+
injection: {
|
|
60
|
+
rootPath: INJECT_PATH_SLOT_PROPS,
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
| 字段 | 类型 | 说明 |
|
|
67
|
+
|------|------|------|
|
|
68
|
+
| `rootPath` | `string` | 宿主根节点属性注入位置 |
|
|
69
|
+
|
|
70
|
+
详见 [DOM 根节点注入模型](./DOM根节点注入模型.md)。
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## engine.render.loading
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
engine: {
|
|
78
|
+
render: {
|
|
79
|
+
loading: {
|
|
80
|
+
strategy: 'native',
|
|
81
|
+
propName: 'spinning',
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
| 字段 | 类型 | 说明 |
|
|
88
|
+
|------|------|------|
|
|
89
|
+
| `strategy` | `'native' \| 'wrapper' \| 'none'` | Loading 接管策略 |
|
|
90
|
+
| `propName` | `string` | `native` 模式下注入的 prop 名 |
|
|
91
|
+
| `wrapperType` | `'spin' \| 'skeleton' \| 'wave' \| string` | `wrapper` 模式的遮罩类型 |
|
|
92
|
+
| `wrapperProps` | `Record<string, any>` | 传给 wrapper 的额外参数 |
|
|
93
|
+
|
|
94
|
+
详见 [Loading 策略模型](./Loading策略模型.md)。
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## actions
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
actions: {
|
|
102
|
+
refresh: {
|
|
103
|
+
title: '刷新',
|
|
104
|
+
description: '重新加载数据',
|
|
105
|
+
params: { type: 'object' },
|
|
106
|
+
returns: { type: 'boolean' },
|
|
107
|
+
},
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
| 字段 | 必填 | 说明 |
|
|
112
|
+
|------|------|------|
|
|
113
|
+
| `title` | 是 | 动作显示名 |
|
|
114
|
+
| `description` | 否 | 动作说明 |
|
|
115
|
+
| `params` | 否 | 参数 JSON Schema,声明时 `type` 必须是 `object` |
|
|
116
|
+
| `returns` | 否 | 返回值 JSON Schema,建议声明 |
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## state
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
state: {
|
|
124
|
+
selectedRowKeys: {
|
|
125
|
+
title: '选中行',
|
|
126
|
+
schema: { type: 'array', items: { type: 'string' } },
|
|
127
|
+
},
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
| 字段 | 必填 | 说明 |
|
|
132
|
+
|------|------|------|
|
|
133
|
+
| `title` | 是 | 状态显示名 |
|
|
134
|
+
| `description` | 否 | 状态说明 |
|
|
135
|
+
| `schema` | 是 | 状态值 JSON Schema |
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## slots
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
slots: {
|
|
143
|
+
header: {
|
|
144
|
+
title: '头部',
|
|
145
|
+
description: '头部内容',
|
|
146
|
+
},
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
| 字段 | 说明 |
|
|
151
|
+
|------|------|
|
|
152
|
+
| `title` | 插槽显示名,必填 |
|
|
153
|
+
| `description` | 插槽说明 |
|
|
154
|
+
| `defaultEnabled` | 是否默认启用 |
|
|
155
|
+
| `allowedChildren` | 允许的子组件类型 |
|
|
156
|
+
| `scoped` | 是否作用域插槽 |
|
|
157
|
+
| `scopeDescription` | 作用域数据说明 |
|
|
158
|
+
| `dynamic` | 是否动态插槽 |
|
|
159
|
+
| `dynamicSource` | 动态插槽来源 props 路径 |
|
|
160
|
+
| `dynamicFilter` | 动态插槽过滤字段 |
|
|
161
|
+
| `dynamicKey` | 动态插槽 key 模板 |
|
|
162
|
+
| `dynamicTitle` | 动态插槽标题模板 |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## nesting
|
|
167
|
+
|
|
168
|
+
`nesting` 用于约束容器与子组件的嵌套关系。
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
nesting: {
|
|
172
|
+
allowedChildren: ['acme.TabPane'],
|
|
173
|
+
allowedParents: ['acme.Tabs'],
|
|
174
|
+
minChildren: 1,
|
|
175
|
+
maxChildren: 12,
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
| 字段 | 类型 | 说明 |
|
|
180
|
+
|------|------|------|
|
|
181
|
+
| `allowedChildren` | `string[]` | 允许放入的子组件 `type` 列表 |
|
|
182
|
+
| `allowedParents` | `string[]` | 限制本组件只能作为这些父组件的子节点 |
|
|
183
|
+
| `minChildren` | `number` | 最少子组件数量 |
|
|
184
|
+
| `maxChildren` | `number` | 最多子组件数量 |
|
|
185
|
+
|
|
186
|
+
`nesting` 约束面向默认 `children` 区域;具名插槽另有 `slots[*].allowedChildren` 独立约束。
|
|
187
|
+
|
|
188
|
+
任务步骤见 [声明布局容器组件](../recipes/声明布局容器组件.md)。
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## usage
|
|
193
|
+
|
|
194
|
+
`usage` 用于给 AI 或设计器提供额外提示,建议组件从最小实现开始就声明。
|
|
195
|
+
|
|
196
|
+
```ts
|
|
197
|
+
usage: {
|
|
198
|
+
tips: ['适合展示短文本'],
|
|
199
|
+
warnings: ['不建议用于长篇富文本'],
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
| 字段 | 类型 | 说明 |
|
|
204
|
+
|------|------|------|
|
|
205
|
+
| `tips` | `string[]` | 使用建议、适用场景等正向提示 |
|
|
206
|
+
| `warnings` | `string[]` | 不适用场景、常见误用提醒 |
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 最小示例
|
|
211
|
+
|
|
212
|
+
```ts
|
|
213
|
+
import {
|
|
214
|
+
COMPONENT_CATEGORY,
|
|
215
|
+
INJECT_PATH_SLOT_PROPS,
|
|
216
|
+
type ComponentManifest,
|
|
217
|
+
} from 'cdp-material-sdk/portable';
|
|
218
|
+
|
|
219
|
+
export const manifest = {
|
|
220
|
+
type: 'acme.Text',
|
|
221
|
+
meta: {
|
|
222
|
+
title: '文本',
|
|
223
|
+
category: COMPONENT_CATEGORY.GENERAL,
|
|
224
|
+
},
|
|
225
|
+
engine: {
|
|
226
|
+
render: {
|
|
227
|
+
injection: {
|
|
228
|
+
rootPath: INJECT_PATH_SLOT_PROPS,
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
props: {
|
|
233
|
+
type: 'object',
|
|
234
|
+
properties: {
|
|
235
|
+
text: { type: 'string', title: '文本内容' },
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
} satisfies ComponentManifest;
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## 任务路径
|
|
244
|
+
|
|
245
|
+
本文档只保留本层级职责内容:Recipe 提供任务步骤,Reference 提供稳定模型和规则,validateManifest 文档提供校验级别事实源。
|
|
246
|
+
|
|
247
|
+
- 关联文档:[03-开发最小可运行组件](../getting-started/03-开发最小可运行组件.md)
|
|
248
|
+
- 任务 Recipe:[声明布局容器组件](../recipes/声明布局容器组件.md)
|
|
249
|
+
- 任务 Recipe:[配置设计器元信息](../recipes/配置设计器元信息.md)
|
|
250
|
+
- 校验规则:[validateManifest校验规则](./validateManifest校验规则.md)
|
|
251
|
+
- 示例索引:[示例代码索引](./示例代码索引.md)
|
package/docs/component-development/reference/SDK/345/257/274/345/205/245/350/276/271/347/225/214.md
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: reference
|
|
3
|
+
capability: sdk-boundary
|
|
4
|
+
related:
|
|
5
|
+
- getting-started/01-创建或接入组件库工程.md
|
|
6
|
+
- recipes/接入第三方React组件库.md
|
|
7
|
+
- reference/示例代码索引.md
|
|
8
|
+
---
|
|
9
|
+
# SDK 导入边界
|
|
10
|
+
|
|
11
|
+
第三方组件作者应只依赖 `cdp-material-sdk` 的公开入口,不应导入宿主内部实现。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 推荐入口
|
|
16
|
+
|
|
17
|
+
### `cdp-material-sdk/portable`
|
|
18
|
+
|
|
19
|
+
默认入口,适合绝大多数组件作者。
|
|
20
|
+
|
|
21
|
+
可用于:
|
|
22
|
+
|
|
23
|
+
- `ComponentManifest`
|
|
24
|
+
- `EngineComponentPackage`
|
|
25
|
+
- `EngineComponentPlugin`
|
|
26
|
+
- `COMPONENT_TRAIT`
|
|
27
|
+
- `COMPONENT_CATEGORY`
|
|
28
|
+
- `INJECT_PATH_SLOT_PROPS`
|
|
29
|
+
- `BaseUIProps`
|
|
30
|
+
- `COMPONENT_STATE_KEY`
|
|
31
|
+
- `validateManifest()`
|
|
32
|
+
- `diagnoseMissingActionImpls()`
|
|
33
|
+
- `diagnoseMissingStateKeys()`
|
|
34
|
+
|
|
35
|
+
示例:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import {
|
|
39
|
+
COMPONENT_CATEGORY,
|
|
40
|
+
COMPONENT_TRAIT,
|
|
41
|
+
INJECT_PATH_SLOT_PROPS,
|
|
42
|
+
validateManifest,
|
|
43
|
+
type ComponentManifest,
|
|
44
|
+
type EngineComponentPlugin,
|
|
45
|
+
} from 'cdp-material-sdk/portable';
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
### `cdp-material-sdk/host-react`
|
|
51
|
+
|
|
52
|
+
宿主耦合入口,只有在确认组件包与宿主共享 React runtime 和 Context 身份时使用。
|
|
53
|
+
|
|
54
|
+
可用于:
|
|
55
|
+
|
|
56
|
+
- `DataScope`
|
|
57
|
+
- `useDataContainer`
|
|
58
|
+
- `useDataContainerApi`
|
|
59
|
+
- `PageContext`
|
|
60
|
+
|
|
61
|
+
如果不能确认共享 runtime,请不要使用该入口。
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 不建议依赖的对象
|
|
66
|
+
|
|
67
|
+
第三方作者不应导入:
|
|
68
|
+
|
|
69
|
+
- 宿主源码路径。
|
|
70
|
+
- 未从 `cdp-material-sdk/portable` 或 `cdp-material-sdk/host-react` 导出的对象。
|
|
71
|
+
- 组件加载、注册、运行时增强、页面状态管理等宿主内部模块。
|
|
72
|
+
|
|
73
|
+
这些对象属于宿主实现细节,不承诺作为第三方兼容契约。第三方组件包只应面向 SDK 公开入口编程。
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 依赖处理
|
|
78
|
+
|
|
79
|
+
| 依赖 | 建议 |
|
|
80
|
+
|------|------|
|
|
81
|
+
| `react` | peerDependency + externalize |
|
|
82
|
+
| `react-dom` | peerDependency + externalize |
|
|
83
|
+
| `react/jsx-runtime` | externalize |
|
|
84
|
+
| `cdp-material-sdk/portable` | 普通依赖 |
|
|
85
|
+
| `cdp-material-sdk/host-react` | 仅在确认共享 runtime 时使用 |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 安装
|
|
90
|
+
|
|
91
|
+
推荐从 npm 安装最新版:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npm install cdp-material-sdk@latest react react-dom
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
如需锁定到精确版本:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
npm install cdp-material-sdk@<version> react react-dom
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
无 npm 访问时,可回退到 GitHub Release `.tgz`:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npm install https://github.com/GroovyKetchup/cdp-material-sdk/releases/download/v<version>/cdp-material-sdk-<version>.tgz
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
`react` 与 `react-dom` 是 peer dependency,需要由组件作者侧显式安装(建议 19.x)。
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 任务路径
|
|
114
|
+
|
|
115
|
+
本文档只保留本层级职责内容:Recipe 提供任务步骤,Reference 提供稳定模型和规则,validateManifest 文档提供校验级别事实源。
|
|
116
|
+
|
|
117
|
+
- 关联文档:[01-创建或接入组件库工程](../getting-started/01-创建或接入组件库工程.md)
|
|
118
|
+
- 任务 Recipe:[接入第三方React组件库](../recipes/接入第三方React组件库.md)
|
|
119
|
+
- 示例索引:[示例代码索引](./示例代码索引.md)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: reference
|
|
3
|
+
capability: slots
|
|
4
|
+
related:
|
|
5
|
+
- recipes/声明插槽.md
|
|
6
|
+
- reference/validateManifest校验规则.md
|
|
7
|
+
- reference/Traits能力模型.md
|
|
8
|
+
---
|
|
9
|
+
# Slots 模型
|
|
10
|
+
|
|
11
|
+
Slots 描述组件可被填充的内容区域。插槽是可选能力,只有组件需要承载子内容时才声明。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 插槽类型
|
|
16
|
+
|
|
17
|
+
| 类型 | 适用场景 | 关键字段 |
|
|
18
|
+
|------|----------|----------|
|
|
19
|
+
| 命名插槽 | 固定区域,如 header、footer | `title` |
|
|
20
|
+
| 作用域插槽 | 子内容需要上下文,如当前行数据 | `scoped`、`scopeDescription` |
|
|
21
|
+
| 动态插槽 | 根据 props 数组生成多个插槽 | `dynamic`、`dynamicSource`、`dynamicKey` |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 命名插槽
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
slots: {
|
|
29
|
+
header: {
|
|
30
|
+
title: '头部',
|
|
31
|
+
},
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
组件消费:
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
const { _slots } = props;
|
|
39
|
+
return <header>{_slots?.header}</header>;
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 作用域插槽
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
slots: {
|
|
48
|
+
rowActions: {
|
|
49
|
+
title: '行操作',
|
|
50
|
+
scoped: true,
|
|
51
|
+
scopeDescription: '提供当前行 record 和 rowIndex',
|
|
52
|
+
},
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`scopeDescription` 能帮助设计器用户和 AI 理解可用上下文。
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 动态插槽
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
slots: {
|
|
64
|
+
columnSlot: {
|
|
65
|
+
title: '列模板',
|
|
66
|
+
dynamic: true,
|
|
67
|
+
dynamicSource: 'columns',
|
|
68
|
+
dynamicKey: 'col:{dataIndex}',
|
|
69
|
+
dynamicTitle: '列:{title}',
|
|
70
|
+
scoped: true,
|
|
71
|
+
scopeDescription: '提供当前行 record',
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
动态插槽必须声明 `dynamicSource` 和 `dynamicKey`。
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 模型约束摘要
|
|
81
|
+
|
|
82
|
+
| 约束 | 说明 |
|
|
83
|
+
|------|------|
|
|
84
|
+
| `title` | 每个 slot 都应有可读显示名 |
|
|
85
|
+
| `dynamicSource` / `dynamicKey` | 动态 slot 必须声明来源和稳定 key 模板 |
|
|
86
|
+
| `scopeDescription` | 作用域 slot 建议说明可用上下文 |
|
|
87
|
+
| `allowedChildren` | 用于限制可插入的子组件类型 |
|
|
88
|
+
|
|
89
|
+
具体 error / warning 级别见 [validateManifest 校验规则](./validateManifest校验规则.md)。
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 选择建议
|
|
94
|
+
|
|
95
|
+
| 场景 | 推荐 |
|
|
96
|
+
|------|------|
|
|
97
|
+
| 固定内容区域 | 命名插槽 |
|
|
98
|
+
| 表格行操作 | 作用域插槽 |
|
|
99
|
+
| 表格列模板 | 动态 + 作用域插槽 |
|
|
100
|
+
| 简单展示组件 | 不声明 slots |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 任务路径
|
|
105
|
+
|
|
106
|
+
本文档只保留本层级职责内容:Recipe 提供任务步骤,Reference 提供稳定模型和规则,validateManifest 文档提供校验级别事实源。
|
|
107
|
+
|
|
108
|
+
- 任务 Recipe:[声明插槽](../recipes/声明插槽.md)
|
|
109
|
+
- 校验规则:[validateManifest校验规则](./validateManifest校验规则.md)
|
|
110
|
+
- 模型参考:[Traits能力模型](./Traits能力模型.md)
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: reference
|
|
3
|
+
capability: traits
|
|
4
|
+
related:
|
|
5
|
+
- recipes/声明数据字段组件.md
|
|
6
|
+
- recipes/声明数据容器组件.md
|
|
7
|
+
- recipes/声明布局容器组件.md
|
|
8
|
+
- recipes/声明插槽.md
|
|
9
|
+
- reference/validateManifest校验规则.md
|
|
10
|
+
---
|
|
11
|
+
# Traits 能力模型
|
|
12
|
+
|
|
13
|
+
Traits 用于声明组件具备什么能力。它不是样式分类,而是宿主、设计器、表达式和 AI 工具理解组件角色的协议。
|
|
14
|
+
|
|
15
|
+
Traits 之间不互斥,一个组件可以同时声明多个 trait。例如 Form 同时是 `DATA_CONTAINER`(管理表单值)与 `LAYOUT_CONTAINER`(拖入字段子组件);ClickableCard 可以同时是 `LAYOUT_CONTAINER` 与 `INTERACTION_CLICKABLE`。
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Trait 总览
|
|
20
|
+
|
|
21
|
+
| Trait | 常量 | 适用组件 | 声明后含义 |
|
|
22
|
+
|-------|------|----------|------------|
|
|
23
|
+
| `Data.Field` | `COMPONENT_TRAIT.DATA_FIELD` | Input、Select、Switch、DatePicker | 组件是一个数据字段 |
|
|
24
|
+
| `Data.Container` | `COMPONENT_TRAIT.DATA_CONTAINER` | Form、Table、List、CardList | 组件管理一组数据作用域 |
|
|
25
|
+
| `Layout.Container` | `COMPONENT_TRAIT.LAYOUT_CONTAINER` | Card、Grid、Tabs、Collapse | 组件可以承载子组件或插槽内容 |
|
|
26
|
+
| `Interaction.Clickable` | `COMPONENT_TRAIT.INTERACTION_CLICKABLE` | Button、Link、ClickableCard | 组件具备点击交互语义 |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## DATA_FIELD
|
|
31
|
+
|
|
32
|
+
### 什么时候声明
|
|
33
|
+
|
|
34
|
+
组件有一个主要业务值,并通过 `value` / `onChange` 与宿主同步。
|
|
35
|
+
|
|
36
|
+
### 作者要做什么
|
|
37
|
+
|
|
38
|
+
- 声明 `COMPONENT_TRAIT.DATA_FIELD`。
|
|
39
|
+
- 声明 `meta.valueSchema`。
|
|
40
|
+
- 组件接收 `value`。
|
|
41
|
+
- 值变化时调用 `onChange(nextValue)`。
|
|
42
|
+
|
|
43
|
+
### 宿主可据此做什么
|
|
44
|
+
|
|
45
|
+
- 注入和回写字段值。
|
|
46
|
+
- 在数据容器内按字段名组织值。
|
|
47
|
+
- 让表达式、设计器和 AI 工具识别 value 类型。
|
|
48
|
+
- 基于 `valueSchema` 推断标准 value 状态。
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## DATA_CONTAINER
|
|
53
|
+
|
|
54
|
+
### 什么时候声明
|
|
55
|
+
|
|
56
|
+
组件自身管理子字段的数据空间,例如 Form 或 Table。
|
|
57
|
+
|
|
58
|
+
### 作者要做什么
|
|
59
|
+
|
|
60
|
+
- 声明 `COMPONENT_TRAIT.DATA_CONTAINER`。
|
|
61
|
+
- 声明 `meta.valueSchema` 描述容器数据结构。
|
|
62
|
+
- 在子组件渲染区域用 `DataScope`(从 `cdp-material-sdk/host-react` 导入)建立数据作用域;`DataScope` 不接受 `componentId` 入参,由引擎运行时自动装配。
|
|
63
|
+
- 如需读写容器数据,使用 `cdp-material-sdk/host-react` 中的 `useDataContainer` / `useDataContainerApi`。
|
|
64
|
+
|
|
65
|
+
### 宿主可据此做什么
|
|
66
|
+
|
|
67
|
+
- 为容器分配独立数据空间。
|
|
68
|
+
- 支持子字段写入容器 value。
|
|
69
|
+
- 让表达式和 AI 工具理解容器数据结构。
|
|
70
|
+
- 基于 `DataScope` 提供的作用域,在表达式、设计器、表单校验中准确定位子字段。
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## LAYOUT_CONTAINER
|
|
75
|
+
|
|
76
|
+
### 什么时候声明
|
|
77
|
+
|
|
78
|
+
组件可以承载子组件、插槽或模板内容。
|
|
79
|
+
|
|
80
|
+
### 作者要做什么
|
|
81
|
+
|
|
82
|
+
- 声明 `COMPONENT_TRAIT.LAYOUT_CONTAINER`。
|
|
83
|
+
- 在组件实现中渲染 `children`(单一区域)或对应 slot 内容(多具名区域)。
|
|
84
|
+
- 需要限制子组件类型、最少/最多数量、或能作为子节点的父组件时,声明 `nesting`。
|
|
85
|
+
- 详细任务步骤见 [声明布局容器组件](../recipes/声明布局容器组件.md)。
|
|
86
|
+
|
|
87
|
+
### 宿主可据此做什么
|
|
88
|
+
|
|
89
|
+
- 在设计器中允许拖入子组件。
|
|
90
|
+
- 根据 `nesting` 约束过滤可拖入的组件与数量。
|
|
91
|
+
- 识别组件的布局容器语义。
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## INTERACTION_CLICKABLE
|
|
96
|
+
|
|
97
|
+
### 什么时候声明
|
|
98
|
+
|
|
99
|
+
组件的核心行为是点击,例如 Button、Link、IconButton 或可点击卡片。
|
|
100
|
+
|
|
101
|
+
### 作者要做什么
|
|
102
|
+
|
|
103
|
+
- 声明 `COMPONENT_TRAIT.INTERACTION_CLICKABLE`。
|
|
104
|
+
- 如果需要触发编排,声明 `events: { click: { title: '点击' } }`。
|
|
105
|
+
- 组件实际触发点击时调用对应 `onClick`。
|
|
106
|
+
|
|
107
|
+
### 宿主可据此做什么
|
|
108
|
+
|
|
109
|
+
- 识别组件具备点击交互能力。
|
|
110
|
+
- 将点击能力展示给设计器、事件系统或 AI 工具。
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Traits 与 valueSchema
|
|
115
|
+
|
|
116
|
+
声明 `DATA_FIELD` 或 `DATA_CONTAINER` 时,建议同时声明 `meta.valueSchema`。
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
traits: [COMPONENT_TRAIT.DATA_FIELD],
|
|
120
|
+
meta: {
|
|
121
|
+
title: '输入框',
|
|
122
|
+
category: COMPONENT_CATEGORY.DATA_ENTRY,
|
|
123
|
+
valueSchema: { type: 'string', default: '' },
|
|
124
|
+
},
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
如果声明了数据 trait 但缺少 `valueSchema`,`validateManifest()` 会给出 warning。
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 选择表
|
|
132
|
+
|
|
133
|
+
| 组件场景 | 推荐 traits |
|
|
134
|
+
|----------|-------------|
|
|
135
|
+
| 输入框、选择器、开关 | `DATA_FIELD` |
|
|
136
|
+
| 表单 | `DATA_CONTAINER` + `LAYOUT_CONTAINER` |
|
|
137
|
+
| 表格、列表 | `DATA_CONTAINER`,按需加 `LAYOUT_CONTAINER` |
|
|
138
|
+
| 卡片、栅格、Tabs | `LAYOUT_CONTAINER` |
|
|
139
|
+
| 按钮、链接 | `INTERACTION_CLICKABLE` |
|
|
140
|
+
| 普通文本展示 | 可不声明 |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 模型边界
|
|
145
|
+
|
|
146
|
+
| 边界 | 说明 |
|
|
147
|
+
|------|------|
|
|
148
|
+
| `DATA_FIELD` | 仅用于有主要业务值且能回写的组件 |
|
|
149
|
+
| `DATA_CONTAINER` | 用于管理子字段数据作用域;必须在子组件渲染区域提供 `DataScope`。与 `LAYOUT_CONTAINER` 不互斥,Form 这类容器应同时声明 |
|
|
150
|
+
| `LAYOUT_CONTAINER` | 表示可承载子内容;有明确区域时建议同时声明 slots |
|
|
151
|
+
| `INTERACTION_CLICKABLE` | 表示具备点击语义;需要编排响应时再声明 click event |
|
|
152
|
+
|
|
153
|
+
数据 trait 与 `meta.valueSchema` 的校验级别见 [validateManifest 校验规则](./validateManifest校验规则.md)。
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 任务路径
|
|
158
|
+
|
|
159
|
+
本文档只保留本层级职责内容:Recipe 提供任务步骤,Reference 提供稳定模型和规则,validateManifest 文档提供校验级别事实源。
|
|
160
|
+
|
|
161
|
+
- 任务 Recipe:[声明数据字段组件](../recipes/声明数据字段组件.md)
|
|
162
|
+
- 任务 Recipe:[声明数据容器组件](../recipes/声明数据容器组件.md)
|
|
163
|
+
- 任务 Recipe:[声明布局容器组件](../recipes/声明布局容器组件.md)
|
|
164
|
+
- 任务 Recipe:[声明插槽](../recipes/声明插槽.md)
|
|
165
|
+
- 校验规则:[validateManifest校验规则](./validateManifest校验规则.md)
|