Form
Checkbox Group
Shared state for a series of checkboxes, including the parent select-all with an honest mixed state.
Toppings
Show codeHide code
"use client";
import { useId, useState } from "react";
import {
CheckboxGroup,
CheckboxGroupItem,
} from "@/registry/lilt/ui/checkbox-group";
const toppings = ["tomato", "basil", "olives"];
export default function CheckboxGroupDemo() {
const id = useId();
const [value, setValue] = useState<string[]>(["basil"]);
return (
<div className="flex flex-col gap-4">
<div
className="font-display text-xs font-bold uppercase tracking-[0.15em] text-[var(--lilt-text-muted)]"
id={id}
>
Toppings
</div>
<CheckboxGroup
allValues={toppings}
aria-labelledby={id}
onValueChange={setValue}
value={value}
>
<CheckboxGroupItem parent>Everything on it</CheckboxGroupItem>
<CheckboxGroupItem value="tomato">Sun-ripened tomato</CheckboxGroupItem>
<CheckboxGroupItem value="basil">
Basil, straight from the window box
</CheckboxGroupItem>
<CheckboxGroupItem value="olives">
Briny little olives
</CheckboxGroupItem>
</CheckboxGroup>
</div>
);
}Installation
npx shadcn@latest add @lilt/checkbox-groupAccessibility
- Label the group with aria-labelledby and a sibling heading; each item's enclosing label makes the whole row clickable.
- The parent checkbox reports mixed state as indeterminate — announced as 'mixed', shown as Lilt's minus.