{
  "$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-foreground)]/15 [--btn-icon-active:var(--btn-foreground)] [--btn-outline:var(--btn-bg)] [--btn-radius:calc(var(--radius-lg)-1px)] [--btn-ring:var(--btn-bg)]/20\",\n    \"bg-(--btn-bg) text-(--btn-foreground) outline-(--btn-outline) ring-(--btn-ring) hover:bg-(--btn-overlay) pressed: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-background\",\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 pressed:*:[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-foreground:var(--color-primary-foreground)] [--btn-icon-active:var(--primary-foreground)]/80 [--btn-icon:var(--primary-foreground)]/60 [--btn-overlay:color-mix(in_oklab,var(--color-primary-foreground)_10%,var(--color-primary)_90%)]\",\n      secondary:\n        \"[--btn-bg:var(--color-secondary)] [--btn-foreground:var(--color-secondary-foreground)] [--btn-icon:var(--color-muted-foreground)] [--btn-outline:var(--color-secondary-foreground)] [--btn-overlay:color-mix(in_oklab,var(--color-secondary-foreground)_10%,var(--color-secondary)_90%)] [--btn-ring:var(--color-muted-foreground)]/20\",\n      warning:\n        \"[--btn-bg:var(--color-warning)] [--btn-foreground:var(--color-warning-foreground)] [--btn-icon:var(--color-warning-foreground)]/60 [--btn-overlay:color-mix(in_oklab,var(--color-white)_10%,var(--color-warning)_90%)]\",\n      danger:\n        \"[--btn-bg:var(--color-danger)] [--btn-foreground:var(--color-danger-foreground)] [--btn-icon:color-mix(in_oklab,var(--color-danger-foreground)_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-foreground:var(--color-success-foreground)] [--btn-icon:color-mix(in_oklab,var(--color-success-foreground)_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-foreground)] [--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-foreground)] [--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"
    }
  ],
  "css": {
    "@utility touch-target": {
      "position": "relative",
      "&::before": {
        "content": "\"\"",
        "position": "absolute",
        "display": "block",
        "top": "50%",
        "left": "50%",
        "transform": "translate(-50%, -50%)",
        "width": "100%",
        "height": "100%",
        "min-height": "44px",
        "min-width": "44px",
        "z-index": "9999"
      }
    }
  },
  "type": "registry:ui"
}