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