{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "button",
  "title": "Button",
  "description": "shadcn button reskinned with pixel borders and offset shadows.",
  "dependencies": [
    "cn",
    "class-variance-authority",
    "radix-ui"
  ],
  "registryDependencies": [
    "@ui95/theme"
  ],
  "files": [
    {
      "path": "components/ui/button.tsx",
      "content": "\"use client\"\n\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Slot } from \"radix-ui\"\nimport * as React from \"react\"\n\nconst buttonVariants = cva(\n  \"group/button relative inline-flex shrink-0 items-center justify-center pixel-border border-border font-pixel text-[16px] leading-none whitespace-nowrap uppercase outline-none select-none disabled:pointer-events-none disabled:text-muted-foreground disabled:offset-shadow-none disabled:dither-50 aria-invalid:border-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n  {\n    variants: {\n      variant: {\n        default:\n          \"bg-card text-card-foreground offset-shadow-1 bevel-raised hover:bg-foreground hover:text-card active:not-aria-[haspopup]:translate-x-[calc(var(--pixel)*1.2)] active:not-aria-[haspopup]:translate-y-[calc(var(--pixel)*1.2)] active:not-aria-[haspopup]:offset-shadow-none aria-expanded:bg-foreground aria-expanded:text-card\",\n        outline:\n          \"bg-transparent text-foreground offset-shadow-1 hover:bg-muted aria-expanded:bg-muted active:not-aria-[haspopup]:translate-x-[calc(var(--pixel)*1.2)] active:not-aria-[haspopup]:translate-y-[calc(var(--pixel)*1.2)] active:not-aria-[haspopup]:offset-shadow-none\",\n        secondary:\n          \"bg-secondary text-secondary-foreground bevel-raised offset-shadow-1 active:not-aria-[haspopup]:translate-x-[calc(var(--pixel)*1.2)] active:not-aria-[haspopup]:translate-y-[calc(var(--pixel)*1.2)] active:not-aria-[haspopup]:offset-shadow-none active:not-aria-[haspopup]:bevel-sunken aria-expanded:bevel-sunken\",\n        ghost:\n          \"border-transparent bg-transparent text-foreground hover:border-current aria-expanded:border-current\",\n        destructive:\n          \"bg-foreground text-card offset-shadow-1 hover:bg-card hover:text-card-foreground active:not-aria-[haspopup]:translate-x-[calc(var(--pixel)*1.2)] active:not-aria-[haspopup]:translate-y-[calc(var(--pixel)*2)] active:not-aria-[haspopup]:offset-shadow-none\",\n        link: \"border-transparent bg-transparent text-foreground decoration-[length:var(--pixel)] underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-10 gap-2 px-4\",\n        xs: \"h-6 gap-1 px-1.5 text-sm [&_svg:not([class*='size-'])]:size-3\",\n        sm: \"h-8 gap-1.5 px-2.5 [&_svg:not([class*='size-'])]:size-3.5\",\n        lg: \"h-12 gap-2 px-6 text-[24px]\",\n        icon: \"size-9\",\n        \"icon-xs\": \"size-6 [&_svg:not([class*='size-'])]:size-3\",\n        \"icon-sm\": \"size-7 [&_svg:not([class*='size-'])]:size-3.5\",\n        \"icon-lg\": \"size-11\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nfunction Button({\n  className,\n  variant = \"default\",\n  size = \"default\",\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean\n  }) {\n  const Comp = asChild ? Slot.Root : \"button\"\n  return (\n    <Comp\n      data-slot=\"button\"\n      data-variant={variant}\n      data-size={size}\n      className={cn(buttonVariants({ variant, size, className }))}\n      {...props}\n    />\n  )\n}\n\nexport { Button, buttonVariants }\n",
      "type": "registry:ui"
    }
  ],
  "meta": {
    "sounds": {
      "button.press": {
        "note": "Tactile switch: bandpassed noise bump plus a square click",
        "layers": [
          {
            "wave": "noise",
            "frequency": 0,
            "attack": 0.0003,
            "decay": 0.006,
            "gain": 0.6,
            "filter": {
              "type": "bandpass",
              "frequency": 3500,
              "q": 2
            }
          },
          {
            "wave": "square",
            "frequency": 2200,
            "attack": 0.0005,
            "decay": 0.005,
            "gain": 0.15
          }
        ],
        "jitter": {
          "cents": 100,
          "gainDb": 6,
          "decay": 0.12
        }
      },
      "button.release": {
        "note": "Lighter, higher tactile click",
        "layers": [
          {
            "wave": "noise",
            "frequency": 0,
            "attack": 0.0003,
            "decay": 0.004,
            "gain": 0.35,
            "filter": {
              "type": "bandpass",
              "frequency": 4200,
              "q": 2
            }
          },
          {
            "wave": "square",
            "frequency": 2600,
            "attack": 0.0005,
            "decay": 0.004,
            "gain": 0.08
          }
        ],
        "jitter": {
          "cents": 91,
          "gainDb": 1.5,
          "decay": 0.12
        }
      },
      "small-button.press": {
        "note": "Tactile, smaller switch: higher and shorter",
        "layers": [
          {
            "wave": "noise",
            "frequency": 0,
            "attack": 0.0002,
            "decay": 0.003,
            "gain": 0.45,
            "filter": {
              "type": "bandpass",
              "frequency": 4800,
              "q": 2
            }
          },
          {
            "wave": "square",
            "frequency": 3200,
            "attack": 0.0003,
            "decay": 0.003,
            "gain": 0.1
          }
        ]
      },
      "small-button.release": {
        "note": "Barely there",
        "layers": [
          {
            "wave": "noise",
            "frequency": 0,
            "attack": 0.0002,
            "decay": 0.0025,
            "gain": 0.25,
            "filter": {
              "type": "bandpass",
              "frequency": 5500,
              "q": 2
            }
          },
          {
            "wave": "square",
            "frequency": 3600,
            "attack": 0.0003,
            "decay": 0.0025,
            "gain": 0.06
          }
        ]
      }
    }
  },
  "type": "registry:ui"
}
