docs: 更新 AGENTS.md 知识库,新增模块/管道/设计系统文档

This commit is contained in:
2026-03-08 11:32:31 +08:00
parent 91c59c3ad9
commit ff57f5e0a5
4 changed files with 399 additions and 18 deletions

View File

@@ -0,0 +1,83 @@
# 设计系统指南
**生成时间:** 2026-03-08
## 概述
基于 CVA 的可复用 UI 组件库,与业务组件分离。
## 组件分类
| 类别 | 路径 | 组件 |
|------|------|------|
| 基础 | `base/` | button, input, card, checkbox, radio, switch, select, textarea, range |
| 反馈 | `feedback/` | alert, progress, skeleton, toast |
| 布局 | `layout/` | container, grid, stack (VStack, HStack) |
| 覆盖层 | `overlay/` | modal |
| 导航 | `navigation/` | tabs |
## CVA 模式
```tsx
import { cva, type VariantProps } from "class-variance-authority";
const buttonVariants = cva("base-styles", {
variants: {
variant: { primary: "...", secondary: "...", ghost: "..." },
size: { sm: "...", md: "...", lg: "..." },
},
defaultVariants: { variant: "secondary", size: "md" },
});
export type ButtonVariant = VariantProps<typeof buttonVariants>["variant"];
```
## 组件模板
```tsx
"use client";
import { forwardRef } from "react";
import { cn } from "@/design-system/lib/utils";
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
({ className, variant, size, leftIcon, rightIcon, children, ...props }, ref) => (
<button ref={ref} className={cn(buttonVariants({ variant, size }), className)} {...props}>
{leftIcon && <span className="mr-2">{leftIcon}</span>}
{children}
{rightIcon && <span className="ml-2">{rightIcon}</span>}
</button>
)
);
Button.displayName = "Button";
export const PrimaryButton = (props: Omit<ButtonProps, "variant">) => <Button variant="primary" {...props} />;
```
## 复合组件
```tsx
<Card variant="bordered"><CardHeader><CardTitle>标题</CardTitle></CardHeader><CardBody>内容</CardBody></Card>
<Modal open={isOpen}><Modal.Header><Modal.Title>标题</Modal.Title></Modal.Header><Modal.Body>内容</Modal.Body></Modal>
```
## 导入方式
```tsx
// ✅ 显式导入
import { Button } from "@/design-system/base/button";
import { Card, CardHeader, CardTitle, CardBody } from "@/design-system/base/card";
// ❌ 不要创建 barrel export
```
## 工具函数
```tsx
import { cn } from "@/design-system/lib/utils";
<div className={cn("base", condition && "conditional", className)} />
```
## 添加新组件
1. 确定类别目录
2. 创建 `{name}.tsx`,使用 CVA 定义变体
3. 添加 `"use client"` + `forwardRef` + `displayName`
4. 导出组件、变体类型、快捷组件