import { forwardRef, type ButtonHTMLAttributes, type InputHTMLAttributes, type LabelHTMLAttributes, type TextareaHTMLAttributes, type HTMLAttributes, type SelectHTMLAttributes } from 'react';
import { cva, type VariantProps } from 'class-variance-authority';
import { cn } from '../../lib/cn';
const buttonStyles = cva(
'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[#00FF6A]/40 disabled:opacity-50 disabled:pointer-events-none whitespace-nowrap',
{
variants: {
variant: {
primary: 'bg-[#00FF6A] text-[#0A0A0A] hover:bg-[#00CC55]',
secondary: 'bg-[#1A1A1A] text-[#F5F5F5] border border-[#333] hover:bg-[#222] hover:border-[#444]',
ghost: 'text-[#999] hover:text-[#F5F5F5] hover:bg-[#1A1A1A]',
danger: 'bg-[#FF3B3B] text-white hover:bg-[#D32F2F]',
outline: 'border border-[#333] bg-transparent text-[#F5F5F5] hover:bg-[#1A1A1A]',
},
size: {
sm: 'h-8 px-3 text-xs',
md: 'h-9 px-4',
lg: 'h-11 px-6',
icon: 'h-9 w-9',
},
},
defaultVariants: { variant: 'primary', size: 'md' },
},
);
export interface ButtonProps
extends ButtonHTMLAttributes,
VariantProps {}
export const Button = forwardRef(
({ className, variant, size, ...props }, ref) => (
),
);
Button.displayName = 'Button';
export const Input = forwardRef>(
({ className, ...props }, ref) => (
),
);
Input.displayName = 'Input';
export const Textarea = forwardRef>(
({ className, ...props }, ref) => (
),
);
Textarea.displayName = 'Textarea';
export const Label = forwardRef>(
({ className, ...props }, ref) => (
),
);
Label.displayName = 'Label';
export function Card({ className, ...props }: HTMLAttributes) {
return (
);
}
export function CardHeader({ className, ...props }: HTMLAttributes) {
return ;
}
export function CardTitle({ className, ...props }: HTMLAttributes) {
return ;
}
export function CardDescription({ className, ...props }: HTMLAttributes) {
return ;
}
export function CardContent({ className, ...props }: HTMLAttributes) {
return ;
}
export function CardFooter({ className, ...props }: HTMLAttributes) {
return ;
}
const badgeStyles = cva(
'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium',
{
variants: {
variant: {
default: 'bg-[#1A1A1A] text-[#F5F5F5] border border-[#333]',
success: 'bg-[#00FF6A]/10 text-[#00FF6A] border border-[#00FF6A]/20',
warn: 'bg-[#FFA500]/10 text-[#FFA500] border border-[#FFA500]/20',
danger: 'bg-[#FF3B3B]/10 text-[#FF3B3B] border border-[#FF3B3B]/20',
info: 'bg-[#3B82F6]/10 text-[#3B82F6] border border-[#3B82F6]/20',
muted: 'bg-[#1A1A1A] text-[#666] border border-[#222]',
},
},
defaultVariants: { variant: 'default' },
},
);
export interface BadgeProps extends HTMLAttributes, VariantProps {}
export function Badge({ className, variant, ...props }: BadgeProps) {
return ;
}
export const Select = forwardRef>(
({ className, children, ...props }, ref) => (
),
);
Select.displayName = 'Select';
export function Separator({ className, ...props }: HTMLAttributes) {
return ;
}
export function Skeleton({ className, ...props }: HTMLAttributes) {
return ;
}
export function EmptyState({ icon, title, description, action }: { icon?: React.ReactNode; title: string; description?: string; action?: React.ReactNode }) {
return (
{icon &&
{icon}
}
{title}
{description &&
{description}
}
{action}
);
}