Element.prototype.DraggableJS=function(t){const e=this;function n(t,n){let o=e.parentNode.clientWidth/e.options.grid.columns,i=e.parentNode.clientHeight/e.options.grid.rows,s=(e.clientWidth-o)/2,r=(e.clientHeight-i)/2;t=Math.round((t+e.offsetLeft-(e.clientWidth/2-e.startOffset[0]))/o)*o-s,n=Math.round((n+e.offsetTop-(e.clientHeight/2-e.startOffset[1]))/i)*i-r,e.setPosition(t,n)}function o(t,e,n,o){e.split(" ").forEach(e=>t.addEventListener(e,n,o))}function i(t){return new WebKitCSSMatrix(window.getComputedStyle(t).webkitTransform)}function s(t){if(t instanceof MouseEvent)return t;if(t instanceof TouchEvent){let e=t.originalEvent||t;return e.touches[0]||e.changedTouches[0]||null}return null}function r(t,n,o){e.style.transform="matrix3d("+t.m11+", "+t.m12+", "+t.m13+", "+t.m14+", "+t.m21+", "+t.m22+", "+t.m23+", "+t.m24+", "+t.m31+", "+t.m32+", "+t.m33+", "+t.m34+", "+n+", "+o+", "+t.m43+", "+t.m44+")"}e.options=Object.assign({},{axis:"xy",init:function(t){},start:function(t){},drag:function(t){},end:function(t){},grid:!1},t),e.mouseDown=!1,e.style.cssText+="position:absolute;will-change: transform;transform-style:preserve-3d; -webkit-touch-callout: none; -webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;",e.parentNode.style.cssText+="will-change: transform;transform-style: preserve-3d;position: relative;",o(e,"touchmove",function(t){t.preventDefault()},{passive:!1}),o(e,"mousedown touchstart",function(t){let n=s(t),o=i(e),r=i(e.parentNode),a=e.getBoundingClientRect(),c=document.body.getBoundingClientRect();e.mouseDown=function(t){return t instanceof MouseEvent?void 0===t.buttons?1===t.which:1===t.buttons:t instanceof TouchEvent}(t),e.start=[n.pageX-o.m41*r.m11,n.pageY-o.m42*r.m22],e.startOffset=[n.offsetX||n.pageX-(a.left-c.left),n.offsetY||n.pageY-(a.top-c.top)],e.options.start.call(e,t)}),o(document,"mouseup touchend",function(t){if(e.mouseDown){if(e.mouseDown=!1,e.options.grid&&e.options.grid.dragEndSnap){let t=i(e);n(t.m41,t.m42)}e.options.end.call(e,t)}}),o(document,"mousemove touchmove",function(t){if(e.mouseDown){let a=s(t),c=e.parentNode.getBoundingClientRect(),l=e.getBoundingClientRect(),f=i(e),u=i(e.parentNode),d=(a.pageX-e.start[0])/u.m11,p=(a.pageY-e.start[1])/u.m22;function o(t,n){let o="x"==n?e.offsetLeft:e.offsetTop,i="x"==n?e.clientWidth:e.clientHeight,s="x"==n?e.parentNode.clientWidth:e.parentNode.clientHeight,r="x"==n?"width":"height",a="x"==n?f.m41:f.m42,u="x"==n?f.m11:f.m22,d=getComputedStyle(e).transformOrigin.match(/(\d+)/gm).map(t=>parseInt(t)),p=("x"==n?d[0]:d[1])/i,m=(1-u)*i,g=a+o+m*p,h=s-i-(a+o)+m*(1-p),x=l[n]-c[n]-g,w=l[n]+l[r]-(c[n]+c[r])+h,v=c[n]-l[n]+a,y=c[r]-l[r]+v;return Math.min(Math.max(t,v+x),y+w)}d=e.options.axis.toLowerCase().indexOf("x")>-1?o(d,"x"):f.m41,p=e.options.axis.toLowerCase().indexOf("y")>-1?o(p,"y"):f.m42,e.options.grid&&e.options.grid.dragSnap?n(d,p):r(f,d,p),e.options.drag.call(e,t)}}),e.setGridPosition=function(t,n){if(e.options.grid){let o=e.parentNode.clientWidth/e.options.grid.columns,i=e.parentNode.clientHeight/e.options.grid.rows,s=(e.clientWidth-o)/2,r=(e.clientHeight-i)/2;x=Math.round(n*o-s),y=Math.round(t*i-r),e.setPosition(x,y)}},e.getPosition=function(){let t=i(this),e={};e.pixels=t.m41+this.offsetLeft,e.percentage=e.pixels/this.parentNode.clientWidth;let n={};return n.pixels=t.m42+this.offsetTop,n.percentage=n.pixels/this.parentNode.clientHeight,{left:e,top:n}},e.setPosition=function(t,n){let o=parseFloat(""+t)-e.offsetLeft,s=parseFloat(""+n)-e.offsetTop;r(i(e),o,s)},e.options.init.call(e)},NodeList.prototype.DraggableJS=function(t){this.forEach(e=>e.DraggableJS(t))};