{"version":3,"sources":["jsdelivr-header.js","/npm/vue-easy-dnd@2.2.2/dist/vue-easy-dnd.js"],"names":[],"mappings":"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","file":"/npm/vue-easy-dnd@2.2.2/dist/vue-easy-dnd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/vue-easy-dnd@2.2.2/dist/vue-easy-dnd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var VueEasyDnD = (function (exports, vue) {\n    'use strict';\n\n    function mitt(n){return {all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e]);},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]));},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e);}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e);});}}}\n\n    /**\r\n     * This is the class of the global object that holds the state of the drag and drop during its progress. It emits events\r\n     * reporting its state evolution during the progress of the drag and drop. Its data is reactive and listeners can be\r\n     * attached to it using the method on.\r\n     */\r\n    class DnD {\r\n\r\n        inProgress = false;\r\n        type = null;\r\n        data = null;\r\n        source = null;\r\n        top = null;\r\n        position = null;\r\n        eventBus = mitt();\r\n        success = null;\r\n\r\n        startDrag (source, event, x, y, type, data) {\r\n          this.type = type;\r\n          this.data = data;\r\n          this.source = source;\r\n          this.position = { x, y };\r\n          this.top = null;\r\n          this.inProgress = true;\r\n          this.emit(event, 'dragstart');\r\n          this.emit(event, 'dragtopchanged', { previousTop: null });\r\n        }\r\n\r\n        resetVariables () {\r\n          this.inProgress = false;\r\n          this.data = null;\r\n          this.source = null;\r\n          this.position = null;\r\n          this.success = null;\r\n        }\r\n\r\n        stopDrag (event) {\r\n          this.success = this.top !== null && this.top['compatibleMode'] && this.top['dropAllowed'];\r\n          if (this.top !== null) {\r\n            this.emit(event, 'drop');\r\n          }\r\n          this.emit(event, 'dragend');\r\n          this.resetVariables();\r\n        }\r\n\r\n        cancelDrag (event) {\r\n          this.success = false;\r\n          this.emit(event, 'dragend');\r\n          this.resetVariables();\r\n        }\r\n\r\n        mouseMove (event, comp) {\r\n          if (this.inProgress) {\r\n            let prevent = false;\r\n            const previousTop = this.top;\r\n            if (comp === null) {\r\n              // The mouse move event reached the top of the document without hitting a drop component.\r\n              this.top = null;\r\n              prevent = true;\r\n            }\r\n            else if (comp['isDropMask']) {\r\n              // The mouse move event bubbled until it reached a drop mask.\r\n              this.top = null;\r\n              prevent = true;\r\n            }\r\n            else if (comp['candidate'](this.type, this.data, this.source)) {\r\n              // The mouse move event bubbled until it reached a drop component that participates in the current drag operation.\r\n              this.top = comp;\r\n              prevent = true;\r\n            }\r\n\r\n            if (prevent) {\r\n              // We prevent the mouse move event from bubbling further up the tree because it reached the foremost drop component and that component is all that matters.\r\n              event.stopPropagation();\r\n            }\r\n            if (this.top !== previousTop) {\r\n              this.emit(event.detail.native, 'dragtopchanged', { previousTop: previousTop });\r\n            }\r\n            this.position = {\r\n              x: event.detail.x,\r\n              y: event.detail.y\r\n            };\r\n            this.emit(event.detail.native, 'dragpositionchanged');\r\n          }\r\n        }\r\n\r\n        emit (native, event, data = {}) {\r\n          this.eventBus.emit(event, {\r\n            type: this.type,\r\n            data: this.data,\r\n            top: this.top,\r\n            source: this.source,\r\n            position: this.position,\r\n            success: this.success,\r\n            native,\r\n            ...data\r\n          });\r\n        }\r\n\r\n        on (event, callback) {\r\n          this.eventBus.on(event, callback);\r\n        }\r\n\r\n        off (event, callback) {\r\n          this.eventBus.off(event, callback);\r\n        }\r\n    }\r\n\r\n    const dnd = vue.reactive(new DnD());\n\n    var DragAwareMixin = {\r\n      data () {\r\n        return {\r\n          isDropMask: false\r\n        };\r\n      },\r\n      computed: {\r\n        dragInProgress () {\r\n          return dnd.inProgress;\r\n        },\r\n        dragData () {\r\n          return dnd.data;\r\n        },\r\n        dragType () {\r\n          return dnd.type;\r\n        },\r\n        dragPosition () {\r\n          return dnd.position;\r\n        },\r\n        dragSource () {\r\n          return dnd.source;\r\n        },\r\n        dragTop () {\r\n          return dnd.top;\r\n        }\r\n      }\r\n    };\n\n    /**\r\n     * This files contains the primitives required to create drag images from HTML elements that serve as models. A snapshot\r\n     * of the computed styles of the model elements is taken when creating the drag image, so that it will look the same as\r\n     * the model, no matter where the drag images is grafted into the DOM.\r\n     */\r\n\r\n    /**\r\n     * Creates a drag image using the given element as model.\r\n     */\r\n    function createDragImage (el) {\r\n      const clone = deepClone(el);\r\n      clone.style.position = 'fixed';\r\n      clone.style.margin = '0';\r\n      clone.style['z-index'] = '1000';\r\n      clone.style.transition = 'opacity 0.2s';\r\n      return clone;\r\n    }\r\n\r\n    /**\r\n     * Clones the given element and all its descendants.\r\n     */\r\n    function deepClone (el) {\r\n      const clone = el.cloneNode(true);\r\n      copyStyle(el, clone);\r\n      const vSrcElements = el.getElementsByTagName('*');\r\n      const vDstElements = clone.getElementsByTagName('*');\r\n      for (let i = vSrcElements.length; i--;) {\r\n        const vSrcElement = vSrcElements[i];\r\n        const vDstElement = vDstElements[i];\r\n        copyStyle(vSrcElement, vDstElement);\r\n      }\r\n      return clone;\r\n    }\r\n\r\n    /**\r\n     * Copy the computed styles from src to destination.\r\n     */\r\n    function copyStyle (src, destination) {\r\n      const computedStyle = window.getComputedStyle(src);\r\n      for (const key of computedStyle) {\r\n        destination.style.setProperty(\r\n          key,\r\n          computedStyle.getPropertyValue(key),\r\n          computedStyle.getPropertyPriority(key)\r\n        );\r\n      }\r\n      destination.style.pointerEvents = 'none';\r\n    }\n\n    // Forked from https://gist.github.com/gre/296291b8ce0d8fe6e1c3ea4f1d1c5c3b\r\n    const regex = /(auto|scroll)/;\r\n\r\n    const style = (node, prop) =>\r\n      getComputedStyle(node, null).getPropertyValue(prop);\r\n\r\n    const scroll = (node) =>\r\n      regex.test(\r\n        style(node, 'overflow') +\r\n        style(node, 'overflow-y') +\r\n        style(node, 'overflow-x'));\r\n\r\n    const scrollparent = (node) => {\r\n      if (!node || node === document.body) {\r\n        return document.body;\r\n      }\r\n      \r\n      if (scroll(node)) {\r\n        return node;\r\n      }\r\n      \r\n      return scrollparent(node.parentNode);\r\n    };\n\n    // Forked from https://github.com/bennadel/JavaScript-Demos/blob/master/demos/window-edge-scrolling/index.htm\r\n    // Code was altered to work with scrollable containers\r\n    let timer = null;\r\n\r\n    function cancelScrollAction () {\r\n      clearTimeout(timer);\r\n    }\r\n\r\n    function isBodyContainer (container) {\r\n      return container === document.body;\r\n    }\r\n\r\n    // Determine if user is inside an edge of the container\r\n    function isInEdge (container, clientX, clientY, edgeSize) {\r\n      // Get the viewport-relative coordinates of the mousemove event.\r\n      const rect = container.getBoundingClientRect();\r\n      const isBody = isBodyContainer(container);\r\n      \r\n      let viewportX = clientX - rect.left;\r\n      let viewportY = clientY - rect.top;\r\n      if (isBody) {\r\n        viewportX = clientX;\r\n        viewportY = clientY;\r\n      }\r\n      \r\n      // Get the viewport dimensions.\r\n      let viewportWidth = rect.width;\r\n      let viewportHeight = rect.height;\r\n      if (isBody) {\r\n        viewportWidth = document.documentElement.clientWidth;\r\n        viewportHeight = document.documentElement.clientHeight;\r\n      }\r\n      \r\n      // Next, we need to determine if the mouse is within the \"edge\" of the\r\n      // viewport, which may require scrolling the window. To do this, we need to\r\n      // calculate the boundaries of the edge in the viewport (these coordinates\r\n      // are relative to the viewport grid system).\r\n      const edgeTop = edgeSize;\r\n      const edgeLeft = edgeSize;\r\n      const edgeBottom = ( viewportHeight - edgeSize );\r\n      const edgeRight = (viewportWidth - edgeSize);\r\n      \r\n      const isInLeftEdge = ( viewportX < edgeLeft );\r\n      const isInRightEdge = ( viewportX > edgeRight );\r\n      const isInTopEdge = ( viewportY < edgeTop );\r\n      const isInBottomEdge = ( viewportY > edgeBottom );\r\n      \r\n      if (!(isInLeftEdge || isInRightEdge || isInTopEdge || isInBottomEdge)) {\r\n        return null;\r\n      }\r\n      \r\n      return {\r\n        rect,\r\n        viewportX,\r\n        viewportY,\r\n        viewportWidth,\r\n        viewportHeight,\r\n        isInLeftEdge,\r\n        isInTopEdge,\r\n        isInRightEdge,\r\n        isInBottomEdge,\r\n        edgeTop,\r\n        edgeLeft,\r\n        edgeBottom,\r\n        edgeRight\r\n      };\r\n    }\r\n\r\n    // Determine if the scroll container has offets which will allow it to be scrolled X or Y\r\n    function canContainerBeScrolled (container, viewportWidth, viewportHeight) {\r\n      const isBody = isBodyContainer(container);\r\n      \r\n      // Get the document dimensions.\r\n      const documentWidth = Math.max(\r\n        container.scrollWidth,\r\n        container.offsetWidth,\r\n        container.clientWidth\r\n      );\r\n      const documentHeight = Math.max(\r\n        container.scrollHeight,\r\n        container.offsetHeight,\r\n        container.clientHeight\r\n      );\r\n      \r\n      // Calculate the maximum scroll offset in each direction. Since you can only\r\n      // scroll the overflow portion of the document, the maximum represents the\r\n      // length of the document that is NOT in the viewport.\r\n      const maxScrollX = (documentWidth - viewportWidth);\r\n      const maxScrollY = (documentHeight - viewportHeight);\r\n      \r\n      // Get the current scroll position of the document.\r\n      let currentScrollX = container.scrollLeft;\r\n      let currentScrollY = container.scrollTop;\r\n      if (isBody) {\r\n        currentScrollX = window.scrollX;\r\n        currentScrollY = window.scrollY;\r\n      }\r\n      \r\n      // Determine if the window can be scrolled in any particular direction.\r\n      const canScrollUp = (currentScrollY > 0);\r\n      const canScrollDown = (currentScrollY < maxScrollY);\r\n      const canScrollLeft = (currentScrollX > 0);\r\n      const canScrollRight = (currentScrollX < maxScrollX);\r\n      \r\n      return {\r\n        documentWidth,\r\n        documentHeight,\r\n        maxScrollX,\r\n        maxScrollY,\r\n        currentScrollX,\r\n        currentScrollY,\r\n        canScroll: (canScrollUp || canScrollDown || canScrollLeft || canScrollRight),\r\n        canScrollUp,\r\n        canScrollDown,\r\n        canScrollLeft,\r\n        canScrollRight\r\n      };\r\n    }\r\n\r\n    // Determine whether the user is able to scroll based on current edge position and scroll of the container\r\n    function canBeScrolledInCurrentDirection (container, edgeSize, edgeParams, scrollParams) {\r\n      const {\r\n        viewportX,\r\n        viewportY,\r\n        isInLeftEdge,\r\n        isInRightEdge,\r\n        isInTopEdge,\r\n        isInBottomEdge,\r\n        edgeTop,\r\n        edgeLeft,\r\n        edgeBottom,\r\n        edgeRight\r\n      } = edgeParams;\r\n      \r\n      const {\r\n        maxScrollX,\r\n        maxScrollY,\r\n        currentScrollX,\r\n        currentScrollY,\r\n        canScrollUp,\r\n        canScrollLeft,\r\n        canScrollDown,\r\n        canScrollRight\r\n      } = scrollParams;\r\n      \r\n      // Since we can potentially scroll in two directions at the same time,\r\n      // let's keep track of the next scroll, starting with the current scroll.\r\n      // Each of these values can then be adjusted independently in the logic\r\n      // below.\r\n      let nextScrollX = currentScrollX;\r\n      let nextScrollY = currentScrollY;\r\n      \r\n      // As we examine the mouse position within the edge, we want to make the\r\n      // incremental scroll changes more \"intense\" the closer that the user\r\n      // gets the viewport edge. As such, we'll calculate the percentage that\r\n      // the user has made it \"through the edge\" when calculating the delta.\r\n      // Then, that use that percentage to back-off from the \"max\" step value.\r\n      const maxStep = 50;\r\n      \r\n      // Should we scroll left?\r\n      if (isInLeftEdge && canScrollLeft) {\r\n        const intensity = ((edgeLeft - viewportX) / edgeSize);\r\n        nextScrollX = (nextScrollX - (maxStep * intensity));\r\n      }\r\n      // Should we scroll right?\r\n      else if (isInRightEdge && canScrollRight) {\r\n        const intensity = ((viewportX - edgeRight) / edgeSize);\r\n        nextScrollX = (nextScrollX + (maxStep * intensity));\r\n      }\r\n      \r\n      // Should we scroll up?\r\n      if (isInTopEdge && canScrollUp) {\r\n        const intensity = ((edgeTop - viewportY) / edgeSize);\r\n        nextScrollY = (nextScrollY - (maxStep * intensity));\r\n      }\r\n      // Should we scroll down?\r\n      else if (isInBottomEdge && canScrollDown) {\r\n        const intensity = ((viewportY - edgeBottom) / edgeSize);\r\n        nextScrollY = (nextScrollY + (maxStep * intensity));\r\n      }\r\n      \r\n      // Sanitize invalid maximums. An invalid scroll offset won't break the\r\n      // subsequent .scrollTo() call; however, it will make it harder to\r\n      // determine if the .scrollTo() method should have been called in the\r\n      // first place.\r\n      nextScrollX = Math.max(0, Math.min(maxScrollX, nextScrollX));\r\n      nextScrollY = Math.max(0, Math.min(maxScrollY, nextScrollY));\r\n      \r\n      if ((nextScrollX !== currentScrollX) || (nextScrollY !== currentScrollY)) {\r\n        return { nextScrollX, nextScrollY };\r\n      }\r\n      return null;\r\n    }\r\n\r\n    /** Main function to determine whether a node can be scrolled based on current cursor pos and container edge + scroll pos **/\r\n    function isContainerReadyToEdgeScroll (container, clientX, clientY, edgeSize) {\r\n      // Check that the user's cursor is currently within an edge of this scrollable container\r\n      const edgeParams = isInEdge(container, clientX, clientY, edgeSize);\r\n      if (!edgeParams) {\r\n        return false;\r\n      }\r\n      \r\n      // Check that the scrollable container still has remaining X or Y scroll\r\n      const { viewportWidth, viewportHeight } = edgeParams;\r\n      const scrollParams = canContainerBeScrolled(container, viewportWidth, viewportHeight);\r\n      if (!scrollParams.canScroll) {\r\n        return false;\r\n      }\r\n      \r\n      // Check that the current cursor position sits within an edge and has remaining scroll to go\r\n      const canScrollInCurrDirection = canBeScrolledInCurrentDirection(container, edgeSize, edgeParams, scrollParams);\r\n      return !!canScrollInCurrDirection;\r\n    }\r\n\r\n    /** Main function for performing scroll action **/\r\n    function performEdgeScroll (container, clientX, clientY, edgeSize) {\r\n      if (!container || !edgeSize) {\r\n        cancelScrollAction();\r\n        return false;\r\n      }\r\n      \r\n      // NOTE: Much of the information here, with regard to document dimensions,\r\n      // viewport dimensions, and window scrolling is derived from JavaScript.info.\r\n      // I am consuming it here primarily as NOTE TO SELF.\r\n      // --\r\n      // Read More: https://javascript.info/size-and-scroll-window\r\n      // --\r\n      // CAUTION: The viewport and document dimensions can all be CACHED and then\r\n      // recalculated on window-resize events (for the most part). I am keeping it\r\n      // all here in the mousemove event handler to remove as many of the moving\r\n      // parts as possible and keep the demo as simple as possible.\r\n      \r\n      // If the mouse is not in the viewport edge, there's no need to calculate\r\n      // anything else.\r\n      const edgeParams = isInEdge(container, clientX, clientY, edgeSize);\r\n      if (!edgeParams) {\r\n        cancelScrollAction();\r\n        return false;\r\n      }\r\n      \r\n      const { viewportWidth, viewportHeight } = edgeParams;\r\n      \r\n      // If we made it this far, the user's mouse is located within the edge of the\r\n      // viewport. As such, we need to check to see if scrolling needs to be done.\r\n      \r\n      // As we examine the mousemove event, we want to adjust the window scroll in\r\n      // immediate response to the event; but, we also want to continue adjusting\r\n      // the window scroll if the user rests their mouse in the edge boundary. To\r\n      // do this, we'll invoke the adjustment logic immediately. Then, we'll setup\r\n      // a timer that continues to invoke the adjustment logic while the window can\r\n      // still be scrolled in a particular direction.\r\n      (function checkForWindowScroll () {\r\n        cancelScrollAction();\r\n        \r\n        if (adjustWindowScroll()) {\r\n          timer = setTimeout( checkForWindowScroll, 30 );\r\n        }\r\n      })();\r\n      \r\n      // Adjust the window scroll based on the user's mouse position. Returns True\r\n      // or False depending on whether or not the window scroll was changed.\r\n      function adjustWindowScroll () {\r\n        const scrollParams = canContainerBeScrolled(container, viewportWidth, viewportHeight);\r\n\r\n        const nextScrollParams = canBeScrolledInCurrentDirection(container, edgeSize, edgeParams, scrollParams);\r\n        if (nextScrollParams) {\r\n          const { nextScrollX, nextScrollY } = nextScrollParams;\r\n          (isBodyContainer(container) ? window : container).scrollTo(nextScrollX, nextScrollY);\r\n          return true;\r\n        }\r\n        \r\n        return false;\r\n      }\r\n      \r\n      return true;\r\n    }\n\n    var DragMixin = {\r\n      mixins: [DragAwareMixin],\r\n      props: {\r\n        type: {\r\n          type: String,\r\n          default: null\r\n        },\r\n        data: {\r\n          default: null\r\n        },\r\n        dragImageOpacity: {\r\n          type: Number,\r\n          default: 0.7\r\n        },\r\n        disabled: {\r\n          type: Boolean,\r\n          default: false\r\n        },\r\n        goBack: {\r\n          type: Boolean,\r\n          default: false\r\n        },\r\n        handle: {\r\n          type: String,\r\n          default: null\r\n        },\r\n        delta: {\r\n          type: Number,\r\n          default: 0\r\n        },\r\n        delay: {\r\n          type: Number,\r\n          default: 0\r\n        },\r\n        dragClass: {\r\n          type: String,\r\n          default: null\r\n        },\r\n        vibration: {\r\n          type: Number,\r\n          default: 0\r\n        },\r\n        scrollingEdgeSize: {\r\n          type: Number,\r\n          default: 100\r\n        }\r\n      },\r\n      emits: ['dragstart', 'dragend', 'cut', 'copy'],\r\n      data () {\r\n        return {\r\n          dragInitialised: false,\r\n          dragStarted: false,\r\n          ignoreNextClick: false,\r\n          initialUserSelect: null,\r\n          downEvent: null,\r\n          startPosition: null,\r\n          delayTimer: null,\r\n          scrollContainer: null\r\n        };\r\n      },\r\n      computed: {\r\n        cssClasses () {\r\n          const clazz = {\r\n            'dnd-drag': true\r\n          };\r\n          if (!this.disabled) {\r\n            return {\r\n              ...clazz,\r\n              'drag-source': this.dragInProgress && this.dragSource === this,\r\n              'drag-mode-copy': this.currentDropMode === 'copy',\r\n              'drag-mode-cut': this.currentDropMode === 'cut',\r\n              'drag-mode-reordering': this.currentDropMode === 'reordering',\r\n              'drag-no-handle': !this.handle\r\n            };\r\n          }\r\n          else {\r\n            return clazz;\r\n          }\r\n        },\r\n        currentDropMode () {\r\n          if (this.dragInProgress && this.dragSource === this) {\r\n            if (this.dragTop && this.dragTop['dropAllowed']) {\r\n              if (this.dragTop['reordering']) {\r\n                return 'reordering';\r\n              }\r\n              else {\r\n                return this.dragTop['mode'];\r\n              }\r\n            }\r\n            else {\r\n              return null;\r\n            }\r\n          }\r\n          else {\r\n            return null;\r\n          }\r\n        }\r\n      },\r\n      methods: {\r\n        onSelectStart (e) {\r\n          e.stopPropagation();\r\n          e.preventDefault();\r\n        },\r\n        performVibration () {\r\n          // If browser can perform vibration and user has defined a vibration, perform it\r\n          if (this.vibration > 0 && window.navigator && window.navigator.vibrate) {\r\n            window.navigator.vibrate(this.vibration);\r\n          }\r\n        },\r\n        onMouseDown (e) {\r\n          let target = null;\r\n          let goodButton = false;\r\n          if (e.type === 'mousedown') {\r\n            const mouse = e;\r\n            target = e.target;\r\n            goodButton = mouse.buttons === 1;\r\n          }\r\n          else {\r\n            const touch = e;\r\n            target = touch.touches[0].target;\r\n            goodButton = true;\r\n          }\r\n\r\n          if (this.disabled || this.downEvent !== null || !goodButton) {\r\n            return;\r\n          }\r\n\r\n          // Check that the target element is eligible for starting a drag\r\n          // Includes checking against the handle selector\r\n          //   or whether the element contains 'dnd-no-drag' class (which should disable dragging from that\r\n          //   sub-element of a draggable parent)\r\n          const goodTarget = !target.matches('.dnd-no-drag, .dnd-no-drag *') &&\r\n                  (\r\n                    !this.handle ||\r\n                    target.matches(this.handle + ', ' + this.handle + ' *')\r\n                  );\r\n\r\n          if (!goodTarget) {\r\n            return;\r\n          }\r\n\r\n          this.scrollContainer = scrollparent(target);\r\n          this.initialUserSelect = document.body.style.userSelect;\r\n          document.documentElement.style.userSelect = 'none'; // Permet au drag de se poursuivre normalement même\r\n          // quand on quitte un élémént avec overflow: hidden.\r\n          this.dragStarted = false;\r\n          this.downEvent = e;\r\n          if (this.downEvent.type === 'mousedown') {\r\n            const mouse = e;\r\n            this.startPosition = {\r\n              x: mouse.clientX,\r\n              y: mouse.clientY\r\n            };\r\n          }\r\n          else {\r\n            const touch = e;\r\n            this.startPosition = {\r\n              x: touch.touches[0].clientX,\r\n              y: touch.touches[0].clientY\r\n            };\r\n          }\r\n\r\n          if (this.delay) {\r\n            this.dragInitialised = false;\r\n            clearTimeout(this.delayTimer);\r\n            this.delayTimer = setTimeout(() => {\r\n              this.dragInitialised = true;\r\n              this.performVibration();\r\n            }, this.delay);\r\n          }\r\n          else {\r\n            this.dragInitialised = true;\r\n            this.performVibration();\r\n          }\r\n\r\n          document.addEventListener('click', this.onMouseClick, true);\r\n          document.addEventListener('mouseup', this.onMouseUp);\r\n          document.addEventListener('touchend', this.onMouseUp);\r\n          document.addEventListener('selectstart', this.onSelectStart);\r\n          document.addEventListener('keyup', this.onKeyUp);\r\n\r\n          setTimeout(() => {\r\n            document.addEventListener('mousemove', this.onMouseMove);\r\n            document.addEventListener('touchmove', this.onMouseMove, { passive: false });\r\n            document.addEventListener('easy-dnd-move', this.onEasyDnDMove);\r\n          }, 0);\r\n\r\n          // Prevents event from bubbling to ancestor drag components and initiate several drags at the same time\r\n          e.stopPropagation();\r\n        },\r\n        // Prevent the user from accidentally causing a click event\r\n        // if they have just attempted a drag event\r\n        onMouseClick (e) {\r\n          if (this.ignoreNextClick) {\r\n            e.preventDefault();\r\n            e.stopPropagation && e.stopPropagation();\r\n            e.stopImmediatePropagation && e.stopImmediatePropagation();\r\n            this.ignoreNextClick = false;\r\n            return false;\r\n          }\r\n        },\r\n        onMouseMove (e) {\r\n          // We ignore the mousemove event that follows touchend :\r\n          if (this.downEvent === null) return;\r\n\r\n          // On touch devices, we ignore fake mouse events and deal with touch events only.\r\n          if (this.downEvent.type === 'touchstart' && e.type === 'mousemove') return;\r\n\r\n          // Find out event target and pointer position :\r\n          let target = null;\r\n          let x = null;\r\n          let y = null;\r\n          if (e.type === 'touchmove') {\r\n            const touch = e;\r\n            x = touch.touches[0].clientX;\r\n            y = touch.touches[0].clientY;\r\n            target = document.elementFromPoint(x, y);\r\n            if (!target) {\r\n              // Mouse going off screen. Ignore event.\r\n              return;\r\n            }\r\n          }\r\n          else {\r\n            const mouse = e;\r\n            x = mouse.clientX;\r\n            y = mouse.clientY;\r\n            target = mouse.target;\r\n          }\r\n\r\n          // Distance between current event and start position :\r\n          const dist = Math.sqrt(Math.pow(this.startPosition.x - x, 2) + Math.pow(this.startPosition.y - y, 2));\r\n\r\n          // If the drag has not begun yet and distance from initial point is greater than delta, we start the drag :\r\n          if (!this.dragStarted && dist > this.delta) {\r\n            // If they have dragged greater than the delta before the delay period has ended,\r\n            // It means that they attempted to perform another action (such as scrolling) on the page\r\n            if (!this.dragInitialised) {\r\n              clearTimeout(this.delayTimer);\r\n            }\r\n            else {\r\n              this.ignoreNextClick = true;\r\n              this.dragStarted = true;\r\n              dnd.startDrag(this, this.downEvent, this.startPosition.x, this.startPosition.y, this.type, this.data);\r\n              document.documentElement.classList.add('drag-in-progress');\r\n            }\r\n          }\r\n\r\n          // Dispatch custom easy-dnd-move event :\r\n          if (this.dragStarted) {\r\n            // If cursor/touch is at edge of container, perform scroll if available\r\n            // If this.dragTop is defined, it means they are dragging on top of another DropList/EasyDnd component\r\n            // if dropTop is a DropList, use the scrollingEdgeSize of that container if it exists, otherwise use the scrollingEdgeSize of the Drag component\r\n            const currEdgeSize = this.dragTop && this.dragTop.$props.scrollingEdgeSize !== undefined ?\r\n              this.dragTop.$props.scrollingEdgeSize :\r\n              this.scrollingEdgeSize;\r\n\r\n            if (currEdgeSize) {\r\n              // Create an array of all scrollable elements going upward until the body is hit\r\n              let currScrollContainer = this.dragTop ? scrollparent(this.dragTop.$el) : this.scrollContainer;\r\n              const nodes = [currScrollContainer];\r\n              do {\r\n                if (currScrollContainer === document.body) {\r\n                  break;\r\n                }\r\n                \r\n                currScrollContainer = scrollparent(currScrollContainer.parentNode);\r\n                if (!currScrollContainer || currScrollContainer === document.body) {\r\n                  break;\r\n                }\r\n                nodes.push(currScrollContainer);\r\n              } while (currScrollContainer && currScrollContainer !== document.body);\r\n              \r\n              // Iterate through all these nodes starting from the closest to body, and work towards current node\r\n              for (let i = nodes.length - 1; i >= 0; i--) {\r\n                cancelScrollAction();\r\n                const thisNode = nodes[i];\r\n                \r\n                // Check that the current cursor pos + edge of container + scroll pos of container allows user\r\n                //  to start/continue scrolling in current direction\r\n                if (isContainerReadyToEdgeScroll(thisNode, x, y, currEdgeSize)) {\r\n                  performEdgeScroll(thisNode, x, y, currEdgeSize);\r\n                  break;\r\n                }\r\n              }\r\n            }\r\n            else {\r\n              cancelScrollAction();\r\n            }\r\n\r\n            const custom = new CustomEvent('easy-dnd-move', {\r\n              bubbles: true,\r\n              cancelable: true,\r\n              detail: {\r\n                x,\r\n                y,\r\n                native: e\r\n              }\r\n            });\r\n            target.dispatchEvent(custom);\r\n          }\r\n\r\n          // Prevent scroll on touch devices if they were performing a drag\r\n          if (this.dragInitialised && e.cancelable) {\r\n            e.preventDefault();\r\n          }\r\n        },\r\n        onEasyDnDMove (e) {\r\n          dnd.mouseMove(e, null);\r\n        },\r\n        onMouseUp (e) {\r\n          // On touch devices, we ignore fake mouse events and deal with touch events only.\r\n          if (this.downEvent.type === 'touchstart' && e.type === 'mouseup') return;\r\n\r\n          // This delay makes sure that when the click event that results from the mouseup is produced, the drag is\r\n          // still in progress. So by checking the flag dnd.inProgress, one can tell apart true clicks from drag and\r\n          // drop artefacts.\r\n          setTimeout(() => {\r\n            this.cancelDragActions();\r\n\r\n            if (this.dragStarted) {\r\n              dnd.stopDrag(e);\r\n            }\r\n            this.finishDrag();\r\n          }, 0);\r\n        },\r\n        onKeyUp (e) {\r\n          // If ESC is pressed, cancel the drag\r\n          if (e.key === 'Escape') {\r\n            this.cancelDragActions();\r\n\r\n            setTimeout(() => {\r\n              dnd.cancelDrag(e);\r\n              this.finishDrag();\r\n            }, 0);\r\n          }\r\n        },\r\n        cancelDragActions () {\r\n          this.dragInitialised = false;\r\n          clearTimeout(this.delayTimer);\r\n          cancelScrollAction();\r\n        },\r\n        finishDrag () {\r\n          this.downEvent = null;\r\n          this.scrollContainer = null;\r\n\r\n          if (this.dragStarted) {\r\n            document.documentElement.classList.remove('drag-in-progress');\r\n          }\r\n          document.removeEventListener('click', this.onMouseClick, true);\r\n          document.removeEventListener('mousemove', this.onMouseMove);\r\n          document.removeEventListener('touchmove', this.onMouseMove);\r\n          document.removeEventListener('easy-dnd-move', this.onEasyDnDMove);\r\n          document.removeEventListener('mouseup', this.onMouseUp);\r\n          document.removeEventListener('touchend', this.onMouseUp);\r\n          document.removeEventListener('selectstart', this.onSelectStart);\r\n          document.removeEventListener('keyup', this.onKeyUp);\r\n          document.documentElement.style.userSelect = this.initialUserSelect;\r\n        },\r\n        dndDragStart (ev) {\r\n          if (ev.source === this) {\r\n            this.$emit('dragstart', ev);\r\n          }\r\n        },\r\n        dndDragEnd (ev) {\r\n          if (ev.source === this) {\r\n            this.$emit('dragend', ev);\r\n          }\r\n        },\r\n        createDragImage (selfTransform) {\r\n          let image;\r\n          if (this.$slots['drag-image']) {\r\n            const el = this.$refs['drag-image'] || document.createElement('div');\r\n            if (el.childElementCount !== 1) {\r\n              image = createDragImage(el);\r\n            }\r\n            else {\r\n              image = createDragImage(el.children.item(0));\r\n            }\r\n          }\r\n          else {\r\n            image = createDragImage(this.$el);\r\n            image.style.transform = selfTransform;\r\n          }\r\n\r\n          if (this.dragClass) {\r\n            image.classList.add(this.dragClass);\r\n          }\r\n          image.classList.add('dnd-ghost');\r\n          image['__opacity'] = this.dragImageOpacity;\r\n          return image;\r\n        }\r\n      },\r\n      created () {\r\n        dnd.on('dragstart', this.dndDragStart);\r\n        dnd.on('dragend', this.dndDragEnd);\r\n      },\r\n      mounted () {\r\n        this.$el.addEventListener('mousedown', this.onMouseDown, { passive: true });\r\n        this.$el.addEventListener('touchstart', this.onMouseDown, { passive: true });\r\n      },\r\n      beforeUnmount () {\r\n        dnd.off('dragstart', this.dndDragStart);\r\n        dnd.off('dragend', this.dndDragEnd);\r\n\r\n        this.$el.removeEventListener('mousedown', this.onMouseDown);\r\n        this.$el.removeEventListener('touchstart', this.onMouseDown);\r\n      }\r\n    };\n\n    var script$4 = {\r\n      name: 'Drag',\r\n      mixins: [DragMixin],\r\n      props: {\r\n        /**\r\n         * Tag to be used as root of this component. Defaults to div.\r\n         */\r\n        tag: {\r\n          type: [String, Object, Function],\r\n          default: 'div'\r\n        }\r\n      },\r\n      computed: {\r\n        dynamicSlots () {\r\n          return Object.entries(this.$slots).filter(([key]) => key !== 'drag-image' && key !== 'default');\r\n        }\r\n      }\r\n    };\n\n    const _hoisted_1$2 = {\n      key: 0,\n      ref: \"drag-image\",\n      class: \"__drag-image\"\n    };\n\n    function render$3(_ctx, _cache, $props, $setup, $data, $options) {\n      return (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($props.tag), {\n        class: vue.normalizeClass(_ctx.cssClasses)\n      }, vue.createSlots({\n        default: vue.withCtx(() => [\n          vue.renderSlot(_ctx.$slots, \"default\", vue.normalizeProps(vue.guardReactiveProps(_ctx.$slots['default'] || {}))),\n          (_ctx.dragInitialised)\n            ? (vue.openBlock(), vue.createElementBlock(\"div\", _hoisted_1$2, [\n                vue.renderSlot(_ctx.$slots, \"drag-image\")\n              ], 512 /* NEED_PATCH */))\n            : vue.createCommentVNode(\"v-if\", true)\n        ]),\n        _: 2 /* DYNAMIC */\n      }, [\n        vue.renderList($options.dynamicSlots, ([slot, args]) => {\n          return {\n            name: slot,\n            fn: vue.withCtx(() => [\n              vue.renderSlot(_ctx.$slots, slot, vue.normalizeProps(vue.guardReactiveProps(args)))\n            ])\n          }\n        })\n      ]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"class\"]))\n    }\n\n    script$4.render = render$3;\n    script$4.__scopeId = \"data-v-f87407ce\";\n\n    function dropAllowed (inst) {\r\n      if (inst.dragInProgress && inst.typeAllowed) {\r\n        return inst.compatibleMode && inst.effectiveAcceptsData(inst.dragData, inst.dragType);\r\n      }\r\n      return null;\r\n    }\r\n\r\n    function doDrop (inst, event) {\r\n      inst.$emit('drop', event);\r\n      event.source.$emit(inst.mode, event);\r\n    }\r\n\r\n    function candidate (inst, type) {\r\n      return inst.effectiveAcceptsType(type);\r\n    }\r\n\r\n    var DropMixin = {\r\n      mixins: [DragAwareMixin],\r\n      props: {\r\n        acceptsType: {\r\n          type: [String, Array, Function],\r\n          default: null\r\n        },\r\n        acceptsData: {\r\n          type: Function,\r\n          default: () => {\r\n            return true;\r\n          }\r\n        },\r\n        mode: {\r\n          type: String,\r\n          default: 'copy'\r\n        },\r\n        dragImageOpacity: {\r\n          type: Number,\r\n          default: 0.7\r\n        }\r\n      },\r\n      emits: ['dragover', 'dragenter', 'dragleave', 'dragend', 'drop'],\r\n      data () {\r\n        return {\r\n          isDrop: true\r\n        };\r\n      },\r\n      computed: {\r\n        compatibleMode () {\r\n          return this.dragInProgress ? true : null;\r\n        },\r\n        dropIn () {\r\n          if (this.dragInProgress) {\r\n            return this.dragTop === this;\r\n          }\r\n          return null;\r\n        },\r\n        typeAllowed () {\r\n          if (this.dragInProgress) {\r\n            return this.effectiveAcceptsType(this.dragType);\r\n          }\r\n          return null;\r\n        },\r\n        dropAllowed () {\r\n          return dropAllowed(this);\r\n        },\r\n        cssClasses () {\r\n          const clazz = {\r\n            'dnd-drop': true\r\n          };\r\n          if (this.dropIn !== null) {\r\n            clazz['drop-in'] = this.dropIn;\r\n            clazz['drop-out'] = !this.dropIn;\r\n          }\r\n          if (this.typeAllowed !== null) {\r\n            clazz['type-allowed'] = this.typeAllowed;\r\n            clazz['type-forbidden'] = !this.typeAllowed;\r\n          }\r\n          if (this.dropAllowed !== null) {\r\n            clazz['drop-allowed'] = this.dropAllowed;\r\n            clazz['drop-forbidden'] = !this.dropAllowed;\r\n          }\r\n          return clazz;\r\n        }\r\n      },\r\n      methods: {\r\n        effectiveAcceptsType (type) {\r\n          if (this.acceptsType === null) {\r\n            return true;\r\n          }\r\n          else if (typeof (this.acceptsType) === 'string' || typeof(this.acceptsType) === 'number') {\r\n            return this.acceptsType === type;\r\n          }\r\n          else if (typeof (this.acceptsType) === 'object' && Array.isArray(this.acceptsType)) {\r\n            return this.acceptsType.includes(type);\r\n          }\r\n          else {\r\n            return this.acceptsType(type);\r\n          }\r\n        },\r\n        effectiveAcceptsData (data, type) {\r\n          return this.acceptsData(data, type);\r\n        },\r\n        onDragPositionChanged (event) {\r\n          if (this === event.top) {\r\n            this.$emit('dragover', event);\r\n          }\r\n        },\r\n        onDragTopChanged (event) {\r\n          if (this === event.top) {\r\n            this.$emit('dragenter', event);\r\n          }\r\n          if (this === event.previousTop) {\r\n            this.$emit('dragleave', event);\r\n          }\r\n        },\r\n        onDragEnd (event) {\r\n          if (this === event.top) {\r\n            this.$emit('dragend', event);\r\n          }\r\n        },\r\n        onDrop (event) {\r\n          if (this.dropIn && this.compatibleMode && this.dropAllowed) {\r\n            this.doDrop(event);\r\n          }\r\n        },\r\n        doDrop (event) {\r\n          doDrop(this, event);\r\n        },\r\n        /**\r\n             * Returns true if the current drop area participates in the current drag operation.\r\n             */\r\n        candidate (type) {\r\n          return candidate(this, type);\r\n        },\r\n        createDragImage () {\r\n          let image = 'source';\r\n          if (this.$refs['drag-image']) {\r\n            const el = this.$refs['drag-image'];\r\n            if (el.childElementCount !== 1) {\r\n              image = createDragImage(el);\r\n            }\r\n            else {\r\n              image = createDragImage(el.children.item(0));\r\n            }\r\n            image['__opacity'] = this.dragImageOpacity;\r\n            image.classList.add('dnd-ghost');\r\n          }\r\n          return image;\r\n        },\r\n        onDnDMove (e) {\r\n          dnd.mouseMove(e, this);\r\n        }\r\n      },\r\n      created () {\r\n        dnd.on('dragpositionchanged', this.onDragPositionChanged);\r\n        dnd.on('dragtopchanged', this.onDragTopChanged);\r\n        dnd.on('drop', this.onDrop);\r\n        dnd.on('dragend', this.onDragEnd);\r\n      },\r\n      mounted () {\r\n        this.$el.addEventListener('easy-dnd-move', this.onDnDMove);\r\n      },\r\n      beforeUnmount () {\r\n        this.$el.removeEventListener('easy-dnd-move', this.onDnDMove);\r\n\r\n        dnd.off('dragpositionchanged', this.onDragPositionChanged);\r\n        dnd.off('dragtopchanged', this.onDragTopChanged);\r\n        dnd.off('drop', this.onDrop);\r\n        dnd.off('dragend', this.onDragEnd);\r\n      }\r\n    };\n\n    var script$3 = {\r\n      name: 'Drop',\r\n      mixins: [DropMixin],\r\n      props: {\r\n        tag: {\r\n          type: [String, Object, Function],\r\n          default: 'div'\r\n        }\r\n      },\r\n      computed: {\r\n        dynamicSlots () {\r\n          return Object.entries(this.$slots).filter(([key]) => key !== 'drag-image' && key !== 'default');\r\n        },\r\n        showDragImage () {\r\n          return this.dragInProgress && this.typeAllowed && !!this.$slots['drag-image'];\r\n        }\r\n      }\r\n    };\n\n    const _hoisted_1$1 = {\n      key: 0,\n      ref: \"drag-image\",\n      class: \"__drag-image\"\n    };\n\n    function render$2(_ctx, _cache, $props, $setup, $data, $options) {\n      return (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($props.tag), {\n        class: vue.normalizeClass(_ctx.cssClasses)\n      }, vue.createSlots({\n        default: vue.withCtx(() => [\n          vue.renderSlot(_ctx.$slots, \"default\", vue.normalizeProps(vue.guardReactiveProps(_ctx.$slots['default'] || {}))),\n          ($options.showDragImage)\n            ? (vue.openBlock(), vue.createElementBlock(\"div\", _hoisted_1$1, [\n                vue.renderSlot(_ctx.$slots, \"drag-image\", {\n                  type: _ctx.dragType,\n                  data: _ctx.dragData\n                })\n              ], 512 /* NEED_PATCH */))\n            : vue.createCommentVNode(\"v-if\", true)\n        ]),\n        _: 2 /* DYNAMIC */\n      }, [\n        vue.renderList($options.dynamicSlots, ([slot, args]) => {\n          return {\n            name: slot,\n            fn: vue.withCtx(() => [\n              vue.renderSlot(_ctx.$slots, slot, vue.normalizeProps(vue.guardReactiveProps(args)))\n            ])\n          }\n        })\n      ]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"class\"]))\n    }\n\n    script$3.render = render$2;\n    script$3.__scopeId = \"data-v-12a39e52\";\n\n    var script$2 = {\r\n      name: 'DropMask',\r\n      mixins: [DragAwareMixin],\r\n      props: {\r\n        tag: {\r\n          type: [String, Object, Function],\r\n          default: 'div'\r\n        }\r\n      },\r\n      data () {\r\n        return {\r\n          isDropMask: true\r\n        };\r\n      },\r\n      mounted () {\r\n        this.$el.addEventListener('easy-dnd-move', this.onDndMove);\r\n      },\r\n      beforeUnmount () {\r\n        this.$el.removeEventListener('easy-dnd-move', this.onDndMove);\r\n      },\r\n      methods: {\r\n        createDragImage () {\r\n          return 'source';\r\n        },\r\n        onDndMove (e) {\r\n          dnd.mouseMove(e, this);\r\n        }\r\n      }\r\n    };\n\n    function render$1(_ctx, _cache, $props, $setup, $data, $options) {\n      return (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($props.tag), null, vue.createSlots({ _: 2 /* DYNAMIC */ }, [\n        vue.renderList(_ctx.$slots, (args, slot) => {\n          return {\n            name: slot,\n            fn: vue.withCtx(() => [\n              vue.renderSlot(_ctx.$slots, slot, vue.normalizeProps(vue.guardReactiveProps(args)))\n            ])\n          }\n        })\n      ]), 1024 /* DYNAMIC_SLOTS */))\n    }\n\n    script$2.render = render$1;\n\n    var script$1 = {\r\n      name: 'DragFeedback'\r\n    };\n\n    const _hoisted_1 = { class: \"DragFeedback\" };\n\n    function render(_ctx, _cache, $props, $setup, $data, $options) {\n      return (vue.openBlock(), vue.createElementBlock(\"div\", _hoisted_1, [\n        vue.renderSlot(_ctx.$slots, \"default\")\n      ]))\n    }\n\n    script$1.render = render;\n\n    class Grid {\r\n        reference;\r\n        referenceOriginalPosition;\r\n        magnets = [];\r\n\r\n        constructor (collection, upToIndex, direction, fromIndex) {\r\n          this.reference = collection.item(0).parentNode;\r\n          this.referenceOriginalPosition = {\r\n            x: this.reference.getBoundingClientRect().left - this.reference.scrollLeft,\r\n            y: this.reference.getBoundingClientRect().top - this.reference.scrollTop,\r\n          };\r\n          let index = 0;\r\n          for (const child of collection) {\r\n            if (index > upToIndex) break;\r\n            const rect = child.getBoundingClientRect();\r\n            const hasNestedDrop = child.classList.contains('dnd-drop') || child.getElementsByClassName('dnd-drop').length > 0;\r\n            let horizontal = false;\r\n            if (hasNestedDrop) {\r\n              if (direction === 'auto') {\r\n                // Auto mode not supported for now. Row or column must be defined explicitly if there are nested drop lists.\r\n                throw 'Easy-DnD error : a drop list is missing one of these attributes : \\'row\\' or \\'column\\'.';\r\n              }\r\n              else {\r\n                horizontal = direction === 'row';\r\n              }\r\n            }\r\n            if (fromIndex === null) {\r\n              // Inserting mode.\r\n              this.magnets.push(hasNestedDrop ? this.before(rect, horizontal) : this.center(rect));\r\n            }\r\n            else {\r\n              // Reordering mode.\r\n              this.magnets.push(hasNestedDrop ? (\r\n                fromIndex < index ? this.after : this.before\r\n              )(rect, horizontal) : this.center(rect));\r\n            }\r\n            // Debug : show magnets :\r\n            //document.body.insertAdjacentHTML(\"beforeend\", \"<div style='background-color: red; position: fixed; width: 1px; height: 1px; top:\" + this.magnets[index].y + \"px; left:\" + this.magnets[index].x + \"px;' ></div>\")\r\n            index++;\r\n          }\r\n        }\r\n\r\n        /**\r\n         * Returns the center of the rectangle.\r\n         */\r\n        center (rect) {\r\n          return {\r\n            x: rect.left + rect.width / 2,\r\n            y: rect.top + rect.height / 2\r\n          };\r\n        }\r\n\r\n        /**\r\n         * When horizontal is true / false, returns middle of the left / top side of the rectangle.\r\n         */\r\n        before (rect, horizontal) {\r\n          return horizontal ? {\r\n            x: rect.left,\r\n            y: rect.top + rect.height / 2\r\n          } : {\r\n            x: rect.left + rect.width / 2,\r\n            y: rect.top\r\n          };\r\n        }\r\n\r\n        /**\r\n         * When horizontal is true / false, returns middle of the right / bottom side of the rectangle.\r\n         */\r\n        after (rect, horizontal) {\r\n          return horizontal ? {\r\n            x: rect.left + rect.width,\r\n            y: rect.top + rect.height / 2\r\n          } : {\r\n            x: rect.left + rect.width / 2,\r\n            y: rect.top + rect.height\r\n          };\r\n        }\r\n\r\n        /**\r\n         * In case the user scrolls during the drag, the position of the magnets are not what they used to be when the drag\r\n         * started. A correction must be applied that takes into account the amount of scroll. This correction is the\r\n         * difference between the current position of the parent element and its position when the drag started.\r\n         */\r\n        correction () {\r\n          return {\r\n            x: this.reference.getBoundingClientRect().left  - this.reference.scrollLeft - this.referenceOriginalPosition.x,\r\n            y: this.reference.getBoundingClientRect().top - this.reference.scrollTop - this.referenceOriginalPosition.y,\r\n          };\r\n        }\r\n\r\n        closestIndex (position) {\r\n          const x = position.x - this.correction().x;\r\n          const y = position.y - this.correction().y;\r\n          let minDist = 999999;\r\n          let index = -1;\r\n          for (let i = 0; i < this.magnets.length; i++) {\r\n            const magnet = this.magnets[i];\r\n            const dist = Math.sqrt(Math.pow(magnet.x - x, 2) + Math.pow(magnet.y - y, 2));\r\n            if (dist < minDist) {\r\n              minDist = dist;\r\n              index = i;\r\n            }\r\n          }\r\n          return index;\r\n        }\r\n    }\n\n    class DnDEvent {\r\n        type;\r\n        data;\r\n        top;\r\n        previousTop;\r\n        source;\r\n        position;\r\n        success;\r\n        native;\r\n    }\r\n\r\n    class ReorderEvent {\r\n        from;\r\n        to;\r\n        \r\n        constructor (from, to) {\r\n          this.from = from;\r\n          this.to = to;\r\n        }\r\n\r\n        apply (array) {\r\n          const temp = array[this.from];\r\n          array.splice(this.from, 1);\r\n          array.splice(this.to, 0, temp);\r\n        }\r\n\r\n    }\r\n\r\n    class InsertEvent {\r\n        type;\r\n        data;\r\n        index;\r\n        \r\n        constructor (type, data, index) {\r\n          this.type = type;\r\n          this.data = data;\r\n          this.index = index;\r\n        }\r\n    }\n\n    var script = {\r\n      name: 'DropList',\r\n      mixins: [DropMixin],\r\n      props: {\r\n        tag: {\r\n          type: [String, Object, Function],\r\n          default: 'div'\r\n        },\r\n        items: {\r\n          type: Array,\r\n          required: true\r\n        },\r\n        row: {\r\n          type: Boolean,\r\n          default: false\r\n        },\r\n        column: {\r\n          type: Boolean,\r\n          default: false\r\n        },\r\n        noAnimations: {\r\n          type: Boolean,\r\n          default: false\r\n        },\r\n        scrollingEdgeSize: {\r\n          type: Number,\r\n          default: undefined\r\n        }\r\n      },\r\n      emits: ['reorder', 'insert'],\r\n      data () {\r\n        return {\r\n          grid: null,\r\n          forbiddenKeys: [],\r\n          feedbackKey: null,\r\n          fromIndex: null\r\n        };\r\n      },\r\n      computed: {\r\n        rootTag () {\r\n          if (this.noAnimations) {\r\n            return this.tag;\r\n          }\r\n          return vue.TransitionGroup;\r\n        },\r\n        rootProps () {\r\n          if (this.noAnimations) {\r\n            return {};\r\n          }\r\n\r\n          return {\r\n            tag: this.tag,\r\n            css: false\r\n          };\r\n        },\r\n        direction () {\r\n          // todo - rewrite this logic\r\n          if (this.row) return 'row';\r\n          if (this.column) return 'column';\r\n          return 'auto';\r\n        },\r\n        reordering () {\r\n          if (dnd.inProgress) {\r\n            return dnd.source.$el.parentElement === this.$el;\r\n          }\r\n          return null;\r\n        },\r\n        closestIndex () {\r\n          if (this.grid) {\r\n            return this.grid.closestIndex(dnd.position);\r\n          }\r\n          return null;\r\n        },\r\n        dropAllowed () {\r\n          if (this.dragInProgress) {\r\n            if (this.reordering) {\r\n              return this.items.length > 1;\r\n            }\r\n            else {\r\n              // todo - eventually refactor so that this isn't necessary\r\n              if (!dropAllowed(this)) {\r\n                return false;\r\n              }\r\n\r\n              if (this.forbiddenKeys !== null && this.feedbackKey !== null) {\r\n                return !this.forbiddenKeys.includes(this.feedbackKey);\r\n              }\r\n\r\n              return true;\r\n            }\r\n          }\r\n\r\n          return null;\r\n        },\r\n        itemsBeforeFeedback () {\r\n          if (this.closestIndex === 0) {\r\n            return [];\r\n          }\r\n          return this.items.slice(0, this.closestIndex);\r\n        },\r\n        itemsAfterFeedback () {\r\n          if (this.closestIndex === this.items.length) {\r\n            return [];\r\n          }\r\n          return this.items.slice(this.closestIndex);\r\n        },\r\n        itemsBeforeReorderingFeedback () {\r\n          if (this.closestIndex <= this.fromIndex) {\r\n            return this.items.slice(0, this.closestIndex);\r\n          }\r\n          return this.items.slice(0, this.closestIndex + 1);\r\n        },\r\n        itemsAfterReorderingFeedback () {\r\n          if (this.closestIndex <= this.fromIndex) {\r\n            return this.items.slice(this.closestIndex);\r\n          }\r\n          return this.items.slice(this.closestIndex + 1);\r\n        },\r\n        reorderedItems () {\r\n          const toIndex = this.closestIndex;\r\n          const reordered = [...this.items];\r\n          const temp = reordered[this.fromIndex];\r\n\r\n          reordered.splice(this.fromIndex, 1);\r\n          reordered.splice(toIndex, 0, temp);\r\n          return reordered;\r\n        },\r\n        clazz () {\r\n          return {\r\n            'drop-list': true,\r\n            'reordering': this.reordering === true,\r\n            'inserting': this.reordering === false,\r\n            ...(this.reordering === false ? this.cssClasses : { 'dnd-drop': true })\r\n          };\r\n        },\r\n        showDragFeedback () {\r\n          return this.dragInProgress && this.typeAllowed && !this.reordering;\r\n        },\r\n        showInsertingDragImage () {\r\n          return this.dragInProgress && this.typeAllowed && !this.reordering && !!this.$slots['drag-image'];\r\n        },\r\n        showReorderingDragImage () {\r\n          return this.dragInProgress && this.reordering && !!this.$slots['reordering-drag-image'];\r\n        },\r\n        hasReorderingFeedback () {\r\n          return !!this.$slots['reordering-feedback'];\r\n        },\r\n        hasEmptySlot () {\r\n          return !!this.$slots['empty'];\r\n        }\r\n      },\r\n      created () {\r\n        dnd.on('dragstart', this.onDragStart);\r\n        dnd.on('dragend', this.onDragEnd);\r\n      },\r\n      beforeUnmount () {\r\n        dnd.off('dragstart', this.onDragStart);\r\n        dnd.off('dragend', this.onDragEnd);\r\n      },\r\n      methods: {\r\n        // Presence of feedback node in the DOM and of keys in the virtual DOM required => delayed until what\r\n        // depends on drag data has been processed.\r\n        refresh () {\r\n          this.$nextTick(() => {\r\n            this.grid = this.computeInsertingGrid();\r\n            this.feedbackKey = this.computeFeedbackKey();\r\n            this.forbiddenKeys = this.computeForbiddenKeys();\r\n          });\r\n        },\r\n        onDragStart (event) {\r\n          if (this.candidate(dnd.type)) {\r\n            if (this.reordering) {\r\n              this.fromIndex = Array.prototype.indexOf.call(event.source.$el.parentElement.children, event.source.$el);\r\n              this.grid = this.computeReorderingGrid();\r\n            }\r\n            else {\r\n              this.refresh();\r\n            }\r\n          }\r\n        },\r\n        onDragEnd () {\r\n          this.fromIndex = null;\r\n          this.feedbackKey = null;\r\n          this.forbiddenKeys = null;\r\n          this.grid = null;\r\n        },\r\n        doDrop (event) {\r\n          if (this.reordering) {\r\n            if (this.fromIndex !== this.closestIndex) {\r\n              this.$emit('reorder', new ReorderEvent(\r\n                this.fromIndex,\r\n                this.closestIndex\r\n              ));\r\n            }\r\n          }\r\n          else {\r\n            // todo - eventually remove the need for this\r\n            doDrop(this, event);\r\n            this.$emit('insert', new InsertEvent(\r\n              event.type,\r\n              event.data,\r\n              this.closestIndex\r\n            ));\r\n          }\r\n        },\r\n        candidate (type) {\r\n          return candidate(this, type) || this.reordering;\r\n        },\r\n        computeForbiddenKeys () {\r\n          return (this.noAnimations ? [] : this.$refs.component.$slots['default']())\r\n            .map(vn => vn.key)\r\n            .filter(k => !!k && k !== 'drag-image' && k !== 'drag-feedback');\r\n        },\r\n        computeFeedbackKey () {\r\n          return this.$refs['feedback']['$slots']['default']()[0]['key'];\r\n        },\r\n        computeInsertingGrid () {\r\n          if (this.$refs.feedback.$el.children.length < 1) {\r\n            return null;\r\n          }\r\n\r\n          const feedback = this.$refs.feedback.$el.children[0];\r\n          const clone = feedback.cloneNode(true);\r\n          const tg = this.$el;\r\n          if (tg.children.length > this.items.length) {\r\n            tg.insertBefore(clone, tg.children[this.items.length]);\r\n          }\r\n          else {\r\n            tg.appendChild(clone);\r\n          }\r\n          const grid = new Grid(tg.children, this.items.length, this.direction, null);\r\n          tg.removeChild(clone);\r\n          return grid;\r\n        },\r\n        computeReorderingGrid () {\r\n          return new Grid(this.$el.children, this.items.length - 1, this.direction, this.fromIndex);\r\n        },\r\n        createDragImage () {\r\n          let image;\r\n          if (this.$refs['drag-image']) {\r\n            const el = this.$refs['drag-image'];\r\n            let model;\r\n            if (el.childElementCount !== 1) {\r\n              model = el;\r\n            }\r\n            else {\r\n              model = el.children.item(0);\r\n            }\r\n            const clone = model.cloneNode(true);\r\n            const tg = this.$el;\r\n            tg.appendChild(clone);\r\n            image = createDragImage(clone);\r\n            tg.removeChild(clone);\r\n            image['__opacity'] = this.dragImageOpacity;\r\n            image.classList.add('dnd-ghost');\r\n          }\r\n          else {\r\n            image = 'source';\r\n          }\r\n          return image;\r\n        }\r\n      },\r\n      render () {\r\n        if (!this.$slots['item']) {\r\n          throw 'The \"Item\" slot must be defined to use DropList';\r\n        }\r\n\r\n        if (!this.$slots['feedback']) {\r\n          throw 'The \"Feedback\" slot must be defined to use DropList';\r\n        }\r\n\r\n        let defaultArr = [];\r\n        if (this.dropIn && this.dropAllowed) {\r\n          if (this.reordering) {\r\n            if (this.hasReorderingFeedback) {\r\n              const itemsReorderingBefore = this.itemsBeforeReorderingFeedback.map((item, index) => {\r\n                return this.$slots['item']({\r\n                  item: item,\r\n                  index: index,\r\n                  reorder: false\r\n                })[0];\r\n              });\r\n              if (itemsReorderingBefore.length > 0) {\r\n                defaultArr = defaultArr.concat(itemsReorderingBefore);\r\n              }\r\n\r\n              defaultArr.push(this.$slots['reordering-feedback']({\r\n                key: 'reordering-feedback',\r\n                item: this.items[this.fromIndex]\r\n              })[0]);\r\n\r\n              const itemsReorderingAfter = this.itemsAfterReorderingFeedback.map((item, index) => {\r\n                return this.$slots['item']({\r\n                  item: item,\r\n                  index: this.itemsBeforeReorderingFeedback.length + index,\r\n                  reorder: false\r\n                })[0];\r\n              });\r\n              if (itemsReorderingAfter.length > 0) {\r\n                defaultArr = defaultArr.concat(itemsReorderingAfter);\r\n              }\r\n            }\r\n            else {\r\n              const reorderedItems = this.reorderedItems.map((item, index) => {\r\n                return this.$slots['item']({\r\n                  item: item,\r\n                  index: index,\r\n                  reorder: index === this.closestIndex\r\n                })[0];\r\n              });\r\n              if (reorderedItems.length > 0) {\r\n                defaultArr = defaultArr.concat(reorderedItems);\r\n              }\r\n            }\r\n          }\r\n          else {\r\n            const itemsBefore = this.itemsBeforeFeedback.map((item, index) => {\r\n              return this.$slots['item']({\r\n                item: item,\r\n                index: index,\r\n                reorder: false\r\n              })[0];\r\n            });\r\n            if (itemsBefore.length > 0) {\r\n              defaultArr = defaultArr.concat(itemsBefore);\r\n            }\r\n\r\n            defaultArr.push(this.$slots['feedback']({\r\n              key: 'drag-feedback',\r\n              data: this.dragData,\r\n              type: this.dragType\r\n            })[0]);\r\n\r\n            const itemsAfter = this.itemsAfterFeedback.map((item, index) => {\r\n              return this.$slots['item']({\r\n                item: item,\r\n                index: this.itemsBeforeFeedback.length + index,\r\n                reorder: false\r\n              })[0];\r\n            });\r\n            if (itemsAfter.length > 0) {\r\n              defaultArr = defaultArr.concat(itemsAfter);\r\n            }\r\n          }\r\n        }\r\n        else {\r\n          const defaultItems = this.items.map((item, index) => {\r\n            return this.$slots['item']({\r\n              item: item,\r\n              index: index,\r\n              reorder: false\r\n            })[0];\r\n          });\r\n\r\n          if (defaultItems.length > 0) {\r\n            defaultArr = defaultArr.concat(defaultItems);\r\n          }\r\n          else if (this.hasEmptySlot) {\r\n            defaultArr.push(this.$slots['empty']()[0]);\r\n          }\r\n        }\r\n\r\n        if (this.showDragFeedback) {\r\n          defaultArr.push(vue.h(\r\n            script$1,\r\n            {\r\n              class: '__feedback',\r\n              ref: 'feedback',\r\n              key: 'drag-feedback'\r\n            },\r\n            {\r\n              default: () => this.$slots['feedback']({\r\n                type: this.dragType,\r\n                data: this.dragData\r\n              })[0]\r\n            }\r\n          ));\r\n        }\r\n\r\n        if (this.showReorderingDragImage) {\r\n          defaultArr.push(vue.h(\r\n            'div',\r\n            {\r\n              class: '__drag-image',\r\n              ref: 'drag-image',\r\n              key: 'reordering-drag-image'\r\n            },\r\n            {\r\n              default: () => this.$slots['reordering-drag-image']({\r\n                item: this.items[this.fromIndex]\r\n              })[0]\r\n            }\r\n          ));\r\n        }\r\n\r\n        if (this.showInsertingDragImage) {\r\n          defaultArr.push(vue.h(\r\n            'div',\r\n            {\r\n              class: '__drag-image',\r\n              ref: 'drag-image',\r\n              key: 'inserting-drag-image'\r\n            },\r\n            {\r\n              default: () => this.$slots['drag-image']({\r\n                type: this.dragType,\r\n                data: this.dragData\r\n              })[0]\r\n            }\r\n          ));\r\n        }\r\n\r\n        return vue.h(\r\n          this.rootTag,\r\n          {\r\n            ref: 'component',\r\n            class: this.clazz,\r\n            ...this.rootProps\r\n          },\r\n          {\r\n            default: () => defaultArr\r\n          }\r\n        );\r\n      }\r\n    };\n\n    script.__scopeId = \"data-v-230f65e3\";\n\n    /**\r\n     * This class reacts to drag events emitted by the dnd object to manage a sequence of drag images and fade from one to the\r\n     * other as the drag progresses.\r\n     */\r\n    class DragImagesManager {\r\n\r\n        selfTransform = null;\r\n        clones = null;\r\n        source = null;\r\n        sourcePos = null;\r\n        sourceClone = null;\r\n\r\n        constructor () {\r\n          dnd.on('dragstart', this.onDragStart.bind(this));\r\n          dnd.on('dragtopchanged', this.onDragTopChanged.bind(this));\r\n          dnd.on('dragpositionchanged', this.onDragPositionChanged.bind(this));\r\n          dnd.on('dragend', this.onDragEnd.bind(this));\r\n        }\r\n\r\n        onDragStart (event) {\r\n          // If go-back=true and it is still animating while they attempt another drag,\r\n          //      it will bug out. Best to clean up any existing elements on the page before\r\n          //      attempting to start the next animation\r\n          this.cleanUp();\r\n\r\n          this.sourcePos = {\r\n            x: event.source.$el.getBoundingClientRect().left,\r\n            y: event.source.$el.getBoundingClientRect().top\r\n          };\r\n          this.selfTransform = 'translate(-' + (event.position.x - this.sourcePos.x) + 'px, -' + (event.position.y - this.sourcePos.y) + 'px)';\r\n          this.clones = new Map();\r\n          this.source = event.source;\r\n        }\r\n\r\n        onDragEnd (event) {\r\n          vue.nextTick()\r\n            .then(() => {\r\n              if (!event.success && this.source && this.source['goBack']) {\r\n                // Restore the drag image that is active when hovering outside any drop zone :\r\n                const img = this.switch(null);\r\n        \r\n                // Move it back to its original place :\r\n                window.requestAnimationFrame(() => {\r\n                  img.style.transition = 'all 0.5s';\r\n                  window.requestAnimationFrame(() => {\r\n                    img.style.left = this.sourcePos.x + 'px';\r\n                    img.style.top = this.sourcePos.y + 'px';\r\n                    img.style.transform = 'translate(0,0)';\r\n                    const handler = () => {\r\n                      this.cleanUp();\r\n                      img.removeEventListener('transitionend', handler);\r\n                    };\r\n                    img.addEventListener('transitionend', handler);\r\n                  });\r\n                });\r\n              }\r\n              else {\r\n                this.cleanUp();\r\n              }\r\n            });\r\n        }\r\n\r\n        cleanUp () {\r\n          if (this.clones) {\r\n            this.clones.forEach((clone) => {\r\n              if (clone.parentNode === document.body) {\r\n                document.body.removeChild(clone);\r\n              }\r\n            });\r\n          }\r\n          if (this.sourceClone !== null) {\r\n            if (this.sourceClone.parentNode === document.body) {\r\n              document.body.removeChild(this.sourceClone);\r\n            }\r\n          }\r\n          this.selfTransform = null;\r\n          this.clones = null;\r\n          this.source = null;\r\n          this.sourceClone = null;\r\n          this.sourcePos = null;\r\n        }\r\n\r\n        onDragTopChanged (event) {\r\n          this.switch(event.top);\r\n        }\r\n\r\n        switch (top) {\r\n          this.clones.forEach(clone => {\r\n            clone.style.opacity = '0';\r\n          });\r\n          if (this.sourceClone) {\r\n            this.sourceClone.style.opacity = '0';\r\n          }\r\n\r\n          let activeClone;\r\n          if (top === null) {\r\n            activeClone = this.getSourceClone();\r\n          }\r\n          else {\r\n            if (!this.clones.has(top)) {\r\n              let clone = top['createDragImage'](this.selfTransform);\r\n              if (clone === 'source') {\r\n                clone = this.getSourceClone();\r\n              }\r\n              else if (clone !== null) {\r\n                clone.style.opacity = '0';\r\n                document.body.appendChild(clone);\r\n              }\r\n              this.clones.set(top, clone);\r\n            }\r\n            activeClone = this.clones.get(top);\r\n          }\r\n\r\n          if (activeClone !== null) {\r\n            activeClone.offsetWidth; // Forces browser reflow\r\n            activeClone.style.opacity = activeClone['__opacity'];\r\n            activeClone.style.visibility = 'visible';\r\n          }\r\n\r\n          return activeClone;\r\n        }\r\n\r\n        getSourceClone () {\r\n          if (this.sourceClone === null) {\r\n            this.sourceClone = this.source['createDragImage'](this.selfTransform);\r\n            this.sourceClone.style.opacity = '0';\r\n            document.body.appendChild(this.sourceClone);\r\n          }\r\n          return this.sourceClone;\r\n        }\r\n\r\n        onDragPositionChanged () {\r\n          this.clones.forEach((clone) => {\r\n            clone.style.left = dnd.position.x + 'px';\r\n            clone.style.top = dnd.position.y + 'px';\r\n          });\r\n          if (this.sourceClone) {\r\n            this.sourceClone.style.left = dnd.position.x + 'px';\r\n            this.sourceClone.style.top = dnd.position.y + 'px';\r\n          }\r\n        }\r\n\r\n    }\r\n\r\n    new DragImagesManager();\n\n    exports.DnDEvent = DnDEvent;\n    exports.Drag = script$4;\n    exports.DragAwareMixin = DragAwareMixin;\n    exports.DragFeedback = script$1;\n    exports.DragImagesManager = DragImagesManager;\n    exports.DragMixin = DragMixin;\n    exports.Drop = script$3;\n    exports.DropList = script;\n    exports.DropMask = script$2;\n    exports.DropMixin = DropMixin;\n    exports.InsertEvent = InsertEvent;\n    exports.ReorderEvent = ReorderEvent;\n    exports.createDragImage = createDragImage;\n    exports.dnd = dnd;\n\n    return exports;\n\n})({}, vue);\n"]}