{"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  | 'withAgenda'\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 a day is clicked in MonthView and YearView */\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  /** If set, displays an Agenda button in the header of DayView, WeekView and MonthView @default false */\n  withAgenda?: boolean;\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    withAgenda,\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    withAgenda,\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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"}