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,363 @@
1
+ ---
2
+ id: tag
3
+ name: 标签
4
+ category: "数据展示/Data Display"
5
+ version: "1.0.0"
6
+ source: PDAKit-基础组件
7
+ source_url: https://mastergo.ky-tech.com.cn/goto/TY0U15li
8
+ source_doc_id: 103417331857122
9
+ component_count: 5
10
+ ---
11
+
12
+ # 标签 Tag
13
+
14
+ 业务状态标签,分 **大标签**(已选中的 4 种类型)和 **小标签**(已选中的 7 种类型)。用于展示订单/任务/物品的状态信息。
15
+
16
+ > **颜色规则**:全部使用 Token(`--color-{色系}-{色阶}`),禁止 Hex。
17
+ > **字体**:PingFang SC。
18
+
19
+ ---
20
+
21
+ ## 组件总览
22
+
23
+ | 组件 | Key | 说明 |
24
+ |------|-----|------|
25
+ | 大标签/默认通用 | `649:7926` | 灰色大标签,4 种显隐变体(图标/关闭) |
26
+ | 大标签/完成成功 | `649:5080` | 绿色大标签,4 种显隐变体(图标/关闭) |
27
+ | 大标签/失败出错 | `649:5559` | 红色大标签,4 种显隐变体(图标/关闭) |
28
+ | 大标签/突出警示 | `649:5609` | 橙色大标签,4 种显隐变体(图标/关闭) |
29
+ | 小标签 | `6526:6440` | 小标签,7 种色彩类型 + 1 种带图标变体 |
30
+
31
+ ---
32
+
33
+ ## 1. 大标签
34
+
35
+ 用于列表/卡片中强调关键状态,如"已完成""派送中""已取消"。
36
+
37
+ ### Props
38
+
39
+ | Prop | 类型 | 值 |
40
+ |------|------|-----|
41
+ | 类型 | enum | `默认通用` / `完成成功` / `失败出错` / `突出警示` |
42
+ | 显示图标 | boolean | 左侧状态图标,**默认不显示** |
43
+ | 显示关闭 | boolean | 右侧关闭按钮(`icons/assets/common_ic_close_o.svg`),默认隐藏 |
44
+
45
+ ### 规格
46
+
47
+ | 属性 | 值 |
48
+ |------|------|
49
+ | 内边距 | `4px 8px` |
50
+ | 圆角 | `8px` |
51
+ | 边框 | `1px solid` |
52
+ | 文字 | `18px / 25px`,PingFang SC |
53
+ | 左侧图标 | `16×16` |
54
+ | 右侧关闭图标 | `16×16`,`icons/assets/common_ic_close_o.svg` |
55
+ | 元素间距 | `8px` |
56
+
57
+ ### 颜色(4 类型)
58
+
59
+ | 类型 | 背景 | 边框 | 文字 | 左侧图标 |
60
+ |------|------|------|------|---------|
61
+ | 默认通用 | `--color-grey-2` | `--color-grey-3` | `--color-grey-7` | `icons/assets/common_ic_caution.svg` |
62
+ | 完成成功 | `--color-green-1` | `--color-green-3` | `--color-green-7` | `icons/assets/common_ic_check_two.svg` |
63
+ | 失败出错 | `--color-red-1` | `--color-red-3` | `--color-red-7` | `icons/assets/common_ic_close_two.svg` |
64
+ | 突出警示 | `--color-yellow-2` | `--color-yellow-3` | `--color-yellow-7` | `icons/assets/common_ic_caution.svg` |
65
+
66
+ ### 变体组合
67
+
68
+ 每种类型按「显示图标」「显示关闭」排列出 4 种变体:
69
+
70
+ | 显示图标 | 显示关闭 | 结构 |
71
+ |---------|---------|------|
72
+ | on | on | `[icon] 文字 [关闭]` |
73
+ | on | off | `[icon] 文字` |
74
+ | off | on | `文字 [关闭]` |
75
+ | off | off | `文字` |
76
+
77
+ ---
78
+
79
+ ## 2. 小标签
80
+
81
+ 用于表格行/卡片中展示紧凑状态,如"正常""异常""已签收"。
82
+
83
+ ### Props
84
+
85
+ | Prop | 类型 | 值 |
86
+ |------|------|-----|
87
+ | 类型 | enum | `默认通用` / `默认带图标` / `失败出错` / `完成成功` / `突出警示` / `正常状态` / `主题紫色` |
88
+
89
+ ### 规格
90
+
91
+ | 属性 | 值 |
92
+ |------|------|
93
+ | 高度 | `28px` |
94
+ | 内边距 | `4px 8px` |
95
+ | 圆角 | `4px` |
96
+ | 边框 | `1px solid` |
97
+ | 文字 | `14px / 20px`,PingFang SC Semibold(`600`) |
98
+ | 右侧图标 | `16×16`(仅 `默认带图标` 类型使用 `icons/assets/common_ic_arrow_down_o.svg`) |
99
+
100
+ ### 颜色(7 类型)
101
+
102
+ | 类型 | 背景 | 边框 | 文字 | 宽度 | 图标 |
103
+ |------|------|------|------|------|------|
104
+ | 默认通用 | `--color-grey-2` | `--color-grey-3` | `--color-grey-6` | 自适应 | — |
105
+ | 默认带图标 | `--color-grey-2` | `--color-grey-3` | `--color-grey-6` | 自适应 | `icons/assets/common_ic_arrow_down_o.svg`(右) |
106
+ | 失败出错 | `--color-red-1` | `--color-red-3` | `--color-red-7` | 自适应 | — |
107
+ | 完成成功 | `--color-green-1` | `--color-green-3` | `--color-green-7` | 自适应 | — |
108
+ | 突出警示 | `--color-yellow-1` | `--color-yellow-3` | `--color-yellow-7` | 自适应 | — |
109
+ | 正常状态 | `--color-blue-1` | `--color-blue-3` | `--color-blue-6` | 自适应 | — |
110
+ | 主题紫色 | `--color-main-1` | `--color-main-3` | `--color-main-6` | 自适应 | — |
111
+
112
+ > `默认带图标` 的图标与文字间距为 `4px`(其他元素间距为 `8px`),图标在文字右侧。
113
+
114
+ ---
115
+
116
+ ## HTML 示例
117
+
118
+ ### 大标签
119
+
120
+ ```html
121
+ <!-- 大标签 默认通用 带图标+关闭 -->
122
+ <div class="tag-large tag-large-grey">
123
+ <img src="./icons/assets/common_ic_caution.svg" class="tag-icon" alt="" />
124
+ <span class="tag-text">默认通用</span>
125
+ <img src="./icons/assets/common_ic_close_o.svg" class="tag-close" alt="关闭" onclick="dismissTag(this)" />
126
+ </div>
127
+
128
+ <!-- 大标签 完成成功 只显示文字(默认) -->
129
+ <div class="tag-large tag-large-green">
130
+ <span class="tag-text">完成成功</span>
131
+ </div>
132
+
133
+ <!-- 大标签 失败出错 带图标 -->
134
+ <div class="tag-large tag-large-red">
135
+ <img src="./icons/assets/common_ic_close_two.svg" class="tag-icon" alt="" />
136
+ <span class="tag-text">失败出错</span>
137
+ </div>
138
+
139
+ <!-- 大标签 突出警示 带文字+关闭 -->
140
+ <div class="tag-large tag-large-orange">
141
+ <span class="tag-text">突出警示</span>
142
+ <img src="./icons/assets/common_ic_close_o.svg" class="tag-close" alt="关闭" onclick="dismissTag(this)" />
143
+ </div>
144
+ ```
145
+
146
+ ### 小标签
147
+
148
+ ```html
149
+ <!-- 默认通用 -->
150
+ <span class="tag-small tag-small-grey">默认通用</span>
151
+
152
+ <!-- 默认带图标 -->
153
+ <span class="tag-small tag-small-grey">
154
+ 默认带icon
155
+ <img src="./icons/assets/common_ic_arrow_down_o.svg" class="tag-icon-right" alt="" />
156
+ </span>
157
+
158
+ <!-- 失败出错 -->
159
+ <span class="tag-small tag-small-red">失败出错</span>
160
+
161
+ <!-- 完成成功 -->
162
+ <span class="tag-small tag-small-green">完成成功</span>
163
+
164
+ <!-- 突出警示 -->
165
+ <span class="tag-small tag-small-orange">突出警示</span>
166
+
167
+ <!-- 正常状态 -->
168
+ <span class="tag-small tag-small-blue">正常状态</span>
169
+
170
+ <!-- 主题紫色 -->
171
+ <span class="tag-small tag-small-purple">主题紫色</span>
172
+ ```
173
+
174
+ ---
175
+
176
+ ## CSS
177
+
178
+ ### 大标签
179
+
180
+ ```css
181
+ /* 大标签 基础 */
182
+ .tag-large {
183
+ display: inline-flex;
184
+ justify-content: center;
185
+ align-items: center;
186
+ gap: 8px;
187
+ padding: 4px 8px;
188
+ border: 1px solid;
189
+ border-radius: 8px;
190
+ }
191
+
192
+ /* 图标(左) */
193
+ .tag-large .tag-icon {
194
+ width: 16px;
195
+ height: 16px;
196
+ flex-shrink: 0;
197
+ }
198
+
199
+ /* 关闭按钮(右) */
200
+ .tag-large .tag-close {
201
+ width: 16px;
202
+ height: 16px;
203
+ flex-shrink: 0;
204
+ cursor: pointer;
205
+ }
206
+
207
+ /* 文字 */
208
+ .tag-large .tag-text {
209
+ font-size: 18px;
210
+ line-height: 25px;
211
+ font-family: PingFang SC;
212
+ }
213
+
214
+ /* 颜色 - 默认通用(灰) */
215
+ .tag-large-grey {
216
+ background: var(--color-grey-2);
217
+ border-color: var(--color-grey-3);
218
+ }
219
+ .tag-large-grey .tag-text { color: var(--color-grey-7); }
220
+
221
+ /* 颜色 - 完成成功(绿) */
222
+ .tag-large-green {
223
+ background: var(--color-green-1);
224
+ border-color: var(--color-green-3);
225
+ }
226
+ .tag-large-green .tag-text { color: var(--color-green-7); }
227
+
228
+ /* 颜色 - 失败出错(红) */
229
+ .tag-large-red {
230
+ background: var(--color-red-1);
231
+ border-color: var(--color-red-3);
232
+ }
233
+ .tag-large-red .tag-text { color: var(--color-red-7); }
234
+
235
+ /* 颜色 - 突出警示(橙) */
236
+ .tag-large-orange {
237
+ background: var(--color-yellow-2);
238
+ border-color: var(--color-yellow-3);
239
+ }
240
+ .tag-large-orange .tag-text { color: var(--color-yellow-7); }
241
+ ```
242
+
243
+ ### 小标签
244
+
245
+ ```css
246
+ /* 小标签 基础 */
247
+ .tag-small {
248
+ display: inline-flex;
249
+ justify-content: center;
250
+ align-items: center;
251
+ height: 28px;
252
+ padding: 4px 8px;
253
+ border: 1px solid;
254
+ border-radius: 4px;
255
+ font-size: 14px;
256
+ line-height: 20px;
257
+ font-weight: 600;
258
+ font-family: PingFang SC;
259
+ white-space: nowrap;
260
+ }
261
+
262
+ /* 右侧图标 */
263
+ .tag-small .tag-icon-right {
264
+ width: 16px;
265
+ height: 16px;
266
+ margin-left: 4px;
267
+ flex-shrink: 0;
268
+ }
269
+
270
+ /* 颜色 - 默认通用(灰) */
271
+ .tag-small-grey {
272
+ background: var(--color-grey-2);
273
+ border-color: var(--color-grey-3);
274
+ color: var(--color-grey-6);
275
+ }
276
+
277
+ /* 颜色 - 失败出错(红) */
278
+ .tag-small-red {
279
+ background: var(--color-red-1);
280
+ border-color: var(--color-red-3);
281
+ color: var(--color-red-7);
282
+ }
283
+
284
+ /* 颜色 - 完成成功(绿) */
285
+ .tag-small-green {
286
+ background: var(--color-green-1);
287
+ border-color: var(--color-green-3);
288
+ color: var(--color-green-7);
289
+ }
290
+
291
+ /* 颜色 - 突出警示(橙) */
292
+ .tag-small-orange {
293
+ background: var(--color-yellow-1);
294
+ border-color: var(--color-yellow-3);
295
+ color: var(--color-yellow-7);
296
+ }
297
+
298
+ /* 颜色 - 正常状态(蓝) */
299
+ .tag-small-blue {
300
+ background: var(--color-blue-1);
301
+ border-color: var(--color-blue-3);
302
+ color: var(--color-blue-6);
303
+ }
304
+
305
+ /* 颜色 - 主题紫色 */
306
+ .tag-small-purple {
307
+ background: var(--color-main-1);
308
+ border-color: var(--color-main-3);
309
+ color: var(--color-main-6);
310
+ }
311
+ ```
312
+
313
+ ---
314
+
315
+ ## 颜色 Token
316
+
317
+ | Token | 色值 | 使用场景 |
318
+ |-------|------|---------|
319
+ | `--color-grey-2` | `#F3F4F6` | 默认通用标签背景(大/小) |
320
+ | `--color-grey-3` | `#E0E4F0` | 默认通用标签边框(大/小) |
321
+ | `--color-grey-6` | `#52567B` | 小标签默认通用文字 |
322
+ | `--color-grey-7` | `#383B6F` | 大标签默认通用文字 |
323
+ | `--color-green-1` | `#E9FFF0` | 完成成功标签背景(大/小) |
324
+ | `--color-green-3` | `#82E6A8` | 完成成功标签边框(大/小) |
325
+ | `--color-green-7` | `#01A356` | 完成成功标签文字(大/小) |
326
+ | `--color-red-1` | `#FFECE8` | 失败出错标签背景(大/小) |
327
+ | `--color-red-3` | `#FDB2AC` | 失败出错标签边框(大/小) |
328
+ | `--color-red-7` | `#CF3337` | 失败出错标签文字(大/小) |
329
+ | `--color-yellow-1` | `#FFFAE7` | 小标签突出警示背景 |
330
+ | `--color-yellow-2` | `#FFEEBA` | 大标签突出警示背景 |
331
+ | `--color-yellow-3` | `#FEDE8B` | 突出警示标签边框(大/小) |
332
+ | `--color-yellow-7` | `#D07A01` | 突出警示标签文字(大/小) |
333
+ | `--color-blue-1` | `#E7F3FF` | 小标签正常状态背景 |
334
+ | `--color-blue-3` | `#9FC8FD` | 小标签正常状态边框 |
335
+ | `--color-blue-6` | `#3376FA` | 小标签正常状态文字 |
336
+ | `--color-main-1` | `#F1E7FF` | 小标签主题紫色背景 |
337
+ | `--color-main-3` | `#B9A0ED` | 小标签主题紫色边框 |
338
+ | `--color-main-6` | `#6445D1` | 小标签主题紫色文字 |
339
+
340
+ ---
341
+
342
+ ## 使用规则(AI 必读)
343
+
344
+ 1. **尺寸按场景选型**:
345
+ | 场景 | 组件 |
346
+ |------|------|
347
+ | 列表/卡片顶部状态标识 | 大标签 |
348
+ | 表格行内紧凑状态 | 小标签 |
349
+ 2. **类型按语义匹配**:
350
+ | 语义 | 大标签 | 小标签 |
351
+ |------|--------|--------|
352
+ | 正常/灰色/通用 | 默认通用 | 默认通用 / 默认带图标 |
353
+ | 成功/通过/完成 | 完成成功 | 完成成功 |
354
+ | 失败/错误/异常 | 失败出错 | 失败出错 |
355
+ | 警告/需注意 | 突出警示 | 突出警示 |
356
+ | 进行中/信息 | — | 正常状态(蓝) |
357
+ | 品牌强调 | — | 主题紫色 |
358
+ 3. **大标签图标/关闭按需显隐**:左侧状态图标和右侧关闭按钮各自独立控制,4 种组合
359
+ 4. **大标签默认通用文字用 `--color-grey-7`**,小标签默认通用文字用 `--color-grey-6`,注意区分
360
+ 5. **小标签 `默认带图标` 类型**:图标 `common_ic_arrow_down_o` 在文字右侧,间距 `4px`(不是默认的 `8px`)
361
+ 6. **颜色用 Token**:禁止裸 Hex,全部用 `--color-*` 引用
362
+ 7. **文字不换行**:标签内文字 `white-space: nowrap`
363
+ 8. **关闭按钮点击**:点击 `common_ic_close_o` 应移除该标签 DOM 节点
@@ -0,0 +1,202 @@
1
+ ---
2
+ id: tooltip
3
+ name: 气泡提示
4
+ category: "反馈/Feedback"
5
+ version: "1.0.0"
6
+ source: PDAKit-基础组件
7
+ source_url: https://mastergo.ky-tech.com.cn/goto/TY2xlSMH
8
+ source_doc_id: 103417331857122
9
+ component_count: 2
10
+ ---
11
+
12
+ # 气泡提示 Tooltip
13
+
14
+ 轻量提示气泡,用于表单校验提示、操作引导、错误说明等场景。黑色背景 + 三角箭头,指向目标元素。
15
+
16
+ > **颜色规则**:全部使用 Token(`--color-{色系}-{色阶}`),禁止 Hex。
17
+ > **字体**:PingFang SC。
18
+
19
+ ---
20
+
21
+ ## 组件总览
22
+
23
+ | 组件 | Key | 说明 |
24
+ |------|-----|------|
25
+ | 提示Tips/三角底部 | `6276:4996` | 气泡在上,三角箭头指向下方 |
26
+ | 提示Tips/三角顶部 | `6276:5037` | 三角箭头在上方,气泡在下 |
27
+
28
+ ---
29
+
30
+ ## 规格
31
+
32
+ ### 气泡主体
33
+
34
+ | 属性 | 值 |
35
+ |------|------|
36
+ | 背景 | `--color-black-7`(`#000000`) |
37
+ | 文字颜色 | `--color-grey-1`(`#FFFFFF`) |
38
+ | 内边距 | `12px 16px` |
39
+ | 圆角 | `8px` |
40
+ | 文字 | `16px / 22px`,PingFang SC |
41
+ | 布局 | 水平排列(`flex-row`),居左对齐 |
42
+
43
+ ### 三角箭头
44
+
45
+ | 属性 | 值 |
46
+ |------|------|
47
+ | 尺寸 | `48×8` |
48
+ | 颜色 | 与气泡背景一致(`#000000`) |
49
+ | 资源 | SVG 三角图形 |
50
+
51
+ ### 气泡 + 三角 间距
52
+
53
+ | 属性 | 值 |
54
+ |------|------|
55
+ | 气泡与三角间距 | `0px`(紧贴) |
56
+ | 三角与目标元素间距 | 按实际场景调整 |
57
+
58
+ ---
59
+
60
+ ## 变体
61
+
62
+ ### 三角底部(三角箭头朝下)
63
+
64
+ ```
65
+ ┌──────────────┐
66
+ │ 提示文字 │ ← 气泡:黑底白字,圆角 8px
67
+ └──────┬───────┘
68
+ ▼ ← 三角:48×8,尖头朝下
69
+ ```
70
+
71
+ - 气泡在上方,三角箭头指向下方目标元素
72
+ - 常用于表单字段上方、按钮下方的错误提示
73
+
74
+ ### 三角顶部(三角箭头朝上)
75
+
76
+ ```
77
+ ▲ ← 三角:48×8,尖头朝上
78
+ ┌──────┴───────┐
79
+ │ 提示文字 │ ← 气泡:黑底白字,圆角 8px
80
+ └──────────────┘
81
+ ```
82
+
83
+ - 三角在上方,气泡在下方
84
+ - 常用于输入框下方的校验提示、下拉菜单旁的说明
85
+
86
+ ---
87
+
88
+ ## HTML 示例
89
+
90
+ ```html
91
+ <!-- 三角底部:气泡在上,箭头朝下 -->
92
+ <div class="tooltip tooltip-bottom">
93
+ <div class="tooltip-bubble">
94
+ <span class="tooltip-text">请输入</span>
95
+ </div>
96
+ <div class="tooltip-arrow tooltip-arrow-down"></div>
97
+ </div>
98
+
99
+ <!-- 三角顶部:箭头朝上,气泡在下 -->
100
+ <div class="tooltip tooltip-top">
101
+ <div class="tooltip-arrow tooltip-arrow-up"></div>
102
+ <div class="tooltip-bubble">
103
+ <span class="tooltip-text">请选择至少一项</span>
104
+ </div>
105
+ </div>
106
+ ```
107
+
108
+ ---
109
+
110
+ ## CSS
111
+
112
+ ```css
113
+ /* 气泡容器 */
114
+ .tooltip {
115
+ display: flex;
116
+ flex-direction: column;
117
+ align-items: flex-start;
118
+ }
119
+
120
+ /* 气泡主体 */
121
+ .tooltip-bubble {
122
+ display: flex;
123
+ align-items: flex-start;
124
+ gap: 4px;
125
+ padding: 12px 16px;
126
+ background: var(--color-black-7);
127
+ border-radius: 8px;
128
+ }
129
+
130
+ /* 文字 */
131
+ .tooltip-text {
132
+ color: var(--color-grey-1);
133
+ font-size: 16px;
134
+ line-height: 22px;
135
+ font-family: PingFang SC;
136
+ }
137
+
138
+ /* 三角箭头 */
139
+ .tooltip-arrow {
140
+ width: 48px;
141
+ height: 8px;
142
+ }
143
+
144
+ /* 三角朝下 */
145
+ .tooltip-arrow-down {
146
+ background: url('./icons/assets/tooltip_arrow_down.svg') center/contain no-repeat;
147
+ }
148
+
149
+ /* 三角朝上 */
150
+ .tooltip-arrow-up {
151
+ background: url('./icons/assets/tooltip_arrow_up.svg') center/contain no-repeat;
152
+ }
153
+
154
+ /* ===== 动效 ===== */
155
+ /* 气泡在按钮上方(三角底部)→ 由上往下显示 */
156
+ @keyframes tooltipFadeDown {
157
+ from { opacity: 0; transform: translate(-50%, -8px); }
158
+ to { opacity: 1; transform: translate(-50%, 0); }
159
+ }
160
+ /* 气泡在按钮下方(三角顶部)→ 由下往上显示 */
161
+ @keyframes tooltipFadeUp {
162
+ from { opacity: 0; transform: translate(-50%, 8px); }
163
+ to { opacity: 1; transform: translate(-50%, 0); }
164
+ }
165
+ .tooltip-animate-down {
166
+ animation: tooltipFadeDown 200ms ease-out;
167
+ }
168
+ .tooltip-animate-up {
169
+ animation: tooltipFadeUp 200ms ease-out;
170
+ }
171
+ ```
172
+
173
+ ---
174
+
175
+ ## 颜色 Token
176
+
177
+ | Token | 色值 | 使用场景 |
178
+ |-------|------|---------|
179
+ | `--color-black-7` | `#000000` | 气泡背景、三角箭头颜色 |
180
+ | `--color-grey-1` | `#FFFFFF` | 气泡文字颜色 |
181
+
182
+ ---
183
+
184
+ ## 使用规则(AI 必读)
185
+
186
+ 1. **三角方向按场景**:
187
+ | 场景 | 变体 |
188
+ |------|------|
189
+ | 表单输入框上方错误提示 | 三角底部(箭头朝下指向输入框) |
190
+ | 输入框下方校验说明 | 三角顶部(箭头朝上指向输入框) |
191
+ | 按钮/图标悬停提示 | 视位置而定,箭头指向触发元素 |
192
+ 2. **文字简洁**:气泡内文字尽量短,1-2 行,不超过 20 字
193
+ 3. **颜色用 Token**:禁止裸 Hex,全部用 `--color-*` 引用
194
+ 4. **气泡宽度自适应**:宽度随文字内容撑开,不设固定宽
195
+ 5. **三角居中**:三角的水平位置需对齐目标元素中心,CSS 用 `align-self` 或 JS 动态计算偏移
196
+ 6. **定位**:气泡为绝对定位,相对于目标元素偏移展示,偏移量按实际间距调整
197
+ 7. **显示动效(必须)**:
198
+ | 变体 | 动效 | 说明 |
199
+ |------|------|------|
200
+ | 三角底部(气泡在上) | `tooltipFadeUp` | 气泡在目标上方,从目标位置**由下往上**淡入展开,`200ms ease-out` |
201
+ | 三角顶部(气泡在下) | `tooltipFadeDown` | 气泡在目标下方,从目标位置**由上往下**淡入展开,`200ms ease-out` |
202
+ 每次显示时重新触发动画(`void el.offsetWidth` 强制回流),隐藏时移除动画类