@codefast/ui 0.3.16-canary.3 → 0.4.0-canary.5
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/CHANGELOG.md +112 -0
- package/README.md +27 -16
- package/dist/components/accordion.d.mts +7 -22
- package/dist/components/accordion.mjs +26 -29
- package/dist/components/alert-dialog.d.mts +27 -26
- package/dist/components/alert-dialog.mjs +53 -45
- package/dist/components/alert.d.mts +12 -2
- package/dist/components/alert.mjs +15 -6
- package/dist/components/aspect-ratio.d.mts +2 -2
- package/dist/components/aspect-ratio.mjs +2 -3
- package/dist/components/avatar.d.mts +41 -5
- package/dist/components/avatar.mjs +40 -10
- package/dist/components/badge.mjs +4 -4
- package/dist/components/breadcrumb.d.mts +1 -0
- package/dist/components/breadcrumb.mjs +11 -10
- package/dist/components/button-group.d.mts +1 -1
- package/dist/components/button-group.mjs +6 -7
- package/dist/components/button.d.mts +0 -1
- package/dist/components/button.mjs +7 -7
- package/dist/components/calendar.d.mts +6 -2
- package/dist/components/calendar.mjs +39 -43
- package/dist/components/card.d.mts +4 -2
- package/dist/components/card.mjs +9 -9
- package/dist/components/carousel.d.mts +16 -4
- package/dist/components/carousel.mjs +25 -12
- package/dist/components/chart.d.mts +8 -3
- package/dist/components/chart.mjs +21 -15
- package/dist/components/checkbox-cards.mjs +6 -6
- package/dist/components/checkbox-group.mjs +6 -7
- package/dist/components/checkbox.d.mts +2 -2
- package/dist/components/checkbox.mjs +8 -9
- package/dist/components/collapsible.d.mts +4 -4
- package/dist/components/collapsible.mjs +4 -5
- package/dist/components/command.d.mts +11 -1
- package/dist/components/command.mjs +35 -32
- package/dist/components/context-menu.d.mts +22 -15
- package/dist/components/context-menu.mjs +44 -39
- package/dist/components/dialog.d.mts +19 -23
- package/dist/components/dialog.mjs +48 -47
- package/dist/components/direction.d.mts +24 -0
- package/dist/components/direction.mjs +18 -0
- package/dist/components/drawer.d.mts +2 -20
- package/dist/components/drawer.mjs +17 -25
- package/dist/components/dropdown-menu.d.mts +22 -15
- package/dist/components/dropdown-menu.mjs +41 -37
- package/dist/components/empty.mjs +5 -5
- package/dist/components/field.d.mts +1 -1
- package/dist/components/field.mjs +11 -12
- package/dist/components/form.d.mts +6 -7
- package/dist/components/form.mjs +6 -7
- package/dist/components/hover-card.d.mts +5 -5
- package/dist/components/hover-card.mjs +14 -12
- package/dist/components/input-group.d.mts +1 -1
- package/dist/components/input-group.mjs +12 -7
- package/dist/components/input-number.d.mts +3 -1
- package/dist/components/input-number.mjs +49 -27
- package/dist/components/input-otp.mjs +9 -7
- package/dist/components/input-password.mjs +1 -4
- package/dist/components/input-search.mjs +3 -5
- package/dist/components/input.mjs +1 -2
- package/dist/components/item.mjs +9 -9
- package/dist/components/kbd.mjs +1 -1
- package/dist/components/label.d.mts +2 -2
- package/dist/components/label.mjs +3 -4
- package/dist/components/menubar.d.mts +22 -16
- package/dist/components/menubar.mjs +54 -47
- package/dist/components/native-select.d.mts +5 -1
- package/dist/components/native-select.mjs +9 -6
- package/dist/components/navigation-menu.d.mts +30 -8
- package/dist/components/navigation-menu.mjs +33 -23
- package/dist/components/pagination.d.mts +6 -0
- package/dist/components/pagination.mjs +26 -11
- package/dist/components/popover.d.mts +40 -7
- package/dist/components/popover.mjs +46 -14
- package/dist/components/progress-circle.d.mts +1 -1
- package/dist/components/progress-circle.mjs +1 -2
- package/dist/components/progress.d.mts +2 -2
- package/dist/components/progress.mjs +5 -6
- package/dist/components/radio-cards.d.mts +3 -3
- package/dist/components/radio-cards.mjs +11 -11
- package/dist/components/radio-group.d.mts +3 -3
- package/dist/components/radio-group.mjs +9 -9
- package/dist/components/radio.mjs +2 -3
- package/dist/components/resizable.mjs +3 -8
- package/dist/components/scroll-area.d.mts +5 -5
- package/dist/components/scroll-area.mjs +13 -10
- package/dist/components/select.d.mts +14 -14
- package/dist/components/select.mjs +47 -47
- package/dist/components/separator.d.mts +2 -2
- package/dist/components/separator.mjs +3 -4
- package/dist/components/sheet.d.mts +13 -14
- package/dist/components/sheet.mjs +41 -39
- package/dist/components/sidebar.d.mts +2 -3
- package/dist/components/sidebar.mjs +46 -46
- package/dist/components/skeleton.mjs +1 -1
- package/dist/components/slider.d.mts +2 -2
- package/dist/components/slider.mjs +9 -11
- package/dist/components/sonner.mjs +11 -3
- package/dist/components/spinner.mjs +6 -7
- package/dist/components/switch.d.mts +5 -2
- package/dist/components/switch.mjs +7 -7
- package/dist/components/table.mjs +10 -10
- package/dist/components/tabs.d.mts +8 -5
- package/dist/components/tabs.mjs +18 -12
- package/dist/components/textarea.mjs +1 -1
- package/dist/components/toggle-group.d.mts +9 -6
- package/dist/components/toggle-group.mjs +19 -20
- package/dist/components/toggle.d.mts +2 -3
- package/dist/components/toggle.mjs +4 -6
- package/dist/components/tooltip.d.mts +7 -6
- package/dist/components/tooltip.mjs +19 -17
- package/dist/hooks/use-animated-value.mjs +0 -1
- package/dist/hooks/use-copy-to-clipboard.mjs +0 -1
- package/dist/hooks/use-is-mobile.mjs +0 -1
- package/dist/hooks/use-media-query.mjs +0 -1
- package/dist/hooks/use-mutation-observer.mjs +0 -1
- package/dist/hooks/use-pagination.mjs +0 -1
- package/dist/index.d.mts +15 -13
- package/dist/index.mjs +18 -16
- package/dist/primitives/checkbox-group.d.mts +9 -10
- package/dist/primitives/checkbox-group.mjs +14 -19
- package/dist/primitives/input-number.d.mts +3 -3
- package/dist/primitives/input-number.mjs +3 -5
- package/dist/primitives/input.d.mts +4 -4
- package/dist/primitives/input.mjs +2 -3
- package/dist/primitives/progress-circle.d.mts +3 -3
- package/dist/primitives/progress-circle.mjs +2 -3
- package/dist/variants/alert.d.mts +1 -1
- package/dist/variants/alert.mjs +3 -13
- package/dist/variants/badge.d.mts +6 -4
- package/dist/variants/badge.mjs +7 -34
- package/dist/variants/button-group.d.mts +2 -2
- package/dist/variants/button-group.mjs +3 -14
- package/dist/variants/button.d.mts +12 -10
- package/dist/variants/button.mjs +15 -57
- package/dist/variants/empty.d.mts +1 -1
- package/dist/variants/empty.mjs +2 -7
- package/dist/variants/field.d.mts +3 -3
- package/dist/variants/field.mjs +4 -22
- package/dist/variants/input-group.d.mts +9 -9
- package/dist/variants/input-group.mjs +11 -70
- package/dist/variants/input-number.d.mts +45 -0
- package/dist/variants/input-number.mjs +40 -0
- package/dist/variants/item.d.mts +5 -4
- package/dist/variants/item.mjs +9 -31
- package/dist/variants/navigation-menu.d.mts +1 -1
- package/dist/variants/navigation-menu.mjs +1 -5
- package/dist/variants/progress-circle.d.mts +1 -1
- package/dist/variants/progress-circle.mjs +1 -5
- package/dist/variants/scroll-area.d.mts +2 -2
- package/dist/variants/scroll-area.mjs +3 -8
- package/dist/variants/separator.mjs +6 -6
- package/dist/variants/sheet.d.mts +4 -4
- package/dist/variants/sheet.mjs +5 -38
- package/dist/variants/sidebar.d.mts +4 -4
- package/dist/variants/sidebar.mjs +6 -23
- package/dist/variants/tabs.d.mts +18 -0
- package/dist/variants/tabs.mjs +15 -0
- package/dist/variants/toggle.d.mts +4 -4
- package/dist/variants/toggle.mjs +9 -27
- package/package.json +27 -44
- package/src/components/accordion.tsx +26 -68
- package/src/components/alert-dialog.tsx +70 -86
- package/src/components/alert.tsx +27 -19
- package/src/components/aspect-ratio.tsx +1 -4
- package/src/components/avatar.tsx +99 -12
- package/src/components/badge.tsx +5 -8
- package/src/components/breadcrumb.tsx +18 -24
- package/src/components/button-group.tsx +10 -20
- package/src/components/button.tsx +8 -19
- package/src/components/calendar.tsx +77 -132
- package/src/components/card.tsx +16 -22
- package/src/components/carousel.tsx +40 -58
- package/src/components/chart.tsx +41 -92
- package/src/components/checkbox-cards.tsx +11 -30
- package/src/components/checkbox-group.tsx +6 -28
- package/src/components/checkbox.tsx +6 -26
- package/src/components/collapsible.tsx +1 -4
- package/src/components/command.tsx +52 -65
- package/src/components/context-menu.tsx +46 -125
- package/src/components/dialog.tsx +49 -101
- package/src/components/direction.tsx +32 -0
- package/src/components/drawer.tsx +17 -79
- package/src/components/dropdown-menu.tsx +39 -118
- package/src/components/empty.tsx +6 -20
- package/src/components/field.tsx +19 -52
- package/src/components/form.tsx +19 -61
- package/src/components/hover-card.tsx +4 -27
- package/src/components/input-group.tsx +13 -52
- package/src/components/input-number.tsx +55 -75
- package/src/components/input-otp.tsx +19 -38
- package/src/components/input-password.tsx +5 -29
- package/src/components/input-search.tsx +6 -23
- package/src/components/input.tsx +1 -17
- package/src/components/item.tsx +17 -31
- package/src/components/kbd.tsx +2 -14
- package/src/components/label.tsx +2 -10
- package/src/components/menubar.tsx +34 -125
- package/src/components/native-select.tsx +21 -30
- package/src/components/navigation-menu.tsx +34 -94
- package/src/components/pagination.tsx +28 -34
- package/src/components/popover.tsx +66 -35
- package/src/components/progress-circle.tsx +7 -25
- package/src/components/progress.tsx +3 -16
- package/src/components/radio-cards.tsx +8 -27
- package/src/components/radio-group.tsx +7 -27
- package/src/components/radio.tsx +3 -24
- package/src/components/resizable.tsx +5 -26
- package/src/components/scroll-area.tsx +12 -32
- package/src/components/select.tsx +37 -60
- package/src/components/separator.tsx +4 -18
- package/src/components/sheet.tsx +37 -74
- package/src/components/sidebar.tsx +47 -177
- package/src/components/skeleton.tsx +1 -3
- package/src/components/slider.tsx +7 -36
- package/src/components/sonner.tsx +16 -6
- package/src/components/spinner.tsx +6 -15
- package/src/components/switch.tsx +8 -30
- package/src/components/table.tsx +18 -35
- package/src/components/tabs.tsx +16 -34
- package/src/components/textarea.tsx +1 -15
- package/src/components/toggle-group.tsx +34 -38
- package/src/components/toggle.tsx +4 -13
- package/src/components/tooltip.tsx +11 -37
- package/src/css/foundation/base.css +74 -0
- package/src/css/foundation/motion.css +69 -0
- package/src/css/foundation/source.css +10 -0
- package/src/css/foundation/tokens.css +107 -0
- package/src/css/foundation/variants.css +121 -0
- package/src/css/preset.css +13 -214
- package/src/css/style.css +9 -1
- package/src/css/{amber.css → themes/amber.css} +29 -0
- package/src/css/{blue.css → themes/blue.css} +29 -0
- package/src/css/{cyan.css → themes/cyan.css} +29 -0
- package/src/css/{emerald.css → themes/emerald.css} +29 -0
- package/src/css/{fuchsia.css → themes/fuchsia.css} +29 -0
- package/src/css/{gray.css → themes/gray.css} +29 -0
- package/src/css/{green.css → themes/green.css} +29 -0
- package/src/css/{indigo.css → themes/indigo.css} +29 -0
- package/src/css/{lime.css → themes/lime.css} +29 -0
- package/src/css/{neutral.css → themes/neutral.css} +29 -0
- package/src/css/{orange.css → themes/orange.css} +29 -0
- package/src/css/{pink.css → themes/pink.css} +29 -0
- package/src/css/{purple.css → themes/purple.css} +29 -0
- package/src/css/{red.css → themes/red.css} +29 -0
- package/src/css/{rose.css → themes/rose.css} +29 -0
- package/src/css/{sky.css → themes/sky.css} +29 -0
- package/src/css/{slate.css → themes/slate.css} +29 -0
- package/src/css/{stone.css → themes/stone.css} +29 -0
- package/src/css/{teal.css → themes/teal.css} +29 -0
- package/src/css/{violet.css → themes/violet.css} +29 -0
- package/src/css/{yellow.css → themes/yellow.css} +29 -0
- package/src/css/{zinc.css → themes/zinc.css} +29 -0
- package/src/hooks/use-animated-value.ts +1 -7
- package/src/hooks/use-copy-to-clipboard.ts +1 -6
- package/src/hooks/use-is-mobile.ts +0 -2
- package/src/hooks/use-media-query.ts +0 -2
- package/src/hooks/use-mutation-observer.ts +0 -3
- package/src/hooks/use-pagination.ts +0 -2
- package/src/index.ts +39 -80
- package/src/primitives/checkbox-group.tsx +25 -39
- package/src/primitives/input-number.tsx +17 -63
- package/src/primitives/input.tsx +8 -24
- package/src/primitives/progress-circle.tsx +13 -43
- package/src/variants/alert.ts +3 -14
- package/src/variants/badge.ts +8 -35
- package/src/variants/button-group.ts +5 -18
- package/src/variants/button.ts +21 -58
- package/src/variants/empty.ts +2 -11
- package/src/variants/field.ts +6 -19
- package/src/variants/input-group.ts +12 -64
- package/src/variants/input-number.ts +65 -0
- package/src/variants/item.ts +10 -32
- package/src/variants/navigation-menu.ts +1 -8
- package/src/variants/progress-circle.ts +1 -2
- package/src/variants/scroll-area.ts +3 -9
- package/src/variants/separator.ts +6 -7
- package/src/variants/sheet.ts +6 -39
- package/src/variants/sidebar.ts +7 -27
- package/src/variants/tabs.ts +34 -0
- package/src/variants/toggle.ts +9 -28
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import type { VariantProps } from "#/lib/utils";
|
|
1
|
+
import { XIcon } from "lucide-react";
|
|
2
|
+
import { Dialog as DialogPrimitive } from "radix-ui";
|
|
4
3
|
import type { ComponentProps, JSX } from "react";
|
|
5
4
|
|
|
5
|
+
import { Button } from "#/components/button";
|
|
6
6
|
import { cn } from "#/lib/utils";
|
|
7
|
-
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
8
|
-
import { XIcon } from "lucide-react";
|
|
9
|
-
|
|
10
|
-
import { buttonVariants } from "#/variants/button";
|
|
11
7
|
|
|
12
8
|
/* -----------------------------------------------------------------------------
|
|
13
9
|
* Component: Dialog
|
|
@@ -49,76 +45,38 @@ function DialogTrigger({ ...props }: DialogTriggerProps): JSX.Element {
|
|
|
49
45
|
* @since 0.3.16-canary.0
|
|
50
46
|
*/
|
|
51
47
|
interface DialogContentProps extends ComponentProps<typeof DialogPrimitive.Content> {
|
|
52
|
-
|
|
53
|
-
close?: string;
|
|
54
|
-
content?: string;
|
|
55
|
-
overlay?: string;
|
|
56
|
-
wrapper?: string;
|
|
57
|
-
};
|
|
48
|
+
showCloseButton?: boolean;
|
|
58
49
|
}
|
|
59
50
|
|
|
60
51
|
/**
|
|
61
52
|
* @since 0.3.16-canary.0
|
|
62
53
|
*/
|
|
63
|
-
function DialogContent({
|
|
64
|
-
children,
|
|
65
|
-
className,
|
|
66
|
-
classNames,
|
|
67
|
-
...props
|
|
68
|
-
}: DialogContentProps): JSX.Element {
|
|
54
|
+
function DialogContent({ children, className, showCloseButton = true, ...props }: DialogContentProps): JSX.Element {
|
|
69
55
|
return (
|
|
70
|
-
<DialogPrimitive.Portal>
|
|
56
|
+
<DialogPrimitive.Portal data-slot="dialog-portal">
|
|
71
57
|
<DialogPrimitive.Overlay
|
|
72
|
-
className={
|
|
73
|
-
"fixed inset-0 z-50"
|
|
74
|
-
|
|
75
|
-
"ease-gentle data-open:animate-in data-open:duration-300 data-open:fade-in-0",
|
|
76
|
-
"data-closed:animate-out data-closed:duration-200 data-closed:fade-out-0",
|
|
77
|
-
"motion-reduce:animate-none motion-reduce:transition-none motion-reduce:duration-0",
|
|
78
|
-
classNames?.overlay,
|
|
79
|
-
)}
|
|
58
|
+
className={
|
|
59
|
+
"fixed inset-0 isolate z-50 bg-black/10 ease-gentle supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:animation-duration-overlay-in data-open:fade-in-0 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-overlay-out data-closed:fade-out-0"
|
|
60
|
+
}
|
|
80
61
|
data-slot="dialog-overlay"
|
|
81
62
|
/>
|
|
82
63
|
<DialogPrimitive.Content
|
|
83
64
|
className={cn(
|
|
84
|
-
"fixed
|
|
85
|
-
|
|
86
|
-
"ease-gentle data-open:animate-in data-open:duration-300",
|
|
87
|
-
"max-sm:data-open:animation-duration-380 max-sm:data-open:slide-in-from-bottom",
|
|
88
|
-
"sm:data-open:fade-in-0 sm:data-open:zoom-in-95",
|
|
89
|
-
"data-closed:animate-out data-closed:duration-200",
|
|
90
|
-
"max-sm:data-closed:animation-duration-280 max-sm:data-closed:slide-out-to-bottom",
|
|
91
|
-
"sm:data-closed:fade-out-0 sm:data-closed:zoom-out-95",
|
|
92
|
-
"motion-reduce:animate-none motion-reduce:transition-none motion-reduce:duration-0",
|
|
93
|
-
classNames?.wrapper,
|
|
65
|
+
"fixed start-1/2 top-1/2 z-50 flex max-h-[calc(100dvh-2rem)] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col gap-6 overflow-y-auto rounded-xl bg-popover p-6 text-sm text-popover-foreground ring-1 ring-foreground/10 ease-ui outline-none sm:max-w-md rtl:translate-x-1/2 data-open:animate-in data-open:animation-duration-overlay-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-overlay-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
66
|
+
className,
|
|
94
67
|
)}
|
|
95
|
-
data-slot="dialog-content
|
|
68
|
+
data-slot="dialog-content"
|
|
96
69
|
{...props}
|
|
97
70
|
>
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
"
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
className,
|
|
106
|
-
)}
|
|
107
|
-
data-slot="dialog-content"
|
|
108
|
-
>
|
|
109
|
-
{children}
|
|
110
|
-
<DialogPrimitive.Close
|
|
111
|
-
className={buttonVariants({
|
|
112
|
-
className: ["absolute top-2.5 right-2.5 size-7", classNames?.close],
|
|
113
|
-
size: "icon",
|
|
114
|
-
variant: "ghost",
|
|
115
|
-
})}
|
|
116
|
-
data-slot="dialog-close"
|
|
117
|
-
>
|
|
118
|
-
<XIcon className="size-4" />
|
|
119
|
-
<span className="sr-only">Close</span>
|
|
71
|
+
{children}
|
|
72
|
+
{showCloseButton ? (
|
|
73
|
+
<DialogPrimitive.Close asChild data-slot="dialog-close">
|
|
74
|
+
<Button className="absolute end-4 top-4" size="icon-sm" variant="ghost">
|
|
75
|
+
<XIcon />
|
|
76
|
+
<span className="sr-only">Close</span>
|
|
77
|
+
</Button>
|
|
120
78
|
</DialogPrimitive.Close>
|
|
121
|
-
|
|
79
|
+
) : null}
|
|
122
80
|
</DialogPrimitive.Content>
|
|
123
81
|
</DialogPrimitive.Portal>
|
|
124
82
|
);
|
|
@@ -137,17 +95,7 @@ type DialogHeaderProps = ComponentProps<"div">;
|
|
|
137
95
|
* @since 0.3.16-canary.0
|
|
138
96
|
*/
|
|
139
97
|
function DialogHeader({ className, ...props }: DialogHeaderProps): JSX.Element {
|
|
140
|
-
return (
|
|
141
|
-
<header
|
|
142
|
-
className={cn(
|
|
143
|
-
"flex shrink-0 flex-col gap-1.5 px-6 pt-6 pb-2 text-center",
|
|
144
|
-
"sm:text-left",
|
|
145
|
-
className,
|
|
146
|
-
)}
|
|
147
|
-
data-slot="dialog-header"
|
|
148
|
-
{...props}
|
|
149
|
-
/>
|
|
150
|
-
);
|
|
98
|
+
return <div className={cn("flex shrink-0 flex-col gap-2", className)} data-slot="dialog-header" {...props} />;
|
|
151
99
|
}
|
|
152
100
|
|
|
153
101
|
/* -----------------------------------------------------------------------------
|
|
@@ -155,6 +103,11 @@ function DialogHeader({ className, ...props }: DialogHeaderProps): JSX.Element {
|
|
|
155
103
|
* -------------------------------------------------------------------------- */
|
|
156
104
|
|
|
157
105
|
/**
|
|
106
|
+
* Optional scrollable region for long content. When used, the Header and Footer
|
|
107
|
+
* stay pinned (shrink-0) and only this body scrolls; without it, the whole
|
|
108
|
+
* Content scrolls via its own max-height. This is a codefast enhancement over
|
|
109
|
+
* radix-vega, which has no scroll handling for tall dialogs.
|
|
110
|
+
*
|
|
158
111
|
* @since 0.3.16-canary.0
|
|
159
112
|
*/
|
|
160
113
|
type DialogBodyProps = ComponentProps<"div">;
|
|
@@ -164,11 +117,7 @@ type DialogBodyProps = ComponentProps<"div">;
|
|
|
164
117
|
*/
|
|
165
118
|
function DialogBody({ className, ...props }: DialogBodyProps): JSX.Element {
|
|
166
119
|
return (
|
|
167
|
-
<
|
|
168
|
-
className={cn("overflow-auto", "px-6 py-2", className)}
|
|
169
|
-
data-slot="dialog-body"
|
|
170
|
-
{...props}
|
|
171
|
-
/>
|
|
120
|
+
<div className={cn("-mx-6 min-h-0 flex-1 overflow-y-auto px-6", className)} data-slot="dialog-body" {...props} />
|
|
172
121
|
);
|
|
173
122
|
}
|
|
174
123
|
|
|
@@ -179,22 +128,27 @@ function DialogBody({ className, ...props }: DialogBodyProps): JSX.Element {
|
|
|
179
128
|
/**
|
|
180
129
|
* @since 0.3.16-canary.0
|
|
181
130
|
*/
|
|
182
|
-
|
|
131
|
+
interface DialogFooterProps extends ComponentProps<"div"> {
|
|
132
|
+
showCloseButton?: boolean;
|
|
133
|
+
}
|
|
183
134
|
|
|
184
135
|
/**
|
|
185
136
|
* @since 0.3.16-canary.0
|
|
186
137
|
*/
|
|
187
|
-
function DialogFooter({ className, ...props }: DialogFooterProps): JSX.Element {
|
|
138
|
+
function DialogFooter({ children, className, showCloseButton = false, ...props }: DialogFooterProps): JSX.Element {
|
|
188
139
|
return (
|
|
189
|
-
<
|
|
190
|
-
className={cn(
|
|
191
|
-
"flex shrink-0 flex-col-reverse gap-2 px-6 pt-2 pb-6",
|
|
192
|
-
"sm:flex-row sm:justify-end",
|
|
193
|
-
className,
|
|
194
|
-
)}
|
|
140
|
+
<div
|
|
141
|
+
className={cn("flex shrink-0 flex-col-reverse gap-2 sm:flex-row sm:justify-end", className)}
|
|
195
142
|
data-slot="dialog-footer"
|
|
196
143
|
{...props}
|
|
197
|
-
|
|
144
|
+
>
|
|
145
|
+
{children}
|
|
146
|
+
{showCloseButton ? (
|
|
147
|
+
<DialogPrimitive.Close asChild>
|
|
148
|
+
<Button variant="outline">Close</Button>
|
|
149
|
+
</DialogPrimitive.Close>
|
|
150
|
+
) : null}
|
|
151
|
+
</div>
|
|
198
152
|
);
|
|
199
153
|
}
|
|
200
154
|
|
|
@@ -213,7 +167,7 @@ type DialogTitleProps = ComponentProps<typeof DialogPrimitive.Title>;
|
|
|
213
167
|
function DialogTitle({ className, ...props }: DialogTitleProps): JSX.Element {
|
|
214
168
|
return (
|
|
215
169
|
<DialogPrimitive.Title
|
|
216
|
-
className={cn("
|
|
170
|
+
className={cn("font-heading leading-none font-medium", className)}
|
|
217
171
|
data-slot="dialog-title"
|
|
218
172
|
{...props}
|
|
219
173
|
/>
|
|
@@ -235,7 +189,10 @@ type DialogDescriptionProps = ComponentProps<typeof DialogPrimitive.Description>
|
|
|
235
189
|
function DialogDescription({ className, ...props }: DialogDescriptionProps): JSX.Element {
|
|
236
190
|
return (
|
|
237
191
|
<DialogPrimitive.Description
|
|
238
|
-
className={cn(
|
|
192
|
+
className={cn(
|
|
193
|
+
"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
|
|
194
|
+
className,
|
|
195
|
+
)}
|
|
239
196
|
data-slot="dialog-description"
|
|
240
197
|
{...props}
|
|
241
198
|
/>
|
|
@@ -249,22 +206,13 @@ function DialogDescription({ className, ...props }: DialogDescriptionProps): JSX
|
|
|
249
206
|
/**
|
|
250
207
|
* @since 0.3.16-canary.0
|
|
251
208
|
*/
|
|
252
|
-
|
|
253
|
-
size?: VariantProps<typeof buttonVariants>["size"];
|
|
254
|
-
variant?: VariantProps<typeof buttonVariants>["variant"];
|
|
255
|
-
}
|
|
209
|
+
type DialogCloseProps = ComponentProps<typeof DialogPrimitive.Close>;
|
|
256
210
|
|
|
257
211
|
/**
|
|
258
212
|
* @since 0.3.16-canary.0
|
|
259
213
|
*/
|
|
260
|
-
function DialogClose({
|
|
261
|
-
return
|
|
262
|
-
<DialogPrimitive.Close
|
|
263
|
-
className={buttonVariants({ className, size, variant })}
|
|
264
|
-
data-slot="dialog-close"
|
|
265
|
-
{...props}
|
|
266
|
-
/>
|
|
267
|
-
);
|
|
214
|
+
function DialogClose({ ...props }: DialogCloseProps): JSX.Element {
|
|
215
|
+
return <DialogPrimitive.Close data-slot="dialog-close" {...props} />;
|
|
268
216
|
}
|
|
269
217
|
|
|
270
218
|
/* -----------------------------------------------------------------------------
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Direction } from "radix-ui";
|
|
2
|
+
import type { ComponentProps } from "react";
|
|
3
|
+
|
|
4
|
+
/* -----------------------------------------------------------------------------
|
|
5
|
+
* Component: DirectionProvider
|
|
6
|
+
* -------------------------------------------------------------------------- */
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @since 0.4.0-canary.4
|
|
10
|
+
*/
|
|
11
|
+
type DirectionProviderProps = ComponentProps<typeof Direction.DirectionProvider> & {
|
|
12
|
+
direction?: ComponentProps<typeof Direction.DirectionProvider>["dir"];
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @since 0.4.0-canary.4
|
|
17
|
+
*/
|
|
18
|
+
function DirectionProvider({ dir, direction, children }: DirectionProviderProps) {
|
|
19
|
+
return <Direction.DirectionProvider dir={direction ?? dir}>{children}</Direction.DirectionProvider>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @since 0.4.0-canary.4
|
|
24
|
+
*/
|
|
25
|
+
const useDirection = Direction.useDirection;
|
|
26
|
+
|
|
27
|
+
/* -----------------------------------------------------------------------------
|
|
28
|
+
* Exports
|
|
29
|
+
* -------------------------------------------------------------------------- */
|
|
30
|
+
|
|
31
|
+
export { DirectionProvider, useDirection };
|
|
32
|
+
export type { DirectionProviderProps };
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import type { VariantProps } from "#/lib/utils";
|
|
4
1
|
import type { ComponentProps, JSX } from "react";
|
|
5
|
-
|
|
6
|
-
import { cn } from "#/lib/utils";
|
|
7
2
|
import { Drawer as DrawerPrimitive } from "vaul";
|
|
8
3
|
|
|
4
|
+
import type { VariantProps } from "#/lib/utils";
|
|
5
|
+
import { cn } from "#/lib/utils";
|
|
9
6
|
import { buttonVariants } from "#/variants/button";
|
|
10
7
|
|
|
11
8
|
/* -----------------------------------------------------------------------------
|
|
@@ -21,13 +18,7 @@ type DrawerProps = ComponentProps<typeof DrawerPrimitive.Root>;
|
|
|
21
18
|
* @since 0.3.16-canary.0
|
|
22
19
|
*/
|
|
23
20
|
function Drawer({ shouldScaleBackground = true, ...props }: DrawerProps): JSX.Element {
|
|
24
|
-
return
|
|
25
|
-
<DrawerPrimitive.Root
|
|
26
|
-
data-slot="drawer"
|
|
27
|
-
shouldScaleBackground={shouldScaleBackground}
|
|
28
|
-
{...props}
|
|
29
|
-
/>
|
|
30
|
-
);
|
|
21
|
+
return <DrawerPrimitive.Root data-slot="drawer" shouldScaleBackground={shouldScaleBackground} {...props} />;
|
|
31
22
|
}
|
|
32
23
|
|
|
33
24
|
/* -----------------------------------------------------------------------------
|
|
@@ -53,55 +44,29 @@ function DrawerTrigger({ ...props }: DrawerTriggerProps): JSX.Element {
|
|
|
53
44
|
/**
|
|
54
45
|
* @since 0.3.16-canary.0
|
|
55
46
|
*/
|
|
56
|
-
|
|
57
|
-
classNames?: {
|
|
58
|
-
content?: string;
|
|
59
|
-
handle?: string;
|
|
60
|
-
overlay?: string;
|
|
61
|
-
};
|
|
62
|
-
}
|
|
47
|
+
type DrawerContentProps = ComponentProps<typeof DrawerPrimitive.Content>;
|
|
63
48
|
|
|
64
49
|
/**
|
|
65
50
|
* @since 0.3.16-canary.0
|
|
66
51
|
*/
|
|
67
|
-
function DrawerContent({
|
|
68
|
-
children,
|
|
69
|
-
className,
|
|
70
|
-
classNames,
|
|
71
|
-
...props
|
|
72
|
-
}: DrawerContentProps): JSX.Element {
|
|
52
|
+
function DrawerContent({ children, className, ...props }: DrawerContentProps): JSX.Element {
|
|
73
53
|
return (
|
|
74
|
-
<DrawerPrimitive.Portal>
|
|
54
|
+
<DrawerPrimitive.Portal data-slot="drawer-portal">
|
|
75
55
|
<DrawerPrimitive.Overlay
|
|
76
|
-
className={
|
|
56
|
+
className={
|
|
57
|
+
"fixed inset-0 z-50 bg-black/10 ease-gentle supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:animation-duration-panel-in data-open:fade-in-0 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-panel-out data-closed:fade-out-0"
|
|
58
|
+
}
|
|
77
59
|
data-slot="drawer-overlay"
|
|
78
60
|
/>
|
|
79
61
|
<DrawerPrimitive.Content
|
|
80
62
|
className={cn(
|
|
81
|
-
"group/drawer-content fixed z-50 flex h-auto flex-col",
|
|
82
|
-
"bg-background",
|
|
83
|
-
"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-2xl",
|
|
84
|
-
"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4",
|
|
85
|
-
"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4",
|
|
86
|
-
"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-2xl",
|
|
87
|
-
"data-[vaul-drawer-direction=left]:sm:max-w-sm",
|
|
88
|
-
"data-[vaul-drawer-direction=right]:sm:max-w-sm",
|
|
89
|
-
classNames?.content,
|
|
63
|
+
"group/drawer-content fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:start-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-e-xl data-[vaul-drawer-direction=left]:border-e data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:end-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-s-xl data-[vaul-drawer-direction=right]:border-s data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm",
|
|
90
64
|
className,
|
|
91
65
|
)}
|
|
92
66
|
data-slot="drawer-content"
|
|
93
67
|
{...props}
|
|
94
68
|
>
|
|
95
|
-
<div
|
|
96
|
-
className={cn(
|
|
97
|
-
"hidden",
|
|
98
|
-
"mx-auto mt-4 h-1.5 w-12 shrink-0",
|
|
99
|
-
"rounded-full",
|
|
100
|
-
"bg-muted",
|
|
101
|
-
"group-data-[vaul-drawer-direction=bottom]/drawer-content:block",
|
|
102
|
-
classNames?.handle,
|
|
103
|
-
)}
|
|
104
|
-
/>
|
|
69
|
+
<div className="mx-auto mt-4 hidden h-1.5 w-25 shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block" />
|
|
105
70
|
{children}
|
|
106
71
|
</DrawerPrimitive.Content>
|
|
107
72
|
</DrawerPrimitive.Portal>
|
|
@@ -123,35 +88,16 @@ type DrawerHeaderProps = ComponentProps<"div">;
|
|
|
123
88
|
function DrawerHeader({ className, ...props }: DrawerHeaderProps): JSX.Element {
|
|
124
89
|
return (
|
|
125
90
|
<div
|
|
126
|
-
className={cn(
|
|
91
|
+
className={cn(
|
|
92
|
+
"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-start",
|
|
93
|
+
className,
|
|
94
|
+
)}
|
|
127
95
|
data-slot="drawer-header"
|
|
128
96
|
{...props}
|
|
129
97
|
/>
|
|
130
98
|
);
|
|
131
99
|
}
|
|
132
100
|
|
|
133
|
-
/* -----------------------------------------------------------------------------
|
|
134
|
-
* Component: DrawerBody
|
|
135
|
-
* -------------------------------------------------------------------------- */
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* @since 0.3.16-canary.0
|
|
139
|
-
*/
|
|
140
|
-
type DrawerBodyProps = ComponentProps<"div">;
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* @since 0.3.16-canary.0
|
|
144
|
-
*/
|
|
145
|
-
function DrawerBody({ className, ...props }: DrawerBodyProps): JSX.Element {
|
|
146
|
-
return (
|
|
147
|
-
<main
|
|
148
|
-
className={cn("overflow-auto", "px-6 py-2", className)}
|
|
149
|
-
data-slot="drawer-body"
|
|
150
|
-
{...props}
|
|
151
|
-
/>
|
|
152
|
-
);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
101
|
/* -----------------------------------------------------------------------------
|
|
156
102
|
* Component: DrawerFooter
|
|
157
103
|
* -------------------------------------------------------------------------- */
|
|
@@ -165,13 +111,7 @@ type DrawerFooterProps = ComponentProps<"div">;
|
|
|
165
111
|
* @since 0.3.16-canary.0
|
|
166
112
|
*/
|
|
167
113
|
function DrawerFooter({ className, ...props }: DrawerFooterProps): JSX.Element {
|
|
168
|
-
return (
|
|
169
|
-
<div
|
|
170
|
-
className={cn("flex flex-col gap-2", "mt-auto p-4", className)}
|
|
171
|
-
data-slot="drawer-footer"
|
|
172
|
-
{...props}
|
|
173
|
-
/>
|
|
174
|
-
);
|
|
114
|
+
return <div className={cn("mt-auto flex flex-col gap-2 p-4", className)} data-slot="drawer-footer" {...props} />;
|
|
175
115
|
}
|
|
176
116
|
|
|
177
117
|
/* -----------------------------------------------------------------------------
|
|
@@ -189,7 +129,7 @@ type DrawerTitleProps = ComponentProps<typeof DrawerPrimitive.Title>;
|
|
|
189
129
|
function DrawerTitle({ className, ...props }: DrawerTitleProps): JSX.Element {
|
|
190
130
|
return (
|
|
191
131
|
<DrawerPrimitive.Title
|
|
192
|
-
className={cn("font-
|
|
132
|
+
className={cn("font-heading font-medium text-foreground", className)}
|
|
193
133
|
data-slot="drawer-title"
|
|
194
134
|
{...props}
|
|
195
135
|
/>
|
|
@@ -249,7 +189,6 @@ function DrawerClose({ className, size, variant, ...props }: DrawerCloseProps):
|
|
|
249
189
|
|
|
250
190
|
export {
|
|
251
191
|
Drawer,
|
|
252
|
-
DrawerBody,
|
|
253
192
|
DrawerClose,
|
|
254
193
|
DrawerContent,
|
|
255
194
|
DrawerDescription,
|
|
@@ -259,7 +198,6 @@ export {
|
|
|
259
198
|
DrawerTrigger,
|
|
260
199
|
};
|
|
261
200
|
export type {
|
|
262
|
-
DrawerBodyProps,
|
|
263
201
|
DrawerCloseProps,
|
|
264
202
|
DrawerContentProps,
|
|
265
203
|
DrawerDescriptionProps,
|