@octanejs/shadcn 0.0.52 → 0.0.54
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
|
@@ -57,12 +57,14 @@ export function useSidebar(): SidebarContextProps {
|
|
|
57
57
|
return context;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
export function SidebarProvider(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
60
|
+
export function SidebarProvider(
|
|
61
|
+
props: Props & {
|
|
62
|
+
defaultOpen?: boolean;
|
|
63
|
+
open?: boolean;
|
|
64
|
+
onOpenChange?: (open: boolean) => void;
|
|
65
|
+
style?: Record<string, string>;
|
|
66
|
+
},
|
|
67
|
+
) {
|
|
66
68
|
const {
|
|
67
69
|
defaultOpen = true,
|
|
68
70
|
open: openProp,
|
|
@@ -80,8 +82,7 @@ export function SidebarProvider(props: Props & {
|
|
|
80
82
|
const [_open, _setOpen] = useState(defaultOpen);
|
|
81
83
|
const open = openProp ?? _open;
|
|
82
84
|
const setOpen = useCallback((value: boolean | ((value: boolean) => boolean)) => {
|
|
83
|
-
const openState =
|
|
84
|
-
typeof value === 'function' ? value(open) : value;
|
|
85
|
+
const openState = typeof value === 'function' ? value(open) : value;
|
|
85
86
|
if (setOpenProp) {
|
|
86
87
|
setOpenProp(openState);
|
|
87
88
|
} else {
|
|
@@ -89,8 +90,7 @@ export function SidebarProvider(props: Props & {
|
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
// This sets the cookie to keep the sidebar state.
|
|
92
|
-
document.cookie =
|
|
93
|
-
`${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
93
|
+
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
94
94
|
});
|
|
95
95
|
|
|
96
96
|
// Helper to toggle the sidebar.
|
|
@@ -115,17 +115,15 @@ export function SidebarProvider(props: Props & {
|
|
|
115
115
|
// This makes it easier to style the sidebar with Tailwind classes.
|
|
116
116
|
const state = open ? 'expanded' : 'collapsed';
|
|
117
117
|
|
|
118
|
-
const contextValue = useMemo<SidebarContextProps>(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}),
|
|
128
|
-
);
|
|
118
|
+
const contextValue = useMemo<SidebarContextProps>(() => ({
|
|
119
|
+
state,
|
|
120
|
+
open,
|
|
121
|
+
setOpen,
|
|
122
|
+
isMobile,
|
|
123
|
+
openMobile,
|
|
124
|
+
setOpenMobile,
|
|
125
|
+
toggleSidebar,
|
|
126
|
+
}));
|
|
129
127
|
|
|
130
128
|
return createElement(
|
|
131
129
|
SidebarContext,
|
|
@@ -150,12 +148,14 @@ export function SidebarProvider(props: Props & {
|
|
|
150
148
|
);
|
|
151
149
|
}
|
|
152
150
|
|
|
153
|
-
export function Sidebar(
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
151
|
+
export function Sidebar(
|
|
152
|
+
props: Props & {
|
|
153
|
+
side?: 'left' | 'right';
|
|
154
|
+
variant?: 'sidebar' | 'floating' | 'inset';
|
|
155
|
+
collapsible?: 'offcanvas' | 'icon' | 'none';
|
|
156
|
+
dir?: string;
|
|
157
|
+
},
|
|
158
|
+
) {
|
|
159
159
|
const {
|
|
160
160
|
side = 'left',
|
|
161
161
|
variant = 'sidebar',
|
|
@@ -256,7 +256,8 @@ export function Sidebar(props: Props & {
|
|
|
256
256
|
{
|
|
257
257
|
'data-sidebar': 'sidebar',
|
|
258
258
|
'data-slot': 'sidebar-inner',
|
|
259
|
-
className:
|
|
259
|
+
className:
|
|
260
|
+
'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',
|
|
260
261
|
},
|
|
261
262
|
props.children,
|
|
262
263
|
),
|
|
@@ -264,7 +265,11 @@ export function Sidebar(props: Props & {
|
|
|
264
265
|
);
|
|
265
266
|
}
|
|
266
267
|
|
|
267
|
-
export function SidebarTrigger({
|
|
268
|
+
export function SidebarTrigger({
|
|
269
|
+
className,
|
|
270
|
+
onClick,
|
|
271
|
+
...props
|
|
272
|
+
}: Props & {
|
|
268
273
|
onClick?: (event: MouseEvent) => void;
|
|
269
274
|
}) @{
|
|
270
275
|
const { toggleSidebar } = useSidebar();
|
|
@@ -377,7 +382,11 @@ export function SidebarGroup({ className, ...props }: Props) @{
|
|
|
377
382
|
/>
|
|
378
383
|
}
|
|
379
384
|
|
|
380
|
-
export function SidebarGroupLabel({
|
|
385
|
+
export function SidebarGroupLabel({
|
|
386
|
+
className,
|
|
387
|
+
asChild = false,
|
|
388
|
+
...props
|
|
389
|
+
}: Props & {
|
|
381
390
|
asChild?: boolean;
|
|
382
391
|
}) @{
|
|
383
392
|
@if (asChild) {
|
|
@@ -403,7 +412,11 @@ export function SidebarGroupLabel({ className, asChild = false, ...props }: Prop
|
|
|
403
412
|
}
|
|
404
413
|
}
|
|
405
414
|
|
|
406
|
-
export function SidebarGroupAction({
|
|
415
|
+
export function SidebarGroupAction({
|
|
416
|
+
className,
|
|
417
|
+
asChild = false,
|
|
418
|
+
...props
|
|
419
|
+
}: Props & {
|
|
407
420
|
asChild?: boolean;
|
|
408
421
|
}) @{
|
|
409
422
|
@if (asChild) {
|
|
@@ -462,7 +475,8 @@ const sidebarMenuButtonVariants = cva(
|
|
|
462
475
|
variants: {
|
|
463
476
|
variant: {
|
|
464
477
|
default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
|
|
465
|
-
outline:
|
|
478
|
+
outline:
|
|
479
|
+
'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)]',
|
|
466
480
|
},
|
|
467
481
|
size: {
|
|
468
482
|
default: 'h-8 text-sm',
|
|
@@ -477,13 +491,15 @@ const sidebarMenuButtonVariants = cva(
|
|
|
477
491
|
},
|
|
478
492
|
);
|
|
479
493
|
|
|
480
|
-
export function SidebarMenuButton(
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
494
|
+
export function SidebarMenuButton(
|
|
495
|
+
props: Props & {
|
|
496
|
+
asChild?: boolean;
|
|
497
|
+
isActive?: boolean;
|
|
498
|
+
tooltip?: string | Record<string, unknown>;
|
|
499
|
+
variant?: VariantProps<typeof sidebarMenuButtonVariants>['variant'];
|
|
500
|
+
size?: VariantProps<typeof sidebarMenuButtonVariants>['size'];
|
|
501
|
+
},
|
|
502
|
+
) {
|
|
487
503
|
const {
|
|
488
504
|
asChild = false,
|
|
489
505
|
isActive = false,
|
|
@@ -513,8 +529,7 @@ export function SidebarMenuButton(props: Props & {
|
|
|
513
529
|
return button;
|
|
514
530
|
}
|
|
515
531
|
|
|
516
|
-
const tooltipProps =
|
|
517
|
-
typeof tooltip === 'string' ? { children: tooltip } : tooltip;
|
|
532
|
+
const tooltipProps = typeof tooltip === 'string' ? { children: tooltip } : tooltip;
|
|
518
533
|
|
|
519
534
|
return createElement(
|
|
520
535
|
Tooltip,
|
|
@@ -578,7 +593,11 @@ export function SidebarMenuBadge({ className, ...props }: Props) @{
|
|
|
578
593
|
/>
|
|
579
594
|
}
|
|
580
595
|
|
|
581
|
-
export function SidebarMenuSkeleton({
|
|
596
|
+
export function SidebarMenuSkeleton({
|
|
597
|
+
className,
|
|
598
|
+
showIcon = false,
|
|
599
|
+
...props
|
|
600
|
+
}: Props & {
|
|
582
601
|
showIcon?: boolean;
|
|
583
602
|
}) @{
|
|
584
603
|
// Random width between 50 to 90%.
|
|
@@ -28,7 +28,7 @@ export function Slider({
|
|
|
28
28
|
...props
|
|
29
29
|
}: SliderProps) {
|
|
30
30
|
const _values = useMemo(
|
|
31
|
-
() => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
|
|
31
|
+
() => (Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max]),
|
|
32
32
|
[value, defaultValue, min, max],
|
|
33
33
|
);
|
|
34
34
|
|
|
@@ -50,19 +50,21 @@ export function Slider({
|
|
|
50
50
|
SliderPrimitive.Track,
|
|
51
51
|
{
|
|
52
52
|
'data-slot': 'slider-track',
|
|
53
|
-
className:
|
|
53
|
+
className:
|
|
54
|
+
'relative grow overflow-hidden rounded-full bg-muted data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5',
|
|
54
55
|
},
|
|
55
56
|
createElement(SliderPrimitive.Range, {
|
|
56
57
|
'data-slot': 'slider-range',
|
|
57
|
-
className:
|
|
58
|
+
className:
|
|
59
|
+
'absolute bg-primary data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full',
|
|
58
60
|
}),
|
|
59
61
|
),
|
|
60
|
-
...Array.from(
|
|
61
|
-
|
|
62
|
-
(_, index) => createElement(SliderPrimitive.Thumb, {
|
|
62
|
+
...Array.from({ length: _values.length }, (_, index) =>
|
|
63
|
+
createElement(SliderPrimitive.Thumb, {
|
|
63
64
|
'data-slot': 'slider-thumb',
|
|
64
65
|
key: index,
|
|
65
|
-
className:
|
|
66
|
+
className:
|
|
67
|
+
'block size-4 shrink-0 rounded-full border border-primary bg-white shadow-sm ring-ring/50 transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50',
|
|
66
68
|
}),
|
|
67
69
|
),
|
|
68
70
|
);
|
|
@@ -8,7 +8,11 @@ import { cn } from 'cn';
|
|
|
8
8
|
|
|
9
9
|
type Props = { className?: string } & Record<string, unknown>;
|
|
10
10
|
|
|
11
|
-
export function Tabs({
|
|
11
|
+
export function Tabs({
|
|
12
|
+
className,
|
|
13
|
+
orientation = 'horizontal',
|
|
14
|
+
...props
|
|
15
|
+
}: Props & {
|
|
12
16
|
orientation?: 'horizontal' | 'vertical';
|
|
13
17
|
}) @{
|
|
14
18
|
<TabsPrimitive.Root
|
|
@@ -35,9 +39,11 @@ export const tabsListVariants = cva(
|
|
|
35
39
|
},
|
|
36
40
|
);
|
|
37
41
|
|
|
38
|
-
export function TabsList({
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
export function TabsList({
|
|
43
|
+
className,
|
|
44
|
+
variant = 'default',
|
|
45
|
+
...props
|
|
46
|
+
}: Props & VariantProps<typeof tabsListVariants>) @{
|
|
41
47
|
<TabsPrimitive.List
|
|
42
48
|
data-slot="tabs-list"
|
|
43
49
|
data-variant={variant}
|
|
@@ -50,7 +56,7 @@ export function TabsTrigger({ className, ...props }: Props) @{
|
|
|
50
56
|
<TabsPrimitive.Trigger
|
|
51
57
|
data-slot="tabs-trigger"
|
|
52
58
|
className={cn(
|
|
53
|
-
|
|
59
|
+
"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-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 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",
|
|
54
60
|
'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',
|
|
55
61
|
'data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground',
|
|
56
62
|
'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-active:after:opacity-100',
|
|
@@ -7,12 +7,13 @@ import { Toggle as TogglePrimitive } from '@octanejs/radix';
|
|
|
7
7
|
import { cn } from 'cn';
|
|
8
8
|
|
|
9
9
|
export const toggleVariants = cva(
|
|
10
|
-
|
|
10
|
+
"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-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
11
11
|
{
|
|
12
12
|
variants: {
|
|
13
13
|
variant: {
|
|
14
14
|
default: 'bg-transparent',
|
|
15
|
-
outline:
|
|
15
|
+
outline:
|
|
16
|
+
'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',
|
|
16
17
|
},
|
|
17
18
|
size: {
|
|
18
19
|
default: 'h-9 min-w-9 px-2',
|
|
@@ -57,7 +57,8 @@ export function TooltipContent({
|
|
|
57
57
|
children,
|
|
58
58
|
createElement(TooltipPrimitive.Arrow, {
|
|
59
59
|
key: 'arrow',
|
|
60
|
-
className:
|
|
60
|
+
className:
|
|
61
|
+
'z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground',
|
|
61
62
|
}),
|
|
62
63
|
],
|
|
63
64
|
}),
|
|
@@ -15,59 +15,70 @@ import { cn } from 'cn';
|
|
|
15
15
|
import { ChevronDownIcon, ChevronUpIcon } from '@octanejs/lucide';
|
|
16
16
|
|
|
17
17
|
export function Accordion({ className, ...props }: DisclosureGroupProps) {
|
|
18
|
-
return
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
return (
|
|
19
|
+
<AccordionPrimitive
|
|
20
|
+
data-slot="accordion"
|
|
21
|
+
className={cn('flex w-full flex-col', className)}
|
|
22
|
+
{...props}
|
|
23
|
+
/>
|
|
24
|
+
);
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
export function AccordionItem({ className, ...props }: DisclosureProps) {
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
return (
|
|
29
|
+
<AccordionItemPrimitive
|
|
30
|
+
data-slot="accordion-item"
|
|
31
|
+
className={cn('not-last:border-b', className)}
|
|
32
|
+
{...props}
|
|
33
|
+
/>
|
|
34
|
+
);
|
|
31
35
|
}
|
|
32
36
|
|
|
33
|
-
export function AccordionTrigger({
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
className
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
37
|
+
export function AccordionTrigger({
|
|
38
|
+
className,
|
|
39
|
+
children,
|
|
40
|
+
...props
|
|
41
|
+
}: Omit<ButtonProps, 'children'> & { children: OctaneNode }) {
|
|
42
|
+
return (
|
|
43
|
+
<AccordionHeaderPrimitive className="flex">
|
|
44
|
+
<AccordionTriggerPrimitive
|
|
45
|
+
slot="trigger"
|
|
46
|
+
data-slot="accordion-trigger"
|
|
47
|
+
className={cn(
|
|
48
|
+
'group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground',
|
|
49
|
+
className,
|
|
50
|
+
)}
|
|
51
|
+
{...props}
|
|
52
|
+
>
|
|
53
|
+
{children}
|
|
54
|
+
<ChevronDownIcon
|
|
55
|
+
data-slot="accordion-trigger-icon"
|
|
56
|
+
className="pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
|
|
57
|
+
/>
|
|
58
|
+
<ChevronUpIcon
|
|
59
|
+
data-slot="accordion-trigger-icon"
|
|
60
|
+
className="pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
|
|
61
|
+
/>
|
|
62
|
+
</AccordionTriggerPrimitive>
|
|
63
|
+
</AccordionHeaderPrimitive>
|
|
64
|
+
);
|
|
58
65
|
}
|
|
59
66
|
|
|
60
67
|
export function AccordionContent({ className, children, ...props }: DisclosurePanelProps) {
|
|
61
|
-
return
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
return (
|
|
69
|
+
<AccordionContentPrimitive
|
|
70
|
+
data-slot="accordion-content"
|
|
71
|
+
className="h-(--disclosure-panel-height) overflow-clip text-sm transition-[height] data-open:animate-accordion-down data-closed:animate-accordion-up"
|
|
72
|
+
{...props}
|
|
73
|
+
>
|
|
74
|
+
<div
|
|
75
|
+
className={cn(
|
|
76
|
+
'pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4',
|
|
77
|
+
className,
|
|
78
|
+
)}
|
|
79
|
+
>
|
|
80
|
+
{children}
|
|
81
|
+
</div>
|
|
82
|
+
</AccordionContentPrimitive>
|
|
83
|
+
);
|
|
73
84
|
}
|