Legacy
CoreCalendar
캘린더 컴포넌트
Usage
기본 사용법 (단일 날짜 선택)
import { useState } from 'react';
import { CoreCalendar } from '@featuring-corp/components';
const [date, setDate] = useState<Date | null>(null);
<CoreCalendar
selected={date}
onChange={(date) => setDate(date)}
locale="ko"
/>월 선택 모드
import { useState } from 'react';
import { CoreCalendar } from '@featuring-corp/components';
const [date, setDate] = useState<Date | null>(null);
<CoreCalendar
selected={date}
onChange={(date) => setDate(date)}
locale="ko"
showMonthYearPicker
/>날짜 범위 선택
import { useState } from 'react';
import { CoreCalendar } from '@featuring-corp/components';
const [startDate, setStartDate] = useState<Date | null>(null);
const [endDate, setEndDate] = useState<Date | null>(null);
<CoreCalendar
startDate={startDate}
endDate={endDate}
locale="ko"
selectsRange
onChange={(dates) => {
if (dates !== null && Array.isArray(dates)) {
setStartDate(dates[0]);
setEndDate(dates[1]);
}
}}
/>월 범위 선택
import { useState } from 'react';
import { CoreCalendar } from '@featuring-corp/components';
const [startDate, setStartDate] = useState<Date | null>(null);
const [endDate, setEndDate] = useState<Date | null>(null);
<CoreCalendar
startDate={startDate}
endDate={endDate}
locale="ko"
selectsRange
showMonthYearPicker
monthsShown={2}
onChange={(dates) => {
if (dates !== null && Array.isArray(dates)) {
setStartDate(dates[0]);
setEndDate(dates[1]);
}
}}
/>커스텀 Input과 함께 사용
import { useState, forwardRef } from 'react';
import { CoreCalendar } from '@featuring-corp/components';
import { CoreTextInput } from '@featuring-corp/components';
import { CoreButton } from '@featuring-corp/components';
import { IconCalendarFilled, IconChevronDownOutline } from '@featuring-corp/icons';
const [startDate, setStartDate] = useState<Date | null>(null);
const [endDate, setEndDate] = useState<Date | null>(null);
const [open, setOpen] = useState(false);
const CustomInput = forwardRef(({ value, onClick }: { value?: string; onClick?: any }, ref: any) => (
<div
ref={ref}
onClick={() => {
onClick();
setOpen(!open);
}}
style={{ cursor: 'pointer' }}
>
<CoreTextInput
leadingElement={<IconCalendarFilled />}
trailingElement={<IconChevronDownOutline />}
width="360px"
defaultValue={value}
style={{ cursor: 'pointer' }}
/>
</div>
));
<CoreCalendar
startDate={startDate}
endDate={endDate}
customInput={<CustomInput />}
open={open}
locale="ko"
selectsRange
inline={false}
dateFormat="yyyy.MM.dd"
monthsShown={2}
elevation
onClickOutside={() => {
setOpen(false);
setStartDate(null);
setEndDate(null);
}}
onChange={(dates) => {
if (dates !== null && Array.isArray(dates)) {
setStartDate(dates[0]);
setEndDate(dates[1]);
}
}}
actionsChildren={[
<CoreButton
key="cancel"
text="취소"
buttonType="tertiary"
onClick={() => {
setStartDate(null);
setEndDate(null);
setOpen(false);
}}
/>,
<CoreButton
key="apply"
text="확인"
buttonType="secondary"
onClick={() => {
setOpen(false);
// 선택된 날짜 처리
}}
/>,
]}
/>제외할 날짜 설정
import { useState } from 'react';
import { CoreCalendar } from '@featuring-corp/components';
import { addDays, addMonths } from 'date-fns';
const [date, setDate] = useState<Date | null>(null);
const today = new Date();
// 특정 날짜 제외
const excludeDates = [
addDays(today, -3),
addDays(today, 3),
addDays(today, 4)
];
<CoreCalendar
selected={date}
onChange={(date) => setDate(date)}
locale="ko"
excludeDates={excludeDates}
/>
// 월 선택 모드에서 특정 월 제외
const excludeMonths = [
addMonths(today, -2),
addMonths(today, 2)
];
<CoreCalendar
selected={date}
onChange={(date) => setDate(date)}
locale="ko"
showMonthYearPicker
excludeDates={excludeMonths}
/>여러 달 표시
import { useState } from 'react';
import { CoreCalendar } from '@featuring-corp/components';
const [startDate, setStartDate] = useState<Date | null>(null);
const [endDate, setEndDate] = useState<Date | null>(null);
<CoreCalendar
startDate={startDate}
endDate={endDate}
locale="ko"
selectsRange
monthsShown={2}
onChange={(dates) => {
if (dates !== null && Array.isArray(dates)) {
setStartDate(dates[0]);
setEndDate(dates[1]);
}
}}
/>Props
DatePickerProps 타입을 확장한 컴포넌트입니다.
Prop
Type
CoreDayType
Prop
Type
스타일
기본 스타일 속성
Calendar Header:
display:flexjustify-content:centermargin-bottom:spacing-300(12px)width:100%height:32px
Navigation:
border-radius:radius-fullstroke-width:0.5pxstroke:icon.primarytransition:0.2s- Hover:
background-color: background[2],stroke: icon.interactive
Calendar Container:
padding:spacing-400(16px)elevation:elevation-8border-radius:radius-100background-color:white
Actions Container:
display:flexjustify-content:flex-endgap:spacing-200(8px)width:100%
Calendar HR:
background-color:border-defaultwidth:calc(100% + spacing-800)(calc(100% + 32px))height:1px
States (상태별 토큰)
Navigation:
- Default:
stroke: icon-primary - Hover:
background-color: background[2],stroke: icon-interactive
Day Cell 스타일
기본:
width:32pxheight:32px(line-height)typography:body[2]text-align:centerborder-radius:0(기본)margin-block:spacing-50margin-inline:0
Today (오늘):
color:primary[60]typography:heading[2]text-decoration-line:underlinetext-decoration-color:primary[60]
Selected / Range Start / Range End:
background-color:primary[60]color:text[6]
Range Start:
border-top-left-radius:spacing-100border-bottom-left-radius:spacing-100
Range End:
border-top-right-radius:spacing-100border-bottom-right-radius:spacing-100
In Range (선택 범위 내):
background-color:primary[10]color:text[1]
Selected/In Range Hover:
background-color:primary[70]color:text[6]
Outside Month:
color:text[4]
Disabled / Excluded:
background-color:toggle-disabled-bgcolor:text[5]
Day Names 스타일
width:32pxheight:32px(line-height)typography:caption[2]color:text[1]margin:0
Month Text 스타일 (월 선택 모드)
기본:
width:100%(wrapper:224px)height:36pxtypography:body[2]color:text[1]border-radius:0
Selected / Range Start / Range End:
background-color:primary[60]color:text[6]
In Range:
background-color:primary[10]color:text[1]
Disabled:
background-color:toggle-disabled-bgcolor:text[4]
Calendar Grid
여러 달 표시 시:
display:gridgrid-auto-flow:columngap:spacing-600
Current Month 스타일
color:text[1]typography:heading[2]line-height:32px