{"name":"button","dependencies":["@base-ui/react","class-variance-authority"],"files":[{"path":"button.tsx","content":"import { Button as ButtonPrimitive } from \"@base-ui/react/button\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n  cn(\n    \"group/button font-head font-medium inline-flex cursor-pointer items-center justify-center gap-2 rounded whitespace-nowrap select-none transition-all duration-200\",\n    \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-60\",\n    \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary aria-invalid:border-destructive\",\n    // Icons keep their own size; we only set a default when none is given so\n    // Neobrutalism's h-4/size-4 icons aren't overridden.\n    \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n  ),\n  {\n    variants: {\n      variant: {\n        default:\n          \"border-2 border-black bg-primary text-primary-foreground shadow-md transition duration-200 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:bg-primary-hover hover:shadow-lg active:translate-x-1 active:translate-y-1 active:shadow-none\",\n        secondary:\n          \"border-2 border-black bg-secondary text-secondary-foreground shadow-md transition duration-200 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:bg-secondary-hover hover:shadow-lg active:translate-x-1 active:translate-y-1 active:shadow-none\",\n        destructive:\n          \"border-2 border-black bg-destructive text-destructive-foreground shadow-md transition duration-200 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:bg-destructive/90 hover:shadow-lg active:translate-x-1 active:translate-y-1 active:shadow-none\",\n        outline:\n          \"border-2 bg-transparent shadow-md transition duration-200 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-lg active:translate-x-1 active:translate-y-1 active:shadow-none\",\n        ghost: \"bg-transparent hover:bg-accent\",\n        link: \"bg-transparent hover:underline\",\n      },\n      size: {\n        default: \"px-4 py-1.5 text-base\",\n        xs: \"px-2 py-0.5 text-xs\",\n        sm: \"px-3 py-1 text-sm\",\n        lg: \"px-6 py-2 text-base lg:px-8 lg:py-3 lg:text-lg\",\n        icon: \"p-2\",\n        \"icon-xs\": \"p-1\",\n        \"icon-sm\": \"p-1.5\",\n        \"icon-lg\": \"p-3\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nfunction Button({\n  className,\n  variant = \"default\",\n  size = \"default\",\n  ...props\n}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {\n  return (\n    <ButtonPrimitive\n      data-slot=\"button\"\n      data-variant={variant}\n      data-size={size}\n      className={cn(buttonVariants({ variant, size, className }))}\n      {...props}\n    />\n  )\n}\n\nexport { Button, buttonVariants }\n","type":"registry:ui","target":"components/ui/button.tsx"}],"type":"registry:ui"}