///
import * as React from 'react';
import React__default, { MutableRefObject } from 'react';
declare type Coordinates = {
x: number;
y: number;
};
declare type Transform = {
x: number;
y: number;
scaleX: number;
scaleY: number;
};
interface Transition {
property: string;
easing: string;
duration: number;
}
declare type Translate = Coordinates;
interface Collision {
id: UniqueIdentifier;
data?: Data;
}
declare type SensorContext = {
activatorEvent: Event | null;
active: Active | null;
activeNode: HTMLElement | null;
collisionRect: ClientRect | null;
collisions: Collision[] | null;
draggableNodes: DraggableNodes;
draggingNode: HTMLElement | null;
draggingNodeRect: ClientRect | null;
droppableRects: RectMap;
droppableContainers: DroppableContainers;
over: Over | null;
scrollableAncestors: Element[];
scrollAdjustedTranslate: Translate | null;
};
declare type KeyboardCoordinateGetter = (event: KeyboardEvent, args: {
active: UniqueIdentifier;
currentCoordinates: Coordinates;
context: SensorContext;
}) => Coordinates | void;
declare type UniqueIdentifier = string | number;
interface ClientRect {
width: number;
height: number;
top: number;
left: number;
right: number;
bottom: number;
}
declare type SyntheticListenerMap = Record;
declare type Identifier = UniqueIdentifier | null | undefined;
declare class DroppableContainersMap extends Map {
get(id: Identifier): DroppableContainer | undefined;
toArray(): DroppableContainer[];
getEnabled(): DroppableContainer[];
getNodeFor(id: Identifier): HTMLElement | undefined;
}
declare type AnyData = Record;
declare type Data = T & AnyData;
declare type DataRef = MutableRefObject | undefined>;
interface DroppableContainer {
id: UniqueIdentifier;
key: UniqueIdentifier;
data: DataRef;
disabled: boolean;
node: MutableRefObject;
rect: MutableRefObject;
}
interface Active {
id: UniqueIdentifier;
data: DataRef;
rect: MutableRefObject<{
initial: ClientRect | null;
translated: ClientRect | null;
}>;
}
interface Over {
id: UniqueIdentifier;
rect: ClientRect;
disabled: boolean;
data: DataRef;
}
declare type DraggableNode = {
id: UniqueIdentifier;
key: UniqueIdentifier;
node: MutableRefObject;
activatorNode: MutableRefObject;
data: DataRef;
};
declare type DraggableNodes = Map;
declare type DroppableContainers = DroppableContainersMap;
declare type RectMap = Map;
interface UseDraggableArguments {
id: UniqueIdentifier;
data?: Data;
disabled?: boolean;
attributes?: {
role?: string;
roleDescription?: string;
tabIndex?: number;
};
}
interface DraggableAttributes {
role: string;
tabIndex: number;
'aria-disabled': boolean;
'aria-pressed': boolean | undefined;
'aria-roledescription': string;
'aria-describedby': string;
}
interface ResizeObserverConfig {
/** Whether the ResizeObserver should be disabled entirely */
disabled?: boolean;
/** Resize events may affect the layout and position of other droppable containers.
* Specify an array of `UniqueIdentifier` of droppable containers that should also be re-measured
* when this droppable container resizes. Specifying an empty array re-measures all droppable containers.
*/
updateMeasurementsFor?: UniqueIdentifier[];
/** Represents the debounce timeout between when resize events are observed and when elements are re-measured */
timeout?: number;
}
interface UseDroppableArguments {
id: UniqueIdentifier;
disabled?: boolean;
data?: Data;
resizeObserverConfig?: ResizeObserverConfig;
}
interface Disabled {
draggable?: boolean;
droppable?: boolean;
}
declare type SortableData = {
sortable: {
containerId: UniqueIdentifier;
items: UniqueIdentifier[];
index: number;
};
};
declare type SortingStrategy = (args: {
activeNodeRect: ClientRect | null;
activeIndex: number;
index: number;
rects: ClientRect[];
overIndex: number;
}) => Transform | null;
interface Props {
children: React__default.ReactNode;
items: (UniqueIdentifier | {
id: UniqueIdentifier;
})[];
strategy?: SortingStrategy;
id?: string;
disabled?: boolean | Disabled;
}
declare function SortableContext({ children, id, items: userDefinedItems, strategy, disabled: disabledProp, }: Props): JSX.Element;
declare type SortableTransition = Pick;
declare type AnimateLayoutChanges = (args: {
active: Active | null;
containerId: UniqueIdentifier;
isDragging: boolean;
isSorting: boolean;
id: UniqueIdentifier;
index: number;
items: UniqueIdentifier[];
previousItems: UniqueIdentifier[];
previousContainerId: UniqueIdentifier;
newIndex: number;
transition: SortableTransition | null;
wasDragging: boolean;
}) => boolean;
interface NewIndexGetterArguments {
id: UniqueIdentifier;
items: UniqueIdentifier[];
activeIndex: number;
overIndex: number;
}
declare type NewIndexGetter = (args: NewIndexGetterArguments) => number;
interface Arguments extends Omit, Pick {
animateLayoutChanges?: AnimateLayoutChanges;
disabled?: boolean | Disabled;
getNewIndex?: NewIndexGetter;
strategy?: SortingStrategy;
transition?: SortableTransition | null;
}
declare function useSortable({ animateLayoutChanges, attributes: userDefinedAttributes, disabled: localDisabled, data: customData, getNewIndex, id, strategy: localStrategy, resizeObserverConfig, transition, }: Arguments): {
active: Active | null;
activeIndex: number;
attributes: DraggableAttributes;
data: SortableData & {
[x: string]: any;
};
rect: React.MutableRefObject;
index: number;
newIndex: number;
items: UniqueIdentifier[];
isOver: boolean;
isSorting: boolean;
isDragging: boolean;
listeners: SyntheticListenerMap | undefined;
node: React.MutableRefObject;
overIndex: number;
over: Over | null;
setNodeRef: (node: HTMLElement | null) => void;
setActivatorNodeRef: (element: HTMLElement | null) => void;
setDroppableNodeRef: (element: HTMLElement | null) => void;
setDraggableNodeRef: (element: HTMLElement | null) => void;
transform: Transform | null;
transition: string | undefined;
};
declare const verticalListSortingStrategy: SortingStrategy;
declare const sortableKeyboardCoordinates: KeyboardCoordinateGetter;
/**
* Move an array item to a different position. Returns a new array with the item moved to the new position.
*/
declare function arrayMove(array: T[], from: number, to: number): T[];
export { SortableContext, arrayMove, sortableKeyboardCoordinates, useSortable, verticalListSortingStrategy };