@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,10 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { CheckIcon, ChevronRightIcon } from "lucide-react";
|
|
2
|
+
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
|
|
3
3
|
import type { ComponentProps, JSX } from "react";
|
|
4
4
|
|
|
5
5
|
import { cn } from "#/lib/utils";
|
|
6
|
-
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
7
|
-
import { CheckIcon, ChevronRightIcon, DotIcon } from "lucide-react";
|
|
8
6
|
|
|
9
7
|
/* -----------------------------------------------------------------------------
|
|
10
8
|
* Component: DropdownMenu
|
|
@@ -71,7 +69,7 @@ function DropdownMenuSub({ ...props }: DropdownMenuSubProps): JSX.Element {
|
|
|
71
69
|
}
|
|
72
70
|
|
|
73
71
|
/* -----------------------------------------------------------------------------
|
|
74
|
-
* Component:
|
|
72
|
+
* Component: DropdownMenuRadioGroup
|
|
75
73
|
* -------------------------------------------------------------------------- */
|
|
76
74
|
|
|
77
75
|
/**
|
|
@@ -93,32 +91,18 @@ function DropdownMenuRadioGroup({ ...props }: DropdownMenuRadioGroupProps): JSX.
|
|
|
93
91
|
/**
|
|
94
92
|
* @since 0.3.16-canary.0
|
|
95
93
|
*/
|
|
96
|
-
interface DropdownMenuSubTriggerProps extends ComponentProps<
|
|
97
|
-
typeof DropdownMenuPrimitive.SubTrigger
|
|
98
|
-
> {
|
|
94
|
+
interface DropdownMenuSubTriggerProps extends ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> {
|
|
99
95
|
inset?: boolean;
|
|
100
96
|
}
|
|
101
97
|
|
|
102
98
|
/**
|
|
103
99
|
* @since 0.3.16-canary.0
|
|
104
100
|
*/
|
|
105
|
-
function DropdownMenuSubTrigger({
|
|
106
|
-
children,
|
|
107
|
-
className,
|
|
108
|
-
inset,
|
|
109
|
-
...props
|
|
110
|
-
}: DropdownMenuSubTriggerProps): JSX.Element {
|
|
101
|
+
function DropdownMenuSubTrigger({ children, className, inset, ...props }: DropdownMenuSubTriggerProps): JSX.Element {
|
|
111
102
|
return (
|
|
112
103
|
<DropdownMenuPrimitive.SubTrigger
|
|
113
104
|
className={cn(
|
|
114
|
-
"flex items-center gap-
|
|
115
|
-
"px-2 py-1.5",
|
|
116
|
-
"rounded-sm outline-hidden",
|
|
117
|
-
"text-sm",
|
|
118
|
-
"cursor-default select-none",
|
|
119
|
-
"focus:bg-accent focus:text-accent-foreground",
|
|
120
|
-
"data-inset:pl-8",
|
|
121
|
-
"data-open:bg-accent data-open:text-accent-foreground",
|
|
105
|
+
"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:ps-8 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
122
106
|
className,
|
|
123
107
|
)}
|
|
124
108
|
data-inset={inset}
|
|
@@ -126,7 +110,7 @@ function DropdownMenuSubTrigger({
|
|
|
126
110
|
{...props}
|
|
127
111
|
>
|
|
128
112
|
{children}
|
|
129
|
-
<ChevronRightIcon className=
|
|
113
|
+
<ChevronRightIcon className="ms-auto rtl:rotate-180" />
|
|
130
114
|
</DropdownMenuPrimitive.SubTrigger>
|
|
131
115
|
);
|
|
132
116
|
}
|
|
@@ -148,22 +132,7 @@ function DropdownMenuSubContent({ className, ...props }: DropdownMenuSubContentP
|
|
|
148
132
|
<DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal">
|
|
149
133
|
<DropdownMenuPrimitive.SubContent
|
|
150
134
|
className={cn(
|
|
151
|
-
"z-50",
|
|
152
|
-
"min-w-32 overflow-hidden p-1",
|
|
153
|
-
"rounded-lg border",
|
|
154
|
-
"bg-popover text-popover-foreground shadow-lg",
|
|
155
|
-
"ease-snappy data-open:animate-in data-open:duration-200 data-open:fade-in-0 data-open:zoom-in-95",
|
|
156
|
-
"data-open:data-side-top:slide-in-from-bottom-2",
|
|
157
|
-
"data-open:data-side-right:slide-in-from-left-2",
|
|
158
|
-
"data-open:data-side-bottom:slide-in-from-top-2",
|
|
159
|
-
"data-open:data-side-left:slide-in-from-right-2",
|
|
160
|
-
"data-closed:animate-out data-closed:duration-150 data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
161
|
-
"data-closed:data-side-top:slide-out-to-bottom-2",
|
|
162
|
-
"data-closed:data-side-right:slide-out-to-left-2",
|
|
163
|
-
"data-closed:data-side-bottom:slide-out-to-top-2",
|
|
164
|
-
"data-closed:data-side-left:slide-out-to-right-2",
|
|
165
|
-
"motion-reduce:animate-none motion-reduce:transition-none motion-reduce:duration-0",
|
|
166
|
-
"origin-(--radix-dropdown-menu-content-transform-origin)",
|
|
135
|
+
"z-50 min-w-24 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 ease-snappy data-open:animate-in data-open:animation-duration-menu-in data-open:fade-in-0 data-open:zoom-in-95 data-open:data-side-top:slide-in-from-bottom-2 data-open:data-side-right:slide-in-from-left-2 data-open:data-side-bottom:slide-in-from-top-2 data-open:data-side-left:slide-in-from-right-2 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-menu-out data-closed:fade-out-0 data-closed:zoom-out-95 data-closed:data-side-top:slide-out-to-bottom-2 data-closed:data-side-right:slide-out-to-left-2 data-closed:data-side-bottom:slide-out-to-top-2 data-closed:data-side-left:slide-out-to-right-2",
|
|
167
136
|
className,
|
|
168
137
|
)}
|
|
169
138
|
data-slot="dropdown-menu-sub-content"
|
|
@@ -186,6 +155,7 @@ type DropdownMenuContentProps = ComponentProps<typeof DropdownMenuPrimitive.Cont
|
|
|
186
155
|
* @since 0.3.16-canary.0
|
|
187
156
|
*/
|
|
188
157
|
function DropdownMenuContent({
|
|
158
|
+
align = "start",
|
|
189
159
|
className,
|
|
190
160
|
sideOffset = 4,
|
|
191
161
|
...props
|
|
@@ -193,23 +163,9 @@ function DropdownMenuContent({
|
|
|
193
163
|
return (
|
|
194
164
|
<DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal">
|
|
195
165
|
<DropdownMenuPrimitive.Content
|
|
166
|
+
align={align}
|
|
196
167
|
className={cn(
|
|
197
|
-
"z-50",
|
|
198
|
-
"max-h-(--radix-dropdown-menu-content-available-height) min-w-32 overflow-x-hidden overflow-y-auto p-1",
|
|
199
|
-
"rounded-lg border",
|
|
200
|
-
"bg-popover text-popover-foreground shadow-lg",
|
|
201
|
-
"ease-snappy data-open:animate-in data-open:duration-200 data-open:fade-in-0 data-open:zoom-in-95",
|
|
202
|
-
"data-open:data-side-top:slide-in-from-bottom-2",
|
|
203
|
-
"data-open:data-side-right:slide-in-from-left-2",
|
|
204
|
-
"data-open:data-side-bottom:slide-in-from-top-2",
|
|
205
|
-
"data-open:data-side-left:slide-in-from-right-2",
|
|
206
|
-
"data-closed:animate-out data-closed:duration-150 data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
207
|
-
"data-closed:data-side-top:slide-out-to-bottom-2",
|
|
208
|
-
"data-closed:data-side-right:slide-out-to-left-2",
|
|
209
|
-
"data-closed:data-side-bottom:slide-out-to-top-2",
|
|
210
|
-
"data-closed:data-side-left:slide-out-to-right-2",
|
|
211
|
-
"motion-reduce:animate-none motion-reduce:transition-none motion-reduce:duration-0",
|
|
212
|
-
"origin-(--radix-dropdown-menu-content-transform-origin)",
|
|
168
|
+
"z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 ease-snappy data-open:animate-in data-open:animation-duration-menu-in data-open:fade-in-0 data-open:zoom-in-95 data-open:data-side-top:slide-in-from-bottom-2 data-open:data-side-right:slide-in-from-left-2 data-open:data-side-bottom:slide-in-from-top-2 data-open:data-side-left:slide-in-from-right-2 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-menu-out data-closed:fade-out-0 data-closed:zoom-out-95 data-closed:data-side-top:slide-out-to-bottom-2 data-closed:data-side-right:slide-out-to-left-2 data-closed:data-side-bottom:slide-out-to-top-2 data-closed:data-side-left:slide-out-to-right-2",
|
|
213
169
|
className,
|
|
214
170
|
)}
|
|
215
171
|
data-slot="dropdown-menu-content"
|
|
@@ -235,29 +191,11 @@ interface DropdownMenuItemProps extends ComponentProps<typeof DropdownMenuPrimit
|
|
|
235
191
|
/**
|
|
236
192
|
* @since 0.3.16-canary.0
|
|
237
193
|
*/
|
|
238
|
-
function DropdownMenuItem({
|
|
239
|
-
className,
|
|
240
|
-
inset,
|
|
241
|
-
variant,
|
|
242
|
-
...props
|
|
243
|
-
}: DropdownMenuItemProps): JSX.Element {
|
|
194
|
+
function DropdownMenuItem({ className, inset, variant = "default", ...props }: DropdownMenuItemProps): JSX.Element {
|
|
244
195
|
return (
|
|
245
196
|
<DropdownMenuPrimitive.Item
|
|
246
197
|
className={cn(
|
|
247
|
-
"group/dropdown-menu-item relative flex items-center gap-
|
|
248
|
-
"px-2 py-1.5",
|
|
249
|
-
"rounded-sm outline-hidden",
|
|
250
|
-
"text-sm",
|
|
251
|
-
"cursor-default select-none",
|
|
252
|
-
"focus:bg-accent focus:text-accent-foreground",
|
|
253
|
-
"aria-disabled:opacity-50",
|
|
254
|
-
"data-inset:pl-8",
|
|
255
|
-
"data-[variant=destructive]:text-destructive",
|
|
256
|
-
"data-[variant=destructive]:focus:bg-destructive/10",
|
|
257
|
-
"dark:data-[variant=destructive]:focus:bg-destructive/20",
|
|
258
|
-
"data-[variant=destructive]:[&_svg:not([class*='text-'])]:text-destructive/80",
|
|
259
|
-
"[&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
260
|
-
"[&_svg:not([class*='text-'])]:text-muted-foreground",
|
|
198
|
+
"group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:ps-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
|
|
261
199
|
className,
|
|
262
200
|
)}
|
|
263
201
|
data-inset={inset}
|
|
@@ -275,7 +213,9 @@ function DropdownMenuItem({
|
|
|
275
213
|
/**
|
|
276
214
|
* @since 0.3.16-canary.0
|
|
277
215
|
*/
|
|
278
|
-
|
|
216
|
+
interface DropdownMenuCheckboxItemProps extends ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> {
|
|
217
|
+
inset?: boolean;
|
|
218
|
+
}
|
|
279
219
|
|
|
280
220
|
/**
|
|
281
221
|
* @since 0.3.16-canary.0
|
|
@@ -284,28 +224,26 @@ function DropdownMenuCheckboxItem({
|
|
|
284
224
|
checked,
|
|
285
225
|
children,
|
|
286
226
|
className,
|
|
227
|
+
inset,
|
|
287
228
|
...props
|
|
288
229
|
}: DropdownMenuCheckboxItemProps): JSX.Element {
|
|
289
230
|
return (
|
|
290
231
|
<DropdownMenuPrimitive.CheckboxItem
|
|
291
232
|
checked={checked}
|
|
292
233
|
className={cn(
|
|
293
|
-
"
|
|
294
|
-
"py-1.5 pr-2 pl-8",
|
|
295
|
-
"rounded-sm outline-hidden",
|
|
296
|
-
"text-sm",
|
|
297
|
-
"cursor-default select-none",
|
|
298
|
-
"focus:bg-accent focus:text-accent-foreground",
|
|
299
|
-
"aria-disabled:opacity-50",
|
|
300
|
-
"[&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
234
|
+
"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 ps-2 pe-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:ps-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
301
235
|
className,
|
|
302
236
|
)}
|
|
237
|
+
data-inset={inset}
|
|
303
238
|
data-slot="dropdown-menu-checkbox-item"
|
|
304
239
|
{...props}
|
|
305
240
|
>
|
|
306
|
-
<span
|
|
241
|
+
<span
|
|
242
|
+
className="pointer-events-none absolute end-2 flex items-center justify-center"
|
|
243
|
+
data-slot="dropdown-menu-checkbox-item-indicator"
|
|
244
|
+
>
|
|
307
245
|
<DropdownMenuPrimitive.ItemIndicator>
|
|
308
|
-
<CheckIcon
|
|
246
|
+
<CheckIcon />
|
|
309
247
|
</DropdownMenuPrimitive.ItemIndicator>
|
|
310
248
|
</span>
|
|
311
249
|
{children}
|
|
@@ -320,35 +258,30 @@ function DropdownMenuCheckboxItem({
|
|
|
320
258
|
/**
|
|
321
259
|
* @since 0.3.16-canary.0
|
|
322
260
|
*/
|
|
323
|
-
|
|
261
|
+
interface DropdownMenuRadioItemProps extends ComponentProps<typeof DropdownMenuPrimitive.RadioItem> {
|
|
262
|
+
inset?: boolean;
|
|
263
|
+
}
|
|
324
264
|
|
|
325
265
|
/**
|
|
326
266
|
* @since 0.3.16-canary.0
|
|
327
267
|
*/
|
|
328
|
-
function DropdownMenuRadioItem({
|
|
329
|
-
children,
|
|
330
|
-
className,
|
|
331
|
-
...props
|
|
332
|
-
}: DropdownMenuRadioItemProps): JSX.Element {
|
|
268
|
+
function DropdownMenuRadioItem({ children, className, inset, ...props }: DropdownMenuRadioItemProps): JSX.Element {
|
|
333
269
|
return (
|
|
334
270
|
<DropdownMenuPrimitive.RadioItem
|
|
335
271
|
className={cn(
|
|
336
|
-
"
|
|
337
|
-
"py-1.5 pr-2 pl-8",
|
|
338
|
-
"rounded-sm outline-hidden",
|
|
339
|
-
"text-sm",
|
|
340
|
-
"cursor-default select-none",
|
|
341
|
-
"focus:bg-accent focus:text-accent-foreground",
|
|
342
|
-
"aria-disabled:opacity-50",
|
|
343
|
-
"[&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
272
|
+
"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 ps-2 pe-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:ps-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
344
273
|
className,
|
|
345
274
|
)}
|
|
275
|
+
data-inset={inset}
|
|
346
276
|
data-slot="dropdown-menu-radio-item"
|
|
347
277
|
{...props}
|
|
348
278
|
>
|
|
349
|
-
<span
|
|
279
|
+
<span
|
|
280
|
+
className="pointer-events-none absolute end-2 flex items-center justify-center"
|
|
281
|
+
data-slot="dropdown-menu-radio-item-indicator"
|
|
282
|
+
>
|
|
350
283
|
<DropdownMenuPrimitive.ItemIndicator>
|
|
351
|
-
<
|
|
284
|
+
<CheckIcon />
|
|
352
285
|
</DropdownMenuPrimitive.ItemIndicator>
|
|
353
286
|
</span>
|
|
354
287
|
{children}
|
|
@@ -373,13 +306,7 @@ interface DropdownMenuLabelProps extends ComponentProps<typeof DropdownMenuPrimi
|
|
|
373
306
|
function DropdownMenuLabel({ className, inset, ...props }: DropdownMenuLabelProps): JSX.Element {
|
|
374
307
|
return (
|
|
375
308
|
<DropdownMenuPrimitive.Label
|
|
376
|
-
className={cn(
|
|
377
|
-
"flex items-center gap-x-2",
|
|
378
|
-
"px-2 py-1.5",
|
|
379
|
-
"text-sm font-semibold",
|
|
380
|
-
"data-inset:pl-8",
|
|
381
|
-
className,
|
|
382
|
-
)}
|
|
309
|
+
className={cn("px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:ps-8", className)}
|
|
383
310
|
data-inset={inset}
|
|
384
311
|
data-slot="dropdown-menu-label"
|
|
385
312
|
{...props}
|
|
@@ -402,7 +329,7 @@ type DropdownMenuSeparatorProps = ComponentProps<typeof DropdownMenuPrimitive.Se
|
|
|
402
329
|
function DropdownMenuSeparator({ className, ...props }: DropdownMenuSeparatorProps): JSX.Element {
|
|
403
330
|
return (
|
|
404
331
|
<DropdownMenuPrimitive.Separator
|
|
405
|
-
className={cn("mx-
|
|
332
|
+
className={cn("-mx-1 my-1 h-px bg-border", className)}
|
|
406
333
|
data-slot="dropdown-menu-separator"
|
|
407
334
|
{...props}
|
|
408
335
|
/>
|
|
@@ -425,9 +352,7 @@ function DropdownMenuShortcut({ className, ...props }: DropdownMenuShortcutProps
|
|
|
425
352
|
return (
|
|
426
353
|
<span
|
|
427
354
|
className={cn(
|
|
428
|
-
"
|
|
429
|
-
"text-xs tracking-widest text-muted-foreground",
|
|
430
|
-
"group-data-[variant=destructive]/dropdown-menu-item:text-destructive/80",
|
|
355
|
+
"ms-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground",
|
|
431
356
|
className,
|
|
432
357
|
)}
|
|
433
358
|
data-slot="dropdown-menu-shortcut"
|
|
@@ -450,11 +375,7 @@ type DropdownMenuArrowProps = ComponentProps<typeof DropdownMenuPrimitive.Arrow>
|
|
|
450
375
|
*/
|
|
451
376
|
function DropdownMenuArrow({ className, ...props }: DropdownMenuArrowProps): JSX.Element {
|
|
452
377
|
return (
|
|
453
|
-
<DropdownMenuPrimitive.Arrow
|
|
454
|
-
className={cn("fill-popover", className)}
|
|
455
|
-
data-slot="dropdown-menu-arrow"
|
|
456
|
-
{...props}
|
|
457
|
-
/>
|
|
378
|
+
<DropdownMenuPrimitive.Arrow className={cn("fill-popover", className)} data-slot="dropdown-menu-arrow" {...props} />
|
|
458
379
|
);
|
|
459
380
|
}
|
|
460
381
|
|
package/src/components/empty.tsx
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { EmptyMediaVariants } from "#/variants/empty";
|
|
2
1
|
import type { ComponentProps, JSX } from "react";
|
|
3
2
|
|
|
4
3
|
import { cn } from "#/lib/utils";
|
|
5
|
-
|
|
4
|
+
import type { EmptyMediaVariants } from "#/variants/empty";
|
|
6
5
|
import { emptyMediaVariants } from "#/variants/empty";
|
|
7
6
|
|
|
8
7
|
/* -----------------------------------------------------------------------------
|
|
@@ -21,10 +20,7 @@ function Empty({ className, ...props }: EmptyProps): JSX.Element {
|
|
|
21
20
|
return (
|
|
22
21
|
<div
|
|
23
22
|
className={cn(
|
|
24
|
-
"flex min-w-0 flex-1 flex-col items-center justify-center gap-
|
|
25
|
-
"rounded-xl border-dashed",
|
|
26
|
-
"text-center text-balance",
|
|
27
|
-
"md:p-12",
|
|
23
|
+
"flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-lg border-dashed p-12 text-center text-balance",
|
|
28
24
|
className,
|
|
29
25
|
)}
|
|
30
26
|
data-slot="empty"
|
|
@@ -47,11 +43,7 @@ type EmptyHeaderProps = ComponentProps<"div">;
|
|
|
47
43
|
*/
|
|
48
44
|
function EmptyHeader({ className, ...props }: EmptyHeaderProps): JSX.Element {
|
|
49
45
|
return (
|
|
50
|
-
<div
|
|
51
|
-
className={cn("flex max-w-sm flex-col items-center gap-2", "text-center", className)}
|
|
52
|
-
data-slot="empty-header"
|
|
53
|
-
{...props}
|
|
54
|
-
/>
|
|
46
|
+
<div className={cn("flex max-w-sm flex-col items-center gap-2", className)} data-slot="empty-header" {...props} />
|
|
55
47
|
);
|
|
56
48
|
}
|
|
57
49
|
|
|
@@ -93,7 +85,7 @@ type EmptyTitleProps = ComponentProps<"div">;
|
|
|
93
85
|
function EmptyTitle({ className, ...props }: EmptyTitleProps): JSX.Element {
|
|
94
86
|
return (
|
|
95
87
|
<div
|
|
96
|
-
className={cn("text-lg font-medium tracking-tight", className)}
|
|
88
|
+
className={cn("font-heading text-lg font-medium tracking-tight", className)}
|
|
97
89
|
data-slot="empty-title"
|
|
98
90
|
{...props}
|
|
99
91
|
/>
|
|
@@ -116,9 +108,7 @@ function EmptyDescription({ className, ...props }: EmptyDescriptionProps): JSX.E
|
|
|
116
108
|
return (
|
|
117
109
|
<p
|
|
118
110
|
className={cn(
|
|
119
|
-
"text-sm/relaxed text-muted-foreground",
|
|
120
|
-
"[&>a]:underline [&>a]:underline-offset-4",
|
|
121
|
-
"[&>a:hover]:text-primary",
|
|
111
|
+
"text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
|
|
122
112
|
className,
|
|
123
113
|
)}
|
|
124
114
|
data-slot="empty-description"
|
|
@@ -142,11 +132,7 @@ type EmptyContentProps = ComponentProps<"div">;
|
|
|
142
132
|
function EmptyContent({ className, ...props }: EmptyContentProps): JSX.Element {
|
|
143
133
|
return (
|
|
144
134
|
<div
|
|
145
|
-
className={cn(
|
|
146
|
-
"flex w-full max-w-sm min-w-0 flex-col items-center gap-4",
|
|
147
|
-
"text-sm text-balance",
|
|
148
|
-
className,
|
|
149
|
-
)}
|
|
135
|
+
className={cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance", className)}
|
|
150
136
|
data-slot="empty-content"
|
|
151
137
|
{...props}
|
|
152
138
|
/>
|
package/src/components/field.tsx
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import type { FieldVariants } from "#/variants/field";
|
|
4
1
|
import type { ComponentProps, JSX, ReactNode } from "react";
|
|
5
|
-
|
|
6
|
-
import { cn } from "#/lib/utils";
|
|
7
|
-
|
|
8
|
-
import { fieldVariants } from "#/variants/field";
|
|
9
2
|
import { useMemo } from "react";
|
|
10
3
|
|
|
11
4
|
import { Label } from "#/components/label";
|
|
12
5
|
import { Separator } from "#/components/separator";
|
|
6
|
+
import { cn } from "#/lib/utils";
|
|
7
|
+
import type { FieldVariants } from "#/variants/field";
|
|
8
|
+
import { fieldVariants } from "#/variants/field";
|
|
13
9
|
|
|
14
10
|
/* -----------------------------------------------------------------------------
|
|
15
11
|
* Component: FieldSet
|
|
@@ -27,9 +23,7 @@ function FieldSet({ className, ...props }: FieldSetProps): JSX.Element {
|
|
|
27
23
|
return (
|
|
28
24
|
<fieldset
|
|
29
25
|
className={cn(
|
|
30
|
-
"flex flex-col gap-6",
|
|
31
|
-
"has-[>[data-slot=checkbox-group]]:gap-3",
|
|
32
|
-
"has-[>[data-slot=radio-group]]:gap-3",
|
|
26
|
+
"flex flex-col gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
|
|
33
27
|
className,
|
|
34
28
|
)}
|
|
35
29
|
data-slot="field-set"
|
|
@@ -55,7 +49,7 @@ type FieldLegendProps = ComponentProps<"legend"> & {
|
|
|
55
49
|
function FieldLegend({ className, variant = "legend", ...props }: FieldLegendProps): JSX.Element {
|
|
56
50
|
return (
|
|
57
51
|
<legend
|
|
58
|
-
className={cn("mb-3
|
|
52
|
+
className={cn("mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base", className)}
|
|
59
53
|
data-slot="field-legend"
|
|
60
54
|
data-variant={variant}
|
|
61
55
|
{...props}
|
|
@@ -79,9 +73,7 @@ function FieldGroup({ className, ...props }: FieldGroupProps): JSX.Element {
|
|
|
79
73
|
return (
|
|
80
74
|
<div
|
|
81
75
|
className={cn(
|
|
82
|
-
"group/field-group @container/field-group flex w-full flex-col gap-7",
|
|
83
|
-
"data-[slot=checkbox-group]:gap-3",
|
|
84
|
-
"[&>[data-slot=field-group]]:gap-4",
|
|
76
|
+
"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",
|
|
85
77
|
className,
|
|
86
78
|
)}
|
|
87
79
|
data-slot="field-group"
|
|
@@ -129,7 +121,7 @@ type FieldContentProps = ComponentProps<"div">;
|
|
|
129
121
|
function FieldContent({ className, ...props }: FieldContentProps): JSX.Element {
|
|
130
122
|
return (
|
|
131
123
|
<div
|
|
132
|
-
className={cn("group/field-content flex flex-1 flex-col gap-1
|
|
124
|
+
className={cn("group/field-content flex flex-1 flex-col gap-1 leading-snug", className)}
|
|
133
125
|
data-slot="field-content"
|
|
134
126
|
{...props}
|
|
135
127
|
/>
|
|
@@ -152,12 +144,8 @@ function FieldLabel({ className, ...props }: FieldLabelProps): JSX.Element {
|
|
|
152
144
|
return (
|
|
153
145
|
<Label
|
|
154
146
|
className={cn(
|
|
155
|
-
"group/field-label peer/field-label flex w-fit gap-2 leading-snug",
|
|
156
|
-
"
|
|
157
|
-
"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border",
|
|
158
|
-
"has-data-checked:border-primary has-data-checked:bg-primary/5",
|
|
159
|
-
"dark:has-data-checked:bg-primary/10",
|
|
160
|
-
"[&>*]:data-[slot=field]:p-4",
|
|
147
|
+
"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-disabled/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border *:data-[slot=field]:p-3 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10",
|
|
148
|
+
"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",
|
|
161
149
|
className,
|
|
162
150
|
)}
|
|
163
151
|
data-slot="field-label"
|
|
@@ -182,8 +170,7 @@ function FieldTitle({ className, ...props }: FieldTitleProps): JSX.Element {
|
|
|
182
170
|
return (
|
|
183
171
|
<div
|
|
184
172
|
className={cn(
|
|
185
|
-
"flex w-fit items-center gap-2 text-sm
|
|
186
|
-
"group-data-disabled/field:opacity-50",
|
|
173
|
+
"flex w-fit items-center gap-2 text-sm font-medium group-data-disabled/field:opacity-50",
|
|
187
174
|
className,
|
|
188
175
|
)}
|
|
189
176
|
data-slot="field-label"
|
|
@@ -208,13 +195,9 @@ function FieldDescription({ className, ...props }: FieldDescriptionProps): JSX.E
|
|
|
208
195
|
return (
|
|
209
196
|
<p
|
|
210
197
|
className={cn(
|
|
211
|
-
"text-sm leading-normal font-normal text-muted-foreground",
|
|
212
|
-
"
|
|
213
|
-
"
|
|
214
|
-
"nth-last-2:-mt-1",
|
|
215
|
-
"[&>a]:underline [&>a]:underline-offset-4",
|
|
216
|
-
"[&>a:hover]:text-primary",
|
|
217
|
-
"[[data-variant=legend]+&]:-mt-1.5",
|
|
198
|
+
"text-start text-sm leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5",
|
|
199
|
+
"last:mt-0 nth-last-2:-mt-1",
|
|
200
|
+
"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
|
|
218
201
|
className,
|
|
219
202
|
)}
|
|
220
203
|
data-slot="field-description"
|
|
@@ -242,24 +225,15 @@ function FieldSeparator({ children, className, ...props }: FieldSeparatorProps):
|
|
|
242
225
|
|
|
243
226
|
return (
|
|
244
227
|
<div
|
|
245
|
-
className={cn(
|
|
246
|
-
"relative",
|
|
247
|
-
"-my-2 h-5 text-sm",
|
|
248
|
-
"group-data-[variant=outline]/field-group:-mb-2",
|
|
249
|
-
className,
|
|
250
|
-
)}
|
|
228
|
+
className={cn("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className)}
|
|
251
229
|
data-content={hasContent}
|
|
252
230
|
data-slot="field-separator"
|
|
253
231
|
{...props}
|
|
254
232
|
>
|
|
255
|
-
<Separator className=
|
|
233
|
+
<Separator className="absolute inset-0 top-1/2" />
|
|
256
234
|
{hasContent ? (
|
|
257
235
|
<span
|
|
258
|
-
className=
|
|
259
|
-
"relative block",
|
|
260
|
-
"mx-auto w-fit px-2",
|
|
261
|
-
"bg-background text-muted-foreground",
|
|
262
|
-
)}
|
|
236
|
+
className="relative mx-auto block w-fit bg-background px-2 text-muted-foreground"
|
|
263
237
|
data-slot="field-separator-content"
|
|
264
238
|
>
|
|
265
239
|
{children}
|
|
@@ -287,12 +261,7 @@ interface FieldErrorProps extends ComponentProps<"div"> {
|
|
|
287
261
|
/**
|
|
288
262
|
* @since 0.3.16-canary.0
|
|
289
263
|
*/
|
|
290
|
-
function FieldError({
|
|
291
|
-
children,
|
|
292
|
-
className,
|
|
293
|
-
errors,
|
|
294
|
-
...props
|
|
295
|
-
}: FieldErrorProps): JSX.Element | null {
|
|
264
|
+
function FieldError({ children, className, errors, ...props }: FieldErrorProps): JSX.Element | null {
|
|
296
265
|
const fallbackContent = useMemo<null | ReactNode>(() => {
|
|
297
266
|
if (!errors?.length) {
|
|
298
267
|
return null;
|
|
@@ -305,10 +274,8 @@ function FieldError({
|
|
|
305
274
|
}
|
|
306
275
|
|
|
307
276
|
return (
|
|
308
|
-
<ul className=
|
|
309
|
-
{uniqueErrors.map((error) =>
|
|
310
|
-
error?.message ? <li key={error.message}>{error.message}</li> : null,
|
|
311
|
-
)}
|
|
277
|
+
<ul className="ms-4 flex list-disc flex-col gap-1">
|
|
278
|
+
{uniqueErrors.map((error) => (error?.message ? <li key={error.message}>{error.message}</li> : null))}
|
|
312
279
|
</ul>
|
|
313
280
|
);
|
|
314
281
|
}, [errors]);
|