날짜 선택기
양식 및 필터에서 특정 날짜, 기간, 생일을 선택할 수 있는 팝오버 캘린더로, 네오브루탈리즘 스타일의 테두리와 강렬한 그림자 효과가 적용되어 있습니다.
"use client"
import * as React from "react"날짜 선택기는 하나의 프리미티브가 아닙니다. Popover와 Calendar 컴포넌트를 조합한 것으로, 캘린더 그리드는 react-day-picker가 처리하며, 네오브루탈리즘 공식(두꺼운 테두리, 선명한 그림자, 굵은 서체)에 맞춰 스타일을 입혔습니다.
다음과 같은 경우에 사용합니다.
- 예약과 일정 — 체크인/체크아웃 기간, 예약 시간대, 배송일.
- 폼 필드 — 생년월일, 마감일, 시작일. 직접 입력할 수 있게 input과 짝지어 쓰세요.
- 대시보드 필터 — 분석, 주문, 리포트에 적용하는 기간 선택.
설치#
Date Picker는 <Popover /> 와 <Calendar /> 컴포넌트를 조합해 구축됩니다.
Popover 와 Calendar 컴포넌트의 설치 안내를 참고하세요.
사용법#
"use client"
import * as React from "react"
import { format } from "date-fns"
import { Calendar as CalendarIcon } from "lucide-react"
import { cn } from "@/lib/utils"
import { Button } from "@/components/ui/button"
import { Calendar } from "@/components/ui/calendar"
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover"
export function DatePickerDemo() {
const [date, setDate] = React.useState<Date>()
return (
<Popover>
<PopoverTrigger
render={
<Button
variant="outline"
data-empty={!date}
className="justify-start text-left font-normal data-[empty=true]:text-muted-foreground"
/>
}
>
<CalendarIcon />
{date ? format(date, "PPP") : <span>Pick a date</span>}
</PopoverTrigger>
<PopoverContent className="w-auto p-0">
<Calendar mode="single" selected={date} onSelect={setDate} />
</PopoverContent>
</Popover>
)
}자세한 내용은 React DayPicker 문서를 참고하세요.
구성#
날짜 선택기는 Popover 와 Calendar 로 구축됩니다 (DatePicker 라는 루트 컴포넌트는 없습니다).
Popover
├── PopoverTrigger
└── PopoverContent
└── Calendar예제#
기본#
기본 날짜 선택 컴포넌트입니다.
"use client"
import * as React from "react"범위 선택기#
날짜 범위를 선택하는 날짜 선택 컴포넌트입니다.
"use client"
import * as React from "react"생년월일#
생년월일을 선택하는 날짜 선택 컴포넌트입니다. 이 컴포넌트에는 날짜와 월을 선택하는 드롭다운 캡션 레이아웃이 포함되어 있습니다.
"use client"
import * as React from "react"입력 필드#
날짜를 선택하는 입력 필드를 갖춘 날짜 선택 컴포넌트입니다.
"use client"
import * as React from "react"시간 선택기#
시간을 선택하는 시간 입력 필드를 갖춘 날짜 선택 컴포넌트입니다.
"use client"
import * as React from "react"자연어 선택기#
이 컴포넌트는 chrono-node 라이브러리를 사용해 자연어 날짜를 파싱합니다.
"use client"
import * as React from "react"RTL#
Neobrutalism에서 RTL 지원을 활성화하는 방법은 RTL 설정 가이드를 참고하세요.
"use client"
import * as React from "react"접근성#
이 조합은 WAI-ARIA Date Picker Dialog 예제를 따릅니다. Popover가 트리거에 aria-expanded와 aria-controls를 연결하고 닫힐 때 포커스를 되돌려 주며, react-day-picker는 한 달을 레이블이 붙은 날짜 셀들의 grid로 렌더링하고 로빙 tabindex를 적용합니다.
키보드 상호작용:
| 키 | 동작 |
|---|---|
Space / Enter(트리거에서) | 팝오버 열기 |
ArrowLeft / ArrowRight | 이전/다음 날짜로 포커스 이동 |
ArrowUp / ArrowDown | 이전/다음 주의 같은 날짜로 포커스 이동 |
PageUp / PageDown | 이전/다음 달로 이동 |
Shift + PageUp / Shift + PageDown | 이전/다음 해로 이동 |
Home / End | 해당 주의 첫째/마지막 날로 이동 |
Space / Enter | 포커스된 날짜 선택 |
Escape | 팝오버를 닫고 트리거로 포커스 복귀 |