@mantine/schedule 9.0.0-alpha.6 → 9.0.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.
- package/README.md +2 -2
- package/cjs/components/DayView/DayView.cjs +27 -7
- package/cjs/components/DayView/DayView.cjs.map +1 -1
- package/cjs/components/MobileMonthView/MobileMonthView.cjs +1 -10
- package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
- package/cjs/components/MobileMonthView/MobileMonthView.module.cjs +2 -1
- package/cjs/components/MobileMonthView/MobileMonthView.module.cjs.map +1 -1
- package/cjs/components/MonthView/MonthView.cjs +1 -1
- package/cjs/components/MonthView/MonthView.cjs.map +1 -1
- package/cjs/components/Schedule/Schedule.cjs.map +1 -1
- package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs +2 -2
- package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs.map +1 -1
- package/cjs/components/WeekView/WeekView.cjs +17 -4
- package/cjs/components/WeekView/WeekView.cjs.map +1 -1
- package/cjs/components/WeekView/WeekViewDay.cjs +14 -3
- package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
- package/cjs/components/YearView/YearView.cjs +1 -1
- package/cjs/components/YearView/YearView.cjs.map +1 -1
- package/cjs/hooks/use-drag-drop-handlers.cjs +6 -1
- package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
- package/cjs/hooks/use-event-resize.cjs +7 -2
- package/cjs/hooks/use-event-resize.cjs.map +1 -1
- package/esm/components/DayView/DayView.mjs +27 -7
- package/esm/components/DayView/DayView.mjs.map +1 -1
- package/esm/components/MobileMonthView/MobileMonthView.mjs +1 -10
- package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
- package/esm/components/MobileMonthView/MobileMonthView.module.mjs +2 -1
- package/esm/components/MobileMonthView/MobileMonthView.module.mjs.map +1 -1
- package/esm/components/MonthView/MonthView.mjs +1 -1
- package/esm/components/MonthView/MonthView.mjs.map +1 -1
- package/esm/components/Schedule/Schedule.mjs.map +1 -1
- package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs +2 -2
- package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs.map +1 -1
- package/esm/components/WeekView/WeekView.mjs +17 -4
- package/esm/components/WeekView/WeekView.mjs.map +1 -1
- package/esm/components/WeekView/WeekViewDay.mjs +14 -3
- package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
- package/esm/components/YearView/YearView.mjs +1 -1
- package/esm/components/YearView/YearView.mjs.map +1 -1
- package/esm/hooks/use-drag-drop-handlers.mjs +6 -1
- package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
- package/esm/hooks/use-event-resize.mjs +7 -2
- package/esm/hooks/use-event-resize.mjs.map +1 -1
- package/lib/components/DayView/DayView.d.ts +22 -3
- package/lib/components/MonthView/MonthView.d.ts +6 -1
- package/lib/components/Schedule/Schedule.d.ts +17 -3
- package/lib/components/WeekView/WeekView.d.ts +22 -3
- package/lib/components/WeekView/WeekViewDay.d.ts +7 -2
- package/lib/hooks/use-drag-drop-handlers.d.ts +6 -1
- package/lib/hooks/use-event-resize.d.ts +15 -2
- package/package.json +4 -4
- package/styles.css +12 -0
- package/styles.layer.css +12 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonthView.cjs","names":["getMonthRange","getMonthViewEvents","expandRecurringEvents","useDragDropHandlers","calculateMonthDropDate","useSlotDragSelect","getMonthDays","isSameMonth","getWeekdaysNames","UnstyledButton","getWeekNumber","Box","ScheduleEvent","MoreEvents","toDateString","ScheduleHeaderBase","ScrollArea","DragContext","classes"],"sources":["../../../src/components/MonthView/MonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useRef } 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 useMantineTheme,\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 { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps } 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 { getMonthViewEvents } from './get-month-view-events/get-month-view-events';\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\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 /** 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?: (\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, 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\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 ? 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 consistentWeeks: true,\n highlightToday: true,\n withOutsideDays: true,\n withHeader: true,\n weekdayFormat: 'ddd',\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n mode: 'default',\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 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 withDragSlotSelect,\n onSlotDragEnd,\n labels,\n mode,\n scrollAreaProps,\n onExternalEventDrop,\n recurrenceExpansionLimit,\n maxEventsPerDay: _maxEventsPerDay,\n ...others\n } = props;\n\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 theme = useMantineTheme();\n const ctx = useDatesContext();\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 for (let dayIndex = 0; dayIndex < week.length; dayIndex++) {\n const day = week[dayIndex];\n const outside = !isSameMonth(date, day);\n if (!outside || withOutsideDays) {\n return { weekIndex, dayIndex };\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: ctx.getFirstDayOfWeek(firstDayOfWeek),\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.flat();\n\n const weeks = monthDays.map((week, weekIndex) => {\n if (!daysRef.current[weekIndex]) {\n daysRef.current[weekIndex] = [];\n }\n\n const days = week.map((day, dayIndex) => {\n const outside = !isSameMonth(date, day);\n const weekend = ctx.getWeekendDays(weekendDays).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 * 7 + 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 backgroundEventNodes = (monthEvents.backgroundByWeek[weekIndex] || []).map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: `bg-${event.id}-${weekIndex}`,\n ...getStyles('monthViewBackgroundEvent', {\n style: {\n left: `calc(${event.position.startOffset}% + 2px)`,\n width: `calc(${event.position.width}% - 3px)`,\n },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n return <Box {...bgEventProps} />;\n });\n\n const rowHeightPercent = 100 / maxEventsPerDay;\n\n const events = (monthEvents.groupedByWeek[weekIndex] || [])\n .filter((event) => event.position.row < maxEventsPerDay)\n .map((event) => {\n const isDraggable = dragDrop.isDraggableEvent(event);\n\n return (\n <ScheduleEvent\n key={event.id}\n event={event}\n nowrap\n autoSize\n hanging={event.position.hanging}\n draggable={isDraggable}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n style={{\n position: 'absolute',\n top: `calc(${event.position.row * rowHeightPercent}% + 1px)`,\n left: `calc(${event.position.startOffset}% + 1px)`,\n width: `calc(${event.position.width}% - 2px)`,\n height: `calc(${rowHeightPercent}% - 2px)`,\n }}\n />\n );\n });\n\n const moreEventsNodes = week.map((day, dayIndex) => {\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 // Calculate position based on day's position within the week (each day is 1/7 of the week)\n const dayStartOffset = (dayIndex / 7) * 100;\n const dayWidth = (1 / 7) * 100;\n\n return (\n <MoreEvents\n key={`more-${day}`}\n events={dayEvents}\n moreEventsCount={hiddenEventsCount}\n mode={mode}\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 static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n },\n mod,\n ]}\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 />\n )}\n\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 </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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MonthView.cjs","names":["getMonthRange","getMonthViewEvents","expandRecurringEvents","useDragDropHandlers","calculateMonthDropDate","useSlotDragSelect","getMonthDays","isSameMonth","getWeekdaysNames","UnstyledButton","getWeekNumber","Box","ScheduleEvent","MoreEvents","toDateString","ScheduleHeaderBase","ScrollArea","DragContext","classes"],"sources":["../../../src/components/MonthView/MonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useRef } 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 useMantineTheme,\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 { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps } 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 { getMonthViewEvents } from './get-month-view-events/get-month-view-events';\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\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 /** 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, 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\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 consistentWeeks: true,\n highlightToday: true,\n withOutsideDays: true,\n withHeader: true,\n weekdayFormat: 'ddd',\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n mode: 'default',\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 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 withDragSlotSelect,\n onSlotDragEnd,\n labels,\n mode,\n scrollAreaProps,\n onExternalEventDrop,\n recurrenceExpansionLimit,\n maxEventsPerDay: _maxEventsPerDay,\n ...others\n } = props;\n\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 theme = useMantineTheme();\n const ctx = useDatesContext();\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 for (let dayIndex = 0; dayIndex < week.length; dayIndex++) {\n const day = week[dayIndex];\n const outside = !isSameMonth(date, day);\n if (!outside || withOutsideDays) {\n return { weekIndex, dayIndex };\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: ctx.getFirstDayOfWeek(firstDayOfWeek),\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.flat();\n\n const weeks = monthDays.map((week, weekIndex) => {\n if (!daysRef.current[weekIndex]) {\n daysRef.current[weekIndex] = [];\n }\n\n const days = week.map((day, dayIndex) => {\n const outside = !isSameMonth(date, day);\n const weekend = ctx.getWeekendDays(weekendDays).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 * 7 + 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 backgroundEventNodes = (monthEvents.backgroundByWeek[weekIndex] || []).map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: `bg-${event.id}-${weekIndex}`,\n ...getStyles('monthViewBackgroundEvent', {\n style: {\n left: `calc(${event.position.startOffset}% + 2px)`,\n width: `calc(${event.position.width}% - 3px)`,\n },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n return <Box {...bgEventProps} />;\n });\n\n const rowHeightPercent = 100 / maxEventsPerDay;\n\n const events = (monthEvents.groupedByWeek[weekIndex] || [])\n .filter((event) => event.position.row < maxEventsPerDay)\n .map((event) => {\n const isDraggable = dragDrop.isDraggableEvent(event);\n\n return (\n <ScheduleEvent\n key={event.id}\n event={event}\n nowrap\n autoSize\n hanging={event.position.hanging}\n draggable={isDraggable}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n style={{\n position: 'absolute',\n top: `calc(${event.position.row * rowHeightPercent}% + 1px)`,\n left: `calc(${event.position.startOffset}% + 1px)`,\n width: `calc(${event.position.width}% - 2px)`,\n height: `calc(${rowHeightPercent}% - 2px)`,\n }}\n />\n );\n });\n\n const moreEventsNodes = week.map((day, dayIndex) => {\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 // Calculate position based on day's position within the week (each day is 1/7 of the week)\n const dayStartOffset = (dayIndex / 7) * 100;\n const dayWidth = (1 / 7) * 100;\n\n return (\n <MoreEvents\n key={`more-${day}`}\n events={dayEvents}\n moreEventsCount={hiddenEventsCount}\n mode={mode}\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 static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n },\n mod,\n ]}\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 />\n )}\n\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 </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"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schedule.cjs","names":["DayView","WeekView","MonthView","YearView","MobileMonthView","Box","classes"],"sources":["../../../src/components/Schedule/Schedule.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 ScheduleViewLevel,\n} from '../../types';\nimport { DayView, DayViewProps, DayViewStylesNames } from '../DayView/DayView';\nimport {\n MobileMonthView,\n MobileMonthViewProps,\n MobileMonthViewStylesNames,\n} from '../MobileMonthView/MobileMonthView';\nimport { MonthView, MonthViewProps, MonthViewStylesNames } from '../MonthView/MonthView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport { WeekView, WeekViewProps, WeekViewStylesNames } from '../WeekView/WeekView';\nimport { YearView, YearViewProps, YearViewStylesNames } from '../YearView/YearView';\nimport classes from './Schedule.module.css';\n\nexport type ScheduleStylesNames =\n | 'root'\n | 'desktopView'\n | 'mobileView'\n | DayViewStylesNames\n | WeekViewStylesNames\n | MonthViewStylesNames\n | YearViewStylesNames\n | MobileMonthViewStylesNames;\n\nexport type ScheduleLayout = 'default' | 'responsive';\n\ntype ScheduleCommonProps =\n | 'date'\n | 'onDateChange'\n | 'events'\n | 'locale'\n | 'radius'\n | 'labels'\n | 'renderEventBody'\n | 'withEventsDragAndDrop'\n | 'onEventDrop'\n | 'canDragEvent'\n | 'onEventDragStart'\n | 'onEventDragEnd'\n | 'onTimeSlotClick'\n | 'onAllDaySlotClick'\n | 'onEventClick'\n | 'onDayClick'\n | 'onMonthClick'\n | 'withDragSlotSelect'\n | 'onSlotDragEnd'\n | 'view'\n | 'onViewChange'\n | 'mode'\n | 'onExternalEventDrop'\n | 'withEventResize'\n | 'onEventResize'\n | 'canResizeEvent'\n | 'recurrenceExpansionLimit';\n\ntype ScheduleViewProps<T> = Partial<Omit<T, ScheduleCommonProps>>;\n\nexport interface ScheduleProps\n extends BoxProps, StylesApiProps<ScheduleFactory>, ElementProps<'div'> {\n __staticSelector?: string;\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?: ScheduleViewLevel;\n\n /** Default view level (uncontrolled) */\n defaultView?: ScheduleViewLevel;\n\n /** Called when view level changes */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Events to display across all views */\n events?: ScheduleEventData[];\n\n /** Locale for date formatting (overrides `DatesProvider`) */\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 /** Enable drag and drop for events @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped */\n onEventDrop?: (\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 time slot is clicked in DayView/WeekView */\n onTimeSlotClick?: (\n slotStart: DateTimeStringValue,\n slotEnd: DateTimeStringValue,\n event: React.MouseEvent<HTMLButtonElement>\n ) => void;\n\n /** Called when all-day slot is clicked in DayView/WeekView */\n onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called when day is clicked in MonthView */\n onDayClick?: (date: DateStringValue, event: 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?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Called when event is clicked in any view */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Interaction mode:\n * - `'default'` allows all interactions\n * - `'static'` disables event interactions\n * @default 'default' */\n mode?: ScheduleMode;\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 /** If true, events can be resized by dragging their edges @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (\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 /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Layout mode:\n * - `'default'` uses same views on all screen sizes\n * - `'responsive'` switches to YearView/MobileMonthView on small screens\n * @default 'default' */\n layout?: ScheduleLayout;\n\n /** Props specific to DayView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n dayViewProps?: ScheduleViewProps<DayViewProps>;\n\n /** Props specific to WeekView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n weekViewProps?: ScheduleViewProps<WeekViewProps>;\n\n /** Props specific to MonthView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n monthViewProps?: ScheduleViewProps<MonthViewProps>;\n\n /** Props specific to YearView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n yearViewProps?: ScheduleViewProps<YearViewProps>;\n\n /** Props specific to MobileMonthView (used in responsive layout) */\n mobileMonthViewProps?: ScheduleViewProps<MobileMonthViewProps>;\n}\n\nexport type ScheduleFactory = Factory<{\n props: ScheduleProps;\n ref: HTMLDivElement;\n stylesNames: ScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ScheduleProps> = {\n defaultView: 'week',\n mode: 'default',\n layout: 'default',\n};\n\nexport const Schedule = factory<ScheduleFactory>((_props) => {\n const props = useProps('Schedule', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n date,\n defaultDate,\n onDateChange,\n view,\n defaultView,\n onViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n layout,\n dayViewProps,\n weekViewProps,\n monthViewProps,\n yearViewProps,\n mobileMonthViewProps,\n __staticSelector,\n mod,\n ...others\n } = props;\n\n const getStyles = useStyles<ScheduleFactory>({\n name: __staticSelector || 'Schedule',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n });\n\n const [_view, _setView] = useUncontrolled<ScheduleViewLevel>({\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 _setView(newView);\n onViewChange?.(newView);\n };\n\n const handleMonthClick = (monthDate: DateStringValue) => {\n handleDateChange(monthDate);\n handleViewChange('month');\n };\n\n const commonProps = {\n date: _date,\n onDateChange: handleDateChange,\n view: _view,\n onViewChange: handleViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize: mode === 'static' ? false : withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n };\n\n const desktopContent = (() => {\n switch (_view) {\n case 'day':\n return <DayView {...commonProps} {...dayViewProps} />;\n case 'week':\n return <WeekView {...commonProps} {...weekViewProps} />;\n case 'month':\n return <MonthView {...commonProps} {...monthViewProps} />;\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n const mobileContent = (() => {\n switch (_view) {\n case 'day':\n case 'week':\n case 'month':\n return (\n <MobileMonthView\n date={_date}\n onDateChange={handleDateChange}\n events={events}\n locale={locale}\n radius={radius}\n labels={labels}\n mode={mode}\n recurrenceExpansionLimit={recurrenceExpansionLimit}\n onYearClick={() => handleViewChange('year')}\n onEventClick={onEventClick}\n {...mobileMonthViewProps}\n />\n );\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n if (layout === 'responsive') {\n return (\n <Box {...getStyles('root')} mod={[{ layout }, mod]} {...others}>\n <Box {...getStyles('desktopView')}>{desktopContent}</Box>\n <Box {...getStyles('mobileView')}>{mobileContent}</Box>\n </Box>\n );\n }\n\n return (\n <Box {...getStyles('root')} mod={mod} {...others}>\n {desktopContent}\n </Box>\n );\n});\n\nSchedule.displayName = '@mantine/schedule/Schedule';\nSchedule.classes = classes;\n\nexport namespace Schedule {\n export type Props = ScheduleProps;\n export type StylesNames = ScheduleStylesNames;\n export type Factory = ScheduleFactory;\n export type Layout = ScheduleLayout;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Schedule.cjs","names":["DayView","WeekView","MonthView","YearView","MobileMonthView","Box","classes"],"sources":["../../../src/components/Schedule/Schedule.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 ScheduleViewLevel,\n} from '../../types';\nimport { DayView, DayViewProps, DayViewStylesNames } from '../DayView/DayView';\nimport {\n MobileMonthView,\n MobileMonthViewProps,\n MobileMonthViewStylesNames,\n} from '../MobileMonthView/MobileMonthView';\nimport { MonthView, MonthViewProps, MonthViewStylesNames } from '../MonthView/MonthView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport { WeekView, WeekViewProps, WeekViewStylesNames } from '../WeekView/WeekView';\nimport { YearView, YearViewProps, YearViewStylesNames } from '../YearView/YearView';\nimport classes from './Schedule.module.css';\n\nexport type ScheduleStylesNames =\n | 'root'\n | 'desktopView'\n | 'mobileView'\n | DayViewStylesNames\n | WeekViewStylesNames\n | MonthViewStylesNames\n | YearViewStylesNames\n | MobileMonthViewStylesNames;\n\nexport type ScheduleLayout = 'default' | 'responsive';\n\ntype ScheduleCommonProps =\n | 'date'\n | 'onDateChange'\n | 'events'\n | 'locale'\n | 'radius'\n | 'labels'\n | 'renderEventBody'\n | 'withEventsDragAndDrop'\n | 'onEventDrop'\n | 'canDragEvent'\n | 'onEventDragStart'\n | 'onEventDragEnd'\n | 'onTimeSlotClick'\n | 'onAllDaySlotClick'\n | 'onEventClick'\n | 'onDayClick'\n | 'onMonthClick'\n | 'withDragSlotSelect'\n | 'onSlotDragEnd'\n | 'view'\n | 'onViewChange'\n | 'mode'\n | 'onExternalEventDrop'\n | 'withEventResize'\n | 'onEventResize'\n | 'canResizeEvent'\n | 'recurrenceExpansionLimit';\n\ntype ScheduleViewProps<T> = Partial<Omit<T, ScheduleCommonProps>>;\n\nexport interface ScheduleProps\n extends BoxProps, StylesApiProps<ScheduleFactory>, ElementProps<'div'> {\n __staticSelector?: string;\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?: ScheduleViewLevel;\n\n /** Default view level (uncontrolled) */\n defaultView?: ScheduleViewLevel;\n\n /** Called when view level changes */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Events to display across all views */\n events?: ScheduleEventData[];\n\n /** Locale for date formatting (overrides `DatesProvider`) */\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 /** 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 }) => 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 in DayView/WeekView */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n }) => void;\n\n /** Called when all-day slot is clicked in DayView/WeekView */\n onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called when day is clicked in MonthView */\n onDayClick?: (date: DateStringValue, event: 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?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Called when event is clicked in any view */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Interaction mode:\n * - `'default'` allows all interactions\n * - `'static'` disables event interactions\n * @default 'default' */\n mode?: ScheduleMode;\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 /** If true, events can be resized by dragging their edges @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Layout mode:\n * - `'default'` uses same views on all screen sizes\n * - `'responsive'` switches to YearView/MobileMonthView on small screens\n * @default 'default' */\n layout?: ScheduleLayout;\n\n /** Props specific to DayView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n dayViewProps?: ScheduleViewProps<DayViewProps>;\n\n /** Props specific to WeekView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n weekViewProps?: ScheduleViewProps<WeekViewProps>;\n\n /** Props specific to MonthView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n monthViewProps?: ScheduleViewProps<MonthViewProps>;\n\n /** Props specific to YearView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n yearViewProps?: ScheduleViewProps<YearViewProps>;\n\n /** Props specific to MobileMonthView (used in responsive layout) */\n mobileMonthViewProps?: ScheduleViewProps<MobileMonthViewProps>;\n}\n\nexport type ScheduleFactory = Factory<{\n props: ScheduleProps;\n ref: HTMLDivElement;\n stylesNames: ScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ScheduleProps> = {\n defaultView: 'week',\n mode: 'default',\n layout: 'default',\n};\n\nexport const Schedule = factory<ScheduleFactory>((_props) => {\n const props = useProps('Schedule', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n date,\n defaultDate,\n onDateChange,\n view,\n defaultView,\n onViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n layout,\n dayViewProps,\n weekViewProps,\n monthViewProps,\n yearViewProps,\n mobileMonthViewProps,\n __staticSelector,\n mod,\n ...others\n } = props;\n\n const getStyles = useStyles<ScheduleFactory>({\n name: __staticSelector || 'Schedule',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n });\n\n const [_view, _setView] = useUncontrolled<ScheduleViewLevel>({\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 _setView(newView);\n onViewChange?.(newView);\n };\n\n const handleMonthClick = (monthDate: DateStringValue) => {\n handleDateChange(monthDate);\n handleViewChange('month');\n };\n\n const commonProps = {\n date: _date,\n onDateChange: handleDateChange,\n view: _view,\n onViewChange: handleViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize: mode === 'static' ? false : withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n };\n\n const desktopContent = (() => {\n switch (_view) {\n case 'day':\n return <DayView {...commonProps} {...dayViewProps} />;\n case 'week':\n return <WeekView {...commonProps} {...weekViewProps} />;\n case 'month':\n return <MonthView {...commonProps} {...monthViewProps} />;\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n const mobileContent = (() => {\n switch (_view) {\n case 'day':\n case 'week':\n case 'month':\n return (\n <MobileMonthView\n date={_date}\n onDateChange={handleDateChange}\n events={events}\n locale={locale}\n radius={radius}\n labels={labels}\n mode={mode}\n recurrenceExpansionLimit={recurrenceExpansionLimit}\n onYearClick={() => handleViewChange('year')}\n onEventClick={onEventClick}\n {...mobileMonthViewProps}\n />\n );\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n if (layout === 'responsive') {\n return (\n <Box {...getStyles('root')} mod={[{ layout }, mod]} {...others}>\n <Box {...getStyles('desktopView')}>{desktopContent}</Box>\n <Box {...getStyles('mobileView')}>{mobileContent}</Box>\n </Box>\n );\n }\n\n return (\n <Box {...getStyles('root')} mod={mod} {...others}>\n {desktopContent}\n </Box>\n );\n});\n\nSchedule.displayName = '@mantine/schedule/Schedule';\nSchedule.classes = classes;\n\nexport namespace Schedule {\n export type Props = ScheduleProps;\n export type StylesNames = ScheduleStylesNames;\n export type Factory = ScheduleFactory;\n export type Layout = ScheduleLayout;\n}\n"],"mappings":"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"}
|
|
@@ -47,7 +47,7 @@ function ScheduleHeaderNext(props) {
|
|
|
47
47
|
"aria-label": require_labels.getLabel("next", props.labels),
|
|
48
48
|
square: true,
|
|
49
49
|
...props,
|
|
50
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.AccordionChevron, { transform: `rotate(${dir === "rtl" ? 90 : -90}
|
|
50
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.AccordionChevron, { style: { transform: `rotate(${dir === "rtl" ? 90 : -90}deg)` } })
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
function ScheduleHeaderPrevious(props) {
|
|
@@ -57,7 +57,7 @@ function ScheduleHeaderPrevious(props) {
|
|
|
57
57
|
"aria-label": require_labels.getLabel("previous", props.labels),
|
|
58
58
|
square: true,
|
|
59
59
|
...props,
|
|
60
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.AccordionChevron, { transform: `rotate(${dir === "rtl" ? -90 : 90}
|
|
60
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.AccordionChevron, { style: { transform: `rotate(${dir === "rtl" ? -90 : 90}deg)` } })
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
function ScheduleHeaderToday(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderControl.cjs","names":["UnstyledButton","classes","getLabel","AccordionChevron"],"sources":["../../../../src/components/ScheduleHeader/HeaderControl/HeaderControl.tsx"],"sourcesContent":["import {\n AccordionChevron,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n StylesApiProps,\n UnstyledButton,\n useDirection,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { getLabel, ScheduleLabelsOverride } from '../../../labels';\nimport classes from './HeaderControl.module.css';\n\nexport type HeaderControlStylesNames = 'headerControl';\nexport type HeaderControlCssVariables = {\n headerControl: '--control-radius';\n};\n\nexport interface HeaderControlProps\n extends BoxProps, StylesApiProps<HeaderControlFactory>, ElementProps<'button'> {\n __staticSelector?: string;\n\n /** Applies active styles */\n active?: boolean;\n\n /** Removes inline padding */\n square?: 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 to `false`, the control will not be clickable */\n interactive?: boolean;\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n}\n\nexport type HeaderControlFactory = Factory<{\n props: HeaderControlProps;\n ref: HTMLButtonElement;\n stylesNames: HeaderControlStylesNames;\n vars: HeaderControlCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'HeaderControl',\n interactive: true,\n} satisfies Partial<HeaderControlProps>;\n\nconst varsResolver = createVarsResolver<HeaderControlFactory>((_theme, { radius }) => ({\n headerControl: {\n '--control-radius': radius === undefined ? undefined : getRadius(radius),\n },\n}));\n\nexport const HeaderControl = factory<HeaderControlFactory>((_props) => {\n const props = useProps('HeaderControl', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n __staticSelector,\n mod,\n attributes,\n active,\n square,\n radius,\n interactive,\n ...others\n } = props;\n\n const getStyles = useStyles<HeaderControlFactory>({\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: 'headerControl',\n });\n\n return (\n <UnstyledButton\n {...getStyles('headerControl', { active: interactive })}\n mod={[{ active, square, interactive }, mod]}\n tabIndex={interactive ? undefined : -1}\n {...others}\n />\n );\n});\n\nHeaderControl.displayName = '@mantine/schedule/HeaderControl';\nHeaderControl.classes = classes;\nHeaderControl.varsResolver = varsResolver;\n\nexport function ScheduleHeaderNext(props: HeaderControlProps) {\n const { dir } = useDirection();\n\n return (\n <HeaderControl data-type=\"next\" aria-label={getLabel('next', props.labels)} square {...props}>\n <AccordionChevron
|
|
1
|
+
{"version":3,"file":"HeaderControl.cjs","names":["UnstyledButton","classes","getLabel","AccordionChevron"],"sources":["../../../../src/components/ScheduleHeader/HeaderControl/HeaderControl.tsx"],"sourcesContent":["import {\n AccordionChevron,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n StylesApiProps,\n UnstyledButton,\n useDirection,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { getLabel, ScheduleLabelsOverride } from '../../../labels';\nimport classes from './HeaderControl.module.css';\n\nexport type HeaderControlStylesNames = 'headerControl';\nexport type HeaderControlCssVariables = {\n headerControl: '--control-radius';\n};\n\nexport interface HeaderControlProps\n extends BoxProps, StylesApiProps<HeaderControlFactory>, ElementProps<'button'> {\n __staticSelector?: string;\n\n /** Applies active styles */\n active?: boolean;\n\n /** Removes inline padding */\n square?: 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 to `false`, the control will not be clickable */\n interactive?: boolean;\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n}\n\nexport type HeaderControlFactory = Factory<{\n props: HeaderControlProps;\n ref: HTMLButtonElement;\n stylesNames: HeaderControlStylesNames;\n vars: HeaderControlCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'HeaderControl',\n interactive: true,\n} satisfies Partial<HeaderControlProps>;\n\nconst varsResolver = createVarsResolver<HeaderControlFactory>((_theme, { radius }) => ({\n headerControl: {\n '--control-radius': radius === undefined ? undefined : getRadius(radius),\n },\n}));\n\nexport const HeaderControl = factory<HeaderControlFactory>((_props) => {\n const props = useProps('HeaderControl', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n __staticSelector,\n mod,\n attributes,\n active,\n square,\n radius,\n interactive,\n ...others\n } = props;\n\n const getStyles = useStyles<HeaderControlFactory>({\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: 'headerControl',\n });\n\n return (\n <UnstyledButton\n {...getStyles('headerControl', { active: interactive })}\n mod={[{ active, square, interactive }, mod]}\n tabIndex={interactive ? undefined : -1}\n {...others}\n />\n );\n});\n\nHeaderControl.displayName = '@mantine/schedule/HeaderControl';\nHeaderControl.classes = classes;\nHeaderControl.varsResolver = varsResolver;\n\nexport function ScheduleHeaderNext(props: HeaderControlProps) {\n const { dir } = useDirection();\n\n return (\n <HeaderControl data-type=\"next\" aria-label={getLabel('next', props.labels)} square {...props}>\n <AccordionChevron style={{ transform: `rotate(${dir === 'rtl' ? 90 : -90}deg)` }} />\n </HeaderControl>\n );\n}\n\nexport function ScheduleHeaderPrevious(props: HeaderControlProps) {\n const { dir } = useDirection();\n\n return (\n <HeaderControl\n data-type=\"previous\"\n aria-label={getLabel('previous', props.labels)}\n square\n {...props}\n >\n <AccordionChevron style={{ transform: `rotate(${dir === 'rtl' ? -90 : 90}deg)` }} />\n </HeaderControl>\n );\n}\n\nexport function ScheduleHeaderToday(props: HeaderControlProps) {\n return (\n <HeaderControl data-type=\"today\" aria-label={getLabel('today', props.labels)} {...props}>\n {getLabel('today', props.labels)}\n </HeaderControl>\n );\n}\n\nScheduleHeaderNext.displayName = '@mantine/schedule/ScheduleHeaderNext';\nScheduleHeaderPrevious.displayName = '@mantine/schedule/ScheduleHeaderPrevious';\nScheduleHeaderToday.displayName = '@mantine/schedule/ScheduleHeaderToday';\n"],"mappings":";;;;;;;AAkDA,MAAM,eAAe;CACnB,kBAAkB;CAClB,aAAa;CACd;AAED,MAAM,gBAAA,GAAA,cAAA,qBAAyD,QAAQ,EAAE,cAAc,EACrF,eAAe,EACb,oBAAoB,WAAW,KAAA,IAAY,KAAA,KAAA,GAAA,cAAA,WAAsB,OAAO,EACzE,EACF,EAAE;AAEH,MAAa,iBAAA,GAAA,cAAA,UAA+C,WAAW;CACrE,MAAM,SAAA,GAAA,cAAA,UAAiB,iBAAiB,cAAc,OAAO;CAC7D,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,kBACA,KACA,YACA,QACA,QACA,QACA,aACA,GAAG,WACD;AAiBJ,QACE,iBAAA,GAAA,kBAAA,KAACA,cAAAA,gBAAD;EACE,IAAA,GAAA,cAAA,WAjB8C;GAChD,MAAM;GACN,SAAA,6BAAA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,cAAc;GACf,CAAC,CAIgB,iBAAiB,EAAE,QAAQ,aAAa,CAAC;EACvD,KAAK,CAAC;GAAE;GAAQ;GAAQ;GAAa,EAAE,IAAI;EAC3C,UAAU,cAAc,KAAA,IAAY;EACpC,GAAI;EACJ,CAAA;EAEJ;AAEF,cAAc,cAAc;AAC5B,cAAc,UAAUC,6BAAAA;AACxB,cAAc,eAAe;AAE7B,SAAgB,mBAAmB,OAA2B;CAC5D,MAAM,EAAE,SAAA,GAAA,cAAA,eAAsB;AAE9B,QACE,iBAAA,GAAA,kBAAA,KAAC,eAAD;EAAe,aAAU;EAAO,cAAYC,eAAAA,SAAS,QAAQ,MAAM,OAAO;EAAE,QAAA;EAAO,GAAI;YACrF,iBAAA,GAAA,kBAAA,KAACC,cAAAA,kBAAD,EAAkB,OAAO,EAAE,WAAW,UAAU,QAAQ,QAAQ,KAAK,IAAI,OAAO,EAAI,CAAA;EACtE,CAAA;;AAIpB,SAAgB,uBAAuB,OAA2B;CAChE,MAAM,EAAE,SAAA,GAAA,cAAA,eAAsB;AAE9B,QACE,iBAAA,GAAA,kBAAA,KAAC,eAAD;EACE,aAAU;EACV,cAAYD,eAAAA,SAAS,YAAY,MAAM,OAAO;EAC9C,QAAA;EACA,GAAI;YAEJ,iBAAA,GAAA,kBAAA,KAACC,cAAAA,kBAAD,EAAkB,OAAO,EAAE,WAAW,UAAU,QAAQ,QAAQ,MAAM,GAAG,OAAO,EAAI,CAAA;EACtE,CAAA;;AAIpB,SAAgB,oBAAoB,OAA2B;AAC7D,QACE,iBAAA,GAAA,kBAAA,KAAC,eAAD;EAAe,aAAU;EAAQ,cAAYD,eAAAA,SAAS,SAAS,MAAM,OAAO;EAAE,GAAI;YAC/EA,eAAAA,SAAS,SAAS,MAAM,OAAO;EAClB,CAAA;;AAIpB,mBAAmB,cAAc;AACjC,uBAAuB,cAAc;AACrC,oBAAoB,cAAc"}
|
|
@@ -55,13 +55,13 @@ const defaultProps = {
|
|
|
55
55
|
mode: "default"
|
|
56
56
|
};
|
|
57
57
|
const varsResolver = (0, _mantine_core.createVarsResolver)((_theme, { radius, allDaySlotHeight, slotHeight }) => ({ weekView: {
|
|
58
|
-
"--week-view-radius": radius ? (0, _mantine_core.getRadius)(radius) : void 0,
|
|
58
|
+
"--week-view-radius": radius !== void 0 ? (0, _mantine_core.getRadius)(radius) : void 0,
|
|
59
59
|
"--week-view-all-day-slots-height": (0, _mantine_core.rem)(allDaySlotHeight),
|
|
60
60
|
"--week-view-slot-height": (0, _mantine_core.rem)(slotHeight)
|
|
61
61
|
} }));
|
|
62
62
|
const WeekView = (0, _mantine_core.factory)((_props) => {
|
|
63
63
|
const props = (0, _mantine_core.useProps)("WeekView", defaultProps, _props);
|
|
64
|
-
const { classNames, className, style, styles, unstyled, attributes, vars, startTime, endTime, date, onDateChange, intervalMinutes, slotLabelFormat, withWeekendDays, weekendDays, firstDayOfWeek, weekdayFormat, radius, highlightToday, withCurrentTimeIndicator, scrollAreaProps, locale, withWeekNumber, withCurrentTimeBubble, withAllDaySlots, __staticSelector, withHeader, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, weekLabelFormat, events, allDaySlotHeight, slotHeight, labels, highlightBusinessHours, businessHours, renderEventBody, renderEvent, withEventsDragAndDrop, onEventDrop, canDragEvent, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onEventClick, withDragSlotSelect, onSlotDragEnd, mode, startScrollTime, renderWeekLabel, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, recurrenceExpansionLimit, ...others } = props;
|
|
64
|
+
const { classNames, className, style, styles, unstyled, attributes, vars, startTime, endTime, date, onDateChange, intervalMinutes, slotLabelFormat, withWeekendDays, weekendDays, firstDayOfWeek, weekdayFormat, radius, highlightToday, withCurrentTimeIndicator, scrollAreaProps, locale, withWeekNumber, withCurrentTimeBubble, withAllDaySlots, __staticSelector, withHeader, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, weekLabelFormat, events, allDaySlotHeight, slotHeight, labels, highlightBusinessHours, businessHours, renderEventBody, renderEvent, withEventsDragAndDrop, onEventDrop, canDragEvent, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onEventClick, withDragSlotSelect, onSlotDragEnd, mode, startScrollTime, renderWeekLabel, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, recurrenceExpansionLimit, getTimeSlotProps, ...others } = props;
|
|
65
65
|
const getStyles = (0, _mantine_core.useStyles)({
|
|
66
66
|
name: __staticSelector,
|
|
67
67
|
classes: require_WeekView_module.default,
|
|
@@ -169,7 +169,11 @@ const WeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
169
169
|
const slotIndex = slots.findIndex((s) => s.startTime === slotTime);
|
|
170
170
|
if (slotIndex === -1) return;
|
|
171
171
|
const slot = slots[slotIndex];
|
|
172
|
-
onTimeSlotClick(
|
|
172
|
+
onTimeSlotClick({
|
|
173
|
+
slotStart: `${slotDate} ${slot.startTime}`,
|
|
174
|
+
slotEnd: `${slotDate} ${slot.endTime}`,
|
|
175
|
+
nativeEvent: e
|
|
176
|
+
});
|
|
173
177
|
};
|
|
174
178
|
const weekdays = require_get_week_days.getWeekDays({
|
|
175
179
|
week: date,
|
|
@@ -356,7 +360,15 @@ const WeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
356
360
|
isResizing: resizePosition !== null,
|
|
357
361
|
onResizeStart: isResizable ? (edge, e) => {
|
|
358
362
|
const container = daySlotsContainersRef.current[dayIndex];
|
|
359
|
-
if (container) eventResize.handleResizeStart(
|
|
363
|
+
if (container) eventResize.handleResizeStart({
|
|
364
|
+
event,
|
|
365
|
+
edge,
|
|
366
|
+
container,
|
|
367
|
+
originalTop: event.position.top,
|
|
368
|
+
originalHeight: event.position.height,
|
|
369
|
+
eventDate: (0, dayjs.default)(day).format("YYYY-MM-DD"),
|
|
370
|
+
pointerEvent: e
|
|
371
|
+
});
|
|
360
372
|
} : void 0,
|
|
361
373
|
renderEventBody,
|
|
362
374
|
renderEvent,
|
|
@@ -412,6 +424,7 @@ const WeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
412
424
|
daySlotsContainerRef: (node) => {
|
|
413
425
|
daySlotsContainersRef.current[dayIndex] = node;
|
|
414
426
|
},
|
|
427
|
+
getTimeSlotProps,
|
|
415
428
|
children: [backgroundEventNodes, dayEvents]
|
|
416
429
|
}, day);
|
|
417
430
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WeekView.cjs","names":["getDayTimeIntervals","useDragDropHandlers","calculateDropTime","useSlotDragSelect","useEventResize","getWeekDays","getWeekViewEvents","expandRecurringEvents","formatDate","Box","getBusinessHoursMod","UnstyledButton","getLabel","toDateString","isAllDayEvent","ScheduleEvent","WeekViewDay","ScheduleHeaderBase","previousWeek","nextWeek","getWeekLabel","ScrollArea","getWeekNumber","CurrentTimeIndicator","DragContext","classes"],"sources":["../../../src/components/WeekView/WeekView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n rem,\n ScrollArea,\n ScrollAreaAutosizeProps,\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 { useAutoScrollOnDrag } from '../../hooks/use-auto-scroll-on-drag';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useEventResize } from '../../hooks/use-event-resize';\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 ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateDropTime,\n expandRecurringEvents,\n formatDate,\n getBusinessHoursMod,\n getDayTimeIntervals,\n getWeekDays,\n getWeekNumber,\n isAllDayEvent,\n nextWeek,\n previousWeek,\n toDateString,\n} from '../../utils';\nimport {\n CurrentTimeIndicator,\n CurrentTimeIndicatorStylesNames,\n} from '../CurrentTimeIndicator/CurrentTimeIndicator';\nimport { DragContext, DragContextValue } from '../DragContext/DragContext';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getWeekLabel } from './get-week-label/get-week-label';\nimport { getWeekViewEvents } from './get-week-view-events/get-week-view-events';\nimport { handleWeekViewKeyDown, WeekViewControlsRef } from './handle-week-view-key-down';\nimport { WeekViewDay } from './WeekViewDay';\nimport classes from './WeekView.module.css';\n\nexport type WeekViewStylesNames =\n | 'weekView'\n | 'weekViewRoot'\n | 'weekViewHeader'\n | 'weekViewInner'\n | 'weekViewAllDaySlotsEvents'\n | 'weekViewAllDaySlots'\n | 'weekViewAllDaySlotsList'\n | 'weekViewAllDaySlot'\n | 'weekViewAllDaySlotsLabel'\n | 'weekViewScrollArea'\n | 'weekViewCorner'\n | 'weekViewSlotLabels'\n | 'weekViewSlotLabel'\n | 'weekViewDayLabel'\n | 'weekViewDayWeekday'\n | 'weekViewDay'\n | 'weekViewDayNumber'\n | 'weekViewDaySlot'\n | 'weekViewDaySlots'\n | 'weekViewWeekLabel'\n | 'weekViewWeekNumber'\n | 'weekViewBackgroundEvent'\n | CurrentTimeIndicatorStylesNames\n | CombinedScheduleHeaderStylesNames;\n\nexport type WeekViewCssVariables = {\n weekView: '--week-view-radius' | '--week-view-slot-height' | '--week-view-all-day-slots-height';\n};\n\nexport interface WeekViewProps\n extends BoxProps, StylesApiProps<WeekViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Week 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 /** Start time for the day view, in `HH:mm:ss` format @default 00:00:00 */\n startTime?: string;\n\n /** End time for the day view, in `HH:mm:ss` format @default 23:59:59 */\n endTime?: string;\n\n /** Number of minutes for each interval in the day view @default 60 */\n intervalMinutes?: number;\n\n /** Dayjs format for slot labels or a callback function that returns formatted value @default HH:mm */\n slotLabelFormat?: DateLabelFormat;\n\n /** Number 0-6, where 0 – Sunday and 6 – Saturday. @default 1 – Monday */\n firstDayOfWeek?: DayOfWeek;\n\n /** `dayjs` format for weekdays names. @default 'ddd' */\n weekdayFormat?: DateLabelFormat;\n\n /** Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. */\n weekendDays?: DayOfWeek[];\n\n /** If set to false, weekend days are hidden @default true */\n withWeekendDays?: boolean;\n\n /** If set to true, highlights today in the weekday row @default false */\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 /** Props passed down to the `ScrollArea.Autosize` component */\n scrollAreaProps?: ScrollAreaAutosizeProps & DataAttributes;\n\n /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n locale?: string;\n\n /** If set, the week number is displayed at the top left corner @default true */\n withWeekNumber?: boolean;\n\n /** If set, displays a line indicating the current time @default true */\n withCurrentTimeIndicator?: boolean;\n\n /** If set, the time indicator displays the current time in the bubble @default true */\n withCurrentTimeBubble?: boolean;\n\n /** If set, displays all-day slots at the top of the view @default true */\n withAllDaySlots?: boolean;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous 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 /** Format for week label @default 'MMM DD' */\n weekLabelFormat?: DateLabelFormat;\n\n /** List of events to display in the week view */\n events?: ScheduleEventData[];\n\n /** Height of 1hr slot @default 64px */\n slotHeight?: React.CSSProperties['height'];\n\n /** Height of all-day slot @default 48px */\n allDaySlotHeight?: React.CSSProperties['height'];\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n\n /** If set to true, highlights business hours with white background @default false */\n highlightBusinessHours?: boolean;\n\n /** Business hours range in `HH:mm:ss` format @default ['09:00:00', '17:00:00'] */\n businessHours?: [string, string];\n\n /** Function to customize event body, `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 at new time */\n onEventDrop?: (\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 time slot is clicked */\n onTimeSlotClick?: (\n slotStart: DateTimeStringValue,\n slotEnd: DateTimeStringValue,\n event: React.MouseEvent<HTMLButtonElement>\n ) => void;\n\n /** Called when all-day slot is clicked */\n onAllDaySlotClick?: (day: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => 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 time slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a time slot range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default default */\n mode?: ScheduleMode;\n\n /** Time to scroll to on initial render, in `HH:mm:ss` format */\n startScrollTime?: string;\n\n /** Function to customize week label in the header */\n renderWeekLabel?: (params: {\n weekStart: DateStringValue;\n weekEnd: DateStringValue;\n }) => React.ReactNode;\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 /** If true, events can be resized by dragging their edges @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (\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 /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n}\n\nexport type WeekViewFactory = Factory<{\n props: WeekViewProps;\n ref: HTMLDivElement;\n stylesNames: WeekViewStylesNames;\n vars: WeekViewCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'WeekView',\n withWeekendDays: true,\n withCurrentTimeIndicator: true,\n startTime: '00:00:00',\n endTime: '23:59:59',\n slotLabelFormat: 'HH:mm',\n intervalMinutes: 60,\n weekdayFormat: 'ddd',\n withWeekNumber: true,\n withCurrentTimeBubble: true,\n withAllDaySlots: true,\n withHeader: true,\n weekLabelFormat: 'MMM DD',\n highlightBusinessHours: false,\n businessHours: ['09:00:00', '17:00:00'],\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n withEventResize: false,\n mode: 'default',\n} satisfies Partial<WeekViewProps>;\n\nconst varsResolver = createVarsResolver<WeekViewFactory>(\n (_theme, { radius, allDaySlotHeight, slotHeight }) => ({\n weekView: {\n '--week-view-radius': radius ? getRadius(radius) : undefined,\n '--week-view-all-day-slots-height': rem(allDaySlotHeight),\n '--week-view-slot-height': rem(slotHeight),\n },\n })\n);\n\nexport const WeekView = factory<WeekViewFactory>((_props) => {\n const props = useProps('WeekView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n startTime,\n endTime,\n date,\n onDateChange,\n intervalMinutes,\n slotLabelFormat,\n withWeekendDays,\n weekendDays,\n firstDayOfWeek,\n weekdayFormat,\n radius,\n highlightToday,\n withCurrentTimeIndicator,\n scrollAreaProps,\n locale,\n withWeekNumber,\n withCurrentTimeBubble,\n withAllDaySlots,\n __staticSelector,\n withHeader,\n onViewChange,\n previousControlProps,\n nextControlProps,\n todayControlProps,\n viewSelectProps,\n weekLabelFormat,\n events,\n allDaySlotHeight,\n slotHeight,\n labels,\n highlightBusinessHours,\n businessHours,\n renderEventBody,\n renderEvent,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n mode,\n startScrollTime,\n renderWeekLabel,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n ...others\n } = props;\n\n const getStyles = useStyles<WeekViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n attributes,\n rootSelector: 'weekView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<WeekViewFactory>({\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 [scrolled, setScrolled] = useState(false);\n const ctx = useDatesContext();\n const slots = getDayTimeIntervals({ startTime, endTime, intervalMinutes });\n const viewportRef = useRef<HTMLDivElement>(null);\n\n useAutoScrollOnDrag({\n viewportRef,\n enabled: (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static',\n });\n\n type DropTargetSlot = { day: string; slotIndex: number };\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, target: DropTargetSlot) => {\n if (!onExternalEventDrop) {\n return;\n }\n const slotDate = dayjs(target.day).format('YYYY-MM-DD');\n onExternalEventDrop(e.dataTransfer, `${slotDate} ${slots[target.slotIndex].startTime}`);\n },\n [onExternalEventDrop, slots]\n );\n\n const handleExternalAllDayDrop = 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<DropTargetSlot>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (target: DropTargetSlot, draggedEvent: ScheduleEventData) => {\n const slotTime = slots[target.slotIndex].startTime;\n return calculateDropTime({\n draggedEvent,\n targetDate: target.day,\n targetSlotTime: slotTime,\n intervalMinutes,\n });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n });\n\n const allDayDragDrop = useDragDropHandlers<string>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (targetDay: string, draggedEvent: ScheduleEventData) => {\n const eventDuration = dayjs(draggedEvent.end).diff(dayjs(draggedEvent.start), 'millisecond');\n const newStart = dayjs(targetDay).startOf('day');\n return { start: newStart.toDate(), end: newStart.add(eventDuration, 'millisecond').toDate() };\n },\n onExternalDrop: onExternalEventDrop ? handleExternalAllDayDrop : undefined,\n });\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex, group) => {\n if (!onSlotDragEnd) {\n return;\n }\n const slotDate = dayjs(group).format('YYYY-MM-DD');\n onSlotDragEnd(\n `${slotDate} ${slots[startIndex].startTime}`,\n `${slotDate} ${slots[endIndex].endTime}`\n );\n },\n });\n\n const eventResize = useEventResize({\n enabled: withEventResize,\n mode,\n startTime,\n endTime,\n intervalMinutes,\n onEventResize,\n canResizeEvent,\n });\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const handleTimeSlotClick = (\n day: string,\n slotTime: string,\n e: React.MouseEvent<HTMLButtonElement>\n ) => {\n if (!onTimeSlotClick) {\n return;\n }\n\n const slotDate = dayjs(day).format('YYYY-MM-DD');\n const slotIndex = slots.findIndex((s) => s.startTime === slotTime);\n if (slotIndex === -1) {\n return;\n }\n\n const slot = slots[slotIndex];\n onTimeSlotClick(`${slotDate} ${slot.startTime}`, `${slotDate} ${slot.endTime}`, e);\n };\n\n const weekdays = getWeekDays({\n week: date,\n withWeekendDays,\n weekendDays: ctx.getWeekendDays(weekendDays),\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n });\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart: dayjs(weekdays[0]).startOf('day').toDate(),\n rangeEnd: dayjs(weekdays[weekdays.length - 1])\n .endOf('day')\n .toDate(),\n expansionLimit: recurrenceExpansionLimit,\n });\n\n const weekEvents = getWeekViewEvents({\n date,\n events: expandedEvents,\n startTime,\n endTime,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n weekendDays: ctx.getWeekendDays(weekendDays),\n withWeekendDays,\n });\n\n const timeValues = slots.map((interval) => {\n const intervalTime = dayjs(`${dayjs(date).format('YYYY-MM-DD')} ${interval.startTime}`);\n const label = formatDate({\n date: intervalTime,\n locale: ctx.getLocale(locale),\n format: slotLabelFormat,\n });\n\n return (\n <Box\n {...getStyles('weekViewSlotLabel')}\n key={interval.startTime}\n mod={{\n 'hour-start': interval.isHourStart,\n ...getBusinessHoursMod({\n time: interval.startTime,\n businessHours,\n highlightBusinessHours,\n }),\n }}\n >\n {label}\n </Box>\n );\n });\n\n const slotsRef: WeekViewControlsRef = useRef<HTMLButtonElement[][]>([]);\n const allDaySlotsRef = useRef<HTMLButtonElement[]>([]);\n const weekdaysRef = useRef<HTMLButtonElement[]>([]);\n const daySlotsContainersRef = useRef<(HTMLDivElement | null)[]>([]);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n\n const firstSlotIndex = { dayIndex: 0, slotIndex: 0 };\n\n useIsomorphicEffect(() => {\n if (!startScrollTime || !viewportRef.current) {\n return;\n }\n\n const firstDaySlots = slotsRef.current[0];\n if (!firstDaySlots || firstDaySlots.length === 0) {\n return;\n }\n\n const targetIndex = slots.findIndex((s) => s.startTime >= startScrollTime);\n if (targetIndex < 0) {\n return;\n }\n\n const targetSlot = firstDaySlots[targetIndex];\n if (!targetSlot) {\n return;\n }\n\n const slotRect = targetSlot.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n viewportRef.current.scrollTo({ left: 0, top: slotRect.top - viewportRect.top });\n }, []);\n\n const getSlotIndexFromDragPoint = useCallback((event: React.DragEvent, dayIndex: number) => {\n const daySlots = slotsRef.current[dayIndex] ?? [];\n const slotIndex = daySlots.findIndex((slotNode) => {\n if (!slotNode) {\n return false;\n }\n\n const rect = slotNode.getBoundingClientRect();\n return event.clientY >= rect.top && event.clientY <= rect.bottom;\n });\n\n if (slotIndex >= 0) {\n return slotIndex;\n }\n\n const firstSlot = daySlots[0];\n const lastSlot = daySlots[daySlots.length - 1];\n\n if (!firstSlot || !lastSlot) {\n return null;\n }\n\n const firstRect = firstSlot.getBoundingClientRect();\n const lastRect = lastSlot.getBoundingClientRect();\n\n if (event.clientY < firstRect.top) {\n return 0;\n }\n\n if (event.clientY > lastRect.bottom) {\n return daySlots.length - 1;\n }\n\n return null;\n }, []);\n\n const handleSlotKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n dayIndex: number,\n slotIndex: number\n ) => {\n handleWeekViewKeyDown({\n controlsRef: slotsRef,\n dayIndex,\n slotIndex,\n event,\n });\n };\n\n const handleAllDaySlotKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n dayIndex: number\n ) => {\n const direction = event.key;\n if (direction === 'ArrowRight' && dayIndex < weekdays.length - 1) {\n event.preventDefault();\n allDaySlotsRef.current[dayIndex + 1]?.focus();\n } else if (direction === 'ArrowLeft' && dayIndex > 0) {\n event.preventDefault();\n allDaySlotsRef.current[dayIndex - 1]?.focus();\n } else if (direction === 'ArrowDown') {\n event.preventDefault();\n slotsRef.current?.[dayIndex]?.[0]?.focus();\n }\n };\n\n const handleWeekdayKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n dayIndex: number\n ) => {\n const direction = event.key;\n if (direction === 'ArrowRight' && dayIndex < weekdays.length - 1) {\n event.preventDefault();\n weekdaysRef.current[dayIndex + 1]?.focus();\n } else if (direction === 'ArrowLeft' && dayIndex > 0) {\n event.preventDefault();\n weekdaysRef.current[dayIndex - 1]?.focus();\n }\n };\n\n const currentWeekdayIndex = withCurrentTimeIndicator\n ? weekdays.findIndex((day) => dayjs(day).isSame(dayjs(), 'date'))\n : -1;\n\n const weekdaysLabels = weekdays.map((day, dayIndex) => (\n <UnstyledButton\n {...getStyles('weekViewDayLabel')}\n key={day}\n ref={(node) => {\n weekdaysRef.current[dayIndex] = node!;\n }}\n aria-label={`${getLabel('weekday', labels)} ${dayjs(day).format('YYYY-MM-DD')}`}\n mod={{\n today: dayjs(day).isSame(dayjs(), 'day') && !!highlightToday,\n weekend: ctx.getWeekendDays(weekendDays).includes(dayjs(day).day() as DayOfWeek),\n static: mode === 'static',\n }}\n tabIndex={mode === 'static' ? -1 : dayIndex === 0 ? 0 : -1}\n onKeyDown={mode === 'static' ? undefined : (event) => handleWeekdayKeyDown(event, dayIndex)}\n onClick={\n mode === 'static'\n ? undefined\n : () => {\n onViewChange?.('day');\n onDateChange?.(toDateString(day));\n }\n }\n >\n <Box {...getStyles('weekViewDayWeekday')} key=\"weekday\">\n {formatDate({ locale: ctx.getLocale(locale), date: day, format: weekdayFormat })}\n </Box>\n <div {...getStyles('weekViewDayNumber')} key=\"date\">\n {dayjs(day).date()}\n </div>\n </UnstyledButton>\n ));\n\n const days = weekdays.map((day, dayIndex) => {\n const allBgEvents = weekEvents.backgroundEvents[day] || [];\n\n const backgroundEventNodes = allBgEvents\n .filter((event) => !event.position.allDay)\n .map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: `bg-${event.id}`,\n ...getStyles('weekViewBackgroundEvent', {\n style: {\n top: `${event.position.top}%`,\n height: `${event.position.height}%`,\n width: '100%',\n },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n return <Box {...bgEventProps} />;\n });\n\n const dayEvents = (weekEvents.regularEvents[day] || []).map((event) => {\n const eventIsAllDay = isAllDayEvent({ event, date: day });\n const isDraggable = !eventIsAllDay && dragDrop.isDraggableEvent(event);\n const isResizable = !eventIsAllDay && eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n const eventTop = resizePosition ? resizePosition.top : event.position.top;\n const eventHeight = resizePosition ? resizePosition.height : event.position.height;\n\n return (\n <ScheduleEvent\n key={event.id}\n event={event}\n autoSize\n hanging={event.position.hanging}\n draggable={isDraggable}\n withResize={isResizable}\n isResizing={resizePosition !== null}\n onResizeStart={\n isResizable\n ? (edge, e) => {\n const container = daySlotsContainersRef.current[dayIndex];\n if (container) {\n eventResize.handleResizeStart(\n event,\n edge,\n container,\n event.position.top,\n event.position.height,\n dayjs(day).format('YYYY-MM-DD'),\n e\n );\n }\n }\n : undefined\n }\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n style={{\n position: 'absolute',\n top: `calc(${eventTop}% + 1px)`,\n left: `${event.position.offset}%`,\n width: `${event.position.width}%`,\n height: `calc(${eventHeight}% - 1px)`,\n }}\n />\n );\n });\n\n return (\n <WeekViewDay\n key={day}\n day={day}\n dayIndex={dayIndex}\n slots={slots}\n getStyles={getStyles}\n weekendDays={weekendDays}\n highlightBusinessHours={highlightBusinessHours}\n businessHours={businessHours}\n labels={labels}\n withEventsDragAndDrop={withDragHandlers}\n mode={mode}\n slotsRef={slotsRef}\n firstSlotIndex={firstSlotIndex}\n onSlotKeyDown={handleSlotKeyDown}\n onSlotClick={handleTimeSlotClick}\n onFirstSlotArrowUp={\n withAllDaySlots\n ? (dayIdx) => {\n allDaySlotsRef.current[dayIdx]?.focus();\n }\n : undefined\n }\n onDaySlotsDragOver={(event, dayStr, dayIdx) => {\n const slotIndex = getSlotIndexFromDragPoint(event, dayIdx);\n if (slotIndex !== null) {\n dragDrop.handleDragOver(event, { day: dayStr, slotIndex });\n }\n }}\n onDaySlotsDragLeave={dragDrop.handleDragLeave}\n onDaySlotsDrop={(event, dayStr, dayIdx) => {\n const slotIndex = getSlotIndexFromDragPoint(event, dayIdx);\n if (slotIndex !== null) {\n dragDrop.handleDrop(event, { day: dayStr, slotIndex });\n }\n }}\n dropTargetSlotIndex={\n dragDrop.dropTarget?.day === day ? dragDrop.dropTarget.slotIndex : undefined\n }\n withDragSlotSelect={withDragSlotSelect}\n onSlotPointerDown={slotDragSelect.handleSlotPointerDown}\n isSlotDragSelected={slotDragSelect.isSlotSelected}\n daySlotsContainerRef={(node) => {\n daySlotsContainersRef.current[dayIndex] = node;\n }}\n >\n {backgroundEventNodes}\n {dayEvents}\n </WeekViewDay>\n );\n });\n\n const allDaySlots = weekdays.map((day, dayIndex) => (\n <UnstyledButton\n aria-label={`${getLabel('allDay', labels)} ${dayjs(day).format('YYYY-MM-DD')}`}\n key={day}\n ref={(node) => {\n allDaySlotsRef.current[dayIndex] = node!;\n }}\n tabIndex={dayIndex === 0 ? 0 : -1}\n onKeyDown={(event) => handleAllDaySlotKeyDown(event, dayIndex)}\n onClick={\n mode === 'static' || !onAllDaySlotClick\n ? undefined\n : (e) => onAllDaySlotClick(dayjs(day).format('YYYY-MM-DD'), e)\n }\n onDragOver={withDragHandlers ? (e) => allDayDragDrop.handleDragOver(e, day) : undefined}\n onDragLeave={withDragHandlers ? allDayDragDrop.handleDragLeave : undefined}\n onDrop={withDragHandlers ? (e) => allDayDragDrop.handleDrop(e, day) : undefined}\n {...getStyles('weekViewDaySlot')}\n mod={{ 'drop-target': allDayDragDrop.isDropTarget(day) }}\n />\n ));\n\n const allDayEventIds = useMemo(\n () => new Set(weekEvents.allDayEvents.map((e) => e.id)),\n [weekEvents.allDayEvents]\n );\n\n const allDayEvents = weekEvents.allDayEvents.map((event) => (\n <ScheduleEvent\n key={event.id}\n event={event}\n autoSize\n nowrap\n hanging={event.position.hanging}\n draggable={allDayDragDrop.isDraggableEvent(event)}\n renderEvent={renderEvent}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n style={{\n position: 'absolute',\n zIndex: 2,\n top: `calc(${event.position.row * 50}% + 1px)`,\n left: `calc(${event.position.offset}% + 1px)`,\n width: `calc(${event.position.width}% - 1px)`,\n height: 'calc(50% - 2px)',\n maxHeight: 'calc(50% - 2px)',\n }}\n />\n ));\n\n const allDayBackgroundEventNodes = weekdays.flatMap((day, dayIndex) => {\n const allDayBgEvents = (weekEvents.backgroundEvents[day] || []).filter(\n (event) => event.position.allDay\n );\n const dayWidth = 100 / weekdays.length;\n const dayOffset = dayIndex * dayWidth;\n\n return allDayBgEvents.map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: `bg-allday-${event.id}-${day}`,\n ...getStyles('weekViewBackgroundEvent', {\n style: {\n top: 0,\n height: '100%',\n left: `${dayOffset}%`,\n width: `${dayWidth}%`,\n },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n return <Box {...bgEventProps} />;\n });\n });\n\n // Extra rows show on hover = total rows - 2 visible rows (starts from 0, so -1)\n const extraRows = Math.max(...weekEvents.allDayEvents.map((event) => event.position.row), 1) - 1;\n\n const content = (\n <Box\n {...getStyles('weekView')}\n mod={{ static: mode === 'static', 'slot-dragging': slotDragSelect.isDragging }}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"week\"\n navigationHandlers={{\n previous: () => previousWeek(date, ctx.getFirstDayOfWeek(firstDayOfWeek)),\n next: () => nextWeek(date, ctx.getFirstDayOfWeek(firstDayOfWeek)),\n today: () => toDateString(dayjs()),\n }}\n control={{\n miw: 140,\n title: getWeekLabel({\n weekdays,\n locale: ctx.getLocale(locale),\n weekLabelFormat,\n renderWeekLabel,\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 />\n )}\n\n <Box\n {...getStyles('weekViewRoot')}\n __vars={{\n '--indicator-offset-index':\n currentWeekdayIndex === -1 ? undefined : `${currentWeekdayIndex + 1}`,\n '--number-of-days': withWeekendDays\n ? '7'\n : `${7 - ctx.getWeekendDays(weekendDays).length}`,\n }}\n mod={{ 'with-weekends': withWeekendDays }}\n >\n <ScrollArea.Autosize\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('weekViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n onScrollPositionChange={(position) => {\n scrollAreaProps?.onScrollPositionChange?.(position);\n setScrolled(position.y !== 0);\n }}\n viewportRef={mergedViewportRef}\n >\n <Box {...getStyles('weekViewHeader')} mod={{ scrolled }}>\n <div {...getStyles('weekViewCorner')} key=\"corner\">\n {withWeekNumber && (\n <>\n <div {...getStyles('weekViewWeekLabel')}>{getLabel('week', labels)}</div>\n <div {...getStyles('weekViewWeekNumber')}>{getWeekNumber(date)}</div>\n </>\n )}\n </div>\n\n {weekdaysLabels}\n </Box>\n\n {withAllDaySlots && (\n <div {...getStyles('weekViewAllDaySlots')}>\n <div {...getStyles('weekViewAllDaySlotsLabel')}>{getLabel('allDay', labels)}</div>\n <div {...getStyles('weekViewAllDaySlotsList')}>\n {allDayBackgroundEventNodes}\n <Box\n {...getStyles('weekViewAllDaySlotsEvents')}\n __vars={{ '--extra-rows': `${extraRows}` }}\n >\n {allDayEvents}\n </Box>\n {allDaySlots}\n </div>\n </div>\n )}\n\n <div {...getStyles('weekViewInner')}>\n <div {...getStyles('weekViewSlotLabels')}>{timeValues}</div>\n\n {withCurrentTimeIndicator && currentWeekdayIndex !== -1 && (\n <CurrentTimeIndicator\n startOffset=\"calc(100% - (100% / var(--number-of-days)) * (var(--number-of-days) - var(--indicator-offset-index) + 1) + ((var(--number-of-days) - var(--indicator-offset-index) + 1) * var(--indicator-labels-offset)))\"\n endOffset=\"calc((100% / var(--number-of-days)) * (var(--number-of-days) - var(--indicator-offset-index)) - (var(--number-of-days) - var(--indicator-offset-index)) * var(--indicator-labels-offset))\"\n timeBubbleStartOffset=\"calc(var(--week-view-slots-label-width) - var(--time-bubble-width))\"\n currentTimeFormat={slotLabelFormat}\n withTimeBubble={withCurrentTimeBubble}\n withThumb={withCurrentTimeBubble ? currentWeekdayIndex !== 0 : true}\n locale={locale}\n startTime={startTime}\n endTime={endTime}\n {...stylesApiProps}\n />\n )}\n {days}\n </div>\n </ScrollArea.Autosize>\n </Box>\n </Box>\n );\n\n const mergedDragContextValue = useMemo<DragContextValue>(\n () => ({\n isDragging:\n dragDrop.dragContextValue.isDragging || allDayDragDrop.dragContextValue.isDragging,\n draggedEventId:\n dragDrop.dragContextValue.draggedEventId ?? allDayDragDrop.dragContextValue.draggedEventId,\n draggedEvent:\n dragDrop.dragContextValue.draggedEvent ?? allDayDragDrop.dragContextValue.draggedEvent,\n dropTarget:\n dragDrop.dragContextValue.dropTarget ?? allDayDragDrop.dragContextValue.dropTarget,\n onDragStart: (event: ScheduleEventData) => {\n if (allDayEventIds.has(event.id)) {\n allDayDragDrop.handleDragStart(event);\n } else {\n dragDrop.handleDragStart(event);\n }\n },\n onDragEnd: () => {\n dragDrop.handleDragEnd();\n allDayDragDrop.handleDragEnd();\n },\n setDropTarget: dragDrop.dragContextValue.setDropTarget,\n }),\n [dragDrop.dragContextValue, allDayDragDrop.dragContextValue, allDayEventIds]\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={mergedDragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nWeekView.displayName = '@mantine/schedule/WeekView';\nWeekView.classes = classes;\nWeekView.varsResolver = varsResolver;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsRA,MAAM,eAAe;CACnB,kBAAkB;CAClB,iBAAiB;CACjB,0BAA0B;CAC1B,WAAW;CACX,SAAS;CACT,iBAAiB;CACjB,iBAAiB;CACjB,eAAe;CACf,gBAAgB;CAChB,uBAAuB;CACvB,iBAAiB;CACjB,YAAY;CACZ,iBAAiB;CACjB,wBAAwB;CACxB,eAAe,CAAC,YAAY,WAAW;CACvC,uBAAuB;CACvB,oBAAoB;CACpB,iBAAiB;CACjB,MAAM;CACP;AAED,MAAM,gBAAA,GAAA,cAAA,qBACH,QAAQ,EAAE,QAAQ,kBAAkB,kBAAkB,EACrD,UAAU;CACR,sBAAsB,UAAA,GAAA,cAAA,WAAmB,OAAO,GAAG,KAAA;CACnD,qCAAA,GAAA,cAAA,KAAwC,iBAAiB;CACzD,4BAAA,GAAA,cAAA,KAA+B,WAAW;CAC3C,EACF,EACF;AAED,MAAa,YAAA,GAAA,cAAA,UAAqC,WAAW;CAC3D,MAAM,SAAA,GAAA,cAAA,UAAiB,YAAY,cAAc,OAAO;CACxD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,YACA,MACA,WACA,SACA,MACA,cACA,iBACA,iBACA,iBACA,aACA,gBACA,eACA,QACA,gBACA,0BACA,iBACA,QACA,gBACA,uBACA,iBACA,kBACA,YACA,cACA,sBACA,kBACA,mBACA,iBACA,iBACA,QACA,kBACA,YACA,QACA,wBACA,eACA,iBACA,aACA,uBACA,aACA,cACA,kBACA,gBACA,iBACA,mBACA,cACA,oBACA,eACA,MACA,iBACA,iBACA,qBACA,iBACA,eACA,gBACA,0BACA,GAAG,WACD;CAEJ,MAAM,aAAA,GAAA,cAAA,WAAuC;EAC3C,MAAM;EACN,SAAA,wBAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;EACf,CAAC;CAEF,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAAyD;EACnF;EACA;EACA;EACD,CAAC;CAEF,MAAM,iBAAiB;EACrB,YAAY;EACZ,QAAQ;EACR;EACA;EACA;EACD;CAED,MAAM,SAAA,GAAA,cAAA,kBAAyB;CAC/B,MAAM,CAAC,UAAU,gBAAA,GAAA,MAAA,UAAwB,MAAM;CAC/C,MAAM,OAAA,GAAA,eAAA,kBAAuB;CAC7B,MAAM,QAAQA,+BAAAA,oBAAoB;EAAE;EAAW;EAAS;EAAiB,CAAC;CAC1E,MAAM,eAAA,GAAA,MAAA,QAAqC,KAAK;AAEhD,iCAAA,oBAAoB;EAClB;EACA,UAAU,yBAAyB,CAAC,CAAC,wBAAwB,SAAS;EACvE,CAAC;CAIF,MAAM,sBAAA,GAAA,MAAA,cACH,GAAoB,WAA2B;AAC9C,MAAI,CAAC,oBACH;EAEF,MAAM,YAAA,GAAA,MAAA,SAAiB,OAAO,IAAI,CAAC,OAAO,aAAa;AACvD,sBAAoB,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,OAAO,WAAW,YAAY;IAEzF,CAAC,qBAAqB,MAAM,CAC7B;CAED,MAAM,4BAAA,GAAA,MAAA,cACH,GAAoB,QAAgB;AACnC,MAAI,CAAC,oBACH;AAEF,sBAAoB,EAAE,cAAc,IAAA,GAAA,MAAA,SAAS,IAAI,CAAC,OAAO,aAAa,CAAC,WAAW;IAEpF,CAAC,oBAAoB,CACtB;CAED,MAAM,WAAWC,+BAAAA,oBAAoC;EACnD,SAAS;EACT;EACA;EACA;EACA;EACA;EACA,sBAAsB,QAAwB,iBAAoC;GAChF,MAAM,WAAW,MAAM,OAAO,WAAW;AACzC,UAAOC,4BAAAA,kBAAkB;IACvB;IACA,YAAY,OAAO;IACnB,gBAAgB;IAChB;IACD,CAAC;;EAEJ,gBAAgB,sBAAsB,qBAAqB,KAAA;EAC5D,CAAC;CAEF,MAAM,iBAAiBD,+BAAAA,oBAA4B;EACjD,SAAS;EACT;EACA;EACA;EACA;EACA;EACA,sBAAsB,WAAmB,iBAAoC;GAC3E,MAAM,iBAAA,GAAA,MAAA,SAAsB,aAAa,IAAI,CAAC,MAAA,GAAA,MAAA,SAAW,aAAa,MAAM,EAAE,cAAc;GAC5F,MAAM,YAAA,GAAA,MAAA,SAAiB,UAAU,CAAC,QAAQ,MAAM;AAChD,UAAO;IAAE,OAAO,SAAS,QAAQ;IAAE,KAAK,SAAS,IAAI,eAAe,cAAc,CAAC,QAAQ;IAAE;;EAE/F,gBAAgB,sBAAsB,2BAA2B,KAAA;EAClE,CAAC;CAEF,MAAM,iBAAiBE,6BAAAA,kBAAkB;EACvC,SAAS,sBAAsB,SAAS;EACxC,YAAY,YAAY,UAAU,UAAU;AAC1C,OAAI,CAAC,cACH;GAEF,MAAM,YAAA,GAAA,MAAA,SAAiB,MAAM,CAAC,OAAO,aAAa;AAClD,iBACE,GAAG,SAAS,GAAG,MAAM,YAAY,aACjC,GAAG,SAAS,GAAG,MAAM,UAAU,UAChC;;EAEJ,CAAC;CAEF,MAAM,cAAcC,yBAAAA,eAAe;EACjC,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,oBAAoB,yBAAyB,CAAC,CAAC,wBAAwB,SAAS;CAEtF,MAAM,uBACJ,KACA,UACA,MACG;AACH,MAAI,CAAC,gBACH;EAGF,MAAM,YAAA,GAAA,MAAA,SAAiB,IAAI,CAAC,OAAO,aAAa;EAChD,MAAM,YAAY,MAAM,WAAW,MAAM,EAAE,cAAc,SAAS;AAClE,MAAI,cAAc,GAChB;EAGF,MAAM,OAAO,MAAM;AACnB,kBAAgB,GAAG,SAAS,GAAG,KAAK,aAAa,GAAG,SAAS,GAAG,KAAK,WAAW,EAAE;;CAGpF,MAAM,WAAWC,sBAAAA,YAAY;EAC3B,MAAM;EACN;EACA,aAAa,IAAI,eAAe,YAAY;EAC5C,gBAAgB,IAAI,kBAAkB,eAAe;EACtD,CAAC;CAWF,MAAM,aAAaC,6BAAAA,kBAAkB;EACnC;EACA,QAXqBC,gCAAAA,sBAAsB;GAC3C;GACA,aAAA,GAAA,MAAA,SAAkB,SAAS,GAAG,CAAC,QAAQ,MAAM,CAAC,QAAQ;GACtD,WAAA,GAAA,MAAA,SAAgB,SAAS,SAAS,SAAS,GAAG,CAC3C,MAAM,MAAM,CACZ,QAAQ;GACX,gBAAgB;GACjB,CAAC;EAKA;EACA;EACA,gBAAgB,IAAI,kBAAkB,eAAe;EACrD,aAAa,IAAI,eAAe,YAAY;EAC5C;EACD,CAAC;CAEF,MAAM,aAAa,MAAM,KAAK,aAAa;EAEzC,MAAM,QAAQC,oBAAAA,WAAW;GACvB,OAAA,GAAA,MAAA,SAFyB,IAAA,GAAA,MAAA,SAAS,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,SAAS,YAAY;GAGrF,QAAQ,IAAI,UAAU,OAAO;GAC7B,QAAQ;GACT,CAAC;AAEF,SACE,iBAAA,GAAA,MAAA,eAACC,cAAAA,KAAD;GACE,GAAI,UAAU,oBAAoB;GAClC,KAAK,SAAS;GACd,KAAK;IACH,cAAc,SAAS;IACvB,GAAGC,+BAAAA,oBAAoB;KACrB,MAAM,SAAS;KACf;KACA;KACD,CAAC;IACH;GAGG,EADH,MACG;GAER;CAEF,MAAM,YAAA,GAAA,MAAA,QAA8D,EAAE,CAAC;CACvE,MAAM,kBAAA,GAAA,MAAA,QAA6C,EAAE,CAAC;CACtD,MAAM,eAAA,GAAA,MAAA,QAA0C,EAAE,CAAC;CACnD,MAAM,yBAAA,GAAA,MAAA,QAA0D,EAAE,CAAC;CACnE,MAAM,qBAAA,GAAA,eAAA,cAAiC,aAAa,iBAAiB,YAAY;CAEjF,MAAM,iBAAiB;EAAE,UAAU;EAAG,WAAW;EAAG;AAEpD,EAAA,GAAA,eAAA,2BAA0B;AACxB,MAAI,CAAC,mBAAmB,CAAC,YAAY,QACnC;EAGF,MAAM,gBAAgB,SAAS,QAAQ;AACvC,MAAI,CAAC,iBAAiB,cAAc,WAAW,EAC7C;EAGF,MAAM,cAAc,MAAM,WAAW,MAAM,EAAE,aAAa,gBAAgB;AAC1E,MAAI,cAAc,EAChB;EAGF,MAAM,aAAa,cAAc;AACjC,MAAI,CAAC,WACH;EAGF,MAAM,WAAW,WAAW,uBAAuB;EACnD,MAAM,eAAe,YAAY,QAAQ,uBAAuB;AAChE,cAAY,QAAQ,SAAS;GAAE,MAAM;GAAG,KAAK,SAAS,MAAM,aAAa;GAAK,CAAC;IAC9E,EAAE,CAAC;CAEN,MAAM,6BAAA,GAAA,MAAA,cAAyC,OAAwB,aAAqB;EAC1F,MAAM,WAAW,SAAS,QAAQ,aAAa,EAAE;EACjD,MAAM,YAAY,SAAS,WAAW,aAAa;AACjD,OAAI,CAAC,SACH,QAAO;GAGT,MAAM,OAAO,SAAS,uBAAuB;AAC7C,UAAO,MAAM,WAAW,KAAK,OAAO,MAAM,WAAW,KAAK;IAC1D;AAEF,MAAI,aAAa,EACf,QAAO;EAGT,MAAM,YAAY,SAAS;EAC3B,MAAM,WAAW,SAAS,SAAS,SAAS;AAE5C,MAAI,CAAC,aAAa,CAAC,SACjB,QAAO;EAGT,MAAM,YAAY,UAAU,uBAAuB;EACnD,MAAM,WAAW,SAAS,uBAAuB;AAEjD,MAAI,MAAM,UAAU,UAAU,IAC5B,QAAO;AAGT,MAAI,MAAM,UAAU,SAAS,OAC3B,QAAO,SAAS,SAAS;AAG3B,SAAO;IACN,EAAE,CAAC;CAEN,MAAM,qBACJ,OACA,UACA,cACG;AACH,oCAAA,sBAAsB;GACpB,aAAa;GACb;GACA;GACA;GACD,CAAC;;CAGJ,MAAM,2BACJ,OACA,aACG;EACH,MAAM,YAAY,MAAM;AACxB,MAAI,cAAc,gBAAgB,WAAW,SAAS,SAAS,GAAG;AAChE,SAAM,gBAAgB;AACtB,kBAAe,QAAQ,WAAW,IAAI,OAAO;aACpC,cAAc,eAAe,WAAW,GAAG;AACpD,SAAM,gBAAgB;AACtB,kBAAe,QAAQ,WAAW,IAAI,OAAO;aACpC,cAAc,aAAa;AACpC,SAAM,gBAAgB;AACtB,YAAS,UAAU,YAAY,IAAI,OAAO;;;CAI9C,MAAM,wBACJ,OACA,aACG;EACH,MAAM,YAAY,MAAM;AACxB,MAAI,cAAc,gBAAgB,WAAW,SAAS,SAAS,GAAG;AAChE,SAAM,gBAAgB;AACtB,eAAY,QAAQ,WAAW,IAAI,OAAO;aACjC,cAAc,eAAe,WAAW,GAAG;AACpD,SAAM,gBAAgB;AACtB,eAAY,QAAQ,WAAW,IAAI,OAAO;;;CAI9C,MAAM,sBAAsB,2BACxB,SAAS,WAAW,SAAA,GAAA,MAAA,SAAc,IAAI,CAAC,QAAA,GAAA,MAAA,UAAc,EAAE,OAAO,CAAC,GAC/D;CAEJ,MAAM,iBAAiB,SAAS,KAAK,KAAK,aACxC,iBAAA,GAAA,MAAA,eAACC,cAAAA,gBAAD;EACE,GAAI,UAAU,mBAAmB;EACjC,KAAK;EACL,MAAM,SAAS;AACb,eAAY,QAAQ,YAAY;;EAElC,cAAY,GAAGC,eAAAA,SAAS,WAAW,OAAO,CAAC,IAAA,GAAA,MAAA,SAAS,IAAI,CAAC,OAAO,aAAa;EAC7E,KAAK;GACH,QAAA,GAAA,MAAA,SAAa,IAAI,CAAC,QAAA,GAAA,MAAA,UAAc,EAAE,MAAM,IAAI,CAAC,CAAC;GAC9C,SAAS,IAAI,eAAe,YAAY,CAAC,UAAA,GAAA,MAAA,SAAe,IAAI,CAAC,KAAK,CAAc;GAChF,QAAQ,SAAS;GAClB;EACD,UAAU,SAAS,WAAW,KAAK,aAAa,IAAI,IAAI;EACxD,WAAW,SAAS,WAAW,KAAA,KAAa,UAAU,qBAAqB,OAAO,SAAS;EAC3F,SACE,SAAS,WACL,KAAA,UACM;AACJ,kBAAe,MAAM;AACrB,kBAAeC,uBAAAA,aAAa,IAAI,CAAC;;EAU1B,EANf,iBAAA,GAAA,MAAA,eAACJ,cAAAA,KAAD;EAAK,GAAI,UAAU,qBAAqB;EAAE,KAAI;EAExC,EADHD,oBAAAA,WAAW;EAAE,QAAQ,IAAI,UAAU,OAAO;EAAE,MAAM;EAAK,QAAQ;EAAe,CAAC,CAC5E,EACN,iBAAA,GAAA,MAAA,eAAC,OAAD;EAAK,GAAI,UAAU,oBAAoB;EAAE,KAAI;EAEvC,GAAA,GAAA,MAAA,SADG,IAAI,CAAC,MAAM,CACd,CACS,CACjB;CAEF,MAAM,OAAO,SAAS,KAAK,KAAK,aAAa;EAG3C,MAAM,wBAFc,WAAW,iBAAiB,QAAQ,EAAE,EAGvD,QAAQ,UAAU,CAAC,MAAM,SAAS,OAAO,CACzC,KAAK,UAAU;GACd,MAAM,SAAS,MAAM,qBAAqB;IACxC,OAAO,MAAM,SAAS,MAAM;IAC5B;IACA,SAAS;IACT,cAAc;IACf,CAAC;GAEF,MAAM,cACJ,OAAO,oBAAoB,aAAa,gBAAgB,MAAM,GAAG,MAAM;GAEzE,MAAM,eAAe;IACnB,KAAK,MAAM,MAAM;IACjB,GAAG,UAAU,2BAA2B,EACtC,OAAO;KACL,KAAK,GAAG,MAAM,SAAS,IAAI;KAC3B,QAAQ,GAAG,MAAM,SAAS,OAAO;KACjC,OAAO;KACR,EACF,CAAC;IACF,QAAQ;KACN,iBAAiB,OAAO;KACxB,oBAAoB,OAAO;KAC5B;IACD,UAAU;IACX;AAED,OAAI,OAAO,gBAAgB,WACzB,QAAO,YAAY,OAAO,aAAoB;AAGhD,UAAO,iBAAA,GAAA,kBAAA,KAACC,cAAAA,KAAD,EAAK,GAAI,cAAgB,CAAA;IAChC;EAEJ,MAAM,aAAa,WAAW,cAAc,QAAQ,EAAE,EAAE,KAAK,UAAU;GACrE,MAAM,gBAAgBK,yBAAAA,cAAc;IAAE;IAAO,MAAM;IAAK,CAAC;GACzD,MAAM,cAAc,CAAC,iBAAiB,SAAS,iBAAiB,MAAM;GACtE,MAAM,cAAc,CAAC,iBAAiB,YAAY,iBAAiB,MAAM;GACzE,MAAM,iBAAiB,YAAY,kBAAkB,MAAM,GAAG;GAC9D,MAAM,WAAW,iBAAiB,eAAe,MAAM,MAAM,SAAS;GACtE,MAAM,cAAc,iBAAiB,eAAe,SAAS,MAAM,SAAS;AAE5E,UACE,iBAAA,GAAA,kBAAA,KAACC,sBAAAA,eAAD;IAES;IACP,UAAA;IACA,SAAS,MAAM,SAAS;IACxB,WAAW;IACX,YAAY;IACZ,YAAY,mBAAmB;IAC/B,eACE,eACK,MAAM,MAAM;KACX,MAAM,YAAY,sBAAsB,QAAQ;AAChD,SAAI,UACF,aAAY,kBACV,OACA,MACA,WACA,MAAM,SAAS,KACf,MAAM,SAAS,SAAA,GAAA,MAAA,SACT,IAAI,CAAC,OAAO,aAAa,EAC/B,EACD;QAGL,KAAA;IAEW;IACJ;IACL;IACF;IACN,SAAS,gBAAgB,MAAM,aAAa,OAAO,EAAE,GAAG,KAAA;IACxD,OAAO;KACL,UAAU;KACV,KAAK,QAAQ,SAAS;KACtB,MAAM,GAAG,MAAM,SAAS,OAAO;KAC/B,OAAO,GAAG,MAAM,SAAS,MAAM;KAC/B,QAAQ,QAAQ,YAAY;KAC7B;IACD,EArCK,MAAM,GAqCX;IAEJ;AAEF,SACE,iBAAA,GAAA,kBAAA,MAACC,oBAAAA,aAAD;GAEO;GACK;GACH;GACI;GACE;GACW;GACT;GACP;GACR,uBAAuB;GACjB;GACI;GACM;GAChB,eAAe;GACf,aAAa;GACb,oBACE,mBACK,WAAW;AACV,mBAAe,QAAQ,SAAS,OAAO;OAEzC,KAAA;GAEN,qBAAqB,OAAO,QAAQ,WAAW;IAC7C,MAAM,YAAY,0BAA0B,OAAO,OAAO;AAC1D,QAAI,cAAc,KAChB,UAAS,eAAe,OAAO;KAAE,KAAK;KAAQ;KAAW,CAAC;;GAG9D,qBAAqB,SAAS;GAC9B,iBAAiB,OAAO,QAAQ,WAAW;IACzC,MAAM,YAAY,0BAA0B,OAAO,OAAO;AAC1D,QAAI,cAAc,KAChB,UAAS,WAAW,OAAO;KAAE,KAAK;KAAQ;KAAW,CAAC;;GAG1D,qBACE,SAAS,YAAY,QAAQ,MAAM,SAAS,WAAW,YAAY,KAAA;GAEjD;GACpB,mBAAmB,eAAe;GAClC,oBAAoB,eAAe;GACnC,uBAAuB,SAAS;AAC9B,0BAAsB,QAAQ,YAAY;;aA3C9C,CA8CG,sBACA,UACW;KA/CP,IA+CO;GAEhB;CAEF,MAAM,cAAc,SAAS,KAAK,KAAK,aACrC,iBAAA,GAAA,kBAAA,KAACL,cAAAA,gBAAD;EACE,cAAY,GAAGC,eAAAA,SAAS,UAAU,OAAO,CAAC,IAAA,GAAA,MAAA,SAAS,IAAI,CAAC,OAAO,aAAa;EAE5E,MAAM,SAAS;AACb,kBAAe,QAAQ,YAAY;;EAErC,UAAU,aAAa,IAAI,IAAI;EAC/B,YAAY,UAAU,wBAAwB,OAAO,SAAS;EAC9D,SACE,SAAS,YAAY,CAAC,oBAClB,KAAA,KACC,MAAM,mBAAA,GAAA,MAAA,SAAwB,IAAI,CAAC,OAAO,aAAa,EAAE,EAAE;EAElE,YAAY,oBAAoB,MAAM,eAAe,eAAe,GAAG,IAAI,GAAG,KAAA;EAC9E,aAAa,mBAAmB,eAAe,kBAAkB,KAAA;EACjE,QAAQ,oBAAoB,MAAM,eAAe,WAAW,GAAG,IAAI,GAAG,KAAA;EACtE,GAAI,UAAU,kBAAkB;EAChC,KAAK,EAAE,eAAe,eAAe,aAAa,IAAI,EAAE;EACxD,EAhBK,IAgBL,CACF;CAEF,MAAM,kBAAA,GAAA,MAAA,eACE,IAAI,IAAI,WAAW,aAAa,KAAK,MAAM,EAAE,GAAG,CAAC,EACvD,CAAC,WAAW,aAAa,CAC1B;CAED,MAAM,eAAe,WAAW,aAAa,KAAK,UAChD,iBAAA,GAAA,kBAAA,KAACG,sBAAAA,eAAD;EAES;EACP,UAAA;EACA,QAAA;EACA,SAAS,MAAM,SAAS;EACxB,WAAW,eAAe,iBAAiB,MAAM;EACpC;EACP;EACN,SAAS,gBAAgB,MAAM,aAAa,OAAO,EAAE,GAAG,KAAA;EACxD,OAAO;GACL,UAAU;GACV,QAAQ;GACR,KAAK,QAAQ,MAAM,SAAS,MAAM,GAAG;GACrC,MAAM,QAAQ,MAAM,SAAS,OAAO;GACpC,OAAO,QAAQ,MAAM,SAAS,MAAM;GACpC,QAAQ;GACR,WAAW;GACZ;EACD,EAlBK,MAAM,GAkBX,CACF;CAEF,MAAM,6BAA6B,SAAS,SAAS,KAAK,aAAa;EACrE,MAAM,kBAAkB,WAAW,iBAAiB,QAAQ,EAAE,EAAE,QAC7D,UAAU,MAAM,SAAS,OAC3B;EACD,MAAM,WAAW,MAAM,SAAS;EAChC,MAAM,YAAY,WAAW;AAE7B,SAAO,eAAe,KAAK,UAAU;GACnC,MAAM,SAAS,MAAM,qBAAqB;IACxC,OAAO,MAAM,SAAS,MAAM;IAC5B;IACA,SAAS;IACT,cAAc;IACf,CAAC;GAEF,MAAM,cACJ,OAAO,oBAAoB,aAAa,gBAAgB,MAAM,GAAG,MAAM;GAEzE,MAAM,eAAe;IACnB,KAAK,aAAa,MAAM,GAAG,GAAG;IAC9B,GAAG,UAAU,2BAA2B,EACtC,OAAO;KACL,KAAK;KACL,QAAQ;KACR,MAAM,GAAG,UAAU;KACnB,OAAO,GAAG,SAAS;KACpB,EACF,CAAC;IACF,QAAQ;KACN,iBAAiB,OAAO;KACxB,oBAAoB,OAAO;KAC5B;IACD,UAAU;IACX;AAED,OAAI,OAAO,gBAAgB,WACzB,QAAO,YAAY,OAAO,aAAoB;AAGhD,UAAO,iBAAA,GAAA,kBAAA,KAACN,cAAAA,KAAD,EAAK,GAAI,cAAgB,CAAA;IAChC;GACF;CAGF,MAAM,YAAY,KAAK,IAAI,GAAG,WAAW,aAAa,KAAK,UAAU,MAAM,SAAS,IAAI,EAAE,EAAE,GAAG;CAE/F,MAAM,UACJ,iBAAA,GAAA,kBAAA,MAACA,cAAAA,KAAD;EACE,GAAI,UAAU,WAAW;EACzB,KAAK;GAAE,QAAQ,SAAS;GAAU,iBAAiB,eAAe;GAAY;EAC9E,GAAI;YAHN,CAKG,cACC,iBAAA,GAAA,kBAAA,KAACQ,2BAAAA,oBAAD;GACE,MAAK;GACL,oBAAoB;IAClB,gBAAgBC,sBAAAA,aAAa,MAAM,IAAI,kBAAkB,eAAe,CAAC;IACzE,YAAYC,kBAAAA,SAAS,MAAM,IAAI,kBAAkB,eAAe,CAAC;IACjE,aAAaN,uBAAAA,cAAAA,GAAAA,MAAAA,UAAoB,CAAC;IACnC;GACD,SAAS;IACP,KAAK;IACL,OAAOO,uBAAAA,aAAa;KAClB;KACA,QAAQ,IAAI,UAAU,OAAO;KAC7B;KACA;KACD,CAAC;IACH;GACO;GACM;GACA;GACQ;GACJ;GACC;GACF;GACD;GAChB,CAAA,EAGJ,iBAAA,GAAA,kBAAA,KAACX,cAAAA,KAAD;GACE,GAAI,UAAU,eAAe;GAC7B,QAAQ;IACN,4BACE,wBAAwB,KAAK,KAAA,IAAY,GAAG,sBAAsB;IACpE,oBAAoB,kBAChB,MACA,GAAG,IAAI,IAAI,eAAe,YAAY,CAAC;IAC5C;GACD,KAAK,EAAE,iBAAiB,iBAAiB;aAEzC,iBAAA,GAAA,kBAAA,MAACY,cAAAA,WAAW,UAAZ;IACE,eAAe;IACf,GAAI;IACJ,GAAI,UAAU,sBAAsB;KAClC,WAAW,iBAAiB;KAC5B,OAAO,iBAAiB;KACzB,CAAC;IACF,yBAAyB,aAAa;AACpC,sBAAiB,yBAAyB,SAAS;AACnD,iBAAY,SAAS,MAAM,EAAE;;IAE/B,aAAa;cAXf;KAaE,iBAAA,GAAA,kBAAA,MAACZ,cAAAA,KAAD;MAAK,GAAI,UAAU,iBAAiB;MAAE,KAAK,EAAE,UAAU;gBAAvD,CACE,iBAAA,GAAA,MAAA,eAAC,OAAD;OAAK,GAAI,UAAU,iBAAiB;OAAE,KAAI;OAOpC,EANH,kBACC,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,GAAI,UAAU,oBAAoB;iBAAGG,eAAAA,SAAS,QAAQ,OAAO;OAAO,CAAA,EACzE,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,GAAI,UAAU,qBAAqB;iBAAGU,wBAAAA,cAAc,KAAK;OAAO,CAAA,CACpE,EAAA,CAAA,CAED,EAEL,eACG;;KAEL,mBACC,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,GAAI,UAAU,sBAAsB;gBAAzC,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,GAAI,UAAU,2BAA2B;iBAAGV,eAAAA,SAAS,UAAU,OAAO;OAAO,CAAA,EAClF,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,GAAI,UAAU,0BAA0B;iBAA7C;QACG;QACD,iBAAA,GAAA,kBAAA,KAACH,cAAAA,KAAD;SACE,GAAI,UAAU,4BAA4B;SAC1C,QAAQ,EAAE,gBAAgB,GAAG,aAAa;mBAEzC;SACG,CAAA;QACL;QACG;SACF;;KAGR,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,GAAI,UAAU,gBAAgB;gBAAnC;OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;QAAK,GAAI,UAAU,qBAAqB;kBAAG;QAAiB,CAAA;OAE3D,4BAA4B,wBAAwB,MACnD,iBAAA,GAAA,kBAAA,KAACc,6BAAAA,sBAAD;QACE,aAAY;QACZ,WAAU;QACV,uBAAsB;QACtB,mBAAmB;QACnB,gBAAgB;QAChB,WAAW,wBAAwB,wBAAwB,IAAI;QACvD;QACG;QACF;QACT,GAAI;QACJ,CAAA;OAEH;OACG;;KACc;;GAClB,CAAA,CACF;;CAGR,MAAM,0BAAA,GAAA,MAAA,gBACG;EACL,YACE,SAAS,iBAAiB,cAAc,eAAe,iBAAiB;EAC1E,gBACE,SAAS,iBAAiB,kBAAkB,eAAe,iBAAiB;EAC9E,cACE,SAAS,iBAAiB,gBAAgB,eAAe,iBAAiB;EAC5E,YACE,SAAS,iBAAiB,cAAc,eAAe,iBAAiB;EAC1E,cAAc,UAA6B;AACzC,OAAI,eAAe,IAAI,MAAM,GAAG,CAC9B,gBAAe,gBAAgB,MAAM;OAErC,UAAS,gBAAgB,MAAM;;EAGnC,iBAAiB;AACf,YAAS,eAAe;AACxB,kBAAe,eAAe;;EAEhC,eAAe,SAAS,iBAAiB;EAC1C,GACD;EAAC,SAAS;EAAkB,eAAe;EAAkB;EAAe,CAC7E;AAED,KAAI,sBACF,QAAO,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,YAAY,UAAb;EAAsB,OAAO;YAAyB;EAA+B,CAAA;AAG9F,QAAO;EACP;AAEF,SAAS,cAAc;AACvB,SAAS,UAAUC,wBAAAA;AACnB,SAAS,eAAe"}
|
|
1
|
+
{"version":3,"file":"WeekView.cjs","names":["getDayTimeIntervals","useDragDropHandlers","calculateDropTime","useSlotDragSelect","useEventResize","getWeekDays","getWeekViewEvents","expandRecurringEvents","formatDate","Box","getBusinessHoursMod","UnstyledButton","getLabel","toDateString","isAllDayEvent","ScheduleEvent","WeekViewDay","ScheduleHeaderBase","previousWeek","nextWeek","getWeekLabel","ScrollArea","getWeekNumber","CurrentTimeIndicator","DragContext","classes"],"sources":["../../../src/components/WeekView/WeekView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n rem,\n ScrollArea,\n ScrollAreaAutosizeProps,\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 { useAutoScrollOnDrag } from '../../hooks/use-auto-scroll-on-drag';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useEventResize } from '../../hooks/use-event-resize';\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 ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateDropTime,\n expandRecurringEvents,\n formatDate,\n getBusinessHoursMod,\n getDayTimeIntervals,\n getWeekDays,\n getWeekNumber,\n isAllDayEvent,\n nextWeek,\n previousWeek,\n toDateString,\n} from '../../utils';\nimport {\n CurrentTimeIndicator,\n CurrentTimeIndicatorStylesNames,\n} from '../CurrentTimeIndicator/CurrentTimeIndicator';\nimport { DragContext, DragContextValue } from '../DragContext/DragContext';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getWeekLabel } from './get-week-label/get-week-label';\nimport { getWeekViewEvents } from './get-week-view-events/get-week-view-events';\nimport { handleWeekViewKeyDown, WeekViewControlsRef } from './handle-week-view-key-down';\nimport { WeekViewDay } from './WeekViewDay';\nimport classes from './WeekView.module.css';\n\nexport type WeekViewStylesNames =\n | 'weekView'\n | 'weekViewRoot'\n | 'weekViewHeader'\n | 'weekViewInner'\n | 'weekViewAllDaySlotsEvents'\n | 'weekViewAllDaySlots'\n | 'weekViewAllDaySlotsList'\n | 'weekViewAllDaySlot'\n | 'weekViewAllDaySlotsLabel'\n | 'weekViewScrollArea'\n | 'weekViewCorner'\n | 'weekViewSlotLabels'\n | 'weekViewSlotLabel'\n | 'weekViewDayLabel'\n | 'weekViewDayWeekday'\n | 'weekViewDay'\n | 'weekViewDayNumber'\n | 'weekViewDaySlot'\n | 'weekViewDaySlots'\n | 'weekViewWeekLabel'\n | 'weekViewWeekNumber'\n | 'weekViewBackgroundEvent'\n | CurrentTimeIndicatorStylesNames\n | CombinedScheduleHeaderStylesNames;\n\nexport type WeekViewCssVariables = {\n weekView: '--week-view-radius' | '--week-view-slot-height' | '--week-view-all-day-slots-height';\n};\n\nexport interface WeekViewProps\n extends BoxProps, StylesApiProps<WeekViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Week 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 /** Start time for the day view, in `HH:mm:ss` format @default 00:00:00 */\n startTime?: string;\n\n /** End time for the day view, in `HH:mm:ss` format @default 23:59:59 */\n endTime?: string;\n\n /** Number of minutes for each interval in the day view @default 60 */\n intervalMinutes?: number;\n\n /** Dayjs format for slot labels or a callback function that returns formatted value @default HH:mm */\n slotLabelFormat?: DateLabelFormat;\n\n /** Number 0-6, where 0 – Sunday and 6 – Saturday. @default 1 – Monday */\n firstDayOfWeek?: DayOfWeek;\n\n /** `dayjs` format for weekdays names. @default 'ddd' */\n weekdayFormat?: DateLabelFormat;\n\n /** Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. */\n weekendDays?: DayOfWeek[];\n\n /** If set to false, weekend days are hidden @default true */\n withWeekendDays?: boolean;\n\n /** If set to true, highlights today in the weekday row @default false */\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 /** Props passed down to the `ScrollArea.Autosize` component */\n scrollAreaProps?: ScrollAreaAutosizeProps & DataAttributes;\n\n /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n locale?: string;\n\n /** If set, the week number is displayed at the top left corner @default true */\n withWeekNumber?: boolean;\n\n /** If set, displays a line indicating the current time @default true */\n withCurrentTimeIndicator?: boolean;\n\n /** If set, the time indicator displays the current time in the bubble @default true */\n withCurrentTimeBubble?: boolean;\n\n /** If set, displays all-day slots at the top of the view @default true */\n withAllDaySlots?: boolean;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous 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 /** Format for week label @default 'MMM DD' */\n weekLabelFormat?: DateLabelFormat;\n\n /** List of events to display in the week view */\n events?: ScheduleEventData[];\n\n /** Height of 1hr slot @default 64px */\n slotHeight?: React.CSSProperties['height'];\n\n /** Height of all-day slot @default 48px */\n allDaySlotHeight?: React.CSSProperties['height'];\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n\n /** If set to true, highlights business hours with white background @default false */\n highlightBusinessHours?: boolean;\n\n /** Business hours range in `HH:mm:ss` format @default ['09:00:00', '17:00:00'] */\n businessHours?: [string, string];\n\n /** Function to customize event body, `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 at new time */\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 time slot is clicked */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n }) => void;\n\n /** Called when all-day slot is clicked */\n onAllDaySlotClick?: (day: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => 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 time slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a time slot range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default default */\n mode?: ScheduleMode;\n\n /** Time to scroll to on initial render, in `HH:mm:ss` format */\n startScrollTime?: string;\n\n /** Function to customize week label in the header */\n renderWeekLabel?: (params: {\n weekStart: DateStringValue;\n weekEnd: DateStringValue;\n }) => React.ReactNode;\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 /** If true, events can be resized by dragging their edges @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Function to get additional props for each time slot. Receives slot start and end datetime strings. Returned props are spread onto the slot element. Event handlers returned by this function are composed with internal handlers (e.g. onClick) rather than overriding them. */\n getTimeSlotProps?: (data: {\n start: DateTimeStringValue;\n end: DateTimeStringValue;\n }) => Record<string, any> | undefined;\n}\n\nexport type WeekViewFactory = Factory<{\n props: WeekViewProps;\n ref: HTMLDivElement;\n stylesNames: WeekViewStylesNames;\n vars: WeekViewCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'WeekView',\n withWeekendDays: true,\n withCurrentTimeIndicator: true,\n startTime: '00:00:00',\n endTime: '23:59:59',\n slotLabelFormat: 'HH:mm',\n intervalMinutes: 60,\n weekdayFormat: 'ddd',\n withWeekNumber: true,\n withCurrentTimeBubble: true,\n withAllDaySlots: true,\n withHeader: true,\n weekLabelFormat: 'MMM DD',\n highlightBusinessHours: false,\n businessHours: ['09:00:00', '17:00:00'],\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n withEventResize: false,\n mode: 'default',\n} satisfies Partial<WeekViewProps>;\n\nconst varsResolver = createVarsResolver<WeekViewFactory>(\n (_theme, { radius, allDaySlotHeight, slotHeight }) => ({\n weekView: {\n '--week-view-radius': radius !== undefined ? getRadius(radius) : undefined,\n '--week-view-all-day-slots-height': rem(allDaySlotHeight),\n '--week-view-slot-height': rem(slotHeight),\n },\n })\n);\n\nexport const WeekView = factory<WeekViewFactory>((_props) => {\n const props = useProps('WeekView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n startTime,\n endTime,\n date,\n onDateChange,\n intervalMinutes,\n slotLabelFormat,\n withWeekendDays,\n weekendDays,\n firstDayOfWeek,\n weekdayFormat,\n radius,\n highlightToday,\n withCurrentTimeIndicator,\n scrollAreaProps,\n locale,\n withWeekNumber,\n withCurrentTimeBubble,\n withAllDaySlots,\n __staticSelector,\n withHeader,\n onViewChange,\n previousControlProps,\n nextControlProps,\n todayControlProps,\n viewSelectProps,\n weekLabelFormat,\n events,\n allDaySlotHeight,\n slotHeight,\n labels,\n highlightBusinessHours,\n businessHours,\n renderEventBody,\n renderEvent,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n mode,\n startScrollTime,\n renderWeekLabel,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n getTimeSlotProps,\n ...others\n } = props;\n\n const getStyles = useStyles<WeekViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n attributes,\n rootSelector: 'weekView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<WeekViewFactory>({\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 [scrolled, setScrolled] = useState(false);\n const ctx = useDatesContext();\n const slots = getDayTimeIntervals({ startTime, endTime, intervalMinutes });\n const viewportRef = useRef<HTMLDivElement>(null);\n\n useAutoScrollOnDrag({\n viewportRef,\n enabled: (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static',\n });\n\n type DropTargetSlot = { day: string; slotIndex: number };\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, target: DropTargetSlot) => {\n if (!onExternalEventDrop) {\n return;\n }\n const slotDate = dayjs(target.day).format('YYYY-MM-DD');\n onExternalEventDrop(e.dataTransfer, `${slotDate} ${slots[target.slotIndex].startTime}`);\n },\n [onExternalEventDrop, slots]\n );\n\n const handleExternalAllDayDrop = 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<DropTargetSlot>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (target: DropTargetSlot, draggedEvent: ScheduleEventData) => {\n const slotTime = slots[target.slotIndex].startTime;\n return calculateDropTime({\n draggedEvent,\n targetDate: target.day,\n targetSlotTime: slotTime,\n intervalMinutes,\n });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n });\n\n const allDayDragDrop = useDragDropHandlers<string>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (targetDay: string, draggedEvent: ScheduleEventData) => {\n const eventDuration = dayjs(draggedEvent.end).diff(dayjs(draggedEvent.start), 'millisecond');\n const newStart = dayjs(targetDay).startOf('day');\n return { start: newStart.toDate(), end: newStart.add(eventDuration, 'millisecond').toDate() };\n },\n onExternalDrop: onExternalEventDrop ? handleExternalAllDayDrop : undefined,\n });\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex, group) => {\n if (!onSlotDragEnd) {\n return;\n }\n const slotDate = dayjs(group).format('YYYY-MM-DD');\n onSlotDragEnd(\n `${slotDate} ${slots[startIndex].startTime}`,\n `${slotDate} ${slots[endIndex].endTime}`\n );\n },\n });\n\n const eventResize = useEventResize({\n enabled: withEventResize,\n mode,\n startTime,\n endTime,\n intervalMinutes,\n onEventResize,\n canResizeEvent,\n });\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const handleTimeSlotClick = (\n day: string,\n slotTime: string,\n e: React.MouseEvent<HTMLButtonElement>\n ) => {\n if (!onTimeSlotClick) {\n return;\n }\n\n const slotDate = dayjs(day).format('YYYY-MM-DD');\n const slotIndex = slots.findIndex((s) => s.startTime === slotTime);\n if (slotIndex === -1) {\n return;\n }\n\n const slot = slots[slotIndex];\n onTimeSlotClick({\n slotStart: `${slotDate} ${slot.startTime}`,\n slotEnd: `${slotDate} ${slot.endTime}`,\n nativeEvent: e,\n });\n };\n\n const weekdays = getWeekDays({\n week: date,\n withWeekendDays,\n weekendDays: ctx.getWeekendDays(weekendDays),\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n });\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart: dayjs(weekdays[0]).startOf('day').toDate(),\n rangeEnd: dayjs(weekdays[weekdays.length - 1])\n .endOf('day')\n .toDate(),\n expansionLimit: recurrenceExpansionLimit,\n });\n\n const weekEvents = getWeekViewEvents({\n date,\n events: expandedEvents,\n startTime,\n endTime,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n weekendDays: ctx.getWeekendDays(weekendDays),\n withWeekendDays,\n });\n\n const timeValues = slots.map((interval) => {\n const intervalTime = dayjs(`${dayjs(date).format('YYYY-MM-DD')} ${interval.startTime}`);\n const label = formatDate({\n date: intervalTime,\n locale: ctx.getLocale(locale),\n format: slotLabelFormat,\n });\n\n return (\n <Box\n {...getStyles('weekViewSlotLabel')}\n key={interval.startTime}\n mod={{\n 'hour-start': interval.isHourStart,\n ...getBusinessHoursMod({\n time: interval.startTime,\n businessHours,\n highlightBusinessHours,\n }),\n }}\n >\n {label}\n </Box>\n );\n });\n\n const slotsRef: WeekViewControlsRef = useRef<HTMLButtonElement[][]>([]);\n const allDaySlotsRef = useRef<HTMLButtonElement[]>([]);\n const weekdaysRef = useRef<HTMLButtonElement[]>([]);\n const daySlotsContainersRef = useRef<(HTMLDivElement | null)[]>([]);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n\n const firstSlotIndex = { dayIndex: 0, slotIndex: 0 };\n\n useIsomorphicEffect(() => {\n if (!startScrollTime || !viewportRef.current) {\n return;\n }\n\n const firstDaySlots = slotsRef.current[0];\n if (!firstDaySlots || firstDaySlots.length === 0) {\n return;\n }\n\n const targetIndex = slots.findIndex((s) => s.startTime >= startScrollTime);\n if (targetIndex < 0) {\n return;\n }\n\n const targetSlot = firstDaySlots[targetIndex];\n if (!targetSlot) {\n return;\n }\n\n const slotRect = targetSlot.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n viewportRef.current.scrollTo({ left: 0, top: slotRect.top - viewportRect.top });\n }, []);\n\n const getSlotIndexFromDragPoint = useCallback((event: React.DragEvent, dayIndex: number) => {\n const daySlots = slotsRef.current[dayIndex] ?? [];\n const slotIndex = daySlots.findIndex((slotNode) => {\n if (!slotNode) {\n return false;\n }\n\n const rect = slotNode.getBoundingClientRect();\n return event.clientY >= rect.top && event.clientY <= rect.bottom;\n });\n\n if (slotIndex >= 0) {\n return slotIndex;\n }\n\n const firstSlot = daySlots[0];\n const lastSlot = daySlots[daySlots.length - 1];\n\n if (!firstSlot || !lastSlot) {\n return null;\n }\n\n const firstRect = firstSlot.getBoundingClientRect();\n const lastRect = lastSlot.getBoundingClientRect();\n\n if (event.clientY < firstRect.top) {\n return 0;\n }\n\n if (event.clientY > lastRect.bottom) {\n return daySlots.length - 1;\n }\n\n return null;\n }, []);\n\n const handleSlotKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n dayIndex: number,\n slotIndex: number\n ) => {\n handleWeekViewKeyDown({\n controlsRef: slotsRef,\n dayIndex,\n slotIndex,\n event,\n });\n };\n\n const handleAllDaySlotKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n dayIndex: number\n ) => {\n const direction = event.key;\n if (direction === 'ArrowRight' && dayIndex < weekdays.length - 1) {\n event.preventDefault();\n allDaySlotsRef.current[dayIndex + 1]?.focus();\n } else if (direction === 'ArrowLeft' && dayIndex > 0) {\n event.preventDefault();\n allDaySlotsRef.current[dayIndex - 1]?.focus();\n } else if (direction === 'ArrowDown') {\n event.preventDefault();\n slotsRef.current?.[dayIndex]?.[0]?.focus();\n }\n };\n\n const handleWeekdayKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n dayIndex: number\n ) => {\n const direction = event.key;\n if (direction === 'ArrowRight' && dayIndex < weekdays.length - 1) {\n event.preventDefault();\n weekdaysRef.current[dayIndex + 1]?.focus();\n } else if (direction === 'ArrowLeft' && dayIndex > 0) {\n event.preventDefault();\n weekdaysRef.current[dayIndex - 1]?.focus();\n }\n };\n\n const currentWeekdayIndex = withCurrentTimeIndicator\n ? weekdays.findIndex((day) => dayjs(day).isSame(dayjs(), 'date'))\n : -1;\n\n const weekdaysLabels = weekdays.map((day, dayIndex) => (\n <UnstyledButton\n {...getStyles('weekViewDayLabel')}\n key={day}\n ref={(node) => {\n weekdaysRef.current[dayIndex] = node!;\n }}\n aria-label={`${getLabel('weekday', labels)} ${dayjs(day).format('YYYY-MM-DD')}`}\n mod={{\n today: dayjs(day).isSame(dayjs(), 'day') && !!highlightToday,\n weekend: ctx.getWeekendDays(weekendDays).includes(dayjs(day).day() as DayOfWeek),\n static: mode === 'static',\n }}\n tabIndex={mode === 'static' ? -1 : dayIndex === 0 ? 0 : -1}\n onKeyDown={mode === 'static' ? undefined : (event) => handleWeekdayKeyDown(event, dayIndex)}\n onClick={\n mode === 'static'\n ? undefined\n : () => {\n onViewChange?.('day');\n onDateChange?.(toDateString(day));\n }\n }\n >\n <Box {...getStyles('weekViewDayWeekday')} key=\"weekday\">\n {formatDate({ locale: ctx.getLocale(locale), date: day, format: weekdayFormat })}\n </Box>\n <div {...getStyles('weekViewDayNumber')} key=\"date\">\n {dayjs(day).date()}\n </div>\n </UnstyledButton>\n ));\n\n const days = weekdays.map((day, dayIndex) => {\n const allBgEvents = weekEvents.backgroundEvents[day] || [];\n\n const backgroundEventNodes = allBgEvents\n .filter((event) => !event.position.allDay)\n .map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: `bg-${event.id}`,\n ...getStyles('weekViewBackgroundEvent', {\n style: {\n top: `${event.position.top}%`,\n height: `${event.position.height}%`,\n width: '100%',\n },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n return <Box {...bgEventProps} />;\n });\n\n const dayEvents = (weekEvents.regularEvents[day] || []).map((event) => {\n const eventIsAllDay = isAllDayEvent({ event, date: day });\n const isDraggable = !eventIsAllDay && dragDrop.isDraggableEvent(event);\n const isResizable = !eventIsAllDay && eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n const eventTop = resizePosition ? resizePosition.top : event.position.top;\n const eventHeight = resizePosition ? resizePosition.height : event.position.height;\n\n return (\n <ScheduleEvent\n key={event.id}\n event={event}\n autoSize\n hanging={event.position.hanging}\n draggable={isDraggable}\n withResize={isResizable}\n isResizing={resizePosition !== null}\n onResizeStart={\n isResizable\n ? (edge, e) => {\n const container = daySlotsContainersRef.current[dayIndex];\n if (container) {\n eventResize.handleResizeStart({\n event,\n edge,\n container,\n originalTop: event.position.top,\n originalHeight: event.position.height,\n eventDate: dayjs(day).format('YYYY-MM-DD'),\n pointerEvent: e,\n });\n }\n }\n : undefined\n }\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n style={{\n position: 'absolute',\n top: `calc(${eventTop}% + 1px)`,\n left: `${event.position.offset}%`,\n width: `${event.position.width}%`,\n height: `calc(${eventHeight}% - 1px)`,\n }}\n />\n );\n });\n\n return (\n <WeekViewDay\n key={day}\n day={day}\n dayIndex={dayIndex}\n slots={slots}\n getStyles={getStyles}\n weekendDays={weekendDays}\n highlightBusinessHours={highlightBusinessHours}\n businessHours={businessHours}\n labels={labels}\n withEventsDragAndDrop={withDragHandlers}\n mode={mode}\n slotsRef={slotsRef}\n firstSlotIndex={firstSlotIndex}\n onSlotKeyDown={handleSlotKeyDown}\n onSlotClick={handleTimeSlotClick}\n onFirstSlotArrowUp={\n withAllDaySlots\n ? (dayIdx) => {\n allDaySlotsRef.current[dayIdx]?.focus();\n }\n : undefined\n }\n onDaySlotsDragOver={(event, dayStr, dayIdx) => {\n const slotIndex = getSlotIndexFromDragPoint(event, dayIdx);\n if (slotIndex !== null) {\n dragDrop.handleDragOver(event, { day: dayStr, slotIndex });\n }\n }}\n onDaySlotsDragLeave={dragDrop.handleDragLeave}\n onDaySlotsDrop={(event, dayStr, dayIdx) => {\n const slotIndex = getSlotIndexFromDragPoint(event, dayIdx);\n if (slotIndex !== null) {\n dragDrop.handleDrop(event, { day: dayStr, slotIndex });\n }\n }}\n dropTargetSlotIndex={\n dragDrop.dropTarget?.day === day ? dragDrop.dropTarget.slotIndex : undefined\n }\n withDragSlotSelect={withDragSlotSelect}\n onSlotPointerDown={slotDragSelect.handleSlotPointerDown}\n isSlotDragSelected={slotDragSelect.isSlotSelected}\n daySlotsContainerRef={(node) => {\n daySlotsContainersRef.current[dayIndex] = node;\n }}\n getTimeSlotProps={getTimeSlotProps}\n >\n {backgroundEventNodes}\n {dayEvents}\n </WeekViewDay>\n );\n });\n\n const allDaySlots = weekdays.map((day, dayIndex) => (\n <UnstyledButton\n aria-label={`${getLabel('allDay', labels)} ${dayjs(day).format('YYYY-MM-DD')}`}\n key={day}\n ref={(node) => {\n allDaySlotsRef.current[dayIndex] = node!;\n }}\n tabIndex={dayIndex === 0 ? 0 : -1}\n onKeyDown={(event) => handleAllDaySlotKeyDown(event, dayIndex)}\n onClick={\n mode === 'static' || !onAllDaySlotClick\n ? undefined\n : (e) => onAllDaySlotClick(dayjs(day).format('YYYY-MM-DD'), e)\n }\n onDragOver={withDragHandlers ? (e) => allDayDragDrop.handleDragOver(e, day) : undefined}\n onDragLeave={withDragHandlers ? allDayDragDrop.handleDragLeave : undefined}\n onDrop={withDragHandlers ? (e) => allDayDragDrop.handleDrop(e, day) : undefined}\n {...getStyles('weekViewDaySlot')}\n mod={{ 'drop-target': allDayDragDrop.isDropTarget(day) }}\n />\n ));\n\n const allDayEventIds = useMemo(\n () => new Set(weekEvents.allDayEvents.map((e) => e.id)),\n [weekEvents.allDayEvents]\n );\n\n const allDayEvents = weekEvents.allDayEvents.map((event) => (\n <ScheduleEvent\n key={event.id}\n event={event}\n autoSize\n nowrap\n hanging={event.position.hanging}\n draggable={allDayDragDrop.isDraggableEvent(event)}\n renderEvent={renderEvent}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n style={{\n position: 'absolute',\n zIndex: 2,\n top: `calc(${event.position.row * 50}% + 1px)`,\n left: `calc(${event.position.offset}% + 1px)`,\n width: `calc(${event.position.width}% - 1px)`,\n height: 'calc(50% - 2px)',\n maxHeight: 'calc(50% - 2px)',\n }}\n />\n ));\n\n const allDayBackgroundEventNodes = weekdays.flatMap((day, dayIndex) => {\n const allDayBgEvents = (weekEvents.backgroundEvents[day] || []).filter(\n (event) => event.position.allDay\n );\n const dayWidth = 100 / weekdays.length;\n const dayOffset = dayIndex * dayWidth;\n\n return allDayBgEvents.map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: `bg-allday-${event.id}-${day}`,\n ...getStyles('weekViewBackgroundEvent', {\n style: {\n top: 0,\n height: '100%',\n left: `${dayOffset}%`,\n width: `${dayWidth}%`,\n },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n return <Box {...bgEventProps} />;\n });\n });\n\n // Extra rows show on hover = total rows - 2 visible rows (starts from 0, so -1)\n const extraRows = Math.max(...weekEvents.allDayEvents.map((event) => event.position.row), 1) - 1;\n\n const content = (\n <Box\n {...getStyles('weekView')}\n mod={{ static: mode === 'static', 'slot-dragging': slotDragSelect.isDragging }}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"week\"\n navigationHandlers={{\n previous: () => previousWeek(date, ctx.getFirstDayOfWeek(firstDayOfWeek)),\n next: () => nextWeek(date, ctx.getFirstDayOfWeek(firstDayOfWeek)),\n today: () => toDateString(dayjs()),\n }}\n control={{\n miw: 140,\n title: getWeekLabel({\n weekdays,\n locale: ctx.getLocale(locale),\n weekLabelFormat,\n renderWeekLabel,\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 />\n )}\n\n <Box\n {...getStyles('weekViewRoot')}\n __vars={{\n '--indicator-offset-index':\n currentWeekdayIndex === -1 ? undefined : `${currentWeekdayIndex + 1}`,\n '--number-of-days': withWeekendDays\n ? '7'\n : `${7 - ctx.getWeekendDays(weekendDays).length}`,\n }}\n mod={{ 'with-weekends': withWeekendDays }}\n >\n <ScrollArea.Autosize\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('weekViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n onScrollPositionChange={(position) => {\n scrollAreaProps?.onScrollPositionChange?.(position);\n setScrolled(position.y !== 0);\n }}\n viewportRef={mergedViewportRef}\n >\n <Box {...getStyles('weekViewHeader')} mod={{ scrolled }}>\n <div {...getStyles('weekViewCorner')} key=\"corner\">\n {withWeekNumber && (\n <>\n <div {...getStyles('weekViewWeekLabel')}>{getLabel('week', labels)}</div>\n <div {...getStyles('weekViewWeekNumber')}>{getWeekNumber(date)}</div>\n </>\n )}\n </div>\n\n {weekdaysLabels}\n </Box>\n\n {withAllDaySlots && (\n <div {...getStyles('weekViewAllDaySlots')}>\n <div {...getStyles('weekViewAllDaySlotsLabel')}>{getLabel('allDay', labels)}</div>\n <div {...getStyles('weekViewAllDaySlotsList')}>\n {allDayBackgroundEventNodes}\n <Box\n {...getStyles('weekViewAllDaySlotsEvents')}\n __vars={{ '--extra-rows': `${extraRows}` }}\n >\n {allDayEvents}\n </Box>\n {allDaySlots}\n </div>\n </div>\n )}\n\n <div {...getStyles('weekViewInner')}>\n <div {...getStyles('weekViewSlotLabels')}>{timeValues}</div>\n\n {withCurrentTimeIndicator && currentWeekdayIndex !== -1 && (\n <CurrentTimeIndicator\n startOffset=\"calc(100% - (100% / var(--number-of-days)) * (var(--number-of-days) - var(--indicator-offset-index) + 1) + ((var(--number-of-days) - var(--indicator-offset-index) + 1) * var(--indicator-labels-offset)))\"\n endOffset=\"calc((100% / var(--number-of-days)) * (var(--number-of-days) - var(--indicator-offset-index)) - (var(--number-of-days) - var(--indicator-offset-index)) * var(--indicator-labels-offset))\"\n timeBubbleStartOffset=\"calc(var(--week-view-slots-label-width) - var(--time-bubble-width))\"\n currentTimeFormat={slotLabelFormat}\n withTimeBubble={withCurrentTimeBubble}\n withThumb={withCurrentTimeBubble ? currentWeekdayIndex !== 0 : true}\n locale={locale}\n startTime={startTime}\n endTime={endTime}\n {...stylesApiProps}\n />\n )}\n {days}\n </div>\n </ScrollArea.Autosize>\n </Box>\n </Box>\n );\n\n const mergedDragContextValue = useMemo<DragContextValue>(\n () => ({\n isDragging:\n dragDrop.dragContextValue.isDragging || allDayDragDrop.dragContextValue.isDragging,\n draggedEventId:\n dragDrop.dragContextValue.draggedEventId ?? allDayDragDrop.dragContextValue.draggedEventId,\n draggedEvent:\n dragDrop.dragContextValue.draggedEvent ?? allDayDragDrop.dragContextValue.draggedEvent,\n dropTarget:\n dragDrop.dragContextValue.dropTarget ?? allDayDragDrop.dragContextValue.dropTarget,\n onDragStart: (event: ScheduleEventData) => {\n if (allDayEventIds.has(event.id)) {\n allDayDragDrop.handleDragStart(event);\n } else {\n dragDrop.handleDragStart(event);\n }\n },\n onDragEnd: () => {\n dragDrop.handleDragEnd();\n allDayDragDrop.handleDragEnd();\n },\n setDropTarget: dragDrop.dragContextValue.setDropTarget,\n }),\n [dragDrop.dragContextValue, allDayDragDrop.dragContextValue, allDayEventIds]\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={mergedDragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nWeekView.displayName = '@mantine/schedule/WeekView';\nWeekView.classes = classes;\nWeekView.varsResolver = varsResolver;\n"],"mappings":"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"}
|