{"version":3,"file":"ResourcesSchedule.cjs","names":["ResourcesDayView","ResourcesWeekView","ResourcesMonthView","Box","classes"],"sources":["../../../src/components/ResourcesSchedule/ResourcesSchedule.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  ScheduleResourceData,\n  ScheduleViewLevel,\n} from '../../types';\nimport {\n  ResourcesDayView,\n  ResourcesDayViewProps,\n  ResourcesDayViewStylesNames,\n} from '../ResourcesDayView/ResourcesDayView';\nimport {\n  ResourcesMonthView,\n  ResourcesMonthViewProps,\n  ResourcesMonthViewStylesNames,\n} from '../ResourcesMonthView/ResourcesMonthView';\nimport {\n  ResourcesWeekView,\n  ResourcesWeekViewProps,\n  ResourcesWeekViewStylesNames,\n} from '../ResourcesWeekView/ResourcesWeekView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport classes from './ResourcesSchedule.module.css';\n\nexport type ResourcesScheduleStylesNames =\n  | 'root'\n  | ResourcesDayViewStylesNames\n  | ResourcesWeekViewStylesNames\n  | ResourcesMonthViewStylesNames;\n\nexport type ResourcesScheduleViewLevel = 'day' | 'week' | 'month';\n\ntype ResourcesScheduleCommonProps =\n  | 'date'\n  | 'onDateChange'\n  | 'resources'\n  | 'events'\n  | 'locale'\n  | 'radius'\n  | 'labels'\n  | 'renderEventBody'\n  | 'renderResourceLabel'\n  | 'withEventsDragAndDrop'\n  | 'onEventDrop'\n  | 'canDragEvent'\n  | 'onEventDragStart'\n  | 'onEventDragEnd'\n  | 'onTimeSlotClick'\n  | 'onEventClick'\n  | 'onDayClick'\n  | 'withDragSlotSelect'\n  | 'onSlotDragEnd'\n  | 'view'\n  | 'onViewChange'\n  | 'mode'\n  | 'onExternalEventDrop'\n  | 'withEventResize'\n  | 'onEventResize'\n  | 'canResizeEvent'\n  | 'recurrenceExpansionLimit';\n\ntype ResourcesScheduleViewProps<T> = Partial<Omit<T, ResourcesScheduleCommonProps>>;\n\nexport interface ResourcesScheduleProps\n  extends BoxProps, StylesApiProps<ResourcesScheduleFactory>, ElementProps<'div'> {\n  __staticSelector?: string;\n\n  /** List of resources to display */\n  resources: ScheduleResourceData[];\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?: ResourcesScheduleViewLevel;\n\n  /** Default view level (uncontrolled) @default 'day' */\n  defaultView?: ResourcesScheduleViewLevel;\n\n  /** Called when view level changes */\n  onViewChange?: (view: ResourcesScheduleViewLevel) => void;\n\n  /** Events to display across all views */\n  events?: ScheduleEventData[];\n\n  /** Locale for date formatting */\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  /** Custom resource label renderer */\n  renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\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    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 */\n  onTimeSlotClick?: (data: {\n    slotStart: DateTimeStringValue;\n    slotEnd: DateTimeStringValue;\n    nativeEvent: React.MouseEvent<HTMLButtonElement>;\n    resourceId?: string | number;\n  }) => void;\n\n  /** Called when day is clicked in month view */\n  onDayClick?: (data: {\n    date: DateStringValue;\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 slot ranges @default false */\n  withDragSlotSelect?: boolean;\n\n  /** Called when a slot range is selected by dragging */\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 @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 @default 2000 */\n  recurrenceExpansionLimit?: number;\n\n  /** Props specific to ResourcesDayView */\n  dayViewProps?: ResourcesScheduleViewProps<ResourcesDayViewProps>;\n\n  /** Props specific to ResourcesWeekView */\n  weekViewProps?: ResourcesScheduleViewProps<ResourcesWeekViewProps>;\n\n  /** Props specific to ResourcesMonthView */\n  monthViewProps?: ResourcesScheduleViewProps<ResourcesMonthViewProps>;\n}\n\nexport type ResourcesScheduleFactory = Factory<{\n  props: ResourcesScheduleProps;\n  ref: HTMLDivElement;\n  stylesNames: ResourcesScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ResourcesScheduleProps> = {\n  defaultView: 'day',\n  mode: 'default',\n};\n\nexport const ResourcesSchedule = factory<ResourcesScheduleFactory>((_props) => {\n  const props = useProps('ResourcesSchedule', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    resources,\n    date,\n    defaultDate,\n    onDateChange,\n    view,\n    defaultView,\n    onViewChange,\n    events,\n    locale,\n    radius,\n    labels,\n    renderEventBody,\n    renderResourceLabel,\n    withEventsDragAndDrop,\n    onEventDrop,\n    canDragEvent,\n    onEventDragStart,\n    onEventDragEnd,\n    onTimeSlotClick,\n    onDayClick,\n    onEventClick,\n    withDragSlotSelect,\n    onSlotDragEnd,\n    onExternalEventDrop,\n    withEventResize,\n    onEventResize,\n    canResizeEvent,\n    recurrenceExpansionLimit,\n    mode,\n    dayViewProps,\n    weekViewProps,\n    monthViewProps,\n    __staticSelector,\n    mod,\n    ...others\n  } = props;\n\n  const getStyles = useStyles<ResourcesScheduleFactory>({\n    name: __staticSelector || 'ResourcesSchedule',\n    classes,\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n  });\n\n  const [_view, _setView] = useUncontrolled<ResourcesScheduleViewLevel>({\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    if (newView === 'day' || newView === 'week' || newView === 'month') {\n      _setView(newView);\n    }\n  };\n\n  const commonProps = {\n    resources,\n    date: _date,\n    onDateChange: handleDateChange,\n    onViewChange: handleViewChange,\n    events,\n    locale,\n    radius,\n    labels,\n    renderEventBody,\n    renderResourceLabel,\n    withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n    onEventDrop,\n    canDragEvent,\n    onEventDragStart,\n    onEventDragEnd,\n    onEventClick,\n    withDragSlotSelect,\n    onSlotDragEnd,\n    onExternalEventDrop,\n    recurrenceExpansionLimit,\n    mode,\n  };\n\n  const content = (() => {\n    switch (_view) {\n      case 'day':\n        return (\n          <ResourcesDayView\n            {...commonProps}\n            onTimeSlotClick={onTimeSlotClick}\n            withEventResize={mode === 'static' ? false : withEventResize}\n            onEventResize={onEventResize}\n            canResizeEvent={canResizeEvent}\n            {...dayViewProps}\n          />\n        );\n      case 'week':\n        return (\n          <ResourcesWeekView\n            {...commonProps}\n            onTimeSlotClick={onTimeSlotClick}\n            {...weekViewProps}\n          />\n        );\n      case 'month':\n        return <ResourcesMonthView {...commonProps} onDayClick={onDayClick} {...monthViewProps} />;\n      default:\n        return null;\n    }\n  })();\n\n  return (\n    <Box {...getStyles('root')} mod={mod} {...others}>\n      {content}\n    </Box>\n  );\n});\n\nResourcesSchedule.displayName = '@mantine/schedule/ResourcesSchedule';\nResourcesSchedule.classes = classes;\n\nexport namespace ResourcesSchedule {\n  export type Props = ResourcesScheduleProps;\n  export type StylesNames = ResourcesScheduleStylesNames;\n  export type Factory = ResourcesScheduleFactory;\n  export type ViewLevel = ResourcesScheduleViewLevel;\n}\n"],"mappings":";;;;;;;;;AAqNA,MAAM,eAAgD;CACpD,aAAa;CACb,MAAM;AACR;AAEA,MAAa,qBAAA,GAAA,cAAA,QAAA,EAAuD,WAAW;CAC7E,MAAM,SAAA,GAAA,cAAA,SAAA,CAAiB,qBAAqB,cAAc,MAAM;CAChE,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,WACA,MACA,aACA,cACA,MACA,aACA,cACA,QACA,QACA,QACA,QACA,iBACA,qBACA,uBACA,aACA,cACA,kBACA,gBACA,iBACA,YACA,cACA,oBACA,eACA,qBACA,iBACA,eACA,gBACA,0BACA,MACA,cACA,eACA,gBACA,kBACA,KACA,GAAG,WACD;CAEJ,MAAM,aAAA,GAAA,cAAA,UAAA,CAAgD;EACpD,MAAM,oBAAoB;EAC1B,SAAA,iCAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAA,eAAA,gBAAA,CAAwD;EACpE,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAA,eAAA,gBAAA,CAAoD;EAChE,OAAO;EACP,cAAc,+BAAe,IAAI,KAAK;CACxC,CAAC;CAED,MAAM,oBAAoB,YAA6B;EACrD,SAAS,OAAO;EAChB,eAAe,OAAO;CACxB;CAEA,MAAM,oBAAoB,YAA+B;EACvD,IAAI,YAAY,SAAS,YAAY,UAAU,YAAY,SACzD,SAAS,OAAO;CAEpB;CAEA,MAAM,cAAc;EAClB;EACA,MAAM;EACN,cAAc;EACd,cAAc;EACd;EACA;EACA;EACA;EACA;EACA;EACA,uBAAuB,SAAS,WAAW,QAAQ;EACnD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,MAAM,iBAAiB;EACrB,QAAQ,OAAR;GACE,KAAK,OACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,yBAAAA,kBAAD;IACE,GAAI;IACa;IACjB,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,GAAI;GACL,CAAA;GAEL,KAAK,QACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,0BAAAA,mBAAD;IACE,GAAI;IACa;IACjB,GAAI;GACL,CAAA;GAEL,KAAK,SACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,2BAAAA,oBAAD;IAAoB,GAAI;IAAyB;IAAY,GAAI;GAAiB,CAAA;GAC3F,SACE,OAAO;EACX;CACF,EAAA,CAAG;CAEH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,KAAD;EAAK,GAAI,UAAU,MAAM;EAAQ;EAAK,GAAI;YACvC;CACE,CAAA;AAET,CAAC;AAED,kBAAkB,cAAc;AAChC,kBAAkB,UAAUC,iCAAAA"}