{"version":3,"file":"ResourcesWeekView.cjs","names":["getDayTimeIntervals","getOrderedResources","getWeekDays","getCurrentTimePosition","isInTimeRange","formatDate","useDragDropHandlers","calculateDropTime","getGroupToResourceIdMap","useSlotDragSelect","getResourcesWeekViewEvents","Box","getBusinessHoursMod","classes","getIndexFromDragPoint","isAllDayEvent","ScheduleEvent","getOverlapClusters","MoreEvents","ResourcesWeekViewRow","getWeekLabel","ScheduleHeaderBase","previousWeek","nextWeek","toDateString","ScrollArea","getLabel","DragContext"],"sources":["../../../src/components/ResourcesWeekView/ResourcesWeekView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  DataAttributes,\n  ElementProps,\n  factory,\n  Factory,\n  getRadius,\n  MantineRadius,\n  rem,\n  ScrollArea,\n  ScrollAreaProps,\n  StylesApiProps,\n  useMantineTheme,\n  useProps,\n  useResolvedStylesApi,\n  useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useInterval, useIsomorphicEffect, useMergedRef } from '@mantine/hooks';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n  DateLabelFormat,\n  DateStringValue,\n  DateTimeStringValue,\n  DayOfWeek,\n  ScheduleEventData,\n  ScheduleMode,\n  ScheduleResourceData,\n  ScheduleResourceGroup,\n  ScheduleViewLevel,\n} from '../../types';\nimport {\n  calculateDropTime,\n  formatDate,\n  getBusinessHoursMod,\n  getCurrentTimePosition,\n  getDayTimeIntervals,\n  getGroupToResourceIdMap,\n  getIndexFromDragPoint,\n  getOrderedResources,\n  getWeekDays,\n  handleResourcesGridKeyDown,\n  isAllDayEvent,\n  isInTimeRange,\n  nextWeek,\n  previousWeek,\n  ResourcesGridControlsRef,\n  toDateString,\n} from '../../utils';\nimport { DragContext, DragContextValue } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\nimport { getOverlapClusters } from '../ResourcesDayView/get-overlap-clusters/get-overlap-clusters';\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 '../WeekView/get-week-label/get-week-label';\nimport { getResourcesWeekViewEvents } from './get-resources-week-view-events/get-resources-week-view-events';\nimport { ResourcesWeekViewRow } from './ResourcesWeekViewRow';\nimport classes from './ResourcesWeekView.module.css';\n\nexport type ResourcesWeekViewStylesNames =\n  | 'resourcesWeekView'\n  | 'resourcesWeekViewRoot'\n  | 'resourcesWeekViewInner'\n  | 'resourcesWeekViewHeaderRows'\n  | 'resourcesWeekViewHeaderContent'\n  | 'resourcesWeekViewDayLabelsRow'\n  | 'resourcesWeekViewDayLabel'\n  | 'resourcesWeekViewTimeLabelsRow'\n  | 'resourcesWeekViewScrollArea'\n  | 'resourcesWeekViewCorner'\n  | 'resourcesWeekViewTimeLabel'\n  | 'resourcesWeekViewResourceLabel'\n  | 'resourcesWeekViewRow'\n  | 'resourcesWeekViewRowSlot'\n  | 'resourcesWeekViewRowSlots'\n  | 'resourcesWeekViewBackgroundEvent'\n  | 'resourcesWeekViewAllDayEvent'\n  | 'resourcesWeekViewCurrentTimeIndicator'\n  | 'resourcesWeekViewCurrentTimeIndicatorLine'\n  | 'resourcesWeekViewCurrentTimeIndicatorThumb'\n  | 'resourcesWeekViewCurrentTimeIndicatorTimeBubble'\n  | 'resourcesWeekViewEventWrapper'\n  | 'resourcesWeekViewResizeHandle'\n  | 'resourcesWeekViewGroupColumn'\n  | 'resourcesWeekViewGroupColumnEmpty'\n  | MoreEventsStylesNames\n  | CombinedScheduleHeaderStylesNames;\n\nexport type ResourcesWeekViewCssVariables = {\n  resourcesWeekView:\n    | '--resources-week-view-radius'\n    | '--resources-week-view-slot-width'\n    | '--resources-week-view-row-height'\n    | '--resources-week-view-group-label-width';\n};\n\nexport interface ResourcesWeekViewProps\n  extends BoxProps, StylesApiProps<ResourcesWeekViewFactory>, ElementProps<'div'> {\n  __staticSelector?: string;\n  date: Date | string;\n  onDateChange?: (value: DateStringValue) => void;\n  resources: ScheduleResourceData[];\n  startTime?: string;\n  endTime?: string;\n  intervalMinutes?: number;\n  slotLabelFormat?: DateLabelFormat;\n  radius?: MantineRadius;\n  /** Date and time to scroll to on initial render, in `YYYY-MM-DD HH:mm:ss` format */\n  startScrollDateTime?: string;\n  scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n  locale?: string;\n  withCurrentTimeIndicator?: boolean;\n  withCurrentTimeBubble?: boolean;\n  withHeader?: boolean;\n  onViewChange?: (view: ScheduleViewLevel) => void;\n  previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n  nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n  todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n  viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n  weekLabelFormat?: DateLabelFormat;\n  renderWeekLabel?: (params: {\n    weekStart: DateStringValue;\n    weekEnd: DateStringValue;\n  }) => React.ReactNode;\n  events?: ScheduleEventData[];\n  slotWidth?: React.CSSProperties['width'];\n  rowHeight?: React.CSSProperties['height'];\n  labels?: ScheduleLabelsOverride;\n  highlightBusinessHours?: boolean;\n  businessHours?: [string, string];\n  renderEventBody?: RenderEventBody;\n  renderEvent?: RenderEvent;\n  renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n  /** List of resource groups to display as a column to the left of resource labels */\n  groups?: ScheduleResourceGroup[];\n\n  /** Function to customize group label rendering */\n  renderGroupLabel?: (group: ScheduleResourceGroup) => React.ReactNode;\n\n  /** Width of the group label column @default 80px */\n  groupLabelWidth?: React.CSSProperties['width'];\n\n  withEventsDragAndDrop?: boolean;\n  onEventDrop?: (data: {\n    eventId: string | number;\n    newStart: DateTimeStringValue;\n    newEnd: DateTimeStringValue;\n    event: ScheduleEventData;\n    resourceId?: string | number;\n  }) => void;\n  canDragEvent?: (event: ScheduleEventData) => boolean;\n  onEventDragStart?: (event: ScheduleEventData) => void;\n  onEventDragEnd?: () => void;\n  onTimeSlotClick?: (data: {\n    slotStart: DateTimeStringValue;\n    slotEnd: DateTimeStringValue;\n    nativeEvent: React.MouseEvent<HTMLButtonElement>;\n    resourceId?: string | number;\n  }) => void;\n  onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n  withDragSlotSelect?: boolean;\n  onSlotDragEnd?: (data: {\n    rangeStart: DateTimeStringValue;\n    rangeEnd: DateTimeStringValue;\n    resourceId?: string | number;\n  }) => void;\n  mode?: ScheduleMode;\n  onExternalEventDrop?: (data: {\n    dataTransfer: DataTransfer;\n    dropDateTime: DateTimeStringValue;\n    resourceId?: string | number;\n  }) => void;\n  recurrenceExpansionLimit?: number;\n\n  /** Maximum number of events visible per time slot before \"+more\" indicator shows, minimum value is 1 @default 2 */\n  maxEventsPerTimeSlot?: number;\n\n  /** Props passed down to `MoreEvents` component */\n  moreEventsProps?: Partial<MoreEventsProps>;\n\n  firstDayOfWeek?: DayOfWeek;\n  weekendDays?: DayOfWeek[];\n  withWeekendDays?: boolean;\n  weekdayFormat?: DateLabelFormat;\n  highlightToday?: boolean;\n}\n\nexport type ResourcesWeekViewFactory = Factory<{\n  props: ResourcesWeekViewProps;\n  ref: HTMLDivElement;\n  stylesNames: ResourcesWeekViewStylesNames;\n  vars: ResourcesWeekViewCssVariables;\n}>;\n\nconst defaultProps = {\n  __staticSelector: 'ResourcesWeekView',\n  startTime: '00:00:00',\n  endTime: '23:59:59',\n  slotLabelFormat: 'HH:mm',\n  intervalMinutes: 60,\n  withHeader: true,\n  weekLabelFormat: 'MMM DD',\n  weekdayFormat: 'ddd D',\n  highlightBusinessHours: false,\n  businessHours: ['09:00:00', '17:00:00'],\n  withEventsDragAndDrop: false,\n  withDragSlotSelect: false,\n  withWeekendDays: true,\n  withCurrentTimeBubble: true,\n  highlightToday: true,\n  mode: 'default',\n  maxEventsPerTimeSlot: 2,\n} satisfies Partial<ResourcesWeekViewProps>;\n\nconst varsResolver = createVarsResolver<ResourcesWeekViewFactory>(\n  (_theme, { radius, slotWidth, rowHeight, groupLabelWidth }) => ({\n    resourcesWeekView: {\n      '--resources-week-view-radius': radius ? getRadius(radius) : undefined,\n      '--resources-week-view-slot-width': rem(slotWidth),\n      '--resources-week-view-row-height': rem(rowHeight),\n      '--resources-week-view-group-label-width': rem(groupLabelWidth),\n    },\n  })\n);\n\nexport const ResourcesWeekView = factory<ResourcesWeekViewFactory>((_props) => {\n  const props = useProps('ResourcesWeekView', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    attributes,\n    vars,\n    startTime,\n    endTime,\n    date,\n    onDateChange,\n    resources,\n    intervalMinutes,\n    slotLabelFormat,\n    radius,\n    startScrollDateTime,\n    scrollAreaProps,\n    locale,\n    withCurrentTimeIndicator: _withCurrentTimeIndicator,\n    withCurrentTimeBubble,\n    __staticSelector,\n    withHeader,\n    onViewChange,\n    previousControlProps,\n    nextControlProps,\n    todayControlProps,\n    viewSelectProps,\n    weekLabelFormat,\n    renderWeekLabel,\n    events,\n    slotWidth,\n    rowHeight,\n    labels,\n    highlightBusinessHours,\n    businessHours,\n    renderEventBody,\n    renderEvent,\n    renderResourceLabel,\n    groups,\n    renderGroupLabel,\n    groupLabelWidth,\n    withEventsDragAndDrop,\n    onEventDrop,\n    canDragEvent,\n    onEventDragStart,\n    onEventDragEnd,\n    onTimeSlotClick,\n    onEventClick,\n    withDragSlotSelect,\n    onSlotDragEnd,\n    mode,\n    onExternalEventDrop,\n    recurrenceExpansionLimit,\n    maxEventsPerTimeSlot: _maxEventsPerTimeSlot,\n    moreEventsProps,\n    firstDayOfWeek,\n    weekendDays,\n    withWeekendDays,\n    weekdayFormat,\n    highlightToday,\n    ...others\n  } = props;\n\n  const maxEventsPerTimeSlot =\n    _maxEventsPerTimeSlot !== undefined ? Math.max(1, _maxEventsPerTimeSlot) : undefined;\n\n  const getStyles = useStyles<ResourcesWeekViewFactory>({\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: 'resourcesWeekView',\n  });\n\n  const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ResourcesWeekViewFactory>({\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 [scrolledX, setScrolledX] = useState(false);\n  const ctx = useDatesContext();\n  const slots = getDayTimeIntervals({ startTime, endTime, intervalMinutes });\n  const { orderedResources, groupRanges, resourceGroupMap } = useMemo(\n    () => getOrderedResources(resources, groups),\n    [resources, groups]\n  );\n  const hasGroups = groupRanges.length > 0;\n\n  const weekdays = useMemo(\n    () =>\n      getWeekDays({\n        week: date,\n        withWeekendDays,\n        weekendDays: ctx.getWeekendDays(weekendDays),\n        firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n      }),\n    [date, withWeekendDays, weekendDays, firstDayOfWeek, ctx]\n  );\n\n  const totalSlotsPerDay = slots.length;\n\n  const isToday = weekdays.some((day) => dayjs(day).isSame(dayjs(), 'day'));\n  const withCurrentTimeIndicator = _withCurrentTimeIndicator ?? isToday;\n\n  const [timeIndicatorOffset, setTimeIndicatorOffset] = useState(\n    getCurrentTimePosition({ startTime, endTime, intervalMinutes })\n  );\n  useInterval(\n    () => setTimeIndicatorOffset(getCurrentTimePosition({ startTime, endTime, intervalMinutes })),\n    60000,\n    { autoInvoke: true }\n  );\n\n  const todayDayIndex = weekdays.findIndex((day) => dayjs(day).isSame(dayjs(), 'day'));\n  const showTimeIndicator =\n    withCurrentTimeIndicator &&\n    todayDayIndex >= 0 &&\n    isInTimeRange({ date: dayjs().toDate(), startTime, endTime });\n  const formattedCurrentTime = withCurrentTimeBubble\n    ? formatDate({ locale: ctx.getLocale(locale), date: dayjs(), format: slotLabelFormat })\n    : '';\n\n  type DropTargetSlot = { resourceId: string | number; slotIndex: number };\n\n  const handleExternalDrop = useCallback(\n    (e: React.DragEvent, target: DropTargetSlot) => {\n      if (!onExternalEventDrop) {\n        return;\n      }\n      const dayIndex = Math.floor(target.slotIndex / totalSlotsPerDay);\n      const slotInDay = target.slotIndex % totalSlotsPerDay;\n      const slotDay = weekdays[dayIndex];\n      if (slotDay) {\n        onExternalEventDrop({\n          dataTransfer: e.dataTransfer,\n          dropDateTime: `${dayjs(slotDay).format('YYYY-MM-DD')} ${slots[slotInDay].startTime}`,\n          resourceId: target.resourceId,\n        });\n      }\n    },\n    [onExternalEventDrop, slots, weekdays, totalSlotsPerDay]\n  );\n\n  const lastDropResourceId = useRef<string | number | undefined>(undefined);\n\n  const handleInternalEventDrop = useCallback(\n    (data: {\n      eventId: string | number;\n      newStart: DateTimeStringValue;\n      newEnd: DateTimeStringValue;\n      event: ScheduleEventData;\n    }) => {\n      onEventDrop?.({ ...data, resourceId: lastDropResourceId.current });\n    },\n    [onEventDrop]\n  );\n\n  const dragDrop = useDragDropHandlers<DropTargetSlot>({\n    enabled: withEventsDragAndDrop,\n    mode,\n    onEventDrop: handleInternalEventDrop,\n    canDragEvent,\n    onEventDragStart,\n    onEventDragEnd,\n    calculateDropTarget: (target: DropTargetSlot, draggedEvent: ScheduleEventData) => {\n      lastDropResourceId.current = target.resourceId;\n      const dayIndex = Math.floor(target.slotIndex / totalSlotsPerDay);\n      const slotInDay = target.slotIndex % totalSlotsPerDay;\n      const slotTime = slots[slotInDay].startTime;\n      const targetDay = weekdays[dayIndex] || weekdays[0];\n      return calculateDropTime({\n        draggedEvent,\n        targetDate: targetDay,\n        targetSlotTime: slotTime,\n        intervalMinutes,\n      });\n    },\n    onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n  });\n\n  const groupToResourceId = useMemo(() => getGroupToResourceIdMap(resources), [resources]);\n\n  const slotDragSelect = useSlotDragSelect({\n    enabled: withDragSlotSelect && mode !== 'static',\n    onDragEnd: (startIndex, endIndex, group) => {\n      if (!onSlotDragEnd) {\n        return;\n      }\n      const startDayIndex = Math.floor(startIndex / totalSlotsPerDay);\n      const startSlotInDay = startIndex % totalSlotsPerDay;\n      const endDayIndex = Math.floor(endIndex / totalSlotsPerDay);\n      const endSlotInDay = endIndex % totalSlotsPerDay;\n      const startDay = weekdays[startDayIndex];\n      const endDay = weekdays[endDayIndex];\n      if (startDay && endDay) {\n        onSlotDragEnd({\n          rangeStart: `${dayjs(startDay).format('YYYY-MM-DD')} ${slots[startSlotInDay].startTime}`,\n          rangeEnd: `${dayjs(endDay).format('YYYY-MM-DD')} ${slots[endSlotInDay].endTime}`,\n          resourceId: groupToResourceId.get(group) ?? group,\n        });\n      }\n    },\n  });\n\n  const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n  const handleTimeSlotClick = (\n    resourceId: string | number,\n    day: string,\n    slotTime: string,\n    e: React.MouseEvent<HTMLButtonElement>\n  ) => {\n    if (!onTimeSlotClick) {\n      return;\n    }\n    const slotIndex = slots.findIndex((s) => s.startTime === slotTime);\n    if (slotIndex === -1) {\n      return;\n    }\n    const slot = slots[slotIndex];\n    const dayStr = dayjs(day).format('YYYY-MM-DD');\n    onTimeSlotClick({\n      slotStart: `${dayStr} ${slot.startTime}`,\n      slotEnd: `${dayStr} ${slot.endTime}`,\n      nativeEvent: e,\n      resourceId,\n    });\n  };\n\n  const weekViewEvents = useMemo(\n    () =>\n      getResourcesWeekViewEvents({\n        events,\n        resources,\n        weekdays,\n        startTime,\n        endTime,\n        expansionLimit: recurrenceExpansionLimit,\n      }),\n    [events, resources, weekdays, startTime, endTime, recurrenceExpansionLimit]\n  );\n\n  const dayLabels = weekdays.map((day) => {\n    const d = dayjs(day);\n    const today = d.isSame(dayjs(), 'day') && highlightToday;\n    const weekend = ctx.getWeekendDays(weekendDays).includes(d.day() as DayOfWeek);\n\n    return (\n      <Box\n        {...getStyles('resourcesWeekViewDayLabel')}\n        key={day}\n        mod={{ today, weekend }}\n        style={{ width: `calc(var(--resources-week-view-slot-width) * ${totalSlotsPerDay})` }}\n      >\n        {formatDate({ date: d, locale: ctx.getLocale(locale), format: weekdayFormat })}\n      </Box>\n    );\n  });\n\n  const timeLabels = weekdays.flatMap((day) =>\n    slots.map((interval) => {\n      const dayStr = dayjs(day).format('YYYY-MM-DD');\n      const intervalTime = dayjs(`${dayStr} ${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('resourcesWeekViewTimeLabel')}\n          key={`${day}-${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\n  const slotsRef: ResourcesGridControlsRef = useRef<HTMLButtonElement[][]>([]);\n  const rowSlotsContainersRef = useRef<(HTMLDivElement | null)[]>([]);\n  const viewportRef = useRef<HTMLDivElement>(null);\n  const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n\n  const firstSlotIndex = { resourceIndex: 0, slotIndex: 0 };\n\n  useIsomorphicEffect(() => {\n    if (!startScrollDateTime || !viewportRef.current) {\n      return;\n    }\n    const parsed = dayjs(startScrollDateTime);\n    const targetDayStr = parsed.format('YYYY-MM-DD 00:00:00');\n    const targetTime = parsed.format('HH:mm:ss');\n    const dayIndex = weekdays.indexOf(targetDayStr);\n    if (dayIndex < 0) {\n      return;\n    }\n    const slotInDay = slots.findIndex((s) => s.startTime >= targetTime);\n    if (slotInDay < 0) {\n      return;\n    }\n    const flatIndex = dayIndex * totalSlotsPerDay + slotInDay;\n    const firstResourceSlots = slotsRef.current[0];\n    if (!firstResourceSlots || firstResourceSlots.length === 0) {\n      return;\n    }\n    const targetSlot = firstResourceSlots[flatIndex];\n    if (!targetSlot) {\n      return;\n    }\n    const slotRect = targetSlot.getBoundingClientRect();\n    const viewportRect = viewportRef.current.getBoundingClientRect();\n    const cornerEl = viewportRef.current.querySelector(`.${classes.resourcesWeekViewCorner}`);\n    const labelWidth = cornerEl ? cornerEl.getBoundingClientRect().width : 0;\n    viewportRef.current.scrollTo({\n      left: slotRect.left - viewportRect.left - labelWidth,\n      top: 0,\n    });\n  }, []);\n\n  const getSlotIndexFromDragPoint = useCallback((event: React.DragEvent, resourceIndex: number) => {\n    return getIndexFromDragPoint(slotsRef.current[resourceIndex] ?? [], event.clientX);\n  }, []);\n\n  const handleSlotKeyDown = (\n    event: React.KeyboardEvent<HTMLButtonElement>,\n    resourceIndex: number,\n    slotIndex: number\n  ) => {\n    handleResourcesGridKeyDown({\n      controlsRef: slotsRef,\n      resourceIndex,\n      slotIndex,\n      event,\n    });\n  };\n\n  const dayWidthPercent = 100 / weekdays.length;\n\n  const rows = orderedResources.map((resource, resourceIndex) => {\n    const eventNodes: React.ReactNode[] = [];\n    const resourceAllDayBars = weekViewEvents.allDayBars[resource.id] ?? [];\n    const maxAllDayCount = resourceAllDayBars.reduce((max, bar) => Math.max(max, bar.row + 1), 0);\n\n    weekdays.forEach((day, dayIndex) => {\n      const dayEvents = weekViewEvents.byDay[day];\n      if (!dayEvents) {\n        return;\n      }\n\n      const dayOffsetPercent = (dayIndex / weekdays.length) * 100;\n\n      const bgEvents = [\n        ...(dayEvents.backgroundTimedEvents[resource.id] || []),\n        ...(dayEvents.backgroundAllDayEvents[resource.id] || []),\n      ];\n      for (const event of bgEvents) {\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}-${day}`,\n          ...getStyles('resourcesWeekViewBackgroundEvent', {\n            style: {\n              left: `${dayOffsetPercent + (event.position.top / 100) * dayWidthPercent}%`,\n              width: `${(event.position.height / 100) * dayWidthPercent}%`,\n              top: 0,\n              height: '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          eventNodes.push(renderEvent(event, bgEventProps as any));\n        } else {\n          eventNodes.push(<Box {...bgEventProps} />);\n        }\n      }\n\n      const allRegularEvents = (dayEvents.regularEvents[resource.id] || []).filter(\n        (event) => !isAllDayEvent({ event, date: day })\n      );\n\n      const visibleEvents =\n        maxEventsPerTimeSlot !== undefined\n          ? allRegularEvents.filter((event) => event.position.column < maxEventsPerTimeSlot)\n          : allRegularEvents;\n\n      for (const event of visibleEvents) {\n        const isDraggable = dragDrop.isDraggableEvent(event);\n\n        const eventLeft = dayOffsetPercent + (event.position.top / 100) * dayWidthPercent;\n        const eventWidth = (event.position.height / 100) * dayWidthPercent;\n\n        const adjustPosition =\n          maxEventsPerTimeSlot !== undefined && event.position.overlaps > maxEventsPerTimeSlot;\n\n        eventNodes.push(\n          <div\n            key={`${event.id}-${day}`}\n            {...getStyles('resourcesWeekViewEventWrapper')}\n            style={{\n              left: `calc(${eventLeft}% + 1px)`,\n              top: adjustPosition\n                ? `calc((100% - 22px) * ${event.position.column} / ${maxEventsPerTimeSlot})`\n                : `${event.position.offset}%`,\n              width: `calc(${eventWidth}% - 2px)`,\n              height: adjustPosition\n                ? `calc((100% - 22px) / ${maxEventsPerTimeSlot})`\n                : `${event.position.width}%`,\n            }}\n          >\n            <ScheduleEvent\n              event={event}\n              autoSize\n              nowrap\n              draggable={isDraggable}\n              renderEventBody={renderEventBody}\n              renderEvent={renderEvent}\n              radius={radius}\n              mode={mode}\n              onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n              style={{ width: '100%', height: '100%' }}\n            />\n          </div>\n        );\n      }\n\n      if (maxEventsPerTimeSlot !== undefined) {\n        const clusters = getOverlapClusters(allRegularEvents);\n        for (const cluster of clusters) {\n          const hiddenCount = cluster.filter(\n            (e) => e.position.column >= maxEventsPerTimeSlot\n          ).length;\n\n          if (hiddenCount > 0 && mode !== 'static') {\n            const leftPercent =\n              dayOffsetPercent +\n              (Math.min(...cluster.map((e) => e.position.top)) / 100) * dayWidthPercent;\n            const rightPercent =\n              dayOffsetPercent +\n              (Math.max(...cluster.map((e) => e.position.top + e.position.height)) / 100) *\n                dayWidthPercent;\n\n            eventNodes.push(\n              <MoreEvents\n                key={`more-${resource.id}-${day}-${cluster[0].id}`}\n                events={cluster}\n                moreEventsCount={hiddenCount}\n                mode={mode}\n                labels={labels}\n                renderEventBody={renderEventBody}\n                renderEvent={renderEvent}\n                onEventClick={onEventClick}\n                style={{\n                  position: 'absolute',\n                  left: `calc(${leftPercent}% + 1px)`,\n                  width: `calc(${rightPercent - leftPercent}% - 2px)`,\n                  bottom: 0,\n                  height: '22px',\n                  paddingInline: 4,\n                  zIndex: 4,\n                }}\n                {...stylesApiProps}\n                {...moreEventsProps}\n              />\n            );\n          }\n        }\n      }\n    });\n\n    const stickyLabelOffset = hasGroups\n      ? 'calc(var(--resources-week-view-group-label-width) + var(--resources-week-view-resource-label-width) + 5px)'\n      : 'calc(var(--resources-week-view-resource-label-width) + 5px)';\n\n    resourceAllDayBars.forEach((bar) => {\n      const leftPercent = bar.startDayIndex * dayWidthPercent;\n      const widthPercent = (bar.endDayIndex - bar.startDayIndex + 1) * dayWidthPercent;\n\n      eventNodes.push(\n        <div\n          key={`all-day-${bar.event.id}-${bar.startDayIndex}`}\n          {...getStyles('resourcesWeekViewAllDayEvent', {\n            style: {\n              left: `calc(${leftPercent}% + 1px)`,\n              width: `calc(${widthPercent}% - 2px)`,\n              top: `calc(${bar.row} * (var(--resources-week-view-all-day-height) + 2px) + 2px)`,\n            },\n          })}\n        >\n          <ScheduleEvent\n            event={bar.event}\n            autoSize\n            nowrap\n            renderEventBody={(barEvent) => (\n              <span\n                style={{\n                  position: 'sticky',\n                  insetInlineStart: stickyLabelOffset,\n                  display: 'inline-block',\n                  maxWidth: '100%',\n                  overflow: 'hidden',\n                  textOverflow: 'ellipsis',\n                }}\n              >\n                {renderEventBody ? renderEventBody(barEvent) : barEvent.title}\n              </span>\n            )}\n            renderEvent={renderEvent}\n            radius={radius}\n            mode={mode}\n            onClick={onEventClick ? (e) => onEventClick(bar.event, e) : undefined}\n            style={{ width: '100%', height: '100%', overflow: 'visible' }}\n            styles={{\n              eventInner: {\n                display: 'block',\n                overflow: 'visible',\n                lineHeight: 'var(--resources-week-view-all-day-height)',\n              },\n            }}\n          />\n        </div>\n      );\n    });\n\n    return (\n      <ResourcesWeekViewRow\n        key={resource.id}\n        resource={resource}\n        resourceIndex={resourceIndex}\n        weekdays={weekdays}\n        slots={slots}\n        getStyles={getStyles}\n        labels={labels}\n        highlightBusinessHours={highlightBusinessHours}\n        businessHours={businessHours}\n        withEventsDragAndDrop={withDragHandlers}\n        mode={mode}\n        slotsRef={slotsRef}\n        firstSlotIndex={firstSlotIndex}\n        onSlotKeyDown={handleSlotKeyDown}\n        onSlotClick={handleTimeSlotClick}\n        onRowSlotsDragOver={(event, resourceId, resIdx) => {\n          const slotIndex = getSlotIndexFromDragPoint(event, resIdx);\n          if (slotIndex !== null) {\n            dragDrop.handleDragOver(event, { resourceId, slotIndex });\n          }\n        }}\n        onRowSlotsDragLeave={dragDrop.handleDragLeave}\n        onRowSlotsDrop={(event, resourceId, resIdx) => {\n          const slotIndex = getSlotIndexFromDragPoint(event, resIdx);\n          if (slotIndex !== null) {\n            dragDrop.handleDrop(event, { resourceId, slotIndex });\n          }\n        }}\n        dropTargetSlotIndex={\n          dragDrop.dropTarget?.resourceId === resource.id\n            ? dragDrop.dropTarget.slotIndex\n            : undefined\n        }\n        withDragSlotSelect={withDragSlotSelect}\n        onSlotPointerDown={slotDragSelect.handleSlotPointerDown}\n        isSlotDragSelected={slotDragSelect.isSlotSelected}\n        rowSlotsContainerRef={(node) => {\n          rowSlotsContainersRef.current[resourceIndex] = node;\n        }}\n        renderResourceLabel={renderResourceLabel}\n        renderGroupLabel={renderGroupLabel}\n        scrolledX={scrolledX}\n        groupInfo={hasGroups ? resourceGroupMap[resourceIndex] : undefined}\n        allDayCount={maxAllDayCount}\n      >\n        {eventNodes}\n      </ResourcesWeekViewRow>\n    );\n  });\n\n  const headerLabel = getWeekLabel({\n    weekdays,\n    locale: ctx.getLocale(locale),\n    weekLabelFormat: weekLabelFormat!,\n    renderWeekLabel,\n  });\n\n  const indicatorLeftPercent =\n    todayDayIndex >= 0 ? ((todayDayIndex + timeIndicatorOffset / 100) / weekdays.length) * 100 : 0;\n\n  const content = (\n    <Box\n      {...getStyles('resourcesWeekView')}\n      mod={{\n        static: mode === 'static',\n        'slot-dragging': slotDragSelect.isDragging,\n        'event-interaction': dragDrop.dragContextValue.isDragging,\n      }}\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: 180,\n            title: headerLabel,\n          }}\n          labels={labels}\n          onDateChange={onDateChange}\n          onViewChange={onViewChange}\n          previousControlProps={previousControlProps}\n          nextControlProps={nextControlProps}\n          todayControlProps={todayControlProps}\n          viewSelectProps={{ views: ['day', 'week', 'month'] as const, ...viewSelectProps }}\n          stylesApiProps={stylesApiProps}\n        />\n      )}\n\n      <Box {...getStyles('resourcesWeekViewRoot')}>\n        <ScrollArea\n          scrollbarSize={4}\n          {...scrollAreaProps}\n          {...getStyles('resourcesWeekViewScrollArea', {\n            className: scrollAreaProps?.className,\n            style: scrollAreaProps?.style,\n          })}\n          onScrollPositionChange={(position) => {\n            scrollAreaProps?.onScrollPositionChange?.(position);\n            setScrolled(position.y !== 0);\n            setScrolledX(position.x !== 0);\n          }}\n          viewportRef={mergedViewportRef}\n        >\n          <div {...getStyles('resourcesWeekViewInner')}>\n            <div {...getStyles('resourcesWeekViewHeaderRows')}>\n              <div\n                {...getStyles('resourcesWeekViewCorner')}\n                key=\"corner\"\n                style={\n                  hasGroups\n                    ? {\n                        flexBasis:\n                          'calc(var(--resources-week-view-resource-label-width) + var(--resources-week-view-group-label-width))',\n                        minWidth:\n                          'calc(var(--resources-week-view-resource-label-width) + var(--resources-week-view-group-label-width))',\n                      }\n                    : undefined\n                }\n              >\n                {getLabel('resources', labels)}\n              </div>\n              <div {...getStyles('resourcesWeekViewHeaderContent')}>\n                <div {...getStyles('resourcesWeekViewDayLabelsRow')}>{dayLabels}</div>\n                <Box {...getStyles('resourcesWeekViewTimeLabelsRow')} mod={{ scrolled }}>\n                  {timeLabels}\n                </Box>\n              </div>\n            </div>\n\n            {rows}\n\n            {showTimeIndicator && (\n              <Box\n                {...getStyles('resourcesWeekViewCurrentTimeIndicator')}\n                __vars={{\n                  '--indicator-left-offset': hasGroups\n                    ? `calc(var(--resources-week-view-resource-label-width) + var(--resources-week-view-group-label-width) + (100% - var(--resources-week-view-resource-label-width) - var(--resources-week-view-group-label-width)) * ${indicatorLeftPercent} / 100)`\n                    : `calc(var(--resources-week-view-resource-label-width) + (100% - var(--resources-week-view-resource-label-width)) * ${indicatorLeftPercent} / 100)`,\n                  '--_time-bubble-width': formattedCurrentTime\n                    ?.toString()\n                    .toLowerCase()\n                    .includes('m')\n                    ? '64px'\n                    : '46px',\n                }}\n              >\n                {withCurrentTimeBubble && (\n                  <div {...getStyles('resourcesWeekViewCurrentTimeIndicatorTimeBubble')}>\n                    {formattedCurrentTime}\n                  </div>\n                )}\n                {!withCurrentTimeBubble && (\n                  <div {...getStyles('resourcesWeekViewCurrentTimeIndicatorThumb')} />\n                )}\n                <div {...getStyles('resourcesWeekViewCurrentTimeIndicatorLine')} />\n              </Box>\n            )}\n          </div>\n        </ScrollArea>\n      </Box>\n    </Box>\n  );\n\n  const dragContextValue = useMemo<DragContextValue>(\n    () => dragDrop.dragContextValue,\n    [dragDrop.dragContextValue]\n  );\n\n  if (withEventsDragAndDrop) {\n    return <DragContext.Provider value={dragContextValue}>{content}</DragContext.Provider>;\n  }\n\n  return content;\n});\n\nResourcesWeekView.displayName = '@mantine/schedule/ResourcesWeekView';\nResourcesWeekView.classes = classes;\nResourcesWeekView.varsResolver = varsResolver;\n"],"mappings":"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"}