# @cherrystudio/ui
Cherry Studio UI 组件库 - 为 Cherry Studio 设计的 React 组件集合
## ✨ 特性
- 🎨 **设计系统**: 完整的 CherryStudio 设计令牌(17种颜色 × 11个色阶 + 语义化主题)
- 🌓 **Dark Mode**: 开箱即用的深色模式支持
- 🚀 **Tailwind v4**: 基于最新 Tailwind CSS v4 构建
- 📦 **灵活导入**: 2种样式导入方式,满足不同使用场景
- 🔷 **TypeScript**: 完整的类型定义和智能提示
- 🎯 **零冲突**: CSS 变量隔离,不覆盖用户主题
---
## 🚀 快速开始
### 安装
```bash
npm install @cherrystudio/ui
# peer dependencies
npm install @heroui/react framer-motion react react-dom tailwindcss
```
### 两种使用方式
#### 方式 1:完整覆盖 ✨
使用完整的 CherryStudio 设计系统,所有 Tailwind 类名映射到设计系统。
```css
/* app.css */
@import '@cherrystudio/ui/styles/theme.css';
```
**特点**:
- ✅ 直接使用标准 Tailwind 类名(`bg-primary`、`bg-red-500`、`p-md`、`rounded-lg`)
- ✅ 所有颜色使用设计师定义的值
- ✅ 扩展的 Spacing 系统(`p-5xs` ~ `p-8xl`,共 16 个语义化尺寸)
- ✅ 扩展的 Radius 系统(`rounded-4xs` ~ `rounded-3xl`,共 11 个圆角)
- ⚠️ 会完全覆盖 Tailwind 默认主题
**示例**:
```tsx
{/* 扩展的工具类 */}
最小间距 (0.5rem)
超小间距 (1rem)
小间距 (1.5rem)
中等间距 (2.5rem)
大间距 (3.5rem)
超大间距 (5rem)
最大间距 (15rem)
最小圆角 (0.25rem)
小圆角 (1rem)
中等圆角 (2rem)
大圆角 (3rem)
完全圆角 (999px)
```
#### 方式 2:选择性覆盖 🎯
只导入设计令牌(CSS 变量),手动选择要覆盖的部分。
```css
/* app.css */
@import 'tailwindcss';
@import '@cherrystudio/ui/styles/tokens.css';
/* 只使用部分设计系统 */
@theme {
--color-primary: var(--cs-primary); /* 使用 CS 的主色 */
--color-red-500: oklch(...); /* 使用自己的红色 */
--spacing-md: var(--cs-size-md); /* 使用 CS 的间距 */
--radius-lg: 1rem; /* 使用自己的圆角 */
}
```
**特点**:
- ✅ 不覆盖任何 Tailwind 默认主题
- ✅ 通过 CSS 变量访问所有设计令牌(`var(--cs-primary)`、`var(--cs-red-500)`)
- ✅ 精细控制哪些使用 CS、哪些保持原样
- ✅ 适合有自己设计系统但想借用部分 CS 设计令牌的场景
**示例**:
```tsx
{/* 通过 CSS 变量使用 CS 设计令牌 */}
{/* 保持原有的 Tailwind 类名不受影响 */}
使用 Tailwind 默认的红色
{/* 可用的 CSS 变量 */}
```
### Provider 配置
在你的 App 根组件中添加 HeroUI Provider:
```tsx
import { HeroUIProvider } from '@heroui/react'
function App() {
return (
{/* 你的应用内容 */}
)
}
```
## 使用
### 基础组件
```tsx
import { Button, Input } from '@cherrystudio/ui'
function App() {
return (
console.log(value)}
/>
)
}
```
### 分模块导入
```tsx
// 只导入组件
import { Button } from '@cherrystudio/ui/components'
// 只导入工具函数
import { cn, formatFileSize } from '@cherrystudio/ui/utils'
```
## 开发
```bash
# 安装依赖
yarn install
# 开发模式(监听文件变化)
yarn dev
# 构建
yarn build
# 类型检查
yarn type-check
# 运行测试
yarn test
```
## 目录结构
```text
src/
├── components/ # React 组件
│ ├── Button/ # 按钮组件
│ ├── Input/ # 输入框组件
│ └── index.ts # 组件导出
├── hooks/ # React Hooks
├── utils/ # 工具函数
├── types/ # 类型定义
└── index.ts # 主入口文件
```
## 组件列表
### Button 按钮
支持多种变体和尺寸的按钮组件。
**Props:**
- `variant`: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'
- `size`: 'sm' | 'md' | 'lg'
- `loading`: boolean
- `fullWidth`: boolean
- `leftIcon` / `rightIcon`: React.ReactNode
### Input 输入框
带有错误处理和密码显示切换的输入框组件。
**Props:**
- `type`: 'text' | 'password' | 'email' | 'number'
- `error`: boolean
- `errorMessage`: string
- `onChange`: (value: string) => void
## Hooks
### useDebounce
防抖处理,延迟执行状态更新。
### useLocalStorage
本地存储的 React Hook 封装。
### useClickOutside
检测点击元素外部区域。
### useCopyToClipboard
复制文本到剪贴板。
## 工具函数
### cn(...inputs)
基于 clsx 的类名合并工具,支持条件类名。
### formatFileSize(bytes)
格式化文件大小显示。
### debounce(func, delay)
防抖函数。
### throttle(func, delay)
节流函数。
## 许可证
MIT