{"version":3,"file":"sortable.umd.js","sources":["../../utils/src/browser-info.ts","../../utils/src/utils.ts","../../sortable/src/PluginManager.ts","../../sortable/src/EventDispatcher.ts","../../sortable/src/Sortable.ts","../../plugins/swap/src/index.ts","../../sortable/src/Animation.ts","../../plugins/multi-drag/src/index.ts","../../plugins/on-spill/src/index.ts","../../plugins/auto-scroll/src/index.ts","../src/umd.ts"],"sourcesContent":["function userAgent(pattern) {\n if (typeof window !== \"undefined\" && window.navigator) {\n return !!(/*@__PURE__*/ navigator.userAgent.match(pattern));\n }\n}\n\nexport const IE11OrLess = userAgent(\n /(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i\n);\nexport const Edge = userAgent(/Edge/i);\nexport const FireFox = userAgent(/firefox/i);\nexport const Safari =\n userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nexport const IOS = userAgent(/iP(ad|od|hone)/i);\nexport const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n","import { IE11OrLess } from \"./browser-info\";\nimport Sortable from \"../../sortable/src/Sortable\";\n\nconst captureMode = {\n capture: false,\n passive: false,\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(/**HTMLElement*/ el, /**String*/ selector) {\n if (!selector) return;\n\n selector[0] === \">\" && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType\n ? el.host\n : el.parentNode;\n}\n\nfunction closest(\n /**HTMLElement*/ el,\n /**String*/ selector,\n /**HTMLElement*/ ctx,\n includeCTX\n) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (\n (selector != null &&\n (selector[0] === \">\"\n ? el.parentNode === ctx && matches(el, selector)\n : matches(el, selector))) ||\n (includeCTX && el === ctx)\n ) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while ((el = getParentOrHost(el)));\n }\n\n return null;\n}\n\nconst R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? \"add\" : \"remove\"](name);\n } else {\n let className = (\" \" + el.className + \" \")\n .replace(R_SPACE, \" \")\n .replace(\" \" + name + \" \", \" \");\n el.className = (className + (state ? \" \" + name : \"\")).replace(\n R_SPACE,\n \" \"\n );\n }\n }\n}\n\nfunction css(el, prop, val) {\n let style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, \"\");\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf(\"webkit\") === -1) {\n prop = \"-webkit-\" + prop;\n }\n\n style[prop] = val + (typeof val === \"string\" ? \"\" : \"px\");\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n let appliedTransforms = \"\";\n if (typeof el === \"string\") {\n appliedTransforms = el;\n } else {\n do {\n //@ts-ignore\n let transform = css(el, \"transform\");\n\n if (transform && transform !== \"none\") {\n appliedTransforms = transform + \" \" + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n\n const matrixFn =\n window.DOMMatrix ||\n window.WebKitCSSMatrix ||\n //@ts-ignore\n window.CSSMatrix ||\n //@ts-ignore\n window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n let list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n let scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\nfunction getRect(\n el,\n relativeToContainingBlock,\n relativeToNonStaticParent,\n undoScale,\n container\n) {\n if (!el.getBoundingClientRect && el !== window) return;\n\n let elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if (\n (relativeToContainingBlock || relativeToNonStaticParent) &&\n el !== window\n ) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (\n container &&\n container.getBoundingClientRect &&\n //@ts-ignore\n (css(container, \"transform\") !== \"none\" ||\n (relativeToNonStaticParent &&\n //@ts-ignore\n css(container, \"position\") !== \"static\"))\n ) {\n let containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -=\n //@ts-ignore\n containerRect.top + parseInt(css(container, \"border-top-width\"));\n left -=\n //@ts-ignore\n containerRect.left + parseInt(css(container, \"border-left-width\"));\n bottom = top + elRect.height;\n right = left + elRect.width;\n\n break;\n }\n /* jshint boss:true */\n } while ((container = container.parentNode));\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n //@ts-ignore\n let elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n\n width /= scaleX;\n height /= scaleY;\n\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height,\n };\n}\n\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n let parent = getParentAutoScrollElement(el, true),\n //@ts-ignore\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n //@ts-ignore\n let parentSideVal = getRect(parent)[parentSide],\n visible;\n\n if (parentSide === \"top\" || parentSide === \"left\") {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n\n if (parent === getWindowScrollingElement()) break;\n\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\nfunction getChild(el, childNum, options) {\n let currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (\n children[i].style.display !== \"none\" &&\n //@ts-ignore\n children[i] !== Sortable.ghost &&\n //@ts-ignore\n children[i] !== Sortable.dragged &&\n closest(children[i], options.draggable, el, false)\n ) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n\n i++;\n }\n return null;\n}\n\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\nfunction lastChild(el, selector) {\n let last = el.lastElementChild;\n\n while (\n last &&\n //@ts-ignore\n (last === Sortable.ghost ||\n //@ts-ignore\n css(last, \"display\") === \"none\" ||\n (selector && !matches(last, selector)))\n ) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\nfunction index(el, selector) {\n let index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while ((el = el.previousElementSibling)) {\n if (\n el.nodeName.toUpperCase() !== \"TEMPLATE\" &&\n //@ts-ignore\n el !== Sortable.clone &&\n (!selector || matches(el, selector))\n ) {\n index++;\n }\n }\n\n return index;\n}\n\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\nfunction getRelativeScrollOffset(el) {\n let offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n //@ts-ignore\n let elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\nfunction indexOfObject(arr, obj) {\n for (let i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (let key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n\n let elem = el;\n let gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (\n elem.clientWidth < elem.scrollWidth ||\n elem.clientHeight < elem.scrollHeight\n ) {\n //@ts-ignore\n let elemCSS = css(elem);\n if (\n (elem.clientWidth < elem.scrollWidth &&\n (elemCSS.overflowX == \"auto\" || elemCSS.overflowX == \"scroll\")) ||\n (elem.clientHeight < elem.scrollHeight &&\n (elemCSS.overflowY == \"auto\" || elemCSS.overflowY == \"scroll\"))\n ) {\n if (!elem.getBoundingClientRect || elem === document.body)\n return getWindowScrollingElement();\n\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while ((elem = elem.parentNode));\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return (\n Math.round(rect1.top) === Math.round(rect2.top) &&\n Math.round(rect1.left) === Math.round(rect2.left) &&\n Math.round(rect1.height) === Math.round(rect2.height) &&\n Math.round(rect1.width) === Math.round(rect2.width)\n );\n}\n\nlet _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n let args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n //@ts-ignore\n let Polymer = window.Polymer;\n //@ts-ignore\n let $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, \"position\", \"absolute\");\n css(el, \"top\", rect.top);\n css(el, \"left\", rect.left);\n css(el, \"width\", rect.width);\n css(el, \"height\", rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, \"position\", \"\");\n css(el, \"top\", \"\");\n css(el, \"left\", \"\");\n css(el, \"width\", \"\");\n css(el, \"height\", \"\");\n}\n\nconst expando = \"Sortable\" + new Date().getTime();\n\nexport {\n on,\n off,\n matches,\n getParentOrHost,\n closest,\n toggleClass,\n css,\n matrix,\n find,\n getWindowScrollingElement,\n getRect,\n isScrolledPast,\n getChild,\n lastChild,\n index,\n getRelativeScrollOffset,\n indexOfObject,\n getParentAutoScrollElement,\n extend,\n isRectEqual,\n throttle,\n cancelThrottle,\n scrollBy,\n clone,\n setRect,\n unsetRect,\n expando,\n};\n","let plugins = [];\n\nconst defaults = {\n initializeByDefault: true,\n};\n\nconst pluginManager = {\n mount(plugin) {\n // Set default static properties\n for (let option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.push(plugin);\n },\n pluginEvent(eventName, sortable, evt) {\n this.eventCanceled = false;\n evt.cancel = () => {\n this.eventCanceled = true;\n };\n const eventNameGlobal = eventName + \"Global\";\n plugins.forEach((plugin) => {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal]({ sortable, ...evt });\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (\n sortable.options[plugin.pluginName] &&\n sortable[plugin.pluginName][eventName]\n ) {\n sortable[plugin.pluginName][eventName]({ sortable, ...evt });\n }\n });\n },\n initializePlugins(sortable, el, defaults, options) {\n plugins.forEach((plugin) => {\n const pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n\n let initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n Object.assign(defaults, initialized.defaults);\n });\n\n for (let option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n let modified = this.modifyOption(\n sortable,\n option,\n sortable.options[option]\n );\n if (typeof modified !== \"undefined\") {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties(name, sortable) {\n let eventProperties = {};\n plugins.forEach((plugin) => {\n if (typeof plugin.eventProperties !== \"function\") return;\n Object.assign(\n eventProperties,\n plugin.eventProperties.call(sortable[plugin.pluginName], name)\n );\n });\n\n return eventProperties;\n },\n modifyOption(sortable, name, value) {\n let modifiedValue;\n plugins.forEach((plugin) => {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (\n plugin.optionListeners &&\n typeof plugin.optionListeners[name] === \"function\"\n ) {\n modifiedValue = plugin.optionListeners[name].call(\n sortable[plugin.pluginName],\n value\n );\n }\n });\n\n return modifiedValue;\n },\n};\n\nexport default pluginManager;\n","import { expando, IE11OrLess, Edge } from \"../../utils/src\";\nimport PluginManager from \"./PluginManager\";\n\nexport default function dispatchEvent({\n sortable,\n rootEl,\n name,\n targetEl,\n cloneEl,\n toEl,\n fromEl,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n originalEvent,\n putSortable,\n extraEventProperties,\n}) {\n sortable = sortable || (rootEl && rootEl[expando]);\n if (!sortable) return;\n\n let evt,\n options = sortable.options,\n onName = \"on\" + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n });\n } else {\n evt = document.createEvent(\"Event\");\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n let allEventProperties = {\n ...extraEventProperties,\n ...PluginManager.getEventProperties(name, sortable),\n };\n for (let option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n","import { version } from \"../package.json\";\nimport AnimationStateManager from \"./Animation\";\nimport PluginManager from \"./PluginManager\";\nimport dispatchEvent from \"./EventDispatcher\";\n/**\n * @todo import as namespace: import * as utils from \"../../utils/src\"\n */\nimport {\n on,\n off,\n closest,\n toggleClass,\n css,\n matrix,\n find,\n getWindowScrollingElement,\n getRect,\n isScrolledPast,\n getChild,\n lastChild,\n index,\n getRelativeScrollOffset,\n extend,\n throttle,\n scrollBy,\n clone,\n expando,\n IE11OrLess,\n Edge,\n FireFox,\n Safari,\n IOS,\n ChromeForAndroid,\n} from \"../../utils/src\";\n\nlet pluginEvent = function (\n eventName,\n sortable,\n //@ts-ignore\n { evt: originalEvent, ...data } = {}\n) {\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, {\n dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n dragStarted: moved,\n putSortable,\n //@ts-ignore\n activeSortable: Sortable.active,\n originalEvent,\n\n oldIndex,\n oldDraggableIndex,\n newIndex,\n newDraggableIndex,\n\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n\n cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown() {\n cloneHidden = false;\n },\n\n dispatchSortableEvent(name) {\n _dispatchEvent({ sortable, name, originalEvent });\n },\n\n ...data,\n });\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent({\n putSortable,\n cloneEl,\n targetEl: dragEl,\n rootEl,\n oldIndex,\n oldDraggableIndex,\n newIndex,\n newDraggableIndex,\n ...info,\n });\n}\n\nlet dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [], // (left, top)\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nconst documentExists = typeof document !== \"undefined\",\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? \"cssFloat\" : \"float\",\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable =\n documentExists &&\n !ChromeForAndroid &&\n !IOS &&\n \"draggable\" in document.createElement(\"div\"),\n supportCssPointerEvents = (function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n let el = document.createElement(\"x\");\n el.style.cssText = \"pointer-events:auto\";\n return el.style.pointerEvents === \"auto\";\n })(),\n _detectDirection = function (el, options) {\n //@ts-ignore\n let elCSS = css(el),\n elWidth =\n parseInt(elCSS.width) -\n parseInt(elCSS.paddingLeft) -\n parseInt(elCSS.paddingRight) -\n parseInt(elCSS.borderLeftWidth) -\n parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n //@ts-ignore\n firstChildCSS = child1 && css(child1),\n //@ts-ignore\n secondChildCSS = child2 && css(child2),\n firstChildWidth =\n firstChildCSS &&\n parseInt(firstChildCSS.marginLeft) +\n parseInt(firstChildCSS.marginRight) +\n //@ts-ignore\n getRect(child1).width,\n secondChildWidth =\n secondChildCSS &&\n parseInt(secondChildCSS.marginLeft) +\n parseInt(secondChildCSS.marginRight) +\n //@ts-ignore\n getRect(child2).width;\n\n if (elCSS.display === \"flex\") {\n return elCSS.flexDirection === \"column\" ||\n elCSS.flexDirection === \"column-reverse\"\n ? \"vertical\"\n : \"horizontal\";\n }\n\n if (elCSS.display === \"grid\") {\n return elCSS.gridTemplateColumns.split(\" \").length <= 1\n ? \"vertical\"\n : \"horizontal\";\n }\n\n if (child1 && firstChildCSS.float && firstChildCSS.float !== \"none\") {\n let touchingSideChild2 =\n firstChildCSS.float === \"left\" ? \"left\" : \"right\";\n\n return child2 &&\n (secondChildCSS.clear === \"both\" ||\n secondChildCSS.clear === touchingSideChild2)\n ? \"vertical\"\n : \"horizontal\";\n }\n\n return child1 &&\n (firstChildCSS.display === \"block\" ||\n firstChildCSS.display === \"flex\" ||\n firstChildCSS.display === \"table\" ||\n firstChildCSS.display === \"grid\" ||\n (firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === \"none\") ||\n (child2 &&\n elCSS[CSSFloatProperty] === \"none\" &&\n firstChildWidth + secondChildWidth > elWidth))\n ? \"vertical\"\n : \"horizontal\";\n },\n _dragElInRowColumn = function (dragRect, targetRect, vertical) {\n let dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n\n return (\n dragElS1Opp === targetS1Opp ||\n dragElS2Opp === targetS2Opp ||\n dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2\n );\n },\n /**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n _detectNearestEmptySortable = function (x, y) {\n let ret;\n sortables.some((sortable) => {\n //@ts-ignore\n if (lastChild(sortable)) return;\n\n //@ts-ignore\n let rect = getRect(sortable),\n threshold = sortable[expando].options.emptyInsertThreshold,\n insideHorizontally =\n x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically =\n y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (threshold && insideHorizontally && insideVertically) {\n return (ret = sortable);\n }\n });\n return ret;\n },\n _prepareGroup = function (options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n let sameGroup =\n to.options.group.name &&\n from.options.group.name &&\n to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === \"clone\") {\n return value;\n } else if (typeof value === \"function\") {\n return toFn(value(to, from, dragEl, evt), pull)(\n to,\n from,\n dragEl,\n evt\n );\n } else {\n let otherGroup = (pull ? to : from).options.group.name;\n\n return (\n value === true ||\n (typeof value === \"string\" && value === otherGroup) ||\n (value.join && value.indexOf(otherGroup) > -1)\n );\n }\n };\n }\n\n let group = {};\n let originalGroup = options.group;\n\n if (!originalGroup || typeof originalGroup != \"object\") {\n originalGroup = { name: originalGroup };\n }\n\n //@ts-ignore\n group.name = originalGroup.name;\n //@ts-ignore\n group.checkPull = toFn(originalGroup.pull, true);\n //@ts-ignore\n group.checkPut = toFn(originalGroup.put);\n //@ts-ignore\n group.revertClone = originalGroup.revertClone;\n\n options.group = group;\n },\n _hideGhostForTarget = function () {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, \"display\", \"none\");\n }\n },\n _unhideGhostForTarget = function () {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, \"display\", \"\");\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists) {\n document.addEventListener(\n \"click\",\n function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n },\n true\n );\n}\n\nlet nearestEmptyInsertDetectEvent = function (evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n let event = {};\n for (let i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n //@ts-ignore\n event.target = event.rootEl = nearest;\n //@ts-ignore\n event.preventDefault = void 0;\n //@ts-ignore\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nlet _checkOutsideTargetEl = function (evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw `Sortable: \\`el\\` must be an HTMLElement, not ${{}.toString.call(\n el\n )}`;\n }\n\n this.el = el; // root element\n this.options = options = Object.assign({}, options);\n\n // Export instance\n el[expando] = this;\n\n let defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? \">li\" : \">*\",\n swapThreshold: 1, // percentage; 0 <= x <= 1\n invertSwap: false, // invert always\n invertedSwapThreshold: null, // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function () {\n return _detectDirection(el, this.options);\n },\n ghostClass: \"sortable-ghost\",\n chosenClass: \"sortable-chosen\",\n dragClass: \"sortable-drag\",\n ignore: \"a, img\",\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function (dataTransfer, dragEl) {\n dataTransfer.setData(\"Text\", dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: \"data-id\",\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold:\n (Number.parseInt ? Number : window).parseInt(\n //@ts-ignore\n window.devicePixelRatio,\n 10\n ) || 1,\n forceFallback: false,\n fallbackClass: \"sortable-fallback\",\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: { x: 0, y: 0 },\n supportPointer:\n //@ts-ignore\n Sortable.supportPointer !== false && \"PointerEvent\" in window,\n emptyInsertThreshold: 5,\n };\n\n //@ts-ignore\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (let name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options);\n\n // Bind all private methods\n for (let fn in this) {\n if (fn.charAt(0) === \"_\" && typeof this[fn] === \"function\") {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, \"pointerdown\", this._onTapStart);\n } else {\n on(el, \"mousedown\", this._onTapStart);\n on(el, \"touchstart\", this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, \"dragover\", this);\n on(el, \"dragenter\", this);\n }\n\n sortables.push(this.el);\n\n // Restore sorting\n options.store &&\n options.store.get &&\n this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n Object.assign(this, AnimationStateManager());\n}\n\nSortable.prototype = /** @lends Sortable.prototype */ {\n constructor: Sortable,\n\n _isOutsideThisEl: function (target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n\n _getDirection: function (evt, target) {\n return typeof this.options.direction === \"function\"\n ? this.options.direction.call(this, evt, target, dragEl)\n : this.options.direction;\n },\n\n _onTapStart: function (/** Event|TouchEvent */ evt) {\n if (!evt.cancelable) return;\n let _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch =\n (evt.touches && evt.touches[0]) ||\n (evt.pointerType && evt.pointerType === \"touch\" && evt),\n target = (touch || evt).target,\n originalTarget =\n (evt.target.shadowRoot &&\n ((evt.path && evt.path[0]) ||\n (evt.composedPath && evt.composedPath()[0]))) ||\n target,\n filter = options.filter;\n\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n\n if (\n (/mousedown|pointerdown/.test(type) && evt.button !== 0) ||\n options.disabled\n ) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (\n !this.nativeDraggable &&\n Safari &&\n target &&\n target.tagName.toUpperCase() === \"SELECT\"\n ) {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n //@ts-ignore\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === \"function\") {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: \"filter\",\n targetEl: target,\n toEl: el,\n fromEl: el,\n });\n pluginEvent(\"filter\", _this, { evt });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(\",\").some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: \"filter\",\n targetEl: target,\n fromEl: el,\n toEl: el,\n });\n pluginEvent(\"filter\", _this, { evt });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n\n _prepareDragStart: function (\n /** Event */ evt,\n /** Touch */ touch,\n /** HTMLElement */ target\n ) {\n let _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n //@ts-ignore\n let dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n\n //@ts-ignore\n Sortable.dragged = dragEl;\n\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY,\n };\n\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n\n dragEl.style[\"will-change\"] = \"all\";\n\n dragStartFn = function () {\n pluginEvent(\"delayEnded\", _this, { evt });\n //@ts-ignore\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: \"choose\",\n originalEvent: evt,\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(\",\").forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n\n on(ownerDocument, \"dragover\", nearestEmptyInsertDetectEvent);\n on(ownerDocument, \"mousemove\", nearestEmptyInsertDetectEvent);\n on(ownerDocument, \"touchmove\", nearestEmptyInsertDetectEvent);\n\n on(ownerDocument, \"mouseup\", _this._onDrop);\n on(ownerDocument, \"touchend\", _this._onDrop);\n on(ownerDocument, \"touchcancel\", _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent(\"delayStart\", this, { evt });\n\n // Delay is impossible for native DnD in Edge or IE\n if (\n options.delay &&\n (!options.delayOnTouchOnly || touch) &&\n (!this.nativeDraggable || !(Edge || IE11OrLess))\n ) {\n //@ts-ignore\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, \"mouseup\", _this._disableDelayedDrag);\n on(ownerDocument, \"touchend\", _this._disableDelayedDrag);\n on(ownerDocument, \"touchcancel\", _this._disableDelayedDrag);\n on(ownerDocument, \"mousemove\", _this._delayedDragTouchMoveHandler);\n on(ownerDocument, \"touchmove\", _this._delayedDragTouchMoveHandler);\n options.supportPointer &&\n on(ownerDocument, \"pointermove\", _this._delayedDragTouchMoveHandler);\n\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n\n _delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/ e) {\n let touch = e.touches ? e.touches[0] : e;\n if (\n Math.max(\n Math.abs(touch.clientX - this._lastX),\n Math.abs(touch.clientY - this._lastY)\n ) >=\n Math.floor(\n this.options.touchStartThreshold /\n ((this.nativeDraggable && window.devicePixelRatio) || 1)\n )\n ) {\n this._disableDelayedDrag();\n }\n },\n\n _disableDelayedDrag: function () {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n\n _disableDelayedDragEvents: function () {\n let ownerDocument = this.el.ownerDocument;\n off(ownerDocument, \"mouseup\", this._disableDelayedDrag);\n off(ownerDocument, \"touchend\", this._disableDelayedDrag);\n off(ownerDocument, \"touchcancel\", this._disableDelayedDrag);\n off(ownerDocument, \"mousemove\", this._delayedDragTouchMoveHandler);\n off(ownerDocument, \"touchmove\", this._delayedDragTouchMoveHandler);\n off(ownerDocument, \"pointermove\", this._delayedDragTouchMoveHandler);\n },\n\n _triggerDragStart: function (/** Event */ evt, /** Touch */ touch) {\n touch = touch || (evt.pointerType == \"touch\" && evt);\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, \"pointermove\", this._onTouchMove);\n } else if (touch) {\n on(document, \"touchmove\", this._onTouchMove);\n } else {\n on(document, \"mousemove\", this._onTouchMove);\n }\n } else {\n on(dragEl, \"dragend\", this);\n on(rootEl, \"dragstart\", this._onDragStart);\n }\n\n try {\n //@ts-ignore\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n //@ts-ignore\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n\n _dragStarted: function (fallback, evt) {\n let _this = this;\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent(\"dragStarted\", this, { evt });\n\n if (this.nativeDraggable) {\n on(document, \"dragover\", _checkOutsideTargetEl);\n }\n let options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n\n //@ts-ignore\n Sortable.active = this;\n\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: \"start\",\n originalEvent: evt,\n });\n } else {\n this._nulling();\n }\n },\n\n _emulateDragOver: function () {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n let target = document.elementFromPoint(\n touchEvt.clientX,\n touchEvt.clientY\n );\n let parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(\n touchEvt.clientX,\n touchEvt.clientY\n );\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n let inserted;\n\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent,\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n } while (\n /* jshint boss:true */\n //@ts-ignore\n (parent = parent.parentNode)\n );\n }\n\n _unhideGhostForTarget();\n }\n },\n\n _onTouchMove: function (/**TouchEvent*/ evt) {\n if (tapEvt) {\n let options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset =\n PositionGhostAbsolutely &&\n ghostRelativeParent &&\n getRelativeScrollOffset(ghostRelativeParent),\n dx =\n (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) +\n (relativeScrollOffset\n ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0]\n : 0) /\n (scaleX || 1),\n dy =\n (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) +\n (relativeScrollOffset\n ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1]\n : 0) /\n (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n //@ts-ignore\n if (!Sortable.active && !awaitingDragStarted) {\n if (\n fallbackTolerance &&\n Math.max(\n Math.abs(touch.clientX - this._lastX),\n Math.abs(touch.clientY - this._lastY)\n ) < fallbackTolerance\n ) {\n return;\n }\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy,\n };\n }\n\n let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`;\n\n css(ghostEl, \"webkitTransform\", cssMatrix);\n css(ghostEl, \"mozTransform\", cssMatrix);\n css(ghostEl, \"msTransform\", cssMatrix);\n css(ghostEl, \"transform\", cssMatrix);\n\n lastDx = dx;\n lastDy = dy;\n\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n\n _appendGhost: function () {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n let container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (\n //@ts-ignore\n css(ghostRelativeParent, \"position\") === \"static\" &&\n //@ts-ignore\n css(ghostRelativeParent, \"transform\") === \"none\" &&\n ghostRelativeParent !== document\n ) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (\n ghostRelativeParent !== document.body &&\n ghostRelativeParent !== document.documentElement\n ) {\n if (ghostRelativeParent === document)\n ghostRelativeParent = getWindowScrollingElement();\n\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(\n ghostRelativeParent\n );\n }\n\n ghostEl = dragEl.cloneNode(true);\n\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n\n css(ghostEl, \"transition\", \"\");\n css(ghostEl, \"transform\", \"\");\n\n css(ghostEl, \"box-sizing\", \"border-box\");\n css(ghostEl, \"margin\", 0);\n css(ghostEl, \"top\", rect.top);\n css(ghostEl, \"left\", rect.left);\n css(ghostEl, \"width\", rect.width);\n css(ghostEl, \"height\", rect.height);\n css(ghostEl, \"opacity\", \"0.8\");\n css(ghostEl, \"position\", PositionGhostAbsolutely ? \"absolute\" : \"fixed\");\n css(ghostEl, \"zIndex\", \"100000\");\n css(ghostEl, \"pointerEvents\", \"none\");\n\n //@ts-ignore\n Sortable.ghost = ghostEl;\n\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(\n ghostEl,\n \"transform-origin\",\n (tapDistanceLeft / parseInt(ghostEl.style.width)) * 100 +\n \"% \" +\n (tapDistanceTop / parseInt(ghostEl.style.height)) * 100 +\n \"%\"\n );\n }\n },\n\n _onDragStart: function (/**Event*/ evt, /**boolean*/ fallback) {\n let _this = this;\n let dataTransfer = evt.dataTransfer;\n let options = _this.options;\n\n pluginEvent(\"dragStart\", this, { evt });\n //@ts-ignore\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n\n pluginEvent(\"setupClone\", this);\n //@ts-ignore\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n\n cloneEl.draggable = false;\n cloneEl.style[\"will-change\"] = \"\";\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n //@ts-ignore\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent(\"clone\", _this);\n //@ts-ignore\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: \"clone\",\n });\n });\n\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, \"mouseup\", _this._onDrop);\n off(document, \"touchend\", _this._onDrop);\n off(document, \"touchcancel\", _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = \"move\";\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, \"drop\", _this);\n\n // #1276 fix:\n css(dragEl, \"transform\", \"translateZ(0)\");\n }\n\n awaitingDragStarted = true;\n\n _this._dragStartId = _nextTick(\n _this._dragStarted.bind(_this, fallback, evt)\n );\n on(document, \"selectstart\", _this);\n\n moved = true;\n\n if (Safari) {\n css(document.body, \"user-select\", \"none\");\n }\n },\n\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function (/**Event*/ evt) {\n let el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n //@ts-ignore\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, {\n evt,\n isOwner,\n axis: vertical ? \"vertical\" : \"horizontal\",\n revert,\n dragRect,\n targetRect,\n canSort,\n fromSortable,\n target,\n completed,\n onMove(target, after) {\n return onMove(\n rootEl,\n el,\n dragEl,\n dragRect,\n target,\n //@ts-ignore\n getRect(target),\n evt,\n after\n );\n },\n changed,\n ...extra,\n });\n }\n\n // Capture animation state\n function capture() {\n //@ts-ignore\n dragOverEvent(\"dragOverAnimationCapture\");\n\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent(\"dragOverCompleted\", { insertion });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(\n dragEl,\n putSortable\n ? putSortable.options.ghostClass\n : activeSortable.options.ghostClass,\n false\n );\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n //@ts-ignore\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n //@ts-ignore\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n //@ts-ignore\n dragOverEvent(\"dragOverAnimationComplete\");\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (\n (target === dragEl && !dragEl.animated) ||\n (target === el && !target.animated)\n ) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n\n return (completedFired = true);\n }\n\n // Call when dragEl has been inserted\n function changed() {\n //@ts-ignore\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: \"change\",\n toEl: el,\n newIndex,\n newDraggableIndex,\n originalEvent: evt,\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n\n //@ts-ignore\n dragOverEvent(\"dragOver\");\n //@ts-ignore\n if (Sortable.eventCanceled) return completedFired;\n\n if (\n dragEl.contains(evt.target) ||\n (target.animated && target.animatingX && target.animatingY) ||\n _this._ignoreWhileAnimating === target\n ) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (\n activeSortable &&\n !options.disabled &&\n (isOwner\n ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this ||\n ((this.lastPutMode = activeGroup.checkPull(\n this,\n activeSortable,\n dragEl,\n evt\n )) &&\n group.checkPut(this, activeSortable, dragEl, evt)))\n ) {\n vertical = this._getDirection(evt, target) === \"vertical\";\n\n //@ts-ignore\n dragRect = getRect(dragEl);\n\n //@ts-ignore\n dragOverEvent(\"dragOverValid\");\n //@ts-ignore\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n\n this._hideClone();\n\n //@ts-ignore\n dragOverEvent(\"revert\");\n\n //@ts-ignore\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n let elLastChild = lastChild(el, options.draggable);\n\n if (\n !elLastChild ||\n (_ghostIsLast(evt, vertical, this) && !elLastChild.animated)\n ) {\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // assign target only if condition is true\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n //@ts-ignore\n targetRect = getRect(target);\n }\n\n if (\n onMove(\n rootEl,\n el,\n dragEl,\n dragRect,\n target,\n targetRect,\n evt,\n !!target\n ) !== false\n ) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n //@ts-ignore\n targetRect = getRect(target);\n let direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(\n (dragEl.animated && dragEl.toRect) || dragRect,\n (target.animated && target.toRect) || targetRect,\n vertical\n ),\n side1 = vertical ? \"top\" : \"left\",\n scrolledPastTop =\n isScrolledPast(target, \"top\", \"top\") ||\n isScrolledPast(dragEl, \"top\", \"top\"),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert =\n (!differentRowCol && options.invertSwap) || differentLevel;\n }\n\n direction = _getSwapDirection(\n evt,\n target,\n targetRect,\n vertical,\n differentRowCol ? 1 : options.swapThreshold,\n options.invertedSwapThreshold == null\n ? options.swapThreshold\n : options.invertedSwapThreshold,\n isCircumstantialInvert,\n lastTarget === target\n );\n\n let sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n //@ts-ignore\n let dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (\n sibling &&\n //@ts-ignore\n (css(sibling, \"display\") === \"none\" || sibling === ghostEl)\n );\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n\n lastDirection = direction;\n\n let nextSibling = target.nextElementSibling,\n after = false;\n\n after = direction === 1;\n\n let moveVector = onMove(\n rootEl,\n el,\n dragEl,\n dragRect,\n target,\n targetRect,\n evt,\n after\n );\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(\n dragEl,\n after ? nextSibling : target\n );\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(\n scrolledPastTop,\n 0,\n scrollBefore - scrolledPastTop.scrollTop\n );\n }\n\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(\n //@ts-ignore\n targetBeforeFirstSwap - getRect(target)[side1]\n );\n }\n changed();\n\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n\n _ignoreWhileAnimating: null,\n\n _offMoveEvents: function () {\n off(document, \"mousemove\", this._onTouchMove);\n off(document, \"touchmove\", this._onTouchMove);\n off(document, \"pointermove\", this._onTouchMove);\n off(document, \"dragover\", nearestEmptyInsertDetectEvent);\n off(document, \"mousemove\", nearestEmptyInsertDetectEvent);\n off(document, \"touchmove\", nearestEmptyInsertDetectEvent);\n },\n\n _offUpEvents: function () {\n let ownerDocument = this.el.ownerDocument;\n\n off(ownerDocument, \"mouseup\", this._onDrop);\n off(ownerDocument, \"touchend\", this._onDrop);\n off(ownerDocument, \"pointerup\", this._onDrop);\n off(ownerDocument, \"touchcancel\", this._onDrop);\n off(document, \"selectstart\", this);\n },\n\n _onDrop: function (/**Event*/ evt) {\n let el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n //@ts-ignore\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n pluginEvent(\"drop\", this, {\n evt,\n });\n\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n //@ts-ignore\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n //@ts-ignore\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n\n clearInterval(this._loopId);\n\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, \"drop\", this);\n off(el, \"dragstart\", this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, \"user-select\", \"\");\n }\n\n css(dragEl, \"transform\", \"\");\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (\n rootEl === parentEl ||\n (putSortable && putSortable.lastPutMode !== \"clone\")\n ) {\n // Remove clone(s)\n cloneEl &&\n cloneEl.parentNode &&\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, \"dragend\", this);\n }\n\n _disableDraggable(dragEl);\n dragEl.style[\"will-change\"] = \"\";\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(\n dragEl,\n putSortable\n ? putSortable.options.ghostClass\n : this.options.ghostClass,\n false\n );\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: \"unchoose\",\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt,\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: \"add\",\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt,\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: \"remove\",\n toEl: parentEl,\n originalEvent: evt,\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: \"sort\",\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt,\n });\n\n _dispatchEvent({\n sortable: this,\n name: \"sort\",\n toEl: parentEl,\n originalEvent: evt,\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: \"update\",\n toEl: parentEl,\n originalEvent: evt,\n });\n\n _dispatchEvent({\n sortable: this,\n name: \"sort\",\n toEl: parentEl,\n originalEvent: evt,\n });\n }\n }\n }\n\n //@ts-ignore\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: \"end\",\n toEl: parentEl,\n originalEvent: evt,\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n\n _nulling: function () {\n pluginEvent(\"nulling\", this);\n //@ts-ignore\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n\n handleEvent: function (/**Event*/ evt) {\n switch (evt.type) {\n case \"drop\":\n case \"dragend\":\n this._onDrop(evt);\n break;\n\n case \"dragenter\":\n case \"dragover\":\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n\n case \"selectstart\":\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function () {\n let order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function (order) {\n let items = {},\n rootEl = this.el;\n\n this.toArray().forEach(function (id, i) {\n let el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n },\n\n /**\n * Save the current sorting\n */\n save: function () {\n let store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function (el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function (name, value) {\n let options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n let modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== \"undefined\") {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === \"group\") {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function () {\n pluginEvent(\"destroy\", this);\n let el = this.el;\n\n el[expando] = null;\n\n off(el, \"mousedown\", this._onTapStart);\n off(el, \"touchstart\", this._onTapStart);\n off(el, \"pointerdown\", this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, \"dragover\", this);\n off(el, \"dragenter\", this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll(\"[draggable]\"), function (\n el\n ) {\n el.removeAttribute(\"draggable\");\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n\n this.el = el = null;\n },\n\n _hideClone: function () {\n if (!cloneHidden) {\n pluginEvent(\"hideClone\", this);\n //@ts-ignore\n if (Sortable.eventCanceled) return;\n\n css(cloneEl, \"display\", \"none\");\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n\n _showClone: function (putSortable) {\n if (putSortable.lastPutMode !== \"clone\") {\n this._hideClone();\n return;\n }\n\n if (cloneHidden) {\n pluginEvent(\"showClone\", this);\n //@ts-ignore\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, \"display\", \"\");\n cloneHidden = false;\n }\n },\n};\n\nfunction _globalDragOver(/**Event*/ evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = \"move\";\n }\n evt.cancelable && evt.preventDefault();\n}\n\nfunction onMove(\n fromEl,\n toEl,\n dragEl,\n dragRect,\n targetEl,\n targetRect,\n originalEvent,\n willInsertAfter\n) {\n let evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(\"move\", {\n bubbles: true,\n cancelable: true,\n });\n } else {\n evt = document.createEvent(\"Event\");\n evt.initEvent(\"move\", true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n //@ts-ignore\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n\n evt.originalEvent = originalEvent;\n\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n //@ts-ignore\n let rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n const spacer = 10;\n\n return vertical\n ? evt.clientX > rect.right + spacer ||\n (evt.clientX <= rect.right &&\n evt.clientY > rect.bottom &&\n evt.clientX >= rect.left)\n : (evt.clientX > rect.right && evt.clientY > rect.top) ||\n (evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer);\n}\n\nfunction _getSwapDirection(\n evt,\n target,\n targetRect,\n vertical,\n swapThreshold,\n invertedSwapThreshold,\n invertSwap,\n isLastTarget\n) {\n let mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (\n !pastFirstInvertThresh &&\n (lastDirection === 1\n ? mouseOnAxis > targetS1 + (targetLength * invertedSwapThreshold) / 2\n : mouseOnAxis < targetS2 - (targetLength * invertedSwapThreshold) / 2)\n ) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (\n lastDirection === 1\n ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance\n ) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (\n mouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold)) / 2 &&\n mouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold)) / 2\n ) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (\n mouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold) / 2 ||\n mouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold) / 2\n ) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\nfunction _getInsertDirection(target) {\n //@ts-ignore\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\nfunction _generateId(el) {\n let str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n\n let inputs = root.getElementsByTagName(\"input\");\n let idx = inputs.length;\n\n while (idx--) {\n let el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, \"touchmove\", function (evt) {\n //@ts-ignore\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function (el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n};\n\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\nSortable.mount = function (...plugins) {\n if (plugins[0].constructor === Array) plugins = plugins[0];\n\n plugins.forEach((plugin) => {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(\n plugin\n )}`;\n }\n if (plugin.utils) Sortable.utils = { ...Sortable.utils, ...plugin.utils };\n\n PluginManager.mount(plugin);\n });\n};\n\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nexport default Sortable;\n","import { toggleClass, index } from \"../../../utils/src\";\n\nlet lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: \"sortable-swap-highlight\",\n };\n }\n\n Swap.prototype = {\n dragStart({ dragEl }) {\n lastSwapEl = dragEl;\n },\n dragOverValid({\n completed,\n target,\n onMove,\n activeSortable,\n changed,\n cancel,\n }) {\n if (!activeSortable.options.swap) return;\n let el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n let prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n\n completed(true);\n cancel();\n },\n drop({ activeSortable, putSortable, dragEl }) {\n let toSortable = putSortable || this.sortable;\n let options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (\n lastSwapEl &&\n (options.swap || (putSortable && putSortable.options.swap))\n ) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable)\n activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling() {\n lastSwapEl = null;\n },\n };\n\n return Object.assign(Swap, {\n pluginName: \"swap\",\n eventProperties() {\n return {\n swapItem: lastSwapEl,\n };\n },\n });\n}\n\nfunction swapNodes(n1, n2) {\n let p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n\n //@ts-ignore\n i1 = index(n1);\n //@ts-ignore\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nexport default SwapPlugin;\n","import {\n getRect,\n css,\n matrix,\n isRectEqual,\n indexOfObject,\n} from \"../../utils/src\";\nimport * as Sortable from \"./Sortable\";\n\nexport default function AnimationStateManager() {\n let animationStates = [],\n animationCallbackId;\n\n return {\n captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n let children = [].slice.call(this.el.children);\n\n children.forEach((child) => {\n //@ts-ignore\n if (css(child, \"display\") === \"none\" || child === Sortable.ghost)\n return;\n animationStates.push({\n target: child,\n //@ts-ignore\n rect: getRect(child),\n });\n let fromRect = { ...animationStates[animationStates.length - 1].rect };\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n let childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n\n addAnimationState(state) {\n animationStates.push(state);\n },\n\n removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, { target }), 1);\n },\n\n animateAll(callback) {\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === \"function\") callback();\n return;\n }\n\n let animating = false,\n animationTime = 0;\n\n animationStates.forEach((state) => {\n let time = 0,\n animatingThis = false,\n target = state.target,\n fromRect = target.fromRect,\n //@ts-ignore\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (\n isRectEqual(prevFromRect, toRect) &&\n !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) /\n (animatingRect.left - toRect.left) ===\n (fromRect.top - toRect.top) / (fromRect.left - toRect.left)\n ) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(\n animatingRect,\n prevFromRect,\n prevToRect,\n this.options\n );\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = this.options.animation;\n }\n this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === \"function\") callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === \"function\") callback();\n }, animationTime);\n }\n animationStates = [];\n },\n\n animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, \"transition\", \"\");\n css(target, \"transform\", \"\");\n //@ts-ignore\n let elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n\n css(\n target,\n \"transform\",\n \"translate3d(\" + translateX + \"px,\" + translateY + \"px,0)\"\n );\n\n this.forRepaintDummy = repaint(target); // repaint\n\n css(\n target,\n \"transition\",\n \"transform \" +\n duration +\n \"ms\" +\n (this.options.easing ? \" \" + this.options.easing : \"\")\n );\n css(target, \"transform\", \"translate3d(0,0,0)\");\n typeof target.animated === \"number\" && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, \"transition\", \"\");\n css(target, \"transform\", \"\");\n target.animated = false;\n\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n },\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return (\n (Math.sqrt(\n Math.pow(fromRect.top - animatingRect.top, 2) +\n Math.pow(fromRect.left - animatingRect.left, 2)\n ) /\n Math.sqrt(\n Math.pow(fromRect.top - toRect.top, 2) +\n Math.pow(fromRect.left - toRect.left, 2)\n )) *\n options.animation\n );\n}\n","import {\n toggleClass,\n getRect,\n index,\n closest,\n on,\n off,\n clone,\n css,\n setRect,\n unsetRect,\n matrix,\n expando,\n} from \"../../../utils/src\";\n\nimport dispatchEvent from \"../../../sortable/src/EventDispatcher\";\n\nlet multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect, // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false, // Initial multi-drag fold when drag started\n folding = false, // Folding any other time\n dragStarted = false,\n dragEl,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (let fn in this) {\n if (fn.charAt(0) === \"_\" && typeof this[fn] === \"function\") {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, \"pointerup\", this._deselectMultiDrag);\n } else {\n on(document, \"mouseup\", this._deselectMultiDrag);\n on(document, \"touchend\", this._deselectMultiDrag);\n }\n\n on(document, \"keydown\", this._checkKeyDown);\n on(document, \"keyup\", this._checkKeyUp);\n\n this.defaults = {\n selectedClass: \"sortable-selected\",\n multiDragKey: null,\n setData(dataTransfer, dragEl) {\n let data = \"\";\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach((multiDragElement, i) => {\n data += (!i ? \"\" : \", \") + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData(\"Text\", data);\n },\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n\n delayStartGlobal({ dragEl: dragged }) {\n dragEl = dragged;\n },\n\n delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl);\n },\n\n setupClone({ sortable, cancel }) {\n if (!this.isMultiDrag) return;\n for (let i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n\n multiDragClones[i].draggable = false;\n multiDragClones[i].style[\"will-change\"] = \"\";\n\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl &&\n toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n cancel();\n },\n\n clone({ sortable, rootEl, dispatchSortableEvent, cancel }) {\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent(\"clone\");\n\n cancel();\n }\n }\n },\n\n showClone({ cloneNowShown, rootEl, cancel }) {\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach((clone) => {\n css(clone, \"display\", \"\");\n });\n\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n\n hideClone({ sortable, cloneNowHidden, cancel }) {\n if (!this.isMultiDrag) return;\n multiDragClones.forEach((clone) => {\n css(clone, \"display\", \"none\");\n if (this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n\n dragStartGlobal({ sortable }) {\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach((multiDragElement) => {\n //@ts-ignore\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n\n dragStarted({ sortable }) {\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach((multiDragElement) => {\n if (multiDragElement === dragEl) return;\n css(multiDragElement, \"position\", \"absolute\");\n });\n\n //@ts-ignore\n let dragRect = getRect(dragEl, false, true, true);\n\n multiDragElements.forEach((multiDragElement) => {\n if (multiDragElement === dragEl) return;\n setRect(multiDragElement, dragRect);\n });\n\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(() => {\n folding = false;\n initialFolding = false;\n\n if (this.options.animation) {\n multiDragElements.forEach((multiDragElement) => {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (this.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n\n dragOver({ target, completed, cancel }) {\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n\n revert({ fromSortable, rootEl, sortable, dragRect }) {\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach((multiDragElement) => {\n sortable.addAnimationState({\n target: multiDragElement,\n //@ts-ignore\n rect: folding ? getRect(multiDragElement) : dragRect,\n });\n\n unsetRect(multiDragElement);\n\n multiDragElement.fromRect = dragRect;\n\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n\n dragOverCompleted({\n sortable,\n isOwner,\n insertion,\n activeSortable,\n parentEl,\n putSortable,\n }) {\n let options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (\n options.animation &&\n multiDragElements.length > 1 &&\n (folding ||\n (!isOwner && !activeSortable.options.sort && !putSortable))\n ) {\n //@ts-ignore\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n let dragRectAbsolute = getRect(dragEl, false, true, true);\n\n multiDragElements.forEach((multiDragElement) => {\n if (multiDragElement === dragEl) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n let clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (\n activeSortable.options.animation &&\n !clonesHidden &&\n clonesHiddenBefore\n ) {\n multiDragClones.forEach((clone) => {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect,\n });\n\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n\n dragOverAnimationCapture({ dragRect, isOwner, activeSortable }) {\n multiDragElements.forEach((multiDragElement) => {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (\n activeSortable.options.animation &&\n !isOwner &&\n activeSortable.multiDrag.isMultiDrag\n ) {\n clonesFromRect = Object.assign({}, dragRect);\n let dragMatrix = matrix(dragEl, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n\n dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n\n drop({\n originalEvent: evt,\n rootEl,\n parentEl,\n sortable,\n dispatchSortableEvent,\n oldIndex,\n putSortable,\n }) {\n let toSortable = putSortable || this.sortable;\n\n if (!evt) return;\n\n let options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(\n dragEl,\n options.selectedClass,\n !~multiDragElements.indexOf(dragEl)\n );\n\n if (!~multiDragElements.indexOf(dragEl)) {\n multiDragElements.push(dragEl);\n dispatchEvent({\n sortable,\n rootEl,\n name: \"select\",\n targetEl: dragEl,\n //@ts-ignore\n originalEvt: evt,\n });\n\n // Modifier activated, select from last to dragEl\n if (\n evt.shiftKey &&\n lastMultiDragSelect &&\n sortable.el.contains(lastMultiDragSelect)\n ) {\n //@ts-ignore\n let lastIndex = index(lastMultiDragSelect),\n //@ts-ignore\n currentIndex = index(dragEl);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n let n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n\n dispatchEvent({\n sortable,\n rootEl,\n name: \"select\",\n targetEl: children[i],\n //@ts-ignore\n originalEvt: evt,\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable,\n rootEl,\n name: \"deselect\",\n targetEl: dragEl,\n //@ts-ignore\n originalEvt: evt,\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n // Do not \"unfold\" after around dragEl if reverted\n if (\n (parentEl[expando].options.sort || parentEl !== rootEl) &&\n multiDragElements.length > 1\n ) {\n //@ts-ignore\n let dragRect = getRect(dragEl),\n multiDragIndex = index(\n dragEl,\n \":not(.\" + this.options.selectedClass + \")\"\n );\n\n if (!initialFolding && options.animation)\n dragEl.thisAnimationDuration = null;\n\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl.fromRect = dragRect;\n multiDragElements.forEach((multiDragElement) => {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl) {\n //@ts-ignore\n let rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect,\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n\n multiDragElements.forEach((multiDragElement) => {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(\n multiDragElement,\n children[multiDragIndex]\n );\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n //@ts-ignore\n if (oldIndex === index(dragEl)) {\n let update = false;\n multiDragElements.forEach((multiDragElement) => {\n //@ts-ignore\n if (\n //@ts-ignore\n multiDragElement.sortableIndex !== index(multiDragElement)\n ) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent(\"update\");\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach((multiDragElement) => {\n unsetRect(multiDragElement);\n });\n\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (\n rootEl === parentEl ||\n (putSortable && putSortable.lastPutMode !== \"clone\")\n ) {\n multiDragClones.forEach((clone) => {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n\n nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n\n destroyGlobal() {\n this._deselectMultiDrag();\n off(document, \"pointerup\", this._deselectMultiDrag);\n off(document, \"mouseup\", this._deselectMultiDrag);\n off(document, \"touchend\", this._deselectMultiDrag);\n\n off(document, \"keydown\", this._checkKeyDown);\n off(document, \"keyup\", this._checkKeyUp);\n },\n\n _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (\n evt &&\n closest(evt.target, this.options.draggable, this.sortable.el, false)\n )\n return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n let el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: \"deselect\",\n //@ts-ignore\n targetEl: el,\n //@ts-ignore\n originalEvt: evt,\n });\n }\n },\n\n _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n\n _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n },\n };\n\n return Object.assign(MultiDrag, {\n // Static methods & properties\n pluginName: \"multiDrag\",\n utils: {\n /**\n * Selects the provided multi-drag item\n * @param {HTMLElement} el The element to be selected\n */\n select(el) {\n let sortable = el.parentNode[expando];\n if (\n !sortable ||\n !sortable.options.multiDrag ||\n ~multiDragElements.indexOf(el)\n )\n return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\n * Deselects the provided multi-drag item\n * @param {HTMLElement} el The element to be deselected\n */\n deselect(el) {\n let sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n },\n },\n eventProperties() {\n const oldIndicies = [],\n newIndicies = [];\n\n multiDragElements.forEach((multiDragElement) => {\n oldIndicies.push({\n multiDragElement,\n index: multiDragElement.sortableIndex,\n });\n\n // multiDragElements will already be sorted if folding\n let newIndex;\n if (folding && multiDragElement !== dragEl) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(\n multiDragElement,\n \":not(.\" + this.options.selectedClass + \")\"\n );\n } else {\n //@ts-ignore\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement,\n index: newIndex,\n });\n });\n return {\n items: [...multiDragElements],\n clones: [...multiDragClones],\n oldIndicies,\n newIndicies,\n };\n },\n optionListeners: {\n multiDragKey(key) {\n key = key.toLowerCase();\n if (key === \"ctrl\") {\n key = \"Control\";\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n },\n },\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach((multiDragElement, i) => {\n let target =\n rootEl.children[\n multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)\n ];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\n * Insert multi-drag clones\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\n * @param {HTMLElement} rootEl\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach((clone, i) => {\n let target =\n rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach((multiDragElement) => {\n if (multiDragElement === dragEl) return;\n multiDragElement.parentNode &&\n multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nexport default MultiDragPlugin;\n","import { getChild } from \"../../../utils/src\";\n\nconst drop = function ({\n originalEvent,\n putSortable,\n dragEl,\n activeSortable,\n dispatchSortableEvent,\n hideGhostForTarget,\n unhideGhostForTarget,\n}) {\n if (!originalEvent) return;\n let toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n let touch =\n originalEvent.changedTouches && originalEvent.changedTouches.length\n ? originalEvent.changedTouches[0]\n : originalEvent;\n let target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent(\"spill\");\n this.onSpill({ dragEl, putSortable });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart({ oldDraggableIndex }) {\n this.startIndex = oldDraggableIndex;\n },\n onSpill({ dragEl, putSortable }) {\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n let nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop,\n};\n\nObject.assign(Revert, {\n pluginName: \"revertOnSpill\",\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill({ dragEl, putSortable }) {\n const parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop,\n};\n\nObject.assign(Remove, {\n pluginName: \"removeOnSpill\",\n});\n\nexport default [Remove, Revert];\n\nexport { Remove as RemoveOnSpill, Revert as RevertOnSpill };\n","import {\n on,\n off,\n css,\n throttle,\n cancelThrottle,\n scrollBy,\n getParentAutoScrollElement,\n expando,\n getRect,\n getWindowScrollingElement,\n Edge,\n IE11OrLess,\n Safari,\n} from \"../../../utils/src\";\n\nimport Sortable from \"../../../sortable/src/Sortable\";\n\nlet autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true,\n };\n\n // Bind all private methods\n for (let fn in this) {\n if (fn.charAt(0) === \"_\" && typeof this[fn] === \"function\") {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted({ originalEvent }) {\n if (this.sortable.nativeDraggable) {\n on(document, \"dragover\", this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, \"pointermove\", this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, \"touchmove\", this._handleFallbackAutoScroll);\n } else {\n on(document, \"mousemove\", this._handleFallbackAutoScroll);\n }\n }\n },\n\n dragOverCompleted({ originalEvent }) {\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n\n drop() {\n if (this.sortable.nativeDraggable) {\n off(document, \"dragover\", this._handleAutoScroll);\n } else {\n off(document, \"pointermove\", this._handleFallbackAutoScroll);\n off(document, \"touchmove\", this._handleFallbackAutoScroll);\n off(document, \"mousemove\", this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n\n nulling() {\n touchEvt = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n\n autoScrolls.length = 0;\n },\n\n _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n\n _handleAutoScroll(evt, fallback) {\n const x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n\n touchEvt = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || Edge || IE11OrLess || Safari) {\n //@ts-ignore\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n let ogElemScroller = getParentAutoScrollElement(elem, true);\n if (\n scrolling &&\n (!pointerElemChangedInterval ||\n x !== lastAutoScrollX ||\n y !== lastAutoScrollY)\n ) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(() => {\n let newElem = getParentAutoScrollElement(\n document.elementFromPoint(x, y),\n true\n );\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n //@ts-ignore\n autoScroll(evt, this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (\n !this.options.bubbleScroll ||\n getParentAutoScrollElement(elem, true) === getWindowScrollingElement()\n ) {\n clearAutoScrolls();\n return;\n }\n autoScroll(\n //@ts-ignore\n evt,\n this.options,\n getParentAutoScrollElement(elem, false),\n false\n );\n }\n },\n };\n\n return Object.assign(AutoScroll, {\n pluginName: \"scroll\",\n initializeByDefault: true,\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nconst autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n const x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n\n let scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n\n clearAutoScrolls();\n\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n let layersOut = 0;\n let currentParent = scrollEl;\n do {\n let el = currentParent,\n //@ts-ignore\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX,\n canScrollY,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n //@ts-ignore\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX =\n width < scrollWidth &&\n (elCSS.overflowX === \"auto\" ||\n elCSS.overflowX === \"scroll\" ||\n elCSS.overflowX === \"visible\");\n canScrollY =\n height < scrollHeight &&\n (elCSS.overflowY === \"auto\" ||\n elCSS.overflowY === \"scroll\" ||\n elCSS.overflowY === \"visible\");\n } else {\n canScrollX =\n width < scrollWidth &&\n (elCSS.overflowX === \"auto\" || elCSS.overflowX === \"scroll\");\n canScrollY =\n height < scrollHeight &&\n (elCSS.overflowY === \"auto\" || elCSS.overflowY === \"scroll\");\n }\n\n let vx =\n canScrollX &&\n //@ts-ignore\n (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) -\n //@ts-ignore\n (Math.abs(left - x) <= sens && !!scrollPosX);\n let vy =\n canScrollY &&\n //@ts-ignore\n (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) -\n //@ts-ignore\n (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (let i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (\n autoScrolls[layersOut].vx != vx ||\n autoScrolls[layersOut].vy != vy ||\n autoScrolls[layersOut].el !== el\n ) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(\n function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n //@ts-ignore\n Sortable.active._onTouchMove(touchEvt); // To move ghost if it is positioned absolutely\n }\n let scrollOffsetY = autoScrolls[this.layer].vy\n ? autoScrolls[this.layer].vy * speed\n : 0;\n let scrollOffsetX = autoScrolls[this.layer].vx\n ? autoScrolls[this.layer].vx * speed\n : 0;\n\n if (typeof scrollCustomFn === \"function\") {\n if (\n scrollCustomFn.call(\n //@ts-ignore\n Sortable.dragged.parentNode[expando],\n scrollOffsetX,\n scrollOffsetY,\n evt,\n touchEvt,\n autoScrolls[this.layer].el\n ) !== \"continue\"\n ) {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({ layer: layersOut }),\n 24\n );\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nexport default AutoScrollPlugin;\n","import Sortable from \"../../sortable/src/Sortable\";\nimport Swap from \"../../plugins/swap/src\";\nimport MultiDrag from \"../../plugins/multi-drag/src\";\nimport { RemoveOnSpill, RevertOnSpill } from \"../../plugins/on-spill/src\";\nimport AutoScroll from \"../../plugins/auto-scroll/src\";\n\n//@ts-ignore\nSortable.mount(new AutoScroll());\nSortable.mount(RemoveOnSpill, RevertOnSpill);\n//@ts-ignore\nSortable.mount(new Swap());\n//@ts-ignore\nSortable.mount(new MultiDrag());\n\nexport default Sortable;\n"],"names":["userAgent","pattern","window","navigator","match","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","name","state","classList","className","replace","css","prop","val","style","defaultView","getComputedStyle","currentStyle","indexOf","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","find","tagName","iterator","list","getElementsByTagName","i","n","length","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","options","currentChild","children","display","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","args","arguments","_this","this","call","apply","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","setRect","rect","unsetRect","expando","Date","getTime","plugins","defaults","initializeByDefault","pluginManager","mount","plugin","option","hasOwnProperty","push","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","forEach","pluginName","initializePlugins","initialized","Object","assign","modified","modifyOption","getEventProperties","eventProperties","value","modifiedValue","optionListeners","dispatchEvent","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","from","item","pullMode","lastPutMode","undefined","allEventProperties","PluginManager","data","bind","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","active","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","clear","_prepareGroup","toFn","pull","group","otherGroup","join","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","lastSwapEl","nearestEmptyInsertDetectEvent","nearest","touches","clientX","clientY","some","threshold","emptyInsertThreshold","ret","target","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","toString","animationCallbackId","animationStates","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","filter","preventOnFilter","animation","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","Number","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","get","captureAnimationState","slice","child","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","splice","arr","obj","key","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","max","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","animated","onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","id","prototype","constructor","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","path","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","_ghostIsLast","changed","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","targetS1Opp","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","items","set","destroy","Array","querySelectorAll","removeAttribute","utils","is","extend","dst","nextTick","cancelNextTick","detectDirection","element","create","version","lastMultiDragSelect","multiDragSortable","clonesFromRect","clonesHidden","multiDragElements","multiDragClones","initialFolding","folding","insertMultiDragClones","elementsInserted","sortableIndex","removeMultiDragElements","multiDragElement","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","parentSortable","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","AutoScroll","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","RemoveOnSpill","RevertOnSpill","Swap","swapClass","dragOverValid","swap","prevSwapEl","n1","n2","i1","i2","p1","p2","isEqualNode","swapItem","MultiDrag","_deselectMultiDrag","_checkKeyDown","_checkKeyUp","selectedClass","multiDragKey","multiDragKeyDown","isMultiDrag","delayStartGlobal","delayEnded","setupClone","showClone","hideClone","dragStartGlobal","multiDrag","_this2","dragOver","clonesInserted","insertMultiDragElements","dragRectAbsolute","clonesHiddenBefore","dragOverAnimationCapture","dragMatrix","dragOverAnimationComplete","originalEvt","shiftKey","lastIndex","currentIndex","multiDragIndex","update","nullingGlobal","destroyGlobal","shift","select","deselect","oldIndicies","newIndicies","_this3","clones","toLowerCase"],"mappings":"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"}