Skip to content

Checkbox

Use checkboxes to toggle between checked and unchecked states in a list or as a standalone form field
  • Alpha
  • Not reviewed for accessibility

Examples

Use FormControl to display an accessible checkbox form field. This Checkbox component is intended only as an ingredient for other custom components, or as a drop-in replacement for native HTML checkboxes outside of form use-cases.

If you do use this component to build a custom checkbox, it should always be accompanied by a corresponding <label> to improve support for assistive technologies.

The Checkbox component can be used in controlled and uncontrolled modes.

Checkbox components should always be accompanied by a corresponding label to improve support for assistive technologies.

Indeterminate

An indeterminate checkbox state should be used if the input value is neither true nor false. This can be useful in situations where you are required to display an incomplete state, or one that is dependent on other input selections to determine a value.

Grouping Checkbox components

If you're not building something custom, you should use the CheckboxGroup component to render a group of checkbox inputs.

Props

Checkbox

NameTypeDefaultDescription
checked
boolean
Modifies true/false value of the native checkbox
defaultChecked
boolean
Checks the input by default in uncontrolled mode
disabled
boolean
Modifies the native disabled state of the native checkbox
indeterminate
boolean
falseApplies an [ indeterminate state ](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#attr-indeterminate) to the checkbox
onChange
(event: React.ChangeEvent) => void
A callback function that is triggered when the checked state has been changed
validationStatus
'error' | 'success' | 'warning'
Only used to inform ARIA attributes.<br /> Individual checkboxes do not have validation styles.
value
string
A unique value that is never shown to the user.<br /> Used during form submission and to identify which checkbox inputs are selected.
ref
React.RefObject<HTMLInputElement>
A ref to the element rendered by this component. Because this component is polymorphic, the type will vary based on the value of the as prop.
as
React.ElementType
"input"The underlying element to render — either a HTML element name or a React component.
sx
SystemStyleObject
Style overrides to apply to the component. See also overriding styles.

Status

Alpha

  • Component props and basic example usage of the component are documented on primer.style/react.
  • Component does not have any unnecessary third-party dependencies.
  • Component can adapt to different themes.
  • Component can adapt to different screen sizes.
  • Component has robust unit test coverage (100% where achievable).
  • Component has visual regression coverage of its default and interactive states.
  • Component does not introduce any axe violations.
  • Component has been manually reviewed by the accessibility team and any resulting issues have been addressed.

Beta

  • Component is used in a production application.
  • Common usage examples are documented on primer.style/react.
  • Common usage examples are documented in storybook stories.
  • Component has been reviewed by a systems designer and any resulting issues have been addressed.
  • Component does not introduce any performance regressions.

Stable

  • Component API has been stable with no breaking changes for at least one month.
  • Feedback on API usability has been sought from developers using the component and any resulting issues have been addressed.
  • Component has corresponding design guidelines documented in the interface guidelines.
  • Component has corresponding Figma component in the Primer Web library.
  • Tooling (such as linters, codemods, etc.) exists to prevent further use of alternatives.
Edit this page on GitHub
4 contributorscolebemisbroccolinisoupmperrottirezrah
Last edited by colebemis on January 23, 2023