LLM GuideMarkdown
DatePicker
LLM 및 에이전트 워크플로우용 원문 Markdown입니다.
# @mycrm-ui/components DatePicker LLM 가이드
이 문서는 제품 화면에서 Calendar를 input-like trigger, popover, clear 버튼, form hidden input과 함께 사용할 때 참고한다.
## DatePicker의 역할
`DatePicker`는 단순히 `Calendar`를 반환하는 wrapper가 아니다. 현재 구현은 다음 UI와 동작을 포함한다.
- input처럼 보이는 trigger 버튼
- Calendar popover
- 지우기 버튼
- form submit용 hidden input
- 이전/다음 월 이동 버튼
- 연도/월 선택 내부 popover
- single, range, multiple 선택 모드
## 핵심 import
```tsx
import { DatePicker } from "@mycrm-ui/components";
import type {
CalendarDateSelectValue,
DatePickerRangeValue,
DatePickerMultipleValue,
} from "@mycrm-ui/components";
```
## Single 예시
```tsx
import { useState } from "react";
import { DatePicker } from "@mycrm-ui/components";
import type { CalendarDateSelectValue } from "@mycrm-ui/components";
export function SingleDatePicker() {
const [value, setValue] = useState<CalendarDateSelectValue | null>(null);
return (
<DatePicker
name="eventDate"
value={value}
onChange={setValue}
placeholder="날짜 선택"
clearLabel="지우기"
weekdayLabelType="ko"
dateSelectValueType="yyyy-MM-dd"
/>
);
}
```
## Range 예시
```tsx
const [range, setRange] = useState<DatePickerRangeValue>({
startDate: null,
endDate: null,
});
<DatePicker
range
name="period"
rangeStart={range.startDate}
rangeEnd={range.endDate}
onRangeDraftChange={setRange}
onRangeChange={setRange}
placeholder="기간 선택"
weekdayLabelType="ko"
/>;
```
## Multiple 예시
```tsx
const [multiple, setMultiple] = useState<DatePickerMultipleValue>({
selectedDates: [],
});
<DatePicker
multi
selectedDates={multiple.selectedDates}
maxSelectedDates={3}
onMultipleChange={setMultiple}
placeholder="여러 날짜 선택"
weekdayLabelType="ko"
/>;
```
## 주요 props
- `selectionMode`: `"single"`, `"range"`, `"multiple"` 중 하나다.
- `range`: range shorthand다. `selectionMode` 대신 사용할 수 있다.
- `multi`: multiple shorthand다. `range`가 있으면 `range`가 우선한다.
- `value`, `defaultValue`, `onChange`: single 모드 값 제어다.
- `rangeStart`, `rangeEnd`, `onRangeDraftChange`, `onRangeChange`: range 모드 값 제어다.
- `selectedDates`, `defaultSelectedDates`, `onMultipleChange`: multiple 모드 값 제어다.
- `name`: hidden input 이름이다. range 모드는 시작/종료 hidden input을 만든다.
- `clearable`: 지우기 버튼 표시 여부다. 기본값은 `true`다.
- `closeOnSelect`: 선택 후 popover를 닫을지 결정한다. 기본 동작은 single/range는 닫고 multiple은 닫지 않는다.
- `dateSelectValueType`: DatePicker 기본값은 `"yyyy-MM-dd"`다.
## 기본값
- `placeholder`: `"Select date"`
- `clearLabel`: `"Clear"`
- `popoverLabel`: `"Choose date"`
- `theme`: `"light"`
- `weekdayLabelType`: `"en"`
- `weekStartsOn`: `0`
- `showAdjacentMonthDays`: `true`
- `showToday`: `true`
- `showHover`: `true`
## LLM 구현 체크리스트
- 제품 화면의 날짜 입력은 Calendar보다 DatePicker를 우선 고려한다.
- form submit이 필요하면 `name`을 지정한다.
- 기간 선택은 `range`, 다중 선택은 `multi` shorthand를 사용하면 된다.
- 길이가 긴 range 텍스트는 기본 triggerValue 스타일에서 한 줄 말줄임으로 처리된다.