A real <input type="checkbox"> inside the <label> that is the component's root. The role, the checked state, Space to toggle and focus all come from the browser.
- Space toggles and Tab moves on. Each checkbox is its own tab stop, with no arrow-key group.
- The label text is part of the click target, with no htmlFor and id pair to keep in sync.
- Do not put a link or button inside the label. It adds a second tab stop, and clicking it also toggles the box.
- classNames has three keys: root (the label), icon (the box) and label (the text). Styling through them changes no semantics.
- The check mark is CSS, so there is no icon to name.