{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "button",
  "title": "Button",
  "author": "andongmin94",
  "dependencies": [
    "@base-ui/react"
  ],
  "files": [
    {
      "path": "src/components/ui/button.tsx",
      "content": "\"use client\";\n\nimport { Button as ButtonPrimitive } from \"@base-ui/react/button\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst raisedPress =\n  \"shadow-shadow hover:not-data-disabled:translate-x-pressX hover:not-data-disabled:translate-y-pressY hover:not-data-disabled:shadow-press focus-visible:not-data-disabled:translate-x-pressX focus-visible:not-data-disabled:translate-y-pressY focus-visible:not-data-disabled:shadow-press active:not-data-disabled:translate-x-boxShadowX active:not-data-disabled:translate-y-boxShadowY active:not-data-disabled:shadow-[0_0_0_0_var(--border)]\";\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center whitespace-nowrap rounded-base text-sm font-base ring-offset-white transition-[translate,box-shadow,background-color,color] duration-[140ms] ease-[ease] motion-reduce:transition-none gap-2 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50\",\n  {\n    variants: {\n      variant: {\n        default: `text-main-foreground bg-main border-2 border-border ${raisedPress}`,\n        outline: `bg-background text-foreground border-2 border-border ${raisedPress}`,\n        secondary: `bg-secondary-background text-foreground border-2 border-border ${raisedPress}`,\n        ghost:\n          \"border-2 border-transparent bg-transparent text-foreground hover:border-border hover:bg-main hover:text-main-foreground\",\n        destructive: `bg-destructive text-white border-2 border-border ${raisedPress}`,\n        link: \"text-primary underline-offset-4 hover:underline\",\n        noShadow: \"text-main-foreground bg-main border-2 border-border\",\n        neutral: `bg-secondary-background text-foreground border-2 border-border ${raisedPress}`,\n        reverse:\n          \"text-main-foreground bg-main border-2 border-border hover:not-data-disabled:translate-x-reverseBoxShadowX hover:not-data-disabled:translate-y-reverseBoxShadowY hover:not-data-disabled:shadow-shadow active:not-data-disabled:translate-x-0 active:not-data-disabled:translate-y-0 active:not-data-disabled:shadow-[0_0_0_0_var(--border)]\",\n      },\n      size: {\n        default: \"h-10 px-4 py-2\",\n        xs: \"h-7 px-2 text-xs\",\n        sm: \"h-9 px-3\",\n        lg: \"h-11 px-8\",\n        icon: \"size-10\",\n        \"icon-xs\": \"size-7\",\n        \"icon-sm\": \"size-9\",\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  children,\n  render,\n  ...props\n}: ButtonPrimitive.Props &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean;\n  }) {\n  const renderElement = asChild\n    ? (React.Children.toArray(children).find(React.isValidElement) as React.ReactElement)\n    : render;\n\n  return (\n    <ButtonPrimitive\n      data-slot=\"button\"\n      className={cn(buttonVariants({ variant, size, className }))}\n      render={renderElement}\n      {...props}\n    >\n      {asChild ? undefined : children}\n    </ButtonPrimitive>\n  );\n}\n\nexport { Button, buttonVariants };\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}