react-beautiful-dnd-next
Version:
Beautiful and accessible drag and drop for lists with React
62 lines (53 loc) • 1.83 kB
JavaScript
// @flow
import { type Position } from 'css-box-model';
import type { MovementMode, DraggableId } from '../../types';
export type Callbacks = {|
onLift: ({
clientSelection: Position,
movementMode: MovementMode,
}) => mixed,
onMove: (point: Position) => mixed,
onWindowScroll: () => mixed,
onMoveUp: () => mixed,
onMoveDown: () => mixed,
onMoveRight: () => mixed,
onMoveLeft: () => mixed,
onDrop: () => mixed,
onCancel: () => mixed,
|};
export type DragHandleProps = {|
// If a consumer is using a portal then the item will lose focus
// when moving to the portal. This breaks keyboard dragging.
// To get around this we manually apply focus if needed when mounting
onFocus: () => void,
onBlur: () => void,
// Used to initiate dragging
onMouseDown: (event: MouseEvent) => void,
onKeyDown: (event: KeyboardEvent) => void,
onTouchStart: (event: TouchEvent) => void,
// Control styling from style marshal
'data-react-beautiful-dnd-drag-handle': string,
// Aria role (nicer screen reader text)
'aria-roledescription': string,
// Allow tabbing to this element
tabIndex: number,
// Stop html5 drag and drop
draggable: boolean,
onDragStart: (event: DragEvent) => void,
|};
export type Args = {|
draggableId: DraggableId,
// callbacks provided by the draggable
callbacks: Callbacks,
isEnabled: boolean,
// whether the application thinks a drag is occurring
isDragging: boolean,
// whether the application thinks a drop is occurring
isDropAnimating: boolean,
// get the ref of the draggable
getDraggableRef: () => ?HTMLElement,
// whether interactive elements should be permitted to start a drag
canDragInteractiveElements: boolean,
// whether force press interactions should be respected
getShouldRespectForcePress: () => boolean,
|};