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) => void—Callback when state changes
childrenReactNode—Label content
size'sm' | 'md' | 'lg''md'Checkbox size
disabledbooleanfalseDisable the checkbox
indeterminatebooleanfalseShow indeterminate state
classNamestring—Additional classes

CheckboxLabel

PropTypeDefaultDescription
childrenReactNodeRequiredLabel text
classNamestring—Additional classes

CheckboxDescription

PropTypeDefaultDescription
childrenReactNodeRequiredDescription text
classNamestring—Additional classes

On this page