import * as React from 'react'; export type Axis = 'x' | 'y' | 'xy'; export type Offset = number | string; export interface SortStart { node: Element; index: number; collection: Offset; isKeySorting: boolean; nodes: HTMLElement[]; helper: HTMLElement; } export interface SortOver { index: number; oldIndex: number; newIndex: number; collection: Offset; isKeySorting: boolean; nodes: HTMLElement[]; helper: HTMLElement; } export interface SortEnd { oldIndex: number; newIndex: number; collection: Offset; isKeySorting: boolean; nodes: HTMLElement[]; } export type SortEvent = React.MouseEvent | React.TouchEvent; export type SortEventWithTag = SortEvent & { target: { tagName: string; }; }; export type SortStartHandler = (sort: SortStart, event: SortEvent) => void; export type SortMoveHandler = (event: SortEvent) => void; export type SortEndHandler = (sort: SortEnd, event: SortEvent) => void; export type SortOverHandler = (sort: SortOver, event: SortEvent) => void; export type ContainerGetter = ( element: React.ReactElement, ) => HTMLElement | Promise; export type HelperContainerGetter = () => HTMLElement; export interface Dimensions { width: number; height: number; } export interface SortableContainerProps { axis?: Axis; lockAxis?: Axis; helperClass?: string; transitionDuration?: number; keyboardSortingTransitionDuration?: number; keyCodes?: { lift?: number[]; drop?: number[]; cancel?: number[]; up?: number[]; down?: number[]; }; pressDelay?: number; pressThreshold?: number; distance?: number; shouldCancelStart?: (event: SortEvent | SortEventWithTag) => boolean; updateBeforeSortStart?: SortStartHandler; onSortStart?: SortStartHandler; onSortMove?: SortMoveHandler; onSortEnd?: SortEndHandler; onSortOver?: SortOverHandler; useDragHandle?: boolean; useWindowAsScrollContainer?: boolean; hideSortableGhost?: boolean; lockToContainerEdges?: boolean; lockOffset?: Offset | [Offset, Offset]; getContainer?: ContainerGetter; getHelperDimensions?: (sort: SortStart) => Dimensions; helperContainer?: HTMLElement | HelperContainerGetter; } export interface SortableElementProps { index: number; collection?: Offset; disabled?: boolean; } export interface Config { withRef: boolean; } export type WrappedComponentFactory

= (props: P) => JSX.Element; export type WrappedComponent

= | React.ComponentClass

| React.SFC

| WrappedComponentFactory

; export function SortableContainer

( wrappedComponent: WrappedComponent

, config?: Config, ): React.ComponentClass

; export function SortableElement

( wrappedComponent: WrappedComponent

, config?: Config, ): React.ComponentClass

; export function SortableHandle

( wrappedComponent: WrappedComponent

, config?: Config, ): React.ComponentClass

; export function arrayMove( collection: T[], previousIndex: number, newIndex: number, ): T[];