components / 06

marked checkbox

a tiny decision gets a tiny human gesture. no generic check icon required.

shadcnnpx shadcn@latest add berkantay/cheez/marked-checkbox
live

playground

unchecked
size
label
character
checked mark
interaction
checked ink
interaction ink
state
<MarkedCheckbox
  checked={false}
  indeterminate={false}
  checkedMark="check"
  interactionMark="rounded-box"
  character="rushed"
  size="medium"
  labelPosition="end"
  onCheckedChange={setChecked}
>
  ship this release
</MarkedCheckbox>
behavior

states

each state has a distinct gesture
unchecked
hover
checked
indeterminate
star
heart
required
invalid
disabled
composition

release checklist

1 / 3

the parent draws an indeterminate stroke when only part of the release is ready. selecting it resolves the whole group.

reference

api

Base UI semantics, Cheez character
partproptypedefaultpurpose
Checkboxcheckedbooleancontrolled checked state
CheckboxdefaultCheckedbooleanfalseuncontrolled initial state
CheckboxonCheckedChangefunctionchecked state callback
Checkboxindeterminatebooleanfalsemixed selection state
CheckboxcheckedMarkCheezType"check"selected symbol
CheckboxindeterminateMarkCheezType"short-underline"mixed-state symbol
CheckboxinteractionMarkCheezType"rounded-box"hover and focus boundary
CheckboxcheckedColorstring"#b7ff3c"selected ink
CheckboxinteractionColorstring"#8f74ff"hover and focus ink
Checkboxcharacter"calm" | "rushed" | "chaotic""rushed"drawing personality
Checkboxsize"small" | "medium" | "large""medium"control scale
CheckboxlabelPosition"start" | "end""end"label placement
CheckboxdescriptionReactNodeaccessible helper text
CheckboxerrorReactNodeinvalid message and mark
Checkboxnamestringnative form field name
Checkboxvaluestringsubmitted checked value
Checkboxrequiredbooleanfalserequired form state
Checkboxdisabledbooleanfalsedisabled state
CheckboxreadOnlybooleanfalseread-only state

behavior notes

  • Space toggles the focused checkbox
  • checked, unchecked, and mixed states use correct ARIA semantics
  • the hidden native input participates in form submission
  • labels and descriptions are one large click target
  • disabled choices never animate
  • selection symbols can carry product character