@hilum/ui 0.1.1 → 0.1.3
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 +23 -4
- package/dist/chunk-J2QQDUF4.js +204 -0
- package/dist/chunk-J2QQDUF4.js.map +1 -0
- package/dist/create-theme.d.ts +27 -0
- package/dist/create-theme.js +172 -0
- package/dist/create-theme.js.map +1 -0
- package/dist/index.d.ts +21 -8
- package/dist/index.js +393 -381
- package/dist/index.js.map +1 -1
- package/dist/tokens.css +59 -50
- package/dist/tokens.d.ts +46 -38
- package/dist/tokens.js +1 -191
- package/dist/tokens.js.map +1 -1
- package/llms.txt +1514 -0
- package/package.json +11 -7
- package/src/components/accordion.tsx +5 -5
- package/src/components/action-panel.tsx +6 -6
- package/src/components/activity-feed.tsx +4 -4
- package/src/components/alert-dialog.tsx +3 -3
- package/src/components/alert.tsx +4 -4
- package/src/components/avatar-stack.tsx +2 -2
- package/src/components/avatar.tsx +2 -2
- package/src/components/badge.tsx +6 -5
- package/src/components/breadcrumb.tsx +5 -5
- package/src/components/button-group.tsx +4 -4
- package/src/components/button.tsx +6 -5
- package/src/components/calendar.tsx +7 -7
- package/src/components/card-heading.tsx +3 -3
- package/src/components/card.tsx +3 -3
- package/src/components/chart.tsx +11 -11
- package/src/components/checkbox.tsx +1 -1
- package/src/components/color-input.tsx +7 -7
- package/src/components/color-picker.tsx +5 -5
- package/src/components/combobox.tsx +10 -10
- package/src/components/command-palette.tsx +11 -11
- package/src/components/command.tsx +13 -13
- package/src/components/context-menu.tsx +15 -16
- package/src/components/data-table.tsx +6 -6
- package/src/components/date-picker.tsx +9 -4
- package/src/components/description-list.tsx +8 -8
- package/src/components/dialog.tsx +3 -3
- package/src/components/drawer.tsx +5 -5
- package/src/components/dropdown-menu.tsx +15 -16
- package/src/components/empty-state.tsx +3 -3
- package/src/components/field.tsx +13 -6
- package/src/components/grid-list.tsx +12 -12
- package/src/components/hover-card.tsx +1 -1
- package/src/components/input-group.tsx +8 -8
- package/src/components/input-number.tsx +7 -7
- package/src/components/input-otp.tsx +3 -3
- package/src/components/input.tsx +5 -4
- package/src/components/kbd.tsx +1 -1
- package/src/components/label.tsx +1 -1
- package/src/components/menubar.tsx +21 -22
- package/src/components/native-select.tsx +4 -4
- package/src/components/navigation-menu.tsx +10 -10
- package/src/components/notification.tsx +10 -10
- package/src/components/page-heading.tsx +8 -8
- package/src/components/pagination.tsx +1 -1
- package/src/components/progress.tsx +1 -1
- package/src/components/property-row.tsx +1 -1
- package/src/components/radio-card.tsx +6 -6
- package/src/components/radio-group.tsx +3 -3
- 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 +11 -11
- package/src/components/separator.tsx +1 -1
- package/src/components/sheet.tsx +3 -3
- package/src/components/sidebar.tsx +19 -19
- package/src/components/skeleton.tsx +1 -1
- package/src/components/slider.tsx +1 -1
- package/src/components/sonner.tsx +5 -5
- package/src/components/stacked-list.tsx +4 -4
- package/src/components/stat-card.tsx +6 -6
- package/src/components/steps.tsx +13 -12
- package/src/components/switch.tsx +1 -1
- 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 +8 -8
- package/src/components/tooltip.tsx +1 -1
- package/src/index.ts +3 -2
- package/src/tokens/tokens.ts +54 -40
- package/src/components/__tests__/data.test.tsx +0 -180
- package/src/components/__tests__/disclosure.test.tsx +0 -198
- package/src/components/__tests__/display.test.tsx +0 -262
- package/src/components/__tests__/feedback.test.tsx +0 -138
- package/src/components/__tests__/form.test.tsx +0 -297
- package/src/components/__tests__/layout.test.tsx +0 -388
- package/src/components/__tests__/overlay.test.tsx +0 -90
- package/src/components/__tests__/primitives.test.tsx +0 -248
|
@@ -77,7 +77,7 @@ function Combobox({
|
|
|
77
77
|
{/* Trigger */}
|
|
78
78
|
<div className="relative flex items-center">
|
|
79
79
|
{selectedOption?.avatar && !open && (
|
|
80
|
-
<div className="pointer-events-none absolute left-2.5 flex size-5 items-center justify-center rounded-full bg-
|
|
80
|
+
<div className="pointer-events-none absolute left-2.5 flex size-5 items-center justify-center rounded-full bg-ground-200 caption-xs font-semibold text-ground-700 shrink-0">
|
|
81
81
|
{selectedOption.avatar}
|
|
82
82
|
</div>
|
|
83
83
|
)}
|
|
@@ -93,9 +93,9 @@ function Combobox({
|
|
|
93
93
|
role="combobox"
|
|
94
94
|
aria-expanded={open}
|
|
95
95
|
className={cn(
|
|
96
|
-
"flex h-9 w-full rounded-lg border border-
|
|
97
|
-
"placeholder:text-
|
|
98
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-
|
|
96
|
+
"flex h-9 w-full rounded-lg border border-ground-200 bg-white pr-8 body text-ground-900",
|
|
97
|
+
"placeholder:text-ground-400",
|
|
98
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ground-400/30 focus-visible:border-ground-400",
|
|
99
99
|
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
100
100
|
selectedOption?.avatar && !open
|
|
101
101
|
? "pl-8"
|
|
@@ -117,7 +117,7 @@ function Combobox({
|
|
|
117
117
|
<button
|
|
118
118
|
type="button"
|
|
119
119
|
tabIndex={-1}
|
|
120
|
-
className="absolute inset-y-0 right-0 flex items-center px-2 text-
|
|
120
|
+
className="absolute inset-y-0 right-0 flex items-center px-2 text-ground-400 hover:text-ground-700 transition-colors"
|
|
121
121
|
onClick={() => {
|
|
122
122
|
if (open) {
|
|
123
123
|
setOpen(false);
|
|
@@ -134,10 +134,10 @@ function Combobox({
|
|
|
134
134
|
|
|
135
135
|
{/* Dropdown */}
|
|
136
136
|
{open && (
|
|
137
|
-
<div className="absolute z-50 mt-1 w-full overflow-hidden rounded-lg border border-
|
|
137
|
+
<div className="absolute z-50 mt-1 w-full overflow-hidden rounded-lg border border-ground-200 bg-white shadow-elevated">
|
|
138
138
|
<ul role="listbox" className="max-h-60 overflow-auto py-1">
|
|
139
139
|
{filtered.length === 0 ? (
|
|
140
|
-
<li className="px-3 py-2 body text-
|
|
140
|
+
<li className="px-3 py-2 body text-ground-400">{emptyText}</li>
|
|
141
141
|
) : (
|
|
142
142
|
filtered.map((option) => {
|
|
143
143
|
const isSelected = option.value === value;
|
|
@@ -150,7 +150,7 @@ function Combobox({
|
|
|
150
150
|
"flex cursor-pointer select-none items-center gap-2.5 px-3 py-2 body transition-colors",
|
|
151
151
|
isSelected
|
|
152
152
|
? "bg-brand-primary text-white"
|
|
153
|
-
: "text-
|
|
153
|
+
: "text-ground-900 hover:bg-ground-50",
|
|
154
154
|
)}
|
|
155
155
|
onMouseDown={(e) => e.preventDefault()}
|
|
156
156
|
onClick={() => {
|
|
@@ -164,7 +164,7 @@ function Combobox({
|
|
|
164
164
|
<div
|
|
165
165
|
className={cn(
|
|
166
166
|
"flex size-6 shrink-0 items-center justify-center rounded-full caption-xs font-semibold",
|
|
167
|
-
isSelected ? "bg-white/20 text-white" : "bg-
|
|
167
|
+
isSelected ? "bg-white/20 text-white" : "bg-ground-200 text-ground-700",
|
|
168
168
|
)}
|
|
169
169
|
>
|
|
170
170
|
{option.avatar}
|
|
@@ -185,7 +185,7 @@ function Combobox({
|
|
|
185
185
|
<p
|
|
186
186
|
className={cn(
|
|
187
187
|
"caption truncate",
|
|
188
|
-
isSelected ? "text-white/70" : "text-
|
|
188
|
+
isSelected ? "text-white/70" : "text-ground-400",
|
|
189
189
|
)}
|
|
190
190
|
>
|
|
191
191
|
{option.description}
|
|
@@ -73,12 +73,12 @@ function CommandPalette({
|
|
|
73
73
|
<Dialog open={open} onOpenChange={(v) => !v && onClose()}>
|
|
74
74
|
<DialogContent className="gap-0 overflow-hidden p-0 sm:max-w-xl">
|
|
75
75
|
{/* Search input */}
|
|
76
|
-
<div className="flex items-center gap-3 border-b border-
|
|
77
|
-
<Search size={16} className="shrink-0 text-
|
|
76
|
+
<div className="flex items-center gap-3 border-b border-ground-100 px-4">
|
|
77
|
+
<Search size={16} className="shrink-0 text-ground-400" />
|
|
78
78
|
<input
|
|
79
79
|
ref={inputRef}
|
|
80
80
|
type="text"
|
|
81
|
-
className="h-12 flex-1 bg-transparent body text-
|
|
81
|
+
className="h-12 flex-1 bg-transparent body text-ground-900 placeholder:text-ground-400 focus:outline-none"
|
|
82
82
|
placeholder={placeholder}
|
|
83
83
|
value={query}
|
|
84
84
|
onChange={(e) => setQuery(e.target.value)}
|
|
@@ -88,7 +88,7 @@ function CommandPalette({
|
|
|
88
88
|
}}
|
|
89
89
|
/>
|
|
90
90
|
<kbd className="hidden items-center gap-0.5 sm:flex">
|
|
91
|
-
<span className="caption-xs font-medium text-
|
|
91
|
+
<span className="caption-xs font-medium text-ground-400 rounded border border-ground-200 px-1.5 py-0.5">
|
|
92
92
|
esc
|
|
93
93
|
</span>
|
|
94
94
|
</kbd>
|
|
@@ -97,31 +97,31 @@ function CommandPalette({
|
|
|
97
97
|
{/* Results */}
|
|
98
98
|
<div className="max-h-80 overflow-y-auto">
|
|
99
99
|
{filtered.length === 0 ? (
|
|
100
|
-
<p className="px-4 py-8 text-center body text-
|
|
100
|
+
<p className="px-4 py-8 text-center body text-ground-400">{emptyText}</p>
|
|
101
101
|
) : (
|
|
102
102
|
<ul role="list" className="py-2">
|
|
103
103
|
{categories.map((cat) => (
|
|
104
104
|
<li key={cat}>
|
|
105
|
-
{cat && <p className="label px-4 py-2 text-
|
|
105
|
+
{cat && <p className="label px-4 py-2 text-ground-400">{cat}</p>}
|
|
106
106
|
{grouped[cat].map((item, i) => (
|
|
107
107
|
<button
|
|
108
108
|
key={item.id ?? i}
|
|
109
109
|
type="button"
|
|
110
|
-
className="flex w-full items-center gap-3 px-4 py-2.5 body text-left transition-colors hover:bg-
|
|
110
|
+
className="flex w-full items-center gap-3 px-4 py-2.5 body text-left transition-colors hover:bg-ground-50 focus-visible:bg-ground-50 focus-visible:outline-none"
|
|
111
111
|
onClick={() => handleSelect(item)}
|
|
112
112
|
>
|
|
113
113
|
{item.icon && (
|
|
114
|
-
<span className="flex size-8 shrink-0 items-center justify-center rounded-lg border border-
|
|
114
|
+
<span className="flex size-8 shrink-0 items-center justify-center rounded-lg border border-ground-200 bg-white text-ground-500">
|
|
115
115
|
{item.icon}
|
|
116
116
|
</span>
|
|
117
117
|
)}
|
|
118
118
|
<div className="min-w-0 flex-1">
|
|
119
|
-
<p className="font-medium text-
|
|
119
|
+
<p className="font-medium text-ground-900 truncate">{item.label}</p>
|
|
120
120
|
{item.description && (
|
|
121
|
-
<p className="caption text-
|
|
121
|
+
<p className="caption text-ground-400 truncate">{item.description}</p>
|
|
122
122
|
)}
|
|
123
123
|
</div>
|
|
124
|
-
<ArrowRight size={13} className="shrink-0 text-
|
|
124
|
+
<ArrowRight size={13} className="shrink-0 text-ground-300" />
|
|
125
125
|
</button>
|
|
126
126
|
))}
|
|
127
127
|
</li>
|
|
@@ -40,11 +40,11 @@ function Command({ className, children, onSelect, ...props }: CommandProps) {
|
|
|
40
40
|
}, []);
|
|
41
41
|
|
|
42
42
|
return (
|
|
43
|
-
<CommandCtx.Provider value={{ query, setQuery, onSelect, reportVisible }}>
|
|
43
|
+
<CommandCtx.Provider value={{ query, setQuery, ...(onSelect !== undefined && { onSelect }), reportVisible }}>
|
|
44
44
|
<CommandVisibleCtx.Provider value={visibleCount}>
|
|
45
45
|
<div
|
|
46
46
|
className={cn(
|
|
47
|
-
"flex flex-col overflow-hidden rounded-xl border border-
|
|
47
|
+
"flex flex-col overflow-hidden rounded-xl border border-ground-200 bg-white",
|
|
48
48
|
className,
|
|
49
49
|
)}
|
|
50
50
|
{...props}
|
|
@@ -62,8 +62,8 @@ const CommandInput = React.forwardRef<
|
|
|
62
62
|
>(({ className, ...props }, ref) => {
|
|
63
63
|
const { query, setQuery } = React.useContext(CommandCtx);
|
|
64
64
|
return (
|
|
65
|
-
<div className="flex items-center gap-2 border-b border-
|
|
66
|
-
<Search size={14} className="shrink-0 text-
|
|
65
|
+
<div className="flex items-center gap-2 border-b border-ground-100 px-3">
|
|
66
|
+
<Search size={14} className="shrink-0 text-ground-400" />
|
|
67
67
|
<input
|
|
68
68
|
ref={ref}
|
|
69
69
|
type="text"
|
|
@@ -71,8 +71,8 @@ const CommandInput = React.forwardRef<
|
|
|
71
71
|
autoCorrect="off"
|
|
72
72
|
spellCheck={false}
|
|
73
73
|
className={cn(
|
|
74
|
-
"flex h-10 w-full bg-transparent body text-
|
|
75
|
-
"placeholder:text-
|
|
74
|
+
"flex h-10 w-full bg-transparent body text-ground-900",
|
|
75
|
+
"placeholder:text-ground-400 focus:outline-none",
|
|
76
76
|
className,
|
|
77
77
|
)}
|
|
78
78
|
value={query}
|
|
@@ -135,7 +135,7 @@ const CommandEmpty = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLD
|
|
|
135
135
|
return (
|
|
136
136
|
<div
|
|
137
137
|
ref={ref}
|
|
138
|
-
className={cn("py-6 text-center caption text-
|
|
138
|
+
className={cn("py-6 text-center caption text-ground-400", className)}
|
|
139
139
|
{...props}
|
|
140
140
|
>
|
|
141
141
|
{children}
|
|
@@ -152,7 +152,7 @@ interface CommandGroupProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
152
152
|
const CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(
|
|
153
153
|
({ className, heading, children, ...props }, ref) => (
|
|
154
154
|
<div ref={ref} role="group" className={cn("py-1", className)} {...props}>
|
|
155
|
-
{heading && <p className="px-3 pb-1 pt-0.5 label text-
|
|
155
|
+
{heading && <p className="px-3 pb-1 pt-0.5 label text-ground-400">{heading}</p>}
|
|
156
156
|
{children}
|
|
157
157
|
</div>
|
|
158
158
|
),
|
|
@@ -197,9 +197,9 @@ const CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(
|
|
|
197
197
|
tabIndex={disabled ? undefined : 0}
|
|
198
198
|
className={cn(
|
|
199
199
|
"relative flex cursor-default select-none items-center gap-2 rounded-md px-2.5 py-1.5 mx-1",
|
|
200
|
-
"body text-
|
|
201
|
-
"hover:bg-
|
|
202
|
-
"focus:bg-
|
|
200
|
+
"body text-ground-700 outline-none transition-colors",
|
|
201
|
+
"hover:bg-ground-50 hover:text-ground-900",
|
|
202
|
+
"focus:bg-ground-50 focus:text-ground-900",
|
|
203
203
|
disabled && "pointer-events-none opacity-40",
|
|
204
204
|
className,
|
|
205
205
|
)}
|
|
@@ -221,7 +221,7 @@ CommandItem.displayName = "CommandItem";
|
|
|
221
221
|
|
|
222
222
|
const CommandSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
223
223
|
({ className, ...props }, ref) => (
|
|
224
|
-
<div ref={ref} className={cn("my-1 h-px bg-
|
|
224
|
+
<div ref={ref} className={cn("my-1 h-px bg-ground-100", className)} {...props} />
|
|
225
225
|
),
|
|
226
226
|
);
|
|
227
227
|
CommandSeparator.displayName = "CommandSeparator";
|
|
@@ -229,7 +229,7 @@ CommandSeparator.displayName = "CommandSeparator";
|
|
|
229
229
|
function CommandShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {
|
|
230
230
|
return (
|
|
231
231
|
<span
|
|
232
|
-
className={cn("ml-auto caption text-
|
|
232
|
+
className={cn("ml-auto caption text-ground-300 tracking-widest font-medium", className)}
|
|
233
233
|
{...props}
|
|
234
234
|
/>
|
|
235
235
|
);
|
|
@@ -48,7 +48,7 @@ const ContextMenuItem = React.forwardRef<
|
|
|
48
48
|
"body outline-none transition-colors",
|
|
49
49
|
destructive
|
|
50
50
|
? "text-red-600 focus:bg-red-50 focus:text-red-700"
|
|
51
|
-
: "text-
|
|
51
|
+
: "text-ground-700 focus:bg-ground-50 focus:text-ground-900",
|
|
52
52
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
53
53
|
inset && "pl-8",
|
|
54
54
|
className,
|
|
@@ -61,22 +61,21 @@ ContextMenuItem.displayName = "ContextMenuItem";
|
|
|
61
61
|
const ContextMenuCheckboxItem = React.forwardRef<
|
|
62
62
|
React.ComponentRef<typeof ContextMenu.CheckboxItem>,
|
|
63
63
|
React.ComponentPropsWithoutRef<typeof ContextMenu.CheckboxItem>
|
|
64
|
-
>(({ className, children,
|
|
64
|
+
>(({ className, children, ...props }, ref) => (
|
|
65
65
|
<ContextMenu.CheckboxItem
|
|
66
66
|
ref={ref}
|
|
67
67
|
className={cn(
|
|
68
68
|
"relative flex cursor-default select-none items-center gap-2 rounded-md pl-8 pr-2.5 py-1.5",
|
|
69
|
-
"body text-
|
|
70
|
-
"focus:bg-
|
|
69
|
+
"body text-ground-700 outline-none transition-colors",
|
|
70
|
+
"focus:bg-ground-50 focus:text-ground-900",
|
|
71
71
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
72
72
|
className,
|
|
73
73
|
)}
|
|
74
|
-
checked={checked}
|
|
75
74
|
{...props}
|
|
76
75
|
>
|
|
77
76
|
<span className="absolute left-2 flex size-3.5 items-center justify-center">
|
|
78
77
|
<ContextMenu.ItemIndicator>
|
|
79
|
-
<Check size={13} className="text-
|
|
78
|
+
<Check size={13} className="text-ground-900" />
|
|
80
79
|
</ContextMenu.ItemIndicator>
|
|
81
80
|
</span>
|
|
82
81
|
{children}
|
|
@@ -92,8 +91,8 @@ const ContextMenuRadioItem = React.forwardRef<
|
|
|
92
91
|
ref={ref}
|
|
93
92
|
className={cn(
|
|
94
93
|
"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-
|
|
94
|
+
"body text-ground-700 outline-none transition-colors",
|
|
95
|
+
"focus:bg-ground-50 focus:text-ground-900",
|
|
97
96
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
98
97
|
className,
|
|
99
98
|
)}
|
|
@@ -101,7 +100,7 @@ const ContextMenuRadioItem = React.forwardRef<
|
|
|
101
100
|
>
|
|
102
101
|
<span className="absolute left-2 flex size-3.5 items-center justify-center">
|
|
103
102
|
<ContextMenu.ItemIndicator>
|
|
104
|
-
<Circle size={8} className="fill-
|
|
103
|
+
<Circle size={8} className="fill-ground-900 text-ground-900" />
|
|
105
104
|
</ContextMenu.ItemIndicator>
|
|
106
105
|
</span>
|
|
107
106
|
{children}
|
|
@@ -117,7 +116,7 @@ const ContextMenuLabel = React.forwardRef<
|
|
|
117
116
|
>(({ className, inset, ...props }, ref) => (
|
|
118
117
|
<ContextMenu.Label
|
|
119
118
|
ref={ref}
|
|
120
|
-
className={cn("px-2.5 py-1 label text-
|
|
119
|
+
className={cn("px-2.5 py-1 label text-ground-400", inset && "pl-8", className)}
|
|
121
120
|
{...props}
|
|
122
121
|
/>
|
|
123
122
|
));
|
|
@@ -129,7 +128,7 @@ const ContextMenuSeparator = React.forwardRef<
|
|
|
129
128
|
>(({ className, ...props }, ref) => (
|
|
130
129
|
<ContextMenu.Separator
|
|
131
130
|
ref={ref}
|
|
132
|
-
className={cn("mx-1 my-1 h-px bg-
|
|
131
|
+
className={cn("mx-1 my-1 h-px bg-ground-100", className)}
|
|
133
132
|
{...props}
|
|
134
133
|
/>
|
|
135
134
|
));
|
|
@@ -145,15 +144,15 @@ const ContextMenuSubTrigger = React.forwardRef<
|
|
|
145
144
|
ref={ref}
|
|
146
145
|
className={cn(
|
|
147
146
|
"relative flex cursor-default select-none items-center gap-2 rounded-md px-2.5 py-1.5",
|
|
148
|
-
"body text-
|
|
149
|
-
"focus:bg-
|
|
147
|
+
"body text-ground-700 outline-none transition-colors",
|
|
148
|
+
"focus:bg-ground-50 focus:text-ground-900 data-[state=open]:bg-ground-50",
|
|
150
149
|
inset && "pl-8",
|
|
151
150
|
className,
|
|
152
151
|
)}
|
|
153
152
|
{...props}
|
|
154
153
|
>
|
|
155
154
|
{children}
|
|
156
|
-
<ChevronRight size={14} className="ml-auto text-
|
|
155
|
+
<ChevronRight size={14} className="ml-auto text-ground-400" />
|
|
157
156
|
</ContextMenu.SubTrigger>
|
|
158
157
|
));
|
|
159
158
|
ContextMenuSubTrigger.displayName = "ContextMenuSubTrigger";
|
|
@@ -165,7 +164,7 @@ const ContextMenuSubContent = React.forwardRef<
|
|
|
165
164
|
<ContextMenu.SubContent
|
|
166
165
|
ref={ref}
|
|
167
166
|
className={cn(
|
|
168
|
-
"z-50 min-w-[8rem] bg-white rounded-xl border border-
|
|
167
|
+
"z-50 min-w-[8rem] bg-white rounded-xl border border-ground-100 shadow-natural p-1",
|
|
169
168
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
170
169
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
171
170
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -178,7 +177,7 @@ const ContextMenuSubContent = React.forwardRef<
|
|
|
178
177
|
ContextMenuSubContent.displayName = "ContextMenuSubContent";
|
|
179
178
|
|
|
180
179
|
function ContextMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {
|
|
181
|
-
return <span className={cn("ml-auto caption text-
|
|
180
|
+
return <span className={cn("ml-auto caption text-ground-400", className)} {...props} />;
|
|
182
181
|
}
|
|
183
182
|
ContextMenuShortcut.displayName = "ContextMenuShortcut";
|
|
184
183
|
|
|
@@ -71,8 +71,8 @@ function DataTable<TData>({
|
|
|
71
71
|
{header.isPlaceholder ? null : header.column.getCanSort() ? (
|
|
72
72
|
<button
|
|
73
73
|
className={cn(
|
|
74
|
-
"flex items-center gap-1 transition-colors hover:text-
|
|
75
|
-
header.column.getIsSorted() && "text-
|
|
74
|
+
"flex items-center gap-1 transition-colors hover:text-ground-700",
|
|
75
|
+
header.column.getIsSorted() && "text-ground-900",
|
|
76
76
|
)}
|
|
77
77
|
onClick={header.column.getToggleSortingHandler()}
|
|
78
78
|
>
|
|
@@ -82,7 +82,7 @@ function DataTable<TData>({
|
|
|
82
82
|
) : header.column.getIsSorted() === "desc" ? (
|
|
83
83
|
<ChevronDown size={12} className="text-brand-primary" />
|
|
84
84
|
) : (
|
|
85
|
-
<ChevronsUpDown size={12} className="text-
|
|
85
|
+
<ChevronsUpDown size={12} className="text-ground-300" />
|
|
86
86
|
)}
|
|
87
87
|
</button>
|
|
88
88
|
) : (
|
|
@@ -106,7 +106,7 @@ function DataTable<TData>({
|
|
|
106
106
|
))
|
|
107
107
|
) : (
|
|
108
108
|
<TableRow>
|
|
109
|
-
<TableCell colSpan={columns.length} className="h-24 text-center text-
|
|
109
|
+
<TableCell colSpan={columns.length} className="h-24 text-center text-ground-400">
|
|
110
110
|
No results.
|
|
111
111
|
</TableCell>
|
|
112
112
|
</TableRow>
|
|
@@ -115,12 +115,12 @@ function DataTable<TData>({
|
|
|
115
115
|
</Table>
|
|
116
116
|
{showPagination && (
|
|
117
117
|
<div className="flex items-center justify-between">
|
|
118
|
-
<p className="caption text-
|
|
118
|
+
<p className="caption text-ground-400">
|
|
119
119
|
{table.getFilteredRowModel().rows.length} result
|
|
120
120
|
{table.getFilteredRowModel().rows.length !== 1 ? "s" : ""}
|
|
121
121
|
</p>
|
|
122
122
|
<div className="flex items-center gap-2">
|
|
123
|
-
<span className="caption text-
|
|
123
|
+
<span className="caption text-ground-400">
|
|
124
124
|
Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}
|
|
125
125
|
</span>
|
|
126
126
|
<Button
|
|
@@ -15,7 +15,7 @@ const formatDate = (date: Date) =>
|
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
interface DatePickerProps {
|
|
18
|
-
value?: Date;
|
|
18
|
+
value?: Date | undefined;
|
|
19
19
|
onChange?: (date: Date | undefined) => void;
|
|
20
20
|
placeholder?: string;
|
|
21
21
|
disabled?: boolean;
|
|
@@ -36,17 +36,22 @@ function DatePicker({
|
|
|
36
36
|
variant="outline"
|
|
37
37
|
className={cn(
|
|
38
38
|
"w-[240px] justify-start gap-2 text-left font-normal",
|
|
39
|
-
!value && "text-
|
|
39
|
+
!value && "text-ground-400",
|
|
40
40
|
className,
|
|
41
41
|
)}
|
|
42
42
|
disabled={disabled}
|
|
43
43
|
>
|
|
44
|
-
<CalendarIcon size={14} className="text-
|
|
44
|
+
<CalendarIcon size={14} className="text-ground-400 shrink-0" />
|
|
45
45
|
{value ? formatDate(value) : <span>{placeholder}</span>}
|
|
46
46
|
</Button>
|
|
47
47
|
</PopoverTrigger>
|
|
48
48
|
<PopoverContent className="w-auto p-0 shadow-elevated" align="start">
|
|
49
|
-
<Calendar
|
|
49
|
+
<Calendar
|
|
50
|
+
mode="single"
|
|
51
|
+
{...(value !== undefined && { selected: value })}
|
|
52
|
+
{...(onChange !== undefined && { onSelect: onChange })}
|
|
53
|
+
autoFocus
|
|
54
|
+
/>
|
|
50
55
|
</PopoverContent>
|
|
51
56
|
</Popover>
|
|
52
57
|
);
|
|
@@ -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-ground-900">{title}</p>}
|
|
32
|
+
{description && <p className="mt-1 caption text-ground-400">{description}</p>}
|
|
33
33
|
</div>
|
|
34
34
|
)}
|
|
35
35
|
|
|
36
|
-
<dl className={cn("border-t border-
|
|
36
|
+
<dl className={cn("border-t border-ground-100", 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-ground-100",
|
|
45
|
+
columns === 1 && i !== items.length - 1 && "border-b border-ground-100",
|
|
46
|
+
striped && i % 2 === 0 && "bg-ground-50 -mx-4 px-4 rounded",
|
|
47
47
|
)}
|
|
48
48
|
>
|
|
49
|
-
<dt className="caption font-semibold text-
|
|
49
|
+
<dt className="caption font-semibold text-ground-500 uppercase tracking-wide">
|
|
50
50
|
{item.term}
|
|
51
51
|
</dt>
|
|
52
|
-
<dd className={cn("body text-
|
|
52
|
+
<dd className={cn("body text-ground-900", 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>
|
|
@@ -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-ground-400 opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ground-900/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-ground-900", 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-ground-500", 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-ground-950/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-ground-100 bg-white",
|
|
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-ground-200" />
|
|
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-ground-900", 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-ground-500", className)}
|
|
74
74
|
{...props}
|
|
75
75
|
/>
|
|
76
76
|
));
|
|
@@ -49,7 +49,7 @@ const DropdownMenuItem = React.forwardRef<
|
|
|
49
49
|
"body outline-none transition-colors",
|
|
50
50
|
destructive
|
|
51
51
|
? "text-red-600 focus:bg-red-50 focus:text-red-700"
|
|
52
|
-
: "text-
|
|
52
|
+
: "text-ground-700 focus:bg-ground-50 focus:text-ground-900",
|
|
53
53
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
54
54
|
inset && "pl-8",
|
|
55
55
|
className,
|
|
@@ -62,22 +62,21 @@ DropdownMenuItem.displayName = "DropdownMenuItem";
|
|
|
62
62
|
const DropdownMenuCheckboxItem = React.forwardRef<
|
|
63
63
|
React.ComponentRef<typeof DropdownMenu.CheckboxItem>,
|
|
64
64
|
React.ComponentPropsWithoutRef<typeof DropdownMenu.CheckboxItem>
|
|
65
|
-
>(({ className, children,
|
|
65
|
+
>(({ className, children, ...props }, ref) => (
|
|
66
66
|
<DropdownMenu.CheckboxItem
|
|
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-ground-700 outline-none transition-colors",
|
|
71
|
+
"focus:bg-ground-50 focus:text-ground-900",
|
|
72
72
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
73
73
|
className,
|
|
74
74
|
)}
|
|
75
|
-
checked={checked}
|
|
76
75
|
{...props}
|
|
77
76
|
>
|
|
78
77
|
<span className="absolute left-2 flex size-3.5 items-center justify-center">
|
|
79
78
|
<DropdownMenu.ItemIndicator>
|
|
80
|
-
<Check size={13} className="text-
|
|
79
|
+
<Check size={13} className="text-ground-900" />
|
|
81
80
|
</DropdownMenu.ItemIndicator>
|
|
82
81
|
</span>
|
|
83
82
|
{children}
|
|
@@ -93,8 +92,8 @@ const DropdownMenuRadioItem = React.forwardRef<
|
|
|
93
92
|
ref={ref}
|
|
94
93
|
className={cn(
|
|
95
94
|
"relative flex cursor-default select-none items-center gap-2 rounded-md pl-8 pr-2.5 py-1.5",
|
|
96
|
-
"body text-
|
|
97
|
-
"focus:bg-
|
|
95
|
+
"body text-ground-700 outline-none transition-colors",
|
|
96
|
+
"focus:bg-ground-50 focus:text-ground-900",
|
|
98
97
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
99
98
|
className,
|
|
100
99
|
)}
|
|
@@ -102,7 +101,7 @@ const DropdownMenuRadioItem = React.forwardRef<
|
|
|
102
101
|
>
|
|
103
102
|
<span className="absolute left-2 flex size-3.5 items-center justify-center">
|
|
104
103
|
<DropdownMenu.ItemIndicator>
|
|
105
|
-
<Circle size={8} className="fill-
|
|
104
|
+
<Circle size={8} className="fill-ground-900 text-ground-900" />
|
|
106
105
|
</DropdownMenu.ItemIndicator>
|
|
107
106
|
</span>
|
|
108
107
|
{children}
|
|
@@ -118,7 +117,7 @@ const DropdownMenuLabel = React.forwardRef<
|
|
|
118
117
|
>(({ className, inset, ...props }, ref) => (
|
|
119
118
|
<DropdownMenu.Label
|
|
120
119
|
ref={ref}
|
|
121
|
-
className={cn("px-2.5 py-1 label text-
|
|
120
|
+
className={cn("px-2.5 py-1 label text-ground-400", inset && "pl-8", className)}
|
|
122
121
|
{...props}
|
|
123
122
|
/>
|
|
124
123
|
));
|
|
@@ -130,7 +129,7 @@ const DropdownMenuSeparator = React.forwardRef<
|
|
|
130
129
|
>(({ className, ...props }, ref) => (
|
|
131
130
|
<DropdownMenu.Separator
|
|
132
131
|
ref={ref}
|
|
133
|
-
className={cn("mx-1 my-1 h-px bg-
|
|
132
|
+
className={cn("mx-1 my-1 h-px bg-ground-100", className)}
|
|
134
133
|
{...props}
|
|
135
134
|
/>
|
|
136
135
|
));
|
|
@@ -146,15 +145,15 @@ const DropdownMenuSubTrigger = React.forwardRef<
|
|
|
146
145
|
ref={ref}
|
|
147
146
|
className={cn(
|
|
148
147
|
"relative flex cursor-default select-none items-center gap-2 rounded-md px-2.5 py-1.5",
|
|
149
|
-
"body text-
|
|
150
|
-
"focus:bg-
|
|
148
|
+
"body text-ground-700 outline-none transition-colors",
|
|
149
|
+
"focus:bg-ground-50 focus:text-ground-900 data-[state=open]:bg-ground-50",
|
|
151
150
|
inset && "pl-8",
|
|
152
151
|
className,
|
|
153
152
|
)}
|
|
154
153
|
{...props}
|
|
155
154
|
>
|
|
156
155
|
{children}
|
|
157
|
-
<ChevronRight size={14} className="ml-auto text-
|
|
156
|
+
<ChevronRight size={14} className="ml-auto text-ground-400" />
|
|
158
157
|
</DropdownMenu.SubTrigger>
|
|
159
158
|
));
|
|
160
159
|
DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
|
|
@@ -166,7 +165,7 @@ const DropdownMenuSubContent = React.forwardRef<
|
|
|
166
165
|
<DropdownMenu.SubContent
|
|
167
166
|
ref={ref}
|
|
168
167
|
className={cn(
|
|
169
|
-
"z-50 min-w-[8rem] bg-white rounded-xl border border-
|
|
168
|
+
"z-50 min-w-[8rem] bg-white rounded-xl border border-ground-100 shadow-natural p-1",
|
|
170
169
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
171
170
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
172
171
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -179,7 +178,7 @@ const DropdownMenuSubContent = React.forwardRef<
|
|
|
179
178
|
DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
|
|
180
179
|
|
|
181
180
|
function DropdownMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {
|
|
182
|
-
return <span className={cn("ml-auto caption text-
|
|
181
|
+
return <span className={cn("ml-auto caption text-ground-400", className)} {...props} />;
|
|
183
182
|
}
|
|
184
183
|
DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
|
|
185
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-ground-700">
|
|
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-ground-900">{title}</p>
|
|
27
|
+
{description && <p className="body max-w-xs text-ground-400">{description}</p>}
|
|
28
28
|
</div>
|
|
29
29
|
{action &&
|
|
30
30
|
(action.href ? (
|