@mantine/schedule 9.6.3 → 9.7.1

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 (101) hide show
  1. package/cjs/components/DayView/DayView.cjs +46 -31
  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/MonthView/MonthView.cjs +11 -4
  5. package/cjs/components/MonthView/MonthView.cjs.map +1 -1
  6. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs +10 -8
  7. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -1
  8. package/cjs/components/MonthView/get-month-view-events/reserve-row.cjs +12 -0
  9. package/cjs/components/MonthView/get-month-view-events/reserve-row.cjs.map +1 -0
  10. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs +75 -60
  11. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -1
  12. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs.map +1 -1
  13. package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs +19 -7
  14. package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs.map +1 -1
  15. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs +6 -1
  16. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs.map +1 -1
  17. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +85 -58
  18. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -1
  19. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs.map +1 -1
  20. package/cjs/components/Schedule/Schedule.cjs +14 -1
  21. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  22. package/cjs/components/ScheduleEvent/ScheduleEvent.module.cjs.map +1 -1
  23. package/cjs/components/WeekView/WeekView.cjs +70 -46
  24. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  25. package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
  26. package/cjs/hooks/use-day-grid-event-resize.cjs +38 -8
  27. package/cjs/hooks/use-day-grid-event-resize.cjs.map +1 -1
  28. package/cjs/hooks/use-drag-drop-handlers.cjs +126 -10
  29. package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
  30. package/cjs/hooks/use-event-resize.cjs +36 -12
  31. package/cjs/hooks/use-event-resize.cjs.map +1 -1
  32. package/cjs/hooks/use-horizontal-event-resize.cjs +37 -12
  33. package/cjs/hooks/use-horizontal-event-resize.cjs.map +1 -1
  34. package/cjs/hooks/validate-event-resize.cjs +37 -0
  35. package/cjs/hooks/validate-event-resize.cjs.map +1 -0
  36. package/cjs/index.cjs +2 -0
  37. package/cjs/utils/is-event-placement-allowed/is-event-placement-allowed.cjs +52 -0
  38. package/cjs/utils/is-event-placement-allowed/is-event-placement-allowed.cjs.map +1 -0
  39. package/esm/components/DayView/DayView.mjs +46 -31
  40. package/esm/components/DayView/DayView.mjs.map +1 -1
  41. package/esm/components/DayView/DayView.module.mjs.map +1 -1
  42. package/esm/components/MonthView/MonthView.mjs +11 -4
  43. package/esm/components/MonthView/MonthView.mjs.map +1 -1
  44. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs +10 -8
  45. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
  46. package/esm/components/MonthView/get-month-view-events/reserve-row.mjs +12 -0
  47. package/esm/components/MonthView/get-month-view-events/reserve-row.mjs.map +1 -0
  48. package/esm/components/ResourcesDayView/ResourcesDayView.mjs +75 -60
  49. package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -1
  50. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -1
  51. package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs +19 -7
  52. package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs.map +1 -1
  53. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs +6 -1
  54. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs.map +1 -1
  55. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +85 -58
  56. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -1
  57. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -1
  58. package/esm/components/Schedule/Schedule.mjs +14 -1
  59. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  60. package/esm/components/ScheduleEvent/ScheduleEvent.module.mjs.map +1 -1
  61. package/esm/components/WeekView/WeekView.mjs +70 -46
  62. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  63. package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
  64. package/esm/hooks/use-day-grid-event-resize.mjs +38 -8
  65. package/esm/hooks/use-day-grid-event-resize.mjs.map +1 -1
  66. package/esm/hooks/use-drag-drop-handlers.mjs +126 -10
  67. package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
  68. package/esm/hooks/use-event-resize.mjs +36 -12
  69. package/esm/hooks/use-event-resize.mjs.map +1 -1
  70. package/esm/hooks/use-horizontal-event-resize.mjs +37 -12
  71. package/esm/hooks/use-horizontal-event-resize.mjs.map +1 -1
  72. package/esm/hooks/validate-event-resize.mjs +37 -0
  73. package/esm/hooks/validate-event-resize.mjs.map +1 -0
  74. package/esm/index.mjs +2 -1
  75. package/esm/utils/is-event-placement-allowed/is-event-placement-allowed.mjs +50 -0
  76. package/esm/utils/is-event-placement-allowed/is-event-placement-allowed.mjs.map +1 -0
  77. package/lib/components/DayView/DayView.d.ts +11 -1
  78. package/lib/components/MonthView/MonthView.d.ts +9 -1
  79. package/lib/components/MonthView/get-month-view-events/reserve-row.d.ts +7 -0
  80. package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +11 -1
  81. package/lib/components/ResourcesMonthView/ResourcesMonthView.d.ts +11 -1
  82. package/lib/components/ResourcesSchedule/ResourcesSchedule.d.ts +12 -2
  83. package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +11 -1
  84. package/lib/components/Schedule/Schedule.d.ts +12 -2
  85. package/lib/components/WeekView/WeekView.d.ts +11 -1
  86. package/lib/hooks/use-day-grid-event-resize.d.ts +4 -2
  87. package/lib/hooks/use-drag-drop-handlers.d.ts +17 -1
  88. package/lib/hooks/use-event-resize.d.ts +4 -2
  89. package/lib/hooks/use-horizontal-event-resize.d.ts +4 -2
  90. package/lib/hooks/validate-event-resize.d.ts +33 -0
  91. package/lib/types.d.ts +65 -0
  92. package/lib/utils/index.d.ts +2 -0
  93. package/lib/utils/is-event-placement-allowed/is-event-placement-allowed.d.ts +22 -0
  94. package/package.json +6 -6
  95. package/styles.css +29 -0
  96. package/styles.layer.css +29 -0
  97. package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs +0 -18
  98. package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs.map +0 -1
  99. package/esm/components/MonthView/get-month-view-events/find-available-row.mjs +0 -16
  100. package/esm/components/MonthView/get-month-view-events/find-available-row.mjs.map +0 -1
  101. package/lib/components/MonthView/get-month-view-events/find-available-row.d.ts +0 -10
@@ -1 +1 @@
1
- {"version":3,"file":"MonthView.cjs","names":["createVarsResolver","getRadius","factory","useProps","useState","useStyles","useResolvedStylesApi","useDatesContext","getVisibleColumnMap","getMonthRange","expandRecurringEvents","getMonthViewEvents","useCallback","useDragDropHandlers","calculateMonthDropDate","useRef","useSlotDragSelect","getMonthDays","isSameMonth","getWeekdaysNames","UnstyledButton","getWeekNumber","clipSpanToVisibleColumns","ScheduleBackgroundEvent","getRenderableMonthEventSegments","ScheduleEvent","MoreEvents","toDateString","Box","ScheduleHeaderBase","AgendaView","ScrollArea","DragContext","classes"],"sources":["../../../src/components/MonthView/MonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useRef, useState } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n ScrollArea,\n ScrollAreaProps,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayOfWeek,\n ScheduleEventData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateMonthDropDate,\n expandRecurringEvents,\n getMonthDays,\n getMonthRange,\n getWeekdaysNames,\n getWeekNumber,\n isSameMonth,\n toDateString,\n} from '../../utils';\nimport { AgendaView, AgendaViewStylesNames } from '../AgendaView/AgendaView';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps } from '../MoreEvents/MoreEvents';\nimport { ScheduleBackgroundEvent } from '../ScheduleBackgroundEvent';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { MonthYearSelectProps } from '../ScheduleHeader/MonthYearSelect/MonthYearSelect';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getMonthViewEvents } from './get-month-view-events/get-month-view-events';\nimport { getRenderableMonthEventSegments } from './get-renderable-month-event-segments';\nimport { clipSpanToVisibleColumns, getVisibleColumnMap } from './get-visible-columns';\nimport { handleMonthViewKeyDown, MonthViewControlsRef } from './handle-month-view-key-down';\nimport classes from './MonthView.module.css';\n\nexport type MonthViewStylesNames =\n | 'monthView'\n | 'monthViewScrollArea'\n | 'monthViewInner'\n | 'monthViewWeek'\n | 'monthViewDay'\n | 'monthViewDayLabel'\n | 'monthViewWeekNumber'\n | 'monthViewWeekday'\n | 'monthViewWeekdays'\n | 'monthViewWeekdaysCorner'\n | 'monthViewEvents'\n | 'monthViewBackgroundEvent'\n | CombinedScheduleHeaderStylesNames\n | AgendaViewStylesNames;\n\nexport type MonthViewCssVariables = {\n monthView: '--month-view-radius' | '--month-view-max-events';\n};\n\nexport interface MonthViewProps\n extends BoxProps, StylesApiProps<MonthViewFactory>, 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 /** 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 /** If set, weekend days are displayed. When `false`, days defined by `weekendDays` are hidden and the grid shrinks to the remaining columns @default true */\n withWeekendDays?: 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 true */\n withOutsideDays?: boolean;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Props passed down to `MonthYearSelect` component in the header */\n monthYearSelectProps?: Partial<MonthYearSelectProps>;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous month control */\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to next month 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 /** Events to display */\n events?: ScheduleEventData[];\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n /** Function to customize event body, `event` object is passed as first argument */\n renderEventBody?: RenderEventBody;\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 /** If true, events can be dragged and dropped @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped on new date */\n onEventDrop?: (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 dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\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 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` @default false */\n withInteractiveBackgroundEvents?: boolean;\n\n /** If set, enables drag-to-select day ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a day range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\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 /** Props passed down to `ScrollArea` component */\n scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n\n /** Called when an external item is dropped onto the schedule. Receives the `DataTransfer` object and the drop target datetime. */\n onExternalEventDrop?: (dataTransfer: DataTransfer, dropDateTime: DateTimeStringValue) => void;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Maximum number of events visible per day before \"+more\" indicator shows, value is clamped between 1 and 10 @default 2 */\n maxEventsPerDay?: number;\n\n /** If set, displays an Agenda button in the header that opens an agenda list view @default false */\n withAgenda?: boolean;\n}\n\nexport type MonthViewFactory = Factory<{\n props: MonthViewProps;\n ref: HTMLDivElement;\n stylesNames: MonthViewStylesNames;\n vars: MonthViewCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<MonthViewFactory>(\n (_theme, { radius, maxEventsPerDay }) => ({\n monthView: {\n '--month-view-radius': radius !== undefined ? getRadius(radius) : undefined,\n '--month-view-max-events':\n maxEventsPerDay !== undefined ? `${Math.min(10, Math.max(1, maxEventsPerDay))}` : undefined,\n },\n })\n);\n\nconst defaultProps = {\n __staticSelector: 'MonthView',\n withWeekDays: true,\n withWeekendDays: true,\n consistentWeeks: true,\n highlightToday: true,\n withOutsideDays: true,\n withHeader: true,\n weekdayFormat: 'ddd',\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n mode: 'default',\n withInteractiveBackgroundEvents: false,\n} satisfies Partial<MonthViewProps>;\n\nexport const MonthView = factory<MonthViewFactory>((_props) => {\n const props = useProps('MonthView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n mod,\n date,\n onDateChange,\n withWeekNumbers,\n withWeekDays,\n withWeekendDays,\n locale,\n weekdayFormat,\n firstDayOfWeek,\n weekendDays,\n __staticSelector,\n getDayProps,\n getWeekNumberProps,\n onDayClick,\n onWeekNumberClick,\n consistentWeeks,\n highlightToday,\n radius,\n withOutsideDays,\n withHeader,\n monthYearSelectProps,\n onViewChange,\n todayControlProps,\n nextControlProps,\n previousControlProps,\n viewSelectProps,\n events,\n moreEventsProps,\n renderEventBody,\n renderEvent,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onEventClick,\n withInteractiveBackgroundEvents,\n withDragSlotSelect,\n onSlotDragEnd,\n labels,\n mode,\n scrollAreaProps,\n onExternalEventDrop,\n recurrenceExpansionLimit,\n maxEventsPerDay: _maxEventsPerDay,\n withAgenda,\n ...others\n } = props;\n\n const [agendaOpen, setAgendaOpen] = useState(false);\n const maxEventsPerDay = Math.min(10, Math.max(1, _maxEventsPerDay ?? 2));\n\n const getStyles = useStyles<MonthViewFactory>({\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: 'monthView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<MonthViewFactory>({\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 ctx = useDatesContext();\n\n const resolvedFirstDayOfWeek = ctx.getFirstDayOfWeek(firstDayOfWeek);\n const resolvedWeekendDays = ctx.getWeekendDays(weekendDays);\n const hiddenColumns = withWeekendDays\n ? []\n : Array.from({ length: 7 }, (_, index) => index).filter((index) =>\n resolvedWeekendDays.includes(((resolvedFirstDayOfWeek + index) % 7) as DayOfWeek)\n );\n const hiddenColumnSet = new Set(hiddenColumns);\n const columnsCount = 7 - hiddenColumns.length;\n const visibleColumnMap = getVisibleColumnMap(hiddenColumns);\n\n const range = getMonthRange({\n month: date,\n withOutsideDays,\n consistentWeeks,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n });\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart: dayjs(range.start).startOf('day').toDate(),\n rangeEnd: dayjs(range.end).endOf('day').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n });\n\n const monthEvents = getMonthViewEvents({\n date,\n events: expandedEvents,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n withOutsideDays,\n consistentWeeks,\n });\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, day: string) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop(e.dataTransfer, `${dayjs(day).format('YYYY-MM-DD')} 00:00:00`);\n },\n [onExternalEventDrop]\n );\n\n const dragDrop = useDragDropHandlers<string>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (targetDay: string, draggedEvent: ScheduleEventData) => {\n return calculateMonthDropDate({\n draggedEvent,\n targetDay,\n });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n });\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const flatDaysRef = useRef<string[]>([]);\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex) => {\n if (!onSlotDragEnd) {\n return;\n }\n const startDay = flatDaysRef.current[startIndex];\n const endDay = flatDaysRef.current[endIndex];\n if (startDay && endDay) {\n onSlotDragEnd(\n dayjs(startDay).startOf('day').format('YYYY-MM-DD HH:mm:ss'),\n dayjs(endDay).endOf('day').format('YYYY-MM-DD HH:mm:ss')\n );\n }\n },\n });\n\n const daysRef: MonthViewControlsRef = useRef<HTMLButtonElement[][]>([]);\n\n const monthDays = getMonthDays({\n month: dayjs(date).format('YYYY-MM-DD 00:00:00'),\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n consistentWeeks: consistentWeeks && withOutsideDays,\n });\n\n const firstDayIndex = (() => {\n for (let weekIndex = 0; weekIndex < monthDays.length; weekIndex++) {\n const week = monthDays[weekIndex];\n let visibleDayIndex = -1;\n for (let dayIndex = 0; dayIndex < week.length; dayIndex++) {\n if (hiddenColumnSet.has(dayIndex)) {\n continue;\n }\n visibleDayIndex += 1;\n const day = week[dayIndex];\n const outside = !isSameMonth(date, day);\n if (!outside || withOutsideDays) {\n return { weekIndex, dayIndex: visibleDayIndex };\n }\n }\n }\n return { weekIndex: 0, dayIndex: 0 };\n })();\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 }) => !hiddenColumnSet.has(index))\n .map(({ day, index }) => (\n <div {...getStyles('monthViewWeekday')} key={index}>\n {day}\n </div>\n ))\n : null;\n\n const monthGroup = 'month';\n flatDaysRef.current = monthDays\n .map((week) => week.filter((_, index) => !hiddenColumnSet.has(index)))\n .flat();\n\n const weeks = monthDays.map((week, weekIndex) => {\n daysRef.current[weekIndex] = [];\n\n const days = week\n .map((day, columnIndex) => ({ day, columnIndex }))\n .filter(({ columnIndex }) => !hiddenColumnSet.has(columnIndex))\n .map(({ day }, dayIndex) => {\n const outside = !isSameMonth(date, day);\n const weekend = resolvedWeekendDays.includes(dayjs(day).day());\n const ariaLabel = dayjs(day)\n .locale(locale || ctx.locale)\n .format('MMMM D, YYYY');\n\n const dayProps = getDayProps?.(dayjs(day).format('YYYY-MM-DD')) || {};\n const today = dayjs(day).isSame(dayjs(), 'day') && highlightToday;\n\n if (outside && !withOutsideDays) {\n return (\n <div key={day} data-static {...getStyles('monthViewDay', { style: dayProps.style })} />\n );\n }\n\n const isFirstDay =\n weekIndex === firstDayIndex.weekIndex && dayIndex === firstDayIndex.dayIndex;\n\n const isDropTarget = dragDrop.isDropTarget(day);\n const flatIndex = weekIndex * columnsCount + dayIndex;\n const isDragSelected = slotDragSelect.isSlotSelected(flatIndex, monthGroup);\n\n return (\n <UnstyledButton\n aria-label={ariaLabel}\n {...dayProps}\n {...getStyles('monthViewDay', { className: dayProps.className, style: dayProps.style })}\n key={day}\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 data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? flatIndex : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? monthGroup : undefined}\n onClick={\n mode === 'static'\n ? undefined\n : (event) => {\n onDayClick?.(dayjs(day).format('YYYY-MM-DD'), event);\n dayProps.onClick?.(event);\n }\n }\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) =>\n slotDragSelect.handleSlotPointerDown(\n e as React.PointerEvent<HTMLButtonElement>,\n flatIndex,\n monthGroup\n )\n : undefined\n }\n onKeyDown={(event) => {\n handleMonthViewKeyDown({\n controlsRef: daysRef,\n weekIndex,\n dayIndex,\n event,\n });\n dayProps.onKeyDown?.(event);\n }}\n mod={[\n {\n outside,\n weekend,\n today,\n 'drop-target': isDropTarget,\n 'drag-selected': isDragSelected,\n static: mode === 'static',\n },\n dayProps.mod,\n ]}\n data-outside={outside || undefined}\n tabIndex={mode === 'static' ? -1 : isFirstDay ? 0 : -1}\n onDragOver={withDragHandlers ? (e) => dragDrop.handleDragOver(e, day) : undefined}\n onDragLeave={withDragHandlers ? dragDrop.handleDragLeave : undefined}\n onDrop={withDragHandlers ? (e) => dragDrop.handleDrop(e, day) : undefined}\n >\n <span data-today={today || undefined} {...getStyles('monthViewDayLabel')}>\n {dayjs(day).format('D')}\n </span>\n </UnstyledButton>\n );\n });\n\n const weekNumberProps = getWeekNumberProps?.(dayjs(week[0]).format('YYYY-MM-DD')) || {};\n const weekNumber = getWeekNumber(week);\n\n const interactiveBackgroundEvents = withInteractiveBackgroundEvents && mode !== 'static';\n\n const backgroundEventNodes = (monthEvents.backgroundByWeek[weekIndex] || []).flatMap(\n (event) => {\n const startColumn = Math.round(event.position.startOffset / (100 / 7));\n const span = Math.max(1, Math.round(event.position.width / (100 / 7)));\n const spans =\n hiddenColumns.length === 0\n ? [{ startOffset: event.position.startOffset, width: event.position.width }]\n : clipSpanToVisibleColumns(\n startColumn,\n startColumn + span - 1,\n visibleColumnMap,\n columnsCount\n );\n\n return spans.map((spanPosition, spanIndex) => (\n <ScheduleBackgroundEvent\n key={`bg-${event.id}-${weekIndex}-${spanIndex}`}\n event={event}\n renderEvent={renderEvent}\n renderEventBody={renderEventBody}\n interactive={interactiveBackgroundEvents}\n onEventClick={onEventClick}\n {...getStyles('monthViewBackgroundEvent', {\n style: {\n left: `calc(${spanPosition.startOffset}% + 2px)`,\n width: `calc(${spanPosition.width}% - 3px)`,\n },\n })}\n />\n ));\n }\n );\n\n const rowHeightPercent = 100 / maxEventsPerDay;\n\n const eventSegments = getRenderableMonthEventSegments({\n events: monthEvents.groupedByWeek[weekIndex] || [],\n groupedByDay: monthEvents.groupedByDay,\n maxEventsPerDay,\n week,\n hiddenColumns,\n columnsCount,\n });\n\n const events = eventSegments.map((segment) => {\n const isDraggable = dragDrop.isDraggableEvent(segment.event);\n\n return (\n <ScheduleEvent\n key={segment.key}\n event={segment.event}\n nowrap\n autoSize\n hanging={segment.position.hanging}\n draggable={isDraggable}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n mod={{ 'clip-start': segment.clipStart, 'clip-end': segment.clipEnd }}\n onClick={onEventClick ? (e) => onEventClick(segment.event, e) : undefined}\n style={{\n position: 'absolute',\n top: `calc(${segment.position.row * rowHeightPercent}% + 1px)`,\n left: `calc(${segment.position.startOffset}% + 1px)`,\n width: `calc(${segment.position.width}% - 2px)`,\n height: `calc(${rowHeightPercent}% - 2px)`,\n }}\n />\n );\n });\n\n const moreEventsNodes = week.map((day, dayIndex) => {\n if (hiddenColumnSet.has(dayIndex)) {\n return null;\n }\n\n const dayEvents = monthEvents.groupedByDay[day] || [];\n const hiddenEventsCount = Math.max(0, dayEvents.length - maxEventsPerDay);\n\n if (hiddenEventsCount <= 0) {\n return null;\n }\n\n const dayStartOffset = (visibleColumnMap[dayIndex] / columnsCount) * 100;\n const dayWidth = (1 / columnsCount) * 100;\n\n return (\n <MoreEvents\n key={`more-${day}`}\n events={dayEvents}\n moreEventsCount={hiddenEventsCount}\n mode={mode}\n labels={labels}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n onEventClick={onEventClick}\n style={{\n position: 'absolute',\n top: `calc(100% - 2px)`,\n left: `calc(${dayStartOffset}% + 1px)`,\n width: `calc(${dayWidth}% - 1px)`,\n height: '22px',\n paddingInline: 4,\n }}\n {...moreEventsProps}\n />\n );\n });\n\n return (\n <div {...getStyles('monthViewWeek')} 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 onViewChange?.('week');\n onDateChange?.(toDateString(week[0]));\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('monthViewWeekNumber', {\n className: weekNumberProps.className,\n style: weekNumberProps.style,\n })}\n >\n {weekNumber}\n </UnstyledButton>\n )}\n\n <div {...getStyles('monthViewEvents')} key=\"week-events\">\n {backgroundEventNodes}\n {events}\n {moreEventsNodes}\n </div>\n\n {days}\n </div>\n );\n });\n\n const content = (\n <Box\n mod={[\n {\n 'with-week-numbers': withWeekNumbers,\n 'with-weekdays': withWeekDays,\n 'without-weekend-days': hiddenColumns.length > 0,\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n 'event-interaction': dragDrop.dragContextValue.isDragging,\n },\n mod,\n ]}\n __vars={hiddenColumns.length > 0 ? { '--month-view-columns': `${columnsCount}` } : undefined}\n {...getStyles('monthView')}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"month\"\n navigationHandlers={{\n previous: () => toDateString(dayjs(date).subtract(1, 'month').startOf('month')),\n next: () => toDateString(dayjs(date).add(1, 'month').startOf('month')),\n today: () => toDateString(dayjs()),\n }}\n control={{\n monthYearSelect: {\n locale,\n yearValue: dayjs(date).get('year'),\n monthValue: dayjs(date).get('month'),\n onYearChange: (year) =>\n onDateChange?.(toDateString(dayjs(date).set('year', year).startOf('month'))),\n onMonthChange: (month) =>\n onDateChange?.(toDateString(dayjs(date).set('month', month).startOf('month'))),\n ...monthYearSelectProps,\n },\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={viewSelectProps}\n stylesApiProps={stylesApiProps}\n onAgendaClick={withAgenda ? () => setAgendaOpen((v) => !v) : undefined}\n agendaActive={agendaOpen}\n />\n )}\n\n {agendaOpen && (\n <AgendaView\n rangeStart={dayjs(date).startOf('month').format('YYYY-MM-DD')}\n rangeEnd={dayjs(date).endOf('month').format('YYYY-MM-DD')}\n events={events}\n locale={locale}\n labels={labels}\n mode={mode}\n onEventClick={onEventClick}\n recurrenceExpansionLimit={recurrenceExpansionLimit}\n {...stylesApiProps}\n />\n )}\n\n {!agendaOpen && (\n <ScrollArea\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('monthViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n >\n <div {...getStyles('monthViewInner')}>\n {weekdays && (\n <div {...getStyles('monthViewWeekdays')}>\n {withWeekNumbers && <div {...getStyles('monthViewWeekdaysCorner')} />}\n {weekdays}\n </div>\n )}\n\n {weeks}\n </div>\n </ScrollArea>\n )}\n </Box>\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragDrop.dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nMonthView.displayName = '@mantine/schedule/MonthView';\nMonthView.classes = classes;\nMonthView.varsResolver = varsResolver;\n\nexport namespace MonthView {\n export type Props = MonthViewProps;\n export type Factory = MonthViewFactory;\n export type StylesNames = MonthViewStylesNames;\n export type CssVariables = MonthViewCssVariables;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MonthView.cjs","names":["createVarsResolver","getRadius","factory","useProps","useState","useStyles","useResolvedStylesApi","useDatesContext","getVisibleColumnMap","getMonthRange","expandRecurringEvents","getMonthViewEvents","useCallback","useDragDropHandlers","calculateMonthDropDate","useRef","useSlotDragSelect","getMonthDays","isSameMonth","getWeekdaysNames","UnstyledButton","getWeekNumber","clipSpanToVisibleColumns","ScheduleBackgroundEvent","getRenderableMonthEventSegments","ScheduleEvent","MoreEvents","toDateString","Box","ScheduleHeaderBase","AgendaView","ScrollArea","DragContext","classes"],"sources":["../../../src/components/MonthView/MonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useRef, useState } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n ScrollArea,\n ScrollAreaProps,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayOfWeek,\n PreventEventOverlap,\n ScheduleCanDropEventData,\n ScheduleCanDropExternalEventData,\n ScheduleEventData,\n ScheduleEventPlacementRejectedData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateMonthDropDate,\n expandRecurringEvents,\n getMonthDays,\n getMonthRange,\n getWeekdaysNames,\n getWeekNumber,\n isSameMonth,\n toDateString,\n} from '../../utils';\nimport { AgendaView, AgendaViewStylesNames } from '../AgendaView/AgendaView';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps } from '../MoreEvents/MoreEvents';\nimport { ScheduleBackgroundEvent } from '../ScheduleBackgroundEvent';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { MonthYearSelectProps } from '../ScheduleHeader/MonthYearSelect/MonthYearSelect';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getMonthViewEvents } from './get-month-view-events/get-month-view-events';\nimport { getRenderableMonthEventSegments } from './get-renderable-month-event-segments';\nimport { clipSpanToVisibleColumns, getVisibleColumnMap } from './get-visible-columns';\nimport { handleMonthViewKeyDown, MonthViewControlsRef } from './handle-month-view-key-down';\nimport classes from './MonthView.module.css';\n\nexport type MonthViewStylesNames =\n | 'monthView'\n | 'monthViewScrollArea'\n | 'monthViewInner'\n | 'monthViewWeek'\n | 'monthViewDay'\n | 'monthViewDayLabel'\n | 'monthViewWeekNumber'\n | 'monthViewWeekday'\n | 'monthViewWeekdays'\n | 'monthViewWeekdaysCorner'\n | 'monthViewEvents'\n | 'monthViewBackgroundEvent'\n | CombinedScheduleHeaderStylesNames\n | AgendaViewStylesNames;\n\nexport type MonthViewCssVariables = {\n monthView: '--month-view-radius' | '--month-view-max-events';\n};\n\nexport interface MonthViewProps\n extends BoxProps, StylesApiProps<MonthViewFactory>, 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 /** 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 /** If set, weekend days are displayed. When `false`, days defined by `weekendDays` are hidden and the grid shrinks to the remaining columns @default true */\n withWeekendDays?: 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 true */\n withOutsideDays?: boolean;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Props passed down to `MonthYearSelect` component in the header */\n monthYearSelectProps?: Partial<MonthYearSelectProps>;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous month control */\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to next month 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 /** Events to display */\n events?: ScheduleEventData[];\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n /** Function to customize event body, `event` object is passed as first argument */\n renderEventBody?: RenderEventBody;\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 /** If true, events can be dragged and dropped @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped on new date */\n onEventDrop?: (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 dragged */\n canDragEvent?: (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 /** If set, drops 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 to compute live feedback, it must be pure and cheap. @default false */\n preventEventOverlap?: PreventEventOverlap;\n\n /** Called when a drop is rejected */\n onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;\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 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` @default false */\n withInteractiveBackgroundEvents?: boolean;\n\n /** If set, enables drag-to-select day ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a day range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\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 /** Props passed down to `ScrollArea` component */\n scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n\n /** Called when an external item is dropped onto the schedule. Receives the `DataTransfer` object and the drop target datetime. */\n onExternalEventDrop?: (dataTransfer: DataTransfer, dropDateTime: DateTimeStringValue) => void;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Maximum number of events visible per day before \"+more\" indicator shows, value is clamped between 1 and 10 @default 2 */\n maxEventsPerDay?: number;\n\n /** If set, displays an Agenda button in the header that opens an agenda list view @default false */\n withAgenda?: boolean;\n}\n\nexport type MonthViewFactory = Factory<{\n props: MonthViewProps;\n ref: HTMLDivElement;\n stylesNames: MonthViewStylesNames;\n vars: MonthViewCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<MonthViewFactory>(\n (_theme, { radius, maxEventsPerDay }) => ({\n monthView: {\n '--month-view-radius': radius !== undefined ? getRadius(radius) : undefined,\n '--month-view-max-events':\n maxEventsPerDay !== undefined ? `${Math.min(10, Math.max(1, maxEventsPerDay))}` : undefined,\n },\n })\n);\n\nconst defaultProps = {\n __staticSelector: 'MonthView',\n withWeekDays: true,\n withWeekendDays: true,\n consistentWeeks: true,\n highlightToday: true,\n withOutsideDays: true,\n withHeader: true,\n weekdayFormat: 'ddd',\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n mode: 'default',\n withInteractiveBackgroundEvents: false,\n} satisfies Partial<MonthViewProps>;\n\nexport const MonthView = factory<MonthViewFactory>((_props) => {\n const props = useProps('MonthView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n mod,\n date,\n onDateChange,\n withWeekNumbers,\n withWeekDays,\n withWeekendDays,\n locale,\n weekdayFormat,\n firstDayOfWeek,\n weekendDays,\n __staticSelector,\n getDayProps,\n getWeekNumberProps,\n onDayClick,\n onWeekNumberClick,\n consistentWeeks,\n highlightToday,\n radius,\n withOutsideDays,\n withHeader,\n monthYearSelectProps,\n onViewChange,\n todayControlProps,\n nextControlProps,\n previousControlProps,\n viewSelectProps,\n events,\n moreEventsProps,\n renderEventBody,\n renderEvent,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n canDropEvent,\n canDropExternalEvent,\n preventEventOverlap,\n onEventPlacementRejected,\n onEventDragStart,\n onEventDragEnd,\n onEventClick,\n withInteractiveBackgroundEvents,\n withDragSlotSelect,\n onSlotDragEnd,\n labels,\n mode,\n scrollAreaProps,\n onExternalEventDrop,\n recurrenceExpansionLimit,\n maxEventsPerDay: _maxEventsPerDay,\n withAgenda,\n ...others\n } = props;\n\n const [agendaOpen, setAgendaOpen] = useState(false);\n const maxEventsPerDay = Math.min(10, Math.max(1, _maxEventsPerDay ?? 2));\n\n const getStyles = useStyles<MonthViewFactory>({\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: 'monthView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<MonthViewFactory>({\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 ctx = useDatesContext();\n\n const resolvedFirstDayOfWeek = ctx.getFirstDayOfWeek(firstDayOfWeek);\n const resolvedWeekendDays = ctx.getWeekendDays(weekendDays);\n const hiddenColumns = withWeekendDays\n ? []\n : Array.from({ length: 7 }, (_, index) => index).filter((index) =>\n resolvedWeekendDays.includes(((resolvedFirstDayOfWeek + index) % 7) as DayOfWeek)\n );\n const hiddenColumnSet = new Set(hiddenColumns);\n const columnsCount = 7 - hiddenColumns.length;\n const visibleColumnMap = getVisibleColumnMap(hiddenColumns);\n\n const range = getMonthRange({\n month: date,\n withOutsideDays,\n consistentWeeks,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n });\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart: dayjs(range.start).startOf('day').toDate(),\n rangeEnd: dayjs(range.end).endOf('day').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n });\n\n const monthEvents = getMonthViewEvents({\n date,\n events: expandedEvents,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n withOutsideDays,\n consistentWeeks,\n });\n\n const getExternalDropDateTime = useCallback(\n (day: string) => `${dayjs(day).format('YYYY-MM-DD')} 00:00:00`,\n []\n );\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, day: string) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop(e.dataTransfer, getExternalDropDateTime(day));\n },\n [onExternalEventDrop, getExternalDropDateTime]\n );\n\n const dragDrop = useDragDropHandlers<string>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (targetDay: string, draggedEvent: ScheduleEventData) => {\n return calculateMonthDropDate({\n draggedEvent,\n targetDay,\n });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n events: expandedEvents,\n preventEventOverlap,\n canDropEvent,\n canDropExternalEvent,\n onEventPlacementRejected,\n getExternalDropDateTime,\n });\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const flatDaysRef = useRef<string[]>([]);\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex) => {\n if (!onSlotDragEnd) {\n return;\n }\n const startDay = flatDaysRef.current[startIndex];\n const endDay = flatDaysRef.current[endIndex];\n if (startDay && endDay) {\n onSlotDragEnd(\n dayjs(startDay).startOf('day').format('YYYY-MM-DD HH:mm:ss'),\n dayjs(endDay).endOf('day').format('YYYY-MM-DD HH:mm:ss')\n );\n }\n },\n });\n\n const daysRef: MonthViewControlsRef = useRef<HTMLButtonElement[][]>([]);\n\n const monthDays = getMonthDays({\n month: dayjs(date).format('YYYY-MM-DD 00:00:00'),\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n consistentWeeks: consistentWeeks && withOutsideDays,\n });\n\n const firstDayIndex = (() => {\n for (let weekIndex = 0; weekIndex < monthDays.length; weekIndex++) {\n const week = monthDays[weekIndex];\n let visibleDayIndex = -1;\n for (let dayIndex = 0; dayIndex < week.length; dayIndex++) {\n if (hiddenColumnSet.has(dayIndex)) {\n continue;\n }\n visibleDayIndex += 1;\n const day = week[dayIndex];\n const outside = !isSameMonth(date, day);\n if (!outside || withOutsideDays) {\n return { weekIndex, dayIndex: visibleDayIndex };\n }\n }\n }\n return { weekIndex: 0, dayIndex: 0 };\n })();\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 }) => !hiddenColumnSet.has(index))\n .map(({ day, index }) => (\n <div {...getStyles('monthViewWeekday')} key={index}>\n {day}\n </div>\n ))\n : null;\n\n const monthGroup = 'month';\n flatDaysRef.current = monthDays\n .map((week) => week.filter((_, index) => !hiddenColumnSet.has(index)))\n .flat();\n\n const weeks = monthDays.map((week, weekIndex) => {\n daysRef.current[weekIndex] = [];\n\n const days = week\n .map((day, columnIndex) => ({ day, columnIndex }))\n .filter(({ columnIndex }) => !hiddenColumnSet.has(columnIndex))\n .map(({ day }, dayIndex) => {\n const outside = !isSameMonth(date, day);\n const weekend = resolvedWeekendDays.includes(dayjs(day).day());\n const ariaLabel = dayjs(day)\n .locale(locale || ctx.locale)\n .format('MMMM D, YYYY');\n\n const dayProps = getDayProps?.(dayjs(day).format('YYYY-MM-DD')) || {};\n const today = dayjs(day).isSame(dayjs(), 'day') && highlightToday;\n\n if (outside && !withOutsideDays) {\n return (\n <div key={day} data-static {...getStyles('monthViewDay', { style: dayProps.style })} />\n );\n }\n\n const isFirstDay =\n weekIndex === firstDayIndex.weekIndex && dayIndex === firstDayIndex.dayIndex;\n\n const isDropTarget = dragDrop.isDropTarget(day);\n const flatIndex = weekIndex * columnsCount + dayIndex;\n const isDragSelected = slotDragSelect.isSlotSelected(flatIndex, monthGroup);\n\n return (\n <UnstyledButton\n aria-label={ariaLabel}\n {...dayProps}\n {...getStyles('monthViewDay', { className: dayProps.className, style: dayProps.style })}\n key={day}\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 data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? flatIndex : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? monthGroup : undefined}\n onClick={\n mode === 'static'\n ? undefined\n : (event) => {\n onDayClick?.(dayjs(day).format('YYYY-MM-DD'), event);\n dayProps.onClick?.(event);\n }\n }\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) =>\n slotDragSelect.handleSlotPointerDown(\n e as React.PointerEvent<HTMLButtonElement>,\n flatIndex,\n monthGroup\n )\n : undefined\n }\n onKeyDown={(event) => {\n handleMonthViewKeyDown({\n controlsRef: daysRef,\n weekIndex,\n dayIndex,\n event,\n });\n dayProps.onKeyDown?.(event);\n }}\n mod={[\n {\n outside,\n weekend,\n today,\n 'drop-target': isDropTarget,\n 'drag-selected': isDragSelected,\n static: mode === 'static',\n },\n dayProps.mod,\n ]}\n data-outside={outside || undefined}\n tabIndex={mode === 'static' ? -1 : isFirstDay ? 0 : -1}\n onDragOver={withDragHandlers ? (e) => dragDrop.handleDragOver(e, day) : undefined}\n onDragLeave={withDragHandlers ? dragDrop.handleDragLeave : undefined}\n onDrop={withDragHandlers ? (e) => dragDrop.handleDrop(e, day) : undefined}\n >\n <span data-today={today || undefined} {...getStyles('monthViewDayLabel')}>\n {dayjs(day).format('D')}\n </span>\n </UnstyledButton>\n );\n });\n\n const weekNumberProps = getWeekNumberProps?.(dayjs(week[0]).format('YYYY-MM-DD')) || {};\n const weekNumber = getWeekNumber(week);\n\n const interactiveBackgroundEvents = withInteractiveBackgroundEvents && mode !== 'static';\n\n const backgroundEventNodes = (monthEvents.backgroundByWeek[weekIndex] || []).flatMap(\n (event) => {\n const startColumn = Math.round(event.position.startOffset / (100 / 7));\n const span = Math.max(1, Math.round(event.position.width / (100 / 7)));\n const spans =\n hiddenColumns.length === 0\n ? [{ startOffset: event.position.startOffset, width: event.position.width }]\n : clipSpanToVisibleColumns(\n startColumn,\n startColumn + span - 1,\n visibleColumnMap,\n columnsCount\n );\n\n return spans.map((spanPosition, spanIndex) => (\n <ScheduleBackgroundEvent\n key={`bg-${event.id}-${weekIndex}-${spanIndex}`}\n event={event}\n renderEvent={renderEvent}\n renderEventBody={renderEventBody}\n interactive={interactiveBackgroundEvents}\n onEventClick={onEventClick}\n {...getStyles('monthViewBackgroundEvent', {\n style: {\n left: `calc(${spanPosition.startOffset}% + 2px)`,\n width: `calc(${spanPosition.width}% - 3px)`,\n },\n })}\n />\n ));\n }\n );\n\n const rowHeightPercent = 100 / maxEventsPerDay;\n\n const eventSegments = getRenderableMonthEventSegments({\n events: monthEvents.groupedByWeek[weekIndex] || [],\n groupedByDay: monthEvents.groupedByDay,\n maxEventsPerDay,\n week,\n hiddenColumns,\n columnsCount,\n });\n\n const events = eventSegments.map((segment) => {\n const isDraggable = dragDrop.isDraggableEvent(segment.event);\n\n return (\n <ScheduleEvent\n key={segment.key}\n event={segment.event}\n nowrap\n autoSize\n hanging={segment.position.hanging}\n draggable={isDraggable}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n mod={{ 'clip-start': segment.clipStart, 'clip-end': segment.clipEnd }}\n onClick={onEventClick ? (e) => onEventClick(segment.event, e) : undefined}\n style={{\n position: 'absolute',\n top: `calc(${segment.position.row * rowHeightPercent}% + 1px)`,\n left: `calc(${segment.position.startOffset}% + 1px)`,\n width: `calc(${segment.position.width}% - 2px)`,\n height: `calc(${rowHeightPercent}% - 2px)`,\n }}\n />\n );\n });\n\n const moreEventsNodes = week.map((day, dayIndex) => {\n if (hiddenColumnSet.has(dayIndex)) {\n return null;\n }\n\n const dayEvents = monthEvents.groupedByDay[day] || [];\n const hiddenEventsCount = Math.max(0, dayEvents.length - maxEventsPerDay);\n\n if (hiddenEventsCount <= 0) {\n return null;\n }\n\n const dayStartOffset = (visibleColumnMap[dayIndex] / columnsCount) * 100;\n const dayWidth = (1 / columnsCount) * 100;\n\n return (\n <MoreEvents\n key={`more-${day}`}\n events={dayEvents}\n moreEventsCount={hiddenEventsCount}\n mode={mode}\n labels={labels}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n onEventClick={onEventClick}\n style={{\n position: 'absolute',\n top: `calc(100% - 2px)`,\n left: `calc(${dayStartOffset}% + 1px)`,\n width: `calc(${dayWidth}% - 1px)`,\n height: '22px',\n paddingInline: 4,\n }}\n {...moreEventsProps}\n />\n );\n });\n\n return (\n <div {...getStyles('monthViewWeek')} 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 onViewChange?.('week');\n onDateChange?.(toDateString(week[0]));\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('monthViewWeekNumber', {\n className: weekNumberProps.className,\n style: weekNumberProps.style,\n })}\n >\n {weekNumber}\n </UnstyledButton>\n )}\n\n <div {...getStyles('monthViewEvents')} key=\"week-events\">\n {backgroundEventNodes}\n {events}\n {moreEventsNodes}\n </div>\n\n {days}\n </div>\n );\n });\n\n const content = (\n <Box\n mod={[\n {\n 'with-week-numbers': withWeekNumbers,\n 'with-weekdays': withWeekDays,\n 'without-weekend-days': hiddenColumns.length > 0,\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n 'event-interaction': dragDrop.dragContextValue.isDragging,\n },\n mod,\n ]}\n __vars={hiddenColumns.length > 0 ? { '--month-view-columns': `${columnsCount}` } : undefined}\n {...getStyles('monthView')}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"month\"\n navigationHandlers={{\n previous: () => toDateString(dayjs(date).subtract(1, 'month').startOf('month')),\n next: () => toDateString(dayjs(date).add(1, 'month').startOf('month')),\n today: () => toDateString(dayjs()),\n }}\n control={{\n monthYearSelect: {\n locale,\n yearValue: dayjs(date).get('year'),\n monthValue: dayjs(date).get('month'),\n onYearChange: (year) =>\n onDateChange?.(toDateString(dayjs(date).set('year', year).startOf('month'))),\n onMonthChange: (month) =>\n onDateChange?.(toDateString(dayjs(date).set('month', month).startOf('month'))),\n ...monthYearSelectProps,\n },\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={viewSelectProps}\n stylesApiProps={stylesApiProps}\n onAgendaClick={withAgenda ? () => setAgendaOpen((v) => !v) : undefined}\n agendaActive={agendaOpen}\n />\n )}\n\n {agendaOpen && (\n <AgendaView\n rangeStart={dayjs(date).startOf('month').format('YYYY-MM-DD')}\n rangeEnd={dayjs(date).endOf('month').format('YYYY-MM-DD')}\n events={events}\n locale={locale}\n labels={labels}\n mode={mode}\n onEventClick={onEventClick}\n recurrenceExpansionLimit={recurrenceExpansionLimit}\n {...stylesApiProps}\n />\n )}\n\n {!agendaOpen && (\n <ScrollArea\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('monthViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n >\n <div {...getStyles('monthViewInner')}>\n {weekdays && (\n <div {...getStyles('monthViewWeekdays')}>\n {withWeekNumbers && <div {...getStyles('monthViewWeekdaysCorner')} />}\n {weekdays}\n </div>\n )}\n\n {weeks}\n </div>\n </ScrollArea>\n )}\n </Box>\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragDrop.dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nMonthView.displayName = '@mantine/schedule/MonthView';\nMonthView.classes = classes;\nMonthView.varsResolver = varsResolver;\n\nexport namespace MonthView {\n export type Props = MonthViewProps;\n export type Factory = MonthViewFactory;\n export type StylesNames = MonthViewStylesNames;\n export type CssVariables = MonthViewCssVariables;\n}\n"],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
  const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
3
3
  const require_add_event_to_day_groups = require("./add-event-to-day-groups.cjs");
4
4
  const require_calculate_event_position_in_week = require("./calculate-event-position-in-week.cjs");
5
- const require_find_available_row = require("./find-available-row.cjs");
6
5
  const require_get_weeks_in_range = require("./get-weeks-in-range.cjs");
6
+ const require_reserve_row = require("./reserve-row.cjs");
7
7
  let dayjs = require("dayjs");
8
8
  dayjs = require_runtime.__toESM(dayjs);
9
9
  //#region packages/@mantine/schedule/src/components/MonthView/get-month-view-events/get-month-positioned-events.ts
@@ -18,6 +18,11 @@ function getMonthPositionedEvents({ date, events, firstDayOfWeek = 1, range }) {
18
18
  rangeEnd,
19
19
  firstDayOfWeek
20
20
  });
21
+ const weekStates = weeks.map((week) => ({
22
+ weekStart: (0, dayjs.default)(week[0]).startOf("day"),
23
+ weekEnd: (0, dayjs.default)(week[6]).endOf("day"),
24
+ nextRowByDay: new Array(7).fill(0)
25
+ }));
21
26
  for (let i = 0; i < weeks.length; i++) {
22
27
  groupedByWeek[i.toString()] = [];
23
28
  backgroundByWeek[i.toString()] = [];
@@ -28,9 +33,7 @@ function getMonthPositionedEvents({ date, events, firstDayOfWeek = 1, range }) {
28
33
  const eventEnd = rawEnd.hour() === 0 && rawEnd.minute() === 0 && rawEnd.second() === 0 ? rawEnd.startOf("day").subtract(1, "day") : rawEnd.startOf("day");
29
34
  const isMultiday = eventEnd.isAfter(eventStart);
30
35
  for (let weekIdx = 0; weekIdx < weeks.length; weekIdx++) {
31
- const week = weeks[weekIdx];
32
- const weekStart = (0, dayjs.default)(week[0]).startOf("day");
33
- const weekEnd = (0, dayjs.default)(week[6]).endOf("day");
36
+ const { weekStart, weekEnd, nextRowByDay } = weekStates[weekIdx];
34
37
  if ((eventStart.isBefore(weekEnd) || eventStart.isSame(weekEnd, "day")) && (eventEnd.isAfter(weekStart) || eventEnd.isSame(weekStart, "day"))) {
35
38
  const { startDayIndex, daysSpanned, startOffset, width, hanging } = require_calculate_event_position_in_week.calculateEventPositionInWeek({
36
39
  eventStart,
@@ -52,11 +55,10 @@ function getMonthPositionedEvents({ date, events, firstDayOfWeek = 1, range }) {
52
55
  });
53
56
  continue;
54
57
  }
55
- const row = require_find_available_row.findAvailableRow({
56
- existingEvents: groupedByWeek[weekIdx.toString()],
58
+ const row = require_reserve_row.reserveRow({
59
+ nextRowByDay,
57
60
  startDayIndex,
58
- daysSpanned,
59
- weekStart
61
+ daysSpanned
60
62
  });
61
63
  const positionedEvent = {
62
64
  ...event,
@@ -1 +1 @@
1
- {"version":3,"file":"get-month-positioned-events.cjs","names":["getWeeksInRange","calculateEventPositionInWeek","findAvailableRow"],"sources":["../../../../src/components/MonthView/get-month-view-events/get-month-positioned-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport {\n AnyDateValue,\n DateStringValue,\n DayOfWeek,\n MonthPositionedEventData,\n ScheduleEventData,\n} from '../../../types';\nimport { addEventToDayGroups } from './add-event-to-day-groups';\nimport { calculateEventPositionInWeek } from './calculate-event-position-in-week';\nimport { findAvailableRow } from './find-available-row';\nimport { getWeeksInRange } from './get-weeks-in-range';\n\ninterface GetMonthPositionedEventsInput {\n /** Date (month start) at which events are positioned */\n date: AnyDateValue;\n\n /** List of all events that belong to the given month, extra events must be filtered out before passing to the function */\n events: ScheduleEventData[];\n\n /** First day of the week, 0 - Sunday, 1 - Monday, etc., used to calculate events positions */\n firstDayOfWeek?: DayOfWeek;\n\n /** Range of dates for which events should be displayed (includes outside days if withOutsideDays is true) */\n range?: {\n start: DateStringValue;\n end: DateStringValue;\n };\n}\n\n/** Events grouped by week index and by day */\nexport interface GroupedMonthEvents {\n /** Events grouped by week index (index within month) */\n groupedByWeek: {\n [weekIndex: string]: MonthPositionedEventData[];\n };\n\n /** Events grouped by day (YYYY-MM-DD format) */\n groupedByDay: {\n [date: string]: MonthPositionedEventData[];\n };\n\n /** Background events grouped by week index */\n backgroundByWeek: {\n [weekIndex: string]: MonthPositionedEventData[];\n };\n}\n\nexport function getMonthPositionedEvents({\n date,\n events,\n firstDayOfWeek = 1,\n range,\n}: GetMonthPositionedEventsInput): GroupedMonthEvents {\n const groupedByWeek: GroupedMonthEvents['groupedByWeek'] = {};\n const backgroundByWeek: GroupedMonthEvents['backgroundByWeek'] = {};\n const eventsAddedToDay = new Set<string>();\n\n const rangeStart = range ? dayjs(range.start) : dayjs(date).startOf('month');\n const rangeEnd = range ? dayjs(range.end) : dayjs(date).startOf('month').endOf('month');\n\n const { weeks, groupedByDay } = getWeeksInRange({\n rangeStart,\n rangeEnd,\n firstDayOfWeek,\n });\n\n for (let i = 0; i < weeks.length; i++) {\n groupedByWeek[i.toString()] = [];\n backgroundByWeek[i.toString()] = [];\n }\n\n for (const event of events) {\n const eventStart = dayjs(event.start).startOf('day');\n const rawEnd = dayjs(event.end);\n const endAtMidnight = rawEnd.hour() === 0 && rawEnd.minute() === 0 && rawEnd.second() === 0;\n const eventEnd = endAtMidnight\n ? rawEnd.startOf('day').subtract(1, 'day')\n : rawEnd.startOf('day');\n const isMultiday = eventEnd.isAfter(eventStart);\n\n for (let weekIdx = 0; weekIdx < weeks.length; weekIdx++) {\n const week = weeks[weekIdx];\n const weekStart = dayjs(week[0]).startOf('day');\n const weekEnd = dayjs(week[6]).endOf('day');\n\n if (\n (eventStart.isBefore(weekEnd) || eventStart.isSame(weekEnd, 'day')) &&\n (eventEnd.isAfter(weekStart) || eventEnd.isSame(weekStart, 'day'))\n ) {\n const { startDayIndex, daysSpanned, startOffset, width, hanging } =\n calculateEventPositionInWeek({\n eventStart,\n eventEnd,\n weekStart,\n weekEnd,\n isMultiday,\n });\n\n if (event.display === 'background') {\n backgroundByWeek[weekIdx.toString()].push({\n ...event,\n position: {\n startOffset,\n width,\n weekIndex: weekIdx,\n row: 0,\n hanging,\n },\n });\n continue;\n }\n\n const row = findAvailableRow({\n existingEvents: groupedByWeek[weekIdx.toString()],\n startDayIndex,\n daysSpanned,\n weekStart,\n });\n\n const positionedEvent: MonthPositionedEventData = {\n ...event,\n position: {\n startOffset,\n width,\n weekIndex: weekIdx,\n row,\n hanging,\n },\n };\n\n groupedByWeek[weekIdx.toString()].push(positionedEvent);\n\n addEventToDayGroups({\n positionedEvent,\n eventStart,\n eventEnd,\n groupedByDay,\n eventsAddedToDay,\n weekIdx,\n });\n }\n }\n }\n\n return {\n groupedByWeek,\n groupedByDay,\n backgroundByWeek,\n };\n}\n"],"mappings":";;;;;;;;;AAgDA,SAAgB,yBAAyB,EACvC,MACA,QACA,iBAAiB,GACjB,SACoD;CACpD,MAAM,gBAAqD,CAAC;CAC5D,MAAM,mBAA2D,CAAC;CAClE,MAAM,mCAAmB,IAAI,IAAY;CAEzC,MAAM,aAAa,SAAA,GAAQ,MAAA,QAAA,CAAM,MAAM,KAAK,KAAA,GAAI,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,QAAQ,OAAO;CAC3E,MAAM,WAAW,SAAA,GAAQ,MAAA,QAAA,CAAM,MAAM,GAAG,KAAA,GAAI,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,MAAM,OAAO;CAEtF,MAAM,EAAE,OAAO,iBAAiBA,2BAAAA,gBAAgB;EAC9C;EACA;EACA;CACF,CAAC;CAED,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,cAAc,EAAE,SAAS,KAAK,CAAC;EAC/B,iBAAiB,EAAE,SAAS,KAAK,CAAC;CACpC;CAEA,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,cAAA,GAAa,MAAA,QAAA,CAAM,MAAM,KAAK,CAAC,CAAC,QAAQ,KAAK;EACnD,MAAM,UAAA,GAAS,MAAA,QAAA,CAAM,MAAM,GAAG;EAE9B,MAAM,WADgB,OAAO,KAAK,MAAM,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,OAAO,MAAM,IAEtF,OAAO,QAAQ,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,IACvC,OAAO,QAAQ,KAAK;EACxB,MAAM,aAAa,SAAS,QAAQ,UAAU;EAE9C,KAAK,IAAI,UAAU,GAAG,UAAU,MAAM,QAAQ,WAAW;GACvD,MAAM,OAAO,MAAM;GACnB,MAAM,aAAA,GAAY,MAAA,QAAA,CAAM,KAAK,EAAE,CAAC,CAAC,QAAQ,KAAK;GAC9C,MAAM,WAAA,GAAU,MAAA,QAAA,CAAM,KAAK,EAAE,CAAC,CAAC,MAAM,KAAK;GAE1C,KACG,WAAW,SAAS,OAAO,KAAK,WAAW,OAAO,SAAS,KAAK,OAChE,SAAS,QAAQ,SAAS,KAAK,SAAS,OAAO,WAAW,KAAK,IAChE;IACA,MAAM,EAAE,eAAe,aAAa,aAAa,OAAO,YACtDC,yCAAAA,6BAA6B;KAC3B;KACA;KACA;KACA;KACA;IACF,CAAC;IAEH,IAAI,MAAM,YAAY,cAAc;KAClC,iBAAiB,QAAQ,SAAS,EAAE,CAAC,KAAK;MACxC,GAAG;MACH,UAAU;OACR;OACA;OACA,WAAW;OACX,KAAK;OACL;MACF;KACF,CAAC;KACD;IACF;IAEA,MAAM,MAAMC,2BAAAA,iBAAiB;KAC3B,gBAAgB,cAAc,QAAQ,SAAS;KAC/C;KACA;KACA;IACF,CAAC;IAED,MAAM,kBAA4C;KAChD,GAAG;KACH,UAAU;MACR;MACA;MACA,WAAW;MACX;MACA;KACF;IACF;IAEA,cAAc,QAAQ,SAAS,EAAE,CAAC,KAAK,eAAe;IAEtD,gCAAA,oBAAoB;KAClB;KACA;KACA;KACA;KACA;KACA;IACF,CAAC;GACH;EACF;CACF;CAEA,OAAO;EACL;EACA;EACA;CACF;AACF"}
1
+ {"version":3,"file":"get-month-positioned-events.cjs","names":["getWeeksInRange","calculateEventPositionInWeek","reserveRow"],"sources":["../../../../src/components/MonthView/get-month-view-events/get-month-positioned-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport {\n AnyDateValue,\n DateStringValue,\n DayOfWeek,\n MonthPositionedEventData,\n ScheduleEventData,\n} from '../../../types';\nimport { addEventToDayGroups } from './add-event-to-day-groups';\nimport { calculateEventPositionInWeek } from './calculate-event-position-in-week';\nimport { getWeeksInRange } from './get-weeks-in-range';\nimport { reserveRow } from './reserve-row';\n\ninterface GetMonthPositionedEventsInput {\n /** Date (month start) at which events are positioned */\n date: AnyDateValue;\n\n /** List of all events that belong to the given month, extra events must be filtered out before passing to the function */\n events: ScheduleEventData[];\n\n /** First day of the week, 0 - Sunday, 1 - Monday, etc., used to calculate events positions */\n firstDayOfWeek?: DayOfWeek;\n\n /** Range of dates for which events should be displayed (includes outside days if withOutsideDays is true) */\n range?: {\n start: DateStringValue;\n end: DateStringValue;\n };\n}\n\n/** Events grouped by week index and by day */\nexport interface GroupedMonthEvents {\n /** Events grouped by week index (index within month) */\n groupedByWeek: {\n [weekIndex: string]: MonthPositionedEventData[];\n };\n\n /** Events grouped by day (YYYY-MM-DD format) */\n groupedByDay: {\n [date: string]: MonthPositionedEventData[];\n };\n\n /** Background events grouped by week index */\n backgroundByWeek: {\n [weekIndex: string]: MonthPositionedEventData[];\n };\n}\n\nexport function getMonthPositionedEvents({\n date,\n events,\n firstDayOfWeek = 1,\n range,\n}: GetMonthPositionedEventsInput): GroupedMonthEvents {\n const groupedByWeek: GroupedMonthEvents['groupedByWeek'] = {};\n const backgroundByWeek: GroupedMonthEvents['backgroundByWeek'] = {};\n const eventsAddedToDay = new Set<string>();\n\n const rangeStart = range ? dayjs(range.start) : dayjs(date).startOf('month');\n const rangeEnd = range ? dayjs(range.end) : dayjs(date).startOf('month').endOf('month');\n\n const { weeks, groupedByDay } = getWeeksInRange({\n rangeStart,\n rangeEnd,\n firstDayOfWeek,\n });\n\n const weekStates = weeks.map((week) => ({\n weekStart: dayjs(week[0]).startOf('day'),\n weekEnd: dayjs(week[6]).endOf('day'),\n nextRowByDay: new Array<number>(7).fill(0),\n }));\n\n for (let i = 0; i < weeks.length; i++) {\n groupedByWeek[i.toString()] = [];\n backgroundByWeek[i.toString()] = [];\n }\n\n for (const event of events) {\n const eventStart = dayjs(event.start).startOf('day');\n const rawEnd = dayjs(event.end);\n const endAtMidnight = rawEnd.hour() === 0 && rawEnd.minute() === 0 && rawEnd.second() === 0;\n const eventEnd = endAtMidnight\n ? rawEnd.startOf('day').subtract(1, 'day')\n : rawEnd.startOf('day');\n const isMultiday = eventEnd.isAfter(eventStart);\n\n for (let weekIdx = 0; weekIdx < weeks.length; weekIdx++) {\n const { weekStart, weekEnd, nextRowByDay } = weekStates[weekIdx];\n\n if (\n (eventStart.isBefore(weekEnd) || eventStart.isSame(weekEnd, 'day')) &&\n (eventEnd.isAfter(weekStart) || eventEnd.isSame(weekStart, 'day'))\n ) {\n const { startDayIndex, daysSpanned, startOffset, width, hanging } =\n calculateEventPositionInWeek({\n eventStart,\n eventEnd,\n weekStart,\n weekEnd,\n isMultiday,\n });\n\n if (event.display === 'background') {\n backgroundByWeek[weekIdx.toString()].push({\n ...event,\n position: {\n startOffset,\n width,\n weekIndex: weekIdx,\n row: 0,\n hanging,\n },\n });\n continue;\n }\n\n const row = reserveRow({\n nextRowByDay,\n startDayIndex,\n daysSpanned,\n });\n\n const positionedEvent: MonthPositionedEventData = {\n ...event,\n position: {\n startOffset,\n width,\n weekIndex: weekIdx,\n row,\n hanging,\n },\n };\n\n groupedByWeek[weekIdx.toString()].push(positionedEvent);\n\n addEventToDayGroups({\n positionedEvent,\n eventStart,\n eventEnd,\n groupedByDay,\n eventsAddedToDay,\n weekIdx,\n });\n }\n }\n }\n\n return {\n groupedByWeek,\n groupedByDay,\n backgroundByWeek,\n };\n}\n"],"mappings":";;;;;;;;;AAgDA,SAAgB,yBAAyB,EACvC,MACA,QACA,iBAAiB,GACjB,SACoD;CACpD,MAAM,gBAAqD,CAAC;CAC5D,MAAM,mBAA2D,CAAC;CAClE,MAAM,mCAAmB,IAAI,IAAY;CAEzC,MAAM,aAAa,SAAA,GAAQ,MAAA,QAAA,CAAM,MAAM,KAAK,KAAA,GAAI,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,QAAQ,OAAO;CAC3E,MAAM,WAAW,SAAA,GAAQ,MAAA,QAAA,CAAM,MAAM,GAAG,KAAA,GAAI,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,MAAM,OAAO;CAEtF,MAAM,EAAE,OAAO,iBAAiBA,2BAAAA,gBAAgB;EAC9C;EACA;EACA;CACF,CAAC;CAED,MAAM,aAAa,MAAM,KAAK,UAAU;EACtC,YAAA,GAAW,MAAA,QAAA,CAAM,KAAK,EAAE,CAAC,CAAC,QAAQ,KAAK;EACvC,UAAA,GAAS,MAAA,QAAA,CAAM,KAAK,EAAE,CAAC,CAAC,MAAM,KAAK;EACnC,cAAc,IAAI,MAAc,CAAC,CAAC,CAAC,KAAK,CAAC;CAC3C,EAAE;CAEF,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,cAAc,EAAE,SAAS,KAAK,CAAC;EAC/B,iBAAiB,EAAE,SAAS,KAAK,CAAC;CACpC;CAEA,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,cAAA,GAAa,MAAA,QAAA,CAAM,MAAM,KAAK,CAAC,CAAC,QAAQ,KAAK;EACnD,MAAM,UAAA,GAAS,MAAA,QAAA,CAAM,MAAM,GAAG;EAE9B,MAAM,WADgB,OAAO,KAAK,MAAM,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,OAAO,MAAM,IAEtF,OAAO,QAAQ,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,IACvC,OAAO,QAAQ,KAAK;EACxB,MAAM,aAAa,SAAS,QAAQ,UAAU;EAE9C,KAAK,IAAI,UAAU,GAAG,UAAU,MAAM,QAAQ,WAAW;GACvD,MAAM,EAAE,WAAW,SAAS,iBAAiB,WAAW;GAExD,KACG,WAAW,SAAS,OAAO,KAAK,WAAW,OAAO,SAAS,KAAK,OAChE,SAAS,QAAQ,SAAS,KAAK,SAAS,OAAO,WAAW,KAAK,IAChE;IACA,MAAM,EAAE,eAAe,aAAa,aAAa,OAAO,YACtDC,yCAAAA,6BAA6B;KAC3B;KACA;KACA;KACA;KACA;IACF,CAAC;IAEH,IAAI,MAAM,YAAY,cAAc;KAClC,iBAAiB,QAAQ,SAAS,EAAE,CAAC,KAAK;MACxC,GAAG;MACH,UAAU;OACR;OACA;OACA,WAAW;OACX,KAAK;OACL;MACF;KACF,CAAC;KACD;IACF;IAEA,MAAM,MAAMC,oBAAAA,WAAW;KACrB;KACA;KACA;IACF,CAAC;IAED,MAAM,kBAA4C;KAChD,GAAG;KACH,UAAU;MACR;MACA;MACA,WAAW;MACX;MACA;KACF;IACF;IAEA,cAAc,QAAQ,SAAS,EAAE,CAAC,KAAK,eAAe;IAEtD,gCAAA,oBAAoB;KAClB;KACA;KACA;KACA;KACA;KACA;IACF,CAAC;GACH;EACF;CACF;CAEA,OAAO;EACL;EACA;EACA;CACF;AACF"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ //#region packages/@mantine/schedule/src/components/MonthView/get-month-view-events/reserve-row.ts
3
+ function reserveRow({ nextRowByDay, startDayIndex, daysSpanned }) {
4
+ const endDayIndex = startDayIndex + daysSpanned;
5
+ const row = Math.max(...nextRowByDay.slice(startDayIndex, endDayIndex));
6
+ nextRowByDay.fill(row + 1, startDayIndex, endDayIndex);
7
+ return row;
8
+ }
9
+ //#endregion
10
+ exports.reserveRow = reserveRow;
11
+
12
+ //# sourceMappingURL=reserve-row.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reserve-row.cjs","names":[],"sources":["../../../../src/components/MonthView/get-month-view-events/reserve-row.ts"],"sourcesContent":["interface ReserveRowInput {\n nextRowByDay: number[];\n startDayIndex: number;\n daysSpanned: number;\n}\n\nexport function reserveRow({ nextRowByDay, startDayIndex, daysSpanned }: ReserveRowInput): number {\n const endDayIndex = startDayIndex + daysSpanned;\n const row = Math.max(...nextRowByDay.slice(startDayIndex, endDayIndex));\n nextRowByDay.fill(row + 1, startDayIndex, endDayIndex);\n return row;\n}\n"],"mappings":";;AAMA,SAAgB,WAAW,EAAE,cAAc,eAAe,eAAwC;CAChG,MAAM,cAAc,gBAAgB;CACpC,MAAM,MAAM,KAAK,IAAI,GAAG,aAAa,MAAM,eAAe,WAAW,CAAC;CACtE,aAAa,KAAK,MAAM,GAAG,eAAe,WAAW;CACrD,OAAO;AACT"}
@@ -62,7 +62,7 @@ const varsResolver = (0, _mantine_core.createVarsResolver)((_theme, { radius, sl
62
62
  } }));
63
63
  const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
64
64
  const props = (0, _mantine_core.useProps)("ResourcesDayView", defaultProps, _props);
65
- const { classNames, className, style, styles, unstyled, attributes, vars, startTime, endTime, date, onDateChange, resources, intervalMinutes, minEventSize, slotLabelFormat, radius, startScrollTime, scrollAreaProps, locale, withCurrentTimeIndicator: _withCurrentTimeIndicator, withCurrentTimeBubble = true, getCurrentTime, __staticSelector, withHeader, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, headerFormat, events, slotWidth, rowHeight, labels, highlightBusinessHours, businessHours, renderEventBody, renderEvent, renderResourceLabel, groups, renderGroupLabel, groupLabelWidth, withEventsDragAndDrop, onEventDrop, canDragEvent, eventDragInterval, onEventDragStart, onEventDragEnd, onTimeSlotClick, onEventClick, withInteractiveBackgroundEvents, withDragSlotSelect, onSlotDragEnd, mode, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, eventResizeInterval, recurrenceExpansionLimit, maxEventsPerTimeSlot: _maxEventsPerTimeSlot, moreEventsProps, ...others } = props;
65
+ const { classNames, className, style, styles, unstyled, attributes, vars, startTime, endTime, date, onDateChange, resources, intervalMinutes, minEventSize, slotLabelFormat, radius, startScrollTime, scrollAreaProps, locale, withCurrentTimeIndicator: _withCurrentTimeIndicator, withCurrentTimeBubble = true, getCurrentTime, __staticSelector, withHeader, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, headerFormat, events, slotWidth, rowHeight, labels, highlightBusinessHours, businessHours, renderEventBody, renderEvent, renderResourceLabel, groups, renderGroupLabel, groupLabelWidth, withEventsDragAndDrop, onEventDrop, canDragEvent, eventDragInterval, onEventDragStart, onEventDragEnd, onTimeSlotClick, onEventClick, withInteractiveBackgroundEvents, withDragSlotSelect, onSlotDragEnd, mode, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, canDropEvent, canDropExternalEvent, canResizeEventTo, preventEventOverlap, onEventPlacementRejected, eventResizeInterval, recurrenceExpansionLimit, maxEventsPerTimeSlot: _maxEventsPerTimeSlot, moreEventsProps, ...others } = props;
66
66
  const maxEventsPerTimeSlot = _maxEventsPerTimeSlot !== void 0 ? Math.max(1, _maxEventsPerTimeSlot) : void 0;
67
67
  const getStyles = (0, _mantine_core.useStyles)({
68
68
  name: __staticSelector,
@@ -106,35 +106,27 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
106
106
  offset: 0,
107
107
  size: 0
108
108
  });
109
- const handleExternalDrop = (0, react.useCallback)((e, target) => {
110
- if (!onExternalEventDrop) return;
109
+ const getExternalDropDateTime = (0, react.useCallback)((target) => {
111
110
  const slotDate = (0, dayjs.default)(date).format("YYYY-MM-DD");
112
111
  const slotTime = slots[target.slotIndex].startTime;
113
- let dropDateTime = `${slotDate} ${slotTime}`;
114
- if (eventDragInterval != null) {
115
- const { start } = require_calculate_drop_time.calculateDropTime({
116
- draggedEvent: {
117
- start: dropDateTime,
118
- end: dropDateTime
119
- },
120
- targetDate: slotDate,
121
- targetSlotTime: slotTime,
122
- intervalMinutes,
123
- dragIntervalMinutes: eventDragInterval,
124
- slotOffset: dragOffsetRef.current.offset,
125
- slotSize: dragOffsetRef.current.size,
126
- startTime,
127
- endTime
128
- });
129
- dropDateTime = (0, dayjs.default)(start).format("YYYY-MM-DD HH:mm:ss");
130
- }
131
- onExternalEventDrop({
132
- dataTransfer: e.dataTransfer,
133
- dropDateTime,
134
- resourceId: target.resourceId
112
+ const dropDateTime = `${slotDate} ${slotTime}`;
113
+ if (eventDragInterval == null) return dropDateTime;
114
+ const { start } = require_calculate_drop_time.calculateDropTime({
115
+ draggedEvent: {
116
+ start: dropDateTime,
117
+ end: dropDateTime
118
+ },
119
+ targetDate: slotDate,
120
+ targetSlotTime: slotTime,
121
+ intervalMinutes,
122
+ dragIntervalMinutes: eventDragInterval,
123
+ slotOffset: dragOffsetRef.current.offset,
124
+ slotSize: dragOffsetRef.current.size,
125
+ startTime,
126
+ endTime
135
127
  });
128
+ return (0, dayjs.default)(start).format("YYYY-MM-DD HH:mm:ss");
136
129
  }, [
137
- onExternalEventDrop,
138
130
  slots,
139
131
  date,
140
132
  eventDragInterval,
@@ -142,6 +134,14 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
142
134
  startTime,
143
135
  endTime
144
136
  ]);
137
+ const handleExternalDrop = (0, react.useCallback)((e, target) => {
138
+ if (!onExternalEventDrop) return;
139
+ onExternalEventDrop({
140
+ dataTransfer: e.dataTransfer,
141
+ dropDateTime: getExternalDropDateTime(target),
142
+ resourceId: target.resourceId
143
+ });
144
+ }, [onExternalEventDrop, getExternalDropDateTime]);
145
145
  const lastDropResourceId = (0, react.useRef)(void 0);
146
146
  const getDropTimeForSlot = (target, draggedEvent) => {
147
147
  const slotTime = slots[target.slotIndex].startTime;
@@ -163,6 +163,16 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
163
163
  resourceId: lastDropResourceId.current
164
164
  });
165
165
  }, [onEventDrop]);
166
+ const expandedEvents = (0, react.useMemo)(() => require_expand_recurring_events.expandRecurringEvents({
167
+ events,
168
+ rangeStart: (0, dayjs.default)(date).startOf("day").toDate(),
169
+ rangeEnd: (0, dayjs.default)(date).endOf("day").toDate(),
170
+ expansionLimit: recurrenceExpansionLimit
171
+ }), [
172
+ events,
173
+ date,
174
+ recurrenceExpansionLimit
175
+ ]);
166
176
  const dragDrop = require_use_drag_drop_handlers.useDragDropHandlers({
167
177
  enabled: withEventsDragAndDrop,
168
178
  mode,
@@ -174,7 +184,14 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
174
184
  lastDropResourceId.current = target.resourceId;
175
185
  return getDropTimeForSlot(target, draggedEvent);
176
186
  },
177
- onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0
187
+ onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0,
188
+ events: expandedEvents,
189
+ preventEventOverlap,
190
+ canDropEvent,
191
+ canDropExternalEvent,
192
+ onEventPlacementRejected,
193
+ getExternalDropDateTime,
194
+ getTargetResourceId: (target) => target.resourceId
178
195
  });
179
196
  const updateDragPreview = (target) => {
180
197
  const draggedEvent = dragDrop.dragContextValue.draggedEvent;
@@ -210,6 +227,10 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
210
227
  resizeIntervalMinutes: eventResizeInterval,
211
228
  onEventResize,
212
229
  canResizeEvent,
230
+ events: expandedEvents,
231
+ preventEventOverlap,
232
+ canResizeEventTo,
233
+ onEventPlacementRejected,
213
234
  withBackgroundEvents: withInteractiveBackgroundEvents
214
235
  });
215
236
  const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static";
@@ -250,16 +271,6 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
250
271
  date: now,
251
272
  format: slotLabelFormat
252
273
  }) : "";
253
- const expandedEvents = (0, react.useMemo)(() => require_expand_recurring_events.expandRecurringEvents({
254
- events,
255
- rangeStart: (0, dayjs.default)(date).startOf("day").toDate(),
256
- rangeEnd: (0, dayjs.default)(date).endOf("day").toDate(),
257
- expansionLimit: recurrenceExpansionLimit
258
- }), [
259
- events,
260
- date,
261
- recurrenceExpansionLimit
262
- ]);
263
274
  const resourceEvents = (0, react.useMemo)(() => require_get_resources_day_view_events.getResourcesDayViewEvents({
264
275
  date,
265
276
  events: expandedEvents,
@@ -316,7 +327,7 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
316
327
  const cornerEl = viewportRef.current.querySelector(`.${require_ResourcesDayView_module.default.resourcesDayViewCorner}`);
317
328
  const labelWidth = cornerEl ? cornerEl.getBoundingClientRect().width : 0;
318
329
  viewportRef.current.scrollTo({
319
- left: slotRect.left - viewportRect.left - labelWidth,
330
+ left: slotRect.left - viewportRect.left + viewportRef.current.scrollLeft - labelWidth,
320
331
  top: 0
321
332
  });
322
333
  }, []);
@@ -420,6 +431,7 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
420
431
  nowrap: true,
421
432
  draggable: isDraggable,
422
433
  isResizing: isThisEventResizing,
434
+ mod: { invalid: isThisEventResizing && !eventResize.resizeValid },
423
435
  renderEventBody,
424
436
  renderEvent,
425
437
  radius,
@@ -563,28 +575,31 @@ const ResourcesDayView = (0, _mantine_core.factory)((_props) => {
563
575
  allDayEventNodes,
564
576
  regularEvents,
565
577
  moreEventsForResource,
566
- dragDrop.dragPreview?.target.resourceId === resource.id && dragDrop.dragContextValue.draggedEvent && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.Box, { ...getStyles("resourcesDayViewDragPreview", { style: (() => {
567
- const { top, height } = require_get_day_position.getDayPosition({
568
- event: {
569
- ...dragDrop.dragContextValue.draggedEvent,
570
- start: dragDrop.dragPreview.start,
571
- end: dragDrop.dragPreview.end
572
- },
573
- startTime,
574
- endTime,
575
- intervalMinutes
576
- });
577
- return {
578
- position: "absolute",
579
- insetBlockStart: 0,
580
- insetBlockEnd: 0,
581
- ...require_get_time_axis_event_style.getTimeAxisEventStyle({
582
- start: top,
583
- span: height,
584
- axis: "horizontal"
585
- })
586
- };
587
- })() }) })
578
+ dragDrop.dragPreview?.target.resourceId === resource.id && dragDrop.dragContextValue.draggedEvent && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.Box, {
579
+ mod: { invalid: !dragDrop.dropValid },
580
+ ...getStyles("resourcesDayViewDragPreview", { style: (() => {
581
+ const { top, height } = require_get_day_position.getDayPosition({
582
+ event: {
583
+ ...dragDrop.dragContextValue.draggedEvent,
584
+ start: dragDrop.dragPreview.start,
585
+ end: dragDrop.dragPreview.end
586
+ },
587
+ startTime,
588
+ endTime,
589
+ intervalMinutes
590
+ });
591
+ return {
592
+ position: "absolute",
593
+ insetBlockStart: 0,
594
+ insetBlockEnd: 0,
595
+ ...require_get_time_axis_event_style.getTimeAxisEventStyle({
596
+ start: top,
597
+ span: height,
598
+ axis: "horizontal"
599
+ })
600
+ };
601
+ })() })
602
+ })
588
603
  ]
589
604
  }, resource.id);
590
605
  });