{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "button",
  "title": "Button",
  "description": "Flag button: primary (action fill), secondary, outline, ghost, destructive, link; Flag focus ring, lift and press states.",
  "dependencies": [
    "radix-ui@^1.6.7",
    "class-variance-authority@^0.7.1"
  ],
  "registryDependencies": [
    "@flag/utils"
  ],
  "files": [
    {
      "path": "registry/flag/ui/button.tsx",
      "content": "import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\n// Flag COMPONENTS.md \"Buttons\": 2.5rem controls, radius-md, 1px border,\n// hover lifts 1px and strengthens the border, active presses back, focus is\n// --focus-ring, disabled is 50% with no lift. Tier A: .btn with .btn-primary,\n// -secondary, -outline, -ghost, -danger or -link; sizes .btn-sm, .btn-lg, .btn-icon.\nconst buttonVariants = cva(\n  \"inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 rounded-md border border-border font-sans whitespace-nowrap [transition:var(--transition-fast)] outline-none select-none focus-visible:shadow-(--focus-ring) motion-safe:hover:-translate-y-px motion-safe:active:translate-y-0 motion-safe:active:scale-[0.98] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-invalid:border-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n  {\n    variants: {\n      variant: {\n        default:\n          \"bg-primary bg-(image:--primary-gradient) text-primary-foreground hover:border-(--color-accent) hover:bg-(--primary-hover) hover:bg-(image:--primary-gradient-hover)\",\n        destructive:\n          \"border-(--color-status-error-border) bg-(--color-status-error-bg) text-(--color-status-error-fg) hover:border-destructive\",\n        outline:\n          \"border-border-strong bg-transparent text-foreground hover:border-(--color-accent) hover:bg-(--color-overlay-soft)\",\n        secondary:\n          \"bg-secondary text-secondary-foreground hover:border-(--color-accent) hover:bg-surface-1\",\n        ghost:\n          \"bg-transparent text-subtle hover:border-(--color-accent) hover:bg-(--color-overlay-soft) hover:text-foreground\",\n        link: \"border-transparent bg-transparent text-link underline-offset-4 hover:underline motion-safe:hover:translate-y-0\",\n      },\n      size: {\n        default: \"h-10 px-3 text-base\",\n        xs: \"h-6 gap-1 rounded-sm px-2 text-overline [&_svg:not([class*='size-'])]:size-3\",\n        sm: \"h-8 gap-1.5 rounded-sm px-2.5 text-caption\",\n        lg: \"h-11 px-4 text-base\",\n        icon: \"size-10\",\n        \"icon-xs\": \"size-6 rounded-sm [&_svg:not([class*='size-'])]:size-3\",\n        \"icon-sm\": \"size-8 rounded-sm\",\n        \"icon-lg\": \"size-11\",\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  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean\n  }) {\n  const Comp = asChild ? Slot.Root : \"button\"\n\n  return (\n    <Comp\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"
    }
  ],
  "type": "registry:ui"
}