Skip to content

Checkbox

Checkbox

Basic Checkbox

With Label

With Label + Description

Indeterminate State

Disabled State

import { Checkbox } from "@f0rbit/ui";
<Checkbox />

Add a label to describe the checkbox:

<Checkbox label="Accept terms and conditions" />
<Checkbox label="Subscribe to newsletter" />

Provide additional context with a description:

<Checkbox
label="Email notifications"
description="Receive email updates about your account activity"
/>

Control the checkbox state with checked and onChange:

const [checked, setChecked] = createSignal(false);
<Checkbox
checked={checked()}
onChange={() => setChecked(!checked())}
label="Toggle me"
/>

Use indeterminate for partial selections (e.g., “select all” with some items selected):

<Checkbox
label="Select all"
checked={allChecked()}
indeterminate={someChecked()}
onChange={toggleAll}
/>
<Checkbox label="Disabled unchecked" disabled />
<Checkbox label="Disabled checked" disabled checked />

Create a group of related checkboxes:

const [selected, setSelected] = createSignal<string[]>([]);
const toggle = (value: string) => {
setSelected(prev =>
prev.includes(value)
? prev.filter(v => v !== value)
: [...prev, value]
);
};
<div class="stack-sm">
<Checkbox
label="Email notifications"
checked={selected().includes("email")}
onChange={() => toggle("email")}
/>
<Checkbox
label="SMS notifications"
checked={selected().includes("sms")}
onChange={() => toggle("sms")}
/>
<Checkbox
label="Push notifications"
checked={selected().includes("push")}
onChange={() => toggle("push")}
/>
</div>

Implement a “select all” checkbox with child items:

const items = ["Documents", "Images", "Videos", "Music"];
const [selected, setSelected] = createSignal<string[]>([]);
const allSelected = () => selected().length === items.length;
const someSelected = () => selected().length > 0 && !allSelected();
const toggleAll = () => {
setSelected(allSelected() ? [] : [...items]);
};
const toggleItem = (item: string) => {
setSelected(prev =>
prev.includes(item)
? prev.filter(v => v !== item)
: [...prev, item]
);
};
<div class="stack-sm">
<Checkbox
label="Select all files"
checked={allSelected()}
indeterminate={someSelected()}
onChange={toggleAll}
/>
<div class="stack-sm" style={{ "margin-left": "1.5rem" }}>
<For each={items}>
{item => (
<Checkbox
label={item}
checked={selected().includes(item)}
onChange={() => toggleItem(item)}
/>
)}
</For>
</div>
</div>
PropTypeDefaultDescription
checkedbooleanfalseWhether the checkbox is checked
indeterminatebooleanfalseShow indeterminate state (partial selection)
labelstringLabel text displayed next to the checkbox
descriptionstringDescription text below the label
disabledbooleanfalseDisable the checkbox
onChange() => voidCallback when checkbox is toggled