Picker
날짜/시간을 선택할 수 있는 Picker 컴포넌트입니다. 두 가지 모드를 지원합니다:
- Overlay 모드:
useOverlay와 함께 사용하여 화면 중앙에 dim 배경과 함께 표시 - Popup 모드:
PickerTrigger와 함께 사용하여 버튼 아래에 팝업으로 표시
DatePicker
달력을 통해 날짜를 선택합니다. 과거 날짜 선택 방지(disablePast)와 제목 커스터마이징을 지원합니다.
Overlay 모드
화면 중앙에 dim 배경과 함께 DatePicker를 표시합니다.
tsx
"use client";import { DatePicker, useOverlay, FilledButton } from "@b1nd/dodam-design-system/components";import { useState } from "react";export default function Example() {const overlay = useOverlay();const [date, setDate] = useState(new Date());const openDatePicker = () => {overlay.open(({ isOpen, close, exit, setDimClickHandler }) => (<DatePickeropen={isOpen}date={date}onChangeDate={setDate}onClose={close}onExited={exit}setDimClickHandler={setDimClickHandler}/>));};return <FilledButton onClick={openDatePicker}>날짜 선택</FilledButton>;}
Popup 모드
버튼 아래에 팝업으로 DatePicker를 표시합니다.
tsx
"use client";import { DatePicker, PickerTrigger, FilledButton } from "@b1nd/dodam-design-system/components";import { useState } from "react";export default function Example() {const [date, setDate] = useState(new Date());return (<PickerTriggercontent={({ onClose }) => (<DatePicker.Contentdate={date}onChangeDate={setDate}onClose={onClose}/>)}><FilledButton>날짜 선택</FilledButton></PickerTrigger>);}
과거 날짜 비활성화
disablePast prop을 사용하면 과거 날짜를 선택할 수 없습니다.
tsx
"use client";import { DatePicker, useOverlay, FilledButton } from "@b1nd/dodam-design-system/components";import { useState } from "react";export default function Example() {const overlay = useOverlay();const [date, setDate] = useState(new Date());const openDatePicker = () => {overlay.open(({ isOpen, close, exit, setDimClickHandler }) => (<DatePickeropen={isOpen}date={date}onChangeDate={setDate}onClose={close}onExited={exit}setDimClickHandler={setDimClickHandler}disablePast/>));};return <FilledButton onClick={openDatePicker}>날짜 선택</FilledButton>;}
DatePicker Props (Overlay 모드)
| Prop | Type | Default | Description |
|---|---|---|---|
open | boolean | - | Picker 표시 여부 |
date | Date | new Date() | 현재 선택된 날짜 |
onChangeDate | (date: Date) => void | - | 날짜 선택 시 호출되는 콜백 |
disablePast | boolean | false | 과거 날짜 비활성화 |
title | string | "날짜 선택" | 달력 상단 제목 |
onClose | () => void | - | 닫기 애니메이션 시작 콜백 |
onExited | () => void | - | 닫기 애니메이션 완료 콜백 |
DatePicker.Content Props (Popup 모드)
| Prop | Type | Default | Description |
|---|---|---|---|
date | Date | new Date() | 현재 선택된 날짜 |
onChangeDate | (date: Date) => void | - | 날짜 선택 시 호출되는 콜백 |
disablePast | boolean | false | 과거 날짜 비활성화 |
title | string | "날짜 선택" | 달력 상단 제목 |
onClose | () => void | - | 닫기 콜백 |
TimePicker
휠 스크롤로 시간/분을 선택합니다. 스크롤은 무한히 회전하며, 실제 값 반영은 "선택" 버튼 클릭 시에만 이루어집니다.
Overlay 모드
화면 중앙에 dim 배경과 함께 TimePicker를 표시합니다.
tsx
"use client";import { TimePicker, useOverlay, FilledButton, getCurrentTime, type Time } from "@b1nd/dodam-design-system/components";import { useState } from "react";export default function Example() {const overlay = useOverlay();const [time, setTime] = useState<Time>(getCurrentTime());const openTimePicker = () => {overlay.open(({ isOpen, close, exit, setDimClickHandler }) => (<TimePickeropen={isOpen}time={time}onChangeTime={setTime}onClose={close}onExited={exit}setDimClickHandler={setDimClickHandler}/>));};return <FilledButton onClick={openTimePicker}>시간 선택</FilledButton>;}
Popup 모드
버튼 아래에 팝업으로 TimePicker를 표시합니다.
tsx
"use client";import { TimePicker, PickerTrigger, FilledButton, getCurrentTime, type Time } from "@b1nd/dodam-design-system/components";import { useState } from "react";export default function Example() {const [time, setTime] = useState<Time>(getCurrentTime());return (<PickerTriggercontent={({ onClose }) => (<TimePicker.Contenttime={time}onChangeTime={setTime}onClose={onClose}/>)}><FilledButton>시간 선택</FilledButton></PickerTrigger>);}
TimePicker Props
| Prop | Type | Default | Description |
|---|---|---|---|
open | boolean | - | Picker 표시 여부 |
time | Time | - | 현재 선택된 시간 |
onChangeTime | (time: Time) => void | - | 시간 선택 시 호출되는 콜백 |
title | string | "시간 선택" | 피커 상단 제목 |
onClose | () => void | - | 닫기 애니메이션 시작 콜백 |
onExited | () => void | - | 닫기 애니메이션 완료 콜백 |
Utilities
getCurrentTime()
현재 시스템 시간을 Time 형태로 반환합니다.
ts
import { getCurrentTime, type Time } from "@b1nd/dodam-design-system/components";const time: Time = getCurrentTime();// { hour: number; minute: number }
Notes
- dim 영역을 클릭하면 Picker가 닫힙니다.
- 실제 값 반영은 "선택" 버튼 클릭 시에만 발생합니다.
useOverlay를 사용하여 오버레이로 표시합니다.