{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "button",
  "title": "Button",
  "description": "A tactile neumorphic button with raised and pressed states.",
  "registryDependencies": [
    "@neumorphism-ui/utils"
  ],
  "files": [
    {
      "path": "src/components/ui/button.tsx",
      "content": "import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst buttonVariants = {\n  default:\n    \"border-[color:var(--neu-edge)] bg-[var(--neu-surface)] [background-image:var(--neu-fill-raised)] active:[background-image:none] text-[var(--foreground)] shadow-[var(--neu-shadow-raised-sm)] hover:shadow-[var(--neu-shadow-hover)] active:shadow-[var(--neu-shadow-inset)]\",\n  primary:\n    \"border-[color:var(--neu-edge)] bg-[var(--neu-surface)] [background-image:var(--neu-fill-raised)] active:[background-image:var(--neu-fill-inset)] text-[var(--neu-accent-ink)] shadow-[var(--neu-shadow-raised-sm)] hover:shadow-[var(--neu-shadow-hover)] active:shadow-[var(--neu-shadow-inset)]\",\n  soft:\n    \"border-transparent bg-[var(--neu-surface-soft)] text-[var(--foreground)] shadow-none hover:bg-[var(--neu-surface)] hover:shadow-[var(--neu-shadow-raised-sm)] active:shadow-[var(--neu-shadow-inset)]\",\n  ghost:\n    \"border-transparent bg-transparent text-[var(--foreground)] shadow-none hover:bg-[var(--neu-surface-soft)] active:bg-[var(--neu-surface-low)] active:shadow-[var(--neu-shadow-inset)]\",\n  destructive:\n    \"border-transparent bg-[color:var(--destructive)]/8 text-[var(--neu-error-text)] shadow-none hover:shadow-[var(--neu-shadow-raised-sm)] active:shadow-[var(--neu-shadow-inset)]\",\n} as const;\n\nconst buttonSizes = {\n  sm: \"h-8 px-3 text-xs\",\n  default: \"h-10 px-4 text-sm\",\n  lg: \"h-12 px-6 text-base\",\n  icon: \"size-10 p-0\",\n} as const;\n\ntype ButtonVariant = keyof typeof buttonVariants;\ntype ButtonSize = keyof typeof buttonSizes;\n\nexport interface ButtonProps extends React.ComponentProps<\"button\"> {\n  variant?: ButtonVariant;\n  size?: ButtonSize;\n}\n\nfunction Button({\n  className,\n  variant = \"default\",\n  size = \"default\",\n  type = \"button\",\n  ...props\n}: ButtonProps) {\n  return (\n    <button\n      type={type}\n      data-slot=\"button\"\n      data-variant={variant}\n      data-size={size}\n      className={cn(\n        \"inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-[var(--neu-radius-control)] border font-semibold leading-5 tracking-normal outline-hidden transition-[box-shadow,background-color,color] duration-[var(--neu-duration)] motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-3 focus-visible:outline-[color:var(--ring)] disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:[background-image:none] disabled:border-[color:var(--muted-foreground)]/30 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n        buttonVariants[variant],\n        buttonSizes[size],\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport { Button, buttonSizes, buttonVariants };\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}