DayPicker
반복 일정 요일/일자 다중 선택 — week는 일~토 7버튼(0~6), monthly는 1~31 그리드를 aria-pressed 토글 버튼 그룹으로 제공하는 비제어 컴포넌트입니다.
마지막 업데이트 2026-06-11
한눈에#
반복 일정의 요일/일자를 다중 선택합니다 — week는 일토 7버튼(06), monthly는 1~31 그리드를 aria-pressed 토글 버튼 그룹으로 제공합니다.
- 반복 요일/일자 다중 선택
- week 0~6 · monthly 1~31
- aria-pressed 토글
- 비제어
버튼은 44px 정사각 터치 타깃 — 선택은 색 + aria-pressed 병행(색맹 안전)
사용 시점#
매주/매월 반복되는 요일·일자를 다중 선택하면 DayPicker — 특정 날짜나 일반 다중 선택은 다른 컴포넌트입니다.
반복 일정의 요일(월·수·금) 또는 매월 일자(1·15)를 다중 선택
플레이그라운드#
컨트롤로 props를 조작하면 미리보기와 코드가 실시간 갱신됩니다.
import { DayPicker } from '@wds/ui-web';
<DayPicker aria-label="반복 요일" />변형#
mode가 변형 축입니다 — 'week'(기본)는 일토 7버튼(값 06),
'monthly'는 131 일자를 달력과 같은 7열 그리드(값 131)로 펼칩니다.
weekLabels로 week 모드 라벨을 오버라이드할 수 있습니다(7개, 기본 일~토 —
값 인덱스는 일=0 … 토=6 고정).
크기#
단일 크기입니다 — 버튼은 control.height-md(44px) 정사각으로 터치 히트
영역을 그대로 충족합니다. monthly 그리드는 7열로 고정되어 한 달 31일이
5줄 안에 들어갑니다.
상태#
- 선택 —
aria-pressed="true"+color.primary채움 +color.on-primary잉크 - Hover — 미선택
color.surface-hover· 선택color.primary-hover - Focus —
:focus-visible에color.primary아웃라인 링 - Disabled —
disabled배열의 값은 버튼disabled로 클릭·토글 차단
비제어 컴포넌트입니다 — defaultValue로 시작하고 토글마다 오름차순 정렬된
onChange(values)로 알립니다.
Props#
| Prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
mode | 'week' | 'monthly' | 'week' | week: 일~토 7버튼(0~6) · monthly: 1~31 그리드 |
defaultValue | ReadonlyArray<number> | — | 초기 선택값 — week는 0~6, monthly는 1~31 (비제어) |
onChange | (values: number[]) => void | — | 토글 콜백 — 오름차순 정렬된 선택값 배열 |
disabled | ReadonlyArray<number> | — | 선택 불가 값 목록 — 해당 버튼이 disabled로 렌더 |
aria-label | string | — | 그룹 접근성 이름 — 필수 |
weekLabels | ReadonlyArray<string> | ['일', … '토'] | week 모드 버튼 라벨 오버라이드 (7개) |
…rest | Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> | — | className 등은 그룹 div로 전달 |
접근성#
루트가 role="group"이고 aria-label이 필수입니다 — 버튼 7~31개가 하나의
질문("어느 요일/일자에 반복?")에 속함을 보조기술에 알립니다. 각 버튼은
네이티브 button + aria-pressed 토글 버튼입니다.
| 키 | 동작 |
|---|---|
Tab / Shift+Tab | 버튼 사이 포커스 이동 (네이티브 순서) |
Enter / Space | 포커스된 버튼 토글 — aria-pressed 갱신 |
비활성 값은 disabled로 보고되어 포커스·클릭이 차단되고, 선택 상태는 색상만이
아니라 aria-pressed로도 전달됩니다.
토큰#
component 토큰 없이 semantic을 직접 소비합니다(신설 기준 §4 미충족 — Calendar의 선택 어휘 공유).
| 속성 | 토큰 |
|---|---|
| 버튼 | color.surface · color.border · color.text · radius.full |
| 히트 영역 | control.height-md(44px) 정사각 |
| 선택 | color.primary 채움 + color.on-primary 잉크 |
| 선택 Hover | color.primary-hover |
| 미선택 Hover | color.surface-hover |
| 미선택 눌림 | color.surface-pressed (선택 배경은 안 덮음) |
| 포커스 | color.focus-ring 아웃라인 |
| 비활성 | input.bg-disabled · color.text-placeholder |
| 모션 | duration.fast + ease.standard |