@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.
Files changed (142) hide show
  1. package/README.md +123 -0
  2. package/dist/components/Avatar/Avatar.d.cts +2 -2
  3. package/dist/components/Avatar/Avatar.d.mts +2 -2
  4. package/dist/components/Avatar/Avatar.styles.d.cts +3 -3
  5. package/dist/components/BottomNavigation/BottomNavigation.d.cts +5 -5
  6. package/dist/components/BottomNavigation/BottomNavigation.d.mts +5 -5
  7. package/dist/components/BottomNavigation/BottomNavigation.styles.d.cts +3 -3
  8. package/dist/components/BottomNavigation/BottomNavigation.styles.d.mts +3 -3
  9. package/dist/components/BottomSheet/BottomSheet.d.cts +6 -6
  10. package/dist/components/BottomSheet/BottomSheet.d.mts +6 -6
  11. package/dist/components/BottomSheet/BottomSheet.styles.d.cts +3 -3
  12. package/dist/components/BottomSheet/BottomSheet.styles.d.mts +3 -3
  13. package/dist/components/Button/Button.d.cts +2 -2
  14. package/dist/components/Button/Button.d.cts.map +1 -1
  15. package/dist/components/Button/Button.d.mts +2 -2
  16. package/dist/components/Button/Button.styles.d.cts +3 -3
  17. package/dist/components/Button/Button.styles.d.mts +3 -3
  18. package/dist/components/CTAButton/CTAButton.d.cts +2 -2
  19. package/dist/components/CTAButton/CTAButton.d.mts +2 -2
  20. package/dist/components/CTAButton/CTAButton.styles.d.mts +3 -3
  21. package/dist/components/Calendar/Calendar.cjs +2 -2
  22. package/dist/components/Calendar/Calendar.d.cts +4 -2
  23. package/dist/components/Calendar/Calendar.d.cts.map +1 -1
  24. package/dist/components/Calendar/Calendar.d.mts +4 -2
  25. package/dist/components/Calendar/Calendar.d.mts.map +1 -1
  26. package/dist/components/Calendar/Calendar.mjs +2 -2
  27. package/dist/components/Calendar/Calendar.mjs.map +1 -1
  28. package/dist/components/Calendar/Calendar.styles.d.cts +3 -3
  29. package/dist/components/Calendar/Calendar.styles.d.mts +3 -3
  30. package/dist/components/Checkbox/Checkbox.d.cts +4 -4
  31. package/dist/components/Checkbox/Checkbox.d.mts +4 -4
  32. package/dist/components/Checkbox/Checkbox.styles.d.cts +3 -3
  33. package/dist/components/Checkbox/Checkbox.styles.d.mts +3 -3
  34. package/dist/components/Chip/Chip.d.cts +2 -2
  35. package/dist/components/Chip/Chip.d.mts +2 -2
  36. package/dist/components/Chip/Chip.styles.d.cts +3 -3
  37. package/dist/components/Chip/Chip.styles.d.mts +3 -3
  38. package/dist/components/DatePicker/DatePicker.cjs +93 -0
  39. package/dist/components/DatePicker/DatePicker.d.cts +40 -0
  40. package/dist/components/DatePicker/DatePicker.d.cts.map +1 -0
  41. package/dist/components/DatePicker/DatePicker.d.mts +41 -0
  42. package/dist/components/DatePicker/DatePicker.d.mts.map +1 -0
  43. package/dist/components/DatePicker/DatePicker.mjs +92 -0
  44. package/dist/components/DatePicker/DatePicker.mjs.map +1 -0
  45. package/dist/components/DatePicker/DatePicker.styles.cjs +33 -0
  46. package/dist/components/DatePicker/DatePicker.styles.d.cts +84 -0
  47. package/dist/components/DatePicker/DatePicker.styles.d.cts.map +1 -0
  48. package/dist/components/DatePicker/DatePicker.styles.d.mts +84 -0
  49. package/dist/components/DatePicker/DatePicker.styles.d.mts.map +1 -0
  50. package/dist/components/DatePicker/DatePicker.styles.mjs +33 -0
  51. package/dist/components/DatePicker/DatePicker.styles.mjs.map +1 -0
  52. package/dist/components/DatePicker/index.d.cts +2 -0
  53. package/dist/components/DatePicker/index.d.mts +2 -0
  54. package/dist/components/Dialog/Dialog.d.cts +13 -13
  55. package/dist/components/Dialog/Dialog.d.mts +5 -5
  56. package/dist/components/Dialog/Dialog.styles.d.cts +3 -3
  57. package/dist/components/Dialog/Dialog.styles.d.mts +3 -3
  58. package/dist/components/Drawer/Drawer.d.cts +11 -11
  59. package/dist/components/Drawer/Drawer.d.mts +3 -3
  60. package/dist/components/Drawer/Drawer.styles.d.cts +3 -3
  61. package/dist/components/Dropdown/Dropdown.d.cts +3 -3
  62. package/dist/components/Dropdown/Dropdown.d.mts +3 -3
  63. package/dist/components/Dropdown/Dropdown.styles.d.cts +3 -3
  64. package/dist/components/Dropdown/Dropdown.styles.d.mts +3 -3
  65. package/dist/components/Dropdown/Dropdown.styles.d.mts.map +1 -1
  66. package/dist/components/Field/Field.d.cts +5 -5
  67. package/dist/components/Field/Field.d.mts +5 -5
  68. package/dist/components/Float/Float.styles.d.cts +3 -3
  69. package/dist/components/Float/Float.styles.d.mts +3 -3
  70. package/dist/components/FloatingActionButton/FloatingActionButton.d.cts +2 -2
  71. package/dist/components/FloatingActionButton/FloatingActionButton.styles.d.cts +3 -3
  72. package/dist/components/FloatingActionButton/FloatingActionButton.styles.d.mts +3 -3
  73. package/dist/components/Grid/Grid.styles.d.cts +3 -3
  74. package/dist/components/Grid/Grid.styles.d.mts +3 -3
  75. package/dist/components/HStack/HStack.d.cts +2 -2
  76. package/dist/components/HStack/HStack.d.mts +2 -2
  77. package/dist/components/Modal/Modal.d.cts +10 -10
  78. package/dist/components/Modal/Modal.d.mts +7 -7
  79. package/dist/components/Modal/Modal.styles.d.cts +3 -3
  80. package/dist/components/Modal/Modal.styles.d.mts +3 -3
  81. package/dist/components/Primitive/Primitive.d.cts +16 -16
  82. package/dist/components/Primitive/Primitive.d.mts +16 -16
  83. package/dist/components/PullToRefresh/PullToRefresh.d.cts +2 -2
  84. package/dist/components/PullToRefresh/PullToRefresh.d.mts +2 -2
  85. package/dist/components/PullToRefresh/PullToRefresh.styles.d.cts +3 -3
  86. package/dist/components/PullToRefresh/PullToRefresh.styles.d.mts +3 -3
  87. package/dist/components/Radio/Radio.d.cts +3 -3
  88. package/dist/components/Radio/Radio.d.mts +3 -3
  89. package/dist/components/Radio/Radio.d.mts.map +1 -1
  90. package/dist/components/RatioChart/RatioChart.d.cts +5 -5
  91. package/dist/components/RatioChart/RatioChart.d.mts +5 -5
  92. package/dist/components/RatioChart/RatioChartEditor.d.cts +2 -2
  93. package/dist/components/RatioChart/RatioChartEditor.d.mts +2 -2
  94. package/dist/components/Select/Select.d.cts +5 -5
  95. package/dist/components/Select/Select.d.mts +5 -5
  96. package/dist/components/Select/Select.styles.d.mts +3 -3
  97. package/dist/components/Separator/Separator.styles.cjs +1 -1
  98. package/dist/components/Separator/Separator.styles.mjs +1 -1
  99. package/dist/components/Separator/Separator.styles.mjs.map +1 -1
  100. package/dist/components/Sidebar/Sidebar.d.cts +8 -8
  101. package/dist/components/Sidebar/Sidebar.d.mts +8 -8
  102. package/dist/components/Sidebar/Sidebar.styles.d.cts +3 -3
  103. package/dist/components/Sidebar/Sidebar.styles.d.mts +3 -3
  104. package/dist/components/Skeleton/Skeleton.d.cts +2 -2
  105. package/dist/components/Skeleton/Skeleton.d.mts +2 -2
  106. package/dist/components/Skeleton/Skeleton.styles.d.mts +3 -3
  107. package/dist/components/Spacer/Spacer.styles.d.mts +3 -3
  108. package/dist/components/Spacer/Spacer.styles.d.mts.map +1 -1
  109. package/dist/components/Spinner/Spinner.d.cts +2 -2
  110. package/dist/components/Spinner/Spinner.d.mts +2 -2
  111. package/dist/components/Spinner/Spinner.styles.d.cts +3 -3
  112. package/dist/components/Spinner/Spinner.styles.d.mts +3 -3
  113. package/dist/components/Stack/Stack.styles.d.mts +3 -3
  114. package/dist/components/Tab/Tab.d.cts +6 -6
  115. package/dist/components/Tab/Tab.d.mts +6 -6
  116. package/dist/components/Tab/Tab.styles.d.cts +3 -3
  117. package/dist/components/Text/Text.d.cts +1 -1
  118. package/dist/components/Text/Text.d.mts +1 -1
  119. package/dist/components/TextArea/TextArea.d.cts +4 -4
  120. package/dist/components/TextArea/TextArea.d.mts +4 -4
  121. package/dist/components/TextArea/TextArea.styles.d.cts +3 -3
  122. package/dist/components/TextInput/TextInput.d.cts +2 -2
  123. package/dist/components/TextInput/TextInput.d.cts.map +1 -1
  124. package/dist/components/TextInput/TextInput.d.mts +2 -2
  125. package/dist/components/Toast/Toast.d.cts +5 -5
  126. package/dist/components/Toast/Toast.d.cts.map +1 -1
  127. package/dist/components/Toast/Toast.d.mts +3 -3
  128. package/dist/components/Toast/Toast.styles.d.cts +3 -3
  129. package/dist/components/Toast/Toast.styles.d.mts +3 -3
  130. package/dist/components/Toggle/Toggle.d.cts +4 -4
  131. package/dist/components/Toggle/Toggle.d.mts +4 -4
  132. package/dist/components/Toggle/Toggle.styles.d.cts +3 -3
  133. package/dist/components/Toggle/Toggle.styles.d.mts +3 -3
  134. package/dist/components/VStack/VStack.d.cts +2 -2
  135. package/dist/components/VStack/VStack.d.mts +2 -2
  136. package/dist/components/index.d.cts +4 -1
  137. package/dist/components/index.d.mts +4 -1
  138. package/dist/index.cjs +2 -0
  139. package/dist/index.d.cts +3 -1
  140. package/dist/index.d.mts +3 -1
  141. package/dist/index.mjs +2 -1
  142. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  import { CalendarVariants, eventBarStyles } from "./Calendar.styles.mjs";
2
- import * as react_jsx_runtime82 from "react/jsx-runtime";
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): react_jsx_runtime82.JSX.Element;
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;;;;;;;;;;;KAWV,aAAA,GAAa,mBAAA,CAAA,GAAA,CAAA,OAAA"}
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":";;;;;;;;;;;;AAiDA,MAAM,gBAAgB,YAAoB;CACxC,MAAM,CAAC,GAAG,GAAG,KAAK,QAAQ,MAAM,IAAI,CAAC,IAAI,OAAO;AAChD,QAAO,IAAI,KAAK,GAAG,IAAI,GAAG,EAAE;;AAE9B,MAAM,iBAAiB,SAAe,OAAO,MAAM,aAAa;AAEhE,MAAM,iBAAiB,UAAyB;CAC9C,MAAM,QAAQ,aAAa,MAAM,UAAU;AAE3C,QAAO;EAAE;EAAO,KADJ,MAAM,UAAU,aAAa,MAAM,QAAQ,GAAG;EACrC;;AAGvB,MAAa,YAAY,EACvB,WACA,SAAS,EAAE,EACX,+BAAe,IAAI,MAAM,EACzB,wBAAQ,IAAI,MAAM,EAClB,MACA,mBACA,iBACA,aACA,cACA,cAAc,YACK;CACnB,MAAM,EACJ,SACA,iBACA,QACA,kBACA,mBACA,WACA,SACA,SACA,YACA,SACA,UACA,MACA,WACA,WACA,oBACE,SAAS;EAAE;EAAM,aAAa;EAAa,CAAC;CAEhD,MAAM,CAAC,cAAc,mBAAmB,SAAS,aAAa;CAC9D,MAAM,YAAY,eAAe,aAAa;CAC9C,MAAM,gBAAgB,OAAO,aAAa,aAAa,CAAC;CACxD,MAAM,WAAW;EAAC;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;CAEpD,MAAM,wBAAwB,iBAAiB,SAAS,UAAU,MAAM,EAAE,CAAC;CAC3E,MAAM,wBAAwB,iBAAiB,SAAS,UAAU,MAAM,EAAE,CAAC;CAE3E,MAAM,eAAe,cAAc;EACjC,MAAM,sBAAM,IAAI,KAA8B;EAC9C,MAAM,SAAS,aAAa,aAAa;EACzC,MAAM,OAAO,WAAW,aAAa;EAErC,MAAM,iBAAiB,OAAO,QAAQ,UAAU;GAC9C,MAAM,EAAE,OAAO,QAAQ,cAAc,MAAM;AAC3C,UAAO,SAAS,QAAQ,OAAO;IAC/B;AAEF,OAAK,MAAM,SAAS,gBAAgB;GAClC,MAAM,EAAE,OAAO,QAAQ,cAAc,MAAM;GAC3C,IAAI,IAAI,QAAQ,SAAS,SAAS;GAClC,MAAM,eAAe,MAAM,OAAO,OAAO;AAEzC,UAAO,KAAK,cAAc;IACxB,MAAM,UAAU,cAAc,EAAE;IAChC,MAAM,cAAc,IAAI,IAAI,QAAQ,IAAI,EAAE;AAC1C,QAAI,IAAI,SAAS,CAAC,GAAG,aAAa,MAAM,CAAC;AACzC,QAAI,QAAQ,GAAG,EAAE;;;AAGrB,SAAO;IACN,CAAC,cAAc,OAAO,CAAC;AAE1B,QACE,oBAAC;EAAI,WAAW,QAAQ,EAAE,WAAW,CAAC;YACpC,qBAAC;GAAI,WAAW,iBAAiB;;IAC/B,qBAAC;KAAK,SAAS;KAAG,WAAW,QAAQ;;MACnC,oBAAC;OAAK,WAAW,kBAAkB;iBACjC,oBAAC;QACC,SAAS;QACT,WAAW,WAAW;QACtB,MAAK;kBAEL,oBAAC,eAAY,WAAW,SAAS,GAAI;SAC9B;QACJ;MACP,oBAAC;OAAI,WAAU;iBACb,oBAAC;QAAK,WAAW,SAAS;kBACvB,OAAO,cAAc,YAAY,EAAE,QAAQ,IAAI,CAAC;SAC5C;QACH;MACN,oBAAC;OAAK,WAAW,mBAAmB;iBAClC,oBAAC;QACC,SAAS;QACT,WAAW,WAAW;QACtB,MAAK;kBAEL,oBAAC,gBAAa,WAAW,SAAS,GAAI;SAC/B;QACJ;;MACF;IAEP,oBAAC;KAAK,SAAS;KAAG,WAAW,YAAY;eACtC,SAAS,KAAK,QACb,oBAAC;MAEC,SAAQ;MACR,OAAM;MACN,WAAW,SAAS;gBAEnB;QALI,IAMA,CACP;MACG;IAEP,qBAAC;KAAK,SAAS;KAAG,WAAW,UAAU;gBACpC,MAAM,KAAK,EAAE,QAAQ,eAAe,CAAC,CAAC,KAAK,GAAG,MAC7C,oBAAC,OAAuB,WAAW,WAAW,IAApC,SAAS,IAA+B,CAClD,EAED,MAAM,KAAK,EAAE,QAAQ,WAAW,CAAC,CAAC,KAAK,GAAG,MAAM;MAC/C,MAAM,MAAM,IAAI;MAChB,MAAM,cAAc,IAAI,KACtB,aAAa,aAAa,EAC1B,aAAa,UAAU,EACvB,IACD;MACD,MAAM,UAAU,cAAc,YAAY;MAE1C,MAAM,aAAa,aAAa,IAAI,QAAQ,IAAI,EAAE;MAElD,MAAM,UAAU,UAAU,aAAa,MAAM;MAC7C,MAAM,UACJ,qBAAqB,UAAU,aAAa,kBAAkB;MAChE,MAAM,QACJ,mBAAmB,UAAU,aAAa,gBAAgB;MAC5D,MAAM,YACJ,qBACA,mBACA,iBAAiB,aAAa;OAC5B,OAAO;OACP,KAAK;OACN,CAAC,IACF,CAAC,WACD,CAAC;MAEH,IAAI,iBAMa;AACjB,UAAI,QAAS,kBAAiB;eACrB,MAAO,kBAAiB;eACxB,UAAW,kBAAiB;eAC5B,QAAS,kBAAiB;AAEnC,aACE,qBAAC;OAEC,WAAU;OACV,OAAM;OACN,SAAQ;OACR,WAAW,MAAM;OACjB,eAAe,cAAc,YAAY;kBAEzC,oBAAC;QAAK,WAAW,SAAS,EAAE,gBAAgB,CAAC,CAAC,WAAW;kBACtD;SACI,EACP,oBAAC;QAAK,WAAW,WAAW;kBACzB,WAAW,KAAK,IAAI,QAAQ;SAC3B,MAAM,EAAE,OAAO,QAAQ,cAAc,GAAG;SAExC,MAAM,kBAAkB,OAAO,YAAY;SAC3C,MAAM,YAAY,QAAQ,aAAa,gBAAgB;SACvD,MAAM,UAAU,QAAQ,aAAa,IAAI,gBAAgB;SAEzD,MAAM,eAAe,QAAQ,YAAY,YAAY;SAErD,MAAM,kBACJ,yBAFiB,MAAM,UAAU,UAAU,KAEN,aAAa,GAAG;SAOvD,MAAM,eANiB,yBACrB,aACA,aACD,KAEmB,KAAK,OAAO,kBAAkB,KAAK,EAAE;SAGzD,MAAM,eAAe,cAAc,MAAM;SACzC,MAAM,aAAa,cAAc,IAAI;SACrC,MAAM,eAAe,YAAY;SACjC,MAAM,aAAa,YAAY;SAC/B,MAAM,cAAc,iBAAiB;AAErC,gBACE,oBAAC;UAEC,WAAW,YAAY;WACrB;WACA,iBAAiB;WACjB,eAAe,SAAS,GAAG;WAC3B,cACI,+CACA;WACJ,CAAC,eAAe,eACZ,qEACA;WACJ,CAAC,eAAe,aACZ,qEACA;WACJ,CAAC,eAAe,CAAC,gBAAgB,CAAC,aAC9B,6BACA;WACL,CAAC;UACF,UAAU,MAAM;AACd,aAAE,iBAAiB;AACnB,0BAAe,GAAG;;oBAGnB,gBACC,oBAAC;WAAI,WAAW,eAAe;qBAC7B,oBAAC;YAAK,WAAU;sBACb,GAAG;aACC;YACH;YA5BH,GAAG,GAAG,GAAG,GAAG,MA8Bb;UAER;SACG;SAvEF,IAwEA;OAET;MACG;;IACH;GACF;;AAGV,SAAS,cAAc"}
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 tailwind_variants49 from "tailwind-variants";
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: tailwind_variants49.TVReturnType<{
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
- }, tailwind_variants49.TVReturnType<{
173
+ }, tailwind_variants53.TVReturnType<{
174
174
  size: {
175
175
  sm: {
176
176
  wrapper: string;
@@ -1,8 +1,8 @@
1
- import * as tailwind_variants55 from "tailwind-variants";
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: tailwind_variants55.TVReturnType<{
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
- }, tailwind_variants55.TVReturnType<{
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 react_jsx_runtime10 from "react/jsx-runtime";
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): react_jsx_runtime10.JSX.Element;
26
+ }: CheckboxRootProps): react_jsx_runtime13.JSX.Element;
27
27
  displayName: string;
28
28
  } & {
29
29
  Indicator: {
30
- (): react_jsx_runtime10.JSX.Element;
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>): react_jsx_runtime10.JSX.Element;
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 react_jsx_runtime14 from "react/jsx-runtime";
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): react_jsx_runtime14.JSX.Element;
26
+ }: CheckboxRootProps): react_jsx_runtime12.JSX.Element;
27
27
  displayName: string;
28
28
  } & {
29
29
  Indicator: {
30
- (): react_jsx_runtime14.JSX.Element;
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>): react_jsx_runtime14.JSX.Element;
40
+ }: CheckboxLabelProps<E>): react_jsx_runtime12.JSX.Element;
41
41
  displayName: string;
42
42
  };
43
43
  };
@@ -1,8 +1,8 @@
1
- import * as tailwind_variants33 from "tailwind-variants";
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: tailwind_variants33.TVReturnType<{
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
- }, tailwind_variants33.TVReturnType<{
49
+ }, tailwind_variants37.TVReturnType<{
50
50
  checked: {
51
51
  true: {
52
52
  indicator: string;
@@ -1,8 +1,8 @@
1
- import * as tailwind_variants39 from "tailwind-variants";
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: tailwind_variants39.TVReturnType<{
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
- }, tailwind_variants39.TVReturnType<{
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 react_jsx_runtime36 from "react/jsx-runtime";
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): react_jsx_runtime36.JSX.Element;
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 react_jsx_runtime35 from "react/jsx-runtime";
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): react_jsx_runtime35.JSX.Element;
18
+ }: ChipProps): react_jsx_runtime36.JSX.Element;
19
19
  displayName: string;
20
20
  };
21
21
  //#endregion
@@ -1,8 +1,8 @@
1
- import * as tailwind_variants19 from "tailwind-variants";
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: tailwind_variants19.TVReturnType<{
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, tailwind_variants19.TVReturnType<{
33
+ }, undefined, tailwind_variants23.TVReturnType<{
34
34
  color: {
35
35
  white: string;
36
36
  lightgray: string;
@@ -1,8 +1,8 @@
1
- import * as tailwind_variants17 from "tailwind-variants";
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: tailwind_variants17.TVReturnType<{
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, tailwind_variants17.TVReturnType<{
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"}