import { Ref } from 'vue'; import { ScheduleEvent } from '../types/components'; export type DragType = 'create' | 'resize-top' | 'resize-bottom' | 'move'; export interface DragState { type: DragType; event?: ScheduleEvent; startDate: Date; startY: number; currentY: number; dayIndex: number; currentDayIndex: number; } export interface GhostEvent { start: Date; end: Date; dayIndex: number; style: Record; } export interface UseScheduleDragOptions { slotDuration: Ref; dayStartHour: Ref; dayEndHour: Ref; readonly: Ref; slotHeight: Ref; blockedSlots?: Ref<{ start: string; end: string; label?: string; }[]>; onCreateComplete?: (start: Date, end: Date) => void; onMoveComplete?: (event: ScheduleEvent, newStart: Date, newEnd: Date) => void; onResizeComplete?: (event: ScheduleEvent, newStart: Date, newEnd: Date) => void; } /** Handles pointer-driven create, move, and resize drag interactions for the ScheduleCalendar grid. */ export declare function useScheduleDrag(options: UseScheduleDragOptions): { isDragging: Ref; dragState: Ref<{ type: DragType; event?: { id: string; start: string; end: string; title: string; color?: string | undefined; status?: import('..').ScheduleEventStatus | undefined; draggable?: boolean | undefined; resizable?: boolean | undefined; metadata?: Record | undefined; } | undefined; startDate: Date; startY: number; currentY: number; dayIndex: number; currentDayIndex: number; } | null, DragState | { type: DragType; event?: { id: string; start: string; end: string; title: string; color?: string | undefined; status?: import('..').ScheduleEventStatus | undefined; draggable?: boolean | undefined; resizable?: boolean | undefined; metadata?: Record | undefined; } | undefined; startDate: Date; startY: number; currentY: number; dayIndex: number; currentDayIndex: number; } | null>; ghost: import('vue').ComputedRef; startCreate: (date: Date, y: number, dayIndex: number) => void; startMove: (event: ScheduleEvent, y: number, dayIndex: number) => void; startResize: (event: ScheduleEvent, edge: "top" | "bottom", y: number, dayIndex: number) => void; nudgeEvent: (event: ScheduleEvent, direction: -1 | 1, mode?: "move" | "resize") => boolean; };