{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "components-button",
  "title": "Button",
  "description": "A button component with a variety of styles and animations.",
  "dependencies": [
    "class-variance-authority"
  ],
  "registryDependencies": [
    "@azemmur/primitives-button"
  ],
  "files": [
    {
      "path": "registry/components/azemmur/button/index.tsx",
      "content": "// Copyright (c) 2026 raouf.codes - Azemmur\n\n'use client';\n\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport {\n  Button as ButtonPrimitive,\n  type ButtonProps as ButtonPrimitiveProps,\n} from '@/components/azemmur/components/primitives/button';\n\nconst buttonVariants = cva(\n  [\n    'inline-flex items-center justify-center gap-2 whitespace-nowrap',\n    'select-none touch-manipulation text-sm font-medium shrink-0',\n    'transition-[box-shadow,_color,_background-color,_border-color,_outline-color,_text-decoration-color,_fill,_stroke]',\n    'outline-none',\n    'disabled:pointer-events-none disabled:opacity-50',\n    '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n    \"[&_svg:not([class*='size-'])]:size-4\",\n    'aria-invalid:ring-error/20 dark:aria-invalid:ring-error/40 aria-invalid:border-error',\n  ].join(' '),\n  {\n    variants: {\n      intent: {\n        primary: 'bg-primary text-primary border-primary',\n        accent: 'bg-accent text-accent border-accent',\n        secondary: 'bg-secondary text-secondary border-secondary',\n        success: 'bg-success text-success border-success',\n        info: 'bg-info text-info border-info',\n        warning: 'bg-warning text-warning border-warning',\n        error: 'bg-error text-error border-error',\n      },\n      styling: {\n        solid: 'border-none',\n        outline: 'border border-2 bg-background hover:bg-current/20',\n        ghost: 'bg-transparent',\n        link: 'bg-transparent underline-offset-4 hover:underline focus-visible:underline focus-visible:ring-0 focus-visible:bg-ring/40 focus-visible:rounded-none focus-visible:p-0',\n      },\n      size: {\n        sm: 'h-8 px-2 gap-1.5 has-[>svg]:px-2.5',\n        md: 'h-9 px-4 py-2 has-[>svg]:px-4',\n        lg: 'h-10 px-6 has-[>svg]:px-4',\n        'icon-sm': 'size-8 p-0',\n        'icon-md': 'size-9 p-0',\n        'icon-lg': 'size-10 p-0',\n      },\n      shape: {\n        rounded: 'rounded-md',\n        pill: 'rounded-full',\n        sharp: 'rounded-none',\n      },\n      elevation: {\n        raised:\n          'shadow-sm hover:shadow-md active:shadow-none hover:opacity-95 active:opacity-90',\n        floating:\n          'shadow-md hover:shadow-lg active:shadow-sm hover:opacity-95 active:opacity-90',\n      },\n    },\n    compoundVariants: [\n      {\n        intent: 'primary',\n        styling: 'solid',\n        className: 'text-primary-foreground',\n      },\n      {\n        intent: 'accent',\n        styling: 'solid',\n        className: 'text-accent-foreground',\n      },\n      {\n        intent: 'secondary',\n        styling: 'solid',\n        className: 'text-secondary-foreground',\n      },\n      {\n        intent: 'success',\n        styling: 'solid',\n        className: 'text-success-foreground',\n      },\n      {\n        intent: 'info',\n        styling: 'solid',\n        className: 'text-info-foreground',\n      },\n      {\n        intent: 'warning',\n        styling: 'solid',\n        className: 'text-warning-foreground',\n      },\n      {\n        intent: 'error',\n        styling: 'solid',\n        className: 'text-error-foreground',\n      },\n      {\n        styling: 'ghost',\n        elevation: 'raised',\n        className: 'shadow-none hover:shadow-none active:shadow-none',\n      },\n      {\n        styling: 'ghost',\n        elevation: 'floating',\n        className: 'shadow-none hover:shadow-none active:shadow-none',\n      },\n      {\n        styling: 'link',\n        elevation: 'raised',\n        className: 'shadow-none hover:shadow-none active:shadow-none',\n      },\n      {\n        styling: 'link',\n        elevation: 'floating',\n        className: 'shadow-none hover:shadow-none active:shadow-none',\n      },\n    ],\n    defaultVariants: {\n      intent: 'primary',\n      styling: 'solid',\n      size: 'md',\n      shape: 'rounded',\n      elevation: 'raised',\n    },\n  },\n);\n\ntype ButtonProps = ButtonPrimitiveProps & VariantProps<typeof buttonVariants>;\n\nfunction Button({\n  className,\n  intent,\n  styling,\n  size,\n  shape,\n  elevation,\n  ...props\n}: ButtonProps) {\n  return (\n    <ButtonPrimitive\n      className={cn(\n        buttonVariants({\n          intent,\n          styling,\n          size,\n          shape,\n          elevation,\n        }),\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport { Button, buttonVariants, type ButtonProps };\n",
      "type": "registry:ui",
      "target": "components/azemmur/button.tsx"
    }
  ],
  "type": "registry:ui"
}