@vvedantb/ui 0.1.5 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -0
- package/app/README.md +100 -0
- package/app/src/auth/useStableAuth.ts +69 -0
- package/app/src/cn.ts +6 -0
- package/app/src/confirm/ConfirmSkipHint.tsx +35 -0
- package/app/src/confirm/confirmSkip.ts +26 -0
- package/app/src/confirm/useAltHeld.ts +128 -0
- package/app/src/confirm/useRequestConfirm.ts +25 -0
- package/app/src/index.ts +43 -0
- package/app/src/settings/SettingsEmptyState.tsx +38 -0
- package/app/src/settings/SettingsField.tsx +42 -0
- package/app/src/settings/SettingsPage.tsx +88 -0
- package/app/src/settings/SettingsSection.tsx +92 -0
- package/app/src/settings/SettingsStack.tsx +17 -0
- package/app/src/settings/SettingsToggleRow.tsx +51 -0
- package/app/src/update/deployFingerprint.ts +27 -0
- package/app/src/update/updateWatcher.ts +100 -0
- package/package.json +71 -11
- package/shell/src/PillTabs.tsx +86 -0
- package/shell/src/SidebarHeader.tsx +21 -0
- package/shell/src/cn.ts +5 -0
- package/shell/src/index.ts +6 -0
- package/src/ai-elements/artifact.tsx +1 -1
- package/src/ai-elements/attachments.tsx +3 -3
- package/src/ai-elements/chain-of-thought.tsx +5 -5
- package/src/ai-elements/code-block.tsx +2 -2
- package/src/ai-elements/conversation.tsx +3 -3
- package/src/ai-elements/inline-citation.tsx +6 -6
- package/src/ai-elements/message.tsx +2 -2
- package/src/ai-elements/prompt-input.tsx +3 -3
- package/src/ai-elements/queue.tsx +2 -2
- package/src/ai-elements/reasoning.tsx +1 -1
- package/src/ai-elements/shimmer.tsx +5 -5
- package/src/ai-elements/sources.tsx +2 -2
- package/src/ai-elements/speech-input.tsx +1 -1
- package/src/ai-elements/suggestion.tsx +2 -2
- package/src/index.ts +18 -18
- package/src/ui/{_menu-classes.vibot.ts → _menu-classes.alt.ts} +4 -4
- package/src/ui/_menu-classes.ts +4 -4
- package/src/ui/{accordion.verve.tsx → accordion.alt.tsx} +2 -2
- package/src/ui/badge.tsx +1 -1
- package/src/ui/breadcrumb.tsx +2 -2
- package/src/ui/button.tsx +3 -3
- package/src/ui/checkbox.tsx +1 -1
- package/src/ui/{clear-input.vibot.tsx → clear-input.alt.tsx} +1 -1
- package/src/ui/clear-input.tsx +1 -1
- package/src/ui/command.tsx +5 -5
- package/src/ui/dialog.tsx +1 -1
- package/src/ui/{input-group.verve.tsx → input-group.alt.tsx} +1 -1
- package/src/ui/input-group.tsx +2 -2
- package/src/ui/kbd.tsx +1 -1
- package/src/ui/labeled-switch-row.tsx +2 -2
- package/src/ui/progress.tsx +1 -1
- package/src/ui/radix-select.tsx +3 -3
- package/src/ui/search-input.tsx +1 -1
- package/src/ui/select.tsx +4 -4
- package/src/ui/sonner.tsx +5 -5
- package/src/ui/spinner.tsx +1 -1
- package/src/ui/switch.tsx +2 -2
- package/src/ui/table.tsx +2 -2
- package/src/ui/time-picker.tsx +3 -3
- package/tokens/README.md +98 -0
- package/tokens/examples/compat-shadcn-rgb/Fixture.tsx +45 -0
- package/tokens/examples/compat-shadcn-rgb/README.md +11 -0
- package/tokens/examples/compat-shadcn-rgb/index.html +12 -0
- package/tokens/examples/compat-shadcn-rgb/main.tsx +5 -0
- package/tokens/examples/compat-shadcn-rgb/package.json +14 -0
- package/tokens/examples/compat-shadcn-rgb/styles.css +67 -0
- package/tokens/examples/compat-shadcn-rgb/tsconfig.json +14 -0
- package/tokens/examples/compat-shadcn-rgb/vite.config.ts +11 -0
- package/tokens/examples/migration.md +303 -0
- package/tokens/src/css/animations.css +55 -0
- package/tokens/src/css/base.css +51 -0
- package/tokens/src/css/compat-shadcn-rgb.css +75 -0
- package/tokens/src/css/dialog.css +13 -0
- package/tokens/src/css/index.css +19 -0
- package/tokens/src/css/modal.css +44 -0
- package/tokens/src/css/scrollbar-thin.css +40 -0
- package/tokens/src/css/tabs-pills.css +58 -0
- package/tokens/src/css/tabs.css +57 -0
- package/tokens/src/css/utilities.css +34 -0
- package/tokens/src/native.ts +39 -0
- package/tokens/src/tailwind-preset.d.mts +25 -0
- package/tokens/src/tailwind-preset.mjs +183 -0
- package/tokens/src/tokens.css +207 -0
- /package/src/motion/{presets.vibot.ts → presets.alt.ts} +0 -0
- /package/src/ui/{scroll-area.verve.tsx → scroll-area.alt.tsx} +0 -0
|
@@ -147,7 +147,7 @@ export const InlineCitationCarouselIndex = ({
|
|
|
147
147
|
return (
|
|
148
148
|
<div
|
|
149
149
|
className={cn(
|
|
150
|
-
"flex flex-1 items-center justify-end px-3 py-1 text-muted text-xs",
|
|
150
|
+
"flex flex-1 items-center justify-end px-3 py-1 text-muted-foreground text-xs",
|
|
151
151
|
className,
|
|
152
152
|
)}
|
|
153
153
|
{...props}
|
|
@@ -178,7 +178,7 @@ export const InlineCitationCarouselPrev = ({
|
|
|
178
178
|
type="button"
|
|
179
179
|
{...props}
|
|
180
180
|
>
|
|
181
|
-
<IconArrowLeft className="size-4 text-muted" />
|
|
181
|
+
<IconArrowLeft className="size-4 text-muted-foreground" />
|
|
182
182
|
</button>
|
|
183
183
|
);
|
|
184
184
|
};
|
|
@@ -204,7 +204,7 @@ export const InlineCitationCarouselNext = ({
|
|
|
204
204
|
type="button"
|
|
205
205
|
{...props}
|
|
206
206
|
>
|
|
207
|
-
<IconArrowRight className="size-4 text-muted" />
|
|
207
|
+
<IconArrowRight className="size-4 text-muted-foreground" />
|
|
208
208
|
</button>
|
|
209
209
|
);
|
|
210
210
|
};
|
|
@@ -225,9 +225,9 @@ export const InlineCitationSource = ({
|
|
|
225
225
|
{title && (
|
|
226
226
|
<h4 className="truncate font-medium text-sm leading-tight">{title}</h4>
|
|
227
227
|
)}
|
|
228
|
-
{url && <p className="truncate break-all text-muted text-xs">{url}</p>}
|
|
228
|
+
{url && <p className="truncate break-all text-muted-foreground text-xs">{url}</p>}
|
|
229
229
|
{description && (
|
|
230
|
-
<p className="line-clamp-3 text-muted text-sm leading-relaxed">
|
|
230
|
+
<p className="line-clamp-3 text-muted-foreground text-sm leading-relaxed">
|
|
231
231
|
{description}
|
|
232
232
|
</p>
|
|
233
233
|
)}
|
|
@@ -242,7 +242,7 @@ export const InlineCitationQuote = ({
|
|
|
242
242
|
}: InlineCitationQuoteProps) => (
|
|
243
243
|
<blockquote
|
|
244
244
|
className={cn(
|
|
245
|
-
"border-l-2 border-separator pl-3 text-muted text-sm italic",
|
|
245
|
+
"border-l-2 border-separator pl-3 text-muted-foreground text-sm italic",
|
|
246
246
|
className,
|
|
247
247
|
)}
|
|
248
248
|
{...props}
|
|
@@ -34,7 +34,7 @@ export const MessageContent = ({
|
|
|
34
34
|
<div
|
|
35
35
|
className={cn(
|
|
36
36
|
"flex w-fit min-w-0 max-w-full flex-col gap-2 overflow-hidden text-sm",
|
|
37
|
-
"group-[.is-user]:ml-auto group-[.is-user]:rounded-2xl group-[.is-user]:rounded-br-md group-[.is-user]:bg-
|
|
37
|
+
"group-[.is-user]:ml-auto group-[.is-user]:rounded-2xl group-[.is-user]:rounded-br-md group-[.is-user]:bg-primary group-[.is-user]:px-4 group-[.is-user]:py-3 group-[.is-user]:text-primary-foreground",
|
|
38
38
|
"group-[.is-assistant]:px-0 group-[.is-assistant]:text-foreground",
|
|
39
39
|
className,
|
|
40
40
|
)}
|
|
@@ -242,7 +242,7 @@ export const MessageBranchPage = ({
|
|
|
242
242
|
return (
|
|
243
243
|
<ButtonGroupText
|
|
244
244
|
className={cn(
|
|
245
|
-
"border-none bg-transparent text-muted shadow-none",
|
|
245
|
+
"border-none bg-transparent text-muted-foreground shadow-none",
|
|
246
246
|
className,
|
|
247
247
|
)}
|
|
248
248
|
{...props}
|
|
@@ -774,7 +774,7 @@ export const PromptInputButton = ({
|
|
|
774
774
|
<TooltipTrigger asChild>{button}</TooltipTrigger>
|
|
775
775
|
<TooltipContent side={side}>
|
|
776
776
|
{tooltipContent}
|
|
777
|
-
{shortcut && <span className="ml-2 text-muted">{shortcut}</span>}
|
|
777
|
+
{shortcut && <span className="ml-2 text-muted-foreground">{shortcut}</span>}
|
|
778
778
|
</TooltipContent>
|
|
779
779
|
</Tooltip>
|
|
780
780
|
);
|
|
@@ -871,7 +871,7 @@ export const PromptInputModelSelectTrigger = ({
|
|
|
871
871
|
}: PromptInputModelSelectTriggerProps) => (
|
|
872
872
|
<SelectTrigger
|
|
873
873
|
className={cn(
|
|
874
|
-
"border-none bg-transparent font-medium text-muted shadow-none transition-[color,transform] duration-150 ease-out active:scale-[0.97]",
|
|
874
|
+
"border-none bg-transparent font-medium text-muted-foreground shadow-none transition-[color,transform] duration-150 ease-out active:scale-[0.97]",
|
|
875
875
|
"hover:bg-surface-secondary hover:text-foreground",
|
|
876
876
|
segmentExpandedStateClass,
|
|
877
877
|
className,
|
|
@@ -943,7 +943,7 @@ export const PromptInputTabLabel = ({
|
|
|
943
943
|
...props
|
|
944
944
|
}: PromptInputTabLabelProps) => (
|
|
945
945
|
<h3
|
|
946
|
-
className={cn("mb-2 px-3 font-medium text-muted text-xs", className)}
|
|
946
|
+
className={cn("mb-2 px-3 font-medium text-muted-foreground text-xs", className)}
|
|
947
947
|
{...props}
|
|
948
948
|
/>
|
|
949
949
|
);
|
|
@@ -73,7 +73,7 @@ export function QueueHeader({
|
|
|
73
73
|
)}
|
|
74
74
|
>
|
|
75
75
|
<div className="flex items-center gap-2">
|
|
76
|
-
<IconStack2 size={16} className="text-muted" />
|
|
76
|
+
<IconStack2 size={16} className="text-muted-foreground" />
|
|
77
77
|
<span className="text-sm font-medium text-foreground">
|
|
78
78
|
Queued Messages
|
|
79
79
|
</span>
|
|
@@ -84,7 +84,7 @@ export function QueueHeader({
|
|
|
84
84
|
<IconChevronDown
|
|
85
85
|
size={16}
|
|
86
86
|
className={cn(
|
|
87
|
-
"text-muted transition-transform duration-200 ease-out",
|
|
87
|
+
"text-muted-foreground transition-transform duration-200 ease-out",
|
|
88
88
|
isOpen && "rotate-180",
|
|
89
89
|
)}
|
|
90
90
|
/>
|
|
@@ -137,7 +137,7 @@ export function ReasoningTrigger({
|
|
|
137
137
|
return (
|
|
138
138
|
<CollapsibleTrigger
|
|
139
139
|
className={cn(
|
|
140
|
-
"flex w-full items-center gap-2 py-1 text-sm text-muted transition-[color,transform] duration-150 ease-out active:scale-[0.99] hover:text-foreground",
|
|
140
|
+
"flex w-full items-center gap-2 py-1 text-sm text-muted-foreground transition-[color,transform] duration-150 ease-out active:scale-[0.99] hover:text-foreground",
|
|
141
141
|
className,
|
|
142
142
|
)}
|
|
143
143
|
{...props}
|
|
@@ -26,11 +26,11 @@ function Shimmer({
|
|
|
26
26
|
"--spread": `${totalSpread}px`,
|
|
27
27
|
"--bg": `linear-gradient(
|
|
28
28
|
90deg,
|
|
29
|
-
var(--muted) 0%,
|
|
30
|
-
var(--foreground) calc(50% - var(--spread)),
|
|
31
|
-
var(--muted) 50%,
|
|
32
|
-
var(--foreground) calc(50% + var(--spread)),
|
|
33
|
-
var(--muted) 100%
|
|
29
|
+
var(--color-muted-foreground, var(--muted)) 0%,
|
|
30
|
+
var(--color-foreground, var(--foreground)) calc(50% - var(--spread)),
|
|
31
|
+
var(--color-muted-foreground, var(--muted)) 50%,
|
|
32
|
+
var(--color-foreground, var(--foreground)) calc(50% + var(--spread)),
|
|
33
|
+
var(--color-muted-foreground, var(--muted)) 100%
|
|
34
34
|
)`,
|
|
35
35
|
backgroundImage: "var(--bg)",
|
|
36
36
|
backgroundSize: "200% 100%",
|
|
@@ -28,7 +28,7 @@ export const SourcesTrigger = ({
|
|
|
28
28
|
}: SourcesTriggerProps) => (
|
|
29
29
|
<CollapsibleTrigger
|
|
30
30
|
className={cn(
|
|
31
|
-
"group inline-flex items-center gap-1.5 text-xs text-muted transition-[color,transform] duration-150 ease-out active:scale-[0.97] hover:text-foreground",
|
|
31
|
+
"group inline-flex items-center gap-1.5 text-xs text-muted-foreground transition-[color,transform] duration-150 ease-out active:scale-[0.97] hover:text-foreground",
|
|
32
32
|
className,
|
|
33
33
|
)}
|
|
34
34
|
{...props}
|
|
@@ -63,7 +63,7 @@ export const Source = ({
|
|
|
63
63
|
}: SourceProps) => (
|
|
64
64
|
<a
|
|
65
65
|
className={cn(
|
|
66
|
-
"flex items-center justify-between gap-2 rounded-md px-3 py-2 text-xs text-muted transition-[background-color,color,transform] duration-150 ease-out active:scale-[0.99] hover:bg-surface-secondary hover:text-foreground",
|
|
66
|
+
"flex items-center justify-between gap-2 rounded-md px-3 py-2 text-xs text-muted-foreground transition-[background-color,color,transform] duration-150 ease-out active:scale-[0.99] hover:bg-surface-secondary hover:text-foreground",
|
|
67
67
|
className,
|
|
68
68
|
)}
|
|
69
69
|
href={href}
|
|
@@ -251,7 +251,7 @@ export const SpeechInput = ({
|
|
|
251
251
|
"relative z-10 rounded-full transition-[background-color,transform] duration-200 ease-smooth active:duration-100 active:ease-out",
|
|
252
252
|
isListening
|
|
253
253
|
? "bg-danger text-danger-foreground hover:bg-danger/80 hover:text-danger-foreground"
|
|
254
|
-
: "bg-
|
|
254
|
+
: "bg-primary text-primary-foreground hover:bg-primary/80 hover:text-primary-foreground",
|
|
255
255
|
className,
|
|
256
256
|
)}
|
|
257
257
|
disabled={isDisabled}
|
|
@@ -6,7 +6,7 @@ import { cn } from "../utils/cn";
|
|
|
6
6
|
import { flatInteractiveClass } from "../ui/surface-classes";
|
|
7
7
|
import { IconChevronLeft, IconChevronRight } from "@tabler/icons-react";
|
|
8
8
|
import { AnimatePresence, motion } from "motion/react";
|
|
9
|
-
import { fastTransition } from "../motion/presets.
|
|
9
|
+
import { fastTransition } from "../motion/presets.alt";
|
|
10
10
|
export type SuggestionsProps = {
|
|
11
11
|
className?: string;
|
|
12
12
|
children?: ReactNode;
|
|
@@ -176,7 +176,7 @@ export const Suggestion = ({
|
|
|
176
176
|
return (
|
|
177
177
|
<Button
|
|
178
178
|
className={cn(
|
|
179
|
-
"h-auto cursor-pointer rounded-full bg-surface-secondary px-3 py-1.5 text-sm text-muted hover:bg-surface-tertiary hover:text-foreground",
|
|
179
|
+
"h-auto cursor-pointer rounded-full bg-surface-secondary px-3 py-1.5 text-sm text-muted-foreground hover:bg-surface-tertiary hover:text-foreground",
|
|
180
180
|
className,
|
|
181
181
|
)}
|
|
182
182
|
onClick={handleClick}
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Colour, radius, shadow and font tokens live in @vvedantb/tokens. Import that
|
|
1
|
+
// Colour, radius, shadow and font tokens live in @vvedantb/ui/tokens. Import that
|
|
2
2
|
// stylesheet in the app. This package does not ship a second token set.
|
|
3
3
|
export { cn } from "./utils/cn";
|
|
4
4
|
export { floatingSurfaceClass } from "./ui/_menu-classes";
|
|
@@ -55,30 +55,30 @@ export * from "./ui/sheet";
|
|
|
55
55
|
export * from "./ui/visually-hidden";
|
|
56
56
|
export * from "./ui/clearInputDissolve";
|
|
57
57
|
|
|
58
|
-
// Dual copies: richer file uses the plain name; the other keeps
|
|
58
|
+
// Dual copies: the richer file uses the plain name; the other keeps an `Alt` suffix.
|
|
59
59
|
export * from "./ui/accordion";
|
|
60
60
|
export {
|
|
61
|
-
Accordion as
|
|
62
|
-
AccordionItem as
|
|
63
|
-
AccordionTrigger as
|
|
64
|
-
AccordionContent as
|
|
65
|
-
} from "./ui/accordion.
|
|
61
|
+
Accordion as AccordionAlt,
|
|
62
|
+
AccordionItem as AccordionItemAlt,
|
|
63
|
+
AccordionTrigger as AccordionTriggerAlt,
|
|
64
|
+
AccordionContent as AccordionContentAlt,
|
|
65
|
+
} from "./ui/accordion.alt";
|
|
66
66
|
export * from "./ui/clear-input";
|
|
67
|
-
export { ClearInput as
|
|
67
|
+
export { ClearInput as ClearInputAlt } from "./ui/clear-input.alt";
|
|
68
68
|
export * from "./ui/input-group";
|
|
69
69
|
export {
|
|
70
|
-
InputGroup as
|
|
71
|
-
InputGroupAddon as
|
|
72
|
-
InputGroupButton as
|
|
73
|
-
InputGroupText as
|
|
74
|
-
InputGroupInput as
|
|
75
|
-
InputGroupTextarea as
|
|
76
|
-
} from "./ui/input-group.
|
|
70
|
+
InputGroup as InputGroupAlt,
|
|
71
|
+
InputGroupAddon as InputGroupAddonAlt,
|
|
72
|
+
InputGroupButton as InputGroupButtonAlt,
|
|
73
|
+
InputGroupText as InputGroupTextAlt,
|
|
74
|
+
InputGroupInput as InputGroupInputAlt,
|
|
75
|
+
InputGroupTextarea as InputGroupTextareaAlt,
|
|
76
|
+
} from "./ui/input-group.alt";
|
|
77
77
|
export * from "./ui/scroll-area";
|
|
78
78
|
export {
|
|
79
|
-
ScrollArea as
|
|
80
|
-
ScrollBar as
|
|
81
|
-
} from "./ui/scroll-area.
|
|
79
|
+
ScrollArea as ScrollAreaAlt,
|
|
80
|
+
ScrollBar as ScrollBarAlt,
|
|
81
|
+
} from "./ui/scroll-area.alt";
|
|
82
82
|
|
|
83
83
|
export * from "./ai-elements/artifact";
|
|
84
84
|
export * from "./ai-elements/attachments";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Floating overlay shell: tone + smooth-shadow-ring, no hairline. */
|
|
2
2
|
export const floatingSurfaceClass =
|
|
3
3
|
"rounded-lg bg-overlay text-overlay-foreground smooth-shadow-ring-lg";
|
|
4
4
|
|
|
@@ -9,7 +9,7 @@ export const floatingSurfaceAnimateClass = [
|
|
|
9
9
|
"origin-(--radix-popper-transform-origin) data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=open]:duration-200 data-[state=closed]:duration-150 data-[state=open]:ease-[cubic-bezier(0.32,0.72,0,1)] data-[state=closed]:ease-[cubic-bezier(0.32,0.72,0,1)]",
|
|
10
10
|
].join(" ");
|
|
11
11
|
|
|
12
|
-
/** Shared floating menu surfaces
|
|
12
|
+
/** Shared floating menu surfaces: popover tone + smooth-shadow-ring-lg. */
|
|
13
13
|
export const menuContentClass = [
|
|
14
14
|
"z-50 min-w-48 overflow-hidden p-1.5 outline-hidden",
|
|
15
15
|
floatingSurfaceClass,
|
|
@@ -26,8 +26,8 @@ export const menuCheckboxRadioItemClass =
|
|
|
26
26
|
"relative flex cursor-pointer select-none items-center rounded-md py-2 pl-8 pr-2.5 text-sm outline-hidden transition-[background-color,color,transform] duration-150 ease-out active:scale-[0.99] focus:bg-default focus:text-foreground data-highlighted:bg-default data-highlighted:text-foreground data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50";
|
|
27
27
|
|
|
28
28
|
export const menuLabelClass =
|
|
29
|
-
"px-2.5 py-1.5 text-xs font-semibold uppercase tracking-widest text-muted";
|
|
29
|
+
"px-2.5 py-1.5 text-xs font-semibold uppercase tracking-widest text-muted-foreground";
|
|
30
30
|
|
|
31
31
|
export const menuSeparatorClass = "-mx-1.5 my-1 h-px bg-separator";
|
|
32
32
|
|
|
33
|
-
export const menuShortcutClass = "ml-auto text-xs tracking-wide text-muted/90";
|
|
33
|
+
export const menuShortcutClass = "ml-auto text-xs tracking-wide text-muted-foreground/90";
|
package/src/ui/_menu-classes.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// floating overlay: tone + smooth-shadow-ring, never border+shadow
|
|
2
2
|
export const floatingSurfaceClass =
|
|
3
3
|
"rounded-lg bg-overlay text-overlay-foreground smooth-shadow-ring-lg max-sm:max-w-[calc(100vw-2rem)]";
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ export const floatingSurfaceAnimateClass = [
|
|
|
6
6
|
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
7
7
|
].join(" ");
|
|
8
8
|
|
|
9
|
-
// shared floating menu surfaces
|
|
9
|
+
// shared floating menu surfaces: popover tone + smooth-shadow-ring-lg
|
|
10
10
|
export const menuContentClass = [
|
|
11
11
|
"z-50 min-w-[12rem] overflow-hidden p-1.5 outline-none max-sm:max-h-[85dvh] max-sm:overflow-y-auto",
|
|
12
12
|
floatingSurfaceClass,
|
|
@@ -23,8 +23,8 @@ export const menuCheckboxRadioItemClass =
|
|
|
23
23
|
"relative flex cursor-pointer select-none items-center rounded-md py-2 max-sm:min-h-10 pl-8 pr-2.5 text-sm outline-none transition-[background-color,color] focus:bg-default focus:text-foreground data-[highlighted]:bg-default data-[highlighted]:text-foreground data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50";
|
|
24
24
|
|
|
25
25
|
export const menuLabelClass =
|
|
26
|
-
"px-2.5 py-1.5 text-xs font-semibold uppercase tracking-widest text-muted";
|
|
26
|
+
"px-2.5 py-1.5 text-xs font-semibold uppercase tracking-widest text-muted-foreground";
|
|
27
27
|
|
|
28
28
|
export const menuSeparatorClass = "-mx-1.5 my-1 h-px bg-separator";
|
|
29
29
|
|
|
30
|
-
export const menuShortcutClass = "ml-auto text-xs tracking-wide text-muted/90";
|
|
30
|
+
export const menuShortcutClass = "ml-auto text-xs tracking-wide text-muted-foreground/90";
|
|
@@ -31,7 +31,7 @@ const AccordionTrigger = React.forwardRef<
|
|
|
31
31
|
{...props}
|
|
32
32
|
>
|
|
33
33
|
{children}
|
|
34
|
-
<IconChevronDown className="h-4 w-4 shrink-0 text-muted transition-transform duration-200" />
|
|
34
|
+
<IconChevronDown className="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200" />
|
|
35
35
|
</AccordionPrimitive.Trigger>
|
|
36
36
|
</AccordionPrimitive.Header>
|
|
37
37
|
));
|
|
@@ -46,7 +46,7 @@ const AccordionContent = React.forwardRef<
|
|
|
46
46
|
className="overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
|
|
47
47
|
{...props}
|
|
48
48
|
>
|
|
49
|
-
<div className={cn("pb-4 pt-0 text-muted", className)}>
|
|
49
|
+
<div className={cn("pb-4 pt-0 text-muted-foreground", className)}>
|
|
50
50
|
{children}
|
|
51
51
|
</div>
|
|
52
52
|
</AccordionPrimitive.Content>
|
package/src/ui/badge.tsx
CHANGED
|
@@ -9,7 +9,7 @@ const badgeVariants = cva(
|
|
|
9
9
|
default: "border-border bg-default text-foreground",
|
|
10
10
|
secondary: "border-separator bg-default text-default-foreground",
|
|
11
11
|
destructive: "border-danger/25 bg-danger/12 text-danger",
|
|
12
|
-
outline: "border-separator bg-transparent text-muted",
|
|
12
|
+
outline: "border-separator bg-transparent text-muted-foreground",
|
|
13
13
|
success: "border-success/25 bg-success/12 text-success",
|
|
14
14
|
warning: "border-warning/25 bg-warning/12 text-warning",
|
|
15
15
|
},
|
package/src/ui/breadcrumb.tsx
CHANGED
|
@@ -48,7 +48,7 @@ const BreadcrumbLink = React.forwardRef<
|
|
|
48
48
|
<Comp
|
|
49
49
|
ref={ref}
|
|
50
50
|
className={cn(
|
|
51
|
-
"min-w-0 truncate font-medium text-muted transition-colors hover:text-foreground",
|
|
51
|
+
"min-w-0 truncate font-medium text-muted-foreground transition-colors hover:text-foreground",
|
|
52
52
|
className,
|
|
53
53
|
)}
|
|
54
54
|
{...props}
|
|
@@ -74,7 +74,7 @@ BreadcrumbPage.displayName = "BreadcrumbPage";
|
|
|
74
74
|
|
|
75
75
|
// separator rendered automatically between breadcrumb children
|
|
76
76
|
const BreadcrumbSeparator = () => (
|
|
77
|
-
<span aria-hidden className="flex-shrink-0 text-muted/40">
|
|
77
|
+
<span aria-hidden className="flex-shrink-0 text-muted-foreground/40">
|
|
78
78
|
/
|
|
79
79
|
</span>
|
|
80
80
|
);
|
package/src/ui/button.tsx
CHANGED
|
@@ -9,14 +9,14 @@ const buttonVariants = cva(
|
|
|
9
9
|
variants: {
|
|
10
10
|
variant: {
|
|
11
11
|
default:
|
|
12
|
-
"bg-
|
|
12
|
+
"bg-primary text-primary-foreground hover:-translate-y-0.5 hover:opacity-90",
|
|
13
13
|
destructive:
|
|
14
14
|
"bg-[oklch(47.2%_0.195_25.7)] text-white hover:bg-[oklch(42.5%_0.185_25.7)]",
|
|
15
15
|
outline:
|
|
16
16
|
"border border-border bg-transparent text-foreground hover:bg-default",
|
|
17
17
|
secondary: "bg-default text-default-foreground hover:bg-default/78",
|
|
18
|
-
ghost: "text-muted hover:bg-surface-tertiary hover:text-foreground",
|
|
19
|
-
link: "text-
|
|
18
|
+
ghost: "text-muted-foreground hover:bg-surface-tertiary hover:text-foreground",
|
|
19
|
+
link: "text-primary underline-offset-4 hover:underline active:scale-100",
|
|
20
20
|
},
|
|
21
21
|
size: {
|
|
22
22
|
default: "h-10 px-4 py-2",
|
package/src/ui/checkbox.tsx
CHANGED
|
@@ -10,7 +10,7 @@ const Checkbox = React.forwardRef<
|
|
|
10
10
|
<CheckboxPrimitive.Root
|
|
11
11
|
ref={ref}
|
|
12
12
|
className={cn(
|
|
13
|
-
"peer relative h-4 w-4 shrink-0 rounded-[4px] border border-border bg-field-background transition-[background-color,border-color] duration-200 ease-smooth focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-
|
|
13
|
+
"peer relative h-4 w-4 shrink-0 rounded-[4px] border border-border bg-field-background transition-[background-color,border-color] duration-200 ease-smooth focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground before:absolute before:inset-[-12px] before:content-['']",
|
|
14
14
|
className,
|
|
15
15
|
)}
|
|
16
16
|
{...props}
|
|
@@ -57,7 +57,7 @@ const ClearInput = React.forwardRef<HTMLInputElement, ClearInputProps>(
|
|
|
57
57
|
type="button"
|
|
58
58
|
tabIndex={hasValue ? 0 : -1}
|
|
59
59
|
className={cn(
|
|
60
|
-
"absolute right-2 top-1/2 inline-flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded-md text-muted transition-[opacity,background-color,color,transform] duration-150 ease-out active:duration-100 active:ease-out active:scale-[0.97] hover:bg-surface-tertiary hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring before:absolute before:inset-[-8px] before:content-['']",
|
|
60
|
+
"absolute right-2 top-1/2 inline-flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-[opacity,background-color,color,transform] duration-150 ease-out active:duration-100 active:ease-out active:scale-[0.97] hover:bg-surface-tertiary hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring before:absolute before:inset-[-8px] before:content-['']",
|
|
61
61
|
hasValue ? "opacity-100" : "pointer-events-none opacity-0",
|
|
62
62
|
)}
|
|
63
63
|
aria-hidden={!hasValue}
|
package/src/ui/clear-input.tsx
CHANGED
|
@@ -152,7 +152,7 @@ const ClearInput = React.forwardRef<HTMLInputElement, ClearInputProps>(
|
|
|
152
152
|
{value.length > 0 && !clearing ? (
|
|
153
153
|
<button
|
|
154
154
|
type="button"
|
|
155
|
-
className="t-clear-btn absolute right-2 top-1/2 z-4 inline-flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded-md text-muted transition-[background-color,color,transform] duration-100 ease-out active:scale-[0.92] hover:bg-surface-tertiary/50 hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring"
|
|
155
|
+
className="t-clear-btn absolute right-2 top-1/2 z-4 inline-flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-[background-color,color,transform] duration-100 ease-out active:scale-[0.92] hover:bg-surface-tertiary/50 hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring"
|
|
156
156
|
aria-label={clearLabel}
|
|
157
157
|
onPointerDown={preventFocusSteal}
|
|
158
158
|
onMouseDown={preventFocusSteal}
|
package/src/ui/command.tsx
CHANGED
|
@@ -28,7 +28,7 @@ function CommandDialog({
|
|
|
28
28
|
<DialogContent className="overflow-hidden p-0 sm:max-w-xl">
|
|
29
29
|
{/* The list is pinned rather than `max-h`: a palette that resizes on
|
|
30
30
|
every keystroke shifts the whole dialog under the cursor. */}
|
|
31
|
-
<Command className="[&_[cmdk-list]]:h-80 [&_[cmdk-list]]:max-h-[60dvh] [&_[cmdk-group-heading]]:px-2.5 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-widest [&_[cmdk-group-heading]]:text-muted [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-1.5 [&_[cmdk-input-wrapper]_svg]:h-4 [&_[cmdk-input-wrapper]_svg]:w-4 [&_[cmdk-input]]:h-11 [&_[cmdk-item]]:rounded-md [&_[cmdk-item]]:px-2.5 [&_[cmdk-item]]:py-2 [&_[cmdk-item]_svg]:h-4 [&_[cmdk-item]_svg]:w-4">
|
|
31
|
+
<Command className="[&_[cmdk-list]]:h-80 [&_[cmdk-list]]:max-h-[60dvh] [&_[cmdk-group-heading]]:px-2.5 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-widest [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-1.5 [&_[cmdk-input-wrapper]_svg]:h-4 [&_[cmdk-input-wrapper]_svg]:w-4 [&_[cmdk-input]]:h-11 [&_[cmdk-item]]:rounded-md [&_[cmdk-item]]:px-2.5 [&_[cmdk-item]]:py-2 [&_[cmdk-item]_svg]:h-4 [&_[cmdk-item]_svg]:w-4">
|
|
32
32
|
{children}
|
|
33
33
|
</Command>
|
|
34
34
|
</DialogContent>
|
|
@@ -48,7 +48,7 @@ const CommandInput = React.forwardRef<
|
|
|
48
48
|
<CommandPrimitive.Input
|
|
49
49
|
ref={ref}
|
|
50
50
|
className={cn(
|
|
51
|
-
"flex h-11 w-full max-sm:min-w-0 bg-transparent text-base sm:text-sm outline-none placeholder:text-muted disabled:cursor-not-allowed disabled:opacity-50",
|
|
51
|
+
"flex h-11 w-full max-sm:min-w-0 bg-transparent text-base sm:text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
52
52
|
className,
|
|
53
53
|
)}
|
|
54
54
|
{...props}
|
|
@@ -75,7 +75,7 @@ const CommandEmpty = React.forwardRef<
|
|
|
75
75
|
>(({ className, ...props }, ref) => (
|
|
76
76
|
<CommandPrimitive.Empty
|
|
77
77
|
ref={ref}
|
|
78
|
-
className={cn("py-8 text-center text-sm text-muted", className)}
|
|
78
|
+
className={cn("py-8 text-center text-sm text-muted-foreground", className)}
|
|
79
79
|
{...props}
|
|
80
80
|
/>
|
|
81
81
|
));
|
|
@@ -88,7 +88,7 @@ const CommandGroup = React.forwardRef<
|
|
|
88
88
|
<CommandPrimitive.Group
|
|
89
89
|
ref={ref}
|
|
90
90
|
className={cn(
|
|
91
|
-
"overflow-hidden p-1.5 text-foreground [&_[cmdk-group-heading]]:px-2.5 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-widest [&_[cmdk-group-heading]]:text-muted",
|
|
91
|
+
"overflow-hidden p-1.5 text-foreground [&_[cmdk-group-heading]]:px-2.5 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-widest [&_[cmdk-group-heading]]:text-muted-foreground",
|
|
92
92
|
className,
|
|
93
93
|
)}
|
|
94
94
|
{...props}
|
|
@@ -129,7 +129,7 @@ function CommandShortcut({
|
|
|
129
129
|
}: React.HTMLAttributes<HTMLSpanElement>) {
|
|
130
130
|
return (
|
|
131
131
|
<span
|
|
132
|
-
className={cn("ml-auto text-xs tracking-wide text-muted/90", className)}
|
|
132
|
+
className={cn("ml-auto text-xs tracking-wide text-muted-foreground/90", className)}
|
|
133
133
|
{...props}
|
|
134
134
|
/>
|
|
135
135
|
);
|
package/src/ui/dialog.tsx
CHANGED
|
@@ -251,7 +251,7 @@ const DialogDescription = React.forwardRef<
|
|
|
251
251
|
ref={ref}
|
|
252
252
|
className={cn(
|
|
253
253
|
// `--muted` is ~3.5:1 on overlay; mix toward overlay-foreground for 4.5:1.
|
|
254
|
-
"text-sm leading-relaxed text-[color-mix(in_oklch,var(--overlay-foreground)_72%,var(--overlay))]",
|
|
254
|
+
"text-sm leading-relaxed text-[color-mix(in_oklch,var(--color-popover-foreground,var(--overlay-foreground))_72%,var(--color-popover,var(--overlay)))]",
|
|
255
255
|
className,
|
|
256
256
|
)}
|
|
257
257
|
{...props}
|
package/src/ui/input-group.tsx
CHANGED
|
@@ -30,7 +30,7 @@ function InputGroup({ className, ...props }: React.ComponentProps<"div">) {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
const inputGroupAddonVariants = cva(
|
|
33
|
-
"text-muted flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-md group-data-[disabled=true]/input-group:opacity-50",
|
|
33
|
+
"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-md group-data-[disabled=true]/input-group:opacity-50",
|
|
34
34
|
{
|
|
35
35
|
variants: {
|
|
36
36
|
align: {
|
|
@@ -112,7 +112,7 @@ function InputGroupText({ className, ...props }: React.ComponentProps<"span">) {
|
|
|
112
112
|
return (
|
|
113
113
|
<span
|
|
114
114
|
className={cn(
|
|
115
|
-
"text-muted flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
|
|
115
|
+
"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
|
|
116
116
|
className,
|
|
117
117
|
)}
|
|
118
118
|
{...props}
|
package/src/ui/kbd.tsx
CHANGED
|
@@ -6,7 +6,7 @@ const Kbd = React.forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(
|
|
|
6
6
|
<kbd
|
|
7
7
|
ref={ref}
|
|
8
8
|
className={cn(
|
|
9
|
-
"pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded-md bg-surface-secondary px-1.5 font-mono text-[10px] font-medium text-muted",
|
|
9
|
+
"pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded-md bg-surface-secondary px-1.5 font-mono text-[10px] font-medium text-muted-foreground",
|
|
10
10
|
className,
|
|
11
11
|
)}
|
|
12
12
|
{...props}
|
|
@@ -27,14 +27,14 @@ export function LabeledSwitchRow({
|
|
|
27
27
|
<div className="flex items-center justify-between gap-3 max-sm:flex-wrap">
|
|
28
28
|
<div className="flex min-w-0 items-start gap-2">
|
|
29
29
|
{icon ? (
|
|
30
|
-
<span className="mt-0.5 shrink-0 text-muted">{icon}</span>
|
|
30
|
+
<span className="mt-0.5 shrink-0 text-muted-foreground">{icon}</span>
|
|
31
31
|
) : null}
|
|
32
32
|
<div className="min-w-0">
|
|
33
33
|
<Label htmlFor={id} className="text-sm font-medium">
|
|
34
34
|
{label}
|
|
35
35
|
</Label>
|
|
36
36
|
{description ? (
|
|
37
|
-
<p className="mt-1 text-xs text-muted text-pretty">{description}</p>
|
|
37
|
+
<p className="mt-1 text-xs text-muted-foreground text-pretty">{description}</p>
|
|
38
38
|
) : null}
|
|
39
39
|
</div>
|
|
40
40
|
</div>
|
package/src/ui/progress.tsx
CHANGED
|
@@ -15,7 +15,7 @@ const Progress = React.forwardRef<
|
|
|
15
15
|
{...props}
|
|
16
16
|
>
|
|
17
17
|
<ProgressPrimitive.Indicator
|
|
18
|
-
className="h-full w-full flex-1 rounded-full bg-
|
|
18
|
+
className="h-full w-full flex-1 rounded-full bg-primary transition-transform duration-300 ease-smooth"
|
|
19
19
|
style={{ transform: `translateX(-${100 - (value ?? 0)}%)` }}
|
|
20
20
|
/>
|
|
21
21
|
</ProgressPrimitive.Root>
|
package/src/ui/radix-select.tsx
CHANGED
|
@@ -40,7 +40,7 @@ function SelectTrigger({
|
|
|
40
40
|
data-slot="select-trigger"
|
|
41
41
|
data-size={size}
|
|
42
42
|
className={cn(
|
|
43
|
-
"flex w-fit items-center justify-between gap-2 rounded-field border border-border bg-field-background px-3.5 py-2 text-sm whitespace-nowrap ring-offset-background transition-[border-color,box-shadow,background-color,transform] duration-200 ease-smooth active:duration-100 active:ease-out active:scale-[0.98] placeholder:text-field-placeholder focus-visible:border-focus-border focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger data-placeholder:text-muted [&_svg:not([class*='text-'])]:text-muted data-[size=default]:h-10 data-[size=sm]:h-8 data-[slot=select-value]:*:line-clamp-1 data-[slot=select-value]:*:flex data-[slot=select-value]:*:items-center data-[slot=select-value]:*:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
43
|
+
"flex w-fit items-center justify-between gap-2 rounded-field border border-border bg-field-background px-3.5 py-2 text-sm whitespace-nowrap ring-offset-background transition-[border-color,box-shadow,background-color,transform] duration-200 ease-smooth active:duration-100 active:ease-out active:scale-[0.98] placeholder:text-field-placeholder focus-visible:border-focus-border focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground data-[size=default]:h-10 data-[size=sm]:h-8 data-[slot=select-value]:*:line-clamp-1 data-[slot=select-value]:*:flex data-[slot=select-value]:*:items-center data-[slot=select-value]:*:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
44
44
|
className,
|
|
45
45
|
)}
|
|
46
46
|
{...props}
|
|
@@ -100,7 +100,7 @@ function SelectLabel({
|
|
|
100
100
|
<SelectPrimitive.Label
|
|
101
101
|
data-slot="select-label"
|
|
102
102
|
className={cn(
|
|
103
|
-
"text-muted px-2.5 py-1.5 text-xs font-semibold uppercase tracking-widest",
|
|
103
|
+
"text-muted-foreground px-2.5 py-1.5 text-xs font-semibold uppercase tracking-widest",
|
|
104
104
|
className,
|
|
105
105
|
)}
|
|
106
106
|
{...props}
|
|
@@ -117,7 +117,7 @@ function SelectItem({
|
|
|
117
117
|
<SelectPrimitive.Item
|
|
118
118
|
data-slot="select-item"
|
|
119
119
|
className={cn(
|
|
120
|
-
"[&_svg:not([class*='text-'])]:text-muted relative flex w-full cursor-pointer select-none items-center gap-2 rounded-lg py-2 pl-2.5 pr-8 text-sm outline-hidden [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 last:[span]:*:flex last:[span]:*:items-center last:[span]:*:gap-2",
|
|
120
|
+
"[&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-pointer select-none items-center gap-2 rounded-lg py-2 pl-2.5 pr-8 text-sm outline-hidden [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 last:[span]:*:flex last:[span]:*:items-center last:[span]:*:gap-2",
|
|
121
121
|
menuItemClass,
|
|
122
122
|
className,
|
|
123
123
|
)}
|
package/src/ui/search-input.tsx
CHANGED
|
@@ -16,7 +16,7 @@ const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(
|
|
|
16
16
|
leading={
|
|
17
17
|
<IconSearch
|
|
18
18
|
size={16}
|
|
19
|
-
className="pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 shrink-0 text-muted"
|
|
19
|
+
className="pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 shrink-0 text-muted-foreground"
|
|
20
20
|
/>
|
|
21
21
|
}
|
|
22
22
|
{...props}
|
package/src/ui/select.tsx
CHANGED
|
@@ -25,7 +25,7 @@ const SelectTrigger = React.forwardRef<
|
|
|
25
25
|
>
|
|
26
26
|
{children}
|
|
27
27
|
<SelectPrimitive.Icon asChild>
|
|
28
|
-
<IconChevronDown className="h-4 w-4 text-muted/85" />
|
|
28
|
+
<IconChevronDown className="h-4 w-4 text-muted-foreground/85" />
|
|
29
29
|
</SelectPrimitive.Icon>
|
|
30
30
|
</SelectPrimitive.Trigger>
|
|
31
31
|
));
|
|
@@ -38,7 +38,7 @@ const SelectScrollUpButton = React.forwardRef<
|
|
|
38
38
|
<SelectPrimitive.ScrollUpButton
|
|
39
39
|
ref={ref}
|
|
40
40
|
className={cn(
|
|
41
|
-
"flex cursor-default items-center justify-center py-1 text-muted",
|
|
41
|
+
"flex cursor-default items-center justify-center py-1 text-muted-foreground",
|
|
42
42
|
className,
|
|
43
43
|
)}
|
|
44
44
|
{...props}
|
|
@@ -55,7 +55,7 @@ const SelectScrollDownButton = React.forwardRef<
|
|
|
55
55
|
<SelectPrimitive.ScrollDownButton
|
|
56
56
|
ref={ref}
|
|
57
57
|
className={cn(
|
|
58
|
-
"flex cursor-default items-center justify-center py-1 text-muted",
|
|
58
|
+
"flex cursor-default items-center justify-center py-1 text-muted-foreground",
|
|
59
59
|
className,
|
|
60
60
|
)}
|
|
61
61
|
{...props}
|
|
@@ -107,7 +107,7 @@ const SelectLabel = React.forwardRef<
|
|
|
107
107
|
<SelectPrimitive.Label
|
|
108
108
|
ref={ref}
|
|
109
109
|
className={cn(
|
|
110
|
-
"px-2.5 py-1.5 text-xs font-semibold uppercase tracking-widest text-muted",
|
|
110
|
+
"px-2.5 py-1.5 text-xs font-semibold uppercase tracking-widest text-muted-foreground",
|
|
111
111
|
className,
|
|
112
112
|
)}
|
|
113
113
|
{...props}
|
package/src/ui/sonner.tsx
CHANGED
|
@@ -25,18 +25,18 @@ function SonnerToaster(props: ToasterProps) {
|
|
|
25
25
|
toast:
|
|
26
26
|
"group toast glass-panel-strong flex w-full items-center gap-3 rounded-lg px-4 py-3 text-sm text-foreground smooth-shadow-ring-md",
|
|
27
27
|
title: "font-medium leading-snug",
|
|
28
|
-
description: "text-[13px] leading-snug text-muted",
|
|
28
|
+
description: "text-[13px] leading-snug text-muted-foreground",
|
|
29
29
|
actionButton:
|
|
30
|
-
"rounded-lg bg-
|
|
30
|
+
"rounded-lg bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground transition-opacity hover:opacity-90",
|
|
31
31
|
cancelButton:
|
|
32
|
-
"rounded-lg bg-surface-secondary px-2.5 py-1 text-xs font-medium text-muted transition-colors hover:bg-surface-tertiary",
|
|
32
|
+
"rounded-lg bg-surface-secondary px-2.5 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-surface-tertiary",
|
|
33
33
|
closeButton:
|
|
34
34
|
"rounded-lg bg-default px-2.5 py-1 text-xs font-medium text-foreground transition-colors hover:bg-default/78",
|
|
35
|
-
loader: "text-muted",
|
|
35
|
+
loader: "text-muted-foreground",
|
|
36
36
|
success: "[&_[data-icon]]:text-success",
|
|
37
37
|
error: "[&_[data-icon]]:text-danger",
|
|
38
38
|
warning: "[&_[data-icon]]:text-warning",
|
|
39
|
-
info: "[&_[data-icon]]:text-
|
|
39
|
+
info: "[&_[data-icon]]:text-primary",
|
|
40
40
|
},
|
|
41
41
|
}}
|
|
42
42
|
{...props}
|