create-yss-spec 3.4.10 → 3.5.0
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/README.md +2 -2
- package/package.json +1 -1
- package/src/api/_sync-service.js +111 -18
- package/src/cli/args.js +1 -0
- package/src/cli/help.js +10 -1
- package/src/cli/index.js +3 -0
- package/src/cli/prompts.js +5 -1
- package/src/cli/router.js +2 -0
- package/src/commands/attach.js +12 -2
- package/src/commands/init.js +2 -0
- package/src/commands/skills.js +253 -0
- package/src/commands/sync.js +3 -0
- package/src/family-identity.js +1 -1
- package/src/template/asset-runtime.js +220 -0
- package/src/template/distribution-runtime.js +165 -0
- package/src/template/instance-runtime.js +76 -29
- package/src/template/ownership-policy.js +17 -1
- package/src/template/prune-planner.js +6 -1
- package/src/template/sync-planner.js +3 -0
- package/src/template/verification-runtime.js +56 -1
- package/src/validation/metadata.js +24 -1
- package/template/.agents/skills/.strategic-design-skills-manifest.json +1 -1
- package/template/.agents/skills/yss-cache/SKILL.md +6 -5
- package/template/.agents/skills/yss-cache/references/annotations.md +3 -1
- package/template/.agents/skills/yss-cache/references/architecture.md +4 -2
- package/template/.agents/skills/yss-cache/references/configuration.md +6 -3
- package/template/.agents/skills/yss-cache/references/jetcache.md +21 -0
- package/template/.agents/skills/yss-cache/references/redis-fallback.md +5 -3
- package/template/.agents/skills/yss-cache/references/verification.md +10 -4
- package/template/.agents/skills/yss-cache/scripts/verify-cache-component.sh +26 -20
- package/template/.agents/skills/yss-distributed-id/SKILL.md +14 -58
- package/template/.agents/skills/yss-distributed-id/agents/openai.yaml +2 -2
- package/template/.agents/skills/yss-distributed-id/references/README.md +11 -47
- package/template/.agents/skills/yss-mybatis/SKILL.md +14 -2
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +5 -4
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +8 -8
- package/template/.agents/skills/yss-prototype-stage/SKILL.md +2 -2
- package/template/.agents/skills/yss-repository/SKILL.md +1 -0
- package/template/.codex/skills/yss-cache/SKILL.md +6 -5
- package/template/.codex/skills/yss-cache/references/annotations.md +3 -1
- package/template/.codex/skills/yss-cache/references/architecture.md +4 -2
- package/template/.codex/skills/yss-cache/references/configuration.md +6 -3
- package/template/.codex/skills/yss-cache/references/jetcache.md +21 -0
- package/template/.codex/skills/yss-cache/references/redis-fallback.md +5 -3
- package/template/.codex/skills/yss-cache/references/verification.md +10 -4
- package/template/.codex/skills/yss-cache/scripts/verify-cache-component.sh +26 -20
- package/template/.codex/skills/yss-distributed-id/SKILL.md +14 -58
- package/template/.codex/skills/yss-distributed-id/agents/openai.yaml +2 -2
- package/template/.codex/skills/yss-distributed-id/references/README.md +11 -47
- package/template/.codex/skills/yss-mybatis/SKILL.md +14 -2
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +5 -4
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +8 -8
- package/template/.codex/skills/yss-prototype-stage/SKILL.md +2 -2
- package/template/.codex/skills/yss-repository/SKILL.md +1 -0
- package/template/.cursor/skills/yss-cache/SKILL.md +6 -5
- package/template/.cursor/skills/yss-cache/references/annotations.md +3 -1
- package/template/.cursor/skills/yss-cache/references/architecture.md +4 -2
- package/template/.cursor/skills/yss-cache/references/configuration.md +6 -3
- package/template/.cursor/skills/yss-cache/references/jetcache.md +21 -0
- package/template/.cursor/skills/yss-cache/references/redis-fallback.md +5 -3
- package/template/.cursor/skills/yss-cache/references/verification.md +10 -4
- package/template/.cursor/skills/yss-cache/scripts/verify-cache-component.sh +26 -20
- package/template/.cursor/skills/yss-distributed-id/SKILL.md +14 -58
- package/template/.cursor/skills/yss-distributed-id/agents/openai.yaml +2 -2
- package/template/.cursor/skills/yss-distributed-id/references/README.md +11 -47
- package/template/.cursor/skills/yss-mybatis/SKILL.md +14 -2
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +5 -4
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +8 -8
- package/template/.cursor/skills/yss-prototype-stage/SKILL.md +2 -2
- package/template/.cursor/skills/yss-repository/SKILL.md +1 -0
- package/template/.pi/skills/yss-cache/SKILL.md +6 -5
- package/template/.pi/skills/yss-cache/references/annotations.md +3 -1
- package/template/.pi/skills/yss-cache/references/architecture.md +4 -2
- package/template/.pi/skills/yss-cache/references/configuration.md +6 -3
- package/template/.pi/skills/yss-cache/references/jetcache.md +21 -0
- package/template/.pi/skills/yss-cache/references/redis-fallback.md +5 -3
- package/template/.pi/skills/yss-cache/references/verification.md +10 -4
- package/template/.pi/skills/yss-cache/scripts/verify-cache-component.sh +26 -20
- package/template/.pi/skills/yss-distributed-id/SKILL.md +14 -58
- package/template/.pi/skills/yss-distributed-id/agents/openai.yaml +2 -2
- package/template/.pi/skills/yss-distributed-id/references/README.md +11 -47
- package/template/.pi/skills/yss-mybatis/SKILL.md +14 -2
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +5 -4
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +8 -8
- package/template/.pi/skills/yss-prototype-stage/SKILL.md +2 -2
- package/template/.pi/skills/yss-repository/SKILL.md +1 -0
- package/template/README.md +2 -5
- package/template/docs/agents/skill-migrations.md +4 -0
- package/template/docs/agents/yss-skill-registry.yaml +7 -6
- package/template/docs/design/README.md +0 -1
- package/template/docs/design/design.md +2 -2
- package/template/docs/design/templates/interaction-spec-template.md +1 -1
- package/template/docs/engineering/evidence/aliyun-artifact-resolution.json +446 -0
- package/template/scripts/design-md +2 -0
- package/template/scripts/lib/design-md.mjs +230 -0
- package/template/scripts/lib/skill-registry.mjs +9 -2
- package/template/scripts/lib/skill-supply-chain.mjs +33 -14
- package/template/scripts/verify-project-instance +11 -10
- package/template/skills-lock.json +11 -26
- package/template.manifest.json +18 -3
- package/template.snapshot.json +5 -5
- package/template/.agents/skills/grill-me/SKILL.md +0 -7
- package/template/.agents/skills/grill-me/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-distributed-id/assets/AutoIdInterceptor.java +0 -246
- package/template/.agents/skills/yss-distributed-id/assets/EnableDistributedId.java +0 -25
- package/template/.agents/skills/yss-distributed-id/assets/LeafConf.java +0 -36
- package/template/.codex/skills/grill-me/SKILL.md +0 -7
- package/template/.codex/skills/grill-me/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-distributed-id/assets/AutoIdInterceptor.java +0 -246
- package/template/.codex/skills/yss-distributed-id/assets/EnableDistributedId.java +0 -25
- package/template/.codex/skills/yss-distributed-id/assets/LeafConf.java +0 -36
- package/template/.cursor/skills/grill-me/SKILL.md +0 -7
- package/template/.cursor/skills/grill-me/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-distributed-id/assets/AutoIdInterceptor.java +0 -246
- package/template/.cursor/skills/yss-distributed-id/assets/EnableDistributedId.java +0 -25
- package/template/.cursor/skills/yss-distributed-id/assets/LeafConf.java +0 -36
- package/template/.pi/skills/grill-me/SKILL.md +0 -7
- package/template/.pi/skills/grill-me/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-distributed-id/assets/AutoIdInterceptor.java +0 -246
- package/template/.pi/skills/yss-distributed-id/assets/EnableDistributedId.java +0 -25
- package/template/.pi/skills/yss-distributed-id/assets/LeafConf.java +0 -36
- package/template/docs/agents/yss-plugin-dependency-contract.md +0 -45
- package/template/docs/api/.gitkeep +0 -0
- package/template/docs/api/specs/.gitkeep +0 -0
- package/template/docs/architecture/.gitkeep +0 -0
- package/template/docs/design/facts/antdv-next/1.5.2/cli-help.txt +0 -38
- package/template/docs/design/facts/antdv-next/1.5.2/component-list.json +0 -434
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/info.json +0 -246
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/semantic.json +0 -40
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/token.json +0 -32
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/info.json +0 -190
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/semantic.json +0 -20
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/token.json +0 -256
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/info.json +0 -460
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/semantic.json +0 -70
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/token.json +0 -123
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/info.json +0 -646
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/semantic.json +0 -50
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/token.json +0 -130
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/info.json +0 -640
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/semantic.json +0 -70
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/token.json +0 -172
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/info.json +0 -1010
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/semantic.json +0 -70
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/token.json +0 -263
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/info.json +0 -321
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/semantic.json +0 -25
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/token.json +0 -25
- package/template/docs/design/facts/antdv-next/1.5.2/design-md.json +0 -3
- package/template/docs/design/facts/antdv-next/1.5.2/manifest.json +0 -215
- package/template/docs/design/facts/antdv-next/1.5.2/resolution-probe.json +0 -5
- package/template/docs/design/prototypes/.gitkeep +0 -1
- package/template/docs/implementation/.gitkeep +0 -1
- package/template/docs/plan/IDEATION.md +0 -96
- package/template/docs/process/PDCA-SCRUM.md +0 -10
- package/template/docs/process/harness-executive-blueprint.md +0 -10
- package/template/docs/releases/.gitkeep +0 -1
- package/template/docs/requirements/README.md +0 -85
- package/template/docs/requirements/tickets/.gitkeep +0 -1
- package/template/docs/templates/agent-brief-template.md +0 -46
- package/template/docs/templates/architecture-proposal-template.md +0 -18
- package/template/docs/templates/implementation-plan-template.md +0 -16
- package/template/docs/templates/implementation-routing-template.md +0 -350
- package/template/docs/templates/requirement-freeze-template.md +0 -63
- package/template/docs/templates/risk-register-template.md +0 -11
- package/template/docs/templates/user-story-template.md +0 -20
- package/template/docs/testing/README.md +0 -110
|
@@ -1,640 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Select",
|
|
3
|
-
"nameZh": "选择器",
|
|
4
|
-
"description": "A dropdown menu for displaying choices.",
|
|
5
|
-
"props": [
|
|
6
|
-
{
|
|
7
|
-
"name": "allowClear",
|
|
8
|
-
"type": "boolean \\| { clearIcon?: VueNode }",
|
|
9
|
-
"default": "false",
|
|
10
|
-
"description": "Show clear button",
|
|
11
|
-
"descriptionZh": "支持清除"
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
"name": "autoClearSearchValue",
|
|
15
|
-
"type": "boolean",
|
|
16
|
-
"default": "true",
|
|
17
|
-
"description": "Whether the current search will be cleared on selecting an item. Only applies when `mode` is set to `multiple` or `tags`",
|
|
18
|
-
"descriptionZh": "是否在选中项后清空搜索框,只在 `mode` 为 `multiple` 或 `tags` 时有效"
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"name": "classes",
|
|
22
|
-
"type": "Record<[SemanticDOM](#semantic-dom), string> \\| (info: { props }) => Record<[SemanticDOM](#semantic-dom), string>",
|
|
23
|
-
"default": "-",
|
|
24
|
-
"description": "Customize class for each semantic structure inside the component. Supports object or function",
|
|
25
|
-
"descriptionZh": "用于自定义组件内部各语义化结构的 class,支持对象或函数"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"name": "defaultActiveFirstOption",
|
|
29
|
-
"type": "boolean",
|
|
30
|
-
"default": "true",
|
|
31
|
-
"description": "Whether active first option by default",
|
|
32
|
-
"descriptionZh": "是否默认高亮第一个选项"
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"name": "disabled",
|
|
36
|
-
"type": "boolean",
|
|
37
|
-
"default": "false",
|
|
38
|
-
"description": "Whether disabled select",
|
|
39
|
-
"descriptionZh": "是否禁用"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"name": "dropdownClassName",
|
|
43
|
-
"type": "string",
|
|
44
|
-
"default": "-",
|
|
45
|
-
"description": "The className of dropdown menu, **Deprecated. Use `classes.popup.root` instead**",
|
|
46
|
-
"descriptionZh": "下拉菜单的 className 属性,**已废弃,请使用 `classes.popup.root` 替换**"
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"name": "dropdownMatchSelectWidth",
|
|
50
|
-
"type": "boolean \\| number",
|
|
51
|
-
"default": "-",
|
|
52
|
-
"description": "Determine whether the dropdown menu and the select input are the same width, **Deprecated. Use `popupMatchSelectWidth` instead**",
|
|
53
|
-
"descriptionZh": "下拉菜单和选择器同宽,**已废弃,请使用 `popupMatchSelectWidth` 替换**"
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
"name": "dropdownRender",
|
|
57
|
-
"type": "(originNode: VueNode) => VueNode",
|
|
58
|
-
"default": "-",
|
|
59
|
-
"description": "Customize dropdown content, **Deprecated. Use `popupRender` instead**",
|
|
60
|
-
"descriptionZh": "自定义下拉框内容,**已废弃,请使用 `popupRender` 替换**"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"name": "dropdownStyle",
|
|
64
|
-
"type": "CSSProperties",
|
|
65
|
-
"default": "-",
|
|
66
|
-
"description": "The style of dropdown menu, **Deprecated. Use `styles.popup.root` instead**",
|
|
67
|
-
"descriptionZh": "下拉菜单的 style 属性,**已废弃,请使用 `styles.popup.root` 替换**"
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
"name": "fieldNames",
|
|
71
|
-
"type": "object",
|
|
72
|
-
"default": "{ label: 'label', value: 'value', options: 'options', groupLabel: 'label' }",
|
|
73
|
-
"description": "Customize node label, value, options, groupLabel field name",
|
|
74
|
-
"descriptionZh": "自定义节点 label、value、options、groupLabel 的字段"
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"name": "filterOption",
|
|
78
|
-
"type": "boolean \\| (inputValue: string, option?: Option) => boolean",
|
|
79
|
-
"default": "true",
|
|
80
|
-
"description": "If true, filter options by input, if function, filter options against it. The function will receive two arguments, `inputValue` and `option`, if the function returns true, the option will be included in the filtered set; Otherwise, it will be excluded",
|
|
81
|
-
"descriptionZh": "是否根据输入项进行筛选。当其为一个函数时,会接收 `inputValue` `option` 两个参数,当 `option` 符合筛选条件时,应返回 true,反之则返回 false"
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
"name": "filterSort",
|
|
85
|
-
"type": "(optionA: Option, optionB: Option, info: { searchValue: string }) => number",
|
|
86
|
-
"default": "-",
|
|
87
|
-
"description": "Sort function for search options sorting, see Array.sort's compareFunction",
|
|
88
|
-
"descriptionZh": "搜索时对筛选结果项的排序函数, 类似[Array.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)里的 compareFunction"
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"name": "getPopupContainer",
|
|
92
|
-
"type": "(triggerNode: HTMLElement) => HTMLElement",
|
|
93
|
-
"default": "() => document.body",
|
|
94
|
-
"description": "Parent Node which the selector should be rendered to. Default to body. When position issues happen, try to modify it into scrollable content and position it relative",
|
|
95
|
-
"descriptionZh": "菜单渲染父节点。默认渲染到 body 上,如果你遇到菜单滚动定位问题,试试修改为滚动的区域,并相对其定位"
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
"name": "labelInValue",
|
|
99
|
-
"type": "boolean",
|
|
100
|
-
"default": "false",
|
|
101
|
-
"description": "Whether to embed label in value, turn the format of value from `string` to `{ value: string, label: VueNode }`",
|
|
102
|
-
"descriptionZh": "是否把每个选项的 label 包装到 value 中,会把 Select 的 value 类型从 `string` 变为 `{ value: string, label: VueNode }` 的格式"
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
"name": "listHeight",
|
|
106
|
-
"type": "number",
|
|
107
|
-
"default": "256",
|
|
108
|
-
"description": "Config popup height",
|
|
109
|
-
"descriptionZh": "设置弹窗滚动高度"
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
"name": "loading",
|
|
113
|
-
"type": "boolean",
|
|
114
|
-
"default": "false",
|
|
115
|
-
"description": "Indicate loading state",
|
|
116
|
-
"descriptionZh": "加载中状态"
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
"name": "maxCount",
|
|
120
|
-
"type": "number",
|
|
121
|
-
"default": "-",
|
|
122
|
-
"description": "The max number of items can be selected, only applies when `mode` is `multiple` or `tags`",
|
|
123
|
-
"descriptionZh": "最多可选择的项目数,仅在 `mode` 为 `multiple` 或 `tags` 时生效"
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
"name": "maxTagCount",
|
|
127
|
-
"type": "number \\| 'responsive'",
|
|
128
|
-
"default": "-",
|
|
129
|
-
"description": "Max tag count to show. `responsive` will cost render performance",
|
|
130
|
-
"descriptionZh": "最多显示多少个 tag,`responsive` 会根据宽度自适应"
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
"name": "maxTagPlaceholder",
|
|
134
|
-
"type": "VueNode \\| (omittedValues: LabeledValue[]) => VueNode",
|
|
135
|
-
"default": "-",
|
|
136
|
-
"description": "Placeholder for not showing tags",
|
|
137
|
-
"descriptionZh": "隐藏 tag 时显示的内容"
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
"name": "maxTagTextLength",
|
|
141
|
-
"type": "number",
|
|
142
|
-
"default": "-",
|
|
143
|
-
"description": "Max tag text length to show",
|
|
144
|
-
"descriptionZh": "最大显示的 tag 文本长度"
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
"name": "menuItemSelectedIcon",
|
|
148
|
-
"type": "VueNode",
|
|
149
|
-
"default": "-",
|
|
150
|
-
"description": "The custom menuItemSelected icon with multiple options",
|
|
151
|
-
"descriptionZh": "自定义多选时当前选中的条目图标"
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
"name": "mode",
|
|
155
|
-
"type": "'multiple' \\| 'tags'",
|
|
156
|
-
"default": "-",
|
|
157
|
-
"description": "Set mode of Select",
|
|
158
|
-
"descriptionZh": "设置 Select 的模式为多选或标签"
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
"name": "notFoundContent",
|
|
162
|
-
"type": "VueNode",
|
|
163
|
-
"default": "`No data`",
|
|
164
|
-
"description": "Specify content to show when no result matches",
|
|
165
|
-
"descriptionZh": "当下拉列表为空时显示的内容"
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
"name": "open",
|
|
169
|
-
"type": "boolean",
|
|
170
|
-
"default": "-",
|
|
171
|
-
"description": "Controlled open state of dropdown",
|
|
172
|
-
"descriptionZh": "是否展开下拉菜单"
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
"name": "optionFilterProp",
|
|
176
|
-
"type": "string \\| string[]",
|
|
177
|
-
"default": "value",
|
|
178
|
-
"description": "Which prop value of option will be used for filter if filterOption is true. If options is set, it should be set to label. When a string[] is provided, multiple fields are searched using OR matching",
|
|
179
|
-
"descriptionZh": "搜索时过滤对应的 `option` 属性,如设置为 `children` 表示对内置 `option` 的 `children` 进行搜索。若通过 `options` 属性配置选项内容,建议设置 `optionFilterProp=\"label\"` 来对内容进行搜索。当为字符串数组时,会使用 OR 匹配多个字段"
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
"name": "options",
|
|
183
|
-
"type": "{ label: VueNode; value: string }[]",
|
|
184
|
-
"default": "-",
|
|
185
|
-
"description": "Select options. Will get better perf than jsx definition",
|
|
186
|
-
"descriptionZh": "数据化配置选项内容,相比 jsx 定义会获得更好的渲染性能"
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
"name": "optionRender",
|
|
190
|
-
"type": "(option: FlattenOptionData<BaseOptionType>, info: { index: number }) => VueNode",
|
|
191
|
-
"default": "-",
|
|
192
|
-
"description": "Customize the rendering dropdown options",
|
|
193
|
-
"descriptionZh": "自定义渲染下拉选项"
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
"name": "placeholder",
|
|
197
|
-
"type": "VNode",
|
|
198
|
-
"default": "-",
|
|
199
|
-
"description": "The placeholder of select",
|
|
200
|
-
"descriptionZh": "选择框默认文本"
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
"name": "placement",
|
|
204
|
-
"type": "`bottomLeft` `bottomRight` `topLeft` `topRight`",
|
|
205
|
-
"default": "bottomLeft",
|
|
206
|
-
"description": "The position where the selection box pops up",
|
|
207
|
-
"descriptionZh": "选择框弹出的位置"
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
"name": "popupClassName",
|
|
211
|
-
"type": "string",
|
|
212
|
-
"default": "-",
|
|
213
|
-
"description": "The className of dropdown menu, use `classes.popup.root` instead",
|
|
214
|
-
"descriptionZh": "下拉菜单的 className 属性,使用 `classes.popup.root` 替换"
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
"name": "popupMatchSelectWidth",
|
|
218
|
-
"type": "boolean \\| number",
|
|
219
|
-
"default": "true",
|
|
220
|
-
"description": "Determine whether the dropdown menu and the select input are the same width. Default set `min-width` same as input. Will ignore when value less than select width. `false` will disable virtual scroll",
|
|
221
|
-
"descriptionZh": "下拉菜单和选择器同宽。默认将设置 `min-width`,当值小于选择框宽度时会被忽略。`false` 时会关闭虚拟滚动"
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
"name": "popupRender",
|
|
225
|
-
"type": "(originNode: VueNode) => VueNode",
|
|
226
|
-
"default": "-",
|
|
227
|
-
"description": "Customize dropdown content",
|
|
228
|
-
"descriptionZh": "自定义下拉框内容"
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
"name": "prefix",
|
|
232
|
-
"type": "VueNode",
|
|
233
|
-
"default": "-",
|
|
234
|
-
"description": "The custom prefix",
|
|
235
|
-
"descriptionZh": "自定义前缀"
|
|
236
|
-
},
|
|
237
|
-
{
|
|
238
|
-
"name": "removeIcon",
|
|
239
|
-
"type": "VueNode",
|
|
240
|
-
"default": "-",
|
|
241
|
-
"description": "The custom remove icon",
|
|
242
|
-
"descriptionZh": "自定义的多选框清除图标"
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
"name": "searchValue",
|
|
246
|
-
"type": "string",
|
|
247
|
-
"default": "-",
|
|
248
|
-
"description": "The current input \"search\" text",
|
|
249
|
-
"descriptionZh": "控制搜索文本"
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
"name": "showSearch",
|
|
253
|
-
"type": "boolean \\| Object",
|
|
254
|
-
"default": "single: false, multiple: true",
|
|
255
|
-
"description": "Whether select is searchable",
|
|
256
|
-
"descriptionZh": "配置是否可搜索"
|
|
257
|
-
},
|
|
258
|
-
{
|
|
259
|
-
"name": "size",
|
|
260
|
-
"type": "`large` \\| `middle` \\| `small`",
|
|
261
|
-
"default": "-",
|
|
262
|
-
"description": "Size of Select input",
|
|
263
|
-
"descriptionZh": "选择框大小"
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
"name": "status",
|
|
267
|
-
"type": "'error' \\| 'warning'",
|
|
268
|
-
"default": "-",
|
|
269
|
-
"description": "Set validation status",
|
|
270
|
-
"descriptionZh": "设置校验状态"
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
"name": "styles",
|
|
274
|
-
"type": "Record<[SemanticDOM](#semantic-dom), CSSProperties> \\| (info: { props }) => Record<[SemanticDOM](#semantic-dom), CSSProperties>",
|
|
275
|
-
"default": "-",
|
|
276
|
-
"description": "Customize inline style for each semantic structure inside the component. Supports object or function",
|
|
277
|
-
"descriptionZh": "用于自定义组件内部各语义化结构的行内 style,支持对象或函数"
|
|
278
|
-
},
|
|
279
|
-
{
|
|
280
|
-
"name": "suffixIcon",
|
|
281
|
-
"type": "VueNode",
|
|
282
|
-
"default": "`<DownOutlined />`",
|
|
283
|
-
"description": "The custom suffix icon. Customize icon will not response click open to avoid icon designed to do other interactive. You can use `pointer-events: none` style to bypass",
|
|
284
|
-
"descriptionZh": "自定义的选择框后缀图标。以防止图标被用于其他交互,替换的图标默认不会响应展开、收缩事件,可以通过添加 `pointer-events: none` 样式透传"
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"name": "tagRender",
|
|
288
|
-
"type": "(props) => VueNode",
|
|
289
|
-
"default": "-",
|
|
290
|
-
"description": "Customize tag render, only applies when `mode` is set to `multiple` or `tags`",
|
|
291
|
-
"descriptionZh": "自定义 tag 内容 render,仅在 `mode` 为 `multiple` 或 `tags` 时生效"
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
"name": "labelRender",
|
|
295
|
-
"type": "(props: LabelInValueType) => VueNode",
|
|
296
|
-
"default": "-",
|
|
297
|
-
"description": "Customize selected label render",
|
|
298
|
-
"descriptionZh": "自定义当前选中的 label 内容 render"
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
"name": "tokenSeparators",
|
|
302
|
-
"type": "string[]",
|
|
303
|
-
"default": "-",
|
|
304
|
-
"description": "Separator used to tokenize, only applies when `mode=\"tags\"`",
|
|
305
|
-
"descriptionZh": "自动分词的分隔符,仅在 `mode=\"tags\"` 时生效"
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
"name": "value",
|
|
309
|
-
"type": "string \\| string[] \\| number \\| number[]",
|
|
310
|
-
"default": "-",
|
|
311
|
-
"description": "Current selected option (considered as a immutable array), support `v-model:value`",
|
|
312
|
-
"descriptionZh": "指定当前选中的条目,多选时为数组,支持 `v-model:value`"
|
|
313
|
-
},
|
|
314
|
-
{
|
|
315
|
-
"name": "variant",
|
|
316
|
-
"type": "`outlined` \\| `borderless` \\| `filled` \\| `underlined`",
|
|
317
|
-
"default": "`outlined`",
|
|
318
|
-
"description": "Variants of selector",
|
|
319
|
-
"descriptionZh": "形态变体"
|
|
320
|
-
},
|
|
321
|
-
{
|
|
322
|
-
"name": "virtual",
|
|
323
|
-
"type": "boolean",
|
|
324
|
-
"default": "true",
|
|
325
|
-
"description": "Disable virtual scroll when set to false",
|
|
326
|
-
"descriptionZh": "设置 false 时关闭虚拟滚动"
|
|
327
|
-
}
|
|
328
|
-
],
|
|
329
|
-
"events": [
|
|
330
|
-
{
|
|
331
|
-
"name": "active",
|
|
332
|
-
"type": "(value: string \\| number) => void",
|
|
333
|
-
"default": "",
|
|
334
|
-
"description": "Called when keyboard or mouse interaction occurs",
|
|
335
|
-
"descriptionZh": "键盘和鼠标交互时触发"
|
|
336
|
-
},
|
|
337
|
-
{
|
|
338
|
-
"name": "blur",
|
|
339
|
-
"type": "(event: FocusEvent) => void",
|
|
340
|
-
"default": "",
|
|
341
|
-
"description": "Called when blur",
|
|
342
|
-
"descriptionZh": "失去焦点时回调"
|
|
343
|
-
},
|
|
344
|
-
{
|
|
345
|
-
"name": "change",
|
|
346
|
-
"type": "(value, option: Option \\| Array<Option>) => void",
|
|
347
|
-
"default": "",
|
|
348
|
-
"description": "Called when select an option or input value change",
|
|
349
|
-
"descriptionZh": "选中 option,或 input 的 value 变化时,调用此函数"
|
|
350
|
-
},
|
|
351
|
-
{
|
|
352
|
-
"name": "clear",
|
|
353
|
-
"type": "() => void",
|
|
354
|
-
"default": "",
|
|
355
|
-
"description": "Called when clear",
|
|
356
|
-
"descriptionZh": "清除内容时回调"
|
|
357
|
-
},
|
|
358
|
-
{
|
|
359
|
-
"name": "deselect",
|
|
360
|
-
"type": "(value: string \\| number) => void",
|
|
361
|
-
"default": "",
|
|
362
|
-
"description": "Called when an option is deselected, param is the selected option's value. Only called for `multiple` or `tags`, effective in multiple or tags mode only",
|
|
363
|
-
"descriptionZh": "取消选中时调用,参数为选中项的 value (或 key) 值,仅在 `multiple` 或 `tags` 模式下生效"
|
|
364
|
-
},
|
|
365
|
-
{
|
|
366
|
-
"name": "dropdownVisibleChange",
|
|
367
|
-
"type": "(open: boolean) => void",
|
|
368
|
-
"default": "",
|
|
369
|
-
"description": "Called when dropdown open, **Deprecated. Use `openChange` instead**",
|
|
370
|
-
"descriptionZh": "展开下拉菜单的回调,**已废弃,请使用 `openChange` 替换**"
|
|
371
|
-
},
|
|
372
|
-
{
|
|
373
|
-
"name": "focus",
|
|
374
|
-
"type": "(event: FocusEvent) => void",
|
|
375
|
-
"default": "",
|
|
376
|
-
"description": "Called when focus",
|
|
377
|
-
"descriptionZh": "获得焦点时回调"
|
|
378
|
-
},
|
|
379
|
-
{
|
|
380
|
-
"name": "inputKeydown",
|
|
381
|
-
"type": "(event: KeyboardEvent) => void",
|
|
382
|
-
"default": "",
|
|
383
|
-
"description": "Called when key pressed",
|
|
384
|
-
"descriptionZh": "按键按下时回调"
|
|
385
|
-
},
|
|
386
|
-
{
|
|
387
|
-
"name": "openChange",
|
|
388
|
-
"type": "(open: boolean) => void",
|
|
389
|
-
"default": "",
|
|
390
|
-
"description": "Called when dropdown open",
|
|
391
|
-
"descriptionZh": "下拉框展开或收起时回调"
|
|
392
|
-
},
|
|
393
|
-
{
|
|
394
|
-
"name": "popupScroll",
|
|
395
|
-
"type": "(event: UIEvent) => void",
|
|
396
|
-
"default": "",
|
|
397
|
-
"description": "Called when dropdown scrolls",
|
|
398
|
-
"descriptionZh": "下拉列表滚动时的回调"
|
|
399
|
-
},
|
|
400
|
-
{
|
|
401
|
-
"name": "search",
|
|
402
|
-
"type": "(value: string) => void",
|
|
403
|
-
"default": "",
|
|
404
|
-
"description": "Callback function that is fired when input changed",
|
|
405
|
-
"descriptionZh": "文本框值变化时回调"
|
|
406
|
-
},
|
|
407
|
-
{
|
|
408
|
-
"name": "select",
|
|
409
|
-
"type": "(value: string \\| number, option: Option) => void",
|
|
410
|
-
"default": "",
|
|
411
|
-
"description": "Called when an option is selected, the params are option's value (or key) and option instance",
|
|
412
|
-
"descriptionZh": "被选中时调用,参数为选中项的 value (或 key) 值"
|
|
413
|
-
}
|
|
414
|
-
],
|
|
415
|
-
"slots": [
|
|
416
|
-
{
|
|
417
|
-
"name": "labelRender",
|
|
418
|
-
"type": "(props: LabelInValueType) => VueNode",
|
|
419
|
-
"default": "",
|
|
420
|
-
"description": "Customize selected label render",
|
|
421
|
-
"descriptionZh": "自定义当前选中的 label 内容 render"
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
"name": "maxTagPlaceholder",
|
|
425
|
-
"type": "(omittedValues: LabeledValue[]) => VueNode",
|
|
426
|
-
"default": "",
|
|
427
|
-
"description": "Placeholder for not showing tags",
|
|
428
|
-
"descriptionZh": "隐藏 tag 时显示的内容"
|
|
429
|
-
},
|
|
430
|
-
{
|
|
431
|
-
"name": "menuItemSelectedIcon",
|
|
432
|
-
"type": "VueNode",
|
|
433
|
-
"default": "",
|
|
434
|
-
"description": "The custom menuItemSelected icon with multiple options",
|
|
435
|
-
"descriptionZh": "自定义多选时当前选中的条目图标"
|
|
436
|
-
},
|
|
437
|
-
{
|
|
438
|
-
"name": "notFoundContent",
|
|
439
|
-
"type": "VueNode",
|
|
440
|
-
"default": "",
|
|
441
|
-
"description": "Specify content to show when no result matches",
|
|
442
|
-
"descriptionZh": "当下拉列表为空时显示的内容"
|
|
443
|
-
},
|
|
444
|
-
{
|
|
445
|
-
"name": "optionRender",
|
|
446
|
-
"type": "(option: FlattenOptionData<BaseOptionType>, info: { index: number }) => VueNode",
|
|
447
|
-
"default": "",
|
|
448
|
-
"description": "Customize the rendering dropdown options",
|
|
449
|
-
"descriptionZh": "自定义渲染下拉选项"
|
|
450
|
-
},
|
|
451
|
-
{
|
|
452
|
-
"name": "popupRender",
|
|
453
|
-
"type": "(originNode: VueNode) => VueNode",
|
|
454
|
-
"default": "",
|
|
455
|
-
"description": "Customize dropdown content",
|
|
456
|
-
"descriptionZh": "自定义下拉框内容"
|
|
457
|
-
},
|
|
458
|
-
{
|
|
459
|
-
"name": "prefix",
|
|
460
|
-
"type": "VueNode",
|
|
461
|
-
"default": "",
|
|
462
|
-
"description": "The custom prefix",
|
|
463
|
-
"descriptionZh": "自定义前缀"
|
|
464
|
-
},
|
|
465
|
-
{
|
|
466
|
-
"name": "removeIcon",
|
|
467
|
-
"type": "VueNode",
|
|
468
|
-
"default": "",
|
|
469
|
-
"description": "The custom remove icon",
|
|
470
|
-
"descriptionZh": "自定义的多选框清除图标"
|
|
471
|
-
},
|
|
472
|
-
{
|
|
473
|
-
"name": "suffixIcon",
|
|
474
|
-
"type": "VueNode",
|
|
475
|
-
"default": "",
|
|
476
|
-
"description": "The custom suffix icon. Customize icon will not response click open to avoid icon designed to do other interactive. You can use `pointer-events: none` style to bypass",
|
|
477
|
-
"descriptionZh": "自定义的选择框后缀图标。以防止图标被用于其他交互,替换的图标默认不会响应展开、收缩事件,可以通过添加 `pointer-events: none` 样式透传"
|
|
478
|
-
},
|
|
479
|
-
{
|
|
480
|
-
"name": "tagRender",
|
|
481
|
-
"type": "(props) => VueNode",
|
|
482
|
-
"default": "",
|
|
483
|
-
"description": "Customize tag render, only applies when `mode` is set to `multiple` or `tags`",
|
|
484
|
-
"descriptionZh": "自定义 tag 内容 render,仅在 `mode` 为 `multiple` 或 `tags` 时生效"
|
|
485
|
-
}
|
|
486
|
-
],
|
|
487
|
-
"methods": [
|
|
488
|
-
{
|
|
489
|
-
"name": "blur()",
|
|
490
|
-
"type": "",
|
|
491
|
-
"default": "",
|
|
492
|
-
"description": "Remove focus",
|
|
493
|
-
"descriptionZh": "取消焦点"
|
|
494
|
-
},
|
|
495
|
-
{
|
|
496
|
-
"name": "focus()",
|
|
497
|
-
"type": "",
|
|
498
|
-
"default": "",
|
|
499
|
-
"description": "Get focus",
|
|
500
|
-
"descriptionZh": "获取焦点"
|
|
501
|
-
}
|
|
502
|
-
],
|
|
503
|
-
"subComponentProps": {
|
|
504
|
-
"showSearch": {
|
|
505
|
-
"properties": [
|
|
506
|
-
{
|
|
507
|
-
"name": "autoClearSearchValue",
|
|
508
|
-
"type": "boolean",
|
|
509
|
-
"default": "true",
|
|
510
|
-
"description": "Whether the current search will be cleared on selecting an item. Only applies when `mode` is set to `multiple` or `tags`",
|
|
511
|
-
"descriptionZh": "是否在选中项后清空搜索框,只在 `mode` 为 `multiple` 或 `tags` 时有效"
|
|
512
|
-
},
|
|
513
|
-
{
|
|
514
|
-
"name": "filterOption",
|
|
515
|
-
"type": "boolean \\| (inputValue: string, option?: Option) => boolean",
|
|
516
|
-
"default": "true",
|
|
517
|
-
"description": "If true, filter options by input, if function, filter options against it. The function will receive two arguments, `inputValue` and `option`, if the function returns true, the option will be included in the filtered set; Otherwise, it will be excluded",
|
|
518
|
-
"descriptionZh": "是否根据输入项进行筛选。当其为一个函数时,会接收 `inputValue` `option` 两个参数,当 `option` 符合筛选条件时,应返回 true,反之则返回 false"
|
|
519
|
-
},
|
|
520
|
-
{
|
|
521
|
-
"name": "filterSort",
|
|
522
|
-
"type": "(optionA: Option, optionB: Option, info: { searchValue: string }) => number",
|
|
523
|
-
"default": "-",
|
|
524
|
-
"description": "Sort function for search options sorting, see Array.sort's compareFunction",
|
|
525
|
-
"descriptionZh": "搜索时对筛选结果项的排序函数"
|
|
526
|
-
},
|
|
527
|
-
{
|
|
528
|
-
"name": "optionFilterProp",
|
|
529
|
-
"type": "string \\| string[]",
|
|
530
|
-
"default": "value",
|
|
531
|
-
"description": "Which prop value of option will be used for filter if filterOption is true. If options is set, it should be set to label. When a string[] is provided, multiple fields are searched using OR matching",
|
|
532
|
-
"descriptionZh": "搜索时过滤对应的 `option` 属性,如设置为 `children` 表示对内置 `option` 的 `children` 进行搜索。若通过 `options` 属性配置选项内容,建议设置 `optionFilterProp=\"label\"` 来对内容进行搜索。当为字符串数组时,会使用 OR 匹配多个字段"
|
|
533
|
-
},
|
|
534
|
-
{
|
|
535
|
-
"name": "searchValue",
|
|
536
|
-
"type": "string",
|
|
537
|
-
"default": "-",
|
|
538
|
-
"description": "The current input \"search\" text",
|
|
539
|
-
"descriptionZh": "控制搜索文本"
|
|
540
|
-
},
|
|
541
|
-
{
|
|
542
|
-
"name": "onSearch",
|
|
543
|
-
"type": "(value: string) => void",
|
|
544
|
-
"default": "-",
|
|
545
|
-
"description": "Callback function that is fired when input changed",
|
|
546
|
-
"descriptionZh": "文本框值变化时回调"
|
|
547
|
-
}
|
|
548
|
-
],
|
|
549
|
-
"events": [],
|
|
550
|
-
"slots": [],
|
|
551
|
-
"methods": []
|
|
552
|
-
},
|
|
553
|
-
"Optionprops": {
|
|
554
|
-
"properties": [
|
|
555
|
-
{
|
|
556
|
-
"name": "disabled",
|
|
557
|
-
"type": "boolean",
|
|
558
|
-
"default": "false",
|
|
559
|
-
"description": "Disable this option",
|
|
560
|
-
"descriptionZh": "是否禁用"
|
|
561
|
-
},
|
|
562
|
-
{
|
|
563
|
-
"name": "title",
|
|
564
|
-
"type": "string",
|
|
565
|
-
"default": "-",
|
|
566
|
-
"description": "title attribute of Select Option",
|
|
567
|
-
"descriptionZh": "选中该 Option 后,Select 的 title"
|
|
568
|
-
},
|
|
569
|
-
{
|
|
570
|
-
"name": "value",
|
|
571
|
-
"type": "string \\| number",
|
|
572
|
-
"default": "-",
|
|
573
|
-
"description": "Default to filter with this property",
|
|
574
|
-
"descriptionZh": "默认根据此属性值进行筛选"
|
|
575
|
-
}
|
|
576
|
-
],
|
|
577
|
-
"events": [],
|
|
578
|
-
"slots": [],
|
|
579
|
-
"methods": []
|
|
580
|
-
},
|
|
581
|
-
"OptGroupprops": {
|
|
582
|
-
"properties": [
|
|
583
|
-
{
|
|
584
|
-
"name": "key",
|
|
585
|
-
"type": "string",
|
|
586
|
-
"default": "-",
|
|
587
|
-
"description": "Group key",
|
|
588
|
-
"descriptionZh": "分组的 key"
|
|
589
|
-
},
|
|
590
|
-
{
|
|
591
|
-
"name": "label",
|
|
592
|
-
"type": "string \\| VueNode",
|
|
593
|
-
"default": "-",
|
|
594
|
-
"description": "Group label",
|
|
595
|
-
"descriptionZh": "分组名"
|
|
596
|
-
},
|
|
597
|
-
{
|
|
598
|
-
"name": "title",
|
|
599
|
-
"type": "string",
|
|
600
|
-
"default": "-",
|
|
601
|
-
"description": "title attribute of Select Option",
|
|
602
|
-
"descriptionZh": "title 属性"
|
|
603
|
-
}
|
|
604
|
-
],
|
|
605
|
-
"events": [],
|
|
606
|
-
"slots": [],
|
|
607
|
-
"methods": []
|
|
608
|
-
}
|
|
609
|
-
},
|
|
610
|
-
"commonProps": [
|
|
611
|
-
{
|
|
612
|
-
"name": "style",
|
|
613
|
-
"type": "CSSProperties",
|
|
614
|
-
"default": "-",
|
|
615
|
-
"description": "The additional style",
|
|
616
|
-
"descriptionZh": "自定义样式"
|
|
617
|
-
},
|
|
618
|
-
{
|
|
619
|
-
"name": "class",
|
|
620
|
-
"type": "string",
|
|
621
|
-
"default": "-",
|
|
622
|
-
"description": "The additional css class",
|
|
623
|
-
"descriptionZh": "自定义类名"
|
|
624
|
-
},
|
|
625
|
-
{
|
|
626
|
-
"name": "rootClass",
|
|
627
|
-
"type": "string",
|
|
628
|
-
"default": "-",
|
|
629
|
-
"description": "ClassName on the root element",
|
|
630
|
-
"descriptionZh": "添加在组件最外层的 className"
|
|
631
|
-
},
|
|
632
|
-
{
|
|
633
|
-
"name": "autoFocus",
|
|
634
|
-
"type": "boolean",
|
|
635
|
-
"default": "false",
|
|
636
|
-
"description": "Auto focus when component mounted, only effective for focusable elements like forms, links, etc.",
|
|
637
|
-
"descriptionZh": "自动获取焦点,仅对表单类、链接、交互容器等可聚焦元素生效"
|
|
638
|
-
}
|
|
639
|
-
]
|
|
640
|
-
}
|