{"version":3,"file":"ResourcesDayView.cjs","names":["getDayTimeIntervals","getOrderedResources","useDragDropHandlers","calculateDropTime","getGroupToResourceIdMap","useSlotDragSelect","useHorizontalEventResize","getCurrentTimePosition","isInTimeRange","formatDate","expandRecurringEvents","getResourcesDayViewEvents","Box","getBusinessHoursMod","classes","getIndexFromDragPoint","isAllDayEvent","ScheduleEvent","getOverlapClusters","MoreEvents","ResourcesDayViewRow","ScheduleHeaderBase","toDateString","ScrollArea","getLabel","DragContext"],"sources":["../../../src/components/ResourcesDayView/ResourcesDayView.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 { useHorizontalEventResize } from '../../hooks/use-horizontal-event-resize';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n  DateLabelFormat,\n  DateStringValue,\n  DateTimeStringValue,\n  ScheduleEventData,\n  ScheduleMode,\n  ScheduleResourceData,\n  ScheduleResourceGroup,\n  ScheduleViewLevel,\n} from '../../types';\nimport {\n  calculateDropTime,\n  expandRecurringEvents,\n  formatDate,\n  getBusinessHoursMod,\n  getCurrentTimePosition,\n  getDayTimeIntervals,\n  getGroupToResourceIdMap,\n  getIndexFromDragPoint,\n  getOrderedResources,\n  handleResourcesGridKeyDown,\n  isAllDayEvent,\n  isInTimeRange,\n  ResourcesGridControlsRef,\n  toDateString,\n} from '../../utils';\nimport { DragContext, DragContextValue } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getOverlapClusters } from './get-overlap-clusters/get-overlap-clusters';\nimport { getResourcesDayViewEvents } from './get-resources-day-view-events/get-resources-day-view-events';\nimport { ResourcesDayViewRow } from './ResourcesDayViewColumn';\nimport classes from './ResourcesDayView.module.css';\n\nexport type ResourcesDayViewStylesNames =\n  | 'resourcesDayView'\n  | 'resourcesDayViewRoot'\n  | 'resourcesDayViewInner'\n  | 'resourcesDayViewTimeLabelsRow'\n  | 'resourcesDayViewScrollArea'\n  | 'resourcesDayViewCorner'\n  | 'resourcesDayViewTimeLabel'\n  | 'resourcesDayViewResourceLabel'\n  | 'resourcesDayViewRow'\n  | 'resourcesDayViewRowSlot'\n  | 'resourcesDayViewRowSlots'\n  | 'resourcesDayViewBackgroundEvent'\n  | 'resourcesDayViewAllDayEvent'\n  | 'resourcesDayViewCurrentTimeIndicator'\n  | 'resourcesDayViewCurrentTimeIndicatorLine'\n  | 'resourcesDayViewCurrentTimeIndicatorThumb'\n  | 'resourcesDayViewCurrentTimeIndicatorTimeBubble'\n  | 'resourcesDayViewEventWrapper'\n  | 'resourcesDayViewResizeHandle'\n  | 'resourcesDayViewGroupColumn'\n  | 'resourcesDayViewGroupColumnEmpty'\n  | MoreEventsStylesNames\n  | CombinedScheduleHeaderStylesNames;\n\nexport type ResourcesDayViewCssVariables = {\n  resourcesDayView:\n    | '--resources-day-view-radius'\n    | '--resources-day-view-slot-width'\n    | '--resources-day-view-row-height'\n    | '--resources-day-view-group-label-width';\n};\n\nexport interface ResourcesDayViewProps\n  extends BoxProps, StylesApiProps<ResourcesDayViewFactory>, ElementProps<'div'> {\n  __staticSelector?: string;\n\n  /** Day to display, Date object or date string in `YYYY-MM-DD` format */\n  date: Date | string;\n\n  /** Called with the new date value when a date is selected */\n  onDateChange?: (value: DateStringValue) => void;\n\n  /** List of resources to display as rows */\n  resources: ScheduleResourceData[];\n\n  /** 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  /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n  radius?: MantineRadius;\n\n  /** Time to scroll to on initial render, in `HH:mm:ss` format */\n  startScrollTime?: string;\n\n  /** Props passed down to the `ScrollArea` component */\n  scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n\n  /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n  locale?: string;\n\n  /** If set, displays a vertical line indicating the current time. By default, displayed only for the current day. */\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, 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 control */\n  previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n  /** Props passed to next control */\n  nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n  /** Props passed to today control */\n  todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n  /** Props passed to view level select */\n  viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n\n  /** Dayjs format for header label @default 'MMMM D, YYYY' */\n  headerFormat?: DateLabelFormat;\n\n  /** List of events to display */\n  events?: ScheduleEventData[];\n\n  /** Width of each time slot column @default 80px */\n  slotWidth?: React.CSSProperties['width'];\n\n  /** Height of each resource row @default 64px */\n  rowHeight?: 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 */\n  renderEventBody?: RenderEventBody;\n\n  /** Function to fully customize event rendering */\n  renderEvent?: RenderEvent;\n\n  /** Function to customize resource label rendering */\n  renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n  /** List of resource groups to display as a column to the left of resource labels */\n  groups?: ScheduleResourceGroup[];\n\n  /** Function to customize group label rendering */\n  renderGroupLabel?: (group: ScheduleResourceGroup) => React.ReactNode;\n\n  /** Width of the group label column @default 80px */\n  groupLabelWidth?: React.CSSProperties['width'];\n\n  /** If true, events can be dragged and dropped @default false */\n  withEventsDragAndDrop?: boolean;\n\n  /** Called when event is dropped at new time, includes target resourceId */\n  onEventDrop?: (data: {\n    eventId: string | number;\n    newStart: DateTimeStringValue;\n    newEnd: DateTimeStringValue;\n    event: ScheduleEventData;\n    resourceId?: string | number;\n  }) => void;\n\n  /** Function to determine if event can be dragged */\n  canDragEvent?: (event: ScheduleEventData) => boolean;\n\n  /** Called when any event drag starts */\n  onEventDragStart?: (event: ScheduleEventData) => void;\n\n  /** Called when any event drag ends */\n  onEventDragEnd?: () => void;\n\n  /** Called when time slot is clicked, includes resourceId */\n  onTimeSlotClick?: (data: {\n    slotStart: DateTimeStringValue;\n    slotEnd: DateTimeStringValue;\n    nativeEvent: React.MouseEvent<HTMLButtonElement>;\n    resourceId?: string | number;\n  }) => void;\n\n  /** Called when event is clicked */\n  onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n  /** If set, enables drag-to-select time slot ranges @default false */\n  withDragSlotSelect?: boolean;\n\n  /** Called when a time slot range is selected by dragging, includes resourceId */\n  onSlotDragEnd?: (data: {\n    rangeStart: DateTimeStringValue;\n    rangeEnd: DateTimeStringValue;\n    resourceId?: string | number;\n  }) => void;\n\n  /** Interaction mode @default default */\n  mode?: ScheduleMode;\n\n  /** Called when an external item is dropped onto the schedule */\n  onExternalEventDrop?: (data: {\n    dataTransfer: DataTransfer;\n    dropDateTime: DateTimeStringValue;\n    resourceId?: string | number;\n  }) => void;\n\n  /** If true, events can be resized by dragging their left/right 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  /** 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\nexport type ResourcesDayViewFactory = Factory<{\n  props: ResourcesDayViewProps;\n  ref: HTMLDivElement;\n  stylesNames: ResourcesDayViewStylesNames;\n  vars: ResourcesDayViewCssVariables;\n}>;\n\nconst defaultProps = {\n  __staticSelector: 'ResourcesDayView',\n  startTime: '00:00:00',\n  endTime: '23:59:59',\n  slotLabelFormat: 'HH:mm',\n  intervalMinutes: 60,\n  withHeader: true,\n  headerFormat: 'MMMM D, YYYY',\n  highlightBusinessHours: false,\n  businessHours: ['09:00:00', '17:00:00'],\n  withEventsDragAndDrop: false,\n  withDragSlotSelect: false,\n  withEventResize: false,\n  mode: 'default',\n  maxEventsPerTimeSlot: 2,\n} satisfies Partial<ResourcesDayViewProps>;\n\nconst varsResolver = createVarsResolver<ResourcesDayViewFactory>(\n  (_theme, { radius, slotWidth, rowHeight, groupLabelWidth }) => ({\n    resourcesDayView: {\n      '--resources-day-view-radius': radius ? getRadius(radius) : undefined,\n      '--resources-day-view-slot-width': rem(slotWidth),\n      '--resources-day-view-row-height': rem(rowHeight),\n      '--resources-day-view-group-label-width': rem(groupLabelWidth),\n    },\n  })\n);\n\nexport const ResourcesDayView = factory<ResourcesDayViewFactory>((_props) => {\n  const props = useProps('ResourcesDayView', 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    startScrollTime,\n    scrollAreaProps,\n    locale,\n    withCurrentTimeIndicator: _withCurrentTimeIndicator,\n    withCurrentTimeBubble = true,\n    __staticSelector,\n    withHeader,\n    onViewChange,\n    previousControlProps,\n    nextControlProps,\n    todayControlProps,\n    viewSelectProps,\n    headerFormat,\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    withEventResize,\n    onEventResize,\n    canResizeEvent,\n    recurrenceExpansionLimit,\n    maxEventsPerTimeSlot: _maxEventsPerTimeSlot,\n    moreEventsProps,\n    ...others\n  } = props;\n\n  const maxEventsPerTimeSlot =\n    _maxEventsPerTimeSlot !== undefined ? Math.max(1, _maxEventsPerTimeSlot) : undefined;\n\n  const getStyles = useStyles<ResourcesDayViewFactory>({\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: 'resourcesDayView',\n  });\n\n  const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ResourcesDayViewFactory>({\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  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 slotDate = dayjs(date).format('YYYY-MM-DD');\n      onExternalEventDrop({\n        dataTransfer: e.dataTransfer,\n        dropDateTime: `${slotDate} ${slots[target.slotIndex].startTime}`,\n        resourceId: target.resourceId,\n      });\n    },\n    [onExternalEventDrop, slots, date]\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 slotTime = slots[target.slotIndex].startTime;\n      return calculateDropTime({\n        draggedEvent,\n        targetDate: dayjs(date).format('YYYY-MM-DD'),\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 slotDate = dayjs(date).format('YYYY-MM-DD');\n      onSlotDragEnd({\n        rangeStart: `${slotDate} ${slots[startIndex].startTime}`,\n        rangeEnd: `${slotDate} ${slots[endIndex].endTime}`,\n        resourceId: groupToResourceId.get(group) ?? group,\n      });\n    },\n  });\n\n  const eventResize = useHorizontalEventResize({\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    resourceId: string | number,\n    slotTime: string,\n    e: React.MouseEvent<HTMLButtonElement>\n  ) => {\n    if (!onTimeSlotClick) {\n      return;\n    }\n\n    const slotDate = dayjs(date).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      resourceId,\n    });\n  };\n\n  const dateStr = dayjs(date).format('YYYY-MM-DD');\n  const isToday = dayjs(date).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  const showTimeIndicator =\n    withCurrentTimeIndicator && isInTimeRange({ date: dayjs().toDate(), startTime, endTime });\n  const formattedCurrentTime = withCurrentTimeBubble\n    ? formatDate({ locale: ctx.getLocale(locale), date: dayjs(), format: slotLabelFormat })\n    : '';\n\n  const expandedEvents = useMemo(\n    () =>\n      expandRecurringEvents({\n        events,\n        rangeStart: dayjs(date).startOf('day').toDate(),\n        rangeEnd: dayjs(date).endOf('day').toDate(),\n        expansionLimit: recurrenceExpansionLimit,\n      }),\n    [events, date, recurrenceExpansionLimit]\n  );\n\n  const resourceEvents = useMemo(\n    () =>\n      getResourcesDayViewEvents({\n        date,\n        events: expandedEvents,\n        resources,\n        startTime,\n        endTime,\n      }),\n    [date, expandedEvents, resources, startTime, endTime]\n  );\n\n  const timeLabels = slots.map((interval) => {\n    const intervalTime = dayjs(`${dateStr} ${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('resourcesDayViewTimeLabel')}\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: 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 (!startScrollTime || !viewportRef.current) {\n      return;\n    }\n\n    const firstResourceSlots = slotsRef.current[0];\n    if (!firstResourceSlots || firstResourceSlots.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 = firstResourceSlots[targetIndex];\n    if (!targetSlot) {\n      return;\n    }\n\n    const slotRect = targetSlot.getBoundingClientRect();\n    const viewportRect = viewportRef.current.getBoundingClientRect();\n    const cornerEl = viewportRef.current.querySelector(`.${classes.resourcesDayViewCorner}`);\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 rows = orderedResources.map((resource, resourceIndex) => {\n    const allBgEvents = [\n      ...(resourceEvents.backgroundTimedEvents[resource.id] || []),\n      ...(resourceEvents.backgroundAllDayEvents[resource.id] || []),\n    ];\n\n    // oxlint-disable-next-line react/jsx-key\n    const backgroundEventNodes = allBgEvents.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('resourcesDayViewBackgroundEvent', {\n          style: {\n            left: `${event.position.top}%`,\n            width: `${event.position.height}%`,\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        return renderEvent(event, bgEventProps as any);\n      }\n\n      return <Box {...bgEventProps} />;\n    });\n\n    const allRegularEvents = (resourceEvents.regularEvents[resource.id] || []).filter(\n      (event) => !isAllDayEvent({ event, date })\n    );\n\n    const visibleRegularEvents =\n      maxEventsPerTimeSlot !== undefined\n        ? allRegularEvents.filter((event) => event.position.column < maxEventsPerTimeSlot)\n        : allRegularEvents;\n\n    const regularEvents = visibleRegularEvents.map((event) => {\n      const isDraggable = dragDrop.isDraggableEvent(event);\n      const isResizable = eventResize.isResizableEvent(event);\n      const resizePosition = eventResize.getResizePosition(event.id);\n      const eventLeft = resizePosition ? resizePosition.left : event.position.top;\n      const eventWidth = resizePosition ? resizePosition.width : event.position.height;\n\n      const adjustPosition =\n        maxEventsPerTimeSlot !== undefined && event.position.overlaps > maxEventsPerTimeSlot;\n\n      const eventColors = isResizable\n        ? theme.variantColorResolver({\n            color: event.color || theme.primaryColor,\n            theme,\n            variant: event.variant || 'light',\n            autoContrast: true,\n          })\n        : null;\n\n      const isThisEventResizing = resizePosition !== null;\n      const activeEdge =\n        isThisEventResizing && eventResize.resizingEdge ? eventResize.resizingEdge : null;\n\n      return (\n        <Box\n          key={event.id}\n          {...getStyles('resourcesDayViewEventWrapper')}\n          __vars={eventColors ? { '--event-color': eventColors.color } : undefined}\n          data-resizing={isThisEventResizing || undefined}\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            isResizing={isThisEventResizing}\n            renderEventBody={renderEventBody}\n            renderEvent={renderEvent}\n            radius={radius}\n            mode={mode}\n            onClick={\n              onEventClick\n                ? (e) => {\n                    if (!eventResize.wasResizing()) {\n                      onEventClick(event, e);\n                    }\n                  }\n                : undefined\n            }\n            style={{ width: '100%', height: '100%' }}\n          />\n          {isResizable && mode !== 'static' && (\n            <>\n              <div\n                {...getStyles('resourcesDayViewResizeHandle')}\n                data-edge=\"start\"\n                data-active={activeEdge === 'start' || undefined}\n                onPointerDown={(e) => {\n                  const container = rowSlotsContainersRef.current[resourceIndex];\n                  if (container) {\n                    eventResize.handleResizeStart({\n                      event,\n                      edge: 'start',\n                      container,\n                      originalLeft: event.position.top,\n                      originalWidth: event.position.height,\n                      eventDate: dateStr,\n                      pointerEvent: e,\n                    });\n                  }\n                }}\n              />\n              <div\n                {...getStyles('resourcesDayViewResizeHandle')}\n                data-edge=\"end\"\n                data-active={activeEdge === 'end' || undefined}\n                onPointerDown={(e) => {\n                  const container = rowSlotsContainersRef.current[resourceIndex];\n                  if (container) {\n                    eventResize.handleResizeStart({\n                      event,\n                      edge: 'end',\n                      container,\n                      originalLeft: event.position.top,\n                      originalWidth: event.position.height,\n                      eventDate: dateStr,\n                      pointerEvent: e,\n                    });\n                  }\n                }}\n              />\n            </>\n          )}\n        </Box>\n      );\n    });\n\n    const allDayEvents = resourceEvents.allDayEvents[resource.id] || [];\n\n    const allDayEventNodes = allDayEvents.map((event, index) => (\n      <Box\n        key={`all-day-${event.id}`}\n        {...getStyles('resourcesDayViewAllDayEvent', {\n          style: {\n            top: `calc(${index} * (var(--resources-day-view-all-day-height) + 2px) + 2px)`,\n          },\n        })}\n      >\n        <ScheduleEvent\n          event={event}\n          autoSize\n          nowrap\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      </Box>\n    ));\n\n    const moreEventsForResource =\n      maxEventsPerTimeSlot !== undefined\n        ? getOverlapClusters(allRegularEvents)\n            .filter((cluster) => cluster.some((e) => e.position.column >= maxEventsPerTimeSlot))\n            .map((cluster) => {\n              const hiddenCount = cluster.filter(\n                (e) => e.position.column >= maxEventsPerTimeSlot\n              ).length;\n              const leftPercent = Math.min(...cluster.map((e) => e.position.top));\n              const rightPercent = Math.max(\n                ...cluster.map((e) => e.position.top + e.position.height)\n              );\n\n              return (\n                <MoreEvents\n                  key={`more-${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    return (\n      <ResourcesDayViewRow\n        key={resource.id}\n        resource={resource}\n        resourceIndex={resourceIndex}\n        date={dateStr}\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={allDayEvents.length}\n      >\n        {backgroundEventNodes}\n        {allDayEventNodes}\n        {regularEvents}\n        {moreEventsForResource}\n      </ResourcesDayViewRow>\n    );\n  });\n\n  const headerLabel = formatDate({\n    date: dayjs(date),\n    locale: ctx.getLocale(locale),\n    format: headerFormat,\n  });\n\n  const content = (\n    <Box\n      {...getStyles('resourcesDayView')}\n      mod={{\n        static: mode === 'static',\n        'slot-dragging': slotDragSelect.isDragging,\n        resizing: eventResize.isResizing,\n        'event-interaction': eventResize.isResizing || dragDrop.dragContextValue.isDragging,\n      }}\n      {...others}\n    >\n      {withHeader && (\n        <ScheduleHeaderBase\n          view=\"day\"\n          navigationHandlers={{\n            previous: () => toDateString(dayjs(date).subtract(1, 'day')),\n            next: () => toDateString(dayjs(date).add(1, 'day')),\n            today: () => toDateString(dayjs()),\n          }}\n          control={{\n            miw: 140,\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('resourcesDayViewRoot')}>\n        <ScrollArea\n          scrollbarSize={4}\n          {...scrollAreaProps}\n          {...getStyles('resourcesDayViewScrollArea', {\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('resourcesDayViewInner')}>\n            <Box {...getStyles('resourcesDayViewTimeLabelsRow')} mod={{ scrolled }}>\n              <div\n                {...getStyles('resourcesDayViewCorner')}\n                key=\"corner\"\n                style={\n                  hasGroups\n                    ? {\n                        flexBasis:\n                          'calc(var(--resources-day-view-resource-label-width) + var(--resources-day-view-group-label-width))',\n                        minWidth:\n                          'calc(var(--resources-day-view-resource-label-width) + var(--resources-day-view-group-label-width))',\n                      }\n                    : undefined\n                }\n              >\n                {getLabel('resources', labels)}\n              </div>\n              {timeLabels}\n            </Box>\n\n            {rows}\n\n            {showTimeIndicator && (\n              <Box\n                {...getStyles('resourcesDayViewCurrentTimeIndicator')}\n                __vars={{\n                  '--indicator-left-offset': hasGroups\n                    ? `calc(var(--resources-day-view-resource-label-width) + var(--resources-day-view-group-label-width) + (100% - var(--resources-day-view-resource-label-width) - var(--resources-day-view-group-label-width)) * ${timeIndicatorOffset} / 100)`\n                    : `calc(var(--resources-day-view-resource-label-width) + (100% - var(--resources-day-view-resource-label-width)) * ${timeIndicatorOffset} / 100)`,\n                  '--_time-bubble-width': formattedCurrentTime\n                    ?.toString()\n                    .toLowerCase()\n                    .includes('m')\n                    ? '64px'\n                    : '46px',\n                }}\n              >\n                {withCurrentTimeBubble && (\n                  <div {...getStyles('resourcesDayViewCurrentTimeIndicatorTimeBubble')}>\n                    {formattedCurrentTime}\n                  </div>\n                )}\n                {!withCurrentTimeBubble && (\n                  <div {...getStyles('resourcesDayViewCurrentTimeIndicatorThumb')} />\n                )}\n                <div {...getStyles('resourcesDayViewCurrentTimeIndicatorLine')} />\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\nResourcesDayView.displayName = '@mantine/schedule/ResourcesDayView';\nResourcesDayView.classes = classes;\nResourcesDayView.varsResolver = varsResolver;\n"],"mappings":"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"}