@qilitt-mickey/vue3-temp-skill 1.1.75 → 1.2.1
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 +85 -84
- package/SKILL.md +55 -27
- package/bin/cli.js +5 -6
- package/mapping/admin.json +60 -0
- package/package.json +4 -13
- package/references/adapters/_new-adapter.md +88 -0
- package/references/adapters/vue-antdv.md +70 -0
- package/references/adapters/vue-element-plus.md +90 -0
- package/references/design-apply.md +238 -122
- package/scripts/modules.json +2 -2
- package/dist/mapping-type.d.ts +0 -33
- package/dist/theme-vars.js +0 -62
- package/dist/theme-vars.ts +0 -113
- package/dist/theme.css +0 -73
- package/mapping/basic/color.json +0 -35
- package/mapping/basic/radius.json +0 -17
- package/mapping/basic/semantic-values.json +0 -72
- package/mapping/basic/spacing.json +0 -21
- package/mapping/basic/typography.json +0 -21
- package/mapping/component/button.json +0 -90
- package/mapping/component/card.json +0 -31
- package/mapping/component/input.json +0 -42
- package/mapping/component/overlay.json +0 -79
- package/mapping/component/pagination.json +0 -34
- package/mapping/component/table.json +0 -42
- package/mapping/component/tag.json +0 -48
- package/mapping/layout/breakpoint.json +0 -20
- package/mapping/layout/shell-geometry.json +0 -26
- package/mapping/scenes/admin/content.json +0 -497
- package/mapping/scenes/admin/layout.json +0 -577
- package/parser/fixtures/changeset-fullpage-restore.json +0 -259
- package/parser/fixtures/changeset-gap-block.json +0 -24
- package/parser/fixtures/changeset-legacy.json +0 -11
- package/parser/fixtures/changeset-neg1.json +0 -8
- package/parser/fixtures/changeset-neg2.json +0 -10
- package/parser/fixtures/changeset-neg3.json +0 -22
- package/parser/fixtures/changeset-neg4-g8.json +0 -15
- package/parser/fixtures/changeset-neg5-g8-stub.json +0 -26
- package/parser/fixtures/changeset-neg6-g9-identity.json +0 -39
- package/parser/fixtures/changeset-neg7-g10-dims.json +0 -57
- package/parser/fixtures/changeset-neg8-g11-oracle.json +0 -57
- package/parser/fixtures/changeset-neg9-g6-token-chain.json +0 -34
- package/parser/fixtures/changeset-pos-g6-token-chain.json +0 -35
- package/parser/fixtures/changeset-pos-theme-neutral.json +0 -264
- package/parser/fixtures/changeset-pos-theme-nometa.json +0 -260
- package/parser/fixtures/changeset-pos.json +0 -50
- package/parser/fixtures/changeset-registry-gap.json +0 -29
- package/parser/fixtures/changeset-v32-fields.json +0 -71
- package/parser/fixtures/fake-project/src/styles/app.scss +0 -5
- package/parser/fixtures/fake-project/src/views/list.vue +0 -13
- package/parser/fixtures/registry-bad.json +0 -11
- package/parser/fixtures/registry-g6-token-chain.json +0 -10
- package/parser/fixtures/registry-sample.json +0 -15
- package/parser/fixtures/verify/actual-clean.json +0 -35
- package/parser/fixtures/verify/actual.json +0 -33
- package/parser/fixtures/verify/mockup-baseline-admin-list.html +0 -27
- package/parser/fixtures/verify/mockup-g6-content.html +0 -12
- package/parser/fixtures/verify/mockup-neutral.html +0 -26
- package/parser/fixtures/verify/mockup-nometa.html +0 -26
- package/parser/fixtures/verify/oracle.json +0 -37
- package/parser/fixtures/verify/snapshot-latest.json +0 -103
- package/parser/generator.js +0 -178
- package/parser/index.js +0 -2706
- package/parser/loader.js +0 -66
- package/parser/override.js +0 -119
- package/parser/regression.js +0 -301
- package/parser/validator.js +0 -206
- package/parser/watch.js +0 -103
- package/references/steps/maintenance.md +0 -31
- package/references/steps/regression.md +0 -49
- package/references/steps/step0-preflight.md +0 -58
- package/references/steps/step1-match.md +0 -65
- package/references/steps/step1b-audit.md +0 -23
- package/references/steps/step1c-registry.md +0 -29
- package/references/steps/step2-structure.md +0 -73
- package/references/steps/step3-style.md +0 -38
- package/references/steps/step3b-shell.md +0 -63
- package/references/steps/step3c-priority.md +0 -26
- package/references/steps/step4-l3.md +0 -14
- package/references/steps/step5-gates.md +0 -64
- package/references/steps/step6-verify.md +0 -77
- package/scripts/apply-final-gate.mjs +0 -170
- package/scripts/check.mjs +0 -207
- package/scripts/design-audit.mjs +0 -1575
- package/scripts/validate.mjs +0 -106
package/dist/theme-vars.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// AUTO-GENERATED by vue3-temp-skill parser/generator.js — DO NOT EDIT
|
|
2
|
-
// 链路 A 运行时入口:themeVars + overrideMapping(业务级覆写)
|
|
3
|
-
// 用法:import { themeVars, overrideMapping } from '@qilitt-mickey/vue3-temp-skill/dist/theme-vars.js';
|
|
4
|
-
// const custom = overrideMapping(themeVars, { color: { brandPrimary: '#ff6600' } });
|
|
5
|
-
export const themeVars = {
|
|
6
|
-
brandPrimary: '',
|
|
7
|
-
brandHover: '',
|
|
8
|
-
brandActive: '',
|
|
9
|
-
sidebarBg: '',
|
|
10
|
-
successColor: '',
|
|
11
|
-
warningColor: '',
|
|
12
|
-
errorColor: '',
|
|
13
|
-
textPrimary: '',
|
|
14
|
-
textSecondary: '',
|
|
15
|
-
textTertiary: '',
|
|
16
|
-
textDisabled: '',
|
|
17
|
-
borderColor: '',
|
|
18
|
-
borderColorSecondary: '',
|
|
19
|
-
componentBg: '',
|
|
20
|
-
layoutBg: '',
|
|
21
|
-
primaryBg: '',
|
|
22
|
-
radiusSm: '4px',
|
|
23
|
-
radiusBase: '6px',
|
|
24
|
-
radiusLg: '8px',
|
|
25
|
-
dialogRadius: '10px',
|
|
26
|
-
switchRadius: '10px',
|
|
27
|
-
spaceUnit: '4px',
|
|
28
|
-
spacingSm: '8px',
|
|
29
|
-
spacingMd: '16px',
|
|
30
|
-
spacingLg: '24px',
|
|
31
|
-
contentPadding: '8px',
|
|
32
|
-
cardPadding: '24px',
|
|
33
|
-
controlPaddingX: '12px',
|
|
34
|
-
buttonPaddingX: '15px',
|
|
35
|
-
headerPaddingX: '16px',
|
|
36
|
-
fontFamily: '系统栈(PingFang SC / Microsoft YaHei 等)',
|
|
37
|
-
fontSizeSm: '12px',
|
|
38
|
-
fontSizeBase: '14px',
|
|
39
|
-
fontSizeLg: '16px',
|
|
40
|
-
fontSizeXl: '20px',
|
|
41
|
-
fontWeightRegular: '400',
|
|
42
|
-
fontWeightMedium: '500',
|
|
43
|
-
fontWeightSemibold: '600',
|
|
44
|
-
lineHeight: '1.5715',
|
|
45
|
-
bpMobile: '',
|
|
46
|
-
bpCollapse: '',
|
|
47
|
-
bpExpand: '',
|
|
48
|
-
unocssSm: '',
|
|
49
|
-
unocssMd: '',
|
|
50
|
-
unocssLg: '',
|
|
51
|
-
unocssXl: '',
|
|
52
|
-
headerHeight: '48px',
|
|
53
|
-
tabsHeight: '32px',
|
|
54
|
-
sidebarWidth: '208px',
|
|
55
|
-
sidebarCollapsedWidth: '64px',
|
|
56
|
-
sidebarCollapseBarHeight: '40px',
|
|
57
|
-
layoutFooterHeight: '48px',
|
|
58
|
-
tabsItemHeight: '46px',
|
|
59
|
-
menuItemHeight: '40px',
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
export { overrideMapping, overrideMappings } from '../parser/override.js';
|
package/dist/theme-vars.ts
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
// AUTO-GENERATED by vue3-temp-skill parser/generator.js — DO NOT EDIT
|
|
2
|
-
export const themeVars = {
|
|
3
|
-
/** --brand-primary */
|
|
4
|
-
/** --brand-hover */
|
|
5
|
-
/** --brand-active */
|
|
6
|
-
/** --sidebar-bg */
|
|
7
|
-
/** --success-color */
|
|
8
|
-
/** --warning-color */
|
|
9
|
-
/** --error-color */
|
|
10
|
-
/** --text-primary */
|
|
11
|
-
/** --text-secondary */
|
|
12
|
-
/** --text-tertiary */
|
|
13
|
-
/** --text-disabled */
|
|
14
|
-
/** --border-color */
|
|
15
|
-
/** --border-color-secondary */
|
|
16
|
-
/** --component-bg */
|
|
17
|
-
/** --layout-bg */
|
|
18
|
-
/** --primary-bg */
|
|
19
|
-
/** --radius-sm → --border-radius-sm 出厂 4px */
|
|
20
|
-
/** --radius-base → --border-radius-base 出厂 6px */
|
|
21
|
-
/** --radius-lg → --border-radius-lg 出厂 8px */
|
|
22
|
-
/** --dialog-border-radius 出厂 10px */
|
|
23
|
-
/** --switch-border-radius 出厂 10px */
|
|
24
|
-
/** --space-unit 出厂 4px */
|
|
25
|
-
/** --spacing-sm 出厂 8px */
|
|
26
|
-
/** --spacing-md 出厂 16px */
|
|
27
|
-
/** --spacing-lg 出厂 24px */
|
|
28
|
-
/** --layout-content-padding → --vts-margin 出厂 8px */
|
|
29
|
-
/** --card-padding → --vts-card-padding 出厂 24px */
|
|
30
|
-
/** --control-padding-x 出厂 12px */
|
|
31
|
-
/** --button-padding-x 出厂 15px */
|
|
32
|
-
/** --header-padding-x 出厂 16px */
|
|
33
|
-
/** --font-family → --el-font-family 出厂 系统栈(PingFang SC / Microsoft YaHei 等) */
|
|
34
|
-
/** --font-size-sm → --el-font-size-small 出厂 12px */
|
|
35
|
-
/** --font-size-base → --el-font-size-base 出厂 14px */
|
|
36
|
-
/** --font-size-lg → --el-font-size-large 出厂 16px */
|
|
37
|
-
/** --font-size-xl → --el-font-size-extra-large 出厂 20px */
|
|
38
|
-
/** --font-weight-regular → --el-font-weight-primary 出厂 400 */
|
|
39
|
-
/** --font-weight-medium 出厂 500 */
|
|
40
|
-
/** --font-weight-semibold 出厂 600 */
|
|
41
|
-
/** --line-height 出厂 1.5715 */
|
|
42
|
-
/** value token */
|
|
43
|
-
/** value token */
|
|
44
|
-
/** value token */
|
|
45
|
-
/** value token */
|
|
46
|
-
/** value token */
|
|
47
|
-
/** value token */
|
|
48
|
-
/** value token */
|
|
49
|
-
/** --header-height → --vts-bar-height 出厂 48px */
|
|
50
|
-
/** --tabs-height → --vts-tabs-height 出厂 32px */
|
|
51
|
-
/** --sidebar-width 出厂 208px */
|
|
52
|
-
/** --sidebar-collapsed-width 出厂 64px */
|
|
53
|
-
/** --sidebar-collapse-bar-height 出厂 40px */
|
|
54
|
-
/** --layout-footer-height 出厂 48px */
|
|
55
|
-
/** --tabs-item-height 出厂 46px */
|
|
56
|
-
/** --el-menu-item-height 出厂 40px */
|
|
57
|
-
brandPrimary: '' as string,
|
|
58
|
-
brandHover: '' as string,
|
|
59
|
-
brandActive: '' as string,
|
|
60
|
-
sidebarBg: '' as string,
|
|
61
|
-
successColor: '' as string,
|
|
62
|
-
warningColor: '' as string,
|
|
63
|
-
errorColor: '' as string,
|
|
64
|
-
textPrimary: '' as string,
|
|
65
|
-
textSecondary: '' as string,
|
|
66
|
-
textTertiary: '' as string,
|
|
67
|
-
textDisabled: '' as string,
|
|
68
|
-
borderColor: '' as string,
|
|
69
|
-
borderColorSecondary: '' as string,
|
|
70
|
-
componentBg: '' as string,
|
|
71
|
-
layoutBg: '' as string,
|
|
72
|
-
primaryBg: '' as string,
|
|
73
|
-
radiusSm: '4px' as string,
|
|
74
|
-
radiusBase: '6px' as string,
|
|
75
|
-
radiusLg: '8px' as string,
|
|
76
|
-
dialogRadius: '10px' as string,
|
|
77
|
-
switchRadius: '10px' as string,
|
|
78
|
-
spaceUnit: '4px' as string,
|
|
79
|
-
spacingSm: '8px' as string,
|
|
80
|
-
spacingMd: '16px' as string,
|
|
81
|
-
spacingLg: '24px' as string,
|
|
82
|
-
contentPadding: '8px' as string,
|
|
83
|
-
cardPadding: '24px' as string,
|
|
84
|
-
controlPaddingX: '12px' as string,
|
|
85
|
-
buttonPaddingX: '15px' as string,
|
|
86
|
-
headerPaddingX: '16px' as string,
|
|
87
|
-
fontFamily: '系统栈(PingFang SC / Microsoft YaHei 等)' as string,
|
|
88
|
-
fontSizeSm: '12px' as string,
|
|
89
|
-
fontSizeBase: '14px' as string,
|
|
90
|
-
fontSizeLg: '16px' as string,
|
|
91
|
-
fontSizeXl: '20px' as string,
|
|
92
|
-
fontWeightRegular: '400' as string,
|
|
93
|
-
fontWeightMedium: '500' as string,
|
|
94
|
-
fontWeightSemibold: '600' as string,
|
|
95
|
-
lineHeight: '1.5715' as string,
|
|
96
|
-
bpMobile: '' as string,
|
|
97
|
-
bpCollapse: '' as string,
|
|
98
|
-
bpExpand: '' as string,
|
|
99
|
-
unocssSm: '' as string,
|
|
100
|
-
unocssMd: '' as string,
|
|
101
|
-
unocssLg: '' as string,
|
|
102
|
-
unocssXl: '' as string,
|
|
103
|
-
headerHeight: '48px' as string,
|
|
104
|
-
tabsHeight: '32px' as string,
|
|
105
|
-
sidebarWidth: '208px' as string,
|
|
106
|
-
sidebarCollapsedWidth: '64px' as string,
|
|
107
|
-
sidebarCollapseBarHeight: '40px' as string,
|
|
108
|
-
layoutFooterHeight: '48px' as string,
|
|
109
|
-
tabsItemHeight: '46px' as string,
|
|
110
|
-
menuItemHeight: '40px' as string,
|
|
111
|
-
} as const;
|
|
112
|
-
|
|
113
|
-
export type ThemeVarKey = keyof typeof themeVars;
|
package/dist/theme.css
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/* AUTO-GENERATED by vue3-temp-skill parser/generator.js — DO NOT EDIT */
|
|
2
|
-
/* 链路 A(基线注入)产物:全局令牌变量基线。
|
|
3
|
-
* 仅空白新项目从零接入 Skill 主题体系时在样式入口引入一次;
|
|
4
|
-
* 成熟模板项目(自有 design-tokens.scss 权威令牌源)不得引入,避免双令牌源冲突。 */
|
|
5
|
-
:root {
|
|
6
|
-
/* brand_primary → --brand-primary(无出厂值,需项目侧定值) */
|
|
7
|
-
/* brand_hover → --brand-hover(无出厂值,需项目侧定值) */
|
|
8
|
-
/* brand_active → --brand-active(无出厂值,需项目侧定值) */
|
|
9
|
-
/* sidebar_bg → --sidebar-bg(无出厂值,需项目侧定值) */
|
|
10
|
-
/* success_color → --success-color(无出厂值,需项目侧定值) */
|
|
11
|
-
/* warning_color → --warning-color(无出厂值,需项目侧定值) */
|
|
12
|
-
/* error_color → --error-color(无出厂值,需项目侧定值) */
|
|
13
|
-
/* text_primary → --text-primary(无出厂值,需项目侧定值) */
|
|
14
|
-
/* text_secondary → --text-secondary(无出厂值,需项目侧定值) */
|
|
15
|
-
/* text_tertiary → --text-tertiary(无出厂值,需项目侧定值) */
|
|
16
|
-
/* text_disabled → --text-disabled(无出厂值,需项目侧定值) */
|
|
17
|
-
/* border_color → --border-color(无出厂值,需项目侧定值) */
|
|
18
|
-
/* border_color_secondary → --border-color-secondary(无出厂值,需项目侧定值) */
|
|
19
|
-
/* component_bg → --component-bg(无出厂值,需项目侧定值) */
|
|
20
|
-
/* layout_bg → --layout-bg(无出厂值,需项目侧定值) */
|
|
21
|
-
/* primary_bg → --primary-bg(无出厂值,需项目侧定值) */
|
|
22
|
-
--radius-sm: 4px; /* ← radius_sm */
|
|
23
|
-
--border-radius-sm: 4px; /* ← radius_sm */
|
|
24
|
-
--radius-base: 6px; /* ← radius_base */
|
|
25
|
-
--border-radius-base: 6px; /* ← radius_base */
|
|
26
|
-
--radius-lg: 8px; /* ← radius_lg */
|
|
27
|
-
--border-radius-lg: 8px; /* ← radius_lg */
|
|
28
|
-
--dialog-border-radius: 10px; /* ← dialog_radius */
|
|
29
|
-
--switch-border-radius: 10px; /* ← switch_radius */
|
|
30
|
-
--space-unit: 4px; /* ← space_unit */
|
|
31
|
-
--spacing-sm: 8px; /* ← spacing_sm */
|
|
32
|
-
--spacing-md: 16px; /* ← spacing_md */
|
|
33
|
-
--spacing-lg: 24px; /* ← spacing_lg */
|
|
34
|
-
--layout-content-padding: 8px; /* ← content_padding */
|
|
35
|
-
--vts-margin: 8px; /* ← content_padding */
|
|
36
|
-
--card-padding: 24px; /* ← card_padding */
|
|
37
|
-
--vts-card-padding: 24px; /* ← card_padding */
|
|
38
|
-
--control-padding-x: 12px; /* ← control_padding_x */
|
|
39
|
-
--button-padding-x: 15px; /* ← button_padding_x */
|
|
40
|
-
--header-padding-x: 16px; /* ← header_padding_x */
|
|
41
|
-
--font-family: 系统栈(PingFang SC / Microsoft YaHei 等); /* ← font_family */
|
|
42
|
-
--el-font-family: 系统栈(PingFang SC / Microsoft YaHei 等); /* ← font_family */
|
|
43
|
-
--font-size-sm: 12px; /* ← font_size_sm */
|
|
44
|
-
--el-font-size-small: 12px; /* ← font_size_sm */
|
|
45
|
-
--font-size-base: 14px; /* ← font_size_base */
|
|
46
|
-
--el-font-size-base: 14px; /* ← font_size_base */
|
|
47
|
-
--font-size-lg: 16px; /* ← font_size_lg */
|
|
48
|
-
--el-font-size-large: 16px; /* ← font_size_lg */
|
|
49
|
-
--font-size-xl: 20px; /* ← font_size_xl */
|
|
50
|
-
--el-font-size-extra-large: 20px; /* ← font_size_xl */
|
|
51
|
-
--font-weight-regular: 400; /* ← font_weight_regular */
|
|
52
|
-
--el-font-weight-primary: 400; /* ← font_weight_regular */
|
|
53
|
-
--font-weight-medium: 500; /* ← font_weight_medium */
|
|
54
|
-
--font-weight-semibold: 600; /* ← font_weight_semibold */
|
|
55
|
-
--line-height: 1.5715; /* ← line_height */
|
|
56
|
-
/* bp_mobile → (value token)(无出厂值,需项目侧定值) */
|
|
57
|
-
/* bp_collapse → (value token)(无出厂值,需项目侧定值) */
|
|
58
|
-
/* bp_expand → (value token)(无出厂值,需项目侧定值) */
|
|
59
|
-
/* unocss_sm → (value token)(无出厂值,需项目侧定值) */
|
|
60
|
-
/* unocss_md → (value token)(无出厂值,需项目侧定值) */
|
|
61
|
-
/* unocss_lg → (value token)(无出厂值,需项目侧定值) */
|
|
62
|
-
/* unocss_xl → (value token)(无出厂值,需项目侧定值) */
|
|
63
|
-
--header-height: 48px; /* ← header_height */
|
|
64
|
-
--vts-bar-height: 48px; /* ← header_height */
|
|
65
|
-
--tabs-height: 32px; /* ← tabs_height */
|
|
66
|
-
--vts-tabs-height: 32px; /* ← tabs_height */
|
|
67
|
-
--sidebar-width: 208px; /* ← sidebar_width */
|
|
68
|
-
--sidebar-collapsed-width: 64px; /* ← sidebar_collapsed_width */
|
|
69
|
-
--sidebar-collapse-bar-height: 40px; /* ← sidebar_collapse_bar_height */
|
|
70
|
-
--layout-footer-height: 48px; /* ← layout_footer_height */
|
|
71
|
-
--tabs-item-height: 46px; /* ← tabs_item_height */
|
|
72
|
-
--el-menu-item-height: 40px; /* ← menu_item_height */
|
|
73
|
-
}
|
package/mapping/basic/color.json
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "全局原子层 · 基础色彩令牌映射。abstract_field 为设计侧抽象样式字段名(纯视觉语义);token 为项目侧实现令牌(design-tokens.scss :root 或 EP 官方变量);design_range 为设计侧可选值域说明。由 vue3-temp-skill mapping 体系维护,禁止业务项目修改。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "basic",
|
|
5
|
-
"domain": "color",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"scene": "global",
|
|
8
|
-
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
|
-
},
|
|
10
|
-
"tokens": {
|
|
11
|
-
"brand_primary": { "token": "--brand-primary", "type": "color", "desc": "品牌主色" },
|
|
12
|
-
"brand_hover": { "token": "--brand-hover", "type": "color", "desc": "品牌悬停色" },
|
|
13
|
-
"brand_active": { "token": "--brand-active", "type": "color", "desc": "品牌激活色" },
|
|
14
|
-
"sidebar_bg": { "token": "--sidebar-bg", "type": "color", "desc": "侧栏底色(经 theme.scss data-theme=default → --vts-theme-menu-bg 链生效;浅色侧栏主题勿用此字段)" },
|
|
15
|
-
"success_color": { "token": "--success-color", "type": "color", "desc": "成功功能色" },
|
|
16
|
-
"warning_color": { "token": "--warning-color", "type": "color", "desc": "警告功能色" },
|
|
17
|
-
"error_color": { "token": "--error-color", "type": "color", "desc": "错误功能色" },
|
|
18
|
-
"text_primary": { "token": "--text-primary", "type": "color", "desc": "主文字色" },
|
|
19
|
-
"text_secondary": { "token": "--text-secondary", "type": "color", "desc": "次文字色" },
|
|
20
|
-
"text_tertiary": { "token": "--text-tertiary", "type": "color", "desc": "三级文字色" },
|
|
21
|
-
"text_disabled": { "token": "--text-disabled", "type": "color", "desc": "禁用文字色" },
|
|
22
|
-
"border_color": { "token": "--border-color", "type": "color", "desc": "主边框色" },
|
|
23
|
-
"border_color_secondary": { "token": "--border-color-secondary", "type": "color", "desc": "次边框色" },
|
|
24
|
-
"component_bg": { "token": "--component-bg", "type": "color", "desc": "组件面background(卡片/弹层底色)" },
|
|
25
|
-
"layout_bg": { "token": "--layout-bg", "type": "color", "desc": "页面布局背景" },
|
|
26
|
-
"primary_bg": { "token": "--primary-bg", "type": "color", "desc": "主色浅底(自动 color-mix 派生,一般不直改)" }
|
|
27
|
-
},
|
|
28
|
-
"el_bridge": {
|
|
29
|
-
"$comment": "EP 官方变量桥接关系(只读说明):--brand-primary 等经 design-tokens.scss 自动桥接至 --el-color-primary/--el-bg-color/--el-text-color-* 等,设计侧无需输出 --el-* 字段。",
|
|
30
|
-
"brand_primary_to_el": "--el-color-primary",
|
|
31
|
-
"component_bg_to_el": "--el-bg-color",
|
|
32
|
-
"layout_bg_to_el": "--el-bg-color-page",
|
|
33
|
-
"text_primary_to_el": "--el-text-color-primary"
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "全局原子层 · 圆角令牌映射。radius 为设计侧抽象字段;token 为项目实现令牌(design-tokens.scss :root,并桥接 EP --el-border-radius-*)。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "basic",
|
|
5
|
-
"domain": "radius",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"scene": "global",
|
|
8
|
-
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
|
-
},
|
|
10
|
-
"tokens": {
|
|
11
|
-
"radius_sm": { "token": "--radius-sm → --border-radius-sm", "type": "size", "default": "4px", "desc": "小控件圆角(Tag/小按钮)", "el_bridge": "--el-border-radius-small" },
|
|
12
|
-
"radius_base": { "token": "--radius-base → --border-radius-base", "type": "size", "default": "6px", "desc": "标准控件圆角(按钮/输入框)", "el_bridge": "--el-border-radius-base" },
|
|
13
|
-
"radius_lg": { "token": "--radius-lg → --border-radius-lg", "type": "size", "default": "8px", "desc": "卡片级圆角", "el_bridge": null },
|
|
14
|
-
"dialog_radius": { "token": "--dialog-border-radius", "type": "size", "default": "10px", "desc": "弹窗圆角(出厂 ReDialog 观感)", "el_bridge": null },
|
|
15
|
-
"switch_radius": { "token": "--switch-border-radius", "type": "size", "default": "10px", "desc": "开关圆角", "el_bridge": null }
|
|
16
|
-
}
|
|
17
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "全局原子层 · 语义值译表(设计侧语义值 → 精确值)。设计侧 style/global 的值用语义名(如 钴蓝-5)时,parser 与 AI 施工按本表翻译为精确值。aliases 同时收录中文名(规范输出)与英文 token 名(cobalt-5,兼容拼写),两种写法等价。数据源:设计侧 skill page-specs/design-tokens.md §2-§5b(v1.0 对齐)。功能色五套主题同值,各主题各列一份便于按主题整体切换。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "basic",
|
|
5
|
-
"domain": "semantic_values",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"scene": "global",
|
|
8
|
-
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
|
-
},
|
|
10
|
-
"themes": {
|
|
11
|
-
"$comment": "每套主题的语义值全集。level 1-10 为主色渐变(5 = 品牌主色)。",
|
|
12
|
-
"cobalt": {
|
|
13
|
-
"label": "钴蓝",
|
|
14
|
-
"values": {
|
|
15
|
-
"钴蓝-1": "#E8F0FF", "钴蓝-2": "#C5D5FF", "钴蓝-3": "#8FB0FF", "钴蓝-4": "#407BFF",
|
|
16
|
-
"钴蓝-5": "#245BFF", "钴蓝-6": "#1546E0", "钴蓝-7": "#1546C9", "钴蓝-8": "#1239A8",
|
|
17
|
-
"钴蓝-9": "#0D2A7F", "钴蓝-10": "#081952",
|
|
18
|
-
"成功色": "#52C41A", "错误色": "#FF4D4F", "警告色": "#FAAD14", "信息色": "#245BFF", "链接色": "#245BFF"
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"emerald": {
|
|
22
|
-
"label": "翠蓝",
|
|
23
|
-
"values": {
|
|
24
|
-
"翠蓝-1": "#E6FFFC", "翠蓝-2": "#B3F5EF", "翠蓝-3": "#7FE8E0", "翠蓝-4": "#33CFCE",
|
|
25
|
-
"翠蓝-5": "#00A8B5", "翠蓝-6": "#008F9C", "翠蓝-7": "#007A89", "翠蓝-8": "#005A6E",
|
|
26
|
-
"翠蓝-9": "#003F55", "翠蓝-10": "#002838",
|
|
27
|
-
"成功色": "#52C41A", "错误色": "#FF4D4F", "警告色": "#FAAD14", "信息色": "#00A8B5", "链接色": "#00A8B5"
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
"peacock": {
|
|
31
|
-
"label": "孔雀绿",
|
|
32
|
-
"values": {
|
|
33
|
-
"孔雀绿-1": "#E6FFF8", "孔雀绿-2": "#B3F5E3", "孔雀绿-3": "#7FE8CC", "孔雀绿-4": "#33D4A8",
|
|
34
|
-
"孔雀绿-5": "#009A7A", "孔雀绿-6": "#008566", "孔雀绿-7": "#006E55", "孔雀绿-8": "#005240",
|
|
35
|
-
"孔雀绿-9": "#003A2E", "孔雀绿-10": "#00261E",
|
|
36
|
-
"成功色": "#52C41A", "错误色": "#FF4D4F", "警告色": "#FAAD14", "信息色": "#009A7A", "链接色": "#009A7A"
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
"tangerine": {
|
|
40
|
-
"label": "橘橙",
|
|
41
|
-
"values": {
|
|
42
|
-
"橘橙-1": "#FFF3E6", "橘橙-2": "#FFDFC0", "橘橙-3": "#FFC080", "橘橙-4": "#FF9333",
|
|
43
|
-
"橘橙-5": "#FF6A00", "橘橙-6": "#E55A00", "橘橙-7": "#C44E00", "橘橙-8": "#9A3D00",
|
|
44
|
-
"橘橙-9": "#7A3000", "橘橙-10": "#522000",
|
|
45
|
-
"成功色": "#52C41A", "错误色": "#FF4D4F", "警告色": "#FAAD14", "信息色": "#FF6A00", "链接色": "#FF6A00"
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
"dawn": {
|
|
49
|
-
"label": "拂晓蓝",
|
|
50
|
-
"values": {
|
|
51
|
-
"拂晓蓝-1": "#E6F7FF", "拂晓蓝-2": "#BAE7FF", "拂晓蓝-3": "#91D5FF", "拂晓蓝-4": "#69C0FF",
|
|
52
|
-
"拂晓蓝-5": "#40A9FF", "拂晓蓝-6": "#1890FF", "拂晓蓝-7": "#096DD9", "拂晓蓝-8": "#0050B3",
|
|
53
|
-
"拂晓蓝-9": "#003A8C", "拂晓蓝-10": "#002766",
|
|
54
|
-
"成功色": "#52C41A", "错误色": "#FF4D4F", "警告色": "#FAAD14", "信息色": "#1890FF", "链接色": "#1890FF"
|
|
55
|
-
},
|
|
56
|
-
"$note": "拂晓蓝品牌主色为 L6 #1890FF(Ant Design 原生),与其他主题 L5=主色不同;输出 拂晓蓝-6 或 品牌主色 均可命中"
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
"neutral_aliases": {
|
|
60
|
-
"$comment": "主题无关的通用语义值(不属任何一套主题,任意主题下等值)。",
|
|
61
|
-
"values": {
|
|
62
|
-
"品牌主色": "$theme.5",
|
|
63
|
-
"品牌悬停色": "$theme.4",
|
|
64
|
-
"品牌点击色": "$theme.6"
|
|
65
|
-
},
|
|
66
|
-
"$note": "$theme.N 为占位:多套主题混用时 parser 无法消歧——AI 施工前须确认当次变更集的主題(global.brand_primary 或 notes 申报);单主题变更集按其主题取 N 级值(拂晓蓝取 N+1,主色在 6)"
|
|
67
|
-
},
|
|
68
|
-
"usage": {
|
|
69
|
-
"parser": "match 时对 style/global 值做查表:命中本表 → 输出精确值;hex(#开头)→ 透传;未命中且非 hex → 记入字段级待补充并提示「非法定义语义值」",
|
|
70
|
-
"design_side": "官方 5 套主题一律语义值(中文名规范,如 钴蓝-5;英文 cobalt-5 兼容);库外颜色走临时主题 hex + notes 申报"
|
|
71
|
-
}
|
|
72
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "全局原子层 · 间距令牌映射。spacing 为设计侧抽象字段;token 为项目实现令牌(design-tokens.scss :root)。注意 UnoCSS presetRemToPx(baseFontSize:4) 下工具类数字即 px。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "basic",
|
|
5
|
-
"domain": "spacing",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"scene": "global",
|
|
8
|
-
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
|
-
},
|
|
10
|
-
"tokens": {
|
|
11
|
-
"space_unit": { "token": "--space-unit", "type": "size", "default": "4px", "desc": "间距基准单位" },
|
|
12
|
-
"spacing_sm": { "token": "--spacing-sm", "type": "size", "default": "8px", "desc": "小间距(桥接 --vts-space-xs)" },
|
|
13
|
-
"spacing_md": { "token": "--spacing-md", "type": "size", "default": "16px", "desc": "中间距" },
|
|
14
|
-
"spacing_lg": { "token": "--spacing-lg", "type": "size", "default": "24px", "desc": "大间距" },
|
|
15
|
-
"content_padding": { "token": "--layout-content-padding → --vts-margin", "type": "size", "default": "8px", "desc": "内容区内边距(出厂 8,设计规范常 24)" },
|
|
16
|
-
"card_padding": { "token": "--card-padding → --vts-card-padding", "type": "size", "default": "24px", "desc": "卡片内边距" },
|
|
17
|
-
"control_padding_x": { "token": "--control-padding-x", "type": "size", "default": "12px", "desc": "控件水平内边距" },
|
|
18
|
-
"button_padding_x": { "token": "--button-padding-x", "type": "size", "default": "15px", "desc": "按钮水平内边距" },
|
|
19
|
-
"header_padding_x": { "token": "--header-padding-x", "type": "size", "default": "16px", "desc": "顶栏水平内边距" }
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "全局原子层 · 字体令牌映射。typography 为设计侧抽象字段;token 为项目实现令牌(design-tokens.scss :root,桥接 EP --el-font-*)。字号超 5 档需设计侧自证场景(展示型页面除外)。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "basic",
|
|
5
|
-
"domain": "typography",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"scene": "global",
|
|
8
|
-
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
|
-
},
|
|
10
|
-
"tokens": {
|
|
11
|
-
"font_family": { "token": "--font-family → --el-font-family", "type": "font-family", "default": "系统栈(PingFang SC / Microsoft YaHei 等)", "desc": "全局字体族" },
|
|
12
|
-
"font_size_sm": { "token": "--font-size-sm → --el-font-size-small", "type": "size", "default": "12px", "desc": "辅助/标注字号" },
|
|
13
|
-
"font_size_base": { "token": "--font-size-base → --el-font-size-base", "type": "size", "default": "14px", "desc": "正文字号" },
|
|
14
|
-
"font_size_lg": { "token": "--font-size-lg → --el-font-size-large", "type": "size", "default": "16px", "desc": "小标题字号" },
|
|
15
|
-
"font_size_xl": { "token": "--font-size-xl → --el-font-size-extra-large", "type": "size", "default": "20px", "desc": "卡片/页面标题字号" },
|
|
16
|
-
"font_weight_regular": { "token": "--font-weight-regular → --el-font-weight-primary", "type": "number", "default": 400, "desc": "常规字重" },
|
|
17
|
-
"font_weight_medium": { "token": "--font-weight-medium", "type": "number", "default": 500, "desc": "中字重(激活态文字)" },
|
|
18
|
-
"font_weight_semibold": { "token": "--font-weight-semibold", "type": "number", "default": 600, "desc": "标题字重" },
|
|
19
|
-
"line_height": { "token": "--line-height", "type": "ratio", "default": 1.5715, "desc": "全局行高比" }
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "全局原子层 · 按钮组件映射(EP 原生)。EP el-button 无 --el-button-primary-*/--el-button-danger-* 命名空间变量:variant 类(.el-button--primary/--danger)= 给通用变量 --el-button-* 赋语义色值(theme-chalk 源码实证),故 primary/danger 的 css_vars 均指向通用变量,semantic_source 标注该 variant 的语义色源。版本恒 1.0.0(由 SKILL.md 体系版本统一管理)。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "basic",
|
|
5
|
-
"domain": "component_button",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"scene": "global",
|
|
8
|
-
"tech_stack": "vue3 + element-plus"
|
|
9
|
-
},
|
|
10
|
-
"mappings": {
|
|
11
|
-
"component.button.primary": {
|
|
12
|
-
"type": "global_component",
|
|
13
|
-
"component": "ElButton",
|
|
14
|
-
"default_props": { "type": "primary" },
|
|
15
|
-
"style_scope": ".el-button--primary(variant 类作用域;禁止裸写 :root——通用变量全按钮共享,作用域纪律是硬约束)",
|
|
16
|
-
"css_vars": {
|
|
17
|
-
"bg_color": "--el-button-bg-color",
|
|
18
|
-
"text_color": "--el-button-text-color",
|
|
19
|
-
"border_color": "--el-button-border-color",
|
|
20
|
-
"hover_bg_color": "--el-button-hover-bg-color",
|
|
21
|
-
"active_bg_color": "--el-button-active-bg-color",
|
|
22
|
-
"disabled_bg_color": "--el-button-disabled-bg-color",
|
|
23
|
-
"semantic_source": "--el-color-primary"
|
|
24
|
-
},
|
|
25
|
-
"custom_style_map": {
|
|
26
|
-
"font_weight": "font-weight",
|
|
27
|
-
"padding_x": "padding-inline",
|
|
28
|
-
"shadow": "box-shadow",
|
|
29
|
-
"height": "height",
|
|
30
|
-
"radius": "border-radius"
|
|
31
|
-
},
|
|
32
|
-
"$note": "EP 实证:.el-button--primary 类 = 给通用变量 --el-button-* 赋 --el-color-primary 系列值,无 --el-button-primary-* 独立变量。AI 施工必须以 .el-button--primary 限定选择器作用域(禁止裸写 :root);设计侧调主题主色优先动 --el-color-primary,按钮自动跟随。未列变量(hover-border/outline 等)按同规则推导"
|
|
33
|
-
},
|
|
34
|
-
"component.button.default": {
|
|
35
|
-
"type": "global_component",
|
|
36
|
-
"component": "ElButton",
|
|
37
|
-
"default_props": { "type": "default" },
|
|
38
|
-
"style_scope": ":root",
|
|
39
|
-
"css_vars": {
|
|
40
|
-
"bg_color": "--el-button-bg-color",
|
|
41
|
-
"text_color": "--el-button-text-color",
|
|
42
|
-
"border_color": "--el-button-border-color",
|
|
43
|
-
"hover_bg_color": "--el-button-hover-bg-color",
|
|
44
|
-
"hover_text_color": "--el-button-hover-text-color",
|
|
45
|
-
"hover_border_color": "--el-button-hover-border-color"
|
|
46
|
-
},
|
|
47
|
-
"custom_style_map": {
|
|
48
|
-
"font_weight": "font-weight",
|
|
49
|
-
"padding_x": "padding-inline",
|
|
50
|
-
"height": "height",
|
|
51
|
-
"radius": "border-radius"
|
|
52
|
-
},
|
|
53
|
-
"$note": "default 按钮直接消费通用变量本体,无 variant 类覆写;primary/danger 与本条目共用通用变量,靠 variant 类作用域隔离"
|
|
54
|
-
},
|
|
55
|
-
"component.button.danger": {
|
|
56
|
-
"type": "global_component",
|
|
57
|
-
"component": "ElButton",
|
|
58
|
-
"default_props": { "type": "danger" },
|
|
59
|
-
"style_scope": ".el-button--danger(variant 类作用域;禁止裸写 :root——通用变量全按钮共享,作用域纪律是硬约束)",
|
|
60
|
-
"css_vars": {
|
|
61
|
-
"bg_color": "--el-button-bg-color",
|
|
62
|
-
"text_color": "--el-button-text-color",
|
|
63
|
-
"border_color": "--el-button-border-color",
|
|
64
|
-
"hover_bg_color": "--el-button-hover-bg-color",
|
|
65
|
-
"hover_text_color": "--el-button-hover-text-color",
|
|
66
|
-
"hover_border_color": "--el-button-hover-border-color",
|
|
67
|
-
"active_bg_color": "--el-button-active-bg-color",
|
|
68
|
-
"disabled_bg_color": "--el-button-disabled-bg-color",
|
|
69
|
-
"semantic_source": "--el-color-danger"
|
|
70
|
-
},
|
|
71
|
-
"custom_style_map": {
|
|
72
|
-
"font_weight": "font-weight",
|
|
73
|
-
"padding_x": "padding-inline",
|
|
74
|
-
"radius": "border-radius",
|
|
75
|
-
"height": "height"
|
|
76
|
-
},
|
|
77
|
-
"$note": "承接批量删除等危险操作按钮(admin.content.table.operation_bar 引用)。EP 实证:.el-button--danger 类 = 给通用变量 --el-button-* 赋 --el-color-danger 系列值,无 --el-button-danger-* 独立变量。AI 施工必须以 .el-button--danger 限定选择器作用域(禁止裸写 :root);调红的深浅优先动 --el-color-danger"
|
|
78
|
-
},
|
|
79
|
-
"component.button.height": {
|
|
80
|
-
"type": "global_token",
|
|
81
|
-
"style_scope": ":root",
|
|
82
|
-
"css_vars": {
|
|
83
|
-
"size_sm": "--el-component-size-small",
|
|
84
|
-
"size_base": "--el-component-size",
|
|
85
|
-
"size_lg": "--el-component-size-large"
|
|
86
|
-
},
|
|
87
|
-
"custom_style_map": {}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "全局原子层 · 卡片容器组件映射(admin 列表页 .vts-page-card 壳层卡片;registry list-page §11.24 登记的 always 子项 bg_color/radius/border_color/padding_x/padding_y/box_shadow)。样式规则经 src/styles/design-shell.scss 落在 .vts-page-card(设计层文件,非出厂源码)。字段名严格对齐 restore-registry 的 dim(parser 逐项校验)。版本恒 1.0.0(由 SKILL.md 体系版本统一管理)。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "basic",
|
|
5
|
-
"domain": "component_card",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"scene": "global",
|
|
8
|
-
"tech_stack": "vue3 + element-plus + vue3-web-temp"
|
|
9
|
-
},
|
|
10
|
-
"mappings": {
|
|
11
|
-
"component.card.base": {
|
|
12
|
-
"type": "global_component",
|
|
13
|
-
"component": "VtsPageCard(.vts-page-card 壳层卡片容器)",
|
|
14
|
-
"style_scope": ".vts-page-card",
|
|
15
|
-
"css_vars": {},
|
|
16
|
-
"custom_style_map": {
|
|
17
|
-
"bg_color": "background-color",
|
|
18
|
-
"radius": "border-radius",
|
|
19
|
-
"border_color": "border-color",
|
|
20
|
-
"padding_x": "padding-inline",
|
|
21
|
-
"padding_y": "padding-block",
|
|
22
|
-
"box_shadow": "box-shadow"
|
|
23
|
-
},
|
|
24
|
-
"priority": {
|
|
25
|
-
"strategy": "scope_qualified",
|
|
26
|
-
"reason": "设计层文件以 .vts-page-card 作用域限定即可覆盖出厂卡片默认样式。"
|
|
27
|
-
},
|
|
28
|
-
"$note": "列表页主卡片容器(crud-pages L1 样板 .vts-page-card)。registry §11.24 六项均为 always,变更集必须声明;bg_color/radius/border_color/box_shadow 为视觉,padding_x/padding_y 为卡片内边距(卡片本身内边距归零时由页面内容点位自行内缩)。字段名严格对齐 restore-registry 的 dim,禁止改用 border_radius/shadow/padding 等旧词(那是「声明了落不下去」的头号成因)。"
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "全局原子层 · 输入类组件映射(EP 原生:input/select/datepicker 等输入族共用)。",
|
|
3
|
-
"meta": {
|
|
4
|
-
"layer": "basic",
|
|
5
|
-
"domain": "component_input",
|
|
6
|
-
"version": "1.0.0",
|
|
7
|
-
"scene": "global",
|
|
8
|
-
"tech_stack": "vue3 + element-plus"
|
|
9
|
-
},
|
|
10
|
-
"mappings": {
|
|
11
|
-
"component.input.base": {
|
|
12
|
-
"type": "global_component",
|
|
13
|
-
"component": "ElInput",
|
|
14
|
-
"style_scope": ":root",
|
|
15
|
-
"css_vars": {
|
|
16
|
-
"bg_color": "--el-input-bg-color",
|
|
17
|
-
"text_color": "--el-input-text-color",
|
|
18
|
-
"border_color": "--el-input-border-color",
|
|
19
|
-
"hover_border_color": "--el-input-hover-border-color",
|
|
20
|
-
"focus_border_color": "--el-input-focus-border-color",
|
|
21
|
-
"placeholder_color": "--el-input-placeholder-color"
|
|
22
|
-
},
|
|
23
|
-
"custom_style_map": {
|
|
24
|
-
"radius": "border-radius",
|
|
25
|
-
"height": "height",
|
|
26
|
-
"padding_x": "padding-inline",
|
|
27
|
-
"font_size": "font-size",
|
|
28
|
-
"icon_size": "font-size"
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
"component.input.height": {
|
|
32
|
-
"type": "global_token",
|
|
33
|
-
"style_scope": ":root",
|
|
34
|
-
"css_vars": {
|
|
35
|
-
"size_sm": "--el-component-size-small",
|
|
36
|
-
"size_base": "--el-component-size",
|
|
37
|
-
"size_lg": "--el-component-size-large"
|
|
38
|
-
},
|
|
39
|
-
"custom_style_map": {}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|