///
import React from 'react';
type ReactProps = Object;
type DraggableType =
string |
symbol |
((props: ReactProps) => string | symbol);
type DraggableSpec = {
beginDrag: (
props: ReactProps,
monitor: DraggableMonitor,
component: React.ReactNode
) => Object;
endDrag?: (
props: ReactProps,
monitor: DraggableMonitor,
component: React.ReactNode
) => void;
canDrag?: (
props: ReactProps,
monitor: DraggableMonitor
) => boolean;
isDragging?: (
props: Object,
monitor: DraggableMonitor
) => boolean;
};
type DraggableOptions = {
arePropsEqual?: (Object, Object) => boolean
};
type dragPreview = (elementOrNode: HTMLElement | React.ReactNode) => React.ReactNode;
type DraggableConnector = {
dragSource: () => (elementOrNode: HTMLElement | React.ReactNode, options?: { dropEffect: string }) => React.ReactNode,
dragPreview: () => dragPreview
}
type Offset = { x: number, y: number };
type DraggableMonitor = {
canDrag: () => boolean;
isDragging: () => boolean;
getItemType: () => null | DraggableType;
getItem: () => null | Object;
getDropResult: () => null | Object;
didDrop: () => boolean;
getInitialClientOffset: () => null | Offset;
getInitialSourceClientOffset: () => null | Offset;
getClientOffset: () => null | Offset;
getDifferenceFromInitialOffset: () => null | Offset;
getSourceClientOffset: () => null | Offset;
}
export interface DraggableProps {
type: DraggableType;
spec?: DraggableSpec;
collect?: (connect: DraggableConnector, monitor: DraggableMonitor) => Object;
options?: DraggableOptions;
layer?: undefined | false | React.ReactNode;
following?: false | true;
render?: ({ connectDragPreview: dragPreview, isDragging: boolean, style: Object, otherDragProps }) => React.ReactNode;
}
export default class Draggable extends React.Component{
render(): JSX.Element;
}