{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "button", "type": "registry:ui", "title": "Button", "description": "A button component.", "dependencies": ["@radix-ui/react-slot"], "files": [ { "path": "registry/niv/ui/button.tsx", "content": "import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/classnames';\nimport type { ComponentProps } from 'react';\n\nconst buttonVariants = cva(\n 'disabled:fg-disabled inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-sm transition-colors focus-visible:border-base focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-disabled disabled:shadow-buttons-neutral disabled:after:hidden [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary: cn(\n 'after:button-inverted-gradient bg-button-inverted text-contrast-fg-primary shadow-buttons-inverted',\n 'hover:after:button-inverted-hover-gradient hover:bg-button-inverted-hover',\n 'active:after:button-inverted-pressed-gradient active:bg-button-inverted-pressed',\n 'focus-visible:!shadow-buttons-inverted-focus',\n ),\n secondary: cn(\n 'after:button-neutral-gradient bg-button-neutral text-fg-base shadow-buttons-neutral',\n 'hover:after:button-neutral-hover-gradient hover:bg-button-neutral-hover',\n 'active:after:button-neutral-pressed-gradient active:bg-button-neutral-pressed',\n 'focus-visible:shadow-buttons-neutral-focus',\n ),\n destructive: cn(\n 'after:button-danger-gradient bg-button-danger text-fg-on-color shadow-buttons-colored shadow-buttons-danger',\n 'hover:after:button-danger-hover-gradient hover:bg-button-danger-hover',\n 'active:after:button-danger-pressed-gradient active:bg-button-danger-pressed',\n 'focus-visible:shadow-buttons-danger-focus',\n ),\n outline:\n 'border border-gray-200 bg-white shadow-sm hover:bg-gray-100 hover:text-gray-900',\n ghost: 'hover:bg-gray-100 hover:text-gray-900',\n },\n size: {\n sm: 'h-8 rounded-md px-3 text-xs',\n md: 'h-9 px-4 py-2',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n },\n);\n\ntype ButtonProps = ComponentProps<'button'> &\n VariantProps & {\n asChild?: boolean;\n };\n\nconst Button = ({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: ButtonProps) => {\n const Comp = asChild ? Slot : 'button';\n\n return (\n \n );\n};\n\nexport { Button };\n", "type": "registry:ui" } ] }