Files
wehub-resource-sync e7738de6d2
CI / Deep Native Runtime Cases (1/6) (push) Has been skipped
CI / Native Preflight (push) Failing after 1s
CI / Native Runtime Cases (1/2) (push) Failing after 0s
CI / Native Runtime Cases (2/2) (push) Failing after 1s
CI / Native Metadata Reports (push) Failing after 0s
CI / Native Direct Backend Artifacts (push) Failing after 0s
CI / Native Sanitizer Smoke (push) Failing after 1s
CI / Command Contract Snapshots (push) Failing after 1s
CI / Deep Conformance Suite (push) Has been skipped
CI / Graph Build Perf (push) Failing after 1s
CI / Deep Native Preflight (push) Has been skipped
CI / Deep Native Runtime Cases (2/6) (push) Has been skipped
CI / Deep Native Runtime Cases (3/6) (push) Has been skipped
CI / Conformance Suite (push) Failing after 1s
CI / Workspace Checks (push) Failing after 0s
CI / Deep Native Runtime Cases (5/6) (push) Has been skipped
CI / Deep Native Runtime Cases (6/6) (push) Has been skipped
CI / Deep Native Runtime Cases (4/6) (push) Has been skipped
CI / Deep Graph Build Perf (push) Has been skipped
chore: import upstream snapshot with attribution
2026-07-13 12:29:30 +08:00

47 lines
1.3 KiB
TypeScript

import Link from "next/link";
import type { ButtonHTMLAttributes, ComponentProps } from "react";
const SIZES = {
sm: "h-8 px-4 text-[0.8125rem]",
md: "h-10 px-6 text-sm",
lg: "h-11 gap-2 px-8 text-[0.9375rem]",
};
const VARIANTS = {
default: "border-border bg-bg text-fg hover:border-fg",
primary:
"border-accent bg-accent text-accent-fg hover:bg-transparent hover:text-accent",
};
type ButtonVariant = keyof typeof VARIANTS;
type ButtonSize = keyof typeof SIZES;
type ButtonStyleProps = {
variant?: ButtonVariant;
size?: ButtonSize;
className?: string;
};
function classes({ variant = "default", size = "md", className = "" }: ButtonStyleProps): string {
return [
"inline-flex items-center justify-center rounded-md border font-medium no-underline transition",
VARIANTS[variant],
SIZES[size],
className,
]
.filter(Boolean)
.join(" ");
}
type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & ButtonStyleProps;
export function Button({ variant, size, className, ...rest }: ButtonProps) {
return <button className={classes({ variant, size, className })} {...rest} />;
}
type ButtonLinkProps = ComponentProps<typeof Link> & ButtonStyleProps;
export function ButtonLink({ variant, size, className, ...rest }: ButtonLinkProps) {
return <Link className={classes({ variant, size, className })} {...rest} />;
}