pda-kit-mcp-server 2.0.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 (81) hide show
  1. package/README.md +107 -0
  2. package/bin/pda-kit-mcp.js +35 -0
  3. package/dist/file-reader.d.ts +83 -0
  4. package/dist/file-reader.d.ts.map +1 -0
  5. package/dist/file-reader.js +170 -0
  6. package/dist/file-reader.js.map +1 -0
  7. package/dist/http-entry.d.ts +12 -0
  8. package/dist/http-entry.d.ts.map +1 -0
  9. package/dist/http-entry.js +149 -0
  10. package/dist/http-entry.js.map +1 -0
  11. package/dist/http-server.d.ts +5 -0
  12. package/dist/http-server.d.ts.map +1 -0
  13. package/dist/http-server.js +114 -0
  14. package/dist/http-server.js.map +1 -0
  15. package/dist/index.d.ts +8 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +90 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/paths.d.ts +37 -0
  20. package/dist/paths.d.ts.map +1 -0
  21. package/dist/paths.js +52 -0
  22. package/dist/paths.js.map +1 -0
  23. package/dist/server.d.ts +12 -0
  24. package/dist/server.d.ts.map +1 -0
  25. package/dist/server.js +308 -0
  26. package/dist/server.js.map +1 -0
  27. package/dist/stdio-server.d.ts +8 -0
  28. package/dist/stdio-server.d.ts.map +1 -0
  29. package/dist/stdio-server.js +83 -0
  30. package/dist/stdio-server.js.map +1 -0
  31. package/dist/tools/generate-component.d.ts +54 -0
  32. package/dist/tools/generate-component.d.ts.map +1 -0
  33. package/dist/tools/generate-component.js +80 -0
  34. package/dist/tools/generate-component.js.map +1 -0
  35. package/dist/tools/get-component-spec.d.ts +70 -0
  36. package/dist/tools/get-component-spec.d.ts.map +1 -0
  37. package/dist/tools/get-component-spec.js +95 -0
  38. package/dist/tools/get-component-spec.js.map +1 -0
  39. package/dist/tools/get-global-rules.d.ts +42 -0
  40. package/dist/tools/get-global-rules.d.ts.map +1 -0
  41. package/dist/tools/get-global-rules.js +83 -0
  42. package/dist/tools/get-global-rules.js.map +1 -0
  43. package/dist/tools/list-components.d.ts +52 -0
  44. package/dist/tools/list-components.d.ts.map +1 -0
  45. package/dist/tools/list-components.js +104 -0
  46. package/dist/tools/list-components.js.map +1 -0
  47. package/dist/tools/search-components.d.ts +54 -0
  48. package/dist/tools/search-components.d.ts.map +1 -0
  49. package/dist/tools/search-components.js +124 -0
  50. package/dist/tools/search-components.js.map +1 -0
  51. package/dist/tools/validate-html.d.ts +43 -0
  52. package/dist/tools/validate-html.d.ts.map +1 -0
  53. package/dist/tools/validate-html.js +116 -0
  54. package/dist/tools/validate-html.js.map +1 -0
  55. package/package.json +59 -0
  56. package/spec-data/badge.md +461 -0
  57. package/spec-data/button.md +148 -0
  58. package/spec-data/camera.md +622 -0
  59. package/spec-data/dialog.md +419 -0
  60. package/spec-data/divider.md +208 -0
  61. package/spec-data/drawer.md +301 -0
  62. package/spec-data/empty-state.md +336 -0
  63. package/spec-data/home-page.md +352 -0
  64. package/spec-data/input-row.md +346 -0
  65. package/spec-data/layout-page.md +317 -0
  66. package/spec-data/list-item.md +128 -0
  67. package/spec-data/location-selector.md +630 -0
  68. package/spec-data/more-actions.md +427 -0
  69. package/spec-data/navbar.md +482 -0
  70. package/spec-data/photo-list.md +461 -0
  71. package/spec-data/picker-single.md +199 -0
  72. package/spec-data/picker.md +586 -0
  73. package/spec-data/scan-input.md +304 -0
  74. package/spec-data/section-heading.md +268 -0
  75. package/spec-data/selectable-list.md +331 -0
  76. package/spec-data/stepper.md +247 -0
  77. package/spec-data/tab-bar.md +254 -0
  78. package/spec-data/tab.md +349 -0
  79. package/spec-data/tag.md +363 -0
  80. package/spec-data/tooltip.md +202 -0
  81. package/spec-data/waybill-number.md +257 -0
@@ -0,0 +1,461 @@
1
+ ---
2
+ id: badge
3
+ name: 徽标
4
+ category: "数据展示/Data Display"
5
+ version: "1.0.0"
6
+ source: PDAKit-基础组件
7
+ source_url: https://mastergo.ky-tech.com.cn/goto/TXWUI4fE
8
+ source_doc_id: 103417331857122
9
+ component_count: 1
10
+ ---
11
+
12
+ # 徽标 Badge
13
+
14
+ 数字/状态徽标组件,展示在图标、标签栏、按钮或卡片右上角,用于提示未读数、新内容或状态标记。
15
+
16
+ > **颜色规则**:全部使用 Token(`--color-{色系}-{色阶}`),禁止 Hex。
17
+ > **字体**:PingFang SC,Semibold(`600`),文字白色。
18
+
19
+ ---
20
+
21
+ ## 组件总览
22
+
23
+ | 尺寸 | 适用场景 | 变体数 |
24
+ |------|---------|--------|
25
+ | `16` | 标签栏图标角标、小按钮角标 | 8(默认4 + 自定义4) |
26
+ | `20` | 大图标角标、卡片角标 | 8(默认4 + 自定义4) |
27
+ | `小红点` | 纯状态标记(无数字) | 2 |
28
+ | **合计** | | **18 + 2(带描边 × 全部)** |
29
+
30
+ ---
31
+
32
+ ## Variants
33
+
34
+ | Property | 值 | 说明 |
35
+ |----------|-----|------|
36
+ | 尺寸 | `16` / `20` / `小红点` | 控制整体大小 |
37
+ | 类型 | `1位数` / `2位数` / `超过2位数` / `NEW` / `小红点` | 控制显示内容(仅数字和字母) |
38
+ | 颜色 | `红色(默认)` / `自定义颜色` | 红色为 `--color-red-6`,自定义为 `--color-main-6`。**所有类型和尺寸均支持自定义颜色** |
39
+ | 带描边 | `OFF` / `ON` | ON 时为徽标添加 1px 白色外描边 |
40
+
41
+ ---
42
+
43
+ ## CSS 类名组合
44
+
45
+ | 类名 | 作用 | 适用尺寸 |
46
+ |------|------|---------|
47
+ | `.badge` | 基础样式:inline-flex / center / nowrap | 通用 |
48
+ | `.badge-16` | 尺寸=16 样式 | 16 |
49
+ | `.badge-20` | 尺寸=20 样式 | 20 |
50
+ | `.badge-20-single` | 尺寸=20 / 1位数专用(padding 4px 代替 6px) | 20/1位数 |
51
+ | `.badge-dot` | 小红点样式 | 小红点 |
52
+ | `.badge-bordered` | 叠加 1px 白色外描边 | 通用 |
53
+ | `.badge-custom` | 背景替换为品牌紫 | 通用 |
54
+
55
+ **组合示例:**
56
+
57
+ ```
58
+ 尺寸16 + 1位数 + 默认红色 + 带描边 → class="badge badge-16 badge-bordered"
59
+ 尺寸20 + 2位数 + 自定义颜色 + 无描边 → class="badge badge-20 badge-custom"
60
+ 尺寸20 + 1位数 + 默认红色 → class="badge badge-20 badge-20-single"
61
+ 小红点 + 带描边 → class="badge-dot badge-bordered"
62
+ ```
63
+
64
+ ---
65
+
66
+ ## 1. 尺寸=16(标签栏/小按钮角标)
67
+
68
+ ### 高度计算
69
+
70
+ `padding-top(1px) + line-height(14px) + padding-bottom(1px) = 16px`
71
+
72
+ ### 最小宽度
73
+
74
+ | 类型 | 内容宽度 | padding | 最小总宽 | 示例 |
75
+ |------|---------|---------|---------|------|
76
+ | 1位数 | `8px`(固定) | `1px 4px` | `16px` | `9` |
77
+ | 2位数 | 自适应 | `1px 4px` | 内容+8px | `27` |
78
+ | 超过2位数 | 自适应 | `1px 4px` | 内容+8px | `99+` |
79
+ | NEW | 自适应 | `1px 4px` | 内容+8px | `NEW` |
80
+
81
+ > **1位数**:文字元素宽度固定为 `8px`,保证单数字徽标视觉居中且宽度稳定。
82
+
83
+ ### 规格
84
+
85
+ | 属性 | 所有类型 |
86
+ |------|---------|
87
+ | 容器 | `inline-flex / center / center` |
88
+ | 内边距 | `1px 4px` |
89
+ | 圆角 | `8px` |
90
+ | 背景 | `--color-red-6` |
91
+ | 字号/行高 | `10px / 14px` |
92
+ | 文字颜色 | `--color-grey-1` |
93
+ | 字重/字体 | `600` / PingFang SC |
94
+ | 文字折行 | `white-space: nowrap` |
95
+
96
+ ### HTML
97
+
98
+ ```html
99
+ <!-- 1位数:文字固定 width:8px -->
100
+ <span class="badge badge-16">9</span>
101
+
102
+ <!-- 2位数 -->
103
+ <span class="badge badge-16">27</span>
104
+
105
+ <!-- 超过2位数:固定文案 "99+" -->
106
+ <span class="badge badge-16">99+</span>
107
+
108
+ <!-- NEW 标签 -->
109
+ <span class="badge badge-16">NEW</span>
110
+
111
+ <!-- 带描边 + 自定义颜色 -->
112
+ <span class="badge badge-16 badge-bordered badge-custom">5</span>
113
+ ```
114
+
115
+ ### CSS
116
+
117
+ ```css
118
+ .badge {
119
+ display: inline-flex;
120
+ justify-content: center;
121
+ align-items: center;
122
+ white-space: nowrap;
123
+ }
124
+
125
+ .badge-16 {
126
+ padding: 1px 4px;
127
+ min-height: 16px;
128
+ border-radius: 8px;
129
+ background: var(--color-red-6);
130
+ color: var(--color-grey-1);
131
+ font-size: 10px;
132
+ line-height: 14px;
133
+ font-weight: 600;
134
+ font-family: PingFang SC;
135
+ }
136
+
137
+ /* 尺寸=16 下,1位数固定 8px 宽 */
138
+ .badge-16 > span {
139
+ width: 8px;
140
+ }
141
+ ```
142
+
143
+ ---
144
+
145
+ ## 2. 尺寸=20(大图标/卡片角标)
146
+
147
+ ### 高度计算
148
+
149
+ `padding-top(0) + line-height(20px) + padding-bottom(0) = 20px`
150
+
151
+ > 高度由行高直接撑起,无上下内边距。
152
+
153
+ ### 最小宽度
154
+
155
+ | 类型 | 内容宽度 | padding | 最小总宽 | 示例 |
156
+ |------|---------|---------|---------|------|
157
+ | 1位数 | `12px`(固定) | `0 4px` | `20px` | `9` |
158
+ | 2位数 | 自适应 | `0 6px` | 内容+12px | `24` |
159
+ | 超过2位数 | 自适应 | `0 6px` | 内容+12px | `99+` |
160
+ | NEW | 自适应 | `0 6px` | 内容+12px | `NEW` |
161
+
162
+ > **1位数**:左右 padding 为 `4px`(区别于其他类型的 `6px`),文字宽度固定为 `12px`。
163
+
164
+ ### 规格
165
+
166
+ | 属性 | 1位数 | 2位数 / 99+ / NEW |
167
+ |------|-------|-------------------|
168
+ | 容器 | `inline-flex / center / center` | 同 |
169
+ | 内边距 | `0 4px` | `0 6px` |
170
+ | 圆角 | `11px` | `11px` |
171
+ | 背景 | `--color-red-6` | `--color-red-6` |
172
+ | 字号/行高 | `14px / 20px` | `14px / 20px` |
173
+ | 文字颜色 | `--color-grey-1` | `--color-grey-1` |
174
+ | 字重/字体 | `600` / PingFang SC | `600` / PingFang SC` |
175
+ | 文字折行 | `white-space: nowrap` | 同 |
176
+
177
+ ### HTML
178
+
179
+ ```html
180
+ <!-- 1位数:使用 badge-20-single(padding 4px) -->
181
+ <span class="badge badge-20 badge-20-single">9</span>
182
+
183
+ <!-- 2位数 -->
184
+ <span class="badge badge-20">24</span>
185
+
186
+ <!-- 超过2位数 -->
187
+ <span class="badge badge-20">99+</span>
188
+
189
+ <!-- NEW -->
190
+ <span class="badge badge-20">NEW</span>
191
+
192
+ <!-- 带描边 + 自定义颜色 -->
193
+ <span class="badge badge-20 badge-bordered badge-custom">6</span>
194
+ ```
195
+
196
+ ### CSS
197
+
198
+ ```css
199
+ .badge-20 {
200
+ padding: 0 6px;
201
+ min-height: 20px;
202
+ border-radius: 11px;
203
+ background: var(--color-red-6);
204
+ color: var(--color-grey-1);
205
+ font-size: 14px;
206
+ line-height: 20px;
207
+ font-weight: 600;
208
+ font-family: PingFang SC;
209
+ }
210
+
211
+ /* 1位数:padding 收窄为 4px,文字固定 12px 宽 */
212
+ .badge-20-single {
213
+ padding-left: 4px;
214
+ padding-right: 4px;
215
+ }
216
+ .badge-20-single > span {
217
+ width: 12px;
218
+ }
219
+ ```
220
+
221
+ ---
222
+
223
+ ## 3. 小红点
224
+
225
+ 纯标记点,无文字。用于提示存在新内容但无需展示具体数量。
226
+
227
+ ### 规格
228
+
229
+ | 属性 | 值 |
230
+ |------|-----|
231
+ | 尺寸 | `6 × 6` |
232
+ | 形状 | 圆形(`border-radius: 6px`,半宽即为圆) |
233
+ | 背景 | `--color-red-6` |
234
+ | display | `inline-block`(无 flex,无文字) |
235
+ | 描边 | OFF 时无;ON 时 `1px solid --color-grey-1` |
236
+
237
+ ### HTML
238
+
239
+ ```html
240
+ <!-- 无描边 -->
241
+ <span class="badge-dot"></span>
242
+
243
+ <!-- 带描边 -->
244
+ <span class="badge-dot badge-bordered"></span>
245
+
246
+ <!-- 自定义颜色(紫色圆点) -->
247
+ <span class="badge-dot badge-custom"></span>
248
+ ```
249
+
250
+ ### CSS
251
+
252
+ ```css
253
+ .badge-dot {
254
+ display: inline-block;
255
+ width: 6px;
256
+ height: 6px;
257
+ border-radius: 6px;
258
+ background: var(--color-red-6);
259
+ }
260
+ ```
261
+
262
+ ---
263
+
264
+ ## 4. 自定义颜色
265
+
266
+ 默认红色(`--color-red-6`)替换为品牌紫(`--color-main-6` / `#6445D1`),用于区分消息类型或业务线标记。**所有类型和尺寸均支持**。
267
+
268
+ ### 适用尺寸 × 类型
269
+
270
+ | 尺寸 | 1位数 | 2位数 | 99+ | NEW |
271
+ |------|-------|-------|-----|-----|
272
+ | 16 | ✅ | ✅ | ✅ | ✅ |
273
+ | 20 | ✅ | ✅ | ✅ | ✅ |
274
+ | 小红点 | — | — | — | — |
275
+
276
+ > 小红点也支持自定义颜色(`.badge-dot.badge-custom`)。
277
+
278
+ ### HTML
279
+
280
+ ```html
281
+ <!-- 尺寸=16 全类型 -->
282
+ <span class="badge badge-16 badge-custom">9</span>
283
+ <span class="badge badge-16 badge-custom">27</span>
284
+ <span class="badge badge-16 badge-custom">99+</span>
285
+ <span class="badge badge-16 badge-custom">NEW</span>
286
+
287
+ <!-- 尺寸=20 全类型(1位数注意加 badge-20-single) -->
288
+ <span class="badge badge-20 badge-20-single badge-custom">9</span>
289
+ <span class="badge badge-20 badge-custom">24</span>
290
+ <span class="badge badge-20 badge-custom">99+</span>
291
+ <span class="badge badge-20 badge-custom">NEW</span>
292
+ ```
293
+
294
+ ### CSS
295
+
296
+ ```css
297
+ .badge-custom {
298
+ background: var(--color-main-6);
299
+ }
300
+ ```
301
+
302
+ ---
303
+
304
+ ## 5. 带描边(`带描边=ON`)
305
+
306
+ 白色外描边,用于徽标叠加在有色背景上时增加视觉分离。**所有尺寸和类型均可叠加**。
307
+
308
+ | 属性 | 值 |
309
+ |------|-----|
310
+ | 边框 | `1px solid --color-grey-1`(`#FFFFFF`) |
311
+
312
+ > 描边会增加容器总宽高各 2px(左右/上下各 1px)。绝对定位时注意偏移补偿。
313
+
314
+ ```css
315
+ .badge-bordered {
316
+ border: 1px solid var(--color-grey-1);
317
+ }
318
+ ```
319
+
320
+ ---
321
+
322
+ ## 6. 覆盖位置
323
+
324
+ 徽标通常相对于父元素**绝对定位在右上角**。父容器须设置 `position: relative`。具体偏移值以实际业务场景中徽标与父元素的对齐效果为准。
325
+
326
+ ```
327
+ ┌────────────┐
328
+ │ [图标] ┌┐│ ← 徽标右上角
329
+ │ └┘│
330
+ └────────────┘
331
+ ```
332
+
333
+ ```css
334
+ .badge-parent {
335
+ position: relative;
336
+ }
337
+ .badge-pos {
338
+ position: absolute;
339
+ top: 0;
340
+ right: 0;
341
+ /* 偏移值根据业务场景中的 visual fit 调整 */
342
+ }
343
+ ```
344
+
345
+ ---
346
+
347
+ ## 截断规则
348
+
349
+ | 输入值 | 显示文案 | 类型 |
350
+ |--------|---------|------|
351
+ | `0` ~ `9` | 原数字 | `1位数` |
352
+ | `10` ~ `99` | 原数字 | `2位数` |
353
+ | `≥100` | `99+` | `超过2位数` |
354
+ | 标记型 | `NEW` | `NEW` |
355
+
356
+ > 数字类型与文案类型互斥。一个徽标要么显示数字,要么显示 `NEW`,不可混用。
357
+
358
+ ---
359
+
360
+ ## 完整 CSS 汇总
361
+
362
+ ```css
363
+ /* ===== 基础 ===== */
364
+ .badge {
365
+ display: inline-flex;
366
+ justify-content: center;
367
+ align-items: center;
368
+ white-space: nowrap;
369
+ }
370
+
371
+ /* ===== 尺寸 16 ===== */
372
+ .badge-16 {
373
+ padding: 1px 4px;
374
+ min-height: 16px;
375
+ border-radius: 8px;
376
+ background: var(--color-red-6);
377
+ color: var(--color-grey-1);
378
+ font-size: 10px;
379
+ line-height: 14px;
380
+ font-weight: 600;
381
+ font-family: PingFang SC;
382
+ }
383
+ .badge-16 > span {
384
+ width: 8px; /* 仅 1 位数生效 */
385
+ }
386
+
387
+ /* ===== 尺寸 20 ===== */
388
+ .badge-20 {
389
+ padding: 0 6px; /* 默认 padding */
390
+ min-height: 20px;
391
+ border-radius: 11px;
392
+ background: var(--color-red-6);
393
+ color: var(--color-grey-1);
394
+ font-size: 14px;
395
+ line-height: 20px;
396
+ font-weight: 600;
397
+ font-family: PingFang SC;
398
+ }
399
+ .badge-20-single {
400
+ padding-left: 4px;
401
+ padding-right: 4px; /* 1 位数 padding 收窄 */
402
+ }
403
+ .badge-20-single > span {
404
+ width: 12px; /* 仅 1 位数生效 */
405
+ }
406
+
407
+ /* ===== 小红点 ===== */
408
+ .badge-dot {
409
+ display: inline-block;
410
+ width: 6px;
411
+ height: 6px;
412
+ border-radius: 6px;
413
+ background: var(--color-red-6);
414
+ }
415
+
416
+ /* ===== 修饰 ===== */
417
+ .badge-bordered {
418
+ border: 1px solid var(--color-grey-1);
419
+ }
420
+ .badge-custom {
421
+ background: var(--color-main-6);
422
+ }
423
+
424
+ /* ===== 定位 ===== */
425
+ .badge-parent {
426
+ position: relative;
427
+ }
428
+ .badge-pos {
429
+ position: absolute;
430
+ top: 0;
431
+ right: 0;
432
+ }
433
+ ```
434
+
435
+ ---
436
+
437
+ ## 颜色 Token
438
+
439
+ | Token | 色值 | 使用场景 |
440
+ |-------|------|---------|
441
+ | `--color-red-6` | `#FB5251` | 徽标默认背景;小红点背景 |
442
+ | `--color-main-6` | `#6445D1` | 自定义颜色徽标背景 |
443
+ | `--color-grey-1` | `#FFFFFF` | 徽标文字颜色;描边颜色 |
444
+
445
+ ---
446
+
447
+ ## 使用规则(AI 必读)
448
+
449
+ 1. **尺寸匹配场景**:标签栏角标用 `16`,卡片/大图标角标用 `20`,纯状态提示用 `小红点`
450
+ 2. **溢出自动 99+**:数据超过 99 时,文本固定显示为 `99+`
451
+ 3. **数字字体统一**:全部使用 PingFang SC Semibold(`600`),与系统其他数字展示保持一致
452
+ 4. **带描边**:徽标叠加在非白色背景上时,应开启 `带描边=ON`(叠加 `.badge-bordered`)。描边会撑开容器 2px/边,注意定位补偿
453
+ 5. **绝对定位**:徽标默认定位在父元素右上角。父容器需设置 `position: relative`
454
+ 6. **偏移值按需调整**:`top`/`right` 偏移值以实际业务场景中徽标与父元素的 visual fit 为准,不做硬编码
455
+ 7. **自定义颜色**:`--color-main-6`(品牌紫)对所有类型(1位数/2位数/99+/NEW)和所有尺寸(16/20/小红点)生效
456
+ 8. **NEW 标签**:用于标记新功能入口,不属于数字溢出体系。数字与 `NEW` 互斥
457
+ 9. **仅展示数字或字母**:徽标内容限定为数字(0-99)或固定文案(`99+`、`NEW`),不承载图标
458
+ 10. **小红点**:`6×6`,纯标记,无文字内容
459
+ 11. **CSS 类名组合**:基础 `.badge` + 尺寸(`.badge-16` / `.badge-20` / `.badge-dot`)+ 修饰(`.badge-bordered` / `.badge-custom`)+ 1位数专用(`.badge-20-single`)
460
+ 12. **1位数内容宽度**:尺寸=16 时内容宽度固定 `8px`,尺寸=20 时固定 `12px`,保证单数字居中稳定
461
+ 13. **高度来源**:尺寸=16 由 `padding(1+1) + line-height(14)` 得 16px;尺寸=20 由 `line-height(20)` 直接撑起(无上下 padding)
@@ -0,0 +1,148 @@
1
+ ---
2
+ id: button
3
+ name: Button 按钮
4
+ category: atom
5
+ version: "2.0.0"
6
+ tokens:
7
+ height: 64px
8
+ minWidth: 100px
9
+ borderRadius: rounded
10
+ gap: gap-8
11
+ fontSizeLarge: text-22
12
+ fontSizeSmall: text-14
13
+ paddingX: px-16
14
+ states:
15
+ - normal
16
+ - active
17
+ - disabled
18
+ - loading
19
+ variants:
20
+ - primary (纯色/提交)
21
+ - secondary (线框/次要)
22
+ - disabled (不可用)
23
+ ---
24
+
25
+ > **🧠 AI 指令 — 强制约束(MANDATORY,违反即错误)**
26
+ >
27
+ > ```yaml
28
+ > NEGATIVE_PROMPTS:
29
+ > - ⛔ 禁止使用 text-sm / text-base / text-lg 等 Tailwind 默认字号
30
+ > - ⛔ 禁止使用 bg-blue-500 / bg-gray-100 等 Tailwind 默认色板
31
+ > - ⛔ 禁止使用 rounded-lg / rounded-xl / rounded-2xl 等大圆角
32
+ > - ⛔ 禁止使用 transition 属性(如 transition-colors / transition-all)
33
+ > - ⛔ 禁止使用 ring / ring-offset / focus:ring 等 focus 环
34
+ > - ⛔ 禁止在 PDA 上使用 :hover 伪类,触屏设备无 hover
35
+ > - ⛔ 禁用文字白色无边框不可用态(disabled 必须肉眼看得出禁用)
36
+ > - ⛔ 禁止在 HTML 中手写 style="background: var(--color-*)"
37
+ >
38
+ > MANDATORY:
39
+ > - 圆角统一 rounded(4px),不可使用更大圆角
40
+ > - 交互态使用 :active,禁止 :hover
41
+ > - 状态切换瞬间完成,禁止 transition
42
+ > - 触控热区 ≥ 48px
43
+ > - 文字使用 PDA Kit font: 简写形式
44
+ > ```
45
+
46
+ ---
47
+
48
+ # Button 按钮
49
+
50
+ ## 语义结构(Semantic Structure)
51
+
52
+ ```
53
+ Button
54
+ ├── Left Icon (可选,通过 SVG <use> 调用)
55
+ ├── Label Text (必填)
56
+ └── Right Icon (可选)
57
+ ```
58
+
59
+ ## 尺寸定义
60
+
61
+ | 尺寸 | 高度 | 最小宽度 | 内边距 | 字号 | 适用场景 |
62
+ |------|------|---------|--------|------|---------|
63
+ | **Large** | 64px | 100px | 17px 16px | 22px/400 | 页面底部主操作(提交、确认、下一步) |
64
+ | **Medium** | 48px | 80px | 12px 16px | 16px/400 | 表单内操作(搜索、筛选、扫码) |
65
+ | **Small** | 40px | 64px | 8px 12px | 14px/400 | 表格内操作、标签操作、列表右侧 |
66
+
67
+ ## 变体
68
+
69
+ ### Primary(纯色实心,最常用)
70
+
71
+ ```html
72
+ <!-- Large Primary(页面底部提交按钮) -->
73
+ <button class="
74
+ flex items-center justify-center gap-8
75
+ min-w-[100px] h-16 px-16
76
+ rounded
77
+ font-normal text-22
78
+ bg-main-6 text-grey-1
79
+ cursor-pointer
80
+ active:bg-main-7
81
+ disabled:bg-main-2 disabled:text-main-2 disabled:cursor-not-allowed
82
+ ">
83
+ 确认提交
84
+ </button>
85
+
86
+ <!-- Medium Primary -->
87
+ <button class="
88
+ flex items-center justify-center gap-8
89
+ min-w-[80px] h-12 px-16
90
+ rounded
91
+ font-normal text-16
92
+ bg-main-6 text-grey-1
93
+ cursor-pointer
94
+ active:bg-main-7
95
+ disabled:bg-main-2 disabled:text-main-2 disabled:cursor-not-allowed
96
+ ">
97
+ 搜索
98
+ </button>
99
+
100
+ <!-- Small Primary -->
101
+ <button class="
102
+ flex items-center justify-center gap-4
103
+ min-w-[64px] h-10 px-12
104
+ rounded-sm
105
+ font-normal text-14
106
+ bg-main-6 text-grey-1
107
+ cursor-pointer
108
+ active:bg-main-7
109
+ disabled:bg-main-2 disabled:text-main-3 disabled:cursor-not-allowed
110
+ ">
111
+ 详情
112
+ </button>
113
+ ```
114
+
115
+ ### Secondary(线框)
116
+
117
+ ```html
118
+ <button class="
119
+ flex items-center justify-center gap-8
120
+ min-w-[80px] h-12 px-16
121
+ rounded border border-main-6
122
+ font-normal text-16
123
+ bg-grey-1 text-main-6
124
+ cursor-pointer
125
+ active:bg-main-1
126
+ disabled:border-grey-3 disabled:text-grey-4 disabled:cursor-not-allowed
127
+ ">
128
+ 取消
129
+ </button>
130
+ ```
131
+
132
+ ## 状态
133
+
134
+ | 状态 | Primary 表现 | Secondary 表现 |
135
+ |------|-------------|---------------|
136
+ | Normal | bg-main-6, text-grey-1 | bg-grey-1, border-main-6, text-main-6 |
137
+ | Active | bg-main-7(瞬间切换,无 transition) | bg-main-1(瞬间切换,无 transition) |
138
+ | Disabled | bg-main-2, text-main-2, cursor-not-allowed | border-grey-3, text-grey-4, cursor-not-allowed |
139
+ | Loading | 文字替换为加载指示器 + "处理中..." | 同 Primary |
140
+
141
+ ## AI 生成规则
142
+
143
+ 1. 页面底部操作区必须使用 **Large Primary** 按钮(64px 高)
144
+ 2. 按钮必须放在 `.bottom-bar { flex-shrink: 0; }` 容器内,不可使用 `position: fixed`
145
+ 3. 主操作按钮占据最大宽度(`flex-1`),次要按钮使用 Medium
146
+ 4. 所有按钮圆角 = `rounded`(4px),不得使用 `rounded-lg`(8px) 或更大
147
+ 5. 所有按钮禁止 `transition` 属性
148
+ 6. disabled 态必须同时改变背景色和文字色,不可仅改变透明度