azamat-ui-kit-cli 0.2.2 → 0.3.4
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/README.md +11 -0
- package/dist/index.cjs +452 -0
- package/package.json +2 -2
- package/vendor/src/components/actions/action-menu.tsx +21 -18
- package/vendor/src/components/calendar/calendar.tsx +153 -102
- package/vendor/src/components/calendar/date-picker.tsx +24 -14
- package/vendor/src/components/calendar/date-range-picker.tsx +137 -58
- package/vendor/src/components/charts/charts.tsx +32 -21
- package/vendor/src/components/command/command-palette.tsx +68 -57
- package/vendor/src/components/data-table/data-table-bulk-actions.tsx +23 -20
- package/vendor/src/components/data-table/data-table-column-visibility-menu.tsx +21 -10
- package/vendor/src/components/data-table/data-table-pagination.tsx +6 -6
- package/vendor/src/components/data-table/data-table-toolbar.tsx +72 -44
- package/vendor/src/components/data-table/data-table.tsx +15 -11
- package/vendor/src/components/data-table/table-export-menu.tsx +1 -1
- package/vendor/src/components/data-table/table-import-button.tsx +1 -1
- package/vendor/src/components/display/data-state.tsx +20 -8
- package/vendor/src/components/display/index.ts +19 -15
- package/vendor/src/components/display/metric-card.tsx +35 -0
- package/vendor/src/components/display/progress-circle.tsx +24 -0
- package/vendor/src/components/display/smart-card.tsx +49 -27
- package/vendor/src/components/display/status-dot.tsx +45 -0
- package/vendor/src/components/display/user-card.tsx +30 -0
- package/vendor/src/components/feedback/alert.tsx +21 -11
- package/vendor/src/components/feedback/empty-state.tsx +2 -2
- package/vendor/src/components/feedback/loading-state.tsx +2 -2
- package/vendor/src/components/feedback/page-state.tsx +19 -15
- package/vendor/src/components/feedback/status-badge.tsx +43 -43
- package/vendor/src/components/form/form-app-input.tsx +147 -0
- package/vendor/src/components/form/form-date-input.tsx +16 -19
- package/vendor/src/components/form/form-field-shell.tsx +11 -8
- package/vendor/src/components/form/form-field-utils.ts +76 -0
- package/vendor/src/components/form/form-input.tsx +423 -44
- package/vendor/src/components/form/form-number-input.tsx +16 -15
- package/vendor/src/components/form/form-phone-input.tsx +15 -9
- package/vendor/src/components/form/form-search-input.tsx +16 -19
- package/vendor/src/components/form/form-select.tsx +4 -3
- package/vendor/src/components/form/public.ts +16 -14
- package/vendor/src/components/form/smart-form-shell.tsx +13 -12
- package/vendor/src/components/inputs/app-input.tsx +27 -0
- package/vendor/src/components/inputs/async-select.tsx +113 -84
- package/vendor/src/components/inputs/clearable-input.tsx +81 -61
- package/vendor/src/components/inputs/date-input.tsx +21 -17
- package/vendor/src/components/inputs/date-range-input.tsx +10 -10
- package/vendor/src/components/inputs/index.ts +1 -0
- package/vendor/src/components/inputs/input-decorator.tsx +101 -57
- package/vendor/src/components/inputs/masked-input.tsx +20 -20
- package/vendor/src/components/inputs/money-input.tsx +2 -2
- package/vendor/src/components/inputs/number-input.tsx +29 -19
- package/vendor/src/components/inputs/password-input.tsx +82 -45
- package/vendor/src/components/inputs/phone-input.tsx +24 -2
- package/vendor/src/components/inputs/quantity-input.tsx +2 -2
- package/vendor/src/components/inputs/search-input.tsx +54 -3
- package/vendor/src/components/inputs/simple-select.tsx +110 -22
- package/vendor/src/components/layout/app-shell.tsx +2 -2
- package/vendor/src/components/layout/index.ts +5 -4
- package/vendor/src/components/layout/page-header.tsx +79 -35
- package/vendor/src/components/layout/public.ts +12 -10
- package/vendor/src/components/layout/section-header.tsx +56 -0
- package/vendor/src/components/layout/stack.tsx +106 -0
- package/vendor/src/components/layout/stat-card.tsx +66 -29
- package/vendor/src/components/navigation/index.ts +1 -0
- package/vendor/src/components/navigation/nav-tabs.tsx +60 -0
- package/vendor/src/components/navigation/page-tabs.tsx +41 -26
- package/vendor/src/components/navigation/pagination.tsx +14 -10
- package/vendor/src/components/overlay/alert-dialog.tsx +65 -0
- package/vendor/src/components/overlay/drawer.tsx +71 -0
- package/vendor/src/components/overlay/index.ts +4 -2
- package/vendor/src/components/patterns/data-view.tsx +13 -8
- package/vendor/src/components/ui/badge.tsx +96 -52
- package/vendor/src/components/ui/button.tsx +99 -61
- package/vendor/src/components/ui/card.tsx +84 -25
- package/vendor/src/components/ui/checkbox.tsx +68 -68
- package/vendor/src/components/ui/command.tsx +32 -32
- package/vendor/src/components/ui/dialog.tsx +135 -138
- package/vendor/src/components/ui/dropdown-menu.tsx +21 -21
- package/vendor/src/components/ui/hover-card.tsx +49 -0
- package/vendor/src/components/ui/input-primitive.tsx +24 -0
- package/vendor/src/components/ui/input.tsx +191 -20
- package/vendor/src/components/ui/kbd.tsx +33 -0
- package/vendor/src/components/ui/popover.tsx +11 -11
- package/vendor/src/components/ui/radio-group.tsx +102 -0
- package/vendor/src/components/ui/right-click-menu.tsx +60 -0
- package/vendor/src/components/ui/scroll-box.tsx +27 -0
- package/vendor/src/components/ui/segmented-control.tsx +21 -17
- package/vendor/src/components/ui/select.tsx +187 -189
- package/vendor/src/components/ui/skeleton.tsx +2 -2
- package/vendor/src/components/ui/switch.tsx +60 -60
- package/vendor/src/components/ui/table.tsx +114 -114
- package/vendor/src/components/ui/tabs.tsx +2 -2
- package/vendor/src/components/ui/textarea.tsx +1 -1
- package/vendor/src/components/upload/file-dropzone.tsx +38 -0
- package/vendor/src/components/upload/file-upload.tsx +4 -4
- package/vendor/src/components/upload/image-upload.tsx +22 -19
- package/vendor/src/components/upload/index.ts +2 -0
- package/vendor/src/families/catalog.ts +1 -0
- package/vendor/src/families/docs-groups.ts +10 -1
- package/vendor/src/families/member-metadata.ts +24 -0
- package/vendor/src/families/member-snippets.ts +41 -2
- package/vendor/src/families/migration-map.ts +3 -0
- package/vendor/src/index.ts +23 -18
- package/vendor/templates/styles/globals.css +253 -0
- package/dist/index.js +0 -432
|
@@ -1,160 +1,157 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog"
|
|
3
|
-
|
|
4
|
-
import { cn } from "@/lib/utils"
|
|
5
|
-
import { Button } from "@/components/ui/button"
|
|
6
|
-
import { XIcon } from "lucide-react"
|
|
7
|
-
|
|
8
|
-
function Dialog({ ...props }: DialogPrimitive.Root.Props) {
|
|
9
|
-
return <DialogPrimitive.Root data-slot="dialog" {...props} />
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {
|
|
13
|
-
return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {
|
|
17
|
-
return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function DialogClose({ ...props }: DialogPrimitive.Close.Props) {
|
|
21
|
-
return <DialogPrimitive.Close data-slot="dialog-close" {...props} />
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function DialogOverlay({
|
|
25
|
-
className,
|
|
26
|
-
...props
|
|
27
|
-
}: DialogPrimitive.Backdrop.Props) {
|
|
28
|
-
return (
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog"
|
|
3
|
+
|
|
4
|
+
import { cn } from "@/lib/utils"
|
|
5
|
+
import { Button } from "@/components/ui/button"
|
|
6
|
+
import { XIcon } from "lucide-react"
|
|
7
|
+
|
|
8
|
+
function Dialog({ ...props }: DialogPrimitive.Root.Props) {
|
|
9
|
+
return <DialogPrimitive.Root data-slot="dialog" {...props} />
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {
|
|
13
|
+
return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {
|
|
17
|
+
return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function DialogClose({ ...props }: DialogPrimitive.Close.Props) {
|
|
21
|
+
return <DialogPrimitive.Close data-slot="dialog-close" {...props} />
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function DialogOverlay({
|
|
25
|
+
className,
|
|
26
|
+
...props
|
|
27
|
+
}: DialogPrimitive.Backdrop.Props) {
|
|
28
|
+
return (
|
|
29
29
|
<DialogPrimitive.Backdrop
|
|
30
30
|
data-slot="dialog-overlay"
|
|
31
31
|
className={cn(
|
|
32
|
-
"fixed inset-0 isolate z-50 bg-[color-mix(in_oklch,var(--foreground),
|
|
32
|
+
"fixed inset-0 isolate z-50 bg-[color-mix(in_oklch,var(--foreground),transparent_80%)] duration-100 supports-backdrop-filter:backdrop-blur-md data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
|
33
33
|
className
|
|
34
34
|
)}
|
|
35
|
-
{...props}
|
|
36
|
-
/>
|
|
37
|
-
)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function DialogContent({
|
|
41
|
-
className,
|
|
42
|
-
children,
|
|
43
|
-
showCloseButton = true,
|
|
44
|
-
...props
|
|
45
|
-
}: DialogPrimitive.Popup.Props & {
|
|
46
|
-
showCloseButton?: boolean
|
|
47
|
-
}) {
|
|
48
|
-
return (
|
|
49
|
-
<DialogPortal>
|
|
50
|
-
<DialogOverlay />
|
|
51
|
-
<DialogPrimitive.Popup
|
|
35
|
+
{...props}
|
|
36
|
+
/>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function DialogContent({
|
|
41
|
+
className,
|
|
42
|
+
children,
|
|
43
|
+
showCloseButton = true,
|
|
44
|
+
...props
|
|
45
|
+
}: DialogPrimitive.Popup.Props & {
|
|
46
|
+
showCloseButton?: boolean
|
|
47
|
+
}) {
|
|
48
|
+
return (
|
|
49
|
+
<DialogPortal>
|
|
50
|
+
<DialogOverlay />
|
|
51
|
+
<DialogPrimitive.Popup
|
|
52
52
|
data-slot="dialog-content"
|
|
53
53
|
className={cn(
|
|
54
|
-
"fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-5 rounded-[var(--radius-3xl)] border border-border/
|
|
54
|
+
"fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-5 rounded-[var(--radius-3xl)] border border-border/85 bg-[linear-gradient(180deg,color-mix(in_oklch,var(--popover),white_10%),var(--popover))] p-6 text-sm text-popover-foreground shadow-[0_34px_110px_color-mix(in_oklch,var(--foreground),transparent_82%)] ring-1 ring-foreground/8 backdrop-blur duration-100 outline-none sm:max-w-lg data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
55
55
|
className
|
|
56
56
|
)}
|
|
57
|
-
{...props}
|
|
58
|
-
>
|
|
59
|
-
{children}
|
|
60
|
-
{showCloseButton && (
|
|
61
|
-
<DialogPrimitive.Close
|
|
62
|
-
data-slot="dialog-close"
|
|
63
|
-
render={
|
|
64
|
-
<Button
|
|
57
|
+
{...props}
|
|
58
|
+
>
|
|
59
|
+
{children}
|
|
60
|
+
{showCloseButton && (
|
|
61
|
+
<DialogPrimitive.Close
|
|
62
|
+
data-slot="dialog-close"
|
|
63
|
+
render={
|
|
64
|
+
<Button
|
|
65
65
|
variant="ghost"
|
|
66
|
-
className="absolute top-3 right-3 rounded-full"
|
|
66
|
+
className="absolute top-3 right-3 rounded-full border border-transparent hover:border-border/60"
|
|
67
67
|
size="icon-sm"
|
|
68
68
|
/>
|
|
69
|
-
}
|
|
70
|
-
>
|
|
71
|
-
<XIcon
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
<div
|
|
69
|
+
}
|
|
70
|
+
>
|
|
71
|
+
<XIcon />
|
|
72
|
+
<span className="sr-only">Close</span>
|
|
73
|
+
</DialogPrimitive.Close>
|
|
74
|
+
)}
|
|
75
|
+
</DialogPrimitive.Popup>
|
|
76
|
+
</DialogPortal>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
|
|
81
|
+
return (
|
|
82
|
+
<div
|
|
84
83
|
data-slot="dialog-header"
|
|
85
84
|
className={cn("flex flex-col gap-2.5", className)}
|
|
86
|
-
{...props}
|
|
87
|
-
/>
|
|
88
|
-
)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function DialogFooter({
|
|
92
|
-
className,
|
|
93
|
-
showCloseButton = false,
|
|
94
|
-
children,
|
|
95
|
-
...props
|
|
96
|
-
}: React.ComponentProps<"div"> & {
|
|
97
|
-
showCloseButton?: boolean
|
|
98
|
-
}) {
|
|
99
|
-
return (
|
|
100
|
-
<div
|
|
101
|
-
data-slot="dialog-footer"
|
|
102
|
-
className={cn(
|
|
103
|
-
"-mx-
|
|
104
|
-
"-mx-6 -mb-6 flex flex-col-reverse gap-2 rounded-b-[var(--radius-3xl)] border-t border-border/70 bg-muted/45 p-5 sm:flex-row sm:justify-end",
|
|
85
|
+
{...props}
|
|
86
|
+
/>
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function DialogFooter({
|
|
91
|
+
className,
|
|
92
|
+
showCloseButton = false,
|
|
93
|
+
children,
|
|
94
|
+
...props
|
|
95
|
+
}: React.ComponentProps<"div"> & {
|
|
96
|
+
showCloseButton?: boolean
|
|
97
|
+
}) {
|
|
98
|
+
return (
|
|
99
|
+
<div
|
|
100
|
+
data-slot="dialog-footer"
|
|
101
|
+
className={cn(
|
|
102
|
+
"-mx-6 -mb-6 flex flex-col-reverse gap-2 rounded-b-[var(--radius-3xl)] border-t border-border/70 bg-[linear-gradient(180deg,color-mix(in_oklch,var(--muted),transparent_30%),color-mix(in_oklch,var(--muted),transparent_12%))] p-5 sm:flex-row sm:justify-end",
|
|
105
103
|
className
|
|
106
104
|
)}
|
|
107
|
-
{...props}
|
|
108
|
-
>
|
|
109
|
-
{children}
|
|
110
|
-
{showCloseButton && (
|
|
111
|
-
<DialogPrimitive.Close render={<Button variant="outline" />}>
|
|
112
|
-
Close
|
|
113
|
-
</DialogPrimitive.Close>
|
|
114
|
-
)}
|
|
115
|
-
</div>
|
|
116
|
-
)
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {
|
|
120
|
-
return (
|
|
121
|
-
<DialogPrimitive.Title
|
|
122
|
-
data-slot="dialog-title"
|
|
123
|
-
className={cn(
|
|
124
|
-
"font-heading text-base leading-none font-medium",
|
|
105
|
+
{...props}
|
|
106
|
+
>
|
|
107
|
+
{children}
|
|
108
|
+
{showCloseButton && (
|
|
109
|
+
<DialogPrimitive.Close render={<Button variant="outline" />}>
|
|
110
|
+
Close
|
|
111
|
+
</DialogPrimitive.Close>
|
|
112
|
+
)}
|
|
113
|
+
</div>
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {
|
|
118
|
+
return (
|
|
119
|
+
<DialogPrimitive.Title
|
|
120
|
+
data-slot="dialog-title"
|
|
121
|
+
className={cn(
|
|
125
122
|
"font-heading text-xl leading-tight font-semibold tracking-tight",
|
|
126
123
|
className
|
|
127
124
|
)}
|
|
128
|
-
{...props}
|
|
129
|
-
/>
|
|
130
|
-
)
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function DialogDescription({
|
|
134
|
-
className,
|
|
135
|
-
...props
|
|
136
|
-
}: DialogPrimitive.Description.Props) {
|
|
137
|
-
return (
|
|
138
|
-
<DialogPrimitive.Description
|
|
139
|
-
data-slot="dialog-description"
|
|
140
|
-
className={cn(
|
|
125
|
+
{...props}
|
|
126
|
+
/>
|
|
127
|
+
)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function DialogDescription({
|
|
131
|
+
className,
|
|
132
|
+
...props
|
|
133
|
+
}: DialogPrimitive.Description.Props) {
|
|
134
|
+
return (
|
|
135
|
+
<DialogPrimitive.Description
|
|
136
|
+
data-slot="dialog-description"
|
|
137
|
+
className={cn(
|
|
141
138
|
"text-sm leading-6 text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
|
|
142
139
|
className
|
|
143
140
|
)}
|
|
144
|
-
{...props}
|
|
145
|
-
/>
|
|
146
|
-
)
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
export {
|
|
150
|
-
Dialog,
|
|
151
|
-
DialogClose,
|
|
152
|
-
DialogContent,
|
|
153
|
-
DialogDescription,
|
|
154
|
-
DialogFooter,
|
|
155
|
-
DialogHeader,
|
|
156
|
-
DialogOverlay,
|
|
157
|
-
DialogPortal,
|
|
158
|
-
DialogTitle,
|
|
159
|
-
DialogTrigger,
|
|
160
|
-
}
|
|
141
|
+
{...props}
|
|
142
|
+
/>
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export {
|
|
147
|
+
Dialog,
|
|
148
|
+
DialogClose,
|
|
149
|
+
DialogContent,
|
|
150
|
+
DialogDescription,
|
|
151
|
+
DialogFooter,
|
|
152
|
+
DialogHeader,
|
|
153
|
+
DialogOverlay,
|
|
154
|
+
DialogPortal,
|
|
155
|
+
DialogTitle,
|
|
156
|
+
DialogTrigger,
|
|
157
|
+
}
|
|
@@ -39,7 +39,7 @@ function DropdownMenuContent({
|
|
|
39
39
|
>
|
|
40
40
|
<MenuPrimitive.Popup
|
|
41
41
|
data-slot="dropdown-menu-content"
|
|
42
|
-
className={cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-
|
|
42
|
+
className={cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-48 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-[var(--radius-2xl)] border border-border/80 bg-[linear-gradient(180deg,color-mix(in_oklch,var(--popover),white_10%),var(--popover))] p-2 text-popover-foreground shadow-[0_24px_70px_color-mix(in_oklch,var(--foreground),transparent_84%)] ring-1 ring-foreground/8 backdrop-blur duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className)}
|
|
43
43
|
{...props}
|
|
44
44
|
/>
|
|
45
45
|
</MenuPrimitive.Positioner>
|
|
@@ -82,14 +82,14 @@ function DropdownMenuItem({
|
|
|
82
82
|
}) {
|
|
83
83
|
return (
|
|
84
84
|
<MenuPrimitive.Item
|
|
85
|
-
data-slot="dropdown-menu-item"
|
|
86
|
-
data-inset={inset}
|
|
87
|
-
data-variant={variant}
|
|
88
|
-
className={cn(
|
|
89
|
-
"group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-xl px-
|
|
85
|
+
data-slot="dropdown-menu-item"
|
|
86
|
+
data-inset={inset}
|
|
87
|
+
data-variant={variant}
|
|
88
|
+
className={cn(
|
|
89
|
+
"group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-[min(var(--radius-xl),16px)] border border-transparent px-3 py-2.5 text-sm outline-hidden select-none transition-[background-color,border-color,color,box-shadow] focus:border-border/80 focus:bg-accent/80 focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[highlighted]:border-border/65 data-[highlighted]:bg-accent/70 data-[highlighted]:text-foreground data-[highlighted]:shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] 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",
|
|
90
90
|
className
|
|
91
91
|
)}
|
|
92
|
-
{...props}
|
|
92
|
+
{...props}
|
|
93
93
|
/>
|
|
94
94
|
)
|
|
95
95
|
}
|
|
@@ -108,13 +108,13 @@ function DropdownMenuSubTrigger({
|
|
|
108
108
|
}) {
|
|
109
109
|
return (
|
|
110
110
|
<MenuPrimitive.SubmenuTrigger
|
|
111
|
-
data-slot="dropdown-menu-sub-trigger"
|
|
112
|
-
data-inset={inset}
|
|
113
|
-
className={cn(
|
|
114
|
-
"flex cursor-default items-center gap-2 rounded-xl px-
|
|
111
|
+
data-slot="dropdown-menu-sub-trigger"
|
|
112
|
+
data-inset={inset}
|
|
113
|
+
className={cn(
|
|
114
|
+
"flex cursor-default items-center gap-2 rounded-[min(var(--radius-xl),16px)] border border-transparent px-3 py-2.5 text-sm outline-hidden select-none transition-[background-color,border-color,color,box-shadow] focus:border-border/80 focus:bg-accent/80 focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-popup-open:border-border/80 data-popup-open:bg-accent/80 data-popup-open:text-accent-foreground data-open:border-border/80 data-open:bg-accent/80 data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
115
115
|
className
|
|
116
116
|
)}
|
|
117
|
-
{...props}
|
|
117
|
+
{...props}
|
|
118
118
|
>
|
|
119
119
|
{children}
|
|
120
120
|
<ChevronRightIcon className="ml-auto" />
|
|
@@ -133,7 +133,7 @@ function DropdownMenuSubContent({
|
|
|
133
133
|
return (
|
|
134
134
|
<DropdownMenuContent
|
|
135
135
|
data-slot="dropdown-menu-sub-content"
|
|
136
|
-
className={cn("w-auto min-w-[
|
|
136
|
+
className={cn("w-auto min-w-[128px] rounded-[var(--radius-2xl)] bg-[linear-gradient(180deg,color-mix(in_oklch,var(--popover),white_10%),var(--popover))] p-2 text-popover-foreground shadow-[0_22px_60px_color-mix(in_oklch,var(--foreground),transparent_84%)] ring-1 ring-foreground/8 backdrop-blur duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className )}
|
|
137
137
|
align={align}
|
|
138
138
|
alignOffset={alignOffset}
|
|
139
139
|
side={side}
|
|
@@ -154,10 +154,10 @@ function DropdownMenuCheckboxItem({
|
|
|
154
154
|
}) {
|
|
155
155
|
return (
|
|
156
156
|
<MenuPrimitive.CheckboxItem
|
|
157
|
-
data-slot="dropdown-menu-checkbox-item"
|
|
158
|
-
data-inset={inset}
|
|
159
|
-
className={cn(
|
|
160
|
-
"relative flex cursor-default items-center gap-2 rounded-xl py-2 pr-9 pl-
|
|
157
|
+
data-slot="dropdown-menu-checkbox-item"
|
|
158
|
+
data-inset={inset}
|
|
159
|
+
className={cn(
|
|
160
|
+
"relative flex cursor-default items-center gap-2 rounded-[min(var(--radius-xl),16px)] border border-transparent py-2.5 pr-9 pl-3 text-sm outline-hidden select-none transition-[background-color,border-color,color,box-shadow] focus:border-border/80 focus:bg-accent/80 focus:text-accent-foreground focus:**:text-accent-foreground data-[highlighted]:border-border/65 data-[highlighted]:bg-accent/70 data-[highlighted]:text-foreground data-[highlighted]:shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
161
161
|
className
|
|
162
162
|
)}
|
|
163
163
|
checked={checked}
|
|
@@ -196,10 +196,10 @@ function DropdownMenuRadioItem({
|
|
|
196
196
|
}) {
|
|
197
197
|
return (
|
|
198
198
|
<MenuPrimitive.RadioItem
|
|
199
|
-
data-slot="dropdown-menu-radio-item"
|
|
200
|
-
data-inset={inset}
|
|
201
|
-
className={cn(
|
|
202
|
-
"relative flex cursor-default items-center gap-2 rounded-xl py-2 pr-9 pl-
|
|
199
|
+
data-slot="dropdown-menu-radio-item"
|
|
200
|
+
data-inset={inset}
|
|
201
|
+
className={cn(
|
|
202
|
+
"relative flex cursor-default items-center gap-2 rounded-[min(var(--radius-xl),16px)] border border-transparent py-2.5 pr-9 pl-3 text-sm outline-hidden select-none transition-[background-color,border-color,color,box-shadow] focus:border-border/80 focus:bg-accent/80 focus:text-accent-foreground focus:**:text-accent-foreground data-[highlighted]:border-border/65 data-[highlighted]:bg-accent/70 data-[highlighted]:text-foreground data-[highlighted]:shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
203
203
|
className
|
|
204
204
|
)}
|
|
205
205
|
{...props}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
|
|
3
|
+
import { cn } from "@/lib/utils"
|
|
4
|
+
|
|
5
|
+
export type HoverCardProps = React.ComponentProps<"div"> & {
|
|
6
|
+
trigger: React.ReactNode
|
|
7
|
+
content: React.ReactNode
|
|
8
|
+
side?: "top" | "right" | "bottom" | "left"
|
|
9
|
+
align?: "start" | "center" | "end"
|
|
10
|
+
contentClassName?: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const sideClassName = {
|
|
14
|
+
top: "bottom-full left-1/2 mb-2 -translate-x-1/2",
|
|
15
|
+
right: "left-full top-1/2 ml-2 -translate-y-1/2",
|
|
16
|
+
bottom: "left-1/2 top-full mt-2 -translate-x-1/2",
|
|
17
|
+
left: "right-full top-1/2 mr-2 -translate-y-1/2",
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function HoverCard({
|
|
21
|
+
trigger,
|
|
22
|
+
content,
|
|
23
|
+
side = "bottom",
|
|
24
|
+
contentClassName,
|
|
25
|
+
className,
|
|
26
|
+
children,
|
|
27
|
+
...props
|
|
28
|
+
}: HoverCardProps) {
|
|
29
|
+
return (
|
|
30
|
+
<div data-slot="hover-card" className={cn("group/hover-card relative inline-flex", className)} {...props}>
|
|
31
|
+
<span data-slot="hover-card-trigger" className="inline-flex">
|
|
32
|
+
{trigger}
|
|
33
|
+
</span>
|
|
34
|
+
<div
|
|
35
|
+
data-slot="hover-card-content"
|
|
36
|
+
className={cn(
|
|
37
|
+
"pointer-events-none absolute z-50 min-w-56 rounded-[var(--radius-2xl)] border border-border/80 bg-popover p-4 text-sm text-popover-foreground opacity-0 shadow-xl ring-1 ring-foreground/8 transition group-hover/hover-card:pointer-events-auto group-hover/hover-card:opacity-100 group-focus-within/hover-card:pointer-events-auto group-focus-within/hover-card:opacity-100",
|
|
38
|
+
sideClassName[side],
|
|
39
|
+
contentClassName
|
|
40
|
+
)}
|
|
41
|
+
>
|
|
42
|
+
{content}
|
|
43
|
+
</div>
|
|
44
|
+
{children}
|
|
45
|
+
</div>
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { HoverCard }
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { Input as BaseInputPrimitive } from "@base-ui/react/input"
|
|
3
|
+
|
|
4
|
+
import { cn } from "@/lib/utils"
|
|
5
|
+
|
|
6
|
+
export type InputPrimitiveProps = React.ComponentProps<"input"> & {
|
|
7
|
+
type?: string
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function InputPrimitive({ className, type, ...props }: InputPrimitiveProps) {
|
|
11
|
+
return (
|
|
12
|
+
<BaseInputPrimitive
|
|
13
|
+
type={type}
|
|
14
|
+
data-slot="input"
|
|
15
|
+
className={cn(
|
|
16
|
+
"h-10 w-full min-w-0 rounded-[min(var(--radius-xl),16px)] border border-input/90 bg-[linear-gradient(180deg,color-mix(in_oklch,var(--background),white_14%),var(--background))] px-3.5 py-2 text-base text-foreground shadow-[inset_0_1px_0_rgba(255,255,255,0.18),0_1px_0_rgba(255,255,255,0.06)] transition-[background-color,border-color,box-shadow,color] outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground/92 hover:border-ring/30 hover:bg-background focus-visible:border-ring focus-visible:bg-background focus-visible:shadow-[0_0_0_1px_color-mix(in_oklch,var(--ring),transparent_45%),0_10px_24px_rgba(15,23,42,0.08)] focus-visible:ring-3 focus-visible:ring-ring/45 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/55 disabled:text-muted-foreground disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:border-white/12 dark:bg-[linear-gradient(180deg,rgba(255,255,255,0.08),rgba(255,255,255,0.05))] dark:hover:bg-white/8 dark:focus-visible:bg-white/8 dark:disabled:bg-white/8 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
|
|
17
|
+
className
|
|
18
|
+
)}
|
|
19
|
+
{...props}
|
|
20
|
+
/>
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { InputPrimitive }
|