import { type InjectionKey, type Ref } from 'vue'; import type { FreeformItemData, DragState, SelectionState, Position, DropTarget, DropZoneEntry } from '../types/index.js'; export declare const FREEFORM_CONTEXT_KEY: InjectionKey; export interface FreeformContext { items: Ref; dragState: Ref; selectionState: Ref; disabled: Ref; dropIndex: Ref; dragSourceIndex: Ref; currentDropTarget: Ref; /** Size of the first dragged item (for placeholder sizing) */ draggedItemSize: Ref<{ width: number; height: number; } | null>; registerItem: (id: string, element: HTMLElement) => void; unregisterItem: (id: string) => void; registerDropZone: (id: string, element: HTMLElement, item?: FreeformItemData, accept?: (items: FreeformItemData[]) => boolean) => void; unregisterDropZone: (id: string) => void; setDropTarget: (item: FreeformItemData, accept?: (items: FreeformItemData[]) => boolean) => void; clearDropTarget: () => void; select: (item: FreeformItemData, options?: { shift?: boolean; ctrl?: boolean; }) => void; clearSelection: () => void; startDrag: (item: FreeformItemData, event: PointerEvent) => void; getVisualIndex: (itemId: string) => number; } export interface FreeformContextInternal extends FreeformContext { itemElements: Map; handlePointerMove: (event: PointerEvent) => void; handlePointerUp: (event: PointerEvent) => void; } /** * Calculate placeholder position in "compacted space" (list without dragged items) * Used by both getVisualIndex and FreeformPlaceholder */ export declare function getPlaceholderPosition(items: FreeformItemData[], targetIndex: number, draggedIds: Set): number; export declare function createFreeformContext(): { context: FreeformContext; items: Ref<{ id: string; type?: import("../types/index.js").ItemType | undefined; position?: { x: number; y: number; } | undefined; disabled?: boolean | undefined; }[], FreeformItemData[] | { id: string; type?: import("../types/index.js").ItemType | undefined; position?: { x: number; y: number; } | undefined; disabled?: boolean | undefined; }[]>; dragState: Ref<{ active: boolean; items: { id: string; type?: import("../types/index.js").ItemType | undefined; position?: { x: number; y: number; } | undefined; disabled?: boolean | undefined; }[]; startPosition: { x: number; y: number; } | null; currentPosition: { x: number; y: number; } | null; offset: { x: number; y: number; } | null; thresholdPassed: boolean; }, DragState | { active: boolean; items: { id: string; type?: import("../types/index.js").ItemType | undefined; position?: { x: number; y: number; } | undefined; disabled?: boolean | undefined; }[]; startPosition: { x: number; y: number; } | null; currentPosition: { x: number; y: number; } | null; offset: { x: number; y: number; } | null; thresholdPassed: boolean; }>; selectionState: Ref<{ items: { id: string; type?: import("../types/index.js").ItemType | undefined; position?: { x: number; y: number; } | undefined; disabled?: boolean | undefined; }[]; lassoActive: boolean; lassoRect: { x: number; y: number; width: number; height: number; } | null; }, SelectionState | { items: { id: string; type?: import("../types/index.js").ItemType | undefined; position?: { x: number; y: number; } | undefined; disabled?: boolean | undefined; }[]; lassoActive: boolean; lassoRect: { x: number; y: number; width: number; height: number; } | null; }>; disabled: Ref; dropIndex: Ref; dragSourceIndex: Ref; currentDropTarget: Ref<{ item: { id: string; type?: import("../types/index.js").ItemType | undefined; position?: { x: number; y: number; } | undefined; disabled?: boolean | undefined; }; bounds: { x: number; y: number; width: number; height: number; }; type: import("../types/index.js").DropTargetType; accepted: boolean; } | null, DropTarget | { item: { id: string; type?: import("../types/index.js").ItemType | undefined; position?: { x: number; y: number; } | undefined; disabled?: boolean | undefined; }; bounds: { x: number; y: number; width: number; height: number; }; type: import("../types/index.js").DropTargetType; accepted: boolean; } | null>; containerElement: Ref; itemElements: Map; dropZones: Map>; handlePointerMove: (event: PointerEvent) => void; handlePointerUp: (_event: PointerEvent) => void; handleExternalDrop: (position: Position | null, incomingItems: FreeformItemData[]) => { dropIndex: number | null; containerId: string | null; containerAccepted: boolean; }; getVisualIndex: (itemId: string) => number; updateDropTarget: (position: Position, skipOscillationCheck?: boolean) => void; }; export declare function useFreeformContext(): FreeformContext;