@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.
Files changed (75) hide show
  1. package/README.md +2 -2
  2. package/dist/index.d.ts +350 -290
  3. package/dist/index.js +489 -435
  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 +3 -1
  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
@@ -12,7 +12,7 @@ const MenubarRoot = React.forwardRef<
12
12
  <Menubar.Root
13
13
  ref={ref}
14
14
  className={cn(
15
- "flex h-9 items-center gap-0.5 rounded-lg border border-ground-100 bg-white px-1",
15
+ "flex h-9 items-center gap-0.5 rounded-lg border border-border bg-card px-1",
16
16
  className,
17
17
  )}
18
18
  {...props}
@@ -35,10 +35,10 @@ const MenubarTrigger = React.forwardRef<
35
35
  <Menubar.Trigger
36
36
  ref={ref}
37
37
  className={cn(
38
- "flex cursor-default items-center rounded-md px-3 py-1 body font-medium text-ground-700 select-none outline-none",
39
- "hover:bg-ground-50",
40
- "data-[state=open]:bg-ground-100 data-[state=open]:text-ground-900",
41
- "focus:bg-ground-50",
38
+ "flex cursor-default items-center rounded-md px-3 py-1 body font-medium text-muted-foreground select-none outline-none",
39
+ "hover:bg-muted",
40
+ "data-[state=open]:bg-muted data-[state=open]:text-foreground",
41
+ "focus:bg-muted",
42
42
  className,
43
43
  )}
44
44
  {...props}
@@ -57,7 +57,7 @@ const MenubarContent = React.forwardRef<
57
57
  alignOffset={alignOffset}
58
58
  sideOffset={sideOffset}
59
59
  className={cn(
60
- "z-50 min-w-[12rem] bg-white rounded-xl shadow-natural p-1",
60
+ "z-50 min-w-[12rem] bg-card rounded-xl shadow-natural p-1",
61
61
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
62
62
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
63
63
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
@@ -81,8 +81,8 @@ const MenubarItem = React.forwardRef<
81
81
  ref={ref}
82
82
  className={cn(
83
83
  "relative flex cursor-default select-none items-center gap-2 rounded-md px-2.5 py-1.5",
84
- "body text-ground-700 outline-none transition-colors",
85
- "focus:bg-ground-50 focus:text-ground-900",
84
+ "body text-muted-foreground outline-none transition-colors",
85
+ "focus:bg-muted focus:text-foreground",
86
86
  "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
87
87
  inset && "pl-8",
88
88
  className,
@@ -100,8 +100,8 @@ const MenubarCheckboxItem = React.forwardRef<
100
100
  ref={ref}
101
101
  className={cn(
102
102
  "relative flex cursor-default select-none items-center gap-2 rounded-md pl-8 pr-2.5 py-1.5",
103
- "body text-ground-700 outline-none transition-colors",
104
- "focus:bg-ground-50 focus:text-ground-900",
103
+ "body text-muted-foreground outline-none transition-colors",
104
+ "focus:bg-muted focus:text-foreground",
105
105
  "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
106
106
  className,
107
107
  )}
@@ -109,7 +109,7 @@ const MenubarCheckboxItem = React.forwardRef<
109
109
  >
110
110
  <span className="absolute left-2 flex size-3.5 items-center justify-center">
111
111
  <Menubar.ItemIndicator>
112
- <Check size={13} className="text-ground-900" />
112
+ <Check size={13} className="text-foreground" />
113
113
  </Menubar.ItemIndicator>
114
114
  </span>
115
115
  {children}
@@ -125,8 +125,8 @@ const MenubarRadioItem = React.forwardRef<
125
125
  ref={ref}
126
126
  className={cn(
127
127
  "relative flex cursor-default select-none items-center gap-2 rounded-md pl-8 pr-2.5 py-1.5",
128
- "body text-ground-700 outline-none transition-colors",
129
- "focus:bg-ground-50 focus:text-ground-900",
128
+ "body text-muted-foreground outline-none transition-colors",
129
+ "focus:bg-muted focus:text-foreground",
130
130
  "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
131
131
  className,
132
132
  )}
@@ -134,7 +134,7 @@ const MenubarRadioItem = React.forwardRef<
134
134
  >
135
135
  <span className="absolute left-2 flex size-3.5 items-center justify-center">
136
136
  <Menubar.ItemIndicator>
137
- <Circle size={8} className="fill-ground-900 text-ground-900" />
137
+ <Circle size={8} className="fill-foreground text-foreground" />
138
138
  </Menubar.ItemIndicator>
139
139
  </span>
140
140
  {children}
@@ -150,7 +150,7 @@ const MenubarLabel = React.forwardRef<
150
150
  >(({ className, inset, ...props }, ref) => (
151
151
  <Menubar.Label
152
152
  ref={ref}
153
- className={cn("px-2.5 py-1 label text-ground-400", inset && "pl-8", className)}
153
+ className={cn("px-2.5 py-1 label text-muted-foreground", inset && "pl-8", className)}
154
154
  {...props}
155
155
  />
156
156
  ));
@@ -162,7 +162,7 @@ const MenubarSeparator = React.forwardRef<
162
162
  >(({ className, ...props }, ref) => (
163
163
  <Menubar.Separator
164
164
  ref={ref}
165
- className={cn("mx-1 my-1 h-px bg-ground-100", className)}
165
+ className={cn("mx-1 my-1 h-px bg-muted", className)}
166
166
  {...props}
167
167
  />
168
168
  ));
@@ -178,15 +178,15 @@ const MenubarSubTrigger = React.forwardRef<
178
178
  ref={ref}
179
179
  className={cn(
180
180
  "relative flex cursor-default select-none items-center gap-2 rounded-md px-2.5 py-1.5",
181
- "body text-ground-700 outline-none transition-colors",
182
- "focus:bg-ground-50 focus:text-ground-900 data-[state=open]:bg-ground-50",
181
+ "body text-muted-foreground outline-none transition-colors",
182
+ "focus:bg-muted focus:text-foreground data-[state=open]:bg-muted",
183
183
  inset && "pl-8",
184
184
  className,
185
185
  )}
186
186
  {...props}
187
187
  >
188
188
  {children}
189
- <ChevronRight size={14} className="ml-auto text-ground-400" />
189
+ <ChevronRight size={14} className="ml-auto text-muted-foreground" />
190
190
  </Menubar.SubTrigger>
191
191
  ));
192
192
  MenubarSubTrigger.displayName = "MenubarSubTrigger";
@@ -198,7 +198,7 @@ const MenubarSubContent = React.forwardRef<
198
198
  <Menubar.SubContent
199
199
  ref={ref}
200
200
  className={cn(
201
- "z-50 min-w-[8rem] bg-white rounded-xl border border-ground-100 shadow-natural p-1",
201
+ "z-50 min-w-[8rem] bg-card rounded-xl border border-border shadow-natural p-1",
202
202
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
203
203
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
204
204
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
@@ -211,7 +211,7 @@ const MenubarSubContent = React.forwardRef<
211
211
  MenubarSubContent.displayName = "MenubarSubContent";
212
212
 
213
213
  function MenubarShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {
214
- return <span className={cn("ml-auto caption text-ground-400", className)} {...props} />;
214
+ return <span className={cn("ml-auto caption text-muted-foreground", className)} {...props} />;
215
215
  }
216
216
  MenubarShortcut.displayName = "MenubarShortcut";
217
217
 
@@ -10,11 +10,11 @@ const NativeSelect = React.forwardRef<
10
10
  <select
11
11
  ref={ref}
12
12
  className={cn(
13
- "peer h-9 w-full appearance-none rounded-lg border border-ground-200 bg-white pl-3 pr-8",
14
- "body text-ground-900",
15
- "focus:outline-none focus:ring-2 focus:ring-ground-400/30 focus:border-ground-400",
13
+ "peer h-9 w-full appearance-none rounded-lg border border-border bg-card pl-3 pr-8",
14
+ "body text-foreground",
15
+ "focus:outline-none focus:ring-2 focus:ring-ring/30 focus:border-border",
16
16
  "disabled:cursor-not-allowed disabled:opacity-50",
17
- "aria-[invalid=true]:border-red-500 aria-[invalid=true]:focus:ring-red-500/20",
17
+ "aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/20",
18
18
  className,
19
19
  )}
20
20
  {...props}
@@ -23,7 +23,7 @@ const NativeSelect = React.forwardRef<
23
23
  </select>
24
24
  <ChevronDown
25
25
  size={14}
26
- className="pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-ground-400 peer-disabled:opacity-50"
26
+ className="pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground peer-disabled:opacity-50"
27
27
  />
28
28
  </div>
29
29
  ));
@@ -41,9 +41,9 @@ const NavigationMenuTrigger = React.forwardRef<
41
41
  ref={ref}
42
42
  className={cn(
43
43
  "group inline-flex h-9 w-max items-center justify-center gap-1 rounded-md px-3 py-2",
44
- "body font-medium text-ground-700",
45
- "hover:bg-ground-100 hover:text-ground-900",
46
- "data-[active]:bg-ground-100 data-[state=open]:bg-ground-100",
44
+ "body font-medium text-muted-foreground",
45
+ "hover:bg-muted hover:text-foreground",
46
+ "data-[active]:bg-muted data-[state=open]:bg-muted",
47
47
  "outline-none transition-colors",
48
48
  className,
49
49
  )}
@@ -86,8 +86,8 @@ const NavigationMenuLink = React.forwardRef<
86
86
  <NavigationMenu.Link
87
87
  ref={ref}
88
88
  className={cn(
89
- "block select-none rounded-md px-3 py-2 body text-ground-700",
90
- "hover:bg-ground-50 hover:text-ground-900",
89
+ "block select-none rounded-md px-3 py-2 body text-muted-foreground",
90
+ "hover:bg-muted hover:text-foreground",
91
91
  "outline-none transition-colors",
92
92
  className,
93
93
  )}
@@ -104,7 +104,7 @@ const NavigationMenuViewport = React.forwardRef<
104
104
  <NavigationMenu.Viewport
105
105
  ref={ref}
106
106
  className={cn(
107
- "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-xl border border-ground-100 bg-white shadow-elevated",
107
+ "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-xl border border-border bg-card shadow-elevated",
108
108
  "md:w-[var(--radix-navigation-menu-viewport-width)]",
109
109
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
110
110
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90",
@@ -130,7 +130,7 @@ const NavigationMenuIndicator = React.forwardRef<
130
130
  )}
131
131
  {...props}
132
132
  >
133
- <div className="relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-ground-100 shadow-elevated" />
133
+ <div className="relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-muted shadow-elevated" />
134
134
  </NavigationMenu.Indicator>
135
135
  ));
136
136
  NavigationMenuIndicator.displayName = "NavigationMenuIndicator";
@@ -138,9 +138,9 @@ NavigationMenuIndicator.displayName = "NavigationMenuIndicator";
138
138
  function navigationMenuTriggerStyle() {
139
139
  return cn(
140
140
  "group inline-flex h-9 w-max items-center justify-center gap-1 rounded-md px-3 py-2",
141
- "body font-medium text-ground-700",
142
- "hover:bg-ground-100 hover:text-ground-900",
143
- "data-[active]:bg-ground-100 data-[state=open]:bg-ground-100",
141
+ "body font-medium text-muted-foreground",
142
+ "hover:bg-muted hover:text-foreground",
143
+ "data-[active]:bg-muted data-[state=open]:bg-muted",
144
144
  "outline-none transition-colors",
145
145
  );
146
146
  }
@@ -19,17 +19,17 @@ interface NotificationProps {
19
19
  }
20
20
 
21
21
  const variantConfig = {
22
- default: { icon: null, iconClass: "text-ground-400" },
22
+ default: { icon: null, iconClass: "text-muted-foreground" },
23
23
  success: {
24
24
  icon: CheckCircle,
25
- iconClass: "bg-brand-secondary/25 text-ground-700 rounded-full p-1",
25
+ iconClass: "bg-brand-secondary/25 text-muted-foreground rounded-full p-1",
26
26
  },
27
- error: { icon: AlertCircle, iconClass: "text-red-500" },
27
+ error: { icon: AlertCircle, iconClass: "text-destructive" },
28
28
  warning: {
29
29
  icon: AlertTriangle,
30
- iconClass: "bg-brand-secondary/80 text-ground-700 rounded-full p-1",
30
+ iconClass: "bg-brand-secondary/80 text-muted-foreground rounded-full p-1",
31
31
  },
32
- info: { icon: Info, iconClass: "text-ground-400" },
32
+ info: { icon: Info, iconClass: "text-muted-foreground" },
33
33
  };
34
34
 
35
35
  function Notification({
@@ -49,7 +49,7 @@ function Notification({
49
49
  return (
50
50
  <div
51
51
  className={cn(
52
- "pointer-events-auto w-full max-w-sm overflow-hidden rounded-xl border border-ground-100 bg-white shadow-elevated",
52
+ "pointer-events-auto w-full max-w-sm overflow-hidden rounded-xl border border-border bg-card shadow-elevated",
53
53
  className,
54
54
  )}
55
55
  >
@@ -62,8 +62,8 @@ function Notification({
62
62
 
63
63
  {/* Body */}
64
64
  <div className="min-w-0 flex-1">
65
- <p className="body font-semibold text-ground-900">{title}</p>
66
- {description && <p className="mt-0.5 body text-ground-500">{description}</p>}
65
+ <p className="body font-semibold text-foreground">{title}</p>
66
+ {description && <p className="mt-0.5 body text-muted-foreground">{description}</p>}
67
67
 
68
68
  {/* Actions */}
69
69
  {actions && actions.length > 0 && (
@@ -76,8 +76,8 @@ function Notification({
76
76
  className={cn(
77
77
  "body font-semibold transition-colors",
78
78
  action.variant === "ghost"
79
- ? "text-ground-400 hover:text-ground-700"
80
- : "text-ground-900 hover:text-ground-600",
79
+ ? "text-muted-foreground hover:text-muted-foreground"
80
+ : "text-foreground hover:text-muted-foreground",
81
81
  )}
82
82
  >
83
83
  {action.label}
@@ -93,7 +93,7 @@ function Notification({
93
93
  <button
94
94
  type="button"
95
95
  onClick={onClose}
96
- className="rounded-md text-ground-400 hover:text-ground-600 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ground-400/40"
96
+ className="rounded-md text-muted-foreground hover:text-muted-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30"
97
97
  >
98
98
  <span className="sr-only">Close</span>
99
99
  <X size={16} />
@@ -106,4 +106,6 @@ function Notification({
106
106
  );
107
107
  }
108
108
 
109
+ Notification.displayName = "Notification";
110
+
109
111
  export { Notification };
@@ -42,22 +42,22 @@ function PageHeading({
42
42
  className,
43
43
  }: PageHeadingProps) {
44
44
  return (
45
- <div className={cn("border-b border-ground-100 pb-6", className)}>
45
+ <div className={cn("border-b border-border pb-6", className)}>
46
46
  {/* Breadcrumbs */}
47
47
  {breadcrumbs && breadcrumbs.length > 0 && (
48
48
  <nav className="mb-3 flex items-center gap-1.5" aria-label="Breadcrumb">
49
49
  {breadcrumbs.map((crumb, i) => (
50
50
  <React.Fragment key={i}>
51
- {i > 0 && <ChevronRight size={12} className="text-ground-300 shrink-0" />}
51
+ {i > 0 && <ChevronRight size={12} className="text-muted-foreground shrink-0" />}
52
52
  {crumb.href ? (
53
53
  <a
54
54
  href={crumb.href}
55
- className="caption text-ground-400 hover:text-ground-700 transition-colors"
55
+ className="caption text-muted-foreground hover:text-muted-foreground transition-colors"
56
56
  >
57
57
  {crumb.label}
58
58
  </a>
59
59
  ) : (
60
- <span className="caption font-semibold text-ground-700">{crumb.label}</span>
60
+ <span className="caption font-semibold text-muted-foreground">{crumb.label}</span>
61
61
  )}
62
62
  </React.Fragment>
63
63
  ))}
@@ -68,7 +68,7 @@ function PageHeading({
68
68
  <div className="flex flex-wrap items-start justify-between gap-4">
69
69
  <div className="min-w-0 flex-1">
70
70
  <div className="flex items-center gap-3">
71
- <h1 className="display text-ground-900 truncate">{title}</h1>
71
+ <h1 className="display text-foreground truncate">{title}</h1>
72
72
  {badge &&
73
73
  (typeof badge === "string" ? (
74
74
  <Badge variant="secondary">{badge}</Badge>
@@ -76,14 +76,14 @@ function PageHeading({
76
76
  <Badge variant={badge.variant ?? "secondary"}>{badge.label}</Badge>
77
77
  ))}
78
78
  </div>
79
- {description && <p className="mt-1.5 body text-ground-400 max-w-2xl">{description}</p>}
79
+ {description && <p className="mt-1.5 body text-muted-foreground max-w-2xl">{description}</p>}
80
80
 
81
81
  {/* Meta */}
82
82
  {meta && meta.length > 0 && (
83
83
  <div className="mt-3 flex flex-wrap items-center gap-4">
84
84
  {meta.map((m, i) => (
85
- <div key={i} className="flex items-center gap-1.5 caption text-ground-400">
86
- {m.icon && <span className="text-ground-400">{m.icon}</span>}
85
+ <div key={i} className="flex items-center gap-1.5 caption text-muted-foreground">
86
+ {m.icon && <span className="text-muted-foreground">{m.icon}</span>}
87
87
  <span>{m.text}</span>
88
88
  </div>
89
89
  ))}
@@ -70,7 +70,7 @@ PaginationNext.displayName = "PaginationNext";
70
70
  const PaginationEllipsis = ({ className, ...props }: React.ComponentProps<"span">) => (
71
71
  <span
72
72
  aria-hidden
73
- className={cn("flex size-8 items-center justify-center text-ground-400", className)}
73
+ className={cn("flex size-8 items-center justify-center text-muted-foreground", className)}
74
74
  {...props}
75
75
  >
76
76
  <MoreHorizontal size={14} />
@@ -18,7 +18,7 @@ const PopoverContent = React.forwardRef<
18
18
  align={align}
19
19
  sideOffset={sideOffset}
20
20
  className={cn(
21
- "z-50 w-72 rounded-xl bg-white p-4 shadow-natural outline-none",
21
+ "z-50 w-72 rounded-xl bg-card p-4 shadow-natural outline-none",
22
22
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
23
23
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
24
24
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
@@ -8,7 +8,7 @@ const ProgressRoot = React.forwardRef<
8
8
  >(({ className, value, ...props }, ref) => (
9
9
  <Progress.Root
10
10
  ref={ref}
11
- className={cn("relative h-2 w-full overflow-hidden rounded-full bg-ground-100", className)}
11
+ className={cn("relative h-2 w-full overflow-hidden rounded-full bg-muted", className)}
12
12
  value={value}
13
13
  {...props}
14
14
  >
@@ -41,7 +41,7 @@ function PropertyRow({
41
41
  >
42
42
  {label !== undefined && (
43
43
  <div
44
- className="caption text-ground-500 shrink-0 select-none"
44
+ className="caption text-muted-foreground shrink-0 select-none"
45
45
  style={{ width: typeof labelWidth === "number" ? `${labelWidth}px` : labelWidth }}
46
46
  >
47
47
  {label}
@@ -52,5 +52,7 @@ function PropertyRow({
52
52
  );
53
53
  }
54
54
 
55
+ PropertyRow.displayName = "PropertyRow";
56
+
55
57
  export { PropertyRow };
56
58
  export type { PropertyRowProps };
@@ -46,8 +46,8 @@ function RadioCards({ options, value, onValueChange, columns = 3, className }: R
46
46
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30",
47
47
  "disabled:cursor-not-allowed disabled:opacity-50",
48
48
  isSelected
49
- ? "border-brand-primary bg-white shadow-natural"
50
- : "border-ground-200 bg-white hover:border-ground-400",
49
+ ? "border-brand-primary bg-card shadow-natural"
50
+ : "border-border bg-card hover:border-border",
51
51
  )}
52
52
  >
53
53
  {/* Selected ring overlay */}
@@ -60,17 +60,17 @@ function RadioCards({ options, value, onValueChange, columns = 3, className }: R
60
60
 
61
61
  <div className="flex items-start justify-between gap-2">
62
62
  <div className="min-w-0 flex-1">
63
- {option.icon && <div className="mb-2 text-ground-500">{option.icon}</div>}
63
+ {option.icon && <div className="mb-2 text-muted-foreground">{option.icon}</div>}
64
64
  <p
65
65
  className={cn(
66
66
  "body font-semibold",
67
- isSelected ? "text-ground-900" : "text-ground-800",
67
+ isSelected ? "text-foreground" : "text-muted-foreground",
68
68
  )}
69
69
  >
70
70
  {option.label}
71
71
  </p>
72
72
  {option.description && (
73
- <p className="mt-0.5 caption text-ground-400">{option.description}</p>
73
+ <p className="mt-0.5 caption text-muted-foreground">{option.description}</p>
74
74
  )}
75
75
  </div>
76
76
  <div
@@ -78,10 +78,10 @@ function RadioCards({ options, value, onValueChange, columns = 3, className }: R
78
78
  "flex size-5 shrink-0 items-center justify-center rounded-full border-2 transition-colors",
79
79
  isSelected
80
80
  ? "border-brand-primary bg-brand-primary"
81
- : "border-ground-300 bg-white",
81
+ : "border-border bg-card",
82
82
  )}
83
83
  >
84
- {isSelected && <Check size={10} className="text-white" strokeWidth={3} />}
84
+ {isSelected && <Check size={10} className="text-background" strokeWidth={3} />}
85
85
  </div>
86
86
  </div>
87
87
 
@@ -89,7 +89,7 @@ function RadioCards({ options, value, onValueChange, columns = 3, className }: R
89
89
  <p
90
90
  className={cn(
91
91
  "caption font-semibold mt-2",
92
- isSelected ? "text-ground-900" : "text-ground-400",
92
+ isSelected ? "text-foreground" : "text-muted-foreground",
93
93
  )}
94
94
  >
95
95
  {option.meta}
@@ -102,4 +102,6 @@ function RadioCards({ options, value, onValueChange, columns = 3, className }: R
102
102
  );
103
103
  }
104
104
 
105
+ RadioCards.displayName = "RadioCards";
106
+
105
107
  export { RadioCards };
@@ -19,17 +19,17 @@ const RadioGroupItem = React.forwardRef<
19
19
  <RadioGroup.Item
20
20
  ref={ref}
21
21
  className={cn(
22
- "aspect-square size-4 rounded-full border border-ground-300 text-ground-900",
22
+ "aspect-square size-4 rounded-full border border-border text-foreground",
23
23
  "shadow-none transition-colors",
24
- "focus:outline-none focus-visible:ring-2 focus-visible:ring-ground-900/20",
24
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/20",
25
25
  "disabled:cursor-not-allowed disabled:opacity-50",
26
- "data-[state=checked]:bg-ground-900 data-[state=checked]:border-ground-900",
26
+ "data-[state=checked]:bg-foreground data-[state=checked]:border-foreground",
27
27
  className,
28
28
  )}
29
29
  {...props}
30
30
  >
31
31
  <RadioGroup.Indicator className="flex items-center justify-center">
32
- <div className="size-2 rounded-full bg-white" />
32
+ <div className="size-2 rounded-full bg-card" />
33
33
  </RadioGroup.Indicator>
34
34
  </RadioGroup.Item>
35
35
  ));
@@ -46,7 +46,7 @@ function ResizableHandle({ className, withHandle = true, ...props }: ResizableHa
46
46
  return (
47
47
  <Separator
48
48
  className={cn(
49
- "relative flex shrink-0 items-center justify-center bg-ground-100",
49
+ "relative flex shrink-0 items-center justify-center bg-muted",
50
50
  "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-brand-primary/50",
51
51
  // Horizontal (default): vertical bar
52
52
  "[&:not([aria-orientation=vertical])]:h-full [&:not([aria-orientation=vertical])]:w-px",
@@ -62,8 +62,8 @@ function ResizableHandle({ className, withHandle = true, ...props }: ResizableHa
62
62
  {...props}
63
63
  >
64
64
  {withHandle && (
65
- <div className="z-10 flex h-5 w-3 items-center justify-center rounded-sm border border-ground-100 bg-white shadow-natural">
66
- <GripVertical size={10} className="text-ground-400" />
65
+ <div className="z-10 flex h-5 w-3 items-center justify-center rounded-sm border border-border bg-card shadow-natural">
66
+ <GripVertical size={10} className="text-muted-foreground" />
67
67
  </div>
68
68
  )}
69
69
  </Separator>
@@ -34,7 +34,7 @@ const ScrollAreaScrollbar = React.forwardRef<
34
34
  )}
35
35
  {...props}
36
36
  >
37
- <ScrollArea.Thumb className="relative flex-1 rounded-full bg-ground-200 hover:bg-ground-300 transition-colors" />
37
+ <ScrollArea.Thumb className="relative flex-1 rounded-full bg-muted hover:bg-muted transition-colors" />
38
38
  </ScrollArea.Scrollbar>
39
39
  ));
40
40
  ScrollAreaScrollbar.displayName = "ScrollAreaScrollbar";
@@ -28,13 +28,13 @@ function SectionHeading({
28
28
  <div
29
29
  className={cn(
30
30
  "flex flex-col gap-1 pb-4 sm:flex-row sm:items-start sm:justify-between",
31
- border && "border-b border-ground-100",
31
+ border && "border-b border-border",
32
32
  className,
33
33
  )}
34
34
  >
35
35
  <div className="min-w-0 flex-1">
36
- <h2 className="heading text-ground-900 truncate">{title}</h2>
37
- {description && <p className="mt-1 body text-ground-400">{description}</p>}
36
+ <h2 className="heading text-foreground truncate">{title}</h2>
37
+ {description && <p className="mt-1 body text-muted-foreground">{description}</p>}
38
38
  </div>
39
39
 
40
40
  {actions && actions.length > 0 && (
@@ -16,11 +16,11 @@ const SelectTrigger = React.forwardRef<
16
16
  <Select.Trigger
17
17
  ref={ref}
18
18
  className={cn(
19
- "flex h-9 w-full items-center justify-between rounded-xl bg-white px-3 py-2",
20
- "body text-ground-900 shadow-natural",
21
- "focus:outline-none focus:ring-2 focus:ring-ground-900/15",
19
+ "flex h-9 w-full items-center justify-between rounded-xl bg-card px-3 py-2",
20
+ "body text-foreground shadow-natural",
21
+ "focus:outline-none focus:ring-2 focus:ring-ring/20",
22
22
  "disabled:opacity-50 disabled:cursor-not-allowed",
23
- "data-[placeholder]:text-ground-400",
23
+ "data-[placeholder]:text-muted-foreground",
24
24
  "[&>span]:line-clamp-1",
25
25
  className,
26
26
  )}
@@ -28,7 +28,7 @@ const SelectTrigger = React.forwardRef<
28
28
  >
29
29
  {children}
30
30
  <Select.Icon asChild>
31
- <ChevronDown size={15} className="text-ground-400 shrink-0" />
31
+ <ChevronDown size={15} className="text-muted-foreground shrink-0" />
32
32
  </Select.Icon>
33
33
  </Select.Trigger>
34
34
  ));
@@ -43,7 +43,7 @@ const SelectContent = React.forwardRef<
43
43
  ref={ref}
44
44
  className={cn(
45
45
  "relative z-50 max-h-96 min-w-[8rem] overflow-hidden",
46
- "bg-white rounded-xl shadow-natural p-1",
46
+ "bg-card rounded-xl shadow-natural p-1",
47
47
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
48
48
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
49
49
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
@@ -55,7 +55,7 @@ const SelectContent = React.forwardRef<
55
55
  {...props}
56
56
  >
57
57
  <Select.ScrollUpButton className="flex cursor-default items-center justify-center py-1">
58
- <ChevronUp size={14} className="text-ground-400" />
58
+ <ChevronUp size={14} className="text-muted-foreground" />
59
59
  </Select.ScrollUpButton>
60
60
  <Select.Viewport
61
61
  className={cn(
@@ -66,7 +66,7 @@ const SelectContent = React.forwardRef<
66
66
  {children}
67
67
  </Select.Viewport>
68
68
  <Select.ScrollDownButton className="flex cursor-default items-center justify-center py-1">
69
- <ChevronDown size={14} className="text-ground-400" />
69
+ <ChevronDown size={14} className="text-muted-foreground" />
70
70
  </Select.ScrollDownButton>
71
71
  </Select.Content>
72
72
  </Select.Portal>
@@ -81,8 +81,8 @@ const SelectItem = React.forwardRef<
81
81
  ref={ref}
82
82
  className={cn(
83
83
  "relative flex w-full cursor-default select-none items-center rounded-md px-2.5 py-1.5",
84
- "body text-ground-700 outline-none",
85
- "focus:bg-ground-50 focus:text-ground-900",
84
+ "body text-muted-foreground outline-none",
85
+ "focus:bg-muted focus:text-foreground",
86
86
  "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
87
87
  className,
88
88
  )}
@@ -90,7 +90,7 @@ const SelectItem = React.forwardRef<
90
90
  >
91
91
  <span className="absolute right-2 flex size-3.5 items-center justify-center">
92
92
  <Select.ItemIndicator>
93
- <Check size={13} className="text-ground-900" />
93
+ <Check size={13} className="text-foreground" />
94
94
  </Select.ItemIndicator>
95
95
  </span>
96
96
  <Select.ItemText>{children}</Select.ItemText>
@@ -104,7 +104,7 @@ const SelectLabel = React.forwardRef<
104
104
  >(({ className, ...props }, ref) => (
105
105
  <Select.Label
106
106
  ref={ref}
107
- className={cn("px-2.5 py-1 label text-ground-400", className)}
107
+ className={cn("px-2.5 py-1 label text-muted-foreground", className)}
108
108
  {...props}
109
109
  />
110
110
  ));
@@ -114,7 +114,7 @@ const SelectSeparator = React.forwardRef<
114
114
  React.ComponentRef<typeof Select.Separator>,
115
115
  React.ComponentPropsWithoutRef<typeof Select.Separator>
116
116
  >(({ className, ...props }, ref) => (
117
- <Select.Separator ref={ref} className={cn("mx-1 my-1 h-px bg-ground-100", className)} {...props} />
117
+ <Select.Separator ref={ref} className={cn("mx-1 my-1 h-px bg-muted", className)} {...props} />
118
118
  ));
119
119
  SelectSeparator.displayName = "SelectSeparator";
120
120
 
@@ -13,7 +13,7 @@ const Separator = React.forwardRef<
13
13
  decorative={decorative}
14
14
  orientation={orientation}
15
15
  className={cn(
16
- "shrink-0 bg-ground-100",
16
+ "shrink-0 bg-muted",
17
17
  orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
18
18
  className,
19
19
  )}