var Param = (function () { 
 | 
    function Param(target, e) { 
 | 
        this.target = target; 
 | 
        this.topTarget = e && e.topTarget; 
 | 
    } 
 | 
    return Param; 
 | 
}()); 
 | 
var Draggable = (function () { 
 | 
    function Draggable(handler) { 
 | 
        this.handler = handler; 
 | 
        handler.on('mousedown', this._dragStart, this); 
 | 
        handler.on('mousemove', this._drag, this); 
 | 
        handler.on('mouseup', this._dragEnd, this); 
 | 
    } 
 | 
    Draggable.prototype._dragStart = function (e) { 
 | 
        var draggingTarget = e.target; 
 | 
        while (draggingTarget && !draggingTarget.draggable) { 
 | 
            draggingTarget = draggingTarget.parent || draggingTarget.__hostTarget; 
 | 
        } 
 | 
        if (draggingTarget) { 
 | 
            this._draggingTarget = draggingTarget; 
 | 
            draggingTarget.dragging = true; 
 | 
            this._x = e.offsetX; 
 | 
            this._y = e.offsetY; 
 | 
            this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragstart', e.event); 
 | 
        } 
 | 
    }; 
 | 
    Draggable.prototype._drag = function (e) { 
 | 
        var draggingTarget = this._draggingTarget; 
 | 
        if (draggingTarget) { 
 | 
            var x = e.offsetX; 
 | 
            var y = e.offsetY; 
 | 
            var dx = x - this._x; 
 | 
            var dy = y - this._y; 
 | 
            this._x = x; 
 | 
            this._y = y; 
 | 
            draggingTarget.drift(dx, dy, e); 
 | 
            this.handler.dispatchToElement(new Param(draggingTarget, e), 'drag', e.event); 
 | 
            var dropTarget = this.handler.findHover(x, y, draggingTarget).target; 
 | 
            var lastDropTarget = this._dropTarget; 
 | 
            this._dropTarget = dropTarget; 
 | 
            if (draggingTarget !== dropTarget) { 
 | 
                if (lastDropTarget && dropTarget !== lastDropTarget) { 
 | 
                    this.handler.dispatchToElement(new Param(lastDropTarget, e), 'dragleave', e.event); 
 | 
                } 
 | 
                if (dropTarget && dropTarget !== lastDropTarget) { 
 | 
                    this.handler.dispatchToElement(new Param(dropTarget, e), 'dragenter', e.event); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    }; 
 | 
    Draggable.prototype._dragEnd = function (e) { 
 | 
        var draggingTarget = this._draggingTarget; 
 | 
        if (draggingTarget) { 
 | 
            draggingTarget.dragging = false; 
 | 
        } 
 | 
        this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragend', e.event); 
 | 
        if (this._dropTarget) { 
 | 
            this.handler.dispatchToElement(new Param(this._dropTarget, e), 'drop', e.event); 
 | 
        } 
 | 
        this._draggingTarget = null; 
 | 
        this._dropTarget = null; 
 | 
    }; 
 | 
    return Draggable; 
 | 
}()); 
 | 
export default Draggable; 
 |