@hilum/ui 2.0.0 → 2.0.2

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.
Files changed (75) hide show
  1. package/README.md +2 -2
  2. package/dist/index.d.ts +357 -295
  3. package/dist/index.js +498 -439
  4. package/dist/index.js.map +1 -1
  5. package/llms.txt +9 -9
  6. package/package.json +1 -1
  7. package/src/components/accordion.tsx +5 -5
  8. package/src/components/action-panel.tsx +8 -6
  9. package/src/components/activity-feed.tsx +7 -5
  10. package/src/components/alert-dialog.tsx +5 -5
  11. package/src/components/alert.tsx +5 -5
  12. package/src/components/avatar-stack.tsx +3 -3
  13. package/src/components/avatar.tsx +4 -4
  14. package/src/components/badge.tsx +7 -7
  15. package/src/components/breadcrumb.tsx +5 -6
  16. package/src/components/button-group.tsx +7 -4
  17. package/src/components/button.tsx +7 -7
  18. package/src/components/calendar.tsx +10 -10
  19. package/src/components/card-heading.tsx +3 -3
  20. package/src/components/card.tsx +4 -4
  21. package/src/components/chart.tsx +10 -10
  22. package/src/components/checkbox.tsx +2 -2
  23. package/src/components/color-input.tsx +7 -5
  24. package/src/components/color-picker.tsx +8 -6
  25. package/src/components/combobox.tsx +66 -31
  26. package/src/components/command-palette.tsx +13 -11
  27. package/src/components/command.tsx +14 -12
  28. package/src/components/context-menu.tsx +16 -16
  29. package/src/components/data-table.tsx +18 -7
  30. package/src/components/date-picker.tsx +2 -2
  31. package/src/components/description-list.tsx +10 -8
  32. package/src/components/dialog.tsx +4 -4
  33. package/src/components/drawer.tsx +5 -5
  34. package/src/components/dropdown-menu.tsx +16 -16
  35. package/src/components/empty-state.tsx +5 -3
  36. package/src/components/field.tsx +4 -4
  37. package/src/components/grid-list.tsx +17 -13
  38. package/src/components/hover-card.tsx +1 -1
  39. package/src/components/input-group.tsx +10 -10
  40. package/src/components/input-number.tsx +7 -7
  41. package/src/components/input-otp.tsx +3 -3
  42. package/src/components/input.tsx +4 -4
  43. package/src/components/kbd.tsx +1 -1
  44. package/src/components/label.tsx +1 -1
  45. package/src/components/media-object.tsx +2 -0
  46. package/src/components/menubar.tsx +21 -21
  47. package/src/components/native-select.tsx +5 -5
  48. package/src/components/navigation-menu.tsx +10 -10
  49. package/src/components/notification.tsx +13 -11
  50. package/src/components/page-heading.tsx +8 -8
  51. package/src/components/pagination.tsx +1 -1
  52. package/src/components/popover.tsx +1 -1
  53. package/src/components/progress.tsx +1 -1
  54. package/src/components/property-row.tsx +25 -9
  55. package/src/components/radio-card.tsx +10 -8
  56. package/src/components/radio-group.tsx +4 -4
  57. package/src/components/resizable.tsx +3 -3
  58. package/src/components/scroll-area.tsx +1 -1
  59. package/src/components/section-heading.tsx +3 -3
  60. package/src/components/select.tsx +13 -13
  61. package/src/components/separator.tsx +1 -1
  62. package/src/components/sheet.tsx +4 -4
  63. package/src/components/sidebar.tsx +20 -20
  64. package/src/components/skeleton.tsx +1 -1
  65. package/src/components/slider.tsx +2 -2
  66. package/src/components/sonner.tsx +9 -8
  67. package/src/components/stacked-list.tsx +5 -5
  68. package/src/components/stat-card.tsx +9 -7
  69. package/src/components/steps.tsx +16 -14
  70. package/src/components/switch.tsx +2 -2
  71. package/src/components/table.tsx +9 -9
  72. package/src/components/tabs.tsx +2 -2
  73. package/src/components/textarea.tsx +4 -4
  74. package/src/components/toggle.tsx +9 -9
  75. 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-ground-900">{title}</p>}
32
- {description && <p className="mt-1 caption text-ground-400">{description}</p>}
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-ground-100", columns === 2 && "sm:grid sm:grid-cols-2")}>
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-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",
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-ground-500 uppercase tracking-wide">
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-ground-900", columns === 1 ? "col-span-2" : "")}>
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-white rounded-2xl shadow-elevated p-6",
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-ground-400 opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ground-900/20">
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-ground-900", className)}
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-ground-500", className)} {...props} />
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-ground-950/40 backdrop-blur-[1px]", className)}
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-ground-100 bg-white",
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-ground-200" />
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-ground-900", className)}
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-ground-500", className)}
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-white rounded-xl shadow-natural p-1",
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-red-600 focus:bg-red-50 focus:text-red-700"
52
- : "text-ground-700 focus:bg-ground-50 focus:text-ground-900",
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-ground-700 outline-none transition-colors",
71
- "focus:bg-ground-50 focus:text-ground-900",
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-ground-900" />
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-ground-700 outline-none transition-colors",
96
- "focus:bg-ground-50 focus:text-ground-900",
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-ground-900 text-ground-900" />
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-ground-400", inset && "pl-8", className)}
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-ground-100", className)}
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-ground-700 outline-none transition-colors",
149
- "focus:bg-ground-50 focus:text-ground-900 data-[state=open]:bg-ground-50",
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-ground-400" />
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-white rounded-xl border border-ground-100 shadow-natural p-1",
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-ground-400", className)} {...props} />;
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-ground-700">
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-ground-900">{title}</p>
27
- {description && <p className="body max-w-xs text-ground-400">{description}</p>}
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 };
@@ -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-red-600" aria-hidden="true">*</span>}
37
+ {required && <span className="ml-0.5 text-destructive" aria-hidden="true">*</span>}
38
38
  </Label>
39
- {cornerHint && <span className="caption text-ground-400">{cornerHint}</span>}
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-red-600">{error}</p>
43
+ <p id={descriptionId} role="alert" className="caption text-destructive">{error}</p>
44
44
  ) : hint ? (
45
- <p id={descriptionId} className="caption text-ground-400">{hint}</p>
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-ground-100 bg-white p-4 shadow-natural transition-shadow",
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-ground-900">{title}</p>
68
- {description && <p className="caption text-ground-400">{description}</p>}
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-ground-400">{meta}</span>}
72
- {trailing && <span className="caption text-ground-400">{trailing}</span>}
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-ground-400/40 rounded-xl"
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-ground-900",
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-ground-100 bg-white shadow-natural transition-shadow",
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-white",
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-ground-100 px-4 py-3">
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-ground-900 truncate">{title}</p>
136
- {meta && <p className="caption text-ground-400">{meta}</p>}
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-ground-400/40 rounded-xl"
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-ground-100 bg-white p-4 shadow-elevated outline-none",
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-white body text-ground-900 placeholder:text-ground-400",
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-red-400 focus-visible:ring-red-200 focus-visible:border-red-500"
41
- : "border-ground-200 focus-visible:ring-brand-primary/20 focus-visible:border-brand-primary",
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-ground-50 px-3 body text-ground-500 select-none",
55
- error ? "border-red-400" : "border-ground-200",
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-ground-400">
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-red-500" />
105
+ <AlertCircle size={15} className="text-destructive" />
106
106
  ) : (
107
- <span className="text-ground-400">{trailingIcon}</span>
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-ground-50 px-3 body text-ground-500 select-none",
118
- error ? "border-red-400" : "border-ground-200",
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-ground-200 bg-white overflow-hidden",
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-ground-900 px-2 bg-transparent focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none text-right"
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-ground-400 self-center pr-1.5 select-none">
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-ground-100">
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-ground-50 active:bg-ground-100 transition-colors text-ground-500"
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-ground-100" />
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-ground-50 active:bg-ground-100 transition-colors text-ground-500"
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-ground-200 body font-medium text-ground-900",
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-ground-900 duration-1000" />
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-ground-300" />
62
+ <Minus size={14} className="text-muted-foreground" />
63
63
  </div>
64
64
  ),
65
65
  );
@@ -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-ground-200 bg-white px-3 py-1",
11
- "body text-ground-900 placeholder:text-ground-400",
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-ground-50",
15
- "file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-ground-900",
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}
@@ -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-ground-200 bg-ground-50 px-1.5 font-mono caption-xs font-medium text-ground-500",
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}
@@ -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-ground-700",
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
  )}
@@ -46,4 +46,6 @@ function MediaObject({
46
46
  );
47
47
  }
48
48
 
49
+ MediaObject.displayName = "MediaObject";
50
+
49
51
  export { MediaObject };