@openconsole/shadcn 0.0.0 → 0.0.1
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/accordion.tsx +66 -66
- package/alert-dialog.tsx +196 -196
- package/alert.tsx +66 -66
- package/aspect-ratio.tsx +11 -11
- package/avatar.tsx +53 -53
- package/badge.tsx +46 -46
- package/breadcrumb.tsx +109 -109
- package/button-group.tsx +83 -83
- package/button.tsx +60 -60
- package/calendar.tsx +219 -219
- package/card.tsx +92 -92
- package/carousel.tsx +241 -241
- package/chart.tsx +374 -374
- package/checkbox.tsx +32 -32
- package/collapsible.tsx +33 -33
- package/command.tsx +184 -184
- package/context-menu.tsx +252 -252
- package/dialog.tsx +143 -143
- package/direction.tsx +22 -22
- package/drawer.tsx +135 -135
- package/dropdown-menu.tsx +257 -257
- package/empty.tsx +104 -104
- package/field.tsx +248 -248
- package/form.tsx +167 -167
- package/hooks/index.ts +1 -1
- package/hooks/use-mobile.ts +19 -19
- package/hover-card.tsx +44 -44
- package/icon.tsx +21 -21
- package/index.ts +59 -59
- package/input-group.tsx +170 -170
- package/input-otp.tsx +77 -77
- package/input.tsx +21 -21
- package/item.tsx +193 -193
- package/kbd.tsx +28 -28
- package/label.tsx +24 -24
- package/lib/index.ts +1 -1
- package/lib/utils.ts +6 -6
- package/menubar.tsx +276 -276
- package/native-select.tsx +62 -62
- package/navigation-menu.tsx +168 -168
- package/package.json +10 -2
- package/pagination.tsx +127 -127
- package/popover.tsx +89 -89
- package/progress.tsx +31 -31
- package/radio-group.tsx +45 -45
- package/resizable.tsx +53 -53
- package/scroll-area.tsx +58 -58
- package/select.tsx +187 -187
- package/separator.tsx +28 -28
- package/sheet.tsx +139 -139
- package/sidebar.tsx +724 -724
- package/skeleton.tsx +13 -13
- package/skill/SKILL.md +620 -599
- package/skill/customization.md +301 -263
- package/skill/rules/base-vs-radix.md +167 -167
- package/skill/rules/composition.md +240 -240
- package/skill/rules/forms.md +271 -271
- package/skill/rules/icons.md +136 -136
- package/skill/rules/styling.md +180 -180
- package/slider.tsx +63 -63
- package/sonner.tsx +40 -40
- package/spinner.tsx +16 -16
- package/styles.css +122 -0
- package/switch.tsx +35 -35
- package/table.tsx +116 -116
- package/tabs.tsx +66 -66
- package/textarea.tsx +18 -18
- package/toggle-group.tsx +83 -83
- package/toggle.tsx +47 -47
- package/tooltip.tsx +61 -61
- package/tsconfig.json +12 -12
|
@@ -1,167 +1,167 @@
|
|
|
1
|
-
# 本包 API 速查
|
|
2
|
-
|
|
3
|
-
本包导出的组件有几处 prop 形状容易写错,这份文件作为速查清单。
|
|
4
|
-
照下面的写法用就对了。
|
|
5
|
-
|
|
6
|
-
## 目录
|
|
7
|
-
|
|
8
|
-
- 自定义触发器: `asChild`
|
|
9
|
-
- `Select`
|
|
10
|
-
- `ToggleGroup`
|
|
11
|
-
- `Slider`
|
|
12
|
-
- `Accordion`
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## 自定义触发器: `asChild`
|
|
17
|
-
|
|
18
|
-
要让 trigger / close 渲染成自定义元素或别的组件(最常见的是 `Button`),
|
|
19
|
-
用 `asChild` 替换默认元素。**不要**用多余的元素包裹 trigger。
|
|
20
|
-
|
|
21
|
-
**Incorrect:**
|
|
22
|
-
|
|
23
|
-
```tsx
|
|
24
|
-
<DialogTrigger>
|
|
25
|
-
<div>
|
|
26
|
-
<Button>Open</Button>
|
|
27
|
-
</div>
|
|
28
|
-
</DialogTrigger>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
**Correct:**
|
|
32
|
-
|
|
33
|
-
```tsx
|
|
34
|
-
<DialogTrigger asChild>
|
|
35
|
-
<Button>Open</Button>
|
|
36
|
-
</DialogTrigger>
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
要把 trigger 渲染成 `<a>` 这种非 button 元素,同样直接 `asChild`:
|
|
40
|
-
|
|
41
|
-
```tsx
|
|
42
|
-
<Button asChild>
|
|
43
|
-
<a href="/docs">Read the docs</a>
|
|
44
|
-
</Button>
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
适用于所有 trigger / close 组件: `DialogTrigger`、`SheetTrigger`、
|
|
48
|
-
`AlertDialogTrigger`、`DropdownMenuTrigger`、`PopoverTrigger`、
|
|
49
|
-
`TooltipTrigger`、`CollapsibleTrigger`、`DialogClose`、`SheetClose`、
|
|
50
|
-
`NavigationMenuLink`、`BreadcrumbLink`、`SidebarMenuButton`。
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## `Select`
|
|
55
|
-
|
|
56
|
-
inline `<SelectItem>`,**不要**通过 `items` 数组传入。
|
|
57
|
-
|
|
58
|
-
```tsx
|
|
59
|
-
<Select>
|
|
60
|
-
<SelectTrigger>
|
|
61
|
-
<SelectValue placeholder="Select a fruit" />
|
|
62
|
-
</SelectTrigger>
|
|
63
|
-
<SelectContent>
|
|
64
|
-
<SelectGroup>
|
|
65
|
-
<SelectItem value="apple">Apple</SelectItem>
|
|
66
|
-
<SelectItem value="banana">Banana</SelectItem>
|
|
67
|
-
</SelectGroup>
|
|
68
|
-
</SelectContent>
|
|
69
|
-
</Select>
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
要点:
|
|
73
|
-
- **Placeholder**: 写在 `<SelectValue placeholder="…" />` 上。
|
|
74
|
-
- **定位**: `<SelectContent position="popper">`。
|
|
75
|
-
- **value 类型**: 必须是字符串。
|
|
76
|
-
|
|
77
|
-
> 需要 multi-select 或对象 value: 本包的 `Select` 不支持。在应用层
|
|
78
|
-
> 用 `Command` + `Popover` + `Checkbox` 自己拼。
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## `ToggleGroup`
|
|
83
|
-
|
|
84
|
-
必须显式 `type="single"` 或 `type="multiple"`:
|
|
85
|
-
|
|
86
|
-
```tsx
|
|
87
|
-
// 单选, defaultValue 是字符串
|
|
88
|
-
<ToggleGroup type="single" defaultValue="daily" spacing={2}>
|
|
89
|
-
<ToggleGroupItem value="daily">Daily</ToggleGroupItem>
|
|
90
|
-
<ToggleGroupItem value="weekly">Weekly</ToggleGroupItem>
|
|
91
|
-
</ToggleGroup>
|
|
92
|
-
|
|
93
|
-
// 多选, defaultValue 是字符串数组
|
|
94
|
-
<ToggleGroup type="multiple">
|
|
95
|
-
<ToggleGroupItem value="bold">Bold</ToggleGroupItem>
|
|
96
|
-
<ToggleGroupItem value="italic">Italic</ToggleGroupItem>
|
|
97
|
-
</ToggleGroup>
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
受控单选:
|
|
101
|
-
|
|
102
|
-
```tsx
|
|
103
|
-
const [value, setValue] = React.useState("normal");
|
|
104
|
-
<ToggleGroup type="single" value={value} onValueChange={setValue}>
|
|
105
|
-
…
|
|
106
|
-
</ToggleGroup>
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## `Slider`
|
|
112
|
-
|
|
113
|
-
`defaultValue` / `value` **总是数组**:
|
|
114
|
-
|
|
115
|
-
```tsx
|
|
116
|
-
// 单滑块
|
|
117
|
-
<Slider defaultValue={[50]} max={100} step={1} />
|
|
118
|
-
|
|
119
|
-
// 区间
|
|
120
|
-
<Slider defaultValue={[20, 80]} max={100} step={1} />
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
受控:
|
|
124
|
-
|
|
125
|
-
```tsx
|
|
126
|
-
const [value, setValue] = React.useState([0.3, 0.7]);
|
|
127
|
-
<Slider value={value} onValueChange={setValue} />
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## `Accordion`
|
|
133
|
-
|
|
134
|
-
必须显式 `type="single"` 或 `type="multiple"`。单选支持 `collapsible`,
|
|
135
|
-
`defaultValue` 是字符串:
|
|
136
|
-
|
|
137
|
-
```tsx
|
|
138
|
-
// 单选, 可折叠
|
|
139
|
-
<Accordion type="single" collapsible defaultValue="item-1">
|
|
140
|
-
<AccordionItem value="item-1">…</AccordionItem>
|
|
141
|
-
</Accordion>
|
|
142
|
-
|
|
143
|
-
// 多选, defaultValue 是字符串数组
|
|
144
|
-
<Accordion type="multiple" defaultValue={["item-1", "item-2"]}>
|
|
145
|
-
<AccordionItem value="item-1">…</AccordionItem>
|
|
146
|
-
<AccordionItem value="item-2">…</AccordionItem>
|
|
147
|
-
</Accordion>
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## 错写形态速查
|
|
153
|
-
|
|
154
|
-
下面这些 prop 形态**不是本包的 API**,写出来跑不通 —— 按右列改:
|
|
155
|
-
|
|
156
|
-
| 错写形态 | 正确形态 |
|
|
157
|
-
|---|---|
|
|
158
|
-
| `<XTrigger render={<Button />} />` | `<XTrigger asChild><Button /></XTrigger>` |
|
|
159
|
-
| `nativeButton={false}` | 不需要,`asChild` 自动处理 |
|
|
160
|
-
| `<Select items={[…]}>` + `<SelectValue>{(v) => …}</SelectValue>` | inline `<SelectItem>`,placeholder 在 `<SelectValue>` |
|
|
161
|
-
| `<SelectContent alignItemWithTrigger={false}>` | `<SelectContent position="popper">` |
|
|
162
|
-
| `itemToStringValue` | 不支持 —— 用 `Command` + `Popover` + `Checkbox` 自己拼 |
|
|
163
|
-
| `<ToggleGroup multiple>` | `<ToggleGroup type="multiple">` |
|
|
164
|
-
| 单选 `<ToggleGroup defaultValue={["x"]}>` | `<ToggleGroup type="single" defaultValue="x">` |
|
|
165
|
-
| `<Slider defaultValue={50} />` | `<Slider defaultValue={[50]} />` |
|
|
166
|
-
| `<Accordion>` 没有 `type` | 加 `type="single"` 或 `type="multiple"` |
|
|
167
|
-
| 单选 `<Accordion defaultValue={["x"]}>` | `<Accordion type="single" defaultValue="x">` |
|
|
1
|
+
# 本包 API 速查
|
|
2
|
+
|
|
3
|
+
本包导出的组件有几处 prop 形状容易写错,这份文件作为速查清单。
|
|
4
|
+
照下面的写法用就对了。
|
|
5
|
+
|
|
6
|
+
## 目录
|
|
7
|
+
|
|
8
|
+
- 自定义触发器: `asChild`
|
|
9
|
+
- `Select`
|
|
10
|
+
- `ToggleGroup`
|
|
11
|
+
- `Slider`
|
|
12
|
+
- `Accordion`
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 自定义触发器: `asChild`
|
|
17
|
+
|
|
18
|
+
要让 trigger / close 渲染成自定义元素或别的组件(最常见的是 `Button`),
|
|
19
|
+
用 `asChild` 替换默认元素。**不要**用多余的元素包裹 trigger。
|
|
20
|
+
|
|
21
|
+
**Incorrect:**
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
<DialogTrigger>
|
|
25
|
+
<div>
|
|
26
|
+
<Button>Open</Button>
|
|
27
|
+
</div>
|
|
28
|
+
</DialogTrigger>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Correct:**
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
<DialogTrigger asChild>
|
|
35
|
+
<Button>Open</Button>
|
|
36
|
+
</DialogTrigger>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
要把 trigger 渲染成 `<a>` 这种非 button 元素,同样直接 `asChild`:
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
<Button asChild>
|
|
43
|
+
<a href="/docs">Read the docs</a>
|
|
44
|
+
</Button>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
适用于所有 trigger / close 组件: `DialogTrigger`、`SheetTrigger`、
|
|
48
|
+
`AlertDialogTrigger`、`DropdownMenuTrigger`、`PopoverTrigger`、
|
|
49
|
+
`TooltipTrigger`、`CollapsibleTrigger`、`DialogClose`、`SheetClose`、
|
|
50
|
+
`NavigationMenuLink`、`BreadcrumbLink`、`SidebarMenuButton`。
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## `Select`
|
|
55
|
+
|
|
56
|
+
inline `<SelectItem>`,**不要**通过 `items` 数组传入。
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
<Select>
|
|
60
|
+
<SelectTrigger>
|
|
61
|
+
<SelectValue placeholder="Select a fruit" />
|
|
62
|
+
</SelectTrigger>
|
|
63
|
+
<SelectContent>
|
|
64
|
+
<SelectGroup>
|
|
65
|
+
<SelectItem value="apple">Apple</SelectItem>
|
|
66
|
+
<SelectItem value="banana">Banana</SelectItem>
|
|
67
|
+
</SelectGroup>
|
|
68
|
+
</SelectContent>
|
|
69
|
+
</Select>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
要点:
|
|
73
|
+
- **Placeholder**: 写在 `<SelectValue placeholder="…" />` 上。
|
|
74
|
+
- **定位**: `<SelectContent position="popper">`。
|
|
75
|
+
- **value 类型**: 必须是字符串。
|
|
76
|
+
|
|
77
|
+
> 需要 multi-select 或对象 value: 本包的 `Select` 不支持。在应用层
|
|
78
|
+
> 用 `Command` + `Popover` + `Checkbox` 自己拼。
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## `ToggleGroup`
|
|
83
|
+
|
|
84
|
+
必须显式 `type="single"` 或 `type="multiple"`:
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
// 单选, defaultValue 是字符串
|
|
88
|
+
<ToggleGroup type="single" defaultValue="daily" spacing={2}>
|
|
89
|
+
<ToggleGroupItem value="daily">Daily</ToggleGroupItem>
|
|
90
|
+
<ToggleGroupItem value="weekly">Weekly</ToggleGroupItem>
|
|
91
|
+
</ToggleGroup>
|
|
92
|
+
|
|
93
|
+
// 多选, defaultValue 是字符串数组
|
|
94
|
+
<ToggleGroup type="multiple">
|
|
95
|
+
<ToggleGroupItem value="bold">Bold</ToggleGroupItem>
|
|
96
|
+
<ToggleGroupItem value="italic">Italic</ToggleGroupItem>
|
|
97
|
+
</ToggleGroup>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
受控单选:
|
|
101
|
+
|
|
102
|
+
```tsx
|
|
103
|
+
const [value, setValue] = React.useState("normal");
|
|
104
|
+
<ToggleGroup type="single" value={value} onValueChange={setValue}>
|
|
105
|
+
…
|
|
106
|
+
</ToggleGroup>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## `Slider`
|
|
112
|
+
|
|
113
|
+
`defaultValue` / `value` **总是数组**:
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
// 单滑块
|
|
117
|
+
<Slider defaultValue={[50]} max={100} step={1} />
|
|
118
|
+
|
|
119
|
+
// 区间
|
|
120
|
+
<Slider defaultValue={[20, 80]} max={100} step={1} />
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
受控:
|
|
124
|
+
|
|
125
|
+
```tsx
|
|
126
|
+
const [value, setValue] = React.useState([0.3, 0.7]);
|
|
127
|
+
<Slider value={value} onValueChange={setValue} />
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## `Accordion`
|
|
133
|
+
|
|
134
|
+
必须显式 `type="single"` 或 `type="multiple"`。单选支持 `collapsible`,
|
|
135
|
+
`defaultValue` 是字符串:
|
|
136
|
+
|
|
137
|
+
```tsx
|
|
138
|
+
// 单选, 可折叠
|
|
139
|
+
<Accordion type="single" collapsible defaultValue="item-1">
|
|
140
|
+
<AccordionItem value="item-1">…</AccordionItem>
|
|
141
|
+
</Accordion>
|
|
142
|
+
|
|
143
|
+
// 多选, defaultValue 是字符串数组
|
|
144
|
+
<Accordion type="multiple" defaultValue={["item-1", "item-2"]}>
|
|
145
|
+
<AccordionItem value="item-1">…</AccordionItem>
|
|
146
|
+
<AccordionItem value="item-2">…</AccordionItem>
|
|
147
|
+
</Accordion>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 错写形态速查
|
|
153
|
+
|
|
154
|
+
下面这些 prop 形态**不是本包的 API**,写出来跑不通 —— 按右列改:
|
|
155
|
+
|
|
156
|
+
| 错写形态 | 正确形态 |
|
|
157
|
+
|---|---|
|
|
158
|
+
| `<XTrigger render={<Button />} />` | `<XTrigger asChild><Button /></XTrigger>` |
|
|
159
|
+
| `nativeButton={false}` | 不需要,`asChild` 自动处理 |
|
|
160
|
+
| `<Select items={[…]}>` + `<SelectValue>{(v) => …}</SelectValue>` | inline `<SelectItem>`,placeholder 在 `<SelectValue>` |
|
|
161
|
+
| `<SelectContent alignItemWithTrigger={false}>` | `<SelectContent position="popper">` |
|
|
162
|
+
| `itemToStringValue` | 不支持 —— 用 `Command` + `Popover` + `Checkbox` 自己拼 |
|
|
163
|
+
| `<ToggleGroup multiple>` | `<ToggleGroup type="multiple">` |
|
|
164
|
+
| 单选 `<ToggleGroup defaultValue={["x"]}>` | `<ToggleGroup type="single" defaultValue="x">` |
|
|
165
|
+
| `<Slider defaultValue={50} />` | `<Slider defaultValue={[50]} />` |
|
|
166
|
+
| `<Accordion>` 没有 `type` | 加 `type="single"` 或 `type="multiple"` |
|
|
167
|
+
| 单选 `<Accordion defaultValue={["x"]}>` | `<Accordion type="single" defaultValue="x">` |
|