{"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","_AbstractPlugin","_AbstractPlugin2","_interopRequireDefault","obj","default","_AbstractEvent","_AbstractEvent2","_closest","_requestNextAnimationFrame","_distance","_touchCoords","_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","onSortableSort","duration","easingFunction","SortAnimation","draggable","super","this","options","getOptions","lastAnimationFrame","lastElements","on","off","sortAnimation","dragEvent","sourceContainer","elements","getDraggableElementsForContainer","Array","from","map","el","domEl","offsetTop","offsetLeft","oldIndex","newIndex","effectedElements","start","end","num","to","push","cancelAnimationFrame","requestAnimationFrame","element","animate","x","y","style","pointerEvents","transform","addEventListener","resetElementOnTransitionEnd","transition","event","removeEventListener","_SortAnimation","_SortAnimation2","horizontal","SwapAnimation","swapAnimation","over","width","offsetWidth","height","offsetHeight","_SwapAnimation","_SwapAnimation2","onDragStart","onDragStop","onDragOver","onDragOut","onMirrorCreated","onMirrorDestroy","Snappable","firstSource","mirror","canceled","snapInEvent","SnapInEvent","snappable","droppable","trigger","display","classList","remove","getClassNamesFor","add","setTimeout","placedTimeout","snapOutEvent","SnapOutEvent","SnapEvent","data","type","cancelable","_Snappable","_Snappable2","_utils","resize","ResizeMirror","lastWidth","lastHeight","resizeMirror","overContainer","parentNode","appendChild","overElement","requestNextAnimationFrame","overRect","getBoundingClientRect","_ResizeMirror","_ResizeMirror2","onDragMove","onRequestAnimationFrame","Collidable","currentlyCollidingElement","lastCollidingElement","currentAnimationFrame","collidables","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","getSortableElementsForContainer","indexOf","container","allSortableElements","filter","childElement","originalSource","index","sortableStartEvent","SortableStartEvent","sortableSortEvent","SortableSortEvent","currentIndex","children","moves","move","oldContainer","newContainer","sortableSortedEvent","SortableSortedEvent","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","getClassNameFor","overEmptyDropzone","droppableStopEvent","DroppableStopEvent","occupiedClasses","droppableDroppedEvent","DroppableDroppedEvent","droppableReturnedEvent","DroppableReturnedEvent","DroppableEvent","_Droppable","_Droppable2","Emitter","callbacks","copy","splice","caughtErrors","error","console","_Emitter","_Emitter2","onDragPressure","handle","delay","distance","plugins","sensors","exclude","Draggable","body","Error","emitter","dragging","defaultPlugins","values","Plugins","Plugin","defaultSensors","Sensors","sensor","addPlugin","addSensor","draggableInitializedEvent","DraggableInitializedEvent","draggableDestroyEvent","DraggableDestroyEvent","removePlugin","plugin","constructor","removeSensor","activePlugins","attach","removedPlugins","detach","activeSensors","Sensor","removedSensors","addContainer","removeContainer","classNames","String","reduce","current","allDraggableElements","getSensorEvent","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","dragStoppedEvent","DragStoppedEvent","originalEvent","dragPressureEvent","DragPressureEvent","pressure","webkitUserSelect","mozUserSelect","msUserSelect","oUserSelect","userSelect","Announcement","Focusable","Mirror","Scrollable","MouseSensor","TouchSensor","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","startEvent","form","contenteditable","drag","_DragSensor2","onTouchStart","onTouchEnd","onTouchMove","startDrag","onDistanceChange","preventScrolling","passive","currentScrollableParent","tapTimeout","touchMoved","pageX","pageY","touchCoords","onTouchStartAt","Date","now","onContextMenu","touches","touch","timeElapsed","distanceTravelled","scrollX","scrollY","_TouchSensor2","SensorEvent","onContextMenuWhileDragging","button","ctrlKey","metaKey","onMouseDownAt","preventNativeDragStart","mouse","_MouseSensor2","defaultDealy","calcDelay","createEvent","initEvent","dispatchEvent","lastEvent","optionsDelay","changedTouches","_touchCoords2","x1","y1","x2","y2","Math","sqrt","_distance2","_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","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","passedThreshX","passedThreshY","_MirrorEvent","getAppendableContainer","onScroll","onMirrorMove","_objectWithoutProperties","constrainDimensions","xAxis","yAxis","cursorOffsetX","cursorOffsetY","thresholdX","thresholdY","initialScrollOffset","lastMirrorMovedClient","mirrorCreateEvent","isNativeDragEvent","appendableContainer","mirrorCreatedEvent","mirrorAttachedEvent","lastX","lastY","abs","mirrorMoveEvent","mirrorDestroyEvent","mirrorClasses","setState","_ref","mirrorOffset","initialX","initialY","args","lastMovedX","lastMovedY","initialState","Promise","resolve","then","computeMirrorDimensions","calculateMirrorOffset","resetMirror","addMirrorClasses","positionMirror","initial","removeMirrorID","mirrorEvent","_ref2","raf","appendTo","querySelector","_ref3","withPromise","sourceRect","_ref4","_ref5","computedSourceStyles","margin","_ref6","_ref7","removeAttribute","withFrame","_ref8","result","round","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","BasePlugin","BaseEvent","_interopRequireWildcard","newObj"],"mappings":"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","file":"js/chunk-2d0c15b5.538ece1c.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 = 72);\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 _AbstractPlugin = __webpack_require__(66);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _AbstractPlugin2.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 _AbstractEvent = __webpack_require__(70);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _AbstractEvent2.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__(57);\n\nObject.defineProperty(exports, 'closest', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_closest).default;\n }\n});\n\nvar _requestNextAnimationFrame = __webpack_require__(55);\n\nObject.defineProperty(exports, 'requestNextAnimationFrame', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_requestNextAnimationFrame).default;\n }\n});\n\nvar _distance = __webpack_require__(53);\n\nObject.defineProperty(exports, 'distance', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_distance).default;\n }\n});\n\nvar _touchCoords = __webpack_require__(51);\n\nObject.defineProperty(exports, 'touchCoords', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_touchCoords).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__(46);\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__(49);\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__(39);\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__(48);\n\nObject.defineProperty(exports, 'MouseSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_MouseSensor).default;\n }\n});\n\nvar _TouchSensor = __webpack_require__(45);\n\nObject.defineProperty(exports, 'TouchSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_TouchSensor).default;\n }\n});\n\nvar _DragSensor = __webpack_require__(43);\n\nObject.defineProperty(exports, 'DragSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_DragSensor).default;\n }\n});\n\nvar _ForceTouchSensor = __webpack_require__(41);\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__(20);\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__(25);\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__(29);\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__(32);\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__(35);\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__(68);\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__(65);\n\nObject.defineProperty(exports, 'Focusable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Focusable).default;\n }\n});\n\nvar _Mirror = __webpack_require__(63);\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__(59);\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__(69);\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__(71);\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__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onSortableSorted = Symbol('onSortableSorted');\nconst onSortableSort = Symbol('onSortableSort');\n\n/**\n * SortAnimation default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.duration\n * @property {String} defaultOptions.easingFunction\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n duration: 150,\n easingFunction: 'ease-in-out'\n};\n\n/**\n * SortAnimation plugin adds sort animation for sortable\n * @class SortAnimation\n * @module SortAnimation\n * @extends AbstractPlugin\n */\nclass SortAnimation extends _AbstractPlugin2.default {\n /**\n * SortAnimation constructor.\n * @constructs SortAnimation\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * SortAnimation 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 this.lastElements = [];\n\n this[onSortableSorted] = this[onSortableSorted].bind(this);\n this[onSortableSort] = this[onSortableSort].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('sortable:sort', this[onSortableSort]);\n this.draggable.on('sortable:sorted', this[onSortableSorted]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('sortable:sort', this[onSortableSort]);\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.sortAnimation || {};\n }\n\n /**\n * Sortable sort handler\n * @param {SortableSortEvent} sortableEvent\n * @private\n */\n [onSortableSort]({ dragEvent }) {\n const { sourceContainer } = dragEvent;\n const elements = this.draggable.getDraggableElementsForContainer(sourceContainer);\n this.lastElements = Array.from(elements).map(el => {\n return {\n domEl: el,\n offsetTop: el.offsetTop,\n offsetLeft: el.offsetLeft\n };\n });\n }\n\n /**\n * Sortable sorted handler\n * @param {SortableSortedEvent} sortableEvent\n * @private\n */\n [onSortableSorted]({ oldIndex, newIndex }) {\n if (oldIndex === newIndex) {\n return;\n }\n\n const effectedElements = [];\n let start;\n let end;\n let num;\n if (oldIndex > newIndex) {\n start = newIndex;\n end = oldIndex - 1;\n num = 1;\n } else {\n start = oldIndex + 1;\n end = newIndex;\n num = -1;\n }\n\n for (let i = start; i <= end; i++) {\n const from = this.lastElements[i];\n const to = this.lastElements[i + num];\n effectedElements.push({ from, to });\n }\n cancelAnimationFrame(this.lastAnimationFrame);\n\n // Can be done in a separate frame\n this.lastAnimationFrame = requestAnimationFrame(() => {\n effectedElements.forEach(element => animate(element, this.options));\n });\n }\n}\n\nexports.default = SortAnimation; /**\n * Animates two elements\n * @param {Object} element\n * @param {Object} element.from\n * @param {Object} element.to\n * @param {Object} options\n * @param {Number} options.duration\n * @param {String} options.easingFunction\n * @private\n */\n\nfunction animate({ from, to }, { duration, easingFunction }) {\n const domEl = from.domEl;\n const x = from.offsetLeft - to.offsetLeft;\n const y = from.offsetTop - to.offsetTop;\n\n domEl.style.pointerEvents = 'none';\n domEl.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n\n requestAnimationFrame(() => {\n domEl.addEventListener('transitionend', resetElementOnTransitionEnd);\n domEl.style.transition = `transform ${duration}ms ${easingFunction}`;\n domEl.style.transform = '';\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 _SortAnimation = __webpack_require__(15);\n\nvar _SortAnimation2 = _interopRequireDefault(_SortAnimation);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _SortAnimation2.default;\nexports.defaultOptions = _SortAnimation.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});\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__(0);\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/* 18 */\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__(17);\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/* 19 */\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__(0);\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.getClassNamesFor('source:dragging'));\n source.classList.add(...this.draggable.getClassNamesFor('source:placed'));\n\n // Need to cancel this in drag out\n setTimeout(() => {\n source.classList.remove(...this.draggable.getClassNamesFor('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.getClassNamesFor('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/* 20 */\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__(1);\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/* 21 */\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__(19);\n\nvar _Snappable2 = _interopRequireDefault(_Snappable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Snappable2.default;\n\n/***/ }),\n/* 22 */\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__(0);\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) {\n return;\n }\n\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/* 23 */\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__(22);\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/* 24 */\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__(0);\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/* 25 */\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__(1);\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/* 26 */\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__(24);\n\nvar _Collidable2 = _interopRequireDefault(_Collidable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Collidable2.default;\n\n/***/ }),\n/* 27 */\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__(26);\n\nObject.defineProperty(exports, 'Collidable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Collidable).default;\n }\n});\n\nvar _ResizeMirror = __webpack_require__(23);\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__(21);\n\nObject.defineProperty(exports, 'Snappable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Snappable).default;\n }\n});\n\nvar _SwapAnimation = __webpack_require__(18);\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\nvar _SortAnimation = __webpack_require__(16);\n\nObject.defineProperty(exports, 'SortAnimation', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_SortAnimation).default;\n }\n});\nObject.defineProperty(exports, 'defaultSortAnimationOptions', {\n enumerable: true,\n get: function () {\n return _SortAnimation.defaultOptions;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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 _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.getSortableElementsForContainer(element.parentNode).indexOf(element);\n }\n\n /**\n * Returns sortable elements for a given container, excluding the mirror and\n * original source element if present\n * @param {HTMLElement} container\n * @return {HTMLElement[]}\n */\n getSortableElementsForContainer(container) {\n const allSortableElements = container.querySelectorAll(this.options.draggable);\n\n return [...allSortableElements].filter(childElement => {\n return childElement !== this.originalSource && childElement !== this.mirror && childElement.parentNode === container;\n });\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.getSortableElementsForContainer(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 && source.parentNode === over.parentNode;\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/* 29 */\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__(1);\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.over;\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.dragEvent.overContainer;\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/* 30 */\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__(28);\n\nvar _Sortable2 = _interopRequireDefault(_Sortable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Sortable2.default;\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 _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/* 32 */\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__(1);\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/* 33 */\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__(31);\n\nvar _Swappable2 = _interopRequireDefault(_Swappable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Swappable2.default;\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 _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.getClassNamesFor('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 occupiedClasses = this.getClassNamesFor('droppable:occupied');\n\n for (const dropzone of this.dropzones) {\n dropzone.classList.remove(...this.getClassNamesFor('droppable:active'));\n }\n\n if (this.lastDropzone && this.lastDropzone !== this.initialDropzone) {\n this.initialDropzone.classList.remove(...occupiedClasses);\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 occupiedClasses = this.getClassNamesFor('droppable:occupied');\n\n if (this.lastDropzone) {\n this.lastDropzone.classList.remove(...occupiedClasses);\n }\n\n dropzone.appendChild(event.source);\n dropzone.classList.add(...occupiedClasses);\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.getClassNamesFor('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/* 35 */\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__(1);\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/* 36 */\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__(34);\n\nvar _Droppable2 = _interopRequireDefault(_Droppable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Droppable2.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});\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/* 38 */\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__(37);\n\nvar _Emitter2 = _interopRequireDefault(_Emitter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Emitter2.default;\n\n/***/ }),\n/* 39 */\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__(38);\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: {},\n distance: 0,\n placedTimeout: 800,\n plugins: [],\n sensors: [],\n exclude: {\n plugins: [],\n sensors: []\n }\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\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 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 exclude: {\n plugins: options.exclude && options.exclude.plugins || [],\n sensors: options.exclude && options.exclude.sensors || []\n }\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).filter(Plugin => !this.options.exclude.plugins.includes(Plugin));\n const defaultSensors = Object.values(Draggable.Sensors).filter(sensor => !this.options.exclude.sensors.includes(sensor));\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 /**\n * Default sensors draggable uses\n * @static\n * @property {Object} Sensors\n * @property {MouseSensor} Sensors.MouseSensor\n * @property {TouchSensor} Sensors.TouchSensor\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.getClassNamesFor(name)[0];\n }\n\n /**\n * Returns class names for class identifier\n * @return {String[]}\n */\n getClassNamesFor(name) {\n const classNames = this.options.classes[name];\n\n if (classNames instanceof Array) {\n return classNames;\n } else if (typeof classNames === 'string' || classNames instanceof String) {\n return [classNames];\n } else {\n return [];\n }\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.getClassNamesFor('source:placed'));\n this.lastPlacedContainer.classList.remove(...this.getClassNamesFor('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.getClassNamesFor('source:original'));\n this.source.classList.add(...this.getClassNamesFor('source:dragging'));\n this.sourceContainer.classList.add(...this.getClassNamesFor('container:dragging'));\n document.body.classList.add(...this.getClassNamesFor('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 overContainer: this.currentOverContainer\n });\n\n this.currentOver.classList.remove(...this.getClassNamesFor('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.getClassNamesFor('container:over'));\n this.currentOverContainer = null;\n\n this.trigger(dragOutContainerEvent);\n }\n\n if (isOverContainer) {\n overContainer.classList.add(...this.getClassNamesFor('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.getClassNamesFor('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.getClassNamesFor('source:dragging'));\n this.originalSource.classList.remove(...this.getClassNamesFor('source:original'));\n this.originalSource.classList.add(...this.getClassNamesFor('source:placed'));\n this.sourceContainer.classList.add(...this.getClassNamesFor('container:placed'));\n this.sourceContainer.classList.remove(...this.getClassNamesFor('container:dragging'));\n document.body.classList.remove(...this.getClassNamesFor('body:dragging'));\n applyUserSelect(document.body, '');\n\n if (this.currentOver) {\n this.currentOver.classList.remove(...this.getClassNamesFor('draggable:over'));\n }\n\n if (this.currentOverContainer) {\n this.currentOverContainer.classList.remove(...this.getClassNamesFor('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.getClassNamesFor('source:placed'));\n }\n\n if (this.lastPlacedContainer) {\n this.lastPlacedContainer.classList.remove(...this.getClassNamesFor('container:placed'));\n }\n\n this.lastPlacedSource = null;\n this.lastPlacedContainer = null;\n }, this.options.placedTimeout);\n\n const dragStoppedEvent = new _DragEvent.DragStoppedEvent({\n source: this.source,\n originalSource: this.originalSource,\n sensorEvent: event.sensorEvent,\n sourceContainer: this.sourceContainer\n });\n\n this.trigger(dragStoppedEvent);\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 };\nDraggable.Sensors = { MouseSensor: _Sensors.MouseSensor, TouchSensor: _Sensors.TouchSensor };\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/* 40 */\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/* 41 */\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__(40);\n\nvar _ForceTouchSensor2 = _interopRequireDefault(_ForceTouchSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _ForceTouchSensor2.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 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 this.startEvent = null;\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.startEvent = event;\n\n this.mouseDownTimeout = setTimeout(() => {\n target.draggable = true;\n this.draggableElement = target;\n }, this.delay.drag);\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/* 43 */\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__(42);\n\nvar _DragSensor2 = _interopRequireDefault(_DragSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _DragSensor2.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});\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 onTouchEnd = Symbol('onTouchEnd');\nconst onTouchMove = Symbol('onTouchMove');\nconst startDrag = Symbol('startDrag');\nconst onDistanceChange = Symbol('onDistanceChange');\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 managing delay\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 /**\n * Save pageX coordinates for delay drag\n * @property {Numbre} pageX\n * @private\n */\n this.pageX = null;\n\n /**\n * Save pageY coordinates for delay drag\n * @property {Numbre} pageY\n * @private\n */\n this.pageY = null;\n\n this[onTouchStart] = this[onTouchStart].bind(this);\n this[onTouchEnd] = this[onTouchEnd].bind(this);\n this[onTouchMove] = this[onTouchMove].bind(this);\n this[startDrag] = this[startDrag].bind(this);\n this[onDistanceChange] = this[onDistanceChange].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 const { distance = 0 } = this.options;\n const { delay } = this;\n const { pageX, pageY } = (0, _utils.touchCoords)(event);\n\n Object.assign(this, { pageX, pageY });\n this.onTouchStartAt = Date.now();\n this.startEvent = event;\n this.currentContainer = container;\n\n document.addEventListener('touchend', this[onTouchEnd]);\n document.addEventListener('touchcancel', this[onTouchEnd]);\n document.addEventListener('touchmove', this[onDistanceChange]);\n container.addEventListener('contextmenu', onContextMenu);\n\n if (distance) {\n preventScrolling = true;\n }\n\n this.tapTimeout = window.setTimeout(() => {\n this[onDistanceChange]({ touches: [{ pageX: this.pageX, pageY: this.pageY }] });\n }, delay.touch);\n }\n\n /**\n * Start the drag\n * @private\n */\n [startDrag]() {\n const startEvent = this.startEvent;\n const container = this.currentContainer;\n const touch = (0, _utils.touchCoords)(startEvent);\n\n const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n clientX: touch.pageX,\n clientY: touch.pageY,\n target: startEvent.target,\n container,\n originalEvent: startEvent\n });\n\n this.trigger(this.currentContainer, dragStartEvent);\n\n this.dragging = !dragStartEvent.canceled();\n\n if (this.dragging) {\n document.addEventListener('touchmove', this[onTouchMove]);\n }\n preventScrolling = this.dragging;\n }\n\n /**\n * Touch move handler prior to drag start.\n * @private\n * @param {Event} event - Touch move event\n */\n [onDistanceChange](event) {\n const { distance } = this.options;\n const { startEvent, delay } = this;\n const start = (0, _utils.touchCoords)(startEvent);\n const current = (0, _utils.touchCoords)(event);\n const timeElapsed = Date.now() - this.onTouchStartAt;\n const distanceTravelled = (0, _utils.distance)(start.pageX, start.pageY, current.pageX, current.pageY);\n\n Object.assign(this, current);\n\n clearTimeout(this.tapTimeout);\n\n if (timeElapsed < delay.touch) {\n // moved during delay\n document.removeEventListener('touchmove', this[onDistanceChange]);\n } else if (distanceTravelled >= distance) {\n document.removeEventListener('touchmove', this[onDistanceChange]);\n this[startDrag]();\n }\n }\n\n /**\n * Mouse move handler while dragging\n * @private\n * @param {Event} event - Touch move event\n */\n [onTouchMove](event) {\n if (!this.dragging) {\n return;\n }\n const { pageX, pageY } = (0, _utils.touchCoords)(event);\n const target = document.elementFromPoint(pageX - window.scrollX, pageY - window.scrollY);\n\n const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n clientX: pageX,\n clientY: 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 clearTimeout(this.tapTimeout);\n preventScrolling = false;\n\n document.removeEventListener('touchend', this[onTouchEnd]);\n document.removeEventListener('touchcancel', this[onTouchEnd]);\n document.removeEventListener('touchmove', this[onDistanceChange]);\n\n if (this.currentContainer) {\n this.currentContainer.removeEventListener('contextmenu', onContextMenu);\n }\n\n if (!this.dragging) {\n return;\n }\n\n document.removeEventListener('touchmove', this[onTouchMove]);\n\n const { pageX, pageY } = (0, _utils.touchCoords)(event);\n const target = document.elementFromPoint(pageX - window.scrollX, pageY - window.scrollY);\n\n event.preventDefault();\n\n const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n clientX: pageX,\n clientY: 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 this.startEvent = null;\n }\n}\n\nexports.default = TouchSensor;\nfunction onContextMenu(event) {\n event.preventDefault();\n event.stopPropagation();\n}\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 _TouchSensor = __webpack_require__(44);\n\nvar _TouchSensor2 = _interopRequireDefault(_TouchSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _TouchSensor2.default;\n\n/***/ }),\n/* 46 */\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__(1);\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/* 47 */\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');\nconst startDrag = Symbol('startDrag');\nconst onDistanceChange = Symbol('onDistanceChange');\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 * 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 * Save pageX coordinates for delay drag\n * @property {Numbre} pageX\n * @private\n */\n this.pageX = null;\n\n /**\n * Save pageY coordinates for delay drag\n * @property {Numbre} pageY\n * @private\n */\n this.pageY = null;\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 this[startDrag] = this[startDrag].bind(this);\n this[onDistanceChange] = this[onDistanceChange].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 const container = (0, _utils.closest)(event.target, this.containers);\n\n if (!container) {\n return;\n }\n\n const { delay } = this;\n const { pageX, pageY } = event;\n\n Object.assign(this, { pageX, pageY });\n this.onMouseDownAt = Date.now();\n this.startEvent = event;\n\n this.currentContainer = container;\n document.addEventListener('mouseup', this[onMouseUp]);\n document.addEventListener('dragstart', preventNativeDragStart);\n document.addEventListener('mousemove', this[onDistanceChange]);\n\n this.mouseDownTimeout = window.setTimeout(() => {\n this[onDistanceChange]({ pageX: this.pageX, pageY: this.pageY });\n }, delay.mouse);\n }\n\n /**\n * Start the drag\n * @private\n */\n [startDrag]() {\n const startEvent = this.startEvent;\n const container = this.currentContainer;\n\n const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n clientX: startEvent.clientX,\n clientY: startEvent.clientY,\n target: startEvent.target,\n container,\n originalEvent: startEvent\n });\n\n this.trigger(this.currentContainer, dragStartEvent);\n\n this.dragging = !dragStartEvent.canceled();\n\n if (this.dragging) {\n document.addEventListener('contextmenu', this[onContextMenuWhileDragging], true);\n document.addEventListener('mousemove', this[onMouseMove]);\n }\n }\n\n /**\n * Detect change in distance, starting drag when both\n * delay and distance requirements are met\n * @private\n * @param {Event} event - Mouse move event\n */\n [onDistanceChange](event) {\n const { pageX, pageY } = event;\n const { distance } = this.options;\n const { startEvent, delay } = this;\n\n Object.assign(this, { pageX, pageY });\n\n if (!this.currentContainer) {\n return;\n }\n\n const timeElapsed = Date.now() - this.onMouseDownAt;\n const distanceTravelled = (0, _utils.distance)(startEvent.pageX, startEvent.pageY, pageX, pageY) || 0;\n\n clearTimeout(this.mouseDownTimeout);\n\n if (timeElapsed < delay.mouse) {\n // moved during delay\n document.removeEventListener('mousemove', this[onDistanceChange]);\n } else if (distanceTravelled >= distance) {\n document.removeEventListener('mousemove', this[onDistanceChange]);\n this[startDrag]();\n }\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 clearTimeout(this.mouseDownTimeout);\n\n if (event.button !== 0) {\n return;\n }\n\n document.removeEventListener('mouseup', this[onMouseUp]);\n document.removeEventListener('dragstart', preventNativeDragStart);\n document.removeEventListener('mousemove', this[onDistanceChange]);\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], true);\n document.removeEventListener('mousemove', this[onMouseMove]);\n\n this.currentContainer = null;\n this.dragging = false;\n this.startEvent = null;\n }\n\n /**\n * Context menu handler\n * @private\n * @param {Event} event - Context menu event\n */\n [onContextMenuWhileDragging](event) {\n event.preventDefault();\n }\n}\n\nexports.default = MouseSensor;\nfunction preventNativeDragStart(event) {\n event.preventDefault();\n}\n\n/***/ }),\n/* 48 */\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__(47);\n\nvar _MouseSensor2 = _interopRequireDefault(_MouseSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _MouseSensor2.default;\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 _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 defaultDealy = {\n mouse: 0,\n drag: 0,\n touch: 100\n};\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 * The event of the initial sensor down\n * @property startEvent\n * @type {Event}\n */\n this.startEvent = null;\n\n /**\n * The delay of each sensor\n * @property delay\n * @type {Object}\n */\n this.delay = calcDelay(options.delay);\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}\n\nexports.default = Sensor; /**\n * Calculate the delay of each sensor through the delay in the options\n * @param {undefined|Number|Object} optionsDelay - the delay in the options\n * @return {Object}\n */\n\nfunction calcDelay(optionsDelay) {\n const delay = {};\n\n if (optionsDelay === undefined) {\n return _extends({}, defaultDealy);\n }\n\n if (typeof optionsDelay === 'number') {\n for (const key in defaultDealy) {\n if (defaultDealy.hasOwnProperty(key)) {\n delay[key] = optionsDelay;\n }\n }\n return delay;\n }\n\n for (const key in defaultDealy) {\n if (defaultDealy.hasOwnProperty(key)) {\n if (optionsDelay[key] === undefined) {\n delay[key] = defaultDealy[key];\n } else {\n delay[key] = optionsDelay[key];\n }\n }\n }\n\n return delay;\n}\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 = touchCoords;\n/**\n * Returns the first touch event found in touches or changedTouches of a touch events.\n * @param {TouchEvent} event a touch event\n * @return {Touch} a touch object\n */\nfunction touchCoords(event = {}) {\n const { touches, changedTouches } = event;\n return touches && touches[0] || changedTouches && changedTouches[0];\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 _touchCoords = __webpack_require__(50);\n\nvar _touchCoords2 = _interopRequireDefault(_touchCoords);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _touchCoords2.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.default = distance;\n/**\n * Returns the distance between two points\n * @param {Number} x1 The X position of the first point\n * @param {Number} y1 The Y position of the first point\n * @param {Number} x2 The X position of the second point\n * @param {Number} y2 The Y position of the second point\n * @return {Number}\n */\nfunction distance(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\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});\n\nvar _distance = __webpack_require__(52);\n\nvar _distance2 = _interopRequireDefault(_distance);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _distance2.default;\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.default = requestNextAnimationFrame;\nfunction requestNextAnimationFrame(callback) {\n return requestAnimationFrame(() => {\n requestAnimationFrame(callback);\n });\n}\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 _requestNextAnimationFrame = __webpack_require__(54);\n\nvar _requestNextAnimationFrame2 = _interopRequireDefault(_requestNextAnimationFrame);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _requestNextAnimationFrame2.default;\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.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/* 57 */\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__(56);\n\nvar _closest2 = _interopRequireDefault(_closest);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _closest2.default;\n\n/***/ }),\n/* 58 */\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__(0);\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/* 59 */\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__(58);\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/* 60 */\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__(1);\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 /**\n * Sensor has exceeded mirror's threshold on x axis\n * @type {Boolean}\n * @readonly\n */\n get passedThreshX() {\n return this.data.passedThreshX;\n }\n\n /**\n * Sensor has exceeded mirror's threshold on y axis\n * @type {Boolean}\n * @readonly\n */\n get passedThreshY() {\n return this.data.passedThreshY;\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/* 61 */\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__(60);\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/* 62 */\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__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _MirrorEvent = __webpack_require__(61);\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 thresholdX: null,\n thresholdY: 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 // Last sensor position of mirror move\n this.lastMirrorMovedClient = {\n x: sensorEvent.clientX,\n y: sensorEvent.clientY\n };\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 let passedThreshX = true;\n let passedThreshY = true;\n\n if (this.options.thresholdX || this.options.thresholdY) {\n const { x: lastX, y: lastY } = this.lastMirrorMovedClient;\n\n if (Math.abs(lastX - sensorEvent.clientX) < this.options.thresholdX) {\n passedThreshX = false;\n } else {\n this.lastMirrorMovedClient.x = sensorEvent.clientX;\n }\n\n if (Math.abs(lastY - sensorEvent.clientY) < this.options.thresholdY) {\n passedThreshY = false;\n } else {\n this.lastMirrorMovedClient.y = sensorEvent.clientY;\n }\n\n if (!passedThreshX && !passedThreshY) {\n return;\n }\n }\n\n const mirrorMoveEvent = new _MirrorEvent.MirrorMoveEvent({\n source,\n originalSource,\n sourceContainer,\n sensorEvent,\n dragEvent,\n mirror: this.mirror,\n passedThreshX,\n passedThreshY\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 mirrorClasses = this.draggable.getClassNamesFor('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 this.lastMovedX = initialX;\n this.lastMovedY = initialY;\n return _extends({ mirrorOffset, initialX, initialY }, args);\n };\n\n mirror.style.display = 'none';\n\n const initialState = {\n mirror,\n source,\n sensorEvent,\n mirrorClasses,\n scrollOffset: this.scrollOffset,\n options: this.options,\n passedThreshX: true,\n passedThreshY: true\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 setState = (_ref2) => {\n let { lastMovedX, lastMovedY } = _ref2,\n args = _objectWithoutProperties(_ref2, ['lastMovedX', 'lastMovedY']);\n\n this.lastMovedX = lastMovedX;\n this.lastMovedY = lastMovedY;\n\n return _extends({ lastMovedX, lastMovedY }, args);\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 passedThreshX: mirrorEvent.passedThreshX,\n passedThreshY: mirrorEvent.passedThreshY,\n lastMovedX: this.lastMovedX,\n lastMovedY: this.lastMovedY\n };\n\n return Promise.resolve(initialState).then(positionMirror({ raf: true })).then(setState);\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(_ref3) {\n let { source } = _ref3,\n args = _objectWithoutProperties(_ref3, ['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(_ref4) {\n let { sensorEvent, sourceRect, options } = _ref4,\n args = _objectWithoutProperties(_ref4, ['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(_ref5) {\n let { mirror, source, options } = _ref5,\n args = _objectWithoutProperties(_ref5, ['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.display = null;\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.mirrorClasses\n * @return {Promise}\n * @private\n */\nfunction addMirrorClasses(_ref6) {\n let { mirror, mirrorClasses } = _ref6,\n args = _objectWithoutProperties(_ref6, ['mirror', 'mirrorClasses']);\n\n return withPromise(resolve => {\n mirror.classList.add(...mirrorClasses);\n resolve(_extends({ mirror, mirrorClasses }, 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(_ref7) {\n let { mirror } = _ref7,\n args = _objectWithoutProperties(_ref7, ['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 (_ref8) => {\n let {\n mirror,\n sensorEvent,\n mirrorOffset,\n initialY,\n initialX,\n scrollOffset,\n options,\n passedThreshX,\n passedThreshY,\n lastMovedX,\n lastMovedY\n } = _ref8,\n args = _objectWithoutProperties(_ref8, ['mirror', 'sensorEvent', 'mirrorOffset', 'initialY', 'initialX', 'scrollOffset', 'options', 'passedThreshX', 'passedThreshY', 'lastMovedX', 'lastMovedY']);\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 = passedThreshX ? Math.round((sensorEvent.clientX - mirrorOffset.left - scrollOffset.x) / (options.thresholdX || 1)) * (options.thresholdX || 1) : Math.round(lastMovedX);\n const y = passedThreshY ? Math.round((sensorEvent.clientY - mirrorOffset.top - scrollOffset.y) / (options.thresholdY || 1)) * (options.thresholdY || 1) : Math.round(lastMovedY);\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 result.lastMovedX = x;\n result.lastMovedY = y;\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/* 63 */\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__(62);\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/* 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\nvar _AbstractPlugin = __webpack_require__(0);\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 // Remove modified elements when detach\n 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/* 65 */\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__(64);\n\nvar _Focusable2 = _interopRequireDefault(_Focusable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Focusable2.default;\n\n/***/ }),\n/* 66 */\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/* 67 */\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__(0);\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/* 68 */\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__(67);\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/* 69 */\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__(1);\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/* 70 */\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/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DragStoppedEvent = exports.DragStopEvent = exports.DragPressureEvent = exports.DragOutContainerEvent = exports.DragOverContainerEvent = exports.DragOutEvent = exports.DragOverEvent = exports.DragMoveEvent = exports.DragStartEvent = exports.DragEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(1);\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 {}\n\nexports.DragStopEvent = DragStopEvent; /**\n * Drag stopped event\n * @class DragStoppedEvent\n * @module DragStoppedEvent\n * @extends DragEvent\n */\n\nDragStopEvent.type = 'drag:stop';\nclass DragStoppedEvent extends DragEvent {}\nexports.DragStoppedEvent = DragStoppedEvent;\nDragStoppedEvent.type = 'drag:stopped';\n\n/***/ }),\n/* 72 */\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__(36);\n\nObject.defineProperty(exports, 'Droppable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Droppable).default;\n }\n});\n\nvar _Swappable = __webpack_require__(33);\n\nObject.defineProperty(exports, 'Swappable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Swappable).default;\n }\n});\n\nvar _Sortable = __webpack_require__(30);\n\nObject.defineProperty(exports, 'Sortable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Sortable).default;\n }\n});\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _Sensors = __webpack_require__(6);\n\nvar Sensors = _interopRequireWildcard(_Sensors);\n\nvar _Plugins = __webpack_require__(27);\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":""}