# Design System
完整的设计系统,提供可复用的 UI 组件和设计令牌,确保整个应用的一致性。
## 目录结构
```
src/design-system/
├── tokens/ # 设计令牌(颜色、间距、字体等)
├── lib/ # 工具函数
├── base/ # 基础组件
│ ├── button/
│ ├── input/
│ ├── textarea/
│ ├── card/
│ ├── checkbox/
│ ├── radio/
│ ├── switch/
│ └── select/
├── feedback/ # 反馈组件
│ ├── alert/
│ ├── progress/
│ ├── skeleton/
│ └── toast/
├── overlay/ # 覆盖组件
│ └── modal/
├── data-display/ # 数据展示组件
│ ├── badge/
│ └── divider/
├── layout/ # 布局组件
│ ├── container/
│ ├── grid/
│ └── stack/
├── navigation/ # 导航组件
│ └── tabs/
```
## 快速开始
### 安装依赖
```bash
pnpm add class-variance-authority clsx tailwind-merge
```
### 导入组件
```tsx
// 使用显式导入以获得更好的 tree-shaking
import { Button } from '@/design-system/base/button';
import { Input } from '@/design-system/base/input';
import { Card } from '@/design-system/base/card';
```
### 使用组件
```tsx
import { Button } from '@/design-system/base/button';
import { Card } from '@/design-system/base/card';
export function MyComponent() {
return (
标题
内容
);
}
```
## 组件列表
### 基础组件
| 组件 | 说明 | 状态 |
|------|------|------|
| [Button](#button) | 按钮 | ✅ |
| [Input](#input) | 输入框 | ✅ |
| [Textarea](#textarea) | 多行文本输入 | ✅ |
| [Card](#card) | 卡片容器 | ✅ |
| [Checkbox](#checkbox) | 复选框 | ✅ |
| [Radio](#radio) | 单选按钮 | ✅ |
| [Switch](#switch) | 开关 | ✅ |
| [Select](#select) | 下拉选择框 | ✅ |
### 反馈组件
| 组件 | 说明 | 状态 |
|------|------|------|
| [Alert](#alert) | 警告提示 | ✅ |
| [Progress](#progress) | 进度条 | ✅ |
| [Skeleton](#skeleton) | 骨架屏 | ✅ |
| [Toast](#toast) | 通知提示 | ✅ |
### 覆盖组件
| 组件 | 说明 | 状态 |
|------|------|------|
| [Modal](#modal) | 模态框 | ✅ |
### 数据展示组件
| 组件 | 说明 | 状态 |
|------|------|------|
| [Badge](#badge) | 徽章 | ✅ |
| [Divider](#divider) | 分隔线 | ✅ |
### 布局组件
| 组件 | 说明 | 状态 |
|------|------|------|
| [Container](#container) | 容器 | ✅ |
| [Grid](#grid) | 网格布局 | ✅ |
| [Stack](#stack) | 堆叠布局 | ✅ |
### 导航组件
| 组件 | 说明 | 状态 |
|------|------|------|
| [Tabs](#tabs) | 标签页 | ✅ |
## 组件 API
### Button
按钮组件,支持多种变体和尺寸。
```tsx
import { Button } from '@/design-system/base/button';
```
**变体 (variant)**: `primary` | `secondary` | `success` | `warning` | `error` | `ghost` | `outline` | `link`
**尺寸 (size)**: `sm` | `md` | `lg`
**快捷组件**: `PrimaryButton`, `SecondaryButton`, `SuccessButton`, `WarningButton`, `ErrorButton`, `GhostButton`, `OutlineButton`, `LinkButton`
### Input
输入框组件。
```tsx
import { Input } from '@/design-system/base/input';
```
**变体 (variant)**: `default` | `bordered` | `filled` | `search`
**尺寸 (size)**: `sm` | `md` | `lg`
### Textarea
多行文本输入组件。
```tsx
import { Textarea } from '@/design-system/base/textarea';
```
**变体 (variant)**: `default` | `bordered` | `filled`
### Card
卡片容器组件。
```tsx
import { Card, CardHeader, CardTitle, CardBody, CardFooter } from '@/design-system/base/card';
标题
内容
```
**变体 (variant)**: `default` | `bordered` | `elevated` | `flat`
**内边距 (padding)**: `none` | `xs` | `sm` | `md` | `lg` | `xl`
### Checkbox
复选框组件。
```tsx
import { Checkbox } from '@/design-system/base/checkbox';
同意条款
```
### Radio
单选按钮组件。
```tsx
import { Radio, RadioGroup } from '@/design-system/base/radio';
选项 1
选项 2
```
### Switch
开关组件。
```tsx
import { Switch } from '@/design-system/base/switch';
```
### Alert
警告提示组件。
```tsx
import { Alert } from '@/design-system/feedback/alert';
操作成功完成
```
**变体 (variant)**: `info` | `success` | `warning` | `error`
### Progress
进度条组件。
```tsx
import { Progress } from '@/design-system/feedback/progress';
```
### Skeleton
骨架屏组件。
```tsx
import { Skeleton, TextSkeleton, CardSkeleton } from '@/design-system/feedback/skeleton';
```
### Toast
通知提示组件(基于 sonner)。
```tsx
import { toast } from '@/design-system/feedback/toast';
toast.success("操作成功!");
toast.error("发生错误");
toast.promise(promise, {
loading: "加载中...",
success: "加载成功",
error: "加载失败",
});
```
### Modal
模态框组件。
```tsx
import { Modal } from '@/design-system/overlay/modal';
setOpen(false)}>
标题
内容
```
### Badge
徽章组件。
```tsx
import { Badge } from '@/design-system/data-display/badge';
成功
```
**变体 (variant)**: `default` | `primary` | `success` | `warning` | `error` | `info`
### Divider
分隔线组件。
```tsx
import { Divider } from '@/design-system/data-display/divider';
或者
```
### Container
容器组件。
```tsx
import { Container } from '@/design-system/layout/container';
内容
```
### Grid
网格布局组件。
```tsx
import { Grid } from '@/design-system/layout/grid';
项目 1
项目 2
项目 3
```
### Stack
堆叠布局组件。
```tsx
import { Stack, VStack, HStack } from '@/design-system/layout/stack';
项目 1
项目 2
```
### Tabs
标签页组件。
```tsx
import { Tabs } from '@/design-system/navigation/tabs';
标签 1
标签 2
内容 1
内容 2
```
## 设计令牌
### 颜色
```tsx
import { colors } from '@/design-system/tokens';
// 主色
colors.primary.500 // #35786f
// 语义色
colors.success.500 // #22c55e
colors.warning.500 // #f59e0b
colors.error.500 // #ef4444
colors.info.500 // #3b82f6
```
在组件中使用:
```tsx
主色背景
成功文本
```
### 间距
基于 8pt 网格系统:
```tsx
// 16px
// 24px
// 32px
```
### 字体
```tsx
小文本
正常文本
大文本
半粗体
粗体
```
### 圆角
```tsx
// 8px
// 12px
// 16px
```
### 阴影
```tsx