@causw/core 0.0.12 → 0.0.13

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 (169) hide show
  1. package/dist/components/Avatar/Avatar.d.cts +2 -2
  2. package/dist/components/Avatar/Avatar.d.mts +2 -2
  3. package/dist/components/Avatar/Avatar.styles.d.cts +3 -3
  4. package/dist/components/Avatar/Avatar.styles.d.mts +3 -3
  5. package/dist/components/BottomNavigation/BottomNavigation.cjs +78 -0
  6. package/dist/components/BottomNavigation/BottomNavigation.d.cts +48 -0
  7. package/dist/components/BottomNavigation/BottomNavigation.d.cts.map +1 -0
  8. package/dist/components/BottomNavigation/BottomNavigation.d.mts +49 -0
  9. package/dist/components/BottomNavigation/BottomNavigation.d.mts.map +1 -0
  10. package/dist/components/BottomNavigation/BottomNavigation.mjs +78 -0
  11. package/dist/components/BottomNavigation/BottomNavigation.mjs.map +1 -0
  12. package/dist/components/BottomNavigation/BottomNavigation.styles.cjs +26 -0
  13. package/dist/components/BottomNavigation/BottomNavigation.styles.d.cts +57 -0
  14. package/dist/components/BottomNavigation/BottomNavigation.styles.d.cts.map +1 -0
  15. package/dist/components/BottomNavigation/BottomNavigation.styles.d.mts +57 -0
  16. package/dist/components/BottomNavigation/BottomNavigation.styles.d.mts.map +1 -0
  17. package/dist/components/BottomNavigation/BottomNavigation.styles.mjs +26 -0
  18. package/dist/components/BottomNavigation/BottomNavigation.styles.mjs.map +1 -0
  19. package/dist/components/BottomNavigation/hooks/useBottomNavigationContext.cjs +22 -0
  20. package/dist/components/BottomNavigation/hooks/useBottomNavigationContext.mjs +19 -0
  21. package/dist/components/BottomNavigation/hooks/useBottomNavigationContext.mjs.map +1 -0
  22. package/dist/components/BottomNavigation/index.d.mts +1 -0
  23. package/dist/components/BottomSheet/BottomSheet.cjs +94 -0
  24. package/dist/components/BottomSheet/BottomSheet.d.cts +69 -0
  25. package/dist/components/BottomSheet/BottomSheet.d.cts.map +1 -0
  26. package/dist/components/BottomSheet/BottomSheet.d.mts +69 -0
  27. package/dist/components/BottomSheet/BottomSheet.d.mts.map +1 -0
  28. package/dist/components/BottomSheet/BottomSheet.mjs +93 -0
  29. package/dist/components/BottomSheet/BottomSheet.mjs.map +1 -0
  30. package/dist/components/BottomSheet/BottomSheet.styles.cjs +21 -0
  31. package/dist/components/BottomSheet/BottomSheet.styles.d.cts +54 -0
  32. package/dist/components/BottomSheet/BottomSheet.styles.d.cts.map +1 -0
  33. package/dist/components/BottomSheet/BottomSheet.styles.d.mts +54 -0
  34. package/dist/components/BottomSheet/BottomSheet.styles.d.mts.map +1 -0
  35. package/dist/components/BottomSheet/BottomSheet.styles.mjs +21 -0
  36. package/dist/components/BottomSheet/BottomSheet.styles.mjs.map +1 -0
  37. package/dist/components/BottomSheet/index.d.mts +1 -0
  38. package/dist/components/Box/Box.styles.d.mts +3 -3
  39. package/dist/components/Button/Button.d.cts +2 -2
  40. package/dist/components/Button/Button.d.mts +2 -2
  41. package/dist/components/Button/Button.styles.d.mts +3 -3
  42. package/dist/components/CTAButton/CTAButton.d.cts +2 -2
  43. package/dist/components/CTAButton/CTAButton.d.mts +2 -2
  44. package/dist/components/CTAButton/CTAButton.styles.d.cts +3 -3
  45. package/dist/components/CTAButton/CTAButton.styles.d.mts +3 -3
  46. package/dist/components/Calendar/Calendar.cjs +191 -0
  47. package/dist/components/Calendar/Calendar.d.cts +40 -0
  48. package/dist/components/Calendar/Calendar.d.cts.map +1 -0
  49. package/dist/components/Calendar/Calendar.d.mts +40 -0
  50. package/dist/components/Calendar/Calendar.d.mts.map +1 -0
  51. package/dist/components/Calendar/Calendar.mjs +190 -0
  52. package/dist/components/Calendar/Calendar.mjs.map +1 -0
  53. package/dist/components/Calendar/Calendar.styles.cjs +121 -0
  54. package/dist/components/Calendar/Calendar.styles.d.cts +269 -0
  55. package/dist/components/Calendar/Calendar.styles.d.cts.map +1 -0
  56. package/dist/components/Calendar/Calendar.styles.d.mts +269 -0
  57. package/dist/components/Calendar/Calendar.styles.d.mts.map +1 -0
  58. package/dist/components/Calendar/Calendar.styles.mjs +120 -0
  59. package/dist/components/Calendar/Calendar.styles.mjs.map +1 -0
  60. package/dist/components/Calendar/index.d.mts +1 -0
  61. package/dist/components/Checkbox/Checkbox.d.cts +4 -4
  62. package/dist/components/Checkbox/Checkbox.d.mts +4 -4
  63. package/dist/components/Checkbox/Checkbox.d.mts.map +1 -1
  64. package/dist/components/Checkbox/Checkbox.styles.d.mts +3 -3
  65. package/dist/components/Chip/Chip.d.cts +2 -2
  66. package/dist/components/Chip/Chip.styles.d.cts +3 -3
  67. package/dist/components/Dialog/Dialog.d.cts +5 -5
  68. package/dist/components/Dialog/Dialog.styles.d.cts +3 -3
  69. package/dist/components/Dialog/Dialog.styles.d.cts.map +1 -1
  70. package/dist/components/Drawer/Drawer.cjs +41 -0
  71. package/dist/components/Drawer/Drawer.d.cts +29 -0
  72. package/dist/components/Drawer/Drawer.d.cts.map +1 -0
  73. package/dist/components/Drawer/Drawer.d.mts +29 -0
  74. package/dist/components/Drawer/Drawer.d.mts.map +1 -0
  75. package/dist/components/Drawer/Drawer.mjs +40 -0
  76. package/dist/components/Drawer/Drawer.mjs.map +1 -0
  77. package/dist/components/Drawer/Drawer.styles.cjs +23 -0
  78. package/dist/components/Drawer/Drawer.styles.d.cts +36 -0
  79. package/dist/components/Drawer/Drawer.styles.d.cts.map +1 -0
  80. package/dist/components/Drawer/Drawer.styles.d.mts +36 -0
  81. package/dist/components/Drawer/Drawer.styles.d.mts.map +1 -0
  82. package/dist/components/Drawer/Drawer.styles.mjs +23 -0
  83. package/dist/components/Drawer/Drawer.styles.mjs.map +1 -0
  84. package/dist/components/Drawer/index.d.mts +1 -0
  85. package/dist/components/Dropdown/Dropdown.d.cts +3 -3
  86. package/dist/components/Field/Field.d.mts +5 -5
  87. package/dist/components/Float/Float.styles.d.cts +3 -3
  88. package/dist/components/Float/Float.styles.d.mts +3 -3
  89. package/dist/components/FloatingActionButton/FloatingActionButton.d.cts +2 -2
  90. package/dist/components/FloatingActionButton/FloatingActionButton.d.mts +2 -2
  91. package/dist/components/FloatingActionButton/FloatingActionButton.styles.d.cts +3 -3
  92. package/dist/components/FloatingActionButton/FloatingActionButton.styles.d.mts +3 -3
  93. package/dist/components/Grid/Grid.styles.d.cts +3 -3
  94. package/dist/components/Grid/Grid.styles.d.mts +3 -3
  95. package/dist/components/HStack/HStack.d.cts +2 -2
  96. package/dist/components/HStack/HStack.d.mts +2 -2
  97. package/dist/components/Modal/Modal.d.cts +7 -7
  98. package/dist/components/Modal/Modal.d.mts +7 -7
  99. package/dist/components/Modal/Modal.styles.d.cts +3 -3
  100. package/dist/components/Modal/Modal.styles.d.mts +3 -3
  101. package/dist/components/Primitive/Primitive.d.cts +16 -16
  102. package/dist/components/Radio/Radio.d.cts +3 -3
  103. package/dist/components/Radio/Radio.d.cts.map +1 -1
  104. package/dist/components/Radio/Radio.d.mts +3 -3
  105. package/dist/components/Radio/Radio.d.mts.map +1 -1
  106. package/dist/components/RatioChart/RatioChart.d.cts +5 -5
  107. package/dist/components/RatioChart/RatioChartEditor.d.cts +2 -2
  108. package/dist/components/Select/Select.d.cts +5 -5
  109. package/dist/components/Select/Select.styles.d.cts +3 -3
  110. package/dist/components/Separator/Separator.styles.d.mts +3 -3
  111. package/dist/components/Sidebar/Sidebar.cjs +95 -0
  112. package/dist/components/Sidebar/Sidebar.d.cts +64 -0
  113. package/dist/components/Sidebar/Sidebar.d.cts.map +1 -0
  114. package/dist/components/Sidebar/Sidebar.d.mts +65 -0
  115. package/dist/components/Sidebar/Sidebar.d.mts.map +1 -0
  116. package/dist/components/Sidebar/Sidebar.mjs +95 -0
  117. package/dist/components/Sidebar/Sidebar.mjs.map +1 -0
  118. package/dist/components/Sidebar/Sidebar.styles.cjs +32 -0
  119. package/dist/components/Sidebar/Sidebar.styles.d.cts +75 -0
  120. package/dist/components/Sidebar/Sidebar.styles.d.cts.map +1 -0
  121. package/dist/components/Sidebar/Sidebar.styles.d.mts +75 -0
  122. package/dist/components/Sidebar/Sidebar.styles.d.mts.map +1 -0
  123. package/dist/components/Sidebar/Sidebar.styles.mjs +32 -0
  124. package/dist/components/Sidebar/Sidebar.styles.mjs.map +1 -0
  125. package/dist/components/Sidebar/hooks/useSidebarContext.cjs +22 -0
  126. package/dist/components/Sidebar/hooks/useSidebarContext.d.cts +5 -0
  127. package/dist/components/Sidebar/hooks/useSidebarContext.d.cts.map +1 -0
  128. package/dist/components/Sidebar/hooks/useSidebarContext.d.mts +7 -0
  129. package/dist/components/Sidebar/hooks/useSidebarContext.d.mts.map +1 -0
  130. package/dist/components/Sidebar/hooks/useSidebarContext.mjs +19 -0
  131. package/dist/components/Sidebar/hooks/useSidebarContext.mjs.map +1 -0
  132. package/dist/components/Sidebar/index.d.mts +2 -0
  133. package/dist/components/Spacer/Spacer.styles.d.cts +3 -3
  134. package/dist/components/Spacer/Spacer.styles.d.cts.map +1 -1
  135. package/dist/components/Spacer/Spacer.styles.d.mts +3 -3
  136. package/dist/components/Stack/Stack.styles.d.mts +3 -3
  137. package/dist/components/Tab/Tab.d.cts +6 -6
  138. package/dist/components/Tab/Tab.d.mts +6 -6
  139. package/dist/components/Tab/Tab.styles.d.cts +3 -3
  140. package/dist/components/Tab/Tab.styles.d.mts +3 -3
  141. package/dist/components/Text/Text.d.cts +1 -1
  142. package/dist/components/Text/Text.d.mts +1 -1
  143. package/dist/components/Text/Text.styles.d.cts +3 -3
  144. package/dist/components/Text/Text.styles.d.mts +3 -3
  145. package/dist/components/TextArea/TextArea.d.cts +4 -4
  146. package/dist/components/TextArea/TextArea.d.mts +4 -4
  147. package/dist/components/TextArea/TextArea.d.mts.map +1 -1
  148. package/dist/components/TextArea/TextArea.styles.d.mts +3 -3
  149. package/dist/components/TextInput/TextInput.d.cts +2 -2
  150. package/dist/components/TextInput/TextInput.d.mts +2 -2
  151. package/dist/components/TextInput/TextInput.styles.d.cts +3 -3
  152. package/dist/components/TextInput/TextInput.styles.d.mts +3 -3
  153. package/dist/components/Toast/Toast.d.cts +3 -3
  154. package/dist/components/Toast/Toast.d.mts +3 -3
  155. package/dist/components/Toast/Toast.styles.d.cts +3 -3
  156. package/dist/components/Toast/Toast.styles.d.mts +3 -3
  157. package/dist/components/Toggle/Toggle.d.cts +4 -4
  158. package/dist/components/Toggle/Toggle.d.mts +4 -4
  159. package/dist/components/Toggle/Toggle.styles.d.cts +3 -3
  160. package/dist/components/VStack/VStack.d.mts +2 -2
  161. package/dist/components/index.d.mts +12 -1
  162. package/dist/hooks/bottomSheet/useBottomSheet.cjs +15 -0
  163. package/dist/hooks/bottomSheet/useBottomSheet.mjs +13 -0
  164. package/dist/hooks/bottomSheet/useBottomSheet.mjs.map +1 -0
  165. package/dist/index.cjs +10 -0
  166. package/dist/index.d.cts +7 -1
  167. package/dist/index.d.mts +7 -1
  168. package/dist/index.mjs +6 -1
  169. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
- import * as tailwind_variants35 from "tailwind-variants";
1
+ import * as tailwind_variants39 from "tailwind-variants";
2
2
  import { VariantProps } from "tailwind-variants";
3
3
 
4
4
  //#region src/components/CTAButton/CTAButton.styles.d.ts
5
- declare const ctaButton: tailwind_variants35.TVReturnType<{
5
+ declare const ctaButton: tailwind_variants39.TVReturnType<{
6
6
  color: {
7
7
  blue: string;
8
8
  red: string;
@@ -34,7 +34,7 @@ declare const ctaButton: tailwind_variants35.TVReturnType<{
34
34
  true: string;
35
35
  false: string;
36
36
  };
37
- }, undefined, tailwind_variants35.TVReturnType<{
37
+ }, undefined, tailwind_variants39.TVReturnType<{
38
38
  color: {
39
39
  blue: string;
40
40
  red: string;
@@ -0,0 +1,191 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_mergeStyles = require('../../utils/mergeStyles/mergeStyles.cjs');
3
+ const require_Box = require('../Box/Box.cjs');
4
+ const require_Flex = require('../Flex/Flex.cjs');
5
+ const require_Grid = require('../Grid/Grid.cjs');
6
+ const require_Calendar_styles = require('./Calendar.styles.cjs');
7
+ let react = require("react");
8
+ react = require_rolldown_runtime.__toESM(react);
9
+ let react_jsx_runtime = require("react/jsx-runtime");
10
+ let _causw_icons = require("@causw/icons");
11
+ let date_fns = require("date-fns");
12
+ let date_fns_locale = require("date-fns/locale");
13
+
14
+ //#region src/components/Calendar/Calendar.tsx
15
+ const parseDateStr = (dateStr) => {
16
+ const [y, m, d] = dateStr.split("-").map(Number);
17
+ return new Date(y, m - 1, d);
18
+ };
19
+ const formatDateStr = (date) => (0, date_fns.format)(date, "yyyy-MM-dd");
20
+ const getEventRange = (event) => {
21
+ const start = parseDateStr(event.startDate);
22
+ return {
23
+ start,
24
+ end: event.endDate ? parseDateStr(event.endDate) : start
25
+ };
26
+ };
27
+ const Calendar = ({ className, events = [], defaultMonth = /* @__PURE__ */ new Date(), today = /* @__PURE__ */ new Date(), size, selectedStartDate, selectedEndDate, onDateClick, onEventClick, enableHover = false }) => {
28
+ const { wrapper, layoutContainer, header, navContainerLeft, navContainerRight, navButton, navIcon, caption, gridHeader, weekday, gridBody, cell, cellEmpty, eventList, eventItemHeight } = require_Calendar_styles.calendar({
29
+ size,
30
+ hoverEffect: enableHover
31
+ });
32
+ const [currentMonth, setCurrentMonth] = (0, react.useState)(defaultMonth);
33
+ const totalDays = (0, date_fns.getDaysInMonth)(currentMonth);
34
+ const startDayIndex = (0, date_fns.getDay)((0, date_fns.startOfMonth)(currentMonth));
35
+ const weekDays = [
36
+ "일",
37
+ "월",
38
+ "화",
39
+ "수",
40
+ "목",
41
+ "금",
42
+ "토"
43
+ ];
44
+ const handlePrevMonth = () => setCurrentMonth((prev) => (0, date_fns.subMonths)(prev, 1));
45
+ const handleNextMonth = () => setCurrentMonth((prev) => (0, date_fns.addMonths)(prev, 1));
46
+ const eventsByDate = (0, react.useMemo)(() => {
47
+ const map = /* @__PURE__ */ new Map();
48
+ const mStart = (0, date_fns.startOfMonth)(currentMonth);
49
+ const mEnd = (0, date_fns.endOfMonth)(currentMonth);
50
+ const relevantEvents = events.filter((event) => {
51
+ const { start, end } = getEventRange(event);
52
+ return start <= mEnd && end >= mStart;
53
+ });
54
+ for (const event of relevantEvents) {
55
+ const { start, end } = getEventRange(event);
56
+ let d = start < mStart ? mStart : start;
57
+ const eventEndDate = end > mEnd ? mEnd : end;
58
+ while (d <= eventEndDate) {
59
+ const dateKey = formatDateStr(d);
60
+ const dailyEvents = map.get(dateKey) ?? [];
61
+ map.set(dateKey, [...dailyEvents, event]);
62
+ d = (0, date_fns.addDays)(d, 1);
63
+ }
64
+ }
65
+ return map;
66
+ }, [currentMonth, events]);
67
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Box.Box, {
68
+ className: wrapper({ className }),
69
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Box.Box, {
70
+ className: layoutContainer(),
71
+ children: [
72
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Grid.Grid, {
73
+ columns: 7,
74
+ className: header(),
75
+ children: [
76
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Flex.Flex, {
77
+ className: navContainerLeft(),
78
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
79
+ onClick: handlePrevMonth,
80
+ className: navButton(),
81
+ type: "button",
82
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_causw_icons.ChevronLeft, { className: navIcon() })
83
+ })
84
+ }),
85
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Box.Box, {
86
+ className: "col-span-5 flex items-center justify-center",
87
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
88
+ className: caption(),
89
+ children: (0, date_fns.format)(currentMonth, "yyyy년 M월", { locale: date_fns_locale.ko })
90
+ })
91
+ }),
92
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Flex.Flex, {
93
+ className: navContainerRight(),
94
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
95
+ onClick: handleNextMonth,
96
+ className: navButton(),
97
+ type: "button",
98
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_causw_icons.ChevronRight, { className: navIcon() })
99
+ })
100
+ })
101
+ ]
102
+ }),
103
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Grid.Grid, {
104
+ columns: 7,
105
+ className: gridHeader(),
106
+ children: weekDays.map((day) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Flex.Flex, {
107
+ justify: "center",
108
+ align: "center",
109
+ className: weekday(),
110
+ children: day
111
+ }, day))
112
+ }),
113
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Grid.Grid, {
114
+ columns: 7,
115
+ className: gridBody(),
116
+ children: [Array.from({ length: startDayIndex }).map((_, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Box.Box, { className: cellEmpty() }, `empty-${i}`)), Array.from({ length: totalDays }).map((_, i) => {
117
+ const day = i + 1;
118
+ const currentDate = new Date(currentMonth.getFullYear(), currentMonth.getMonth(), day);
119
+ const dateKey = formatDateStr(currentDate);
120
+ const daysEvents = eventsByDate.get(dateKey) || [];
121
+ const isToday = (0, date_fns.isSameDay)(currentDate, today);
122
+ const isStart = selectedStartDate && (0, date_fns.isSameDay)(currentDate, selectedStartDate);
123
+ const isEnd = selectedEndDate && (0, date_fns.isSameDay)(currentDate, selectedEndDate);
124
+ const isBetween = selectedStartDate && selectedEndDate && (0, date_fns.isWithinInterval)(currentDate, {
125
+ start: selectedStartDate,
126
+ end: selectedEndDate
127
+ }) && !isStart && !isEnd;
128
+ let selectionState = "none";
129
+ if (isStart) selectionState = "selected";
130
+ else if (isEnd) selectionState = "selected";
131
+ else if (isBetween) selectionState = "range";
132
+ else if (isToday) selectionState = "today";
133
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Flex.Flex, {
134
+ direction: "column",
135
+ align: "center",
136
+ justify: "start",
137
+ className: cell(),
138
+ onClick: () => onDateClick?.(currentDate),
139
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
140
+ className: require_Calendar_styles.calendar({ selectionState }).dayNumber(),
141
+ children: day
142
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Flex.Flex, {
143
+ className: eventList(),
144
+ children: daysEvents.map((ev, idx) => {
145
+ const { start, end } = getEventRange(ev);
146
+ const currentDayIndex = (0, date_fns.getDay)(currentDate);
147
+ const weekStart = (0, date_fns.subDays)(currentDate, currentDayIndex);
148
+ const weekEnd = (0, date_fns.addDays)(currentDate, 6 - currentDayIndex);
149
+ const segmentStart = start < weekStart ? weekStart : start;
150
+ const segmentDuration = (0, date_fns.differenceInCalendarDays)(end > weekEnd ? weekEnd : end, segmentStart) + 1;
151
+ const isRenderCell = (0, date_fns.differenceInCalendarDays)(currentDate, segmentStart) === Math.floor((segmentDuration - 1) / 2);
152
+ const startDateKey = formatDateStr(start);
153
+ const endDateKey = formatDateStr(end);
154
+ const isStartEvent = dateKey === startDateKey;
155
+ const isEndEvent = dateKey === endDateKey;
156
+ const isSingleDay = startDateKey === endDateKey;
157
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
158
+ className: require_mergeStyles.mergeStyles([
159
+ "relative w-full",
160
+ eventItemHeight(),
161
+ require_Calendar_styles.eventBarStyles.variants[ev.type],
162
+ isSingleDay ? "mx-[2px] !w-[calc(100%-4px)] rounded-[4px]" : "",
163
+ !isSingleDay && isStartEvent ? "mr-0 ml-[2px] !w-[calc(100%-2px)] rounded-l-[4px] rounded-r-none" : "",
164
+ !isSingleDay && isEndEvent ? "mr-[2px] ml-0 !w-[calc(100%-2px)] rounded-l-none rounded-r-[4px]" : "",
165
+ !isSingleDay && !isStartEvent && !isEndEvent ? "mx-0 w-full rounded-none" : ""
166
+ ]),
167
+ onClick: (e) => {
168
+ e.stopPropagation();
169
+ onEventClick?.(ev);
170
+ },
171
+ children: isRenderCell && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
172
+ className: require_Calendar_styles.eventBarStyles.textWrapper,
173
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
174
+ className: "block w-full truncate px-1 text-center",
175
+ children: ev.title
176
+ })
177
+ })
178
+ }, `${ev.id}-${idx}`);
179
+ })
180
+ })]
181
+ }, day);
182
+ })]
183
+ })
184
+ ]
185
+ })
186
+ });
187
+ };
188
+ Calendar.displayName = "Calendar";
189
+
190
+ //#endregion
191
+ exports.Calendar = Calendar;
@@ -0,0 +1,40 @@
1
+ import { CalendarVariants, eventBarStyles } from "./Calendar.styles.cjs";
2
+ import * as react_jsx_runtime78 from "react/jsx-runtime";
3
+
4
+ //#region src/components/Calendar/Calendar.d.ts
5
+ type CalendarEvent = {
6
+ id: string | number;
7
+ title: string;
8
+ startDate: string;
9
+ endDate?: string;
10
+ type: keyof typeof eventBarStyles.variants;
11
+ };
12
+ interface CalendarProps extends CalendarVariants {
13
+ className?: string;
14
+ events?: CalendarEvent[];
15
+ defaultMonth?: Date;
16
+ today?: Date;
17
+ selectedStartDate?: Date;
18
+ selectedEndDate?: Date;
19
+ onDateClick?: (date: Date) => void;
20
+ onEventClick?: (event: CalendarEvent) => void;
21
+ enableHover?: boolean;
22
+ }
23
+ declare const Calendar: {
24
+ ({
25
+ className,
26
+ events,
27
+ defaultMonth,
28
+ today,
29
+ size,
30
+ selectedStartDate,
31
+ selectedEndDate,
32
+ onDateClick,
33
+ onEventClick,
34
+ enableHover
35
+ }: CalendarProps): react_jsx_runtime78.JSX.Element;
36
+ displayName: string;
37
+ };
38
+ //#endregion
39
+ export { Calendar, CalendarEvent, CalendarProps };
40
+ //# sourceMappingURL=Calendar.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Calendar.d.cts","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"}
@@ -0,0 +1,40 @@
1
+ import { CalendarVariants, eventBarStyles } from "./Calendar.styles.mjs";
2
+ import * as react_jsx_runtime76 from "react/jsx-runtime";
3
+
4
+ //#region src/components/Calendar/Calendar.d.ts
5
+ type CalendarEvent = {
6
+ id: string | number;
7
+ title: string;
8
+ startDate: string;
9
+ endDate?: string;
10
+ type: keyof typeof eventBarStyles.variants;
11
+ };
12
+ interface CalendarProps extends CalendarVariants {
13
+ className?: string;
14
+ events?: CalendarEvent[];
15
+ defaultMonth?: Date;
16
+ today?: Date;
17
+ selectedStartDate?: Date;
18
+ selectedEndDate?: Date;
19
+ onDateClick?: (date: Date) => void;
20
+ onEventClick?: (event: CalendarEvent) => void;
21
+ enableHover?: boolean;
22
+ }
23
+ declare const Calendar: {
24
+ ({
25
+ className,
26
+ events,
27
+ defaultMonth,
28
+ today,
29
+ size,
30
+ selectedStartDate,
31
+ selectedEndDate,
32
+ onDateClick,
33
+ onEventClick,
34
+ enableHover
35
+ }: CalendarProps): react_jsx_runtime76.JSX.Element;
36
+ displayName: string;
37
+ };
38
+ //#endregion
39
+ export { Calendar, CalendarEvent, CalendarProps };
40
+ //# sourceMappingURL=Calendar.d.mts.map
@@ -0,0 +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"}
@@ -0,0 +1,190 @@
1
+ import { mergeStyles } from "../../utils/mergeStyles/mergeStyles.mjs";
2
+ import { Box } from "../Box/Box.mjs";
3
+ import { Flex } from "../Flex/Flex.mjs";
4
+ import { Grid } from "../Grid/Grid.mjs";
5
+ import { calendar, eventBarStyles } from "./Calendar.styles.mjs";
6
+ import React, { useMemo, useState } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { ChevronLeft, ChevronRight } from "@causw/icons";
9
+ import { addDays, addMonths, differenceInCalendarDays, endOfMonth, format, getDay, getDaysInMonth, isSameDay, isWithinInterval, startOfMonth, subDays, subMonths } from "date-fns";
10
+ import { ko } from "date-fns/locale";
11
+
12
+ //#region src/components/Calendar/Calendar.tsx
13
+ const parseDateStr = (dateStr) => {
14
+ const [y, m, d] = dateStr.split("-").map(Number);
15
+ return new Date(y, m - 1, d);
16
+ };
17
+ const formatDateStr = (date) => format(date, "yyyy-MM-dd");
18
+ const getEventRange = (event) => {
19
+ const start = parseDateStr(event.startDate);
20
+ return {
21
+ start,
22
+ end: event.endDate ? parseDateStr(event.endDate) : start
23
+ };
24
+ };
25
+ const Calendar = ({ className, events = [], defaultMonth = /* @__PURE__ */ new Date(), today = /* @__PURE__ */ new Date(), size, selectedStartDate, selectedEndDate, onDateClick, onEventClick, enableHover = false }) => {
26
+ const { wrapper, layoutContainer, header, navContainerLeft, navContainerRight, navButton, navIcon, caption, gridHeader, weekday, gridBody, cell, cellEmpty, eventList, eventItemHeight } = calendar({
27
+ size,
28
+ hoverEffect: enableHover
29
+ });
30
+ const [currentMonth, setCurrentMonth] = useState(defaultMonth);
31
+ const totalDays = getDaysInMonth(currentMonth);
32
+ const startDayIndex = getDay(startOfMonth(currentMonth));
33
+ const weekDays = [
34
+ "일",
35
+ "월",
36
+ "화",
37
+ "수",
38
+ "목",
39
+ "금",
40
+ "토"
41
+ ];
42
+ const handlePrevMonth = () => setCurrentMonth((prev) => subMonths(prev, 1));
43
+ const handleNextMonth = () => setCurrentMonth((prev) => addMonths(prev, 1));
44
+ const eventsByDate = useMemo(() => {
45
+ const map = /* @__PURE__ */ new Map();
46
+ const mStart = startOfMonth(currentMonth);
47
+ const mEnd = endOfMonth(currentMonth);
48
+ const relevantEvents = events.filter((event) => {
49
+ const { start, end } = getEventRange(event);
50
+ return start <= mEnd && end >= mStart;
51
+ });
52
+ for (const event of relevantEvents) {
53
+ const { start, end } = getEventRange(event);
54
+ let d = start < mStart ? mStart : start;
55
+ const eventEndDate = end > mEnd ? mEnd : end;
56
+ while (d <= eventEndDate) {
57
+ const dateKey = formatDateStr(d);
58
+ const dailyEvents = map.get(dateKey) ?? [];
59
+ map.set(dateKey, [...dailyEvents, event]);
60
+ d = addDays(d, 1);
61
+ }
62
+ }
63
+ return map;
64
+ }, [currentMonth, events]);
65
+ return /* @__PURE__ */ jsx(Box, {
66
+ className: wrapper({ className }),
67
+ children: /* @__PURE__ */ jsxs(Box, {
68
+ className: layoutContainer(),
69
+ children: [
70
+ /* @__PURE__ */ jsxs(Grid, {
71
+ columns: 7,
72
+ className: header(),
73
+ children: [
74
+ /* @__PURE__ */ jsx(Flex, {
75
+ className: navContainerLeft(),
76
+ children: /* @__PURE__ */ jsx("button", {
77
+ onClick: handlePrevMonth,
78
+ className: navButton(),
79
+ type: "button",
80
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: navIcon() })
81
+ })
82
+ }),
83
+ /* @__PURE__ */ jsx(Box, {
84
+ className: "col-span-5 flex items-center justify-center",
85
+ children: /* @__PURE__ */ jsx("span", {
86
+ className: caption(),
87
+ children: format(currentMonth, "yyyy년 M월", { locale: ko })
88
+ })
89
+ }),
90
+ /* @__PURE__ */ jsx(Flex, {
91
+ className: navContainerRight(),
92
+ children: /* @__PURE__ */ jsx("button", {
93
+ onClick: handleNextMonth,
94
+ className: navButton(),
95
+ type: "button",
96
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: navIcon() })
97
+ })
98
+ })
99
+ ]
100
+ }),
101
+ /* @__PURE__ */ jsx(Grid, {
102
+ columns: 7,
103
+ className: gridHeader(),
104
+ children: weekDays.map((day) => /* @__PURE__ */ jsx(Flex, {
105
+ justify: "center",
106
+ align: "center",
107
+ className: weekday(),
108
+ children: day
109
+ }, day))
110
+ }),
111
+ /* @__PURE__ */ jsxs(Grid, {
112
+ columns: 7,
113
+ className: gridBody(),
114
+ children: [Array.from({ length: startDayIndex }).map((_, i) => /* @__PURE__ */ jsx(Box, { className: cellEmpty() }, `empty-${i}`)), Array.from({ length: totalDays }).map((_, i) => {
115
+ const day = i + 1;
116
+ const currentDate = new Date(currentMonth.getFullYear(), currentMonth.getMonth(), day);
117
+ const dateKey = formatDateStr(currentDate);
118
+ const daysEvents = eventsByDate.get(dateKey) || [];
119
+ const isToday = isSameDay(currentDate, today);
120
+ const isStart = selectedStartDate && isSameDay(currentDate, selectedStartDate);
121
+ const isEnd = selectedEndDate && isSameDay(currentDate, selectedEndDate);
122
+ const isBetween = selectedStartDate && selectedEndDate && isWithinInterval(currentDate, {
123
+ start: selectedStartDate,
124
+ end: selectedEndDate
125
+ }) && !isStart && !isEnd;
126
+ let selectionState = "none";
127
+ if (isStart) selectionState = "selected";
128
+ else if (isEnd) selectionState = "selected";
129
+ else if (isBetween) selectionState = "range";
130
+ else if (isToday) selectionState = "today";
131
+ return /* @__PURE__ */ jsxs(Flex, {
132
+ direction: "column",
133
+ align: "center",
134
+ justify: "start",
135
+ className: cell(),
136
+ onClick: () => onDateClick?.(currentDate),
137
+ children: [/* @__PURE__ */ jsx("span", {
138
+ className: calendar({ selectionState }).dayNumber(),
139
+ children: day
140
+ }), /* @__PURE__ */ jsx(Flex, {
141
+ className: eventList(),
142
+ children: daysEvents.map((ev, idx) => {
143
+ const { start, end } = getEventRange(ev);
144
+ const currentDayIndex = getDay(currentDate);
145
+ const weekStart = subDays(currentDate, currentDayIndex);
146
+ const weekEnd = addDays(currentDate, 6 - currentDayIndex);
147
+ const segmentStart = start < weekStart ? weekStart : start;
148
+ const segmentDuration = differenceInCalendarDays(end > weekEnd ? weekEnd : end, segmentStart) + 1;
149
+ const isRenderCell = differenceInCalendarDays(currentDate, segmentStart) === Math.floor((segmentDuration - 1) / 2);
150
+ const startDateKey = formatDateStr(start);
151
+ const endDateKey = formatDateStr(end);
152
+ const isStartEvent = dateKey === startDateKey;
153
+ const isEndEvent = dateKey === endDateKey;
154
+ const isSingleDay = startDateKey === endDateKey;
155
+ return /* @__PURE__ */ jsx("div", {
156
+ className: mergeStyles([
157
+ "relative w-full",
158
+ eventItemHeight(),
159
+ eventBarStyles.variants[ev.type],
160
+ isSingleDay ? "mx-[2px] !w-[calc(100%-4px)] rounded-[4px]" : "",
161
+ !isSingleDay && isStartEvent ? "mr-0 ml-[2px] !w-[calc(100%-2px)] rounded-l-[4px] rounded-r-none" : "",
162
+ !isSingleDay && isEndEvent ? "mr-[2px] ml-0 !w-[calc(100%-2px)] rounded-l-none rounded-r-[4px]" : "",
163
+ !isSingleDay && !isStartEvent && !isEndEvent ? "mx-0 w-full rounded-none" : ""
164
+ ]),
165
+ onClick: (e) => {
166
+ e.stopPropagation();
167
+ onEventClick?.(ev);
168
+ },
169
+ children: isRenderCell && /* @__PURE__ */ jsx("div", {
170
+ className: eventBarStyles.textWrapper,
171
+ children: /* @__PURE__ */ jsx("span", {
172
+ className: "block w-full truncate px-1 text-center",
173
+ children: ev.title
174
+ })
175
+ })
176
+ }, `${ev.id}-${idx}`);
177
+ })
178
+ })]
179
+ }, day);
180
+ })]
181
+ })
182
+ ]
183
+ })
184
+ });
185
+ };
186
+ Calendar.displayName = "Calendar";
187
+
188
+ //#endregion
189
+ export { Calendar };
190
+ //# sourceMappingURL=Calendar.mjs.map
@@ -0,0 +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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"}
@@ -0,0 +1,121 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ let tailwind_variants = require("tailwind-variants");
3
+
4
+ //#region src/components/Calendar/Calendar.styles.ts
5
+ const SPACING = {
6
+ HEADER_MB_SM: "mb-[17px]",
7
+ HEADER_MB_MD: "mb-[23px]",
8
+ GRID_MT_SM: "mt-[16px]",
9
+ GRID_MT_MD: "mt-[26px]"
10
+ };
11
+ const calendar = (0, tailwind_variants.tv)({
12
+ slots: {
13
+ wrapper: [
14
+ "bg-white rounded-[20px] shadow-sm border border-gray-100 flex flex-col items-center gap-2",
15
+ "w-full min-w-[328px] max-w-[804px]",
16
+ "py-4 px-2 md:py-10"
17
+ ],
18
+ layoutContainer: "w-full",
19
+ header: `w-full grid grid-cols-7 items-center gap-x-0 ${SPACING.HEADER_MB_SM} md:${SPACING.HEADER_MB_MD}`,
20
+ navContainerLeft: "flex items-center justify-center w-full",
21
+ navContainerRight: "flex items-center justify-center w-full text-gray-400",
22
+ navButton: "flex items-center justify-center bg-white border border-gray-200 rounded-[8px] hover:bg-gray-50 hover:text-gray-700 cursor-pointer w-[26px] h-[26px] md:h-[29px]",
23
+ navIcon: "w-[6px] h-[10px] text-gray-400",
24
+ caption: "text-[#364153] text-[16px] font-bold leading-[1.6] tracking-[-0.02em] select-none",
25
+ gridHeader: "w-full mb-0 gap-x-0",
26
+ weekday: "h-[44px] flex items-center justify-center text-gray-400 text-[14px] font-normal leading-[1.6] tracking-[-0.02em] select-none",
27
+ gridBody: `w-full gap-y-4 gap-x-0 ${SPACING.GRID_MT_SM} md:${SPACING.GRID_MT_MD}`,
28
+ cell: "relative group gap-1 min-h-[52px] md:min-h-[56px] cursor-pointer rounded-lg transition-colors",
29
+ cellEmpty: "min-h-[52px] md:min-h-[56px]",
30
+ dayNumber: "w-7 h-7 flex items-center justify-center rounded-full text-[15px] font-semibold leading-[1.6] tracking-[-0.02em] z-10 select-none transition-colors",
31
+ eventList: [
32
+ "w-full flex flex-col gap-1",
33
+ "max-h-[88px] overflow-y-auto",
34
+ "[&::-webkit-scrollbar]:hidden",
35
+ "[-ms-overflow-style:none]",
36
+ "[scrollbar-width:none]"
37
+ ],
38
+ eventItemHeight: "min-h-[20px] h-auto flex-shrink-0 cursor-pointer"
39
+ },
40
+ variants: {
41
+ size: {
42
+ sm: {
43
+ wrapper: "!w-[328px] !max-w-none !min-w-0 !py-4 !px-2",
44
+ layoutContainer: "!w-[312px]",
45
+ header: `!${SPACING.HEADER_MB_SM}`,
46
+ gridBody: `!${SPACING.GRID_MT_SM}`,
47
+ navButton: "!w-[26px] !h-[26px]",
48
+ cell: "!min-h-[52px]",
49
+ cellEmpty: "!min-h-[52px]",
50
+ eventItemHeight: "!min-h-[20px]",
51
+ navContainerLeft: "!justify-center !translate-x-0",
52
+ navContainerRight: "!justify-center !translate-x-0"
53
+ },
54
+ md: {
55
+ wrapper: "!w-[412px] !max-w-none !min-w-0 !py-10 !px-2",
56
+ layoutContainer: "!w-[396px]",
57
+ navContainerLeft: "justify-end translate-x-[50%] z-20",
58
+ navContainerRight: "justify-start -translate-x-[50%] z-20",
59
+ header: `!${SPACING.HEADER_MB_MD}`,
60
+ gridBody: `!${SPACING.GRID_MT_MD}`,
61
+ navButton: "!w-[26px] !h-[29px]",
62
+ cell: "!min-h-[56px]",
63
+ cellEmpty: "!min-h-[56px]",
64
+ eventItemHeight: "!min-h-[24px]"
65
+ },
66
+ lg: {
67
+ wrapper: "!w-[804px] !max-w-none !min-w-0 !py-10 !px-2",
68
+ layoutContainer: "!w-[788px]",
69
+ navContainerLeft: "!justify-center !translate-x-0",
70
+ navContainerRight: "!justify-center !translate-x-0",
71
+ header: `!${SPACING.HEADER_MB_MD}`,
72
+ gridBody: `!${SPACING.GRID_MT_MD}`,
73
+ navButton: "!w-[26px] !h-[29px]",
74
+ cell: "!min-h-[56px]",
75
+ cellEmpty: "!min-h-[56px]",
76
+ eventItemHeight: "!min-h-[24px]"
77
+ }
78
+ },
79
+ selectionState: {
80
+ none: { dayNumber: "text-[#364153]" },
81
+ today: { dayNumber: "bg-gray-800 text-white shadow-sm" },
82
+ selected: { dayNumber: "bg-blue-600 text-white shadow-sm" },
83
+ range: { dayNumber: "bg-blue-100 text-blue-600 rounded-none w-full" },
84
+ rangeStart: {
85
+ dayNumber: "bg-blue-600 text-white shadow-sm rounded-r-none pl-1",
86
+ cell: "bg-blue-50/50 rounded-r-none"
87
+ },
88
+ rangeEnd: {
89
+ dayNumber: "bg-blue-600 text-white shadow-sm rounded-l-none pr-1",
90
+ cell: "bg-blue-50/50 rounded-l-none"
91
+ }
92
+ },
93
+ hoverEffect: {
94
+ true: { cell: "hover:bg-gray-50" },
95
+ false: {}
96
+ }
97
+ },
98
+ defaultVariants: {
99
+ selectionState: "none",
100
+ hoverEffect: false
101
+ }
102
+ });
103
+ const eventBarStyles = {
104
+ textWrapper: `
105
+ absolute top-0 left-0 w-full h-full
106
+ flex items-center justify-center
107
+ text-[11px] font-medium tracking-[-0.02em] leading-tight
108
+ select-none pointer-events-none
109
+ z-10
110
+ whitespace-nowrap
111
+ `,
112
+ variants: {
113
+ holiday: "bg-red-100 text-red-400",
114
+ event: "bg-gray-100 text-gray-600",
115
+ important: "bg-blue-100 text-blue-600"
116
+ }
117
+ };
118
+
119
+ //#endregion
120
+ exports.calendar = calendar;
121
+ exports.eventBarStyles = eventBarStyles;