{"version":3,"file":"ResourcesDayViewColumn.cjs","names":["UnstyledButton","getBusinessHoursMod","getLabel","Box"],"sources":["../../../src/components/ResourcesDayView/ResourcesDayViewColumn.tsx"],"sourcesContent":["import { Box, GetStylesApi, UnstyledButton } from '@mantine/core';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport { ScheduleMode, ScheduleResourceData, ScheduleResourceGroup } from '../../types';\nimport {\n  DayTimeInterval,\n  getBusinessHoursMod,\n  ResourceGroupInfo,\n  ResourcesGridControlsRef,\n} from '../../utils';\nimport type { ResourcesDayViewFactory } from './ResourcesDayView';\n\nexport interface ResourcesDayViewRowProps {\n  resource: ScheduleResourceData;\n  resourceIndex: number;\n  date: string;\n  slots: DayTimeInterval[];\n  getStyles: GetStylesApi<ResourcesDayViewFactory>;\n  children?: React.ReactNode;\n  labels?: ScheduleLabelsOverride;\n  highlightBusinessHours?: boolean;\n  businessHours?: [string, string];\n  withEventsDragAndDrop?: boolean;\n  onRowSlotsDragOver?: (\n    e: React.DragEvent<HTMLDivElement>,\n    resourceId: string | number,\n    resourceIndex: number\n  ) => void;\n  onRowSlotsDragLeave?: () => void;\n  onRowSlotsDrop?: (\n    e: React.DragEvent<HTMLDivElement>,\n    resourceId: string | number,\n    resourceIndex: number\n  ) => void;\n  onSlotClick?: (\n    resourceId: string | number,\n    slotTime: string,\n    event: React.MouseEvent<HTMLButtonElement>\n  ) => void;\n  dropTargetSlotIndex?: number;\n  mode?: ScheduleMode;\n  slotsRef?: ResourcesGridControlsRef;\n  firstSlotIndex?: { resourceIndex: number; slotIndex: number };\n  onSlotKeyDown?: (\n    event: React.KeyboardEvent<HTMLButtonElement>,\n    resourceIndex: number,\n    slotIndex: number\n  ) => void;\n  withDragSlotSelect?: boolean;\n  onSlotPointerDown?: (\n    event: React.PointerEvent<HTMLButtonElement>,\n    index: number,\n    group: string\n  ) => void;\n  isSlotDragSelected?: (index: number, group: string) => boolean;\n  rowSlotsContainerRef?: (node: HTMLDivElement | null) => void;\n  renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n  renderGroupLabel?: (group: ScheduleResourceGroup) => React.ReactNode;\n  scrolledX?: boolean;\n  groupInfo?: ResourceGroupInfo | null;\n  allDayCount?: number;\n}\n\nexport function ResourcesDayViewRow({\n  resource,\n  resourceIndex,\n  date,\n  slots,\n  getStyles,\n  children,\n  labels,\n  highlightBusinessHours,\n  businessHours,\n  withEventsDragAndDrop,\n  onRowSlotsDragOver,\n  onRowSlotsDragLeave,\n  onRowSlotsDrop,\n  onSlotClick,\n  dropTargetSlotIndex,\n  mode,\n  slotsRef,\n  firstSlotIndex,\n  onSlotKeyDown,\n  withDragSlotSelect,\n  onSlotPointerDown,\n  isSlotDragSelected,\n  rowSlotsContainerRef,\n  renderResourceLabel,\n  renderGroupLabel,\n  scrolledX,\n  groupInfo,\n  allDayCount,\n}: ResourcesDayViewRowProps) {\n  const slotGroup = String(resource.id);\n\n  const items = slots.map((slot, slotIndex) => {\n    const isDropTarget = dropTargetSlotIndex === slotIndex;\n    const isFirstSlot =\n      firstSlotIndex?.resourceIndex === resourceIndex && firstSlotIndex?.slotIndex === slotIndex;\n    const isDragSelected = isSlotDragSelected?.(slotIndex, slotGroup) || false;\n\n    return (\n      <UnstyledButton\n        key={slot.startTime}\n        ref={(node) => {\n          if (!slotsRef?.current) {\n            return;\n          }\n          if (!slotsRef.current[resourceIndex]) {\n            slotsRef.current[resourceIndex] = [];\n          }\n          const row = slotsRef.current[resourceIndex];\n          if (node) {\n            row[slotIndex] = node;\n          } else {\n            delete row[slotIndex];\n            while (row.length > 0 && row[row.length - 1] == null) {\n              row.length -= 1;\n            }\n          }\n        }}\n        {...getStyles('resourcesDayViewRowSlot')}\n        mod={{\n          'hour-start': slot.isHourStart,\n          ...getBusinessHoursMod({\n            time: slot.startTime,\n            businessHours,\n            highlightBusinessHours,\n          }),\n          'drop-target': isDropTarget,\n          'drag-selected': isDragSelected,\n          static: mode === 'static',\n        }}\n        aria-label={`${getLabel('resourceSlot', labels)} ${resource.label} ${date} ${slot.startTime} - ${slot.endTime}`}\n        tabIndex={mode === 'static' ? -1 : isFirstSlot ? 0 : -1}\n        data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? slotIndex : undefined}\n        data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? slotGroup : undefined}\n        onKeyDown={(e) => {\n          if (onSlotKeyDown) {\n            onSlotKeyDown(e, resourceIndex, slotIndex);\n          }\n        }}\n        onPointerDown={\n          withDragSlotSelect && mode !== 'static'\n            ? (e) => onSlotPointerDown?.(e, slotIndex, slotGroup)\n            : undefined\n        }\n        onClick={\n          mode === 'static' || !onSlotClick\n            ? undefined\n            : (e) => onSlotClick(resource.id, slot.startTime, e)\n        }\n        onDragOver={\n          withEventsDragAndDrop && mode !== 'static' ? (e) => e.preventDefault() : undefined\n        }\n      />\n    );\n  });\n\n  const isGroupStart = groupInfo?.position === 'first' || groupInfo?.position === 'only';\n  const groupCell =\n    groupInfo !== undefined ? (\n      groupInfo !== null ? (\n        <Box\n          {...getStyles('resourcesDayViewGroupColumn')}\n          mod={{ 'scrolled-x': scrolledX, 'group-position': groupInfo.position }}\n        >\n          {isGroupStart && (\n            <span\n              style={\n                groupInfo.count > 1\n                  ? {\n                      transform: `translateY(calc((${groupInfo.count - 1} * (var(--resources-day-view-row-height) + 1px)) / 2))`,\n                    }\n                  : undefined\n              }\n            >\n              {renderGroupLabel ? renderGroupLabel(groupInfo.group) : groupInfo.group.label}\n            </span>\n          )}\n        </Box>\n      ) : (\n        <Box {...getStyles('resourcesDayViewGroupColumnEmpty')} mod={{ 'scrolled-x': scrolledX }} />\n      )\n    ) : null;\n\n  return (\n    <Box {...getStyles('resourcesDayViewRow')}>\n      {groupCell}\n      <Box\n        {...getStyles('resourcesDayViewResourceLabel')}\n        mod={{ 'scrolled-x': scrolledX, 'has-groups': groupInfo !== undefined }}\n      >\n        {renderResourceLabel ? renderResourceLabel(resource) : resource.label}\n      </Box>\n      <Box\n        ref={rowSlotsContainerRef}\n        {...getStyles('resourcesDayViewRowSlots', {\n          style: allDayCount\n            ? {\n                minHeight: `max(var(--resources-day-view-row-height), calc(${allDayCount} * (var(--resources-day-view-all-day-height) + 2px) + 4px))`,\n              }\n            : undefined,\n        })}\n        onDragOver={\n          withEventsDragAndDrop && mode !== 'static'\n            ? (e) => onRowSlotsDragOver?.(e, resource.id, resourceIndex)\n            : undefined\n        }\n        onDragLeave={withEventsDragAndDrop && mode !== 'static' ? onRowSlotsDragLeave : undefined}\n        onDrop={\n          withEventsDragAndDrop && mode !== 'static'\n            ? (e) => onRowSlotsDrop?.(e, resource.id, resourceIndex)\n            : undefined\n        }\n      >\n        {children}\n        {items}\n      </Box>\n    </Box>\n  );\n}\n"],"mappings":"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"}