Files
Neon-Desk/components/ui/button.tsx
francy51 17de3dd72d Add history window controls and expand taxonomy pack support
- add 3Y/5Y/10Y financial history filtering and reorganize normalization details UI
- add new fiscal taxonomy surface/income bridge/KPI packs and update Rust taxonomy loading
- auto-detect Homebrew SQLite for native `sqlite-vec` in local dev/e2e with docs and env guidance
2026-03-18 23:40:28 -04:00

45 lines
1.5 KiB
TypeScript

import { cn } from "@/lib/utils";
type ButtonVariant = "primary" | "ghost" | "danger" | "secondary";
type ButtonSize = "default" | "compact";
type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {
variant?: ButtonVariant;
size?: ButtonSize;
};
const variantMap: Record<ButtonVariant, string> = {
primary:
"border-[color:var(--line-strong)] bg-[color:var(--accent)] text-[#16181c] hover:bg-[color:var(--accent-strong)]",
secondary:
"border-[color:var(--line-weak)] bg-[color:var(--panel-bright)] text-[color:var(--terminal-bright)] hover:border-[color:var(--line-strong)] hover:bg-[color:var(--panel)]",
ghost:
"border-[color:var(--line-weak)] bg-transparent text-[color:var(--terminal-bright)] hover:border-[color:var(--line-strong)] hover:bg-[color:var(--panel-soft)]",
danger:
"border-[color:var(--danger)] bg-[color:var(--danger-soft)] text-[#ffc9c9] hover:bg-[color:var(--danger)] hover:text-[#1e0d0d]",
};
const sizeMap: Record<ButtonSize, string> = {
default: "min-h-11 px-3 py-2 text-sm gap-2",
compact: "min-h-8 px-2.5 py-1.5 text-xs gap-1.5",
};
export function Button({
className,
variant = "primary",
size = "default",
...props
}: ButtonProps) {
return (
<button
className={cn(
"inline-flex items-center justify-center rounded-lg border font-medium transition duration-150 disabled:cursor-not-allowed disabled:opacity-50",
variantMap[variant],
sizeMap[size],
className,
)}
{...props}
/>
);
}