{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "button",
  "type": "registry:ui",
  "title": "Button",
  "description": "Tactile Neo-Brutalist button with hard black shadow and press physics.",
  "dependencies": [
    "class-variance-authority",
    "clsx",
    "tailwind-merge"
  ],
  "devDependencies": [],
  "registryDependencies": [],
  "files": [
    {
      "path": "components/ui/button.tsx",
      "content": "'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Slot } from '@radix-ui/react-slot'\nimport { Loader2 } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst shadowColorHexMap = {\n  ink: 'var(--rk-shadow-color, #18181b)',\n  yellow: '#FACC15',\n  orange: '#FB923C',\n  violet: '#A78BFA',\n  mint: '#4ADE80',\n  pink: '#F472B6',\n  sky: '#38BDF8',\n}\n\nconst buttonVariants = cva(\n  'inline-flex items-center justify-center whitespace-nowrap font-sans font-extrabold text-sm tracking-wide rk-border focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 transition-all select-none cursor-pointer',\n  {\n    variants: {\n      variant: {\n        primary: 'bg-rk-primary text-rk-ink hover:bg-rk-primary-hover',\n        yellow: 'bg-rk-primary text-rk-ink hover:bg-rk-primary-hover',\n        secondary: 'bg-rk-secondary text-rk-ink hover:bg-rk-secondary-hover',\n        accent: 'bg-rk-accent text-rk-ink hover:bg-rk-accent-hover',\n        mint: 'bg-rk-mint text-rk-ink hover:bg-rk-mint-hover',\n        peach: 'bg-rk-peach text-rk-ink hover:bg-rk-peach-hover',\n        sky: 'bg-rk-sky text-rk-ink hover:bg-rk-sky-hover',\n        pink: 'bg-rk-pink text-rk-ink hover:bg-rk-pink-hover',\n        black: 'bg-rk-ink text-rk-canvas hover:bg-rk-ink-hover',\n        outline: 'bg-rk-surface text-rk-ink hover:bg-rk-canvas',\n      },\n      shape: {\n        default: 'rounded-2xl',\n        pill: 'rounded-full',\n        fab: 'rounded-full !w-12 !h-12 !p-0 shrink-0 aspect-square flex items-center justify-center text-lg',\n        square: 'rounded-xl',\n      },\n      size: {\n        sm: 'h-9 px-4 text-xs',\n        md: 'h-11 px-6 text-sm',\n        lg: 'h-13 px-8 text-base font-extrabold',\n        icon: 'h-11 w-11 !p-0 shrink-0 aspect-square flex items-center justify-center',\n      },\n    },\n    defaultVariants: {\n      variant: 'primary',\n      shape: 'pill',\n      size: 'md',\n    },\n  }\n)\n\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n    VariantProps<typeof buttonVariants> {\n  isLoading?: boolean\n  asChild?: boolean\n  shadowColor?: keyof typeof shadowColorHexMap\n  shadowStyle?: 'hard' | 'soft' | 'none'\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  (\n    {\n      className,\n      variant,\n      shape,\n      size,\n      isLoading = false,\n      asChild = false,\n      shadowColor = 'ink',\n      shadowStyle = 'hard',\n      children,\n      disabled,\n      ...props\n    },\n    ref\n  ) => {\n    const Comp = asChild ? Slot : 'button'\n    const isSquareOrFab = shape === 'fab' || size === 'icon'\n\n    const style = {\n      '--rk-btn-shadow-color': shadowColorHexMap[shadowColor] ?? '#18181b',\n    } as React.CSSProperties\n\n    return (\n      <Comp\n        ref={ref}\n        disabled={disabled || isLoading}\n        data-shadow-style={shadowStyle}\n        style={style}\n        className={cn(\n          'rk-btn',\n          buttonVariants({ variant, shape, size, className }),\n          isSquareOrFab && '!p-0 !px-0 !py-0 shrink-0 aspect-square'\n        )}\n        {...props}\n      >\n        {isLoading ? (\n          <span className=\"flex items-center justify-center gap-2\">\n            <Loader2 className=\"w-4 h-4 animate-spin stroke-[3]\" />\n            {!isSquareOrFab && children}\n          </span>\n        ) : (\n          children\n        )}\n      </Comp>\n    )\n  }\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n",
      "type": "registry:ui",
      "target": "components/ui/button.tsx"
    }
  ]
}