@octanejs/shadcn 0.0.51 → 0.0.53
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/package.json +9 -9
- package/src/bases/base-ui/ui/accordion.tsrx +3 -1
- package/src/bases/base-ui/ui/alert-dialog.tsrx +6 -5
- package/src/bases/base-ui/ui/alert.tsrx +3 -2
- package/src/bases/base-ui/ui/aspect-ratio.tsrx +5 -3
- package/src/bases/base-ui/ui/badge.tsrx +2 -1
- package/src/bases/base-ui/ui/breadcrumb.tsrx +4 -4
- package/src/bases/base-ui/ui/button.tsrx +17 -10
- package/src/bases/base-ui/ui/context-menu.tsrx +37 -29
- package/src/bases/base-ui/ui/dialog.tsrx +6 -4
- package/src/bases/base-ui/ui/dropdown-menu.tsrx +37 -29
- package/src/bases/base-ui/ui/empty.tsrx +1 -1
- package/src/bases/base-ui/ui/field.tsrx +17 -11
- package/src/bases/base-ui/ui/hover-card.tsrx +15 -16
- package/src/bases/base-ui/ui/item.tsrx +3 -2
- package/src/bases/base-ui/ui/kbd.tsrx +1 -1
- package/src/bases/base-ui/ui/menubar.tsrx +38 -34
- package/src/bases/base-ui/ui/native-select.tsrx +3 -4
- package/src/bases/base-ui/ui/navigation-menu.tsrx +113 -87
- package/src/bases/base-ui/ui/pagination.tsrx +6 -2
- package/src/bases/base-ui/ui/popover.tsrx +15 -16
- package/src/bases/base-ui/ui/radio-group.tsrx +1 -3
- package/src/bases/base-ui/ui/scroll-area.tsrx +33 -27
- package/src/bases/base-ui/ui/select.tsrx +138 -106
- package/src/bases/base-ui/ui/sheet.tsrx +6 -4
- package/src/bases/base-ui/ui/sidebar.tsrx +65 -44
- package/src/bases/base-ui/ui/slider.tsrx +1 -3
- package/src/bases/base-ui/ui/tabs.tsrx +1 -1
- package/src/bases/base-ui/ui/toggle-group.tsrx +3 -3
- package/src/bases/base-ui/ui/toggle.tsrx +3 -2
- package/src/bases/base-ui/ui/tooltip.tsrx +17 -17
- package/src/bases/radix/ui/accordion.tsrx +3 -1
- package/src/bases/radix/ui/alert-dialog.tsrx +1 -1
- package/src/bases/radix/ui/alert.tsrx +15 -14
- package/src/bases/radix/ui/badge.tsrx +2 -1
- package/src/bases/radix/ui/button.tsrx +17 -10
- package/src/bases/radix/ui/context-menu.tsrx +20 -10
- package/src/bases/radix/ui/dropdown-menu.tsrx +16 -9
- package/src/bases/radix/ui/empty.tsrx +1 -1
- package/src/bases/radix/ui/field.tsrx +17 -11
- package/src/bases/radix/ui/item.tsrx +3 -2
- package/src/bases/radix/ui/menubar.tsrx +17 -14
- package/src/bases/radix/ui/native-select.tsrx +8 -8
- package/src/bases/radix/ui/navigation-menu.tsrx +2 -3
- package/src/bases/radix/ui/pagination.tsrx +6 -2
- package/src/bases/radix/ui/radio-group.tsrx +1 -3
- package/src/bases/radix/ui/scroll-area.tsrx +8 -2
- package/src/bases/radix/ui/select.tsrx +10 -5
- package/src/bases/radix/ui/sidebar.tsrx +61 -42
- package/src/bases/radix/ui/slider.tsrx +9 -7
- package/src/bases/radix/ui/tabs.tsrx +11 -5
- package/src/bases/radix/ui/toggle.tsrx +3 -2
- package/src/bases/radix/ui/tooltip.tsrx +2 -1
- package/src/bases/react-aria/ui/accordion.tsrx +58 -47
- package/src/bases/react-aria/ui/alert-dialog.tsrx +118 -92
- package/src/bases/react-aria/ui/alert.tsrx +39 -32
- package/src/bases/react-aria/ui/aspect-ratio.tsrx +12 -8
- package/src/bases/react-aria/ui/avatar.tsrx +73 -57
- package/src/bases/react-aria/ui/badge.tsrx +19 -12
- package/src/bases/react-aria/ui/breadcrumb.tsrx +66 -57
- package/src/bases/react-aria/ui/button.tsrx +17 -10
- package/src/bases/react-aria/ui/card.tsrx +63 -49
- package/src/bases/react-aria/ui/checkbox.tsrx +25 -19
- package/src/bases/react-aria/ui/dialog.tsrx +103 -83
- package/src/bases/react-aria/ui/empty.tsrx +58 -44
- package/src/bases/react-aria/ui/field.tsrx +142 -100
- package/src/bases/react-aria/ui/input.tsrx +2 -3
- package/src/bases/react-aria/ui/item.tsrx +98 -78
- package/src/bases/react-aria/ui/kbd.tsrx +1 -1
- package/src/bases/react-aria/ui/label.tsrx +12 -10
- package/src/bases/react-aria/ui/native-select.tsrx +38 -30
- package/src/bases/react-aria/ui/pagination.tsrx +76 -60
- package/src/bases/react-aria/ui/popover.tsrx +32 -22
- package/src/bases/react-aria/ui/radio-group.tsrx +30 -23
- package/src/bases/react-aria/ui/scroll-area.tsrx +12 -8
- package/src/bases/react-aria/ui/sheet.tsrx +92 -73
- package/src/bases/react-aria/ui/skeleton.tsrx +7 -5
- package/src/bases/react-aria/ui/slider.tsrx +44 -38
- package/src/bases/react-aria/ui/switch.tsrx +28 -20
- package/src/bases/react-aria/ui/table.tsrx +67 -51
- package/src/bases/react-aria/ui/tabs.tsrx +40 -31
- package/src/bases/react-aria/ui/textarea.tsrx +2 -3
- package/src/bases/react-aria/ui/toggle.tsrx +11 -8
|
@@ -8,19 +8,23 @@ import { cn } from 'cn';
|
|
|
8
8
|
const Select = SelectPrimitive.Root;
|
|
9
9
|
|
|
10
10
|
function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
|
|
11
|
-
return
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
return (
|
|
12
|
+
<SelectPrimitive.Group
|
|
13
|
+
data-slot="select-group"
|
|
14
|
+
className={cn('scroll-my-1 p-1', className)}
|
|
15
|
+
{...props}
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {
|
|
19
|
-
return
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
return (
|
|
22
|
+
<SelectPrimitive.Value
|
|
23
|
+
data-slot="select-value"
|
|
24
|
+
className={cn('flex flex-1 text-left', className)}
|
|
25
|
+
{...props}
|
|
26
|
+
/>
|
|
27
|
+
);
|
|
24
28
|
}
|
|
25
29
|
|
|
26
30
|
function SelectTrigger({
|
|
@@ -31,20 +35,22 @@ function SelectTrigger({
|
|
|
31
35
|
}: SelectPrimitive.Trigger.Props & {
|
|
32
36
|
size?: 'sm' | 'default';
|
|
33
37
|
}) {
|
|
34
|
-
return
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
38
|
+
return (
|
|
39
|
+
<SelectPrimitive.Trigger
|
|
40
|
+
data-slot="select-trigger"
|
|
41
|
+
data-size={size}
|
|
42
|
+
className={cn(
|
|
43
|
+
"border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm transition-colors select-none focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
44
|
+
className,
|
|
45
|
+
)}
|
|
46
|
+
{...props}
|
|
47
|
+
>
|
|
48
|
+
{children}
|
|
49
|
+
<SelectPrimitive.Icon
|
|
50
|
+
render={<ChevronDownIcon className="text-muted-foreground size-4 pointer-events-none" />}
|
|
51
|
+
/>
|
|
52
|
+
</SelectPrimitive.Trigger>
|
|
53
|
+
);
|
|
48
54
|
}
|
|
49
55
|
|
|
50
56
|
function SelectContent({
|
|
@@ -56,102 +62,128 @@ function SelectContent({
|
|
|
56
62
|
alignOffset = 0,
|
|
57
63
|
alignItemWithTrigger = true,
|
|
58
64
|
...props
|
|
59
|
-
}: SelectPrimitive.Popup.Props &
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
data-slot="select-content"
|
|
74
|
-
data-align-trigger={alignItemWithTrigger}
|
|
75
|
-
className={cn(
|
|
76
|
-
'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none',
|
|
77
|
-
className,
|
|
78
|
-
)}
|
|
79
|
-
{...props}
|
|
65
|
+
}: SelectPrimitive.Popup.Props &
|
|
66
|
+
Pick<
|
|
67
|
+
SelectPrimitive.Positioner.Props,
|
|
68
|
+
'align' | 'alignOffset' | 'side' | 'sideOffset' | 'alignItemWithTrigger'
|
|
69
|
+
>) {
|
|
70
|
+
return (
|
|
71
|
+
<SelectPrimitive.Portal>
|
|
72
|
+
<SelectPrimitive.Positioner
|
|
73
|
+
side={side}
|
|
74
|
+
sideOffset={sideOffset}
|
|
75
|
+
align={align}
|
|
76
|
+
alignOffset={alignOffset}
|
|
77
|
+
alignItemWithTrigger={alignItemWithTrigger}
|
|
78
|
+
className="isolate z-50"
|
|
80
79
|
>
|
|
81
|
-
<
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
<SelectPrimitive.Popup
|
|
81
|
+
data-slot="select-content"
|
|
82
|
+
data-align-trigger={alignItemWithTrigger}
|
|
83
|
+
className={cn(
|
|
84
|
+
'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none',
|
|
85
|
+
className,
|
|
86
|
+
)}
|
|
87
|
+
{...props}
|
|
88
|
+
>
|
|
89
|
+
<SelectScrollUpButton />
|
|
90
|
+
<SelectPrimitive.List>{children}</SelectPrimitive.List>
|
|
91
|
+
<SelectScrollDownButton />
|
|
92
|
+
</SelectPrimitive.Popup>
|
|
93
|
+
</SelectPrimitive.Positioner>
|
|
94
|
+
</SelectPrimitive.Portal>
|
|
95
|
+
);
|
|
87
96
|
}
|
|
88
97
|
|
|
89
98
|
function SelectLabel({ className, ...props }: SelectPrimitive.GroupLabel.Props) {
|
|
90
|
-
return
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
99
|
+
return (
|
|
100
|
+
<SelectPrimitive.GroupLabel
|
|
101
|
+
data-slot="select-label"
|
|
102
|
+
className={cn('text-muted-foreground px-1.5 py-1 text-xs', className)}
|
|
103
|
+
{...props}
|
|
104
|
+
/>
|
|
105
|
+
);
|
|
95
106
|
}
|
|
96
107
|
|
|
97
108
|
function SelectItem({ className, children, ...props }: SelectPrimitive.Item.Props) {
|
|
98
|
-
return
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
<SelectPrimitive.ItemText
|
|
107
|
-
className="flex flex-1 gap-2 shrink-0 whitespace-nowrap"
|
|
108
|
-
>{children}</SelectPrimitive.ItemText>
|
|
109
|
-
<SelectPrimitive.ItemIndicator
|
|
110
|
-
render={<span
|
|
111
|
-
className="pointer-events-none absolute right-2 flex size-4 items-center justify-center"
|
|
112
|
-
/>}
|
|
109
|
+
return (
|
|
110
|
+
<SelectPrimitive.Item
|
|
111
|
+
data-slot="select-item"
|
|
112
|
+
className={cn(
|
|
113
|
+
"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
114
|
+
className,
|
|
115
|
+
)}
|
|
116
|
+
{...props}
|
|
113
117
|
>
|
|
114
|
-
<
|
|
115
|
-
|
|
116
|
-
|
|
118
|
+
<SelectPrimitive.ItemText className="flex flex-1 gap-2 shrink-0 whitespace-nowrap">
|
|
119
|
+
{children}
|
|
120
|
+
</SelectPrimitive.ItemText>
|
|
121
|
+
<SelectPrimitive.ItemIndicator
|
|
122
|
+
render={
|
|
123
|
+
<span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />
|
|
124
|
+
}
|
|
125
|
+
>
|
|
126
|
+
<CheckIcon className="pointer-events-none" />
|
|
127
|
+
</SelectPrimitive.ItemIndicator>
|
|
128
|
+
</SelectPrimitive.Item>
|
|
129
|
+
);
|
|
117
130
|
}
|
|
118
131
|
|
|
119
132
|
function SelectSeparator({ className, ...props }: SelectPrimitive.Separator.Props) {
|
|
120
|
-
return
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
133
|
+
return (
|
|
134
|
+
<SelectPrimitive.Separator
|
|
135
|
+
data-slot="select-separator"
|
|
136
|
+
className={cn('bg-border -mx-1 my-1 h-px pointer-events-none', className)}
|
|
137
|
+
{...props}
|
|
138
|
+
/>
|
|
139
|
+
);
|
|
125
140
|
}
|
|
126
141
|
|
|
127
|
-
function SelectScrollUpButton({
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
className
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
142
|
+
function SelectScrollUpButton({
|
|
143
|
+
className,
|
|
144
|
+
...props
|
|
145
|
+
}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {
|
|
146
|
+
return (
|
|
147
|
+
<SelectPrimitive.ScrollUpArrow
|
|
148
|
+
data-slot="select-scroll-up-button"
|
|
149
|
+
className={cn(
|
|
150
|
+
"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 top-0 w-full",
|
|
151
|
+
className,
|
|
152
|
+
)}
|
|
153
|
+
{...props}
|
|
154
|
+
>
|
|
155
|
+
<ChevronUpIcon />
|
|
156
|
+
</SelectPrimitive.ScrollUpArrow>
|
|
157
|
+
);
|
|
140
158
|
}
|
|
141
159
|
|
|
142
|
-
function SelectScrollDownButton({
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
className
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
160
|
+
function SelectScrollDownButton({
|
|
161
|
+
className,
|
|
162
|
+
...props
|
|
163
|
+
}: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {
|
|
164
|
+
return (
|
|
165
|
+
<SelectPrimitive.ScrollDownArrow
|
|
166
|
+
data-slot="select-scroll-down-button"
|
|
167
|
+
className={cn(
|
|
168
|
+
"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 bottom-0 w-full",
|
|
169
|
+
className,
|
|
170
|
+
)}
|
|
171
|
+
{...props}
|
|
172
|
+
>
|
|
173
|
+
<ChevronDownIcon />
|
|
174
|
+
</SelectPrimitive.ScrollDownArrow>
|
|
175
|
+
);
|
|
155
176
|
}
|
|
156
177
|
|
|
157
|
-
export {
|
|
178
|
+
export {
|
|
179
|
+
Select,
|
|
180
|
+
SelectContent,
|
|
181
|
+
SelectGroup,
|
|
182
|
+
SelectItem,
|
|
183
|
+
SelectLabel,
|
|
184
|
+
SelectScrollDownButton,
|
|
185
|
+
SelectScrollUpButton,
|
|
186
|
+
SelectSeparator,
|
|
187
|
+
SelectTrigger,
|
|
188
|
+
SelectValue,
|
|
189
|
+
};
|
|
@@ -82,10 +82,12 @@ export function SheetContent(props: SheetContentProps) @{
|
|
|
82
82
|
@if (showCloseButton) {
|
|
83
83
|
<SheetPrimitive.Close
|
|
84
84
|
data-slot="sheet-close"
|
|
85
|
-
render={
|
|
86
|
-
<
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
render={
|
|
86
|
+
<Button variant="ghost" className="absolute top-3 right-3" size="icon-sm">
|
|
87
|
+
<XIcon />
|
|
88
|
+
<span className="sr-only">Close</span>
|
|
89
|
+
</Button>
|
|
90
|
+
}
|
|
89
91
|
/>
|
|
90
92
|
}
|
|
91
93
|
</SheetPrimitive.Popup>
|
|
@@ -74,12 +74,14 @@ export function useSidebar(): SidebarContextProps {
|
|
|
74
74
|
return context;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
export function SidebarProvider(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
77
|
+
export function SidebarProvider(
|
|
78
|
+
props: Props & {
|
|
79
|
+
defaultOpen?: boolean;
|
|
80
|
+
open?: boolean;
|
|
81
|
+
onOpenChange?: (open: boolean) => void;
|
|
82
|
+
style?: Record<string, string>;
|
|
83
|
+
},
|
|
84
|
+
) {
|
|
83
85
|
const {
|
|
84
86
|
defaultOpen = true,
|
|
85
87
|
open: openProp,
|
|
@@ -97,8 +99,7 @@ export function SidebarProvider(props: Props & {
|
|
|
97
99
|
const [_open, _setOpen] = useState(defaultOpen);
|
|
98
100
|
const open = openProp ?? _open;
|
|
99
101
|
const setOpen = useCallback((value: boolean | ((value: boolean) => boolean)) => {
|
|
100
|
-
const openState =
|
|
101
|
-
typeof value === 'function' ? value(open) : value;
|
|
102
|
+
const openState = typeof value === 'function' ? value(open) : value;
|
|
102
103
|
if (setOpenProp) {
|
|
103
104
|
setOpenProp(openState);
|
|
104
105
|
} else {
|
|
@@ -106,8 +107,7 @@ export function SidebarProvider(props: Props & {
|
|
|
106
107
|
}
|
|
107
108
|
|
|
108
109
|
// This sets the cookie to keep the sidebar state.
|
|
109
|
-
document.cookie =
|
|
110
|
-
`${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
110
|
+
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
111
111
|
});
|
|
112
112
|
|
|
113
113
|
// Helper to toggle the sidebar.
|
|
@@ -132,17 +132,15 @@ export function SidebarProvider(props: Props & {
|
|
|
132
132
|
// This makes it easier to style the sidebar with Tailwind classes.
|
|
133
133
|
const state = open ? 'expanded' : 'collapsed';
|
|
134
134
|
|
|
135
|
-
const contextValue = useMemo<SidebarContextProps>(
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}),
|
|
145
|
-
);
|
|
135
|
+
const contextValue = useMemo<SidebarContextProps>(() => ({
|
|
136
|
+
state,
|
|
137
|
+
open,
|
|
138
|
+
setOpen,
|
|
139
|
+
isMobile,
|
|
140
|
+
openMobile,
|
|
141
|
+
setOpenMobile,
|
|
142
|
+
toggleSidebar,
|
|
143
|
+
}));
|
|
146
144
|
|
|
147
145
|
return createElement(
|
|
148
146
|
SidebarContext,
|
|
@@ -167,12 +165,14 @@ export function SidebarProvider(props: Props & {
|
|
|
167
165
|
);
|
|
168
166
|
}
|
|
169
167
|
|
|
170
|
-
export function Sidebar(
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
168
|
+
export function Sidebar(
|
|
169
|
+
props: Props & {
|
|
170
|
+
side?: 'left' | 'right';
|
|
171
|
+
variant?: 'sidebar' | 'floating' | 'inset';
|
|
172
|
+
collapsible?: 'offcanvas' | 'icon' | 'none';
|
|
173
|
+
dir?: string;
|
|
174
|
+
},
|
|
175
|
+
) {
|
|
176
176
|
const {
|
|
177
177
|
side = 'left',
|
|
178
178
|
variant = 'sidebar',
|
|
@@ -273,7 +273,8 @@ export function Sidebar(props: Props & {
|
|
|
273
273
|
{
|
|
274
274
|
'data-sidebar': 'sidebar',
|
|
275
275
|
'data-slot': 'sidebar-inner',
|
|
276
|
-
className:
|
|
276
|
+
className:
|
|
277
|
+
'flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border',
|
|
277
278
|
},
|
|
278
279
|
props.children,
|
|
279
280
|
),
|
|
@@ -281,7 +282,11 @@ export function Sidebar(props: Props & {
|
|
|
281
282
|
);
|
|
282
283
|
}
|
|
283
284
|
|
|
284
|
-
export function SidebarTrigger({
|
|
285
|
+
export function SidebarTrigger({
|
|
286
|
+
className,
|
|
287
|
+
onClick,
|
|
288
|
+
...props
|
|
289
|
+
}: Props & {
|
|
285
290
|
onClick?: (event: MouseEvent) => void;
|
|
286
291
|
}) @{
|
|
287
292
|
const { toggleSidebar } = useSidebar();
|
|
@@ -394,7 +399,10 @@ export function SidebarGroup({ className, ...props }: Props) @{
|
|
|
394
399
|
/>
|
|
395
400
|
}
|
|
396
401
|
|
|
397
|
-
export function SidebarGroupLabel({
|
|
402
|
+
export function SidebarGroupLabel({
|
|
403
|
+
className,
|
|
404
|
+
...props
|
|
405
|
+
}: Props & {
|
|
398
406
|
/** Not supported in this base — see the header. Declared so it fails to compile, not silently. */
|
|
399
407
|
asChild?: never;
|
|
400
408
|
}) @{
|
|
@@ -409,7 +417,10 @@ export function SidebarGroupLabel({ className, ...props }: Props & {
|
|
|
409
417
|
/>
|
|
410
418
|
}
|
|
411
419
|
|
|
412
|
-
export function SidebarGroupAction({
|
|
420
|
+
export function SidebarGroupAction({
|
|
421
|
+
className,
|
|
422
|
+
...props
|
|
423
|
+
}: Props & {
|
|
413
424
|
/** Not supported in this base — see the header. Declared so it fails to compile, not silently. */
|
|
414
425
|
asChild?: never;
|
|
415
426
|
}) @{
|
|
@@ -461,7 +472,8 @@ export const sidebarMenuButtonVariants = cva(
|
|
|
461
472
|
variants: {
|
|
462
473
|
variant: {
|
|
463
474
|
default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
|
|
464
|
-
outline:
|
|
475
|
+
outline:
|
|
476
|
+
'bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]',
|
|
465
477
|
},
|
|
466
478
|
size: {
|
|
467
479
|
default: 'h-8 text-sm',
|
|
@@ -476,14 +488,16 @@ export const sidebarMenuButtonVariants = cva(
|
|
|
476
488
|
},
|
|
477
489
|
);
|
|
478
490
|
|
|
479
|
-
export function SidebarMenuButton(
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
491
|
+
export function SidebarMenuButton(
|
|
492
|
+
props: Props & {
|
|
493
|
+
/** Not supported in this base — see the header. Declared so it fails to compile, not silently. */
|
|
494
|
+
asChild?: never;
|
|
495
|
+
isActive?: boolean;
|
|
496
|
+
tooltip?: string | Record<string, unknown>;
|
|
497
|
+
variant?: VariantProps<typeof sidebarMenuButtonVariants>['variant'];
|
|
498
|
+
size?: VariantProps<typeof sidebarMenuButtonVariants>['size'];
|
|
499
|
+
},
|
|
500
|
+
) {
|
|
487
501
|
const {
|
|
488
502
|
isActive = false,
|
|
489
503
|
variant = 'default',
|
|
@@ -512,8 +526,7 @@ export function SidebarMenuButton(props: Props & {
|
|
|
512
526
|
return button;
|
|
513
527
|
}
|
|
514
528
|
|
|
515
|
-
const tooltipProps =
|
|
516
|
-
typeof tooltip === 'string' ? { children: tooltip } : tooltip;
|
|
529
|
+
const tooltipProps = typeof tooltip === 'string' ? { children: tooltip } : tooltip;
|
|
517
530
|
|
|
518
531
|
return createElement(
|
|
519
532
|
Tooltip,
|
|
@@ -529,7 +542,11 @@ export function SidebarMenuButton(props: Props & {
|
|
|
529
542
|
);
|
|
530
543
|
}
|
|
531
544
|
|
|
532
|
-
export function SidebarMenuAction({
|
|
545
|
+
export function SidebarMenuAction({
|
|
546
|
+
className,
|
|
547
|
+
showOnHover = false,
|
|
548
|
+
...props
|
|
549
|
+
}: Props & {
|
|
533
550
|
/** Not supported in this base — see the header. Declared so it fails to compile, not silently. */
|
|
534
551
|
asChild?: never;
|
|
535
552
|
showOnHover?: boolean;
|
|
@@ -559,7 +576,11 @@ export function SidebarMenuBadge({ className, ...props }: Props) @{
|
|
|
559
576
|
/>
|
|
560
577
|
}
|
|
561
578
|
|
|
562
|
-
export function SidebarMenuSkeleton({
|
|
579
|
+
export function SidebarMenuSkeleton({
|
|
580
|
+
className,
|
|
581
|
+
showIcon = false,
|
|
582
|
+
...props
|
|
583
|
+
}: Props & {
|
|
563
584
|
showIcon?: boolean;
|
|
564
585
|
}) @{
|
|
565
586
|
// Random width between 50 to 90%.
|
|
@@ -77,9 +77,7 @@ export function Slider<Value extends number | readonly number[]>({
|
|
|
77
77
|
thumbAlignment="edge"
|
|
78
78
|
{...props}
|
|
79
79
|
>
|
|
80
|
-
<SliderPrimitive.Control
|
|
81
|
-
className="relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col"
|
|
82
|
-
>
|
|
80
|
+
<SliderPrimitive.Control className="relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col">
|
|
83
81
|
<SliderPrimitive.Track
|
|
84
82
|
data-slot="slider-track"
|
|
85
83
|
className="relative grow overflow-hidden rounded-full bg-muted select-none data-[orientation=horizontal]:h-1 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1"
|
|
@@ -62,7 +62,7 @@ export function TabsTrigger({ className, ...props }: StyledProps<TabsPrimitive.T
|
|
|
62
62
|
<TabsPrimitive.Tab
|
|
63
63
|
data-slot="tabs-trigger"
|
|
64
64
|
className={cn(
|
|
65
|
-
|
|
65
|
+
"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
66
66
|
'group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent',
|
|
67
67
|
'data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground',
|
|
68
68
|
'after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100',
|
|
@@ -77,9 +77,9 @@ export function ToggleGroup({
|
|
|
77
77
|
)}
|
|
78
78
|
{...props}
|
|
79
79
|
>
|
|
80
|
-
<ToggleGroupContext
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
<ToggleGroupContext value={{ variant, size, spacing, orientation }}>
|
|
81
|
+
{children}
|
|
82
|
+
</ToggleGroupContext>
|
|
83
83
|
</ToggleGroupPrimitive>
|
|
84
84
|
}
|
|
85
85
|
|
|
@@ -17,12 +17,13 @@ import { Toggle as TogglePrimitive } from '@octanejs/base-ui/toggle';
|
|
|
17
17
|
import { cn } from 'cn';
|
|
18
18
|
|
|
19
19
|
export const toggleVariants = cva(
|
|
20
|
-
|
|
20
|
+
"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-pressed:bg-accent data-pressed:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
21
21
|
{
|
|
22
22
|
variants: {
|
|
23
23
|
variant: {
|
|
24
24
|
default: 'bg-transparent',
|
|
25
|
-
outline:
|
|
25
|
+
outline:
|
|
26
|
+
'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',
|
|
26
27
|
},
|
|
27
28
|
size: {
|
|
28
29
|
default: 'h-9 min-w-9 px-2',
|
|
@@ -40,22 +40,21 @@ export interface TooltipContentProps extends Record<string, unknown> {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
/** Props routed to the Positioner rather than the popup. */
|
|
43
|
-
export type BaseUiPositioningProps =
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
>;
|
|
43
|
+
export type BaseUiPositioningProps = Pick<
|
|
44
|
+
TooltipPrimitive.Positioner.Props,
|
|
45
|
+
| 'side'
|
|
46
|
+
| 'sideOffset'
|
|
47
|
+
| 'align'
|
|
48
|
+
| 'alignOffset'
|
|
49
|
+
| 'anchor'
|
|
50
|
+
| 'positionMethod'
|
|
51
|
+
| 'collisionBoundary'
|
|
52
|
+
| 'collisionPadding'
|
|
53
|
+
| 'collisionAvoidance'
|
|
54
|
+
| 'arrowPadding'
|
|
55
|
+
| 'sticky'
|
|
56
|
+
| 'disableAnchorTracking'
|
|
57
|
+
>;
|
|
59
58
|
|
|
60
59
|
export function TooltipContent({
|
|
61
60
|
className,
|
|
@@ -104,7 +103,8 @@ export function TooltipContent({
|
|
|
104
103
|
createElement(Fragment, { key: 'content', children }),
|
|
105
104
|
createElement(TooltipPrimitive.Arrow, {
|
|
106
105
|
key: 'arrow',
|
|
107
|
-
className:
|
|
106
|
+
className:
|
|
107
|
+
'z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground',
|
|
108
108
|
}),
|
|
109
109
|
],
|
|
110
110
|
}),
|
|
@@ -67,6 +67,8 @@ export function AccordionContent(props: Props) @{
|
|
|
67
67
|
'h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4',
|
|
68
68
|
className,
|
|
69
69
|
)}
|
|
70
|
-
>
|
|
70
|
+
>
|
|
71
|
+
{props.children}
|
|
72
|
+
</div>
|
|
71
73
|
</AccordionPrimitive.Content>
|
|
72
74
|
}
|
|
@@ -88,7 +88,7 @@ export function AlertDialogMedia({ className, ...props }: Props) @{
|
|
|
88
88
|
<div
|
|
89
89
|
data-slot="alert-dialog-media"
|
|
90
90
|
className={cn(
|
|
91
|
-
|
|
91
|
+
"mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6",
|
|
92
92
|
className,
|
|
93
93
|
)}
|
|
94
94
|
{...props}
|