{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "checkbox",
  "title": "Checkbox",
  "author": "Tori Bryan",
  "description": "Turns a single option on or off, or picks many from a list.",
  "dependencies": [
    "@base-ui/react",
    "lucide-react"
  ],
  "registryDependencies": [
    "utils"
  ],
  "files": [
    {
      "path": "registry/ui/checkbox.tsx",
      "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\n\nimport { CheckIcon, MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\n// The box both parts draw, so a row's mark can't drift from the control.\nconst BOX =\n  \"relative flex size-4 shrink-0 items-center justify-center rounded-sm border border-input bg-input-subtle data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground data-indeterminate:border-primary data-indeterminate:bg-primary data-indeterminate:text-primary-foreground [&_svg]:size-3.5\"\n\nfunction Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {\n  return (\n    <CheckboxPrimitive.Root\n      data-slot=\"checkbox\"\n      className={cn(\n        BOX,\n        \"peer transition-shadow outline-none group-has-focus-visible/field-label:ring-0 group-has-focus-visible/field-label:not-data-checked:border-input group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring-subtle aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive-ring aria-invalid:aria-checked:border-primary group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    >\n      <CheckboxPrimitive.Indicator\n        data-slot=\"checkbox-indicator\"\n        className=\"grid place-content-center text-current transition-none\"\n      >\n        <CheckIcon className=\"in-data-indeterminate:hidden\" />\n        <MinusIcon className=\"hidden in-data-indeterminate:block\" />\n      </CheckboxPrimitive.Indicator>\n    </CheckboxPrimitive.Root>\n  )\n}\n\n/**\n * A checkbox's look without its behavior, for a row that is already the\n * control, such as a listbox option, where a nested checkbox would be a\n * second control inside the first.\n */\nfunction CheckboxMark({\n  checked = false,\n  className,\n  ...props\n}: Omit<React.ComponentProps<\"span\">, \"children\"> & {\n  /** Ticked, empty, or `indeterminate` for a dash. */\n  checked?: boolean | \"indeterminate\"\n}) {\n  return (\n    <span\n      aria-hidden=\"true\"\n      data-slot=\"checkbox-mark\"\n      data-checked={checked === true || undefined}\n      data-indeterminate={checked === \"indeterminate\" || undefined}\n      className={cn(BOX, className)}\n      {...props}\n    >\n      {checked === true ? (\n        <CheckIcon />\n      ) : checked === \"indeterminate\" ? (\n        <MinusIcon />\n      ) : null}\n    </span>\n  )\n}\n\nexport { Checkbox, CheckboxMark }\n",
      "type": "registry:ui"
    }
  ],
  "cssVars": {
    "theme": {
      "color-destructive-ring": "var(--destructive-ring)",
      "color-input-subtle": "var(--input-subtle)",
      "color-ring-subtle": "var(--ring-subtle)",
      "border-color-destructive": "var(--destructive-border)"
    },
    "light": {
      "destructive-ring": "color-mix(in oklch, var(--color-red-700) 20%, transparent)",
      "input-subtle": "color-mix(in oklch, var(--color-neutral-200) 20%, transparent)",
      "ring-subtle": "color-mix(in oklch, var(--color-neutral-400) 50%, transparent)",
      "destructive-border": "var(--destructive)"
    },
    "dark": {
      "destructive-ring": "color-mix(in oklch, var(--color-red-400) 40%, transparent)",
      "input-subtle": "oklch(1 0 0 / 5%)",
      "ring-subtle": "color-mix(in oklch, var(--color-neutral-500) 50%, transparent)",
      "destructive-border": "var(--destructive)"
    }
  },
  "meta": {
    "tier": "base-components",
    "group": "Forms",
    "docs": "https://fibo.toribryan.com/?path=/docs/base-components-forms-checkbox--docs"
  },
  "docs": "Docs and live examples: https://fibo.toribryan.com/?path=/docs/base-components-forms-checkbox--docs",
  "categories": [
    "base-components",
    "forms"
  ],
  "type": "registry:ui"
}