@mantine/schedule 9.6.3 → 9.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/cjs/components/DayView/DayView.cjs +45 -30
  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/ResourcesDayView/ResourcesDayView.cjs +74 -59
  7. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -1
  8. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs.map +1 -1
  9. package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs +18 -6
  10. package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs.map +1 -1
  11. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs +6 -1
  12. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs.map +1 -1
  13. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +84 -57
  14. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -1
  15. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs.map +1 -1
  16. package/cjs/components/Schedule/Schedule.cjs +14 -1
  17. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  18. package/cjs/components/ScheduleEvent/ScheduleEvent.module.cjs.map +1 -1
  19. package/cjs/components/WeekView/WeekView.cjs +67 -45
  20. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  21. package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
  22. package/cjs/hooks/use-day-grid-event-resize.cjs +38 -8
  23. package/cjs/hooks/use-day-grid-event-resize.cjs.map +1 -1
  24. package/cjs/hooks/use-drag-drop-handlers.cjs +126 -10
  25. package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
  26. package/cjs/hooks/use-event-resize.cjs +36 -12
  27. package/cjs/hooks/use-event-resize.cjs.map +1 -1
  28. package/cjs/hooks/use-horizontal-event-resize.cjs +37 -12
  29. package/cjs/hooks/use-horizontal-event-resize.cjs.map +1 -1
  30. package/cjs/hooks/validate-event-resize.cjs +37 -0
  31. package/cjs/hooks/validate-event-resize.cjs.map +1 -0
  32. package/cjs/index.cjs +2 -0
  33. package/cjs/utils/is-event-placement-allowed/is-event-placement-allowed.cjs +52 -0
  34. package/cjs/utils/is-event-placement-allowed/is-event-placement-allowed.cjs.map +1 -0
  35. package/esm/components/DayView/DayView.mjs +45 -30
  36. package/esm/components/DayView/DayView.mjs.map +1 -1
  37. package/esm/components/DayView/DayView.module.mjs.map +1 -1
  38. package/esm/components/MonthView/MonthView.mjs +11 -4
  39. package/esm/components/MonthView/MonthView.mjs.map +1 -1
  40. package/esm/components/ResourcesDayView/ResourcesDayView.mjs +74 -59
  41. package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -1
  42. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -1
  43. package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs +18 -6
  44. package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs.map +1 -1
  45. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs +6 -1
  46. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs.map +1 -1
  47. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +84 -57
  48. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -1
  49. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -1
  50. package/esm/components/Schedule/Schedule.mjs +14 -1
  51. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  52. package/esm/components/ScheduleEvent/ScheduleEvent.module.mjs.map +1 -1
  53. package/esm/components/WeekView/WeekView.mjs +67 -45
  54. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  55. package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
  56. package/esm/hooks/use-day-grid-event-resize.mjs +38 -8
  57. package/esm/hooks/use-day-grid-event-resize.mjs.map +1 -1
  58. package/esm/hooks/use-drag-drop-handlers.mjs +126 -10
  59. package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
  60. package/esm/hooks/use-event-resize.mjs +36 -12
  61. package/esm/hooks/use-event-resize.mjs.map +1 -1
  62. package/esm/hooks/use-horizontal-event-resize.mjs +37 -12
  63. package/esm/hooks/use-horizontal-event-resize.mjs.map +1 -1
  64. package/esm/hooks/validate-event-resize.mjs +37 -0
  65. package/esm/hooks/validate-event-resize.mjs.map +1 -0
  66. package/esm/index.mjs +2 -1
  67. package/esm/utils/is-event-placement-allowed/is-event-placement-allowed.mjs +50 -0
  68. package/esm/utils/is-event-placement-allowed/is-event-placement-allowed.mjs.map +1 -0
  69. package/lib/components/DayView/DayView.d.ts +11 -1
  70. package/lib/components/MonthView/MonthView.d.ts +9 -1
  71. package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +11 -1
  72. package/lib/components/ResourcesMonthView/ResourcesMonthView.d.ts +11 -1
  73. package/lib/components/ResourcesSchedule/ResourcesSchedule.d.ts +12 -2
  74. package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +11 -1
  75. package/lib/components/Schedule/Schedule.d.ts +12 -2
  76. package/lib/components/WeekView/WeekView.d.ts +11 -1
  77. package/lib/hooks/use-day-grid-event-resize.d.ts +4 -2
  78. package/lib/hooks/use-drag-drop-handlers.d.ts +17 -1
  79. package/lib/hooks/use-event-resize.d.ts +4 -2
  80. package/lib/hooks/use-horizontal-event-resize.d.ts +4 -2
  81. package/lib/hooks/validate-event-resize.d.ts +33 -0
  82. package/lib/types.d.ts +65 -0
  83. package/lib/utils/index.d.ts +2 -0
  84. package/lib/utils/is-event-placement-allowed/is-event-placement-allowed.d.ts +22 -0
  85. package/package.json +6 -6
  86. package/styles.css +29 -0
  87. package/styles.layer.css +29 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ResourcesMonthView.cjs","names":["createVarsResolver","getRadius","rem","factory","useProps","useStyles","useResolvedStylesApi","useMantineTheme","useDatesContext","useMemo","getOrderedResources","useRef","useMergedRef","useCallback","expandRecurringEvents","useDayGridEventResize","useDragDropHandlers","calculateMonthDropDate","getGroupToResourceIdMap","useSlotDragSelect","Box","formatDate","getIndexFromDragPoint","ScheduleEvent","MoreEvents","UnstyledButton","ScheduleHeaderBase","toDateString","ScrollArea","getLabel","DragContext","classes"],"sources":["../../../src/components/ResourcesMonthView/ResourcesMonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useMemo, useRef } 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 UnstyledButton,\n useMantineTheme,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useIsomorphicEffect, useMergedRef } from '@mantine/hooks';\nimport { useDayGridEventResize } from '../../hooks/use-day-grid-event-resize';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayOfWeek,\n ScheduleEventData,\n ScheduleMode,\n ScheduleResourceData,\n ScheduleResourceGroup,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateMonthDropDate,\n expandRecurringEvents,\n formatDate,\n getGroupToResourceIdMap,\n getIndexFromDragPoint,\n getOrderedResources,\n toDateString,\n} from '../../utils';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\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 classes from './ResourcesMonthView.module.css';\n\nexport type ResourcesMonthViewStylesNames =\n | 'resourcesMonthView'\n | 'resourcesMonthViewRoot'\n | 'resourcesMonthViewScrollArea'\n | 'resourcesMonthViewDayLabelsRow'\n | 'resourcesMonthViewCorner'\n | 'resourcesMonthViewDayLabel'\n | 'resourcesMonthViewDayLabelWeekday'\n | 'resourcesMonthViewDayLabelNumber'\n | 'resourcesMonthViewRow'\n | 'resourcesMonthViewResourceLabel'\n | 'resourcesMonthViewRowSlots'\n | 'resourcesMonthViewCell'\n | 'resourcesMonthViewEventWrapper'\n | 'resourcesMonthViewResizeHandle'\n | 'resourcesMonthViewInner'\n | 'resourcesMonthViewGroupColumn'\n | 'resourcesMonthViewGroupColumnEmpty'\n | MoreEventsStylesNames\n | CombinedScheduleHeaderStylesNames;\n\nexport type ResourcesMonthViewCssVariables = {\n resourcesMonthView:\n | '--resources-month-view-radius'\n | '--resources-month-view-day-width'\n | '--resources-month-view-row-height'\n | '--resources-month-view-group-label-width';\n};\n\nexport interface ResourcesMonthViewProps\n extends BoxProps, StylesApiProps<ResourcesMonthViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Date 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 /** Locale passed down to dayjs */\n locale?: string;\n\n /** `dayjs` format for weekdays in day column headers @default 'dd' */\n weekdayFormat?: DateLabelFormat;\n\n /** Indices of weekend days */\n weekendDays?: DayOfWeek[];\n\n /** If set to false, weekend days are hidden @default true */\n withWeekendDays?: boolean;\n\n /** Date to scroll to on initial render, in `YYYY-MM-DD` format */\n startScrollDate?: string;\n\n /** Called when a cell is clicked, includes resourceId */\n onDayClick?: (data: {\n date: DateStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\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, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Props passed down to `MonthYearSelect` component */\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 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 /** Events to display */\n events?: ScheduleEventData[];\n\n /** Width of each day column @default 40px */\n dayWidth?: React.CSSProperties['width'];\n\n /** Height of each resource row @default 48px */\n rowHeight?: React.CSSProperties['height'];\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, 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 /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** If true, events can be resized by dragging their start and end edges, resizing snaps to whole days @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 when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\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, includes resourceId */\n onSlotDragEnd?: (data: {\n rangeStart: DateTimeStringValue;\n rangeEnd: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Interaction mode @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 */\n onExternalEventDrop?: (data: {\n dataTransfer: DataTransfer;\n dropDateTime: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Maximum number of events visible per cell before \"+more\" indicator @default 2 */\n maxEventsPerTimeSlot?: number;\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n /** Max number of generated recurring instances @default 2000 */\n recurrenceExpansionLimit?: number;\n}\n\nexport type ResourcesMonthViewFactory = Factory<{\n props: ResourcesMonthViewProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesMonthViewStylesNames;\n vars: ResourcesMonthViewCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<ResourcesMonthViewFactory>(\n (_theme, { radius, dayWidth, rowHeight, groupLabelWidth }) => ({\n resourcesMonthView: {\n '--resources-month-view-radius': radius ? getRadius(radius) : undefined,\n '--resources-month-view-day-width': rem(dayWidth),\n '--resources-month-view-row-height': rem(rowHeight),\n '--resources-month-view-group-label-width': rem(groupLabelWidth),\n },\n })\n);\n\nconst defaultProps = {\n __staticSelector: 'ResourcesMonthView',\n highlightToday: true,\n withHeader: true,\n weekdayFormat: 'ddd',\n withWeekendDays: true,\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n withEventResize: false,\n mode: 'default',\n} satisfies Partial<ResourcesMonthViewProps>;\n\nfunction compareCellEvents(a: ScheduleEventData, b: ScheduleEventData): number {\n const aStart = dayjs(a.start);\n const bStart = dayjs(b.start);\n const aSpan = dayjs(a.end).startOf('day').diff(aStart.startOf('day'), 'day');\n const bSpan = dayjs(b.end).startOf('day').diff(bStart.startOf('day'), 'day');\n\n if (aSpan !== bSpan) {\n return bSpan - aSpan;\n }\n\n return aStart.valueOf() - bStart.valueOf();\n}\n\nfunction getFirstAvailableRow(usedRows: Set<number>, maxRows: number): number | null {\n for (let row = 0; row < maxRows; row += 1) {\n if (!usedRows.has(row)) {\n return row;\n }\n }\n\n return null;\n}\n\ninterface ResourcesMonthViewCellLayout {\n visible: { event: ScheduleEventData; row: number }[];\n hiddenCount: number;\n}\n\ninterface ResourcesMonthViewSegment {\n event: ScheduleEventData;\n startDayIndex: number;\n endDayIndex: number;\n row: number;\n clipStart: boolean;\n clipEnd: boolean;\n hanging: 'start' | 'end' | 'both' | 'none';\n\n /** True when any day the segment covers shows a \"+N more\" indicator (those days compress rows) */\n hiddenInSpan: boolean;\n}\n\ninterface ResourcesMonthViewResourceLayout {\n byDay: Record<string, ResourcesMonthViewCellLayout>;\n segments: ResourcesMonthViewSegment[];\n}\n\nfunction isMultiDayEvent(event: ScheduleEventData): boolean {\n return dayjs(event.end).startOf('day').isAfter(dayjs(event.start).startOf('day'));\n}\n\nexport const ResourcesMonthView = factory<ResourcesMonthViewFactory>((_props) => {\n const props = useProps('ResourcesMonthView', 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 resources,\n locale,\n weekdayFormat,\n weekendDays,\n withWeekendDays,\n startScrollDate,\n __staticSelector,\n onDayClick,\n highlightToday,\n radius,\n withHeader,\n monthYearSelectProps,\n onViewChange,\n todayControlProps,\n nextControlProps,\n previousControlProps,\n viewSelectProps,\n events,\n dayWidth,\n rowHeight,\n renderResourceLabel,\n groups,\n renderGroupLabel,\n groupLabelWidth,\n renderEventBody,\n renderEvent,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n withEventResize,\n onEventResize,\n canResizeEvent,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n labels,\n mode,\n scrollAreaProps,\n onExternalEventDrop,\n maxEventsPerTimeSlot: _maxEventsPerTimeSlot,\n moreEventsProps,\n recurrenceExpansionLimit,\n ...others\n } = props;\n\n const maxEventsPerTimeSlot = Math.min(10, Math.max(1, _maxEventsPerTimeSlot ?? 2));\n\n const getStyles = useStyles<ResourcesMonthViewFactory>({\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: 'resourcesMonthView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ResourcesMonthViewFactory>({\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 ctx = useDatesContext();\n const resolvedWeekendDays = ctx.getWeekendDays(weekendDays);\n const { orderedResources, groupRanges, resourceGroupMap } = useMemo(\n () => getOrderedResources(resources, groups),\n [resources, groups]\n );\n const hasGroups = groupRanges.length > 0;\n\n const monthDays = useMemo(() => {\n const start = dayjs(date).startOf('month');\n const daysCount = start.endOf('month').date();\n const weekendDayList = ctx.getWeekendDays(weekendDays);\n const days: string[] = [];\n for (let d = 1; d <= daysCount; d++) {\n const day = start.date(d);\n if (!withWeekendDays && weekendDayList.includes(day.day() as DayOfWeek)) {\n continue;\n }\n days.push(day.format('YYYY-MM-DD'));\n }\n return days;\n }, [date, withWeekendDays, weekendDays, ctx]);\n\n const viewportRef = useRef<HTMLDivElement>(null);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n const dayLabelRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n const resourceLabelRef = useRef<HTMLDivElement>(null);\n\n const scrollToDay = useCallback(\n (targetDate: string) => {\n if (!viewportRef.current) {\n return;\n }\n const targetIndex = monthDays.indexOf(targetDate);\n if (targetIndex < 0) {\n return;\n }\n const targetLabel = dayLabelRefs.current[targetIndex];\n if (!targetLabel) {\n return;\n }\n const labelRect = targetLabel.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n const labelWidth = resourceLabelRef.current?.getBoundingClientRect().width ?? 0;\n viewportRef.current.scrollTo({\n left: labelRect.left - viewportRect.left - labelWidth,\n top: 0,\n });\n },\n [monthDays]\n );\n\n useIsomorphicEffect(() => {\n if (startScrollDate) {\n scrollToDay(startScrollDate);\n }\n }, []);\n\n const expandedEvents = useMemo(\n () =>\n expandRecurringEvents({\n events,\n rangeStart: dayjs(date).startOf('month').toDate(),\n rangeEnd: dayjs(date).endOf('month').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n }),\n [events, date, recurrenceExpansionLimit]\n );\n\n const monthDaySet = useMemo(() => new Set(monthDays), [monthDays]);\n\n const eventResize = useDayGridEventResize({\n enabled: withEventResize,\n mode,\n onEventResize,\n canResizeEvent,\n });\n\n const { resizingEventId, previewStart, previewEnd } = eventResize;\n\n const layoutEvents = useMemo(() => {\n if (resizingEventId === null || previewStart === null || previewEnd === null) {\n return expandedEvents;\n }\n\n return expandedEvents.map((event) =>\n event.id === resizingEventId ? { ...event, start: previewStart, end: previewEnd } : event\n );\n }, [expandedEvents, resizingEventId, previewStart, previewEnd]);\n\n const { eventsByResourceAndDay, eventLayoutByResource } = useMemo(() => {\n const eventsByResourceAndDay: Record<string | number, Record<string, ScheduleEventData[]>> = {};\n for (const resource of resources) {\n eventsByResourceAndDay[resource.id] = {};\n for (const day of monthDays) {\n eventsByResourceAndDay[resource.id][day] = [];\n }\n }\n\n if (layoutEvents) {\n for (const event of layoutEvents) {\n if (event.resourceId === undefined || !(event.resourceId in eventsByResourceAndDay)) {\n continue;\n }\n\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n\n for (const day of monthDays) {\n const dayStart = dayjs(day).startOf('day');\n const dayEnd = dayjs(day).endOf('day');\n\n if (eventStart.isBefore(dayEnd) && eventEnd.isAfter(dayStart)) {\n eventsByResourceAndDay[event.resourceId][day].push(event);\n }\n }\n }\n }\n\n const eventLayoutByResource: Record<string | number, ResourcesMonthViewResourceLayout> = {};\n const monthRangeStart = dayjs(monthDays[0]).startOf('day');\n const monthEndExclusive = dayjs(monthDays[monthDays.length - 1])\n .add(1, 'day')\n .startOf('day');\n\n for (const resource of resources) {\n const byDay: Record<string, ResourcesMonthViewCellLayout> = {};\n const lastRow = new Map<string | number, number>();\n const rowByEventDay = new Map<string | number, Map<number, number>>();\n const overlapByEvent = new Map<\n string | number,\n { event: ScheduleEventData; days: number[] }\n >();\n\n monthDays.forEach((day, dayIndex) => {\n const dayEvents = eventsByResourceAndDay[resource.id][day];\n dayEvents.sort(compareCellEvents);\n\n for (const event of dayEvents) {\n const overlap = overlapByEvent.get(event.id);\n if (overlap) {\n overlap.days.push(dayIndex);\n } else {\n overlapByEvent.set(event.id, { event, days: [dayIndex] });\n }\n }\n\n const usedRows = new Set<number>();\n const visible: ResourcesMonthViewCellLayout['visible'] = [];\n let hiddenCount = 0;\n\n for (const event of dayEvents) {\n let row: number | null | undefined = lastRow.get(event.id);\n\n if (row === undefined || row >= maxEventsPerTimeSlot || usedRows.has(row)) {\n row = getFirstAvailableRow(usedRows, maxEventsPerTimeSlot);\n }\n\n if (row === null) {\n hiddenCount += 1;\n continue;\n }\n\n usedRows.add(row);\n visible.push({ event, row });\n if (!rowByEventDay.has(event.id)) {\n rowByEventDay.set(event.id, new Map());\n }\n rowByEventDay.get(event.id)!.set(dayIndex, row);\n lastRow.set(event.id, row);\n }\n\n byDay[day] = { visible, hiddenCount };\n });\n\n const segments: ResourcesMonthViewSegment[] = [];\n\n for (const { event, days } of overlapByEvent.values()) {\n if (!isMultiDayEvent(event)) {\n continue;\n }\n\n const firstOverlap = days[0];\n const lastOverlap = days[days.length - 1];\n const rows = rowByEventDay.get(event.id);\n const extendsBefore = dayjs(event.start).isBefore(monthRangeStart);\n const extendsAfter = dayjs(event.end).isAfter(monthEndExclusive);\n let run: { startDayIndex: number; endDayIndex: number; row: number } | null = null;\n\n const flushRun = () => {\n if (!run) {\n return;\n }\n const clipStart = run.startDayIndex > firstOverlap;\n const clipEnd = run.endDayIndex < lastOverlap;\n const hangStart = !clipStart && extendsBefore;\n const hangEnd = !clipEnd && extendsAfter;\n let hiddenInSpan = false;\n for (let dayIndex = run.startDayIndex; dayIndex <= run.endDayIndex; dayIndex += 1) {\n if ((byDay[monthDays[dayIndex]]?.hiddenCount ?? 0) > 0) {\n hiddenInSpan = true;\n break;\n }\n }\n segments.push({\n event,\n startDayIndex: run.startDayIndex,\n endDayIndex: run.endDayIndex,\n row: run.row,\n clipStart,\n clipEnd,\n hanging: hangStart && hangEnd ? 'both' : hangStart ? 'start' : hangEnd ? 'end' : 'none',\n hiddenInSpan,\n });\n run = null;\n };\n\n for (let dayIndex = firstOverlap; dayIndex <= lastOverlap; dayIndex += 1) {\n const row = rows?.get(dayIndex);\n\n if (row === undefined) {\n flushRun();\n continue;\n }\n\n if (run && run.row === row && run.endDayIndex === dayIndex - 1) {\n run.endDayIndex = dayIndex;\n } else {\n flushRun();\n run = { startDayIndex: dayIndex, endDayIndex: dayIndex, row };\n }\n }\n\n flushRun();\n }\n\n eventLayoutByResource[resource.id] = { byDay, segments };\n }\n\n return { eventsByResourceAndDay, eventLayoutByResource };\n }, [resources, monthDays, layoutEvents, maxEventsPerTimeSlot]);\n\n type DropTargetCell = { day: string; resourceId: string | number };\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, target: DropTargetCell) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop({\n dataTransfer: e.dataTransfer,\n dropDateTime: `${dayjs(target.day).format('YYYY-MM-DD')} 00:00:00`,\n resourceId: target.resourceId,\n });\n },\n [onExternalEventDrop]\n );\n\n const dragDrop = useDragDropHandlers<DropTargetCell>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop: (data) => {\n onEventDrop?.({ ...data, resourceId: lastDropResourceId.current });\n },\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (target: DropTargetCell, draggedEvent: ScheduleEventData) => {\n lastDropResourceId.current = target.resourceId;\n return calculateMonthDropDate({ draggedEvent, targetDay: target.day });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n });\n\n const lastDropResourceId = useRef<string | number | undefined>(undefined);\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\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 startDay = monthDays[startIndex];\n const endDay = monthDays[endIndex];\n if (startDay && endDay) {\n onSlotDragEnd({\n rangeStart: dayjs(startDay).startOf('day').format('YYYY-MM-DD HH:mm:ss'),\n rangeEnd: dayjs(endDay).endOf('day').format('YYYY-MM-DD HH:mm:ss'),\n resourceId: groupToResourceId.get(group) ?? group,\n });\n }\n },\n });\n\n const dayLabels = monthDays.map((day, dayIndex) => {\n const d = dayjs(day);\n const weekend = resolvedWeekendDays.includes(d.day() as DayOfWeek);\n const today = d.isSame(dayjs(), 'day') && highlightToday;\n\n return (\n <Box\n {...getStyles('resourcesMonthViewDayLabel')}\n key={day}\n mod={{ weekend, today }}\n ref={(node) => {\n dayLabelRefs.current[dayIndex] = node;\n }}\n >\n <span {...getStyles('resourcesMonthViewDayLabelWeekday')}>\n {formatDate({ date: d, locale: ctx.getLocale(locale), format: weekdayFormat })}\n </span>\n <span {...getStyles('resourcesMonthViewDayLabelNumber')}>{d.date()}</span>\n </Box>\n );\n });\n\n const cellsRef = useRef<HTMLButtonElement[][]>([]);\n\n const getDayIndexFromDragPoint = useCallback((event: React.DragEvent, resourceIndex: number) => {\n return getIndexFromDragPoint(cellsRef.current[resourceIndex] ?? [], event.clientX);\n }, []);\n\n const handleCellKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n resourceIndex: number,\n dayIndex: number\n ) => {\n const key = event.key;\n let nextResourceIndex = resourceIndex;\n let nextDayIndex = dayIndex;\n\n if (key === 'ArrowRight') {\n nextDayIndex = Math.min(dayIndex + 1, monthDays.length - 1);\n } else if (key === 'ArrowLeft') {\n nextDayIndex = Math.max(dayIndex - 1, 0);\n } else if (key === 'ArrowDown') {\n nextResourceIndex = Math.min(resourceIndex + 1, resources.length - 1);\n } else if (key === 'ArrowUp') {\n nextResourceIndex = Math.max(resourceIndex - 1, 0);\n } else {\n return;\n }\n\n event.preventDefault();\n cellsRef.current[nextResourceIndex]?.[nextDayIndex]?.focus();\n };\n\n const rowHeightPercent = 100 / maxEventsPerTimeSlot;\n\n const renderEventNode = ({\n key,\n event,\n resourceIndex,\n style,\n hanging,\n eventMod,\n withStartHandle,\n withEndHandle,\n }: {\n key: string;\n event: ScheduleEventData;\n resourceIndex: number;\n style: React.CSSProperties;\n hanging?: ResourcesMonthViewSegment['hanging'];\n eventMod?: Record<string, any>;\n withStartHandle: boolean;\n withEndHandle: boolean;\n }) => {\n const isResizable = eventResize.isResizableEvent(event);\n const isThisEventResizing = eventResize.resizingEventId === event.id;\n\n const eventEnd = dayjs(event.end);\n const endsAtMidnight =\n eventEnd.hour() === 0 && eventEnd.minute() === 0 && eventEnd.second() === 0;\n const lastDay = (endsAtMidnight ? eventEnd.subtract(1, 'day') : eventEnd).format('YYYY-MM-DD');\n\n const showStartHandle =\n withStartHandle && monthDaySet.has(dayjs(event.start).format('YYYY-MM-DD'));\n const showEndHandle = withEndHandle && monthDaySet.has(lastDay);\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 getHandleProps = (edge: 'start' | 'end') => ({\n ...getStyles('resourcesMonthViewResizeHandle'),\n 'data-edge': edge,\n 'data-active': (isThisEventResizing && eventResize.resizingEdge === edge) || undefined,\n onPointerDown: (e: React.PointerEvent) =>\n eventResize.handleResizeStart({\n event,\n edge,\n cells: cellsRef.current[resourceIndex] ?? [],\n days: monthDays,\n pointerEvent: e,\n }),\n });\n\n return (\n <Box\n key={key}\n {...getStyles('resourcesMonthViewEventWrapper', {\n style: { position: 'absolute', zIndex: 3, ...style },\n })}\n __vars={eventColors ? { '--event-color': eventColors.color } : undefined}\n data-resizing={isThisEventResizing || undefined}\n >\n <ScheduleEvent\n event={event}\n nowrap\n autoSize\n size=\"sm\"\n hanging={hanging}\n mod={eventMod}\n draggable={dragDrop.isDraggableEvent(event)}\n isResizing={isThisEventResizing}\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%' }}\n />\n {isResizable && showStartHandle && <div {...getHandleProps('start')} />}\n {isResizable && showEndHandle && <div {...getHandleProps('end')} />}\n </Box>\n );\n };\n\n const rows = orderedResources.map((resource, resourceIndex) => {\n if (!cellsRef.current[resourceIndex]) {\n cellsRef.current[resourceIndex] = [];\n }\n\n cellsRef.current[resourceIndex].length = monthDays.length;\n\n const slotGroup = String(resource.id);\n const dropTarget = dragDrop.dropTarget;\n\n const totalDays = monthDays.length;\n const eventNodes: React.ReactNode[] = [];\n const moreNodes: React.ReactNode[] = [];\n\n const cells = monthDays.map((day, dayIndex) => {\n const d = dayjs(day);\n const weekend = ctx.getWeekendDays(weekendDays).includes(d.day() as DayOfWeek);\n const isDropTarget =\n dropTarget !== null &&\n typeof dropTarget === 'object' &&\n 'day' in dropTarget &&\n (dropTarget as DropTargetCell).day === day &&\n (dropTarget as DropTargetCell).resourceId === resource.id;\n const isDragSelected = slotDragSelect.isSlotSelected(dayIndex, slotGroup);\n const dayEvents = eventsByResourceAndDay[resource.id]?.[day] || [];\n const layout = eventLayoutByResource[resource.id]?.byDay[day];\n const visibleEvents = layout?.visible ?? [];\n const hiddenEventsCount = layout?.hiddenCount ?? 0;\n const isFirstCell = resourceIndex === 0 && dayIndex === 0;\n const dayLeftPercent = (dayIndex / totalDays) * 100;\n const dayWidthPercent = 100 / totalDays;\n\n const hasHiddenEvents = hiddenEventsCount > 0 && mode !== 'static';\n\n visibleEvents.forEach(({ event, row }) => {\n if (isMultiDayEvent(event)) {\n return;\n }\n\n const topValue = hasHiddenEvents\n ? `calc((100% - 18px) * ${row} / ${maxEventsPerTimeSlot} + 1px)`\n : `calc(${row * rowHeightPercent}% + 1px)`;\n const heightValue = hasHiddenEvents\n ? `calc((100% - 18px) / ${maxEventsPerTimeSlot} - 2px)`\n : `calc(${rowHeightPercent}% - 2px)`;\n\n eventNodes.push(\n renderEventNode({\n key: `${event.id}-${day}`,\n event,\n resourceIndex,\n withStartHandle: true,\n withEndHandle: true,\n style: {\n top: topValue,\n left: `calc(${dayLeftPercent}% + 1px)`,\n width: `calc(${dayWidthPercent}% - 2px)`,\n height: heightValue,\n },\n })\n );\n });\n\n if (hiddenEventsCount > 0 && mode !== 'static') {\n moreNodes.push(\n <MoreEvents\n key={`more-${resource.id}-${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 bottom: 1,\n left: `calc(${dayLeftPercent}% + 1px)`,\n width: `calc(${dayWidthPercent}% - 2px)`,\n height: 18,\n zIndex: 4,\n }}\n {...stylesApiProps}\n {...moreEventsProps}\n />\n );\n }\n\n return (\n <UnstyledButton\n key={day}\n ref={(node) => {\n if (node) {\n if (!cellsRef.current[resourceIndex]) {\n cellsRef.current[resourceIndex] = [];\n }\n cellsRef.current[resourceIndex][dayIndex] = node;\n }\n }}\n {...getStyles('resourcesMonthViewCell')}\n aria-label={`${resource.label} ${d.format('MMMM D, YYYY')}`}\n data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? dayIndex : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? slotGroup : undefined}\n mod={{\n weekend,\n 'drop-target': isDropTarget,\n 'drag-selected': isDragSelected,\n static: mode === 'static',\n }}\n tabIndex={mode === 'static' ? -1 : isFirstCell ? 0 : -1}\n onClick={\n mode === 'static'\n ? undefined\n : (e) => onDayClick?.({ date: day, nativeEvent: e, resourceId: resource.id })\n }\n onKeyDown={\n mode === 'static' ? undefined : (e) => handleCellKeyDown(e, resourceIndex, dayIndex)\n }\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) =>\n slotDragSelect.handleSlotPointerDown(\n e as React.PointerEvent<HTMLButtonElement>,\n dayIndex,\n slotGroup\n )\n : undefined\n }\n onDragOver={withDragHandlers ? (e) => e.preventDefault() : undefined}\n />\n );\n });\n\n const resourceSegments = eventLayoutByResource[resource.id]?.segments ?? [];\n\n resourceSegments.forEach((segment) => {\n const segmentLeftPercent = (segment.startDayIndex / totalDays) * 100;\n const segmentWidthPercent =\n ((segment.endDayIndex - segment.startDayIndex + 1) / totalDays) * 100;\n const compressed = segment.hiddenInSpan && mode !== 'static';\n const topValue = compressed\n ? `calc((100% - 18px) * ${segment.row} / ${maxEventsPerTimeSlot} + 1px)`\n : `calc(${segment.row * rowHeightPercent}% + 1px)`;\n const heightValue = compressed\n ? `calc((100% - 18px) / ${maxEventsPerTimeSlot} - 2px)`\n : `calc(${rowHeightPercent}% - 2px)`;\n\n eventNodes.push(\n renderEventNode({\n key: `${segment.event.id}-segment-${segment.startDayIndex}`,\n event: segment.event,\n resourceIndex,\n hanging: segment.hanging,\n eventMod: { 'clip-start': segment.clipStart, 'clip-end': segment.clipEnd },\n withStartHandle:\n !segment.clipStart && segment.hanging !== 'start' && segment.hanging !== 'both',\n withEndHandle:\n !segment.clipEnd && segment.hanging !== 'end' && segment.hanging !== 'both',\n style: {\n top: topValue,\n left: `calc(${segmentLeftPercent}% + 1px)`,\n width: `calc(${segmentWidthPercent}% - 2px)`,\n height: heightValue,\n },\n })\n );\n });\n\n const groupInfo = hasGroups ? resourceGroupMap[resourceIndex] : undefined;\n const isGroupStart = groupInfo?.position === 'first' || groupInfo?.position === 'only';\n\n const groupCell =\n groupInfo !== undefined ? (\n groupInfo !== null ? (\n <Box\n {...getStyles('resourcesMonthViewGroupColumn')}\n mod={{ 'group-position': groupInfo.position }}\n >\n {isGroupStart && (\n <span\n style={\n groupInfo.count > 1\n ? {\n transform: `translateY(calc((${groupInfo.count - 1} * (var(--resources-month-view-row-height) + 1px)) / 2))`,\n }\n : undefined\n }\n >\n {renderGroupLabel ? renderGroupLabel(groupInfo.group) : groupInfo.group.label}\n </span>\n )}\n </Box>\n ) : (\n <Box {...getStyles('resourcesMonthViewGroupColumnEmpty')} />\n )\n ) : null;\n\n return (\n <div {...getStyles('resourcesMonthViewRow')} key={resource.id}>\n {groupCell}\n <div\n {...getStyles('resourcesMonthViewResourceLabel')}\n data-has-groups={hasGroups || undefined}\n >\n {renderResourceLabel ? renderResourceLabel(resource) : resource.label}\n </div>\n <div\n {...getStyles('resourcesMonthViewRowSlots')}\n onDragOver={\n withDragHandlers\n ? (e) => {\n const dayIndex = getDayIndexFromDragPoint(e, resourceIndex);\n if (dayIndex !== null && monthDays[dayIndex]) {\n dragDrop.handleDragOver(e, {\n day: monthDays[dayIndex],\n resourceId: resource.id,\n });\n }\n }\n : undefined\n }\n onDragLeave={withDragHandlers ? dragDrop.handleDragLeave : undefined}\n onDrop={\n withDragHandlers\n ? (e) => {\n const dayIndex = getDayIndexFromDragPoint(e, resourceIndex);\n if (dayIndex !== null && monthDays[dayIndex]) {\n dragDrop.handleDrop(e, {\n day: monthDays[dayIndex],\n resourceId: resource.id,\n });\n }\n }\n : undefined\n }\n >\n {eventNodes}\n {moreNodes}\n {cells}\n </div>\n </div>\n );\n });\n\n const content = (\n <Box\n mod={[\n {\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n 'event-interaction': eventResize.isResizing || dragDrop.dragContextValue.isDragging,\n resizing: eventResize.isResizing,\n },\n mod,\n ]}\n {...getStyles('resourcesMonthView')}\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: () => {\n requestAnimationFrame(() => {\n scrollToDay(dayjs().format('YYYY-MM-DD'));\n });\n return toDateString(dayjs());\n },\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={{ views: ['day', 'week', 'month'] as const, ...viewSelectProps }}\n stylesApiProps={stylesApiProps}\n />\n )}\n\n <Box {...getStyles('resourcesMonthViewRoot')}>\n <ScrollArea\n scrollbars=\"x\"\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('resourcesMonthViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n viewportRef={mergedViewportRef}\n >\n <div {...getStyles('resourcesMonthViewInner')}>\n <div {...getStyles('resourcesMonthViewDayLabelsRow')}>\n <div\n {...getStyles('resourcesMonthViewCorner')}\n key=\"corner\"\n ref={resourceLabelRef}\n style={\n hasGroups\n ? {\n flexBasis:\n 'calc(var(--resources-month-view-resource-label-width) + var(--resources-month-view-group-label-width))',\n minWidth:\n 'calc(var(--resources-month-view-resource-label-width) + var(--resources-month-view-group-label-width))',\n }\n : undefined\n }\n >\n {getLabel('resources', labels)}\n </div>\n {dayLabels}\n </div>\n\n {rows}\n </div>\n </ScrollArea>\n </Box>\n </Box>\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragDrop.dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nResourcesMonthView.displayName = '@mantine/schedule/ResourcesMonthView';\nResourcesMonthView.classes = classes;\nResourcesMonthView.varsResolver = varsResolver;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAgQA,MAAM,gBAAA,GAAeA,cAAAA,mBAAAA,EAClB,QAAQ,EAAE,QAAQ,UAAU,WAAW,uBAAuB,EAC7D,oBAAoB;CAClB,iCAAiC,UAAA,GAASC,cAAAA,UAAAA,CAAU,MAAM,IAAI,KAAA;CAC9D,qCAAA,GAAoCC,cAAAA,IAAAA,CAAI,QAAQ;CAChD,sCAAA,GAAqCA,cAAAA,IAAAA,CAAI,SAAS;CAClD,6CAAA,GAA4CA,cAAAA,IAAAA,CAAI,eAAe;AACjE,EACF,EACF;AAEA,MAAM,eAAe;CACnB,kBAAkB;CAClB,gBAAgB;CAChB,YAAY;CACZ,eAAe;CACf,iBAAiB;CACjB,uBAAuB;CACvB,oBAAoB;CACpB,iBAAiB;CACjB,MAAM;AACR;AAEA,SAAS,kBAAkB,GAAsB,GAA8B;CAC7E,MAAM,UAAA,GAAS,MAAA,QAAA,CAAM,EAAE,KAAK;CAC5B,MAAM,UAAA,GAAS,MAAA,QAAA,CAAM,EAAE,KAAK;CAC5B,MAAM,SAAA,GAAQ,MAAA,QAAA,CAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,OAAO,QAAQ,KAAK,GAAG,KAAK;CAC3E,MAAM,SAAA,GAAQ,MAAA,QAAA,CAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,OAAO,QAAQ,KAAK,GAAG,KAAK;CAE3E,IAAI,UAAU,OACZ,OAAO,QAAQ;CAGjB,OAAO,OAAO,QAAQ,IAAI,OAAO,QAAQ;AAC3C;AAEA,SAAS,qBAAqB,UAAuB,SAAgC;CACnF,KAAK,IAAI,MAAM,GAAG,MAAM,SAAS,OAAO,GACtC,IAAI,CAAC,SAAS,IAAI,GAAG,GACnB,OAAO;CAIX,OAAO;AACT;AAyBA,SAAS,gBAAgB,OAAmC;CAC1D,QAAA,GAAO,MAAA,QAAA,CAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAA,GAAQ,MAAA,QAAA,CAAM,MAAM,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC;AAClF;AAEA,MAAa,sBAAA,GAAqBC,cAAAA,QAAAA,EAAoC,WAAW;CAC/E,MAAM,SAAA,GAAQC,cAAAA,SAAAA,CAAS,sBAAsB,cAAc,MAAM;CACjE,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,YACA,MACA,KACA,MACA,cACA,WACA,QACA,eACA,aACA,iBACA,iBACA,kBACA,YACA,gBACA,QACA,YACA,sBACA,cACA,mBACA,kBACA,sBACA,iBACA,QACA,UACA,WACA,qBACA,QACA,kBACA,iBACA,iBACA,aACA,uBACA,aACA,cACA,kBACA,gBACA,iBACA,eACA,gBACA,cACA,oBACA,eACA,QACA,MACA,iBACA,qBACA,sBAAsB,uBACtB,iBACA,0BACA,GAAG,WACD;CAEJ,MAAM,uBAAuB,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,yBAAyB,CAAC,CAAC;CAEjF,MAAM,aAAA,GAAYC,cAAAA,UAAAA,CAAqC;EACrD,MAAM;EACN,SAAA,kCAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,MAAM,EAAE,oBAAoB,oBAAA,GAAmBC,cAAAA,qBAAAA,CAAgD;EAC7F;EACA;EACA;CACF,CAAC;CAED,MAAM,iBAAiB;EACrB,YAAY;EACZ,QAAQ;EACR;EACA;EACA;CACF;CAEA,MAAM,SAAA,GAAQC,cAAAA,gBAAAA,CAAgB;CAC9B,MAAM,OAAA,GAAMC,eAAAA,gBAAAA,CAAgB;CAC5B,MAAM,sBAAsB,IAAI,eAAe,WAAW;CAC1D,MAAM,EAAE,kBAAkB,aAAa,sBAAA,GAAqBC,MAAAA,QAAAA,OACpDC,8BAAAA,oBAAoB,WAAW,MAAM,GAC3C,CAAC,WAAW,MAAM,CACpB;CACA,MAAM,YAAY,YAAY,SAAS;CAEvC,MAAM,aAAA,GAAYD,MAAAA,QAAAA,OAAc;EAC9B,MAAM,SAAA,GAAQ,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,QAAQ,OAAO;EACzC,MAAM,YAAY,MAAM,MAAM,OAAO,CAAC,CAAC,KAAK;EAC5C,MAAM,iBAAiB,IAAI,eAAe,WAAW;EACrD,MAAM,OAAiB,CAAC;EACxB,KAAK,IAAI,IAAI,GAAG,KAAK,WAAW,KAAK;GACnC,MAAM,MAAM,MAAM,KAAK,CAAC;GACxB,IAAI,CAAC,mBAAmB,eAAe,SAAS,IAAI,IAAI,CAAc,GACpE;GAEF,KAAK,KAAK,IAAI,OAAO,YAAY,CAAC;EACpC;EACA,OAAO;CACT,GAAG;EAAC;EAAM;EAAiB;EAAa;CAAG,CAAC;CAE5C,MAAM,eAAA,GAAcE,MAAAA,OAAAA,CAAuB,IAAI;CAC/C,MAAM,qBAAA,GAAoBC,eAAAA,aAAAA,CAAa,aAAa,iBAAiB,WAAW;CAChF,MAAM,gBAAA,GAAeD,MAAAA,OAAAA,CAAkC,CAAC,CAAC;CAEzD,MAAM,oBAAA,GAAmBA,MAAAA,OAAAA,CAAuB,IAAI;CAEpD,MAAM,eAAA,GAAcE,MAAAA,YAAAA,EACjB,eAAuB;EACtB,IAAI,CAAC,YAAY,SACf;EAEF,MAAM,cAAc,UAAU,QAAQ,UAAU;EAChD,IAAI,cAAc,GAChB;EAEF,MAAM,cAAc,aAAa,QAAQ;EACzC,IAAI,CAAC,aACH;EAEF,MAAM,YAAY,YAAY,sBAAsB;EACpD,MAAM,eAAe,YAAY,QAAQ,sBAAsB;EAC/D,MAAM,aAAa,iBAAiB,SAAS,sBAAsB,CAAC,CAAC,SAAS;EAC9E,YAAY,QAAQ,SAAS;GAC3B,MAAM,UAAU,OAAO,aAAa,OAAO;GAC3C,KAAK;EACP,CAAC;CACH,GACA,CAAC,SAAS,CACZ;CAEA,CAAA,GAAA,eAAA,oBAAA,OAA0B;EACxB,IAAI,iBACF,YAAY,eAAe;CAE/B,GAAG,CAAC,CAAC;CAEL,MAAM,kBAAA,GAAiBJ,MAAAA,QAAAA,OAEnBK,gCAAAA,sBAAsB;EACpB;EACA,aAAA,GAAY,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,OAAO;EAChD,WAAA,GAAU,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,OAAO;EAC5C,gBAAgB;CAClB,CAAC,GACH;EAAC;EAAQ;EAAM;CAAwB,CACzC;CAEA,MAAM,eAAA,GAAcL,MAAAA,QAAAA,OAAc,IAAI,IAAI,SAAS,GAAG,CAAC,SAAS,CAAC;CAEjE,MAAM,cAAcM,kCAAAA,sBAAsB;EACxC,SAAS;EACT;EACA;EACA;CACF,CAAC;CAED,MAAM,EAAE,iBAAiB,cAAc,eAAe;CAEtD,MAAM,gBAAA,GAAeN,MAAAA,QAAAA,OAAc;EACjC,IAAI,oBAAoB,QAAQ,iBAAiB,QAAQ,eAAe,MACtE,OAAO;EAGT,OAAO,eAAe,KAAK,UACzB,MAAM,OAAO,kBAAkB;GAAE,GAAG;GAAO,OAAO;GAAc,KAAK;EAAW,IAAI,KACtF;CACF,GAAG;EAAC;EAAgB;EAAiB;EAAc;CAAU,CAAC;CAE9D,MAAM,EAAE,wBAAwB,2BAAA,GAA0BA,MAAAA,QAAAA,OAAc;EACtE,MAAM,yBAAuF,CAAC;EAC9F,KAAK,MAAM,YAAY,WAAW;GAChC,uBAAuB,SAAS,MAAM,CAAC;GACvC,KAAK,MAAM,OAAO,WAChB,uBAAuB,SAAS,GAAG,CAAC,OAAO,CAAC;EAEhD;EAEA,IAAI,cACF,KAAK,MAAM,SAAS,cAAc;GAChC,IAAI,MAAM,eAAe,KAAA,KAAa,EAAE,MAAM,cAAc,yBAC1D;GAGF,MAAM,cAAA,GAAa,MAAA,QAAA,CAAM,MAAM,KAAK;GACpC,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,MAAM,GAAG;GAEhC,KAAK,MAAM,OAAO,WAAW;IAC3B,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,GAAG,CAAC,CAAC,QAAQ,KAAK;IACzC,MAAM,UAAA,GAAS,MAAA,QAAA,CAAM,GAAG,CAAC,CAAC,MAAM,KAAK;IAErC,IAAI,WAAW,SAAS,MAAM,KAAK,SAAS,QAAQ,QAAQ,GAC1D,uBAAuB,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,KAAK;GAE5D;EACF;EAGF,MAAM,wBAAmF,CAAC;EAC1F,MAAM,mBAAA,GAAkB,MAAA,QAAA,CAAM,UAAU,EAAE,CAAC,CAAC,QAAQ,KAAK;EACzD,MAAM,qBAAA,GAAoB,MAAA,QAAA,CAAM,UAAU,UAAU,SAAS,EAAE,CAAC,CAC7D,IAAI,GAAG,KAAK,CAAC,CACb,QAAQ,KAAK;EAEhB,KAAK,MAAM,YAAY,WAAW;GAChC,MAAM,QAAsD,CAAC;GAC7D,MAAM,0BAAU,IAAI,IAA6B;GACjD,MAAM,gCAAgB,IAAI,IAA0C;GACpE,MAAM,iCAAiB,IAAI,IAGzB;GAEF,UAAU,SAAS,KAAK,aAAa;IACnC,MAAM,YAAY,uBAAuB,SAAS,GAAG,CAAC;IACtD,UAAU,KAAK,iBAAiB;IAEhC,KAAK,MAAM,SAAS,WAAW;KAC7B,MAAM,UAAU,eAAe,IAAI,MAAM,EAAE;KAC3C,IAAI,SACF,QAAQ,KAAK,KAAK,QAAQ;UAE1B,eAAe,IAAI,MAAM,IAAI;MAAE;MAAO,MAAM,CAAC,QAAQ;KAAE,CAAC;IAE5D;IAEA,MAAM,2BAAW,IAAI,IAAY;IACjC,MAAM,UAAmD,CAAC;IAC1D,IAAI,cAAc;IAElB,KAAK,MAAM,SAAS,WAAW;KAC7B,IAAI,MAAiC,QAAQ,IAAI,MAAM,EAAE;KAEzD,IAAI,QAAQ,KAAA,KAAa,OAAO,wBAAwB,SAAS,IAAI,GAAG,GACtE,MAAM,qBAAqB,UAAU,oBAAoB;KAG3D,IAAI,QAAQ,MAAM;MAChB,eAAe;MACf;KACF;KAEA,SAAS,IAAI,GAAG;KAChB,QAAQ,KAAK;MAAE;MAAO;KAAI,CAAC;KAC3B,IAAI,CAAC,cAAc,IAAI,MAAM,EAAE,GAC7B,cAAc,IAAI,MAAM,oBAAI,IAAI,IAAI,CAAC;KAEvC,cAAc,IAAI,MAAM,EAAE,CAAC,CAAE,IAAI,UAAU,GAAG;KAC9C,QAAQ,IAAI,MAAM,IAAI,GAAG;IAC3B;IAEA,MAAM,OAAO;KAAE;KAAS;IAAY;GACtC,CAAC;GAED,MAAM,WAAwC,CAAC;GAE/C,KAAK,MAAM,EAAE,OAAO,UAAU,eAAe,OAAO,GAAG;IACrD,IAAI,CAAC,gBAAgB,KAAK,GACxB;IAGF,MAAM,eAAe,KAAK;IAC1B,MAAM,cAAc,KAAK,KAAK,SAAS;IACvC,MAAM,OAAO,cAAc,IAAI,MAAM,EAAE;IACvC,MAAM,iBAAA,GAAgB,MAAA,QAAA,CAAM,MAAM,KAAK,CAAC,CAAC,SAAS,eAAe;IACjE,MAAM,gBAAA,GAAe,MAAA,QAAA,CAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,iBAAiB;IAC/D,IAAI,MAA0E;IAE9E,MAAM,iBAAiB;KACrB,IAAI,CAAC,KACH;KAEF,MAAM,YAAY,IAAI,gBAAgB;KACtC,MAAM,UAAU,IAAI,cAAc;KAClC,MAAM,YAAY,CAAC,aAAa;KAChC,MAAM,UAAU,CAAC,WAAW;KAC5B,IAAI,eAAe;KACnB,KAAK,IAAI,WAAW,IAAI,eAAe,YAAY,IAAI,aAAa,YAAY,GAC9E,KAAK,MAAM,UAAU,UAAU,EAAE,eAAe,KAAK,GAAG;MACtD,eAAe;MACf;KACF;KAEF,SAAS,KAAK;MACZ;MACA,eAAe,IAAI;MACnB,aAAa,IAAI;MACjB,KAAK,IAAI;MACT;MACA;MACA,SAAS,aAAa,UAAU,SAAS,YAAY,UAAU,UAAU,QAAQ;MACjF;KACF,CAAC;KACD,MAAM;IACR;IAEA,KAAK,IAAI,WAAW,cAAc,YAAY,aAAa,YAAY,GAAG;KACxE,MAAM,MAAM,MAAM,IAAI,QAAQ;KAE9B,IAAI,QAAQ,KAAA,GAAW;MACrB,SAAS;MACT;KACF;KAEA,IAAI,OAAO,IAAI,QAAQ,OAAO,IAAI,gBAAgB,WAAW,GAC3D,IAAI,cAAc;UACb;MACL,SAAS;MACT,MAAM;OAAE,eAAe;OAAU,aAAa;OAAU;MAAI;KAC9D;IACF;IAEA,SAAS;GACX;GAEA,sBAAsB,SAAS,MAAM;IAAE;IAAO;GAAS;EACzD;EAEA,OAAO;GAAE;GAAwB;EAAsB;CACzD,GAAG;EAAC;EAAW;EAAW;EAAc;CAAoB,CAAC;CAI7D,MAAM,sBAAA,GAAqBI,MAAAA,YAAAA,EACxB,GAAoB,WAA2B;EAC9C,IAAI,CAAC,qBACH;EAEF,oBAAoB;GAClB,cAAc,EAAE;GAChB,cAAc,IAAA,GAAG,MAAA,QAAA,CAAM,OAAO,GAAG,CAAC,CAAC,OAAO,YAAY,EAAE;GACxD,YAAY,OAAO;EACrB,CAAC;CACH,GACA,CAAC,mBAAmB,CACtB;CAEA,MAAM,WAAWG,+BAAAA,oBAAoC;EACnD,SAAS;EACT;EACA,cAAc,SAAS;GACrB,cAAc;IAAE,GAAG;IAAM,YAAY,mBAAmB;GAAQ,CAAC;EACnE;EACA;EACA;EACA;EACA,sBAAsB,QAAwB,iBAAoC;GAChF,mBAAmB,UAAU,OAAO;GACpC,OAAOC,kCAAAA,uBAAuB;IAAE;IAAc,WAAW,OAAO;GAAI,CAAC;EACvE;EACA,gBAAgB,sBAAsB,qBAAqB,KAAA;CAC7D,CAAC;CAED,MAAM,sBAAA,GAAqBN,MAAAA,OAAAA,CAAoC,KAAA,CAAS;CAExE,MAAM,oBAAoB,yBAAyB,CAAC,CAAC,wBAAwB,SAAS;CAEtF,MAAM,qBAAA,GAAoBF,MAAAA,QAAAA,OAAcS,qCAAAA,wBAAwB,SAAS,GAAG,CAAC,SAAS,CAAC;CAEvF,MAAM,iBAAiBC,6BAAAA,kBAAkB;EACvC,SAAS,sBAAsB,SAAS;EACxC,YAAY,YAAY,UAAU,UAAU;GAC1C,IAAI,CAAC,eACH;GAEF,MAAM,WAAW,UAAU;GAC3B,MAAM,SAAS,UAAU;GACzB,IAAI,YAAY,QACd,cAAc;IACZ,aAAA,GAAY,MAAA,QAAA,CAAM,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,qBAAqB;IACvE,WAAA,GAAU,MAAA,QAAA,CAAM,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,qBAAqB;IACjE,YAAY,kBAAkB,IAAI,KAAK,KAAK;GAC9C,CAAC;EAEL;CACF,CAAC;CAED,MAAM,YAAY,UAAU,KAAK,KAAK,aAAa;EACjD,MAAM,KAAA,GAAI,MAAA,QAAA,CAAM,GAAG;EACnB,MAAM,UAAU,oBAAoB,SAAS,EAAE,IAAI,CAAc;EACjE,MAAM,QAAQ,EAAE,QAAA,GAAO,MAAA,QAAA,CAAM,GAAG,KAAK,KAAK;EAE1C,OACE,iBAAA,GAAA,MAAA,cAAA,CAACC,cAAAA,KAAD;GACE,GAAI,UAAU,4BAA4B;GAC1C,KAAK;GACL,KAAK;IAAE;IAAS;GAAM;GACtB,MAAM,SAAS;IACb,aAAa,QAAQ,YAAY;GACnC;EAMG,GAJH,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAI,UAAU,mCAAmC;GACpDC,UAAAA,oBAAAA,WAAW;IAAE,MAAM;IAAG,QAAQ,IAAI,UAAU,MAAM;IAAG,QAAQ;GAAc,CAAC;EACzE,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAI,UAAU,kCAAkC;GAAI,UAAA,EAAE,KAAK;EAAQ,CAAA,CACtE;CAET,CAAC;CAED,MAAM,YAAA,GAAWV,MAAAA,OAAAA,CAA8B,CAAC,CAAC;CAEjD,MAAM,4BAAA,GAA2BE,MAAAA,YAAAA,EAAa,OAAwB,kBAA0B;EAC9F,OAAOS,kCAAAA,sBAAsB,SAAS,QAAQ,kBAAkB,CAAC,GAAG,MAAM,OAAO;CACnF,GAAG,CAAC,CAAC;CAEL,MAAM,qBACJ,OACA,eACA,aACG;EACH,MAAM,MAAM,MAAM;EAClB,IAAI,oBAAoB;EACxB,IAAI,eAAe;EAEnB,IAAI,QAAQ,cACV,eAAe,KAAK,IAAI,WAAW,GAAG,UAAU,SAAS,CAAC;OACrD,IAAI,QAAQ,aACjB,eAAe,KAAK,IAAI,WAAW,GAAG,CAAC;OAClC,IAAI,QAAQ,aACjB,oBAAoB,KAAK,IAAI,gBAAgB,GAAG,UAAU,SAAS,CAAC;OAC/D,IAAI,QAAQ,WACjB,oBAAoB,KAAK,IAAI,gBAAgB,GAAG,CAAC;OAEjD;EAGF,MAAM,eAAe;EACrB,SAAS,QAAQ,kBAAkB,GAAG,aAAa,EAAE,MAAM;CAC7D;CAEA,MAAM,mBAAmB,MAAM;CAE/B,MAAM,mBAAmB,EACvB,KACA,OACA,eACA,OACA,SACA,UACA,iBACA,oBAUI;EACJ,MAAM,cAAc,YAAY,iBAAiB,KAAK;EACtD,MAAM,sBAAsB,YAAY,oBAAoB,MAAM;EAElE,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,MAAM,GAAG;EAGhC,MAAM,WADJ,SAAS,KAAK,MAAM,KAAK,SAAS,OAAO,MAAM,KAAK,SAAS,OAAO,MAAM,IAC1C,SAAS,SAAS,GAAG,KAAK,IAAI,SAAA,CAAU,OAAO,YAAY;EAE7F,MAAM,kBACJ,mBAAmB,YAAY,KAAA,GAAI,MAAA,QAAA,CAAM,MAAM,KAAK,CAAC,CAAC,OAAO,YAAY,CAAC;EAC5E,MAAM,gBAAgB,iBAAiB,YAAY,IAAI,OAAO;EAE9D,MAAM,cAAc,cAChB,MAAM,qBAAqB;GACzB,OAAO,MAAM,SAAS,MAAM;GAC5B;GACA,SAAS,MAAM,WAAW;GAC1B,cAAc;EAChB,CAAC,IACD;EAEJ,MAAM,kBAAkB,UAA2B;GACjD,GAAG,UAAU,gCAAgC;GAC7C,aAAa;GACb,eAAgB,uBAAuB,YAAY,iBAAiB,QAAS,KAAA;GAC7E,gBAAgB,MACd,YAAY,kBAAkB;IAC5B;IACA;IACA,OAAO,SAAS,QAAQ,kBAAkB,CAAC;IAC3C,MAAM;IACN,cAAc;GAChB,CAAC;EACL;EAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACF,cAAAA,KAAD;GAEE,GAAI,UAAU,kCAAkC,EAC9C,OAAO;IAAE,UAAU;IAAY,QAAQ;IAAG,GAAG;GAAM,EACrD,CAAC;GACD,QAAQ,cAAc,EAAE,iBAAiB,YAAY,MAAM,IAAI,KAAA;GAC/D,iBAAe,uBAAuB,KAAA;GANxC,UAAA;IAQE,iBAAA,GAAA,kBAAA,IAAA,CAACG,sBAAAA,eAAD;KACS;KACP,QAAA;KACA,UAAA;KACA,MAAK;KACI;KACT,KAAK;KACL,WAAW,SAAS,iBAAiB,KAAK;KAC1C,YAAY;KACK;KACJ;KACL;KACF;KACN,SACE,gBACK,MAAM;MACL,IAAI,CAAC,YAAY,YAAY,GAC3B,aAAa,OAAO,CAAC;KAEzB,IACA,KAAA;KAEN,OAAO;MAAE,OAAO;MAAQ,QAAQ;KAAO;IACxC,CAAA;IACA,eAAe,mBAAmB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,GAAI,eAAe,OAAO,EAAI,CAAA;IACrE,eAAe,iBAAiB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,GAAI,eAAe,KAAK,EAAI,CAAA;GAC/D;EAjCE,GAAA,GAiCF;CAET;CAEA,MAAM,OAAO,iBAAiB,KAAK,UAAU,kBAAkB;EAC7D,IAAI,CAAC,SAAS,QAAQ,gBACpB,SAAS,QAAQ,iBAAiB,CAAC;EAGrC,SAAS,QAAQ,cAAc,CAAC,SAAS,UAAU;EAEnD,MAAM,YAAY,OAAO,SAAS,EAAE;EACpC,MAAM,aAAa,SAAS;EAE5B,MAAM,YAAY,UAAU;EAC5B,MAAM,aAAgC,CAAC;EACvC,MAAM,YAA+B,CAAC;EAEtC,MAAM,QAAQ,UAAU,KAAK,KAAK,aAAa;GAC7C,MAAM,KAAA,GAAI,MAAA,QAAA,CAAM,GAAG;GACnB,MAAM,UAAU,IAAI,eAAe,WAAW,CAAC,CAAC,SAAS,EAAE,IAAI,CAAc;GAC7E,MAAM,eACJ,eAAe,QACf,OAAO,eAAe,YACtB,SAAS,cACR,WAA8B,QAAQ,OACtC,WAA8B,eAAe,SAAS;GACzD,MAAM,iBAAiB,eAAe,eAAe,UAAU,SAAS;GACxE,MAAM,YAAY,uBAAuB,SAAS,GAAG,GAAG,QAAQ,CAAC;GACjE,MAAM,SAAS,sBAAsB,SAAS,GAAG,EAAE,MAAM;GACzD,MAAM,gBAAgB,QAAQ,WAAW,CAAC;GAC1C,MAAM,oBAAoB,QAAQ,eAAe;GACjD,MAAM,cAAc,kBAAkB,KAAK,aAAa;GACxD,MAAM,iBAAkB,WAAW,YAAa;GAChD,MAAM,kBAAkB,MAAM;GAE9B,MAAM,kBAAkB,oBAAoB,KAAK,SAAS;GAE1D,cAAc,SAAS,EAAE,OAAO,UAAU;IACxC,IAAI,gBAAgB,KAAK,GACvB;IAGF,MAAM,WAAW,kBACb,wBAAwB,IAAI,KAAK,qBAAqB,WACtD,QAAQ,MAAM,iBAAiB;IACnC,MAAM,cAAc,kBAChB,wBAAwB,qBAAqB,WAC7C,QAAQ,iBAAiB;IAE7B,WAAW,KACT,gBAAgB;KACd,KAAK,GAAG,MAAM,GAAG,GAAG;KACpB;KACA;KACA,iBAAiB;KACjB,eAAe;KACf,OAAO;MACL,KAAK;MACL,MAAM,QAAQ,eAAe;MAC7B,OAAO,QAAQ,gBAAgB;MAC/B,QAAQ;KACV;IACF,CAAC,CACH;GACF,CAAC;GAED,IAAI,oBAAoB,KAAK,SAAS,UACpC,UAAU,KACR,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;IAEE,QAAQ;IACR,iBAAiB;IACX;IACE;IACS;IACJ;IACC;IACd,OAAO;KACL,UAAU;KACV,QAAQ;KACR,MAAM,QAAQ,eAAe;KAC7B,OAAO,QAAQ,gBAAgB;KAC/B,QAAQ;KACR,QAAQ;IACV;IACA,GAAI;IACJ,GAAI;GACL,GAlBM,QAAQ,SAAS,GAAG,GAAG,KAkB7B,CACH;GAGF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,gBAAD;IAEE,MAAM,SAAS;KACb,IAAI,MAAM;MACR,IAAI,CAAC,SAAS,QAAQ,gBACpB,SAAS,QAAQ,iBAAiB,CAAC;MAErC,SAAS,QAAQ,cAAc,CAAC,YAAY;KAC9C;IACF;IACA,GAAI,UAAU,wBAAwB;IACtC,cAAY,GAAG,SAAS,MAAM,GAAG,EAAE,OAAO,cAAc;IACxD,wBAAsB,sBAAsB,SAAS,WAAW,WAAW,KAAA;IAC3E,wBAAsB,sBAAsB,SAAS,WAAW,YAAY,KAAA;IAC5E,KAAK;KACH;KACA,eAAe;KACf,iBAAiB;KACjB,QAAQ,SAAS;IACnB;IACA,UAAU,SAAS,WAAW,KAAK,cAAc,IAAI;IACrD,SACE,SAAS,WACL,KAAA,KACC,MAAM,aAAa;KAAE,MAAM;KAAK,aAAa;KAAG,YAAY,SAAS;IAAG,CAAC;IAEhF,WACE,SAAS,WAAW,KAAA,KAAa,MAAM,kBAAkB,GAAG,eAAe,QAAQ;IAErF,eACE,sBAAsB,SAAS,YAC1B,MACC,eAAe,sBACb,GACA,UACA,SACF,IACF,KAAA;IAEN,YAAY,oBAAoB,MAAM,EAAE,eAAe,IAAI,KAAA;GAC5D,GAvCM,GAuCN;EAEL,CAAC;EAID,CAFyB,sBAAsB,SAAS,GAAG,EAAE,YAAY,CAAC,EAAA,CAEzD,SAAS,YAAY;GACpC,MAAM,qBAAsB,QAAQ,gBAAgB,YAAa;GACjE,MAAM,uBACF,QAAQ,cAAc,QAAQ,gBAAgB,KAAK,YAAa;GACpE,MAAM,aAAa,QAAQ,gBAAgB,SAAS;GACpD,MAAM,WAAW,aACb,wBAAwB,QAAQ,IAAI,KAAK,qBAAqB,WAC9D,QAAQ,QAAQ,MAAM,iBAAiB;GAC3C,MAAM,cAAc,aAChB,wBAAwB,qBAAqB,WAC7C,QAAQ,iBAAiB;GAE7B,WAAW,KACT,gBAAgB;IACd,KAAK,GAAG,QAAQ,MAAM,GAAG,WAAW,QAAQ;IAC5C,OAAO,QAAQ;IACf;IACA,SAAS,QAAQ;IACjB,UAAU;KAAE,cAAc,QAAQ;KAAW,YAAY,QAAQ;IAAQ;IACzE,iBACE,CAAC,QAAQ,aAAa,QAAQ,YAAY,WAAW,QAAQ,YAAY;IAC3E,eACE,CAAC,QAAQ,WAAW,QAAQ,YAAY,SAAS,QAAQ,YAAY;IACvE,OAAO;KACL,KAAK;KACL,MAAM,QAAQ,mBAAmB;KACjC,OAAO,QAAQ,oBAAoB;KACnC,QAAQ;IACV;GACF,CAAC,CACH;EACF,CAAC;EAED,MAAM,YAAY,YAAY,iBAAiB,iBAAiB,KAAA;EAChE,MAAM,eAAe,WAAW,aAAa,WAAW,WAAW,aAAa;EAEhF,MAAM,YACJ,cAAc,KAAA,IACZ,cAAc,OACZ,iBAAA,GAAA,kBAAA,IAAA,CAACL,cAAAA,KAAD;GACE,GAAI,UAAU,+BAA+B;GAC7C,KAAK,EAAE,kBAAkB,UAAU,SAAS;GAE3C,UAAA,gBACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IACE,OACE,UAAU,QAAQ,IACd,EACE,WAAW,oBAAoB,UAAU,QAAQ,EAAE,0DACrD,IACA,KAAA;IAGL,UAAA,mBAAmB,iBAAiB,UAAU,KAAK,IAAI,UAAU,MAAM;GACpE,CAAA;EAEL,CAAA,IAEL,iBAAA,GAAA,kBAAA,IAAA,CAACA,cAAAA,KAAD,EAAK,GAAI,UAAU,oCAAoC,EAAI,CAAA,IAE3D;EAEN,OACE,iBAAA,GAAA,MAAA,cAAA,CAAC,OAAD;GAAK,GAAI,UAAU,uBAAuB;GAAG,KAAK,SAAS;EA0CtD,GAzCF,WACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GACE,GAAI,UAAU,iCAAiC;GAC/C,mBAAiB,aAAa,KAAA;GAE7B,UAAA,sBAAsB,oBAAoB,QAAQ,IAAI,SAAS;EAC7D,CAAA,GACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GACE,GAAI,UAAU,4BAA4B;GAC1C,YACE,oBACK,MAAM;IACL,MAAM,WAAW,yBAAyB,GAAG,aAAa;IAC1D,IAAI,aAAa,QAAQ,UAAU,WACjC,SAAS,eAAe,GAAG;KACzB,KAAK,UAAU;KACf,YAAY,SAAS;IACvB,CAAC;GAEL,IACA,KAAA;GAEN,aAAa,mBAAmB,SAAS,kBAAkB,KAAA;GAC3D,QACE,oBACK,MAAM;IACL,MAAM,WAAW,yBAAyB,GAAG,aAAa;IAC1D,IAAI,aAAa,QAAQ,UAAU,WACjC,SAAS,WAAW,GAAG;KACrB,KAAK,UAAU;KACf,YAAY,SAAS;IACvB,CAAC;GAEL,IACA,KAAA;GA3BR,UAAA;IA8BG;IACA;IACA;GACE;EACF,CAAA,CAAA;CAET,CAAC;CAED,MAAM,UACJ,iBAAA,GAAA,kBAAA,KAAA,CAACA,cAAAA,KAAD;EACE,KAAK,CACH;GACE,QAAQ,SAAS;GACjB,iBAAiB,eAAe;GAChC,qBAAqB,YAAY,cAAc,SAAS,iBAAiB;GACzE,UAAU,YAAY;EACxB,GACA,GACF;EACA,GAAI,UAAU,oBAAoB;EAClC,GAAI;EAXN,UAAA,CAaG,cACC,iBAAA,GAAA,kBAAA,IAAA,CAACM,2BAAAA,oBAAD;GACE,MAAK;GACL,oBAAoB;IAClB,gBAAgBC,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,QAAQ,OAAO,CAAC;IAC9E,YAAYA,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,QAAQ,OAAO,CAAC;IACrE,aAAa;KACX,4BAA4B;MAC1B,aAAA,GAAY,MAAA,QAAA,CAAM,CAAC,CAAC,OAAO,YAAY,CAAC;KAC1C,CAAC;KACD,OAAOA,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,CAAC;IAC7B;GACF;GACA,SAAS,EACP,iBAAiB;IACf;IACA,YAAA,GAAW,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,MAAM;IACjC,aAAA,GAAY,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,OAAO;IACnC,eAAe,SACb,eAAeA,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;IAC7E,gBAAgB,UACd,eAAeA,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;IAC/E,GAAG;GACL,EACF;GACQ;GACM;GACA;GACQ;GACJ;GACC;GACnB,iBAAiB;IAAE,OAAO;KAAC;KAAO;KAAQ;IAAO;IAAY,GAAG;GAAgB;GAChE;EACjB,CAAA,GAGH,iBAAA,GAAA,kBAAA,IAAA,CAACP,cAAAA,KAAD;GAAK,GAAI,UAAU,wBAAwB;GACzC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACQ,cAAAA,YAAD;IACE,YAAW;IACX,eAAe;IACf,GAAI;IACJ,GAAI,UAAU,gCAAgC;KAC5C,WAAW,iBAAiB;KAC5B,OAAO,iBAAiB;IAC1B,CAAC;IACD,aAAa;IAEb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,GAAI,UAAU,yBAAyB;KAA5C,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,GAAI,UAAU,gCAAgC;MAAnD,UAAA,CACE,iBAAA,GAAA,MAAA,cAAA,CAAC,OAAD;OACE,GAAI,UAAU,0BAA0B;OACxC,KAAI;OACJ,KAAK;OACL,OACE,YACI;QACE,WACE;QACF,UACE;OACJ,IACA,KAAA;MAIH,GADFC,eAAAA,SAAS,aAAa,MAAM,CAC1B,GACJ,SACE;KAEJ,CAAA,GAAA,IACE;;GACK,CAAA;EACT,CAAA,CACF;;CAGP,IAAI,uBACF,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,YAAY,UAAb;EAAsB,OAAO,SAAS;EAAmB,UAAA;CAA8B,CAAA;CAGhG,OAAO;AACT,CAAC;AAED,mBAAmB,cAAc;AACjC,mBAAmB,UAAUC,kCAAAA;AAC7B,mBAAmB,eAAe"}
1
+ {"version":3,"file":"ResourcesMonthView.cjs","names":["createVarsResolver","getRadius","rem","factory","useProps","useStyles","useResolvedStylesApi","useMantineTheme","useDatesContext","useMemo","getOrderedResources","useRef","useMergedRef","useCallback","expandRecurringEvents","useDayGridEventResize","useDragDropHandlers","calculateMonthDropDate","getGroupToResourceIdMap","useSlotDragSelect","Box","formatDate","getIndexFromDragPoint","ScheduleEvent","MoreEvents","UnstyledButton","ScheduleHeaderBase","toDateString","ScrollArea","getLabel","DragContext","classes"],"sources":["../../../src/components/ResourcesMonthView/ResourcesMonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useMemo, useRef } 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 UnstyledButton,\n useMantineTheme,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useIsomorphicEffect, useMergedRef } from '@mantine/hooks';\nimport { useDayGridEventResize } from '../../hooks/use-day-grid-event-resize';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayOfWeek,\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 calculateMonthDropDate,\n expandRecurringEvents,\n formatDate,\n getGroupToResourceIdMap,\n getIndexFromDragPoint,\n getOrderedResources,\n toDateString,\n} from '../../utils';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\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 classes from './ResourcesMonthView.module.css';\n\nexport type ResourcesMonthViewStylesNames =\n | 'resourcesMonthView'\n | 'resourcesMonthViewRoot'\n | 'resourcesMonthViewScrollArea'\n | 'resourcesMonthViewDayLabelsRow'\n | 'resourcesMonthViewCorner'\n | 'resourcesMonthViewDayLabel'\n | 'resourcesMonthViewDayLabelWeekday'\n | 'resourcesMonthViewDayLabelNumber'\n | 'resourcesMonthViewRow'\n | 'resourcesMonthViewResourceLabel'\n | 'resourcesMonthViewRowSlots'\n | 'resourcesMonthViewCell'\n | 'resourcesMonthViewEventWrapper'\n | 'resourcesMonthViewResizeHandle'\n | 'resourcesMonthViewInner'\n | 'resourcesMonthViewGroupColumn'\n | 'resourcesMonthViewGroupColumnEmpty'\n | MoreEventsStylesNames\n | CombinedScheduleHeaderStylesNames;\n\nexport type ResourcesMonthViewCssVariables = {\n resourcesMonthView:\n | '--resources-month-view-radius'\n | '--resources-month-view-day-width'\n | '--resources-month-view-row-height'\n | '--resources-month-view-group-label-width';\n};\n\nexport interface ResourcesMonthViewProps\n extends BoxProps, StylesApiProps<ResourcesMonthViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Date 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 /** Locale passed down to dayjs */\n locale?: string;\n\n /** `dayjs` format for weekdays in day column headers @default 'dd' */\n weekdayFormat?: DateLabelFormat;\n\n /** Indices of weekend days */\n weekendDays?: DayOfWeek[];\n\n /** If set to false, weekend days are hidden @default true */\n withWeekendDays?: boolean;\n\n /** Date to scroll to on initial render, in `YYYY-MM-DD` format */\n startScrollDate?: string;\n\n /** Called when a cell is clicked, includes resourceId */\n onDayClick?: (data: {\n date: DateStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\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, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Props passed down to `MonthYearSelect` component */\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 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 /** Events to display */\n events?: ScheduleEventData[];\n\n /** Width of each day column @default 40px */\n dayWidth?: React.CSSProperties['width'];\n\n /** Height of each resource row @default 48px */\n rowHeight?: React.CSSProperties['height'];\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, 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 /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** If true, events can be resized by dragging their start and end edges, resizing snaps to whole days @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 /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\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, includes resourceId */\n onSlotDragEnd?: (data: {\n rangeStart: DateTimeStringValue;\n rangeEnd: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Interaction mode @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 */\n onExternalEventDrop?: (data: {\n dataTransfer: DataTransfer;\n dropDateTime: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Maximum number of events visible per cell before \"+more\" indicator @default 2 */\n maxEventsPerTimeSlot?: number;\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n /** Max number of generated recurring instances @default 2000 */\n recurrenceExpansionLimit?: number;\n}\n\nexport type ResourcesMonthViewFactory = Factory<{\n props: ResourcesMonthViewProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesMonthViewStylesNames;\n vars: ResourcesMonthViewCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<ResourcesMonthViewFactory>(\n (_theme, { radius, dayWidth, rowHeight, groupLabelWidth }) => ({\n resourcesMonthView: {\n '--resources-month-view-radius': radius ? getRadius(radius) : undefined,\n '--resources-month-view-day-width': rem(dayWidth),\n '--resources-month-view-row-height': rem(rowHeight),\n '--resources-month-view-group-label-width': rem(groupLabelWidth),\n },\n })\n);\n\nconst defaultProps = {\n __staticSelector: 'ResourcesMonthView',\n highlightToday: true,\n withHeader: true,\n weekdayFormat: 'ddd',\n withWeekendDays: true,\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n withEventResize: false,\n mode: 'default',\n} satisfies Partial<ResourcesMonthViewProps>;\n\nfunction compareCellEvents(a: ScheduleEventData, b: ScheduleEventData): number {\n const aStart = dayjs(a.start);\n const bStart = dayjs(b.start);\n const aSpan = dayjs(a.end).startOf('day').diff(aStart.startOf('day'), 'day');\n const bSpan = dayjs(b.end).startOf('day').diff(bStart.startOf('day'), 'day');\n\n if (aSpan !== bSpan) {\n return bSpan - aSpan;\n }\n\n return aStart.valueOf() - bStart.valueOf();\n}\n\nfunction getFirstAvailableRow(usedRows: Set<number>, maxRows: number): number | null {\n for (let row = 0; row < maxRows; row += 1) {\n if (!usedRows.has(row)) {\n return row;\n }\n }\n\n return null;\n}\n\ninterface ResourcesMonthViewCellLayout {\n visible: { event: ScheduleEventData; row: number }[];\n hiddenCount: number;\n}\n\ninterface ResourcesMonthViewSegment {\n event: ScheduleEventData;\n startDayIndex: number;\n endDayIndex: number;\n row: number;\n clipStart: boolean;\n clipEnd: boolean;\n hanging: 'start' | 'end' | 'both' | 'none';\n\n /** True when any day the segment covers shows a \"+N more\" indicator (those days compress rows) */\n hiddenInSpan: boolean;\n}\n\ninterface ResourcesMonthViewResourceLayout {\n byDay: Record<string, ResourcesMonthViewCellLayout>;\n segments: ResourcesMonthViewSegment[];\n}\n\nfunction isMultiDayEvent(event: ScheduleEventData): boolean {\n return dayjs(event.end).startOf('day').isAfter(dayjs(event.start).startOf('day'));\n}\n\nexport const ResourcesMonthView = factory<ResourcesMonthViewFactory>((_props) => {\n const props = useProps('ResourcesMonthView', 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 resources,\n locale,\n weekdayFormat,\n weekendDays,\n withWeekendDays,\n startScrollDate,\n __staticSelector,\n onDayClick,\n highlightToday,\n radius,\n withHeader,\n monthYearSelectProps,\n onViewChange,\n todayControlProps,\n nextControlProps,\n previousControlProps,\n viewSelectProps,\n events,\n dayWidth,\n rowHeight,\n renderResourceLabel,\n groups,\n renderGroupLabel,\n groupLabelWidth,\n renderEventBody,\n renderEvent,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n withEventResize,\n onEventResize,\n canResizeEvent,\n canDropEvent,\n canDropExternalEvent,\n canResizeEventTo,\n preventEventOverlap,\n onEventPlacementRejected,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n labels,\n mode,\n scrollAreaProps,\n onExternalEventDrop,\n maxEventsPerTimeSlot: _maxEventsPerTimeSlot,\n moreEventsProps,\n recurrenceExpansionLimit,\n ...others\n } = props;\n\n const maxEventsPerTimeSlot = Math.min(10, Math.max(1, _maxEventsPerTimeSlot ?? 2));\n\n const getStyles = useStyles<ResourcesMonthViewFactory>({\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: 'resourcesMonthView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ResourcesMonthViewFactory>({\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 ctx = useDatesContext();\n const resolvedWeekendDays = ctx.getWeekendDays(weekendDays);\n const { orderedResources, groupRanges, resourceGroupMap } = useMemo(\n () => getOrderedResources(resources, groups),\n [resources, groups]\n );\n const hasGroups = groupRanges.length > 0;\n\n const monthDays = useMemo(() => {\n const start = dayjs(date).startOf('month');\n const daysCount = start.endOf('month').date();\n const weekendDayList = ctx.getWeekendDays(weekendDays);\n const days: string[] = [];\n for (let d = 1; d <= daysCount; d++) {\n const day = start.date(d);\n if (!withWeekendDays && weekendDayList.includes(day.day() as DayOfWeek)) {\n continue;\n }\n days.push(day.format('YYYY-MM-DD'));\n }\n return days;\n }, [date, withWeekendDays, weekendDays, ctx]);\n\n const viewportRef = useRef<HTMLDivElement>(null);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n const dayLabelRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n const resourceLabelRef = useRef<HTMLDivElement>(null);\n\n const scrollToDay = useCallback(\n (targetDate: string) => {\n if (!viewportRef.current) {\n return;\n }\n const targetIndex = monthDays.indexOf(targetDate);\n if (targetIndex < 0) {\n return;\n }\n const targetLabel = dayLabelRefs.current[targetIndex];\n if (!targetLabel) {\n return;\n }\n const labelRect = targetLabel.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n const labelWidth = resourceLabelRef.current?.getBoundingClientRect().width ?? 0;\n viewportRef.current.scrollTo({\n left: labelRect.left - viewportRect.left - labelWidth,\n top: 0,\n });\n },\n [monthDays]\n );\n\n useIsomorphicEffect(() => {\n if (startScrollDate) {\n scrollToDay(startScrollDate);\n }\n }, []);\n\n const expandedEvents = useMemo(\n () =>\n expandRecurringEvents({\n events,\n rangeStart: dayjs(date).startOf('month').toDate(),\n rangeEnd: dayjs(date).endOf('month').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n }),\n [events, date, recurrenceExpansionLimit]\n );\n\n const monthDaySet = useMemo(() => new Set(monthDays), [monthDays]);\n\n const eventResize = useDayGridEventResize({\n enabled: withEventResize,\n mode,\n onEventResize,\n canResizeEvent,\n events: expandedEvents,\n preventEventOverlap,\n canResizeEventTo,\n onEventPlacementRejected,\n });\n\n const { resizingEventId, previewStart, previewEnd } = eventResize;\n\n const layoutEvents = useMemo(() => {\n if (resizingEventId === null || previewStart === null || previewEnd === null) {\n return expandedEvents;\n }\n\n return expandedEvents.map((event) =>\n event.id === resizingEventId ? { ...event, start: previewStart, end: previewEnd } : event\n );\n }, [expandedEvents, resizingEventId, previewStart, previewEnd]);\n\n const { eventsByResourceAndDay, eventLayoutByResource } = useMemo(() => {\n const eventsByResourceAndDay: Record<string | number, Record<string, ScheduleEventData[]>> = {};\n for (const resource of resources) {\n eventsByResourceAndDay[resource.id] = {};\n for (const day of monthDays) {\n eventsByResourceAndDay[resource.id][day] = [];\n }\n }\n\n if (layoutEvents) {\n for (const event of layoutEvents) {\n if (event.resourceId === undefined || !(event.resourceId in eventsByResourceAndDay)) {\n continue;\n }\n\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n\n for (const day of monthDays) {\n const dayStart = dayjs(day).startOf('day');\n const dayEnd = dayjs(day).endOf('day');\n\n if (eventStart.isBefore(dayEnd) && eventEnd.isAfter(dayStart)) {\n eventsByResourceAndDay[event.resourceId][day].push(event);\n }\n }\n }\n }\n\n const eventLayoutByResource: Record<string | number, ResourcesMonthViewResourceLayout> = {};\n const monthRangeStart = dayjs(monthDays[0]).startOf('day');\n const monthEndExclusive = dayjs(monthDays[monthDays.length - 1])\n .add(1, 'day')\n .startOf('day');\n\n for (const resource of resources) {\n const byDay: Record<string, ResourcesMonthViewCellLayout> = {};\n const lastRow = new Map<string | number, number>();\n const rowByEventDay = new Map<string | number, Map<number, number>>();\n const overlapByEvent = new Map<\n string | number,\n { event: ScheduleEventData; days: number[] }\n >();\n\n monthDays.forEach((day, dayIndex) => {\n const dayEvents = eventsByResourceAndDay[resource.id][day];\n dayEvents.sort(compareCellEvents);\n\n for (const event of dayEvents) {\n const overlap = overlapByEvent.get(event.id);\n if (overlap) {\n overlap.days.push(dayIndex);\n } else {\n overlapByEvent.set(event.id, { event, days: [dayIndex] });\n }\n }\n\n const usedRows = new Set<number>();\n const visible: ResourcesMonthViewCellLayout['visible'] = [];\n let hiddenCount = 0;\n\n for (const event of dayEvents) {\n let row: number | null | undefined = lastRow.get(event.id);\n\n if (row === undefined || row >= maxEventsPerTimeSlot || usedRows.has(row)) {\n row = getFirstAvailableRow(usedRows, maxEventsPerTimeSlot);\n }\n\n if (row === null) {\n hiddenCount += 1;\n continue;\n }\n\n usedRows.add(row);\n visible.push({ event, row });\n if (!rowByEventDay.has(event.id)) {\n rowByEventDay.set(event.id, new Map());\n }\n rowByEventDay.get(event.id)!.set(dayIndex, row);\n lastRow.set(event.id, row);\n }\n\n byDay[day] = { visible, hiddenCount };\n });\n\n const segments: ResourcesMonthViewSegment[] = [];\n\n for (const { event, days } of overlapByEvent.values()) {\n if (!isMultiDayEvent(event)) {\n continue;\n }\n\n const firstOverlap = days[0];\n const lastOverlap = days[days.length - 1];\n const rows = rowByEventDay.get(event.id);\n const extendsBefore = dayjs(event.start).isBefore(monthRangeStart);\n const extendsAfter = dayjs(event.end).isAfter(monthEndExclusive);\n let run: { startDayIndex: number; endDayIndex: number; row: number } | null = null;\n\n const flushRun = () => {\n if (!run) {\n return;\n }\n const clipStart = run.startDayIndex > firstOverlap;\n const clipEnd = run.endDayIndex < lastOverlap;\n const hangStart = !clipStart && extendsBefore;\n const hangEnd = !clipEnd && extendsAfter;\n let hiddenInSpan = false;\n for (let dayIndex = run.startDayIndex; dayIndex <= run.endDayIndex; dayIndex += 1) {\n if ((byDay[monthDays[dayIndex]]?.hiddenCount ?? 0) > 0) {\n hiddenInSpan = true;\n break;\n }\n }\n segments.push({\n event,\n startDayIndex: run.startDayIndex,\n endDayIndex: run.endDayIndex,\n row: run.row,\n clipStart,\n clipEnd,\n hanging: hangStart && hangEnd ? 'both' : hangStart ? 'start' : hangEnd ? 'end' : 'none',\n hiddenInSpan,\n });\n run = null;\n };\n\n for (let dayIndex = firstOverlap; dayIndex <= lastOverlap; dayIndex += 1) {\n const row = rows?.get(dayIndex);\n\n if (row === undefined) {\n flushRun();\n continue;\n }\n\n if (run && run.row === row && run.endDayIndex === dayIndex - 1) {\n run.endDayIndex = dayIndex;\n } else {\n flushRun();\n run = { startDayIndex: dayIndex, endDayIndex: dayIndex, row };\n }\n }\n\n flushRun();\n }\n\n eventLayoutByResource[resource.id] = { byDay, segments };\n }\n\n return { eventsByResourceAndDay, eventLayoutByResource };\n }, [resources, monthDays, layoutEvents, maxEventsPerTimeSlot]);\n\n type DropTargetCell = { day: string; resourceId: string | number };\n\n const getExternalDropDateTime = useCallback(\n (target: DropTargetCell) => `${dayjs(target.day).format('YYYY-MM-DD')} 00:00:00`,\n []\n );\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, target: DropTargetCell) => {\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 dragDrop = useDragDropHandlers<DropTargetCell>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop: (data) => {\n onEventDrop?.({ ...data, resourceId: lastDropResourceId.current });\n },\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (target: DropTargetCell, draggedEvent: ScheduleEventData) => {\n lastDropResourceId.current = target.resourceId;\n return calculateMonthDropDate({ draggedEvent, targetDay: target.day });\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 lastDropResourceId = useRef<string | number | undefined>(undefined);\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\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 startDay = monthDays[startIndex];\n const endDay = monthDays[endIndex];\n if (startDay && endDay) {\n onSlotDragEnd({\n rangeStart: dayjs(startDay).startOf('day').format('YYYY-MM-DD HH:mm:ss'),\n rangeEnd: dayjs(endDay).endOf('day').format('YYYY-MM-DD HH:mm:ss'),\n resourceId: groupToResourceId.get(group) ?? group,\n });\n }\n },\n });\n\n const dayLabels = monthDays.map((day, dayIndex) => {\n const d = dayjs(day);\n const weekend = resolvedWeekendDays.includes(d.day() as DayOfWeek);\n const today = d.isSame(dayjs(), 'day') && highlightToday;\n\n return (\n <Box\n {...getStyles('resourcesMonthViewDayLabel')}\n key={day}\n mod={{ weekend, today }}\n ref={(node) => {\n dayLabelRefs.current[dayIndex] = node;\n }}\n >\n <span {...getStyles('resourcesMonthViewDayLabelWeekday')}>\n {formatDate({ date: d, locale: ctx.getLocale(locale), format: weekdayFormat })}\n </span>\n <span {...getStyles('resourcesMonthViewDayLabelNumber')}>{d.date()}</span>\n </Box>\n );\n });\n\n const cellsRef = useRef<HTMLButtonElement[][]>([]);\n\n const getDayIndexFromDragPoint = useCallback((event: React.DragEvent, resourceIndex: number) => {\n return getIndexFromDragPoint(cellsRef.current[resourceIndex] ?? [], event.clientX);\n }, []);\n\n const handleCellKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n resourceIndex: number,\n dayIndex: number\n ) => {\n const key = event.key;\n let nextResourceIndex = resourceIndex;\n let nextDayIndex = dayIndex;\n\n if (key === 'ArrowRight') {\n nextDayIndex = Math.min(dayIndex + 1, monthDays.length - 1);\n } else if (key === 'ArrowLeft') {\n nextDayIndex = Math.max(dayIndex - 1, 0);\n } else if (key === 'ArrowDown') {\n nextResourceIndex = Math.min(resourceIndex + 1, resources.length - 1);\n } else if (key === 'ArrowUp') {\n nextResourceIndex = Math.max(resourceIndex - 1, 0);\n } else {\n return;\n }\n\n event.preventDefault();\n cellsRef.current[nextResourceIndex]?.[nextDayIndex]?.focus();\n };\n\n const rowHeightPercent = 100 / maxEventsPerTimeSlot;\n\n const renderEventNode = ({\n key,\n event,\n resourceIndex,\n style,\n hanging,\n eventMod,\n withStartHandle,\n withEndHandle,\n }: {\n key: string;\n event: ScheduleEventData;\n resourceIndex: number;\n style: React.CSSProperties;\n hanging?: ResourcesMonthViewSegment['hanging'];\n eventMod?: Record<string, any>;\n withStartHandle: boolean;\n withEndHandle: boolean;\n }) => {\n const isResizable = eventResize.isResizableEvent(event);\n const isThisEventResizing = eventResize.resizingEventId === event.id;\n\n const eventEnd = dayjs(event.end);\n const endsAtMidnight =\n eventEnd.hour() === 0 && eventEnd.minute() === 0 && eventEnd.second() === 0;\n const lastDay = (endsAtMidnight ? eventEnd.subtract(1, 'day') : eventEnd).format('YYYY-MM-DD');\n\n const showStartHandle =\n withStartHandle && monthDaySet.has(dayjs(event.start).format('YYYY-MM-DD'));\n const showEndHandle = withEndHandle && monthDaySet.has(lastDay);\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 getHandleProps = (edge: 'start' | 'end') => ({\n ...getStyles('resourcesMonthViewResizeHandle'),\n 'data-edge': edge,\n 'data-active': (isThisEventResizing && eventResize.resizingEdge === edge) || undefined,\n onPointerDown: (e: React.PointerEvent) =>\n eventResize.handleResizeStart({\n event,\n edge,\n cells: cellsRef.current[resourceIndex] ?? [],\n days: monthDays,\n pointerEvent: e,\n }),\n });\n\n return (\n <Box\n key={key}\n {...getStyles('resourcesMonthViewEventWrapper', {\n style: { position: 'absolute', zIndex: 3, ...style },\n })}\n __vars={eventColors ? { '--event-color': eventColors.color } : undefined}\n data-resizing={isThisEventResizing || undefined}\n >\n <ScheduleEvent\n event={event}\n nowrap\n autoSize\n size=\"sm\"\n hanging={hanging}\n mod={[eventMod, { invalid: isThisEventResizing && !eventResize.resizeValid }]}\n draggable={dragDrop.isDraggableEvent(event)}\n isResizing={isThisEventResizing}\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%' }}\n />\n {isResizable && showStartHandle && <div {...getHandleProps('start')} />}\n {isResizable && showEndHandle && <div {...getHandleProps('end')} />}\n </Box>\n );\n };\n\n const rows = orderedResources.map((resource, resourceIndex) => {\n if (!cellsRef.current[resourceIndex]) {\n cellsRef.current[resourceIndex] = [];\n }\n\n cellsRef.current[resourceIndex].length = monthDays.length;\n\n const slotGroup = String(resource.id);\n const dropTarget = dragDrop.dropTarget;\n\n const totalDays = monthDays.length;\n const eventNodes: React.ReactNode[] = [];\n const moreNodes: React.ReactNode[] = [];\n\n const cells = monthDays.map((day, dayIndex) => {\n const d = dayjs(day);\n const weekend = ctx.getWeekendDays(weekendDays).includes(d.day() as DayOfWeek);\n const isDropTarget =\n dropTarget !== null &&\n typeof dropTarget === 'object' &&\n 'day' in dropTarget &&\n (dropTarget as DropTargetCell).day === day &&\n (dropTarget as DropTargetCell).resourceId === resource.id;\n const isDragSelected = slotDragSelect.isSlotSelected(dayIndex, slotGroup);\n const dayEvents = eventsByResourceAndDay[resource.id]?.[day] || [];\n const layout = eventLayoutByResource[resource.id]?.byDay[day];\n const visibleEvents = layout?.visible ?? [];\n const hiddenEventsCount = layout?.hiddenCount ?? 0;\n const isFirstCell = resourceIndex === 0 && dayIndex === 0;\n const dayLeftPercent = (dayIndex / totalDays) * 100;\n const dayWidthPercent = 100 / totalDays;\n\n const hasHiddenEvents = hiddenEventsCount > 0 && mode !== 'static';\n\n visibleEvents.forEach(({ event, row }) => {\n if (isMultiDayEvent(event)) {\n return;\n }\n\n const topValue = hasHiddenEvents\n ? `calc((100% - 18px) * ${row} / ${maxEventsPerTimeSlot} + 1px)`\n : `calc(${row * rowHeightPercent}% + 1px)`;\n const heightValue = hasHiddenEvents\n ? `calc((100% - 18px) / ${maxEventsPerTimeSlot} - 2px)`\n : `calc(${rowHeightPercent}% - 2px)`;\n\n eventNodes.push(\n renderEventNode({\n key: `${event.id}-${day}`,\n event,\n resourceIndex,\n withStartHandle: true,\n withEndHandle: true,\n style: {\n top: topValue,\n left: `calc(${dayLeftPercent}% + 1px)`,\n width: `calc(${dayWidthPercent}% - 2px)`,\n height: heightValue,\n },\n })\n );\n });\n\n if (hiddenEventsCount > 0 && mode !== 'static') {\n moreNodes.push(\n <MoreEvents\n key={`more-${resource.id}-${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 bottom: 1,\n left: `calc(${dayLeftPercent}% + 1px)`,\n width: `calc(${dayWidthPercent}% - 2px)`,\n height: 18,\n zIndex: 4,\n }}\n {...stylesApiProps}\n {...moreEventsProps}\n />\n );\n }\n\n return (\n <UnstyledButton\n key={day}\n ref={(node) => {\n if (node) {\n if (!cellsRef.current[resourceIndex]) {\n cellsRef.current[resourceIndex] = [];\n }\n cellsRef.current[resourceIndex][dayIndex] = node;\n }\n }}\n {...getStyles('resourcesMonthViewCell')}\n aria-label={`${resource.label} ${d.format('MMMM D, YYYY')}`}\n data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? dayIndex : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? slotGroup : undefined}\n mod={{\n weekend,\n 'drop-target': isDropTarget,\n 'drag-selected': isDragSelected,\n static: mode === 'static',\n }}\n tabIndex={mode === 'static' ? -1 : isFirstCell ? 0 : -1}\n onClick={\n mode === 'static'\n ? undefined\n : (e) => onDayClick?.({ date: day, nativeEvent: e, resourceId: resource.id })\n }\n onKeyDown={\n mode === 'static' ? undefined : (e) => handleCellKeyDown(e, resourceIndex, dayIndex)\n }\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) =>\n slotDragSelect.handleSlotPointerDown(\n e as React.PointerEvent<HTMLButtonElement>,\n dayIndex,\n slotGroup\n )\n : undefined\n }\n onDragOver={withDragHandlers ? (e) => e.preventDefault() : undefined}\n />\n );\n });\n\n const resourceSegments = eventLayoutByResource[resource.id]?.segments ?? [];\n\n resourceSegments.forEach((segment) => {\n const segmentLeftPercent = (segment.startDayIndex / totalDays) * 100;\n const segmentWidthPercent =\n ((segment.endDayIndex - segment.startDayIndex + 1) / totalDays) * 100;\n const compressed = segment.hiddenInSpan && mode !== 'static';\n const topValue = compressed\n ? `calc((100% - 18px) * ${segment.row} / ${maxEventsPerTimeSlot} + 1px)`\n : `calc(${segment.row * rowHeightPercent}% + 1px)`;\n const heightValue = compressed\n ? `calc((100% - 18px) / ${maxEventsPerTimeSlot} - 2px)`\n : `calc(${rowHeightPercent}% - 2px)`;\n\n eventNodes.push(\n renderEventNode({\n key: `${segment.event.id}-segment-${segment.startDayIndex}`,\n event: segment.event,\n resourceIndex,\n hanging: segment.hanging,\n eventMod: { 'clip-start': segment.clipStart, 'clip-end': segment.clipEnd },\n withStartHandle:\n !segment.clipStart && segment.hanging !== 'start' && segment.hanging !== 'both',\n withEndHandle:\n !segment.clipEnd && segment.hanging !== 'end' && segment.hanging !== 'both',\n style: {\n top: topValue,\n left: `calc(${segmentLeftPercent}% + 1px)`,\n width: `calc(${segmentWidthPercent}% - 2px)`,\n height: heightValue,\n },\n })\n );\n });\n\n const groupInfo = hasGroups ? resourceGroupMap[resourceIndex] : undefined;\n const isGroupStart = groupInfo?.position === 'first' || groupInfo?.position === 'only';\n\n const groupCell =\n groupInfo !== undefined ? (\n groupInfo !== null ? (\n <Box\n {...getStyles('resourcesMonthViewGroupColumn')}\n mod={{ 'group-position': groupInfo.position }}\n >\n {isGroupStart && (\n <span\n style={\n groupInfo.count > 1\n ? {\n transform: `translateY(calc((${groupInfo.count - 1} * (var(--resources-month-view-row-height) + 1px)) / 2))`,\n }\n : undefined\n }\n >\n {renderGroupLabel ? renderGroupLabel(groupInfo.group) : groupInfo.group.label}\n </span>\n )}\n </Box>\n ) : (\n <Box {...getStyles('resourcesMonthViewGroupColumnEmpty')} />\n )\n ) : null;\n\n return (\n <div {...getStyles('resourcesMonthViewRow')} key={resource.id}>\n {groupCell}\n <div\n {...getStyles('resourcesMonthViewResourceLabel')}\n data-has-groups={hasGroups || undefined}\n >\n {renderResourceLabel ? renderResourceLabel(resource) : resource.label}\n </div>\n <div\n {...getStyles('resourcesMonthViewRowSlots')}\n onDragOver={\n withDragHandlers\n ? (e) => {\n const dayIndex = getDayIndexFromDragPoint(e, resourceIndex);\n if (dayIndex !== null && monthDays[dayIndex]) {\n dragDrop.handleDragOver(e, {\n day: monthDays[dayIndex],\n resourceId: resource.id,\n });\n }\n }\n : undefined\n }\n onDragLeave={withDragHandlers ? dragDrop.handleDragLeave : undefined}\n onDrop={\n withDragHandlers\n ? (e) => {\n const dayIndex = getDayIndexFromDragPoint(e, resourceIndex);\n if (dayIndex !== null && monthDays[dayIndex]) {\n dragDrop.handleDrop(e, {\n day: monthDays[dayIndex],\n resourceId: resource.id,\n });\n }\n }\n : undefined\n }\n >\n {eventNodes}\n {moreNodes}\n {cells}\n </div>\n </div>\n );\n });\n\n const content = (\n <Box\n mod={[\n {\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n 'event-interaction': eventResize.isResizing || dragDrop.dragContextValue.isDragging,\n resizing: eventResize.isResizing,\n },\n mod,\n ]}\n {...getStyles('resourcesMonthView')}\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: () => {\n requestAnimationFrame(() => {\n scrollToDay(dayjs().format('YYYY-MM-DD'));\n });\n return toDateString(dayjs());\n },\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={{ views: ['day', 'week', 'month'] as const, ...viewSelectProps }}\n stylesApiProps={stylesApiProps}\n />\n )}\n\n <Box {...getStyles('resourcesMonthViewRoot')}>\n <ScrollArea\n scrollbars=\"x\"\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('resourcesMonthViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n viewportRef={mergedViewportRef}\n >\n <div {...getStyles('resourcesMonthViewInner')}>\n <div {...getStyles('resourcesMonthViewDayLabelsRow')}>\n <div\n {...getStyles('resourcesMonthViewCorner')}\n key=\"corner\"\n ref={resourceLabelRef}\n style={\n hasGroups\n ? {\n flexBasis:\n 'calc(var(--resources-month-view-resource-label-width) + var(--resources-month-view-group-label-width))',\n minWidth:\n 'calc(var(--resources-month-view-resource-label-width) + var(--resources-month-view-group-label-width))',\n }\n : undefined\n }\n >\n {getLabel('resources', labels)}\n </div>\n {dayLabels}\n </div>\n\n {rows}\n </div>\n </ScrollArea>\n </Box>\n </Box>\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragDrop.dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nResourcesMonthView.displayName = '@mantine/schedule/ResourcesMonthView';\nResourcesMonthView.classes = classes;\nResourcesMonthView.varsResolver = varsResolver;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAoRA,MAAM,gBAAA,GAAeA,cAAAA,mBAAAA,EAClB,QAAQ,EAAE,QAAQ,UAAU,WAAW,uBAAuB,EAC7D,oBAAoB;CAClB,iCAAiC,UAAA,GAASC,cAAAA,UAAAA,CAAU,MAAM,IAAI,KAAA;CAC9D,qCAAA,GAAoCC,cAAAA,IAAAA,CAAI,QAAQ;CAChD,sCAAA,GAAqCA,cAAAA,IAAAA,CAAI,SAAS;CAClD,6CAAA,GAA4CA,cAAAA,IAAAA,CAAI,eAAe;AACjE,EACF,EACF;AAEA,MAAM,eAAe;CACnB,kBAAkB;CAClB,gBAAgB;CAChB,YAAY;CACZ,eAAe;CACf,iBAAiB;CACjB,uBAAuB;CACvB,oBAAoB;CACpB,iBAAiB;CACjB,MAAM;AACR;AAEA,SAAS,kBAAkB,GAAsB,GAA8B;CAC7E,MAAM,UAAA,GAAS,MAAA,QAAA,CAAM,EAAE,KAAK;CAC5B,MAAM,UAAA,GAAS,MAAA,QAAA,CAAM,EAAE,KAAK;CAC5B,MAAM,SAAA,GAAQ,MAAA,QAAA,CAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,OAAO,QAAQ,KAAK,GAAG,KAAK;CAC3E,MAAM,SAAA,GAAQ,MAAA,QAAA,CAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,OAAO,QAAQ,KAAK,GAAG,KAAK;CAE3E,IAAI,UAAU,OACZ,OAAO,QAAQ;CAGjB,OAAO,OAAO,QAAQ,IAAI,OAAO,QAAQ;AAC3C;AAEA,SAAS,qBAAqB,UAAuB,SAAgC;CACnF,KAAK,IAAI,MAAM,GAAG,MAAM,SAAS,OAAO,GACtC,IAAI,CAAC,SAAS,IAAI,GAAG,GACnB,OAAO;CAIX,OAAO;AACT;AAyBA,SAAS,gBAAgB,OAAmC;CAC1D,QAAA,GAAO,MAAA,QAAA,CAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAA,GAAQ,MAAA,QAAA,CAAM,MAAM,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC;AAClF;AAEA,MAAa,sBAAA,GAAqBC,cAAAA,QAAAA,EAAoC,WAAW;CAC/E,MAAM,SAAA,GAAQC,cAAAA,SAAAA,CAAS,sBAAsB,cAAc,MAAM;CACjE,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,YACA,MACA,KACA,MACA,cACA,WACA,QACA,eACA,aACA,iBACA,iBACA,kBACA,YACA,gBACA,QACA,YACA,sBACA,cACA,mBACA,kBACA,sBACA,iBACA,QACA,UACA,WACA,qBACA,QACA,kBACA,iBACA,iBACA,aACA,uBACA,aACA,cACA,kBACA,gBACA,iBACA,eACA,gBACA,cACA,sBACA,kBACA,qBACA,0BACA,cACA,oBACA,eACA,QACA,MACA,iBACA,qBACA,sBAAsB,uBACtB,iBACA,0BACA,GAAG,WACD;CAEJ,MAAM,uBAAuB,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,yBAAyB,CAAC,CAAC;CAEjF,MAAM,aAAA,GAAYC,cAAAA,UAAAA,CAAqC;EACrD,MAAM;EACN,SAAA,kCAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,MAAM,EAAE,oBAAoB,oBAAA,GAAmBC,cAAAA,qBAAAA,CAAgD;EAC7F;EACA;EACA;CACF,CAAC;CAED,MAAM,iBAAiB;EACrB,YAAY;EACZ,QAAQ;EACR;EACA;EACA;CACF;CAEA,MAAM,SAAA,GAAQC,cAAAA,gBAAAA,CAAgB;CAC9B,MAAM,OAAA,GAAMC,eAAAA,gBAAAA,CAAgB;CAC5B,MAAM,sBAAsB,IAAI,eAAe,WAAW;CAC1D,MAAM,EAAE,kBAAkB,aAAa,sBAAA,GAAqBC,MAAAA,QAAAA,OACpDC,8BAAAA,oBAAoB,WAAW,MAAM,GAC3C,CAAC,WAAW,MAAM,CACpB;CACA,MAAM,YAAY,YAAY,SAAS;CAEvC,MAAM,aAAA,GAAYD,MAAAA,QAAAA,OAAc;EAC9B,MAAM,SAAA,GAAQ,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,QAAQ,OAAO;EACzC,MAAM,YAAY,MAAM,MAAM,OAAO,CAAC,CAAC,KAAK;EAC5C,MAAM,iBAAiB,IAAI,eAAe,WAAW;EACrD,MAAM,OAAiB,CAAC;EACxB,KAAK,IAAI,IAAI,GAAG,KAAK,WAAW,KAAK;GACnC,MAAM,MAAM,MAAM,KAAK,CAAC;GACxB,IAAI,CAAC,mBAAmB,eAAe,SAAS,IAAI,IAAI,CAAc,GACpE;GAEF,KAAK,KAAK,IAAI,OAAO,YAAY,CAAC;EACpC;EACA,OAAO;CACT,GAAG;EAAC;EAAM;EAAiB;EAAa;CAAG,CAAC;CAE5C,MAAM,eAAA,GAAcE,MAAAA,OAAAA,CAAuB,IAAI;CAC/C,MAAM,qBAAA,GAAoBC,eAAAA,aAAAA,CAAa,aAAa,iBAAiB,WAAW;CAChF,MAAM,gBAAA,GAAeD,MAAAA,OAAAA,CAAkC,CAAC,CAAC;CAEzD,MAAM,oBAAA,GAAmBA,MAAAA,OAAAA,CAAuB,IAAI;CAEpD,MAAM,eAAA,GAAcE,MAAAA,YAAAA,EACjB,eAAuB;EACtB,IAAI,CAAC,YAAY,SACf;EAEF,MAAM,cAAc,UAAU,QAAQ,UAAU;EAChD,IAAI,cAAc,GAChB;EAEF,MAAM,cAAc,aAAa,QAAQ;EACzC,IAAI,CAAC,aACH;EAEF,MAAM,YAAY,YAAY,sBAAsB;EACpD,MAAM,eAAe,YAAY,QAAQ,sBAAsB;EAC/D,MAAM,aAAa,iBAAiB,SAAS,sBAAsB,CAAC,CAAC,SAAS;EAC9E,YAAY,QAAQ,SAAS;GAC3B,MAAM,UAAU,OAAO,aAAa,OAAO;GAC3C,KAAK;EACP,CAAC;CACH,GACA,CAAC,SAAS,CACZ;CAEA,CAAA,GAAA,eAAA,oBAAA,OAA0B;EACxB,IAAI,iBACF,YAAY,eAAe;CAE/B,GAAG,CAAC,CAAC;CAEL,MAAM,kBAAA,GAAiBJ,MAAAA,QAAAA,OAEnBK,gCAAAA,sBAAsB;EACpB;EACA,aAAA,GAAY,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,OAAO;EAChD,WAAA,GAAU,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,OAAO;EAC5C,gBAAgB;CAClB,CAAC,GACH;EAAC;EAAQ;EAAM;CAAwB,CACzC;CAEA,MAAM,eAAA,GAAcL,MAAAA,QAAAA,OAAc,IAAI,IAAI,SAAS,GAAG,CAAC,SAAS,CAAC;CAEjE,MAAM,cAAcM,kCAAAA,sBAAsB;EACxC,SAAS;EACT;EACA;EACA;EACA,QAAQ;EACR;EACA;EACA;CACF,CAAC;CAED,MAAM,EAAE,iBAAiB,cAAc,eAAe;CAEtD,MAAM,gBAAA,GAAeN,MAAAA,QAAAA,OAAc;EACjC,IAAI,oBAAoB,QAAQ,iBAAiB,QAAQ,eAAe,MACtE,OAAO;EAGT,OAAO,eAAe,KAAK,UACzB,MAAM,OAAO,kBAAkB;GAAE,GAAG;GAAO,OAAO;GAAc,KAAK;EAAW,IAAI,KACtF;CACF,GAAG;EAAC;EAAgB;EAAiB;EAAc;CAAU,CAAC;CAE9D,MAAM,EAAE,wBAAwB,2BAAA,GAA0BA,MAAAA,QAAAA,OAAc;EACtE,MAAM,yBAAuF,CAAC;EAC9F,KAAK,MAAM,YAAY,WAAW;GAChC,uBAAuB,SAAS,MAAM,CAAC;GACvC,KAAK,MAAM,OAAO,WAChB,uBAAuB,SAAS,GAAG,CAAC,OAAO,CAAC;EAEhD;EAEA,IAAI,cACF,KAAK,MAAM,SAAS,cAAc;GAChC,IAAI,MAAM,eAAe,KAAA,KAAa,EAAE,MAAM,cAAc,yBAC1D;GAGF,MAAM,cAAA,GAAa,MAAA,QAAA,CAAM,MAAM,KAAK;GACpC,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,MAAM,GAAG;GAEhC,KAAK,MAAM,OAAO,WAAW;IAC3B,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,GAAG,CAAC,CAAC,QAAQ,KAAK;IACzC,MAAM,UAAA,GAAS,MAAA,QAAA,CAAM,GAAG,CAAC,CAAC,MAAM,KAAK;IAErC,IAAI,WAAW,SAAS,MAAM,KAAK,SAAS,QAAQ,QAAQ,GAC1D,uBAAuB,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,KAAK;GAE5D;EACF;EAGF,MAAM,wBAAmF,CAAC;EAC1F,MAAM,mBAAA,GAAkB,MAAA,QAAA,CAAM,UAAU,EAAE,CAAC,CAAC,QAAQ,KAAK;EACzD,MAAM,qBAAA,GAAoB,MAAA,QAAA,CAAM,UAAU,UAAU,SAAS,EAAE,CAAC,CAC7D,IAAI,GAAG,KAAK,CAAC,CACb,QAAQ,KAAK;EAEhB,KAAK,MAAM,YAAY,WAAW;GAChC,MAAM,QAAsD,CAAC;GAC7D,MAAM,0BAAU,IAAI,IAA6B;GACjD,MAAM,gCAAgB,IAAI,IAA0C;GACpE,MAAM,iCAAiB,IAAI,IAGzB;GAEF,UAAU,SAAS,KAAK,aAAa;IACnC,MAAM,YAAY,uBAAuB,SAAS,GAAG,CAAC;IACtD,UAAU,KAAK,iBAAiB;IAEhC,KAAK,MAAM,SAAS,WAAW;KAC7B,MAAM,UAAU,eAAe,IAAI,MAAM,EAAE;KAC3C,IAAI,SACF,QAAQ,KAAK,KAAK,QAAQ;UAE1B,eAAe,IAAI,MAAM,IAAI;MAAE;MAAO,MAAM,CAAC,QAAQ;KAAE,CAAC;IAE5D;IAEA,MAAM,2BAAW,IAAI,IAAY;IACjC,MAAM,UAAmD,CAAC;IAC1D,IAAI,cAAc;IAElB,KAAK,MAAM,SAAS,WAAW;KAC7B,IAAI,MAAiC,QAAQ,IAAI,MAAM,EAAE;KAEzD,IAAI,QAAQ,KAAA,KAAa,OAAO,wBAAwB,SAAS,IAAI,GAAG,GACtE,MAAM,qBAAqB,UAAU,oBAAoB;KAG3D,IAAI,QAAQ,MAAM;MAChB,eAAe;MACf;KACF;KAEA,SAAS,IAAI,GAAG;KAChB,QAAQ,KAAK;MAAE;MAAO;KAAI,CAAC;KAC3B,IAAI,CAAC,cAAc,IAAI,MAAM,EAAE,GAC7B,cAAc,IAAI,MAAM,oBAAI,IAAI,IAAI,CAAC;KAEvC,cAAc,IAAI,MAAM,EAAE,CAAC,CAAE,IAAI,UAAU,GAAG;KAC9C,QAAQ,IAAI,MAAM,IAAI,GAAG;IAC3B;IAEA,MAAM,OAAO;KAAE;KAAS;IAAY;GACtC,CAAC;GAED,MAAM,WAAwC,CAAC;GAE/C,KAAK,MAAM,EAAE,OAAO,UAAU,eAAe,OAAO,GAAG;IACrD,IAAI,CAAC,gBAAgB,KAAK,GACxB;IAGF,MAAM,eAAe,KAAK;IAC1B,MAAM,cAAc,KAAK,KAAK,SAAS;IACvC,MAAM,OAAO,cAAc,IAAI,MAAM,EAAE;IACvC,MAAM,iBAAA,GAAgB,MAAA,QAAA,CAAM,MAAM,KAAK,CAAC,CAAC,SAAS,eAAe;IACjE,MAAM,gBAAA,GAAe,MAAA,QAAA,CAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,iBAAiB;IAC/D,IAAI,MAA0E;IAE9E,MAAM,iBAAiB;KACrB,IAAI,CAAC,KACH;KAEF,MAAM,YAAY,IAAI,gBAAgB;KACtC,MAAM,UAAU,IAAI,cAAc;KAClC,MAAM,YAAY,CAAC,aAAa;KAChC,MAAM,UAAU,CAAC,WAAW;KAC5B,IAAI,eAAe;KACnB,KAAK,IAAI,WAAW,IAAI,eAAe,YAAY,IAAI,aAAa,YAAY,GAC9E,KAAK,MAAM,UAAU,UAAU,EAAE,eAAe,KAAK,GAAG;MACtD,eAAe;MACf;KACF;KAEF,SAAS,KAAK;MACZ;MACA,eAAe,IAAI;MACnB,aAAa,IAAI;MACjB,KAAK,IAAI;MACT;MACA;MACA,SAAS,aAAa,UAAU,SAAS,YAAY,UAAU,UAAU,QAAQ;MACjF;KACF,CAAC;KACD,MAAM;IACR;IAEA,KAAK,IAAI,WAAW,cAAc,YAAY,aAAa,YAAY,GAAG;KACxE,MAAM,MAAM,MAAM,IAAI,QAAQ;KAE9B,IAAI,QAAQ,KAAA,GAAW;MACrB,SAAS;MACT;KACF;KAEA,IAAI,OAAO,IAAI,QAAQ,OAAO,IAAI,gBAAgB,WAAW,GAC3D,IAAI,cAAc;UACb;MACL,SAAS;MACT,MAAM;OAAE,eAAe;OAAU,aAAa;OAAU;MAAI;KAC9D;IACF;IAEA,SAAS;GACX;GAEA,sBAAsB,SAAS,MAAM;IAAE;IAAO;GAAS;EACzD;EAEA,OAAO;GAAE;GAAwB;EAAsB;CACzD,GAAG;EAAC;EAAW;EAAW;EAAc;CAAoB,CAAC;CAI7D,MAAM,2BAAA,GAA0BI,MAAAA,YAAAA,EAC7B,WAA2B,IAAA,GAAG,MAAA,QAAA,CAAM,OAAO,GAAG,CAAC,CAAC,OAAO,YAAY,EAAE,YACtE,CAAC,CACH;CAEA,MAAM,sBAAA,GAAqBA,MAAAA,YAAAA,EACxB,GAAoB,WAA2B;EAC9C,IAAI,CAAC,qBACH;EAEF,oBAAoB;GAClB,cAAc,EAAE;GAChB,cAAc,wBAAwB,MAAM;GAC5C,YAAY,OAAO;EACrB,CAAC;CACH,GACA,CAAC,qBAAqB,uBAAuB,CAC/C;CAEA,MAAM,WAAWG,+BAAAA,oBAAoC;EACnD,SAAS;EACT;EACA,cAAc,SAAS;GACrB,cAAc;IAAE,GAAG;IAAM,YAAY,mBAAmB;GAAQ,CAAC;EACnE;EACA;EACA;EACA;EACA,sBAAsB,QAAwB,iBAAoC;GAChF,mBAAmB,UAAU,OAAO;GACpC,OAAOC,kCAAAA,uBAAuB;IAAE;IAAc,WAAW,OAAO;GAAI,CAAC;EACvE;EACA,gBAAgB,sBAAsB,qBAAqB,KAAA;EAC3D,QAAQ;EACR;EACA;EACA;EACA;EACA;EACA,sBAAsB,WAAW,OAAO;CAC1C,CAAC;CAED,MAAM,sBAAA,GAAqBN,MAAAA,OAAAA,CAAoC,KAAA,CAAS;CAExE,MAAM,oBAAoB,yBAAyB,CAAC,CAAC,wBAAwB,SAAS;CAEtF,MAAM,qBAAA,GAAoBF,MAAAA,QAAAA,OAAcS,qCAAAA,wBAAwB,SAAS,GAAG,CAAC,SAAS,CAAC;CAEvF,MAAM,iBAAiBC,6BAAAA,kBAAkB;EACvC,SAAS,sBAAsB,SAAS;EACxC,YAAY,YAAY,UAAU,UAAU;GAC1C,IAAI,CAAC,eACH;GAEF,MAAM,WAAW,UAAU;GAC3B,MAAM,SAAS,UAAU;GACzB,IAAI,YAAY,QACd,cAAc;IACZ,aAAA,GAAY,MAAA,QAAA,CAAM,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,qBAAqB;IACvE,WAAA,GAAU,MAAA,QAAA,CAAM,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,qBAAqB;IACjE,YAAY,kBAAkB,IAAI,KAAK,KAAK;GAC9C,CAAC;EAEL;CACF,CAAC;CAED,MAAM,YAAY,UAAU,KAAK,KAAK,aAAa;EACjD,MAAM,KAAA,GAAI,MAAA,QAAA,CAAM,GAAG;EACnB,MAAM,UAAU,oBAAoB,SAAS,EAAE,IAAI,CAAc;EACjE,MAAM,QAAQ,EAAE,QAAA,GAAO,MAAA,QAAA,CAAM,GAAG,KAAK,KAAK;EAE1C,OACE,iBAAA,GAAA,MAAA,cAAA,CAACC,cAAAA,KAAD;GACE,GAAI,UAAU,4BAA4B;GAC1C,KAAK;GACL,KAAK;IAAE;IAAS;GAAM;GACtB,MAAM,SAAS;IACb,aAAa,QAAQ,YAAY;GACnC;EAMG,GAJH,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAI,UAAU,mCAAmC;GACpDC,UAAAA,oBAAAA,WAAW;IAAE,MAAM;IAAG,QAAQ,IAAI,UAAU,MAAM;IAAG,QAAQ;GAAc,CAAC;EACzE,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAI,UAAU,kCAAkC;GAAI,UAAA,EAAE,KAAK;EAAQ,CAAA,CACtE;CAET,CAAC;CAED,MAAM,YAAA,GAAWV,MAAAA,OAAAA,CAA8B,CAAC,CAAC;CAEjD,MAAM,4BAAA,GAA2BE,MAAAA,YAAAA,EAAa,OAAwB,kBAA0B;EAC9F,OAAOS,kCAAAA,sBAAsB,SAAS,QAAQ,kBAAkB,CAAC,GAAG,MAAM,OAAO;CACnF,GAAG,CAAC,CAAC;CAEL,MAAM,qBACJ,OACA,eACA,aACG;EACH,MAAM,MAAM,MAAM;EAClB,IAAI,oBAAoB;EACxB,IAAI,eAAe;EAEnB,IAAI,QAAQ,cACV,eAAe,KAAK,IAAI,WAAW,GAAG,UAAU,SAAS,CAAC;OACrD,IAAI,QAAQ,aACjB,eAAe,KAAK,IAAI,WAAW,GAAG,CAAC;OAClC,IAAI,QAAQ,aACjB,oBAAoB,KAAK,IAAI,gBAAgB,GAAG,UAAU,SAAS,CAAC;OAC/D,IAAI,QAAQ,WACjB,oBAAoB,KAAK,IAAI,gBAAgB,GAAG,CAAC;OAEjD;EAGF,MAAM,eAAe;EACrB,SAAS,QAAQ,kBAAkB,GAAG,aAAa,EAAE,MAAM;CAC7D;CAEA,MAAM,mBAAmB,MAAM;CAE/B,MAAM,mBAAmB,EACvB,KACA,OACA,eACA,OACA,SACA,UACA,iBACA,oBAUI;EACJ,MAAM,cAAc,YAAY,iBAAiB,KAAK;EACtD,MAAM,sBAAsB,YAAY,oBAAoB,MAAM;EAElE,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,MAAM,GAAG;EAGhC,MAAM,WADJ,SAAS,KAAK,MAAM,KAAK,SAAS,OAAO,MAAM,KAAK,SAAS,OAAO,MAAM,IAC1C,SAAS,SAAS,GAAG,KAAK,IAAI,SAAA,CAAU,OAAO,YAAY;EAE7F,MAAM,kBACJ,mBAAmB,YAAY,KAAA,GAAI,MAAA,QAAA,CAAM,MAAM,KAAK,CAAC,CAAC,OAAO,YAAY,CAAC;EAC5E,MAAM,gBAAgB,iBAAiB,YAAY,IAAI,OAAO;EAE9D,MAAM,cAAc,cAChB,MAAM,qBAAqB;GACzB,OAAO,MAAM,SAAS,MAAM;GAC5B;GACA,SAAS,MAAM,WAAW;GAC1B,cAAc;EAChB,CAAC,IACD;EAEJ,MAAM,kBAAkB,UAA2B;GACjD,GAAG,UAAU,gCAAgC;GAC7C,aAAa;GACb,eAAgB,uBAAuB,YAAY,iBAAiB,QAAS,KAAA;GAC7E,gBAAgB,MACd,YAAY,kBAAkB;IAC5B;IACA;IACA,OAAO,SAAS,QAAQ,kBAAkB,CAAC;IAC3C,MAAM;IACN,cAAc;GAChB,CAAC;EACL;EAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACF,cAAAA,KAAD;GAEE,GAAI,UAAU,kCAAkC,EAC9C,OAAO;IAAE,UAAU;IAAY,QAAQ;IAAG,GAAG;GAAM,EACrD,CAAC;GACD,QAAQ,cAAc,EAAE,iBAAiB,YAAY,MAAM,IAAI,KAAA;GAC/D,iBAAe,uBAAuB,KAAA;GANxC,UAAA;IAQE,iBAAA,GAAA,kBAAA,IAAA,CAACG,sBAAAA,eAAD;KACS;KACP,QAAA;KACA,UAAA;KACA,MAAK;KACI;KACT,KAAK,CAAC,UAAU,EAAE,SAAS,uBAAuB,CAAC,YAAY,YAAY,CAAC;KAC5E,WAAW,SAAS,iBAAiB,KAAK;KAC1C,YAAY;KACK;KACJ;KACL;KACF;KACN,SACE,gBACK,MAAM;MACL,IAAI,CAAC,YAAY,YAAY,GAC3B,aAAa,OAAO,CAAC;KAEzB,IACA,KAAA;KAEN,OAAO;MAAE,OAAO;MAAQ,QAAQ;KAAO;IACxC,CAAA;IACA,eAAe,mBAAmB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,GAAI,eAAe,OAAO,EAAI,CAAA;IACrE,eAAe,iBAAiB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,GAAI,eAAe,KAAK,EAAI,CAAA;GAC/D;EAjCE,GAAA,GAiCF;CAET;CAEA,MAAM,OAAO,iBAAiB,KAAK,UAAU,kBAAkB;EAC7D,IAAI,CAAC,SAAS,QAAQ,gBACpB,SAAS,QAAQ,iBAAiB,CAAC;EAGrC,SAAS,QAAQ,cAAc,CAAC,SAAS,UAAU;EAEnD,MAAM,YAAY,OAAO,SAAS,EAAE;EACpC,MAAM,aAAa,SAAS;EAE5B,MAAM,YAAY,UAAU;EAC5B,MAAM,aAAgC,CAAC;EACvC,MAAM,YAA+B,CAAC;EAEtC,MAAM,QAAQ,UAAU,KAAK,KAAK,aAAa;GAC7C,MAAM,KAAA,GAAI,MAAA,QAAA,CAAM,GAAG;GACnB,MAAM,UAAU,IAAI,eAAe,WAAW,CAAC,CAAC,SAAS,EAAE,IAAI,CAAc;GAC7E,MAAM,eACJ,eAAe,QACf,OAAO,eAAe,YACtB,SAAS,cACR,WAA8B,QAAQ,OACtC,WAA8B,eAAe,SAAS;GACzD,MAAM,iBAAiB,eAAe,eAAe,UAAU,SAAS;GACxE,MAAM,YAAY,uBAAuB,SAAS,GAAG,GAAG,QAAQ,CAAC;GACjE,MAAM,SAAS,sBAAsB,SAAS,GAAG,EAAE,MAAM;GACzD,MAAM,gBAAgB,QAAQ,WAAW,CAAC;GAC1C,MAAM,oBAAoB,QAAQ,eAAe;GACjD,MAAM,cAAc,kBAAkB,KAAK,aAAa;GACxD,MAAM,iBAAkB,WAAW,YAAa;GAChD,MAAM,kBAAkB,MAAM;GAE9B,MAAM,kBAAkB,oBAAoB,KAAK,SAAS;GAE1D,cAAc,SAAS,EAAE,OAAO,UAAU;IACxC,IAAI,gBAAgB,KAAK,GACvB;IAGF,MAAM,WAAW,kBACb,wBAAwB,IAAI,KAAK,qBAAqB,WACtD,QAAQ,MAAM,iBAAiB;IACnC,MAAM,cAAc,kBAChB,wBAAwB,qBAAqB,WAC7C,QAAQ,iBAAiB;IAE7B,WAAW,KACT,gBAAgB;KACd,KAAK,GAAG,MAAM,GAAG,GAAG;KACpB;KACA;KACA,iBAAiB;KACjB,eAAe;KACf,OAAO;MACL,KAAK;MACL,MAAM,QAAQ,eAAe;MAC7B,OAAO,QAAQ,gBAAgB;MAC/B,QAAQ;KACV;IACF,CAAC,CACH;GACF,CAAC;GAED,IAAI,oBAAoB,KAAK,SAAS,UACpC,UAAU,KACR,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;IAEE,QAAQ;IACR,iBAAiB;IACX;IACE;IACS;IACJ;IACC;IACd,OAAO;KACL,UAAU;KACV,QAAQ;KACR,MAAM,QAAQ,eAAe;KAC7B,OAAO,QAAQ,gBAAgB;KAC/B,QAAQ;KACR,QAAQ;IACV;IACA,GAAI;IACJ,GAAI;GACL,GAlBM,QAAQ,SAAS,GAAG,GAAG,KAkB7B,CACH;GAGF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,gBAAD;IAEE,MAAM,SAAS;KACb,IAAI,MAAM;MACR,IAAI,CAAC,SAAS,QAAQ,gBACpB,SAAS,QAAQ,iBAAiB,CAAC;MAErC,SAAS,QAAQ,cAAc,CAAC,YAAY;KAC9C;IACF;IACA,GAAI,UAAU,wBAAwB;IACtC,cAAY,GAAG,SAAS,MAAM,GAAG,EAAE,OAAO,cAAc;IACxD,wBAAsB,sBAAsB,SAAS,WAAW,WAAW,KAAA;IAC3E,wBAAsB,sBAAsB,SAAS,WAAW,YAAY,KAAA;IAC5E,KAAK;KACH;KACA,eAAe;KACf,iBAAiB;KACjB,QAAQ,SAAS;IACnB;IACA,UAAU,SAAS,WAAW,KAAK,cAAc,IAAI;IACrD,SACE,SAAS,WACL,KAAA,KACC,MAAM,aAAa;KAAE,MAAM;KAAK,aAAa;KAAG,YAAY,SAAS;IAAG,CAAC;IAEhF,WACE,SAAS,WAAW,KAAA,KAAa,MAAM,kBAAkB,GAAG,eAAe,QAAQ;IAErF,eACE,sBAAsB,SAAS,YAC1B,MACC,eAAe,sBACb,GACA,UACA,SACF,IACF,KAAA;IAEN,YAAY,oBAAoB,MAAM,EAAE,eAAe,IAAI,KAAA;GAC5D,GAvCM,GAuCN;EAEL,CAAC;EAID,CAFyB,sBAAsB,SAAS,GAAG,EAAE,YAAY,CAAC,EAAA,CAEzD,SAAS,YAAY;GACpC,MAAM,qBAAsB,QAAQ,gBAAgB,YAAa;GACjE,MAAM,uBACF,QAAQ,cAAc,QAAQ,gBAAgB,KAAK,YAAa;GACpE,MAAM,aAAa,QAAQ,gBAAgB,SAAS;GACpD,MAAM,WAAW,aACb,wBAAwB,QAAQ,IAAI,KAAK,qBAAqB,WAC9D,QAAQ,QAAQ,MAAM,iBAAiB;GAC3C,MAAM,cAAc,aAChB,wBAAwB,qBAAqB,WAC7C,QAAQ,iBAAiB;GAE7B,WAAW,KACT,gBAAgB;IACd,KAAK,GAAG,QAAQ,MAAM,GAAG,WAAW,QAAQ;IAC5C,OAAO,QAAQ;IACf;IACA,SAAS,QAAQ;IACjB,UAAU;KAAE,cAAc,QAAQ;KAAW,YAAY,QAAQ;IAAQ;IACzE,iBACE,CAAC,QAAQ,aAAa,QAAQ,YAAY,WAAW,QAAQ,YAAY;IAC3E,eACE,CAAC,QAAQ,WAAW,QAAQ,YAAY,SAAS,QAAQ,YAAY;IACvE,OAAO;KACL,KAAK;KACL,MAAM,QAAQ,mBAAmB;KACjC,OAAO,QAAQ,oBAAoB;KACnC,QAAQ;IACV;GACF,CAAC,CACH;EACF,CAAC;EAED,MAAM,YAAY,YAAY,iBAAiB,iBAAiB,KAAA;EAChE,MAAM,eAAe,WAAW,aAAa,WAAW,WAAW,aAAa;EAEhF,MAAM,YACJ,cAAc,KAAA,IACZ,cAAc,OACZ,iBAAA,GAAA,kBAAA,IAAA,CAACL,cAAAA,KAAD;GACE,GAAI,UAAU,+BAA+B;GAC7C,KAAK,EAAE,kBAAkB,UAAU,SAAS;GAE3C,UAAA,gBACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IACE,OACE,UAAU,QAAQ,IACd,EACE,WAAW,oBAAoB,UAAU,QAAQ,EAAE,0DACrD,IACA,KAAA;IAGL,UAAA,mBAAmB,iBAAiB,UAAU,KAAK,IAAI,UAAU,MAAM;GACpE,CAAA;EAEL,CAAA,IAEL,iBAAA,GAAA,kBAAA,IAAA,CAACA,cAAAA,KAAD,EAAK,GAAI,UAAU,oCAAoC,EAAI,CAAA,IAE3D;EAEN,OACE,iBAAA,GAAA,MAAA,cAAA,CAAC,OAAD;GAAK,GAAI,UAAU,uBAAuB;GAAG,KAAK,SAAS;EA0CtD,GAzCF,WACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GACE,GAAI,UAAU,iCAAiC;GAC/C,mBAAiB,aAAa,KAAA;GAE7B,UAAA,sBAAsB,oBAAoB,QAAQ,IAAI,SAAS;EAC7D,CAAA,GACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GACE,GAAI,UAAU,4BAA4B;GAC1C,YACE,oBACK,MAAM;IACL,MAAM,WAAW,yBAAyB,GAAG,aAAa;IAC1D,IAAI,aAAa,QAAQ,UAAU,WACjC,SAAS,eAAe,GAAG;KACzB,KAAK,UAAU;KACf,YAAY,SAAS;IACvB,CAAC;GAEL,IACA,KAAA;GAEN,aAAa,mBAAmB,SAAS,kBAAkB,KAAA;GAC3D,QACE,oBACK,MAAM;IACL,MAAM,WAAW,yBAAyB,GAAG,aAAa;IAC1D,IAAI,aAAa,QAAQ,UAAU,WACjC,SAAS,WAAW,GAAG;KACrB,KAAK,UAAU;KACf,YAAY,SAAS;IACvB,CAAC;GAEL,IACA,KAAA;GA3BR,UAAA;IA8BG;IACA;IACA;GACE;EACF,CAAA,CAAA;CAET,CAAC;CAED,MAAM,UACJ,iBAAA,GAAA,kBAAA,KAAA,CAACA,cAAAA,KAAD;EACE,KAAK,CACH;GACE,QAAQ,SAAS;GACjB,iBAAiB,eAAe;GAChC,qBAAqB,YAAY,cAAc,SAAS,iBAAiB;GACzE,UAAU,YAAY;EACxB,GACA,GACF;EACA,GAAI,UAAU,oBAAoB;EAClC,GAAI;EAXN,UAAA,CAaG,cACC,iBAAA,GAAA,kBAAA,IAAA,CAACM,2BAAAA,oBAAD;GACE,MAAK;GACL,oBAAoB;IAClB,gBAAgBC,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,QAAQ,OAAO,CAAC;IAC9E,YAAYA,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,QAAQ,OAAO,CAAC;IACrE,aAAa;KACX,4BAA4B;MAC1B,aAAA,GAAY,MAAA,QAAA,CAAM,CAAC,CAAC,OAAO,YAAY,CAAC;KAC1C,CAAC;KACD,OAAOA,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,CAAC;IAC7B;GACF;GACA,SAAS,EACP,iBAAiB;IACf;IACA,YAAA,GAAW,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,MAAM;IACjC,aAAA,GAAY,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,OAAO;IACnC,eAAe,SACb,eAAeA,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;IAC7E,gBAAgB,UACd,eAAeA,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;IAC/E,GAAG;GACL,EACF;GACQ;GACM;GACA;GACQ;GACJ;GACC;GACnB,iBAAiB;IAAE,OAAO;KAAC;KAAO;KAAQ;IAAO;IAAY,GAAG;GAAgB;GAChE;EACjB,CAAA,GAGH,iBAAA,GAAA,kBAAA,IAAA,CAACP,cAAAA,KAAD;GAAK,GAAI,UAAU,wBAAwB;GACzC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACQ,cAAAA,YAAD;IACE,YAAW;IACX,eAAe;IACf,GAAI;IACJ,GAAI,UAAU,gCAAgC;KAC5C,WAAW,iBAAiB;KAC5B,OAAO,iBAAiB;IAC1B,CAAC;IACD,aAAa;IAEb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,GAAI,UAAU,yBAAyB;KAA5C,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,GAAI,UAAU,gCAAgC;MAAnD,UAAA,CACE,iBAAA,GAAA,MAAA,cAAA,CAAC,OAAD;OACE,GAAI,UAAU,0BAA0B;OACxC,KAAI;OACJ,KAAK;OACL,OACE,YACI;QACE,WACE;QACF,UACE;OACJ,IACA,KAAA;MAIH,GADFC,eAAAA,SAAS,aAAa,MAAM,CAC1B,GACJ,SACE;KAEJ,CAAA,GAAA,IACE;;GACK,CAAA;EACT,CAAA,CACF;;CAGP,IAAI,uBACF,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,YAAY,UAAb;EAAsB,OAAO,SAAS;EAAmB,UAAA;CAA8B,CAAA;CAGhG,OAAO;AACT,CAAC;AAED,mBAAmB,cAAc;AACjC,mBAAmB,UAAUC,kCAAAA;AAC7B,mBAAmB,eAAe"}
@@ -13,7 +13,7 @@ const defaultProps = {
13
13
  };
14
14
  const ResourcesSchedule = (0, _mantine_core.factory)((_props) => {
15
15
  const props = (0, _mantine_core.useProps)("ResourcesSchedule", defaultProps, _props);
16
- const { classNames, className, style, styles, unstyled, vars, resources, date, defaultDate, onDateChange, view, defaultView, onViewChange, events, locale, radius, labels, renderEventBody, renderResourceLabel, withEventsDragAndDrop, onEventDrop, canDragEvent, onEventDragStart, onEventDragEnd, onTimeSlotClick, onDayClick, onEventClick, withDragSlotSelect, onSlotDragEnd, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, withInteractiveBackgroundEvents, recurrenceExpansionLimit, mode, dayViewProps, weekViewProps, monthViewProps, __staticSelector, mod, ...others } = props;
16
+ const { classNames, className, style, styles, unstyled, vars, resources, date, defaultDate, onDateChange, view, defaultView, onViewChange, events, locale, radius, labels, renderEventBody, renderResourceLabel, withEventsDragAndDrop, onEventDrop, canDragEvent, onEventDragStart, onEventDragEnd, onTimeSlotClick, onDayClick, onEventClick, withDragSlotSelect, onSlotDragEnd, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, canDropEvent, canDropExternalEvent, canResizeEventTo, preventEventOverlap, onEventPlacementRejected, withInteractiveBackgroundEvents, recurrenceExpansionLimit, mode, dayViewProps, weekViewProps, monthViewProps, __staticSelector, mod, ...others } = props;
17
17
  const getStyles = (0, _mantine_core.useStyles)({
18
18
  name: __staticSelector || "ResourcesSchedule",
19
19
  classes: require_ResourcesSchedule_module.default,
@@ -61,6 +61,11 @@ const ResourcesSchedule = (0, _mantine_core.factory)((_props) => {
61
61
  withDragSlotSelect,
62
62
  onSlotDragEnd,
63
63
  onExternalEventDrop,
64
+ canDropEvent,
65
+ canDropExternalEvent,
66
+ canResizeEventTo,
67
+ preventEventOverlap,
68
+ onEventPlacementRejected,
64
69
  recurrenceExpansionLimit,
65
70
  mode
66
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ResourcesSchedule.cjs","names":["factory","useProps","useStyles","useUncontrolled","ResourcesDayView","ResourcesWeekView","ResourcesMonthView","Box","classes"],"sources":["../../../src/components/ResourcesSchedule/ResourcesSchedule.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateStringValue,\n DateTimeStringValue,\n ScheduleEventData,\n ScheduleMode,\n ScheduleResourceData,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n ResourcesDayView,\n ResourcesDayViewProps,\n ResourcesDayViewStylesNames,\n} from '../ResourcesDayView/ResourcesDayView';\nimport {\n ResourcesMonthView,\n ResourcesMonthViewProps,\n ResourcesMonthViewStylesNames,\n} from '../ResourcesMonthView/ResourcesMonthView';\nimport {\n ResourcesWeekView,\n ResourcesWeekViewProps,\n ResourcesWeekViewStylesNames,\n} from '../ResourcesWeekView/ResourcesWeekView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport classes from './ResourcesSchedule.module.css';\n\nexport type ResourcesScheduleStylesNames =\n | 'root'\n | ResourcesDayViewStylesNames\n | ResourcesWeekViewStylesNames\n | ResourcesMonthViewStylesNames;\n\nexport type ResourcesScheduleViewLevel = 'day' | 'week' | 'month';\n\ntype ResourcesScheduleCommonProps =\n | 'date'\n | 'onDateChange'\n | 'resources'\n | 'events'\n | 'locale'\n | 'radius'\n | 'labels'\n | 'renderEventBody'\n | 'renderResourceLabel'\n | 'withEventsDragAndDrop'\n | 'onEventDrop'\n | 'canDragEvent'\n | 'onEventDragStart'\n | 'onEventDragEnd'\n | 'onTimeSlotClick'\n | 'onEventClick'\n | 'onDayClick'\n | 'withDragSlotSelect'\n | 'onSlotDragEnd'\n | 'view'\n | 'onViewChange'\n | 'mode'\n | 'onExternalEventDrop'\n | 'withEventResize'\n | 'onEventResize'\n | 'canResizeEvent'\n | 'recurrenceExpansionLimit'\n | 'withInteractiveBackgroundEvents';\n\ntype ResourcesScheduleViewProps<T> = Partial<Omit<T, ResourcesScheduleCommonProps>>;\n\nexport interface ResourcesScheduleProps\n extends BoxProps, StylesApiProps<ResourcesScheduleFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** List of resources to display */\n resources: ScheduleResourceData[];\n\n /** Current date to display (controlled) */\n date?: Date | DateStringValue;\n\n /** Default date (uncontrolled) */\n defaultDate?: Date | DateStringValue;\n\n /** Called when date changes via navigation */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Current view level (controlled) */\n view?: ResourcesScheduleViewLevel;\n\n /** Default view level (uncontrolled) @default 'day' */\n defaultView?: ResourcesScheduleViewLevel;\n\n /** Called when view level changes */\n onViewChange?: (view: ResourcesScheduleViewLevel) => void;\n\n /** Events to display across all views */\n events?: ScheduleEventData[];\n\n /** Locale for date formatting */\n locale?: string;\n\n /** Key of theme.radius or any valid CSS value to set border-radius */\n radius?: MantineRadius;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Custom event body renderer */\n renderEventBody?: RenderEventBody;\n\n /** Custom resource label renderer */\n renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n /** Enable drag and drop for events @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped */\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 /** 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 */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n\n /** Called when day is clicked in month view */\n onDayClick?: (data: {\n date: DateStringValue;\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, enables drag-to-select slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a slot range is selected by dragging */\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 edges, resizing snaps to whole days in month view @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 /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day` and `week` views only – `ResourcesMonthView` does not render background events separately. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */\n withInteractiveBackgroundEvents?: boolean;\n\n /** Max number of generated recurring instances @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Props specific to ResourcesDayView */\n dayViewProps?: ResourcesScheduleViewProps<ResourcesDayViewProps>;\n\n /** Props specific to ResourcesWeekView */\n weekViewProps?: ResourcesScheduleViewProps<ResourcesWeekViewProps>;\n\n /** Props specific to ResourcesMonthView */\n monthViewProps?: ResourcesScheduleViewProps<ResourcesMonthViewProps>;\n}\n\nexport type ResourcesScheduleFactory = Factory<{\n props: ResourcesScheduleProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ResourcesScheduleProps> = {\n defaultView: 'day',\n mode: 'default',\n};\n\nexport const ResourcesSchedule = factory<ResourcesScheduleFactory>((_props) => {\n const props = useProps('ResourcesSchedule', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n resources,\n date,\n defaultDate,\n onDateChange,\n view,\n defaultView,\n onViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n renderResourceLabel,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n withInteractiveBackgroundEvents,\n recurrenceExpansionLimit,\n mode,\n dayViewProps,\n weekViewProps,\n monthViewProps,\n __staticSelector,\n mod,\n ...others\n } = props;\n\n const getStyles = useStyles<ResourcesScheduleFactory>({\n name: __staticSelector || 'ResourcesSchedule',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n });\n\n const [_view, _setView] = useUncontrolled<ResourcesScheduleViewLevel>({\n value: view,\n defaultValue: defaultView,\n onChange: onViewChange,\n });\n\n const [_date, _setDate] = useUncontrolled<Date | DateStringValue>({\n value: date,\n defaultValue: defaultDate ?? new Date(),\n });\n\n const handleDateChange = (newDate: DateStringValue) => {\n _setDate(newDate);\n onDateChange?.(newDate);\n };\n\n const handleViewChange = (newView: ScheduleViewLevel) => {\n if (newView === 'day' || newView === 'week' || newView === 'month') {\n _setView(newView);\n }\n };\n\n const commonProps = {\n resources,\n date: _date,\n onDateChange: handleDateChange,\n onViewChange: handleViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n renderResourceLabel,\n withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n recurrenceExpansionLimit,\n mode,\n };\n\n const content = (() => {\n switch (_view) {\n case 'day':\n return (\n <ResourcesDayView\n {...commonProps}\n onTimeSlotClick={onTimeSlotClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n withInteractiveBackgroundEvents={\n mode === 'static' ? false : withInteractiveBackgroundEvents\n }\n {...dayViewProps}\n />\n );\n case 'week':\n return (\n <ResourcesWeekView\n {...commonProps}\n onTimeSlotClick={onTimeSlotClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n withInteractiveBackgroundEvents={\n mode === 'static' ? false : withInteractiveBackgroundEvents\n }\n {...weekViewProps}\n />\n );\n case 'month':\n return (\n <ResourcesMonthView\n {...commonProps}\n onDayClick={onDayClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n {...monthViewProps}\n />\n );\n default:\n return null;\n }\n })();\n\n return (\n <Box {...getStyles('root')} mod={mod} {...others}>\n {content}\n </Box>\n );\n});\n\nResourcesSchedule.displayName = '@mantine/schedule/ResourcesSchedule';\nResourcesSchedule.classes = classes;\n\nexport namespace ResourcesSchedule {\n export type Props = ResourcesScheduleProps;\n export type StylesNames = ResourcesScheduleStylesNames;\n export type Factory = ResourcesScheduleFactory;\n export type ViewLevel = ResourcesScheduleViewLevel;\n}\n"],"mappings":";;;;;;;;;AAyNA,MAAM,eAAgD;CACpD,aAAa;CACb,MAAM;AACR;AAEA,MAAa,qBAAA,GAAoBA,cAAAA,QAAAA,EAAmC,WAAW;CAC7E,MAAM,SAAA,GAAQC,cAAAA,SAAAA,CAAS,qBAAqB,cAAc,MAAM;CAChE,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,WACA,MACA,aACA,cACA,MACA,aACA,cACA,QACA,QACA,QACA,QACA,iBACA,qBACA,uBACA,aACA,cACA,kBACA,gBACA,iBACA,YACA,cACA,oBACA,eACA,qBACA,iBACA,eACA,gBACA,iCACA,0BACA,MACA,cACA,eACA,gBACA,kBACA,KACA,GAAG,WACD;CAEJ,MAAM,aAAA,GAAYC,cAAAA,UAAAA,CAAoC;EACpD,MAAM,oBAAoB;EAC1B,SAAA,iCAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAYC,eAAAA,gBAAAA,CAA4C;EACpE,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAYA,eAAAA,gBAAAA,CAAwC;EAChE,OAAO;EACP,cAAc,+BAAe,IAAI,KAAK;CACxC,CAAC;CAED,MAAM,oBAAoB,YAA6B;EACrD,SAAS,OAAO;EAChB,eAAe,OAAO;CACxB;CAEA,MAAM,oBAAoB,YAA+B;EACvD,IAAI,YAAY,SAAS,YAAY,UAAU,YAAY,SACzD,SAAS,OAAO;CAEpB;CAEA,MAAM,cAAc;EAClB;EACA,MAAM;EACN,cAAc;EACd,cAAc;EACd;EACA;EACA;EACA;EACA;EACA;EACA,uBAAuB,SAAS,WAAW,QAAQ;EACnD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,MAAM,iBAAiB;EACrB,QAAQ,OAAR;GACE,KAAK,OACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACE,GAAI;IACa;IACjB,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,iCACE,SAAS,WAAW,QAAQ;IAE9B,GAAI;GACL,CAAA;GAEL,KAAK,QACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,0BAAAA,mBAAD;IACE,GAAI;IACa;IACjB,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,iCACE,SAAS,WAAW,QAAQ;IAE9B,GAAI;GACL,CAAA;GAEL,KAAK,SACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,2BAAAA,oBAAD;IACE,GAAI;IACQ;IACZ,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,GAAI;GACL,CAAA;GAEL,SACE,OAAO;EACX;CACF,EAAA,CAAG;CAEH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,KAAD;EAAK,GAAI,UAAU,MAAM;EAAQ;EAAK,GAAI;EACvC,UAAA;CACE,CAAA;AAET,CAAC;AAED,kBAAkB,cAAc;AAChC,kBAAkB,UAAUC,iCAAAA"}
1
+ {"version":3,"file":"ResourcesSchedule.cjs","names":["factory","useProps","useStyles","useUncontrolled","ResourcesDayView","ResourcesWeekView","ResourcesMonthView","Box","classes"],"sources":["../../../src/components/ResourcesSchedule/ResourcesSchedule.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateStringValue,\n DateTimeStringValue,\n PreventEventOverlap,\n ScheduleCanDropEventData,\n ScheduleCanDropExternalEventData,\n ScheduleCanResizeEventToData,\n ScheduleEventData,\n ScheduleEventPlacementRejectedData,\n ScheduleMode,\n ScheduleResourceData,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n ResourcesDayView,\n ResourcesDayViewProps,\n ResourcesDayViewStylesNames,\n} from '../ResourcesDayView/ResourcesDayView';\nimport {\n ResourcesMonthView,\n ResourcesMonthViewProps,\n ResourcesMonthViewStylesNames,\n} from '../ResourcesMonthView/ResourcesMonthView';\nimport {\n ResourcesWeekView,\n ResourcesWeekViewProps,\n ResourcesWeekViewStylesNames,\n} from '../ResourcesWeekView/ResourcesWeekView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport classes from './ResourcesSchedule.module.css';\n\nexport type ResourcesScheduleStylesNames =\n | 'root'\n | ResourcesDayViewStylesNames\n | ResourcesWeekViewStylesNames\n | ResourcesMonthViewStylesNames;\n\nexport type ResourcesScheduleViewLevel = 'day' | 'week' | 'month';\n\ntype ResourcesScheduleCommonProps =\n | 'date'\n | 'onDateChange'\n | 'resources'\n | 'events'\n | 'locale'\n | 'radius'\n | 'labels'\n | 'renderEventBody'\n | 'renderResourceLabel'\n | 'withEventsDragAndDrop'\n | 'onEventDrop'\n | 'canDragEvent'\n | 'onEventDragStart'\n | 'onEventDragEnd'\n | 'onTimeSlotClick'\n | 'onEventClick'\n | 'onDayClick'\n | 'withDragSlotSelect'\n | 'onSlotDragEnd'\n | 'view'\n | 'onViewChange'\n | 'mode'\n | 'onExternalEventDrop'\n | 'withEventResize'\n | 'onEventResize'\n | 'canResizeEvent'\n | 'canDropEvent'\n | 'canDropExternalEvent'\n | 'canResizeEventTo'\n | 'preventEventOverlap'\n | 'onEventPlacementRejected'\n | 'recurrenceExpansionLimit'\n | 'withInteractiveBackgroundEvents';\n\ntype ResourcesScheduleViewProps<T> = Partial<Omit<T, ResourcesScheduleCommonProps>>;\n\nexport interface ResourcesScheduleProps\n extends BoxProps, StylesApiProps<ResourcesScheduleFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** List of resources to display */\n resources: ScheduleResourceData[];\n\n /** Current date to display (controlled) */\n date?: Date | DateStringValue;\n\n /** Default date (uncontrolled) */\n defaultDate?: Date | DateStringValue;\n\n /** Called when date changes via navigation */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Current view level (controlled) */\n view?: ResourcesScheduleViewLevel;\n\n /** Default view level (uncontrolled) @default 'day' */\n defaultView?: ResourcesScheduleViewLevel;\n\n /** Called when view level changes */\n onViewChange?: (view: ResourcesScheduleViewLevel) => void;\n\n /** Events to display across all views */\n events?: ScheduleEventData[];\n\n /** Locale for date formatting */\n locale?: string;\n\n /** Key of theme.radius or any valid CSS value to set border-radius */\n radius?: MantineRadius;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Custom event body renderer */\n renderEventBody?: RenderEventBody;\n\n /** Custom resource label renderer */\n renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n /** Enable drag and drop for events @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped */\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 /** 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 */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n\n /** Called when day is clicked in month view */\n onDayClick?: (data: {\n date: DateStringValue;\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, enables drag-to-select slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a slot range is selected by dragging */\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 edges, resizing snaps to whole days in month view @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 /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day` and `week` views only – `ResourcesMonthView` does not render background events separately. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */\n withInteractiveBackgroundEvents?: boolean;\n\n /** Max number of generated recurring instances @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Props specific to ResourcesDayView */\n dayViewProps?: ResourcesScheduleViewProps<ResourcesDayViewProps>;\n\n /** Props specific to ResourcesWeekView */\n weekViewProps?: ResourcesScheduleViewProps<ResourcesWeekViewProps>;\n\n /** Props specific to ResourcesMonthView */\n monthViewProps?: ResourcesScheduleViewProps<ResourcesMonthViewProps>;\n}\n\nexport type ResourcesScheduleFactory = Factory<{\n props: ResourcesScheduleProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ResourcesScheduleProps> = {\n defaultView: 'day',\n mode: 'default',\n};\n\nexport const ResourcesSchedule = factory<ResourcesScheduleFactory>((_props) => {\n const props = useProps('ResourcesSchedule', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n resources,\n date,\n defaultDate,\n onDateChange,\n view,\n defaultView,\n onViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n renderResourceLabel,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n canDropEvent,\n canDropExternalEvent,\n canResizeEventTo,\n preventEventOverlap,\n onEventPlacementRejected,\n withInteractiveBackgroundEvents,\n recurrenceExpansionLimit,\n mode,\n dayViewProps,\n weekViewProps,\n monthViewProps,\n __staticSelector,\n mod,\n ...others\n } = props;\n\n const getStyles = useStyles<ResourcesScheduleFactory>({\n name: __staticSelector || 'ResourcesSchedule',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n });\n\n const [_view, _setView] = useUncontrolled<ResourcesScheduleViewLevel>({\n value: view,\n defaultValue: defaultView,\n onChange: onViewChange,\n });\n\n const [_date, _setDate] = useUncontrolled<Date | DateStringValue>({\n value: date,\n defaultValue: defaultDate ?? new Date(),\n });\n\n const handleDateChange = (newDate: DateStringValue) => {\n _setDate(newDate);\n onDateChange?.(newDate);\n };\n\n const handleViewChange = (newView: ScheduleViewLevel) => {\n if (newView === 'day' || newView === 'week' || newView === 'month') {\n _setView(newView);\n }\n };\n\n const commonProps = {\n resources,\n date: _date,\n onDateChange: handleDateChange,\n onViewChange: handleViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n renderResourceLabel,\n withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n canDropEvent,\n canDropExternalEvent,\n canResizeEventTo,\n preventEventOverlap,\n onEventPlacementRejected,\n recurrenceExpansionLimit,\n mode,\n };\n\n const content = (() => {\n switch (_view) {\n case 'day':\n return (\n <ResourcesDayView\n {...commonProps}\n onTimeSlotClick={onTimeSlotClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n withInteractiveBackgroundEvents={\n mode === 'static' ? false : withInteractiveBackgroundEvents\n }\n {...dayViewProps}\n />\n );\n case 'week':\n return (\n <ResourcesWeekView\n {...commonProps}\n onTimeSlotClick={onTimeSlotClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n withInteractiveBackgroundEvents={\n mode === 'static' ? false : withInteractiveBackgroundEvents\n }\n {...weekViewProps}\n />\n );\n case 'month':\n return (\n <ResourcesMonthView\n {...commonProps}\n onDayClick={onDayClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n {...monthViewProps}\n />\n );\n default:\n return null;\n }\n })();\n\n return (\n <Box {...getStyles('root')} mod={mod} {...others}>\n {content}\n </Box>\n );\n});\n\nResourcesSchedule.displayName = '@mantine/schedule/ResourcesSchedule';\nResourcesSchedule.classes = classes;\n\nexport namespace ResourcesSchedule {\n export type Props = ResourcesScheduleProps;\n export type StylesNames = ResourcesScheduleStylesNames;\n export type Factory = ResourcesScheduleFactory;\n export type ViewLevel = ResourcesScheduleViewLevel;\n}\n"],"mappings":";;;;;;;;;AAkPA,MAAM,eAAgD;CACpD,aAAa;CACb,MAAM;AACR;AAEA,MAAa,qBAAA,GAAoBA,cAAAA,QAAAA,EAAmC,WAAW;CAC7E,MAAM,SAAA,GAAQC,cAAAA,SAAAA,CAAS,qBAAqB,cAAc,MAAM;CAChE,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,WACA,MACA,aACA,cACA,MACA,aACA,cACA,QACA,QACA,QACA,QACA,iBACA,qBACA,uBACA,aACA,cACA,kBACA,gBACA,iBACA,YACA,cACA,oBACA,eACA,qBACA,iBACA,eACA,gBACA,cACA,sBACA,kBACA,qBACA,0BACA,iCACA,0BACA,MACA,cACA,eACA,gBACA,kBACA,KACA,GAAG,WACD;CAEJ,MAAM,aAAA,GAAYC,cAAAA,UAAAA,CAAoC;EACpD,MAAM,oBAAoB;EAC1B,SAAA,iCAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAYC,eAAAA,gBAAAA,CAA4C;EACpE,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAYA,eAAAA,gBAAAA,CAAwC;EAChE,OAAO;EACP,cAAc,+BAAe,IAAI,KAAK;CACxC,CAAC;CAED,MAAM,oBAAoB,YAA6B;EACrD,SAAS,OAAO;EAChB,eAAe,OAAO;CACxB;CAEA,MAAM,oBAAoB,YAA+B;EACvD,IAAI,YAAY,SAAS,YAAY,UAAU,YAAY,SACzD,SAAS,OAAO;CAEpB;CAEA,MAAM,cAAc;EAClB;EACA,MAAM;EACN,cAAc;EACd,cAAc;EACd;EACA;EACA;EACA;EACA;EACA;EACA,uBAAuB,SAAS,WAAW,QAAQ;EACnD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,MAAM,iBAAiB;EACrB,QAAQ,OAAR;GACE,KAAK,OACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACE,GAAI;IACa;IACjB,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,iCACE,SAAS,WAAW,QAAQ;IAE9B,GAAI;GACL,CAAA;GAEL,KAAK,QACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,0BAAAA,mBAAD;IACE,GAAI;IACa;IACjB,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,iCACE,SAAS,WAAW,QAAQ;IAE9B,GAAI;GACL,CAAA;GAEL,KAAK,SACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,2BAAAA,oBAAD;IACE,GAAI;IACQ;IACZ,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,GAAI;GACL,CAAA;GAEL,SACE,OAAO;EACX;CACF,EAAA,CAAG;CAEH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,KAAD;EAAK,GAAI,UAAU,MAAM;EAAQ;EAAK,GAAI;EACvC,UAAA;CACE,CAAA;AAET,CAAC;AAED,kBAAkB,cAAc;AAChC,kBAAkB,UAAUC,iCAAAA"}
@@ -14,6 +14,7 @@ const require_get_day_position = require("../../utils/get-day-position/get-day-p
14
14
  const require_get_time_axis_event_style = require("../../utils/get-time-axis-event-style/get-time-axis-event-style.cjs");
15
15
  const require_calculate_drop_time = require("../../utils/calculate-drop-time/calculate-drop-time.cjs");
16
16
  const require_get_business_hours_mod = require("../../utils/get-business-hours-mod/get-business-hours-mod.cjs");
17
+ const require_expand_recurring_events = require("../../utils/expand-recurring-events/expand-recurring-events.cjs");
17
18
  const require_get_ordered_resources = require("../../utils/get-ordered-resources/get-ordered-resources.cjs");
18
19
  const require_handle_resources_grid_key_down = require("../../utils/handle-resources-grid-key-down/handle-resources-grid-key-down.cjs");
19
20
  const require_get_group_to_resource_id_map = require("../../utils/get-group-to-resource-id-map/get-group-to-resource-id-map.cjs");
@@ -69,7 +70,7 @@ const varsResolver = (0, _mantine_core.createVarsResolver)((_theme, { radius, sl
69
70
  } }));
70
71
  const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
71
72
  const props = (0, _mantine_core.useProps)("ResourcesWeekView", defaultProps, _props);
72
- const { classNames, className, style, styles, unstyled, attributes, vars, startTime, endTime, date, onDateChange, resources, intervalMinutes, minEventSize, slotLabelFormat, radius, startScrollDateTime, scrollAreaProps, locale, withCurrentTimeIndicator: _withCurrentTimeIndicator, withCurrentTimeBubble, getCurrentTime, __staticSelector, withHeader, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, weekLabelFormat, renderWeekLabel, events, slotWidth, rowHeight, labels, highlightBusinessHours, businessHours, renderEventBody, renderEvent, renderResourceLabel, groups, renderGroupLabel, groupLabelWidth, withEventsDragAndDrop, onEventDrop, canDragEvent, eventDragInterval, onEventDragStart, onEventDragEnd, withEventResize, onEventResize, canResizeEvent, eventResizeInterval, onTimeSlotClick, onEventClick, withInteractiveBackgroundEvents, withDragSlotSelect, onSlotDragEnd, mode, onExternalEventDrop, recurrenceExpansionLimit, maxEventsPerTimeSlot: _maxEventsPerTimeSlot, moreEventsProps, firstDayOfWeek, weekendDays, withWeekendDays, weekdayFormat, highlightToday, ...others } = props;
73
+ const { classNames, className, style, styles, unstyled, attributes, vars, startTime, endTime, date, onDateChange, resources, intervalMinutes, minEventSize, slotLabelFormat, radius, startScrollDateTime, scrollAreaProps, locale, withCurrentTimeIndicator: _withCurrentTimeIndicator, withCurrentTimeBubble, getCurrentTime, __staticSelector, withHeader, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, weekLabelFormat, renderWeekLabel, events, slotWidth, rowHeight, labels, highlightBusinessHours, businessHours, renderEventBody, renderEvent, renderResourceLabel, groups, renderGroupLabel, groupLabelWidth, withEventsDragAndDrop, onEventDrop, canDragEvent, eventDragInterval, onEventDragStart, onEventDragEnd, withEventResize, onEventResize, canResizeEvent, canDropEvent, canDropExternalEvent, canResizeEventTo, preventEventOverlap, onEventPlacementRejected, eventResizeInterval, onTimeSlotClick, onEventClick, withInteractiveBackgroundEvents, withDragSlotSelect, onSlotDragEnd, mode, onExternalEventDrop, recurrenceExpansionLimit, maxEventsPerTimeSlot: _maxEventsPerTimeSlot, moreEventsProps, firstDayOfWeek, weekendDays, withWeekendDays, weekdayFormat, highlightToday, ...others } = props;
73
74
  const maxEventsPerTimeSlot = _maxEventsPerTimeSlot !== void 0 ? Math.max(1, _maxEventsPerTimeSlot) : void 0;
74
75
  const getStyles = (0, _mantine_core.useStyles)({
75
76
  name: __staticSelector,
@@ -150,40 +151,31 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
150
151
  offset: 0,
151
152
  size: 0
152
153
  });
153
- const handleExternalDrop = (0, react.useCallback)((e, target) => {
154
- if (!onExternalEventDrop) return;
154
+ const getExternalDropDateTime = (0, react.useCallback)((target) => {
155
155
  const dayIndex = Math.floor(target.slotIndex / totalSlotsPerDay);
156
156
  const slotInDay = target.slotIndex % totalSlotsPerDay;
157
157
  const slotDay = weekdays[dayIndex];
158
- if (slotDay) {
159
- const slotDate = (0, dayjs.default)(slotDay).format("YYYY-MM-DD");
160
- const slotTime = slots[slotInDay].startTime;
161
- let dropDateTime = `${slotDate} ${slotTime}`;
162
- if (eventDragInterval != null) {
163
- const { start } = require_calculate_drop_time.calculateDropTime({
164
- draggedEvent: {
165
- start: dropDateTime,
166
- end: dropDateTime
167
- },
168
- targetDate: slotDate,
169
- targetSlotTime: slotTime,
170
- intervalMinutes,
171
- dragIntervalMinutes: eventDragInterval,
172
- slotOffset: dragOffsetRef.current.offset,
173
- slotSize: dragOffsetRef.current.size,
174
- startTime,
175
- endTime
176
- });
177
- dropDateTime = (0, dayjs.default)(start).format("YYYY-MM-DD HH:mm:ss");
178
- }
179
- onExternalEventDrop({
180
- dataTransfer: e.dataTransfer,
181
- dropDateTime,
182
- resourceId: target.resourceId
183
- });
184
- }
158
+ if (!slotDay) return null;
159
+ const slotDate = (0, dayjs.default)(slotDay).format("YYYY-MM-DD");
160
+ const slotTime = slots[slotInDay].startTime;
161
+ const dropDateTime = `${slotDate} ${slotTime}`;
162
+ if (eventDragInterval == null) return dropDateTime;
163
+ const { start } = require_calculate_drop_time.calculateDropTime({
164
+ draggedEvent: {
165
+ start: dropDateTime,
166
+ end: dropDateTime
167
+ },
168
+ targetDate: slotDate,
169
+ targetSlotTime: slotTime,
170
+ intervalMinutes,
171
+ dragIntervalMinutes: eventDragInterval,
172
+ slotOffset: dragOffsetRef.current.offset,
173
+ slotSize: dragOffsetRef.current.size,
174
+ startTime,
175
+ endTime
176
+ });
177
+ return (0, dayjs.default)(start).format("YYYY-MM-DD HH:mm:ss");
185
178
  }, [
186
- onExternalEventDrop,
187
179
  slots,
188
180
  weekdays,
189
181
  totalSlotsPerDay,
@@ -192,6 +184,16 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
192
184
  startTime,
193
185
  endTime
194
186
  ]);
187
+ const handleExternalDrop = (0, react.useCallback)((e, target) => {
188
+ if (!onExternalEventDrop) return;
189
+ const dropDateTime = getExternalDropDateTime(target);
190
+ if (dropDateTime === null) return;
191
+ onExternalEventDrop({
192
+ dataTransfer: e.dataTransfer,
193
+ dropDateTime,
194
+ resourceId: target.resourceId
195
+ });
196
+ }, [onExternalEventDrop, getExternalDropDateTime]);
195
197
  const lastDropResourceId = (0, react.useRef)(void 0);
196
198
  const getDropTimeForSlot = (target, draggedEvent) => {
197
199
  const dayIndex = Math.floor(target.slotIndex / totalSlotsPerDay);
@@ -216,6 +218,16 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
216
218
  resourceId: lastDropResourceId.current
217
219
  });
218
220
  }, [onEventDrop]);
221
+ const expandedEvents = (0, react.useMemo)(() => require_expand_recurring_events.expandRecurringEvents({
222
+ events,
223
+ rangeStart: (0, dayjs.default)(weekdays[0]).startOf("day").toDate(),
224
+ rangeEnd: (0, dayjs.default)(weekdays[weekdays.length - 1]).endOf("day").toDate(),
225
+ expansionLimit: recurrenceExpansionLimit
226
+ }), [
227
+ events,
228
+ weekdays,
229
+ recurrenceExpansionLimit
230
+ ]);
219
231
  const dragDrop = require_use_drag_drop_handlers.useDragDropHandlers({
220
232
  enabled: withEventsDragAndDrop,
221
233
  mode,
@@ -227,7 +239,14 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
227
239
  lastDropResourceId.current = target.resourceId;
228
240
  return getDropTimeForSlot(target, draggedEvent);
229
241
  },
230
- onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0
242
+ onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0,
243
+ events: expandedEvents,
244
+ preventEventOverlap,
245
+ canDropEvent,
246
+ canDropExternalEvent,
247
+ onEventPlacementRejected,
248
+ getExternalDropDateTime,
249
+ getTargetResourceId: (target) => target.resourceId
231
250
  });
232
251
  const updateDragPreview = (target) => {
233
252
  const draggedEvent = dragDrop.dragContextValue.draggedEvent;
@@ -268,6 +287,10 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
268
287
  resizeIntervalMinutes: eventResizeInterval,
269
288
  onEventResize,
270
289
  canResizeEvent,
290
+ events: expandedEvents,
291
+ preventEventOverlap,
292
+ canResizeEventTo,
293
+ onEventPlacementRejected,
271
294
  withBackgroundEvents: withInteractiveBackgroundEvents
272
295
  });
273
296
  const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static";
@@ -489,6 +512,7 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
489
512
  nowrap: true,
490
513
  draggable: isDraggable,
491
514
  isResizing: isThisEventResizing,
515
+ mod: { invalid: isThisEventResizing && !eventResize.resizeValid },
492
516
  renderEventBody,
493
517
  renderEvent,
494
518
  radius,
@@ -661,31 +685,34 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
661
685
  scrolledX,
662
686
  groupInfo: hasGroups ? resourceGroupMap[resourceIndex] : void 0,
663
687
  allDayCount: maxAllDayCount,
664
- children: [eventNodes, dragDrop.dragPreview?.target.resourceId === resource.id && dragDrop.dragContextValue.draggedEvent && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.Box, { ...getStyles("resourcesWeekViewDragPreview", { style: (() => {
665
- const previewDayIndex = Math.floor(dragDrop.dragPreview.target.slotIndex / totalSlotsPerDay);
666
- const { top, height } = require_get_day_position.getDayPosition({
667
- event: {
668
- ...dragDrop.dragContextValue.draggedEvent,
669
- start: dragDrop.dragPreview.start,
670
- end: dragDrop.dragPreview.end
671
- },
672
- startTime,
673
- endTime,
674
- intervalMinutes
675
- });
676
- const eventLeft = previewDayIndex / weekdays.length * 100 + top / 100 * dayWidthPercent;
677
- const eventWidth = height / 100 * dayWidthPercent;
678
- return {
679
- position: "absolute",
680
- insetBlockStart: 0,
681
- insetBlockEnd: 0,
682
- ...require_get_time_axis_event_style.getTimeAxisEventStyle({
683
- start: eventLeft,
684
- span: eventWidth,
685
- axis: "horizontal"
686
- })
687
- };
688
- })() }) })]
688
+ children: [eventNodes, dragDrop.dragPreview?.target.resourceId === resource.id && dragDrop.dragContextValue.draggedEvent && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.Box, {
689
+ mod: { invalid: !dragDrop.dropValid },
690
+ ...getStyles("resourcesWeekViewDragPreview", { style: (() => {
691
+ const previewDayIndex = Math.floor(dragDrop.dragPreview.target.slotIndex / totalSlotsPerDay);
692
+ const { top, height } = require_get_day_position.getDayPosition({
693
+ event: {
694
+ ...dragDrop.dragContextValue.draggedEvent,
695
+ start: dragDrop.dragPreview.start,
696
+ end: dragDrop.dragPreview.end
697
+ },
698
+ startTime,
699
+ endTime,
700
+ intervalMinutes
701
+ });
702
+ const eventLeft = previewDayIndex / weekdays.length * 100 + top / 100 * dayWidthPercent;
703
+ const eventWidth = height / 100 * dayWidthPercent;
704
+ return {
705
+ position: "absolute",
706
+ insetBlockStart: 0,
707
+ insetBlockEnd: 0,
708
+ ...require_get_time_axis_event_style.getTimeAxisEventStyle({
709
+ start: eventLeft,
710
+ span: eventWidth,
711
+ axis: "horizontal"
712
+ })
713
+ };
714
+ })() })
715
+ })]
689
716
  }, resource.id);
690
717
  });
691
718
  const headerLabel = require_get_week_label.getWeekLabel({