Tiro
Tiro Design
Components

Checkbox

다중 선택 또는 폼 제출 전 상태 유지용 체크박스.

Mobile

가시적인 체크박스 사각형 크기는 디자인 그대로 유지하되, 터치 hit area를 ≥44pt 확보한다 (iOS HIG / Android 권장 기준).

  • 시각적 박스가 16×16이라면 PressablehitSlop 또는 invisible padding으로 hit area를 44×44 이상으로 확장
  • 라벨이 함께 있는 form row의 경우 라벨까지 탭 영역에 포함시켜 행 전체가 터치 영역이 되도록 구성 (행 높이 ≥44pt)
  • 체크 상태 토글 후 가벼운 haptic feedback (impactLight) 권장

Preview

States

checked · unchecked · indeterminate · disabled

Sizes

지원 사이즈: sm · md

Default: md

SizeHitbox (web)Hitbox (mobile)BoxCheck iconPrimary use
sm32 × 3244 × 44 (hitSlop로 확장)16 × 1612pxDense list, table cell
md40 × 4044 × 44 (hitSlop 또는 행 전체 hit area)20 × 2014pxDefault. Form

Box radius rounded-md (6px). Off border stone-200, On bg-brown-800 border-brown-800 text-white. Hitbox 영역으로 클릭 — 시각 박스보다 큰 터치 면적. 모바일은 두 사이즈 모두 iOS HIG 44pt 충족하도록 hit area 확장 필수.

Token Mapping

TokenValueDescription
border1px solid stone-200기본
checked borderbrown-800체크 상태
checked bgbrown-800체크 상태
checked indicatorwhiteLucide Check, strokeWidth 2.25
labellabel1Medium text-stone-600
disabledstone-100 border, stone-50 bg, stone-300 text
size20 × 20 (default) / 16 × 16 (sm)
radiusrounded-md (6px)

Usage

<div className="flex items-center gap-2">
  <Checkbox
    id="agree"
    checked={agreed}
    onCheckedChange={setAgreed}
  />
  <Label htmlFor="agree">이용약관에 동의합니다</Label>
</div>

<Checkbox checked="indeterminate" />  {/* 부분 선택 상태 */}

A11y

  • role="checkbox" + aria-checked 자동 (mixed for indeterminate)
  • Label 결합 필수

Do / Don't

  • Do: 다중 선택 리스트, 폼 동의 체크에 사용
  • Don't: 단일 선택 (둘 중 하나)에는 RadioGroup 사용
  • Don't: 즉시 반영되는 설정에는 Switch 사용

On this page