From 52e2ede9bd005dc0770fa4e045ead79ab44dfc26 Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Mon, 23 May 2022 18:10:29 +0200 Subject: [PATCH 01/35] Move to web components --- demo/electron-tabs.html | 21 +-- electron-tabs.css | 139 -------------------- index.js | 278 ++++++++++++++++++++++++++++++++-------- package.json | 2 +- 4 files changed, 231 insertions(+), 209 deletions(-) delete mode 100644 electron-tabs.css diff --git a/demo/electron-tabs.html b/demo/electron-tabs.html index 5a4944a..c7fe650 100644 --- a/demo/electron-tabs.html +++ b/demo/electron-tabs.html @@ -3,26 +3,17 @@ electron-tabs-demo - -
-
-
-
-
- + + + diff --git a/dist/electron-tabs.js b/dist/electron-tabs.js index 39601a8..4304237 100644 --- a/dist/electron-tabs.js +++ b/dist/electron-tabs.js @@ -1,4 +1,4 @@ -var $5580883c37846f86$export$2e2bcd8739ae039 = ".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tabs {\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n float: left;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\nwebview.visible {\n visibility: visible;\n}\n"; +var $5580883c37846f86$export$2e2bcd8739ae039 = ".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n"; if (!document) throw Error("electron-tabs module must be called in renderer process"); @@ -44,6 +44,9 @@ class $4fa36e821943b400$var$TabGroup extends HTMLElement { $4fa36e821943b400$var$TabGroupPrivate.initVisibility.bind(this)(); if (typeof this.options.ready === "function") this.options.ready(this); } + setNewTab(newTab) { + this.options.newTab = newTab; + } addTab(args = this.options.newTab) { if (typeof args === "function") args = args(this); let id = this.newTabId; @@ -166,8 +169,8 @@ class $4fa36e821943b400$var$Tab extends EventTarget { this.badge = badge; if (badge) { span.innerHTML = badge; - span.classList.remove('hidden'); - } else span.classList.add('hidden'); + span.classList.remove("hidden"); + } else span.classList.add("hidden"); this.emit("badge-changed", badge, this); } getBadge() { diff --git a/dist/electron-tabs.js.map b/dist/electron-tabs.js.map index 1846e7d..6d4ccdd 100644 --- a/dist/electron-tabs.js.map +++ b/dist/electron-tabs.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["src/index.js","src/style.inline.css"],"sourcesContent":["import styles from \"./style.inline.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\nclass TabGroup extends HTMLElement {\n constructor () {\n super();\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n visibilityThreshold: this.getAttribute(\"visibility-threshold\") || 0,\n tabClass: this.getAttribute(\"tab-class\") || \"etabs-tab\",\n viewClass: this.getAttribute(\"view-class\") || \"etabs-view\"\n // TODO: replace this callback\n // ready: args.ready\n };\n\n // Create custom element\n const shadow = this.attachShadow({mode: \"open\"});\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", \"etabs\");\n\n const tabgroup = document.createElement(\"div\");\n tabgroup.setAttribute(\"class\", \"etabs-tabgroup\");\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", \"etabs-tabs\");\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", \"etabs-buttons\");\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", \"etabs-views\");\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n\n this.tabs = [];\n this.newTabId = 0;\n TabGroupPrivate.initNewTabButton.bind(this)();\n TabGroupPrivate.initVisibility.bind(this)();\n if (typeof this.options.ready === \"function\") {\n this.options.ready(this);\n }\n }\n\n addTab (args = this.options.newTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n let id = this.newTabId;\n this.newTabId++;\n let tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab (id) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition (position) {\n let fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition (position) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab () {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab () {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs () {\n return this.tabs.slice();\n }\n\n eachTab (fn) {\n this.getTabs().forEach(fn);\n return this;\n }\n\n getActiveTab () {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n}\n\nconst TabGroupPrivate = {\n initNewTabButton: function () {\n if (!this.options.newTab) return;\n let button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.classList.add(`${this.options.tabClass}-button-new`);\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n },\n\n initVisibility: function () {\n function toggleTabsVisibility(tab, tabGroup) {\n var visibilityThreshold = this.options.visibilityThreshold;\n var el = tabGroup.tabContainer.parentNode;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n },\n\n removeTab: function (tab, triggerEvent) {\n let id = tab.id;\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n this.tabs.splice(i, 1);\n break;\n }\n }\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n return this;\n },\n\n setActiveTab: function (tab) {\n TabGroupPrivate.removeTab.bind(this)(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n return this;\n },\n\n activateRecentTab: function (tab) {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n return this;\n }\n};\n\nclass Tab extends EventTarget {\n constructor (tabGroup, id, args) {\n super();\n this.tabGroup = tabGroup;\n this.id = id;\n this.title = args.title;\n this.badge = args.badge;\n this.iconURL = args.iconURL;\n this.icon = args.icon;\n this.closable = args.closable === false ? false : true;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n this.tabElements = {};\n TabPrivate.initTab.bind(this)();\n TabPrivate.initWebview.bind(this)();\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n }\n }\n\n setTitle (title) {\n if (this.isClosed) return;\n let span = this.tabElements.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle () {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge (badge) {\n if (this.isClosed) return;\n let span = this.tabElements.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge;\n span.classList.remove('hidden');\n } else {\n span.classList.add('hidden');\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge () {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon (iconURL, icon) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n let span = this.tabElements.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon () {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition (newPosition) {\n let tabContainer = this.tabGroup.tabContainer;\n let tabs = tabContainer.children;\n let oldPosition = this.getPosition() - 1;\n\n if (newPosition < 0) {\n newPosition += tabContainer.childElementCount;\n\n if (newPosition < 0) {\n newPosition = 0;\n }\n } else {\n if (newPosition > tabContainer.childElementCount) {\n newPosition = tabContainer.childElementCount;\n }\n\n // Make 1 be leftmost position\n newPosition--;\n }\n\n if (newPosition > oldPosition) {\n newPosition++;\n }\n\n tabContainer.insertBefore(tabs[oldPosition], tabs[newPosition]);\n\n return this;\n }\n\n getPosition (fromRight) {\n let position = 0;\n let tab = this.tab;\n while ((tab = tab.previousSibling) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n if (position >= 0) {\n position++;\n }\n\n return position;\n }\n\n activate () {\n if (this.isClosed) return;\n let activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.tab.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n TabGroupPrivate.setActiveTab.bind(this.tabGroup)(this);\n this.tab.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.tab.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide () {\n return this.show(false);\n }\n\n flash (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.tab.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash () {\n return this.flash(false);\n }\n\n hasClass (classname) {\n return this.tab.classList.contains(classname);\n }\n\n close (force) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n let tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.tab);\n tabGroup.viewContainer.removeChild(this.webview);\n let activeTab = this.tabGroup.getActiveTab();\n TabGroupPrivate.removeTab.bind(tabGroup)(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n TabGroupPrivate.activateRecentTab.bind(tabGroup)();\n }\n }\n}\n\nconst TabPrivate = {\n initTab: function () {\n let tabClass = this.tabGroup.options.tabClass;\n\n // Create tab element\n let tab = this.tab = document.createElement(\"div\");\n tab.classList.add(tabClass);\n for (let el of [\"icon\", \"title\", \"buttons\", \"badge\"]) {\n let span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${tabClass}-${el}`);\n this.tabElements[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n TabPrivate.initTabButtons.bind(this)();\n TabPrivate.initTabClickHandler.bind(this)();\n\n this.tabGroup.tabContainer.appendChild(this.tab);\n },\n\n initTabButtons: function () {\n let container = this.tabElements.buttons;\n let tabClass = this.tabGroup.options.tabClass;\n if (this.closable) {\n let button = container.appendChild(document.createElement(\"button\"));\n button.classList.add(`${tabClass}-button-close`);\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n },\n\n initTabClickHandler: function () {\n // Mouse up\n const tabClickHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.tab.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if (e.target.matches(\"button\")) return;\n this.activate();\n }\n };\n this.tab.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n },\n\n initWebview: function () {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function (e) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function (e) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(this.tabGroup.options.viewClass);\n if (this.webviewAttributes) {\n let attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n};\n\n/**\n * This makes the browser EventTarget API work similar to EventEmitter\n */\n const eventEmitterMixin = {\n emit (type, ...args) {\n this.dispatchEvent(new CustomEvent(type, { detail: args }));\n },\n\n on (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail));\n },\n\n once (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail), { once: true });\n }\n};\n\nObject.assign(TabGroup.prototype, eventEmitterMixin);\nObject.assign(Tab.prototype, eventEmitterMixin);\n\ncustomElements.define(\"tab-group\", TabGroup);\n",".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tabs {\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n float: left;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\nwebview.visible {\n visibility: visible;\n}\n"],"names":[],"version":3,"file":"electron-tabs.js.map"} \ No newline at end of file +{"mappings":"ACAA,IAAA,wCAAs2E,GAAv1E,u1EAAu1E;;ADAt2E;AAEA,IAAI,CAAC,QAAQ,EACX,MAAM,KAAK,CAAC,yDAAyD,CAAC,CAAC;AAGzE,MAAM,8BAAQ,SAAS,WAAW;IAChC,aAAe;QACb,KAAK,EAAE,CAAC;QAER,UAAU;QACV,IAAI,CAAC,OAAO,GAAG;YACb,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,QAAQ;YACnE,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,UAAU;YACxE,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC;YACnE,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,WAAW;YACvD,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,YAAY;SAG3D,CAAC;QAEF,wBAAwB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YAAC,IAAI,EAAE,MAAM;SAAC,CAAC,AAAC;QAEjD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QAC9C,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QAC/C,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACjD,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QACnD,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjD,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QACtD,eAAe,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACvD,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QACpD,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACnD,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,AAAC;QAC9C,KAAK,CAAC,WAAW,GAAG,wCAAM,CAAC;QAE3B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE5B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,qCAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,qCAAe,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU,EAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAE5B;IAED,SAAS,CAAE,MAAM,EAAE;QACjB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;KAC9B;IAED,MAAM,CAAE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAClC,IAAI,OAAO,IAAI,KAAK,UAAU,EAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpB,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,AAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,GAAG,GAAG,IAAI,yBAAG,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,AAAC;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,oEAAoE;QACpE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EACtB,GAAG,CAAC,QAAQ,EAAE,CAAC;QAEjB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,CAAE,EAAE,EAAE;QACV,IAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAE;YACvB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EACxB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAEvB;QACD,OAAO,IAAI,CAAC;KACb;IAED,gBAAgB,CAAE,QAAQ,EAAE;QAC1B,IAAI,SAAS,GAAG,QAAQ,GAAG,CAAC,AAAC;QAC7B,IAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAE;YACvB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,QAAQ,EAClD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAEvB;QACD,OAAO,IAAI,CAAC;KACb;IAED,mBAAmB,CAAE,QAAQ,EAAE;QAC7B,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC;QACxD,IAAI,QAAQ,IAAI,CAAC,EACf,OAAO,IAAI,CAAC;QAEd,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KACxC;IAED,UAAU,GAAI;QACZ,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;KACpC;IAED,cAAc,GAAI;QAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;KACrC;IAED,OAAO,GAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KAC1B;IAED,OAAO,CAAE,EAAE,EAAE;QACX,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;KACb;IAED,YAAY,GAAI;QACd,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACrB;CACF;AAED,MAAM,qCAAe,GAAG;IACtB,gBAAgB,EAAE,WAAY;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO;QACjC,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,AAAC;QAChF,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;KAC5E;IAED,cAAc,EAAE,WAAY;QAC1B,SAAS,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE;YAC3C,IAAI,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,AAAC;YAC3D,IAAI,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,AAAC;YAC1C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,mBAAmB,EACzC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;iBAE5B,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAElC;QAED,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;KAC9C;IAED,SAAS,EAAE,SAAU,GAAG,EAAE,YAAY,EAAE;QACtC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,AAAC;QAChB,IAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CACrB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,MAAM;SACP;QAEH,IAAI,YAAY,EACd,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC;KACb;IAED,YAAY,EAAE,SAAU,GAAG,EAAE;QAC3B,qCAAe,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;KACb;IAED,iBAAiB,EAAE,SAAU,GAAG,EAAE;QAChC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE1B,OAAO,IAAI,CAAC;KACb;CACF,AAAC;AAEF,MAAM,yBAAG,SAAS,WAAW;IAC3B,YAAa,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAE;QAC/B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;QACvD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACtD,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,gCAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,gCAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QAEd,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,EAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAEpB;IAED,QAAQ,CAAE,KAAK,EAAE;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,AAAC;QAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;KACb;IAED,QAAQ,GAAI;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,QAAQ,CAAE,KAAK,EAAE;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,AAAC;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACjC,MACC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAG/B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KACzC;IAED,QAAQ,GAAI;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,OAAO,CAAE,OAAO,EAAE,IAAI,EAAE;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,AAAC;QACjC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;SAC1C,MAAM,IAAI,IAAI,EAAE;YACf,IAAI,CAAC,SAAS,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACvC;QAED,OAAO,IAAI,CAAC;KACb;IAED,OAAO,GAAI;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAED,WAAW,CAAE,WAAW,EAAE;QACxB,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,AAAC;QAC9C,IAAI,IAAI,GAAG,YAAY,CAAC,QAAQ,AAAC;QACjC,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,AAAC;QAEzC,IAAI,WAAW,GAAG,CAAC,EAAE;YACnB,WAAW,IAAI,YAAY,CAAC,iBAAiB,CAAC;YAE9C,IAAI,WAAW,GAAG,CAAC,EACjB,WAAW,GAAG,CAAC,CAAC;SAEnB,MAAM;YACL,IAAI,WAAW,GAAG,YAAY,CAAC,iBAAiB,EAC9C,WAAW,GAAG,YAAY,CAAC,iBAAiB,CAAC;YAG/C,8BAA8B;YAC9B,WAAW,EAAE,CAAC;SACf;QAED,IAAI,WAAW,GAAG,WAAW,EAC3B,WAAW,EAAE,CAAC;QAGhB,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAEhE,OAAO,IAAI,CAAC;KACb;IAED,WAAW,CAAE,SAAS,EAAE;QACtB,IAAI,QAAQ,GAAG,CAAC,AAAC;QACjB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,AAAC;QACnB,MAAO,AAAC,CAAA,GAAG,GAAG,GAAG,CAAC,eAAe,CAAA,IAAK,IAAI,CAAE,QAAQ,EAAE,CAAC;QAEvD,IAAI,SAAS,KAAK,IAAI,EACpB,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC;QAG3D,IAAI,QAAQ,IAAI,CAAC,EACf,QAAQ,EAAE,CAAC;QAGb,OAAO,QAAQ,CAAC;KACjB;IAED,QAAQ,GAAI;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,AAAC;QAC7C,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9C,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;SACvC;QACD,qCAAe,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAE,IAAI,EAAE;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAC5B,MAAM;YACL,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC3B;QACD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,GAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzB;IAED,KAAK,CAAE,IAAI,EAAE;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAC1B,MAAM;YACL,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC;KACb;IAED,OAAO,GAAI;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC1B;IAED,QAAQ,CAAE,SAAS,EAAE;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KAC/C;IAED,KAAK,CAAE,KAAK,EAAE;QACZ,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,AAAC;QAC9C,MAAM,KAAK,GAAG,IAAM,eAAe,CAAC,KAAK,EAAE;QAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAElC,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,AAAC;QAC3C,IAAI,IAAI,CAAC,QAAQ,IAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAK,WAAW,CAAC,OAAO,EAAE,OAAO;QAE/E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,AAAC;QAC7B,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,AAAC;QAC7C,qCAAe,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEzB,IAAI,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAC1B,qCAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;KAEtD;CACF;AAED,MAAM,gCAAU,GAAG;IACjB,OAAO,EAAE,WAAY;QACnB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,AAAC;QAE9C,qBAAqB;QACrB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QACnD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5B,KAAK,IAAI,EAAE,IAAI;YAAC,MAAM;YAAE,OAAO;YAAE,SAAS;YAAE,OAAO;SAAC,CAAE;YACpD,IAAI,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,AAAC;YAC3D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;SAC7B;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,gCAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,gCAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAClD;IAED,cAAc,EAAE,WAAY;QAC1B,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,AAAC;QACzC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,AAAC;QAC9C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,AAAC;YACrE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC;YACzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;SACvE;KACF;IAED,mBAAmB,EAAE,WAAY;QAC/B,WAAW;QACX,MAAM,eAAe,GAAG,SAAU,CAAC,EAAE;YACnC,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;YAC1B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EACf,IAAI,CAAC,KAAK,EAAE,CAAC;SAEhB,AAAC;QACF,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACxE,aAAa;QACb,MAAM,mBAAmB,GAAG,SAAU,CAAC,EAAE;YACvC,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;YAC1B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;gBACjB,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO;gBACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;aACjB;SACF,AAAC;QACF,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;KAC/E;IAED,WAAW,EAAE,WAAY;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,AAAC;QAEjE,MAAM,8BAA8B,GAAG,SAAU,CAAC,EAAE;YAClD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;SAClC,AAAC;QAEF,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAEnG,MAAM,yBAAyB,GAAG,SAAU,CAAC,EAAE;YAC7C,8EAA8E;YAC9E,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;SACtC,AAAC;QAEF,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAExF,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,AAAC;YACnC,IAAK,IAAI,GAAG,IAAI,KAAK,CAAE;gBACrB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,AAAC;gBACxB,IAAI,IAAI,KAAK,KAAK,EAAE,SAAS;gBAC7B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aACtC;SACF;QAED,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvD;CACF,AAAC;AAEF;;GAEG,CACH,MAAM,uCAAiB,GAAG;IACxB,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE;QACnB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE;YAAE,MAAM,EAAE,IAAI;SAAE,CAAC,CAAC,CAAC;KAC7D;IAED,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACZ,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EA9djC,QA8dmC,MAAM,CAAA,EAAE,GAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,CAAC;KACrE;IAED,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QACd,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAlejC,QAkemC,MAAM,CAAA,EAAE,GAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QAAA,EAAE;YAAE,IAAI,EAAE,IAAI;SAAE,CAAC,CAAC;KACrF;CACF,AAAC;AAEF,MAAM,CAAC,MAAM,CAAC,8BAAQ,CAAC,SAAS,EAAE,uCAAiB,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,CAAC,yBAAG,CAAC,SAAS,EAAE,uCAAiB,CAAC,CAAC;AAEhD,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,8BAAQ,CAAC,CAAC","sources":["src/index.js","src/style.inline.css"],"sourcesContent":["import styles from \"./style.inline.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\nclass TabGroup extends HTMLElement {\n constructor () {\n super();\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n visibilityThreshold: this.getAttribute(\"visibility-threshold\") || 0,\n tabClass: this.getAttribute(\"tab-class\") || \"etabs-tab\",\n viewClass: this.getAttribute(\"view-class\") || \"etabs-view\"\n // TODO: replace this callback\n // ready: args.ready\n };\n\n // Create custom element\n const shadow = this.attachShadow({mode: \"open\"});\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", \"etabs\");\n\n const tabgroup = document.createElement(\"div\");\n tabgroup.setAttribute(\"class\", \"etabs-tabgroup\");\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", \"etabs-tabs\");\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", \"etabs-buttons\");\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", \"etabs-views\");\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n\n this.tabs = [];\n this.newTabId = 0;\n TabGroupPrivate.initNewTabButton.bind(this)();\n TabGroupPrivate.initVisibility.bind(this)();\n if (typeof this.options.ready === \"function\") {\n this.options.ready(this);\n }\n }\n\n setNewTab (newTab) {\n this.options.newTab = newTab;\n }\n\n addTab (args = this.options.newTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n let id = this.newTabId;\n this.newTabId++;\n let tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab (id) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition (position) {\n let fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition (position) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab () {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab () {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs () {\n return this.tabs.slice();\n }\n\n eachTab (fn) {\n this.getTabs().forEach(fn);\n return this;\n }\n\n getActiveTab () {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n}\n\nconst TabGroupPrivate = {\n initNewTabButton: function () {\n if (!this.options.newTab) return;\n let button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.classList.add(`${this.options.tabClass}-button-new`);\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n },\n\n initVisibility: function () {\n function toggleTabsVisibility(tab, tabGroup) {\n var visibilityThreshold = this.options.visibilityThreshold;\n var el = tabGroup.tabContainer.parentNode;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n },\n\n removeTab: function (tab, triggerEvent) {\n let id = tab.id;\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n this.tabs.splice(i, 1);\n break;\n }\n }\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n return this;\n },\n\n setActiveTab: function (tab) {\n TabGroupPrivate.removeTab.bind(this)(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n return this;\n },\n\n activateRecentTab: function (tab) {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n return this;\n }\n};\n\nclass Tab extends EventTarget {\n constructor (tabGroup, id, args) {\n super();\n this.tabGroup = tabGroup;\n this.id = id;\n this.title = args.title;\n this.badge = args.badge;\n this.iconURL = args.iconURL;\n this.icon = args.icon;\n this.closable = args.closable === false ? false : true;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n this.tabElements = {};\n TabPrivate.initTab.bind(this)();\n TabPrivate.initWebview.bind(this)();\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n }\n }\n\n setTitle (title) {\n if (this.isClosed) return;\n let span = this.tabElements.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle () {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge (badge) {\n if (this.isClosed) return;\n let span = this.tabElements.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge;\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge () {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon (iconURL, icon) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n let span = this.tabElements.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon () {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition (newPosition) {\n let tabContainer = this.tabGroup.tabContainer;\n let tabs = tabContainer.children;\n let oldPosition = this.getPosition() - 1;\n\n if (newPosition < 0) {\n newPosition += tabContainer.childElementCount;\n\n if (newPosition < 0) {\n newPosition = 0;\n }\n } else {\n if (newPosition > tabContainer.childElementCount) {\n newPosition = tabContainer.childElementCount;\n }\n\n // Make 1 be leftmost position\n newPosition--;\n }\n\n if (newPosition > oldPosition) {\n newPosition++;\n }\n\n tabContainer.insertBefore(tabs[oldPosition], tabs[newPosition]);\n\n return this;\n }\n\n getPosition (fromRight) {\n let position = 0;\n let tab = this.tab;\n while ((tab = tab.previousSibling) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n if (position >= 0) {\n position++;\n }\n\n return position;\n }\n\n activate () {\n if (this.isClosed) return;\n let activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.tab.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n TabGroupPrivate.setActiveTab.bind(this.tabGroup)(this);\n this.tab.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.tab.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide () {\n return this.show(false);\n }\n\n flash (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.tab.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash () {\n return this.flash(false);\n }\n\n hasClass (classname) {\n return this.tab.classList.contains(classname);\n }\n\n close (force) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n let tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.tab);\n tabGroup.viewContainer.removeChild(this.webview);\n let activeTab = this.tabGroup.getActiveTab();\n TabGroupPrivate.removeTab.bind(tabGroup)(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n TabGroupPrivate.activateRecentTab.bind(tabGroup)();\n }\n }\n}\n\nconst TabPrivate = {\n initTab: function () {\n let tabClass = this.tabGroup.options.tabClass;\n\n // Create tab element\n let tab = this.tab = document.createElement(\"div\");\n tab.classList.add(tabClass);\n for (let el of [\"icon\", \"title\", \"buttons\", \"badge\"]) {\n let span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${tabClass}-${el}`);\n this.tabElements[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n TabPrivate.initTabButtons.bind(this)();\n TabPrivate.initTabClickHandler.bind(this)();\n\n this.tabGroup.tabContainer.appendChild(this.tab);\n },\n\n initTabButtons: function () {\n let container = this.tabElements.buttons;\n let tabClass = this.tabGroup.options.tabClass;\n if (this.closable) {\n let button = container.appendChild(document.createElement(\"button\"));\n button.classList.add(`${tabClass}-button-close`);\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n },\n\n initTabClickHandler: function () {\n // Mouse up\n const tabClickHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.tab.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if (e.target.matches(\"button\")) return;\n this.activate();\n }\n };\n this.tab.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n },\n\n initWebview: function () {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function (e) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function (e) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(this.tabGroup.options.viewClass);\n if (this.webviewAttributes) {\n let attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n};\n\n/**\n * This makes the browser EventTarget API work similar to EventEmitter\n */\nconst eventEmitterMixin = {\n emit (type, ...args) {\n this.dispatchEvent(new CustomEvent(type, { detail: args }));\n },\n\n on (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail));\n },\n\n once (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail), { once: true });\n }\n};\n\nObject.assign(TabGroup.prototype, eventEmitterMixin);\nObject.assign(Tab.prototype, eventEmitterMixin);\n\ncustomElements.define(\"tab-group\", TabGroup);\n",".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n"],"names":[],"version":3,"file":"electron-tabs.js.map"} \ No newline at end of file diff --git a/src/index.js b/src/index.js index bada450..721c507 100644 --- a/src/index.js +++ b/src/index.js @@ -59,6 +59,10 @@ class TabGroup extends HTMLElement { } } + setNewTab (newTab) { + this.options.newTab = newTab; + } + addTab (args = this.options.newTab) { if (typeof args === "function") { args = args(this); From 3fe56e56ba7a34a4a5be636a777d4205cb00bebe Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Mon, 23 May 2022 23:18:52 +0200 Subject: [PATCH 06/35] Fix new tab feature --- demo/electron-tabs.html | 11 +++++------ dist/electron-tabs.js | 17 +++++++++++------ dist/electron-tabs.js.map | 2 +- src/index.js | 12 +++++++----- src/style.inline.css | 1 + 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/demo/electron-tabs.html b/demo/electron-tabs.html index 2850c97..d85f681 100644 --- a/demo/electron-tabs.html +++ b/demo/electron-tabs.html @@ -6,16 +6,15 @@ - + diff --git a/dist/electron-tabs.js b/dist/electron-tabs.js index 4304237..ff70bff 100644 --- a/dist/electron-tabs.js +++ b/dist/electron-tabs.js @@ -1,4 +1,4 @@ -var $5580883c37846f86$export$2e2bcd8739ae039 = ".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n"; +var $5580883c37846f86$export$2e2bcd8739ae039 = ".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n/* TODO: fix it */\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n"; if (!document) throw Error("electron-tabs module must be called in renderer process"); @@ -11,7 +11,12 @@ class $4fa36e821943b400$var$TabGroup extends HTMLElement { newTabButtonText: this.getAttribute("new-tab-button-text") || "+", visibilityThreshold: this.getAttribute("visibility-threshold") || 0, tabClass: this.getAttribute("tab-class") || "etabs-tab", - viewClass: this.getAttribute("view-class") || "etabs-view" + viewClass: this.getAttribute("view-class") || "etabs-view", + newTabButton: this.getAttribute("new-tab-button") || false, + defaultTab: { + title: "New Tab", + active: true + } }; // Create custom element const shadow = this.attachShadow({ @@ -44,10 +49,10 @@ class $4fa36e821943b400$var$TabGroup extends HTMLElement { $4fa36e821943b400$var$TabGroupPrivate.initVisibility.bind(this)(); if (typeof this.options.ready === "function") this.options.ready(this); } - setNewTab(newTab) { - this.options.newTab = newTab; + setDefaultTab(tab) { + this.options.defaultTab = tab; } - addTab(args = this.options.newTab) { + addTab(args = this.options.defaultTab) { if (typeof args === "function") args = args(this); let id = this.newTabId; this.newTabId++; @@ -96,7 +101,7 @@ class $4fa36e821943b400$var$TabGroup extends HTMLElement { } const $4fa36e821943b400$var$TabGroupPrivate = { initNewTabButton: function() { - if (!this.options.newTab) return; + if (!this.options.newTabButton) return; let button = this.buttonContainer.appendChild(document.createElement("button")); button.classList.add(`${this.options.tabClass}-button-new`); button.innerHTML = this.options.newTabButtonText; diff --git a/dist/electron-tabs.js.map b/dist/electron-tabs.js.map index 6d4ccdd..5ba045c 100644 --- a/dist/electron-tabs.js.map +++ b/dist/electron-tabs.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["src/index.js","src/style.inline.css"],"sourcesContent":["import styles from \"./style.inline.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\nclass TabGroup extends HTMLElement {\n constructor () {\n super();\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n visibilityThreshold: this.getAttribute(\"visibility-threshold\") || 0,\n tabClass: this.getAttribute(\"tab-class\") || \"etabs-tab\",\n viewClass: this.getAttribute(\"view-class\") || \"etabs-view\"\n // TODO: replace this callback\n // ready: args.ready\n };\n\n // Create custom element\n const shadow = this.attachShadow({mode: \"open\"});\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", \"etabs\");\n\n const tabgroup = document.createElement(\"div\");\n tabgroup.setAttribute(\"class\", \"etabs-tabgroup\");\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", \"etabs-tabs\");\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", \"etabs-buttons\");\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", \"etabs-views\");\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n\n this.tabs = [];\n this.newTabId = 0;\n TabGroupPrivate.initNewTabButton.bind(this)();\n TabGroupPrivate.initVisibility.bind(this)();\n if (typeof this.options.ready === \"function\") {\n this.options.ready(this);\n }\n }\n\n setNewTab (newTab) {\n this.options.newTab = newTab;\n }\n\n addTab (args = this.options.newTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n let id = this.newTabId;\n this.newTabId++;\n let tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab (id) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition (position) {\n let fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition (position) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab () {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab () {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs () {\n return this.tabs.slice();\n }\n\n eachTab (fn) {\n this.getTabs().forEach(fn);\n return this;\n }\n\n getActiveTab () {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n}\n\nconst TabGroupPrivate = {\n initNewTabButton: function () {\n if (!this.options.newTab) return;\n let button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.classList.add(`${this.options.tabClass}-button-new`);\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n },\n\n initVisibility: function () {\n function toggleTabsVisibility(tab, tabGroup) {\n var visibilityThreshold = this.options.visibilityThreshold;\n var el = tabGroup.tabContainer.parentNode;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n },\n\n removeTab: function (tab, triggerEvent) {\n let id = tab.id;\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n this.tabs.splice(i, 1);\n break;\n }\n }\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n return this;\n },\n\n setActiveTab: function (tab) {\n TabGroupPrivate.removeTab.bind(this)(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n return this;\n },\n\n activateRecentTab: function (tab) {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n return this;\n }\n};\n\nclass Tab extends EventTarget {\n constructor (tabGroup, id, args) {\n super();\n this.tabGroup = tabGroup;\n this.id = id;\n this.title = args.title;\n this.badge = args.badge;\n this.iconURL = args.iconURL;\n this.icon = args.icon;\n this.closable = args.closable === false ? false : true;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n this.tabElements = {};\n TabPrivate.initTab.bind(this)();\n TabPrivate.initWebview.bind(this)();\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n }\n }\n\n setTitle (title) {\n if (this.isClosed) return;\n let span = this.tabElements.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle () {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge (badge) {\n if (this.isClosed) return;\n let span = this.tabElements.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge;\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge () {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon (iconURL, icon) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n let span = this.tabElements.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon () {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition (newPosition) {\n let tabContainer = this.tabGroup.tabContainer;\n let tabs = tabContainer.children;\n let oldPosition = this.getPosition() - 1;\n\n if (newPosition < 0) {\n newPosition += tabContainer.childElementCount;\n\n if (newPosition < 0) {\n newPosition = 0;\n }\n } else {\n if (newPosition > tabContainer.childElementCount) {\n newPosition = tabContainer.childElementCount;\n }\n\n // Make 1 be leftmost position\n newPosition--;\n }\n\n if (newPosition > oldPosition) {\n newPosition++;\n }\n\n tabContainer.insertBefore(tabs[oldPosition], tabs[newPosition]);\n\n return this;\n }\n\n getPosition (fromRight) {\n let position = 0;\n let tab = this.tab;\n while ((tab = tab.previousSibling) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n if (position >= 0) {\n position++;\n }\n\n return position;\n }\n\n activate () {\n if (this.isClosed) return;\n let activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.tab.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n TabGroupPrivate.setActiveTab.bind(this.tabGroup)(this);\n this.tab.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.tab.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide () {\n return this.show(false);\n }\n\n flash (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.tab.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash () {\n return this.flash(false);\n }\n\n hasClass (classname) {\n return this.tab.classList.contains(classname);\n }\n\n close (force) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n let tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.tab);\n tabGroup.viewContainer.removeChild(this.webview);\n let activeTab = this.tabGroup.getActiveTab();\n TabGroupPrivate.removeTab.bind(tabGroup)(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n TabGroupPrivate.activateRecentTab.bind(tabGroup)();\n }\n }\n}\n\nconst TabPrivate = {\n initTab: function () {\n let tabClass = this.tabGroup.options.tabClass;\n\n // Create tab element\n let tab = this.tab = document.createElement(\"div\");\n tab.classList.add(tabClass);\n for (let el of [\"icon\", \"title\", \"buttons\", \"badge\"]) {\n let span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${tabClass}-${el}`);\n this.tabElements[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n TabPrivate.initTabButtons.bind(this)();\n TabPrivate.initTabClickHandler.bind(this)();\n\n this.tabGroup.tabContainer.appendChild(this.tab);\n },\n\n initTabButtons: function () {\n let container = this.tabElements.buttons;\n let tabClass = this.tabGroup.options.tabClass;\n if (this.closable) {\n let button = container.appendChild(document.createElement(\"button\"));\n button.classList.add(`${tabClass}-button-close`);\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n },\n\n initTabClickHandler: function () {\n // Mouse up\n const tabClickHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.tab.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if (e.target.matches(\"button\")) return;\n this.activate();\n }\n };\n this.tab.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n },\n\n initWebview: function () {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function (e) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function (e) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(this.tabGroup.options.viewClass);\n if (this.webviewAttributes) {\n let attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n};\n\n/**\n * This makes the browser EventTarget API work similar to EventEmitter\n */\nconst eventEmitterMixin = {\n emit (type, ...args) {\n this.dispatchEvent(new CustomEvent(type, { detail: args }));\n },\n\n on (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail));\n },\n\n once (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail), { once: true });\n }\n};\n\nObject.assign(TabGroup.prototype, eventEmitterMixin);\nObject.assign(Tab.prototype, eventEmitterMixin);\n\ncustomElements.define(\"tab-group\", TabGroup);\n",".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n"],"names":[],"version":3,"file":"electron-tabs.js.map"} \ No newline at end of file +{"mappings":"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","sources":["src/index.js","src/style.inline.css"],"sourcesContent":["import styles from \"./style.inline.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\nclass TabGroup extends HTMLElement {\n constructor () {\n super();\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n visibilityThreshold: this.getAttribute(\"visibility-threshold\") || 0,\n tabClass: this.getAttribute(\"tab-class\") || \"etabs-tab\",\n viewClass: this.getAttribute(\"view-class\") || \"etabs-view\",\n newTabButton: this.getAttribute(\"new-tab-button\") || false,\n defaultTab: { title: \"New Tab\", active: true }\n // TODO: replace this callback\n // ready: args.ready\n };\n\n // Create custom element\n const shadow = this.attachShadow({mode: \"open\"});\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", \"etabs\");\n\n const tabgroup = document.createElement(\"div\");\n tabgroup.setAttribute(\"class\", \"etabs-tabgroup\");\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", \"etabs-tabs\");\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", \"etabs-buttons\");\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", \"etabs-views\");\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n\n this.tabs = [];\n this.newTabId = 0;\n TabGroupPrivate.initNewTabButton.bind(this)();\n TabGroupPrivate.initVisibility.bind(this)();\n if (typeof this.options.ready === \"function\") {\n this.options.ready(this);\n }\n }\n\n setDefaultTab (tab) {\n this.options.defaultTab = tab;\n }\n\n addTab (args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n let id = this.newTabId;\n this.newTabId++;\n let tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab (id) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition (position) {\n let fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition (position) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab () {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab () {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs () {\n return this.tabs.slice();\n }\n\n eachTab (fn) {\n this.getTabs().forEach(fn);\n return this;\n }\n\n getActiveTab () {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n}\n\nconst TabGroupPrivate = {\n initNewTabButton: function () {\n if (!this.options.newTabButton) return;\n let button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.classList.add(`${this.options.tabClass}-button-new`);\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n },\n\n initVisibility: function () {\n function toggleTabsVisibility(tab, tabGroup) {\n var visibilityThreshold = this.options.visibilityThreshold;\n var el = tabGroup.tabContainer.parentNode;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n },\n\n removeTab: function (tab, triggerEvent) {\n let id = tab.id;\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n this.tabs.splice(i, 1);\n break;\n }\n }\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n return this;\n },\n\n setActiveTab: function (tab) {\n TabGroupPrivate.removeTab.bind(this)(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n return this;\n },\n\n activateRecentTab: function (tab) {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n return this;\n }\n};\n\nclass Tab extends EventTarget {\n constructor (tabGroup, id, args) {\n super();\n this.tabGroup = tabGroup;\n this.id = id;\n this.title = args.title;\n this.badge = args.badge;\n this.iconURL = args.iconURL;\n this.icon = args.icon;\n this.closable = args.closable === false ? false : true;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n this.tabElements = {};\n TabPrivate.initTab.bind(this)();\n TabPrivate.initWebview.bind(this)();\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n }\n }\n\n setTitle (title) {\n if (this.isClosed) return;\n let span = this.tabElements.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle () {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge (badge) {\n if (this.isClosed) return;\n let span = this.tabElements.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge;\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge () {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon (iconURL, icon) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n let span = this.tabElements.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon () {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition (newPosition) {\n let tabContainer = this.tabGroup.tabContainer;\n let tabs = tabContainer.children;\n let oldPosition = this.getPosition() - 1;\n\n if (newPosition < 0) {\n newPosition += tabContainer.childElementCount;\n\n if (newPosition < 0) {\n newPosition = 0;\n }\n } else {\n if (newPosition > tabContainer.childElementCount) {\n newPosition = tabContainer.childElementCount;\n }\n\n // Make 1 be leftmost position\n newPosition--;\n }\n\n if (newPosition > oldPosition) {\n newPosition++;\n }\n\n tabContainer.insertBefore(tabs[oldPosition], tabs[newPosition]);\n\n return this;\n }\n\n getPosition (fromRight) {\n let position = 0;\n let tab = this.tab;\n while ((tab = tab.previousSibling) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n if (position >= 0) {\n position++;\n }\n\n return position;\n }\n\n activate () {\n if (this.isClosed) return;\n let activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.tab.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n TabGroupPrivate.setActiveTab.bind(this.tabGroup)(this);\n this.tab.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.tab.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide () {\n return this.show(false);\n }\n\n flash (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.tab.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash () {\n return this.flash(false);\n }\n\n hasClass (classname) {\n return this.tab.classList.contains(classname);\n }\n\n close (force) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n let tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.tab);\n tabGroup.viewContainer.removeChild(this.webview);\n let activeTab = this.tabGroup.getActiveTab();\n TabGroupPrivate.removeTab.bind(tabGroup)(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n TabGroupPrivate.activateRecentTab.bind(tabGroup)();\n }\n }\n}\n\nconst TabPrivate = {\n initTab: function () {\n let tabClass = this.tabGroup.options.tabClass;\n\n // Create tab element\n let tab = this.tab = document.createElement(\"div\");\n tab.classList.add(tabClass);\n for (let el of [\"icon\", \"title\", \"buttons\", \"badge\"]) {\n let span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${tabClass}-${el}`);\n this.tabElements[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n TabPrivate.initTabButtons.bind(this)();\n TabPrivate.initTabClickHandler.bind(this)();\n\n this.tabGroup.tabContainer.appendChild(this.tab);\n },\n\n initTabButtons: function () {\n let container = this.tabElements.buttons;\n let tabClass = this.tabGroup.options.tabClass;\n if (this.closable) {\n let button = container.appendChild(document.createElement(\"button\"));\n button.classList.add(`${tabClass}-button-close`);\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n },\n\n initTabClickHandler: function () {\n // Mouse up\n const tabClickHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.tab.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if (e.target.matches(\"button\")) return;\n this.activate();\n }\n };\n this.tab.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n },\n\n initWebview: function () {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function (e) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function (e) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(this.tabGroup.options.viewClass);\n if (this.webviewAttributes) {\n let attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n};\n\n/**\n * This makes the browser EventTarget API work similar to EventEmitter\n */\nconst eventEmitterMixin = {\n emit (type, ...args) {\n this.dispatchEvent(new CustomEvent(type, { detail: args }));\n },\n\n on (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail));\n },\n\n once (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail), { once: true });\n }\n};\n\nObject.assign(TabGroup.prototype, eventEmitterMixin);\nObject.assign(Tab.prototype, eventEmitterMixin);\n\ncustomElements.define(\"tab-group\", TabGroup);\n",".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n/* TODO: fix it */\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n"],"names":[],"version":3,"file":"electron-tabs.js.map","sourceRoot":"../"} \ No newline at end of file diff --git a/src/index.js b/src/index.js index 721c507..916376b 100644 --- a/src/index.js +++ b/src/index.js @@ -14,7 +14,9 @@ class TabGroup extends HTMLElement { newTabButtonText: this.getAttribute("new-tab-button-text") || "+", visibilityThreshold: this.getAttribute("visibility-threshold") || 0, tabClass: this.getAttribute("tab-class") || "etabs-tab", - viewClass: this.getAttribute("view-class") || "etabs-view" + viewClass: this.getAttribute("view-class") || "etabs-view", + newTabButton: this.getAttribute("new-tab-button") || false, + defaultTab: { title: "New Tab", active: true } // TODO: replace this callback // ready: args.ready }; @@ -59,11 +61,11 @@ class TabGroup extends HTMLElement { } } - setNewTab (newTab) { - this.options.newTab = newTab; + setDefaultTab (tab) { + this.options.defaultTab = tab; } - addTab (args = this.options.newTab) { + addTab (args = this.options.defaultTab) { if (typeof args === "function") { args = args(this); } @@ -131,7 +133,7 @@ class TabGroup extends HTMLElement { const TabGroupPrivate = { initNewTabButton: function () { - if (!this.options.newTab) return; + if (!this.options.newTabButton) return; let button = this.buttonContainer.appendChild(document.createElement("button")); button.classList.add(`${this.options.tabClass}-button-new`); button.innerHTML = this.options.newTabButtonText; diff --git a/src/style.inline.css b/src/style.inline.css index ca1e0af..a626828 100644 --- a/src/style.inline.css +++ b/src/style.inline.css @@ -51,6 +51,7 @@ background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%); } +/* TODO: fix it */ .etabs-buttons { float: left; } From 7f4e2e91ddba1e62a1dac36a1d9714c66c76e6ad Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Mon, 23 May 2022 23:56:22 +0200 Subject: [PATCH 07/35] Change demo --- demo/electron-tabs.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/demo/electron-tabs.html b/demo/electron-tabs.html index d85f681..42aa2c7 100644 --- a/demo/electron-tabs.html +++ b/demo/electron-tabs.html @@ -14,7 +14,8 @@ tabGroup.setDefaultTab({ title: "Wikipedia", - src: "https://www.wikipedia.org/" + src: "https://www.wikipedia.org/", + active: true }); tabGroup.addTab({ @@ -29,8 +30,6 @@ active: true }); - tabGroup.addTab(); - From 6d99c03ac6dd4eb98fb09c004781a513878fb484 Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Mon, 23 May 2022 23:56:31 +0200 Subject: [PATCH 08/35] Improve tab styles --- dist/electron-tabs.js | 2 +- dist/electron-tabs.js.map | 2 +- src/style.inline.css | 111 +++++++++++++++++++++++++------------- 3 files changed, 75 insertions(+), 40 deletions(-) diff --git a/dist/electron-tabs.js b/dist/electron-tabs.js index ff70bff..02836c8 100644 --- a/dist/electron-tabs.js +++ b/dist/electron-tabs.js @@ -1,4 +1,4 @@ -var $5580883c37846f86$export$2e2bcd8739ae039 = ".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n/* TODO: fix it */\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n"; +var $5580883c37846f86$export$2e2bcd8739ae039 = "/* TODO: use custom properties */\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n\n.etabs {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n text-rendering: optimizeLegibility;\n font-feature-settings: 'liga', 'clig', 'kern';\n}\n\n.etabs-tabgroup {\n width: 100%;\n height: 32px;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n background: #E7EAED;\n box-shadow: inset 0 -1px #DADCE0;\n border-top: 1px solid #DADCE0;\n}\n\n.etabs-tabgroup.visible {\n display: flex;\n}\n\n.etabs-tabs {\n height: 100%;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n height: 100%;\n background: #E7EAED;\n color: #696A6C;\n padding: 5px 9px;\n transition: background-color 150ms ease-out;\n box-shadow: inset 0 -1px #DADCE0;\n font: caption;\n font-size: 13px;\n cursor: pointer;\n box-sizing: border-box;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n cursor: grab;\n\tborder: none;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n box-shadow: none;\n\tborder-left: 1px solid #DADCE0;\n\tborder-right: 1px solid #DADCE0;\n\tpadding-left: 8px;\n\tpadding-right: 8px;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n.etabs-tab.visible:not(.active)+.etabs-tab.visible:not(.active) {\n\tborder-left: 1px solid #B4B6B8;\n\tpadding-left: 8px;\n}\n\n.etabs-tab:not(.active):hover {\n\tbackground: #F1F3F4;\n}\n\n.etabs-buttons {\n border-left: 1px solid #B4B6B8;\n}\n\n.etabs-buttons button {\n display: block;\n color: #777;\n background: none;\n border: none;\n font-size: 16px;\n font-family: inherit;\n margin-top: 5px;\n border-radius: 50%;\n margin-left: 4px;\n width: 20px;\n height: 20px;\n text-align: center;\n line-height: 14px;\n padding: 1px 0 0 0;\n\tcursor: pointer;\n}\n\n.etabs-buttons button:hover {\n color: #333;\n background-color: #bbb;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #777;\n background: none;\n border: none;\n width: 20px;\n height: 20px;\n text-align: center;\n border-radius: 50%;\n cursor: pointer;\n padding: 1px 0 0 0;\n font-size: 16px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #333;\n background-color: #bbb;\n}\n\n.etabs-views {\n position: relative;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n"; if (!document) throw Error("electron-tabs module must be called in renderer process"); diff --git a/dist/electron-tabs.js.map b/dist/electron-tabs.js.map index 5ba045c..3aec078 100644 --- a/dist/electron-tabs.js.map +++ b/dist/electron-tabs.js.map @@ -1 +1 @@ -{"mappings":"ACAA,IAAA,wCAA03E,GAA32E,22EAA22E;;ADA13E;AAEA,IAAI,CAAC,QAAQ,EACX,MAAM,KAAK,CAAC,yDAAyD,CAAC,CAAC;AAGzE,MAAM,8BAAQ,SAAS,WAAW;IAChC,aAAe;QACb,KAAK,EAAE,CAAC;QAER,UAAU;QACV,IAAI,CAAC,OAAO,GAAG;YACb,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,QAAQ;YACnE,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,UAAU;YACxE,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC;YACnE,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,WAAW;YACvD,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,YAAY;YAC1D,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,KAAK;YAC1D,UAAU,EAAE;gBAAE,KAAK,EAAE,SAAS;gBAAE,MAAM,EAAE,IAAI;aAAE;SAG/C,CAAC;QAEF,wBAAwB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YAAC,IAAI,EAAE,MAAM;SAAC,CAAC,AAAC;QAEjD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QAC9C,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QAC/C,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACjD,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QACnD,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjD,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QACtD,eAAe,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACvD,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QACpD,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACnD,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,AAAC;QAC9C,KAAK,CAAC,WAAW,GAAG,wCAAM,CAAC;QAE3B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE5B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,qCAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,qCAAe,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU,EAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAE5B;IAED,aAAa,CAAE,GAAG,EAAE;QAClB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;KAC/B;IAED,MAAM,CAAE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;QACtC,IAAI,OAAO,IAAI,KAAK,UAAU,EAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpB,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,AAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,GAAG,GAAG,IAAI,yBAAG,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,AAAC;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,oEAAoE;QACpE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EACtB,GAAG,CAAC,QAAQ,EAAE,CAAC;QAEjB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,CAAE,EAAE,EAAE;QACV,IAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAE;YACvB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EACxB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAEvB;QACD,OAAO,IAAI,CAAC;KACb;IAED,gBAAgB,CAAE,QAAQ,EAAE;QAC1B,IAAI,SAAS,GAAG,QAAQ,GAAG,CAAC,AAAC;QAC7B,IAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAE;YACvB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,QAAQ,EAClD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAEvB;QACD,OAAO,IAAI,CAAC;KACb;IAED,mBAAmB,CAAE,QAAQ,EAAE;QAC7B,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC;QACxD,IAAI,QAAQ,IAAI,CAAC,EACf,OAAO,IAAI,CAAC;QAEd,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KACxC;IAED,UAAU,GAAI;QACZ,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;KACpC;IAED,cAAc,GAAI;QAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;KACrC;IAED,OAAO,GAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KAC1B;IAED,OAAO,CAAE,EAAE,EAAE;QACX,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;KACb;IAED,YAAY,GAAI;QACd,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACrB;CACF;AAED,MAAM,qCAAe,GAAG;IACtB,gBAAgB,EAAE,WAAY;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO;QACvC,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,AAAC;QAChF,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;KAC5E;IAED,cAAc,EAAE,WAAY;QAC1B,SAAS,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE;YAC3C,IAAI,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,AAAC;YAC3D,IAAI,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,AAAC;YAC1C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,mBAAmB,EACzC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;iBAE5B,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAElC;QAED,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;KAC9C;IAED,SAAS,EAAE,SAAU,GAAG,EAAE,YAAY,EAAE;QACtC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,AAAC;QAChB,IAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CACrB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,MAAM;SACP;QAEH,IAAI,YAAY,EACd,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC;KACb;IAED,YAAY,EAAE,SAAU,GAAG,EAAE;QAC3B,qCAAe,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;KACb;IAED,iBAAiB,EAAE,SAAU,GAAG,EAAE;QAChC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE1B,OAAO,IAAI,CAAC;KACb;CACF,AAAC;AAEF,MAAM,yBAAG,SAAS,WAAW;IAC3B,YAAa,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAE;QAC/B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;QACvD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACtD,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,gCAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,gCAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QAEd,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,EAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAEpB;IAED,QAAQ,CAAE,KAAK,EAAE;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,AAAC;QAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;KACb;IAED,QAAQ,GAAI;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,QAAQ,CAAE,KAAK,EAAE;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,AAAC;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACjC,MACC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAG/B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KACzC;IAED,QAAQ,GAAI;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,OAAO,CAAE,OAAO,EAAE,IAAI,EAAE;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,AAAC;QACjC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;SAC1C,MAAM,IAAI,IAAI,EAAE;YACf,IAAI,CAAC,SAAS,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACvC;QAED,OAAO,IAAI,CAAC;KACb;IAED,OAAO,GAAI;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAED,WAAW,CAAE,WAAW,EAAE;QACxB,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,AAAC;QAC9C,IAAI,IAAI,GAAG,YAAY,CAAC,QAAQ,AAAC;QACjC,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,AAAC;QAEzC,IAAI,WAAW,GAAG,CAAC,EAAE;YACnB,WAAW,IAAI,YAAY,CAAC,iBAAiB,CAAC;YAE9C,IAAI,WAAW,GAAG,CAAC,EACjB,WAAW,GAAG,CAAC,CAAC;SAEnB,MAAM;YACL,IAAI,WAAW,GAAG,YAAY,CAAC,iBAAiB,EAC9C,WAAW,GAAG,YAAY,CAAC,iBAAiB,CAAC;YAG/C,8BAA8B;YAC9B,WAAW,EAAE,CAAC;SACf;QAED,IAAI,WAAW,GAAG,WAAW,EAC3B,WAAW,EAAE,CAAC;QAGhB,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAEhE,OAAO,IAAI,CAAC;KACb;IAED,WAAW,CAAE,SAAS,EAAE;QACtB,IAAI,QAAQ,GAAG,CAAC,AAAC;QACjB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,AAAC;QACnB,MAAO,AAAC,CAAA,GAAG,GAAG,GAAG,CAAC,eAAe,CAAA,IAAK,IAAI,CAAE,QAAQ,EAAE,CAAC;QAEvD,IAAI,SAAS,KAAK,IAAI,EACpB,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC;QAG3D,IAAI,QAAQ,IAAI,CAAC,EACf,QAAQ,EAAE,CAAC;QAGb,OAAO,QAAQ,CAAC;KACjB;IAED,QAAQ,GAAI;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,AAAC;QAC7C,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9C,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;SACvC;QACD,qCAAe,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAE,IAAI,EAAE;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAC5B,MAAM;YACL,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC3B;QACD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,GAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzB;IAED,KAAK,CAAE,IAAI,EAAE;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAC1B,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAC1B,MAAM;YACL,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC;KACb;IAED,OAAO,GAAI;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC1B;IAED,QAAQ,CAAE,SAAS,EAAE;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KAC/C;IAED,KAAK,CAAE,KAAK,EAAE;QACZ,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,AAAC;QAC9C,MAAM,KAAK,GAAG,IAAM,eAAe,CAAC,KAAK,EAAE;QAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAElC,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,AAAC;QAC3C,IAAI,IAAI,CAAC,QAAQ,IAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAK,WAAW,CAAC,OAAO,EAAE,OAAO;QAE/E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,AAAC;QAC7B,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,AAAC;QAC7C,qCAAe,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEzB,IAAI,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAC1B,qCAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;KAEtD;CACF;AAED,MAAM,gCAAU,GAAG;IACjB,OAAO,EAAE,WAAY;QACnB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,AAAC;QAE9C,qBAAqB;QACrB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,AAAC;QACnD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5B,KAAK,IAAI,EAAE,IAAI;YAAC,MAAM;YAAE,OAAO;YAAE,SAAS;YAAE,OAAO;SAAC,CAAE;YACpD,IAAI,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,AAAC;YAC3D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;SAC7B;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,gCAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,gCAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAClD;IAED,cAAc,EAAE,WAAY;QAC1B,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,AAAC;QACzC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,AAAC;QAC9C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,AAAC;YACrE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC;YACzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;SACvE;KACF;IAED,mBAAmB,EAAE,WAAY;QAC/B,WAAW;QACX,MAAM,eAAe,GAAG,SAAU,CAAC,EAAE;YACnC,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;YAC1B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EACf,IAAI,CAAC,KAAK,EAAE,CAAC;SAEhB,AAAC;QACF,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACxE,aAAa;QACb,MAAM,mBAAmB,GAAG,SAAU,CAAC,EAAE;YACvC,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;YAC1B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;gBACjB,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO;gBACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;aACjB;SACF,AAAC;QACF,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;KAC/E;IAED,WAAW,EAAE,WAAY;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,AAAC;QAEjE,MAAM,8BAA8B,GAAG,SAAU,CAAC,EAAE;YAClD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;SAClC,AAAC;QAEF,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAEnG,MAAM,yBAAyB,GAAG,SAAU,CAAC,EAAE;YAC7C,8EAA8E;YAC9E,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;SACtC,AAAC;QAEF,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAExF,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,AAAC;YACnC,IAAK,IAAI,GAAG,IAAI,KAAK,CAAE;gBACrB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,AAAC;gBACxB,IAAI,IAAI,KAAK,KAAK,EAAE,SAAS;gBAC7B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aACtC;SACF;QAED,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvD;CACF,AAAC;AAEF;;GAEG,CACH,MAAM,uCAAiB,GAAG;IACxB,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE;QACnB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE;YAAE,MAAM,EAAE,IAAI;SAAE,CAAC,CAAC,CAAC;KAC7D;IAED,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACZ,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAhejC,QAgemC,MAAM,CAAA,EAAE,GAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,CAAC;KACrE;IAED,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QACd,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EApejC,QAoemC,MAAM,CAAA,EAAE,GAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QAAA,EAAE;YAAE,IAAI,EAAE,IAAI;SAAE,CAAC,CAAC;KACrF;CACF,AAAC;AAEF,MAAM,CAAC,MAAM,CAAC,8BAAQ,CAAC,SAAS,EAAE,uCAAiB,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,CAAC,yBAAG,CAAC,SAAS,EAAE,uCAAiB,CAAC,CAAC;AAEhD,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,8BAAQ,CAAC,CAAC","sources":["src/index.js","src/style.inline.css"],"sourcesContent":["import styles from \"./style.inline.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\nclass TabGroup extends HTMLElement {\n constructor () {\n super();\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n visibilityThreshold: this.getAttribute(\"visibility-threshold\") || 0,\n tabClass: this.getAttribute(\"tab-class\") || \"etabs-tab\",\n viewClass: this.getAttribute(\"view-class\") || \"etabs-view\",\n newTabButton: this.getAttribute(\"new-tab-button\") || false,\n defaultTab: { title: \"New Tab\", active: true }\n // TODO: replace this callback\n // ready: args.ready\n };\n\n // Create custom element\n const shadow = this.attachShadow({mode: \"open\"});\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", \"etabs\");\n\n const tabgroup = document.createElement(\"div\");\n tabgroup.setAttribute(\"class\", \"etabs-tabgroup\");\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", \"etabs-tabs\");\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", \"etabs-buttons\");\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", \"etabs-views\");\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n\n this.tabs = [];\n this.newTabId = 0;\n TabGroupPrivate.initNewTabButton.bind(this)();\n TabGroupPrivate.initVisibility.bind(this)();\n if (typeof this.options.ready === \"function\") {\n this.options.ready(this);\n }\n }\n\n setDefaultTab (tab) {\n this.options.defaultTab = tab;\n }\n\n addTab (args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n let id = this.newTabId;\n this.newTabId++;\n let tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab (id) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition (position) {\n let fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition (position) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab () {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab () {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs () {\n return this.tabs.slice();\n }\n\n eachTab (fn) {\n this.getTabs().forEach(fn);\n return this;\n }\n\n getActiveTab () {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n}\n\nconst TabGroupPrivate = {\n initNewTabButton: function () {\n if (!this.options.newTabButton) return;\n let button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.classList.add(`${this.options.tabClass}-button-new`);\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n },\n\n initVisibility: function () {\n function toggleTabsVisibility(tab, tabGroup) {\n var visibilityThreshold = this.options.visibilityThreshold;\n var el = tabGroup.tabContainer.parentNode;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n },\n\n removeTab: function (tab, triggerEvent) {\n let id = tab.id;\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n this.tabs.splice(i, 1);\n break;\n }\n }\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n return this;\n },\n\n setActiveTab: function (tab) {\n TabGroupPrivate.removeTab.bind(this)(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n return this;\n },\n\n activateRecentTab: function (tab) {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n return this;\n }\n};\n\nclass Tab extends EventTarget {\n constructor (tabGroup, id, args) {\n super();\n this.tabGroup = tabGroup;\n this.id = id;\n this.title = args.title;\n this.badge = args.badge;\n this.iconURL = args.iconURL;\n this.icon = args.icon;\n this.closable = args.closable === false ? false : true;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n this.tabElements = {};\n TabPrivate.initTab.bind(this)();\n TabPrivate.initWebview.bind(this)();\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n }\n }\n\n setTitle (title) {\n if (this.isClosed) return;\n let span = this.tabElements.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle () {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge (badge) {\n if (this.isClosed) return;\n let span = this.tabElements.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge;\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge () {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon (iconURL, icon) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n let span = this.tabElements.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon () {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition (newPosition) {\n let tabContainer = this.tabGroup.tabContainer;\n let tabs = tabContainer.children;\n let oldPosition = this.getPosition() - 1;\n\n if (newPosition < 0) {\n newPosition += tabContainer.childElementCount;\n\n if (newPosition < 0) {\n newPosition = 0;\n }\n } else {\n if (newPosition > tabContainer.childElementCount) {\n newPosition = tabContainer.childElementCount;\n }\n\n // Make 1 be leftmost position\n newPosition--;\n }\n\n if (newPosition > oldPosition) {\n newPosition++;\n }\n\n tabContainer.insertBefore(tabs[oldPosition], tabs[newPosition]);\n\n return this;\n }\n\n getPosition (fromRight) {\n let position = 0;\n let tab = this.tab;\n while ((tab = tab.previousSibling) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n if (position >= 0) {\n position++;\n }\n\n return position;\n }\n\n activate () {\n if (this.isClosed) return;\n let activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.tab.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n TabGroupPrivate.setActiveTab.bind(this.tabGroup)(this);\n this.tab.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.tab.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide () {\n return this.show(false);\n }\n\n flash (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.tab.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash () {\n return this.flash(false);\n }\n\n hasClass (classname) {\n return this.tab.classList.contains(classname);\n }\n\n close (force) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n let tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.tab);\n tabGroup.viewContainer.removeChild(this.webview);\n let activeTab = this.tabGroup.getActiveTab();\n TabGroupPrivate.removeTab.bind(tabGroup)(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n TabGroupPrivate.activateRecentTab.bind(tabGroup)();\n }\n }\n}\n\nconst TabPrivate = {\n initTab: function () {\n let tabClass = this.tabGroup.options.tabClass;\n\n // Create tab element\n let tab = this.tab = document.createElement(\"div\");\n tab.classList.add(tabClass);\n for (let el of [\"icon\", \"title\", \"buttons\", \"badge\"]) {\n let span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${tabClass}-${el}`);\n this.tabElements[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n TabPrivate.initTabButtons.bind(this)();\n TabPrivate.initTabClickHandler.bind(this)();\n\n this.tabGroup.tabContainer.appendChild(this.tab);\n },\n\n initTabButtons: function () {\n let container = this.tabElements.buttons;\n let tabClass = this.tabGroup.options.tabClass;\n if (this.closable) {\n let button = container.appendChild(document.createElement(\"button\"));\n button.classList.add(`${tabClass}-button-close`);\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n },\n\n initTabClickHandler: function () {\n // Mouse up\n const tabClickHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.tab.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if (e.target.matches(\"button\")) return;\n this.activate();\n }\n };\n this.tab.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n },\n\n initWebview: function () {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function (e) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function (e) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(this.tabGroup.options.viewClass);\n if (this.webviewAttributes) {\n let attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n};\n\n/**\n * This makes the browser EventTarget API work similar to EventEmitter\n */\nconst eventEmitterMixin = {\n emit (type, ...args) {\n this.dispatchEvent(new CustomEvent(type, { detail: args }));\n },\n\n on (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail));\n },\n\n once (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail), { once: true });\n }\n};\n\nObject.assign(TabGroup.prototype, eventEmitterMixin);\nObject.assign(Tab.prototype, eventEmitterMixin);\n\ncustomElements.define(\"tab-group\", TabGroup);\n",".etabs-tabgroup {\n width: 100%;\n height: 32px;\n background-color: #ccc;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.etabs-tabgroup.visible {\n\tdisplay: block;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n color: #333;\n height: 22px;\n padding: 6px 8px 4px;\n border: 1px solid #aaa;\n border-bottom: none;\n border-left: none;\n background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%);\n font: caption;\n font-size: 14px;\n background-color: #ccc;\n cursor: default;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n/* TODO: fix it */\n.etabs-buttons {\n float: left;\n}\n\n.etabs-buttons button {\n float: left;\n color: #333;\n background: none;\n border: none;\n font-size: 12px;\n margin-top: 6px;\n border-radius: 2px;\n margin-left: 4px;\n width: 20px;\n text-align: center;\n padding: 4px 0;\n}\n\n.etabs-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #333;\n background: none;\n border: none;\n width: 20px;\n text-align: center;\n border-radius: 2px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #eee;\n background-color: #aaa;\n}\n\n.etabs-views {\n position: relative;\n border-top: 1px solid #aaa;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n"],"names":[],"version":3,"file":"electron-tabs.js.map","sourceRoot":"../"} \ No newline at end of file +{"mappings":"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","sources":["src/index.js","src/style.inline.css"],"sourcesContent":["import styles from \"./style.inline.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\nclass TabGroup extends HTMLElement {\n constructor () {\n super();\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n visibilityThreshold: this.getAttribute(\"visibility-threshold\") || 0,\n tabClass: this.getAttribute(\"tab-class\") || \"etabs-tab\",\n viewClass: this.getAttribute(\"view-class\") || \"etabs-view\",\n newTabButton: this.getAttribute(\"new-tab-button\") || false,\n defaultTab: { title: \"New Tab\", active: true }\n // TODO: replace this callback\n // ready: args.ready\n };\n\n // Create custom element\n const shadow = this.attachShadow({mode: \"open\"});\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", \"etabs\");\n\n const tabgroup = document.createElement(\"div\");\n tabgroup.setAttribute(\"class\", \"etabs-tabgroup\");\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", \"etabs-tabs\");\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", \"etabs-buttons\");\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", \"etabs-views\");\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n\n this.tabs = [];\n this.newTabId = 0;\n TabGroupPrivate.initNewTabButton.bind(this)();\n TabGroupPrivate.initVisibility.bind(this)();\n if (typeof this.options.ready === \"function\") {\n this.options.ready(this);\n }\n }\n\n setDefaultTab (tab) {\n this.options.defaultTab = tab;\n }\n\n addTab (args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n let id = this.newTabId;\n this.newTabId++;\n let tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab (id) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition (position) {\n let fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition (position) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab () {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab () {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs () {\n return this.tabs.slice();\n }\n\n eachTab (fn) {\n this.getTabs().forEach(fn);\n return this;\n }\n\n getActiveTab () {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n}\n\nconst TabGroupPrivate = {\n initNewTabButton: function () {\n if (!this.options.newTabButton) return;\n let button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.classList.add(`${this.options.tabClass}-button-new`);\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n },\n\n initVisibility: function () {\n function toggleTabsVisibility(tab, tabGroup) {\n var visibilityThreshold = this.options.visibilityThreshold;\n var el = tabGroup.tabContainer.parentNode;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n },\n\n removeTab: function (tab, triggerEvent) {\n let id = tab.id;\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n this.tabs.splice(i, 1);\n break;\n }\n }\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n return this;\n },\n\n setActiveTab: function (tab) {\n TabGroupPrivate.removeTab.bind(this)(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n return this;\n },\n\n activateRecentTab: function (tab) {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n return this;\n }\n};\n\nclass Tab extends EventTarget {\n constructor (tabGroup, id, args) {\n super();\n this.tabGroup = tabGroup;\n this.id = id;\n this.title = args.title;\n this.badge = args.badge;\n this.iconURL = args.iconURL;\n this.icon = args.icon;\n this.closable = args.closable === false ? false : true;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n this.tabElements = {};\n TabPrivate.initTab.bind(this)();\n TabPrivate.initWebview.bind(this)();\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n }\n }\n\n setTitle (title) {\n if (this.isClosed) return;\n let span = this.tabElements.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle () {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge (badge) {\n if (this.isClosed) return;\n let span = this.tabElements.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge;\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge () {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon (iconURL, icon) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n let span = this.tabElements.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon () {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition (newPosition) {\n let tabContainer = this.tabGroup.tabContainer;\n let tabs = tabContainer.children;\n let oldPosition = this.getPosition() - 1;\n\n if (newPosition < 0) {\n newPosition += tabContainer.childElementCount;\n\n if (newPosition < 0) {\n newPosition = 0;\n }\n } else {\n if (newPosition > tabContainer.childElementCount) {\n newPosition = tabContainer.childElementCount;\n }\n\n // Make 1 be leftmost position\n newPosition--;\n }\n\n if (newPosition > oldPosition) {\n newPosition++;\n }\n\n tabContainer.insertBefore(tabs[oldPosition], tabs[newPosition]);\n\n return this;\n }\n\n getPosition (fromRight) {\n let position = 0;\n let tab = this.tab;\n while ((tab = tab.previousSibling) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n if (position >= 0) {\n position++;\n }\n\n return position;\n }\n\n activate () {\n if (this.isClosed) return;\n let activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.tab.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n TabGroupPrivate.setActiveTab.bind(this.tabGroup)(this);\n this.tab.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.tab.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide () {\n return this.show(false);\n }\n\n flash (flag) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.tab.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash () {\n return this.flash(false);\n }\n\n hasClass (classname) {\n return this.tab.classList.contains(classname);\n }\n\n close (force) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n let tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.tab);\n tabGroup.viewContainer.removeChild(this.webview);\n let activeTab = this.tabGroup.getActiveTab();\n TabGroupPrivate.removeTab.bind(tabGroup)(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n TabGroupPrivate.activateRecentTab.bind(tabGroup)();\n }\n }\n}\n\nconst TabPrivate = {\n initTab: function () {\n let tabClass = this.tabGroup.options.tabClass;\n\n // Create tab element\n let tab = this.tab = document.createElement(\"div\");\n tab.classList.add(tabClass);\n for (let el of [\"icon\", \"title\", \"buttons\", \"badge\"]) {\n let span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${tabClass}-${el}`);\n this.tabElements[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n TabPrivate.initTabButtons.bind(this)();\n TabPrivate.initTabClickHandler.bind(this)();\n\n this.tabGroup.tabContainer.appendChild(this.tab);\n },\n\n initTabButtons: function () {\n let container = this.tabElements.buttons;\n let tabClass = this.tabGroup.options.tabClass;\n if (this.closable) {\n let button = container.appendChild(document.createElement(\"button\"));\n button.classList.add(`${tabClass}-button-close`);\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n },\n\n initTabClickHandler: function () {\n // Mouse up\n const tabClickHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.tab.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function (e) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if (e.target.matches(\"button\")) return;\n this.activate();\n }\n };\n this.tab.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n },\n\n initWebview: function () {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function (e) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function (e) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(this.tabGroup.options.viewClass);\n if (this.webviewAttributes) {\n let attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n};\n\n/**\n * This makes the browser EventTarget API work similar to EventEmitter\n */\nconst eventEmitterMixin = {\n emit (type, ...args) {\n this.dispatchEvent(new CustomEvent(type, { detail: args }));\n },\n\n on (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail));\n },\n\n once (type, fn) {\n this.addEventListener(type, ({ detail }) => fn.apply(this, detail), { once: true });\n }\n};\n\nObject.assign(TabGroup.prototype, eventEmitterMixin);\nObject.assign(Tab.prototype, eventEmitterMixin);\n\ncustomElements.define(\"tab-group\", TabGroup);\n","/* TODO: use custom properties */\n\nwebview {\n position: absolute;\n visibility: hidden;\n width: 100%;\n height: 100%;\n}\n\nwebview.visible {\n visibility: visible;\n}\n\n.etabs {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n text-rendering: optimizeLegibility;\n font-feature-settings: 'liga', 'clig', 'kern';\n}\n\n.etabs-tabgroup {\n width: 100%;\n height: 32px;\n cursor: default;\n font: caption;\n font-size: 14px;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n background: #E7EAED;\n box-shadow: inset 0 -1px #DADCE0;\n border-top: 1px solid #DADCE0;\n}\n\n.etabs-tabgroup.visible {\n display: flex;\n}\n\n.etabs-tabs {\n height: 100%;\n}\n\n.etabs-tab {\n display: none;\n position: relative;\n height: 100%;\n background: #E7EAED;\n color: #696A6C;\n padding: 5px 9px;\n transition: background-color 150ms ease-out;\n box-shadow: inset 0 -1px #DADCE0;\n font: caption;\n font-size: 13px;\n cursor: pointer;\n box-sizing: border-box;\n}\n\n/* Dragula */\n.etabs-tab.gu-mirror {\n padding-bottom: 0;\n cursor: grab;\n\tborder: none;\n}\n\n.etabs-tab:first-child {\n border-left: none;\n}\n\n.etabs-tab.visible {\n display: inline-block;\n}\n\n.etabs-tab.active {\n background: #fff;\n box-shadow: none;\n\tborder-left: 1px solid #DADCE0;\n\tborder-right: 1px solid #DADCE0;\n\tpadding-left: 8px;\n\tpadding-right: 8px;\n}\n\n.etabs-tab.flash {\n background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%);\n}\n\n.etabs-tab.visible:not(.active)+.etabs-tab.visible:not(.active) {\n\tborder-left: 1px solid #B4B6B8;\n\tpadding-left: 8px;\n}\n\n.etabs-tab:not(.active):hover {\n\tbackground: #F1F3F4;\n}\n\n.etabs-buttons {\n border-left: 1px solid #B4B6B8;\n}\n\n.etabs-buttons button {\n display: block;\n color: #777;\n background: none;\n border: none;\n font-size: 16px;\n font-family: inherit;\n margin-top: 5px;\n border-radius: 50%;\n margin-left: 4px;\n width: 20px;\n height: 20px;\n text-align: center;\n line-height: 14px;\n padding: 1px 0 0 0;\n\tcursor: pointer;\n}\n\n.etabs-buttons button:hover {\n color: #333;\n background-color: #bbb;\n}\n\n.etabs-tab-badge {\n position: absolute;\n right: 0;\n top: -7px;\n background: red;\n border-radius: 100%;\n text-align: center;\n font-size: 10px;\n padding: 0 5px;\n}\n\n.etabs-tab-badge.hidden {\n display: none;\n}\n\n.etabs-tab-icon {\n display: inline-block;\n height: 16px;\n}\n\n.etabs-tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.etabs-tab-title {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons {\n display: inline-block;\n margin-left: 10px;\n}\n\n.etabs-tab-buttons button {\n display: inline-block;\n color: #777;\n background: none;\n border: none;\n width: 20px;\n height: 20px;\n text-align: center;\n border-radius: 50%;\n cursor: pointer;\n padding: 1px 0 0 0;\n font-size: 16px;\n}\n\n.etabs-tab-buttons button:hover {\n color: #333;\n background-color: #bbb;\n}\n\n.etabs-views {\n position: relative;\n height: calc(100vh - 33px);\n}\n\n.etab-view {\n position: relative;\n}\n"],"names":[],"version":3,"file":"electron-tabs.js.map","sourceRoot":"../"} \ No newline at end of file diff --git a/src/style.inline.css b/src/style.inline.css index a626828..adda6e5 100644 --- a/src/style.inline.css +++ b/src/style.inline.css @@ -1,38 +1,64 @@ +/* TODO: use custom properties */ + +webview { + position: absolute; + visibility: hidden; + width: 100%; + height: 100%; +} + +webview.visible { + visibility: visible; +} + +.etabs { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + text-rendering: optimizeLegibility; + font-feature-settings: 'liga', 'clig', 'kern'; +} + .etabs-tabgroup { width: 100%; height: 32px; - background-color: #ccc; cursor: default; font: caption; font-size: 14px; -webkit-user-select: none; user-select: none; display: none; + background: #E7EAED; + box-shadow: inset 0 -1px #DADCE0; + border-top: 1px solid #DADCE0; } .etabs-tabgroup.visible { - display: block; + display: flex; +} + +.etabs-tabs { + height: 100%; } .etabs-tab { display: none; position: relative; - color: #333; - height: 22px; - padding: 6px 8px 4px; - border: 1px solid #aaa; - border-bottom: none; - border-left: none; - background: linear-gradient(to bottom, rgba(234,234,234,1) 0%,rgba(204,204,204,1) 100%); + height: 100%; + background: #E7EAED; + color: #696A6C; + padding: 5px 9px; + transition: background-color 150ms ease-out; + box-shadow: inset 0 -1px #DADCE0; font: caption; - font-size: 14px; - background-color: #ccc; - cursor: default; + font-size: 13px; + cursor: pointer; + box-sizing: border-box; } /* Dragula */ .etabs-tab.gu-mirror { padding-bottom: 0; + cursor: grab; + border: none; } .etabs-tab:first-child { @@ -45,34 +71,51 @@ .etabs-tab.active { background: #fff; + box-shadow: none; + border-left: 1px solid #DADCE0; + border-right: 1px solid #DADCE0; + padding-left: 8px; + padding-right: 8px; } .etabs-tab.flash { background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%); } -/* TODO: fix it */ +.etabs-tab.visible:not(.active)+.etabs-tab.visible:not(.active) { + border-left: 1px solid #B4B6B8; + padding-left: 8px; +} + +.etabs-tab:not(.active):hover { + background: #F1F3F4; +} + .etabs-buttons { - float: left; + border-left: 1px solid #B4B6B8; } .etabs-buttons button { - float: left; - color: #333; + display: block; + color: #777; background: none; border: none; - font-size: 12px; - margin-top: 6px; - border-radius: 2px; + font-size: 16px; + font-family: inherit; + margin-top: 5px; + border-radius: 50%; margin-left: 4px; width: 20px; + height: 20px; text-align: center; - padding: 4px 0; + line-height: 14px; + padding: 1px 0 0 0; + cursor: pointer; } .etabs-buttons button:hover { - color: #eee; - background-color: #aaa; + color: #333; + background-color: #bbb; } .etabs-tab-badge { @@ -112,36 +155,28 @@ .etabs-tab-buttons button { display: inline-block; - color: #333; + color: #777; background: none; border: none; width: 20px; + height: 20px; text-align: center; - border-radius: 2px; + border-radius: 50%; + cursor: pointer; + padding: 1px 0 0 0; + font-size: 16px; } .etabs-tab-buttons button:hover { - color: #eee; - background-color: #aaa; + color: #333; + background-color: #bbb; } .etabs-views { position: relative; - border-top: 1px solid #aaa; height: calc(100vh - 33px); } .etab-view { position: relative; } - -webview { - position: absolute; - visibility: hidden; - width: 100%; - height: 100%; -} - -webview.visible { - visibility: visible; -} From a34efab0098728a421b752702f43f92ca7a5be97 Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Tue, 24 May 2022 08:58:07 +0200 Subject: [PATCH 09/35] Create a draggable version of the script (broken) --- .parcelrc | 2 +- demo/electron-tabs.html | 4 +- dist/electron-tabs.draggable.js | 1789 +++++++++++++++++++++++++++ dist/electron-tabs.draggable.js.map | 1 + dist/electron-tabs.js | 23 +- dist/electron-tabs.js.map | 2 +- package-lock.json | 47 + package.json | 11 +- src/draggable.js | 12 + src/index.js | 24 +- src/{style.inline.css => style.css} | 0 11 files changed, 1902 insertions(+), 13 deletions(-) create mode 100644 dist/electron-tabs.draggable.js create mode 100644 dist/electron-tabs.draggable.js.map create mode 100644 src/draggable.js rename src/{style.inline.css => style.css} (100%) diff --git a/.parcelrc b/.parcelrc index 3f20dad..ba2e905 100644 --- a/.parcelrc +++ b/.parcelrc @@ -1,7 +1,7 @@ { "extends": "@parcel/config-default", "transformers": { - "*.inline.css": [ + "*.css": [ "parcel-transformer-css-to-string" ] } diff --git a/demo/electron-tabs.html b/demo/electron-tabs.html index 42aa2c7..230cfa7 100644 --- a/demo/electron-tabs.html +++ b/demo/electron-tabs.html @@ -6,9 +6,9 @@ - + - + + + diff --git a/demo/page.html b/demo/page.html new file mode 100644 index 0000000..5ce2b09 --- /dev/null +++ b/demo/page.html @@ -0,0 +1,13 @@ + + + + + + + Local Page + + +

Hello World!

+

This is a local page.

+ + From 8328cb18642cef27d9726da2ae1008bc1b5ddfce Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Wed, 25 May 2022 14:59:12 +0200 Subject: [PATCH 29/35] Fix tab.flash() --- demo/electron-tabs.html | 7 +++++-- dist/electron-tabs.js | 2 +- src/style.css | 11 +++++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/demo/electron-tabs.html b/demo/electron-tabs.html index 01356bf..ac9f0a7 100644 --- a/demo/electron-tabs.html +++ b/demo/electron-tabs.html @@ -44,8 +44,11 @@ }); tabGroup.addTab({ - title: "Local Page", - src: "page.html" + title: "Flashed Tab", + src: "page.html", + ready: function(tab) { + tab.flash(); + } }); diff --git a/dist/electron-tabs.js b/dist/electron-tabs.js index b74432f..4780ee0 100644 --- a/dist/electron-tabs.js +++ b/dist/electron-tabs.js @@ -2499,7 +2499,7 @@ var $64afbd09cd65a300$export$2e2bcd8739ae039 = $64afbd09cd65a300$export$31b3ca70 var $0648b347057451f2$exports = {}; -$0648b347057451f2$exports = ":host {\n --tabgroup-background: #e7eaed;\n --tab-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n --tab-font-size: 13px;\n --tab-background: #e7eaed;\n --tab-color: #696a6c;\n --tab-border-color: #dadce0;\n --tab-transition: background-color 150ms ease-out;\n --tab-cursor: pointer;\n --tab-active-color: currentcolor;\n --tab-active-background: #fff;\n --tag-hover-color: currentcolor;\n --tag-hover-background: #f1f3f4;\n --tab-flash-color: #696a6c;\n --tab-flash-background: linear-gradient(to bottom, #fff3aa 0%, #ffe325 100%);\n --button-font-size: 15px;\n --button-background: none;\n --button-color: #696a6c;\n --button-hover-background: #dadce0;\n --button-hover-color: #383a3e;\n --button-border-radius: 50%;\n --button-cursor: pointer;\n --badge-background: #383a3e;\n --badge-color: #fff;\n}\n\nwebview {\n visibility: hidden;\n width: 100%;\n height: 100%;\n position: absolute;\n}\n\nwebview.visible {\n visibility: visible;\n}\n\n.etabs {\n font-family: var(--tab-font-family);\n text-rendering: optimizelegibility;\n font-feature-settings: \"liga\", \"clig\", \"kern\";\n}\n\n.nav {\n background: var(--tabgroup-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n border-top: 1px solid var(--tab-border-color);\n font-size: var(--tab-font-size);\n width: 100%;\n height: 32px;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.nav.visible {\n display: flex;\n}\n\n.tabs {\n height: 100%;\n}\n\n.tab {\n background: var(--tab-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n color: var(--tab-color);\n cursor: var(--tab-cursor);\n font-size: var(--tab-font-size);\n transition: var(--tab-transition);\n box-sizing: border-box;\n height: 100%;\n align-items: center;\n padding: 5px 9px;\n display: none;\n position: relative;\n}\n\n.tab:first-child {\n border-left: none;\n}\n\n.tab.visible {\n display: inline-flex;\n}\n\n.tab.active {\n color: var(--tab-active-color);\n background: var(--tab-active-background);\n border-left: 1px solid var(--tab-border-color);\n border-right: 1px solid var(--tab-border-color);\n box-shadow: none;\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.tab.active:last-child {\n border-right: none;\n}\n\n.tab.flash {\n background: var(--tab-flash-background);\n color: var(--tab-flash-color);\n}\n\n.tab.visible:not(.active) + .tab.visible:not(.active) {\n border-left: 1px solid var(--tab-border-color);\n padding-left: 8px;\n}\n\n.tab:not(.active):hover {\n background: var(--tab-hover-background);\n color: var(--tab-hover-color);\n}\n\n.tab-badge {\n background: var(--badge-background);\n color: var(--badge-color);\n text-align: center;\n border-radius: 5px;\n margin-left: 5px;\n padding: 1px 4px;\n font-size: 8px;\n font-weight: bold;\n line-height: 1.2;\n}\n\n.tab-badge.hidden {\n display: none;\n}\n\n.tab-icon {\n height: 16px;\n display: inline-block;\n}\n\n.tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.tab-title, .tab-close {\n margin-left: 10px;\n display: inline-block;\n}\n\n.tab-close button {\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n color: var(--button-color);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n padding: 1px 0 0;\n display: inline-block;\n}\n\n.tab-close button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.buttons {\n border-left: 1px solid var(--tab-border-color);\n padding: 5px;\n display: flex;\n}\n\n.buttons button {\n color: var(--button-color);\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n margin: 0;\n padding: 1px 0 0;\n font-family: inherit;\n line-height: 1;\n display: block;\n}\n\n.buttons button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.views {\n height: calc(100vh - 33px);\n position: relative;\n}\n\n"; +$0648b347057451f2$exports = ":host {\n --tabgroup-background: #e7eaed;\n --tab-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n --tab-font-size: 13px;\n --tab-background: #e7eaed;\n --tab-color: #696a6c;\n --tab-border-color: #dadce0;\n --tab-transition: background-color 150ms ease-out;\n --tab-cursor: pointer;\n --tab-active-color: currentcolor;\n --tab-active-background: #fff;\n --tag-hover-color: currentcolor;\n --tag-hover-background: #f1f3f4;\n --tab-flash-color: #696a6c;\n --tab-flash-background: #fff3aa;\n --tab-flash-hover-color: #696a6c;\n --tab-flash-hover-background: #ffe325;\n --button-font-size: 15px;\n --button-background: none;\n --button-color: #696a6c;\n --button-hover-background: #dadce0;\n --button-hover-color: #383a3e;\n --button-border-radius: 50%;\n --button-cursor: pointer;\n --badge-background: #383a3e;\n --badge-color: #fff;\n}\n\nwebview {\n visibility: hidden;\n width: 100%;\n height: 100%;\n position: absolute;\n}\n\nwebview.visible {\n visibility: visible;\n}\n\n.etabs {\n font-family: var(--tab-font-family);\n text-rendering: optimizelegibility;\n font-feature-settings: \"liga\", \"clig\", \"kern\";\n}\n\n.nav {\n background: var(--tabgroup-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n border-top: 1px solid var(--tab-border-color);\n font-size: var(--tab-font-size);\n width: 100%;\n height: 32px;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.nav.visible {\n display: flex;\n}\n\n.tabs {\n height: 100%;\n}\n\n.tab {\n background: var(--tab-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n color: var(--tab-color);\n cursor: var(--tab-cursor);\n font-size: var(--tab-font-size);\n transition: var(--tab-transition);\n box-sizing: border-box;\n height: 100%;\n align-items: center;\n padding: 5px 9px;\n display: none;\n position: relative;\n}\n\n.tab:first-child {\n border-left: none;\n}\n\n.tab.visible {\n display: inline-flex;\n}\n\n.tab.active {\n color: var(--tab-active-color);\n background: var(--tab-active-background);\n border-left: 1px solid var(--tab-border-color);\n border-right: 1px solid var(--tab-border-color);\n box-shadow: none;\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.tab.active:last-child {\n border-right: none;\n}\n\n.tab.flash {\n background: var(--tab-flash-background);\n color: var(--tab-flash-color);\n transition: all .5s linear;\n}\n\n.tab.tab.flash:hover {\n background: var(--tab-flash-hover-background);\n color: var(--tab-flash-hover-color);\n}\n\n.tab.visible:not(.active) + .tab.visible:not(.active) {\n border-left: 1px solid var(--tab-border-color);\n padding-left: 8px;\n}\n\n.tab:not(.active):hover {\n background: var(--tab-hover-background);\n color: var(--tab-hover-color);\n}\n\n.tab-badge {\n background: var(--badge-background);\n color: var(--badge-color);\n text-align: center;\n border-radius: 5px;\n margin-left: 5px;\n padding: 1px 4px;\n font-size: 8px;\n font-weight: bold;\n line-height: 1.2;\n}\n\n.tab-badge.hidden {\n display: none;\n}\n\n.tab-icon {\n height: 16px;\n display: inline-block;\n}\n\n.tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.tab-title, .tab-close {\n margin-left: 10px;\n display: inline-block;\n}\n\n.tab-close button {\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n color: var(--button-color);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n padding: 1px 0 0;\n display: inline-block;\n}\n\n.tab-close button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.buttons {\n border-left: 1px solid var(--tab-border-color);\n padding: 5px;\n display: flex;\n}\n\n.buttons button {\n color: var(--button-color);\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n margin: 0;\n padding: 1px 0 0;\n font-family: inherit;\n line-height: 1;\n display: block;\n}\n\n.buttons button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.views {\n height: calc(100vh - 33px);\n position: relative;\n}\n\n"; if (!document) throw Error("electron-tabs module must be called in renderer process"); diff --git a/src/style.css b/src/style.css index b8bf4f3..41652ef 100644 --- a/src/style.css +++ b/src/style.css @@ -8,14 +8,16 @@ --tab-background: #E7EAED; --tab-color: #696A6C; --tab-border-color: #DADCE0; - --tab-transition: background-color 150ms ease-out; + --tab-transition: background-color 200ms ease-out, color 200ms ease-out; --tab-cursor: pointer; --tab-active-color: currentcolor; --tab-active-background: #FFF; --tag-hover-color: currentcolor; --tag-hover-background: #F1F3F4; --tab-flash-color: #696A6C; - --tab-flash-background: linear-gradient(to bottom, rgba(255,243,170,1) 0%,rgba(255,227,37,1) 100%); + --tab-flash-background: #fff3aa; + --tab-flash-hover-color: #696A6C; + --tab-flash-hover-background: #ffe325; --button-font-size: 15px; --button-background: none; --button-color: #696A6C; @@ -110,6 +112,11 @@ webview.visible { color: var(--tab-flash-color); } +.tab.tab.flash:hover { + background: var(--tab-flash-hover-background); + color: var(--tab-flash-hover-color); +} + .tab.visible:not(.active)+.tab.visible:not(.active) { border-left: 1px solid var(--tab-border-color); padding-left: 8px; From 965aabb202bb06f8c017ce2f785ab28beda04755 Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Wed, 25 May 2022 15:09:18 +0200 Subject: [PATCH 30/35] Rename tab elements attributes --- dist/electron-tabs.d.ts | 4 ++-- dist/electron-tabs.d.ts.map | 2 +- dist/electron-tabs.js | 44 +++++++++++++++++------------------ dist/electron-tabs.js.map | 2 +- src/index.ts | 46 ++++++++++++++++++------------------- 5 files changed, 49 insertions(+), 49 deletions(-) diff --git a/dist/electron-tabs.d.ts b/dist/electron-tabs.d.ts index 540c6df..8e46658 100644 --- a/dist/electron-tabs.d.ts +++ b/dist/electron-tabs.d.ts @@ -58,13 +58,13 @@ export class TabGroup extends HTMLElement { export class Tab extends EventTarget { badge: Badge; closable: boolean; + element: HTMLDivElement; icon: string; iconURL: string; id: number; isClosed: boolean; isReady: boolean; - tab: HTMLDivElement; - tabElements: { + spans: { [key: string]: HTMLSpanElement; }; tabGroup: TabGroup; diff --git a/dist/electron-tabs.d.ts.map b/dist/electron-tabs.d.ts.map index 94dd20d..516d2b0 100644 --- a/dist/electron-tabs.d.ts.map +++ b/dist/electron-tabs.d.ts.map @@ -1 +1 @@ -{"mappings":"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","sources":["src/src/index.ts","src/index.ts"],"sourcesContent":[null,"import Sortable from \"sortablejs\";\n// @ts-ignore\nimport styles from \"bundle-text:./style.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\ninterface TabGroupOptions {\n closeButtonText: string,\n defaultTab: TabOptions | ((tabGroup: TabGroup) => TabOptions),\n newTabButton: boolean,\n newTabButtonText: string,\n sortable: boolean,\n sortableOptions?: Sortable.Options\n visibilityThreshold: number,\n}\n\ninterface TabOptions {\n active?: boolean;\n badge?: Badge;\n closable?: boolean;\n icon?: string;\n iconURL?: string;\n ready?: ((tab: Tab) => void);\n src?: string;\n title?: string;\n visible?: boolean;\n webviewAttributes?: { [key: string]: any };\n}\n\ninterface Badge {\n text: string,\n classname: string\n}\n\nconst CLASSNAMES = {\n ROOT: \"etabs\",\n NAV: \"nav\",\n TABS: \"tabs\",\n TAB: \"tab\",\n BUTTONS: \"buttons\",\n VIEWS: \"views\",\n VIEW: \"view\"\n}\n\nfunction emit(emitter: TabGroup | Tab, type: string, args: any[]) {\n if (type === \"ready\") {\n emitter.isReady = true;\n }\n emitter.dispatchEvent(new CustomEvent(type, { detail: args }));\n}\n\nfunction on(emitter: TabGroup | Tab, type: string, fn: (detail: string) => void, options?: { [key: string]: any }) {\n if (type === \"ready\" && emitter.isReady === true) {\n fn.apply(emitter, [emitter]);\n }\n emitter.addEventListener(type, ((e: CustomEvent) => fn.apply(emitter, e.detail)) as EventListener, options);\n}\n\nclass TabGroup extends HTMLElement {\n buttonContainer: HTMLDivElement;\n isReady: boolean;\n newTabId: number;\n options: TabGroupOptions;\n shadow: ShadowRoot;\n tabContainer: HTMLDivElement;\n tabs: Array;\n viewContainer: HTMLDivElement;\n\n constructor() {\n super();\n\n this.isReady = false;\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n defaultTab: { title: \"New Tab\", active: true },\n newTabButton: !!this.getAttribute(\"new-tab-button\") === true || false,\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n sortable: !!this.getAttribute(\"sortable\") === true || false,\n visibilityThreshold: Number(this.getAttribute(\"visibility-threshold\")) || 0\n };\n\n this.tabs = [];\n this.newTabId = 0;\n\n this.createComponent();\n this.initVisibility();\n if (this.options.sortable) {\n this.initSortable();\n }\n\n this.emit(\"ready\", this);\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n connectedCallback() {\n // Support custom styles\n const style = this.querySelector(\"style\");\n if (style) {\n this.shadow.appendChild(style);\n }\n }\n\n private createComponent() {\n const shadow = this.attachShadow({mode: \"open\"});\n this.shadow = shadow;\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", CLASSNAMES.ROOT);\n\n const tabgroup = document.createElement(\"nav\");\n tabgroup.setAttribute(\"class\", CLASSNAMES.NAV);\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", CLASSNAMES.TABS);\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", CLASSNAMES.BUTTONS);\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n if (this.options.newTabButton) {\n const button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n }\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", CLASSNAMES.VIEWS);\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n }\n\n private initVisibility() {\n function toggleTabsVisibility(tab: Tab, tabGroup: TabGroup) {\n const visibilityThreshold = this.options.visibilityThreshold;\n const el = tabGroup.tabContainer.parentElement;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n }\n\n initSortable() {\n const createNewSortable = () => {\n const options = Object.assign({\n direction: \"horizontal\",\n animation: 150,\n swapThreshold: 0.20\n }, this.options.sortableOptions);\n new Sortable(this.tabContainer, options);\n };\n\n if (Sortable) {\n createNewSortable();\n } else {\n document.addEventListener(\"DOMContentLoaded\", createNewSortable);\n }\n }\n\n setDefaultTab(tab: TabOptions) {\n this.options.defaultTab = tab;\n }\n\n addTab(args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n const id = this.newTabId;\n this.newTabId++;\n const tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab(id: number) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition(position: number) {\n const fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition(position: number) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab() {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab() {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs() {\n return this.tabs.slice();\n }\n\n eachTab(fn: (tab: Tab) => void) {\n this.getTabs().forEach(fn);\n }\n\n getActiveTab() {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n\n setActiveTab(tab: Tab) {\n this.removeTab(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n }\n\n removeTab(tab: Tab, triggerEvent = false) {\n const id = tab.id;\n const index = this.tabs.findIndex((t: Tab) => t.id === id);\n this.tabs.splice(index, 1);\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n }\n\n activateRecentTab() {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n }\n}\n\nclass Tab extends EventTarget {\n badge: Badge;\n closable: boolean;\n icon: string;\n iconURL: string;\n id: number;\n isClosed: boolean;\n isReady: boolean;\n tab: HTMLDivElement;\n tabElements: { [key: string]: HTMLSpanElement };\n tabGroup: TabGroup;\n title: string;\n webview: HTMLElement;\n webviewAttributes: { [key: string]: any };\n\n constructor(tabGroup: TabGroup, id: number, args: TabOptions) {\n super();\n this.badge = args.badge;\n this.closable = args.closable === false ? false : true;\n this.icon = args.icon;\n this.iconURL = args.iconURL;\n this.id = id;\n this.isClosed = false;\n this.isReady = false;\n this.tabElements = {};\n this.tabGroup = tabGroup;\n this.title = args.title;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n\n this.initTab();\n this.initWebview();\n\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n } else {\n this.emit(\"ready\", this);\n }\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n private initTab() {\n const tab = this.tab = document.createElement(\"div\");\n tab.classList.add(CLASSNAMES.TAB);\n for (let el of [\"icon\", \"title\", \"badge\", \"close\"]) {\n const span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${CLASSNAMES.TAB}-${el}`);\n this.tabElements[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n this.initTabCloseButton();\n this.initTabClickHandler();\n\n this.tabGroup.tabContainer.appendChild(this.tab);\n }\n\n private initTabCloseButton() {\n const container = this.tabElements.close;\n if (this.closable) {\n const button = container.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n }\n\n private initTabClickHandler() {\n // Mouse up\n const tabClickHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.tab.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if ((e.target as HTMLElement).matches(\"button\")) return;\n this.activate();\n }\n };\n this.tab.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n }\n\n initWebview() {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function(e: Event) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function(e: Event) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(CLASSNAMES.VIEW);\n if (this.webviewAttributes) {\n const attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n\n setTitle(title: string) {\n if (this.isClosed) return;\n const span = this.tabElements.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle() {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge(badge?: Badge) {\n if (this.isClosed) return;\n const span = this.tabElements.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge.text;\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge() {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon(iconURL: string, icon: string) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n const span = this.tabElements.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon() {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition(newPosition: number) {\n const tabContainer = this.tabGroup.tabContainer;\n const length = tabContainer.childElementCount;\n const thisPosition = this.getPosition();\n const tabs = Array.from(tabContainer.children)\n tabs.splice(thisPosition, 1);\n\n if (newPosition < 0) {\n newPosition += length;\n if (newPosition < 0) {\n newPosition = 0;\n }\n }\n\n if (newPosition < length) {\n tabContainer.insertBefore(this.tab, tabs[newPosition]);\n } else {\n tabContainer.appendChild(this.tab);\n }\n\n return this;\n }\n\n getPosition(fromRight = false) {\n let position = 0;\n let tab = this.tab;\n while ((tab = tab.previousSibling as HTMLDivElement) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n return position;\n }\n\n activate() {\n if (this.isClosed) return;\n const activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.tab.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n this.tabGroup.setActiveTab(this);\n this.tab.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show(flag = true) {\n if (this.isClosed) return;\n if (flag) {\n this.tab.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.tab.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide() {\n return this.show(false);\n }\n\n flash(flag = true) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.tab.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash() {\n return this.flash(false);\n }\n\n hasClass(classname: string) {\n return this.tab.classList.contains(classname);\n }\n\n close(force: boolean) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n const tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.tab);\n tabGroup.viewContainer.removeChild(this.webview);\n const activeTab = this.tabGroup.getActiveTab();\n tabGroup.removeTab(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n tabGroup.activateRecentTab();\n }\n }\n}\n\ncustomElements.define(\"tab-group\", TabGroup);\n\nexport type { TabGroup, Tab };\n"],"names":[],"version":3,"file":"electron-tabs.d.ts.map","sourceRoot":"../"} \ No newline at end of file +{"mappings":"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","sources":["src/src/index.ts","src/index.ts"],"sourcesContent":[null,"import Sortable from \"sortablejs\";\n// @ts-ignore\nimport styles from \"bundle-text:./style.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\ninterface TabGroupOptions {\n closeButtonText: string,\n defaultTab: TabOptions | ((tabGroup: TabGroup) => TabOptions),\n newTabButton: boolean,\n newTabButtonText: string,\n sortable: boolean,\n sortableOptions?: Sortable.Options\n visibilityThreshold: number,\n}\n\ninterface TabOptions {\n active?: boolean;\n badge?: Badge;\n closable?: boolean;\n icon?: string;\n iconURL?: string;\n ready?: ((tab: Tab) => void);\n src?: string;\n title?: string;\n visible?: boolean;\n webviewAttributes?: { [key: string]: any };\n}\n\ninterface Badge {\n text: string,\n classname: string\n}\n\nconst CLASSNAMES = {\n ROOT: \"etabs\",\n NAV: \"nav\",\n TABS: \"tabs\",\n TAB: \"tab\",\n BUTTONS: \"buttons\",\n VIEWS: \"views\",\n VIEW: \"view\"\n}\n\nfunction emit(emitter: TabGroup | Tab, type: string, args: any[]) {\n if (type === \"ready\") {\n emitter.isReady = true;\n }\n emitter.dispatchEvent(new CustomEvent(type, { detail: args }));\n}\n\nfunction on(emitter: TabGroup | Tab, type: string, fn: (detail: string) => void, options?: { [key: string]: any }) {\n if (type === \"ready\" && emitter.isReady === true) {\n fn.apply(emitter, [emitter]);\n }\n emitter.addEventListener(type, ((e: CustomEvent) => fn.apply(emitter, e.detail)) as EventListener, options);\n}\n\nclass TabGroup extends HTMLElement {\n buttonContainer: HTMLDivElement;\n isReady: boolean;\n newTabId: number;\n options: TabGroupOptions;\n shadow: ShadowRoot;\n tabContainer: HTMLDivElement;\n tabs: Array;\n viewContainer: HTMLDivElement;\n\n constructor() {\n super();\n\n this.isReady = false;\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n defaultTab: { title: \"New Tab\", active: true },\n newTabButton: !!this.getAttribute(\"new-tab-button\") === true || false,\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n sortable: !!this.getAttribute(\"sortable\") === true || false,\n visibilityThreshold: Number(this.getAttribute(\"visibility-threshold\")) || 0\n };\n\n this.tabs = [];\n this.newTabId = 0;\n\n this.createComponent();\n this.initVisibility();\n if (this.options.sortable) {\n this.initSortable();\n }\n\n this.emit(\"ready\", this);\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n connectedCallback() {\n // Support custom styles\n const style = this.querySelector(\"style\");\n if (style) {\n this.shadow.appendChild(style);\n }\n }\n\n private createComponent() {\n const shadow = this.attachShadow({mode: \"open\"});\n this.shadow = shadow;\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", CLASSNAMES.ROOT);\n\n const tabgroup = document.createElement(\"nav\");\n tabgroup.setAttribute(\"class\", CLASSNAMES.NAV);\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", CLASSNAMES.TABS);\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", CLASSNAMES.BUTTONS);\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n if (this.options.newTabButton) {\n const button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n }\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", CLASSNAMES.VIEWS);\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n }\n\n private initVisibility() {\n function toggleTabsVisibility(tab: Tab, tabGroup: TabGroup) {\n const visibilityThreshold = this.options.visibilityThreshold;\n const el = tabGroup.tabContainer.parentElement;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n }\n\n initSortable() {\n const createNewSortable = () => {\n const options = Object.assign({\n direction: \"horizontal\",\n animation: 150,\n swapThreshold: 0.20\n }, this.options.sortableOptions);\n new Sortable(this.tabContainer, options);\n };\n\n if (Sortable) {\n createNewSortable();\n } else {\n document.addEventListener(\"DOMContentLoaded\", createNewSortable);\n }\n }\n\n setDefaultTab(tab: TabOptions) {\n this.options.defaultTab = tab;\n }\n\n addTab(args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n const id = this.newTabId;\n this.newTabId++;\n const tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab(id: number) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition(position: number) {\n const fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition(position: number) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab() {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab() {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs() {\n return this.tabs.slice();\n }\n\n eachTab(fn: (tab: Tab) => void) {\n this.getTabs().forEach(fn);\n }\n\n getActiveTab() {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n\n setActiveTab(tab: Tab) {\n this.removeTab(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n }\n\n removeTab(tab: Tab, triggerEvent = false) {\n const id = tab.id;\n const index = this.tabs.findIndex((t: Tab) => t.id === id);\n this.tabs.splice(index, 1);\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n }\n\n activateRecentTab() {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n }\n}\n\nclass Tab extends EventTarget {\n badge: Badge;\n closable: boolean;\n element: HTMLDivElement;\n icon: string;\n iconURL: string;\n id: number;\n isClosed: boolean;\n isReady: boolean;\n spans: { [key: string]: HTMLSpanElement };\n tabGroup: TabGroup;\n title: string;\n webview: HTMLElement;\n webviewAttributes: { [key: string]: any };\n\n constructor(tabGroup: TabGroup, id: number, args: TabOptions) {\n super();\n this.badge = args.badge;\n this.closable = args.closable === false ? false : true;\n this.icon = args.icon;\n this.iconURL = args.iconURL;\n this.id = id;\n this.isClosed = false;\n this.isReady = false;\n this.spans = {};\n this.tabGroup = tabGroup;\n this.title = args.title;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n\n this.initTab();\n this.initWebview();\n\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n } else {\n this.emit(\"ready\", this);\n }\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n private initTab() {\n const tab = this.element = document.createElement(\"div\");\n tab.classList.add(CLASSNAMES.TAB);\n for (let el of [\"icon\", \"title\", \"badge\", \"close\"]) {\n const span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${CLASSNAMES.TAB}-${el}`);\n this.spans[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n this.initTabCloseButton();\n this.initTabClickHandler();\n\n this.tabGroup.tabContainer.appendChild(this.element);\n }\n\n private initTabCloseButton() {\n const container = this.spans.close;\n if (this.closable) {\n const button = container.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n }\n\n private initTabClickHandler() {\n // Mouse up\n const tabClickHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.element.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if ((e.target as HTMLElement).matches(\"button\")) return;\n this.activate();\n }\n };\n this.element.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n }\n\n initWebview() {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function(e: Event) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function(e: Event) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(CLASSNAMES.VIEW);\n if (this.webviewAttributes) {\n const attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n\n setTitle(title: string) {\n if (this.isClosed) return;\n const span = this.spans.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle() {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge(badge?: Badge) {\n if (this.isClosed) return;\n const span = this.spans.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge.text;\n span.classList.add(badge.classname);\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge() {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon(iconURL: string, icon: string) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n const span = this.spans.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon() {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition(newPosition: number) {\n const tabContainer = this.tabGroup.tabContainer;\n const length = tabContainer.childElementCount;\n const thisPosition = this.getPosition();\n const tabs = Array.from(tabContainer.children)\n tabs.splice(thisPosition, 1);\n\n if (newPosition < 0) {\n newPosition += length;\n if (newPosition < 0) {\n newPosition = 0;\n }\n }\n\n if (newPosition < length) {\n tabContainer.insertBefore(this.element, tabs[newPosition]);\n } else {\n tabContainer.appendChild(this.element);\n }\n\n return this;\n }\n\n getPosition(fromRight = false) {\n let position = 0;\n let tab = this.element;\n while ((tab = tab.previousSibling as HTMLDivElement) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n return position;\n }\n\n activate() {\n if (this.isClosed) return;\n const activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.element.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n this.tabGroup.setActiveTab(this);\n this.element.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show(flag = true) {\n if (this.isClosed) return;\n if (flag) {\n this.element.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.element.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide() {\n return this.show(false);\n }\n\n flash(flag = true) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.element.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.element.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash() {\n return this.flash(false);\n }\n\n hasClass(classname: string) {\n return this.element.classList.contains(classname);\n }\n\n close(force: boolean) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n const tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.element);\n tabGroup.viewContainer.removeChild(this.webview);\n const activeTab = this.tabGroup.getActiveTab();\n tabGroup.removeTab(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n tabGroup.activateRecentTab();\n }\n }\n}\n\ncustomElements.define(\"tab-group\", TabGroup);\n\nexport type { TabGroup, Tab };\n"],"names":[],"version":3,"file":"electron-tabs.d.ts.map","sourceRoot":"../"} \ No newline at end of file diff --git a/dist/electron-tabs.js b/dist/electron-tabs.js index 4780ee0..218e61f 100644 --- a/dist/electron-tabs.js +++ b/dist/electron-tabs.js @@ -2499,7 +2499,7 @@ var $64afbd09cd65a300$export$2e2bcd8739ae039 = $64afbd09cd65a300$export$31b3ca70 var $0648b347057451f2$exports = {}; -$0648b347057451f2$exports = ":host {\n --tabgroup-background: #e7eaed;\n --tab-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n --tab-font-size: 13px;\n --tab-background: #e7eaed;\n --tab-color: #696a6c;\n --tab-border-color: #dadce0;\n --tab-transition: background-color 150ms ease-out;\n --tab-cursor: pointer;\n --tab-active-color: currentcolor;\n --tab-active-background: #fff;\n --tag-hover-color: currentcolor;\n --tag-hover-background: #f1f3f4;\n --tab-flash-color: #696a6c;\n --tab-flash-background: #fff3aa;\n --tab-flash-hover-color: #696a6c;\n --tab-flash-hover-background: #ffe325;\n --button-font-size: 15px;\n --button-background: none;\n --button-color: #696a6c;\n --button-hover-background: #dadce0;\n --button-hover-color: #383a3e;\n --button-border-radius: 50%;\n --button-cursor: pointer;\n --badge-background: #383a3e;\n --badge-color: #fff;\n}\n\nwebview {\n visibility: hidden;\n width: 100%;\n height: 100%;\n position: absolute;\n}\n\nwebview.visible {\n visibility: visible;\n}\n\n.etabs {\n font-family: var(--tab-font-family);\n text-rendering: optimizelegibility;\n font-feature-settings: \"liga\", \"clig\", \"kern\";\n}\n\n.nav {\n background: var(--tabgroup-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n border-top: 1px solid var(--tab-border-color);\n font-size: var(--tab-font-size);\n width: 100%;\n height: 32px;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.nav.visible {\n display: flex;\n}\n\n.tabs {\n height: 100%;\n}\n\n.tab {\n background: var(--tab-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n color: var(--tab-color);\n cursor: var(--tab-cursor);\n font-size: var(--tab-font-size);\n transition: var(--tab-transition);\n box-sizing: border-box;\n height: 100%;\n align-items: center;\n padding: 5px 9px;\n display: none;\n position: relative;\n}\n\n.tab:first-child {\n border-left: none;\n}\n\n.tab.visible {\n display: inline-flex;\n}\n\n.tab.active {\n color: var(--tab-active-color);\n background: var(--tab-active-background);\n border-left: 1px solid var(--tab-border-color);\n border-right: 1px solid var(--tab-border-color);\n box-shadow: none;\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.tab.active:last-child {\n border-right: none;\n}\n\n.tab.flash {\n background: var(--tab-flash-background);\n color: var(--tab-flash-color);\n transition: all .5s linear;\n}\n\n.tab.tab.flash:hover {\n background: var(--tab-flash-hover-background);\n color: var(--tab-flash-hover-color);\n}\n\n.tab.visible:not(.active) + .tab.visible:not(.active) {\n border-left: 1px solid var(--tab-border-color);\n padding-left: 8px;\n}\n\n.tab:not(.active):hover {\n background: var(--tab-hover-background);\n color: var(--tab-hover-color);\n}\n\n.tab-badge {\n background: var(--badge-background);\n color: var(--badge-color);\n text-align: center;\n border-radius: 5px;\n margin-left: 5px;\n padding: 1px 4px;\n font-size: 8px;\n font-weight: bold;\n line-height: 1.2;\n}\n\n.tab-badge.hidden {\n display: none;\n}\n\n.tab-icon {\n height: 16px;\n display: inline-block;\n}\n\n.tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.tab-title, .tab-close {\n margin-left: 10px;\n display: inline-block;\n}\n\n.tab-close button {\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n color: var(--button-color);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n padding: 1px 0 0;\n display: inline-block;\n}\n\n.tab-close button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.buttons {\n border-left: 1px solid var(--tab-border-color);\n padding: 5px;\n display: flex;\n}\n\n.buttons button {\n color: var(--button-color);\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n margin: 0;\n padding: 1px 0 0;\n font-family: inherit;\n line-height: 1;\n display: block;\n}\n\n.buttons button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.views {\n height: calc(100vh - 33px);\n position: relative;\n}\n\n"; +$0648b347057451f2$exports = ":host {\n --tabgroup-background: #e7eaed;\n --tab-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n --tab-font-size: 13px;\n --tab-background: #e7eaed;\n --tab-color: #696a6c;\n --tab-border-color: #dadce0;\n --tab-transition: background-color 200ms ease-out, color 200ms ease-out;\n --tab-cursor: pointer;\n --tab-active-color: currentcolor;\n --tab-active-background: #fff;\n --tag-hover-color: currentcolor;\n --tag-hover-background: #f1f3f4;\n --tab-flash-color: #696a6c;\n --tab-flash-background: #fff3aa;\n --tab-flash-hover-color: #696a6c;\n --tab-flash-hover-background: #ffe325;\n --button-font-size: 15px;\n --button-background: none;\n --button-color: #696a6c;\n --button-hover-background: #dadce0;\n --button-hover-color: #383a3e;\n --button-border-radius: 50%;\n --button-cursor: pointer;\n --badge-background: #383a3e;\n --badge-color: #fff;\n}\n\nwebview {\n visibility: hidden;\n width: 100%;\n height: 100%;\n position: absolute;\n}\n\nwebview.visible {\n visibility: visible;\n}\n\n.etabs {\n font-family: var(--tab-font-family);\n text-rendering: optimizelegibility;\n font-feature-settings: \"liga\", \"clig\", \"kern\";\n}\n\n.nav {\n background: var(--tabgroup-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n border-top: 1px solid var(--tab-border-color);\n font-size: var(--tab-font-size);\n width: 100%;\n height: 32px;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.nav.visible {\n display: flex;\n}\n\n.tabs {\n height: 100%;\n}\n\n.tab {\n background: var(--tab-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n color: var(--tab-color);\n cursor: var(--tab-cursor);\n font-size: var(--tab-font-size);\n transition: var(--tab-transition);\n box-sizing: border-box;\n height: 100%;\n align-items: center;\n padding: 5px 9px;\n display: none;\n position: relative;\n}\n\n.tab:first-child {\n border-left: none;\n}\n\n.tab.visible {\n display: inline-flex;\n}\n\n.tab.active {\n color: var(--tab-active-color);\n background: var(--tab-active-background);\n border-left: 1px solid var(--tab-border-color);\n border-right: 1px solid var(--tab-border-color);\n box-shadow: none;\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.tab.active:last-child {\n border-right: none;\n}\n\n.tab.flash {\n background: var(--tab-flash-background);\n color: var(--tab-flash-color);\n}\n\n.tab.tab.flash:hover {\n background: var(--tab-flash-hover-background);\n color: var(--tab-flash-hover-color);\n}\n\n.tab.visible:not(.active) + .tab.visible:not(.active) {\n border-left: 1px solid var(--tab-border-color);\n padding-left: 8px;\n}\n\n.tab:not(.active):hover {\n background: var(--tab-hover-background);\n color: var(--tab-hover-color);\n}\n\n.tab-badge {\n background: var(--badge-background);\n color: var(--badge-color);\n text-align: center;\n border-radius: 5px;\n margin-left: 5px;\n padding: 1px 4px;\n font-size: 8px;\n font-weight: bold;\n line-height: 1.2;\n}\n\n.tab-badge.hidden {\n display: none;\n}\n\n.tab-icon {\n height: 16px;\n display: inline-block;\n}\n\n.tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.tab-title, .tab-close {\n margin-left: 10px;\n display: inline-block;\n}\n\n.tab-close button {\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n color: var(--button-color);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n padding: 1px 0 0;\n display: inline-block;\n}\n\n.tab-close button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.buttons {\n border-left: 1px solid var(--tab-border-color);\n padding: 5px;\n display: flex;\n}\n\n.buttons button {\n color: var(--button-color);\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n margin: 0;\n padding: 1px 0 0;\n font-family: inherit;\n line-height: 1;\n display: block;\n}\n\n.buttons button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.views {\n height: calc(100vh - 33px);\n position: relative;\n}\n\n"; if (!document) throw Error("electron-tabs module must be called in renderer process"); @@ -2692,7 +2692,7 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { this.id = id; this.isClosed = false; this.isReady = false; - this.tabElements = {}; + this.spans = {}; this.tabGroup = tabGroup; this.title = args.title; this.webviewAttributes = args.webviewAttributes || {}; @@ -2715,7 +2715,7 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { }); } initTab() { - const tab = this.tab = document.createElement("div"); + const tab = this.element = document.createElement("div"); tab.classList.add($eda442ba39f881a8$var$CLASSNAMES.TAB); for (let el of [ "icon", @@ -2725,17 +2725,17 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { ]){ const span = tab.appendChild(document.createElement("span")); span.classList.add(`${$eda442ba39f881a8$var$CLASSNAMES.TAB}-${el}`); - this.tabElements[el] = span; + this.spans[el] = span; } this.setTitle(this.title); this.setBadge(this.badge); this.setIcon(this.iconURL, this.icon); this.initTabCloseButton(); this.initTabClickHandler(); - this.tabGroup.tabContainer.appendChild(this.tab); + this.tabGroup.tabContainer.appendChild(this.element); } initTabCloseButton() { - const container = this.tabElements.close; + const container = this.spans.close; if (this.closable) { const button = container.appendChild(document.createElement("button")); button.innerHTML = this.tabGroup.options.closeButtonText; @@ -2748,7 +2748,7 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { if (this.isClosed) return; if (e.which === 2) this.close(); }; - this.tab.addEventListener("mouseup", tabClickHandler.bind(this), false); + this.element.addEventListener("mouseup", tabClickHandler.bind(this), false); // Mouse down const tabMouseDownHandler = function(e) { if (this.isClosed) return; @@ -2757,7 +2757,7 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { this.activate(); } }; - this.tab.addEventListener("mousedown", tabMouseDownHandler.bind(this), false); + this.element.addEventListener("mousedown", tabMouseDownHandler.bind(this), false); } initWebview() { const webview = this.webview = document.createElement("webview"); @@ -2785,7 +2785,7 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { } setTitle(title) { if (this.isClosed) return; - const span = this.tabElements.title; + const span = this.spans.title; span.innerHTML = title; span.title = title; this.title = title; @@ -2798,7 +2798,7 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { } setBadge(badge) { if (this.isClosed) return; - const span = this.tabElements.badge; + const span = this.spans.badge; this.badge = badge; if (badge) { span.innerHTML = badge.text; @@ -2815,7 +2815,7 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { if (this.isClosed) return; this.iconURL = iconURL; this.icon = icon; - const span = this.tabElements.icon; + const span = this.spans.icon; if (iconURL) { span.innerHTML = ``; this.emit("icon-changed", iconURL, this); @@ -2840,13 +2840,13 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { newPosition += length; if (newPosition < 0) newPosition = 0; } - if (newPosition < length) tabContainer.insertBefore(this.tab, tabs[newPosition]); - else tabContainer.appendChild(this.tab); + if (newPosition < length) tabContainer.insertBefore(this.element, tabs[newPosition]); + else tabContainer.appendChild(this.element); return this; } getPosition(fromRight = false) { let position = 0; - let tab = this.tab; + let tab = this.element; while((tab = tab.previousSibling) != null)position++; if (fromRight === true) position -= this.tabGroup.tabContainer.childElementCount; return position; @@ -2855,12 +2855,12 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { if (this.isClosed) return; const activeTab = this.tabGroup.getActiveTab(); if (activeTab) { - activeTab.tab.classList.remove("active"); + activeTab.element.classList.remove("active"); activeTab.webview.classList.remove("visible"); activeTab.emit("inactive", activeTab); } this.tabGroup.setActiveTab(this); - this.tab.classList.add("active"); + this.element.classList.add("active"); this.webview.classList.add("visible"); this.webview.focus(); this.emit("active", this); @@ -2869,10 +2869,10 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { show(flag = true) { if (this.isClosed) return; if (flag) { - this.tab.classList.add("visible"); + this.element.classList.add("visible"); this.emit("visible", this); } else { - this.tab.classList.remove("visible"); + this.element.classList.remove("visible"); this.emit("hidden", this); } return this; @@ -2883,10 +2883,10 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { flash(flag = true) { if (this.isClosed) return; if (flag !== false) { - this.tab.classList.add("flash"); + this.element.classList.add("flash"); this.emit("flash", this); } else { - this.tab.classList.remove("flash"); + this.element.classList.remove("flash"); this.emit("unflash", this); } return this; @@ -2895,7 +2895,7 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { return this.flash(false); } hasClass(classname) { - return this.tab.classList.contains(classname); + return this.element.classList.contains(classname); } close(force) { const abortController = new AbortController(); @@ -2906,7 +2906,7 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { if (this.isClosed || !this.closable && !force || abortSignal.aborted) return; this.isClosed = true; const tabGroup = this.tabGroup; - tabGroup.tabContainer.removeChild(this.tab); + tabGroup.tabContainer.removeChild(this.element); tabGroup.viewContainer.removeChild(this.webview); const activeTab = this.tabGroup.getActiveTab(); tabGroup.removeTab(this, true); diff --git a/dist/electron-tabs.js.map b/dist/electron-tabs.js.map index 2d6b622..cb6d04d 100644 --- a/dist/electron-tabs.js.map +++ b/dist/electron-tabs.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["src/index.ts","node_modules/sortablejs/modular/sortable.esm.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-82301af45c0136ec.js"],"sourcesContent":["import Sortable from \"sortablejs\";\n// @ts-ignore\nimport styles from \"bundle-text:./style.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\ninterface TabGroupOptions {\n closeButtonText: string,\n defaultTab: TabOptions | ((tabGroup: TabGroup) => TabOptions),\n newTabButton: boolean,\n newTabButtonText: string,\n sortable: boolean,\n sortableOptions?: Sortable.Options\n visibilityThreshold: number,\n}\n\ninterface TabOptions {\n active?: boolean;\n badge?: Badge;\n closable?: boolean;\n icon?: string;\n iconURL?: string;\n ready?: ((tab: Tab) => void);\n src?: string;\n title?: string;\n visible?: boolean;\n webviewAttributes?: { [key: string]: any };\n}\n\ninterface Badge {\n text: string,\n classname: string\n}\n\nconst CLASSNAMES = {\n ROOT: \"etabs\",\n NAV: \"nav\",\n TABS: \"tabs\",\n TAB: \"tab\",\n BUTTONS: \"buttons\",\n VIEWS: \"views\",\n VIEW: \"view\"\n}\n\nfunction emit(emitter: TabGroup | Tab, type: string, args: any[]) {\n if (type === \"ready\") {\n emitter.isReady = true;\n }\n emitter.dispatchEvent(new CustomEvent(type, { detail: args }));\n}\n\nfunction on(emitter: TabGroup | Tab, type: string, fn: (detail: string) => void, options?: { [key: string]: any }) {\n if (type === \"ready\" && emitter.isReady === true) {\n fn.apply(emitter, [emitter]);\n }\n emitter.addEventListener(type, ((e: CustomEvent) => fn.apply(emitter, e.detail)) as EventListener, options);\n}\n\nclass TabGroup extends HTMLElement {\n buttonContainer: HTMLDivElement;\n isReady: boolean;\n newTabId: number;\n options: TabGroupOptions;\n shadow: ShadowRoot;\n tabContainer: HTMLDivElement;\n tabs: Array;\n viewContainer: HTMLDivElement;\n\n constructor() {\n super();\n\n this.isReady = false;\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n defaultTab: { title: \"New Tab\", active: true },\n newTabButton: !!this.getAttribute(\"new-tab-button\") === true || false,\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n sortable: !!this.getAttribute(\"sortable\") === true || false,\n visibilityThreshold: Number(this.getAttribute(\"visibility-threshold\")) || 0\n };\n\n this.tabs = [];\n this.newTabId = 0;\n\n this.createComponent();\n this.initVisibility();\n if (this.options.sortable) {\n this.initSortable();\n }\n\n this.emit(\"ready\", this);\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n connectedCallback() {\n // Support custom styles\n const style = this.querySelector(\"style\");\n if (style) {\n this.shadow.appendChild(style);\n }\n }\n\n private createComponent() {\n const shadow = this.attachShadow({mode: \"open\"});\n this.shadow = shadow;\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", CLASSNAMES.ROOT);\n\n const tabgroup = document.createElement(\"nav\");\n tabgroup.setAttribute(\"class\", CLASSNAMES.NAV);\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", CLASSNAMES.TABS);\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", CLASSNAMES.BUTTONS);\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n if (this.options.newTabButton) {\n const button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n }\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", CLASSNAMES.VIEWS);\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n }\n\n private initVisibility() {\n function toggleTabsVisibility(tab: Tab, tabGroup: TabGroup) {\n const visibilityThreshold = this.options.visibilityThreshold;\n const el = tabGroup.tabContainer.parentElement;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n }\n\n initSortable() {\n const createNewSortable = () => {\n const options = Object.assign({\n direction: \"horizontal\",\n animation: 150,\n swapThreshold: 0.20\n }, this.options.sortableOptions);\n new Sortable(this.tabContainer, options);\n };\n\n if (Sortable) {\n createNewSortable();\n } else {\n document.addEventListener(\"DOMContentLoaded\", createNewSortable);\n }\n }\n\n setDefaultTab(tab: TabOptions) {\n this.options.defaultTab = tab;\n }\n\n addTab(args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n const id = this.newTabId;\n this.newTabId++;\n const tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab(id: number) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition(position: number) {\n const fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition(position: number) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab() {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab() {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs() {\n return this.tabs.slice();\n }\n\n eachTab(fn: (tab: Tab) => void) {\n this.getTabs().forEach(fn);\n }\n\n getActiveTab() {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n\n setActiveTab(tab: Tab) {\n this.removeTab(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n }\n\n removeTab(tab: Tab, triggerEvent = false) {\n const id = tab.id;\n const index = this.tabs.findIndex((t: Tab) => t.id === id);\n this.tabs.splice(index, 1);\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n }\n\n activateRecentTab() {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n }\n}\n\nclass Tab extends EventTarget {\n badge: Badge;\n closable: boolean;\n icon: string;\n iconURL: string;\n id: number;\n isClosed: boolean;\n isReady: boolean;\n tab: HTMLDivElement;\n tabElements: { [key: string]: HTMLSpanElement };\n tabGroup: TabGroup;\n title: string;\n webview: HTMLElement;\n webviewAttributes: { [key: string]: any };\n\n constructor(tabGroup: TabGroup, id: number, args: TabOptions) {\n super();\n this.badge = args.badge;\n this.closable = args.closable === false ? false : true;\n this.icon = args.icon;\n this.iconURL = args.iconURL;\n this.id = id;\n this.isClosed = false;\n this.isReady = false;\n this.tabElements = {};\n this.tabGroup = tabGroup;\n this.title = args.title;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n\n this.initTab();\n this.initWebview();\n\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n } else {\n this.emit(\"ready\", this);\n }\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n private initTab() {\n const tab = this.tab = document.createElement(\"div\");\n tab.classList.add(CLASSNAMES.TAB);\n for (let el of [\"icon\", \"title\", \"badge\", \"close\"]) {\n const span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${CLASSNAMES.TAB}-${el}`);\n this.tabElements[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n this.initTabCloseButton();\n this.initTabClickHandler();\n\n this.tabGroup.tabContainer.appendChild(this.tab);\n }\n\n private initTabCloseButton() {\n const container = this.tabElements.close;\n if (this.closable) {\n const button = container.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n }\n\n private initTabClickHandler() {\n // Mouse up\n const tabClickHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.tab.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if ((e.target as HTMLElement).matches(\"button\")) return;\n this.activate();\n }\n };\n this.tab.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n }\n\n initWebview() {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function(e: Event) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function(e: Event) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(CLASSNAMES.VIEW);\n if (this.webviewAttributes) {\n const attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n\n setTitle(title: string) {\n if (this.isClosed) return;\n const span = this.tabElements.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle() {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge(badge?: Badge) {\n if (this.isClosed) return;\n const span = this.tabElements.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge.text;\n span.classList.add(badge.classname);\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge() {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon(iconURL: string, icon: string) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n const span = this.tabElements.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon() {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition(newPosition: number) {\n const tabContainer = this.tabGroup.tabContainer;\n const length = tabContainer.childElementCount;\n const thisPosition = this.getPosition();\n const tabs = Array.from(tabContainer.children)\n tabs.splice(thisPosition, 1);\n\n if (newPosition < 0) {\n newPosition += length;\n if (newPosition < 0) {\n newPosition = 0;\n }\n }\n\n if (newPosition < length) {\n tabContainer.insertBefore(this.tab, tabs[newPosition]);\n } else {\n tabContainer.appendChild(this.tab);\n }\n\n return this;\n }\n\n getPosition(fromRight = false) {\n let position = 0;\n let tab = this.tab;\n while ((tab = tab.previousSibling as HTMLDivElement) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n return position;\n }\n\n activate() {\n if (this.isClosed) return;\n const activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.tab.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n this.tabGroup.setActiveTab(this);\n this.tab.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show(flag = true) {\n if (this.isClosed) return;\n if (flag) {\n this.tab.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.tab.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide() {\n return this.show(false);\n }\n\n flash(flag = true) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.tab.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.tab.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash() {\n return this.flash(false);\n }\n\n hasClass(classname: string) {\n return this.tab.classList.contains(classname);\n }\n\n close(force: boolean) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n const tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.tab);\n tabGroup.viewContainer.removeChild(this.webview);\n const activeTab = this.tabGroup.getActiveTab();\n tabGroup.removeTab(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n tabGroup.activateRecentTab();\n }\n }\n}\n\ncustomElements.define(\"tab-group\", TabGroup);\n\nexport type { TabGroup, Tab };\n","/**!\n * Sortable 1.15.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.15.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/**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\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 && !ChromeForAndroid) {\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/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\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.removeAttribute(\"id\");\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\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n\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 /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\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 /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\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 /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\r\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.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\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 /**\r\n * Destroy\r\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/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\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/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\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/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\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.avoidImplicitDeselect) {\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\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\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 originalEvent: 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 originalEvent: 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 originalEvent: 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 originalEvent: 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 /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\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 /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\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/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\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","module.exports = \"605b1218c05c82dd\";"],"names":[],"version":3,"file":"electron-tabs.js.map","sourceRoot":"../"} \ No newline at end of file +{"mappings":"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","sources":["src/index.ts","node_modules/sortablejs/modular/sortable.esm.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-82301af45c0136ec.js"],"sourcesContent":["import Sortable from \"sortablejs\";\n// @ts-ignore\nimport styles from \"bundle-text:./style.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\ninterface TabGroupOptions {\n closeButtonText: string,\n defaultTab: TabOptions | ((tabGroup: TabGroup) => TabOptions),\n newTabButton: boolean,\n newTabButtonText: string,\n sortable: boolean,\n sortableOptions?: Sortable.Options\n visibilityThreshold: number,\n}\n\ninterface TabOptions {\n active?: boolean;\n badge?: Badge;\n closable?: boolean;\n icon?: string;\n iconURL?: string;\n ready?: ((tab: Tab) => void);\n src?: string;\n title?: string;\n visible?: boolean;\n webviewAttributes?: { [key: string]: any };\n}\n\ninterface Badge {\n text: string,\n classname: string\n}\n\nconst CLASSNAMES = {\n ROOT: \"etabs\",\n NAV: \"nav\",\n TABS: \"tabs\",\n TAB: \"tab\",\n BUTTONS: \"buttons\",\n VIEWS: \"views\",\n VIEW: \"view\"\n}\n\nfunction emit(emitter: TabGroup | Tab, type: string, args: any[]) {\n if (type === \"ready\") {\n emitter.isReady = true;\n }\n emitter.dispatchEvent(new CustomEvent(type, { detail: args }));\n}\n\nfunction on(emitter: TabGroup | Tab, type: string, fn: (detail: string) => void, options?: { [key: string]: any }) {\n if (type === \"ready\" && emitter.isReady === true) {\n fn.apply(emitter, [emitter]);\n }\n emitter.addEventListener(type, ((e: CustomEvent) => fn.apply(emitter, e.detail)) as EventListener, options);\n}\n\nclass TabGroup extends HTMLElement {\n buttonContainer: HTMLDivElement;\n isReady: boolean;\n newTabId: number;\n options: TabGroupOptions;\n shadow: ShadowRoot;\n tabContainer: HTMLDivElement;\n tabs: Array;\n viewContainer: HTMLDivElement;\n\n constructor() {\n super();\n\n this.isReady = false;\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n defaultTab: { title: \"New Tab\", active: true },\n newTabButton: !!this.getAttribute(\"new-tab-button\") === true || false,\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n sortable: !!this.getAttribute(\"sortable\") === true || false,\n visibilityThreshold: Number(this.getAttribute(\"visibility-threshold\")) || 0\n };\n\n this.tabs = [];\n this.newTabId = 0;\n\n this.createComponent();\n this.initVisibility();\n if (this.options.sortable) {\n this.initSortable();\n }\n\n this.emit(\"ready\", this);\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n connectedCallback() {\n // Support custom styles\n const style = this.querySelector(\"style\");\n if (style) {\n this.shadow.appendChild(style);\n }\n }\n\n private createComponent() {\n const shadow = this.attachShadow({mode: \"open\"});\n this.shadow = shadow;\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", CLASSNAMES.ROOT);\n\n const tabgroup = document.createElement(\"nav\");\n tabgroup.setAttribute(\"class\", CLASSNAMES.NAV);\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", CLASSNAMES.TABS);\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", CLASSNAMES.BUTTONS);\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n if (this.options.newTabButton) {\n const button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n }\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", CLASSNAMES.VIEWS);\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n }\n\n private initVisibility() {\n function toggleTabsVisibility(tab: Tab, tabGroup: TabGroup) {\n const visibilityThreshold = this.options.visibilityThreshold;\n const el = tabGroup.tabContainer.parentElement;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n }\n\n initSortable() {\n const createNewSortable = () => {\n const options = Object.assign({\n direction: \"horizontal\",\n animation: 150,\n swapThreshold: 0.20\n }, this.options.sortableOptions);\n new Sortable(this.tabContainer, options);\n };\n\n if (Sortable) {\n createNewSortable();\n } else {\n document.addEventListener(\"DOMContentLoaded\", createNewSortable);\n }\n }\n\n setDefaultTab(tab: TabOptions) {\n this.options.defaultTab = tab;\n }\n\n addTab(args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n const id = this.newTabId;\n this.newTabId++;\n const tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab(id: number) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition(position: number) {\n const fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition(position: number) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab() {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab() {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs() {\n return this.tabs.slice();\n }\n\n eachTab(fn: (tab: Tab) => void) {\n this.getTabs().forEach(fn);\n }\n\n getActiveTab() {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n\n setActiveTab(tab: Tab) {\n this.removeTab(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n }\n\n removeTab(tab: Tab, triggerEvent = false) {\n const id = tab.id;\n const index = this.tabs.findIndex((t: Tab) => t.id === id);\n this.tabs.splice(index, 1);\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n }\n\n activateRecentTab() {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n }\n}\n\nclass Tab extends EventTarget {\n badge: Badge;\n closable: boolean;\n element: HTMLDivElement;\n icon: string;\n iconURL: string;\n id: number;\n isClosed: boolean;\n isReady: boolean;\n spans: { [key: string]: HTMLSpanElement };\n tabGroup: TabGroup;\n title: string;\n webview: HTMLElement;\n webviewAttributes: { [key: string]: any };\n\n constructor(tabGroup: TabGroup, id: number, args: TabOptions) {\n super();\n this.badge = args.badge;\n this.closable = args.closable === false ? false : true;\n this.icon = args.icon;\n this.iconURL = args.iconURL;\n this.id = id;\n this.isClosed = false;\n this.isReady = false;\n this.spans = {};\n this.tabGroup = tabGroup;\n this.title = args.title;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n\n this.initTab();\n this.initWebview();\n\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n } else {\n this.emit(\"ready\", this);\n }\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n private initTab() {\n const tab = this.element = document.createElement(\"div\");\n tab.classList.add(CLASSNAMES.TAB);\n for (let el of [\"icon\", \"title\", \"badge\", \"close\"]) {\n const span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${CLASSNAMES.TAB}-${el}`);\n this.spans[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n this.initTabCloseButton();\n this.initTabClickHandler();\n\n this.tabGroup.tabContainer.appendChild(this.element);\n }\n\n private initTabCloseButton() {\n const container = this.spans.close;\n if (this.closable) {\n const button = container.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n }\n\n private initTabClickHandler() {\n // Mouse up\n const tabClickHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.element.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if ((e.target as HTMLElement).matches(\"button\")) return;\n this.activate();\n }\n };\n this.element.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n }\n\n initWebview() {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function(e: Event) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function(e: Event) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(CLASSNAMES.VIEW);\n if (this.webviewAttributes) {\n const attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n\n setTitle(title: string) {\n if (this.isClosed) return;\n const span = this.spans.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle() {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge(badge?: Badge) {\n if (this.isClosed) return;\n const span = this.spans.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge.text;\n span.classList.add(badge.classname);\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge() {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon(iconURL: string, icon: string) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n const span = this.spans.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon() {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition(newPosition: number) {\n const tabContainer = this.tabGroup.tabContainer;\n const length = tabContainer.childElementCount;\n const thisPosition = this.getPosition();\n const tabs = Array.from(tabContainer.children)\n tabs.splice(thisPosition, 1);\n\n if (newPosition < 0) {\n newPosition += length;\n if (newPosition < 0) {\n newPosition = 0;\n }\n }\n\n if (newPosition < length) {\n tabContainer.insertBefore(this.element, tabs[newPosition]);\n } else {\n tabContainer.appendChild(this.element);\n }\n\n return this;\n }\n\n getPosition(fromRight = false) {\n let position = 0;\n let tab = this.element;\n while ((tab = tab.previousSibling as HTMLDivElement) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n return position;\n }\n\n activate() {\n if (this.isClosed) return;\n const activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.element.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n this.tabGroup.setActiveTab(this);\n this.element.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show(flag = true) {\n if (this.isClosed) return;\n if (flag) {\n this.element.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.element.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide() {\n return this.show(false);\n }\n\n flash(flag = true) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.element.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.element.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash() {\n return this.flash(false);\n }\n\n hasClass(classname: string) {\n return this.element.classList.contains(classname);\n }\n\n close(force: boolean) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n const tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.element);\n tabGroup.viewContainer.removeChild(this.webview);\n const activeTab = this.tabGroup.getActiveTab();\n tabGroup.removeTab(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n tabGroup.activateRecentTab();\n }\n }\n}\n\ncustomElements.define(\"tab-group\", TabGroup);\n\nexport type { TabGroup, Tab };\n","/**!\n * Sortable 1.15.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.15.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/**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\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 && !ChromeForAndroid) {\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/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\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.removeAttribute(\"id\");\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\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n\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 /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\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 /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\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 /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\r\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.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\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 /**\r\n * Destroy\r\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/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\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/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\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/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\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.avoidImplicitDeselect) {\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\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\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 originalEvent: 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 originalEvent: 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 originalEvent: 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 originalEvent: 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 /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\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 /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\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/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\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","module.exports = \"605b1218c05c82dd\";"],"names":[],"version":3,"file":"electron-tabs.js.map","sourceRoot":"../"} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 63cb68f..e6700cb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -279,13 +279,13 @@ class TabGroup extends HTMLElement { class Tab extends EventTarget { badge: Badge; closable: boolean; + element: HTMLDivElement; icon: string; iconURL: string; id: number; isClosed: boolean; isReady: boolean; - tab: HTMLDivElement; - tabElements: { [key: string]: HTMLSpanElement }; + spans: { [key: string]: HTMLSpanElement }; tabGroup: TabGroup; title: string; webview: HTMLElement; @@ -300,7 +300,7 @@ class Tab extends EventTarget { this.id = id; this.isClosed = false; this.isReady = false; - this.tabElements = {}; + this.spans = {}; this.tabGroup = tabGroup; this.title = args.title; this.webviewAttributes = args.webviewAttributes || {}; @@ -332,12 +332,12 @@ class Tab extends EventTarget { } private initTab() { - const tab = this.tab = document.createElement("div"); + const tab = this.element = document.createElement("div"); tab.classList.add(CLASSNAMES.TAB); for (let el of ["icon", "title", "badge", "close"]) { const span = tab.appendChild(document.createElement("span")); span.classList.add(`${CLASSNAMES.TAB}-${el}`); - this.tabElements[el] = span; + this.spans[el] = span; } this.setTitle(this.title); @@ -346,11 +346,11 @@ class Tab extends EventTarget { this.initTabCloseButton(); this.initTabClickHandler(); - this.tabGroup.tabContainer.appendChild(this.tab); + this.tabGroup.tabContainer.appendChild(this.element); } private initTabCloseButton() { - const container = this.tabElements.close; + const container = this.spans.close; if (this.closable) { const button = container.appendChild(document.createElement("button")); button.innerHTML = this.tabGroup.options.closeButtonText; @@ -366,7 +366,7 @@ class Tab extends EventTarget { this.close(); } }; - this.tab.addEventListener("mouseup", tabClickHandler.bind(this), false); + this.element.addEventListener("mouseup", tabClickHandler.bind(this), false); // Mouse down const tabMouseDownHandler = function(e: KeyboardEvent) { if (this.isClosed) return; @@ -375,7 +375,7 @@ class Tab extends EventTarget { this.activate(); } }; - this.tab.addEventListener("mousedown", tabMouseDownHandler.bind(this), false); + this.element.addEventListener("mousedown", tabMouseDownHandler.bind(this), false); } initWebview() { @@ -411,7 +411,7 @@ class Tab extends EventTarget { setTitle(title: string) { if (this.isClosed) return; - const span = this.tabElements.title; + const span = this.spans.title; span.innerHTML = title; span.title = title; this.title = title; @@ -426,7 +426,7 @@ class Tab extends EventTarget { setBadge(badge?: Badge) { if (this.isClosed) return; - const span = this.tabElements.badge; + const span = this.spans.badge; this.badge = badge; if (badge) { @@ -449,7 +449,7 @@ class Tab extends EventTarget { if (this.isClosed) return; this.iconURL = iconURL; this.icon = icon; - const span = this.tabElements.icon; + const span = this.spans.icon; if (iconURL) { span.innerHTML = ``; this.emit("icon-changed", iconURL, this); @@ -482,9 +482,9 @@ class Tab extends EventTarget { } if (newPosition < length) { - tabContainer.insertBefore(this.tab, tabs[newPosition]); + tabContainer.insertBefore(this.element, tabs[newPosition]); } else { - tabContainer.appendChild(this.tab); + tabContainer.appendChild(this.element); } return this; @@ -492,7 +492,7 @@ class Tab extends EventTarget { getPosition(fromRight = false) { let position = 0; - let tab = this.tab; + let tab = this.element; while ((tab = tab.previousSibling as HTMLDivElement) != null) position++; if (fromRight === true) { @@ -506,12 +506,12 @@ class Tab extends EventTarget { if (this.isClosed) return; const activeTab = this.tabGroup.getActiveTab(); if (activeTab) { - activeTab.tab.classList.remove("active"); + activeTab.element.classList.remove("active"); activeTab.webview.classList.remove("visible"); activeTab.emit("inactive", activeTab); } this.tabGroup.setActiveTab(this); - this.tab.classList.add("active"); + this.element.classList.add("active"); this.webview.classList.add("visible"); this.webview.focus(); this.emit("active", this); @@ -521,10 +521,10 @@ class Tab extends EventTarget { show(flag = true) { if (this.isClosed) return; if (flag) { - this.tab.classList.add("visible"); + this.element.classList.add("visible"); this.emit("visible", this); } else { - this.tab.classList.remove("visible"); + this.element.classList.remove("visible"); this.emit("hidden", this); } return this; @@ -537,10 +537,10 @@ class Tab extends EventTarget { flash(flag = true) { if (this.isClosed) return; if (flag !== false) { - this.tab.classList.add("flash"); + this.element.classList.add("flash"); this.emit("flash", this); } else { - this.tab.classList.remove("flash"); + this.element.classList.remove("flash"); this.emit("unflash", this); } return this; @@ -551,7 +551,7 @@ class Tab extends EventTarget { } hasClass(classname: string) { - return this.tab.classList.contains(classname); + return this.element.classList.contains(classname); } close(force: boolean) { @@ -564,7 +564,7 @@ class Tab extends EventTarget { this.isClosed = true; const tabGroup = this.tabGroup; - tabGroup.tabContainer.removeChild(this.tab); + tabGroup.tabContainer.removeChild(this.element); tabGroup.viewContainer.removeChild(this.webview); const activeTab = this.tabGroup.getActiveTab(); tabGroup.removeTab(this, true); From 309e7bccb22f275506b7504c1dd846b4508e3faf Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Wed, 25 May 2022 15:14:37 +0200 Subject: [PATCH 31/35] Add custom class example in demo --- demo/electron-tabs.html | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/demo/electron-tabs.html b/demo/electron-tabs.html index ac9f0a7..e9a72ef 100644 --- a/demo/electron-tabs.html +++ b/demo/electron-tabs.html @@ -8,10 +8,15 @@ @@ -50,6 +55,14 @@ tab.flash(); } }); + + tabGroup.addTab({ + title: "My Custom Class", + src: "page.html", + ready: function(tab) { + tab.element.classList.add("my-custom-tab"); + } + }); From 3746aab271f599a38f898ebe01d1cc1134e7f9d1 Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Wed, 25 May 2022 15:18:35 +0200 Subject: [PATCH 32/35] Remove tab.flash (use custom class instead) --- demo/electron-tabs.html | 12 ++---------- dist/electron-tabs.d.ts | 2 -- dist/electron-tabs.d.ts.map | 2 +- dist/electron-tabs.js | 16 +--------------- dist/electron-tabs.js.map | 2 +- src/index.ts | 16 ---------------- src/style.css | 14 -------------- 7 files changed, 5 insertions(+), 59 deletions(-) diff --git a/demo/electron-tabs.html b/demo/electron-tabs.html index e9a72ef..ec9c68f 100644 --- a/demo/electron-tabs.html +++ b/demo/electron-tabs.html @@ -13,7 +13,7 @@ background-color: #327BB1; } .my-custom-tab { - color: red; + color: #d135d1; font-style: italic; font-weight: bold; } @@ -49,15 +49,7 @@ }); tabGroup.addTab({ - title: "Flashed Tab", - src: "page.html", - ready: function(tab) { - tab.flash(); - } - }); - - tabGroup.addTab({ - title: "My Custom Class", + title: "My Custom Tab", src: "page.html", ready: function(tab) { tab.element.classList.add("my-custom-tab"); diff --git a/dist/electron-tabs.d.ts b/dist/electron-tabs.d.ts index 8e46658..695e8a6 100644 --- a/dist/electron-tabs.d.ts +++ b/dist/electron-tabs.d.ts @@ -89,8 +89,6 @@ export class Tab extends EventTarget { activate(): this; show(flag?: boolean): this; hide(): this; - flash(flag?: boolean): this; - unflash(): this; hasClass(classname: string): boolean; close(force: boolean): void; } diff --git a/dist/electron-tabs.d.ts.map b/dist/electron-tabs.d.ts.map index 516d2b0..4688f4e 100644 --- a/dist/electron-tabs.d.ts.map +++ b/dist/electron-tabs.d.ts.map @@ -1 +1 @@ -{"mappings":"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","sources":["src/src/index.ts","src/index.ts"],"sourcesContent":[null,"import Sortable from \"sortablejs\";\n// @ts-ignore\nimport styles from \"bundle-text:./style.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\ninterface TabGroupOptions {\n closeButtonText: string,\n defaultTab: TabOptions | ((tabGroup: TabGroup) => TabOptions),\n newTabButton: boolean,\n newTabButtonText: string,\n sortable: boolean,\n sortableOptions?: Sortable.Options\n visibilityThreshold: number,\n}\n\ninterface TabOptions {\n active?: boolean;\n badge?: Badge;\n closable?: boolean;\n icon?: string;\n iconURL?: string;\n ready?: ((tab: Tab) => void);\n src?: string;\n title?: string;\n visible?: boolean;\n webviewAttributes?: { [key: string]: any };\n}\n\ninterface Badge {\n text: string,\n classname: string\n}\n\nconst CLASSNAMES = {\n ROOT: \"etabs\",\n NAV: \"nav\",\n TABS: \"tabs\",\n TAB: \"tab\",\n BUTTONS: \"buttons\",\n VIEWS: \"views\",\n VIEW: \"view\"\n}\n\nfunction emit(emitter: TabGroup | Tab, type: string, args: any[]) {\n if (type === \"ready\") {\n emitter.isReady = true;\n }\n emitter.dispatchEvent(new CustomEvent(type, { detail: args }));\n}\n\nfunction on(emitter: TabGroup | Tab, type: string, fn: (detail: string) => void, options?: { [key: string]: any }) {\n if (type === \"ready\" && emitter.isReady === true) {\n fn.apply(emitter, [emitter]);\n }\n emitter.addEventListener(type, ((e: CustomEvent) => fn.apply(emitter, e.detail)) as EventListener, options);\n}\n\nclass TabGroup extends HTMLElement {\n buttonContainer: HTMLDivElement;\n isReady: boolean;\n newTabId: number;\n options: TabGroupOptions;\n shadow: ShadowRoot;\n tabContainer: HTMLDivElement;\n tabs: Array;\n viewContainer: HTMLDivElement;\n\n constructor() {\n super();\n\n this.isReady = false;\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n defaultTab: { title: \"New Tab\", active: true },\n newTabButton: !!this.getAttribute(\"new-tab-button\") === true || false,\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n sortable: !!this.getAttribute(\"sortable\") === true || false,\n visibilityThreshold: Number(this.getAttribute(\"visibility-threshold\")) || 0\n };\n\n this.tabs = [];\n this.newTabId = 0;\n\n this.createComponent();\n this.initVisibility();\n if (this.options.sortable) {\n this.initSortable();\n }\n\n this.emit(\"ready\", this);\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n connectedCallback() {\n // Support custom styles\n const style = this.querySelector(\"style\");\n if (style) {\n this.shadow.appendChild(style);\n }\n }\n\n private createComponent() {\n const shadow = this.attachShadow({mode: \"open\"});\n this.shadow = shadow;\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", CLASSNAMES.ROOT);\n\n const tabgroup = document.createElement(\"nav\");\n tabgroup.setAttribute(\"class\", CLASSNAMES.NAV);\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", CLASSNAMES.TABS);\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", CLASSNAMES.BUTTONS);\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n if (this.options.newTabButton) {\n const button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n }\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", CLASSNAMES.VIEWS);\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n }\n\n private initVisibility() {\n function toggleTabsVisibility(tab: Tab, tabGroup: TabGroup) {\n const visibilityThreshold = this.options.visibilityThreshold;\n const el = tabGroup.tabContainer.parentElement;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n }\n\n initSortable() {\n const createNewSortable = () => {\n const options = Object.assign({\n direction: \"horizontal\",\n animation: 150,\n swapThreshold: 0.20\n }, this.options.sortableOptions);\n new Sortable(this.tabContainer, options);\n };\n\n if (Sortable) {\n createNewSortable();\n } else {\n document.addEventListener(\"DOMContentLoaded\", createNewSortable);\n }\n }\n\n setDefaultTab(tab: TabOptions) {\n this.options.defaultTab = tab;\n }\n\n addTab(args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n const id = this.newTabId;\n this.newTabId++;\n const tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab(id: number) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition(position: number) {\n const fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition(position: number) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab() {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab() {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs() {\n return this.tabs.slice();\n }\n\n eachTab(fn: (tab: Tab) => void) {\n this.getTabs().forEach(fn);\n }\n\n getActiveTab() {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n\n setActiveTab(tab: Tab) {\n this.removeTab(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n }\n\n removeTab(tab: Tab, triggerEvent = false) {\n const id = tab.id;\n const index = this.tabs.findIndex((t: Tab) => t.id === id);\n this.tabs.splice(index, 1);\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n }\n\n activateRecentTab() {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n }\n}\n\nclass Tab extends EventTarget {\n badge: Badge;\n closable: boolean;\n element: HTMLDivElement;\n icon: string;\n iconURL: string;\n id: number;\n isClosed: boolean;\n isReady: boolean;\n spans: { [key: string]: HTMLSpanElement };\n tabGroup: TabGroup;\n title: string;\n webview: HTMLElement;\n webviewAttributes: { [key: string]: any };\n\n constructor(tabGroup: TabGroup, id: number, args: TabOptions) {\n super();\n this.badge = args.badge;\n this.closable = args.closable === false ? false : true;\n this.icon = args.icon;\n this.iconURL = args.iconURL;\n this.id = id;\n this.isClosed = false;\n this.isReady = false;\n this.spans = {};\n this.tabGroup = tabGroup;\n this.title = args.title;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n\n this.initTab();\n this.initWebview();\n\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n } else {\n this.emit(\"ready\", this);\n }\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n private initTab() {\n const tab = this.element = document.createElement(\"div\");\n tab.classList.add(CLASSNAMES.TAB);\n for (let el of [\"icon\", \"title\", \"badge\", \"close\"]) {\n const span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${CLASSNAMES.TAB}-${el}`);\n this.spans[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n this.initTabCloseButton();\n this.initTabClickHandler();\n\n this.tabGroup.tabContainer.appendChild(this.element);\n }\n\n private initTabCloseButton() {\n const container = this.spans.close;\n if (this.closable) {\n const button = container.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n }\n\n private initTabClickHandler() {\n // Mouse up\n const tabClickHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.element.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if ((e.target as HTMLElement).matches(\"button\")) return;\n this.activate();\n }\n };\n this.element.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n }\n\n initWebview() {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function(e: Event) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function(e: Event) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(CLASSNAMES.VIEW);\n if (this.webviewAttributes) {\n const attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n\n setTitle(title: string) {\n if (this.isClosed) return;\n const span = this.spans.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle() {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge(badge?: Badge) {\n if (this.isClosed) return;\n const span = this.spans.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge.text;\n span.classList.add(badge.classname);\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge() {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon(iconURL: string, icon: string) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n const span = this.spans.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon() {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition(newPosition: number) {\n const tabContainer = this.tabGroup.tabContainer;\n const length = tabContainer.childElementCount;\n const thisPosition = this.getPosition();\n const tabs = Array.from(tabContainer.children)\n tabs.splice(thisPosition, 1);\n\n if (newPosition < 0) {\n newPosition += length;\n if (newPosition < 0) {\n newPosition = 0;\n }\n }\n\n if (newPosition < length) {\n tabContainer.insertBefore(this.element, tabs[newPosition]);\n } else {\n tabContainer.appendChild(this.element);\n }\n\n return this;\n }\n\n getPosition(fromRight = false) {\n let position = 0;\n let tab = this.element;\n while ((tab = tab.previousSibling as HTMLDivElement) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n return position;\n }\n\n activate() {\n if (this.isClosed) return;\n const activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.element.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n this.tabGroup.setActiveTab(this);\n this.element.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show(flag = true) {\n if (this.isClosed) return;\n if (flag) {\n this.element.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.element.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide() {\n return this.show(false);\n }\n\n flash(flag = true) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.element.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.element.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash() {\n return this.flash(false);\n }\n\n hasClass(classname: string) {\n return this.element.classList.contains(classname);\n }\n\n close(force: boolean) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n const tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.element);\n tabGroup.viewContainer.removeChild(this.webview);\n const activeTab = this.tabGroup.getActiveTab();\n tabGroup.removeTab(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n tabGroup.activateRecentTab();\n }\n }\n}\n\ncustomElements.define(\"tab-group\", TabGroup);\n\nexport type { TabGroup, Tab };\n"],"names":[],"version":3,"file":"electron-tabs.d.ts.map","sourceRoot":"../"} \ No newline at end of file +{"mappings":"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","sources":["src/src/index.ts","src/index.ts"],"sourcesContent":[null,"import Sortable from \"sortablejs\";\n// @ts-ignore\nimport styles from \"bundle-text:./style.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\ninterface TabGroupOptions {\n closeButtonText: string,\n defaultTab: TabOptions | ((tabGroup: TabGroup) => TabOptions),\n newTabButton: boolean,\n newTabButtonText: string,\n sortable: boolean,\n sortableOptions?: Sortable.Options\n visibilityThreshold: number,\n}\n\ninterface TabOptions {\n active?: boolean;\n badge?: Badge;\n closable?: boolean;\n icon?: string;\n iconURL?: string;\n ready?: ((tab: Tab) => void);\n src?: string;\n title?: string;\n visible?: boolean;\n webviewAttributes?: { [key: string]: any };\n}\n\ninterface Badge {\n text: string,\n classname: string\n}\n\nconst CLASSNAMES = {\n ROOT: \"etabs\",\n NAV: \"nav\",\n TABS: \"tabs\",\n TAB: \"tab\",\n BUTTONS: \"buttons\",\n VIEWS: \"views\",\n VIEW: \"view\"\n}\n\nfunction emit(emitter: TabGroup | Tab, type: string, args: any[]) {\n if (type === \"ready\") {\n emitter.isReady = true;\n }\n emitter.dispatchEvent(new CustomEvent(type, { detail: args }));\n}\n\nfunction on(emitter: TabGroup | Tab, type: string, fn: (detail: string) => void, options?: { [key: string]: any }) {\n if (type === \"ready\" && emitter.isReady === true) {\n fn.apply(emitter, [emitter]);\n }\n emitter.addEventListener(type, ((e: CustomEvent) => fn.apply(emitter, e.detail)) as EventListener, options);\n}\n\nclass TabGroup extends HTMLElement {\n buttonContainer: HTMLDivElement;\n isReady: boolean;\n newTabId: number;\n options: TabGroupOptions;\n shadow: ShadowRoot;\n tabContainer: HTMLDivElement;\n tabs: Array;\n viewContainer: HTMLDivElement;\n\n constructor() {\n super();\n\n this.isReady = false;\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n defaultTab: { title: \"New Tab\", active: true },\n newTabButton: !!this.getAttribute(\"new-tab-button\") === true || false,\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n sortable: !!this.getAttribute(\"sortable\") === true || false,\n visibilityThreshold: Number(this.getAttribute(\"visibility-threshold\")) || 0\n };\n\n this.tabs = [];\n this.newTabId = 0;\n\n this.createComponent();\n this.initVisibility();\n if (this.options.sortable) {\n this.initSortable();\n }\n\n this.emit(\"ready\", this);\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n connectedCallback() {\n // Support custom styles\n const style = this.querySelector(\"style\");\n if (style) {\n this.shadow.appendChild(style);\n }\n }\n\n private createComponent() {\n const shadow = this.attachShadow({mode: \"open\"});\n this.shadow = shadow;\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", CLASSNAMES.ROOT);\n\n const tabgroup = document.createElement(\"nav\");\n tabgroup.setAttribute(\"class\", CLASSNAMES.NAV);\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", CLASSNAMES.TABS);\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", CLASSNAMES.BUTTONS);\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n if (this.options.newTabButton) {\n const button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n }\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", CLASSNAMES.VIEWS);\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n }\n\n private initVisibility() {\n function toggleTabsVisibility(tab: Tab, tabGroup: TabGroup) {\n const visibilityThreshold = this.options.visibilityThreshold;\n const el = tabGroup.tabContainer.parentElement;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n }\n\n initSortable() {\n const createNewSortable = () => {\n const options = Object.assign({\n direction: \"horizontal\",\n animation: 150,\n swapThreshold: 0.20\n }, this.options.sortableOptions);\n new Sortable(this.tabContainer, options);\n };\n\n if (Sortable) {\n createNewSortable();\n } else {\n document.addEventListener(\"DOMContentLoaded\", createNewSortable);\n }\n }\n\n setDefaultTab(tab: TabOptions) {\n this.options.defaultTab = tab;\n }\n\n addTab(args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n const id = this.newTabId;\n this.newTabId++;\n const tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab(id: number) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition(position: number) {\n const fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition(position: number) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab() {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab() {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs() {\n return this.tabs.slice();\n }\n\n eachTab(fn: (tab: Tab) => void) {\n this.getTabs().forEach(fn);\n }\n\n getActiveTab() {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n\n setActiveTab(tab: Tab) {\n this.removeTab(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n }\n\n removeTab(tab: Tab, triggerEvent = false) {\n const id = tab.id;\n const index = this.tabs.findIndex((t: Tab) => t.id === id);\n this.tabs.splice(index, 1);\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n }\n\n activateRecentTab() {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n }\n}\n\nclass Tab extends EventTarget {\n badge: Badge;\n closable: boolean;\n element: HTMLDivElement;\n icon: string;\n iconURL: string;\n id: number;\n isClosed: boolean;\n isReady: boolean;\n spans: { [key: string]: HTMLSpanElement };\n tabGroup: TabGroup;\n title: string;\n webview: HTMLElement;\n webviewAttributes: { [key: string]: any };\n\n constructor(tabGroup: TabGroup, id: number, args: TabOptions) {\n super();\n this.badge = args.badge;\n this.closable = args.closable === false ? false : true;\n this.icon = args.icon;\n this.iconURL = args.iconURL;\n this.id = id;\n this.isClosed = false;\n this.isReady = false;\n this.spans = {};\n this.tabGroup = tabGroup;\n this.title = args.title;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n\n this.initTab();\n this.initWebview();\n\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n } else {\n this.emit(\"ready\", this);\n }\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n private initTab() {\n const tab = this.element = document.createElement(\"div\");\n tab.classList.add(CLASSNAMES.TAB);\n for (let el of [\"icon\", \"title\", \"badge\", \"close\"]) {\n const span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${CLASSNAMES.TAB}-${el}`);\n this.spans[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n this.initTabCloseButton();\n this.initTabClickHandler();\n\n this.tabGroup.tabContainer.appendChild(this.element);\n }\n\n private initTabCloseButton() {\n const container = this.spans.close;\n if (this.closable) {\n const button = container.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n }\n\n private initTabClickHandler() {\n // Mouse up\n const tabClickHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.element.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if ((e.target as HTMLElement).matches(\"button\")) return;\n this.activate();\n }\n };\n this.element.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n }\n\n initWebview() {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function(e: Event) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function(e: Event) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(CLASSNAMES.VIEW);\n if (this.webviewAttributes) {\n const attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n\n setTitle(title: string) {\n if (this.isClosed) return;\n const span = this.spans.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle() {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge(badge?: Badge) {\n if (this.isClosed) return;\n const span = this.spans.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge.text;\n span.classList.add(badge.classname);\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge() {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon(iconURL: string, icon: string) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n const span = this.spans.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon() {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition(newPosition: number) {\n const tabContainer = this.tabGroup.tabContainer;\n const length = tabContainer.childElementCount;\n const thisPosition = this.getPosition();\n const tabs = Array.from(tabContainer.children)\n tabs.splice(thisPosition, 1);\n\n if (newPosition < 0) {\n newPosition += length;\n if (newPosition < 0) {\n newPosition = 0;\n }\n }\n\n if (newPosition < length) {\n tabContainer.insertBefore(this.element, tabs[newPosition]);\n } else {\n tabContainer.appendChild(this.element);\n }\n\n return this;\n }\n\n getPosition(fromRight = false) {\n let position = 0;\n let tab = this.element;\n while ((tab = tab.previousSibling as HTMLDivElement) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n return position;\n }\n\n activate() {\n if (this.isClosed) return;\n const activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.element.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n this.tabGroup.setActiveTab(this);\n this.element.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show(flag = true) {\n if (this.isClosed) return;\n if (flag) {\n this.element.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.element.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide() {\n return this.show(false);\n }\n\n hasClass(classname: string) {\n return this.element.classList.contains(classname);\n }\n\n close(force: boolean) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n const tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.element);\n tabGroup.viewContainer.removeChild(this.webview);\n const activeTab = this.tabGroup.getActiveTab();\n tabGroup.removeTab(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n tabGroup.activateRecentTab();\n }\n }\n}\n\ncustomElements.define(\"tab-group\", TabGroup);\n\nexport type { TabGroup, Tab };\n"],"names":[],"version":3,"file":"electron-tabs.d.ts.map","sourceRoot":"../"} \ No newline at end of file diff --git a/dist/electron-tabs.js b/dist/electron-tabs.js index 218e61f..ba0ad2c 100644 --- a/dist/electron-tabs.js +++ b/dist/electron-tabs.js @@ -2499,7 +2499,7 @@ var $64afbd09cd65a300$export$2e2bcd8739ae039 = $64afbd09cd65a300$export$31b3ca70 var $0648b347057451f2$exports = {}; -$0648b347057451f2$exports = ":host {\n --tabgroup-background: #e7eaed;\n --tab-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n --tab-font-size: 13px;\n --tab-background: #e7eaed;\n --tab-color: #696a6c;\n --tab-border-color: #dadce0;\n --tab-transition: background-color 200ms ease-out, color 200ms ease-out;\n --tab-cursor: pointer;\n --tab-active-color: currentcolor;\n --tab-active-background: #fff;\n --tag-hover-color: currentcolor;\n --tag-hover-background: #f1f3f4;\n --tab-flash-color: #696a6c;\n --tab-flash-background: #fff3aa;\n --tab-flash-hover-color: #696a6c;\n --tab-flash-hover-background: #ffe325;\n --button-font-size: 15px;\n --button-background: none;\n --button-color: #696a6c;\n --button-hover-background: #dadce0;\n --button-hover-color: #383a3e;\n --button-border-radius: 50%;\n --button-cursor: pointer;\n --badge-background: #383a3e;\n --badge-color: #fff;\n}\n\nwebview {\n visibility: hidden;\n width: 100%;\n height: 100%;\n position: absolute;\n}\n\nwebview.visible {\n visibility: visible;\n}\n\n.etabs {\n font-family: var(--tab-font-family);\n text-rendering: optimizelegibility;\n font-feature-settings: \"liga\", \"clig\", \"kern\";\n}\n\n.nav {\n background: var(--tabgroup-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n border-top: 1px solid var(--tab-border-color);\n font-size: var(--tab-font-size);\n width: 100%;\n height: 32px;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.nav.visible {\n display: flex;\n}\n\n.tabs {\n height: 100%;\n}\n\n.tab {\n background: var(--tab-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n color: var(--tab-color);\n cursor: var(--tab-cursor);\n font-size: var(--tab-font-size);\n transition: var(--tab-transition);\n box-sizing: border-box;\n height: 100%;\n align-items: center;\n padding: 5px 9px;\n display: none;\n position: relative;\n}\n\n.tab:first-child {\n border-left: none;\n}\n\n.tab.visible {\n display: inline-flex;\n}\n\n.tab.active {\n color: var(--tab-active-color);\n background: var(--tab-active-background);\n border-left: 1px solid var(--tab-border-color);\n border-right: 1px solid var(--tab-border-color);\n box-shadow: none;\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.tab.active:last-child {\n border-right: none;\n}\n\n.tab.flash {\n background: var(--tab-flash-background);\n color: var(--tab-flash-color);\n}\n\n.tab.tab.flash:hover {\n background: var(--tab-flash-hover-background);\n color: var(--tab-flash-hover-color);\n}\n\n.tab.visible:not(.active) + .tab.visible:not(.active) {\n border-left: 1px solid var(--tab-border-color);\n padding-left: 8px;\n}\n\n.tab:not(.active):hover {\n background: var(--tab-hover-background);\n color: var(--tab-hover-color);\n}\n\n.tab-badge {\n background: var(--badge-background);\n color: var(--badge-color);\n text-align: center;\n border-radius: 5px;\n margin-left: 5px;\n padding: 1px 4px;\n font-size: 8px;\n font-weight: bold;\n line-height: 1.2;\n}\n\n.tab-badge.hidden {\n display: none;\n}\n\n.tab-icon {\n height: 16px;\n display: inline-block;\n}\n\n.tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.tab-title, .tab-close {\n margin-left: 10px;\n display: inline-block;\n}\n\n.tab-close button {\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n color: var(--button-color);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n padding: 1px 0 0;\n display: inline-block;\n}\n\n.tab-close button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.buttons {\n border-left: 1px solid var(--tab-border-color);\n padding: 5px;\n display: flex;\n}\n\n.buttons button {\n color: var(--button-color);\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n margin: 0;\n padding: 1px 0 0;\n font-family: inherit;\n line-height: 1;\n display: block;\n}\n\n.buttons button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.views {\n height: calc(100vh - 33px);\n position: relative;\n}\n\n"; +$0648b347057451f2$exports = ":host {\n --tabgroup-background: #e7eaed;\n --tab-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n --tab-font-size: 13px;\n --tab-background: #e7eaed;\n --tab-color: #696a6c;\n --tab-border-color: #dadce0;\n --tab-transition: background-color 200ms ease-out, color 200ms ease-out;\n --tab-cursor: pointer;\n --tab-active-color: currentcolor;\n --tab-active-background: #fff;\n --tag-hover-color: currentcolor;\n --tag-hover-background: #f1f3f4;\n --button-font-size: 15px;\n --button-background: none;\n --button-color: #696a6c;\n --button-hover-background: #dadce0;\n --button-hover-color: #383a3e;\n --button-border-radius: 50%;\n --button-cursor: pointer;\n --badge-background: #383a3e;\n --badge-color: #fff;\n}\n\nwebview {\n visibility: hidden;\n width: 100%;\n height: 100%;\n position: absolute;\n}\n\nwebview.visible {\n visibility: visible;\n}\n\n.etabs {\n font-family: var(--tab-font-family);\n text-rendering: optimizelegibility;\n font-feature-settings: \"liga\", \"clig\", \"kern\";\n}\n\n.nav {\n background: var(--tabgroup-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n border-top: 1px solid var(--tab-border-color);\n font-size: var(--tab-font-size);\n width: 100%;\n height: 32px;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n display: none;\n}\n\n.nav.visible {\n display: flex;\n}\n\n.tabs {\n height: 100%;\n}\n\n.tab {\n background: var(--tab-background);\n box-shadow: inset 0 -1px var(--tab-border-color);\n color: var(--tab-color);\n cursor: var(--tab-cursor);\n font-size: var(--tab-font-size);\n transition: var(--tab-transition);\n box-sizing: border-box;\n height: 100%;\n align-items: center;\n padding: 5px 9px;\n display: none;\n position: relative;\n}\n\n.tab:first-child {\n border-left: none;\n}\n\n.tab.visible {\n display: inline-flex;\n}\n\n.tab.active {\n color: var(--tab-active-color);\n background: var(--tab-active-background);\n border-left: 1px solid var(--tab-border-color);\n border-right: 1px solid var(--tab-border-color);\n box-shadow: none;\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.tab.active:last-child {\n border-right: none;\n}\n\n.tab.visible:not(.active) + .tab.visible:not(.active) {\n border-left: 1px solid var(--tab-border-color);\n padding-left: 8px;\n}\n\n.tab:not(.active):hover {\n background: var(--tab-hover-background);\n color: var(--tab-hover-color);\n}\n\n.tab-badge {\n background: var(--badge-background);\n color: var(--badge-color);\n text-align: center;\n border-radius: 5px;\n margin-left: 5px;\n padding: 1px 4px;\n font-size: 8px;\n font-weight: bold;\n line-height: 1.2;\n}\n\n.tab-badge.hidden {\n display: none;\n}\n\n.tab-icon {\n height: 16px;\n display: inline-block;\n}\n\n.tab-icon img {\n max-width: 16px;\n max-height: 16px;\n}\n\n.tab-title, .tab-close {\n margin-left: 10px;\n display: inline-block;\n}\n\n.tab-close button {\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n color: var(--button-color);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n padding: 1px 0 0;\n display: inline-block;\n}\n\n.tab-close button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.buttons {\n border-left: 1px solid var(--tab-border-color);\n padding: 5px;\n display: flex;\n}\n\n.buttons button {\n color: var(--button-color);\n background: var(--button-background);\n border-radius: var(--button-border-radius);\n cursor: var(--button-cursor);\n font-size: var(--button-font-size);\n width: 20px;\n height: 20px;\n text-align: center;\n border: none;\n margin: 0;\n padding: 1px 0 0;\n font-family: inherit;\n line-height: 1;\n display: block;\n}\n\n.buttons button:hover {\n color: var(--button-hover-color);\n background: var(--button-hover-background);\n}\n\n.views {\n height: calc(100vh - 33px);\n position: relative;\n}\n\n"; if (!document) throw Error("electron-tabs module must be called in renderer process"); @@ -2880,20 +2880,6 @@ class $eda442ba39f881a8$var$Tab extends EventTarget { hide() { return this.show(false); } - flash(flag = true) { - if (this.isClosed) return; - if (flag !== false) { - this.element.classList.add("flash"); - this.emit("flash", this); - } else { - this.element.classList.remove("flash"); - this.emit("unflash", this); - } - return this; - } - unflash() { - return this.flash(false); - } hasClass(classname) { return this.element.classList.contains(classname); } diff --git a/dist/electron-tabs.js.map b/dist/electron-tabs.js.map index cb6d04d..c88414f 100644 --- a/dist/electron-tabs.js.map +++ b/dist/electron-tabs.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["src/index.ts","node_modules/sortablejs/modular/sortable.esm.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-82301af45c0136ec.js"],"sourcesContent":["import Sortable from \"sortablejs\";\n// @ts-ignore\nimport styles from \"bundle-text:./style.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\ninterface TabGroupOptions {\n closeButtonText: string,\n defaultTab: TabOptions | ((tabGroup: TabGroup) => TabOptions),\n newTabButton: boolean,\n newTabButtonText: string,\n sortable: boolean,\n sortableOptions?: Sortable.Options\n visibilityThreshold: number,\n}\n\ninterface TabOptions {\n active?: boolean;\n badge?: Badge;\n closable?: boolean;\n icon?: string;\n iconURL?: string;\n ready?: ((tab: Tab) => void);\n src?: string;\n title?: string;\n visible?: boolean;\n webviewAttributes?: { [key: string]: any };\n}\n\ninterface Badge {\n text: string,\n classname: string\n}\n\nconst CLASSNAMES = {\n ROOT: \"etabs\",\n NAV: \"nav\",\n TABS: \"tabs\",\n TAB: \"tab\",\n BUTTONS: \"buttons\",\n VIEWS: \"views\",\n VIEW: \"view\"\n}\n\nfunction emit(emitter: TabGroup | Tab, type: string, args: any[]) {\n if (type === \"ready\") {\n emitter.isReady = true;\n }\n emitter.dispatchEvent(new CustomEvent(type, { detail: args }));\n}\n\nfunction on(emitter: TabGroup | Tab, type: string, fn: (detail: string) => void, options?: { [key: string]: any }) {\n if (type === \"ready\" && emitter.isReady === true) {\n fn.apply(emitter, [emitter]);\n }\n emitter.addEventListener(type, ((e: CustomEvent) => fn.apply(emitter, e.detail)) as EventListener, options);\n}\n\nclass TabGroup extends HTMLElement {\n buttonContainer: HTMLDivElement;\n isReady: boolean;\n newTabId: number;\n options: TabGroupOptions;\n shadow: ShadowRoot;\n tabContainer: HTMLDivElement;\n tabs: Array;\n viewContainer: HTMLDivElement;\n\n constructor() {\n super();\n\n this.isReady = false;\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n defaultTab: { title: \"New Tab\", active: true },\n newTabButton: !!this.getAttribute(\"new-tab-button\") === true || false,\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n sortable: !!this.getAttribute(\"sortable\") === true || false,\n visibilityThreshold: Number(this.getAttribute(\"visibility-threshold\")) || 0\n };\n\n this.tabs = [];\n this.newTabId = 0;\n\n this.createComponent();\n this.initVisibility();\n if (this.options.sortable) {\n this.initSortable();\n }\n\n this.emit(\"ready\", this);\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n connectedCallback() {\n // Support custom styles\n const style = this.querySelector(\"style\");\n if (style) {\n this.shadow.appendChild(style);\n }\n }\n\n private createComponent() {\n const shadow = this.attachShadow({mode: \"open\"});\n this.shadow = shadow;\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", CLASSNAMES.ROOT);\n\n const tabgroup = document.createElement(\"nav\");\n tabgroup.setAttribute(\"class\", CLASSNAMES.NAV);\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", CLASSNAMES.TABS);\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", CLASSNAMES.BUTTONS);\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n if (this.options.newTabButton) {\n const button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n }\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", CLASSNAMES.VIEWS);\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n }\n\n private initVisibility() {\n function toggleTabsVisibility(tab: Tab, tabGroup: TabGroup) {\n const visibilityThreshold = this.options.visibilityThreshold;\n const el = tabGroup.tabContainer.parentElement;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n }\n\n initSortable() {\n const createNewSortable = () => {\n const options = Object.assign({\n direction: \"horizontal\",\n animation: 150,\n swapThreshold: 0.20\n }, this.options.sortableOptions);\n new Sortable(this.tabContainer, options);\n };\n\n if (Sortable) {\n createNewSortable();\n } else {\n document.addEventListener(\"DOMContentLoaded\", createNewSortable);\n }\n }\n\n setDefaultTab(tab: TabOptions) {\n this.options.defaultTab = tab;\n }\n\n addTab(args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n const id = this.newTabId;\n this.newTabId++;\n const tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab(id: number) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition(position: number) {\n const fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition(position: number) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab() {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab() {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs() {\n return this.tabs.slice();\n }\n\n eachTab(fn: (tab: Tab) => void) {\n this.getTabs().forEach(fn);\n }\n\n getActiveTab() {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n\n setActiveTab(tab: Tab) {\n this.removeTab(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n }\n\n removeTab(tab: Tab, triggerEvent = false) {\n const id = tab.id;\n const index = this.tabs.findIndex((t: Tab) => t.id === id);\n this.tabs.splice(index, 1);\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n }\n\n activateRecentTab() {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n }\n}\n\nclass Tab extends EventTarget {\n badge: Badge;\n closable: boolean;\n element: HTMLDivElement;\n icon: string;\n iconURL: string;\n id: number;\n isClosed: boolean;\n isReady: boolean;\n spans: { [key: string]: HTMLSpanElement };\n tabGroup: TabGroup;\n title: string;\n webview: HTMLElement;\n webviewAttributes: { [key: string]: any };\n\n constructor(tabGroup: TabGroup, id: number, args: TabOptions) {\n super();\n this.badge = args.badge;\n this.closable = args.closable === false ? false : true;\n this.icon = args.icon;\n this.iconURL = args.iconURL;\n this.id = id;\n this.isClosed = false;\n this.isReady = false;\n this.spans = {};\n this.tabGroup = tabGroup;\n this.title = args.title;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n\n this.initTab();\n this.initWebview();\n\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n } else {\n this.emit(\"ready\", this);\n }\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n private initTab() {\n const tab = this.element = document.createElement(\"div\");\n tab.classList.add(CLASSNAMES.TAB);\n for (let el of [\"icon\", \"title\", \"badge\", \"close\"]) {\n const span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${CLASSNAMES.TAB}-${el}`);\n this.spans[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n this.initTabCloseButton();\n this.initTabClickHandler();\n\n this.tabGroup.tabContainer.appendChild(this.element);\n }\n\n private initTabCloseButton() {\n const container = this.spans.close;\n if (this.closable) {\n const button = container.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n }\n\n private initTabClickHandler() {\n // Mouse up\n const tabClickHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.element.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if ((e.target as HTMLElement).matches(\"button\")) return;\n this.activate();\n }\n };\n this.element.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n }\n\n initWebview() {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function(e: Event) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function(e: Event) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(CLASSNAMES.VIEW);\n if (this.webviewAttributes) {\n const attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n\n setTitle(title: string) {\n if (this.isClosed) return;\n const span = this.spans.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle() {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge(badge?: Badge) {\n if (this.isClosed) return;\n const span = this.spans.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge.text;\n span.classList.add(badge.classname);\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge() {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon(iconURL: string, icon: string) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n const span = this.spans.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon() {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition(newPosition: number) {\n const tabContainer = this.tabGroup.tabContainer;\n const length = tabContainer.childElementCount;\n const thisPosition = this.getPosition();\n const tabs = Array.from(tabContainer.children)\n tabs.splice(thisPosition, 1);\n\n if (newPosition < 0) {\n newPosition += length;\n if (newPosition < 0) {\n newPosition = 0;\n }\n }\n\n if (newPosition < length) {\n tabContainer.insertBefore(this.element, tabs[newPosition]);\n } else {\n tabContainer.appendChild(this.element);\n }\n\n return this;\n }\n\n getPosition(fromRight = false) {\n let position = 0;\n let tab = this.element;\n while ((tab = tab.previousSibling as HTMLDivElement) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n return position;\n }\n\n activate() {\n if (this.isClosed) return;\n const activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.element.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n this.tabGroup.setActiveTab(this);\n this.element.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show(flag = true) {\n if (this.isClosed) return;\n if (flag) {\n this.element.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.element.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide() {\n return this.show(false);\n }\n\n flash(flag = true) {\n if (this.isClosed) return;\n if (flag !== false) {\n this.element.classList.add(\"flash\");\n this.emit(\"flash\", this);\n } else {\n this.element.classList.remove(\"flash\");\n this.emit(\"unflash\", this);\n }\n return this;\n }\n\n unflash() {\n return this.flash(false);\n }\n\n hasClass(classname: string) {\n return this.element.classList.contains(classname);\n }\n\n close(force: boolean) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n const tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.element);\n tabGroup.viewContainer.removeChild(this.webview);\n const activeTab = this.tabGroup.getActiveTab();\n tabGroup.removeTab(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n tabGroup.activateRecentTab();\n }\n }\n}\n\ncustomElements.define(\"tab-group\", TabGroup);\n\nexport type { TabGroup, Tab };\n","/**!\n * Sortable 1.15.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.15.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/**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\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 && !ChromeForAndroid) {\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/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\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.removeAttribute(\"id\");\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\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n\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 /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\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 /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\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 /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\r\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.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\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 /**\r\n * Destroy\r\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/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\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/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\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/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\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.avoidImplicitDeselect) {\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\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\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 originalEvent: 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 originalEvent: 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 originalEvent: 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 originalEvent: 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 /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\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 /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\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/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\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","module.exports = \"605b1218c05c82dd\";"],"names":[],"version":3,"file":"electron-tabs.js.map","sourceRoot":"../"} \ No newline at end of file +{"mappings":"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","sources":["src/index.ts","node_modules/sortablejs/modular/sortable.esm.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-82301af45c0136ec.js"],"sourcesContent":["import Sortable from \"sortablejs\";\n// @ts-ignore\nimport styles from \"bundle-text:./style.css\";\n\nif (!document) {\n throw Error(\"electron-tabs module must be called in renderer process\");\n}\n\ninterface TabGroupOptions {\n closeButtonText: string,\n defaultTab: TabOptions | ((tabGroup: TabGroup) => TabOptions),\n newTabButton: boolean,\n newTabButtonText: string,\n sortable: boolean,\n sortableOptions?: Sortable.Options\n visibilityThreshold: number,\n}\n\ninterface TabOptions {\n active?: boolean;\n badge?: Badge;\n closable?: boolean;\n icon?: string;\n iconURL?: string;\n ready?: ((tab: Tab) => void);\n src?: string;\n title?: string;\n visible?: boolean;\n webviewAttributes?: { [key: string]: any };\n}\n\ninterface Badge {\n text: string,\n classname: string\n}\n\nconst CLASSNAMES = {\n ROOT: \"etabs\",\n NAV: \"nav\",\n TABS: \"tabs\",\n TAB: \"tab\",\n BUTTONS: \"buttons\",\n VIEWS: \"views\",\n VIEW: \"view\"\n}\n\nfunction emit(emitter: TabGroup | Tab, type: string, args: any[]) {\n if (type === \"ready\") {\n emitter.isReady = true;\n }\n emitter.dispatchEvent(new CustomEvent(type, { detail: args }));\n}\n\nfunction on(emitter: TabGroup | Tab, type: string, fn: (detail: string) => void, options?: { [key: string]: any }) {\n if (type === \"ready\" && emitter.isReady === true) {\n fn.apply(emitter, [emitter]);\n }\n emitter.addEventListener(type, ((e: CustomEvent) => fn.apply(emitter, e.detail)) as EventListener, options);\n}\n\nclass TabGroup extends HTMLElement {\n buttonContainer: HTMLDivElement;\n isReady: boolean;\n newTabId: number;\n options: TabGroupOptions;\n shadow: ShadowRoot;\n tabContainer: HTMLDivElement;\n tabs: Array;\n viewContainer: HTMLDivElement;\n\n constructor() {\n super();\n\n this.isReady = false;\n\n // Options\n this.options = {\n closeButtonText: this.getAttribute(\"close-button-text\") || \"×\",\n defaultTab: { title: \"New Tab\", active: true },\n newTabButton: !!this.getAttribute(\"new-tab-button\") === true || false,\n newTabButtonText: this.getAttribute(\"new-tab-button-text\") || \"+\",\n sortable: !!this.getAttribute(\"sortable\") === true || false,\n visibilityThreshold: Number(this.getAttribute(\"visibility-threshold\")) || 0\n };\n\n this.tabs = [];\n this.newTabId = 0;\n\n this.createComponent();\n this.initVisibility();\n if (this.options.sortable) {\n this.initSortable();\n }\n\n this.emit(\"ready\", this);\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n connectedCallback() {\n // Support custom styles\n const style = this.querySelector(\"style\");\n if (style) {\n this.shadow.appendChild(style);\n }\n }\n\n private createComponent() {\n const shadow = this.attachShadow({mode: \"open\"});\n this.shadow = shadow;\n\n const wrapper = document.createElement(\"div\");\n wrapper.setAttribute(\"class\", CLASSNAMES.ROOT);\n\n const tabgroup = document.createElement(\"nav\");\n tabgroup.setAttribute(\"class\", CLASSNAMES.NAV);\n wrapper.appendChild(tabgroup);\n\n const tabContainer = document.createElement(\"div\");\n tabContainer.setAttribute(\"class\", CLASSNAMES.TABS);\n tabgroup.appendChild(tabContainer);\n this.tabContainer = tabContainer;\n\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.setAttribute(\"class\", CLASSNAMES.BUTTONS);\n tabgroup.appendChild(buttonContainer);\n this.buttonContainer = buttonContainer;\n\n if (this.options.newTabButton) {\n const button = this.buttonContainer.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.options.newTabButtonText;\n button.addEventListener(\"click\", this.addTab.bind(this, undefined), false);\n }\n\n const viewContainer = document.createElement(\"div\");\n viewContainer.setAttribute(\"class\", CLASSNAMES.VIEWS);\n wrapper.appendChild(viewContainer);\n this.viewContainer = viewContainer;\n\n const style = document.createElement(\"style\");\n style.textContent = styles;\n\n shadow.appendChild(style);\n shadow.appendChild(wrapper);\n }\n\n private initVisibility() {\n function toggleTabsVisibility(tab: Tab, tabGroup: TabGroup) {\n const visibilityThreshold = this.options.visibilityThreshold;\n const el = tabGroup.tabContainer.parentElement;\n if (this.tabs.length >= visibilityThreshold) {\n el.classList.add(\"visible\");\n } else {\n el.classList.remove(\"visible\");\n }\n }\n\n this.on(\"tab-added\", toggleTabsVisibility);\n this.on(\"tab-removed\", toggleTabsVisibility);\n }\n\n initSortable() {\n const createNewSortable = () => {\n const options = Object.assign({\n direction: \"horizontal\",\n animation: 150,\n swapThreshold: 0.20\n }, this.options.sortableOptions);\n new Sortable(this.tabContainer, options);\n };\n\n if (Sortable) {\n createNewSortable();\n } else {\n document.addEventListener(\"DOMContentLoaded\", createNewSortable);\n }\n }\n\n setDefaultTab(tab: TabOptions) {\n this.options.defaultTab = tab;\n }\n\n addTab(args = this.options.defaultTab) {\n if (typeof args === \"function\") {\n args = args(this);\n }\n const id = this.newTabId;\n this.newTabId++;\n const tab = new Tab(this, id, args);\n this.tabs.push(tab);\n // Don't call tab.activate() before a tab is referenced in this.tabs\n if (args.active === true) {\n tab.activate();\n }\n this.emit(\"tab-added\", tab, this);\n return tab;\n }\n\n getTab(id: number) {\n for (let i in this.tabs) {\n if (this.tabs[i].id === id) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByPosition(position: number) {\n const fromRight = position < 0;\n for (let i in this.tabs) {\n if (this.tabs[i].getPosition(fromRight) === position) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n getTabByRelPosition(position: number) {\n position = this.getActiveTab().getPosition() + position;\n if (position <= 0) {\n return null;\n }\n return this.getTabByPosition(position);\n }\n\n getNextTab() {\n return this.getTabByRelPosition(1);\n }\n\n getPreviousTab() {\n return this.getTabByRelPosition(-1);\n }\n\n getTabs() {\n return this.tabs.slice();\n }\n\n eachTab(fn: (tab: Tab) => void) {\n this.getTabs().forEach(fn);\n }\n\n getActiveTab() {\n if (this.tabs.length === 0) return null;\n return this.tabs[0];\n }\n\n setActiveTab(tab: Tab) {\n this.removeTab(tab);\n this.tabs.unshift(tab);\n this.emit(\"tab-active\", tab, this);\n }\n\n removeTab(tab: Tab, triggerEvent = false) {\n const id = tab.id;\n const index = this.tabs.findIndex((t: Tab) => t.id === id);\n this.tabs.splice(index, 1);\n if (triggerEvent) {\n this.emit(\"tab-removed\", tab, this);\n }\n }\n\n activateRecentTab() {\n if (this.tabs.length > 0) {\n this.tabs[0].activate();\n }\n }\n}\n\nclass Tab extends EventTarget {\n badge: Badge;\n closable: boolean;\n element: HTMLDivElement;\n icon: string;\n iconURL: string;\n id: number;\n isClosed: boolean;\n isReady: boolean;\n spans: { [key: string]: HTMLSpanElement };\n tabGroup: TabGroup;\n title: string;\n webview: HTMLElement;\n webviewAttributes: { [key: string]: any };\n\n constructor(tabGroup: TabGroup, id: number, args: TabOptions) {\n super();\n this.badge = args.badge;\n this.closable = args.closable === false ? false : true;\n this.icon = args.icon;\n this.iconURL = args.iconURL;\n this.id = id;\n this.isClosed = false;\n this.isReady = false;\n this.spans = {};\n this.tabGroup = tabGroup;\n this.title = args.title;\n this.webviewAttributes = args.webviewAttributes || {};\n this.webviewAttributes.src = args.src;\n\n this.initTab();\n this.initWebview();\n\n if (args.visible !== false) {\n this.show();\n }\n if (typeof args.ready === \"function\") {\n args.ready(this);\n } else {\n this.emit(\"ready\", this);\n }\n }\n\n emit(type: string, ...args: any[]) {\n return emit(this, type, args);\n }\n\n on(type: string, fn: (...detail: any[]) => void) {\n return on(this, type, fn);\n }\n\n once(type: string, fn: (detail: string) => void) {\n return on(this, type, fn, { once: true });\n }\n\n private initTab() {\n const tab = this.element = document.createElement(\"div\");\n tab.classList.add(CLASSNAMES.TAB);\n for (let el of [\"icon\", \"title\", \"badge\", \"close\"]) {\n const span = tab.appendChild(document.createElement(\"span\"));\n span.classList.add(`${CLASSNAMES.TAB}-${el}`);\n this.spans[el] = span;\n }\n\n this.setTitle(this.title);\n this.setBadge(this.badge);\n this.setIcon(this.iconURL, this.icon);\n this.initTabCloseButton();\n this.initTabClickHandler();\n\n this.tabGroup.tabContainer.appendChild(this.element);\n }\n\n private initTabCloseButton() {\n const container = this.spans.close;\n if (this.closable) {\n const button = container.appendChild(document.createElement(\"button\"));\n button.innerHTML = this.tabGroup.options.closeButtonText;\n button.addEventListener(\"click\", this.close.bind(this, false), false);\n }\n }\n\n private initTabClickHandler() {\n // Mouse up\n const tabClickHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 2) {\n this.close();\n }\n };\n this.element.addEventListener(\"mouseup\", tabClickHandler.bind(this), false);\n // Mouse down\n const tabMouseDownHandler = function(e: KeyboardEvent) {\n if (this.isClosed) return;\n if (e.which === 1) {\n if ((e.target as HTMLElement).matches(\"button\")) return;\n this.activate();\n }\n };\n this.element.addEventListener(\"mousedown\", tabMouseDownHandler.bind(this), false);\n }\n\n initWebview() {\n const webview = this.webview = document.createElement(\"webview\");\n\n const tabWebviewDidFinishLoadHandler = function(e: Event) {\n this.emit(\"webview-ready\", this);\n };\n\n this.webview.addEventListener(\"did-finish-load\", tabWebviewDidFinishLoadHandler.bind(this), false);\n\n const tabWebviewDomReadyHandler = function(e: Event) {\n // Remove this once https://github.com/electron/electron/issues/14474 is fixed\n webview.blur();\n webview.focus();\n this.emit(\"webview-dom-ready\", this);\n };\n\n this.webview.addEventListener(\"dom-ready\", tabWebviewDomReadyHandler.bind(this), false);\n\n this.webview.classList.add(CLASSNAMES.VIEW);\n if (this.webviewAttributes) {\n const attrs = this.webviewAttributes;\n for (let key in attrs) {\n const attr = attrs[key];\n if (attr === false) continue;\n this.webview.setAttribute(key, attr);\n }\n }\n\n this.tabGroup.viewContainer.appendChild(this.webview);\n }\n\n setTitle(title: string) {\n if (this.isClosed) return;\n const span = this.spans.title;\n span.innerHTML = title;\n span.title = title;\n this.title = title;\n this.emit(\"title-changed\", title, this);\n return this;\n }\n\n getTitle() {\n if (this.isClosed) return;\n return this.title;\n }\n\n setBadge(badge?: Badge) {\n if (this.isClosed) return;\n const span = this.spans.badge;\n this.badge = badge;\n\n if (badge) {\n span.innerHTML = badge.text;\n span.classList.add(badge.classname);\n span.classList.remove(\"hidden\");\n } else {\n span.classList.add(\"hidden\");\n }\n\n this.emit(\"badge-changed\", badge, this);\n }\n\n getBadge() {\n if (this.isClosed) return;\n return this.badge;\n }\n\n setIcon(iconURL: string, icon: string) {\n if (this.isClosed) return;\n this.iconURL = iconURL;\n this.icon = icon;\n const span = this.spans.icon;\n if (iconURL) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", iconURL, this);\n } else if (icon) {\n span.innerHTML = ``;\n this.emit(\"icon-changed\", icon, this);\n }\n\n return this;\n }\n\n getIcon() {\n if (this.isClosed) return;\n if (this.iconURL) return this.iconURL;\n return this.icon;\n }\n\n setPosition(newPosition: number) {\n const tabContainer = this.tabGroup.tabContainer;\n const length = tabContainer.childElementCount;\n const thisPosition = this.getPosition();\n const tabs = Array.from(tabContainer.children)\n tabs.splice(thisPosition, 1);\n\n if (newPosition < 0) {\n newPosition += length;\n if (newPosition < 0) {\n newPosition = 0;\n }\n }\n\n if (newPosition < length) {\n tabContainer.insertBefore(this.element, tabs[newPosition]);\n } else {\n tabContainer.appendChild(this.element);\n }\n\n return this;\n }\n\n getPosition(fromRight = false) {\n let position = 0;\n let tab = this.element;\n while ((tab = tab.previousSibling as HTMLDivElement) != null) position++;\n\n if (fromRight === true) {\n position -= this.tabGroup.tabContainer.childElementCount;\n }\n\n return position;\n }\n\n activate() {\n if (this.isClosed) return;\n const activeTab = this.tabGroup.getActiveTab();\n if (activeTab) {\n activeTab.element.classList.remove(\"active\");\n activeTab.webview.classList.remove(\"visible\");\n activeTab.emit(\"inactive\", activeTab);\n }\n this.tabGroup.setActiveTab(this);\n this.element.classList.add(\"active\");\n this.webview.classList.add(\"visible\");\n this.webview.focus();\n this.emit(\"active\", this);\n return this;\n }\n\n show(flag = true) {\n if (this.isClosed) return;\n if (flag) {\n this.element.classList.add(\"visible\");\n this.emit(\"visible\", this);\n } else {\n this.element.classList.remove(\"visible\");\n this.emit(\"hidden\", this);\n }\n return this;\n }\n\n hide() {\n return this.show(false);\n }\n\n hasClass(classname: string) {\n return this.element.classList.contains(classname);\n }\n\n close(force: boolean) {\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n this.emit(\"closing\", this, abort);\n\n const abortSignal = abortController.signal;\n if (this.isClosed || (!this.closable && !force) || abortSignal.aborted) return;\n\n this.isClosed = true;\n const tabGroup = this.tabGroup;\n tabGroup.tabContainer.removeChild(this.element);\n tabGroup.viewContainer.removeChild(this.webview);\n const activeTab = this.tabGroup.getActiveTab();\n tabGroup.removeTab(this, true);\n\n this.emit(\"close\", this);\n\n if (activeTab.id === this.id) {\n tabGroup.activateRecentTab();\n }\n }\n}\n\ncustomElements.define(\"tab-group\", TabGroup);\n\nexport type { TabGroup, Tab };\n","/**!\n * Sortable 1.15.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.15.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/**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\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 && !ChromeForAndroid) {\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/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\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.removeAttribute(\"id\");\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\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n\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 /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\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 /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\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 /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\r\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.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\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 /**\r\n * Destroy\r\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/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\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/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\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/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\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.avoidImplicitDeselect) {\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\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\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 originalEvent: 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 originalEvent: 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 originalEvent: 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 originalEvent: 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 /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\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 /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\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/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\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","module.exports = \"605b1218c05c82dd\";"],"names":[],"version":3,"file":"electron-tabs.js.map","sourceRoot":"../"} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index e6700cb..8016925 100644 --- a/src/index.ts +++ b/src/index.ts @@ -534,22 +534,6 @@ class Tab extends EventTarget { return this.show(false); } - flash(flag = true) { - if (this.isClosed) return; - if (flag !== false) { - this.element.classList.add("flash"); - this.emit("flash", this); - } else { - this.element.classList.remove("flash"); - this.emit("unflash", this); - } - return this; - } - - unflash() { - return this.flash(false); - } - hasClass(classname: string) { return this.element.classList.contains(classname); } diff --git a/src/style.css b/src/style.css index 41652ef..3875da7 100644 --- a/src/style.css +++ b/src/style.css @@ -14,10 +14,6 @@ --tab-active-background: #FFF; --tag-hover-color: currentcolor; --tag-hover-background: #F1F3F4; - --tab-flash-color: #696A6C; - --tab-flash-background: #fff3aa; - --tab-flash-hover-color: #696A6C; - --tab-flash-hover-background: #ffe325; --button-font-size: 15px; --button-background: none; --button-color: #696A6C; @@ -107,16 +103,6 @@ webview.visible { border-right: none; } -.tab.flash { - background: var(--tab-flash-background); - color: var(--tab-flash-color); -} - -.tab.tab.flash:hover { - background: var(--tab-flash-hover-background); - color: var(--tab-flash-hover-color); -} - .tab.visible:not(.active)+.tab.visible:not(.active) { border-left: 1px solid var(--tab-border-color); padding-left: 8px; From d8ca6b74d52f2187dc55b4fe5b4152fa306df466 Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Wed, 25 May 2022 17:19:25 +0200 Subject: [PATCH 33/35] Add CSS variable --close-button-visibility --- src/style.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/style.css b/src/style.css index 3875da7..bd4f81f 100644 --- a/src/style.css +++ b/src/style.css @@ -23,6 +23,7 @@ --button-cursor: pointer; --badge-background: #383a3e; --badge-color: #fff; + --close-button-visibility: visible; } /* STYLES */ @@ -161,6 +162,11 @@ webview.visible { height: 20px; text-align: center; padding: 1px 0 0 0; + visibility: var(--close-button-visibility); +} + +.tab.active .tab-close button { + visibility: visible; } .tab-close button:hover { From 87c72a0df9240289d2fbd2ec186f5ded1d3f2167 Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Wed, 25 May 2022 17:20:17 +0200 Subject: [PATCH 34/35] Update README --- README.md | 266 ++++++++++++++++++++++++++++++------------------- screenshot.jpg | Bin 297951 -> 159061 bytes 2 files changed, 162 insertions(+), 104 deletions(-) diff --git a/README.md b/README.md index bf400af..604b590 100644 --- a/README.md +++ b/README.md @@ -4,104 +4,114 @@ ![Electron Tab Demo](screenshot.jpg) +## Features + +* :electron: Compatible with Electron ≥ 17. +* :lock: Compliant with [Electron security recommendations](https://www.electronjs.org/docs/latest/tutorial/security) (works without `nodeIntegration: true`). +* :toolbox: Written with TypeScript and Web Components. +* :hand: Supports drag and drop out of the box. +* :art: Easily customizable. + ## Installation -``` -$ npm install --save electron-tabs +```bash +npm install --save electron-tabs ``` -## Demo +## Getting started -``` -$ npm run demo -``` - -## Usage - -Electron-tabs uses webviews, so you first need to use the following `webPreferences` options in the main process: +Define the following `webPreferences` options in the main process: ```js const mainWindow = new electron.BrowserWindow({ webPreferences: { - nodeIntegration: true, - contextIsolation: false, // needed for Electron >= 12.x webviewTag: true } }); ``` -Then add the following elements to the app page: +Then add the following markup where you want the tabs to display: ```html -
-
-
-
-
+ + + ``` -And call the module in the renderer process: +## Options -```javascript -const TabGroup = require("electron-tabs"); -``` - -Now you can initialize a tab group and add tabs to it: - -```javascript -let tabGroup = new TabGroup(); -let tab = tabGroup.addTab({ - title: "Electron", - src: "http://electron.atom.io", - visible: true -}); -``` - -If you don't want to write your own styles, you can also insert the sample electron-tabs stylesheet in the page header: +You can add options by setting `` element attributes: ```html - + ``` -### Note +The following attributes are supported: -Please note, there is a known issue in some versions of Electron that prevents the process to completely shut down and it remains hanging in Background Processes (Windows 10). If you encounter that issue please use the workaround provided at https://github.com/electron/electron/issues/13939 +* `close-button-text` (string): text of the tabs "Close" button. +* `new-tab-button` (boolean): set it to true to display the "New Tab" button. +* `new-tab-button-text` (string): text of the "New Tab" button. +* `sortable` (boolean): set it to true to make the tabs sortable by drag and drop. +* `visibility-threshold` (number): the minimum number of tabs necessary for the tab bar to be displayed. 0 (default) means that it will always remain visible. -## API +## Methods -### Tab Group +Use `TabGroup` methods and manipulate tabs in a script after calling `electron-tabs.js`. -Represents the main tab container. +```html + -#### `new TabGroup(options)` + -`options` must be an object. The following options are available: + +``` + +### TabGroup #### `tabGroup.addTab(options)` -Add a new tab to the tab group and returns a `Tab` instance. +Add a new tab and returns the related `Tab` instance. * `title`: tab title. * `src`: URL to the page which will be loaded into the view. This is actually the same than `options.webview.src`. -* `badge`: optional text to put into a badge, badge will be hidden if it's falsey +* `badge`: optional text to put into a badge, badge will be hidden if false. * `iconURL`: optional URL to the tab icon. * `icon`: optional code for a tab icon. Can be used with symbol libraries (example with Font Awesome: `icon: 'fa fa-icon-name'`). This attribute is ignored if an `iconURL` was given. * `closable` (default: `true`): if set to `true` the close button won't be displayed and the user won't be able to close the tab. See also `tab.close()`. -* `webviewAttributes`: attributes to add to the webview tag. See [webview documentation](http://electron.atom.io/docs/api/web-view-tag/#tag-attributes). * `visible` (default: `true`): set this to `false` if you don't want to display the tab once it is loaded. If set to `false` then you will need to call `tab.show()` to display the tab. * `active` (default: `false`): set this to `true` if you want to activate the tab once it is loaded. Otherwise you will need to call `tab.activate()`. * `ready`: a callback function to call once the tab is ready. The `Tab` instance is passed as the only parameter. +* `webviewAttributes`: attributes to add to the webview tag. See [webview documentation](http://electron.atom.io/docs/api/web-view-tag/#tag-attributes). + +### `tabGroup.setDefaultTab(options)` + +Define default options to use for creating the tab when the "New Tab" button is clicked or when calling `tabGroup.addTab()` with no parameter. + +```javascript +tabGroup.setDefaultTab({ + title: "New Page", + src: "path/to/new-page.html", + active: true +}); +``` #### `tabGroup.getTab(id)` @@ -123,17 +133,17 @@ To get the tab in the rightmost position: tabGroup.getTabByPosition(-1); ``` -> Note: Position 0 does not contain a tab. - #### `tabGroup.getTabByRelPosition(position)` Retrieve an instance of `Tab` from this `position` relative to the active tab (return `null` if not found). + `tabGroup.getNextTab()` is an alias to `tabGroup.getTabByRelPosition(1)`. + `tabGroup.getPreviousTab()` is an alias to `tabGroup.getTabByRelPosition(-1)`. #### `tabGroup.getActiveTab()` -Return the currently active tab (otherwise return `null`). +Return the active tab (return `null` if none). #### `tabGroup.getTabs()` @@ -179,7 +189,7 @@ Get current tab icon URL / icon. #### `tab.setPosition(newPosition)` -Move tab to the specified position. If `position` is 0 then `null` is returned and nothing happens. See [`tabGroup.getTabByPosition`](#tabgroupgettabbypositionposition) for information about positions. +Move tab to the specified position. See [`tabGroup.getTabByPosition`](#tabgroupgettabbypositionposition) for information about positions. #### `tab.getPosition(fromRight)` @@ -193,30 +203,17 @@ Activate this tab. The class "active" is added to the active tab. Toggle the "visible" class on the tab. `tab.hide()` is an alias to `tab.show(false)`. -#### `tab.flash(flag)` - -Toggle the "flash" class on the tab. `tab.unflash()` is an alias to `tab.flash(false)`. - #### `tab.hasClass(classname)` -Return `true` if the tab element has the specified classname. Useful for checking if a tab is "active", "visible" of "flash". +Return `true` if the tab element has the specified classname. Useful for checking if a tab is "active" or "visible". #### `tab.close(force)` Close the tab (and activate another tab if relevant). When `force` is set to `true` the tab will be closed even if it is not `closable`. -### Access webview element +## Events -You can access the webview element and use its methods with through the `Tab.webview` attribute. See [webview documentation](https://electronjs.org/docs/api/webview-tag#methods). - -```javascript -let webview = tab.webview; -webview.loadURL("file://path/to/new/page.html"); -``` - -### Events - -The following events are available: +The following events are emitted: * `tabGroup.on("tab-added", (tab, tabGroup) => { ... });` * `tabGroup.on("tab-removed", (tab, tabGroup) => { ... });` @@ -230,8 +227,6 @@ The following events are available: * `tab.on("inactive", (tab) => { ... });` * `tab.on("visible", (tab) => { ... });` * `tab.on("hidden", (tab) => { ... });` -* `tab.on("flash", (tab) => { ... });` -* `tab.on("unflash", (tab) => { ... });` * `tab.on("close", (tab) => { ... });` * `tab.on("closing", (tab, abort) => { ... });` (Use `abort()` function to cancel closing) @@ -240,37 +235,100 @@ You can also use `tab.once` to automatically remove the listener when invoked: * `tab.once("webview-ready", (tab) => { ... });` * `tab.once("webview-dom-ready", (tab) => { ... });` -## Drag and drop support +## Access Electron webview element -Electron-tabs is compatible with [Dragula](https://github.com/bevacqua/dragula) so you can easily make your tabs draggable. - -Install Dragula: - -``` -npm install dragula --save -``` - -Don't forget to add a link to its stylesheet in the header: - -```html - -``` - -Then call Dragula in your script once tabGroup is ready: +You can access the webview element and use its methods with through the `Tab.webview` attribute. See [webview documentation](https://electronjs.org/docs/api/webview-tag#methods). ```javascript -const TabGroup = require("electron-tabs"); -const dragula = require("dragula"); +let webview = tab.webview; +webview.loadURL("file://path/to/new/page.html"); +``` -var tabGroup = new TabGroup({ - ready: function (tabGroup) { - dragula([tabGroup.tabContainer], { - direction: "horizontal" - }); - } -}); +## Custom styles + +To customize tab-group styles, set new values to [electron-tabs CSS variables](https://github.com/brrd/electron-tabs/blob/master/src/style.css) in your application stylesheet. + +Since `TabGroup` is a Web Component you won't be able to change its styles directly from your app stylesheet. If you need more control over it then you can add a ` + +``` + +This method is particularly useful when you need to define custom badges or tab styles: + +```html + + + + + + + +``` + +## Development + +`electron-tabs` uses TypeScript and Parcel under the hood. + +### Requirements + +Git and Node 12+. + +### Build + +```bash +# Clone this repo +git clone git@github.com:brrd/electron-tabs.git +cd electron-tabs + +# Install dependencies +npm install + +# Build +npm run build + +# ...or watch +npm run watch +``` + +### Demo + +```bash +npm run demo ``` ## License -The MIT License (MIT) - Copyright (c) 2016 Thomas Brouard +The MIT License (MIT) - Copyright (c) 2022 Thomas Brouard diff --git a/screenshot.jpg b/screenshot.jpg index 07dcfd7b4cffd71f9190039320dc1512adc1afd9..76c777beb4a433f603c5400c1ec510e16b97ad4e 100644 GIT binary patch literal 159061 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 P&^hsKGH8+H@7ezY@^0+C literal 297951 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�!kWX3VN8hT>gl*y%8EzNEhUwOkg1y# zSkaE~8eBcs(jr5Hyha>q!EBYmuWL~mBzB#2vE|YiB*uvZWN+S^K^GJc5qj-cTv$fTW4;6Va&R%H&C=Kz zK&gYvEol}ce+ei|TDXv)Uq8^{K~k$Kt#%L<+>kb%C<)CK6&Cl_Pvq0cQBAu?y9v{WQsIwJkCn;f8~=$H_6b|>u7PXt0WFhe_ z0a0ftp0e^^n{GNg!dudJm+O5NOsf>(8jEqXE99yb)nANAlWNGBb znyVFlifHhu$A0qS>O^1X<$OK!#c$g~!h+GpcqVShHUW|Ij$b2-f2OfUh$Aj3=;AeL z=A3r?3R6moq?6Lfh6Vs{HJMA05yTpHZL7@2l9cjpW zcawLLsMMzI24-b`4Jv5G;6sf`E-YVd$@|BXO90c7WsuBML#4F|`D=Q)&#rl-`upMY({fuD@(sfscuRvf}v9O?~kn970r^ z{9Olb4q4P3e0DeNU|{8%5T2rk;VDp z5lwL_|7Deu#U2fLwPiO{aWIIcNn2F|F)U;zx-0CMMk~=>vgQ>-@G}8TaR2HWSbLZk zCN!Uo9M#9jIBOKTpfP5>--Sv$dAJ$IH<2k=0ME>_+eB)$yCn8{y)j;{=dYuaoMi97 z4}d(D9DQ<~_x98*CEt`NCTvmp;z?vYtt z`0cfcg3tV%rpf0#FO9Dg9TJ@s;qW>d366)mXy$?^>;qpRN055e2mud#e}B%n`gr}Q zp`+Sla-@&?9nv}1-7kOCX};P^=JWKQ0p1)W%siIx0Giz}zZ$U2RMM12;6fEp+9dp< zoxYNWD@2iu7cusE$`Q_nBFt*sKwle$Zf|K90+gLyTVe*E%S!FeCcAa5SWp#!TU7~$el1!Z4}h;m#|E**OTAa zm(L=o0hfs6ttr&b!5!%THCIgjr4d>kXU%)G{PPjEu_jR5Gk>%V-SE8zhok?~w z8LNU1k3X@bAu$uOHtM`SY@{JgYBYmr|2T=nDCVp~MmXl+`{n~bn-E>5Rh5cxJV4Xk z^XZnjAh~Cg{W({g%qhTtEj1}{f>tbW#c;wV^2N!#v%W70y7vflyP_cJX`JWFaA-i= z2F6yM0%C~gXFzO_;tUJVjN|a15iuC%bBJAa0ORZ zp-xcQJaIm|5N-P9-m{4{0llWcHZEIKYK+I}B?A%Z054DOUBw>G{D1ThvW1SBxFIa_ zd<)gZHp$tWJX~p``gllJ8t|4z$qTl8GkXY5IPo`DMGY@krQEyu_gbORv R!Qa7A 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%0D07Md3Y>ThWLg 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 Date: Wed, 25 May 2022 17:22:49 +0200 Subject: [PATCH 35/35] Version 1.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 39e8896..d4732f7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "electron-tabs", - "version": "1.0.0-dev", + "version": "1.0.0", "description": "Simple tabs for Electron applications", "main": "dist/electron-tabs.js", "types": "dist/electron-tabs.d.ts",