{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "extends": "none",
  "name": "button",
  "title": "button",
  "description": "button",
  "dependencies": [
    "react-aria-components",
    "tailwind-variants"
  ],
  "registryDependencies": [
    "https://intentui.com/r/primitive"
  ],
  "files": [
    {
      "path": "src/components/ui/button.tsx",
      "content": "'use client'\n\nimport {\n  Button as ButtonPrimitive,\n  type ButtonProps as ButtonPrimitiveProps,\n} from 'react-aria-components/Button'\nimport { tv, type VariantProps } from 'tailwind-variants'\nimport { cx } from '@/lib/primitive'\n\nexport const buttonStyles = tv({\n  base: [\n    '[--btn-border:var(--color-fg)]/15 [--btn-icon-active:var(--btn-fg)] [--btn-outline:var(--btn-bg)] [--btn-radius:calc(var(--radius-lg)-1px)] [--btn-ring:var(--btn-bg)]/20',\n    'bg-(--btn-bg) text-(--btn-fg) outline-(--btn-outline) ring-(--btn-ring) hover:bg-(--btn-overlay)',\n    'relative isolate inline-flex items-center justify-center border border-(--btn-border) font-medium hover:no-underline',\n    'focus:outline-0 focus-visible:outline focus-visible:outline-offset-2 focus-visible:ring-2 focus-visible:ring-offset-3 focus-visible:ring-offset-bg',\n    'forced-colors:[--btn-icon:ButtonText] forced-colors:hover:[--btn-icon:ButtonText] *:[svg]:-mx-0.5 *:[svg]:shrink-0 *:[svg]:self-center *:[svg]:text-(--btn-icon) hover:*:[svg]:text-(--btn-icon-active)/90 focus-visible:*:[svg]:text-(--btn-icon-active)/80',\n    '*:data-[slot=loader]:-mx-0.5 *:data-[slot=loader]:shrink-0 *:data-[slot=loader]:self-center *:data-[slot=loader]:text-(--btn-icon)',\n    'pending:opacity-50 disabled:opacity-50 disabled:forced-colors:text-[GrayText]',\n    '*:data-[slot=color-swatch]:-mx-0.5 *:data-[slot=color-swatch]:shrink-0 *:data-[slot=color-swatch]:self-center *:data-[slot=color-swatch]:[--size:--spacing(5)]',\n  ],\n  variants: {\n    intent: {\n      primary:\n        '[--btn-bg:var(--color-primary)] [--btn-fg:var(--color-primary-fg)] [--btn-icon-active:var(--primary-fg)]/80 [--btn-icon:var(--primary-fg)]/60 [--btn-overlay:color-mix(in_oklab,var(--color-primary-fg)_10%,var(--color-primary)_90%)]',\n      secondary:\n        '[--btn-bg:var(--color-secondary)] [--btn-fg:var(--color-secondary-fg)] [--btn-icon:var(--color-muted-fg)] [--btn-outline:var(--color-secondary-fg)] [--btn-overlay:color-mix(in_oklab,var(--color-secondary-fg)_10%,var(--color-secondary)_90%)] [--btn-ring:var(--color-muted-fg)]/20',\n      warning:\n        '[--btn-bg:var(--color-warning)] [--btn-fg:var(--color-warning-fg)] [--btn-icon:var(--color-warning-fg)]/60 [--btn-overlay:color-mix(in_oklab,var(--color-white)_10%,var(--color-warning)_90%)]',\n      danger:\n        '[--btn-bg:var(--color-danger)] [--btn-fg:var(--color-danger-fg)] [--btn-icon:color-mix(in_oklab,var(--color-danger-fg)_60%,var(--danger)_40%)] [--btn-overlay:color-mix(in_oklab,var(--color-white)_10%,var(--color-danger)_90%)]',\n      success:\n        '[--btn-bg:var(--color-success)] [--btn-fg:var(--color-success-fg)] [--btn-icon:color-mix(in_oklab,var(--color-success-fg)_60%,var(--success)_40%)] [--btn-overlay:color-mix(in_oklab,var(--color-white)_10%,var(--color-success)_90%)]',\n      outline:\n        'border-border [--btn-bg:transparent] [--btn-icon:var(--color-muted-fg)] [--btn-outline:var(--color-ring)] [--btn-overlay:var(--color-secondary)] [--btn-ring:var(--color-ring)]/20',\n      plain:\n        'border-transparent [--btn-bg:transparent] [--btn-icon:var(--color-muted-fg)] [--btn-outline:var(--color-ring)] [--btn-overlay:var(--color-secondary)] [--btn-ring:var(--color-ring)]/20',\n    },\n    size: {\n      xs: [\n        'min-h-8 gap-x-1.5 px-[calc(--spacing(3)-1px)] py-[calc(--spacing(1.5)-1px)] text-sm sm:min-h-7 sm:px-2 sm:py-[calc(--spacing(1.5)-1px)] sm:text-xs/4',\n        '*:[svg]:-mx-px *:[svg]:size-3.5 sm:*:[svg]:size-3',\n        '*:data-[slot=loader]:-mx-px *:data-[slot=loader]:size-3.5 sm:*:data-[slot=loader]:size-3',\n      ],\n      sm: [\n        'min-h-9 gap-x-1.5 px-3 py-[calc(--spacing(2)-1px)] sm:min-h-8 sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/5',\n        '*:[svg]:size-4.5 sm:*:[svg]:size-4',\n        '*:data-[slot=loader]:size-4.5 sm:*:data-[slot=loader]:size-4',\n      ],\n      md: [\n        'min-h-10 gap-x-2 px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:min-h-9 sm:px-3 sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6',\n        '*:[svg]:size-5 sm:*:[svg]:size-4',\n        '*:data-[slot=loader]:size-5 sm:*:data-[slot=loader]:size-4',\n      ],\n      lg: [\n        'min-h-10 gap-x-2 px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(3)-1px)] sm:min-h-9 sm:px-3 sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/7',\n        '*:[svg]:size-5 sm:*:[svg]:size-4.5',\n        '*:data-[slot=loader]:size-5 sm:*:data-[slot=loader]:size-4.5',\n      ],\n      'sq-xs': [\n        'touch-target size-8 shrink-0 sm:size-7',\n        '*:[svg]:size-3.5 sm:*:[svg]:size-3',\n        '*:data-[slot=loader]:size-3.5 sm:*:data-[slot=loader]:size-3',\n      ],\n      'sq-sm': [\n        'touch-target size-10 shrink-0 sm:size-8',\n        '*:[svg]:size-4.5 sm:*:[svg]:size-4',\n        '*:data-[slot=loader]:size-4.5 sm:*:data-[slot=loader]:size-4',\n      ],\n      'sq-md': [\n        'touch-target size-11 shrink-0 sm:size-9',\n        '*:[svg]:size-5 sm:*:[svg]:size-4.5',\n        '*:data-[slot=loader]:size-5 sm:*:data-[slot=loader]:size-4.5',\n      ],\n      'sq-lg': [\n        'touch-target size-12 shrink-0 sm:size-10',\n        '*:[svg]:size-6 sm:*:[svg]:size-5',\n        '*:data-[slot=loader]:size-6 sm:*:data-[slot=loader]:size-5',\n      ],\n    },\n\n    isCircle: {\n      true: 'rounded-full',\n      false: 'rounded-lg',\n    },\n  },\n  defaultVariants: {\n    intent: 'primary',\n    size: 'md',\n    isCircle: false,\n  },\n})\n\nexport interface ButtonProps extends ButtonPrimitiveProps, VariantProps<typeof buttonStyles> {\n  ref?: React.Ref<HTMLButtonElement>\n}\n\nexport function Button({ className, intent, size, isCircle, ref, ...props }: ButtonProps) {\n  return (\n    <ButtonPrimitive\n      ref={ref}\n      {...props}\n      className={cx(\n        buttonStyles({\n          intent,\n          size,\n          isCircle,\n        }),\n        className\n      )}\n    />\n  )\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}