CheckListItem
A check list item is a single item within a check list that includes a checkbox, allowing users to mark items as complete or incomplete. Check list items are commonly used in task lists, to-do lists, and checklists for tracking progress.
This headless component uses a <li> element containing a checkbox input, providing inherent list semantics and accessible state management.
Implementation Notes
- Uses
<li>element for proper list semantics within a CheckList - Contains a checkbox input for toggling completion state
aria-checkedreflects the current checked state- Label text is associated with the checkbox for accessibility
Props
checked: boolean (default: false) -- whether the item is checkeddisabled: boolean (default: false) -- whether the checkbox is disabledlabel: string (optional) -- accessible label overrideonchange: callback (optional) -- change handlerchildren: slot -- item content...restProps: Any additional HTML attributes
Usage
Checklist with completed, pending, and disabled items:
<CheckList label="Daily tasks">
<CheckListItem checked={true}>Buy groceries</CheckListItem>
<CheckListItem>Clean the house</CheckListItem>
<CheckListItem disabled>Optional task</CheckListItem>
</CheckList>
Checklist item with change handler:
<CheckListItem checked={isComplete} onchange={handleToggle}>
Review pull request
</CheckListItem>
Keyboard Interactions
- Tab: Focus the checkbox
- Space: Toggle the checkbox state
- (Handled natively by the checkbox input)
ARIA
- Implicit
listitemrole from<li>element aria-checkedreflects the current state of the checkbox- Label association via
<label>element oraria-label
When to Use
- Use inside CheckList to represent one checkable item.
- Use when users need to mark items as complete or incomplete.
- Use for task tracking, progress checklists, or completion workflows.
When Not to Use
- Do not use outside CheckList -- it requires a parent
<ul>or<ol>context. - Do not use for form checkboxes in a submission flow -- use CheckboxInput instead.
- Do not use for non-actionable informational list items -- use a standard
<li>instead.
Headless
This component provides a <li> element with an associated checkbox input and label, with zero visual styling. The consumer is responsible for all CSS including checkbox appearance, checked/unchecked states, strikethrough text, spacing, and disabled appearance.
Styles
The consumer provides all CSS styling. The component renders with a .check-list-item class for targeting. No default styles are included -- this is a fully headless component.
Testing
- Verify the component renders a
<li>element with classcheck-list-item - Verify the checkbox input is present and toggleable
- Verify
aria-checkedreflects the current state - Verify keyboard interactions work correctly
- Verify pass-through attributes are applied
Advice
- Designers: Use visual indicators (strikethrough, opacity change) to distinguish checked from unchecked items. Maintain sufficient touch targets for the checkbox.
- Developers: Ensure the checkbox is properly associated with its label text for screen reader accessibility.
Composition
CheckListItem is used within a CheckList component.
Related components
check-list— an ordered list of check list item components