@betterstart/cli 0.1.5 → 0.1.7
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/dist/cli.js +1236 -739
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
- package/templates/ui/accordion.tsx +1 -1
- package/templates/ui/breadcrumb.tsx +1 -1
- package/templates/ui/carousel.tsx +2 -2
- package/templates/ui/command.tsx +1 -1
- package/templates/ui/context-menu.tsx +3 -3
- package/templates/ui/dialog.tsx +1 -1
- package/templates/ui/dropdown-menu.tsx +1 -1
- package/templates/ui/dynamic-list-field.tsx +2 -2
- package/templates/ui/menubar.tsx +3 -3
- package/templates/ui/pagination.tsx +3 -3
- package/templates/ui/radio-group.tsx +1 -1
- package/templates/ui/select.tsx +4 -4
- package/templates/ui/sheet.tsx +1 -1
- package/templates/ui/sidebar.tsx +118 -29
- package/templates/ui/slider.tsx +1 -1
- package/templates/ui/switch.tsx +1 -1
- package/templates/ui/toast.tsx +1 -1
package/package.json
CHANGED
|
@@ -29,7 +29,7 @@ const AccordionTrigger = React.forwardRef<
|
|
|
29
29
|
{...props}
|
|
30
30
|
>
|
|
31
31
|
{children}
|
|
32
|
-
<ChevronDown className="
|
|
32
|
+
<ChevronDown className="size-4 shrink-0 text-muted-foreground transition-transform duration-200" />
|
|
33
33
|
</AccordionPrimitive.Trigger>
|
|
34
34
|
</AccordionPrimitive.Header>
|
|
35
35
|
))
|
|
@@ -81,7 +81,7 @@ const BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<'span'
|
|
|
81
81
|
className={cn('flex h-9 w-9 items-center justify-center', className)}
|
|
82
82
|
{...props}
|
|
83
83
|
>
|
|
84
|
-
<MoreHorizontal className="
|
|
84
|
+
<MoreHorizontal className="size-4" />
|
|
85
85
|
<span className="sr-only">More</span>
|
|
86
86
|
</span>
|
|
87
87
|
)
|
|
@@ -195,7 +195,7 @@ const CarouselPrevious = React.forwardRef<HTMLButtonElement, React.ComponentProp
|
|
|
195
195
|
onClick={scrollPrev}
|
|
196
196
|
{...props}
|
|
197
197
|
>
|
|
198
|
-
<ArrowLeft className="
|
|
198
|
+
<ArrowLeft className="size-4" />
|
|
199
199
|
<span className="sr-only">Previous slide</span>
|
|
200
200
|
</Button>
|
|
201
201
|
)
|
|
@@ -223,7 +223,7 @@ const CarouselNext = React.forwardRef<HTMLButtonElement, React.ComponentProps<ty
|
|
|
223
223
|
onClick={scrollNext}
|
|
224
224
|
{...props}
|
|
225
225
|
>
|
|
226
|
-
<ArrowRight className="
|
|
226
|
+
<ArrowRight className="size-4" />
|
|
227
227
|
<span className="sr-only">Next slide</span>
|
|
228
228
|
</Button>
|
|
229
229
|
)
|
package/templates/ui/command.tsx
CHANGED
|
@@ -39,7 +39,7 @@ const CommandInput = React.forwardRef<
|
|
|
39
39
|
React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>
|
|
40
40
|
>(({ className, ...props }, ref) => (
|
|
41
41
|
<div className="flex items-center border-b px-3" cmdk-input-wrapper="">
|
|
42
|
-
<Search className="mr-2
|
|
42
|
+
<Search className="mr-2 size-4 shrink-0 opacity-50" />
|
|
43
43
|
<CommandPrimitive.Input
|
|
44
44
|
ref={ref}
|
|
45
45
|
className={cn(
|
|
@@ -33,7 +33,7 @@ const ContextMenuSubTrigger = React.forwardRef<
|
|
|
33
33
|
{...props}
|
|
34
34
|
>
|
|
35
35
|
{children}
|
|
36
|
-
<ChevronRight className="ml-auto
|
|
36
|
+
<ChevronRight className="ml-auto size-4" />
|
|
37
37
|
</ContextMenuPrimitive.SubTrigger>
|
|
38
38
|
))
|
|
39
39
|
ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName
|
|
@@ -103,7 +103,7 @@ const ContextMenuCheckboxItem = React.forwardRef<
|
|
|
103
103
|
>
|
|
104
104
|
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
105
105
|
<ContextMenuPrimitive.ItemIndicator>
|
|
106
|
-
<Check className="
|
|
106
|
+
<Check className="size-4" />
|
|
107
107
|
</ContextMenuPrimitive.ItemIndicator>
|
|
108
108
|
</span>
|
|
109
109
|
{children}
|
|
@@ -125,7 +125,7 @@ const ContextMenuRadioItem = React.forwardRef<
|
|
|
125
125
|
>
|
|
126
126
|
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
127
127
|
<ContextMenuPrimitive.ItemIndicator>
|
|
128
|
-
<Circle className="
|
|
128
|
+
<Circle className="size-4 fill-current" />
|
|
129
129
|
</ContextMenuPrimitive.ItemIndicator>
|
|
130
130
|
</span>
|
|
131
131
|
{children}
|
package/templates/ui/dialog.tsx
CHANGED
|
@@ -44,7 +44,7 @@ const DialogContent = React.forwardRef<
|
|
|
44
44
|
>
|
|
45
45
|
{children}
|
|
46
46
|
<DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
|
|
47
|
-
<X className="
|
|
47
|
+
<X className="size-4" />
|
|
48
48
|
<span className="sr-only">Close</span>
|
|
49
49
|
</DialogPrimitive.Close>
|
|
50
50
|
</DialogPrimitive.Content>
|
|
@@ -105,7 +105,7 @@ const DropdownMenuCheckboxItem = React.forwardRef<
|
|
|
105
105
|
>
|
|
106
106
|
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
107
107
|
<DropdownMenuPrimitive.ItemIndicator>
|
|
108
|
-
<Check className="
|
|
108
|
+
<Check className="size-4" />
|
|
109
109
|
</DropdownMenuPrimitive.ItemIndicator>
|
|
110
110
|
</span>
|
|
111
111
|
{children}
|
|
@@ -49,7 +49,7 @@ export function DynamicListField({
|
|
|
49
49
|
onClick={handleAdd}
|
|
50
50
|
disabled={disabled || !canAddMore}
|
|
51
51
|
>
|
|
52
|
-
<Plus className="mr-2
|
|
52
|
+
<Plus className="mr-2 size-4" />
|
|
53
53
|
Add {label}
|
|
54
54
|
</Button>
|
|
55
55
|
</div>
|
|
@@ -79,7 +79,7 @@ export function DynamicListField({
|
|
|
79
79
|
disabled={disabled}
|
|
80
80
|
className="mt-0"
|
|
81
81
|
>
|
|
82
|
-
<Trash2 className="
|
|
82
|
+
<Trash2 className="size-4" />
|
|
83
83
|
</Button>
|
|
84
84
|
</div>
|
|
85
85
|
))}
|
package/templates/ui/menubar.tsx
CHANGED
|
@@ -71,7 +71,7 @@ const MenubarSubTrigger = React.forwardRef<
|
|
|
71
71
|
{...props}
|
|
72
72
|
>
|
|
73
73
|
{children}
|
|
74
|
-
<ChevronRight className="ml-auto
|
|
74
|
+
<ChevronRight className="ml-auto size-4" />
|
|
75
75
|
</MenubarPrimitive.SubTrigger>
|
|
76
76
|
))
|
|
77
77
|
MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName
|
|
@@ -144,7 +144,7 @@ const MenubarCheckboxItem = React.forwardRef<
|
|
|
144
144
|
>
|
|
145
145
|
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
146
146
|
<MenubarPrimitive.ItemIndicator>
|
|
147
|
-
<Check className="
|
|
147
|
+
<Check className="size-4" />
|
|
148
148
|
</MenubarPrimitive.ItemIndicator>
|
|
149
149
|
</span>
|
|
150
150
|
{children}
|
|
@@ -166,7 +166,7 @@ const MenubarRadioItem = React.forwardRef<
|
|
|
166
166
|
>
|
|
167
167
|
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
168
168
|
<MenubarPrimitive.ItemIndicator>
|
|
169
|
-
<Circle className="
|
|
169
|
+
<Circle className="size-4 fill-current" />
|
|
170
170
|
</MenubarPrimitive.ItemIndicator>
|
|
171
171
|
</span>
|
|
172
172
|
{children}
|
|
@@ -54,7 +54,7 @@ const PaginationPrevious = ({
|
|
|
54
54
|
className={cn('gap-1 pl-2.5', className)}
|
|
55
55
|
{...props}
|
|
56
56
|
>
|
|
57
|
-
<ChevronLeft className="
|
|
57
|
+
<ChevronLeft className="size-4" />
|
|
58
58
|
<span>Previous</span>
|
|
59
59
|
</PaginationLink>
|
|
60
60
|
)
|
|
@@ -68,7 +68,7 @@ const PaginationNext = ({ className, ...props }: React.ComponentProps<typeof Pag
|
|
|
68
68
|
{...props}
|
|
69
69
|
>
|
|
70
70
|
<span>Next</span>
|
|
71
|
-
<ChevronRight className="
|
|
71
|
+
<ChevronRight className="size-4" />
|
|
72
72
|
</PaginationLink>
|
|
73
73
|
)
|
|
74
74
|
PaginationNext.displayName = 'PaginationNext'
|
|
@@ -79,7 +79,7 @@ const PaginationEllipsis = ({ className, ...props }: React.ComponentProps<'span'
|
|
|
79
79
|
className={cn('flex h-9 w-9 items-center justify-center', className)}
|
|
80
80
|
{...props}
|
|
81
81
|
>
|
|
82
|
-
<MoreHorizontal className="
|
|
82
|
+
<MoreHorizontal className="size-4" />
|
|
83
83
|
<span className="sr-only">More pages</span>
|
|
84
84
|
</span>
|
|
85
85
|
)
|
|
@@ -21,7 +21,7 @@ const RadioGroupItem = React.forwardRef<
|
|
|
21
21
|
<RadioGroupPrimitive.Item
|
|
22
22
|
ref={ref}
|
|
23
23
|
className={cn(
|
|
24
|
-
'aspect-square
|
|
24
|
+
'aspect-square size-4 rounded-full border border-primary text-primary shadow focus:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',
|
|
25
25
|
className
|
|
26
26
|
)}
|
|
27
27
|
{...props}
|
package/templates/ui/select.tsx
CHANGED
|
@@ -25,7 +25,7 @@ const SelectTrigger = React.forwardRef<
|
|
|
25
25
|
>
|
|
26
26
|
{children}
|
|
27
27
|
<SelectPrimitive.Icon asChild>
|
|
28
|
-
<ChevronDown className="
|
|
28
|
+
<ChevronDown className="size-4 opacity-50" />
|
|
29
29
|
</SelectPrimitive.Icon>
|
|
30
30
|
</SelectPrimitive.Trigger>
|
|
31
31
|
))
|
|
@@ -40,7 +40,7 @@ const SelectScrollUpButton = React.forwardRef<
|
|
|
40
40
|
className={cn('flex cursor-default items-center justify-center py-1', className)}
|
|
41
41
|
{...props}
|
|
42
42
|
>
|
|
43
|
-
<ChevronUp className="
|
|
43
|
+
<ChevronUp className="size-4" />
|
|
44
44
|
</SelectPrimitive.ScrollUpButton>
|
|
45
45
|
))
|
|
46
46
|
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName
|
|
@@ -54,7 +54,7 @@ const SelectScrollDownButton = React.forwardRef<
|
|
|
54
54
|
className={cn('flex cursor-default items-center justify-center py-1', className)}
|
|
55
55
|
{...props}
|
|
56
56
|
>
|
|
57
|
-
<ChevronDown className="
|
|
57
|
+
<ChevronDown className="size-4" />
|
|
58
58
|
</SelectPrimitive.ScrollDownButton>
|
|
59
59
|
))
|
|
60
60
|
SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName
|
|
@@ -117,7 +117,7 @@ const SelectItem = React.forwardRef<
|
|
|
117
117
|
>
|
|
118
118
|
<span className="absolute right-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
119
119
|
<SelectPrimitive.ItemIndicator>
|
|
120
|
-
<Check className="
|
|
120
|
+
<Check className="size-4" />
|
|
121
121
|
</SelectPrimitive.ItemIndicator>
|
|
122
122
|
</span>
|
|
123
123
|
<SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
|
package/templates/ui/sheet.tsx
CHANGED
|
@@ -60,7 +60,7 @@ const SheetContent = React.forwardRef<
|
|
|
60
60
|
<SheetOverlay />
|
|
61
61
|
<SheetPrimitive.Content ref={ref} className={cn(sheetVariants({ side }), className)} {...props}>
|
|
62
62
|
<SheetPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary">
|
|
63
|
-
<X className="
|
|
63
|
+
<X className="size-4" />
|
|
64
64
|
<span className="sr-only">Close</span>
|
|
65
65
|
</SheetPrimitive.Close>
|
|
66
66
|
{children}
|
package/templates/ui/sidebar.tsx
CHANGED
|
@@ -123,7 +123,12 @@ function SidebarProvider({
|
|
|
123
123
|
...style
|
|
124
124
|
} as React.CSSProperties
|
|
125
125
|
}
|
|
126
|
-
className={cn(
|
|
126
|
+
className={cn(
|
|
127
|
+
'flex min-h-svh w-full',
|
|
128
|
+
'bg-background',
|
|
129
|
+
'group/sidebar-wrapper',
|
|
130
|
+
className
|
|
131
|
+
)}
|
|
127
132
|
{...props}
|
|
128
133
|
>
|
|
129
134
|
{children}
|
|
@@ -152,7 +157,8 @@ function Sidebar({
|
|
|
152
157
|
<div
|
|
153
158
|
data-slot="sidebar"
|
|
154
159
|
className={cn(
|
|
155
|
-
'
|
|
160
|
+
'flex h-full w-(--sidebar-width) flex-col',
|
|
161
|
+
'bg-sidebar text-default',
|
|
156
162
|
className
|
|
157
163
|
)}
|
|
158
164
|
{...props}
|
|
@@ -169,7 +175,7 @@ function Sidebar({
|
|
|
169
175
|
data-sidebar="sidebar"
|
|
170
176
|
data-slot="sidebar"
|
|
171
177
|
data-mobile="true"
|
|
172
|
-
className=
|
|
178
|
+
className={cn('w-(--sidebar-width) p-0', 'bg-white text-default', '[&>button]:hidden')}
|
|
173
179
|
style={
|
|
174
180
|
{
|
|
175
181
|
'--sidebar-width': SIDEBAR_WIDTH_MOBILE
|
|
@@ -189,7 +195,7 @@ function Sidebar({
|
|
|
189
195
|
|
|
190
196
|
return (
|
|
191
197
|
<div
|
|
192
|
-
className=
|
|
198
|
+
className={cn('hidden', 'bg-background text-sidebar-foreground', 'group peer', 'md:block')}
|
|
193
199
|
data-state={state}
|
|
194
200
|
data-collapsible={state === 'collapsed' ? collapsible : ''}
|
|
195
201
|
data-variant={variant}
|
|
@@ -200,7 +206,9 @@ function Sidebar({
|
|
|
200
206
|
<div
|
|
201
207
|
data-slot="sidebar-gap"
|
|
202
208
|
className={cn(
|
|
203
|
-
'relative w-(--sidebar-width)
|
|
209
|
+
'relative w-(--sidebar-width)',
|
|
210
|
+
'bg-transparent',
|
|
211
|
+
'transition-[width] duration-200 ease-linear',
|
|
204
212
|
'group-data-[collapsible=offcanvas]:w-0',
|
|
205
213
|
'group-data-[side=right]:rotate-180',
|
|
206
214
|
variant === 'floating' || variant === 'inset'
|
|
@@ -211,11 +219,13 @@ function Sidebar({
|
|
|
211
219
|
<div
|
|
212
220
|
data-slot="sidebar-container"
|
|
213
221
|
className={cn(
|
|
214
|
-
'fixed inset-y-0 z-10 hidden
|
|
222
|
+
'fixed inset-y-0 z-10 hidden',
|
|
223
|
+
'h-svh w-(--sidebar-width)',
|
|
224
|
+
'transition-[left,right,width] duration-200 ease-linear',
|
|
225
|
+
'md:flex',
|
|
215
226
|
side === 'left'
|
|
216
227
|
? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'
|
|
217
228
|
: 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',
|
|
218
|
-
// Adjust the padding for floating and inset variants.
|
|
219
229
|
variant === 'floating' || variant === 'inset'
|
|
220
230
|
? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'
|
|
221
231
|
: 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',
|
|
@@ -226,7 +236,12 @@ function Sidebar({
|
|
|
226
236
|
<div
|
|
227
237
|
data-sidebar="sidebar"
|
|
228
238
|
data-slot="sidebar-inner"
|
|
229
|
-
className=
|
|
239
|
+
className={cn(
|
|
240
|
+
'flex h-full w-full flex-col',
|
|
241
|
+
'bg-sidebar text-default',
|
|
242
|
+
'corner-squircle',
|
|
243
|
+
'group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm'
|
|
244
|
+
)}
|
|
230
245
|
>
|
|
231
246
|
{children}
|
|
232
247
|
</div>
|
|
@@ -270,10 +285,17 @@ function SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {
|
|
|
270
285
|
onClick={toggleSidebar}
|
|
271
286
|
title="Toggle Sidebar"
|
|
272
287
|
className={cn(
|
|
273
|
-
'
|
|
288
|
+
'absolute inset-y-0 z-20 hidden w-4',
|
|
289
|
+
'-translate-x-1/2',
|
|
290
|
+
'transition-all ease-linear',
|
|
291
|
+
'after:absolute after:inset-y-0 after:left-1/2 after:w-[2px]',
|
|
292
|
+
'hover:after:bg-sidebar-border',
|
|
293
|
+
'sm:flex',
|
|
294
|
+
'group-data-[side=left]:-right-4 group-data-[side=right]:left-0',
|
|
274
295
|
'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',
|
|
275
296
|
'[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',
|
|
276
|
-
'
|
|
297
|
+
'group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',
|
|
298
|
+
'hover:group-data-[collapsible=offcanvas]:bg-sidebar',
|
|
277
299
|
'[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',
|
|
278
300
|
'[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',
|
|
279
301
|
className
|
|
@@ -288,8 +310,11 @@ function SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {
|
|
|
288
310
|
<main
|
|
289
311
|
data-slot="sidebar-inset"
|
|
290
312
|
className={cn(
|
|
291
|
-
'
|
|
292
|
-
'
|
|
313
|
+
'relative flex w-full flex-1 flex-col',
|
|
314
|
+
'bg-background',
|
|
315
|
+
'corner-squircle',
|
|
316
|
+
'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-2xl md:peer-data-[variant=inset]:shadow-sm',
|
|
317
|
+
'md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',
|
|
293
318
|
className
|
|
294
319
|
)}
|
|
295
320
|
{...props}
|
|
@@ -302,7 +327,7 @@ function SidebarInput({ className, ...props }: React.ComponentProps<typeof Input
|
|
|
302
327
|
<Input
|
|
303
328
|
data-slot="sidebar-input"
|
|
304
329
|
data-sidebar="input"
|
|
305
|
-
className={cn('
|
|
330
|
+
className={cn('h-8 w-full', 'bg-background shadow-none', className)}
|
|
306
331
|
{...props}
|
|
307
332
|
/>
|
|
308
333
|
)
|
|
@@ -324,7 +349,7 @@ function SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {
|
|
|
324
349
|
<div
|
|
325
350
|
data-slot="sidebar-footer"
|
|
326
351
|
data-sidebar="footer"
|
|
327
|
-
className={cn('flex flex-col gap-2 p-2', className)}
|
|
352
|
+
className={cn('flex flex-col gap-2', 'border-t border-border', 'p-2', className)}
|
|
328
353
|
{...props}
|
|
329
354
|
/>
|
|
330
355
|
)
|
|
@@ -335,7 +360,7 @@ function SidebarSeparator({ className, ...props }: React.ComponentProps<typeof S
|
|
|
335
360
|
<Separator
|
|
336
361
|
data-slot="sidebar-separator"
|
|
337
362
|
data-sidebar="separator"
|
|
338
|
-
className={cn('
|
|
363
|
+
className={cn('mx-2 w-auto', 'bg-sidebar-border', className)}
|
|
339
364
|
{...props}
|
|
340
365
|
/>
|
|
341
366
|
)
|
|
@@ -347,7 +372,9 @@ function SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {
|
|
|
347
372
|
data-slot="sidebar-content"
|
|
348
373
|
data-sidebar="content"
|
|
349
374
|
className={cn(
|
|
350
|
-
'flex min-h-0 flex-1 flex-col gap-2
|
|
375
|
+
'flex min-h-0 flex-1 flex-col gap-2',
|
|
376
|
+
'overflow-auto',
|
|
377
|
+
'group-data-[collapsible=icon]:overflow-hidden',
|
|
351
378
|
className
|
|
352
379
|
)}
|
|
353
380
|
{...props}
|
|
@@ -378,7 +405,14 @@ function SidebarGroupLabel({
|
|
|
378
405
|
data-slot="sidebar-group-label"
|
|
379
406
|
data-sidebar="group-label"
|
|
380
407
|
className={cn(
|
|
381
|
-
'
|
|
408
|
+
'flex h-8 shrink-0 items-center',
|
|
409
|
+
'px-2',
|
|
410
|
+
'text-xs font-medium text-sidebar-foreground/70',
|
|
411
|
+
'rounded-md corner-squircle',
|
|
412
|
+
'ring-sidebar-ring outline-hidden',
|
|
413
|
+
'transition-[margin,opacity] duration-200 ease-linear',
|
|
414
|
+
'focus-visible:ring-2',
|
|
415
|
+
'[&>svg]:size-4 [&>svg]:shrink-0',
|
|
382
416
|
'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',
|
|
383
417
|
className
|
|
384
418
|
)}
|
|
@@ -399,8 +433,16 @@ function SidebarGroupAction({
|
|
|
399
433
|
data-slot="sidebar-group-action"
|
|
400
434
|
data-sidebar="group-action"
|
|
401
435
|
className={cn(
|
|
402
|
-
'
|
|
403
|
-
|
|
436
|
+
'absolute top-3.5 right-3',
|
|
437
|
+
'flex aspect-square w-5 items-center justify-center',
|
|
438
|
+
'p-0',
|
|
439
|
+
'text-sidebar-foreground',
|
|
440
|
+
'rounded-md corner-squircle',
|
|
441
|
+
'ring-sidebar-ring outline-hidden',
|
|
442
|
+
'transition-transform',
|
|
443
|
+
'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
|
|
444
|
+
'focus-visible:ring-2',
|
|
445
|
+
'[&>svg]:size-4 [&>svg]:shrink-0',
|
|
404
446
|
'after:absolute after:-inset-2 md:after:hidden',
|
|
405
447
|
'group-data-[collapsible=icon]:hidden',
|
|
406
448
|
className
|
|
@@ -437,14 +479,32 @@ function SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {
|
|
|
437
479
|
<li
|
|
438
480
|
data-slot="sidebar-menu-item"
|
|
439
481
|
data-sidebar="menu-item"
|
|
440
|
-
className={cn('group/menu-item
|
|
482
|
+
className={cn('relative group/menu-item', className)}
|
|
441
483
|
{...props}
|
|
442
484
|
/>
|
|
443
485
|
)
|
|
444
486
|
}
|
|
445
487
|
|
|
446
488
|
const sidebarMenuButtonVariants = cva(
|
|
447
|
-
|
|
489
|
+
[
|
|
490
|
+
'flex w-full items-center gap-2',
|
|
491
|
+
'overflow-hidden p-2',
|
|
492
|
+
'text-left text-sm',
|
|
493
|
+
'rounded-md corner-squircle',
|
|
494
|
+
'ring-sidebar-ring outline-hidden',
|
|
495
|
+
'transition-[width,height,padding]',
|
|
496
|
+
'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
|
|
497
|
+
'focus-visible:ring-2',
|
|
498
|
+
'active:bg-sidebar-accent active:text-sidebar-accent-foreground',
|
|
499
|
+
'disabled:pointer-events-none disabled:opacity-50',
|
|
500
|
+
'aria-disabled:pointer-events-none aria-disabled:opacity-50',
|
|
501
|
+
'data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground',
|
|
502
|
+
'data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground',
|
|
503
|
+
'[&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',
|
|
504
|
+
'group-has-data-[sidebar=menu-action]/menu-item:pr-8',
|
|
505
|
+
'group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2!',
|
|
506
|
+
'peer/menu-button'
|
|
507
|
+
],
|
|
448
508
|
{
|
|
449
509
|
variants: {
|
|
450
510
|
variant: {
|
|
@@ -531,8 +591,17 @@ function SidebarMenuAction({
|
|
|
531
591
|
data-slot="sidebar-menu-action"
|
|
532
592
|
data-sidebar="menu-action"
|
|
533
593
|
className={cn(
|
|
534
|
-
'
|
|
535
|
-
|
|
594
|
+
'absolute top-1.5 right-1',
|
|
595
|
+
'flex aspect-square w-5 items-center justify-center',
|
|
596
|
+
'p-0',
|
|
597
|
+
'text-sidebar-foreground',
|
|
598
|
+
'rounded-md corner-squircle',
|
|
599
|
+
'ring-sidebar-ring outline-hidden',
|
|
600
|
+
'transition-transform',
|
|
601
|
+
'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
|
|
602
|
+
'focus-visible:ring-2',
|
|
603
|
+
'[&>svg]:size-4 [&>svg]:shrink-0',
|
|
604
|
+
'peer-hover/menu-button:text-sidebar-accent-foreground',
|
|
536
605
|
'after:absolute after:-inset-2 md:after:hidden',
|
|
537
606
|
'peer-data-[size=sm]/menu-button:top-1',
|
|
538
607
|
'peer-data-[size=default]/menu-button:top-1.5',
|
|
@@ -553,8 +622,14 @@ function SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>)
|
|
|
553
622
|
data-slot="sidebar-menu-badge"
|
|
554
623
|
data-sidebar="menu-badge"
|
|
555
624
|
className={cn(
|
|
556
|
-
'
|
|
557
|
-
'
|
|
625
|
+
'pointer-events-none absolute right-1',
|
|
626
|
+
'flex h-5 min-w-5 items-center justify-center',
|
|
627
|
+
'px-1',
|
|
628
|
+
'text-xs font-medium tabular-nums text-sidebar-foreground',
|
|
629
|
+
'rounded-md corner-squircle',
|
|
630
|
+
'select-none',
|
|
631
|
+
'peer-hover/menu-button:text-sidebar-accent-foreground',
|
|
632
|
+
'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',
|
|
558
633
|
'peer-data-[size=sm]/menu-button:top-1',
|
|
559
634
|
'peer-data-[size=default]/menu-button:top-1.5',
|
|
560
635
|
'peer-data-[size=lg]/menu-button:top-2.5',
|
|
@@ -582,7 +657,7 @@ function SidebarMenuSkeleton({
|
|
|
582
657
|
<div
|
|
583
658
|
data-slot="sidebar-menu-skeleton"
|
|
584
659
|
data-sidebar="menu-skeleton"
|
|
585
|
-
className={cn('flex h-8 items-center gap-2 rounded-md corner-squircle
|
|
660
|
+
className={cn('flex h-8 items-center gap-2', 'px-2', 'rounded-md corner-squircle', className)}
|
|
586
661
|
{...props}
|
|
587
662
|
>
|
|
588
663
|
{showIcon && (
|
|
@@ -607,7 +682,10 @@ function SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {
|
|
|
607
682
|
data-slot="sidebar-menu-sub"
|
|
608
683
|
data-sidebar="menu-sub"
|
|
609
684
|
className={cn(
|
|
610
|
-
'
|
|
685
|
+
'mx-3.5 flex min-w-0 flex-col gap-1',
|
|
686
|
+
'px-2.5 py-0.5',
|
|
687
|
+
'translate-x-px',
|
|
688
|
+
'border-l border-sidebar-border',
|
|
611
689
|
'group-data-[collapsible=icon]:hidden',
|
|
612
690
|
className
|
|
613
691
|
)}
|
|
@@ -621,7 +699,7 @@ function SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>)
|
|
|
621
699
|
<li
|
|
622
700
|
data-slot="sidebar-menu-sub-item"
|
|
623
701
|
data-sidebar="menu-sub-item"
|
|
624
|
-
className={cn('group/menu-sub-item
|
|
702
|
+
className={cn('relative group/menu-sub-item', className)}
|
|
625
703
|
{...props}
|
|
626
704
|
/>
|
|
627
705
|
)
|
|
@@ -647,7 +725,18 @@ function SidebarMenuSubButton({
|
|
|
647
725
|
data-size={size}
|
|
648
726
|
data-active={isActive}
|
|
649
727
|
className={cn(
|
|
650
|
-
'
|
|
728
|
+
'flex h-7 min-w-0 items-center gap-2',
|
|
729
|
+
'overflow-hidden px-2',
|
|
730
|
+
'text-sidebar-foreground',
|
|
731
|
+
'rounded-md corner-squircle',
|
|
732
|
+
'ring-sidebar-ring outline-hidden',
|
|
733
|
+
'-translate-x-px',
|
|
734
|
+
'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
|
|
735
|
+
'focus-visible:ring-2',
|
|
736
|
+
'active:bg-sidebar-accent active:text-sidebar-accent-foreground',
|
|
737
|
+
'disabled:pointer-events-none disabled:opacity-50',
|
|
738
|
+
'aria-disabled:pointer-events-none aria-disabled:opacity-50',
|
|
739
|
+
'[&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',
|
|
651
740
|
'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',
|
|
652
741
|
size === 'sm' && 'text-xs',
|
|
653
742
|
size === 'md' && 'text-sm',
|
package/templates/ui/slider.tsx
CHANGED
|
@@ -16,7 +16,7 @@ const Slider = React.forwardRef<
|
|
|
16
16
|
<SliderPrimitive.Track className="relative h-1.5 w-full grow overflow-hidden rounded-full bg-primary/20">
|
|
17
17
|
<SliderPrimitive.Range className="absolute h-full bg-primary" />
|
|
18
18
|
</SliderPrimitive.Track>
|
|
19
|
-
<SliderPrimitive.Thumb className="block
|
|
19
|
+
<SliderPrimitive.Thumb className="block size-4 rounded-full border border-primary/50 bg-background shadow transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50" />
|
|
20
20
|
</SliderPrimitive.Root>
|
|
21
21
|
))
|
|
22
22
|
Slider.displayName = SliderPrimitive.Root.displayName
|
package/templates/ui/switch.tsx
CHANGED
|
@@ -18,7 +18,7 @@ const Switch = React.forwardRef<
|
|
|
18
18
|
>
|
|
19
19
|
<SwitchPrimitives.Thumb
|
|
20
20
|
className={cn(
|
|
21
|
-
'pointer-events-none block
|
|
21
|
+
'pointer-events-none block size-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0'
|
|
22
22
|
)}
|
|
23
23
|
/>
|
|
24
24
|
</SwitchPrimitives.Root>
|
package/templates/ui/toast.tsx
CHANGED