{"version":3,"sources":["jsdelivr-header.js","/npm/dragula@3.7.3/classes.js","/npm/dragula@3.7.3/dragula.js"],"names":[],"mappings":"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","file":"/npm/dragula@3.7.3/dragula.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.\n * Original file: /npm/dragula@3.7.3/dragula.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nvar cache = {};\nvar start = '(?:^|\\\\s)';\nvar end = '(?:\\\\s|$)';\n\nfunction lookupClass (className) {\n  var cached = cache[className];\n  if (cached) {\n    cached.lastIndex = 0;\n  } else {\n    cache[className] = cached = new RegExp(start + className + end, 'g');\n  }\n  return cached;\n}\n\nfunction addClass (el, className) {\n  var current = el.className;\n  if (!current.length) {\n    el.className = className;\n  } else if (!lookupClass(className).test(current)) {\n    el.className += ' ' + className;\n  }\n}\n\nfunction rmClass (el, className) {\n  el.className = el.className.replace(lookupClass(className), ' ').trim();\n}\n\nmodule.exports = {\n  add: addClass,\n  rm: rmClass\n};\n","'use strict';\n\nvar emitter = require('contra/emitter');\nvar crossvent = require('crossvent');\nvar classes = require('./classes');\nvar doc = document;\nvar documentElement = doc.documentElement;\n\nfunction dragula (initialContainers, options) {\n  var len = arguments.length;\n  if (len === 1 && Array.isArray(initialContainers) === false) {\n    options = initialContainers;\n    initialContainers = [];\n  }\n  var _mirror; // mirror image\n  var _source; // source container\n  var _item; // item being dragged\n  var _offsetX; // reference x\n  var _offsetY; // reference y\n  var _moveX; // reference move x\n  var _moveY; // reference move y\n  var _initialSibling; // reference sibling when grabbed\n  var _currentSibling; // reference sibling now\n  var _copy; // item used for copying\n  var _renderTimer; // timer for setTimeout renderMirrorImage\n  var _lastDropTarget = null; // last container item was over\n  var _grabbed; // holds mousedown context until first mousemove\n\n  var o = options || {};\n  if (o.moves === void 0) { o.moves = always; }\n  if (o.accepts === void 0) { o.accepts = always; }\n  if (o.invalid === void 0) { o.invalid = invalidTarget; }\n  if (o.containers === void 0) { o.containers = initialContainers || []; }\n  if (o.isContainer === void 0) { o.isContainer = never; }\n  if (o.copy === void 0) { o.copy = false; }\n  if (o.copySortSource === void 0) { o.copySortSource = false; }\n  if (o.revertOnSpill === void 0) { o.revertOnSpill = false; }\n  if (o.removeOnSpill === void 0) { o.removeOnSpill = false; }\n  if (o.direction === void 0) { o.direction = 'vertical'; }\n  if (o.ignoreInputTextSelection === void 0) { o.ignoreInputTextSelection = true; }\n  if (o.mirrorContainer === void 0) { o.mirrorContainer = doc.body; }\n\n  var drake = emitter({\n    containers: o.containers,\n    start: manualStart,\n    end: end,\n    cancel: cancel,\n    remove: remove,\n    destroy: destroy,\n    canMove: canMove,\n    dragging: false\n  });\n\n  if (o.removeOnSpill === true) {\n    drake.on('over', spillOver).on('out', spillOut);\n  }\n\n  events();\n\n  return drake;\n\n  function isContainer (el) {\n    return drake.containers.indexOf(el) !== -1 || o.isContainer(el);\n  }\n\n  function events (remove) {\n    var op = remove ? 'remove' : 'add';\n    touchy(documentElement, op, 'mousedown', grab);\n    touchy(documentElement, op, 'mouseup', release);\n  }\n\n  function eventualMovements (remove) {\n    var op = remove ? 'remove' : 'add';\n    touchy(documentElement, op, 'mousemove', startBecauseMouseMoved);\n  }\n\n  function movements (remove) {\n    var op = remove ? 'remove' : 'add';\n    crossvent[op](documentElement, 'selectstart', preventGrabbed); // IE8\n    crossvent[op](documentElement, 'click', preventGrabbed);\n  }\n\n  function destroy () {\n    events(true);\n    release({});\n  }\n\n  function preventGrabbed (e) {\n    if (_grabbed) {\n      e.preventDefault();\n    }\n  }\n\n  function grab (e) {\n    _moveX = e.clientX;\n    _moveY = e.clientY;\n\n    var ignore = whichMouseButton(e) !== 1 || e.metaKey || e.ctrlKey;\n    if (ignore) {\n      return; // we only care about honest-to-god left clicks and touch events\n    }\n    var item = e.target;\n    var context = canStart(item);\n    if (!context) {\n      return;\n    }\n    _grabbed = context;\n    eventualMovements();\n    if (e.type === 'mousedown') {\n      if (isInput(item)) { // see also: https://github.com/bevacqua/dragula/issues/208\n        item.focus(); // fixes https://github.com/bevacqua/dragula/issues/176\n      } else {\n        e.preventDefault(); // fixes https://github.com/bevacqua/dragula/issues/155\n      }\n    }\n  }\n\n  function startBecauseMouseMoved (e) {\n    if (!_grabbed) {\n      return;\n    }\n    if (whichMouseButton(e) === 0) {\n      release({});\n      return; // when text is selected on an input and then dragged, mouseup doesn't fire. this is our only hope\n    }\n\n    // truthy check fixes #239, equality fixes #207, fixes #501\n    if ((e.clientX !== void 0 && Math.abs(e.clientX - _moveX) <= (o.slideFactorX || 0)) &&\n      (e.clientY !== void 0 && Math.abs(e.clientY - _moveY) <= (o.slideFactorY || 0))) {\n      return;\n    }\n\n    if (o.ignoreInputTextSelection) {\n      var clientX = getCoord('clientX', e) || 0;\n      var clientY = getCoord('clientY', e) || 0;\n      var elementBehindCursor = doc.elementFromPoint(clientX, clientY);\n      if (isInput(elementBehindCursor)) {\n        return;\n      }\n    }\n\n    var grabbed = _grabbed; // call to end() unsets _grabbed\n    eventualMovements(true);\n    movements();\n    end();\n    start(grabbed);\n\n    var offset = getOffset(_item);\n    _offsetX = getCoord('pageX', e) - offset.left;\n    _offsetY = getCoord('pageY', e) - offset.top;\n\n    classes.add(_copy || _item, 'gu-transit');\n    renderMirrorImage();\n    drag(e);\n  }\n\n  function canStart (item) {\n    if (drake.dragging && _mirror) {\n      return;\n    }\n    if (isContainer(item)) {\n      return; // don't drag container itself\n    }\n    var handle = item;\n    while (getParent(item) && isContainer(getParent(item)) === false) {\n      if (o.invalid(item, handle)) {\n        return;\n      }\n      item = getParent(item); // drag target should be a top element\n      if (!item) {\n        return;\n      }\n    }\n    var source = getParent(item);\n    if (!source) {\n      return;\n    }\n    if (o.invalid(item, handle)) {\n      return;\n    }\n\n    var movable = o.moves(item, source, handle, nextEl(item));\n    if (!movable) {\n      return;\n    }\n\n    return {\n      item: item,\n      source: source\n    };\n  }\n\n  function canMove (item) {\n    return !!canStart(item);\n  }\n\n  function manualStart (item) {\n    var context = canStart(item);\n    if (context) {\n      start(context);\n    }\n  }\n\n  function start (context) {\n    if (isCopy(context.item, context.source)) {\n      _copy = context.item.cloneNode(true);\n      drake.emit('cloned', _copy, context.item, 'copy');\n    }\n\n    _source = context.source;\n    _item = context.item;\n    _initialSibling = _currentSibling = nextEl(context.item);\n\n    drake.dragging = true;\n    drake.emit('drag', _item, _source);\n  }\n\n  function invalidTarget () {\n    return false;\n  }\n\n  function end () {\n    if (!drake.dragging) {\n      return;\n    }\n    var item = _copy || _item;\n    drop(item, getParent(item));\n  }\n\n  function ungrab () {\n    _grabbed = false;\n    eventualMovements(true);\n    movements(true);\n  }\n\n  function release (e) {\n    ungrab();\n\n    if (!drake.dragging) {\n      return;\n    }\n    var item = _copy || _item;\n    var clientX = getCoord('clientX', e) || 0;\n    var clientY = getCoord('clientY', e) || 0;\n    var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);\n    var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);\n    if (dropTarget && ((_copy && o.copySortSource) || (!_copy || dropTarget !== _source))) {\n      drop(item, dropTarget);\n    } else if (o.removeOnSpill) {\n      remove();\n    } else {\n      cancel();\n    }\n  }\n\n  function drop (item, target) {\n    var parent = getParent(item);\n    if (_copy && o.copySortSource && target === _source) {\n      parent.removeChild(_item);\n    }\n    if (isInitialPlacement(target)) {\n      drake.emit('cancel', item, _source, _source);\n    } else {\n      drake.emit('drop', item, target, _source, _currentSibling);\n    }\n    cleanup();\n  }\n\n  function remove () {\n    if (!drake.dragging) {\n      return;\n    }\n    var item = _copy || _item;\n    var parent = getParent(item);\n    if (parent) {\n      parent.removeChild(item);\n    }\n    drake.emit(_copy ? 'cancel' : 'remove', item, parent, _source);\n    cleanup();\n  }\n\n  function cancel (revert) {\n    if (!drake.dragging) {\n      return;\n    }\n    var reverts = arguments.length > 0 ? revert : o.revertOnSpill;\n    var item = _copy || _item;\n    var parent = getParent(item);\n    var initial = isInitialPlacement(parent);\n    if (initial === false && reverts) {\n      if (_copy) {\n        if (parent) {\n          parent.removeChild(_copy);\n        }\n      } else {\n        _source.insertBefore(item, _initialSibling);\n      }\n    }\n    if (initial || reverts) {\n      drake.emit('cancel', item, _source, _source);\n    } else {\n      drake.emit('drop', item, parent, _source, _currentSibling);\n    }\n    cleanup();\n  }\n\n  function cleanup () {\n    var item = _copy || _item;\n    ungrab();\n    removeMirrorImage();\n    if (item) {\n      classes.rm(item, 'gu-transit');\n    }\n    if (_renderTimer) {\n      clearTimeout(_renderTimer);\n    }\n    drake.dragging = false;\n    if (_lastDropTarget) {\n      drake.emit('out', item, _lastDropTarget, _source);\n    }\n    drake.emit('dragend', item);\n    _source = _item = _copy = _initialSibling = _currentSibling = _renderTimer = _lastDropTarget = null;\n  }\n\n  function isInitialPlacement (target, s) {\n    var sibling;\n    if (s !== void 0) {\n      sibling = s;\n    } else if (_mirror) {\n      sibling = _currentSibling;\n    } else {\n      sibling = nextEl(_copy || _item);\n    }\n    return target === _source && sibling === _initialSibling;\n  }\n\n  function findDropTarget (elementBehindCursor, clientX, clientY) {\n    var target = elementBehindCursor;\n    while (target && !accepted()) {\n      target = getParent(target);\n    }\n    return target;\n\n    function accepted () {\n      var droppable = isContainer(target);\n      if (droppable === false) {\n        return false;\n      }\n\n      var immediate = getImmediateChild(target, elementBehindCursor);\n      var reference = getReference(target, immediate, clientX, clientY);\n      var initial = isInitialPlacement(target, reference);\n      if (initial) {\n        return true; // should always be able to drop it right back where it was\n      }\n      return o.accepts(_item, target, _source, reference);\n    }\n  }\n\n  function drag (e) {\n    if (!_mirror) {\n      return;\n    }\n    e.preventDefault();\n\n    var clientX = getCoord('clientX', e) || 0;\n    var clientY = getCoord('clientY', e) || 0;\n    var x = clientX - _offsetX;\n    var y = clientY - _offsetY;\n\n    _mirror.style.left = x + 'px';\n    _mirror.style.top = y + 'px';\n\n    var item = _copy || _item;\n    var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);\n    var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);\n    var changed = dropTarget !== null && dropTarget !== _lastDropTarget;\n    if (changed || dropTarget === null) {\n      out();\n      _lastDropTarget = dropTarget;\n      over();\n    }\n    var parent = getParent(item);\n    if (dropTarget === _source && _copy && !o.copySortSource) {\n      if (parent) {\n        parent.removeChild(item);\n      }\n      return;\n    }\n    var reference;\n    var immediate = getImmediateChild(dropTarget, elementBehindCursor);\n    if (immediate !== null) {\n      reference = getReference(dropTarget, immediate, clientX, clientY);\n    } else if (o.revertOnSpill === true && !_copy) {\n      reference = _initialSibling;\n      dropTarget = _source;\n    } else {\n      if (_copy && parent) {\n        parent.removeChild(item);\n      }\n      return;\n    }\n    if (\n      (reference === null && changed) ||\n      reference !== item &&\n      reference !== nextEl(item)\n    ) {\n      _currentSibling = reference;\n      dropTarget.insertBefore(item, reference);\n      drake.emit('shadow', item, dropTarget, _source);\n    }\n    function moved (type) { drake.emit(type, item, _lastDropTarget, _source); }\n    function over () { if (changed) { moved('over'); } }\n    function out () { if (_lastDropTarget) { moved('out'); } }\n  }\n\n  function spillOver (el) {\n    classes.rm(el, 'gu-hide');\n  }\n\n  function spillOut (el) {\n    if (drake.dragging) { classes.add(el, 'gu-hide'); }\n  }\n\n  function renderMirrorImage () {\n    if (_mirror) {\n      return;\n    }\n    var rect = _item.getBoundingClientRect();\n    _mirror = _item.cloneNode(true);\n    _mirror.style.width = getRectWidth(rect) + 'px';\n    _mirror.style.height = getRectHeight(rect) + 'px';\n    classes.rm(_mirror, 'gu-transit');\n    classes.add(_mirror, 'gu-mirror');\n    o.mirrorContainer.appendChild(_mirror);\n    touchy(documentElement, 'add', 'mousemove', drag);\n    classes.add(o.mirrorContainer, 'gu-unselectable');\n    drake.emit('cloned', _mirror, _item, 'mirror');\n  }\n\n  function removeMirrorImage () {\n    if (_mirror) {\n      classes.rm(o.mirrorContainer, 'gu-unselectable');\n      touchy(documentElement, 'remove', 'mousemove', drag);\n      getParent(_mirror).removeChild(_mirror);\n      _mirror = null;\n    }\n  }\n\n  function getImmediateChild (dropTarget, target) {\n    var immediate = target;\n    while (immediate !== dropTarget && getParent(immediate) !== dropTarget) {\n      immediate = getParent(immediate);\n    }\n    if (immediate === documentElement) {\n      return null;\n    }\n    return immediate;\n  }\n\n  function getReference (dropTarget, target, x, y) {\n    var horizontal = o.direction === 'horizontal';\n    var reference = target !== dropTarget ? inside() : outside();\n    return reference;\n\n    function outside () { // slower, but able to figure out any position\n      var len = dropTarget.children.length;\n      var i;\n      var el;\n      var rect;\n      for (i = 0; i < len; i++) {\n        el = dropTarget.children[i];\n        rect = el.getBoundingClientRect();\n        if (horizontal && (rect.left + rect.width / 2) > x) { return el; }\n        if (!horizontal && (rect.top + rect.height / 2) > y) { return el; }\n      }\n      return null;\n    }\n\n    function inside () { // faster, but only available if dropped inside a child element\n      var rect = target.getBoundingClientRect();\n      if (horizontal) {\n        return resolve(x > rect.left + getRectWidth(rect) / 2);\n      }\n      return resolve(y > rect.top + getRectHeight(rect) / 2);\n    }\n\n    function resolve (after) {\n      return after ? nextEl(target) : target;\n    }\n  }\n\n  function isCopy (item, container) {\n    return typeof o.copy === 'boolean' ? o.copy : o.copy(item, container);\n  }\n}\n\nfunction touchy (el, op, type, fn) {\n  var touch = {\n    mouseup: 'touchend',\n    mousedown: 'touchstart',\n    mousemove: 'touchmove'\n  };\n  var pointers = {\n    mouseup: 'pointerup',\n    mousedown: 'pointerdown',\n    mousemove: 'pointermove'\n  };\n  var microsoft = {\n    mouseup: 'MSPointerUp',\n    mousedown: 'MSPointerDown',\n    mousemove: 'MSPointerMove'\n  };\n  if (global.navigator.pointerEnabled) {\n    crossvent[op](el, pointers[type], fn);\n  } else if (global.navigator.msPointerEnabled) {\n    crossvent[op](el, microsoft[type], fn);\n  } else {\n    crossvent[op](el, touch[type], fn);\n    crossvent[op](el, type, fn);\n  }\n}\n\nfunction whichMouseButton (e) {\n  if (e.touches !== void 0) { return e.touches.length; }\n  if (e.which !== void 0 && e.which !== 0) { return e.which; } // see https://github.com/bevacqua/dragula/issues/261\n  if (e.buttons !== void 0) { return e.buttons; }\n  var button = e.button;\n  if (button !== void 0) { // see https://github.com/jquery/jquery/blob/99e8ff1baa7ae341e94bb89c3e84570c7c3ad9ea/src/event.js#L573-L575\n    return button & 1 ? 1 : button & 2 ? 3 : (button & 4 ? 2 : 0);\n  }\n}\n\nfunction getOffset (el) {\n  var rect = el.getBoundingClientRect();\n  return {\n    left: rect.left + getScroll('scrollLeft', 'pageXOffset'),\n    top: rect.top + getScroll('scrollTop', 'pageYOffset')\n  };\n}\n\nfunction getScroll (scrollProp, offsetProp) {\n  if (typeof global[offsetProp] !== 'undefined') {\n    return global[offsetProp];\n  }\n  if (documentElement.clientHeight) {\n    return documentElement[scrollProp];\n  }\n  return doc.body[scrollProp];\n}\n\nfunction getElementBehindPoint (point, x, y) {\n  point = point || {};\n  var state = point.className || '';\n  var el;\n  point.className += ' gu-hide';\n  el = doc.elementFromPoint(x, y);\n  point.className = state;\n  return el;\n}\n\nfunction never () { return false; }\nfunction always () { return true; }\nfunction getRectWidth (rect) { return rect.width || (rect.right - rect.left); }\nfunction getRectHeight (rect) { return rect.height || (rect.bottom - rect.top); }\nfunction getParent (el) { return el.parentNode === doc ? null : el.parentNode; }\nfunction isInput (el) { return el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.tagName === 'SELECT' || isEditable(el); }\nfunction isEditable (el) {\n  if (!el) { return false; } // no parents were editable\n  if (el.contentEditable === 'false') { return false; } // stop the lookup\n  if (el.contentEditable === 'true') { return true; } // found a contentEditable element in the chain\n  return isEditable(getParent(el)); // contentEditable is set to 'inherit'\n}\n\nfunction nextEl (el) {\n  return el.nextElementSibling || manually();\n  function manually () {\n    var sibling = el;\n    do {\n      sibling = sibling.nextSibling;\n    } while (sibling && sibling.nodeType !== 1);\n    return sibling;\n  }\n}\n\nfunction getEventHost (e) {\n  // on touchend event, we have to use `e.changedTouches`\n  // see http://stackoverflow.com/questions/7192563/touchend-event-properties\n  // see https://github.com/bevacqua/dragula/issues/34\n  if (e.targetTouches && e.targetTouches.length) {\n    return e.targetTouches[0];\n  }\n  if (e.changedTouches && e.changedTouches.length) {\n    return e.changedTouches[0];\n  }\n  return e;\n}\n\nfunction getCoord (coord, e) {\n  var host = getEventHost(e);\n  var missMap = {\n    pageX: 'clientX', // IE8\n    pageY: 'clientY' // IE8\n  };\n  if (coord in missMap && !(coord in host) && missMap[coord] in host) {\n    coord = missMap[coord];\n  }\n  return host[coord];\n}\n\nmodule.exports = dragula;\n"]}