@skopon-cool/form-sdk 0.1.9 → 0.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.
Files changed (43) hide show
  1. package/README.md +24 -6
  2. package/dist/adapter/a2uiAdapter.d.ts.map +1 -1
  3. package/dist/adapter/formSchema.d.ts.map +1 -1
  4. package/dist/catalog/a2uiCustomCatalog.d.ts.map +1 -1
  5. package/dist/catalog/skoponCaseSelect.d.ts.map +1 -1
  6. package/dist/catalog/skoponResumeSelect.d.ts.map +1 -1
  7. package/dist/catalog/skoponSelectLoading.test.d.ts +2 -0
  8. package/dist/catalog/skoponSelectLoading.test.d.ts.map +1 -0
  9. package/dist/catalog/useSkoponBoundField.d.ts +2 -0
  10. package/dist/catalog/useSkoponBoundField.d.ts.map +1 -1
  11. package/dist/components/AskUserFormCard.d.ts.map +1 -1
  12. package/dist/components/SkoponA2uiStreamRenderer.d.ts.map +1 -1
  13. package/dist/components/SkoponFormProvider.d.ts +11 -0
  14. package/dist/components/SkoponFormProvider.d.ts.map +1 -0
  15. package/dist/components/SkoponFormRenderer.d.ts +2 -0
  16. package/dist/components/SkoponFormRenderer.d.ts.map +1 -1
  17. package/dist/form-sdk.css +1 -1
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +981 -857
  21. package/dist/theme/antd-theme.d.ts +7 -0
  22. package/dist/theme/antd-theme.d.ts.map +1 -0
  23. package/dist/theme/brand-colors.d.ts +19 -0
  24. package/dist/theme/brand-colors.d.ts.map +1 -0
  25. package/package.json +2 -1
  26. package/src/adapter/a2uiAdapter.ts +2 -3
  27. package/src/adapter/formSchema.test.ts +5 -1
  28. package/src/adapter/formSchema.ts +3 -1
  29. package/src/catalog/a2uiCustomCatalog.tsx +15 -1
  30. package/src/catalog/skoponCaseSelect.tsx +2 -1
  31. package/src/catalog/skoponResumeSelect.tsx +1 -0
  32. package/src/catalog/skoponSelectLoading.test.tsx +182 -0
  33. package/src/catalog/useSkoponBoundField.test.ts +14 -1
  34. package/src/catalog/useSkoponBoundField.ts +14 -0
  35. package/src/components/AskUserFormCard.tsx +20 -12
  36. package/src/components/SkoponA2uiStreamRenderer.tsx +5 -2
  37. package/src/components/SkoponFormProvider.tsx +23 -0
  38. package/src/components/SkoponFormRenderer.tsx +17 -2
  39. package/src/index.ts +6 -0
  40. package/src/styles/index.css +4 -3
  41. package/src/styles/tokens.css +224 -0
  42. package/src/theme/antd-theme.ts +93 -0
  43. package/src/theme/brand-colors.ts +18 -0
@@ -0,0 +1,224 @@
1
+ /**
2
+ * VidTempl 设计令牌
3
+ * 基础色阶:@radix-ui/colors(Gray 中性 + Jade 墨绿品牌)
4
+ * 语义变量:供全局 CSS 与自定义组件使用
5
+ */
6
+
7
+ @import '@radix-ui/colors/gray.css';
8
+ @import '@radix-ui/colors/jade.css';
9
+ @import '@radix-ui/colors/green.css';
10
+ @import '@radix-ui/colors/red.css';
11
+ @import '@radix-ui/colors/amber.css';
12
+
13
+ :root,
14
+ .light,
15
+ .light-theme {
16
+ /* —— 品牌色(墨绿 · Radix Jade)—— */
17
+ --brand-1: var(--jade-1);
18
+ --brand-2: var(--jade-2);
19
+ --brand-3: var(--jade-3);
20
+ --brand-4: var(--jade-4);
21
+ --brand-5: var(--jade-5);
22
+ --brand-6: var(--jade-6);
23
+ --brand-7: var(--jade-7);
24
+ --brand-8: var(--jade-8);
25
+ --brand-9: var(--jade-9);
26
+ --brand-10: var(--jade-10);
27
+ --brand-11: var(--jade-11);
28
+ --brand-12: var(--jade-12);
29
+
30
+ /* —— 中性色(Radix Gray)—— */
31
+ --neutral-1: var(--gray-1);
32
+ --neutral-2: var(--gray-2);
33
+ --neutral-3: var(--gray-3);
34
+ --neutral-4: var(--gray-4);
35
+ --neutral-5: var(--gray-5);
36
+ --neutral-6: var(--gray-6);
37
+ --neutral-7: var(--gray-7);
38
+ --neutral-8: var(--gray-8);
39
+ --neutral-9: var(--gray-9);
40
+ --neutral-10: var(--gray-10);
41
+ --neutral-11: var(--gray-11);
42
+ --neutral-12: var(--gray-12);
43
+
44
+ /* —— 功能色 —— */
45
+ --success-9: var(--green-9);
46
+ --success-11: var(--green-11);
47
+ --danger-9: var(--red-9);
48
+ --danger-11: var(--red-11);
49
+ --danger-3: var(--red-3);
50
+ --warning-9: var(--amber-9);
51
+ --warning-11: var(--amber-11);
52
+
53
+ /* —— 语义色(交互设计统一引用)—— */
54
+ --color-primary: var(--brand-11);
55
+ --color-primary-hover: var(--brand-10);
56
+ --color-primary-active: var(--brand-12);
57
+ /* 实心底:与 --color-primary 同为 Jade 11,供按钮 / Sider 等大面积铺色 */
58
+ --color-primary-solid: var(--brand-11);
59
+ --color-primary-subtle: var(--brand-3);
60
+ --color-primary-muted: var(--brand-4);
61
+ --color-on-primary: #ffffff;
62
+
63
+ --color-bg: var(--neutral-1);
64
+ --color-bg-subtle: var(--neutral-2);
65
+ --color-bg-muted: var(--neutral-3);
66
+ --color-surface: #ffffff;
67
+ --color-surface-raised: var(--neutral-2);
68
+
69
+ --color-border: var(--neutral-6);
70
+ --color-border-subtle: var(--neutral-4);
71
+ --color-border-strong: var(--neutral-8);
72
+
73
+ --color-text: var(--neutral-12);
74
+ --color-text-secondary: var(--neutral-11);
75
+ --color-text-muted: var(--neutral-9);
76
+ --color-text-placeholder: var(--neutral-9);
77
+ --color-text-disabled: var(--neutral-8);
78
+
79
+ --color-success: var(--success-9);
80
+ --color-success-text: var(--success-11);
81
+ --color-danger: var(--danger-9);
82
+ --color-danger-text: var(--danger-11);
83
+ --color-danger-subtle: var(--danger-3);
84
+ --color-warning: var(--warning-9);
85
+ --color-warning-text: var(--warning-11);
86
+ --color-warning-solid: var(--amber-9);
87
+ --color-warning-solid-hover: var(--amber-10);
88
+ --color-on-warning: var(--neutral-12);
89
+
90
+ --color-focus-ring: color-mix(in srgb, var(--brand-11) 35%, transparent);
91
+
92
+ /* —— 间距(4px 基准刻度)—— */
93
+ --space-1: 4px;
94
+ --space-2: 8px;
95
+ --space-3: 12px;
96
+ --space-4: 16px;
97
+ --space-5: 24px;
98
+ --space-6: 32px;
99
+ --space-7: 48px;
100
+ --space-8: 64px;
101
+ /* 语义间距 */
102
+ --space-page-x: var(--space-5);
103
+ --space-page-y: var(--space-5);
104
+ --space-section: var(--space-5);
105
+ --space-card: var(--space-4);
106
+ --space-form-item: var(--space-5);
107
+ --space-inline: var(--space-2);
108
+ --space-stack-sm: var(--space-3);
109
+ --space-stack-md: var(--space-4);
110
+ --space-stack-lg: var(--space-5);
111
+
112
+ /* —— 圆角 —— */
113
+ --radius-sm: 4px;
114
+ --radius-md: 8px;
115
+ --radius-lg: 12px;
116
+ /** 胶囊形(按钮):两侧半圆,等效 border-radius: 50% / 9999px */
117
+ --radius-pill: 9999px;
118
+ --radius-button: var(--radius-pill);
119
+
120
+ /* —— 阴影 —— */
121
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04);
122
+ --shadow-md: 0 2px 8px rgba(0, 0, 0, 0.06);
123
+ --shadow-focus: 0 0 0 2px var(--color-focus-ring);
124
+
125
+ /* —— 字体 —— */
126
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
127
+ 'Helvetica Neue', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei',
128
+ 'Noto Sans SC', sans-serif;
129
+ --font-weight-normal: 400;
130
+ --font-weight-medium: 500;
131
+ --font-weight-semibold: 600;
132
+ --font-size-xs: 11px;
133
+ --font-size-sm: 13px;
134
+ --font-size-base: 14px;
135
+ --font-size-lg: 16px;
136
+ --font-size-xl: 20px;
137
+ --font-size-2xl: 24px;
138
+ --line-height-tight: 1.25;
139
+ --line-height-base: 1.5715;
140
+ --line-height-relaxed: 1.6;
141
+
142
+ /* —— 按钮尺寸 —— */
143
+ --button-height-sm: 28px;
144
+ --button-height-md: 36px;
145
+ --button-height-lg: 40px;
146
+ --button-padding-x-sm: 12px;
147
+ --button-padding-x-md: 16px;
148
+ --button-padding-x-lg: 20px;
149
+ --button-font-size-sm: 13px;
150
+ --button-font-size-md: 14px;
151
+ --button-font-size-lg: 16px;
152
+ --button-icon-sm: 14px;
153
+ --button-icon-md: 16px;
154
+ --button-icon-lg: 18px;
155
+ --button-font-weight: var(--font-weight-semibold);
156
+ --button-icon-stroke-width: 2.5px;
157
+
158
+ /* —— 布局(design/ui/UI规范.md §12)—— */
159
+ /* 列表页不设 max-width;流程编辑 1400px;窄表单 800px */
160
+ --layout-sider-width: 60px;
161
+ --layout-sider-width-expanded: 158px;
162
+ --layout-sider-capsule-radius: calc(var(--layout-sider-width) / 2);
163
+ --layout-sider-inset: var(--space-3);
164
+ --layout-sider-rail-width: calc(var(--layout-sider-width) + 2 * var(--layout-sider-inset));
165
+ --layout-sider-rail-width-expanded: calc(
166
+ var(--layout-sider-width-expanded) + 2 * var(--layout-sider-inset)
167
+ );
168
+ --layout-header-height: 56px;
169
+ --layout-bottom-nav-height: 56px;
170
+ --layout-sider-mobile-inset: var(--layout-sider-inset);
171
+ --layout-sider-mobile-padding-y: var(--layout-sider-padding-y);
172
+ --layout-sider-mobile-padding-x: var(--layout-sider-padding-y);
173
+ --layout-sider-mobile-clearance: calc(
174
+ var(--layout-sider-nav-size) + 2 * var(--layout-sider-mobile-padding-y) +
175
+ var(--layout-sider-mobile-inset) + env(safe-area-inset-bottom, 0px)
176
+ );
177
+ --layout-content-gap: var(--space-section);
178
+ --layout-kpi-min-height: 96px;
179
+ --layout-chart-min-height: 320px;
180
+ --layout-sider-logo-size: 36px;
181
+ --layout-sider-padding-y: var(--space-3);
182
+ --layout-sider-padding-x: 0;
183
+ --layout-sider-gap: var(--space-2);
184
+ /** Logo → 首导航项;退出登录 → 头像(须一致) */
185
+ --layout-sider-logo-gap: var(--space-4);
186
+ --layout-sider-nav-size: 36px;
187
+ /** 展开态 icon 与 label 间距 */
188
+ --layout-sider-icon-label-gap: 10px;
189
+ /** 侧栏未选中导航 / 退出图标不透明度 69%(选中、hover 为 1) */
190
+ --layout-sider-nav-icon-opacity-idle: 0.69;
191
+ --color-nav-bg: var(--color-primary-solid);
192
+ --color-nav-icon: var(--color-on-primary);
193
+ --color-nav-logo-bg: #ffffff;
194
+ --color-nav-logo-icon: var(--color-primary);
195
+
196
+ /* —— 动效 —— */
197
+ --duration-fast: 150ms;
198
+ --duration-normal: 200ms;
199
+ --ease-default: cubic-bezier(0.4, 0, 0.2, 1);
200
+
201
+ /* 断点参考(design/ui/UI规范.md §8.1):640 / 768 / 992 px */
202
+ }
203
+
204
+ @media (max-width: 768px) {
205
+ :root {
206
+ --space-page-x: var(--space-4);
207
+ --space-page-y: var(--space-4);
208
+ --space-section: var(--space-4);
209
+ --space-card: var(--space-3);
210
+ --layout-sider-mobile-inset: var(--space-5);
211
+ --layout-sider-mobile-padding-y: var(--space-3);
212
+ --layout-sider-mobile-padding-x: var(--space-3);
213
+ --layout-sider-mobile-clearance: calc(
214
+ var(--layout-sider-nav-size) + 2 * var(--layout-sider-mobile-padding-y) +
215
+ var(--layout-sider-mobile-inset) + env(safe-area-inset-bottom, 0px)
216
+ );
217
+ --layout-flow-artifact-fab-bottom: calc(
218
+ var(--layout-sider-mobile-clearance) + var(--space-5)
219
+ );
220
+ --layout-flow-artifact-panel-bottom: calc(
221
+ var(--layout-flow-artifact-fab-bottom) + 48px + var(--space-3)
222
+ );
223
+ }
224
+ }
@@ -0,0 +1,93 @@
1
+ import type { ThemeConfig } from 'antd'
2
+ import { brandColors } from './brand-colors'
3
+
4
+ /**
5
+ * Ant Design 主题映射(与 design/ui/UI规范.md §2.4、§2.5 一致)
6
+ * 品牌主色 hex 仅来自 ./brand-colors.ts
7
+ */
8
+ export const antdTheme: ThemeConfig = {
9
+ cssVar: { key: 'vidtempl' },
10
+ token: {
11
+ colorPrimary: brandColors.primarySolid,
12
+ colorPrimaryHover: brandColors.primaryHover,
13
+ colorPrimaryActive: brandColors.primaryActive,
14
+ colorLink: brandColors.primary,
15
+ colorLinkHover: brandColors.primaryHover,
16
+ colorSuccess: brandColors.jade9,
17
+ colorWarning: '#f5a623',
18
+ gold6: '#f5a623',
19
+ gold7: '#e6951a',
20
+ colorError: '#e5484d',
21
+ colorInfo: brandColors.primary,
22
+ colorBgLayout: '#f9f9f9',
23
+ colorBgContainer: '#ffffff',
24
+ colorBgElevated: '#ffffff',
25
+ colorBorder: '#d9d9d9',
26
+ colorBorderSecondary: '#f0f0f0',
27
+ colorText: '#202020',
28
+ colorTextSecondary: '#646464',
29
+ colorTextTertiary: '#8d8d8d',
30
+ colorTextQuaternary: '#bbbbbb',
31
+ borderRadius: 8,
32
+ borderRadiusSM: 4,
33
+ borderRadiusLG: 12,
34
+ fontFamily:
35
+ "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans SC', sans-serif",
36
+ fontSize: 14,
37
+ fontSizeLG: 16,
38
+ fontSizeSM: 13,
39
+ fontWeightStrong: 600,
40
+ lineHeight: 1.5715,
41
+ lineHeightLG: 1.5,
42
+ lineHeightSM: 1.5715,
43
+ controlHeight: 36,
44
+ controlHeightLG: 40,
45
+ controlHeightSM: 28,
46
+ paddingContentHorizontal: 16,
47
+ paddingContentHorizontalLG: 20,
48
+ paddingContentHorizontalSM: 12,
49
+ marginLG: 24,
50
+ marginMD: 16,
51
+ marginSM: 12,
52
+ marginXS: 8,
53
+ },
54
+ components: {
55
+ Button: {
56
+ borderRadius: 9999,
57
+ borderRadiusSM: 9999,
58
+ borderRadiusLG: 9999,
59
+ controlHeight: 36,
60
+ controlHeightLG: 40,
61
+ controlHeightSM: 28,
62
+ paddingInline: 16,
63
+ paddingInlineLG: 20,
64
+ paddingInlineSM: 12,
65
+ fontSize: 14,
66
+ fontSizeLG: 16,
67
+ fontSizeSM: 13,
68
+ fontWeight: 600,
69
+ primaryShadow: 'none',
70
+ defaultShadow: 'none',
71
+ dangerShadow: 'none',
72
+ },
73
+ Card: {
74
+ borderRadiusLG: 8,
75
+ },
76
+ Layout: {
77
+ headerBg: '#ffffff',
78
+ bodyBg: '#f9f9f9',
79
+ },
80
+ Tag: {
81
+ defaultBg: '#e6f7ed',
82
+ defaultColor: brandColors.primary,
83
+ fontSizeSM: 13,
84
+ },
85
+ Form: {
86
+ itemMarginBottom: 24,
87
+ },
88
+ Typography: {
89
+ titleMarginBottom: 16,
90
+ titleMarginTop: 0,
91
+ },
92
+ },
93
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 品牌墨绿(Jade)唯一 hex 源
3
+ * CSS 侧通过 Radix --jade-* / 语义变量 --color-* 引用;Ant Design 从此文件同步
4
+ * 规范:front/design/ui/UI规范.md §2.2、§2.5
5
+ */
6
+ export const brandColors = {
7
+ jade9: '#29a383',
8
+ jade10: '#26997b',
9
+ jade11: '#208368',
10
+ jade12: '#1d3b31',
11
+ /** 链接、边框、Logo 图形、实心底(与 primarySolid 同色) */
12
+ primary: '#208368',
13
+ /** Primary 实心按钮、Sider 胶囊、发布等 type="primary" */
14
+ primarySolid: '#208368',
15
+ primaryHover: '#26997b',
16
+ primaryActive: '#1d3b31',
17
+ onPrimary: '#ffffff',
18
+ } as const