import { DragContextValue } from '../components/DragContext/DragContext'; import { DateTimeStringValue, ScheduleEventData, ScheduleMode } from '../types'; export interface UseDragDropHandlersOptions { /** Whether drag and drop is enabled */ enabled: boolean; /** Schedule interaction mode */ mode: ScheduleMode; /** Called when event is dropped at new location */ 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; /** * Function to calculate drop target dates from drop location. * Receives the target location and the dragged event. */ calculateDropTarget: (target: T, draggedEvent: ScheduleEventData) => { start: Date; end: Date; }; /** Called when an external item is dropped onto the schedule */ onExternalDrop?: (e: React.DragEvent, target: T) => void; } export interface DragDropHandlers { /** Context value for DragContext.Provider */ dragContextValue: DragContextValue; /** Current drop target */ dropTarget: T | null; /** Handle drag start event */ handleDragStart: (event: ScheduleEventData) => void; /** Handle drag end event */ handleDragEnd: () => void; /** Handle drag over event */ handleDragOver: (e: React.DragEvent, target: T) => void; /** Handle drag leave event */ handleDragLeave: () => void; /** Handle drop event */ handleDrop: (e: React.DragEvent, target: T) => void; /** Check if event is draggable */ isDraggableEvent: (event: ScheduleEventData) => boolean; /** Check if target is the current drop target */ isDropTarget: (target: T) => boolean; } /** * Hook that provides unified drag-drop handlers for Schedule views. * Handles drag state management and event drops across Day, Week, and Month views. * * @template T - Type of the drop target (e.g., slot index, day string, etc.) */ export declare function useDragDropHandlers(options: UseDragDropHandlersOptions): DragDropHandlers;