@octanejs/shadcn 0.0.52 → 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
|
@@ -3,12 +3,16 @@ import type { HostProps } from '../../../lib/types';
|
|
|
3
3
|
|
|
4
4
|
export function ScrollArea({ className, children, ...props }: HostProps<'div'>) {
|
|
5
5
|
// Use native scrollbar-width and scrollbar-color to customize the scrollbar.
|
|
6
|
-
return
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
return (
|
|
7
|
+
<div
|
|
8
|
+
data-slot="scroll-area"
|
|
9
|
+
className={cn(
|
|
10
|
+
'relative [scrollbar-width:thin] [scrollbar-color:var(--color-border)_transparent] overflow-auto outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1',
|
|
11
|
+
className,
|
|
12
|
+
)}
|
|
13
|
+
{...props}
|
|
14
|
+
>
|
|
15
|
+
{children}
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
14
18
|
}
|
|
@@ -22,36 +22,45 @@ export function SheetTrigger({ ...props }: SheetTriggerPrimitiveProps) {
|
|
|
22
22
|
return <SheetTriggerPrimitive data-slot="sheet-trigger" {...props} />;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
export function SheetClose({
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
25
|
+
export function SheetClose({
|
|
26
|
+
className,
|
|
27
|
+
variant = 'outline',
|
|
28
|
+
size = 'default',
|
|
29
|
+
...props
|
|
30
|
+
}: Record<string, any>) {
|
|
31
|
+
return (
|
|
32
|
+
<Button
|
|
33
|
+
slot="close"
|
|
34
|
+
data-slot="sheet-close"
|
|
35
|
+
variant={variant}
|
|
36
|
+
size={size}
|
|
37
|
+
className={cn(className)}
|
|
38
|
+
{...props}
|
|
39
|
+
/>
|
|
40
|
+
);
|
|
37
41
|
}
|
|
38
42
|
|
|
39
|
-
function SheetOverlay({
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
function SheetOverlay({
|
|
44
|
+
className,
|
|
45
|
+
children,
|
|
46
|
+
...props
|
|
47
|
+
}: Omit<ModalOverlayPrimitiveProps, 'className' | 'children'> & {
|
|
43
48
|
className?: string;
|
|
44
49
|
children: OctaneNode;
|
|
45
50
|
}) {
|
|
46
|
-
return
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
return (
|
|
52
|
+
<ModalOverlayPrimitive
|
|
53
|
+
data-slot="sheet-overlay"
|
|
54
|
+
isDismissable
|
|
55
|
+
className={cn(
|
|
56
|
+
'fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-entering:opacity-0 data-exiting:opacity-0 supports-backdrop-filter:backdrop-blur-xs',
|
|
57
|
+
className,
|
|
58
|
+
)}
|
|
59
|
+
{...props}
|
|
60
|
+
>
|
|
61
|
+
{children}
|
|
62
|
+
</ModalOverlayPrimitive>
|
|
63
|
+
);
|
|
55
64
|
}
|
|
56
65
|
|
|
57
66
|
export function Sheet({
|
|
@@ -66,28 +75,31 @@ export function Sheet({
|
|
|
66
75
|
side?: 'top' | 'right' | 'bottom' | 'left';
|
|
67
76
|
showCloseButton?: boolean;
|
|
68
77
|
}) {
|
|
69
|
-
return
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
<SheetPrimitive
|
|
79
|
-
data-slot="sheet"
|
|
80
|
-
className="[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] [gap:inherit] outline-none"
|
|
78
|
+
return (
|
|
79
|
+
<SheetOverlay {...props}>
|
|
80
|
+
<ModalPrimitive
|
|
81
|
+
data-slot="sheet-content"
|
|
82
|
+
data-side={side}
|
|
83
|
+
className={cn(
|
|
84
|
+
'fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-entering:opacity-0 data-exiting:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-entering:translate-y-[2.5rem] data-[side=bottom]:data-exiting:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-entering:translate-x-[-2.5rem] data-[side=left]:data-exiting:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-entering:translate-x-[2.5rem] data-[side=right]:data-exiting:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-entering:translate-y-[-2.5rem] data-[side=top]:data-exiting:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm',
|
|
85
|
+
className,
|
|
86
|
+
)}
|
|
81
87
|
>
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
<SheetPrimitive
|
|
89
|
+
data-slot="sheet"
|
|
90
|
+
className="[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] [gap:inherit] outline-none"
|
|
91
|
+
>
|
|
92
|
+
{children}
|
|
93
|
+
{showCloseButton && (
|
|
94
|
+
<SheetClose variant="ghost" className="absolute top-3 right-3" size="icon-sm">
|
|
95
|
+
<XIcon />
|
|
96
|
+
<span className="sr-only">Close</span>
|
|
97
|
+
</SheetClose>
|
|
98
|
+
)}
|
|
99
|
+
</SheetPrimitive>
|
|
100
|
+
</ModalPrimitive>
|
|
101
|
+
</SheetOverlay>
|
|
102
|
+
);
|
|
91
103
|
}
|
|
92
104
|
|
|
93
105
|
export function SheetContent({
|
|
@@ -100,43 +112,50 @@ export function SheetContent({
|
|
|
100
112
|
side?: 'top' | 'right' | 'bottom' | 'left';
|
|
101
113
|
showCloseButton?: boolean;
|
|
102
114
|
}) {
|
|
103
|
-
return
|
|
104
|
-
className={className}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
>{children}</Sheet>;
|
|
115
|
+
return (
|
|
116
|
+
<Sheet className={className} side={side} showCloseButton={showCloseButton} {...props}>
|
|
117
|
+
{children}
|
|
118
|
+
</Sheet>
|
|
119
|
+
);
|
|
109
120
|
}
|
|
110
121
|
|
|
111
122
|
export function SheetHeader({ className, ...props }: HostProps<'div'>) {
|
|
112
|
-
return
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
123
|
+
return (
|
|
124
|
+
<div
|
|
125
|
+
data-slot="sheet-header"
|
|
126
|
+
className={cn('flex flex-col gap-0.5 p-4', className)}
|
|
127
|
+
{...props}
|
|
128
|
+
/>
|
|
129
|
+
);
|
|
117
130
|
}
|
|
118
131
|
|
|
119
132
|
export function SheetFooter({ className, ...props }: HostProps<'div'>) {
|
|
120
|
-
return
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
133
|
+
return (
|
|
134
|
+
<div
|
|
135
|
+
data-slot="sheet-footer"
|
|
136
|
+
className={cn('mt-auto flex flex-col gap-2 p-4', className)}
|
|
137
|
+
{...props}
|
|
138
|
+
/>
|
|
139
|
+
);
|
|
125
140
|
}
|
|
126
141
|
|
|
127
142
|
export function SheetTitle({ className, ...props }: Omit<HeadingProps, 'slot'>) {
|
|
128
|
-
return
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
143
|
+
return (
|
|
144
|
+
<Heading
|
|
145
|
+
slot="title"
|
|
146
|
+
data-slot="sheet-title"
|
|
147
|
+
className={cn('text-base font-medium text-foreground', className)}
|
|
148
|
+
{...props}
|
|
149
|
+
/>
|
|
150
|
+
);
|
|
134
151
|
}
|
|
135
152
|
|
|
136
153
|
export function SheetDescription({ className, ...props }: Omit<HostProps<'div'>, 'slot'>) {
|
|
137
|
-
return
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
154
|
+
return (
|
|
155
|
+
<div
|
|
156
|
+
data-slot="sheet-description"
|
|
157
|
+
className={cn('text-sm text-muted-foreground', className)}
|
|
158
|
+
{...props}
|
|
159
|
+
/>
|
|
160
|
+
);
|
|
142
161
|
}
|
|
@@ -2,9 +2,11 @@ import { cn } from 'cn';
|
|
|
2
2
|
import type { HostProps } from '../../../lib/types';
|
|
3
3
|
|
|
4
4
|
export function Skeleton({ className, ...props }: HostProps<'div'>) {
|
|
5
|
-
return
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
return (
|
|
6
|
+
<div
|
|
7
|
+
data-slot="skeleton"
|
|
8
|
+
className={cn('animate-pulse rounded-md bg-muted', className)}
|
|
9
|
+
{...props}
|
|
10
|
+
/>
|
|
11
|
+
);
|
|
10
12
|
}
|
|
@@ -14,43 +14,49 @@ import {
|
|
|
14
14
|
import { cn } from 'cn';
|
|
15
15
|
|
|
16
16
|
type SliderValue = number | number[];
|
|
17
|
-
type SliderProps<T extends SliderValue = SliderValue> =
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
type SliderProps<T extends SliderValue = SliderValue> = Omit<
|
|
18
|
+
SliderPrimitiveProps<T>,
|
|
19
|
+
'className'
|
|
20
|
+
> & {
|
|
21
|
+
className?: string;
|
|
22
|
+
};
|
|
21
23
|
|
|
22
|
-
export function Slider<T extends SliderValue = SliderValue>({
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
className
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
24
|
+
export function Slider<T extends SliderValue = SliderValue>({
|
|
25
|
+
className,
|
|
26
|
+
...props
|
|
27
|
+
}: SliderProps<T>) {
|
|
28
|
+
return (
|
|
29
|
+
<SliderPrimitive
|
|
30
|
+
className={cn(
|
|
31
|
+
'group relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col',
|
|
32
|
+
className,
|
|
33
|
+
)}
|
|
34
|
+
data-slot="slider"
|
|
35
|
+
{...props}
|
|
36
|
+
>
|
|
37
|
+
{({ state }: SliderRenderProps) => {
|
|
38
|
+
return (
|
|
39
|
+
<>
|
|
40
|
+
<SliderTrack
|
|
41
|
+
data-slot="slider-track"
|
|
42
|
+
className="relative grow overflow-hidden rounded-full bg-muted select-none data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1"
|
|
43
|
+
>
|
|
44
|
+
<SliderFill
|
|
45
|
+
data-slot="slider-range"
|
|
46
|
+
className="absolute bg-primary select-none data-horizontal:h-full data-vertical:w-full"
|
|
47
|
+
/>
|
|
48
|
+
</SliderTrack>
|
|
49
|
+
{state.values.map((_: number, index: number) => (
|
|
50
|
+
<SliderThumb
|
|
51
|
+
data-slot="slider-thumb"
|
|
52
|
+
key={index}
|
|
53
|
+
index={index}
|
|
54
|
+
className="relative block size-3 shrink-0 rounded-full border border-ring bg-white ring-ring/50 transition-[color,box-shadow] select-none group-data-horizontal:top-[50%] group-data-vertical:left-[50%] after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3 disabled:pointer-events-none disabled:opacity-50"
|
|
55
|
+
/>
|
|
56
|
+
))}
|
|
57
|
+
</>
|
|
58
|
+
);
|
|
59
|
+
}}
|
|
60
|
+
</SliderPrimitive>
|
|
61
|
+
);
|
|
56
62
|
}
|
|
@@ -13,26 +13,34 @@ import {
|
|
|
13
13
|
|
|
14
14
|
import { cn } from 'cn';
|
|
15
15
|
|
|
16
|
-
export function Switch({
|
|
16
|
+
export function Switch({
|
|
17
|
+
className,
|
|
18
|
+
size = 'default',
|
|
19
|
+
children,
|
|
20
|
+
...props
|
|
21
|
+
}: SwitchPrimitiveProps & {
|
|
17
22
|
size?: 'sm' | 'default';
|
|
18
23
|
}) {
|
|
19
|
-
return
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
24
|
+
return (
|
|
25
|
+
<SwitchPrimitive
|
|
26
|
+
data-slot="switch"
|
|
27
|
+
data-size={size}
|
|
28
|
+
className={cn(
|
|
29
|
+
'peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none not-data-selected:bg-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-focus-visible:border-ring data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-invalid:border-destructive data-invalid:ring-3 data-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:not-data-selected:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 dark:data-invalid:border-destructive/50 dark:data-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-selected:bg-primary data-disabled:cursor-not-allowed data-disabled:opacity-50',
|
|
30
|
+
className,
|
|
31
|
+
)}
|
|
32
|
+
{...props}
|
|
33
|
+
>
|
|
34
|
+
{composeRenderProps(children, (children, { isSelected }: SwitchRenderProps) => (
|
|
35
|
+
<>
|
|
36
|
+
<span
|
|
37
|
+
data-slot="switch-thumb"
|
|
38
|
+
data-selected={isSelected || undefined}
|
|
39
|
+
className="pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=default]/switch:not-data-selected:translate-x-0 group-data-[size=sm]/switch:size-3 group-data-[size=sm]/switch:not-data-selected:translate-x-0 dark:not-data-selected:bg-foreground group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground group-data-[size=default]/switch:data-selected:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-selected:translate-x-[calc(100%-2px)] dark:data-selected:bg-primary-foreground"
|
|
40
|
+
/>
|
|
41
|
+
{children}
|
|
42
|
+
</>
|
|
43
|
+
))}
|
|
44
|
+
</SwitchPrimitive>
|
|
45
|
+
);
|
|
38
46
|
}
|
|
@@ -23,76 +23,92 @@ import { cn } from 'cn';
|
|
|
23
23
|
import type { HostProps } from '../../../lib/types';
|
|
24
24
|
|
|
25
25
|
export function Table({ className, ...props }: TableProps) {
|
|
26
|
-
return
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
return (
|
|
27
|
+
<div data-slot="table-container" className="relative w-full overflow-x-auto">
|
|
28
|
+
<TablePrimitive
|
|
29
|
+
data-slot="table"
|
|
30
|
+
className={cn('w-full caption-bottom text-sm', className)}
|
|
31
|
+
{...props}
|
|
32
|
+
/>
|
|
33
|
+
</div>
|
|
34
|
+
);
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
export function TableHeader<T extends object>({ className, ...props }: TableHeaderProps<T>) {
|
|
36
|
-
return
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
return (
|
|
39
|
+
<TableHeaderPrimitive
|
|
40
|
+
data-slot="table-header"
|
|
41
|
+
className={cn('[&_tr]:border-b', className)}
|
|
42
|
+
{...props}
|
|
43
|
+
/>
|
|
44
|
+
);
|
|
41
45
|
}
|
|
42
46
|
|
|
43
47
|
export function TableBody<T extends object>({ className, ...props }: TableBodyProps<T>) {
|
|
44
|
-
return
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
return (
|
|
49
|
+
<TableBodyPrimitive
|
|
50
|
+
data-slot="table-body"
|
|
51
|
+
className={cn('data-empty:h-24 data-empty:text-center [&_tr:last-child]:border-0', className)}
|
|
52
|
+
{...props}
|
|
53
|
+
/>
|
|
54
|
+
);
|
|
49
55
|
}
|
|
50
56
|
|
|
51
57
|
export function TableFooter<T extends object>({ className, ...props }: TableFooterProps<T>) {
|
|
52
|
-
return
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
return (
|
|
59
|
+
<TableFooterPrimitive
|
|
60
|
+
data-slot="table-footer"
|
|
61
|
+
className={cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className)}
|
|
62
|
+
{...props}
|
|
63
|
+
/>
|
|
64
|
+
);
|
|
57
65
|
}
|
|
58
66
|
|
|
59
67
|
export function TableRow<T extends object>({ className, ...props }: RowProps<T>) {
|
|
60
|
-
return
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
return (
|
|
69
|
+
<RowPrimitive
|
|
70
|
+
data-slot="table-row"
|
|
71
|
+
className={cn(
|
|
72
|
+
'border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted data-selected:bg-muted',
|
|
73
|
+
className,
|
|
74
|
+
)}
|
|
75
|
+
{...props}
|
|
76
|
+
/>
|
|
77
|
+
);
|
|
68
78
|
}
|
|
69
79
|
|
|
70
80
|
export function TableHead({ className, ...props }: ColumnProps) {
|
|
71
|
-
return
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
81
|
+
return (
|
|
82
|
+
<ColumnPrimitive
|
|
83
|
+
data-slot="table-head"
|
|
84
|
+
className={cn(
|
|
85
|
+
'h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([data-slot=checkbox])]:pr-0 [&:has([role=checkbox])]:pr-0',
|
|
86
|
+
className,
|
|
87
|
+
)}
|
|
88
|
+
{...props}
|
|
89
|
+
/>
|
|
90
|
+
);
|
|
79
91
|
}
|
|
80
92
|
|
|
81
93
|
export function TableCell({ className, ...props }: CellProps) {
|
|
82
|
-
return
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
94
|
+
return (
|
|
95
|
+
<CellPrimitive
|
|
96
|
+
data-slot="table-cell"
|
|
97
|
+
className={cn(
|
|
98
|
+
'p-2 align-middle whitespace-nowrap [&:has([data-slot=checkbox])]:pr-0 [&:has([role=checkbox])]:pr-0',
|
|
99
|
+
className,
|
|
100
|
+
)}
|
|
101
|
+
{...props}
|
|
102
|
+
/>
|
|
103
|
+
);
|
|
90
104
|
}
|
|
91
105
|
|
|
92
106
|
export function TableCaption({ className, ...props }: HostProps<'figcaption'>) {
|
|
93
|
-
return
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
107
|
+
return (
|
|
108
|
+
<figcaption
|
|
109
|
+
data-slot="table-caption"
|
|
110
|
+
className={cn('mt-4 text-center text-sm text-muted-foreground', className)}
|
|
111
|
+
{...props}
|
|
112
|
+
/>
|
|
113
|
+
);
|
|
98
114
|
}
|
|
@@ -10,11 +10,13 @@ import type { TabPanelProps, TabProps, TabsProps } from '@octanejs/aria/componen
|
|
|
10
10
|
import { cn } from 'cn';
|
|
11
11
|
|
|
12
12
|
export function Tabs({ className, ...props }: TabsProps) {
|
|
13
|
-
return
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
return (
|
|
14
|
+
<TabsPrimitive
|
|
15
|
+
data-slot="tabs"
|
|
16
|
+
className={cn('group/tabs flex gap-2 data-horizontal:flex-col', className)}
|
|
17
|
+
{...props}
|
|
18
|
+
/>
|
|
19
|
+
);
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
export const tabsListVariants = cva(
|
|
@@ -32,36 +34,43 @@ export const tabsListVariants = cva(
|
|
|
32
34
|
},
|
|
33
35
|
);
|
|
34
36
|
|
|
35
|
-
export function TabsList({
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
export function TabsList({
|
|
38
|
+
className,
|
|
39
|
+
variant = 'default',
|
|
40
|
+
...props
|
|
41
|
+
}: Record<string, any> & VariantProps<typeof tabsListVariants>) {
|
|
42
|
+
return (
|
|
43
|
+
<TabListPrimitive
|
|
44
|
+
data-slot="tabs-list"
|
|
45
|
+
data-variant={variant}
|
|
46
|
+
className={cn(tabsListVariants({ variant }), className)}
|
|
47
|
+
{...props}
|
|
48
|
+
/>
|
|
49
|
+
);
|
|
45
50
|
}
|
|
46
51
|
|
|
47
52
|
export function TabsTrigger({ className, ...props }: TabProps) {
|
|
48
|
-
return
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
return (
|
|
54
|
+
<TabPrimitive
|
|
55
|
+
data-slot="tabs-trigger"
|
|
56
|
+
className={cn(
|
|
57
|
+
"relative inline-flex h-[calc(100%-1px)] flex-1 cursor-default 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-vertical/tabs:w-full group-data-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 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-selected:shadow-sm group-data-[variant=line]/tabs-list:data-selected:shadow-none 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",
|
|
58
|
+
'group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-selected:bg-transparent dark:group-data-[variant=line]/tabs-list:data-selected:border-transparent dark:group-data-[variant=line]/tabs-list:data-selected:bg-transparent',
|
|
59
|
+
'data-selected:bg-background data-selected:text-foreground dark:data-selected:border-input dark:data-selected:bg-input/30 dark:data-selected:text-foreground',
|
|
60
|
+
'after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-selected:after:opacity-100',
|
|
61
|
+
className,
|
|
62
|
+
)}
|
|
63
|
+
{...props}
|
|
64
|
+
/>
|
|
65
|
+
);
|
|
59
66
|
}
|
|
60
67
|
|
|
61
68
|
export function TabsContent({ className, ...props }: TabPanelProps) {
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
69
|
+
return (
|
|
70
|
+
<TabPanelPrimitive
|
|
71
|
+
data-slot="tabs-content"
|
|
72
|
+
className={cn('flex-1 text-sm outline-none', className)}
|
|
73
|
+
{...props}
|
|
74
|
+
/>
|
|
75
|
+
);
|
|
67
76
|
}
|
|
@@ -14,9 +14,8 @@ export interface TextareaProps extends TextareaPrimitiveProps {}
|
|
|
14
14
|
export function Textarea({ className, ...props }: TextareaProps) @{
|
|
15
15
|
<TextareaPrimitive
|
|
16
16
|
data-slot="textarea"
|
|
17
|
-
className={composeRenderProps(
|
|
18
|
-
|
|
19
|
-
(resolved: string | undefined) => cn(
|
|
17
|
+
className={composeRenderProps(className, (resolved: string | undefined) =>
|
|
18
|
+
cn(
|
|
20
19
|
'flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',
|
|
21
20
|
resolved,
|
|
22
21
|
),
|