@flipdish/ui-library 0.21.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/__internal__/statusIcon/statusIcon.types.d.ts +12 -0
- package/dist/components/__internal__/statusIcon/statusIcon.types.d.ts.map +1 -0
- package/dist/components/__internal__/statusIcon/statusIcon.utils.cjs +21 -0
- package/dist/components/__internal__/statusIcon/statusIcon.utils.cjs.map +1 -0
- package/dist/components/__internal__/statusIcon/statusIcon.utils.d.ts +5 -0
- package/dist/components/__internal__/statusIcon/statusIcon.utils.d.ts.map +1 -0
- package/dist/components/__internal__/statusIcon/statusIcon.utils.js +19 -0
- package/dist/components/__internal__/statusIcon/statusIcon.utils.js.map +1 -0
- package/dist/components/atoms/BackgroundPattern/components/grid-check.cjs +14 -7
- package/dist/components/atoms/BackgroundPattern/components/grid-check.cjs.map +1 -1
- package/dist/components/atoms/BackgroundPattern/components/grid-check.d.ts.map +1 -1
- package/dist/components/atoms/BackgroundPattern/components/grid-check.js +14 -7
- package/dist/components/atoms/BackgroundPattern/components/grid-check.js.map +1 -1
- package/dist/components/atoms/BackgroundPattern/index.d.ts.map +1 -1
- package/dist/components/atoms/Badge/index.cjs +16 -3
- package/dist/components/atoms/Badge/index.cjs.map +1 -1
- package/dist/components/atoms/Badge/index.d.ts +13 -24
- package/dist/components/atoms/Badge/index.d.ts.map +1 -1
- package/dist/components/atoms/Badge/index.js +16 -3
- package/dist/components/atoms/Badge/index.js.map +1 -1
- package/dist/components/atoms/Dot/Dot.styles.cjs +51 -0
- package/dist/components/atoms/Dot/Dot.styles.cjs.map +1 -0
- package/dist/components/atoms/Dot/Dot.styles.d.ts +109 -0
- package/dist/components/atoms/Dot/Dot.styles.d.ts.map +1 -0
- package/dist/components/atoms/Dot/Dot.styles.js +49 -0
- package/dist/components/atoms/Dot/Dot.styles.js.map +1 -0
- package/dist/components/atoms/Dot/index.cjs +5 -14
- package/dist/components/atoms/Dot/index.cjs.map +1 -1
- package/dist/components/atoms/Dot/index.d.ts +11 -3
- package/dist/components/atoms/Dot/index.d.ts.map +1 -1
- package/dist/components/atoms/Dot/index.js +5 -14
- package/dist/components/atoms/Dot/index.js.map +1 -1
- package/dist/components/molecules/Alert/index.cjs +3 -11
- package/dist/components/molecules/Alert/index.cjs.map +1 -1
- package/dist/components/molecules/Alert/index.d.ts +3 -2
- package/dist/components/molecules/Alert/index.d.ts.map +1 -1
- package/dist/components/molecules/Alert/index.js +3 -11
- package/dist/components/molecules/Alert/index.js.map +1 -1
- package/dist/components/molecules/Carousel/index.cjs +1 -1
- package/dist/components/molecules/Carousel/index.cjs.map +1 -1
- package/dist/components/molecules/Carousel/index.js +1 -1
- package/dist/components/molecules/Carousel/index.js.map +1 -1
- package/dist/components/molecules/Notification/index.cjs +3 -10
- package/dist/components/molecules/Notification/index.cjs.map +1 -1
- package/dist/components/molecules/Notification/index.d.ts +2 -1
- package/dist/components/molecules/Notification/index.d.ts.map +1 -1
- package/dist/components/molecules/Notification/index.js +3 -10
- package/dist/components/molecules/Notification/index.js.map +1 -1
- package/dist/components/molecules/Pagination/index.cjs +4 -4
- package/dist/components/molecules/Pagination/index.cjs.map +1 -1
- package/dist/components/molecules/Pagination/index.js +5 -5
- package/dist/components/molecules/Pagination/index.js.map +1 -1
- package/dist/components/molecules/Tags/index.cjs +1 -1
- package/dist/components/molecules/Tags/index.cjs.map +1 -1
- package/dist/components/molecules/Tags/index.js +1 -1
- package/dist/components/molecules/Tags/index.js.map +1 -1
- package/dist/components/organisms/ActivityFeed/index.cjs +1 -1
- package/dist/components/organisms/ActivityFeed/index.cjs.map +1 -1
- package/dist/components/organisms/ActivityFeed/index.js +1 -1
- package/dist/components/organisms/ActivityFeed/index.js.map +1 -1
- package/dist/components/organisms/Calendar/calendar.utils.cjs +41 -0
- package/dist/components/organisms/Calendar/calendar.utils.cjs.map +1 -1
- package/dist/components/organisms/Calendar/calendar.utils.d.ts +20 -0
- package/dist/components/organisms/Calendar/calendar.utils.d.ts.map +1 -1
- package/dist/components/organisms/Calendar/calendar.utils.js +37 -1
- package/dist/components/organisms/Calendar/calendar.utils.js.map +1 -1
- package/dist/components/organisms/Calendar/components/calendar-day-view.cjs +86 -0
- package/dist/components/organisms/Calendar/components/calendar-day-view.cjs.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-day-view.d.ts +20 -0
- package/dist/components/organisms/Calendar/components/calendar-day-view.d.ts.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-day-view.js +84 -0
- package/dist/components/organisms/Calendar/components/calendar-day-view.js.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.cjs +21 -0
- package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.cjs.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.d.ts +16 -0
- package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.d.ts.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.js +19 -0
- package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.js.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-month-view.cjs +265 -0
- package/dist/components/organisms/Calendar/components/calendar-month-view.cjs.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-month-view.d.ts +18 -0
- package/dist/components/organisms/Calendar/components/calendar-month-view.d.ts.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-month-view.js +263 -0
- package/dist/components/organisms/Calendar/components/calendar-month-view.js.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-positioned-event.cjs +41 -0
- package/dist/components/organisms/Calendar/components/calendar-positioned-event.cjs.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-positioned-event.d.ts +15 -0
- package/dist/components/organisms/Calendar/components/calendar-positioned-event.d.ts.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-positioned-event.js +39 -0
- package/dist/components/organisms/Calendar/components/calendar-positioned-event.js.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view-day.cjs +23 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view-day.cjs.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view-day.d.ts +15 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view-day.d.ts.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view-day.js +21 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view-day.js.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view.cjs +77 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view.cjs.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view.d.ts +20 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view.d.ts.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view.js +75 -0
- package/dist/components/organisms/Calendar/components/calendar-week-view.js.map +1 -0
- package/dist/components/organisms/Calendar/index.cjs +4 -504
- package/dist/components/organisms/Calendar/index.cjs.map +1 -1
- package/dist/components/organisms/Calendar/index.d.ts +1 -1
- package/dist/components/organisms/Calendar/index.d.ts.map +1 -1
- package/dist/components/organisms/Calendar/index.js +6 -506
- package/dist/components/organisms/Calendar/index.js.map +1 -1
- package/dist/components/organisms/Charts/components/activity-gauge.cjs +4 -0
- package/dist/components/organisms/Charts/components/activity-gauge.cjs.map +1 -1
- package/dist/components/organisms/Charts/components/activity-gauge.d.ts +4 -0
- package/dist/components/organisms/Charts/components/activity-gauge.d.ts.map +1 -1
- package/dist/components/organisms/Charts/components/activity-gauge.js +4 -0
- package/dist/components/organisms/Charts/components/activity-gauge.js.map +1 -1
- package/dist/components/organisms/Charts/components/bar-chart.cjs +1 -1
- package/dist/components/organisms/Charts/components/bar-chart.cjs.map +1 -1
- package/dist/components/organisms/Charts/components/bar-chart.d.ts +1 -2
- package/dist/components/organisms/Charts/components/bar-chart.d.ts.map +1 -1
- package/dist/components/organisms/Charts/components/bar-chart.js +2 -2
- package/dist/components/organisms/Charts/components/bar-chart.js.map +1 -1
- package/dist/components/organisms/Charts/components/charts-base.cjs +1 -2
- package/dist/components/organisms/Charts/components/charts-base.cjs.map +1 -1
- package/dist/components/organisms/Charts/components/charts-base.d.ts +13 -2
- package/dist/components/organisms/Charts/components/charts-base.d.ts.map +1 -1
- package/dist/components/organisms/Charts/components/charts-base.js +1 -2
- package/dist/components/organisms/Charts/components/charts-base.js.map +1 -1
- package/dist/components/organisms/Charts/components/line-chart.cjs +1 -1
- package/dist/components/organisms/Charts/components/line-chart.cjs.map +1 -1
- package/dist/components/organisms/Charts/components/line-chart.d.ts +1 -2
- package/dist/components/organisms/Charts/components/line-chart.d.ts.map +1 -1
- package/dist/components/organisms/Charts/components/line-chart.js +2 -2
- package/dist/components/organisms/Charts/components/line-chart.js.map +1 -1
- package/dist/components/organisms/Charts/components/pie-chart.cjs +5 -0
- package/dist/components/organisms/Charts/components/pie-chart.cjs.map +1 -1
- package/dist/components/organisms/Charts/components/pie-chart.d.ts +6 -2
- package/dist/components/organisms/Charts/components/pie-chart.d.ts.map +1 -1
- package/dist/components/organisms/Charts/components/pie-chart.js +5 -0
- package/dist/components/organisms/Charts/components/pie-chart.js.map +1 -1
- package/dist/components/organisms/Charts/components/radar-chart.cjs +3 -4
- package/dist/components/organisms/Charts/components/radar-chart.cjs.map +1 -1
- package/dist/components/organisms/Charts/components/radar-chart.d.ts.map +1 -1
- package/dist/components/organisms/Charts/components/radar-chart.js +3 -4
- package/dist/components/organisms/Charts/components/radar-chart.js.map +1 -1
- package/dist/components/organisms/DatePicker/components/range-calendar.cjs +1 -1
- package/dist/components/organisms/DatePicker/components/range-calendar.cjs.map +1 -1
- package/dist/components/organisms/DatePicker/components/range-calendar.js +2 -2
- package/dist/components/organisms/DatePicker/components/range-calendar.js.map +1 -1
- package/dist/components/organisms/GradientPicker/components/gradient-area.cjs +157 -0
- package/dist/components/organisms/GradientPicker/components/gradient-area.cjs.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-area.d.ts +17 -0
- package/dist/components/organisms/GradientPicker/components/gradient-area.d.ts.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-area.js +155 -0
- package/dist/components/organisms/GradientPicker/components/gradient-area.js.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.cjs +17 -0
- package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.cjs.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.d.ts +3 -0
- package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.d.ts.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.js +15 -0
- package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.js.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-slider.cjs +71 -0
- package/dist/components/organisms/GradientPicker/components/gradient-slider.cjs.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-slider.d.ts +7 -0
- package/dist/components/organisms/GradientPicker/components/gradient-slider.d.ts.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-slider.js +69 -0
- package/dist/components/organisms/GradientPicker/components/gradient-slider.js.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-list.cjs +18 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-list.cjs.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-list.d.ts +4 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-list.d.ts.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-list.js +16 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-list.js.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-row.cjs +49 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-row.cjs.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-row.d.ts +6 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-row.d.ts.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-row.js +47 -0
- package/dist/components/organisms/GradientPicker/components/gradient-stop-row.js.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-type-select.cjs +28 -0
- package/dist/components/organisms/GradientPicker/components/gradient-type-select.cjs.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-type-select.d.ts +3 -0
- package/dist/components/organisms/GradientPicker/components/gradient-type-select.d.ts.map +1 -0
- package/dist/components/organisms/GradientPicker/components/gradient-type-select.js +26 -0
- package/dist/components/organisms/GradientPicker/components/gradient-type-select.js.map +1 -0
- package/dist/components/organisms/GradientPicker/components/position-input.cjs +43 -0
- package/dist/components/organisms/GradientPicker/components/position-input.cjs.map +1 -0
- package/dist/components/organisms/GradientPicker/components/position-input.d.ts +6 -0
- package/dist/components/organisms/GradientPicker/components/position-input.d.ts.map +1 -0
- package/dist/components/organisms/GradientPicker/components/position-input.js +41 -0
- package/dist/components/organisms/GradientPicker/components/position-input.js.map +1 -0
- package/dist/components/organisms/GradientPicker/index.cjs +11 -327
- package/dist/components/organisms/GradientPicker/index.cjs.map +1 -1
- package/dist/components/organisms/GradientPicker/index.d.ts +7 -8
- package/dist/components/organisms/GradientPicker/index.d.ts.map +1 -1
- package/dist/components/organisms/GradientPicker/index.js +7 -323
- package/dist/components/organisms/GradientPicker/index.js.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-account-card.cjs +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-account-card.cjs.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-account-card.js +2 -2
- package/dist/components/organisms/HeaderNavigation/components/nav-account-card.js.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-button.cjs +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-button.cjs.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-button.d.ts.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-button.js +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-button.js.map +1 -1
- package/dist/components/organisms/SidebarNavigation/components/nav-account-card.cjs +1 -1
- package/dist/components/organisms/SidebarNavigation/components/nav-account-card.cjs.map +1 -1
- package/dist/components/organisms/SidebarNavigation/components/nav-account-card.js +2 -2
- package/dist/components/organisms/SidebarNavigation/components/nav-account-card.js.map +1 -1
- package/dist/components/organisms/SidebarNavigation/index.cjs +1 -1
- package/dist/components/organisms/SidebarNavigation/index.cjs.map +1 -1
- package/dist/components/organisms/SidebarNavigation/index.js +2 -2
- package/dist/components/organisms/SidebarNavigation/index.js.map +1 -1
- package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.cjs +169 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.cjs.map +1 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.d.ts +34 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.d.ts.map +1 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.js +167 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.js.map +1 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.cjs +75 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.cjs.map +1 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.d.ts +16 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.d.ts.map +1 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.js +73 -0
- package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.js.map +1 -0
- package/dist/components/organisms/VideoPlayer/index.cjs +9 -182
- package/dist/components/organisms/VideoPlayer/index.cjs.map +1 -1
- package/dist/components/organisms/VideoPlayer/index.d.ts.map +1 -1
- package/dist/components/organisms/VideoPlayer/index.js +10 -183
- package/dist/components/organisms/VideoPlayer/index.js.map +1 -1
- package/dist/hooks/useBreakpoints/index.cjs +4 -1
- package/dist/hooks/useBreakpoints/index.cjs.map +1 -1
- package/dist/hooks/useBreakpoints/index.d.ts +2 -0
- package/dist/hooks/useBreakpoints/index.d.ts.map +1 -1
- package/dist/hooks/useBreakpoints/index.js +4 -2
- package/dist/hooks/useBreakpoints/index.js.map +1 -1
- package/dist/native/components/atoms/Dot/Dot.styles.d.ts +109 -0
- package/dist/native/components/atoms/Dot/Dot.styles.d.ts.map +1 -0
- package/dist/native/components/atoms/Dot/Dot.styles.js +49 -0
- package/dist/native/components/atoms/Dot/Dot.styles.js.map +1 -0
- package/dist/native/components/atoms/Dot/index.d.ts +24 -8
- package/dist/native/components/atoms/Dot/index.d.ts.map +1 -0
- package/dist/native/components/atoms/Dot/index.js +25 -0
- package/dist/native/components/atoms/Dot/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var cx = require('@flipdish/ui-library/utilities/cx');
|
|
5
|
+
var testIdUtils = require('@flipdish/ui-library/utilities/testIdUtils');
|
|
6
|
+
var date = require('@internationalized/date');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var calendar_utils = require('../calendar.utils.cjs');
|
|
9
|
+
var calendarColumnHeader = require('./calendar-column-header.cjs');
|
|
10
|
+
var calendarMonthViewCell = require('./calendar-month-view-cell.cjs');
|
|
11
|
+
var calendarMonthViewEvent = require('./calendar-month-view-event.cjs');
|
|
12
|
+
|
|
13
|
+
const MonthView = ({ currentMonthDate, selectedDate, zonedEvents, locale, timeZone, setSelectedDate, fullDateFormatter, shortWeekdayFormatter, timeFormatter, // Needed for formatTime inside
|
|
14
|
+
className, }) => {
|
|
15
|
+
const prefix = testIdUtils.useTestIdPrefix();
|
|
16
|
+
const eventTestId = (eventId) => (prefix ? testIdUtils.joinTestId(prefix, `event-${testIdUtils.slugifyTestId(eventId)}`) : undefined);
|
|
17
|
+
const monthStart = date.startOfMonth(currentMonthDate);
|
|
18
|
+
const monthEnd = date.endOfMonth(currentMonthDate);
|
|
19
|
+
const weekStart = date.startOfWeek(monthStart, locale);
|
|
20
|
+
const weekEnd = date.endOfWeek(monthEnd, locale);
|
|
21
|
+
const formatTimeForMonth = (dateTime) => timeFormatter.format(dateTime.toDate());
|
|
22
|
+
const days = React.useMemo(() => calendar_utils.getDaysInVisibleMonthGrid(currentMonthDate, locale), [currentMonthDate, locale]);
|
|
23
|
+
const weekdays = React.useMemo(() => {
|
|
24
|
+
const firstDay = date.startOfWeek(date.today(timeZone), locale);
|
|
25
|
+
return Array.from({ length: 7 }).map((_, i) => shortWeekdayFormatter.format(firstDay.add({ days: i }).toDate(timeZone)));
|
|
26
|
+
}, [locale, timeZone, shortWeekdayFormatter]); // Dependencies are passed in
|
|
27
|
+
const visibleEvents = zonedEvents.filter((event) => {
|
|
28
|
+
const eventStartDay = date.toCalendarDate(event.start);
|
|
29
|
+
const eventEndDay = date.toCalendarDate(event.end);
|
|
30
|
+
return eventStartDay.compare(weekEnd) <= 0 && eventEndDay.compare(weekStart) >= 0;
|
|
31
|
+
});
|
|
32
|
+
const eventsByDay = React.useMemo(() => {
|
|
33
|
+
const map = new Map();
|
|
34
|
+
days.forEach((day) => {
|
|
35
|
+
const dateKey = day.toString();
|
|
36
|
+
const dayEvents = calendar_utils.getEventsForDay(visibleEvents, day, timeZone);
|
|
37
|
+
map.set(dateKey, dayEvents);
|
|
38
|
+
});
|
|
39
|
+
return map;
|
|
40
|
+
}, [days, visibleEvents, timeZone]); // Dependencies: days array, visible events, timezone
|
|
41
|
+
const MAX_EVENTS_PER_CELL = 3;
|
|
42
|
+
const todayCalDate = date.today(timeZone);
|
|
43
|
+
const targetDateForFooter = selectedDate || (date.isSameMonth(currentMonthDate, todayCalDate) ? todayCalDate : null);
|
|
44
|
+
let eventsForFooter = [];
|
|
45
|
+
if (targetDateForFooter) {
|
|
46
|
+
const targetZoned = date.toZoned(targetDateForFooter, timeZone);
|
|
47
|
+
const targetZonedStart = calendar_utils.getStartOfDay(targetZoned, timeZone);
|
|
48
|
+
const targetZonedEnd = calendar_utils.getEndOfDay(targetZoned, timeZone);
|
|
49
|
+
eventsForFooter = zonedEvents
|
|
50
|
+
.filter((event) => {
|
|
51
|
+
const eventStartDay = date.toCalendarDate(event.start);
|
|
52
|
+
const eventEndDay = date.toCalendarDate(event.end);
|
|
53
|
+
return (date.isSameDay(eventStartDay, targetDateForFooter) ||
|
|
54
|
+
date.isSameDay(eventEndDay, targetDateForFooter) ||
|
|
55
|
+
(event.start.compare(targetZonedEnd) < 0 && event.end.compare(targetZonedStart) > 0));
|
|
56
|
+
})
|
|
57
|
+
.sort((a, b) => a.start.compare(b.start));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Calculates how many days an event should visually span from a given start date.
|
|
61
|
+
*
|
|
62
|
+
* Multi-day events are rendered as a single element that spans multiple cells.
|
|
63
|
+
* To avoid duplicate rendering:
|
|
64
|
+
* - Events render only on their start day
|
|
65
|
+
* - Multi-week events re-render at the start of each new week they span
|
|
66
|
+
*
|
|
67
|
+
* @returns Number of days to span, or null if event should not render on this day
|
|
68
|
+
*/
|
|
69
|
+
const calculateEventSpan = React.useCallback((event, currentDate) => {
|
|
70
|
+
const eventStartDay = date.toCalendarDate(event.start);
|
|
71
|
+
const eventEndDay = date.toCalendarDate(event.end);
|
|
72
|
+
const startsOnThisDay = date.isSameDay(currentDate, eventStartDay);
|
|
73
|
+
if (!startsOnThisDay && eventStartDay.compare(currentDate) < 0) {
|
|
74
|
+
const currentDayIndex = days.findIndex((d) => date.isSameDay(d, currentDate));
|
|
75
|
+
const weekStartIndex = Math.floor(currentDayIndex / 7) * 7;
|
|
76
|
+
const weekStartDate = days[weekStartIndex];
|
|
77
|
+
if (!weekStartDate)
|
|
78
|
+
return null;
|
|
79
|
+
const isFirstDayOfWeek = date.isSameDay(currentDate, weekStartDate);
|
|
80
|
+
// Only render at week boundaries for multi-week events
|
|
81
|
+
if (!isFirstDayOfWeek) {
|
|
82
|
+
return null; // Already rendered earlier in this week
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const currentDayIndex = days.findIndex((d) => date.isSameDay(d, currentDate));
|
|
86
|
+
const weekEndIndex = Math.floor(currentDayIndex / 7) * 7 + 6;
|
|
87
|
+
let spanDays = 1;
|
|
88
|
+
let checkDay = currentDate.add({ days: 1 });
|
|
89
|
+
let checkDayIndex = currentDayIndex + 1;
|
|
90
|
+
while (checkDayIndex <= weekEndIndex && checkDay.compare(eventEndDay) <= 0) {
|
|
91
|
+
spanDays++;
|
|
92
|
+
checkDay = checkDay.add({ days: 1 });
|
|
93
|
+
checkDayIndex++;
|
|
94
|
+
}
|
|
95
|
+
return spanDays;
|
|
96
|
+
}, [days]);
|
|
97
|
+
/**
|
|
98
|
+
* Creates an optimized layout for multi-day events using a row-packing algorithm.
|
|
99
|
+
*
|
|
100
|
+
* Key concepts:
|
|
101
|
+
* 1. Each event is assigned to a "row" (vertical position within a day cell)
|
|
102
|
+
* 2. Events spanning multiple days create invisible "placeholder" cells to reserve space
|
|
103
|
+
* 3. Row assignment uses a greedy algorithm to minimize wasted vertical space
|
|
104
|
+
* 4. Multi-week events can use different rows in each week for optimal packing
|
|
105
|
+
*
|
|
106
|
+
* Example: If Event A (Mon-Wed) is in row 0, Event B (Thu-Fri) can also use row 0
|
|
107
|
+
* because they don't overlap, preventing wasted space.
|
|
108
|
+
*/
|
|
109
|
+
const eventRenderMap = React.useMemo(() => {
|
|
110
|
+
const renderMap = new Map();
|
|
111
|
+
// biome-ignore lint/suspicious/useIterableCallbackReturn: This is a side effect
|
|
112
|
+
days.forEach((day) => renderMap.set(day.toString(), []));
|
|
113
|
+
const eventRowAssignments = new Map(); // eventId -> row number
|
|
114
|
+
const rowOccupancyByDay = new Map(); // dateKey -> [row0: Set<eventId>, row1: Set<eventId>, ...]
|
|
115
|
+
// biome-ignore lint/suspicious/useIterableCallbackReturn: This is a side effect
|
|
116
|
+
days.forEach((day) => rowOccupancyByDay.set(day.toString(), []));
|
|
117
|
+
/** Whether a multi-week event re-starts its rendering at this week's first day. */
|
|
118
|
+
const isWeekBoundaryStart = (dayIndex, eventStartDay, currentDay) => {
|
|
119
|
+
const startsOnCurrentDay = date.isSameDay(currentDay, eventStartDay);
|
|
120
|
+
if (startsOnCurrentDay)
|
|
121
|
+
return false;
|
|
122
|
+
const weekStartIndex = Math.floor(dayIndex / 7) * 7;
|
|
123
|
+
const weekStartDate = days[weekStartIndex];
|
|
124
|
+
if (!weekStartDate)
|
|
125
|
+
return false;
|
|
126
|
+
return date.isSameDay(currentDay, weekStartDate);
|
|
127
|
+
};
|
|
128
|
+
/** First row index free across every day the event spans. */
|
|
129
|
+
const findAvailableRow = (startDayIndex, span) => {
|
|
130
|
+
let row = 0;
|
|
131
|
+
while (true) {
|
|
132
|
+
let isAvailable = true;
|
|
133
|
+
for (let offset = 0; offset < span; offset++) {
|
|
134
|
+
const dayIndex = startDayIndex + offset;
|
|
135
|
+
const day = days[dayIndex];
|
|
136
|
+
if (!day)
|
|
137
|
+
break;
|
|
138
|
+
const dayKey = day.toString();
|
|
139
|
+
const occupancy = rowOccupancyByDay.get(dayKey);
|
|
140
|
+
if ((occupancy?.[row]?.size ?? 0) > 0) {
|
|
141
|
+
isAvailable = false;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (isAvailable)
|
|
146
|
+
return row;
|
|
147
|
+
row++;
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
/** Marks `row` occupied for every day the event spans. */
|
|
151
|
+
const markRowAsOccupied = (startDayIndex, span, row, eventId) => {
|
|
152
|
+
for (let offset = 0; offset < span; offset++) {
|
|
153
|
+
const dayIndex = startDayIndex + offset;
|
|
154
|
+
const day = days[dayIndex];
|
|
155
|
+
if (!day)
|
|
156
|
+
break;
|
|
157
|
+
const dayKey = day.toString();
|
|
158
|
+
const occupancy = rowOccupancyByDay.get(dayKey);
|
|
159
|
+
if (!occupancy)
|
|
160
|
+
break;
|
|
161
|
+
let cell = occupancy[row];
|
|
162
|
+
if (!cell) {
|
|
163
|
+
cell = new Set();
|
|
164
|
+
occupancy[row] = cell;
|
|
165
|
+
}
|
|
166
|
+
cell.add(eventId);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
days.forEach((day, dayIndex) => {
|
|
170
|
+
const dateKey = day.toString();
|
|
171
|
+
const eventsOnThisDay = eventsByDay.get(dateKey) || [];
|
|
172
|
+
eventsOnThisDay.forEach((event) => {
|
|
173
|
+
const span = calculateEventSpan(event, day);
|
|
174
|
+
if (span === null)
|
|
175
|
+
return; // Event doesn't render on this day
|
|
176
|
+
const eventStartDay = date.toCalendarDate(event.start);
|
|
177
|
+
const isNewWeekSegment = isWeekBoundaryStart(dayIndex, eventStartDay, day);
|
|
178
|
+
const hasExistingRow = eventRowAssignments.has(event.id);
|
|
179
|
+
// Reuse the event's row within a week; a new week segment gets a fresh row.
|
|
180
|
+
let row;
|
|
181
|
+
if (hasExistingRow && !isNewWeekSegment) {
|
|
182
|
+
// biome-ignore lint/style/noNonNullAssertion: guarded by hasExistingRow (eventRowAssignments.has(event.id)) above
|
|
183
|
+
row = eventRowAssignments.get(event.id);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
row = findAvailableRow(dayIndex, span);
|
|
187
|
+
eventRowAssignments.set(event.id, row);
|
|
188
|
+
}
|
|
189
|
+
markRowAsOccupied(dayIndex, span, row, event.id);
|
|
190
|
+
renderMap.get(dateKey)?.push({ event, span, isPlaceholder: false, row });
|
|
191
|
+
// Invisible placeholders keep later days' rows aligned under the spanning event.
|
|
192
|
+
for (let offset = 1; offset < span; offset++) {
|
|
193
|
+
const nextDayIndex = dayIndex + offset;
|
|
194
|
+
const nextDay = days[nextDayIndex];
|
|
195
|
+
if (!nextDay)
|
|
196
|
+
break;
|
|
197
|
+
const nextDayKey = nextDay.toString();
|
|
198
|
+
renderMap.get(nextDayKey)?.push({ event, span: 0, isPlaceholder: true, row });
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
// biome-ignore lint/suspicious/useIterableCallbackReturn: This is a side effect
|
|
203
|
+
renderMap.forEach((events) => events.sort((a, b) => a.row - b.row));
|
|
204
|
+
return renderMap;
|
|
205
|
+
}, [calculateEventSpan, days, eventsByDay]);
|
|
206
|
+
return (jsxRuntime.jsxs("div", { className: cx.cx('flex flex-1 flex-col', className), children: [jsxRuntime.jsx("div", { className: "grid grid-cols-7", children: weekdays.map((weekday, index) => (
|
|
207
|
+
// biome-ignore lint/suspicious/noArrayIndexKey: This is a key for the column header
|
|
208
|
+
jsxRuntime.jsx(calendarColumnHeader.CalendarColumnHeader, { weekDay: weekday, className: "before:border-b" }, index))) }), jsxRuntime.jsx("div", { className: cx.cx('grid flex-1 grid-cols-7',
|
|
209
|
+
// 6 rows for >35 days (6 weeks), 5 rows for >28 days (5 weeks), 4 rows for <=28 days (4 weeks)
|
|
210
|
+
days.length > 35 ? 'grid-rows-6' : days.length > 28 ? 'grid-rows-5' : 'grid-rows-4'), children: days.map((date$1, index) => {
|
|
211
|
+
const dateKey = date$1.toString();
|
|
212
|
+
const isCurrentMonthFlag = date.isSameMonth(date$1, currentMonthDate);
|
|
213
|
+
const isTodayFlag = date.isToday(date$1, timeZone);
|
|
214
|
+
const isSelectedFlag = selectedDate ? date.isSameDay(date$1, selectedDate) : false;
|
|
215
|
+
const isLastRow = days.length > 35 ? index >= 35 : days.length > 28 ? index >= 28 : index >= 21;
|
|
216
|
+
const isLastColumn = (index + 1) % 7 === 0;
|
|
217
|
+
const eventsToRender = eventRenderMap.get(dateKey) || [];
|
|
218
|
+
const dayEvents = eventsByDay.get(dateKey) || [];
|
|
219
|
+
const eventsToShow = eventsToRender.slice(0, MAX_EVENTS_PER_CELL);
|
|
220
|
+
const remainingEventsCount = Math.max(0, dayEvents.length - MAX_EVENTS_PER_CELL);
|
|
221
|
+
return (jsxRuntime.jsxs(calendarMonthViewCell.CalendarMonthViewCell, { day: date$1.day, isDisabled: !isCurrentMonthFlag, state: isSelectedFlag ? 'selected' : isTodayFlag ? 'current' : 'default', className: cx.cx(isLastRow && 'before:border-b-0', isLastColumn && 'before:border-r-0'), onClick: () => isCurrentMonthFlag && setSelectedDate(date$1), "data-testid": prefix ? testIdUtils.joinTestId(prefix, `cell-${testIdUtils.slugifyTestId(dateKey)}`) : undefined, children: [jsxRuntime.jsx("div", { className: "flex gap-1 max-md:pl-1 md:flex-col", children: eventsToShow.map(({ event, span, isPlaceholder }) => {
|
|
222
|
+
// If this is a placeholder, render an invisible element to take up space
|
|
223
|
+
if (isPlaceholder) {
|
|
224
|
+
return (jsxRuntime.jsx("div", { className: "pointer-events-none opacity-0", children: jsxRuntime.jsx(calendarMonthViewEvent.CalendarMonthViewEvent, { label: event.title, collapseOnMobile: true, color: event.color, withDot: event.dot }) }, `${event.id}-placeholder`));
|
|
225
|
+
}
|
|
226
|
+
// Regular event rendering
|
|
227
|
+
const eventStartDay = date.toCalendarDate(event.start);
|
|
228
|
+
const eventEndDay = date.toCalendarDate(event.end);
|
|
229
|
+
const startsToday = date.isSameDay(date$1, eventStartDay);
|
|
230
|
+
const endsToday = date.isSameDay(date$1, eventEndDay);
|
|
231
|
+
const continuesPrior = eventStartDay.compare(date$1) < 0;
|
|
232
|
+
const continuesAfter = eventEndDay.compare(date$1) > 0;
|
|
233
|
+
// Boundary checks compare times, not calendar days: an event starts "at day start"
|
|
234
|
+
// only when it begins at midnight, and ends "at day end" when it ends at midnight
|
|
235
|
+
// (exclusive-end convention) or at 23:59:59.999 (inclusive-end convention).
|
|
236
|
+
const eventStartsAtDayStart = event.start.compare(calendar_utils.getStartOfDay(event.start, timeZone)) === 0;
|
|
237
|
+
const eventEndsAtDayEnd = event.end.compare(calendar_utils.getStartOfDay(event.end, timeZone)) === 0 || event.end.compare(calendar_utils.getEndOfDay(event.end, timeZone)) >= 0;
|
|
238
|
+
const isAllDayForCell = (continuesPrior && continuesAfter) ||
|
|
239
|
+
(startsToday && continuesAfter && eventStartsAtDayStart) ||
|
|
240
|
+
(continuesPrior && endsToday && eventEndsAtDayEnd) ||
|
|
241
|
+
(startsToday && endsToday && eventStartsAtDayStart && eventEndsAtDayEnd);
|
|
242
|
+
const supportingText = isAllDayForCell ? undefined : formatTimeForMonth(event.start);
|
|
243
|
+
// Apply custom width style for multi-day events
|
|
244
|
+
const spanStyle = span > 1
|
|
245
|
+
? {
|
|
246
|
+
zIndex: 1,
|
|
247
|
+
width: `calc(${span * 100}% + ${(span - 1) * 16}px)`,
|
|
248
|
+
}
|
|
249
|
+
: undefined;
|
|
250
|
+
return (jsxRuntime.jsx("div", { style: spanStyle, className: cx.cx(!isCurrentMonthFlag && 'opacity-50'), children: jsxRuntime.jsx(calendarMonthViewEvent.CalendarMonthViewEvent, { label: event.title, collapseOnMobile: true, supportingText: supportingText, color: event.color, withDot: event.dot, "data-testid": eventTestId(event.id) }) }, event.id));
|
|
251
|
+
}) }), remainingEventsCount > 0 && (jsxRuntime.jsx("div", { className: "truncate text-xs font-semibold text-utility-neutral-500 max-md:pl-1", children: `${remainingEventsCount} more...` }))] }, dateKey));
|
|
252
|
+
}) }), targetDateForFooter && (jsxRuntime.jsxs("div", { className: "border-t border-secondary px-4 py-5 md:hidden", children: [jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-primary", children: fullDateFormatter.format(targetDateForFooter.toDate(timeZone)) }), eventsForFooter.length > 0 && (jsxRuntime.jsx("div", { className: "mt-4 flex flex-col gap-1.5", children: eventsForFooter.slice(0, 3).map((event) => {
|
|
253
|
+
// "All day" when the event covers the entire displayed day. Comparing against the
|
|
254
|
+
// footer's target day (not the event's own end day) handles exclusive-end events
|
|
255
|
+
// (end = next midnight) and multi-day events spanning this day.
|
|
256
|
+
const dayStart = calendar_utils.getStartOfDay(targetDateForFooter, timeZone);
|
|
257
|
+
const dayEnd = calendar_utils.getEndOfDay(targetDateForFooter, timeZone);
|
|
258
|
+
const isAllDay = event.start.compare(dayStart) <= 0 && event.end.compare(dayEnd) >= 0;
|
|
259
|
+
const supportingText = isAllDay ? 'All day' : formatTimeForMonth(event.start);
|
|
260
|
+
return (jsxRuntime.jsx(calendarMonthViewEvent.CalendarMonthViewEvent, { label: event.title, supportingText: supportingText, color: event.color, withDot: event.dot, "data-testid": eventTestId(event.id) }, `footer-${event.id}`));
|
|
261
|
+
}) })), eventsForFooter.length === 0 && jsxRuntime.jsx("p", { className: "mt-4 text-xs font-semibold text-quaternary", children: "No events for this day." }), eventsForFooter.length > 3 && jsxRuntime.jsx("p", { className: "mt-4 text-xs font-semibold text-quaternary", children: `${eventsForFooter.length - 3} more...` })] }))] }));
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
exports.MonthView = MonthView;
|
|
265
|
+
//# sourceMappingURL=calendar-month-view.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-month-view.cjs","sources":["../../../../../src/components/organisms/Calendar/components/calendar-month-view.tsx"],"sourcesContent":[null],"names":["useTestIdPrefix","joinTestId","slugifyTestId","startOfMonth","endOfMonth","startOfWeek","endOfWeek","useMemo","getDaysInVisibleMonthGrid","today","toCalendarDate","getEventsForDay","isSameMonth","toZoned","getStartOfDay","getEndOfDay","isSameDay","useCallback","_jsxs","cx","_jsx","CalendarColumnHeader","date","isDateToday","CalendarMonthViewCell","CalendarMonthViewEvent"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CalendarDate } from '@internationalized/date';
|
|
2
|
+
import type { DateFormatter } from '@react-aria/i18n';
|
|
3
|
+
import { type ZonedEvent } from '../calendar.utils';
|
|
4
|
+
interface MonthViewProps {
|
|
5
|
+
currentMonthDate: CalendarDate;
|
|
6
|
+
selectedDate: CalendarDate | null;
|
|
7
|
+
zonedEvents: ZonedEvent[];
|
|
8
|
+
locale: string;
|
|
9
|
+
timeZone: string;
|
|
10
|
+
setSelectedDate: (date: CalendarDate) => void;
|
|
11
|
+
fullDateFormatter: DateFormatter;
|
|
12
|
+
shortWeekdayFormatter: DateFormatter;
|
|
13
|
+
timeFormatter: DateFormatter;
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const MonthView: ({ currentMonthDate, selectedDate, zonedEvents, locale, timeZone, setSelectedDate, fullDateFormatter, shortWeekdayFormatter, timeFormatter, className, }: MonthViewProps) => import("react").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=calendar-month-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-month-view.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Calendar/components/calendar-month-view.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,YAAY,EAYlB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAA0E,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAK5H,UAAU,cAAc;IACtB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,iBAAiB,EAAE,aAAa,CAAC;IACjC,qBAAqB,EAAE,aAAa,CAAC;IACrC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,GAAI,yJAWvB,cAAc,gCAkXhB,CAAC"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cx } from '@flipdish/ui-library/utilities/cx';
|
|
3
|
+
import { useTestIdPrefix, joinTestId, slugifyTestId } from '@flipdish/ui-library/utilities/testIdUtils';
|
|
4
|
+
import { startOfMonth, endOfMonth, startOfWeek, endOfWeek, today, toCalendarDate, isSameMonth, toZoned, isSameDay, isToday } from '@internationalized/date';
|
|
5
|
+
import { useMemo, useCallback } from 'react';
|
|
6
|
+
import { getDaysInVisibleMonthGrid, getEventsForDay, getStartOfDay, getEndOfDay } from '../calendar.utils.js';
|
|
7
|
+
import { CalendarColumnHeader } from './calendar-column-header.js';
|
|
8
|
+
import { CalendarMonthViewCell } from './calendar-month-view-cell.js';
|
|
9
|
+
import { CalendarMonthViewEvent } from './calendar-month-view-event.js';
|
|
10
|
+
|
|
11
|
+
const MonthView = ({ currentMonthDate, selectedDate, zonedEvents, locale, timeZone, setSelectedDate, fullDateFormatter, shortWeekdayFormatter, timeFormatter, // Needed for formatTime inside
|
|
12
|
+
className, }) => {
|
|
13
|
+
const prefix = useTestIdPrefix();
|
|
14
|
+
const eventTestId = (eventId) => (prefix ? joinTestId(prefix, `event-${slugifyTestId(eventId)}`) : undefined);
|
|
15
|
+
const monthStart = startOfMonth(currentMonthDate);
|
|
16
|
+
const monthEnd = endOfMonth(currentMonthDate);
|
|
17
|
+
const weekStart = startOfWeek(monthStart, locale);
|
|
18
|
+
const weekEnd = endOfWeek(monthEnd, locale);
|
|
19
|
+
const formatTimeForMonth = (dateTime) => timeFormatter.format(dateTime.toDate());
|
|
20
|
+
const days = useMemo(() => getDaysInVisibleMonthGrid(currentMonthDate, locale), [currentMonthDate, locale]);
|
|
21
|
+
const weekdays = useMemo(() => {
|
|
22
|
+
const firstDay = startOfWeek(today(timeZone), locale);
|
|
23
|
+
return Array.from({ length: 7 }).map((_, i) => shortWeekdayFormatter.format(firstDay.add({ days: i }).toDate(timeZone)));
|
|
24
|
+
}, [locale, timeZone, shortWeekdayFormatter]); // Dependencies are passed in
|
|
25
|
+
const visibleEvents = zonedEvents.filter((event) => {
|
|
26
|
+
const eventStartDay = toCalendarDate(event.start);
|
|
27
|
+
const eventEndDay = toCalendarDate(event.end);
|
|
28
|
+
return eventStartDay.compare(weekEnd) <= 0 && eventEndDay.compare(weekStart) >= 0;
|
|
29
|
+
});
|
|
30
|
+
const eventsByDay = useMemo(() => {
|
|
31
|
+
const map = new Map();
|
|
32
|
+
days.forEach((day) => {
|
|
33
|
+
const dateKey = day.toString();
|
|
34
|
+
const dayEvents = getEventsForDay(visibleEvents, day, timeZone);
|
|
35
|
+
map.set(dateKey, dayEvents);
|
|
36
|
+
});
|
|
37
|
+
return map;
|
|
38
|
+
}, [days, visibleEvents, timeZone]); // Dependencies: days array, visible events, timezone
|
|
39
|
+
const MAX_EVENTS_PER_CELL = 3;
|
|
40
|
+
const todayCalDate = today(timeZone);
|
|
41
|
+
const targetDateForFooter = selectedDate || (isSameMonth(currentMonthDate, todayCalDate) ? todayCalDate : null);
|
|
42
|
+
let eventsForFooter = [];
|
|
43
|
+
if (targetDateForFooter) {
|
|
44
|
+
const targetZoned = toZoned(targetDateForFooter, timeZone);
|
|
45
|
+
const targetZonedStart = getStartOfDay(targetZoned, timeZone);
|
|
46
|
+
const targetZonedEnd = getEndOfDay(targetZoned, timeZone);
|
|
47
|
+
eventsForFooter = zonedEvents
|
|
48
|
+
.filter((event) => {
|
|
49
|
+
const eventStartDay = toCalendarDate(event.start);
|
|
50
|
+
const eventEndDay = toCalendarDate(event.end);
|
|
51
|
+
return (isSameDay(eventStartDay, targetDateForFooter) ||
|
|
52
|
+
isSameDay(eventEndDay, targetDateForFooter) ||
|
|
53
|
+
(event.start.compare(targetZonedEnd) < 0 && event.end.compare(targetZonedStart) > 0));
|
|
54
|
+
})
|
|
55
|
+
.sort((a, b) => a.start.compare(b.start));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Calculates how many days an event should visually span from a given start date.
|
|
59
|
+
*
|
|
60
|
+
* Multi-day events are rendered as a single element that spans multiple cells.
|
|
61
|
+
* To avoid duplicate rendering:
|
|
62
|
+
* - Events render only on their start day
|
|
63
|
+
* - Multi-week events re-render at the start of each new week they span
|
|
64
|
+
*
|
|
65
|
+
* @returns Number of days to span, or null if event should not render on this day
|
|
66
|
+
*/
|
|
67
|
+
const calculateEventSpan = useCallback((event, currentDate) => {
|
|
68
|
+
const eventStartDay = toCalendarDate(event.start);
|
|
69
|
+
const eventEndDay = toCalendarDate(event.end);
|
|
70
|
+
const startsOnThisDay = isSameDay(currentDate, eventStartDay);
|
|
71
|
+
if (!startsOnThisDay && eventStartDay.compare(currentDate) < 0) {
|
|
72
|
+
const currentDayIndex = days.findIndex((d) => isSameDay(d, currentDate));
|
|
73
|
+
const weekStartIndex = Math.floor(currentDayIndex / 7) * 7;
|
|
74
|
+
const weekStartDate = days[weekStartIndex];
|
|
75
|
+
if (!weekStartDate)
|
|
76
|
+
return null;
|
|
77
|
+
const isFirstDayOfWeek = isSameDay(currentDate, weekStartDate);
|
|
78
|
+
// Only render at week boundaries for multi-week events
|
|
79
|
+
if (!isFirstDayOfWeek) {
|
|
80
|
+
return null; // Already rendered earlier in this week
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const currentDayIndex = days.findIndex((d) => isSameDay(d, currentDate));
|
|
84
|
+
const weekEndIndex = Math.floor(currentDayIndex / 7) * 7 + 6;
|
|
85
|
+
let spanDays = 1;
|
|
86
|
+
let checkDay = currentDate.add({ days: 1 });
|
|
87
|
+
let checkDayIndex = currentDayIndex + 1;
|
|
88
|
+
while (checkDayIndex <= weekEndIndex && checkDay.compare(eventEndDay) <= 0) {
|
|
89
|
+
spanDays++;
|
|
90
|
+
checkDay = checkDay.add({ days: 1 });
|
|
91
|
+
checkDayIndex++;
|
|
92
|
+
}
|
|
93
|
+
return spanDays;
|
|
94
|
+
}, [days]);
|
|
95
|
+
/**
|
|
96
|
+
* Creates an optimized layout for multi-day events using a row-packing algorithm.
|
|
97
|
+
*
|
|
98
|
+
* Key concepts:
|
|
99
|
+
* 1. Each event is assigned to a "row" (vertical position within a day cell)
|
|
100
|
+
* 2. Events spanning multiple days create invisible "placeholder" cells to reserve space
|
|
101
|
+
* 3. Row assignment uses a greedy algorithm to minimize wasted vertical space
|
|
102
|
+
* 4. Multi-week events can use different rows in each week for optimal packing
|
|
103
|
+
*
|
|
104
|
+
* Example: If Event A (Mon-Wed) is in row 0, Event B (Thu-Fri) can also use row 0
|
|
105
|
+
* because they don't overlap, preventing wasted space.
|
|
106
|
+
*/
|
|
107
|
+
const eventRenderMap = useMemo(() => {
|
|
108
|
+
const renderMap = new Map();
|
|
109
|
+
// biome-ignore lint/suspicious/useIterableCallbackReturn: This is a side effect
|
|
110
|
+
days.forEach((day) => renderMap.set(day.toString(), []));
|
|
111
|
+
const eventRowAssignments = new Map(); // eventId -> row number
|
|
112
|
+
const rowOccupancyByDay = new Map(); // dateKey -> [row0: Set<eventId>, row1: Set<eventId>, ...]
|
|
113
|
+
// biome-ignore lint/suspicious/useIterableCallbackReturn: This is a side effect
|
|
114
|
+
days.forEach((day) => rowOccupancyByDay.set(day.toString(), []));
|
|
115
|
+
/** Whether a multi-week event re-starts its rendering at this week's first day. */
|
|
116
|
+
const isWeekBoundaryStart = (dayIndex, eventStartDay, currentDay) => {
|
|
117
|
+
const startsOnCurrentDay = isSameDay(currentDay, eventStartDay);
|
|
118
|
+
if (startsOnCurrentDay)
|
|
119
|
+
return false;
|
|
120
|
+
const weekStartIndex = Math.floor(dayIndex / 7) * 7;
|
|
121
|
+
const weekStartDate = days[weekStartIndex];
|
|
122
|
+
if (!weekStartDate)
|
|
123
|
+
return false;
|
|
124
|
+
return isSameDay(currentDay, weekStartDate);
|
|
125
|
+
};
|
|
126
|
+
/** First row index free across every day the event spans. */
|
|
127
|
+
const findAvailableRow = (startDayIndex, span) => {
|
|
128
|
+
let row = 0;
|
|
129
|
+
while (true) {
|
|
130
|
+
let isAvailable = true;
|
|
131
|
+
for (let offset = 0; offset < span; offset++) {
|
|
132
|
+
const dayIndex = startDayIndex + offset;
|
|
133
|
+
const day = days[dayIndex];
|
|
134
|
+
if (!day)
|
|
135
|
+
break;
|
|
136
|
+
const dayKey = day.toString();
|
|
137
|
+
const occupancy = rowOccupancyByDay.get(dayKey);
|
|
138
|
+
if ((occupancy?.[row]?.size ?? 0) > 0) {
|
|
139
|
+
isAvailable = false;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (isAvailable)
|
|
144
|
+
return row;
|
|
145
|
+
row++;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
/** Marks `row` occupied for every day the event spans. */
|
|
149
|
+
const markRowAsOccupied = (startDayIndex, span, row, eventId) => {
|
|
150
|
+
for (let offset = 0; offset < span; offset++) {
|
|
151
|
+
const dayIndex = startDayIndex + offset;
|
|
152
|
+
const day = days[dayIndex];
|
|
153
|
+
if (!day)
|
|
154
|
+
break;
|
|
155
|
+
const dayKey = day.toString();
|
|
156
|
+
const occupancy = rowOccupancyByDay.get(dayKey);
|
|
157
|
+
if (!occupancy)
|
|
158
|
+
break;
|
|
159
|
+
let cell = occupancy[row];
|
|
160
|
+
if (!cell) {
|
|
161
|
+
cell = new Set();
|
|
162
|
+
occupancy[row] = cell;
|
|
163
|
+
}
|
|
164
|
+
cell.add(eventId);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
days.forEach((day, dayIndex) => {
|
|
168
|
+
const dateKey = day.toString();
|
|
169
|
+
const eventsOnThisDay = eventsByDay.get(dateKey) || [];
|
|
170
|
+
eventsOnThisDay.forEach((event) => {
|
|
171
|
+
const span = calculateEventSpan(event, day);
|
|
172
|
+
if (span === null)
|
|
173
|
+
return; // Event doesn't render on this day
|
|
174
|
+
const eventStartDay = toCalendarDate(event.start);
|
|
175
|
+
const isNewWeekSegment = isWeekBoundaryStart(dayIndex, eventStartDay, day);
|
|
176
|
+
const hasExistingRow = eventRowAssignments.has(event.id);
|
|
177
|
+
// Reuse the event's row within a week; a new week segment gets a fresh row.
|
|
178
|
+
let row;
|
|
179
|
+
if (hasExistingRow && !isNewWeekSegment) {
|
|
180
|
+
// biome-ignore lint/style/noNonNullAssertion: guarded by hasExistingRow (eventRowAssignments.has(event.id)) above
|
|
181
|
+
row = eventRowAssignments.get(event.id);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
row = findAvailableRow(dayIndex, span);
|
|
185
|
+
eventRowAssignments.set(event.id, row);
|
|
186
|
+
}
|
|
187
|
+
markRowAsOccupied(dayIndex, span, row, event.id);
|
|
188
|
+
renderMap.get(dateKey)?.push({ event, span, isPlaceholder: false, row });
|
|
189
|
+
// Invisible placeholders keep later days' rows aligned under the spanning event.
|
|
190
|
+
for (let offset = 1; offset < span; offset++) {
|
|
191
|
+
const nextDayIndex = dayIndex + offset;
|
|
192
|
+
const nextDay = days[nextDayIndex];
|
|
193
|
+
if (!nextDay)
|
|
194
|
+
break;
|
|
195
|
+
const nextDayKey = nextDay.toString();
|
|
196
|
+
renderMap.get(nextDayKey)?.push({ event, span: 0, isPlaceholder: true, row });
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
// biome-ignore lint/suspicious/useIterableCallbackReturn: This is a side effect
|
|
201
|
+
renderMap.forEach((events) => events.sort((a, b) => a.row - b.row));
|
|
202
|
+
return renderMap;
|
|
203
|
+
}, [calculateEventSpan, days, eventsByDay]);
|
|
204
|
+
return (jsxs("div", { className: cx('flex flex-1 flex-col', className), children: [jsx("div", { className: "grid grid-cols-7", children: weekdays.map((weekday, index) => (
|
|
205
|
+
// biome-ignore lint/suspicious/noArrayIndexKey: This is a key for the column header
|
|
206
|
+
jsx(CalendarColumnHeader, { weekDay: weekday, className: "before:border-b" }, index))) }), jsx("div", { className: cx('grid flex-1 grid-cols-7',
|
|
207
|
+
// 6 rows for >35 days (6 weeks), 5 rows for >28 days (5 weeks), 4 rows for <=28 days (4 weeks)
|
|
208
|
+
days.length > 35 ? 'grid-rows-6' : days.length > 28 ? 'grid-rows-5' : 'grid-rows-4'), children: days.map((date, index) => {
|
|
209
|
+
const dateKey = date.toString();
|
|
210
|
+
const isCurrentMonthFlag = isSameMonth(date, currentMonthDate);
|
|
211
|
+
const isTodayFlag = isToday(date, timeZone);
|
|
212
|
+
const isSelectedFlag = selectedDate ? isSameDay(date, selectedDate) : false;
|
|
213
|
+
const isLastRow = days.length > 35 ? index >= 35 : days.length > 28 ? index >= 28 : index >= 21;
|
|
214
|
+
const isLastColumn = (index + 1) % 7 === 0;
|
|
215
|
+
const eventsToRender = eventRenderMap.get(dateKey) || [];
|
|
216
|
+
const dayEvents = eventsByDay.get(dateKey) || [];
|
|
217
|
+
const eventsToShow = eventsToRender.slice(0, MAX_EVENTS_PER_CELL);
|
|
218
|
+
const remainingEventsCount = Math.max(0, dayEvents.length - MAX_EVENTS_PER_CELL);
|
|
219
|
+
return (jsxs(CalendarMonthViewCell, { day: date.day, isDisabled: !isCurrentMonthFlag, state: isSelectedFlag ? 'selected' : isTodayFlag ? 'current' : 'default', className: cx(isLastRow && 'before:border-b-0', isLastColumn && 'before:border-r-0'), onClick: () => isCurrentMonthFlag && setSelectedDate(date), "data-testid": prefix ? joinTestId(prefix, `cell-${slugifyTestId(dateKey)}`) : undefined, children: [jsx("div", { className: "flex gap-1 max-md:pl-1 md:flex-col", children: eventsToShow.map(({ event, span, isPlaceholder }) => {
|
|
220
|
+
// If this is a placeholder, render an invisible element to take up space
|
|
221
|
+
if (isPlaceholder) {
|
|
222
|
+
return (jsx("div", { className: "pointer-events-none opacity-0", children: jsx(CalendarMonthViewEvent, { label: event.title, collapseOnMobile: true, color: event.color, withDot: event.dot }) }, `${event.id}-placeholder`));
|
|
223
|
+
}
|
|
224
|
+
// Regular event rendering
|
|
225
|
+
const eventStartDay = toCalendarDate(event.start);
|
|
226
|
+
const eventEndDay = toCalendarDate(event.end);
|
|
227
|
+
const startsToday = isSameDay(date, eventStartDay);
|
|
228
|
+
const endsToday = isSameDay(date, eventEndDay);
|
|
229
|
+
const continuesPrior = eventStartDay.compare(date) < 0;
|
|
230
|
+
const continuesAfter = eventEndDay.compare(date) > 0;
|
|
231
|
+
// Boundary checks compare times, not calendar days: an event starts "at day start"
|
|
232
|
+
// only when it begins at midnight, and ends "at day end" when it ends at midnight
|
|
233
|
+
// (exclusive-end convention) or at 23:59:59.999 (inclusive-end convention).
|
|
234
|
+
const eventStartsAtDayStart = event.start.compare(getStartOfDay(event.start, timeZone)) === 0;
|
|
235
|
+
const eventEndsAtDayEnd = event.end.compare(getStartOfDay(event.end, timeZone)) === 0 || event.end.compare(getEndOfDay(event.end, timeZone)) >= 0;
|
|
236
|
+
const isAllDayForCell = (continuesPrior && continuesAfter) ||
|
|
237
|
+
(startsToday && continuesAfter && eventStartsAtDayStart) ||
|
|
238
|
+
(continuesPrior && endsToday && eventEndsAtDayEnd) ||
|
|
239
|
+
(startsToday && endsToday && eventStartsAtDayStart && eventEndsAtDayEnd);
|
|
240
|
+
const supportingText = isAllDayForCell ? undefined : formatTimeForMonth(event.start);
|
|
241
|
+
// Apply custom width style for multi-day events
|
|
242
|
+
const spanStyle = span > 1
|
|
243
|
+
? {
|
|
244
|
+
zIndex: 1,
|
|
245
|
+
width: `calc(${span * 100}% + ${(span - 1) * 16}px)`,
|
|
246
|
+
}
|
|
247
|
+
: undefined;
|
|
248
|
+
return (jsx("div", { style: spanStyle, className: cx(!isCurrentMonthFlag && 'opacity-50'), children: jsx(CalendarMonthViewEvent, { label: event.title, collapseOnMobile: true, supportingText: supportingText, color: event.color, withDot: event.dot, "data-testid": eventTestId(event.id) }) }, event.id));
|
|
249
|
+
}) }), remainingEventsCount > 0 && (jsx("div", { className: "truncate text-xs font-semibold text-utility-neutral-500 max-md:pl-1", children: `${remainingEventsCount} more...` }))] }, dateKey));
|
|
250
|
+
}) }), targetDateForFooter && (jsxs("div", { className: "border-t border-secondary px-4 py-5 md:hidden", children: [jsx("h3", { className: "text-sm font-semibold text-primary", children: fullDateFormatter.format(targetDateForFooter.toDate(timeZone)) }), eventsForFooter.length > 0 && (jsx("div", { className: "mt-4 flex flex-col gap-1.5", children: eventsForFooter.slice(0, 3).map((event) => {
|
|
251
|
+
// "All day" when the event covers the entire displayed day. Comparing against the
|
|
252
|
+
// footer's target day (not the event's own end day) handles exclusive-end events
|
|
253
|
+
// (end = next midnight) and multi-day events spanning this day.
|
|
254
|
+
const dayStart = getStartOfDay(targetDateForFooter, timeZone);
|
|
255
|
+
const dayEnd = getEndOfDay(targetDateForFooter, timeZone);
|
|
256
|
+
const isAllDay = event.start.compare(dayStart) <= 0 && event.end.compare(dayEnd) >= 0;
|
|
257
|
+
const supportingText = isAllDay ? 'All day' : formatTimeForMonth(event.start);
|
|
258
|
+
return (jsx(CalendarMonthViewEvent, { label: event.title, supportingText: supportingText, color: event.color, withDot: event.dot, "data-testid": eventTestId(event.id) }, `footer-${event.id}`));
|
|
259
|
+
}) })), eventsForFooter.length === 0 && jsx("p", { className: "mt-4 text-xs font-semibold text-quaternary", children: "No events for this day." }), eventsForFooter.length > 3 && jsx("p", { className: "mt-4 text-xs font-semibold text-quaternary", children: `${eventsForFooter.length - 3} more...` })] }))] }));
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
export { MonthView };
|
|
263
|
+
//# sourceMappingURL=calendar-month-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-month-view.js","sources":["../../../../../src/components/organisms/Calendar/components/calendar-month-view.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx","isDateToday"],"mappings":"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"}
|