@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.
Files changed (71) hide show
  1. package/accordion.tsx +66 -66
  2. package/alert-dialog.tsx +196 -196
  3. package/alert.tsx +66 -66
  4. package/aspect-ratio.tsx +11 -11
  5. package/avatar.tsx +53 -53
  6. package/badge.tsx +46 -46
  7. package/breadcrumb.tsx +109 -109
  8. package/button-group.tsx +83 -83
  9. package/button.tsx +60 -60
  10. package/calendar.tsx +219 -219
  11. package/card.tsx +92 -92
  12. package/carousel.tsx +241 -241
  13. package/chart.tsx +374 -374
  14. package/checkbox.tsx +32 -32
  15. package/collapsible.tsx +33 -33
  16. package/command.tsx +184 -184
  17. package/context-menu.tsx +252 -252
  18. package/dialog.tsx +143 -143
  19. package/direction.tsx +22 -22
  20. package/drawer.tsx +135 -135
  21. package/dropdown-menu.tsx +257 -257
  22. package/empty.tsx +104 -104
  23. package/field.tsx +248 -248
  24. package/form.tsx +167 -167
  25. package/hooks/index.ts +1 -1
  26. package/hooks/use-mobile.ts +19 -19
  27. package/hover-card.tsx +44 -44
  28. package/icon.tsx +21 -21
  29. package/index.ts +59 -59
  30. package/input-group.tsx +170 -170
  31. package/input-otp.tsx +77 -77
  32. package/input.tsx +21 -21
  33. package/item.tsx +193 -193
  34. package/kbd.tsx +28 -28
  35. package/label.tsx +24 -24
  36. package/lib/index.ts +1 -1
  37. package/lib/utils.ts +6 -6
  38. package/menubar.tsx +276 -276
  39. package/native-select.tsx +62 -62
  40. package/navigation-menu.tsx +168 -168
  41. package/package.json +10 -2
  42. package/pagination.tsx +127 -127
  43. package/popover.tsx +89 -89
  44. package/progress.tsx +31 -31
  45. package/radio-group.tsx +45 -45
  46. package/resizable.tsx +53 -53
  47. package/scroll-area.tsx +58 -58
  48. package/select.tsx +187 -187
  49. package/separator.tsx +28 -28
  50. package/sheet.tsx +139 -139
  51. package/sidebar.tsx +724 -724
  52. package/skeleton.tsx +13 -13
  53. package/skill/SKILL.md +620 -599
  54. package/skill/customization.md +301 -263
  55. package/skill/rules/base-vs-radix.md +167 -167
  56. package/skill/rules/composition.md +240 -240
  57. package/skill/rules/forms.md +271 -271
  58. package/skill/rules/icons.md +136 -136
  59. package/skill/rules/styling.md +180 -180
  60. package/slider.tsx +63 -63
  61. package/sonner.tsx +40 -40
  62. package/spinner.tsx +16 -16
  63. package/styles.css +122 -0
  64. package/switch.tsx +35 -35
  65. package/table.tsx +116 -116
  66. package/tabs.tsx +66 -66
  67. package/textarea.tsx +18 -18
  68. package/toggle-group.tsx +83 -83
  69. package/toggle.tsx +47 -47
  70. package/tooltip.tsx +61 -61
  71. 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">` |