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,201 +1,199 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import * as React from "react"
|
|
4
|
-
import { Select as SelectPrimitive } from "@base-ui/react/select"
|
|
5
|
-
|
|
6
|
-
import { cn } from "@/lib/utils"
|
|
7
|
-
import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react"
|
|
8
|
-
|
|
9
|
-
const Select = SelectPrimitive.Root
|
|
10
|
-
|
|
11
|
-
function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
|
|
12
|
-
return (
|
|
13
|
-
<SelectPrimitive.Group
|
|
14
|
-
data-slot="select-group"
|
|
15
|
-
className={cn("scroll-my-1 p-1", className)}
|
|
16
|
-
{...props}
|
|
17
|
-
/>
|
|
18
|
-
)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {
|
|
22
|
-
return (
|
|
23
|
-
<SelectPrimitive.Value
|
|
24
|
-
data-slot="select-value"
|
|
25
|
-
className={cn("flex flex-1 text-left", className)}
|
|
26
|
-
{...props}
|
|
27
|
-
/>
|
|
28
|
-
)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function SelectTrigger({
|
|
32
|
-
className,
|
|
33
|
-
size = "default",
|
|
34
|
-
children,
|
|
35
|
-
...props
|
|
36
|
-
}: SelectPrimitive.Trigger.Props & {
|
|
37
|
-
size?: "sm" | "default"
|
|
38
|
-
}) {
|
|
39
|
-
return (
|
|
40
|
-
<SelectPrimitive.Trigger
|
|
41
|
-
data-slot="select-trigger"
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import { Select as SelectPrimitive } from "@base-ui/react/select"
|
|
5
|
+
|
|
6
|
+
import { cn } from "@/lib/utils"
|
|
7
|
+
import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react"
|
|
8
|
+
|
|
9
|
+
const Select = SelectPrimitive.Root
|
|
10
|
+
|
|
11
|
+
function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
|
|
12
|
+
return (
|
|
13
|
+
<SelectPrimitive.Group
|
|
14
|
+
data-slot="select-group"
|
|
15
|
+
className={cn("scroll-my-1 p-1", className)}
|
|
16
|
+
{...props}
|
|
17
|
+
/>
|
|
18
|
+
)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {
|
|
22
|
+
return (
|
|
23
|
+
<SelectPrimitive.Value
|
|
24
|
+
data-slot="select-value"
|
|
25
|
+
className={cn("flex flex-1 text-left", className)}
|
|
26
|
+
{...props}
|
|
27
|
+
/>
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function SelectTrigger({
|
|
32
|
+
className,
|
|
33
|
+
size = "default",
|
|
34
|
+
children,
|
|
35
|
+
...props
|
|
36
|
+
}: SelectPrimitive.Trigger.Props & {
|
|
37
|
+
size?: "sm" | "default"
|
|
38
|
+
}) {
|
|
39
|
+
return (
|
|
40
|
+
<SelectPrimitive.Trigger
|
|
41
|
+
data-slot="select-trigger"
|
|
42
42
|
data-size={size}
|
|
43
43
|
className={cn(
|
|
44
|
-
"flex w-fit items-center justify-between gap-
|
|
44
|
+
"flex w-fit items-center justify-between gap-2 rounded-[min(var(--radius-xl),16px)] border border-input/90 bg-[linear-gradient(180deg,color-mix(in_oklch,var(--background),white_14%),var(--background))] py-2 pr-3 pl-3 text-sm whitespace-nowrap 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 select-none 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:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-10 data-[size=sm]:h-9 data-[size=sm]:rounded-[min(var(--radius-lg),12px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 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:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
45
45
|
className
|
|
46
46
|
)}
|
|
47
|
-
{...props}
|
|
48
|
-
>
|
|
49
|
-
{children}
|
|
50
|
-
<SelectPrimitive.Icon
|
|
51
|
-
render={
|
|
52
|
-
<ChevronDownIcon className="pointer-events-none size-4 text-muted-foreground" />
|
|
53
|
-
}
|
|
54
|
-
/>
|
|
55
|
-
</SelectPrimitive.Trigger>
|
|
56
|
-
)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function SelectContent({
|
|
60
|
-
className,
|
|
61
|
-
children,
|
|
62
|
-
side = "bottom",
|
|
63
|
-
sideOffset = 4,
|
|
64
|
-
align = "center",
|
|
65
|
-
alignOffset = 0,
|
|
66
|
-
alignItemWithTrigger = true,
|
|
67
|
-
...props
|
|
68
|
-
}: SelectPrimitive.Popup.Props &
|
|
69
|
-
Pick<
|
|
70
|
-
SelectPrimitive.Positioner.Props,
|
|
71
|
-
"align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger"
|
|
72
|
-
>) {
|
|
73
|
-
return (
|
|
74
|
-
<SelectPrimitive.Portal>
|
|
75
|
-
<SelectPrimitive.Positioner
|
|
76
|
-
side={side}
|
|
77
|
-
sideOffset={sideOffset}
|
|
78
|
-
align={align}
|
|
79
|
-
alignOffset={alignOffset}
|
|
80
|
-
alignItemWithTrigger={alignItemWithTrigger}
|
|
81
|
-
className="isolate z-50"
|
|
82
|
-
>
|
|
83
|
-
<SelectPrimitive.Popup
|
|
84
|
-
data-slot="select-content"
|
|
85
|
-
data-align-trigger={alignItemWithTrigger}
|
|
86
|
-
className={cn("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-
|
|
47
|
+
{...props}
|
|
48
|
+
>
|
|
49
|
+
{children}
|
|
50
|
+
<SelectPrimitive.Icon
|
|
51
|
+
render={
|
|
52
|
+
<ChevronDownIcon className="pointer-events-none size-4 text-muted-foreground" />
|
|
53
|
+
}
|
|
54
|
+
/>
|
|
55
|
+
</SelectPrimitive.Trigger>
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function SelectContent({
|
|
60
|
+
className,
|
|
61
|
+
children,
|
|
62
|
+
side = "bottom",
|
|
63
|
+
sideOffset = 4,
|
|
64
|
+
align = "center",
|
|
65
|
+
alignOffset = 0,
|
|
66
|
+
alignItemWithTrigger = true,
|
|
67
|
+
...props
|
|
68
|
+
}: SelectPrimitive.Popup.Props &
|
|
69
|
+
Pick<
|
|
70
|
+
SelectPrimitive.Positioner.Props,
|
|
71
|
+
"align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger"
|
|
72
|
+
>) {
|
|
73
|
+
return (
|
|
74
|
+
<SelectPrimitive.Portal>
|
|
75
|
+
<SelectPrimitive.Positioner
|
|
76
|
+
side={side}
|
|
77
|
+
sideOffset={sideOffset}
|
|
78
|
+
align={align}
|
|
79
|
+
alignOffset={alignOffset}
|
|
80
|
+
alignItemWithTrigger={alignItemWithTrigger}
|
|
81
|
+
className="isolate z-50"
|
|
82
|
+
>
|
|
83
|
+
<SelectPrimitive.Popup
|
|
84
|
+
data-slot="select-content"
|
|
85
|
+
data-align-trigger={alignItemWithTrigger}
|
|
86
|
+
className={cn("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-44 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-[var(--radius-2xl)] border border-border/80 bg-popover/98 p-1.5 text-popover-foreground shadow-xl ring-1 ring-foreground/8 backdrop-blur duration-100 data-[align-trigger=true]:animate-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:fade-out-0 data-closed:zoom-out-95", className)}
|
|
87
87
|
{...props}
|
|
88
88
|
>
|
|
89
|
-
<SelectScrollUpButton />
|
|
90
|
-
<SelectPrimitive.List>{children}</SelectPrimitive.List>
|
|
91
|
-
<SelectScrollDownButton />
|
|
92
|
-
</SelectPrimitive.Popup>
|
|
93
|
-
</SelectPrimitive.Positioner>
|
|
94
|
-
</SelectPrimitive.Portal>
|
|
95
|
-
)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function SelectLabel({
|
|
99
|
-
className,
|
|
100
|
-
...props
|
|
101
|
-
}: SelectPrimitive.GroupLabel.Props) {
|
|
102
|
-
return (
|
|
103
|
-
<SelectPrimitive.GroupLabel
|
|
104
|
-
data-slot="select-label"
|
|
89
|
+
<SelectScrollUpButton />
|
|
90
|
+
<SelectPrimitive.List>{children}</SelectPrimitive.List>
|
|
91
|
+
<SelectScrollDownButton />
|
|
92
|
+
</SelectPrimitive.Popup>
|
|
93
|
+
</SelectPrimitive.Positioner>
|
|
94
|
+
</SelectPrimitive.Portal>
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function SelectLabel({
|
|
99
|
+
className,
|
|
100
|
+
...props
|
|
101
|
+
}: SelectPrimitive.GroupLabel.Props) {
|
|
102
|
+
return (
|
|
103
|
+
<SelectPrimitive.GroupLabel
|
|
104
|
+
data-slot="select-label"
|
|
105
105
|
className={cn("px-2 py-1.5 text-[11px] font-semibold tracking-[0.14em] uppercase text-muted-foreground/90", className)}
|
|
106
|
-
{...props}
|
|
107
|
-
/>
|
|
108
|
-
)
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function SelectItem({
|
|
112
|
-
className,
|
|
113
|
-
children,
|
|
114
|
-
...props
|
|
115
|
-
}: SelectPrimitive.Item.Props) {
|
|
116
|
-
return (
|
|
117
|
-
<SelectPrimitive.Item
|
|
118
|
-
data-slot="select-item"
|
|
119
|
-
className={cn(
|
|
120
|
-
"relative flex w-full cursor-default items-center gap-1.5 rounded-xl py-2 pr-9 pl-
|
|
106
|
+
{...props}
|
|
107
|
+
/>
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function SelectItem({
|
|
112
|
+
className,
|
|
113
|
+
children,
|
|
114
|
+
...props
|
|
115
|
+
}: SelectPrimitive.Item.Props) {
|
|
116
|
+
return (
|
|
117
|
+
<SelectPrimitive.Item
|
|
118
|
+
data-slot="select-item"
|
|
119
|
+
className={cn(
|
|
120
|
+
"relative flex w-full cursor-default items-center gap-1.5 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,transform] focus:border-border/80 focus:bg-accent/80 focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[selected]:border-primary/20 data-[selected]:bg-primary/9 data-[selected]:text-foreground data-[selected]:shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] data-disabled:pointer-events-none data-disabled:opacity-50 dark:data-[selected]:border-white/8 dark:data-[selected]:bg-white/6 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
|
|
121
121
|
className
|
|
122
122
|
)}
|
|
123
|
-
{...props}
|
|
124
|
-
>
|
|
125
|
-
<SelectPrimitive.ItemText className="flex flex-1 shrink-0 gap-2 whitespace-nowrap">
|
|
126
|
-
{children}
|
|
127
|
-
</SelectPrimitive.ItemText>
|
|
128
|
-
<SelectPrimitive.ItemIndicator
|
|
129
|
-
render={
|
|
130
|
-
<span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />
|
|
131
|
-
}
|
|
132
|
-
>
|
|
133
|
-
<CheckIcon className="pointer-events-none" />
|
|
134
|
-
</SelectPrimitive.ItemIndicator>
|
|
135
|
-
</SelectPrimitive.Item>
|
|
136
|
-
)
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function SelectSeparator({
|
|
140
|
-
className,
|
|
141
|
-
...props
|
|
142
|
-
}: SelectPrimitive.Separator.Props) {
|
|
143
|
-
return (
|
|
144
|
-
<SelectPrimitive.Separator
|
|
145
|
-
data-slot="select-separator"
|
|
123
|
+
{...props}
|
|
124
|
+
>
|
|
125
|
+
<SelectPrimitive.ItemText className="flex flex-1 shrink-0 gap-2 whitespace-nowrap">
|
|
126
|
+
{children}
|
|
127
|
+
</SelectPrimitive.ItemText>
|
|
128
|
+
<SelectPrimitive.ItemIndicator
|
|
129
|
+
render={
|
|
130
|
+
<span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />
|
|
131
|
+
}
|
|
132
|
+
>
|
|
133
|
+
<CheckIcon className="pointer-events-none" />
|
|
134
|
+
</SelectPrimitive.ItemIndicator>
|
|
135
|
+
</SelectPrimitive.Item>
|
|
136
|
+
)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function SelectSeparator({
|
|
140
|
+
className,
|
|
141
|
+
...props
|
|
142
|
+
}: SelectPrimitive.Separator.Props) {
|
|
143
|
+
return (
|
|
144
|
+
<SelectPrimitive.Separator
|
|
145
|
+
data-slot="select-separator"
|
|
146
146
|
className={cn("pointer-events-none -mx-1 my-1.5 h-px bg-border/80", className)}
|
|
147
|
-
{...props}
|
|
148
|
-
/>
|
|
149
|
-
)
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
function SelectScrollUpButton({
|
|
153
|
-
className,
|
|
154
|
-
...props
|
|
155
|
-
}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {
|
|
156
|
-
return (
|
|
157
|
-
<SelectPrimitive.ScrollUpArrow
|
|
158
|
-
data-slot="select-scroll-up-button"
|
|
159
|
-
className={cn(
|
|
147
|
+
{...props}
|
|
148
|
+
/>
|
|
149
|
+
)
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function SelectScrollUpButton({
|
|
153
|
+
className,
|
|
154
|
+
...props
|
|
155
|
+
}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {
|
|
156
|
+
return (
|
|
157
|
+
<SelectPrimitive.ScrollUpArrow
|
|
158
|
+
data-slot="select-scroll-up-button"
|
|
159
|
+
className={cn(
|
|
160
160
|
"top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1.5 [&_svg:not([class*='size-'])]:size-4",
|
|
161
|
-
className
|
|
162
|
-
)}
|
|
163
|
-
{...props}
|
|
164
|
-
>
|
|
165
|
-
<ChevronUpIcon
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
className={cn(
|
|
161
|
+
className
|
|
162
|
+
)}
|
|
163
|
+
{...props}
|
|
164
|
+
>
|
|
165
|
+
<ChevronUpIcon />
|
|
166
|
+
</SelectPrimitive.ScrollUpArrow>
|
|
167
|
+
)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function SelectScrollDownButton({
|
|
171
|
+
className,
|
|
172
|
+
...props
|
|
173
|
+
}: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {
|
|
174
|
+
return (
|
|
175
|
+
<SelectPrimitive.ScrollDownArrow
|
|
176
|
+
data-slot="select-scroll-down-button"
|
|
177
|
+
className={cn(
|
|
179
178
|
"bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1.5 [&_svg:not([class*='size-'])]:size-4",
|
|
180
|
-
className
|
|
181
|
-
)}
|
|
182
|
-
{...props}
|
|
183
|
-
>
|
|
184
|
-
<ChevronDownIcon
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
179
|
+
className
|
|
180
|
+
)}
|
|
181
|
+
{...props}
|
|
182
|
+
>
|
|
183
|
+
<ChevronDownIcon />
|
|
184
|
+
</SelectPrimitive.ScrollDownArrow>
|
|
185
|
+
)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export {
|
|
189
|
+
Select,
|
|
190
|
+
SelectContent,
|
|
191
|
+
SelectGroup,
|
|
192
|
+
SelectItem,
|
|
193
|
+
SelectLabel,
|
|
194
|
+
SelectScrollDownButton,
|
|
195
|
+
SelectScrollUpButton,
|
|
196
|
+
SelectSeparator,
|
|
197
|
+
SelectTrigger,
|
|
198
|
+
SelectValue,
|
|
199
|
+
}
|
|
@@ -20,7 +20,7 @@ function Skeleton({ rounded = "md", animated = true, className, ...props }: Skel
|
|
|
20
20
|
data-slot="skeleton"
|
|
21
21
|
aria-hidden="true"
|
|
22
22
|
className={cn(
|
|
23
|
-
"bg-[linear-gradient(135deg,color-mix(in_oklch,var(--muted),white_38%)_0%,color-mix(in_oklch,var(--muted),transparent_6%)_48%,color-mix(in_oklch,var(--muted),white_28%)_100%)]",
|
|
23
|
+
"bg-[linear-gradient(135deg,color-mix(in_oklch,var(--muted),white_38%)_0%,color-mix(in_oklch,var(--muted),transparent_6%)_48%,color-mix(in_oklch,var(--muted),white_28%)_100%)] ring-1 ring-foreground/4",
|
|
24
24
|
animated && "animate-pulse",
|
|
25
25
|
roundedClassName[rounded],
|
|
26
26
|
className
|
|
@@ -58,7 +58,7 @@ function SkeletonCard({ avatar = false, rows = 3, className, ...props }: Skeleto
|
|
|
58
58
|
return (
|
|
59
59
|
<div
|
|
60
60
|
data-slot="skeleton-card"
|
|
61
|
-
className={cn("rounded-[var(--radius-2xl)] border border-border/
|
|
61
|
+
className={cn("rounded-[var(--radius-2xl)] border border-border/80 bg-card/96 p-5 shadow-sm ring-1 ring-foreground/5", className)}
|
|
62
62
|
{...props}
|
|
63
63
|
>
|
|
64
64
|
<div className="flex gap-3">
|
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
|
|
3
|
-
import { cn } from "@/lib/utils"
|
|
4
|
-
|
|
5
|
-
export type SwitchProps = Omit<
|
|
6
|
-
React.ComponentPropsWithoutRef<"button">,
|
|
7
|
-
"onChange" | "value"
|
|
8
|
-
> & {
|
|
9
|
-
checked?: boolean
|
|
10
|
-
defaultChecked?: boolean
|
|
11
|
-
onCheckedChange?: (checked: boolean) => void
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
|
|
15
|
-
(
|
|
16
|
-
{
|
|
17
|
-
className,
|
|
18
|
-
checked,
|
|
19
|
-
defaultChecked = false,
|
|
20
|
-
onCheckedChange,
|
|
21
|
-
disabled,
|
|
22
|
-
onClick,
|
|
23
|
-
...props
|
|
24
|
-
},
|
|
25
|
-
ref
|
|
26
|
-
) => {
|
|
27
|
-
const isControlled = checked !== undefined
|
|
28
|
-
const [internalChecked, setInternalChecked] = React.useState(defaultChecked)
|
|
29
|
-
const currentChecked = isControlled ? checked : internalChecked
|
|
30
|
-
|
|
31
|
-
const handleClick: React.MouseEventHandler<HTMLButtonElement> = (event) => {
|
|
32
|
-
const nextChecked = !currentChecked
|
|
33
|
-
|
|
34
|
-
if (!isControlled) {
|
|
35
|
-
setInternalChecked(nextChecked)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
onCheckedChange?.(nextChecked)
|
|
39
|
-
onClick?.(event)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return (
|
|
43
|
-
<button
|
|
44
|
-
ref={ref}
|
|
45
|
-
type="button"
|
|
46
|
-
role="switch"
|
|
47
|
-
aria-checked={currentChecked}
|
|
48
|
-
data-state={currentChecked ? "checked" : "unchecked"}
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
|
|
3
|
+
import { cn } from "@/lib/utils"
|
|
4
|
+
|
|
5
|
+
export type SwitchProps = Omit<
|
|
6
|
+
React.ComponentPropsWithoutRef<"button">,
|
|
7
|
+
"onChange" | "value"
|
|
8
|
+
> & {
|
|
9
|
+
checked?: boolean
|
|
10
|
+
defaultChecked?: boolean
|
|
11
|
+
onCheckedChange?: (checked: boolean) => void
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
|
|
15
|
+
(
|
|
16
|
+
{
|
|
17
|
+
className,
|
|
18
|
+
checked,
|
|
19
|
+
defaultChecked = false,
|
|
20
|
+
onCheckedChange,
|
|
21
|
+
disabled,
|
|
22
|
+
onClick,
|
|
23
|
+
...props
|
|
24
|
+
},
|
|
25
|
+
ref
|
|
26
|
+
) => {
|
|
27
|
+
const isControlled = checked !== undefined
|
|
28
|
+
const [internalChecked, setInternalChecked] = React.useState(defaultChecked)
|
|
29
|
+
const currentChecked = isControlled ? checked : internalChecked
|
|
30
|
+
|
|
31
|
+
const handleClick: React.MouseEventHandler<HTMLButtonElement> = (event) => {
|
|
32
|
+
const nextChecked = !currentChecked
|
|
33
|
+
|
|
34
|
+
if (!isControlled) {
|
|
35
|
+
setInternalChecked(nextChecked)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
onCheckedChange?.(nextChecked)
|
|
39
|
+
onClick?.(event)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<button
|
|
44
|
+
ref={ref}
|
|
45
|
+
type="button"
|
|
46
|
+
role="switch"
|
|
47
|
+
aria-checked={currentChecked}
|
|
48
|
+
data-state={currentChecked ? "checked" : "unchecked"}
|
|
49
49
|
data-slot="switch"
|
|
50
50
|
disabled={disabled}
|
|
51
51
|
className={cn(
|
|
52
|
-
"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border border-border/
|
|
52
|
+
"peer inline-flex h-6.5 w-11.5 shrink-0 cursor-pointer items-center rounded-full border border-border/75 bg-[linear-gradient(180deg,color-mix(in_oklch,var(--input),white_18%),var(--input))] shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] transition-[background-color,border-color,box-shadow] outline-none hover:border-ring/30 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/45 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary/55 data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_10px_22px_color-mix(in_oklch,var(--primary),transparent_82%)] dark:border-white/10 dark:bg-[linear-gradient(180deg,rgba(255,255,255,0.11),rgba(255,255,255,0.08))]",
|
|
53
53
|
className
|
|
54
54
|
)}
|
|
55
|
-
onClick={handleClick}
|
|
56
|
-
{...props}
|
|
57
|
-
>
|
|
55
|
+
onClick={handleClick}
|
|
56
|
+
{...props}
|
|
57
|
+
>
|
|
58
58
|
<span
|
|
59
59
|
data-slot="switch-thumb"
|
|
60
60
|
data-state={currentChecked ? "checked" : "unchecked"}
|
|
61
61
|
className={cn(
|
|
62
|
-
"pointer-events-none block size-5 rounded-full bg-background shadow-[0_2px_10px_color-mix(in_oklch,var(--foreground),transparent_86%)] ring-
|
|
62
|
+
"pointer-events-none block size-5 rounded-full bg-[linear-gradient(180deg,white,color-mix(in_oklch,var(--background),white_18%))] shadow-[0_2px_10px_color-mix(in_oklch,var(--foreground),transparent_86%)] ring-1 ring-foreground/6 transition-transform data-[state=checked]:translate-x-5.5 data-[state=unchecked]:translate-x-0.5 dark:bg-[linear-gradient(180deg,rgba(255,255,255,0.98),rgba(255,255,255,0.88))]"
|
|
63
63
|
)}
|
|
64
64
|
/>
|
|
65
|
-
</button>
|
|
66
|
-
)
|
|
67
|
-
}
|
|
68
|
-
)
|
|
69
|
-
Switch.displayName = "Switch"
|
|
70
|
-
|
|
71
|
-
export { Switch }
|
|
65
|
+
</button>
|
|
66
|
+
)
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
Switch.displayName = "Switch"
|
|
70
|
+
|
|
71
|
+
export { Switch }
|