@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.
Files changed (244) hide show
  1. package/dist/components/__internal__/statusIcon/statusIcon.types.d.ts +12 -0
  2. package/dist/components/__internal__/statusIcon/statusIcon.types.d.ts.map +1 -0
  3. package/dist/components/__internal__/statusIcon/statusIcon.utils.cjs +21 -0
  4. package/dist/components/__internal__/statusIcon/statusIcon.utils.cjs.map +1 -0
  5. package/dist/components/__internal__/statusIcon/statusIcon.utils.d.ts +5 -0
  6. package/dist/components/__internal__/statusIcon/statusIcon.utils.d.ts.map +1 -0
  7. package/dist/components/__internal__/statusIcon/statusIcon.utils.js +19 -0
  8. package/dist/components/__internal__/statusIcon/statusIcon.utils.js.map +1 -0
  9. package/dist/components/atoms/BackgroundPattern/components/grid-check.cjs +14 -7
  10. package/dist/components/atoms/BackgroundPattern/components/grid-check.cjs.map +1 -1
  11. package/dist/components/atoms/BackgroundPattern/components/grid-check.d.ts.map +1 -1
  12. package/dist/components/atoms/BackgroundPattern/components/grid-check.js +14 -7
  13. package/dist/components/atoms/BackgroundPattern/components/grid-check.js.map +1 -1
  14. package/dist/components/atoms/BackgroundPattern/index.d.ts.map +1 -1
  15. package/dist/components/atoms/Badge/index.cjs +16 -3
  16. package/dist/components/atoms/Badge/index.cjs.map +1 -1
  17. package/dist/components/atoms/Badge/index.d.ts +13 -24
  18. package/dist/components/atoms/Badge/index.d.ts.map +1 -1
  19. package/dist/components/atoms/Badge/index.js +16 -3
  20. package/dist/components/atoms/Badge/index.js.map +1 -1
  21. package/dist/components/atoms/Dot/Dot.styles.cjs +51 -0
  22. package/dist/components/atoms/Dot/Dot.styles.cjs.map +1 -0
  23. package/dist/components/atoms/Dot/Dot.styles.d.ts +109 -0
  24. package/dist/components/atoms/Dot/Dot.styles.d.ts.map +1 -0
  25. package/dist/components/atoms/Dot/Dot.styles.js +49 -0
  26. package/dist/components/atoms/Dot/Dot.styles.js.map +1 -0
  27. package/dist/components/atoms/Dot/index.cjs +5 -14
  28. package/dist/components/atoms/Dot/index.cjs.map +1 -1
  29. package/dist/components/atoms/Dot/index.d.ts +11 -3
  30. package/dist/components/atoms/Dot/index.d.ts.map +1 -1
  31. package/dist/components/atoms/Dot/index.js +5 -14
  32. package/dist/components/atoms/Dot/index.js.map +1 -1
  33. package/dist/components/molecules/Alert/index.cjs +3 -11
  34. package/dist/components/molecules/Alert/index.cjs.map +1 -1
  35. package/dist/components/molecules/Alert/index.d.ts +3 -2
  36. package/dist/components/molecules/Alert/index.d.ts.map +1 -1
  37. package/dist/components/molecules/Alert/index.js +3 -11
  38. package/dist/components/molecules/Alert/index.js.map +1 -1
  39. package/dist/components/molecules/Carousel/index.cjs +1 -1
  40. package/dist/components/molecules/Carousel/index.cjs.map +1 -1
  41. package/dist/components/molecules/Carousel/index.js +1 -1
  42. package/dist/components/molecules/Carousel/index.js.map +1 -1
  43. package/dist/components/molecules/Notification/index.cjs +3 -10
  44. package/dist/components/molecules/Notification/index.cjs.map +1 -1
  45. package/dist/components/molecules/Notification/index.d.ts +2 -1
  46. package/dist/components/molecules/Notification/index.d.ts.map +1 -1
  47. package/dist/components/molecules/Notification/index.js +3 -10
  48. package/dist/components/molecules/Notification/index.js.map +1 -1
  49. package/dist/components/molecules/Pagination/index.cjs +4 -4
  50. package/dist/components/molecules/Pagination/index.cjs.map +1 -1
  51. package/dist/components/molecules/Pagination/index.js +5 -5
  52. package/dist/components/molecules/Pagination/index.js.map +1 -1
  53. package/dist/components/molecules/Tags/index.cjs +1 -1
  54. package/dist/components/molecules/Tags/index.cjs.map +1 -1
  55. package/dist/components/molecules/Tags/index.js +1 -1
  56. package/dist/components/molecules/Tags/index.js.map +1 -1
  57. package/dist/components/organisms/ActivityFeed/index.cjs +1 -1
  58. package/dist/components/organisms/ActivityFeed/index.cjs.map +1 -1
  59. package/dist/components/organisms/ActivityFeed/index.js +1 -1
  60. package/dist/components/organisms/ActivityFeed/index.js.map +1 -1
  61. package/dist/components/organisms/Calendar/calendar.utils.cjs +41 -0
  62. package/dist/components/organisms/Calendar/calendar.utils.cjs.map +1 -1
  63. package/dist/components/organisms/Calendar/calendar.utils.d.ts +20 -0
  64. package/dist/components/organisms/Calendar/calendar.utils.d.ts.map +1 -1
  65. package/dist/components/organisms/Calendar/calendar.utils.js +37 -1
  66. package/dist/components/organisms/Calendar/calendar.utils.js.map +1 -1
  67. package/dist/components/organisms/Calendar/components/calendar-day-view.cjs +86 -0
  68. package/dist/components/organisms/Calendar/components/calendar-day-view.cjs.map +1 -0
  69. package/dist/components/organisms/Calendar/components/calendar-day-view.d.ts +20 -0
  70. package/dist/components/organisms/Calendar/components/calendar-day-view.d.ts.map +1 -0
  71. package/dist/components/organisms/Calendar/components/calendar-day-view.js +84 -0
  72. package/dist/components/organisms/Calendar/components/calendar-day-view.js.map +1 -0
  73. package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.cjs +21 -0
  74. package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.cjs.map +1 -0
  75. package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.d.ts +16 -0
  76. package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.d.ts.map +1 -0
  77. package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.js +19 -0
  78. package/dist/components/organisms/Calendar/components/calendar-mobile-day-grid.js.map +1 -0
  79. package/dist/components/organisms/Calendar/components/calendar-month-view.cjs +265 -0
  80. package/dist/components/organisms/Calendar/components/calendar-month-view.cjs.map +1 -0
  81. package/dist/components/organisms/Calendar/components/calendar-month-view.d.ts +18 -0
  82. package/dist/components/organisms/Calendar/components/calendar-month-view.d.ts.map +1 -0
  83. package/dist/components/organisms/Calendar/components/calendar-month-view.js +263 -0
  84. package/dist/components/organisms/Calendar/components/calendar-month-view.js.map +1 -0
  85. package/dist/components/organisms/Calendar/components/calendar-positioned-event.cjs +41 -0
  86. package/dist/components/organisms/Calendar/components/calendar-positioned-event.cjs.map +1 -0
  87. package/dist/components/organisms/Calendar/components/calendar-positioned-event.d.ts +15 -0
  88. package/dist/components/organisms/Calendar/components/calendar-positioned-event.d.ts.map +1 -0
  89. package/dist/components/organisms/Calendar/components/calendar-positioned-event.js +39 -0
  90. package/dist/components/organisms/Calendar/components/calendar-positioned-event.js.map +1 -0
  91. package/dist/components/organisms/Calendar/components/calendar-week-view-day.cjs +23 -0
  92. package/dist/components/organisms/Calendar/components/calendar-week-view-day.cjs.map +1 -0
  93. package/dist/components/organisms/Calendar/components/calendar-week-view-day.d.ts +15 -0
  94. package/dist/components/organisms/Calendar/components/calendar-week-view-day.d.ts.map +1 -0
  95. package/dist/components/organisms/Calendar/components/calendar-week-view-day.js +21 -0
  96. package/dist/components/organisms/Calendar/components/calendar-week-view-day.js.map +1 -0
  97. package/dist/components/organisms/Calendar/components/calendar-week-view.cjs +77 -0
  98. package/dist/components/organisms/Calendar/components/calendar-week-view.cjs.map +1 -0
  99. package/dist/components/organisms/Calendar/components/calendar-week-view.d.ts +20 -0
  100. package/dist/components/organisms/Calendar/components/calendar-week-view.d.ts.map +1 -0
  101. package/dist/components/organisms/Calendar/components/calendar-week-view.js +75 -0
  102. package/dist/components/organisms/Calendar/components/calendar-week-view.js.map +1 -0
  103. package/dist/components/organisms/Calendar/index.cjs +4 -504
  104. package/dist/components/organisms/Calendar/index.cjs.map +1 -1
  105. package/dist/components/organisms/Calendar/index.d.ts +1 -1
  106. package/dist/components/organisms/Calendar/index.d.ts.map +1 -1
  107. package/dist/components/organisms/Calendar/index.js +6 -506
  108. package/dist/components/organisms/Calendar/index.js.map +1 -1
  109. package/dist/components/organisms/Charts/components/activity-gauge.cjs +4 -0
  110. package/dist/components/organisms/Charts/components/activity-gauge.cjs.map +1 -1
  111. package/dist/components/organisms/Charts/components/activity-gauge.d.ts +4 -0
  112. package/dist/components/organisms/Charts/components/activity-gauge.d.ts.map +1 -1
  113. package/dist/components/organisms/Charts/components/activity-gauge.js +4 -0
  114. package/dist/components/organisms/Charts/components/activity-gauge.js.map +1 -1
  115. package/dist/components/organisms/Charts/components/bar-chart.cjs +1 -1
  116. package/dist/components/organisms/Charts/components/bar-chart.cjs.map +1 -1
  117. package/dist/components/organisms/Charts/components/bar-chart.d.ts +1 -2
  118. package/dist/components/organisms/Charts/components/bar-chart.d.ts.map +1 -1
  119. package/dist/components/organisms/Charts/components/bar-chart.js +2 -2
  120. package/dist/components/organisms/Charts/components/bar-chart.js.map +1 -1
  121. package/dist/components/organisms/Charts/components/charts-base.cjs +1 -2
  122. package/dist/components/organisms/Charts/components/charts-base.cjs.map +1 -1
  123. package/dist/components/organisms/Charts/components/charts-base.d.ts +13 -2
  124. package/dist/components/organisms/Charts/components/charts-base.d.ts.map +1 -1
  125. package/dist/components/organisms/Charts/components/charts-base.js +1 -2
  126. package/dist/components/organisms/Charts/components/charts-base.js.map +1 -1
  127. package/dist/components/organisms/Charts/components/line-chart.cjs +1 -1
  128. package/dist/components/organisms/Charts/components/line-chart.cjs.map +1 -1
  129. package/dist/components/organisms/Charts/components/line-chart.d.ts +1 -2
  130. package/dist/components/organisms/Charts/components/line-chart.d.ts.map +1 -1
  131. package/dist/components/organisms/Charts/components/line-chart.js +2 -2
  132. package/dist/components/organisms/Charts/components/line-chart.js.map +1 -1
  133. package/dist/components/organisms/Charts/components/pie-chart.cjs +5 -0
  134. package/dist/components/organisms/Charts/components/pie-chart.cjs.map +1 -1
  135. package/dist/components/organisms/Charts/components/pie-chart.d.ts +6 -2
  136. package/dist/components/organisms/Charts/components/pie-chart.d.ts.map +1 -1
  137. package/dist/components/organisms/Charts/components/pie-chart.js +5 -0
  138. package/dist/components/organisms/Charts/components/pie-chart.js.map +1 -1
  139. package/dist/components/organisms/Charts/components/radar-chart.cjs +3 -4
  140. package/dist/components/organisms/Charts/components/radar-chart.cjs.map +1 -1
  141. package/dist/components/organisms/Charts/components/radar-chart.d.ts.map +1 -1
  142. package/dist/components/organisms/Charts/components/radar-chart.js +3 -4
  143. package/dist/components/organisms/Charts/components/radar-chart.js.map +1 -1
  144. package/dist/components/organisms/DatePicker/components/range-calendar.cjs +1 -1
  145. package/dist/components/organisms/DatePicker/components/range-calendar.cjs.map +1 -1
  146. package/dist/components/organisms/DatePicker/components/range-calendar.js +2 -2
  147. package/dist/components/organisms/DatePicker/components/range-calendar.js.map +1 -1
  148. package/dist/components/organisms/GradientPicker/components/gradient-area.cjs +157 -0
  149. package/dist/components/organisms/GradientPicker/components/gradient-area.cjs.map +1 -0
  150. package/dist/components/organisms/GradientPicker/components/gradient-area.d.ts +17 -0
  151. package/dist/components/organisms/GradientPicker/components/gradient-area.d.ts.map +1 -0
  152. package/dist/components/organisms/GradientPicker/components/gradient-area.js +155 -0
  153. package/dist/components/organisms/GradientPicker/components/gradient-area.js.map +1 -0
  154. package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.cjs +17 -0
  155. package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.cjs.map +1 -0
  156. package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.d.ts +3 -0
  157. package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.d.ts.map +1 -0
  158. package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.js +15 -0
  159. package/dist/components/organisms/GradientPicker/components/gradient-reverse-button.js.map +1 -0
  160. package/dist/components/organisms/GradientPicker/components/gradient-slider.cjs +71 -0
  161. package/dist/components/organisms/GradientPicker/components/gradient-slider.cjs.map +1 -0
  162. package/dist/components/organisms/GradientPicker/components/gradient-slider.d.ts +7 -0
  163. package/dist/components/organisms/GradientPicker/components/gradient-slider.d.ts.map +1 -0
  164. package/dist/components/organisms/GradientPicker/components/gradient-slider.js +69 -0
  165. package/dist/components/organisms/GradientPicker/components/gradient-slider.js.map +1 -0
  166. package/dist/components/organisms/GradientPicker/components/gradient-stop-list.cjs +18 -0
  167. package/dist/components/organisms/GradientPicker/components/gradient-stop-list.cjs.map +1 -0
  168. package/dist/components/organisms/GradientPicker/components/gradient-stop-list.d.ts +4 -0
  169. package/dist/components/organisms/GradientPicker/components/gradient-stop-list.d.ts.map +1 -0
  170. package/dist/components/organisms/GradientPicker/components/gradient-stop-list.js +16 -0
  171. package/dist/components/organisms/GradientPicker/components/gradient-stop-list.js.map +1 -0
  172. package/dist/components/organisms/GradientPicker/components/gradient-stop-row.cjs +49 -0
  173. package/dist/components/organisms/GradientPicker/components/gradient-stop-row.cjs.map +1 -0
  174. package/dist/components/organisms/GradientPicker/components/gradient-stop-row.d.ts +6 -0
  175. package/dist/components/organisms/GradientPicker/components/gradient-stop-row.d.ts.map +1 -0
  176. package/dist/components/organisms/GradientPicker/components/gradient-stop-row.js +47 -0
  177. package/dist/components/organisms/GradientPicker/components/gradient-stop-row.js.map +1 -0
  178. package/dist/components/organisms/GradientPicker/components/gradient-type-select.cjs +28 -0
  179. package/dist/components/organisms/GradientPicker/components/gradient-type-select.cjs.map +1 -0
  180. package/dist/components/organisms/GradientPicker/components/gradient-type-select.d.ts +3 -0
  181. package/dist/components/organisms/GradientPicker/components/gradient-type-select.d.ts.map +1 -0
  182. package/dist/components/organisms/GradientPicker/components/gradient-type-select.js +26 -0
  183. package/dist/components/organisms/GradientPicker/components/gradient-type-select.js.map +1 -0
  184. package/dist/components/organisms/GradientPicker/components/position-input.cjs +43 -0
  185. package/dist/components/organisms/GradientPicker/components/position-input.cjs.map +1 -0
  186. package/dist/components/organisms/GradientPicker/components/position-input.d.ts +6 -0
  187. package/dist/components/organisms/GradientPicker/components/position-input.d.ts.map +1 -0
  188. package/dist/components/organisms/GradientPicker/components/position-input.js +41 -0
  189. package/dist/components/organisms/GradientPicker/components/position-input.js.map +1 -0
  190. package/dist/components/organisms/GradientPicker/index.cjs +11 -327
  191. package/dist/components/organisms/GradientPicker/index.cjs.map +1 -1
  192. package/dist/components/organisms/GradientPicker/index.d.ts +7 -8
  193. package/dist/components/organisms/GradientPicker/index.d.ts.map +1 -1
  194. package/dist/components/organisms/GradientPicker/index.js +7 -323
  195. package/dist/components/organisms/GradientPicker/index.js.map +1 -1
  196. package/dist/components/organisms/HeaderNavigation/components/nav-account-card.cjs +1 -1
  197. package/dist/components/organisms/HeaderNavigation/components/nav-account-card.cjs.map +1 -1
  198. package/dist/components/organisms/HeaderNavigation/components/nav-account-card.js +2 -2
  199. package/dist/components/organisms/HeaderNavigation/components/nav-account-card.js.map +1 -1
  200. package/dist/components/organisms/HeaderNavigation/components/nav-button.cjs +1 -1
  201. package/dist/components/organisms/HeaderNavigation/components/nav-button.cjs.map +1 -1
  202. package/dist/components/organisms/HeaderNavigation/components/nav-button.d.ts.map +1 -1
  203. package/dist/components/organisms/HeaderNavigation/components/nav-button.js +1 -1
  204. package/dist/components/organisms/HeaderNavigation/components/nav-button.js.map +1 -1
  205. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.cjs +1 -1
  206. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.cjs.map +1 -1
  207. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.js +2 -2
  208. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.js.map +1 -1
  209. package/dist/components/organisms/SidebarNavigation/index.cjs +1 -1
  210. package/dist/components/organisms/SidebarNavigation/index.cjs.map +1 -1
  211. package/dist/components/organisms/SidebarNavigation/index.js +2 -2
  212. package/dist/components/organisms/SidebarNavigation/index.js.map +1 -1
  213. package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.cjs +169 -0
  214. package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.cjs.map +1 -0
  215. package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.d.ts +34 -0
  216. package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.d.ts.map +1 -0
  217. package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.js +167 -0
  218. package/dist/components/organisms/VideoPlayer/hooks/useVideoPlayback.js.map +1 -0
  219. package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.cjs +75 -0
  220. package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.cjs.map +1 -0
  221. package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.d.ts +16 -0
  222. package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.d.ts.map +1 -0
  223. package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.js +73 -0
  224. package/dist/components/organisms/VideoPlayer/hooks/useVideoVolume.js.map +1 -0
  225. package/dist/components/organisms/VideoPlayer/index.cjs +9 -182
  226. package/dist/components/organisms/VideoPlayer/index.cjs.map +1 -1
  227. package/dist/components/organisms/VideoPlayer/index.d.ts.map +1 -1
  228. package/dist/components/organisms/VideoPlayer/index.js +10 -183
  229. package/dist/components/organisms/VideoPlayer/index.js.map +1 -1
  230. package/dist/hooks/useBreakpoints/index.cjs +4 -1
  231. package/dist/hooks/useBreakpoints/index.cjs.map +1 -1
  232. package/dist/hooks/useBreakpoints/index.d.ts +2 -0
  233. package/dist/hooks/useBreakpoints/index.d.ts.map +1 -1
  234. package/dist/hooks/useBreakpoints/index.js +4 -2
  235. package/dist/hooks/useBreakpoints/index.js.map +1 -1
  236. package/dist/native/components/atoms/Dot/Dot.styles.d.ts +109 -0
  237. package/dist/native/components/atoms/Dot/Dot.styles.d.ts.map +1 -0
  238. package/dist/native/components/atoms/Dot/Dot.styles.js +49 -0
  239. package/dist/native/components/atoms/Dot/Dot.styles.js.map +1 -0
  240. package/dist/native/components/atoms/Dot/index.d.ts +24 -8
  241. package/dist/native/components/atoms/Dot/index.d.ts.map +1 -0
  242. package/dist/native/components/atoms/Dot/index.js +25 -0
  243. package/dist/native/components/atoms/Dot/index.js.map +1 -0
  244. 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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"}