콘텐츠로 건너뛰기

날짜 선택기

양식 및 필터에서 특정 날짜, 기간, 생일을 선택할 수 있는 팝오버 캘린더로, 네오브루탈리즘 스타일의 테두리와 강렬한 그림자 효과가 적용되어 있습니다.

"use client"

import * as React from "react"

날짜 선택기는 하나의 프리미티브가 아닙니다. PopoverCalendar 컴포넌트를 조합한 것으로, 캘린더 그리드는 react-day-picker가 처리하며, 네오브루탈리즘 공식(두꺼운 테두리, 선명한 그림자, 굵은 서체)에 맞춰 스타일을 입혔습니다.

다음과 같은 경우에 사용합니다.

  • 예약과 일정 — 체크인/체크아웃 기간, 예약 시간대, 배송일.
  • 폼 필드 — 생년월일, 마감일, 시작일. 직접 입력할 수 있게 input과 짝지어 쓰세요.
  • 대시보드 필터 — 분석, 주문, 리포트에 적용하는 기간 선택.

설치

Date Picker는 <Popover /><Calendar /> 컴포넌트를 조합해 구축됩니다.

PopoverCalendar 컴포넌트의 설치 안내를 참고하세요.

사용법

components/example-date-picker.tsx
"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 문서를 참고하세요.

구성

날짜 선택기는 PopoverCalendar 로 구축됩니다 (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-expandedaria-controls를 연결하고 닫힐 때 포커스를 되돌려 주며, react-day-picker는 한 달을 레이블이 붙은 날짜 셀들의 grid로 렌더링하고 로빙 tabindex를 적용합니다.

키보드 상호작용:

동작
Space / Enter(트리거에서)팝오버 열기
ArrowLeft / ArrowRight이전/다음 날짜로 포커스 이동
ArrowUp / ArrowDown이전/다음 주의 같은 날짜로 포커스 이동
PageUp / PageDown이전/다음 달로 이동
Shift + PageUp / Shift + PageDown이전/다음 해로 이동
Home / End해당 주의 첫째/마지막 날로 이동
Space / Enter포커스된 날짜 선택
Escape팝오버를 닫고 트리거로 포커스 복귀