diff --git a/package-lock.json b/package-lock.json
index 03bb76b..50f0024 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,7 @@
"axios": "^1.7.9",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
+ "date-fns": "^4.1.0",
"dayjs": "^1.11.13",
"es-toolkit": "^1.32.0",
"lenis": "^1.1.20",
@@ -1890,9 +1891,10 @@
}
},
"node_modules/date-fns": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
- "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/kossnocorp"
@@ -4721,6 +4723,16 @@
"react-dom": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc"
}
},
+ "node_modules/react-datepicker/node_modules/date-fns": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+ "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
"node_modules/react-dom": {
"version": "19.0.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
diff --git a/package.json b/package.json
index 786d931..c6f4924 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
"axios": "^1.7.9",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
+ "date-fns": "^4.1.0",
"dayjs": "^1.11.13",
"es-toolkit": "^1.32.0",
"lenis": "^1.1.20",
diff --git a/src/app/(after-login)/form/page.tsx b/src/app/(after-login)/form/page.tsx
index bb089a7..a4df8cb 100644
--- a/src/app/(after-login)/form/page.tsx
+++ b/src/app/(after-login)/form/page.tsx
@@ -66,7 +66,7 @@ export default function FormPage() {
return (
-
+
{/* input sample : controlled */}
diff --git a/src/assets/icons/circle_arrow_right.svg b/src/assets/icons/circle_arrow_right.svg
new file mode 100644
index 0000000..07b3c56
--- /dev/null
+++ b/src/assets/icons/circle_arrow_right.svg
@@ -0,0 +1 @@
+
diff --git a/src/components/ui/Field/DateInput.tsx b/src/components/ui/Field/DateInput.tsx
index 24426a4..5c1e115 100644
--- a/src/components/ui/Field/DateInput.tsx
+++ b/src/components/ui/Field/DateInput.tsx
@@ -1,11 +1,21 @@
import { InputHTMLAttributes, useId } from 'react';
import Image from 'next/image';
-import DatePicker from 'react-datepicker';
+import dayjs from 'dayjs';
+import DatePicker, { ReactDatePickerCustomHeaderProps, registerLocale } from 'react-datepicker';
+import { ko } from 'date-fns/locale/ko';
+import { getMonth, getYear } from 'date-fns';
import { cn } from '@/utils/helper';
import { BaseError, baseErrorClassName, baseFieldClassName, BaseItem, BaseLabel } from './Base';
import calendarIcon from '@/assets/icons/calendar.svg';
import { BaseField } from './types';
+import arrowLeft from '@/assets/icons/circle_arrow_left.svg';
+import arrowRight from '@/assets/icons/circle_arrow_right.svg';
import 'react-datepicker/dist/react-datepicker.css';
+import '@/assets/css/datepicker.css';
+
+registerLocale('ko', ko);
+
+type DayOfWeek = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
type DateInputProps = BaseField &
Omit
, 'value' | 'onChange'> & {
@@ -13,6 +23,10 @@ type DateInputProps = BaseField &
onChange: (value: Date | null) => void;
};
+const getDayClassName = (date: Date) => {
+ return dayjs(date).format('dddd').toLowerCase() as DayOfWeek;
+};
+
export function DateInput({ label, error, value, onChange, onBlur, placeholder, required, className, disabled, readOnly }: DateInputProps) {
const id = useId();
@@ -25,7 +39,6 @@ export function DateInput({ label, error, value, onChange, onBlur, placeholder,
)}
- {/* TODO: DatePicker 스타일링 및 locale 설정 예정 */}
}
/>
{error && {error}}
);
}
+
+function CustomHeader({ date, decreaseMonth, increaseMonth, prevMonthButtonDisabled, nextMonthButtonDisabled }: ReactDatePickerCustomHeaderProps) {
+ return (
+
+
+
+ {getYear(date)}년 {getMonth(date) + 1}월
+
+
+
+ );
+}