migrate 3

This commit is contained in:
tresabhi committed 2026-08-18 13:57:01 -05:00
1 parent de8b3959b3
commit 5285d081e4
29 files changed
+740 -83

No files matched your search

@@ -0,0 +1,86 @@
.button {
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
border-radius: var(--max-size);
padding: var(--space-3) var(--space-4);
border: none;
font-family: var(--font-family-regular);
font-size: 0.75rem;
color: var(--gray-1);
font-weight: var(--weight-medium);
cursor: pointer;
&[data-size="minor"] {
font-size: 0.75rem;
}
&[data-array="true"] {
&:first-child {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
&:last-child {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
}
&[data-parent-array="true"] {
*:first-child > & {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
*:last-child > & {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
}
svg,
img {
width: 1em;
height: 1em;
}
&[data-light-text="true"] {
color: var(--white-a12);
}
&[data-variant="solid"] {
background-color: var(--accent-8);
}
&[data-variant="surface"],
&[data-variant="soft"] {
background-color: var(--accent-3);
color: var(--gray-12);
}
&[data-variant="inverted"] {
background-color: var(--accent-12);
color: var(--accent-1);
}
&[data-variant="ghost"],
&[data-variant="outline"] {
background: none;
color: var(--accent-12);
}
&[data-variant="ghost"] {
padding: 0;
}
&[data-variant="surface"],
&[data-variant="outline"] {
outline: var(--space-1) solid var(--accent-6);
}
}
@@ -0,0 +1,54 @@
import type { ComponentProps } from "react";
import { classNames } from "../../ui/classNames";
import type { Color } from "../../ui/color";
import styles from "./index.module.css";
export interface ButtonProps extends ComponentProps<"button"> {
color?: Color;
radius?: `${1 | 2 | 3}` | "max";
variant?: "solid" | "surface" | "soft" | "inverted" | "ghost" | "outline";
size?: "regular" | "minor";
array?: boolean;
parentArray?: boolean;
}
export const LIGHT_TEXT_COLORS = new Set<Color>([
"gold",
"bronze",
"teal",
"grass",
"amber",
"plum",
"pink",
"brown",
"crimson",
"jade",
"blue",
"tomato",
]);
export function Button({
className,
color,
variant = "solid",
style,
radius = "max",
size = "regular",
array = false,
parentArray = false,
...props
}: ButtonProps) {
return (
<button
className={classNames("composable-radius", styles.button, className)}
data-accent={color}
data-variant={variant}
data-light-text={variant === "solid"}
data-radius={radius}
data-size={size}
data-array={array}
data-parent-array={parentArray}
{...props}
/>
);
}