@hilum/ui 2.0.0 → 2.0.1
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 +2 -2
- package/dist/index.d.ts +350 -290
- package/dist/index.js +489 -435
- package/dist/index.js.map +1 -1
- package/llms.txt +9 -9
- package/package.json +1 -1
- package/src/components/accordion.tsx +5 -5
- package/src/components/action-panel.tsx +8 -6
- package/src/components/activity-feed.tsx +7 -5
- package/src/components/alert-dialog.tsx +5 -5
- package/src/components/alert.tsx +5 -5
- package/src/components/avatar-stack.tsx +3 -3
- package/src/components/avatar.tsx +4 -4
- package/src/components/badge.tsx +7 -7
- package/src/components/breadcrumb.tsx +5 -6
- package/src/components/button-group.tsx +7 -4
- package/src/components/button.tsx +7 -7
- package/src/components/calendar.tsx +10 -10
- package/src/components/card-heading.tsx +3 -3
- package/src/components/card.tsx +4 -4
- package/src/components/chart.tsx +10 -10
- package/src/components/checkbox.tsx +2 -2
- package/src/components/color-input.tsx +7 -5
- package/src/components/color-picker.tsx +8 -6
- package/src/components/combobox.tsx +66 -31
- package/src/components/command-palette.tsx +13 -11
- package/src/components/command.tsx +14 -12
- package/src/components/context-menu.tsx +16 -16
- package/src/components/data-table.tsx +18 -7
- package/src/components/date-picker.tsx +2 -2
- package/src/components/description-list.tsx +10 -8
- package/src/components/dialog.tsx +4 -4
- package/src/components/drawer.tsx +5 -5
- package/src/components/dropdown-menu.tsx +16 -16
- package/src/components/empty-state.tsx +5 -3
- package/src/components/field.tsx +4 -4
- package/src/components/grid-list.tsx +17 -13
- package/src/components/hover-card.tsx +1 -1
- package/src/components/input-group.tsx +10 -10
- package/src/components/input-number.tsx +7 -7
- package/src/components/input-otp.tsx +3 -3
- package/src/components/input.tsx +4 -4
- package/src/components/kbd.tsx +1 -1
- package/src/components/label.tsx +1 -1
- package/src/components/media-object.tsx +2 -0
- package/src/components/menubar.tsx +21 -21
- package/src/components/native-select.tsx +5 -5
- package/src/components/navigation-menu.tsx +10 -10
- package/src/components/notification.tsx +13 -11
- package/src/components/page-heading.tsx +8 -8
- package/src/components/pagination.tsx +1 -1
- package/src/components/popover.tsx +1 -1
- package/src/components/progress.tsx +1 -1
- package/src/components/property-row.tsx +3 -1
- package/src/components/radio-card.tsx +10 -8
- package/src/components/radio-group.tsx +4 -4
- package/src/components/resizable.tsx +3 -3
- package/src/components/scroll-area.tsx +1 -1
- package/src/components/section-heading.tsx +3 -3
- package/src/components/select.tsx +13 -13
- package/src/components/separator.tsx +1 -1
- package/src/components/sheet.tsx +4 -4
- package/src/components/sidebar.tsx +20 -20
- package/src/components/skeleton.tsx +1 -1
- package/src/components/slider.tsx +2 -2
- package/src/components/sonner.tsx +9 -8
- package/src/components/stacked-list.tsx +5 -5
- package/src/components/stat-card.tsx +9 -7
- package/src/components/steps.tsx +16 -14
- package/src/components/switch.tsx +2 -2
- package/src/components/table.tsx +9 -9
- package/src/components/tabs.tsx +2 -2
- package/src/components/textarea.tsx +4 -4
- package/src/components/toggle.tsx +9 -9
- package/src/components/tooltip.tsx +1 -1
|
@@ -28,12 +28,12 @@ function DescriptionList({
|
|
|
28
28
|
<div className={className}>
|
|
29
29
|
{(title || description) && (
|
|
30
30
|
<div className="mb-4">
|
|
31
|
-
{title && <p className="body font-semibold text-
|
|
32
|
-
{description && <p className="mt-1 caption text-
|
|
31
|
+
{title && <p className="body font-semibold text-foreground">{title}</p>}
|
|
32
|
+
{description && <p className="mt-1 caption text-muted-foreground">{description}</p>}
|
|
33
33
|
</div>
|
|
34
34
|
)}
|
|
35
35
|
|
|
36
|
-
<dl className={cn("border-t border-
|
|
36
|
+
<dl className={cn("border-t border-border", columns === 2 && "sm:grid sm:grid-cols-2")}>
|
|
37
37
|
{items.map((item, i) => (
|
|
38
38
|
<div
|
|
39
39
|
key={i}
|
|
@@ -41,15 +41,15 @@ function DescriptionList({
|
|
|
41
41
|
"py-3.5",
|
|
42
42
|
columns === 1
|
|
43
43
|
? "grid grid-cols-3 gap-4 items-baseline"
|
|
44
|
-
: "flex flex-col gap-1 border-b border-
|
|
45
|
-
columns === 1 && i !== items.length - 1 && "border-b border-
|
|
46
|
-
striped && i % 2 === 0 && "bg-
|
|
44
|
+
: "flex flex-col gap-1 border-b border-border",
|
|
45
|
+
columns === 1 && i !== items.length - 1 && "border-b border-border",
|
|
46
|
+
striped && i % 2 === 0 && "bg-muted -mx-4 px-4 rounded",
|
|
47
47
|
)}
|
|
48
48
|
>
|
|
49
|
-
<dt className="caption font-semibold text-
|
|
49
|
+
<dt className="caption font-semibold text-muted-foreground uppercase tracking-wide">
|
|
50
50
|
{item.term}
|
|
51
51
|
</dt>
|
|
52
|
-
<dd className={cn("body text-
|
|
52
|
+
<dd className={cn("body text-foreground", columns === 1 ? "col-span-2" : "")}>
|
|
53
53
|
{item.action ? (
|
|
54
54
|
<div className="flex items-center justify-between gap-4">
|
|
55
55
|
<span>{item.details}</span>
|
|
@@ -66,5 +66,7 @@ function DescriptionList({
|
|
|
66
66
|
);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
DescriptionList.displayName = "DescriptionList";
|
|
70
|
+
|
|
69
71
|
export { DescriptionList };
|
|
70
72
|
export type { DescriptionItem };
|
|
@@ -36,7 +36,7 @@ const DialogContent = React.forwardRef<
|
|
|
36
36
|
ref={ref}
|
|
37
37
|
className={cn(
|
|
38
38
|
"fixed left-[50%] top-[50%] z-50 translate-x-[-50%] translate-y-[-50%]",
|
|
39
|
-
"w-full max-w-lg bg-
|
|
39
|
+
"w-full max-w-lg bg-card rounded-2xl shadow-elevated p-6",
|
|
40
40
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
41
41
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
42
42
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -45,7 +45,7 @@ const DialogContent = React.forwardRef<
|
|
|
45
45
|
{...props}
|
|
46
46
|
>
|
|
47
47
|
{children}
|
|
48
|
-
<Dialog.Close className="absolute right-4 top-4 rounded-md p-1 text-
|
|
48
|
+
<Dialog.Close className="absolute right-4 top-4 rounded-md p-1 text-muted-foreground opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring/20">
|
|
49
49
|
<X size={16} />
|
|
50
50
|
<span className="sr-only">Close</span>
|
|
51
51
|
</Dialog.Close>
|
|
@@ -70,7 +70,7 @@ const DialogTitle = React.forwardRef<
|
|
|
70
70
|
>(({ className, ...props }, ref) => (
|
|
71
71
|
<Dialog.Title
|
|
72
72
|
ref={ref}
|
|
73
|
-
className={cn("body-lg font-semibold text-
|
|
73
|
+
className={cn("body-lg font-semibold text-foreground", className)}
|
|
74
74
|
{...props}
|
|
75
75
|
/>
|
|
76
76
|
));
|
|
@@ -80,7 +80,7 @@ const DialogDescription = React.forwardRef<
|
|
|
80
80
|
React.ComponentRef<typeof Dialog.Description>,
|
|
81
81
|
React.ComponentPropsWithoutRef<typeof Dialog.Description>
|
|
82
82
|
>(({ className, ...props }, ref) => (
|
|
83
|
-
<Dialog.Description ref={ref} className={cn("body text-
|
|
83
|
+
<Dialog.Description ref={ref} className={cn("body text-muted-foreground", className)} {...props} />
|
|
84
84
|
));
|
|
85
85
|
DialogDescription.displayName = "DialogDescription";
|
|
86
86
|
|
|
@@ -15,7 +15,7 @@ const DrawerOverlay = React.forwardRef<
|
|
|
15
15
|
>(({ className, ...props }, ref) => (
|
|
16
16
|
<DrawerPrimitive.Overlay
|
|
17
17
|
ref={ref}
|
|
18
|
-
className={cn("fixed inset-0 z-50 bg-
|
|
18
|
+
className={cn("fixed inset-0 z-50 bg-foreground/40 backdrop-blur-[1px]", className)}
|
|
19
19
|
{...props}
|
|
20
20
|
/>
|
|
21
21
|
));
|
|
@@ -30,12 +30,12 @@ const DrawerContent = React.forwardRef<
|
|
|
30
30
|
<DrawerPrimitive.Content
|
|
31
31
|
ref={ref}
|
|
32
32
|
className={cn(
|
|
33
|
-
"fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border border-
|
|
33
|
+
"fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border border-border bg-card",
|
|
34
34
|
className,
|
|
35
35
|
)}
|
|
36
36
|
{...props}
|
|
37
37
|
>
|
|
38
|
-
<div className="mx-auto mt-4 h-1 w-12 rounded-full bg-
|
|
38
|
+
<div className="mx-auto mt-4 h-1 w-12 rounded-full bg-muted" />
|
|
39
39
|
{children}
|
|
40
40
|
</DrawerPrimitive.Content>
|
|
41
41
|
</DrawerPortal>
|
|
@@ -58,7 +58,7 @@ const DrawerTitle = React.forwardRef<
|
|
|
58
58
|
>(({ className, ...props }, ref) => (
|
|
59
59
|
<DrawerPrimitive.Title
|
|
60
60
|
ref={ref}
|
|
61
|
-
className={cn("subheading text-
|
|
61
|
+
className={cn("subheading text-foreground", className)}
|
|
62
62
|
{...props}
|
|
63
63
|
/>
|
|
64
64
|
));
|
|
@@ -70,7 +70,7 @@ const DrawerDescription = React.forwardRef<
|
|
|
70
70
|
>(({ className, ...props }, ref) => (
|
|
71
71
|
<DrawerPrimitive.Description
|
|
72
72
|
ref={ref}
|
|
73
|
-
className={cn("body text-
|
|
73
|
+
className={cn("body text-muted-foreground", className)}
|
|
74
74
|
{...props}
|
|
75
75
|
/>
|
|
76
76
|
));
|
|
@@ -21,7 +21,7 @@ const DropdownMenuContent = React.forwardRef<
|
|
|
21
21
|
ref={ref}
|
|
22
22
|
sideOffset={sideOffset}
|
|
23
23
|
className={cn(
|
|
24
|
-
"z-50 min-w-[8rem] bg-
|
|
24
|
+
"z-50 min-w-[8rem] bg-card rounded-xl shadow-natural p-1",
|
|
25
25
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
26
26
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
27
27
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -48,8 +48,8 @@ const DropdownMenuItem = React.forwardRef<
|
|
|
48
48
|
"relative flex cursor-default select-none items-center gap-2 rounded-md px-2.5 py-1.5",
|
|
49
49
|
"body outline-none transition-colors",
|
|
50
50
|
destructive
|
|
51
|
-
? "text-
|
|
52
|
-
: "text-
|
|
51
|
+
? "text-destructive focus:bg-destructive/10 focus:text-destructive"
|
|
52
|
+
: "text-muted-foreground focus:bg-muted focus:text-foreground",
|
|
53
53
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
54
54
|
inset && "pl-8",
|
|
55
55
|
className,
|
|
@@ -67,8 +67,8 @@ const DropdownMenuCheckboxItem = React.forwardRef<
|
|
|
67
67
|
ref={ref}
|
|
68
68
|
className={cn(
|
|
69
69
|
"relative flex cursor-default select-none items-center gap-2 rounded-md pl-8 pr-2.5 py-1.5",
|
|
70
|
-
"body text-
|
|
71
|
-
"focus:bg-
|
|
70
|
+
"body text-muted-foreground outline-none transition-colors",
|
|
71
|
+
"focus:bg-muted focus:text-foreground",
|
|
72
72
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
73
73
|
className,
|
|
74
74
|
)}
|
|
@@ -76,7 +76,7 @@ const DropdownMenuCheckboxItem = React.forwardRef<
|
|
|
76
76
|
>
|
|
77
77
|
<span className="absolute left-2 flex size-3.5 items-center justify-center">
|
|
78
78
|
<DropdownMenu.ItemIndicator>
|
|
79
|
-
<Check size={13} className="text-
|
|
79
|
+
<Check size={13} className="text-foreground" />
|
|
80
80
|
</DropdownMenu.ItemIndicator>
|
|
81
81
|
</span>
|
|
82
82
|
{children}
|
|
@@ -92,8 +92,8 @@ const DropdownMenuRadioItem = React.forwardRef<
|
|
|
92
92
|
ref={ref}
|
|
93
93
|
className={cn(
|
|
94
94
|
"relative flex cursor-default select-none items-center gap-2 rounded-md pl-8 pr-2.5 py-1.5",
|
|
95
|
-
"body text-
|
|
96
|
-
"focus:bg-
|
|
95
|
+
"body text-muted-foreground outline-none transition-colors",
|
|
96
|
+
"focus:bg-muted focus:text-foreground",
|
|
97
97
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
98
98
|
className,
|
|
99
99
|
)}
|
|
@@ -101,7 +101,7 @@ const DropdownMenuRadioItem = React.forwardRef<
|
|
|
101
101
|
>
|
|
102
102
|
<span className="absolute left-2 flex size-3.5 items-center justify-center">
|
|
103
103
|
<DropdownMenu.ItemIndicator>
|
|
104
|
-
<Circle size={8} className="fill-
|
|
104
|
+
<Circle size={8} className="fill-foreground text-foreground" />
|
|
105
105
|
</DropdownMenu.ItemIndicator>
|
|
106
106
|
</span>
|
|
107
107
|
{children}
|
|
@@ -117,7 +117,7 @@ const DropdownMenuLabel = React.forwardRef<
|
|
|
117
117
|
>(({ className, inset, ...props }, ref) => (
|
|
118
118
|
<DropdownMenu.Label
|
|
119
119
|
ref={ref}
|
|
120
|
-
className={cn("px-2.5 py-1 label text-
|
|
120
|
+
className={cn("px-2.5 py-1 label text-muted-foreground", inset && "pl-8", className)}
|
|
121
121
|
{...props}
|
|
122
122
|
/>
|
|
123
123
|
));
|
|
@@ -129,7 +129,7 @@ const DropdownMenuSeparator = React.forwardRef<
|
|
|
129
129
|
>(({ className, ...props }, ref) => (
|
|
130
130
|
<DropdownMenu.Separator
|
|
131
131
|
ref={ref}
|
|
132
|
-
className={cn("mx-1 my-1 h-px bg-
|
|
132
|
+
className={cn("mx-1 my-1 h-px bg-muted", className)}
|
|
133
133
|
{...props}
|
|
134
134
|
/>
|
|
135
135
|
));
|
|
@@ -145,15 +145,15 @@ const DropdownMenuSubTrigger = React.forwardRef<
|
|
|
145
145
|
ref={ref}
|
|
146
146
|
className={cn(
|
|
147
147
|
"relative flex cursor-default select-none items-center gap-2 rounded-md px-2.5 py-1.5",
|
|
148
|
-
"body text-
|
|
149
|
-
"focus:bg-
|
|
148
|
+
"body text-muted-foreground outline-none transition-colors",
|
|
149
|
+
"focus:bg-muted focus:text-foreground data-[state=open]:bg-muted",
|
|
150
150
|
inset && "pl-8",
|
|
151
151
|
className,
|
|
152
152
|
)}
|
|
153
153
|
{...props}
|
|
154
154
|
>
|
|
155
155
|
{children}
|
|
156
|
-
<ChevronRight size={14} className="ml-auto text-
|
|
156
|
+
<ChevronRight size={14} className="ml-auto text-muted-foreground" />
|
|
157
157
|
</DropdownMenu.SubTrigger>
|
|
158
158
|
));
|
|
159
159
|
DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
|
|
@@ -165,7 +165,7 @@ const DropdownMenuSubContent = React.forwardRef<
|
|
|
165
165
|
<DropdownMenu.SubContent
|
|
166
166
|
ref={ref}
|
|
167
167
|
className={cn(
|
|
168
|
-
"z-50 min-w-[8rem] bg-
|
|
168
|
+
"z-50 min-w-[8rem] bg-card rounded-xl border border-border shadow-natural p-1",
|
|
169
169
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
170
170
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
171
171
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -178,7 +178,7 @@ const DropdownMenuSubContent = React.forwardRef<
|
|
|
178
178
|
DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
|
|
179
179
|
|
|
180
180
|
function DropdownMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {
|
|
181
|
-
return <span className={cn("ml-auto caption text-
|
|
181
|
+
return <span className={cn("ml-auto caption text-muted-foreground", className)} {...props} />;
|
|
182
182
|
}
|
|
183
183
|
DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
|
|
184
184
|
|
|
@@ -18,13 +18,13 @@ function EmptyState({ icon, title, description, action, className }: EmptyStateP
|
|
|
18
18
|
return (
|
|
19
19
|
<div className={cn("flex flex-col items-center gap-4 px-6 py-14 text-center", className)}>
|
|
20
20
|
{icon && (
|
|
21
|
-
<div className="flex size-12 items-center justify-center rounded-xl bg-brand-secondary/20 text-
|
|
21
|
+
<div className="flex size-12 items-center justify-center rounded-xl bg-brand-secondary/20 text-muted-foreground">
|
|
22
22
|
{icon}
|
|
23
23
|
</div>
|
|
24
24
|
)}
|
|
25
25
|
<div className="flex flex-col gap-1.5">
|
|
26
|
-
<p className="body font-semibold text-
|
|
27
|
-
{description && <p className="body max-w-xs text-
|
|
26
|
+
<p className="body font-semibold text-foreground">{title}</p>
|
|
27
|
+
{description && <p className="body max-w-xs text-muted-foreground">{description}</p>}
|
|
28
28
|
</div>
|
|
29
29
|
{action &&
|
|
30
30
|
(action.href ? (
|
|
@@ -40,4 +40,6 @@ function EmptyState({ icon, title, description, action, className }: EmptyStateP
|
|
|
40
40
|
);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
EmptyState.displayName = "EmptyState";
|
|
44
|
+
|
|
43
45
|
export { EmptyState };
|
package/src/components/field.tsx
CHANGED
|
@@ -34,15 +34,15 @@ function Field({
|
|
|
34
34
|
<div className="flex items-center justify-between gap-2">
|
|
35
35
|
<Label htmlFor={htmlFor} aria-required={required}>
|
|
36
36
|
{label}
|
|
37
|
-
{required && <span className="ml-0.5 text-
|
|
37
|
+
{required && <span className="ml-0.5 text-destructive" aria-hidden="true">*</span>}
|
|
38
38
|
</Label>
|
|
39
|
-
{cornerHint && <span className="caption text-
|
|
39
|
+
{cornerHint && <span className="caption text-muted-foreground">{cornerHint}</span>}
|
|
40
40
|
</div>
|
|
41
41
|
{children}
|
|
42
42
|
{error ? (
|
|
43
|
-
<p id={descriptionId} role="alert" className="caption text-
|
|
43
|
+
<p id={descriptionId} role="alert" className="caption text-destructive">{error}</p>
|
|
44
44
|
) : hint ? (
|
|
45
|
-
<p id={descriptionId} className="caption text-
|
|
45
|
+
<p id={descriptionId} className="caption text-muted-foreground">{hint}</p>
|
|
46
46
|
) : null}
|
|
47
47
|
</div>
|
|
48
48
|
);
|
|
@@ -58,18 +58,18 @@ function GridListCard({
|
|
|
58
58
|
const inner = (
|
|
59
59
|
<div
|
|
60
60
|
className={cn(
|
|
61
|
-
"flex h-full flex-col gap-1 rounded-xl border border-
|
|
61
|
+
"flex h-full flex-col gap-1 rounded-xl border border-border bg-card p-4 shadow-natural transition-shadow",
|
|
62
62
|
href && "hover:shadow-elevated",
|
|
63
63
|
className,
|
|
64
64
|
)}
|
|
65
65
|
>
|
|
66
66
|
{accent && <div className="mb-2">{accent}</div>}
|
|
67
|
-
<p className="body font-semibold text-
|
|
68
|
-
{description && <p className="caption text-
|
|
67
|
+
<p className="body font-semibold text-foreground">{title}</p>
|
|
68
|
+
{description && <p className="caption text-muted-foreground">{description}</p>}
|
|
69
69
|
{(meta || trailing) && (
|
|
70
70
|
<div className="mt-auto flex items-center justify-between pt-3">
|
|
71
|
-
{meta && <span className="caption text-
|
|
72
|
-
{trailing && <span className="caption text-
|
|
71
|
+
{meta && <span className="caption text-muted-foreground">{meta}</span>}
|
|
72
|
+
{trailing && <span className="caption text-muted-foreground">{trailing}</span>}
|
|
73
73
|
</div>
|
|
74
74
|
)}
|
|
75
75
|
</div>
|
|
@@ -80,7 +80,7 @@ function GridListCard({
|
|
|
80
80
|
{href ? (
|
|
81
81
|
<a
|
|
82
82
|
href={href}
|
|
83
|
-
className="block h-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-
|
|
83
|
+
className="block h-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30 rounded-xl"
|
|
84
84
|
>
|
|
85
85
|
{inner}
|
|
86
86
|
</a>
|
|
@@ -109,7 +109,7 @@ function GridListAccentCard({
|
|
|
109
109
|
title,
|
|
110
110
|
meta,
|
|
111
111
|
href,
|
|
112
|
-
accentClass = "bg-
|
|
112
|
+
accentClass = "bg-foreground",
|
|
113
113
|
initials,
|
|
114
114
|
trailing,
|
|
115
115
|
className,
|
|
@@ -117,23 +117,23 @@ function GridListAccentCard({
|
|
|
117
117
|
const inner = (
|
|
118
118
|
<div
|
|
119
119
|
className={cn(
|
|
120
|
-
"flex overflow-hidden rounded-xl border border-
|
|
120
|
+
"flex overflow-hidden rounded-xl border border-border bg-card shadow-natural transition-shadow",
|
|
121
121
|
href && "hover:shadow-elevated",
|
|
122
122
|
className,
|
|
123
123
|
)}
|
|
124
124
|
>
|
|
125
125
|
<div
|
|
126
126
|
className={cn(
|
|
127
|
-
"flex w-14 shrink-0 items-center justify-center body font-semibold text-
|
|
127
|
+
"flex w-14 shrink-0 items-center justify-center body font-semibold text-background",
|
|
128
128
|
accentClass,
|
|
129
129
|
)}
|
|
130
130
|
>
|
|
131
131
|
{initials}
|
|
132
132
|
</div>
|
|
133
|
-
<div className="flex flex-1 items-center justify-between truncate border-l border-
|
|
133
|
+
<div className="flex flex-1 items-center justify-between truncate border-l border-border px-4 py-3">
|
|
134
134
|
<div className="min-w-0">
|
|
135
|
-
<p className="body font-semibold text-
|
|
136
|
-
{meta && <p className="caption text-
|
|
135
|
+
<p className="body font-semibold text-foreground truncate">{title}</p>
|
|
136
|
+
{meta && <p className="caption text-muted-foreground">{meta}</p>}
|
|
137
137
|
</div>
|
|
138
138
|
{trailing && <div className="shrink-0 pl-2">{trailing}</div>}
|
|
139
139
|
</div>
|
|
@@ -145,7 +145,7 @@ function GridListAccentCard({
|
|
|
145
145
|
{href ? (
|
|
146
146
|
<a
|
|
147
147
|
href={href}
|
|
148
|
-
className="block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-
|
|
148
|
+
className="block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30 rounded-xl"
|
|
149
149
|
>
|
|
150
150
|
{inner}
|
|
151
151
|
</a>
|
|
@@ -156,4 +156,8 @@ function GridListAccentCard({
|
|
|
156
156
|
);
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
+
GridList.displayName = "GridList";
|
|
160
|
+
GridListCard.displayName = "GridListCard";
|
|
161
|
+
GridListAccentCard.displayName = "GridListAccentCard";
|
|
162
|
+
|
|
159
163
|
export { GridList, GridListCard, GridListAccentCard };
|
|
@@ -17,7 +17,7 @@ const HoverCardContent = React.forwardRef<
|
|
|
17
17
|
align={align}
|
|
18
18
|
sideOffset={sideOffset}
|
|
19
19
|
className={cn(
|
|
20
|
-
"z-50 w-64 rounded-xl border border-
|
|
20
|
+
"z-50 w-64 rounded-xl border border-border bg-card p-4 shadow-elevated outline-none",
|
|
21
21
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
22
22
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
23
23
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -34,11 +34,11 @@ const InputGroup = React.forwardRef<HTMLInputElement, InputGroupProps>(
|
|
|
34
34
|
const hasTrailing = trailingAddon || trailingIcon || trailingButton || error;
|
|
35
35
|
|
|
36
36
|
const baseInput = cn(
|
|
37
|
-
"flex h-9 w-full border bg-
|
|
37
|
+
"flex h-9 w-full border bg-card body text-foreground placeholder:text-muted-foreground",
|
|
38
38
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:disabled:cursor-not-allowed disabled:opacity-50",
|
|
39
39
|
error
|
|
40
|
-
? "border-
|
|
41
|
-
: "border-
|
|
40
|
+
? "border-destructive focus-visible:ring-destructive/20 focus-visible:border-destructive"
|
|
41
|
+
: "border-border focus-visible:ring-brand-primary/20 focus-visible:border-brand-primary",
|
|
42
42
|
);
|
|
43
43
|
|
|
44
44
|
if (!hasLeading && !hasTrailing) {
|
|
@@ -51,8 +51,8 @@ const InputGroup = React.forwardRef<HTMLInputElement, InputGroupProps>(
|
|
|
51
51
|
{leadingAddon && (
|
|
52
52
|
<span
|
|
53
53
|
className={cn(
|
|
54
|
-
"inline-flex items-center border border-r-0 bg-
|
|
55
|
-
error ? "border-
|
|
54
|
+
"inline-flex items-center border border-r-0 bg-muted px-3 body text-muted-foreground select-none",
|
|
55
|
+
error ? "border-destructive" : "border-border",
|
|
56
56
|
pill ? "rounded-l-full" : "rounded-l-lg",
|
|
57
57
|
)}
|
|
58
58
|
>
|
|
@@ -63,7 +63,7 @@ const InputGroup = React.forwardRef<HTMLInputElement, InputGroupProps>(
|
|
|
63
63
|
{/* Relative wrapper for icon-only inputs */}
|
|
64
64
|
<div className="relative flex-1">
|
|
65
65
|
{leadingIcon && (
|
|
66
|
-
<div className="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3 text-
|
|
66
|
+
<div className="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3 text-muted-foreground">
|
|
67
67
|
{leadingIcon}
|
|
68
68
|
</div>
|
|
69
69
|
)}
|
|
@@ -102,9 +102,9 @@ const InputGroup = React.forwardRef<HTMLInputElement, InputGroupProps>(
|
|
|
102
102
|
{(trailingIcon || error) && (
|
|
103
103
|
<div className="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3">
|
|
104
104
|
{error ? (
|
|
105
|
-
<AlertCircle size={15} className="text-
|
|
105
|
+
<AlertCircle size={15} className="text-destructive" />
|
|
106
106
|
) : (
|
|
107
|
-
<span className="text-
|
|
107
|
+
<span className="text-muted-foreground">{trailingIcon}</span>
|
|
108
108
|
)}
|
|
109
109
|
</div>
|
|
110
110
|
)}
|
|
@@ -114,8 +114,8 @@ const InputGroup = React.forwardRef<HTMLInputElement, InputGroupProps>(
|
|
|
114
114
|
{trailingAddon && (
|
|
115
115
|
<span
|
|
116
116
|
className={cn(
|
|
117
|
-
"inline-flex items-center border border-l-0 bg-
|
|
118
|
-
error ? "border-
|
|
117
|
+
"inline-flex items-center border border-l-0 bg-muted px-3 body text-muted-foreground select-none",
|
|
118
|
+
error ? "border-destructive" : "border-border",
|
|
119
119
|
pill ? "rounded-r-full" : "rounded-r-lg",
|
|
120
120
|
)}
|
|
121
121
|
>
|
|
@@ -81,7 +81,7 @@ const InputNumber = React.forwardRef<HTMLInputElement, InputNumberProps>(
|
|
|
81
81
|
return (
|
|
82
82
|
<div
|
|
83
83
|
className={cn(
|
|
84
|
-
"inline-flex h-8 items-stretch rounded-md border border-
|
|
84
|
+
"inline-flex h-8 items-stretch rounded-md border border-border bg-card overflow-hidden",
|
|
85
85
|
"focus-within:ring-2 focus-within:ring-brand-primary/20 focus-within:border-brand-primary",
|
|
86
86
|
disabled && "opacity-50 pointer-events-none",
|
|
87
87
|
className,
|
|
@@ -97,34 +97,34 @@ const InputNumber = React.forwardRef<HTMLInputElement, InputNumberProps>(
|
|
|
97
97
|
onBlur={(e) => commit(e.target.value)}
|
|
98
98
|
onKeyDown={onKeyDown}
|
|
99
99
|
disabled={disabled}
|
|
100
|
-
className="w-full caption text-
|
|
100
|
+
className="w-full caption text-foreground px-2 bg-transparent focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none text-right"
|
|
101
101
|
{...rest}
|
|
102
102
|
/>
|
|
103
103
|
{unit && (
|
|
104
|
-
<span aria-hidden className="caption-xs text-
|
|
104
|
+
<span aria-hidden className="caption-xs text-muted-foreground self-center pr-1.5 select-none">
|
|
105
105
|
{unit}
|
|
106
106
|
</span>
|
|
107
107
|
)}
|
|
108
108
|
{!hideSteppers && (
|
|
109
|
-
<div className="flex flex-col border-l border-
|
|
109
|
+
<div className="flex flex-col border-l border-border">
|
|
110
110
|
<button
|
|
111
111
|
type="button"
|
|
112
112
|
tabIndex={-1}
|
|
113
113
|
onClick={() => bump(step)}
|
|
114
114
|
aria-label="Increment"
|
|
115
|
-
className="flex-1 px-1 hover:bg-
|
|
115
|
+
className="flex-1 px-1 hover:bg-muted active:bg-muted transition-colors text-muted-foreground"
|
|
116
116
|
>
|
|
117
117
|
<svg viewBox="0 0 8 5" width="8" height="5" fill="currentColor">
|
|
118
118
|
<path d="M0 5 L4 0 L8 5 Z" />
|
|
119
119
|
</svg>
|
|
120
120
|
</button>
|
|
121
|
-
<div className="border-t border-
|
|
121
|
+
<div className="border-t border-border" />
|
|
122
122
|
<button
|
|
123
123
|
type="button"
|
|
124
124
|
tabIndex={-1}
|
|
125
125
|
onClick={() => bump(-step)}
|
|
126
126
|
aria-label="Decrement"
|
|
127
|
-
className="flex-1 px-1 hover:bg-
|
|
127
|
+
className="flex-1 px-1 hover:bg-muted active:bg-muted transition-colors text-muted-foreground"
|
|
128
128
|
>
|
|
129
129
|
<svg viewBox="0 0 8 5" width="8" height="5" fill="currentColor">
|
|
130
130
|
<path d="M0 0 L4 5 L8 0 Z" />
|
|
@@ -37,7 +37,7 @@ const InputOTPSlot = React.forwardRef<
|
|
|
37
37
|
ref={ref}
|
|
38
38
|
className={cn(
|
|
39
39
|
"relative flex h-12 w-11 items-center justify-center",
|
|
40
|
-
"border-y border-r border-
|
|
40
|
+
"border-y border-r border-border body font-medium text-foreground",
|
|
41
41
|
"first:rounded-l-xl first:border-l last:rounded-r-xl",
|
|
42
42
|
"transition-all",
|
|
43
43
|
isActive && "z-10 ring-2 ring-brand-primary/40 border-brand-primary",
|
|
@@ -48,7 +48,7 @@ const InputOTPSlot = React.forwardRef<
|
|
|
48
48
|
{char}
|
|
49
49
|
{hasFakeCaret && (
|
|
50
50
|
<div className="pointer-events-none absolute inset-0 flex items-center justify-center">
|
|
51
|
-
<div className="h-5 w-px animate-caret-blink bg-
|
|
51
|
+
<div className="h-5 w-px animate-caret-blink bg-foreground duration-1000" />
|
|
52
52
|
</div>
|
|
53
53
|
)}
|
|
54
54
|
</div>
|
|
@@ -59,7 +59,7 @@ InputOTPSlot.displayName = "InputOTPSlot";
|
|
|
59
59
|
const InputOTPSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
60
60
|
({ ...props }, ref) => (
|
|
61
61
|
<div ref={ref} role="separator" {...props}>
|
|
62
|
-
<Minus size={14} className="text-
|
|
62
|
+
<Minus size={14} className="text-muted-foreground" />
|
|
63
63
|
</div>
|
|
64
64
|
),
|
|
65
65
|
);
|
package/src/components/input.tsx
CHANGED
|
@@ -7,12 +7,12 @@ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
|
|
|
7
7
|
type={type}
|
|
8
8
|
data-slot="input"
|
|
9
9
|
className={cn(
|
|
10
|
-
"flex h-9 w-full rounded-md border border-
|
|
11
|
-
"body text-
|
|
10
|
+
"flex h-9 w-full rounded-md border border-border bg-card px-3 py-1",
|
|
11
|
+
"body text-foreground placeholder:text-muted-foreground",
|
|
12
12
|
"transition-colors duration-150",
|
|
13
13
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/20 focus-visible:border-brand-primary",
|
|
14
|
-
"disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-
|
|
15
|
-
"file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-
|
|
14
|
+
"disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-muted",
|
|
15
|
+
"file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground",
|
|
16
16
|
className,
|
|
17
17
|
)}
|
|
18
18
|
{...props}
|
package/src/components/kbd.tsx
CHANGED
|
@@ -6,7 +6,7 @@ const Kbd = React.forwardRef<HTMLElement, React.ComponentProps<"kbd">>(
|
|
|
6
6
|
<kbd
|
|
7
7
|
ref={ref}
|
|
8
8
|
className={cn(
|
|
9
|
-
"inline-flex h-5 min-w-5 items-center justify-center rounded border border-
|
|
9
|
+
"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono caption-xs font-medium text-muted-foreground",
|
|
10
10
|
className,
|
|
11
11
|
)}
|
|
12
12
|
{...props}
|
package/src/components/label.tsx
CHANGED
|
@@ -11,7 +11,7 @@ const Label = React.forwardRef<
|
|
|
11
11
|
<LabelPrimitive.Root
|
|
12
12
|
ref={ref}
|
|
13
13
|
className={cn(
|
|
14
|
-
"body font-medium leading-none text-
|
|
14
|
+
"body font-medium leading-none text-muted-foreground",
|
|
15
15
|
"peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
16
16
|
className,
|
|
17
17
|
)}
|