ComponentsP3 본문

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)를 다중 선택

대신 DatePicker

달력에서 특정 날짜(반복 아님)를 고를 때

대신 Checkbox

요일/일자가 아닌 일반 항목 다중 선택일 때

플레이그라운드#

컨트롤로 props를 조작하면 미리보기와 코드가 실시간 갱신됩니다.

import { DayPicker } from '@wds/ui-web';

<DayPicker aria-label="반복 요일" />

변형#

mode가 변형 축입니다 — 'week'(기본)는 일토 7버튼(값 06), 'monthly'는 131 일자를 달력과 같은 7열 그리드(값 131)로 펼칩니다.

monthly — 매월 반복 일자 선택 (1~31)

weekLabels로 week 모드 라벨을 오버라이드할 수 있습니다(7개, 기본 일~토 — 값 인덱스는 일=0 … 토=6 고정).

크기#

단일 크기입니다 — 버튼은 control.height-md(44px) 정사각으로 터치 히트 영역을 그대로 충족합니다. monthly 그리드는 7열로 고정되어 한 달 31일이 5줄 안에 들어갑니다.

상태#

disabled — 특정 값 잠금 (week: 주말 0·6)
  • 선택aria-pressed="true" + color.primary 채움 + color.on-primary 잉크
  • Hover — 미선택 color.surface-hover · 선택 color.primary-hover
  • Focus:focus-visiblecolor.primary 아웃라인 링
  • Disableddisabled 배열의 값은 버튼 disabled로 클릭·토글 차단

비제어 컴포넌트입니다 — defaultValue로 시작하고 토글마다 오름차순 정렬된 onChange(values)로 알립니다.

Props#

Prop타입기본값설명
mode'week' | 'monthly''week'week: 일~토 7버튼(0~6) · monthly: 1~31 그리드
defaultValueReadonlyArray<number>초기 선택값 — week는 0~6, monthly는 1~31 (비제어)
onChange(values: number[]) => void토글 콜백 — 오름차순 정렬된 선택값 배열
disabledReadonlyArray<number>선택 불가 값 목록 — 해당 버튼이 disabled로 렌더
aria-labelstring그룹 접근성 이름 — 필수
weekLabelsReadonlyArray<string>['일', … '토']week 모드 버튼 라벨 오버라이드 (7개)
…restOmit<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 잉크
선택 Hovercolor.primary-hover
미선택 Hovercolor.surface-hover
미선택 눌림color.surface-pressed (선택 배경은 안 덮음)
포커스color.focus-ring 아웃라인
비활성input.bg-disabled · color.text-placeholder
모션duration.fast + ease.standard