Get startedFoundationsComponentsPatternsRules

Calendar

달력은 한 달 단위로 날짜를 보여주고, 그 안에서 날짜를 눈으로 보며 고르게 해요.

설치

pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/steel/calendar.json

Examples

Default

defaultYear, defaultMonth 로 처음 보여줄 달을 정해요. selected 는 지금 고른 날짜, previouslySelected 는 바로 전에 골랐던 날짜예요. 오늘(today)은 진한 굵은 글자와 밑줄로, 선택한 날은 진한 배경에 반전(inverse) 글자로 표시돼요.

상태표시
오늘text.selected 굵은 글자 + 아래 2px 밑줄
선택됨background.selected.bold 배경 + text.inverse 글자 (hover selected.bold.hovered, 누름 selected.bold.pressed)
이전 선택background.selected 배경 + text.subtle 글자
다른 달 날짜text.subtlest 글자
비활성text.disabled 글자, 커서 not-allowed

Disabled

disabled 에 YYYY-MM-DD 배열을 넘기면 그 날짜를 고를 수 없어요. 휴무일처럼 몇몇 날만 막을 때 써요.

Disabled ranges

minDate, maxDate 로 고를 수 있는 기간을 정해요. 범위 밖 날짜는 모두 비활성이 돼요.

Disabled filters

규칙으로 막아야 하면 disabledDateFilter 를 써요. 날짜 문자열을 받아 true 를 돌려주면 그 날짜가 비활성이 돼요. 아래는 주말을 막는 예예요.

Localization

locale 로 월·요일 이름과 제목 표기를 바꾸고, weekStartDay 로 주가 시작하는 요일을 정해요. 서버와 브라우저의 Intl 출력이 달라 화면이 어긋나는 일을 막으려고, 한국어·영어·일본어 이름은 고정 문자열로 넣어 뒀어요.

Controlled

year·month·selected 를 직접 관리하면 onChange(달 이동·키보드 이동)와 onSelect(날짜 선택)로 값을 받아 갱신해요.

Usage guidelines

  • 한 달을 한눈에 보면서 날짜를 골라야 할 때 달력을 써요. 일정 화면이나 기간을 훑어보는 화면에 잘 맞아요.
  • 폼에서 날짜를 입력받는 경우에는 대부분 Datetime Picker 가 더 나아요. 직접 입력할 수 있고, 검증과 오류 메시지를 붙이기도 쉬워요.
  • 고를 수 없는 날짜는 disabled, disabledDateFilter, minDate, maxDate 로 미리 막아 사용자가 헛걸음하지 않게 해요.
  • 날짜를 막았다면 왜 막았는지 주변 문구로 알려줘요. (예: "회의실 예약이 가능한 날만 고를 수 있어요.")
  • 사용자가 익숙한 표기로 보도록 locale 을 맞춰요.
Do· 이유를 함께 보여주기
비활성 날짜가 있으면 근처에 그 이유를 짧게 적어요.
Don't· 폼 입력에 달력만 쓰기
생년월일처럼 직접 입력이 빠른 값을 달력에서만 고르게 하지 않아요. Date Picker 를 써요.

Accessibility

  • 전체는 role="group" 이고 label(기본 '달력') 이 이름이 돼요. 날짜 영역은 role="grid" 로, 제목(예: 2026년 10월)이 grid 의 이름이에요.
  • 날짜에 포커스가 가면 "2026년 10월 27일 화요일" 처럼 연·월·일·요일 전체를 읽어줘요. 오늘은 aria-current="date", 선택된 날은 aria-pressed="true" 예요.
  • 날짜 버튼 가운데 하나만 탭 순서에 들어가요. 그 뒤로는 방향키로 하루(←/→)나 한 주(↑/↓)씩 옮기고, 달이 바뀌면 자동으로 넘어가요. Enter·Space 로 골라요.
  • 비활성 날짜도 포커스는 받지만(aria-disabled) 고를 수는 없어요.
  • 이전·다음 연도/달 버튼의 이름에는 이동할 달이 붙어요. (예: "다음 달, 2026년 11월") 달을 한 번 옮긴 뒤부터는 제목이 aria-live 로 읽혀요.

Props

Prop

Type

On this page