@pipi-kit/ui 1.0.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 pipi-kit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,313 @@
1
+ # @pipi-kit/ui
2
+
3
+ > 基于 React、shadcn、@radix-ui、lucide-react、Tailwind v4 开发的主题化 UI 组件库
4
+
5
+ ## 💡 特别说明
6
+
7
+ **适配 nextify-coo 项目**:
8
+ - 统一从主入口导入: `import { Button, Input } from '@pipi-kit/ui'`
9
+ - 使用主项目的 CSS 变量和样式定义(globals.css)
10
+ - 零配置迁移,只需替换导入路径
11
+
12
+ ## 🎯 核心理念
13
+
14
+ **组件库不"定义美",只"定义能力"**
15
+
16
+ @pipi-kit/ui 是一个基于 Tailwind CSS v4 和 CSS 变量的组件库,它提供:
17
+ - ✅ 组件结构
18
+ - ✅ 交互行为
19
+ - ✅ 可访问性 (A11y)
20
+ - ✅ 通过 globals.css 中的 CSS 变量实现主题化
21
+
22
+ 所有的样式、主题、设计 Token 都通过 **globals.css 中的 CSS 变量** 和 **Tailwind 工具类** 定义。
23
+
24
+ ## 📦 安装
25
+
26
+ ```bash
27
+ npm install @pipi-kit/ui
28
+ # 或
29
+ pnpm add @pipi-kit/ui
30
+ # 或
31
+ yarn add @pipi-kit/ui
32
+ ```
33
+
34
+ ### 必需的依赖
35
+
36
+ 确保你的项目已安装以下依赖:
37
+
38
+ ```bash
39
+ npm install react react-dom tailwindcss @radix-ui/react-slot
40
+ ```
41
+
42
+ ## 🚀 快速开始
43
+
44
+ ### 1. 配置 Tailwind CSS v4
45
+
46
+ 在你的 `tailwind.config.ts` 中添加组件库路径:
47
+
48
+ ```typescript
49
+ import type { Config } from 'tailwindcss'
50
+
51
+ export default {
52
+ content: [
53
+ './src/**/*.{ts,tsx}',
54
+ // 重要: 必须扫描组件库的文件
55
+ './node_modules/@pipi-kit/ui/**/*.{js,mjs}',
56
+ ],
57
+ // ... 其他配置
58
+ } satisfies Config
59
+ ```
60
+
61
+ ### 2. 定义组件样式
62
+
63
+ 在你的主 CSS 文件 (如 `app.css` 或 `globals.css`) 中定义 CSS 变量:
64
+
65
+ ```css
66
+ @import "tailwindcss";
67
+
68
+ @layer base {
69
+ :root {
70
+ /* 主题色 */
71
+ --primary: #095EDC;
72
+ --shade-1: #FFFFFF;
73
+ --shade-5: #E2E2E2;
74
+ --shade-10: #121212;
75
+
76
+ /* 更多 CSS 变量... */
77
+ }
78
+ }
79
+
80
+ @theme {
81
+ /* Tailwind 颜色映射 */
82
+ --color-primary: var(--primary);
83
+ --color-shade-1: var(--shade-1);
84
+ --color-shade-5: var(--shade-5);
85
+ --color-shade-10: var(--shade-10);
86
+ }
87
+ ```
88
+
89
+ 完整的样式示例请参考 [demo/globals.css](./demo/globals.css)
90
+
91
+ ### 3. 使用组件
92
+
93
+ ```tsx
94
+ import { Button } from '@pipi-kit/ui'
95
+
96
+ function App() {
97
+ return (
98
+ <Button variant="primary" size="md">
99
+ 点击我
100
+ </Button>
101
+ )
102
+ }
103
+ ```
104
+
105
+ ## 📚 组件列表 (共 47 个)
106
+
107
+ ### 基础组件 (16个)
108
+ - `Button` - 按钮
109
+ - `Input` - 输入框
110
+ - `Label` - 标签
111
+ - `Badge` - 徽章
112
+ - `Checkbox` - 复选框
113
+ - `Switch` - 开关
114
+ - `Slider` - 滑块
115
+ - `Progress` - 进度条
116
+ - `Textarea` - 文本域
117
+ - `RadioGroup` - 单选按钮组
118
+ - `Separator` - 分隔线
119
+ - `Skeleton` - 骨架屏
120
+ - `Avatar` - 头像
121
+ - `AspectRatio` - 宽高比容器
122
+ - `ScrollArea` - 滚动区域
123
+ - `VisuallyHidden` - 视觉隐藏
124
+
125
+ ### Radix 封装组件 (13个)
126
+ - `Dialog` - 对话框
127
+ - `Select` - 下拉选择器
128
+ - `Popover` - 气泡弹出框
129
+ - `Tooltip` - 工具提示
130
+ - `HoverCard` - 悬停卡片
131
+ - `Sheet` - 侧边抽屉
132
+ - `Drawer` - 底部抽屉
133
+ - `AlertDialog` - 警告对话框
134
+ - `Toggle` - 切换按钮
135
+ - `ToggleGroup` - 切换按钮组
136
+ - `Collapsible` - 折叠面板
137
+ - `ContextMenu` - 右键菜单
138
+ - `DropdownMenu` - 下拉菜单
139
+
140
+ ### 反馈组件 (4个)
141
+ - `Alert` - 警告提示
142
+ - `Toast` - Toast 通知
143
+ - `Toaster` - Toast 容器
144
+ - `Sonner` - Sonner Toast
145
+
146
+ ### 数据展示组件 (4个)
147
+ - `Card` - 卡片
148
+ - `Table` - 表格
149
+ - `Tabs` - 标签页
150
+ - `Accordion` - 手风琴
151
+
152
+ ### 导航组件 (5个)
153
+ - `Breadcrumb` - 面包屑
154
+ - `NavigationMenu` - 导航菜单
155
+ - `Menubar` - 菜单栏
156
+ - `Sidebar` - 侧边栏
157
+ - `Pagination` - 分页
158
+
159
+ ### 复杂组件 (5个)
160
+ - `Command` - 命令面板
161
+ - `Calendar` - 日历
162
+ - `Carousel` - 轮播图
163
+ - `Form` - 表单
164
+ - `Resizable` - 可调整大小的面板
165
+
166
+ ## 🎨 设计原则
167
+
168
+ ### 1. 主题化设计原则
169
+
170
+ 组件库基于 globals.css 中的 CSS 变量实现主题化:
171
+ - ✅ 使用 CSS 变量定义颜色、间距、圆角等
172
+ - ✅ 使用 Tailwind 工具类组合样式
173
+ - ✅ 使用 CVA (Class Variance Authority) 管理样式变体
174
+ - ✅ 支持亮色/暗色主题切换
175
+
176
+ 组件库**不包含**:
177
+ - ❌ 硬编码的颜色值如 `bg-[#xxxxxx]`
178
+ - ❌ BEM 类名如 `ui-button__element`
179
+
180
+ ### 2. shadcn 风格一致性
181
+
182
+ - 单组件 = 单文件夹
183
+ - API 简洁、语义稳定
184
+ - 可复制、可发布
185
+
186
+ ### 3. Headless + Radix 驱动
187
+
188
+ - 复杂交互基于 Radix UI
189
+ - 无障碍访问 (A11y) 内置
190
+ - 保持原生 HTML 语义
191
+
192
+ ## 🔧 组件 API
193
+
194
+ ### Button
195
+
196
+ ```tsx
197
+ interface ButtonProps {
198
+ variant?: 'primary' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'link'
199
+ size?: 'sm' | 'md' | 'lg' | 'icon'
200
+ asChild?: boolean
201
+ loading?: boolean
202
+ }
203
+ ```
204
+
205
+ **示例:**
206
+
207
+ ```tsx
208
+ // 基本用法
209
+ <Button variant="primary">提交</Button>
210
+
211
+ // 加载状态
212
+ <Button loading>加载中...</Button>
213
+
214
+ // asChild 模式 (渲染为 Link)
215
+ <Button asChild>
216
+ <Link href="/home">回到首页</Link>
217
+ </Button>
218
+ ```
219
+
220
+ ### Input
221
+
222
+ ```tsx
223
+ interface InputProps {
224
+ prependIcon?: React.ReactNode
225
+ suffixIcon?: React.ReactNode
226
+ }
227
+ ```
228
+
229
+ **示例:**
230
+
231
+ ```tsx
232
+ import { Input } from '@pipi-kit/ui'
233
+ import { Search } from 'lucide-react'
234
+
235
+ // 带图标
236
+ <Input
237
+ prependIcon={<Search />}
238
+ placeholder="搜索..."
239
+ />
240
+
241
+ // 密码输入框 (自动显示/隐藏切换)
242
+ <Input type="password" />
243
+ ```
244
+
245
+ ### Dialog
246
+
247
+ ```tsx
248
+ <Dialog>
249
+ <DialogTrigger asChild>
250
+ <Button>打开对话框</Button>
251
+ </DialogTrigger>
252
+ <DialogContent>
253
+ <DialogHeader>
254
+ <DialogTitle>标题</DialogTitle>
255
+ <DialogDescription>描述文字</DialogDescription>
256
+ </DialogHeader>
257
+ <div>内容区域</div>
258
+ <DialogFooter>
259
+ <Button>确定</Button>
260
+ </DialogFooter>
261
+ </DialogContent>
262
+ </Dialog>
263
+ ```
264
+
265
+ ## 🎯 Variant 设计规范
266
+
267
+ ### ✅ 允许的 Variant
268
+
269
+ - **语义化变体**: `primary` / `secondary` / `destructive`
270
+ - **通用尺寸**: `sm` / `md` / `lg` / `icon`
271
+ - **通用样式**: `outline` / `ghost` / `link`
272
+
273
+ ### ❌ 禁止的 Variant
274
+
275
+ - **业务语义**: `submit` / `price` / `chrome`
276
+ - **页面专属**: `header` / `sidebar`
277
+ - **产品线**: `enterprise` / `pro`
278
+ - **颜色名**: `blue` / `red` / `green`
279
+
280
+ ## 📖 完整示例
281
+
282
+ 查看 [demo](./demo) 目录获取:
283
+ - `globals.css` - 完整的 CSS 变量定义和主题配置示例
284
+
285
+ ## 🚀 发布到 npm
286
+
287
+ ```bash
288
+ # 构建
289
+ npm run build
290
+
291
+ # 发布
292
+ npm publish --access public
293
+ ```
294
+
295
+ ## 📄 许可证
296
+
297
+ MIT
298
+
299
+ ## 🤝 贡献
300
+
301
+ 欢迎提交 Issue 和 Pull Request!
302
+
303
+ ### 贡献指南
304
+
305
+ 1. 确保所有组件遵循"样式外置"原则
306
+ 2. 使用 `forwardRef` 和 `asChild` 支持
307
+ 3. 添加完整的 TypeScript 类型
308
+ 4. 保持可访问性 (A11y) 标准
309
+ 5. 不要包含任何硬编码样式
310
+
311
+ ---
312
+
313
+ **记住:** 组件库不"定义美",只"定义能力";美,永远交给项目。