Lunar Kit LogoLunar Kit
Components

Checkbox

A control that allows the user to toggle between checked and not checked.

Demo
Code
Accept terms and conditions
You agree to our Terms of Service and Privacy Policy.

Installation

lunar add checkbox

Usage

import { Checkbox, CheckboxLabel, CheckboxDescription } from '@/components/ui/checkbox';

Basic Usage

const [checked, setChecked] = useState(false);
 
<Checkbox checked={checked} onCheckedChange={setChecked} />

With Label

<Checkbox checked={checked} onCheckedChange={setChecked}>
<CheckboxLabel>Accept terms and conditions</CheckboxLabel>
</Checkbox>

With Description

<Checkbox checked={checked} onCheckedChange={setChecked}>
<View>
  <CheckboxLabel>Marketing emails</CheckboxLabel>
  <CheckboxDescription>
    Receive emails about new products, features, and more.
  </CheckboxDescription>
</View>
</Checkbox>

Sizes

<Checkbox size="sm" checked={checked} onCheckedChange={setChecked}>
<CheckboxLabel>Small</CheckboxLabel>
</Checkbox>
 
<Checkbox size="md" checked={checked} onCheckedChange={setChecked}>
<CheckboxLabel>Medium (default)</CheckboxLabel>
</Checkbox>
 
<Checkbox size="lg" checked={checked} onCheckedChange={setChecked}>
<CheckboxLabel>Large</CheckboxLabel>
</Checkbox>

Indeterminate State

For "select all" scenarios:

const [items, setItems] = useState([
{ id: 1, checked: true },
{ id: 2, checked: false },
{ id: 3, checked: true },
]);
 
const allChecked = items.every(item => item.checked);
const someChecked = items.some(item => item.checked);
 
<Checkbox
checked={allChecked}
indeterminate={someChecked && !allChecked}
onCheckedChange={(checked) => {
  setItems(items.map(item => ({ ...item, checked })));
}}
>
<CheckboxLabel>Select All</CheckboxLabel>
</Checkbox>

Disabled State

<Checkbox disabled checked={false}>
<CheckboxLabel>Disabled unchecked</CheckboxLabel>
</Checkbox>
 
<Checkbox disabled checked={true}>
<CheckboxLabel>Disabled checked</CheckboxLabel>
</Checkbox>

API Reference

Checkbox

PropTypeDefaultDescription
checkedbooleanfalseWhether checkbox is checked
onCheckedChange(checked: boolean) => voidCallback when state changes
childrenReactNodeLabel content
size'sm' | 'md' | 'lg''md'Checkbox size
disabledbooleanfalseDisable the checkbox
indeterminatebooleanfalseShow indeterminate state
classNamestringAdditional classes

CheckboxLabel

PropTypeDefaultDescription
childrenReactNodeRequiredLabel text
classNamestringAdditional classes

CheckboxDescription

PropTypeDefaultDescription
childrenReactNodeRequiredDescription text
classNamestringAdditional classes

On this page