pds-dev-kit-web 2.2.202 → 2.2.203

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 (50) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/index.js +3 -2
  3. package/dist/src/common/services/i18n/resources/en.json +36 -0
  4. package/dist/src/common/services/i18n/resources/es.json +36 -0
  5. package/dist/src/common/services/i18n/resources/fil.json +36 -0
  6. package/dist/src/common/services/i18n/resources/index.d.ts +252 -0
  7. package/dist/src/common/services/i18n/resources/ja.json +36 -0
  8. package/dist/src/common/services/i18n/resources/ko.json +36 -0
  9. package/dist/src/common/services/i18n/resources/zh-cn.json +36 -0
  10. package/dist/src/common/services/i18n/resources/zh-tw.json +36 -0
  11. package/dist/src/common/utils/dateHelper.d.ts +3 -0
  12. package/dist/src/common/utils/dateHelper.js +37 -0
  13. package/dist/src/desktop/components/Calendar/AllDaySchedulesSection.d.ts +12 -0
  14. package/dist/src/desktop/components/Calendar/AllDaySchedulesSection.js +134 -0
  15. package/dist/src/desktop/components/Calendar/Calendar.d.ts +4 -0
  16. package/dist/src/desktop/components/Calendar/Calendar.js +399 -0
  17. package/dist/src/desktop/components/Calendar/CalendarContext.d.ts +51 -0
  18. package/dist/src/desktop/components/Calendar/CalendarContext.js +76 -0
  19. package/dist/src/desktop/components/Calendar/CurrentTimeIndicator.d.ts +7 -0
  20. package/dist/src/desktop/components/Calendar/CurrentTimeIndicator.js +48 -0
  21. package/dist/src/desktop/components/Calendar/DailyView.d.ts +2 -0
  22. package/dist/src/desktop/components/Calendar/DailyView.js +91 -0
  23. package/dist/src/desktop/components/Calendar/MonthlyView.d.ts +28 -0
  24. package/dist/src/desktop/components/Calendar/MonthlyView.js +381 -0
  25. package/dist/src/desktop/components/Calendar/MultiWeekSchedulesLayer.d.ts +21 -0
  26. package/dist/src/desktop/components/Calendar/MultiWeekSchedulesLayer.js +204 -0
  27. package/dist/src/desktop/components/Calendar/ScheduleItem.d.ts +25 -0
  28. package/dist/src/desktop/components/Calendar/ScheduleItem.js +56 -0
  29. package/dist/src/desktop/components/Calendar/TimeBasedScheduleItem.d.ts +12 -0
  30. package/dist/src/desktop/components/Calendar/TimeBasedScheduleItem.js +184 -0
  31. package/dist/src/desktop/components/Calendar/WeeklyView.d.ts +6 -0
  32. package/dist/src/desktop/components/Calendar/WeeklyView.js +114 -0
  33. package/dist/src/desktop/components/Calendar/YearlyView.d.ts +13 -0
  34. package/dist/src/desktop/components/Calendar/YearlyView.js +76 -0
  35. package/dist/src/desktop/components/Calendar/calendarUtils.d.ts +24 -0
  36. package/dist/src/desktop/components/Calendar/calendarUtils.js +87 -0
  37. package/dist/src/desktop/components/Calendar/constants.d.ts +1 -0
  38. package/dist/src/desktop/components/Calendar/constants.js +31 -0
  39. package/dist/src/desktop/components/Calendar/index.d.ts +14 -0
  40. package/dist/src/desktop/components/Calendar/index.js +42 -0
  41. package/dist/src/desktop/components/Calendar/timeFormatUtils.d.ts +16 -0
  42. package/dist/src/desktop/components/Calendar/timeFormatUtils.js +45 -0
  43. package/dist/src/desktop/components/Calendar/types.d.ts +61 -0
  44. package/dist/src/desktop/components/Calendar/types.js +2 -0
  45. package/dist/src/desktop/components/index.d.ts +2 -1
  46. package/dist/src/desktop/components/index.js +3 -1
  47. package/dist/src/desktop/index.d.ts +1 -1
  48. package/dist/src/desktop/index.js +2 -1
  49. package/package.json +1 -1
  50. package/release-note.md +2 -2
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
+ return cooked;
5
+ };
6
+ var __assign = (this && this.__assign) || function () {
7
+ __assign = Object.assign || function(t) {
8
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
9
+ s = arguments[i];
10
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
11
+ t[p] = s[p];
12
+ }
13
+ return t;
14
+ };
15
+ return __assign.apply(this, arguments);
16
+ };
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
+ if (ar || !(i in from)) {
20
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
+ ar[i] = from[i];
22
+ }
23
+ }
24
+ return to.concat(ar || Array.prototype.slice.call(from));
25
+ };
26
+ var __importDefault = (this && this.__importDefault) || function (mod) {
27
+ return (mod && mod.__esModule) ? mod : { "default": mod };
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.MonthlyView = void 0;
31
+ var jsx_runtime_1 = require("react/jsx-runtime");
32
+ var react_1 = require("react");
33
+ var react_i18next_1 = require("react-i18next");
34
+ var dateHelper_1 = require("../../../common/utils/dateHelper");
35
+ var components_1 = require("../../../hybrid/components");
36
+ var styled_components_1 = __importDefault(require("styled-components"));
37
+ var TextLabel_1 = require("../TextLabel");
38
+ var CalendarContext_1 = require("./CalendarContext");
39
+ var calendarUtils_1 = require("./calendarUtils");
40
+ var MultiWeekSchedulesLayer_1 = require("./MultiWeekSchedulesLayer");
41
+ var MonthlyView = function (_a) {
42
+ var getDayTextByDate = _a.getDayTextByDate, startOfWeek = _a.startOfWeek, selectedDate = _a.selectedDate, selectedDates = _a.selectedDates, selectedSchedules = _a.selectedSchedules, dragStartDate = _a.dragStartDate, dragEndDate = _a.dragEndDate, isDragOverDate = _a.isDragOverDate, schedules = _a.schedules, getSchedulesForDate = _a.getSchedulesForDate, isToday = _a.isToday, isPastDate = _a.isPastDate, handleDateClick = _a.handleDateClick, handleScheduleClick = _a.handleScheduleClick, handleMouseUp = _a.handleMouseUp, handleDateDragOver = _a.handleDateDragOver, handleDateDragLeave = _a.handleDateDragLeave, handleDateDrop = _a.handleDateDrop, handleScheduleDragStart = _a.handleScheduleDragStart, handleScheduleDragEnd = _a.handleScheduleDragEnd, _b = _a.isDraggable, isDraggable = _b === void 0 ? false : _b, onSwitchToWeeklyView = _a.onSwitchToWeeklyView;
43
+ var t = (0, react_i18next_1.useTranslation)().t;
44
+ var renderScheduleItem = (0, CalendarContext_1.useCalendarContext)().renderScheduleItem;
45
+ var calendarCellRef = (0, react_1.useRef)(null);
46
+ var _c = (0, react_1.useState)(3), maxSchedulesPerDay = _c[0], setMaxSchedulesPerDay = _c[1];
47
+ var scheduleItemHeight = 20; // 스케줄 아이템 대략 높이
48
+ var days = (0, react_1.useMemo)(function () {
49
+ var monthDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1);
50
+ return dateHelper_1.DateHelper.getCalendarDatesForCalendar(monthDate, startOfWeek);
51
+ }, [selectedDate, startOfWeek]);
52
+ // 셀 높이 기반으로 최대 스케줄 개수 계산
53
+ var calculateMaxSchedules = (0, react_1.useCallback)(function () {
54
+ if (!calendarCellRef.current)
55
+ return;
56
+ var cellHeight = calendarCellRef.current.clientHeight;
57
+ var dateLabelHeight = 20; // 날짜 텍스트 영역
58
+ var cellPadding = 8; // 상하 패딩 (4px * 2)
59
+ var moreTextHeight = scheduleItemHeight; // "더보기" 텍스트 높이
60
+ var availableHeight = cellHeight - dateLabelHeight - cellPadding;
61
+ var maxSchedulesWithMore = Math.floor((availableHeight - moreTextHeight) / scheduleItemHeight);
62
+ // 최소 1개는 보여주되, 더보기를 고려한 개수로 설정
63
+ var calculatedMax = Math.max(1, maxSchedulesWithMore);
64
+ setMaxSchedulesPerDay(calculatedMax);
65
+ }, [scheduleItemHeight]);
66
+ // ResizeObserver로 크기 변경 감지
67
+ (0, react_1.useLayoutEffect)(function () {
68
+ if (!calendarCellRef.current)
69
+ return;
70
+ var resizeObserver = new ResizeObserver(function () {
71
+ calculateMaxSchedules();
72
+ });
73
+ resizeObserver.observe(calendarCellRef.current);
74
+ // 초기 계산
75
+ calculateMaxSchedules();
76
+ return function () {
77
+ resizeObserver.disconnect();
78
+ };
79
+ }, [calculateMaxSchedules]);
80
+ // 창 크기 변경 시에도 재계산
81
+ (0, react_1.useLayoutEffect)(function () {
82
+ var handleResize = function () {
83
+ setTimeout(calculateMaxSchedules, 0);
84
+ };
85
+ window.addEventListener('resize', handleResize);
86
+ return function () { return window.removeEventListener('resize', handleResize); };
87
+ }, [calculateMaxSchedules]);
88
+ // 다중 이벤트 계산
89
+ var getMultiWeekSchedules = (0, react_1.useMemo)(function () {
90
+ // 개선: 날짜별(row, col) -> 사용중인 row set을 관리
91
+ var rowColUsedRows = {};
92
+ var multiWeekSchedules = [];
93
+ var allSchedules = new Map();
94
+ var processedScheduleIds = new Set();
95
+ // 캘린더에 표시되는 전체 날짜 범위 계산
96
+ var calendarStart = new Date(days[0]);
97
+ var calendarEnd = new Date(days[days.length - 1]);
98
+ calendarStart.setHours(0, 0, 0, 0);
99
+ calendarEnd.setHours(0, 0, 0, 0);
100
+ days.forEach(function (date) {
101
+ var schedulesForDate = getSchedulesForDate(date);
102
+ schedulesForDate.forEach(function (schedule) {
103
+ // 이미 처리된 이벤트는 건너뛰기
104
+ if (processedScheduleIds.has(schedule.id)) {
105
+ return;
106
+ }
107
+ var scheduleStart = new Date(schedule.startDate);
108
+ var scheduleEnd = new Date(schedule.endDate);
109
+ scheduleStart.setHours(0, 0, 0, 0);
110
+ scheduleEnd.setHours(0, 0, 0, 0);
111
+ // All day 이벤트이거나 다중 날짜 이벤트인지 확인
112
+ var isAllDay = (0, calendarUtils_1.calculateIsAllDay)(new Date(schedule.startDate), new Date(schedule.endDate));
113
+ var isMultiDay = scheduleStart.getTime() !== scheduleEnd.getTime();
114
+ if (isAllDay || isMultiDay) {
115
+ // 이벤트가 현재 캘린더 범위와 교차하는지 확인
116
+ var isIntersecting = !(scheduleEnd.getTime() < calendarStart.getTime() ||
117
+ scheduleStart.getTime() > calendarEnd.getTime());
118
+ if (isIntersecting) {
119
+ allSchedules.set(schedule.id, schedule);
120
+ processedScheduleIds.add(schedule.id);
121
+ }
122
+ }
123
+ });
124
+ });
125
+ // 개선: 멀티데이 스케줄을 시작일 기준 오름차순, duration 오름차순으로 정렬
126
+ var sortedMultiDaySchedules = Array.from(allSchedules.values()).sort(function (a, b) {
127
+ var aStart = new Date(a.startDate).getTime();
128
+ var bStart = new Date(b.startDate).getTime();
129
+ if (aStart !== bStart)
130
+ return aStart - bStart;
131
+ var aDur = new Date(a.endDate).getTime() - aStart;
132
+ var bDur = new Date(b.endDate).getTime() - bStart;
133
+ return aDur - bDur;
134
+ });
135
+ // 개선: 각 멀티데이 스케줄마다, 차지하는 모든 날짜(row, col)에서 사용중인 row를 체크하여, 가장 작은 빈 row에만 할당
136
+ sortedMultiDaySchedules.forEach(function (schedule) {
137
+ var scheduleStart = new Date(schedule.startDate);
138
+ var scheduleEnd = new Date(schedule.endDate);
139
+ scheduleStart.setHours(0, 0, 0, 0);
140
+ scheduleEnd.setHours(0, 0, 0, 0);
141
+ if (scheduleStart.getTime() !== scheduleEnd.getTime()) {
142
+ // 캘린더 범위 내에서 표시할 실제 시작/끝 날짜 계산
143
+ var displayStart_1 = new Date(Math.max(scheduleStart.getTime(), calendarStart.getTime()));
144
+ var displayEnd_1 = new Date(Math.min(scheduleEnd.getTime(), calendarEnd.getTime()));
145
+ // 캘린더 그리드에서 시작과 끝 위치 찾기
146
+ var startIndex = days.findIndex(function (date) {
147
+ var d = new Date(date);
148
+ d.setHours(0, 0, 0, 0);
149
+ return d.getTime() === displayStart_1.getTime();
150
+ });
151
+ var endIndex = days.findIndex(function (date) {
152
+ var d = new Date(date);
153
+ d.setHours(0, 0, 0, 0);
154
+ return d.getTime() === displayEnd_1.getTime();
155
+ });
156
+ if (startIndex !== -1 && endIndex !== -1) {
157
+ var startRow = Math.floor(startIndex / 7) + 2;
158
+ var endRow = Math.floor(endIndex / 7) + 2;
159
+ var _loop_1 = function (row) {
160
+ var isFirstRow = row === startRow;
161
+ var isLastRow = row === endRow;
162
+ var segmentStartCol = void 0;
163
+ var segmentEndCol = void 0;
164
+ if (isFirstRow && isLastRow) {
165
+ segmentStartCol = (startIndex % 7) + 1;
166
+ segmentEndCol = (endIndex % 7) + 1;
167
+ }
168
+ else if (isFirstRow) {
169
+ segmentStartCol = (startIndex % 7) + 1;
170
+ segmentEndCol = 7;
171
+ }
172
+ else if (isLastRow) {
173
+ segmentStartCol = 1;
174
+ segmentEndCol = (endIndex % 7) + 1;
175
+ }
176
+ else {
177
+ segmentStartCol = 1;
178
+ segmentEndCol = 7;
179
+ }
180
+ // 개선: 이 스케줄이 차지하는 날짜(row, col) 전체에서 사용중인 row set을 합침
181
+ var usedRows = new Set();
182
+ for (var col = segmentStartCol; col <= segmentEndCol; col += 1) {
183
+ var key = "".concat(row, "_").concat(col);
184
+ if (rowColUsedRows[key]) {
185
+ rowColUsedRows[key].forEach(function (r) { return usedRows.add(r); });
186
+ }
187
+ }
188
+ // 가장 작은 빈 row를 찾음
189
+ var scheduleIndex = 0;
190
+ while (usedRows.has(scheduleIndex)) {
191
+ scheduleIndex += 1;
192
+ }
193
+ // 이 스케줄이 차지하는 모든 날짜(row, col)에 scheduleIndex를 기록
194
+ for (var col = segmentStartCol; col <= segmentEndCol; col += 1) {
195
+ var key = "".concat(row, "_").concat(col);
196
+ if (!rowColUsedRows[key])
197
+ rowColUsedRows[key] = new Set();
198
+ rowColUsedRows[key].add(scheduleIndex);
199
+ }
200
+ multiWeekSchedules.push({
201
+ schedule: schedule,
202
+ startRow: row,
203
+ endRow: row,
204
+ startCol: segmentStartCol,
205
+ endCol: segmentEndCol,
206
+ scheduleIndex: scheduleIndex
207
+ });
208
+ };
209
+ for (var row = startRow; row <= endRow; row += 1) {
210
+ _loop_1(row);
211
+ }
212
+ }
213
+ }
214
+ });
215
+ return multiWeekSchedules;
216
+ }, [days, getSchedulesForDate, schedules]);
217
+ var getCalendarCellData = function (date, index) {
218
+ var daySchedules = getSchedulesForDate(date);
219
+ var row = Math.floor(index / 7) + 2; // 헤더 고려
220
+ var col = (index % 7) + 1;
221
+ // 멀티데이 스케줄: 이 날짜(row, col)에 걸쳐있는 multiWeekSchedules만 추출
222
+ var multiDayForCell = getMultiWeekSchedules.filter(function (multi) {
223
+ return (row >= multi.startRow &&
224
+ row <= multi.endRow &&
225
+ ((multi.startRow === multi.endRow && col >= multi.startCol && col <= multi.endCol) ||
226
+ (multi.startRow !== multi.endRow &&
227
+ ((row === multi.startRow && col >= multi.startCol) ||
228
+ (row === multi.endRow && col <= multi.endCol) ||
229
+ (row !== multi.startRow && row !== multi.endRow)))));
230
+ });
231
+ // rowIndex별로 그룹핑
232
+ var multiDayByRow = {};
233
+ multiDayForCell.forEach(function (multi) {
234
+ if (!multiDayByRow[multi.scheduleIndex])
235
+ multiDayByRow[multi.scheduleIndex] = [];
236
+ multiDayByRow[multi.scheduleIndex].push(multi);
237
+ });
238
+ // 단일 날짜 스케줄
239
+ var visibleSchedules = daySchedules.filter(function (schedule) {
240
+ var scheduleStart = new Date(schedule.startDate);
241
+ var scheduleEnd = new Date(schedule.endDate);
242
+ var checkDate = new Date(date);
243
+ scheduleStart.setHours(0, 0, 0, 0);
244
+ scheduleEnd.setHours(0, 0, 0, 0);
245
+ checkDate.setHours(0, 0, 0, 0);
246
+ if (scheduleStart.getTime() !== scheduleEnd.getTime()) {
247
+ return false;
248
+ }
249
+ return scheduleStart.getTime() === checkDate.getTime();
250
+ });
251
+ visibleSchedules.sort(function (a, b) {
252
+ var timeA = new Date(a.startDate).getTime();
253
+ var timeB = new Date(b.startDate).getTime();
254
+ return timeA - timeB;
255
+ });
256
+ // 멀티데이 row를 피해서 단일 스케줄 배치
257
+ var usedRows = new Set(Object.keys(multiDayByRow).map(Number));
258
+ var singleByRow = {};
259
+ var tryRow = 0;
260
+ for (var i = 0; i < visibleSchedules.length; i += 1) {
261
+ while (usedRows.has(tryRow)) {
262
+ tryRow += 1;
263
+ }
264
+ singleByRow[tryRow] = visibleSchedules[i];
265
+ usedRows.add(tryRow);
266
+ tryRow += 1;
267
+ }
268
+ // row index 기준으로 멀티데이+단일 스케줄 합치기
269
+ var allRows = [];
270
+ var allRowIndices = Array.from(new Set(__spreadArray(__spreadArray([], Object.keys(multiDayByRow).map(Number), true), Object.keys(singleByRow).map(Number), true))).sort(function (a, b) { return a - b; });
271
+ allRowIndices.forEach(function (rowIdx) {
272
+ var items = [];
273
+ if (multiDayByRow[rowIdx]) {
274
+ multiDayByRow[rowIdx].forEach(function (multi) { return items.push({ type: 'multi', data: multi }); });
275
+ }
276
+ if (singleByRow[rowIdx]) {
277
+ items.push({ type: 'single', data: singleByRow[rowIdx] });
278
+ }
279
+ allRows.push({ rowIndex: rowIdx, items: items });
280
+ });
281
+ var maxRows = maxSchedulesPerDay;
282
+ var visibleRows = allRows.filter(function (r) {
283
+ return r.rowIndex < maxRows;
284
+ });
285
+ var hiddenRows = allRows.filter(function (r) { return r.rowIndex >= maxRows; });
286
+ var hiddenSchedulesCount = hiddenRows.reduce(function (acc, r) { return acc + r.items.length; }, 0);
287
+ return { visibleRows: visibleRows, maxRows: maxRows, hiddenRows: hiddenRows, hiddenSchedulesCount: hiddenSchedulesCount };
288
+ };
289
+ // 시작 요일에 따라 정렬된 요일 헤더 생성
290
+ var orderedDayTexts = (function () {
291
+ var weekDates = [];
292
+ var today = new Date();
293
+ var startIndex = startOfWeek === 'monday' ? 1 : 0;
294
+ var firstDayOfWeek = new Date(today);
295
+ firstDayOfWeek.setDate(today.getDate() - ((today.getDay() - startIndex + 7) % 7));
296
+ for (var i = 0; i < 7; i += 1) {
297
+ var date = new Date(firstDayOfWeek);
298
+ date.setDate(firstDayOfWeek.getDate() + i);
299
+ weekDates.push(getDayTextByDate(date));
300
+ }
301
+ return weekDates;
302
+ })();
303
+ return ((0, jsx_runtime_1.jsxs)(S_MonthlyGrid, __assign({ "data-calendar-grid": true }, { children: [orderedDayTexts.map(function (day, index) { return ((0, jsx_runtime_1.jsx)(S_DayHeader, { children: (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: "caption2Bold", textAlign: "center", colorTheme: "sysTextSecondary", text: day }) }, "".concat(day, "-").concat(index))); }), days.map(function (date, index) {
304
+ var _a = getCalendarCellData(date, index), visibleRows = _a.visibleRows, maxRows = _a.maxRows, hiddenSchedulesCount = _a.hiddenSchedulesCount;
305
+ var isCellSelected = selectedDates.some(function (selectedDate) { return selectedDate.toDateString() === date.toDateString(); }) ||
306
+ !!(dragStartDate &&
307
+ dragEndDate &&
308
+ date.getTime() >= Math.min(dragStartDate.getTime(), dragEndDate.getTime()) &&
309
+ date.getTime() <= Math.max(dragStartDate.getTime(), dragEndDate.getTime()));
310
+ return ((0, jsx_runtime_1.jsxs)(S_CalendarCell, __assign({ ref: date.getMonth() === selectedDate.getMonth() && date.getDate() === 1
311
+ ? calendarCellRef
312
+ : undefined, "data-calendar-cell": true, "$isCurrentMonth": date.getMonth() === selectedDate.getMonth(), "$isToday": isToday(date), "$isSelected": isCellSelected, "$isPast": isPastDate(date), "$isDragOver": (isDragOverDate === null || isDragOverDate === void 0 ? void 0 : isDragOverDate.toDateString()) === date.toDateString(), onClick: function (e) { return handleDateClick(date, e); }, onMouseUp: handleMouseUp, onDragOver: function (e) { return handleDateDragOver(date, e); }, onDragLeave: handleDateDragLeave, onDrop: function (e) { return handleDateDrop(date, e); } }, { children: [(0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: isToday(date) ? 'caption2Bold' : 'caption2Regular', textAlign: "center", colorTheme: isToday(date) ? 'sysTextBrandPrimary' : 'sysTextSecondary', text: date.getDate().toString() }), (0, jsx_runtime_1.jsxs)(S_SchedulesContainer, __assign({ "$multiWeekSchedulesCount": visibleRows.length, id: "schedule container" }, { children: [visibleRows.map(function (_a) {
313
+ var rowIndex = _a.rowIndex, items = _a.items;
314
+ return items.map(function (item) {
315
+ var schedule = item.data;
316
+ if (item.type === 'multi')
317
+ return;
318
+ // Schedule 타입인지 확인
319
+ if (!('id' in schedule &&
320
+ 'title' in schedule &&
321
+ 'startDate' in schedule &&
322
+ 'endDate' in schedule)) {
323
+ return null;
324
+ }
325
+ return ((0, jsx_runtime_1.jsx)(S_VisibleRowContainer, __assign({ "$top": rowIndex * scheduleItemHeight }, { children: renderScheduleItem(schedule, {
326
+ onDragStart: function (e) { return handleScheduleDragStart === null || handleScheduleDragStart === void 0 ? void 0 : handleScheduleDragStart(schedule, e); },
327
+ onDragEnd: function () { return handleScheduleDragEnd === null || handleScheduleDragEnd === void 0 ? void 0 : handleScheduleDragEnd(); }
328
+ }) }), schedule.id));
329
+ });
330
+ }), hiddenSchedulesCount > 0 && ((0, jsx_runtime_1.jsxs)(S_MoreSchedulesButton, __assign({ "$top": maxRows * scheduleItemHeight + 6, onClick: function (e) {
331
+ e.stopPropagation();
332
+ onSwitchToWeeklyView === null || onSwitchToWeeklyView === void 0 ? void 0 : onSwitchToWeeklyView(date);
333
+ } }, { children: [(0, jsx_runtime_1.jsx)(components_1.Spacing, { size: "spacing_b", spacingType: "width" }), (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { text: t('str_calendar_schedule_more', { count: hiddenSchedulesCount }), styleTheme: "caption2Regular", colorTheme: "sysTextSecondary" }), (0, jsx_runtime_1.jsx)(components_1.Spacing, { size: "spacing_b", spacingType: "width" })] })))] }))] }), index));
334
+ }), (0, jsx_runtime_1.jsx)(MultiWeekSchedulesLayer_1.MultiWeekSchedulesLayer, { multiWeekSchedules: getMultiWeekSchedules, selectedSchedules: selectedSchedules, handleScheduleClick: handleScheduleClick, handleScheduleDragStart: handleScheduleDragStart, handleScheduleDragEnd: handleScheduleDragEnd, isDraggable: isDraggable, maxSchedulesPerDay: maxSchedulesPerDay })] })));
335
+ };
336
+ exports.MonthlyView = MonthlyView;
337
+ var S_MonthlyGrid = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: grid;\n gap: 0;\n grid-template-columns: repeat(7, 1fr);\n grid-template-rows: auto repeat(6, 1fr); /* \uD5E4\uB354\uB294 auto, \uB098\uBA38\uC9C0 6\uC8FC\uB294 \uB3D9\uC77C\uD55C \uB192\uC774 */\n height: 100%; /* \uC140 \uAC04\uACA9\uC744 \uC81C\uAC70\uD558\uC5EC \uC774\uBCA4\uD2B8\uAC00 \uC5F0\uACB0\uB418\uC5B4 \uBCF4\uC774\uB3C4\uB85D */\n overflow-x: hidden; /* \uADF8\uB9AC\uB4DC \uACBD\uACC4\uB97C \uB118\uB294 \uC694\uC18C\uB97C \uC228\uAE40 */\n position: relative;\n"], ["\n display: grid;\n gap: 0;\n grid-template-columns: repeat(7, 1fr);\n grid-template-rows: auto repeat(6, 1fr); /* \uD5E4\uB354\uB294 auto, \uB098\uBA38\uC9C0 6\uC8FC\uB294 \uB3D9\uC77C\uD55C \uB192\uC774 */\n height: 100%; /* \uC140 \uAC04\uACA9\uC744 \uC81C\uAC70\uD558\uC5EC \uC774\uBCA4\uD2B8\uAC00 \uC5F0\uACB0\uB418\uC5B4 \uBCF4\uC774\uB3C4\uB85D */\n overflow-x: hidden; /* \uADF8\uB9AC\uB4DC \uACBD\uACC4\uB97C \uB118\uB294 \uC694\uC18C\uB97C \uC228\uAE40 */\n position: relative;\n"])));
338
+ var S_DayHeader = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n border-bottom: 1px solid ", ";\n padding: 12px 8px;\n text-align: center;\n"], ["\n border-bottom: 1px solid ", ";\n padding: 12px 8px;\n text-align: center;\n"])), function (_a) {
339
+ var theme = _a.theme;
340
+ return theme.ui_cpnt_divider;
341
+ });
342
+ var S_CalendarCell = styled_components_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background-color: ", ";\n border-bottom: 1px solid ", ";\n border-right: 1px solid ", ";\n min-height: 80px;\n min-width: 0;\n overflow: hidden;\n padding: 4px;\n position: relative;\n transition: background-color 0.2s;\n\n &:hover {\n background-color: ", ";\n }\n\n &:nth-child(7n + 1) {\n border-left: 1px solid ", ";\n }\n\n &:nth-child(-n + 7) {\n border-top: 1px solid ", ";\n }\n"], ["\n background-color: ", ";\n border-bottom: 1px solid ", ";\n border-right: 1px solid ", ";\n min-height: 80px;\n min-width: 0;\n overflow: hidden;\n padding: 4px;\n position: relative;\n transition: background-color 0.2s;\n\n &:hover {\n background-color: ", ";\n }\n\n &:nth-child(7n + 1) {\n border-left: 1px solid ", ";\n }\n\n &:nth-child(-n + 7) {\n border-top: 1px solid ", ";\n }\n"])), function (_a) {
343
+ var $isSelected = _a.$isSelected, theme = _a.theme;
344
+ if ($isSelected)
345
+ return theme.ui_cpnt_sheet_base;
346
+ return 'transparent';
347
+ }, function (_a) {
348
+ var theme = _a.theme;
349
+ return theme.ui_cpnt_divider;
350
+ }, function (_a) {
351
+ var theme = _a.theme;
352
+ return theme.ui_cpnt_divider;
353
+ }, function (_a) {
354
+ var theme = _a.theme;
355
+ return theme.ui_cpnt_sheet_base;
356
+ }, function (_a) {
357
+ var theme = _a.theme;
358
+ return theme.ui_cpnt_divider;
359
+ }, function (_a) {
360
+ var theme = _a.theme;
361
+ return theme.ui_cpnt_divider;
362
+ });
363
+ var S_SchedulesContainer = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n display: flex;\n flex: 1;\n flex-direction: column;\n margin-top: 4px;\n max-width: 100%;\n overflow: visible;\n position: relative;\n"], ["\n display: flex;\n flex: 1;\n flex-direction: column;\n margin-top: 4px;\n max-width: 100%;\n overflow: visible;\n position: relative;\n"])));
364
+ var S_VisibleRowContainer = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n left: 0;\n position: absolute;\n right: 0;\n top: ", "px;\n"], ["\n left: 0;\n position: absolute;\n right: 0;\n top: ", "px;\n"])), function (_a) {
365
+ var $top = _a.$top;
366
+ return $top;
367
+ });
368
+ var S_MoreSchedulesButton = styled_components_1.default.button(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n align-items: center;\n background: none;\n border: none;\n border-radius: 2px;\n bottom: 10px;\n color: ", ";\n cursor: pointer;\n display: flex;\n outline: inherit;\n position: absolute;\n top: ", "px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n"], ["\n align-items: center;\n background: none;\n border: none;\n border-radius: 2px;\n bottom: 10px;\n color: ", ";\n cursor: pointer;\n display: flex;\n outline: inherit;\n position: absolute;\n top: ", "px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n"])), function (_a) {
369
+ var theme = _a.theme;
370
+ return theme.ui_cpnt_textlabel_sys_brandprimary;
371
+ }, function (_a) {
372
+ var $top = _a.$top;
373
+ return $top;
374
+ }, function (_a) {
375
+ var theme = _a.theme;
376
+ return theme.ui_cpnt_sheet_base;
377
+ }, function (_a) {
378
+ var theme = _a.theme;
379
+ return theme.ui_cpnt_sheet_base_02;
380
+ });
381
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
@@ -0,0 +1,21 @@
1
+ import type { Schedule } from './types';
2
+ import type React from 'react';
3
+ export interface MultiWeekScheduleInfo {
4
+ schedule: Schedule;
5
+ startRow: number;
6
+ endRow: number;
7
+ startCol: number;
8
+ endCol: number;
9
+ scheduleIndex: number;
10
+ }
11
+ interface MultiWeekSchedulesLayerProps {
12
+ multiWeekSchedules: MultiWeekScheduleInfo[];
13
+ selectedSchedules: Schedule[];
14
+ handleScheduleClick?: (schedule: Schedule, e?: React.MouseEvent) => void;
15
+ handleScheduleDragStart?: (schedule: Schedule, e: React.DragEvent) => void;
16
+ handleScheduleDragEnd?: () => void;
17
+ isDraggable?: boolean;
18
+ maxSchedulesPerDay?: number;
19
+ }
20
+ export declare const MultiWeekSchedulesLayer: React.FC<MultiWeekSchedulesLayerProps>;
21
+ export {};
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
+ return cooked;
5
+ };
6
+ var __assign = (this && this.__assign) || function () {
7
+ __assign = Object.assign || function(t) {
8
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
9
+ s = arguments[i];
10
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
11
+ t[p] = s[p];
12
+ }
13
+ return t;
14
+ };
15
+ return __assign.apply(this, arguments);
16
+ };
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
+ if (ar || !(i in from)) {
20
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
+ ar[i] = from[i];
22
+ }
23
+ }
24
+ return to.concat(ar || Array.prototype.slice.call(from));
25
+ };
26
+ var __importDefault = (this && this.__importDefault) || function (mod) {
27
+ return (mod && mod.__esModule) ? mod : { "default": mod };
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.MultiWeekSchedulesLayer = void 0;
31
+ var jsx_runtime_1 = require("react/jsx-runtime");
32
+ var react_1 = require("react");
33
+ var styled_components_1 = __importDefault(require("styled-components"));
34
+ var TextLabel_1 = require("../TextLabel");
35
+ var ScheduleItem_1 = require("./ScheduleItem");
36
+ var MultiWeekSchedulesLayer = function (_a) {
37
+ var multiWeekSchedules = _a.multiWeekSchedules, selectedSchedules = _a.selectedSchedules, handleScheduleClick = _a.handleScheduleClick, handleScheduleDragStart = _a.handleScheduleDragStart, handleScheduleDragEnd = _a.handleScheduleDragEnd, _b = _a.isDraggable, isDraggable = _b === void 0 ? false : _b, _c = _a.maxSchedulesPerDay, maxSchedulesPerDay = _c === void 0 ? 3 : _c;
38
+ var containerRef = (0, react_1.useRef)(null);
39
+ var _d = (0, react_1.useState)([]), cellPositions = _d[0], setCellPositions = _d[1];
40
+ var _e = (0, react_1.useState)([]), hiddenSchedules = _e[0], setHiddenSchedules = _e[1];
41
+ // 캘린더 셀들의 실제 위치를 계산하는 함수
42
+ var calculateCellPositions = (0, react_1.useCallback)(function () {
43
+ if (!containerRef.current)
44
+ return;
45
+ var gridContainer = containerRef.current.parentElement;
46
+ if (!gridContainer)
47
+ return;
48
+ // 헤더를 제외한 캘린더 셀들을 찾기
49
+ var calendarCells = gridContainer.querySelectorAll('[data-calendar-cell]');
50
+ var positions = [];
51
+ // 각 주(row)의 위치 정보 수집
52
+ for (var row = 0; row < 6; row += 1) {
53
+ var cellIndex = row * 7; // 각 주의 첫 번째 셀
54
+ var cell = calendarCells[cellIndex];
55
+ if (cell) {
56
+ var cellRect = cell.getBoundingClientRect();
57
+ var containerRect = gridContainer.getBoundingClientRect();
58
+ var relativeTop = cellRect.top - containerRect.top;
59
+ var dateLabelHeight = 24; // 날짜 라벨 대략 높이
60
+ positions.push({
61
+ top: relativeTop + dateLabelHeight,
62
+ height: cellRect.height - dateLabelHeight
63
+ });
64
+ }
65
+ else {
66
+ // 기본값 설정 (fallback)
67
+ positions.push({
68
+ top: 60 + row * 120,
69
+ height: 96
70
+ });
71
+ }
72
+ }
73
+ setCellPositions(positions);
74
+ }, []);
75
+ // ResizeObserver로 크기 변경 감지
76
+ (0, react_1.useLayoutEffect)(function () {
77
+ if (!containerRef.current)
78
+ return;
79
+ var gridContainer = containerRef.current.parentElement;
80
+ if (!gridContainer)
81
+ return;
82
+ var resizeObserver = new ResizeObserver(function () {
83
+ calculateCellPositions();
84
+ });
85
+ resizeObserver.observe(gridContainer);
86
+ // 초기 계산
87
+ calculateCellPositions();
88
+ return function () {
89
+ resizeObserver.disconnect();
90
+ };
91
+ }, [calculateCellPositions]);
92
+ // 창 크기 변경 시에도 재계산
93
+ (0, react_1.useLayoutEffect)(function () {
94
+ var handleResize = function () {
95
+ setTimeout(calculateCellPositions, 0);
96
+ };
97
+ window.addEventListener('resize', handleResize);
98
+ return function () { return window.removeEventListener('resize', handleResize); };
99
+ }, [calculateCellPositions]);
100
+ (0, react_1.useEffect)(function () {
101
+ // 각 row별로 스케줄 개수와 높이 제한 확인
102
+ var schedulesByRow = {};
103
+ multiWeekSchedules.forEach(function (scheduleInfo) {
104
+ var startRow = scheduleInfo.startRow, endRow = scheduleInfo.endRow;
105
+ for (var row = startRow; row <= endRow; row += 1) {
106
+ if (!schedulesByRow[row]) {
107
+ schedulesByRow[row] = [];
108
+ }
109
+ schedulesByRow[row].push(scheduleInfo);
110
+ }
111
+ });
112
+ // 각 row에서 높이 제한 확인 (실제로 보이는 줄 수와 전체 스케줄 수 모두 출력)
113
+ Object.keys(schedulesByRow).forEach(function (rowStr) {
114
+ var row = parseInt(rowStr, 10);
115
+ var schedules = schedulesByRow[row];
116
+ // scheduleIndex별로 한 줄에 하나씩만!
117
+ var rowIndexMap = {};
118
+ schedules.forEach(function (s) {
119
+ rowIndexMap[s.scheduleIndex] = s;
120
+ });
121
+ var rowSchedules = Object.values(rowIndexMap);
122
+ if (rowSchedules.length > maxSchedulesPerDay) {
123
+ // row를 날짜로 변환 (row 2가 첫 번째 주, row 3이 두 번째 주...)
124
+ var weekIndex = row - 2; // 헤더 제외
125
+ var today = new Date();
126
+ var startOfWeek = new Date(today);
127
+ startOfWeek.setDate(today.getDate() - today.getDay()); // 이번 주 일요일
128
+ var weekStart = new Date(startOfWeek);
129
+ weekStart.setDate(startOfWeek.getDate() + weekIndex * 7);
130
+ var weekEnd = new Date(weekStart);
131
+ weekEnd.setDate(weekStart.getDate() + 6);
132
+ setHiddenSchedules(__spreadArray([], rowSchedules, true).filter(function (_, index) { return index >= maxSchedulesPerDay; })
133
+ .map(function (s) { return s.schedule.id.toString(); }));
134
+ }
135
+ });
136
+ }, [maxSchedulesPerDay]);
137
+ return ((0, jsx_runtime_1.jsx)(S_Layer, __assign({ ref: containerRef }, { children: multiWeekSchedules
138
+ .filter(function (s) { return !hiddenSchedules.includes(s.schedule.id.toString()); })
139
+ .map(function (_a) {
140
+ var schedule = _a.schedule, startRow = _a.startRow, endRow = _a.endRow, startCol = _a.startCol, endCol = _a.endCol, scheduleIndex = _a.scheduleIndex;
141
+ var isSameRow = startRow === endRow;
142
+ var isSelected = selectedSchedules.some(function (s) { return s.id === schedule.id; });
143
+ var uniqueKey = "multi-".concat(schedule.id, "-").concat(startRow, "-").concat(startCol, "-").concat(endCol);
144
+ if (isSameRow) {
145
+ return ((0, jsx_runtime_1.jsxs)(S_MultiWeekSchedule, __assign({ "$color": schedule.color, "$startRow": startRow, "$endRow": endRow, "$startCol": startCol, "$endCol": endCol, "$scheduleIndex": scheduleIndex, "$isSelected": isSelected, "$isDraggable": isDraggable, "$cellPositions": cellPositions, draggable: isDraggable, onDragStart: isDraggable
146
+ ? function (e) {
147
+ handleScheduleDragStart === null || handleScheduleDragStart === void 0 ? void 0 : handleScheduleDragStart(schedule, e);
148
+ }
149
+ : undefined, onDragEnd: isDraggable ? handleScheduleDragEnd : undefined, onClick: function (e) {
150
+ e.stopPropagation();
151
+ handleScheduleClick === null || handleScheduleClick === void 0 ? void 0 : handleScheduleClick(schedule, e);
152
+ } }, { children: [(0, jsx_runtime_1.jsx)(ScheduleItem_1.S_Dot, { "$isSelected": isSelected }), (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: "caption2Bold", text: schedule.title, ellipsisMode: "use", colorTheme: isSelected ? 'sysTextWhite' : undefined })] }), uniqueKey));
153
+ }
154
+ // 여러 행에 걸친 이벤트 처리
155
+ var segments = [];
156
+ for (var row = startRow; row <= endRow; row += 1) {
157
+ var isFirstRow = row === startRow;
158
+ var isLastRow = row === endRow;
159
+ var segmentStartCol = isFirstRow ? startCol : 1;
160
+ var segmentEndCol = isLastRow ? endCol : 7;
161
+ segments.push((0, jsx_runtime_1.jsxs)(S_MultiWeekSchedule, __assign({ "$color": schedule.color, "$startRow": row, "$endRow": row, "$startCol": segmentStartCol, "$endCol": segmentEndCol, "$scheduleIndex": scheduleIndex, "$isSelected": isSelected, "$isDraggable": isDraggable, "$cellPositions": cellPositions, draggable: isDraggable, onDragStart: isDraggable
162
+ ? function (e) {
163
+ handleScheduleDragStart === null || handleScheduleDragStart === void 0 ? void 0 : handleScheduleDragStart(schedule, e);
164
+ }
165
+ : undefined, onDragEnd: isDraggable ? handleScheduleDragEnd : undefined, onClick: function (e) {
166
+ e.stopPropagation();
167
+ handleScheduleClick === null || handleScheduleClick === void 0 ? void 0 : handleScheduleClick(schedule, e);
168
+ } }, { children: [(0, jsx_runtime_1.jsx)(ScheduleItem_1.S_Dot, { "$isSelected": isSelected }), (0, jsx_runtime_1.jsx)(TextLabel_1.TextLabel, { styleTheme: "caption2Regular", text: schedule.title, ellipsisMode: "use", colorTheme: isSelected ? 'sysTextWhite' : undefined })] }), "".concat(uniqueKey, "-row-").concat(row)));
169
+ }
170
+ return segments;
171
+ }) })));
172
+ };
173
+ exports.MultiWeekSchedulesLayer = MultiWeekSchedulesLayer;
174
+ var S_Layer = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 10;\n\n & > * {\n pointer-events: auto;\n }\n"], ["\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 10;\n\n & > * {\n pointer-events: auto;\n }\n"])));
175
+ var S_MultiWeekSchedule = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n align-items: center;\n background-color: ", ";\n border-radius: 4px;\n color: white;\n cursor: ", ";\n display: flex;\n font-size: 12px;\n height: 18px;\n left: ", ";\n padding: 2px 6px;\n position: absolute;\n top: ", ";\n user-select: none;\n width: ", ";\n z-index: 10;\n\n &:active {\n background: ", ";\n cursor: ", ";\n }\n"], ["\n align-items: center;\n background-color: ", ";\n border-radius: 4px;\n color: white;\n cursor: ", ";\n display: flex;\n font-size: 12px;\n height: 18px;\n left: ", ";\n padding: 2px 6px;\n position: absolute;\n top: ", ";\n user-select: none;\n width: ", ";\n z-index: 10;\n\n &:active {\n background: ", ";\n cursor: ", ";\n }\n"])), function (props) {
176
+ return props.$isSelected ? props.theme.ui_cpnt_sheet_base_06 : props.theme.ui_cpnt_sheet_base;
177
+ }, function (_a) {
178
+ var $isDraggable = _a.$isDraggable;
179
+ return ($isDraggable ? 'grab' : 'normal');
180
+ }, function (props) { return "calc((".concat(props.$startCol - 1, ") * (100% / 7) + 4px)"); }, function (props) {
181
+ var $startRow = props.$startRow, $scheduleIndex = props.$scheduleIndex, $cellPositions = props.$cellPositions;
182
+ var rowIndex = $startRow - 2; // 헤더 행 제외 (첫 번째 캘린더 행이 row 2)
183
+ if (!$cellPositions ||
184
+ $cellPositions.length === 0 ||
185
+ rowIndex < 0 ||
186
+ rowIndex >= $cellPositions.length) {
187
+ // 기본값 (fallback)
188
+ var defaultTop = 60 + rowIndex * 100;
189
+ var scheduleSpacing_1 = ($scheduleIndex || 0) * 19;
190
+ return "".concat(defaultTop + scheduleSpacing_1, "px");
191
+ }
192
+ var cellPosition = $cellPositions[rowIndex];
193
+ var scheduleHeight = 16;
194
+ var scheduleSpacing = ($scheduleIndex || 0) * (scheduleHeight + 7); // 스케줄 간 간격 6px
195
+ var calculatedTop = cellPosition.top + scheduleSpacing;
196
+ return "".concat(calculatedTop, "px");
197
+ }, function (props) { return "calc((".concat(props.$endCol - props.$startCol + 1, ") * (100% / 7) - 21px)"); }, function (_a) {
198
+ var theme = _a.theme;
199
+ return theme.ui_cpnt_sheet_base_06;
200
+ }, function (_a) {
201
+ var $isDraggable = _a.$isDraggable;
202
+ return ($isDraggable ? 'grabbing' : 'normal');
203
+ });
204
+ var templateObject_1, templateObject_2;
@@ -0,0 +1,25 @@
1
+ import type { Schedule } from './types';
2
+ import type React from 'react';
3
+ export interface ScheduleItemExtraProps {
4
+ onDragStart?: (e: React.DragEvent) => void;
5
+ onDragEnd?: () => void;
6
+ onClick?: (e: React.MouseEvent) => void;
7
+ style?: React.CSSProperties;
8
+ className?: string;
9
+ [key: string]: unknown;
10
+ }
11
+ interface ScheduleItemProps {
12
+ schedule: Schedule;
13
+ extraProps?: ScheduleItemExtraProps;
14
+ onDragStart: (schedule: Schedule, e: React.DragEvent) => void;
15
+ onDragEnd: () => void;
16
+ onClick?: (schedule: Schedule, e?: React.MouseEvent) => void;
17
+ isSelected?: boolean;
18
+ isAllDay?: boolean;
19
+ isDraggable?: boolean;
20
+ }
21
+ export declare const ScheduleItem: React.FC<ScheduleItemProps>;
22
+ export declare const S_Dot: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
23
+ $isSelected?: boolean | undefined;
24
+ }, never>;
25
+ export {};