@causw/core 0.0.16 → 0.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +123 -0
- package/dist/components/Avatar/Avatar.d.cts +2 -2
- package/dist/components/Avatar/Avatar.d.mts +2 -2
- package/dist/components/Avatar/Avatar.styles.d.cts +3 -3
- package/dist/components/BottomNavigation/BottomNavigation.d.cts +5 -5
- package/dist/components/BottomNavigation/BottomNavigation.d.mts +5 -5
- package/dist/components/BottomNavigation/BottomNavigation.styles.d.cts +3 -3
- package/dist/components/BottomNavigation/BottomNavigation.styles.d.mts +3 -3
- package/dist/components/BottomSheet/BottomSheet.d.cts +6 -6
- package/dist/components/BottomSheet/BottomSheet.d.mts +6 -6
- package/dist/components/BottomSheet/BottomSheet.styles.d.cts +3 -3
- package/dist/components/BottomSheet/BottomSheet.styles.d.mts +3 -3
- package/dist/components/Button/Button.d.cts +2 -2
- package/dist/components/Button/Button.d.cts.map +1 -1
- package/dist/components/Button/Button.d.mts +2 -2
- package/dist/components/Button/Button.styles.d.cts +3 -3
- package/dist/components/Button/Button.styles.d.mts +3 -3
- package/dist/components/CTAButton/CTAButton.d.cts +2 -2
- package/dist/components/CTAButton/CTAButton.d.mts +2 -2
- package/dist/components/CTAButton/CTAButton.styles.d.mts +3 -3
- package/dist/components/Calendar/Calendar.cjs +2 -2
- package/dist/components/Calendar/Calendar.d.cts +4 -2
- package/dist/components/Calendar/Calendar.d.cts.map +1 -1
- package/dist/components/Calendar/Calendar.d.mts +4 -2
- package/dist/components/Calendar/Calendar.d.mts.map +1 -1
- package/dist/components/Calendar/Calendar.mjs +2 -2
- package/dist/components/Calendar/Calendar.mjs.map +1 -1
- package/dist/components/Calendar/Calendar.styles.d.cts +3 -3
- package/dist/components/Calendar/Calendar.styles.d.mts +3 -3
- package/dist/components/Checkbox/Checkbox.d.cts +4 -4
- package/dist/components/Checkbox/Checkbox.d.mts +4 -4
- package/dist/components/Checkbox/Checkbox.styles.d.cts +3 -3
- package/dist/components/Checkbox/Checkbox.styles.d.mts +3 -3
- package/dist/components/Chip/Chip.d.cts +2 -2
- package/dist/components/Chip/Chip.d.mts +2 -2
- package/dist/components/Chip/Chip.styles.d.cts +3 -3
- package/dist/components/Chip/Chip.styles.d.mts +3 -3
- package/dist/components/DatePicker/DatePicker.cjs +93 -0
- package/dist/components/DatePicker/DatePicker.d.cts +40 -0
- package/dist/components/DatePicker/DatePicker.d.cts.map +1 -0
- package/dist/components/DatePicker/DatePicker.d.mts +41 -0
- package/dist/components/DatePicker/DatePicker.d.mts.map +1 -0
- package/dist/components/DatePicker/DatePicker.mjs +92 -0
- package/dist/components/DatePicker/DatePicker.mjs.map +1 -0
- package/dist/components/DatePicker/DatePicker.styles.cjs +33 -0
- package/dist/components/DatePicker/DatePicker.styles.d.cts +84 -0
- package/dist/components/DatePicker/DatePicker.styles.d.cts.map +1 -0
- package/dist/components/DatePicker/DatePicker.styles.d.mts +84 -0
- package/dist/components/DatePicker/DatePicker.styles.d.mts.map +1 -0
- package/dist/components/DatePicker/DatePicker.styles.mjs +33 -0
- package/dist/components/DatePicker/DatePicker.styles.mjs.map +1 -0
- package/dist/components/DatePicker/index.d.cts +2 -0
- package/dist/components/DatePicker/index.d.mts +2 -0
- package/dist/components/Dialog/Dialog.d.cts +13 -13
- package/dist/components/Dialog/Dialog.d.mts +5 -5
- package/dist/components/Dialog/Dialog.styles.d.cts +3 -3
- package/dist/components/Dialog/Dialog.styles.d.mts +3 -3
- package/dist/components/Drawer/Drawer.d.cts +11 -11
- package/dist/components/Drawer/Drawer.d.mts +3 -3
- package/dist/components/Drawer/Drawer.styles.d.cts +3 -3
- package/dist/components/Dropdown/Dropdown.d.cts +3 -3
- package/dist/components/Dropdown/Dropdown.d.mts +3 -3
- package/dist/components/Dropdown/Dropdown.styles.d.cts +3 -3
- package/dist/components/Dropdown/Dropdown.styles.d.mts +3 -3
- package/dist/components/Dropdown/Dropdown.styles.d.mts.map +1 -1
- package/dist/components/Field/Field.d.cts +5 -5
- package/dist/components/Field/Field.d.mts +5 -5
- package/dist/components/Float/Float.styles.d.cts +3 -3
- package/dist/components/Float/Float.styles.d.mts +3 -3
- package/dist/components/FloatingActionButton/FloatingActionButton.d.cts +2 -2
- package/dist/components/FloatingActionButton/FloatingActionButton.styles.d.cts +3 -3
- package/dist/components/FloatingActionButton/FloatingActionButton.styles.d.mts +3 -3
- package/dist/components/Grid/Grid.styles.d.cts +3 -3
- package/dist/components/Grid/Grid.styles.d.mts +3 -3
- package/dist/components/HStack/HStack.d.cts +2 -2
- package/dist/components/HStack/HStack.d.mts +2 -2
- package/dist/components/Modal/Modal.d.cts +10 -10
- package/dist/components/Modal/Modal.d.mts +7 -7
- package/dist/components/Modal/Modal.styles.d.cts +3 -3
- package/dist/components/Modal/Modal.styles.d.mts +3 -3
- package/dist/components/Primitive/Primitive.d.cts +16 -16
- package/dist/components/Primitive/Primitive.d.mts +16 -16
- package/dist/components/PullToRefresh/PullToRefresh.d.cts +2 -2
- package/dist/components/PullToRefresh/PullToRefresh.d.mts +2 -2
- package/dist/components/PullToRefresh/PullToRefresh.styles.d.cts +3 -3
- package/dist/components/PullToRefresh/PullToRefresh.styles.d.mts +3 -3
- package/dist/components/Radio/Radio.d.cts +3 -3
- package/dist/components/Radio/Radio.d.mts +3 -3
- package/dist/components/Radio/Radio.d.mts.map +1 -1
- package/dist/components/RatioChart/RatioChart.d.cts +5 -5
- package/dist/components/RatioChart/RatioChart.d.mts +5 -5
- package/dist/components/RatioChart/RatioChartEditor.d.cts +2 -2
- package/dist/components/RatioChart/RatioChartEditor.d.mts +2 -2
- package/dist/components/Select/Select.d.cts +5 -5
- package/dist/components/Select/Select.d.mts +5 -5
- package/dist/components/Select/Select.styles.d.mts +3 -3
- package/dist/components/Separator/Separator.styles.cjs +1 -1
- package/dist/components/Separator/Separator.styles.mjs +1 -1
- package/dist/components/Separator/Separator.styles.mjs.map +1 -1
- package/dist/components/Sidebar/Sidebar.d.cts +8 -8
- package/dist/components/Sidebar/Sidebar.d.mts +8 -8
- package/dist/components/Sidebar/Sidebar.styles.d.cts +3 -3
- package/dist/components/Sidebar/Sidebar.styles.d.mts +3 -3
- package/dist/components/Skeleton/Skeleton.d.cts +2 -2
- package/dist/components/Skeleton/Skeleton.d.mts +2 -2
- package/dist/components/Skeleton/Skeleton.styles.d.mts +3 -3
- package/dist/components/Spacer/Spacer.styles.d.mts +3 -3
- package/dist/components/Spacer/Spacer.styles.d.mts.map +1 -1
- package/dist/components/Spinner/Spinner.d.cts +2 -2
- package/dist/components/Spinner/Spinner.d.mts +2 -2
- package/dist/components/Spinner/Spinner.styles.d.cts +3 -3
- package/dist/components/Spinner/Spinner.styles.d.mts +3 -3
- package/dist/components/Stack/Stack.styles.d.mts +3 -3
- package/dist/components/Tab/Tab.d.cts +6 -6
- package/dist/components/Tab/Tab.d.mts +6 -6
- package/dist/components/Tab/Tab.styles.d.cts +3 -3
- package/dist/components/Text/Text.d.cts +1 -1
- package/dist/components/Text/Text.d.mts +1 -1
- package/dist/components/TextArea/TextArea.d.cts +4 -4
- package/dist/components/TextArea/TextArea.d.mts +4 -4
- package/dist/components/TextArea/TextArea.styles.d.cts +3 -3
- package/dist/components/TextInput/TextInput.d.cts +2 -2
- package/dist/components/TextInput/TextInput.d.cts.map +1 -1
- package/dist/components/TextInput/TextInput.d.mts +2 -2
- package/dist/components/Toast/Toast.d.cts +5 -5
- package/dist/components/Toast/Toast.d.cts.map +1 -1
- package/dist/components/Toast/Toast.d.mts +3 -3
- package/dist/components/Toast/Toast.styles.d.cts +3 -3
- package/dist/components/Toast/Toast.styles.d.mts +3 -3
- package/dist/components/Toggle/Toggle.d.cts +4 -4
- package/dist/components/Toggle/Toggle.d.mts +4 -4
- package/dist/components/Toggle/Toggle.styles.d.cts +3 -3
- package/dist/components/Toggle/Toggle.styles.d.mts +3 -3
- package/dist/components/VStack/VStack.d.cts +2 -2
- package/dist/components/VStack/VStack.d.mts +2 -2
- package/dist/components/index.d.cts +4 -1
- package/dist/components/index.d.mts +4 -1
- package/dist/index.cjs +2 -0
- package/dist/index.d.cts +3 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.mjs +2 -1
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CalendarVariants, eventBarStyles } from "./Calendar.styles.mjs";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime77 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/Calendar/Calendar.d.ts
|
|
5
5
|
type CalendarEvent = {
|
|
@@ -14,6 +14,7 @@ interface CalendarProps extends CalendarVariants {
|
|
|
14
14
|
events?: CalendarEvent[];
|
|
15
15
|
defaultMonth?: Date;
|
|
16
16
|
today?: Date;
|
|
17
|
+
showToday?: boolean;
|
|
17
18
|
selectedStartDate?: Date;
|
|
18
19
|
selectedEndDate?: Date;
|
|
19
20
|
onDateClick?: (date: Date) => void;
|
|
@@ -26,13 +27,14 @@ declare const Calendar: {
|
|
|
26
27
|
events,
|
|
27
28
|
defaultMonth,
|
|
28
29
|
today,
|
|
30
|
+
showToday,
|
|
29
31
|
size,
|
|
30
32
|
selectedStartDate,
|
|
31
33
|
selectedEndDate,
|
|
32
34
|
onDateClick,
|
|
33
35
|
onEventClick,
|
|
34
36
|
enableHover
|
|
35
|
-
}: CalendarProps):
|
|
37
|
+
}: CalendarProps): react_jsx_runtime77.JSX.Element;
|
|
36
38
|
displayName: string;
|
|
37
39
|
};
|
|
38
40
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.d.mts","names":[],"sources":["../../../src/components/Calendar/Calendar.tsx"],"mappings":";;;;KA6BY,aAAA;EACV,EAAA;EACA,KAAA;EACA,SAAA;EACA,OAAA;EACA,IAAA,eAAmB,cAAA,CAAe,QAAA;AAAA;AAAA,UAGnB,aAAA,SAAsB,gBAAA;EACrC,SAAA;EACA,MAAA,GAAS,aAAA;EACT,YAAA,GAAe,IAAA;EACf,KAAA,GAAQ,IAAA;EACR,iBAAA,GAAoB,IAAA;EACpB,eAAA,GAAkB,IAAA;EAClB,WAAA,IAAe,IAAA,EAAM,IAAA;EACrB,YAAA,IAAgB,KAAA,EAAO,aAAA;EACvB,WAAA;AAAA;AAAA,cAeW,QAAA;EAAA
|
|
1
|
+
{"version":3,"file":"Calendar.d.mts","names":[],"sources":["../../../src/components/Calendar/Calendar.tsx"],"mappings":";;;;KA6BY,aAAA;EACV,EAAA;EACA,KAAA;EACA,SAAA;EACA,OAAA;EACA,IAAA,eAAmB,cAAA,CAAe,QAAA;AAAA;AAAA,UAGnB,aAAA,SAAsB,gBAAA;EACrC,SAAA;EACA,MAAA,GAAS,aAAA;EACT,YAAA,GAAe,IAAA;EACf,KAAA,GAAQ,IAAA;EACR,SAAA;EACA,iBAAA,GAAoB,IAAA;EACpB,eAAA,GAAkB,IAAA;EAClB,WAAA,IAAe,IAAA,EAAM,IAAA;EACrB,YAAA,IAAgB,KAAA,EAAO,aAAA;EACvB,WAAA;AAAA;AAAA,cAeW,QAAA;EAAA;;;;;;;;;;;;KAYV,aAAA,GAAa,mBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -22,7 +22,7 @@ const getEventRange = (event) => {
|
|
|
22
22
|
end: event.endDate ? parseDateStr(event.endDate) : start
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
|
-
const Calendar = ({ className, events = [], defaultMonth = /* @__PURE__ */ new Date(), today = /* @__PURE__ */ new Date(), size, selectedStartDate, selectedEndDate, onDateClick, onEventClick, enableHover = false }) => {
|
|
25
|
+
const Calendar = ({ className, events = [], defaultMonth = /* @__PURE__ */ new Date(), today = /* @__PURE__ */ new Date(), showToday = true, size, selectedStartDate, selectedEndDate, onDateClick, onEventClick, enableHover = false }) => {
|
|
26
26
|
const { wrapper, layoutContainer, header, navContainerLeft, navContainerRight, navButton, navIcon, caption, gridHeader, weekday, gridBody, cell, cellEmpty, eventList, eventItemHeight } = calendar({
|
|
27
27
|
size,
|
|
28
28
|
hoverEffect: enableHover
|
|
@@ -116,7 +116,7 @@ const Calendar = ({ className, events = [], defaultMonth = /* @__PURE__ */ new D
|
|
|
116
116
|
const currentDate = new Date(currentMonth.getFullYear(), currentMonth.getMonth(), day);
|
|
117
117
|
const dateKey = formatDateStr(currentDate);
|
|
118
118
|
const daysEvents = eventsByDate.get(dateKey) || [];
|
|
119
|
-
const isToday = isSameDay(currentDate, today);
|
|
119
|
+
const isToday = showToday && isSameDay(currentDate, today);
|
|
120
120
|
const isStart = selectedStartDate && isSameDay(currentDate, selectedStartDate);
|
|
121
121
|
const isEnd = selectedEndDate && isSameDay(currentDate, selectedEndDate);
|
|
122
122
|
const isBetween = selectedStartDate && selectedEndDate && isWithinInterval(currentDate, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.mjs","names":[],"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport {\n format,\n addMonths,\n subMonths,\n startOfMonth,\n endOfMonth,\n addDays,\n subDays,\n getDay,\n getDaysInMonth,\n isSameDay,\n isWithinInterval,\n differenceInCalendarDays,\n} from 'date-fns';\nimport { ko } from 'date-fns/locale';\n\nimport { Box } from '../Box';\nimport { Flex } from '../Flex';\nimport { Grid } from '../Grid';\nimport { ChevronLeft, ChevronRight } from '@causw/icons';\n\nimport {\n calendar,\n eventBarStyles,\n type CalendarVariants,\n} from './Calendar.styles';\nimport { mergeStyles } from '../../utils';\n\nexport type CalendarEvent = {\n id: string | number;\n title: string;\n startDate: string;\n endDate?: string;\n type: keyof typeof eventBarStyles.variants;\n};\n\nexport interface CalendarProps extends CalendarVariants {\n className?: string;\n events?: CalendarEvent[];\n defaultMonth?: Date;\n today?: Date;\n selectedStartDate?: Date;\n selectedEndDate?: Date;\n onDateClick?: (date: Date) => void;\n onEventClick?: (event: CalendarEvent) => void;\n enableHover?: boolean;\n}\n\nconst parseDateStr = (dateStr: string) => {\n const [y, m, d] = dateStr.split('-').map(Number);\n return new Date(y, m - 1, d);\n};\nconst formatDateStr = (date: Date) => format(date, 'yyyy-MM-dd');\n\nconst getEventRange = (event: CalendarEvent) => {\n const start = parseDateStr(event.startDate);\n const end = event.endDate ? parseDateStr(event.endDate) : start;\n return { start, end };\n};\n\nexport const Calendar = ({\n className,\n events = [],\n defaultMonth = new Date(),\n today = new Date(),\n size,\n selectedStartDate,\n selectedEndDate,\n onDateClick,\n onEventClick,\n enableHover = false,\n}: CalendarProps) => {\n const {\n wrapper,\n layoutContainer,\n header,\n navContainerLeft,\n navContainerRight,\n navButton,\n navIcon,\n caption,\n gridHeader,\n weekday,\n gridBody,\n cell,\n cellEmpty,\n eventList,\n eventItemHeight,\n } = calendar({ size, hoverEffect: enableHover });\n\n const [currentMonth, setCurrentMonth] = useState(defaultMonth);\n const totalDays = getDaysInMonth(currentMonth);\n const startDayIndex = getDay(startOfMonth(currentMonth));\n const weekDays = ['일', '월', '화', '수', '목', '금', '토'];\n\n const handlePrevMonth = () => setCurrentMonth((prev) => subMonths(prev, 1));\n const handleNextMonth = () => setCurrentMonth((prev) => addMonths(prev, 1));\n\n const eventsByDate = useMemo(() => {\n const map = new Map<string, CalendarEvent[]>();\n const mStart = startOfMonth(currentMonth);\n const mEnd = endOfMonth(currentMonth);\n\n const relevantEvents = events.filter((event) => {\n const { start, end } = getEventRange(event);\n return start <= mEnd && end >= mStart;\n });\n\n for (const event of relevantEvents) {\n const { start, end } = getEventRange(event);\n let d = start < mStart ? mStart : start;\n const eventEndDate = end > mEnd ? mEnd : end;\n\n while (d <= eventEndDate) {\n const dateKey = formatDateStr(d);\n const dailyEvents = map.get(dateKey) ?? [];\n map.set(dateKey, [...dailyEvents, event]);\n d = addDays(d, 1);\n }\n }\n return map;\n }, [currentMonth, events]);\n\n return (\n <Box className={wrapper({ className })}>\n <Box className={layoutContainer()}>\n <Grid columns={7} className={header()}>\n <Flex className={navContainerLeft()}>\n <button\n onClick={handlePrevMonth}\n className={navButton()}\n type=\"button\"\n >\n <ChevronLeft className={navIcon()} />\n </button>\n </Flex>\n <Box className=\"col-span-5 flex items-center justify-center\">\n <span className={caption()}>\n {format(currentMonth, 'yyyy년 M월', { locale: ko })}\n </span>\n </Box>\n <Flex className={navContainerRight()}>\n <button\n onClick={handleNextMonth}\n className={navButton()}\n type=\"button\"\n >\n <ChevronRight className={navIcon()} />\n </button>\n </Flex>\n </Grid>\n\n <Grid columns={7} className={gridHeader()}>\n {weekDays.map((day) => (\n <Flex\n key={day}\n justify=\"center\"\n align=\"center\"\n className={weekday()}\n >\n {day}\n </Flex>\n ))}\n </Grid>\n\n <Grid columns={7} className={gridBody()}>\n {Array.from({ length: startDayIndex }).map((_, i) => (\n <Box key={`empty-${i}`} className={cellEmpty()} />\n ))}\n\n {Array.from({ length: totalDays }).map((_, i) => {\n const day = i + 1;\n const currentDate = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth(),\n day,\n );\n const dateKey = formatDateStr(currentDate);\n\n const daysEvents = eventsByDate.get(dateKey) || [];\n\n const isToday = isSameDay(currentDate, today);\n const isStart =\n selectedStartDate && isSameDay(currentDate, selectedStartDate);\n const isEnd =\n selectedEndDate && isSameDay(currentDate, selectedEndDate);\n const isBetween =\n selectedStartDate &&\n selectedEndDate &&\n isWithinInterval(currentDate, {\n start: selectedStartDate,\n end: selectedEndDate,\n }) &&\n !isStart &&\n !isEnd;\n\n let selectionState:\n | 'none'\n | 'today'\n | 'selected'\n | 'range'\n | 'rangeStart'\n | 'rangeEnd' = 'none';\n if (isStart) selectionState = 'selected';\n else if (isEnd) selectionState = 'selected';\n else if (isBetween) selectionState = 'range';\n else if (isToday) selectionState = 'today';\n\n return (\n <Flex\n key={day}\n direction=\"column\"\n align=\"center\"\n justify=\"start\"\n className={cell()}\n onClick={() => onDateClick?.(currentDate)}\n >\n <span className={calendar({ selectionState }).dayNumber()}>\n {day}\n </span>\n <Flex className={eventList()}>\n {daysEvents.map((ev, idx) => {\n const { start, end } = getEventRange(ev);\n\n const currentDayIndex = getDay(currentDate);\n const weekStart = subDays(currentDate, currentDayIndex);\n const weekEnd = addDays(currentDate, 6 - currentDayIndex);\n\n const segmentStart = start < weekStart ? weekStart : start;\n const segmentEnd = end > weekEnd ? weekEnd : end;\n const segmentDuration =\n differenceInCalendarDays(segmentEnd, segmentStart) + 1;\n const indexInSegment = differenceInCalendarDays(\n currentDate,\n segmentStart,\n );\n\n const targetIndex = Math.floor((segmentDuration - 1) / 2);\n const isRenderCell = indexInSegment === targetIndex;\n\n const startDateKey = formatDateStr(start);\n const endDateKey = formatDateStr(end);\n const isStartEvent = dateKey === startDateKey;\n const isEndEvent = dateKey === endDateKey;\n const isSingleDay = startDateKey === endDateKey;\n\n return (\n <div\n key={`${ev.id}-${idx}`}\n className={mergeStyles([\n 'relative w-full',\n eventItemHeight(),\n eventBarStyles.variants[ev.type],\n isSingleDay\n ? 'mx-[2px] !w-[calc(100%-4px)] rounded-[4px]'\n : '',\n !isSingleDay && isStartEvent\n ? 'mr-0 ml-[2px] !w-[calc(100%-2px)] rounded-l-[4px] rounded-r-none'\n : '',\n !isSingleDay && isEndEvent\n ? 'mr-[2px] ml-0 !w-[calc(100%-2px)] rounded-l-none rounded-r-[4px]'\n : '',\n !isSingleDay && !isStartEvent && !isEndEvent\n ? 'mx-0 w-full rounded-none'\n : '',\n ])}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(ev);\n }}\n >\n {isRenderCell && (\n <div className={eventBarStyles.textWrapper}>\n <span className=\"block w-full truncate px-1 text-center\">\n {ev.title}\n </span>\n </div>\n )}\n </div>\n );\n })}\n </Flex>\n </Flex>\n );\n })}\n </Grid>\n </Box>\n </Box>\n );\n};\nCalendar.displayName = 'Calendar';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Calendar.mjs","names":[],"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport {\n format,\n addMonths,\n subMonths,\n startOfMonth,\n endOfMonth,\n addDays,\n subDays,\n getDay,\n getDaysInMonth,\n isSameDay,\n isWithinInterval,\n differenceInCalendarDays,\n} from 'date-fns';\nimport { ko } from 'date-fns/locale';\n\nimport { Box } from '../Box';\nimport { Flex } from '../Flex';\nimport { Grid } from '../Grid';\nimport { ChevronLeft, ChevronRight } from '@causw/icons';\n\nimport {\n calendar,\n eventBarStyles,\n type CalendarVariants,\n} from './Calendar.styles';\nimport { mergeStyles } from '../../utils';\n\nexport type CalendarEvent = {\n id: string | number;\n title: string;\n startDate: string;\n endDate?: string;\n type: keyof typeof eventBarStyles.variants;\n};\n\nexport interface CalendarProps extends CalendarVariants {\n className?: string;\n events?: CalendarEvent[];\n defaultMonth?: Date;\n today?: Date;\n showToday?: boolean;\n selectedStartDate?: Date;\n selectedEndDate?: Date;\n onDateClick?: (date: Date) => void;\n onEventClick?: (event: CalendarEvent) => void;\n enableHover?: boolean;\n}\n\nconst parseDateStr = (dateStr: string) => {\n const [y, m, d] = dateStr.split('-').map(Number);\n return new Date(y, m - 1, d);\n};\nconst formatDateStr = (date: Date) => format(date, 'yyyy-MM-dd');\n\nconst getEventRange = (event: CalendarEvent) => {\n const start = parseDateStr(event.startDate);\n const end = event.endDate ? parseDateStr(event.endDate) : start;\n return { start, end };\n};\n\nexport const Calendar = ({\n className,\n events = [],\n defaultMonth = new Date(),\n today = new Date(),\n showToday = true,\n size,\n selectedStartDate,\n selectedEndDate,\n onDateClick,\n onEventClick,\n enableHover = false,\n}: CalendarProps) => {\n const {\n wrapper,\n layoutContainer,\n header,\n navContainerLeft,\n navContainerRight,\n navButton,\n navIcon,\n caption,\n gridHeader,\n weekday,\n gridBody,\n cell,\n cellEmpty,\n eventList,\n eventItemHeight,\n } = calendar({ size, hoverEffect: enableHover });\n\n const [currentMonth, setCurrentMonth] = useState(defaultMonth);\n const totalDays = getDaysInMonth(currentMonth);\n const startDayIndex = getDay(startOfMonth(currentMonth));\n const weekDays = ['일', '월', '화', '수', '목', '금', '토'];\n\n const handlePrevMonth = () => setCurrentMonth((prev) => subMonths(prev, 1));\n const handleNextMonth = () => setCurrentMonth((prev) => addMonths(prev, 1));\n\n const eventsByDate = useMemo(() => {\n const map = new Map<string, CalendarEvent[]>();\n const mStart = startOfMonth(currentMonth);\n const mEnd = endOfMonth(currentMonth);\n\n const relevantEvents = events.filter((event) => {\n const { start, end } = getEventRange(event);\n return start <= mEnd && end >= mStart;\n });\n\n for (const event of relevantEvents) {\n const { start, end } = getEventRange(event);\n let d = start < mStart ? mStart : start;\n const eventEndDate = end > mEnd ? mEnd : end;\n\n while (d <= eventEndDate) {\n const dateKey = formatDateStr(d);\n const dailyEvents = map.get(dateKey) ?? [];\n map.set(dateKey, [...dailyEvents, event]);\n d = addDays(d, 1);\n }\n }\n return map;\n }, [currentMonth, events]);\n\n return (\n <Box className={wrapper({ className })}>\n <Box className={layoutContainer()}>\n <Grid columns={7} className={header()}>\n <Flex className={navContainerLeft()}>\n <button\n onClick={handlePrevMonth}\n className={navButton()}\n type=\"button\"\n >\n <ChevronLeft className={navIcon()} />\n </button>\n </Flex>\n <Box className=\"col-span-5 flex items-center justify-center\">\n <span className={caption()}>\n {format(currentMonth, 'yyyy년 M월', { locale: ko })}\n </span>\n </Box>\n <Flex className={navContainerRight()}>\n <button\n onClick={handleNextMonth}\n className={navButton()}\n type=\"button\"\n >\n <ChevronRight className={navIcon()} />\n </button>\n </Flex>\n </Grid>\n\n <Grid columns={7} className={gridHeader()}>\n {weekDays.map((day) => (\n <Flex\n key={day}\n justify=\"center\"\n align=\"center\"\n className={weekday()}\n >\n {day}\n </Flex>\n ))}\n </Grid>\n\n <Grid columns={7} className={gridBody()}>\n {Array.from({ length: startDayIndex }).map((_, i) => (\n <Box key={`empty-${i}`} className={cellEmpty()} />\n ))}\n\n {Array.from({ length: totalDays }).map((_, i) => {\n const day = i + 1;\n const currentDate = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth(),\n day,\n );\n const dateKey = formatDateStr(currentDate);\n\n const daysEvents = eventsByDate.get(dateKey) || [];\n\n const isToday = showToday && isSameDay(currentDate, today);\n const isStart =\n selectedStartDate && isSameDay(currentDate, selectedStartDate);\n const isEnd =\n selectedEndDate && isSameDay(currentDate, selectedEndDate);\n const isBetween =\n selectedStartDate &&\n selectedEndDate &&\n isWithinInterval(currentDate, {\n start: selectedStartDate,\n end: selectedEndDate,\n }) &&\n !isStart &&\n !isEnd;\n\n let selectionState:\n | 'none'\n | 'today'\n | 'selected'\n | 'range'\n | 'rangeStart'\n | 'rangeEnd' = 'none';\n if (isStart) selectionState = 'selected';\n else if (isEnd) selectionState = 'selected';\n else if (isBetween) selectionState = 'range';\n else if (isToday) selectionState = 'today';\n\n return (\n <Flex\n key={day}\n direction=\"column\"\n align=\"center\"\n justify=\"start\"\n className={cell()}\n onClick={() => onDateClick?.(currentDate)}\n >\n <span className={calendar({ selectionState }).dayNumber()}>\n {day}\n </span>\n <Flex className={eventList()}>\n {daysEvents.map((ev, idx) => {\n const { start, end } = getEventRange(ev);\n\n const currentDayIndex = getDay(currentDate);\n const weekStart = subDays(currentDate, currentDayIndex);\n const weekEnd = addDays(currentDate, 6 - currentDayIndex);\n\n const segmentStart = start < weekStart ? weekStart : start;\n const segmentEnd = end > weekEnd ? weekEnd : end;\n const segmentDuration =\n differenceInCalendarDays(segmentEnd, segmentStart) + 1;\n const indexInSegment = differenceInCalendarDays(\n currentDate,\n segmentStart,\n );\n\n const targetIndex = Math.floor((segmentDuration - 1) / 2);\n const isRenderCell = indexInSegment === targetIndex;\n\n const startDateKey = formatDateStr(start);\n const endDateKey = formatDateStr(end);\n const isStartEvent = dateKey === startDateKey;\n const isEndEvent = dateKey === endDateKey;\n const isSingleDay = startDateKey === endDateKey;\n\n return (\n <div\n key={`${ev.id}-${idx}`}\n className={mergeStyles([\n 'relative w-full',\n eventItemHeight(),\n eventBarStyles.variants[ev.type],\n isSingleDay\n ? 'mx-[2px] !w-[calc(100%-4px)] rounded-[4px]'\n : '',\n !isSingleDay && isStartEvent\n ? 'mr-0 ml-[2px] !w-[calc(100%-2px)] rounded-l-[4px] rounded-r-none'\n : '',\n !isSingleDay && isEndEvent\n ? 'mr-[2px] ml-0 !w-[calc(100%-2px)] rounded-l-none rounded-r-[4px]'\n : '',\n !isSingleDay && !isStartEvent && !isEndEvent\n ? 'mx-0 w-full rounded-none'\n : '',\n ])}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(ev);\n }}\n >\n {isRenderCell && (\n <div className={eventBarStyles.textWrapper}>\n <span className=\"block w-full truncate px-1 text-center\">\n {ev.title}\n </span>\n </div>\n )}\n </div>\n );\n })}\n </Flex>\n </Flex>\n );\n })}\n </Grid>\n </Box>\n </Box>\n );\n};\nCalendar.displayName = 'Calendar';\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as tailwind_variants53 from "tailwind-variants";
|
|
2
2
|
import { VariantProps } from "tailwind-variants";
|
|
3
3
|
|
|
4
4
|
//#region src/components/Calendar/Calendar.styles.d.ts
|
|
5
|
-
declare const calendar:
|
|
5
|
+
declare const calendar: tailwind_variants53.TVReturnType<{
|
|
6
6
|
size: {
|
|
7
7
|
sm: {
|
|
8
8
|
wrapper: string;
|
|
@@ -170,7 +170,7 @@ declare const calendar: tailwind_variants49.TVReturnType<{
|
|
|
170
170
|
dayNumber: string;
|
|
171
171
|
eventList: string[];
|
|
172
172
|
eventItemHeight: string;
|
|
173
|
-
},
|
|
173
|
+
}, tailwind_variants53.TVReturnType<{
|
|
174
174
|
size: {
|
|
175
175
|
sm: {
|
|
176
176
|
wrapper: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as tailwind_variants49 from "tailwind-variants";
|
|
2
2
|
import { VariantProps } from "tailwind-variants";
|
|
3
3
|
|
|
4
4
|
//#region src/components/Calendar/Calendar.styles.d.ts
|
|
5
|
-
declare const calendar:
|
|
5
|
+
declare const calendar: tailwind_variants49.TVReturnType<{
|
|
6
6
|
size: {
|
|
7
7
|
sm: {
|
|
8
8
|
wrapper: string;
|
|
@@ -170,7 +170,7 @@ declare const calendar: tailwind_variants55.TVReturnType<{
|
|
|
170
170
|
dayNumber: string;
|
|
171
171
|
eventList: string[];
|
|
172
172
|
eventItemHeight: string;
|
|
173
|
-
},
|
|
173
|
+
}, tailwind_variants49.TVReturnType<{
|
|
174
174
|
size: {
|
|
175
175
|
sm: {
|
|
176
176
|
wrapper: string;
|
|
@@ -5,7 +5,7 @@ import "../Text/index.cjs";
|
|
|
5
5
|
import "../../utils/index.cjs";
|
|
6
6
|
import { CheckboxVariants } from "./Checkbox.styles.cjs";
|
|
7
7
|
import React from "react";
|
|
8
|
-
import * as
|
|
8
|
+
import * as react_jsx_runtime13 from "react/jsx-runtime";
|
|
9
9
|
|
|
10
10
|
//#region src/components/Checkbox/Checkbox.d.ts
|
|
11
11
|
interface CheckboxRootProps extends Omit<React.ComponentProps<'label'>, 'onChange'>, CheckboxVariants {
|
|
@@ -23,11 +23,11 @@ declare const Checkbox: {
|
|
|
23
23
|
children,
|
|
24
24
|
className,
|
|
25
25
|
...props
|
|
26
|
-
}: CheckboxRootProps):
|
|
26
|
+
}: CheckboxRootProps): react_jsx_runtime13.JSX.Element;
|
|
27
27
|
displayName: string;
|
|
28
28
|
} & {
|
|
29
29
|
Indicator: {
|
|
30
|
-
():
|
|
30
|
+
(): react_jsx_runtime13.JSX.Element;
|
|
31
31
|
displayName: string;
|
|
32
32
|
};
|
|
33
33
|
Label: {
|
|
@@ -37,7 +37,7 @@ declare const Checkbox: {
|
|
|
37
37
|
textColor,
|
|
38
38
|
className,
|
|
39
39
|
...props
|
|
40
|
-
}: CheckboxLabelProps<E>):
|
|
40
|
+
}: CheckboxLabelProps<E>): react_jsx_runtime13.JSX.Element;
|
|
41
41
|
displayName: string;
|
|
42
42
|
};
|
|
43
43
|
};
|
|
@@ -5,7 +5,7 @@ import "../Text/index.mjs";
|
|
|
5
5
|
import "../../utils/index.mjs";
|
|
6
6
|
import { CheckboxVariants } from "./Checkbox.styles.mjs";
|
|
7
7
|
import React from "react";
|
|
8
|
-
import * as
|
|
8
|
+
import * as react_jsx_runtime12 from "react/jsx-runtime";
|
|
9
9
|
|
|
10
10
|
//#region src/components/Checkbox/Checkbox.d.ts
|
|
11
11
|
interface CheckboxRootProps extends Omit<React.ComponentProps<'label'>, 'onChange'>, CheckboxVariants {
|
|
@@ -23,11 +23,11 @@ declare const Checkbox: {
|
|
|
23
23
|
children,
|
|
24
24
|
className,
|
|
25
25
|
...props
|
|
26
|
-
}: CheckboxRootProps):
|
|
26
|
+
}: CheckboxRootProps): react_jsx_runtime12.JSX.Element;
|
|
27
27
|
displayName: string;
|
|
28
28
|
} & {
|
|
29
29
|
Indicator: {
|
|
30
|
-
():
|
|
30
|
+
(): react_jsx_runtime12.JSX.Element;
|
|
31
31
|
displayName: string;
|
|
32
32
|
};
|
|
33
33
|
Label: {
|
|
@@ -37,7 +37,7 @@ declare const Checkbox: {
|
|
|
37
37
|
textColor,
|
|
38
38
|
className,
|
|
39
39
|
...props
|
|
40
|
-
}: CheckboxLabelProps<E>):
|
|
40
|
+
}: CheckboxLabelProps<E>): react_jsx_runtime12.JSX.Element;
|
|
41
41
|
displayName: string;
|
|
42
42
|
};
|
|
43
43
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as tailwind_variants37 from "tailwind-variants";
|
|
2
2
|
import { VariantProps } from "tailwind-variants";
|
|
3
3
|
|
|
4
4
|
//#region src/components/Checkbox/Checkbox.styles.d.ts
|
|
5
|
-
declare const checkbox:
|
|
5
|
+
declare const checkbox: tailwind_variants37.TVReturnType<{
|
|
6
6
|
checked: {
|
|
7
7
|
true: {
|
|
8
8
|
indicator: string;
|
|
@@ -46,7 +46,7 @@ declare const checkbox: tailwind_variants33.TVReturnType<{
|
|
|
46
46
|
indicator: string;
|
|
47
47
|
indicatorIcon: string;
|
|
48
48
|
label: string;
|
|
49
|
-
},
|
|
49
|
+
}, tailwind_variants37.TVReturnType<{
|
|
50
50
|
checked: {
|
|
51
51
|
true: {
|
|
52
52
|
indicator: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as tailwind_variants35 from "tailwind-variants";
|
|
2
2
|
import { VariantProps } from "tailwind-variants";
|
|
3
3
|
|
|
4
4
|
//#region src/components/Checkbox/Checkbox.styles.d.ts
|
|
5
|
-
declare const checkbox:
|
|
5
|
+
declare const checkbox: tailwind_variants35.TVReturnType<{
|
|
6
6
|
checked: {
|
|
7
7
|
true: {
|
|
8
8
|
indicator: string;
|
|
@@ -46,7 +46,7 @@ declare const checkbox: tailwind_variants39.TVReturnType<{
|
|
|
46
46
|
indicator: string;
|
|
47
47
|
indicatorIcon: string;
|
|
48
48
|
label: string;
|
|
49
|
-
},
|
|
49
|
+
}, tailwind_variants35.TVReturnType<{
|
|
50
50
|
checked: {
|
|
51
51
|
true: {
|
|
52
52
|
indicator: string;
|
|
@@ -2,7 +2,7 @@ import { PrimitiveProps } from "../Primitive/Primitive.cjs";
|
|
|
2
2
|
import "../Primitive/index.cjs";
|
|
3
3
|
import { ChipVariants } from "./Chip.styles.cjs";
|
|
4
4
|
import * as React$1 from "react";
|
|
5
|
-
import * as
|
|
5
|
+
import * as react_jsx_runtime44 from "react/jsx-runtime";
|
|
6
6
|
|
|
7
7
|
//#region src/components/Chip/Chip.d.ts
|
|
8
8
|
interface ChipProps extends Omit<React$1.ComponentPropsWithoutRef<'div'>, 'color'>, PrimitiveProps, ChipVariants {}
|
|
@@ -15,7 +15,7 @@ declare const Chip: {
|
|
|
15
15
|
onClick,
|
|
16
16
|
className,
|
|
17
17
|
...props
|
|
18
|
-
}: ChipProps):
|
|
18
|
+
}: ChipProps): react_jsx_runtime44.JSX.Element;
|
|
19
19
|
displayName: string;
|
|
20
20
|
};
|
|
21
21
|
//#endregion
|
|
@@ -2,7 +2,7 @@ import { PrimitiveProps } from "../Primitive/Primitive.mjs";
|
|
|
2
2
|
import "../Primitive/index.mjs";
|
|
3
3
|
import { ChipVariants } from "./Chip.styles.mjs";
|
|
4
4
|
import * as React$1 from "react";
|
|
5
|
-
import * as
|
|
5
|
+
import * as react_jsx_runtime36 from "react/jsx-runtime";
|
|
6
6
|
|
|
7
7
|
//#region src/components/Chip/Chip.d.ts
|
|
8
8
|
interface ChipProps extends Omit<React$1.ComponentPropsWithoutRef<'div'>, 'color'>, PrimitiveProps, ChipVariants {}
|
|
@@ -15,7 +15,7 @@ declare const Chip: {
|
|
|
15
15
|
onClick,
|
|
16
16
|
className,
|
|
17
17
|
...props
|
|
18
|
-
}: ChipProps):
|
|
18
|
+
}: ChipProps): react_jsx_runtime36.JSX.Element;
|
|
19
19
|
displayName: string;
|
|
20
20
|
};
|
|
21
21
|
//#endregion
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as tailwind_variants23 from "tailwind-variants";
|
|
2
2
|
import { VariantProps } from "tailwind-variants";
|
|
3
3
|
|
|
4
4
|
//#region src/components/Chip/Chip.styles.d.ts
|
|
5
|
-
declare const chip:
|
|
5
|
+
declare const chip: tailwind_variants23.TVReturnType<{
|
|
6
6
|
color: {
|
|
7
7
|
white: string;
|
|
8
8
|
lightgray: string;
|
|
@@ -30,7 +30,7 @@ declare const chip: tailwind_variants19.TVReturnType<{
|
|
|
30
30
|
true: string;
|
|
31
31
|
false: string;
|
|
32
32
|
};
|
|
33
|
-
}, undefined,
|
|
33
|
+
}, undefined, tailwind_variants23.TVReturnType<{
|
|
34
34
|
color: {
|
|
35
35
|
white: string;
|
|
36
36
|
lightgray: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as tailwind_variants19 from "tailwind-variants";
|
|
2
2
|
import { VariantProps } from "tailwind-variants";
|
|
3
3
|
|
|
4
4
|
//#region src/components/Chip/Chip.styles.d.ts
|
|
5
|
-
declare const chip:
|
|
5
|
+
declare const chip: tailwind_variants19.TVReturnType<{
|
|
6
6
|
color: {
|
|
7
7
|
white: string;
|
|
8
8
|
lightgray: string;
|
|
@@ -30,7 +30,7 @@ declare const chip: tailwind_variants17.TVReturnType<{
|
|
|
30
30
|
true: string;
|
|
31
31
|
false: string;
|
|
32
32
|
};
|
|
33
|
-
}, undefined,
|
|
33
|
+
}, undefined, tailwind_variants19.TVReturnType<{
|
|
34
34
|
color: {
|
|
35
35
|
white: string;
|
|
36
36
|
lightgray: string;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_Text = require('../Text/Text.cjs');
|
|
3
|
+
const require_useFieldContext = require('../../hooks/field/useFieldContext.cjs');
|
|
4
|
+
const require_mergeStyles = require('../../utils/mergeStyles/mergeStyles.cjs');
|
|
5
|
+
const require_Dropdown = require('../Dropdown/Dropdown.cjs');
|
|
6
|
+
const require_Calendar = require('../Calendar/Calendar.cjs');
|
|
7
|
+
const require_DatePicker_styles = require('./DatePicker.styles.cjs');
|
|
8
|
+
let react = require("react");
|
|
9
|
+
react = require_rolldown_runtime.__toESM(react);
|
|
10
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
|
+
let _causw_icons = require("@causw/icons");
|
|
12
|
+
let date_fns = require("date-fns");
|
|
13
|
+
|
|
14
|
+
//#region src/components/DatePicker/DatePicker.tsx
|
|
15
|
+
const isValidDate = (value) => value instanceof Date && !Number.isNaN(value.getTime());
|
|
16
|
+
const DatePicker = ({ id: idProp, className, error: errorProp, value, defaultValue, onValueChange, placeholder = "날짜를 선택하세요", dateFormat = "yyyy.MM.dd", variant = "white", disabled: disabledProp, type, contentClassName, calendarProps, ...props }) => {
|
|
17
|
+
const field = require_useFieldContext.useFieldContext();
|
|
18
|
+
const generatedId = (0, react.useId)();
|
|
19
|
+
const triggerRef = (0, react.useRef)(null);
|
|
20
|
+
const [open, setOpen] = (0, react.useState)(false);
|
|
21
|
+
const [calendarKey, setCalendarKey] = (0, react.useState)(0);
|
|
22
|
+
const [uncontrolledValue, setUncontrolledValue] = (0, react.useState)(defaultValue);
|
|
23
|
+
const isControlled = value !== void 0;
|
|
24
|
+
const id = idProp ?? field?.id ?? generatedId;
|
|
25
|
+
const disabled = disabledProp ?? field?.disabled ?? false;
|
|
26
|
+
const error = errorProp ?? field?.error ?? false;
|
|
27
|
+
const selectedDate = isControlled ? value : uncontrolledValue;
|
|
28
|
+
const hasValue = isValidDate(selectedDate);
|
|
29
|
+
const { trigger, icon, content } = require_DatePicker_styles.datePicker({
|
|
30
|
+
variant,
|
|
31
|
+
disabled,
|
|
32
|
+
error
|
|
33
|
+
});
|
|
34
|
+
const displayValue = hasValue ? (0, date_fns.format)(selectedDate, dateFormat) : placeholder;
|
|
35
|
+
const handleOpenChange = (nextOpen) => {
|
|
36
|
+
if (disabled) return;
|
|
37
|
+
setOpen(nextOpen);
|
|
38
|
+
if (nextOpen) setCalendarKey((prev) => prev + 1);
|
|
39
|
+
};
|
|
40
|
+
const handleDateClick = (date) => {
|
|
41
|
+
if (!isControlled) setUncontrolledValue(date);
|
|
42
|
+
onValueChange?.(date);
|
|
43
|
+
setOpen(false);
|
|
44
|
+
triggerRef.current?.blur();
|
|
45
|
+
};
|
|
46
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Dropdown.Dropdown, {
|
|
47
|
+
modal: false,
|
|
48
|
+
open,
|
|
49
|
+
onOpenChange: handleOpenChange,
|
|
50
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Dropdown.Dropdown.Trigger, {
|
|
51
|
+
asChild: true,
|
|
52
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
53
|
+
ref: triggerRef,
|
|
54
|
+
id,
|
|
55
|
+
type: type ?? "button",
|
|
56
|
+
disabled,
|
|
57
|
+
className: trigger({ className }),
|
|
58
|
+
...props,
|
|
59
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Text, {
|
|
60
|
+
typography: "body-16-regular",
|
|
61
|
+
textColor: hasValue ? "gray-700" : "gray-400",
|
|
62
|
+
children: displayValue
|
|
63
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_causw_icons.CalendarIcon, {
|
|
64
|
+
size: 20,
|
|
65
|
+
color: "gray-400",
|
|
66
|
+
className: icon(),
|
|
67
|
+
"aria-hidden": "true"
|
|
68
|
+
})]
|
|
69
|
+
})
|
|
70
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Dropdown.Dropdown.Content, {
|
|
71
|
+
align: "start",
|
|
72
|
+
sideOffset: 8,
|
|
73
|
+
collisionPadding: 16,
|
|
74
|
+
avoidCollisions: true,
|
|
75
|
+
sticky: "always",
|
|
76
|
+
className: content({ className: contentClassName }),
|
|
77
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Calendar.Calendar, {
|
|
78
|
+
defaultMonth: hasValue ? selectedDate : /* @__PURE__ */ new Date(),
|
|
79
|
+
selectedStartDate: hasValue ? selectedDate : void 0,
|
|
80
|
+
showToday: false,
|
|
81
|
+
size: "sm",
|
|
82
|
+
enableHover: true,
|
|
83
|
+
onDateClick: handleDateClick,
|
|
84
|
+
...calendarProps,
|
|
85
|
+
className: require_mergeStyles.mergeStyles("border-none", calendarProps?.className)
|
|
86
|
+
}, calendarKey)
|
|
87
|
+
})]
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
DatePicker.displayName = "DatePicker";
|
|
91
|
+
|
|
92
|
+
//#endregion
|
|
93
|
+
exports.DatePicker = DatePicker;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CalendarProps } from "../Calendar/Calendar.cjs";
|
|
2
|
+
import { DatePickerVariants } from "./DatePicker.styles.cjs";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import * as react_jsx_runtime37 from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/components/DatePicker/DatePicker.d.ts
|
|
7
|
+
type DatePickerCalendarProps = Omit<CalendarProps, 'defaultMonth' | 'selectedStartDate' | 'selectedEndDate' | 'onDateClick'>;
|
|
8
|
+
interface DatePickerProps extends Omit<React.ComponentProps<'button'>, 'value' | 'defaultValue' | 'onChange'> {
|
|
9
|
+
variant?: DatePickerVariants['variant'];
|
|
10
|
+
error?: boolean;
|
|
11
|
+
value?: Date;
|
|
12
|
+
defaultValue?: Date;
|
|
13
|
+
onValueChange?: (date: Date) => void;
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
dateFormat?: string;
|
|
16
|
+
contentClassName?: string;
|
|
17
|
+
calendarProps?: DatePickerCalendarProps;
|
|
18
|
+
}
|
|
19
|
+
declare const DatePicker: {
|
|
20
|
+
({
|
|
21
|
+
id: idProp,
|
|
22
|
+
className,
|
|
23
|
+
error: errorProp,
|
|
24
|
+
value,
|
|
25
|
+
defaultValue,
|
|
26
|
+
onValueChange,
|
|
27
|
+
placeholder,
|
|
28
|
+
dateFormat,
|
|
29
|
+
variant,
|
|
30
|
+
disabled: disabledProp,
|
|
31
|
+
type,
|
|
32
|
+
contentClassName,
|
|
33
|
+
calendarProps,
|
|
34
|
+
...props
|
|
35
|
+
}: DatePickerProps): react_jsx_runtime37.JSX.Element;
|
|
36
|
+
displayName: string;
|
|
37
|
+
};
|
|
38
|
+
//#endregion
|
|
39
|
+
export { DatePicker, DatePickerProps };
|
|
40
|
+
//# sourceMappingURL=DatePicker.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.d.cts","names":[],"sources":["../../../src/components/DatePicker/DatePicker.tsx"],"mappings":";;;;;;KAUK,uBAAA,GAA0B,IAAA,CAC7B,aAAA;AAAA,UAOe,eAAA,SAAwB,IAAA,CACvC,KAAA,CAAM,cAAA;EAGN,OAAA,GAAU,kBAAA;EACV,KAAA;EACA,KAAA,GAAQ,IAAA;EACR,YAAA,GAAe,IAAA;EACf,aAAA,IAAiB,IAAA,EAAM,IAAA;EACvB,WAAA;EACA,UAAA;EACA,gBAAA;EACA,aAAA,GAAgB,uBAAA;AAAA;AAAA,cAGL,UAAA;EAAA;;;;;;;;;;;;;;;KAeV,eAAA,GAAe,mBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CalendarProps } from "../Calendar/Calendar.mjs";
|
|
2
|
+
import "../Calendar/index.mjs";
|
|
3
|
+
import { DatePickerVariants } from "./DatePicker.styles.mjs";
|
|
4
|
+
import React from "react";
|
|
5
|
+
import * as react_jsx_runtime31 from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/components/DatePicker/DatePicker.d.ts
|
|
8
|
+
type DatePickerCalendarProps = Omit<CalendarProps, 'defaultMonth' | 'selectedStartDate' | 'selectedEndDate' | 'onDateClick'>;
|
|
9
|
+
interface DatePickerProps extends Omit<React.ComponentProps<'button'>, 'value' | 'defaultValue' | 'onChange'> {
|
|
10
|
+
variant?: DatePickerVariants['variant'];
|
|
11
|
+
error?: boolean;
|
|
12
|
+
value?: Date;
|
|
13
|
+
defaultValue?: Date;
|
|
14
|
+
onValueChange?: (date: Date) => void;
|
|
15
|
+
placeholder?: string;
|
|
16
|
+
dateFormat?: string;
|
|
17
|
+
contentClassName?: string;
|
|
18
|
+
calendarProps?: DatePickerCalendarProps;
|
|
19
|
+
}
|
|
20
|
+
declare const DatePicker: {
|
|
21
|
+
({
|
|
22
|
+
id: idProp,
|
|
23
|
+
className,
|
|
24
|
+
error: errorProp,
|
|
25
|
+
value,
|
|
26
|
+
defaultValue,
|
|
27
|
+
onValueChange,
|
|
28
|
+
placeholder,
|
|
29
|
+
dateFormat,
|
|
30
|
+
variant,
|
|
31
|
+
disabled: disabledProp,
|
|
32
|
+
type,
|
|
33
|
+
contentClassName,
|
|
34
|
+
calendarProps,
|
|
35
|
+
...props
|
|
36
|
+
}: DatePickerProps): react_jsx_runtime31.JSX.Element;
|
|
37
|
+
displayName: string;
|
|
38
|
+
};
|
|
39
|
+
//#endregion
|
|
40
|
+
export { DatePicker, DatePickerProps };
|
|
41
|
+
//# sourceMappingURL=DatePicker.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.d.mts","names":[],"sources":["../../../src/components/DatePicker/DatePicker.tsx"],"mappings":";;;;;;;KAUK,uBAAA,GAA0B,IAAA,CAC7B,aAAA;AAAA,UAOe,eAAA,SAAwB,IAAA,CACvC,KAAA,CAAM,cAAA;EAGN,OAAA,GAAU,kBAAA;EACV,KAAA;EACA,KAAA,GAAQ,IAAA;EACR,YAAA,GAAe,IAAA;EACf,aAAA,IAAiB,IAAA,EAAM,IAAA;EACvB,WAAA;EACA,UAAA;EACA,gBAAA;EACA,aAAA,GAAgB,uBAAA;AAAA;AAAA,cAGL,UAAA;EAAA;;;;;;;;;;;;;;;KAeV,eAAA,GAAe,mBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Text } from "../Text/Text.mjs";
|
|
2
|
+
import { useFieldContext } from "../../hooks/field/useFieldContext.mjs";
|
|
3
|
+
import { mergeStyles } from "../../utils/mergeStyles/mergeStyles.mjs";
|
|
4
|
+
import { Dropdown } from "../Dropdown/Dropdown.mjs";
|
|
5
|
+
import { Calendar } from "../Calendar/Calendar.mjs";
|
|
6
|
+
import { datePicker } from "./DatePicker.styles.mjs";
|
|
7
|
+
import React, { useId, useRef, useState } from "react";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { CalendarIcon } from "@causw/icons";
|
|
10
|
+
import { format } from "date-fns";
|
|
11
|
+
|
|
12
|
+
//#region src/components/DatePicker/DatePicker.tsx
|
|
13
|
+
const isValidDate = (value) => value instanceof Date && !Number.isNaN(value.getTime());
|
|
14
|
+
const DatePicker = ({ id: idProp, className, error: errorProp, value, defaultValue, onValueChange, placeholder = "날짜를 선택하세요", dateFormat = "yyyy.MM.dd", variant = "white", disabled: disabledProp, type, contentClassName, calendarProps, ...props }) => {
|
|
15
|
+
const field = useFieldContext();
|
|
16
|
+
const generatedId = useId();
|
|
17
|
+
const triggerRef = useRef(null);
|
|
18
|
+
const [open, setOpen] = useState(false);
|
|
19
|
+
const [calendarKey, setCalendarKey] = useState(0);
|
|
20
|
+
const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);
|
|
21
|
+
const isControlled = value !== void 0;
|
|
22
|
+
const id = idProp ?? field?.id ?? generatedId;
|
|
23
|
+
const disabled = disabledProp ?? field?.disabled ?? false;
|
|
24
|
+
const error = errorProp ?? field?.error ?? false;
|
|
25
|
+
const selectedDate = isControlled ? value : uncontrolledValue;
|
|
26
|
+
const hasValue = isValidDate(selectedDate);
|
|
27
|
+
const { trigger, icon, content } = datePicker({
|
|
28
|
+
variant,
|
|
29
|
+
disabled,
|
|
30
|
+
error
|
|
31
|
+
});
|
|
32
|
+
const displayValue = hasValue ? format(selectedDate, dateFormat) : placeholder;
|
|
33
|
+
const handleOpenChange = (nextOpen) => {
|
|
34
|
+
if (disabled) return;
|
|
35
|
+
setOpen(nextOpen);
|
|
36
|
+
if (nextOpen) setCalendarKey((prev) => prev + 1);
|
|
37
|
+
};
|
|
38
|
+
const handleDateClick = (date) => {
|
|
39
|
+
if (!isControlled) setUncontrolledValue(date);
|
|
40
|
+
onValueChange?.(date);
|
|
41
|
+
setOpen(false);
|
|
42
|
+
triggerRef.current?.blur();
|
|
43
|
+
};
|
|
44
|
+
return /* @__PURE__ */ jsxs(Dropdown, {
|
|
45
|
+
modal: false,
|
|
46
|
+
open,
|
|
47
|
+
onOpenChange: handleOpenChange,
|
|
48
|
+
children: [/* @__PURE__ */ jsx(Dropdown.Trigger, {
|
|
49
|
+
asChild: true,
|
|
50
|
+
children: /* @__PURE__ */ jsxs("button", {
|
|
51
|
+
ref: triggerRef,
|
|
52
|
+
id,
|
|
53
|
+
type: type ?? "button",
|
|
54
|
+
disabled,
|
|
55
|
+
className: trigger({ className }),
|
|
56
|
+
...props,
|
|
57
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
58
|
+
typography: "body-16-regular",
|
|
59
|
+
textColor: hasValue ? "gray-700" : "gray-400",
|
|
60
|
+
children: displayValue
|
|
61
|
+
}), /* @__PURE__ */ jsx(CalendarIcon, {
|
|
62
|
+
size: 20,
|
|
63
|
+
color: "gray-400",
|
|
64
|
+
className: icon(),
|
|
65
|
+
"aria-hidden": "true"
|
|
66
|
+
})]
|
|
67
|
+
})
|
|
68
|
+
}), /* @__PURE__ */ jsx(Dropdown.Content, {
|
|
69
|
+
align: "start",
|
|
70
|
+
sideOffset: 8,
|
|
71
|
+
collisionPadding: 16,
|
|
72
|
+
avoidCollisions: true,
|
|
73
|
+
sticky: "always",
|
|
74
|
+
className: content({ className: contentClassName }),
|
|
75
|
+
children: /* @__PURE__ */ jsx(Calendar, {
|
|
76
|
+
defaultMonth: hasValue ? selectedDate : /* @__PURE__ */ new Date(),
|
|
77
|
+
selectedStartDate: hasValue ? selectedDate : void 0,
|
|
78
|
+
showToday: false,
|
|
79
|
+
size: "sm",
|
|
80
|
+
enableHover: true,
|
|
81
|
+
onDateClick: handleDateClick,
|
|
82
|
+
...calendarProps,
|
|
83
|
+
className: mergeStyles("border-none", calendarProps?.className)
|
|
84
|
+
}, calendarKey)
|
|
85
|
+
})]
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
DatePicker.displayName = "DatePicker";
|
|
89
|
+
|
|
90
|
+
//#endregion
|
|
91
|
+
export { DatePicker };
|
|
92
|
+
//# sourceMappingURL=DatePicker.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.mjs","names":[],"sources":["../../../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["import React, { useId, useRef, useState } from 'react';\nimport { format } from 'date-fns';\nimport { useFieldContext } from '../../hooks';\nimport { mergeStyles } from '../../utils';\nimport { Calendar, type CalendarProps } from '../Calendar';\nimport { Dropdown } from '../Dropdown';\nimport { datePicker, type DatePickerVariants } from './DatePicker.styles';\nimport { CalendarIcon } from '@causw/icons';\nimport { Text } from '../Text';\n\ntype DatePickerCalendarProps = Omit<\n CalendarProps,\n 'defaultMonth' | 'selectedStartDate' | 'selectedEndDate' | 'onDateClick'\n>;\n\nconst isValidDate = (value: Date | undefined): value is Date =>\n value instanceof Date && !Number.isNaN(value.getTime());\n\nexport interface DatePickerProps extends Omit<\n React.ComponentProps<'button'>,\n 'value' | 'defaultValue' | 'onChange'\n> {\n variant?: DatePickerVariants['variant'];\n error?: boolean;\n value?: Date;\n defaultValue?: Date;\n onValueChange?: (date: Date) => void;\n placeholder?: string;\n dateFormat?: string;\n contentClassName?: string;\n calendarProps?: DatePickerCalendarProps;\n}\n\nexport const DatePicker = ({\n id: idProp,\n className,\n error: errorProp,\n value,\n defaultValue,\n onValueChange,\n placeholder = '날짜를 선택하세요',\n dateFormat = 'yyyy.MM.dd',\n variant = 'white',\n disabled: disabledProp,\n type,\n contentClassName,\n calendarProps,\n ...props\n}: DatePickerProps) => {\n const field = useFieldContext();\n const generatedId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [open, setOpen] = useState(false);\n const [calendarKey, setCalendarKey] = useState(0);\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const isControlled = value !== undefined;\n const id = idProp ?? field?.id ?? generatedId;\n const disabled = disabledProp ?? field?.disabled ?? false;\n const error = errorProp ?? field?.error ?? false;\n\n const selectedDate = isControlled ? value : uncontrolledValue;\n const hasValue = isValidDate(selectedDate);\n const { trigger, icon, content } = datePicker({\n variant,\n disabled,\n error,\n });\n\n const displayValue = hasValue\n ? format(selectedDate, dateFormat)\n : placeholder;\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (disabled) {\n return;\n }\n setOpen(nextOpen);\n if (nextOpen) {\n setCalendarKey((prev) => prev + 1);\n }\n };\n\n const handleDateClick = (date: Date) => {\n if (!isControlled) {\n setUncontrolledValue(date);\n }\n onValueChange?.(date);\n setOpen(false);\n triggerRef.current?.blur();\n };\n\n return (\n <Dropdown modal={false} open={open} onOpenChange={handleOpenChange}>\n <Dropdown.Trigger asChild>\n <button\n ref={triggerRef}\n id={id}\n type={type ?? 'button'}\n disabled={disabled}\n className={trigger({ className })}\n {...props}\n >\n <Text\n typography=\"body-16-regular\"\n textColor={hasValue ? 'gray-700' : 'gray-400'}\n >\n {displayValue}\n </Text>\n <CalendarIcon\n size={20}\n color=\"gray-400\"\n className={icon()}\n aria-hidden=\"true\"\n />\n </button>\n </Dropdown.Trigger>\n <Dropdown.Content\n align=\"start\"\n sideOffset={8}\n collisionPadding={16}\n avoidCollisions\n sticky=\"always\"\n className={content({ className: contentClassName })}\n >\n <Calendar\n key={calendarKey}\n defaultMonth={hasValue ? selectedDate : new Date()}\n selectedStartDate={hasValue ? selectedDate : undefined}\n showToday={false}\n size=\"sm\"\n enableHover\n onDateClick={handleDateClick}\n {...calendarProps}\n className={mergeStyles('border-none', calendarProps?.className)}\n />\n </Dropdown.Content>\n </Dropdown>\n );\n};\n\nDatePicker.displayName = 'DatePicker';\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,eAAe,UACnB,iBAAiB,QAAQ,CAAC,OAAO,MAAM,MAAM,SAAS,CAAC;AAiBzD,MAAa,cAAc,EACzB,IAAI,QACJ,WACA,OAAO,WACP,OACA,cACA,eACA,cAAc,aACd,aAAa,cACb,UAAU,SACV,UAAU,cACV,MACA,kBACA,eACA,GAAG,YACkB;CACrB,MAAM,QAAQ,iBAAiB;CAC/B,MAAM,cAAc,OAAO;CAC3B,MAAM,aAAa,OAA0B,KAAK;CAClD,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CACvC,MAAM,CAAC,aAAa,kBAAkB,SAAS,EAAE;CACjD,MAAM,CAAC,mBAAmB,wBAAwB,SAAS,aAAa;CACxE,MAAM,eAAe,UAAU;CAC/B,MAAM,KAAK,UAAU,OAAO,MAAM;CAClC,MAAM,WAAW,gBAAgB,OAAO,YAAY;CACpD,MAAM,QAAQ,aAAa,OAAO,SAAS;CAE3C,MAAM,eAAe,eAAe,QAAQ;CAC5C,MAAM,WAAW,YAAY,aAAa;CAC1C,MAAM,EAAE,SAAS,MAAM,YAAY,WAAW;EAC5C;EACA;EACA;EACD,CAAC;CAEF,MAAM,eAAe,WACjB,OAAO,cAAc,WAAW,GAChC;CAEJ,MAAM,oBAAoB,aAAsB;AAC9C,MAAI,SACF;AAEF,UAAQ,SAAS;AACjB,MAAI,SACF,iBAAgB,SAAS,OAAO,EAAE;;CAItC,MAAM,mBAAmB,SAAe;AACtC,MAAI,CAAC,aACH,sBAAqB,KAAK;AAE5B,kBAAgB,KAAK;AACrB,UAAQ,MAAM;AACd,aAAW,SAAS,MAAM;;AAG5B,QACE,qBAAC;EAAS,OAAO;EAAa;EAAM,cAAc;aAChD,oBAAC,SAAS;GAAQ;aAChB,qBAAC;IACC,KAAK;IACD;IACJ,MAAM,QAAQ;IACJ;IACV,WAAW,QAAQ,EAAE,WAAW,CAAC;IACjC,GAAI;eAEJ,oBAAC;KACC,YAAW;KACX,WAAW,WAAW,aAAa;eAElC;MACI,EACP,oBAAC;KACC,MAAM;KACN,OAAM;KACN,WAAW,MAAM;KACjB,eAAY;MACZ;KACK;IACQ,EACnB,oBAAC,SAAS;GACR,OAAM;GACN,YAAY;GACZ,kBAAkB;GAClB;GACA,QAAO;GACP,WAAW,QAAQ,EAAE,WAAW,kBAAkB,CAAC;aAEnD,oBAAC;IAEC,cAAc,WAAW,+BAAe,IAAI,MAAM;IAClD,mBAAmB,WAAW,eAAe;IAC7C,WAAW;IACX,MAAK;IACL;IACA,aAAa;IACb,GAAI;IACJ,WAAW,YAAY,eAAe,eAAe,UAAU;MAR1D,YASL;IACe;GACV;;AAIf,WAAW,cAAc"}
|