@devflow-tools/plugin-tailwind 0.4.0 → 0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,eAAO,MAAM,cAAc,EAAE,aAgI5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,eAAO,MAAM,cAAc,EAAE,aAinC5B,CAAC"}
package/dist/index.js CHANGED
@@ -64,45 +64,1052 @@ export const tailwindPlugin = {
64
64
  workflow: {
65
65
  steps: [],
66
66
  templates: [
67
+ // ── 新建 Tailwind 组件 ──
67
68
  {
68
69
  name: "new-component",
69
70
  description: "新建 Tailwind 组件:语义结构 → 样式 → 响应式 → 暗色模式",
70
- version: "1.0.0",
71
+ version: "2.0.0",
71
72
  steps: [
72
- { id: "design-structure", description: "设计组件语义结构(HTML + ARIA)", type: "llm", timeout: 10000 },
73
- { id: "apply-base-styles", description: "应用基础样式(spacing、typography、colors 从 theme)", type: "llm", depends: ["design-structure"], timeout: 15000 },
74
- { id: "add-responsive", description: "添加响应式前缀(sm/md/lg/xl/2xl)", type: "llm", depends: ["apply-base-styles"], timeout: 10000 },
75
- { id: "add-dark-mode", description: "添加 dark: 前缀暗色模式样式", type: "llm", depends: ["apply-base-styles"], timeout: 10000 },
76
- { id: "add-interactive", description: "添加交互状态(hover/focus/active/disabled)", type: "llm", depends: ["apply-base-styles"], timeout: 10000 },
77
- { id: "review-classes", description: "审查 class 列表(有无自定义 CSS 可替换为 utility)", type: "simple", depends: ["add-responsive", "add-dark-mode", "add-interactive"], timeout: 10000 },
78
- { id: "check-purge-safelist", description: "确认动态 class safelist 中", type: "simple", depends: ["review-classes"], timeout: 5000 },
73
+ {
74
+ id: "design-structure",
75
+ title: "设计组件语义结构",
76
+ instruction: [
77
+ "## 设计组件语义结构(HTML + ARIA)",
78
+ "",
79
+ "先确定组件的语义化 HTML 结构,再考虑样式。结构正确后 Tailwind classes 才有意义。",
80
+ "",
81
+ "**执行动作**:",
82
+ "1. 明确组件职责:是展示型(display)还是交互型(interactive)",
83
+ "2. 选择最合适的 HTML 语义标签:",
84
+ " - 导航 → `<nav>` + `<ul>` + `<li>` + `<a>`",
85
+ " - 表单 → `<form>` + `<label>` + `<input>` / `<select>` / `<textarea>`",
86
+ " - 列表 → `<ul>` / `<ol>` + `<li>`",
87
+ " - 卡片容器 → `<article>` 或 `<section>`",
88
+ " - 按钮 → `<button>`(不要用 `<div>` 模拟)",
89
+ "3. 添加 ARIA 属性(必要时):",
90
+ " - `aria-label` / `aria-labelledby` 给无文本图标按钮",
91
+ " - `role=\"dialog\"` / `aria-modal=\"true\"` 给弹窗",
92
+ " - `aria-expanded` 给可折叠区域",
93
+ "4. 确定组件的 props 接口(如用 React/Vue):类型、默认值、是否必填",
94
+ "",
95
+ "**产出格式**:",
96
+ "```tsx",
97
+ "// 伪代码,仅结构示意",
98
+ "<nav aria-label=\"Main navigation\">",
99
+ " <ul className=\"...\">",
100
+ " <li><a href=\"...\">...</a></li>",
101
+ " </ul>",
102
+ "</nav>",
103
+ "```",
104
+ "component_props: { label: string; items: MenuItem[]; variant?: 'default' | 'compact' }",
105
+ ].join("\n"),
106
+ suggestedTools: ["Read"],
107
+ output: "语义化 HTML 骨架和 props 接口定义",
108
+ },
109
+ {
110
+ id: "apply-base-styles",
111
+ title: "应用基础样式",
112
+ instruction: [
113
+ "## 应用基础 Tailwind 样式(spacing、typography、colors)",
114
+ "",
115
+ "在语义结构上叠加基础 utility class。所有值优先从 `tailwind.config.ts` 的 theme 中取。",
116
+ "",
117
+ "**执行动作**:",
118
+ "1. **Spacing(间距)**:使用 `p-*`、`m-*`、`gap-*`,值从 theme.spacing 取",
119
+ " ```",
120
+ " p-4 = padding: 1rem (theme.spacing[4])",
121
+ " px-6 = padding-left/right: 1.5rem",
122
+ " gap-3 = gap: 0.75rem",
123
+ " ```",
124
+ "2. **Typography(字体)**:使用 `text-*`、`font-*`、`leading-*`",
125
+ " ```",
126
+ " text-sm = font-size: 0.875rem; line-height: 1.25rem",
127
+ " font-semibold = font-weight: 600",
128
+ " leading-tight = line-height: 1.25",
129
+ " ```",
130
+ "3. **Colors(颜色)**:使用 `text-{color}-{shade}`、`bg-{color}-{shade}`、`border-{color}-{shade}`",
131
+ " - 优先使用语义色:`text-primary`、`bg-surface`(如已在 theme.extend.colors 定义)",
132
+ " - 或直接用 Tailwind 默认色板:`text-gray-700`、`bg-blue-500`",
133
+ "4. **布局**:`flex`、`grid`、`items-center`、`justify-between` 等",
134
+ "5. **圆角 / 阴影**:`rounded-lg`、`shadow-sm` 等",
135
+ "",
136
+ "**约束**:",
137
+ "- 不要在此步加响应式前缀(下一步)",
138
+ "- 不要加 dark: 前缀(下一步)",
139
+ "- 不要加 hover/focus 等状态前缀(下一步)",
140
+ "- 不要写自定义 CSS 或 @apply",
141
+ "",
142
+ "**产出格式**:",
143
+ "```tsx",
144
+ "<nav className=\"flex items-center gap-4 px-6 py-3 bg-white text-gray-800 shadow-sm\">",
145
+ " ...",
146
+ "</nav>",
147
+ "```",
148
+ ].join("\n"),
149
+ suggestedTools: ["Read"],
150
+ output: "带基础 utility class 的组件代码(无响应式/暗色/状态前缀)",
151
+ depends: ["design-structure"],
152
+ },
153
+ {
154
+ id: "add-responsive",
155
+ title: "添加响应式前缀",
156
+ instruction: [
157
+ "## 添加响应式前缀(sm / md / lg / xl / 2xl)",
158
+ "",
159
+ "Tailwind 移动优先:unprefixed class 作用于最小屏,通过断点前缀覆盖。",
160
+ "",
161
+ "**断点对照表**:",
162
+ "| 前缀 | 最小宽度 | 典型设备 |",
163
+ "|------|----------|----------|",
164
+ "| sm | 640px | 大手机横屏 |",
165
+ "| md | 768px | 平板 |",
166
+ "| lg | 1024px | 小笔记本 |",
167
+ "| xl | 1280px | 桌面 |",
168
+ "| 2xl | 1536px | 大桌面 |",
169
+ "",
170
+ "**执行动作**:",
171
+ "1. 找出需要响应式调整的 class(通常是布局、字号、间距、显隐)",
172
+ "2. 从最小屏开始(无 prefix),逐步叠加断点前缀:",
173
+ " ```",
174
+ " text-sm md:text-base lg:text-lg // 字号随屏幕变大",
175
+ " flex-col md:flex-row // 小屏竖排,平板以上横排",
176
+ " hidden md:block // 小屏隐藏,平板以上显示",
177
+ " px-4 md:px-6 lg:px-8 // 间距逐级增大",
178
+ " grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 // 网格列数",
179
+ " ```",
180
+ "3. 检查每个断点下的视觉效果是否符合设计稿",
181
+ "4. 避免给所有 class 加响应式前缀——只改需要变的",
182
+ "",
183
+ "**产出格式**:",
184
+ "```tsx",
185
+ "<div className=\"flex flex-col md:flex-row gap-4 md:gap-6 px-4 md:px-8\">",
186
+ " ...",
187
+ "</div>",
188
+ "```",
189
+ "responsive_breakpoints_used: [\"sm\", \"md\", \"lg\"]",
190
+ ].join("\n"),
191
+ suggestedTools: ["Read"],
192
+ output: "添加了响应式断点前缀的组件代码",
193
+ depends: ["apply-base-styles"],
194
+ },
195
+ {
196
+ id: "add-dark-mode",
197
+ title: "添加暗色模式样式",
198
+ instruction: [
199
+ "## 添加 dark: 前缀暗色模式样式",
200
+ "",
201
+ "使用 Tailwind 的 class 策略暗色模式。暗色 class 在 `<html class=\"dark\">` 时生效。",
202
+ "",
203
+ "**执行动作**:",
204
+ "1. 对所有涉及颜色的 class 添加 `dark:` 对应版本:",
205
+ " ```",
206
+ " bg-white dark:bg-gray-900",
207
+ " text-gray-800 dark:text-gray-100",
208
+ " border-gray-200 dark:border-gray-700",
209
+ " ```",
210
+ "2. 对图片/Logo 在暗色下可能需要反色:",
211
+ " ```",
212
+ " <img className=\"dark:invert\" src=\"/logo.svg\" />",
213
+ " ```",
214
+ "3. 阴影在暗色下通常更重或更淡:",
215
+ " ```",
216
+ " shadow-sm dark:shadow-lg",
217
+ " shadow-gray-200 dark:shadow-black/50",
218
+ " ```",
219
+ "4. 检查透明度和叠加效果:暗色下背景叠加可能需要调整 opacity",
220
+ "5. 确认 `tailwind.config.ts` 中 `darkMode: 'class'` 已配置",
221
+ "",
222
+ "**约束**:",
223
+ "- 暗色 class 紧跟对应亮色 class,不要散落各处",
224
+ "- 背景色、文本色、边框色、阴影色都需要 dark: 版本",
225
+ "- 不要漏掉 hover/focus 状态中的颜色(下一步处理)",
226
+ "",
227
+ "**产出格式**:",
228
+ "```tsx",
229
+ "<div className=\"bg-white dark:bg-gray-900 text-gray-800 dark:text-gray-100\">",
230
+ " ...",
231
+ "</div>",
232
+ "```",
233
+ "dark_mode_config: tailwind.config.ts → darkMode: 'class'",
234
+ ].join("\n"),
235
+ suggestedTools: ["Read"],
236
+ output: "同时支持亮色和暗色模式的组件代码",
237
+ depends: ["apply-base-styles"],
238
+ },
239
+ {
240
+ id: "add-interactive",
241
+ title: "添加交互状态样式",
242
+ instruction: [
243
+ "## 添加交互状态(hover / focus / active / disabled)",
244
+ "",
245
+ "为可交互元素(按钮、链接、输入框等)添加状态样式,提升可访问性和体验。",
246
+ "",
247
+ "**状态前缀对照**:",
248
+ "| 前缀 | 触发条件 | 典型用途 |",
249
+ "|------------|----------------------------|----------|",
250
+ "| hover: | 鼠标悬停 | 颜色变化、阴影加深 |",
251
+ "| focus: | 键盘聚焦 | outline、ring |",
252
+ "| focus-visible: | 仅键盘聚焦(推荐) | 比 focus 更精准 |",
253
+ "| active: | 鼠标按下 | 颜色加深、scale |",
254
+ "| disabled: | 元素禁用 | 灰度、降低透明度 |",
255
+ "| group-hover: | 父元素 hover 时子元素变化 | 卡片 hover 时标题变色 |",
256
+ "",
257
+ "**执行动作**:",
258
+ "1. **按钮/链接**:",
259
+ " ```",
260
+ " hover:bg-blue-600 focus-visible:ring-2 focus-visible:ring-blue-500",
261
+ " active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed",
262
+ " ```",
263
+ "2. **输入框**:",
264
+ " ```",
265
+ " focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20",
266
+ " disabled:bg-gray-100 disabled:cursor-not-allowed",
267
+ " ```",
268
+ "3. **卡片/列表项(使用 group-hover)**:",
269
+ " ```",
270
+ " <div className=\"group\">",
271
+ " <h3 className=\"group-hover:text-blue-500\">...</h3>",
272
+ " </div>",
273
+ " ```",
274
+ "4. **过渡动画**:给 hover/focus 变化加 `transition-colors` 或 `transition-all`",
275
+ "5. 暗色模式下对应状态也要加:`dark:hover:bg-gray-800`",
276
+ "",
277
+ "**约束**:",
278
+ "- 所有交互元素必须有 focus-visible 样式(键盘可访问性)",
279
+ "- disabled 状态不要只靠颜色区分,还要有 cursor 和 opacity",
280
+ "- 不要给非交互元素(div、span)加 hover",
281
+ "",
282
+ "**产出格式**:",
283
+ "```tsx",
284
+ "<button className=\"bg-blue-500 hover:bg-blue-600 focus-visible:ring-2",
285
+ " focus-visible:ring-blue-500 active:scale-95 transition-colors",
286
+ " disabled:opacity-50 disabled:cursor-not-allowed\">",
287
+ " Submit",
288
+ "</button>",
289
+ "```",
290
+ ].join("\n"),
291
+ suggestedTools: ["Read"],
292
+ output: "完整交互状态的组件代码(含 hover/focus/active/disabled)",
293
+ depends: ["apply-base-styles"],
294
+ },
295
+ {
296
+ id: "review-classes",
297
+ title: "审查 class 列表",
298
+ instruction: [
299
+ "## 审查 class 列表(消除自定义 CSS,统一为 utility)",
300
+ "",
301
+ "最后审查一遍所有 class,确保没有遗留的自定义 CSS 或可优化的地方。",
302
+ "",
303
+ "**检查项**:",
304
+ "",
305
+ "**1. 查找自定义 CSS**",
306
+ "```bash",
307
+ "# 检查组件中是否有 style 属性",
308
+ "grep -n 'style={{' src/components/YourComponent.tsx",
309
+ "",
310
+ "# 检查同目录 CSS 文件",
311
+ "ls src/components/YourComponent.css 2>/dev/null",
312
+ "```",
313
+ "",
314
+ "**2. 查找 @apply 指令**",
315
+ "```bash",
316
+ "grep -rn '@apply' src/components/ --include='*.css'",
317
+ "```",
318
+ "如果有 @apply,评估是否能拆为多个 utility class。",
319
+ "",
320
+ "**3. 查找硬编码颜色/尺寸**",
321
+ "```bash",
322
+ "grep -nE '(#[0-9a-fA-F]{3,8}|rgb[a]?\\(|[0-9]+px)' src/components/YourComponent.tsx",
323
+ "```",
324
+ "",
325
+ "**4. 审查重复 class 组合**",
326
+ "如果多个元素有完全相同的 5+ class 组合,考虑抽取为组件或 @apply。",
327
+ "",
328
+ "**5. 检查 class 顺序**",
329
+ "建议按 Tailwind 官方推荐顺序排列(便于阅读和维护):",
330
+ "1. Layout: `flex`, `grid`, `block`",
331
+ "2. Spacing: `p-*`, `m-*`, `gap-*`",
332
+ "3. Sizing: `w-*`, `h-*`, `max-w-*`",
333
+ "4. Typography: `text-*`, `font-*`, `leading-*`",
334
+ "5. Colors: `text-*`, `bg-*`, `border-*`",
335
+ "6. Effects: `shadow-*`, `opacity-*`",
336
+ "7. States: `hover:*`, `focus:*`, `dark:*`",
337
+ "",
338
+ "**产出格式**:",
339
+ "```",
340
+ "custom_css_found: false",
341
+ "inline_styles_found: false",
342
+ "hardcoded_values: []",
343
+ "apply_directives: []",
344
+ "suggestions: [\"class 顺序调整\"] | []",
345
+ "```",
346
+ ].join("\n"),
347
+ suggestedTools: ["Bash", "Read"],
348
+ output: "class 审查报告(自定义 CSS、硬编码值、重复组合)",
349
+ depends: ["add-responsive", "add-dark-mode", "add-interactive"],
350
+ },
351
+ {
352
+ id: "check-purge-safelist",
353
+ title: "确认动态 class 在 safelist 中",
354
+ instruction: [
355
+ "## 确认动态 class 在 safelist 中",
356
+ "",
357
+ "PurgeCSS 通过静态扫描移除非使用 class。动态拼接的 class 必须加到 safelist。",
358
+ "",
359
+ "**执行动作**:",
360
+ "",
361
+ "**1. 查找动态 class 拼接**",
362
+ "```bash",
363
+ "# 查找 class 拼接、模板字符串、变量引用",
364
+ "grep -rnE '(className=\\{.*\\+|`.*\\$\\{|classes\\[)' src/components/YourComponent.tsx",
365
+ "",
366
+ "# 查找条件 class 工具(clsx, classnames, tailwind-merge)",
367
+ "grep -rnE '(clsx|classnames|cn|twMerge)\\(' src/components/YourComponent.tsx",
368
+ "```",
369
+ "",
370
+ "**2. 列出组件中所有动态 class**",
371
+ "例如:",
372
+ "```tsx",
373
+ "const variantClasses = {",
374
+ " primary: 'bg-blue-500 text-white',",
375
+ " secondary: 'bg-gray-200 text-gray-800',",
376
+ " danger: 'bg-red-500 text-white',",
377
+ "};",
378
+ "```",
379
+ "这些 class 都可能在运行时才出现,PurgeCSS 扫描不到。",
380
+ "",
381
+ "**3. 检查 tailwind.config.ts 的 safelist**",
382
+ "```bash",
383
+ "grep -A 10 'safelist' tailwind.config.ts",
384
+ "```",
385
+ "如果未配置 safelist 或 safelist 中缺少上述 class,需补充:",
386
+ "```typescript",
387
+ "// tailwind.config.ts",
388
+ "export default {",
389
+ " safelist: [",
390
+ " 'bg-blue-500', 'text-white',",
391
+ " 'bg-gray-200', 'text-gray-800',",
392
+ " 'bg-red-500',",
393
+ " ],",
394
+ "};",
395
+ "```",
396
+ "",
397
+ "**4. 使用模式匹配 safelist(推荐)**",
398
+ "```typescript",
399
+ "safelist: [",
400
+ " { pattern: /^bg-(blue|gray|red)-\\d+$/ },",
401
+ " { pattern: /^text-(white|gray-\\d+)$/ },",
402
+ "],",
403
+ "```",
404
+ "",
405
+ "**产出格式**:",
406
+ "```",
407
+ "dynamic_classes_found: ['bg-blue-500', 'bg-red-500', ...]",
408
+ "safelist_configured: true | false",
409
+ "safelist_entries: ['bg-blue-500', ...]",
410
+ "missing_from_safelist: [] | ['bg-red-500']",
411
+ "```",
412
+ ].join("\n"),
413
+ suggestedTools: ["Bash", "Read"],
414
+ output: "动态 class 列表和 safelist 配置检查报告",
415
+ depends: ["review-classes"],
416
+ },
79
417
  ],
80
418
  triggers: [{ type: "cli", command: "new:component" }, { type: "mcp", tool: "new_component" }],
81
419
  },
420
+ // ── Utility 审查 ──
82
421
  {
83
422
  name: "utility-audit",
84
423
  description: "Utility 审查:清除自定义 CSS → 统一为 Tailwind utility",
85
- version: "1.0.0",
424
+ version: "2.0.0",
86
425
  steps: [
87
- { id: "scan-custom-css", description: "扫描项目中的自定义 CSS 和 @apply 指令", type: "simple", timeout: 10000 },
88
- { id: "match-utility", description: "匹配每个自定义样式到对应的 Tailwind utility", type: "llm", depends: ["scan-custom-css"], timeout: 15000 },
89
- { id: "detect-deprecated", description: "检测已弃用的 Tailwind class(如 flex-shrink-0 → shrink-0)", type: "simple", depends: ["scan-custom-css"], timeout: 10000 },
90
- { id: "check-arbitrary-values", description: "审查任意值 [300px] 是否应提取为 theme", type: "simple", depends: ["scan-custom-css"], timeout: 10000 },
91
- { id: "replace-custom", description: "用 Tailwind utility 替换自定义 CSS", type: "llm", depends: ["match-utility"], timeout: 20000 },
92
- { id: "build-verify", description: "构建验证(确认 PurgeCSS 正确生成)", type: "simple", depends: ["replace-custom"], timeout: 15000 },
426
+ {
427
+ id: "scan-custom-css",
428
+ stepTemplate: "scan-styles",
429
+ overrides: {
430
+ title: "扫描项目中的自定义 CSS @apply 指令",
431
+ instruction: [
432
+ "## 扫描项目中的自定义 CSS 和 @apply 指令",
433
+ "",
434
+ "找出所有可被 Tailwind utility 替代的自定义样式。",
435
+ "",
436
+ "**执行动作**:",
437
+ "```bash",
438
+ "# 1. 找到所有样式文件",
439
+ "find src/ \\( -name '*.css' -o -name '*.scss' -o -name '*.less' -o -name '*.module.css' \\) | head -50",
440
+ "",
441
+ "# 2. 扫描 @apply 指令(可被直接替换为 utility)",
442
+ "grep -rn '@apply' src/ --include='*.css' --include='*.scss' --include='*.vue' -l",
443
+ "",
444
+ "# 3. 统计 @apply 使用次数",
445
+ "grep -rn '@apply' src/ | wc -l",
446
+ "",
447
+ "# 4. 查找可能用 utility 替代的属性",
448
+ "grep -rnE '(display:\\s*flex|justify-content|align-items|margin:\\s*0|padding:\\s*0|color:\\s*#|background(-color)?:\\s*#|font-size:\\s*[0-9]+px)' src/ --include='*.css' --include='*.scss' --include='*.tsx' --include='*.vue' | head -50",
449
+ "",
450
+ "# 5. 查找 inline style",
451
+ "grep -rn 'style={{' src/ --include='*.tsx' | head -20",
452
+ "```",
453
+ "",
454
+ "**产出格式**:",
455
+ "```",
456
+ "style_files: [list of files]",
457
+ "apply_directives_count: <N>",
458
+ "inline_styles_count: <N>",
459
+ "replaceable_properties: [list]",
460
+ "```",
461
+ ].join("\n"),
462
+ },
463
+ suggestedTools: ["Bash", "Read"],
464
+ output: "自定义 CSS 和可替换样式清单",
465
+ },
466
+ {
467
+ id: "match-utility",
468
+ title: "匹配 Tailwind utility",
469
+ instruction: [
470
+ "## 匹配每个自定义样式到对应的 Tailwind utility",
471
+ "",
472
+ "对上一步发现的自定义 CSS 属性,逐一匹配 Tailwind utility class。",
473
+ "",
474
+ "**常见映射表**:",
475
+ "| CSS 属性 | Tailwind utility |",
476
+ "|-------------------------------|---------------------------|",
477
+ "| `display: flex` | `flex` |",
478
+ "| `display: grid` | `grid` |",
479
+ "| `justify-content: center` | `justify-center` |",
480
+ "| `align-items: center` | `items-center` |",
481
+ "| `margin: 0 auto` | `mx-auto` |",
482
+ "| `padding: 1rem` | `p-4` |",
483
+ "| `padding: 0.5rem 1rem` | `py-2 px-4` |",
484
+ "| `font-size: 14px` | `text-sm` |",
485
+ "| `font-weight: 600` | `font-semibold` |",
486
+ "| `color: #1a1a1a` | `text-gray-900` |",
487
+ "| `background: #fff` | `bg-white` |",
488
+ "| `border-radius: 0.5rem` | `rounded-lg` |",
489
+ "| `box-shadow: 0 1px 2px ...` | `shadow-sm` |",
490
+ "| `width: 100%` | `w-full` |",
491
+ "| `height: 100vh` | `h-screen` |",
492
+ "| `position: absolute` | `absolute` |",
493
+ "| `top: 0; right: 0` | `top-0 right-0` |",
494
+ "| `z-index: 50` | `z-50` |",
495
+ "| `opacity: 0.5` | `opacity-50` |",
496
+ "| `transition: all 0.2s` | `transition-all duration-200` |",
497
+ "",
498
+ "**执行动作**:",
499
+ "1. 对每个自定义 CSS 属性,查上表找对应 utility",
500
+ "2. 如果属性值不在 Tailwind 默认 theme 中(如 `width: 300px`),使用任意值语法:`w-[300px]`",
501
+ "3. 如果是多次使用的任意值,应提取到 theme(参考 theme-migrate 模板)",
502
+ "4. 组合多个属性时,注意 Tailwind 简写形式:",
503
+ " - `margin-top: 1rem; margin-bottom: 1rem` → `my-4`(不是 `mt-4 mb-4`)",
504
+ " - `padding-left: 1rem; padding-right: 1rem` → `px-4`",
505
+ "",
506
+ "**产出格式**:",
507
+ "```",
508
+ "mappings: [",
509
+ " { file: 'Button.css', line: 10-15, custom: 'display: flex; gap: 0.5rem', utility: 'flex gap-2' },",
510
+ " { file: 'Card.css', line: 5, custom: 'padding: 1.5rem', utility: 'p-6' },",
511
+ " ...",
512
+ "]",
513
+ "```",
514
+ ].join("\n"),
515
+ suggestedTools: ["Read"],
516
+ output: "CSS 属性 → Tailwind utility 的映射清单",
517
+ depends: ["scan-custom-css"],
518
+ },
519
+ {
520
+ id: "detect-deprecated",
521
+ title: "检测已弃用的 Tailwind class",
522
+ instruction: [
523
+ "## 检测已弃用的 Tailwind class(v2 → v3 迁移)",
524
+ "",
525
+ "Tailwind v3 废弃了一批 v2 的 class。扫描项目并替换为新 class。",
526
+ "",
527
+ "**执行动作**:",
528
+ "```bash",
529
+ "# 1. 搜索已弃用的 class",
530
+ "grep -rnE '(flex-shrink-0|flex-grow-0|flex-shrink|flex-grow|overflow-scroll|decoration-slice|decoration-clone|decoration-clone|rounded-sm)' src/ --include='*.tsx' --include='*.jsx' --include='*.vue' --include='*.html' | head -30",
531
+ "",
532
+ "# 2. 统计每种弃用 class 的出现次数",
533
+ "grep -rhoE '(flex-shrink-[0-9]+|flex-grow-[0-9]+|flex-shrink|flex-grow|overflow-scroll)' src/ --include='*.tsx' --include='*.jsx' --include='*.vue' --include='*.html' | sort | uniq -c | sort -rn",
534
+ "```",
535
+ "",
536
+ "**弃用对照表**:",
537
+ "| 弃用 class | 替代 class | 说明 |",
538
+ "|-------------------------|-------------------|------|",
539
+ "| `flex-shrink-0` | `shrink-0` | 简写 |",
540
+ "| `flex-shrink` | `shrink` | 简写 |",
541
+ "| `flex-grow-0` | `grow-0` | 简写 |",
542
+ "| `flex-grow` | `grow` | 简写 |",
543
+ "| `overflow-scroll` | `overflow-auto` 或 `overflow-y-scroll` | 语义更明确 |",
544
+ "| `decoration-slice` | `box-decoration-slice` | 重命名 |",
545
+ "| `decoration-clone` | `box-decoration-clone` | 重命名 |",
546
+ "| `rounded-sm` | `rounded-sm` 仍有效,但语义不清 | 建议改为明确值 |",
547
+ "| `ring` 无宽度 | `ring-3` | v3 默认 ring 宽度变为 3px |",
548
+ "",
549
+ "**执行替换**:",
550
+ "```bash",
551
+ "# 批量替换(建议先 dry-run)",
552
+ "find src/ -type f \\( -name '*.tsx' -o -name '*.jsx' -o -name '*.vue' -o -name '*.html' \\) \\",
553
+ " -exec sed -i '' \\",
554
+ " -e 's/\\bflex-shrink-0\\b/shrink-0/g' \\",
555
+ " -e 's/\\bflex-shrink\\b/shrink/g' \\",
556
+ " -e 's/\\bflex-grow-0\\b/grow-0/g' \\",
557
+ " -e 's/\\bflex-grow\\b/grow/g' \\",
558
+ " {} +",
559
+ "```",
560
+ "",
561
+ "**产出格式**:",
562
+ "```",
563
+ "deprecated_classes_found: { 'flex-shrink-0': 15, 'flex-grow': 3 }",
564
+ "replacements_applied: ['shrink-0', 'grow']",
565
+ "files_modified: [list]",
566
+ "```",
567
+ ].join("\n"),
568
+ suggestedTools: ["Bash", "Read"],
569
+ output: "已弃用 class 清单和替换建议",
570
+ depends: ["scan-custom-css"],
571
+ },
572
+ {
573
+ id: "check-arbitrary-values",
574
+ title: "审查任意值是否应提取为 theme",
575
+ instruction: [
576
+ "## 审查任意值 `[...]` 是否应提取为 theme token",
577
+ "",
578
+ "Tailwind 任意值(如 `w-[300px]`、`bg-[#1da1f2]`)方便但不利于设计一致性。",
579
+ "出现 3 次以上的任意值应提取到 theme。",
580
+ "",
581
+ "**执行动作**:",
582
+ "```bash",
583
+ "# 1. 查找所有任意值用法",
584
+ "grep -rhoE '[a-z]+-\\[[^]]+\\]' src/ --include='*.tsx' --include='*.jsx' --include='*.vue' --include='*.html' | sort | uniq -c | sort -rn | head -30",
585
+ "",
586
+ "# 2. 按类别分组统计",
587
+ "grep -rhoE '[a-z]+-\\[[^]]+\\]' src/ | sed -E 's/^([a-z]+)-.*/\\1/' | sort | uniq -c | sort -rn",
588
+ "```",
589
+ "",
590
+ "**判定标准**:",
591
+ "- 出现 ≥ 3 次 → 必须提取到 theme",
592
+ "- 出现 2 次 → 建议提取(看是否为语义 token)",
593
+ "- 出现 1 次 → 保留任意值 OK",
594
+ "",
595
+ "**提取示例**:",
596
+ "",
597
+ "**颜色(`bg-[#1da1f2]` 出现 5 次)**:",
598
+ "```typescript",
599
+ "// tailwind.config.ts",
600
+ "theme: {",
601
+ " extend: {",
602
+ " colors: {",
603
+ " 'twitter-blue': '#1da1f2',",
604
+ " },",
605
+ " },",
606
+ "},",
607
+ "```",
608
+ "替换:`bg-[#1da1f2]` → `bg-twitter-blue`",
609
+ "",
610
+ "**间距(`p-[18px]` 出现 4 次)**:",
611
+ "```typescript",
612
+ "theme: {",
613
+ " extend: {",
614
+ " spacing: {",
615
+ " '18': '18px',",
616
+ " },",
617
+ " },",
618
+ "},",
619
+ "```",
620
+ "替换:`p-[18px]` → `p-18`",
621
+ "",
622
+ "**尺寸(`w-[320px]` 出现 3 次)**:",
623
+ "```typescript",
624
+ "theme: {",
625
+ " extend: {",
626
+ " width: {",
627
+ " 'sidebar': '320px',",
628
+ " },",
629
+ " },",
630
+ "},",
631
+ "```",
632
+ "替换:`w-[320px]` → `w-sidebar`",
633
+ "",
634
+ "**产出格式**:",
635
+ "```",
636
+ "arbitrary_values: {",
637
+ " 'bg-[#1da1f2]': { count: 5, suggest: 'bg-twitter-blue', theme_key: 'colors.twitter-blue' },",
638
+ " 'p-[18px]': { count: 4, suggest: 'p-18', theme_key: 'spacing.18' },",
639
+ " 'w-[320px]': { count: 3, suggest: 'w-sidebar', theme_key: 'width.sidebar' },",
640
+ "}",
641
+ "```",
642
+ ].join("\n"),
643
+ suggestedTools: ["Bash", "Read"],
644
+ output: "任意值使用统计和提取到 theme 的建议",
645
+ depends: ["scan-custom-css"],
646
+ },
647
+ {
648
+ id: "replace-custom",
649
+ title: "用 Tailwind utility 替换自定义 CSS",
650
+ instruction: [
651
+ "## 用 Tailwind utility 替换自定义 CSS",
652
+ "",
653
+ "根据 `match-utility` 步骤产出的映射表,逐一替换。",
654
+ "",
655
+ "**执行动作**:",
656
+ "",
657
+ "**1. 替换 CSS 文件中的 @apply**",
658
+ "原代码:",
659
+ "```css",
660
+ ".card {",
661
+ " @apply bg-white p-6 rounded-lg shadow-sm;",
662
+ "}",
663
+ "```",
664
+ "替换为直接使用 utility:",
665
+ "```tsx",
666
+ "<div className=\"bg-white p-6 rounded-lg shadow-sm\">",
667
+ " ...",
668
+ "</div>",
669
+ "```",
670
+ "",
671
+ "**2. 替换 inline style**",
672
+ "原代码:",
673
+ "```tsx",
674
+ "<div style={{ padding: '1rem', color: '#1a1a1a' }}>",
675
+ "```",
676
+ "替换为:",
677
+ "```tsx",
678
+ "<div className=\"p-4 text-gray-900\">",
679
+ "```",
680
+ "",
681
+ "**3. 删除已清空的 CSS 文件**",
682
+ "```bash",
683
+ "# 找出只剩 import 或空的 CSS 文件",
684
+ "find src/ -name '*.css' -o -name '*.scss' | while read f; do",
685
+ " lines=$(grep -cvE '^\\s*$|^\\s*//' \"$f\")",
686
+ " [ $lines -lt 3 ] && echo \"$f (可删除)\"",
687
+ "done",
688
+ "```",
689
+ "",
690
+ "**4. 替换后验证 class 拼写正确**",
691
+ "```bash",
692
+ "# 查找拼写错误的 class(例如 text-gary 而不是 text-gray)",
693
+ "grep -rhoE 'text-[a-z]+-\\d+|bg-[a-z]+-\\d+|border-[a-z]+-\\d+' src/ | sort -u > /tmp/used_classes.txt",
694
+ "# 与 Tailwind 默认色板对比",
695
+ "```",
696
+ "",
697
+ "**约束**:",
698
+ "- 一次只替换一个文件,便于 git diff 审查",
699
+ "- 不要改变视觉外观——如果替换后样式变了,说明映射错了",
700
+ "- 对于复杂选择器(`.btn > .icon`)可能需要保留部分 CSS",
701
+ "",
702
+ "**产出格式**:",
703
+ "```",
704
+ "replacements_applied: {",
705
+ " 'Button.tsx': 5,",
706
+ " 'Card.tsx': 3,",
707
+ "}",
708
+ "files_modified: ['src/components/Button.tsx', 'src/components/Card.tsx']",
709
+ "files_deleted: ['src/styles/legacy.css']",
710
+ "```",
711
+ ].join("\n"),
712
+ suggestedTools: ["Bash", "Read"],
713
+ output: "替换应用清单:修改/删除的文件列表",
714
+ depends: ["match-utility"],
715
+ },
716
+ {
717
+ id: "build-verify",
718
+ stepTemplate: "build-verify",
719
+ overrides: {
720
+ title: "构建验证(确认 PurgeCSS 正确生成)",
721
+ instruction: [
722
+ "## 构建验证(确认 PurgeCSS 正确生成)",
723
+ "",
724
+ "替换自定义 CSS 后,运行完整构建,确保 Tailwind 正确生成产物。",
725
+ "",
726
+ "**执行动作**:",
727
+ "1. 运行构建:",
728
+ " ```bash",
729
+ " npm run build",
730
+ " ```",
731
+ "2. 检查构建输出中的 CSS 文件体积:",
732
+ " ```bash",
733
+ " ls -lh dist/assets/*.css",
734
+ " ```",
735
+ " - 体积应在合理范围(通常 < 50KB gzip)",
736
+ " - 如果体积异常大,可能是 PurgeCSS 没正确工作",
737
+ "3. 抽样检查生成的 CSS,确认:",
738
+ " - 已替换的 class 在产物中",
739
+ " - 旧自定义 CSS 类名不在产物中",
740
+ " - 无重复或冗余样式",
741
+ "4. 检查 `tailwind.config.ts` 的 `content` 路径是否覆盖了所有源文件目录:",
742
+ " ```typescript",
743
+ " content: ['./src/**/*.{js,ts,jsx,tsx,vue,html}'],",
744
+ " ```",
745
+ "5. 如果构建失败,记录错误信息,返回前面的步骤修复",
746
+ "",
747
+ "**产出格式**:",
748
+ "```",
749
+ "build_success: true | false",
750
+ "css_bundle_size: '32.5 KB (gzip: 8.2 KB)'",
751
+ "purge_working: true | false",
752
+ "errors: [] | [list]",
753
+ "```",
754
+ ].join("\n"),
755
+ },
756
+ depends: ["replace-custom"],
757
+ },
93
758
  ],
94
759
  triggers: [{ type: "cli", command: "audit:utility" }],
95
760
  },
761
+ // ── 主题迁移 ──
96
762
  {
97
763
  name: "theme-migrate",
98
764
  description: "主题迁移:分析现有设计 → 提取 Design Token → 生成配置",
99
- version: "1.0.0",
765
+ version: "2.0.0",
100
766
  steps: [
101
- { id: "extract-tokens", description: "从现有代码/设计稿提取颜色、间距、字体", type: "simple", timeout: 10000 },
102
- { id: "categorize-tokens", description: "分类 Design Token(color/size/typography/shadow)", type: "llm", depends: ["extract-tokens"], timeout: 10000 },
103
- { id: "generate-config", description: "生成 tailwind.config.ts 配置", type: "llm", depends: ["categorize-tokens"], timeout: 10000 },
104
- { id: "replace-hardcoded", description: "替换代码中的硬编码颜色/尺寸为 Tailwind class", type: "llm", depends: ["generate-config"], timeout: 20000 },
105
- { id: "visual-regression", description: "视觉回归测试确认外观一致", type: "simple", depends: ["replace-hardcoded"], timeout: 30000 },
767
+ {
768
+ id: "extract-tokens",
769
+ title: "提取现有设计中的 Design Token",
770
+ instruction: [
771
+ "## 从现有代码/设计稿提取颜色、间距、字体",
772
+ "",
773
+ "扫描项目源代码,找出所有硬编码的设计值。",
774
+ "",
775
+ "**执行动作**:",
776
+ "```bash",
777
+ "# 1. 提取颜色(HEX、RGB、HSL)",
778
+ "grep -rhoE '(#[0-9a-fA-F]{3,8}|rgb\\([0-9, ]+\\)|rgba?\\([0-9., ]+\\)|hsl\\([0-9.,%° ]+\\))' src/ --include='*.tsx' --include='*.jsx' --include='*.vue' --include='*.css' --include='*.scss' | sort | uniq -c | sort -rn | head -30",
779
+ "",
780
+ "# 2. 提取字体大小",
781
+ "grep -rhoE 'font-size:\\s*[0-9]+(px|rem|em)|fontSize:\\s*[\"\\'`]?[0-9]+(px|rem|em)' src/ | sort | uniq -c | sort -rn",
782
+ "",
783
+ "# 3. 提取间距(padding/margin/gap)",
784
+ "grep -rhoE '(padding|margin|gap|top|bottom|left|right):\\s*[0-9]+(px|rem|em)' src/ | sort | uniq -c | sort -rn | head -20",
785
+ "",
786
+ "# 4. 提取圆角",
787
+ "grep -rhoE 'border-radius:\\s*[0-9]+(px|%|rem)' src/ | sort | uniq -c | sort -rn",
788
+ "",
789
+ "# 5. 提取阴影",
790
+ "grep -rhoE 'box-shadow:\\s*[^;]+' src/ | sort | uniq -c | sort -rn | head -10",
791
+ "",
792
+ "# 6. 提取字号和行高",
793
+ "grep -rhoE 'font-size:\\s*[0-9]+(px|rem)|line-height:\\s*[0-9.]+(px|rem|em|%)' src/ | sort | uniq -c | sort -rn | head -20",
794
+ "```",
795
+ "",
796
+ "**产出格式**:",
797
+ "```",
798
+ "colors: { '#1da1f2': 15, '#14171a': 42, '#657786': 28, ... }",
799
+ "spacing: { '16px': 35, '24px': 22, '8px': 18, ... }",
800
+ "font_sizes: { '14px': 30, '16px': 25, '12px': 15, ... }",
801
+ "border_radii: { '4px': 20, '8px': 12, '50%': 8 }",
802
+ "shadows: { '0 2px 4px rgba(0,0,0,0.1)': 10, ... }",
803
+ "```",
804
+ ].join("\n"),
805
+ suggestedTools: ["Bash", "Read"],
806
+ output: "项目中所有硬编码设计值的统计数据",
807
+ },
808
+ {
809
+ id: "categorize-tokens",
810
+ title: "分类 Design Token",
811
+ instruction: [
812
+ "## 分类 Design Token(color / spacing / typography / shadow / radius)",
813
+ "",
814
+ "将提取的原始值按语义分组,决定哪些应成为 theme token。",
815
+ "",
816
+ "**分类规则**:",
817
+ "",
818
+ "**1. 颜色(colors)**",
819
+ "按用途分组:",
820
+ "- **品牌色**:Logo、主按钮、链接(如 Twitter blue)",
821
+ "- **文本色**:主文本、次要文本、禁用文本",
822
+ "- **背景色**:页面背景、卡片背景、悬浮背景",
823
+ "- **边框色**:分割线、输入框边框",
824
+ "- **状态色**:成功(绿)、警告(黄)、错误(红)、信息(蓝)",
825
+ "",
826
+ "**2. 间距(spacing)**",
827
+ "- 找出基础单位(通常 4px 或 8px)",
828
+ "- 其他值应为整数倍:4、8、12、16、24、32、48",
829
+ "- 非整数倍的(如 13px)要问为什么",
830
+ "",
831
+ "**3. 字体(typography)**",
832
+ "- `fontFamily`:标题字体、正文字体、等宽字体",
833
+ "- `fontSize`:xs / sm / base / lg / xl / 2xl / 3xl / 4xl",
834
+ "- `fontWeight`:normal / medium / semibold / bold",
835
+ "- `lineHeight`:tight / snug / normal / relaxed / loose",
836
+ "",
837
+ "**4. 阴影(boxShadow)**",
838
+ "- sm / md / lg / xl 多级",
839
+ "- 命名:`shadow-card`、`shadow-modal` 等语义化",
840
+ "",
841
+ "**5. 圆角(borderRadius)**",
842
+ "- sm / md / lg / xl / full",
843
+ "- 或语义化:`rounded-button`、`rounded-card`",
844
+ "",
845
+ "**判定标准**:",
846
+ "- 出现 ≥ 3 次的值 → 必须成为 token",
847
+ "- 出现 2 次但语义清晰 → 建议成为 token",
848
+ "- 出现 1 次 → 保留为任意值或 Tailwind 默认",
849
+ "",
850
+ "**产出格式**:",
851
+ "```typescript",
852
+ "// 初步的 token 规划",
853
+ "tokens = {",
854
+ " colors: {",
855
+ " brand: { primary: '#1da1f2', secondary: '#14171a' },",
856
+ " text: { primary: '#14171a', secondary: '#657786', disabled: '#aab8c2' },",
857
+ " bg: { default: '#ffffff', muted: '#f5f8fa', elevated: '#ffffff' },",
858
+ " border: { default: '#e1e8ed', strong: '#657786' },",
859
+ " },",
860
+ " spacing: { base: '4px', xs: '4px', sm: '8px', md: '16px', lg: '24px', xl: '32px' },",
861
+ " fontSize: { xs: '12px', sm: '14px', base: '16px', lg: '18px', xl: '20px', '2xl': '24px' },",
862
+ " borderRadius: { sm: '4px', md: '8px', lg: '12px', full: '9999px' },",
863
+ " boxShadow: {",
864
+ " card: '0 2px 4px rgba(0,0,0,0.1)',",
865
+ " modal: '0 8px 16px rgba(0,0,0,0.15)',",
866
+ " },",
867
+ "};",
868
+ "```",
869
+ ].join("\n"),
870
+ suggestedTools: ["Read"],
871
+ output: "按语义分类的 Design Token 结构",
872
+ depends: ["extract-tokens"],
873
+ },
874
+ {
875
+ id: "generate-config",
876
+ title: "生成 tailwind.config.ts 配置",
877
+ instruction: [
878
+ "## 生成 tailwind.config.ts 配置",
879
+ "",
880
+ "将分类好的 Design Token 转换为 `tailwind.config.ts`。",
881
+ "",
882
+ "**执行动作**:",
883
+ "",
884
+ "**1. 创建或更新 tailwind.config.ts**",
885
+ "```typescript",
886
+ "import type { Config } from 'tailwindcss';",
887
+ "",
888
+ "export default {",
889
+ " content: ['./src/**/*.{js,ts,jsx,tsx,vue,html}'],",
890
+ " darkMode: 'class',",
891
+ " theme: {",
892
+ " extend: {",
893
+ " colors: {",
894
+ " brand: {",
895
+ " primary: '#1da1f2',",
896
+ " secondary: '#14171a',",
897
+ " },",
898
+ " text: {",
899
+ " primary: '#14171a',",
900
+ " secondary: '#657786',",
901
+ " disabled: '#aab8c2',",
902
+ " },",
903
+ " bg: {",
904
+ " default: '#ffffff',",
905
+ " muted: '#f5f8fa',",
906
+ " elevated: '#ffffff',",
907
+ " },",
908
+ " border: {",
909
+ " default: '#e1e8ed',",
910
+ " strong: '#657786',",
911
+ " },",
912
+ " },",
913
+ " spacing: {",
914
+ " xs: '0.25rem', // 4px",
915
+ " sm: '0.5rem', // 8px",
916
+ " md: '1rem', // 16px",
917
+ " lg: '1.5rem', // 24px",
918
+ " xl: '2rem', // 32px",
919
+ " '2xl': '3rem', // 48px",
920
+ " },",
921
+ " fontSize: {",
922
+ " xs: ['0.75rem', { lineHeight: '1rem' }],",
923
+ " sm: ['0.875rem', { lineHeight: '1.25rem' }],",
924
+ " base: ['1rem', { lineHeight: '1.5rem' }],",
925
+ " lg: ['1.125rem', { lineHeight: '1.75rem' }],",
926
+ " xl: ['1.25rem', { lineHeight: '1.75rem' }],",
927
+ " '2xl': ['1.5rem', { lineHeight: '2rem' }],",
928
+ " },",
929
+ " borderRadius: {",
930
+ " sm: '0.25rem', // 4px",
931
+ " md: '0.5rem', // 8px",
932
+ " lg: '0.75rem', // 12px",
933
+ " },",
934
+ " boxShadow: {",
935
+ " card: '0 2px 4px rgba(0,0,0,0.1)',",
936
+ " modal: '0 8px 16px rgba(0,0,0,0.15)',",
937
+ " },",
938
+ " },",
939
+ " },",
940
+ " plugins: [],",
941
+ "} satisfies Config;",
942
+ "```",
943
+ "",
944
+ "**2. 验证配置文件语法**",
945
+ "```bash",
946
+ "npx tsc --noEmit tailwind.config.ts",
947
+ "# 或",
948
+ "node -e \"require('./tailwind.config.ts')\"",
949
+ "```",
950
+ "",
951
+ "**3. 运行 Tailwind 测试**",
952
+ "```bash",
953
+ "npx tailwindcss -i src/input.css -o /tmp/test-output.css --minify",
954
+ "```",
955
+ "确认没有报错,且新 token 对应的 utility 能生成。",
956
+ "",
957
+ "**产出格式**:",
958
+ "```",
959
+ "config_file: 'tailwind.config.ts'",
960
+ "new_tokens_count: { colors: 12, spacing: 6, fontSize: 6, borderRadius: 3, boxShadow: 2 }",
961
+ "content_paths: ['./src/**/*.{js,ts,jsx,tsx,vue,html}']",
962
+ "dark_mode: 'class'",
963
+ "```",
964
+ ].join("\n"),
965
+ suggestedTools: ["Read", "Bash"],
966
+ output: "tailwind.config.ts 配置文件",
967
+ depends: ["categorize-tokens"],
968
+ },
969
+ {
970
+ id: "replace-hardcoded",
971
+ title: "替换硬编码值为 Tailwind class",
972
+ instruction: [
973
+ "## 替换代码中的硬编码颜色/尺寸为 Tailwind class",
974
+ "",
975
+ "根据新生成的 `tailwind.config.ts`,将源代码中的硬编码值替换为语义化 class。",
976
+ "",
977
+ "**执行动作**:",
978
+ "",
979
+ "**1. 替换颜色**",
980
+ "```bash",
981
+ "# 查找所有硬编码颜色",
982
+ "grep -rnE '(#[0-9a-fA-F]{3,8}|rgb\\([0-9, ]+\\))' src/ --include='*.tsx' --include='*.jsx' --include='*.vue' --include='*.css' | head -50",
983
+ "```",
984
+ "替换示例:",
985
+ "```",
986
+ "color: #1da1f2 → text-brand-primary",
987
+ "background: #fff → bg-bg-default",
988
+ "border-color: #e1e8ed → border-border-default",
989
+ "```",
990
+ "",
991
+ "**2. 替换间距**",
992
+ "```bash",
993
+ "grep -rnE '(padding|margin|gap|top|left|right|bottom):\\s*[0-9]+px' src/ --include='*.tsx' --include='*.jsx' --include='*.vue' --include='*.css' | head -50",
994
+ "```",
995
+ "替换示例:",
996
+ "```",
997
+ "padding: 16px → p-md (或 p-4 如果用默认 spacing)",
998
+ "margin-top: 8px → mt-sm (或 mt-2)",
999
+ "gap: 24px → gap-lg (或 gap-6)",
1000
+ "```",
1001
+ "",
1002
+ "**3. 替换字体大小**",
1003
+ "```bash",
1004
+ "grep -rnE 'font-size:\\s*[0-9]+(px|rem)' src/ --include='*.tsx' --include='*.jsx' --include='*.vue' --include='*.css' | head -30",
1005
+ "```",
1006
+ "替换示例:",
1007
+ "```",
1008
+ "font-size: 14px → text-sm",
1009
+ "font-size: 16px → text-base",
1010
+ "font-size: 24px → text-2xl",
1011
+ "```",
1012
+ "",
1013
+ "**4. 替换圆角和阴影**",
1014
+ "```",
1015
+ "border-radius: 8px → rounded-md",
1016
+ "box-shadow: 0 2px 4px rgba(0,0,0,0.1) → shadow-card",
1017
+ "```",
1018
+ "",
1019
+ "**5. 替换后检查**",
1020
+ "```bash",
1021
+ "# 确认没有遗漏的硬编码值",
1022
+ "grep -rnE '(#[0-9a-fA-F]{3,8}|[0-9]+px)' src/ --include='*.tsx' --include='*.jsx' --include='*.vue' --include='*.css' | grep -vE '(node_modules|dist|.test.)' | head -20",
1023
+ "```",
1024
+ "",
1025
+ "**约束**:",
1026
+ "- 每次替换后检查视觉外观是否一致",
1027
+ "- 不要替换测试文件和 mock 数据中的值",
1028
+ "- 保留 Tailwind 默认 scale 能覆盖的值(如 `16px` → `p-4`),不要硬用自定义 spacing",
1029
+ "",
1030
+ "**产出格式**:",
1031
+ "```",
1032
+ "replacements: {",
1033
+ " colors: { count: 42, files: 15 },",
1034
+ " spacing: { count: 28, files: 12 },",
1035
+ " fontSize: { count: 18, files: 10 },",
1036
+ " borderRadius: { count: 8, files: 5 },",
1037
+ " boxShadow: { count: 4, files: 3 },",
1038
+ "}",
1039
+ "remaining_hardcoded: [list of files and values not replaced]",
1040
+ "```",
1041
+ ].join("\n"),
1042
+ suggestedTools: ["Bash", "Read"],
1043
+ output: "硬编码值替换统计和剩余未替换清单",
1044
+ depends: ["generate-config"],
1045
+ },
1046
+ {
1047
+ id: "visual-regression",
1048
+ stepTemplate: "run-tests",
1049
+ overrides: {
1050
+ title: "视觉回归测试确认外观一致",
1051
+ instruction: [
1052
+ "## 视觉回归测试确认外观一致",
1053
+ "",
1054
+ "主题迁移后必须确认视觉外观未变。",
1055
+ "",
1056
+ "**执行动作**:",
1057
+ "",
1058
+ "**1. 运行现有视觉测试**",
1059
+ "```bash",
1060
+ "# 如果有 Playwright / Cypress / Percy 等视觉回归测试",
1061
+ "npm run test:visual",
1062
+ "```",
1063
+ "",
1064
+ "**2. 运行单元测试和 E2E 测试**",
1065
+ "```bash",
1066
+ "npm run test",
1067
+ "npm run test:e2e",
1068
+ "```",
1069
+ "确认功能未被破坏。",
1070
+ "",
1071
+ "**3. 手动对比截图**",
1072
+ "如果没有自动化视觉测试,启动开发服务器手动检查:",
1073
+ "```bash",
1074
+ "npm run dev",
1075
+ "```",
1076
+ "在浏览器中打开主要页面,对比迁移前后截图:",
1077
+ "- 颜色是否一致(特别是主题色、背景色、文本色)",
1078
+ "- 间距是否一致(组件之间的留白)",
1079
+ "- 字号和行高是否一致",
1080
+ "- 圆角和阴影是否一致",
1081
+ "- 暗色模式是否正确应用",
1082
+ "- 响应式断点下是否正确",
1083
+ "",
1084
+ "**4. 检查 Tailwind 生成的 CSS**",
1085
+ "```bash",
1086
+ "# 构建并检查 CSS 体积",
1087
+ "npm run build",
1088
+ "ls -lh dist/assets/*.css",
1089
+ "",
1090
+ "# 抽样检查 CSS 中是否包含新 token 对应的 utility",
1091
+ "grep -E '(brand-primary|text-secondary|bg-muted)' dist/assets/*.css | head -10",
1092
+ "```",
1093
+ "",
1094
+ "**5. 常见差异排查**",
1095
+ "- 颜色略有色差:检查 HEX 大小写、RGB 值是否精确",
1096
+ "- 间距变大/变小:可能 Tailwind 默认 scale 与原值不同,使用 `theme.extend.spacing` 覆盖",
1097
+ "- 字体渲染不同:检查 `fontFamily` 是否正确包含 fallback",
1098
+ "- 阴影缺失:检查 `boxShadow` token 的透明度值",
1099
+ "",
1100
+ "**产出格式**:",
1101
+ "```",
1102
+ "visual_tests_passed: true | false",
1103
+ "unit_tests_passed: true | false",
1104
+ "e2e_tests_passed: true | false",
1105
+ "css_bundle_size: '32.5 KB (gzip: 8.2 KB)'",
1106
+ "visual_diff_found: [] | [list of issues]",
1107
+ "issues_fixed: [list] | 'all'",
1108
+ "```",
1109
+ ].join("\n"),
1110
+ },
1111
+ depends: ["replace-hardcoded"],
1112
+ },
106
1113
  ],
107
1114
  triggers: [{ type: "cli", command: "migrate:theme" }],
108
1115
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/plugin-tailwind",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -17,7 +17,7 @@
17
17
  "clean": "rm -rf dist"
18
18
  },
19
19
  "dependencies": {
20
- "@devflow-tools/sdk": "^0.4.0"
20
+ "@devflow-tools/sdk": "^0.5.0"
21
21
  },
22
22
  "devDependencies": {
23
23
  "typescript": "^5.5.0",
@@ -26,5 +26,5 @@
26
26
  "files": [
27
27
  "dist"
28
28
  ],
29
- "gitHead": "c76bcf3a2bb8ac12b871738d6661979eb45090c6"
29
+ "gitHead": "431c0f26e14d476c08d543ef5cd65367413dbc98"
30
30
  }