diff --git a/apps/dashboard/src/DashboardApp.vue b/apps/dashboard/src/DashboardApp.vue index f3798fe6ce4ad..de43fa5355afd 100644 --- a/apps/dashboard/src/DashboardApp.vue +++ b/apps/dashboard/src/DashboardApp.vue @@ -234,28 +234,28 @@ export default { const good = { morning: { generic: t('dashboard', 'Good morning'), - withName: t('dashboard', 'Good morning, {name}', { name: this.displayName }, undefined, { escape: false }), + withName: t('dashboard', 'Good morning, {name}', { name: this.displayName }, { escape: false }), }, afternoon: { generic: t('dashboard', 'Good afternoon'), - withName: t('dashboard', 'Good afternoon, {name}', { name: this.displayName }, undefined, { escape: false }), + withName: t('dashboard', 'Good afternoon, {name}', { name: this.displayName }, { escape: false }), }, evening: { generic: t('dashboard', 'Good evening'), - withName: t('dashboard', 'Good evening, {name}', { name: this.displayName }, undefined, { escape: false }), + withName: t('dashboard', 'Good evening, {name}', { name: this.displayName }, { escape: false }), }, night: { // Don't use "Good night" as it's not a greeting - generic: t('dashboard', 'Hello'), - withName: t('dashboard', 'Hello, {name}', { name: this.displayName }, undefined, { escape: false }), + generic: t('dashboard', 'Hello') /* TRANSLATORS: Greeting to be used at night (in English there is no specific greeting, think of it like "good morning") */, + withName: t('dashboard', 'Hello, {name}', { name: this.displayName }, { escape: false }) /* TRANSLATORS: Greeting to be used at night (in English there is no specific greeting, think of it like "Good morning, J. Doe" but at night) */, }, birthday: { generic: t('dashboard', 'Happy birthday 🥳🤩🎂🎉'), - withName: t('dashboard', 'Happy birthday, {name} 🥳🤩🎂🎉', { name: this.displayName }, undefined, { escape: false }), + withName: t('dashboard', 'Happy birthday, {name} 🥳🤩🎂🎉', { name: this.displayName }, { escape: false }), }, } diff --git a/dist/dashboard-dashboard-main-CiWxwGSm.chunk.css b/dist/dashboard-dashboard-main-CiWxwGSm.chunk.css deleted file mode 100644 index 5bb1f34e981b0..0000000000000 --- a/dist/dashboard-dashboard-main-CiWxwGSm.chunk.css +++ /dev/null @@ -1 +0,0 @@ -.api-dashboard-widget-item__icon[data-v-071812ee]{height:var(--default-clickable-area);width:var(--default-clickable-area)}#content.app-dashboard{margin-inline:0;width:100%}#app-dashboard[data-v-69758438]{width:100%;min-height:100%;background-size:cover;background-position:center center;background-repeat:no-repeat;background-attachment:fixed}#app-dashboard>h2[data-v-69758438]{color:var(--color-background-plain-text);text-align:center;font-size:32px;line-height:130%;padding:1rem 0}.panels[data-v-69758438]{width:auto;margin:auto;max-width:1800px;display:flex;justify-content:center;flex-direction:row;align-items:flex-start;flex-wrap:wrap}.panel[data-v-69758438],.panels>div[data-v-69758438]{--color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-main-text));width:320px;max-width:100%;margin:16px;align-self:stretch;background-color:var(--color-main-background-blur);-webkit-backdrop-filter:var(--filter-background-blur);backdrop-filter:var(--filter-background-blur);border-radius:var(--border-radius-container-large)}#body-user.theme--highcontrast .panel[data-v-69758438],#body-user.theme--highcontrast .panels>div[data-v-69758438]{border:2px solid var(--color-border)}.panel.sortable-ghost[data-v-69758438],.panels>div.sortable-ghost[data-v-69758438]{opacity:.1}.panel>.panel--header[data-v-69758438],.panels>div>.panel--header[data-v-69758438]{display:flex;z-index:1;top:50px;padding:16px;cursor:grab}.panel>.panel--header[data-v-69758438],.panel>.panel--header[data-v-69758438] *,.panels>div>.panel--header[data-v-69758438],.panels>div>.panel--header[data-v-69758438] *{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.panel>.panel--header[data-v-69758438]:active,.panels>div>.panel--header[data-v-69758438]:active{cursor:grabbing}.panel>.panel--header a[data-v-69758438],.panels>div>.panel--header a[data-v-69758438]{flex-grow:1}.panel>.panel--header>h2[data-v-69758438],.panels>div>.panel--header>h2[data-v-69758438]{display:block;align-items:center;flex-grow:1;margin:0;font-size:20px;line-height:24px;font-weight:700;padding:16px 8px;height:56px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:grab}.panel>.panel--header>h2 img[data-v-69758438],.panel>.panel--header>h2 span[data-v-69758438],.panels>div>.panel--header>h2 img[data-v-69758438],.panels>div>.panel--header>h2 span[data-v-69758438]{background-size:32px;width:32px;height:32px;background-position:center;float:left;margin-top:-6px;margin-inline:6px 16px}.panel>.panel--header>h2 img[data-v-69758438],.panels>div>.panel--header>h2 img[data-v-69758438]{filter:var(--background-invert-if-dark)}.panel>.panel--content[data-v-69758438],.panels>div>.panel--content[data-v-69758438]{margin:0 16px 16px;height:424px;overflow:visible}@media only screen and (max-width:709px){.panel>.panel--content[data-v-69758438],.panels>div>.panel--content[data-v-69758438]{height:auto}}.footer[data-v-69758438]{display:flex;justify-content:center;transition:bottom var(--animation-slow) ease-in-out;padding:1rem 0}.edit-panels[data-v-69758438]{display:inline-block;margin:auto;background-position:16px center;padding:12px 16px;padding-inline-start:36px;border-radius:var(--border-radius-pill);max-width:200px;opacity:1;text-align:center}.button[data-v-69758438],.button-vue[data-v-69758438],.edit-panels[data-v-69758438],.statuses[data-v-69758438] .action-item .action-item__menutoggle,.statuses[data-v-69758438] .action-item.action-item--open .action-item__menutoggle{--color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-main-text));background-color:var(--color-main-background-blur);-webkit-backdrop-filter:var(--filter-background-blur);backdrop-filter:var(--filter-background-blur);opacity:1!important}.button[data-v-69758438]:hover,.button[data-v-69758438]:focus,.button[data-v-69758438]:active,.button-vue[data-v-69758438]:hover,.button-vue[data-v-69758438]:focus,.button-vue[data-v-69758438]:active,.edit-panels[data-v-69758438]:hover,.edit-panels[data-v-69758438]:focus,.edit-panels[data-v-69758438]:active,.statuses[data-v-69758438] .action-item .action-item__menutoggle:hover,.statuses[data-v-69758438] .action-item .action-item__menutoggle:focus,.statuses[data-v-69758438] .action-item .action-item__menutoggle:active,.statuses[data-v-69758438] .action-item.action-item--open .action-item__menutoggle:hover,.statuses[data-v-69758438] .action-item.action-item--open .action-item__menutoggle:focus,.statuses[data-v-69758438] .action-item.action-item--open .action-item__menutoggle:active{background-color:var(--color-background-hover)!important}.button[data-v-69758438]:focus-visible,.button-vue[data-v-69758438]:focus-visible,.edit-panels[data-v-69758438]:focus-visible,.statuses[data-v-69758438] .action-item .action-item__menutoggle:focus-visible,.statuses[data-v-69758438] .action-item.action-item--open .action-item__menutoggle:focus-visible{box-shadow:0 0 0 4px var(--color-main-background)!important;outline:2px solid var(--color-main-text)!important}.modal__content[data-v-69758438]{padding:32px 16px;text-align:center}.modal__content ol[data-v-69758438]{display:flex;flex-direction:row;justify-content:center;list-style-type:none;padding-bottom:16px}.modal__content li label[data-v-69758438]{position:relative;display:block;padding:48px 16px 14px;margin:8px;width:140px;background-color:var(--color-background-hover);border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);text-align:start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal__content li label img[data-v-69758438],.modal__content li label span[data-v-69758438]{position:absolute;top:16px;width:24px;height:24px;background-size:24px}.modal__content li label img[data-v-69758438]{filter:var(--background-invert-if-dark)}.modal__content li label[data-v-69758438]:hover{border-color:var(--color-primary-element)}.modal__content li:not(.panel-status) label span[data-v-69758438]{filter:var(--background-invert-if-dark)}.modal__content li input[type=checkbox].checkbox+label[data-v-69758438]:before{position:absolute;inset-inline-end:12px;top:16px}.modal__content li input:focus+label[data-v-69758438]{border-color:var(--color-primary-element)}.modal__content h2[data-v-69758438]{font-weight:700;margin-top:12px}.modal__content .button[data-v-69758438]{display:inline-block;padding:10px 16px;margin:0}.modal__content p[data-v-69758438]{max-width:650px;margin:0 auto}.modal__content p a[data-v-69758438]:hover,.modal__content p a[data-v-69758438]:focus{border-bottom:2px solid var(--color-border)}.modal__content .credits--end[data-v-69758438]{padding-bottom:32px;color:var(--color-text-maxcontrast)}.modal__content .credits--end a[data-v-69758438]{color:var(--color-text-maxcontrast)}.flip-list-move[data-v-69758438]{transition:transform var(--animation-slow)}.statuses[data-v-69758438]{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap;margin-bottom:36px}.statuses>li[data-v-69758438]{margin:8px}html,body{background-attachment:fixed}#body-user #header{position:fixed}#content{overflow:auto;scrollbar-color:var(--color-background-plain-text) transparent}#app-content-vue{width:100%} diff --git a/dist/dashboard-dashboard-main-DBQeZOKy.chunk.css b/dist/dashboard-dashboard-main-DBQeZOKy.chunk.css new file mode 100644 index 0000000000000..96bf26a9cc040 --- /dev/null +++ b/dist/dashboard-dashboard-main-DBQeZOKy.chunk.css @@ -0,0 +1 @@ +.api-dashboard-widget-item__icon[data-v-071812ee]{height:var(--default-clickable-area);width:var(--default-clickable-area)}#content.app-dashboard{margin-inline:0;width:100%}#app-dashboard[data-v-f173509a]{width:100%;min-height:100%;background-size:cover;background-position:center center;background-repeat:no-repeat;background-attachment:fixed}#app-dashboard>h2[data-v-f173509a]{color:var(--color-background-plain-text);text-align:center;font-size:32px;line-height:130%;padding:1rem 0}.panels[data-v-f173509a]{width:auto;margin:auto;max-width:1800px;display:flex;justify-content:center;flex-direction:row;align-items:flex-start;flex-wrap:wrap}.panel[data-v-f173509a],.panels>div[data-v-f173509a]{--color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-main-text));width:320px;max-width:100%;margin:16px;align-self:stretch;background-color:var(--color-main-background-blur);-webkit-backdrop-filter:var(--filter-background-blur);backdrop-filter:var(--filter-background-blur);border-radius:var(--border-radius-container-large)}#body-user.theme--highcontrast .panel[data-v-f173509a],#body-user.theme--highcontrast .panels>div[data-v-f173509a]{border:2px solid var(--color-border)}.panel.sortable-ghost[data-v-f173509a],.panels>div.sortable-ghost[data-v-f173509a]{opacity:.1}.panel>.panel--header[data-v-f173509a],.panels>div>.panel--header[data-v-f173509a]{display:flex;z-index:1;top:50px;padding:16px;cursor:grab}.panel>.panel--header[data-v-f173509a],.panel>.panel--header[data-v-f173509a] *,.panels>div>.panel--header[data-v-f173509a],.panels>div>.panel--header[data-v-f173509a] *{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.panel>.panel--header[data-v-f173509a]:active,.panels>div>.panel--header[data-v-f173509a]:active{cursor:grabbing}.panel>.panel--header a[data-v-f173509a],.panels>div>.panel--header a[data-v-f173509a]{flex-grow:1}.panel>.panel--header>h2[data-v-f173509a],.panels>div>.panel--header>h2[data-v-f173509a]{display:block;align-items:center;flex-grow:1;margin:0;font-size:20px;line-height:24px;font-weight:700;padding:16px 8px;height:56px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:grab}.panel>.panel--header>h2 img[data-v-f173509a],.panel>.panel--header>h2 span[data-v-f173509a],.panels>div>.panel--header>h2 img[data-v-f173509a],.panels>div>.panel--header>h2 span[data-v-f173509a]{background-size:32px;width:32px;height:32px;background-position:center;float:left;margin-top:-6px;margin-inline:6px 16px}.panel>.panel--header>h2 img[data-v-f173509a],.panels>div>.panel--header>h2 img[data-v-f173509a]{filter:var(--background-invert-if-dark)}.panel>.panel--content[data-v-f173509a],.panels>div>.panel--content[data-v-f173509a]{margin:0 16px 16px;height:424px;overflow:visible}@media only screen and (max-width:709px){.panel>.panel--content[data-v-f173509a],.panels>div>.panel--content[data-v-f173509a]{height:auto}}.footer[data-v-f173509a]{display:flex;justify-content:center;transition:bottom var(--animation-slow) ease-in-out;padding:1rem 0}.edit-panels[data-v-f173509a]{display:inline-block;margin:auto;background-position:16px center;padding:12px 16px;padding-inline-start:36px;border-radius:var(--border-radius-pill);max-width:200px;opacity:1;text-align:center}.button[data-v-f173509a],.button-vue[data-v-f173509a],.edit-panels[data-v-f173509a],.statuses[data-v-f173509a] .action-item .action-item__menutoggle,.statuses[data-v-f173509a] .action-item.action-item--open .action-item__menutoggle{--color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-main-text));background-color:var(--color-main-background-blur);-webkit-backdrop-filter:var(--filter-background-blur);backdrop-filter:var(--filter-background-blur);opacity:1!important}.button[data-v-f173509a]:hover,.button[data-v-f173509a]:focus,.button[data-v-f173509a]:active,.button-vue[data-v-f173509a]:hover,.button-vue[data-v-f173509a]:focus,.button-vue[data-v-f173509a]:active,.edit-panels[data-v-f173509a]:hover,.edit-panels[data-v-f173509a]:focus,.edit-panels[data-v-f173509a]:active,.statuses[data-v-f173509a] .action-item .action-item__menutoggle:hover,.statuses[data-v-f173509a] .action-item .action-item__menutoggle:focus,.statuses[data-v-f173509a] .action-item .action-item__menutoggle:active,.statuses[data-v-f173509a] .action-item.action-item--open .action-item__menutoggle:hover,.statuses[data-v-f173509a] .action-item.action-item--open .action-item__menutoggle:focus,.statuses[data-v-f173509a] .action-item.action-item--open .action-item__menutoggle:active{background-color:var(--color-background-hover)!important}.button[data-v-f173509a]:focus-visible,.button-vue[data-v-f173509a]:focus-visible,.edit-panels[data-v-f173509a]:focus-visible,.statuses[data-v-f173509a] .action-item .action-item__menutoggle:focus-visible,.statuses[data-v-f173509a] .action-item.action-item--open .action-item__menutoggle:focus-visible{box-shadow:0 0 0 4px var(--color-main-background)!important;outline:2px solid var(--color-main-text)!important}.modal__content[data-v-f173509a]{padding:32px 16px;text-align:center}.modal__content ol[data-v-f173509a]{display:flex;flex-direction:row;justify-content:center;list-style-type:none;padding-bottom:16px}.modal__content li label[data-v-f173509a]{position:relative;display:block;padding:48px 16px 14px;margin:8px;width:140px;background-color:var(--color-background-hover);border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);text-align:start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal__content li label img[data-v-f173509a],.modal__content li label span[data-v-f173509a]{position:absolute;top:16px;width:24px;height:24px;background-size:24px}.modal__content li label img[data-v-f173509a]{filter:var(--background-invert-if-dark)}.modal__content li label[data-v-f173509a]:hover{border-color:var(--color-primary-element)}.modal__content li:not(.panel-status) label span[data-v-f173509a]{filter:var(--background-invert-if-dark)}.modal__content li input[type=checkbox].checkbox+label[data-v-f173509a]:before{position:absolute;inset-inline-end:12px;top:16px}.modal__content li input:focus+label[data-v-f173509a]{border-color:var(--color-primary-element)}.modal__content h2[data-v-f173509a]{font-weight:700;margin-top:12px}.modal__content .button[data-v-f173509a]{display:inline-block;padding:10px 16px;margin:0}.modal__content p[data-v-f173509a]{max-width:650px;margin:0 auto}.modal__content p a[data-v-f173509a]:hover,.modal__content p a[data-v-f173509a]:focus{border-bottom:2px solid var(--color-border)}.modal__content .credits--end[data-v-f173509a]{padding-bottom:32px;color:var(--color-text-maxcontrast)}.modal__content .credits--end a[data-v-f173509a]{color:var(--color-text-maxcontrast)}.flip-list-move[data-v-f173509a]{transition:transform var(--animation-slow)}.statuses[data-v-f173509a]{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap;margin-bottom:36px}.statuses>li[data-v-f173509a]{margin:8px}html,body{background-attachment:fixed}#body-user #header{position:fixed}#content{overflow:auto;scrollbar-color:var(--color-background-plain-text) transparent}#app-content-vue{width:100%} diff --git a/dist/dashboard-main.css b/dist/dashboard-main.css index 143a6781e52be..54d58d3fa209b 100644 --- a/dist/dashboard-main.css +++ b/dist/dashboard-main.css @@ -1,5 +1,5 @@ /* extracted by css-entry-points-plugin */ -@import './dashboard-dashboard-main-CiWxwGSm.chunk.css'; +@import './dashboard-dashboard-main-DBQeZOKy.chunk.css'; @import './common-createElementId-DhjFt1I9-C_oBIsvc.chunk.css'; @import './common-logger-D3RVzcfQ-Ks0gkIDB.chunk.css'; @import './common-NcModal-DiDvgcU8-B-yi1OwC.chunk.css'; diff --git a/dist/dashboard-main.mjs b/dist/dashboard-main.mjs index 215559bae1c1e..71415888bddc2 100644 --- a/dist/dashboard-main.mjs +++ b/dist/dashboard-main.mjs @@ -1,2 +1,2 @@ -import{ao as bn,R as yn,r as Y,b as $e,E as He,a7 as Ie,o as b,g as E,h as _,t as A,i as $,m as te,c as nt,w as X,F as Dt,u as Te,K as wn,z as tt,L as Sn,n as Me,k as et,l as _t,C as Ne,f as _n}from"./Web-3VjN9gal.chunk.mjs";import{g as En,c as Yt,b as Dn,a as se}from"./index-kP1pdrFW.chunk.mjs";import{c as jt}from"./index-D5E2oR-5.chunk.mjs";import{_ as Ft,l as xt}from"./public-C1mLBHT3.chunk.mjs";import{t as F}from"./translation-DoG5ZELJ-GDfeNWVC.chunk.mjs";import{N as Ge}from"./logger-D3RVzcfQ-CI7JeNE7.chunk.mjs";import{a as Cn}from"./NcModal-DiDvgcU8-CMZwYcEg.chunk.mjs";import{N as xn}from"./NcUserStatusIcon-BF5OEQFU-BmqmrPuQ.chunk.mjs";import{N as kn,a as In}from"./NcDashboardWidget-zmbDEGL--CGX0WB1G.chunk.mjs";import{N as Tn}from"./NcEmptyContent-CGAPqk4S-CqTPoa13.chunk.mjs";import{I as Mn}from"./Check-C2hmidBx.chunk.mjs";import{N as Nn}from"./NcAvatar-1KxMUN7V-C6m-dkfj.chunk.mjs";import"./util-C9Hc1fff.chunk.mjs";import"./createElementId-DhjFt1I9-Dr0tCLMT.chunk.mjs";import"./PencilOutline-C831DEGj.chunk.mjs";import"./ArrowRight-BXoQMBpK.chunk.mjs";import"./colors-Cv9F-jWS-CXt_5aPR.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-3Qt8jmCE.chunk.mjs";function Ae(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,o)}return n}function q(t){for(var e=1;e=0)&&(n[i]=t[i]);return n}function Pn(t,e){if(t==null)return{};var n=On(t,e),o,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,o)&&(n[o]=t[o])}return n}var Ln="1.14.0";function ot(t){if(typeof window<"u"&&window.navigator)return!!navigator.userAgent.match(t)}var at=ot(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Ut=ot(/Edge/i),Oe=ot(/firefox/i),Pt=ot(/safari/i)&&!ot(/chrome/i)&&!ot(/android/i),Ke=ot(/iP(ad|od|hone)/i),Wn=ot(/chrome/i)&&ot(/android/i),qe={capture:!1,passive:!1};function w(t,e,n){t.addEventListener(e,n,!at&&qe)}function y(t,e,n){t.removeEventListener(e,n,!at&&qe)}function ee(t,e){if(e){if(e[0]===">"&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch{return!1}return!1}}function Rn(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function G(t,e,n,o){if(t){n=n||document;do{if(e!=null&&(e[0]===">"?t.parentNode===n&&ee(t,e):ee(t,e))||o&&t===n)return t;if(t===n)break}while(t=Rn(t))}return null}var Pe=/\s+/g;function B(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(Pe," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(Pe," ")}}function m(t,e,n){var o=t&&t.style;if(o){if(n===void 0)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),e===void 0?n:n[e];!(e in o)&&e.indexOf("webkit")===-1&&(e="-webkit-"+e),o[e]=n+(typeof n=="string"?"":"px")}}function kt(t,e){var n="";if(typeof t=="string")n=t;else do{var o=m(t,"transform");o&&o!=="none"&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function Ze(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,a=o.length;if(n)for(;i=a,!r)return o;if(o===K())break;o=ct(o,!1)}return!1}function It(t,e,n,o){for(var i=0,a=0,r=t.children;a2&&arguments[2]!==void 0?arguments[2]:{},o=n.evt,i=Pn(n,Xn);zt.pluginEvent.bind(g)(t,e,q({dragEl:d,parentEl:C,ghostEl:v,rootEl:D,nextEl:vt,lastDownEl:qt,cloneEl:x,cloneHidden:dt,dragStarted:Nt,putSortable:M,activeSortable:g.active,originalEvent:o,oldIndex:Ct,oldDraggableIndex:Wt,newIndex:U,newDraggableIndex:lt,hideGhostForTarget:an,unhideGhostForTarget:rn,cloneNowHidden:function(){dt=!0},cloneNowShown:function(){dt=!1},dispatchSortableEvent:function(a){P({sortable:e,name:a,originalEvent:o})}},i))};function P(t){jn(q({putSortable:M,cloneEl:x,targetEl:d,rootEl:D,oldIndex:Ct,oldDraggableIndex:Wt,newIndex:U,newDraggableIndex:lt},t))}var d,C,v,D,vt,qt,x,dt,Ct,U,Wt,lt,Xt,M,Et=!1,ne=!1,oe=[],gt,j,ce,ue,Re,Be,Nt,St,Rt,Bt=!1,$t=!1,Zt,N,he=[],we=!1,ie=[],re=typeof document<"u",Ht=Ke,Fe=Ut||at?"cssFloat":"float",$n=re&&!Wn&&!Ke&&"draggable"in document.createElement("div"),en=(function(){if(re){if(at)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto",t.style.pointerEvents==="auto"}})(),nn=function(t,e){var n=m(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),i=It(t,0,e),a=It(t,1,e),r=i&&m(i),l=a&&m(a),s=r&&parseInt(r.marginLeft)+parseInt(r.marginRight)+T(i).width,h=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+T(a).width;if(n.display==="flex")return n.flexDirection==="column"||n.flexDirection==="column-reverse"?"vertical":"horizontal";if(n.display==="grid")return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&r.float&&r.float!=="none"){var u=r.float==="left"?"left":"right";return a&&(l.clear==="both"||l.clear===u)?"vertical":"horizontal"}return i&&(r.display==="block"||r.display==="flex"||r.display==="table"||r.display==="grid"||s>=o&&n[Fe]==="none"||a&&n[Fe]==="none"&&s+h>o)?"vertical":"horizontal"},Hn=function(t,e,n){var o=n?t.left:t.top,i=n?t.right:t.bottom,a=n?t.width:t.height,r=n?e.left:e.top,l=n?e.right:e.bottom,s=n?e.width:e.height;return o===r||i===l||o+a/2===r+s/2},Gn=function(t,e){var n;return oe.some(function(o){var i=o[z].options.emptyInsertThreshold;if(!(!i||xe(o))){var a=T(o),r=t>=a.left-i&&t<=a.right+i,l=e>=a.top-i&&e<=a.bottom+i;if(r&&l)return n=o}}),n},on=function(t){function e(i,a){return function(r,l,s,h){var u=r.options.group.name&&l.options.group.name&&r.options.group.name===l.options.group.name;if(i==null&&(a||u))return!0;if(i==null||i===!1)return!1;if(a&&i==="clone")return i;if(typeof i=="function")return e(i(r,l,s,h),a)(r,l,s,h);var p=(a?r:l).options.group.name;return i===!0||typeof i=="string"&&i===p||i.join&&i.indexOf(p)>-1}}var n={},o=t.group;(!o||Kt(o)!="object")&&(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},an=function(){!en&&v&&m(v,"display","none")},rn=function(){!en&&v&&m(v,"display","")};re&&document.addEventListener("click",function(t){if(ne)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),ne=!1,!1},!0);var ft=function(t){if(d){t=t.touches?t.touches[0]:t;var e=Gn(t.clientX,t.clientY);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[z]._onDragOver(n)}}},Kn=function(t){d&&d.parentNode[z]._isOutsideThisEl(t.target)};function g(t,e){if(!(t&&t.nodeType&&t.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=it({},e),t[z]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return nn(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(a,r){a.setData("Text",r.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:g.supportPointer!==!1&&"PointerEvent"in window&&!Pt,emptyInsertThreshold:5};zt.initializePlugins(this,t,n);for(var o in n)!(o in e)&&(e[o]=n[o]);on(e);for(var i in this)i.charAt(0)==="_"&&typeof this[i]=="function"&&(this[i]=this[i].bind(this));this.nativeDraggable=e.forceFallback?!1:$n,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?w(t,"pointerdown",this._onTapStart):(w(t,"mousedown",this._onTapStart),w(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(w(t,"dragover",this),w(t,"dragenter",this)),oe.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),it(this,zn())}g.prototype={constructor:g,_isOutsideThisEl:function(t){!this.el.contains(t)&&t!==this.el&&(St=null)},_getDirection:function(t,e){return typeof this.options.direction=="function"?this.options.direction.call(this,t,e,d):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,i=o.preventOnFilter,a=t.type,r=t.touches&&t.touches[0]||t.pointerType&&t.pointerType==="touch"&&t,l=(r||t).target,s=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||l,h=o.filter;if(oo(n),!d&&!(/mousedown|pointerdown/.test(a)&&t.button!==0||o.disabled)&&!s.isContentEditable&&!(!this.nativeDraggable&&Pt&&l&&l.tagName.toUpperCase()==="SELECT")&&(l=G(l,o.draggable,n,!1),!(l&&l.animated)&&qt!==l)){if(Ct=V(l),Wt=V(l,o.draggable),typeof h=="function"){if(h.call(this,t,l,this)){P({sortable:e,rootEl:s,name:"filter",targetEl:l,toEl:n,fromEl:n}),L("filter",e,{evt:t}),i&&t.cancelable&&t.preventDefault();return}}else if(h&&(h=h.split(",").some(function(u){if(u=G(s,u.trim(),n,!1),u)return P({sortable:e,rootEl:u,name:"filter",targetEl:l,fromEl:n,toEl:n}),L("filter",e,{evt:t}),!0}),h)){i&&t.cancelable&&t.preventDefault();return}o.handle&&!G(s,o.handle,n,!1)||this._prepareDragStart(t,r,l)}}},_prepareDragStart:function(t,e,n){var o=this,i=o.el,a=o.options,r=i.ownerDocument,l;if(n&&!d&&n.parentNode===i){var s=T(n);if(D=i,d=n,C=d.parentNode,vt=d.nextSibling,qt=n,Xt=a.group,g.dragged=d,gt={target:d,clientX:(e||t).clientX,clientY:(e||t).clientY},Re=gt.clientX-s.left,Be=gt.clientY-s.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,d.style["will-change"]="all",l=function(){if(L("delayEnded",o,{evt:t}),g.eventCanceled){o._onDrop();return}o._disableDelayedDragEvents(),!Oe&&o.nativeDraggable&&(d.draggable=!0),o._triggerDragStart(t,e),P({sortable:o,name:"choose",originalEvent:t}),B(d,a.chosenClass,!0)},a.ignore.split(",").forEach(function(h){Ze(d,h.trim(),pe)}),w(r,"dragover",ft),w(r,"mousemove",ft),w(r,"touchmove",ft),w(r,"mouseup",o._onDrop),w(r,"touchend",o._onDrop),w(r,"touchcancel",o._onDrop),Oe&&this.nativeDraggable&&(this.options.touchStartThreshold=4,d.draggable=!0),L("delayStart",this,{evt:t}),a.delay&&(!a.delayOnTouchOnly||e)&&(!this.nativeDraggable||!(Ut||at))){if(g.eventCanceled){this._onDrop();return}w(r,"mouseup",o._disableDelayedDrag),w(r,"touchend",o._disableDelayedDrag),w(r,"touchcancel",o._disableDelayedDrag),w(r,"mousemove",o._delayedDragTouchMoveHandler),w(r,"touchmove",o._delayedDragTouchMoveHandler),a.supportPointer&&w(r,"pointermove",o._delayedDragTouchMoveHandler),o._dragStartTimer=setTimeout(l,a.delay)}else l()}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){d&&pe(d),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;y(t,"mouseup",this._disableDelayedDrag),y(t,"touchend",this._disableDelayedDrag),y(t,"touchcancel",this._disableDelayedDrag),y(t,"mousemove",this._delayedDragTouchMoveHandler),y(t,"touchmove",this._delayedDragTouchMoveHandler),y(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||t.pointerType=="touch"&&t,!this.nativeDraggable||e?this.options.supportPointer?w(document,"pointermove",this._onTouchMove):e?w(document,"touchmove",this._onTouchMove):w(document,"mousemove",this._onTouchMove):(w(d,"dragend",this),w(D,"dragstart",this._onDragStart));try{document.selection?Qt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(t,e){if(Et=!1,D&&d){L("dragStarted",this,{evt:e}),this.nativeDraggable&&w(document,"dragover",Kn);var n=this.options;!t&&B(d,n.dragClass,!1),B(d,n.ghostClass,!0),g.active=this,t&&this._appendGhost(),P({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(j){this._lastX=j.clientX,this._lastY=j.clientY,an();for(var t=document.elementFromPoint(j.clientX,j.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(j.clientX,j.clientY),t!==e);)e=t;if(d.parentNode[z]._isOutsideThisEl(t),e)do{if(e[z]){var n=void 0;if(n=e[z]._onDragOver({clientX:j.clientX,clientY:j.clientY,target:t,rootEl:e}),n&&!this.options.dragoverBubble)break}t=e}while(e=e.parentNode);rn()}},_onTouchMove:function(t){if(gt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,a=v&&kt(v,!0),r=v&&a&&a.a,l=v&&a&&a.d,s=Ht&&N&&We(N),h=(i.clientX-gt.clientX+o.x)/(r||1)+(s?s[0]-he[0]:0)/(r||1),u=(i.clientY-gt.clientY+o.y)/(l||1)+(s?s[1]-he[1]:0)/(l||1);if(!g.active&&!Et){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))=0&&(P({rootEl:C,name:"add",toEl:C,fromEl:D,originalEvent:t}),P({sortable:this,name:"remove",toEl:C,originalEvent:t}),P({rootEl:C,name:"sort",toEl:C,fromEl:D,originalEvent:t}),P({sortable:this,name:"sort",toEl:C,originalEvent:t})),M&&M.save()):U!==Ct&&U>=0&&(P({sortable:this,name:"update",toEl:C,originalEvent:t}),P({sortable:this,name:"sort",toEl:C,originalEvent:t})),g.active&&((U==null||U===-1)&&(U=Ct,lt=Wt),P({sortable:this,name:"end",toEl:C,originalEvent:t}),this.save()))),this._nulling()},_nulling:function(){L("nulling",this),D=d=C=v=vt=x=qt=dt=gt=j=Nt=U=lt=Ct=Wt=St=Rt=M=Xt=g.dragged=g.ghost=g.clone=g.active=null,ie.forEach(function(t){t.checked=!0}),ie.length=ce=ue=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":d&&(this._onDragOver(t),qn(t));break;case"selectstart":t.preventDefault();break}},toArray:function(){for(var t=[],e,n=this.el.children,o=0,i=n.length,a=this.options;oo.right+i||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+i}function to(t,e,n,o,i,a,r,l){var s=o?t.clientY:t.clientX,h=o?n.height:n.width,u=o?n.top:n.left,p=o?n.bottom:n.right,c=!1;if(!r){if(l&&Ztu+h*a/2:sp-Zt)return-Rt}else if(s>u+h*(1-i)/2&&sp-h*a/2)?s>u+h/2?1:-1:0}function eo(t){return V(d)t.replace(lo,(e,n)=>n.toUpperCase())),ln=["Start","Add","Remove","Update","End"],dn=["Choose","Unchoose","Sort","Filter","Clone"],cn=["Move"],uo=[cn,ln,dn].flatMap(t=>t).map(t=>`on${t}`),Ce={manage:cn,manageAndEmit:ln,emit:dn};function ho(t){return uo.indexOf(t)!==-1}const po=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"];function mo(t){return po.includes(t)}function go(t){return["transition-group","TransitionGroup"].includes(t)}function un(t){return["id","class","role","style"].includes(t)||t.startsWith("data-")||t.startsWith("aria-")||t.startsWith("on")}function hn(t){return t.reduce((e,[n,o])=>(e[n]=o,e),{})}function fo({$attrs:t,componentData:e={}}){return{...hn(Object.entries(t).filter(([n,o])=>un(n))),...e}}function vo({$attrs:t,callBackBuilder:e}){const n=hn(pn(t));Object.entries(e).forEach(([i,a])=>{Ce[i].forEach(r=>{n[`on${r}`]=a(r)})});const o=`[data-draggable]${n.draggable||""}`;return{...n,draggable:o}}function pn(t){return Object.entries(t).filter(([e,n])=>!un(e)).map(([e,n])=>[co(e),n]).filter(([e,n])=>!ho(e))}const Ve=({el:t})=>t,bo=(t,e)=>t.__draggable_context=e,Ye=t=>t.__draggable_context;class yo{constructor({nodes:{header:e,default:n,footer:o},root:i,realList:a}){this.defaultNodes=n,this.children=[...e,...n,...o],this.externalComponent=i.externalComponent,this.rootTransition=i.transition,this.tag=i.tag,this.realList=a}get _isRootComponent(){return this.externalComponent||this.rootTransition}render(e,n){const{tag:o,children:i,_isRootComponent:a}=this;return e(o,n,a?{default:()=>i}:i)}updated(){const{defaultNodes:e,realList:n}=this;e.forEach((o,i)=>{bo(Ve(o),{element:n[i],index:i})})}getUnderlyingVm(e){return Ye(e)}getVmIndexFromDomIndex(e,n){const{defaultNodes:o}=this,{length:i}=o,a=n.children,r=a.item(e);if(r===null)return i;const l=Ye(r);if(l)return l.index;if(i===0)return 0;const s=Ve(o[0]),h=[...a].findIndex(u=>u===s);return ewo(t,s)),{item:r}=t;if(!r)throw new Error("draggable element must have an item slot");const l=o.flatMap((s,h)=>r({element:s,index:h}).map(u=>(u.key=n(s),u.props={...u.props||{},"data-draggable":!0},u)));if(l.length!==o.length)throw new Error("Item slot must have only one child");return{header:i,footer:a,default:l}}function _o(t){const e=go(t),n=!mo(t)&&!e;return{transition:e,externalComponent:n,tag:n?Y(t):e?yn:t}}function Eo({$slots:t,tag:e,realList:n,getKey:o}){const i=So({$slots:t,realList:n,getKey:o}),a=_o(e);return new yo({nodes:i,root:a,realList:n})}function mn(t,e){He(()=>this.$emit(t.toLowerCase(),e))}function gn(t){return(e,n)=>{if(this.realList!==null)return this[`onDrag${t}`](e,n)}}function Do(t){const e=gn.call(this,t);return(n,o)=>{e.call(this,n,o),mn.call(this,t,n)}}let ye=null;const Co={list:{type:Array,required:!1,default:null},modelValue:{type:Array,required:!1,default:null},itemKey:{type:[String,Function],required:!0},clone:{type:Function,default:t=>t},tag:{type:String,default:"div"},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},xo=["update:modelValue","change",...[...Ce.manageAndEmit,...Ce.emit].map(t=>t.toLowerCase())],ko=$e({name:"draggable",inheritAttrs:!1,props:Co,emits:xo,data(){return{error:!1}},render(){try{this.error=!1;const{$slots:t,$attrs:e,tag:n,componentData:o,realList:i,getKey:a}=this,r=Eo({$slots:t,tag:n,realList:i,getKey:a});this.componentStructure=r;const l=fo({$attrs:e,componentData:o});return r.render(Ie,l)}catch(t){return this.error=!0,Ie("pre",{style:{color:"red"}},t.stack)}},created(){this.list!==null&&this.modelValue!==null&&ro.error("modelValue and list props are mutually exclusive! Please set one or another.")},mounted(){if(this.error)return;const{$attrs:t,$el:e,componentStructure:n}=this;n.updated();const o=vo({$attrs:t,callBackBuilder:{manageAndEmit:a=>Do.call(this,a),emit:a=>mn.bind(this,a),manage:a=>gn.call(this,a)}}),i=e.nodeType===1?e:e.parentElement;this._sortable=new g(i,o),this.targetDomElement=i,i.__draggable_component__=this},updated(){this.componentStructure.updated()},beforeUnmount(){this._sortable!==void 0&&this._sortable.destroy()},computed:{realList(){const{list:t}=this;return t||this.modelValue},getKey(){const{itemKey:t}=this;return typeof t=="function"?t:e=>e[t]}},watch:{$attrs:{handler(t){const{_sortable:e}=this;e&&pn(t).forEach(([n,o])=>{e.option(n,o)})},deep:!0}},methods:{getUnderlyingVm(t){return this.componentStructure.getUnderlyingVm(t)||null},getUnderlyingPotencialDraggableComponent(t){return t.__draggable_component__},emitChanges(t){He(()=>this.$emit("change",t))},alterList(t){if(this.list){t(this.list);return}const e=[...this.modelValue];t(e),this.$emit("update:modelValue",e)},spliceList(){const t=e=>e.splice(...arguments);this.alterList(t)},updatePosition(t,e){const n=o=>o.splice(e,0,o.splice(t,1)[0]);this.alterList(n)},getRelatedContextFromMoveEvent({to:t,related:e}){const n=this.getUnderlyingPotencialDraggableComponent(t);if(!n)return{component:n};const o=n.realList,i={list:o,component:n};return t!==e&&o?{...n.getUnderlyingVm(e)||{},...i}:i},getVmIndexFromDomIndex(t){return this.componentStructure.getVmIndexFromDomIndex(t,this.targetDomElement)},onDragStart(t){this.context=this.getUnderlyingVm(t.item),t.item._underlying_vm_=this.clone(this.context.element),ye=t.item},onDragAdd(t){const e=t.item._underlying_vm_;if(e===void 0)return;be(t.item);const n=this.getVmIndexFromDomIndex(t.newIndex);this.spliceList(n,0,e);const o={element:e,newIndex:n};this.emitChanges({added:o})},onDragRemove(t){if(ze(this.$el,t.item,t.oldIndex),t.pullMode==="clone"){be(t.clone);return}const{index:e,element:n}=this.context;this.spliceList(e,1);const o={element:n,oldIndex:e};this.emitChanges({removed:o})},onDragUpdate(t){be(t.item),ze(t.from,t.item,t.oldIndex);const e=this.context.index,n=this.getVmIndexFromDomIndex(t.newIndex);this.updatePosition(e,n);const o={element:this.context.element,oldIndex:e,newIndex:n};this.emitChanges({moved:o})},computeFutureIndex(t,e){if(!t.element)return 0;const n=[...e.to.children].filter(a=>a.style.display!=="none"),o=n.indexOf(e.related),i=t.component.getVmIndexFromDomIndex(o);return n.indexOf(ye)!==-1||!e.willInsertAfter?i:i+1},onDragMove(t,e){const{move:n,realList:o}=this;if(!n||!o)return!0;const i=this.getRelatedContextFromMoveEvent(t),a=this.computeFutureIndex(i,t),r={...this.context,futureIndex:a},l={...t,relatedContext:i,draggedContext:r};return n(l,e)},onDragEnd(){ye=null}}}),Io={name:"PencilIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},To=["aria-hidden","aria-label"],Mo=["fill","width","height"],No={d:"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"},Ao={key:0};function Oo(t,e,n,o,i,a){return b(),E("span",te(t.$attrs,{"aria-hidden":n.title?null:"true","aria-label":n.title,class:"material-design-icon pencil-icon",role:"img",onClick:e[0]||(e[0]=r=>t.$emit("click",r))}),[(b(),E("svg",{fill:n.fillColor,class:"material-design-icon__svg",width:n.size,height:n.size,viewBox:"0 0 24 24"},[_("path",No,[n.title?(b(),E("title",Ao,A(n.title),1)):$("",!0)])],8,Mo))],16,To)}const Po=Ft(Io,[["render",Oo]]),Lo={name:"FileIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},Wo=["aria-hidden","aria-label"],Ro=["fill","width","height"],Bo={d:"M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6Z"},Fo={key:0};function Uo(t,e,n,o,i,a){return b(),E("span",te(t.$attrs,{"aria-hidden":n.title?null:"true","aria-label":n.title,class:"material-design-icon file-icon",role:"img",onClick:e[0]||(e[0]=r=>t.$emit("click",r))}),[(b(),E("svg",{fill:n.fillColor,class:"material-design-icon__svg",width:n.size,height:n.size,viewBox:"0 0 24 24"},[_("path",Bo,[n.title?(b(),E("title",Fo,A(n.title),1)):$("",!0)])],8,Ro))],16,Wo)}const zo=Ft(Lo,[["render",Uo]]),Vo=["src"],Yo=$e({__name:"ApiDashboardWidgetItem",props:{item:{type:Object,required:!0},iconSize:{type:Number,required:!0},roundedIcons:{type:Boolean,default:!0}},setup(t){const e=Me(!1),n=Me(!1);return(o,i)=>(b(),nt(Te(kn),{targetUrl:t.item.link,overlayIconUrl:t.item.overlayIconUrl?t.item.overlayIconUrl:"",mainText:t.item.title,subText:t.item.subtitle},{avatar:X(()=>[t.item.iconUrl?(b(),E(Dt,{key:0},[t.roundedIcons?(b(),nt(Te(Nn),{key:0,size:t.iconSize,url:t.item.iconUrl},null,8,["size","url"])):(b(),E(Dt,{key:1},[wn(_("img",{alt:"",class:tt(["api-dashboard-widget-item__icon",{"hidden-visually":!e.value}]),src:t.item.iconUrl,onError:i[0]||(i[0]=a=>n.value=!0),onLoad:i[1]||(i[1]=a=>e.value=!0)},null,42,Vo),[[Sn,!n.value]]),e.value?$("",!0):(b(),nt(zo,{key:0,size:t.iconSize},null,8,["size"]))],64))],64)):$("",!0)]),_:1},8,["targetUrl","overlayIconUrl","mainText","subText"]))}}),jo=Ft(Yo,[["__scopeId","data-v-071812ee"]]),Xo={name:"ApiDashboardWidget",components:{ApiDashboardWidgetItem:jo,CheckIcon:Mn,NcDashboardWidget:In,NcEmptyContent:Tn,NcButton:Ge},props:{widget:{type:[Object,void 0],default:void 0},data:{type:[Object,void 0],default:void 0},loading:{type:Boolean,required:!0}},data(){return{iconSize:44}},computed:{items(){return this.data?.items??[]},emptyContentMessage(){return this.data?.emptyContentMessage??""},halfEmptyContentMessage(){return this.data?.halfEmptyContentMessage??""},newButton(){return this.widget?.buttons?.find(t=>t.type==="new")},moreButton(){return this.widget?.buttons?.find(t=>t.type==="more")},setupButton(){return this.widget?.buttons?.find(t=>t.type==="setup")},showMoreLabel(){return this.moreButton?.text},showMoreUrl(){return this.moreButton?.link}},mounted(){const t=window.getComputedStyle(document.body).getPropertyValue("--default-clickable-area"),e=Number.parseFloat(t);this.iconSize=Number.isNaN(e)?44:e}};function $o(t,e,n,o,i,a){const r=Y("ApiDashboardWidgetItem"),l=Y("CheckIcon"),s=Y("NcButton"),h=Y("NcEmptyContent"),u=Y("NcDashboardWidget");return b(),nt(u,{items:a.items,showMoreLabel:a.showMoreLabel,showMoreUrl:a.showMoreUrl,loading:n.loading,showItemsAndEmptyContent:!!a.halfEmptyContentMessage,halfEmptyContentMessage:a.halfEmptyContentMessage},{default:X(({item:p})=>[_t(r,{item:p,iconSize:i.iconSize,roundedIcons:n.widget.item_icons_round},null,8,["item","iconSize","roundedIcons"])]),"empty-content":X(()=>[a.items.length===0?(b(),nt(h,{key:0,description:a.emptyContentMessage},{icon:X(()=>[a.emptyContentMessage?(b(),nt(l,{key:0,size:65})):$("",!0)]),action:X(()=>[a.setupButton?(b(),nt(s,{key:0,href:a.setupButton.link},{default:X(()=>[et(A(a.setupButton.text),1)]),_:1},8,["href"])):$("",!0)]),_:1},8,["description"])):$("",!0)]),_:1},8,["items","showMoreLabel","showMoreUrl","loading","showItemsAndEmptyContent","halfEmptyContentMessage"])}const Ho=Ft(Xo,[["render",$o]]),Go=En().detectLogLevel().setApp("dashboard").build(),Ko={data(){return{isMobile:this._isMobile()}},beforeMount(){window.addEventListener("resize",this._onResize)},beforeUnmount(){window.removeEventListener("resize",this._onResize)},methods:{_onResize(){this.isMobile=this._isMobile()},_isMobile(){return document.documentElement.clientWidth<768}}},je=xt("dashboard","panels"),qo=xt("dashboard","firstRun"),Zo=new Date(xt("dashboard","birthdate")),Qo={weather:{text:F("dashboard","Weather"),icon:"icon-weather-status"},status:{text:F("dashboard","Status")}},Jo={name:"DashboardApp",components:{ApiDashboardWidget:Ho,NcButton:Ge,Draggable:ko,NcModal:Cn,Pencil:Po,NcUserStatusIcon:xn},mixins:[Ko],setup(){return{t:F,productName:window.OC.theme.productName}},data(){return{isAdmin:se().isAdmin,timer:new Date,registeredStatus:[],callbacks:{},allCallbacksStatus:{},statusElements:{},statusInfo:Qo,enabledStatuses:xt("dashboard","statuses"),panels:je,firstRun:qo,displayName:se()?.displayName,uid:se()?.uid,layout:xt("dashboard","layout").filter(t=>je[t]),modalPanelList:[],isModalDragging:!1,modal:!1,appStoreUrl:Dn("/settings/apps/dashboard"),appStoreEnabled:xt("dashboard","appStoreEnabled",!0),statuses:{},apiWidgets:[],apiWidgetItems:{},loadingItems:!0,birthdate:Zo}},computed:{greeting(){const t=this.timer.getHours(),e=this.birthdate instanceof Date&&this.birthdate.getMonth()===this.timer.getMonth()&&this.birthdate.getDate()===this.timer.getDate();let n;e?n="birthday":t>=22||t<5?n="night":t>=18?n="evening":t>=12?n="afternoon":n="morning";const o={morning:{generic:F("dashboard","Good morning"),withName:F("dashboard","Good morning, {name}",{name:this.displayName},void 0,{escape:!1})},afternoon:{generic:F("dashboard","Good afternoon"),withName:F("dashboard","Good afternoon, {name}",{name:this.displayName},void 0,{escape:!1})},evening:{generic:F("dashboard","Good evening"),withName:F("dashboard","Good evening, {name}",{name:this.displayName},void 0,{escape:!1})},night:{generic:F("dashboard","Hello"),withName:F("dashboard","Hello, {name}",{name:this.displayName},void 0,{escape:!1})},birthday:{generic:F("dashboard","Happy birthday 🥳🤩🎂🎉"),withName:F("dashboard","Happy birthday, {name} 🥳🤩🎂🎉",{name:this.displayName},void 0,{escape:!1})}};return{text:this.displayName&&this.uid!==this.displayName?o[n].withName:o[n].generic}},isActive(){return t=>this.layout.indexOf(t.id)>-1},isStatusActive(){return t=>this.enabledStatuses.findIndex(e=>e===t)!==-1},sortedAllStatuses(){return Object.keys(this.allCallbacksStatus).slice().sort(this.sortStatuses)},sortedRegisteredStatus(){return this.registeredStatus.slice().sort(this.sortStatuses)}},watch:{callbacks(){this.$nextTick(()=>this.rerenderPanels())},layout(){this.modal&&!this.isModalDragging&&(this.modalPanelList=this.getSortedPanelObjects())}},async created(){await this.fetchApiWidgets();const t=Object.values(this.apiWidgets).filter(e=>this.isApiWidgetV2(e.id)&&this.layout.includes(e.id)).map(e=>e.id);await Promise.all(t.map(e=>this.fetchApiWidgetItems([e],!0)));for(const e of Object.values(this.apiWidgets))e.reload_interval>0&&setInterval(async()=>{this.layout.includes(e.id)&&await this.fetchApiWidgetItems([e.id],!0)},e.reload_interval*1e3);this.$nextTick(()=>this.rerenderPanels())},mounted(){this.updateSkipLink(),window.addEventListener("scroll",this.handleScroll),setInterval(()=>{this.timer=new Date},3e4),this.firstRun&&window.addEventListener("scroll",this.disableFirstrunHint)},unmounted(){window.removeEventListener("scroll",this.handleScroll)},methods:{register(t,e){this.callbacks[t]=e},registerStatus(t,e){this.allCallbacksStatus[t]=e,this.isStatusActive(t)&&(this.registeredStatus.includes(t)||this.registeredStatus.push(t),this.$nextTick(()=>this.mountStatus(t)))},setStatusElement(t,e){e?(this.statusElements[t]=e,this.mountStatus(t)):delete this.statusElements[t]},mountStatus(t){if(this.statuses[t]?.mounted)return;const e=this.statusElements[t],n=this.allCallbacksStatus[t];e&&n&&(n(e),this.statuses[t]={mounted:!0})},rerenderPanels(){for(const t in this.callbacks){if(this.isApiWidgetV2(this.panels[t].id))continue;const e=this.$refs[t];if(this.layout.indexOf(t)!==-1&&!(this.panels[t]&&this.panels[t].mounted))if(e){const n=Array.isArray(e)?e[0]:e;this.callbacks[t](n,{widget:this.panels[t]}),this.panels[t].mounted=!0}else Go.error("Failed to register panel in the frontend as no backend data was provided for "+t)}},saveLayout(){jt.post(Yt("/apps/dashboard/api/v3/layout"),{layout:this.layout})},saveStatuses(){jt.post(Yt("/apps/dashboard/api/v3/statuses"),{statuses:this.enabledStatuses})},showModal(){this.modal=!0,this.firstRun=!1,this.modalPanelList=this.getSortedPanelObjects()},closeModal(){this.modal=!1},getSortedPanelObjects(){return Object.values(this.panels).sort((t,e)=>{const n=this.layout.indexOf(t.id),o=this.layout.indexOf(e.id);return n===-1||o===-1?o-n||t.id-e.id:n-o||t.id-e.id})},onModalPanelListUpdate(t){this.modalPanelList=t},onModalDragStart(){this.isModalDragging=!0},onModalDragEnd(){this.isModalDragging=!1,this.layout=this.modalPanelList.filter(t=>this.layout.includes(t.id)).map(t=>t.id),this.saveLayout()},updateCheckbox(t,e){const n=this.layout.indexOf(t.id);!e&&n>-1?this.layout.splice(n,1):(this.layout.push(t.id),this.isApiWidgetV2(t.id)&&this.fetchApiWidgetItems([t.id],!0)),this.panels[t.id].mounted=!1,this.saveLayout(),this.$nextTick(()=>this.rerenderPanels())},disableFirstrunHint(){window.removeEventListener("scroll",this.disableFirstrunHint),setTimeout(()=>{this.firstRun=!1},1e3)},updateSkipLink(){document.getElementsByClassName("skip-navigation")[0].setAttribute("href","#app-dashboard")},updateStatusCheckbox(t,e){e?this.enableStatus(t):this.disableStatus(t)},enableStatus(t){this.enabledStatuses.push(t),this.registerStatus(t,this.allCallbacksStatus[t]),this.saveStatuses()},disableStatus(t){const e=this.enabledStatuses.findIndex(o=>o===t);e!==-1&&this.enabledStatuses.splice(e,1);const n=this.registeredStatus.findIndex(o=>o===t);n!==-1&&(this.registeredStatus.splice(n,1),this.statuses[t]={mounted:!1}),this.saveStatuses()},sortStatuses(t,e){const n=t.toLowerCase(),o=e.toLowerCase();return n>o?1:n70?document.body.classList.add("dashboard--scrolled"):document.body.classList.remove("dashboard--scrolled")},async fetchApiWidgets(){const{data:t}=await jt.get(Yt("/apps/dashboard/api/v1/widgets"));this.apiWidgets=t.ocs.data},async fetchApiWidgetItems(t,e=!1){try{const n=Yt("/apps/dashboard/api/v2/widget-items"),o=new URLSearchParams(t.map(a=>["widgets[]",a])),i=(await jt.get(`${n}?${o.toString()}`)).data.ocs.data;e?this.apiWidgetItems={...this.apiWidgetItems,...i}:this.apiWidgetItems=i}finally{this.loadingItems=!1}},isApiWidgetV2(t){for(const e of Object.values(this.apiWidgets))if(e.id===t&&e.item_api_versions.includes(2))return!0;return!1}}},ti={id:"app-dashboard"},ei={key:0,class:"statuses"},ni=["id"],oi={class:"panel--header"},ii=["src"],ai={class:"panel--content"},ri={class:"panel--header"},si=["data-id"],li={class:"footer"},di={class:"modal__content"},ci={class:"panels"},ui=["id","checked","onInput"],hi=["for"],pi=["id","checked","onInput"],mi=["for"],gi=["src"],fi=["href"],vi={key:1},bi={class:"credits--end"},yi={href:"https://api.met.no/doc/TermsOfService",target:"_blank",rel:"noopener"},wi={href:"https://wiki.osmfoundation.org/wiki/Privacy_Policy",target:"_blank",rel:"noopener"},Si={href:"https://www.opentopodata.org/#public-api",target:"_blank",rel:"noopener"};function _i(t,e,n,o,i,a){const r=Y("ApiDashboardWidget"),l=Y("Draggable"),s=Y("Pencil"),h=Y("NcButton"),u=Y("NcUserStatusIcon"),p=Y("NcModal");return b(),E("main",ti,[_("h2",null,A(a.greeting.text),1),a.sortedRegisteredStatus.length>0?(b(),E("ul",ei,[(b(!0),E(Dt,null,Ne(a.sortedRegisteredStatus,c=>(b(),E("li",{id:"status-"+c,key:c},[_("div",{ref_for:!0,ref:f=>a.setStatusElement(c,f)},null,512)],8,ni))),128))])):$("",!0),_t(l,te({modelValue:i.layout,"onUpdate:modelValue":e[0]||(e[0]=c=>i.layout=c)},{swapThreshold:.3,delay:500,delayOnTouchOnly:!0,touchStartThreshold:3},{class:"panels",itemKey:c=>c,handle:".panel--header",onEnd:a.saveLayout}),{item:X(({element:c})=>[(b(),E("div",{key:c,class:"panel"},[a.isApiWidgetV2(i.panels[c].id)?(b(),E(Dt,{key:0},[_("div",oi,[_("h2",null,[i.apiWidgets[i.panels[c].id].icon_url?(b(),E("img",{key:0,src:i.apiWidgets[i.panels[c].id].icon_url,alt:""},null,8,ii)):(b(),E("span",{key:1,class:tt(i.apiWidgets[i.panels[c].id].icon_class),"aria-hidden":"true"},null,2)),et(" "+A(i.apiWidgets[i.panels[c].id].title),1)])]),_("div",ai,[_t(r,{widget:i.apiWidgets[i.panels[c].id],data:i.apiWidgetItems[i.panels[c].id],loading:i.loadingItems},null,8,["widget","data","loading"])])],64)):(b(),E(Dt,{key:1},[_("div",ri,[_("h2",null,[_("span",{class:tt(i.panels[c].iconClass),"aria-hidden":"true"},null,2),et(" "+A(i.panels[c].title),1)])]),_("div",{class:tt(["panel--content",{loading:!i.panels[c].mounted}])},[_("div",{ref:i.panels[c].id,"data-id":i.panels[c].id},null,8,si)],2)],64))]))]),_:1},16,["modelValue","itemKey","onEnd"]),_("div",li,[_t(h,{onClick:a.showModal},{icon:X(()=>[_t(s,{size:20})]),default:X(()=>[et(" "+A(o.t("dashboard","Customize")),1)]),_:1},8,["onClick"])]),i.modal?(b(),nt(p,{key:1,size:"large",closeOnClickOutside:!0,onClose:a.closeModal},{default:X(()=>[_("div",di,[_("h2",null,A(o.t("dashboard","Edit widgets")),1),_("ol",ci,[(b(!0),E(Dt,null,Ne(a.sortedAllStatuses,c=>(b(),E("li",{key:c,class:tt("panel-"+c)},[_("input",{id:"status-checkbox-"+c,type:"checkbox",class:"checkbox",checked:a.isStatusActive(c),onInput:f=>a.updateStatusCheckbox(c,f.target.checked)},null,40,ui),_("label",{for:"status-checkbox-"+c},[c==="status"?(b(),nt(u,{key:0,status:"online","aria-hidden":"true"})):(b(),E("span",{key:1,class:tt(i.statusInfo[c].icon),"aria-hidden":"true"},null,2)),et(" "+A(i.statusInfo[c].text),1)],8,hi)],2))),128))]),_t(l,te({swapThreshold:.3,delay:500,delayOnTouchOnly:!0,touchStartThreshold:3},{class:"panels",tag:"ol",itemKey:c=>c.id,handle:".draggable",modelValue:i.modalPanelList,"onUpdate:modelValue":a.onModalPanelListUpdate,onStart:a.onModalDragStart,onEnd:a.onModalDragEnd}),{item:X(({element:c})=>[(b(),E("li",{key:c.id,class:tt("panel-"+c.id)},[_("input",{id:"panel-checkbox-"+c.id,type:"checkbox",class:"checkbox",checked:a.isActive(c),onInput:f=>a.updateCheckbox(c,f.target.checked)},null,40,pi),_("label",{for:"panel-checkbox-"+c.id,class:tt({draggable:a.isActive(c)})},[c.iconUrl?(b(),E("img",{key:0,alt:"",src:c.iconUrl},null,8,gi)):(b(),E("span",{key:1,class:tt(c.iconClass),"aria-hidden":"true"},null,2)),et(" "+A(c.title),1)],10,mi)],2))]),_:1},16,["itemKey","modelValue","onUpdate:modelValue","onStart","onEnd"]),i.isAdmin&&i.appStoreEnabled?(b(),E("a",{key:0,href:i.appStoreUrl,class:"button"},A(o.t("dashboard","Get more widgets from the App Store")),9,fi)):$("",!0),i.statuses.weather&&a.isStatusActive("weather")?(b(),E("div",vi,[_("h2",null,A(o.t("dashboard","Weather service")),1),_("p",null,A(o.t("dashboard","For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information.",{productName:o.productName})),1),_("p",bi,[_("a",yi,A(o.t("dashboard","Weather data from Met.no")),1),e[1]||(e[1]=et(", ",-1)),_("a",wi,A(o.t("dashboard","geocoding with Nominatim")),1),e[2]||(e[2]=et(", ",-1)),_("a",Si,A(o.t("dashboard","elevation data from OpenTopoData")),1),e[3]||(e[3]=et(". ",-1))])])):$("",!0)])]),_:1},8,["onClose"])):$("",!0)])}const Ei=Ft(Jo,[["render",_i],["__scopeId","data-v-69758438"]]),Di=_n(Ei),Xe=Di.mount("#app-content-vue");window.OCA.Dashboard={register:(t,e)=>Xe.register(t,e),registerStatus:(t,e)=>Xe.registerStatus(t,e)}; +import{ao as bn,R as yn,r as Y,b as $e,E as He,a7 as Ie,o as b,g as E,h as _,t as A,i as $,m as te,c as nt,w as X,F as Dt,u as Te,K as wn,z as tt,L as Sn,n as Me,k as et,l as _t,C as Ne,f as _n}from"./Web-3VjN9gal.chunk.mjs";import{g as En,c as Yt,b as Dn,a as se}from"./index-kP1pdrFW.chunk.mjs";import{c as jt}from"./index-D5E2oR-5.chunk.mjs";import{_ as Ft,l as xt}from"./public-C1mLBHT3.chunk.mjs";import{t as F}from"./translation-DoG5ZELJ-GDfeNWVC.chunk.mjs";import{N as Ge}from"./logger-D3RVzcfQ-CI7JeNE7.chunk.mjs";import{a as Cn}from"./NcModal-DiDvgcU8-CMZwYcEg.chunk.mjs";import{N as xn}from"./NcUserStatusIcon-BF5OEQFU-BmqmrPuQ.chunk.mjs";import{N as kn,a as In}from"./NcDashboardWidget-zmbDEGL--CGX0WB1G.chunk.mjs";import{N as Tn}from"./NcEmptyContent-CGAPqk4S-CqTPoa13.chunk.mjs";import{I as Mn}from"./Check-C2hmidBx.chunk.mjs";import{N as Nn}from"./NcAvatar-1KxMUN7V-C6m-dkfj.chunk.mjs";import"./util-C9Hc1fff.chunk.mjs";import"./createElementId-DhjFt1I9-Dr0tCLMT.chunk.mjs";import"./PencilOutline-C831DEGj.chunk.mjs";import"./ArrowRight-BXoQMBpK.chunk.mjs";import"./colors-Cv9F-jWS-CXt_5aPR.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-3Qt8jmCE.chunk.mjs";function Ae(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,o)}return n}function q(t){for(var e=1;e=0)&&(n[i]=t[i]);return n}function Pn(t,e){if(t==null)return{};var n=On(t,e),o,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,o)&&(n[o]=t[o])}return n}var Ln="1.14.0";function ot(t){if(typeof window<"u"&&window.navigator)return!!navigator.userAgent.match(t)}var at=ot(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Ut=ot(/Edge/i),Oe=ot(/firefox/i),Pt=ot(/safari/i)&&!ot(/chrome/i)&&!ot(/android/i),Ke=ot(/iP(ad|od|hone)/i),Wn=ot(/chrome/i)&&ot(/android/i),qe={capture:!1,passive:!1};function w(t,e,n){t.addEventListener(e,n,!at&&qe)}function y(t,e,n){t.removeEventListener(e,n,!at&&qe)}function ee(t,e){if(e){if(e[0]===">"&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch{return!1}return!1}}function Rn(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function G(t,e,n,o){if(t){n=n||document;do{if(e!=null&&(e[0]===">"?t.parentNode===n&&ee(t,e):ee(t,e))||o&&t===n)return t;if(t===n)break}while(t=Rn(t))}return null}var Pe=/\s+/g;function B(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(Pe," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(Pe," ")}}function m(t,e,n){var o=t&&t.style;if(o){if(n===void 0)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),e===void 0?n:n[e];!(e in o)&&e.indexOf("webkit")===-1&&(e="-webkit-"+e),o[e]=n+(typeof n=="string"?"":"px")}}function kt(t,e){var n="";if(typeof t=="string")n=t;else do{var o=m(t,"transform");o&&o!=="none"&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function Ze(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,a=o.length;if(n)for(;i=a,!r)return o;if(o===K())break;o=ct(o,!1)}return!1}function It(t,e,n,o){for(var i=0,a=0,r=t.children;a2&&arguments[2]!==void 0?arguments[2]:{},o=n.evt,i=Pn(n,Xn);zt.pluginEvent.bind(g)(t,e,q({dragEl:d,parentEl:C,ghostEl:v,rootEl:D,nextEl:vt,lastDownEl:qt,cloneEl:x,cloneHidden:dt,dragStarted:Nt,putSortable:M,activeSortable:g.active,originalEvent:o,oldIndex:Ct,oldDraggableIndex:Wt,newIndex:U,newDraggableIndex:lt,hideGhostForTarget:an,unhideGhostForTarget:rn,cloneNowHidden:function(){dt=!0},cloneNowShown:function(){dt=!1},dispatchSortableEvent:function(a){P({sortable:e,name:a,originalEvent:o})}},i))};function P(t){jn(q({putSortable:M,cloneEl:x,targetEl:d,rootEl:D,oldIndex:Ct,oldDraggableIndex:Wt,newIndex:U,newDraggableIndex:lt},t))}var d,C,v,D,vt,qt,x,dt,Ct,U,Wt,lt,Xt,M,Et=!1,ne=!1,oe=[],gt,j,ce,ue,Re,Be,Nt,St,Rt,Bt=!1,$t=!1,Zt,N,he=[],we=!1,ie=[],re=typeof document<"u",Ht=Ke,Fe=Ut||at?"cssFloat":"float",$n=re&&!Wn&&!Ke&&"draggable"in document.createElement("div"),en=(function(){if(re){if(at)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto",t.style.pointerEvents==="auto"}})(),nn=function(t,e){var n=m(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),i=It(t,0,e),a=It(t,1,e),r=i&&m(i),l=a&&m(a),s=r&&parseInt(r.marginLeft)+parseInt(r.marginRight)+T(i).width,h=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+T(a).width;if(n.display==="flex")return n.flexDirection==="column"||n.flexDirection==="column-reverse"?"vertical":"horizontal";if(n.display==="grid")return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&r.float&&r.float!=="none"){var u=r.float==="left"?"left":"right";return a&&(l.clear==="both"||l.clear===u)?"vertical":"horizontal"}return i&&(r.display==="block"||r.display==="flex"||r.display==="table"||r.display==="grid"||s>=o&&n[Fe]==="none"||a&&n[Fe]==="none"&&s+h>o)?"vertical":"horizontal"},Hn=function(t,e,n){var o=n?t.left:t.top,i=n?t.right:t.bottom,a=n?t.width:t.height,r=n?e.left:e.top,l=n?e.right:e.bottom,s=n?e.width:e.height;return o===r||i===l||o+a/2===r+s/2},Gn=function(t,e){var n;return oe.some(function(o){var i=o[z].options.emptyInsertThreshold;if(!(!i||xe(o))){var a=T(o),r=t>=a.left-i&&t<=a.right+i,l=e>=a.top-i&&e<=a.bottom+i;if(r&&l)return n=o}}),n},on=function(t){function e(i,a){return function(r,l,s,h){var u=r.options.group.name&&l.options.group.name&&r.options.group.name===l.options.group.name;if(i==null&&(a||u))return!0;if(i==null||i===!1)return!1;if(a&&i==="clone")return i;if(typeof i=="function")return e(i(r,l,s,h),a)(r,l,s,h);var p=(a?r:l).options.group.name;return i===!0||typeof i=="string"&&i===p||i.join&&i.indexOf(p)>-1}}var n={},o=t.group;(!o||Kt(o)!="object")&&(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},an=function(){!en&&v&&m(v,"display","none")},rn=function(){!en&&v&&m(v,"display","")};re&&document.addEventListener("click",function(t){if(ne)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),ne=!1,!1},!0);var ft=function(t){if(d){t=t.touches?t.touches[0]:t;var e=Gn(t.clientX,t.clientY);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[z]._onDragOver(n)}}},Kn=function(t){d&&d.parentNode[z]._isOutsideThisEl(t.target)};function g(t,e){if(!(t&&t.nodeType&&t.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=it({},e),t[z]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return nn(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(a,r){a.setData("Text",r.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:g.supportPointer!==!1&&"PointerEvent"in window&&!Pt,emptyInsertThreshold:5};zt.initializePlugins(this,t,n);for(var o in n)!(o in e)&&(e[o]=n[o]);on(e);for(var i in this)i.charAt(0)==="_"&&typeof this[i]=="function"&&(this[i]=this[i].bind(this));this.nativeDraggable=e.forceFallback?!1:$n,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?w(t,"pointerdown",this._onTapStart):(w(t,"mousedown",this._onTapStart),w(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(w(t,"dragover",this),w(t,"dragenter",this)),oe.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),it(this,zn())}g.prototype={constructor:g,_isOutsideThisEl:function(t){!this.el.contains(t)&&t!==this.el&&(St=null)},_getDirection:function(t,e){return typeof this.options.direction=="function"?this.options.direction.call(this,t,e,d):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,i=o.preventOnFilter,a=t.type,r=t.touches&&t.touches[0]||t.pointerType&&t.pointerType==="touch"&&t,l=(r||t).target,s=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||l,h=o.filter;if(oo(n),!d&&!(/mousedown|pointerdown/.test(a)&&t.button!==0||o.disabled)&&!s.isContentEditable&&!(!this.nativeDraggable&&Pt&&l&&l.tagName.toUpperCase()==="SELECT")&&(l=G(l,o.draggable,n,!1),!(l&&l.animated)&&qt!==l)){if(Ct=V(l),Wt=V(l,o.draggable),typeof h=="function"){if(h.call(this,t,l,this)){P({sortable:e,rootEl:s,name:"filter",targetEl:l,toEl:n,fromEl:n}),L("filter",e,{evt:t}),i&&t.cancelable&&t.preventDefault();return}}else if(h&&(h=h.split(",").some(function(u){if(u=G(s,u.trim(),n,!1),u)return P({sortable:e,rootEl:u,name:"filter",targetEl:l,fromEl:n,toEl:n}),L("filter",e,{evt:t}),!0}),h)){i&&t.cancelable&&t.preventDefault();return}o.handle&&!G(s,o.handle,n,!1)||this._prepareDragStart(t,r,l)}}},_prepareDragStart:function(t,e,n){var o=this,i=o.el,a=o.options,r=i.ownerDocument,l;if(n&&!d&&n.parentNode===i){var s=T(n);if(D=i,d=n,C=d.parentNode,vt=d.nextSibling,qt=n,Xt=a.group,g.dragged=d,gt={target:d,clientX:(e||t).clientX,clientY:(e||t).clientY},Re=gt.clientX-s.left,Be=gt.clientY-s.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,d.style["will-change"]="all",l=function(){if(L("delayEnded",o,{evt:t}),g.eventCanceled){o._onDrop();return}o._disableDelayedDragEvents(),!Oe&&o.nativeDraggable&&(d.draggable=!0),o._triggerDragStart(t,e),P({sortable:o,name:"choose",originalEvent:t}),B(d,a.chosenClass,!0)},a.ignore.split(",").forEach(function(h){Ze(d,h.trim(),pe)}),w(r,"dragover",ft),w(r,"mousemove",ft),w(r,"touchmove",ft),w(r,"mouseup",o._onDrop),w(r,"touchend",o._onDrop),w(r,"touchcancel",o._onDrop),Oe&&this.nativeDraggable&&(this.options.touchStartThreshold=4,d.draggable=!0),L("delayStart",this,{evt:t}),a.delay&&(!a.delayOnTouchOnly||e)&&(!this.nativeDraggable||!(Ut||at))){if(g.eventCanceled){this._onDrop();return}w(r,"mouseup",o._disableDelayedDrag),w(r,"touchend",o._disableDelayedDrag),w(r,"touchcancel",o._disableDelayedDrag),w(r,"mousemove",o._delayedDragTouchMoveHandler),w(r,"touchmove",o._delayedDragTouchMoveHandler),a.supportPointer&&w(r,"pointermove",o._delayedDragTouchMoveHandler),o._dragStartTimer=setTimeout(l,a.delay)}else l()}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){d&&pe(d),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;y(t,"mouseup",this._disableDelayedDrag),y(t,"touchend",this._disableDelayedDrag),y(t,"touchcancel",this._disableDelayedDrag),y(t,"mousemove",this._delayedDragTouchMoveHandler),y(t,"touchmove",this._delayedDragTouchMoveHandler),y(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||t.pointerType=="touch"&&t,!this.nativeDraggable||e?this.options.supportPointer?w(document,"pointermove",this._onTouchMove):e?w(document,"touchmove",this._onTouchMove):w(document,"mousemove",this._onTouchMove):(w(d,"dragend",this),w(D,"dragstart",this._onDragStart));try{document.selection?Qt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(t,e){if(Et=!1,D&&d){L("dragStarted",this,{evt:e}),this.nativeDraggable&&w(document,"dragover",Kn);var n=this.options;!t&&B(d,n.dragClass,!1),B(d,n.ghostClass,!0),g.active=this,t&&this._appendGhost(),P({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(j){this._lastX=j.clientX,this._lastY=j.clientY,an();for(var t=document.elementFromPoint(j.clientX,j.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(j.clientX,j.clientY),t!==e);)e=t;if(d.parentNode[z]._isOutsideThisEl(t),e)do{if(e[z]){var n=void 0;if(n=e[z]._onDragOver({clientX:j.clientX,clientY:j.clientY,target:t,rootEl:e}),n&&!this.options.dragoverBubble)break}t=e}while(e=e.parentNode);rn()}},_onTouchMove:function(t){if(gt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,a=v&&kt(v,!0),r=v&&a&&a.a,l=v&&a&&a.d,s=Ht&&N&&We(N),h=(i.clientX-gt.clientX+o.x)/(r||1)+(s?s[0]-he[0]:0)/(r||1),u=(i.clientY-gt.clientY+o.y)/(l||1)+(s?s[1]-he[1]:0)/(l||1);if(!g.active&&!Et){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))=0&&(P({rootEl:C,name:"add",toEl:C,fromEl:D,originalEvent:t}),P({sortable:this,name:"remove",toEl:C,originalEvent:t}),P({rootEl:C,name:"sort",toEl:C,fromEl:D,originalEvent:t}),P({sortable:this,name:"sort",toEl:C,originalEvent:t})),M&&M.save()):U!==Ct&&U>=0&&(P({sortable:this,name:"update",toEl:C,originalEvent:t}),P({sortable:this,name:"sort",toEl:C,originalEvent:t})),g.active&&((U==null||U===-1)&&(U=Ct,lt=Wt),P({sortable:this,name:"end",toEl:C,originalEvent:t}),this.save()))),this._nulling()},_nulling:function(){L("nulling",this),D=d=C=v=vt=x=qt=dt=gt=j=Nt=U=lt=Ct=Wt=St=Rt=M=Xt=g.dragged=g.ghost=g.clone=g.active=null,ie.forEach(function(t){t.checked=!0}),ie.length=ce=ue=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":d&&(this._onDragOver(t),qn(t));break;case"selectstart":t.preventDefault();break}},toArray:function(){for(var t=[],e,n=this.el.children,o=0,i=n.length,a=this.options;oo.right+i||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+i}function to(t,e,n,o,i,a,r,l){var s=o?t.clientY:t.clientX,h=o?n.height:n.width,u=o?n.top:n.left,p=o?n.bottom:n.right,c=!1;if(!r){if(l&&Ztu+h*a/2:sp-Zt)return-Rt}else if(s>u+h*(1-i)/2&&sp-h*a/2)?s>u+h/2?1:-1:0}function eo(t){return V(d)t.replace(lo,(e,n)=>n.toUpperCase())),ln=["Start","Add","Remove","Update","End"],dn=["Choose","Unchoose","Sort","Filter","Clone"],cn=["Move"],uo=[cn,ln,dn].flatMap(t=>t).map(t=>`on${t}`),Ce={manage:cn,manageAndEmit:ln,emit:dn};function ho(t){return uo.indexOf(t)!==-1}const po=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"];function mo(t){return po.includes(t)}function go(t){return["transition-group","TransitionGroup"].includes(t)}function un(t){return["id","class","role","style"].includes(t)||t.startsWith("data-")||t.startsWith("aria-")||t.startsWith("on")}function hn(t){return t.reduce((e,[n,o])=>(e[n]=o,e),{})}function fo({$attrs:t,componentData:e={}}){return{...hn(Object.entries(t).filter(([n,o])=>un(n))),...e}}function vo({$attrs:t,callBackBuilder:e}){const n=hn(pn(t));Object.entries(e).forEach(([i,a])=>{Ce[i].forEach(r=>{n[`on${r}`]=a(r)})});const o=`[data-draggable]${n.draggable||""}`;return{...n,draggable:o}}function pn(t){return Object.entries(t).filter(([e,n])=>!un(e)).map(([e,n])=>[co(e),n]).filter(([e,n])=>!ho(e))}const Ve=({el:t})=>t,bo=(t,e)=>t.__draggable_context=e,Ye=t=>t.__draggable_context;class yo{constructor({nodes:{header:e,default:n,footer:o},root:i,realList:a}){this.defaultNodes=n,this.children=[...e,...n,...o],this.externalComponent=i.externalComponent,this.rootTransition=i.transition,this.tag=i.tag,this.realList=a}get _isRootComponent(){return this.externalComponent||this.rootTransition}render(e,n){const{tag:o,children:i,_isRootComponent:a}=this;return e(o,n,a?{default:()=>i}:i)}updated(){const{defaultNodes:e,realList:n}=this;e.forEach((o,i)=>{bo(Ve(o),{element:n[i],index:i})})}getUnderlyingVm(e){return Ye(e)}getVmIndexFromDomIndex(e,n){const{defaultNodes:o}=this,{length:i}=o,a=n.children,r=a.item(e);if(r===null)return i;const l=Ye(r);if(l)return l.index;if(i===0)return 0;const s=Ve(o[0]),h=[...a].findIndex(u=>u===s);return ewo(t,s)),{item:r}=t;if(!r)throw new Error("draggable element must have an item slot");const l=o.flatMap((s,h)=>r({element:s,index:h}).map(u=>(u.key=n(s),u.props={...u.props||{},"data-draggable":!0},u)));if(l.length!==o.length)throw new Error("Item slot must have only one child");return{header:i,footer:a,default:l}}function _o(t){const e=go(t),n=!mo(t)&&!e;return{transition:e,externalComponent:n,tag:n?Y(t):e?yn:t}}function Eo({$slots:t,tag:e,realList:n,getKey:o}){const i=So({$slots:t,realList:n,getKey:o}),a=_o(e);return new yo({nodes:i,root:a,realList:n})}function mn(t,e){He(()=>this.$emit(t.toLowerCase(),e))}function gn(t){return(e,n)=>{if(this.realList!==null)return this[`onDrag${t}`](e,n)}}function Do(t){const e=gn.call(this,t);return(n,o)=>{e.call(this,n,o),mn.call(this,t,n)}}let ye=null;const Co={list:{type:Array,required:!1,default:null},modelValue:{type:Array,required:!1,default:null},itemKey:{type:[String,Function],required:!0},clone:{type:Function,default:t=>t},tag:{type:String,default:"div"},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},xo=["update:modelValue","change",...[...Ce.manageAndEmit,...Ce.emit].map(t=>t.toLowerCase())],ko=$e({name:"draggable",inheritAttrs:!1,props:Co,emits:xo,data(){return{error:!1}},render(){try{this.error=!1;const{$slots:t,$attrs:e,tag:n,componentData:o,realList:i,getKey:a}=this,r=Eo({$slots:t,tag:n,realList:i,getKey:a});this.componentStructure=r;const l=fo({$attrs:e,componentData:o});return r.render(Ie,l)}catch(t){return this.error=!0,Ie("pre",{style:{color:"red"}},t.stack)}},created(){this.list!==null&&this.modelValue!==null&&ro.error("modelValue and list props are mutually exclusive! Please set one or another.")},mounted(){if(this.error)return;const{$attrs:t,$el:e,componentStructure:n}=this;n.updated();const o=vo({$attrs:t,callBackBuilder:{manageAndEmit:a=>Do.call(this,a),emit:a=>mn.bind(this,a),manage:a=>gn.call(this,a)}}),i=e.nodeType===1?e:e.parentElement;this._sortable=new g(i,o),this.targetDomElement=i,i.__draggable_component__=this},updated(){this.componentStructure.updated()},beforeUnmount(){this._sortable!==void 0&&this._sortable.destroy()},computed:{realList(){const{list:t}=this;return t||this.modelValue},getKey(){const{itemKey:t}=this;return typeof t=="function"?t:e=>e[t]}},watch:{$attrs:{handler(t){const{_sortable:e}=this;e&&pn(t).forEach(([n,o])=>{e.option(n,o)})},deep:!0}},methods:{getUnderlyingVm(t){return this.componentStructure.getUnderlyingVm(t)||null},getUnderlyingPotencialDraggableComponent(t){return t.__draggable_component__},emitChanges(t){He(()=>this.$emit("change",t))},alterList(t){if(this.list){t(this.list);return}const e=[...this.modelValue];t(e),this.$emit("update:modelValue",e)},spliceList(){const t=e=>e.splice(...arguments);this.alterList(t)},updatePosition(t,e){const n=o=>o.splice(e,0,o.splice(t,1)[0]);this.alterList(n)},getRelatedContextFromMoveEvent({to:t,related:e}){const n=this.getUnderlyingPotencialDraggableComponent(t);if(!n)return{component:n};const o=n.realList,i={list:o,component:n};return t!==e&&o?{...n.getUnderlyingVm(e)||{},...i}:i},getVmIndexFromDomIndex(t){return this.componentStructure.getVmIndexFromDomIndex(t,this.targetDomElement)},onDragStart(t){this.context=this.getUnderlyingVm(t.item),t.item._underlying_vm_=this.clone(this.context.element),ye=t.item},onDragAdd(t){const e=t.item._underlying_vm_;if(e===void 0)return;be(t.item);const n=this.getVmIndexFromDomIndex(t.newIndex);this.spliceList(n,0,e);const o={element:e,newIndex:n};this.emitChanges({added:o})},onDragRemove(t){if(ze(this.$el,t.item,t.oldIndex),t.pullMode==="clone"){be(t.clone);return}const{index:e,element:n}=this.context;this.spliceList(e,1);const o={element:n,oldIndex:e};this.emitChanges({removed:o})},onDragUpdate(t){be(t.item),ze(t.from,t.item,t.oldIndex);const e=this.context.index,n=this.getVmIndexFromDomIndex(t.newIndex);this.updatePosition(e,n);const o={element:this.context.element,oldIndex:e,newIndex:n};this.emitChanges({moved:o})},computeFutureIndex(t,e){if(!t.element)return 0;const n=[...e.to.children].filter(a=>a.style.display!=="none"),o=n.indexOf(e.related),i=t.component.getVmIndexFromDomIndex(o);return n.indexOf(ye)!==-1||!e.willInsertAfter?i:i+1},onDragMove(t,e){const{move:n,realList:o}=this;if(!n||!o)return!0;const i=this.getRelatedContextFromMoveEvent(t),a=this.computeFutureIndex(i,t),r={...this.context,futureIndex:a},l={...t,relatedContext:i,draggedContext:r};return n(l,e)},onDragEnd(){ye=null}}}),Io={name:"PencilIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},To=["aria-hidden","aria-label"],Mo=["fill","width","height"],No={d:"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"},Ao={key:0};function Oo(t,e,n,o,i,a){return b(),E("span",te(t.$attrs,{"aria-hidden":n.title?null:"true","aria-label":n.title,class:"material-design-icon pencil-icon",role:"img",onClick:e[0]||(e[0]=r=>t.$emit("click",r))}),[(b(),E("svg",{fill:n.fillColor,class:"material-design-icon__svg",width:n.size,height:n.size,viewBox:"0 0 24 24"},[_("path",No,[n.title?(b(),E("title",Ao,A(n.title),1)):$("",!0)])],8,Mo))],16,To)}const Po=Ft(Io,[["render",Oo]]),Lo={name:"FileIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},Wo=["aria-hidden","aria-label"],Ro=["fill","width","height"],Bo={d:"M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6Z"},Fo={key:0};function Uo(t,e,n,o,i,a){return b(),E("span",te(t.$attrs,{"aria-hidden":n.title?null:"true","aria-label":n.title,class:"material-design-icon file-icon",role:"img",onClick:e[0]||(e[0]=r=>t.$emit("click",r))}),[(b(),E("svg",{fill:n.fillColor,class:"material-design-icon__svg",width:n.size,height:n.size,viewBox:"0 0 24 24"},[_("path",Bo,[n.title?(b(),E("title",Fo,A(n.title),1)):$("",!0)])],8,Ro))],16,Wo)}const zo=Ft(Lo,[["render",Uo]]),Vo=["src"],Yo=$e({__name:"ApiDashboardWidgetItem",props:{item:{type:Object,required:!0},iconSize:{type:Number,required:!0},roundedIcons:{type:Boolean,default:!0}},setup(t){const e=Me(!1),n=Me(!1);return(o,i)=>(b(),nt(Te(kn),{targetUrl:t.item.link,overlayIconUrl:t.item.overlayIconUrl?t.item.overlayIconUrl:"",mainText:t.item.title,subText:t.item.subtitle},{avatar:X(()=>[t.item.iconUrl?(b(),E(Dt,{key:0},[t.roundedIcons?(b(),nt(Te(Nn),{key:0,size:t.iconSize,url:t.item.iconUrl},null,8,["size","url"])):(b(),E(Dt,{key:1},[wn(_("img",{alt:"",class:tt(["api-dashboard-widget-item__icon",{"hidden-visually":!e.value}]),src:t.item.iconUrl,onError:i[0]||(i[0]=a=>n.value=!0),onLoad:i[1]||(i[1]=a=>e.value=!0)},null,42,Vo),[[Sn,!n.value]]),e.value?$("",!0):(b(),nt(zo,{key:0,size:t.iconSize},null,8,["size"]))],64))],64)):$("",!0)]),_:1},8,["targetUrl","overlayIconUrl","mainText","subText"]))}}),jo=Ft(Yo,[["__scopeId","data-v-071812ee"]]),Xo={name:"ApiDashboardWidget",components:{ApiDashboardWidgetItem:jo,CheckIcon:Mn,NcDashboardWidget:In,NcEmptyContent:Tn,NcButton:Ge},props:{widget:{type:[Object,void 0],default:void 0},data:{type:[Object,void 0],default:void 0},loading:{type:Boolean,required:!0}},data(){return{iconSize:44}},computed:{items(){return this.data?.items??[]},emptyContentMessage(){return this.data?.emptyContentMessage??""},halfEmptyContentMessage(){return this.data?.halfEmptyContentMessage??""},newButton(){return this.widget?.buttons?.find(t=>t.type==="new")},moreButton(){return this.widget?.buttons?.find(t=>t.type==="more")},setupButton(){return this.widget?.buttons?.find(t=>t.type==="setup")},showMoreLabel(){return this.moreButton?.text},showMoreUrl(){return this.moreButton?.link}},mounted(){const t=window.getComputedStyle(document.body).getPropertyValue("--default-clickable-area"),e=Number.parseFloat(t);this.iconSize=Number.isNaN(e)?44:e}};function $o(t,e,n,o,i,a){const r=Y("ApiDashboardWidgetItem"),l=Y("CheckIcon"),s=Y("NcButton"),h=Y("NcEmptyContent"),u=Y("NcDashboardWidget");return b(),nt(u,{items:a.items,showMoreLabel:a.showMoreLabel,showMoreUrl:a.showMoreUrl,loading:n.loading,showItemsAndEmptyContent:!!a.halfEmptyContentMessage,halfEmptyContentMessage:a.halfEmptyContentMessage},{default:X(({item:p})=>[_t(r,{item:p,iconSize:i.iconSize,roundedIcons:n.widget.item_icons_round},null,8,["item","iconSize","roundedIcons"])]),"empty-content":X(()=>[a.items.length===0?(b(),nt(h,{key:0,description:a.emptyContentMessage},{icon:X(()=>[a.emptyContentMessage?(b(),nt(l,{key:0,size:65})):$("",!0)]),action:X(()=>[a.setupButton?(b(),nt(s,{key:0,href:a.setupButton.link},{default:X(()=>[et(A(a.setupButton.text),1)]),_:1},8,["href"])):$("",!0)]),_:1},8,["description"])):$("",!0)]),_:1},8,["items","showMoreLabel","showMoreUrl","loading","showItemsAndEmptyContent","halfEmptyContentMessage"])}const Ho=Ft(Xo,[["render",$o]]),Go=En().detectLogLevel().setApp("dashboard").build(),Ko={data(){return{isMobile:this._isMobile()}},beforeMount(){window.addEventListener("resize",this._onResize)},beforeUnmount(){window.removeEventListener("resize",this._onResize)},methods:{_onResize(){this.isMobile=this._isMobile()},_isMobile(){return document.documentElement.clientWidth<768}}},je=xt("dashboard","panels"),qo=xt("dashboard","firstRun"),Zo=new Date(xt("dashboard","birthdate")),Qo={weather:{text:F("dashboard","Weather"),icon:"icon-weather-status"},status:{text:F("dashboard","Status")}},Jo={name:"DashboardApp",components:{ApiDashboardWidget:Ho,NcButton:Ge,Draggable:ko,NcModal:Cn,Pencil:Po,NcUserStatusIcon:xn},mixins:[Ko],setup(){return{t:F,productName:window.OC.theme.productName}},data(){return{isAdmin:se().isAdmin,timer:new Date,registeredStatus:[],callbacks:{},allCallbacksStatus:{},statusElements:{},statusInfo:Qo,enabledStatuses:xt("dashboard","statuses"),panels:je,firstRun:qo,displayName:se()?.displayName,uid:se()?.uid,layout:xt("dashboard","layout").filter(t=>je[t]),modalPanelList:[],isModalDragging:!1,modal:!1,appStoreUrl:Dn("/settings/apps/dashboard"),appStoreEnabled:xt("dashboard","appStoreEnabled",!0),statuses:{},apiWidgets:[],apiWidgetItems:{},loadingItems:!0,birthdate:Zo}},computed:{greeting(){const t=this.timer.getHours(),e=this.birthdate instanceof Date&&this.birthdate.getMonth()===this.timer.getMonth()&&this.birthdate.getDate()===this.timer.getDate();let n;e?n="birthday":t>=22||t<5?n="night":t>=18?n="evening":t>=12?n="afternoon":n="morning";const o={morning:{generic:F("dashboard","Good morning"),withName:F("dashboard","Good morning, {name}",{name:this.displayName},{escape:!1})},afternoon:{generic:F("dashboard","Good afternoon"),withName:F("dashboard","Good afternoon, {name}",{name:this.displayName},{escape:!1})},evening:{generic:F("dashboard","Good evening"),withName:F("dashboard","Good evening, {name}",{name:this.displayName},{escape:!1})},night:{generic:F("dashboard","Hello"),withName:F("dashboard","Hello, {name}",{name:this.displayName},{escape:!1})},birthday:{generic:F("dashboard","Happy birthday 🥳🤩🎂🎉"),withName:F("dashboard","Happy birthday, {name} 🥳🤩🎂🎉",{name:this.displayName},{escape:!1})}};return{text:this.displayName&&this.uid!==this.displayName?o[n].withName:o[n].generic}},isActive(){return t=>this.layout.indexOf(t.id)>-1},isStatusActive(){return t=>this.enabledStatuses.findIndex(e=>e===t)!==-1},sortedAllStatuses(){return Object.keys(this.allCallbacksStatus).slice().sort(this.sortStatuses)},sortedRegisteredStatus(){return this.registeredStatus.slice().sort(this.sortStatuses)}},watch:{callbacks(){this.$nextTick(()=>this.rerenderPanels())},layout(){this.modal&&!this.isModalDragging&&(this.modalPanelList=this.getSortedPanelObjects())}},async created(){await this.fetchApiWidgets();const t=Object.values(this.apiWidgets).filter(e=>this.isApiWidgetV2(e.id)&&this.layout.includes(e.id)).map(e=>e.id);await Promise.all(t.map(e=>this.fetchApiWidgetItems([e],!0)));for(const e of Object.values(this.apiWidgets))e.reload_interval>0&&setInterval(async()=>{this.layout.includes(e.id)&&await this.fetchApiWidgetItems([e.id],!0)},e.reload_interval*1e3);this.$nextTick(()=>this.rerenderPanels())},mounted(){this.updateSkipLink(),window.addEventListener("scroll",this.handleScroll),setInterval(()=>{this.timer=new Date},3e4),this.firstRun&&window.addEventListener("scroll",this.disableFirstrunHint)},unmounted(){window.removeEventListener("scroll",this.handleScroll)},methods:{register(t,e){this.callbacks[t]=e},registerStatus(t,e){this.allCallbacksStatus[t]=e,this.isStatusActive(t)&&(this.registeredStatus.includes(t)||this.registeredStatus.push(t),this.$nextTick(()=>this.mountStatus(t)))},setStatusElement(t,e){e?(this.statusElements[t]=e,this.mountStatus(t)):delete this.statusElements[t]},mountStatus(t){if(this.statuses[t]?.mounted)return;const e=this.statusElements[t],n=this.allCallbacksStatus[t];e&&n&&(n(e),this.statuses[t]={mounted:!0})},rerenderPanels(){for(const t in this.callbacks){if(this.isApiWidgetV2(this.panels[t].id))continue;const e=this.$refs[t];if(this.layout.indexOf(t)!==-1&&!(this.panels[t]&&this.panels[t].mounted))if(e){const n=Array.isArray(e)?e[0]:e;this.callbacks[t](n,{widget:this.panels[t]}),this.panels[t].mounted=!0}else Go.error("Failed to register panel in the frontend as no backend data was provided for "+t)}},saveLayout(){jt.post(Yt("/apps/dashboard/api/v3/layout"),{layout:this.layout})},saveStatuses(){jt.post(Yt("/apps/dashboard/api/v3/statuses"),{statuses:this.enabledStatuses})},showModal(){this.modal=!0,this.firstRun=!1,this.modalPanelList=this.getSortedPanelObjects()},closeModal(){this.modal=!1},getSortedPanelObjects(){return Object.values(this.panels).sort((t,e)=>{const n=this.layout.indexOf(t.id),o=this.layout.indexOf(e.id);return n===-1||o===-1?o-n||t.id-e.id:n-o||t.id-e.id})},onModalPanelListUpdate(t){this.modalPanelList=t},onModalDragStart(){this.isModalDragging=!0},onModalDragEnd(){this.isModalDragging=!1,this.layout=this.modalPanelList.filter(t=>this.layout.includes(t.id)).map(t=>t.id),this.saveLayout()},updateCheckbox(t,e){const n=this.layout.indexOf(t.id);!e&&n>-1?this.layout.splice(n,1):(this.layout.push(t.id),this.isApiWidgetV2(t.id)&&this.fetchApiWidgetItems([t.id],!0)),this.panels[t.id].mounted=!1,this.saveLayout(),this.$nextTick(()=>this.rerenderPanels())},disableFirstrunHint(){window.removeEventListener("scroll",this.disableFirstrunHint),setTimeout(()=>{this.firstRun=!1},1e3)},updateSkipLink(){document.getElementsByClassName("skip-navigation")[0].setAttribute("href","#app-dashboard")},updateStatusCheckbox(t,e){e?this.enableStatus(t):this.disableStatus(t)},enableStatus(t){this.enabledStatuses.push(t),this.registerStatus(t,this.allCallbacksStatus[t]),this.saveStatuses()},disableStatus(t){const e=this.enabledStatuses.findIndex(o=>o===t);e!==-1&&this.enabledStatuses.splice(e,1);const n=this.registeredStatus.findIndex(o=>o===t);n!==-1&&(this.registeredStatus.splice(n,1),this.statuses[t]={mounted:!1}),this.saveStatuses()},sortStatuses(t,e){const n=t.toLowerCase(),o=e.toLowerCase();return n>o?1:n70?document.body.classList.add("dashboard--scrolled"):document.body.classList.remove("dashboard--scrolled")},async fetchApiWidgets(){const{data:t}=await jt.get(Yt("/apps/dashboard/api/v1/widgets"));this.apiWidgets=t.ocs.data},async fetchApiWidgetItems(t,e=!1){try{const n=Yt("/apps/dashboard/api/v2/widget-items"),o=new URLSearchParams(t.map(a=>["widgets[]",a])),i=(await jt.get(`${n}?${o.toString()}`)).data.ocs.data;e?this.apiWidgetItems={...this.apiWidgetItems,...i}:this.apiWidgetItems=i}finally{this.loadingItems=!1}},isApiWidgetV2(t){for(const e of Object.values(this.apiWidgets))if(e.id===t&&e.item_api_versions.includes(2))return!0;return!1}}},ti={id:"app-dashboard"},ei={key:0,class:"statuses"},ni=["id"],oi={class:"panel--header"},ii=["src"],ai={class:"panel--content"},ri={class:"panel--header"},si=["data-id"],li={class:"footer"},di={class:"modal__content"},ci={class:"panels"},ui=["id","checked","onInput"],hi=["for"],pi=["id","checked","onInput"],mi=["for"],gi=["src"],fi=["href"],vi={key:1},bi={class:"credits--end"},yi={href:"https://api.met.no/doc/TermsOfService",target:"_blank",rel:"noopener"},wi={href:"https://wiki.osmfoundation.org/wiki/Privacy_Policy",target:"_blank",rel:"noopener"},Si={href:"https://www.opentopodata.org/#public-api",target:"_blank",rel:"noopener"};function _i(t,e,n,o,i,a){const r=Y("ApiDashboardWidget"),l=Y("Draggable"),s=Y("Pencil"),h=Y("NcButton"),u=Y("NcUserStatusIcon"),p=Y("NcModal");return b(),E("main",ti,[_("h2",null,A(a.greeting.text),1),a.sortedRegisteredStatus.length>0?(b(),E("ul",ei,[(b(!0),E(Dt,null,Ne(a.sortedRegisteredStatus,c=>(b(),E("li",{id:"status-"+c,key:c},[_("div",{ref_for:!0,ref:f=>a.setStatusElement(c,f)},null,512)],8,ni))),128))])):$("",!0),_t(l,te({modelValue:i.layout,"onUpdate:modelValue":e[0]||(e[0]=c=>i.layout=c)},{swapThreshold:.3,delay:500,delayOnTouchOnly:!0,touchStartThreshold:3},{class:"panels",itemKey:c=>c,handle:".panel--header",onEnd:a.saveLayout}),{item:X(({element:c})=>[(b(),E("div",{key:c,class:"panel"},[a.isApiWidgetV2(i.panels[c].id)?(b(),E(Dt,{key:0},[_("div",oi,[_("h2",null,[i.apiWidgets[i.panels[c].id].icon_url?(b(),E("img",{key:0,src:i.apiWidgets[i.panels[c].id].icon_url,alt:""},null,8,ii)):(b(),E("span",{key:1,class:tt(i.apiWidgets[i.panels[c].id].icon_class),"aria-hidden":"true"},null,2)),et(" "+A(i.apiWidgets[i.panels[c].id].title),1)])]),_("div",ai,[_t(r,{widget:i.apiWidgets[i.panels[c].id],data:i.apiWidgetItems[i.panels[c].id],loading:i.loadingItems},null,8,["widget","data","loading"])])],64)):(b(),E(Dt,{key:1},[_("div",ri,[_("h2",null,[_("span",{class:tt(i.panels[c].iconClass),"aria-hidden":"true"},null,2),et(" "+A(i.panels[c].title),1)])]),_("div",{class:tt(["panel--content",{loading:!i.panels[c].mounted}])},[_("div",{ref:i.panels[c].id,"data-id":i.panels[c].id},null,8,si)],2)],64))]))]),_:1},16,["modelValue","itemKey","onEnd"]),_("div",li,[_t(h,{onClick:a.showModal},{icon:X(()=>[_t(s,{size:20})]),default:X(()=>[et(" "+A(o.t("dashboard","Customize")),1)]),_:1},8,["onClick"])]),i.modal?(b(),nt(p,{key:1,size:"large",closeOnClickOutside:!0,onClose:a.closeModal},{default:X(()=>[_("div",di,[_("h2",null,A(o.t("dashboard","Edit widgets")),1),_("ol",ci,[(b(!0),E(Dt,null,Ne(a.sortedAllStatuses,c=>(b(),E("li",{key:c,class:tt("panel-"+c)},[_("input",{id:"status-checkbox-"+c,type:"checkbox",class:"checkbox",checked:a.isStatusActive(c),onInput:f=>a.updateStatusCheckbox(c,f.target.checked)},null,40,ui),_("label",{for:"status-checkbox-"+c},[c==="status"?(b(),nt(u,{key:0,status:"online","aria-hidden":"true"})):(b(),E("span",{key:1,class:tt(i.statusInfo[c].icon),"aria-hidden":"true"},null,2)),et(" "+A(i.statusInfo[c].text),1)],8,hi)],2))),128))]),_t(l,te({swapThreshold:.3,delay:500,delayOnTouchOnly:!0,touchStartThreshold:3},{class:"panels",tag:"ol",itemKey:c=>c.id,handle:".draggable",modelValue:i.modalPanelList,"onUpdate:modelValue":a.onModalPanelListUpdate,onStart:a.onModalDragStart,onEnd:a.onModalDragEnd}),{item:X(({element:c})=>[(b(),E("li",{key:c.id,class:tt("panel-"+c.id)},[_("input",{id:"panel-checkbox-"+c.id,type:"checkbox",class:"checkbox",checked:a.isActive(c),onInput:f=>a.updateCheckbox(c,f.target.checked)},null,40,pi),_("label",{for:"panel-checkbox-"+c.id,class:tt({draggable:a.isActive(c)})},[c.iconUrl?(b(),E("img",{key:0,alt:"",src:c.iconUrl},null,8,gi)):(b(),E("span",{key:1,class:tt(c.iconClass),"aria-hidden":"true"},null,2)),et(" "+A(c.title),1)],10,mi)],2))]),_:1},16,["itemKey","modelValue","onUpdate:modelValue","onStart","onEnd"]),i.isAdmin&&i.appStoreEnabled?(b(),E("a",{key:0,href:i.appStoreUrl,class:"button"},A(o.t("dashboard","Get more widgets from the App Store")),9,fi)):$("",!0),i.statuses.weather&&a.isStatusActive("weather")?(b(),E("div",vi,[_("h2",null,A(o.t("dashboard","Weather service")),1),_("p",null,A(o.t("dashboard","For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information.",{productName:o.productName})),1),_("p",bi,[_("a",yi,A(o.t("dashboard","Weather data from Met.no")),1),e[1]||(e[1]=et(", ",-1)),_("a",wi,A(o.t("dashboard","geocoding with Nominatim")),1),e[2]||(e[2]=et(", ",-1)),_("a",Si,A(o.t("dashboard","elevation data from OpenTopoData")),1),e[3]||(e[3]=et(". ",-1))])])):$("",!0)])]),_:1},8,["onClose"])):$("",!0)])}const Ei=Ft(Jo,[["render",_i],["__scopeId","data-v-f173509a"]]),Di=_n(Ei),Xe=Di.mount("#app-content-vue");window.OCA.Dashboard={register:(t,e)=>Xe.register(t,e),registerStatus:(t,e)=>Xe.registerStatus(t,e)}; //# sourceMappingURL=dashboard-main.mjs.map diff --git a/dist/dashboard-main.mjs.map b/dist/dashboard-main.mjs.map index 144d12bab9403..df582b74147a3 100644 --- a/dist/dashboard-main.mjs.map +++ b/dist/dashboard-main.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dashboard-main.mjs","sources":["../node_modules/vuedraggable/node_modules/sortablejs/modular/sortable.esm.js","../node_modules/vuedraggable/src/util/htmlHelper.js","../node_modules/vuedraggable/src/util/console.js","../node_modules/vuedraggable/src/util/string.js","../node_modules/vuedraggable/src/core/sortableEvents.js","../node_modules/vuedraggable/src/util/tags.js","../node_modules/vuedraggable/src/core/componentBuilderHelper.js","../node_modules/vuedraggable/src/core/componentStructure.js","../node_modules/vuedraggable/src/core/renderHelper.js","../node_modules/vuedraggable/src/vuedraggable.js","../node_modules/vue-material-design-icons/Pencil.vue","../node_modules/vue-material-design-icons/File.vue","../build/frontend/apps/dashboard/src/components/ApiDashboardWidgetItem.vue","../build/frontend/apps/dashboard/src/components/ApiDashboardWidget.vue","../build/frontend/apps/dashboard/src/logger.ts","../build/frontend/apps/dashboard/src/mixins/isMobile.js","../build/frontend/apps/dashboard/src/DashboardApp.vue","../build/frontend/apps/dashboard/src/main.js"],"sourcesContent":["/**!\n * Sortable 1.14.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.14.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n folding = false; // Do not \"unfold\" after around dragEl if reverted\n\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\n * Selects the provided multi-drag item\n * @param {HTMLElement} el The element to be selected\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\n * Deselects the provided multi-drag item\n * @param {HTMLElement} el The element to be deselected\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\n * Insert multi-drag clones\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\n * @param {HTMLElement} rootEl\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","function removeNode(node) {\r\n if (node.parentElement !== null) {\r\n node.parentElement.removeChild(node);\r\n }\r\n}\r\n\r\nfunction insertNodeAt(fatherNode, node, position) {\r\n const refNode =\r\n position === 0\r\n ? fatherNode.children[0]\r\n : fatherNode.children[position - 1].nextSibling;\r\n fatherNode.insertBefore(node, refNode);\r\n}\r\n\r\nexport { insertNodeAt, removeNode };\r\n","function getConsole() {\r\n if (typeof window !== \"undefined\") {\r\n return window.console;\r\n }\r\n return global.console;\r\n}\r\nconst console = getConsole();\r\n\r\nexport { console };\r\n","function cached(fn) {\r\n const cache = Object.create(null);\r\n return function cachedFn(str) {\r\n const hit = cache[str];\r\n return hit || (cache[str] = fn(str));\r\n };\r\n}\r\n\r\nconst regex = /-(\\w)/g;\r\nconst camelize = cached(str => str.replace(regex, (_, c) => c.toUpperCase()));\r\n\r\nexport { camelize };\r\n","const manageAndEmit = [\"Start\", \"Add\", \"Remove\", \"Update\", \"End\"];\r\nconst emit = [\"Choose\", \"Unchoose\", \"Sort\", \"Filter\", \"Clone\"];\r\nconst manage = [\"Move\"];\r\nconst eventHandlerNames = [manage, manageAndEmit, emit]\r\n .flatMap(events => events)\r\n .map(evt => `on${evt}`);\r\n\r\nconst events = {\r\n manage,\r\n manageAndEmit,\r\n emit\r\n};\r\n\r\nfunction isReadOnly(eventName) {\r\n return eventHandlerNames.indexOf(eventName) !== -1;\r\n}\r\n\r\nexport { events, isReadOnly };\r\n","const tags = [\r\n \"a\",\r\n \"abbr\",\r\n \"address\",\r\n \"area\",\r\n \"article\",\r\n \"aside\",\r\n \"audio\",\r\n \"b\",\r\n \"base\",\r\n \"bdi\",\r\n \"bdo\",\r\n \"blockquote\",\r\n \"body\",\r\n \"br\",\r\n \"button\",\r\n \"canvas\",\r\n \"caption\",\r\n \"cite\",\r\n \"code\",\r\n \"col\",\r\n \"colgroup\",\r\n \"data\",\r\n \"datalist\",\r\n \"dd\",\r\n \"del\",\r\n \"details\",\r\n \"dfn\",\r\n \"dialog\",\r\n \"div\",\r\n \"dl\",\r\n \"dt\",\r\n \"em\",\r\n \"embed\",\r\n \"fieldset\",\r\n \"figcaption\",\r\n \"figure\",\r\n \"footer\",\r\n \"form\",\r\n \"h1\",\r\n \"h2\",\r\n \"h3\",\r\n \"h4\",\r\n \"h5\",\r\n \"h6\",\r\n \"head\",\r\n \"header\",\r\n \"hgroup\",\r\n \"hr\",\r\n \"html\",\r\n \"i\",\r\n \"iframe\",\r\n \"img\",\r\n \"input\",\r\n \"ins\",\r\n \"kbd\",\r\n \"label\",\r\n \"legend\",\r\n \"li\",\r\n \"link\",\r\n \"main\",\r\n \"map\",\r\n \"mark\",\r\n \"math\",\r\n \"menu\",\r\n \"menuitem\",\r\n \"meta\",\r\n \"meter\",\r\n \"nav\",\r\n \"noscript\",\r\n \"object\",\r\n \"ol\",\r\n \"optgroup\",\r\n \"option\",\r\n \"output\",\r\n \"p\",\r\n \"param\",\r\n \"picture\",\r\n \"pre\",\r\n \"progress\",\r\n \"q\",\r\n \"rb\",\r\n \"rp\",\r\n \"rt\",\r\n \"rtc\",\r\n \"ruby\",\r\n \"s\",\r\n \"samp\",\r\n \"script\",\r\n \"section\",\r\n \"select\",\r\n \"slot\",\r\n \"small\",\r\n \"source\",\r\n \"span\",\r\n \"strong\",\r\n \"style\",\r\n \"sub\",\r\n \"summary\",\r\n \"sup\",\r\n \"svg\",\r\n \"table\",\r\n \"tbody\",\r\n \"td\",\r\n \"template\",\r\n \"textarea\",\r\n \"tfoot\",\r\n \"th\",\r\n \"thead\",\r\n \"time\",\r\n \"title\",\r\n \"tr\",\r\n \"track\",\r\n \"u\",\r\n \"ul\",\r\n \"var\",\r\n \"video\",\r\n \"wbr\"\r\n];\r\n\r\nfunction isHtmlTag(name) {\r\n return tags.includes(name);\r\n}\r\n\r\nfunction isTransition(name) {\r\n return [\"transition-group\", \"TransitionGroup\"].includes(name);\r\n}\r\n\r\nfunction isHtmlAttribute(value) {\r\n return (\r\n [\"id\", \"class\", \"role\", \"style\"].includes(value) ||\r\n value.startsWith(\"data-\") ||\r\n value.startsWith(\"aria-\") ||\r\n value.startsWith(\"on\")\r\n );\r\n}\r\n\r\nexport { isHtmlTag, isHtmlAttribute, isTransition };\r\n","import { camelize } from \"../util/string\";\r\nimport { events, isReadOnly } from \"./sortableEvents\";\r\nimport { isHtmlAttribute } from \"../util/tags\";\r\n\r\nfunction project(entries) {\r\n return entries.reduce((res, [key, value]) => {\r\n res[key] = value;\r\n return res;\r\n }, {});\r\n}\r\n\r\nfunction getComponentAttributes({ $attrs, componentData = {} }) {\r\n const attributes = project(\r\n Object.entries($attrs).filter(([key, _]) => isHtmlAttribute(key))\r\n );\r\n return {\r\n ...attributes,\r\n ...componentData\r\n };\r\n}\r\n\r\nfunction createSortableOption({ $attrs, callBackBuilder }) {\r\n const options = project(getValidSortableEntries($attrs));\r\n Object.entries(callBackBuilder).forEach(([eventType, eventBuilder]) => {\r\n events[eventType].forEach(event => {\r\n options[`on${event}`] = eventBuilder(event);\r\n });\r\n });\r\n const draggable = `[data-draggable]${options.draggable || \"\"}`;\r\n return {\r\n ...options,\r\n draggable\r\n };\r\n}\r\n\r\nfunction getValidSortableEntries(value) {\r\n return Object.entries(value)\r\n .filter(([key, _]) => !isHtmlAttribute(key))\r\n .map(([key, value]) => [camelize(key), value])\r\n .filter(([key, _]) => !isReadOnly(key));\r\n}\r\n\r\nexport {\r\n getComponentAttributes,\r\n createSortableOption,\r\n getValidSortableEntries\r\n};\r\n","const getHtmlElementFromNode = ({ el }) => el;\r\nconst addContext = (domElement, context) =>\r\n (domElement.__draggable_context = context);\r\nconst getContext = domElement => domElement.__draggable_context;\r\n\r\nclass ComponentStructure {\r\n constructor({\r\n nodes: { header, default: defaultNodes, footer },\r\n root,\r\n realList\r\n }) {\r\n this.defaultNodes = defaultNodes;\r\n this.children = [...header, ...defaultNodes, ...footer];\r\n this.externalComponent = root.externalComponent;\r\n this.rootTransition = root.transition;\r\n this.tag = root.tag;\r\n this.realList = realList;\r\n }\r\n\r\n get _isRootComponent() {\r\n return this.externalComponent || this.rootTransition;\r\n }\r\n\r\n render(h, attributes) {\r\n const { tag, children, _isRootComponent } = this;\r\n const option = !_isRootComponent ? children : { default: () => children };\r\n return h(tag, attributes, option);\r\n }\r\n\r\n updated() {\r\n const { defaultNodes, realList } = this;\r\n defaultNodes.forEach((node, index) => {\r\n addContext(getHtmlElementFromNode(node), {\r\n element: realList[index],\r\n index\r\n });\r\n });\r\n }\r\n\r\n getUnderlyingVm(domElement) {\r\n return getContext(domElement);\r\n }\r\n\r\n getVmIndexFromDomIndex(domIndex, element) {\r\n const { defaultNodes } = this;\r\n const { length } = defaultNodes;\r\n const domChildren = element.children;\r\n const domElement = domChildren.item(domIndex);\r\n\r\n if (domElement === null) {\r\n return length;\r\n }\r\n const context = getContext(domElement);\r\n if (context) {\r\n return context.index;\r\n }\r\n\r\n if (length === 0) {\r\n return 0;\r\n }\r\n const firstDomListElement = getHtmlElementFromNode(defaultNodes[0]);\r\n const indexFirstDomListElement = [...domChildren].findIndex(\r\n element => element === firstDomListElement\r\n );\r\n return domIndex < indexFirstDomListElement ? 0 : length;\r\n }\r\n}\r\n\r\nexport { ComponentStructure };\r\n","import { ComponentStructure } from \"./componentStructure\";\r\nimport { isHtmlTag, isTransition } from \"../util/tags\";\r\nimport { resolveComponent, TransitionGroup } from \"vue\";\r\n\r\nfunction getSlot(slots, key) {\r\n const slotValue = slots[key];\r\n return slotValue ? slotValue() : [];\r\n}\r\n\r\nfunction computeNodes({ $slots, realList, getKey }) {\r\n const normalizedList = realList || [];\r\n const [header, footer] = [\"header\", \"footer\"].map(name =>\r\n getSlot($slots, name)\r\n );\r\n const { item } = $slots;\r\n if (!item) {\r\n throw new Error(\"draggable element must have an item slot\");\r\n }\r\n const defaultNodes = normalizedList.flatMap((element, index) =>\r\n item({ element, index }).map(node => {\r\n node.key = getKey(element);\r\n node.props = { ...(node.props || {}), \"data-draggable\": true };\r\n return node;\r\n })\r\n );\r\n if (defaultNodes.length !== normalizedList.length) {\r\n throw new Error(\"Item slot must have only one child\");\r\n }\r\n return {\r\n header,\r\n footer,\r\n default: defaultNodes\r\n };\r\n}\r\n\r\nfunction getRootInformation(tag) {\r\n const transition = isTransition(tag);\r\n const externalComponent = !isHtmlTag(tag) && !transition;\r\n return {\r\n transition,\r\n externalComponent,\r\n tag: externalComponent\r\n ? resolveComponent(tag)\r\n : transition\r\n ? TransitionGroup\r\n : tag\r\n };\r\n}\r\n\r\nfunction computeComponentStructure({ $slots, tag, realList, getKey }) {\r\n const nodes = computeNodes({ $slots, realList, getKey });\r\n const root = getRootInformation(tag);\r\n return new ComponentStructure({ nodes, root, realList });\r\n}\r\n\r\nexport { computeComponentStructure };\r\n","import Sortable from \"sortablejs\";\r\nimport { insertNodeAt, removeNode } from \"./util/htmlHelper\";\r\nimport { console } from \"./util/console\";\r\nimport {\r\n getComponentAttributes,\r\n createSortableOption,\r\n getValidSortableEntries\r\n} from \"./core/componentBuilderHelper\";\r\nimport { computeComponentStructure } from \"./core/renderHelper\";\r\nimport { events } from \"./core/sortableEvents\";\r\nimport { h, defineComponent, nextTick } from \"vue\";\r\n\r\nfunction emit(evtName, evtData) {\r\n nextTick(() => this.$emit(evtName.toLowerCase(), evtData));\r\n}\r\n\r\nfunction manage(evtName) {\r\n return (evtData, originalElement) => {\r\n if (this.realList !== null) {\r\n return this[`onDrag${evtName}`](evtData, originalElement);\r\n }\r\n };\r\n}\r\n\r\nfunction manageAndEmit(evtName) {\r\n const delegateCallBack = manage.call(this, evtName);\r\n return (evtData, originalElement) => {\r\n delegateCallBack.call(this, evtData, originalElement);\r\n emit.call(this, evtName, evtData);\r\n };\r\n}\r\n\r\nlet draggingElement = null;\r\n\r\nconst props = {\r\n list: {\r\n type: Array,\r\n required: false,\r\n default: null\r\n },\r\n modelValue: {\r\n type: Array,\r\n required: false,\r\n default: null\r\n },\r\n itemKey: {\r\n type: [String, Function],\r\n required: true\r\n },\r\n clone: {\r\n type: Function,\r\n default: original => {\r\n return original;\r\n }\r\n },\r\n tag: {\r\n type: String,\r\n default: \"div\"\r\n },\r\n move: {\r\n type: Function,\r\n default: null\r\n },\r\n componentData: {\r\n type: Object,\r\n required: false,\r\n default: null\r\n }\r\n};\r\n\r\nconst emits = [\r\n \"update:modelValue\",\r\n \"change\",\r\n ...[...events.manageAndEmit, ...events.emit].map(evt => evt.toLowerCase())\r\n];\r\n\r\nconst draggableComponent = defineComponent({\r\n name: \"draggable\",\r\n\r\n inheritAttrs: false,\r\n\r\n props,\r\n\r\n emits,\r\n\r\n data() {\r\n return {\r\n error: false\r\n };\r\n },\r\n\r\n render() {\r\n try {\r\n this.error = false;\r\n const { $slots, $attrs, tag, componentData, realList, getKey } = this;\r\n const componentStructure = computeComponentStructure({\r\n $slots,\r\n tag,\r\n realList,\r\n getKey\r\n });\r\n this.componentStructure = componentStructure;\r\n const attributes = getComponentAttributes({ $attrs, componentData });\r\n return componentStructure.render(h, attributes);\r\n } catch (err) {\r\n this.error = true;\r\n return h(\"pre\", { style: { color: \"red\" } }, err.stack);\r\n }\r\n },\r\n\r\n created() {\r\n if (this.list !== null && this.modelValue !== null) {\r\n console.error(\r\n \"modelValue and list props are mutually exclusive! Please set one or another.\"\r\n );\r\n }\r\n },\r\n\r\n mounted() {\r\n if (this.error) {\r\n return;\r\n }\r\n\r\n const { $attrs, $el, componentStructure } = this;\r\n componentStructure.updated();\r\n\r\n const sortableOptions = createSortableOption({\r\n $attrs,\r\n callBackBuilder: {\r\n manageAndEmit: event => manageAndEmit.call(this, event),\r\n emit: event => emit.bind(this, event),\r\n manage: event => manage.call(this, event)\r\n }\r\n });\r\n const targetDomElement = $el.nodeType === 1 ? $el : $el.parentElement;\r\n this._sortable = new Sortable(targetDomElement, sortableOptions);\r\n this.targetDomElement = targetDomElement;\r\n targetDomElement.__draggable_component__ = this;\r\n },\r\n\r\n updated() {\r\n this.componentStructure.updated();\r\n },\r\n\r\n beforeUnmount() {\r\n if (this._sortable !== undefined) this._sortable.destroy();\r\n },\r\n\r\n computed: {\r\n realList() {\r\n const { list } = this;\r\n return list ? list : this.modelValue;\r\n },\r\n\r\n getKey() {\r\n const { itemKey } = this;\r\n if (typeof itemKey === \"function\") {\r\n return itemKey;\r\n }\r\n return element => element[itemKey];\r\n }\r\n },\r\n\r\n watch: {\r\n $attrs: {\r\n handler(newOptionValue) {\r\n const { _sortable } = this;\r\n if (!_sortable) return;\r\n getValidSortableEntries(newOptionValue).forEach(([key, value]) => {\r\n _sortable.option(key, value);\r\n });\r\n },\r\n deep: true\r\n }\r\n },\r\n\r\n methods: {\r\n getUnderlyingVm(domElement) {\r\n return this.componentStructure.getUnderlyingVm(domElement) || null;\r\n },\r\n\r\n getUnderlyingPotencialDraggableComponent(htmElement) {\r\n //TODO check case where you need to see component children\r\n return htmElement.__draggable_component__;\r\n },\r\n\r\n emitChanges(evt) {\r\n nextTick(() => this.$emit(\"change\", evt));\r\n },\r\n\r\n alterList(onList) {\r\n if (this.list) {\r\n onList(this.list);\r\n return;\r\n }\r\n const newList = [...this.modelValue];\r\n onList(newList);\r\n this.$emit(\"update:modelValue\", newList);\r\n },\r\n\r\n spliceList() {\r\n const spliceList = list => list.splice(...arguments);\r\n this.alterList(spliceList);\r\n },\r\n\r\n updatePosition(oldIndex, newIndex) {\r\n const updatePosition = list =>\r\n list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\r\n this.alterList(updatePosition);\r\n },\r\n\r\n getRelatedContextFromMoveEvent({ to, related }) {\r\n const component = this.getUnderlyingPotencialDraggableComponent(to);\r\n if (!component) {\r\n return { component };\r\n }\r\n const list = component.realList;\r\n const context = { list, component };\r\n if (to !== related && list) {\r\n const destination = component.getUnderlyingVm(related) || {};\r\n return { ...destination, ...context };\r\n }\r\n return context;\r\n },\r\n\r\n getVmIndexFromDomIndex(domIndex) {\r\n return this.componentStructure.getVmIndexFromDomIndex(\r\n domIndex,\r\n this.targetDomElement\r\n );\r\n },\r\n\r\n onDragStart(evt) {\r\n this.context = this.getUnderlyingVm(evt.item);\r\n evt.item._underlying_vm_ = this.clone(this.context.element);\r\n draggingElement = evt.item;\r\n },\r\n\r\n onDragAdd(evt) {\r\n const element = evt.item._underlying_vm_;\r\n if (element === undefined) {\r\n return;\r\n }\r\n removeNode(evt.item);\r\n const newIndex = this.getVmIndexFromDomIndex(evt.newIndex);\r\n this.spliceList(newIndex, 0, element);\r\n const added = { element, newIndex };\r\n this.emitChanges({ added });\r\n },\r\n\r\n onDragRemove(evt) {\r\n insertNodeAt(this.$el, evt.item, evt.oldIndex);\r\n if (evt.pullMode === \"clone\") {\r\n removeNode(evt.clone);\r\n return;\r\n }\r\n const { index: oldIndex, element } = this.context;\r\n this.spliceList(oldIndex, 1);\r\n const removed = { element, oldIndex };\r\n this.emitChanges({ removed });\r\n },\r\n\r\n onDragUpdate(evt) {\r\n removeNode(evt.item);\r\n insertNodeAt(evt.from, evt.item, evt.oldIndex);\r\n const oldIndex = this.context.index;\r\n const newIndex = this.getVmIndexFromDomIndex(evt.newIndex);\r\n this.updatePosition(oldIndex, newIndex);\r\n const moved = { element: this.context.element, oldIndex, newIndex };\r\n this.emitChanges({ moved });\r\n },\r\n\r\n computeFutureIndex(relatedContext, evt) {\r\n if (!relatedContext.element) {\r\n return 0;\r\n }\r\n const domChildren = [...evt.to.children].filter(\r\n el => el.style[\"display\"] !== \"none\"\r\n );\r\n const currentDomIndex = domChildren.indexOf(evt.related);\r\n const currentIndex = relatedContext.component.getVmIndexFromDomIndex(\r\n currentDomIndex\r\n );\r\n const draggedInList = domChildren.indexOf(draggingElement) !== -1;\r\n return draggedInList || !evt.willInsertAfter\r\n ? currentIndex\r\n : currentIndex + 1;\r\n },\r\n\r\n onDragMove(evt, originalEvent) {\r\n const { move, realList } = this;\r\n if (!move || !realList) {\r\n return true;\r\n }\r\n\r\n const relatedContext = this.getRelatedContextFromMoveEvent(evt);\r\n const futureIndex = this.computeFutureIndex(relatedContext, evt);\r\n const draggedContext = {\r\n ...this.context,\r\n futureIndex\r\n };\r\n const sendEvent = {\r\n ...evt,\r\n relatedContext,\r\n draggedContext\r\n };\r\n return move(sendEvent, originalEvent);\r\n },\r\n\r\n onDragEnd() {\r\n draggingElement = null;\r\n }\r\n }\r\n});\r\n\r\nexport default draggableComponent;\r\n","\n\n","\n\n","\n\n\n\n\n\n","\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport const logger = getLoggerBuilder()\n\t.detectLogLevel()\n\t.setApp('dashboard')\n\t.build()\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tisMobile: this._isMobile(),\n\t\t}\n\t},\n\tbeforeMount() {\n\t\twindow.addEventListener('resize', this._onResize)\n\t},\n\tbeforeUnmount() {\n\t\twindow.removeEventListener('resize', this._onResize)\n\t},\n\tmethods: {\n\t\t_onResize() {\n\t\t\t// Update mobile mode\n\t\t\tthis.isMobile = this._isMobile()\n\t\t},\n\t\t_isMobile() {\n\t\t\t// check if content width is under 768px\n\t\t\treturn document.documentElement.clientWidth < 768\n\t\t},\n\t},\n}\n","\n\n\n\n\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createApp } from 'vue'\nimport DashboardApp from './DashboardApp.vue'\n\nconst app = createApp(DashboardApp)\nconst Instance = app.mount('#app-content-vue')\n\nwindow.OCA.Dashboard = {\n\tregister: (app, callback) => Instance.register(app, callback),\n\tregisterStatus: (app, callback) => Instance.registerStatus(app, callback),\n}\n"],"names":["ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","i","source","key","_defineProperty","_typeof","obj","value","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","el","event","fn","off","matches","selector","getParentOrHost","closest","ctx","includeCTX","R_SPACE","toggleClass","name","state","className","css","prop","val","style","matrix","selfOnly","appliedTransforms","transform","matrixFn","find","tagName","iterator","list","n","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","elRect","top","left","bottom","right","height","width","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","options","includeDragEl","currentChild","children","Sortable","lastChild","last","index","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","arr","includeSelf","elem","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","throttle","callback","ms","args","_this","cancelThrottle","scrollBy","x","y","clone","Polymer","$","expando","AnimationStateManager","animationStates","animationCallbackId","child","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","duration","translateX","translateY","repaint","plugins","defaults","PluginManager","plugin","option","p","eventName","sortable","evt","eventNameGlobal","pluginName","initialized","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","data","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","info","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","rect","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","from","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","type","touch","originalTarget","filter","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","e","_nextTick","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","extra","completed","after","_onMove","changed","capture","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","order","_generateId","useAnimation","items","id","store","willInsertAfter","onMoveFn","retVal","spacer","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","element","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","removeNode","node","insertNodeAt","fatherNode","position","refNode","getConsole","global","console","cached","cache","regex","camelize","_","c","manageAndEmit","emit","manage","eventHandlerNames","events","isReadOnly","tags","isHtmlTag","isTransition","isHtmlAttribute","project","entries","res","getComponentAttributes","$attrs","componentData","createSortableOption","callBackBuilder","getValidSortableEntries","eventType","eventBuilder","draggable","getHtmlElementFromNode","addContext","domElement","context","getContext","ComponentStructure","header","defaultNodes","footer","realList","h","attributes","tag","_isRootComponent","domIndex","length","domChildren","firstDomListElement","indexFirstDomListElement","getSlot","slots","slotValue","computeNodes","$slots","getKey","normalizedList","item","getRootInformation","transition","externalComponent","resolveComponent","TransitionGroup","computeComponentStructure","nodes","evtName","evtData","nextTick","originalElement","delegateCallBack","draggingElement","props","original","emits","draggableComponent","defineComponent","componentStructure","err","$el","sortableOptions","targetDomElement","itemKey","newOptionValue","_sortable","htmElement","onList","newList","spliceList","updatePosition","related","component","added","removed","relatedContext","currentDomIndex","currentIndex","move","futureIndex","draggedContext","sendEvent","_sfc_main","_hoisted_3","_createElementBlock","_mergeProps","_ctx","$props","_cache","$event","_createElementVNode","_openBlock","imageLoaded","ref","loadingImageFailed","_createBlock","_unref","NcDashboardWidgetItem","__props","_Fragment","NcAvatar","_normalizeClass","IconFile","ApiDashboardWidgetItem","CheckIcon","NcDashboardWidget","NcEmptyContent","NcButton","button","size","numeric","_component_NcDashboardWidget","$options","_withCtx","_createVNode","_component_ApiDashboardWidgetItem","$data","_component_NcEmptyContent","_component_CheckIcon","_component_NcButton","_createTextVNode","_toDisplayString","logger","getLoggerBuilder","isMobile","panels","loadState","firstRun","birthdate","statusInfo","t","ApiDashboardWidget","Draggable","NcModal","Pencil","NcUserStatusIcon","getCurrentUser","panelId","generateUrl","isBirthday","partOfDay","good","panel","status","s","apiWidgetIdsToFetch","widget","app","axios","generateOcsUrl","a","b","indexA","indexB","currentValue","checked","j","al","bl","widgetIds","merge","url","params","widgetItems","_hoisted_1","_hoisted_4","_hoisted_6","_hoisted_7","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_19","_hoisted_2","_renderList","_component_Draggable","_component_ApiDashboardWidget","_component_Pencil","$setup","_component_NcModal","_component_NcUserStatusIcon","_hoisted_17","_hoisted_18","_hoisted_20","_hoisted_21","_hoisted_22","createApp","DashboardApp","Instance"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]} \ No newline at end of file +{"version":3,"file":"dashboard-main.mjs","sources":["../node_modules/vuedraggable/node_modules/sortablejs/modular/sortable.esm.js","../node_modules/vuedraggable/src/util/htmlHelper.js","../node_modules/vuedraggable/src/util/console.js","../node_modules/vuedraggable/src/util/string.js","../node_modules/vuedraggable/src/core/sortableEvents.js","../node_modules/vuedraggable/src/util/tags.js","../node_modules/vuedraggable/src/core/componentBuilderHelper.js","../node_modules/vuedraggable/src/core/componentStructure.js","../node_modules/vuedraggable/src/core/renderHelper.js","../node_modules/vuedraggable/src/vuedraggable.js","../node_modules/vue-material-design-icons/Pencil.vue","../node_modules/vue-material-design-icons/File.vue","../build/frontend/apps/dashboard/src/components/ApiDashboardWidgetItem.vue","../build/frontend/apps/dashboard/src/components/ApiDashboardWidget.vue","../build/frontend/apps/dashboard/src/logger.ts","../build/frontend/apps/dashboard/src/mixins/isMobile.js","../build/frontend/apps/dashboard/src/DashboardApp.vue","../build/frontend/apps/dashboard/src/main.js"],"sourcesContent":["/**!\n * Sortable 1.14.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.14.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n folding = false; // Do not \"unfold\" after around dragEl if reverted\n\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\n * Selects the provided multi-drag item\n * @param {HTMLElement} el The element to be selected\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\n * Deselects the provided multi-drag item\n * @param {HTMLElement} el The element to be deselected\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\n * Insert multi-drag clones\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\n * @param {HTMLElement} rootEl\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","function removeNode(node) {\r\n if (node.parentElement !== null) {\r\n node.parentElement.removeChild(node);\r\n }\r\n}\r\n\r\nfunction insertNodeAt(fatherNode, node, position) {\r\n const refNode =\r\n position === 0\r\n ? fatherNode.children[0]\r\n : fatherNode.children[position - 1].nextSibling;\r\n fatherNode.insertBefore(node, refNode);\r\n}\r\n\r\nexport { insertNodeAt, removeNode };\r\n","function getConsole() {\r\n if (typeof window !== \"undefined\") {\r\n return window.console;\r\n }\r\n return global.console;\r\n}\r\nconst console = getConsole();\r\n\r\nexport { console };\r\n","function cached(fn) {\r\n const cache = Object.create(null);\r\n return function cachedFn(str) {\r\n const hit = cache[str];\r\n return hit || (cache[str] = fn(str));\r\n };\r\n}\r\n\r\nconst regex = /-(\\w)/g;\r\nconst camelize = cached(str => str.replace(regex, (_, c) => c.toUpperCase()));\r\n\r\nexport { camelize };\r\n","const manageAndEmit = [\"Start\", \"Add\", \"Remove\", \"Update\", \"End\"];\r\nconst emit = [\"Choose\", \"Unchoose\", \"Sort\", \"Filter\", \"Clone\"];\r\nconst manage = [\"Move\"];\r\nconst eventHandlerNames = [manage, manageAndEmit, emit]\r\n .flatMap(events => events)\r\n .map(evt => `on${evt}`);\r\n\r\nconst events = {\r\n manage,\r\n manageAndEmit,\r\n emit\r\n};\r\n\r\nfunction isReadOnly(eventName) {\r\n return eventHandlerNames.indexOf(eventName) !== -1;\r\n}\r\n\r\nexport { events, isReadOnly };\r\n","const tags = [\r\n \"a\",\r\n \"abbr\",\r\n \"address\",\r\n \"area\",\r\n \"article\",\r\n \"aside\",\r\n \"audio\",\r\n \"b\",\r\n \"base\",\r\n \"bdi\",\r\n \"bdo\",\r\n \"blockquote\",\r\n \"body\",\r\n \"br\",\r\n \"button\",\r\n \"canvas\",\r\n \"caption\",\r\n \"cite\",\r\n \"code\",\r\n \"col\",\r\n \"colgroup\",\r\n \"data\",\r\n \"datalist\",\r\n \"dd\",\r\n \"del\",\r\n \"details\",\r\n \"dfn\",\r\n \"dialog\",\r\n \"div\",\r\n \"dl\",\r\n \"dt\",\r\n \"em\",\r\n \"embed\",\r\n \"fieldset\",\r\n \"figcaption\",\r\n \"figure\",\r\n \"footer\",\r\n \"form\",\r\n \"h1\",\r\n \"h2\",\r\n \"h3\",\r\n \"h4\",\r\n \"h5\",\r\n \"h6\",\r\n \"head\",\r\n \"header\",\r\n \"hgroup\",\r\n \"hr\",\r\n \"html\",\r\n \"i\",\r\n \"iframe\",\r\n \"img\",\r\n \"input\",\r\n \"ins\",\r\n \"kbd\",\r\n \"label\",\r\n \"legend\",\r\n \"li\",\r\n \"link\",\r\n \"main\",\r\n \"map\",\r\n \"mark\",\r\n \"math\",\r\n \"menu\",\r\n \"menuitem\",\r\n \"meta\",\r\n \"meter\",\r\n \"nav\",\r\n \"noscript\",\r\n \"object\",\r\n \"ol\",\r\n \"optgroup\",\r\n \"option\",\r\n \"output\",\r\n \"p\",\r\n \"param\",\r\n \"picture\",\r\n \"pre\",\r\n \"progress\",\r\n \"q\",\r\n \"rb\",\r\n \"rp\",\r\n \"rt\",\r\n \"rtc\",\r\n \"ruby\",\r\n \"s\",\r\n \"samp\",\r\n \"script\",\r\n \"section\",\r\n \"select\",\r\n \"slot\",\r\n \"small\",\r\n \"source\",\r\n \"span\",\r\n \"strong\",\r\n \"style\",\r\n \"sub\",\r\n \"summary\",\r\n \"sup\",\r\n \"svg\",\r\n \"table\",\r\n \"tbody\",\r\n \"td\",\r\n \"template\",\r\n \"textarea\",\r\n \"tfoot\",\r\n \"th\",\r\n \"thead\",\r\n \"time\",\r\n \"title\",\r\n \"tr\",\r\n \"track\",\r\n \"u\",\r\n \"ul\",\r\n \"var\",\r\n \"video\",\r\n \"wbr\"\r\n];\r\n\r\nfunction isHtmlTag(name) {\r\n return tags.includes(name);\r\n}\r\n\r\nfunction isTransition(name) {\r\n return [\"transition-group\", \"TransitionGroup\"].includes(name);\r\n}\r\n\r\nfunction isHtmlAttribute(value) {\r\n return (\r\n [\"id\", \"class\", \"role\", \"style\"].includes(value) ||\r\n value.startsWith(\"data-\") ||\r\n value.startsWith(\"aria-\") ||\r\n value.startsWith(\"on\")\r\n );\r\n}\r\n\r\nexport { isHtmlTag, isHtmlAttribute, isTransition };\r\n","import { camelize } from \"../util/string\";\r\nimport { events, isReadOnly } from \"./sortableEvents\";\r\nimport { isHtmlAttribute } from \"../util/tags\";\r\n\r\nfunction project(entries) {\r\n return entries.reduce((res, [key, value]) => {\r\n res[key] = value;\r\n return res;\r\n }, {});\r\n}\r\n\r\nfunction getComponentAttributes({ $attrs, componentData = {} }) {\r\n const attributes = project(\r\n Object.entries($attrs).filter(([key, _]) => isHtmlAttribute(key))\r\n );\r\n return {\r\n ...attributes,\r\n ...componentData\r\n };\r\n}\r\n\r\nfunction createSortableOption({ $attrs, callBackBuilder }) {\r\n const options = project(getValidSortableEntries($attrs));\r\n Object.entries(callBackBuilder).forEach(([eventType, eventBuilder]) => {\r\n events[eventType].forEach(event => {\r\n options[`on${event}`] = eventBuilder(event);\r\n });\r\n });\r\n const draggable = `[data-draggable]${options.draggable || \"\"}`;\r\n return {\r\n ...options,\r\n draggable\r\n };\r\n}\r\n\r\nfunction getValidSortableEntries(value) {\r\n return Object.entries(value)\r\n .filter(([key, _]) => !isHtmlAttribute(key))\r\n .map(([key, value]) => [camelize(key), value])\r\n .filter(([key, _]) => !isReadOnly(key));\r\n}\r\n\r\nexport {\r\n getComponentAttributes,\r\n createSortableOption,\r\n getValidSortableEntries\r\n};\r\n","const getHtmlElementFromNode = ({ el }) => el;\r\nconst addContext = (domElement, context) =>\r\n (domElement.__draggable_context = context);\r\nconst getContext = domElement => domElement.__draggable_context;\r\n\r\nclass ComponentStructure {\r\n constructor({\r\n nodes: { header, default: defaultNodes, footer },\r\n root,\r\n realList\r\n }) {\r\n this.defaultNodes = defaultNodes;\r\n this.children = [...header, ...defaultNodes, ...footer];\r\n this.externalComponent = root.externalComponent;\r\n this.rootTransition = root.transition;\r\n this.tag = root.tag;\r\n this.realList = realList;\r\n }\r\n\r\n get _isRootComponent() {\r\n return this.externalComponent || this.rootTransition;\r\n }\r\n\r\n render(h, attributes) {\r\n const { tag, children, _isRootComponent } = this;\r\n const option = !_isRootComponent ? children : { default: () => children };\r\n return h(tag, attributes, option);\r\n }\r\n\r\n updated() {\r\n const { defaultNodes, realList } = this;\r\n defaultNodes.forEach((node, index) => {\r\n addContext(getHtmlElementFromNode(node), {\r\n element: realList[index],\r\n index\r\n });\r\n });\r\n }\r\n\r\n getUnderlyingVm(domElement) {\r\n return getContext(domElement);\r\n }\r\n\r\n getVmIndexFromDomIndex(domIndex, element) {\r\n const { defaultNodes } = this;\r\n const { length } = defaultNodes;\r\n const domChildren = element.children;\r\n const domElement = domChildren.item(domIndex);\r\n\r\n if (domElement === null) {\r\n return length;\r\n }\r\n const context = getContext(domElement);\r\n if (context) {\r\n return context.index;\r\n }\r\n\r\n if (length === 0) {\r\n return 0;\r\n }\r\n const firstDomListElement = getHtmlElementFromNode(defaultNodes[0]);\r\n const indexFirstDomListElement = [...domChildren].findIndex(\r\n element => element === firstDomListElement\r\n );\r\n return domIndex < indexFirstDomListElement ? 0 : length;\r\n }\r\n}\r\n\r\nexport { ComponentStructure };\r\n","import { ComponentStructure } from \"./componentStructure\";\r\nimport { isHtmlTag, isTransition } from \"../util/tags\";\r\nimport { resolveComponent, TransitionGroup } from \"vue\";\r\n\r\nfunction getSlot(slots, key) {\r\n const slotValue = slots[key];\r\n return slotValue ? slotValue() : [];\r\n}\r\n\r\nfunction computeNodes({ $slots, realList, getKey }) {\r\n const normalizedList = realList || [];\r\n const [header, footer] = [\"header\", \"footer\"].map(name =>\r\n getSlot($slots, name)\r\n );\r\n const { item } = $slots;\r\n if (!item) {\r\n throw new Error(\"draggable element must have an item slot\");\r\n }\r\n const defaultNodes = normalizedList.flatMap((element, index) =>\r\n item({ element, index }).map(node => {\r\n node.key = getKey(element);\r\n node.props = { ...(node.props || {}), \"data-draggable\": true };\r\n return node;\r\n })\r\n );\r\n if (defaultNodes.length !== normalizedList.length) {\r\n throw new Error(\"Item slot must have only one child\");\r\n }\r\n return {\r\n header,\r\n footer,\r\n default: defaultNodes\r\n };\r\n}\r\n\r\nfunction getRootInformation(tag) {\r\n const transition = isTransition(tag);\r\n const externalComponent = !isHtmlTag(tag) && !transition;\r\n return {\r\n transition,\r\n externalComponent,\r\n tag: externalComponent\r\n ? resolveComponent(tag)\r\n : transition\r\n ? TransitionGroup\r\n : tag\r\n };\r\n}\r\n\r\nfunction computeComponentStructure({ $slots, tag, realList, getKey }) {\r\n const nodes = computeNodes({ $slots, realList, getKey });\r\n const root = getRootInformation(tag);\r\n return new ComponentStructure({ nodes, root, realList });\r\n}\r\n\r\nexport { computeComponentStructure };\r\n","import Sortable from \"sortablejs\";\r\nimport { insertNodeAt, removeNode } from \"./util/htmlHelper\";\r\nimport { console } from \"./util/console\";\r\nimport {\r\n getComponentAttributes,\r\n createSortableOption,\r\n getValidSortableEntries\r\n} from \"./core/componentBuilderHelper\";\r\nimport { computeComponentStructure } from \"./core/renderHelper\";\r\nimport { events } from \"./core/sortableEvents\";\r\nimport { h, defineComponent, nextTick } from \"vue\";\r\n\r\nfunction emit(evtName, evtData) {\r\n nextTick(() => this.$emit(evtName.toLowerCase(), evtData));\r\n}\r\n\r\nfunction manage(evtName) {\r\n return (evtData, originalElement) => {\r\n if (this.realList !== null) {\r\n return this[`onDrag${evtName}`](evtData, originalElement);\r\n }\r\n };\r\n}\r\n\r\nfunction manageAndEmit(evtName) {\r\n const delegateCallBack = manage.call(this, evtName);\r\n return (evtData, originalElement) => {\r\n delegateCallBack.call(this, evtData, originalElement);\r\n emit.call(this, evtName, evtData);\r\n };\r\n}\r\n\r\nlet draggingElement = null;\r\n\r\nconst props = {\r\n list: {\r\n type: Array,\r\n required: false,\r\n default: null\r\n },\r\n modelValue: {\r\n type: Array,\r\n required: false,\r\n default: null\r\n },\r\n itemKey: {\r\n type: [String, Function],\r\n required: true\r\n },\r\n clone: {\r\n type: Function,\r\n default: original => {\r\n return original;\r\n }\r\n },\r\n tag: {\r\n type: String,\r\n default: \"div\"\r\n },\r\n move: {\r\n type: Function,\r\n default: null\r\n },\r\n componentData: {\r\n type: Object,\r\n required: false,\r\n default: null\r\n }\r\n};\r\n\r\nconst emits = [\r\n \"update:modelValue\",\r\n \"change\",\r\n ...[...events.manageAndEmit, ...events.emit].map(evt => evt.toLowerCase())\r\n];\r\n\r\nconst draggableComponent = defineComponent({\r\n name: \"draggable\",\r\n\r\n inheritAttrs: false,\r\n\r\n props,\r\n\r\n emits,\r\n\r\n data() {\r\n return {\r\n error: false\r\n };\r\n },\r\n\r\n render() {\r\n try {\r\n this.error = false;\r\n const { $slots, $attrs, tag, componentData, realList, getKey } = this;\r\n const componentStructure = computeComponentStructure({\r\n $slots,\r\n tag,\r\n realList,\r\n getKey\r\n });\r\n this.componentStructure = componentStructure;\r\n const attributes = getComponentAttributes({ $attrs, componentData });\r\n return componentStructure.render(h, attributes);\r\n } catch (err) {\r\n this.error = true;\r\n return h(\"pre\", { style: { color: \"red\" } }, err.stack);\r\n }\r\n },\r\n\r\n created() {\r\n if (this.list !== null && this.modelValue !== null) {\r\n console.error(\r\n \"modelValue and list props are mutually exclusive! Please set one or another.\"\r\n );\r\n }\r\n },\r\n\r\n mounted() {\r\n if (this.error) {\r\n return;\r\n }\r\n\r\n const { $attrs, $el, componentStructure } = this;\r\n componentStructure.updated();\r\n\r\n const sortableOptions = createSortableOption({\r\n $attrs,\r\n callBackBuilder: {\r\n manageAndEmit: event => manageAndEmit.call(this, event),\r\n emit: event => emit.bind(this, event),\r\n manage: event => manage.call(this, event)\r\n }\r\n });\r\n const targetDomElement = $el.nodeType === 1 ? $el : $el.parentElement;\r\n this._sortable = new Sortable(targetDomElement, sortableOptions);\r\n this.targetDomElement = targetDomElement;\r\n targetDomElement.__draggable_component__ = this;\r\n },\r\n\r\n updated() {\r\n this.componentStructure.updated();\r\n },\r\n\r\n beforeUnmount() {\r\n if (this._sortable !== undefined) this._sortable.destroy();\r\n },\r\n\r\n computed: {\r\n realList() {\r\n const { list } = this;\r\n return list ? list : this.modelValue;\r\n },\r\n\r\n getKey() {\r\n const { itemKey } = this;\r\n if (typeof itemKey === \"function\") {\r\n return itemKey;\r\n }\r\n return element => element[itemKey];\r\n }\r\n },\r\n\r\n watch: {\r\n $attrs: {\r\n handler(newOptionValue) {\r\n const { _sortable } = this;\r\n if (!_sortable) return;\r\n getValidSortableEntries(newOptionValue).forEach(([key, value]) => {\r\n _sortable.option(key, value);\r\n });\r\n },\r\n deep: true\r\n }\r\n },\r\n\r\n methods: {\r\n getUnderlyingVm(domElement) {\r\n return this.componentStructure.getUnderlyingVm(domElement) || null;\r\n },\r\n\r\n getUnderlyingPotencialDraggableComponent(htmElement) {\r\n //TODO check case where you need to see component children\r\n return htmElement.__draggable_component__;\r\n },\r\n\r\n emitChanges(evt) {\r\n nextTick(() => this.$emit(\"change\", evt));\r\n },\r\n\r\n alterList(onList) {\r\n if (this.list) {\r\n onList(this.list);\r\n return;\r\n }\r\n const newList = [...this.modelValue];\r\n onList(newList);\r\n this.$emit(\"update:modelValue\", newList);\r\n },\r\n\r\n spliceList() {\r\n const spliceList = list => list.splice(...arguments);\r\n this.alterList(spliceList);\r\n },\r\n\r\n updatePosition(oldIndex, newIndex) {\r\n const updatePosition = list =>\r\n list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\r\n this.alterList(updatePosition);\r\n },\r\n\r\n getRelatedContextFromMoveEvent({ to, related }) {\r\n const component = this.getUnderlyingPotencialDraggableComponent(to);\r\n if (!component) {\r\n return { component };\r\n }\r\n const list = component.realList;\r\n const context = { list, component };\r\n if (to !== related && list) {\r\n const destination = component.getUnderlyingVm(related) || {};\r\n return { ...destination, ...context };\r\n }\r\n return context;\r\n },\r\n\r\n getVmIndexFromDomIndex(domIndex) {\r\n return this.componentStructure.getVmIndexFromDomIndex(\r\n domIndex,\r\n this.targetDomElement\r\n );\r\n },\r\n\r\n onDragStart(evt) {\r\n this.context = this.getUnderlyingVm(evt.item);\r\n evt.item._underlying_vm_ = this.clone(this.context.element);\r\n draggingElement = evt.item;\r\n },\r\n\r\n onDragAdd(evt) {\r\n const element = evt.item._underlying_vm_;\r\n if (element === undefined) {\r\n return;\r\n }\r\n removeNode(evt.item);\r\n const newIndex = this.getVmIndexFromDomIndex(evt.newIndex);\r\n this.spliceList(newIndex, 0, element);\r\n const added = { element, newIndex };\r\n this.emitChanges({ added });\r\n },\r\n\r\n onDragRemove(evt) {\r\n insertNodeAt(this.$el, evt.item, evt.oldIndex);\r\n if (evt.pullMode === \"clone\") {\r\n removeNode(evt.clone);\r\n return;\r\n }\r\n const { index: oldIndex, element } = this.context;\r\n this.spliceList(oldIndex, 1);\r\n const removed = { element, oldIndex };\r\n this.emitChanges({ removed });\r\n },\r\n\r\n onDragUpdate(evt) {\r\n removeNode(evt.item);\r\n insertNodeAt(evt.from, evt.item, evt.oldIndex);\r\n const oldIndex = this.context.index;\r\n const newIndex = this.getVmIndexFromDomIndex(evt.newIndex);\r\n this.updatePosition(oldIndex, newIndex);\r\n const moved = { element: this.context.element, oldIndex, newIndex };\r\n this.emitChanges({ moved });\r\n },\r\n\r\n computeFutureIndex(relatedContext, evt) {\r\n if (!relatedContext.element) {\r\n return 0;\r\n }\r\n const domChildren = [...evt.to.children].filter(\r\n el => el.style[\"display\"] !== \"none\"\r\n );\r\n const currentDomIndex = domChildren.indexOf(evt.related);\r\n const currentIndex = relatedContext.component.getVmIndexFromDomIndex(\r\n currentDomIndex\r\n );\r\n const draggedInList = domChildren.indexOf(draggingElement) !== -1;\r\n return draggedInList || !evt.willInsertAfter\r\n ? currentIndex\r\n : currentIndex + 1;\r\n },\r\n\r\n onDragMove(evt, originalEvent) {\r\n const { move, realList } = this;\r\n if (!move || !realList) {\r\n return true;\r\n }\r\n\r\n const relatedContext = this.getRelatedContextFromMoveEvent(evt);\r\n const futureIndex = this.computeFutureIndex(relatedContext, evt);\r\n const draggedContext = {\r\n ...this.context,\r\n futureIndex\r\n };\r\n const sendEvent = {\r\n ...evt,\r\n relatedContext,\r\n draggedContext\r\n };\r\n return move(sendEvent, originalEvent);\r\n },\r\n\r\n onDragEnd() {\r\n draggingElement = null;\r\n }\r\n }\r\n});\r\n\r\nexport default draggableComponent;\r\n","\n\n","\n\n","\n\n\n\n\n\n","\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport const logger = getLoggerBuilder()\n\t.detectLogLevel()\n\t.setApp('dashboard')\n\t.build()\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tisMobile: this._isMobile(),\n\t\t}\n\t},\n\tbeforeMount() {\n\t\twindow.addEventListener('resize', this._onResize)\n\t},\n\tbeforeUnmount() {\n\t\twindow.removeEventListener('resize', this._onResize)\n\t},\n\tmethods: {\n\t\t_onResize() {\n\t\t\t// Update mobile mode\n\t\t\tthis.isMobile = this._isMobile()\n\t\t},\n\t\t_isMobile() {\n\t\t\t// check if content width is under 768px\n\t\t\treturn document.documentElement.clientWidth < 768\n\t\t},\n\t},\n}\n","\n\n\n\n\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createApp } from 'vue'\nimport DashboardApp from './DashboardApp.vue'\n\nconst app = createApp(DashboardApp)\nconst Instance = app.mount('#app-content-vue')\n\nwindow.OCA.Dashboard = {\n\tregister: (app, callback) => Instance.register(app, callback),\n\tregisterStatus: (app, callback) => Instance.registerStatus(app, callback),\n}\n"],"names":["ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","i","source","key","_defineProperty","_typeof","obj","value","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","el","event","fn","off","matches","selector","getParentOrHost","closest","ctx","includeCTX","R_SPACE","toggleClass","name","state","className","css","prop","val","style","matrix","selfOnly","appliedTransforms","transform","matrixFn","find","tagName","iterator","list","n","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","elRect","top","left","bottom","right","height","width","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","options","includeDragEl","currentChild","children","Sortable","lastChild","last","index","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","arr","includeSelf","elem","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","throttle","callback","ms","args","_this","cancelThrottle","scrollBy","x","y","clone","Polymer","$","expando","AnimationStateManager","animationStates","animationCallbackId","child","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","duration","translateX","translateY","repaint","plugins","defaults","PluginManager","plugin","option","p","eventName","sortable","evt","eventNameGlobal","pluginName","initialized","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","data","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","info","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","rect","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","from","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","type","touch","originalTarget","filter","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","e","_nextTick","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","extra","completed","after","_onMove","changed","capture","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","order","_generateId","useAnimation","items","id","store","willInsertAfter","onMoveFn","retVal","spacer","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","element","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","removeNode","node","insertNodeAt","fatherNode","position","refNode","getConsole","global","console","cached","cache","regex","camelize","_","c","manageAndEmit","emit","manage","eventHandlerNames","events","isReadOnly","tags","isHtmlTag","isTransition","isHtmlAttribute","project","entries","res","getComponentAttributes","$attrs","componentData","createSortableOption","callBackBuilder","getValidSortableEntries","eventType","eventBuilder","draggable","getHtmlElementFromNode","addContext","domElement","context","getContext","ComponentStructure","header","defaultNodes","footer","realList","h","attributes","tag","_isRootComponent","domIndex","length","domChildren","firstDomListElement","indexFirstDomListElement","getSlot","slots","slotValue","computeNodes","$slots","getKey","normalizedList","item","getRootInformation","transition","externalComponent","resolveComponent","TransitionGroup","computeComponentStructure","nodes","evtName","evtData","nextTick","originalElement","delegateCallBack","draggingElement","props","original","emits","draggableComponent","defineComponent","componentStructure","err","$el","sortableOptions","targetDomElement","itemKey","newOptionValue","_sortable","htmElement","onList","newList","spliceList","updatePosition","related","component","added","removed","relatedContext","currentDomIndex","currentIndex","move","futureIndex","draggedContext","sendEvent","_sfc_main","_hoisted_3","_createElementBlock","_mergeProps","_ctx","$props","_cache","$event","_createElementVNode","_openBlock","imageLoaded","ref","loadingImageFailed","_createBlock","_unref","NcDashboardWidgetItem","__props","_Fragment","NcAvatar","_normalizeClass","IconFile","ApiDashboardWidgetItem","CheckIcon","NcDashboardWidget","NcEmptyContent","NcButton","button","size","numeric","_component_NcDashboardWidget","$options","_withCtx","_createVNode","_component_ApiDashboardWidgetItem","$data","_component_NcEmptyContent","_component_CheckIcon","_component_NcButton","_createTextVNode","_toDisplayString","logger","getLoggerBuilder","isMobile","panels","loadState","firstRun","birthdate","statusInfo","t","ApiDashboardWidget","Draggable","NcModal","Pencil","NcUserStatusIcon","getCurrentUser","panelId","generateUrl","isBirthday","partOfDay","good","panel","status","s","apiWidgetIdsToFetch","widget","app","axios","generateOcsUrl","a","b","indexA","indexB","currentValue","checked","j","al","bl","widgetIds","merge","url","params","widgetItems","_hoisted_1","_hoisted_4","_hoisted_6","_hoisted_7","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_19","_hoisted_2","_renderList","_component_Draggable","_component_ApiDashboardWidget","_component_Pencil","$setup","_component_NcModal","_component_NcUserStatusIcon","_hoisted_17","_hoisted_18","_hoisted_20","_hoisted_21","_hoisted_22","createApp","DashboardApp","Instance"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]} \ No newline at end of file diff --git a/tests/playwright/e2e/dashboard/widget-performance.spec.ts b/tests/playwright/e2e/dashboard/widget-performance.spec.ts index 6b76b10251fac..f2a2886e85bde 100644 --- a/tests/playwright/e2e/dashboard/widget-performance.spec.ts +++ b/tests/playwright/e2e/dashboard/widget-performance.spec.ts @@ -27,7 +27,7 @@ test('dashboard: only loads the data of enabled widgets', async ({ page, user }) const loaded = page.waitForResponse((r) => WIDGET_ITEMS_API.test(r.url())) await page.goto('apps/dashboard') - await expect(page.getByRole('heading', { name: /Good (morning|afternoon|evening|night)/ })).toBeVisible() + await expect(page.getByRole('heading', { name: /(Good (morning|afternoon|evening)|Hello)/ })).toBeVisible() await loaded // Give any further (unwanted) widget request time to be fired …