/**
* DevExtreme (ui/draggable.d.ts)
* Version: 21.1.0 (build 21016-0316)
* Build date: Sat Jan 16 2021
*
* Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import DOMComponent, {
    DOMComponentOptions
} from '../core/dom_component';

import {
    dxElement
} from '../core/element';

import {
    template
} from '../core/templates/template';

import {
    event
} from '../events/index';

import dxSortable from './sortable';

/**
 * Warning! This type is used for internal purposes. Do not import it directly.
 */
export interface DraggableBaseOptions<T = DraggableBase & DOMComponent> extends DOMComponentOptions<T> {
    /**
     */
    autoScroll?: boolean;
    /**
     */
    boundary?: string | Element | JQuery;
    /**
     */
    container?: string | Element | JQuery;
    /**
     */
    cursorOffset?: string | {
      /**
       * Warning! This type is used for internal purposes. Do not import it directly.
       */
      x?: number,
      /**
       * Warning! This type is used for internal purposes. Do not import it directly.
       */
      y?: number
    };
    /**
     */
    data?: any;
    /**
     */
    dragDirection?: 'both' | 'horizontal' | 'vertical';
    /**
     */
    group?: string;
    /**
     */
    handle?: string;
    /**
     */
    scrollSensitivity?: number;
    /**
     */
    scrollSpeed?: number;
}
/**
 * Warning! This type is used for internal purposes. Do not import it directly.
 */
export interface DraggableBase { }

/**
 * Warning! This type is used for internal purposes. Do not import it directly.
 */
export interface dxDraggableOptions extends DraggableBaseOptions<dxDraggable> {
    /**
     */
    clone?: boolean;
    /**
     */
    dragTemplate?: template | ((dragInfo: { itemData?: any, itemElement?: dxElement }, containerElement: dxElement) => string | Element | JQuery);
    /**
     */
    onDragEnd?: ((e: { component?: dxDraggable, element?: dxElement, model?: any, event?: event, cancel?: boolean, itemData?: any, itemElement?: dxElement, fromComponent?: dxSortable | dxDraggable, toComponent?: dxSortable | dxDraggable, fromData?: any, toData?: any }) => any);
    /**
     */
    onDragMove?: ((e: { component?: dxDraggable, element?: dxElement, model?: any, event?: event, cancel?: boolean, itemData?: any, itemElement?: dxElement, fromComponent?: dxSortable | dxDraggable, toComponent?: dxSortable | dxDraggable, fromData?: any, toData?: any }) => any);
    /**
     */
    onDragStart?: ((e: { component?: dxDraggable, element?: dxElement, model?: any, event?: event, cancel?: boolean, itemData?: any, itemElement?: dxElement, fromData?: any }) => any);
}
/**
 */
export default class dxDraggable extends DOMComponent implements DraggableBase {
    constructor(element: Element, options?: dxDraggableOptions)
    constructor(element: JQuery, options?: dxDraggableOptions)
}

declare global {
interface JQuery {
    dxDraggable(): JQuery;
    dxDraggable(options: "instance"): dxDraggable;
    dxDraggable(options: string): any;
    dxDraggable(options: string, ...params: any[]): any;
    dxDraggable(options: dxDraggableOptions): JQuery;
}
}
/**
 * Warning! This type is used for internal purposes. Do not import it directly.
 */
export type Options = dxDraggableOptions;

/** @deprecated use Options instead */
/**
 * Warning! This type is used for internal purposes. Do not import it directly.
 */
export type IOptions = dxDraggableOptions;
