@mantine/schedule 9.7.1 → 9.7.3

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 (107) hide show
  1. package/cjs/components/DayView/DayView.cjs +45 -29
  2. package/cjs/components/DayView/DayView.cjs.map +1 -1
  3. package/cjs/components/DayView/DayView.module.cjs.map +1 -1
  4. package/cjs/components/MobileMonthView/MobileMonthView.cjs +60 -23
  5. package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
  6. package/cjs/components/MobileMonthView/MobileMonthView.module.cjs.map +1 -1
  7. package/cjs/components/MobileMonthView/get-mobile-month-view-weeks.cjs +32 -0
  8. package/cjs/components/MobileMonthView/get-mobile-month-view-weeks.cjs.map +1 -0
  9. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs +15 -7
  10. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -1
  11. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs.map +1 -1
  12. package/cjs/components/ResourcesDayView/ResourcesDayViewColumn.cjs +11 -6
  13. package/cjs/components/ResourcesDayView/ResourcesDayViewColumn.cjs.map +1 -1
  14. package/cjs/components/ResourcesMonthView/ResourcesMonthView.module.cjs.map +1 -1
  15. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +15 -7
  16. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -1
  17. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs.map +1 -1
  18. package/cjs/components/ResourcesWeekView/ResourcesWeekViewRow.cjs +11 -6
  19. package/cjs/components/ResourcesWeekView/ResourcesWeekViewRow.cjs.map +1 -1
  20. package/cjs/components/Schedule/Schedule.cjs +2 -0
  21. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  22. package/cjs/components/WeekView/WeekView.cjs +29 -19
  23. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  24. package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
  25. package/cjs/components/WeekView/WeekViewDay.cjs +13 -7
  26. package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
  27. package/cjs/components/YearView/YearView.cjs +1 -1
  28. package/cjs/components/YearView/YearView.cjs.map +1 -1
  29. package/cjs/components/YearView/YearViewMonth.cjs +1 -1
  30. package/cjs/components/YearView/YearViewMonth.cjs.map +1 -1
  31. package/cjs/index.cjs +10 -0
  32. package/cjs/utils/add-minutes-to-time/add-minutes-to-time.cjs +17 -0
  33. package/cjs/utils/add-minutes-to-time/add-minutes-to-time.cjs.map +1 -0
  34. package/cjs/utils/clamp-slot-label-interval/clamp-slot-label-interval.cjs +22 -0
  35. package/cjs/utils/clamp-slot-label-interval/clamp-slot-label-interval.cjs.map +1 -0
  36. package/cjs/utils/get-business-hours-mod/get-business-hours-mod.cjs +74 -17
  37. package/cjs/utils/get-business-hours-mod/get-business-hours-mod.cjs.map +1 -1
  38. package/cjs/utils/get-day-time-intervals/get-day-time-intervals.cjs +7 -2
  39. package/cjs/utils/get-day-time-intervals/get-day-time-intervals.cjs.map +1 -1
  40. package/cjs/utils/get-slot-label-groups/get-slot-label-groups.cjs +26 -0
  41. package/cjs/utils/get-slot-label-groups/get-slot-label-groups.cjs.map +1 -0
  42. package/cjs/{components/YearView → utils/get-visible-week-days}/get-visible-week-days.cjs +1 -1
  43. package/cjs/utils/get-visible-week-days/get-visible-week-days.cjs.map +1 -0
  44. package/esm/components/DayView/DayView.mjs +46 -30
  45. package/esm/components/DayView/DayView.mjs.map +1 -1
  46. package/esm/components/DayView/DayView.module.mjs.map +1 -1
  47. package/esm/components/MobileMonthView/MobileMonthView.mjs +60 -23
  48. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
  49. package/esm/components/MobileMonthView/MobileMonthView.module.mjs.map +1 -1
  50. package/esm/components/MobileMonthView/get-mobile-month-view-weeks.mjs +30 -0
  51. package/esm/components/MobileMonthView/get-mobile-month-view-weeks.mjs.map +1 -0
  52. package/esm/components/ResourcesDayView/ResourcesDayView.mjs +16 -8
  53. package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -1
  54. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -1
  55. package/esm/components/ResourcesDayView/ResourcesDayViewColumn.mjs +12 -7
  56. package/esm/components/ResourcesDayView/ResourcesDayViewColumn.mjs.map +1 -1
  57. package/esm/components/ResourcesMonthView/ResourcesMonthView.module.mjs.map +1 -1
  58. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +16 -8
  59. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -1
  60. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -1
  61. package/esm/components/ResourcesWeekView/ResourcesWeekViewRow.mjs +12 -7
  62. package/esm/components/ResourcesWeekView/ResourcesWeekViewRow.mjs.map +1 -1
  63. package/esm/components/Schedule/Schedule.mjs +2 -0
  64. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  65. package/esm/components/WeekView/WeekView.mjs +30 -20
  66. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  67. package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
  68. package/esm/components/WeekView/WeekViewDay.mjs +14 -8
  69. package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
  70. package/esm/components/YearView/YearView.mjs +1 -1
  71. package/esm/components/YearView/YearView.mjs.map +1 -1
  72. package/esm/components/YearView/YearViewMonth.mjs +1 -1
  73. package/esm/components/YearView/YearViewMonth.mjs.map +1 -1
  74. package/esm/index.mjs +6 -2
  75. package/esm/utils/add-minutes-to-time/add-minutes-to-time.mjs +17 -0
  76. package/esm/utils/add-minutes-to-time/add-minutes-to-time.mjs.map +1 -0
  77. package/esm/utils/clamp-slot-label-interval/clamp-slot-label-interval.mjs +22 -0
  78. package/esm/utils/clamp-slot-label-interval/clamp-slot-label-interval.mjs.map +1 -0
  79. package/esm/utils/get-business-hours-mod/get-business-hours-mod.mjs +74 -18
  80. package/esm/utils/get-business-hours-mod/get-business-hours-mod.mjs.map +1 -1
  81. package/esm/utils/get-day-time-intervals/get-day-time-intervals.mjs +7 -2
  82. package/esm/utils/get-day-time-intervals/get-day-time-intervals.mjs.map +1 -1
  83. package/esm/utils/get-slot-label-groups/get-slot-label-groups.mjs +26 -0
  84. package/esm/utils/get-slot-label-groups/get-slot-label-groups.mjs.map +1 -0
  85. package/esm/{components/YearView → utils/get-visible-week-days}/get-visible-week-days.mjs +1 -1
  86. package/esm/utils/get-visible-week-days/get-visible-week-days.mjs.map +1 -0
  87. package/lib/components/DayView/DayView.d.ts +3 -1
  88. package/lib/components/MobileMonthView/MobileMonthView.d.ts +2 -0
  89. package/lib/components/MobileMonthView/get-mobile-month-view-weeks.d.ts +11 -0
  90. package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +1 -1
  91. package/lib/components/ResourcesDayView/ResourcesDayViewColumn.d.ts +2 -1
  92. package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +1 -1
  93. package/lib/components/ResourcesWeekView/ResourcesWeekViewRow.d.ts +2 -1
  94. package/lib/components/Schedule/Schedule.d.ts +1 -1
  95. package/lib/components/WeekView/WeekView.d.ts +3 -1
  96. package/lib/utils/add-minutes-to-time/add-minutes-to-time.d.ts +1 -0
  97. package/lib/utils/clamp-slot-label-interval/clamp-slot-label-interval.d.ts +9 -0
  98. package/lib/utils/get-business-hours-mod/get-business-hours-mod.d.ts +24 -5
  99. package/lib/utils/get-day-time-intervals/get-day-time-intervals.d.ts +5 -1
  100. package/lib/utils/get-slot-label-groups/get-slot-label-groups.d.ts +15 -0
  101. package/lib/utils/index.d.ts +7 -2
  102. package/package.json +4 -4
  103. package/styles.css +178 -9
  104. package/styles.layer.css +178 -9
  105. package/cjs/components/YearView/get-visible-week-days.cjs.map +0 -1
  106. package/esm/components/YearView/get-visible-week-days.mjs.map +0 -1
  107. /package/lib/{components/YearView → utils/get-visible-week-days}/get-visible-week-days.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"MobileMonthView.cjs","names":["createVarsResolver","getRadius","factory","useProps","useDatesContext","useMantineTheme","useUncontrolled","toDateString","useStyles","useRef","expandRecurringEvents","getMobileMonthViewEvents","getWeekdaysNames","getMonthDays","isSameMonth","getThemeColor","UnstyledButton","getWeekNumber","sortEvents","Box","Text","getLabel","React","formatDate","useDirection","AccordionChevron","classes"],"sources":["../../../src/components/MobileMonthView/MobileMonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport React, { useRef } from 'react';\nimport {\n AccordionChevron,\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getRadius,\n getThemeColor,\n MantineRadius,\n StylesApiProps,\n Text,\n UnstyledButton,\n useDirection,\n useMantineTheme,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useUncontrolled } from '@mantine/hooks';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DayOfWeek,\n ScheduleEventData,\n ScheduleMode,\n} from '../../types';\nimport {\n expandRecurringEvents,\n formatDate,\n getMonthDays,\n getWeekdaysNames,\n getWeekNumber,\n isSameMonth,\n sortEvents,\n toDateString,\n} from '../../utils';\nimport {\n handleMonthViewKeyDown,\n MonthViewControlsRef,\n} from '../MonthView/handle-month-view-key-down';\nimport { RenderEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { getMobileMonthViewEvents } from './get-mobile-month-view-events';\nimport classes from './MobileMonthView.module.css';\n\nexport type MobileMonthViewStylesNames =\n | 'mobileMonthView'\n | 'mobileMonthViewHeader'\n | 'mobileMonthViewHeaderBackButton'\n | 'mobileMonthViewHeaderLabel'\n | 'mobileMonthViewCalendar'\n | 'mobileMonthViewWeekdays'\n | 'mobileMonthViewWeekday'\n | 'mobileMonthViewWeekdaysCorner'\n | 'mobileMonthViewWeek'\n | 'mobileMonthViewWeekNumber'\n | 'mobileMonthViewDay'\n | 'mobileMonthViewDayIndicators'\n | 'mobileMonthViewDayIndicator'\n | 'mobileMonthViewEventsList'\n | 'mobileMonthViewEventsHeader'\n | 'mobileMonthViewEvent'\n | 'mobileMonthViewEventColor'\n | 'mobileMonthViewEventBody'\n | 'mobileMonthViewEventTitle'\n | 'mobileMonthViewEventTime'\n | 'mobileMonthViewNoEvents';\n\nexport type MobileMonthViewCssVariables = {\n mobileMonthView: '--mobile-month-view-radius';\n};\n\nexport interface MobileMonthViewRenderHeaderInput {\n /** Current interaction mode */\n mode: ScheduleMode;\n /** Current date displayed in the view */\n date: Date | string;\n /** Default header element */\n defaultHeader: React.ReactNode;\n}\n\nexport interface MobileMonthViewProps\n extends BoxProps, StylesApiProps<MobileMonthViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Date to display, Date object or date string in `YYYY-MM-DD 00:00:00` format */\n date: Date | string;\n\n /** Called with the new date value when a date is selected */\n onDateChange?: (value: DateStringValue) => void;\n\n /** Currently selected date (controlled) */\n selectedDate?: Date | string | null;\n\n /** Default selected date (uncontrolled) */\n defaultSelectedDate?: Date | string | null;\n\n /** Called when selected date changes */\n onSelectedDateChange?: (value: DateStringValue | null) => void;\n\n /** If set, week numbers are displayed in the first column @default false */\n withWeekNumbers?: boolean;\n\n /** If set, weekdays names are displayed in the first row @default true */\n withWeekDays?: boolean;\n\n /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n locale?: string;\n\n /** Number 0-6, where 0 – Sunday and 6 – Saturday. @default 1 – Monday */\n firstDayOfWeek?: DayOfWeek;\n\n /** `dayjs` format for weekdays names. By default, the first letter of the weekday. */\n weekdayFormat?: DateLabelFormat;\n\n /** Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. */\n weekendDays?: DayOfWeek[];\n\n /** Props passed down to the week number button */\n getWeekNumberProps?: (weekStartDate: DateStringValue) => Record<string, any>;\n\n /** Props passed down to the day button */\n getDayProps?: (date: DateStringValue) => Record<string, any>;\n\n /** Called when day is clicked */\n onDayClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called with first day of the week when week number is clicked */\n onWeekNumberClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, always renders 6 weeks in the month view @default true */\n consistentWeeks?: boolean;\n\n /** If set, highlights the current day @default true */\n highlightToday?: boolean;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** If set, days from the previous and next months are displayed to fill the weeks @default false */\n withOutsideDays?: boolean;\n\n /** Events to display */\n events?: ScheduleEventData[];\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default 'default' */\n mode?: ScheduleMode;\n\n /** Function to fully customize event rendering, receives all props that would be passed to the root element including children */\n renderEvent?: RenderEvent;\n\n /** Format for the events list header date @default 'dddd, MMMM D' */\n eventsHeaderFormat?: DateLabelFormat;\n\n /** Called when the year back button in the header is clicked */\n onYearClick?: () => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Custom header renderer, receives object with mode, date, and default header element */\n renderHeader?: (input: MobileMonthViewRenderHeaderInput) => React.ReactNode;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n}\n\nexport type MobileMonthViewFactory = Factory<{\n props: MobileMonthViewProps;\n ref: HTMLDivElement;\n stylesNames: MobileMonthViewStylesNames;\n vars: MobileMonthViewCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'MobileMonthView',\n withWeekDays: true,\n consistentWeeks: true,\n highlightToday: true,\n mode: 'default',\n eventsHeaderFormat: 'dddd, MMMM D',\n} satisfies Partial<MobileMonthViewProps>;\n\nconst varsResolver = createVarsResolver<MobileMonthViewFactory>((_theme, { radius }) => ({\n mobileMonthView: {\n '--mobile-month-view-radius': getRadius(radius),\n },\n}));\n\nexport const MobileMonthView = factory<MobileMonthViewFactory>((_props) => {\n const props = useProps('MobileMonthView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n attributes,\n __staticSelector,\n date,\n onDateChange,\n selectedDate,\n defaultSelectedDate,\n onSelectedDateChange,\n withWeekNumbers,\n withWeekDays,\n locale,\n firstDayOfWeek,\n weekdayFormat,\n weekendDays,\n getWeekNumberProps,\n getDayProps,\n onDayClick,\n onWeekNumberClick,\n consistentWeeks,\n highlightToday,\n radius,\n withOutsideDays,\n events,\n labels,\n mode,\n renderEvent,\n eventsHeaderFormat,\n onYearClick,\n onEventClick,\n renderHeader,\n recurrenceExpansionLimit,\n ...others\n } = props;\n\n const ctx = useDatesContext();\n const theme = useMantineTheme();\n const today = dayjs();\n\n const [_selectedDate, _setSelectedDate] = useUncontrolled<Date | string | null>({\n value: selectedDate,\n defaultValue: defaultSelectedDate ?? toDateString(today),\n onChange: (value) => onSelectedDateChange?.(value ? toDateString(dayjs(value)) : null),\n });\n\n const getStyles = useStyles<MobileMonthViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n rootSelector: 'mobileMonthView',\n });\n\n const daysRef: MonthViewControlsRef = useRef<HTMLButtonElement[][]>([]);\n const firstDayPosition = useRef<{ weekIndex: number; dayIndex: number } | null>(null);\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart: dayjs(date).startOf('month').toDate(),\n rangeEnd: dayjs(date).endOf('month').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n });\n\n const groupedEvents = getMobileMonthViewEvents({ date, events: expandedEvents });\n\n const weekdays = withWeekDays\n ? getWeekdaysNames({\n locale: ctx.getLocale(locale),\n format: weekdayFormat,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n }).map((day, index) => (\n <div {...getStyles('mobileMonthViewWeekday')} key={index}>\n {day}\n </div>\n ))\n : null;\n\n const weeks = getMonthDays({\n month: dayjs(date).format('YYYY-MM-DD'),\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n consistentWeeks,\n }).map((week, weekIndex) => {\n const days = week.map((dayDate, dayIndex) => {\n const outside = !isSameMonth(dayDate, date);\n const weekend = ctx.getWeekendDays(weekendDays).includes(dayjs(dayDate).day());\n const ariaLabel = dayjs(dayDate)\n .locale(locale || ctx.locale)\n .format('MMMM D, YYYY');\n\n const dayProps = getDayProps?.(dayjs(dayDate).format('YYYY-MM-DD')) || {};\n const isToday = dayjs(dayDate).isSame(today, 'day') && highlightToday;\n const isSelected = _selectedDate && dayjs(dayDate).isSame(dayjs(_selectedDate), 'day');\n const dayEvents = groupedEvents[dayjs(dayDate).format('YYYY-MM-DD')] || [];\n\n const shouldRender = withOutsideDays || !outside;\n\n if (shouldRender && firstDayPosition.current === null) {\n firstDayPosition.current = { weekIndex, dayIndex };\n }\n\n const isFirstDay =\n firstDayPosition.current?.weekIndex === weekIndex &&\n firstDayPosition.current?.dayIndex === dayIndex;\n\n const indicators = dayEvents.slice(0, 3).map((event) => (\n <div\n {...getStyles('mobileMonthViewDayIndicator', {\n style: { backgroundColor: getThemeColor(event.color, theme) },\n })}\n key={event.id}\n />\n ));\n\n const handleDayClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n const dateStr = dayjs(dayDate).format('YYYY-MM-DD');\n _setSelectedDate(dateStr);\n onDayClick?.(dateStr, event);\n dayProps.onClick?.(event);\n };\n\n const handleDayKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n handleMonthViewKeyDown({\n controlsRef: daysRef,\n weekIndex,\n dayIndex,\n event,\n });\n };\n\n return (\n <UnstyledButton\n aria-label={ariaLabel}\n aria-selected={isSelected || undefined}\n {...dayProps}\n {...getStyles('mobileMonthViewDay', {\n className: dayProps.className,\n style: dayProps.style,\n })}\n key={dayDate}\n ref={(node) => {\n if (node) {\n if (!daysRef.current[weekIndex]) {\n daysRef.current[weekIndex] = [];\n }\n daysRef.current[weekIndex][dayIndex] = node;\n }\n }}\n mod={[\n {\n outside,\n weekend,\n today: isToday,\n selected: isSelected,\n static: mode === 'static',\n hidden: !shouldRender,\n },\n dayProps.mod,\n ]}\n tabIndex={mode === 'static' || !shouldRender ? -1 : isFirstDay ? 0 : -1}\n onClick={mode === 'static' || !shouldRender ? undefined : handleDayClick}\n onKeyDown={mode === 'static' || !shouldRender ? undefined : handleDayKeyDown}\n >\n {shouldRender ? dayjs(dayDate).format('D') : null}\n {shouldRender && <div {...getStyles('mobileMonthViewDayIndicators')}>{indicators}</div>}\n </UnstyledButton>\n );\n });\n\n const weekNumberProps = getWeekNumberProps?.(dayjs(week[0]).format('YYYY-MM-DD')) || {};\n const weekNumber = getWeekNumber(week);\n\n return (\n <div {...getStyles('mobileMonthViewWeek')} key={weekIndex}>\n {withWeekNumbers && (\n <UnstyledButton\n key={weekNumber}\n aria-label={`Week ${weekNumber}`}\n {...weekNumberProps}\n onClick={\n mode === 'static'\n ? undefined\n : (event) => {\n onWeekNumberClick?.(dayjs(week[0]).format('YYYY-MM-DD'), event);\n weekNumberProps.onClick?.(event);\n }\n }\n mod={{ static: mode === 'static' }}\n tabIndex={mode === 'static' ? -1 : 0}\n {...getStyles('mobileMonthViewWeekNumber', {\n className: weekNumberProps.className,\n style: weekNumberProps.style,\n })}\n >\n {weekNumber}\n </UnstyledButton>\n )}\n {days}\n </div>\n );\n });\n\n const selectedDateEvents = _selectedDate\n ? sortEvents(groupedEvents[dayjs(_selectedDate).format('YYYY-MM-DD')] || [])\n : [];\n\n const eventsList = selectedDateEvents.map((event) => {\n const startTime = dayjs(event.start).format('HH:mm');\n const endTime = dayjs(event.end).format('HH:mm');\n const isAllDay = startTime === '00:00' && endTime === '00:00';\n\n const eventChildren = (\n <Box {...getStyles('mobileMonthViewEventBody')}>\n <div\n {...getStyles('mobileMonthViewEventColor', {\n style: { backgroundColor: getThemeColor(event.color, theme) },\n })}\n />\n <div>\n <Text {...getStyles('mobileMonthViewEventTitle')}>{event.title}</Text>\n <Text {...getStyles('mobileMonthViewEventTime')}>\n {isAllDay ? getLabel('allDay', labels) : `${startTime} – ${endTime}`}\n </Text>\n </div>\n </Box>\n );\n\n const rootProps: React.ComponentPropsWithoutRef<'button'> & { children: React.ReactNode } = {\n ...getStyles('mobileMonthViewEvent'),\n onClick:\n mode === 'static'\n ? undefined\n : (e: React.MouseEvent<HTMLButtonElement>) => {\n onEventClick?.(event, e);\n },\n tabIndex: mode === 'static' ? -1 : 0,\n children: eventChildren,\n };\n\n if (typeof renderEvent === 'function') {\n return <React.Fragment key={event.id}>{renderEvent(event, rootProps)}</React.Fragment>;\n }\n\n return <UnstyledButton {...rootProps} key={event.id} />;\n });\n\n const eventsHeader = _selectedDate\n ? formatDate({\n locale: ctx.getLocale(locale),\n date: _selectedDate,\n format: eventsHeaderFormat,\n })\n : '';\n\n const { dir } = useDirection();\n\n const headerLabel = formatDate({ locale: ctx.getLocale(locale), date, format: 'MMMM YYYY' });\n\n const defaultHeader = (\n <>\n <UnstyledButton\n {...getStyles('mobileMonthViewHeaderBackButton')}\n onClick={onYearClick}\n mod={{ static: mode === 'static' }}\n tabIndex={mode === 'static' ? -1 : 0}\n >\n <AccordionChevron\n style={{ transform: `rotate(${dir === 'rtl' ? -90 : 90}deg)` }}\n size={20}\n />\n {dayjs(date).format('YYYY')}\n </UnstyledButton>\n <Text {...getStyles('mobileMonthViewHeaderLabel')}>{headerLabel}</Text>\n </>\n );\n\n return (\n <Box\n {...getStyles('mobileMonthView')}\n mod={{ 'with-week-numbers': withWeekNumbers }}\n {...others}\n >\n <div {...getStyles('mobileMonthViewHeader')}>\n {typeof renderHeader === 'function'\n ? renderHeader({ mode: mode!, date, defaultHeader })\n : defaultHeader}\n </div>\n\n <Box {...getStyles('mobileMonthViewCalendar')} mod={{ 'with-weekdays': withWeekDays }}>\n {weekdays && (\n <div {...getStyles('mobileMonthViewWeekdays')}>\n {withWeekNumbers && <div {...getStyles('mobileMonthViewWeekdaysCorner')} />}\n {weekdays}\n </div>\n )}\n {weeks}\n </Box>\n\n <Box {...getStyles('mobileMonthViewEventsList')}>\n <Text {...getStyles('mobileMonthViewEventsHeader')}>{eventsHeader}</Text>\n\n {eventsList.length > 0 ? (\n eventsList\n ) : (\n <Text {...getStyles('mobileMonthViewNoEvents')}>{getLabel('noEvents', labels)}</Text>\n )}\n </Box>\n </Box>\n );\n});\n\nMobileMonthView.displayName = '@mantine/schedule/MobileMonthView';\nMobileMonthView.classes = classes;\nMobileMonthView.varsResolver = varsResolver;\n\nexport namespace MobileMonthView {\n export type Props = MobileMonthViewProps;\n export type Factory = MobileMonthViewFactory;\n export type StylesNames = MobileMonthViewStylesNames;\n export type CssVariables = MobileMonthViewCssVariables;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MobileMonthView.cjs","names":["createVarsResolver","getRadius","factory","useProps","useDatesContext","useMantineTheme","useUncontrolled","toDateString","useStyles","useRef","getHiddenWeekendColumns","expandRecurringEvents","getMobileMonthViewEvents","getWeekdaysNames","getMobileMonthViewWeeks","getVisibleWeekDays","isSameMonth","getThemeColor","UnstyledButton","getWeekNumber","sortEvents","isMultidayEvent","isAllDayEvent","Box","Text","getLabel","React","formatDate","useDirection","AccordionChevron","classes"],"sources":["../../../src/components/MobileMonthView/MobileMonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport React, { useRef } from 'react';\nimport {\n AccordionChevron,\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getRadius,\n getThemeColor,\n MantineRadius,\n StylesApiProps,\n Text,\n UnstyledButton,\n useDirection,\n useMantineTheme,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useUncontrolled } from '@mantine/hooks';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DayOfWeek,\n ScheduleEventData,\n ScheduleMode,\n} from '../../types';\nimport {\n expandRecurringEvents,\n formatDate,\n getHiddenWeekendColumns,\n getVisibleWeekDays,\n getWeekdaysNames,\n getWeekNumber,\n isAllDayEvent,\n isMultidayEvent,\n isSameMonth,\n sortEvents,\n toDateString,\n} from '../../utils';\nimport {\n handleMonthViewKeyDown,\n MonthViewControlsRef,\n} from '../MonthView/handle-month-view-key-down';\nimport { RenderEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { getMobileMonthViewEvents } from './get-mobile-month-view-events';\nimport { getMobileMonthViewWeeks } from './get-mobile-month-view-weeks';\nimport classes from './MobileMonthView.module.css';\n\nexport type MobileMonthViewStylesNames =\n | 'mobileMonthView'\n | 'mobileMonthViewHeader'\n | 'mobileMonthViewHeaderBackButton'\n | 'mobileMonthViewHeaderLabel'\n | 'mobileMonthViewCalendar'\n | 'mobileMonthViewWeekdays'\n | 'mobileMonthViewWeekday'\n | 'mobileMonthViewWeekdaysCorner'\n | 'mobileMonthViewWeek'\n | 'mobileMonthViewWeekNumber'\n | 'mobileMonthViewDay'\n | 'mobileMonthViewDayIndicators'\n | 'mobileMonthViewDayIndicator'\n | 'mobileMonthViewEventsList'\n | 'mobileMonthViewEventsHeader'\n | 'mobileMonthViewEvent'\n | 'mobileMonthViewEventColor'\n | 'mobileMonthViewEventBody'\n | 'mobileMonthViewEventTitle'\n | 'mobileMonthViewEventTime'\n | 'mobileMonthViewNoEvents';\n\nexport type MobileMonthViewCssVariables = {\n mobileMonthView: '--mobile-month-view-radius';\n};\n\nexport interface MobileMonthViewRenderHeaderInput {\n /** Current interaction mode */\n mode: ScheduleMode;\n /** Current date displayed in the view */\n date: Date | string;\n /** Default header element */\n defaultHeader: React.ReactNode;\n}\n\nexport interface MobileMonthViewProps\n extends BoxProps, StylesApiProps<MobileMonthViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Date to display, Date object or date string in `YYYY-MM-DD 00:00:00` format */\n date: Date | string;\n\n /** Called with the new date value when a date is selected */\n onDateChange?: (value: DateStringValue) => void;\n\n /** Currently selected date (controlled) */\n selectedDate?: Date | string | null;\n\n /** Default selected date (uncontrolled) */\n defaultSelectedDate?: Date | string | null;\n\n /** Called when selected date changes */\n onSelectedDateChange?: (value: DateStringValue | null) => void;\n\n /** If set, week numbers are displayed in the first column @default false */\n withWeekNumbers?: boolean;\n\n /** If set, weekdays names are displayed in the first row @default true */\n withWeekDays?: boolean;\n\n /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n locale?: string;\n\n /** Number 0-6, where 0 – Sunday and 6 – Saturday. @default 1 – Monday */\n firstDayOfWeek?: DayOfWeek;\n\n /** `dayjs` format for weekdays names. By default, the first letter of the weekday. */\n weekdayFormat?: DateLabelFormat;\n\n /** Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. */\n weekendDays?: DayOfWeek[];\n\n /** If set, weekend days are displayed. When `false`, weekend columns are hidden and the month grid shrinks. @default true */\n withWeekendDays?: boolean;\n\n /** Props passed down to the week number button */\n getWeekNumberProps?: (weekStartDate: DateStringValue) => Record<string, any>;\n\n /** Props passed down to the day button */\n getDayProps?: (date: DateStringValue) => Record<string, any>;\n\n /** Called when day is clicked */\n onDayClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called with first day of the week when week number is clicked */\n onWeekNumberClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, always renders 6 weeks in the month view @default true */\n consistentWeeks?: boolean;\n\n /** If set, highlights the current day @default true */\n highlightToday?: boolean;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** If set, days from the previous and next months are displayed to fill the weeks @default false */\n withOutsideDays?: boolean;\n\n /** Events to display */\n events?: ScheduleEventData[];\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default 'default' */\n mode?: ScheduleMode;\n\n /** Function to fully customize event rendering, receives all props that would be passed to the root element including children */\n renderEvent?: RenderEvent;\n\n /** Format for the events list header date @default 'dddd, MMMM D' */\n eventsHeaderFormat?: DateLabelFormat;\n\n /** Called when the year back button in the header is clicked */\n onYearClick?: () => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Custom header renderer, receives object with mode, date, and default header element */\n renderHeader?: (input: MobileMonthViewRenderHeaderInput) => React.ReactNode;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n}\n\nexport type MobileMonthViewFactory = Factory<{\n props: MobileMonthViewProps;\n ref: HTMLDivElement;\n stylesNames: MobileMonthViewStylesNames;\n vars: MobileMonthViewCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'MobileMonthView',\n withWeekDays: true,\n withWeekendDays: true,\n consistentWeeks: true,\n highlightToday: true,\n mode: 'default',\n eventsHeaderFormat: 'dddd, MMMM D',\n} satisfies Partial<MobileMonthViewProps>;\n\nconst varsResolver = createVarsResolver<MobileMonthViewFactory>((_theme, { radius }) => ({\n mobileMonthView: {\n '--mobile-month-view-radius': getRadius(radius),\n },\n}));\n\nexport const MobileMonthView = factory<MobileMonthViewFactory>((_props) => {\n const props = useProps('MobileMonthView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n attributes,\n __staticSelector,\n date,\n onDateChange,\n selectedDate,\n defaultSelectedDate,\n onSelectedDateChange,\n withWeekNumbers,\n withWeekDays,\n locale,\n firstDayOfWeek,\n weekdayFormat,\n weekendDays,\n withWeekendDays,\n getWeekNumberProps,\n getDayProps,\n onDayClick,\n onWeekNumberClick,\n consistentWeeks,\n highlightToday,\n radius,\n withOutsideDays,\n events,\n labels,\n mode,\n renderEvent,\n eventsHeaderFormat,\n onYearClick,\n onEventClick,\n renderHeader,\n recurrenceExpansionLimit,\n ...others\n } = props;\n\n const ctx = useDatesContext();\n const theme = useMantineTheme();\n const today = dayjs();\n\n const [_selectedDate, _setSelectedDate] = useUncontrolled<Date | string | null>({\n value: selectedDate,\n defaultValue: defaultSelectedDate ?? toDateString(today),\n onChange: (value) => onSelectedDateChange?.(value ? toDateString(dayjs(value)) : null),\n });\n\n const getStyles = useStyles<MobileMonthViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n rootSelector: 'mobileMonthView',\n });\n\n const daysRef: MonthViewControlsRef = useRef<HTMLButtonElement[][]>([]);\n const resolvedFirstDayOfWeek = ctx.getFirstDayOfWeek(firstDayOfWeek);\n const resolvedWeekendDays = ctx.getWeekendDays(weekendDays);\n const hiddenColumns = new Set(\n getHiddenWeekendColumns({\n weekendDays: resolvedWeekendDays,\n firstDayOfWeek: resolvedFirstDayOfWeek,\n withWeekendDays,\n })\n );\n const columnsCount = 7 - hiddenColumns.size;\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart: dayjs(date).startOf('month').toDate(),\n rangeEnd: dayjs(date).endOf('month').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n });\n\n const groupedEvents = getMobileMonthViewEvents({ date, events: expandedEvents });\n\n const weekdays = withWeekDays\n ? getWeekdaysNames({\n locale: ctx.getLocale(locale),\n format: weekdayFormat,\n firstDayOfWeek: resolvedFirstDayOfWeek,\n })\n .map((day, index) => ({ day, index }))\n .filter(({ index }) => !hiddenColumns.has(index))\n .map(({ day, index }) => (\n <div {...getStyles('mobileMonthViewWeekday')} key={index}>\n {day}\n </div>\n ))\n : null;\n\n const monthWeeks = getMobileMonthViewWeeks({\n month: date,\n firstDayOfWeek: resolvedFirstDayOfWeek,\n consistentWeeks,\n withOutsideDays,\n weekendDays: resolvedWeekendDays,\n withWeekendDays,\n }).map((week) => ({\n week,\n visibleDays: getVisibleWeekDays({\n week,\n weekendDays: resolvedWeekendDays,\n withWeekendDays,\n }),\n }));\n\n const firstDayPosition = (() => {\n for (let weekIndex = 0; weekIndex < monthWeeks.length; weekIndex++) {\n const { visibleDays } = monthWeeks[weekIndex];\n for (let dayIndex = 0; dayIndex < visibleDays.length; dayIndex++) {\n if (withOutsideDays || isSameMonth(visibleDays[dayIndex], date)) {\n return { weekIndex, dayIndex };\n }\n }\n }\n return null;\n })();\n\n daysRef.current.length = monthWeeks.length;\n\n const weeks = monthWeeks.map(({ week, visibleDays }, weekIndex) => {\n daysRef.current[weekIndex] = [];\n\n const days = visibleDays.map((dayDate, dayIndex) => {\n const outside = !isSameMonth(dayDate, date);\n const weekend = resolvedWeekendDays.includes(dayjs(dayDate).day() as DayOfWeek);\n const ariaLabel = dayjs(dayDate)\n .locale(locale || ctx.locale)\n .format('MMMM D, YYYY');\n\n const dayProps = getDayProps?.(dayjs(dayDate).format('YYYY-MM-DD')) || {};\n const isToday = dayjs(dayDate).isSame(today, 'day') && highlightToday;\n const isSelected = _selectedDate && dayjs(dayDate).isSame(dayjs(_selectedDate), 'day');\n const dayEvents = groupedEvents[dayjs(dayDate).format('YYYY-MM-DD')] || [];\n\n const shouldRender = withOutsideDays || !outside;\n const isFirstDay =\n firstDayPosition?.weekIndex === weekIndex && firstDayPosition?.dayIndex === dayIndex;\n\n const indicators = dayEvents.slice(0, 3).map((event) => (\n <div\n {...getStyles('mobileMonthViewDayIndicator', {\n style: { backgroundColor: getThemeColor(event.color, theme) },\n })}\n key={event.id}\n />\n ));\n\n const handleDayClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n const dateStr = dayjs(dayDate).format('YYYY-MM-DD');\n _setSelectedDate(dateStr);\n onDayClick?.(dateStr, event);\n dayProps.onClick?.(event);\n };\n\n const handleDayKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n handleMonthViewKeyDown({\n controlsRef: daysRef,\n weekIndex,\n dayIndex,\n event,\n });\n };\n\n return (\n <UnstyledButton\n aria-label={ariaLabel}\n aria-selected={isSelected || undefined}\n {...dayProps}\n {...getStyles('mobileMonthViewDay', {\n className: dayProps.className,\n style: dayProps.style,\n })}\n key={dayDate}\n ref={(node) => {\n if (node) {\n daysRef.current[weekIndex][dayIndex] = node;\n }\n }}\n mod={[\n {\n outside,\n weekend,\n today: isToday,\n selected: isSelected,\n static: mode === 'static',\n hidden: !shouldRender,\n },\n dayProps.mod,\n ]}\n tabIndex={mode === 'static' || !shouldRender ? -1 : isFirstDay ? 0 : -1}\n onClick={mode === 'static' || !shouldRender ? undefined : handleDayClick}\n onKeyDown={mode === 'static' || !shouldRender ? undefined : handleDayKeyDown}\n >\n {shouldRender ? dayjs(dayDate).format('D') : null}\n {shouldRender && <div {...getStyles('mobileMonthViewDayIndicators')}>{indicators}</div>}\n </UnstyledButton>\n );\n });\n\n const weekNumberProps = getWeekNumberProps?.(dayjs(week[0]).format('YYYY-MM-DD')) || {};\n const weekNumber = getWeekNumber(week);\n\n return (\n <div {...getStyles('mobileMonthViewWeek')} key={weekIndex}>\n {withWeekNumbers && (\n <UnstyledButton\n key={weekNumber}\n aria-label={`Week ${weekNumber}`}\n {...weekNumberProps}\n onClick={\n mode === 'static'\n ? undefined\n : (event) => {\n onWeekNumberClick?.(dayjs(week[0]).format('YYYY-MM-DD'), event);\n weekNumberProps.onClick?.(event);\n }\n }\n mod={{ static: mode === 'static' }}\n tabIndex={mode === 'static' ? -1 : 0}\n {...getStyles('mobileMonthViewWeekNumber', {\n className: weekNumberProps.className,\n style: weekNumberProps.style,\n })}\n >\n {weekNumber}\n </UnstyledButton>\n )}\n {days}\n </div>\n );\n });\n\n const selectedDateEvents = _selectedDate\n ? sortEvents(groupedEvents[dayjs(_selectedDate).format('YYYY-MM-DD')] || [])\n : [];\n\n const eventsList = selectedDateEvents.map((event) => {\n const startTime = dayjs(event.start).format('HH:mm');\n const endTime = dayjs(event.end).format('HH:mm');\n const isAllDay = isMultidayEvent(event) || isAllDayEvent({ event, date: _selectedDate! });\n\n const eventChildren = (\n <Box {...getStyles('mobileMonthViewEventBody')}>\n <div\n {...getStyles('mobileMonthViewEventColor', {\n style: { backgroundColor: getThemeColor(event.color, theme) },\n })}\n />\n <div>\n <Text {...getStyles('mobileMonthViewEventTitle')}>{event.title}</Text>\n <Text {...getStyles('mobileMonthViewEventTime')}>\n {isAllDay ? getLabel('allDay', labels) : `${startTime} – ${endTime}`}\n </Text>\n </div>\n </Box>\n );\n\n const rootProps: React.ComponentPropsWithoutRef<'button'> & { children: React.ReactNode } = {\n ...getStyles('mobileMonthViewEvent'),\n onClick:\n mode === 'static'\n ? undefined\n : (e: React.MouseEvent<HTMLButtonElement>) => {\n onEventClick?.(event, e);\n },\n tabIndex: mode === 'static' ? -1 : 0,\n children: eventChildren,\n };\n\n if (typeof renderEvent === 'function') {\n return <React.Fragment key={event.id}>{renderEvent(event, rootProps)}</React.Fragment>;\n }\n\n return <UnstyledButton {...rootProps} key={event.id} />;\n });\n\n const eventsHeader = _selectedDate\n ? formatDate({\n locale: ctx.getLocale(locale),\n date: _selectedDate,\n format: eventsHeaderFormat,\n })\n : '';\n\n const { dir } = useDirection();\n\n const headerLabel = formatDate({ locale: ctx.getLocale(locale), date, format: 'MMMM YYYY' });\n\n const defaultHeader = (\n <>\n <UnstyledButton\n {...getStyles('mobileMonthViewHeaderBackButton')}\n onClick={onYearClick}\n mod={{ static: mode === 'static' }}\n tabIndex={mode === 'static' ? -1 : 0}\n >\n <AccordionChevron\n style={{ transform: `rotate(${dir === 'rtl' ? -90 : 90}deg)` }}\n size={20}\n />\n {dayjs(date).format('YYYY')}\n </UnstyledButton>\n <Text {...getStyles('mobileMonthViewHeaderLabel')}>{headerLabel}</Text>\n </>\n );\n\n return (\n <Box\n {...getStyles('mobileMonthView')}\n mod={{\n 'with-week-numbers': withWeekNumbers,\n 'without-weekend-days': hiddenColumns.size > 0,\n }}\n __vars={\n hiddenColumns.size > 0 ? { '--mobile-month-view-columns': `${columnsCount}` } : undefined\n }\n {...others}\n >\n <div {...getStyles('mobileMonthViewHeader')}>\n {typeof renderHeader === 'function'\n ? renderHeader({ mode: mode!, date, defaultHeader })\n : defaultHeader}\n </div>\n\n <Box {...getStyles('mobileMonthViewCalendar')} mod={{ 'with-weekdays': withWeekDays }}>\n {weekdays && (\n <div {...getStyles('mobileMonthViewWeekdays')}>\n {withWeekNumbers && <div {...getStyles('mobileMonthViewWeekdaysCorner')} />}\n {weekdays}\n </div>\n )}\n {weeks}\n </Box>\n\n <Box {...getStyles('mobileMonthViewEventsList')}>\n <Text {...getStyles('mobileMonthViewEventsHeader')}>{eventsHeader}</Text>\n\n {eventsList.length > 0 ? (\n eventsList\n ) : (\n <Text {...getStyles('mobileMonthViewNoEvents')}>{getLabel('noEvents', labels)}</Text>\n )}\n </Box>\n </Box>\n );\n});\n\nMobileMonthView.displayName = '@mantine/schedule/MobileMonthView';\nMobileMonthView.classes = classes;\nMobileMonthView.varsResolver = varsResolver;\n\nexport namespace MobileMonthView {\n export type Props = MobileMonthViewProps;\n export type Factory = MobileMonthViewFactory;\n export type StylesNames = MobileMonthViewStylesNames;\n export type CssVariables = MobileMonthViewCssVariables;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MobileMonthView.module.cjs","names":[],"sources":["../../../src/components/MobileMonthView/MobileMonthView.module.css"],"sourcesContent":[".mobileMonthView {\n --mobile-month-view-radius: var(--schedule-radius, var(--mantine-radius-default));\n --week-numbers-offset: 0rem;\n --day-base-color: var(--mantine-color-text);\n --day-dimmed-color: alpha(var(--day-base-color), 0.5);\n\n display: flex;\n flex-direction: column;\n height: 100%;\n\n @mixin where-light {\n --mobile-month-view-border-color: var(--mantine-color-gray-3);\n }\n\n @mixin where-dark {\n --mobile-month-view-border-color: var(--mantine-color-dark-4);\n }\n\n &:where([data-with-week-numbers]) {\n --week-numbers-offset: 32px;\n }\n}\n\n.mobileMonthViewHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--mantine-spacing-sm);\n border-bottom: 1px solid var(--mobile-month-view-border-color);\n}\n\n.mobileMonthViewHeaderBackButton {\n display: flex;\n align-items: center;\n gap: 4px;\n font-weight: var(--mantine-font-weight-medium);\n cursor: pointer;\n user-select: none;\n font-size: var(--mobile-month-view-font-size);\n\n &:where([data-static]) {\n cursor: default;\n pointer-events: none;\n }\n}\n\n.mobileMonthViewHeaderLabel {\n user-select: none;\n font-weight: var(--mantine-font-weight-semibold);\n text-transform: capitalize;\n}\n\n.mobileMonthViewCalendar {\n --mobile-month-view-font-size: clamp(6px, 3.5cqw, 22px);\n\n container-type: inline-size;\n padding: var(--mantine-spacing-sm);\n border-bottom: 1px solid var(--mobile-month-view-border-color);\n}\n\n.mobileMonthViewWeekdays {\n display: flex;\n margin-bottom: var(--mantine-spacing-xs);\n}\n\n.mobileMonthViewWeekdaysCorner {\n flex: 0 0 var(--week-numbers-offset);\n}\n\n.mobileMonthViewWeekday {\n flex: 0 0 calc(100% / 7 - var(--week-numbers-offset) / 7);\n font-size: var(--mobile-month-view-font-size);\n font-weight: var(--mantine-font-weight-medium);\n text-align: center;\n text-transform: capitalize;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: default;\n user-select: none;\n color: var(--day-dimmed-color);\n padding-block: 4px;\n}\n\n.mobileMonthViewWeek {\n display: flex;\n}\n\n.mobileMonthViewWeekNumber {\n flex: 0 0 calc(var(--week-numbers-offset) - rem(4px));\n margin-inline-end: rem(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--mantine-font-size-xs);\n border-radius: var(--mobile-month-view-radius);\n padding: 4px;\n font-weight: var(--mantine-font-weight-medium);\n cursor: pointer;\n user-select: none;\n color: var(--day-dimmed-color);\n\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n }\n }\n\n &:where([data-static]) {\n cursor: default;\n pointer-events: none;\n }\n}\n\n.mobileMonthViewDay {\n flex: 0 0 calc(100% / 7 - var(--week-numbers-offset) / 7);\n height: 48px;\n padding: 4px;\n font-weight: var(--mantine-font-weight-medium);\n font-size: var(--mobile-month-view-font-size);\n color: var(--day-base-color);\n cursor: pointer;\n user-select: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: relative;\n z-index: 0;\n\n &::before {\n width: 32px;\n height: 32px;\n border-radius: 100%;\n content: '';\n position: absolute;\n top: 7px;\n left: calc(50% - 16px);\n z-index: -1;\n pointer-events: none;\n }\n\n &:focus {\n z-index: 1;\n }\n\n &:where([data-hidden]) {\n visibility: hidden;\n pointer-events: none;\n }\n\n &:where([data-weekend]) {\n color: var(--mantine-color-red-6);\n }\n\n &:where([data-outside]) {\n color: var(--day-dimmed-color);\n }\n\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n }\n }\n\n &:where([data-today]:not([data-selected])) {\n @mixin where-light {\n &::before {\n background-color: var(--mantine-color-gray-2);\n }\n }\n\n @mixin where-dark {\n &::before {\n background-color: var(--mantine-color-dark-5);\n }\n }\n }\n\n &:where([data-selected]) {\n color: var(--mantine-primary-color-contrast);\n\n &::before {\n background-color: var(--mantine-primary-color-filled);\n }\n\n @mixin hover {\n &::before {\n background-color: var(--mantine-primary-color-filled-hover);\n }\n }\n }\n\n &:where([data-static]) {\n cursor: default;\n pointer-events: none;\n }\n}\n\n.mobileMonthViewDayIndicators {\n position: absolute;\n bottom: 2px;\n inset-inline: 0;\n display: flex;\n justify-content: center;\n padding-inline-start: 2px;\n}\n\n.mobileMonthViewDayIndicator {\n width: 5px;\n height: 5px;\n border-radius: 100%;\n margin-inline-start: -1px;\n}\n\n.mobileMonthViewEventsList {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n padding: var(--mantine-spacing-sm);\n}\n\n.mobileMonthViewEventsHeader {\n margin-bottom: var(--mantine-spacing-sm);\n font-weight: var(--mantine-font-weight-semibold);\n text-transform: capitalize;\n}\n\n.mobileMonthViewEvent {\n display: block;\n width: 100%;\n text-align: start;\n cursor: pointer;\n\n &:where(:not(:last-child)) {\n border-bottom: 1px solid var(--mobile-month-view-border-color);\n }\n\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n }\n }\n}\n\n.mobileMonthViewEventBody {\n display: flex;\n gap: var(--mantine-spacing-sm);\n padding: var(--mantine-spacing-xs) 0;\n}\n\n.mobileMonthViewEventColor {\n width: 4px;\n border-radius: 2px;\n flex-shrink: 0;\n}\n\n.mobileMonthViewEventTime {\n margin-top: 2px;\n font-size: var(--mantine-font-size-xs);\n color: var(--mantine-color-dimmed);\n}\n\n.mobileMonthViewNoEvents {\n color: var(--mantine-color-dimmed);\n text-align: center;\n padding-block: var(--mantine-spacing-xl);\n}\n"],"mappings":""}
1
+ {"version":3,"file":"MobileMonthView.module.cjs","names":[],"sources":["../../../src/components/MobileMonthView/MobileMonthView.module.css"],"sourcesContent":[".mobileMonthView {\n --mobile-month-view-radius: var(--schedule-radius, var(--mantine-radius-default));\n --mobile-month-view-columns: 7;\n --week-numbers-offset: 0rem;\n --day-base-color: var(--mantine-color-text);\n --day-dimmed-color: alpha(var(--day-base-color), 0.5);\n\n display: flex;\n flex-direction: column;\n height: 100%;\n\n @mixin where-light {\n --mobile-month-view-border-color: var(--mantine-color-gray-3);\n }\n\n @mixin where-dark {\n --mobile-month-view-border-color: var(--mantine-color-dark-4);\n }\n\n &:where([data-with-week-numbers]) {\n --week-numbers-offset: 32px;\n }\n}\n\n.mobileMonthViewHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--mantine-spacing-sm);\n border-bottom: 1px solid var(--mobile-month-view-border-color);\n}\n\n.mobileMonthViewHeaderBackButton {\n display: flex;\n align-items: center;\n gap: 4px;\n font-weight: var(--mantine-font-weight-medium);\n cursor: pointer;\n user-select: none;\n font-size: var(--mobile-month-view-font-size);\n\n &:where([data-static]) {\n cursor: default;\n pointer-events: none;\n }\n}\n\n.mobileMonthViewHeaderLabel {\n user-select: none;\n font-weight: var(--mantine-font-weight-semibold);\n text-transform: capitalize;\n}\n\n.mobileMonthViewCalendar {\n --mobile-month-view-font-size: clamp(6px, 3.5cqw, 22px);\n\n container-type: inline-size;\n padding: var(--mantine-spacing-sm);\n border-bottom: 1px solid var(--mobile-month-view-border-color);\n}\n\n.mobileMonthViewWeekdays {\n display: flex;\n margin-bottom: var(--mantine-spacing-xs);\n}\n\n.mobileMonthViewWeekdaysCorner {\n flex: 0 0 var(--week-numbers-offset);\n}\n\n.mobileMonthViewWeekday {\n flex: 0 0\n calc(\n 100% / var(--mobile-month-view-columns) - var(--week-numbers-offset) /\n var(--mobile-month-view-columns)\n );\n font-size: var(--mobile-month-view-font-size);\n font-weight: var(--mantine-font-weight-medium);\n text-align: center;\n text-transform: capitalize;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: default;\n user-select: none;\n color: var(--day-dimmed-color);\n padding-block: 4px;\n}\n\n.mobileMonthViewWeek {\n display: flex;\n}\n\n.mobileMonthViewWeekNumber {\n flex: 0 0 calc(var(--week-numbers-offset) - rem(4px));\n margin-inline-end: rem(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--mantine-font-size-xs);\n border-radius: var(--mobile-month-view-radius);\n padding: 4px;\n font-weight: var(--mantine-font-weight-medium);\n cursor: pointer;\n user-select: none;\n color: var(--day-dimmed-color);\n\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n }\n }\n\n &:where([data-static]) {\n cursor: default;\n pointer-events: none;\n }\n}\n\n.mobileMonthViewDay {\n flex: 0 0\n calc(\n 100% / var(--mobile-month-view-columns) - var(--week-numbers-offset) /\n var(--mobile-month-view-columns)\n );\n height: 48px;\n padding: 4px;\n font-weight: var(--mantine-font-weight-medium);\n font-size: var(--mobile-month-view-font-size);\n color: var(--day-base-color);\n cursor: pointer;\n user-select: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: relative;\n z-index: 0;\n\n &::before {\n width: 32px;\n height: 32px;\n border-radius: 100%;\n content: '';\n position: absolute;\n top: 7px;\n left: calc(50% - 16px);\n z-index: -1;\n pointer-events: none;\n }\n\n &:focus {\n z-index: 1;\n }\n\n &:where([data-hidden]) {\n visibility: hidden;\n pointer-events: none;\n }\n\n &:where([data-weekend]) {\n color: var(--mantine-color-red-6);\n }\n\n &:where([data-outside]) {\n color: var(--day-dimmed-color);\n }\n\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n }\n }\n\n &:where([data-today]:not([data-selected])) {\n @mixin where-light {\n &::before {\n background-color: var(--mantine-color-gray-2);\n }\n }\n\n @mixin where-dark {\n &::before {\n background-color: var(--mantine-color-dark-5);\n }\n }\n }\n\n &:where([data-selected]) {\n color: var(--mantine-primary-color-contrast);\n\n &::before {\n background-color: var(--mantine-primary-color-filled);\n }\n\n @mixin hover {\n &::before {\n background-color: var(--mantine-primary-color-filled-hover);\n }\n }\n }\n\n &:where([data-static]) {\n cursor: default;\n pointer-events: none;\n }\n}\n\n.mobileMonthViewDayIndicators {\n position: absolute;\n bottom: 2px;\n inset-inline: 0;\n display: flex;\n justify-content: center;\n padding-inline-start: 2px;\n}\n\n.mobileMonthViewDayIndicator {\n width: 5px;\n height: 5px;\n border-radius: 100%;\n margin-inline-start: -1px;\n}\n\n.mobileMonthViewEventsList {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n padding: var(--mantine-spacing-sm);\n}\n\n.mobileMonthViewEventsHeader {\n margin-bottom: var(--mantine-spacing-sm);\n font-weight: var(--mantine-font-weight-semibold);\n text-transform: capitalize;\n}\n\n.mobileMonthViewEvent {\n display: block;\n width: 100%;\n text-align: start;\n cursor: pointer;\n\n &:where(:not(:last-child)) {\n border-bottom: 1px solid var(--mobile-month-view-border-color);\n }\n\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n }\n }\n}\n\n.mobileMonthViewEventBody {\n display: flex;\n gap: var(--mantine-spacing-sm);\n padding: var(--mantine-spacing-xs) 0;\n}\n\n.mobileMonthViewEventColor {\n width: 4px;\n border-radius: 2px;\n flex-shrink: 0;\n}\n\n.mobileMonthViewEventTime {\n margin-top: 2px;\n font-size: var(--mantine-font-size-xs);\n color: var(--mantine-color-dimmed);\n}\n\n.mobileMonthViewNoEvents {\n color: var(--mantine-color-dimmed);\n text-align: center;\n padding-block: var(--mantine-spacing-xl);\n}\n"],"mappings":""}
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
3
+ const require_get_month_days = require("../../utils/get-month-days/get-month-days.cjs");
4
+ const require_is_same_month = require("../../utils/is-same-month/is-same-month.cjs");
5
+ const require_get_visible_week_days = require("../../utils/get-visible-week-days/get-visible-week-days.cjs");
6
+ let dayjs = require("dayjs");
7
+ dayjs = require_runtime.__toESM(dayjs);
8
+ //#region packages/@mantine/schedule/src/components/MobileMonthView/get-mobile-month-view-weeks.ts
9
+ const WEEKS_IN_MONTH_VIEW = 6;
10
+ const DAYS_IN_WEEK = 7;
11
+ function getNextWeek(week) {
12
+ const start = (0, dayjs.default)(week[week.length - 1]).add(1, "day");
13
+ return Array.from({ length: DAYS_IN_WEEK }, (_, index) => start.add(index, "day").format("YYYY-MM-DD 00:00:00"));
14
+ }
15
+ function getMobileMonthViewWeeks({ month, firstDayOfWeek, consistentWeeks, withOutsideDays, weekendDays, withWeekendDays }) {
16
+ const weeks = require_get_month_days.getMonthDays({
17
+ month: (0, dayjs.default)(month).format("YYYY-MM-DD"),
18
+ firstDayOfWeek,
19
+ consistentWeeks: false
20
+ }).filter((week) => require_get_visible_week_days.getVisibleWeekDays({
21
+ week,
22
+ weekendDays,
23
+ withWeekendDays
24
+ }).some((day) => withOutsideDays || require_is_same_month.isSameMonth(day, month)));
25
+ if (!consistentWeeks || weeks.length === 0) return weeks;
26
+ while (weeks.length < WEEKS_IN_MONTH_VIEW) weeks.push(getNextWeek(weeks[weeks.length - 1]));
27
+ return weeks;
28
+ }
29
+ //#endregion
30
+ exports.getMobileMonthViewWeeks = getMobileMonthViewWeeks;
31
+
32
+ //# sourceMappingURL=get-mobile-month-view-weeks.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-mobile-month-view-weeks.cjs","names":["getMonthDays","getVisibleWeekDays","isSameMonth"],"sources":["../../../src/components/MobileMonthView/get-mobile-month-view-weeks.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getMonthDays, getVisibleWeekDays, isSameMonth } from '../../utils';\n\nconst WEEKS_IN_MONTH_VIEW = 6;\nconst DAYS_IN_WEEK = 7;\n\ninterface GetMobileMonthViewWeeksInput {\n month: AnyDateValue;\n firstDayOfWeek: DayOfWeek;\n consistentWeeks: boolean | undefined;\n withOutsideDays: boolean | undefined;\n weekendDays: DayOfWeek[];\n withWeekendDays: boolean | undefined;\n}\n\nfunction getNextWeek(week: DateStringValue[]): DateStringValue[] {\n const start = dayjs(week[week.length - 1]).add(1, 'day');\n return Array.from({ length: DAYS_IN_WEEK }, (_, index) =>\n start.add(index, 'day').format('YYYY-MM-DD 00:00:00')\n );\n}\n\nexport function getMobileMonthViewWeeks({\n month,\n firstDayOfWeek,\n consistentWeeks,\n withOutsideDays,\n weekendDays,\n withWeekendDays,\n}: GetMobileMonthViewWeeksInput): DateStringValue[][] {\n const weeks = getMonthDays({\n month: dayjs(month).format('YYYY-MM-DD'),\n firstDayOfWeek,\n consistentWeeks: false,\n }).filter((week) =>\n getVisibleWeekDays({ week, weekendDays, withWeekendDays }).some(\n (day) => withOutsideDays || isSameMonth(day, month)\n )\n );\n\n if (!consistentWeeks || weeks.length === 0) {\n return weeks;\n }\n\n while (weeks.length < WEEKS_IN_MONTH_VIEW) {\n weeks.push(getNextWeek(weeks[weeks.length - 1]));\n }\n\n return weeks;\n}\n"],"mappings":";;;;;;;;AAIA,MAAM,sBAAsB;AAC5B,MAAM,eAAe;AAWrB,SAAS,YAAY,MAA4C;CAC/D,MAAM,SAAA,GAAQ,MAAA,QAAA,CAAM,KAAK,KAAK,SAAS,EAAE,CAAC,CAAC,IAAI,GAAG,KAAK;CACvD,OAAO,MAAM,KAAK,EAAE,QAAQ,aAAa,IAAI,GAAG,UAC9C,MAAM,IAAI,OAAO,KAAK,CAAC,CAAC,OAAO,qBAAqB,CACtD;AACF;AAEA,SAAgB,wBAAwB,EACtC,OACA,gBACA,iBACA,iBACA,aACA,mBACoD;CACpD,MAAM,QAAQA,uBAAAA,aAAa;EACzB,QAAA,GAAO,MAAA,QAAA,CAAM,KAAK,CAAC,CAAC,OAAO,YAAY;EACvC;EACA,iBAAiB;CACnB,CAAC,CAAC,CAAC,QAAQ,SACTC,8BAAAA,mBAAmB;EAAE;EAAM;EAAa;CAAgB,CAAC,CAAC,CAAC,MACxD,QAAQ,mBAAmBC,sBAAAA,YAAY,KAAK,KAAK,CACpD,CACF;CAEA,IAAI,CAAC,mBAAmB,MAAM,WAAW,GACvC,OAAO;CAGT,OAAO,MAAM,SAAS,qBACpB,MAAM,KAAK,YAAY,MAAM,MAAM,SAAS,EAAE,CAAC;CAGjD,OAAO;AACT"}
@@ -2,6 +2,7 @@
2
2
  const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
3
3
  const require_labels = require("../../labels.cjs");
4
4
  const require_format_date = require("../../utils/format-date/format-date.cjs");
5
+ const require_clamp_interval_minutes = require("../../utils/clamp-interval-minutes/clamp-interval-minutes.cjs");
5
6
  const require_get_day_time_intervals = require("../../utils/get-day-time-intervals/get-day-time-intervals.cjs");
6
7
  const require_to_date_string = require("../../utils/to-date-string/to-date-string.cjs");
7
8
  const require_get_current_time_position = require("../../utils/get-current-time-position/get-current-time-position.cjs");
@@ -13,6 +14,7 @@ const require_calculate_drop_time = require("../../utils/calculate-drop-time/cal
13
14
  const require_get_business_hours_mod = require("../../utils/get-business-hours-mod/get-business-hours-mod.cjs");
14
15
  const require_expand_recurring_events = require("../../utils/expand-recurring-events/expand-recurring-events.cjs");
15
16
  const require_get_ordered_resources = require("../../utils/get-ordered-resources/get-ordered-resources.cjs");
17
+ const require_add_minutes_to_time = require("../../utils/add-minutes-to-time/add-minutes-to-time.cjs");
16
18
  const require_handle_resources_grid_key_down = require("../../utils/handle-resources-grid-key-down/handle-resources-grid-key-down.cjs");
17
19
  const require_get_group_to_resource_id_map = require("../../utils/get-group-to-resource-id-map/get-group-to-resource-id-map.cjs");
18
20
  const require_get_index_from_drag_point = require("../../utils/get-index-from-drag-point/get-index-from-drag-point.cjs");
@@ -58,7 +60,9 @@ const varsResolver = (0, _mantine_core.createVarsResolver)((_theme, { radius, sl
58
60
  "--resources-day-view-radius": radius ? (0, _mantine_core.getRadius)(radius) : void 0,
59
61
  "--resources-day-view-slot-width": (0, _mantine_core.rem)(slotWidth),
60
62
  "--resources-day-view-row-height": (0, _mantine_core.rem)(rowHeight),
61
- "--resources-day-view-group-label-width": (0, _mantine_core.rem)(groupLabelWidth)
63
+ "--resources-day-view-group-label-width": (0, _mantine_core.rem)(groupLabelWidth),
64
+ "--resources-day-view-business-hours-bg": void 0,
65
+ "--resources-day-view-non-business-hours-bg": void 0
62
66
  } }));
63
67
  const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
64
68
  const props = (0, _mantine_core.useProps)("ResourcesDayView", defaultProps, _props);
@@ -293,17 +297,20 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
293
297
  locale: ctx.getLocale(locale),
294
298
  format: slotLabelFormat
295
299
  });
300
+ const labelBusinessHours = require_get_business_hours_mod.getBusinessHoursState({
301
+ time: interval.startTime,
302
+ endTime: require_add_minutes_to_time.addMinutesToTime(interval.startTime, require_clamp_interval_minutes.clampIntervalMinutes(intervalMinutes)),
303
+ businessHours,
304
+ highlightBusinessHours
305
+ });
296
306
  return /* @__PURE__ */ (0, react.createElement)(_mantine_core.Box, {
297
307
  ...getStyles("resourcesDayViewTimeLabel"),
298
308
  key: interval.startTime,
299
309
  mod: {
300
310
  "hour-start": interval.isHourStart,
301
- ...require_get_business_hours_mod.getBusinessHoursMod({
302
- time: interval.startTime,
303
- businessHours,
304
- highlightBusinessHours
305
- })
306
- }
311
+ ...labelBusinessHours.mod
312
+ },
313
+ __vars: labelBusinessHours.vars
307
314
  }, label);
308
315
  });
309
316
  const slotsRef = (0, react.useRef)([]);
@@ -524,6 +531,7 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
524
531
  }) : [];
525
532
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_ResourcesDayViewColumn.ResourcesDayViewRow, {
526
533
  resource,
534
+ intervalMinutes,
527
535
  resourceIndex,
528
536
  date: dateStr,
529
537
  slots,
@@ -1 +1 @@
1
- {"version":3,"file":"ResourcesDayView.cjs","names":["createVarsResolver","getRadius","rem","factory","useProps","useStyles","useResolvedStylesApi","useMantineTheme","useDirection","useState","useDatesContext","getDayTimeIntervals","useMemo","getOrderedResources","useRef","useCallback","calculateDropTime","expandRecurringEvents","useDragDropHandlers","getGroupToResourceIdMap","useSlotDragSelect","useHorizontalEventResize","useMounted","getCurrentTimePosition","isInTimeRange","formatDate","getResourcesDayViewEvents","Box","getBusinessHoursMod","useMergedRef","classes","getIndexFromDragPoint","ScheduleBackgroundEvent","isAllDayEvent","getTimeAxisEventStyle","ScheduleEvent","getOverlapClusters","MoreEvents","ResourcesDayViewRow","getDayPosition","ScheduleHeaderBase","toDateString","ScrollArea","getLabel","DragContext"],"sources":["../../../src/components/ResourcesDayView/ResourcesDayView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n rem,\n ScrollArea,\n ScrollAreaProps,\n StylesApiProps,\n useDirection,\n useMantineTheme,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useInterval, useIsomorphicEffect, useMergedRef, useMounted } from '@mantine/hooks';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useHorizontalEventResize } from '../../hooks/use-horizontal-event-resize';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n AnyDateValue,\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayPositionedEventData,\n PreventEventOverlap,\n ScheduleCanDropEventData,\n ScheduleCanDropExternalEventData,\n ScheduleCanResizeEventToData,\n ScheduleEventData,\n ScheduleEventPlacementRejectedData,\n ScheduleMode,\n ScheduleResourceData,\n ScheduleResourceGroup,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateDropTime,\n expandRecurringEvents,\n formatDate,\n getBusinessHoursMod,\n getDayPosition,\n getCurrentTimePosition,\n getDayTimeIntervals,\n getGroupToResourceIdMap,\n getIndexFromDragPoint,\n getOrderedResources,\n getOverlapClusters,\n getTimeAxisEventStyle,\n handleResourcesGridKeyDown,\n isAllDayEvent,\n isInTimeRange,\n ResourcesGridControlsRef,\n toDateString,\n} from '../../utils';\nimport { DragContext, DragContextValue } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\nimport { ScheduleBackgroundEvent } from '../ScheduleBackgroundEvent';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getResourcesDayViewEvents } from './get-resources-day-view-events/get-resources-day-view-events';\nimport { ResourcesDayViewRow } from './ResourcesDayViewColumn';\nimport classes from './ResourcesDayView.module.css';\n\nexport type ResourcesDayViewStylesNames =\n | 'resourcesDayView'\n | 'resourcesDayViewRoot'\n | 'resourcesDayViewInner'\n | 'resourcesDayViewTimeLabelsRow'\n | 'resourcesDayViewScrollArea'\n | 'resourcesDayViewCorner'\n | 'resourcesDayViewTimeLabel'\n | 'resourcesDayViewResourceLabel'\n | 'resourcesDayViewRow'\n | 'resourcesDayViewRowSlot'\n | 'resourcesDayViewRowSlots'\n | 'resourcesDayViewBackgroundEvent'\n | 'resourcesDayViewAllDayEvent'\n | 'resourcesDayViewCurrentTimeIndicator'\n | 'resourcesDayViewCurrentTimeIndicatorLine'\n | 'resourcesDayViewCurrentTimeIndicatorThumb'\n | 'resourcesDayViewCurrentTimeIndicatorTimeBubble'\n | 'resourcesDayViewEventWrapper'\n | 'resourcesDayViewDragPreview'\n | 'resourcesDayViewResizeHandle'\n | 'resourcesDayViewGroupColumn'\n | 'resourcesDayViewGroupColumnEmpty'\n | MoreEventsStylesNames\n | CombinedScheduleHeaderStylesNames;\n\nexport type ResourcesDayViewCssVariables = {\n resourcesDayView:\n | '--resources-day-view-radius'\n | '--resources-day-view-slot-width'\n | '--resources-day-view-row-height'\n | '--resources-day-view-group-label-width';\n};\n\nexport interface ResourcesDayViewProps\n extends BoxProps, StylesApiProps<ResourcesDayViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Day to display, Date object or date string in `YYYY-MM-DD` format */\n date: Date | string;\n\n /** Called with the new date value when a date is selected */\n onDateChange?: (value: DateStringValue) => void;\n\n /** List of resources to display as rows */\n resources: ScheduleResourceData[];\n\n /** Start time for the day view, in `HH:mm:ss` format @default 00:00:00 */\n startTime?: string;\n\n /** End time for the day view, in `HH:mm:ss` format @default 23:59:59 */\n endTime?: string;\n\n /** Number of minutes for each interval in the day view. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours (e.g. `120`, `240`) @default 60 */\n intervalMinutes?: number;\n\n /** Minimum on-screen size of an event along the time axis, in px. Prevents very short events from collapsing. Larger values make brief events easier to see but extend them past their real start time. @default 1 */\n minEventSize?: number;\n\n /** Dayjs format for slot labels or a callback function that returns formatted value @default HH:mm */\n slotLabelFormat?: DateLabelFormat;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Time to scroll to on initial render, in `HH:mm:ss` format */\n startScrollTime?: string;\n\n /** Props passed down to the `ScrollArea` component */\n scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n\n /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n locale?: string;\n\n /** If set, displays a vertical line indicating the current time. By default, displayed only for the current day. */\n withCurrentTimeIndicator?: boolean;\n\n /** If set, the time indicator displays the current time in the bubble @default true */\n withCurrentTimeBubble?: boolean;\n\n /** A function to get the current time, called on every tick. Can be used to display the current time indicator in a different timezone. @default () => dayjs() */\n getCurrentTime?: () => AnyDateValue;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous control */\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to next control */\n nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to today control */\n todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to view level select */\n viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n\n /** Dayjs format for header label @default 'MMMM D, YYYY' */\n headerFormat?: DateLabelFormat;\n\n /** List of events to display */\n events?: ScheduleEventData[];\n\n /** Width of each time slot column @default 80px */\n slotWidth?: React.CSSProperties['width'];\n\n /** Height of each resource row @default 64px */\n rowHeight?: React.CSSProperties['height'];\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n\n /** If set to true, highlights business hours with white background @default false */\n highlightBusinessHours?: boolean;\n\n /** Business hours range in `HH:mm:ss` format @default ['09:00:00', '17:00:00'] */\n businessHours?: [string, string];\n\n /** Function to customize event body */\n renderEventBody?: RenderEventBody;\n\n /** Function to fully customize event rendering */\n renderEvent?: RenderEvent;\n\n /** Function to customize resource label rendering */\n renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n /** List of resource groups to display as a column to the left of resource labels */\n groups?: ScheduleResourceGroup[];\n\n /** Function to customize group label rendering */\n renderGroupLabel?: (group: ScheduleResourceGroup) => React.ReactNode;\n\n /** Width of the group label column @default 80px */\n groupLabelWidth?: React.CSSProperties['width'];\n\n /** If true, events can be dragged and dropped @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped at new time, includes target resourceId */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n resourceId?: string | number;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Snap step for moving events by drag and drop, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */\n eventDragInterval?: number;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** Called when time slot is clicked, includes resourceId */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */\n withInteractiveBackgroundEvents?: boolean;\n\n /** If set, enables drag-to-select time slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a time slot range is selected by dragging, includes resourceId */\n onSlotDragEnd?: (data: {\n rangeStart: DateTimeStringValue;\n rangeEnd: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Interaction mode @default default */\n mode?: ScheduleMode;\n\n /** Called when an external item is dropped onto the schedule */\n onExternalEventDrop?: (data: {\n dataTransfer: DataTransfer;\n dropDateTime: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** If true, events can be resized by dragging their left/right edges @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */\n canDropEvent?: (data: ScheduleCanDropEventData) => boolean;\n\n /** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */\n canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;\n\n /** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */\n canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;\n\n /** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */\n preventEventOverlap?: PreventEventOverlap;\n\n /** Called when a drop or resize is rejected */\n onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;\n\n /** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */\n eventResizeInterval?: number;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Maximum number of events visible per time slot before \"+more\" indicator shows, minimum value is 1 @default 2 */\n maxEventsPerTimeSlot?: number;\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n}\n\nexport type ResourcesDayViewFactory = Factory<{\n props: ResourcesDayViewProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesDayViewStylesNames;\n vars: ResourcesDayViewCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'ResourcesDayView',\n startTime: '00:00:00',\n endTime: '23:59:59',\n slotLabelFormat: 'HH:mm',\n intervalMinutes: 60,\n minEventSize: 1,\n withHeader: true,\n headerFormat: 'MMMM D, YYYY',\n highlightBusinessHours: false,\n businessHours: ['09:00:00', '17:00:00'],\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n withEventResize: false,\n mode: 'default',\n maxEventsPerTimeSlot: 2,\n withInteractiveBackgroundEvents: false,\n} satisfies Partial<ResourcesDayViewProps>;\n\nconst varsResolver = createVarsResolver<ResourcesDayViewFactory>(\n (_theme, { radius, slotWidth, rowHeight, groupLabelWidth }) => ({\n resourcesDayView: {\n '--resources-day-view-radius': radius ? getRadius(radius) : undefined,\n '--resources-day-view-slot-width': rem(slotWidth),\n '--resources-day-view-row-height': rem(rowHeight),\n '--resources-day-view-group-label-width': rem(groupLabelWidth),\n },\n })\n);\n\nexport const ResourcesDayView = factory<ResourcesDayViewFactory>((_props) => {\n const props = useProps('ResourcesDayView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n startTime,\n endTime,\n date,\n onDateChange,\n resources,\n intervalMinutes,\n minEventSize,\n slotLabelFormat,\n radius,\n startScrollTime,\n scrollAreaProps,\n locale,\n withCurrentTimeIndicator: _withCurrentTimeIndicator,\n withCurrentTimeBubble = true,\n getCurrentTime,\n __staticSelector,\n withHeader,\n onViewChange,\n previousControlProps,\n nextControlProps,\n todayControlProps,\n viewSelectProps,\n headerFormat,\n events,\n slotWidth,\n rowHeight,\n labels,\n highlightBusinessHours,\n businessHours,\n renderEventBody,\n renderEvent,\n renderResourceLabel,\n groups,\n renderGroupLabel,\n groupLabelWidth,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n eventDragInterval,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onEventClick,\n withInteractiveBackgroundEvents,\n withDragSlotSelect,\n onSlotDragEnd,\n mode,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n canDropEvent,\n canDropExternalEvent,\n canResizeEventTo,\n preventEventOverlap,\n onEventPlacementRejected,\n eventResizeInterval,\n recurrenceExpansionLimit,\n maxEventsPerTimeSlot: _maxEventsPerTimeSlot,\n moreEventsProps,\n ...others\n } = props;\n\n const maxEventsPerTimeSlot =\n _maxEventsPerTimeSlot !== undefined ? Math.max(1, _maxEventsPerTimeSlot) : undefined;\n\n const getStyles = useStyles<ResourcesDayViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n attributes,\n rootSelector: 'resourcesDayView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ResourcesDayViewFactory>({\n classNames,\n styles,\n props,\n });\n\n const stylesApiProps = {\n classNames: resolvedClassNames,\n styles: resolvedStyles,\n attributes,\n __staticSelector,\n radius,\n };\n\n const theme = useMantineTheme();\n const { dir } = useDirection();\n const [scrolled, setScrolled] = useState(false);\n const [scrolledX, setScrolledX] = useState(false);\n const ctx = useDatesContext();\n const slots = getDayTimeIntervals({ startTime, endTime, intervalMinutes });\n const { orderedResources, groupRanges, resourceGroupMap } = useMemo(\n () => getOrderedResources(resources, groups),\n [resources, groups]\n );\n const hasGroups = groupRanges.length > 0;\n\n type DropTargetSlot = { resourceId: string | number; slotIndex: number };\n\n const dragOffsetRef = useRef<{ offset: number; size: number }>({ offset: 0, size: 0 });\n\n const getExternalDropDateTime = useCallback(\n (target: DropTargetSlot) => {\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n const slotTime = slots[target.slotIndex].startTime;\n const dropDateTime = `${slotDate} ${slotTime}`;\n\n if (eventDragInterval == null) {\n return dropDateTime;\n }\n\n const { start } = calculateDropTime({\n draggedEvent: { start: dropDateTime, end: dropDateTime } as ScheduleEventData,\n targetDate: slotDate,\n targetSlotTime: slotTime,\n intervalMinutes,\n dragIntervalMinutes: eventDragInterval,\n slotOffset: dragOffsetRef.current.offset,\n slotSize: dragOffsetRef.current.size,\n startTime,\n endTime,\n });\n\n return dayjs(start).format('YYYY-MM-DD HH:mm:ss');\n },\n [slots, date, eventDragInterval, intervalMinutes, startTime, endTime]\n );\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, target: DropTargetSlot) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop({\n dataTransfer: e.dataTransfer,\n dropDateTime: getExternalDropDateTime(target),\n resourceId: target.resourceId,\n });\n },\n [onExternalEventDrop, getExternalDropDateTime]\n );\n\n const lastDropResourceId = useRef<string | number | undefined>(undefined);\n\n const getDropTimeForSlot = (target: DropTargetSlot, draggedEvent: ScheduleEventData) => {\n const slotTime = slots[target.slotIndex].startTime;\n return calculateDropTime({\n draggedEvent,\n targetDate: dayjs(date).format('YYYY-MM-DD'),\n targetSlotTime: slotTime,\n intervalMinutes,\n dragIntervalMinutes: eventDragInterval,\n slotOffset: eventDragInterval == null ? undefined : dragOffsetRef.current.offset,\n slotSize: eventDragInterval == null ? undefined : dragOffsetRef.current.size,\n startTime,\n endTime,\n });\n };\n\n const handleInternalEventDrop = useCallback(\n (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => {\n onEventDrop?.({ ...data, resourceId: lastDropResourceId.current });\n },\n [onEventDrop]\n );\n\n const expandedEvents = useMemo(\n () =>\n expandRecurringEvents({\n events,\n rangeStart: dayjs(date).startOf('day').toDate(),\n rangeEnd: dayjs(date).endOf('day').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n }),\n [events, date, recurrenceExpansionLimit]\n );\n\n const dragDrop = useDragDropHandlers<DropTargetSlot>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop: handleInternalEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (target: DropTargetSlot, draggedEvent: ScheduleEventData) => {\n lastDropResourceId.current = target.resourceId;\n return getDropTimeForSlot(target, draggedEvent);\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n events: expandedEvents,\n preventEventOverlap,\n canDropEvent,\n canDropExternalEvent,\n onEventPlacementRejected,\n getExternalDropDateTime,\n getTargetResourceId: (target) => target.resourceId,\n });\n\n const updateDragPreview = (target: DropTargetSlot) => {\n const draggedEvent = dragDrop.dragContextValue.draggedEvent;\n if (eventDragInterval == null || !draggedEvent) {\n return;\n }\n const { start, end } = getDropTimeForSlot(target, draggedEvent);\n const newStart = dayjs(start).format('YYYY-MM-DD HH:mm:ss');\n if (\n dragDrop.dragPreview?.start !== newStart ||\n dragDrop.dragPreview?.target.resourceId !== target.resourceId\n ) {\n dragDrop.setDragPreview({\n start: newStart,\n end: dayjs(end).format('YYYY-MM-DD HH:mm:ss'),\n target,\n });\n }\n };\n\n const suppressDropHighlight = eventDragInterval != null && dragDrop.dragContextValue.isDragging;\n\n const groupToResourceId = useMemo(() => getGroupToResourceIdMap(resources), [resources]);\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex, group) => {\n if (!onSlotDragEnd) {\n return;\n }\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n onSlotDragEnd({\n rangeStart: `${slotDate} ${slots[startIndex].startTime}`,\n rangeEnd: `${slotDate} ${slots[endIndex].endTime}`,\n resourceId: groupToResourceId.get(group) ?? group,\n });\n },\n });\n\n const eventResize = useHorizontalEventResize({\n enabled: withEventResize,\n mode,\n startTime,\n endTime,\n intervalMinutes,\n resizeIntervalMinutes: eventResizeInterval,\n onEventResize,\n canResizeEvent,\n events: expandedEvents,\n preventEventOverlap,\n canResizeEventTo,\n onEventPlacementRejected,\n withBackgroundEvents: withInteractiveBackgroundEvents,\n });\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const handleTimeSlotClick = (\n resourceId: string | number,\n slotTime: string,\n e: React.MouseEvent<HTMLButtonElement>\n ) => {\n if (!onTimeSlotClick) {\n return;\n }\n\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n const slotIndex = slots.findIndex((s) => s.startTime === slotTime);\n if (slotIndex === -1) {\n return;\n }\n\n const slot = slots[slotIndex];\n onTimeSlotClick({\n slotStart: `${slotDate} ${slot.startTime}`,\n slotEnd: `${slotDate} ${slot.endTime}`,\n nativeEvent: e,\n resourceId,\n });\n };\n\n const dateStr = dayjs(date).format('YYYY-MM-DD');\n const resolveNow = () => (getCurrentTime ? dayjs(getCurrentTime()) : dayjs());\n const now = resolveNow();\n const isToday = dayjs(date).isSame(now, 'day');\n const withCurrentTimeIndicator = _withCurrentTimeIndicator ?? isToday;\n\n const mounted = useMounted();\n const [, setTimeIndicatorTick] = useState(0);\n useInterval(() => setTimeIndicatorTick((tick) => tick + 1), 60000, { autoInvoke: true });\n const timeIndicatorOffset = getCurrentTimePosition({ startTime, endTime, intervalMinutes, now });\n const showTimeIndicator =\n mounted &&\n withCurrentTimeIndicator &&\n isInTimeRange({ date: now.toDate(), startTime, endTime });\n const formattedCurrentTime = withCurrentTimeBubble\n ? formatDate({ locale: ctx.getLocale(locale), date: now, format: slotLabelFormat })\n : '';\n\n const resourceEvents = useMemo(\n () =>\n getResourcesDayViewEvents({\n date,\n events: expandedEvents,\n resources,\n startTime,\n endTime,\n intervalMinutes,\n }),\n [date, expandedEvents, resources, startTime, endTime, intervalMinutes]\n );\n\n const timeLabels = slots.map((interval) => {\n const intervalTime = dayjs(`${dateStr} ${interval.startTime}`);\n const label = formatDate({\n date: intervalTime,\n locale: ctx.getLocale(locale),\n format: slotLabelFormat,\n });\n\n return (\n <Box\n {...getStyles('resourcesDayViewTimeLabel')}\n key={interval.startTime}\n mod={{\n 'hour-start': interval.isHourStart,\n ...getBusinessHoursMod({\n time: interval.startTime,\n businessHours,\n highlightBusinessHours,\n }),\n }}\n >\n {label}\n </Box>\n );\n });\n\n const slotsRef: ResourcesGridControlsRef = useRef<HTMLButtonElement[][]>([]);\n const rowSlotsContainersRef = useRef<(HTMLDivElement | null)[]>([]);\n const viewportRef = useRef<HTMLDivElement>(null);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n\n const firstSlotIndex = { resourceIndex: 0, slotIndex: 0 };\n\n useIsomorphicEffect(() => {\n if (!startScrollTime || !viewportRef.current) {\n return;\n }\n\n const firstResourceSlots = slotsRef.current[0];\n if (!firstResourceSlots || firstResourceSlots.length === 0) {\n return;\n }\n\n const targetIndex = slots.findIndex((s) => s.startTime >= startScrollTime);\n if (targetIndex < 0) {\n return;\n }\n\n const targetSlot = firstResourceSlots[targetIndex];\n if (!targetSlot) {\n return;\n }\n\n const slotRect = targetSlot.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n const cornerEl = viewportRef.current.querySelector(`.${classes.resourcesDayViewCorner}`);\n const labelWidth = cornerEl ? cornerEl.getBoundingClientRect().width : 0;\n viewportRef.current.scrollTo({\n left: slotRect.left - viewportRect.left + viewportRef.current.scrollLeft - labelWidth,\n top: 0,\n });\n }, []);\n\n const getSlotIndexFromDragPoint = useCallback(\n (event: React.DragEvent, resourceIndex: number) => {\n const daySlots = slotsRef.current[resourceIndex] ?? [];\n const index = getIndexFromDragPoint(daySlots, event.clientX);\n if (index !== null) {\n const rect = daySlots[index]?.getBoundingClientRect();\n if (rect) {\n const rawOffset = dir === 'rtl' ? rect.right - event.clientX : event.clientX - rect.left;\n dragOffsetRef.current = {\n offset: Math.max(0, Math.min(rect.width, rawOffset)),\n size: rect.width,\n };\n }\n }\n return index;\n },\n [dir]\n );\n\n const handleSlotKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n resourceIndex: number,\n slotIndex: number\n ) => {\n handleResourcesGridKeyDown({\n controlsRef: slotsRef,\n resourceIndex,\n slotIndex,\n event,\n });\n };\n\n const interactiveBackgroundEvents = withInteractiveBackgroundEvents && mode !== 'static';\n\n const rows = orderedResources.map((resource, resourceIndex) => {\n const renderBackgroundEvent = (event: DayPositionedEventData, allDay: boolean) => {\n const isResizable = !allDay && eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n\n return (\n <ScheduleBackgroundEvent<'start' | 'end'>\n key={`bg-${event.id}`}\n event={event}\n renderEvent={renderEvent}\n renderEventBody={renderEventBody}\n interactive={interactiveBackgroundEvents}\n onEventClick={\n onEventClick\n ? (clickedEvent, e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(clickedEvent, e);\n }\n }\n : undefined\n }\n withResize={isResizable}\n isResizing={resizePosition !== null}\n activeResizeEdge={eventResize.resizingEdge}\n resizeAxis=\"horizontal\"\n resizeHandleProps={getStyles('resourcesDayViewResizeHandle')}\n onResizeStart={\n isResizable\n ? (edge, e) => {\n const container = rowSlotsContainersRef.current[resourceIndex];\n if (container) {\n eventResize.handleResizeStart({\n event,\n edge,\n container,\n originalLeft: event.position.top,\n originalWidth: event.position.height,\n eventDate: dateStr,\n pointerEvent: e,\n });\n }\n }\n : undefined\n }\n {...getStyles('resourcesDayViewBackgroundEvent', {\n style: {\n left: `${resizePosition ? resizePosition.left : event.position.top}%`,\n width: `${resizePosition ? resizePosition.width : event.position.height}%`,\n top: 0,\n height: '100%',\n },\n })}\n />\n );\n };\n\n const backgroundEventNodes = [\n ...(resourceEvents.backgroundTimedEvents[resource.id] || []).map((event) =>\n renderBackgroundEvent(event, false)\n ),\n ...(resourceEvents.backgroundAllDayEvents[resource.id] || []).map((event) =>\n renderBackgroundEvent(event, true)\n ),\n ];\n\n const allRegularEvents = (resourceEvents.regularEvents[resource.id] || []).filter(\n (event) => !isAllDayEvent({ event, date })\n );\n\n const visibleRegularEvents =\n maxEventsPerTimeSlot !== undefined\n ? allRegularEvents.filter((event) => event.position.column < maxEventsPerTimeSlot)\n : allRegularEvents;\n\n const regularEvents = visibleRegularEvents.map((event) => {\n const isDraggable = dragDrop.isDraggableEvent(event);\n const isResizable = eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n const eventLeft = resizePosition ? resizePosition.left : event.position.top;\n const eventWidth = resizePosition ? resizePosition.width : event.position.height;\n\n const adjustPosition =\n maxEventsPerTimeSlot !== undefined && event.position.overlaps > maxEventsPerTimeSlot;\n\n const eventColors = isResizable\n ? theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: event.variant || 'light',\n autoContrast: true,\n })\n : null;\n\n const isThisEventResizing = resizePosition !== null;\n const activeEdge =\n isThisEventResizing && eventResize.resizingEdge ? eventResize.resizingEdge : null;\n\n return (\n <Box\n key={event.id}\n {...getStyles('resourcesDayViewEventWrapper')}\n __vars={eventColors ? { '--event-color': eventColors.color } : undefined}\n data-resizing={isThisEventResizing || undefined}\n style={{\n ...getTimeAxisEventStyle({\n start: eventLeft,\n span: eventWidth,\n minSize: minEventSize,\n }),\n top: adjustPosition\n ? `calc((100% - 22px) * ${event.position.column} / ${maxEventsPerTimeSlot})`\n : `${event.position.offset}%`,\n height: adjustPosition\n ? `calc((100% - 22px) / ${maxEventsPerTimeSlot})`\n : `${event.position.width}%`,\n }}\n >\n <ScheduleEvent\n event={event}\n autoSize\n nowrap\n draggable={isDraggable}\n isResizing={isThisEventResizing}\n mod={{ invalid: isThisEventResizing && !eventResize.resizeValid }}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={\n onEventClick\n ? (e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(event, e);\n }\n }\n : undefined\n }\n style={{ width: '100%', height: '100%', padding: 0 }}\n />\n {isResizable && mode !== 'static' && (\n <>\n <div\n {...getStyles('resourcesDayViewResizeHandle')}\n data-edge=\"start\"\n data-active={activeEdge === 'start' || undefined}\n onPointerDown={(e) => {\n const container = rowSlotsContainersRef.current[resourceIndex];\n if (container) {\n eventResize.handleResizeStart({\n event,\n edge: 'start',\n container,\n originalLeft: event.position.top,\n originalWidth: event.position.height,\n eventDate: dateStr,\n pointerEvent: e,\n });\n }\n }}\n />\n <div\n {...getStyles('resourcesDayViewResizeHandle')}\n data-edge=\"end\"\n data-active={activeEdge === 'end' || undefined}\n onPointerDown={(e) => {\n const container = rowSlotsContainersRef.current[resourceIndex];\n if (container) {\n eventResize.handleResizeStart({\n event,\n edge: 'end',\n container,\n originalLeft: event.position.top,\n originalWidth: event.position.height,\n eventDate: dateStr,\n pointerEvent: e,\n });\n }\n }}\n />\n </>\n )}\n </Box>\n );\n });\n\n const allDayEvents = resourceEvents.allDayEvents[resource.id] || [];\n\n const allDayEventNodes = allDayEvents.map((event, index) => (\n <Box\n key={`all-day-${event.id}`}\n {...getStyles('resourcesDayViewAllDayEvent', {\n style: {\n top: `calc(${index} * (var(--resources-day-view-all-day-height) + 2px) + 2px)`,\n },\n })}\n >\n <ScheduleEvent\n event={event}\n autoSize\n nowrap\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n style={{ width: '100%', height: '100%' }}\n />\n </Box>\n ));\n\n const moreEventsForResource =\n maxEventsPerTimeSlot !== undefined\n ? getOverlapClusters(allRegularEvents)\n .filter((cluster) => cluster.some((e) => e.position.column >= maxEventsPerTimeSlot))\n .map((cluster) => {\n const hiddenCount = cluster.filter(\n (e) => e.position.column >= maxEventsPerTimeSlot\n ).length;\n const leftPercent = Math.min(...cluster.map((e) => e.position.top));\n const rightPercent = Math.max(\n ...cluster.map((e) => e.position.top + e.position.height)\n );\n\n return (\n <MoreEvents\n key={`more-${cluster[0].id}`}\n events={cluster}\n moreEventsCount={hiddenCount}\n mode={mode}\n labels={labels}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n onEventClick={onEventClick}\n style={{\n position: 'absolute',\n left: `calc(${leftPercent}% + 1px)`,\n width: `calc(${rightPercent - leftPercent}% - 2px)`,\n bottom: 0,\n height: '22px',\n paddingInline: 4,\n zIndex: 4,\n }}\n {...stylesApiProps}\n {...moreEventsProps}\n />\n );\n })\n : [];\n\n return (\n <ResourcesDayViewRow\n key={resource.id}\n resource={resource}\n resourceIndex={resourceIndex}\n date={dateStr}\n slots={slots}\n getStyles={getStyles}\n labels={labels}\n highlightBusinessHours={highlightBusinessHours}\n businessHours={businessHours}\n withEventsDragAndDrop={withDragHandlers}\n mode={mode}\n slotsRef={slotsRef}\n firstSlotIndex={firstSlotIndex}\n onSlotKeyDown={handleSlotKeyDown}\n onSlotClick={handleTimeSlotClick}\n onRowSlotsDragOver={(event, resourceId, resIdx) => {\n const slotIndex = getSlotIndexFromDragPoint(event, resIdx);\n if (slotIndex !== null) {\n dragDrop.handleDragOver(event, { resourceId, slotIndex });\n updateDragPreview({ resourceId, slotIndex });\n }\n }}\n onRowSlotsDragLeave={dragDrop.handleDragLeave}\n onRowSlotsDrop={(event, resourceId, resIdx) => {\n const slotIndex = getSlotIndexFromDragPoint(event, resIdx);\n if (slotIndex !== null) {\n dragDrop.handleDrop(event, { resourceId, slotIndex });\n }\n }}\n dropTargetSlotIndex={\n !suppressDropHighlight && dragDrop.dropTarget?.resourceId === resource.id\n ? dragDrop.dropTarget.slotIndex\n : undefined\n }\n withDragSlotSelect={withDragSlotSelect}\n onSlotPointerDown={slotDragSelect.handleSlotPointerDown}\n isSlotDragSelected={slotDragSelect.isSlotSelected}\n rowSlotsContainerRef={(node) => {\n rowSlotsContainersRef.current[resourceIndex] = node;\n }}\n renderResourceLabel={renderResourceLabel}\n renderGroupLabel={renderGroupLabel}\n scrolledX={scrolledX}\n groupInfo={hasGroups ? resourceGroupMap[resourceIndex] : undefined}\n allDayCount={allDayEvents.length}\n >\n {backgroundEventNodes}\n {allDayEventNodes}\n {regularEvents}\n {moreEventsForResource}\n {dragDrop.dragPreview?.target.resourceId === resource.id &&\n dragDrop.dragContextValue.draggedEvent && (\n <Box\n mod={{ invalid: !dragDrop.dropValid }}\n {...getStyles('resourcesDayViewDragPreview', {\n style: (() => {\n const { top, height } = getDayPosition({\n event: {\n ...dragDrop.dragContextValue.draggedEvent,\n start: dragDrop.dragPreview.start,\n end: dragDrop.dragPreview.end,\n },\n startTime,\n endTime,\n intervalMinutes,\n });\n return {\n position: 'absolute',\n insetBlockStart: 0,\n insetBlockEnd: 0,\n ...getTimeAxisEventStyle({ start: top, span: height, axis: 'horizontal' }),\n };\n })(),\n })}\n />\n )}\n </ResourcesDayViewRow>\n );\n });\n\n const headerLabel = formatDate({\n date: dayjs(date),\n locale: ctx.getLocale(locale),\n format: headerFormat,\n });\n\n const content = (\n <Box\n {...getStyles('resourcesDayView')}\n mod={{\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n resizing: eventResize.isResizing,\n 'event-interaction': eventResize.isResizing || dragDrop.dragContextValue.isDragging,\n }}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"day\"\n navigationHandlers={{\n previous: () => toDateString(dayjs(date).subtract(1, 'day')),\n next: () => toDateString(dayjs(date).add(1, 'day')),\n today: () => toDateString(resolveNow()),\n }}\n control={{\n miw: 140,\n title: headerLabel,\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={{ views: ['day', 'week', 'month'] as const, ...viewSelectProps }}\n stylesApiProps={stylesApiProps}\n />\n )}\n\n <Box {...getStyles('resourcesDayViewRoot')}>\n <ScrollArea\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('resourcesDayViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n onScrollPositionChange={(position) => {\n scrollAreaProps?.onScrollPositionChange?.(position);\n setScrolled(position.y !== 0);\n setScrolledX(position.x !== 0);\n }}\n viewportRef={mergedViewportRef}\n >\n <div {...getStyles('resourcesDayViewInner')}>\n <Box {...getStyles('resourcesDayViewTimeLabelsRow')} mod={{ scrolled }}>\n <div\n {...getStyles('resourcesDayViewCorner')}\n key=\"corner\"\n style={\n hasGroups\n ? {\n flexBasis:\n 'calc(var(--resources-day-view-resource-label-width) + var(--resources-day-view-group-label-width))',\n minWidth:\n 'calc(var(--resources-day-view-resource-label-width) + var(--resources-day-view-group-label-width))',\n }\n : undefined\n }\n >\n {getLabel('resources', labels)}\n </div>\n {timeLabels}\n </Box>\n\n {rows}\n\n {showTimeIndicator && (\n <Box\n {...getStyles('resourcesDayViewCurrentTimeIndicator')}\n __vars={{\n '--indicator-left-offset': hasGroups\n ? `calc(var(--resources-day-view-resource-label-width) + var(--resources-day-view-group-label-width) + (100% - var(--resources-day-view-resource-label-width) - var(--resources-day-view-group-label-width)) * ${timeIndicatorOffset} / 100)`\n : `calc(var(--resources-day-view-resource-label-width) + (100% - var(--resources-day-view-resource-label-width)) * ${timeIndicatorOffset} / 100)`,\n '--_time-bubble-width': formattedCurrentTime\n ?.toString()\n .toLowerCase()\n .includes('m')\n ? '64px'\n : '46px',\n }}\n >\n {withCurrentTimeBubble && (\n <div {...getStyles('resourcesDayViewCurrentTimeIndicatorTimeBubble')}>\n {formattedCurrentTime}\n </div>\n )}\n {!withCurrentTimeBubble && (\n <div {...getStyles('resourcesDayViewCurrentTimeIndicatorThumb')} />\n )}\n <div {...getStyles('resourcesDayViewCurrentTimeIndicatorLine')} />\n </Box>\n )}\n </div>\n </ScrollArea>\n </Box>\n </Box>\n );\n\n const dragContextValue = useMemo<DragContextValue>(\n () => dragDrop.dragContextValue,\n [dragDrop.dragContextValue]\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nResourcesDayView.displayName = '@mantine/schedule/ResourcesDayView';\nResourcesDayView.classes = classes;\nResourcesDayView.varsResolver = varsResolver;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ResourcesDayView.cjs","names":["createVarsResolver","getRadius","rem","factory","useProps","useStyles","useResolvedStylesApi","useMantineTheme","useDirection","useState","useDatesContext","getDayTimeIntervals","useMemo","getOrderedResources","useRef","useCallback","calculateDropTime","expandRecurringEvents","useDragDropHandlers","getGroupToResourceIdMap","useSlotDragSelect","useHorizontalEventResize","useMounted","getCurrentTimePosition","isInTimeRange","formatDate","getResourcesDayViewEvents","getBusinessHoursState","addMinutesToTime","clampIntervalMinutes","Box","useMergedRef","classes","getIndexFromDragPoint","ScheduleBackgroundEvent","isAllDayEvent","getTimeAxisEventStyle","ScheduleEvent","getOverlapClusters","MoreEvents","ResourcesDayViewRow","getDayPosition","ScheduleHeaderBase","toDateString","ScrollArea","getLabel","DragContext"],"sources":["../../../src/components/ResourcesDayView/ResourcesDayView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n rem,\n ScrollArea,\n ScrollAreaProps,\n StylesApiProps,\n useDirection,\n useMantineTheme,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useInterval, useIsomorphicEffect, useMergedRef, useMounted } from '@mantine/hooks';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useHorizontalEventResize } from '../../hooks/use-horizontal-event-resize';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n AnyDateValue,\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayPositionedEventData,\n PreventEventOverlap,\n ScheduleCanDropEventData,\n ScheduleCanDropExternalEventData,\n ScheduleCanResizeEventToData,\n ScheduleEventData,\n ScheduleEventPlacementRejectedData,\n ScheduleMode,\n ScheduleResourceData,\n ScheduleResourceGroup,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateDropTime,\n expandRecurringEvents,\n formatDate,\n addMinutesToTime,\n clampIntervalMinutes,\n getBusinessHoursState,\n getDayPosition,\n getCurrentTimePosition,\n getDayTimeIntervals,\n getGroupToResourceIdMap,\n getIndexFromDragPoint,\n getOrderedResources,\n getOverlapClusters,\n getTimeAxisEventStyle,\n handleResourcesGridKeyDown,\n isAllDayEvent,\n isInTimeRange,\n ResourcesGridControlsRef,\n toDateString,\n} from '../../utils';\nimport { DragContext, DragContextValue } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\nimport { ScheduleBackgroundEvent } from '../ScheduleBackgroundEvent';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getResourcesDayViewEvents } from './get-resources-day-view-events/get-resources-day-view-events';\nimport { ResourcesDayViewRow } from './ResourcesDayViewColumn';\nimport classes from './ResourcesDayView.module.css';\n\nexport type ResourcesDayViewStylesNames =\n | 'resourcesDayView'\n | 'resourcesDayViewRoot'\n | 'resourcesDayViewInner'\n | 'resourcesDayViewTimeLabelsRow'\n | 'resourcesDayViewScrollArea'\n | 'resourcesDayViewCorner'\n | 'resourcesDayViewTimeLabel'\n | 'resourcesDayViewResourceLabel'\n | 'resourcesDayViewRow'\n | 'resourcesDayViewRowSlot'\n | 'resourcesDayViewRowSlots'\n | 'resourcesDayViewBackgroundEvent'\n | 'resourcesDayViewAllDayEvent'\n | 'resourcesDayViewCurrentTimeIndicator'\n | 'resourcesDayViewCurrentTimeIndicatorLine'\n | 'resourcesDayViewCurrentTimeIndicatorThumb'\n | 'resourcesDayViewCurrentTimeIndicatorTimeBubble'\n | 'resourcesDayViewEventWrapper'\n | 'resourcesDayViewDragPreview'\n | 'resourcesDayViewResizeHandle'\n | 'resourcesDayViewGroupColumn'\n | 'resourcesDayViewGroupColumnEmpty'\n | MoreEventsStylesNames\n | CombinedScheduleHeaderStylesNames;\n\nexport type ResourcesDayViewCssVariables = {\n resourcesDayView:\n | '--resources-day-view-radius'\n | '--resources-day-view-slot-width'\n | '--resources-day-view-row-height'\n | '--resources-day-view-group-label-width'\n | '--resources-day-view-business-hours-bg'\n | '--resources-day-view-non-business-hours-bg';\n};\n\nexport interface ResourcesDayViewProps\n extends BoxProps, StylesApiProps<ResourcesDayViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Day to display, Date object or date string in `YYYY-MM-DD` format */\n date: Date | string;\n\n /** Called with the new date value when a date is selected */\n onDateChange?: (value: DateStringValue) => void;\n\n /** List of resources to display as rows */\n resources: ScheduleResourceData[];\n\n /** Start time for the day view, in `HH:mm:ss` format @default 00:00:00 */\n startTime?: string;\n\n /** End time for the day view, in `HH:mm:ss` format @default 23:59:59 */\n endTime?: string;\n\n /** Number of minutes for each interval in the day view. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours (e.g. `120`, `240`) @default 60 */\n intervalMinutes?: number;\n\n /** Minimum on-screen size of an event along the time axis, in px. Prevents very short events from collapsing. Larger values make brief events easier to see but extend them past their real start time. @default 1 */\n minEventSize?: number;\n\n /** Dayjs format for slot labels or a callback function that returns formatted value @default HH:mm */\n slotLabelFormat?: DateLabelFormat;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Time to scroll to on initial render, in `HH:mm:ss` format */\n startScrollTime?: string;\n\n /** Props passed down to the `ScrollArea` component */\n scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n\n /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n locale?: string;\n\n /** If set, displays a vertical line indicating the current time. By default, displayed only for the current day. */\n withCurrentTimeIndicator?: boolean;\n\n /** If set, the time indicator displays the current time in the bubble @default true */\n withCurrentTimeBubble?: boolean;\n\n /** A function to get the current time, called on every tick. Can be used to display the current time indicator in a different timezone. @default () => dayjs() */\n getCurrentTime?: () => AnyDateValue;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous control */\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to next control */\n nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to today control */\n todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to view level select */\n viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n\n /** Dayjs format for header label @default 'MMMM D, YYYY' */\n headerFormat?: DateLabelFormat;\n\n /** List of events to display */\n events?: ScheduleEventData[];\n\n /** Width of each time slot column @default 80px */\n slotWidth?: React.CSSProperties['width'];\n\n /** Height of each resource row @default 64px */\n rowHeight?: React.CSSProperties['height'];\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n\n /** If set to true, highlights business hours with white background @default false */\n highlightBusinessHours?: boolean;\n\n /** Business hours range in `HH:mm:ss` format @default ['09:00:00', '17:00:00'] */\n businessHours?: [string, string];\n\n /** Function to customize event body */\n renderEventBody?: RenderEventBody;\n\n /** Function to fully customize event rendering */\n renderEvent?: RenderEvent;\n\n /** Function to customize resource label rendering */\n renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n /** List of resource groups to display as a column to the left of resource labels */\n groups?: ScheduleResourceGroup[];\n\n /** Function to customize group label rendering */\n renderGroupLabel?: (group: ScheduleResourceGroup) => React.ReactNode;\n\n /** Width of the group label column @default 80px */\n groupLabelWidth?: React.CSSProperties['width'];\n\n /** If true, events can be dragged and dropped @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped at new time, includes target resourceId */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n resourceId?: string | number;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Snap step for moving events by drag and drop, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */\n eventDragInterval?: number;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** Called when time slot is clicked, includes resourceId */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */\n withInteractiveBackgroundEvents?: boolean;\n\n /** If set, enables drag-to-select time slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a time slot range is selected by dragging, includes resourceId */\n onSlotDragEnd?: (data: {\n rangeStart: DateTimeStringValue;\n rangeEnd: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Interaction mode @default default */\n mode?: ScheduleMode;\n\n /** Called when an external item is dropped onto the schedule */\n onExternalEventDrop?: (data: {\n dataTransfer: DataTransfer;\n dropDateTime: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** If true, events can be resized by dragging their left/right edges @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */\n canDropEvent?: (data: ScheduleCanDropEventData) => boolean;\n\n /** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */\n canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;\n\n /** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */\n canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;\n\n /** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */\n preventEventOverlap?: PreventEventOverlap;\n\n /** Called when a drop or resize is rejected */\n onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;\n\n /** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */\n eventResizeInterval?: number;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Maximum number of events visible per time slot before \"+more\" indicator shows, minimum value is 1 @default 2 */\n maxEventsPerTimeSlot?: number;\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n}\n\nexport type ResourcesDayViewFactory = Factory<{\n props: ResourcesDayViewProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesDayViewStylesNames;\n vars: ResourcesDayViewCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'ResourcesDayView',\n startTime: '00:00:00',\n endTime: '23:59:59',\n slotLabelFormat: 'HH:mm',\n intervalMinutes: 60,\n minEventSize: 1,\n withHeader: true,\n headerFormat: 'MMMM D, YYYY',\n highlightBusinessHours: false,\n businessHours: ['09:00:00', '17:00:00'],\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n withEventResize: false,\n mode: 'default',\n maxEventsPerTimeSlot: 2,\n withInteractiveBackgroundEvents: false,\n} satisfies Partial<ResourcesDayViewProps>;\n\nconst varsResolver = createVarsResolver<ResourcesDayViewFactory>(\n (_theme, { radius, slotWidth, rowHeight, groupLabelWidth }) => ({\n resourcesDayView: {\n '--resources-day-view-radius': radius ? getRadius(radius) : undefined,\n '--resources-day-view-slot-width': rem(slotWidth),\n '--resources-day-view-row-height': rem(rowHeight),\n '--resources-day-view-group-label-width': rem(groupLabelWidth),\n '--resources-day-view-business-hours-bg': undefined,\n '--resources-day-view-non-business-hours-bg': undefined,\n },\n })\n);\n\nexport const ResourcesDayView = factory<ResourcesDayViewFactory>((_props) => {\n const props = useProps('ResourcesDayView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n startTime,\n endTime,\n date,\n onDateChange,\n resources,\n intervalMinutes,\n minEventSize,\n slotLabelFormat,\n radius,\n startScrollTime,\n scrollAreaProps,\n locale,\n withCurrentTimeIndicator: _withCurrentTimeIndicator,\n withCurrentTimeBubble = true,\n getCurrentTime,\n __staticSelector,\n withHeader,\n onViewChange,\n previousControlProps,\n nextControlProps,\n todayControlProps,\n viewSelectProps,\n headerFormat,\n events,\n slotWidth,\n rowHeight,\n labels,\n highlightBusinessHours,\n businessHours,\n renderEventBody,\n renderEvent,\n renderResourceLabel,\n groups,\n renderGroupLabel,\n groupLabelWidth,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n eventDragInterval,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onEventClick,\n withInteractiveBackgroundEvents,\n withDragSlotSelect,\n onSlotDragEnd,\n mode,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n canDropEvent,\n canDropExternalEvent,\n canResizeEventTo,\n preventEventOverlap,\n onEventPlacementRejected,\n eventResizeInterval,\n recurrenceExpansionLimit,\n maxEventsPerTimeSlot: _maxEventsPerTimeSlot,\n moreEventsProps,\n ...others\n } = props;\n\n const maxEventsPerTimeSlot =\n _maxEventsPerTimeSlot !== undefined ? Math.max(1, _maxEventsPerTimeSlot) : undefined;\n\n const getStyles = useStyles<ResourcesDayViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n attributes,\n rootSelector: 'resourcesDayView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ResourcesDayViewFactory>({\n classNames,\n styles,\n props,\n });\n\n const stylesApiProps = {\n classNames: resolvedClassNames,\n styles: resolvedStyles,\n attributes,\n __staticSelector,\n radius,\n };\n\n const theme = useMantineTheme();\n const { dir } = useDirection();\n const [scrolled, setScrolled] = useState(false);\n const [scrolledX, setScrolledX] = useState(false);\n const ctx = useDatesContext();\n const slots = getDayTimeIntervals({ startTime, endTime, intervalMinutes });\n const { orderedResources, groupRanges, resourceGroupMap } = useMemo(\n () => getOrderedResources(resources, groups),\n [resources, groups]\n );\n const hasGroups = groupRanges.length > 0;\n\n type DropTargetSlot = { resourceId: string | number; slotIndex: number };\n\n const dragOffsetRef = useRef<{ offset: number; size: number }>({ offset: 0, size: 0 });\n\n const getExternalDropDateTime = useCallback(\n (target: DropTargetSlot) => {\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n const slotTime = slots[target.slotIndex].startTime;\n const dropDateTime = `${slotDate} ${slotTime}`;\n\n if (eventDragInterval == null) {\n return dropDateTime;\n }\n\n const { start } = calculateDropTime({\n draggedEvent: { start: dropDateTime, end: dropDateTime } as ScheduleEventData,\n targetDate: slotDate,\n targetSlotTime: slotTime,\n intervalMinutes,\n dragIntervalMinutes: eventDragInterval,\n slotOffset: dragOffsetRef.current.offset,\n slotSize: dragOffsetRef.current.size,\n startTime,\n endTime,\n });\n\n return dayjs(start).format('YYYY-MM-DD HH:mm:ss');\n },\n [slots, date, eventDragInterval, intervalMinutes, startTime, endTime]\n );\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, target: DropTargetSlot) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop({\n dataTransfer: e.dataTransfer,\n dropDateTime: getExternalDropDateTime(target),\n resourceId: target.resourceId,\n });\n },\n [onExternalEventDrop, getExternalDropDateTime]\n );\n\n const lastDropResourceId = useRef<string | number | undefined>(undefined);\n\n const getDropTimeForSlot = (target: DropTargetSlot, draggedEvent: ScheduleEventData) => {\n const slotTime = slots[target.slotIndex].startTime;\n return calculateDropTime({\n draggedEvent,\n targetDate: dayjs(date).format('YYYY-MM-DD'),\n targetSlotTime: slotTime,\n intervalMinutes,\n dragIntervalMinutes: eventDragInterval,\n slotOffset: eventDragInterval == null ? undefined : dragOffsetRef.current.offset,\n slotSize: eventDragInterval == null ? undefined : dragOffsetRef.current.size,\n startTime,\n endTime,\n });\n };\n\n const handleInternalEventDrop = useCallback(\n (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => {\n onEventDrop?.({ ...data, resourceId: lastDropResourceId.current });\n },\n [onEventDrop]\n );\n\n const expandedEvents = useMemo(\n () =>\n expandRecurringEvents({\n events,\n rangeStart: dayjs(date).startOf('day').toDate(),\n rangeEnd: dayjs(date).endOf('day').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n }),\n [events, date, recurrenceExpansionLimit]\n );\n\n const dragDrop = useDragDropHandlers<DropTargetSlot>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop: handleInternalEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (target: DropTargetSlot, draggedEvent: ScheduleEventData) => {\n lastDropResourceId.current = target.resourceId;\n return getDropTimeForSlot(target, draggedEvent);\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n events: expandedEvents,\n preventEventOverlap,\n canDropEvent,\n canDropExternalEvent,\n onEventPlacementRejected,\n getExternalDropDateTime,\n getTargetResourceId: (target) => target.resourceId,\n });\n\n const updateDragPreview = (target: DropTargetSlot) => {\n const draggedEvent = dragDrop.dragContextValue.draggedEvent;\n if (eventDragInterval == null || !draggedEvent) {\n return;\n }\n const { start, end } = getDropTimeForSlot(target, draggedEvent);\n const newStart = dayjs(start).format('YYYY-MM-DD HH:mm:ss');\n if (\n dragDrop.dragPreview?.start !== newStart ||\n dragDrop.dragPreview?.target.resourceId !== target.resourceId\n ) {\n dragDrop.setDragPreview({\n start: newStart,\n end: dayjs(end).format('YYYY-MM-DD HH:mm:ss'),\n target,\n });\n }\n };\n\n const suppressDropHighlight = eventDragInterval != null && dragDrop.dragContextValue.isDragging;\n\n const groupToResourceId = useMemo(() => getGroupToResourceIdMap(resources), [resources]);\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex, group) => {\n if (!onSlotDragEnd) {\n return;\n }\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n onSlotDragEnd({\n rangeStart: `${slotDate} ${slots[startIndex].startTime}`,\n rangeEnd: `${slotDate} ${slots[endIndex].endTime}`,\n resourceId: groupToResourceId.get(group) ?? group,\n });\n },\n });\n\n const eventResize = useHorizontalEventResize({\n enabled: withEventResize,\n mode,\n startTime,\n endTime,\n intervalMinutes,\n resizeIntervalMinutes: eventResizeInterval,\n onEventResize,\n canResizeEvent,\n events: expandedEvents,\n preventEventOverlap,\n canResizeEventTo,\n onEventPlacementRejected,\n withBackgroundEvents: withInteractiveBackgroundEvents,\n });\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const handleTimeSlotClick = (\n resourceId: string | number,\n slotTime: string,\n e: React.MouseEvent<HTMLButtonElement>\n ) => {\n if (!onTimeSlotClick) {\n return;\n }\n\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n const slotIndex = slots.findIndex((s) => s.startTime === slotTime);\n if (slotIndex === -1) {\n return;\n }\n\n const slot = slots[slotIndex];\n onTimeSlotClick({\n slotStart: `${slotDate} ${slot.startTime}`,\n slotEnd: `${slotDate} ${slot.endTime}`,\n nativeEvent: e,\n resourceId,\n });\n };\n\n const dateStr = dayjs(date).format('YYYY-MM-DD');\n const resolveNow = () => (getCurrentTime ? dayjs(getCurrentTime()) : dayjs());\n const now = resolveNow();\n const isToday = dayjs(date).isSame(now, 'day');\n const withCurrentTimeIndicator = _withCurrentTimeIndicator ?? isToday;\n\n const mounted = useMounted();\n const [, setTimeIndicatorTick] = useState(0);\n useInterval(() => setTimeIndicatorTick((tick) => tick + 1), 60000, { autoInvoke: true });\n const timeIndicatorOffset = getCurrentTimePosition({ startTime, endTime, intervalMinutes, now });\n const showTimeIndicator =\n mounted &&\n withCurrentTimeIndicator &&\n isInTimeRange({ date: now.toDate(), startTime, endTime });\n const formattedCurrentTime = withCurrentTimeBubble\n ? formatDate({ locale: ctx.getLocale(locale), date: now, format: slotLabelFormat })\n : '';\n\n const resourceEvents = useMemo(\n () =>\n getResourcesDayViewEvents({\n date,\n events: expandedEvents,\n resources,\n startTime,\n endTime,\n intervalMinutes,\n }),\n [date, expandedEvents, resources, startTime, endTime, intervalMinutes]\n );\n\n const timeLabels = slots.map((interval) => {\n const intervalTime = dayjs(`${dateStr} ${interval.startTime}`);\n const label = formatDate({\n date: intervalTime,\n locale: ctx.getLocale(locale),\n format: slotLabelFormat,\n });\n\n const labelBusinessHours = getBusinessHoursState({\n time: interval.startTime,\n endTime: addMinutesToTime(interval.startTime, clampIntervalMinutes(intervalMinutes)),\n businessHours,\n highlightBusinessHours,\n });\n\n return (\n <Box\n {...getStyles('resourcesDayViewTimeLabel')}\n key={interval.startTime}\n mod={{ 'hour-start': interval.isHourStart, ...labelBusinessHours.mod }}\n __vars={labelBusinessHours.vars}\n >\n {label}\n </Box>\n );\n });\n\n const slotsRef: ResourcesGridControlsRef = useRef<HTMLButtonElement[][]>([]);\n const rowSlotsContainersRef = useRef<(HTMLDivElement | null)[]>([]);\n const viewportRef = useRef<HTMLDivElement>(null);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n\n const firstSlotIndex = { resourceIndex: 0, slotIndex: 0 };\n\n useIsomorphicEffect(() => {\n if (!startScrollTime || !viewportRef.current) {\n return;\n }\n\n const firstResourceSlots = slotsRef.current[0];\n if (!firstResourceSlots || firstResourceSlots.length === 0) {\n return;\n }\n\n const targetIndex = slots.findIndex((s) => s.startTime >= startScrollTime);\n if (targetIndex < 0) {\n return;\n }\n\n const targetSlot = firstResourceSlots[targetIndex];\n if (!targetSlot) {\n return;\n }\n\n const slotRect = targetSlot.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n const cornerEl = viewportRef.current.querySelector(`.${classes.resourcesDayViewCorner}`);\n const labelWidth = cornerEl ? cornerEl.getBoundingClientRect().width : 0;\n viewportRef.current.scrollTo({\n left: slotRect.left - viewportRect.left + viewportRef.current.scrollLeft - labelWidth,\n top: 0,\n });\n }, []);\n\n const getSlotIndexFromDragPoint = useCallback(\n (event: React.DragEvent, resourceIndex: number) => {\n const daySlots = slotsRef.current[resourceIndex] ?? [];\n const index = getIndexFromDragPoint(daySlots, event.clientX);\n if (index !== null) {\n const rect = daySlots[index]?.getBoundingClientRect();\n if (rect) {\n const rawOffset = dir === 'rtl' ? rect.right - event.clientX : event.clientX - rect.left;\n dragOffsetRef.current = {\n offset: Math.max(0, Math.min(rect.width, rawOffset)),\n size: rect.width,\n };\n }\n }\n return index;\n },\n [dir]\n );\n\n const handleSlotKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n resourceIndex: number,\n slotIndex: number\n ) => {\n handleResourcesGridKeyDown({\n controlsRef: slotsRef,\n resourceIndex,\n slotIndex,\n event,\n });\n };\n\n const interactiveBackgroundEvents = withInteractiveBackgroundEvents && mode !== 'static';\n\n const rows = orderedResources.map((resource, resourceIndex) => {\n const renderBackgroundEvent = (event: DayPositionedEventData, allDay: boolean) => {\n const isResizable = !allDay && eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n\n return (\n <ScheduleBackgroundEvent<'start' | 'end'>\n key={`bg-${event.id}`}\n event={event}\n renderEvent={renderEvent}\n renderEventBody={renderEventBody}\n interactive={interactiveBackgroundEvents}\n onEventClick={\n onEventClick\n ? (clickedEvent, e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(clickedEvent, e);\n }\n }\n : undefined\n }\n withResize={isResizable}\n isResizing={resizePosition !== null}\n activeResizeEdge={eventResize.resizingEdge}\n resizeAxis=\"horizontal\"\n resizeHandleProps={getStyles('resourcesDayViewResizeHandle')}\n onResizeStart={\n isResizable\n ? (edge, e) => {\n const container = rowSlotsContainersRef.current[resourceIndex];\n if (container) {\n eventResize.handleResizeStart({\n event,\n edge,\n container,\n originalLeft: event.position.top,\n originalWidth: event.position.height,\n eventDate: dateStr,\n pointerEvent: e,\n });\n }\n }\n : undefined\n }\n {...getStyles('resourcesDayViewBackgroundEvent', {\n style: {\n left: `${resizePosition ? resizePosition.left : event.position.top}%`,\n width: `${resizePosition ? resizePosition.width : event.position.height}%`,\n top: 0,\n height: '100%',\n },\n })}\n />\n );\n };\n\n const backgroundEventNodes = [\n ...(resourceEvents.backgroundTimedEvents[resource.id] || []).map((event) =>\n renderBackgroundEvent(event, false)\n ),\n ...(resourceEvents.backgroundAllDayEvents[resource.id] || []).map((event) =>\n renderBackgroundEvent(event, true)\n ),\n ];\n\n const allRegularEvents = (resourceEvents.regularEvents[resource.id] || []).filter(\n (event) => !isAllDayEvent({ event, date })\n );\n\n const visibleRegularEvents =\n maxEventsPerTimeSlot !== undefined\n ? allRegularEvents.filter((event) => event.position.column < maxEventsPerTimeSlot)\n : allRegularEvents;\n\n const regularEvents = visibleRegularEvents.map((event) => {\n const isDraggable = dragDrop.isDraggableEvent(event);\n const isResizable = eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n const eventLeft = resizePosition ? resizePosition.left : event.position.top;\n const eventWidth = resizePosition ? resizePosition.width : event.position.height;\n\n const adjustPosition =\n maxEventsPerTimeSlot !== undefined && event.position.overlaps > maxEventsPerTimeSlot;\n\n const eventColors = isResizable\n ? theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: event.variant || 'light',\n autoContrast: true,\n })\n : null;\n\n const isThisEventResizing = resizePosition !== null;\n const activeEdge =\n isThisEventResizing && eventResize.resizingEdge ? eventResize.resizingEdge : null;\n\n return (\n <Box\n key={event.id}\n {...getStyles('resourcesDayViewEventWrapper')}\n __vars={eventColors ? { '--event-color': eventColors.color } : undefined}\n data-resizing={isThisEventResizing || undefined}\n style={{\n ...getTimeAxisEventStyle({\n start: eventLeft,\n span: eventWidth,\n minSize: minEventSize,\n }),\n top: adjustPosition\n ? `calc((100% - 22px) * ${event.position.column} / ${maxEventsPerTimeSlot})`\n : `${event.position.offset}%`,\n height: adjustPosition\n ? `calc((100% - 22px) / ${maxEventsPerTimeSlot})`\n : `${event.position.width}%`,\n }}\n >\n <ScheduleEvent\n event={event}\n autoSize\n nowrap\n draggable={isDraggable}\n isResizing={isThisEventResizing}\n mod={{ invalid: isThisEventResizing && !eventResize.resizeValid }}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={\n onEventClick\n ? (e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(event, e);\n }\n }\n : undefined\n }\n style={{ width: '100%', height: '100%', padding: 0 }}\n />\n {isResizable && mode !== 'static' && (\n <>\n <div\n {...getStyles('resourcesDayViewResizeHandle')}\n data-edge=\"start\"\n data-active={activeEdge === 'start' || undefined}\n onPointerDown={(e) => {\n const container = rowSlotsContainersRef.current[resourceIndex];\n if (container) {\n eventResize.handleResizeStart({\n event,\n edge: 'start',\n container,\n originalLeft: event.position.top,\n originalWidth: event.position.height,\n eventDate: dateStr,\n pointerEvent: e,\n });\n }\n }}\n />\n <div\n {...getStyles('resourcesDayViewResizeHandle')}\n data-edge=\"end\"\n data-active={activeEdge === 'end' || undefined}\n onPointerDown={(e) => {\n const container = rowSlotsContainersRef.current[resourceIndex];\n if (container) {\n eventResize.handleResizeStart({\n event,\n edge: 'end',\n container,\n originalLeft: event.position.top,\n originalWidth: event.position.height,\n eventDate: dateStr,\n pointerEvent: e,\n });\n }\n }}\n />\n </>\n )}\n </Box>\n );\n });\n\n const allDayEvents = resourceEvents.allDayEvents[resource.id] || [];\n\n const allDayEventNodes = allDayEvents.map((event, index) => (\n <Box\n key={`all-day-${event.id}`}\n {...getStyles('resourcesDayViewAllDayEvent', {\n style: {\n top: `calc(${index} * (var(--resources-day-view-all-day-height) + 2px) + 2px)`,\n },\n })}\n >\n <ScheduleEvent\n event={event}\n autoSize\n nowrap\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n style={{ width: '100%', height: '100%' }}\n />\n </Box>\n ));\n\n const moreEventsForResource =\n maxEventsPerTimeSlot !== undefined\n ? getOverlapClusters(allRegularEvents)\n .filter((cluster) => cluster.some((e) => e.position.column >= maxEventsPerTimeSlot))\n .map((cluster) => {\n const hiddenCount = cluster.filter(\n (e) => e.position.column >= maxEventsPerTimeSlot\n ).length;\n const leftPercent = Math.min(...cluster.map((e) => e.position.top));\n const rightPercent = Math.max(\n ...cluster.map((e) => e.position.top + e.position.height)\n );\n\n return (\n <MoreEvents\n key={`more-${cluster[0].id}`}\n events={cluster}\n moreEventsCount={hiddenCount}\n mode={mode}\n labels={labels}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n onEventClick={onEventClick}\n style={{\n position: 'absolute',\n left: `calc(${leftPercent}% + 1px)`,\n width: `calc(${rightPercent - leftPercent}% - 2px)`,\n bottom: 0,\n height: '22px',\n paddingInline: 4,\n zIndex: 4,\n }}\n {...stylesApiProps}\n {...moreEventsProps}\n />\n );\n })\n : [];\n\n return (\n <ResourcesDayViewRow\n key={resource.id}\n resource={resource}\n intervalMinutes={intervalMinutes}\n resourceIndex={resourceIndex}\n date={dateStr}\n slots={slots}\n getStyles={getStyles}\n labels={labels}\n highlightBusinessHours={highlightBusinessHours}\n businessHours={businessHours}\n withEventsDragAndDrop={withDragHandlers}\n mode={mode}\n slotsRef={slotsRef}\n firstSlotIndex={firstSlotIndex}\n onSlotKeyDown={handleSlotKeyDown}\n onSlotClick={handleTimeSlotClick}\n onRowSlotsDragOver={(event, resourceId, resIdx) => {\n const slotIndex = getSlotIndexFromDragPoint(event, resIdx);\n if (slotIndex !== null) {\n dragDrop.handleDragOver(event, { resourceId, slotIndex });\n updateDragPreview({ resourceId, slotIndex });\n }\n }}\n onRowSlotsDragLeave={dragDrop.handleDragLeave}\n onRowSlotsDrop={(event, resourceId, resIdx) => {\n const slotIndex = getSlotIndexFromDragPoint(event, resIdx);\n if (slotIndex !== null) {\n dragDrop.handleDrop(event, { resourceId, slotIndex });\n }\n }}\n dropTargetSlotIndex={\n !suppressDropHighlight && dragDrop.dropTarget?.resourceId === resource.id\n ? dragDrop.dropTarget.slotIndex\n : undefined\n }\n withDragSlotSelect={withDragSlotSelect}\n onSlotPointerDown={slotDragSelect.handleSlotPointerDown}\n isSlotDragSelected={slotDragSelect.isSlotSelected}\n rowSlotsContainerRef={(node) => {\n rowSlotsContainersRef.current[resourceIndex] = node;\n }}\n renderResourceLabel={renderResourceLabel}\n renderGroupLabel={renderGroupLabel}\n scrolledX={scrolledX}\n groupInfo={hasGroups ? resourceGroupMap[resourceIndex] : undefined}\n allDayCount={allDayEvents.length}\n >\n {backgroundEventNodes}\n {allDayEventNodes}\n {regularEvents}\n {moreEventsForResource}\n {dragDrop.dragPreview?.target.resourceId === resource.id &&\n dragDrop.dragContextValue.draggedEvent && (\n <Box\n mod={{ invalid: !dragDrop.dropValid }}\n {...getStyles('resourcesDayViewDragPreview', {\n style: (() => {\n const { top, height } = getDayPosition({\n event: {\n ...dragDrop.dragContextValue.draggedEvent,\n start: dragDrop.dragPreview.start,\n end: dragDrop.dragPreview.end,\n },\n startTime,\n endTime,\n intervalMinutes,\n });\n return {\n position: 'absolute',\n insetBlockStart: 0,\n insetBlockEnd: 0,\n ...getTimeAxisEventStyle({ start: top, span: height, axis: 'horizontal' }),\n };\n })(),\n })}\n />\n )}\n </ResourcesDayViewRow>\n );\n });\n\n const headerLabel = formatDate({\n date: dayjs(date),\n locale: ctx.getLocale(locale),\n format: headerFormat,\n });\n\n const content = (\n <Box\n {...getStyles('resourcesDayView')}\n mod={{\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n resizing: eventResize.isResizing,\n 'event-interaction': eventResize.isResizing || dragDrop.dragContextValue.isDragging,\n }}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"day\"\n navigationHandlers={{\n previous: () => toDateString(dayjs(date).subtract(1, 'day')),\n next: () => toDateString(dayjs(date).add(1, 'day')),\n today: () => toDateString(resolveNow()),\n }}\n control={{\n miw: 140,\n title: headerLabel,\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={{ views: ['day', 'week', 'month'] as const, ...viewSelectProps }}\n stylesApiProps={stylesApiProps}\n />\n )}\n\n <Box {...getStyles('resourcesDayViewRoot')}>\n <ScrollArea\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('resourcesDayViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n onScrollPositionChange={(position) => {\n scrollAreaProps?.onScrollPositionChange?.(position);\n setScrolled(position.y !== 0);\n setScrolledX(position.x !== 0);\n }}\n viewportRef={mergedViewportRef}\n >\n <div {...getStyles('resourcesDayViewInner')}>\n <Box {...getStyles('resourcesDayViewTimeLabelsRow')} mod={{ scrolled }}>\n <div\n {...getStyles('resourcesDayViewCorner')}\n key=\"corner\"\n style={\n hasGroups\n ? {\n flexBasis:\n 'calc(var(--resources-day-view-resource-label-width) + var(--resources-day-view-group-label-width))',\n minWidth:\n 'calc(var(--resources-day-view-resource-label-width) + var(--resources-day-view-group-label-width))',\n }\n : undefined\n }\n >\n {getLabel('resources', labels)}\n </div>\n {timeLabels}\n </Box>\n\n {rows}\n\n {showTimeIndicator && (\n <Box\n {...getStyles('resourcesDayViewCurrentTimeIndicator')}\n __vars={{\n '--indicator-left-offset': hasGroups\n ? `calc(var(--resources-day-view-resource-label-width) + var(--resources-day-view-group-label-width) + (100% - var(--resources-day-view-resource-label-width) - var(--resources-day-view-group-label-width)) * ${timeIndicatorOffset} / 100)`\n : `calc(var(--resources-day-view-resource-label-width) + (100% - var(--resources-day-view-resource-label-width)) * ${timeIndicatorOffset} / 100)`,\n '--_time-bubble-width': formattedCurrentTime\n ?.toString()\n .toLowerCase()\n .includes('m')\n ? '64px'\n : '46px',\n }}\n >\n {withCurrentTimeBubble && (\n <div {...getStyles('resourcesDayViewCurrentTimeIndicatorTimeBubble')}>\n {formattedCurrentTime}\n </div>\n )}\n {!withCurrentTimeBubble && (\n <div {...getStyles('resourcesDayViewCurrentTimeIndicatorThumb')} />\n )}\n <div {...getStyles('resourcesDayViewCurrentTimeIndicatorLine')} />\n </Box>\n )}\n </div>\n </ScrollArea>\n </Box>\n </Box>\n );\n\n const dragContextValue = useMemo<DragContextValue>(\n () => dragDrop.dragContextValue,\n [dragDrop.dragContextValue]\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nResourcesDayView.displayName = '@mantine/schedule/ResourcesDayView';\nResourcesDayView.classes = classes;\nResourcesDayView.varsResolver = varsResolver;\n"],"mappings":"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"}