import React from "react"; import { SpringConfig } from "../../animations/hooks/useMultiSpringBasic"; export interface DraggableItem { id: string; content: React.ReactNode; data?: unknown; } export interface DragState { isDragging: boolean; draggedItem: DraggableItem | null; dragIndex: number; hoverIndex: number; dragOffset: { x: number; y: number; }; dropTarget: HTMLElement | null; } export interface DraggableListPhysicsOptions { /** Enable physics-based animations */ enablePhysics?: boolean; /** Spring configuration for drag animations */ springConfig?: SpringConfig; /** Drag threshold in pixels */ dragThreshold?: number; /** Enable haptic feedback on mobile */ enableHaptics?: boolean; /** Custom drag handle selector */ dragHandle?: string; /** Enable auto-scroll when dragging near edges */ autoScroll?: boolean; /** Auto-scroll threshold from edges */ autoScrollThreshold?: number; /** Auto-scroll speed */ autoScrollSpeed?: number; /** Enable drop zones */ enableDropZones?: boolean; /** Custom drop zone validator */ validateDrop?: (draggedItem: DraggableItem, targetIndex: number) => boolean; /** Enable multi-select drag */ multiSelect?: boolean; /** Selected items for multi-select */ selectedItems?: string[]; } export declare function useDraggableListPhysics(items: DraggableItem[], onReorder: (fromIndex: number, toIndex: number, draggedItems?: DraggableItem[]) => void, options?: DraggableListPhysicsOptions): { dragState: DragState; containerRef: React.RefObject; selectedItems: string[]; physicsValues: Record; handleDragStart: (event: React.DragEvent | React.TouchEvent | MouseEvent, item: DraggableItem, index: number) => void; handleKeyDown: (event: KeyboardEvent, itemId: string) => void; toggleItemSelection: (itemId: string) => void; selectItemRange: (startId: string, endId: string) => void; clearSelection: () => void; isSelected: (itemId: string) => boolean; isDragging: boolean; canDrop: (targetIndex: number) => boolean; }; export declare function useItemTransitions(items: DraggableItem[], transitionType?: "slide" | "fade" | "scale" | "bounce", options?: { duration?: number; stagger?: number; direction?: "up" | "down" | "left" | "right"; easing?: string; }): { getTransitionStyle: (itemId: string, index: number) => { transition: string; transform: string; opacity: number; }; animateItem: (itemId: string) => void; animateAllItems: () => void; isAnimating: boolean; }; export declare function useDropZones(zones: Array<{ id: string; accepts: (item: DraggableItem) => boolean; onDrop: (item: DraggableItem, zoneId: string) => void; }>): { activeZone: string | null; isOverZone: boolean; getDraggableHandlers: (item: DraggableItem) => { draggable: boolean; onDragStart: (event: React.DragEvent) => void; onDragEnd: () => void; }; handleDragOver: (event: React.DragEvent, zoneId: string) => void; handleDragLeave: (event?: React.DragEvent) => void; handleDrop: (event: React.DragEvent, zoneId: string) => void; isValidDrop: (zoneId: string, item: DraggableItem) => boolean; }; //# sourceMappingURL=useDraggableListPhysics.d.ts.map