{"version":3,"sources":["webpack:///./node_modules/@shopify/draggable/lib/draggable.bundle.js"],"names":["root","factory","module","exports","window","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_AbstractEvent","_AbstractEvent2","_interopRequireDefault","obj","default","_AbstractPlugin","_AbstractPlugin2","_closest","_requestNextAnimationFrame","_SensorEvent","keys","forEach","_Sensor","_Sensor2","_DragEvent","_DraggableEvent","_Plugins","_Sensors","_Draggable","_Draggable2","_MouseSensor","_TouchSensor","_DragSensor","_ForceTouchSensor","_SnappableEvent","_CollidableEvent","_SortableEvent","_SwappableEvent","_DroppableEvent","_Announcement","defaultOptions","_Focusable","_Mirror","_Scrollable","undefined","_extends","assign","target","arguments","length","source","onSortableSorted","duration","easingFunction","horizontal","SwapAnimation","draggable","super","this","options","getOptions","lastAnimationFrame","on","off","swapAnimation","oldIndex","newIndex","dragEvent","over","cancelAnimationFrame","requestAnimationFrame","animate","from","to","element","style","pointerEvents","width","offsetWidth","transform","height","offsetHeight","addEventListener","resetElementOnTransitionEnd","transition","event","removeEventListener","_SwapAnimation","_SwapAnimation2","onDragStart","onDragStop","onDragOver","onDragOut","onMirrorCreated","onMirrorDestroy","Snappable","firstSource","mirror","canceled","snapInEvent","SnapInEvent","snappable","droppable","trigger","display","classList","remove","getClassNameFor","add","setTimeout","placedTimeout","snapOutEvent","SnapOutEvent","SnapEvent","data","type","cancelable","_Snappable","_Snappable2","_utils","resize","ResizeMirror","lastWidth","lastHeight","resizeMirror","overContainer","parentNode","appendChild","overElement","getDraggableElementsForContainer","requestNextAnimationFrame","overRect","getBoundingClientRect","_ResizeMirror","_ResizeMirror2","onDragMove","onRequestAnimationFrame","Collidable","currentlyCollidingElement","lastCollidingElement","currentAnimationFrame","collidables","Array","slice","document","querySelectorAll","NodeList","HTMLElement","sensorEvent","cancel","collidableInEvent","CollidableInEvent","collidingElement","collidableOutEvent","CollidableOutEvent","enteringCollidable","Boolean","leavingCollidable","getCollidables","closest","includes","CollidableEvent","_Collidable","_Collidable2","onDragOverContainer","onSortableSortedDefaultAnnouncement","sourceText","textContent","trim","id","overText","isFollowing","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","defaultAnnouncements","Sortable","containers","announcements","startIndex","startContainer","destroy","indexOf","index","sortableStartEvent","SortableStartEvent","sortableSortEvent","SortableSortEvent","currentIndex","children","moves","move","oldContainer","newContainer","sortableSortedEvent","SortableSortedEvent","originalSource","sortableStopEvent","SortableStopEvent","emptyOverContainer","differentContainer","sameContainer","moveInsideEmptyContainer","moveWithinContainer","moveOutsideContainer","insertBefore","nextElementSibling","SortableEvent","_Sortable","_Sortable2","onSwappableSwappedDefaultAnnouncement","swappedElement","Swappable","lastOver","_onDragStart","_onDragOver","_onDragStop","swappableStartEvent","SwappableStartEvent","swappableSwapEvent","SwappableSwapEvent","swap","swappableSwappedEvent","SwappableSwappedEvent","swappableStopEvent","SwappableStopEvent","withTempElement","callback","tmpElement","createElement","removeChild","overParent","sourceParent","SwappableEvent","_Swappable","_Swappable2","dropInDropzone","returnToOriginalDropzone","closestDropzone","getDropzones","onDroppableDroppedDefaultAnnouncement","dropzone","dropzoneText","onDroppableReturnedDefaultAnnouncement","defaultClasses","Droppable","classes","dropzones","lastDropzone","initialDropzone","droppableStartEvent","DroppableStartEvent","dropzoneElement","contains","overEmptyDropzone","droppableStopEvent","DroppableStopEvent","occupiedClass","droppableDroppedEvent","DroppableDroppedEvent","droppableReturnedEvent","DroppableReturnedEvent","DroppableEvent","_Droppable","_Droppable2","Emitter","callbacks","push","copy","splice","caughtErrors","error","console","_Emitter","_Emitter2","onDragPressure","handle","delay","plugins","sensors","Draggable","body","Error","emitter","dragging","defaultPlugins","values","Plugins","map","Plugin","defaultSensors","MouseSensor","TouchSensor","addPlugin","addSensor","draggableInitializedEvent","DraggableInitializedEvent","draggableDestroyEvent","DraggableDestroyEvent","removePlugin","plugin","constructor","removeSensor","sensor","activePlugins","attach","removedPlugins","filter","detach","activeSensors","Sensor","removedSensors","addContainer","container","removeContainer","reduce","current","allDraggableElements","childElement","getSensorEvent","sourceContainer","lastPlacedSource","lastPlacedContainer","clearTimeout","placedTimeoutID","cloneNode","DragStartEvent","applyUserSelect","oldSensorEvent","newSensorEvent","clone","detail","dragMoveEvent","DragMoveEvent","withinCorrectContainer","isLeavingContainer","currentOverContainer","isLeavingDraggable","currentOver","isOverContainer","isOverDraggable","dragOutEvent","DragOutEvent","dragOutContainerEvent","DragOutContainerEvent","dragOverContainerEvent","DragOverContainerEvent","dragOverEvent","DragOverEvent","dragStopEvent","DragStopEvent","originalEvent","dragPressureEvent","DragPressureEvent","pressure","webkitUserSelect","mozUserSelect","msUserSelect","oUserSelect","userSelect","Announcement","Focusable","Mirror","Scrollable","onMouseForceWillBegin","onMouseForceDown","onMouseDown","onMouseForceChange","onMouseMove","onMouseUp","onMouseForceGlobalChange","ForceTouchSensor","mightDrag","preventDefault","elementFromPoint","clientX","clientY","currentTarget","dragStartEvent","DragStartSensorEvent","currentContainer","DragStopSensorEvent","stopPropagation","stopImmediatePropagation","DragMoveSensorEvent","DragPressureSensorEvent","webkitForce","_ForceTouchSensor2","onDragEnd","onDrop","reset","DragSensor","mouseDownTimeout","draggableElement","nativeDraggableElement","dataTransfer","setData","effectAllowed","dropEffect","form","contenteditable","_DragSensor2","onTouchStart","onTouchHold","onTouchEnd","onTouchMove","preventScrolling","passive","currentScrollableParent","tapTimeout","touchMoved","onContextMenu","touch","touches","changedTouches","pageX","pageY","scrollX","scrollY","_TouchSensor2","SensorEvent","onContextMenuWhileDragging","mouseDown","openedContextMenu","button","ctrlKey","metaKey","preventNativeDragStart","_MouseSensor2","createEvent","initEvent","dispatchEvent","lastEvent","_requestNextAnimationFrame2","matchFunction","Element","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","selector","nodeList","singleElement","isSelector","isFunction","isNodeList","isElement","conditionFn","currentElement","correspondingUseElement","correspondingElement","_closest2","scroll","speed","sensitivity","scrollableElements","currentMousePosition","scrollAnimationFrame","scrollableElement","findScrollableElementFrame","scrollable","hasDefinedScrollableElements","documentElement","closestScrollableElement","getScrollableElement","scrollOffset","x","y","pageYOffset","scrollTop","pageXOffset","scrollLeft","rect","bottomCutOff","bottom","innerHeight","topCutOff","top","cutOff","documentScrollingElement","getDocumentScrollingElement","innerWidth","left","hasOverflow","overflowRegex","computedStyles","getComputedStyle","overflow","getPropertyValue","test","isStaticallyPositioned","position","excludeStaticParents","parent","scrollingElement","_Scrollable2","MirrorDestroyEvent","MirrorMoveEvent","MirrorAttachedEvent","MirrorCreatedEvent","MirrorCreateEvent","MirrorEvent","_MirrorEvent","getAppendableContainer","onScroll","onMirrorMove","_objectWithoutProperties","constrainDimensions","xAxis","yAxis","cursorOffsetX","cursorOffsetY","initialScrollOffset","mirrorCreateEvent","isNativeDragEvent","appendableContainer","mirrorCreatedEvent","mirrorAttachedEvent","mirrorMoveEvent","mirrorDestroyEvent","mirrorClass","setState","_ref","mirrorOffset","initialX","initialY","args","initialState","Promise","resolve","then","computeMirrorDimensions","calculateMirrorOffset","resetMirror","addMirrorClasses","positionMirror","initial","removeMirrorID","mirrorEvent","raf","appendTo","querySelector","_ref2","withPromise","sourceRect","_ref3","_ref4","computedSourceStyles","margin","_ref5","_ref6","removeAttribute","withFrame","_ref7","result","frame","reject","_Mirror2","onInitialize","onDestroy","focusable","getDraggableElements","getElements","decorateElement","stripElement","elementsWithMissingTabIndex","hasMissingTabIndex","getAttribute","tabIndex","tabIndexElementPosition","_Focusable2","AbstractPlugin","announceEvent","announceMessage","ARIA_RELEVANT","ARIA_ATOMIC","ARIA_LIVE","ROLE","expire","originalTriggerMethod","message","announce","liveRegion","createRegion","setAttribute","_Announcement2","DraggableEvent","AbstractEvent","DragEvent","Sensors","BasePlugin","BaseEvent","_interopRequireWildcard","newObj"],"mappings":"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","file":"js/chunk-2d0c15b5.07724f46.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Draggable\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Draggable\"] = factory();\n\telse\n\t\troot[\"Draggable\"] = factory();\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 66);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _AbstractEvent = __webpack_require__(64);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _AbstractEvent2.default;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _AbstractPlugin = __webpack_require__(60);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _AbstractPlugin2.default;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _closest = __webpack_require__(51);\n\nObject.defineProperty(exports, 'closest', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_closest).default;\n }\n});\n\nvar _requestNextAnimationFrame = __webpack_require__(49);\n\nObject.defineProperty(exports, 'requestNextAnimationFrame', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_requestNextAnimationFrame).default;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SensorEvent = __webpack_require__(44);\n\nObject.keys(_SensorEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SensorEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Sensor = __webpack_require__(47);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Sensor2.default;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DragEvent = __webpack_require__(14);\n\nObject.keys(_DragEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DragEvent[key];\n }\n });\n});\n\nvar _DraggableEvent = __webpack_require__(13);\n\nObject.keys(_DraggableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DraggableEvent[key];\n }\n });\n});\n\nvar _Plugins = __webpack_require__(12);\n\nObject.keys(_Plugins).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _Plugins[key];\n }\n });\n});\n\nvar _Sensors = __webpack_require__(6);\n\nObject.keys(_Sensors).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _Sensors[key];\n }\n });\n});\n\nvar _Draggable = __webpack_require__(37);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Draggable2.default;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Sensor = __webpack_require__(4);\n\nObject.defineProperty(exports, 'Sensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Sensor).default;\n }\n});\n\nvar _MouseSensor = __webpack_require__(46);\n\nObject.defineProperty(exports, 'MouseSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_MouseSensor).default;\n }\n});\n\nvar _TouchSensor = __webpack_require__(43);\n\nObject.defineProperty(exports, 'TouchSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_TouchSensor).default;\n }\n});\n\nvar _DragSensor = __webpack_require__(41);\n\nObject.defineProperty(exports, 'DragSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_DragSensor).default;\n }\n});\n\nvar _ForceTouchSensor = __webpack_require__(39);\n\nObject.defineProperty(exports, 'ForceTouchSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_ForceTouchSensor).default;\n }\n});\n\nvar _SensorEvent = __webpack_require__(3);\n\nObject.keys(_SensorEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SensorEvent[key];\n }\n });\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SnappableEvent = __webpack_require__(18);\n\nObject.keys(_SnappableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SnappableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _CollidableEvent = __webpack_require__(23);\n\nObject.keys(_CollidableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _CollidableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SortableEvent = __webpack_require__(27);\n\nObject.keys(_SortableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SortableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SwappableEvent = __webpack_require__(30);\n\nObject.keys(_SwappableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SwappableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DroppableEvent = __webpack_require__(33);\n\nObject.keys(_DroppableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DroppableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Announcement = __webpack_require__(62);\n\nObject.defineProperty(exports, 'Announcement', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Announcement).default;\n }\n});\nObject.defineProperty(exports, 'defaultAnnouncementOptions', {\n enumerable: true,\n get: function () {\n return _Announcement.defaultOptions;\n }\n});\n\nvar _Focusable = __webpack_require__(59);\n\nObject.defineProperty(exports, 'Focusable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Focusable).default;\n }\n});\n\nvar _Mirror = __webpack_require__(57);\n\nObject.defineProperty(exports, 'Mirror', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Mirror).default;\n }\n});\nObject.defineProperty(exports, 'defaultMirrorOptions', {\n enumerable: true,\n get: function () {\n return _Mirror.defaultOptions;\n }\n});\n\nvar _Scrollable = __webpack_require__(53);\n\nObject.defineProperty(exports, 'Scrollable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Scrollable).default;\n }\n});\nObject.defineProperty(exports, 'defaultScrollableOptions', {\n enumerable: true,\n get: function () {\n return _Scrollable.defaultOptions;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DraggableEvent = __webpack_require__(63);\n\nObject.keys(_DraggableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DraggableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DragEvent = __webpack_require__(65);\n\nObject.keys(_DragEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DragEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onSortableSorted = Symbol('onSortableSorted');\n\n/**\n * SwapAnimation default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.duration\n * @property {String} defaultOptions.easingFunction\n * @property {Boolean} defaultOptions.horizontal\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n duration: 150,\n easingFunction: 'ease-in-out',\n horizontal: false\n};\n\n/**\n * SwapAnimation plugin adds swap animations for sortable\n * @class SwapAnimation\n * @module SwapAnimation\n * @extends AbstractPlugin\n */\nclass SwapAnimation extends _AbstractPlugin2.default {\n /**\n * SwapAnimation constructor.\n * @constructs SwapAnimation\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * SwapAnimation options\n * @property {Object} options\n * @property {Number} defaultOptions.duration\n * @property {String} defaultOptions.easingFunction\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * Last animation frame\n * @property {Number} lastAnimationFrame\n * @type {Number}\n */\n this.lastAnimationFrame = null;\n\n this[onSortableSorted] = this[onSortableSorted].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('sortable:sorted', this[onSortableSorted]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('sortable:sorted', this[onSortableSorted]);\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.swapAnimation || {};\n }\n\n /**\n * Sortable sorted handler\n * @param {SortableSortedEvent} sortableEvent\n * @private\n */\n [onSortableSorted]({ oldIndex, newIndex, dragEvent }) {\n const { source, over } = dragEvent;\n\n cancelAnimationFrame(this.lastAnimationFrame);\n\n // Can be done in a separate frame\n this.lastAnimationFrame = requestAnimationFrame(() => {\n if (oldIndex >= newIndex) {\n animate(source, over, this.options);\n } else {\n animate(over, source, this.options);\n }\n });\n }\n}\n\nexports.default = SwapAnimation; /**\n * Animates two elements\n * @param {HTMLElement} from\n * @param {HTMLElement} to\n * @param {Object} options\n * @param {Number} options.duration\n * @param {String} options.easingFunction\n * @param {String} options.horizontal\n * @private\n */\n\nfunction animate(from, to, { duration, easingFunction, horizontal }) {\n for (const element of [from, to]) {\n element.style.pointerEvents = 'none';\n }\n\n if (horizontal) {\n const width = from.offsetWidth;\n from.style.transform = `translate3d(${width}px, 0, 0)`;\n to.style.transform = `translate3d(-${width}px, 0, 0)`;\n } else {\n const height = from.offsetHeight;\n from.style.transform = `translate3d(0, ${height}px, 0)`;\n to.style.transform = `translate3d(0, -${height}px, 0)`;\n }\n\n requestAnimationFrame(() => {\n for (const element of [from, to]) {\n element.addEventListener('transitionend', resetElementOnTransitionEnd);\n element.style.transition = `transform ${duration}ms ${easingFunction}`;\n element.style.transform = '';\n }\n });\n}\n\n/**\n * Resets animation style properties after animation has completed\n * @param {Event} event\n * @private\n */\nfunction resetElementOnTransitionEnd(event) {\n event.target.style.transition = '';\n event.target.style.pointerEvents = '';\n event.target.removeEventListener('transitionend', resetElementOnTransitionEnd);\n}\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _SwapAnimation = __webpack_require__(15);\n\nvar _SwapAnimation2 = _interopRequireDefault(_SwapAnimation);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _SwapAnimation2.default;\nexports.defaultOptions = _SwapAnimation.defaultOptions;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _SnappableEvent = __webpack_require__(7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragStop = Symbol('onDragStop');\nconst onDragOver = Symbol('onDragOver');\nconst onDragOut = Symbol('onDragOut');\nconst onMirrorCreated = Symbol('onMirrorCreated');\nconst onMirrorDestroy = Symbol('onMirrorDestroy');\n\n/**\n * Snappable plugin which snaps draggable elements into place\n * @class Snappable\n * @module Snappable\n * @extends AbstractPlugin\n */\nclass Snappable extends _AbstractPlugin2.default {\n /**\n * Snappable constructor.\n * @constructs Snappable\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Keeps track of the first source element\n * @property {HTMLElement|null} firstSource\n */\n this.firstSource = null;\n\n /**\n * Keeps track of the mirror element\n * @property {HTMLElement} mirror\n */\n this.mirror = null;\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n this[onDragOver] = this[onDragOver].bind(this);\n this[onDragOut] = this[onDragOut].bind(this);\n this[onMirrorCreated] = this[onMirrorCreated].bind(this);\n this[onMirrorDestroy] = this[onMirrorDestroy].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('drag:start', this[onDragStart]).on('drag:stop', this[onDragStop]).on('drag:over', this[onDragOver]).on('drag:out', this[onDragOut]).on('droppable:over', this[onDragOver]).on('droppable:out', this[onDragOut]).on('mirror:created', this[onMirrorCreated]).on('mirror:destroy', this[onMirrorDestroy]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('drag:start', this[onDragStart]).off('drag:stop', this[onDragStop]).off('drag:over', this[onDragOver]).off('drag:out', this[onDragOut]).off('droppable:over', this[onDragOver]).off('droppable:out', this[onDragOut]).off('mirror:created', this[onMirrorCreated]).off('mirror:destroy', this[onMirrorDestroy]);\n }\n\n /**\n * Drag start handler\n * @private\n * @param {DragStartEvent} event - Drag start event\n */\n [onDragStart](event) {\n if (event.canceled()) {\n return;\n }\n\n this.firstSource = event.source;\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {DragStopEvent} event - Drag stop event\n */\n [onDragStop]() {\n this.firstSource = null;\n }\n\n /**\n * Drag over handler\n * @private\n * @param {DragOverEvent|DroppableOverEvent} event - Drag over event\n */\n [onDragOver](event) {\n if (event.canceled()) {\n return;\n }\n\n const source = event.source || event.dragEvent.source;\n\n if (source === this.firstSource) {\n this.firstSource = null;\n return;\n }\n\n const snapInEvent = new _SnappableEvent.SnapInEvent({\n dragEvent: event,\n snappable: event.over || event.droppable\n });\n\n this.draggable.trigger(snapInEvent);\n\n if (snapInEvent.canceled()) {\n return;\n }\n\n if (this.mirror) {\n this.mirror.style.display = 'none';\n }\n\n source.classList.remove(this.draggable.getClassNameFor('source:dragging'));\n source.classList.add(this.draggable.getClassNameFor('source:placed'));\n\n // Need to cancel this in drag out\n setTimeout(() => {\n source.classList.remove(this.draggable.getClassNameFor('source:placed'));\n }, this.draggable.options.placedTimeout);\n }\n\n /**\n * Drag out handler\n * @private\n * @param {DragOutEvent|DroppableOutEvent} event - Drag out event\n */\n [onDragOut](event) {\n if (event.canceled()) {\n return;\n }\n\n const source = event.source || event.dragEvent.source;\n\n const snapOutEvent = new _SnappableEvent.SnapOutEvent({\n dragEvent: event,\n snappable: event.over || event.droppable\n });\n\n this.draggable.trigger(snapOutEvent);\n\n if (snapOutEvent.canceled()) {\n return;\n }\n\n if (this.mirror) {\n this.mirror.style.display = '';\n }\n\n source.classList.add(this.draggable.getClassNameFor('source:dragging'));\n }\n\n /**\n * Mirror created handler\n * @param {MirrorCreatedEvent} mirrorEvent\n * @private\n */\n [onMirrorCreated]({ mirror }) {\n this.mirror = mirror;\n }\n\n /**\n * Mirror destroy handler\n * @param {MirrorDestroyEvent} mirrorEvent\n * @private\n */\n [onMirrorDestroy]() {\n this.mirror = null;\n }\n}\nexports.default = Snappable;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SnapOutEvent = exports.SnapInEvent = exports.SnapEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base snap event\n * @class SnapEvent\n * @module SnapEvent\n * @extends AbstractEvent\n */\nclass SnapEvent extends _AbstractEvent2.default {\n\n /**\n * Drag event that triggered this snap event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n\n /**\n * Snappable element\n * @property snappable\n * @type {HTMLElement}\n * @readonly\n */\n get snappable() {\n return this.data.snappable;\n }\n}\n\nexports.SnapEvent = SnapEvent; /**\n * Snap in event\n * @class SnapInEvent\n * @module SnapInEvent\n * @extends SnapEvent\n */\n\nSnapEvent.type = 'snap';\nclass SnapInEvent extends SnapEvent {}\n\nexports.SnapInEvent = SnapInEvent; /**\n * Snap out event\n * @class SnapOutEvent\n * @module SnapOutEvent\n * @extends SnapEvent\n */\n\nSnapInEvent.type = 'snap:in';\nSnapInEvent.cancelable = true;\nclass SnapOutEvent extends SnapEvent {}\nexports.SnapOutEvent = SnapOutEvent;\nSnapOutEvent.type = 'snap:out';\nSnapOutEvent.cancelable = true;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SnappableEvent = __webpack_require__(7);\n\nObject.keys(_SnappableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SnappableEvent[key];\n }\n });\n});\n\nvar _Snappable = __webpack_require__(17);\n\nvar _Snappable2 = _interopRequireDefault(_Snappable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Snappable2.default;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _utils = __webpack_require__(2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onMirrorCreated = Symbol('onMirrorCreated');\nconst onMirrorDestroy = Symbol('onMirrorDestroy');\nconst onDragOver = Symbol('onDragOver');\nconst resize = Symbol('resize');\n\n/**\n * ResizeMirror default options\n * @property {Object} defaultOptions\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {};\n\n/**\n * The ResizeMirror plugin resizes the mirror element to the dimensions of the draggable element that the mirror is hovering over\n * @class ResizeMirror\n * @module ResizeMirror\n * @extends AbstractPlugin\n */\nclass ResizeMirror extends _AbstractPlugin2.default {\n /**\n * ResizeMirror constructor.\n * @constructs ResizeMirror\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * ResizeMirror options\n * @property {Object} options\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * ResizeMirror remembers the last width when resizing the mirror\n * to avoid additional writes to the DOM\n * @property {number} lastWidth\n */\n this.lastWidth = 0;\n\n /**\n * ResizeMirror remembers the last height when resizing the mirror\n * to avoid additional writes to the DOM\n * @property {number} lastHeight\n */\n this.lastHeight = 0;\n\n /**\n * Keeps track of the mirror element\n * @property {HTMLElement} mirror\n */\n this.mirror = null;\n\n this[onMirrorCreated] = this[onMirrorCreated].bind(this);\n this[onMirrorDestroy] = this[onMirrorDestroy].bind(this);\n this[onDragOver] = this[onDragOver].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('mirror:created', this[onMirrorCreated]).on('drag:over', this[onDragOver]).on('drag:over:container', this[onDragOver]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('mirror:created', this[onMirrorCreated]).off('mirror:destroy', this[onMirrorDestroy]).off('drag:over', this[onDragOver]).off('drag:over:container', this[onDragOver]);\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.resizeMirror || {};\n }\n\n /**\n * Mirror created handler\n * @param {MirrorCreatedEvent} mirrorEvent\n * @private\n */\n [onMirrorCreated]({ mirror }) {\n this.mirror = mirror;\n }\n\n /**\n * Mirror destroy handler\n * @param {MirrorDestroyEvent} mirrorEvent\n * @private\n */\n [onMirrorDestroy]() {\n this.mirror = null;\n }\n\n /**\n * Drag over handler\n * @param {DragOverEvent | DragOverContainer} dragEvent\n * @private\n */\n [onDragOver](dragEvent) {\n this[resize](dragEvent);\n }\n\n /**\n * Resize function for\n * @param {DragOverEvent | DragOverContainer} dragEvent\n * @private\n */\n [resize]({ overContainer, over }) {\n requestAnimationFrame(() => {\n if (this.mirror.parentNode !== overContainer) {\n overContainer.appendChild(this.mirror);\n }\n\n const overElement = over || this.draggable.getDraggableElementsForContainer(overContainer)[0];\n\n if (!overElement) {\n return;\n }\n\n (0, _utils.requestNextAnimationFrame)(() => {\n const overRect = overElement.getBoundingClientRect();\n\n if (this.lastHeight === overRect.height && this.lastWidth === overRect.width) {\n return;\n }\n\n this.mirror.style.width = `${overRect.width}px`;\n this.mirror.style.height = `${overRect.height}px`;\n\n this.lastWidth = overRect.width;\n this.lastHeight = overRect.height;\n });\n });\n }\n}\nexports.default = ResizeMirror;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _ResizeMirror = __webpack_require__(20);\n\nvar _ResizeMirror2 = _interopRequireDefault(_ResizeMirror);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _ResizeMirror2.default;\nexports.defaultOptions = _ResizeMirror.defaultOptions;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _utils = __webpack_require__(2);\n\nvar _CollidableEvent = __webpack_require__(8);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragMove = Symbol('onDragMove');\nconst onDragStop = Symbol('onDragStop');\nconst onRequestAnimationFrame = Symbol('onRequestAnimationFrame');\n\n/**\n * Collidable plugin which detects colliding elements while dragging\n * @class Collidable\n * @module Collidable\n * @extends AbstractPlugin\n */\nclass Collidable extends _AbstractPlugin2.default {\n /**\n * Collidable constructor.\n * @constructs Collidable\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Keeps track of currently colliding elements\n * @property {HTMLElement|null} currentlyCollidingElement\n * @type {HTMLElement|null}\n */\n this.currentlyCollidingElement = null;\n\n /**\n * Keeps track of currently colliding elements\n * @property {HTMLElement|null} lastCollidingElement\n * @type {HTMLElement|null}\n */\n this.lastCollidingElement = null;\n\n /**\n * Animation frame for finding colliding elements\n * @property {Number|null} currentAnimationFrame\n * @type {Number|null}\n */\n this.currentAnimationFrame = null;\n\n this[onDragMove] = this[onDragMove].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n this[onRequestAnimationFrame] = this[onRequestAnimationFrame].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]);\n }\n\n /**\n * Returns current collidables based on `collidables` option\n * @return {HTMLElement[]}\n */\n getCollidables() {\n const collidables = this.draggable.options.collidables;\n\n if (typeof collidables === 'string') {\n return Array.prototype.slice.call(document.querySelectorAll(collidables));\n } else if (collidables instanceof NodeList || collidables instanceof Array) {\n return Array.prototype.slice.call(collidables);\n } else if (collidables instanceof HTMLElement) {\n return [collidables];\n } else if (typeof collidables === 'function') {\n return collidables();\n } else {\n return [];\n }\n }\n\n /**\n * Drag move handler\n * @private\n * @param {DragMoveEvent} event - Drag move event\n */\n [onDragMove](event) {\n const target = event.sensorEvent.target;\n\n this.currentAnimationFrame = requestAnimationFrame(this[onRequestAnimationFrame](target));\n\n if (this.currentlyCollidingElement) {\n event.cancel();\n }\n\n const collidableInEvent = new _CollidableEvent.CollidableInEvent({\n dragEvent: event,\n collidingElement: this.currentlyCollidingElement\n });\n\n const collidableOutEvent = new _CollidableEvent.CollidableOutEvent({\n dragEvent: event,\n collidingElement: this.lastCollidingElement\n });\n\n const enteringCollidable = Boolean(this.currentlyCollidingElement && this.lastCollidingElement !== this.currentlyCollidingElement);\n const leavingCollidable = Boolean(!this.currentlyCollidingElement && this.lastCollidingElement);\n\n if (enteringCollidable) {\n if (this.lastCollidingElement) {\n this.draggable.trigger(collidableOutEvent);\n }\n\n this.draggable.trigger(collidableInEvent);\n } else if (leavingCollidable) {\n this.draggable.trigger(collidableOutEvent);\n }\n\n this.lastCollidingElement = this.currentlyCollidingElement;\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {DragStopEvent} event - Drag stop event\n */\n [onDragStop](event) {\n const lastCollidingElement = this.currentlyCollidingElement || this.lastCollidingElement;\n const collidableOutEvent = new _CollidableEvent.CollidableOutEvent({\n dragEvent: event,\n collidingElement: lastCollidingElement\n });\n\n if (lastCollidingElement) {\n this.draggable.trigger(collidableOutEvent);\n }\n\n this.lastCollidingElement = null;\n this.currentlyCollidingElement = null;\n }\n\n /**\n * Animation frame function\n * @private\n * @param {HTMLElement} target - Current move target\n * @return {Function}\n */\n [onRequestAnimationFrame](target) {\n return () => {\n const collidables = this.getCollidables();\n this.currentlyCollidingElement = (0, _utils.closest)(target, element => collidables.includes(element));\n };\n }\n}\nexports.default = Collidable;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CollidableOutEvent = exports.CollidableInEvent = exports.CollidableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base collidable event\n * @class CollidableEvent\n * @module CollidableEvent\n * @extends AbstractEvent\n */\nclass CollidableEvent extends _AbstractEvent2.default {\n\n /**\n * Drag event that triggered this colliable event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n}\n\nexports.CollidableEvent = CollidableEvent; /**\n * Collidable in event\n * @class CollidableInEvent\n * @module CollidableInEvent\n * @extends CollidableEvent\n */\n\nCollidableEvent.type = 'collidable';\nclass CollidableInEvent extends CollidableEvent {\n\n /**\n * Element you are currently colliding with\n * @property collidingElement\n * @type {HTMLElement}\n * @readonly\n */\n get collidingElement() {\n return this.data.collidingElement;\n }\n}\n\nexports.CollidableInEvent = CollidableInEvent; /**\n * Collidable out event\n * @class CollidableOutEvent\n * @module CollidableOutEvent\n * @extends CollidableEvent\n */\n\nCollidableInEvent.type = 'collidable:in';\nclass CollidableOutEvent extends CollidableEvent {\n\n /**\n * Element you were previously colliding with\n * @property collidingElement\n * @type {HTMLElement}\n * @readonly\n */\n get collidingElement() {\n return this.data.collidingElement;\n }\n}\nexports.CollidableOutEvent = CollidableOutEvent;\nCollidableOutEvent.type = 'collidable:out';\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _CollidableEvent = __webpack_require__(8);\n\nObject.keys(_CollidableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _CollidableEvent[key];\n }\n });\n});\n\nvar _Collidable = __webpack_require__(22);\n\nvar _Collidable2 = _interopRequireDefault(_Collidable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Collidable2.default;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Collidable = __webpack_require__(24);\n\nObject.defineProperty(exports, 'Collidable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Collidable).default;\n }\n});\n\nvar _ResizeMirror = __webpack_require__(21);\n\nObject.defineProperty(exports, 'ResizeMirror', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_ResizeMirror).default;\n }\n});\nObject.defineProperty(exports, 'defaultResizeMirrorOptions', {\n enumerable: true,\n get: function () {\n return _ResizeMirror.defaultOptions;\n }\n});\n\nvar _Snappable = __webpack_require__(19);\n\nObject.defineProperty(exports, 'Snappable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Snappable).default;\n }\n});\n\nvar _SwapAnimation = __webpack_require__(16);\n\nObject.defineProperty(exports, 'SwapAnimation', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_SwapAnimation).default;\n }\n});\nObject.defineProperty(exports, 'defaultSwapAnimationOptions', {\n enumerable: true,\n get: function () {\n return _SwapAnimation.defaultOptions;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Draggable = __webpack_require__(5);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nvar _SortableEvent = __webpack_require__(9);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragOverContainer = Symbol('onDragOverContainer');\nconst onDragOver = Symbol('onDragOver');\nconst onDragStop = Symbol('onDragStop');\n\n/**\n * Returns announcement message when a Draggable element has been sorted with another Draggable element\n * or moved into a new container\n * @param {SortableSortedEvent} sortableEvent\n * @return {String}\n */\nfunction onSortableSortedDefaultAnnouncement({ dragEvent }) {\n const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'sortable element';\n\n if (dragEvent.over) {\n const overText = dragEvent.over.textContent.trim() || dragEvent.over.id || 'sortable element';\n const isFollowing = dragEvent.source.compareDocumentPosition(dragEvent.over) & Node.DOCUMENT_POSITION_FOLLOWING;\n\n if (isFollowing) {\n return `Placed ${sourceText} after ${overText}`;\n } else {\n return `Placed ${sourceText} before ${overText}`;\n }\n } else {\n // need to figure out how to compute container name\n return `Placed ${sourceText} into a different container`;\n }\n}\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['sortable:sorted']\n */\nconst defaultAnnouncements = {\n 'sortable:sorted': onSortableSortedDefaultAnnouncement\n};\n\n/**\n * Sortable is built on top of Draggable and allows sorting of draggable elements. Sortable will keep\n * track of the original index and emits the new index as you drag over draggable elements.\n * @class Sortable\n * @module Sortable\n * @extends Draggable\n */\nclass Sortable extends _Draggable2.default {\n /**\n * Sortable constructor.\n * @constructs Sortable\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Sortable containers\n * @param {Object} options - Options for Sortable\n */\n constructor(containers = [], options = {}) {\n super(containers, _extends({}, options, {\n announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n }));\n\n /**\n * start index of source on drag start\n * @property startIndex\n * @type {Number}\n */\n this.startIndex = null;\n\n /**\n * start container on drag start\n * @property startContainer\n * @type {HTMLElement}\n * @default null\n */\n this.startContainer = null;\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragOverContainer] = this[onDragOverContainer].bind(this);\n this[onDragOver] = this[onDragOver].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n\n this.on('drag:start', this[onDragStart]).on('drag:over:container', this[onDragOverContainer]).on('drag:over', this[onDragOver]).on('drag:stop', this[onDragStop]);\n }\n\n /**\n * Destroys Sortable instance.\n */\n destroy() {\n super.destroy();\n\n this.off('drag:start', this[onDragStart]).off('drag:over:container', this[onDragOverContainer]).off('drag:over', this[onDragOver]).off('drag:stop', this[onDragStop]);\n }\n\n /**\n * Returns true index of element within its container during drag operation, i.e. excluding mirror and original source\n * @param {HTMLElement} element - An element\n * @return {Number}\n */\n index(element) {\n return this.getDraggableElementsForContainer(element.parentNode).indexOf(element);\n }\n\n /**\n * Drag start handler\n * @private\n * @param {DragStartEvent} event - Drag start event\n */\n [onDragStart](event) {\n this.startContainer = event.source.parentNode;\n this.startIndex = this.index(event.source);\n\n const sortableStartEvent = new _SortableEvent.SortableStartEvent({\n dragEvent: event,\n startIndex: this.startIndex,\n startContainer: this.startContainer\n });\n\n this.trigger(sortableStartEvent);\n\n if (sortableStartEvent.canceled()) {\n event.cancel();\n }\n }\n\n /**\n * Drag over container handler\n * @private\n * @param {DragOverContainerEvent} event - Drag over container event\n */\n [onDragOverContainer](event) {\n if (event.canceled()) {\n return;\n }\n\n const { source, over, overContainer } = event;\n const oldIndex = this.index(source);\n\n const sortableSortEvent = new _SortableEvent.SortableSortEvent({\n dragEvent: event,\n currentIndex: oldIndex,\n source,\n over\n });\n\n this.trigger(sortableSortEvent);\n\n if (sortableSortEvent.canceled()) {\n return;\n }\n\n const children = this.getDraggableElementsForContainer(overContainer);\n const moves = move({ source, over, overContainer, children });\n\n if (!moves) {\n return;\n }\n\n const { oldContainer, newContainer } = moves;\n const newIndex = this.index(event.source);\n\n const sortableSortedEvent = new _SortableEvent.SortableSortedEvent({\n dragEvent: event,\n oldIndex,\n newIndex,\n oldContainer,\n newContainer\n });\n\n this.trigger(sortableSortedEvent);\n }\n\n /**\n * Drag over handler\n * @private\n * @param {DragOverEvent} event - Drag over event\n */\n [onDragOver](event) {\n if (event.over === event.originalSource || event.over === event.source) {\n return;\n }\n\n const { source, over, overContainer } = event;\n const oldIndex = this.index(source);\n\n const sortableSortEvent = new _SortableEvent.SortableSortEvent({\n dragEvent: event,\n currentIndex: oldIndex,\n source,\n over\n });\n\n this.trigger(sortableSortEvent);\n\n if (sortableSortEvent.canceled()) {\n return;\n }\n\n const children = this.getDraggableElementsForContainer(overContainer);\n const moves = move({ source, over, overContainer, children });\n\n if (!moves) {\n return;\n }\n\n const { oldContainer, newContainer } = moves;\n const newIndex = this.index(source);\n\n const sortableSortedEvent = new _SortableEvent.SortableSortedEvent({\n dragEvent: event,\n oldIndex,\n newIndex,\n oldContainer,\n newContainer\n });\n\n this.trigger(sortableSortedEvent);\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {DragStopEvent} event - Drag stop event\n */\n [onDragStop](event) {\n const sortableStopEvent = new _SortableEvent.SortableStopEvent({\n dragEvent: event,\n oldIndex: this.startIndex,\n newIndex: this.index(event.source),\n oldContainer: this.startContainer,\n newContainer: event.source.parentNode\n });\n\n this.trigger(sortableStopEvent);\n\n this.startIndex = null;\n this.startContainer = null;\n }\n}\n\nexports.default = Sortable;\nfunction index(element) {\n return Array.prototype.indexOf.call(element.parentNode.children, element);\n}\n\nfunction move({ source, over, overContainer, children }) {\n const emptyOverContainer = !children.length;\n const differentContainer = source.parentNode !== overContainer;\n const sameContainer = over && !differentContainer;\n\n if (emptyOverContainer) {\n return moveInsideEmptyContainer(source, overContainer);\n } else if (sameContainer) {\n return moveWithinContainer(source, over);\n } else if (differentContainer) {\n return moveOutsideContainer(source, over, overContainer);\n } else {\n return null;\n }\n}\n\nfunction moveInsideEmptyContainer(source, overContainer) {\n const oldContainer = source.parentNode;\n\n overContainer.appendChild(source);\n\n return { oldContainer, newContainer: overContainer };\n}\n\nfunction moveWithinContainer(source, over) {\n const oldIndex = index(source);\n const newIndex = index(over);\n\n if (oldIndex < newIndex) {\n source.parentNode.insertBefore(source, over.nextElementSibling);\n } else {\n source.parentNode.insertBefore(source, over);\n }\n\n return { oldContainer: source.parentNode, newContainer: source.parentNode };\n}\n\nfunction moveOutsideContainer(source, over, overContainer) {\n const oldContainer = source.parentNode;\n\n if (over) {\n over.parentNode.insertBefore(source, over);\n } else {\n // need to figure out proper position\n overContainer.appendChild(source);\n }\n\n return { oldContainer, newContainer: source.parentNode };\n}\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SortableStopEvent = exports.SortableSortedEvent = exports.SortableSortEvent = exports.SortableStartEvent = exports.SortableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base sortable event\n * @class SortableEvent\n * @module SortableEvent\n * @extends AbstractEvent\n */\nclass SortableEvent extends _AbstractEvent2.default {\n\n /**\n * Original drag event that triggered this sortable event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n}\n\nexports.SortableEvent = SortableEvent; /**\n * Sortable start event\n * @class SortableStartEvent\n * @module SortableStartEvent\n * @extends SortableEvent\n */\n\nSortableEvent.type = 'sortable';\nclass SortableStartEvent extends SortableEvent {\n\n /**\n * Start index of source on sortable start\n * @property startIndex\n * @type {Number}\n * @readonly\n */\n get startIndex() {\n return this.data.startIndex;\n }\n\n /**\n * Start container on sortable start\n * @property startContainer\n * @type {HTMLElement}\n * @readonly\n */\n get startContainer() {\n return this.data.startContainer;\n }\n}\n\nexports.SortableStartEvent = SortableStartEvent; /**\n * Sortable sort event\n * @class SortableSortEvent\n * @module SortableSortEvent\n * @extends SortableEvent\n */\n\nSortableStartEvent.type = 'sortable:start';\nSortableStartEvent.cancelable = true;\nclass SortableSortEvent extends SortableEvent {\n\n /**\n * Index of current draggable element\n * @property currentIndex\n * @type {Number}\n * @readonly\n */\n get currentIndex() {\n return this.data.currentIndex;\n }\n\n /**\n * Draggable element you are hovering over\n * @property over\n * @type {HTMLElement}\n * @readonly\n */\n get over() {\n return this.data.oldIndex;\n }\n\n /**\n * Draggable container element you are hovering over\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.newIndex;\n }\n}\n\nexports.SortableSortEvent = SortableSortEvent; /**\n * Sortable sorted event\n * @class SortableSortedEvent\n * @module SortableSortedEvent\n * @extends SortableEvent\n */\n\nSortableSortEvent.type = 'sortable:sort';\nSortableSortEvent.cancelable = true;\nclass SortableSortedEvent extends SortableEvent {\n\n /**\n * Index of last sorted event\n * @property oldIndex\n * @type {Number}\n * @readonly\n */\n get oldIndex() {\n return this.data.oldIndex;\n }\n\n /**\n * New index of this sorted event\n * @property newIndex\n * @type {Number}\n * @readonly\n */\n get newIndex() {\n return this.data.newIndex;\n }\n\n /**\n * Old container of draggable element\n * @property oldContainer\n * @type {HTMLElement}\n * @readonly\n */\n get oldContainer() {\n return this.data.oldContainer;\n }\n\n /**\n * New container of draggable element\n * @property newContainer\n * @type {HTMLElement}\n * @readonly\n */\n get newContainer() {\n return this.data.newContainer;\n }\n}\n\nexports.SortableSortedEvent = SortableSortedEvent; /**\n * Sortable stop event\n * @class SortableStopEvent\n * @module SortableStopEvent\n * @extends SortableEvent\n */\n\nSortableSortedEvent.type = 'sortable:sorted';\nclass SortableStopEvent extends SortableEvent {\n\n /**\n * Original index on sortable start\n * @property oldIndex\n * @type {Number}\n * @readonly\n */\n get oldIndex() {\n return this.data.oldIndex;\n }\n\n /**\n * New index of draggable element\n * @property newIndex\n * @type {Number}\n * @readonly\n */\n get newIndex() {\n return this.data.newIndex;\n }\n\n /**\n * Original container of draggable element\n * @property oldContainer\n * @type {HTMLElement}\n * @readonly\n */\n get oldContainer() {\n return this.data.oldContainer;\n }\n\n /**\n * New container of draggable element\n * @property newContainer\n * @type {HTMLElement}\n * @readonly\n */\n get newContainer() {\n return this.data.newContainer;\n }\n}\nexports.SortableStopEvent = SortableStopEvent;\nSortableStopEvent.type = 'sortable:stop';\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SortableEvent = __webpack_require__(9);\n\nObject.keys(_SortableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SortableEvent[key];\n }\n });\n});\n\nvar _Sortable = __webpack_require__(26);\n\nvar _Sortable2 = _interopRequireDefault(_Sortable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Sortable2.default;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Draggable = __webpack_require__(5);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nvar _SwappableEvent = __webpack_require__(10);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragOver = Symbol('onDragOver');\nconst onDragStop = Symbol('onDragStop');\n\n/**\n * Returns an announcement message when the Draggable element is swapped with another draggable element\n * @param {SwappableSwappedEvent} swappableEvent\n * @return {String}\n */\nfunction onSwappableSwappedDefaultAnnouncement({ dragEvent, swappedElement }) {\n const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'swappable element';\n const overText = swappedElement.textContent.trim() || swappedElement.id || 'swappable element';\n\n return `Swapped ${sourceText} with ${overText}`;\n}\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['swappabled:swapped']\n */\nconst defaultAnnouncements = {\n 'swappabled:swapped': onSwappableSwappedDefaultAnnouncement\n};\n\n/**\n * Swappable is built on top of Draggable and allows swapping of draggable elements.\n * Order is irrelevant to Swappable.\n * @class Swappable\n * @module Swappable\n * @extends Draggable\n */\nclass Swappable extends _Draggable2.default {\n /**\n * Swappable constructor.\n * @constructs Swappable\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Swappable containers\n * @param {Object} options - Options for Swappable\n */\n constructor(containers = [], options = {}) {\n super(containers, _extends({}, options, {\n announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n }));\n\n /**\n * Last draggable element that was dragged over\n * @property lastOver\n * @type {HTMLElement}\n */\n this.lastOver = null;\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragOver] = this[onDragOver].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n\n this.on('drag:start', this[onDragStart]).on('drag:over', this[onDragOver]).on('drag:stop', this[onDragStop]);\n }\n\n /**\n * Destroys Swappable instance.\n */\n destroy() {\n super.destroy();\n\n this.off('drag:start', this._onDragStart).off('drag:over', this._onDragOver).off('drag:stop', this._onDragStop);\n }\n\n /**\n * Drag start handler\n * @private\n * @param {DragStartEvent} event - Drag start event\n */\n [onDragStart](event) {\n const swappableStartEvent = new _SwappableEvent.SwappableStartEvent({\n dragEvent: event\n });\n\n this.trigger(swappableStartEvent);\n\n if (swappableStartEvent.canceled()) {\n event.cancel();\n }\n }\n\n /**\n * Drag over handler\n * @private\n * @param {DragOverEvent} event - Drag over event\n */\n [onDragOver](event) {\n if (event.over === event.originalSource || event.over === event.source || event.canceled()) {\n return;\n }\n\n const swappableSwapEvent = new _SwappableEvent.SwappableSwapEvent({\n dragEvent: event,\n over: event.over,\n overContainer: event.overContainer\n });\n\n this.trigger(swappableSwapEvent);\n\n if (swappableSwapEvent.canceled()) {\n return;\n }\n\n // swap originally swapped element back\n if (this.lastOver && this.lastOver !== event.over) {\n swap(this.lastOver, event.source);\n }\n\n if (this.lastOver === event.over) {\n this.lastOver = null;\n } else {\n this.lastOver = event.over;\n }\n\n swap(event.source, event.over);\n\n const swappableSwappedEvent = new _SwappableEvent.SwappableSwappedEvent({\n dragEvent: event,\n swappedElement: event.over\n });\n\n this.trigger(swappableSwappedEvent);\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {DragStopEvent} event - Drag stop event\n */\n [onDragStop](event) {\n const swappableStopEvent = new _SwappableEvent.SwappableStopEvent({\n dragEvent: event\n });\n\n this.trigger(swappableStopEvent);\n this.lastOver = null;\n }\n}\n\nexports.default = Swappable;\nfunction withTempElement(callback) {\n const tmpElement = document.createElement('div');\n callback(tmpElement);\n tmpElement.parentNode.removeChild(tmpElement);\n}\n\nfunction swap(source, over) {\n const overParent = over.parentNode;\n const sourceParent = source.parentNode;\n\n withTempElement(tmpElement => {\n sourceParent.insertBefore(tmpElement, source);\n overParent.insertBefore(source, over);\n sourceParent.insertBefore(over, tmpElement);\n });\n}\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SwappableStopEvent = exports.SwappableSwappedEvent = exports.SwappableSwapEvent = exports.SwappableStartEvent = exports.SwappableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base swappable event\n * @class SwappableEvent\n * @module SwappableEvent\n * @extends AbstractEvent\n */\nclass SwappableEvent extends _AbstractEvent2.default {\n\n /**\n * Original drag event that triggered this swappable event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n}\n\nexports.SwappableEvent = SwappableEvent; /**\n * Swappable start event\n * @class SwappableStartEvent\n * @module SwappableStartEvent\n * @extends SwappableEvent\n */\n\nSwappableEvent.type = 'swappable';\nclass SwappableStartEvent extends SwappableEvent {}\n\nexports.SwappableStartEvent = SwappableStartEvent; /**\n * Swappable swap event\n * @class SwappableSwapEvent\n * @module SwappableSwapEvent\n * @extends SwappableEvent\n */\n\nSwappableStartEvent.type = 'swappable:start';\nSwappableStartEvent.cancelable = true;\nclass SwappableSwapEvent extends SwappableEvent {\n\n /**\n * Draggable element you are over\n * @property over\n * @type {HTMLElement}\n * @readonly\n */\n get over() {\n return this.data.over;\n }\n\n /**\n * Draggable container you are over\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.overContainer;\n }\n}\n\nexports.SwappableSwapEvent = SwappableSwapEvent; /**\n * Swappable swapped event\n * @class SwappableSwappedEvent\n * @module SwappableSwappedEvent\n * @extends SwappableEvent\n */\n\nSwappableSwapEvent.type = 'swappable:swap';\nSwappableSwapEvent.cancelable = true;\nclass SwappableSwappedEvent extends SwappableEvent {\n\n /**\n * The draggable element that you swapped with\n * @property swappedElement\n * @type {HTMLElement}\n * @readonly\n */\n get swappedElement() {\n return this.data.swappedElement;\n }\n}\n\nexports.SwappableSwappedEvent = SwappableSwappedEvent; /**\n * Swappable stop event\n * @class SwappableStopEvent\n * @module SwappableStopEvent\n * @extends SwappableEvent\n */\n\nSwappableSwappedEvent.type = 'swappable:swapped';\nclass SwappableStopEvent extends SwappableEvent {}\nexports.SwappableStopEvent = SwappableStopEvent;\nSwappableStopEvent.type = 'swappable:stop';\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SwappableEvent = __webpack_require__(10);\n\nObject.keys(_SwappableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SwappableEvent[key];\n }\n });\n});\n\nvar _Swappable = __webpack_require__(29);\n\nvar _Swappable2 = _interopRequireDefault(_Swappable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Swappable2.default;\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _utils = __webpack_require__(2);\n\nvar _Draggable = __webpack_require__(5);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nvar _DroppableEvent = __webpack_require__(11);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragMove = Symbol('onDragMove');\nconst onDragStop = Symbol('onDragStop');\nconst dropInDropzone = Symbol('dropInDropZone');\nconst returnToOriginalDropzone = Symbol('returnToOriginalDropzone');\nconst closestDropzone = Symbol('closestDropzone');\nconst getDropzones = Symbol('getDropzones');\n\n/**\n * Returns an announcement message when the Draggable element is dropped into a dropzone element\n * @param {DroppableDroppedEvent} droppableEvent\n * @return {String}\n */\nfunction onDroppableDroppedDefaultAnnouncement({ dragEvent, dropzone }) {\n const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'draggable element';\n const dropzoneText = dropzone.textContent.trim() || dropzone.id || 'droppable element';\n\n return `Dropped ${sourceText} into ${dropzoneText}`;\n}\n\n/**\n * Returns an announcement message when the Draggable element has returned to its original dropzone element\n * @param {DroppableReturnedEvent} droppableEvent\n * @return {String}\n */\nfunction onDroppableReturnedDefaultAnnouncement({ dragEvent, dropzone }) {\n const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'draggable element';\n const dropzoneText = dropzone.textContent.trim() || dropzone.id || 'droppable element';\n\n return `Returned ${sourceText} from ${dropzoneText}`;\n}\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['droppable:dropped']\n * @const {Function} defaultAnnouncements['droppable:returned']\n */\nconst defaultAnnouncements = {\n 'droppable:dropped': onDroppableDroppedDefaultAnnouncement,\n 'droppable:returned': onDroppableReturnedDefaultAnnouncement\n};\n\nconst defaultClasses = {\n 'droppable:active': 'draggable-dropzone--active',\n 'droppable:occupied': 'draggable-dropzone--occupied'\n};\n\nconst defaultOptions = {\n dropzone: '.draggable-droppable'\n};\n\n/**\n * Droppable is built on top of Draggable and allows dropping draggable elements\n * into dropzone element\n * @class Droppable\n * @module Droppable\n * @extends Draggable\n */\nclass Droppable extends _Draggable2.default {\n /**\n * Droppable constructor.\n * @constructs Droppable\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Droppable containers\n * @param {Object} options - Options for Droppable\n */\n constructor(containers = [], options = {}) {\n super(containers, _extends({}, defaultOptions, options, {\n classes: _extends({}, defaultClasses, options.classes || {}),\n announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n }));\n\n /**\n * All dropzone elements on drag start\n * @property dropzones\n * @type {HTMLElement[]}\n */\n this.dropzones = null;\n\n /**\n * Last dropzone element that the source was dropped into\n * @property lastDropzone\n * @type {HTMLElement}\n */\n this.lastDropzone = null;\n\n /**\n * Initial dropzone element that the source was drag from\n * @property initialDropzone\n * @type {HTMLElement}\n */\n this.initialDropzone = null;\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragMove] = this[onDragMove].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n\n this.on('drag:start', this[onDragStart]).on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]);\n }\n\n /**\n * Destroys Droppable instance.\n */\n destroy() {\n super.destroy();\n\n this.off('drag:start', this[onDragStart]).off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]);\n }\n\n /**\n * Drag start handler\n * @private\n * @param {DragStartEvent} event - Drag start event\n */\n [onDragStart](event) {\n if (event.canceled()) {\n return;\n }\n\n this.dropzones = [...this[getDropzones]()];\n const dropzone = (0, _utils.closest)(event.sensorEvent.target, this.options.dropzone);\n\n if (!dropzone) {\n event.cancel();\n return;\n }\n\n const droppableStartEvent = new _DroppableEvent.DroppableStartEvent({\n dragEvent: event,\n dropzone\n });\n\n this.trigger(droppableStartEvent);\n\n if (droppableStartEvent.canceled()) {\n event.cancel();\n return;\n }\n\n this.initialDropzone = dropzone;\n\n for (const dropzoneElement of this.dropzones) {\n if (dropzoneElement.classList.contains(this.getClassNameFor('droppable:occupied'))) {\n continue;\n }\n\n dropzoneElement.classList.add(this.getClassNameFor('droppable:active'));\n }\n }\n\n /**\n * Drag move handler\n * @private\n * @param {DragMoveEvent} event - Drag move event\n */\n [onDragMove](event) {\n if (event.canceled()) {\n return;\n }\n\n const dropzone = this[closestDropzone](event.sensorEvent.target);\n const overEmptyDropzone = dropzone && !dropzone.classList.contains(this.getClassNameFor('droppable:occupied'));\n\n if (overEmptyDropzone && this[dropInDropzone](event, dropzone)) {\n this.lastDropzone = dropzone;\n } else if ((!dropzone || dropzone === this.initialDropzone) && this.lastDropzone) {\n this[returnToOriginalDropzone](event);\n this.lastDropzone = null;\n }\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {DragStopEvent} event - Drag stop event\n */\n [onDragStop](event) {\n const droppableStopEvent = new _DroppableEvent.DroppableStopEvent({\n dragEvent: event,\n dropzone: this.lastDropzone || this.initialDropzone\n });\n\n this.trigger(droppableStopEvent);\n\n const occupiedClass = this.getClassNameFor('droppable:occupied');\n\n for (const dropzone of this.dropzones) {\n dropzone.classList.remove(this.getClassNameFor('droppable:active'));\n }\n\n if (this.lastDropzone && this.lastDropzone !== this.initialDropzone) {\n this.initialDropzone.classList.remove(occupiedClass);\n }\n\n this.dropzones = null;\n this.lastDropzone = null;\n this.initialDropzone = null;\n }\n\n /**\n * Drops a draggable element into a dropzone element\n * @private\n * @param {DragMoveEvent} event - Drag move event\n * @param {HTMLElement} dropzone - Dropzone element to drop draggable into\n */\n [dropInDropzone](event, dropzone) {\n const droppableDroppedEvent = new _DroppableEvent.DroppableDroppedEvent({\n dragEvent: event,\n dropzone\n });\n\n this.trigger(droppableDroppedEvent);\n\n if (droppableDroppedEvent.canceled()) {\n return false;\n }\n\n const occupiedClass = this.getClassNameFor('droppable:occupied');\n\n if (this.lastDropzone) {\n this.lastDropzone.classList.remove(occupiedClass);\n }\n\n dropzone.appendChild(event.source);\n dropzone.classList.add(occupiedClass);\n\n return true;\n }\n\n /**\n * Moves the previously dropped element back into its original dropzone\n * @private\n * @param {DragMoveEvent} event - Drag move event\n */\n [returnToOriginalDropzone](event) {\n const droppableReturnedEvent = new _DroppableEvent.DroppableReturnedEvent({\n dragEvent: event,\n dropzone: this.lastDropzone\n });\n\n this.trigger(droppableReturnedEvent);\n\n if (droppableReturnedEvent.canceled()) {\n return;\n }\n\n this.initialDropzone.appendChild(event.source);\n this.lastDropzone.classList.remove(this.getClassNameFor('droppable:occupied'));\n }\n\n /**\n * Returns closest dropzone element for even target\n * @private\n * @param {HTMLElement} target - Event target\n * @return {HTMLElement|null}\n */\n [closestDropzone](target) {\n if (!this.dropzones) {\n return null;\n }\n\n return (0, _utils.closest)(target, this.dropzones);\n }\n\n /**\n * Returns all current dropzone elements for this draggable instance\n * @private\n * @return {NodeList|HTMLElement[]|Array}\n */\n [getDropzones]() {\n const dropzone = this.options.dropzone;\n\n if (typeof dropzone === 'string') {\n return document.querySelectorAll(dropzone);\n } else if (dropzone instanceof NodeList || dropzone instanceof Array) {\n return dropzone;\n } else if (typeof dropzone === 'function') {\n return dropzone();\n } else {\n return [];\n }\n }\n}\nexports.default = Droppable;\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DroppableStopEvent = exports.DroppableReturnedEvent = exports.DroppableDroppedEvent = exports.DroppableStartEvent = exports.DroppableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base droppable event\n * @class DroppableEvent\n * @module DroppableEvent\n * @extends AbstractEvent\n */\nclass DroppableEvent extends _AbstractEvent2.default {\n\n /**\n * Original drag event that triggered this droppable event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n}\n\nexports.DroppableEvent = DroppableEvent; /**\n * Droppable start event\n * @class DroppableStartEvent\n * @module DroppableStartEvent\n * @extends DroppableEvent\n */\n\nDroppableEvent.type = 'droppable';\nclass DroppableStartEvent extends DroppableEvent {\n\n /**\n * The initial dropzone element of the currently dragging draggable element\n * @property dropzone\n * @type {HTMLElement}\n * @readonly\n */\n get dropzone() {\n return this.data.dropzone;\n }\n}\n\nexports.DroppableStartEvent = DroppableStartEvent; /**\n * Droppable dropped event\n * @class DroppableDroppedEvent\n * @module DroppableDroppedEvent\n * @extends DroppableEvent\n */\n\nDroppableStartEvent.type = 'droppable:start';\nDroppableStartEvent.cancelable = true;\nclass DroppableDroppedEvent extends DroppableEvent {\n\n /**\n * The dropzone element you dropped the draggable element into\n * @property dropzone\n * @type {HTMLElement}\n * @readonly\n */\n get dropzone() {\n return this.data.dropzone;\n }\n}\n\nexports.DroppableDroppedEvent = DroppableDroppedEvent; /**\n * Droppable returned event\n * @class DroppableReturnedEvent\n * @module DroppableReturnedEvent\n * @extends DroppableEvent\n */\n\nDroppableDroppedEvent.type = 'droppable:dropped';\nDroppableDroppedEvent.cancelable = true;\nclass DroppableReturnedEvent extends DroppableEvent {\n\n /**\n * The dropzone element you dragged away from\n * @property dropzone\n * @type {HTMLElement}\n * @readonly\n */\n get dropzone() {\n return this.data.dropzone;\n }\n}\n\nexports.DroppableReturnedEvent = DroppableReturnedEvent; /**\n * Droppable stop event\n * @class DroppableStopEvent\n * @module DroppableStopEvent\n * @extends DroppableEvent\n */\n\nDroppableReturnedEvent.type = 'droppable:returned';\nDroppableReturnedEvent.cancelable = true;\nclass DroppableStopEvent extends DroppableEvent {\n\n /**\n * The final dropzone element of the draggable element\n * @property dropzone\n * @type {HTMLElement}\n * @readonly\n */\n get dropzone() {\n return this.data.dropzone;\n }\n}\nexports.DroppableStopEvent = DroppableStopEvent;\nDroppableStopEvent.type = 'droppable:stop';\nDroppableStopEvent.cancelable = true;\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DroppableEvent = __webpack_require__(11);\n\nObject.keys(_DroppableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DroppableEvent[key];\n }\n });\n});\n\nvar _Droppable = __webpack_require__(32);\n\nvar _Droppable2 = _interopRequireDefault(_Droppable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Droppable2.default;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * The Emitter is a simple emitter class that provides you with `on()`, `off()` and `trigger()` methods\n * @class Emitter\n * @module Emitter\n */\nclass Emitter {\n constructor() {\n this.callbacks = {};\n }\n\n /**\n * Registers callbacks by event name\n * @param {String} type\n * @param {...Function} callbacks\n */\n on(type, ...callbacks) {\n if (!this.callbacks[type]) {\n this.callbacks[type] = [];\n }\n\n this.callbacks[type].push(...callbacks);\n\n return this;\n }\n\n /**\n * Unregisters callbacks by event name\n * @param {String} type\n * @param {Function} callback\n */\n off(type, callback) {\n if (!this.callbacks[type]) {\n return null;\n }\n\n const copy = this.callbacks[type].slice(0);\n\n for (let i = 0; i < copy.length; i++) {\n if (callback === copy[i]) {\n this.callbacks[type].splice(i, 1);\n }\n }\n\n return this;\n }\n\n /**\n * Triggers event callbacks by event object\n * @param {AbstractEvent} event\n */\n trigger(event) {\n if (!this.callbacks[event.type]) {\n return null;\n }\n\n const callbacks = [...this.callbacks[event.type]];\n const caughtErrors = [];\n\n for (let i = callbacks.length - 1; i >= 0; i--) {\n const callback = callbacks[i];\n\n try {\n callback(event);\n } catch (error) {\n caughtErrors.push(error);\n }\n }\n\n if (caughtErrors.length) {\n /* eslint-disable no-console */\n console.error(`Draggable caught errors while triggering '${event.type}'`, caughtErrors);\n /* eslint-disable no-console */\n }\n\n return this;\n }\n}\nexports.default = Emitter;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Emitter = __webpack_require__(35);\n\nvar _Emitter2 = _interopRequireDefault(_Emitter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Emitter2.default;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _utils = __webpack_require__(2);\n\nvar _Plugins = __webpack_require__(12);\n\nvar _Emitter = __webpack_require__(36);\n\nvar _Emitter2 = _interopRequireDefault(_Emitter);\n\nvar _Sensors = __webpack_require__(6);\n\nvar _DraggableEvent = __webpack_require__(13);\n\nvar _DragEvent = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragMove = Symbol('onDragMove');\nconst onDragStop = Symbol('onDragStop');\nconst onDragPressure = Symbol('onDragPressure');\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['drag:start']\n * @const {Function} defaultAnnouncements['drag:stop']\n */\nconst defaultAnnouncements = {\n 'drag:start': event => `Picked up ${event.source.textContent.trim() || event.source.id || 'draggable element'}`,\n 'drag:stop': event => `Released ${event.source.textContent.trim() || event.source.id || 'draggable element'}`\n};\n\nconst defaultClasses = {\n 'container:dragging': 'draggable-container--is-dragging',\n 'source:dragging': 'draggable-source--is-dragging',\n 'source:placed': 'draggable-source--placed',\n 'container:placed': 'draggable-container--placed',\n 'body:dragging': 'draggable--is-dragging',\n 'draggable:over': 'draggable--over',\n 'container:over': 'draggable-container--over',\n 'source:original': 'draggable--original',\n mirror: 'draggable-mirror'\n};\n\nconst defaultOptions = exports.defaultOptions = {\n draggable: '.draggable-source',\n handle: null,\n delay: 100,\n placedTimeout: 800,\n plugins: [],\n sensors: []\n};\n\n/**\n * This is the core draggable library that does the heavy lifting\n * @class Draggable\n * @module Draggable\n */\nclass Draggable {\n\n /**\n * Draggable constructor.\n * @constructs Draggable\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Draggable containers\n * @param {Object} options - Options for draggable\n */\n constructor(containers = [document.body], options = {}) {\n /**\n * Draggable containers\n * @property containers\n * @type {HTMLElement[]}\n */\n if (containers instanceof NodeList || containers instanceof Array) {\n this.containers = [...containers];\n } else if (containers instanceof HTMLElement) {\n this.containers = [containers];\n } else {\n throw new Error('Draggable containers are expected to be of type `NodeList`, `HTMLElement[]` or `HTMLElement`');\n }\n\n this.options = _extends({}, defaultOptions, options, {\n classes: _extends({}, defaultClasses, options.classes || {}),\n announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n });\n\n /**\n * Draggables event emitter\n * @property emitter\n * @type {Emitter}\n */\n this.emitter = new _Emitter2.default();\n\n /**\n * Current drag state\n * @property dragging\n * @type {Boolean}\n */\n this.dragging = false;\n\n /**\n * Active plugins\n * @property plugins\n * @type {Plugin[]}\n */\n this.plugins = [];\n\n /**\n * Active sensors\n * @property sensors\n * @type {Sensor[]}\n */\n this.sensors = [];\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragMove] = this[onDragMove].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n this[onDragPressure] = this[onDragPressure].bind(this);\n\n document.addEventListener('drag:start', this[onDragStart], true);\n document.addEventListener('drag:move', this[onDragMove], true);\n document.addEventListener('drag:stop', this[onDragStop], true);\n document.addEventListener('drag:pressure', this[onDragPressure], true);\n\n const defaultPlugins = Object.values(Draggable.Plugins).map(Plugin => Plugin);\n const defaultSensors = [_Sensors.MouseSensor, _Sensors.TouchSensor];\n\n this.addPlugin(...[...defaultPlugins, ...this.options.plugins]);\n this.addSensor(...[...defaultSensors, ...this.options.sensors]);\n\n const draggableInitializedEvent = new _DraggableEvent.DraggableInitializedEvent({\n draggable: this\n });\n\n this.on('mirror:created', ({ mirror }) => this.mirror = mirror);\n this.on('mirror:destroy', () => this.mirror = null);\n\n this.trigger(draggableInitializedEvent);\n }\n\n /**\n * Destroys Draggable instance. This removes all internal event listeners and\n * deactivates sensors and plugins\n */\n\n /**\n * Default plugins draggable uses\n * @static\n * @property {Object} Plugins\n * @property {Announcement} Plugins.Announcement\n * @property {Focusable} Plugins.Focusable\n * @property {Mirror} Plugins.Mirror\n * @property {Scrollable} Plugins.Scrollable\n * @type {Object}\n */\n destroy() {\n document.removeEventListener('drag:start', this[onDragStart], true);\n document.removeEventListener('drag:move', this[onDragMove], true);\n document.removeEventListener('drag:stop', this[onDragStop], true);\n document.removeEventListener('drag:pressure', this[onDragPressure], true);\n\n const draggableDestroyEvent = new _DraggableEvent.DraggableDestroyEvent({\n draggable: this\n });\n\n this.trigger(draggableDestroyEvent);\n\n this.removePlugin(...this.plugins.map(plugin => plugin.constructor));\n this.removeSensor(...this.sensors.map(sensor => sensor.constructor));\n }\n\n /**\n * Adds plugin to this draggable instance. This will end up calling the attach method of the plugin\n * @param {...typeof Plugin} plugins - Plugins that you want attached to draggable\n * @return {Draggable}\n * @example draggable.addPlugin(CustomA11yPlugin, CustomMirrorPlugin)\n */\n addPlugin(...plugins) {\n const activePlugins = plugins.map(Plugin => new Plugin(this));\n\n activePlugins.forEach(plugin => plugin.attach());\n this.plugins = [...this.plugins, ...activePlugins];\n\n return this;\n }\n\n /**\n * Removes plugins that are already attached to this draggable instance. This will end up calling\n * the detach method of the plugin\n * @param {...typeof Plugin} plugins - Plugins that you want detached from draggable\n * @return {Draggable}\n * @example draggable.removePlugin(MirrorPlugin, CustomMirrorPlugin)\n */\n removePlugin(...plugins) {\n const removedPlugins = this.plugins.filter(plugin => plugins.includes(plugin.constructor));\n\n removedPlugins.forEach(plugin => plugin.detach());\n this.plugins = this.plugins.filter(plugin => !plugins.includes(plugin.constructor));\n\n return this;\n }\n\n /**\n * Adds sensors to this draggable instance. This will end up calling the attach method of the sensor\n * @param {...typeof Sensor} sensors - Sensors that you want attached to draggable\n * @return {Draggable}\n * @example draggable.addSensor(ForceTouchSensor, CustomSensor)\n */\n addSensor(...sensors) {\n const activeSensors = sensors.map(Sensor => new Sensor(this.containers, this.options));\n\n activeSensors.forEach(sensor => sensor.attach());\n this.sensors = [...this.sensors, ...activeSensors];\n\n return this;\n }\n\n /**\n * Removes sensors that are already attached to this draggable instance. This will end up calling\n * the detach method of the sensor\n * @param {...typeof Sensor} sensors - Sensors that you want attached to draggable\n * @return {Draggable}\n * @example draggable.removeSensor(TouchSensor, DragSensor)\n */\n removeSensor(...sensors) {\n const removedSensors = this.sensors.filter(sensor => sensors.includes(sensor.constructor));\n\n removedSensors.forEach(sensor => sensor.detach());\n this.sensors = this.sensors.filter(sensor => !sensors.includes(sensor.constructor));\n\n return this;\n }\n\n /**\n * Adds container to this draggable instance\n * @param {...HTMLElement} containers - Containers you want to add to draggable\n * @return {Draggable}\n * @example draggable.addContainer(document.body)\n */\n addContainer(...containers) {\n this.containers = [...this.containers, ...containers];\n this.sensors.forEach(sensor => sensor.addContainer(...containers));\n return this;\n }\n\n /**\n * Removes container from this draggable instance\n * @param {...HTMLElement} containers - Containers you want to remove from draggable\n * @return {Draggable}\n * @example draggable.removeContainer(document.body)\n */\n removeContainer(...containers) {\n this.containers = this.containers.filter(container => !containers.includes(container));\n this.sensors.forEach(sensor => sensor.removeContainer(...containers));\n return this;\n }\n\n /**\n * Adds listener for draggable events\n * @param {String} type - Event name\n * @param {...Function} callbacks - Event callbacks\n * @return {Draggable}\n * @example draggable.on('drag:start', (dragEvent) => dragEvent.cancel());\n */\n on(type, ...callbacks) {\n this.emitter.on(type, ...callbacks);\n return this;\n }\n\n /**\n * Removes listener from draggable\n * @param {String} type - Event name\n * @param {Function} callback - Event callback\n * @return {Draggable}\n * @example draggable.off('drag:start', handlerFunction);\n */\n off(type, callback) {\n this.emitter.off(type, callback);\n return this;\n }\n\n /**\n * Triggers draggable event\n * @param {AbstractEvent} event - Event instance\n * @return {Draggable}\n * @example draggable.trigger(event);\n */\n trigger(event) {\n this.emitter.trigger(event);\n return this;\n }\n\n /**\n * Returns class name for class identifier\n * @param {String} name - Name of class identifier\n * @return {String|null}\n */\n getClassNameFor(name) {\n return this.options.classes[name];\n }\n\n /**\n * Returns true if this draggable instance is currently dragging\n * @return {Boolean}\n */\n isDragging() {\n return Boolean(this.dragging);\n }\n\n /**\n * Returns all draggable elements\n * @return {HTMLElement[]}\n */\n getDraggableElements() {\n return this.containers.reduce((current, container) => {\n return [...current, ...this.getDraggableElementsForContainer(container)];\n }, []);\n }\n\n /**\n * Returns draggable elements for a given container, excluding the mirror and\n * original source element if present\n * @param {HTMLElement} container\n * @return {HTMLElement[]}\n */\n getDraggableElementsForContainer(container) {\n const allDraggableElements = container.querySelectorAll(this.options.draggable);\n\n return [...allDraggableElements].filter(childElement => {\n return childElement !== this.originalSource && childElement !== this.mirror;\n });\n }\n\n /**\n * Drag start handler\n * @private\n * @param {Event} event - DOM Drag event\n */\n [onDragStart](event) {\n const sensorEvent = getSensorEvent(event);\n const { target, container } = sensorEvent;\n\n if (!this.containers.includes(container)) {\n return;\n }\n\n if (this.options.handle && target && !(0, _utils.closest)(target, this.options.handle)) {\n sensorEvent.cancel();\n return;\n }\n\n // Find draggable source element\n this.originalSource = (0, _utils.closest)(target, this.options.draggable);\n this.sourceContainer = container;\n\n if (!this.originalSource) {\n sensorEvent.cancel();\n return;\n }\n\n if (this.lastPlacedSource && this.lastPlacedContainer) {\n clearTimeout(this.placedTimeoutID);\n this.lastPlacedSource.classList.remove(this.getClassNameFor('source:placed'));\n this.lastPlacedContainer.classList.remove(this.getClassNameFor('container:placed'));\n }\n\n this.source = this.originalSource.cloneNode(true);\n this.originalSource.parentNode.insertBefore(this.source, this.originalSource);\n this.originalSource.style.display = 'none';\n\n const dragEvent = new _DragEvent.DragStartEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent\n });\n\n this.trigger(dragEvent);\n\n this.dragging = !dragEvent.canceled();\n\n if (dragEvent.canceled()) {\n this.source.parentNode.removeChild(this.source);\n this.originalSource.style.display = null;\n return;\n }\n\n this.originalSource.classList.add(this.getClassNameFor('source:original'));\n this.source.classList.add(this.getClassNameFor('source:dragging'));\n this.sourceContainer.classList.add(this.getClassNameFor('container:dragging'));\n document.body.classList.add(this.getClassNameFor('body:dragging'));\n applyUserSelect(document.body, 'none');\n\n requestAnimationFrame(() => {\n const oldSensorEvent = getSensorEvent(event);\n const newSensorEvent = oldSensorEvent.clone({ target: this.source });\n\n this[onDragMove](_extends({}, event, {\n detail: newSensorEvent\n }));\n });\n }\n\n /**\n * Drag move handler\n * @private\n * @param {Event} event - DOM Drag event\n */\n [onDragMove](event) {\n if (!this.dragging) {\n return;\n }\n\n const sensorEvent = getSensorEvent(event);\n const { container } = sensorEvent;\n let target = sensorEvent.target;\n\n const dragMoveEvent = new _DragEvent.DragMoveEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent\n });\n\n this.trigger(dragMoveEvent);\n\n if (dragMoveEvent.canceled()) {\n sensorEvent.cancel();\n }\n\n target = (0, _utils.closest)(target, this.options.draggable);\n const withinCorrectContainer = (0, _utils.closest)(sensorEvent.target, this.containers);\n const overContainer = sensorEvent.overContainer || withinCorrectContainer;\n const isLeavingContainer = this.currentOverContainer && overContainer !== this.currentOverContainer;\n const isLeavingDraggable = this.currentOver && target !== this.currentOver;\n const isOverContainer = overContainer && this.currentOverContainer !== overContainer;\n const isOverDraggable = withinCorrectContainer && target && this.currentOver !== target;\n\n if (isLeavingDraggable) {\n const dragOutEvent = new _DragEvent.DragOutEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent,\n over: this.currentOver\n });\n\n this.currentOver.classList.remove(this.getClassNameFor('draggable:over'));\n this.currentOver = null;\n\n this.trigger(dragOutEvent);\n }\n\n if (isLeavingContainer) {\n const dragOutContainerEvent = new _DragEvent.DragOutContainerEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent,\n overContainer: this.currentOverContainer\n });\n\n this.currentOverContainer.classList.remove(this.getClassNameFor('container:over'));\n this.currentOverContainer = null;\n\n this.trigger(dragOutContainerEvent);\n }\n\n if (isOverContainer) {\n overContainer.classList.add(this.getClassNameFor('container:over'));\n\n const dragOverContainerEvent = new _DragEvent.DragOverContainerEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent,\n overContainer\n });\n\n this.currentOverContainer = overContainer;\n\n this.trigger(dragOverContainerEvent);\n }\n\n if (isOverDraggable) {\n target.classList.add(this.getClassNameFor('draggable:over'));\n\n const dragOverEvent = new _DragEvent.DragOverEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent,\n overContainer,\n over: target\n });\n\n this.currentOver = target;\n\n this.trigger(dragOverEvent);\n }\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {Event} event - DOM Drag event\n */\n [onDragStop](event) {\n if (!this.dragging) {\n return;\n }\n\n this.dragging = false;\n\n const dragStopEvent = new _DragEvent.DragStopEvent({\n source: this.source,\n originalSource: this.originalSource,\n sensorEvent: event.sensorEvent,\n sourceContainer: this.sourceContainer\n });\n\n this.trigger(dragStopEvent);\n\n this.source.parentNode.insertBefore(this.originalSource, this.source);\n this.source.parentNode.removeChild(this.source);\n this.originalSource.style.display = '';\n\n this.source.classList.remove(this.getClassNameFor('source:dragging'));\n this.originalSource.classList.remove(this.getClassNameFor('source:original'));\n this.originalSource.classList.add(this.getClassNameFor('source:placed'));\n this.sourceContainer.classList.add(this.getClassNameFor('container:placed'));\n this.sourceContainer.classList.remove(this.getClassNameFor('container:dragging'));\n document.body.classList.remove(this.getClassNameFor('body:dragging'));\n applyUserSelect(document.body, '');\n\n if (this.currentOver) {\n this.currentOver.classList.remove(this.getClassNameFor('draggable:over'));\n }\n\n if (this.currentOverContainer) {\n this.currentOverContainer.classList.remove(this.getClassNameFor('container:over'));\n }\n\n this.lastPlacedSource = this.originalSource;\n this.lastPlacedContainer = this.sourceContainer;\n\n this.placedTimeoutID = setTimeout(() => {\n if (this.lastPlacedSource) {\n this.lastPlacedSource.classList.remove(this.getClassNameFor('source:placed'));\n }\n\n if (this.lastPlacedContainer) {\n this.lastPlacedContainer.classList.remove(this.getClassNameFor('container:placed'));\n }\n\n this.lastPlacedSource = null;\n this.lastPlacedContainer = null;\n }, this.options.placedTimeout);\n\n this.source = null;\n this.originalSource = null;\n this.currentOverContainer = null;\n this.currentOver = null;\n this.sourceContainer = null;\n }\n\n /**\n * Drag pressure handler\n * @private\n * @param {Event} event - DOM Drag event\n */\n [onDragPressure](event) {\n if (!this.dragging) {\n return;\n }\n\n const sensorEvent = getSensorEvent(event);\n const source = this.source || (0, _utils.closest)(sensorEvent.originalEvent.target, this.options.draggable);\n\n const dragPressureEvent = new _DragEvent.DragPressureEvent({\n sensorEvent,\n source,\n pressure: sensorEvent.pressure\n });\n\n this.trigger(dragPressureEvent);\n }\n}\n\nexports.default = Draggable;\nDraggable.Plugins = { Announcement: _Plugins.Announcement, Focusable: _Plugins.Focusable, Mirror: _Plugins.Mirror, Scrollable: _Plugins.Scrollable };\nfunction getSensorEvent(event) {\n return event.detail;\n}\n\nfunction applyUserSelect(element, value) {\n element.style.webkitUserSelect = value;\n element.style.mozUserSelect = value;\n element.style.msUserSelect = value;\n element.style.oUserSelect = value;\n element.style.userSelect = value;\n}\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onMouseForceWillBegin = Symbol('onMouseForceWillBegin');\nconst onMouseForceDown = Symbol('onMouseForceDown');\nconst onMouseDown = Symbol('onMouseDown');\nconst onMouseForceChange = Symbol('onMouseForceChange');\nconst onMouseMove = Symbol('onMouseMove');\nconst onMouseUp = Symbol('onMouseUp');\nconst onMouseForceGlobalChange = Symbol('onMouseForceGlobalChange');\n\n/**\n * This sensor picks up native force touch events and dictates drag operations\n * @class ForceTouchSensor\n * @module ForceTouchSensor\n * @extends Sensor\n */\nclass ForceTouchSensor extends _Sensor2.default {\n /**\n * ForceTouchSensor constructor.\n * @constructs ForceTouchSensor\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n * @param {Object} options - Options\n */\n constructor(containers = [], options = {}) {\n super(containers, options);\n\n /**\n * Draggable element needs to be remembered to unset the draggable attribute after drag operation has completed\n * @property mightDrag\n * @type {Boolean}\n */\n this.mightDrag = false;\n\n this[onMouseForceWillBegin] = this[onMouseForceWillBegin].bind(this);\n this[onMouseForceDown] = this[onMouseForceDown].bind(this);\n this[onMouseDown] = this[onMouseDown].bind(this);\n this[onMouseForceChange] = this[onMouseForceChange].bind(this);\n this[onMouseMove] = this[onMouseMove].bind(this);\n this[onMouseUp] = this[onMouseUp].bind(this);\n }\n\n /**\n * Attaches sensors event listeners to the DOM\n */\n attach() {\n for (const container of this.containers) {\n container.addEventListener('webkitmouseforcewillbegin', this[onMouseForceWillBegin], false);\n container.addEventListener('webkitmouseforcedown', this[onMouseForceDown], false);\n container.addEventListener('mousedown', this[onMouseDown], true);\n container.addEventListener('webkitmouseforcechanged', this[onMouseForceChange], false);\n }\n\n document.addEventListener('mousemove', this[onMouseMove]);\n document.addEventListener('mouseup', this[onMouseUp]);\n }\n\n /**\n * Detaches sensors event listeners to the DOM\n */\n detach() {\n for (const container of this.containers) {\n container.removeEventListener('webkitmouseforcewillbegin', this[onMouseForceWillBegin], false);\n container.removeEventListener('webkitmouseforcedown', this[onMouseForceDown], false);\n container.removeEventListener('mousedown', this[onMouseDown], true);\n container.removeEventListener('webkitmouseforcechanged', this[onMouseForceChange], false);\n }\n\n document.removeEventListener('mousemove', this[onMouseMove]);\n document.removeEventListener('mouseup', this[onMouseUp]);\n }\n\n /**\n * Mouse force will begin handler\n * @private\n * @param {Event} event - Mouse force will begin event\n */\n [onMouseForceWillBegin](event) {\n event.preventDefault();\n this.mightDrag = true;\n }\n\n /**\n * Mouse force down handler\n * @private\n * @param {Event} event - Mouse force down event\n */\n [onMouseForceDown](event) {\n if (this.dragging) {\n return;\n }\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n const container = event.currentTarget;\n\n const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container,\n originalEvent: event\n });\n\n this.trigger(container, dragStartEvent);\n\n this.currentContainer = container;\n this.dragging = !dragStartEvent.canceled();\n this.mightDrag = false;\n }\n\n /**\n * Mouse up handler\n * @private\n * @param {Event} event - Mouse up event\n */\n [onMouseUp](event) {\n if (!this.dragging) {\n return;\n }\n\n const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target: null,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragStopEvent);\n\n this.currentContainer = null;\n this.dragging = false;\n this.mightDrag = false;\n }\n\n /**\n * Mouse down handler\n * @private\n * @param {Event} event - Mouse down event\n */\n [onMouseDown](event) {\n if (!this.mightDrag) {\n return;\n }\n\n // Need workaround for real click\n // Cancel potential drag events\n event.stopPropagation();\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n\n /**\n * Mouse move handler\n * @private\n * @param {Event} event - Mouse force will begin event\n */\n [onMouseMove](event) {\n if (!this.dragging) {\n return;\n }\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n\n const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragMoveEvent);\n }\n\n /**\n * Mouse force change handler\n * @private\n * @param {Event} event - Mouse force change event\n */\n [onMouseForceChange](event) {\n if (this.dragging) {\n return;\n }\n\n const target = event.target;\n const container = event.currentTarget;\n\n const dragPressureEvent = new _SensorEvent.DragPressureSensorEvent({\n pressure: event.webkitForce,\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container,\n originalEvent: event\n });\n\n this.trigger(container, dragPressureEvent);\n }\n\n /**\n * Mouse force global change handler\n * @private\n * @param {Event} event - Mouse force global change event\n */\n [onMouseForceGlobalChange](event) {\n if (!this.dragging) {\n return;\n }\n\n const target = event.target;\n\n const dragPressureEvent = new _SensorEvent.DragPressureSensorEvent({\n pressure: event.webkitForce,\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragPressureEvent);\n }\n}\nexports.default = ForceTouchSensor;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _ForceTouchSensor = __webpack_require__(38);\n\nvar _ForceTouchSensor2 = _interopRequireDefault(_ForceTouchSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _ForceTouchSensor2.default;\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(2);\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onMouseDown = Symbol('onMouseDown');\nconst onMouseUp = Symbol('onMouseUp');\nconst onDragStart = Symbol('onDragStart');\nconst onDragOver = Symbol('onDragOver');\nconst onDragEnd = Symbol('onDragEnd');\nconst onDrop = Symbol('onDrop');\nconst reset = Symbol('reset');\n\n/**\n * This sensor picks up native browser drag events and dictates drag operations\n * @class DragSensor\n * @module DragSensor\n * @extends Sensor\n */\nclass DragSensor extends _Sensor2.default {\n /**\n * DragSensor constructor.\n * @constructs DragSensor\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n * @param {Object} options - Options\n */\n constructor(containers = [], options = {}) {\n super(containers, options);\n\n /**\n * Mouse down timer which will end up setting the draggable attribute, unless canceled\n * @property mouseDownTimeout\n * @type {Number}\n */\n this.mouseDownTimeout = null;\n\n /**\n * Draggable element needs to be remembered to unset the draggable attribute after drag operation has completed\n * @property draggableElement\n * @type {HTMLElement}\n */\n this.draggableElement = null;\n\n /**\n * Native draggable element could be links or images, their draggable state will be disabled during drag operation\n * @property nativeDraggableElement\n * @type {HTMLElement}\n */\n this.nativeDraggableElement = null;\n\n this[onMouseDown] = this[onMouseDown].bind(this);\n this[onMouseUp] = this[onMouseUp].bind(this);\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragOver] = this[onDragOver].bind(this);\n this[onDragEnd] = this[onDragEnd].bind(this);\n this[onDrop] = this[onDrop].bind(this);\n }\n\n /**\n * Attaches sensors event listeners to the DOM\n */\n attach() {\n document.addEventListener('mousedown', this[onMouseDown], true);\n }\n\n /**\n * Detaches sensors event listeners to the DOM\n */\n detach() {\n document.removeEventListener('mousedown', this[onMouseDown], true);\n }\n\n /**\n * Drag start handler\n * @private\n * @param {Event} event - Drag start event\n */\n [onDragStart](event) {\n // Need for firefox. \"text\" key is needed for IE\n event.dataTransfer.setData('text', '');\n event.dataTransfer.effectAllowed = this.options.type;\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n this.currentContainer = (0, _utils.closest)(event.target, this.containers);\n\n if (!this.currentContainer) {\n return;\n }\n\n const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n // Workaround\n setTimeout(() => {\n this.trigger(this.currentContainer, dragStartEvent);\n\n if (dragStartEvent.canceled()) {\n this.dragging = false;\n } else {\n this.dragging = true;\n }\n }, 0);\n }\n\n /**\n * Drag over handler\n * @private\n * @param {Event} event - Drag over event\n */\n [onDragOver](event) {\n if (!this.dragging) {\n return;\n }\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n const container = this.currentContainer;\n\n const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container,\n originalEvent: event\n });\n\n this.trigger(container, dragMoveEvent);\n\n if (!dragMoveEvent.canceled()) {\n event.preventDefault();\n event.dataTransfer.dropEffect = this.options.type;\n }\n }\n\n /**\n * Drag end handler\n * @private\n * @param {Event} event - Drag end event\n */\n [onDragEnd](event) {\n if (!this.dragging) {\n return;\n }\n\n document.removeEventListener('mouseup', this[onMouseUp], true);\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n const container = this.currentContainer;\n\n const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container,\n originalEvent: event\n });\n\n this.trigger(container, dragStopEvent);\n\n this.dragging = false;\n\n this[reset]();\n }\n\n /**\n * Drop handler\n * @private\n * @param {Event} event - Drop event\n */\n [onDrop](event) {\n // eslint-disable-line class-methods-use-this\n event.preventDefault();\n }\n\n /**\n * Mouse down handler\n * @private\n * @param {Event} event - Mouse down event\n */\n [onMouseDown](event) {\n // Firefox bug for inputs within draggables https://bugzilla.mozilla.org/show_bug.cgi?id=739071\n if (event.target && (event.target.form || event.target.contenteditable)) {\n return;\n }\n\n const nativeDraggableElement = (0, _utils.closest)(event.target, element => element.draggable);\n\n if (nativeDraggableElement) {\n nativeDraggableElement.draggable = false;\n this.nativeDraggableElement = nativeDraggableElement;\n }\n\n document.addEventListener('mouseup', this[onMouseUp], true);\n document.addEventListener('dragstart', this[onDragStart], false);\n document.addEventListener('dragover', this[onDragOver], false);\n document.addEventListener('dragend', this[onDragEnd], false);\n document.addEventListener('drop', this[onDrop], false);\n\n const target = (0, _utils.closest)(event.target, this.options.draggable);\n\n if (!target) {\n return;\n }\n\n this.mouseDownTimeout = setTimeout(() => {\n target.draggable = true;\n this.draggableElement = target;\n }, this.options.delay);\n }\n\n /**\n * Mouse up handler\n * @private\n * @param {Event} event - Mouse up event\n */\n [onMouseUp]() {\n this[reset]();\n }\n\n /**\n * Mouse up handler\n * @private\n * @param {Event} event - Mouse up event\n */\n [reset]() {\n clearTimeout(this.mouseDownTimeout);\n\n document.removeEventListener('mouseup', this[onMouseUp], true);\n document.removeEventListener('dragstart', this[onDragStart], false);\n document.removeEventListener('dragover', this[onDragOver], false);\n document.removeEventListener('dragend', this[onDragEnd], false);\n document.removeEventListener('drop', this[onDrop], false);\n\n if (this.nativeDraggableElement) {\n this.nativeDraggableElement.draggable = true;\n this.nativeDraggableElement = null;\n }\n\n if (this.draggableElement) {\n this.draggableElement.draggable = false;\n this.draggableElement = null;\n }\n }\n}\nexports.default = DragSensor;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DragSensor = __webpack_require__(40);\n\nvar _DragSensor2 = _interopRequireDefault(_DragSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _DragSensor2.default;\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(2);\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onTouchStart = Symbol('onTouchStart');\nconst onTouchHold = Symbol('onTouchHold');\nconst onTouchEnd = Symbol('onTouchEnd');\nconst onTouchMove = Symbol('onTouchMove');\n\n/**\n * Prevents scrolling when set to true\n * @var {Boolean} preventScrolling\n */\nlet preventScrolling = false;\n\n// WebKit requires cancelable `touchmove` events to be added as early as possible\nwindow.addEventListener('touchmove', event => {\n if (!preventScrolling) {\n return;\n }\n\n // Prevent scrolling\n event.preventDefault();\n}, { passive: false });\n\n/**\n * This sensor picks up native browser touch events and dictates drag operations\n * @class TouchSensor\n * @module TouchSensor\n * @extends Sensor\n */\nclass TouchSensor extends _Sensor2.default {\n /**\n * TouchSensor constructor.\n * @constructs TouchSensor\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n * @param {Object} options - Options\n */\n constructor(containers = [], options = {}) {\n super(containers, options);\n\n /**\n * Closest scrollable container so accidental scroll can cancel long touch\n * @property currentScrollableParent\n * @type {HTMLElement}\n */\n this.currentScrollableParent = null;\n\n /**\n * TimeoutID for long touch\n * @property tapTimeout\n * @type {Number}\n */\n this.tapTimeout = null;\n\n /**\n * touchMoved indicates if touch has moved during tapTimeout\n * @property touchMoved\n * @type {Boolean}\n */\n this.touchMoved = false;\n\n this[onTouchStart] = this[onTouchStart].bind(this);\n this[onTouchHold] = this[onTouchHold].bind(this);\n this[onTouchEnd] = this[onTouchEnd].bind(this);\n this[onTouchMove] = this[onTouchMove].bind(this);\n }\n\n /**\n * Attaches sensors event listeners to the DOM\n */\n attach() {\n document.addEventListener('touchstart', this[onTouchStart]);\n }\n\n /**\n * Detaches sensors event listeners to the DOM\n */\n detach() {\n document.removeEventListener('touchstart', this[onTouchStart]);\n }\n\n /**\n * Touch start handler\n * @private\n * @param {Event} event - Touch start event\n */\n [onTouchStart](event) {\n const container = (0, _utils.closest)(event.target, this.containers);\n\n if (!container) {\n return;\n }\n\n document.addEventListener('touchmove', this[onTouchMove]);\n document.addEventListener('touchend', this[onTouchEnd]);\n document.addEventListener('touchcancel', this[onTouchEnd]);\n container.addEventListener('contextmenu', onContextMenu);\n\n this.currentContainer = container;\n this.tapTimeout = setTimeout(this[onTouchHold](event, container), this.options.delay);\n }\n\n /**\n * Touch hold handler\n * @private\n * @param {Event} event - Touch start event\n * @param {HTMLElement} container - Container element\n */\n [onTouchHold](event, container) {\n return () => {\n if (this.touchMoved) {\n return;\n }\n\n const touch = event.touches[0] || event.changedTouches[0];\n const target = event.target;\n\n const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n clientX: touch.pageX,\n clientY: touch.pageY,\n target,\n container,\n originalEvent: event\n });\n\n this.trigger(container, dragStartEvent);\n\n this.dragging = !dragStartEvent.canceled();\n preventScrolling = this.dragging;\n };\n }\n\n /**\n * Touch move handler\n * @private\n * @param {Event} event - Touch move event\n */\n [onTouchMove](event) {\n this.touchMoved = true;\n\n if (!this.dragging) {\n return;\n }\n\n const touch = event.touches[0] || event.changedTouches[0];\n const target = document.elementFromPoint(touch.pageX - window.scrollX, touch.pageY - window.scrollY);\n\n const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n clientX: touch.pageX,\n clientY: touch.pageY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragMoveEvent);\n }\n\n /**\n * Touch end handler\n * @private\n * @param {Event} event - Touch end event\n */\n [onTouchEnd](event) {\n this.touchMoved = false;\n preventScrolling = false;\n\n document.removeEventListener('touchend', this[onTouchEnd]);\n document.removeEventListener('touchcancel', this[onTouchEnd]);\n document.removeEventListener('touchmove', this[onTouchMove]);\n\n if (this.currentContainer) {\n this.currentContainer.removeEventListener('contextmenu', onContextMenu);\n }\n\n clearTimeout(this.tapTimeout);\n\n if (!this.dragging) {\n return;\n }\n\n const touch = event.touches[0] || event.changedTouches[0];\n const target = document.elementFromPoint(touch.pageX - window.scrollX, touch.pageY - window.scrollY);\n\n event.preventDefault();\n\n const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n clientX: touch.pageX,\n clientY: touch.pageY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragStopEvent);\n\n this.currentContainer = null;\n this.dragging = false;\n }\n}\n\nexports.default = TouchSensor;\nfunction onContextMenu(event) {\n event.preventDefault();\n event.stopPropagation();\n}\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _TouchSensor = __webpack_require__(42);\n\nvar _TouchSensor2 = _interopRequireDefault(_TouchSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _TouchSensor2.default;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DragPressureSensorEvent = exports.DragStopSensorEvent = exports.DragMoveSensorEvent = exports.DragStartSensorEvent = exports.SensorEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base sensor event\n * @class SensorEvent\n * @module SensorEvent\n * @extends AbstractEvent\n */\nclass SensorEvent extends _AbstractEvent2.default {\n /**\n * Original browser event that triggered a sensor\n * @property originalEvent\n * @type {Event}\n * @readonly\n */\n get originalEvent() {\n return this.data.originalEvent;\n }\n\n /**\n * Normalized clientX for both touch and mouse events\n * @property clientX\n * @type {Number}\n * @readonly\n */\n get clientX() {\n return this.data.clientX;\n }\n\n /**\n * Normalized clientY for both touch and mouse events\n * @property clientY\n * @type {Number}\n * @readonly\n */\n get clientY() {\n return this.data.clientY;\n }\n\n /**\n * Normalized target for both touch and mouse events\n * Returns the element that is behind cursor or touch pointer\n * @property target\n * @type {HTMLElement}\n * @readonly\n */\n get target() {\n return this.data.target;\n }\n\n /**\n * Container that initiated the sensor\n * @property container\n * @type {HTMLElement}\n * @readonly\n */\n get container() {\n return this.data.container;\n }\n\n /**\n * Trackpad pressure\n * @property pressure\n * @type {Number}\n * @readonly\n */\n get pressure() {\n return this.data.pressure;\n }\n}\n\nexports.SensorEvent = SensorEvent; /**\n * Drag start sensor event\n * @class DragStartSensorEvent\n * @module DragStartSensorEvent\n * @extends SensorEvent\n */\n\nclass DragStartSensorEvent extends SensorEvent {}\n\nexports.DragStartSensorEvent = DragStartSensorEvent; /**\n * Drag move sensor event\n * @class DragMoveSensorEvent\n * @module DragMoveSensorEvent\n * @extends SensorEvent\n */\n\nDragStartSensorEvent.type = 'drag:start';\nclass DragMoveSensorEvent extends SensorEvent {}\n\nexports.DragMoveSensorEvent = DragMoveSensorEvent; /**\n * Drag stop sensor event\n * @class DragStopSensorEvent\n * @module DragStopSensorEvent\n * @extends SensorEvent\n */\n\nDragMoveSensorEvent.type = 'drag:move';\nclass DragStopSensorEvent extends SensorEvent {}\n\nexports.DragStopSensorEvent = DragStopSensorEvent; /**\n * Drag pressure sensor event\n * @class DragPressureSensorEvent\n * @module DragPressureSensorEvent\n * @extends SensorEvent\n */\n\nDragStopSensorEvent.type = 'drag:stop';\nclass DragPressureSensorEvent extends SensorEvent {}\nexports.DragPressureSensorEvent = DragPressureSensorEvent;\nDragPressureSensorEvent.type = 'drag:pressure';\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(2);\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onContextMenuWhileDragging = Symbol('onContextMenuWhileDragging');\nconst onMouseDown = Symbol('onMouseDown');\nconst onMouseMove = Symbol('onMouseMove');\nconst onMouseUp = Symbol('onMouseUp');\n\n/**\n * This sensor picks up native browser mouse events and dictates drag operations\n * @class MouseSensor\n * @module MouseSensor\n * @extends Sensor\n */\nclass MouseSensor extends _Sensor2.default {\n /**\n * MouseSensor constructor.\n * @constructs MouseSensor\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n * @param {Object} options - Options\n */\n constructor(containers = [], options = {}) {\n super(containers, options);\n\n /**\n * Indicates if mouse button is still down\n * @property mouseDown\n * @type {Boolean}\n */\n this.mouseDown = false;\n\n /**\n * Mouse down timer which will end up triggering the drag start operation\n * @property mouseDownTimeout\n * @type {Number}\n */\n this.mouseDownTimeout = null;\n\n /**\n * Indicates if context menu has been opened during drag operation\n * @property openedContextMenu\n * @type {Boolean}\n */\n this.openedContextMenu = false;\n\n this[onContextMenuWhileDragging] = this[onContextMenuWhileDragging].bind(this);\n this[onMouseDown] = this[onMouseDown].bind(this);\n this[onMouseMove] = this[onMouseMove].bind(this);\n this[onMouseUp] = this[onMouseUp].bind(this);\n }\n\n /**\n * Attaches sensors event listeners to the DOM\n */\n attach() {\n document.addEventListener('mousedown', this[onMouseDown], true);\n }\n\n /**\n * Detaches sensors event listeners to the DOM\n */\n detach() {\n document.removeEventListener('mousedown', this[onMouseDown], true);\n }\n\n /**\n * Mouse down handler\n * @private\n * @param {Event} event - Mouse down event\n */\n [onMouseDown](event) {\n if (event.button !== 0 || event.ctrlKey || event.metaKey) {\n return;\n }\n\n document.addEventListener('mouseup', this[onMouseUp]);\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n const container = (0, _utils.closest)(target, this.containers);\n\n if (!container) {\n return;\n }\n\n document.addEventListener('dragstart', preventNativeDragStart);\n\n this.mouseDown = true;\n\n clearTimeout(this.mouseDownTimeout);\n this.mouseDownTimeout = setTimeout(() => {\n if (!this.mouseDown) {\n return;\n }\n\n const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container,\n originalEvent: event\n });\n\n this.trigger(container, dragStartEvent);\n\n this.currentContainer = container;\n this.dragging = !dragStartEvent.canceled();\n\n if (this.dragging) {\n document.addEventListener('contextmenu', this[onContextMenuWhileDragging]);\n document.addEventListener('mousemove', this[onMouseMove]);\n }\n }, this.options.delay);\n }\n\n /**\n * Mouse move handler\n * @private\n * @param {Event} event - Mouse move event\n */\n [onMouseMove](event) {\n if (!this.dragging) {\n return;\n }\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n\n const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragMoveEvent);\n }\n\n /**\n * Mouse up handler\n * @private\n * @param {Event} event - Mouse up event\n */\n [onMouseUp](event) {\n this.mouseDown = Boolean(this.openedContextMenu);\n\n if (this.openedContextMenu) {\n this.openedContextMenu = false;\n return;\n }\n\n document.removeEventListener('mouseup', this[onMouseUp]);\n document.removeEventListener('dragstart', preventNativeDragStart);\n\n if (!this.dragging) {\n return;\n }\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n\n const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragStopEvent);\n\n document.removeEventListener('contextmenu', this[onContextMenuWhileDragging]);\n document.removeEventListener('mousemove', this[onMouseMove]);\n\n this.currentContainer = null;\n this.dragging = false;\n }\n\n /**\n * Context menu handler\n * @private\n * @param {Event} event - Context menu event\n */\n [onContextMenuWhileDragging](event) {\n event.preventDefault();\n this.openedContextMenu = true;\n }\n}\n\nexports.default = MouseSensor;\nfunction preventNativeDragStart(event) {\n event.preventDefault();\n}\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _MouseSensor = __webpack_require__(45);\n\nvar _MouseSensor2 = _interopRequireDefault(_MouseSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _MouseSensor2.default;\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n/**\n * Base sensor class. Extend from this class to create a new or custom sensor\n * @class Sensor\n * @module Sensor\n */\nclass Sensor {\n /**\n * Sensor constructor.\n * @constructs Sensor\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n * @param {Object} options - Options\n */\n constructor(containers = [], options = {}) {\n /**\n * Current containers\n * @property containers\n * @type {HTMLElement[]}\n */\n this.containers = [...containers];\n\n /**\n * Current options\n * @property options\n * @type {Object}\n */\n this.options = _extends({}, options);\n\n /**\n * Current drag state\n * @property dragging\n * @type {Boolean}\n */\n this.dragging = false;\n\n /**\n * Current container\n * @property currentContainer\n * @type {HTMLElement}\n */\n this.currentContainer = null;\n }\n\n /**\n * Attaches sensors event listeners to the DOM\n * @return {Sensor}\n */\n attach() {\n return this;\n }\n\n /**\n * Detaches sensors event listeners to the DOM\n * @return {Sensor}\n */\n detach() {\n return this;\n }\n\n /**\n * Adds container to this sensor instance\n * @param {...HTMLElement} containers - Containers you want to add to this sensor\n * @example draggable.addContainer(document.body)\n */\n addContainer(...containers) {\n this.containers = [...this.containers, ...containers];\n }\n\n /**\n * Removes container from this sensor instance\n * @param {...HTMLElement} containers - Containers you want to remove from this sensor\n * @example draggable.removeContainer(document.body)\n */\n removeContainer(...containers) {\n this.containers = this.containers.filter(container => !containers.includes(container));\n }\n\n /**\n * Triggers event on target element\n * @param {HTMLElement} element - Element to trigger event on\n * @param {SensorEvent} sensorEvent - Sensor event to trigger\n */\n trigger(element, sensorEvent) {\n const event = document.createEvent('Event');\n event.detail = sensorEvent;\n event.initEvent(sensorEvent.type, true, true);\n element.dispatchEvent(event);\n this.lastEvent = sensorEvent;\n\n return sensorEvent;\n }\n}\nexports.default = Sensor;\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = requestNextAnimationFrame;\nfunction requestNextAnimationFrame(callback) {\n return requestAnimationFrame(() => {\n requestAnimationFrame(callback);\n });\n}\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _requestNextAnimationFrame = __webpack_require__(48);\n\nvar _requestNextAnimationFrame2 = _interopRequireDefault(_requestNextAnimationFrame);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _requestNextAnimationFrame2.default;\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = closest;\nconst matchFunction = Element.prototype.matches || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector;\n\n/**\n * Get the closest parent element of a given element that matches the given\n * selector string or matching function\n *\n * @param {Element} element The child element to find a parent of\n * @param {String|Function} selector The string or function to use to match\n * the parent element\n * @return {Element|null}\n */\nfunction closest(element, value) {\n if (!element) {\n return null;\n }\n\n const selector = value;\n const callback = value;\n const nodeList = value;\n const singleElement = value;\n\n const isSelector = Boolean(typeof value === 'string');\n const isFunction = Boolean(typeof value === 'function');\n const isNodeList = Boolean(value instanceof NodeList || value instanceof Array);\n const isElement = Boolean(value instanceof HTMLElement);\n\n function conditionFn(currentElement) {\n if (!currentElement) {\n return currentElement;\n } else if (isSelector) {\n return matchFunction.call(currentElement, selector);\n } else if (isNodeList) {\n return [...nodeList].includes(currentElement);\n } else if (isElement) {\n return singleElement === currentElement;\n } else if (isFunction) {\n return callback(currentElement);\n } else {\n return null;\n }\n }\n\n let current = element;\n\n do {\n current = current.correspondingUseElement || current.correspondingElement || current;\n\n if (conditionFn(current)) {\n return current;\n }\n\n current = current.parentNode;\n } while (current && current !== document.body && current !== document);\n\n return null;\n}\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _closest = __webpack_require__(50);\n\nvar _closest2 = _interopRequireDefault(_closest);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _closest2.default;\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = exports.scroll = exports.onDragStop = exports.onDragMove = exports.onDragStart = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _utils = __webpack_require__(2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = exports.onDragStart = Symbol('onDragStart');\nconst onDragMove = exports.onDragMove = Symbol('onDragMove');\nconst onDragStop = exports.onDragStop = Symbol('onDragStop');\nconst scroll = exports.scroll = Symbol('scroll');\n\n/**\n * Scrollable default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.speed\n * @property {Number} defaultOptions.sensitivity\n * @property {HTMLElement[]} defaultOptions.scrollableElements\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n speed: 6,\n sensitivity: 50,\n scrollableElements: []\n};\n\n/**\n * Scrollable plugin which scrolls the closest scrollable parent\n * @class Scrollable\n * @module Scrollable\n * @extends AbstractPlugin\n */\nclass Scrollable extends _AbstractPlugin2.default {\n /**\n * Scrollable constructor.\n * @constructs Scrollable\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Scrollable options\n * @property {Object} options\n * @property {Number} options.speed\n * @property {Number} options.sensitivity\n * @property {HTMLElement[]} options.scrollableElements\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * Keeps current mouse position\n * @property {Object} currentMousePosition\n * @property {Number} currentMousePosition.clientX\n * @property {Number} currentMousePosition.clientY\n * @type {Object|null}\n */\n this.currentMousePosition = null;\n\n /**\n * Scroll animation frame\n * @property scrollAnimationFrame\n * @type {Number|null}\n */\n this.scrollAnimationFrame = null;\n\n /**\n * Closest scrollable element\n * @property scrollableElement\n * @type {HTMLElement|null}\n */\n this.scrollableElement = null;\n\n /**\n * Animation frame looking for the closest scrollable element\n * @property findScrollableElementFrame\n * @type {Number|null}\n */\n this.findScrollableElementFrame = null;\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragMove] = this[onDragMove].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n this[scroll] = this[scroll].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('drag:start', this[onDragStart]).on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('drag:start', this[onDragStart]).off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]);\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.scrollable || {};\n }\n\n /**\n * Returns closest scrollable elements by element\n * @param {HTMLElement} target\n * @return {HTMLElement}\n */\n getScrollableElement(target) {\n if (this.hasDefinedScrollableElements()) {\n return (0, _utils.closest)(target, this.options.scrollableElements) || document.documentElement;\n } else {\n return closestScrollableElement(target);\n }\n }\n\n /**\n * Returns true if at least one scrollable element have been defined via options\n * @param {HTMLElement} target\n * @return {Boolean}\n */\n hasDefinedScrollableElements() {\n return Boolean(this.options.scrollableElements.length !== 0);\n }\n\n /**\n * Drag start handler. Finds closest scrollable parent in separate frame\n * @param {DragStartEvent} dragEvent\n * @private\n */\n [onDragStart](dragEvent) {\n this.findScrollableElementFrame = requestAnimationFrame(() => {\n this.scrollableElement = this.getScrollableElement(dragEvent.source);\n });\n }\n\n /**\n * Drag move handler. Remembers mouse position and initiates scrolling\n * @param {DragMoveEvent} dragEvent\n * @private\n */\n [onDragMove](dragEvent) {\n this.findScrollableElementFrame = requestAnimationFrame(() => {\n this.scrollableElement = this.getScrollableElement(dragEvent.sensorEvent.target);\n });\n\n if (!this.scrollableElement) {\n return;\n }\n\n const sensorEvent = dragEvent.sensorEvent;\n const scrollOffset = { x: 0, y: 0 };\n\n if ('ontouchstart' in window) {\n scrollOffset.y = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n scrollOffset.x = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n }\n\n this.currentMousePosition = {\n clientX: sensorEvent.clientX - scrollOffset.x,\n clientY: sensorEvent.clientY - scrollOffset.y\n };\n\n this.scrollAnimationFrame = requestAnimationFrame(this[scroll]);\n }\n\n /**\n * Drag stop handler. Cancels scroll animations and resets state\n * @private\n */\n [onDragStop]() {\n cancelAnimationFrame(this.scrollAnimationFrame);\n cancelAnimationFrame(this.findScrollableElementFrame);\n\n this.scrollableElement = null;\n this.scrollAnimationFrame = null;\n this.findScrollableElementFrame = null;\n this.currentMousePosition = null;\n }\n\n /**\n * Scroll function that does the heavylifting\n * @private\n */\n [scroll]() {\n if (!this.scrollableElement || !this.currentMousePosition) {\n return;\n }\n\n cancelAnimationFrame(this.scrollAnimationFrame);\n\n const { speed, sensitivity } = this.options;\n\n const rect = this.scrollableElement.getBoundingClientRect();\n const bottomCutOff = rect.bottom > window.innerHeight;\n const topCutOff = rect.top < 0;\n const cutOff = topCutOff || bottomCutOff;\n\n const documentScrollingElement = getDocumentScrollingElement();\n const scrollableElement = this.scrollableElement;\n const clientX = this.currentMousePosition.clientX;\n const clientY = this.currentMousePosition.clientY;\n\n if (scrollableElement !== document.body && scrollableElement !== document.documentElement && !cutOff) {\n const { offsetHeight, offsetWidth } = scrollableElement;\n\n if (rect.top + offsetHeight - clientY < sensitivity) {\n scrollableElement.scrollTop += speed;\n } else if (clientY - rect.top < sensitivity) {\n scrollableElement.scrollTop -= speed;\n }\n\n if (rect.left + offsetWidth - clientX < sensitivity) {\n scrollableElement.scrollLeft += speed;\n } else if (clientX - rect.left < sensitivity) {\n scrollableElement.scrollLeft -= speed;\n }\n } else {\n const { innerHeight, innerWidth } = window;\n\n if (clientY < sensitivity) {\n documentScrollingElement.scrollTop -= speed;\n } else if (innerHeight - clientY < sensitivity) {\n documentScrollingElement.scrollTop += speed;\n }\n\n if (clientX < sensitivity) {\n documentScrollingElement.scrollLeft -= speed;\n } else if (innerWidth - clientX < sensitivity) {\n documentScrollingElement.scrollLeft += speed;\n }\n }\n\n this.scrollAnimationFrame = requestAnimationFrame(this[scroll]);\n }\n}\n\nexports.default = Scrollable; /**\n * Returns true if the passed element has overflow\n * @param {HTMLElement} element\n * @return {Boolean}\n * @private\n */\n\nfunction hasOverflow(element) {\n const overflowRegex = /(auto|scroll)/;\n const computedStyles = getComputedStyle(element, null);\n\n const overflow = computedStyles.getPropertyValue('overflow') + computedStyles.getPropertyValue('overflow-y') + computedStyles.getPropertyValue('overflow-x');\n\n return overflowRegex.test(overflow);\n}\n\n/**\n * Returns true if the passed element is statically positioned\n * @param {HTMLElement} element\n * @return {Boolean}\n * @private\n */\nfunction isStaticallyPositioned(element) {\n const position = getComputedStyle(element).getPropertyValue('position');\n return position === 'static';\n}\n\n/**\n * Finds closest scrollable element\n * @param {HTMLElement} element\n * @return {HTMLElement}\n * @private\n */\nfunction closestScrollableElement(element) {\n if (!element) {\n return getDocumentScrollingElement();\n }\n\n const position = getComputedStyle(element).getPropertyValue('position');\n const excludeStaticParents = position === 'absolute';\n\n const scrollableElement = (0, _utils.closest)(element, parent => {\n if (excludeStaticParents && isStaticallyPositioned(parent)) {\n return false;\n }\n return hasOverflow(parent);\n });\n\n if (position === 'fixed' || !scrollableElement) {\n return getDocumentScrollingElement();\n } else {\n return scrollableElement;\n }\n}\n\n/**\n * Returns element that scrolls document\n * @return {HTMLElement}\n * @private\n */\nfunction getDocumentScrollingElement() {\n return document.scrollingElement || document.documentElement;\n}\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _Scrollable = __webpack_require__(52);\n\nvar _Scrollable2 = _interopRequireDefault(_Scrollable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Scrollable2.default;\nexports.defaultOptions = _Scrollable.defaultOptions;\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MirrorDestroyEvent = exports.MirrorMoveEvent = exports.MirrorAttachedEvent = exports.MirrorCreatedEvent = exports.MirrorCreateEvent = exports.MirrorEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base mirror event\n * @class MirrorEvent\n * @module MirrorEvent\n * @extends AbstractEvent\n */\nclass MirrorEvent extends _AbstractEvent2.default {\n /**\n * Draggables source element\n * @property source\n * @type {HTMLElement}\n * @readonly\n */\n get source() {\n return this.data.source;\n }\n\n /**\n * Draggables original source element\n * @property originalSource\n * @type {HTMLElement}\n * @readonly\n */\n get originalSource() {\n return this.data.originalSource;\n }\n\n /**\n * Draggables source container element\n * @property sourceContainer\n * @type {HTMLElement}\n * @readonly\n */\n get sourceContainer() {\n return this.data.sourceContainer;\n }\n\n /**\n * Sensor event\n * @property sensorEvent\n * @type {SensorEvent}\n * @readonly\n */\n get sensorEvent() {\n return this.data.sensorEvent;\n }\n\n /**\n * Drag event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n\n /**\n * Original event that triggered sensor event\n * @property originalEvent\n * @type {Event}\n * @readonly\n */\n get originalEvent() {\n if (this.sensorEvent) {\n return this.sensorEvent.originalEvent;\n }\n\n return null;\n }\n}\n\nexports.MirrorEvent = MirrorEvent; /**\n * Mirror create event\n * @class MirrorCreateEvent\n * @module MirrorCreateEvent\n * @extends MirrorEvent\n */\n\nclass MirrorCreateEvent extends MirrorEvent {}\n\nexports.MirrorCreateEvent = MirrorCreateEvent; /**\n * Mirror created event\n * @class MirrorCreatedEvent\n * @module MirrorCreatedEvent\n * @extends MirrorEvent\n */\n\nMirrorCreateEvent.type = 'mirror:create';\nclass MirrorCreatedEvent extends MirrorEvent {\n\n /**\n * Draggables mirror element\n * @property mirror\n * @type {HTMLElement}\n * @readonly\n */\n get mirror() {\n return this.data.mirror;\n }\n}\n\nexports.MirrorCreatedEvent = MirrorCreatedEvent; /**\n * Mirror attached event\n * @class MirrorAttachedEvent\n * @module MirrorAttachedEvent\n * @extends MirrorEvent\n */\n\nMirrorCreatedEvent.type = 'mirror:created';\nclass MirrorAttachedEvent extends MirrorEvent {\n\n /**\n * Draggables mirror element\n * @property mirror\n * @type {HTMLElement}\n * @readonly\n */\n get mirror() {\n return this.data.mirror;\n }\n}\n\nexports.MirrorAttachedEvent = MirrorAttachedEvent; /**\n * Mirror move event\n * @class MirrorMoveEvent\n * @module MirrorMoveEvent\n * @extends MirrorEvent\n */\n\nMirrorAttachedEvent.type = 'mirror:attached';\nclass MirrorMoveEvent extends MirrorEvent {\n\n /**\n * Draggables mirror element\n * @property mirror\n * @type {HTMLElement}\n * @readonly\n */\n get mirror() {\n return this.data.mirror;\n }\n}\n\nexports.MirrorMoveEvent = MirrorMoveEvent; /**\n * Mirror destroy event\n * @class MirrorDestroyEvent\n * @module MirrorDestroyEvent\n * @extends MirrorEvent\n */\n\nMirrorMoveEvent.type = 'mirror:move';\nMirrorMoveEvent.cancelable = true;\nclass MirrorDestroyEvent extends MirrorEvent {\n\n /**\n * Draggables mirror element\n * @property mirror\n * @type {HTMLElement}\n * @readonly\n */\n get mirror() {\n return this.data.mirror;\n }\n}\nexports.MirrorDestroyEvent = MirrorDestroyEvent;\nMirrorDestroyEvent.type = 'mirror:destroy';\nMirrorDestroyEvent.cancelable = true;\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _MirrorEvent = __webpack_require__(54);\n\nObject.keys(_MirrorEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _MirrorEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = exports.getAppendableContainer = exports.onScroll = exports.onMirrorMove = exports.onMirrorCreated = exports.onDragStop = exports.onDragMove = exports.onDragStart = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _MirrorEvent = __webpack_require__(55);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nconst onDragStart = exports.onDragStart = Symbol('onDragStart');\nconst onDragMove = exports.onDragMove = Symbol('onDragMove');\nconst onDragStop = exports.onDragStop = Symbol('onDragStop');\nconst onMirrorCreated = exports.onMirrorCreated = Symbol('onMirrorCreated');\nconst onMirrorMove = exports.onMirrorMove = Symbol('onMirrorMove');\nconst onScroll = exports.onScroll = Symbol('onScroll');\nconst getAppendableContainer = exports.getAppendableContainer = Symbol('getAppendableContainer');\n\n/**\n * Mirror default options\n * @property {Object} defaultOptions\n * @property {Boolean} defaultOptions.constrainDimensions\n * @property {Boolean} defaultOptions.xAxis\n * @property {Boolean} defaultOptions.yAxis\n * @property {null} defaultOptions.cursorOffsetX\n * @property {null} defaultOptions.cursorOffsetY\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n constrainDimensions: false,\n xAxis: true,\n yAxis: true,\n cursorOffsetX: null,\n cursorOffsetY: null\n};\n\n/**\n * Mirror plugin which controls the mirror positioning while dragging\n * @class Mirror\n * @module Mirror\n * @extends AbstractPlugin\n */\nclass Mirror extends _AbstractPlugin2.default {\n /**\n * Mirror constructor.\n * @constructs Mirror\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Mirror options\n * @property {Object} options\n * @property {Boolean} options.constrainDimensions\n * @property {Boolean} options.xAxis\n * @property {Boolean} options.yAxis\n * @property {Number|null} options.cursorOffsetX\n * @property {Number|null} options.cursorOffsetY\n * @property {String|HTMLElement|Function} options.appendTo\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * Scroll offset for touch devices because the mirror is positioned fixed\n * @property {Object} scrollOffset\n * @property {Number} scrollOffset.x\n * @property {Number} scrollOffset.y\n */\n this.scrollOffset = { x: 0, y: 0 };\n\n /**\n * Initial scroll offset for touch devices because the mirror is positioned fixed\n * @property {Object} scrollOffset\n * @property {Number} scrollOffset.x\n * @property {Number} scrollOffset.y\n */\n this.initialScrollOffset = {\n x: window.scrollX,\n y: window.scrollY\n };\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragMove] = this[onDragMove].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n this[onMirrorCreated] = this[onMirrorCreated].bind(this);\n this[onMirrorMove] = this[onMirrorMove].bind(this);\n this[onScroll] = this[onScroll].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('drag:start', this[onDragStart]).on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]).on('mirror:created', this[onMirrorCreated]).on('mirror:move', this[onMirrorMove]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('drag:start', this[onDragStart]).off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]).off('mirror:created', this[onMirrorCreated]).off('mirror:move', this[onMirrorMove]);\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.mirror || {};\n }\n\n [onDragStart](dragEvent) {\n if (dragEvent.canceled()) {\n return;\n }\n\n if ('ontouchstart' in window) {\n document.addEventListener('scroll', this[onScroll], true);\n }\n\n this.initialScrollOffset = {\n x: window.scrollX,\n y: window.scrollY\n };\n\n const { source, originalSource, sourceContainer, sensorEvent } = dragEvent;\n\n const mirrorCreateEvent = new _MirrorEvent.MirrorCreateEvent({\n source,\n originalSource,\n sourceContainer,\n sensorEvent,\n dragEvent\n });\n\n this.draggable.trigger(mirrorCreateEvent);\n\n if (isNativeDragEvent(sensorEvent) || mirrorCreateEvent.canceled()) {\n return;\n }\n\n const appendableContainer = this[getAppendableContainer](source) || sourceContainer;\n this.mirror = source.cloneNode(true);\n\n const mirrorCreatedEvent = new _MirrorEvent.MirrorCreatedEvent({\n source,\n originalSource,\n sourceContainer,\n sensorEvent,\n dragEvent,\n mirror: this.mirror\n });\n\n const mirrorAttachedEvent = new _MirrorEvent.MirrorAttachedEvent({\n source,\n originalSource,\n sourceContainer,\n sensorEvent,\n dragEvent,\n mirror: this.mirror\n });\n\n this.draggable.trigger(mirrorCreatedEvent);\n appendableContainer.appendChild(this.mirror);\n this.draggable.trigger(mirrorAttachedEvent);\n }\n\n [onDragMove](dragEvent) {\n if (!this.mirror || dragEvent.canceled()) {\n return;\n }\n\n const { source, originalSource, sourceContainer, sensorEvent } = dragEvent;\n\n const mirrorMoveEvent = new _MirrorEvent.MirrorMoveEvent({\n source,\n originalSource,\n sourceContainer,\n sensorEvent,\n dragEvent,\n mirror: this.mirror\n });\n\n this.draggable.trigger(mirrorMoveEvent);\n }\n\n [onDragStop](dragEvent) {\n if ('ontouchstart' in window) {\n document.removeEventListener('scroll', this[onScroll], true);\n }\n\n this.initialScrollOffset = { x: 0, y: 0 };\n this.scrollOffset = { x: 0, y: 0 };\n\n if (!this.mirror) {\n return;\n }\n\n const { source, sourceContainer, sensorEvent } = dragEvent;\n\n const mirrorDestroyEvent = new _MirrorEvent.MirrorDestroyEvent({\n source,\n mirror: this.mirror,\n sourceContainer,\n sensorEvent,\n dragEvent\n });\n\n this.draggable.trigger(mirrorDestroyEvent);\n\n if (!mirrorDestroyEvent.canceled()) {\n this.mirror.parentNode.removeChild(this.mirror);\n }\n }\n\n [onScroll]() {\n this.scrollOffset = {\n x: window.scrollX - this.initialScrollOffset.x,\n y: window.scrollY - this.initialScrollOffset.y\n };\n }\n\n /**\n * Mirror created handler\n * @param {MirrorCreatedEvent} mirrorEvent\n * @return {Promise}\n * @private\n */\n [onMirrorCreated]({ mirror, source, sensorEvent }) {\n const mirrorClass = this.draggable.getClassNameFor('mirror');\n\n const setState = (_ref) => {\n let { mirrorOffset, initialX, initialY } = _ref,\n args = _objectWithoutProperties(_ref, ['mirrorOffset', 'initialX', 'initialY']);\n\n this.mirrorOffset = mirrorOffset;\n this.initialX = initialX;\n this.initialY = initialY;\n return _extends({ mirrorOffset, initialX, initialY }, args);\n };\n\n const initialState = {\n mirror,\n source,\n sensorEvent,\n mirrorClass,\n scrollOffset: this.scrollOffset,\n options: this.options\n };\n\n return Promise.resolve(initialState)\n // Fix reflow here\n .then(computeMirrorDimensions).then(calculateMirrorOffset).then(resetMirror).then(addMirrorClasses).then(positionMirror({ initial: true })).then(removeMirrorID).then(setState);\n }\n\n /**\n * Mirror move handler\n * @param {MirrorMoveEvent} mirrorEvent\n * @return {Promise|null}\n * @private\n */\n [onMirrorMove](mirrorEvent) {\n if (mirrorEvent.canceled()) {\n return null;\n }\n\n const initialState = {\n mirror: mirrorEvent.mirror,\n sensorEvent: mirrorEvent.sensorEvent,\n mirrorOffset: this.mirrorOffset,\n options: this.options,\n initialX: this.initialX,\n initialY: this.initialY,\n scrollOffset: this.scrollOffset\n };\n\n return Promise.resolve(initialState).then(positionMirror({ raf: true }));\n }\n\n /**\n * Returns appendable container for mirror based on the appendTo option\n * @private\n * @param {Object} options\n * @param {HTMLElement} options.source - Current source\n * @return {HTMLElement}\n */\n [getAppendableContainer](source) {\n const appendTo = this.options.appendTo;\n\n if (typeof appendTo === 'string') {\n return document.querySelector(appendTo);\n } else if (appendTo instanceof HTMLElement) {\n return appendTo;\n } else if (typeof appendTo === 'function') {\n return appendTo(source);\n } else {\n return source.parentNode;\n }\n }\n}\n\nexports.default = Mirror; /**\n * Computes mirror dimensions based on the source element\n * Adds sourceRect to state\n * @param {Object} state\n * @param {HTMLElement} state.source\n * @return {Promise}\n * @private\n */\n\nfunction computeMirrorDimensions(_ref2) {\n let { source } = _ref2,\n args = _objectWithoutProperties(_ref2, ['source']);\n\n return withPromise(resolve => {\n const sourceRect = source.getBoundingClientRect();\n resolve(_extends({ source, sourceRect }, args));\n });\n}\n\n/**\n * Calculates mirror offset\n * Adds mirrorOffset to state\n * @param {Object} state\n * @param {SensorEvent} state.sensorEvent\n * @param {DOMRect} state.sourceRect\n * @return {Promise}\n * @private\n */\nfunction calculateMirrorOffset(_ref3) {\n let { sensorEvent, sourceRect, options } = _ref3,\n args = _objectWithoutProperties(_ref3, ['sensorEvent', 'sourceRect', 'options']);\n\n return withPromise(resolve => {\n const top = options.cursorOffsetY === null ? sensorEvent.clientY - sourceRect.top : options.cursorOffsetY;\n const left = options.cursorOffsetX === null ? sensorEvent.clientX - sourceRect.left : options.cursorOffsetX;\n\n const mirrorOffset = { top, left };\n\n resolve(_extends({ sensorEvent, sourceRect, mirrorOffset, options }, args));\n });\n}\n\n/**\n * Applys mirror styles\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @param {HTMLElement} state.source\n * @param {Object} state.options\n * @return {Promise}\n * @private\n */\nfunction resetMirror(_ref4) {\n let { mirror, source, options } = _ref4,\n args = _objectWithoutProperties(_ref4, ['mirror', 'source', 'options']);\n\n return withPromise(resolve => {\n let offsetHeight;\n let offsetWidth;\n\n if (options.constrainDimensions) {\n const computedSourceStyles = getComputedStyle(source);\n offsetHeight = computedSourceStyles.getPropertyValue('height');\n offsetWidth = computedSourceStyles.getPropertyValue('width');\n }\n\n mirror.style.position = 'fixed';\n mirror.style.pointerEvents = 'none';\n mirror.style.top = 0;\n mirror.style.left = 0;\n mirror.style.margin = 0;\n\n if (options.constrainDimensions) {\n mirror.style.height = offsetHeight;\n mirror.style.width = offsetWidth;\n }\n\n resolve(_extends({ mirror, source, options }, args));\n });\n}\n\n/**\n * Applys mirror class on mirror element\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @param {String} state.mirrorClass\n * @return {Promise}\n * @private\n */\nfunction addMirrorClasses(_ref5) {\n let { mirror, mirrorClass } = _ref5,\n args = _objectWithoutProperties(_ref5, ['mirror', 'mirrorClass']);\n\n return withPromise(resolve => {\n mirror.classList.add(mirrorClass);\n resolve(_extends({ mirror, mirrorClass }, args));\n });\n}\n\n/**\n * Removes source ID from cloned mirror element\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @return {Promise}\n * @private\n */\nfunction removeMirrorID(_ref6) {\n let { mirror } = _ref6,\n args = _objectWithoutProperties(_ref6, ['mirror']);\n\n return withPromise(resolve => {\n mirror.removeAttribute('id');\n delete mirror.id;\n resolve(_extends({ mirror }, args));\n });\n}\n\n/**\n * Positions mirror with translate3d\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @param {SensorEvent} state.sensorEvent\n * @param {Object} state.mirrorOffset\n * @param {Number} state.initialY\n * @param {Number} state.initialX\n * @param {Object} state.options\n * @return {Promise}\n * @private\n */\nfunction positionMirror({ withFrame = false, initial = false } = {}) {\n return (_ref7) => {\n let { mirror, sensorEvent, mirrorOffset, initialY, initialX, scrollOffset, options } = _ref7,\n args = _objectWithoutProperties(_ref7, ['mirror', 'sensorEvent', 'mirrorOffset', 'initialY', 'initialX', 'scrollOffset', 'options']);\n\n return withPromise(resolve => {\n const result = _extends({\n mirror,\n sensorEvent,\n mirrorOffset,\n options\n }, args);\n\n if (mirrorOffset) {\n const x = sensorEvent.clientX - mirrorOffset.left - scrollOffset.x;\n const y = sensorEvent.clientY - mirrorOffset.top - scrollOffset.y;\n\n if (options.xAxis && options.yAxis || initial) {\n mirror.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n } else if (options.xAxis && !options.yAxis) {\n mirror.style.transform = `translate3d(${x}px, ${initialY}px, 0)`;\n } else if (options.yAxis && !options.xAxis) {\n mirror.style.transform = `translate3d(${initialX}px, ${y}px, 0)`;\n }\n\n if (initial) {\n result.initialX = x;\n result.initialY = y;\n }\n }\n\n resolve(result);\n }, { frame: withFrame });\n };\n}\n\n/**\n * Wraps functions in promise with potential animation frame option\n * @param {Function} callback\n * @param {Object} options\n * @param {Boolean} options.raf\n * @return {Promise}\n * @private\n */\nfunction withPromise(callback, { raf = false } = {}) {\n return new Promise((resolve, reject) => {\n if (raf) {\n requestAnimationFrame(() => {\n callback(resolve, reject);\n });\n } else {\n callback(resolve, reject);\n }\n });\n}\n\n/**\n * Returns true if the sensor event was triggered by a native browser drag event\n * @param {SensorEvent} sensorEvent\n */\nfunction isNativeDragEvent(sensorEvent) {\n return (/^drag/.test(sensorEvent.originalEvent.type)\n );\n}\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _Mirror = __webpack_require__(56);\n\nvar _Mirror2 = _interopRequireDefault(_Mirror);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Mirror2.default;\nexports.defaultOptions = _Mirror.defaultOptions;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onInitialize = Symbol('onInitialize');\nconst onDestroy = Symbol('onDestroy');\n\n/**\n * Focusable default options\n * @property {Object} defaultOptions\n * @type {Object}\n */\nconst defaultOptions = {};\n\n/**\n * Focusable plugin\n * @class Focusable\n * @module Focusable\n * @extends AbstractPlugin\n */\nclass Focusable extends _AbstractPlugin2.default {\n /**\n * Focusable constructor.\n * @constructs Focusable\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Focusable options\n * @property {Object} options\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n this[onInitialize] = this[onInitialize].bind(this);\n this[onDestroy] = this[onDestroy].bind(this);\n }\n\n /**\n * Attaches listeners to draggable\n */\n attach() {\n this.draggable.on('draggable:initialize', this[onInitialize]).on('draggable:destroy', this[onDestroy]);\n }\n\n /**\n * Detaches listeners from draggable\n */\n detach() {\n this.draggable.off('draggable:initialize', this[onInitialize]).off('draggable:destroy', this[onDestroy]);\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.focusable || {};\n }\n\n /**\n * Returns draggable containers and elements\n * @return {HTMLElement[]}\n */\n getElements() {\n return [...this.draggable.containers, ...this.draggable.getDraggableElements()];\n }\n\n /**\n * Intialize handler\n * @private\n */\n [onInitialize]() {\n // Can wait until the next best frame is available\n requestAnimationFrame(() => {\n this.getElements().forEach(element => decorateElement(element));\n });\n }\n\n /**\n * Destroy handler\n * @private\n */\n [onDestroy]() {\n // Can wait until the next best frame is available\n requestAnimationFrame(() => {\n this.getElements().forEach(element => stripElement(element));\n });\n }\n}\n\nexports.default = Focusable; /**\n * Keeps track of all the elements that are missing tabindex attributes\n * so they can be reset when draggable gets destroyed\n * @const {HTMLElement[]} elementsWithMissingTabIndex\n */\n\nconst elementsWithMissingTabIndex = [];\n\n/**\n * Decorates element with tabindex attributes\n * @param {HTMLElement} element\n * @return {Object}\n * @private\n */\nfunction decorateElement(element) {\n const hasMissingTabIndex = Boolean(!element.getAttribute('tabindex') && element.tabIndex === -1);\n\n if (hasMissingTabIndex) {\n elementsWithMissingTabIndex.push(element);\n element.tabIndex = 0;\n }\n}\n\n/**\n * Removes elements tabindex attributes\n * @param {HTMLElement} element\n * @private\n */\nfunction stripElement(element) {\n const tabIndexElementPosition = elementsWithMissingTabIndex.indexOf(element);\n\n if (tabIndexElementPosition !== -1) {\n element.tabIndex = -1;\n elementsWithMissingTabIndex.splice(tabIndexElementPosition, 1);\n }\n}\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Focusable = __webpack_require__(58);\n\nvar _Focusable2 = _interopRequireDefault(_Focusable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Focusable2.default;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * All draggable plugins inherit from this class.\n * @abstract\n * @class AbstractPlugin\n * @module AbstractPlugin\n */\nclass AbstractPlugin {\n /**\n * AbstractPlugin constructor.\n * @constructs AbstractPlugin\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n /**\n * Draggable instance\n * @property draggable\n * @type {Draggable}\n */\n this.draggable = draggable;\n }\n\n /**\n * Override to add listeners\n * @abstract\n */\n attach() {\n throw new Error('Not Implemented');\n }\n\n /**\n * Override to remove listeners\n * @abstract\n */\n detach() {\n throw new Error('Not Implemented');\n }\n}\nexports.default = AbstractPlugin;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onInitialize = Symbol('onInitialize');\nconst onDestroy = Symbol('onDestroy');\nconst announceEvent = Symbol('announceEvent');\nconst announceMessage = Symbol('announceMessage');\n\nconst ARIA_RELEVANT = 'aria-relevant';\nconst ARIA_ATOMIC = 'aria-atomic';\nconst ARIA_LIVE = 'aria-live';\nconst ROLE = 'role';\n\n/**\n * Announcement default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.expire\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n expire: 7000\n};\n\n/**\n * Announcement plugin\n * @class Announcement\n * @module Announcement\n * @extends AbstractPlugin\n */\nclass Announcement extends _AbstractPlugin2.default {\n /**\n * Announcement constructor.\n * @constructs Announcement\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Plugin options\n * @property options\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * Original draggable trigger method. Hack until we have onAll or on('all')\n * @property originalTriggerMethod\n * @type {Function}\n */\n this.originalTriggerMethod = this.draggable.trigger;\n\n this[onInitialize] = this[onInitialize].bind(this);\n this[onDestroy] = this[onDestroy].bind(this);\n }\n\n /**\n * Attaches listeners to draggable\n */\n attach() {\n this.draggable.on('draggable:initialize', this[onInitialize]);\n }\n\n /**\n * Detaches listeners from draggable\n */\n detach() {\n this.draggable.off('draggable:destroy', this[onDestroy]);\n }\n\n /**\n * Returns passed in options\n */\n getOptions() {\n return this.draggable.options.announcements || {};\n }\n\n /**\n * Announces event\n * @private\n * @param {AbstractEvent} event\n */\n [announceEvent](event) {\n const message = this.options[event.type];\n\n if (message && typeof message === 'string') {\n this[announceMessage](message);\n }\n\n if (message && typeof message === 'function') {\n this[announceMessage](message(event));\n }\n }\n\n /**\n * Announces message to screen reader\n * @private\n * @param {String} message\n */\n [announceMessage](message) {\n announce(message, { expire: this.options.expire });\n }\n\n /**\n * Initialize hander\n * @private\n */\n [onInitialize]() {\n // Hack until there is an api for listening for all events\n this.draggable.trigger = event => {\n try {\n this[announceEvent](event);\n } finally {\n // Ensure that original trigger is called\n this.originalTriggerMethod.call(this.draggable, event);\n }\n };\n }\n\n /**\n * Destroy hander\n * @private\n */\n [onDestroy]() {\n this.draggable.trigger = this.originalTriggerMethod;\n }\n}\n\nexports.default = Announcement; /**\n * @const {HTMLElement} liveRegion\n */\n\nconst liveRegion = createRegion();\n\n/**\n * Announces message via live region\n * @param {String} message\n * @param {Object} options\n * @param {Number} options.expire\n */\nfunction announce(message, { expire }) {\n const element = document.createElement('div');\n\n element.textContent = message;\n liveRegion.appendChild(element);\n\n return setTimeout(() => {\n liveRegion.removeChild(element);\n }, expire);\n}\n\n/**\n * Creates region element\n * @return {HTMLElement}\n */\nfunction createRegion() {\n const element = document.createElement('div');\n\n element.setAttribute('id', 'draggable-live-region');\n element.setAttribute(ARIA_RELEVANT, 'additions');\n element.setAttribute(ARIA_ATOMIC, 'true');\n element.setAttribute(ARIA_LIVE, 'assertive');\n element.setAttribute(ROLE, 'log');\n\n element.style.position = 'fixed';\n element.style.width = '1px';\n element.style.height = '1px';\n element.style.top = '-1px';\n element.style.overflow = 'hidden';\n\n return element;\n}\n\n// Append live region element as early as possible\ndocument.addEventListener('DOMContentLoaded', () => {\n document.body.appendChild(liveRegion);\n});\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _Announcement = __webpack_require__(61);\n\nvar _Announcement2 = _interopRequireDefault(_Announcement);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Announcement2.default;\nexports.defaultOptions = _Announcement.defaultOptions;\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DraggableDestroyEvent = exports.DraggableInitializedEvent = exports.DraggableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base draggable event\n * @class DraggableEvent\n * @module DraggableEvent\n * @extends AbstractEvent\n */\nclass DraggableEvent extends _AbstractEvent2.default {\n\n /**\n * Draggable instance\n * @property draggable\n * @type {Draggable}\n * @readonly\n */\n get draggable() {\n return this.data.draggable;\n }\n}\n\nexports.DraggableEvent = DraggableEvent; /**\n * Draggable initialized event\n * @class DraggableInitializedEvent\n * @module DraggableInitializedEvent\n * @extends DraggableEvent\n */\n\nDraggableEvent.type = 'draggable';\nclass DraggableInitializedEvent extends DraggableEvent {}\n\nexports.DraggableInitializedEvent = DraggableInitializedEvent; /**\n * Draggable destory event\n * @class DraggableInitializedEvent\n * @module DraggableDestroyEvent\n * @extends DraggableDestroyEvent\n */\n\nDraggableInitializedEvent.type = 'draggable:initialize';\nclass DraggableDestroyEvent extends DraggableEvent {}\nexports.DraggableDestroyEvent = DraggableDestroyEvent;\nDraggableDestroyEvent.type = 'draggable:destroy';\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nconst canceled = Symbol('canceled');\n\n/**\n * All events fired by draggable inherit this class. You can call `cancel()` to\n * cancel a specific event or you can check if an event has been canceled by\n * calling `canceled()`.\n * @abstract\n * @class AbstractEvent\n * @module AbstractEvent\n */\nclass AbstractEvent {\n\n /**\n * AbstractEvent constructor.\n * @constructs AbstractEvent\n * @param {object} data - Event data\n */\n\n /**\n * Event type\n * @static\n * @abstract\n * @property type\n * @type {String}\n */\n constructor(data) {\n this[canceled] = false;\n this.data = data;\n }\n\n /**\n * Read-only type\n * @abstract\n * @return {String}\n */\n\n\n /**\n * Event cancelable\n * @static\n * @abstract\n * @property cancelable\n * @type {Boolean}\n */\n get type() {\n return this.constructor.type;\n }\n\n /**\n * Read-only cancelable\n * @abstract\n * @return {Boolean}\n */\n get cancelable() {\n return this.constructor.cancelable;\n }\n\n /**\n * Cancels the event instance\n * @abstract\n */\n cancel() {\n this[canceled] = true;\n }\n\n /**\n * Check if event has been canceled\n * @abstract\n * @return {Boolean}\n */\n canceled() {\n return Boolean(this[canceled]);\n }\n\n /**\n * Returns new event instance with existing event data.\n * This method allows for overriding of event data.\n * @param {Object} data\n * @return {AbstractEvent}\n */\n clone(data) {\n return new this.constructor(_extends({}, this.data, data));\n }\n}\nexports.default = AbstractEvent;\nAbstractEvent.type = 'event';\nAbstractEvent.cancelable = false;\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DragStopEvent = exports.DragPressureEvent = exports.DragOutContainerEvent = exports.DragOverContainerEvent = exports.DragOutEvent = exports.DragOverEvent = exports.DragMoveEvent = exports.DragStartEvent = exports.DragEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base drag event\n * @class DragEvent\n * @module DragEvent\n * @extends AbstractEvent\n */\nclass DragEvent extends _AbstractEvent2.default {\n\n /**\n * Draggables source element\n * @property source\n * @type {HTMLElement}\n * @readonly\n */\n get source() {\n return this.data.source;\n }\n\n /**\n * Draggables original source element\n * @property originalSource\n * @type {HTMLElement}\n * @readonly\n */\n get originalSource() {\n return this.data.originalSource;\n }\n\n /**\n * Draggables mirror element\n * @property mirror\n * @type {HTMLElement}\n * @readonly\n */\n get mirror() {\n return this.data.mirror;\n }\n\n /**\n * Draggables source container element\n * @property sourceContainer\n * @type {HTMLElement}\n * @readonly\n */\n get sourceContainer() {\n return this.data.sourceContainer;\n }\n\n /**\n * Sensor event\n * @property sensorEvent\n * @type {SensorEvent}\n * @readonly\n */\n get sensorEvent() {\n return this.data.sensorEvent;\n }\n\n /**\n * Original event that triggered sensor event\n * @property originalEvent\n * @type {Event}\n * @readonly\n */\n get originalEvent() {\n if (this.sensorEvent) {\n return this.sensorEvent.originalEvent;\n }\n\n return null;\n }\n}\n\nexports.DragEvent = DragEvent; /**\n * Drag start event\n * @class DragStartEvent\n * @module DragStartEvent\n * @extends DragEvent\n */\n\nDragEvent.type = 'drag';\nclass DragStartEvent extends DragEvent {}\n\nexports.DragStartEvent = DragStartEvent; /**\n * Drag move event\n * @class DragMoveEvent\n * @module DragMoveEvent\n * @extends DragEvent\n */\n\nDragStartEvent.type = 'drag:start';\nDragStartEvent.cancelable = true;\nclass DragMoveEvent extends DragEvent {}\n\nexports.DragMoveEvent = DragMoveEvent; /**\n * Drag over event\n * @class DragOverEvent\n * @module DragOverEvent\n * @extends DragEvent\n */\n\nDragMoveEvent.type = 'drag:move';\nclass DragOverEvent extends DragEvent {\n\n /**\n * Draggable container you are over\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.overContainer;\n }\n\n /**\n * Draggable element you are over\n * @property over\n * @type {HTMLElement}\n * @readonly\n */\n get over() {\n return this.data.over;\n }\n}\n\nexports.DragOverEvent = DragOverEvent; /**\n * Drag out event\n * @class DragOutEvent\n * @module DragOutEvent\n * @extends DragEvent\n */\n\nDragOverEvent.type = 'drag:over';\nDragOverEvent.cancelable = true;\nclass DragOutEvent extends DragEvent {\n\n /**\n * Draggable container you are over\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.overContainer;\n }\n\n /**\n * Draggable element you left\n * @property over\n * @type {HTMLElement}\n * @readonly\n */\n get over() {\n return this.data.over;\n }\n}\n\nexports.DragOutEvent = DragOutEvent; /**\n * Drag over container event\n * @class DragOverContainerEvent\n * @module DragOverContainerEvent\n * @extends DragEvent\n */\n\nDragOutEvent.type = 'drag:out';\nclass DragOverContainerEvent extends DragEvent {\n\n /**\n * Draggable container you are over\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.overContainer;\n }\n}\n\nexports.DragOverContainerEvent = DragOverContainerEvent; /**\n * Drag out container event\n * @class DragOutContainerEvent\n * @module DragOutContainerEvent\n * @extends DragEvent\n */\n\nDragOverContainerEvent.type = 'drag:over:container';\nclass DragOutContainerEvent extends DragEvent {\n\n /**\n * Draggable container you left\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.overContainer;\n }\n}\n\nexports.DragOutContainerEvent = DragOutContainerEvent; /**\n * Drag pressure event\n * @class DragPressureEvent\n * @module DragPressureEvent\n * @extends DragEvent\n */\n\nDragOutContainerEvent.type = 'drag:out:container';\nclass DragPressureEvent extends DragEvent {\n\n /**\n * Pressure applied on draggable element\n * @property pressure\n * @type {Number}\n * @readonly\n */\n get pressure() {\n return this.data.pressure;\n }\n}\n\nexports.DragPressureEvent = DragPressureEvent; /**\n * Drag stop event\n * @class DragStopEvent\n * @module DragStopEvent\n * @extends DragEvent\n */\n\nDragPressureEvent.type = 'drag:pressure';\nclass DragStopEvent extends DragEvent {}\nexports.DragStopEvent = DragStopEvent;\nDragStopEvent.type = 'drag:stop';\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Plugins = exports.Sensors = exports.Sortable = exports.Swappable = exports.Droppable = exports.Draggable = exports.BasePlugin = exports.BaseEvent = undefined;\n\nvar _Draggable = __webpack_require__(5);\n\nObject.defineProperty(exports, 'Draggable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Draggable).default;\n }\n});\n\nvar _Droppable = __webpack_require__(34);\n\nObject.defineProperty(exports, 'Droppable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Droppable).default;\n }\n});\n\nvar _Swappable = __webpack_require__(31);\n\nObject.defineProperty(exports, 'Swappable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Swappable).default;\n }\n});\n\nvar _Sortable = __webpack_require__(28);\n\nObject.defineProperty(exports, 'Sortable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Sortable).default;\n }\n});\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _Sensors = __webpack_require__(6);\n\nvar Sensors = _interopRequireWildcard(_Sensors);\n\nvar _Plugins = __webpack_require__(25);\n\nvar Plugins = _interopRequireWildcard(_Plugins);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.BaseEvent = _AbstractEvent2.default;\nexports.BasePlugin = _AbstractPlugin2.default;\nexports.Sensors = Sensors;\nexports.Plugins = Plugins;\n\n/***/ })\n/******/ ]);\n});"],"sourceRoot":""}