import { BoxProps, ElementProps, Factory, MantineRadius, StylesApiProps } from '@mantine/core'; import { ScheduleLabelsOverride } from '../../labels'; import { DateStringValue, DateTimeStringValue, ScheduleEventData, ScheduleMode, ScheduleViewLevel } from '../../types'; import { DayViewProps, DayViewStylesNames } from '../DayView/DayView'; import { MobileMonthViewProps, MobileMonthViewStylesNames } from '../MobileMonthView/MobileMonthView'; import { MonthViewProps, MonthViewStylesNames } from '../MonthView/MonthView'; import { RenderEventBody } from '../ScheduleEvent/ScheduleEvent'; import { WeekViewProps, WeekViewStylesNames } from '../WeekView/WeekView'; import { YearViewProps, YearViewStylesNames } from '../YearView/YearView'; export type ScheduleStylesNames = 'root' | 'desktopView' | 'mobileView' | DayViewStylesNames | WeekViewStylesNames | MonthViewStylesNames | YearViewStylesNames | MobileMonthViewStylesNames; export type ScheduleLayout = 'default' | 'responsive'; type ScheduleCommonProps = 'date' | 'onDateChange' | 'events' | 'locale' | 'radius' | 'labels' | 'renderEventBody' | 'withEventsDragAndDrop' | 'onEventDrop' | 'canDragEvent' | 'onEventDragStart' | 'onEventDragEnd' | 'onTimeSlotClick' | 'onAllDaySlotClick' | 'onEventClick' | 'onDayClick' | 'onMonthClick' | 'withDragSlotSelect' | 'onSlotDragEnd' | 'view' | 'onViewChange' | 'mode' | 'withAgenda' | 'onExternalEventDrop' | 'withEventResize' | 'onEventResize' | 'canResizeEvent' | 'recurrenceExpansionLimit'; type ScheduleViewProps = Partial>; export interface ScheduleProps extends BoxProps, StylesApiProps, ElementProps<'div'> { __staticSelector?: string; /** Current date to display (controlled) */ date?: Date | DateStringValue; /** Default date (uncontrolled) */ defaultDate?: Date | DateStringValue; /** Called when date changes via navigation */ onDateChange?: (date: DateStringValue) => void; /** Current view level (controlled) */ view?: ScheduleViewLevel; /** Default view level (uncontrolled) */ defaultView?: ScheduleViewLevel; /** Called when view level changes */ onViewChange?: (view: ScheduleViewLevel) => void; /** Events to display across all views */ events?: ScheduleEventData[]; /** Locale for date formatting (overrides `DatesProvider`) */ locale?: string; /** Key of theme.radius or any valid CSS value to set border-radius */ radius?: MantineRadius; /** Labels override for i18n */ labels?: ScheduleLabelsOverride; /** Custom event body renderer */ renderEventBody?: RenderEventBody; /** Enable drag and drop for events @default false */ withEventsDragAndDrop?: boolean; /** Called when event is dropped */ onEventDrop?: (data: { eventId: string | number; newStart: DateTimeStringValue; newEnd: DateTimeStringValue; event: ScheduleEventData; }) => void; /** Function to determine if event can be dragged */ canDragEvent?: (event: ScheduleEventData) => boolean; /** Called when any event drag starts */ onEventDragStart?: (event: ScheduleEventData) => void; /** Called when any event drag ends */ onEventDragEnd?: () => void; /** Called when time slot is clicked in DayView/WeekView */ onTimeSlotClick?: (data: { slotStart: DateTimeStringValue; slotEnd: DateTimeStringValue; nativeEvent: React.MouseEvent; }) => void; /** Called when all-day slot is clicked in DayView/WeekView */ onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent) => void; /** Called when a day is clicked in MonthView and YearView */ onDayClick?: (date: DateStringValue, event: React.MouseEvent) => void; /** If set, enables drag-to-select slot ranges @default false */ withDragSlotSelect?: boolean; /** Called when a slot range is selected by dragging */ onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void; /** Called when event is clicked in any view */ onEventClick?: (event: ScheduleEventData, e: React.MouseEvent) => void; /** Interaction mode: * - `'default'` allows all interactions * - `'static'` disables event interactions * @default 'default' */ mode?: ScheduleMode; /** Called when an external item is dropped onto the schedule. Receives the `DataTransfer` object and the drop target datetime. */ onExternalEventDrop?: (dataTransfer: DataTransfer, dropDateTime: DateTimeStringValue) => void; /** If true, events can be resized by dragging their edges @default false */ withEventResize?: boolean; /** Called when event is resized */ onEventResize?: (data: { eventId: string | number; newStart: DateTimeStringValue; newEnd: DateTimeStringValue; event: ScheduleEventData; }) => void; /** Function to determine if event can be resized */ canResizeEvent?: (event: ScheduleEventData) => boolean; /** Max number of generated recurring instances per recurring series @default 2000 */ recurrenceExpansionLimit?: number; /** Layout mode: * - `'default'` uses same views on all screen sizes * - `'responsive'` switches to YearView/MobileMonthView on small screens * @default 'default' */ layout?: ScheduleLayout; /** Props specific to DayView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */ dayViewProps?: ScheduleViewProps; /** Props specific to WeekView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */ weekViewProps?: ScheduleViewProps; /** Props specific to MonthView (includes `firstDayOfWeek`, `weekendDays`, etc.) */ monthViewProps?: ScheduleViewProps; /** Props specific to YearView (includes `firstDayOfWeek`, `weekendDays`, etc.) */ yearViewProps?: ScheduleViewProps; /** Props specific to MobileMonthView (used in responsive layout) */ mobileMonthViewProps?: ScheduleViewProps; /** If set, displays an Agenda button in the header of DayView, WeekView and MonthView @default false */ withAgenda?: boolean; } export type ScheduleFactory = Factory<{ props: ScheduleProps; ref: HTMLDivElement; stylesNames: ScheduleStylesNames; }>; export declare const Schedule: import("@mantine/core").MantineComponent<{ props: ScheduleProps; ref: HTMLDivElement; stylesNames: ScheduleStylesNames; }>; export declare namespace Schedule { type Props = ScheduleProps; type StylesNames = ScheduleStylesNames; type Factory = ScheduleFactory; type Layout = ScheduleLayout; } export {};